var xRn=Object.create;var{getPrototypeOf:CRn,defineProperty:WPe,getOwnPropertyNames:IRn}=Object;var _nt=Object.prototype.hasOwnProperty;function bRn(e){return this[e]}var SRn,PRn,Rt=(e,t,n)=>{var o=e!=null&&typeof e==="object";if(o){var i=t?SRn??=new WeakMap:PRn??=new WeakMap,r=i.get(e);if(r)return r}n=e!=null?xRn(CRn(e)):{};let s=t||!e||!e.__esModule||!_nt.call(e,"default")?WPe(n,"default",{value:e,enumerable:!0}):n;if(e&&typeof e==="object"||typeof e==="function"){for(let a of IRn(e))if(!_nt.call(s,a))WPe(s,a,{get:bRn.bind(e,a),enumerable:!0})}if(o)i.set(e,s);return s};var ct=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var vRn=(e)=>e;function ERn(e,t){this[e]=vRn.bind(null,t)}var sce=(e,t)=>{for(var n in t)WPe(e,n,{get:t[n],enumerable:!0,configurable:!0,set:ERn.bind(t,n)})};var Ks=(e,t,n)=>()=>{if(e)try{t=e(e=0)}catch(o){n=[o]}if(n)throw n[0];return t};var $O=((e)=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(e,{get:(t,n)=>(typeof require<"u"?require:t)[n]}):e)(function(e){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+e+'" is not supported')});var lo=ct(function(MRn,ace){(function(){function e(Re,Je){Object.defineProperty(o.prototype,Re,{get:function(){console.warn("%s(...) is deprecated in plain JavaScript React classes. %s",Je[0],Je[1])}})}function t(Re){if(Re===null||typeof Re!=="object")return null;return Re=he&&Re[he]||Re["@@iterator"],typeof Re==="function"?Re:null}function n(Re,Je){Re=(Re=Re.constructor)&&(Re.displayName||Re.name)||"ReactClass";var Ve=Re+"."+Je;ue[Ve]||(console.error("Can't call %s on a component that is not yet mounted. This is a no-op, but it might indicate a bug in your application. Instead, assign to `this.state` directly or define a `state = {};` class property with the desired state in the %s component.",Je,Re),ue[Ve]=!0)}function o(Re,Je,Ve){this.props=Re,this.context=Je,this.refs=Pe,this.updater=Ve||Ae}function i(){}function r(Re,Je,Ve){this.props=Re,this.context=Je,this.refs=Pe,this.updater=Ve||Ae}function s(){}function a(Re){return""+Re}function c(Re){try{a(Re);var Je=!1}catch(mt){Je=!0}if(Je){Je=console;var Ve=Je.error,Ye=typeof Symbol==="function"&&Symbol.toStringTag&&Re[Symbol.toStringTag]||Re.constructor.name||"Object";return Ve.call(Je,"The provided key is an unsupported type %s. This value must be coerced to a string before using it here.",Ye),a(Re)}}function l(Re){if(Re==null)return null;if(typeof Re==="function")return Re.$$typeof===be?null:Re.displayName||Re.name||null;if(typeof Re==="string")return Re;switch(Re){case V:return"Fragment";case j:return"Profiler";case W:return"StrictMode";case oe:return"Suspense";case ie:return"SuspenseList";case se:return"Activity";case le:return"ViewTransition"}if(typeof Re==="object")switch(typeof Re.tag==="number"&&console.error("Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue."),Re.$$typeof){case X:return"Portal";case ne:return Re.displayName||"Context";case q:return(Re._context.displayName||"Context")+".Consumer";case ce:var Je=Re.render;return Re=Re.displayName,Re||(Re=Je.displayName||Je.name||"",Re=Re!==""?"ForwardRef("+Re+")":"ForwardRef"),Re;case J:return Je=Re.displayName||null,Je!==null?Je:l(Re.type)||"Memo";case ee:Je=Re._payload,Re=Re._init;try{return l(Re(Je))}catch(Ve){}}return null}function d(Re){if(Re===V)return"<>";if(typeof Re==="object"&&Re!==null&&Re.$$typeof===ee)return"<...>";try{var Je=l(Re);return Je?"<"+Je+">":"<...>"}catch(Ve){return"<...>"}}function u(){var Re=me.A;return Re===null?null:Re.getOwner()}function h(){return Error("react-stack-top-frame")}function A(Re){if(ye.call(Re,"key")){var Je=Object.getOwnPropertyDescriptor(Re,"key").get;if(Je&&Je.isReactWarning)return!1}return Re.key!==void 0}function m(Re,Je){function Ve(){ve||(ve=!0,console.error("%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://react.dev/link/special-props)",Je))}Ve.isReactWarning=!0,Object.defineProperty(Re,"key",{get:Ve,configurable:!0})}function p(){var Re=l(this.type);return Ze[Re]||(Ze[Re]=!0,console.error("Accessing element.ref was removed in React 19. ref is now a regular prop. It will be removed from the JSX Element type in a future release.")),Re=this.props.ref,Re!==void 0?Re:null}function g(Re,Je,Ve,Ye,mt,ft){var Oe=Ve.ref;return Re={$$typeof:U,type:Re,key:Je,props:Ve,_owner:Ye},(Oe!==void 0?Oe:null)!==null?Object.defineProperty(Re,"ref",{enumerable:!1,get:p}):Object.defineProperty(Re,"ref",{enumerable:!1,value:null}),Re._store={},Object.defineProperty(Re._store,"validated",{configurable:!1,enumerable:!1,writable:!0,value:0}),Object.defineProperty(Re,"_debugInfo",{configurable:!1,enumerable:!1,writable:!0,value:null}),Object.defineProperty(Re,"_debugStack",{configurable:!1,enumerable:!1,writable:!0,value:mt}),Object.defineProperty(Re,"_debugTask",{configurable:!1,enumerable:!1,writable:!0,value:ft}),Object.freeze&&(Object.freeze(Re.props),Object.freeze(Re)),Re}function _(Re,Je){return Je=g(Re.type,Je,Re.props,Re._owner,Re._debugStack,Re._debugTask),Re._store&&(Je._store.validated=Re._store.validated),Je}function f(Re){y(Re)?Re._store&&(Re._store.validated=1):typeof Re==="object"&&Re!==null&&Re.$$typeof===ee&&(Re._payload.status==="fulfilled"?y(Re._payload.value)&&Re._payload.value._store&&(Re._payload.value._store.validated=1):Re._store&&(Re._store.validated=1))}function y(Re){return typeof Re==="object"&&Re!==null&&Re.$$typeof===U}function x(Re){var Je={"=":"=0",":":"=2"};return"$"+Re.replace(/[=:]/g,function(Ve){return Je[Ve]})}function C(Re,Je){return typeof Re==="object"&&Re!==null&&Re.key!=null?(c(Re.key),x(""+Re.key)):Je.toString(36)}function I(Re){switch(Re.status){case"fulfilled":return Re.value;case"rejected":throw Re.reason;default:switch(typeof Re.status==="string"?Re.then(s,s):(Re.status="pending",Re.then(function(Je){Re.status==="pending"&&(Re.status="fulfilled",Re.value=Je)},function(Je){Re.status==="pending"&&(Re.status="rejected",Re.reason=Je)})),Re.status){case"fulfilled":return Re.value;case"rejected":throw Re.reason}}throw Re}function b(Re,Je,Ve,Ye,mt){var ft=typeof Re;if(ft==="undefined"||ft==="boolean")Re=null;var Oe=!1;if(Re===null)Oe=!0;else switch(ft){case"bigint":case"string":case"number":Oe=!0;break;case"object":switch(Re.$$typeof){case U:case X:Oe=!0;break;case ee:return Oe=Re._init,b(Oe(Re._payload),Je,Ve,Ye,mt)}}if(Oe){Oe=Re,mt=mt(Oe);var qe=Ye===""?"."+C(Oe,0):Ye;return Te(mt)?(Ve="",qe!=null&&(Ve=qe.replace(it,"$&/")+"/"),b(mt,Je,Ve,"",function(Ct){return Ct})):mt!=null&&(y(mt)&&(mt.key!=null&&(Oe&&Oe.key===mt.key||c(mt.key)),Ve=_(mt,Ve+(mt.key==null||Oe&&Oe.key===mt.key?"":(""+mt.key).replace(it,"$&/")+"/")+qe),Ye!==""&&Oe!=null&&y(Oe)&&Oe.key==null&&Oe._store&&!Oe._store.validated&&(Ve._store.validated=2),mt=Ve),Je.push(mt)),1}if(Oe=0,qe=Ye===""?".":Ye+":",Te(Re))for(var rt=0;rt<Re.length;rt++)Ye=Re[rt],ft=qe+C(Ye,rt),Oe+=b(Ye,Je,Ve,ft,mt);else if(rt=t(Re),typeof rt==="function")for(rt===Re.entries&&(lt||console.warn("Using Maps as children is not supported. Use an array of keyed ReactElements instead."),lt=!0),Re=rt.call(Re),rt=0;!(Ye=Re.next()).done;)Ye=Ye.value,ft=qe+C(Ye,rt++),Oe+=b(Ye,Je,Ve,ft,mt);else if(ft==="object"){if(typeof Re.then==="function")return b(I(Re),Je,Ve,Ye,mt);throw Je=String(Re),Error("Objects are not valid as a React child (found: "+(Je==="[object Object]"?"object with keys {"+Object.keys(Re).join(", ")+"}":Je)+"). If you meant to render a collection of children, use an array instead.")}return Oe}function P(Re,Je,Ve){if(Re==null)return Re;var Ye=[],mt=0;return b(Re,Ye,"","",function(ft){return Je.call(Ve,ft,mt++)}),Ye}function E(Re){if(Re._status===-1){var Je=null,Ve=null,Ye=Re._ioInfo;Ye!=null&&(Ye.start=Ye.end=performance.now(),Ye.value=new Promise(function(Oe,qe){Je=Oe,Ve=qe})),Ye=Re._result;var mt=Ye();if(mt.then(function(Oe){if(Re._status===0||Re._status===-1){Re._status=1,Re._result=Oe;var qe=Re._ioInfo;if(qe!=null){qe.end=performance.now();var rt=Oe==null?void 0:Oe.default;Je(rt),qe.value.status="fulfilled",qe.value.value=rt}mt.status===void 0&&(mt.status="fulfilled",mt.value=Oe)}},function(Oe){if(Re._status===0||Re._status===-1){Re._status=2,Re._result=Oe;var qe=Re._ioInfo;qe!=null&&(qe.end=performance.now(),qe.value.then(s,s),Ve(Oe),qe.value.status="rejected",qe.value.reason=Oe),mt.status===void 0&&(mt.status="rejected",mt.reason=Oe)}}),Ye=Re._ioInfo,Ye!=null){var ft=mt.displayName;typeof ft==="string"&&(Ye.name=ft)}Re._status===-1&&(Re._status=0,Re._result=mt)}if(Re._status===1)return Ye=Re._result,Ye===void 0&&console.error(`lazy: Expected the result of a dynamic import() call. Instead received: %s
Your code should look like:
const MyComponent = lazy(() => import('./MyComponent'))
Did you accidentally put curly braces around the import?`,Ye),"default"in Ye||console.error(`lazy: Expected the result of a dynamic import() call. Instead received: %s
Your code should look like:
const MyComponent = lazy(() => import('./MyComponent'))`,Ye),Ye.default;throw Re._result}function B(){var Re=me.H;return Re===null&&console.error(`Invalid hook call. Hooks can only be called inside of the body of a function component. This could happen for one of the following reasons:
1. You might have mismatching versions of React and the renderer (such as React DOM)
2. You might be breaking the Rules of Hooks
3. You might have more than one copy of React in the same app
See https://react.dev/link/invalid-hook-call for tips about how to debug and fix this problem.`),Re}function w(){me.asyncTransitions--}function T(Re){var Je=me.T,Ve={};Ve.types=Je!==null?Je.types:null,Ve._updatedFibers=new Set,me.T=Ve;try{var Ye=Re(),mt=me.S;mt!==null&&mt(Ve,Ye),typeof Ye==="object"&&Ye!==null&&typeof Ye.then==="function"&&(me.asyncTransitions++,Ye.then(w,w),Ye.then(s,gt))}catch(ft){gt(ft)}finally{Je===null&&Ve._updatedFibers&&(Re=Ve._updatedFibers.size,Ve._updatedFibers.clear(),10<Re&&console.warn("Detected a large number of updates inside startTransition. If this is due to a subscription please re-write it to use React provided hooks. Otherwise concurrent mode guarantees are off the table.")),Je!==null&&Ve.types!==null&&(Je.types!==null&&Je.types!==Ve.types&&console.error("We expected inner Transitions to have transferred the outer types set and that you cannot add to the outer Transition while inside the inner.This is a bug in React."),Je.types=Ve.types),me.T=Je}}function Q(Re){var Je=me.T;if(Je!==null){var Ve=Je.types;Ve===null?Je.types=[Re]:Ve.indexOf(Re)===-1&&Ve.push(Re)}else me.asyncTransitions===0&&console.error("addTransitionType can only be called inside a `startTransition()` callback. It must be associated with a specific Transition."),T(Q.bind(null,Re))}function N(Re){if(Dt===null)try{var Je=("require"+Math.random()).slice(0,7);Dt=(ace&&ace[Je]).call(ace,"timers").setImmediate}catch(Ve){Dt=function(Ye){wt===!1&&(wt=!0,typeof MessageChannel>"u"&&console.error("This browser does not have a MessageChannel implementation, so enqueuing tasks via await act(async () => ...) will fail. Please file an issue at https://github.com/facebook/react/issues if you encounter this warning."));var mt=new MessageChannel;mt.port1.onmessage=Ye,mt.port2.postMessage(void 0)}}return Dt(Re)}function F(Re){return 1<Re.length&&typeof AggregateError==="function"?AggregateError(Re):Re[0]}function H(Re,Je){Je!==vt-1&&console.error("You seem to have overlapping act() calls, this is not supported. Be sure to await previous act() calls before making a new one. "),vt=Je}function z(Re,Je,Ve){var Ye=me.actQueue;if(Ye!==null)if(Ye.length!==0)try{Y(Ye),N(function(){return z(Re,Je,Ve)});return}catch(mt){me.thrownErrors.push(mt)}else me.actQueue=null;0<me.thrownErrors.length?(Ye=F(me.thrownErrors),me.thrownErrors.length=0,Ve(Ye)):Je(Re)}function Y(Re){if(!Xt){Xt=!0;var Je=0;try{for(;Je<Re.length;Je++){var Ve=Re[Je];do{me.didUsePromise=!1;var Ye=Ve(!1);if(Ye!==null){if(me.didUsePromise){Re[Je]=Ve,Re.splice(0,Je);return}Ve=Ye}else break}while(1)}Re.length=0}catch(mt){Re.splice(0,Je+1),me.thrownErrors.push(mt)}finally{Xt=!1}}}typeof __REACT_DEVTOOLS_GLOBAL_HOOK__<"u"&&typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart==="function"&&__REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(Error());var U=Symbol.for("react.transitional.element"),X=Symbol.for("react.portal"),V=Symbol.for("react.fragment"),W=Symbol.for("react.strict_mode"),j=Symbol.for("react.profiler"),q=Symbol.for("react.consumer"),ne=Symbol.for("react.context"),ce=Symbol.for("react.forward_ref"),oe=Symbol.for("react.suspense"),ie=Symbol.for("react.suspense_list"),J=Symbol.for("react.memo"),ee=Symbol.for("react.lazy"),se=Symbol.for("react.activity"),le=Symbol.for("react.view_transition"),he=Symbol.iterator,ue={},Ae={isMounted:function(){return!1},enqueueForceUpdate:function(Re){n(Re,"forceUpdate")},enqueueReplaceState:function(Re){n(Re,"replaceState")},enqueueSetState:function(Re){n(Re,"setState")}},_e=Object.assign,Pe={};Object.freeze(Pe),o.prototype.isReactComponent={},o.prototype.setState=function(Re,Je){if(typeof Re!=="object"&&typeof Re!=="function"&&Re!=null)throw Error("takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,Re,Je,"setState")},o.prototype.forceUpdate=function(Re){this.updater.enqueueForceUpdate(this,Re,"forceUpdate")};var Ee={isMounted:["isMounted","Instead, make sure to clean up subscriptions and pending requests in componentWillUnmount to prevent memory leaks."],replaceState:["replaceState","Refactor your code to use setState instead (see https://github.com/facebook/react/issues/3236)."]};for(je in Ee)Ee.hasOwnProperty(je)&&e(je,Ee[je]);i.prototype=o.prototype,Ee=r.prototype=new i,Ee.constructor=r,_e(Ee,o.prototype),Ee.isPureReactComponent=!0;var Te=Array.isArray,be=Symbol.for("react.client.reference"),me={H:null,A:null,T:null,S:null,actQueue:null,asyncTransitions:0,isBatchingLegacy:!1,didScheduleLegacyUpdate:!1,didUsePromise:!1,thrownErrors:[],getCurrentStack:null,recentlyCreatedOwnerStacks:0},ye=Object.prototype.hasOwnProperty,Ce=console.createTask?console.createTask:function(){return null};Ee={react_stack_bottom_frame:function(Re){return Re()}};var ve,De,Ze={},st=Ee.react_stack_bottom_frame.bind(Ee,h)(),et=Ce(d(h)),lt=!1,it=/\/+/g,gt=typeof reportError==="function"?reportError:function(Re){if(typeof window==="object"&&typeof window.ErrorEvent==="function"){var Je=new window.ErrorEvent("error",{bubbles:!0,cancelable:!0,message:typeof Re==="object"&&Re!==null&&typeof Re.message==="string"?String(Re.message):String(Re),error:Re});if(!window.dispatchEvent(Je))return}else if(typeof process==="object"&&typeof process.emit==="function"){process.emit("uncaughtException",Re);return}console.error(Re)},wt=!1,Dt=null,vt=0,Ht=!1,Xt=!1,ut=typeof queueMicrotask==="function"?function(Re){queueMicrotask(function(){return queueMicrotask(Re)})}:N;Ee=Object.freeze({__proto__:null,c:function(Re){return B().useMemoCache(Re)}});var je={map:P,forEach:function(Re,Je,Ve){P(Re,function(){Je.apply(this,arguments)},Ve)},count:function(Re){var Je=0;return P(Re,function(){Je++}),Je},toArray:function(Re){return P(Re,function(Je){return Je})||[]},only:function(Re){if(!y(Re))throw Error("React.Children.only expected to receive a single React element child.");return Re}};MRn.Activity=se,MRn.Children=je,MRn.Component=o,MRn.Fragment=V,MRn.Profiler=j,MRn.PureComponent=r,MRn.StrictMode=W,MRn.Suspense=oe,MRn.ViewTransition=le,MRn.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE=me,MRn.__COMPILER_RUNTIME=Ee,MRn.act=function(Re){var Je=me.actQueue,Ve=vt;vt++;var Ye=me.actQueue=Je!==null?Je:[],mt=!1;try{var ft=Re()}catch(rt){me.thrownErrors.push(rt)}if(0<me.thrownErrors.length)throw H(Je,Ve),Re=F(me.thrownErrors),me.thrownErrors.length=0,Re;if(ft!==null&&typeof ft==="object"&&typeof ft.then==="function"){var Oe=ft;return ut(function(){mt||Ht||(Ht=!0,console.error("You called act(async () => ...) without await. This could lead to unexpected testing behaviour, interleaving multiple act calls and mixing their scopes. You should - await act(async () => ...);"))}),{then:function(rt,Ct){mt=!0,Oe.then(function(Mt){if(H(Je,Ve),Ve===0){try{Y(Ye),N(function(){return z(Mt,rt,Ct)})}catch(Ot){me.thrownErrors.push(Ot)}if(0<me.thrownErrors.length){var Nt=F(me.thrownErrors);me.thrownErrors.length=0,Ct(Nt)}}else rt(Mt)},function(Mt){H(Je,Ve),0<me.thrownErrors.length?(Mt=F(me.thrownErrors),me.thrownErrors.length=0,Ct(Mt)):Ct(Mt)})}}}var qe=ft;if(H(Je,Ve),Ve===0&&(Y(Ye),Ye.length!==0&&ut(function(){mt||Ht||(Ht=!0,console.error("A component suspended inside an `act` scope, but the `act` call was not awaited. When testing React components that depend on asynchronous data, you must await the result:\n\nawait act(() => ...)"))}),me.actQueue=null),0<me.thrownErrors.length)throw Re=F(me.thrownErrors),me.thrownErrors.length=0,Re;return{then:function(rt,Ct){mt=!0,Ve===0?(me.actQueue=Ye,N(function(){return z(qe,rt,Ct)})):rt(qe)}}},MRn.addTransitionType=Q,MRn.cache=function(Re){return function(){return Re.apply(null,arguments)}},MRn.cacheSignal=function(){return null},MRn.captureOwnerStack=function(){var Re=me.getCurrentStack;return Re===null?null:Re()},MRn.cloneElement=function(Re,Je,Ve){if(Re===null||Re===void 0)throw Error("The argument must be a React element, but you passed "+Re+".");var Ye=_e({},Re.props),{key:mt,_owner:ft}=Re;if(Je!=null){var Oe;e:{if(ye.call(Je,"ref")&&(Oe=Object.getOwnPropertyDescriptor(Je,"ref").get)&&Oe.isReactWarning){Oe=!1;break e}Oe=Je.ref!==void 0}Oe&&(ft=u()),A(Je)&&(c(Je.key),mt=""+Je.key);for(qe in Je)!ye.call(Je,qe)||qe==="key"||qe==="__self"||qe==="__source"||qe==="ref"&&Je.ref===void 0||(Ye[qe]=Je[qe])}var qe=arguments.length-2;if(qe===1)Ye.children=Ve;else if(1<qe){Oe=Array(qe);for(var rt=0;rt<qe;rt++)Oe[rt]=arguments[rt+2];Ye.children=Oe}Ye=g(Re.type,mt,Ye,ft,Re._debugStack,Re._debugTask);for(mt=2;mt<arguments.length;mt++)f(arguments[mt]);return Ye},MRn.createContext=function(Re){return Re={$$typeof:ne,_currentValue:Re,_currentValue2:Re,_threadCount:0,Provider:null,Consumer:null},Re.Provider=Re,Re.Consumer={$$typeof:q,_context:Re},Re._currentRenderer=null,Re._currentRenderer2=null,Re},MRn.createElement=function(Re,Je,Ve){for(var Ye=2;Ye<arguments.length;Ye++)f(arguments[Ye]);var mt;Ye={};var ft=null;if(Je!=null)for(mt in De||!("__self"in Je)||"key"in Je||(De=!0,console.warn("Your app (or one of its dependencies) is using an outdated JSX transform. Update to the modern JSX transform for faster performance: https://react.dev/link/new-jsx-transform")),A(Je)&&(c(Je.key),ft=""+Je.key),Je)ye.call(Je,mt)&&mt!=="key"&&mt!=="__self"&&mt!=="__source"&&(Ye[mt]=Je[mt]);var Oe=arguments.length-2;if(Oe===1)Ye.children=Ve;else if(1<Oe){for(var qe=Array(Oe),rt=0;rt<Oe;rt++)qe[rt]=arguments[rt+2];Object.freeze&&Object.freeze(qe),Ye.children=qe}if(Re&&Re.defaultProps)for(mt in Oe=Re.defaultProps,Oe)Ye[mt]===void 0&&(Ye[mt]=Oe[mt]);return ft&&m(Ye,typeof Re==="function"?Re.displayName||Re.name||"Unknown":Re),(mt=1e4>me.recentlyCreatedOwnerStacks++)?(qe=Error.stackTraceLimit,Error.stackTraceLimit=10,Oe=Error("react-stack-top-frame"),Error.stackTraceLimit=qe):Oe=st,g(Re,ft,Ye,u(),Oe,mt?Ce(d(Re)):et)},MRn.createRef=function(){var Re={current:null};return Object.seal(Re),Re},MRn.forwardRef=function(Re){Re!=null&&Re.$$typeof===J?console.error("forwardRef requires a render function but received a `memo` component. Instead of forwardRef(memo(...)), use memo(forwardRef(...))."):typeof Re!=="function"?console.error("forwardRef requires a render function but was given %s.",Re===null?"null":typeof Re):Re.length!==0&&Re.length!==2&&console.error("forwardRef render functions accept exactly two parameters: props and ref. %s",Re.length===1?"Did you forget to use the ref parameter?":"Any additional parameter will be undefined."),Re!=null&&Re.defaultProps!=null&&console.error("forwardRef render functions do not support defaultProps. Did you accidentally pass a React component?");var Je={$$typeof:ce,render:Re},Ve;return Object.defineProperty(Je,"displayName",{enumerable:!1,configurable:!0,get:function(){return Ve},set:function(Ye){Ve=Ye,Re.name||Re.displayName||(Object.defineProperty(Re,"name",{value:Ye}),Re.displayName=Ye)}}),Je},MRn.isValidElement=y,MRn.lazy=function(Re){Re={_status:-1,_result:Re};var Je={$$typeof:ee,_payload:Re,_init:E},Ve={name:"lazy",start:-1,end:-1,value:null,owner:null,debugStack:Error("react-stack-top-frame"),debugTask:console.createTask?console.createTask("lazy()"):null};return Re._ioInfo=Ve,Je._debugInfo=[{awaited:Ve}],Je},MRn.memo=function(Re,Je){Re==null&&console.error("memo: The first argument must be a component. Instead received: %s",Re===null?"null":typeof Re),Je={$$typeof:J,type:Re,compare:Je===void 0?null:Je};var Ve;return Object.defineProperty(Je,"displayName",{enumerable:!1,configurable:!0,get:function(){return Ve},set:function(Ye){Ve=Ye,Re.name||Re.displayName||(Object.defineProperty(Re,"name",{value:Ye}),Re.displayName=Ye)}}),Je},MRn.startTransition=T,MRn.unstable_useCacheRefresh=function(){return B().useCacheRefresh()},MRn.use=function(Re){return B().use(Re)},MRn.useActionState=function(Re,Je,Ve){return B().useActionState(Re,Je,Ve)},MRn.useCallback=function(Re,Je){return B().useCallback(Re,Je)},MRn.useContext=function(Re){var Je=B();return Re.$$typeof===q&&console.error("Calling useContext(Context.Consumer) is not supported and will cause bugs. Did you mean to call useContext(Context) instead?"),Je.useContext(Re)},MRn.useDebugValue=function(Re,Je){return B().useDebugValue(Re,Je)},MRn.useDeferredValue=function(Re,Je){return B().useDeferredValue(Re,Je)},MRn.useEffect=function(Re,Je){return Re==null&&console.warn("React Hook useEffect requires an effect callback. Did you forget to pass a callback to the hook?"),B().useEffect(Re,Je)},MRn.useEffectEvent=function(Re){return B().useEffectEvent(Re)},MRn.useId=function(){return B().useId()},MRn.useImperativeHandle=function(Re,Je,Ve){return B().useImperativeHandle(Re,Je,Ve)},MRn.useInsertionEffect=function(Re,Je){return Re==null&&console.warn("React Hook useInsertionEffect requires an effect callback. Did you forget to pass a callback to the hook?"),B().useInsertionEffect(Re,Je)},MRn.useLayoutEffect=function(Re,Je){return Re==null&&console.warn("React Hook useLayoutEffect requires an effect callback. Did you forget to pass a callback to the hook?"),B().useLayoutEffect(Re,Je)},MRn.useMemo=function(Re,Je){return B().useMemo(Re,Je)},MRn.useOptimistic=function(Re,Je){return B().useOptimistic(Re,Je)},MRn.useReducer=function(Re,Je,Ve){return B().useReducer(Re,Je,Ve)},MRn.useRef=function(Re){return B().useRef(Re)},MRn.useState=function(Re){return B().useState(Re)},MRn.useSyncExternalStore=function(Re,Je,Ve){return B().useSyncExternalStore(Re,Je,Ve)},MRn.useTransition=function(){return B().useTransition()},MRn.version="19.3.1",typeof __REACT_DEVTOOLS_GLOBAL_HOOK__<"u"&&typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop==="function"&&__REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(Error())})()});var gnt=ct(function(ZO){(function(){function e(){if(x=!1,P){var F=ZO.unstable_now();w=F;var H=!0;try{e:{f=!1,y&&(y=!1,I(E),E=-1),_=!0;var z=g;try{t:{r(F);for(p=n(h);p!==null&&!(p.expirationTime>F&&a());){var Y=p.callback;if(typeof Y==="function"){p.callback=null,g=p.priorityLevel;var U=Y(p.expirationTime<=F);if(F=ZO.unstable_now(),typeof U==="function"){p.callback=U,r(F),H=!0;break t}p===n(h)&&o(h),r(F)}else o(h);p=n(h)}if(p!==null)H=!0;else{var X=n(A);X!==null&&c(s,X.startTime-F),H=!1}}break e}finally{p=null,g=z,_=!1}H=void 0}}finally{H?T():P=!1}}}function t(F,H){var z=F.length;F.push(H);e:for(;0<z;){var Y=z-1>>>1,U=F[Y];if(0<i(U,H))F[Y]=H,F[z]=U,z=Y;else break e}}function n(F){return F.length===0?null:F[0]}function o(F){if(F.length===0)return null;var H=F[0],z=F.pop();if(z!==H){F[0]=z;e:for(var Y=0,U=F.length,X=U>>>1;Y<X;){var V=2*(Y+1)-1,W=F[V],j=V+1,q=F[j];if(0>i(W,z))j<U&&0>i(q,W)?(F[Y]=q,F[j]=z,Y=j):(F[Y]=W,F[V]=z,Y=V);else if(j<U&&0>i(q,z))F[Y]=q,F[j]=z,Y=j;else break e}}return H}function i(F,H){var z=F.sortIndex-H.sortIndex;return z!==0?z:F.id-H.id}function r(F){for(var H=n(A);H!==null;){if(H.callback===null)o(A);else if(H.startTime<=F)o(A),H.sortIndex=H.expirationTime,t(h,H);else break;H=n(A)}}function s(F){if(y=!1,r(F),!f)if(n(h)!==null)f=!0,P||(P=!0,T());else{var H=n(A);H!==null&&c(s,H.startTime-F)}}function a(){return x?!0:ZO.unstable_now()-w<B?!1:!0}function c(F,H){E=C(function(){F(ZO.unstable_now())},H)}if(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__<"u"&&typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart==="function"&&__REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(Error()),ZO.unstable_now=void 0,typeof performance==="object"&&typeof performance.now==="function"){var l=performance;ZO.unstable_now=function(){return l.now()}}else{var d=Date,u=d.now();ZO.unstable_now=function(){return d.now()-u}}var h=[],A=[],m=1,p=null,g=3,_=!1,f=!1,y=!1,x=!1,C=typeof setTimeout==="function"?setTimeout:null,I=typeof clearTimeout==="function"?clearTimeout:null,b=typeof setImmediate<"u"?setImmediate:null,P=!1,E=-1,B=5,w=-1;if(typeof b==="function")var T=function(){b(e)};else if(typeof MessageChannel<"u"){var Q=new MessageChannel,N=Q.port2;Q.port1.onmessage=e,T=function(){N.postMessage(null)}}else T=function(){C(e,0)};ZO.unstable_IdlePriority=5,ZO.unstable_ImmediatePriority=1,ZO.unstable_LowPriority=4,ZO.unstable_NormalPriority=3,ZO.unstable_Profiling=null,ZO.unstable_UserBlockingPriority=2,ZO.unstable_cancelCallback=function(F){F.callback=null},ZO.unstable_forceFrameRate=function(F){0>F||125<F?console.error("forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported"):B=0<F?Math.floor(1000/F):5},ZO.unstable_getCurrentPriorityLevel=function(){return g},ZO.unstable_next=function(F){switch(g){case 1:case 2:case 3:var H=3;break;default:H=g}var z=g;g=H;try{return F()}finally{g=z}},ZO.unstable_requestPaint=function(){x=!0},ZO.unstable_runWithPriority=function(F,H){switch(F){case 1:case 2:case 3:case 4:case 5:break;default:F=3}var z=g;g=F;try{return H()}finally{g=z}},ZO.unstable_scheduleCallback=function(F,H,z){var Y=ZO.unstable_now();switch(typeof z==="object"&&z!==null?(z=z.delay,z=typeof z==="number"&&0<z?Y+z:Y):z=Y,F){case 1:var U=-1;break;case 2:U=250;break;case 5:U=1073741823;break;case 4:U=1e4;break;default:U=5000}return U=z+U,F={id:m++,callback:H,priorityLevel:F,startTime:z,expirationTime:U,sortIndex:-1},z>Y?(F.sortIndex=z,t(A,F),n(h)===null&&F===n(A)&&(y?(I(E),E=-1):y=!0,c(s,z-Y))):(F.sortIndex=U,t(h,F),f||_||(f=!0,P||(P=!0,T()))),F},ZO.unstable_shouldYield=a,ZO.unstable_wrapCallback=function(F){var H=g;return function(){var z=g;g=H;try{return F.apply(this,arguments)}finally{g=z}}},typeof __REACT_DEVTOOLS_GLOBAL_HOOK__<"u"&&typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop==="function"&&__REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(Error())})()});var fnt=ct(function(BRn){var XPe=Rt(lo());(function(){function e(){}function t(h){return""+h}function n(h,A,m){var p=3<arguments.length&&arguments[3]!==void 0?arguments[3]:null;if(p==null)p=null;else if(p===d)p=d;else{try{t(p);var g=!1}catch(_){g=!0}g&&(console.error("The provided key is an unsupported type %s. This value must be coerced to a string before using it here.",typeof Symbol==="function"&&Symbol.toStringTag&&p[Symbol.toStringTag]||p.constructor.name||"Object"),t(p)),p=""+p}return{$$typeof:c,key:p,children:h,containerInfo:A,implementation:m}}function o(h,A){if(h==="font")return"";if(typeof A==="string")return A==="use-credentials"?A:""}function i(h){return h===null?"`null`":h===void 0?"`undefined`":h===""?"an empty string":'something with type "'+typeof h+'"'}function r(h){return h===null?"`null`":h===void 0?"`undefined`":h===""?"an empty string":typeof h==="string"?JSON.stringify(h):typeof h==="number"?"`"+h+"`":'something with type "'+typeof h+'"'}function s(){var h=u.H;return h===null&&console.error(`Invalid hook call. Hooks can only be called inside of the body of a function component. This could happen for one of the following reasons:
1. You might have mismatching versions of React and the renderer (such as React DOM)
2. You might be breaking the Rules of Hooks
3. You might have more than one copy of React in the same app
See https://react.dev/link/invalid-hook-call for tips about how to debug and fix this problem.`),h}typeof __REACT_DEVTOOLS_GLOBAL_HOOK__<"u"&&typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart==="function"&&__REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(Error());var a={d:{f:e,r:function(){throw Error("Invalid form element. requestFormReset must be passed a form that was rendered by React.")},D:e,C:e,L:e,m:e,X:e,S:e,M:e},p:0,findDOMNode:null},c=Symbol.for("react.portal"),l=Symbol.for("react.recoverable"),d=Symbol.for("react.optimistic_key"),u=XPe.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE;typeof Map==="function"&&Map.prototype!=null&&typeof Map.prototype.forEach==="function"&&typeof Set==="function"&&Set.prototype!=null&&typeof Set.prototype.clear==="function"&&typeof Set.prototype.forEach==="function"||console.error("React depends on Map and Set built-in types. Make sure that you load a polyfill in older browsers. https://reactjs.org/link/react-polyfills"),BRn.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE=a,BRn.browser=function(h){return{$$typeof:l,_reason:h}},BRn.createPortal=function(h,A){var m=2<arguments.length&&arguments[2]!==void 0?arguments[2]:null;if(!A||A.nodeType!==1&&A.nodeType!==9&&A.nodeType!==11)throw Error("Target container is not a DOM element.");return n(h,A,null,m)},BRn.flushSync=function(h){var A=u.T,m=a.p;try{if(u.T=null,a.p=2,h)return h()}finally{u.T=A,a.p=m,a.d.f()&&console.error("flushSync was called from inside a lifecycle method. React cannot flush when React is already rendering. Consider moving this call to a scheduler task or micro task.")}},BRn.preconnect=function(h,A){typeof h==="string"&&h?A!=null&&typeof A!=="object"?console.error("ReactDOM.preconnect(): Expected the `options` argument (second) to be an object but encountered %s instead. The only supported option at this time is `crossOrigin` which accepts a string.",r(A)):A!=null&&typeof A.crossOrigin!=="string"&&console.error("ReactDOM.preconnect(): Expected the `crossOrigin` option (second argument) to be a string but encountered %s instead. Try removing this option or passing a string value instead.",i(A.crossOrigin)):console.error("ReactDOM.preconnect(): Expected the `href` argument (first) to be a non-empty string but encountered %s instead.",i(h)),typeof h==="string"&&(A?(A=A.crossOrigin,A=typeof A==="string"?A==="use-credentials"?A:"":void 0):A=null,a.d.C(h,A))},BRn.prefetchDNS=function(h){if(typeof h!=="string"||!h)console.error("ReactDOM.prefetchDNS(): Expected the `href` argument (first) to be a non-empty string but encountered %s instead.",i(h));else if(1<arguments.length){var A=arguments[1];typeof A==="object"&&A.hasOwnProperty("crossOrigin")?console.error("ReactDOM.prefetchDNS(): Expected only one argument, `href`, but encountered %s as a second argument instead. This argument is reserved for future options and is currently disallowed. It looks like the you are attempting to set a crossOrigin property for this DNS lookup hint. Browsers do not perform DNS queries using CORS and setting this attribute on the resource hint has no effect. Try calling ReactDOM.prefetchDNS() with just a single string argument, `href`.",r(A)):console.error("ReactDOM.prefetchDNS(): Expected only one argument, `href`, but encountered %s as a second argument instead. This argument is reserved for future options and is currently disallowed. Try calling ReactDOM.prefetchDNS() with just a single string argument, `href`.",r(A))}typeof h==="string"&&a.d.D(h)},BRn.preinit=function(h,A){if(typeof h==="string"&&h?A==null||typeof A!=="object"?console.error("ReactDOM.preinit(): Expected the `options` argument (second) to be an object with an `as` property describing the type of resource to be preinitialized but encountered %s instead.",r(A)):A.as!=="style"&&A.as!=="script"&&console.error('ReactDOM.preinit(): Expected the `as` property in the `options` argument (second) to contain a valid value describing the type of resource to be preinitialized but encountered %s instead. Valid values for `as` are "style" and "script".',r(A.as)):console.error("ReactDOM.preinit(): Expected the `href` argument (first) to be a non-empty string but encountered %s instead.",i(h)),typeof h==="string"&&A&&typeof A.as==="string"){var m=A.as,p=o(m,A.crossOrigin),g=typeof A.integrity==="string"?A.integrity:void 0,_=typeof A.fetchPriority==="string"?A.fetchPriority:void 0;m==="style"?a.d.S(h,typeof A.precedence==="string"?A.precedence:void 0,{crossOrigin:p,integrity:g,fetchPriority:_}):m==="script"&&a.d.X(h,{crossOrigin:p,integrity:g,fetchPriority:_,nonce:typeof A.nonce==="string"?A.nonce:void 0})}},BRn.preinitModule=function(h,A){var m="";if(typeof h==="string"&&h||(m+=" The `href` argument encountered was "+i(h)+"."),A!==void 0&&typeof A!=="object"?m+=" The `options` argument encountered was "+i(A)+".":A&&("as"in A)&&A.as!=="script"&&(m+=" The `as` option encountered was "+r(A.as)+"."),m)console.error("ReactDOM.preinitModule(): Expected up to two arguments, a non-empty `href` string and, optionally, an `options` object with a valid `as` property.%s",m);else switch(m=A&&typeof A.as==="string"?A.as:"script",m){case"script":break;default:m=r(m),console.error('ReactDOM.preinitModule(): Currently the only supported "as" type for this function is "script" but received "%s" instead. This warning was generated for `href` "%s". In the future other module types will be supported, aligning with the import-attributes proposal. Learn more here: (https://github.com/tc39/proposal-import-attributes)',m,h)}if(typeof h==="string")if(typeof A==="object"&&A!==null){if(A.as==null||A.as==="script")m=o(A.as,A.crossOrigin),a.d.M(h,{crossOrigin:m,integrity:typeof A.integrity==="string"?A.integrity:void 0,nonce:typeof A.nonce==="string"?A.nonce:void 0,fetchPriority:typeof A.fetchPriority==="string"?A.fetchPriority:void 0})}else A==null&&a.d.M(h)},BRn.preload=function(h,A){var m="";if(typeof h==="string"&&h||(m+=" The `href` argument encountered was "+i(h)+"."),A==null||typeof A!=="object"?m+=" The `options` argument encountered was "+i(A)+".":typeof A.as==="string"&&A.as||(m+=" The `as` option encountered was "+i(A.as)+"."),m&&console.error('ReactDOM.preload(): Expected two arguments, a non-empty `href` string and an `options` object with an `as` property valid for a `<link rel="preload" as="..." />` tag.%s',m),typeof h==="string"&&typeof A==="object"&&A!==null&&typeof A.as==="string"){m=A.as;var p=o(m,A.crossOrigin);a.d.L(h,m,{crossOrigin:p,integrity:typeof A.integrity==="string"?A.integrity:void 0,nonce:typeof A.nonce==="string"?A.nonce:void 0,type:typeof A.type==="string"?A.type:void 0,fetchPriority:typeof A.fetchPriority==="string"?A.fetchPriority:void 0,referrerPolicy:typeof A.referrerPolicy==="string"?A.referrerPolicy:void 0,imageSrcSet:typeof A.imageSrcSet==="string"?A.imageSrcSet:void 0,imageSizes:typeof A.imageSizes==="string"?A.imageSizes:void 0,media:typeof A.media==="string"?A.media:void 0})}},BRn.preloadModule=function(h,A){var m="";typeof h==="string"&&h||(m+=" The `href` argument encountered was "+i(h)+"."),A!==void 0&&typeof A!=="object"?m+=" The `options` argument encountered was "+i(A)+".":A&&("as"in A)&&typeof A.as!=="string"&&(m+=" The `as` option encountered was "+i(A.as)+"."),m&&console.error('ReactDOM.preloadModule(): Expected two arguments, a non-empty `href` string and, optionally, an `options` object with an `as` property valid for a `<link rel="modulepreload" as="..." />` tag.%s',m),typeof h==="string"&&(A?(m=o(A.as,A.crossOrigin),a.d.m(h,{as:typeof A.as==="string"&&A.as!=="script"?A.as:void 0,crossOrigin:m,integrity:typeof A.integrity==="string"?A.integrity:void 0,nonce:typeof A.nonce==="string"?A.nonce:void 0,fetchPriority:typeof A.fetchPriority==="string"?A.fetchPriority:void 0})):a.d.m(h))},BRn.requestFormReset=function(h){a.d.r(h)},BRn.unstable_batchedUpdates=function(h,A){return h(A)},BRn.useFormState=function(h,A,m){return s().useFormState(h,A,m)},BRn.useFormStatus=function(){return s().useHostTransitionStatus()},BRn.version="19.3.1",typeof __REACT_DEVTOOLS_GLOBAL_HOOK__<"u"&&typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop==="function"&&__REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(Error())})()});var ez=ct(function(wRn,cce){cce.exports=Rt(fnt())});var ynt=ct(function(TRn){var Tc=Rt(gnt()),tz=Rt(lo()),KPe=Rt(ez());(function(){function e(S,M){for(S=S.memoizedState;S!==null&&0<M;)S=S.next,M--;return S}function t(S,M,R,G){if(R>=M.length)return G;var te=M[R],re=uh(S)?S.slice():Qs({},S);return re[te]=t(S[te],M,R+1,G),re}function n(S,M,R){if(M.length!==R.length)console.warn("copyWithRename() expects paths of the same length");else{for(var G=0;G<R.length-1;G++)if(M[G]!==R[G]){console.warn("copyWithRename() expects paths to be the same except for the deepest key");return}return o(S,M,R,0)}}function o(S,M,R,G){var te=M[G],re=uh(S)?S.slice():Qs({},S);return G+1===M.length?(re[R[G]]=re[te],uh(re)?re.splice(te,1):delete re[te]):re[te]=o(S[te],M,R,G+1),re}function i(S,M,R){var G=M[R],te=uh(S)?S.slice():Qs({},S);if(R+1===M.length)return uh(te)?te.splice(G,1):delete te[G],te;return te[G]=i(S[G],M,R+1),te}function r(){return!1}function s(){return null}function a(){console.error("Do not call Hooks inside useEffect(...), useMemo(...), or other built-in Hooks. You can only call Hooks at the top level of your React function. For more information, see https://react.dev/link/rules-of-hooks")}function c(){console.error("Context can only be read while React is rendering. In classes, you can read it in the render method or getDerivedStateFromProps. In function components, you can read it directly in the function body, but not inside Hooks like useReducer() or useMemo().")}function l(){}function d(){}function u(S){var M=[];return S.forEach(function(R){M.push(R)}),M.sort().join(", ")}function h(S,M,R,G){return new _s(S,M,R,G)}function A(S,M){S.context===Rw&&(GC(S.current,2,M,S,null,null),Zb())}function m(S,M){if(lM!==null){var R=M.staleFamilies;M=M.updatedFamilies,Mf(),Vs(S.current,M,R),Zb()}}function p(S){lM=S}function g(S){return!(!S||S.nodeType!==1&&S.nodeType!==9&&S.nodeType!==11)}function _(S){for(var M=S,R=M;R&&!R.alternate;)M=R,(M.flags&4098)!==0&&(S=M.return),R=M.return;for(;M.return;)M=M.return;return M.tag===3?S:null}function f(S){if(S.tag===13){var M=S.memoizedState;if(M===null&&(S=S.alternate,S!==null&&(M=S.memoizedState)),M!==null)return M.dehydrated}return null}function y(S){if(S.tag===31){var M=S.memoizedState;if(M===null&&(S=S.alternate,S!==null&&(M=S.memoizedState)),M!==null)return M.dehydrated}return null}function x(S){if(_(S)!==S)throw Error("Unable to find node on an unmounted component.")}function C(S){var M=S.alternate;if(!M){if(M=_(S),M===null)throw Error("Unable to find node on an unmounted component.");return M!==S?null:S}for(var R=S,G=M;;){var te=R.return;if(te===null)break;var re=te.alternate;if(re===null){if(G=te.return,G!==null){R=G;continue}break}if(te.child===re.child){for(re=te.child;re;){if(re===R)return x(te),S;if(re===G)return x(te),M;re=re.sibling}throw Error("Unable to find node on an unmounted component.")}if(R.return!==G.return)R=te,G=re;else{for(var Se=!1,Me=te.child;Me;){if(Me===R){Se=!0,R=te,G=re;break}if(Me===G){Se=!0,G=te,R=re;break}Me=Me.sibling}if(!Se){for(Me=re.child;Me;){if(Me===R){Se=!0,R=re,G=te;break}if(Me===G){Se=!0,G=re,R=te;break}Me=Me.sibling}if(!Se)throw Error("Child was not found in either parent set. This indicates a bug in React related to the return pointer. Please file an issue.")}}if(R.alternate!==G)throw Error("Return fibers should always be each others' alternates. This error is likely caused by a bug in React. Please file an issue.")}if(R.tag!==3)throw Error("Unable to find node on an unmounted component.");return R.stateNode.current===R?S:M}function I(S){var M=S.tag;if(M===5||M===26||M===27||M===6)return S;for(S=S.child;S!==null;){if(M=I(S),M!==null)return M;S=S.sibling}return null}function b(S,M,R,G,te){P(S.child,!1,M,R,G,te)}function P(S,M,R,G,te,re){for(;S!==null;){if((S.tag===5||S.tag===27||S.tag===6)&&R(S,G,te,re)||(S.tag!==22||S.memoizedState===null)&&(M||S.tag!==5&&S.tag!==27)&&P(S.child,M,R,G,te,re))return!0;S=S.sibling}return!1}function E(S){for(S=S.return;S!==null;){if(S.tag===3||S.tag===5||S.tag===27)return S;S=S.return}return null}function B(S){var M=!1;for(S=S.return;S!==null;){if(S.tag===4&&(M=!0),S.tag===3||S.tag===5||S.tag===27)break;S=S.return}return M}function w(S){var M=[null,null],R=E(S);if(R===null)return M;return T(M,S,R.child,{foundSelf:!1}),M}function T(S,M,R,G){for(;R!==null;){if(R===M)G.foundSelf=!0;else if(R.tag===5||R.tag===27||R.tag===6){if(G.foundSelf)return S[1]=R,!0;S[0]=R}else if((R.tag!==22||R.memoizedState===null)&&T(S,M,R.child,G))return!0;R=R.sibling}return!1}function Q(S){switch(S.tag){case 5:case 27:case 6:return S.stateNode;case 3:return S.stateNode.containerInfo;default:throw Error("Expected to find a host node. This is a bug in React.")}}function N(S,M,R){return S===R?!0:S===M?(H2=S,!0):!1}function F(S,M,R){return S===R?(nM=S,!1):S===M?(nM!==null&&(H2=S),!0):!1}function H(S){if(S===null)return null;do S=S===null?null:S.return;while(S&&S.tag!==5&&S.tag!==27&&S.tag!==3);return S?S:null}function z(S,M,R){for(var G=0,te=S;te;te=R(te))G++;te=0;for(var re=M;re;re=R(re))te++;for(;0<G-te;)S=R(S),G--;for(;0<te-G;)M=R(M),te--;for(;G--;){if(S===M||M!==null&&S===M.alternate)return S;S=R(S),M=R(M)}return null}function Y(S){if(S===null||typeof S!=="object")return null;return S=qN&&S[qN]||S["@@iterator"],typeof S==="function"?S:null}function U(S){if(S==null)return null;if(typeof S==="function")return S.$$typeof===hO?null:S.displayName||S.name||null;if(typeof S==="string")return S;switch(S){case sv:return"Fragment";case dO:return"Profiler";case jN:return"StrictMode";case uO:return"Suspense";case i0:return"SuspenseList";case dh:return"Activity";case av:return"ViewTransition"}if(typeof S==="object")switch(typeof S.tag==="number"&&console.error("Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue."),S.$$typeof){case rv:return"Portal";case Kc:return S.displayName||"Context";case z2:return(S._context.displayName||"Context")+".Consumer";case Sw:var M=S.render;return S=S.displayName,S||(S=M.displayName||M.name||"",S=S!==""?"ForwardRef("+S+")":"ForwardRef"),S;case y5:return M=S.displayName||null,M!==null?M:U(S.type)||"Memo";case W0:M=S._payload,S=S._init;try{return U(S(M))}catch(R){}}return null}function X(S){return typeof S.tag==="number"?V(S):typeof S.name==="string"?S.name:null}function V(S){var M=S.type;switch(S.tag){case 31:return"Activity";case 24:return"Cache";case 9:return(M._context.displayName||"Context")+".Consumer";case 10:return M.displayName||"Context";case 18:return"DehydratedFragment";case 11:return S=M.render,S=S.displayName||S.name||"",M.displayName||(S!==""?"ForwardRef("+S+")":"ForwardRef");case 7:return"Fragment";case 26:case 27:case 5:return M;case 4:return"Portal";case 3:return"Root";case 6:return"Text";case 16:return U(M);case 8:return M===jN?"StrictMode":"Mode";case 22:if(S.return!==null)return V(S.return);break;case 12:return"Profiler";case 21:return"Scope";case 13:return"Suspense";case 19:return"SuspenseList";case 25:return"TracingMarker";case 30:return"ViewTransition";case 1:case 0:case 14:case 15:if(typeof M==="function")return M.displayName||M.name||null;if(typeof M==="string")return M;break;case 29:if(M=S._debugInfo,M!=null){for(var R=M.length-1;0<=R;R--)if(typeof M[R].name==="string")return M[R].name}if(S.return!==null)return V(S.return)}return null}function W(S){return{current:S}}function j(S,M){0>Ou?console.error("Unexpected pop."):(M!==uj[Ou]&&console.error("Unexpected Fiber popped."),S.current=Pw[Ou],Pw[Ou]=null,uj[Ou]=null,Ou--)}function q(S,M,R){Ou++,Pw[Ou]=S.current,uj[Ou]=R,S.current=M}function ne(S){return S===null&&console.error("Expected host context to exist. This error is likely caused by a bug in React. Please file an issue."),S}function ce(S,M){q(pA,M,S),q(mA,S,S),q(zu,null,S);var R=M.nodeType;switch(R){case 9:case 11:R=R===9?"#document":"#fragment",M=(M=M.documentElement)?(M=M.namespaceURI)?a5(M):yM:yM;break;default:if(R=M.tagName,M=M.namespaceURI)M=a5(M),M=K4(M,R);else switch(R){case"svg":M=KO;break;case"math":M=Zae;break;default:M=yM}}R=R.toLowerCase(),R=B0(null,R),R={context:M,ancestorInfo:R},j(zu,S),q(zu,R,S)}function oe(S){j(zu,S),j(mA,S),j(pA,S)}function ie(){return ne(zu.current)}function J(S){var M=S.memoizedState;M!==null&&(qO._currentValue=M.memoizedState,q(cv,S,S)),M=ne(zu.current);var R=S.type,G=K4(M.context,R);R=B0(M.ancestorInfo,R),G={context:G,ancestorInfo:R},M!==G&&(q(mA,S,S),q(zu,G,S))}function ee(S){mA.current===S&&(j(zu,S),j(mA,S)),cv.current===S&&(j(cv,S),qO._currentValue=ER)}function se(){}function le(){if(XC===0){mO=console.log,lv=console.info,$N=console.warn,hj=console.error,Ma=console.group,Ll=console.groupCollapsed,ea=console.groupEnd;var S={configurable:!0,enumerable:!0,value:se,writable:!0};Object.defineProperties(console,{info:S,log:S,warn:S,error:S,group:S,groupCollapsed:S,groupEnd:S})}XC++}function he(){if(XC--,XC===0){var S={configurable:!0,enumerable:!0,writable:!0};Object.defineProperties(console,{log:Qs({},S,{value:mO}),info:Qs({},S,{value:lv}),warn:Qs({},S,{value:$N}),error:Qs({},S,{value:hj}),group:Qs({},S,{value:Ma}),groupCollapsed:Qs({},S,{value:Ll}),groupEnd:Qs({},S,{value:ea})})}0>XC&&console.error("disabledDepth fell below zero. This is a bug in React. Please file an issue.")}function ue(S){var M=Error.prepareStackTrace;if(Error.prepareStackTrace=void 0,S=S.stack,Error.prepareStackTrace=M,S.startsWith(`Error: react-stack-top-frame
`)&&(S=S.slice(29)),M=S.indexOf(`
`),M!==-1&&(S=S.slice(M+1)),M=S.indexOf("react_stack_bottom_frame"),M!==-1&&(M=S.lastIndexOf(`
`,M)),M!==-1)S=S.slice(0,M);else return"";return S}function Ae(S){if(ta===void 0)try{throw Error()}catch(R){var M=R.stack.trim().match(/\n( *(at )?)/);ta=M&&M[1]||"",P_=-1<R.stack.indexOf(`
at`)?" (<anonymous>)":-1<R.stack.indexOf("@")?"@unknown:0:0":""}return`
`+ta+S+P_}function _e(S,M){if(!S||oM)return"";var R=x5.get(S);if(R!==void 0)return R;oM=!0,R=Error.prepareStackTrace,Error.prepareStackTrace=void 0;var G=null;G=Dn.H,Dn.H=null,le();try{var te={DetermineComponentFrameRoot:function(){try{if(M){var Kt=function(){throw Error()};if(Object.defineProperty(Kt.prototype,"props",{set:function(){throw Error()}}),typeof Reflect==="object"&&Reflect.construct){try{Reflect.construct(Kt,[])}catch(ui){var un=ui}Reflect.construct(S,[],Kt)}else{try{Kt.call()}catch(ui){un=ui}Kt=!1;try{var ho=Object.getOwnPropertyDescriptor(S.prototype,"props");Object.defineProperty(S.prototype,"props",{configurable:!0,set:function(){throw Error()}}),Kt=!0,new S}finally{Kt&&(ho!==void 0?Object.defineProperty(S.prototype,"props",ho):delete S.prototype.props)}}}else{try{throw Error()}catch(ui){un=ui}(Kt=S())&&typeof Kt.catch==="function"&&Kt.catch(function(){})}}catch(ui){if(ui&&un&&typeof ui.stack==="string")return[ui.stack,un.stack]}return[null,null]}};te.DetermineComponentFrameRoot.displayName="DetermineComponentFrameRoot";var re=Object.getOwnPropertyDescriptor(te.DetermineComponentFrameRoot,"name");re&&re.configurable&&Object.defineProperty(te.DetermineComponentFrameRoot,"name",{value:"DetermineComponentFrameRoot"});var Se=te.DetermineComponentFrameRoot(),Me=Se[0],$e=Se[1];if(Me&&$e){var dt=Me.split(`
`),Bt=$e.split(`
`);for(Se=re=0;re<dt.length&&!dt[re].includes("DetermineComponentFrameRoot");)re++;for(;Se<Bt.length&&!Bt[Se].includes("DetermineComponentFrameRoot");)Se++;if(re===dt.length||Se===Bt.length)for(re=dt.length-1,Se=Bt.length-1;1<=re&&0<=Se&&dt[re]!==Bt[Se];)Se--;for(;1<=re&&0<=Se;re--,Se--)if(dt[re]!==Bt[Se]){if(re!==1||Se!==1)do if(re--,Se--,0>Se||dt[re]!==Bt[Se]){var qt=`
`+dt[re].replace(" at new "," at ");return S.displayName&&qt.includes("<anonymous>")&&(qt=qt.replace("<anonymous>",S.displayName)),typeof S==="function"&&x5.set(S,qt),qt}while(1<=re&&0<=Se);break}}}finally{oM=!1,Dn.H=G,he(),Error.prepareStackTrace=R}return dt=(dt=S?S.displayName||S.name:"")?Ae(dt):"",typeof S==="function"&&x5.set(S,dt),dt}function Pe(S,M){switch(S.tag){case 26:case 27:case 5:return Ae(S.type);case 16:return Ae("Lazy");case 13:return S.child!==M&&M!==null?Ae("Suspense Fallback"):Ae("Suspense");case 19:return Ae("SuspenseList");case 0:case 15:return _e(S.type,!1);case 11:return _e(S.type.render,!1);case 1:return _e(S.type,!0);case 31:return Ae("Activity");case 30:return Ae("ViewTransition");default:return""}}function Ee(S){try{var M="",R=null;do{M+=Pe(S,R);var G=S._debugInfo;if(G)for(var te=G.length-1;0<=te;te--){var re=G[te];if(typeof re.name==="string"){var Se=M;e:{var{name:Me,env:$e,debugLocation:dt}=re;if(dt!=null){var Bt=ue(dt),qt=Bt.lastIndexOf(`
`),Kt=qt===-1?Bt:Bt.slice(qt+1);if(Kt.indexOf(Me)!==-1){var un=`
`+Kt;break e}}un=Ae(Me+($e?" ["+$e+"]":""))}M=Se+un}}R=S,S=S.return}while(S);return M}catch(ho){return`
Error generating stack: `+ho.message+`
`+ho.stack}}function Te(S){return(S=S?S.displayName||S.name:"")?Ae(S):""}function be(){if(bp===null)return null;var S=bp._debugOwner;return S!=null?X(S):null}function me(){if(bp===null)return"";var S=bp;try{var M="";switch(S.tag===6&&(S=S.return),S.tag){case 26:case 27:case 5:M+=Ae(S.type);break;case 13:M+=Ae("Suspense");break;case 19:M+=Ae("SuspenseList");break;case 31:M+=Ae("Activity");break;case 30:M+=Ae("ViewTransition");break;case 0:case 15:case 1:S._debugOwner||M!==""||(M+=Te(S.type));break;case 11:S._debugOwner||M!==""||(M+=Te(S.type.render))}for(;S;)if(typeof S.tag==="number"){var R=S;S=R._debugOwner;var G=R._debugStack;if(S&&G){var te=ue(G);te!==""&&(M+=`
`+te)}}else if(S.debugStack!=null){var re=S.debugStack;(S=S.owner)&&re&&(M+=`
`+ue(re))}else break;var Se=M}catch(Me){Se=`
Error generating stack: `+Me.message+`
`+Me.stack}return Se}function ye(S,M,R,G,te,re,Se){var Me=bp;Ce(S);try{return S!==null&&S._debugTask?S._debugTask.run(M.bind(null,R,G,te,re,Se)):M(R,G,te,re,Se)}finally{Ce(Me)}throw Error("runWithFiberInDEV should never be called in production. This is a bug in React.")}function Ce(S){Dn.getCurrentStack=S===null?null:me,Y2=!1,bp=S}function ve(S){return typeof Symbol==="function"&&Symbol.toStringTag&&S[Symbol.toStringTag]||S.constructor.name||"Object"}function De(S){try{return Ze(S),!1}catch(M){return!0}}function Ze(S){return""+S}function st(S,M){if(De(S))return console.error("The provided `%s` attribute is an unsupported type %s. This value must be coerced to a string before using it here.",M,ve(S)),Ze(S)}function et(S,M){if(De(S))return console.error("The provided `%s` CSS property is an unsupported type %s. This value must be coerced to a string before using it here.",M,ve(S)),Ze(S)}function lt(S){if(De(S))return console.error("Form field values (value, checked, defaultValue, or defaultChecked props) must be strings, not %s. This value must be coerced to a string before using it here.",ve(S)),Ze(S)}function it(S){if(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__>"u")return!1;var M=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(M.isDisabled)return!0;if(!M.supportsFiber)return console.error("The installed version of React DevTools is too old and will not work with the current version of React. Please update React DevTools. https://react.dev/link/react-devtools"),!0;try{Av=M.inject(S),Fl=M}catch(R){console.error("React instrumentation encountered an error: %o.",R)}return M.checkDCE?!0:!1}function gt(S){if(typeof mv==="function"&&pv(S),Fl&&typeof Fl.setStrictMode==="function")try{Fl.setStrictMode(Av,S)}catch(M){AA||(AA=!0,console.error("React instrumentation encountered an error: %o",M))}}function wt(S){return S>>>=0,S===0?32:31-(pO(S)/pj|0)|0}function Dt(S){var M=S&42;if(M!==0)return M;switch(S&-S){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:return 64;case 128:return 128;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:return S&-S;case 262144:case 524288:case 1048576:case 2097152:return S&3932160;case 4194304:case 8388608:case 16777216:case 33554432:return S&62914560;case 67108864:return 67108864;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 0;default:return console.error("Should have found matching lanes. This is a bug in React."),S}}function vt(S,M,R){var G=S.pendingLanes;if(G===0)return 0;var te=0,re=S.suspendedLanes,Se=S.pingedLanes;S=S.warmLanes;var Me=G&134217727;return Me!==0?(G=Me&~re,G!==0?te=Dt(G):(Se&=Me,Se!==0?te=Dt(Se):R||(R=Me&~S,R!==0&&(te=Dt(R))))):(Me=G&~re,Me!==0?te=Dt(Me):Se!==0?te=Dt(Se):R||(R=G&~S,R!==0&&(te=Dt(R)))),te===0?0:M!==0&&M!==te&&(M&re)===0&&(re=te&-te,R=M&-M,re>=R||re===32&&(R&4194048)!==0)?M:te}function Ht(S,M){return(S.pendingLanes&~(S.suspendedLanes&~S.pingedLanes)&M)===0}function Xt(S,M){(M&8)!==0&&(M|=M&32);var R=S.entangledLanes;if(R!==0)for(S=S.entanglements,R&=M;0<R;){var G=31-yl(R),te=1<<G;M|=S[G],R&=~te}return M}function ut(S,M){switch(S){case 1:case 2:case 4:case 8:case 64:return M+250;case 16:case 32:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return M+5000;case 4194304:case 8388608:case 16777216:case 33554432:return-1;case 67108864:case 134217728:case 268435456:case 536870912:case 1073741824:return-1;default:return console.error("Should have found matching lanes. This is a bug in React."),-1}}function je(){var S=vw;return vw<<=1,(vw&62914560)===0&&(vw=4194304),S}function Re(S){for(var M=[],R=0;31>R;R++)M.push(S);return M}function Je(S,M){S.pendingLanes|=M,M!==268435456&&(S.suspendedLanes=0,S.pingedLanes=0,S.warmLanes=0)}function Ve(S,M,R,G,te,re){var Se=S.pendingLanes;S.pendingLanes=R,S.suspendedLanes=0,S.pingedLanes=0,S.warmLanes=0,S.expiredLanes&=R,S.entangledLanes&=R,S.errorRecoveryDisabledLanes&=R,S.shellSuspendCounter=0;var{entanglements:Me,expirationTimes:$e,hiddenUpdates:dt}=S;for(R=Se&~R;0<R;){var Bt=31-yl(R),qt=1<<Bt;Me[Bt]=0,$e[Bt]=-1;var Kt=dt[Bt];if(Kt!==null)for(dt[Bt]=null,Bt=0;Bt<Kt.length;Bt++){var un=Kt[Bt];un!==null&&(un.lane&=-536870913)}R&=~qt}G!==0&&Ye(S,G,0),re!==0&&te===0&&S.tag!==0&&(S.suspendedLanes|=re&~(Se&~M))}function Ye(S,M,R){S.pendingLanes|=M,S.suspendedLanes&=~M;var G=31-yl(M);S.entangledLanes|=M,S.entanglements[G]=S.entanglements[G]|1073741824|R&261930}function mt(S,M){var R=S.entangledLanes|=M;for(S=S.entanglements;R;){var G=31-yl(R),te=1<<G;te&M|S[G]&M&&(S[G]|=M),R&=~te}}function ft(S,M){var R=M&-M;return R=(R&42)!==0?1:Oe(R),(R&(S.suspendedLanes|M))!==0?0:R}function Oe(S){switch(S){case 2:S=1;break;case 8:S=4;break;case 32:S=16;break;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:case 4194304:case 8388608:case 16777216:case 33554432:S=128;break;case 268435456:S=134217728;break;default:S=0}return S}function qe(S,M,R){if(yg)for(S=S.pendingUpdatersLaneMap;0<R;){var G=31-yl(R),te=1<<G;S[G].add(M),R&=~te}}function rt(S,M){if(yg)for(var R=S.pendingUpdatersLaneMap,G=S.memoizedUpdaters;0<M;){var te=31-yl(M);S=1<<te,te=R[te],0<te.size&&(te.forEach(function(re){var Se=re.alternate;Se!==null&&G.has(Se)||G.add(re)}),te.clear()),M&=~S}}function Ct(S){return S&=-S,X0!==0&&X0<S?Mm!==0&&Mm<S?(S&134217727)!==0?qC:AO:Mm:X0}function Mt(){var S=ac.p;if(S!==0)return S;return S=window.event,S===void 0?qC:g5(S.type)}function Nt(S,M){var R=ac.p;try{return ac.p=S,M()}finally{ac.p=R}}function Ot(S){delete S[Gu],delete S[_A],delete S[TSe],delete S[_j]}function mn(S){var M;if(M=S[Gu])return M;for(var R=S.parentNode;R;){if(M=R[I5]||R[Gu]){if(R=M.alternate,M.child!==null||R!==null&&R.child!==null)for(S=m5(S);S!==null;){if(R=S[Gu])return R;S=m5(S)}return M}S=R,R=S.parentNode}return null}function ln(S){if(S=S[Gu]||S[I5]){var M=S.tag;if(M===5||M===6||M===13||M===31||M===26||M===27||M===3)return S}return null}function Cn(S){var M=S.tag;if(M===5||M===26||M===27||M===6)return S.stateNode;throw Error("getNodeFromInstance: Invalid argument.")}function vn(S){var M=S[Bm];return M||(M=S[Bm]={hoistableStyles:new Map,hoistableScripts:new Map}),M}function nn(S){S[$1]=!0}function on(S){S[b5]=void 0}function Kn(S,M){xo(S,M),xo(S+"Capture",M)}function xo(S,M){P5[S]&&console.error("EventRegistry: More than one plugin attempted to publish the same registration name, `%s`.",S),P5[S]=M;var R=S.toLowerCase();tR[R]=S,S==="onDoubleClick"&&(tR.ondblclick=S);for(S=0;S<M.length;S++)S5.add(M[S])}function ai(S,M){Zse[M.type]||M.onChange||M.onInput||M.readOnly||M.disabled||M.value==null||(S==="select"?console.error("You provided a `value` prop to a form field without an `onChange` handler. This will render a read-only field. If the field should be mutable use `defaultValue`. Otherwise, set `onChange`."):console.error("You provided a `value` prop to a form field without an `onChange` handler. This will render a read-only field. If the field should be mutable use `defaultValue`. Otherwise, set either `onChange` or `readOnly`.")),M.onChange||M.readOnly||M.disabled||M.checked==null||console.error("You provided a `checked` prop to a form field without an `onChange` handler. This will render a read-only field. If the field should be mutable use `defaultChecked`. Otherwise, set either `onChange` or `readOnly`.")}function At(S){if(fg.call(_O,S))return!0;if(fg.call(Ew,S))return!1;if(DSe.test(S))return _O[S]=!0;return Ew[S]=!0,console.error("Invalid attribute name: `%s`",S),!1}function _t(){var S=cc;return cc=!1,S}function Tt(S,M,R){if(At(M)){if(!S.hasAttribute(M)){switch(typeof R){case"symbol":case"object":return R;case"function":return R;case"boolean":if(R===!1)return R}return R===void 0?void 0:null}if(S=M.toLowerCase()==="nonce"?S.nonce:S.getAttribute(M),S===""&&R===!0)return!0;return st(R,M),S===""+R?R:S}}function Ut(S,M,R){if(At(M))if(R===null)S.removeAttribute(M);else{switch(typeof R){case"undefined":case"function":case"symbol":S.removeAttribute(M);return;case"boolean":var G=M.toLowerCase().slice(0,5);if(G!=="data-"&&G!=="aria-"){S.removeAttribute(M);return}}st(R,M),S.setAttribute(M,R)}}function Lt(S,M,R){if(R===null)S.removeAttribute(M);else{switch(typeof R){case"undefined":case"function":case"symbol":case"boolean":S.removeAttribute(M);return}st(R,M),S.setAttribute(M,R)}}function fn(S,M,R,G){if(G===null)S.removeAttribute(R);else{switch(typeof G){case"undefined":case"function":case"symbol":case"boolean":S.removeAttribute(R);return}st(G,R),S.setAttributeNS(M,R,G)}}function On(S){switch(typeof S){case"bigint":case"boolean":case"number":case"string":case"undefined":return S;case"object":return lt(S),S;default:return""}}function Gn(S){var M=S.type;return(S=S.nodeName)&&S.toLowerCase()==="input"&&(M==="checkbox"||M==="radio")}function fo(S,M,R){var G=Object.getOwnPropertyDescriptor(S.constructor.prototype,M);if(!S.hasOwnProperty(M)&&typeof G<"u"&&typeof G.get==="function"&&typeof G.set==="function"){var{get:te,set:re}=G;return Object.defineProperty(S,M,{configurable:!0,get:function(){return te.call(this)},set:function(Se){lt(Se),R=""+Se,re.call(this,Se)}}),Object.defineProperty(S,M,{enumerable:G.enumerable}),{getValue:function(){return R},setValue:function(Se){lt(Se),R=""+Se},stopTracking:function(){S._valueTracker=null,delete S[M]}}}}function Ho(S){if(!S._valueTracker){var M=Gn(S)?"checked":"value";S._valueTracker=fo(S,M,""+S[M])}}function Vn(S){if(!S)return!1;var M=S._valueTracker;if(!M)return!0;var R=M.getValue(),G="";return S&&(G=Gn(S)?S.checked?"true":"false":S.value),S=G,S!==R?(M.setValue(S),!0):!1}function Wn(S){return S.replace(gO,function(M){return"\\"+M.charCodeAt(0).toString(16)+" "})}function Co(S,M){M.checked===void 0||M.defaultChecked===void 0||gv||(console.error("%s contains an input of type %s with both checked and defaultChecked props. Input elements must be either controlled or uncontrolled (specify either the checked prop, or the defaultChecked prop, but not both). Decide between using a controlled or uncontrolled input element and remove one of these props. More info: https://react.dev/link/controlled-components",be()||"A component",M.type),gv=!0),M.value===void 0||M.defaultValue===void 0||eae||(console.error("%s contains an input of type %s with both value and defaultValue props. Input elements must be either controlled or uncontrolled (specify either the value prop, or the defaultValue prop, but not both). Decide between using a controlled or uncontrolled input element and remove one of these props. More info: https://react.dev/link/controlled-components",be()||"A component",M.type),eae=!0)}function Eo(S,M,R,G,te,re,Se,Me){if(S.name="",Se!=null&&typeof Se!=="function"&&typeof Se!=="symbol"&&typeof Se!=="boolean"?(st(Se,"type"),S.type=Se):S.removeAttribute("type"),M!=null)if(Se==="number"){if(M===0&&S.value===""||S.value!=M)S.value=""+On(M)}else S.value!==""+On(M)&&(S.value=""+On(M));else Se!=="submit"&&Se!=="reset"||S.removeAttribute("value");M!=null?Se==="number"&&S.value==M?eo(S,On(S.value)):eo(S,On(M)):R!=null?eo(S,On(R)):G!=null&&S.removeAttribute("value"),te==null&&re!=null&&(S.defaultChecked=!!re),te!=null&&(S.checked=te&&typeof te!=="function"&&typeof te!=="symbol"),Me!=null&&typeof Me!=="function"&&typeof Me!=="symbol"&&typeof Me!=="boolean"?(st(Me,"name"),S.name=""+On(Me)):S.removeAttribute("name")}function In(S,M,R,G,te,re,Se,Me){if(re!=null&&typeof re!=="function"&&typeof re!=="symbol"&&typeof re!=="boolean"&&(st(re,"type"),S.type=re),M!=null||R!=null){if(!(re!=="submit"&&re!=="reset"||M!==void 0&&M!==null)){Ho(S);return}R=R!=null?""+On(R):"",M=M!=null?""+On(M):R,Me||M===S.value||(S.value=M),S.defaultValue=M}G=G!=null?G:te,G=typeof G!=="function"&&typeof G!=="symbol"&&!!G,S.checked=Me?S.checked:!!G,S.defaultChecked=!!G,Se!=null&&typeof Se!=="function"&&typeof Se!=="symbol"&&typeof Se!=="boolean"&&(st(Se,"name"),S.name=Se),Ho(S)}function eo(S,M){S.defaultValue!==""+M&&(S.defaultValue=""+M)}function co(S,M){M.value==null&&(typeof M.children==="object"&&M.children!==null?tz.Children.forEach(M.children,function(R){R==null||typeof R==="string"||typeof R==="number"||typeof R==="bigint"||rM||(rM=!0,console.error("Cannot infer the option value of complex children. Pass a `value` prop or use a plain string as children to <option>."))}):M.dangerouslySetInnerHTML==null||nR||(nR=!0,console.error("Pass a `value` prop if you set dangerouslyInnerHTML so React knows which value should be selected."))),M.selected==null||Mw||(console.error("Use the `defaultValue` or `value` props on <select> instead of setting `selected` on <option>."),Mw=!0)}function $n(){var S=be();return S?`
Check the render method of \``+S+"`.":""}function zo(S,M,R,G){if(S=S.options,M){M={};for(var te=0;te<R.length;te++)M["$"+R[te]]=!0;for(R=0;R<S.length;R++)te=M.hasOwnProperty("$"+S[R].value),S[R].selected!==te&&(S[R].selected=te),te&&G&&(S[R].defaultSelected=!0)}else{R=""+On(R),M=null;for(te=0;te<S.length;te++){if(S[te].value===R){S[te].selected=!0,G&&(S[te].defaultSelected=!0);return}M!==null||S[te].disabled||(M=S[te])}M!==null&&(M.selected=!0)}}function qo(S,M){for(S=0;S<fj.length;S++){var R=fj[S];if(M[R]!=null){var G=uh(M[R]);M.multiple&&!G?console.error("The `%s` prop supplied to <select> must be an array if `multiple` is true.%s",R,$n()):!M.multiple&&G&&console.error("The `%s` prop supplied to <select> must be a scalar value if `multiple` is false.%s",R,$n())}}M.value===void 0||M.defaultValue===void 0||gj||(console.error("Select elements must be either controlled or uncontrolled (specify either the value prop, or the defaultValue prop, but not both). Decide between using a controlled or uncontrolled select element and remove one of these props. More info: https://react.dev/link/controlled-components"),gj=!0)}function fi(S,M){M.value===void 0||M.defaultValue===void 0||tae||(console.error("%s contains a textarea with both value and defaultValue props. Textarea elements must be either controlled or uncontrolled (specify either the value prop, or the defaultValue prop, but not both). Decide between using a controlled or uncontrolled textarea and remove one of these props. More info: https://react.dev/link/controlled-components",be()||"A component"),tae=!0),M.children!=null&&M.value==null&&console.error("Use the `defaultValue` or `value` props instead of setting children on <textarea>.")}function Nr(S,M,R){if(M!=null&&(M=""+On(M),M!==S.value&&(S.value=M),R==null)){S.defaultValue!==M&&(S.defaultValue=M);return}S.defaultValue=R!=null?""+On(R):""}function bs(S,M,R,G){if(M==null){if(G!=null){if(R!=null)throw Error("If you supply `defaultValue` on a <textarea>, do not pass children.");if(uh(G)){if(1<G.length)throw Error("<textarea> can only have at most one child.");G=G[0]}R=G}R==null&&(R=""),M=R}R=On(M),S.defaultValue=R,G=S.textContent,G===R&&G!==""&&G!==null&&(S.value=G),Ho(S)}function Fs(S,M){return S.serverProps===void 0&&S.serverTail.length===0&&S.children.length===1&&3<S.distanceFromLeaf&&S.distanceFromLeaf>15-M?Fs(S.children[0],M):S}function wo(S){return" "+" ".repeat(S)}function wr(S){return"+ "+" ".repeat(S)}function dr(S){return"- "+" ".repeat(S)}function Yr(S){switch(S.tag){case 26:case 27:case 5:return S.type;case 16:return"Lazy";case 31:return"Activity";case 13:return"Suspense";case 19:return"SuspenseList";case 0:case 15:return S=S.type,S.displayName||S.name||null;case 11:return S=S.type.render,S.displayName||S.name||null;case 1:return S=S.type,S.displayName||S.name||null;default:return null}}function mc(S,M){return Qf.test(S)?(S=JSON.stringify(S),S.length>M-2?8>M?'{"..."}':"{"+S.slice(0,M-7)+'..."}':"{"+S+"}"):S.length>M?5>M?'{"..."}':S.slice(0,M-3)+"...":S}function zc(S,M,R){var G=120-2*R;if(M===null)return wr(R)+mc(S,G)+`
`;if(typeof M==="string"){for(var te=0;te<M.length&&te<S.length&&M.charCodeAt(te)===S.charCodeAt(te);te++);return te>G-8&&10<te&&(S="..."+S.slice(te-8),M="..."+M.slice(te-8)),wr(R)+mc(S,G)+`
`+dr(R)+mc(M,G)+`
`}return wo(R)+mc(S,G)+`
`}function nc(S){return Object.prototype.toString.call(S).replace(/^\[object (.*)\]$/,function(M,R){return R})}function Bd(S,M){switch(typeof S){case"string":return S=JSON.stringify(S),S.length>M?5>M?'"..."':S.slice(0,M-4)+'..."':S;case"object":if(S===null)return"null";if(uh(S))return"[...]";if(S.$$typeof===O2)return(M=U(S.type))?"<"+M+">":"<...>";var R=nc(S);if(R==="Object"){R="",M-=2;for(var G in S)if(S.hasOwnProperty(G)){var te=JSON.stringify(G);if(te!=='"'+G+'"'&&(G=te),M-=G.length-2,te=Bd(S[G],15>M?M:15),M-=te.length,0>M){R+=R===""?"...":", ...";break}R+=(R===""?"":",")+G+":"+te}return"{"+R+"}"}return R;case"function":return(M=S.displayName||S.name)?"function "+M:"function";default:return String(S)}}function Mh(S,M){return typeof S!=="string"||Qf.test(S)?"{"+Bd(S,M-2)+"}":S.length>M-2?5>M?'"..."':'"'+S.slice(0,M-5)+'..."':'"'+S+'"'}function Wo(S,M,R){var G=120-R.length-S.length,te=[],re;for(re in M)if(M.hasOwnProperty(re)&&re!=="children"){var Se=Mh(M[re],120-R.length-re.length-1);G-=re.length+Se.length+2,te.push(re+"="+Se)}return te.length===0?R+"<"+S+`>
`:0<G?R+"<"+S+" "+te.join(" ")+`>
`:R+"<"+S+`
`+R+" "+te.join(`
`+R+" ")+`
`+R+`>
`}function Ti(S,M,R){var G="",te=Qs({},M),re;for(re in S)if(S.hasOwnProperty(re)){delete te[re];var Se=120-2*R-re.length-2,Me=Bd(S[re],Se);M.hasOwnProperty(re)?(Se=Bd(M[re],Se),G+=wr(R)+re+": "+Me+`
`,G+=dr(R)+re+": "+Se+`
`):G+=wr(R)+re+": "+Me+`
`}for(var $e in te)te.hasOwnProperty($e)&&(S=Bd(te[$e],120-2*R-$e.length-2),G+=dr(R)+$e+": "+S+`
`);return G}function zi(S,M,R,G){var te="",re=new Map;for(dt in R)R.hasOwnProperty(dt)&&re.set(dt.toLowerCase(),dt);if(re.size===1&&re.has("children"))te+=Wo(S,M,wo(G));else{for(var Se in M)if(M.hasOwnProperty(Se)&&Se!=="children"){var Me=120-2*(G+1)-Se.length-1,$e=re.get(Se.toLowerCase());if($e!==void 0){re.delete(Se.toLowerCase());var dt=M[Se];$e=R[$e];var Bt=Mh(dt,Me);Me=Mh($e,Me),typeof dt==="object"&&dt!==null&&typeof $e==="object"&&$e!==null&&nc(dt)==="Object"&&nc($e)==="Object"&&(2<Object.keys(dt).length||2<Object.keys($e).length||-1<Bt.indexOf("...")||-1<Me.indexOf("..."))?te+=wo(G+1)+Se+`={{
`+Ti(dt,$e,G+2)+wo(G+1)+`}}
`:(te+=wr(G+1)+Se+"="+Bt+`
`,te+=dr(G+1)+Se+"="+Me+`
`)}else te+=wo(G+1)+Se+"="+Mh(M[Se],Me)+`
`}re.forEach(function(qt){if(qt!=="children"){var Kt=120-2*(G+1)-qt.length-1;te+=dr(G+1)+qt+"="+Mh(R[qt],Kt)+`
`}}),te=te===""?wo(G)+"<"+S+`>
`:wo(G)+"<"+S+`
`+te+wo(G)+`>
`}if(S=R.children,M=M.children,typeof S==="string"||typeof S==="number"||typeof S==="bigint"){if(re="",typeof M==="string"||typeof M==="number"||typeof M==="bigint")re=""+M;te+=zc(re,""+S,G+1)}else if(typeof M==="string"||typeof M==="number"||typeof M==="bigint")te=S==null?te+zc(""+M,null,G+1):te+zc(""+M,void 0,G+1);return te}function el(S,M){var R=Yr(S);if(R===null){R="";for(S=S.child;S;)R+=el(S,M),S=S.sibling;return R}return wo(M)+"<"+R+`>
`}function Gc(S,M){var R=Fs(S,M);if(R!==S&&(S.children.length!==1||S.children[0]!==R))return wo(M)+`...
`+Gc(R,M+1);R="";var G=S.fiber._debugInfo;if(G)for(var te=0;te<G.length;te++){var re=G[te].name;typeof re==="string"&&(R+=wo(M)+"<"+re+`>
`,M++)}if(G="",te=S.fiber.pendingProps,S.fiber.tag===6)G=zc(te,S.serverProps,M),M++;else if(re=Yr(S.fiber),re!==null)if(S.serverProps===void 0){G=M;var Se=120-2*G-re.length-2,Me="";for(dt in te)if(te.hasOwnProperty(dt)&&dt!=="children"){var $e=Mh(te[dt],15);if(Se-=dt.length+$e.length+2,0>Se){Me+=" ...";break}Me+=" "+dt+"="+$e}G=wo(G)+"<"+re+Me+`>
`,M++}else S.serverProps===null?(G=Wo(re,te,wr(M)),M++):typeof S.serverProps==="string"?console.error("Should not have matched a non HostText fiber to a Text node. This is a bug in React."):(G=zi(re,te,S.serverProps,M),M++);var dt="";te=S.fiber.child;for(re=0;te&&re<S.children.length;)Se=S.children[re],Se.fiber===te?(dt+=Gc(Se,M),re++):dt+=el(te,M),te=te.sibling;te&&0<S.children.length&&(dt+=wo(M)+`...
`),te=S.serverTail,S.serverProps===null&&M--;for(S=0;S<te.length;S++)re=te[S],dt=typeof re==="string"?dt+(dr(M)+mc(re,120-2*M)+`
`):dt+Wo(re.type,re.props,dr(M));return R+G+dt}function wd(S){try{return`
`+Gc(S,0)}catch(M){return""}}function sf(S,M,R){for(var G=M,te=null,re=0;G;)G===S&&(re=0),te={fiber:G,children:te!==null?[te]:[],serverProps:G===M?R:G===S?null:void 0,serverTail:[],distanceFromLeaf:re},re++,G=G.return;return te!==null?wd(te).replaceAll(/^[+-]/gm,">"):""}function B0(S,M){var R=Qs({},S||xj),G={tag:M};if(yj.indexOf(M)!==-1&&(R.aTagInScope=null,R.buttonTagInScope=null,R.nobrTagInScope=null),nae.indexOf(M)!==-1&&(R.pTagInButtonScope=null),Bw.indexOf(M)!==-1&&M!=="address"&&M!=="div"&&M!=="p"&&(R.listItemTagAutoclosing=null,R.dlItemTagAutoclosing=null),R.current=G,M==="form"&&(R.formTag=G),M==="a"&&(R.aTagInScope=G),M==="button"&&(R.buttonTagInScope=G),M==="nobr"&&(R.nobrTagInScope=G),M==="p"&&(R.pTagInButtonScope=G),M==="li"&&(R.listItemTagAutoclosing=G),M==="dd"||M==="dt")R.dlItemTagAutoclosing=G;return M==="#document"||M==="html"?R.containerTagInScope=null:R.containerTagInScope||(R.containerTagInScope=G),S!==null||M!=="#document"&&M!=="html"&&M!=="body"?R.implicitRootScope===!0&&(R.implicitRootScope=!1):R.implicitRootScope=!0,R}function Hs(S,M,R){switch(M){case"tr":return S==="th"||S==="td"||S==="style"||S==="script"||S==="template";case"tbody":case"thead":case"tfoot":return S==="tr"||S==="style"||S==="script"||S==="template";case"colgroup":return S==="col"||S==="template";case"table":return S==="caption"||S==="colgroup"||S==="tbody"||S==="tfoot"||S==="thead"||S==="style"||S==="script"||S==="template";case"head":return S==="base"||S==="basefont"||S==="bgsound"||S==="link"||S==="meta"||S==="title"||S==="noscript"||S==="noframes"||S==="style"||S==="script"||S==="template";case"html":if(R)break;return S==="head"||S==="body"||S==="frameset";case"frameset":return S==="frame";case"#document":if(!R)return S==="html"}switch(S){case"h1":case"h2":case"h3":case"h4":case"h5":case"h6":return M!=="h1"&&M!=="h2"&&M!=="h3"&&M!=="h4"&&M!=="h5"&&M!=="h6";case"rp":case"rt":return oae.indexOf(M)===-1;case"caption":case"col":case"colgroup":case"input":return M!=="select";case"frameset":case"frame":case"tbody":case"td":case"tfoot":case"th":case"thead":case"tr":return M==null;case"head":return R||M===null;case"html":return R&&M==="#document"||M===null;case"body":return R&&(M==="#document"||M==="html")||M===null}return!0}function sh(S,M){switch(S){case"address":case"article":case"aside":case"blockquote":case"center":case"details":case"dialog":case"dir":case"div":case"dl":case"fieldset":case"figcaption":case"figure":case"footer":case"header":case"hgroup":case"main":case"menu":case"nav":case"ol":case"p":case"section":case"summary":case"ul":case"pre":case"listing":case"table":case"hr":case"xmp":case"h1":case"h2":case"h3":case"h4":case"h5":case"h6":return M.pTagInButtonScope;case"form":return M.formTag||M.pTagInButtonScope;case"li":return M.listItemTagAutoclosing;case"dd":case"dt":return M.dlItemTagAutoclosing;case"button":return M.buttonTagInScope;case"a":return M.aTagInScope;case"nobr":return M.nobrTagInScope}return null}function w0(S,M){for(;S;){switch(S.tag){case 5:case 26:case 27:if(S.type===M)return S}S=S.return}return null}function tu(S,M){M=M||xj;var R=M.current;if(M=(R=Hs(S,R&&R.tag,M.implicitRootScope)?null:R)?null:sh(S,M),M=R||M,!M)return!0;var G=M.tag;if(M=String(!!R)+"|"+S+"|"+G,oR[M])return!1;oR[M]=!0;var te=(M=bp)?w0(M.return,G):null,re=M!==null&&te!==null?sf(te,M,null):"",Se="<"+S+">";return R?(R="",G==="table"&&S==="tr"&&(R+=" Add a <tbody>, <thead> or <tfoot> to your code to match the DOM tree generated by the browser."),console.error(`In HTML, %s cannot be a child of <%s>.%s
This will cause a hydration error.%s`,Se,G,R,re)):console.error(`In HTML, %s cannot be a descendant of <%s>.
This will cause a hydration error.%s`,Se,G,re),M&&(S=M.return,te===null||S===null||te===S&&S._debugOwner===M._debugOwner||ye(te,function(){console.error(`<%s> cannot contain a nested %s.
See this log for the ancestor stack trace.`,G,Se)})),!1}function wu(S,M,R){if(R||Hs("#text",M,!1))return!0;if(R="#text|"+M,oR[R])return!1;oR[R]=!0;var G=(R=bp)?w0(R,M):null;return R=R!==null&&G!==null?sf(G,R,R.tag!==6?{children:null}:null):"",/\S/.test(S)?console.error(`In HTML, text nodes cannot be a child of <%s>.
This will cause a hydration error.%s`,M,R):console.error(`In HTML, whitespace text nodes cannot be a child of <%s>. Make sure you don't have any extra whitespace between tags on each line of your source code.
This will cause a hydration error.%s`,M,R),!1}function Rr(S,M){if(M){var R=S.firstChild;if(R&&R===S.lastChild&&R.nodeType===3){R.nodeValue=M;return}}S.textContent=M}function Yc(S){return S.replace(sae,function(M,R){return R.toUpperCase()})}function Ns(S,M,R){var G=M.indexOf("--")===0;G||(-1<M.indexOf("-")?sM.hasOwnProperty(M)&&sM[M]||(sM[M]=!0,console.error("Unsupported style property %s. Did you mean %s?",M,Yc(M.replace(rae,"ms-")))):iae.test(M)?sM.hasOwnProperty(M)&&sM[M]||(sM[M]=!0,console.error("Unsupported vendor-prefixed style property %s. Did you mean %s?",M,M.charAt(0).toUpperCase()+M.slice(1))):!bj.test(R)||D.hasOwnProperty(R)&&D[R]||(D[R]=!0,console.error(`Style property values shouldn't contain a semicolon. Try "%s: %s" instead.`,M,R.replace(bj,""))),typeof R==="number"&&(isNaN(R)?L||(L=!0,console.error("`NaN` is an invalid value for the `%s` css style property.",M)):isFinite(R)||K||(K=!0,console.error("`Infinity` is an invalid value for the `%s` css style property.",M)))),R==null||typeof R==="boolean"||R===""?G?S.setProperty(M,""):M==="float"?S.cssFloat="":S[M]="":G?S.setProperty(M,R):typeof R!=="number"||R===0||de.has(M)?M==="float"?S.cssFloat=R:(et(R,M),S[M]=(""+R).trim()):S[M]=R+"px"}function ja(S,M,R){if(M!=null&&typeof M!=="object")throw Error("The `style` prop expects a mapping from style properties to values, not a string. For example, style={{marginRight: spacing + 'em'}} when using JSX.");if(M&&Object.freeze(M),S=S.style,R!=null){if(M){var G={};if(R){for(var te in R)if(R.hasOwnProperty(te)&&!M.hasOwnProperty(te))for(var re=fO[te]||[te],Se=0;Se<re.length;Se++)G[re[Se]]=te}for(var Me in M)if(M.hasOwnProperty(Me)&&(!R||R[Me]!==M[Me]))for(te=fO[Me]||[Me],re=0;re<te.length;re++)G[te[re]]=Me;Me={};for(var $e in M)for(te=fO[$e]||[$e],re=0;re<te.length;re++)Me[te[re]]=$e;$e={};for(var dt in G)if(te=G[dt],(re=Me[dt])&&te!==re&&(Se=te+","+re,!$e[Se])){$e[Se]=!0,Se=console;var Bt=M[te];Se.error.call(Se,"%s a style property during rerender (%s) when a conflicting property is set (%s) can lead to styling bugs. To avoid this, don't mix shorthand and non-shorthand properties for the same value; instead, replace the shorthand with separate values.",Bt==null||typeof Bt==="boolean"||Bt===""?"Removing":"Updating",te,re)}}for(var qt in R)!R.hasOwnProperty(qt)||M!=null&&M.hasOwnProperty(qt)||(qt.indexOf("--")===0?S.setProperty(qt,""):qt==="float"?S.cssFloat="":S[qt]="",cc=!0);for(var Kt in M)dt=M[Kt],M.hasOwnProperty(Kt)&&R[Kt]!==dt&&(Ns(S,Kt,dt),cc=!0)}else for(G in M)M.hasOwnProperty(G)&&Ns(S,G,M[G])}function Rs(S){if(S.indexOf("-")===-1)return!1;switch(S){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}function Vi(S){return ot.get(S)||S}function xa(S,M){if(fg.call(zn,M)&&zn[M])return!0;if(Go.test(M)){if(S="aria-"+M.slice(4).toLowerCase(),S=hn.hasOwnProperty(S)?S:null,S==null)return console.error("Invalid ARIA attribute `%s`. ARIA attributes follow the pattern aria-* and must be lowercase.",M),zn[M]=!0;if(M!==S)return console.error("Invalid ARIA attribute `%s`. Did you mean `%s`?",M,S),zn[M]=!0}if(Qo.test(M)){if(S=M.toLowerCase(),S=hn.hasOwnProperty(S)?S:null,S==null)return zn[M]=!0,!1;M!==S&&(console.error("Unknown ARIA attribute `%s`. Did you mean `%s`?",M,S),zn[M]=!0)}return!0}function Tl(S,M){var R=[],G;for(G in M)xa(S,G)||R.push(G);M=R.map(function(te){return"`"+te+"`"}).join(", "),R.length===1?console.error("Invalid aria prop %s on <%s> tag. For details, see https://react.dev/link/invalid-aria-props",M,S):1<R.length&&console.error("Invalid aria props %s on <%s> tag. For details, see https://react.dev/link/invalid-aria-props",M,S)}function cs(S,M,R,G){if(fg.call(kr,M)&&kr[M])return!0;var te=M.toLowerCase();if(te==="onfocusin"||te==="onfocusout")return console.error("React uses onFocus and onBlur instead of onFocusIn and onFocusOut. All React events are normalized to bubble, so onFocusIn and onFocusOut are not needed/supported by React."),kr[M]=!0;if(typeof R==="function"&&(S==="form"&&M==="action"||S==="input"&&M==="formAction"||S==="button"&&M==="formAction"))return!0;if(G!=null){if(S=G.possibleRegistrationNames,G.registrationNameDependencies.hasOwnProperty(M))return!0;if(G=S.hasOwnProperty(te)?S[te]:null,G!=null)return console.error("Invalid event handler property `%s`. Did you mean `%s`?",M,G),kr[M]=!0;if(wc.test(M))return console.error("Unknown event handler property `%s`. It will be ignored.",M),kr[M]=!0}else if(wc.test(M))return ww.test(M)&&console.error("Invalid event handler property `%s`. React events use the camelCase naming convention, for example `onClick`.",M),kr[M]=!0;if(Tw.test(M)||V2.test(M))return!0;if(te==="innerhtml")return console.error("Directly setting property `innerHTML` is not permitted. For more information, lookup documentation on `dangerouslySetInnerHTML`."),kr[M]=!0;if(te==="aria")return console.error("The `aria` attribute is reserved for future use in React. Pass individual `aria-` attributes instead."),kr[M]=!0;if(te==="is"&&R!==null&&R!==void 0&&typeof R!=="string")return console.error("Received a `%s` for a string attribute `is`. If this is expected, cast the value to a string.",typeof R),kr[M]=!0;if(typeof R==="number"&&isNaN(R))return console.error("Received NaN for the `%s` attribute. If this is expected, cast the value to a string.",M),kr[M]=!0;if(yt.hasOwnProperty(te)){if(te=yt[te],te!==M)return console.error("Invalid DOM property `%s`. Did you mean `%s`?",M,te),kr[M]=!0}else if(M!==te)return console.error("React does not recognize the `%s` prop on a DOM element. If you intentionally want it to appear in the DOM as a custom attribute, spell it as lowercase `%s` instead. If you accidentally passed it from a parent component, remove it from the DOM element.",M,te),kr[M]=!0;switch(M){case"dangerouslySetInnerHTML":case"children":case"style":case"suppressContentEditableWarning":case"suppressHydrationWarning":case"defaultValue":case"defaultChecked":case"innerHTML":case"ref":return!0;case"innerText":case"textContent":return!0}switch(typeof R){case"boolean":switch(M){case"autoFocus":case"checked":case"multiple":case"muted":case"selected":case"contentEditable":case"spellCheck":case"draggable":case"value":case"autoReverse":case"externalResourcesRequired":case"focusable":case"preserveAlpha":case"allowFullScreen":case"async":case"autoPlay":case"controls":case"credentialless":case"default":case"defer":case"disabled":case"disablePictureInPicture":case"disableRemotePlayback":case"formNoValidate":case"hidden":case"loop":case"noModule":case"noValidate":case"open":case"playsInline":case"readOnly":case"required":case"reversed":case"scoped":case"seamless":case"itemScope":case"capture":case"download":case"inert":return!0;default:if(te=M.toLowerCase().slice(0,5),te==="data-"||te==="aria-")return!0;return R?console.error('Received `%s` for a non-boolean attribute `%s`.\n\nIf you want to write it to the DOM, pass a string instead: %s="%s" or %s={value.toString()}.',R,M,M,R,M):console.error('Received `%s` for a non-boolean attribute `%s`.\n\nIf you want to write it to the DOM, pass a string instead: %s="%s" or %s={value.toString()}.\n\nIf you used to conditionally omit it with %s={condition && value}, pass %s={condition ? value : undefined} instead.',R,M,M,R,M,M,M),kr[M]=!0}case"function":case"symbol":return kr[M]=!0,!1;case"string":if(R==="false"||R==="true"){switch(M){case"checked":case"selected":case"multiple":case"muted":case"allowFullScreen":case"async":case"autoPlay":case"controls":case"credentialless":case"default":case"defer":case"disabled":case"disablePictureInPicture":case"disableRemotePlayback":case"formNoValidate":case"hidden":case"loop":case"noModule":case"noValidate":case"open":case"playsInline":case"readOnly":case"required":case"reversed":case"scoped":case"seamless":case"itemScope":case"inert":break;default:return!0}console.error("Received the string `%s` for the boolean attribute `%s`. %s Did you mean %s={%s}?",R,M,R==="false"?"The browser will interpret it as a truthy value.":'Although this works, it will not work as expected if you pass the string "false".',M,R),kr[M]=!0}}return!0}function Td(S,M,R){var G=[],te;for(te in M)cs(S,te,M[te],R)||G.push(te);M=G.map(function(re){return"`"+re+"`"}).join(", "),G.length===1?console.error("Invalid value for prop %s on <%s> tag. Either remove it from the element, or pass a string or number value to keep it in the DOM. For details, see https://react.dev/link/attribute-behavior ",M,S):1<G.length&&console.error("Invalid values for props %s on <%s> tag. Either remove them from the element, or pass a string or number value to keep them in the DOM. For details, see https://react.dev/link/attribute-behavior ",M,S)}function Dl(S){return en.test(""+S)?"javascript:throw new Error('React has blocked a javascript: URL as a security precaution.')":S}function Dd(){}function tA(S){return S=S.target||S.srcElement||window,S.correspondingUseElement&&(S=S.correspondingUseElement),S.nodeType===3?S.parentNode:S}function Tu(S){var M=ln(S);if(M&&(S=M.stateNode)){var R=S[_A]||null;e:switch(S=M.stateNode,M.type){case"input":if(Eo(S,R.value,R.defaultValue,R.defaultValue,R.checked,R.defaultChecked,R.type,R.name),M=R.name,R.type==="radio"&&M!=null){for(R=S;R.parentNode;)R=R.parentNode;st(M,"name"),R=R.querySelectorAll('input[name="'+Wn(""+M)+'"][type="radio"]');for(M=0;M<R.length;M++){var G=R[M];if(G!==S&&G.form===S.form){var te=G[_A]||null;if(!te)throw Error("ReactDOMInput: Mixing React and non-React radio inputs with the same `name` is not supported.");Eo(G,te.value,te.defaultValue,te.defaultValue,te.checked,te.defaultChecked,te.type,te.name)}}for(M=0;M<R.length;M++)G=R[M],G.form===S.form&&Vn(G)}break e;case"textarea":Nr(S,R.value,R.defaultValue);break e;case"select":M=R.value,M!=null&&zo(S,!!R.multiple,M,!1)}}}function af(S,M,R){if(xi)return S(M,R);xi=!0;try{var G=S(M);return G}finally{if(xi=!1,an!==null||qn!==null){if(Zb(),an&&(M=an,S=qn,qn=an=null,Tu(M),S))for(M=0;M<S.length;M++)Tu(S[M])}}}function r_(S,M){var R=S.stateNode;if(R===null)return null;var G=R[_A]||null;if(G===null)return null;R=G[M];e:switch(M){case"onClick":case"onClickCapture":case"onDoubleClick":case"onDoubleClickCapture":case"onMouseDown":case"onMouseDownCapture":case"onMouseMove":case"onMouseMoveCapture":case"onMouseUp":case"onMouseUpCapture":case"onMouseEnter":(G=!G.disabled)||(S=S.type,G=!(S==="button"||S==="input"||S==="select"||S==="textarea")),S=!G;break e;default:S=!1}if(S)return null;if(R&&typeof R!=="function")throw Error("Expected `"+M+"` listener to be a function, instead got a value of `"+typeof R+"` type.");return R}function Bh(){if(uu)return uu;var S,M=Hl,R=M.length,G,te="value"in Fr?Fr.value:Fr.textContent,re=te.length;for(S=0;S<R&&M[S]===te[S];S++);var Se=R-S;for(G=1;G<=Se&&M[R-G]===te[re-G];G++);return uu=te.slice(S,1<G?1-G:void 0)}function lp(S){var M=S.keyCode;return"charCode"in S?(S=S.charCode,S===0&&M===13&&(S=13)):S=M,S===10&&(S=13),32<=S||S===13?S:0}function nu(){return!0}function gm(){return!1}function jl(S){function M(R,G,te,re,Se){this._reactName=R,this._targetInst=te,this.type=G,this.nativeEvent=re,this.target=Se,this.currentTarget=null;for(var Me in S)S.hasOwnProperty(Me)&&(R=S[Me],this[Me]=R?R(re):re[Me]);return this.isDefaultPrevented=(re.defaultPrevented!=null?re.defaultPrevented:re.returnValue===!1)?nu:gm,this.isPropagationStopped=gm,this}return Qs(M.prototype,{preventDefault:function(){this.defaultPrevented=!0;var R=this.nativeEvent;R&&(R.preventDefault?R.preventDefault():typeof R.returnValue!=="unknown"&&(R.returnValue=!1),this.isDefaultPrevented=nu)},stopPropagation:function(){var R=this.nativeEvent;R&&(R.stopPropagation?R.stopPropagation():typeof R.cancelBubble!=="unknown"&&(R.cancelBubble=!0),this.isPropagationStopped=nu)},persist:function(){},isPersistent:nu}),M}function k1(S){var M=this.nativeEvent;return M.getModifierState?M.getModifierState(S):(S=mNn[S])?!!M[S]:!1}function fm(){return k1}function Z_(S,M){switch(S){case"keyup":return ENn.indexOf(M.keyCode)!==-1;case"keydown":return M.keyCode!==det;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function cf(S){return S=S.detail,typeof S==="object"&&"data"in S?S.data:null}function yb(S,M){switch(S){case"compositionend":return cf(M);case"keypress":if(M.which!==het)return null;return pet=!0,met;case"textInput":return S=M.data,S===met&&pet?null:S;default:return null}}function ah(S,M){if(xO)return S==="compositionend"||!kSe&&Z_(S,M)?(S=Bh(),uu=Hl=Fr=null,xO=!1,S):null;switch(S){case"paste":return null;case"keypress":if(!(M.ctrlKey||M.altKey||M.metaKey)||M.ctrlKey&&M.altKey){if(M.char&&1<M.char.length)return M.char;if(M.which)return String.fromCharCode(M.which)}return null;case"compositionend":return uet&&M.locale!=="ko"?null:M.data;default:return null}}function xb(S){var M=S&&S.nodeName&&S.nodeName.toLowerCase();return M==="input"?!!BNn[S.type]:M==="textarea"?!0:!1}function lf(S){if(!Ms)return!1;S="on"+S;var M=S in document;return M||(M=document.createElement("div"),M.setAttribute(S,"return;"),M=typeof M[S]==="function"),M}function Nd(S,M,R,G){an?qn?qn.push(G):qn=[G]:an=G,M=kC(M,"onChange"),0<M.length&&(R=new yO("onChange","change",null,R,G),S.push({event:R,listeners:M}))}function As(S){yp(S,0)}function Ao(S){var M=Cn(S);if(Vn(M))return S}function dd(S,M){if(S==="change")return M}function pc(){Ej&&(Ej.detachEvent("onpropertychange",Ys),Mj=Ej=null)}function Ys(S){if(S.propertyName==="value"&&Ao(Mj)){var M=[];Nd(M,Mj,S,tA(S)),af(As,M)}}function nA(S,M,R){S==="focusin"?(pc(),Ej=M,Mj=R,Ej.attachEvent("onpropertychange",Ys)):S==="focusout"&&pc()}function cC(S){if(S==="selectionchange"||S==="keyup"||S==="keydown")return Ao(Mj)}function r9(S,M){if(S==="click")return Ao(M)}function lC(S,M){if(S==="input"||S==="change")return Ao(M)}function ZD(S,M){return S===M&&(S!==0||1/S===1/M)||S!==S&&M!==M}function h2(S,M){if(kf(S,M))return!0;if(typeof S!=="object"||S===null||typeof M!=="object"||M===null)return!1;var R=Object.keys(S),G=Object.keys(M);if(R.length!==G.length)return!1;for(G=0;G<R.length;G++){var te=R[G];if(!fg.call(M,te)||!kf(S[te],M[te]))return!1}return!0}function m2(S){if(S=S||(typeof document<"u"?document:void 0),typeof S>"u")return null;try{return S.activeElement||S.body}catch(M){return S.body}}function iP(S){for(;S&&S.firstChild;)S=S.firstChild;return S}function Du(S,M){var R=iP(S);S=0;for(var G;R;){if(R.nodeType===3){if(G=S+R.textContent.length,S<=M&&G>=M)return{node:R,offset:M-S};S=G}e:{for(;R;){if(R.nextSibling){R=R.nextSibling;break e}R=R.parentNode}R=void 0}R=iP(R)}}function oc(S,M){return S&&M?S===M?!0:S&&S.nodeType===3?!1:M&&M.nodeType===3?oc(S,M.parentNode):("contains"in S)?S.contains(M):S.compareDocumentPosition?!!(S.compareDocumentPosition(M)&16):!1:!1}function rP(S){S=S!=null&&S.ownerDocument!=null&&S.ownerDocument.defaultView!=null?S.ownerDocument.defaultView:window;for(var M=m2(S.document);M instanceof S.HTMLIFrameElement;){try{var R=typeof M.contentWindow.location.href==="string"}catch(G){R=!1}if(R)S=M.contentWindow;else break;M=m2(S.document)}return M}function dp(S){var M=S&&S.nodeName&&S.nodeName.toLowerCase();return M&&(M==="input"&&(S.type==="text"||S.type==="search"||S.type==="tel"||S.type==="url"||S.type==="password")||M==="textarea"||S.contentEditable==="true")}function df(S,M,R){var G=R.window===R?R.document:R.nodeType===9?R:R.ownerDocument;FSe||CO==null||CO!==m2(G)||(G=CO,("selectionStart"in G)&&dp(G)?G={start:G.selectionStart,end:G.selectionEnd}:(G=(G.ownerDocument&&G.ownerDocument.defaultView||window).getSelection(),G={anchorNode:G.anchorNode,anchorOffset:G.anchorOffset,focusNode:G.focusNode,focusOffset:G.focusOffset}),Bj&&h2(Bj,G)||(Bj=G,G=kC(LSe,"onSelect"),0<G.length&&(M=new yO("onSelect","select",null,M,R),S.push({event:M,listeners:G}),M.target=CO)))}function T0(S,M){var R={};return R[S.toLowerCase()]=M.toLowerCase(),R["Webkit"+S]="webkit"+M,R["Moz"+S]="moz"+M,R}function wh(S){if(HSe[S])return HSe[S];if(!IO[S])return S;var M=IO[S],R;for(R in M)if(M.hasOwnProperty(R)&&R in _et)return HSe[S]=M[R];return S}function D0(S,M){Cet.set(S,M),Kn(M,[S])}function N0(S,M){if(S.name!=null&&S.name!=="auto")return S.name;if(M.autoName!==null)return M.autoName;S=D5.identifierPrefix;var R=RNn++;return S="_"+S+"t_"+R.toString(32)+"_",M.autoName=S}function sP(S){if(S==null||typeof S==="string")return S;var M=null,R=YO;if(R!==null)for(var G=0;G<R.length;G++){var te=S[R[G]];if(te!=null){if(te==="none")return"none";M=M==null?te:M+(" "+te)}}return M==null?S.default:M}function ym(S,M){return S=sP(S),M=sP(M),M==null?S==="auto"?null:S:M==="auto"?null:M}function u4(S){for(var M=cae,R=0;R<S.length&&R<JC;R++){var G=S[R];if(typeof G==="object"&&G!==null)if(uh(G)&&G.length===2&&typeof G[0]==="string"){if(M!==cae&&M!==VSe)return GSe;M=VSe}else return GSe;else{if(typeof G==="function"||typeof G==="string"&&50<G.length||M!==cae&&M!==YSe||typeof G==="bigint")return GSe;M=YSe}}return M}function ch(S,M,R,G){if(!ArrayBuffer.isView(S)){var te=0,re;for(re in S)if(fg.call(S,re)&&re[0]!=="_"&&(te++,Zh(re,S[re],M,R,G),te>=JC)){M.push([G+" ".repeat(R)+"Only "+JC+" properties are shown. React will not log more properties of this object.",""]);break}}}function s_(S){return"$$typeof"in S&&fg.call(S,"$$typeof")?S.$$typeof:void 0}function Zh(S,M,R,G,te){switch(typeof M){case"object":if(M===null){M="null";break}else{if(s_(M)===O2){var re=U(M.type)||"…",Se=M.key;M=M.props;var Me=Object.keys(M),$e=Me.length;if(Se==null&&$e===0){M="<"+re+" />";break}if(3>G||$e===1&&Me[0]==="children"&&Se==null){M="<"+re+" … />";break}R.push([te+" ".repeat(G)+S,"<"+re]),Se!==null&&Zh("key",Se,R,G+1,te),S=!1,Se=0;for(var dt in M)if(Se++,dt==="children"?M.children!=null&&(!uh(M.children)||0<M.children.length)&&(S=!0):fg.call(M,dt)&&dt[0]!=="_"&&Zh(dt,M[dt],R,G+1,te),Se>=JC)break;R.push(["",S?">…</"+re+">":"/>"]);return}if(re=Object.prototype.toString.call(M),re=re.slice(8,re.length-1),ArrayBuffer.isView(M)){M=M.length,M=typeof M==="number"?re+"("+M+")":re;break}if(re==="Array"){if(dt=M.length>JC,Se=u4(M),Se===YSe||Se===cae){M=JSON.stringify(dt?M.slice(0,JC).concat("…"):M);break}else if(Se===VSe){R.push([te+" ".repeat(G)+S,""]);for(S=0;S<M.length&&S<JC;S++)re=M[S],Zh(re[0],re[1],R,G+1,te);dt&&Zh(JC.toString(),"…",R,G+1,te);return}}if(re==="Promise"){if(M.status==="fulfilled"){if(re=R.length,Zh(S,M.value,R,G,te),R.length>re){R=R[re],R[1]="Promise<"+(R[1]||"Object")+">";return}}else if(M.status==="rejected"&&(re=R.length,Zh(S,M.reason,R,G,te),R.length>re)){R=R[re],R[1]="Rejected Promise<"+R[1]+">";return}R.push([" ".repeat(G)+S,"Promise"]);return}re==="Object"&&(dt=Object.getPrototypeOf(M))&&typeof dt.constructor==="function"&&(re=dt.constructor.name),R.push([te+" ".repeat(G)+S,re==="Object"?3>G?"":"…":re]),3>G&&ch(M,R,G+1,te);return}case"function":M=M.name,M=M===""||typeof M!=="string"?"() => {}":M+"() {}";break;case"string":M=M===LNn?"…":JSON.stringify(1024<=M.length?M.slice(0,1023)+"…":M);break;case"undefined":M="undefined";break;case"boolean":M=M?"true":"false";break;default:M=String(M)}R.push([te+" ".repeat(G)+S,M])}function Cb(S,M,R,G){var te=!0,re=0;for(Me in S){if(re>JC){R.push(["Previous object has more than "+JC+" properties. React will not attempt to diff objects with too many properties.",""]),te=!1;break}Me in M||(R.push([lae+" ".repeat(G)+Me,"…"]),te=!1),re++}re=0;for(var Se in M){if(re>JC){R.push(["Next object has more than "+JC+" properties. React will not attempt to diff objects with too many properties.",""]),te=!1;break}if(Se in S){var Me=S[Se],$e=M[Se];if(Me!==$e){if(G===0&&Se==="children"){te=" ".repeat(G)+Se,R.push([lae+te,"…"],[dae+te,"…"]),te=!1;continue}if(!(3<=G)){if(typeof Me==="object"&&typeof $e==="object"&&Me!==null&&$e!==null&&s_(Me)===s_($e))if(s_($e)===O2){if(Me.type===$e.type&&Me.key===$e.key){Me=U($e.type)||"…",te=" ".repeat(G)+Se,Me="<"+Me+" … />",R.push([lae+te,Me],[dae+te,Me]),te=!1;continue}}else{var dt=Object.prototype.toString.call(Me),Bt=Object.prototype.toString.call($e);if(dt===Bt&&(Bt==="[object Object]"||Bt==="[object Array]")){dt=[Pet+" ".repeat(G)+Se,Bt==="[object Array]"?"Array":""],R.push(dt),Bt=R.length,Cb(Me,$e,R,G+1)?Bt===R.length&&(dt[1]="Referentially unequal but deeply equal objects. Consider memoization."):te=!1;continue}}else if(typeof Me==="function"&&typeof $e==="function"&&Me.name===$e.name&&Me.length===$e.length&&(dt=Function.prototype.toString.call(Me),Bt=Function.prototype.toString.call($e),dt===Bt)){Me=$e.name===""?"() => {}":$e.name+"() {}",R.push([Pet+" ".repeat(G)+Se,Me+" Referentially unequal function closure. Consider memoization."]);continue}}Zh(Se,Me,R,G,lae),Zh(Se,$e,R,G,dae),te=!1}}else R.push([dae+" ".repeat(G)+Se,"…"]),te=!1;re++}return te}function pl(S){Ba=S&63?"Blocking":S&64?"Gesture":S&4194176?"Transition":S&62914560?"Suspense":S&2080374784?"Idle":"Other"}function a_(S,M,R,G){hu&&(Nw.start=M,Nw.end=R,aM.color="warning",aM.tooltipText=G,aM.properties=null,(S=S._debugTask)?S.run(performance.measure.bind(performance,G,Nw)):performance.measure(G,Nw),performance.clearMeasures(G))}function dC(S,M,R){a_(S,M,R,"Reconnect")}function uf(S,M,R,G,te){var re=V(S);if(re!==null&&hu){var Se=S.alternate,Me=S.actualDuration;if(Se===null||Se.child!==S.child)for(var $e=S.child;$e!==null;$e=$e.sibling)Me-=$e.actualDuration;Me=0.5>Me?G?"tertiary-light":"primary-light":10>Me?G?"tertiary":"primary":100>Me?G?"tertiary-dark":"primary-dark":"error";var dt=S.memoizedProps;G=S._debugTask,dt!==null&&Se!==null&&Se.memoizedProps!==dt?($e=[FNn],dt=Cb(Se.memoizedProps,dt,$e,0),1<$e.length?(dt&&!Dw&&(Se.lanes&te)===0&&100<S.actualDuration?(Dw=!0,$e[0]=HNn,aM.color="warning",aM.tooltipText=vet):(aM.color=Me,aM.tooltipText=re),aM.properties=$e,Nw.start=M,Nw.end=R,S=""+re,G!=null?G.run(performance.measure.bind(performance,S,Nw)):performance.measure(S,Nw),performance.clearMeasures(S)):G!=null?G.run(console.timeStamp.bind(console,re,M,R,Z1,void 0,Me)):console.timeStamp(re,M,R,Z1,void 0,Me)):G!=null?G.run(console.timeStamp.bind(console,re,M,R,Z1,void 0,Me)):console.timeStamp(re,M,R,Z1,void 0,Me)}}function hf(S,M,R,G){if(hu){var te=V(S);if(te!==null){for(var re=null,Se=[],Me=0;Me<G.length;Me++){var $e=G[Me];re==null&&$e.source!==null&&(re=$e.source._debugTask),$e=$e.value,Se.push(["Error",typeof $e==="object"&&$e!==null&&typeof $e.message==="string"?String($e.message):String($e)])}S.key!==null&&Zh("key",S.key,Se,0,""),S.memoizedProps!==null&&ch(S.memoizedProps,Se,0,""),re==null&&(re=S._debugTask),S={start:M,end:R,detail:{devtools:{color:"error",track:Z1,tooltipText:S.tag===13?"Hydration failed":"Error boundary caught an error",properties:Se}}},te=""+te,re?re.run(performance.measure.bind(performance,te,S)):performance.measure(te,S),performance.clearMeasures(te)}}}function Nu(S,M,R,G,te){if(te!==null){if(hu){var re=V(S);if(re!==null){G=[];for(var Se=0;Se<te.length;Se++){var Me=te[Se].value;G.push(["Error",typeof Me==="object"&&Me!==null&&typeof Me.message==="string"?String(Me.message):String(Me)])}S.key!==null&&Zh("key",S.key,G,0,""),S.memoizedProps!==null&&ch(S.memoizedProps,G,0,""),M={start:M,end:R,detail:{devtools:{color:"error",track:Z1,tooltipText:"A lifecycle or effect errored",properties:G}}},S=S._debugTask,R=""+re,S?S.run(performance.measure.bind(performance,R,M)):performance.measure(R,M),performance.clearMeasures(R)}}}else re=V(S),re!==null&&hu&&(te=1>G?"secondary-light":100>G?"secondary":500>G?"secondary-dark":"error",(S=S._debugTask)?S.run(console.timeStamp.bind(console,re,M,R,Z1,void 0,te)):console.timeStamp(re,M,R,Z1,void 0,te))}function h4(S,M,R,G){!hu||M<=S||(R=(R&738197653)===R?"tertiary-dark":"primary-dark",G?G.run(console.timeStamp.bind(console,"Prewarm",S,M,Ba,Ca,R)):console.timeStamp("Prewarm",S,M,Ba,Ca,R))}function p2(S,M,R,G){!hu||M<=S||(R=(R&738197653)===R?"tertiary-dark":"primary-dark",G?G.run(console.timeStamp.bind(console,"Suspended",S,M,Ba,Ca,R)):console.timeStamp("Suspended",S,M,Ba,Ca,R))}function m4(S,M,R,G){!hu||M<=S||(G?G.run(console.timeStamp.bind(console,"Errored",S,M,Ba,Ca,"error")):console.timeStamp("Errored",S,M,Ba,Ca,"error"))}function A2(S,M,R,G){!hu||M<=S||(G?G.run(console.timeStamp.bind(console,R,S,M,Ba,Ca,"secondary-light")):console.timeStamp(R,S,M,Ba,Ca,"secondary-light"))}function Ge(S,M,R,G,te){if(hu&&!(M<=S)){for(var re=[],Se=0;Se<R.length;Se++){var Me=R[Se].value;re.push(["Error",typeof Me==="object"&&Me!==null&&typeof Me.message==="string"?String(Me.message):String(Me)])}S={start:S,end:M,detail:{devtools:{color:"error",track:Ba,trackGroup:Ca,tooltipText:G?"Remaining Effects Errored":"Commit Errored",properties:re}}},te?te.run(performance.measure.bind(performance,"Errored",S)):performance.measure("Errored",S),performance.clearMeasures("Errored")}}function nt(S,M,R,G,te){R!==null?Ge(S,M,R,!1,te):!hu||M<=S||(te?te.run(console.timeStamp.bind(console,G?"Commit Interrupted View Transition":"Commit",S,M,Ba,Ca,G?"error":"secondary-dark")):console.timeStamp(G?"Commit Interrupted View Transition":"Commit",S,M,Ba,Ca,G?"error":"secondary-dark"))}function It(S,M,R){!hu||M<=S||(R?R.run(console.timeStamp.bind(console,"Animating",S,M,Ba,Ca,"secondary-dark")):console.timeStamp("Animating",S,M,Ba,Ca,"secondary-dark"))}function Wt(){for(var S=bO,M=USe=bO=0;M<S;){var R=$C[M];$C[M++]=null;var G=$C[M];$C[M++]=null;var te=$C[M];$C[M++]=null;var re=$C[M];if($C[M++]=null,G!==null&&te!==null){var Se=G.pending;Se===null?te.next=te:(te.next=Se.next,Se.next=te),G.pending=te}re!==0&&Jn(R,te,re)}}function dn(S,M,R,G){$C[bO++]=S,$C[bO++]=M,$C[bO++]=R,$C[bO++]=G,USe|=G,S.lanes|=G,S=S.alternate,S!==null&&(S.lanes|=G)}function yn(S,M,R,G){return dn(S,M,R,G),Io(S)}function Sn(S,M){return dn(S,null,null,M),Io(S)}function Jn(S,M,R){S.lanes|=R;var G=S.alternate;G!==null&&(G.lanes|=R);for(var te=!1,re=S.return;re!==null;)re.childLanes|=R,G=re.alternate,G!==null&&(G.childLanes|=R),re.tag===22&&(S=re.stateNode,S===null||S._visibility&wj||(te=!0)),S=re,re=re.return;return S.tag===3?(re=S.stateNode,te&&M!==null&&(te=31-yl(R),S=re.hiddenUpdates,G=S[te],G===null?S[te]=[M]:G.push(M),M.lane=R|536870912),re):null}function Io(S){if(aq>eRn)throw CR=aq=0,cq=Yae=null,Error("Maximum update depth exceeded. This can happen when a component repeatedly calls setState inside componentWillUpdate or componentDidUpdate. React limits the number of nested updates to prevent infinite loops.");CR>tRn&&(CR=0,cq=null,console.error("Maximum update depth exceeded. This can happen when a component calls setState inside useEffect, but useEffect either doesn't have a dependency array, or one of the dependencies changes on every render.")),S.alternate===null&&(S.flags&4098)!==0&&pd(S);for(var M=S,R=M.return;R!==null;)M.alternate===null&&(M.flags&4098)!==0&&pd(S),M=R,R=M.return;return M.tag===3?M.stateNode:null}function Vo(S){if(lM===null)return S;var M=lM(S);return M===void 0?S:M.current}function yi(S,M){if(lM===null)return!1;var R=lM,G=S.elementType;M=M.type;var te=!1,re=typeof M==="object"&&M!==null?M.$$typeof:null;switch(S.tag){case 1:typeof M==="function"&&(te=!0);break;case 0:typeof M==="function"?te=!0:re===W0&&(te=!0);break;case 11:re===Sw?te=!0:re===W0&&(te=!0);break;case 14:case 15:re===y5?te=!0:re===W0&&(te=!0);break;default:return!1}return te&&(S=R(G),S!==void 0&&S===R(M))?!0:!1}function Ss(S){lM!==null&&typeof WeakSet==="function"&&(SO===null&&(SO=new WeakSet),SO.add(S))}function Vs(S,M,R){do{var G=S,te=G.alternate,re=G.child,Se=G.sibling,Me=G.tag,$e=G.type,dt=G.elementType,Bt=null;switch(G=null,Me){case 0:case 1:Bt=$e;break;case 15:Bt=$e,G=dt;break;case 14:G=dt;break;case 11:Bt=$e.render,G=dt}if(lM===null)throw Error("Expected resolveFamily to be set during hot reload.");var qt=lM;if($e=dt=!1,Bt!==null&&(Bt=qt(Bt),Bt!==void 0&&(R.has(Bt)?$e=!0:M.has(Bt)&&(Me===1?$e=!0:dt=!0))),$e||G===null||(Me=qt(G),Me!==void 0&&R.has(Me)?$e=!0:typeof G==="object"&&G.$$typeof===W0&&(Me=G._payload,Me._status===1&&(Me=qt(Me._result.default),Me!==void 0&&R.has(Me)&&($e=!0)))),SO!==null&&(SO.has(S)||te!==null&&SO.has(te))&&($e=!0),$e&&(S._debugNeedsRemount=!0),$e||dt)te=Sn(S,2),te!==null&&Ld(te,S,2);if(re===null||$e||Vs(re,M,R),Se===null)break;S=Se}while(1)}function _s(S,M,R,G){this.tag=S,this.key=R,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.refCleanup=this.ref=null,this.pendingProps=M,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=G,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null,this.actualDuration=-0,this.actualStartTime=-1.1,this.treeBaseDuration=this.selfBaseDuration=-0,this._debugTask=this._debugStack=this._debugOwner=this._debugInfo=null,this._debugNeedsRemount=!1,this._debugHookTypes=null,Met||typeof Object.preventExtensions!=="function"||Object.preventExtensions(this)}function Ps(S){return S=S.prototype,!(!S||!S.isReactComponent)}function Qa(S,M){var R=S.alternate;switch(R===null?(R=h(S.tag,M,S.key,S.mode),R.elementType=S.elementType,R.type=S.type,R.stateNode=S.stateNode,R._debugOwner=S._debugOwner,R._debugStack=S._debugStack,R._debugTask=S._debugTask,R._debugHookTypes=S._debugHookTypes,R.alternate=S,S.alternate=R):(R.pendingProps=M,R.type=S.type,R.flags=0,R.subtreeFlags=0,R.deletions=null,R.actualDuration=-0,R.actualStartTime=-1.1),R.flags=S.flags&1206910976,R.childLanes=S.childLanes,R.lanes=S.lanes,R.child=S.child,R.memoizedProps=S.memoizedProps,R.memoizedState=S.memoizedState,R.updateQueue=S.updateQueue,M=S.dependencies,R.dependencies=M===null?null:{lanes:M.lanes,firstContext:M.firstContext,_debugThenableState:M._debugThenableState},R.sibling=S.sibling,R.index=S.index,R.ref=S.ref,R.refCleanup=S.refCleanup,R.selfBaseDuration=S.selfBaseDuration,R.treeBaseDuration=S.treeBaseDuration,R._debugInfo=S._debugInfo,R._debugNeedsRemount=S._debugNeedsRemount,R.tag){case 0:case 15:case 14:case 1:case 11:R.type=Vo(S.type)}return R}function e0(S,M){S.flags&=1206910978;var R=S.alternate;return R===null?(S.childLanes=0,S.lanes=M,S.child=null,S.subtreeFlags=0,S.memoizedProps=null,S.memoizedState=null,S.updateQueue=null,S.dependencies=null,S.stateNode=null,S.selfBaseDuration=0,S.treeBaseDuration=0):(S.childLanes=R.childLanes,S.lanes=R.lanes,S.child=R.child,S.subtreeFlags=0,S.deletions=null,S.memoizedProps=R.memoizedProps,S.memoizedState=R.memoizedState,S.updateQueue=R.updateQueue,S.type=R.type,M=R.dependencies,S.dependencies=M===null?null:{lanes:M.lanes,firstContext:M.firstContext,_debugThenableState:M._debugThenableState},S.selfBaseDuration=R.selfBaseDuration,S.treeBaseDuration=R.treeBaseDuration),S}function zt(S,M,R,G,te,re){var Se=0,Me=Vo(S);if(typeof Me==="function")Ps(Me)&&(Se=1);else if(typeof Me==="string")Se=ie(),Se=Ft(S,R,Se)?26:S==="html"||S==="head"||S==="body"?27:5;else e:switch(Me){case dh:return M=h(31,R,M,te),M.elementType=dh,M.lanes=re,M;case sv:return Un(R.children,te,re,M);case jN:Se=8,te|=xg,te|=v5;break;case dO:return S=R,G=te,typeof S.id!=="string"&&console.error('Profiler must specify an "id" of type `string` as a prop. Received the type `%s` instead.',typeof S.id),M=h(12,S,M,G|na),M.elementType=dO,M.lanes=re,M.stateNode={effectDuration:0,passiveEffectDuration:0},M;case uO:return M=h(13,R,M,te),M.elementType=uO,M.lanes=re,M;case i0:return M=h(19,R,M,te),M.elementType=i0,M.lanes=re,M;case gg:case av:return S=te|Eet,M=h(30,R,M,S),M.elementType=av,M.lanes=re,M.stateNode={autoName:null,paired:null,clones:null,ref:null},M;default:if(typeof Me==="object"&&Me!==null)switch(Me.$$typeof){case Kc:Se=10;break e;case z2:Se=9;break e;case Sw:Se=11;break e;case y5:Se=14;break e;case W0:Se=16,Me=null;break e}if(R="",S===void 0||typeof S==="object"&&S!==null&&Object.keys(S).length===0)R+=" You likely forgot to export your component from the file it's defined in, or you might have mixed up default and named imports.";S===null?Me="null":uh(S)?Me="array":S!==void 0&&S.$$typeof===O2?(Me="<"+(U(S.type)||"Unknown")+" />",R=" Did you accidentally export a JSX literal instead of a component?"):Me=typeof S,(Se=G?X(G):null)&&(R+=`
Check the render method of \``+Se+"`."),Se=29,R=Error("Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: "+(Me+"."+R)),Me=null}return M=h(Se,R,M,te),M.elementType=S,M.type=Me,M.lanes=re,M._debugOwner=G,M}function An(S,M,R){return M=zt(S.type,S.key,S.props,S._owner,M,R),M._debugOwner=S._owner,M._debugStack=S._debugStack,M._debugTask=S._debugTask,M}function Un(S,M,R,G){return S=h(7,S,G,M),S.lanes=R,S}function ao(S,M,R){return S=h(6,S,null,M),S.lanes=R,S}function $i(S){var M=h(18,null,null,jr);return M.stateNode=S,M}function vs(S,M,R){return M=h(4,S.children!==null?S.children:[],S.key,M),M.lanes=R,M.stateNode={containerInfo:S.containerInfo,pendingChildren:null,implementation:S.implementation},M}function Vr(S,M){if(typeof S==="object"&&S!==null){var R=WSe.get(S);if(R!==void 0)return R;return M={value:S,source:M,stack:Ee(M)},WSe.set(S,M),M}return{value:S,source:M,stack:Ee(M)}}function Us(S,M){_2(),PO[vO++]=Tj,PO[vO++]=uae,uae=S,Tj=M}function Nl(S,M,R){_2(),ZC[eI++]=dM,ZC[eI++]=uM,ZC[eI++]=iR,iR=S;var G=dM;S=uM;var te=32-yl(G)-1;G&=~(1<<te),R+=1;var re=32-yl(M)+te;if(30<re){var Se=te-te%5;re=(G&(1<<Se)-1).toString(32),G>>=Se,te-=Se,dM=1<<32-yl(M)+te|R<<te|G,uM=re+S}else dM=1<<re|R<<te|G,uM=S}function up(S){_2(),S.return!==null&&(Us(S,1),Nl(S,1,0))}function hp(S){for(;S===uae;)uae=PO[--vO],PO[vO]=null,Tj=PO[--vO],PO[vO]=null;for(;S===iR;)iR=ZC[--eI],ZC[eI]=null,uM=ZC[--eI],ZC[eI]=null,dM=ZC[--eI],ZC[eI]=null}function Vc(){return _2(),iR!==null?{id:dM,overflow:uM}:null}function p4(S,M){_2(),ZC[eI++]=dM,ZC[eI++]=uM,ZC[eI++]=iR,dM=M.id,uM=M.overflow,iR=S}function _2(){oa||console.error("Expected to be hydrating. This is a bug in React. Please file an issue.")}function g2(S,M){if(S.return===null){if(U2===null)U2={fiber:S,children:[],serverProps:void 0,serverTail:[],distanceFromLeaf:M};else{if(U2.fiber!==S)throw Error("Saw multiple hydration diff roots in a pass. This is a bug in React.");U2.distanceFromLeaf>M&&(U2.distanceFromLeaf=M)}return U2}var R=g2(S.return,M+1).children;if(0<R.length&&R[R.length-1].fiber===S)return R=R[R.length-1],R.distanceFromLeaf>M&&(R.distanceFromLeaf=M),R;return M={fiber:S,children:[],serverProps:void 0,serverTail:[],distanceFromLeaf:M},R.push(M),M}function eN(){oa&&console.error("We should not be hydrating here. This is a bug in React. Please file a bug.")}function A4(S,M){fv||(S=g2(S,0),S.serverProps=null,M!==null&&(M=OC(M),S.serverTail.push(M)))}function oA(S){var M=1<arguments.length&&arguments[1]!==void 0?arguments[1]:!1,R="",G=U2;throw G!==null&&(U2=null,R=wd(G)),f2(Vr(Error("Hydration failed because the server rendered "+(M?"text":"HTML")+` didn't match the client. As a result this tree will be regenerated on the client. This can happen if a SSR-ed Client Component used:
- A server/client branch \`if (typeof window !== 'undefined')\`.
- Variable input such as \`Date.now()\` or \`Math.random()\` which changes each time it's called.
- Date formatting in a user's locale which doesn't match the server.
- External changing data without sending a snapshot of it along with the HTML.
- Invalid HTML tag nesting.
It can also happen if the client has a browser extension installed which messes with the HTML before React loaded.
https://react.dev/link/hydration-mismatch`+R),S)),XSe}function c_(S){var{stateNode:M,type:R,memoizedProps:G}=S;switch(M[Gu]=S,M[_A]=G,I_(R,G),R){case"dialog":gs("cancel",M),gs("close",M);break;case"iframe":case"object":case"embed":gs("load",M);break;case"video":case"audio":for(R=0;R<lq.length;R++)gs(lq[R],M);break;case"source":gs("error",M);break;case"img":case"image":case"link":gs("error",M),gs("load",M);break;case"details":gs("toggle",M);break;case"input":ai("input",G),gs("invalid",M),Co(M,G),In(M,G.value,G.defaultValue,G.checked,G.defaultChecked,G.type,G.name,!0);break;case"option":co(M,G);break;case"select":ai("select",G),gs("invalid",M),qo(M,G);break;case"textarea":ai("textarea",G),gs("invalid",M),fi(M,G),bs(M,G.value,G.defaultValue,G.children)}R=G.children,typeof R!=="string"&&typeof R!=="number"&&typeof R!=="bigint"||M.textContent===""+R||G.suppressHydrationWarning===!0||X4(M.textContent,R)?(G.popover!=null&&(gs("beforetoggle",M),gs("toggle",M)),G.onScroll!=null&&gs("scroll",M),G.onScrollEnd!=null&&gs("scrollend",M),G.onClick!=null&&(M.onclick=Dd),M=!0):M=!1,M||oA(S,!0)}function aP(S){for(fA=S.return;fA;)switch(fA.tag){case 5:case 31:case 13:tI=!1;return;case 27:case 3:tI=!0;return;default:fA=fA.return}}function cP(S){if(S!==fA)return!1;if(!oa)return aP(S),oa=!0,!1;var M=S.tag,R;if(R=M!==3&&M!==27){if(R=M===5)R=S.type,R=!(R!=="form"&&R!=="button")||UP(S.type,S.memoizedProps);R=!R}if(R&&Hd){for(R=Hd;R;){var G=g2(S,0),te=OC(R);G.serverTail.push(te),R=te.type==="Suspense"?L2(R):G0(R.nextSibling)}oA(S)}if(aP(S),M===13){if(S=S.memoizedState,S=S!==null?S.dehydrated:null,!S)throw Error("Expected to have a hydrated suspense instance. This error is likely caused by a bug in React. Please file an issue.");Hd=L2(S)}else if(M===31){if(S=S.memoizedState,S=S!==null?S.dehydrated:null,!S)throw Error("Expected to have a hydrated suspense instance. This error is likely caused by a bug in React. Please file an issue.");Hd=L2(S)}else M===27?(M=Hd,q1(S.type)?(S=YPe,YPe=null,Hd=S):Hd=M):Hd=fA?G0(S.stateNode.nextSibling):null;return!0}function uC(){Hd=fA=null,fv=oa=!1}function _4(){var S=Qw;return S!==null&&(Hf===null?Hf=S:Hf.push.apply(Hf,S),Qw=null),S}function f2(S){Qw===null?Qw=[S]:Qw.push(S)}function lP(){var S=U2;if(S!==null){U2=null;for(var M=wd(S);0<S.children.length;)S=S.children[0];ye(S.fiber,function(){console.error(`A tree hydrated but some attributes of the server rendered HTML didn't match the client properties. This won't be patched up. This can happen if a SSR-ed Client Component used:
- A server/client branch \`if (typeof window !== 'undefined')\`.
- Variable input such as \`Date.now()\` or \`Math.random()\` which changes each time it's called.
- Date formatting in a user's locale which doesn't match the server.
- External changing data without sending a snapshot of it along with the HTML.
- Invalid HTML tag nesting.
It can also happen if the client has a browser extension installed which messes with the HTML before React loaded.
%s%s`,"https://react.dev/link/hydration-mismatch",M)})}}function hC(){EO=hae=null,MO=!1}function y2(S,M,R){q(KSe,M._currentValue,S),M._currentValue=R,q(jSe,M._currentRenderer,S),M._currentRenderer!==void 0&&M._currentRenderer!==null&&M._currentRenderer!==wet&&console.error("Detected multiple renderers concurrently rendering the same context provider. This is currently unsupported."),M._currentRenderer=wet}function eg(S,M){S._currentValue=KSe.current;var R=jSe.current;j(jSe,M),S._currentRenderer=R,j(KSe,M)}function Ru(S,M,R){for(;S!==null;){var G=S.alternate;if((S.childLanes&M)!==M?(S.childLanes|=M,G!==null&&(G.childLanes|=M)):G!==null&&(G.childLanes&M)!==M&&(G.childLanes|=M),S===R)break;S=S.return}S!==R&&console.error("Expected to find the propagation root when scheduling context work. This error is likely caused by a bug in React. Please file an issue.")}function dP(S,M,R,G){var te=S.child;te!==null&&(te.return=S);for(;te!==null;){var re=te.dependencies;if(re!==null){var Se=te.child;re=re.firstContext;e:for(;re!==null;){var Me=re;re=te;for(var $e=0;$e<M.length;$e++)if(Me.context===M[$e]){re.lanes|=R,Me=re.alternate,Me!==null&&(Me.lanes|=R),Ru(re.return,R,S),G||(Se=null);break e}re=Me.next}}else if(te.tag===18){if(Se=te.return,Se===null)throw Error("We just came from a parent so we must have had a parent. This is a bug in React.");Se.lanes|=R,re=Se.alternate,re!==null&&(re.lanes|=R),Ru(Se,R,S),Se=null}else te.tag===13&&te.memoizedState!==null&&te.memoizedState.dehydrated===null?(te.lanes|=R,Se=te.alternate,Se!==null&&(Se.lanes|=R),Ru(te.return,R,S),Se=te.child,Se=Se!==null?Se.sibling:null):Se=te.child;if(Se!==null)Se.return=te;else for(Se=te;Se!==null;){if(Se===S){Se=null;break}if(te=Se.sibling,te!==null){te.return=Se.return,Se=te;break}Se=Se.return}te=Se}}function L1(S,M,R,G){S=null;for(var te=M,re=!1;te!==null;){if(!re){if((te.flags&524288)!==0)re=!0;else if((te.flags&262144)!==0)break}if(te.tag===10){var Se=te.alternate;if(Se===null)throw Error("Should have a current fiber. This is a bug in React.");if(Se=Se.memoizedProps,Se!==null){var Me=te.type;kf(te.pendingProps.value,Se.value)||(S!==null?S.push(Me):S=[Me])}}else if(te===cv.current){if(Se=te.alternate,Se===null)throw Error("Should have a current fiber. This is a bug in React.");Se.memoizedState.memoizedState!==te.memoizedState.memoizedState&&(S!==null?S.push(qO):S=[qO])}te=te.return}return S!==null&&dP(M,S,R,G),M.flags|=262144,S!==null}function x2(S){for(S=S.firstContext;S!==null;){if(!kf(S.context._currentValue,S.memoizedValue))return!0;S=S.next}return!1}function F1(S){hae=S,EO=null,S=S.dependencies,S!==null&&(S.firstContext=null)}function vc(S){return MO&&console.error("Context can only be read while React is rendering. In classes, you can read it in the render method or getDerivedStateFromProps. In function components, you can read it directly in the function body, but not inside Hooks like useReducer() or useMemo()."),tN(hae,S)}function Ib(S,M){return hae===null&&F1(S),tN(S,M)}function tN(S,M){var R=M._currentValue;if(M={context:M,memoizedValue:R,next:null},EO===null){if(S===null)throw Error("Context can only be read while React is rendering. In classes, you can read it in the render method or getDerivedStateFromProps. In function components, you can read it directly in the function body, but not inside Hooks like useReducer() or useMemo().");EO=M,S.dependencies={lanes:0,firstContext:M,_debugThenableState:null},S.flags|=524288}else EO=EO.next=M;return R}function H1(){return{controller:new zNn,data:new Map,refCount:0}}function C2(S){S.controller.signal.aborted&&console.warn("A cache instance was retained after it was already freed. This likely indicates a bug in React."),S.refCount++}function tg(S){S.refCount--,0>S.refCount&&console.warn("A cache instance was released after it was already freed. This likely indicates a bug in React."),S.refCount===0&&GNn(YNn,function(){S.controller.abort()})}function mf(S,M){if((S.pendingLanes&4194048)!==0){var R=S.transitionTypes;R===null&&(R=S.transitionTypes=[]);for(S=0;S<M.length;S++){var G=M[S];R.indexOf(G)===-1&&R.push(G)}}}function uP(S){var M=S.transitionTypes;return S.transitionTypes=null,M}function l_(S,M,R){if((S&127)!==0)0>yv&&(yv=K0(),Rj=mae(M),qSe=M,R!=null&&(JSe=V(R)),(fc&(Pp|K2))!==IA&&(Hh=!0,Lw=Nj),S=b_(),M=B2(),S!==BO||M!==Qj?BO=-1.1:M!==null&&(Lw=Nj),sR=S,Qj=M);else if((S&4194048)!==0&&0>nI&&(nI=K0(),kj=mae(M),Tet=M,R!=null&&(Det=V(R)),0>pM)){if(S=b_(),M=B2(),S!==Hw||M!==aR)Hw=-1.1;Fw=S,aR=M}}function nN(S){if(0>yv){yv=K0(),Rj=S._debugTask!=null?S._debugTask:null,(fc&(Pp|K2))!==IA&&(Lw=Nj);var M=b_(),R=B2();M!==BO||R!==Qj?BO=-1.1:R!==null&&(Lw=Nj),sR=M,Qj=R}if(0>nI&&(nI=K0(),kj=S._debugTask!=null?S._debugTask:null,0>pM)){if(S=b_(),M=B2(),S!==Hw||M!==aR)Hw=-1.1;Fw=S,aR=M}}function ng(){var S=rR;return rR=0,S}function g4(S){var M=rR;return rR=S,M}function d_(S){var M=rR;return rR+=S,M}function bb(){Hr=gr=-1.1}function Th(){var S=gr;return gr=-1.1,S}function xm(S){0<=S&&(gr=S)}function og(){var S=hh;return hh=-0,S}function u_(S){0<=S&&(hh=S)}function pf(){var S=Yu;return Yu=null,S}function Al(){var S=Hh;return Hh=!1,S}function f4(S){Lf=K0(),0>S.actualStartTime&&(S.actualStartTime=Lf)}function s9(S){if(0<=Lf){var M=K0()-Lf;S.actualDuration+=M,S.selfBaseDuration=M,Lf=-1}}function oN(S){if(0<=Lf){var M=K0()-Lf;S.actualDuration+=M,Lf=-1}}function Af(){if(0<=Lf){var S=K0(),M=S-Lf;Lf=-1,rR+=M,hh+=M,Hr=S}}function iN(S){Yu===null&&(Yu=[]),Yu.push(S),mM===null&&(mM=[]),mM.push(S)}function h_(){Lf=K0(),0>gr&&(gr=Lf)}function m_(S){for(var M=S.child;M;)S.actualDuration+=M.actualDuration,M=M.sibling}function Sb(S,M){if(Fj===null){var R=Fj=[];tPe=0,Ow=E2(),wO={status:"pending",value:void 0,then:function(G){R.push(G)}}}return tPe++,M.then(rN,rN),M}function rN(){if(--tPe===0&&(-1<nI||(pM=-1.1),Dj=null,Fj!==null)){wO!==null&&(wO.status="fulfilled");var S=Fj;Fj=null,Ow=0,wO=null;for(var M=0;M<S.length;M++)(0,S[M])()}}function MH(S,M){var R=[],G={status:"pending",value:null,reason:null,then:function(te){R.push(te)}};return S.then(function(){G.status="fulfilled",G.value=M;for(var te=0;te<R.length;te++)(0,R[te])(M)},function(te){G.status="rejected",G.reason=te;for(te=0;te<R.length;te++)(0,R[te])(void 0)}),G}function y4(){var S=lR.current;return S!==null?S:_d.pooledCache}function hP(S,M){M===null?q(lR,lR.current,S):q(lR,M.pool,S)}function Pb(){var S=y4();return S===null?null:{parent:wm._currentValue,pool:S}}function x4(){return{didWarnAboutUncachedPromise:!1,thenables:[]}}function a9(S){return S=S.status,S==="fulfilled"||S==="rejected"}function C4(S,M,R,G){Dn.actQueue!==null&&(Dn.didUsePromise=!0);var te=S.thenables;if(R=te[R],R===void 0?te.push(M):R!==M&&(S.didWarnAboutUncachedPromise||(S.didWarnAboutUncachedPromise=!0,console.error("A component was suspended by an uncached promise. Creating promises inside a Client Component or hook is not yet supported, except via a Suspense-compatible library or framework.")),M.then(Dd,Dd),M=R),M._debugInfo===void 0){S=performance.now(),te=M.displayName;var re={name:typeof te==="string"?te:"Promise",start:S,end:S,value:M};M._debugInfo=[{awaited:re}],M.status!=="fulfilled"&&M.status!=="rejected"&&(S=function(){re.end=performance.now()},M.then(S,S))}switch(M.status){case"fulfilled":return M.value;case"rejected":if(G=M.reason,l9(G),G===void 0&&!("reason"in M))throw Error("A rejected Promise was passed to React without a `reason` property. React threw a generic error from where the Promise was used to assist in identifying the problematic Promise. Make sure that instrumented Promises correctly set the `reason` property when setting `status` to `'rejected'`.");throw G;default:if(typeof M.status==="string")M.then(Dd,Dd);else{if(S=_d,S!==null&&100<S.shellSuspendCounter)throw Error("An unknown Component is an async Client Component. Only Server Components can be async at the moment. This error is often caused by accidentally adding `'use client'` to a module that was originally written for the server.");S=M,S.status="pending",S.then(function(Se){if(M.status==="pending"){var Me=M;Me.status="fulfilled",Me.value=Se}},function(Se){if(M.status==="pending"){var Me=M;Me.status="rejected",Me.reason=Se}})}switch(M.status){case"fulfilled":return M.value;case"rejected":throw G=M.reason,l9(G),G}throw hR=M,Uj=!0,rPe||G===null||G.alternate!==null||(uR=G,Iae=Error("This library called use() to suspend in a previous render but did not call use() when it finished. This indicates an incorrect use of use(). Learn more: https://react.dev/warnings/conditional-use-of-use")),TO}}function O1(S){try{return KNn(S)}catch(M){if(M!==null&&typeof M==="object"&&typeof M.then==="function")throw hR=M,Uj=!0,TO;throw M}}function c9(){if(hR===null)throw Error("Expected a suspended thenable. This is a bug in React. Please file an issue.");var S=hR;return hR=null,Uj=!1,S}function l9(S){if(S===TO||S===xae)throw Error("Hooks are not supported inside an async component. This error is often caused by accidentally adding `'use client'` to a module that was originally written for the server.")}function d9(S,M){return S===M?!0:S.tag!==M.tag||S.type!==M.type||S.key!==M.key||S.index!==M.index||S.tag===3&&S.stateNode!==M.stateNode||S.return===null||M.return===null?!1:d9(S.return,M.return)}function Cm(S){var M=Ia;return S!=null&&(Ia=M===null?S:M.concat(S)),M}function _f(){var S=Ia;if(S!=null){for(var M=S.length-1;0<=M;M--)if(S[M].name!=null){var R=S[M].debugTask;if(R!=null)return R}}return null}function mP(S,M,R){for(var G=Object.keys(S.props),te=0;te<G.length;te++){var re=G[te];if(re!=="children"&&re!=="key"&&re!=="ref"){M===null&&(M=An(S,R.mode,0),M._debugInfo=Ia,M.return=R),ye(M,function(Se){console.error("Invalid prop `%s` supplied to `React.Fragment`. React.Fragment can only have `key`, `ref`, and `children` props.",Se)},re);break}}}function u9(S){var M=Wj;return Wj+=1,DO===null&&(DO=x4()),C4(DO,S,M,null)}function z1(S,M){M=M.props.ref,S.ref=M!==void 0?M:null}function iA(S,M){if(M.$$typeof===bw)throw Error(`A React Element from an older version of React was rendered. This is not supported. It can happen if:
- Multiple copies of the "react" package is used.
- A library pre-bundled an old copy of "react" or "react/jsx-runtime".
- A compiler tries to "inline" JSX instead of using the runtime.`);throw S=Object.prototype.toString.call(M),Error("Objects are not valid as a React child (found: "+(S==="[object Object]"?"object with keys {"+Object.keys(M).join(", ")+"}":S)+"). If you meant to render a collection of children, use an array instead.")}function I4(S,M){var R=_f();R!==null?R.run(iA.bind(null,S,M)):iA(S,M)}function h9(S,M){var R=V(S)||"Component";qet[R]||(qet[R]=!0,M=M.displayName||M.name||"Component",S.tag===3?console.error(`Functions are not valid as a React child. This may happen if you return %s instead of <%s /> from render. Or maybe you meant to call this function rather than return it.
root.render(%s)`,M,M,M):console.error(`Functions are not valid as a React child. This may happen if you return %s instead of <%s /> from render. Or maybe you meant to call this function rather than return it.
<%s>{%s}</%s>`,M,M,R,M,R))}function b4(S,M){var R=_f();R!==null?R.run(h9.bind(null,S,M)):h9(S,M)}function sN(S,M){var R=V(S)||"Component";Jet[R]||(Jet[R]=!0,M=String(M),S.tag===3?console.error(`Symbols are not valid as a React child.
root.render(%s)`,M):console.error(`Symbols are not valid as a React child.
<%s>%s</%s>`,R,M,R))}function pP(S,M){var R=_f();R!==null?R.run(sN.bind(null,S,M)):sN(S,M)}function m9(S){function M(Yt,Vt){if(S){var Jt=Yt.deletions;Jt===null?(Yt.deletions=[Vt],Yt.flags|=16):Jt.push(Vt)}}function R(Yt,Vt){if(!S)return null;for(;Vt!==null;)M(Yt,Vt),Vt=Vt.sibling;return null}function G(Yt){for(var Vt=new Map;Yt!==null;)Yt.key===null?Vt.set(Yt.index,Yt):Vt.set(Yt.key,Yt),Yt=Yt.sibling;return Vt}function te(Yt,Vt){return Yt=Qa(Yt,Vt),Yt.index=0,Yt.sibling=null,Yt}function re(Yt,Vt,Jt){if(Yt.index=Jt,!S)return Yt.flags|=1048576,Vt;if(Jt=Yt.alternate,Jt!==null)return Jt=Jt.index,Jt<Vt?(Yt.flags|=2,Vt):Jt;return Yt.flags|=134217730,Vt}function Se(Yt){return S&&Yt.alternate===null&&(Yt.flags|=134217730),Yt}function Me(Yt,Vt,Jt,Nn){if(Vt===null||Vt.tag!==6)return Vt=ao(Jt,Yt.mode,Nn),Vt.return=Yt,Vt._debugOwner=Yt,Vt._debugTask=Yt._debugTask,Vt._debugInfo=Ia,Vt;return Vt=te(Vt,Jt),Vt.return=Yt,Vt._debugInfo=Ia,Vt}function $e(Yt,Vt,Jt,Nn){var Bo=Jt.type;if(Bo===sv)return Vt=Bt(Yt,Vt,Jt.props.children,Nn,Jt.key),z1(Vt,Jt),mP(Jt,Vt,Yt),Vt;if(Vt!==null&&(Vt.elementType===Bo||yi(Vt,Jt)||typeof Bo==="object"&&Bo!==null&&Bo.$$typeof===W0&&O1(Bo)===Vt.type))return Vt=te(Vt,Jt.props),z1(Vt,Jt),Vt.return=Yt,Vt._debugOwner=Jt._owner,Vt._debugInfo=Ia,Vt;return Vt=An(Jt,Yt.mode,Nn),z1(Vt,Jt),Vt.return=Yt,Vt._debugInfo=Ia,Vt}function dt(Yt,Vt,Jt,Nn){if(Vt===null||Vt.tag!==4||Vt.stateNode.containerInfo!==Jt.containerInfo||Vt.stateNode.implementation!==Jt.implementation)return Vt=vs(Jt,Yt.mode,Nn),Vt.return=Yt,Vt._debugInfo=Ia,Vt;return Vt=te(Vt,Jt.children||[]),Vt.return=Yt,Vt._debugInfo=Ia,Vt}function Bt(Yt,Vt,Jt,Nn,Bo){if(Vt===null||Vt.tag!==7)return Vt=Un(Jt,Yt.mode,Nn,Bo),Vt.return=Yt,Vt._debugOwner=Yt,Vt._debugTask=Yt._debugTask,Vt._debugInfo=Ia,Vt;return Vt=te(Vt,Jt),Vt.return=Yt,Vt._debugInfo=Ia,Vt}function qt(Yt,Vt,Jt){if(typeof Vt==="string"&&Vt!==""||typeof Vt==="number"||typeof Vt==="bigint")return Vt=ao(""+Vt,Yt.mode,Jt),Vt.return=Yt,Vt._debugOwner=Yt,Vt._debugTask=Yt._debugTask,Vt._debugInfo=Ia,Vt;if(typeof Vt==="object"&&Vt!==null){switch(Vt.$$typeof){case O2:return Jt=An(Vt,Yt.mode,Jt),z1(Jt,Vt),Jt.return=Yt,Yt=Cm(Vt._debugInfo),Jt._debugInfo=Ia,Ia=Yt,Jt;case rv:return Vt=vs(Vt,Yt.mode,Jt),Vt.return=Yt,Vt._debugInfo=Ia,Vt;case W0:var Nn=Cm(Vt._debugInfo);return Vt=O1(Vt),Yt=qt(Yt,Vt,Jt),Ia=Nn,Yt}if(uh(Vt)||Y(Vt))return Jt=Un(Vt,Yt.mode,Jt,null),Jt.return=Yt,Jt._debugOwner=Yt,Jt._debugTask=Yt._debugTask,Yt=Cm(Vt._debugInfo),Jt._debugInfo=Ia,Ia=Yt,Jt;if(typeof Vt.then==="function")return Nn=Cm(Vt._debugInfo),Yt=qt(Yt,u9(Vt),Jt),Ia=Nn,Yt;if(Vt.$$typeof===Kc)return qt(Yt,Ib(Yt,Vt),Jt);I4(Yt,Vt)}return typeof Vt==="function"&&b4(Yt,Vt),typeof Vt==="symbol"&&pP(Yt,Vt),null}function Kt(Yt,Vt,Jt,Nn){var Bo=Vt!==null?Vt.key:null;if(typeof Jt==="string"&&Jt!==""||typeof Jt==="number"||typeof Jt==="bigint")return Bo!==null?null:Me(Yt,Vt,""+Jt,Nn);if(typeof Jt==="object"&&Jt!==null){switch(Jt.$$typeof){case O2:return Jt.key===Bo?(Bo=Cm(Jt._debugInfo),Yt=$e(Yt,Vt,Jt,Nn),Ia=Bo,Yt):null;case rv:return Jt.key===Bo?dt(Yt,Vt,Jt,Nn):null;case W0:return Bo=Cm(Jt._debugInfo),Jt=O1(Jt),Yt=Kt(Yt,Vt,Jt,Nn),Ia=Bo,Yt}if(uh(Jt)||Y(Jt)){if(Bo!==null)return null;return Bo=Cm(Jt._debugInfo),Yt=Bt(Yt,Vt,Jt,Nn,null),Ia=Bo,Yt}if(typeof Jt.then==="function")return Bo=Cm(Jt._debugInfo),Yt=Kt(Yt,Vt,u9(Jt),Nn),Ia=Bo,Yt;if(Jt.$$typeof===Kc)return Kt(Yt,Vt,Ib(Yt,Jt),Nn);I4(Yt,Jt)}return typeof Jt==="function"&&b4(Yt,Jt),typeof Jt==="symbol"&&pP(Yt,Jt),null}function un(Yt,Vt,Jt,Nn,Bo){if(typeof Nn==="string"&&Nn!==""||typeof Nn==="number"||typeof Nn==="bigint")return Yt=Yt.get(Jt)||null,Me(Vt,Yt,""+Nn,Bo);if(typeof Nn==="object"&&Nn!==null){switch(Nn.$$typeof){case O2:return Jt=Yt.get(Nn.key===null?Jt:Nn.key)||null,Yt=Cm(Nn._debugInfo),Vt=$e(Vt,Jt,Nn,Bo),Ia=Yt,Vt;case rv:return Yt=Yt.get(Nn.key===null?Jt:Nn.key)||null,dt(Vt,Yt,Nn,Bo);case W0:var Or=Cm(Nn._debugInfo);return Nn=O1(Nn),Vt=un(Yt,Vt,Jt,Nn,Bo),Ia=Or,Vt}if(uh(Nn)||Y(Nn))return Jt=Yt.get(Jt)||null,Yt=Cm(Nn._debugInfo),Vt=Bt(Vt,Jt,Nn,Bo,null),Ia=Yt,Vt;if(typeof Nn.then==="function")return Or=Cm(Nn._debugInfo),Vt=un(Yt,Vt,Jt,u9(Nn),Bo),Ia=Or,Vt;if(Nn.$$typeof===Kc)return un(Yt,Vt,Jt,Ib(Vt,Nn),Bo);I4(Vt,Nn)}return typeof Nn==="function"&&b4(Vt,Nn),typeof Nn==="symbol"&&pP(Vt,Nn),null}function ho(Yt,Vt,Jt,Nn){if(typeof Jt!=="object"||Jt===null)return Nn;switch(Jt.$$typeof){case O2:case rv:d(Yt,Vt,Jt);var Bo=Jt.key;if(typeof Bo!=="string")break;if(Nn===null){Nn=new Set,Nn.add(Bo);break}if(!Nn.has(Bo)){Nn.add(Bo);break}ye(Vt,function(){console.error("Encountered two children with the same key, `%s`. Keys should be unique so that components maintain their identity across updates. Non-unique keys may cause children to be duplicated and/or omitted — the behavior is unsupported and could change in a future version.",Bo)});break;case W0:Jt=O1(Jt),ho(Yt,Vt,Jt,Nn)}return Nn}function ui(Yt,Vt,Jt,Nn){for(var Bo=null,Or=null,er=null,Os=Vt,ma=Vt=0,Ah=null;Os!==null&&ma<Jt.length;ma++){Os.index>ma?(Ah=Os,Os=null):Ah=Os.sibling;var Jl=Kt(Yt,Os,Jt[ma],Nn);if(Jl===null){Os===null&&(Os=Ah);break}Bo=ho(Yt,Jl,Jt[ma],Bo),S&&Os&&Jl.alternate===null&&M(Yt,Os),Vt=re(Jl,Vt,ma),er===null?Or=Jl:er.sibling=Jl,er=Jl,Os=Ah}if(ma===Jt.length)return R(Yt,Os),oa&&Us(Yt,ma),Or;if(Os===null){for(;ma<Jt.length;ma++)Os=qt(Yt,Jt[ma],Nn),Os!==null&&(Bo=ho(Yt,Os,Jt[ma],Bo),Vt=re(Os,Vt,ma),er===null?Or=Os:er.sibling=Os,er=Os);return oa&&Us(Yt,ma),Or}for(Os=G(Os);ma<Jt.length;ma++)Ah=un(Os,Yt,ma,Jt[ma],Nn),Ah!==null&&(Bo=ho(Yt,Ah,Jt[ma],Bo),S&&(Jl=Ah.alternate,Jl!==null&&Os.delete(Jl.key===null?ma:Jl.key)),Vt=re(Ah,Vt,ma),er===null?Or=Ah:er.sibling=Ah,er=Ah);return S&&Os.forEach(function(CM){return M(Yt,CM)}),oa&&Us(Yt,ma),Or}function Zi(Yt,Vt,Jt,Nn){if(Jt==null)throw Error("An iterable object provided no iterator.");for(var Bo=null,Or=null,er=Vt,Os=Vt=0,ma=null,Ah=null,Jl=Jt.next();er!==null&&!Jl.done;Os++,Jl=Jt.next()){er.index>Os?(ma=er,er=null):ma=er.sibling;var CM=Kt(Yt,er,Jl.value,Nn);if(CM===null){er===null&&(er=ma);break}Ah=ho(Yt,CM,Jl.value,Ah),S&&er&&CM.alternate===null&&M(Yt,er),Vt=re(CM,Vt,Os),Or===null?Bo=CM:Or.sibling=CM,Or=CM,er=ma}if(Jl.done)return R(Yt,er),oa&&Us(Yt,Os),Bo;if(er===null){for(;!Jl.done;Os++,Jl=Jt.next())er=qt(Yt,Jl.value,Nn),er!==null&&(Ah=ho(Yt,er,Jl.value,Ah),Vt=re(er,Vt,Os),Or===null?Bo=er:Or.sibling=er,Or=er);return oa&&Us(Yt,Os),Bo}for(er=G(er);!Jl.done;Os++,Jl=Jt.next())ma=un(er,Yt,Os,Jl.value,Nn),ma!==null&&(Ah=ho(Yt,ma,Jl.value,Ah),S&&(Jl=ma.alternate,Jl!==null&&er.delete(Jl.key===null?Os:Jl.key)),Vt=re(ma,Vt,Os),Or===null?Bo=ma:Or.sibling=ma,Or=ma);return S&&er.forEach(function(yRn){return M(Yt,yRn)}),oa&&Us(Yt,Os),Bo}function Xs(Yt,Vt,Jt,Nn){if(typeof Jt==="object"&&Jt!==null&&Jt.type===sv&&Jt.key===null&&Jt.props.ref===void 0&&(mP(Jt,null,Yt),Jt=Jt.props.children),typeof Jt==="object"&&Jt!==null){switch(Jt.$$typeof){case O2:var Bo=Cm(Jt._debugInfo);e:{for(var Or=Jt.key;Vt!==null;){if(Vt.key===Or){if(Or=Jt.type,Or===sv){if(Vt.tag===7){R(Yt,Vt.sibling),Nn=te(Vt,Jt.props.children),z1(Nn,Jt),Nn.return=Yt,Nn._debugOwner=Jt._owner,Nn._debugInfo=Ia,mP(Jt,Nn,Yt),Yt=Nn;break e}}else if(Vt.elementType===Or||yi(Vt,Jt)||typeof Or==="object"&&Or!==null&&Or.$$typeof===W0&&O1(Or)===Vt.type){R(Yt,Vt.sibling),Nn=te(Vt,Jt.props),z1(Nn,Jt),Nn.return=Yt,Nn._debugOwner=Jt._owner,Nn._debugInfo=Ia,Yt=Nn;break e}R(Yt,Vt);break}else M(Yt,Vt);Vt=Vt.sibling}Jt.type===sv?(Nn=Un(Jt.props.children,Yt.mode,Nn,Jt.key),z1(Nn,Jt),Nn.return=Yt,Nn._debugOwner=Yt,Nn._debugTask=Yt._debugTask,Nn._debugInfo=Ia,mP(Jt,Nn,Yt),Yt=Nn):(Nn=An(Jt,Yt.mode,Nn),z1(Nn,Jt),Nn.return=Yt,Nn._debugInfo=Ia,Yt=Nn)}return Yt=Se(Yt),Ia=Bo,Yt;case rv:e:{Bo=Jt;for(Jt=Bo.key;Vt!==null;){if(Vt.key===Jt)if(Vt.tag===4&&Vt.stateNode.containerInfo===Bo.containerInfo&&Vt.stateNode.implementation===Bo.implementation){R(Yt,Vt.sibling),Nn=te(Vt,Bo.children||[]),Nn.return=Yt,Yt=Nn;break e}else{R(Yt,Vt);break}else M(Yt,Vt);Vt=Vt.sibling}Nn=vs(Bo,Yt.mode,Nn),Nn.return=Yt,Yt=Nn}return Se(Yt);case W0:return Bo=Cm(Jt._debugInfo),Jt=O1(Jt),Yt=Xs(Yt,Vt,Jt,Nn),Ia=Bo,Yt}if(uh(Jt))return ui(Yt,Vt,Jt,Nn);if(Y(Jt)){if(Bo=Jt,Jt=Y(Bo),typeof Jt!=="function")throw Error("An object is not an iterable. This error is likely caused by a bug in React. Please file an issue.");if(Or=Jt.call(Bo),Or===Bo){if(Yt.tag!==0||Object.prototype.toString.call(Yt.type)!=="[object GeneratorFunction]"||Object.prototype.toString.call(Or)!=="[object Generator]")Ket||console.error("Using Iterators as children is unsupported and will likely yield unexpected results because enumerating a generator mutates it. You may convert it to an array with `Array.from()` or the `[...spread]` operator before rendering. You can also use an Iterable that can iterate multiple times over the same items."),Ket=!0}else Bo.entries!==Jt||sPe||(console.error("Using Maps as children is not supported. Use an array of keyed ReactElements instead."),sPe=!0);return Zi(Yt,Vt,Or,Nn)}if(typeof Jt.then==="function")return Bo=Cm(Jt._debugInfo),Yt=Xs(Yt,Vt,u9(Jt),Nn),Ia=Bo,Yt;if(Jt.$$typeof===Kc)return Xs(Yt,Vt,Ib(Yt,Jt),Nn);I4(Yt,Jt)}if(typeof Jt==="string"&&Jt!==""||typeof Jt==="number"||typeof Jt==="bigint")return Bo=""+Jt,Vt!==null&&Vt.tag===6?(R(Yt,Vt.sibling),Nn=te(Vt,Bo),Nn.return=Yt,Yt=Nn):(R(Yt,Vt),Nn=ao(Bo,Yt.mode,Nn),Nn.return=Yt,Nn._debugOwner=Yt,Nn._debugTask=Yt._debugTask,Nn._debugInfo=Ia,Yt=Nn),Se(Yt);return typeof Jt==="function"&&b4(Yt,Jt),typeof Jt==="symbol"&&pP(Yt,Jt),R(Yt,Vt)}return function(Yt,Vt,Jt,Nn){var Bo=Ia;Ia=null;try{Wj=0;var Or=Xs(Yt,Vt,Jt,Nn);return DO=null,Or}catch(Ah){if(Ah===TO||Ah===xae)throw Ah;var er=h(29,Ah,null,Yt.mode);er.lanes=Nn,er.return=Yt;var Os=er._debugInfo=Ia;if(er._debugOwner=Yt._debugOwner,er._debugTask=Yt._debugTask,Os!=null){for(var ma=Os.length-1;0<=ma;ma--)if(typeof Os[ma].stack==="string"){er._debugOwner=Os[ma],er._debugTask=Os[ma].debugTask;break}}return er}finally{Ia=Bo}}}function aN(S,M){var R=uh(S);return S=!R&&typeof Y(S)==="function",R||S?(R=R?"array":"iterable",console.error("A nested %s was passed to row #%s in <SuspenseList />. Wrap it in an additional SuspenseList to configure its revealOrder: <SuspenseList revealOrder=...> ... <SuspenseList revealOrder=...>{%s}</SuspenseList> ... </SuspenseList>",R,M,R),!1):!0}function AP(S){S.updateQueue={baseState:S.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,lanes:0,hiddenCallbacks:null},callbacks:null}}function vb(S,M){S=S.updateQueue,M.updateQueue===S&&(M.updateQueue={baseState:S.baseState,firstBaseUpdate:S.firstBaseUpdate,lastBaseUpdate:S.lastBaseUpdate,shared:S.shared,callbacks:null})}function Ac(S){return{lane:S,tag:Zet,payload:null,callback:null,next:null}}function mC(S,M,R){var G=S.updateQueue;if(G===null)return null;if(G=G.shared,cPe===G&&!ntt){var te=V(S);console.error(`An update (setState, replaceState, or forceUpdate) was scheduled from inside an update function. Update functions should be pure, with zero side-effects. Consider using componentDidUpdate or a callback.
Please update the following component: %s`,te),ntt=!0}if((fc&Pp)!==IA)return te=G.pending,te===null?M.next=M:(M.next=te.next,te.next=M),G.pending=M,M=Io(S),Jn(S,null,R),M;return dn(S,G,M,R),Io(S)}function S4(S,M,R){if(M=M.updateQueue,M!==null&&(M=M.shared,(R&4194048)!==0)){var G=M.lanes;G&=S.pendingLanes,R|=G,M.lanes=R,mt(S,R)}}function P4(S,M){var R=S.updateQueue,G=S.alternate;if(G!==null&&(G=G.updateQueue,R===G)){var te=null,re=null;if(R=R.firstBaseUpdate,R!==null){do{var Se={lane:R.lane,tag:R.tag,payload:R.payload,callback:null,next:null};re===null?te=re=Se:re=re.next=Se,R=R.next}while(R!==null);re===null?te=re=M:re=re.next=M}else te=re=M;R={baseState:G.baseState,firstBaseUpdate:te,lastBaseUpdate:re,shared:G.shared,callbacks:G.callbacks},S.updateQueue=R;return}S=R.lastBaseUpdate,S===null?R.firstBaseUpdate=M:S.next=M,R.lastBaseUpdate=M}function rA(){if(lPe){var S=wO;if(S!==null)throw S}}function _P(S,M,R,G){lPe=!1;var te=S.updateQueue;zw=!1,cPe=te.shared;var{firstBaseUpdate:re,lastBaseUpdate:Se}=te,Me=te.shared.pending;if(Me!==null){te.shared.pending=null;var $e=Me,dt=$e.next;$e.next=null,Se===null?re=dt:Se.next=dt,Se=$e;var Bt=S.alternate;Bt!==null&&(Bt=Bt.updateQueue,Me=Bt.lastBaseUpdate,Me!==Se&&(Me===null?Bt.firstBaseUpdate=dt:Me.next=dt,Bt.lastBaseUpdate=$e))}if(re!==null){var qt=te.baseState;Se=0,Bt=dt=$e=null,Me=re;do{var Kt=Me.lane&-536870913,un=Kt!==Me.lane;if(un?(ks&Kt)===Kt:(G&Kt)===Kt){Kt!==0&&Kt===Ow&&(lPe=!0),Bt!==null&&(Bt=Bt.next={lane:0,tag:Me.tag,payload:Me.payload,callback:null,next:null});e:{Kt=S;var ho=Me,ui=M,Zi=R;switch(ho.tag){case ett:if(ho=ho.payload,typeof ho==="function"){MO=!0;var Xs=ho.call(Zi,qt,ui);if(Kt.mode&xg){gt(!0);try{ho.call(Zi,qt,ui)}finally{gt(!1)}}MO=!1,qt=Xs;break e}qt=ho;break e;case aPe:Kt.flags=Kt.flags&-65537|128;case Zet:if(Xs=ho.payload,typeof Xs==="function"){if(MO=!0,ho=Xs.call(Zi,qt,ui),Kt.mode&xg){gt(!0);try{Xs.call(Zi,qt,ui)}finally{gt(!1)}}MO=!1}else ho=Xs;if(ho===null||ho===void 0)break e;qt=Qs({},qt,ho);break e;case ttt:zw=!0}}Kt=Me.callback,Kt!==null&&(S.flags|=64,un&&(S.flags|=8192),un=te.callbacks,un===null?te.callbacks=[Kt]:un.push(Kt))}else un={lane:Kt,tag:Me.tag,payload:Me.payload,callback:Me.callback,next:null},Bt===null?(dt=Bt=un,$e=qt):Bt=Bt.next=un,Se|=Kt;if(Me=Me.next,Me===null)if(Me=te.shared.pending,Me===null)break;else un=Me,Me=un.next,un.next=null,te.lastBaseUpdate=un,te.shared.pending=null}while(1);Bt===null&&($e=qt),te.baseState=$e,te.firstBaseUpdate=dt,te.lastBaseUpdate=Bt,re===null&&(te.shared.lanes=0),Vw|=Se,S.lanes=Se,S.memoizedState=qt}cPe=null}function p9(S,M){if(typeof S!=="function")throw Error("Invalid argument passed as callback. Expected a function. Instead received: "+S);S.call(M)}function v4(S,M){var R=S.shared.hiddenCallbacks;if(R!==null)for(S.shared.hiddenCallbacks=null,S=0;S<R.length;S++)p9(R[S],M)}function Eb(S,M){var R=S.callbacks;if(R!==null)for(S.callbacks=null,S=0;S<R.length;S++)p9(R[S],M)}function A9(S,M){var R=Pv;q(bae,R,S),q(Gw,M,S),Pv=R|M.baseLanes}function E4(S){q(bae,Pv,S),q(Gw,Gw.current,S)}function _9(S){Pv=bae.current,j(Gw,S),j(bae,S)}function pC(S){var M=S.alternate;q(E_,E_.current&NO,S),q(v_,S,S),Cg===null&&(M===null||Gw.current!==null?Cg=S:M.memoizedState!==null&&(Cg=S))}function cN(S){q(E_,E_.current,S),q(v_,S,S),Cg===null&&(Cg=S)}function g9(S){S.tag===22?(q(E_,E_.current,S),q(v_,S,S),Cg===null&&(Cg=S)):AC(S)}function AC(S){q(E_,E_.current,S),q(v_,v_.current,S)}function R0(S){j(v_,S),Cg===S&&(Cg=null),j(E_,S)}function sA(S,M){q(v_,v_.current,S),q(E_,M,S)}function f9(S){j(E_,S),j(v_,S),Cg===S&&(Cg=null)}function y9(S){for(var M=S;M!==null;){if(M.tag===13){var R=M.memoizedState;if(R!==null&&(R=R.dehydrated,R===null||Dr(R)||gc(R)))return M}else if(M.tag===19&&M.memoizedProps.revealOrder!=="independent"){if((M.flags&128)!==0)return M}else if(M.child!==null){M.child.return=M,M=M.child;continue}if(M===S)break;for(;M.sibling===null;){if(M.return===null||M.return===S)return null;M=M.return}M.sibling.return=M.return,M=M.sibling}return null}function Es(){var S=Tn;iI===null?iI=[S]:iI.push(S)}function go(){var S=Tn;if(iI!==null&&(_M++,iI[_M]!==S)){var M=V(es);if(!ott.has(M)&&(ott.add(M),iI!==null)){for(var R="",G=0;G<=_M;G++){var te=iI[G],re=G===_M?S:te;for(te=G+1+". "+te;30>te.length;)te+=" ";te+=re+`
`,R+=te}console.error(`React has detected a change in the order of Hooks called by %s. This will lead to bugs and errors if not fixed. For more information, read the Rules of Hooks: https://react.dev/link/rules-of-hooks
Previous render Next render
------------------------------------------------------
%s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
`,M,R)}}}function Mb(S){S===void 0||S===null||uh(S)||console.error("%s received a final argument that is not an array (instead, received `%s`). When specified, the final argument must be an array.",Tn,typeof S)}function gP(){var S=V(es);rtt.has(S)||(rtt.add(S),console.error("ReactDOM.useFormState has been renamed to React.useActionState. Please update %s to use React.useActionState.",S))}function ud(){throw Error(`Invalid hook call. Hooks can only be called inside of the body of a function component. This could happen for one of the following reasons:
1. You might have mismatching versions of React and the renderer (such as React DOM)
2. You might be breaking the Rules of Hooks
3. You might have more than one copy of React in the same app
See https://react.dev/link/invalid-hook-call for tips about how to debug and fix this problem.`)}function Bb(S,M){if(qj)return!1;if(M===null)return console.error("%s received a final argument during this render, but not during the previous render. Even though the final argument is optional, its type cannot change between renders.",Tn),!1;S.length!==M.length&&console.error(`The final argument passed to %s changed size between renders. The order and size of this array must remain constant.
Previous: %s
Incoming: %s`,Tn,"["+M.join(", ")+"]","["+S.join(", ")+"]");for(var R=0;R<M.length&&R<S.length;R++)if(!kf(S[R],M[R]))return!1;return!0}function lN(S,M,R,G,te,re){if(AM=re,es=M,iI=S!==null?S._debugHookTypes:null,_M=-1,qj=S!==null&&S.type!==M.type,Object.prototype.toString.call(R)==="[object AsyncFunction]"||Object.prototype.toString.call(R)==="[object AsyncGeneratorFunction]")re=V(es),dPe.has(re)||(dPe.add(re),console.error("%s is an async Client Component. Only Server Components can be async at the moment. This error is often caused by accidentally adding `'use client'` to a module that was originally written for the server.",re===null?"An unknown Component":"<"+re+">"));M.memoizedState=null,M.updateQueue=null,M.lanes=0,Dn.H=S!==null&&S.memoizedState!==null?hPe:iI!==null?stt:uPe,pR=re=(M.mode&xg)!==jr;var Se=nPe(R,G,te);if(pR=!1,QO&&(Se=x9(M,R,G,te)),re){gt(!0);try{Se=x9(M,R,G,te)}finally{gt(!1)}}return dN(S,M),Se}function dN(S,M){M._debugHookTypes=iI,M.dependencies===null?xv!==null&&(M.dependencies={lanes:0,firstContext:null,_debugThenableState:xv}):M.dependencies._debugThenableState=xv;var R=xv;if(uR!==null&&d9(uR,M)&&(R!==null||Iae===null||rPe||(rPe=!0,console.error(Iae)),Iae=uR=null),Dn.H=vae,R=Ad!==null&&Ad.next!==null,AM=0,iI=Tn=Tm=Ad=es=null,_M=-1,S!==null&&(S.flags&1206910976)!==(M.flags&1206910976)&&console.error("Internal React error: Expected static flag was missing. Please notify the React team."),Sae=!1,jj=0,xv=null,R)throw Error("Rendered fewer hooks than expected. This may be caused by an accidental early return statement.");S===null||j0||(S=S.dependencies,S!==null&&x2(S)&&(j0=!0)),Uj?(Uj=!1,S=!0):S=!1,S&&(M=V(M)||"Unknown",itt.has(M)||dPe.has(M)||(itt.add(M),console.error("`use` was called from inside a try/catch block. This is not allowed and can lead to unexpected behavior. To handle errors triggered by `use`, wrap your component in a error boundary.")))}function x9(S,M,R,G){es=S;var te=0;do{if(QO&&(xv=null),jj=0,QO=!1,te>=qNn)throw Error("Too many re-renders. React limits the number of renders to prevent an infinite loop.");if(te+=1,qj=!1,Tm=Ad=null,S.updateQueue!=null){var re=S.updateQueue;re.lastEffect=null,re.events=null,re.stores=null,re.memoCache!=null&&(re.memoCache.index=0)}_M=-1,Dn.H=att,re=nPe(M,R,G)}while(QO);return re}function BH(){var S=Dn.H,M=S.useState()[0];return M=typeof M.then==="function"?wb(M):M,S=S.useState()[0],(Ad!==null?Ad.memoizedState:null)!==S&&(es.flags|=1024),M}function C9(){var S=Pae!==0;return Pae=0,S}function I9(S,M,R){M.updateQueue=S.updateQueue,M.flags=(M.mode&v5)!==jr?M.flags&-805308421:M.flags&-2053,S.lanes&=~R}function p_(S){if(Sae){for(S=S.memoizedState;S!==null;){var M=S.queue;M!==null&&(M.pending=null),S=S.next}Sae=!1}AM=0,iI=Tm=Ad=es=null,_M=-1,Tn=null,QO=!1,jj=Pae=0,xv=null}function Q0(){var S={memoizedState:null,baseState:null,baseQueue:null,queue:null,next:null};return Tm===null?es.memoizedState=Tm=S:Tm=Tm.next=S,Tm}function _c(){if(Ad===null){var S=es.alternate;S=S!==null?S.memoizedState:null}else S=Ad.next;var M=Tm===null?es.memoizedState:Tm.next;if(M!==null)Tm=M,Ad=S;else{if(S===null){if(es.alternate===null)throw Error("Update hook called on initial render. This is likely a bug in React. Please file an issue.");throw Error("Rendered more hooks than during the previous render.")}Ad=S,S={memoizedState:Ad.memoizedState,baseState:Ad.baseState,baseQueue:Ad.baseQueue,queue:Ad.queue,next:null},Tm===null?es.memoizedState=Tm=S:Tm=Tm.next=S}return Tm}function b9(){return{lastEffect:null,events:null,stores:null,memoCache:null}}function wb(S){var M=jj;return jj+=1,xv===null&&(xv=x4()),S=C4(xv,S,M,es),M=es,(Tm===null?M.memoizedState:Tm.next)===null&&(M=M.alternate,Dn.H=M!==null&&M.memoizedState!==null?hPe:uPe),S}function ou(S){if(S!==null&&typeof S==="object"){if(typeof S.then==="function")return wb(S);if(S.$$typeof===wSe)return;if(S.$$typeof===Kc)return vc(S)}throw Error("An unsupported type was passed to use(): "+String(S))}function _C(S){var M=null,R=es.updateQueue;if(R!==null&&(M=R.memoCache),M==null){var G=es.alternate;G!==null&&(G=G.updateQueue,G!==null&&(G=G.memoCache,G!=null&&(M={data:G.data.map(function(te){return te.slice()}),index:0})))}if(M==null&&(M={data:[],index:0}),R===null&&(R=b9(),es.updateQueue=R),R.memoCache=M,R=M.data[M.index],R===void 0||qj)for(R=M.data[M.index]=Array(S),G=0;G<S;G++)R[G]=G2;else R.length!==S&&console.error("Expected a constant size argument for each invocation of useMemoCache. The previous cache was allocated with size %s but size %s was requested.",R.length,S);return M.index++,R}function hd(S,M){return typeof M==="function"?M(S):M}function S9(S,M,R){var G=Q0();if(R!==void 0){var te=R(M);if(pR){gt(!0);try{R(M)}finally{gt(!1)}}}else te=M;return G.memoizedState=G.baseState=te,S={pending:null,lanes:0,dispatch:null,lastRenderedReducer:S,lastRenderedState:te},G.queue=S,S=S.dispatch=Ec.bind(null,es,S),[G.memoizedState,S]}function aA(S){var M=_c();return P9(M,Ad,S)}function P9(S,M,R){var G=S.queue;if(G===null)throw Error("Should have a queue. You are likely calling Hooks conditionally, which is not allowed. (https://react.dev/link/invalid-hook-call)");G.lastRenderedReducer=R;var te=S.baseQueue,re=G.pending;if(re!==null){if(te!==null){var Se=te.next;te.next=re.next,re.next=Se}M.baseQueue!==te&&console.error("Internal error: Expected work-in-progress queue to be a clone. This is a bug in React."),M.baseQueue=te=re,G.pending=null}if(re=S.baseState,te===null)S.memoizedState=re;else{M=te.next;var Me=Se=null,$e=null,dt=M,Bt=!1;do{var qt=dt.lane&-536870913;if(qt!==dt.lane?(ks&qt)===qt:(AM&qt)===qt){var Kt=dt.revertLane;if(Kt===0)$e!==null&&($e=$e.next={lane:0,revertLane:0,gesture:null,action:dt.action,hasEagerState:dt.hasEagerState,eagerState:dt.eagerState,next:null}),qt===Ow&&(Bt=!0);else if((AM&Kt)===Kt){dt=dt.next,Kt===Ow&&(Bt=!0);continue}else qt={lane:0,revertLane:dt.revertLane,gesture:null,action:dt.action,hasEagerState:dt.hasEagerState,eagerState:dt.eagerState,next:null},$e===null?(Me=$e=qt,Se=re):$e=$e.next=qt,es.lanes|=Kt,Vw|=Kt;qt=dt.action,pR&&R(re,qt),re=dt.hasEagerState?dt.eagerState:R(re,qt)}else Kt={lane:qt,revertLane:dt.revertLane,gesture:dt.gesture,action:dt.action,hasEagerState:dt.hasEagerState,eagerState:dt.eagerState,next:null},$e===null?(Me=$e=Kt,Se=re):$e=$e.next=Kt,es.lanes|=qt,Vw|=qt;dt=dt.next}while(dt!==null&&dt!==M);if($e===null?Se=re:$e.next=Me,!kf(re,S.memoizedState)&&(j0=!0,Bt&&(R=wO,R!==null)))throw R;S.memoizedState=re,S.baseState=Se,S.baseQueue=$e,G.lastRenderedState=re}return te===null&&(G.lanes=0),[S.memoizedState,G.dispatch]}function gf(S){var M=_c(),R=M.queue;if(R===null)throw Error("Should have a queue. You are likely calling Hooks conditionally, which is not allowed. (https://react.dev/link/invalid-hook-call)");R.lastRenderedReducer=S;var{dispatch:G,pending:te}=R,re=M.memoizedState;if(te!==null){R.pending=null;var Se=te=te.next;do re=S(re,Se.action),Se=Se.next;while(Se!==te);kf(re,M.memoizedState)||(j0=!0),M.memoizedState=re,M.baseQueue===null&&(M.baseState=re),R.lastRenderedState=re}return[re,G]}function v9(S,M,R){var G=es,te=Q0();if(oa){if(R===void 0)throw Error("Missing getServerSnapshot, which is required for server-rendered content. Will revert to client rendering.");var re=R();RO||re===R()||(console.error("The result of getServerSnapshot should be cached to avoid an infinite loop"),RO=!0)}else{if(re=M(),RO||(R=M(),kf(re,R)||(console.error("The result of getSnapshot should be cached to avoid an infinite loop"),RO=!0)),_d===null)throw Error("Expected a work-in-progress root. This is a bug in React. Please file an issue.");(ks&127)!==0||Uc(G,M,re)}return te.memoizedState=re,R={value:re,getSnapshot:M},te.queue=R,D9(ff.bind(null,G,R,S),[S]),G.flags|=2048,kb(oI|Ig,{destroy:void 0},Tb.bind(null,G,R,re,M),null),re}function ig(S,M,R){var G=es,te=_c(),re=oa;if(re){if(R===void 0)throw Error("Missing getServerSnapshot, which is required for server-rendered content. Will revert to client rendering.");R=R()}else if(R=M(),!RO){var Se=M();kf(R,Se)||(console.error("The result of getSnapshot should be cached to avoid an infinite loop"),RO=!0)}if(Se=!kf((Ad||te).memoizedState,R))te.memoizedState=R,j0=!0;te=te.queue;var Me=ff.bind(null,G,te,S);if(mp(2048,Ig,Me,[S]),S=te.getSnapshot!==M||Se||Tm!==null&&(Tm.memoizedState.tag&oI)!==Kj,kb(S?oI|Ig:Ig,{destroy:void 0},Tb.bind(null,G,te,R,M),null),S){if(G.flags|=2048,_d===null)throw Error("Expected a work-in-progress root. This is a bug in React. Please file an issue.");re||(AM&127)!==0||Uc(G,M,R)}return R}function Uc(S,M,R){S.flags|=16384,S={getSnapshot:M,value:R},M=es.updateQueue,M===null?(M=b9(),es.updateQueue=M,M.stores=[S]):(R=M.stores,R===null?M.stores=[S]:R.push(S))}function Tb(S,M,R,G){M.value=R,M.getSnapshot=G,Dh(M)&&yf(S)}function ff(S,M,R){return R(function(){Dh(M)&&(l_(2,"updateSyncExternalStore()",S),yf(S))})}function Dh(S){var M=S.getSnapshot;S=S.value;try{var R=M();return!kf(S,R)}catch(G){return!0}}function yf(S){var M=Sn(S,2);M!==null&&Ld(M,S,2)}function E9(S){var M=Q0();if(typeof S==="function"){var R=S;if(S=R(),pR){gt(!0);try{R()}finally{gt(!1)}}}return M.memoizedState=M.baseState=S,M.queue={pending:null,lanes:0,dispatch:null,lastRenderedReducer:hd,lastRenderedState:S},M}function Db(S){S=E9(S);var M=S.queue,R=O9.bind(null,es,M);return M.dispatch=R,[S.memoizedState,R]}function I2(S){var M=Q0();M.memoizedState=M.baseState=S;var R={pending:null,lanes:0,dispatch:null,lastRenderedReducer:null,lastRenderedState:null};return M.queue=R,M=z9.bind(null,es,!0,R),R.dispatch=M,[S,M]}function gC(S,M){var R=_c();return M9(R,Ad,S,M)}function M9(S,M,R,G){return S.baseState=R,P9(S,Ad,typeof G==="function"?G:hd)}function fC(S,M){var R=_c();if(Ad!==null)return M9(R,Ad,S,M);return R.baseState=S,[S,R.queue.dispatch]}function wH(S,M,R,G,te){if(A_(S))throw Error("Cannot update action state while rendering.");if(S=M.action,S!==null){var re={payload:te,action:S,next:null,isTransition:!0,status:"pending",value:null,reason:null,listeners:[],then:function(Se){re.listeners.push(Se)}};Dn.T!==null?R(!0):re.isTransition=!1,G(re),R=M.pending,R===null?(re.next=M.pending=re,M4(M,re)):(re.next=R.next,M.pending=R.next=re)}}function M4(S,M){var{action:R,payload:G}=M,te=S.state;if(M.isTransition){var re=Dn.T,Se={};Se.types=re!==null?re.types:null,Se._updatedFibers=new Set,Dn.T=Se;try{var Me=R(te,G),$e=Dn.S;$e!==null&&$e(Se,Me),B9(S,M,Me)}catch(dt){Nb(S,M,dt)}finally{re!==null&&Se.types!==null&&(re.types!==null&&re.types!==Se.types&&console.error("We expected inner Transitions to have transferred the outer types set and that you cannot add to the outer Transition while inside the inner.This is a bug in React."),re.types=Se.types),Dn.T=re,re===null&&Se._updatedFibers&&(S=Se._updatedFibers.size,Se._updatedFibers.clear(),10<S&&console.warn("Detected a large number of updates inside startTransition. If this is due to a subscription please re-write it to use React provided hooks. Otherwise concurrent mode guarantees are off the table."))}}else try{Se=R(te,G),B9(S,M,Se)}catch(dt){Nb(S,M,dt)}}function B9(S,M,R){R!==null&&typeof R==="object"&&typeof R.then==="function"?(Dn.asyncTransitions++,R.then(b2,b2),R.then(function(G){uN(S,M,G)},function(G){return Nb(S,M,G)}),M.isTransition||console.error("An async function with useActionState was called outside of a transition. This is likely not what you intended (for example, isPending will not update correctly). Either call the returned function inside startTransition, or pass it to an `action` or `formAction` prop.")):uN(S,M,R)}function uN(S,M,R){M.status="fulfilled",M.value=R,w9(M),S.state=R,M=S.pending,M!==null&&(R=M.next,R===M?S.pending=null:(R=R.next,M.next=R,M4(S,R)))}function Nb(S,M,R){var G=S.pending;if(S.pending=null,G!==null){G=G.next;do M.status="rejected",M.reason=R,w9(M),M=M.next;while(M!==G)}S.action=null}function w9(S){S=S.listeners;for(var M=0;M<S.length;M++)(0,S[M])()}function T9(S,M){return M}function Rb(S,M){if(oa){var R=_d.formState;if(R!==null){e:{var G=es;if(oa){if(Hd){t:{var te=Hd;for(var re=tI;te.nodeType!==8;){if(!re){te=null;break t}if(te=G0(te.nextSibling),te===null){te=null;break t}}re=te.data,te=re===LPe||re===Utt?te:null}if(te){Hd=G0(te.nextSibling),G=te.data===LPe;break e}}oA(G)}G=!1}G&&(M=R[0])}}return R=Q0(),R.memoizedState=R.baseState=M,G={pending:null,lanes:0,dispatch:null,lastRenderedReducer:T9,lastRenderedState:M},R.queue=G,R=O9.bind(null,es,G),G.dispatch=R,G=E9(!1),re=z9.bind(null,es,!1,G.queue),G=Q0(),te={state:M,dispatch:null,action:S,pending:null},G.queue=te,R=wH.bind(null,es,te,re,R),te.dispatch=R,G.memoizedState=S,[M,R,!1]}function Qb(S){var M=_c();return TH(M,Ad,S)}function TH(S,M,R){if(M=P9(S,M,T9)[0],S=aA(hd)[0],typeof M==="object"&&M!==null&&typeof M.then==="function")try{var G=wb(M)}catch(Se){if(Se===TO)throw xae;throw Se}else G=M;M=_c();var te=M.queue,re=te.dispatch;return R!==M.memoizedState&&(es.flags|=2048,kb(oI|Ig,{destroy:void 0},DH.bind(null,te,R),null)),[G,re,S]}function DH(S,M){S.action=M}function Im(S){var M=_c(),R=Ad;if(R!==null)return TH(M,R,S);_c(),M=M.memoizedState,R=_c();var G=R.queue.dispatch;return R.memoizedState=S,[M,G,!1]}function kb(S,M,R,G){return S={tag:S,create:R,deps:G,inst:M,next:null},M=es.updateQueue,M===null&&(M=b9(),es.updateQueue=M),R=M.lastEffect,R===null?M.lastEffect=S.next=S:(G=R.next,R.next=S,S.next=G,M.lastEffect=S),S}function Rd(S){var M=Q0();return S={current:S},M.memoizedState=S}function yC(S,M,R,G){var te=Q0();es.flags|=S,te.memoizedState=kb(oI|M,{destroy:void 0},R,G===void 0?null:G)}function mp(S,M,R,G){var te=_c();G=G===void 0?null:G;var re=te.memoizedState.inst;Ad!==null&&G!==null&&Bb(G,Ad.memoizedState.deps)?te.memoizedState=kb(M,re,R,G):(es.flags|=S,te.memoizedState=kb(oI|M,re,R,G))}function D9(S,M){(es.mode&v5)!==jr?yC(545261568,Ig,S,M):yC(8390656,Ig,S,M)}function xC(S){es.flags|=4;var M=es.updateQueue;if(M===null)M=b9(),es.updateQueue=M,M.events=[S];else{var R=M.events;R===null?M.events=[S]:R.push(S)}}function Lb(S){var M=Q0(),R={impl:S};return M.memoizedState=R,function(){if((fc&Pp)!==IA)throw Error("A function wrapped in useEffectEvent can't be called during rendering.");return R.impl.apply(void 0,arguments)}}function CC(S){var M=_c().memoizedState;return xC({ref:M,nextImpl:S}),function(){if((fc&Pp)!==IA)throw Error("A function wrapped in useEffectEvent can't be called during rendering.");return M.impl.apply(void 0,arguments)}}function IC(S,M){var R=4194308;return(es.mode&v5)!==jr&&(R|=268435456),yC(R,W2,S,M)}function hN(S,M){if(typeof M==="function"){S=S();var R=M(S);return function(){typeof R==="function"?R():M(null)}}if(M!==null&&M!==void 0)return M.hasOwnProperty("current")||console.error("Expected useImperativeHandle() first argument to either be a ref callback or React.createRef() object. Instead received: %s.","an object with keys {"+Object.keys(M).join(", ")+"}"),S=S(),M.current=S,function(){M.current=null}}function N9(S,M,R){typeof M!=="function"&&console.error("Expected useImperativeHandle() second argument to be a function that creates a handle. Instead received: %s.",M!==null?typeof M:"null"),R=R!==null&&R!==void 0?R.concat([S]):null;var G=4194308;(es.mode&v5)!==jr&&(G|=268435456),yC(G,W2,hN.bind(null,M,S),R)}function B4(S,M,R){typeof M!=="function"&&console.error("Expected useImperativeHandle() second argument to be a function that creates a handle. Instead received: %s.",M!==null?typeof M:"null"),R=R!==null&&R!==void 0?R.concat([S]):null,mp(4,W2,hN.bind(null,M,S),R)}function R9(S,M){return Q0().memoizedState=[S,M===void 0?null:M],S}function fP(S,M){var R=_c();M=M===void 0?null:M;var G=R.memoizedState;if(M!==null&&Bb(M,G[1]))return G[0];return R.memoizedState=[S,M],S}function yP(S,M){var R=Q0();M=M===void 0?null:M;var G=S();if(pR){gt(!0);try{S()}finally{gt(!1)}}return R.memoizedState=[G,M],G}function xP(S,M){var R=_c();M=M===void 0?null:M;var G=R.memoizedState;if(M!==null&&Bb(M,G[1]))return G[0];if(G=S(),pR){gt(!0);try{S()}finally{gt(!1)}}return R.memoizedState=[G,M],G}function CP(S,M){var R=Q0();return k9(R,S,M)}function NH(S,M){var R=_c();return L9(R,Ad.memoizedState,S,M)}function Q9(S,M){var R=_c();return Ad===null?k9(R,S,M):L9(R,Ad.memoizedState,S,M)}function k9(S,M,R){if(R===void 0||(AM&1073741824)!==0&&(ks&261930)===0)return S.memoizedState=M;return S.memoizedState=R,S=iw(),es.lanes|=S,Vw|=S,R}function L9(S,M,R,G){if(kf(R,M))return R;if(Gw.current!==null)return S=k9(S,R,G),kf(S,M)||(j0=!0),S;if((AM&106)===0||(AM&1073741824)!==0&&(ks&261930)===0)return j0=!0,S.memoizedState=R;return S=iw(),es.lanes|=S,Vw|=S,M}function b2(){Dn.asyncTransitions--}function w4(S,M,R,G,te){var re=ac.p;ac.p=re!==0&&re<Mm?re:Mm;var Se=Dn.T,Me={};Me.types=Se!==null?Se.types:null,Me._updatedFibers=new Set,Dn.T=Me,z9(S,!1,M,R);try{var $e=te(),dt=Dn.S;if(dt!==null&&dt(Me,$e),$e!==null&&typeof $e==="object"&&typeof $e.then==="function"){Dn.asyncTransitions++,$e.then(b2,b2);var Bt=MH($e,G);N4(S,M,Bt,L0(S))}else N4(S,M,G,L0(S))}catch(qt){N4(S,M,{then:function(){},status:"rejected",reason:qt},L0(S))}finally{ac.p=re,Se!==null&&Me.types!==null&&(Se.types!==null&&Se.types!==Me.types&&console.error("We expected inner Transitions to have transferred the outer types set and that you cannot add to the outer Transition while inside the inner.This is a bug in React."),Se.types=Me.types),Dn.T=Se,Se===null&&Me._updatedFibers&&(S=Me._updatedFibers.size,Me._updatedFibers.clear(),10<S&&console.warn("Detected a large number of updates inside startTransition. If this is due to a subscription please re-write it to use React provided hooks. Otherwise concurrent mode guarantees are off the table."))}}function F9(S,M,R,G){if(S.tag!==5)throw Error("Expected the form instance to be a HostComponent. This is a bug in React.");var te=T4(S).queue;nN(S),w4(S,te,M,ER,R===null?l:function(){return mN(S),R(G)})}function T4(S){var M=S.memoizedState;if(M!==null)return M;M={memoizedState:ER,baseState:ER,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:hd,lastRenderedState:ER},next:null};var R={};return M.next={memoizedState:R,baseState:R,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:hd,lastRenderedState:R},next:null},S.memoizedState=M,S=S.alternate,S!==null&&(S.memoizedState=M),M}function mN(S){Dn.T===null&&console.error("requestFormReset was called outside a transition or action. To fix, move to an action, or wrap with startTransition.");var M=T4(S);M.next===null&&(M=S.alternate.memoizedState),N4(S,M.next.queue,{},L0(S))}function D4(){var S=E9(!1);return S=w4.bind(null,es,S.queue,!0,!1),Q0().memoizedState=S,[!1,S]}function pN(){var S=aA(hd)[0],M=_c().memoizedState;return[typeof S==="boolean"?S:wb(S),M]}function RH(){var S=gf(hd)[0],M=_c().memoizedState;return[typeof S==="boolean"?S:wb(S),M]}function S2(){return vc(qO)}function bC(){var S=Q0(),M=_d.identifierPrefix;if(oa){var R=uM,G=dM;R=(G&~(1<<32-yl(G)-1)).toString(32)+R,M="_"+M+"R_"+R,R=Pae++,0<R&&(M+="H"+R.toString(32)),M+="_"}else R=jNn++,M="_"+M+"r_"+R.toString(32)+"_";return S.memoizedState=M}function H9(){return Q0().memoizedState=QH.bind(null,es)}function QH(S,M){for(var R=S.return;R!==null;){switch(R.tag){case 24:case 3:var G=L0(R),te=Ac(G),re=mC(R,te,G);re!==null&&(l_(G,"refresh()",S),Ld(re,R,G),S4(re,R,G)),S=H1(),M!==null&&M!==void 0&&re!==null&&console.error("The seed argument is not enabled outside experimental channels."),te.payload={cache:S};return}R=R.return}}function Ec(S,M,R){var G=arguments;typeof G[3]==="function"&&console.error("State updates from the useState() and useReducer() Hooks don't support the second callback argument. To execute a side effect after rendering, declare it in the component body with useEffect()."),G=L0(S);var te={lane:G,revertLane:0,gesture:null,action:R,hasEagerState:!1,eagerState:null,next:null};A_(S)?kH(M,te):(te=yn(S,M,te,G),te!==null&&(l_(G,"dispatch()",S),Ld(te,S,G),G9(te,M,G)))}function O9(S,M,R){var G=arguments;typeof G[3]==="function"&&console.error("State updates from the useState() and useReducer() Hooks don't support the second callback argument. To execute a side effect after rendering, declare it in the component body with useEffect()."),G=L0(S),N4(S,M,R,G)&&l_(G,"setState()",S)}function N4(S,M,R,G){var te={lane:G,revertLane:0,gesture:null,action:R,hasEagerState:!1,eagerState:null,next:null};if(A_(S))kH(M,te);else{var re=S.alternate;if(S.lanes===0&&(re===null||re.lanes===0)&&(re=M.lastRenderedReducer,re!==null)){var Se=Dn.H;Dn.H=w5;try{var Me=M.lastRenderedState,$e=re(Me,R);if(te.hasEagerState=!0,te.eagerState=$e,kf($e,Me))return dn(S,M,te,0),_d===null&&Wt(),!1}catch(dt){}finally{Dn.H=Se}}if(R=yn(S,M,te,G),R!==null)return Ld(R,S,G),G9(R,M,G),!0}return!1}function z9(S,M,R,G){if(Dn.T===null&&Ow===0&&console.error("An optimistic state update occurred outside a transition or action. To fix, move the update to an action, or wrap with startTransition."),G={lane:2,revertLane:E2(),gesture:null,action:G,hasEagerState:!1,eagerState:null,next:null},A_(S)){if(M)throw Error("Cannot update optimistic state while rendering.");console.error("Cannot call startTransition while rendering.")}else M=yn(S,R,G,2),M!==null&&(l_(2,"setOptimistic()",S),Ld(M,S,2))}function A_(S){var M=S.alternate;return S===es||M!==null&&M===es}function kH(S,M){QO=Sae=!0;var R=S.pending;R===null?M.next=M:(M.next=R.next,R.next=M),S.pending=M}function G9(S,M,R){if((R&4194048)!==0){var G=M.lanes;G&=S.pendingLanes,R|=G,M.lanes=R,mt(S,R)}}function Y9(S){if(S!==null&&typeof S!=="function"){var M=String(S);ftt.has(M)||(ftt.add(M),console.error("Expected the last optional `callback` argument to be a function. Instead received: %s.",S))}}function V9(S,M,R,G){var te=S.memoizedState,re=R(G,te);if(S.mode&xg){gt(!0);try{re=R(G,te)}finally{gt(!1)}}re===void 0&&(M=U(M)||"Component",ptt.has(M)||(ptt.add(M),console.error("%s.getDerivedStateFromProps(): A valid state object (or null) must be returned. You have returned undefined.",M))),te=re===null||re===void 0?te:Qs({},te,re),S.memoizedState=te,S.lanes===0&&(S.updateQueue.baseState=te)}function AN(S,M,R,G,te,re,Se){var Me=S.stateNode;if(typeof Me.shouldComponentUpdate==="function"){if(R=Me.shouldComponentUpdate(G,re,Se),S.mode&xg){gt(!0);try{R=Me.shouldComponentUpdate(G,re,Se)}finally{gt(!1)}}return R===void 0&&console.error("%s.shouldComponentUpdate(): Returned undefined instead of a boolean value. Make sure to return true or false.",U(M)||"Component"),R}return M.prototype&&M.prototype.isPureReactComponent?!h2(R,G)||!h2(te,re):!0}function IP(S,M,R,G){var te=M.state;typeof M.componentWillReceiveProps==="function"&&M.componentWillReceiveProps(R,G),typeof M.UNSAFE_componentWillReceiveProps==="function"&&M.UNSAFE_componentWillReceiveProps(R,G),M.state!==te&&(S=V(S)||"Component",ltt.has(S)||(ltt.add(S),console.error("%s.componentWillReceiveProps(): Assigning directly to this.state is deprecated (except inside a component's constructor). Use setState instead.",S)),mPe.enqueueReplaceState(M,M.state,null))}function Fb(S,M){var R=M;if("ref"in M){R={};for(var G in M)G!=="ref"&&(R[G]=M[G])}if(S=S.defaultProps){R===M&&(R=Qs({},R));for(var te in S)R[te]===void 0&&(R[te]=S[te])}return R}function SC(S){zSe(S),console.warn(`%s
%s
`,kO?"An error occurred in the <"+kO+"> component.":"An error occurred in one of your React components.",`Consider adding an error boundary to your tree to customize error handling behavior.
Visit https://react.dev/link/error-boundaries to learn more about error boundaries.`)}function PC(S){var M=kO?"The above error occurred in the <"+kO+"> component.":"The above error occurred in one of your React components.",R="React will try to recreate this component tree from scratch using the error boundary you provided, "+((pPe||"Anonymous")+".");if(typeof S==="object"&&S!==null&&typeof S.environmentName==="string"){var G=S.environmentName;S=[`%o
%s
%s
`,S,M,R].slice(0),typeof S[0]==="string"?S.splice(0,1,tnt+" "+S[0],nnt,oce+G+oce,ont):S.splice(0,0,tnt,nnt,oce+G+oce,ont),S.unshift(console),G=gRn.apply(console.error,S),G()}else console.error(`%o
%s
%s
`,S,M,R)}function U9(S){zSe(S)}function bP(S,M){try{kO=M.source?V(M.source):null,pPe=null;var R=M.value;if(Dn.actQueue!==null)Dn.thrownErrors.push(R);else{var G=S.onUncaughtError;G(R,{componentStack:M.stack})}}catch(te){setTimeout(function(){throw te})}}function _N(S,M,R){try{kO=R.source?V(R.source):null,pPe=V(M);var G=S.onCaughtError;G(R.value,{componentStack:R.stack,errorBoundary:M.tag===1?M.stateNode:null})}catch(te){setTimeout(function(){throw te})}}function R4(S,M,R){return R=Ac(R),R.tag=aPe,R.payload={element:null},R.callback=function(){ye(M.source,bP,S,M)},R}function Q4(S){return S=Ac(S),S.tag=aPe,S}function SP(S,M,R,G){var te=R.type.getDerivedStateFromError;if(typeof te==="function"){var re=G.value;S.payload=function(){return te(re)},S.callback=function(){Ss(R),ye(G.source,_N,M,R,G)}}var Se=R.stateNode;Se!==null&&typeof Se.componentDidCatch==="function"&&(S.callback=function(){Ss(R),ye(G.source,_N,M,R,G),typeof te!=="function"&&(Ww===null?Ww=new Set([this]):Ww.add(this)),UNn(this,G),typeof te==="function"||(R.lanes&2)===0&&console.error("%s: Error boundaries should implement getDerivedStateFromError(). In that method, return a state update to display an error message or fallback UI.",V(R)||"Unknown")})}function G1(S,M,R,G,te){if(R.flags|=32768,yg&&K1(S,te),G!==null&&typeof G==="object"&&typeof G.then==="function"){if(M=R.alternate,M!==null&&L1(M,R,te,!0),oa&&(fv=!0),R=v_.current,R!==null){switch(R.tag){case 31:case 13:case 19:return Cg===null?Y4():R.alternate===null&&mh===gM&&(mh=Dae),R.flags&=-257,R.flags|=65536,R.lanes=te,G===Cae?R.flags|=16384:(M=R.updateQueue,M===null?R.updateQueue=new Set([G]):M.add(G),LN(S,G,te)),!1;case 22:return R.flags|=65536,G===Cae?R.flags|=16384:(M=R.updateQueue,M===null?(M={transitions:null,markerInstances:null,retryQueue:new Set([G])},R.updateQueue=M):(R=M.retryQueue,R===null?M.retryQueue=new Set([G]):R.add(G)),LN(S,G,te)),!1}throw Error("Unexpected Suspense handler tag ("+R.tag+"). This is a bug in React.")}return LN(S,G,te),Y4(),!1}if(oa)return fv=!0,M=v_.current,M!==null?(M.tag===19&&console.error("SuspenseList should never catch while hydrating. This is a bug in React."),(M.flags&65536)===0&&(M.flags|=256),M.flags|=65536,M.lanes=te,G!==XSe&&f2(Vr(Error("There was an error while hydrating but React was able to recover by instead client rendering from the nearest Suspense boundary.",{cause:G}),R))):(G!==XSe&&f2(Vr(Error("There was an error while hydrating but React was able to recover by instead client rendering the entire root.",{cause:G}),R)),S=S.current.alternate,S.flags|=65536,te&=-te,S.lanes|=te,G=Vr(G,R),te=R4(S.stateNode,G,te),P4(S,te),mh!==Yw&&(mh=_R)),!1;var re=Vr(Error("There was an error during concurrent rendering but React was able to recover by instead synchronously rendering the entire root.",{cause:G}),R);if(iq===null?iq=[re]:iq.push(re),mh!==Yw&&(mh=_R),M===null)return!0;G=Vr(G,R),R=M;do{switch(R.tag){case 3:return R.flags|=65536,S=te&-te,R.lanes|=S,S=R4(R.stateNode,G,S),P4(R,S),!1;case 1:if(M=R.type,re=R.stateNode,(R.flags&128)===0&&(typeof M.getDerivedStateFromError==="function"||re!==null&&typeof re.componentDidCatch==="function"&&(Ww===null||!Ww.has(re))))return R.flags|=65536,te&=-te,R.lanes|=te,te=Q4(te),SP(te,S,R,G),P4(R,te),!1;break;case 22:if(R.memoizedState!==null)return R.flags|=65536,!1}R=R.return}while(R!==null);return!1}function lh(S,M,R,G){M.child=S===null?$et(M,null,R,G):mR(M,S.child,R,G)}function W9(S,M,R,G,te){R=R.render;var re=Vo(R);if(re!==R&&(R=re,S!==null&&(j0=!0)),re=M.ref,"ref"in G){var Se={};for(var Me in G)Me!=="ref"&&(Se[Me]=G[Me])}else Se=G;if(F1(M),G=lN(S,M,R,Se,re,te),Me=C9(),S!==null&&!j0)return I9(S,M,te),If(S,M,te);return oa&&Me&&up(M),M.flags|=1,lh(S,M,G,te),M.child}function k4(S,M,R,G,te){if(S===null){var re=R.type;if(typeof re==="function"&&!Ps(re)&&re.defaultProps===void 0&&R.compare===null)return R=Vo(re),M.tag=15,M.type=R,gN(M,re),xf(S,M,R,G,te);return S=zt(R.type,null,G,M,M.mode,te),S.ref=M.ref,S.return=M,M.child=S}if(re=S.child,!rr(S,te)){var Se=re.memoizedProps;if(R=R.compare,R=R!==null?R:h2,R(Se,G)&&S.ref===M.ref)return If(S,M,te)}return M.flags|=1,S=Qa(re,G),S.ref=M.ref,S.return=M,M.child=S}function xf(S,M,R,G,te){if(S!==null){var re=S.memoizedProps;if(h2(re,G)&&S.ref===M.ref&&M.type===S.type)if(j0=!1,M.pendingProps=G=re,rr(S,te))(S.flags&131072)!==0&&(j0=!0);else return M.lanes=S.lanes,If(S,M,te)}return cA(S,M,R,G,te)}function P2(S,M,R,G){var te=G.children,re=S!==null?S.memoizedState:null;if(S===null&&M.stateNode===null&&(M.stateNode={_visibility:wj,_pendingMarkers:null,_retryCache:null,_transitions:null}),G.mode==="hidden"){if((M.flags&128)!==0){if(re=re!==null?re.baseLanes|R:R,S!==null){G=M.child=S.child;for(te=0;G!==null;)te=te|G.lanes|G.childLanes,G=G.sibling;G=te&~re}else G=0,M.child=null;return PP(S,M,re,R,G)}if((R&536870912)!==0)M.memoizedState={baseLanes:0,cachePool:null},S!==null&&hP(M,re!==null?re.cachePool:null),re!==null?A9(M,re):E4(M),g9(M);else return G=M.lanes=536870912,PP(S,M,re!==null?re.baseLanes|R:R,R,G)}else re!==null?(hP(M,re.cachePool),A9(M,re),AC(M),M.memoizedState=null):(S!==null&&hP(M,null),E4(M),AC(M));return lh(S,M,te,R),M.child}function Qd(S,M){return S!==null&&S.tag===22||M.stateNode!==null||(M.stateNode={_visibility:wj,_pendingMarkers:null,_retryCache:null,_transitions:null}),M.sibling}function PP(S,M,R,G,te){var re=y4();return re=re===null?null:{parent:wm._currentValue,pool:re},M.memoizedState={baseLanes:R,cachePool:re},S!==null&&hP(M,null),E4(M),g9(M),S!==null&&L1(S,M,G,!0),M.childLanes=te,null}function L4(S,M){var R=M.hidden;return R!==void 0&&console.error(`<Activity> doesn't accept a hidden prop. Use mode="hidden" instead.
- <Activity %s>
+ <Activity %s>`,R===!0?"hidden":R===!1?"hidden={false}":"hidden={...}",R?'mode="hidden"':'mode="visible"'),M=Y1({mode:M.mode,children:M.children},S.mode),M.ref=S.ref,S.child=M,M.return=S,M}function br(S,M,R){return mR(M,S.child,null,R),S=L4(M,M.pendingProps),S.flags|=2,R0(M),M.memoizedState=null,S}function LH(S,M,R){var G=M.pendingProps,te=(M.flags&128)!==0;if(M.flags&=-129,S===null){if(oa){if(G.mode==="hidden")return S=L4(M,G),M.lanes=536870912,S.memoizedState={baseLanes:0,cachePool:null},Qd(null,S);if(cN(M),(S=Hd)?(R=Q2(S,tI),R=R!==null&&R.data===bR?R:null,R!==null&&(G={dehydrated:R,treeContext:Vc(),retryLane:536870912,hydrationErrors:null},M.memoizedState=G,G=$i(R),G.return=M,M.child=G,fA=M,Hd=null)):R=null,R===null)throw A4(M,S),oA(M);return M.lanes=536870912,null}return L4(M,G)}var re=S.memoizedState;if(re!==null){var Se=re.dehydrated;if(cN(M),te)if(M.flags&256)M.flags&=-257,M=br(S,M,R);else if(M.memoizedState!==null)M.child=S.child,M.flags|=128,M=null;else throw Error("Client rendering an Activity suspended it again. This is a bug in React.");else if(eN(),(R&536870912)!==0&&sw(M),j0||L1(S,M,R,!1),te=(R&S.childLanes)!==0,j0||te){if(Gw.current===null){if(G=_d,G!==null&&(Se=ft(G,R),Se!==0&&Se!==re.retryLane))throw re.retryLane=Se,Sn(S,Se),Ld(G,S,Se),APe;Y4()}M=br(S,M,R)}else S=re.treeContext,Hd=G0(Se.nextSibling),fA=M,oa=!0,Qw=null,fv=!1,U2=null,tI=!1,S!==null&&p4(M,S),M=L4(M,G),M.flags|=134221824;return M}return re=S.child,G={mode:G.mode,children:G.children},(R&536870912)!==0&&(R&S.lanes)!==0&&sw(M),S=Qa(re,G),S.ref=M.ref,M.child=S,S.return=M,S}function Hb(S,M){var R=M.ref;if(R===null)S!==null&&S.ref!==null&&(M.flags|=4194816);else{if(typeof R!=="function"&&typeof R!=="object")throw Error("Expected ref to be a function, an object returned by React.createRef(), or undefined/null.");if(S===null||S.ref!==R)M.flags|=4194816}}function cA(S,M,R,G,te){if(R.prototype&&typeof R.prototype.render==="function"){var re=U(R)||"Unknown";ytt[re]||(console.error("The <%s /> component appears to have a render method, but doesn't extend React.Component. This is likely to cause errors. Change %s to extend React.Component instead.",re,re),ytt[re]=!0)}if(M.mode&xg&&B5.recordLegacyContextWarning(M,null),S===null&&(gN(M,M.type),R.contextTypes&&(re=U(R)||"Unknown",Ctt[re]||(Ctt[re]=!0,console.error("%s uses the legacy contextTypes API which was removed in React 19. Use React.createContext() with React.useContext() instead. (https://react.dev/link/legacy-context)",re)))),F1(M),R=lN(S,M,R,G,void 0,te),G=C9(),S!==null&&!j0)return I9(S,M,te),If(S,M,te);return oa&&G&&up(M),M.flags|=1,lh(S,M,R,te),M.child}function X9(S,M,R,G,te,re){if(F1(M),_M=-1,qj=S!==null&&S.type!==M.type,M.updateQueue=null,R=x9(M,G,R,te),dN(S,M),G=C9(),S!==null&&!j0)return I9(S,M,re),If(S,M,re);return oa&&G&&up(M),M.flags|=1,lh(S,M,R,re),M.child}function pp(S,M,R,G,te){switch(s(M)){case!1:var re=M.stateNode,Se=new M.type(M.memoizedProps,re.context).state;re.updater.enqueueSetState(re,Se,null);break;case!0:M.flags|=128,M.flags|=65536,re=Error("Simulated error coming from DevTools");var Me=te&-te;if(M.lanes|=Me,Se=_d,Se===null)throw Error("Expected a work-in-progress root. This is a bug in React. Please file an issue.");Me=Q4(Me),SP(Me,Se,M,Vr(re,M)),P4(M,Me)}if(F1(M),M.stateNode===null){if(Se=Rw,re=R.contextType,"contextType"in R&&re!==null&&(re===void 0||re.$$typeof!==Kc)&&!gtt.has(R)&&(gtt.add(R),Me=re===void 0?" However, it is set to undefined. This can be caused by a typo or by mixing up named and default imports. This can also happen due to a circular dependency, so try moving the createContext() call to a separate file.":typeof re!=="object"?" However, it is set to a "+typeof re+".":re.$$typeof===z2?" Did you accidentally pass the Context.Consumer instead?":" However, it is set to an object with keys {"+Object.keys(re).join(", ")+"}.",console.error("%s defines an invalid contextType. contextType should point to the Context object returned by React.createContext().%s",U(R)||"Component",Me)),typeof re==="object"&&re!==null&&(Se=vc(re)),re=new R(G,Se),M.mode&xg){gt(!0);try{re=new R(G,Se)}finally{gt(!1)}}if(Se=M.memoizedState=re.state!==null&&re.state!==void 0?re.state:null,re.updater=mPe,M.stateNode=re,re._reactInternals=M,re._reactInternalInstance=ctt,typeof R.getDerivedStateFromProps==="function"&&Se===null&&(Se=U(R)||"Component",dtt.has(Se)||(dtt.add(Se),console.error("`%s` uses `getDerivedStateFromProps` but its initial state is %s. This is not recommended. Instead, define the initial state by assigning an object to `this.state` in the constructor of `%s`. This ensures that `getDerivedStateFromProps` arguments have a consistent shape.",Se,re.state===null?"null":"undefined",Se))),typeof R.getDerivedStateFromProps==="function"||typeof re.getSnapshotBeforeUpdate==="function"){var $e=Me=Se=null;if(typeof re.componentWillMount==="function"&&re.componentWillMount.__suppressDeprecationWarning!==!0?Se="componentWillMount":typeof re.UNSAFE_componentWillMount==="function"&&(Se="UNSAFE_componentWillMount"),typeof re.componentWillReceiveProps==="function"&&re.componentWillReceiveProps.__suppressDeprecationWarning!==!0?Me="componentWillReceiveProps":typeof re.UNSAFE_componentWillReceiveProps==="function"&&(Me="UNSAFE_componentWillReceiveProps"),typeof re.componentWillUpdate==="function"&&re.componentWillUpdate.__suppressDeprecationWarning!==!0?$e="componentWillUpdate":typeof re.UNSAFE_componentWillUpdate==="function"&&($e="UNSAFE_componentWillUpdate"),Se!==null||Me!==null||$e!==null){re=U(R)||"Component";var dt=typeof R.getDerivedStateFromProps==="function"?"getDerivedStateFromProps()":"getSnapshotBeforeUpdate()";htt.has(re)||(htt.add(re),console.error(`Unsafe legacy lifecycles will not be called for components using new component APIs.
%s uses %s but also contains the following legacy lifecycles:%s%s%s
The above lifecycles should be removed. Learn more about this warning here:
https://react.dev/link/unsafe-component-lifecycles`,re,dt,Se!==null?`
`+Se:"",Me!==null?`
`+Me:"",$e!==null?`
`+$e:""))}}re=M.stateNode,Se=U(R)||"Component",re.render||(R.prototype&&typeof R.prototype.render==="function"?console.error("No `render` method found on the %s instance: did you accidentally return an object from the constructor?",Se):console.error("No `render` method found on the %s instance: you may have forgotten to define `render`.",Se)),!re.getInitialState||re.getInitialState.isReactClassApproved||re.state||console.error("getInitialState was defined on %s, a plain JavaScript class. This is only supported for classes created using React.createClass. Did you mean to define a state property instead?",Se),re.getDefaultProps&&!re.getDefaultProps.isReactClassApproved&&console.error("getDefaultProps was defined on %s, a plain JavaScript class. This is only supported for classes created using React.createClass. Use a static property to define defaultProps instead.",Se),re.contextType&&console.error("contextType was defined as an instance property on %s. Use a static property to define contextType instead.",Se),R.childContextTypes&&!_tt.has(R)&&(_tt.add(R),console.error("%s uses the legacy childContextTypes API which was removed in React 19. Use React.createContext() instead. (https://react.dev/link/legacy-context)",Se)),R.contextTypes&&!Att.has(R)&&(Att.add(R),console.error("%s uses the legacy contextTypes API which was removed in React 19. Use React.createContext() with static contextType instead. (https://react.dev/link/legacy-context)",Se)),typeof re.componentShouldUpdate==="function"&&console.error("%s has a method called componentShouldUpdate(). Did you mean shouldComponentUpdate()? The name is phrased as a question because the function is expected to return a value.",Se),R.prototype&&R.prototype.isPureReactComponent&&typeof re.shouldComponentUpdate<"u"&&console.error("%s has a method called shouldComponentUpdate(). shouldComponentUpdate should not be used when extending React.PureComponent. Please extend React.Component if shouldComponentUpdate is used.",U(R)||"A pure component"),typeof re.componentDidUnmount==="function"&&console.error("%s has a method called componentDidUnmount(). But there is no such lifecycle method. Did you mean componentWillUnmount()?",Se),typeof re.componentDidReceiveProps==="function"&&console.error("%s has a method called componentDidReceiveProps(). But there is no such lifecycle method. If you meant to update the state in response to changing props, use componentWillReceiveProps(). If you meant to fetch data or run side-effects or mutations after React has updated the UI, use componentDidUpdate().",Se),typeof re.componentWillRecieveProps==="function"&&console.error("%s has a method called componentWillRecieveProps(). Did you mean componentWillReceiveProps()?",Se),typeof re.UNSAFE_componentWillRecieveProps==="function"&&console.error("%s has a method called UNSAFE_componentWillRecieveProps(). Did you mean UNSAFE_componentWillReceiveProps()?",Se),Me=re.props!==G,re.props!==void 0&&Me&&console.error("When calling super() in `%s`, make sure to pass up the same props that your component's constructor was passed.",Se),re.defaultProps&&console.error("Setting defaultProps as an instance property on %s is not supported and will be ignored. Instead, define defaultProps as a static property on %s.",Se,Se),typeof re.getSnapshotBeforeUpdate!=="function"||typeof re.componentDidUpdate==="function"||utt.has(R)||(utt.add(R),console.error("%s: getSnapshotBeforeUpdate() should be used with componentDidUpdate(). This component defines getSnapshotBeforeUpdate() only.",U(R))),typeof re.getDerivedStateFromProps==="function"&&console.error("%s: getDerivedStateFromProps() is defined as an instance method and will be ignored. Instead, declare it as a static method.",Se),typeof re.getDerivedStateFromError==="function"&&console.error("%s: getDerivedStateFromError() is defined as an instance method and will be ignored. Instead, declare it as a static method.",Se),typeof R.getSnapshotBeforeUpdate==="function"&&console.error("%s: getSnapshotBeforeUpdate() is defined as a static method and will be ignored. Instead, declare it as an instance method.",Se),(Me=re.state)&&(typeof Me!=="object"||uh(Me))&&console.error("%s.state: must be set to an object or null",Se),typeof re.getChildContext==="function"&&typeof R.childContextTypes!=="object"&&console.error("%s.getChildContext(): childContextTypes must be defined in order to use getChildContext().",Se),re=M.stateNode,re.props=G,re.state=M.memoizedState,re.refs={},AP(M),Se=R.contextType,re.context=typeof Se==="object"&&Se!==null?vc(Se):Rw,re.state===G&&(Se=U(R)||"Component",mtt.has(Se)||(mtt.add(Se),console.error("%s: It is not recommended to assign props directly to state because updates to props won't be reflected in state. In most cases, it is better to use props directly.",Se))),M.mode&xg&&B5.recordLegacyContextWarning(M,re),B5.recordUnsafeLifecycleWarnings(M,re),re.state=M.memoizedState,Se=R.getDerivedStateFromProps,typeof Se==="function"&&(V9(M,R,Se,G),re.state=M.memoizedState),typeof R.getDerivedStateFromProps==="function"||typeof re.getSnapshotBeforeUpdate==="function"||typeof re.UNSAFE_componentWillMount!=="function"&&typeof re.componentWillMount!=="function"||(Se=re.state,typeof re.componentWillMount==="function"&&re.componentWillMount(),typeof re.UNSAFE_componentWillMount==="function"&&re.UNSAFE_componentWillMount(),Se!==re.state&&(console.error("%s.componentWillMount(): Assigning directly to this.state is deprecated (except inside a component's constructor). Use setState instead.",V(M)||"Component"),mPe.enqueueReplaceState(re,re.state,null)),_P(M,G,re,te),rA(),re.state=M.memoizedState),typeof re.componentDidMount==="function"&&(M.flags|=4194308),(M.mode&v5)!==jr&&(M.flags|=268435456),re=!0}else if(S===null){re=M.stateNode;var Bt=M.memoizedProps;Me=Fb(R,Bt),re.props=Me;var qt=re.context;$e=R.contextType,Se=Rw,typeof $e==="object"&&$e!==null&&(Se=vc($e)),dt=R.getDerivedStateFromProps,$e=typeof dt==="function"||typeof re.getSnapshotBeforeUpdate==="function",Bt=M.pendingProps!==Bt,$e||typeof re.UNSAFE_componentWillReceiveProps!=="function"&&typeof re.componentWillReceiveProps!=="function"||(Bt||qt!==Se)&&IP(M,re,G,Se),zw=!1;var Kt=M.memoizedState;re.state=Kt,_P(M,G,re,te),rA(),qt=M.memoizedState,Bt||Kt!==qt||zw?(typeof dt==="function"&&(V9(M,R,dt,G),qt=M.memoizedState),(Me=zw||AN(M,R,Me,G,Kt,qt,Se))?($e||typeof re.UNSAFE_componentWillMount!=="function"&&typeof re.componentWillMount!=="function"||(typeof re.componentWillMount==="function"&&re.componentWillMount(),typeof re.UNSAFE_componentWillMount==="function"&&re.UNSAFE_componentWillMount()),typeof re.componentDidMount==="function"&&(M.flags|=4194308),(M.mode&v5)!==jr&&(M.flags|=268435456)):(typeof re.componentDidMount==="function"&&(M.flags|=4194308),(M.mode&v5)!==jr&&(M.flags|=268435456),M.memoizedProps=G,M.memoizedState=qt),re.props=G,re.state=qt,re.context=Se,re=Me):(typeof re.componentDidMount==="function"&&(M.flags|=4194308),(M.mode&v5)!==jr&&(M.flags|=268435456),re=!1)}else{re=M.stateNode,vb(S,M),Se=M.memoizedProps,$e=Fb(R,Se),re.props=$e,dt=M.pendingProps,Kt=re.context,qt=R.contextType,Me=Rw,typeof qt==="object"&&qt!==null&&(Me=vc(qt)),Bt=R.getDerivedStateFromProps,(qt=typeof Bt==="function"||typeof re.getSnapshotBeforeUpdate==="function")||typeof re.UNSAFE_componentWillReceiveProps!=="function"&&typeof re.componentWillReceiveProps!=="function"||(Se!==dt||Kt!==Me)&&IP(M,re,G,Me),zw=!1,Kt=M.memoizedState,re.state=Kt,_P(M,G,re,te),rA();var un=M.memoizedState;Se!==dt||Kt!==un||zw||S!==null&&S.dependencies!==null&&x2(S.dependencies)?(typeof Bt==="function"&&(V9(M,R,Bt,G),un=M.memoizedState),($e=zw||AN(M,R,$e,G,Kt,un,Me)||S!==null&&S.dependencies!==null&&x2(S.dependencies))?(qt||typeof re.UNSAFE_componentWillUpdate!=="function"&&typeof re.componentWillUpdate!=="function"||(typeof re.componentWillUpdate==="function"&&re.componentWillUpdate(G,un,Me),typeof re.UNSAFE_componentWillUpdate==="function"&&re.UNSAFE_componentWillUpdate(G,un,Me)),typeof re.componentDidUpdate==="function"&&(M.flags|=4),typeof re.getSnapshotBeforeUpdate==="function"&&(M.flags|=1024)):(typeof re.componentDidUpdate!=="function"||Se===S.memoizedProps&&Kt===S.memoizedState||(M.flags|=4),typeof re.getSnapshotBeforeUpdate!=="function"||Se===S.memoizedProps&&Kt===S.memoizedState||(M.flags|=1024),M.memoizedProps=G,M.memoizedState=un),re.props=G,re.state=un,re.context=Me,re=$e):(typeof re.componentDidUpdate!=="function"||Se===S.memoizedProps&&Kt===S.memoizedState||(M.flags|=4),typeof re.getSnapshotBeforeUpdate!=="function"||Se===S.memoizedProps&&Kt===S.memoizedState||(M.flags|=1024),re=!1)}if(Me=re,Hb(S,M),Se=(M.flags&128)!==0,Me||Se){if(Me=M.stateNode,Ce(M),Se&&typeof R.getDerivedStateFromError!=="function")R=null,Lf=-1;else if(R=Fet(Me),M.mode&xg){gt(!0);try{Fet(Me)}finally{gt(!1)}}M.flags|=1,S!==null&&Se?(M.child=mR(M,S.child,null,te),M.child=mR(M,null,R,te)):lh(S,M,R,te),M.memoizedState=Me.state,S=M.child}else S=If(S,M,te);return te=M.stateNode,re&&te.props!==G&&(LO||console.error("It looks like %s is reassigning its own `this.props` while rendering. This is not supported and can lead to confusing bugs.",V(M)||"a component"),LO=!0),S}function FH(S,M,R,G){return uC(),M.flags|=256,lh(S,M,R,G),M.child}function gN(S,M){M&&M.childContextTypes&&console.error(`childContextTypes cannot be defined on a function component.
%s.childContextTypes = ...`,M.displayName||M.name||"Component"),typeof M.getDerivedStateFromProps==="function"&&(S=U(M)||"Unknown",Itt[S]||(console.error("%s: Function components do not support getDerivedStateFromProps.",S),Itt[S]=!0)),typeof M.contextType==="object"&&M.contextType!==null&&(M=U(M)||"Unknown",xtt[M]||(console.error("%s: Function components do not support contextType.",M),xtt[M]=!0))}function Ws(S){return{baseLanes:S,cachePool:Pb()}}function Nh(S,M,R){return S=S!==null?S.childLanes&~R:0,M&&(S|=iy),S}function Ob(S,M,R){var G=M.pendingProps;r(M)&&(M.flags|=128);var te=!1,re=(M.flags&128)!==0,Se;if((Se=re)||(Se=S!==null&&S.memoizedState===null?!1:(E_.current&Xj)!==0),Se&&(te=!0,M.flags&=-129),Se=(M.flags&32)!==0,M.flags&=-33,S===null){if(oa){if(te?pC(M):AC(M),(S=Hd)?(R=Q2(S,tI),R=R!==null&&R.data!==bR?R:null,R!==null&&(Se={dehydrated:R,treeContext:Vc(),retryLane:536870912,hydrationErrors:null},M.memoizedState=Se,Se=$i(R),Se.return=M,M.child=Se,fA=M,Hd=null)):R=null,R===null)throw A4(M,S),oA(M);return gc(R)?M.lanes=32:M.lanes=536870912,null}if(re=G.children,G=G.fallback,te)return AC(M),te=M.mode,re=Y1({mode:"hidden",children:re},te),G=Un(G,te,R,null),re.return=M,G.return=M,re.sibling=G,M.child=re,G=M.child,G.memoizedState=Ws(R),G.childLanes=Nh(S,Se,R),M.memoizedState=gPe,Qd(null,G);return pC(M),Rh(M,re)}var Me=S.memoizedState;if(Me!==null){var $e=Me.dehydrated;if($e!==null)return Ap(S,M,re,Se,G,$e,Me,R)}if(te)return AC(M),te=G.fallback,re=M.mode,Me=S.child,$e=Me.sibling,G=Qa(Me,{mode:"hidden",children:G.children}),G.subtreeFlags=Me.subtreeFlags&1206910976,$e!==null?te=Qa($e,te):(te=Un(te,re,R,null),te.flags|=2),te.return=M,G.return=M,G.sibling=te,M.child=G,Qd(null,G),G=M.child,te=S.child.memoizedState,te===null?te=Ws(R):(re=te.cachePool,re!==null?(Me=wm._currentValue,re=re.parent!==Me?{parent:Me,pool:Me}:re):re=Pb(),te={baseLanes:te.baseLanes|R,cachePool:re}),G.memoizedState=te,G.childLanes=Nh(S,Se,R),M.memoizedState=gPe,Qd(S.child,G);return Me!==null&&(R&62914560)===R&&(R&S.lanes)!==0&&sw(M),pC(M),R=S.child,S=R.sibling,R=Qa(R,{mode:"visible",children:G.children}),R.return=M,R.sibling=null,S!==null&&(Se=M.deletions,Se===null?(M.deletions=[S],M.flags|=16):Se.push(S)),M.child=R,M.memoizedState=null,R}function Rh(S,M){return M=Y1({mode:"visible",children:M},S.mode),M.return=S,S.child=M}function Y1(S,M){return S=h(22,S,null,M),S.lanes=0,S}function Di(S,M,R){return mR(M,S.child,null,R),S=Rh(M,M.pendingProps.children),S.flags|=2,M.memoizedState=null,S}function Ap(S,M,R,G,te,re,Se,Me){if(R){if(M.flags&256)return pC(M),M.flags&=-257,Di(S,M,Me);if(M.memoizedState!==null)return AC(M),M.child=S.child,M.flags|=128,null;AC(M);var $e=te.fallback,dt=M.mode,Bt=Y1({mode:"visible",children:te.children},dt);return $e=Un($e,dt,Me,null),$e.flags|=2,Bt.return=M,$e.return=M,Bt.sibling=$e,M.child=Bt,mR(M,S.child,null,Me),$e=M.child,$e.memoizedState=Ws(Me),$e.childLanes=Nh(S,G,Me),M.memoizedState=gPe,Qd(null,$e)}if(pC(M),eN(),(Me&536870912)!==0&&sw(M),gc(re)){if(G=re.nextSibling&&re.nextSibling.dataset,G){$e=G.dgst;var qt=G.msg;dt=G.stck,Bt=G.cstck}return re=qt,Se=$e,te=dt,G=Bt,$e=Se,dt=re,Bt=te,te=G,$e!==VNn&&(G=dt?Error(dt):Error("The server could not finish this Suspense boundary, likely due to an error during server rendering. Switched to client rendering."),G.stack=Bt||"",G.digest=$e,$e=te===void 0?null:te,dt={value:G,source:null,stack:$e},typeof $e==="string"&&WSe.set(G,dt),f2(dt)),Di(S,M,Me)}if(j0||L1(S,M,Me,!1),G=(Me&S.childLanes)!==0,j0||G){if(Gw.current!==null)return Di(S,M,Me);if(G=_d,G!==null&&($e=ft(G,Me),$e!==0&&$e!==Se.retryLane))throw Se.retryLane=$e,Sn(S,$e),Ld(G,S,$e),APe;return Dr(re)||Y4(),Di(S,M,Me)}if(Dr(re))return M.flags|=192,M.child=S.child,null;return S=Se.treeContext,Hd=G0(re.nextSibling),fA=M,oa=!0,Qw=null,fv=!1,U2=null,tI=!1,S!==null&&p4(M,S),M=Rh(M,te.children),M.flags|=134221824,M}function K9(S,M,R){S.lanes|=M;var G=S.alternate;G!==null&&(G.lanes|=M),Ru(S.return,M,R)}function HH(S){for(var M=null;S!==null;){var R=S.alternate;R!==null&&y9(R)===null&&(M=S),S=S.sibling}return M}function vP(S,M,R,G,te,re){var Se=S.memoizedState;Se===null?S.memoizedState={isBackwards:M,rendering:null,renderingStartTime:0,last:G,tail:R,tailMode:te,treeForkCount:re}:(Se.isBackwards=M,Se.rendering=null,Se.renderingStartTime=0,Se.last=G,Se.tail=R,Se.tailMode=te,Se.treeForkCount=re)}function Cf(S){var M=S.child;for(S.child=null;M!==null;){var R=M.sibling;M.sibling=S.child,S.child=M,M=R}}function zb(S,M,R){var G=M.pendingProps,te=G.revealOrder,re=G.tail,Se=G.children,Me=E_.current;if(M.flags&128)return sA(M,Me),null;if((G=(Me&Xj)!==0)?(Me=Me&NO|Xj,M.flags|=128):Me&=NO,sA(M,Me),Me=te==null?"null":te,te!=null&&te!=="forwards"&&te!=="backwards"&&te!=="unstable_legacy-backwards"&&te!=="together"&&te!=="independent"&&!btt[Me])if(btt[Me]=!0,typeof te==="string")switch(te.toLowerCase()){case"together":case"forwards":case"backwards":case"independent":console.error('"%s" is not a valid value for revealOrder on <SuspenseList />. Use lowercase "%s" instead.',te,te.toLowerCase());break;case"forward":case"backward":console.error('"%s" is not a valid value for revealOrder on <SuspenseList />. React uses the -s suffix in the spelling. Use "%ss" instead.',te,te.toLowerCase());break;default:console.error('"%s" is not a supported revealOrder on <SuspenseList />. Did you mean "independent", "together", "forwards" or "backwards"?',te)}else console.error('%s is not a supported value for revealOrder on <SuspenseList />. Did you mean "independent", "together", "forwards" or "backwards"?',te);Me=re==null?"null":re,_Pe[Me]||re==null||(re!=="visible"&&re!=="collapsed"&&re!=="hidden"?(_Pe[Me]=!0,console.error('"%s" is not a supported value for tail on <SuspenseList />. Did you mean "visible", "collapsed" or "hidden"?',re)):te!=null&&te!=="forwards"&&te!=="backwards"&&te!=="unstable_legacy-backwards"&&(_Pe[Me]=!0,console.error('<SuspenseList tail="%s" /> is only valid if revealOrder is "forwards" (default) or "backwards". Did you mean to specify revealOrder="forwards"?',re)));e:if((te==null||te==="forwards"||te==="backwards"||te==="unstable_legacy-backwards")&&Se!==void 0&&Se!==null&&Se!==!1)if(uh(Se)){for(Me=0;Me<Se.length;Me++)if(!aN(Se[Me],Me))break e}else if(Me=Y(Se),typeof Me==="function"){if(Me=Me.call(Se))for(var $e=Me.next(),dt=0;!$e.done;$e=Me.next()){if(!aN($e.value,dt))break e;dt++}}else console.error('A single row was passed to a <SuspenseList revealOrder="%s" />. This is not useful since it needs multiple rows. Did you mean to pass multiple children or an array?',te);if(te==="backwards"&&S!==null?(Cf(S),lh(S,M,Se,R),Cf(S)):lh(S,M,Se,R),oa?(_2(),Se=Tj):Se=0,!G&&S!==null&&(S.flags&128)!==0)e:for(S=M.child;S!==null;){if(S.tag===13)S.memoizedState!==null&&K9(S,R,M);else if(S.tag===19)K9(S,R,M);else if(S.child!==null){S.child.return=S,S=S.child;continue}if(S===M)break e;for(;S.sibling===null;){if(S.return===null||S.return===M)break e;S=S.return}S.sibling.return=S.return,S=S.sibling}switch(te){case"backwards":R=HH(M.child),R===null?(te=M.child,M.child=null):(te=R.sibling,R.sibling=null,Cf(M)),vP(M,!0,te,null,re,Se);break;case"unstable_legacy-backwards":R=null,te=M.child;for(M.child=null;te!==null;){if(S=te.alternate,S!==null&&y9(S)===null){M.child=te;break}S=te.sibling,te.sibling=R,R=te,te=S}vP(M,!0,R,null,re,Se);break;case"together":vP(M,!1,null,null,void 0,Se);break;case"independent":M.memoizedState=null;break;default:R=HH(M.child),R===null?(te=M.child,M.child=null):(te=R.sibling,R.sibling=null),vP(M,!1,te,R,re,Se)}return M.child}function j9(S,M,R){var{type:G,pendingProps:te}=M,re=te.value;return"value"in te||Ptt||(Ptt=!0,console.error("The `value` prop is required for the `<Context.Provider>`. Did you misspell it or forget to pass it?")),y2(M,G,re),lh(S,M,te.children,R),M.child}function If(S,M,R){if(S!==null&&(M.dependencies=S.dependencies),Lf=-1,Vw|=M.lanes,(R&M.childLanes)===0)if(S!==null){if(L1(S,M,R,!1),(R&M.childLanes)===0)return null}else return null;if(S!==null&&M.child!==S.child)throw Error("Resuming work not yet implemented.");if(M.child!==null){S=M.child,R=Qa(S,S.pendingProps),M.child=R;for(R.return=M;S.sibling!==null;)S=S.sibling,R=R.sibling=Qa(S,S.pendingProps),R.return=M;R.sibling=null}return M.child}function rr(S,M){if((S.lanes&M)!==0)return!0;return S=S.dependencies,S!==null&&x2(S)?!0:!1}function __(S,M,R){switch(M.tag){case 3:ce(M,M.stateNode.containerInfo),y2(M,wm,S.memoizedState.cache),uC();break;case 27:case 5:J(M);break;case 4:ce(M,M.stateNode.containerInfo);break;case 10:y2(M,M.type,M.memoizedProps.value);break;case 12:(R&M.childLanes)!==0&&(M.flags|=4),M.flags|=2048;var G=M.stateNode;G.effectDuration=-0,G.passiveEffectDuration=-0;break;case 31:if(M.memoizedState!==null)return M.flags|=128,cN(M),null;break;case 13:if(G=M.memoizedState,G!==null){if(G.dehydrated!==null)return pC(M),M.flags|=128,null;G=L1(S,M,R,!1);var te=M.child.childLanes;if(G||(R&te)!==0)return Ob(S,M,R);return pC(M),S=If(S,M,R),S!==null?S.sibling:null}pC(M);break;case 19:if(M.flags&128)return zb(S,M,R);if(te=(S.flags&128)!==0,G=(R&M.childLanes)!==0,G||(L1(S,M,R,!1),G=(R&M.childLanes)!==0),te){if(G)return zb(S,M,R);M.flags|=128}if(te=M.memoizedState,te!==null&&(te.rendering=null,te.tail=null,te.lastEffect=null),sA(M,E_.current),G)break;else return null;case 22:return M.lanes=0,P2(S,M,R,M.pendingProps);case 24:y2(M,wm,S.memoizedState.cache)}return If(S,M,R)}function t0(S,M,R){if(M._debugNeedsRemount&&S!==null){R=zt(Vo(M.elementType),M.key,M.pendingProps,M._debugOwner||null,M.mode,M.lanes),R._debugStack=M._debugStack,R._debugTask=M._debugTask;var G=M.return;if(G===null)throw Error("Cannot swap the root fiber.");if(S.alternate=null,M.alternate=null,R.index=M.index,R.sibling=M.sibling,R.return=M.return,R.ref=M.ref,R._debugInfo=M._debugInfo,M===G.child)G.child=R;else{var te=G.child;if(te===null)throw Error("Expected parent to have a child.");for(;te.sibling!==M;)if(te=te.sibling,te===null)throw Error("Expected to find the previous sibling.");te.sibling=R}return M=G.deletions,M===null?(G.deletions=[S],G.flags|=16):M.push(S),R.flags|=134217730,R}if(S!==null)if(S.memoizedProps!==M.pendingProps||M.type!==S.type)j0=!0;else{if(!rr(S,R)&&(M.flags&128)===0)return j0=!1,__(S,M,R);j0=(S.flags&131072)!==0?!0:!1}else{if(j0=!1,G=oa)_2(),G=(M.flags&1048576)!==0;G&&(G=M.index,_2(),Nl(M,Tj,G))}switch(M.lanes=0,M.tag){case 16:e:if(G=M.pendingProps,S=O1(M.elementType),S=Vo(S),M.type=S,typeof S==="function")Ps(S)?(G=Fb(S,G),M.tag=1,M=pp(null,M,S,G,R)):(M.tag=0,gN(M,S),M=cA(null,M,S,G,R));else{if(S!==void 0&&S!==null){if(te=S.$$typeof,te===Sw){M.tag=11,M=W9(null,M,S,G,R);break e}else if(te===y5){M.tag=14,M=k4(null,M,S,G,R);break e}else if(te===Kc){M.tag=10,M.type=S,M=j9(null,M,R);break e}}throw M="",S!==null&&typeof S==="object"&&S.$$typeof===W0&&(M=" Did you wrap a component in React.lazy() more than once?"),R=U(S)||S,Error("Element type is invalid. Received a promise that resolves to: "+R+". Lazy element type must resolve to a class or function."+M)}return M;case 0:return cA(S,M,M.type,M.pendingProps,R);case 1:return G=M.type,te=Fb(G,M.pendingProps),pp(S,M,G,te,R);case 3:e:{if(ce(M,M.stateNode.containerInfo),S===null)throw Error("Should have a current fiber. This is a bug in React.");G=M.pendingProps;var re=M.memoizedState;te=re.element,vb(S,M),_P(M,G,null,R);var Se=M.memoizedState;if(G=Se.cache,y2(M,wm,G),G!==re.cache&&dP(M,[wm],R,!0),rA(),G=Se.element,re.isDehydrated)if(re={element:G,isDehydrated:!1,cache:Se.cache},M.updateQueue.baseState=re,M.memoizedState=re,M.flags&256){M=FH(S,M,G,R);break e}else if(G!==te){te=Vr(Error("This root received an early update, before anything was able hydrate. Switched the entire root to client rendering."),M),f2(te),M=FH(S,M,G,R);break e}else{switch(S=M.stateNode.containerInfo,S.nodeType){case 9:S=S.body;break;default:S=S.nodeName==="HTML"?S.ownerDocument.body:S}Hd=G0(S.firstChild),fA=M,oa=!0,Qw=null,fv=!1,U2=null,tI=!0,R=$et(M,null,G,R);for(M.child=R;R;)R.flags=R.flags&-3|134221824,R=R.sibling}else{if(uC(),G===te){M=If(S,M,R);break e}lh(S,M,G,R)}M=M.child}return M;case 26:return Hb(S,M),S===null?(R=iv(M.type,null,M.pendingProps,null))?M.memoizedState=R:oa||(M.stateNode=vm(M.type,M.pendingProps,ne(pA.current),M)):M.memoizedState=iv(M.type,S.memoizedProps,M.pendingProps,S.memoizedState),null;case 27:return J(M),S===null&&oa&&(G=ne(pA.current),te=ie(),G=M.stateNode=hA(M.type,M.pendingProps,G,te,!1),fv||(te=M2(G,M.type,M.pendingProps,te),te!==null&&(g2(M,0).serverProps=te)),fA=M,tI=!0,te=Hd,q1(M.type)?(YPe=te,Hd=G0(G.firstChild)):Hd=te),lh(S,M,M.pendingProps.children,R),Hb(S,M),S===null&&(M.flags|=4194304),M.child;case 5:return S===null&&oa&&(re=ie(),G=tu(M.type,re.ancestorInfo),te=Hd,(Se=!te)||(Se=Z4(te,M.type,M.pendingProps,tI),Se!==null?(M.stateNode=Se,fv||(re=M2(Se,M.type,M.pendingProps,re),re!==null&&(g2(M,0).serverProps=re)),fA=M,Hd=G0(Se.firstChild),tI=!1,re=!0):re=!1,Se=!re),Se&&(G&&A4(M,te),oA(M))),J(M),te=M.type,re=M.pendingProps,Se=S!==null?S.memoizedProps:null,G=re.children,UP(te,re)?G=null:Se!==null&&UP(te,Se)&&(M.flags|=32),M.memoizedState!==null&&(te=lN(S,M,BH,null,null,R),qO._currentValue=te),Hb(S,M),lh(S,M,G,R),M.child;case 6:return S===null&&oa&&(R=M.pendingProps,S=ie(),G=S.ancestorInfo.current,R=G!=null?wu(R,G.tag,S.ancestorInfo.implicitRootScope):!0,S=Hd,(G=!S)||(G=sO(S,M.pendingProps,tI),G!==null?(M.stateNode=G,fA=M,Hd=null,G=!0):G=!1,G=!G),G&&(R&&A4(M,S),oA(M))),null;case 13:return Ob(S,M,R);case 4:return ce(M,M.stateNode.containerInfo),G=M.pendingProps,S===null?M.child=mR(M,null,G,R):lh(S,M,G,R),M.child;case 11:return W9(S,M,M.type,M.pendingProps,R);case 7:return G=M.pendingProps,Hb(S,M),lh(S,M,G,R),M.child;case 8:return lh(S,M,M.pendingProps.children,R),M.child;case 12:return M.flags|=4,M.flags|=2048,G=M.stateNode,G.effectDuration=-0,G.passiveEffectDuration=-0,lh(S,M,M.pendingProps.children,R),M.child;case 10:return j9(S,M,R);case 9:return te=M.type._context,G=M.pendingProps.children,typeof G!=="function"&&console.error("A context consumer was rendered with multiple children, or a child that isn't a function. A context consumer expects a single child that is a function. If you did pass a function, make sure there is no trailing or leading whitespace around it."),F1(M),te=vc(te),G=nPe(G,te,void 0),M.flags|=1,lh(S,M,G,R),M.child;case 14:return k4(S,M,M.type,M.pendingProps,R);case 15:return xf(S,M,M.type,M.pendingProps,R);case 19:return zb(S,M,R);case 31:return LH(S,M,R);case 22:return P2(S,M,R,M.pendingProps);case 24:return F1(M),G=vc(wm),S===null?(te=y4(),te===null&&(te=_d,re=H1(),te.pooledCache=re,C2(re),re!==null&&(te.pooledCacheLanes|=R),te=re),M.memoizedState={parent:G,cache:te},AP(M),y2(M,wm,te)):((S.lanes&R)!==0&&(vb(S,M),_P(M,null,null,R),rA()),te=S.memoizedState,re=M.memoizedState,te.parent!==G?(te={parent:G,cache:G},M.memoizedState=te,M.lanes===0&&(M.memoizedState=M.updateQueue.baseState=te),y2(M,wm,G)):(G=re.cache,y2(M,wm,G),G!==te.cache&&dP(M,[wm],R,!0))),lh(S,M,M.pendingProps.children,R),M.child;case 30:return M.stateNode===null&&(M.stateNode={autoName:null,paired:null,clones:null,ref:null}),G=M.pendingProps,G.name!=null&&G.name!=="auto"?M.flags|=S===null?18882560:18874368:oa&&up(M),G.className!==void 0&&(te=typeof G.className==="string"?JSON.stringify(G.className):"{...}",Stt[te]||(Stt[te]=!0,console.error(`<ViewTransition> doesn't accept a "className" prop. It has been renamed to "default".
- <ViewTransition className=%s>
+ <ViewTransition default=%s>`,te,te))),S!==null&&S.memoizedProps.name!==G.name?M.flags|=4194816:Hb(S,M),lh(S,M,G.children,R),M.child;case 29:throw M.pendingProps}throw Error("Unknown unit of work tag ("+M.tag+"). This error is likely caused by a bug in React. Please file an issue.")}function v2(S){S.flags|=4}function iu(S,M,R,G,te){var re;if(re=(S.mode&Eet)!==jr)re=R===null?Pn(M,G):Pn(M,G)&&(G.src!==R.src||G.srcSet!==R.srcSet);if(re){if(S.flags|=16777216,(te&335544128)===te)if(S.stateNode.complete)S.flags|=8192;else if(wN())S.flags|=8192;else throw hR=Cae,iPe}else S.flags&=-16777217}function OH(S,M){if(M.type!=="stylesheet"||(M.state.loading&rI)!==vR)S.flags&=-16777217;else if(S.flags|=16777216,!Xn(M))if(wN())S.flags|=8192;else throw hR=Cae,iPe}function ic(S,M){M!==null&&(S.flags|=4),S.flags&16384&&(M=S.tag!==22?je():536870912,S.lanes|=M,yR|=M)}function En(S,M){if(!oa)switch(S.tailMode){case"visible":break;case"collapsed":for(var R=S.tail,G=null;R!==null;)R.alternate!==null&&(G=R),R=R.sibling;G===null?M||S.tail===null?S.tail=null:S.tail.sibling=null:G.sibling=null;break;default:M=S.tail;for(R=null;M!==null;)M.alternate!==null&&(R=M),M=M.sibling;R===null?S.tail=null:R.sibling=null}}function Wc(S){var M=S.alternate!==null&&S.alternate.child===S.child,R=0,G=0;if(M)if((S.mode&na)!==jr){for(var{selfBaseDuration:te,child:re}=S;re!==null;)R|=re.lanes|re.childLanes,G|=re.subtreeFlags&1206910976,G|=re.flags&1206910976,te+=re.treeBaseDuration,re=re.sibling;S.treeBaseDuration=te}else for(te=S.child;te!==null;)R|=te.lanes|te.childLanes,G|=te.subtreeFlags&1206910976,G|=te.flags&1206910976,te.return=S,te=te.sibling;else if((S.mode&na)!==jr){te=S.actualDuration,re=S.selfBaseDuration;for(var Se=S.child;Se!==null;)R|=Se.lanes|Se.childLanes,G|=Se.subtreeFlags,G|=Se.flags,te+=Se.actualDuration,re+=Se.treeBaseDuration,Se=Se.sibling;S.actualDuration=te,S.treeBaseDuration=re}else for(te=S.child;te!==null;)R|=te.lanes|te.childLanes,G|=te.subtreeFlags,G|=te.flags,te.return=S,te=te.sibling;return S.subtreeFlags|=G,S.childLanes=R,M}function rj(S,M,R){var G=M.pendingProps;switch(hp(M),M.tag){case 16:case 15:case 0:case 11:case 7:case 8:case 12:case 9:case 14:return Wc(M),null;case 1:return Wc(M),null;case 3:if(R=M.stateNode,G=null,S!==null&&(G=S.memoizedState.cache),M.memoizedState.cache!==G&&(M.flags|=2048),eg(wm,M),oe(M),R.pendingContext&&(R.context=R.pendingContext,R.pendingContext=null),S===null||S.child===null)cP(M)?(lP(),v2(M)):S===null||S.memoizedState.isDehydrated&&(M.flags&256)===0||(M.flags|=1024,_4());return Wc(M),null;case 26:var{type:te,memoizedState:re}=M;return S===null?(v2(M),re!==null?(Wc(M),OH(M,re)):(Wc(M),iu(M,te,null,G,R))):re?re!==S.memoizedState?(v2(M),Wc(M),OH(M,re)):(Wc(M),M.flags&=-16777217):(S=S.memoizedProps,S!==G&&v2(M),Wc(M),iu(M,te,S,G,R)),null;case 27:if(ee(M),R=ne(pA.current),te=M.type,S!==null&&M.stateNode!=null)S.memoizedProps!==G&&v2(M);else{if(!G){if(M.stateNode===null)throw Error("We must have new props for new mounts. This error is likely caused by a bug in React. Please file an issue.");return Wc(M),M.subtreeFlags&=-33554433,null}S=ie(),cP(M)?c_(M,S):(S=hA(te,G,R,S,!0),M.stateNode=S,v2(M))}return Wc(M),M.subtreeFlags&=-33554433,null;case 5:if(ee(M),te=M.type,S!==null&&M.stateNode!=null)S.memoizedProps!==G&&v2(M);else{if(!G){if(M.stateNode===null)throw Error("We must have new props for new mounts. This error is likely caused by a bug in React. Please file an issue.");return Wc(M),M.subtreeFlags&=-33554433,null}var Se=ie();if(cP(M))c_(M,Se);else{switch(re=ne(pA.current),tu(te,Se.ancestorInfo),Se=Se.context,re=Rl(re),Se){case KO:re=re.createElementNS(Ie,te);break;case Zae:re=re.createElementNS(ge,te);break;default:switch(te){case"svg":re=re.createElementNS(Ie,te);break;case"math":re=re.createElementNS(ge,te);break;case"script":re=re.createElement("div"),Ktt||FC(G)||(console.error("Encountered a script tag while rendering React component. Scripts inside React components are never executed when rendering on the client. Consider using template tag instead (https://developer.mozilla.org/en-US/docs/Web/HTML/Element/template)."),Ktt=!0),re.innerHTML="<script></script>",re=re.removeChild(re.firstChild);break;case"select":re=typeof G.is==="string"?re.createElement("select",{is:G.is}):re.createElement("select"),G.multiple?re.multiple=!0:G.size&&(re.size=G.size);break;default:re=typeof G.is==="string"?re.createElement(te,{is:G.is}):re.createElement(te),te.indexOf("-")===-1&&(te!==te.toLowerCase()&&console.error("<%s /> is using incorrect casing. Use PascalCase for React components, or lowercase for HTML elements.",te),Object.prototype.toString.call(re)!=="[object HTMLUnknownElement]"||fg.call(jtt,te)||(jtt[te]=!0,console.error("The tag <%s> is unrecognized in this browser. If you meant to render a React component, start its name with an uppercase letter.",te)))}}re[Gu]=M,re[_A]=G;e:for(Se=M.child;Se!==null;){if(Se.tag===5||Se.tag===6)re.appendChild(Se.stateNode);else if(Se.tag!==4&&Se.tag!==27&&Se.child!==null){Se.child.return=Se,Se=Se.child;continue}if(Se===M)break e;for(;Se.sibling===null;){if(Se.return===null||Se.return===M)break e;Se=Se.return}Se.sibling.return=Se.return,Se=Se.sibling}M.stateNode=re;e:switch(n0(re,te,G),te){case"button":case"input":case"select":case"textarea":G=!!G.autoFocus;break e;case"img":G=!0;break e;default:G=!1}G&&v2(M)}}return Wc(M),M.subtreeFlags&=-33554433,iu(M,M.type,S===null?null:S.memoizedProps,M.pendingProps,R),null;case 6:if(S&&M.stateNode!=null)S.memoizedProps!==G&&v2(M);else{if(typeof G!=="string"&&M.stateNode===null)throw Error("We must have new props for new mounts. This error is likely caused by a bug in React. Please file an issue.");if(S=ne(pA.current),R=ie(),cP(M)){if(S=M.stateNode,R=M.memoizedProps,te=!fv,G=null,re=fA,re!==null)switch(re.tag){case 3:te&&(te=k2(S,R,G),te!==null&&(g2(M,0).serverProps=te));break;case 27:case 5:G=re.memoizedProps,te&&(te=k2(S,R,G),te!==null&&(g2(M,0).serverProps=te))}S[Gu]=M,S=S.nodeValue===R||G!==null&&G.suppressHydrationWarning===!0||X4(S.nodeValue,R)?!0:!1,S||oA(M,!0)}else te=R.ancestorInfo.current,te!=null&&wu(G,te.tag,R.ancestorInfo.implicitRootScope),S=Rl(S).createTextNode(G),S[Gu]=M,M.stateNode=S}return Wc(M),null;case 31:if(R=M.memoizedState,S===null||S.memoizedState!==null){if(G=cP(M),R!==null){if(S===null){if(!G)throw Error("A dehydrated suspense component was completed without a hydrated node. This is probably a bug in React.");if(S=M.memoizedState,S=S!==null?S.dehydrated:null,!S)throw Error("Expected to have a hydrated activity instance. This error is likely caused by a bug in React. Please file an issue.");S[Gu]=M,Wc(M),(M.mode&na)!==jr&&R!==null&&(S=M.child,S!==null&&(M.treeBaseDuration-=S.treeBaseDuration))}else lP(),uC(),(M.flags&128)===0&&(R=M.memoizedState=null),M.flags|=4,Wc(M),(M.mode&na)!==jr&&R!==null&&(S=M.child,S!==null&&(M.treeBaseDuration-=S.treeBaseDuration));S=!1}else R=_4(),S!==null&&S.memoizedState!==null&&(S.memoizedState.hydrationErrors=R),S=!0;if(!S){if(M.flags&256)return R0(M),M;return R0(M),null}if((M.flags&128)!==0)throw Error("Client rendering an Activity suspended it again. This is a bug in React.")}return Wc(M),null;case 13:if(G=M.memoizedState,S===null||S.memoizedState!==null&&S.memoizedState.dehydrated!==null){if(te=G,re=cP(M),te!==null&&te.dehydrated!==null){if(S===null){if(!re)throw Error("A dehydrated suspense component was completed without a hydrated node. This is probably a bug in React.");if(re=M.memoizedState,re=re!==null?re.dehydrated:null,!re)throw Error("Expected to have a hydrated suspense instance. This error is likely caused by a bug in React. Please file an issue.");re[Gu]=M,Wc(M),(M.mode&na)!==jr&&te!==null&&(te=M.child,te!==null&&(M.treeBaseDuration-=te.treeBaseDuration))}else lP(),uC(),(M.flags&128)===0&&(te=M.memoizedState=null),M.flags|=4,Wc(M),(M.mode&na)!==jr&&te!==null&&(te=M.child,te!==null&&(M.treeBaseDuration-=te.treeBaseDuration));te=!1}else te=_4(),S!==null&&S.memoizedState!==null&&(S.memoizedState.hydrationErrors=te),te=!0;if(!te){if(M.flags&256)return R0(M),M;return R0(M),null}}if(R0(M),(M.flags&128)!==0)return M.lanes=R,(M.mode&na)!==jr&&m_(M),M;return R=G!==null,S=S!==null&&S.memoizedState!==null,R&&(G=M.child,te=null,G.alternate!==null&&G.alternate.memoizedState!==null&&G.alternate.memoizedState.cachePool!==null&&(te=G.alternate.memoizedState.cachePool.pool),re=null,G.memoizedState!==null&&G.memoizedState.cachePool!==null&&(re=G.memoizedState.cachePool.pool),re!==te&&(G.flags|=2048)),R!==S&&R&&(M.child.flags|=8192),ic(M,M.updateQueue),Wc(M),(M.mode&na)!==jr&&R&&(S=M.child,S!==null&&(M.treeBaseDuration-=S.treeBaseDuration)),null;case 4:return oe(M),S===null&&Bf(M.stateNode.containerInfo),M.flags|=67108864,Wc(M),null;case 10:return eg(M.type,M),Wc(M),null;case 19:if(f9(M),G=M.memoizedState,G===null)return Wc(M),null;if(te=(M.flags&128)!==0,re=G.rendering,re===null)if(te)En(G,!1);else{if(mh!==gM||S!==null&&(S.flags&128)!==0)for(S=M.child;S!==null;){if(re=y9(S),re!==null){M.flags|=128,En(G,!1),S=re.updateQueue,M.updateQueue=S,ic(M,S),M.subtreeFlags=0,S=R;for(R=M.child;R!==null;)e0(R,S),R=R.sibling;return sA(M,E_.current&NO|Xj),oa&&Us(M,G.treeForkCount),M.child}S=S.sibling}G.tail!==null&&Qr()>Fae&&(M.flags|=128,te=!0,En(G,!1),M.lanes=4194304)}else{if(!te)if(S=y9(re),S!==null){if(M.flags|=128,te=!0,S=S.updateQueue,M.updateQueue=S,ic(M,S),En(G,!0),G.tail===null&&G.tailMode!=="collapsed"&&G.tailMode!=="visible"&&!re.alternate&&!oa)return Wc(M),null}else 2*Qr()-G.renderingStartTime>Fae&&R!==536870912&&(M.flags|=128,te=!0,En(G,!1),M.lanes=4194304);G.isBackwards?(re.sibling=M.child,M.child=re):(S=G.last,S!==null?S.sibling=re:M.child=re,G.last=re)}if(G.tail!==null){S=G.tail;e:{for(R=S;R!==null;){if(R.alternate!==null){R=!1;break e}R=R.sibling}R=!0}return G.rendering=S,G.tail=S.sibling,G.renderingStartTime=Qr(),S.sibling=null,re=E_.current,re=te?re&NO|Xj:re&NO,G.tailMode==="visible"||G.tailMode==="collapsed"||!R||oa?sA(M,re):(R=re,q(v_,M,M),q(E_,R,M),Cg===null&&(Cg=M)),oa&&Us(M,G.treeForkCount),S}return Wc(M),null;case 22:case 23:return R0(M),_9(M),G=M.memoizedState!==null,S!==null?S.memoizedState!==null!==G&&(M.flags|=8192):G&&(M.flags|=8192),G?(R&536870912)!==0&&(M.flags&128)===0&&(Wc(M),M.subtreeFlags&6&&(M.flags|=8192)):Wc(M),R=M.updateQueue,R!==null&&ic(M,R.retryQueue),R=null,S!==null&&S.memoizedState!==null&&S.memoizedState.cachePool!==null&&(R=S.memoizedState.cachePool.pool),G=null,M.memoizedState!==null&&M.memoizedState.cachePool!==null&&(G=M.memoizedState.cachePool.pool),G!==R&&(M.flags|=2048),S!==null&&j(lR,M),null;case 24:return R=null,S!==null&&(R=S.memoizedState.cache),M.memoizedState.cache!==R&&(M.flags|=2048),eg(wm,M),Wc(M),null;case 25:return null;case 30:return M.flags|=33554432,Wc(M),null}throw Error("Unknown unit of work tag ("+M.tag+"). This error is likely caused by a bug in React. Please file an issue.")}function zH(S,M){switch(hp(M),M.tag){case 1:return S=M.flags,S&65536?(M.flags=S&-65537|128,(M.mode&na)!==jr&&m_(M),M):null;case 3:return eg(wm,M),oe(M),S=M.flags,(S&65536)!==0&&(S&128)===0?(M.flags=S&-65537|128,M):null;case 26:case 27:case 5:return ee(M),null;case 31:if(M.memoizedState!==null){if(R0(M),M.alternate===null)throw Error("Threw in newly mounted dehydrated component. This is likely a bug in React. Please file an issue.");uC()}return S=M.flags,S&65536?(M.flags=S&-65537|128,(M.mode&na)!==jr&&m_(M),M):null;case 13:if(R0(M),S=M.memoizedState,S!==null&&S.dehydrated!==null){if(M.alternate===null)throw Error("Threw in newly mounted dehydrated component. This is likely a bug in React. Please file an issue.");uC()}return S=M.flags,S&65536?(M.flags=S&-65537|128,(M.mode&na)!==jr&&m_(M),M):null;case 19:return f9(M),S=M.flags,S&65536?(M.flags=S&-65537|128,S=M.memoizedState,S!==null&&(S.rendering=null,S.tail=null),M.flags|=4,M):null;case 4:return oe(M),null;case 10:return eg(M.type,M),null;case 22:case 23:return R0(M),_9(M),S!==null&&j(lR,M),S=M.flags,S&65536?(M.flags=S&-65537|128,(M.mode&na)!==jr&&m_(M),M):null;case 24:return eg(wm,M),null;case 25:return null;default:return null}}function Gb(S,M){switch(hp(M),M.tag){case 3:eg(wm,M),oe(M);break;case 26:case 27:case 5:ee(M);break;case 4:oe(M);break;case 31:M.memoizedState!==null&&R0(M);break;case 13:R0(M);break;case 19:f9(M);break;case 10:eg(M.type,M);break;case 22:case 23:R0(M),_9(M),S!==null&&j(lR,M);break;case 24:eg(wm,M)}}function V1(S){return(S.mode&na)!==jr}function _l(S,M){V1(S)?(h_(),F4(M,S),Af()):F4(M,S)}function fN(S,M,R){V1(S)?(h_(),Yb(R,S,M),Af()):Yb(R,S,M)}function F4(S,M){try{var R=M.updateQueue,G=R!==null?R.lastEffect:null;if(G!==null){var te=G.next;R=te;do{if((R.tag&S)===S&&(G=void 0,(S&Ff)!==Kj&&(VO=!0),G=ye(M,WNn,R),(S&Ff)!==Kj&&(VO=!1),G!==void 0&&typeof G!=="function")){var re=void 0;re=(R.tag&W2)!==0?"useLayoutEffect":(R.tag&Ff)!==0?"useInsertionEffect":"useEffect";var Se=void 0;Se=G===null?" You returned null. If your effect does not require clean up, return undefined (or nothing).":typeof G.then==="function"?`
It looks like you wrote `+re+`(async () => ...) or returned a Promise. Instead, write the async function inside your effect and call it immediately:
`+re+`(() => {
async function fetchData() {
// You can await here
const response = await MyAPI.getData(someId);
// ...
}
fetchData();
}, [someId]); // Or [] if effect doesn't need props or state
Learn more about data fetching with Hooks: https://react.dev/link/hooks-data-fetching`:" You returned: "+G,ye(M,function(Me,$e){console.error("%s must not return anything besides a function, which is used for clean-up.%s",Me,$e)},re,Se)}R=R.next}while(R!==te)}}catch(Me){sc(M,M.return,Me)}}function Yb(S,M,R){try{var G=M.updateQueue,te=G!==null?G.lastEffect:null;if(te!==null){var re=te.next;G=re;do{if((G.tag&S)===S){var Se=G.inst,Me=Se.destroy;Me!==void 0&&(Se.destroy=void 0,(S&Ff)!==Kj&&(VO=!0),te=M,ye(te,XNn,te,R,Me),(S&Ff)!==Kj&&(VO=!1))}G=G.next}while(G!==re)}}catch($e){sc(M,M.return,$e)}}function q9(S,M){V1(S)?(h_(),F4(M,S),Af()):F4(M,S)}function rg(S,M,R){V1(S)?(h_(),Yb(R,S,M),Af()):Yb(R,S,M)}function g_(S){var M=S.updateQueue;if(M!==null){var R=S.stateNode;S.type.defaultProps||"ref"in S.memoizedProps||LO||(R.props!==S.memoizedProps&&console.error("Expected %s props to match memoized props before processing the update queue. This might either be because of a bug in React, or because a component reassigns its own `this.props`. Please file an issue.",V(S)||"instance"),R.state!==S.memoizedState&&console.error("Expected %s state to match memoized state before processing the update queue. This might either be because of a bug in React, or because a component reassigns its own `this.state`. Please file an issue.",V(S)||"instance"));try{ye(S,Eb,M,R)}catch(G){sc(S,S.return,G)}}}function GH(S,M,R){return S.getSnapshotBeforeUpdate(M,R)}function sj(S,M){var R=M.memoizedProps,G=M.memoizedState;M=S.stateNode,S.type.defaultProps||"ref"in S.memoizedProps||LO||(M.props!==S.memoizedProps&&console.error("Expected %s props to match memoized props before getSnapshotBeforeUpdate. This might either be because of a bug in React, or because a component reassigns its own `this.props`. Please file an issue.",V(S)||"instance"),M.state!==S.memoizedState&&console.error("Expected %s state to match memoized state before getSnapshotBeforeUpdate. This might either be because of a bug in React, or because a component reassigns its own `this.state`. Please file an issue.",V(S)||"instance"));try{var te=Fb(S.type,R),re=ye(S,GH,M,te,G);R=vtt,re!==void 0||R.has(S.type)||(R.add(S.type),ye(S,function(){console.error("%s.getSnapshotBeforeUpdate(): A snapshot value (or null) must be returned. You have returned undefined.",V(S))})),M.__reactInternalSnapshotBeforeUpdate=re}catch(Se){sc(S,S.return,Se)}}function YH(S,M,R){R.props=Fb(S.type,S.memoizedProps),R.state=S.memoizedState,V1(S)?(h_(),ye(S,Vet,S,M,R),Af()):ye(S,Vet,S,M,R)}function Vb(S){var M=S.ref;if(M!==null){switch(S.tag){case 26:case 27:case 5:var R=S.stateNode;break;case 30:R=S.stateNode;var G=N0(S.memoizedProps,R);if(R.ref===null||R.ref.name!==G)R.ref=uA(G);R=R.ref;break;case 7:S.stateNode===null&&(R=new ql(S),b(S,tv,R),S.stateNode=R),R=S.stateNode;break;default:R=S.stateNode}if(typeof M==="function")if(V1(S))try{h_(),S.refCleanup=M(R)}finally{Af()}else S.refCleanup=M(R);else typeof M==="string"?console.error("String refs are no longer supported."):M.hasOwnProperty("current")||console.error("Unexpected ref object provided for %s. Use either a ref-setter function or React.createRef().",V(S)),M.current=R}}function tl(S,M){try{ye(S,Vb,S)}catch(R){sc(S,M,R)}}function rc(S,M){var R=S.ref,G=S.refCleanup;if(R!==null)if(typeof G==="function")try{if(V1(S))try{h_(),ye(S,G)}finally{Af(S)}else ye(S,G)}catch(te){sc(S,M,te)}finally{S.refCleanup=null,S=S.alternate,S!=null&&(S.refCleanup=null)}else if(typeof R==="function")try{if(V1(S))try{h_(),ye(S,R,null)}finally{Af(S)}else ye(S,R,null)}catch(te){sc(S,M,te)}else R.current=null}function Qu(S,M,R,G){var te=S.memoizedProps,re=te.id,Se=te.onCommit;te=te.onRender,M=M===null?"mount":"update",gae&&(M="nested-update"),typeof te==="function"&&te(re,M,S.actualDuration,S.treeBaseDuration,S.actualStartTime,R),typeof Se==="function"&&Se(re,M,G,R)}function _p(S,M,R,G){var te=S.memoizedProps;S=te.id,te=te.onPostCommit,M=M===null?"mount":"update",gae&&(M="nested-update"),typeof te==="function"&&te(S,M,G,R)}function J9(S,M){if((S.tag===5||S.tag===27||S.tag===6)&&S.alternate===null&&M!==null)for(var R=0;R<M.length;R++)h5(S.stateNode,M[R])}function yN(S){for(var M=S.return;M!==null;){if(xN(M)&&h5(S.stateNode,M.stateNode),bf(M))break;M=M.return}}function ru(S){for(var M=S.return;M!==null;){if(xN(M)&&rO(S.stateNode,M.stateNode),bf(M))break;M=M.return}}function bf(S){return S.tag===5||S.tag===3||S.tag===27}function xN(S){return S&&S.tag===7&&S.stateNode!==null}function CN(S){var{type:M,memoizedProps:R,stateNode:G}=S;try{ye(S,GN,G,M,R,S)}catch(te){sc(S,S.return,te)}}function IN(S,M,R){try{ye(S,mw,S.stateNode,S.type,R,M,S)}catch(G){sc(S,S.return,G)}}function $9(S){return S.tag===5||S.tag===3||S.tag===26||S.tag===27&&q1(S.type)||S.tag===4}function EP(S){e:for(;;){for(;S.sibling===null;){if(S.return===null||$9(S.return))return null;S=S.return}S.sibling.return=S.return;for(S=S.sibling;S.tag!==5&&S.tag!==6&&S.tag!==18;){if(S.tag===27&&q1(S.type))continue e;if(S.flags&2)continue e;if(S.child===null||S.tag===4)continue e;else S.child.return=S,S=S.child}if(!(S.flags&2))return S.stateNode}}function Z9(S,M,R,G){var te=S.tag;if(te===5||te===6)te=S.stateNode,M?(XP(R),(R.nodeType===9?R.body:R.nodeName==="HTML"?R.ownerDocument.body:R).insertBefore(te,M)):(XP(R),M=R.nodeType===9?R.body:R.nodeName==="HTML"?R.ownerDocument.body:R,M.appendChild(te),te=R._reactRootContainer,te!==null&&te!==void 0||M.onclick!==null||(M.onclick=Dd)),J9(S,G),cc=!0;else if(te!==4&&(te===27&&(J9(S,G),G=null,q1(S.type)&&(R=S.stateNode,M=null)),S=S.child,S!==null))for(Z9(S,M,R,G),S=S.sibling;S!==null;)Z9(S,M,R,G),S=S.sibling}function MP(S,M,R,G){var te=S.tag;if(te===5||te===6)te=S.stateNode,M?R.insertBefore(te,M):R.appendChild(te),J9(S,G),cc=!0;else if(te!==4&&(te===27&&(J9(S,G),G=null,q1(S.type)&&(R=S.stateNode)),S=S.child,S!==null))for(MP(S,M,R,G),S=S.sibling;S!==null;)MP(S,M,R,G),S=S.sibling}function VH(S){for(var M,R=S.return;R!==null;){if($9(R)){M=R;break}R=R.return}R=null;for(var G=S.return;G!==null;){if(xN(G)){var te=G.stateNode;R===null?R=[te]:R.push(te)}if(bf(G))break;G=G.return}if(M==null)throw Error("Expected to find a host parent. This error is likely caused by a bug in React. Please file an issue.");switch(M.tag){case 27:M=M.stateNode,G=EP(S),MP(S,G,M,R);break;case 5:G=M.stateNode,M.flags&32&&(c5(G),M.flags&=-33),M=EP(S),MP(S,M,G,R);break;case 3:case 4:M=M.stateNode.containerInfo,G=EP(S),Z9(S,G,M,R);break;default:throw Error("Invalid host parent fiber. This error is likely caused by a bug in React. Please file an issue.")}}function Ub(S){var{stateNode:M,memoizedProps:R}=S;try{ye(S,eM,S.type,R,M,S)}catch(G){sc(S,S.return,G)}}function vC(S){if(S.tag===30||(S.subtreeFlags&33554432)!==0)Mae=!0}function sg(){var S=Iv;return Iv=null,S}function Qh(S,M,R,G,te){return ty=0,(M=EC(S.child,M,R,G,te))&&S._debugTask!=null&&ey===null&&(ey=S._debugTask),M}function EC(S,M,R,G,te){for(var re=!1;S!==null;){if(S.tag===5){var Se=S.stateNode;if(G!==null){var Me=$P(Se);G.push(Me),Me.view&&(re=!0)}else re||$P(Se).view&&(re=!0);Mae=!0,u5(Se,ty===0?M:M+"_"+ty,R),ty++}else if(S.tag!==22||S.memoizedState===null)S.tag===30&&te||EC(S.child,M,R,G,te)&&(re=!0);S=S.sibling}return re}function md(S,M){for(;S!==null;){if(S.tag===5)D2(S.stateNode,S.memoizedProps);else if(S.tag!==22||S.memoizedState===null)S.tag===30&&M||md(S.child,M);S=S.sibling}}function kd(S){if((S.subtreeFlags&18874368)!==0)for(S=S.child;S!==null;){if(S.tag!==22||S.memoizedState===null){if(kd(S),S.tag===30&&(S.flags&18874368)!==0&&S.stateNode.paired){var M=S.memoizedProps;if(M.name==null||M.name==="auto")throw Error("Found a pair with an auto name. This is a bug in React.");var R=M.name;M=ym(M.default,M.share),M!=="none"&&(Qh(S,R,M,null,!1)||md(S.child,!1))}}S=S.sibling}}function f_(S,M){if(S.tag===30){var R=S.stateNode,G=S.memoizedProps,te=N0(G,R),re=ym(G.default,R.paired?G.share:G.enter);re!=="none"?Qh(S,te,re,null,!1)?(kd(S),R.paired||M||$b(S,G.onEnter)):md(S.child,!1):kd(S)}else if((S.subtreeFlags&33554432)!==0)for(S=S.child;S!==null;)f_(S,M),S=S.sibling;else kd(S)}function y_(S){if(X2!==null&&X2.size!==0){var M=X2;if((S.subtreeFlags&18874368)!==0)for(S=S.child;S!==null;){if(S.tag!==22||S.memoizedState===null){if(S.tag===30&&(S.flags&18874368)!==0){var R=S.memoizedProps,G=R.name;if(G!=null&&G!=="auto"){var te=M.get(G);if(te!==void 0){var re=ym(R.default,R.share);if(re!=="none"&&(Qh(S,G,re,null,!1)?(re=S.stateNode,te.paired=re,re.paired=te,$b(S,R.onShare)):md(S.child,!1)),M.delete(G),M.size===0)break}}}y_(S)}S=S.sibling}}}function su(S){if(S.tag===30){var M=S.memoizedProps,R=N0(M,S.stateNode),G=X2!==null?X2.get(R):void 0,te=ym(M.default,G!==void 0?M.share:M.exit);te!=="none"&&(Qh(S,R,te,null,!1)?G!==void 0?(te=S.stateNode,G.paired=te,te.paired=G,X2.delete(R),$b(S,M.onShare)):$b(S,M.onExit):md(S.child,!1)),X2!==null&&y_(S)}else if((S.subtreeFlags&33554432)!==0)for(S=S.child;S!==null;)su(S),S=S.sibling;else X2!==null&&y_(S)}function k0(S){for(S=S.child;S!==null;){if(S.tag===30){var M=S.memoizedProps,R=N0(M,S.stateNode);M=ym(M.default,M.update),S.flags&=-5,M!=="none"&&Qh(S,R,M,S.memoizedState=[],!1)}else(S.subtreeFlags&33554432)!==0&&k0(S);S=S.sibling}}function lA(S){if((S.subtreeFlags&18874368)!==0)for(S=S.child;S!==null;){if(S.tag!==22||S.memoizedState===null){if(S.tag===30&&(S.flags&18874368)!==0){var M=S.stateNode;M.paired!==null&&(M.paired=null,md(S.child,!1))}lA(S)}S=S.sibling}}function gl(S){if(S.tag===30)S.stateNode.paired=null,md(S.child,!1),lA(S);else if((S.subtreeFlags&33554432)!==0)for(S=S.child;S!==null;)gl(S),S=S.sibling;else lA(S)}function UH(S){for(S=S.child;S!==null;)S.tag===30?md(S.child,!1):(S.subtreeFlags&33554432)!==0&&UH(S),S=S.sibling}function BP(S,M,R,G,te,re,Se){for(var Me=!1;M!==null;){if(M.tag===5){var $e=M.stateNode;if(re!==null&&ty<re.length){var dt=re[ty],Bt=$P($e);if(dt.view||Bt.view)Me=!0;var qt;if(qt=(S.flags&4)===0)if(Bt.clip)qt=!0;else{qt=dt.rect;var Kt=Bt.rect;qt=qt.y!==Kt.y||qt.x!==Kt.x||qt.height!==Kt.height||qt.width!==Kt.width}qt&&(S.flags|=4),Bt.abs?Bt=!dt.abs:(dt=dt.rect,Bt=Bt.rect,Bt=dt.height!==Bt.height||dt.width!==Bt.width),Bt&&(S.flags|=32)}else S.flags|=32;(S.flags&4)!==0&&u5($e,ty===0?R:R+"_"+ty,te),Me&&(S.flags&4)!==0||(Iv===null&&(Iv=[]),Iv.push($e,ty===0?G:G+"_"+ty,M.memoizedProps)),ty++}else if(M.tag!==22||M.memoizedState===null)M.tag===30&&Se?S.flags|=M.flags&32:BP(S,M.child,R,G,te,re,Se)&&(Me=!0);M=M.sibling}return Me}function MC(S,M){for(S=S.child;S!==null;){if(S.tag===30){var R=S.memoizedProps,G=S.stateNode,te=N0(R,G),re=ym(R.default,R.update);if(M){G=G.clones;var Se=G===null?null:G.map(ZP)}else Se=S.memoizedState,S.memoizedState=null;G=S;var Me=S.child,$e=te;ty=0,re=BP(G,Me,$e,te,re,Se,!1),(S.flags&4)!==0&&re&&(M||$b(S,R.onUpdate))}else(S.subtreeFlags&33554432)!==0&&MC(S,M);S=S.sibling}}function WH(S){var M=S.memoizedProps.name;if(M!=null&&M!=="auto"){var R=Bae.get(M);if(R!==void 0){if(R!==S&&R!==S.alternate&&!Ett[M]){Ett[M]=!0;var G=JSON.stringify(M);ye(S,function(){console.error("There are two <ViewTransition name=%s> components with the same name mounted at the same time. This is not supported and will cause View Transitions to error. Try to use a more unique name e.g. by using a namespace prefix and adding the id of an item to the name.",G)}),ye(R,function(){console.error("The existing <ViewTransition name=%s> duplicate has this stack trace.",G)})}}else Bae.set(M,S)}}function H4(S){var M=S.memoizedProps.name;if(M!=null&&M!=="auto"){var R=Bae.get(M);R===void 0||R!==S&&R!==S.alternate||Bae.delete(M)}}function XH(S,M){return M.tag===31?(M=M.memoizedState,S.memoizedState!==null&&M===null):M.tag===13?(S=S.memoizedState,M=M.memoizedState,S!==null&&S.dehydrated!==null&&(M===null||M.dehydrated===null)):M.tag===3?S.memoizedState.isDehydrated&&(M.flags&256)===0:!1}function U1(S,M,R){if(S=S.containerInfo,FPe=JO,S=rP(S),dp(S)){if("selectionStart"in S)var G={start:S.selectionStart,end:S.selectionEnd};else e:{G=(G=S.ownerDocument)&&G.defaultView||window;var te=G.getSelection&&G.getSelection();if(te&&te.rangeCount!==0){G=te.anchorNode;var re=te.anchorOffset,Se=te.focusNode;te=te.focusOffset;try{G.nodeType,Se.nodeType}catch(ui){G=null;break e}var Me=0,$e=-1,dt=-1,Bt=0,qt=0,Kt=S,un=null;t:for(;;){for(var ho;;){if(Kt!==G||re!==0&&Kt.nodeType!==3||($e=Me+re),Kt!==Se||te!==0&&Kt.nodeType!==3||(dt=Me+te),Kt.nodeType===3&&(Me+=Kt.nodeValue.length),(ho=Kt.firstChild)===null)break;un=Kt,Kt=ho}for(;;){if(Kt===S)break t;if(un===G&&++Bt===re&&($e=Me),un===Se&&++qt===te&&(dt=Me),(ho=Kt.nextSibling)!==null)break;Kt=un,un=Kt.parentNode}Kt=ho}G=$e===-1||dt===-1?null:{start:$e,end:dt}}else G=null}G=G||{start:0,end:0}}else G=null;HPe={focusedElem:S,selectionRange:G},JO=!1,R=(R&335544064)===R,CA=M;for(M=R?9270:1024;CA!==null;){if(S=CA,R&&(G=S.deletions,G!==null))for(re=0;re<G.length;re++)R&&su(G[re]);if(S.alternate===null&&(S.flags&2)!==0)R&&vC(S),BC(R);else{if(S.tag===22){if(G=S.alternate,S.memoizedState!==null){G!==null&&G.memoizedState===null&&R&&su(G),BC(R);continue}else if(G!==null&&G.memoizedState!==null){R&&vC(S),BC(R);continue}}G=S.child,(S.subtreeFlags&M)!==0&&G!==null?(G.return=S,CA=G):(R&&k0(S),BC(R))}}X2=null}function BC(S){for(;CA!==null;){var M=CA,R=M,G=S,te=R.alternate,re=R.flags;switch(R.tag){case 0:case 11:case 15:break;case 1:(re&1024)!==0&&te!==null&&sj(R,te);break;case 3:if((re&1024)!==0){if(G=R.stateNode.containerInfo,R=G.nodeType,R===9)gw(G);else if(R===1)switch(G.nodeName){case"HEAD":case"HTML":case"BODY":gw(G);break;default:G.textContent=""}}break;case 5:case 26:case 27:case 6:case 4:case 17:break;case 30:G&&te!==null&&(G=te,te=R,R=N0(G.memoizedProps,G.stateNode),te=te.memoizedProps,te=ym(te.default,te.update),te!=="none"&&Qh(G,R,te,G.memoizedState=[],!0));break;default:if((re&1024)!==0)throw Error("This unit of work tag should not have side-effects. This error is likely caused by a bug in React. Please file an issue.")}if(G=M.sibling,G!==null){G.return=M.return,CA=G;break}CA=M.return}}function bN(S,M,R){var G=Th(),te=og(),re=pf(),Se=Al(),Me=R.flags;switch(R.tag){case 0:case 11:case 15:cg(S,R),Me&4&&_l(R,W2|oI);break;case 1:if(cg(S,R),Me&4)if(S=R.stateNode,M===null)R.type.defaultProps||"ref"in R.memoizedProps||LO||(S.props!==R.memoizedProps&&console.error("Expected %s props to match memoized props before componentDidMount. This might either be because of a bug in React, or because a component reassigns its own `this.props`. Please file an issue.",V(R)||"instance"),S.state!==R.memoizedState&&console.error("Expected %s state to match memoized state before componentDidMount. This might either be because of a bug in React, or because a component reassigns its own `this.state`. Please file an issue.",V(R)||"instance")),V1(R)?(h_(),ye(R,oPe,R,S),Af()):ye(R,oPe,R,S);else{var $e=Fb(R.type,M.memoizedProps);M=M.memoizedState,R.type.defaultProps||"ref"in R.memoizedProps||LO||(S.props!==R.memoizedProps&&console.error("Expected %s props to match memoized props before componentDidUpdate. This might either be because of a bug in React, or because a component reassigns its own `this.props`. Please file an issue.",V(R)||"instance"),S.state!==R.memoizedState&&console.error("Expected %s state to match memoized state before componentDidUpdate. This might either be because of a bug in React, or because a component reassigns its own `this.state`. Please file an issue.",V(R)||"instance")),V1(R)?(h_(),ye(R,zet,R,S,$e,M,S.__reactInternalSnapshotBeforeUpdate),Af()):ye(R,zet,R,S,$e,M,S.__reactInternalSnapshotBeforeUpdate)}Me&64&&g_(R),Me&512&&tl(R,R.return);break;case 3:if(M=ng(),cg(S,R),Me&64&&(Me=R.updateQueue,Me!==null)){if($e=null,R.child!==null)switch(R.child.tag){case 27:case 5:$e=R.child.stateNode;break;case 1:$e=R.child.stateNode}try{ye(R,Eb,Me,$e)}catch(Bt){sc(R,R.return,Bt)}}S.effectDuration+=g4(M);break;case 27:M===null&&Me&4&&Ub(R);case 26:case 5:if(cg(S,R),M===null){if(Me&4)CN(R);else if(Me&64){S=R.type,M=R.memoizedProps,$e=R.stateNode;try{ye(R,hw,$e,S,M,R)}catch(Bt){sc(R,R.return,Bt)}}}Me&512&&tl(R,R.return);break;case 12:if(Me&4){Me=ng(),cg(S,R),S=R.stateNode,S.effectDuration+=d_(Me);try{ye(R,Qu,R,M,hM,S.effectDuration)}catch(Bt){sc(R,R.return,Bt)}}else cg(S,R);break;case 31:cg(S,R),Me&4&&jH(S,R);break;case 13:cg(S,R),Me&4&&qH(S,R),Me&64&&(S=R.memoizedState,S!==null&&(S=S.dehydrated,S!==null&&(Me=F0.bind(null,R),Fu(S,Me))));break;case 22:if(Me=R.memoizedState!==null||xA,!Me){var dt=M!==null&&M.memoizedState!==null||Ol;M=xA,$e=Ol,xA=Me,(Ol=dt)&&!$e?(Me=wae,(R.subtreeFlags&8772)!==0&&(Me|=fPe),gp(S,R,Me),(R.mode&na)!==jr&&0<=gr&&0<=Hr&&0.05<Hr-gr&&dC(R,gr,Hr)):cg(S,R),xA=M,Ol=$e}break;case 30:Me&18874368&&WH(R),cg(S,R),Me&512&&tl(R,R.return);break;case 7:Me&512&&tl(R,R.return);default:cg(S,R)}(R.mode&na)!==jr&&0<=gr&&0<=Hr&&((Hh||0.05<hh)&&Nu(R,gr,Hr,hh,Yu),R.alternate===null&&R.return!==null&&R.return.alternate!==null&&0.05<Hr-gr&&(XH(R.return.alternate,R.return)||a_(R,gr,Hr,"Mount"))),xm(G),u_(te),Yu=re,Hh=Se}function Wb(S,M){for(S=S.child;S!==null;)SN(S,M),S=S.sibling}function SN(S,M){switch(S.tag){case 5:case 26:try{var R=S.stateNode;M?ye(S,Ag,R):ye(S,HC,S.stateNode,S.memoizedProps)}catch(re){sc(S,S.return,re)}PN(S,M);break;case 6:try{var G=S.stateNode;M?ye(S,jP,G):ye(S,T2,G,S.memoizedProps),cc=!0}catch(re){sc(S,S.return,re)}break;case 18:try{var te=S.stateNode;M?ye(S,iO,te):ye(S,qP,S.stateNode)}catch(re){sc(S,S.return,re)}break;case 22:case 23:S.memoizedState===null&&Wb(S,M);break;default:Wb(S,M)}}function PN(S,M){if(S.subtreeFlags&67108864)for(S=S.child;S!==null;){e:{var R=S,G=M;switch(R.tag){case 4:SN(R,G);break e;case 22:R.memoizedState===null&&PN(R,G);break e;default:PN(R,G)}}S=S.sibling}}function KH(S){var M=S.alternate;M!==null&&(S.alternate=null,KH(M)),S.child=null,S.deletions=null,S.sibling=null,S.tag===5&&(M=S.stateNode,M!==null&&Ot(M)),S.stateNode=null,S._debugOwner=null,S.return=null,S.dependencies=null,S.memoizedProps=null,S.memoizedState=null,S.pendingProps=null,S.stateNode=null,S.updateQueue=null}function ag(S,M,R){for(R=R.child;R!==null;)vN(S,M,R),R=R.sibling}function vN(S,M,R){if(Fl&&typeof Fl.onCommitFiberUnmount==="function")try{Fl.onCommitFiberUnmount(Av,R)}catch(dt){AA||(AA=!0,console.error("React instrumentation encountered an error: %o",dt))}var G=Th(),te=og(),re=pf(),Se=Al();switch(R.tag){case 26:Ol||rc(R,M),ag(S,M,R),R.memoizedState?R.memoizedState.count--:R.stateNode&&!Ol&&(S=R.stateNode,S.parentNode.removeChild(S));break;case 27:Ol||rc(R,M),ru(R);var Me=Dm,$e=ny;q1(R.type)&&(Dm=R.stateNode,ny=!1),ag(S,M,R),ye(R,ov,R.stateNode,R.type,R.memoizedProps),Dm=Me,ny=$e;break;case 5:Ol||rc(R,M),ru(R);case 6:if(R.tag===6&&ru(R),Me=Dm,$e=ny,Dm=null,ag(S,M,R),Dm=Me,ny=$e,Dm!==null)if(ny)try{ye(R,KP,Dm,R.stateNode),cc=!0}catch(dt){sc(R,M,dt)}else try{ye(R,l5,Dm,R.stateNode),cc=!0}catch(dt){sc(R,M,dt)}break;case 18:Dm!==null&&(ny?(S=Dm,VN(S.nodeType===9?S.body:S.nodeName==="HTML"?S.ownerDocument.body:S,R.stateNode),Fd(S)):VN(Dm,R.stateNode));break;case 4:Me=Dm,$e=ny,Dm=R.stateNode.containerInfo,ny=!0,ag(S,M,R),Dm=Me,ny=$e;break;case 0:case 11:case 14:case 15:Yb(Ff,R,M),Ol||fN(R,M,W2),ag(S,M,R);break;case 1:Ol||(rc(R,M),Me=R.stateNode,typeof Me.componentWillUnmount==="function"&&YH(R,M,Me)),ag(S,M,R);break;case 21:ag(S,M,R);break;case 22:Ol=(Me=Ol)||R.memoizedState!==null,ag(S,M,R),Ol=Me;break;case 30:R.flags&18874368&&H4(R),rc(R,M),ag(S,M,R);break;case 7:Ol||rc(R,M),ag(S,M,R);break;default:ag(S,M,R)}(R.mode&na)!==jr&&0<=gr&&0<=Hr&&(Hh||0.05<hh)&&Nu(R,gr,Hr,hh,Yu),xm(G),u_(te),Yu=re,Hh=Se}function jH(S,M){if(M.memoizedState===null&&(S=M.alternate,S!==null&&(S=S.memoizedState,S!==null))){S=S.dehydrated;try{ye(M,aO,S)}catch(R){sc(M,M.return,R)}}}function qH(S,M){if(M.memoizedState===null&&(S=M.alternate,S!==null&&(S=S.memoizedState,S!==null&&(S=S.dehydrated,S!==null))))try{ye(M,cO,S)}catch(R){sc(M,M.return,R)}}function Tr(S){switch(S.tag){case 31:case 13:case 19:var M=S.stateNode;return M===null&&(M=S.stateNode=new Mtt),M;case 22:return S=S.stateNode,M=S._retryCache,M===null&&(M=S._retryCache=new Mtt),M;default:throw Error("Unexpected Suspense handler tag ("+S.tag+"). This is a bug in React.")}}function Xb(S,M){var R=Tr(S);M.forEach(function(G){if(!R.has(G)){if(R.add(G),yg)if(FO!==null&&HO!==null)K1(HO,FO);else throw Error("Expected finished root and lanes to be set. This is a bug in React.");var te=ci.bind(null,S,G);G.then(te,te)}})}function kh(S,M,R){var G=M.deletions;if(G!==null)for(var te=0;te<G.length;te++){var re=S,Se=M,Me=G[te],$e=Th(),dt=Se;e:for(;dt!==null;){switch(dt.tag){case 27:if(q1(dt.type)){Dm=dt.stateNode,ny=!1;break e}break;case 5:Dm=dt.stateNode,ny=!1;break e;case 3:case 4:Dm=dt.stateNode.containerInfo,ny=!0;break e}dt=dt.return}if(Dm===null)throw Error("Expected to find a host parent. This error is likely caused by a bug in React. Please file an issue.");vN(re,Se,Me),Dm=null,ny=!1,(Me.mode&na)!==jr&&0<=gr&&0<=Hr&&0.05<Hr-gr&&a_(Me,gr,Hr,"Unmount"),xm($e),re=Me,Se=re.alternate,Se!==null&&(Se.return=null),re.return=null}if(M.subtreeFlags&13886)for(M=M.child;M!==null;)wC(M,S,R),M=M.sibling}function wC(S,M,R){var G=Th(),te=og(),re=pf(),Se=Al(),{alternate:Me,flags:$e}=S;switch(S.tag){case 0:case 11:case 14:case 15:if($e&4&&(Me=S.updateQueue,Me=Me!==null?Me.events:null,Me!==null))for(var dt=0;dt<Me.length;dt++){var Bt=Me[dt];Bt.ref.impl=Bt.nextImpl}kh(M,S,R),bm(S),$e&4&&(Yb(Ff|oI,S,S.return),F4(Ff|oI,S),fN(S,S.return,W2|oI));break;case 1:kh(M,S,R),bm(S),$e&512&&(Ol||Me===null||rc(Me,Me.return)),$e&64&&xA&&(M=S.updateQueue,M!==null&&(R=M.callbacks,R!==null&&($e=M.shared.hiddenCallbacks,M.shared.hiddenCallbacks=$e===null?R:$e.concat(R))));break;case 26:if(dt=T5,kh(M,S,R),bm(S),$e&512&&(Ol||Me===null||rc(Me,Me.return)),$e&4)if($e=Me!==null?Me.memoizedState:null,R=S.memoizedState,Me===null)if(R===null)if(S.stateNode===null)if(xA)S.stateNode=vm(S.type,S.memoizedProps,M.containerInfo,S);else{e:{M=S.type,R=S.memoizedProps,$e=dt.ownerDocument||dt;t:switch(M){case"title":if(Me=$e.getElementsByTagName("title")[0],!Me||Me[$1]||Me[Gu]||Me.namespaceURI===Ie||Me.hasAttribute("itemprop"))Me=$e.createElement(M),$e.head.insertBefore(Me,$e.querySelector("head > title"));n0(Me,M,R),Me[Gu]=S,nn(Me),M=Me;break e;case"link":if(dt=xt("link","href",$e).get(M+(R.href||""))){for(Bt=0;Bt<dt.length;Bt++)if(Me=dt[Bt],Me.getAttribute("href")===(R.href==null||R.href===""?null:R.href)&&Me.getAttribute("rel")===(R.rel==null?null:R.rel)&&Me.getAttribute("title")===(R.title==null?null:R.title)&&Me.getAttribute("crossorigin")===(R.crossOrigin==null?null:R.crossOrigin)){dt.splice(Bt,1);break t}}Me=$e.createElement(M),n0(Me,M,R),$e.head.appendChild(Me);break;case"meta":if(dt=xt("meta","content",$e).get(M+(R.content||""))){for(Bt=0;Bt<dt.length;Bt++)if(Me=dt[Bt],st(R.content,"content"),Me.getAttribute("content")===(R.content==null?null:""+R.content)&&Me.getAttribute("name")===(R.name==null?null:R.name)&&Me.getAttribute("property")===(R.property==null?null:R.property)&&Me.getAttribute("http-equiv")===(R.httpEquiv==null?null:R.httpEquiv)&&Me.getAttribute("charset")===(R.charSet==null?null:R.charSet)){dt.splice(Bt,1);break t}}Me=$e.createElement(M),n0(Me,M,R),$e.head.appendChild(Me);break;default:throw Error('getNodesForType encountered a type it did not expect: "'+M+'". This is a bug in React.')}Me[Gu]=S,nn(Me),M=Me}S.stateNode=M}else xA||St(dt,S.type,S.stateNode);else S.stateNode=pe(dt,R,S.memoizedProps);else $e!==R?($e===null?(M=Me.stateNode,M===null||Ol||M.parentNode.removeChild(M)):$e.count--,R===null?xA||St(dt,S.type,S.stateNode):pe(dt,R,S.memoizedProps)):R===null&&S.stateNode!==null&&IN(S,S.memoizedProps,Me.memoizedProps);break;case 27:kh(M,S,R),bm(S),$e&512&&(Ol||Me===null||rc(Me,Me.return)),Me!==null&&$e&4&&IN(S,S.memoizedProps,Me.memoizedProps);break;case 5:if(dt=bv,bv=!1,kh(M,S,R),bv=dt,bm(S),$e&512&&(Ol||Me===null||rc(Me,Me.return)),S.flags&32){M=S.stateNode;try{ye(S,c5,M),cc=!0}catch(ho){sc(S,S.return,ho)}}$e&4&&S.stateNode!=null&&(M=S.memoizedProps,IN(S,M,Me!==null?Me.memoizedProps:M)),$e&1024&&(yPe=!0,S.type!=="form"&&console.error("Unexpected host component type. Expected a form. This is a bug in React."));break;case 6:if(kh(M,S,R),bm(S),$e&4){if(S.stateNode===null)throw Error("This should have a text node initialized. This error is likely caused by a bug in React. Please file an issue.");M=S.memoizedProps,R=Me!==null?Me.memoizedProps:M,$e=S.stateNode;try{ye(S,YN,$e,R,M),cc=!0}catch(ho){sc(S,S.return,ho)}}break;case 3:if(dt=ng(),cc=!1,ece=null,Bt=T5,T5=p5(M.containerInfo),kh(M,S,R),T5=Bt,bm(S),$e&4&&Me!==null&&Me.memoizedState.isDehydrated)try{ye(S,J1,M.containerInfo)}catch(ho){sc(S,S.return,ho)}yPe&&(yPe=!1,ew(S)),M.effectDuration+=g4(dt),cc=!1;break;case 4:$e=bv,bv=xA,Me=_t(),dt=T5,T5=p5(S.stateNode.containerInfo),kh(M,S,R),bm(S),T5=dt,cc&&$j&&(Tae=!0),cc=Me,bv=$e;break;case 12:$e=ng(),kh(M,S,R),bm(S),S.stateNode.effectDuration+=d_($e);break;case 31:kh(M,S,R),bm(S),$e&4&&(M=S.updateQueue,M!==null&&(S.updateQueue=null,Xb(S,M)));break;case 13:kh(M,S,R),bm(S),S.child.flags&8192&&S.memoizedState!==null!==(Me!==null&&Me.memoizedState!==null)&&(Lae=Qr()),$e&4&&(M=S.updateQueue,M!==null&&(S.updateQueue=null,Xb(S,M)));break;case 22:dt=S.memoizedState!==null,Bt=Me!==null&&Me.memoizedState!==null;var qt=xA,Kt=Ol,un=bv;xA=qt||dt,bv=un||dt,Ol=Kt||Bt,kh(M,S,R),Ol=Kt,bv=un,xA=qt,Bt&&!dt&&!qt&&!Kt&&(S.mode&na)!==jr&&0<=gr&&0<=Hr&&0.05<Hr-gr&&dC(S,gr,Hr),bm(S),$e&8192&&(M=S.stateNode,M._visibility=dt?M._visibility&~wj:M._visibility|wj,!dt||Me===null||Bt||xA||Ol||(M=wae,R=Bt||Ol,Me=xA,Bt=Ol,xA=dt||xA,Ol=R,Pf(S,M),(S.mode&na)!==jr&&0<=gr&&0<=Hr&&0.05<Hr-gr&&a_(S,gr,Hr,"Disconnect"),xA=Me,Ol=Bt),!dt&&bv||Wb(S,dt)),$e&4&&(M=S.updateQueue,M!==null&&(R=M.retryQueue,R!==null&&(M.retryQueue=null,Xb(S,R))));break;case 19:kh(M,S,R),bm(S),$e&4&&(M=S.updateQueue,M!==null&&(S.updateQueue=null,Xb(S,M)));break;case 30:$e&512&&(Ol||Me===null||rc(Me,Me.return)),$e=_t(),dt=$j,Bt=(R&335544064)===R,qt=S.memoizedProps,$j=Bt&&ym(qt.default,qt.update)!=="none",kh(M,S,R),bm(S),Bt&&Me!==null&&cc&&(S.flags|=4),$j=dt,cc=$e;break;case 21:break;case 7:$e&512&&(Ol||Me===null||rc(Me,Me.return)),Me&&Me.stateNode!==null&&(Me.stateNode._fragmentFiber=S);default:kh(M,S,R),bm(S)}(S.mode&na)!==jr&&0<=gr&&0<=Hr&&((Hh||0.05<hh)&&Nu(S,gr,Hr,hh,Yu),S.alternate===null&&S.return!==null&&S.return.alternate!==null&&0.05<Hr-gr&&(XH(S.return.alternate,S.return)||a_(S,gr,Hr,"Mount"))),xm(G),u_(te),Yu=re,Hh=Se}function bm(S){var M=S.flags;if(M&2){try{ye(S,VH,S)}catch(R){sc(S,S.return,R)}S.flags&=-3}M&4096&&(S.flags&=-4097)}function ew(S){if(S.subtreeFlags&1024)for(S=S.child;S!==null;){var M=S;ew(M),M.tag===5&&M.flags&1024&&(M=M.stateNode,JO=!0,M.reset(),JO=!1),S=S.sibling}}function Sf(S,M){if(M.subtreeFlags&9270)for(M=M.child;M!==null;)Kb(M,S),M=M.sibling;else MC(M,!1)}function Kb(S,M){var R=S.alternate;if(R===null)f_(S,!1);else switch(S.tag){case 3:if(xPe=Sv=!1,sg(),Sf(M,S),!Sv&&!Tae){if(S=Iv,S!==null)for(var G=0;G<S.length;G+=3){R=S[G];var te=S[G+1];D2(R,S[G+2]),R=R.ownerDocument.documentElement,R!==null&&R.animate({opacity:[0,0],pointerEvents:["none","none"]},{duration:0,fill:"forwards",pseudoElement:"::view-transition-group("+te+")"})}S=M.containerInfo,S=S.nodeType===9?S.documentElement:S.ownerDocument.documentElement,S!==null&&S.style.viewTransitionName===""&&(S.style.viewTransitionName="none",S.animate({opacity:[0,0],pointerEvents:["none","none"]},{duration:0,fill:"forwards",pseudoElement:"::view-transition-group(root)"}),S.animate({width:[0,0],height:[0,0]},{duration:0,fill:"forwards",pseudoElement:"::view-transition"})),xPe=!0}Iv=null;break;case 5:Sf(M,S);break;case 4:G=Sv,Sv=!1,Sf(M,S),Sv&&(Tae=!0),Sv=G;break;case 22:S.memoizedState===null&&(R.memoizedState!==null?f_(S,!1):Sf(M,S));break;case 30:G=Sv,te=sg(),Sv=!1,Sf(M,S),Sv&&(S.flags|=4);var re=S.memoizedProps,Se=S.stateNode;M=N0(re,Se),Se=N0(R.memoizedProps,Se);var Me=ym(re.default,re.update);Me==="none"?M=!1:(re=R.memoizedState,R.memoizedState=null,R=S.child,ty=0,M=BP(S,R,M,Se,Me,re,!0),ty!==(re===null?0:re.length)&&(S.flags|=32)),(S.flags&4)!==0&&M?($b(S,S.memoizedProps.onUpdate),Iv=te):te!==null&&(te.push.apply(te,Iv),Iv=te),Sv=(S.flags&32)!==0?!0:G;break;default:Sf(M,S)}}function cg(S,M){if(M.subtreeFlags&8772)for(M=M.child;M!==null;)bN(S,M.alternate,M),M=M.sibling}function JH(S,M){var R=Th(),G=og(),te=pf(),re=Al();switch(S.tag){case 0:case 11:case 14:case 15:fN(S,S.return,W2),Pf(S,M);break;case 1:rc(S,S.return);var Se=S.stateNode;typeof Se.componentWillUnmount==="function"&&YH(S,S.return,Se),Pf(S,M);break;case 27:(M&wae)!==Jj&&ye(S,ov,S.stateNode,S.type,S.memoizedProps);case 5:rc(S,S.return),S.tag!==5&&S.tag!==27||ru(S),Pf(S,M);break;case 6:ru(S);break;case 26:rc(S,S.return),Se=S.stateNode,S.memoizedState!==null||Se===null||Ol||Se.parentNode.removeChild(Se),Pf(S,M);break;case 22:S.memoizedState===null&&Pf(S,M);break;case 30:S.flags&18874368&&H4(S),rc(S,S.return),Pf(S,M);break;case 7:rc(S,S.return);default:Pf(S,M)}(S.mode&na)!==jr&&0<=gr&&0<=Hr&&(Hh||0.05<hh)&&Nu(S,gr,Hr,hh,Yu),xm(R),u_(G),Yu=te,Hh=re}function Pf(S,M){for(S=S.child;S!==null;)JH(S,M),S=S.sibling}function $H(S,M,R,G){var te=Th(),re=og(),Se=pf(),Me=Al(),$e=R.flags,dt=(G&fPe)!==Jj;switch(R.tag){case 0:case 11:case 15:gp(S,R,G),_l(R,W2);break;case 1:if(gp(S,R,G),M=R.stateNode,typeof M.componentDidMount==="function"&&ye(R,oPe,R,M),M=R.updateQueue,M!==null){S=R.stateNode;try{ye(R,v4,M,S)}catch(qt){sc(R,R.return,qt)}}dt&&$e&64&&g_(R),tl(R,R.return);break;case 27:(G&wae)!==Jj&&Ub(R);case 5:R.tag!==5&&R.tag!==27||yN(R),gp(S,R,G),dt&&M===null&&$e&4&&CN(R),tl(R,R.return);break;case 6:yN(R);break;case 26:var Bt=R.stateNode;R.memoizedState!==null||Bt===null||xA||St(p5(Bt.ownerDocument),R.type,Bt),gp(S,R,G),dt&&M===null&&$e&4&&CN(R),tl(R,R.return);break;case 12:if(dt&&$e&4){$e=ng(),gp(S,R,G),dt=R.stateNode,dt.effectDuration+=d_($e);try{ye(R,Qu,R,M,hM,dt.effectDuration)}catch(qt){sc(R,R.return,qt)}}else gp(S,R,G);break;case 31:gp(S,R,G),dt&&$e&4&&jH(S,R);break;case 13:gp(S,R,G),dt&&$e&4&&qH(S,R);break;case 22:R.memoizedState===null&&gp(S,R,G),tl(R,R.return);break;case 30:gp(S,R,G),$e&18874368&&WH(R),tl(R,R.return);break;case 7:tl(R,R.return);default:gp(S,R,G)}(R.mode&na)!==jr&&0<=gr&&0<=Hr&&(Hh||0.05<hh)&&Nu(R,gr,Hr,hh,Yu),xm(te),u_(re),Yu=Se,Hh=Me}function gp(S,M,R){R=(M.subtreeFlags&8772)!==0?R:R&~fPe;for(M=M.child;M!==null;)$H(S,M.alternate,M,R),M=M.sibling}function wP(S,M){var R=null;S!==null&&S.memoizedState!==null&&S.memoizedState.cachePool!==null&&(R=S.memoizedState.cachePool.pool),S=null,M.memoizedState!==null&&M.memoizedState.cachePool!==null&&(S=M.memoizedState.cachePool.pool),S!==R&&(S!=null&&C2(S),R!=null&&tg(R))}function TP(S,M){S=null,M.alternate!==null&&(S=M.alternate.memoizedState.cache),M=M.memoizedState.cache,M!==S&&(C2(M),S!=null&&tg(S))}function lg(S,M,R,G,te){var re=(R&335544064)===R;if(M.subtreeFlags&(re?10262:10256)||M.actualDuration!==0&&(M.alternate===null||M.alternate.child!==M.child))for(M=M.child;M!==null;)re=M.sibling,O4(S,M,R,G,re!==null?re.actualStartTime:te),M=re;else re&&UH(M)}function O4(S,M,R,G,te){var re=Th(),Se=og(),Me=pf(),$e=Al(),dt=Dw,Bt=(R&335544064)===R;Bt&&M.alternate===null&&M.return!==null&&M.return.alternate!==null&&gl(M);var qt=M.flags;switch(M.tag){case 0:case 11:case 15:(M.mode&na)!==jr&&0<M.actualStartTime&&(M.flags&1)!==0&&uf(M,M.actualStartTime,te,Sp,R),lg(S,M,R,G,te),qt&2048&&q9(M,Ig|oI);break;case 1:(M.mode&na)!==jr&&0<M.actualStartTime&&((M.flags&128)!==0?hf(M,M.actualStartTime,te,[]):(M.flags&1)!==0&&uf(M,M.actualStartTime,te,Sp,R)),lg(S,M,R,G,te);break;case 3:var Kt=ng(),un=Sp;Sp=M.alternate!==null&&M.alternate.memoizedState.isDehydrated&&(M.flags&256)===0,lg(S,M,R,G,te),Sp=un,Bt&&xPe&&(R=S.containerInfo,R=R.nodeType===9?R.body:R.nodeName==="HTML"?R.ownerDocument.body:R,R.style.viewTransitionName==="root"&&(R.style.viewTransitionName=""),R=R.ownerDocument.documentElement,R!==null&&R.style.viewTransitionName==="none"&&(R.style.viewTransitionName="")),qt&2048&&(R=null,M.alternate!==null&&(R=M.alternate.memoizedState.cache),G=M.memoizedState.cache,G!==R&&(C2(G),R!=null&&tg(R))),S.passiveEffectDuration+=g4(Kt);break;case 12:if(qt&2048){qt=ng(),lg(S,M,R,G,te),S=M.stateNode,S.passiveEffectDuration+=d_(qt);try{ye(M,_p,M,M.alternate,hM,S.passiveEffectDuration)}catch(ho){sc(M,M.return,ho)}}else lg(S,M,R,G,te);break;case 31:qt=Sp,Kt=M.alternate!==null?M.alternate.memoizedState:null,Bt=M.memoizedState,Kt!==null&&Bt===null?(Bt=M.deletions,Bt!==null&&0<Bt.length&&Bt[0].tag===18?(Sp=!1,Kt=Kt.hydrationErrors,Kt!==null&&hf(M,M.actualStartTime,te,Kt)):Sp=!0):Sp=!1,lg(S,M,R,G,te),Sp=qt;break;case 13:qt=Sp,Kt=M.alternate!==null?M.alternate.memoizedState:null,Bt=M.memoizedState,Kt===null||Kt.dehydrated===null||Bt!==null&&Bt.dehydrated!==null?Sp=!1:(Bt=M.deletions,Bt!==null&&0<Bt.length&&Bt[0].tag===18?(Sp=!1,Kt=Kt.hydrationErrors,Kt!==null&&hf(M,M.actualStartTime,te,Kt)):Sp=!0),lg(S,M,R,G,te),Sp=qt;break;case 23:break;case 22:un=M.stateNode,Kt=M.alternate,M.memoizedState!==null?(Bt&&Kt!==null&&Kt.memoizedState===null&&gl(Kt),un._visibility&cM?lg(S,M,R,G,te):TC(S,M,R,G,te)):(Bt&&Kt!==null&&Kt.memoizedState!==null&&gl(M),un._visibility&cM?lg(S,M,R,G,te):(un._visibility|=cM,DP(S,M,R,G,(M.subtreeFlags&10256)!==0||M.actualDuration!==0&&(M.alternate===null||M.alternate.child!==M.child),te),(M.mode&na)===jr||Sp||(S=M.actualStartTime,0<=S&&0.05<te-S&&dC(M,S,te),0<=gr&&0<=Hr&&0.05<Hr-gr&&dC(M,gr,Hr)))),qt&2048&&wP(Kt,M);break;case 24:lg(S,M,R,G,te),qt&2048&&TP(M.alternate,M);break;case 30:Bt&&(qt=M.alternate,qt!==null&&(md(qt.child,!0),md(M.child,!0))),lg(S,M,R,G,te);break;default:lg(S,M,R,G,te)}if((M.mode&na)!==jr){if(S=!Sp&&M.alternate===null&&M.return!==null&&M.return.alternate!==null)R=M.actualStartTime,0<=R&&0.05<te-R&&a_(M,R,te,"Mount");0<=gr&&0<=Hr&&((Hh||0.05<hh)&&Nu(M,gr,Hr,hh,Yu),S&&0.05<Hr-gr&&a_(M,gr,Hr,"Mount"))}xm(re),u_(Se),Yu=Me,Hh=$e,Dw=dt}function DP(S,M,R,G,te,re){te=te&&((M.subtreeFlags&10256)!==0||M.actualDuration!==0&&(M.alternate===null||M.alternate.child!==M.child));for(M=M.child;M!==null;){var Se=M.sibling;EN(S,M,R,G,te,Se!==null?Se.actualStartTime:re),M=Se}}function EN(S,M,R,G,te,re){var Se=Th(),Me=og(),$e=pf(),dt=Al(),Bt=Dw;te&&(M.mode&na)!==jr&&0<M.actualStartTime&&(M.flags&1)!==0&&uf(M,M.actualStartTime,re,Sp,R);var qt=M.flags;switch(M.tag){case 0:case 11:case 15:DP(S,M,R,G,te,re),q9(M,Ig);break;case 23:break;case 22:var Kt=M.stateNode;M.memoizedState!==null?Kt._visibility&cM?DP(S,M,R,G,te,re):TC(S,M,R,G,re):(Kt._visibility|=cM,DP(S,M,R,G,te,re)),te&&qt&2048&&wP(M.alternate,M);break;case 24:DP(S,M,R,G,te,re),te&&qt&2048&&TP(M.alternate,M);break;default:DP(S,M,R,G,te,re)}(M.mode&na)!==jr&&0<=gr&&0<=Hr&&(Hh||0.05<hh)&&Nu(M,gr,Hr,hh,Yu),xm(Se),u_(Me),Yu=$e,Hh=dt,Dw=Bt}function TC(S,M,R,G,te){if(M.subtreeFlags&10256||M.actualDuration!==0&&(M.alternate===null||M.alternate.child!==M.child))for(var re=M.child;re!==null;){M=re.sibling;var Se=S,Me=R,$e=G,dt=M!==null?M.actualStartTime:te,Bt=Dw;(re.mode&na)!==jr&&0<re.actualStartTime&&(re.flags&1)!==0&&uf(re,re.actualStartTime,dt,Sp,Me);var qt=re.flags;switch(re.tag){case 22:TC(Se,re,Me,$e,dt),qt&2048&&wP(re.alternate,re);break;case 24:TC(Se,re,Me,$e,dt),qt&2048&&TP(re.alternate,re);break;default:TC(Se,re,Me,$e,dt)}Dw=Bt,re=M}}function jb(S,M,R){if(S.subtreeFlags&AR)for(S=S.child;S!==null;)tw(S,M,R),S=S.sibling}function tw(S,M,R){switch(S.tag){case 26:jb(S,M,R),S.flags&AR&&(S.memoizedState!==null?Ci(R,T5,S.memoizedState,S.memoizedProps):(S=S.stateNode,(M&335544128)===M&&Uo(R,S)));break;case 5:jb(S,M,R),S.flags&AR&&(S=S.stateNode,(M&335544128)===M&&Uo(R,S));break;case 3:case 4:var G=T5;T5=p5(S.stateNode.containerInfo),jb(S,M,R),T5=G;break;case 22:S.memoizedState===null&&(G=S.alternate,G!==null&&G.memoizedState!==null?(G=AR,AR=16777216,jb(S,M,R),AR=G):jb(S,M,R));break;case 30:if((S.flags&AR)!==0&&(G=S.memoizedProps.name,G!=null&&G!=="auto")){var te=S.stateNode;te.paired=null,X2===null&&(X2=new Map),X2.set(G,te)}jb(S,M,R);break;default:jb(S,M,R)}}function z4(S){var M=S.alternate;if(M!==null&&(S=M.child,S!==null)){M.child=null;do M=S.sibling,S.sibling=null,S=M;while(S!==null)}}function G4(S){var M=S.deletions;if((S.flags&16)!==0){if(M!==null)for(var R=0;R<M.length;R++){var G=M[R],te=Th();CA=G,ow(G,S),(G.mode&na)!==jr&&0<=gr&&0<=Hr&&0.05<Hr-gr&&a_(G,gr,Hr,"Unmount"),xm(te)}z4(S)}if(S.subtreeFlags&10256)for(S=S.child;S!==null;)nw(S),S=S.sibling}function nw(S){var M=Th(),R=og(),G=pf(),te=Al();switch(S.tag){case 0:case 11:case 15:G4(S),S.flags&2048&&rg(S,S.return,Ig|oI);break;case 3:var re=ng();G4(S),S.stateNode.passiveEffectDuration+=g4(re);break;case 12:re=ng(),G4(S),S.stateNode.passiveEffectDuration+=d_(re);break;case 22:re=S.stateNode,S.memoizedState!==null&&re._visibility&cM&&(S.return===null||S.return.tag!==13)?(re._visibility&=~cM,NP(S),(S.mode&na)!==jr&&0<=gr&&0<=Hr&&0.05<Hr-gr&&a_(S,gr,Hr,"Disconnect")):G4(S);break;default:G4(S)}(S.mode&na)!==jr&&0<=gr&&0<=Hr&&(Hh||0.05<hh)&&Nu(S,gr,Hr,hh,Yu),xm(M),u_(R),Hh=te,Yu=G}function NP(S){var M=S.deletions;if((S.flags&16)!==0){if(M!==null)for(var R=0;R<M.length;R++){var G=M[R],te=Th();CA=G,ow(G,S),(G.mode&na)!==jr&&0<=gr&&0<=Hr&&0.05<Hr-gr&&a_(G,gr,Hr,"Unmount"),xm(te)}z4(S)}for(S=S.child;S!==null;)MN(S),S=S.sibling}function MN(S){var M=Th(),R=og(),G=pf(),te=Al();switch(S.tag){case 0:case 11:case 15:rg(S,S.return,Ig),NP(S);break;case 22:var re=S.stateNode;re._visibility&cM&&(re._visibility&=~cM,NP(S));break;default:NP(S)}(S.mode&na)!==jr&&0<=gr&&0<=Hr&&(Hh||0.05<hh)&&Nu(S,gr,Hr,hh,Yu),xm(M),u_(R),Hh=te,Yu=G}function ow(S,M){for(;CA!==null;){var R=CA,G=R,te=M,re=Th(),Se=og(),Me=pf(),$e=Al();switch(G.tag){case 0:case 11:case 15:rg(G,te,Ig);break;case 23:case 22:G.memoizedState!==null&&G.memoizedState.cachePool!==null&&(te=G.memoizedState.cachePool.pool,te!=null&&C2(te));break;case 24:tg(G.memoizedState.cache)}if((G.mode&na)!==jr&&0<=gr&&0<=Hr&&(Hh||0.05<hh)&&Nu(G,gr,Hr,hh,Yu),xm(re),u_(Se),Hh=$e,Yu=Me,G=R.child,G!==null)G.return=R,CA=G;else e:for(R=S;CA!==null;){if(G=CA,re=G.sibling,Se=G.return,KH(G),G===R){CA=null;break e}if(re!==null){re.return=Se,CA=re;break e}CA=Se}}}function qb(){$Nn.forEach(function(S){return S()})}function Jb(){var S=typeof IS_REACT_ACT_ENVIRONMENT<"u"?IS_REACT_ACT_ENVIRONMENT:void 0;return S||Dn.actQueue===null||console.error("The current testing environment is not configured to support act(...)"),S}function L0(S){if((fc&Pp)!==IA&&ks!==0)return ks&-ks;var M=Dn.T;if(M!==null)return M._updatedFibers||(M._updatedFibers=new Set),M._updatedFibers.add(S),uR!==null&&Mt()===X0&&(uR=null),E2();return S=Mt(),S===X0&&(uR=null),S}function iw(){if(iy===0)if((ks&536870912)===0||oa){var S=_v;_v<<=1,(_v&3932160)===0&&(_v=262144),iy=S}else iy=536870912;return S=v_.current,S!==null&&(S.flags|=32),iy}function $b(S,M){if(M!=null){var R=S.stateNode,G=R.ref;G===null&&(G=R.ref=uA(N0(S.memoizedProps,R))),GO===null&&(GO=[]),GO.push(M.bind(null,G))}}function Ld(S,M,R){if(VO&&console.error("useInsertionEffect must not schedule updates."),wPe&&(Vae=!0),S===_d&&(zl===gR||zl===fR)||S.cancelPendingCommit!==null)RP(S,0),W1(S,ks,iy,!1);if(Je(S,R),(fc&Pp)!==IA&&S===_d){if(Y2)switch(M.tag){case 0:case 11:case 15:S=ha&&V(ha)||"Unknown",Ott.has(S)||(Ott.add(S),M=V(M)||"Unknown",console.error("Cannot update a component (`%s`) while rendering a different component (`%s`). To locate the bad setState() call inside `%s`, follow the stack trace as described in https://react.dev/link/setstate-in-render",M,S,S));break;case 1:Htt||(console.error("Cannot update during an existing state transition (such as within `render`). Render methods should be a pure function of props and state."),Htt=!0)}}else yg&&qe(S,M,R),OP(M),S===_d&&((fc&Pp)===IA&&(Uw|=R),mh===Yw&&W1(S,ks,iy,!1)),mg(S)}function ZH(S,M,R){if((fc&(Pp|K2))!==IA)throw Error("Should not already be working.");if(ks!==0&&ha!==null){var G=ha,te=Qr();switch(Net){case nq:case gR:var re=Lj;hu&&((G=G._debugTask)?G.run(console.timeStamp.bind(console,"Suspended",re,te,Z1,void 0,"primary-light")):console.timeStamp("Suspended",re,te,Z1,void 0,"primary-light"));break;case fR:re=Lj,hu&&((G=G._debugTask)?G.run(console.timeStamp.bind(console,"Action",re,te,Z1,void 0,"primary-light")):console.timeStamp("Action",re,te,Z1,void 0,"primary-light"));break;default:hu&&(G=te-Lj,3>G||console.timeStamp("Blocked",Lj,te,Z1,void 0,5>G?"primary-light":10>G?"primary":100>G?"primary-dark":"error"))}}re=(R=!R&&(M&127)===0&&(M&S.expiredLanes)===0||Ht(S,M))?DN(S,M):TN(S,M,!0);var Se=R;do{if(re===gM){OO&&!R&&W1(S,M,0,!1),M=zl,Lj=K0(),Net=M;break}else{if(G=Qr(),te=S.current.alternate,Se&&!eO(te)){pl(M),te=yA,re=G,!hu||re<=te||(Oh?Oh.run(console.timeStamp.bind(console,"Teared Render",te,re,Ba,Ca,"error")):console.timeStamp("Teared Render",te,re,Ba,Ca,"error")),DC(M,G),re=TN(S,M,!1),Se=!1;continue}if(re===_R){if(Se=M,S.errorRecoveryDisabledLanes&Se)var Me=0;else Me=S.pendingLanes&-536870913,Me=Me!==0?Me:Me&536870912?536870912:0;if(Me!==0){pl(M),m4(yA,G,M,Oh),DC(M,G),M=Me;e:{G=S,re=Se,Se=iq;var $e=G.current.memoizedState.isDehydrated;if($e&&(RP(G,Me).flags|=256),Me=TN(G,Me,!1),Me!==_R&&Me!==tq){if(bPe&&!$e){G.errorRecoveryDisabledLanes|=re,Uw|=re,re=Yw;break e}G=Hf,Hf=Se,G!==null&&(Hf===null?Hf=G:Hf.push.apply(Hf,G))}re=Me}if(Se=!1,re!==_R)continue;else G=Qr()}}if(re===eq){pl(M),m4(yA,G,M,Oh),DC(M,G),RP(S,0),W1(S,M,0,!0);break}e:{switch(R=S,re){case gM:case eq:throw Error("Root did not complete. This is a bug in React.");case Yw:if((M&4194048)!==M&&(M&62914560)!==M)break;case tq:pl(M),h4(yA,G,M,Oh),DC(M,G),te=M,(te&127)!==0?Aae=G:(te&4194048)!==0&&(_ae=G),W1(R,M,iy,!fM);break e;case _R:Hf=null;break;case Dae:case Btt:break;default:throw Error("Unknown root exit status.")}if(Dn.actQueue!==null)X1(R,te,M,Hf,rq,kae,iy,Uw,yR,fM,re,null,null,yA,G);else{if((M&62914560)===M&&(Se=Lae+Dtt-Qr(),10<Se)){if(W1(R,M,iy,!fM),vt(R,0,!0)!==0)break e;ry=M,R.timeoutHandle=zPe(dg.bind(null,R,te,Hf,rq,kae,M,iy,Uw,yR,fM,re,"Throttled",yA,G),Se);break e}dg(R,te,Hf,rq,kae,M,iy,Uw,yR,fM,re,null,yA,G)}}}break}while(1);mg(S)}function dg(S,M,R,G,te,re,Se,Me,$e,dt,Bt,qt,Kt,un){S.timeoutHandle=PR;var ho=M.subtreeFlags,ui=(re&335544064)===re,Zi=null;if(ui||ho&8192||(ho&16785408)===16785408){if(Zi={stylesheets:null,count:0,imgCount:0,imgBytes:0,suspenseyImages:[],waitingForImages:!0,waitingForViewTransition:!1,unsuspend:Dd},X2=null,tw(M,re,Zi),ui&&(ho=Zi,ui=S.containerInfo,ui=(ui.nodeType===9?ui:ui.ownerDocument).__reactViewTransition,ui!=null&&(ho.count++,ho.waitingForViewTransition=!0,ho=Ei.bind(ho),ui.finished.then(ho,ho))),ho=(re&62914560)===re?Lae-Qr():(re&4194048)===re?Ttt-Qr():0,ho=Sr(Zi,ho),ho!==null){ry=re,S.cancelPendingCommit=ho(X1.bind(null,S,M,re,R,G,te,Se,Me,$e,dt,Bt,Zi,Zi.waitingForViewTransition?"Waiting for the previous Animation":0<Zi.count?0<Zi.imgCount?"Suspended on CSS and Images":"Suspended on CSS":Zi.imgCount===1?"Suspended on an Image":0<Zi.imgCount?"Suspended on Images":null,Kt,un)),W1(S,re,Se,!dt);return}}X1(S,M,re,R,G,te,Se,Me,$e,dt,Bt,Zi,qt,Kt,un)}function eO(S){for(var M=S;;){var R=M.tag;if((R===0||R===11||R===15)&&M.flags&16384&&(R=M.updateQueue,R!==null&&(R=R.stores,R!==null)))for(var G=0;G<R.length;G++){var te=R[G],re=te.getSnapshot;te=te.value;try{if(!kf(re(),te))return!1}catch(Se){return!1}}if(R=M.child,M.subtreeFlags&16384&&R!==null)R.return=M,M=R;else{if(M===S)break;for(;M.sibling===null;){if(M.return===null||M.return===S)return!0;M=M.return}M.sibling.return=M.return,M=M.sibling}}return!0}function W1(S,M,R,G){M=Xt(S,M),M&=~Qae,M&=~Uw,S.suspendedLanes|=M,S.pingedLanes&=~M,G&&(S.warmLanes|=M),G=S.expirationTimes;for(var te=M;0<te;){var re=31-yl(te),Se=1<<re;G[re]=-1,te&=~Se}R!==0&&Ye(S,R,M)}function Zb(){return(fc&(Pp|K2))===IA?(zP(0,!1),!1):!0}function rw(){if(ha!==null){if(zl===oy)var S=ha.return;else S=ha,hC(),p_(S),DO=null,Wj=0,S=ha;for(;S!==null;)Gb(S.alternate,S),S=S.return;ha=null}}function DC(S,M){(S&127)!==0&&(kw=M),(S&4194048)!==0&&(M5=M),(S&62914560)!==0&&(ZSe=M),(S&2080374784)!==0&&(ePe=M)}function RP(S,M){hu&&(console.timeStamp("Blocking Track",0.003,0.003,"Blocking",Ca,"primary-light"),console.timeStamp("Transition Track",0.003,0.003,"Transition",Ca,"primary-light"),console.timeStamp("Suspense Track",0.003,0.003,"Suspense",Ca,"primary-light"),console.timeStamp("Idle Track",0.003,0.003,"Idle",Ca,"primary-light"));var R=yA;if(yA=K0(),ks!==0&&0<R){if(pl(ks),mh===Dae||mh===Yw)h4(R,yA,M,Oh);else{var G=yA,te=Oh;if(hu&&!(G<=R)){var re=(M&738197653)===M?"tertiary-dark":"primary-dark",Se=(M&536870912)===M?"Prewarm":(M&201326741)===M?"Interrupted Hydration":"Interrupted Render";te?te.run(console.timeStamp.bind(console,Se,R,G,Ba,Ca,re)):console.timeStamp(Se,R,G,Ba,Ca,re)}}DC(ks,yA)}if(R=Oh,Oh=null,(M&127)!==0){Oh=Rj,te=0<=yv&&yv<kw?kw:yv,G=0<=sR&&sR<kw?kw:sR,re=0<=G?G:0<=te?te:yA,0<=Aae?(pl(2),p2(Aae,re,M,R)):(cR&127)!==0&&(pl(2),It(kw,re,ey)),R=te;var Me=G,$e=Qj,dt=0<BO,Bt=Lw===Nj,qt=Lw===pae;if(te=yA,G=Rj,re=qSe,Se=JSe,hu){if(Ba="Blocking",0<R?R>te&&(R=te):R=te,0<Me?Me>R&&(Me=R):Me=R,$e!==null&&R>Me){var Kt=dt?"secondary-light":"warning";G?G.run(console.timeStamp.bind(console,dt?"Consecutive":"Event: "+$e,Me,R,Ba,Ca,Kt)):console.timeStamp(dt?"Consecutive":"Event: "+$e,Me,R,Ba,Ca,Kt)}te>R&&(Me=Bt?"error":(M&738197653)===M?"tertiary-light":"primary-light",Bt=qt?"Promise Resolved":Bt?"Cascading Update":5<te-R?"Update Blocked":"Update",qt=[],Se!=null&&qt.push(["Component name",Se]),re!=null&&qt.push(["Method name",re]),R={start:R,end:te,detail:{devtools:{properties:qt,track:Ba,trackGroup:Ca,color:Me}}},G?G.run(performance.measure.bind(performance,Bt,R)):performance.measure(Bt,R),performance.clearMeasures(Bt))}yv=-1.1,Lw=0,JSe=qSe=null,Aae=-1.1,BO=sR,sR=-1.1,kw=K0()}return(M&4194048)!==0&&(Oh=kj,te=0<=pM&&pM<M5?M5:pM,R=0<=nI&&nI<M5?M5:nI,G=0<=Fw&&Fw<M5?M5:Fw,re=0<=G?G:0<=R?R:yA,0<=_ae?(pl(256),p2(_ae,re,M,Oh)):(cR&4194048)!==0&&(pl(256),It(M5,re,ey)),qt=G,Me=aR,$e=0<Hw,dt=$Se===pae,re=yA,G=kj,Se=Tet,Bt=Det,hu&&(Ba="Transition",0<R?R>re&&(R=re):R=re,0<te?te>R&&(te=R):te=R,0<qt?qt>te&&(qt=te):qt=te,te>qt&&Me!==null&&(Kt=$e?"secondary-light":"warning",G?G.run(console.timeStamp.bind(console,$e?"Consecutive":"Event: "+Me,qt,te,Ba,Ca,Kt)):console.timeStamp($e?"Consecutive":"Event: "+Me,qt,te,Ba,Ca,Kt)),R>te&&(G?G.run(console.timeStamp.bind(console,"Action",te,R,Ba,Ca,"primary-dark")):console.timeStamp("Action",te,R,Ba,Ca,"primary-dark")),re>R&&(te=dt?"Promise Resolved":5<re-R?"Update Blocked":"Update",qt=[],Bt!=null&&qt.push(["Component name",Bt]),Se!=null&&qt.push(["Method name",Se]),R={start:R,end:re,detail:{devtools:{properties:qt,track:Ba,trackGroup:Ca,color:"primary-light"}}},G?G.run(performance.measure.bind(performance,te,R)):performance.measure(te,R),performance.clearMeasures(te))),nI=pM=-1.1,$Se=0,_ae=-1.1,Hw=Fw,Fw=-1.1,M5=K0()),(M&62914560)!==0&&(cR&62914560)!==0&&(pl(4194304),It(ZSe,yA,ey)),(M&2080374784)!==0&&(cR&2080374784)!==0&&(pl(268435456),It(ePe,yA,ey)),R=S.timeoutHandle,R!==PR&&(S.timeoutHandle=PR,uRn(R)),R=S.cancelPendingCommit,R!==null&&(S.cancelPendingCommit=null,R()),ry=0,rw(),_d=S,ha=R=Qa(S.current,null),ks=M,zl=oy,j2=null,fM=!1,OO=Ht(S,M),bPe=!1,mh=gM,yR=iy=Qae=Uw=Vw=0,Hf=iq=null,kae=!1,Pv=Xt(S,M),Wt(),S=bet(),1000<S-Iet&&(Dn.recentlyCreatedOwnerStacks=0,Iet=S),B5.discardPendingWarnings(),R}function BN(S,M){es=null,Dn.H=vae,Dn.getCurrentStack=null,Y2=!1,bp=null,M===TO||M===xae?(M=c9(),zl=nq):M===iPe?(M=c9(),zl=wtt):zl=M===APe?IPe:M!==null&&typeof M==="object"&&typeof M.then==="function"?oq:Nae,j2=M;var R=ha;R===null?(mh=eq,bP(S,Vr(M,S.current))):R.mode&na&&s9(R)}function wN(){var S=v_.current;return S===null?!0:(ks&4194048)===ks?Cg===null?!0:!1:(ks&62914560)===ks||(ks&536870912)!==0?S===Cg:!1}function tO(){var S=Dn.H;return Dn.H=vae,S===null?vae:S}function nO(){var S=Dn.A;return Dn.A=JNn,S}function sw(S){Oh===null&&(Oh=S._debugTask==null?null:S._debugTask)}function Y4(){mh=Yw,fM||(ks&4194048)!==ks&&v_.current!==null||(OO=!0),(Vw&134217727)===0&&(Uw&134217727)===0||_d===null||W1(_d,ks,iy,!1)}function TN(S,M,R){var G=fc;fc|=Pp;var te=tO(),re=nO();if(_d!==S||ks!==M){if(yg){var Se=S.memoizedUpdaters;0<Se.size&&(K1(S,ks),Se.clear()),rt(S,M)}rq=null,RP(S,M)}M=!1,Se=mh;e:do try{if(zl!==oy&&ha!==null){var Me=ha,$e=j2;switch(zl){case IPe:rw(),Se=tq;break e;case nq:case gR:case fR:case oq:v_.current===null&&(M=!0);var dt=zl;if(zl=oy,j2=null,NC(S,Me,$e,dt),R&&OO){Se=gM;break e}break;default:dt=zl,zl=oy,j2=null,NC(S,Me,$e,dt)}}ku(),Se=mh;break}catch(Bt){BN(S,Bt)}while(1);return M&&S.shellSuspendCounter++,hC(),fc=G,Dn.H=te,Dn.A=re,ha===null&&(_d=null,ks=0,Wt()),Se}function ku(){for(;ha!==null;)NN(ha)}function DN(S,M){var R=fc;fc|=Pp;var G=tO(),te=nO();if(_d!==S||ks!==M){if(yg){var re=S.memoizedUpdaters;0<re.size&&(K1(S,ks),re.clear()),rt(S,M)}rq=null,Fae=Qr()+Ntt,RP(S,M)}else OO=Ht(S,M);e:do try{if(zl!==oy&&ha!==null)t:switch(M=ha,re=j2,zl){case Nae:zl=oy,j2=null,NC(S,M,re,Nae);break;case gR:case fR:if(a9(re)){zl=oy,j2=null,RN(M);break}M=function(){zl!==gR&&zl!==fR||_d!==S||(zl=Rae),mg(S)},re.then(M,M);break e;case nq:zl=Rae;break e;case wtt:zl=CPe;break e;case Rae:a9(re)?(zl=oy,j2=null,RN(M)):(zl=oy,j2=null,NC(S,M,re,Rae));break;case CPe:var Se=null;switch(ha.tag){case 26:Se=ha.memoizedState;case 5:case 27:var Me=ha;if(Se?Xn(Se):Me.stateNode.complete){zl=oy,j2=null;var $e=Me.sibling;if($e!==null)ha=$e;else{var dt=Me.return;dt!==null?(ha=dt,QP(dt)):ha=null}break t}break;default:console.error("Unexpected type of fiber triggered a suspensey commit. This is a bug in React.")}zl=oy,j2=null,NC(S,M,re,CPe);break;case oq:zl=oy,j2=null,NC(S,M,re,oq);break;case IPe:rw(),mh=tq;break e;default:throw Error("Unexpected SuspendedReason. This is a bug in React.")}Dn.actQueue!==null?ku():aj();break}catch(Bt){BN(S,Bt)}while(1);if(hC(),Dn.H=G,Dn.A=te,fc=R,ha!==null)return gM;return _d=null,ks=0,Wt(),mh}function aj(){for(;ha!==null&&!mj();)NN(ha)}function NN(S){var M=S.alternate;(S.mode&na)!==jr?(f4(S),M=ye(S,t0,M,S,Pv),s9(S)):M=ye(S,t0,M,S,Pv),S.memoizedProps=S.pendingProps,M===null?QP(S):ha=M}function RN(S){var M=ye(S,e5,S);S.memoizedProps=S.pendingProps,M===null?QP(S):ha=M}function e5(S){var M=S.alternate,R=(S.mode&na)!==jr;switch(R&&f4(S),S.tag){case 15:case 0:M=X9(M,S,S.pendingProps,S.type,void 0,ks);break;case 11:M=X9(M,S,S.pendingProps,S.type.render,S.ref,ks);break;case 5:p_(S);var G=S;G===fA&&(oa?(aP(G),G.tag===5&&G.stateNode!=null&&(Hd=G.stateNode)):(aP(G),oa=!0));default:Gb(M,S),S=ha=e0(S,Pv),M=t0(M,S,Pv)}return R&&s9(S),M}function NC(S,M,R,G){hC(),p_(M),DO=null,Wj=0;var te=M.return;try{if(G1(S,te,M,R,ks)){mh=eq,bP(S,Vr(R,S.current)),ha=null;return}}catch(re){if(te!==null)throw ha=te,re;mh=eq,bP(S,Vr(R,S.current)),ha=null;return}if(M.flags&32768){if(oa||G===Nae)S=!0;else if(OO||(ks&536870912)!==0)S=!1;else if(fM=S=!0,G===gR||G===fR||G===nq||G===oq)G=v_.current,G!==null&&G.tag===13&&(G.flags|=16384);vf(M,S)}else QP(M)}function QP(S){var M=S;do{if((M.flags&32768)!==0){vf(M,fM);return}var R=M.alternate;if(S=M.return,f4(M),R=ye(M,rj,R,M,Pv),(M.mode&na)!==jr&&oN(M),R!==null){ha=R;return}if(M=M.sibling,M!==null){ha=M;return}ha=M=S}while(M!==null);mh===gM&&(mh=Btt)}function vf(S,M){do{var R=zH(S.alternate,S);if(R!==null){R.flags&=32767,ha=R;return}if((S.mode&na)!==jr){oN(S),R=S.actualDuration;for(var G=S.child;G!==null;)R+=G.actualDuration,G=G.sibling;S.actualDuration=R}if(R=S.return,R!==null&&(R.flags|=32768,R.subtreeFlags=0,R.deletions=null),!M&&(S=S.sibling,S!==null)){ha=S;return}ha=S=R}while(S!==null);mh=tq,ha=null}function X1(S,M,R,G,te,re,Se,Me,$e,dt,Bt,qt,Kt,un,ho){S.cancelPendingCommit=null;do Mf();while(ph!==vv);if(B5.flushLegacyContextWarning(),B5.flushPendingUnsafeLifecycleWarnings(),(fc&(Pp|K2))!==IA)throw Error("Should not already be working.");if(pl(R),Bt===_R)m4(un,ho,R,Oh);else if(G!==null){if(dt=M!==null&&M.alternate!==null&&M.alternate.memoizedState.isDehydrated&&(M.flags&256)!==0,re=Oh,hu&&!(ho<=un)){Bt=[];for(var ui=0;ui<G.length;ui++){var Zi=G[ui].value;Bt.push(["Recoverable Error",typeof Zi==="object"&&Zi!==null&&typeof Zi.message==="string"?String(Zi.message):String(Zi)])}un={start:un,end:ho,detail:{devtools:{color:"primary-dark",track:Ba,trackGroup:Ca,tooltipText:dt?"Hydration Failed":"Recovered after Error",properties:Bt}}},re?re.run(performance.measure.bind(performance,"Recovered",un)):performance.measure("Recovered",un),performance.clearMeasures("Recovered")}}else re=Oh,!hu||ho<=un||(dt=(R&738197653)===R?"tertiary-dark":"primary-dark",Bt=(R&536870912)===R?"Prepared":(R&201326741)===R?"Hydrated":"Render",re?re.run(console.timeStamp.bind(console,Bt,un,ho,Ba,Ca,dt)):console.timeStamp(Bt,un,ho,Ba,Ca,dt));if(M!==null){if(R===0&&console.error("finishedLanes should not be empty during a commit. This is a bug in React."),M===S.current)throw Error("Cannot commit the same tree as before. This error is likely caused by a bug in React. Please file an issue.");S===_d&&(ha=_d=null,ks=0),xR=M,D5=S,ry=R,MPe=te,Ltt=G,zae=ho,Gae=Kt,q2=Hae,BPe=null,Sm(S,M,R,Se,Me,$e,qt,Kt,ho)}}function Sm(S,M,R,G,te,re,Se,Me,$e){var dt=M.lanes|M.childLanes;if(EPe=dt,dt|=USe,Ve(S,R,dt,G,te,re),GO=null,(R&335544064)===R?(YO=uP(S),G=10262):(YO=null,G=10256),M.actualDuration!==0||(M.subtreeFlags&G)!==0||(M.flags&G)!==0?(S.callbackNode=null,S.callbackPriority=0,fp(hv,function(){return hq=window.event,q2===Hae&&(q2=SPe),aw(),null})):(S.callbackNode=null,S.callbackPriority=0),mM=null,hM=K0(),Me!==null&&A2($e,hM,Me,Oh),Mae=!1,Me=(M.flags&13878)!==0,(M.subtreeFlags&13878)!==0||Me){Me=Dn.T,Dn.T=null,$e=ac.p,ac.p=X0,G=fc,fc|=K2;try{U1(S,M,R)}finally{fc=G,ac.p=$e,Dn.T=Me}}ph=Qtt,Mae?(cR|=R,ey=null,zO=ev(Se,S.containerInfo,YO,kP,n5,Ef,LP,aw,QN,V4,t5.bind(null,R))):(kP(),n5(),LP())}function QN(S){if(ph!==vv){var M=D5.onRecoverableError;M(S,kN(null))}}function V4(S){E5=K0(),nt(Gae===null?zae:hM,E5,mM,q2===sq,Oh),Gae=BPe=S}function t5(S){if((cR&S)!==0){var M=ey;cR&=~S,ey=null,(S&4194048)!==0&&(ks&4194048)===0&&(ry&4194048)===0&&(pl(256),It(M5,Qr(),M)),(S&62914560)!==0&&(ks&62914560)===0&&(ry&62914560)===0&&(pl(4194304),It(ZSe,Qr(),M)),(S&2080374784)!==0&&(ks&2080374784)===0&&(ry&2080374784)===0&&(pl(268435456),It(ePe,Qr(),M))}}function Ef(){ph===PPe&&(ph=vv,Kb(xR,D5),ph=vPe)}function kP(){if(ph===Qtt){ph=vv;var S=D5,M=xR,R=ry,G=(M.flags&13878)!==0;if((M.subtreeFlags&13878)!==0||G){G=Dn.T,Dn.T=null;var te=ac.p;ac.p=X0;var re=fc;fc|=K2;try{FO=R,HO=S,$j=Tae=!1,bb(),wC(M,S,R),HO=FO=null,R=HPe;var Se=rP(S.containerInfo),Me=R.focusedElem,$e=R.selectionRange;if(Se!==Me&&Me&&Me.ownerDocument&&oc(Me.ownerDocument.documentElement,Me)){if($e!==null&&dp(Me)){var{start:dt,end:Bt}=$e;if(Bt===void 0&&(Bt=dt),"selectionStart"in Me)Me.selectionStart=dt,Me.selectionEnd=Math.min(Bt,Me.value.length);else{var qt=Me.ownerDocument||document,Kt=qt&&qt.defaultView||window;if(Kt.getSelection){var un=Kt.getSelection(),ho=Me.textContent.length,ui=Math.min($e.start,ho),Zi=$e.end===void 0?ui:Math.min($e.end,ho);!un.extend&&ui>Zi&&(Se=Zi,Zi=ui,ui=Se);var Xs=Du(Me,ui),Yt=Du(Me,Zi);if(Xs&&Yt&&(un.rangeCount!==1||un.anchorNode!==Xs.node||un.anchorOffset!==Xs.offset||un.focusNode!==Yt.node||un.focusOffset!==Yt.offset)){var Vt=qt.createRange();Vt.setStart(Xs.node,Xs.offset),un.removeAllRanges(),ui>Zi?(un.addRange(Vt),un.extend(Yt.node,Yt.offset)):(Vt.setEnd(Yt.node,Yt.offset),un.addRange(Vt))}}}}qt=[];for(un=Me;un=un.parentNode;)un.nodeType===1&&qt.push({element:un,left:un.scrollLeft,top:un.scrollTop});typeof Me.focus==="function"&&Me.focus();for(Me=0;Me<qt.length;Me++){var Jt=qt[Me];Jt.element.scrollLeft=Jt.left,Jt.element.scrollTop=Jt.top}}JO=!!FPe,HPe=FPe=null}finally{fc=re,ac.p=te,Dn.T=G}}S.current=M,ph=ktt}}function n5(){if(ph===ktt){ph=vv;var S=BPe;if(S!==null){hM=K0();var M=E5,R=hM;!hu||R<=M||(ey?ey.run(console.timeStamp.bind(console,S,M,R,Ba,Ca,"secondary-light")):console.timeStamp(S,M,R,Ba,Ca,"secondary-light"))}S=D5,M=xR,R=ry;var G=(M.flags&8772)!==0;if((M.subtreeFlags&8772)!==0||G){G=Dn.T,Dn.T=null;var te=ac.p;ac.p=X0;var re=fc;fc|=K2;try{FO=R,HO=S,bb(),bN(S,M.alternate,M),HO=FO=null}finally{fc=re,ac.p=te,Dn.T=G}}S=zae,M=Gae,E5=K0(),nt(M===null?S:hM,E5,mM,q2===sq,Oh),ph=PPe}}function LP(){if(ph===vPe||ph===PPe){if(ph===vPe){var S=E5;E5=K0();var M=E5,R=q2===sq;!hu||M<=S||(ey?ey.run(console.timeStamp.bind(console,R?"Interrupted View Transition":"Starting Animation",S,M,Ba,Ca,R?"error":"secondary-light")):console.timeStamp(R?"Interrupted View Transition":"Starting Animation",S,M,Ba,Ca,R?" error":"secondary-light")),q2!==sq&&(q2=Rtt)}ph=vv,S=zO,zO=null,iM(),M=D5;var G=xR;R=ry;var te=Ltt,re=(R&335544064)===R?10262:10256;(re=G.actualDuration!==0||(G.subtreeFlags&re)!==0||(G.flags&re)!==0)?ph=Oae:(ph=vv,xR=D5=null,x_(M,M.pendingLanes),CR=0,cq=null);var Se=M.pendingLanes;if(Se===0&&(Ww=null),re||HP(M),Se=Ct(R),G=G.stateNode,Fl&&typeof Fl.onCommitFiberRoot==="function")try{var Me=(G.current.flags&128)===128;switch(Se){case X0:var $e=KC;break;case Mm:$e=uv;break;case qC:$e=hv;break;case AO:$e=du;break;default:$e=hv}Fl.onCommitFiberRoot(Av,G,$e,Me)}catch(Kt){AA||(AA=!0,console.error("React instrumentation encountered an error: %o",Kt))}if(yg&&M.memoizedUpdaters.clear(),qb(),te!==null){Me=Dn.T,$e=ac.p,ac.p=X0,Dn.T=null;try{var dt=M.onRecoverableError;for(G=0;G<te.length;G++){var Bt=te[G],qt=kN(Bt.stack);ye(Bt.source,dt,Bt.value,qt)}}finally{Dn.T=Me,ac.p=$e}}if(dt=GO,Bt=YO,YO=null,dt!==null&&(GO=null,Bt===null&&(Bt=[]),S!==null))for(qt=0;qt<dt.length;qt++)te=(0,dt[qt])(Bt),te!==void 0&&S.finished.finally(te);(ry&3)!==0&&Mf(),mg(M),Se=M.pendingLanes,(R&261930)!==0&&(Se&42)!==0?(fae=!0,M===Yae?aq++:(aq=0,Yae=M)):(aq=0,Yae=null),re||DC(R,E5),zP(0,!1)}}function kN(S){return S={componentStack:S},Object.defineProperty(S,"digest",{get:function(){console.error('You are accessing "digest" from the errorInfo object passed to onRecoverableError. This property is no longer provided as part of errorInfo but can be accessed as a property of the Error instance itself.')}}),S}function x_(S,M){(S.pooledCacheLanes&=M)===0&&(M=S.pooledCache,M!=null&&(S.pooledCache=null,tg(M)))}function Mf(){return zO!==null&&(zO.skipTransition(),Ftt||(Ftt=!0,console.warn("A flushSync update cancelled a View Transition because it was called while the View Transition was still preparing. To preserve the synchronous semantics, React had to skip the View Transition. If you can, try to avoid flushSync() in a scenario that's likely to interfere.")),zO=null,q2=sq),kP(),n5(),LP(),aw()}function aw(){if(ph!==Oae)return!1;var S=D5,M=EPe;EPe=0;var R=Ct(ry),G=qC===0||qC>R?qC:R;R=Dn.T;var te=ac.p;try{ac.p=G,Dn.T=null;var re=MPe;MPe=null,G=D5;var Se=ry;if(ph=vv,xR=D5=null,ry=0,(fc&(Pp|K2))!==IA)throw Error("Cannot flush passive effects while already rendering.");pl(Se),wPe=!0,Vae=!1;var Me=0;if(mM=null,Me=Qr(),q2===Rtt)It(E5,Me,ey);else{var $e=E5,dt=Me,Bt=q2===SPe;!hu||dt<=$e||(Oh?Oh.run(console.timeStamp.bind(console,Bt?"Waiting for Paint":"Waiting",$e,dt,Ba,Ca,"secondary-light")):console.timeStamp(Bt?"Waiting for Paint":"Waiting",$e,dt,Ba,Ca,"secondary-light"))}$e=fc,fc|=K2;var qt=G.current;bb(),nw(qt);var Kt=G.current;qt=zae,bb(),O4(G,Kt,Se,re,qt),HP(G),fc=$e;var un=Qr();if(Kt=Me,qt=Oh,mM!==null?Ge(Kt,un,mM,!0,qt):!hu||un<=Kt||(qt?qt.run(console.timeStamp.bind(console,"Remaining Effects",Kt,un,Ba,Ca,"secondary-dark")):console.timeStamp("Remaining Effects",Kt,un,Ba,Ca,"secondary-dark")),DC(Se,un),zP(0,!1),Vae?G===cq?CR++:(CR=0,cq=G):CR=0,Vae=wPe=!1,Fl&&typeof Fl.onPostCommitFiberRoot==="function")try{Fl.onPostCommitFiberRoot(Av,G)}catch(ui){AA||(AA=!0,console.error("React instrumentation encountered an error: %o",ui))}var ho=G.current.stateNode;return ho.effectDuration=0,ho.passiveEffectDuration=0,!0}finally{ac.p=te,Dn.T=R,x_(S,M)}}function FP(S,M,R){M=Vr(R,M),iN(M),M=R4(S.stateNode,M,2),S=mC(S,M,2),S!==null&&(Je(S,2),mg(S))}function sc(S,M,R){if(VO=!1,S.tag===3)FP(S,S,R);else{for(;M!==null;){if(M.tag===3){FP(M,S,R);return}if(M.tag===1){var G=M.stateNode;if(typeof M.type.getDerivedStateFromError==="function"||typeof G.componentDidCatch==="function"&&(Ww===null||!Ww.has(G))){S=Vr(R,S),iN(S),R=Q4(2),G=mC(M,R,2),G!==null&&(SP(R,G,M,S),Je(G,2),mg(G));return}}M=M.return}console.error(`Internal React error: Attempted to capture a commit phase error inside a detached tree. This indicates a bug in React. Potential causes include deleting the same fiber more than once, committing an already-finished tree, or an inconsistent return pointer.
Error message:
%s`,R)}}function LN(S,M,R){var G=S.pingCache;if(G===null){G=S.pingCache=new ZNn;var te=new Set;G.set(M,te)}else te=G.get(M),te===void 0&&(te=new Set,G.set(M,te));te.has(R)||(bPe=!0,te.add(R),G=oO.bind(null,S,M,R),yg&&K1(S,R),M.then(G,G))}function oO(S,M,R){var G=S.pingCache;G!==null&&G.delete(M),S.pingedLanes|=S.suspendedLanes&R,S.warmLanes&=~R,(R&127)!==0?0>yv&&(kw=yv=K0(),Rj=mae("Promise Resolved"),Lw=pae):(R&4194048)!==0&&0>nI&&(M5=nI=K0(),kj=mae("Promise Resolved"),$Se=pae),Jb()&&Dn.actQueue===null&&console.error(`A suspended resource finished loading inside a test, but the event was not wrapped in act(...).
When testing, code that resolves suspended data should be wrapped into act(...):
act(() => {
/* finish loading suspended data */
});
/* assert on the output */
This ensures that you're testing the behavior the user would see in the browser. Learn more at https://react.dev/link/wrap-tests-with-act`),_d===S&&(ks&R)===R&&(mh===Yw||mh===Dae&&(ks&62914560)===ks&&Qr()-Lae<Dtt?(fc&Pp)===IA?RP(S,0):Qae|=R:Qae|=R,yR===ks&&(yR=0)),mg(S)}function RC(S,M){M===0&&(M=je()),S=Sn(S,M),S!==null&&(Je(S,M),mg(S))}function F0(S){var M=S.memoizedState,R=0;M!==null&&(R=M.retryLane),RC(S,R)}function ci(S,M){var R=0;switch(S.tag){case 31:case 13:var{stateNode:G,memoizedState:te}=S;te!==null&&(R=te.retryLane);break;case 19:G=S.stateNode;break;case 22:G=S.stateNode._retryCache;break;default:throw Error("Pinged unknown suspense boundary type. This is probably a bug in React.")}G!==null&&G.delete(M),RC(S,R)}function ug(S,M,R){if((M.subtreeFlags&134225920)!==0)for(M=M.child;M!==null;){var G=S,te=M,re=te.type===jN;re=R||re,te.tag!==22?te.flags&134217728?re&&ye(te,hg,G,te):ug(G,te,re):te.memoizedState===null&&(re&&te.flags&134225920?ye(te,hg,G,te):te.subtreeFlags&134217728&&ye(te,ug,G,te,re)),M=M.sibling}}function hg(S,M){gt(!0);try{JH(M,Jj),MN(M),$H(S,M.alternate,M,Jj),EN(S,M,0,null,!1,0)}finally{gt(!1)}}function HP(S){var M=!0;S.current.mode&(xg|v5)||(M=!1),ug(S,S.current,M)}function pd(S){if((fc&Pp)===IA){var M=S.tag;if(M===3||M===1||M===0||M===11||M===14||M===15){if(M=V(S)||"ReactComponent",Uae!==null){if(Uae.has(M))return;Uae.add(M)}else Uae=new Set([M]);ye(S,function(){console.error("Can't perform a React state update on a component that hasn't mounted yet. This indicates that you have a side-effect in your render function that asynchronously tries to update the component. Move this work to useEffect instead.")})}}}function K1(S,M){yg&&S.memoizedUpdaters.forEach(function(R){qe(S,R,M)})}function fp(S,M){var R=Dn.actQueue;return R!==null?(R.push(M),nRn):dv(S,M)}function OP(S){Jb()&&Dn.actQueue===null&&ye(S,function(){console.error(`An update to %s inside a test was not wrapped in act(...).
When testing, code that causes React state updates should be wrapped into act(...):
act(() => {
/* fire events that update state */
});
/* assert on the output */
This ensures that you're testing the behavior the user would see in the browser. Learn more at https://react.dev/link/wrap-tests-with-act`,V(S))})}function mg(S){S!==WO&&S.next===null&&(WO===null?UO=WO=S:WO=WO.next=S),Wae=!0,Dn.actQueue!==null?DPe||(DPe=!0,QC()):TPe||(TPe=!0,QC())}function zP(S,M){if(!NPe&&Wae){NPe=!0;do{var R=!1;for(var G=UO;G!==null;){if(!M)if(S!==0){var te=G.pendingLanes;if(te===0)var re=0;else{var Se=G.suspendedLanes,Me=G.pingedLanes;re=(1<<31-yl(42|S)+1)-1,re&=te&~(Se&~Me),re=re&201326741?re&201326741|1:re?re|2:0}re!==0&&(R=!0,W4(G,re))}else re=ks,re=vt(G,G===_d?re:0,G.cancelPendingCommit!==null||G.timeoutHandle!==PR),(re&3)===0||Ht(G,re)||(R=!0,W4(G,re));G=G.next}}while(R);NPe=!1}}function FN(){hq=window.event,GP()}function GP(){Wae=DPe=TPe=!1;var S=0;Xw!==0&&uw()&&(S=Xw);for(var M=Qr(),R=null,G=UO;G!==null;){var te=G.next,re=cw(G,M);if(re===0)G.next=null,R===null?UO=te:R.next=te,te===null&&(WO=R);else if(R=G,S!==0||(re&3)!==0)Wae=!0;G=te}ph!==vv&&ph!==Oae||zP(S,!1),Xw!==0&&(Xw=0)}function cw(S,M){for(var{suspendedLanes:R,pingedLanes:G,expirationTimes:te}=S,re=S.pendingLanes&-62914561;0<re;){var Se=31-yl(re),Me=1<<Se,$e=te[Se];if($e===-1){if((Me&R)===0||(Me&G)!==0)te[Se]=ut(Me,M)}else $e<=M&&(S.expiredLanes|=Me);re&=~Me}if(M=_d,R=ks,R=vt(S,S===M?R:0,S.cancelPendingCommit!==null||S.timeoutHandle!==PR),G=S.callbackNode,R===0||S===M&&(zl===gR||zl===fR)||S.cancelPendingCommit!==null)return G!==null&&YP(G),S.callbackNode=null,S.callbackPriority=0;if((R&3)===0||Ht(S,R)){if(M=R&-R,M!==S.callbackPriority||Dn.actQueue!==null&&G!==RPe)YP(G);else return M;switch(Ct(R)){case X0:case Mm:R=uv;break;case qC:R=hv;break;case AO:R=du;break;default:R=hv}return G=U4.bind(null,S),Dn.actQueue!==null?(Dn.actQueue.push(G),R=RPe):R=dv(R,G),S.callbackPriority=M,S.callbackNode=R,M}return G!==null&&YP(G),S.callbackPriority=2,S.callbackNode=null,2}function U4(S,M){if(fae=gae=!1,hq=window.event,ph!==vv&&ph!==Oae)return S.callbackNode=null,S.callbackPriority=0,null;var R=S.callbackNode;if(q2===Hae&&(q2=SPe),Mf()&&S.callbackNode!==R)return null;var G=ks;if(G=vt(S,S===_d?G:0,S.cancelPendingCommit!==null||S.timeoutHandle!==PR),G===0)return null;return ZH(S,G,M),cw(S,Qr()),S.callbackNode!=null&&S.callbackNode===R?U4.bind(null,S):null}function W4(S,M){if(Mf())return null;gae=fae,fae=!1,ZH(S,M,!0)}function YP(S){S!==RPe&&S!==null&&ZN(S)}function QC(){Dn.actQueue!==null&&Dn.actQueue.push(function(){return GP(),null}),hRn(function(){(fc&(Pp|K2))!==IA?dv(KC,FN):GP()})}function E2(){if(Xw===0){var S=Ow;S===0&&(S=eR,eR<<=1,(eR&261888)===0&&(eR=256)),Xw=S}return Xw}function o5(S){if(S==null||typeof S==="symbol"||typeof S==="boolean")return null;if(typeof S==="function")return S;return st(S,"action"),Dl(S)}function lw(S,M,R,G,te){if(M==="submit"&&R&&R.stateNode===te){var re=o5((te[_A]||null).action),Se=G.submitter;Se&&(M=(M=Se[_A]||null)?o5(M.formAction):Se.getAttribute("formAction"),M!==null&&(re=M,Se=null));var Me=new yO("action","action",null,G,te);S.push({event:Me,listeners:[{instance:null,listener:function(){if(G.defaultPrevented){if(Xw!==0){var $e=new FormData(te,Se),dt={pending:!0,data:$e,method:te.method,action:re};Object.freeze(dt),F9(R,dt,null,$e)}}else typeof re==="function"&&(Me.preventDefault(),$e=new FormData(te,Se),dt={pending:!0,data:$e,method:te.method,action:re},Object.freeze(dt),F9(R,dt,re,$e))},currentTarget:te}]})}}function Lu(S,M,R){S.currentTarget=R;try{M(S)}catch(G){zSe(G)}S.currentTarget=null}function yp(S,M){M=(M&4)!==0;for(var R=0;R<S.length;R++){var G=S[R];e:{var te=void 0,re=G.event;if(G=G.listeners,M)for(var Se=G.length-1;0<=Se;Se--){var Me=G[Se],$e=Me.instance,dt=Me.currentTarget;if(Me=Me.listener,$e!==te&&re.isPropagationStopped())break e;$e!==null?ye($e,Lu,re,Me,dt):Lu(re,Me,dt),te=$e}else for(Se=0;Se<G.length;Se++){if(Me=G[Se],$e=Me.instance,dt=Me.currentTarget,Me=Me.listener,$e!==te&&re.isPropagationStopped())break e;$e!==null?ye($e,Lu,re,Me,dt):Lu(re,Me,dt),te=$e}}}}function gs(S,M){QPe.has(S)||console.error('Did not expect a listenToNonDelegatedEvent() call for "%s". This is a bug in React. Please file an issue.',S);var R=M[Aj];R===void 0&&(R=M[Aj]=new Set);var G=S+"__bubble";R.has(G)||(xp(M,S,2,!1),R.add(G))}function pg(S,M,R){QPe.has(S)&&!M&&console.error('Did not expect a listenToNativeEvent() call for "%s" in the bubble phase. This is a bug in React. Please file an issue.',S);var G=0;M&&(G|=4),xp(R,S,G,M)}function Bf(S){if(!S[Xae]){S[Xae]=!0,S5.forEach(function(R){R!=="selectionchange"&&(QPe.has(R)||pg(R,!1,S),pg(R,!0,S))});var M=S.nodeType===9?S:S.ownerDocument;M===null||M[Xae]||(M[Xae]=!0,pg("selectionchange",!1,M))}}function xp(S,M,R,G){switch(g5(M)){case X0:var te=VC;break;case Mm:te=kl;break;default:te=UC}R=te.bind(null,M,R,S),te=void 0,!Lr||M!=="touchstart"&&M!=="touchmove"&&M!=="wheel"||(te=!0),G?te!==void 0?S.addEventListener(M,R,{capture:!0,passive:te}):S.addEventListener(M,R,!0):te!==void 0?S.addEventListener(M,R,{passive:te}):S.addEventListener(M,R,!1)}function i5(S,M,R,G,te){var re=G;if((M&1)===0&&(M&2)===0&&G!==null)e:for(;;){if(G===null)return;var Se=G.tag;if(Se===3||Se===4){var Me=G.stateNode.containerInfo;if(Me===te)break;if(Se===4)for(Se=G.return;Se!==null;){var $e=Se.tag;if(($e===3||$e===4)&&Se.stateNode.containerInfo===te)return;Se=Se.return}for(;Me!==null;){if(Se=mn(Me),Se===null)return;if($e=Se.tag,$e===5||$e===6||$e===26||$e===27){G=re=Se;continue e}Me=Me.parentNode}}G=G.return}af(function(){var dt=re,Bt=tA(R),qt=[];e:{var Kt=Cet.get(S);if(Kt!==void 0){var un=yO,ho=S;switch(S){case"keypress":if(lp(R)===0)break e;case"keydown":case"keyup":un=ANn;break;case"focusin":ho="focus",un=QSe;break;case"focusout":ho="blur",un=QSe;break;case"beforeblur":case"afterblur":un=QSe;break;case"click":if(R.button===2)break e;case"auxclick":case"dblclick":case"mousedown":case"mousemove":case"mouseup":case"mouseout":case"mouseover":case"contextmenu":un=set;break;case"drag":case"dragend":case"dragenter":case"dragexit":case"dragleave":case"dragover":case"dragstart":case"drop":un=oNn;break;case"touchcancel":case"touchend":case"touchmove":case"touchstart":un=xNn;break;case get:case fet:case yet:un=sNn;break;case xet:un=INn;break;case"scroll":case"scrollend":un=tNn;break;case"wheel":un=SNn;break;case"copy":case"cut":case"paste":un=cNn;break;case"gotpointercapture":case"lostpointercapture":case"pointercancel":case"pointerdown":case"pointermove":case"pointerout":case"pointerover":case"pointerup":un=cet;break;case"submit":un=fNn;break;case"toggle":case"beforetoggle":un=vNn}var ui=(M&4)!==0,Zi=!ui&&(S==="scroll"||S==="scrollend"),Xs=ui?Kt!==null?Kt+"Capture":null:Kt;ui=[];for(var Yt=dt,Vt;Yt!==null;){var Jt=Yt;if(Vt=Jt.stateNode,Jt=Jt.tag,Jt!==5&&Jt!==26&&Jt!==27||Vt===null||Xs===null||(Jt=r_(Yt,Xs),Jt!=null&&ui.push(C_(Yt,Jt,Vt))),Zi)break;Yt=Yt.return}0<ui.length&&(Kt=new un(Kt,ho,null,R,Bt),qt.push({event:Kt,listeners:ui}))}}if((M&7)===0){e:{if(un=S==="mouseover"||S==="pointerover",Kt=S==="mouseout"||S==="pointerout",un&&R!==$t&&(ho=R.relatedTarget||R.fromElement)&&(mn(ho)||ho[I5]))break e;if(Kt||un){if(ho=Bt.window===Bt?Bt:(un=Bt.ownerDocument)?un.defaultView||un.parentWindow:window,Kt){if(un=R.relatedTarget||R.toElement,Kt=dt,un=un?mn(un):null,un!==null&&(Zi=_(un),ui=un.tag,un!==Zi||ui!==5&&ui!==27&&ui!==6))un=null}else Kt=null,un=dt;if(Kt!==un){if(ui=set,Jt="onMouseLeave",Xs="onMouseEnter",Yt="mouse",S==="pointerout"||S==="pointerover")ui=cet,Jt="onPointerLeave",Xs="onPointerEnter",Yt="pointer";Zi=Kt==null?ho:Cn(Kt),Vt=un==null?ho:Cn(un),ho=new ui(Jt,Yt+"leave",Kt,R,Bt),ho.target=Zi,ho.relatedTarget=Vt,Jt=null,mn(Bt)===dt&&(ui=new ui(Xs,Yt+"enter",un,R,Bt),ui.target=Vt,ui.relatedTarget=Zi,Jt=ui),Zi=Jt,ui=Kt&&un?z(Kt,un,HN):null,Kt!==null&&dA(qt,ho,Kt,ui,!1),un!==null&&Zi!==null&&dA(qt,Zi,un,ui,!0)}}}e:{if(Kt=dt?Cn(dt):window,un=Kt.nodeName&&Kt.nodeName.toLowerCase(),un==="select"||un==="input"&&Kt.type==="file")var Nn=dd;else if(xb(Kt))if(Aet)Nn=lC;else{Nn=cC;var Bo=nA}else un=Kt.nodeName,!un||un.toLowerCase()!=="input"||Kt.type!=="checkbox"&&Kt.type!=="radio"?dt&&Rs(dt.elementType)&&(Nn=dd):Nn=r9;if(Nn&&(Nn=Nn(S,dt))){Nd(qt,Nn,R,Bt);break e}Bo&&Bo(S,Kt,dt)}switch(Bo=dt?Cn(dt):window,S){case"focusin":if(xb(Bo)||Bo.contentEditable==="true")CO=Bo,LSe=dt,Bj=null;break;case"focusout":Bj=LSe=CO=null;break;case"mousedown":FSe=!0;break;case"contextmenu":case"mouseup":case"dragend":FSe=!1,df(qt,R,Bt);break;case"selectionchange":if(wNn)break;case"keydown":case"keyup":df(qt,R,Bt)}var Or;if(kSe)e:{switch(S){case"compositionstart":var er="onCompositionStart";break e;case"compositionend":er="onCompositionEnd";break e;case"compositionupdate":er="onCompositionUpdate";break e}er=void 0}else xO?Z_(S,R)&&(er="onCompositionEnd"):S==="keydown"&&R.keyCode===det&&(er="onCompositionStart");if(er&&(uet&&R.locale!=="ko"&&(xO||er!=="onCompositionStart"?er==="onCompositionEnd"&&xO&&(Or=Bh()):(Fr=Bt,Hl=("value"in Fr)?Fr.value:Fr.textContent,xO=!0)),Bo=kC(dt,er),0<Bo.length&&(er=new aet(er,S,null,R,Bt),qt.push({event:er,listeners:Bo}),Or?er.data=Or:(Or=cf(R),Or!==null&&(er.data=Or)))),Or=MNn?yb(S,R):ah(S,R))er=kC(dt,"onBeforeInput"),0<er.length&&(Bo=new dNn("onBeforeInput","beforeinput",null,R,Bt),qt.push({event:Bo,listeners:er}),Bo.data=Or);lw(qt,S,dt,R,Bt)}yp(qt,M)})}function C_(S,M,R){return{instance:S,listener:M,currentTarget:R}}function kC(S,M){for(var R=M+"Capture",G=[];S!==null;){var te=S,re=te.stateNode;if(te=te.tag,te!==5&&te!==26&&te!==27||re===null||(te=r_(S,R),te!=null&&G.unshift(C_(S,te,re)),te=r_(S,M),te!=null&&G.push(C_(S,te,re))),S.tag===3)return G;S=S.return}return[]}function HN(S){if(S===null)return null;do S=S.return;while(S&&S.tag!==5&&S.tag!==27);return S?S:null}function dA(S,M,R,G,te){for(var re=M._reactName,Se=[];R!==null&&R!==G;){var Me=R,$e=Me.alternate,dt=Me.stateNode;if(Me=Me.tag,$e!==null&&$e===G)break;Me!==5&&Me!==26&&Me!==27||dt===null||($e=dt,te?(dt=r_(R,re),dt!=null&&Se.unshift(C_(R,dt,$e))):te||(dt=r_(R,re),dt!=null&&Se.push(C_(R,dt,$e)))),R=R.return}Se.length!==0&&S.push({event:M,listeners:Se})}function I_(S,M){Tl(S,M),S!=="input"&&S!=="textarea"&&S!=="select"||M==null||M.value!==null||di||(di=!0,S==="select"&&M.multiple?console.error("`value` prop on `%s` should not be null. Consider using an empty array when `multiple` is set to `true` to clear the component or `undefined` for uncontrolled components.",S):console.error("`value` prop on `%s` should not be null. Consider using an empty string to clear the component or `undefined` for uncontrolled components.",S));var R={registrationNameDependencies:P5,possibleRegistrationNames:tR};Rs(S)||typeof M.is==="string"||Td(S,M,R),M.contentEditable&&!M.suppressContentEditableWarning&&M.children!=null&&console.error("A component is `contentEditable` and contains `children` managed by React. It is now your responsibility to guarantee that none of those nodes are unexpectedly modified or duplicated. This is probably not intentional.")}function ka(S,M,R,G){M!==R&&(R=Zs(R),Zs(M)!==R&&(G[S]=M))}function au(S){return!!(S.getAttribute("vt-share")||S.getAttribute("vt-exit")||S.getAttribute("vt-enter")||S.getAttribute("vt-update"))}function ua(S){if(!au(S))return!1;var M=S.getAttribute("vt-name");return S=S.style["view-transition-name"],M?M===S:S.startsWith("_T_")}function wf(S,M,R){M.forEach(function(G){G==="style"?S.getAttribute(G)!==""&&(G=S.style,(G.length===1&&G[0]==="view-transition-name"||G.length===2&&G[0]==="view-transition-class"&&G[1]==="view-transition-name")&&ua(S)||(R.style=Bc(S))):R[H0(G)]=S.getAttribute(G)})}function cu(S,M){M===!1?console.error("Expected `%s` listener to be a function, instead got `false`.\n\nIf you used to conditionally omit it with %s={condition && value}, pass %s={condition ? value : undefined} instead.",S,S,S):console.error("Expected `%s` listener to be a function, instead got a value of `%s` type.",S,typeof M)}function LC(S,M){return S=S.namespaceURI===ge||S.namespaceURI===Ie?S.ownerDocument.createElementNS(S.namespaceURI,S.tagName):S.ownerDocument.createElement(S.tagName),S.innerHTML=M,S.innerHTML}function Zs(S){return De(S)&&(console.error("The provided HTML markup uses a value of unsupported type %s. This value must be coerced to a string before using it here.",ve(S)),Ze(S)),(typeof S==="string"?S:""+S).replace(oRn,`
`).replace(iRn,"")}function X4(S,M){return M=Zs(M),Zs(S)===M?!0:!1}function Mc(S,M,R,G,te,re){switch(R){case"children":if(typeof G==="string")wu(G,M,!1),M==="body"||M==="textarea"&&G===""||Rr(S,G);else if(typeof G==="number"||typeof G==="bigint")wu(""+G,M,!1),M!=="body"&&Rr(S,""+G);else return;break;case"className":Lt(S,"class",G);break;case"tabIndex":Lt(S,"tabindex",G);break;case"dir":case"role":case"viewBox":case"width":case"height":Lt(S,R,G);break;case"style":ja(S,G,re);return;case"data":if(M!=="object"){Lt(S,"data",G);break}case"src":case"href":if(G===""&&(M!=="a"||R!=="href")){R==="src"?console.error('An empty string ("") was passed to the %s attribute. This may cause the browser to download the whole page again over the network. To fix this, either do not render the element at all or pass null to %s instead of an empty string.',R,R):console.error('An empty string ("") was passed to the %s attribute. To fix this, either do not render the element at all or pass null to %s instead of an empty string.',R,R),S.removeAttribute(R);break}if(G==null||typeof G==="function"||typeof G==="symbol"||typeof G==="boolean"){S.removeAttribute(R);break}st(G,R),G=Dl(G),S.setAttribute(R,G);break;case"action":case"formAction":if(G!=null&&(M==="form"?R==="formAction"?console.error("You can only pass the formAction prop to <input> or <button>. Use the action prop on <form>."):typeof G==="function"&&(te.encType==null&&te.method==null||qae||(qae=!0,console.error("Cannot specify a encType or method for a form that specifies a function as the action. React provides those automatically. They will get overridden.")),te.target==null||jae||(jae=!0,console.error("Cannot specify a target for a form that specifies a function as the action. The function will always be executed in the same window."))):M==="input"||M==="button"?R==="action"?console.error("You can only pass the action prop to <form>. Use the formAction prop on <input> or <button>."):M!=="input"||te.type==="submit"||te.type==="image"||Kae?M!=="button"||te.type==null||te.type==="submit"||Kae?typeof G==="function"&&(te.name==null||Ytt||(Ytt=!0,console.error('Cannot specify a "name" prop for a button that specifies a function as a formAction. React needs it to encode which action should be invoked. It will get overridden.')),te.formEncType==null&&te.formMethod==null||qae||(qae=!0,console.error("Cannot specify a formEncType or formMethod for a button that specifies a function as a formAction. React provides those automatically. They will get overridden.")),te.formTarget==null||jae||(jae=!0,console.error("Cannot specify a formTarget for a button that specifies a function as a formAction. The function will always be executed in the same window."))):(Kae=!0,console.error('A button can only specify a formAction along with type="submit" or no type.')):(Kae=!0,console.error('An input can only specify a formAction along with type="submit" or type="image".')):R==="action"?console.error("You can only pass the action prop to <form>."):console.error("You can only pass the formAction prop to <input> or <button>.")),typeof G==="function"){S.setAttribute(R,"javascript:throw new Error('A React form was unexpectedly submitted. If you called form.submit() manually, consider using form.requestSubmit() instead. If you\\'re trying to use event.stopPropagation() in a submit event handler, consider also calling event.preventDefault().')");break}else typeof re==="function"&&(R==="formAction"?(M!=="input"&&Mc(S,M,"name",te.name,te,null),Mc(S,M,"formEncType",te.formEncType,te,null),Mc(S,M,"formMethod",te.formMethod,te,null),Mc(S,M,"formTarget",te.formTarget,te,null)):(Mc(S,M,"encType",te.encType,te,null),Mc(S,M,"method",te.method,te,null),Mc(S,M,"target",te.target,te,null)));if(G==null||typeof G==="symbol"||typeof G==="boolean"){S.removeAttribute(R);break}st(G,R),G=Dl(G),S.setAttribute(R,G);break;case"onClick":G!=null&&(typeof G!=="function"&&cu(R,G),S.onclick=Dd);return;case"onScroll":G!=null&&(typeof G!=="function"&&cu(R,G),gs("scroll",S));return;case"onScrollEnd":G!=null&&(typeof G!=="function"&&cu(R,G),gs("scrollend",S));return;case"dangerouslySetInnerHTML":if(G!=null){if(typeof G!=="object"||!("__html"in G))throw Error("`props.dangerouslySetInnerHTML` must be in the form `{__html: ...}`. Please visit https://react.dev/link/dangerously-set-inner-html for more information.");if(R=G.__html,R!=null){if(te.children!=null)throw Error("Can only set one of `children` or `props.dangerouslySetInnerHTML`.");(re!=null?re.__html:void 0)!==R&&(S.innerHTML=R)}}break;case"multiple":S.multiple=G&&typeof G!=="function"&&typeof G!=="symbol";break;case"muted":S.muted=G&&typeof G!=="function"&&typeof G!=="symbol";break;case"suppressContentEditableWarning":case"suppressHydrationWarning":case"defaultValue":case"defaultChecked":case"innerHTML":case"ref":break;case"autoFocus":break;case"xlinkHref":if(G==null||typeof G==="function"||typeof G==="boolean"||typeof G==="symbol"){S.removeAttribute("xlink:href");break}st(G,R),R=Dl(G),S.setAttributeNS(IR,"xlink:href",R);break;case"contentEditable":case"spellCheck":case"draggable":case"value":case"autoReverse":case"externalResourcesRequired":case"focusable":case"preserveAlpha":G!=null&&typeof G!=="function"&&typeof G!=="symbol"?(st(G,R),S.setAttribute(R,G)):S.removeAttribute(R);break;case"inert":G!==""||Jae[R]||(Jae[R]=!0,console.error("Received an empty string for a boolean attribute `%s`. This will treat the attribute as if it were false. Either pass `false` to silence this warning, or pass `true` if you used an empty string in earlier versions of React to indicate this attribute is true.",R));case"allowFullScreen":case"async":case"autoPlay":case"controls":case"credentialless":case"default":case"defer":case"disabled":case"disablePictureInPicture":case"disableRemotePlayback":case"formNoValidate":case"hidden":case"loop":case"noModule":case"noValidate":case"open":case"playsInline":case"readOnly":case"required":case"reversed":case"scoped":case"seamless":case"itemScope":G&&typeof G!=="function"&&typeof G!=="symbol"?S.setAttribute(R,""):S.removeAttribute(R);break;case"capture":case"download":G===!0?S.setAttribute(R,""):G!==!1&&G!=null&&typeof G!=="function"&&typeof G!=="symbol"?(st(G,R),S.setAttribute(R,G)):S.removeAttribute(R);break;case"cols":case"rows":case"size":case"span":G!=null&&typeof G!=="function"&&typeof G!=="symbol"&&!isNaN(G)&&1<=G?(st(G,R),S.setAttribute(R,G)):S.removeAttribute(R);break;case"rowSpan":case"start":G==null||typeof G==="function"||typeof G==="symbol"||isNaN(G)?S.removeAttribute(R):(st(G,R),S.setAttribute(R,G));break;case"popover":gs("beforetoggle",S),gs("toggle",S),Ut(S,"popover",G);break;case"xlinkActuate":fn(S,IR,"xlink:actuate",G);break;case"xlinkArcrole":fn(S,IR,"xlink:arcrole",G);break;case"xlinkRole":fn(S,IR,"xlink:role",G);break;case"xlinkShow":fn(S,IR,"xlink:show",G);break;case"xlinkTitle":fn(S,IR,"xlink:title",G);break;case"xlinkType":fn(S,IR,"xlink:type",G);break;case"xmlBase":fn(S,kPe,"xml:base",G);break;case"xmlLang":fn(S,kPe,"xml:lang",G);break;case"xmlSpace":fn(S,kPe,"xml:space",G);break;case"is":re!=null&&console.error('Cannot update the "is" prop after it has been initialized.'),Ut(S,"is",G);break;case"innerText":case"textContent":return;case"popoverTarget":Vtt||G==null||typeof G!=="object"||(Vtt=!0,console.error("The `popoverTarget` prop expects the ID of an Element as a string. Received %s instead.",G));default:if(!(2<R.length)||R[0]!=="o"&&R[0]!=="O"||R[1]!=="n"&&R[1]!=="N")R=Vi(R),Ut(S,R,G);else{P5.hasOwnProperty(R)&&G!=null&&typeof G!=="function"&&cu(R,G);return}}cc=!0}function ON(S,M,R,G,te,re){switch(R){case"style":ja(S,G,re);return;case"dangerouslySetInnerHTML":if(G!=null){if(typeof G!=="object"||!("__html"in G))throw Error("`props.dangerouslySetInnerHTML` must be in the form `{__html: ...}`. Please visit https://react.dev/link/dangerously-set-inner-html for more information.");if(R=G.__html,R!=null){if(te.children!=null)throw Error("Can only set one of `children` or `props.dangerouslySetInnerHTML`.");(re!=null?re.__html:void 0)!==R&&(S.innerHTML=R)}}break;case"children":if(typeof G==="string")Rr(S,G);else if(typeof G==="number"||typeof G==="bigint")Rr(S,""+G);else return;break;case"onScroll":G!=null&&(typeof G!=="function"&&cu(R,G),gs("scroll",S));return;case"onScrollEnd":G!=null&&(typeof G!=="function"&&cu(R,G),gs("scrollend",S));return;case"onClick":G!=null&&(typeof G!=="function"&&cu(R,G),S.onclick=Dd);return;case"suppressContentEditableWarning":case"suppressHydrationWarning":case"innerHTML":case"ref":return;case"innerText":case"textContent":return;default:if(P5.hasOwnProperty(R))G!=null&&typeof G!=="function"&&cu(R,G);else e:{if(R[0]==="o"&&R[1]==="n"&&(te=R.endsWith("Capture"),re=R.slice(2,te?R.length-7:void 0),M=S[_A]||null,M=M!=null?M[R]:null,typeof M==="function"&&S.removeEventListener(re,M,te),typeof G==="function")){typeof M!=="function"&&M!==null&&(R in S?S[R]=null:S.hasAttribute(R)&&S.removeAttribute(R)),S.addEventListener(re,G,te);break e}cc=!0,R in S?S[R]=G:G===!0?S.setAttribute(R,""):Ut(S,R,G)}return}cc=!0}function n0(S,M,R){switch(I_(M,R),M){case"div":case"span":case"svg":case"path":case"a":case"g":case"p":case"li":break;case"img":gs("error",S),gs("load",S);var G=!1,te=!1,re;for(re in R)if(R.hasOwnProperty(re)){var Se=R[re];if(Se!=null)switch(re){case"src":G=!0;break;case"srcSet":te=!0;break;case"children":case"dangerouslySetInnerHTML":throw Error(M+" is a void element tag and must neither have `children` nor use `dangerouslySetInnerHTML`.");default:Mc(S,M,re,Se,R,null)}}te&&Mc(S,M,"srcSet",R.srcSet,R,null),G&&Mc(S,M,"src",R.src,R,null);return;case"input":ai("input",R),gs("invalid",S);var Me=re=Se=te=null,$e=null,dt=null;for(G in R)if(R.hasOwnProperty(G)){var Bt=R[G];if(Bt!=null)switch(G){case"name":te=Bt;break;case"type":Se=Bt;break;case"checked":$e=Bt;break;case"defaultChecked":dt=Bt;break;case"value":re=Bt;break;case"defaultValue":Me=Bt;break;case"children":case"dangerouslySetInnerHTML":if(Bt!=null)throw Error(M+" is a void element tag and must neither have `children` nor use `dangerouslySetInnerHTML`.");break;default:Mc(S,M,G,Bt,R,null)}}Co(S,R),In(S,re,Me,$e,dt,Se,te,!1);return;case"select":ai("select",R),gs("invalid",S),G=Se=re=null;for(te in R)if(R.hasOwnProperty(te)&&(Me=R[te],Me!=null))switch(te){case"value":re=Me;break;case"defaultValue":Se=Me;break;case"multiple":G=Me;default:Mc(S,M,te,Me,R,null)}qo(S,R),M=re,R=Se,S.multiple=!!G,M!=null?zo(S,!!G,M,!1):R!=null&&zo(S,!!G,R,!0);return;case"textarea":ai("textarea",R),gs("invalid",S),re=te=G=null;for(Se in R)if(R.hasOwnProperty(Se)&&(Me=R[Se],Me!=null))switch(Se){case"value":G=Me;break;case"defaultValue":te=Me;break;case"children":re=Me;break;case"dangerouslySetInnerHTML":if(Me!=null)throw Error("`dangerouslySetInnerHTML` does not make sense on <textarea>.");break;default:Mc(S,M,Se,Me,R,null)}fi(S,R),bs(S,G,te,re);return;case"option":co(S,R);for($e in R)if(R.hasOwnProperty($e)&&(G=R[$e],G!=null))switch($e){case"selected":S.selected=G&&typeof G!=="function"&&typeof G!=="symbol";break;default:Mc(S,M,$e,G,R,null)}return;case"dialog":gs("beforetoggle",S),gs("toggle",S),gs("cancel",S),gs("close",S);break;case"iframe":case"object":gs("load",S);break;case"video":case"audio":for(G=0;G<lq.length;G++)gs(lq[G],S);break;case"image":gs("error",S),gs("load",S);break;case"details":gs("toggle",S);break;case"embed":case"source":case"link":gs("error",S),gs("load",S);case"area":case"base":case"br":case"col":case"hr":case"keygen":case"meta":case"param":case"track":case"wbr":case"menuitem":for(dt in R)if(R.hasOwnProperty(dt)&&(G=R[dt],G!=null))switch(dt){case"children":case"dangerouslySetInnerHTML":throw Error(M+" is a void element tag and must neither have `children` nor use `dangerouslySetInnerHTML`.");default:Mc(S,M,dt,G,R,null)}return;default:if(Rs(M)){for(Bt in R)R.hasOwnProperty(Bt)&&(G=R[Bt],G!==void 0&&ON(S,M,Bt,G,R,void 0));return}}for(Me in R)R.hasOwnProperty(Me)&&(G=R[Me],G!=null&&Mc(S,M,Me,G,R,null))}function cj(S,M,R,G){switch(I_(M,G),M){case"div":case"span":case"svg":case"path":case"a":case"g":case"p":case"li":break;case"input":var te=null,re=null,Se=null,Me=null,$e=null,dt=null,Bt=null;for(un in R){var qt=R[un];if(R.hasOwnProperty(un)&&qt!=null)switch(un){case"checked":break;case"value":break;case"defaultValue":$e=qt;default:G.hasOwnProperty(un)||Mc(S,M,un,null,G,qt)}}for(var Kt in G){var un=G[Kt];if(qt=R[Kt],G.hasOwnProperty(Kt)&&(un!=null||qt!=null))switch(Kt){case"type":un!==qt&&(cc=!0),re=un;break;case"name":un!==qt&&(cc=!0),te=un;break;case"checked":un!==qt&&(cc=!0),dt=un;break;case"defaultChecked":un!==qt&&(cc=!0),Bt=un;break;case"value":un!==qt&&(cc=!0),Se=un;break;case"defaultValue":un!==qt&&(cc=!0),Me=un;break;case"children":case"dangerouslySetInnerHTML":if(un!=null)throw Error(M+" is a void element tag and must neither have `children` nor use `dangerouslySetInnerHTML`.");break;default:un!==qt&&Mc(S,M,Kt,un,G,qt)}}M=R.type==="checkbox"||R.type==="radio"?R.checked!=null:R.value!=null,G=G.type==="checkbox"||G.type==="radio"?G.checked!=null:G.value!=null,M||!G||Gtt||(console.error("A component is changing an uncontrolled input to be controlled. This is likely caused by the value changing from undefined to a defined value, which should not happen. Decide between using a controlled or uncontrolled input element for the lifetime of the component. More info: https://react.dev/link/controlled-components"),Gtt=!0),!M||G||ztt||(console.error("A component is changing a controlled input to be uncontrolled. This is likely caused by the value changing from a defined to undefined, which should not happen. Decide between using a controlled or uncontrolled input element for the lifetime of the component. More info: https://react.dev/link/controlled-components"),ztt=!0),Eo(S,Se,Me,$e,dt,Bt,re,te);return;case"select":un=Se=Me=Kt=null;for(re in R)if($e=R[re],R.hasOwnProperty(re)&&$e!=null)switch(re){case"value":break;case"multiple":un=$e;default:G.hasOwnProperty(re)||Mc(S,M,re,null,G,$e)}for(te in G)if(re=G[te],$e=R[te],G.hasOwnProperty(te)&&(re!=null||$e!=null))switch(te){case"value":re!==$e&&(cc=!0),Kt=re;break;case"defaultValue":re!==$e&&(cc=!0),Me=re;break;case"multiple":re!==$e&&(cc=!0),Se=re;default:re!==$e&&Mc(S,M,te,re,G,$e)}G=Me,M=Se,R=un,Kt!=null?zo(S,!!M,Kt,!1):!!R!==!!M&&(G!=null?zo(S,!!M,G,!0):zo(S,!!M,M?[]:"",!1));return;case"textarea":un=Kt=null;for(Me in R)if(te=R[Me],R.hasOwnProperty(Me)&&te!=null&&!G.hasOwnProperty(Me))switch(Me){case"value":break;case"children":break;default:Mc(S,M,Me,null,G,te)}for(Se in G)if(te=G[Se],re=R[Se],G.hasOwnProperty(Se)&&(te!=null||re!=null))switch(Se){case"value":te!==re&&(cc=!0),Kt=te;break;case"defaultValue":te!==re&&(cc=!0),un=te;break;case"children":break;case"dangerouslySetInnerHTML":if(te!=null)throw Error("`dangerouslySetInnerHTML` does not make sense on <textarea>.");break;default:te!==re&&Mc(S,M,Se,te,G,re)}Nr(S,Kt,un);return;case"option":for(var ho in R)if(Kt=R[ho],R.hasOwnProperty(ho)&&Kt!=null&&!G.hasOwnProperty(ho))switch(ho){case"selected":S.selected=!1;break;default:Mc(S,M,ho,null,G,Kt)}for($e in G)if(Kt=G[$e],un=R[$e],G.hasOwnProperty($e)&&Kt!==un&&(Kt!=null||un!=null))switch($e){case"selected":Kt!==un&&(cc=!0),S.selected=Kt&&typeof Kt!=="function"&&typeof Kt!=="symbol";break;default:Mc(S,M,$e,Kt,G,un)}return;case"img":case"link":case"area":case"base":case"br":case"col":case"embed":case"hr":case"keygen":case"meta":case"param":case"source":case"track":case"wbr":case"menuitem":for(var ui in R)Kt=R[ui],R.hasOwnProperty(ui)&&Kt!=null&&!G.hasOwnProperty(ui)&&Mc(S,M,ui,null,G,Kt);for(dt in G)if(Kt=G[dt],un=R[dt],G.hasOwnProperty(dt)&&Kt!==un&&(Kt!=null||un!=null))switch(dt){case"children":case"dangerouslySetInnerHTML":if(Kt!=null)throw Error(M+" is a void element tag and must neither have `children` nor use `dangerouslySetInnerHTML`.");break;default:Mc(S,M,dt,Kt,G,un)}return;default:if(Rs(M)){for(var Zi in R)Kt=R[Zi],R.hasOwnProperty(Zi)&&Kt!==void 0&&!G.hasOwnProperty(Zi)&&ON(S,M,Zi,void 0,G,Kt);for(Bt in G)Kt=G[Bt],un=R[Bt],!G.hasOwnProperty(Bt)||Kt===un||Kt===void 0&&un===void 0||ON(S,M,Bt,Kt,G,un);return}}for(var Xs in R)Kt=R[Xs],R.hasOwnProperty(Xs)&&Kt!=null&&!G.hasOwnProperty(Xs)&&Mc(S,M,Xs,null,G,Kt);for(qt in G)Kt=G[qt],un=R[qt],!G.hasOwnProperty(qt)||Kt===un||Kt==null&&un==null||Mc(S,M,qt,Kt,G,un)}function H0(S){switch(S){case"class":return"className";case"for":return"htmlFor";default:return S}}function Bc(S){for(var M={},R=S.style,G=0;G<R.length;G++){var te=R[G];te==="view-transition-name"&&ua(S)||(M[te]=R.getPropertyValue(te))}return M}function VP(S,M,R){if(M!=null&&typeof M!=="object")console.error("The `style` prop expects a mapping from style properties to values, not a string. For example, style={{marginRight: spacing + 'em'}} when using JSX.");else{var G,te=G="",re;for(re in M)if(M.hasOwnProperty(re)){var Se=M[re];Se!=null&&typeof Se!=="boolean"&&Se!==""&&(re.indexOf("--")===0?(et(Se,re),G+=te+re+":"+(""+Se).trim()):typeof Se!=="number"||Se===0||de.has(re)?(et(Se,re),G+=te+re.replace(Cj,"-$1").toLowerCase().replace(Ij,"-ms-")+":"+(""+Se).trim()):G+=te+re.replace(Cj,"-$1").toLowerCase().replace(Ij,"-ms-")+":"+Se+"px",te=";")}G=G||null,M=S.getAttribute("style"),M!==G&&(G=Zs(G),M=Zs(M),M===G||M[M.length-1]===";"&&au(S)||(R.style=Bc(S)))}}function Pm(S,M,R,G,te,re){if(te.delete(R),S=S.getAttribute(R),S===null)switch(typeof G){case"undefined":case"function":case"symbol":case"boolean":return}else if(G!=null)switch(typeof G){case"function":case"symbol":case"boolean":break;default:if(st(G,M),S===""+G)return}ka(M,S,G,re)}function dw(S,M,R,G,te,re){if(te.delete(R),S=S.getAttribute(R),S===null){switch(typeof G){case"function":case"symbol":return}if(!G)return}else switch(typeof G){case"function":case"symbol":break;default:if(G)return}ka(M,S,G,re)}function r5(S,M,R,G,te,re){if(te.delete(R),S=S.getAttribute(R),S===null)switch(typeof G){case"undefined":case"function":case"symbol":return}else if(G!=null)switch(typeof G){case"function":case"symbol":break;default:if(st(G,R),S===""+G)return}ka(M,S,G,re)}function s5(S,M,R,G,te,re){if(te.delete(R),S=S.getAttribute(R),S===null)switch(typeof G){case"undefined":case"function":case"symbol":case"boolean":return;default:if(isNaN(G))return}else if(G!=null)switch(typeof G){case"function":case"symbol":case"boolean":break;default:if(!isNaN(G)&&(st(G,M),S===""+G))return}ka(M,S,G,re)}function j1(S,M,R,G,te,re){if(te.delete(R),S=S.getAttribute(R),S===null)switch(typeof G){case"undefined":case"function":case"symbol":case"boolean":return}else if(G!=null)switch(typeof G){case"function":case"symbol":case"boolean":break;default:if(st(G,M),R=Dl(""+G),S===R)return}ka(M,S,G,re)}function M2(S,M,R,G){for(var te={},re=new Set,Se=S.attributes,Me=0;Me<Se.length;Me++)switch(Se[Me].name.toLowerCase()){case"value":break;case"checked":break;case"selected":break;case"vt-name":case"vt-update":case"vt-enter":case"vt-exit":case"vt-share":case"vt-parent-enter":case"vt-parent-exit":break;default:re.add(Se[Me].name)}if(Rs(M)){for(var $e in R)if(R.hasOwnProperty($e)){var dt=R[$e];if(dt!=null){if(P5.hasOwnProperty($e))typeof dt!=="function"&&cu($e,dt);else if(R.suppressHydrationWarning!==!0)switch($e){case"children":typeof dt!=="string"&&typeof dt!=="number"||ka("children",S.textContent,dt,te);continue;case"suppressContentEditableWarning":case"suppressHydrationWarning":case"defaultValue":case"defaultChecked":case"innerHTML":case"ref":continue;case"dangerouslySetInnerHTML":Se=S.innerHTML,dt=dt?dt.__html:void 0,dt!=null&&(dt=LC(S,dt),ka($e,Se,dt,te));continue;case"style":re.delete($e),VP(S,dt,te);continue;case"offsetParent":case"offsetTop":case"offsetLeft":case"offsetWidth":case"offsetHeight":case"isContentEditable":case"outerText":case"outerHTML":re.delete($e.toLowerCase()),console.error("Assignment to read-only property will result in a no-op: `%s`",$e);continue;case"className":re.delete("class"),Se=Tt(S,"class",dt),ka("className",Se,dt,te);continue;default:G.context===yM&&M!=="svg"&&M!=="math"?re.delete($e.toLowerCase()):re.delete($e),Se=Tt(S,$e,dt),ka($e,Se,dt,te)}}}}else for(dt in R)if(R.hasOwnProperty(dt)&&($e=R[dt],$e!=null)){if(P5.hasOwnProperty(dt))typeof $e!=="function"&&cu(dt,$e);else if(R.suppressHydrationWarning!==!0)switch(dt){case"children":typeof $e!=="string"&&typeof $e!=="number"||ka("children",S.textContent,$e,te);continue;case"suppressContentEditableWarning":case"suppressHydrationWarning":case"value":case"checked":case"selected":case"defaultValue":case"defaultChecked":case"innerHTML":case"ref":continue;case"dangerouslySetInnerHTML":Se=S.innerHTML,$e=$e?$e.__html:void 0,$e!=null&&($e=LC(S,$e),Se!==$e&&(te[dt]={__html:Se}));continue;case"className":Pm(S,dt,"class",$e,re,te);continue;case"tabIndex":Pm(S,dt,"tabindex",$e,re,te);continue;case"style":re.delete(dt),VP(S,$e,te);continue;case"multiple":re.delete(dt),ka(dt,S.multiple,$e,te);continue;case"muted":re.delete(dt),ka(dt,S.muted,$e,te);continue;case"autoFocus":re.delete("autofocus"),ka(dt,S.autofocus,$e,te);continue;case"data":if(M!=="object"){re.delete(dt),Se=S.getAttribute("data"),ka(dt,Se,$e,te);continue}case"src":case"href":if(!($e!==""||M==="a"&&dt==="href"||M==="object"&&dt==="data")){dt==="src"?console.error('An empty string ("") was passed to the %s attribute. This may cause the browser to download the whole page again over the network. To fix this, either do not render the element at all or pass null to %s instead of an empty string.',dt,dt):console.error('An empty string ("") was passed to the %s attribute. To fix this, either do not render the element at all or pass null to %s instead of an empty string.',dt,dt);continue}j1(S,dt,dt,$e,re,te);continue;case"action":case"formAction":if(Se=S.getAttribute(dt),typeof $e==="function"){re.delete(dt.toLowerCase()),dt==="formAction"?(re.delete("name"),re.delete("formenctype"),re.delete("formmethod"),re.delete("formtarget")):(re.delete("enctype"),re.delete("method"),re.delete("target"));continue}else if(Se===sRn){re.delete(dt.toLowerCase()),ka(dt,"function",$e,te);continue}j1(S,dt,dt.toLowerCase(),$e,re,te);continue;case"xlinkHref":j1(S,dt,"xlink:href",$e,re,te);continue;case"contentEditable":r5(S,dt,"contenteditable",$e,re,te);continue;case"spellCheck":r5(S,dt,"spellcheck",$e,re,te);continue;case"draggable":case"autoReverse":case"externalResourcesRequired":case"focusable":case"preserveAlpha":r5(S,dt,dt,$e,re,te);continue;case"allowFullScreen":case"async":case"autoPlay":case"controls":case"credentialless":case"default":case"defer":case"disabled":case"disablePictureInPicture":case"disableRemotePlayback":case"formNoValidate":case"hidden":case"loop":case"noModule":case"noValidate":case"open":case"playsInline":case"readOnly":case"required":case"reversed":case"scoped":case"seamless":case"itemScope":dw(S,dt,dt.toLowerCase(),$e,re,te);continue;case"capture":case"download":e:{Me=S;var Bt=Se=dt,qt=te;if(re.delete(Bt),Me=Me.getAttribute(Bt),Me===null)switch(typeof $e){case"undefined":case"function":case"symbol":break e;default:if($e===!1)break e}else if($e!=null)switch(typeof $e){case"function":case"symbol":break;case"boolean":if($e===!0&&Me==="")break e;break;default:if(st($e,Se),Me===""+$e)break e}ka(Se,Me,$e,qt)}continue;case"cols":case"rows":case"size":case"span":e:{if(Me=S,Bt=Se=dt,qt=te,re.delete(Bt),Me=Me.getAttribute(Bt),Me===null)switch(typeof $e){case"undefined":case"function":case"symbol":case"boolean":break e;default:if(isNaN($e)||1>$e)break e}else if($e!=null)switch(typeof $e){case"function":case"symbol":case"boolean":break;default:if(!(isNaN($e)||1>$e)&&(st($e,Se),Me===""+$e))break e}ka(Se,Me,$e,qt)}continue;case"rowSpan":s5(S,dt,"rowspan",$e,re,te);continue;case"start":s5(S,dt,dt,$e,re,te);continue;case"xHeight":Pm(S,dt,"x-height",$e,re,te);continue;case"xlinkActuate":Pm(S,dt,"xlink:actuate",$e,re,te);continue;case"xlinkArcrole":Pm(S,dt,"xlink:arcrole",$e,re,te);continue;case"xlinkRole":Pm(S,dt,"xlink:role",$e,re,te);continue;case"xlinkShow":Pm(S,dt,"xlink:show",$e,re,te);continue;case"xlinkTitle":Pm(S,dt,"xlink:title",$e,re,te);continue;case"xlinkType":Pm(S,dt,"xlink:type",$e,re,te);continue;case"xmlBase":Pm(S,dt,"xml:base",$e,re,te);continue;case"xmlLang":Pm(S,dt,"xml:lang",$e,re,te);continue;case"xmlSpace":Pm(S,dt,"xml:space",$e,re,te);continue;case"inert":$e!==""||Jae[dt]||(Jae[dt]=!0,console.error("Received an empty string for a boolean attribute `%s`. This will treat the attribute as if it were false. Either pass `false` to silence this warning, or pass `true` if you used an empty string in earlier versions of React to indicate this attribute is true.",dt)),dw(S,dt,dt,$e,re,te);continue;default:if(!(2<dt.length)||dt[0]!=="o"&&dt[0]!=="O"||dt[1]!=="n"&&dt[1]!=="N"){Me=Vi(dt),Se=!1,G.context===yM&&M!=="svg"&&M!=="math"?re.delete(Me.toLowerCase()):(Bt=dt.toLowerCase(),Bt=yt.hasOwnProperty(Bt)?yt[Bt]||null:null,Bt!==null&&Bt!==dt&&(Se=!0,re.delete(Bt)),re.delete(Me));e:if(Bt=S,qt=Me,Me=$e,At(qt))if(Bt.hasAttribute(qt))Bt=qt.toLowerCase()==="nonce"?Bt.nonce:Bt.getAttribute(qt),st(Me,qt),Me=Bt===""+Me?Me:Bt;else{switch(typeof Me){case"function":case"symbol":break e;case"boolean":if(Bt=qt.toLowerCase().slice(0,5),Bt!=="data-"&&Bt!=="aria-")break e}Me=Me===void 0?void 0:null}else Me=void 0;Se||ka(dt,Me,$e,te)}}}return 0<re.size&&R.suppressHydrationWarning!==!0&&wf(S,re,te),Object.keys(te).length===0?null:te}function lj(S,M){switch(S.length){case 0:return"";case 1:return S[0];case 2:return S[0]+" "+M+" "+S[1];default:return S.slice(0,-1).join(", ")+", "+M+" "+S[S.length-1]}}function zN(S){switch(S){case"css":case"script":case"font":case"img":case"image":case"input":case"link":return!0;default:return!1}}function dj(){if(typeof performance.getEntriesByType==="function"){for(var S=0,M=0,R=performance.getEntriesByType("resource"),G=0;G<R.length;G++){var te=R[G],{transferSize:re,initiatorType:Se,duration:Me}=te;if(re&&Me&&zN(Se)){Se=0,Me=te.responseEnd;for(G+=1;G<R.length;G++){var $e=R[G],dt=$e.startTime;if(dt>Me)break;var Bt=$e.transferSize,qt=$e.initiatorType;Bt&&zN(qt)&&($e=$e.responseEnd,Se+=Bt*($e<Me?1:(Me-dt)/($e-dt)))}if(--G,M+=8*(re+Se)/(te.duration/1000),S++,10<S)break}}if(0<S)return M/S/1e6}return navigator.connection&&(S=navigator.connection.downlink,typeof S==="number")?S:5}function Rl(S){return S.nodeType===9?S:S.ownerDocument}function a5(S){switch(S){case Ie:return KO;case ge:return Zae;default:return yM}}function K4(S,M){if(S===yM)switch(M){case"svg":return KO;case"math":return Zae;default:return yM}return S===KO&&M==="foreignObject"?yM:S}function vm(S,M,R,G){return R=Rl(R).createElement(S),R[Gu]=G,R[_A]=M,n0(R,S,M),nn(R),R}function FC(S){if(S=S.type,typeof S!=="string"||S==="")return!1;if(S=S.toLowerCase(),S==="module"||S==="importmap"||S==="speculationrules")return!1;switch(S){case"application/ecmascript":case"application/javascript":case"application/x-ecmascript":case"application/x-javascript":case"text/ecmascript":case"text/javascript":case"text/javascript1.0":case"text/javascript1.1":case"text/javascript1.2":case"text/javascript1.3":case"text/javascript1.4":case"text/javascript1.5":case"text/jscript":case"text/livescript":case"text/x-ecmascript":case"text/x-javascript":return!1}return!0}function UP(S,M){return S==="textarea"||S==="noscript"||typeof M.children==="string"||typeof M.children==="number"||typeof M.children==="bigint"||typeof M.dangerouslySetInnerHTML==="object"&&M.dangerouslySetInnerHTML!==null&&M.dangerouslySetInnerHTML.__html!=null}function uw(){var S=window.event;if(S&&S.type==="popstate"){if(S===OPe)return!1;return OPe=S,!0}return OPe=null,!1}function B2(){var S=window.event;return S&&S!==hq?S.type:null}function b_(){var S=window.event;return S&&S!==hq?S.timeStamp:-1.1}function WP(S){setTimeout(function(){throw S})}function GN(S,M,R){switch(M){case"button":case"input":case"select":case"textarea":R.autoFocus&&S.focus();break;case"img":R.src?S.src=R.src:R.srcSet&&(S.srcset=R.srcSet)}}function hw(){}function mw(S,M,R,G){cj(S,M,R,G),S[_A]=G}function c5(S){Rr(S,"")}function YN(S,M,R){S.nodeValue=R}function XP(S){if(!S.__reactWarnedAboutChildrenConflict){var M=S[_A]||null;if(M!==null){var R=ln(S);R!==null&&(typeof M.children==="string"||typeof M.children==="number"?(S.__reactWarnedAboutChildrenConflict=!0,ye(R,function(){console.error('Cannot use a ref on a React element as a container to `createRoot` or `createPortal` if that element also sets "children" text content using React. It should be a leaf with no children. Otherwise it\'s ambiguous which children should be used.')})):M.dangerouslySetInnerHTML!=null&&(S.__reactWarnedAboutChildrenConflict=!0,ye(R,function(){console.error('Cannot use a ref on a React element as a container to `createRoot` or `createPortal` if that element also sets "dangerouslySetInnerHTML" using React. It should be a leaf with no children. Otherwise it\'s ambiguous which children should be used.')})))}}}function q1(S){return S==="head"}function l5(S,M){S.removeChild(M)}function KP(S,M){(S.nodeType===9?S.body:S.nodeName==="HTML"?S.ownerDocument.body:S).removeChild(M)}function VN(S,M){var R=M,G=0;do{var te=R.nextSibling;if(S.removeChild(R),te&&te.nodeType===8)if(R=te.data,R===uq||R===$ae){if(G===0){S.removeChild(te),Fd(M);return}G--}else if(R===dq||R===Kw||R===SR||R===XO||R===bR)G++;else if(R===cRn)zC(S.ownerDocument.documentElement);else if(R===dRn){R=S.ownerDocument.head,zC(R);for(var re=R.firstChild;re;){var Se=re.nextSibling,Me=re.nodeName;re[$1]||Me==="SCRIPT"||Me==="STYLE"||Me==="LINK"&&re.rel.toLowerCase()==="stylesheet"||R.removeChild(re),re=Se}}else R===lRn&&zC(S.ownerDocument.body);R=te}while(R);Fd(M)}function w2(S,M){var R=S;S=0;do{var G=R.nextSibling;if(R.nodeType===1?M?(R._stashedDisplay=R.style.display,R.style.display="none"):(R.style.display=R._stashedDisplay||"",R.getAttribute("style")===""&&R.removeAttribute("style")):R.nodeType===3&&(M?(R._stashedText=R.nodeValue,R.nodeValue=""):R.nodeValue=R._stashedText||""),G&&G.nodeType===8)if(R=G.data,R===uq)if(S===0)break;else S--;else R!==dq&&R!==Kw&&R!==SR&&R!==XO||S++;R=G}while(R)}function iO(S){w2(S,!0)}function Ag(S){S=S.style,typeof S.setProperty==="function"?S.setProperty("display","none","important"):S.display="none"}function jP(S){S.nodeValue=""}function qP(S){w2(S,!1)}function HC(S,M){M=M[Xtt],M=M!==void 0&&M!==null&&M.hasOwnProperty("display")?M.display:null,S.style.display=M==null||typeof M==="boolean"?"":(""+M).trim()}function T2(S,M){S.nodeValue=M}function d5(S){for(var M=S.firstChild;M!=null;){if(M.nodeType===1&&getComputedStyle(M).display==="block"){var R=ln(M)||ln(S);ye(R,function(G,te){console.error(`You're about to start a <ViewTransition> around a display: inline element <%s>, which itself has a display: block element <%s> inside it. This might trigger a bug in Safari which causes the View Transition to be skipped with a duplicate name error.
https://bugs.webkit.org/show_bug.cgi?id=290923`,G.toLocaleLowerCase(),te.toLocaleLowerCase())},S.tagName,M.tagName);break}if(M.firstChild!=null)M=M.firstChild;else{if(M===S)break;for(;M.nextSibling==null&&M.parentNode!=null&&M.parentNode!==S;)M=M.parentNode;M=M.nextSibling}}}function u5(S,M,R){if(M=CSS.escape(M)!==M?"r-"+btoa(M).replace(/=/g,""):M,S.style.viewTransitionName=M,R!=null&&(S.style.viewTransitionClass=R),R=getComputedStyle(S),R.display==="inline"){if(M=S.getClientRects(),M.length===1)var G=1;else for(var te=G=0;te<M.length;te++){var re=M[te];0<re.width&&0<re.height&&G++}G===1?(S=S.style,S.display=M.length===1?"inline-block":"block",S.marginTop="-"+R.paddingTop,S.marginBottom="-"+R.paddingBottom):d5(S)}}function D2(S,M){S=S.style,M=M[Xtt];var R=M!=null?M.hasOwnProperty("viewTransitionName")?M.viewTransitionName:M.hasOwnProperty("view-transition-name")?M["view-transition-name"]:null:null;S.viewTransitionName=R==null||typeof R==="boolean"?"":(""+R).trim(),R=M!=null?M.hasOwnProperty("viewTransitionClass")?M.viewTransitionClass:M.hasOwnProperty("view-transition-class")?M["view-transition-class"]:null:null,S.viewTransitionClass=R==null||typeof R==="boolean"?"":(""+R).trim(),S.display==="inline-block"&&(M==null?S.display=S.margin="":(R=M.display,S.display=R==null||typeof R==="boolean"?"":R,R=M.margin,R!=null?S.margin=R:(R=M.hasOwnProperty("marginTop")?M.marginTop:M["margin-top"],S.marginTop=R==null||typeof R==="boolean"?"":R,M=M.hasOwnProperty("marginBottom")?M.marginBottom:M["margin-bottom"],S.marginBottom=M==null||typeof M==="boolean"?"":M)))}function JP(S,M,R){return R=R.ownerDocument.defaultView,{rect:S,abs:M.position==="absolute"||M.position==="fixed",clip:M.clipPath!=="none"||M.overflow!=="visible"||M.filter!=="none"||M.mask!=="none"||M.mask!=="none"||M.borderRadius!=="0px",view:0<=S.bottom&&0<=S.right&&S.top<=R.innerHeight&&S.left<=R.innerWidth}}function $P(S){var M=S.getBoundingClientRect(),R=getComputedStyle(S);return JP(M,R,S)}function ZP(S){var M=S.getBoundingClientRect();M=new DOMRect(M.x+20000,M.y+20000,M.width,M.height);var R=getComputedStyle(S);return JP(M,R,S)}function pw(S,M){if(typeof S==="object"&&S!==null)switch(S.name){case"TimeoutError":return Error("A ViewTransition timed out because a Navigation stalled. This can happen if a Navigation is blocked on React itself. Such as if it's resolved inside useEffect. This can be solved by moving the resolution to useLayoutEffect.",{cause:S});case"AbortError":return M?null:Error("A ViewTransition was aborted early. This might be because you have other View Transition libraries on the page and only one can run at a time. To avoid this, use only React's built-in <ViewTransition> to coordinate.",{cause:S});case"InvalidStateError":if(S.message==="View transition was skipped because document visibility state is hidden."||S.message==="Skipping view transition because document visibility state has become hidden."||S.message==="Skipping view transition because viewport size changed."||S.message==="Transition was aborted because of invalid state")return null}return S}function j4(S){return S.documentElement.clientHeight}function Aw(S){this.addEventListener("load",S),this.addEventListener("error",S)}function ev(S,M,R,G,te,re,Se,Me,$e,dt,Bt){var qt=M.nodeType===9?M:M.ownerDocument;try{var Kt=qt.startViewTransition({update:function(){var ho=qt.defaultView,ui=ho.navigation&&ho.navigation.transition,Zi=qt.fonts.status;G();var Xs=[];if(Zi==="loaded"&&(j4(qt),qt.fonts.status==="loading"&&Xs.push(qt.fonts.ready)),Zi=Xs.length,S!==null)for(var Yt=S.suspenseyImages,Vt=0,Jt=0;Jt<Yt.length;Jt++){var Nn=Yt[Jt];if(!Nn.complete){var Bo=Nn.getBoundingClientRect();if(0<Bo.bottom&&0<Bo.right&&Bo.top<ho.innerHeight&&Bo.left<ho.innerWidth){if(Vt+=uo(Nn),Vt>tce){Xs.length=Zi;break}Nn=new Promise(Aw.bind(Nn)),Xs.push(Nn)}}}if(0<Xs.length)return dt(0<Zi?Xs.length>Zi?"Waiting on Fonts and Images":"Waiting on Fonts":"Waiting on Images"),ho=Promise.race([Promise.all(Xs),new Promise(function(Or){return setTimeout(Or,mRn)})]).then(te,te),(ui?Promise.allSettled([ui.finished,ho]):ho).then(re,re);if(te(),ui)return ui.finished.then(re,re);re()},types:R});qt.__reactViewTransition=Kt;var un=[];return Kt.ready.then(function(){for(var ho=qt.documentElement.getAnimations({subtree:!0}),ui=0;ui<ho.length;ui++){var Zi=ho[ui],Xs=Zi.effect,Yt=Xs.pseudoElement;if(Yt!=null&&Yt.startsWith("::view-transition")){un.push(Zi),Zi=Xs.getKeyframes();for(var Vt=Yt=void 0,Jt=!0,Nn=0;Nn<Zi.length;Nn++){var Bo=Zi[Nn],Or=Bo.width;if(Yt===void 0)Yt=Or;else if(Yt!==Or){Jt=!1;break}if(Or=Bo.height,Vt===void 0)Vt=Or;else if(Vt!==Or){Jt=!1;break}delete Bo.width,delete Bo.height,Bo.transform==="none"&&delete Bo.transform}Jt&&Yt!==void 0&&Vt!==void 0&&(Xs.setKeyframes(Zi),Jt=getComputedStyle(Xs.target,Xs.pseudoElement),Jt.width!==Yt||Jt.height!==Vt)&&(Jt=Zi[0],Jt.width=Yt,Jt.height=Vt,Jt=Zi[Zi.length-1],Jt.width=Yt,Jt.height=Vt,Xs.setKeyframes(Zi))}}Se()},function(ho){qt.__reactViewTransition===Kt&&(qt.__reactViewTransition=null);try{ho=pw(ho,!1),ho!==null&&$e(ho)}finally{G(),te(),Se(),Bt()}}),Kt.finished.finally(function(){for(var ho=0;ho<un.length;ho++)un[ho].cancel();qt.__reactViewTransition===Kt&&(qt.__reactViewTransition=null),Bt(),Me()}),Kt}catch(ho){return G(),te(),Bt(),Se(),null}}function O0(S,M){this._scope=document.documentElement,this._selector="::view-transition-"+S+"("+M+")"}function uA(S){return{name:S,group:new O0("group",S),imagePair:new O0("image-pair",S),old:new O0("old",S),new:new O0("new",S)}}function ql(S){this._fragmentFiber=S,this._observers=this._eventListeners=null}function z0(S,M,R,G){return Q(S).addEventListener(M,R,G),!1}function Lh(S,M,R,G){return Q(S).removeEventListener(M,R,G),!1}function Ql(S){return S!=null&&typeof S!=="boolean"&&(S.once===!0||S.signal instanceof AbortSignal)?{capture:S.capture,passive:S.passive}:S}function Em(S){return S==null?"c=0":typeof S==="boolean"?"c="+(S?"1":"0"):"c="+(S.capture?"1":"0")}function N2(S,M,R,G){if(S.length===0)return-1;G=Em(G);for(var te=0;te<S.length;te++){var re=S[te];if(re.type===M&&re.listener===R&&Em(re.optionsOrUseCapture)===G)return te}return-1}function q4(S,M){if(S.tag===6)return!1;return S=Q(S),Qn(S,M)}function J4(S,M){return M.push(S),!1}function UN(S,M){if(S.tag===6)return!1;return S=Q(S),S===M||S.contains(M)?(M.blur(),!0):!1}function $4(S,M){if(S.tag===6)return!1;return S=Q(S),M.observe(S),!1}function WN(S,M){if(S.tag===6)return!1;return S=Q(S),M.unobserve(S),!1}function R2(S,M,R){N5.push({fragmentInstance:S,observer:M,instance:R}),GPe||(GPe=!0,S_(function(){GPe=!1;var G=N5;N5=[];for(var te=0;te<G.length;te++){var re=G[te];re.observer.unobserve(re.instance)}}))}function XN(S,M){if(S.tag===6){S=S.stateNode;var R=S.ownerDocument.createRange();R.selectNodeContents(S),M.push.apply(M,R.getClientRects())}else S=Q(S),M.push.apply(M,S.getClientRects());return!1}function KN(S,M,R,G,te){var re=mn(te);if(S&Node.DOCUMENT_POSITION_CONTAINED_BY){if(R=!!re)e:{for(;re!==null;){if(re.tag===7&&(re===M||re.alternate===M)){R=!0;break e}re=re.return}R=!1}return R}if(S&Node.DOCUMENT_POSITION_CONTAINS){if(re===null)return re=te.ownerDocument,te===re||te===re.documentElement||te===re.body;e:{re=M;for(M=E(M);re!==null;){if(!(re.tag!==5&&re.tag!==3&&re.tag!==27||re!==M&&re.alternate!==M)){re=!0;break e}re=re.return}re=!1}return re}return S&Node.DOCUMENT_POSITION_PRECEDING?((M=!!re)&&!(M=re===R)&&(M=z(R,re,H),M===null?M=!1:(P(M,!0,N,re,R),re=H2,H2=null,M=re!==null)),M):S&Node.DOCUMENT_POSITION_FOLLOWING?((M=!!re)&&!(M=re===G)&&(M=z(G,re,H),M===null?M=!1:(P(M,!0,F,re,G),re=H2,nM=H2=null,M=re!==null)),M):!1}function _w(S,M){var R=S.ownerDocument.createRange();R.selectNodeContents(S),S=R.getBoundingClientRect(),window.scrollTo(window.scrollX+S.left,M?window.scrollY+S.top:window.scrollY+S.bottom-window.innerHeight)}function tv(S,M){return S=Q(S),nv(S,M),!1}function nv(S,M){S.reactFragments==null&&(S.reactFragments=new Set),S.reactFragments.add(M)}function h5(S,M){var R=M._eventListeners;if(R!==null)for(var G=0;G<R.length;G++){var te=R[G];S.addEventListener(te.type,te.attachedListener,Ql(te.optionsOrUseCapture))}S.nodeType!==3&&(R=M._observers,R!==null&&R.forEach(function(re){for(var Se=0,Me=0;Me<N5.length;Me++){var $e=N5[Me];if($e.fragmentInstance!==M||$e.observer!==re||$e.instance!==S)N5[Se++]=$e}N5.length=Se,re.observe(S)}),nv(S,M))}function rO(S,M){var R=M._eventListeners;if(R!==null)for(var G=0;G<R.length;G++){var te=R[G];S.removeEventListener(te.type,te.attachedListener,Ql(te.optionsOrUseCapture))}S.nodeType!==3&&(R=M._observers,R!==null&&R.forEach(function(re){typeof re.rootMargin==="string"?R2(M,re,S):re.unobserve(S)}),S.reactFragments!=null&&S.reactFragments.delete(M))}function gw(S){var M=S.firstChild;M&&M.nodeType===10&&(M=M.nextSibling);for(;M;){var R=M;switch(M=M.nextSibling,R.nodeName){case"HTML":case"HEAD":case"BODY":gw(R),Ot(R);continue;case"SCRIPT":case"STYLE":continue;case"LINK":if(R.rel.toLowerCase()==="stylesheet")continue}S.removeChild(R)}}function Z4(S,M,R,G){for(;S.nodeType===1;){var te=R;if(S.nodeName.toLowerCase()!==M.toLowerCase()){if(!G&&(S.nodeName!=="INPUT"||S.type!=="hidden"))break}else if(!G)if(M==="input"&&S.type==="hidden"){st(te.name,"name");var re=te.name==null?null:""+te.name;if(te.type==="hidden"&&S.getAttribute("name")===re)return S}else return S;else if(!S[$1])switch(M){case"meta":if(!S.hasAttribute("itemprop"))break;return S;case"link":if(re=S.getAttribute("rel"),re==="stylesheet"&&S.hasAttribute("data-precedence"))break;else if(re!==te.rel||S.getAttribute("href")!==(te.href==null||te.href===""?null:te.href)||S.getAttribute("crossorigin")!==(te.crossOrigin==null?null:te.crossOrigin)||S.getAttribute("title")!==(te.title==null?null:te.title))break;return S;case"style":if(S.hasAttribute("data-precedence"))break;return S;case"script":if(re=S.getAttribute("src"),(re!==(te.src==null?null:te.src)||S.getAttribute("type")!==(te.type==null?null:te.type)||S.getAttribute("crossorigin")!==(te.crossOrigin==null?null:te.crossOrigin))&&re&&S.hasAttribute("async")&&!S.hasAttribute("itemprop"))break;return S;default:return S}if(S=G0(S.nextSibling),S===null)break}return null}function sO(S,M,R){if(M==="")return null;for(;S.nodeType!==3;){if((S.nodeType!==1||S.nodeName!=="INPUT"||S.type!=="hidden")&&!R)return null;if(S=G0(S.nextSibling),S===null)return null}return S}function Q2(S,M){for(;S.nodeType!==8;){if((S.nodeType!==1||S.nodeName!=="INPUT"||S.type!=="hidden")&&!M)return null;if(S=G0(S.nextSibling),S===null)return null}return S}function Dr(S){return S.data===Kw||S.data===SR}function gc(S){return S.data===XO||S.data===Kw&&S.ownerDocument.readyState!==Wtt}function Fu(S,M){var R=S.ownerDocument;if(S.data===SR)S._reactRetry=M;else if(S.data!==Kw||R.readyState!==Wtt)M();else{var G=function(){M(),R.removeEventListener("DOMContentLoaded",G)};R.addEventListener("DOMContentLoaded",G),S._reactRetry=G}}function G0(S){for(;S!=null;S=S.nextSibling){var M=S.nodeType;if(M===1||M===3)break;if(M===8){if(M=S.data,M===dq||M===XO||M===Kw||M===SR||M===bR||M===LPe||M===Utt)break;if(M===uq||M===$ae)return null}}return S}function OC(S){if(S.nodeType===1){for(var M=S.nodeName.toLowerCase(),R={},G=S.attributes,te=0;te<G.length;te++){var re=G[te];R[H0(re.name)]=re.name.toLowerCase()==="style"?Bc(S):re.value}return{type:M,props:R}}return S.nodeType===8?S.data===bR?{type:"Activity",props:{}}:{type:"Suspense",props:{}}:S.nodeValue}function k2(S,M,R){return R===null||R[aRn]!==!0?(S.nodeValue===M?S=null:(M=Zs(M),S=Zs(S.nodeValue)===M?null:S.nodeValue),S):null}function L2(S){S=S.nextSibling;for(var M=0;S;){if(S.nodeType===8){var R=S.data;if(R===uq||R===$ae){if(M===0)return G0(S.nextSibling);M--}else R!==dq&&R!==XO&&R!==Kw&&R!==SR&&R!==bR||M++}S=S.nextSibling}return null}function m5(S){S=S.previousSibling;for(var M=0;S;){if(S.nodeType===8){var R=S.data;if(R===dq||R===XO||R===Kw||R===SR||R===bR){if(M===0)return S;M--}else R!==uq&&R!==$ae||M++}S=S.previousSibling}return null}function J1(S){Fd(S)}function aO(S){Fd(S)}function cO(S){Fd(S)}function Qn(S,M){function R(){G=!0}if(S.ownerDocument.activeElement===S)return!0;var G=!1;try{S.ownerDocument.addEventListener("focus",R,!0),(S.focus||HTMLElement.prototype.focus).call(S,M)}finally{S.ownerDocument.removeEventListener("focus",R,!0)}return G}function S_(S){Jtt(function(){Jtt(function(M){return S(M)})})}function hA(S,M,R,G,te){switch(te&&tu(S,G.ancestorInfo),M=Rl(R),S){case"html":if(S=M.documentElement,!S)throw Error("React expected an <html> element (document.documentElement) to exist in the Document but one was not found. React never removes the documentElement for any Document it renders into so the cause is likely in some other script running on this page.");return S;case"head":if(S=M.head,!S)throw Error("React expected a <head> element (document.head) to exist in the Document but one was not found. React never removes the head for any Document it renders into so the cause is likely in some other script running on this page.");return S;case"body":if(S=M.body,!S)throw Error("React expected a <body> element (document.body) to exist in the Document but one was not found. React never removes the body for any Document it renders into so the cause is likely in some other script running on this page.");return S;default:throw Error("resolveSingletonInstance was called with an element type that is not supported. This is a bug in React.")}}function eM(S,M,R,G){if(!R[I5]&&ln(R)){var te=R.tagName.toLowerCase();console.error("You are mounting a new %s component when a previous one has not first unmounted. It is an error to render more than one %s component at a time and attributes and children of these components will likely fail in unpredictable ways. Please only render a single instance of <%s> and if you need to mount a new one, ensure any previous ones have unmounted first.",te,te,te)}switch(S){case"html":case"head":case"body":break;default:console.error("acquireSingletonInstance was called with an element type that is not supported. This is a bug in React.")}for(te=R.attributes;te.length;)R.removeAttributeNode(te[0]);n0(R,S,M),R[Gu]=G,R[_A]=M}function ov(S,M,R){for(var G in R){var te=R[G];R.hasOwnProperty(G)&&te!=null&&Mc(S,M,G,null,rRn,te)}R.dangerouslySetInnerHTML!=null&&(S.textContent=""),S.onclick===Dd&&(S.onclick=null),Ot(S)}function zC(S){for(var M=S.attributes;M.length;)S.removeAttributeNode(M[0]);Ot(S)}function p5(S){if(typeof S.getRootNode==="function"){var M=S.getRootNode();if(M.nodeType===9||M.nodeType===11)return M}return S.nodeType===9?S:S.ownerDocument}function fw(S,M,R){var G=jO;if(G&&typeof M==="string"&&M){var te=Wn(M);te='link[rel="'+S+'"][href="'+te+'"]',typeof R==="string"&&(te+='[crossorigin="'+R+'"]'),ent.has(te)||(ent.add(te),S={rel:S,crossOrigin:R,href:M},G.querySelector(te)===null&&(M=G.createElement("link"),n0(M,"link",S),nn(M),G.head.appendChild(M)))}}function iv(S,M,R,G){var te=(te=pA.current)?p5(te):null;if(!te)throw Error('"resourceRoot" was expected to exist. This is a bug in React.');switch(S){case"meta":case"title":return null;case"style":return typeof R.precedence==="string"&&typeof R.href==="string"?(R=Fh(R.href),M=vn(te).hoistableStyles,G=M.get(R),G||(G={type:"style",instance:null,count:0,state:null},M.set(R,G)),G):{type:"void",instance:null,count:0,state:null};case"link":if(R.rel==="stylesheet"&&typeof R.href==="string"&&typeof R.precedence==="string"){S=Fh(R.href);var re=vn(te).hoistableStyles,Se=re.get(S);if(Se||(te=te.ownerDocument||te,Se={type:"stylesheet",instance:null,count:0,state:{loading:vR,preload:null}},re.set(S,Se),(re=te.querySelector(lu(S)))?re._p||(Se.instance=re,Se.state.loading=mq|rI):(re=sI.get(S),re||(re={rel:"preload",as:"style",href:R.href,crossOrigin:R.crossOrigin,integrity:R.integrity,media:R.media,hrefLang:R.hrefLang,referrerPolicy:R.referrerPolicy},sI.set(S,re)),yw(te,S,re,Se.state))),M&&G===null)throw R=`
- `+Hu(M)+`
+ `+Hu(R),Error("Expected <link> not to update to be updated to a stylesheet with precedence. Check the `rel`, `href`, and `precedence` props of this component. Alternatively, check whether two different <link> components render in the same slot or share the same key."+R);return Se}if(M&&G!==null)throw R=`
- `+Hu(M)+`
+ `+Hu(R),Error("Expected stylesheet with precedence to not be updated to a different kind of <link>. Check the `rel`, `href`, and `precedence` props of this component. Alternatively, check whether two different <link> components render in the same slot or share the same key."+R);return null;case"script":return M=R.async,R=R.src,typeof R==="string"&&M&&typeof M!=="function"&&typeof M!=="symbol"?(R=O(R),M=vn(te).hoistableScripts,G=M.get(R),G||(G={type:"script",instance:null,count:0,state:null},M.set(R,G)),G):{type:"void",instance:null,count:0,state:null};default:throw Error('getResource encountered a type it did not expect: "'+S+'". this is a bug in React.')}}function Hu(S){var M=0,R="<link";return typeof S.rel==="string"?(M++,R+=' rel="'+S.rel+'"'):fg.call(S,"rel")&&(M++,R+=' rel="'+(S.rel===null?"null":"invalid type "+typeof S.rel)+'"'),typeof S.href==="string"?(M++,R+=' href="'+S.href+'"'):fg.call(S,"href")&&(M++,R+=' href="'+(S.href===null?"null":"invalid type "+typeof S.href)+'"'),typeof S.precedence==="string"?(M++,R+=' precedence="'+S.precedence+'"'):fg.call(S,"precedence")&&(M++,R+=" precedence={"+(S.precedence===null?"null":"invalid type "+typeof S.precedence)+"}"),Object.getOwnPropertyNames(S).length>M&&(R+=" ..."),R+" />"}function Fh(S){return'href="'+Wn(S)+'"'}function lu(S){return'link[rel="stylesheet"]['+S+"]"}function A5(S){return Qs({},S,{"data-precedence":S.precedence,precedence:null})}function yw(S,M,R,G){if(M=S.querySelector('link[rel="preload"][as="style"]['+M+"]")){if(M[b5]!==!0){G.loading=mq;return}}else M=S.createElement("link"),M[b5]=!0,M.onload=M.onerror=on.bind(null,M),n0(M,"link",R),nn(M),S.head.appendChild(M);G.preload=M,M.addEventListener("load",function(){return G.loading|=mq}),M.addEventListener("error",function(){return G.loading|=$tt})}function O(S){return'[src="'+Wn(S)+'"]'}function ae(S){return"script[async]"+S}function pe(S,M,R){if(M.count++,M.instance===null)switch(M.type){case"style":var G=S.querySelector('style[data-href~="'+Wn(R.href)+'"]');if(G)return M.instance=G,nn(G),G;var te=Qs({},R,{"data-href":R.href,"data-precedence":R.precedence,href:null,precedence:null});return G=(S.ownerDocument||S).createElement("style"),nn(G),n0(G,"style",te),Ne(G,R.precedence,S),M.instance=G;case"stylesheet":te=Fh(R.href);var re=S.querySelector(lu(te));if(re)return M.state.loading|=rI,M.instance=re,nn(re),re;G=A5(R),(te=sI.get(te))&&Ke(G,te),re=(S.ownerDocument||S).createElement("link"),nn(re);var Se=re;return Se._p=new Promise(function(Me,$e){Se.onload=Me,Se.onerror=$e}),n0(re,"link",G),M.state.loading|=rI,Ne(re,R.precedence,S),M.instance=re;case"script":if(re=O(R.src),te=S.querySelector(ae(re)))return M.instance=te,nn(te),te;if(G=R,te=sI.get(re))G=Qs({},R),pt(G,te);return S=S.ownerDocument||S,te=S.createElement("script"),nn(te),n0(te,"link",G),S.head.appendChild(te),M.instance=te;case"void":return null;default:throw Error('acquireResource encountered a resource type it did not expect: "'+M.type+'". this is a bug in React.')}else M.type==="stylesheet"&&(M.state.loading&rI)===vR&&(G=M.instance,M.state.loading|=rI,Ne(G,R.precedence,S));return M.instance}function Ne(S,M,R){for(var G=R.querySelectorAll('link[rel="stylesheet"][data-precedence],style[data-precedence]'),te=G.length?G[G.length-1]:null,re=te,Se=0;Se<G.length;Se++){var Me=G[Se];if(Me.dataset.precedence===M)re=Me;else if(re!==te)break}re?re.parentNode.insertBefore(S,re.nextSibling):(M=R.nodeType===9?R.head:R,M.insertBefore(S,M.firstChild))}function Ke(S,M){S.crossOrigin==null&&(S.crossOrigin=M.crossOrigin),S.referrerPolicy==null&&(S.referrerPolicy=M.referrerPolicy),S.title==null&&(S.title=M.title)}function pt(S,M){S.crossOrigin==null&&(S.crossOrigin=M.crossOrigin),S.referrerPolicy==null&&(S.referrerPolicy=M.referrerPolicy),S.integrity==null&&(S.integrity=M.integrity)}function xt(S,M,R){if(ece===null){var G=new Map,te=ece=new Map;te.set(R,G)}else te=ece,G=te.get(R),G||(G=new Map,te.set(R,G));if(G.has(S))return G;G.set(S,null),R=R.getElementsByTagName(S);for(te=0;te<R.length;te++){var re=R[te];if(!(re[$1]||re[Gu]||S==="link"&&re.getAttribute("rel")==="stylesheet")&&re.namespaceURI!==Ie){var Se=re.getAttribute(M)||"";Se=S+Se;var Me=G.get(Se);Me?Me.push(re):G.set(Se,[re])}}return G}function St(S,M,R){S=S.ownerDocument||S,S.head.insertBefore(R,M==="title"?S.querySelector("head > title"):null)}function Ft(S,M,R){var G=!R.ancestorInfo.containerTagInScope;if(R.context===KO||M.itemProp!=null)return!G||M.itemProp==null||S!=="meta"&&S!=="title"&&S!=="style"&&S!=="link"&&S!=="script"||console.error("Cannot render a <%s> outside the main document if it has an `itemProp` prop. `itemProp` suggests the tag belongs to an `itemScope` which can appear anywhere in the DOM. If you were intending for React to hoist this <%s> remove the `itemProp` prop. Otherwise, try moving this tag into the <head> or <body> of the Document.",S,S),!1;switch(S){case"meta":case"title":return!0;case"style":if(typeof M.precedence!=="string"||typeof M.href!=="string"||M.href===""){G&&console.error('Cannot render a <style> outside the main document without knowing its precedence and a unique href key. React can hoist and deduplicate <style> tags if you provide a `precedence` prop along with an `href` prop that does not conflict with the `href` values used in any other hoisted <style> or <link rel="stylesheet" ...> tags. Note that hoisting <style> tags is considered an advanced feature that most will not use directly. Consider moving the <style> tag to the <head> or consider adding a `precedence="default"` and `href="some unique resource identifier"`.');break}return!0;case"link":if(typeof M.rel!=="string"||typeof M.href!=="string"||M.href===""||M.onLoad||M.onError){if(M.rel==="stylesheet"&&typeof M.precedence==="string"){S=M.href;var te=M.onError,re=M.disabled;R=[],M.onLoad&&R.push("`onLoad`"),te&&R.push("`onError`"),re!=null&&R.push("`disabled`"),te=lj(R,"and"),te+=R.length===1?" prop":" props",re=R.length===1?"an "+te:"the "+te,R.length&&console.error('React encountered a <link rel="stylesheet" href="%s" ... /> with a `precedence` prop that also included %s. The presence of loading and error handlers indicates an intent to manage the stylesheet loading state from your from your Component code and React will not hoist or deduplicate this stylesheet. If your intent was to have React hoist and deduplciate this stylesheet using the `precedence` prop remove the %s, otherwise remove the `precedence` prop.',S,re,te)}G&&(typeof M.rel!=="string"||typeof M.href!=="string"||M.href===""?console.error("Cannot render a <link> outside the main document without a `rel` and `href` prop. Try adding a `rel` and/or `href` prop to this <link> or moving the link into the <head> tag"):(M.onError||M.onLoad)&&console.error("Cannot render a <link> with onLoad or onError listeners outside the main document. Try removing onLoad={...} and onError={...} or moving it into the root <head> tag or somewhere in the <body>."));break}switch(M.rel){case"stylesheet":return S=M.precedence,M=M.disabled,typeof S!=="string"&&G&&console.error('Cannot render a <link rel="stylesheet" /> outside the main document without knowing its precedence. Consider adding precedence="default" or moving it into the root <head> tag.'),typeof S==="string"&&M==null;default:return!0}case"script":if(S=M.async&&typeof M.async!=="function"&&typeof M.async!=="symbol",!S||M.onLoad||M.onError||!M.src||typeof M.src!=="string"){G&&(S?M.onLoad||M.onError?console.error("Cannot render a <script> with onLoad or onError listeners outside the main document. Try removing onLoad={...} and onError={...} or moving it into the root <head> tag or somewhere in the <body>."):console.error("Cannot render a <script> outside the main document without `async={true}` and a non-empty `src` prop. Ensure there is a valid `src` and either make the script async or move it into the root <head> tag or somewhere in the <body>."):console.error('Cannot render a sync or defer <script> outside the main document without knowing its order. Try adding async="" or moving it into the root <head> tag.'));break}return!0;case"noscript":case"template":G&&console.error("Cannot render <%s> outside the main document. Try moving it into the root <head> tag.",S)}return!1}function Pn(S,M){return S==="img"&&M.src!=null&&M.src!==""&&M.onLoad==null&&M.loading!=="lazy"}function Xn(S){return S.type==="stylesheet"&&(S.state.loading&Ztt)===vR?!1:!0}function uo(S){return(S.width||100)*(S.height||100)*(typeof devicePixelRatio==="number"?devicePixelRatio:1)*0.25}function Uo(S,M){typeof M.decode==="function"&&(S.imgCount++,M.complete||(S.imgBytes+=uo(M),S.suspenseyImages.push(M)),S=hi.bind(S),M.decode().then(S,S))}function Ci(S,M,R,G){if(R.type==="stylesheet"&&(typeof G.media!=="string"||matchMedia(G.media).matches!==!1)&&(R.state.loading&rI)===vR){if(R.instance===null){var te=Fh(G.href),re=M.querySelector(lu(te));if(re){M=re._p,M!==null&&typeof M==="object"&&typeof M.then==="function"&&(S.count++,S=Ei.bind(S),M.then(S,S)),R.state.loading|=rI,R.instance=re,nn(re);return}re=M.ownerDocument||M,G=A5(G),(te=sI.get(te))&&Ke(G,te),re=re.createElement("link"),nn(re);var Se=re;Se._p=new Promise(function(Me,$e){Se.onload=Me,Se.onerror=$e}),n0(re,"link",G),R.instance=re}S.stylesheets===null&&(S.stylesheets=new Map),S.stylesheets.set(R,M),(M=R.state.preload)&&(R.state.loading&Ztt)===vR&&(S.count++,R=Ei.bind(S),M.addEventListener("load",R),M.addEventListener("error",R))}}function Sr(S,M){return S.stylesheets&&S.count===0&&mo(S,S.stylesheets),0<S.count||0<S.imgCount?function(R){var G=setTimeout(function(){if(S.stylesheets&&mo(S,S.stylesheets),S.unsuspend){var re=S.unsuspend;S.unsuspend=null,re()}},pRn+M);0<S.imgBytes&&tce===0&&(tce=125*dj()*_Rn);var te=setTimeout(function(){if(S.waitingForImages=!1,S.count===0&&(S.stylesheets&&mo(S,S.stylesheets),S.unsuspend)){var re=S.unsuspend;S.unsuspend=null,re()}},(S.imgBytes>tce?50:ARn)+M);return S.unsuspend=R,function(){S.unsuspend=null,clearTimeout(G),clearTimeout(te)}}:null}function ji(S){if(S.count===0&&(S.imgCount===0||!S.waitingForImages)){if(S.stylesheets)mo(S,S.stylesheets);else if(S.unsuspend){var M=S.unsuspend;S.unsuspend=null,M()}}}function Ei(){this.count--,ji(this)}function hi(){this.imgCount--,ji(this)}function mo(S,M){S.stylesheets=null,S.unsuspend!==null&&(S.count++,nce=new Map,M.forEach(vo,S),nce=null,Ei.call(S))}function vo(S,M){if(!(M.state.loading&rI)){var R=nce.get(S);if(R)var G=R.get(VPe);else{R=new Map,nce.set(S,R);for(var te=S.querySelectorAll("link[data-precedence],style[data-precedence]"),re=0;re<te.length;re++){var Se=te[re];if(Se.nodeName==="LINK"||Se.getAttribute("media")!=="not all")R.set(Se.dataset.precedence,Se),G=Se}G&&R.set(VPe,G)}te=M.instance,Se=te.getAttribute("data-precedence"),re=R.get(Se)||G,re===G&&R.set(VPe,te),R.set(Se,te),this.count++,G=Ei.bind(this),te.addEventListener("load",G),te.addEventListener("error",G),re?re.parentNode.insertBefore(te,re.nextSibling):(S=S.nodeType===9?S.head:S,S.insertBefore(te,S.firstChild)),M.state.loading|=rI}}function ls(S,M,R,G,te,re,Se,Me,$e){this.tag=1,this.containerInfo=S,this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=PR,this.callbackNode=this.next=this.pendingContext=this.context=this.cancelPendingCommit=null,this.callbackPriority=0,this.expirationTimes=Re(-1),this.entangledLanes=this.shellSuspendCounter=this.errorRecoveryDisabledLanes=this.expiredLanes=this.warmLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=Re(0),this.hiddenUpdates=Re(null),this.identifierPrefix=G,this.onUncaughtError=te,this.onCaughtError=re,this.onRecoverableError=Se,this.pooledCache=null,this.pooledCacheLanes=0,this.formState=$e,this.transitionTypes=null,this.incompleteTransitions=new Map,this.passiveEffectDuration=this.effectDuration=-0,this.memoizedUpdaters=new Set,S=this.pendingUpdatersLaneMap=[];for(M=0;31>M;M++)S.push(new Set);this._debugRootType=R?"hydrateRoot()":"createRoot()"}function fl(S,M,R,G,te,re,Se,Me,$e,dt,Bt,qt){return S=new ls(S,M,R,Se,$e,dt,Bt,qt,Me),M=ONn,re===!0&&(M|=xg|v5),M|=na,re=h(3,null,null,M),S.current=re,re.stateNode=S,M=H1(),C2(M),S.pooledCache=M,C2(M),re.memoizedState={element:G,isDehydrated:R,cache:M},AP(re),S}function o0(S){if(!S)return Rw;return S=Rw,S}function GC(S,M,R,G,te,re){if(Fl&&typeof Fl.onScheduleFiberRoot==="function")try{Fl.onScheduleFiberRoot(Av,G,R)}catch(Se){AA||(AA=!0,console.error("React instrumentation encountered an error: %o",Se))}te=o0(te),G.context===null?G.context=te:G.pendingContext=te,Y2&&bp!==null&&!int&&(int=!0,console.error(`Render methods should be a pure function of props and state; triggering nested component updates from render is not allowed. If necessary, trigger nested updates in componentDidUpdate.
Check the render method of %s.`,V(bp)||"Unknown")),G=Ac(M),G.payload={element:R},re=re===void 0?null:re,re!==null&&(typeof re!=="function"&&console.error("Expected the last optional `callback` argument to be a function. Instead received: %s.",re),G.callback=re),R=mC(S,G,M),R!==null&&(l_(M,"root.render()",null),Ld(R,S,M),S4(R,S,M))}function Cp(S,M){if(S=S.memoizedState,S!==null&&S.dehydrated!==null){var R=S.retryLane;S.retryLane=R!==0&&R<M?R:M}}function Tf(S,M){Cp(S,M),(S=S.alternate)&&Cp(S,M)}function Y0(S){if(S.tag===13||S.tag===31){var M=Sn(S,67108864);M!==null&&Ld(M,S,67108864),Tf(S,67108864)}}function Df(S){if(S.tag===13||S.tag===31){var M=L0(S);M=Oe(M);var R=Sn(S,M);R!==null&&Ld(R,S,M),Tf(S,M)}}function YC(){return bp}function VC(S,M,R,G){var te=Dn.T;Dn.T=null;var re=ac.p;try{ac.p=X0,UC(S,M,R,G)}finally{ac.p=re,Dn.T=te}}function kl(S,M,R,G){var te=Dn.T;Dn.T=null;var re=ac.p;try{ac.p=Mm,UC(S,M,R,G)}finally{ac.p=re,Dn.T=te}}function UC(S,M,R,G){if(JO){var te=_5(G);if(te===null)i5(S,M,G,ice,R),xw(S,G);else if(lO(te,S,M,R,G))G.stopPropagation();else if(xw(S,G),M&4&&-1<fRn.indexOf(S)){for(;te!==null;){var re=ln(te);if(re!==null)switch(re.tag){case 3:if(re=re.stateNode,re.current.memoizedState.isDehydrated){var Se=Dt(re.pendingLanes);if(Se!==0){var Me=re;Me.pendingLanes|=2;for(Me.entangledLanes|=2;Se;){var $e=1<<31-yl(Se);Me.entanglements[1]|=$e,Se&=~$e}mg(re),(fc&(Pp|K2))===IA&&(Fae=Qr()+Ntt,zP(0,!1))}}break;case 31:case 13:Me=Sn(re,2),Me!==null&&Ld(Me,re,2),Zb(),Tf(re,2)}if(re=_5(G),re===null&&i5(S,M,G,ice,R),re===te)break;te=re}te!==null&&G.stopPropagation()}else i5(S,M,G,null,R)}}function _5(S){return S=tA(S),tM(S)}function tM(S){if(ice=null,S=mn(S),S!==null){var M=_(S);if(M===null)S=null;else{var R=M.tag;if(R===13){if(S=f(M),S!==null)return S;S=null}else if(R===31){if(S=y(M),S!==null)return S;S=null}else if(R===3){if(M.stateNode.current.memoizedState.isDehydrated)return M.tag===3?M.stateNode.containerInfo:null;S=null}else M!==S&&(S=null)}}return ice=S,null}function g5(S){switch(S){case"beforetoggle":case"cancel":case"click":case"close":case"contextmenu":case"copy":case"cut":case"auxclick":case"dblclick":case"dragend":case"dragstart":case"drop":case"focusin":case"focusout":case"input":case"invalid":case"keydown":case"keypress":case"keyup":case"mousedown":case"mouseup":case"paste":case"pause":case"play":case"pointercancel":case"pointerdown":case"pointerup":case"ratechange":case"reset":case"seeked":case"submit":case"toggle":case"touchcancel":case"touchend":case"touchstart":case"volumechange":case"change":case"selectionchange":case"textInput":case"compositionstart":case"compositionend":case"compositionupdate":case"beforeblur":case"afterblur":case"beforeinput":case"blur":case"fullscreenchange":case"fullscreenerror":case"focus":case"hashchange":case"popstate":case"select":case"selectstart":return X0;case"drag":case"dragenter":case"dragexit":case"dragleave":case"dragover":case"mousemove":case"mouseout":case"mouseover":case"pointermove":case"pointerout":case"pointerover":case"resize":case"scroll":case"touchmove":case"wheel":case"mouseenter":case"mouseleave":case"pointerenter":case"pointerleave":return Mm;case"message":switch(Rf()){case KC:return X0;case uv:return Mm;case hv:case jC:return qC;case du:return AO;default:return qC}default:return qC}}function xw(S,M){switch(S){case"focusin":case"focusout":jw=null;break;case"dragenter":case"dragleave":qw=null;break;case"mouseover":case"mouseout":Jw=null;break;case"pointerover":case"pointerout":pq.delete(M.pointerId);break;case"gotpointercapture":case"lostpointercapture":Aq.delete(M.pointerId)}}function f5(S,M,R,G,te,re){if(S===null||S.nativeEvent!==re)return S={blockedOn:M,domEventName:R,eventSystemFlags:G,nativeEvent:re,targetContainers:[te]},M!==null&&(M=ln(M),M!==null&&Y0(M)),S;return S.eventSystemFlags|=G,M=S.targetContainers,te!==null&&M.indexOf(te)===-1&&M.push(te),S}function lO(S,M,R,G,te){switch(M){case"focusin":return jw=f5(jw,S,M,R,G,te),!0;case"dragenter":return qw=f5(qw,S,M,R,G,te),!0;case"mouseover":return Jw=f5(Jw,S,M,R,G,te),!0;case"pointerover":var re=te.pointerId;return pq.set(re,f5(pq.get(re)||null,S,M,R,G,te)),!0;case"gotpointercapture":return re=te.pointerId,Aq.set(re,f5(Aq.get(re)||null,S,M,R,G,te)),!0}return!1}function Cw(S){var M=mn(S.target);if(M!==null){var R=_(M);if(R!==null){if(M=R.tag,M===13){if(M=f(R),M!==null){S.blockedOn=M,Nt(S.priority,function(){Df(R)});return}}else if(M===31){if(M=y(R),M!==null){S.blockedOn=M,Nt(S.priority,function(){Df(R)});return}}else if(M===3&&R.stateNode.current.memoizedState.isDehydrated){S.blockedOn=R.tag===3?R.stateNode.containerInfo:null;return}}}S.blockedOn=null}function Ip(S){if(S.blockedOn!==null)return!1;for(var M=S.targetContainers;0<M.length;){var R=_5(S.nativeEvent);if(R===null){R=S.nativeEvent;var G=new R.constructor(R.type,R),te=G;$t!==null&&console.error("Expected currently replaying event to be null. This error is likely caused by a bug in React. Please file an issue."),$t=te,R.target.dispatchEvent(G),$t===null&&console.error("Expected currently replaying event to not be null. This error is likely caused by a bug in React. Please file an issue."),$t=null}else return M=ln(R),M!==null&&Y0(M),S.blockedOn=R,!1;M.shift()}return!0}function Iw(S,M,R){Ip(S)&&R.delete(M)}function V0(){UPe=!1,jw!==null&&Ip(jw)&&(jw=null),qw!==null&&Ip(qw)&&(qw=null),Jw!==null&&Ip(Jw)&&(Jw=null),pq.forEach(Iw),Aq.forEach(Iw)}function U0(S,M){S.blockedOn===M&&(S.blockedOn=null,UPe||(UPe=!0,Tc.unstable_scheduleCallback(Tc.unstable_NormalPriority,V0)))}function WC(S){rce!==S&&(rce=S,Tc.unstable_scheduleCallback(Tc.unstable_NormalPriority,function(){rce===S&&(rce=null);for(var M=0;M<S.length;M+=3){var R=S[M],G=S[M+1],te=S[M+2];if(typeof G!=="function")if(tM(G||R)===null)continue;else break;var re=ln(R);re!==null&&(S.splice(M,3),M-=3,R={pending:!0,data:te,method:R.method,action:G},Object.freeze(R),F9(re,R,G,te))}}))}function Fd(S){function M($e){return U0($e,S)}jw!==null&&U0(jw,S),qw!==null&&U0(qw,S),Jw!==null&&U0(Jw,S),pq.forEach(M),Aq.forEach(M);for(var R=0;R<$w.length;R++){var G=$w[R];G.blockedOn===S&&(G.blockedOn=null)}for(;0<$w.length&&(R=$w[0],R.blockedOn===null);)Cw(R),R.blockedOn===null&&$w.shift();if(R=(S.ownerDocument||S).$$reactFormReplay,R!=null)for(G=0;G<R.length;G+=3){var te=R[G],re=R[G+1],Se=te[_A]||null;if(typeof re==="function")Se||WC(R);else if(Se){var Me=null;if(re&&re.hasAttribute("formAction")){if(te=re,Se=re[_A]||null)Me=Se.formAction;else if(tM(te)!==null)continue}else Me=Se.action;typeof Me==="function"?R[G+1]=Me:(R.splice(G,3),G-=3),WC(R)}}}function _g(){function S(re){re.canIntercept&&re.info==="react-transition"&&re.intercept({handler:function(){return new Promise(function(Se){return te=Se})},focusReset:"manual",scroll:"manual"})}function M(){te!==null&&(te(),te=null),G||setTimeout(R,20)}function R(){if(!G&&!navigation.transition){var re=navigation.currentEntry;re&&re.url!=null&&navigation.navigate(re.url,{state:re.getState(),info:"react-transition",history:"replace"})}}if(typeof navigation==="object"){var G=!1,te=null;return navigation.addEventListener("navigate",S),navigation.addEventListener("navigatesuccess",M),navigation.addEventListener("navigateerror",M),setTimeout(R,100),function(){G=!0,navigation.removeEventListener("navigate",S),navigation.removeEventListener("navigatesuccess",M),navigation.removeEventListener("navigateerror",M),te!==null&&(te(),te=null)}}}function Nf(S){this._internalRoot=S}function Xc(S){this._internalRoot=S}function F2(S){S[I5]&&(S._reactRootContainer?console.error("You are calling ReactDOMClient.createRoot() on a container that was previously passed to ReactDOM.render(). This is not supported."):console.error("You are calling ReactDOMClient.createRoot() on a container that has already been passed to createRoot() before. Instead, call root.render() on the existing root instead if you want to update it."))}typeof __REACT_DEVTOOLS_GLOBAL_HOOK__<"u"&&typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart==="function"&&__REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(Error());var H2=null,nM=null,Qs=Object.assign,bw=Symbol.for("react.element"),O2=Symbol.for("react.transitional.element"),rv=Symbol.for("react.portal"),sv=Symbol.for("react.fragment"),jN=Symbol.for("react.strict_mode"),dO=Symbol.for("react.profiler"),z2=Symbol.for("react.consumer"),Kc=Symbol.for("react.context"),Sw=Symbol.for("react.forward_ref"),uO=Symbol.for("react.suspense"),i0=Symbol.for("react.suspense_list"),y5=Symbol.for("react.memo"),W0=Symbol.for("react.lazy"),dh=Symbol.for("react.activity"),gg=Symbol.for("react.legacy_hidden"),G2=Symbol.for("react.memo_cache_sentinel"),av=Symbol.for("react.view_transition"),wSe=Symbol.for("react.recoverable"),qN=Symbol.iterator,hO=Symbol.for("react.client.reference"),uh=Array.isArray,Dn=tz.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,ac=KPe.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,JN=Object.freeze({pending:!1,data:null,method:null,action:null}),Pw=[],uj=[],Ou=-1,zu=W(null),mA=W(null),pA=W(null),cv=W(null),XC=0,mO,lv,$N,hj,Ma,Ll,ea;se.__reactDisabledLog=!0;var ta,P_,oM=!1,x5=new(typeof WeakMap==="function"?WeakMap:Map),bp=null,Y2=!1,fg=Object.prototype.hasOwnProperty,dv=Tc.unstable_scheduleCallback,ZN=Tc.unstable_cancelCallback,mj=Tc.unstable_shouldYield,iM=Tc.unstable_requestPaint,Qr=Tc.unstable_now,Rf=Tc.unstable_getCurrentPriorityLevel,KC=Tc.unstable_ImmediatePriority,uv=Tc.unstable_UserBlockingPriority,hv=Tc.unstable_NormalPriority,jC=Tc.unstable_LowPriority,du=Tc.unstable_IdlePriority,mv=Tc.log,pv=Tc.unstable_setDisableYieldValue,Av=null,Fl=null,AA=!1,yg=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__<"u",yl=Math.clz32?Math.clz32:wt,{log:pO,LN2:pj}=Math,eR=256,_v=262144,vw=4194304,X0=2,Mm=8,qC=32,AO=268435456,C5=Math.random().toString(36).slice(2),Gu="__reactFiber$"+C5,_A="__reactProps$"+C5,I5="__reactContainer$"+C5,Aj="__reactEvents$"+C5,TSe="__reactListeners$"+C5,_j="__reactHandles$"+C5,Bm="__reactResources$"+C5,$1="__reactMarker$"+C5,b5="__reactLoad$"+C5,S5=new Set,P5={},tR={},Zse={button:!0,checkbox:!0,image:!0,hidden:!0,radio:!0,reset:!0,submit:!0},DSe=RegExp("^[:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD][:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*$"),Ew={},_O={},cc=!1,gO=/[\n"\\]/g,eae=!1,gv=!1,Mw=!1,rM=!1,nR=!1,gj=!1,fj=["value","defaultValue"],tae=!1,Qf=/["'&<>\n\t]|^\s|\s$/,Bw="address applet area article aside base basefont bgsound blockquote body br button caption center col colgroup dd details dir div dl dt embed fieldset figcaption figure footer form frame frameset h1 h2 h3 h4 h5 h6 head header hgroup hr html iframe img input isindex li link listing main marquee menu menuitem meta nav noembed noframes noscript object ol p param plaintext pre script section select source style summary table tbody td template textarea tfoot th thead title tr track ul wbr xmp".split(" "),yj="applet caption html table td th marquee object select template foreignObject desc title".split(" "),nae=yj.concat(["button"]),oae="dd dt li option optgroup p rp rt".split(" "),xj={current:null,formTag:null,aTagInScope:null,buttonTagInScope:null,nobrTagInScope:null,pTagInButtonScope:null,listItemTagAutoclosing:null,dlItemTagAutoclosing:null,containerTagInScope:null,implicitRootScope:!1},oR={},fO={animation:"animationDelay animationDirection animationDuration animationFillMode animationIterationCount animationName animationPlayState animationTimingFunction".split(" "),background:"backgroundAttachment backgroundClip backgroundColor backgroundImage backgroundOrigin backgroundPositionX backgroundPositionY backgroundRepeat backgroundSize".split(" "),backgroundPosition:["backgroundPositionX","backgroundPositionY"],border:"borderBottomColor borderBottomStyle borderBottomWidth borderImageOutset borderImageRepeat borderImageSlice borderImageSource borderImageWidth borderLeftColor borderLeftStyle borderLeftWidth borderRightColor borderRightStyle borderRightWidth borderTopColor borderTopStyle borderTopWidth".split(" "),borderBlock:"borderBlockEndColor borderBlockEndStyle borderBlockEndWidth borderBlockStartColor borderBlockStartStyle borderBlockStartWidth".split(" "),borderBlockColor:["borderBlockEndColor","borderBlockStartColor"],borderBlockEnd:["borderBlockEndColor","borderBlockEndStyle","borderBlockEndWidth"],borderBlockStart:["borderBlockStartColor","borderBlockStartStyle","borderBlockStartWidth"],borderBlockStyle:["borderBlockEndStyle","borderBlockStartStyle"],borderBlockWidth:["borderBlockEndWidth","borderBlockStartWidth"],borderBottom:["borderBottomColor","borderBottomStyle","borderBottomWidth"],borderColor:["borderBottomColor","borderLeftColor","borderRightColor","borderTopColor"],borderImage:["borderImageOutset","borderImageRepeat","borderImageSlice","borderImageSource","borderImageWidth"],borderInline:"borderInlineEndColor borderInlineEndStyle borderInlineEndWidth borderInlineStartColor borderInlineStartStyle borderInlineStartWidth".split(" "),borderInlineColor:["borderInlineEndColor","borderInlineStartColor"],borderInlineEnd:["borderInlineEndColor","borderInlineEndStyle","borderInlineEndWidth"],borderInlineStart:["borderInlineStartColor","borderInlineStartStyle","borderInlineStartWidth"],borderInlineStyle:["borderInlineEndStyle","borderInlineStartStyle"],borderInlineWidth:["borderInlineEndWidth","borderInlineStartWidth"],borderLeft:["borderLeftColor","borderLeftStyle","borderLeftWidth"],borderRadius:["borderBottomLeftRadius","borderBottomRightRadius","borderTopLeftRadius","borderTopRightRadius"],borderRight:["borderRightColor","borderRightStyle","borderRightWidth"],borderStyle:["borderBottomStyle","borderLeftStyle","borderRightStyle","borderTopStyle"],borderTop:["borderTopColor","borderTopStyle","borderTopWidth"],borderWidth:["borderBottomWidth","borderLeftWidth","borderRightWidth","borderTopWidth"],colorAdjust:["printColorAdjust"],columnRule:["columnRuleColor","columnRuleStyle","columnRuleWidth"],columns:["columnCount","columnWidth"],containIntrinsicSize:["containIntrinsicHeight","containIntrinsicWidth"],container:["containerName","containerType"],flex:["flexBasis","flexGrow","flexShrink"],flexFlow:["flexDirection","flexWrap"],font:"fontFamily fontFeatureSettings fontKerning fontLanguageOverride fontSize fontSizeAdjust fontStretch fontStyle fontVariant fontVariantAlternates fontVariantCaps fontVariantEastAsian fontVariantLigatures fontVariantNumeric fontVariantPosition fontWeight lineHeight".split(" "),fontSynthesis:["fontSynthesisPosition","fontSynthesisSmallCaps","fontSynthesisStyle","fontSynthesisWeight"],fontVariant:"fontVariantAlternates fontVariantCaps fontVariantEastAsian fontVariantLigatures fontVariantNumeric fontVariantPosition".split(" "),gap:["columnGap","rowGap"],grid:"gridAutoColumns gridAutoFlow gridAutoRows gridTemplateAreas gridTemplateColumns gridTemplateRows".split(" "),gridArea:["gridColumnEnd","gridColumnStart","gridRowEnd","gridRowStart"],gridColumn:["gridColumnEnd","gridColumnStart"],gridColumnGap:["columnGap"],gridGap:["columnGap","rowGap"],gridRow:["gridRowEnd","gridRowStart"],gridRowGap:["rowGap"],gridTemplate:["gridTemplateAreas","gridTemplateColumns","gridTemplateRows"],inset:["bottom","left","right","top"],insetBlock:["insetBlockEnd","insetBlockStart"],insetInline:["insetInlineEnd","insetInlineStart"],listStyle:["listStyleImage","listStylePosition","listStyleType"],margin:["marginBottom","marginLeft","marginRight","marginTop"],marginBlock:["marginBlockEnd","marginBlockStart"],marginInline:["marginInlineEnd","marginInlineStart"],marker:["markerEnd","markerMid","markerStart"],mask:"maskClip maskComposite maskImage maskMode maskOrigin maskPositionX maskPositionY maskRepeat maskSize".split(" "),maskPosition:["maskPositionX","maskPositionY"],offset:["offsetAnchor","offsetDistance","offsetPath","offsetPosition","offsetRotate"],outline:["outlineColor","outlineStyle","outlineWidth"],overflow:["overflowX","overflowY"],overscrollBehavior:["overscrollBehaviorX","overscrollBehaviorY"],padding:["paddingBottom","paddingLeft","paddingRight","paddingTop"],paddingBlock:["paddingBlockEnd","paddingBlockStart"],paddingInline:["paddingInlineEnd","paddingInlineStart"],pageBreakAfter:["breakAfter"],pageBreakBefore:["breakBefore"],pageBreakInside:["breakInside"],placeContent:["alignContent","justifyContent"],placeItems:["alignItems","justifyItems"],placeSelf:["alignSelf","justifySelf"],scrollMargin:["scrollMarginBottom","scrollMarginLeft","scrollMarginRight","scrollMarginTop"],scrollMarginBlock:["scrollMarginBlockEnd","scrollMarginBlockStart"],scrollMarginInline:["scrollMarginInlineEnd","scrollMarginInlineStart"],scrollPadding:["scrollPaddingBottom","scrollPaddingLeft","scrollPaddingRight","scrollPaddingTop"],scrollPaddingBlock:["scrollPaddingBlockEnd","scrollPaddingBlockStart"],scrollPaddingInline:["scrollPaddingInlineEnd","scrollPaddingInlineStart"],textDecoration:["textDecorationColor","textDecorationLine","textDecorationStyle","textDecorationThickness"],textEmphasis:["textEmphasisColor","textEmphasisStyle"],textWrap:["textWrapMode","textWrapStyle"],transition:["transitionBehavior","transitionDelay","transitionDuration","transitionProperty","transitionTimingFunction"],verticalAlign:["alignmentBaseline","baselineShift","baselineSource"],whiteSpace:["textWrapMode","whiteSpaceCollapse"],wordWrap:["overflowWrap"]},Cj=/([A-Z])/g,Ij=/^ms-/,iae=/^(?:webkit|moz|o)[A-Z]/,rae=/^-ms-/,sae=/-(.)/g,bj=/;\s*$/,sM={},D={},L=!1,K=!1,de=new Set("animationIterationCount aspectRatio borderImageOutset borderImageSlice borderImageWidth boxFlex boxFlexGroup boxOrdinalGroup columnCount columns flex flexGrow flexPositive flexShrink flexNegative flexOrder gridArea gridRow gridRowEnd gridRowSpan gridRowStart gridColumn gridColumnEnd gridColumnSpan gridColumnStart fontWeight lineClamp lineHeight opacity order orphans scale tabSize widows zIndex zoom fillOpacity floodOpacity stopOpacity strokeDasharray strokeDashoffset strokeMiterlimit strokeOpacity strokeWidth MozAnimationIterationCount MozBoxFlex MozBoxFlexGroup MozLineClamp msAnimationIterationCount msFlex msZoom msFlexGrow msFlexNegative msFlexOrder msFlexPositive msFlexShrink msGridColumn msGridColumnSpan msGridRow msGridRowSpan WebkitAnimationIterationCount WebkitBoxFlex WebKitBoxFlexGroup WebkitBoxOrdinalGroup WebkitColumnCount WebkitColumns WebkitFlex WebkitFlexGrow WebkitFlexPositive WebkitFlexShrink WebkitLineClamp".split(" ")),ge="http://www.w3.org/1998/Math/MathML",Ie="http://www.w3.org/2000/svg",ot=new Map([["acceptCharset","accept-charset"],["htmlFor","for"],["httpEquiv","http-equiv"],["crossOrigin","crossorigin"],["accentHeight","accent-height"],["alignmentBaseline","alignment-baseline"],["arabicForm","arabic-form"],["baselineShift","baseline-shift"],["capHeight","cap-height"],["clipPath","clip-path"],["clipRule","clip-rule"],["colorInterpolation","color-interpolation"],["colorInterpolationFilters","color-interpolation-filters"],["colorProfile","color-profile"],["colorRendering","color-rendering"],["dominantBaseline","dominant-baseline"],["enableBackground","enable-background"],["fillOpacity","fill-opacity"],["fillRule","fill-rule"],["floodColor","flood-color"],["floodOpacity","flood-opacity"],["fontFamily","font-family"],["fontSize","font-size"],["fontSizeAdjust","font-size-adjust"],["fontStretch","font-stretch"],["fontStyle","font-style"],["fontVariant","font-variant"],["fontWeight","font-weight"],["glyphName","glyph-name"],["glyphOrientationHorizontal","glyph-orientation-horizontal"],["glyphOrientationVertical","glyph-orientation-vertical"],["horizAdvX","horiz-adv-x"],["horizOriginX","horiz-origin-x"],["imageRendering","image-rendering"],["letterSpacing","letter-spacing"],["lightingColor","lighting-color"],["markerEnd","marker-end"],["markerMid","marker-mid"],["markerStart","marker-start"],["maskType","mask-type"],["overlinePosition","overline-position"],["overlineThickness","overline-thickness"],["paintOrder","paint-order"],["panose-1","panose-1"],["pointerEvents","pointer-events"],["renderingIntent","rendering-intent"],["shapeRendering","shape-rendering"],["stopColor","stop-color"],["stopOpacity","stop-opacity"],["strikethroughPosition","strikethrough-position"],["strikethroughThickness","strikethrough-thickness"],["strokeDasharray","stroke-dasharray"],["strokeDashoffset","stroke-dashoffset"],["strokeLinecap","stroke-linecap"],["strokeLinejoin","stroke-linejoin"],["strokeMiterlimit","stroke-miterlimit"],["strokeOpacity","stroke-opacity"],["strokeWidth","stroke-width"],["textAnchor","text-anchor"],["textDecoration","text-decoration"],["textRendering","text-rendering"],["transformOrigin","transform-origin"],["underlinePosition","underline-position"],["underlineThickness","underline-thickness"],["unicodeBidi","unicode-bidi"],["unicodeRange","unicode-range"],["unitsPerEm","units-per-em"],["vAlphabetic","v-alphabetic"],["vHanging","v-hanging"],["vIdeographic","v-ideographic"],["vMathematical","v-mathematical"],["vectorEffect","vector-effect"],["vertAdvY","vert-adv-y"],["vertOriginX","vert-origin-x"],["vertOriginY","vert-origin-y"],["wordSpacing","word-spacing"],["writingMode","writing-mode"],["xmlnsXlink","xmlns:xlink"],["xHeight","x-height"]]),yt={accept:"accept",acceptcharset:"acceptCharset","accept-charset":"acceptCharset",accesskey:"accessKey",action:"action",allowfullscreen:"allowFullScreen",alt:"alt",as:"as",async:"async",autocapitalize:"autoCapitalize",autocomplete:"autoComplete",autocorrect:"autoCorrect",autofocus:"autoFocus",autoplay:"autoPlay",autosave:"autoSave",capture:"capture",cellpadding:"cellPadding",cellspacing:"cellSpacing",challenge:"challenge",charset:"charSet",checked:"checked",children:"children",cite:"cite",class:"className",classid:"classID",classname:"className",cols:"cols",colspan:"colSpan",content:"content",contenteditable:"contentEditable",contextmenu:"contextMenu",controls:"controls",controlslist:"controlsList",coords:"coords",credentialless:"credentialless",crossorigin:"crossOrigin",dangerouslysetinnerhtml:"dangerouslySetInnerHTML",data:"data",datetime:"dateTime",default:"default",defaultchecked:"defaultChecked",defaultvalue:"defaultValue",defer:"defer",dir:"dir",disabled:"disabled",disablepictureinpicture:"disablePictureInPicture",disableremoteplayback:"disableRemotePlayback",download:"download",draggable:"draggable",enctype:"encType",enterkeyhint:"enterKeyHint",fetchpriority:"fetchPriority",for:"htmlFor",form:"form",formmethod:"formMethod",formaction:"formAction",formenctype:"formEncType",formnovalidate:"formNoValidate",formtarget:"formTarget",frameborder:"frameBorder",headers:"headers",height:"height",hidden:"hidden",high:"high",href:"href",hreflang:"hrefLang",htmlfor:"htmlFor",httpequiv:"httpEquiv","http-equiv":"httpEquiv",icon:"icon",id:"id",imagesizes:"imageSizes",imagesrcset:"imageSrcSet",inert:"inert",innerhtml:"innerHTML",inputmode:"inputMode",integrity:"integrity",is:"is",itemid:"itemID",itemprop:"itemProp",itemref:"itemRef",itemscope:"itemScope",itemtype:"itemType",keyparams:"keyParams",keytype:"keyType",kind:"kind",label:"label",lang:"lang",list:"list",loop:"loop",low:"low",manifest:"manifest",marginwidth:"marginWidth",marginheight:"marginHeight",max:"max",maxlength:"maxLength",media:"media",mediagroup:"mediaGroup",method:"method",min:"min",minlength:"minLength",multiple:"multiple",muted:"muted",name:"name",nomodule:"noModule",nonce:"nonce",novalidate:"noValidate",open:"open",optimum:"optimum",pattern:"pattern",placeholder:"placeholder",playsinline:"playsInline",poster:"poster",preload:"preload",profile:"profile",radiogroup:"radioGroup",readonly:"readOnly",referrerpolicy:"referrerPolicy",rel:"rel",required:"required",reversed:"reversed",role:"role",rows:"rows",rowspan:"rowSpan",sandbox:"sandbox",scope:"scope",scoped:"scoped",scrolling:"scrolling",seamless:"seamless",selected:"selected",shape:"shape",size:"size",sizes:"sizes",span:"span",spellcheck:"spellCheck",src:"src",srcdoc:"srcDoc",srclang:"srcLang",srcset:"srcSet",start:"start",step:"step",style:"style",summary:"summary",tabindex:"tabIndex",target:"target",title:"title",type:"type",usemap:"useMap",value:"value",width:"width",wmode:"wmode",wrap:"wrap",about:"about",accentheight:"accentHeight","accent-height":"accentHeight",accumulate:"accumulate",additive:"additive",alignmentbaseline:"alignmentBaseline","alignment-baseline":"alignmentBaseline",allowreorder:"allowReorder",alphabetic:"alphabetic",amplitude:"amplitude",arabicform:"arabicForm","arabic-form":"arabicForm",ascent:"ascent",attributename:"attributeName",attributetype:"attributeType",autoreverse:"autoReverse",azimuth:"azimuth",basefrequency:"baseFrequency",baselineshift:"baselineShift","baseline-shift":"baselineShift",baseprofile:"baseProfile",bbox:"bbox",begin:"begin",bias:"bias",by:"by",calcmode:"calcMode",capheight:"capHeight","cap-height":"capHeight",clip:"clip",clippath:"clipPath","clip-path":"clipPath",clippathunits:"clipPathUnits",cliprule:"clipRule","clip-rule":"clipRule",color:"color",colorinterpolation:"colorInterpolation","color-interpolation":"colorInterpolation",colorinterpolationfilters:"colorInterpolationFilters","color-interpolation-filters":"colorInterpolationFilters",colorprofile:"colorProfile","color-profile":"colorProfile",colorrendering:"colorRendering","color-rendering":"colorRendering",contentscripttype:"contentScriptType",contentstyletype:"contentStyleType",cursor:"cursor",cx:"cx",cy:"cy",d:"d",datatype:"datatype",decelerate:"decelerate",descent:"descent",diffuseconstant:"diffuseConstant",direction:"direction",display:"display",divisor:"divisor",dominantbaseline:"dominantBaseline","dominant-baseline":"dominantBaseline",dur:"dur",dx:"dx",dy:"dy",edgemode:"edgeMode",elevation:"elevation",enablebackground:"enableBackground","enable-background":"enableBackground",end:"end",exponent:"exponent",externalresourcesrequired:"externalResourcesRequired",fill:"fill",fillopacity:"fillOpacity","fill-opacity":"fillOpacity",fillrule:"fillRule","fill-rule":"fillRule",filter:"filter",filterres:"filterRes",filterunits:"filterUnits",floodopacity:"floodOpacity","flood-opacity":"floodOpacity",floodcolor:"floodColor","flood-color":"floodColor",focusable:"focusable",fontfamily:"fontFamily","font-family":"fontFamily",fontsize:"fontSize","font-size":"fontSize",fontsizeadjust:"fontSizeAdjust","font-size-adjust":"fontSizeAdjust",fontstretch:"fontStretch","font-stretch":"fontStretch",fontstyle:"fontStyle","font-style":"fontStyle",fontvariant:"fontVariant","font-variant":"fontVariant",fontweight:"fontWeight","font-weight":"fontWeight",format:"format",from:"from",fx:"fx",fy:"fy",g1:"g1",g2:"g2",glyphname:"glyphName","glyph-name":"glyphName",glyphorientationhorizontal:"glyphOrientationHorizontal","glyph-orientation-horizontal":"glyphOrientationHorizontal",glyphorientationvertical:"glyphOrientationVertical","glyph-orientation-vertical":"glyphOrientationVertical",glyphref:"glyphRef",gradienttransform:"gradientTransform",gradientunits:"gradientUnits",hanging:"hanging",horizadvx:"horizAdvX","horiz-adv-x":"horizAdvX",horizoriginx:"horizOriginX","horiz-origin-x":"horizOriginX",ideographic:"ideographic",imagerendering:"imageRendering","image-rendering":"imageRendering",in2:"in2",in:"in",inlist:"inlist",intercept:"intercept",k1:"k1",k2:"k2",k3:"k3",k4:"k4",k:"k",kernelmatrix:"kernelMatrix",kernelunitlength:"kernelUnitLength",kerning:"kerning",keypoints:"keyPoints",keysplines:"keySplines",keytimes:"keyTimes",lengthadjust:"lengthAdjust",letterspacing:"letterSpacing","letter-spacing":"letterSpacing",lightingcolor:"lightingColor","lighting-color":"lightingColor",limitingconeangle:"limitingConeAngle",local:"local",markerend:"markerEnd","marker-end":"markerEnd",markerheight:"markerHeight",markermid:"markerMid","marker-mid":"markerMid",markerstart:"markerStart","marker-start":"markerStart",markerunits:"markerUnits",markerwidth:"markerWidth",mask:"mask",maskcontentunits:"maskContentUnits",masktype:"maskType",maskunits:"maskUnits",mathematical:"mathematical",mode:"mode",numoctaves:"numOctaves",offset:"offset",opacity:"opacity",operator:"operator",order:"order",orient:"orient",orientation:"orientation",origin:"origin",overflow:"overflow",overlineposition:"overlinePosition","overline-position":"overlinePosition",overlinethickness:"overlineThickness","overline-thickness":"overlineThickness",paintorder:"paintOrder","paint-order":"paintOrder",panose1:"panose1","panose-1":"panose1",pathlength:"pathLength",patterncontentunits:"patternContentUnits",patterntransform:"patternTransform",patternunits:"patternUnits",pointerevents:"pointerEvents","pointer-events":"pointerEvents",points:"points",pointsatx:"pointsAtX",pointsaty:"pointsAtY",pointsatz:"pointsAtZ",popover:"popover",popovertarget:"popoverTarget",popovertargetaction:"popoverTargetAction",prefix:"prefix",preservealpha:"preserveAlpha",preserveaspectratio:"preserveAspectRatio",primitiveunits:"primitiveUnits",property:"property",r:"r",radius:"radius",refx:"refX",refy:"refY",renderingintent:"renderingIntent","rendering-intent":"renderingIntent",repeatcount:"repeatCount",repeatdur:"repeatDur",requiredextensions:"requiredExtensions",requiredfeatures:"requiredFeatures",resource:"resource",restart:"restart",result:"result",results:"results",rotate:"rotate",rx:"rx",ry:"ry",scale:"scale",security:"security",seed:"seed",shaperendering:"shapeRendering","shape-rendering":"shapeRendering",slope:"slope",spacing:"spacing",specularconstant:"specularConstant",specularexponent:"specularExponent",speed:"speed",spreadmethod:"spreadMethod",startoffset:"startOffset",stddeviation:"stdDeviation",stemh:"stemh",stemv:"stemv",stitchtiles:"stitchTiles",stopcolor:"stopColor","stop-color":"stopColor",stopopacity:"stopOpacity","stop-opacity":"stopOpacity",strikethroughposition:"strikethroughPosition","strikethrough-position":"strikethroughPosition",strikethroughthickness:"strikethroughThickness","strikethrough-thickness":"strikethroughThickness",string:"string",stroke:"stroke",strokedasharray:"strokeDasharray","stroke-dasharray":"strokeDasharray",strokedashoffset:"strokeDashoffset","stroke-dashoffset":"strokeDashoffset",strokelinecap:"strokeLinecap","stroke-linecap":"strokeLinecap",strokelinejoin:"strokeLinejoin","stroke-linejoin":"strokeLinejoin",strokemiterlimit:"strokeMiterlimit","stroke-miterlimit":"strokeMiterlimit",strokewidth:"strokeWidth","stroke-width":"strokeWidth",strokeopacity:"strokeOpacity","stroke-opacity":"strokeOpacity",suppresscontenteditablewarning:"suppressContentEditableWarning",suppresshydrationwarning:"suppressHydrationWarning",surfacescale:"surfaceScale",systemlanguage:"systemLanguage",tablevalues:"tableValues",targetx:"targetX",targety:"targetY",textanchor:"textAnchor","text-anchor":"textAnchor",textdecoration:"textDecoration","text-decoration":"textDecoration",textlength:"textLength",textrendering:"textRendering","text-rendering":"textRendering",to:"to",transform:"transform",transformorigin:"transformOrigin","transform-origin":"transformOrigin",typeof:"typeof",u1:"u1",u2:"u2",underlineposition:"underlinePosition","underline-position":"underlinePosition",underlinethickness:"underlineThickness","underline-thickness":"underlineThickness",unicode:"unicode",unicodebidi:"unicodeBidi","unicode-bidi":"unicodeBidi",unicoderange:"unicodeRange","unicode-range":"unicodeRange",unitsperem:"unitsPerEm","units-per-em":"unitsPerEm",unselectable:"unselectable",valphabetic:"vAlphabetic","v-alphabetic":"vAlphabetic",values:"values",vectoreffect:"vectorEffect","vector-effect":"vectorEffect",version:"version",vertadvy:"vertAdvY","vert-adv-y":"vertAdvY",vertoriginx:"vertOriginX","vert-origin-x":"vertOriginX",vertoriginy:"vertOriginY","vert-origin-y":"vertOriginY",vhanging:"vHanging","v-hanging":"vHanging",videographic:"vIdeographic","v-ideographic":"vIdeographic",viewbox:"viewBox",viewtarget:"viewTarget",visibility:"visibility",vmathematical:"vMathematical","v-mathematical":"vMathematical",vocab:"vocab",widths:"widths",wordspacing:"wordSpacing","word-spacing":"wordSpacing",writingmode:"writingMode","writing-mode":"writingMode",x1:"x1",x2:"x2",x:"x",xchannelselector:"xChannelSelector",xheight:"xHeight","x-height":"xHeight",xlinkactuate:"xlinkActuate","xlink:actuate":"xlinkActuate",xlinkarcrole:"xlinkArcrole","xlink:arcrole":"xlinkArcrole",xlinkhref:"xlinkHref","xlink:href":"xlinkHref",xlinkrole:"xlinkRole","xlink:role":"xlinkRole",xlinkshow:"xlinkShow","xlink:show":"xlinkShow",xlinktitle:"xlinkTitle","xlink:title":"xlinkTitle",xlinktype:"xlinkType","xlink:type":"xlinkType",xmlbase:"xmlBase","xml:base":"xmlBase",xmllang:"xmlLang","xml:lang":"xmlLang",xmlns:"xmlns","xml:space":"xmlSpace",xmlnsxlink:"xmlnsXlink","xmlns:xlink":"xmlnsXlink",xmlspace:"xmlSpace",y1:"y1",y2:"y2",y:"y",ychannelselector:"yChannelSelector",z:"z",zoomandpan:"zoomAndPan"},hn={"aria-current":0,"aria-description":0,"aria-details":0,"aria-disabled":0,"aria-hidden":0,"aria-invalid":0,"aria-keyshortcuts":0,"aria-label":0,"aria-roledescription":0,"aria-autocomplete":0,"aria-checked":0,"aria-expanded":0,"aria-haspopup":0,"aria-level":0,"aria-modal":0,"aria-multiline":0,"aria-multiselectable":0,"aria-orientation":0,"aria-placeholder":0,"aria-pressed":0,"aria-readonly":0,"aria-required":0,"aria-selected":0,"aria-sort":0,"aria-valuemax":0,"aria-valuemin":0,"aria-valuenow":0,"aria-valuetext":0,"aria-atomic":0,"aria-busy":0,"aria-live":0,"aria-relevant":0,"aria-dropeffect":0,"aria-grabbed":0,"aria-activedescendant":0,"aria-colcount":0,"aria-colindex":0,"aria-colspan":0,"aria-controls":0,"aria-describedby":0,"aria-errormessage":0,"aria-flowto":0,"aria-labelledby":0,"aria-owns":0,"aria-posinset":0,"aria-rowcount":0,"aria-rowindex":0,"aria-rowspan":0,"aria-setsize":0,"aria-braillelabel":0,"aria-brailleroledescription":0,"aria-colindextext":0,"aria-rowindextext":0},zn={},Qo=RegExp("^(aria)-[:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*$"),Go=RegExp("^(aria)[A-Z][:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*$"),di=!1,kr={},wc=/^on./,ww=/^on[^A-Z]/,Tw=RegExp("^(aria)-[:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*$"),V2=RegExp("^(aria)[A-Z][:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*$"),en=/^[\u0000-\u001F ]*j[\r\n\t]*a[\r\n\t]*v[\r\n\t]*a[\r\n\t]*s[\r\n\t]*c[\r\n\t]*r[\r\n\t]*i[\r\n\t]*p[\r\n\t]*t[\r\n\t]*:/i,$t=null,an=null,qn=null,xi=!1,Ms=!(typeof window>"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),Lr=!1;if(Ms)try{var Kr={};Object.defineProperty(Kr,"passive",{get:function(){Lr=!0}}),window.addEventListener("test",Kr,Kr),window.removeEventListener("test",Kr,Kr)}catch(S){Lr=!1}var Fr=null,Hl=null,uu=null,gA={eventPhase:0,bubbles:0,cancelable:0,timeStamp:function(S){return S.timeStamp||Date.now()},defaultPrevented:0,isTrusted:0},yO=jl(gA),Sj=Qs({},gA,{view:0,detail:0}),tNn=jl(Sj),NSe,RSe,Pj,aae=Qs({},Sj,{screenX:0,screenY:0,clientX:0,clientY:0,pageX:0,pageY:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,getModifierState:fm,button:0,buttons:0,relatedTarget:function(S){return S.relatedTarget===void 0?S.fromElement===S.srcElement?S.toElement:S.fromElement:S.relatedTarget},movementX:function(S){if("movementX"in S)return S.movementX;return S!==Pj&&(Pj&&S.type==="mousemove"?(NSe=S.screenX-Pj.screenX,RSe=S.screenY-Pj.screenY):RSe=NSe=0,Pj=S),NSe},movementY:function(S){return"movementY"in S?S.movementY:RSe}}),set=jl(aae),nNn=Qs({},aae,{dataTransfer:0}),oNn=jl(nNn),iNn=Qs({},Sj,{relatedTarget:0}),QSe=jl(iNn),rNn=Qs({},gA,{animationName:0,elapsedTime:0,pseudoElement:0}),sNn=jl(rNn),aNn=Qs({},gA,{clipboardData:function(S){return"clipboardData"in S?S.clipboardData:window.clipboardData}}),cNn=jl(aNn),lNn=Qs({},gA,{data:0}),aet=jl(lNn),dNn=aet,uNn={Esc:"Escape",Spacebar:" ",Left:"ArrowLeft",Up:"ArrowUp",Right:"ArrowRight",Down:"ArrowDown",Del:"Delete",Win:"OS",Menu:"ContextMenu",Apps:"ContextMenu",Scroll:"ScrollLock",MozPrintableKey:"Unidentified"},hNn={8:"Backspace",9:"Tab",12:"Clear",13:"Enter",16:"Shift",17:"Control",18:"Alt",19:"Pause",20:"CapsLock",27:"Escape",32:" ",33:"PageUp",34:"PageDown",35:"End",36:"Home",37:"ArrowLeft",38:"ArrowUp",39:"ArrowRight",40:"ArrowDown",45:"Insert",46:"Delete",112:"F1",113:"F2",114:"F3",115:"F4",116:"F5",117:"F6",118:"F7",119:"F8",120:"F9",121:"F10",122:"F11",123:"F12",144:"NumLock",145:"ScrollLock",224:"Meta"},mNn={Alt:"altKey",Control:"ctrlKey",Meta:"metaKey",Shift:"shiftKey"},pNn=Qs({},Sj,{key:function(S){if(S.key){var M=uNn[S.key]||S.key;if(M!=="Unidentified")return M}return S.type==="keypress"?(S=lp(S),S===13?"Enter":String.fromCharCode(S)):S.type==="keydown"||S.type==="keyup"?hNn[S.keyCode]||"Unidentified":""},code:0,location:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,repeat:0,locale:0,getModifierState:fm,charCode:function(S){return S.type==="keypress"?lp(S):0},keyCode:function(S){return S.type==="keydown"||S.type==="keyup"?S.keyCode:0},which:function(S){return S.type==="keypress"?lp(S):S.type==="keydown"||S.type==="keyup"?S.keyCode:0}}),ANn=jl(pNn),_Nn=Qs({},aae,{pointerId:0,width:0,height:0,pressure:0,tangentialPressure:0,tiltX:0,tiltY:0,twist:0,pointerType:0,isPrimary:0}),cet=jl(_Nn),gNn=Qs({},gA,{submitter:0}),fNn=jl(gNn),yNn=Qs({},Sj,{touches:0,targetTouches:0,changedTouches:0,altKey:0,metaKey:0,ctrlKey:0,shiftKey:0,getModifierState:fm}),xNn=jl(yNn),CNn=Qs({},gA,{propertyName:0,elapsedTime:0,pseudoElement:0}),INn=jl(CNn),bNn=Qs({},aae,{deltaX:function(S){return"deltaX"in S?S.deltaX:("wheelDeltaX"in S)?-S.wheelDeltaX:0},deltaY:function(S){return"deltaY"in S?S.deltaY:("wheelDeltaY"in S)?-S.wheelDeltaY:("wheelDelta"in S)?-S.wheelDelta:0},deltaZ:0,deltaMode:0}),SNn=jl(bNn),PNn=Qs({},gA,{newState:0,oldState:0,source:0}),vNn=jl(PNn),ENn=[9,13,27,32],det=229,kSe=Ms&&"CompositionEvent"in window,vj=null;Ms&&"documentMode"in document&&(vj=document.documentMode);var MNn=Ms&&"TextEvent"in window&&!vj,uet=Ms&&(!kSe||vj&&8<vj&&11>=vj),het=32,met=String.fromCharCode(het),pet=!1,xO=!1,BNn={color:!0,date:!0,datetime:!0,"datetime-local":!0,email:!0,month:!0,number:!0,password:!0,range:!0,search:!0,tel:!0,text:!0,time:!0,url:!0,week:!0},Ej=null,Mj=null,Aet=!1;Ms&&(Aet=lf("input")&&(!document.documentMode||9<document.documentMode));var kf=typeof Object.is==="function"?Object.is:ZD,wNn=Ms&&"documentMode"in document&&11>=document.documentMode,CO=null,LSe=null,Bj=null,FSe=!1,IO={animationend:T0("Animation","AnimationEnd"),animationiteration:T0("Animation","AnimationIteration"),animationstart:T0("Animation","AnimationStart"),transitionrun:T0("Transition","TransitionRun"),transitionstart:T0("Transition","TransitionStart"),transitioncancel:T0("Transition","TransitionCancel"),transitionend:T0("Transition","TransitionEnd")},HSe={},_et={};Ms&&(_et=document.createElement("div").style,("AnimationEvent"in window)||(delete IO.animationend.animation,delete IO.animationiteration.animation,delete IO.animationstart.animation),("TransitionEvent"in window)||delete IO.transitionend.transition);var get=wh("animationend"),fet=wh("animationiteration"),yet=wh("animationstart"),TNn=wh("transitionrun"),DNn=wh("transitionstart"),NNn=wh("transitioncancel"),xet=wh("transitionend"),Cet=new Map,OSe="abort auxClick beforeToggle cancel canPlay canPlayThrough click close contextMenu copy cut drag dragEnd dragEnter dragExit dragLeave dragOver dragStart drop durationChange emptied encrypted ended error fullscreenChange fullscreenError gotPointerCapture input invalid keyDown keyPress keyUp load loadedData loadedMetadata loadStart lostPointerCapture mouseDown mouseMove mouseOut mouseOver mouseUp paste pause play playing pointerCancel pointerDown pointerMove pointerOut pointerOver pointerUp progress rateChange reset resize seeked seeking stalled submit suspend timeUpdate touchCancel touchEnd touchStart volumeChange scroll toggle touchMove waiting wheel".split(" ");OSe.push("scrollEnd");var RNn=0,Iet=0;if(typeof performance==="object"&&typeof performance.now==="function")var QNn=performance,bet=function(){return QNn.now()};else{var kNn=Date;bet=function(){return kNn.now()}}var zSe=typeof reportError==="function"?reportError:function(S){if(typeof window==="object"&&typeof window.ErrorEvent==="function"){var M=new window.ErrorEvent("error",{bubbles:!0,cancelable:!0,message:typeof S==="object"&&S!==null&&typeof S.message==="string"?String(S.message):String(S),error:S});if(!window.dispatchEvent(M))return}else if(typeof process==="object"&&typeof process.emit==="function"){process.emit("uncaughtException",S);return}console.error(S)},LNn="This object has been omitted by React in the console log to avoid sending too much data from the server. Try logging smaller or more specific objects.",cae=0,GSe=1,YSe=2,VSe=3,JC=100,lae="- ",dae="+ ",Pet=" ",hu=typeof console<"u"&&typeof console.timeStamp==="function"&&typeof performance<"u"&&typeof performance.measure==="function",Z1="Components ⚛",Ca="Scheduler ⚛",Ba="Blocking",Dw=!1,aM={color:"primary",properties:null,tooltipText:"",track:Z1},Nw={start:-0,end:-0,detail:{devtools:aM}},FNn=["Changed Props",""],vet="This component received deeply equal props. It might benefit from useMemo or the React Compiler in its owner.",HNn=["Changed Props",vet],wj=1,cM=2,$C=[],bO=0,USe=0,Rw={};Object.freeze(Rw);var lM=null,SO=null,jr=0,ONn=1,na=2,xg=8,v5=16,Eet=32,Met=!1;try{var Bet=Object.preventExtensions({})}catch(S){Met=!0}var WSe=new WeakMap,PO=[],vO=0,uae=null,Tj=0,ZC=[],eI=0,iR=null,dM=1,uM="",fA=null,Hd=null,oa=!1,fv=!1,U2=null,Qw=null,tI=!1,XSe=Error("Hydration Mismatch Exception: This is not a real error, and should not leak into userspace. If you're seeing this, it's likely a bug in React."),KSe=W(null),jSe=W(null),wet={},hae=null,EO=null,MO=!1,zNn=typeof AbortController<"u"?AbortController:function(){var S=[],M=this.signal={aborted:!1,addEventListener:function(R,G){S.push(G)}};this.abort=function(){M.aborted=!0,S.forEach(function(R){return R()})}},GNn=Tc.unstable_scheduleCallback,YNn=Tc.unstable_NormalPriority,wm={$$typeof:Kc,Consumer:null,Provider:null,_currentValue:null,_currentValue2:null,_threadCount:0,_currentRenderer:null,_currentRenderer2:null},Dj=null,K0=Tc.unstable_now,mae=console.createTask?console.createTask:function(){return null},Nj=1,pae=2,yA=-0,hM=-0,E5=-0,mM=null,Lf=-1.1,rR=-0,hh=-0,gr=-1.1,Hr=-1.1,Yu=null,Hh=!1,kw=-0,yv=-1.1,Rj=null,Lw=0,qSe=null,JSe=null,sR=-1.1,Qj=null,BO=-1.1,Aae=-1.1,M5=-0,pM=-1.1,nI=-1.1,$Se=0,kj=null,Tet=null,Det=null,Fw=-1.1,aR=null,Hw=-1.1,_ae=-1.1,ZSe=-0,ePe=-0,cR=0,ey=null,Net=0,Lj=-1.1,gae=!1,fae=!1,Fj=null,tPe=0,Ow=0,wO=null,Ret=Dn.S;Dn.S=function(S,M){if(Ttt=Qr(),typeof M==="object"&&M!==null&&typeof M.then==="function"){if(0>pM&&0>nI){pM=K0();var R=b_(),G=B2();if(R!==Hw||G!==aR)Hw=-1.1;Fw=R,aR=G}Sb(S,M)}if(Dj!==null)for(R=UO;R!==null;)mf(R,Dj),R=R.next;if(R=S.types,R!==null){for(G=UO;G!==null;)mf(G,R),G=G.next;if(Ow!==0){G=Dj,G===null&&(G=Dj=[]);for(var te=0;te<R.length;te++){var re=R[te];G.indexOf(re)===-1&&G.push(re)}}}Ret!==null&&Ret(S,M)};var lR=W(null),B5={recordUnsafeLifecycleWarnings:function(){},flushPendingUnsafeLifecycleWarnings:function(){},recordLegacyContextWarning:function(){},flushLegacyContextWarning:function(){},discardPendingWarnings:function(){}},Hj=[],Oj=[],zj=[],Gj=[],Yj=[],Vj=[],dR=new Set;B5.recordUnsafeLifecycleWarnings=function(S,M){dR.has(S.type)||(typeof M.componentWillMount==="function"&&M.componentWillMount.__suppressDeprecationWarning!==!0&&Hj.push(S),S.mode&xg&&typeof M.UNSAFE_componentWillMount==="function"&&Oj.push(S),typeof M.componentWillReceiveProps==="function"&&M.componentWillReceiveProps.__suppressDeprecationWarning!==!0&&zj.push(S),S.mode&xg&&typeof M.UNSAFE_componentWillReceiveProps==="function"&&Gj.push(S),typeof M.componentWillUpdate==="function"&&M.componentWillUpdate.__suppressDeprecationWarning!==!0&&Yj.push(S),S.mode&xg&&typeof M.UNSAFE_componentWillUpdate==="function"&&Vj.push(S))},B5.flushPendingUnsafeLifecycleWarnings=function(){var S=new Set;0<Hj.length&&(Hj.forEach(function(Me){S.add(V(Me)||"Component"),dR.add(Me.type)}),Hj=[]);var M=new Set;0<Oj.length&&(Oj.forEach(function(Me){M.add(V(Me)||"Component"),dR.add(Me.type)}),Oj=[]);var R=new Set;0<zj.length&&(zj.forEach(function(Me){R.add(V(Me)||"Component"),dR.add(Me.type)}),zj=[]);var G=new Set;0<Gj.length&&(Gj.forEach(function(Me){G.add(V(Me)||"Component"),dR.add(Me.type)}),Gj=[]);var te=new Set;0<Yj.length&&(Yj.forEach(function(Me){te.add(V(Me)||"Component"),dR.add(Me.type)}),Yj=[]);var re=new Set;if(0<Vj.length&&(Vj.forEach(function(Me){re.add(V(Me)||"Component"),dR.add(Me.type)}),Vj=[]),0<M.size){var Se=u(M);console.error(`Using UNSAFE_componentWillMount in strict mode is not recommended and may indicate bugs in your code. See https://react.dev/link/unsafe-component-lifecycles for details.
* Move code with side effects to componentDidMount, and set initial state in the constructor.
Please update the following components: %s`,Se)}0<G.size&&(Se=u(G),console.error(`Using UNSAFE_componentWillReceiveProps in strict mode is not recommended and may indicate bugs in your code. See https://react.dev/link/unsafe-component-lifecycles for details.
* Move data fetching code or side effects to componentDidUpdate.
* If you're updating state whenever props change, refactor your code to use memoization techniques or move it to static getDerivedStateFromProps. Learn more at: https://react.dev/link/derived-state
Please update the following components: %s`,Se)),0<re.size&&(Se=u(re),console.error(`Using UNSAFE_componentWillUpdate in strict mode is not recommended and may indicate bugs in your code. See https://react.dev/link/unsafe-component-lifecycles for details.
* Move data fetching code or side effects to componentDidUpdate.
Please update the following components: %s`,Se)),0<S.size&&(Se=u(S),console.warn(`componentWillMount has been renamed, and is not recommended for use. See https://react.dev/link/unsafe-component-lifecycles for details.
* Move code with side effects to componentDidMount, and set initial state in the constructor.
* Rename componentWillMount to UNSAFE_componentWillMount to suppress this warning in non-strict mode. In React 18.x, only the UNSAFE_ name will work. To rename all deprecated lifecycles to their new names, you can run \`npx react-codemod rename-unsafe-lifecycles\` in your project source folder.
Please update the following components: %s`,Se)),0<R.size&&(Se=u(R),console.warn(`componentWillReceiveProps has been renamed, and is not recommended for use. See https://react.dev/link/unsafe-component-lifecycles for details.
* Move data fetching code or side effects to componentDidUpdate.
* If you're updating state whenever props change, refactor your code to use memoization techniques or move it to static getDerivedStateFromProps. Learn more at: https://react.dev/link/derived-state
* Rename componentWillReceiveProps to UNSAFE_componentWillReceiveProps to suppress this warning in non-strict mode. In React 18.x, only the UNSAFE_ name will work. To rename all deprecated lifecycles to their new names, you can run \`npx react-codemod rename-unsafe-lifecycles\` in your project source folder.
Please update the following components: %s`,Se)),0<te.size&&(Se=u(te),console.warn(`componentWillUpdate has been renamed, and is not recommended for use. See https://react.dev/link/unsafe-component-lifecycles for details.
* Move data fetching code or side effects to componentDidUpdate.
* Rename componentWillUpdate to UNSAFE_componentWillUpdate to suppress this warning in non-strict mode. In React 18.x, only the UNSAFE_ name will work. To rename all deprecated lifecycles to their new names, you can run \`npx react-codemod rename-unsafe-lifecycles\` in your project source folder.
Please update the following components: %s`,Se))};var yae=new Map,Qet=new Set;B5.recordLegacyContextWarning=function(S,M){var R=null;for(var G=S;G!==null;)G.mode&xg&&(R=G),G=G.return;R===null?console.error("Expected to find a StrictMode component in a strict mode tree. This error is likely caused by a bug in React. Please file an issue."):!Qet.has(S.type)&&(G=yae.get(R),S.type.contextTypes!=null||S.type.childContextTypes!=null||M!==null&&typeof M.getChildContext==="function")&&(G===void 0&&(G=[],yae.set(R,G)),G.push(S))},B5.flushLegacyContextWarning=function(){yae.forEach(function(S){if(S.length!==0){var M=S[0],R=new Set;S.forEach(function(te){R.add(V(te)||"Component"),Qet.add(te.type)});var G=u(R);ye(M,function(){console.error(`Legacy context API has been detected within a strict-mode tree.
The old API will be supported in all 16.x releases, but applications using it should migrate to the new version.
Please update the following components: %s
Learn more about this warning here: https://react.dev/link/legacy-context`,G)})}})},B5.discardPendingWarnings=function(){Hj=[],Oj=[],zj=[],Gj=[],Yj=[],Vj=[],yae=new Map};var VNn="",ket={react_stack_bottom_frame:function(S,M,R){var G=Y2;Y2=!0;try{return S(M,R)}finally{Y2=G}}},nPe=ket.react_stack_bottom_frame.bind(ket),Let={react_stack_bottom_frame:function(S){var M=Y2;Y2=!0;try{return S.render()}finally{Y2=M}}},Fet=Let.react_stack_bottom_frame.bind(Let),Het={react_stack_bottom_frame:function(S,M){try{M.componentDidMount()}catch(R){sc(S,S.return,R)}}},oPe=Het.react_stack_bottom_frame.bind(Het),Oet={react_stack_bottom_frame:function(S,M,R,G,te){try{M.componentDidUpdate(R,G,te)}catch(re){sc(S,S.return,re)}}},zet=Oet.react_stack_bottom_frame.bind(Oet),Get={react_stack_bottom_frame:function(S,M){var R=M.stack;S.componentDidCatch(M.value,{componentStack:R!==null?R:""})}},UNn=Get.react_stack_bottom_frame.bind(Get),Yet={react_stack_bottom_frame:function(S,M,R){try{R.componentWillUnmount()}catch(G){sc(S,M,G)}}},Vet=Yet.react_stack_bottom_frame.bind(Yet),Uet={react_stack_bottom_frame:function(S){var M=S.create;return S=S.inst,M=M(),S.destroy=M}},WNn=Uet.react_stack_bottom_frame.bind(Uet),Wet={react_stack_bottom_frame:function(S,M,R){try{R()}catch(G){sc(S,M,G)}}},XNn=Wet.react_stack_bottom_frame.bind(Wet),Xet={react_stack_bottom_frame:function(S){var M=S._init;return M(S._payload)}},KNn=Xet.react_stack_bottom_frame.bind(Xet),TO=Error("Suspense Exception: This is not a real error! It's an implementation detail of `use` to interrupt the current render. You must either rethrow it immediately, or move the `use` call outside of the `try/catch` block. Capturing without rethrowing will lead to unexpected behavior.\n\nTo handle async errors, wrap your component in an error boundary, or call the promise's `.catch` method and pass the result to `use`."),iPe=Error("Suspense Exception: This is not a real error, and should not leak into userspace. If you're seeing this, it's likely a bug in React."),xae=Error("Suspense Exception: This is not a real error! It's an implementation detail of `useActionState` to interrupt the current render. You must either rethrow it immediately, or move the `useActionState` call outside of the `try/catch` block. Capturing without rethrowing will lead to unexpected behavior.\n\nTo handle async errors, wrap your component in an error boundary."),Cae={then:function(){console.error('Internal React error: A listener was unexpectedly attached to a "noop" thenable. This is a bug in React. Please file an issue.')}},uR=null,Iae=null,rPe=!1,hR=null,Uj=!1,DO=null,Wj=0,Ia=null,sPe,Ket=sPe=!1,jet={},qet={},Jet={};d=function(S,M,R){if(R!==null&&typeof R==="object"&&R._store&&(!R._store.validated&&R.key==null||R._store.validated===2)){if(typeof R._store!=="object")throw Error("React Component in warnForMissingKey should have a _store. This error is likely caused by a bug in React. Please file an issue.");R._store.validated=1;var G=V(S),te=G||"null";if(!jet[te]){jet[te]=!0,R=R._owner,S=S._debugOwner;var re="";S&&typeof S.tag==="number"&&(te=V(S))&&(re=`
Check the render method of \``+te+"`."),re||G&&(re=`
Check the top-level render call using <`+G+">.");var Se="";R!=null&&S!==R&&(G=null,typeof R.tag==="number"?G=V(R):typeof R.name==="string"&&(G=R.name),G&&(Se=" It was passed a child from "+G+".")),ye(M,function(){console.error('Each child in a list should have a unique "key" prop.%s%s See https://react.dev/link/warning-keys for more information.',re,Se)})}}};var mR=m9(!0),$et=m9(!1),Zet=0,ett=1,ttt=2,aPe=3,zw=!1,ntt=!1,cPe=null,lPe=!1,Gw=W(null),bae=W(0),v_=W(null),Cg=null,NO=1,Xj=2,E_=W(0),Kj=0,oI=1,Ff=2,W2=4,Ig=8,RO,ott=new Set,itt=new Set,dPe=new Set,rtt=new Set,AM=0,es=null,Ad=null,Tm=null,Sae=!1,QO=!1,pR=!1,Pae=0,jj=0,xv=null,jNn=0,qNn=25,Tn=null,iI=null,_M=-1,qj=!1,vae={readContext:vc,use:ou,useCallback:ud,useContext:ud,useEffect:ud,useImperativeHandle:ud,useLayoutEffect:ud,useInsertionEffect:ud,useMemo:ud,useReducer:ud,useRef:ud,useState:ud,useDebugValue:ud,useDeferredValue:ud,useTransition:ud,useSyncExternalStore:ud,useId:ud,useHostTransitionStatus:ud,useFormState:ud,useActionState:ud,useOptimistic:ud,useMemoCache:ud,useCacheRefresh:ud,useEffectEvent:ud},uPe=null,stt=null,hPe=null,att=null,Cv=null,w5=null,Eae=null;uPe={readContext:function(S){return vc(S)},use:ou,useCallback:function(S,M){return Tn="useCallback",Es(),Mb(M),R9(S,M)},useContext:function(S){return Tn="useContext",Es(),vc(S)},useEffect:function(S,M){return Tn="useEffect",Es(),Mb(M),D9(S,M)},useImperativeHandle:function(S,M,R){return Tn="useImperativeHandle",Es(),Mb(R),N9(S,M,R)},useInsertionEffect:function(S,M){Tn="useInsertionEffect",Es(),Mb(M),yC(4,Ff,S,M)},useLayoutEffect:function(S,M){return Tn="useLayoutEffect",Es(),Mb(M),IC(S,M)},useMemo:function(S,M){Tn="useMemo",Es(),Mb(M);var R=Dn.H;Dn.H=Cv;try{return yP(S,M)}finally{Dn.H=R}},useReducer:function(S,M,R){Tn="useReducer",Es();var G=Dn.H;Dn.H=Cv;try{return S9(S,M,R)}finally{Dn.H=G}},useRef:function(S){return Tn="useRef",Es(),Rd(S)},useState:function(S){Tn="useState",Es();var M=Dn.H;Dn.H=Cv;try{return Db(S)}finally{Dn.H=M}},useDebugValue:function(){Tn="useDebugValue",Es()},useDeferredValue:function(S,M){return Tn="useDeferredValue",Es(),CP(S,M)},useTransition:function(){return Tn="useTransition",Es(),D4()},useSyncExternalStore:function(S,M,R){return Tn="useSyncExternalStore",Es(),v9(S,M,R)},useId:function(){return Tn="useId",Es(),bC()},useFormState:function(S,M){return Tn="useFormState",Es(),gP(),Rb(S,M)},useActionState:function(S,M){return Tn="useActionState",Es(),Rb(S,M)},useOptimistic:function(S){return Tn="useOptimistic",Es(),I2(S)},useHostTransitionStatus:S2,useMemoCache:_C,useCacheRefresh:function(){return Tn="useCacheRefresh",Es(),H9()},useEffectEvent:function(S){return Tn="useEffectEvent",Es(),Lb(S)}},stt={readContext:function(S){return vc(S)},use:ou,useCallback:function(S,M){return Tn="useCallback",go(),R9(S,M)},useContext:function(S){return Tn="useContext",go(),vc(S)},useEffect:function(S,M){return Tn="useEffect",go(),D9(S,M)},useImperativeHandle:function(S,M,R){return Tn="useImperativeHandle",go(),N9(S,M,R)},useInsertionEffect:function(S,M){Tn="useInsertionEffect",go(),yC(4,Ff,S,M)},useLayoutEffect:function(S,M){return Tn="useLayoutEffect",go(),IC(S,M)},useMemo:function(S,M){Tn="useMemo",go();var R=Dn.H;Dn.H=Cv;try{return yP(S,M)}finally{Dn.H=R}},useReducer:function(S,M,R){Tn="useReducer",go();var G=Dn.H;Dn.H=Cv;try{return S9(S,M,R)}finally{Dn.H=G}},useRef:function(S){return Tn="useRef",go(),Rd(S)},useState:function(S){Tn="useState",go();var M=Dn.H;Dn.H=Cv;try{return Db(S)}finally{Dn.H=M}},useDebugValue:function(){Tn="useDebugValue",go()},useDeferredValue:function(S,M){return Tn="useDeferredValue",go(),CP(S,M)},useTransition:function(){return Tn="useTransition",go(),D4()},useSyncExternalStore:function(S,M,R){return Tn="useSyncExternalStore",go(),v9(S,M,R)},useId:function(){return Tn="useId",go(),bC()},useActionState:function(S,M){return Tn="useActionState",go(),Rb(S,M)},useFormState:function(S,M){return Tn="useFormState",go(),gP(),Rb(S,M)},useOptimistic:function(S){return Tn="useOptimistic",go(),I2(S)},useHostTransitionStatus:S2,useMemoCache:_C,useCacheRefresh:function(){return Tn="useCacheRefresh",go(),H9()},useEffectEvent:function(S){return Tn="useEffectEvent",go(),Lb(S)}},hPe={readContext:function(S){return vc(S)},use:ou,useCallback:function(S,M){return Tn="useCallback",go(),fP(S,M)},useContext:function(S){return Tn="useContext",go(),vc(S)},useEffect:function(S,M){Tn="useEffect",go(),mp(2048,Ig,S,M)},useImperativeHandle:function(S,M,R){return Tn="useImperativeHandle",go(),B4(S,M,R)},useInsertionEffect:function(S,M){return Tn="useInsertionEffect",go(),mp(4,Ff,S,M)},useLayoutEffect:function(S,M){return Tn="useLayoutEffect",go(),mp(4,W2,S,M)},useMemo:function(S,M){Tn="useMemo",go();var R=Dn.H;Dn.H=w5;try{return xP(S,M)}finally{Dn.H=R}},useReducer:function(S,M,R){Tn="useReducer",go();var G=Dn.H;Dn.H=w5;try{return aA(S,M,R)}finally{Dn.H=G}},useRef:function(){return Tn="useRef",go(),_c().memoizedState},useState:function(){Tn="useState",go();var S=Dn.H;Dn.H=w5;try{return aA(hd)}finally{Dn.H=S}},useDebugValue:function(){Tn="useDebugValue",go()},useDeferredValue:function(S,M){return Tn="useDeferredValue",go(),NH(S,M)},useTransition:function(){return Tn="useTransition",go(),pN()},useSyncExternalStore:function(S,M,R){return Tn="useSyncExternalStore",go(),ig(S,M,R)},useId:function(){return Tn="useId",go(),_c().memoizedState},useFormState:function(S){return Tn="useFormState",go(),gP(),Qb(S)},useActionState:function(S){return Tn="useActionState",go(),Qb(S)},useOptimistic:function(S,M){return Tn="useOptimistic",go(),gC(S,M)},useHostTransitionStatus:S2,useMemoCache:_C,useCacheRefresh:function(){return Tn="useCacheRefresh",go(),_c().memoizedState},useEffectEvent:function(S){return Tn="useEffectEvent",go(),CC(S)}},att={readContext:function(S){return vc(S)},use:ou,useCallback:function(S,M){return Tn="useCallback",go(),fP(S,M)},useContext:function(S){return Tn="useContext",go(),vc(S)},useEffect:function(S,M){Tn="useEffect",go(),mp(2048,Ig,S,M)},useImperativeHandle:function(S,M,R){return Tn="useImperativeHandle",go(),B4(S,M,R)},useInsertionEffect:function(S,M){return Tn="useInsertionEffect",go(),mp(4,Ff,S,M)},useLayoutEffect:function(S,M){return Tn="useLayoutEffect",go(),mp(4,W2,S,M)},useMemo:function(S,M){Tn="useMemo",go();var R=Dn.H;Dn.H=Eae;try{return xP(S,M)}finally{Dn.H=R}},useReducer:function(S,M,R){Tn="useReducer",go();var G=Dn.H;Dn.H=Eae;try{return gf(S,M,R)}finally{Dn.H=G}},useRef:function(){return Tn="useRef",go(),_c().memoizedState},useState:function(){Tn="useState",go();var S=Dn.H;Dn.H=Eae;try{return gf(hd)}finally{Dn.H=S}},useDebugValue:function(){Tn="useDebugValue",go()},useDeferredValue:function(S,M){return Tn="useDeferredValue",go(),Q9(S,M)},useTransition:function(){return Tn="useTransition",go(),RH()},useSyncExternalStore:function(S,M,R){return Tn="useSyncExternalStore",go(),ig(S,M,R)},useId:function(){return Tn="useId",go(),_c().memoizedState},useFormState:function(S){return Tn="useFormState",go(),gP(),Im(S)},useActionState:function(S){return Tn="useActionState",go(),Im(S)},useOptimistic:function(S,M){return Tn="useOptimistic",go(),fC(S,M)},useHostTransitionStatus:S2,useMemoCache:_C,useCacheRefresh:function(){return Tn="useCacheRefresh",go(),_c().memoizedState},useEffectEvent:function(S){return Tn="useEffectEvent",go(),CC(S)}},Cv={readContext:function(S){return c(),vc(S)},use:function(S){return a(),ou(S)},useCallback:function(S,M){return Tn="useCallback",a(),Es(),R9(S,M)},useContext:function(S){return Tn="useContext",a(),Es(),vc(S)},useEffect:function(S,M){return Tn="useEffect",a(),Es(),D9(S,M)},useImperativeHandle:function(S,M,R){return Tn="useImperativeHandle",a(),Es(),N9(S,M,R)},useInsertionEffect:function(S,M){Tn="useInsertionEffect",a(),Es(),yC(4,Ff,S,M)},useLayoutEffect:function(S,M){return Tn="useLayoutEffect",a(),Es(),IC(S,M)},useMemo:function(S,M){Tn="useMemo",a(),Es();var R=Dn.H;Dn.H=Cv;try{return yP(S,M)}finally{Dn.H=R}},useReducer:function(S,M,R){Tn="useReducer",a(),Es();var G=Dn.H;Dn.H=Cv;try{return S9(S,M,R)}finally{Dn.H=G}},useRef:function(S){return Tn="useRef",a(),Es(),Rd(S)},useState:function(S){Tn="useState",a(),Es();var M=Dn.H;Dn.H=Cv;try{return Db(S)}finally{Dn.H=M}},useDebugValue:function(){Tn="useDebugValue",a(),Es()},useDeferredValue:function(S,M){return Tn="useDeferredValue",a(),Es(),CP(S,M)},useTransition:function(){return Tn="useTransition",a(),Es(),D4()},useSyncExternalStore:function(S,M,R){return Tn="useSyncExternalStore",a(),Es(),v9(S,M,R)},useId:function(){return Tn="useId",a(),Es(),bC()},useFormState:function(S,M){return Tn="useFormState",a(),Es(),Rb(S,M)},useActionState:function(S,M){return Tn="useActionState",a(),Es(),Rb(S,M)},useOptimistic:function(S){return Tn="useOptimistic",a(),Es(),I2(S)},useMemoCache:function(S){return a(),_C(S)},useHostTransitionStatus:S2,useCacheRefresh:function(){return Tn="useCacheRefresh",Es(),H9()},useEffectEvent:function(S){return Tn="useEffectEvent",a(),Es(),Lb(S)}},w5={readContext:function(S){return c(),vc(S)},use:function(S){return a(),ou(S)},useCallback:function(S,M){return Tn="useCallback",a(),go(),fP(S,M)},useContext:function(S){return Tn="useContext",a(),go(),vc(S)},useEffect:function(S,M){Tn="useEffect",a(),go(),mp(2048,Ig,S,M)},useImperativeHandle:function(S,M,R){return Tn="useImperativeHandle",a(),go(),B4(S,M,R)},useInsertionEffect:function(S,M){return Tn="useInsertionEffect",a(),go(),mp(4,Ff,S,M)},useLayoutEffect:function(S,M){return Tn="useLayoutEffect",a(),go(),mp(4,W2,S,M)},useMemo:function(S,M){Tn="useMemo",a(),go();var R=Dn.H;Dn.H=w5;try{return xP(S,M)}finally{Dn.H=R}},useReducer:function(S,M,R){Tn="useReducer",a(),go();var G=Dn.H;Dn.H=w5;try{return aA(S,M,R)}finally{Dn.H=G}},useRef:function(){return Tn="useRef",a(),go(),_c().memoizedState},useState:function(){Tn="useState",a(),go();var S=Dn.H;Dn.H=w5;try{return aA(hd)}finally{Dn.H=S}},useDebugValue:function(){Tn="useDebugValue",a(),go()},useDeferredValue:function(S,M){return Tn="useDeferredValue",a(),go(),NH(S,M)},useTransition:function(){return Tn="useTransition",a(),go(),pN()},useSyncExternalStore:function(S,M,R){return Tn="useSyncExternalStore",a(),go(),ig(S,M,R)},useId:function(){return Tn="useId",a(),go(),_c().memoizedState},useFormState:function(S){return Tn="useFormState",a(),go(),Qb(S)},useActionState:function(S){return Tn="useActionState",a(),go(),Qb(S)},useOptimistic:function(S,M){return Tn="useOptimistic",a(),go(),gC(S,M)},useMemoCache:function(S){return a(),_C(S)},useHostTransitionStatus:S2,useCacheRefresh:function(){return Tn="useCacheRefresh",go(),_c().memoizedState},useEffectEvent:function(S){return Tn="useEffectEvent",a(),go(),CC(S)}},Eae={readContext:function(S){return c(),vc(S)},use:function(S){return a(),ou(S)},useCallback:function(S,M){return Tn="useCallback",a(),go(),fP(S,M)},useContext:function(S){return Tn="useContext",a(),go(),vc(S)},useEffect:function(S,M){Tn="useEffect",a(),go(),mp(2048,Ig,S,M)},useImperativeHandle:function(S,M,R){return Tn="useImperativeHandle",a(),go(),B4(S,M,R)},useInsertionEffect:function(S,M){return Tn="useInsertionEffect",a(),go(),mp(4,Ff,S,M)},useLayoutEffect:function(S,M){return Tn="useLayoutEffect",a(),go(),mp(4,W2,S,M)},useMemo:function(S,M){Tn="useMemo",a(),go();var R=Dn.H;Dn.H=w5;try{return xP(S,M)}finally{Dn.H=R}},useReducer:function(S,M,R){Tn="useReducer",a(),go();var G=Dn.H;Dn.H=w5;try{return gf(S,M,R)}finally{Dn.H=G}},useRef:function(){return Tn="useRef",a(),go(),_c().memoizedState},useState:function(){Tn="useState",a(),go();var S=Dn.H;Dn.H=w5;try{return gf(hd)}finally{Dn.H=S}},useDebugValue:function(){Tn="useDebugValue",a(),go()},useDeferredValue:function(S,M){return Tn="useDeferredValue",a(),go(),Q9(S,M)},useTransition:function(){return Tn="useTransition",a(),go(),RH()},useSyncExternalStore:function(S,M,R){return Tn="useSyncExternalStore",a(),go(),ig(S,M,R)},useId:function(){return Tn="useId",a(),go(),_c().memoizedState},useFormState:function(S){return Tn="useFormState",a(),go(),Im(S)},useActionState:function(S){return Tn="useActionState",a(),go(),Im(S)},useOptimistic:function(S,M){return Tn="useOptimistic",a(),go(),fC(S,M)},useMemoCache:function(S){return a(),_C(S)},useHostTransitionStatus:S2,useCacheRefresh:function(){return Tn="useCacheRefresh",go(),_c().memoizedState},useEffectEvent:function(S){return Tn="useEffectEvent",a(),go(),CC(S)}};var ctt={},ltt=new Set,dtt=new Set,utt=new Set,htt=new Set,mtt=new Set,ptt=new Set,Att=new Set,_tt=new Set,gtt=new Set,ftt=new Set;Object.freeze(ctt);var mPe={enqueueSetState:function(S,M,R){S=S._reactInternals;var G=L0(S),te=Ac(G);te.payload=M,R!==void 0&&R!==null&&(Y9(R),te.callback=R),M=mC(S,te,G),M!==null&&(l_(G,"this.setState()",S),Ld(M,S,G),S4(M,S,G))},enqueueReplaceState:function(S,M,R){S=S._reactInternals;var G=L0(S),te=Ac(G);te.tag=ett,te.payload=M,R!==void 0&&R!==null&&(Y9(R),te.callback=R),M=mC(S,te,G),M!==null&&(l_(G,"this.replaceState()",S),Ld(M,S,G),S4(M,S,G))},enqueueForceUpdate:function(S,M){S=S._reactInternals;var R=L0(S),G=Ac(R);G.tag=ttt,M!==void 0&&M!==null&&(Y9(M),G.callback=M),M=mC(S,G,R),M!==null&&(l_(R,"this.forceUpdate()",S),Ld(M,S,R),S4(M,S,R))}},kO=null,pPe=null,APe=Error("This is not a real error. It's an implementation detail of React's selective hydration feature. If this leaks into userspace, it's a bug in React. Please file an issue."),j0=!1,ytt={},xtt={},Ctt={},Itt={},LO=!1,btt={},_Pe={},Stt={},gPe={dehydrated:null,treeContext:null,retryLane:0,hydrationErrors:null},Ptt=!1,vtt=null;vtt=new Set;var Mae=!1,X2=null,Iv=null,ty=0,Bae=new Map,Ett={},Jj=0,fPe=1,wae=2,xA=!1,Ol=!1,bv=!1,yPe=!1,Mtt=typeof WeakSet==="function"?WeakSet:Set,CA=null,FO=null,HO=null,Sv=!1,$j=!1,Tae=!1,xPe=!1,Dm=null,ny=!1,T5=null,Sp=!1,AR=8192,JNn={getCacheForType:function(S){var M=vc(wm),R=M.data.get(S);return R===void 0&&(R=S(),M.data.set(S,R)),R},cacheSignal:function(){return vc(wm).controller.signal},getOwner:function(){return bp}};if(typeof Symbol==="function"&&Symbol.for){var Zj=Symbol.for;Zj("selector.component"),Zj("selector.has_pseudo_class"),Zj("selector.role"),Zj("selector.test_id"),Zj("selector.text")}var $Nn=[],ZNn=typeof WeakMap==="function"?WeakMap:Map,IA=0,Pp=2,K2=4,gM=0,eq=1,_R=2,Dae=3,Yw=4,tq=6,Btt=5,fc=IA,_d=null,ha=null,ks=0,oy=0,Nae=1,gR=2,nq=3,wtt=4,CPe=5,oq=6,Rae=7,IPe=8,fR=9,zl=oy,j2=null,fM=!1,OO=!1,bPe=!1,Pv=0,mh=gM,Vw=0,Uw=0,Qae=0,iy=0,yR=0,iq=null,Hf=null,kae=!1,Lae=0,Ttt=0,Dtt=300,Fae=1/0,Ntt=500,rq=null,Oh=null,Ww=null,Hae=0,sq=1,SPe=2,Rtt=3,vv=0,Qtt=1,ktt=2,PPe=3,vPe=4,Oae=5,ph=0,D5=null,xR=null,ry=0,EPe=0,zae=-0,MPe=null,Ltt=null,zO=null,GO=null,YO=null,Gae=null,q2=Hae,BPe=null,eRn=50,aq=0,Yae=null,wPe=!1,Vae=!1,tRn=50,CR=0,cq=null,VO=!1,Ftt=!1,Uae=null,Htt=!1,Ott=new Set,nRn={},UO=null,WO=null,TPe=!1,DPe=!1,Wae=!1,NPe=!1,Xw=0,RPe={};(function(){for(var S=0;S<OSe.length;S++){var M=OSe[S],R=M.toLowerCase();M=M[0].toUpperCase()+M.slice(1),D0(R,"on"+M)}D0(get,"onAnimationEnd"),D0(fet,"onAnimationIteration"),D0(yet,"onAnimationStart"),D0("dblclick","onDoubleClick"),D0("focusin","onFocus"),D0("focusout","onBlur"),D0(TNn,"onTransitionRun"),D0(DNn,"onTransitionStart"),D0(NNn,"onTransitionCancel"),D0(xet,"onTransitionEnd")})(),xo("onMouseEnter",["mouseout","mouseover"]),xo("onMouseLeave",["mouseout","mouseover"]),xo("onPointerEnter",["pointerout","pointerover"]),xo("onPointerLeave",["pointerout","pointerover"]),Kn("onChange","change click focusin focusout input keydown keyup selectionchange".split(" ")),Kn("onSelect","focusout contextmenu dragend focusin keydown keyup mousedown mouseup selectionchange".split(" ")),Kn("onBeforeInput",["compositionend","keypress","textInput","paste"]),Kn("onCompositionEnd","compositionend focusout keydown keypress keyup mousedown".split(" ")),Kn("onCompositionStart","compositionstart focusout keydown keypress keyup mousedown".split(" ")),Kn("onCompositionUpdate","compositionupdate focusout keydown keypress keyup mousedown".split(" "));var lq="abort canplay canplaythrough durationchange emptied encrypted ended error loadeddata loadedmetadata loadstart pause play playing progress ratechange resize seeked seeking stalled suspend timeupdate volumechange waiting".split(" "),QPe=new Set("beforetoggle cancel close invalid load scroll scrollend toggle".split(" ").concat(lq)),Xae="_reactListening"+Math.random().toString(36).slice(2),ztt=!1,Gtt=!1,Kae=!1,Ytt=!1,jae=!1,qae=!1,Vtt=!1,Jae={},oRn=/\r\n?/g,iRn=/\u0000|\uFFFD/g,IR="http://www.w3.org/1999/xlink",kPe="http://www.w3.org/XML/1998/namespace",rRn={},sRn="javascript:throw new Error('React form unexpectedly submitted.')",aRn="suppressHydrationWarning",bR="&",$ae="/&",dq="$",uq="/$",Kw="$?",SR="$~",XO="$!",cRn="html",lRn="body",dRn="head",LPe="F!",Utt="F",Wtt="loading",Xtt="style",yM=0,KO=1,Zae=2,FPe=null,HPe=null,Ktt=!1,jtt={dialog:!0,webview:!0},OPe=null,hq=void 0,zPe=typeof setTimeout==="function"?setTimeout:void 0,uRn=typeof clearTimeout==="function"?clearTimeout:void 0,PR=-1,qtt=typeof Promise==="function"?Promise:void 0,Jtt=typeof requestAnimationFrame==="function"?requestAnimationFrame:zPe,hRn=typeof queueMicrotask==="function"?queueMicrotask:typeof qtt<"u"?function(S){return qtt.resolve(null).then(S).catch(WP)}:zPe,mRn=500;O0.prototype.animate=function(S,M){return M=typeof M==="number"?{duration:M}:Qs({},M),M.pseudoElement=this._selector,this._scope.animate(S,M)},O0.prototype.getAnimations=function(){for(var S=this._scope,M=this._selector,R=S.getAnimations({subtree:!0}),G=[],te=0;te<R.length;te++){var re=R[te].effect;re!==null&&re.target===S&&re.pseudoElement===M&&G.push(R[te])}return G},O0.prototype.getComputedStyle=function(){return getComputedStyle(this._scope,this._selector)},ql.prototype.addEventListener=function(S,M,R){var G=null,te=null;if(R!=null&&typeof R!=="boolean"&&(G=R.signal||null,G!==null&&G.aborted))return;this._eventListeners===null&&(this._eventListeners=[]);var re=this._eventListeners;if(N2(re,S,M,R)===-1){var Se=this,Me=M;R!=null&&typeof R!=="boolean"&&R.once===!0&&(Me=function($e){Se.removeEventListener(S,M,R),typeof M==="function"?M.call(this,$e):M.handleEvent($e)}),G!==null&&(te=Se.removeEventListener.bind(Se,S,M,R),G.addEventListener("abort",te,{once:!0}),te=G.removeEventListener.bind(G,"abort",te)),G=Ql(R),re.push({type:S,listener:M,optionsOrUseCapture:R,attachedListener:Me,cleanup:te}),b(this._fragmentFiber,z0,S,Me,G)}this._eventListeners=re},ql.prototype.removeEventListener=function(S,M,R){var G=this._eventListeners;if(G!==null&&(M=N2(G,S,M,R),M!==-1)){var te=G[M];R=te.attachedListener;var re=te.cleanup;te=Ql(te.optionsOrUseCapture),b(this._fragmentFiber,Lh,S,R,te),G.splice(M,1),re!==null&&re()}},ql.prototype.dispatchEvent=function(S){var M=E(this._fragmentFiber);if(M===null)return!0;M=Q(M);var R=this._eventListeners;if(R!==null&&0<R.length||!S.bubbles){var G=M.nodeType===9?M.createComment(""):document.createTextNode("");if(R)for(var te=0;te<R.length;te++){var re=R[te];G.addEventListener(re.type,re.attachedListener,Ql(re.optionsOrUseCapture))}if(M.appendChild(G),S=G.dispatchEvent(S),R)for(te=0;te<R.length;te++)re=R[te],G.removeEventListener(re.type,re.attachedListener,Ql(re.optionsOrUseCapture));return M.removeChild(G),S}return M.dispatchEvent(S)},ql.prototype.focus=function(S){P(this._fragmentFiber.child,!0,q4,S,void 0,void 0)},ql.prototype.focusLast=function(S){var M=[];P(this._fragmentFiber.child,!0,J4,M,void 0,void 0);for(var R=M.length-1;0<=R&&!q4(M[R],S);R--);},ql.prototype.blur=function(){var S=E(this._fragmentFiber);S!==null&&(S=Q(S),S=Rl(S).activeElement,S!==null&&b(this._fragmentFiber,UN,S))},ql.prototype.observeUsing=function(S){var M=!1,R=!1;b(this._fragmentFiber,function(G){if(G.tag===6)M=!0;else return R=!0;return!1}),M&&!R&&console.error("observeUsing() was called on a FragmentInstance with only text children. Observers do not work on text nodes."),this._observers===null&&(this._observers=new Set),this._observers.add(S),b(this._fragmentFiber,$4,S)},ql.prototype.unobserveUsing=function(S){var M=this._observers;if(M!==null&&M.has(S)){M.delete(S),b(this._fragmentFiber,WN,S);for(var R=M=0;R<N5.length;R++){var G=N5[R];G.fragmentInstance===this&&G.observer===S?S.unobserve(G.instance):N5[M++]=G}N5.length=M}else console.error("You are calling unobserveUsing() with an observer that is not being observed with this fragment instance. First attach the observer with observeUsing()")};var N5=[],GPe=!1;ql.prototype.getClientRects=function(){var S=[];return b(this._fragmentFiber,XN,S),S},ql.prototype.getRootNode=function(S){var M=E(this._fragmentFiber);return M===null?this:Q(M).getRootNode(S)},ql.prototype.compareDocumentPosition=function(S){var M=E(this._fragmentFiber);if(M===null)return Node.DOCUMENT_POSITION_DISCONNECTED;var R=[];b(this._fragmentFiber,J4,R);var G=Q(M);if(R.length===0){if(M=G,B(this._fragmentFiber)){e:{for(R=this._fragmentFiber.return;R!==null;){if(R.tag===4){R=R.stateNode.containerInfo;break e}if(R.tag===3||R.tag===5||R.tag===27)break;R=R.return}R=null}R!=null&&(M=R)}R=this._fragmentFiber;var te=G=M.compareDocumentPosition(S);return M===S?te=Node.DOCUMENT_POSITION_CONTAINS:G&Node.DOCUMENT_POSITION_CONTAINED_BY&&(R=w(R)[1],R===null?te=Node.DOCUMENT_POSITION_PRECEDING:(S=Q(R).compareDocumentPosition(S),te=S===0||S&Node.DOCUMENT_POSITION_FOLLOWING?Node.DOCUMENT_POSITION_FOLLOWING:Node.DOCUMENT_POSITION_PRECEDING)),te|=Node.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC}M=Q(R[0]),te=Q(R[R.length-1]);var re=B(this._fragmentFiber)?M.parentElement:G;if(re==null)return Node.DOCUMENT_POSITION_DISCONNECTED;G=re.compareDocumentPosition(M)&Node.DOCUMENT_POSITION_CONTAINED_BY,re=re.compareDocumentPosition(te)&Node.DOCUMENT_POSITION_CONTAINED_BY;var Se=M.compareDocumentPosition(S),Me=te.compareDocumentPosition(S),$e=Se&Node.DOCUMENT_POSITION_CONTAINED_BY||Me&Node.DOCUMENT_POSITION_CONTAINED_BY;return Me=G&&re&&Se&Node.DOCUMENT_POSITION_FOLLOWING&&Me&Node.DOCUMENT_POSITION_PRECEDING,M=G&&M===S||re&&te===S||$e||Me?Node.DOCUMENT_POSITION_CONTAINED_BY:!G&&M===S||!re&&te===S?Node.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC:Se,M&Node.DOCUMENT_POSITION_DISCONNECTED||M&Node.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC||KN(M,this._fragmentFiber,R[0],R[R.length-1],S)?M:Node.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC},ql.prototype.scrollIntoView=function(S){if(typeof S==="object")throw Error("FragmentInstance.scrollIntoView() does not support scrollIntoViewOptions. Use the alignToTop boolean instead.");var M=[];b(this._fragmentFiber,J4,M);var R=S!==!1;if(M.length===0){var G=w(this._fragmentFiber);if(G=R?G[1]||G[0]||E(this._fragmentFiber):G[0]||G[1],G===null)return;if(G.tag===6){S=Q(G),_w(S,R);return}if(G=Q(G),G.nodeType!==9){if(G.nodeType===11){R="host"in G?G.host:null,R!==null?R.scrollIntoView(S):console.warn("You are attempting to scroll a FragmentInstance that is only mounted inside a detached DocumentFragment. No scroll was performed.");return}G.scrollIntoView(S)}}for(G=R?M.length-1:0;G!==(R?-1:M.length);){var te=M[G];te.tag===6?(te=Q(te),_w(te,R)):Q(te).scrollIntoView(S),G+=R?-1:1}};var YPe=null,vR=0,mq=1,$tt=2,Ztt=3,rI=4,sI=new Map,ent=new Set,xM=ac.d;ac.d={f:function(){var S=xM.f(),M=Zb();return S||M},r:function(S){var M=ln(S);M!==null&&M.tag===5&&M.type==="form"?mN(M):xM.r(S)},D:function(S){xM.D(S),fw("dns-prefetch",S,null)},C:function(S,M){xM.C(S,M),fw("preconnect",S,M)},L:function(S,M,R){xM.L(S,M,R);var G=jO;if(G&&S&&M){var te='link[rel="preload"][as="'+Wn(M)+'"]';M==="image"?R&&R.imageSrcSet?(te+='[imagesrcset="'+Wn(R.imageSrcSet)+'"]',typeof R.imageSizes==="string"&&(te+='[imagesizes="'+Wn(R.imageSizes)+'"]')):te+='[href="'+Wn(S)+'"]':te+='[href="'+Wn(S)+'"]';var re=te;switch(M){case"style":re=Fh(S);break;case"script":re=O(S)}if(!(sI.has(re)||(S=Qs({rel:"preload",href:M==="image"&&R&&R.imageSrcSet?void 0:S,as:M},R),sI.set(re,S),G.querySelector(te)!==null||M==="style"&&G.querySelector(lu(re))||M==="script"&&G.querySelector(ae(re))))){var Se=G.createElement("link");n0(Se,"link",S),M==="style"&&(Se[b5]=!0,Se.onload=Se.onerror=function(){on(Se)}),nn(Se),G.head.appendChild(Se)}}},m:function(S,M){xM.m(S,M);var R=jO;if(R&&S){var G=M&&typeof M.as==="string"?M.as:"script",te='link[rel="modulepreload"][as="'+Wn(G)+'"][href="'+Wn(S)+'"]',re=te;switch(G){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":re=O(S)}if(!sI.has(re)&&(S=Qs({rel:"modulepreload",href:S},M),sI.set(re,S),R.querySelector(te)===null)){switch(G){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":if(R.querySelector(ae(re)))return}G=R.createElement("link"),n0(G,"link",S),nn(G),R.head.appendChild(G)}}},X:function(S,M){xM.X(S,M);var R=jO;if(R&&S){var G=vn(R).hoistableScripts,te=O(S),re=G.get(te);re||(re=R.querySelector(ae(te)),re||(S=Qs({src:S,async:!0},M),(M=sI.get(te))&&pt(S,M),re=R.createElement("script"),nn(re),n0(re,"link",S),R.head.appendChild(re)),re={type:"script",instance:re,count:1,state:null},G.set(te,re))}},S:function(S,M,R){xM.S(S,M,R);var G=jO;if(G&&S){var te=vn(G).hoistableStyles,re=Fh(S);M=M||"default";var Se=te.get(re);if(!Se){var Me={loading:vR,preload:null};if(Se=G.querySelector(lu(re)))Me.loading=mq|rI;else{S=Qs({rel:"stylesheet",href:S,"data-precedence":M},R),(R=sI.get(re))&&Ke(S,R);var $e=Se=G.createElement("link");nn($e),n0($e,"link",S),$e._p=new Promise(function(dt,Bt){$e.onload=dt,$e.onerror=Bt}),$e.addEventListener("load",function(){Me.loading|=mq}),$e.addEventListener("error",function(){Me.loading|=$tt}),Me.loading|=rI,Ne(Se,M,G)}Se={type:"stylesheet",instance:Se,count:1,state:Me},te.set(re,Se)}}},M:function(S,M){xM.M(S,M);var R=jO;if(R&&S){var G=vn(R).hoistableScripts,te=O(S),re=G.get(te);re||(re=R.querySelector(ae(te)),re||(S=Qs({src:S,async:!0,type:"module"},M),(M=sI.get(te))&&pt(S,M),re=R.createElement("script"),nn(re),n0(re,"link",S),R.head.appendChild(re)),re={type:"script",instance:re,count:1,state:null},G.set(te,re))}}};var jO=typeof document>"u"?null:document,ece=null,pRn=60000,ARn=800,_Rn=500,tce=0,VPe=null,nce=null,ER=JN,qO={$$typeof:Kc,Provider:null,Consumer:null,_currentValue:ER,_currentValue2:ER,_threadCount:0},tnt="%c%s%c",nnt="background: #e6e6e6;background: light-dark(rgba(0,0,0,0.1), rgba(255,255,255,0.25));color: #000000;color: light-dark(#000000, #ffffff);border-radius: 2px",ont="",oce=" ",gRn=Function.prototype.bind,int=!1,rnt=null,snt=null,ant=null,cnt=null,lnt=null,dnt=null,unt=null,hnt=null,mnt=null,pnt=null;rnt=function(S,M,R,G){M=e(S,M),M!==null&&(R=t(M.memoizedState,R,0,G),M.memoizedState=R,M.baseState=R,S.memoizedProps=Qs({},S.memoizedProps),R=Sn(S,2),R!==null&&Ld(R,S,2))},snt=function(S,M,R){M=e(S,M),M!==null&&(R=i(M.memoizedState,R,0),M.memoizedState=R,M.baseState=R,S.memoizedProps=Qs({},S.memoizedProps),R=Sn(S,2),R!==null&&Ld(R,S,2))},ant=function(S,M,R,G){M=e(S,M),M!==null&&(R=n(M.memoizedState,R,G),M.memoizedState=R,M.baseState=R,S.memoizedProps=Qs({},S.memoizedProps),R=Sn(S,2),R!==null&&Ld(R,S,2))},cnt=function(S,M,R){S.pendingProps=t(S.memoizedProps,M,0,R),S.alternate&&(S.alternate.pendingProps=S.pendingProps),M=Sn(S,2),M!==null&&Ld(M,S,2)},lnt=function(S,M){S.pendingProps=i(S.memoizedProps,M,0),S.alternate&&(S.alternate.pendingProps=S.pendingProps),M=Sn(S,2),M!==null&&Ld(M,S,2)},dnt=function(S,M,R){S.pendingProps=n(S.memoizedProps,M,R),S.alternate&&(S.alternate.pendingProps=S.pendingProps),M=Sn(S,2),M!==null&&Ld(M,S,2)},unt=function(S){var M=Sn(S,2);M!==null&&Ld(M,S,2)},hnt=function(S){var M=je(),R=Sn(S,M);R!==null&&Ld(R,S,M)},mnt=function(S){s=S},pnt=function(S){r=S};var JO=!0,ice=null,UPe=!1,jw=null,qw=null,Jw=null,pq=new Map,Aq=new Map,$w=[],fRn="mousedown mouseup touchcancel touchend touchstart auxclick dblclick pointercancel pointerdown pointerup dragend dragstart drop compositionend compositionstart keydown keypress keyup input textInput copy cut paste click change contextmenu reset".split(" "),rce=null;if(Xc.prototype.render=Nf.prototype.render=function(S){var M=this._internalRoot;if(M===null)throw Error("Cannot update an unmounted root.");var R=arguments;typeof R[1]==="function"?console.error("does not support the second callback argument. To execute a side effect after rendering, declare it in a component body with useEffect()."):g(R[1])?console.error("You passed a container to the second argument of root.render(...). You don't need to pass it again since you already passed it to create the root."):typeof R[1]<"u"&&console.error("You passed a second argument to root.render(...) but it only accepts one argument."),R=S;var G=M.current,te=L0(G);GC(G,te,R,M,null,null)},Xc.prototype.unmount=Nf.prototype.unmount=function(){var S=arguments;if(typeof S[0]==="function"&&console.error("does not support a callback argument. To execute a side effect after rendering, declare it in a component body with useEffect()."),S=this._internalRoot,S!==null){this._internalRoot=null;var M=S.containerInfo;(fc&(Pp|K2))!==IA&&console.error("Attempted to synchronously unmount a root while React was already rendering. React cannot finish unmounting the root until the current render has completed, which may lead to a race condition."),GC(S.current,2,null,S,null,null),Zb(),M[I5]=null}},Xc.prototype.unstable_scheduleHydration=function(S){if(S){var M=Mt();S={blockedOn:null,target:S,priority:M};for(var R=0;R<$w.length&&M!==0&&M<$w[R].priority;R++);$w.splice(R,0,S),R===0&&Cw(S)}},function(){var S=tz.version;if(S!=="19.3.1")throw Error(`Incompatible React versions: The "react" and "react-dom" packages must have the exact same version. Instead got:
- react: `+(S+`
- react-dom: 19.3.1
Learn more: https://react.dev/warnings/version-mismatch`))}(),typeof Map==="function"&&Map.prototype!=null&&typeof Map.prototype.forEach==="function"&&typeof Set==="function"&&Set.prototype!=null&&typeof Set.prototype.clear==="function"&&typeof Set.prototype.forEach==="function"||console.error("React depends on Map and Set built-in types. Make sure that you load a polyfill in older browsers. https://react.dev/link/react-polyfills"),ac.findDOMNode=function(S){var M=S._reactInternals;if(M===void 0){if(typeof S.render==="function")throw Error("Unable to find node on an unmounted component.");throw S=Object.keys(S).join(","),Error("Argument appears to not be a ReactComponent. Keys: "+S)}return S=C(M),S=S!==null?I(S):null,S=S===null?null:S.stateNode,S},!function(){var S={bundleType:1,version:"19.3.1",rendererPackageName:"react-dom",currentDispatcherRef:Dn,reconcilerVersion:"19.3.1"};return S.overrideHookState=rnt,S.overrideHookStateDeletePath=snt,S.overrideHookStateRenamePath=ant,S.overrideProps=cnt,S.overridePropsDeletePath=lnt,S.overridePropsRenamePath=dnt,S.scheduleUpdate=unt,S.scheduleRetry=hnt,S.setErrorHandler=mnt,S.setSuspenseHandler=pnt,S.scheduleRefresh=m,S.scheduleRoot=A,S.setRefreshHandler=p,S.getCurrentFiber=YC,it(S)}()&&Ms&&window.top===window.self&&(-1<navigator.userAgent.indexOf("Chrome")&&navigator.userAgent.indexOf("Edge")===-1||-1<navigator.userAgent.indexOf("Firefox"))){var Ant=window.location.protocol;/^(https?|file):$/.test(Ant)&&console.info("%cDownload the React DevTools for a better development experience: https://react.dev/link/react-devtools"+(Ant==="file:"?`
You might need to use a local HTTP server (instead of file://): https://react.dev/link/react-devtools-faq`:""),"font-weight:bold")}TRn.createRoot=function(S,M){if(!g(S))throw Error("Target container is not a DOM element.");F2(S);var R=!1,G="",te=SC,re=PC,Se=U9;return M!==null&&M!==void 0&&(M.hydrate?console.warn("hydrate through createRoot is deprecated. Use ReactDOMClient.hydrateRoot(container, <App />) instead."):typeof M==="object"&&M!==null&&M.$$typeof===O2&&console.error(`You passed a JSX element to createRoot. You probably meant to call root.render instead. Example usage:
let root = createRoot(domContainer);
root.render(<App />);`),M.unstable_strictMode===!0&&(R=!0),M.identifierPrefix!==void 0&&(G=M.identifierPrefix),M.onUncaughtError!==void 0&&(te=M.onUncaughtError),M.onCaughtError!==void 0&&(re=M.onCaughtError),M.onRecoverableError!==void 0&&(Se=M.onRecoverableError)),M=fl(S,1,!1,null,null,R,G,null,te,re,Se,_g),S[I5]=M.current,Bf(S),new Nf(M)},TRn.hydrateRoot=function(S,M,R){if(!g(S))throw Error("Target container is not a DOM element.");F2(S),M===void 0&&console.error("Must provide initial children as second argument to hydrateRoot. Example usage: hydrateRoot(domContainer, <App />)");var G=!1,te="",re=SC,Se=PC,Me=U9,$e=null;return R!==null&&R!==void 0&&(R.unstable_strictMode===!0&&(G=!0),R.identifierPrefix!==void 0&&(te=R.identifierPrefix),R.onUncaughtError!==void 0&&(re=R.onUncaughtError),R.onCaughtError!==void 0&&(Se=R.onCaughtError),R.onRecoverableError!==void 0&&(Me=R.onRecoverableError),R.formState!==void 0&&($e=R.formState)),M=fl(S,1,!0,M,R!=null?R:null,G,te,$e,re,Se,Me,_g),M.context=o0(null),R=M.current,G=L0(R),G=Oe(G),te=Ac(G),te.callback=null,mC(R,te,G),l_(G,"hydrateRoot()",null),R=G,M.current.lanes=R,Je(M,R),mg(M),S[I5]=M.current,Bf(S),new Xc(M)},TRn.version="19.3.1",typeof __REACT_DEVTOOLS_GLOBAL_HOOK__<"u"&&typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop==="function"&&__REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(Error())})()});var xnt=ct(function(DRn,lce){lce.exports=Rt(ynt())});function Int(e){return Cnt.get(e)}function RRn(e){for(let t of Object.values(bnt)){if(e in t.variants)return{baseUnit:t.baseUnit,conversionFactor:t.variants[e]};for(let[n,o]of Object.entries(t.variants)){if(!e.endsWith(n))continue;let i=e.slice(0,-n.length),r=Int(i);if(r==null)continue;return{baseUnit:t.baseUnit,conversionFactor:r*o}}}return{baseUnit:e,conversionFactor:1}}function q0(e,t){if(e===void 0||e===null)return{parsedUnit:null,unitOfValue:null,value:null};if(typeof e==="string"&&e.match(/^-?[\d.]+$/))return{value:Number.parseFloat(e),parsedUnit:null,unitOfValue:null};if(typeof e==="number")return{value:e,parsedUnit:null,unitOfValue:null};if(typeof e==="object"&&"x"in e&&"y"in e){let l=q0(e.x,t),d=q0(e.x,t),u=q0(e.y,t);if(d.value===null||u.value===null)return{parsedUnit:null,unitOfValue:null,value:null};return{parsedUnit:l.parsedUnit,unitOfValue:l.unitOfValue,value:{x:d.value,y:u.value}}}let o=e.toString().split("").reverse().join("").match(/[^\d\s]+/)?.[0];if(!o)throw Error(`Could not determine unit: "${e}"`);let i=o.split("").reverse().join(""),r=e.slice(0,-i.length),s=Int(i);if(t&&s!=null)return{parsedUnit:null,unitOfValue:t,value:Number.parseFloat(r)*s};if(s!=null&&!jPe.has(i))return{parsedUnit:null,unitOfValue:null,value:Number.parseFloat(r)*s};let{baseUnit:a,conversionFactor:c}=RRn(i);return{parsedUnit:i,unitOfValue:a,value:c*Number.parseFloat(r)}}function gd(e){if(e==null)return"";if(e===0)return"0";let t=Math.abs(e),n=nz.findIndex((s)=>{let a=t/s.value;return a>=1&&a<1000});if(n===-1)n=nz.indexOf(kRn);let o=nz[n],i=e/o.value;while(n>0&&Math.abs(Number(i.toPrecision(3)))>=1000)n-=1,o=nz[n],i=e/o.value;let r=i.toPrecision(3);if(r.includes(".")&&!/\.0+$/.test(r))r=r.replace(/0+$/,"");return r=r.replace(/\.0+$/,""),`${r}${o.symbol}`}var yc=(e)=>{let t=Math.round(e*1000)/1000;return`${Number(t.toFixed(3))}mm`},Cnt,NRn,bnt,jPe,QRn,agr,nz,kRn;var vp=Ks(()=>{Cnt=new Map([["T",1000000000000],["G",1e9],["M",1e6],["K",1000],["k",1000],["",1],["m",0.001],["µ",0.000001],["μ",0.000001],["u",0.000001],["n",0.000000001],["p",0.000000000001],["f",0.000000000000001]]),NRn=[...Cnt.keys()];bnt={Hz:{baseUnit:"Hz",variants:{MHz:1e6,kHz:1000,Hz:1}},g:{baseUnit:"g",variants:{kg:1000,g:1}},Ω:{baseUnit:"Ω",variants:{mΩ:0.001,mohm:0.001,mOhm:0.001,milliohm:0.001,Ω:1,ohm:1,Ohm:1,kΩ:1000,KΩ:1000,kohm:1000,kOhm:1000,KOhm:1000,Kohm:1000,MΩ:1e6,Mohm:1e6,MOhm:1e6,megohm:1e6,Megohm:1e6,GΩ:1e9,Gohm:1e9,GOhm:1e9,TΩ:1000000000000,Tohm:1000000000000,TOhm:1000000000000}},V:{baseUnit:"V",variants:{mV:0.001,V:1,kV:1000,KV:1000,MV:1e6,GV:1e9,TV:1000000000000}},A:{baseUnit:"A",variants:{µA:0.000001,μA:0.000001,mA:0.001,ma:0.001,A:1,kA:1000,MA:1e6}},F:{baseUnit:"F",variants:{pF:0.000000000001,nF:0.000000001,µF:0.000001,μF:0.000001,uF:0.000001,mF:0.001,F:1,kF:1000,KF:1000,MF:1e6}},H:{baseUnit:"H",variants:{pH:0.000000000001,nH:0.000000001,µH:0.000001,μH:0.000001,uH:0.000001,mH:0.001,H:1,kH:1000,KH:1000,MH:1e6}},ml:{baseUnit:"ml",variants:{ml:1,mL:1,l:1000,L:1000}},deg:{baseUnit:"deg",variants:{rad:180/Math.PI}},ms:{baseUnit:"ms",variants:{fs:0.000000000001,ps:0.000000001,ns:0.000001,us:0.001,µs:0.001,μs:0.001,ms:1,s:1000}},mm:{baseUnit:"mm",variants:{nm:0.000001,µm:0.001,μm:0.001,um:0.001,mm:1,cm:10,dm:100,m:1000,km:1e6,in:25.4,ft:304.8,IN:25.4,FT:304.8,yd:914.4,mi:1609344,mil:0.0254}}},jPe=new Set;for(let[e,t]of Object.entries(bnt)){jPe.add(e);for(let n of Object.keys(t.variants))jPe.add(n)}QRn=NRn.filter((e)=>e!=="").sort((e,t)=>t.length-e.length).map((e)=>e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")).join("|"),agr=new RegExp(`^([+-]?(?:\\d+(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+)?)(?:(${QRn}))?$`),nz=[{value:1000000000000,symbol:"T"},{value:1e9,symbol:"G"},{value:1e6,symbol:"M"},{value:1000,symbol:"k"},{value:1,symbol:""},{value:0.001,symbol:"m"},{value:0.000001,symbol:"µ"},{value:0.000000001,symbol:"n"},{value:0.000000000001,symbol:"p"}],kRn=nz[nz.length-1]});var lc,Snt,Mi,IM=(e)=>{switch(typeof e){case"undefined":return Mi.undefined;case"string":return Mi.string;case"number":return Number.isNaN(e)?Mi.nan:Mi.number;case"boolean":return Mi.boolean;case"function":return Mi.function;case"bigint":return Mi.bigint;case"symbol":return Mi.symbol;case"object":if(Array.isArray(e))return Mi.array;if(e===null)return Mi.null;if(e.then&&typeof e.then==="function"&&e.catch&&typeof e.catch==="function")return Mi.promise;if(typeof Map<"u"&&e instanceof Map)return Mi.map;if(typeof Set<"u"&&e instanceof Set)return Mi.set;if(typeof Date<"u"&&e instanceof Date)return Mi.date;return Mi.object;default:return Mi.unknown}};var _q=Ks(()=>{(function(e){e.assertEqual=(i)=>{};function t(i){}e.assertIs=t;function n(i){throw Error()}e.assertNever=n,e.arrayToEnum=(i)=>{let r={};for(let s of i)r[s]=s;return r},e.getValidEnumValues=(i)=>{let r=e.objectKeys(i).filter((a)=>typeof i[i[a]]!=="number"),s={};for(let a of r)s[a]=i[a];return e.objectValues(s)},e.objectValues=(i)=>e.objectKeys(i).map(function(r){return i[r]}),e.objectKeys=typeof Object.keys==="function"?(i)=>Object.keys(i):(i)=>{let r=[];for(let s in i)if(Object.prototype.hasOwnProperty.call(i,s))r.push(s);return r},e.find=(i,r)=>{for(let s of i)if(r(s))return s;return},e.isInteger=typeof Number.isInteger==="function"?(i)=>Number.isInteger(i):(i)=>typeof i==="number"&&Number.isFinite(i)&&Math.floor(i)===i;function o(i,r=" | "){return i.map((s)=>typeof s==="string"?`'${s}'`:s).join(r)}e.joinValues=o,e.jsonStringifyReplacer=(i,r)=>{if(typeof r==="bigint")return r.toString();return r}})(lc||(lc={}));(function(e){e.mergeShapes=(t,n)=>({...t,...n})})(Snt||(Snt={}));Mi=lc.arrayToEnum(["string","nan","number","integer","float","boolean","date","bigint","symbol","function","undefined","null","array","object","unknown","promise","void","never","map","set"])});var jt,Of;var dce=Ks(()=>{_q();jt=lc.arrayToEnum(["invalid_type","invalid_literal","custom","invalid_union","invalid_union_discriminator","invalid_enum_value","unrecognized_keys","invalid_arguments","invalid_return_type","invalid_date","invalid_string","too_small","too_big","invalid_intersection_types","not_multiple_of","not_finite"]);Of=class Of extends Error{get errors(){return this.issues}constructor(e){super();this.issues=[],this.addIssue=(n)=>{this.issues=[...this.issues,n]},this.addIssues=(n=[])=>{this.issues=[...this.issues,...n]};let t=new.target.prototype;if(Object.setPrototypeOf)Object.setPrototypeOf(this,t);else this.__proto__=t;this.name="ZodError",this.issues=e}format(e){let t=e||function(i){return i.message},n={_errors:[]},o=(i)=>{for(let r of i.issues)if(r.code==="invalid_union")r.unionErrors.map(o);else if(r.code==="invalid_return_type")o(r.returnTypeError);else if(r.code==="invalid_arguments")o(r.argumentsError);else if(r.path.length===0)n._errors.push(t(r));else{let s=n,a=0;while(a<r.path.length){let c=r.path[a];if(a!==r.path.length-1)s[c]=s[c]||{_errors:[]};else s[c]=s[c]||{_errors:[]},s[c]._errors.push(t(r));s=s[c],a++}}};return o(this),n}static assert(e){if(!(e instanceof Of))throw Error(`Not a ZodError: ${e}`)}toString(){return this.message}get message(){return JSON.stringify(this.issues,lc.jsonStringifyReplacer,2)}get isEmpty(){return this.issues.length===0}flatten(e=(t)=>t.message){let t={},n=[];for(let o of this.issues)if(o.path.length>0){let i=o.path[0];t[i]=t[i]||[],t[i].push(e(o))}else n.push(e(o));return{formErrors:n,fieldErrors:t}}get formErrors(){return this.flatten()}};Of.create=(e)=>new Of(e)});var LRn=(e,t)=>{let n;switch(e.code){case jt.invalid_type:if(e.received===Mi.undefined)n="Required";else n=`Expected ${e.expected}, received ${e.received}`;break;case jt.invalid_literal:n=`Invalid literal value, expected ${JSON.stringify(e.expected,lc.jsonStringifyReplacer)}`;break;case jt.unrecognized_keys:n=`Unrecognized key(s) in object: ${lc.joinValues(e.keys,", ")}`;break;case jt.invalid_union:n="Invalid input";break;case jt.invalid_union_discriminator:n=`Invalid discriminator value. Expected ${lc.joinValues(e.options)}`;break;case jt.invalid_enum_value:n=`Invalid enum value. Expected ${lc.joinValues(e.options)}, received '${e.received}'`;break;case jt.invalid_arguments:n="Invalid function arguments";break;case jt.invalid_return_type:n="Invalid function return type";break;case jt.invalid_date:n="Invalid date";break;case jt.invalid_string:if(typeof e.validation==="object")if("includes"in e.validation){if(n=`Invalid input: must include "${e.validation.includes}"`,typeof e.validation.position==="number")n=`${n} at one or more positions greater than or equal to ${e.validation.position}`}else if("startsWith"in e.validation)n=`Invalid input: must start with "${e.validation.startsWith}"`;else if("endsWith"in e.validation)n=`Invalid input: must end with "${e.validation.endsWith}"`;else lc.assertNever(e.validation);else if(e.validation!=="regex")n=`Invalid ${e.validation}`;else n="Invalid";break;case jt.too_small:if(e.type==="array")n=`Array must contain ${e.exact?"exactly":e.inclusive?"at least":"more than"} ${e.minimum} element(s)`;else if(e.type==="string")n=`String must contain ${e.exact?"exactly":e.inclusive?"at least":"over"} ${e.minimum} character(s)`;else if(e.type==="number")n=`Number must be ${e.exact?"exactly equal to ":e.inclusive?"greater than or equal to ":"greater than "}${e.minimum}`;else if(e.type==="bigint")n=`Number must be ${e.exact?"exactly equal to ":e.inclusive?"greater than or equal to ":"greater than "}${e.minimum}`;else if(e.type==="date")n=`Date must be ${e.exact?"exactly equal to ":e.inclusive?"greater than or equal to ":"greater than "}${new Date(Number(e.minimum))}`;else n="Invalid input";break;case jt.too_big:if(e.type==="array")n=`Array must contain ${e.exact?"exactly":e.inclusive?"at most":"less than"} ${e.maximum} element(s)`;else if(e.type==="string")n=`String must contain ${e.exact?"exactly":e.inclusive?"at most":"under"} ${e.maximum} character(s)`;else if(e.type==="number")n=`Number must be ${e.exact?"exactly":e.inclusive?"less than or equal to":"less than"} ${e.maximum}`;else if(e.type==="bigint")n=`BigInt must be ${e.exact?"exactly":e.inclusive?"less than or equal to":"less than"} ${e.maximum}`;else if(e.type==="date")n=`Date must be ${e.exact?"exactly":e.inclusive?"smaller than or equal to":"smaller than"} ${new Date(Number(e.maximum))}`;else n="Invalid input";break;case jt.custom:n="Invalid input";break;case jt.invalid_intersection_types:n="Intersection results could not be merged";break;case jt.not_multiple_of:n=`Number must be a multiple of ${e.multipleOf}`;break;case jt.not_finite:n="Number must be finite";break;default:n=t.defaultError,lc.assertNever(e)}return{message:n}},Zw;var qPe=Ks(()=>{dce();_q();Zw=LRn});function gq(){return FRn}var FRn;var uce=Ks(()=>{qPe();FRn=Zw});function mi(e,t){let n=gq(),o=hce({issueData:t,data:e.data,path:e.path,errorMaps:[e.common.contextualErrorMap,e.schemaErrorMap,n,n===Zw?void 0:Zw].filter((i)=>!!i)});e.common.issues.push(o)}class bg{constructor(){this.value="valid"}dirty(){if(this.value==="valid")this.value="dirty"}abort(){if(this.value!=="aborted")this.value="aborted"}static mergeArray(e,t){let n=[];for(let o of t){if(o.status==="aborted")return Ur;if(o.status==="dirty")e.dirty();n.push(o.value)}return{status:e.value,value:n}}static async mergeObjectAsync(e,t){let n=[];for(let o of t){let i=await o.key,r=await o.value;n.push({key:i,value:r})}return bg.mergeObjectSync(e,n)}static mergeObjectSync(e,t){let n={};for(let o of t){let{key:i,value:r}=o;if(i.status==="aborted")return Ur;if(r.status==="aborted")return Ur;if(i.status==="dirty")e.dirty();if(r.status==="dirty")e.dirty();if(i.value!=="__proto__"&&(typeof r.value<"u"||o.alwaysSet))n[i.value]=r.value}return{status:e.value,value:n}}}var hce=(e)=>{let{data:t,path:n,errorMaps:o,issueData:i}=e,r=[...n,...i.path||[]],s={...i,path:r};if(i.message!==void 0)return{...i,path:r,message:i.message};let a="",c=o.filter((l)=>!!l).slice().reverse();for(let l of c)a=l(s,{data:t,defaultError:a}).message;return{...i,path:r,message:a}},Ur,oz=(e)=>({status:"dirty",value:e}),zf=(e)=>({status:"valid",value:e}),JPe=(e)=>e.status==="aborted",$Pe=(e)=>e.status==="dirty",BR=(e)=>e.status==="valid",fq=(e)=>typeof Promise<"u"&&e instanceof Promise;var ZPe=Ks(()=>{uce();qPe();Ur=Object.freeze({status:"aborted"})});var Pnt=()=>{};var nr;var vnt=Ks(()=>{(function(e){e.errToObj=(t)=>typeof t==="string"?{message:t}:t||{},e.toString=(t)=>typeof t==="string"?t:t?.message})(nr||(nr={}))});class R5{constructor(e,t,n,o){this._cachedPath=[],this.parent=e,this.data=t,this._path=n,this._key=o}get path(){if(!this._cachedPath.length)if(Array.isArray(this._key))this._cachedPath.push(...this._path,...this._key);else this._cachedPath.push(...this._path,this._key);return this._cachedPath}}function ia(e){if(!e)return{};let{errorMap:t,invalid_type_error:n,required_error:o,description:i}=e;if(t&&(n||o))throw Error(`Can't use "invalid_type_error" or "required_error" in conjunction with custom error map.`);if(t)return{errorMap:t,description:i};return{errorMap:(s,a)=>{let{message:c}=e;if(s.code==="invalid_enum_value")return{message:c??a.defaultError};if(typeof a.data>"u")return{message:c??o??a.defaultError};if(s.code!=="invalid_type")return{message:a.defaultError};return{message:c??n??a.defaultError}},description:i}}class La{get description(){return this._def.description}_getType(e){return IM(e.data)}_getOrReturnCtx(e,t){return t||{common:e.parent.common,data:e.data,parsedType:IM(e.data),schemaErrorMap:this._def.errorMap,path:e.path,parent:e.parent}}_processInputParams(e){return{status:new bg,ctx:{common:e.parent.common,data:e.data,parsedType:IM(e.data),schemaErrorMap:this._def.errorMap,path:e.path,parent:e.parent}}}_parseSync(e){let t=this._parse(e);if(fq(t))throw Error("Synchronous parse encountered promise.");return t}_parseAsync(e){let t=this._parse(e);return Promise.resolve(t)}parse(e,t){let n=this.safeParse(e,t);if(n.success)return n.data;throw n.error}safeParse(e,t){let n={common:{issues:[],async:t?.async??!1,contextualErrorMap:t?.errorMap},path:t?.path||[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:IM(e)},o=this._parseSync({data:e,path:n.path,parent:n});return Ent(n,o)}"~validate"(e){let t={common:{issues:[],async:!!this["~standard"].async},path:[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:IM(e)};if(!this["~standard"].async)try{let n=this._parseSync({data:e,path:[],parent:t});return BR(n)?{value:n.value}:{issues:t.common.issues}}catch(n){if(n?.message?.toLowerCase()?.includes("encountered"))this["~standard"].async=!0;t.common={issues:[],async:!0}}return this._parseAsync({data:e,path:[],parent:t}).then((n)=>BR(n)?{value:n.value}:{issues:t.common.issues})}async parseAsync(e,t){let n=await this.safeParseAsync(e,t);if(n.success)return n.data;throw n.error}async safeParseAsync(e,t){let n={common:{issues:[],contextualErrorMap:t?.errorMap,async:!0},path:t?.path||[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:IM(e)},o=this._parse({data:e,path:n.path,parent:n}),i=await(fq(o)?o:Promise.resolve(o));return Ent(n,i)}refine(e,t){let n=(o)=>{if(typeof t==="string"||typeof t>"u")return{message:t};else if(typeof t==="function")return t(o);else return t};return this._refinement((o,i)=>{let r=e(o),s=()=>i.addIssue({code:jt.custom,...n(o)});if(typeof Promise<"u"&&r instanceof Promise)return r.then((a)=>{if(!a)return s(),!1;else return!0});if(!r)return s(),!1;else return!0})}refinement(e,t){return this._refinement((n,o)=>{if(!e(n))return o.addIssue(typeof t==="function"?t(n,o):t),!1;else return!0})}_refinement(e){return new wv({schema:this,typeName:ds.ZodEffects,effect:{type:"refinement",refinement:e}})}superRefine(e){return this._refinement(e)}constructor(e){this.spa=this.safeParseAsync,this._def=e,this.parse=this.parse.bind(this),this.safeParse=this.safeParse.bind(this),this.parseAsync=this.parseAsync.bind(this),this.safeParseAsync=this.safeParseAsync.bind(this),this.spa=this.spa.bind(this),this.refine=this.refine.bind(this),this.refinement=this.refinement.bind(this),this.superRefine=this.superRefine.bind(this),this.optional=this.optional.bind(this),this.nullable=this.nullable.bind(this),this.nullish=this.nullish.bind(this),this.array=this.array.bind(this),this.promise=this.promise.bind(this),this.or=this.or.bind(this),this.and=this.and.bind(this),this.transform=this.transform.bind(this),this.brand=this.brand.bind(this),this.default=this.default.bind(this),this.catch=this.catch.bind(this),this.describe=this.describe.bind(this),this.pipe=this.pipe.bind(this),this.readonly=this.readonly.bind(this),this.isNullable=this.isNullable.bind(this),this.isOptional=this.isOptional.bind(this),this["~standard"]={version:1,vendor:"zod",validate:(t)=>this["~validate"](t)}}optional(){return Bv.create(this,this._def)}nullable(){return e7.create(this,this._def)}nullish(){return this.nullable().optional()}array(){return Mv.create(this)}promise(){return cz.create(this,this._def)}or(e){return bq.create([this,e],this._def)}and(e){return Sq.create(this,e,this._def)}transform(e){return new wv({...ia(this._def),schema:this,typeName:ds.ZodEffects,effect:{type:"transform",transform:e}})}default(e){let t=typeof e==="function"?e:()=>e;return new Mq({...ia(this._def),innerType:this,defaultValue:t,typeName:ds.ZodDefault})}brand(){return new ove({typeName:ds.ZodBranded,type:this,...ia(this._def)})}catch(e){let t=typeof e==="function"?e:()=>e;return new Bq({...ia(this._def),innerType:this,catchValue:t,typeName:ds.ZodCatch})}describe(e){return new this.constructor({...this._def,description:e})}pipe(e){return fce.create(this,e)}readonly(){return wq.create(this)}isOptional(){return this.safeParse(void 0).success}isNullable(){return this.safeParse(null).success}}function wnt(e){let t="[0-5]\\d";if(e.precision)t=`${t}\\.\\d{${e.precision}}`;else if(e.precision==null)t=`${t}(\\.\\d+)?`;let n=e.precision?"+":"?";return`([01]\\d|2[0-3]):[0-5]\\d(:${t})${n}`}function tQn(e){return new RegExp(`^${wnt(e)}$`)}function nQn(e){let t=`${Bnt}T${wnt(e)}`,n=[];if(n.push(e.local?"Z?":"Z"),e.offset)n.push("([+-]\\d{2}:?\\d{2})");return t=`${t}(${n.join("|")})`,new RegExp(`^${t}$`)}function oQn(e,t){if((t==="v4"||!t)&&KRn.test(e))return!0;if((t==="v6"||!t)&&qRn.test(e))return!0;return!1}function iQn(e,t){if(!VRn.test(e))return!1;try{let[n]=e.split(".");if(!n)return!1;let o=n.replace(/-/g,"+").replace(/_/g,"/").padEnd(n.length+(4-n.length%4)%4,"="),i=JSON.parse(atob(o));if(typeof i!=="object"||i===null)return!1;if("typ"in i&&i?.typ!=="JWT")return!1;if(!i.alg)return!1;if(t&&i.alg!==t)return!1;return!0}catch{return!1}}function rQn(e,t){if((t==="v4"||!t)&&jRn.test(e))return!0;if((t==="v6"||!t)&&JRn.test(e))return!0;return!1}function sQn(e,t){let n=(e.toString().split(".")[1]||"").length,o=(t.toString().split(".")[1]||"").length,i=n>o?n:o,r=Number.parseInt(e.toFixed(i).replace(".","")),s=Number.parseInt(t.toFixed(i).replace(".",""));return r%s/10**i}function iz(e){if(e instanceof r0){let t={};for(let n in e.shape){let o=e.shape[n];t[n]=Bv.create(iz(o))}return new r0({...e._def,shape:()=>t})}else if(e instanceof Mv)return new Mv({...e._def,type:iz(e.element)});else if(e instanceof Bv)return Bv.create(iz(e.unwrap()));else if(e instanceof e7)return e7.create(iz(e.unwrap()));else if(e instanceof PM)return PM.create(e.items.map((t)=>iz(t)));else return e}function tve(e,t){let n=IM(e),o=IM(t);if(e===t)return{valid:!0,data:e};else if(n===Mi.object&&o===Mi.object){let i=lc.objectKeys(t),r=lc.objectKeys(e).filter((a)=>i.indexOf(a)!==-1),s={...e,...t};for(let a of r){let c=tve(e[a],t[a]);if(!c.valid)return{valid:!1};s[a]=c.data}return{valid:!0,data:s}}else if(n===Mi.array&&o===Mi.array){if(e.length!==t.length)return{valid:!1};let i=[];for(let r=0;r<e.length;r++){let s=e[r],a=t[r],c=tve(s,a);if(!c.valid)return{valid:!1};i.push(c.data)}return{valid:!0,data:i}}else if(n===Mi.date&&o===Mi.date&&+e===+t)return{valid:!0,data:e};else return{valid:!1}}function Tnt(e,t){return new NR({values:e,typeName:ds.ZodEnum,...ia(t)})}function Mnt(e,t){let n=typeof e==="function"?e(t):typeof e==="string"?{message:e}:e;return typeof n==="string"?{message:n}:n}function dc(e,t={},n){if(e)return sz.create().superRefine((o,i)=>{let r=e(o);if(r instanceof Promise)return r.then((s)=>{if(!s){let a=Mnt(t,o),c=a.fatal??n??!0;i.addIssue({code:"custom",...a,fatal:c})}});if(!r){let s=Mnt(t,o),a=s.fatal??n??!0;i.addIssue({code:"custom",...s,fatal:a})}return});return sz.create()}var Ent=(e,t)=>{if(BR(t))return{success:!0,data:t.value};else{if(!e.common.issues.length)throw Error("Validation failed but no issues detected.");return{success:!1,get error(){if(this._error)return this._error;let n=new Of(e.common.issues);return this._error=n,this._error}}}},HRn,ORn,zRn,GRn,YRn,VRn,URn,WRn,XRn="^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$",eve,KRn,jRn,qRn,JRn,$Rn,ZRn,Bnt="((\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-((0[13578]|1[02])-(0[1-9]|[12]\\d|3[01])|(0[469]|11)-(0[1-9]|[12]\\d|30)|(02)-(0[1-9]|1\\d|2[0-8])))",eQn,Ev,TR,DR,xq,rz,mce,Cq,Iq,sz,wR,SM,pce,Mv,r0,bq,bM=(e)=>{if(e instanceof Pq)return bM(e.schema);else if(e instanceof wv)return bM(e.innerType());else if(e instanceof vq)return[e.value];else if(e instanceof NR)return e.options;else if(e instanceof Eq)return lc.objectValues(e.enum);else if(e instanceof Mq)return bM(e._def.innerType);else if(e instanceof Cq)return[void 0];else if(e instanceof Iq)return[null];else if(e instanceof Bv)return[void 0,...bM(e.unwrap())];else if(e instanceof e7)return[null,...bM(e.unwrap())];else if(e instanceof ove)return bM(e.unwrap());else if(e instanceof wq)return bM(e.unwrap());else if(e instanceof Bq)return bM(e._def.innerType);else return[]},nve,Sq,PM,Ace,_ce,az,yq,Pq,vq,NR,Eq,cz,wv,Bv,e7,Mq,Bq,gce,vgr,ove,fce,wq,Egr,ds,Z,He,Mgr,Bgr,Ue,wgr,Tgr,Dgr,Dnt,_h,ive,Sg,Ngr,Qt,at,Rgr,kn,nl,Qgr,t7,Fa,kgr,Lgr,n7,Fgr,Be,Zt,Hgr,o7,Ogr,zgr,Ggr,Tq,Ygr,Tv,yce;var Nnt=Ks(()=>{dce();uce();vnt();ZPe();_q();HRn=/^c[^\s-]{8,}$/i,ORn=/^[0-9a-z]+$/,zRn=/^[0-9A-HJKMNP-TV-Z]{26}$/i,GRn=/^[0-9a-fA-F]{8}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{12}$/i,YRn=/^[a-z0-9_-]{21}$/i,VRn=/^[A-Za-z0-9-_]+\.[A-Za-z0-9-_]+\.[A-Za-z0-9-_]*$/,URn=/^[-+]?P(?!$)(?:(?:[-+]?\d+Y)|(?:[-+]?\d+[.,]\d+Y$))?(?:(?:[-+]?\d+M)|(?:[-+]?\d+[.,]\d+M$))?(?:(?:[-+]?\d+W)|(?:[-+]?\d+[.,]\d+W$))?(?:(?:[-+]?\d+D)|(?:[-+]?\d+[.,]\d+D$))?(?:T(?=[\d+-])(?:(?:[-+]?\d+H)|(?:[-+]?\d+[.,]\d+H$))?(?:(?:[-+]?\d+M)|(?:[-+]?\d+[.,]\d+M$))?(?:[-+]?\d+(?:[.,]\d+)?S)?)??$/,WRn=/^(?!\.)(?!.*\.\.)([A-Z0-9_'+\-\.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9\-]*\.)+[A-Z]{2,}$/i,KRn=/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/,jRn=/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\/(3[0-2]|[12]?[0-9])$/,qRn=/^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$/,JRn=/^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/,$Rn=/^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/,ZRn=/^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/,eQn=new RegExp(`^${Bnt}$`);Ev=class Ev extends La{_parse(e){if(this._def.coerce)e.data=String(e.data);if(this._getType(e)!==Mi.string){let i=this._getOrReturnCtx(e);return mi(i,{code:jt.invalid_type,expected:Mi.string,received:i.parsedType}),Ur}let n=new bg,o=void 0;for(let i of this._def.checks)if(i.kind==="min"){if(e.data.length<i.value)o=this._getOrReturnCtx(e,o),mi(o,{code:jt.too_small,minimum:i.value,type:"string",inclusive:!0,exact:!1,message:i.message}),n.dirty()}else if(i.kind==="max"){if(e.data.length>i.value)o=this._getOrReturnCtx(e,o),mi(o,{code:jt.too_big,maximum:i.value,type:"string",inclusive:!0,exact:!1,message:i.message}),n.dirty()}else if(i.kind==="length"){let r=e.data.length>i.value,s=e.data.length<i.value;if(r||s){if(o=this._getOrReturnCtx(e,o),r)mi(o,{code:jt.too_big,maximum:i.value,type:"string",inclusive:!0,exact:!0,message:i.message});else if(s)mi(o,{code:jt.too_small,minimum:i.value,type:"string",inclusive:!0,exact:!0,message:i.message});n.dirty()}}else if(i.kind==="email"){if(!WRn.test(e.data))o=this._getOrReturnCtx(e,o),mi(o,{validation:"email",code:jt.invalid_string,message:i.message}),n.dirty()}else if(i.kind==="emoji"){if(!eve)eve=new RegExp(XRn,"u");if(!eve.test(e.data))o=this._getOrReturnCtx(e,o),mi(o,{validation:"emoji",code:jt.invalid_string,message:i.message}),n.dirty()}else if(i.kind==="uuid"){if(!GRn.test(e.data))o=this._getOrReturnCtx(e,o),mi(o,{validation:"uuid",code:jt.invalid_string,message:i.message}),n.dirty()}else if(i.kind==="nanoid"){if(!YRn.test(e.data))o=this._getOrReturnCtx(e,o),mi(o,{validation:"nanoid",code:jt.invalid_string,message:i.message}),n.dirty()}else if(i.kind==="cuid"){if(!HRn.test(e.data))o=this._getOrReturnCtx(e,o),mi(o,{validation:"cuid",code:jt.invalid_string,message:i.message}),n.dirty()}else if(i.kind==="cuid2"){if(!ORn.test(e.data))o=this._getOrReturnCtx(e,o),mi(o,{validation:"cuid2",code:jt.invalid_string,message:i.message}),n.dirty()}else if(i.kind==="ulid"){if(!zRn.test(e.data))o=this._getOrReturnCtx(e,o),mi(o,{validation:"ulid",code:jt.invalid_string,message:i.message}),n.dirty()}else if(i.kind==="url")try{new URL(e.data)}catch{o=this._getOrReturnCtx(e,o),mi(o,{validation:"url",code:jt.invalid_string,message:i.message}),n.dirty()}else if(i.kind==="regex"){if(i.regex.lastIndex=0,!i.regex.test(e.data))o=this._getOrReturnCtx(e,o),mi(o,{validation:"regex",code:jt.invalid_string,message:i.message}),n.dirty()}else if(i.kind==="trim")e.data=e.data.trim();else if(i.kind==="includes"){if(!e.data.includes(i.value,i.position))o=this._getOrReturnCtx(e,o),mi(o,{code:jt.invalid_string,validation:{includes:i.value,position:i.position},message:i.message}),n.dirty()}else if(i.kind==="toLowerCase")e.data=e.data.toLowerCase();else if(i.kind==="toUpperCase")e.data=e.data.toUpperCase();else if(i.kind==="startsWith"){if(!e.data.startsWith(i.value))o=this._getOrReturnCtx(e,o),mi(o,{code:jt.invalid_string,validation:{startsWith:i.value},message:i.message}),n.dirty()}else if(i.kind==="endsWith"){if(!e.data.endsWith(i.value))o=this._getOrReturnCtx(e,o),mi(o,{code:jt.invalid_string,validation:{endsWith:i.value},message:i.message}),n.dirty()}else if(i.kind==="datetime"){if(!nQn(i).test(e.data))o=this._getOrReturnCtx(e,o),mi(o,{code:jt.invalid_string,validation:"datetime",message:i.message}),n.dirty()}else if(i.kind==="date"){if(!eQn.test(e.data))o=this._getOrReturnCtx(e,o),mi(o,{code:jt.invalid_string,validation:"date",message:i.message}),n.dirty()}else if(i.kind==="time"){if(!tQn(i).test(e.data))o=this._getOrReturnCtx(e,o),mi(o,{code:jt.invalid_string,validation:"time",message:i.message}),n.dirty()}else if(i.kind==="duration"){if(!URn.test(e.data))o=this._getOrReturnCtx(e,o),mi(o,{validation:"duration",code:jt.invalid_string,message:i.message}),n.dirty()}else if(i.kind==="ip"){if(!oQn(e.data,i.version))o=this._getOrReturnCtx(e,o),mi(o,{validation:"ip",code:jt.invalid_string,message:i.message}),n.dirty()}else if(i.kind==="jwt"){if(!iQn(e.data,i.alg))o=this._getOrReturnCtx(e,o),mi(o,{validation:"jwt",code:jt.invalid_string,message:i.message}),n.dirty()}else if(i.kind==="cidr"){if(!rQn(e.data,i.version))o=this._getOrReturnCtx(e,o),mi(o,{validation:"cidr",code:jt.invalid_string,message:i.message}),n.dirty()}else if(i.kind==="base64"){if(!$Rn.test(e.data))o=this._getOrReturnCtx(e,o),mi(o,{validation:"base64",code:jt.invalid_string,message:i.message}),n.dirty()}else if(i.kind==="base64url"){if(!ZRn.test(e.data))o=this._getOrReturnCtx(e,o),mi(o,{validation:"base64url",code:jt.invalid_string,message:i.message}),n.dirty()}else lc.assertNever(i);return{status:n.value,value:e.data}}_regex(e,t,n){return this.refinement((o)=>e.test(o),{validation:t,code:jt.invalid_string,...nr.errToObj(n)})}_addCheck(e){return new Ev({...this._def,checks:[...this._def.checks,e]})}email(e){return this._addCheck({kind:"email",...nr.errToObj(e)})}url(e){return this._addCheck({kind:"url",...nr.errToObj(e)})}emoji(e){return this._addCheck({kind:"emoji",...nr.errToObj(e)})}uuid(e){return this._addCheck({kind:"uuid",...nr.errToObj(e)})}nanoid(e){return this._addCheck({kind:"nanoid",...nr.errToObj(e)})}cuid(e){return this._addCheck({kind:"cuid",...nr.errToObj(e)})}cuid2(e){return this._addCheck({kind:"cuid2",...nr.errToObj(e)})}ulid(e){return this._addCheck({kind:"ulid",...nr.errToObj(e)})}base64(e){return this._addCheck({kind:"base64",...nr.errToObj(e)})}base64url(e){return this._addCheck({kind:"base64url",...nr.errToObj(e)})}jwt(e){return this._addCheck({kind:"jwt",...nr.errToObj(e)})}ip(e){return this._addCheck({kind:"ip",...nr.errToObj(e)})}cidr(e){return this._addCheck({kind:"cidr",...nr.errToObj(e)})}datetime(e){if(typeof e==="string")return this._addCheck({kind:"datetime",precision:null,offset:!1,local:!1,message:e});return this._addCheck({kind:"datetime",precision:typeof e?.precision>"u"?null:e?.precision,offset:e?.offset??!1,local:e?.local??!1,...nr.errToObj(e?.message)})}date(e){return this._addCheck({kind:"date",message:e})}time(e){if(typeof e==="string")return this._addCheck({kind:"time",precision:null,message:e});return this._addCheck({kind:"time",precision:typeof e?.precision>"u"?null:e?.precision,...nr.errToObj(e?.message)})}duration(e){return this._addCheck({kind:"duration",...nr.errToObj(e)})}regex(e,t){return this._addCheck({kind:"regex",regex:e,...nr.errToObj(t)})}includes(e,t){return this._addCheck({kind:"includes",value:e,position:t?.position,...nr.errToObj(t?.message)})}startsWith(e,t){return this._addCheck({kind:"startsWith",value:e,...nr.errToObj(t)})}endsWith(e,t){return this._addCheck({kind:"endsWith",value:e,...nr.errToObj(t)})}min(e,t){return this._addCheck({kind:"min",value:e,...nr.errToObj(t)})}max(e,t){return this._addCheck({kind:"max",value:e,...nr.errToObj(t)})}length(e,t){return this._addCheck({kind:"length",value:e,...nr.errToObj(t)})}nonempty(e){return this.min(1,nr.errToObj(e))}trim(){return new Ev({...this._def,checks:[...this._def.checks,{kind:"trim"}]})}toLowerCase(){return new Ev({...this._def,checks:[...this._def.checks,{kind:"toLowerCase"}]})}toUpperCase(){return new Ev({...this._def,checks:[...this._def.checks,{kind:"toUpperCase"}]})}get isDatetime(){return!!this._def.checks.find((e)=>e.kind==="datetime")}get isDate(){return!!this._def.checks.find((e)=>e.kind==="date")}get isTime(){return!!this._def.checks.find((e)=>e.kind==="time")}get isDuration(){return!!this._def.checks.find((e)=>e.kind==="duration")}get isEmail(){return!!this._def.checks.find((e)=>e.kind==="email")}get isURL(){return!!this._def.checks.find((e)=>e.kind==="url")}get isEmoji(){return!!this._def.checks.find((e)=>e.kind==="emoji")}get isUUID(){return!!this._def.checks.find((e)=>e.kind==="uuid")}get isNANOID(){return!!this._def.checks.find((e)=>e.kind==="nanoid")}get isCUID(){return!!this._def.checks.find((e)=>e.kind==="cuid")}get isCUID2(){return!!this._def.checks.find((e)=>e.kind==="cuid2")}get isULID(){return!!this._def.checks.find((e)=>e.kind==="ulid")}get isIP(){return!!this._def.checks.find((e)=>e.kind==="ip")}get isCIDR(){return!!this._def.checks.find((e)=>e.kind==="cidr")}get isBase64(){return!!this._def.checks.find((e)=>e.kind==="base64")}get isBase64url(){return!!this._def.checks.find((e)=>e.kind==="base64url")}get minLength(){let e=null;for(let t of this._def.checks)if(t.kind==="min"){if(e===null||t.value>e)e=t.value}return e}get maxLength(){let e=null;for(let t of this._def.checks)if(t.kind==="max"){if(e===null||t.value<e)e=t.value}return e}};Ev.create=(e)=>new Ev({checks:[],typeName:ds.ZodString,coerce:e?.coerce??!1,...ia(e)});TR=class TR extends La{constructor(){super(...arguments);this.min=this.gte,this.max=this.lte,this.step=this.multipleOf}_parse(e){if(this._def.coerce)e.data=Number(e.data);if(this._getType(e)!==Mi.number){let i=this._getOrReturnCtx(e);return mi(i,{code:jt.invalid_type,expected:Mi.number,received:i.parsedType}),Ur}let n=void 0,o=new bg;for(let i of this._def.checks)if(i.kind==="int"){if(!lc.isInteger(e.data))n=this._getOrReturnCtx(e,n),mi(n,{code:jt.invalid_type,expected:"integer",received:"float",message:i.message}),o.dirty()}else if(i.kind==="min"){if(i.inclusive?e.data<i.value:e.data<=i.value)n=this._getOrReturnCtx(e,n),mi(n,{code:jt.too_small,minimum:i.value,type:"number",inclusive:i.inclusive,exact:!1,message:i.message}),o.dirty()}else if(i.kind==="max"){if(i.inclusive?e.data>i.value:e.data>=i.value)n=this._getOrReturnCtx(e,n),mi(n,{code:jt.too_big,maximum:i.value,type:"number",inclusive:i.inclusive,exact:!1,message:i.message}),o.dirty()}else if(i.kind==="multipleOf"){if(sQn(e.data,i.value)!==0)n=this._getOrReturnCtx(e,n),mi(n,{code:jt.not_multiple_of,multipleOf:i.value,message:i.message}),o.dirty()}else if(i.kind==="finite"){if(!Number.isFinite(e.data))n=this._getOrReturnCtx(e,n),mi(n,{code:jt.not_finite,message:i.message}),o.dirty()}else lc.assertNever(i);return{status:o.value,value:e.data}}gte(e,t){return this.setLimit("min",e,!0,nr.toString(t))}gt(e,t){return this.setLimit("min",e,!1,nr.toString(t))}lte(e,t){return this.setLimit("max",e,!0,nr.toString(t))}lt(e,t){return this.setLimit("max",e,!1,nr.toString(t))}setLimit(e,t,n,o){return new TR({...this._def,checks:[...this._def.checks,{kind:e,value:t,inclusive:n,message:nr.toString(o)}]})}_addCheck(e){return new TR({...this._def,checks:[...this._def.checks,e]})}int(e){return this._addCheck({kind:"int",message:nr.toString(e)})}positive(e){return this._addCheck({kind:"min",value:0,inclusive:!1,message:nr.toString(e)})}negative(e){return this._addCheck({kind:"max",value:0,inclusive:!1,message:nr.toString(e)})}nonpositive(e){return this._addCheck({kind:"max",value:0,inclusive:!0,message:nr.toString(e)})}nonnegative(e){return this._addCheck({kind:"min",value:0,inclusive:!0,message:nr.toString(e)})}multipleOf(e,t){return this._addCheck({kind:"multipleOf",value:e,message:nr.toString(t)})}finite(e){return this._addCheck({kind:"finite",message:nr.toString(e)})}safe(e){return this._addCheck({kind:"min",inclusive:!0,value:Number.MIN_SAFE_INTEGER,message:nr.toString(e)})._addCheck({kind:"max",inclusive:!0,value:Number.MAX_SAFE_INTEGER,message:nr.toString(e)})}get minValue(){let e=null;for(let t of this._def.checks)if(t.kind==="min"){if(e===null||t.value>e)e=t.value}return e}get maxValue(){let e=null;for(let t of this._def.checks)if(t.kind==="max"){if(e===null||t.value<e)e=t.value}return e}get isInt(){return!!this._def.checks.find((e)=>e.kind==="int"||e.kind==="multipleOf"&&lc.isInteger(e.value))}get isFinite(){let e=null,t=null;for(let n of this._def.checks)if(n.kind==="finite"||n.kind==="int"||n.kind==="multipleOf")return!0;else if(n.kind==="min"){if(t===null||n.value>t)t=n.value}else if(n.kind==="max"){if(e===null||n.value<e)e=n.value}return Number.isFinite(t)&&Number.isFinite(e)}};TR.create=(e)=>new TR({checks:[],typeName:ds.ZodNumber,coerce:e?.coerce||!1,...ia(e)});DR=class DR extends La{constructor(){super(...arguments);this.min=this.gte,this.max=this.lte}_parse(e){if(this._def.coerce)try{e.data=BigInt(e.data)}catch{return this._getInvalidInput(e)}if(this._getType(e)!==Mi.bigint)return this._getInvalidInput(e);let n=void 0,o=new bg;for(let i of this._def.checks)if(i.kind==="min"){if(i.inclusive?e.data<i.value:e.data<=i.value)n=this._getOrReturnCtx(e,n),mi(n,{code:jt.too_small,type:"bigint",minimum:i.value,inclusive:i.inclusive,message:i.message}),o.dirty()}else if(i.kind==="max"){if(i.inclusive?e.data>i.value:e.data>=i.value)n=this._getOrReturnCtx(e,n),mi(n,{code:jt.too_big,type:"bigint",maximum:i.value,inclusive:i.inclusive,message:i.message}),o.dirty()}else if(i.kind==="multipleOf"){if(e.data%i.value!==BigInt(0))n=this._getOrReturnCtx(e,n),mi(n,{code:jt.not_multiple_of,multipleOf:i.value,message:i.message}),o.dirty()}else lc.assertNever(i);return{status:o.value,value:e.data}}_getInvalidInput(e){let t=this._getOrReturnCtx(e);return mi(t,{code:jt.invalid_type,expected:Mi.bigint,received:t.parsedType}),Ur}gte(e,t){return this.setLimit("min",e,!0,nr.toString(t))}gt(e,t){return this.setLimit("min",e,!1,nr.toString(t))}lte(e,t){return this.setLimit("max",e,!0,nr.toString(t))}lt(e,t){return this.setLimit("max",e,!1,nr.toString(t))}setLimit(e,t,n,o){return new DR({...this._def,checks:[...this._def.checks,{kind:e,value:t,inclusive:n,message:nr.toString(o)}]})}_addCheck(e){return new DR({...this._def,checks:[...this._def.checks,e]})}positive(e){return this._addCheck({kind:"min",value:BigInt(0),inclusive:!1,message:nr.toString(e)})}negative(e){return this._addCheck({kind:"max",value:BigInt(0),inclusive:!1,message:nr.toString(e)})}nonpositive(e){return this._addCheck({kind:"max",value:BigInt(0),inclusive:!0,message:nr.toString(e)})}nonnegative(e){return this._addCheck({kind:"min",value:BigInt(0),inclusive:!0,message:nr.toString(e)})}multipleOf(e,t){return this._addCheck({kind:"multipleOf",value:e,message:nr.toString(t)})}get minValue(){let e=null;for(let t of this._def.checks)if(t.kind==="min"){if(e===null||t.value>e)e=t.value}return e}get maxValue(){let e=null;for(let t of this._def.checks)if(t.kind==="max"){if(e===null||t.value<e)e=t.value}return e}};DR.create=(e)=>new DR({checks:[],typeName:ds.ZodBigInt,coerce:e?.coerce??!1,...ia(e)});xq=class xq extends La{_parse(e){if(this._def.coerce)e.data=Boolean(e.data);if(this._getType(e)!==Mi.boolean){let n=this._getOrReturnCtx(e);return mi(n,{code:jt.invalid_type,expected:Mi.boolean,received:n.parsedType}),Ur}return zf(e.data)}};xq.create=(e)=>new xq({typeName:ds.ZodBoolean,coerce:e?.coerce||!1,...ia(e)});rz=class rz extends La{_parse(e){if(this._def.coerce)e.data=new Date(e.data);if(this._getType(e)!==Mi.date){let i=this._getOrReturnCtx(e);return mi(i,{code:jt.invalid_type,expected:Mi.date,received:i.parsedType}),Ur}if(Number.isNaN(e.data.getTime())){let i=this._getOrReturnCtx(e);return mi(i,{code:jt.invalid_date}),Ur}let n=new bg,o=void 0;for(let i of this._def.checks)if(i.kind==="min"){if(e.data.getTime()<i.value)o=this._getOrReturnCtx(e,o),mi(o,{code:jt.too_small,message:i.message,inclusive:!0,exact:!1,minimum:i.value,type:"date"}),n.dirty()}else if(i.kind==="max"){if(e.data.getTime()>i.value)o=this._getOrReturnCtx(e,o),mi(o,{code:jt.too_big,message:i.message,inclusive:!0,exact:!1,maximum:i.value,type:"date"}),n.dirty()}else lc.assertNever(i);return{status:n.value,value:new Date(e.data.getTime())}}_addCheck(e){return new rz({...this._def,checks:[...this._def.checks,e]})}min(e,t){return this._addCheck({kind:"min",value:e.getTime(),message:nr.toString(t)})}max(e,t){return this._addCheck({kind:"max",value:e.getTime(),message:nr.toString(t)})}get minDate(){let e=null;for(let t of this._def.checks)if(t.kind==="min"){if(e===null||t.value>e)e=t.value}return e!=null?new Date(e):null}get maxDate(){let e=null;for(let t of this._def.checks)if(t.kind==="max"){if(e===null||t.value<e)e=t.value}return e!=null?new Date(e):null}};rz.create=(e)=>new rz({checks:[],coerce:e?.coerce||!1,typeName:ds.ZodDate,...ia(e)});mce=class mce extends La{_parse(e){if(this._getType(e)!==Mi.symbol){let n=this._getOrReturnCtx(e);return mi(n,{code:jt.invalid_type,expected:Mi.symbol,received:n.parsedType}),Ur}return zf(e.data)}};mce.create=(e)=>new mce({typeName:ds.ZodSymbol,...ia(e)});Cq=class Cq extends La{_parse(e){if(this._getType(e)!==Mi.undefined){let n=this._getOrReturnCtx(e);return mi(n,{code:jt.invalid_type,expected:Mi.undefined,received:n.parsedType}),Ur}return zf(e.data)}};Cq.create=(e)=>new Cq({typeName:ds.ZodUndefined,...ia(e)});Iq=class Iq extends La{_parse(e){if(this._getType(e)!==Mi.null){let n=this._getOrReturnCtx(e);return mi(n,{code:jt.invalid_type,expected:Mi.null,received:n.parsedType}),Ur}return zf(e.data)}};Iq.create=(e)=>new Iq({typeName:ds.ZodNull,...ia(e)});sz=class sz extends La{constructor(){super(...arguments);this._any=!0}_parse(e){return zf(e.data)}};sz.create=(e)=>new sz({typeName:ds.ZodAny,...ia(e)});wR=class wR extends La{constructor(){super(...arguments);this._unknown=!0}_parse(e){return zf(e.data)}};wR.create=(e)=>new wR({typeName:ds.ZodUnknown,...ia(e)});SM=class SM extends La{_parse(e){let t=this._getOrReturnCtx(e);return mi(t,{code:jt.invalid_type,expected:Mi.never,received:t.parsedType}),Ur}};SM.create=(e)=>new SM({typeName:ds.ZodNever,...ia(e)});pce=class pce extends La{_parse(e){if(this._getType(e)!==Mi.undefined){let n=this._getOrReturnCtx(e);return mi(n,{code:jt.invalid_type,expected:Mi.void,received:n.parsedType}),Ur}return zf(e.data)}};pce.create=(e)=>new pce({typeName:ds.ZodVoid,...ia(e)});Mv=class Mv extends La{_parse(e){let{ctx:t,status:n}=this._processInputParams(e),o=this._def;if(t.parsedType!==Mi.array)return mi(t,{code:jt.invalid_type,expected:Mi.array,received:t.parsedType}),Ur;if(o.exactLength!==null){let r=t.data.length>o.exactLength.value,s=t.data.length<o.exactLength.value;if(r||s)mi(t,{code:r?jt.too_big:jt.too_small,minimum:s?o.exactLength.value:void 0,maximum:r?o.exactLength.value:void 0,type:"array",inclusive:!0,exact:!0,message:o.exactLength.message}),n.dirty()}if(o.minLength!==null){if(t.data.length<o.minLength.value)mi(t,{code:jt.too_small,minimum:o.minLength.value,type:"array",inclusive:!0,exact:!1,message:o.minLength.message}),n.dirty()}if(o.maxLength!==null){if(t.data.length>o.maxLength.value)mi(t,{code:jt.too_big,maximum:o.maxLength.value,type:"array",inclusive:!0,exact:!1,message:o.maxLength.message}),n.dirty()}if(t.common.async)return Promise.all([...t.data].map((r,s)=>o.type._parseAsync(new R5(t,r,t.path,s)))).then((r)=>bg.mergeArray(n,r));let i=[...t.data].map((r,s)=>o.type._parseSync(new R5(t,r,t.path,s)));return bg.mergeArray(n,i)}get element(){return this._def.type}min(e,t){return new Mv({...this._def,minLength:{value:e,message:nr.toString(t)}})}max(e,t){return new Mv({...this._def,maxLength:{value:e,message:nr.toString(t)}})}length(e,t){return new Mv({...this._def,exactLength:{value:e,message:nr.toString(t)}})}nonempty(e){return this.min(1,e)}};Mv.create=(e,t)=>new Mv({type:e,minLength:null,maxLength:null,exactLength:null,typeName:ds.ZodArray,...ia(t)});r0=class r0 extends La{constructor(){super(...arguments);this._cached=null,this.nonstrict=this.passthrough,this.augment=this.extend}_getCached(){if(this._cached!==null)return this._cached;let e=this._def.shape(),t=lc.objectKeys(e);return this._cached={shape:e,keys:t},this._cached}_parse(e){if(this._getType(e)!==Mi.object){let c=this._getOrReturnCtx(e);return mi(c,{code:jt.invalid_type,expected:Mi.object,received:c.parsedType}),Ur}let{status:n,ctx:o}=this._processInputParams(e),{shape:i,keys:r}=this._getCached(),s=[];if(!(this._def.catchall instanceof SM&&this._def.unknownKeys==="strip")){for(let c in o.data)if(!r.includes(c))s.push(c)}let a=[];for(let c of r){let l=i[c],d=o.data[c];a.push({key:{status:"valid",value:c},value:l._parse(new R5(o,d,o.path,c)),alwaysSet:c in o.data})}if(this._def.catchall instanceof SM){let c=this._def.unknownKeys;if(c==="passthrough")for(let l of s)a.push({key:{status:"valid",value:l},value:{status:"valid",value:o.data[l]}});else if(c==="strict"){if(s.length>0)mi(o,{code:jt.unrecognized_keys,keys:s}),n.dirty()}else if(c==="strip");else throw Error("Internal ZodObject error: invalid unknownKeys value.")}else{let c=this._def.catchall;for(let l of s){let d=o.data[l];a.push({key:{status:"valid",value:l},value:c._parse(new R5(o,d,o.path,l)),alwaysSet:l in o.data})}}if(o.common.async)return Promise.resolve().then(async()=>{let c=[];for(let l of a){let d=await l.key,u=await l.value;c.push({key:d,value:u,alwaysSet:l.alwaysSet})}return c}).then((c)=>bg.mergeObjectSync(n,c));else return bg.mergeObjectSync(n,a)}get shape(){return this._def.shape()}strict(e){return nr.errToObj,new r0({...this._def,unknownKeys:"strict",...e!==void 0?{errorMap:(t,n)=>{let o=this._def.errorMap?.(t,n).message??n.defaultError;if(t.code==="unrecognized_keys")return{message:nr.errToObj(e).message??o};return{message:o}}}:{}})}strip(){return new r0({...this._def,unknownKeys:"strip"})}passthrough(){return new r0({...this._def,unknownKeys:"passthrough"})}extend(e){return new r0({...this._def,shape:()=>({...this._def.shape(),...e})})}merge(e){return new r0({unknownKeys:e._def.unknownKeys,catchall:e._def.catchall,shape:()=>({...this._def.shape(),...e._def.shape()}),typeName:ds.ZodObject})}setKey(e,t){return this.augment({[e]:t})}catchall(e){return new r0({...this._def,catchall:e})}pick(e){let t={};for(let n of lc.objectKeys(e))if(e[n]&&this.shape[n])t[n]=this.shape[n];return new r0({...this._def,shape:()=>t})}omit(e){let t={};for(let n of lc.objectKeys(this.shape))if(!e[n])t[n]=this.shape[n];return new r0({...this._def,shape:()=>t})}deepPartial(){return iz(this)}partial(e){let t={};for(let n of lc.objectKeys(this.shape)){let o=this.shape[n];if(e&&!e[n])t[n]=o;else t[n]=o.optional()}return new r0({...this._def,shape:()=>t})}required(e){let t={};for(let n of lc.objectKeys(this.shape))if(e&&!e[n])t[n]=this.shape[n];else{let i=this.shape[n];while(i instanceof Bv)i=i._def.innerType;t[n]=i}return new r0({...this._def,shape:()=>t})}keyof(){return Tnt(lc.objectKeys(this.shape))}};r0.create=(e,t)=>new r0({shape:()=>e,unknownKeys:"strip",catchall:SM.create(),typeName:ds.ZodObject,...ia(t)});r0.strictCreate=(e,t)=>new r0({shape:()=>e,unknownKeys:"strict",catchall:SM.create(),typeName:ds.ZodObject,...ia(t)});r0.lazycreate=(e,t)=>new r0({shape:e,unknownKeys:"strip",catchall:SM.create(),typeName:ds.ZodObject,...ia(t)});bq=class bq extends La{_parse(e){let{ctx:t}=this._processInputParams(e),n=this._def.options;function o(i){for(let s of i)if(s.result.status==="valid")return s.result;for(let s of i)if(s.result.status==="dirty")return t.common.issues.push(...s.ctx.common.issues),s.result;let r=i.map((s)=>new Of(s.ctx.common.issues));return mi(t,{code:jt.invalid_union,unionErrors:r}),Ur}if(t.common.async)return Promise.all(n.map(async(i)=>{let r={...t,common:{...t.common,issues:[]},parent:null};return{result:await i._parseAsync({data:t.data,path:t.path,parent:r}),ctx:r}})).then(o);else{let i=void 0,r=[];for(let a of n){let c={...t,common:{...t.common,issues:[]},parent:null},l=a._parseSync({data:t.data,path:t.path,parent:c});if(l.status==="valid")return l;else if(l.status==="dirty"&&!i)i={result:l,ctx:c};if(c.common.issues.length)r.push(c.common.issues)}if(i)return t.common.issues.push(...i.ctx.common.issues),i.result;let s=r.map((a)=>new Of(a));return mi(t,{code:jt.invalid_union,unionErrors:s}),Ur}}get options(){return this._def.options}};bq.create=(e,t)=>new bq({options:e,typeName:ds.ZodUnion,...ia(t)});nve=class nve extends La{_parse(e){let{ctx:t}=this._processInputParams(e);if(t.parsedType!==Mi.object)return mi(t,{code:jt.invalid_type,expected:Mi.object,received:t.parsedType}),Ur;let n=this.discriminator,o=t.data[n],i=this.optionsMap.get(o);if(!i)return mi(t,{code:jt.invalid_union_discriminator,options:Array.from(this.optionsMap.keys()),path:[n]}),Ur;if(t.common.async)return i._parseAsync({data:t.data,path:t.path,parent:t});else return i._parseSync({data:t.data,path:t.path,parent:t})}get discriminator(){return this._def.discriminator}get options(){return this._def.options}get optionsMap(){return this._def.optionsMap}static create(e,t,n){let o=new Map;for(let i of t){let r=bM(i.shape[e]);if(!r.length)throw Error(`A discriminator value for key \`${e}\` could not be extracted from all schema options`);for(let s of r){if(o.has(s))throw Error(`Discriminator property ${String(e)} has duplicate value ${String(s)}`);o.set(s,i)}}return new nve({typeName:ds.ZodDiscriminatedUnion,discriminator:e,options:t,optionsMap:o,...ia(n)})}};Sq=class Sq extends La{_parse(e){let{status:t,ctx:n}=this._processInputParams(e),o=(i,r)=>{if(JPe(i)||JPe(r))return Ur;let s=tve(i.value,r.value);if(!s.valid)return mi(n,{code:jt.invalid_intersection_types}),Ur;if($Pe(i)||$Pe(r))t.dirty();return{status:t.value,value:s.data}};if(n.common.async)return Promise.all([this._def.left._parseAsync({data:n.data,path:n.path,parent:n}),this._def.right._parseAsync({data:n.data,path:n.path,parent:n})]).then(([i,r])=>o(i,r));else return o(this._def.left._parseSync({data:n.data,path:n.path,parent:n}),this._def.right._parseSync({data:n.data,path:n.path,parent:n}))}};Sq.create=(e,t,n)=>new Sq({left:e,right:t,typeName:ds.ZodIntersection,...ia(n)});PM=class PM extends La{_parse(e){let{status:t,ctx:n}=this._processInputParams(e);if(n.parsedType!==Mi.array)return mi(n,{code:jt.invalid_type,expected:Mi.array,received:n.parsedType}),Ur;if(n.data.length<this._def.items.length)return mi(n,{code:jt.too_small,minimum:this._def.items.length,inclusive:!0,exact:!1,type:"array"}),Ur;if(!this._def.rest&&n.data.length>this._def.items.length)mi(n,{code:jt.too_big,maximum:this._def.items.length,inclusive:!0,exact:!1,type:"array"}),t.dirty();let i=[...n.data].map((r,s)=>{let a=this._def.items[s]||this._def.rest;if(!a)return null;return a._parse(new R5(n,r,n.path,s))}).filter((r)=>!!r);if(n.common.async)return Promise.all(i).then((r)=>bg.mergeArray(t,r));else return bg.mergeArray(t,i)}get items(){return this._def.items}rest(e){return new PM({...this._def,rest:e})}};PM.create=(e,t)=>{if(!Array.isArray(e))throw Error("You must pass an array of schemas to z.tuple([ ... ])");return new PM({items:e,typeName:ds.ZodTuple,rest:null,...ia(t)})};Ace=class Ace extends La{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse(e){let{status:t,ctx:n}=this._processInputParams(e);if(n.parsedType!==Mi.object)return mi(n,{code:jt.invalid_type,expected:Mi.object,received:n.parsedType}),Ur;let o=[],i=this._def.keyType,r=this._def.valueType;for(let s in n.data)o.push({key:i._parse(new R5(n,s,n.path,s)),value:r._parse(new R5(n,n.data[s],n.path,s)),alwaysSet:s in n.data});if(n.common.async)return bg.mergeObjectAsync(t,o);else return bg.mergeObjectSync(t,o)}get element(){return this._def.valueType}static create(e,t,n){if(t instanceof La)return new Ace({keyType:e,valueType:t,typeName:ds.ZodRecord,...ia(n)});return new Ace({keyType:Ev.create(),valueType:e,typeName:ds.ZodRecord,...ia(t)})}};_ce=class _ce extends La{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse(e){let{status:t,ctx:n}=this._processInputParams(e);if(n.parsedType!==Mi.map)return mi(n,{code:jt.invalid_type,expected:Mi.map,received:n.parsedType}),Ur;let o=this._def.keyType,i=this._def.valueType,r=[...n.data.entries()].map(([s,a],c)=>({key:o._parse(new R5(n,s,n.path,[c,"key"])),value:i._parse(new R5(n,a,n.path,[c,"value"]))}));if(n.common.async){let s=new Map;return Promise.resolve().then(async()=>{for(let a of r){let c=await a.key,l=await a.value;if(c.status==="aborted"||l.status==="aborted")return Ur;if(c.status==="dirty"||l.status==="dirty")t.dirty();s.set(c.value,l.value)}return{status:t.value,value:s}})}else{let s=new Map;for(let a of r){let{key:c,value:l}=a;if(c.status==="aborted"||l.status==="aborted")return Ur;if(c.status==="dirty"||l.status==="dirty")t.dirty();s.set(c.value,l.value)}return{status:t.value,value:s}}}};_ce.create=(e,t,n)=>new _ce({valueType:t,keyType:e,typeName:ds.ZodMap,...ia(n)});az=class az extends La{_parse(e){let{status:t,ctx:n}=this._processInputParams(e);if(n.parsedType!==Mi.set)return mi(n,{code:jt.invalid_type,expected:Mi.set,received:n.parsedType}),Ur;let o=this._def;if(o.minSize!==null){if(n.data.size<o.minSize.value)mi(n,{code:jt.too_small,minimum:o.minSize.value,type:"set",inclusive:!0,exact:!1,message:o.minSize.message}),t.dirty()}if(o.maxSize!==null){if(n.data.size>o.maxSize.value)mi(n,{code:jt.too_big,maximum:o.maxSize.value,type:"set",inclusive:!0,exact:!1,message:o.maxSize.message}),t.dirty()}let i=this._def.valueType;function r(a){let c=new Set;for(let l of a){if(l.status==="aborted")return Ur;if(l.status==="dirty")t.dirty();c.add(l.value)}return{status:t.value,value:c}}let s=[...n.data.values()].map((a,c)=>i._parse(new R5(n,a,n.path,c)));if(n.common.async)return Promise.all(s).then((a)=>r(a));else return r(s)}min(e,t){return new az({...this._def,minSize:{value:e,message:nr.toString(t)}})}max(e,t){return new az({...this._def,maxSize:{value:e,message:nr.toString(t)}})}size(e,t){return this.min(e,t).max(e,t)}nonempty(e){return this.min(1,e)}};az.create=(e,t)=>new az({valueType:e,minSize:null,maxSize:null,typeName:ds.ZodSet,...ia(t)});yq=class yq extends La{constructor(){super(...arguments);this.validate=this.implement}_parse(e){let{ctx:t}=this._processInputParams(e);if(t.parsedType!==Mi.function)return mi(t,{code:jt.invalid_type,expected:Mi.function,received:t.parsedType}),Ur;function n(s,a){return hce({data:s,path:t.path,errorMaps:[t.common.contextualErrorMap,t.schemaErrorMap,gq(),Zw].filter((c)=>!!c),issueData:{code:jt.invalid_arguments,argumentsError:a}})}function o(s,a){return hce({data:s,path:t.path,errorMaps:[t.common.contextualErrorMap,t.schemaErrorMap,gq(),Zw].filter((c)=>!!c),issueData:{code:jt.invalid_return_type,returnTypeError:a}})}let i={errorMap:t.common.contextualErrorMap},r=t.data;if(this._def.returns instanceof cz){let s=this;return zf(async function(...a){let c=new Of([]),l=await s._def.args.parseAsync(a,i).catch((h)=>{throw c.addIssue(n(a,h)),c}),d=await Reflect.apply(r,this,l);return await s._def.returns._def.type.parseAsync(d,i).catch((h)=>{throw c.addIssue(o(d,h)),c})})}else{let s=this;return zf(function(...a){let c=s._def.args.safeParse(a,i);if(!c.success)throw new Of([n(a,c.error)]);let l=Reflect.apply(r,this,c.data),d=s._def.returns.safeParse(l,i);if(!d.success)throw new Of([o(l,d.error)]);return d.data})}}parameters(){return this._def.args}returnType(){return this._def.returns}args(...e){return new yq({...this._def,args:PM.create(e).rest(wR.create())})}returns(e){return new yq({...this._def,returns:e})}implement(e){return this.parse(e)}strictImplement(e){return this.parse(e)}static create(e,t,n){return new yq({args:e?e:PM.create([]).rest(wR.create()),returns:t||wR.create(),typeName:ds.ZodFunction,...ia(n)})}};Pq=class Pq extends La{get schema(){return this._def.getter()}_parse(e){let{ctx:t}=this._processInputParams(e);return this._def.getter()._parse({data:t.data,path:t.path,parent:t})}};Pq.create=(e,t)=>new Pq({getter:e,typeName:ds.ZodLazy,...ia(t)});vq=class vq extends La{_parse(e){if(e.data!==this._def.value){let t=this._getOrReturnCtx(e);return mi(t,{received:t.data,code:jt.invalid_literal,expected:this._def.value}),Ur}return{status:"valid",value:e.data}}get value(){return this._def.value}};vq.create=(e,t)=>new vq({value:e,typeName:ds.ZodLiteral,...ia(t)});NR=class NR extends La{_parse(e){if(typeof e.data!=="string"){let t=this._getOrReturnCtx(e),n=this._def.values;return mi(t,{expected:lc.joinValues(n),received:t.parsedType,code:jt.invalid_type}),Ur}if(!this._cache)this._cache=new Set(this._def.values);if(!this._cache.has(e.data)){let t=this._getOrReturnCtx(e),n=this._def.values;return mi(t,{received:t.data,code:jt.invalid_enum_value,options:n}),Ur}return zf(e.data)}get options(){return this._def.values}get enum(){let e={};for(let t of this._def.values)e[t]=t;return e}get Values(){let e={};for(let t of this._def.values)e[t]=t;return e}get Enum(){let e={};for(let t of this._def.values)e[t]=t;return e}extract(e,t=this._def){return NR.create(e,{...this._def,...t})}exclude(e,t=this._def){return NR.create(this.options.filter((n)=>!e.includes(n)),{...this._def,...t})}};NR.create=Tnt;Eq=class Eq extends La{_parse(e){let t=lc.getValidEnumValues(this._def.values),n=this._getOrReturnCtx(e);if(n.parsedType!==Mi.string&&n.parsedType!==Mi.number){let o=lc.objectValues(t);return mi(n,{expected:lc.joinValues(o),received:n.parsedType,code:jt.invalid_type}),Ur}if(!this._cache)this._cache=new Set(lc.getValidEnumValues(this._def.values));if(!this._cache.has(e.data)){let o=lc.objectValues(t);return mi(n,{received:n.data,code:jt.invalid_enum_value,options:o}),Ur}return zf(e.data)}get enum(){return this._def.values}};Eq.create=(e,t)=>new Eq({values:e,typeName:ds.ZodNativeEnum,...ia(t)});cz=class cz extends La{unwrap(){return this._def.type}_parse(e){let{ctx:t}=this._processInputParams(e);if(t.parsedType!==Mi.promise&&t.common.async===!1)return mi(t,{code:jt.invalid_type,expected:Mi.promise,received:t.parsedType}),Ur;let n=t.parsedType===Mi.promise?t.data:Promise.resolve(t.data);return zf(n.then((o)=>this._def.type.parseAsync(o,{path:t.path,errorMap:t.common.contextualErrorMap})))}};cz.create=(e,t)=>new cz({type:e,typeName:ds.ZodPromise,...ia(t)});wv=class wv extends La{innerType(){return this._def.schema}sourceType(){return this._def.schema._def.typeName===ds.ZodEffects?this._def.schema.sourceType():this._def.schema}_parse(e){let{status:t,ctx:n}=this._processInputParams(e),o=this._def.effect||null,i={addIssue:(r)=>{if(mi(n,r),r.fatal)t.abort();else t.dirty()},get path(){return n.path}};if(i.addIssue=i.addIssue.bind(i),o.type==="preprocess"){let r=o.transform(n.data,i);if(n.common.async)return Promise.resolve(r).then(async(s)=>{if(t.value==="aborted")return Ur;let a=await this._def.schema._parseAsync({data:s,path:n.path,parent:n});if(a.status==="aborted")return Ur;if(a.status==="dirty")return oz(a.value);if(t.value==="dirty")return oz(a.value);return a});else{if(t.value==="aborted")return Ur;let s=this._def.schema._parseSync({data:r,path:n.path,parent:n});if(s.status==="aborted")return Ur;if(s.status==="dirty")return oz(s.value);if(t.value==="dirty")return oz(s.value);return s}}if(o.type==="refinement"){let r=(s)=>{let a=o.refinement(s,i);if(n.common.async)return Promise.resolve(a);if(a instanceof Promise)throw Error("Async refinement encountered during synchronous parse operation. Use .parseAsync instead.");return s};if(n.common.async===!1){let s=this._def.schema._parseSync({data:n.data,path:n.path,parent:n});if(s.status==="aborted")return Ur;if(s.status==="dirty")t.dirty();return r(s.value),{status:t.value,value:s.value}}else return this._def.schema._parseAsync({data:n.data,path:n.path,parent:n}).then((s)=>{if(s.status==="aborted")return Ur;if(s.status==="dirty")t.dirty();return r(s.value).then(()=>({status:t.value,value:s.value}))})}if(o.type==="transform")if(n.common.async===!1){let r=this._def.schema._parseSync({data:n.data,path:n.path,parent:n});if(!BR(r))return Ur;let s=o.transform(r.value,i);if(s instanceof Promise)throw Error("Asynchronous transform encountered during synchronous parse operation. Use .parseAsync instead.");return{status:t.value,value:s}}else return this._def.schema._parseAsync({data:n.data,path:n.path,parent:n}).then((r)=>{if(!BR(r))return Ur;return Promise.resolve(o.transform(r.value,i)).then((s)=>({status:t.value,value:s}))});lc.assertNever(o)}};wv.create=(e,t,n)=>new wv({schema:e,typeName:ds.ZodEffects,effect:t,...ia(n)});wv.createWithPreprocess=(e,t,n)=>new wv({schema:t,effect:{type:"preprocess",transform:e},typeName:ds.ZodEffects,...ia(n)});Bv=class Bv extends La{_parse(e){if(this._getType(e)===Mi.undefined)return zf(void 0);return this._def.innerType._parse(e)}unwrap(){return this._def.innerType}};Bv.create=(e,t)=>new Bv({innerType:e,typeName:ds.ZodOptional,...ia(t)});e7=class e7 extends La{_parse(e){if(this._getType(e)===Mi.null)return zf(null);return this._def.innerType._parse(e)}unwrap(){return this._def.innerType}};e7.create=(e,t)=>new e7({innerType:e,typeName:ds.ZodNullable,...ia(t)});Mq=class Mq extends La{_parse(e){let{ctx:t}=this._processInputParams(e),n=t.data;if(t.parsedType===Mi.undefined)n=this._def.defaultValue();return this._def.innerType._parse({data:n,path:t.path,parent:t})}removeDefault(){return this._def.innerType}};Mq.create=(e,t)=>new Mq({innerType:e,typeName:ds.ZodDefault,defaultValue:typeof t.default==="function"?t.default:()=>t.default,...ia(t)});Bq=class Bq extends La{_parse(e){let{ctx:t}=this._processInputParams(e),n={...t,common:{...t.common,issues:[]}},o=this._def.innerType._parse({data:n.data,path:n.path,parent:{...n}});if(fq(o))return o.then((i)=>({status:"valid",value:i.status==="valid"?i.value:this._def.catchValue({get error(){return new Of(n.common.issues)},input:n.data})}));else return{status:"valid",value:o.status==="valid"?o.value:this._def.catchValue({get error(){return new Of(n.common.issues)},input:n.data})}}removeCatch(){return this._def.innerType}};Bq.create=(e,t)=>new Bq({innerType:e,typeName:ds.ZodCatch,catchValue:typeof t.catch==="function"?t.catch:()=>t.catch,...ia(t)});gce=class gce extends La{_parse(e){if(this._getType(e)!==Mi.nan){let n=this._getOrReturnCtx(e);return mi(n,{code:jt.invalid_type,expected:Mi.nan,received:n.parsedType}),Ur}return{status:"valid",value:e.data}}};gce.create=(e)=>new gce({typeName:ds.ZodNaN,...ia(e)});vgr=Symbol("zod_brand");ove=class ove extends La{_parse(e){let{ctx:t}=this._processInputParams(e),n=t.data;return this._def.type._parse({data:n,path:t.path,parent:t})}unwrap(){return this._def.type}};fce=class fce extends La{_parse(e){let{status:t,ctx:n}=this._processInputParams(e);if(n.common.async)return(async()=>{let i=await this._def.in._parseAsync({data:n.data,path:n.path,parent:n});if(i.status==="aborted")return Ur;if(i.status==="dirty")return t.dirty(),oz(i.value);else return this._def.out._parseAsync({data:i.value,path:n.path,parent:n})})();else{let o=this._def.in._parseSync({data:n.data,path:n.path,parent:n});if(o.status==="aborted")return Ur;if(o.status==="dirty")return t.dirty(),{status:"dirty",value:o.value};else return this._def.out._parseSync({data:o.value,path:n.path,parent:n})}}static create(e,t){return new fce({in:e,out:t,typeName:ds.ZodPipeline})}};wq=class wq extends La{_parse(e){let t=this._def.innerType._parse(e),n=(o)=>{if(BR(o))o.value=Object.freeze(o.value);return o};return fq(t)?t.then((o)=>n(o)):n(t)}unwrap(){return this._def.innerType}};wq.create=(e,t)=>new wq({innerType:e,typeName:ds.ZodReadonly,...ia(t)});Egr={object:r0.lazycreate};(function(e){e.ZodString="ZodString",e.ZodNumber="ZodNumber",e.ZodNaN="ZodNaN",e.ZodBigInt="ZodBigInt",e.ZodBoolean="ZodBoolean",e.ZodDate="ZodDate",e.ZodSymbol="ZodSymbol",e.ZodUndefined="ZodUndefined",e.ZodNull="ZodNull",e.ZodAny="ZodAny",e.ZodUnknown="ZodUnknown",e.ZodNever="ZodNever",e.ZodVoid="ZodVoid",e.ZodArray="ZodArray",e.ZodObject="ZodObject",e.ZodUnion="ZodUnion",e.ZodDiscriminatedUnion="ZodDiscriminatedUnion",e.ZodIntersection="ZodIntersection",e.ZodTuple="ZodTuple",e.ZodRecord="ZodRecord",e.ZodMap="ZodMap",e.ZodSet="ZodSet",e.ZodFunction="ZodFunction",e.ZodLazy="ZodLazy",e.ZodLiteral="ZodLiteral",e.ZodEnum="ZodEnum",e.ZodEffects="ZodEffects",e.ZodNativeEnum="ZodNativeEnum",e.ZodOptional="ZodOptional",e.ZodNullable="ZodNullable",e.ZodDefault="ZodDefault",e.ZodCatch="ZodCatch",e.ZodPromise="ZodPromise",e.ZodBranded="ZodBranded",e.ZodPipeline="ZodPipeline",e.ZodReadonly="ZodReadonly"})(ds||(ds={}));Z=Ev.create,He=TR.create,Mgr=gce.create,Bgr=DR.create,Ue=xq.create,wgr=rz.create,Tgr=mce.create,Dgr=Cq.create,Dnt=Iq.create,_h=sz.create,ive=wR.create,Sg=SM.create,Ngr=pce.create,Qt=Mv.create,at=r0.create,Rgr=r0.strictCreate,kn=bq.create,nl=nve.create,Qgr=Sq.create,t7=PM.create,Fa=Ace.create,kgr=_ce.create,Lgr=az.create,n7=yq.create,Fgr=Pq.create,Be=vq.create,Zt=NR.create,Hgr=Eq.create,o7=cz.create,Ogr=wv.create,zgr=Bv.create,Ggr=e7.create,Tq=wv.createWithPreprocess,Ygr=fce.create,Tv={string:(e)=>Ev.create({...e,coerce:!0}),number:(e)=>TR.create({...e,coerce:!0}),boolean:(e)=>xq.create({...e,coerce:!0}),bigint:(e)=>DR.create({...e,coerce:!0}),date:(e)=>rz.create({...e,coerce:!0})},yce=Ur});var rve=Ks(()=>{uce();ZPe();Pnt();_q();Nnt();dce()});var We=Ks(()=>{rve();rve()});var c7={};sce(c7,{all_layers:()=>Ep,any_circuit_element:()=>Gce,any_soup_element:()=>a7,any_source_component:()=>Cot,asset:()=>kq,base_circuit_json_error:()=>Oa,battery_capacity:()=>Wnt,brep_shape:()=>Gve,cadModelDefaultDirectionMap:()=>UQn,cad_cable:()=>yst,cad_collision_error:()=>fst,cad_component:()=>gst,cad_model_axis_directions:()=>_st,cad_model_formats:()=>VQn,cad_reference_surface:()=>Cst,capacitance:()=>Q5,circle_shape:()=>pve,circuit_json_footprint_load_error:()=>Rce,current:()=>Pg,distance:()=>ze,duration_ms:()=>mz,experiment_type:()=>Mst,external_footprint_load_error:()=>Az,frequency:()=>s0,getRotationBetweenPcbPin1Locations:()=>gQn,getSimulationReturnCurrentGridJsonSchema:()=>Fq,getZodPrefixedIdWithDefault:()=>_n,inductance:()=>hz,insertionDirectionToCanonical:()=>Mce,insertionDirectionToVector:()=>AQn,insertion_direction:()=>xit,kicadAt:()=>bce,kicadEffects:()=>Xnt,kicadFont:()=>_ve,kicadFootprintAttributes:()=>jnt,kicadFootprintMetadata:()=>$nt,kicadFootprintModel:()=>Jnt,kicadFootprintPad:()=>qnt,kicadFootprintProperties:()=>Knt,kicadProperty:()=>Rq,kicadSymbolEffects:()=>tot,kicadSymbolMetadata:()=>oot,kicadSymbolPinNames:()=>eot,kicadSymbolPinNumbers:()=>Znt,kicadSymbolProperties:()=>not,kicadSymbolProperty:()=>i7,layer_ref:()=>bo,layer_string:()=>lve,length:()=>fe,manufacturing_drc_properties:()=>Iit,ms:()=>Ha,ninePointAnchor:()=>vM,parseAndConvertSiUnit:()=>q0,pcbRenderLayer:()=>hQn,pcb_autorouting_error:()=>Wrt,pcb_bend:()=>irt,pcb_board:()=>ort,pcb_breakout_point:()=>Jrt,pcb_bus_length_skew_error:()=>jit,pcb_bus_routing_constraint_error:()=>Tce,pcb_bus_routing_constraint_warning:()=>Dce,pcb_component:()=>bit,pcb_component_invalid_layer_error:()=>_z,pcb_component_missing_courtyard_warning:()=>jrt,pcb_component_not_on_board_edge_error:()=>sst,pcb_component_outside_board_error:()=>rst,pcb_connector_not_in_accessible_orientation_warning:()=>Krt,pcb_copper_pour:()=>ist,pcb_copper_pour_brep:()=>nst,pcb_copper_pour_polygon:()=>ost,pcb_copper_pour_rect:()=>tst,pcb_copper_text:()=>frt,pcb_courtyard_circle:()=>pst,pcb_courtyard_outline:()=>hst,pcb_courtyard_overlap_error:()=>Qrt,pcb_courtyard_pill:()=>Ast,pcb_courtyard_polygon:()=>mst,pcb_courtyard_rect:()=>ust,pcb_cutout:()=>Yrt,pcb_cutout_circle:()=>Ort,pcb_cutout_path:()=>Grt,pcb_cutout_polygon:()=>zrt,pcb_cutout_rect:()=>Hrt,pcb_debug_line:()=>Pit,pcb_debug_object:()=>Eit,pcb_debug_object_base:()=>Bce,pcb_debug_point:()=>vit,pcb_debug_rect:()=>Sit,pcb_fabrication_note_dimension:()=>Mrt,pcb_fabrication_note_path:()=>vrt,pcb_fabrication_note_rect:()=>Ert,pcb_fabrication_note_text:()=>Prt,pcb_fabricator_extra_charge_warning:()=>qrt,pcb_footprint_overlap_error:()=>Rrt,pcb_ground_plane:()=>$rt,pcb_ground_plane_region:()=>Zrt,pcb_group:()=>Urt,pcb_hole:()=>Rit,pcb_hole_circle_or_square_shape:()=>CQn,pcb_hole_circle_shape:()=>yQn,pcb_hole_oval_shape:()=>IQn,pcb_hole_pill_shape:()=>bQn,pcb_hole_rect_shape:()=>xQn,pcb_hole_rotated_pill_shape:()=>SQn,pcb_keepout:()=>Lrt,pcb_keepout_outline:()=>krt,pcb_keepout_overlap_warning:()=>Frt,pcb_manual_edit_conflict_warning:()=>Qce,pcb_missing_footprint_error:()=>Vrt,pcb_net:()=>nrt,pcb_note_dimension:()=>Nrt,pcb_note_line:()=>Drt,pcb_note_path:()=>Trt,pcb_note_rect:()=>wrt,pcb_note_text:()=>Brt,pcb_packing_error:()=>hrt,pcb_pad_pad_clearance_error:()=>lst,pcb_pad_trace_clearance_error:()=>dst,pcb_panel:()=>drt,pcb_panelization_placement_error:()=>mrt,pcb_pin1_location:()=>uz,pcb_placement_error:()=>urt,pcb_plated_hole:()=>Qit,pcb_port:()=>kit,pcb_port_not_connected_error:()=>trt,pcb_port_not_matched_error:()=>ert,pcb_preflight_routing_error:()=>Xrt,pcb_route_hint:()=>Cit,pcb_route_hints:()=>fQn,pcb_silkscreen_circle:()=>xrt,pcb_silkscreen_graphic:()=>brt,pcb_silkscreen_graphic_brep:()=>Irt,pcb_silkscreen_line:()=>Art,pcb_silkscreen_oval:()=>Crt,pcb_silkscreen_path:()=>_rt,pcb_silkscreen_pill:()=>Srt,pcb_silkscreen_rect:()=>yrt,pcb_silkscreen_text:()=>grt,pcb_smtpad:()=>Fit,pcb_smtpad_pill:()=>Lit,pcb_solder_paste:()=>Hit,pcb_soldermask_opening:()=>Oit,pcb_stiffener:()=>lrt,pcb_stiffener_polygon:()=>crt,pcb_stiffener_rect:()=>art,pcb_text:()=>zit,pcb_thermal_spoke:()=>est,pcb_trace:()=>Uit,pcb_trace_error:()=>$it,pcb_trace_hint:()=>prt,pcb_trace_missing_error:()=>Zit,pcb_trace_route_point:()=>wce,pcb_trace_route_point_through_pad:()=>Vit,pcb_trace_route_point_via:()=>Yit,pcb_trace_route_point_wire:()=>Git,pcb_trace_style_warning:()=>Xit,pcb_trace_too_long_error:()=>Kit,pcb_trace_too_long_warning:()=>qit,pcb_trace_too_many_vias_warning:()=>Jit,pcb_trace_warning:()=>Wit,pcb_via:()=>s7,pcb_via_clearance_error:()=>ast,pcb_via_trace_clearance_error:()=>cst,point:()=>ko,point3:()=>sy,point_with_bulge:()=>yit,polygon_shape:()=>Qq,port_arrangement:()=>Uot,position:()=>cQn,position3:()=>lQn,rect_shape:()=>Ice,resistance:()=>ay,ring:()=>dve,rotated_rect_shape:()=>Ave,rotation:()=>Ui,route_hint_point:()=>M_,schematic_arc:()=>Jot,schematic_box:()=>Oot,schematic_circle:()=>qot,schematic_component:()=>Wot,schematic_component_overlap_warning:()=>lit,schematic_component_port_arrangement_by_sides:()=>Vot,schematic_component_port_arrangement_by_size:()=>Yot,schematic_component_styling_warning:()=>dit,schematic_debug_line:()=>rit,schematic_debug_object:()=>ait,schematic_debug_object_base:()=>Pce,schematic_debug_point:()=>sit,schematic_debug_rect:()=>iit,schematic_element_outside_sheet_warning:()=>hit,schematic_error:()=>nit,schematic_graphic:()=>mit,schematic_group:()=>pit,schematic_layout_error:()=>oit,schematic_line:()=>Kot,schematic_manual_edit_conflict_warning:()=>vce,schematic_missing_sheet_warning:()=>fit,schematic_net_label:()=>tit,schematic_path:()=>zot,schematic_pin_styles:()=>Got,schematic_port:()=>eit,schematic_rect:()=>jot,schematic_sheet:()=>git,schematic_sheet_size:()=>Ece,schematic_sheet_styling_warning:()=>uit,schematic_symbol:()=>Xot,schematic_table:()=>Ait,schematic_table_cell:()=>_it,schematic_text:()=>Zot,schematic_text_part:()=>zve,schematic_trace:()=>$ot,schematic_voltage_probe:()=>cit,simulation_ac_current_source:()=>vst,simulation_ac_sweep_current_graph:()=>Yst,simulation_ac_sweep_voltage_graph:()=>Gst,simulation_ac_voltage_source:()=>bst,simulation_complex_sample:()=>Wve,simulation_current_probe:()=>Qst,simulation_current_source:()=>Est,simulation_dc_current_source:()=>Pst,simulation_dc_operating_point_current:()=>Hst,simulation_dc_operating_point_voltage:()=>Fst,simulation_dc_sweep_current_graph:()=>zst,simulation_dc_sweep_unit:()=>Lce,simulation_dc_sweep_voltage_graph:()=>Ost,simulation_dc_voltage_source:()=>Ist,simulation_experiment:()=>wst,simulation_op_amp:()=>Vst,simulation_oscilloscope_trace:()=>Wst,simulation_parameter_sweep:()=>Lst,simulation_parameter_sweep_coordinate:()=>MM,simulation_parameter_type:()=>KQn,simulation_parameter_unit:()=>Uve,simulation_pcb_return_current_field:()=>gz,simulation_pcb_return_current_heatmap:()=>Oce,simulation_pcb_return_current_marker:()=>zce,simulation_pcb_return_current_result:()=>Fce,simulation_return_current_contact:()=>hve,simulation_return_current_excitation:()=>Xst,simulation_return_current_field_asset:()=>jst,simulation_return_current_grid_json:()=>qst,simulation_return_current_image_asset:()=>Hce,simulation_spice_subcircuit:()=>Ust,simulation_switch:()=>Nst,simulation_terminal_port:()=>mve,simulation_transient_current_graph:()=>Dst,simulation_transient_voltage_graph:()=>Tst,simulation_unknown_experiment_error:()=>kst,simulation_voltage_probe:()=>Rst,simulation_voltage_source:()=>Sst,size:()=>Cce,source_ambiguous_port_reference:()=>Mot,source_board:()=>Eot,source_bus:()=>Fot,source_component_availability_warning:()=>Lq,source_component_base:()=>Cl,source_component_internal_connection:()=>bot,source_component_misconfigured_error:()=>EM,source_component_pins_underspecified_warning:()=>Rot,source_confusing_net_name_warning:()=>Lot,source_failed_to_create_component_error:()=>_ot,source_group:()=>Pot,source_i2c_misconfigured_error:()=>Ove,source_interconnect:()=>yot,source_invalid_component_property_error:()=>Qve,source_manually_placed_via:()=>wot,source_missing_manufacturer_part_number_warning:()=>Fve,source_missing_property_error:()=>Aot,source_motor:()=>cot,source_net:()=>vot,source_no_ground_pin_defined_warning:()=>Not,source_no_power_pin_defined_warning:()=>Dot,source_part_not_found_warning:()=>r7,source_pcb_ground_plane:()=>Bot,source_pin_attributes:()=>pz,source_pin_missing_trace_warning:()=>Lve,source_pin_must_be_connected_error:()=>Qot,source_port:()=>Iot,source_printed_part:()=>sot,source_project_metadata:()=>Rve,source_property_ignored_warning:()=>got,source_refdes_convention_warning:()=>Hve,source_runtime_error:()=>Hot,source_simple_ammeter:()=>uot,source_simple_battery:()=>Ive,source_simple_capacitor:()=>gve,source_simple_chip:()=>xve,source_simple_connector:()=>pot,source_simple_connector_standards:()=>mot,source_simple_crystal:()=>hot,source_simple_current_source:()=>lot,source_simple_diode:()=>Sce,source_simple_fiducial:()=>iot,source_simple_fuse:()=>dot,source_simple_ground:()=>rot,source_simple_inductor:()=>bve,source_simple_led:()=>yve,source_simple_mosfet:()=>Tve,source_simple_op_amp:()=>Dve,source_simple_pin_header:()=>vve,source_simple_pinout:()=>Eve,source_simple_potentiometer:()=>Pve,source_simple_power_source:()=>Cve,source_simple_push_button:()=>Sve,source_simple_resistor:()=>fve,source_simple_resonator:()=>Mve,source_simple_switch:()=>Nve,source_simple_test_point:()=>wve,source_simple_transistor:()=>Bve,source_simple_voltage_probe:()=>fot,source_simple_voltage_source:()=>xot,source_subassembly:()=>aot,source_trace:()=>Sot,source_trace_not_connected_error:()=>kve,source_unnamed_trace_warning:()=>Tot,spice_simulation_options:()=>Bst,standard_shape:()=>dQn,supplier_footprint_mismatch_warning:()=>kce,supplier_name:()=>Dv,time:()=>aQn,timestamp:()=>Unt,unknown_error_finding_part:()=>kot,visible_layer:()=>a0,voltage:()=>xl,wave_shape:()=>Vve});function Kst(e){return kq.extend({project_relative_path:Z().min(1),url:Z().url()}).superRefine((t,n)=>{if(!e.includes(t.mimetype))n.addIssue({code:jt.custom,path:["mimetype"],message:`Expected one of: ${e.join(", ")}`});if(t.url.startsWith("data:")){if(/^data:([^;,]*)(?:;[^,]*)?,/i.exec(t.url)?.[1]?.toLowerCase()!==t.mimetype)n.addIssue({code:jt.custom,path:["url"],message:"Data URL media type must match asset.mimetype"})}})}function Fq(e){let t=e.columns*e.rows;if(!Number.isSafeInteger(e.columns)||e.columns<=0||!Number.isSafeInteger(e.rows)||e.rows<=0||!Number.isSafeInteger(t))throw Error("Grid dimensions must be positive safe integers");return qst.superRefine((n,o)=>{if(n.field_type!==e.field_type)o.addIssue({code:jt.custom,path:["field_type"],message:"Decoded field_type must match the parent field"});if((n.field_type==="real"?n.sheet_current_x:n.sheet_current_x_real).length!==t)o.addIssue({code:jt.custom,message:`Each current channel must have ${t} entries (columns * rows)`})})}var ay,Q5,hz,xl,fe,s0,ze,Pg,mz,aQn,Ha,Unt,Ui,Wnt,Pt=(e)=>{},QR=(e)=>{},ko,cQn,sy,lQn,Cce,dz,cve,pve,Ice,Ave,Qq,dQn,uQn=(e)=>Array.from({length:e},()=>"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"[Math.floor(Math.random()*62)]).join(""),_n=(e)=>Z().optional().default(()=>`${e}_${uQn(10)}`),vM,hQn,kq,bce,_ve,Xnt,Rq,Knt,jnt,qnt,Jnt,$nt,Znt,eot,tot,i7,not,oot,Oa,Dv,Cl,gve,fve,Sce,iot,yve,rot,xve,sot,aot,cot,Cve,lot,dot,uot,Rnt,pz,Ive,bve,Sve,Pve,hot,vve,mot,pot,Eve,Mve,Bve,wve,Tve,Dve,Nve,Rve,Aot,_ot,Qve,kve,got,Lve,Fve,Hve,Lq,fot,yot,Ove,EM,xot,Cot,Iot,bot,Sot,Pot,vot,Eot,Mot,Bot,Ep,lve,bo,a0,wot,Tot,Dot,Not,Rot,Qot,kot,r7,Lot,sve,Qnt,Fot,Hot,Oot,zot,Got,Yot,Vot,Uot,Wot,mQn,Xot,Kot,jot,qot,Jot,$ot,pQn,zve,Zot,eit,tit,nit,oit,Pce,iit,rit,sit,ait,cit,vce,lit,dit,uit,hit,knt,mit,pit,Ait,_it,Ece,git,fit,yit,dve,Gve,Mce,AQn,xit,uz,_Qn,gQn=(e,t)=>{for(let n of _Qn){let o=n.indexOf(e),i=n.indexOf(t);if(o!==-1&&i!==-1)return(i-o+n.length)%n.length*90}return null},Cit,fQn,M_,Iit,bit,Bce,Sit,Pit,vit,Eit,Mit,yQn,Bit,xQn,wit,CQn,Tit,IQn,Dit,bQn,Nit,SQn,Rit,PQn,vQn,EQn,MQn,BQn,wQn,Qit,kit,TQn,DQn,NQn,Lit,RQn,QQn,Fit,kQn,LQn,FQn,HQn,OQn,zQn,GQn,Hit,xce,Oit,zit,Lnt,Git,Yit,Vit,wce,Uit,Wit,Xit,Kit,jit,qit,Jit,RR,Tce,Dq,Dce,$it,Zit,ert,trt,nrt,s7,ort,Fnt,irt,uve,rrt,srt,art,crt,lrt,drt,urt,hrt,mrt,prt,Art,_rt,grt,frt,yrt,xrt,Crt,YQn,Irt,brt,Srt,Prt,vrt,Ert,Mrt,Brt,wrt,Trt,Drt,Nrt,Rrt,Qrt,krt,Lrt,Frt,Nce,Hrt,Ort,zrt,Grt,Yrt,Vrt,Az,Rce,Urt,Wrt,Xrt,Qce,Hnt,Krt,jrt,kce,qrt,Jrt,$rt,Zrt,est,Yve,tst,nst,ost,ist,rst,sst,_z,ast,cst,lst,dst,ust,hst,mst,pst,Ast,VQn,_st,UQn,gst,fst,Ont,yst,xst=0.000001,znt,Gnt,Cst,Vve,WQn,Ist,bst,Sst,XQn,Pst,vst,Est,Lce,Uve,Mst,Bst,wst,MM,Tst,Dst,Nst,Rst,Qst,kst,KQn,Nq,Lst,Fst,Hst,Ost,zst,Wve,Gst,Yst,Vst,Ust,Ynt=(e)=>e!==void 0,Wst,ave,hve,mve,Xst,Fce,jst,Hce,gz,lz,qst,Oce,Vnt,zce,Gce,a7;var Gt=Ks(()=>{vp();We();vp();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();ay=Z().or(He()).transform((e)=>q0(e,"Ω").value),Q5=Z().or(He()).transform((e)=>q0(e,"F").value).transform((e)=>Number.parseFloat(e.toPrecision(12))),hz=Z().or(He()).transform((e)=>q0(e,"H").value),xl=Z().or(He()).transform((e)=>q0(e,"V").value),fe=Z().or(He()).transform((e)=>q0(e).value),s0=Z().or(He()).transform((e)=>q0(e,"Hz").value),ze=fe,Pg=Z().or(He()).transform((e)=>q0(e,"A").value),mz=Z().or(He()).transform((e)=>q0(e).value),aQn=mz,Ha=mz,Unt=Z().datetime(),Ui=Z().or(He()).transform((e)=>{if(typeof e==="number")return e;if(e.endsWith("deg"))return Number.parseFloat(e.split("deg")[0]);if(e.endsWith("rad"))return Number.parseFloat(e.split("rad")[0])*180/Math.PI;return Number.parseFloat(e)}),Wnt=He().or(Z().endsWith("mAh")).transform((e)=>{if(typeof e==="string"){let t=e.replace("mAh",""),n=Number.parseFloat(t);if(Number.isNaN(n))throw Error("Invalid capacity");return n}return e}).describe("Battery capacity in mAh");Pt("extra props b");Pt("missing props b");Pt(!0);Pt("mismatched prop types: a");QR(!0);QR('T1 has extra: "c", T2 has extra: "d"');QR('T1 has extra: "c"');QR('T2 has extra: "c"');QR('T1 has extra: "d", T2 has extra: "c"');QR(!0);ko=at({x:ze,y:ze}),cQn=ko;Pt(!0);Pt(!0);sy=at({x:ze,y:ze,z:ze}),lQn=sy;Pt(!0);Cce=at({width:He(),height:He()});Pt(!0);dz=ze.pipe(He().finite()),cve=ze.pipe(He().finite().positive()),pve=at({shape:Be("circle"),x:dz,y:dz,radius:cve}).strict(),Ice=at({shape:Be("rect"),x:dz,y:dz,width:cve,height:cve}).strict(),Ave=Ice.extend({shape:Be("rotated_rect"),ccw_rotation:Ui.pipe(He().finite())}),Qq=at({shape:Be("polygon"),points:Qt(ko.extend({x:dz,y:dz})).min(3).refine((e)=>{let t=e.reduce((n,o,i)=>{let r=e[(i+1)%e.length];return n+o.x*r.y-r.x*o.y},0);return Number.isFinite(t)&&t!==0},"Polygon boundary must enclose a nonzero area")}).strict();Pt(!0);Pt(!0);Pt(!0);Pt(!0);dQn=nl("shape",[pve,Ice,Ave,Qq]);Pt(!0);vM=Zt(["top_left","top_center","top_right","center_left","center","center_right","bottom_left","bottom_center","bottom_right"]);Pt(!0);hQn=Zt(["top_silkscreen","bottom_silkscreen","top_copper","bottom_copper","top_soldermask","bottom_soldermask","top_fabrication_note","bottom_fabrication_note","top_user_note","bottom_user_note","top_courtyard","bottom_courtyard","inner1_copper","inner2_copper","inner3_copper","inner4_copper","inner5_copper","inner6_copper","inner7_copper","inner8_copper","edge_cuts","drill"]);Pt(!0);kq=at({project_relative_path:Z(),url:Z(),mimetype:Z()});Pt(!0);bce=ko.extend({rotation:Ui.optional()});Pt(!0);_ve=at({size:ko.optional(),thickness:ze.optional()});Pt(!0);Xnt=at({font:_ve.optional()});Pt(!0);Rq=at({value:Z(),at:bce.optional(),layer:Z().optional(),uuid:Z().optional(),hide:Ue().optional(),effects:Xnt.optional()});Pt(!0);Knt=at({Reference:Rq.optional(),Value:Rq.optional(),Datasheet:Rq.optional(),Description:Rq.optional()});Pt(!0);jnt=at({through_hole:Ue().optional(),smd:Ue().optional(),exclude_from_pos_files:Ue().optional(),exclude_from_bom:Ue().optional()});Pt(!0);qnt=at({name:Z(),type:Z(),shape:Z().optional(),at:bce.optional(),size:ko.optional(),drill:ze.optional(),layers:Qt(Z()).optional(),removeUnusedLayers:Ue().optional(),uuid:Z().optional()});Pt(!0);Jnt=at({path:Z(),offset:sy.optional(),scale:sy.optional(),rotate:sy.optional()});Pt(!0);$nt=at({footprintName:Z().optional(),version:kn([He(),Z()]).optional(),generator:Z().optional(),generatorVersion:kn([He(),Z()]).optional(),layer:Z().optional(),properties:Knt.optional(),attributes:jnt.optional(),pads:Qt(qnt).optional(),embeddedFonts:Ue().optional(),model:Jnt.optional()});Pt(!0);Znt=at({hide:Ue().optional()});Pt(!0);eot=at({offset:ze.optional(),hide:Ue().optional()});Pt(!0);tot=at({font:_ve.optional(),justify:kn([Z(),Qt(Z())]).optional(),hide:Ue().optional()});Pt(!0);i7=at({value:Z(),id:kn([He(),Z()]).optional(),at:bce.optional(),effects:tot.optional()});Pt(!0);not=at({Reference:i7.optional(),Value:i7.optional(),Footprint:i7.optional(),Datasheet:i7.optional(),Description:i7.optional(),ki_keywords:i7.optional(),ki_fp_filters:i7.optional()});Pt(!0);oot=at({symbolName:Z().optional(),extends:Z().optional(),pinNumbers:Znt.optional(),pinNames:eot.optional(),excludeFromSim:Ue().optional(),inBom:Ue().optional(),onBoard:Ue().optional(),properties:not.optional(),embeddedFonts:Ue().optional()});Pt(!0);Oa=at({error_type:Z(),message:Z(),is_fatal:Ue().optional()});Pt(!0);Dv=Zt(["jlcpcb","macrofab","pcbway","digikey","mouser","lcsc"]);Pt(!0);Cl=at({type:Be("source_component"),ftype:Z().optional(),source_component_id:Z(),name:Z(),manufacturer_part_number:Z().optional(),supplier_part_numbers:Fa(Dv,Qt(Z())).optional(),display_value:Z().optional(),display_name:Z().optional(),are_pins_interchangeable:Ue().optional(),internally_connected_source_port_ids:Qt(Qt(Z())).optional(),source_group_id:Z().optional(),subcircuit_id:Z().optional()});Pt(!0);gve=Cl.extend({ftype:Be("simple_capacitor"),capacitance:Q5,max_voltage_rating:xl.optional(),display_capacitance:Z().optional(),max_decoupling_trace_length:ze.optional()});Pt(!0);fve=Cl.extend({ftype:Be("simple_resistor"),resistance:ay,display_resistance:Z().optional()});Pt(!0);Sce=Cl.extend({ftype:Be("simple_diode")});Pt(!0);iot=Cl.extend({ftype:Be("simple_fiducial")});Pt(!0);yve=Sce.extend({ftype:Be("simple_led"),color:Z().optional(),wavelength:Z().optional()});Pt(!0);rot=Cl.extend({ftype:Be("simple_ground")});Pt(!0);xve=Cl.extend({ftype:Be("simple_chip")});Pt(!0);sot=Cl.extend({ftype:Be("printedpart"),material:Zt(["pla","petg","nylon"]).optional(),color:Z().trim().min(1).optional()});Pt(!0);aot=Cl.extend({ftype:Be("subassembly")});Pt(!0);cot=Cl.extend({ftype:Be("motor")});Pt(!0);Cve=Cl.extend({ftype:Be("simple_power_source"),voltage:xl});Pt(!0);lot=Cl.extend({ftype:Be("simple_current_source"),current:Pg,frequency:s0.optional(),peak_to_peak_current:Pg.optional(),wave_shape:Zt(["sine","square","triangle","sawtooth","dc"]).optional().default("dc"),phase:He().optional(),duty_cycle:He().min(0).max(1).optional()});Pt(!0);dot=Cl.extend({ftype:Be("simple_fuse"),current_rating_amps:He().describe("Nominal current in amps the fuse is rated for"),voltage_rating_volts:He().describe("Voltage rating in volts, e.g. ±5V would be 5")});Pt(!0);uot=Cl.extend({ftype:Be("simple_ammeter")});Pt(!0);Rnt=kn([He(),Z().trim().regex(/^[+-]?(?:\d+(?:\.\d*)?|\.\d+)(?:[eE][+-]?\d+)?\s*(?:[fpnumkKMGTµμ]?V?|V)?$/,"Expected a scalar voltage, optionally with SI units")]).pipe(xl).pipe(He().finite()),pz=at({is_input:Ue().optional(),is_output:Ue().optional(),is_bidirectional:Ue().optional(),is_passive:Ue().optional(),can_use_tri_state:Ue().optional(),is_using_tri_state:Ue().optional(),can_use_open_collector:Ue().optional(),is_using_open_collector:Ue().optional(),can_use_open_emitter:Ue().optional(),is_using_open_emitter:Ue().optional(),is_gpio:Ue().optional(),highlight_color:Z().optional(),must_be_connected:Ue().optional(),provides_power:Ue().optional(),requires_power:Ue().optional(),provides_ground:Ue().optional(),requires_ground:Ue().optional(),provides_voltage:Rnt.optional(),requires_voltage:Rnt.optional(),required_voltage_tolerance:He().finite().min(0).max(1).optional(),do_not_connect:Ue().optional(),include_in_board_pinout:Ue().optional(),can_use_internal_pullup:Ue().optional(),is_using_internal_pullup:Ue().optional(),needs_external_pullup:Ue().optional(),can_use_internal_pulldown:Ue().optional(),is_using_internal_pulldown:Ue().optional(),needs_external_pulldown:Ue().optional(),can_use_open_drain:Ue().optional(),is_using_open_drain:Ue().optional(),can_use_push_pull:Ue().optional(),is_using_push_pull:Ue().optional(),should_have_decoupling_capacitor:Ue().optional(),recommended_decoupling_capacitor_capacitance:kn([Z(),He()]).optional(),is_configured_for_i2c_sda:Ue().optional(),is_configured_for_i2c_scl:Ue().optional(),is_configured_for_spi_mosi:Ue().optional(),is_configured_for_spi_miso:Ue().optional(),is_configured_for_spi_sck:Ue().optional(),is_configured_for_spi_cs:Ue().optional(),is_configured_for_uart_tx:Ue().optional(),is_configured_for_uart_rx:Ue().optional(),supports_i2c_sda:Ue().optional(),supports_i2c_scl:Ue().optional(),supports_spi_mosi:Ue().optional(),supports_spi_miso:Ue().optional(),supports_spi_sck:Ue().optional(),supports_spi_cs:Ue().optional(),supports_uart_tx:Ue().optional(),supports_uart_rx:Ue().optional()});Pt(!0);Ive=Cl.extend({ftype:Be("simple_battery"),capacity:Wnt});Pt(!0);bve=Cl.extend({ftype:Be("simple_inductor"),inductance:hz,display_inductance:Z().optional(),max_current_rating:He().optional()});Pt(!0);Sve=Cl.extend({ftype:Be("simple_push_button")});Pt(!0);Pve=Cl.extend({ftype:Be("simple_potentiometer"),max_resistance:ay,display_max_resistance:Z().optional()});Pt(!0);hot=Cl.extend({ftype:Be("simple_crystal"),frequency:He().describe("Frequency in Hz"),load_capacitance:He().optional().describe("Load capacitance in pF"),pin_variant:Zt(["two_pin","four_pin"]).optional()});Pt(!0);vve=Cl.extend({ftype:Be("simple_pin_header"),pin_count:He(),gender:Zt(["male","female"]).optional().default("male")});Pt(!0);mot=["usb_c","m2","jst_sh","jst_gh","jst_zh","jst_ph","jst_xh","jst_vh"],pot=Cl.extend({ftype:Be("simple_connector"),standard:Zt(mot).optional(),pin_count:He().int().positive().optional()});Pt(!0);Eve=Cl.extend({ftype:Be("simple_pinout")});Pt(!0);Mve=Cl.extend({ftype:Be("simple_resonator"),load_capacitance:Q5,equivalent_series_resistance:ay.optional(),frequency:s0});Pt(!0);Bve=Cl.extend({ftype:Be("simple_transistor"),transistor_type:Zt(["npn","pnp"])});Pt(!0);wve=Cl.extend({ftype:Be("simple_test_point"),footprint_variant:Zt(["pad","through_hole"]).optional(),pad_shape:Zt(["rect","circle"]).optional(),pad_diameter:kn([He(),Z()]).optional(),hole_diameter:kn([He(),Z()]).optional(),width:kn([He(),Z()]).optional(),height:kn([He(),Z()]).optional()});Pt(!0);Tve=Cl.extend({ftype:Be("simple_mosfet"),channel_type:Zt(["n","p"]),mosfet_mode:Zt(["enhancement","depletion"])});Pt(!0);Dve=Cl.extend({ftype:Be("simple_op_amp")});Pt(!0);Nve=Cl.extend({ftype:Be("simple_switch")});Pt(!0);Rve=at({type:Be("source_project_metadata"),name:Z().optional(),software_used_string:Z().optional(),project_url:Z().optional(),source_filesystem_md5_hash:Z().optional(),created_at:Unt.optional()});Pt(!0);Aot=Oa.extend({type:Be("source_missing_property_error"),source_missing_property_error_id:_n("source_missing_property_error"),source_component_id:Z(),property_name:Z(),subcircuit_id:Z().optional(),error_type:Be("source_missing_property_error").default("source_missing_property_error")}).describe("The source code is missing a property");Pt(!0);_ot=Oa.extend({type:Be("source_failed_to_create_component_error"),source_failed_to_create_component_error_id:_n("source_failed_to_create_component_error"),error_type:Be("source_failed_to_create_component_error").default("source_failed_to_create_component_error"),component_name:Z().optional(),subcircuit_id:Z().optional(),parent_source_component_id:Z().optional(),pcb_center:at({x:He().optional(),y:He().optional()}).optional(),schematic_center:at({x:He().optional(),y:He().optional()}).optional()}).describe("Error emitted when a component fails to be constructed");Pt(!0);Qve=Oa.extend({type:Be("source_invalid_component_property_error"),source_invalid_component_property_error_id:_n("source_invalid_component_property_error"),source_component_id:Z(),property_name:Z(),property_value:ive().optional(),expected_format:Z().optional(),subcircuit_id:Z().optional(),error_type:Be("source_invalid_component_property_error").default("source_invalid_component_property_error")}).describe("The source component property is invalid");Pt(!0);kve=Oa.extend({type:Be("source_trace_not_connected_error"),source_trace_not_connected_error_id:_n("source_trace_not_connected_error"),error_type:Be("source_trace_not_connected_error").default("source_trace_not_connected_error"),subcircuit_id:Z().optional(),source_group_id:Z().optional(),source_trace_id:Z().optional(),connected_source_port_ids:Qt(Z()).optional(),selectors_not_found:Qt(Z()).optional()}).describe("Occurs when a source trace selector does not match any ports");Pt(!0);got=at({type:Be("source_property_ignored_warning"),source_property_ignored_warning_id:_n("source_property_ignored_warning"),source_component_id:Z(),property_name:Z(),subcircuit_id:Z().optional(),error_type:Be("source_property_ignored_warning").default("source_property_ignored_warning"),message:Z()}).describe("The source property was ignored");Pt(!0);Lve=at({type:Be("source_pin_missing_trace_warning"),source_pin_missing_trace_warning_id:_n("source_pin_missing_trace_warning"),warning_type:Be("source_pin_missing_trace_warning").default("source_pin_missing_trace_warning"),message:Z(),source_component_id:Z(),source_port_id:Z(),subcircuit_id:Z().optional()}).describe("Warning emitted when a source component pin is missing a trace connection");Pt(!0);Fve=at({type:Be("source_missing_manufacturer_part_number_warning"),source_missing_manufacturer_part_number_warning_id:_n("source_missing_manufacturer_part_number_warning"),warning_type:Be("source_missing_manufacturer_part_number_warning").default("source_missing_manufacturer_part_number_warning"),message:Z(),source_component_id:Z(),standard:Z().optional(),subcircuit_id:Z().optional()}).describe("Warning emitted when a source component is missing its manufacturer part number");Pt(!0);Hve=at({type:Be("source_refdes_convention_warning"),source_refdes_convention_warning_id:_n("source_refdes_convention_warning"),warning_type:Be("source_refdes_convention_warning").default("source_refdes_convention_warning"),message:Z(),source_component_id:Z(),refdes:Z(),source_component_ftype:Z(),expected_prefixes:Qt(Z()),actual_prefix:Z().optional(),subcircuit_id:Z().optional()}).describe("Warning emitted when a source component reference designator does not match the component type convention");Pt(!0);Lq=at({type:Be("source_component_availability_warning"),source_component_availability_warning_id:_n("source_component_availability_warning"),warning_type:Be("source_component_availability_warning").default("source_component_availability_warning"),message:Z(),source_component_id:Z(),subcircuit_id:Z().optional(),supplier_name:Dv,supplier_part_numbers:Qt(Z()).nonempty()}).describe("Warning emitted when no supplier alternative can be confirmed in stock. Availability may be unknown or change over time.");Pt(!0);fot=Cl.extend({ftype:Be("simple_voltage_probe")});Pt(!0);yot=Cl.extend({ftype:Be("interconnect")});Pt(!0);Ove=Oa.extend({type:Be("source_i2c_misconfigured_error"),source_i2c_misconfigured_error_id:_n("source_i2c_misconfigured_error"),error_type:Be("source_i2c_misconfigured_error").default("source_i2c_misconfigured_error"),source_port_ids:Qt(Z())}).describe("Error emitted when incompatible I2C pins (e.g. SDA and SCL) are connected to the same net");Pt(!0);EM=Oa.extend({type:Be("source_component_misconfigured_error"),source_component_misconfigured_error_id:_n("source_component_misconfigured_error"),error_type:Be("source_component_misconfigured_error").default("source_component_misconfigured_error"),source_component_ids:Qt(Z()),source_port_ids:Qt(Z()).optional()}).describe("Error emitted when one or more source components have an invalid or conflicting configuration");Pt(!0);xot=Cl.extend({ftype:Be("simple_voltage_source"),voltage:xl,frequency:s0.optional(),peak_to_peak_voltage:xl.optional(),wave_shape:Zt(["sinewave","square","triangle","sawtooth"]).optional(),phase:Ui.optional(),duty_cycle:He().optional().describe("Duty cycle as a fraction (0 to 1)"),pulse_delay:Ha.optional(),rise_time:Ha.optional(),fall_time:Ha.optional(),pulse_width:Ha.optional(),period:Ha.optional()});Pt(!0);Cot=kn([fve,gve,Sce,iot,yve,rot,xve,sot,aot,cot,Cve,lot,uot,Ive,bve,Sve,Pve,hot,vve,pot,Eve,Mve,Nve,Bve,wve,Tve,Dve,dot,fot,yot,xot,Rve,Aot,Qve,_ot,kve,got,Lve,Fve,Hve,Lq,Ove,EM]);Pt(!0);Iot=at({type:Be("source_port"),pin_number:He().optional(),port_hints:Qt(Z()).optional(),name:Z(),source_port_id:Z(),source_component_id:Z().optional(),source_group_id:Z().optional(),most_frequently_referenced_by_name:Z().optional(),subcircuit_id:Z().optional(),subcircuit_connectivity_map_key:Z().optional()}).merge(pz);Pt(!0);bot=at({type:Be("source_component_internal_connection"),source_component_internal_connection_id:Z(),source_component_id:Z(),source_port_ids:Qt(Z()),subcircuit_id:Z().optional()});Pt(!0);Sot=at({type:Be("source_trace"),source_trace_id:Z(),connected_source_port_ids:Qt(Z()),connected_source_net_ids:Qt(Z()),subcircuit_id:Z().optional(),subcircuit_connectivity_map_key:Z().optional(),max_length:He().optional(),max_via_count:He().int().nonnegative().optional(),name:Z().optional(),min_trace_thickness:He().optional(),display_name:Z().optional()});Pt(!0);Pot=at({type:Be("source_group"),source_group_id:Z(),subcircuit_id:Z().optional(),parent_subcircuit_id:Z().optional(),parent_source_group_id:Z().optional(),is_subcircuit:Ue().optional(),show_as_schematic_box:Ue().optional(),name:Z().optional(),was_automatically_named:Ue().optional()});Pt(!0);vot=at({type:Be("source_net"),source_net_id:Z(),name:Z(),member_source_group_ids:Qt(Z()),is_power:Ue().optional(),is_ground:Ue().optional(),is_digital_signal:Ue().optional(),is_analog_signal:Ue().optional(),is_positive_voltage_source:Ue().optional(),trace_width:He().optional(),subcircuit_id:Z().optional(),subcircuit_connectivity_map_key:Z().optional()});Pt(!0);Eot=at({type:Be("source_board"),source_board_id:Z(),source_group_id:Z(),title:Z().optional()}).describe("Defines a board in the source domain");Pt(!0);Mot=Oa.extend({type:Be("source_ambiguous_port_reference"),source_ambiguous_port_reference_id:_n("source_ambiguous_port_reference"),error_type:Be("source_ambiguous_port_reference").default("source_ambiguous_port_reference"),source_port_id:Z().optional(),source_component_id:Z().optional()}).describe("Error emitted when a port hint matches multiple non-overlapping pads, making the port reference ambiguous");Pt(!0);Bot=at({type:Be("source_pcb_ground_plane"),source_pcb_ground_plane_id:Z(),source_group_id:Z(),source_net_id:Z(),subcircuit_id:Z().optional()}).describe("Defines a ground plane in the source domain");Pt(!0);Ep=["top","bottom","inner1","inner2","inner3","inner4","inner5","inner6","inner7","inner8"],lve=Zt(Ep),bo=lve.or(at({name:lve})).transform((e)=>{if(typeof e==="string")return e;return e.name});Pt(!0);a0=Zt(["top","bottom"]),wot=at({type:Be("source_manually_placed_via"),source_manually_placed_via_id:Z(),source_group_id:Z(),source_net_id:Z().min(1).optional(),subcircuit_id:Z().optional(),source_trace_id:Z().optional()}).describe("Defines a via that is manually placed in the source domain");Pt(!0);Tot=at({type:Be("source_unnamed_trace_warning"),source_unnamed_trace_warning_id:_n("source_unnamed_trace_warning"),warning_type:Be("source_unnamed_trace_warning").default("source_unnamed_trace_warning"),message:Z(),source_trace_id:Z(),subcircuit_id:Z().optional()}).describe("Warning emitted when a source trace is missing a name");Pt(!0);Dot=at({type:Be("source_no_power_pin_defined_warning"),source_no_power_pin_defined_warning_id:_n("source_no_power_pin_defined_warning"),warning_type:Be("source_no_power_pin_defined_warning").default("source_no_power_pin_defined_warning"),message:Z(),source_component_id:Z(),source_port_ids:Qt(Z()),subcircuit_id:Z().optional()}).describe("Warning emitted when a chip has no source ports with requires_power=true");Pt(!0);Not=at({type:Be("source_no_ground_pin_defined_warning"),source_no_ground_pin_defined_warning_id:_n("source_no_ground_pin_defined_warning"),warning_type:Be("source_no_ground_pin_defined_warning").default("source_no_ground_pin_defined_warning"),message:Z(),source_component_id:Z(),source_port_ids:Qt(Z()),subcircuit_id:Z().optional()}).describe("Warning emitted when a chip has no source ports marked as ground pins");Pt(!0);Rot=at({type:Be("source_component_pins_underspecified_warning"),source_component_pins_underspecified_warning_id:_n("source_component_pins_underspecified_warning"),warning_type:Be("source_component_pins_underspecified_warning").default("source_component_pins_underspecified_warning"),message:Z(),source_component_id:Z(),source_port_ids:Qt(Z()),subcircuit_id:Z().optional()}).describe("Warning emitted when all ports on a source component are underspecified");Pt(!0);Qot=Oa.extend({type:Be("source_pin_must_be_connected_error"),source_pin_must_be_connected_error_id:_n("source_pin_must_be_connected_error"),error_type:Be("source_pin_must_be_connected_error").default("source_pin_must_be_connected_error"),source_component_id:Z(),source_port_id:Z(),subcircuit_id:Z().optional()}).describe("Error emitted when a pin with mustBeConnected attribute is not connected to any trace");Pt(!0);kot=Oa.extend({type:Be("unknown_error_finding_part"),unknown_error_finding_part_id:_n("unknown_error_finding_part"),error_type:Be("unknown_error_finding_part").default("unknown_error_finding_part"),source_component_id:Z().optional(),subcircuit_id:Z().optional()}).describe("Error emitted when an unexpected error occurs while finding a part");Pt(!0);r7=at({type:Be("source_part_not_found_warning"),source_part_not_found_warning_id:_n("source_part_not_found_warning"),warning_type:Be("source_part_not_found_warning").default("source_part_not_found_warning"),message:Z(),source_component_id:Z().optional(),subcircuit_id:Z().optional(),supplier_name:Dv.optional(),manufacturer_part_number:Z().optional(),supplier_part_number:Z().optional(),part_name:Z().optional()}).describe("Warning emitted when a requested part can not be found");Pt(!0);Lot=at({type:Be("source_confusing_net_name_warning"),source_confusing_net_name_warning_id:_n("source_confusing_net_name_warning"),warning_type:Be("source_confusing_net_name_warning").default("source_confusing_net_name_warning"),message:Z(),source_net_ids:Qt(Z()).min(2),net_name:Z(),subcircuit_id:Z().optional()}).describe("Warning emitted when electrically disconnected source nets share a name");Pt(!0);sve=kn([He().nonnegative().finite(),at({reference:Be("longest_manhattan"),source_trace_ids:Qt(Z()).min(1).optional(),offset:He().finite().optional()})]),Qnt=kn([He().positive().finite(),at({width_multiplier:He().positive().finite()})]),Fot=at({type:Be("source_bus"),source_bus_id:Z(),name:Z().optional(),source_trace_ids:Qt(Z()).min(1),max_length_skew:He().nonnegative().finite().optional(),target_impedance:He().positive().finite().optional(),target_differential_impedance:He().positive().finite().optional(),differential_pair:at({positive_source_trace_id:Z(),negative_source_trace_id:Z(),trace_gap:He().positive().finite().optional(),max_uncoupled_length:He().nonnegative().finite().optional()}).optional(),length_match_source_trace_ids:Qt(Z()).min(1).optional(),min_length:sve.optional(),max_length:sve.optional(),target_length:sve.optional(),length_tolerance:He().nonnegative().finite().optional(),pcb_trace_spacing:Qnt.optional(),pcb_spacing_to_other_signals:Qnt.optional(),target_impedance_min:He().positive().finite().optional(),target_impedance_max:He().positive().finite().optional(),target_differential_impedance_min:He().positive().finite().optional(),target_differential_impedance_max:He().positive().finite().optional(),subcircuit_id:Z().optional()});Pt(!0);Hot=Oa.pick({message:!0,error_type:!0}).extend({type:Be("source_runtime_error"),source_runtime_error_id:_n("source_runtime_error"),error_type:Be("source_runtime_error").default("source_runtime_error"),phase_name:Z().optional()}).describe("An unexpected runtime failure while generating or validating a circuit");Pt(!0);Oot=at({type:Be("schematic_box"),schematic_sheet_id:Z().optional(),schematic_component_id:Z().optional(),schematic_symbol_id:Z().optional(),width:ze,height:ze,is_dashed:Ue().default(!1),x:ze,y:ze,subcircuit_id:Z().optional()}).describe("Draws a box on the schematic");Pt(!0);zot=at({type:Be("schematic_path"),schematic_path_id:_n("schematic_path"),schematic_sheet_id:Z().optional(),schematic_component_id:Z().optional(),schematic_symbol_id:Z().optional(),fill_color:Z().optional(),is_filled:Ue().optional(),is_dashed:Ue().default(!1),stroke_width:ze.nullable().optional(),stroke_color:Z().optional(),dash_length:ze.optional(),dash_gap:ze.optional(),points:Qt(ko),subcircuit_id:Z().optional()});Pt(!0);Got=Fa(at({left_margin:fe.optional(),right_margin:fe.optional(),top_margin:fe.optional(),bottom_margin:fe.optional()})),Yot=at({left_size:He(),right_size:He(),top_size:He().optional(),bottom_size:He().optional()});Pt(!0);Vot=at({left_side:at({pins:Qt(He()),direction:Zt(["top-to-bottom","bottom-to-top"]).optional()}).optional(),right_side:at({pins:Qt(He()),direction:Zt(["top-to-bottom","bottom-to-top"]).optional()}).optional(),top_side:at({pins:Qt(He()),direction:Zt(["left-to-right","right-to-left"]).optional()}).optional(),bottom_side:at({pins:Qt(He()),direction:Zt(["left-to-right","right-to-left"]).optional()}).optional()});Pt(!0);Uot=kn([Yot,Vot]),Wot=at({type:Be("schematic_component"),size:Cce,center:ko,source_component_id:Z().optional(),schematic_component_id:Z(),schematic_sheet_id:Z().optional(),schematic_symbol_id:Z().optional(),pin_spacing:fe.optional(),pin_styles:Got.optional(),box_width:fe.optional(),symbol_name:Z().optional(),port_arrangement:Uot.optional(),port_labels:Fa(Z()).optional(),symbol_display_value:Z().optional(),subcircuit_id:Z().optional(),schematic_group_id:Z().optional(),is_schematic_group:Ue().optional(),source_group_id:Z().optional(),is_box_with_pins:Ue().optional().default(!0)});Pt(!0);mQn=at({kicad_symbol:oot.optional()}).catchall(ive()),Xot=at({type:Be("schematic_symbol"),schematic_symbol_id:Z(),name:Z().optional(),metadata:mQn.optional()}).describe("Defines a named schematic symbol that can be referenced by components.");Pt(!0);Kot=at({type:Be("schematic_line"),schematic_line_id:_n("schematic_line"),schematic_sheet_id:Z().optional(),schematic_component_id:Z().optional(),schematic_symbol_id:Z().optional(),x1:ze,y1:ze,x2:ze,y2:ze,stroke_width:ze.nullable().optional(),color:Z().default("#000000"),is_dashed:Ue().default(!1),dash_length:ze.optional(),dash_gap:ze.optional(),subcircuit_id:Z().optional()}).describe("Draws a styled line on the schematic");Pt(!0);jot=at({type:Be("schematic_rect"),schematic_rect_id:_n("schematic_rect"),schematic_sheet_id:Z().optional(),schematic_component_id:Z().optional(),schematic_symbol_id:Z().optional(),center:ko,width:ze,height:ze,rotation:Ui.default(0),stroke_width:ze.nullable().optional(),color:Z().default("#000000"),is_filled:Ue().default(!1),fill_color:Z().optional(),is_dashed:Ue().default(!1),subcircuit_id:Z().optional()}).describe("Draws a styled rectangle on the schematic");Pt(!0);qot=at({type:Be("schematic_circle"),schematic_circle_id:_n("schematic_circle"),schematic_sheet_id:Z().optional(),schematic_component_id:Z().optional(),schematic_symbol_id:Z().optional(),center:ko,radius:ze,stroke_width:ze.nullable().optional(),color:Z().default("#000000"),is_filled:Ue().default(!1),fill_color:Z().optional(),is_dashed:Ue().default(!1),subcircuit_id:Z().optional()}).describe("Draws a styled circle on the schematic");Pt(!0);Jot=at({type:Be("schematic_arc"),schematic_arc_id:_n("schematic_arc"),schematic_sheet_id:Z().optional(),schematic_component_id:Z().optional(),schematic_symbol_id:Z().optional(),center:ko,radius:ze,start_angle_degrees:Ui,end_angle_degrees:Ui,direction:Zt(["clockwise","counterclockwise"]).default("counterclockwise"),stroke_width:ze.nullable().optional(),color:Z().default("#000000"),is_dashed:Ue().default(!1),subcircuit_id:Z().optional()}).describe("Draws a styled arc on the schematic");Pt(!0);$ot=at({type:Be("schematic_trace"),schematic_trace_id:Z(),schematic_sheet_id:Z().optional(),source_trace_id:Z().optional(),junctions:Qt(at({x:He(),y:He()})),edges:Qt(at({from:at({x:He(),y:He()}),to:at({x:He(),y:He()}),is_crossing:Ue().optional(),from_schematic_port_id:Z().optional(),to_schematic_port_id:Z().optional()})),subcircuit_id:Z().optional(),subcircuit_connectivity_map_key:Z().optional()});Pt(!0);pQn=Zt(["center","left","right","top","bottom"]);Pt(!0);zve=at({text:Z(),is_overlined:Ue().optional()}),Zot=at({type:Be("schematic_text"),schematic_sheet_id:Z().optional(),schematic_component_id:Z().optional(),schematic_symbol_id:Z().optional(),schematic_text_id:Z(),source_trace_id:Z().optional(),text:Z(),text_parts:Qt(zve).min(1).optional(),display_superscript:Z().optional(),font_size:He().default(0.18),position:at({x:ze,y:ze}),rotation:He().default(0),anchor:kn([pQn.describe("legacy"),vM]).default("center"),color:Z().default("#000000"),subcircuit_id:Z().optional()});Pt(!0);eit=at({type:Be("schematic_port"),schematic_port_id:Z(),source_port_id:Z(),schematic_sheet_id:Z().optional(),schematic_component_id:Z().optional(),center:ko,facing_direction:Zt(["up","down","left","right"]).optional(),distance_from_component_edge:He().optional(),side_of_component:Zt(["top","bottom","left","right"]).optional(),true_ccw_index:He().optional(),pin_number:He().optional(),display_pin_label:Z().optional(),display_pin_label_text_parts:Qt(zve).min(1).optional(),display_pin_label_font_size:He().positive().finite().optional(),subcircuit_id:Z().optional(),is_connected:Ue().optional(),is_internal_circuit_port:Ue().optional(),is_overlapping_internal_circuit_port:Ue().optional(),has_input_arrow:Ue().optional(),has_output_arrow:Ue().optional(),is_drawn_with_inversion_circle:Ue().optional()}).describe("Defines a port on a schematic component");Pt(!0);tit=at({type:Be("schematic_net_label"),schematic_net_label_id:_n("schematic_net_label"),schematic_sheet_id:Z().optional(),schematic_trace_id:Z().optional(),source_trace_id:Z().optional(),source_net_id:Z(),center:ko,anchor_position:ko.optional(),anchor_side:Zt(["top","bottom","left","right"]),text:Z(),display_superscript:Z().optional(),symbol_name:Z().optional(),is_movable:Ue().optional(),subcircuit_id:Z().optional()});Pt(!0);nit=Oa.extend({type:Be("schematic_error"),schematic_error_id:Z(),error_type:Be("schematic_port_not_found").default("schematic_port_not_found"),subcircuit_id:Z().optional()}).describe("Defines a schematic error on the schematic");Pt(!0);oit=Oa.extend({type:Be("schematic_layout_error"),schematic_layout_error_id:_n("schematic_layout_error"),error_type:Be("schematic_layout_error").default("schematic_layout_error"),source_group_id:Z(),schematic_group_id:Z(),subcircuit_id:Z().optional()}).describe("Error emitted when schematic layout fails for a group");Pt(!0);Pce=at({type:Be("schematic_debug_object"),label:Z().optional(),subcircuit_id:Z().optional()}),iit=Pce.extend({shape:Be("rect"),center:ko,size:Cce}),rit=Pce.extend({shape:Be("line"),start:ko,end:ko}),sit=Pce.extend({shape:Be("point"),center:ko}),ait=nl("shape",[iit,rit,sit]);Pt(!0);cit=at({type:Be("schematic_voltage_probe"),schematic_voltage_probe_id:Z(),schematic_sheet_id:Z().optional(),source_component_id:Z().optional(),name:Z().optional(),position:ko,schematic_trace_id:Z(),voltage:xl.optional(),subcircuit_id:Z().optional(),color:Z().optional(),label_alignment:vM.optional()}).describe("Defines a voltage probe measurement point on a schematic trace");Pt(!0);vce=at({type:Be("schematic_manual_edit_conflict_warning"),schematic_manual_edit_conflict_warning_id:_n("schematic_manual_edit_conflict_warning"),warning_type:Be("schematic_manual_edit_conflict_warning").default("schematic_manual_edit_conflict_warning"),message:Z(),schematic_component_id:Z(),schematic_group_id:Z().optional(),subcircuit_id:Z().optional(),source_component_id:Z()}).describe("Warning emitted when a component has both manual placement and explicit schX/schY coordinates");Pt(!0);lit=at({type:Be("schematic_component_overlap_warning"),schematic_component_overlap_warning_id:_n("schematic_component_overlap_warning"),warning_type:Be("schematic_component_overlap_warning").default("schematic_component_overlap_warning"),message:Z(),schematic_component_ids:t7([Z(),Z()]),schematic_sheet_id:Z().optional()}).describe("Warning emitted when the rendered bounds of two schematic components overlap");Pt(!0);dit=at({type:Be("schematic_component_styling_warning"),schematic_component_styling_warning_id:_n("schematic_component_styling_warning"),warning_type:Be("schematic_component_styling_warning").default("schematic_component_styling_warning"),message:Z(),schematic_component_id:Z(),styling_issue_type:Z(),schematic_port_ids:Qt(Z()).optional(),source_component_id:Z().optional(),schematic_sheet_id:Z().optional(),subcircuit_id:Z().optional()}).describe("Warning emitted when a schematic component has a visual styling issue");Pt(!0);uit=at({type:Be("schematic_sheet_styling_warning"),schematic_sheet_styling_warning_id:_n("schematic_sheet_styling_warning"),warning_type:Be("schematic_sheet_styling_warning").default("schematic_sheet_styling_warning"),message:Z(),schematic_sheet_id:Z(),styling_issue_type:Be("non_default_sheet_size"),subcircuit_id:Z().optional()}).describe("Style warning emitted when a schematic sheet uses a non-default size");Pt(!0);hit=at({type:Be("schematic_element_outside_sheet_warning"),schematic_element_outside_sheet_warning_id:_n("schematic_element_outside_sheet_warning"),warning_type:Be("schematic_element_outside_sheet_warning").default("schematic_element_outside_sheet_warning"),message:Z(),schematic_sheet_id:Z(),schematic_element_type:Zt(["schematic_component","schematic_net_label","schematic_trace"]),schematic_element_id:Z()}).describe("Warning emitted when a schematic component, net label, or trace extends outside its schematic sheet");Pt(!0);knt=ze.pipe(He().positive().finite()),mit=at({type:Be("schematic_graphic"),schematic_graphic_id:_n("schematic_graphic"),schematic_sheet_id:Z().optional(),asset:kq.optional(),svg_content:Z().optional(),width:knt.optional(),height:knt.optional()}).describe("References a graphic asset or inline SVG content with optional centered layout bounds on a schematic sheet").superRefine(({asset:e,svg_content:t},n)=>{if(e===void 0&&t===void 0)n.addIssue({code:jt.custom,message:"At least one of asset or svg_content is required"})});Pt(!0);pit=at({type:Be("schematic_group"),schematic_group_id:_n("schematic_group"),schematic_sheet_id:Z().optional(),source_group_id:Z(),is_subcircuit:Ue().optional(),subcircuit_id:Z().optional(),width:fe,height:fe,center:ko,schematic_component_ids:Qt(Z()),show_as_schematic_box:Ue().optional(),name:Z().optional(),description:Z().optional()}).describe("Defines a group of components on the schematic");Pt(!0);Ait=at({type:Be("schematic_table"),schematic_table_id:_n("schematic_table"),schematic_sheet_id:Z().optional(),anchor_position:ko,column_widths:Qt(ze),row_heights:Qt(ze),cell_padding:ze.optional(),border_width:ze.optional(),subcircuit_id:Z().optional(),schematic_component_id:Z().optional(),anchor:vM.optional()}).describe("Defines a table on the schematic");Pt(!0);_it=at({type:Be("schematic_table_cell"),schematic_table_cell_id:_n("schematic_table_cell"),schematic_sheet_id:Z().optional(),schematic_table_id:Z(),start_row_index:He(),end_row_index:He(),start_column_index:He(),end_column_index:He(),text:Z().optional(),center:ko,width:ze,height:ze,horizontal_align:Zt(["left","center","right"]).optional(),vertical_align:Zt(["top","middle","bottom"]).optional(),font_size:ze.optional(),subcircuit_id:Z().optional()}).describe("Defines a cell within a schematic_table");Pt(!0);Ece=Zt(["a4","ansi_b"]),git=at({type:Be("schematic_sheet"),schematic_sheet_id:_n("schematic_sheet"),name:Z().optional(),sheet_index:He().optional(),sheet_size:Ece.optional(),sheet_width:He().positive().optional(),sheet_height:He().positive().optional(),subcircuit_id:Z().optional(),outline_color:Z().optional()}).describe("Defines a schematic sheet or page that components can be placed on");Pt(!0);fit=at({type:Be("schematic_missing_sheet_warning"),schematic_missing_sheet_warning_id:_n("schematic_missing_sheet_warning"),warning_type:Be("schematic_missing_sheet_warning").default("schematic_missing_sheet_warning"),message:Z()}).describe("Circuit-wide warning emitted when a schematic has no schematic sheet. Display as a banner without attaching it to a component or drawing a target outline or leader line.");Pt(!0);yit=at({x:ze,y:ze,bulge:He().optional()});Pt(!0);dve=at({vertices:Qt(yit)});Pt(!0);Gve=at({outer_ring:dve,inner_rings:Qt(dve).default([])});Pt(!0);Mce={from_left:"from_left",from_right:"from_right",from_top:"from_top",from_bottom:"from_bottom",from_above:"from_above",from_below:"from_below",from_x_neg:"from_left",from_x_pos:"from_right",from_y_pos:"from_top",from_y_neg:"from_bottom",from_z_pos:"from_above",from_z_neg:"from_below",from_front:"from_top",from_back:"from_bottom"},AQn={from_left:{x:-1,y:0,z:0},from_right:{x:1,y:0,z:0},from_top:{x:0,y:1,z:0},from_bottom:{x:0,y:-1,z:0},from_above:{x:0,y:0,z:1},from_below:{x:0,y:0,z:-1}},xit=Zt(["from_left","from_right","from_top","from_bottom","from_above","from_below","from_x_neg","from_x_pos","from_y_pos","from_y_neg","from_z_pos","from_z_neg","from_front","from_back"]).transform((e)=>Mce[e]).describe('The side exposing the receptacle where the cable or mating part is attached, following the 2D PCB diagram convention, not a 3D viewport frame. In project coordinate space, "from_top" is +Y, "from_bottom" -Y, "from_left" -X, "from_right" +X, "from_above" +Z and "from_below" -Z. A receptacle on the +Y edge is "from_top" even though the plug moves in -Y as it seats. Cartesian spellings such as "from_y_pos" are accepted and normalized to the named values, as are the deprecated "from_front" (now "from_top") and "from_back" (now "from_bottom").');Pt(!0);Pt(!0);uz=Zt(["leftside_top","leftside_bottom","rightside_top","rightside_bottom","topside_left","topside_right","bottomside_left","bottomside_right"]);Pt(!0);_Qn=[["leftside_top","bottomside_left","rightside_bottom","topside_right"],["leftside_bottom","bottomside_right","rightside_top","topside_left"]],Cit=at({x:ze,y:ze,via:Ue().optional(),via_to_layer:bo.optional()}),fQn=Qt(Cit);Pt(!0);Pt(!0);M_=at({x:ze,y:ze,via:Ue().optional(),to_layer:bo.optional(),trace_width:ze.optional()});Pt(!0);Iit=at({min_trace_width:fe.optional(),min_board_edge_clearance:fe.optional(),min_via_hole_edge_to_via_hole_edge_clearance:fe.optional(),min_plated_hole_drill_edge_to_drill_edge_clearance:fe.optional(),min_trace_to_pad_edge_clearance:fe.optional(),min_trace_to_hole_edge_clearance:fe.optional().describe("Minimum distance from a trace copper edge to a non-plated hole edge, in mm. No default is applied when omitted."),min_pad_edge_to_pad_edge_clearance:fe.optional(),min_same_net_trace_edge_to_trace_edge_clearance:fe.optional(),min_different_net_trace_edge_to_trace_edge_clearance:fe.optional(),min_via_edge_to_pad_edge_clearance:fe.optional(),min_via_hole_diameter:fe.optional(),min_via_pad_diameter:fe.optional()}),bit=at({type:Be("pcb_component"),pcb_component_id:_n("pcb_component"),source_component_id:Z(),center:ko,layer:bo,rotation:Ui,display_offset_x:Z().optional().describe("How to display the x offset for this part, usually corresponding with how the user specified it"),display_offset_y:Z().optional().describe("How to display the y offset for this part, usually corresponding with how the user specified it"),width:fe,height:fe,do_not_place:Ue().optional(),is_allowed_to_be_off_board:Ue().optional(),subcircuit_id:Z().optional(),pcb_group_id:Z().optional(),position_mode:Zt(["packed","relative_to_group_anchor","relative_to_another_component","none"]).optional(),anchor_position:ko.optional(),anchor_alignment:vM.optional(),positioned_relative_to_pcb_group_id:Z().optional(),positioned_relative_to_pcb_board_id:Z().optional(),cable_insertion_center:ko.optional(),insertion_direction:xit.optional(),pin1_location:uz.optional().describe("Location of pin 1 on the unrotated, top-view component footprint"),supplier_pin1_location_map:Fa(Dv,uz).optional().describe("Pin 1 location for each supplier's unrotated, top-view footprint"),metadata:at({kicad_footprint:$nt.optional()}).optional(),obstructs_within_bounds:Ue().default(!0).describe("Does this component take up all the space within its bounds on a layer. This is generally true except for when separated pin headers are being represented by a single component (in which case, chips can be placed between the pin headers) or for tall modules where chips fit underneath")}).describe("Defines a component on the PCB");Pt(!0);Bce=at({type:Be("pcb_debug_object"),pcb_debug_object_id:_n("pcb_debug_object"),label:Z().optional(),subcircuit_id:Z().optional()}),Sit=Bce.extend({shape:Be("rect"),center:ko,size:Cce}),Pit=Bce.extend({shape:Be("line"),start:ko,end:ko}),vit=Bce.extend({shape:Be("point"),center:ko}),Eit=nl("shape",[Sit,Pit,vit]);Pt(!0);Mit=at({type:Be("pcb_hole"),pcb_hole_id:_n("pcb_hole"),pcb_group_id:Z().optional(),subcircuit_id:Z().optional(),pcb_component_id:Z().optional(),hole_shape:Be("circle"),hole_diameter:He(),x:ze,y:ze,is_covered_with_solder_mask:Ue().optional(),soldermask_margin:He().optional()}),yQn=Mit.describe("Defines a circular hole on the PCB");Pt(!0);Bit=at({type:Be("pcb_hole"),pcb_hole_id:_n("pcb_hole"),pcb_group_id:Z().optional(),subcircuit_id:Z().optional(),pcb_component_id:Z().optional(),hole_shape:Be("rect"),hole_width:He(),hole_height:He(),x:ze,y:ze,is_covered_with_solder_mask:Ue().optional(),soldermask_margin:He().optional()}),xQn=Bit.describe("Defines a rectangular (square-capable) hole on the PCB. Use equal width/height for square.");Pt(!0);wit=at({type:Be("pcb_hole"),pcb_hole_id:_n("pcb_hole"),pcb_group_id:Z().optional(),subcircuit_id:Z().optional(),pcb_component_id:Z().optional(),hole_shape:Zt(["circle","square"]),hole_diameter:He(),x:ze,y:ze,is_covered_with_solder_mask:Ue().optional(),soldermask_margin:He().optional()}),CQn=wit.describe("Defines a circular or square hole on the PCB");Pt(!0);Tit=at({type:Be("pcb_hole"),pcb_hole_id:_n("pcb_hole"),pcb_group_id:Z().optional(),subcircuit_id:Z().optional(),pcb_component_id:Z().optional(),hole_shape:Be("oval"),hole_width:He(),hole_height:He(),x:ze,y:ze,is_covered_with_solder_mask:Ue().optional(),soldermask_margin:He().optional()}),IQn=Tit.describe("Defines an oval hole on the PCB");Pt(!0);Dit=at({type:Be("pcb_hole"),pcb_hole_id:_n("pcb_hole"),pcb_group_id:Z().optional(),subcircuit_id:Z().optional(),pcb_component_id:Z().optional(),hole_shape:Be("pill"),hole_width:He(),hole_height:He(),x:ze,y:ze,is_covered_with_solder_mask:Ue().optional(),soldermask_margin:He().optional()}),bQn=Dit.describe("Defines a pill-shaped hole on the PCB");Pt(!0);Nit=at({type:Be("pcb_hole"),pcb_hole_id:_n("pcb_hole"),pcb_group_id:Z().optional(),subcircuit_id:Z().optional(),pcb_component_id:Z().optional(),hole_shape:Be("rotated_pill"),hole_width:He(),hole_height:He(),x:ze,y:ze,ccw_rotation:Ui,is_covered_with_solder_mask:Ue().optional(),soldermask_margin:He().optional()}),SQn=Nit.describe("Defines a rotated pill-shaped hole on the PCB");Pt(!0);Rit=wit.or(Tit).or(Dit).or(Nit).or(Mit).or(Bit),PQn=at({type:Be("pcb_plated_hole"),shape:Be("circle"),pcb_group_id:Z().optional(),subcircuit_id:Z().optional(),outer_diameter:He(),hole_diameter:He(),is_covered_with_solder_mask:Ue().optional(),x:ze,y:ze,layers:Qt(bo),port_hints:Qt(Z()).optional(),pcb_component_id:Z().optional(),pcb_port_id:Z().optional(),pcb_plated_hole_id:_n("pcb_plated_hole"),soldermask_margin:He().optional()}),vQn=at({type:Be("pcb_plated_hole"),shape:Zt(["oval","pill"]),pcb_group_id:Z().optional(),subcircuit_id:Z().optional(),outer_width:He(),outer_height:He(),hole_width:He(),hole_height:He(),is_covered_with_solder_mask:Ue().optional(),x:ze,y:ze,ccw_rotation:Ui,layers:Qt(bo),port_hints:Qt(Z()).optional(),pcb_component_id:Z().optional(),pcb_port_id:Z().optional(),pcb_plated_hole_id:_n("pcb_plated_hole"),soldermask_margin:He().optional()}),EQn=at({type:Be("pcb_plated_hole"),shape:Be("circular_hole_with_rect_pad"),pcb_group_id:Z().optional(),subcircuit_id:Z().optional(),hole_shape:Be("circle"),pad_shape:Be("rect"),hole_diameter:He(),rect_pad_width:He(),rect_pad_height:He(),rect_border_radius:He().optional(),hole_offset_x:ze.default(0),hole_offset_y:ze.default(0),is_covered_with_solder_mask:Ue().optional(),x:ze,y:ze,layers:Qt(bo),port_hints:Qt(Z()).optional(),pcb_component_id:Z().optional(),pcb_port_id:Z().optional(),pcb_plated_hole_id:_n("pcb_plated_hole"),soldermask_margin:He().optional(),rect_ccw_rotation:Ui.optional()}),MQn=at({type:Be("pcb_plated_hole"),shape:Be("pill_hole_with_rect_pad"),pcb_group_id:Z().optional(),subcircuit_id:Z().optional(),hole_shape:Be("pill"),pad_shape:Be("rect"),hole_width:He(),hole_height:He(),rect_pad_width:He(),rect_pad_height:He(),rect_border_radius:He().optional(),hole_offset_x:ze.default(0),hole_offset_y:ze.default(0),is_covered_with_solder_mask:Ue().optional(),x:ze,y:ze,layers:Qt(bo),port_hints:Qt(Z()).optional(),pcb_component_id:Z().optional(),pcb_port_id:Z().optional(),pcb_plated_hole_id:_n("pcb_plated_hole"),soldermask_margin:He().optional()}),BQn=at({type:Be("pcb_plated_hole"),shape:Be("rotated_pill_hole_with_rect_pad"),pcb_group_id:Z().optional(),subcircuit_id:Z().optional(),hole_shape:Be("rotated_pill"),pad_shape:Be("rect"),hole_width:He(),hole_height:He(),hole_ccw_rotation:Ui,rect_pad_width:He(),rect_pad_height:He(),rect_border_radius:He().optional(),rect_ccw_rotation:Ui,hole_offset_x:ze.default(0),hole_offset_y:ze.default(0),is_covered_with_solder_mask:Ue().optional(),x:ze,y:ze,layers:Qt(bo),port_hints:Qt(Z()).optional(),pcb_component_id:Z().optional(),pcb_port_id:Z().optional(),pcb_plated_hole_id:_n("pcb_plated_hole"),soldermask_margin:He().optional()}),wQn=at({type:Be("pcb_plated_hole"),shape:Be("hole_with_polygon_pad"),pcb_group_id:Z().optional(),subcircuit_id:Z().optional(),hole_shape:Zt(["circle","oval","pill","rotated_pill"]),hole_diameter:He().optional(),hole_width:He().optional(),hole_height:He().optional(),pad_outline:Qt(at({x:ze,y:ze})).min(3),hole_offset_x:ze.default(0),hole_offset_y:ze.default(0),is_covered_with_solder_mask:Ue().optional(),x:ze,y:ze,layers:Qt(bo),port_hints:Qt(Z()).optional(),pcb_component_id:Z().optional(),pcb_port_id:Z().optional(),pcb_plated_hole_id:_n("pcb_plated_hole"),soldermask_margin:He().optional(),ccw_rotation:Ui.optional()}),Qit=kn([PQn,vQn,EQn,MQn,BQn,wQn]);Pt(!0);Pt(!0);Pt(!0);Pt(!0);Pt(!0);Pt(!0);kit=at({type:Be("pcb_port"),pcb_port_id:_n("pcb_port"),pcb_group_id:Z().optional(),subcircuit_id:Z().optional(),source_port_id:Z(),pcb_component_id:Z().optional(),x:ze,y:ze,layers:Qt(bo),is_board_pinout:Ue().optional()}).describe("Defines a port on the PCB");Pt(!0);TQn=at({type:Be("pcb_smtpad"),shape:Be("circle"),pcb_smtpad_id:_n("pcb_smtpad"),pcb_group_id:Z().optional(),subcircuit_id:Z().optional(),x:ze,y:ze,radius:He(),layer:bo,port_hints:Qt(Z()).optional(),pcb_component_id:Z().optional(),pcb_port_id:Z().optional(),is_covered_with_solder_mask:Ue().optional(),soldermask_margin:He().optional(),solderpaste_margin:He().optional()}),DQn=at({type:Be("pcb_smtpad"),shape:Be("rect"),pcb_smtpad_id:_n("pcb_smtpad"),pcb_group_id:Z().optional(),subcircuit_id:Z().optional(),x:ze,y:ze,width:He(),height:He(),rect_border_radius:He().optional(),corner_radius:He().optional(),layer:bo,port_hints:Qt(Z()).optional(),pcb_component_id:Z().optional(),pcb_port_id:Z().optional(),is_covered_with_solder_mask:Ue().optional(),soldermask_margin:He().optional(),soldermask_margin_left:He().optional(),soldermask_margin_top:He().optional(),soldermask_margin_right:He().optional(),soldermask_margin_bottom:He().optional(),solderpaste_margin:He().optional()}),NQn=at({type:Be("pcb_smtpad"),shape:Be("rotated_rect"),pcb_smtpad_id:_n("pcb_smtpad"),pcb_group_id:Z().optional(),subcircuit_id:Z().optional(),x:ze,y:ze,width:He(),height:He(),rect_border_radius:He().optional(),corner_radius:He().optional(),ccw_rotation:Ui,layer:bo,port_hints:Qt(Z()).optional(),pcb_component_id:Z().optional(),pcb_port_id:Z().optional(),is_covered_with_solder_mask:Ue().optional(),soldermask_margin:He().optional(),soldermask_margin_left:He().optional(),soldermask_margin_top:He().optional(),soldermask_margin_right:He().optional(),soldermask_margin_bottom:He().optional(),solderpaste_margin:He().optional()}),Lit=at({type:Be("pcb_smtpad"),shape:Be("pill"),pcb_smtpad_id:_n("pcb_smtpad"),pcb_group_id:Z().optional(),subcircuit_id:Z().optional(),x:ze,y:ze,width:He(),height:He(),radius:He(),layer:bo,port_hints:Qt(Z()).optional(),pcb_component_id:Z().optional(),pcb_port_id:Z().optional(),is_covered_with_solder_mask:Ue().optional(),soldermask_margin:He().optional(),solderpaste_margin:He().optional()}),RQn=at({type:Be("pcb_smtpad"),shape:Be("rotated_pill"),pcb_smtpad_id:_n("pcb_smtpad"),pcb_group_id:Z().optional(),subcircuit_id:Z().optional(),x:ze,y:ze,width:He(),height:He(),radius:He(),ccw_rotation:Ui,layer:bo,port_hints:Qt(Z()).optional(),pcb_component_id:Z().optional(),pcb_port_id:Z().optional(),is_covered_with_solder_mask:Ue().optional(),soldermask_margin:He().optional(),solderpaste_margin:He().optional()}),QQn=at({type:Be("pcb_smtpad"),shape:Be("polygon"),pcb_smtpad_id:_n("pcb_smtpad"),pcb_group_id:Z().optional(),subcircuit_id:Z().optional(),points:Qt(ko),layer:bo,port_hints:Qt(Z()).optional(),pcb_component_id:Z().optional(),pcb_port_id:Z().optional(),is_covered_with_solder_mask:Ue().optional(),soldermask_margin:He().optional(),solderpaste_margin:He().optional()}),Fit=nl("shape",[TQn,DQn,NQn,RQn,Lit,QQn]).describe("Defines an SMT pad on the PCB");Pt(!0);Pt(!0);Pt(!0);Pt(!0);Pt(!0);Pt(!0);kQn=at({type:Be("pcb_solder_paste"),shape:Be("circle"),pcb_solder_paste_id:_n("pcb_solder_paste"),pcb_group_id:Z().optional(),subcircuit_id:Z().optional(),x:ze,y:ze,radius:He(),layer:bo,pcb_component_id:Z().optional(),pcb_smtpad_id:Z().optional()}),LQn=at({type:Be("pcb_solder_paste"),shape:Be("rect"),pcb_solder_paste_id:_n("pcb_solder_paste"),pcb_group_id:Z().optional(),subcircuit_id:Z().optional(),x:ze,y:ze,width:He(),height:He(),layer:bo,pcb_component_id:Z().optional(),pcb_smtpad_id:Z().optional()}),FQn=at({type:Be("pcb_solder_paste"),shape:Be("pill"),pcb_solder_paste_id:_n("pcb_solder_paste"),pcb_group_id:Z().optional(),subcircuit_id:Z().optional(),x:ze,y:ze,width:He(),height:He(),radius:He(),layer:bo,pcb_component_id:Z().optional(),pcb_smtpad_id:Z().optional()}),HQn=at({type:Be("pcb_solder_paste"),shape:Be("rotated_rect"),pcb_solder_paste_id:_n("pcb_solder_paste"),pcb_group_id:Z().optional(),subcircuit_id:Z().optional(),x:ze,y:ze,width:He(),height:He(),ccw_rotation:ze,layer:bo,pcb_component_id:Z().optional(),pcb_smtpad_id:Z().optional()}),OQn=at({type:Be("pcb_solder_paste"),shape:Be("rotated_pill"),pcb_solder_paste_id:_n("pcb_solder_paste"),pcb_group_id:Z().optional(),subcircuit_id:Z().optional(),x:ze,y:ze,width:He(),height:He(),radius:He(),ccw_rotation:Ui,layer:bo,pcb_component_id:Z().optional(),pcb_smtpad_id:Z().optional()}),zQn=at({type:Be("pcb_solder_paste"),shape:Be("oval"),pcb_solder_paste_id:_n("pcb_solder_paste"),pcb_group_id:Z().optional(),subcircuit_id:Z().optional(),x:ze,y:ze,width:He(),height:He(),layer:bo,pcb_component_id:Z().optional(),pcb_smtpad_id:Z().optional()}),GQn=Qq.extend({type:Be("pcb_solder_paste"),pcb_solder_paste_id:_n("pcb_solder_paste"),pcb_group_id:Z().optional(),subcircuit_id:Z().optional(),holes:Qt(Qq.shape.points).optional(),layer:bo,pcb_component_id:Z().optional(),pcb_smtpad_id:Z().optional()}),Hit=kn([kQn,LQn,FQn,HQn,OQn,zQn,GQn]).describe("Defines solderpaste on the PCB");Pt(!0);Pt(!0);Pt(!0);Pt(!0);Pt(!0);Pt(!0);Pt(!0);xce=at({type:Be("pcb_soldermask_opening"),pcb_soldermask_opening_id:_n("pcb_soldermask_opening"),layer:bo.pipe(a0),pcb_component_id:Z().optional(),pcb_group_id:Z().optional(),subcircuit_id:Z().optional()}),Oit=nl("shape",[pve.extend(xce.shape),Ice.extend(xce.shape),Ave.extend(xce.shape),Qq.extend(xce.shape)]).describe("An explicit opening in top or bottom solder mask or flex coverlay, independent of pads. Removes mask without adding copper or solder paste.");Pt(!0);zit=at({type:Be("pcb_text"),pcb_text_id:_n("pcb_text"),pcb_group_id:Z().optional(),subcircuit_id:Z().optional(),text:Z(),center:ko,layer:bo,width:fe,height:fe,lines:He(),align:Zt(["bottom-left"])}).describe("Defines text on the PCB");Pt(!0);Lnt=ze.pipe(He().finite().positive()),Git=at({route_type:Be("wire"),x:ze,y:ze,width:ze,start_width:Lnt.optional(),end_width:Lnt.optional(),width_interpolation_mode:Zt(["linear","quadratic"]).optional(),copper_pour_id:Z().optional(),is_inside_copper_pour:Ue().optional(),start_pcb_port_id:Z().optional(),end_pcb_port_id:Z().optional(),layer:bo}).superRefine((e,t)=>{let n=[e.start_width,e.end_width,e.width_interpolation_mode].filter((o)=>o!==void 0).length;if(n===0)return;if(n!==3)t.addIssue({code:jt.custom,message:"Wire taper requires start_width, end_width and width_interpolation_mode together"});if(e.width!==e.start_width)t.addIssue({code:jt.custom,path:["start_width"],message:"start_width must equal width"});if(!Number.isFinite(e.x)||!Number.isFinite(e.y))t.addIssue({code:jt.custom,message:"Tapered wire coordinates must be finite"})}),Yit=at({route_type:Be("via"),x:ze,y:ze,copper_pour_id:Z().optional(),is_inside_copper_pour:Ue().optional(),hole_diameter:ze.optional(),outer_diameter:ze.optional(),tented_on_top:Ue().optional(),tented_on_bottom:Ue().optional(),from_layer:bo,to_layer:bo}),Vit=at({route_type:Be("through_pad"),start:ko,end:ko,width:ze,start_layer:bo,end_layer:bo,pcb_smtpad_id:Z().optional(),pcb_plated_hole_id:Z().optional()}),wce=kn([Git,Yit,Vit]),Uit=at({type:Be("pcb_trace"),source_trace_id:Z().optional(),pcb_component_id:Z().optional(),pcb_trace_id:_n("pcb_trace"),pcb_group_id:Z().optional(),subcircuit_id:Z().optional(),route_thickness_mode:Zt(["constant","interpolated"]).default("constant").optional(),route_order_index:He().optional(),should_round_corners:Ue().optional(),trace_length:He().optional(),is_antenna_trace:Ue().optional(),highlight_color:Z().optional(),route:Qt(wce).superRefine((e,t)=>{for(let[n,o]of e.entries()){if(o.route_type!=="wire"||o.width_interpolation_mode===void 0)continue;let i=e[n+1],r=i?.route_type==="through_pad"?i.start:i,s=i?.route_type==="wire"?i.layer:i?.route_type==="via"?i.from_layer:i?.start_layer,a=r?Math.hypot(r.x-o.x,r.y-o.y):NaN;if(!Number.isFinite(a)||a<=0||s!==o.layer)t.addIssue({code:jt.custom,path:[n],message:"Tapered wire must lead to a distinct finite next point on the same layer"})}})}).describe("Defines a trace on the PCB");Pt(!0);Pt(!0);Wit=at({type:Be("pcb_trace_warning"),pcb_trace_warning_id:_n("pcb_trace_warning"),warning_type:Be("pcb_trace_warning").default("pcb_trace_warning"),message:Z(),center:ko.optional(),pcb_trace_id:Z(),source_trace_id:Z(),pcb_component_ids:Qt(Z()),pcb_port_ids:Qt(Z()),subcircuit_id:Z().optional()}).describe("Defines a trace warning on the PCB");Pt(!0);Xit=at({type:Be("pcb_trace_style_warning"),pcb_trace_style_warning_id:_n("pcb_trace_style_warning"),warning_type:Be("pcb_trace_style_warning").default("pcb_trace_style_warning"),message:Z(),styling_issue_type:Be("long_segment_at_odd_angle"),pcb_trace_id:Z(),source_trace_id:Z().optional(),subcircuit_id:Z().optional(),layer:bo,start_route_index:He().int().nonnegative(),end_route_index:He().int().nonnegative(),segment_start:ko,segment_end:ko,center:ko,segment_length:ze,minimum_segment_length:ze,angle_degrees:He().min(0).lt(360),nearest_allowed_angle_degrees:He().min(0).lt(360).multipleOf(45),angle_deviation_degrees:He().min(0).max(22.5),angle_tolerance_degrees:He().min(0).lt(22.5)}).describe("Warning for a long PCB trace segment whose direction deviates from a multiple of 45 degrees");Pt(!0);Kit=at({type:Be("pcb_trace_too_long_error"),pcb_trace_too_long_error_id:_n("pcb_trace_too_long_error"),error_type:Be("pcb_trace_too_long_error").default("pcb_trace_too_long_error"),message:Z(),pcb_trace_id:Z(),source_net_id:Z().optional(),source_trace_id:Z().optional(),actual_trace_length:ze,maximum_trace_length:ze,subcircuit_id:Z().optional()}).describe("Error emitted when a PCB trace is longer than its maximum allowed length");Pt(!0);jit=Oa.extend({type:Be("pcb_bus_length_skew_error"),pcb_bus_length_skew_error_id:_n("pcb_bus_length_skew_error"),error_type:Be("pcb_bus_length_skew_error").default("pcb_bus_length_skew_error"),source_bus_id:Z(),source_trace_ids:Qt(Z()),pcb_trace_ids:Qt(Z()),actual_length_skew:He().nonnegative().finite(),maximum_length_skew:He().nonnegative().finite(),subcircuit_id:Z().optional()});Pt(!0);qit=at({type:Be("pcb_trace_too_long_warning"),pcb_trace_too_long_warning_id:_n("pcb_trace_too_long_warning"),warning_type:Be("pcb_trace_too_long_warning").default("pcb_trace_too_long_warning"),message:Z(),pcb_trace_id:Z(),source_net_id:Z().optional(),source_trace_id:Z().optional(),actual_trace_length:ze,maximum_trace_length:ze,subcircuit_id:Z().optional()}).describe("Warning emitted when a PCB trace is longer than its maximum allowed length");Pt(!0);Jit=at({type:Be("pcb_trace_too_many_vias_warning"),pcb_trace_too_many_vias_warning_id:_n("pcb_trace_too_many_vias_warning"),warning_type:Be("pcb_trace_too_many_vias_warning").default("pcb_trace_too_many_vias_warning"),message:Z(),pcb_trace_id:Z(),source_net_id:Z().optional(),source_trace_id:Z().optional(),actual_via_count:He().int().nonnegative(),maximum_via_count:He().int().nonnegative(),subcircuit_id:Z().optional()}).describe("Warning emitted when a PCB trace has more vias than its maximum allowed count");Pt(!0);RR=Oa.extend({type:Be("pcb_bus_routing_constraint_error"),pcb_bus_routing_constraint_error_id:_n("pcb_bus_routing_constraint_error"),error_type:Be("pcb_bus_routing_constraint_error").default("pcb_bus_routing_constraint_error"),source_bus_id:Z(),source_trace_ids:Qt(Z()).min(1),pcb_trace_ids:Qt(Z()),subcircuit_id:Z().optional()}),Tce=nl("routing_rule",[RR.extend({routing_rule:Be("length_skew"),actual_length_skew:He().nonnegative().finite(),maximum_length_skew:He().nonnegative().finite()}),RR.extend({routing_rule:Be("min_length"),actual_trace_length:He().nonnegative().finite(),minimum_trace_length:He().finite()}),RR.extend({routing_rule:Be("max_length"),actual_trace_length:He().nonnegative().finite(),maximum_trace_length:He().finite()}),RR.extend({routing_rule:Be("target_length"),actual_trace_length:He().nonnegative().finite(),target_trace_length:He().finite(),length_tolerance:He().nonnegative().finite()}),RR.extend({routing_rule:Be("pcb_trace_spacing"),other_pcb_trace_id:Z(),other_source_trace_id:Z().optional(),actual_centerline_spacing:He().nonnegative().finite(),minimum_centerline_spacing:He().positive().finite()}),RR.extend({routing_rule:Be("pcb_spacing_to_other_signals"),other_pcb_trace_id:Z(),other_source_trace_id:Z().optional(),actual_centerline_spacing:He().nonnegative().finite(),minimum_centerline_spacing:He().positive().finite()}),RR.extend({routing_rule:Be("impedance_target"),target_impedance:He().positive().finite(),minimum_impedance:He().positive().finite().optional(),maximum_impedance:He().positive().finite().optional()})]).superRefine((e,t)=>{if(e.routing_rule!=="impedance_target")return;if(e.minimum_impedance===void 0&&e.maximum_impedance===void 0)t.addIssue({code:jt.custom,path:["minimum_impedance"],message:"Provide an impedance bound"});if(e.minimum_impedance!==void 0&&e.maximum_impedance!==void 0&&e.minimum_impedance>e.maximum_impedance)t.addIssue({code:jt.custom,path:["maximum_impedance"],message:"Impedance bounds must be ordered"})}).describe("A declared bus or differential-pair routing constraint is violated.");Pt(!0);Dq=at({type:Be("pcb_bus_routing_constraint_warning"),pcb_bus_routing_constraint_warning_id:_n("pcb_bus_routing_constraint_warning"),warning_type:Be("pcb_bus_routing_constraint_warning").default("pcb_bus_routing_constraint_warning"),source_bus_id:Z(),source_trace_ids:Qt(Z()).min(1),pcb_trace_ids:Qt(Z()),message:Z(),subcircuit_id:Z().optional()}).describe("A declared bus or pair constraint could not be verified; this is not a pass."),Dce=nl("routing_rule",[Dq.extend({routing_rule:Be("route_geometry")}),Dq.extend({routing_rule:Be("reference_geometry")}),Dq.extend({routing_rule:Be("spacing_geometry")}),Dq.extend({routing_rule:Be("target_length")}),Dq.extend({routing_rule:Be("physical_impedance")})]);Pt(!0);$it=Oa.extend({type:Be("pcb_trace_error"),pcb_trace_error_id:_n("pcb_trace_error"),error_type:Be("pcb_trace_error").default("pcb_trace_error"),center:ko.optional(),pcb_trace_id:Z(),source_trace_id:Z(),pcb_component_ids:Qt(Z()),pcb_port_ids:Qt(Z()),subcircuit_id:Z().optional()}).describe("Defines a trace error on the PCB");Pt(!0);Zit=Oa.extend({type:Be("pcb_trace_missing_error"),pcb_trace_missing_error_id:_n("pcb_trace_missing_error"),error_type:Be("pcb_trace_missing_error").default("pcb_trace_missing_error"),center:ko.optional(),source_trace_id:Z(),pcb_component_ids:Qt(Z()),pcb_port_ids:Qt(Z()),subcircuit_id:Z().optional()}).describe("Defines an error when a source trace has no corresponding PCB trace");Pt(!0);ert=Oa.extend({type:Be("pcb_port_not_matched_error"),pcb_error_id:_n("pcb_error"),error_type:Be("pcb_port_not_matched_error").default("pcb_port_not_matched_error"),pcb_component_ids:Qt(Z()),subcircuit_id:Z().optional()}).describe("Defines a trace error on the PCB where a port is not matched");Pt(!0);trt=Oa.extend({type:Be("pcb_port_not_connected_error"),pcb_port_not_connected_error_id:_n("pcb_port_not_connected_error"),error_type:Be("pcb_port_not_connected_error").default("pcb_port_not_connected_error"),pcb_port_ids:Qt(Z()),pcb_component_ids:Qt(Z()),subcircuit_id:Z().optional()}).describe("Defines an error when a pcb port is not connected to any trace");Pt(!0);nrt=at({type:Be("pcb_net"),pcb_net_id:_n("pcb_net"),source_net_id:Z().optional(),highlight_color:Z().optional()}).describe("Defines a net on the PCB");Pt(!0);s7=at({type:Be("pcb_via"),pcb_via_id:_n("pcb_via"),pcb_group_id:Z().optional(),subcircuit_id:Z().optional(),subcircuit_connectivity_map_key:Z().optional(),x:ze,y:ze,outer_diameter:ze.default("0.6mm"),hole_diameter:ze.default("0.25mm"),topmost_drill_layer:bo.optional(),bottommost_drill_layer:bo.optional(),through_hole:Ue().optional(),from_layer:bo.optional(),to_layer:bo.optional(),layers:Qt(bo),pcb_port_ids:Qt(Z()).optional(),pcb_trace_id:Z().optional(),source_trace_id:Z().optional(),source_net_id:Z().min(1).optional(),net_is_assignable:Ue().optional(),net_assigned:Ue().optional(),is_tented:Ue().optional(),tented_on_top:Ue().optional(),tented_on_bottom:Ue().optional()}).transform(({is_tented:e,...t})=>{if(e!==void 0)t.tented_on_top??=e,t.tented_on_bottom??=e;return t}).describe("Defines a via on the PCB");Pt(!0);ort=at({type:Be("pcb_board"),pcb_board_id:_n("pcb_board"),pcb_panel_id:Z().optional(),carrier_pcb_board_id:Z().optional(),is_subcircuit:Ue().optional(),subcircuit_id:Z().optional(),is_mounted_to_carrier_board:Ue().optional(),is_via_in_pad_allowed:Ue().optional(),default_via_tented_on_top:Ue().optional(),default_via_tented_on_bottom:Ue().optional(),default_via_plugged:Ue().optional(),width:fe.optional(),height:fe.optional(),center:ko,display_offset_x:Z().optional().describe("How to display the x offset for this board, usually corresponding with how the user specified it"),display_offset_y:Z().optional().describe("How to display the y offset for this board, usually corresponding with how the user specified it"),thickness:fe.optional().default(1.4),num_layers:He().optional().default(4),allow_blind_and_buried_vias:Ue().optional().describe("Whether autorouters may generate blind and buried vias. False restricts newly generated vias to the full board stack."),outline:Qt(ko).optional(),shape:Zt(["rect","polygon"]).optional(),material:Zt(["fr4","fr1","flex"]).default("fr4"),solder_mask_color:Z().optional(),silkscreen_color:Z().optional(),anchor_position:ko.optional(),anchor_alignment:vM.optional(),position_mode:Zt(["relative_to_panel_anchor","none"]).optional()}).merge(Iit).describe("Defines the board outline of the PCB");Pt(!0);Fnt=ko.extend({x:fe.pipe(He().finite()),y:fe.pipe(He().finite())}),irt=at({type:Be("pcb_bend"),pcb_bend_id:_n("pcb_bend"),pcb_board_id:Z(),pcb_group_id:Z().optional(),subcircuit_id:Z().optional(),name:Z().optional(),start:Fnt,end:Fnt,bend_angle:Ui.pipe(He().finite()),bend_radius:fe.pipe(He().finite().positive()),bend_side:Zt(["left","right"])}).refine(({start:e,end:t})=>e.x!==t.x||e.y!==t.y,{message:"Bend centerline endpoints must be distinct",path:["end"]}).describe("Defines a finite-radius bend on a flat PCB for runtime CAD folding");Pt(!0);uve=fe.pipe(He().finite().positive()),rrt=ko.extend({x:fe.pipe(He().finite()),y:fe.pipe(He().finite())}),srt=at({type:Be("pcb_stiffener"),pcb_stiffener_id:_n("pcb_stiffener"),pcb_board_id:Z(),pcb_group_id:Z().optional(),subcircuit_id:Z().optional(),name:Z().optional(),layer:Zt(["top","bottom"]),material:Zt(["fr4","polyimide","stainless_steel","aluminum"]),thickness:uve,adhesive_thickness:fe.pipe(He().finite().nonnegative()).optional()}),art=srt.extend({shape:Be("rect"),center:rrt,rotation:Ui.pipe(He().finite()).optional(),width:uve,height:uve,outline:Sg().optional()});Pt(!0);crt=srt.extend({shape:Be("polygon"),outline:Qt(rrt).min(3).refine((e)=>{let t=e.reduce((n,o,i)=>{let r=e[(i+1)%e.length];return n+o.x*r.y-r.x*o.y},0);return Number.isFinite(t)&&t!==0},"Stiffener outline must enclose a nonzero area"),center:Sg().optional(),rotation:Sg().optional(),width:Sg().optional(),height:Sg().optional()});Pt(!0);lrt=nl("shape",[art,crt]).describe("Defines bonded mechanical PCB reinforcement without adding copper layers");Pt(!0);drt=at({type:Be("pcb_panel"),pcb_panel_id:_n("pcb_panel"),width:fe,height:fe,center:ko,thickness:fe.optional().default(1.4),covered_with_solder_mask:Ue().optional().default(!0)}).describe("Defines a PCB panel that can contain multiple boards");Pt(!0);urt=Oa.extend({type:Be("pcb_placement_error"),pcb_placement_error_id:_n("pcb_placement_error"),error_type:Be("pcb_placement_error").default("pcb_placement_error"),subcircuit_id:Z().optional()}).describe("Defines a placement error on the PCB");Pt(!0);hrt=Oa.extend({type:Be("pcb_packing_error"),pcb_packing_error_id:_n("pcb_packing_error"),error_type:Be("pcb_packing_error").default("pcb_packing_error"),pcb_group_id:Z().optional(),subcircuit_id:Z().optional()}).describe("Defines a failure to pack PCB components within layout bounds");Pt(!0);mrt=Oa.extend({type:Be("pcb_panelization_placement_error"),pcb_panelization_placement_error_id:_n("pcb_panelization_placement_error"),error_type:Be("pcb_panelization_placement_error").default("pcb_panelization_placement_error"),pcb_panel_id:Z().optional(),pcb_board_id:Z().optional(),subcircuit_id:Z().optional()}).describe("Defines a panelization placement error on the PCB");Pt(!0);prt=at({type:Be("pcb_trace_hint"),pcb_trace_hint_id:_n("pcb_trace_hint"),pcb_port_id:Z(),pcb_component_id:Z(),route:Qt(M_),subcircuit_id:Z().optional()}).describe("A hint that can be used during generation of a PCB trace");Pt(!0);Art=at({type:Be("pcb_silkscreen_line"),pcb_silkscreen_line_id:_n("pcb_silkscreen_line"),pcb_component_id:Z(),pcb_group_id:Z().optional(),subcircuit_id:Z().optional(),stroke_width:ze.default("0.1mm"),x1:ze,y1:ze,x2:ze,y2:ze,layer:a0}).describe("Defines a silkscreen line on the PCB");Pt(!0);_rt=at({type:Be("pcb_silkscreen_path"),pcb_silkscreen_path_id:_n("pcb_silkscreen_path"),pcb_component_id:Z(),pcb_group_id:Z().optional(),subcircuit_id:Z().optional(),layer:a0,route:Qt(ko),stroke_width:fe}).describe("Defines a silkscreen path on the PCB");Pt(!0);grt=at({type:Be("pcb_silkscreen_text"),pcb_silkscreen_text_id:_n("pcb_silkscreen_text"),pcb_group_id:Z().optional(),subcircuit_id:Z().optional(),font:Be("tscircuit2024").default("tscircuit2024"),font_size:ze.default("0.2mm"),pcb_component_id:Z(),text:Z(),is_knockout:Ue().default(!1).optional(),knockout_padding:at({left:fe,top:fe,bottom:fe,right:fe}).default({left:"0.2mm",top:"0.2mm",bottom:"0.2mm",right:"0.2mm"}).optional(),ccw_rotation:He().optional(),layer:bo,is_mirrored:Ue().default(!1).optional(),anchor_position:ko.default({x:0,y:0}),anchor_alignment:vM.default("center")}).describe("Defines silkscreen text on the PCB");Pt(!0);frt=at({type:Be("pcb_copper_text"),pcb_copper_text_id:_n("pcb_copper_text"),pcb_group_id:Z().optional(),subcircuit_id:Z().optional(),font:Be("tscircuit2024").default("tscircuit2024"),font_size:ze.default("0.2mm"),pcb_component_id:Z(),text:Z(),is_knockout:Ue().default(!1).optional(),knockout_padding:at({left:fe,top:fe,bottom:fe,right:fe}).default({left:"0.2mm",top:"0.2mm",bottom:"0.2mm",right:"0.2mm"}).optional(),ccw_rotation:He().optional(),layer:bo,is_mirrored:Ue().default(!1).optional(),anchor_position:ko.default({x:0,y:0}),anchor_alignment:vM.default("center")}).describe("Defines copper text on the PCB");Pt(!0);yrt=at({type:Be("pcb_silkscreen_rect"),pcb_silkscreen_rect_id:_n("pcb_silkscreen_rect"),pcb_component_id:Z(),pcb_group_id:Z().optional(),subcircuit_id:Z().optional(),center:ko,width:fe,height:fe,layer:bo,stroke_width:fe.default("1mm"),corner_radius:fe.optional(),is_filled:Ue().default(!0).optional(),has_stroke:Ue().optional(),is_stroke_dashed:Ue().optional(),ccw_rotation:He().optional()}).describe("Defines a silkscreen rect on the PCB");Pt(!0);xrt=at({type:Be("pcb_silkscreen_circle"),pcb_silkscreen_circle_id:_n("pcb_silkscreen_circle"),pcb_component_id:Z(),pcb_group_id:Z().optional(),subcircuit_id:Z().optional(),center:ko,radius:fe,layer:a0,stroke_width:fe.default("1mm"),is_filled:Ue().optional()}).describe("Defines a silkscreen circle on the PCB");Pt(!0);Crt=at({type:Be("pcb_silkscreen_oval"),pcb_silkscreen_oval_id:_n("pcb_silkscreen_oval"),pcb_component_id:Z(),pcb_group_id:Z().optional(),subcircuit_id:Z().optional(),center:ko,radius_x:ze,radius_y:ze,layer:a0,ccw_rotation:Ui.optional()}).describe("Defines a silkscreen oval on the PCB");Pt(!0);YQn=at({type:Be("pcb_silkscreen_graphic"),pcb_silkscreen_graphic_id:_n("pcb_silkscreen_graphic"),pcb_component_id:Z(),pcb_group_id:Z().optional(),subcircuit_id:Z().optional(),layer:a0,image_asset:kq.optional()}),Irt=YQn.extend({shape:Be("brep"),brep_shape:Gve}).describe("Defines a BRep silkscreen graphic on the PCB");Pt(!0);brt=nl("shape",[Irt]).describe("Defines a silkscreen graphic on the PCB");Pt(!0);Srt=at({type:Be("pcb_silkscreen_pill"),pcb_silkscreen_pill_id:_n("pcb_silkscreen_pill"),pcb_component_id:Z(),pcb_group_id:Z().optional(),subcircuit_id:Z().optional(),center:ko,width:fe,height:fe,layer:bo,ccw_rotation:He().optional()}).describe("Defines a silkscreen pill on the PCB");Pt(!0);Prt=at({type:Be("pcb_fabrication_note_text"),pcb_fabrication_note_text_id:_n("pcb_fabrication_note_text"),subcircuit_id:Z().optional(),pcb_group_id:Z().optional(),font:Be("tscircuit2024").default("tscircuit2024"),font_size:ze.default("1mm"),pcb_component_id:Z(),text:Z(),ccw_rotation:He().optional(),layer:a0,anchor_position:ko.default({x:0,y:0}),anchor_alignment:Zt(["center","top_left","top_right","bottom_left","bottom_right"]).default("center"),color:Z().optional()}).describe("Defines a fabrication note in text on the PCB, useful for leaving notes for assemblers or fabricators");Pt(!0);vrt=at({type:Be("pcb_fabrication_note_path"),pcb_fabrication_note_path_id:_n("pcb_fabrication_note_path"),pcb_component_id:Z(),subcircuit_id:Z().optional(),layer:bo,route:Qt(ko),stroke_width:fe,color:Z().optional(),is_filled:Ue().optional(),has_stroke:Ue().optional()}).describe("Defines a fabrication path on the PCB for fabricators or assemblers");Pt(!0);Ert=at({type:Be("pcb_fabrication_note_rect"),pcb_fabrication_note_rect_id:_n("pcb_fabrication_note_rect"),pcb_component_id:Z(),pcb_group_id:Z().optional(),subcircuit_id:Z().optional(),center:ko,width:fe,height:fe,layer:a0,stroke_width:fe.default("0.1mm"),corner_radius:fe.optional(),is_filled:Ue().optional(),has_stroke:Ue().optional(),is_stroke_dashed:Ue().optional(),color:Z().optional()}).describe("Defines a fabrication note rectangle on the PCB");Pt(!0);Mrt=at({type:Be("pcb_fabrication_note_dimension"),pcb_fabrication_note_dimension_id:_n("pcb_fabrication_note_dimension"),pcb_component_id:Z(),pcb_group_id:Z().optional(),subcircuit_id:Z().optional(),layer:a0,from:ko,to:ko,text:Z().optional(),text_ccw_rotation:He().optional(),offset:fe.optional(),offset_distance:fe.optional(),offset_direction:at({x:He(),y:He()}).optional(),font:Be("tscircuit2024").default("tscircuit2024"),font_size:fe.default("1mm"),color:Z().optional(),arrow_size:fe.default("1mm")}).describe("Defines a measurement annotation within PCB fabrication notes");Pt(!0);Brt=at({type:Be("pcb_note_text"),pcb_note_text_id:_n("pcb_note_text"),pcb_component_id:Z().optional(),pcb_group_id:Z().optional(),subcircuit_id:Z().optional(),name:Z().optional(),font:Be("tscircuit2024").default("tscircuit2024"),font_size:ze.default("1mm"),text:Z().optional(),anchor_position:ko.default({x:0,y:0}),anchor_alignment:Zt(["center","top_left","top_right","bottom_left","bottom_right"]).default("center"),layer:a0.default("top"),is_mirrored_from_top_view:Ue().optional(),color:Z().optional()}).describe("Defines a documentation note in text on the PCB");Pt(!0);wrt=at({type:Be("pcb_note_rect"),pcb_note_rect_id:_n("pcb_note_rect"),pcb_component_id:Z().optional(),pcb_group_id:Z().optional(),subcircuit_id:Z().optional(),name:Z().optional(),text:Z().optional(),center:ko,width:fe,height:fe,layer:a0.default("top"),stroke_width:fe.default("0.1mm"),corner_radius:fe.optional(),is_filled:Ue().optional(),has_stroke:Ue().optional(),is_stroke_dashed:Ue().optional(),color:Z().optional()}).describe("Defines a rectangular documentation note on the PCB");Pt(!0);Trt=at({type:Be("pcb_note_path"),pcb_note_path_id:_n("pcb_note_path"),pcb_component_id:Z().optional(),pcb_group_id:Z().optional(),subcircuit_id:Z().optional(),name:Z().optional(),text:Z().optional(),route:Qt(ko),layer:a0.default("top"),stroke_width:fe.default("0.1mm"),color:Z().optional()}).describe("Defines a polyline documentation note on the PCB");Pt(!0);Drt=at({type:Be("pcb_note_line"),pcb_note_line_id:_n("pcb_note_line"),pcb_component_id:Z().optional(),pcb_group_id:Z().optional(),subcircuit_id:Z().optional(),name:Z().optional(),text:Z().optional(),x1:ze,y1:ze,x2:ze,y2:ze,layer:a0.default("top"),stroke_width:ze.default("0.1mm"),color:Z().optional(),is_dashed:Ue().optional()}).describe("Defines a straight documentation note line on the PCB");Pt(!0);Nrt=at({type:Be("pcb_note_dimension"),pcb_note_dimension_id:_n("pcb_note_dimension"),pcb_component_id:Z().optional(),pcb_group_id:Z().optional(),subcircuit_id:Z().optional(),name:Z().optional(),from:ko,to:ko,text:Z().optional(),text_ccw_rotation:He().optional(),offset_distance:fe.optional(),offset_direction:at({x:He(),y:He()}).optional(),font:Be("tscircuit2024").default("tscircuit2024"),font_size:fe.default("1mm"),layer:a0.default("top"),color:Z().optional(),arrow_size:fe.default("1mm")}).describe("Defines a measurement annotation within PCB documentation notes");Pt(!0);Rrt=Oa.extend({type:Be("pcb_footprint_overlap_error"),pcb_error_id:_n("pcb_error"),error_type:Be("pcb_footprint_overlap_error").default("pcb_footprint_overlap_error"),pcb_smtpad_ids:Qt(Z()).optional(),pcb_plated_hole_ids:Qt(Z()).optional(),pcb_hole_ids:Qt(Z()).optional(),pcb_keepout_ids:Qt(Z()).optional()}).describe("Error emitted when a pcb footprint overlaps with another element");Pt(!0);Qrt=Oa.extend({type:Be("pcb_courtyard_overlap_error"),pcb_error_id:_n("pcb_error"),error_type:Be("pcb_courtyard_overlap_error").default("pcb_courtyard_overlap_error"),pcb_component_ids:t7([Z(),Z()])}).describe("Error emitted when the courtyard (CrtYd) of one PCB component overlaps with the courtyard of another");Pt(!0);krt=at({type:Be("pcb_keepout"),shape:Be("outline"),pcb_group_id:Z().optional(),subcircuit_id:Z().optional(),outline:Qt(ko).min(2),stroke_width:fe,pcb_keepout_id:Z(),layers:Qt(Z()),description:Z().optional(),excluded_pcb_component_ids:Qt(Z()).optional(),warning_only:Ue().optional(),allow_traces:Ue().optional(),allow_placements:Ue().optional()}),Lrt=at({type:Be("pcb_keepout"),shape:Be("rect"),pcb_group_id:Z().optional(),subcircuit_id:Z().optional(),center:ko,width:ze,height:ze,pcb_keepout_id:Z(),layers:Qt(Z()),description:Z().optional(),excluded_pcb_component_ids:Qt(Z()).optional(),warning_only:Ue().optional(),allow_traces:Ue().optional(),allow_placements:Ue().optional()}).or(at({type:Be("pcb_keepout"),shape:Be("circle"),pcb_group_id:Z().optional(),subcircuit_id:Z().optional(),center:ko,radius:ze,pcb_keepout_id:Z(),layers:Qt(Z()),description:Z().optional(),excluded_pcb_component_ids:Qt(Z()).optional(),warning_only:Ue().optional(),allow_traces:Ue().optional(),allow_placements:Ue().optional()})).or(krt);Pt(!0);Pt(!0);Frt=at({type:Be("pcb_keepout_overlap_warning"),pcb_keepout_overlap_warning_id:_n("pcb_keepout_overlap_warning"),warning_type:Be("pcb_keepout_overlap_warning").default("pcb_keepout_overlap_warning"),message:Z(),pcb_keepout_id:Z(),pcb_component_ids:Qt(Z()).optional(),pcb_trace_ids:Qt(Z()).optional(),pcb_smtpad_ids:Qt(Z()).optional(),pcb_plated_hole_ids:Qt(Z()).optional(),pcb_via_ids:Qt(Z()).optional(),center:ko.optional(),subcircuit_id:Z().optional()}).describe("Warning emitted when copper overlaps a PCB keepout with warning_only enabled");Pt(!0);Nce=at({type:Be("pcb_cutout"),pcb_cutout_id:_n("pcb_cutout"),pcb_component_id:Z().optional(),pcb_group_id:Z().optional(),subcircuit_id:Z().optional(),pcb_board_id:Z().optional(),pcb_panel_id:Z().optional()}),Hrt=Nce.extend({shape:Be("rect"),center:ko,width:fe,height:fe,rotation:Ui.optional(),corner_radius:fe.optional()});Pt(!0);Ort=Nce.extend({shape:Be("circle"),center:ko,radius:fe});Pt(!0);zrt=Nce.extend({shape:Be("polygon"),points:Qt(ko)});Pt(!0);Grt=Nce.extend({shape:Be("path"),route:Qt(ko),slot_width:fe,slot_length:fe.optional(),space_between_slots:fe.optional(),slot_corner_radius:fe.optional()});Pt(!0);Yrt=nl("shape",[Hrt,Ort,zrt,Grt]).describe("Defines a cutout on the PCB, removing board material.");Pt(!0);Vrt=Oa.extend({type:Be("pcb_missing_footprint_error"),pcb_missing_footprint_error_id:_n("pcb_missing_footprint_error"),pcb_group_id:Z().optional(),subcircuit_id:Z().optional(),error_type:Be("pcb_missing_footprint_error").default("pcb_missing_footprint_error"),source_component_id:Z()}).describe("Defines a missing footprint error on the PCB");Pt(!0);Az=Oa.extend({type:Be("external_footprint_load_error"),external_footprint_load_error_id:_n("external_footprint_load_error"),pcb_component_id:Z(),source_component_id:Z(),pcb_group_id:Z().optional(),subcircuit_id:Z().optional(),footprinter_string:Z().optional(),error_type:Be("external_footprint_load_error").default("external_footprint_load_error")}).describe("Defines an error when an external footprint fails to load");Pt(!0);Rce=Oa.extend({type:Be("circuit_json_footprint_load_error"),circuit_json_footprint_load_error_id:_n("circuit_json_footprint_load_error"),pcb_component_id:Z(),source_component_id:Z(),pcb_group_id:Z().optional(),subcircuit_id:Z().optional(),error_type:Be("circuit_json_footprint_load_error").default("circuit_json_footprint_load_error"),circuit_json:Qt(_h()).optional()}).describe("Defines an error when a circuit JSON footprint fails to load");Pt(!0);Urt=at({type:Be("pcb_group"),pcb_group_id:_n("pcb_group"),source_group_id:Z(),is_subcircuit:Ue().optional(),subcircuit_id:Z().optional(),width:fe.optional(),height:fe.optional(),center:ko,display_offset_x:Z().optional().describe("How to display the x offset for this group, usually corresponding with how the user specified it"),display_offset_y:Z().optional().describe("How to display the y offset for this group, usually corresponding with how the user specified it"),outline:Qt(ko).optional(),anchor_position:ko.optional(),anchor_alignment:vM.default("center"),position_mode:Zt(["packed","relative_to_group_anchor","none"]).optional(),positioned_relative_to_pcb_group_id:Z().optional(),positioned_relative_to_pcb_board_id:Z().optional(),pcb_component_ids:Qt(Z()),child_layout_mode:Zt(["packed","none"]).optional(),name:Z().optional(),description:Z().optional(),layout_mode:Z().optional(),autorouter_configuration:at({trace_clearance:fe}).optional(),autorouter_used_string:Z().optional()}).describe("Defines a group of components on the PCB");Pt(!0);Wrt=Oa.extend({type:Be("pcb_autorouting_error"),pcb_error_id:_n("pcb_autorouting_error"),error_type:Be("pcb_autorouting_error").default("pcb_autorouting_error"),subcircuit_id:Z().optional()}).describe("The autorouting has failed to route a portion of the board");Pt(!0);Xrt=Oa.extend({type:Be("pcb_preflight_routing_error"),pcb_preflight_routing_error_id:_n("pcb_preflight_routing_error"),error_type:Be("pcb_preflight_routing_error").default("pcb_preflight_routing_error"),error_code:Z(),subcircuit_id:Z().optional(),pcb_group_id:Z().optional(),routing_phase_index:He().int().optional(),phase_name:Z().optional(),source_trace_ids:Qt(Z()).optional(),pcb_component_ids:Qt(Z()).optional(),pcb_port_ids:Qt(Z()).optional(),related_error_ids:Qt(Z()).optional(),measurements:Fa(He().finite()).optional()});Pt(!0);Qce=at({type:Be("pcb_manual_edit_conflict_warning"),pcb_manual_edit_conflict_warning_id:_n("pcb_manual_edit_conflict_warning"),warning_type:Be("pcb_manual_edit_conflict_warning").default("pcb_manual_edit_conflict_warning"),message:Z(),pcb_component_id:Z(),pcb_group_id:Z().optional(),subcircuit_id:Z().optional(),source_component_id:Z()}).describe("Warning emitted when a component has both manual placement and explicit pcbX/pcbY coordinates");Pt(!0);Hnt=Zt(["x-","x+","y+","y-"]),Krt=at({type:Be("pcb_connector_not_in_accessible_orientation_warning"),pcb_connector_not_in_accessible_orientation_warning_id:_n("pcb_connector_not_in_accessible_orientation_warning"),warning_type:Be("pcb_connector_not_in_accessible_orientation_warning").default("pcb_connector_not_in_accessible_orientation_warning"),message:Z(),pcb_component_id:Z(),source_component_id:Z().optional(),pcb_board_id:Z().optional(),facing_direction:Hnt,recommended_facing_direction:Hnt,subcircuit_id:Z().optional()}).describe("Warning emitted when a connector PCB component is facing inward toward the board and should be reoriented to an outward-facing direction");Pt(!0);jrt=at({type:Be("pcb_component_missing_courtyard_warning"),pcb_component_missing_courtyard_warning_id:_n("pcb_component_missing_courtyard_warning"),warning_type:Be("pcb_component_missing_courtyard_warning").default("pcb_component_missing_courtyard_warning"),message:Z(),pcb_component_id:Z(),source_component_id:Z().optional(),subcircuit_id:Z().optional()}).describe("Warning emitted when a PCB component has no courtyard geometry");Pt(!0);kce=at({type:Be("supplier_footprint_mismatch_warning"),supplier_footprint_mismatch_warning_id:_n("supplier_footprint_mismatch_warning"),warning_type:Be("supplier_footprint_mismatch_warning").default("supplier_footprint_mismatch_warning"),message:Z(),source_component_id:Z(),pcb_component_id:Z().optional(),pcb_group_id:Z().optional(),subcircuit_id:Z().optional(),supplier_name:Dv.optional(),supplier_part_number:Z().optional(),supplier_footprint_url:Z().optional(),footprint_copper_intersection_over_union:He()}).describe("Warning emitted when a supplier part footprint does not match the expected footprint");Pt(!0);qrt=at({type:Be("pcb_fabricator_extra_charge_warning"),pcb_fabricator_extra_charge_warning_id:_n("pcb_fabricator_extra_charge_warning"),warning_type:Be("pcb_fabricator_extra_charge_warning").default("pcb_fabricator_extra_charge_warning"),message:Z(),fabricator_preset:Z(),pcb_board_id:Z().optional(),pcb_via_ids:Qt(Z()).optional(),subcircuit_id:Z().optional()}).describe("Warning that a design feature incurs an extra charge for the selected fabricator preset, such as via hole diameters below 0.3 mm with JLCPCB economy or standard presets.");Pt(!0);Jrt=at({type:Be("pcb_breakout_point"),pcb_breakout_point_id:_n("pcb_breakout_point"),pcb_group_id:Z(),subcircuit_id:Z().optional(),source_trace_id:Z().optional(),source_port_id:Z().optional(),source_net_id:Z().optional(),layer:bo.optional(),x:ze,y:ze}).describe("Defines a routing target within a pcb_group for a source_trace or source_net");Pt(!0);$rt=at({type:Be("pcb_ground_plane"),pcb_ground_plane_id:_n("pcb_ground_plane"),source_pcb_ground_plane_id:Z(),source_net_id:Z(),pcb_group_id:Z().optional(),subcircuit_id:Z().optional()}).describe("Defines a ground plane on the PCB");Pt(!0);Zrt=at({type:Be("pcb_ground_plane_region"),pcb_ground_plane_region_id:_n("pcb_ground_plane_region"),pcb_ground_plane_id:Z(),pcb_group_id:Z().optional(),subcircuit_id:Z().optional(),layer:bo,points:Qt(ko)}).describe("Defines a polygon region of a ground plane");Pt(!0);est=at({type:Be("pcb_thermal_spoke"),pcb_thermal_spoke_id:_n("pcb_thermal_spoke"),pcb_ground_plane_id:Z(),shape:Z(),spoke_count:He(),spoke_thickness:ze,spoke_inner_diameter:ze,spoke_outer_diameter:ze,pcb_plated_hole_id:Z().optional(),subcircuit_id:Z().optional()}).describe("Pattern for connecting a ground plane to a plated hole");Pt(!0);Yve=at({type:Be("pcb_copper_pour"),pcb_copper_pour_id:_n("pcb_copper_pour"),pcb_group_id:Z().optional(),subcircuit_id:Z().optional(),layer:bo,source_net_id:Z().optional(),covered_with_solder_mask:Ue().optional().default(!0)}),tst=Yve.extend({shape:Be("rect"),center:ko,width:fe,height:fe,rotation:Ui.optional()});Pt(!0);nst=Yve.extend({shape:Be("brep"),brep_shape:Gve});Pt(!0);ost=Yve.extend({shape:Be("polygon"),points:Qt(ko)});Pt(!0);ist=nl("shape",[tst,nst,ost]).describe("Defines a copper pour on the PCB.");Pt(!0);rst=Oa.extend({type:Be("pcb_component_outside_board_error"),pcb_component_outside_board_error_id:_n("pcb_component_outside_board_error"),error_type:Be("pcb_component_outside_board_error").default("pcb_component_outside_board_error"),pcb_component_id:Z(),pcb_board_id:Z(),component_center:ko,component_bounds:at({min_x:He(),max_x:He(),min_y:He(),max_y:He()}),subcircuit_id:Z().optional(),source_component_id:Z().optional()}).describe("Error emitted when a PCB component is placed outside the board boundaries");Pt(!0);sst=Oa.extend({type:Be("pcb_component_not_on_board_edge_error"),pcb_component_not_on_board_edge_error_id:_n("pcb_component_not_on_board_edge_error"),error_type:Be("pcb_component_not_on_board_edge_error").default("pcb_component_not_on_board_edge_error"),pcb_component_id:Z(),pcb_board_id:Z(),component_center:ko,pad_to_nearest_board_edge_distance:He(),source_component_id:Z().optional(),subcircuit_id:Z().optional()}).describe("Error emitted when a component that must be placed on the board edge is centered away from the edge");Pt(!0);_z=Oa.extend({type:Be("pcb_component_invalid_layer_error"),pcb_component_invalid_layer_error_id:_n("pcb_component_invalid_layer_error"),error_type:Be("pcb_component_invalid_layer_error").default("pcb_component_invalid_layer_error"),pcb_component_id:Z().optional(),source_component_id:Z(),layer:bo,subcircuit_id:Z().optional()}).describe("Error emitted when a component is placed on an invalid layer (components can only be on 'top' or 'bottom' layers)");Pt(!0);ast=Oa.extend({type:Be("pcb_via_clearance_error"),pcb_error_id:_n("pcb_error"),error_type:Be("pcb_via_clearance_error").default("pcb_via_clearance_error"),pcb_via_ids:Qt(Z()).min(2),minimum_clearance:ze.optional(),actual_clearance:ze.optional(),pcb_center:at({x:He().optional(),y:He().optional()}).optional(),subcircuit_id:Z().optional()}).describe("Error emitted when vias are closer than the allowed clearance");Pt(!0);cst=Oa.extend({type:Be("pcb_via_trace_clearance_error"),pcb_via_trace_clearance_error_id:_n("pcb_via_trace_clearance_error"),error_type:Be("pcb_via_trace_clearance_error").default("pcb_via_trace_clearance_error"),pcb_via_id:Z(),pcb_trace_id:Z(),minimum_clearance:ze.optional(),actual_clearance:ze.optional(),center:at({x:He().optional(),y:He().optional()}).optional(),subcircuit_id:Z().optional()}).describe("Error emitted when a via and trace are closer than the allowed clearance");Pt(!0);lst=Oa.extend({type:Be("pcb_pad_pad_clearance_error"),pcb_pad_pad_clearance_error_id:_n("pcb_pad_pad_clearance_error"),error_type:Be("pcb_pad_pad_clearance_error").default("pcb_pad_pad_clearance_error"),pcb_pad_ids:Qt(Z()).min(2),minimum_clearance:ze.optional(),actual_clearance:ze.optional(),center:at({x:He().optional(),y:He().optional()}).optional(),subcircuit_id:Z().optional()}).describe("Error emitted when pads are closer than the allowed clearance");Pt(!0);dst=Oa.extend({type:Be("pcb_pad_trace_clearance_error"),pcb_pad_trace_clearance_error_id:_n("pcb_pad_trace_clearance_error"),error_type:Be("pcb_pad_trace_clearance_error").default("pcb_pad_trace_clearance_error"),pcb_pad_id:Z(),pcb_trace_id:Z(),minimum_clearance:ze.optional(),actual_clearance:ze.optional(),center:at({x:He().optional(),y:He().optional()}).optional(),subcircuit_id:Z().optional()}).describe("Error emitted when a pad and trace are closer than allowed clearance");Pt(!0);ust=at({type:Be("pcb_courtyard_rect"),pcb_courtyard_rect_id:_n("pcb_courtyard_rect"),pcb_component_id:Z(),pcb_group_id:Z().optional(),subcircuit_id:Z().optional(),center:ko,width:fe,height:fe,layer:a0,ccw_rotation:Ui.optional(),color:Z().optional()}).describe("Defines a courtyard rectangle on the PCB");Pt(!0);hst=at({type:Be("pcb_courtyard_outline"),pcb_courtyard_outline_id:_n("pcb_courtyard_outline"),pcb_component_id:Z(),pcb_group_id:Z().optional(),subcircuit_id:Z().optional(),layer:a0,outline:Qt(ko).min(2)}).describe("Defines a courtyard outline on the PCB");Pt(!0);mst=at({type:Be("pcb_courtyard_polygon"),pcb_courtyard_polygon_id:_n("pcb_courtyard_polygon"),pcb_component_id:Z(),pcb_group_id:Z().optional(),subcircuit_id:Z().optional(),layer:a0,points:Qt(ko).min(3),color:Z().optional()}).describe("Defines a courtyard polygon on the PCB");Pt(!0);pst=at({type:Be("pcb_courtyard_circle"),pcb_courtyard_circle_id:_n("pcb_courtyard_circle"),pcb_component_id:Z(),pcb_group_id:Z().optional(),subcircuit_id:Z().optional(),center:ko,radius:fe,layer:a0,color:Z().optional()}).describe("Defines a courtyard circle on the PCB");Pt(!0);Ast=at({type:Be("pcb_courtyard_pill"),pcb_courtyard_pill_id:_n("pcb_courtyard_pill"),pcb_component_id:Z(),pcb_group_id:Z().optional(),subcircuit_id:Z().optional(),center:ko,width:fe,height:fe,radius:fe,layer:a0,color:Z().optional()}).describe("Defines a courtyard pill on the PCB");Pt(!0);VQn=["obj","stl","3mf","gltf","glb","step","wrl"],_st=["x+","x-","y+","y-","z+","z-"],UQn={obj:"z+",stl:"z+","3mf":"z+",gltf:"y+",glb:"y+",step:"z+",wrl:"y+"},gst=at({type:Be("cad_component"),cad_component_id:Z(),pcb_component_id:Z().optional().describe("Optional PCB component reference; omit for CAD geometry without a PCB component"),source_component_id:Z(),position:sy,rotation:sy.optional(),is_on_folded_board:Ue().optional().describe("True when position and rotation describe the assembled folded board pose. False or omitted means the flat board pose. PCB records remain flat; pcb_component_id identifies the flat mount and owning board for reversible transforms."),size:sy.optional(),layer:bo.optional(),subcircuit_id:Z().optional(),footprinter_string:Z().optional(),model_obj_url:Z().optional(),model_stl_url:Z().optional(),model_3mf_url:Z().optional(),model_gltf_url:Z().optional(),model_glb_url:Z().optional(),model_step_url:Z().optional(),model_wrl_url:Z().optional(),model_asset:kq.optional(),model_unit_to_mm_scale_factor:He().optional(),model_board_normal_direction:Zt(_st).optional().describe(`The direction in the model's coordinate space that is considered "up" or "coming out of the board surface"`),model_origin_position:sy.optional(),model_origin_alignment:Zt(["unknown","center","center_of_component_on_board_surface","bottom_center_of_component"]).optional(),model_object_fit:Zt(["contain_within_bounds","fill_bounds"]).optional().default("contain_within_bounds"),model_jscad:_h().optional(),color:Z().trim().min(1).optional().describe("Explicit color override for CAD geometry, including authored JSCAD material colors. Omit to preserve model materials."),show_as_translucent_model:Ue().optional(),show_as_bounding_box:Ue().optional(),show_hidden_edges:Ue().optional(),anchor_alignment:Zt(["center","center_of_component_on_board_surface"]).optional().default("center")}).describe("Defines CAD geometry, optionally associated with a PCB component");Pt(!0);fst=Oa.extend({type:Be("cad_collision_error"),cad_collision_error_id:_n("cad_collision_error"),error_type:Be("cad_collision_error").default("cad_collision_error"),cad_component_ids:Qt(Z()).min(1),pcb_component_ids:Qt(Z()).optional(),source_component_ids:Qt(Z()).min(1),intersection_area_mm2:He().finite().nonnegative(),threshold_area_mm2:He().finite().nonnegative()}).describe("An aperture-bearing part intersects the finished enclosure. The intersection_area_mm2 is the union silhouette area of the solid intersection projected along the aperture face normal, in the right-handed Circuit JSON world frame (+X right, +Y top, +Z above). It is an area in square millimetres, not intersection volume or surface area. This indicates possible aperture misplacement, insufficient size/depth, or body clearance problems; it does not prove which cause applies.");Pt(!0);Ont=sy.refine((e)=>[e.x,e.y,e.z].every(Number.isFinite),"Connector pin 1 positions must be finite").describe("Resolved pin 1 position at the connector mating face, in right-handed circuit world, millimeters: +X right, +Y top, +Z above. An absolute point, not a direction. Computed by the circuit producer from endpoint geometry. Together with the endpoint path tangent, fixes connector roll and identifies its pin 1 side; renderers must not infer it from footprints."),yst=at({type:Be("cad_cable"),cad_cable_id:Z(),name:Z().min(1),from_source_component_id:Z(),to_source_component_id:Z(),from_connector_pin1_position:Ont.optional(),to_connector_pin1_position:Ont.optional(),cableprinter_string:Z().min(1).describe('Physical cable definition, e.g. "usb_c" or "jst_ph_pins6". Independent of the route.'),path:Qt(sy).min(2).refine((e)=>e.every((t,n)=>[t.x,t.y,t.z].every(Number.isFinite)&&(n===0||Math.hypot(t.x-e[n-1].x,t.y-e[n-1].y,t.z-e[n-1].z)>0.00000001)),"Cable paths require finite, distinct consecutive points").describe("Resolved cable centerline points in right-handed circuit world, millimeters: +X right, +Y top, +Z above. First/last samples are connector wire exits; their tangents point into/out of the cable. Includes routing/slack; renderers must not recompute the path.")}).describe("A physical assembly cable with a resolved 3D route. Several cables are independent cad_cable records, each with its own endpoints, definition and path. Does not imply electrical pin mapping.");Pt(!0);znt=at({x:He().finite(),y:He().finite(),z:He().finite()}).refine((e)=>Math.abs(Math.hypot(e.x,e.y,e.z)-1)<=xst,"Reference surface directions must be unit vectors"),Gnt=ze.pipe(He().finite().positive()),Cst=at({type:Be("cad_reference_surface"),cad_reference_surface_id:Z().min(1),source_component_id:Z().min(1).describe("Owning assembly part's source component ID. The part may have no CAD geometry."),name:Z().trim().min(1).describe("Reference name, unique within the owning part, e.g. shade in STEM.shade."),shape:Be("rect"),center:sy.refine((e)=>[e.x,e.y,e.z].every(Number.isFinite),"Reference surface centers must be finite").describe("Resolved surface center in right-handed circuit-world XYZ, millimeters: +X right, +Y top, +Z above. An absolute point after assembly placement."),normal:znt.describe("Outward unit normal in circuit-world XYZ. Dimensionless direction; transform with the part's rotation, without translation."),x_axis:znt.describe("In-plane unit X direction in circuit-world XYZ, perpendicular to normal. The second tangent is normal cross x_axis, giving a right-handed frame."),width:Gnt.optional().describe("Rectangular extent along x_axis in millimeters. Supply together with height. Omission leaves the surface's display size unspecified."),height:Gnt.optional().describe("Rectangular extent along normal cross x_axis in millimeters. Supply together with width."),subcircuit_id:Z().optional()}).superRefine((e,t)=>{if(e.width===void 0!==(e.height===void 0))t.addIssue({code:jt.custom,path:["width"],message:"Provide width and height together"});let{normal:n,x_axis:o}=e;if(Math.abs(n.x*o.x+n.y*o.y+n.z*o.z)>xst)t.addIssue({code:jt.custom,path:["x_axis"],message:"x_axis must be perpendicular to normal"})}).describe("A named assembly mounting surface with a resolved world-space frame. Reference geometry for optional visualization; does not add solid material or electrical connectivity. The producer resolves part placement independently of CAD-model offsets; renderers consume the world frame without reapplying the owning model's transform.");Pt(!0);Vve=Zt(["sinewave","square","triangle","sawtooth"]),WQn=kn([Z(),He()]).transform((e)=>{if(typeof e==="string"){if(e.endsWith("%"))return parseFloat(e.slice(0,-1))/100;return parseFloat(e)}return e}).pipe(He().min(0,"Duty cycle must be non-negative").max(1,"Duty cycle cannot be greater than 100%")),Ist=at({type:Be("simulation_voltage_source"),simulation_voltage_source_id:_n("simulation_voltage_source"),is_dc_source:Be(!0).optional().default(!0),positive_source_port_id:Z().optional(),negative_source_port_id:Z().optional(),positive_source_net_id:Z().optional(),negative_source_net_id:Z().optional(),voltage:xl,ac_magnitude:xl.optional(),ac_phase:Ui.optional()}).describe("Defines a DC voltage source for simulation"),bst=at({type:Be("simulation_voltage_source"),simulation_voltage_source_id:_n("simulation_voltage_source"),is_dc_source:Be(!1),terminal1_source_port_id:Z().optional(),terminal2_source_port_id:Z().optional(),terminal1_source_net_id:Z().optional(),terminal2_source_net_id:Z().optional(),voltage:xl.optional(),frequency:s0.optional(),peak_to_peak_voltage:xl.optional(),wave_shape:Vve.optional(),phase:Ui.optional(),duty_cycle:WQn.optional(),pulse_delay:Ha.optional(),rise_time:Ha.optional(),fall_time:Ha.optional(),pulse_width:Ha.optional(),period:Ha.optional(),ac_magnitude:xl.optional(),ac_phase:Ui.optional()}).describe("Defines an AC voltage source for simulation"),Sst=kn([Ist,bst]).describe("Defines a voltage source for simulation");Pt(!0);Pt(!0);Pt(!0);XQn=kn([Z(),He()]).transform((e)=>{if(typeof e==="string"){if(e.endsWith("%"))return parseFloat(e.slice(0,-1))/100;return parseFloat(e)}return e}).pipe(He().min(0,"Duty cycle must be non-negative").max(1,"Duty cycle cannot be greater than 100%")),Pst=at({type:Be("simulation_current_source"),simulation_current_source_id:_n("simulation_current_source"),is_dc_source:Be(!0).optional().default(!0),positive_source_port_id:Z().optional(),negative_source_port_id:Z().optional(),positive_source_net_id:Z().optional(),negative_source_net_id:Z().optional(),current:Pg,ac_magnitude:Pg.optional(),ac_phase:Ui.optional()}).describe("Defines a DC current source for simulation"),vst=at({type:Be("simulation_current_source"),simulation_current_source_id:_n("simulation_current_source"),is_dc_source:Be(!1),terminal1_source_port_id:Z().optional(),terminal2_source_port_id:Z().optional(),terminal1_source_net_id:Z().optional(),terminal2_source_net_id:Z().optional(),current:Pg.optional(),frequency:s0.optional(),peak_to_peak_current:Pg.optional(),wave_shape:Vve.optional(),phase:Ui.optional(),duty_cycle:XQn.optional(),ac_magnitude:Pg.optional(),ac_phase:Ui.optional()}).describe("Defines an AC current source for simulation"),Est=kn([Pst,vst]).describe("Defines a current source for simulation");Pt(!0);Pt(!0);Pt(!0);Lce=dc((e)=>e==="V"||e==="A"),Uve=dc((e)=>e==="Ω"||e==="F"||e==="H"||e==="V"||e==="A"),Mst=kn([Be("spice_dc_sweep"),Be("spice_dc_operating_point"),Be("spice_transient_analysis"),Be("spice_ac_analysis"),Be("pcb_return_current")]),Bst=at({method:Zt(["trap","gear"]).optional(),reltol:kn([He(),Z()]).optional(),abstol:kn([He(),Z()]).optional(),vntol:kn([He(),Z()]).optional()}).describe("SPICE solver options for a simulation experiment"),wst=at({type:Be("simulation_experiment"),simulation_experiment_id:_n("simulation_experiment"),name:Z(),experiment_type:Mst,time_per_step:mz.optional(),start_time_ms:Ha.optional(),end_time_ms:Ha.optional(),spice_options:Bst.optional(),dc_sweep_voltage_source_id:Z().optional(),dc_sweep_current_source_id:Z().optional(),dc_sweep_start:He().optional(),dc_sweep_stop:He().optional(),dc_sweep_step:He().refine((e)=>e!==0).optional(),dc_sweep_unit:Lce.optional(),ac_sweep_type:Zt(["linear","decade","octave"]).optional(),ac_samples_per_interval:He().int().positive().optional(),ac_sample_count:He().int().positive().optional(),ac_start_frequency_hz:He().positive().optional(),ac_stop_frequency_hz:He().positive().optional()}).superRefine((e,t)=>{if(e.experiment_type==="spice_dc_sweep"){let n=["dc_sweep_start","dc_sweep_stop","dc_sweep_step","dc_sweep_unit"];for(let r of n)if(e[r]===void 0)t.addIssue({code:jt.custom,path:[r],message:`${r} is required for a DC sweep`});let o=e.dc_sweep_voltage_source_id!==void 0,i=e.dc_sweep_current_source_id!==void 0;if(o===i)t.addIssue({code:jt.custom,path:["dc_sweep_voltage_source_id"],message:"Exactly one DC sweep voltage or current source ID is required"})}if(e.experiment_type==="spice_ac_analysis"){if(e.ac_sweep_type===void 0)t.addIssue({code:jt.custom,path:["ac_sweep_type"],message:"ac_sweep_type is required for an AC analysis"});if(e.ac_start_frequency_hz===void 0)t.addIssue({code:jt.custom,path:["ac_start_frequency_hz"],message:"ac_start_frequency_hz is required for an AC analysis"});if(e.ac_stop_frequency_hz===void 0)t.addIssue({code:jt.custom,path:["ac_stop_frequency_hz"],message:"ac_stop_frequency_hz is required for an AC analysis"});if(e.ac_sweep_type==="linear"&&e.ac_sample_count===void 0)t.addIssue({code:jt.custom,path:["ac_sample_count"],message:"ac_sample_count is required for a linear AC analysis"});if((e.ac_sweep_type==="decade"||e.ac_sweep_type==="octave")&&e.ac_samples_per_interval===void 0)t.addIssue({code:jt.custom,path:["ac_samples_per_interval"],message:"ac_samples_per_interval is required for decade and octave AC analyses"})}}).describe("Defines a simulation experiment configuration");Pt(!0);MM=at({simulation_parameter_sweep_id:Z(),sweep_index:He().int().nonnegative(),parameter_value:He(),parameter_unit:Uve});Pt(!0);Tst=at({type:Be("simulation_transient_voltage_graph"),simulation_transient_voltage_graph_id:_n("simulation_transient_voltage_graph"),simulation_experiment_id:Z(),simulation_parameter_sweep_coordinate:MM.optional(),timestamps_ms:Qt(He()).optional(),voltage_levels:Qt(He()),source_component_id:Z().optional(),subcircuit_connectivity_map_key:Z().optional(),time_per_step:mz,start_time_ms:Ha,end_time_ms:Ha,name:Z().optional(),color:Z().optional()}).describe("Stores voltage measurements over time for a simulation");Pt(!0);Dst=at({type:Be("simulation_transient_current_graph"),simulation_transient_current_graph_id:_n("simulation_transient_current_graph"),simulation_experiment_id:Z(),simulation_parameter_sweep_coordinate:MM.optional(),timestamps_ms:Qt(He()).optional(),current_levels:Qt(He()),source_component_id:Z().optional(),subcircuit_connectivity_map_key:Z().optional(),time_per_step:mz,start_time_ms:Ha,end_time_ms:Ha,name:Z().optional(),color:Z().optional()}).describe("Stores current measurements over time for a simulation");Pt(!0);Nst=at({type:Be("simulation_switch"),simulation_switch_id:_n("simulation_switch"),source_component_id:Z().optional(),closes_at:Ha.optional(),opens_at:Ha.optional(),starts_closed:Ue().optional(),switching_frequency:s0.optional()}).describe("Defines a switch for simulation timing control");Pt(!0);Rst=at({type:Be("simulation_voltage_probe"),simulation_voltage_probe_id:_n("simulation_voltage_probe"),source_component_id:Z().optional(),name:Z().optional(),signal_input_source_port_id:Z().optional(),signal_input_source_net_id:Z().optional(),reference_input_source_port_id:Z().optional(),reference_input_source_net_id:Z().optional(),subcircuit_id:Z().optional(),color:Z().optional()}).describe("Defines a voltage probe for simulation. If a reference input is not provided, it measures against ground. If a reference input is provided, it measures the differential voltage between two points.").superRefine((e,t)=>{if(e.reference_input_source_port_id||e.reference_input_source_net_id){let o=!!e.signal_input_source_port_id||!!e.reference_input_source_port_id,i=!!e.signal_input_source_net_id||!!e.reference_input_source_net_id;if(o&&i)t.addIssue({code:jt.custom,message:"Cannot mix port and net connections in a differential probe."});else if(o){if(!e.signal_input_source_port_id||!e.reference_input_source_port_id)t.addIssue({code:jt.custom,message:"Differential port probe requires both signal_input_source_port_id and reference_input_source_port_id."})}else if(i){if(!e.signal_input_source_net_id||!e.reference_input_source_net_id)t.addIssue({code:jt.custom,message:"Differential net probe requires both signal_input_source_net_id and reference_input_source_net_id."})}}else if(!!e.signal_input_source_port_id===!!e.signal_input_source_net_id)t.addIssue({code:jt.custom,message:"A voltage probe must have exactly one of signal_input_source_port_id or signal_input_source_net_id."})});Pt(!0);Qst=at({type:Be("simulation_current_probe"),simulation_current_probe_id:_n("simulation_current_probe"),source_component_id:Z().optional(),name:Z().optional(),positive_source_port_id:Z().optional(),negative_source_port_id:Z().optional(),positive_source_net_id:Z().optional(),negative_source_net_id:Z().optional(),subcircuit_id:Z().optional(),color:Z().optional()}).describe("Defines a current probe for simulation. It measures current flowing from the positive endpoint to the negative endpoint.").superRefine((e,t)=>{let n=!!e.positive_source_port_id,o=!!e.negative_source_port_id,i=!!e.positive_source_net_id,r=!!e.negative_source_net_id,s=n||o,a=i||r;if(s&&a){t.addIssue({code:jt.custom,message:"Cannot mix port and net connections in a current probe."});return}if(s){if(!n||!o)t.addIssue({code:jt.custom,message:"Current probe using source ports requires both positive_source_port_id and negative_source_port_id."});return}if(a){if(!i||!r)t.addIssue({code:jt.custom,message:"Current probe using source nets requires both positive_source_net_id and negative_source_net_id."});return}t.addIssue({code:jt.custom,message:"A current probe must have either positive/negative source port ids or positive/negative source net ids."})});Pt(!0);kst=Oa.extend({type:Be("simulation_unknown_experiment_error"),simulation_unknown_experiment_error_id:_n("simulation_unknown_experiment_error"),error_type:Be("simulation_unknown_experiment_error").default("simulation_unknown_experiment_error"),simulation_experiment_id:Z().optional(),subcircuit_id:Z().optional()}).describe("An unknown error occurred during the simulation experiment.");Pt(!0);KQn=Zt(["resistance","capacitance","inductance","voltage","current"]),Nq=at({type:Be("simulation_parameter_sweep"),simulation_parameter_sweep_id:_n("simulation_parameter_sweep"),simulation_experiment_id:Z(),name:Z().optional(),parameter_values:Qt(He()).min(1),parameter_unit:Uve}),Lst=nl("parameter_type",[Nq.extend({parameter_type:Be("resistance"),resistor_source_component_id:Z()}),Nq.extend({parameter_type:Be("capacitance"),capacitor_source_component_id:Z()}),Nq.extend({parameter_type:Be("inductance"),inductor_source_component_id:Z()}),Nq.extend({parameter_type:Be("voltage"),source_net_id:Z()}),Nq.extend({parameter_type:Be("current"),current_source_component_id:Z()})]).describe("Repeats a simulation experiment over component parameter values");Pt(!0);Fst=at({type:Be("simulation_dc_operating_point_voltage"),simulation_dc_operating_point_voltage_id:_n("simulation_dc_operating_point_voltage"),simulation_experiment_id:Z(),simulation_parameter_sweep_coordinate:MM.optional(),simulation_voltage_probe_id:Z(),voltage:He(),name:Z().optional(),color:Z().optional()});Pt(!0);Hst=at({type:Be("simulation_dc_operating_point_current"),simulation_dc_operating_point_current_id:_n("simulation_dc_operating_point_current"),simulation_experiment_id:Z(),simulation_parameter_sweep_coordinate:MM.optional(),simulation_current_probe_id:Z(),current:He(),name:Z().optional(),color:Z().optional()});Pt(!0);Ost=at({type:Be("simulation_dc_sweep_voltage_graph"),simulation_dc_sweep_voltage_graph_id:_n("simulation_dc_sweep_voltage_graph"),simulation_experiment_id:Z(),simulation_parameter_sweep_coordinate:MM.optional(),simulation_voltage_probe_id:Z(),sweep_values:Qt(He()),sweep_unit:Lce,voltage_levels:Qt(He()),name:Z().optional(),color:Z().optional()}).refine((e)=>e.sweep_values.length===e.voltage_levels.length,{message:"sweep_values and voltage_levels must have the same length"});Pt(!0);zst=at({type:Be("simulation_dc_sweep_current_graph"),simulation_dc_sweep_current_graph_id:_n("simulation_dc_sweep_current_graph"),simulation_experiment_id:Z(),simulation_parameter_sweep_coordinate:MM.optional(),simulation_current_probe_id:Z(),sweep_values:Qt(He()),sweep_unit:Lce,current_levels:Qt(He()),name:Z().optional(),color:Z().optional()}).refine((e)=>e.sweep_values.length===e.current_levels.length,{message:"sweep_values and current_levels must have the same length"});Pt(!0);Wve=at({re:He(),im:He()});Pt(!0);Gst=at({type:Be("simulation_ac_sweep_voltage_graph"),simulation_ac_sweep_voltage_graph_id:_n("simulation_ac_sweep_voltage_graph"),simulation_experiment_id:Z(),simulation_parameter_sweep_coordinate:MM.optional(),simulation_voltage_probe_id:Z(),frequencies_hz:Qt(He()),complex_voltages:Qt(Wve),name:Z().optional(),color:Z().optional()}).refine((e)=>e.frequencies_hz.length===e.complex_voltages.length,{message:"frequencies_hz and complex_voltages must have the same length"});Pt(!0);Yst=at({type:Be("simulation_ac_sweep_current_graph"),simulation_ac_sweep_current_graph_id:_n("simulation_ac_sweep_current_graph"),simulation_experiment_id:Z(),simulation_parameter_sweep_coordinate:MM.optional(),simulation_current_probe_id:Z(),frequencies_hz:Qt(He()),complex_currents:Qt(Wve),name:Z().optional(),color:Z().optional()}).refine((e)=>e.frequencies_hz.length===e.complex_currents.length,{message:"frequencies_hz and complex_currents must have the same length"});Pt(!0);Vst=at({type:Be("simulation_op_amp"),simulation_op_amp_id:_n("simulation_op_amp"),source_component_id:Z().optional(),inverting_input_source_port_id:Z(),non_inverting_input_source_port_id:Z(),output_source_port_id:Z(),positive_supply_source_port_id:Z(),negative_supply_source_port_id:Z()}).describe("Defines a simple ideal operational amplifier for simulation");Pt(!0);Ust=at({type:Be("simulation_spice_subcircuit"),simulation_spice_subcircuit_id:_n("simulation_spice_subcircuit"),source_component_id:Z(),spice_pin_to_source_port_map:Fa(Z(),Z()),subcircuit_source:Z()}).describe("Defines a custom SPICE subcircuit model for simulation");Pt(!0);Wst=at({type:Be("simulation_oscilloscope_trace"),simulation_oscilloscope_trace_id:_n("simulation_oscilloscope_trace"),simulation_transient_voltage_graph_id:Z().optional(),simulation_transient_current_graph_id:Z().optional(),simulation_voltage_probe_id:Z().optional(),simulation_current_probe_id:Z().optional(),display_name:Z().optional(),color:Z().optional(),display_center_value:He().optional(),display_center_offset_divs:He().optional(),volts_per_div:He().positive().optional(),amps_per_div:He().positive().optional()}).describe("Defines how a simulation measurement is rendered as an oscilloscope-style trace.").superRefine((e,t)=>{let n=[e.simulation_transient_voltage_graph_id,e.simulation_voltage_probe_id].filter(Ynt).length,o=[e.simulation_transient_current_graph_id,e.simulation_current_probe_id].filter(Ynt).length;if(n+o!==1)t.addIssue({code:jt.custom,message:"An oscilloscope trace must reference exactly one voltage graph, current graph, voltage probe, or current probe."});if(n>0&&e.amps_per_div!==void 0)t.addIssue({code:jt.custom,message:"Voltage oscilloscope traces must use volts_per_div, not amps_per_div."});if(o>0&&e.volts_per_div!==void 0)t.addIssue({code:jt.custom,message:"Current oscilloscope traces must use amps_per_div, not volts_per_div."})});Pt(!0);ave=at({x:He().finite(),y:He().finite(),layer:bo}),hve=nl("contact_type",[ave.extend({contact_type:Be("pcb_port"),pcb_port_id:Z().min(1)}),ave.extend({contact_type:Be("pcb_via"),pcb_via_id:Z().min(1)}),ave.extend({contact_type:Be("pcb_copper_pour"),pcb_copper_pour_id:Z().min(1)})]).describe("Identifies the reference conductor at a return-current contact");Pt(!0);mve=at({signal_pcb_port_id:Z().min(1),reference_pcb_port_id:Z().min(1).optional(),reference_layer:bo,resistance:He().finite().positive()}).describe("A two-terminal return-current excitation port with resistance in ohms");Pt(!0);Xst=at({type:Be("simulation_return_current_excitation"),simulation_return_current_excitation_id:_n("simulation_return_current_excitation"),simulation_experiment_id:Z().min(1),pcb_trace_id:Z().min(1),ground_source_net_id:Z().min(1),current:He().finite(),return_source:hve,return_sink:hve,source_port:mve.optional(),load_port:mve.optional()}).describe("Excites a signal trace with signed current in amperes, peak for AC; return_source is near the load and return_sink near the driver for positive current");Pt(!0);Fce=at({type:Be("simulation_pcb_return_current_result"),simulation_pcb_return_current_result_id:_n("simulation_pcb_return_current_result"),simulation_experiment_id:Z().min(1),pcb_board_id:Z().min(1),simulation_return_current_excitation_ids:Qt(Z().min(1)).min(1).refine((e)=>new Set(e).size===e.length,"Excitation IDs must be unique"),frequency_hz:He().finite().positive().optional()}).describe("A PCB return-current result at one frequency, or a frequency-independent result when frequency_hz is absent");Pt(!0);jst=Kst(["application/json","application/gzip"]),Hce=Kst(["image/png","image/webp"]),gz=at({type:Be("simulation_pcb_return_current_field"),simulation_pcb_return_current_field_id:_n("simulation_pcb_return_current_field"),simulation_pcb_return_current_result_id:Z().min(1),layer:bo,source_net_id:Z().min(1),field_type:Zt(["real","complex_phasor"]),min_x:He().finite(),min_y:He().finite(),columns:He().int().positive().safe(),rows:He().int().positive().safe(),cell_width:He().finite().positive(),cell_height:He().finite().positive(),copper_thickness:He().finite().positive(),data_format:Be("simulation_return_current_grid_json_v1"),field_asset:jst}).superRefine((e,t)=>{if(!Number.isSafeInteger(e.columns*e.rows))t.addIssue({code:jt.custom,path:["columns"],message:"The grid cell count must be a safe integer"})}).describe("A sampled sheet-current field in A/mm, using plain or gzipped JSON Asset URLs; dimensions are PCB millimeters");Pt(!0);lz=Qt(He().finite().nullable()).min(1),qst=nl("field_type",[at({field_type:Be("real"),sheet_current_x:lz,sheet_current_y:lz}),at({field_type:Be("complex_phasor"),sheet_current_x_real:lz,sheet_current_x_imag:lz,sheet_current_y_real:lz,sheet_current_y_imag:lz})]).superRefine((e,t)=>{let n=e.field_type==="real"?[e.sheet_current_x,e.sheet_current_y]:[e.sheet_current_x_real,e.sheet_current_x_imag,e.sheet_current_y_real,e.sheet_current_y_imag],o=n[0];if(n.some((i)=>i.length!==o.length)){t.addIssue({code:jt.custom,message:"Current channels must have equal lengths"});return}for(let i=0;i<o.length;i++){let r=o[i]===null;if(n.some((s)=>s[i]===null!==r)){t.addIssue({code:jt.custom,message:`Cell ${i} must be null in every channel or finite in every channel`});return}}}).describe("Decoded real or complex sheet-current arrays with a shared conductor mask");Pt(!0);Oce=at({type:Be("simulation_pcb_return_current_heatmap"),simulation_pcb_return_current_heatmap_id:_n("simulation_pcb_return_current_heatmap"),simulation_pcb_return_current_result_id:Z().min(1),layer:bo,source_net_id:Z().min(1),min_x:He().finite(),min_y:He().finite(),max_x:He().finite(),max_y:He().finite(),image_asset:Hce}).superRefine((e,t)=>{for(let n of["x","y"])if(e[`max_${n}`]<=e[`min_${n}`])t.addIssue({code:jt.custom,path:[`max_${n}`],message:"Heatmap bounds must have positive width and height"})}).describe("A transparent PNG/WebP current-density overlay in A/mm²; the top-left pixel maps to (min_x, max_y)");Pt(!0);Vnt=at({type:Be("simulation_pcb_return_current_marker"),simulation_pcb_return_current_marker_id:_n("simulation_pcb_return_current_marker"),simulation_pcb_return_current_result_id:Z().min(1),role:Zt(["signal_source","signal_load","return_source","return_sink","signal_transition","return_transition"]),label:Z().optional(),label_x:He().finite().optional(),label_y:He().finite().optional()}),zce=nl("target_type",[Vnt.extend({target_type:Be("pcb_port"),pcb_port_id:Z().min(1),layer:bo}),Vnt.extend({target_type:Be("pcb_via"),pcb_via_id:Z().min(1),from_layer:bo,to_layer:bo})]).superRefine((e,t)=>{if(e.label_x===void 0!==(e.label_y===void 0))t.addIssue({code:jt.custom,path:["label_x"],message:"label_x and label_y must be provided together"});if(e.target_type==="pcb_via"&&e.from_layer===e.to_layer)t.addIssue({code:jt.custom,path:["to_layer"],message:"A via transition must connect distinct layers"})}).describe("A signal/return port or via highlight; markers do not assert measured via-transfer currents");Pt(!0);Gce=kn([Hot,Sot,Fot,Iot,bot,Cot,vot,Pot,xve,gve,Sce,yve,fve,Cve,Ive,bve,vve,Eve,Mve,Nve,Bve,wve,Tve,Dve,Pve,Sve,Bot,wot,Eot,Rve,Qve,kve,Lve,Tot,Lot,Fve,Lq,Hve,Dot,Not,Rot,Qot,kot,r7,Ove,EM,Mot,bit,Eit,Rit,Vrt,Az,Rce,Qce,Krt,jrt,kce,qrt,Qit,Lrt,Frt,kit,nrt,zit,Uit,Wit,Xit,qit,Kit,jit,Jit,s7,Fit,Hit,Oit,ort,irt,lrt,drt,Urt,prt,Art,_rt,grt,Srt,frt,yrt,xrt,Crt,brt,Tce,Dce,$it,Zit,urt,hrt,mrt,ert,trt,ast,cst,lst,dst,vrt,Prt,Ert,Mrt,Brt,wrt,Trt,Drt,Nrt,Wrt,Xrt,Rrt,Qrt,Jrt,Yrt,$rt,Zrt,est,ist,rst,sst,_z,ust,hst,mst,pst,Ast,Oot,Zot,Kot,jot,qot,Jot,Wot,Xot,eit,$ot,zot,nit,oit,tit,ait,cit,vce,lit,dit,uit,fit,hit,mit,pit,git,Ait,_it,gst,yst,Cst,fst,Sst,Est,wst,Xst,Fce,gz,Oce,zce,Tst,Dst,Fst,Hst,Ost,zst,Gst,Yst,Lst,Nst,Rst,Qst,Wst,kst,Vst,Ust]),a7=Gce;Pt(!0);QR(!0)});function tt(e,t){return Array.isArray(t)?[e.a*t[0]+e.c*t[1]+e.e,e.b*t[0]+e.d*t[1]+e.f]:{x:e.a*t.x+e.c*t.y+e.e,y:e.b*t.x+e.d*t.y+e.f}}function Jst(e,t){return t.map((n)=>tt(e,n))}function $st(e){let t=e.match(jQn);if(t===null||t.length<7)throw Error(`'${e}' is not a matrix`);return{a:parseFloat(t[1]),b:parseFloat(t[2]),c:parseFloat(t[3]),d:parseFloat(t[4]),e:parseFloat(t[5]),f:parseFloat(t[6])}}var jQn;var Zst=Ks(()=>{jQn=/^matrix\(\s*([0-9_+-.e]+)\s*,\s*([0-9_+-.e]+)\s*,\s*([0-9_+-.e]+)\s*,\s*([0-9_+-.e]+)\s*,\s*([0-9_+-.e]+)\s*,\s*([0-9_+-.e]+)\s*\)$/i});function Il(){return{a:1,c:0,e:0,b:0,d:1,f:0}}function fz(e){let{a:t,b:n,c:o,d:i,e:r,f:s}=e,a=t*i-n*o;return{a:i/a,b:n/-a,c:o/-a,d:t/a,e:(i*r-o*s)/-a,f:(n*r-t*s)/a}}function kR(e){return typeof e>"u"}var eat=()=>{};function So(e,t=0){return{a:1,c:0,e,b:0,d:1,f:t}}function l7(...e){e=Array.isArray(e[0])?e[0]:e;let t=(n,o)=>({a:n.a*o.a+n.c*o.b,c:n.a*o.c+n.c*o.d,e:n.a*o.e+n.c*o.f+n.e,b:n.b*o.a+n.d*o.b,d:n.b*o.c+n.d*o.d,f:n.b*o.e+n.d*o.f+n.f});switch(e.length){case 0:throw Error("no matrices provided");case 1:return e[0];case 2:return t(e[0],e[1]);default:{let[n,o,...i]=e,r=t(n,o);return l7(r,...i)}}}function _o(...e){return l7(...e)}function wa(e,t,n){let o=qQn(e),i=JQn(e),r={a:o,c:-i,e:0,b:i,d:o,f:0};if(kR(t)||kR(n))return r;return l7([So(t,n),r,So(-t,-n)])}function bA(e,t=void 0,n=void 0){return wa(e*$Qn/180,t,n)}var qQn,JQn,$Qn;var Yce=Ks(()=>{({cos:qQn,sin:JQn,PI:$Qn}=Math)});function xc(e,t=void 0,n=void 0,o=void 0){if(kR(t))t=e;let i={a:e,c:0,e:0,b:0,d:t,f:0};if(kR(n)||kR(o))return i;return l7([So(n,o),i,So(-n,-o)])}var Hq=()=>{};var Hxr;var Xve=Ks(()=>{({tan:Hxr}=Math)});function tat(e){return B_(e)}function B_(e){return`matrix(${e.a},${e.b},${e.c},${e.d},${e.e},${e.f})`}function nat(e,t=10000000000){return{a:Math.round(e.a*t)/t,b:Math.round(e.b*t)/t,c:Math.round(e.c*t)/t,d:Math.round(e.d*t)/t,e:Math.round(e.e*t)/t,f:Math.round(e.f*t)/t}}function oat(e,t){let n=e[0].x!=null?e[0].x:e[0][0],o=e[0].y!=null?e[0].y:e[0][1],i=t[0].x!=null?t[0].x:t[0][0],r=t[0].y!=null?t[0].y:t[0][1],s=e[1].x!=null?e[1].x:e[1][0],a=e[1].y!=null?e[1].y:e[1][1],c=t[1].x!=null?t[1].x:t[1][0],l=t[1].y!=null?t[1].y:t[1][1],d=e[2].x!=null?e[2].x:e[2][0],u=e[2].y!=null?e[2].y:e[2][1],h=t[2].x!=null?t[2].x:t[2][0],A=t[2].y!=null?t[2].y:t[2][1],m={a:n-d,b:o-u,c:s-d,d:a-u,e:d,f:u},p={a:i-h,b:r-A,c:c-h,d:l-A,e:h,f:A},g=fz(m),_=l7([p,g]);return nat(_)}var iat=()=>{};var rat=Ks(()=>{Hq();Yce();Xve()});function ZQn(e,t){function n(){this.constructor=e}n.prototype=t.prototype,e.prototype=new n}function Vce(e,t,n,o){var i=Error.call(this,e);if(Object.setPrototypeOf)Object.setPrototypeOf(i,Vce.prototype);return i.expected=t,i.found=n,i.location=o,i.name="SyntaxError",i}function Kve(e,t,n){if(n=n||" ",e.length>t)return e;return t-=e.length,n+=n.repeat(t),e+n.slice(0,t)}var sat=Ks(()=>{ZQn(Vce,Error);Vce.prototype.format=function(e){var t="Error: "+this.message;if(this.location){var n=null,o;for(o=0;o<e.length;o++)if(e[o].source===this.location.source){n=e[o].text.split(/\r\n|\n|\r/g);break}var i=this.location.start,r=this.location.source&&typeof this.location.source.offset==="function"?this.location.source.offset(i):i,s=this.location.source+":"+r.line+":"+r.column;if(n){var a=this.location.end,c=Kve("",r.line.toString().length," "),l=n[i.line-1],d=i.line===a.line?a.column:l.length+1,u=d-i.column||1;t+=`
--> `+s+`
`+c+` |
`+r.line+" | "+l+`
`+c+" | "+Kve("",i.column-1," ")+Kve("",u,"^")}else t+=`
at `+s}return t};Vce.buildMessage=function(e,t){var n={literal:function(l){return'"'+i(l.text)+'"'},class:function(l){var d=l.parts.map(function(u){return Array.isArray(u)?r(u[0])+"-"+r(u[1]):r(u)});return"["+(l.inverted?"^":"")+d.join("")+"]"},any:function(){return"any character"},end:function(){return"end of input"},other:function(l){return l.description}};function o(l){return l.charCodeAt(0).toString(16).toUpperCase()}function i(l){return l.replace(/\\/g,"\\\\").replace(/"/g,"\\\"").replace(/\0/g,"\\0").replace(/\t/g,"\\t").replace(/\n/g,"\\n").replace(/\r/g,"\\r").replace(/[\x00-\x0F]/g,function(d){return"\\x0"+o(d)}).replace(/[\x10-\x1F\x7F-\x9F]/g,function(d){return"\\x"+o(d)})}function r(l){return l.replace(/\\/g,"\\\\").replace(/\]/g,"\\]").replace(/\^/g,"\\^").replace(/-/g,"\\-").replace(/\0/g,"\\0").replace(/\t/g,"\\t").replace(/\n/g,"\\n").replace(/\r/g,"\\r").replace(/[\x00-\x0F]/g,function(d){return"\\x0"+o(d)}).replace(/[\x10-\x1F\x7F-\x9F]/g,function(d){return"\\x"+o(d)})}function s(l){return n[l.type](l)}function a(l){var d=l.map(s),u,h;if(d.sort(),d.length>0){for(u=1,h=1;u<d.length;u++)if(d[u-1]!==d[u])d[h]=d[u],h++;d.length=h}switch(d.length){case 1:return d[0];case 2:return d[0]+" or "+d[1];default:return d.slice(0,-1).join(", ")+", or "+d[d.length-1]}}function c(l){return l?'"'+i(l)+'"':"end of input"}return"Expected "+a(e)+" but "+c(t)+" found."}});var aat=Ks(()=>{sat()});function ol(e,t=!1,n=!1){if(t)if(n)e=_o(e,xc(-1,-1));else e=_o(e,xc(1,-1));else if(n)e=_o(e,xc(-1,1));let o=e.a,i=e.b,r=e.c,s=e.d,a,c,l;if(o!==0||r!==0){let d=Math.hypot(o,r);a=d,c=(o*s-i*r)/d;let u=Math.acos(o/d);l=r>0?-u:u}else if(i!==0||s!==0){let d=Math.hypot(i,s);a=(o*s-i*r)/d,c=d;let u=Math.acos(i/d);l=Math.PI/2+(s>0?-u:u)}else a=0,c=0,l=0;if(n)a=-a;if(t)c=-c;return{translate:{tx:e.e,ty:e.f},scale:{sx:a,sy:c},rotation:{angle:l}}}var cat=Ks(()=>{Hq()});function d7(){return{a:-1,c:0,e:0,b:0,d:1,f:0}}var lat=Ks(()=>{Yce();Hq()});var pn=Ks(()=>{Zst();eat();Yce();Hq();Xve();iat();rat();aat();cat();lat()});var jve,aI;var qve=Ks(()=>{jve={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]};for(let e in jve)Object.freeze(jve[e]);aI=Object.freeze(jve)});function u7(e,t,n){return Math.min(Math.max(t,e),n)}function Uce(e){let t=Math.round(e).toString(16).toUpperCase();return t.length<2?"0"+t:t}var dat,cy,LR;var uat=Ks(()=>{qve();dat=Object.create(null);for(let e in aI)if(Object.hasOwn(aI,e))dat[aI[e]]=e;cy={to:{},get:{}};cy.get=function(e){let t=e.slice(0,3).toLowerCase(),n,o;switch(t){case"hsl":{n=cy.get.hsl(e),o="hsl";break}case"hwb":{n=cy.get.hwb(e),o="hwb";break}default:{n=cy.get.rgb(e),o="rgb";break}}if(!n)return null;return{model:o,value:n}};cy.get.rgb=function(e){if(!e)return null;let t=/^#([a-f\d]{3,4})$/i,n=/^#([a-f\d]{6})([a-f\d]{2})?$/i,o=/^rgba?\(\s*([+-]?(?:\d*\.)?\d+(?:e\d+)?)(?=[\s,])\s*(?:,\s*)?([+-]?(?:\d*\.)?\d+(?:e\d+)?)(?=[\s,])\s*(?:,\s*)?([+-]?(?:\d*\.)?\d+(?:e\d+)?)\s*(?:[\s,|/]\s*([+-]?(?:\d*\.)?\d+(?:e\d+)?)(%?)\s*)?\)$/i,i=/^rgba?\(\s*([+-]?[\d.]+)%\s*,?\s*([+-]?[\d.]+)%\s*,?\s*([+-]?[\d.]+)%\s*(?:[\s,|/]\s*([+-]?[\d.]+)(%?)\s*)?\)$/i,r=/^(\w+)$/,s=[0,0,0,1],a,c,l;if(a=e.match(n)){l=a[2],a=a[1];for(c=0;c<3;c++){let d=c*2;s[c]=Number.parseInt(a.slice(d,d+2),16)}if(l)s[3]=Number.parseInt(l,16)/255}else if(a=e.match(t)){a=a[1],l=a[3];for(c=0;c<3;c++)s[c]=Number.parseInt(a[c]+a[c],16);if(l)s[3]=Number.parseInt(l+l,16)/255}else if(a=e.match(o)){for(c=0;c<3;c++)s[c]=Number.parseFloat(a[c+1]);if(a[4])s[3]=a[5]?Number.parseFloat(a[4])*0.01:Number.parseFloat(a[4])}else if(a=e.match(i)){for(c=0;c<3;c++)s[c]=Math.round(Number.parseFloat(a[c+1])*2.55);if(a[4])s[3]=a[5]?Number.parseFloat(a[4])*0.01:Number.parseFloat(a[4])}else if(a=e.toLowerCase().match(r)){if(a[1]==="transparent")return[0,0,0,0];if(!Object.hasOwn(aI,a[1]))return null;return s=aI[a[1]].slice(),s[3]=1,s}else return null;for(c=0;c<3;c++)s[c]=u7(s[c],0,255);return s[3]=u7(s[3],0,1),s};cy.get.hsl=function(e){if(!e)return null;let t=/^hsla?\(\s*([+-]?(?:\d{0,3}\.)?\d+)(?:deg)?\s*,?\s*([+-]?[\d.]+)%\s*,?\s*([+-]?[\d.]+)%\s*(?:[,|/]\s*([+-]?(?=\.\d|\d)(?:0|[1-9]\d*)?(?:\.\d*)?(?:e[+-]?\d+)?)\s*)?\)$/i,n=e.match(t);if(n){let o=Number.parseFloat(n[4]),i=(Number.parseFloat(n[1])%360+360)%360,r=u7(Number.parseFloat(n[2]),0,100),s=u7(Number.parseFloat(n[3]),0,100),a=u7(Number.isNaN(o)?1:o,0,1);return[i,r,s,a]}return null};cy.get.hwb=function(e){if(!e)return null;let t=/^hwb\(\s*([+-]?\d{0,3}(?:\.\d+)?)(?:deg)?\s*[\s,]\s*([+-]?[\d.]+)%\s*[\s,]\s*([+-]?[\d.]+)%\s*(?:[\s,]\s*([+-]?(?=\.\d|\d)(?:0|[1-9]\d*)?(?:\.\d*)?(?:e[+-]?\d+)?)\s*)?\)$/i,n=e.match(t);if(n){let o=Number.parseFloat(n[4]),i=(Number.parseFloat(n[1])%360+360)%360,r=u7(Number.parseFloat(n[2]),0,100),s=u7(Number.parseFloat(n[3]),0,100),a=u7(Number.isNaN(o)?1:o,0,1);return[i,r,s,a]}return null};cy.to.hex=function(...e){return"#"+Uce(e[0])+Uce(e[1])+Uce(e[2])+(e[3]<1?Uce(Math.round(e[3]*255)):"")};cy.to.rgb=function(...e){return e.length<4||e[3]===1?"rgb("+Math.round(e[0])+", "+Math.round(e[1])+", "+Math.round(e[2])+")":"rgba("+Math.round(e[0])+", "+Math.round(e[1])+", "+Math.round(e[2])+", "+e[3]+")"};cy.to.rgb.percent=function(...e){let t=Math.round(e[0]/255*100),n=Math.round(e[1]/255*100),o=Math.round(e[2]/255*100);return e.length<4||e[3]===1?"rgb("+t+"%, "+n+"%, "+o+"%)":"rgba("+t+"%, "+n+"%, "+o+"%, "+e[3]+")"};cy.to.hsl=function(...e){return e.length<4||e[3]===1?"hsl("+e[0]+", "+e[1]+"%, "+e[2]+"%)":"hsla("+e[0]+", "+e[1]+"%, "+e[2]+"%, "+e[3]+")"};cy.to.hwb=function(...e){let t="";if(e.length>=4&&e[3]!==1)t=", "+e[3];return"hwb("+e[0]+", "+e[1]+"%, "+e[2]+"%"+t+")"};cy.to.keyword=function(...e){return dat[e.slice(0,3)]};LR=cy});function yz(e){let t=e>0.0031308?1.055*e**0.4166666666666667-0.055:e*12.92;return Math.min(Math.max(0,t),1)}function xz(e){return e>0.04045?((e+0.055)/1.055)**2.4:e/12.92}function ekn(e,t){return(e[0]-t[0])**2+(e[1]-t[1])**2+(e[2]-t[2])**2}var hat,Ni,wM,BM=0.008856451679035631;var Jve=Ks(()=>{qve();hat={};for(let e of Object.keys(aI))hat[aI[e]]=e;Ni={rgb:{channels:3,labels:"rgb"},hsl:{channels:3,labels:"hsl"},hsv:{channels:3,labels:"hsv"},hwb:{channels:3,labels:"hwb"},cmyk:{channels:4,labels:"cmyk"},xyz:{channels:3,labels:"xyz"},lab:{channels:3,labels:"lab"},oklab:{channels:3,labels:["okl","oka","okb"]},lch:{channels:3,labels:"lch"},oklch:{channels:3,labels:["okl","okc","okh"]},hex:{channels:1,labels:["hex"]},keyword:{channels:1,labels:["keyword"]},ansi16:{channels:1,labels:["ansi16"]},ansi256:{channels:1,labels:["ansi256"]},hcg:{channels:3,labels:["h","c","g"]},apple:{channels:3,labels:["r16","g16","b16"]},gray:{channels:1,labels:["gray"]}},wM=Ni;for(let e of Object.keys(Ni)){if(!("channels"in Ni[e]))throw Error("missing channels property: "+e);if(!("labels"in Ni[e]))throw Error("missing channel labels property: "+e);if(Ni[e].labels.length!==Ni[e].channels)throw Error("channel and label counts mismatch: "+e);let{channels:t,labels:n}=Ni[e];delete Ni[e].channels,delete Ni[e].labels,Object.defineProperty(Ni[e],"channels",{value:t}),Object.defineProperty(Ni[e],"labels",{value:n})}Ni.rgb.hsl=function(e){let t=e[0]/255,n=e[1]/255,o=e[2]/255,i=Math.min(t,n,o),r=Math.max(t,n,o),s=r-i,a,c;switch(r){case i:{a=0;break}case t:{a=(n-o)/s;break}case n:{a=2+(o-t)/s;break}case o:{a=4+(t-n)/s;break}}if(a=Math.min(a*60,360),a<0)a+=360;let l=(i+r)/2;if(r===i)c=0;else if(l<=0.5)c=s/(r+i);else c=s/(2-r-i);return[a,c*100,l*100]};Ni.rgb.hsv=function(e){let t,n,o,i,r,s=e[0]/255,a=e[1]/255,c=e[2]/255,l=Math.max(s,a,c),d=l-Math.min(s,a,c),u=function(h){return(l-h)/6/d+0.5};if(d===0)i=0,r=0;else{switch(r=d/l,t=u(s),n=u(a),o=u(c),l){case s:{i=o-n;break}case a:{i=0.3333333333333333+t-o;break}case c:{i=0.6666666666666666+n-t;break}}if(i<0)i+=1;else if(i>1)i-=1}return[i*360,r*100,l*100]};Ni.rgb.hwb=function(e){let t=e[0],n=e[1],o=e[2],i=Ni.rgb.hsl(e)[0],r=0.00392156862745098*Math.min(t,Math.min(n,o));return o=1-0.00392156862745098*Math.max(t,Math.max(n,o)),[i,r*100,o*100]};Ni.rgb.oklab=function(e){let t=xz(e[0]/255),n=xz(e[1]/255),o=xz(e[2]/255),i=Math.cbrt(0.4122214708*t+0.5363325363*n+0.0514459929*o),r=Math.cbrt(0.2119034982*t+0.6806995451*n+0.1073969566*o),s=Math.cbrt(0.0883024619*t+0.2817188376*n+0.6299787005*o),a=0.2104542553*i+0.793617785*r-0.0040720468*s,c=1.9779984951*i-2.428592205*r+0.4505937099*s,l=0.0259040371*i+0.7827717662*r-0.808675766*s;return[a*100,c*100,l*100]};Ni.rgb.cmyk=function(e){let t=e[0]/255,n=e[1]/255,o=e[2]/255,i=Math.min(1-t,1-n,1-o),r=(1-t-i)/(1-i)||0,s=(1-n-i)/(1-i)||0,a=(1-o-i)/(1-i)||0;return[r*100,s*100,a*100,i*100]};Ni.rgb.keyword=function(e){let t=hat[e];if(t)return t;let n=Number.POSITIVE_INFINITY,o;for(let i of Object.keys(aI)){let r=aI[i],s=ekn(e,r);if(s<n)n=s,o=i}return o};Ni.keyword.rgb=function(e){return[...aI[e]]};Ni.rgb.xyz=function(e){let t=xz(e[0]/255),n=xz(e[1]/255),o=xz(e[2]/255),i=t*0.4124564+n*0.3575761+o*0.1804375,r=t*0.2126729+n*0.7151522+o*0.072175,s=t*0.0193339+n*0.119192+o*0.9503041;return[i*100,r*100,s*100]};Ni.rgb.lab=function(e){let t=Ni.rgb.xyz(e),n=t[0],o=t[1],i=t[2];n/=95.047,o/=100,i/=108.883,n=n>BM?n**0.3333333333333333:7.787*n+0.13793103448275862,o=o>BM?o**0.3333333333333333:7.787*o+0.13793103448275862,i=i>BM?i**0.3333333333333333:7.787*i+0.13793103448275862;let r=116*o-16,s=500*(n-o),a=200*(o-i);return[r,s,a]};Ni.hsl.rgb=function(e){let t=e[0]/360,n=e[1]/100,o=e[2]/100,i,r;if(n===0)return r=o*255,[r,r,r];let s=o<0.5?o*(1+n):o+n-o*n,a=2*o-s,c=[0,0,0];for(let l=0;l<3;l++){if(i=t+0.3333333333333333*-(l-1),i<0)i++;if(i>1)i--;if(6*i<1)r=a+(s-a)*6*i;else if(2*i<1)r=s;else if(3*i<2)r=a+(s-a)*(0.6666666666666666-i)*6;else r=a;c[l]=r*255}return c};Ni.hsl.hsv=function(e){let t=e[0],n=e[1]/100,o=e[2]/100,i=n,r=Math.max(o,0.01);o*=2,n*=o<=1?o:2-o,i*=r<=1?r:2-r;let s=(o+n)/2,a=o===0?2*i/(r+i):2*n/(o+n);return[t,a*100,s*100]};Ni.hsv.rgb=function(e){let t=e[0]/60,n=e[1]/100,o=e[2]/100,i=Math.floor(t)%6,r=t-Math.floor(t),s=255*o*(1-n),a=255*o*(1-n*r),c=255*o*(1-n*(1-r));switch(o*=255,i){case 0:return[o,c,s];case 1:return[a,o,s];case 2:return[s,o,c];case 3:return[s,a,o];case 4:return[c,s,o];case 5:return[o,s,a]}};Ni.hsv.hsl=function(e){let t=e[0],n=e[1]/100,o=e[2]/100,i=Math.max(o,0.01),r,s;s=(2-n)*o;let a=(2-n)*i;return r=n*i,r/=a<=1?a:2-a,r=r||0,s/=2,[t,r*100,s*100]};Ni.hwb.rgb=function(e){let t=e[0]/360,n=e[1]/100,o=e[2]/100,i=n+o,r;if(i>1)n/=i,o/=i;let s=Math.floor(6*t),a=1-o;if(r=6*t-s,(s&1)!==0)r=1-r;let c=n+r*(a-n),l,d,u;switch(s){default:case 6:case 0:{l=a,d=c,u=n;break}case 1:{l=c,d=a,u=n;break}case 2:{l=n,d=a,u=c;break}case 3:{l=n,d=c,u=a;break}case 4:{l=c,d=n,u=a;break}case 5:{l=a,d=n,u=c;break}}return[l*255,d*255,u*255]};Ni.cmyk.rgb=function(e){let t=e[0]/100,n=e[1]/100,o=e[2]/100,i=e[3]/100,r=1-Math.min(1,t*(1-i)+i),s=1-Math.min(1,n*(1-i)+i),a=1-Math.min(1,o*(1-i)+i);return[r*255,s*255,a*255]};Ni.xyz.rgb=function(e){let t=e[0]/100,n=e[1]/100,o=e[2]/100,i,r,s;return i=t*3.2404542+n*-1.5371385+o*-0.4985314,r=t*-0.969266+n*1.8760108+o*0.041556,s=t*0.0556434+n*-0.2040259+o*1.0572252,i=yz(i),r=yz(r),s=yz(s),[i*255,r*255,s*255]};Ni.xyz.lab=function(e){let t=e[0],n=e[1],o=e[2];t/=95.047,n/=100,o/=108.883,t=t>BM?t**0.3333333333333333:7.787*t+0.13793103448275862,n=n>BM?n**0.3333333333333333:7.787*n+0.13793103448275862,o=o>BM?o**0.3333333333333333:7.787*o+0.13793103448275862;let i=116*n-16,r=500*(t-n),s=200*(n-o);return[i,r,s]};Ni.xyz.oklab=function(e){let t=e[0]/100,n=e[1]/100,o=e[2]/100,i=Math.cbrt(0.8189330101*t+0.3618667424*n-0.1288597137*o),r=Math.cbrt(0.0329845436*t+0.9293118715*n+0.0361456387*o),s=Math.cbrt(0.0482003018*t+0.2643662691*n+0.633851707*o),a=0.2104542553*i+0.793617785*r-0.0040720468*s,c=1.9779984951*i-2.428592205*r+0.4505937099*s,l=0.0259040371*i+0.7827717662*r-0.808675766*s;return[a*100,c*100,l*100]};Ni.oklab.oklch=function(e){return Ni.lab.lch(e)};Ni.oklab.xyz=function(e){let t=e[0]/100,n=e[1]/100,o=e[2]/100,i=(0.999999998*t+0.396337792*n+0.215803758*o)**3,r=(1.000000008*t-0.105561342*n-0.063854175*o)**3,s=(1.000000055*t-0.089484182*n-1.291485538*o)**3,a=1.227013851*i-0.55779998*r+0.281256149*s,c=-0.040580178*i+1.11225687*r-0.071676679*s,l=-0.076381285*i-0.421481978*r+1.58616322*s;return[a*100,c*100,l*100]};Ni.oklab.rgb=function(e){let t=e[0]/100,n=e[1]/100,o=e[2]/100,i=(t+0.3963377774*n+0.2158037573*o)**3,r=(t-0.1055613458*n-0.0638541728*o)**3,s=(t-0.0894841775*n-1.291485548*o)**3,a=yz(4.0767416621*i-3.3077115913*r+0.2309699292*s),c=yz(-1.2684380046*i+2.6097574011*r-0.3413193965*s),l=yz(-0.0041960863*i-0.7034186147*r+1.707614701*s);return[a*255,c*255,l*255]};Ni.oklch.oklab=function(e){return Ni.lch.lab(e)};Ni.lab.xyz=function(e){let t=e[0],n=e[1],o=e[2],i,r,s;r=(t+16)/116,i=n/500+r,s=r-o/200;let a=r**3,c=i**3,l=s**3;return r=a>BM?a:(r-0.13793103448275862)/7.787,i=c>BM?c:(i-0.13793103448275862)/7.787,s=l>BM?l:(s-0.13793103448275862)/7.787,i*=95.047,r*=100,s*=108.883,[i,r,s]};Ni.lab.lch=function(e){let t=e[0],n=e[1],o=e[2],i;if(i=Math.atan2(o,n)*360/2/Math.PI,i<0)i+=360;let s=Math.sqrt(n*n+o*o);return[t,s,i]};Ni.lch.lab=function(e){let t=e[0],n=e[1],i=e[2]/360*2*Math.PI,r=n*Math.cos(i),s=n*Math.sin(i);return[t,r,s]};Ni.rgb.ansi16=function(e,t=null){let[n,o,i]=e,r=t===null?Ni.rgb.hsv(e)[2]:t;if(r=Math.round(r/50),r===0)return 30;let s=30+(Math.round(i/255)<<2|Math.round(o/255)<<1|Math.round(n/255));if(r===2)s+=60;return s};Ni.hsv.ansi16=function(e){return Ni.rgb.ansi16(Ni.hsv.rgb(e),e[2])};Ni.rgb.ansi256=function(e){let t=e[0],n=e[1],o=e[2];if(t>>4===n>>4&&n>>4===o>>4){if(t<8)return 16;if(t>248)return 231;return Math.round((t-8)/247*24)+232}return 16+36*Math.round(t/255*5)+6*Math.round(n/255*5)+Math.round(o/255*5)};Ni.ansi16.rgb=function(e){e=e[0];let t=e%10;if(t===0||t===7){if(e>50)t+=3.5;return t=t/10.5*255,[t,t,t]}let n=(Math.trunc(e>50)+1)*0.5,o=(t&1)*n*255,i=(t>>1&1)*n*255,r=(t>>2&1)*n*255;return[o,i,r]};Ni.ansi256.rgb=function(e){if(e=e[0],e>=232){let r=(e-232)*10+8;return[r,r,r]}e-=16;let t,n=Math.floor(e/36)/5*255,o=Math.floor((t=e%36)/6)/5*255,i=t%6/5*255;return[n,o,i]};Ni.rgb.hex=function(e){let n=(((Math.round(e[0])&255)<<16)+((Math.round(e[1])&255)<<8)+(Math.round(e[2])&255)).toString(16).toUpperCase();return"000000".slice(n.length)+n};Ni.hex.rgb=function(e){let t=e.toString(16).match(/[a-f\d]{6}|[a-f\d]{3}/i);if(!t)return[0,0,0];let n=t[0];if(t[0].length===3)n=[...n].map((a)=>a+a).join("");let o=Number.parseInt(n,16),i=o>>16&255,r=o>>8&255,s=o&255;return[i,r,s]};Ni.rgb.hcg=function(e){let t=e[0]/255,n=e[1]/255,o=e[2]/255,i=Math.max(Math.max(t,n),o),r=Math.min(Math.min(t,n),o),s=i-r,a,c=s<1?r/(1-s):0;if(s<=0)a=0;else if(i===t)a=(n-o)/s%6;else if(i===n)a=2+(o-t)/s;else a=4+(t-n)/s;return a/=6,a%=1,[a*360,s*100,c*100]};Ni.hsl.hcg=function(e){let t=e[1]/100,n=e[2]/100,o=n<0.5?2*t*n:2*t*(1-n),i=0;if(o<1)i=(n-0.5*o)/(1-o);return[e[0],o*100,i*100]};Ni.hsv.hcg=function(e){let t=e[1]/100,n=e[2]/100,o=t*n,i=0;if(o<1)i=(n-o)/(1-o);return[e[0],o*100,i*100]};Ni.hcg.rgb=function(e){let t=e[0]/360,n=e[1]/100,o=e[2]/100;if(n===0)return[o*255,o*255,o*255];let i=[0,0,0],r=t%1*6,s=r%1,a=1-s,c=0;switch(Math.floor(r)){case 0:{i[0]=1,i[1]=s,i[2]=0;break}case 1:{i[0]=a,i[1]=1,i[2]=0;break}case 2:{i[0]=0,i[1]=1,i[2]=s;break}case 3:{i[0]=0,i[1]=a,i[2]=1;break}case 4:{i[0]=s,i[1]=0,i[2]=1;break}default:i[0]=1,i[1]=0,i[2]=a}return c=(1-n)*o,[(n*i[0]+c)*255,(n*i[1]+c)*255,(n*i[2]+c)*255]};Ni.hcg.hsv=function(e){let t=e[1]/100,n=e[2]/100,o=t+n*(1-t),i=0;if(o>0)i=t/o;return[e[0],i*100,o*100]};Ni.hcg.hsl=function(e){let t=e[1]/100,o=e[2]/100*(1-t)+0.5*t,i=0;if(o>0&&o<0.5)i=t/(2*o);else if(o>=0.5&&o<1)i=t/(2*(1-o));return[e[0],i*100,o*100]};Ni.hcg.hwb=function(e){let t=e[1]/100,n=e[2]/100,o=t+n*(1-t);return[e[0],(o-t)*100,(1-o)*100]};Ni.hwb.hcg=function(e){let t=e[1]/100,o=1-e[2]/100,i=o-t,r=0;if(i<1)r=(o-i)/(1-i);return[e[0],i*100,r*100]};Ni.apple.rgb=function(e){return[e[0]/65535*255,e[1]/65535*255,e[2]/65535*255]};Ni.rgb.apple=function(e){return[e[0]/255*65535,e[1]/255*65535,e[2]/255*65535]};Ni.gray.rgb=function(e){return[e[0]/100*255,e[0]/100*255,e[0]/100*255]};Ni.gray.hsl=function(e){return[0,0,e[0]]};Ni.gray.hsv=Ni.gray.hsl;Ni.gray.hwb=function(e){return[0,100,e[0]]};Ni.gray.cmyk=function(e){return[0,0,0,e[0]]};Ni.gray.lab=function(e){return[e[0],0,0]};Ni.gray.hex=function(e){let t=Math.round(e[0]/100*255)&255,o=((t<<16)+(t<<8)+t).toString(16).toUpperCase();return"000000".slice(o.length)+o};Ni.rgb.gray=function(e){return[(e[0]+e[1]+e[2])/3/255*100]}});function tkn(){let e={},t=Object.keys(wM);for(let{length:n}=t,o=0;o<n;o++)e[t[o]]={distance:-1,parent:null};return e}function nkn(e){let t=tkn(),n=[e];t[e].distance=0;while(n.length>0){let o=n.pop(),i=Object.keys(wM[o]);for(let{length:r}=i,s=0;s<r;s++){let a=i[s],c=t[a];if(c.distance===-1)c.distance=t[o].distance+1,c.parent=o,n.unshift(a)}}return t}function okn(e,t){return function(n){return t(e(n))}}function ikn(e,t){let n=[t[e].parent,e],o=wM[t[e].parent][e],i=t[e].parent;while(t[i].parent)n.unshift(t[i].parent),o=okn(wM[t[i].parent][i],o),i=t[i].parent;return o.conversion=n,o}function rkn(e){let t=nkn(e),n={},o=Object.keys(t);for(let{length:i}=o,r=0;r<i;r++){let s=o[r];if(t[s].parent===null)continue;n[s]=ikn(s,t)}return n}var mat;var pat=Ks(()=>{Jve();mat=rkn});function akn(e){let t=function(...n){let o=n[0];if(o===void 0||o===null)return o;if(o.length>1)n=o;return e(n)};if("conversion"in e)t.conversion=e.conversion;return t}function ckn(e){let t=function(...n){let o=n[0];if(o===void 0||o===null)return o;if(o.length>1)n=o;let i=e(n);if(typeof i==="object")for(let{length:r}=i,s=0;s<r;s++)i[s]=Math.round(i[s]);return i};if("conversion"in e)t.conversion=e.conversion;return t}var Cz,skn,ly;var Aat=Ks(()=>{Jve();pat();Cz={},skn=Object.keys(wM);for(let e of skn){Cz[e]={},Object.defineProperty(Cz[e],"channels",{value:wM[e].channels}),Object.defineProperty(Cz[e],"labels",{value:wM[e].labels});let t=mat(e),n=Object.keys(t);for(let o of n){let i=t[o];Cz[e][o]=ckn(i),Cz[e][o].raw=akn(i)}}ly=Cz});function SA(e,t){if(!(this instanceof SA))return new SA(e,t);if(t&&t in _at)t=null;if(t&&!(t in ly))throw Error("Unknown model: "+t);let n,o;if(e==null)this.model="rgb",this.color=[0,0,0],this.valpha=1;else if(e instanceof SA)this.model=e.model,this.color=[...e.color],this.valpha=e.valpha;else if(typeof e==="string"){let i=LR.get(e);if(i===null)throw Error("Unable to parse color from string: "+e);this.model=i.model,o=ly[this.model].channels,this.color=i.value.slice(0,o),this.valpha=typeof i.value[o]==="number"?i.value[o]:1}else if(e.length>0){this.model=t||"rgb",o=ly[this.model].channels;let i=Array.prototype.slice.call(e,0,o);this.color=eEe(i,o),this.valpha=typeof e[o]==="number"?e[o]:1}else if(typeof e==="number")this.model="rgb",this.color=[e>>16&255,e>>8&255,e&255],this.valpha=1;else{this.valpha=1;let i=Object.keys(e);if("alpha"in e)i.splice(i.indexOf("alpha"),1),this.valpha=typeof e.alpha==="number"?e.alpha:0;let r=i.sort().join("");if(!(r in $ve))throw Error("Unable to parse color from object: "+JSON.stringify(e));this.model=$ve[r];let{labels:s}=ly[this.model],a=[];for(n=0;n<s.length;n++)a.push(e[s[n]]);this.color=eEe(a)}if(Zve[this.model]){o=ly[this.model].channels;for(n=0;n<o;n++){let i=Zve[this.model][n];if(i)this.color[n]=i(this.color[n])}}if(this.valpha=Math.max(0,Math.min(1,this.valpha)),Object.freeze)Object.freeze(this)}function lkn(e,t){return Number(e.toFixed(t))}function dkn(e){return function(t){return lkn(t,e)}}function c0(e,t,n){e=Array.isArray(e)?e:[e];for(let o of e)(Zve[o]||=[])[t]=n;return e=e[0],function(o){let i;if(o!==void 0){if(n)o=n(o);return i=this[e](),i.color[t]=o,i}if(i=this[e]().color[t],n)i=n(i);return i}}function Mp(e){return function(t){return Math.max(0,Math.min(e,t))}}function ukn(e){return Array.isArray(e)?e:[e]}function eEe(e,t){for(let n=0;n<t;n++)if(typeof e[n]!=="number")e[n]=0;return e}var _at,$ve,Zve,Oq;var tEe=Ks(()=>{uat();Aat();_at=["keyword","gray","hex"],$ve={};for(let e of Object.keys(ly))$ve[[...ly[e].labels].sort().join("")]=e;Zve={};SA.prototype={toString(){return this.string()},toJSON(){return this[this.model]()},string(e){let t=this.model in LR.to?this:this.rgb();t=t.round(typeof e==="number"?e:1);let n=t.valpha===1?t.color:[...t.color,this.valpha];return LR.to[t.model](...n)},percentString(e){let t=this.rgb().round(typeof e==="number"?e:1),n=t.valpha===1?t.color:[...t.color,this.valpha];return LR.to.rgb.percent(...n)},array(){return this.valpha===1?[...this.color]:[...this.color,this.valpha]},object(){let e={},{channels:t}=ly[this.model],{labels:n}=ly[this.model];for(let o=0;o<t;o++)e[n[o]]=this.color[o];if(this.valpha!==1)e.alpha=this.valpha;return e},unitArray(){let e=this.rgb().color;if(e[0]/=255,e[1]/=255,e[2]/=255,this.valpha!==1)e.push(this.valpha);return e},unitObject(){let e=this.rgb().object();if(e.r/=255,e.g/=255,e.b/=255,this.valpha!==1)e.alpha=this.valpha;return e},round(e){return e=Math.max(e||0,0),new SA([...this.color.map(dkn(e)),this.valpha],this.model)},alpha(e){if(e!==void 0)return new SA([...this.color,Math.max(0,Math.min(1,e))],this.model);return this.valpha},red:c0("rgb",0,Mp(255)),green:c0("rgb",1,Mp(255)),blue:c0("rgb",2,Mp(255)),hue:c0(["hsl","hsv","hsl","hwb","hcg"],0,(e)=>(e%360+360)%360),saturationl:c0("hsl",1,Mp(100)),lightness:c0("hsl",2,Mp(100)),saturationv:c0("hsv",1,Mp(100)),value:c0("hsv",2,Mp(100)),chroma:c0("hcg",1,Mp(100)),gray:c0("hcg",2,Mp(100)),white:c0("hwb",1,Mp(100)),wblack:c0("hwb",2,Mp(100)),cyan:c0("cmyk",0,Mp(100)),magenta:c0("cmyk",1,Mp(100)),yellow:c0("cmyk",2,Mp(100)),black:c0("cmyk",3,Mp(100)),x:c0("xyz",0,Mp(95.047)),y:c0("xyz",1,Mp(100)),z:c0("xyz",2,Mp(108.833)),l:c0("lab",0,Mp(100)),a:c0("lab",1),b:c0("lab",2),keyword(e){if(e!==void 0)return new SA(e);return ly[this.model].keyword(this.color)},hex(e){if(e!==void 0)return new SA(e);return LR.to.hex(...this.rgb().round().color)},hexa(e){if(e!==void 0)return new SA(e);let t=this.rgb().round().color,n=Math.round(this.valpha*255).toString(16).toUpperCase();if(n.length===1)n="0"+n;return LR.to.hex(...t)+n},rgbNumber(){let e=this.rgb().color;return(e[0]&255)<<16|(e[1]&255)<<8|e[2]&255},luminosity(){let e=this.rgb().color,t=[];for(let[n,o]of e.entries()){let i=o/255;t[n]=i<=0.04045?i/12.92:((i+0.055)/1.055)**2.4}return 0.2126*t[0]+0.7152*t[1]+0.0722*t[2]},contrast(e){let t=this.luminosity(),n=e.luminosity();if(t>n)return(t+0.05)/(n+0.05);return(n+0.05)/(t+0.05)},level(e){let t=this.contrast(e);if(t>=7)return"AAA";return t>=4.5?"AA":""},isDark(){let e=this.rgb().color;return(e[0]*2126+e[1]*7152+e[2]*722)/1e4<128},isLight(){return!this.isDark()},negate(){let e=this.rgb();for(let t=0;t<3;t++)e.color[t]=255-e.color[t];return e},lighten(e){let t=this.hsl();return t.color[2]+=t.color[2]*e,t},darken(e){let t=this.hsl();return t.color[2]-=t.color[2]*e,t},saturate(e){let t=this.hsl();return t.color[1]+=t.color[1]*e,t},desaturate(e){let t=this.hsl();return t.color[1]-=t.color[1]*e,t},whiten(e){let t=this.hwb();return t.color[1]+=t.color[1]*e,t},blacken(e){let t=this.hwb();return t.color[2]+=t.color[2]*e,t},grayscale(){let e=this.rgb().color,t=e[0]*0.3+e[1]*0.59+e[2]*0.11;return SA.rgb(t,t,t)},fade(e){return this.alpha(this.valpha-this.valpha*e)},opaquer(e){return this.alpha(this.valpha+this.valpha*e)},rotate(e){let t=this.hsl(),n=t.color[0];return n=(n+e)%360,n=n<0?360+n:n,t.color[0]=n,t},mix(e,t){if(!e||!e.rgb)throw Error('Argument to "mix" was not a Color instance, but rather an instance of '+typeof e);let n=e.rgb(),o=this.rgb(),i=t===void 0?0.5:t,r=2*i-1,s=n.alpha()-o.alpha(),a=((r*s===-1?r:(r+s)/(1+r*s))+1)/2,c=1-a;return SA.rgb(a*n.red()+c*o.red(),a*n.green()+c*o.green(),a*n.blue()+c*o.blue(),n.alpha()*i+o.alpha()*(1-i))}};for(let e of Object.keys(ly)){if(_at.includes(e))continue;let{channels:t}=ly[e];SA.prototype[e]=function(...n){if(this.model===e)return new SA(this);if(n.length>0)return new SA(n,e);return new SA([...ukn(ly[this.model][e].raw(this.color)),this.valpha],e)},SA[e]=function(...n){let o=n[0];if(typeof o==="number")o=eEe(n,t);return new SA(o,e)}}Oq=SA});var gat="T1RUTwAJAIAAAwAQQ0ZGII5OHJcAAAcwAABJ3U9TLzJqmmVaAAABAAAAAGBjbWFwFN0WswAABEwAAALEaGVhZC8IHnAAAACcAAAANmhoZWEDrgI1AAAA1AAAACRobXR44MgAAAAAURAAAAFQbWF4cABUUAAAAAD4AAAABm5hbWUZQ94BAAABYAAAAutwb3N0AAMAAAAABxAAAAAgAAEAAAABAABxHWbfXw889QADA+gAAAAA5sttrAAAAADmy22s/9P/PwKHAvkAAAADAAIAAAAAAAAAAQAAA6z/LAAAArQAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAFQAAFAAAFQAAAADAq0B9AAFAAACigK7AAAAjAKKArsAAAHfADEBAgAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAABYWFhYAEAAIQB6A6z/LAAAAvkAwQAAAAEAAAAAAiwC1wAAAAAAAAAAACIBngABAAAAAAAAAAEAWQABAAAAAAABABEAAAABAAAAAAACAAcAMwABAAAAAAADABsA/AABAAAAAAAEABkASAABAAAAAAAFAAsA2wABAAAAAAAGABgAkwABAAAAAAAHAAEAWQABAAAAAAAIAAEAWQABAAAAAAAJAAEAWQABAAAAAAAKAAEAWQABAAAAAAALAAEAWQABAAAAAAAMAAEAWQABAAAAAAANAAEAWQABAAAAAAAOAAEAWQABAAAAAAAQABEAAAABAAAAAAARAAcAMwADAAEECQAAAAIAgwADAAEECQABACIAEQADAAEECQACAA4AOgADAAEECQADADYBFwADAAEECQAEADIAYQADAAEECQAFABYA5gADAAEECQAGADAAqwADAAEECQAHAAIAgwADAAEECQAIAAIAgwADAAEECQAJAAIAgwADAAEECQAKAAIAgwADAAEECQALAAIAgwADAAEECQAMAAIAgwADAAEECQANAAIAgwADAAEECQAOAAIAgwADAAEECQAQACIAEQADAAEECQARAA4AOlRzY2lyY3VpdEFscGhhYmV0AFQAcwBjAGkAcgBjAHUAaQB0AEEAbABwAGgAYQBiAGUAdFJlZ3VsYXIAUgBlAGcAdQBsAGEAclRzY2lyY3VpdEFscGhhYmV0IFJlZ3VsYXIAVABzAGMAaQByAGMAdQBpAHQAQQBsAHAAaABhAGIAZQB0ACAA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BY6cBbz3BwWUmQWalQWcjgWciAWaggWVfQWPewU/+y8V+w5aBXqHBXmOBX2UBYGZBYebBY6bBZWZBZmUBfcOvQWcjgWciAWaggWVfgWPewWIewWBfQX7M00V+zObBXuQBX2WBYOZBYqcBZCaBZaYBZuTBZyMBfczewWchgWYgAWTfAWNewWFewWAfwV7gwX7VqAVNb0Ff5YFg5oFi5sFkZsFl5cFm5IFnIsFnIYF4FkFmIAFknwFjHoFhXwFf38Fe4QFeYoF+wzZFWbuBYmbBY+bBZaYBZqUBZyNBZyHBZmBBZR9BbAnBY17BYd7BYB+BXyDBXmIBXqQBX2VBQ75SPfu+UEVi/uBBYh7BYF9BXyCBXqIBXqOBXyUBYGZBYibBYv3gQWOmwWVmQWalAWcjwWchwWaggWVfQUO+Uj4Ko0VsmUFlX0FjnsFh3sFgX0FfYIFeYgFeo8FfZQFYrMFio0FiYwFY7sFiowFiowFYsMFiowFiowFY8oFio4FiY0FbcoFio4FiY4Fd8oFi44Fio0FgcMFi5IFi5IFlcMFjI0Fi44Fn8oFjY4FjI4FqcoFjY0FjI4Fs8oFjIwFjIwFtMMFjIwFjIwFs7sFjYwFjI0FtLMFmZQFnI8FnYgFmYIFlX0Fj3sFiHsFgX0FZGUFZV4FZFUFZE8Fb1AFeFEFg10Fk10FnlEFp1AFsk8FslUFDvlI95tWFYqJBWJjBX2CBXqHBXmOBX2UBYGZBYebBY6bBZWZBbKxBbG4BbLBBbLHBafGBZ7FBZO5BYO5BXjFBW/GBWTHBWTBBWW4BWSxBYGZBYibBY+bBZWZBZqUBZyOBZyHBZmCBbRjBYyJBY2KBbRbBYuKBY2KBbNTBYyKBYyKBbRMBYuIBY2JBapMBYuIBY2IBZ9MBYuIBYyJBZVTBYuEBYuEBYFTBYqJBYuIBXdMBYmIBYuIBWxMBYmJBYuIBWJMBYqKBYqKBWNTBYmKBYuKBWJbBQ75SPeU+FUV+zRWBXqIBXqPBX2VBYKZBYicBY+bBZaYBZqTBfc5wgUh9yQFhJoFi5sFkZsFmJYFm5IFnIsFm4UFmIAF8fsfBfH3HwWYlgWbkQWciwWchAWXgAWRewWLewWEfAUh+yQF9zlUBZqDBZZ+BY97BYh6BYJ9BX2BBXqHBXqOBfs0wAWL+yoFiHsFgX0FfIIFeogFeo4FfJQFgZkFiJsFDvlI95T39hWL90sFjpwFlZgFmpUFnI4FnIgFmoEFlX4FjnoFi/tLBfdpiwWciAWaggWVfQWOewWIegWBfgV8ggV6hwX7aYsFi/tLBYh7BYF9BXyCBXqIBXqOBXyUBYGZBYibBYv3SwX7aYsFeo8FfJQFgZgFiJwFjpsFlZkFmpQFnI4FDvlI96puFcJVBZV9BY56BYd7BYF+BXyCBXqIBXqOBX2VBTXfBYeRBYaRBYuMBYqMBYqSBYmSBYyMBYqMBY2SBYyTBYyLBYuMBZCRBY+RBfc/9zwFmpUFnI4FnIgFmoMFlX0Fj3sFiHsFgX0FDvlI90L35RX3kosFnIgFmoIFlX0FjnsFiHsFgX0FfIIFeogF+5KLBXqOBXyUBYGZBYibBY6bBZWZBZqUBQ75SPf/7RX7D4sFeY4FfZQFgZkFiJsFjpsFlZkFmZQFnY4F9w+LBZyIBZmCBZV9BY97BYd7BYF9BX2CBQ75SKOAFfhx+WMFl5cFm5EFnYwFm4UFmIAFknwFjHoFhXwF/HH9YwV/fwV7hQV5igV7kQV+lgWEmgWKnAUO+Uj4CfkPFUOeBUN4BUZQBWMvBYH7JQWj+wwFxi0F2F0FyYsF2LkFxukFo/cMBYH3JQVj5wVq9x4VjYoFkYgFkYgFjIoFjYoF4EEFi4sFjIoFj4UFkIUFi4oFjIoFuSEFjIQFjYUFlvsyBYqGBYuGBXH7GQWIhQWJhAVH+wIFiYoFiokFhocFh4YFiYoFiooFKVEFh4kFiIkFhooFh4oFh4sFh4oFM4sFh4wFh4sFh4wFhowFiI0Fh40FKcUFiowFiYwFh5AFho8Fio0FiowFRvcCBYmSBYiRBXH3GQWLkAWKkAWW9zIFjZEFjJIFufUFjIwFi4wFkJEFj5EFjIwFjIsF39UFjYwFjIwFkY4FkY4FjYwFjYsF6aMFjowFjowFkYoFkYwFjooFjooF6XMFDvlI9/v5ZRWQjgWNjAWNjAWSiwWSjQWMigWNiwWSigWSiQWMigWNiwWRhwWQhwWMigWNigWOhQWPhQWMigWLiQWMhQWNhAWL/REFh3sFgX0FfYIFeogFeY4FfZQFgZkFiJsFi/i2BTRFBXuDBXqJBXqPBX2WBYOZBYmbBY+bBZaYBfc19xUFDvlI90rmFffoiwWdiAWZggWVfQWOewWIewWBfQV9ggV5iAX8TosFg4wFg4wFiowFiosFhY8FhI8Fi4sFiowFhpEFh5EFi4wFiowFipIFiZIFi4wFi4wFjJIFjJIFjIwFi4wFj5EFj5EF9zn3PgX3L/dKBcTlBZezBYueBYOqBXeiBV6dBUaQBWaGBVBzBWttBX9mBYN9BX6ABXqGBXmNBXyTBYCYBYaaBYycBZu6BYuMBYyNBY+QBY6RBYyMBYyNBbi2BYuLBYuLBZOQBZKQBYuLBYuLBdWoBZCNBZGMBbqSBZCKBZCMBd2FBZKJBZKKBclxBYyKBY2LBZCHBZGHBYyKBY2JBaxlBYyKBYuKBY+FBY6EBYuKBYyKBZdeBYuFBYyGBYptBYqGBYuGBX1ZBYiFBYmGBUwpBYmJBYqJBfsy+04FiooFiooFDvlI9wqUFYeMBVObBXySBX+YBYabBY2bBZOaBZmVBZuQBZ2KBcB8BdeABeiJBb2WBdGxBbW2BZy5BYOvBWWzBUStBTSiBT2UBYiMBYiLBYWOBYaMBYmNBYiNBYePBYeOBYmOBYmNBYmQBYmQBYuOBYqOBYuQBYuRBYyNBYuOBY2QBY2QBY2NBY2OBY+PBY+PBY6MBY2NBZCNBZGNBY6LBY6MBduVBeKdBdGpBauoBZGqBXWtBV2uBUagBTyPBUp2BVZxBWhxBXyEBXmKBXuQBX2WBYOZBYqcBZCaBZeYBbCnBY+MBY6OBceoBY6MBY6NBdikBZOMBZSMBemGBZCKBZGKBd1yBZKIBZOHBcVeBZCGBZCGBa9UBY2EBY6FBYuKBYyKBYqEBYuDBYBQBYmHBYqHBYmIBYmHBYiIBYiHBVxfBYWGBYSHBUduBdFqBZGGBZKHBcBUBYyIBY6JBY2GBY6HBYuIBY2HBZZQBYuJBYyIBYqFBYuGBYqIBYuJBXNKBYuLBYuLBYeEBYaEBYuLBYuLBVZUBYWHBYaHBTlfBYWJBYWIBU19BYWLBYWKBSeNBYiMBYiLBTmWBQ75SPgF98IVi+oFj5sFlJgFmpUFnI4FnIgFmoEFlX4FjnsFiywF6YsFnIcFmoIFlX0FjnsFiHsFgX0FfIIFeogFLYsFi/s9BYh7BYF9BXyCBXqIBXqOBXyUBYKZBYebBYv3PQX71IsFhIwFhYwFiYwFiYsFhY8FhY0Fio0FiYwFh5AFh5AFi40FiY0FipEFiZEFi40Fi40FjJEFjJEFjI0Fi40Fj5EFjpAF+Ab4PgWYlgWcjwWcigWbgwWWfgWQfAWKegWCfQX7yfv5BQ75SKn5QRWOmwWVmQWalAWcjwX4WIsFnIcFmoIFlX0FjnsFiHsFgX0FfIIFeogF/CuLBYv7dwX3HakFk4sFk4wF9x57BZOIBZOJBcJuBZGGBZGHBbFiBYyJBYyKBY6FBY+FBYuKBYyJBaj7BAWLigWLigWLhAWMhAWKigWLiQV9UQWLiwWLigWHhAWIhAWLiwWKigVnXgWFhQWFhgVFYQWFiQWFiAU5dQWGigWGigU+hwWFjAWGiwVKlwWGjQWGjAVWogWGjgWFjwVUugWAmAWHmwWOmwWUmQWZlQWcjwWciQWaggW9YQW0eQXCgQXNjgXSngXFrgWlqwWUswVz5wVxpwVjoAX7DZkF+01iBYaLBYaKBYeMBYiKBYaNBYaMBYiNBYeMBYePBYeNBYmOBYiNBYmQBYiPBYuOBYmPBYuPBYqQBQ75SPch96QVi4sFi4sFbW4FioMFnlkFm24FtWEFtHIFzoEF2o8FxaMFsqoFnrMFjaoFf7MFeKwFcqQFZ5sFUJcFU44FU4MFU28F+yxcFYqPBYyRBYy5BYuLBYuLBY7cBY2RBYyRBafaBYyNBYuNBbTfBZCSBZCRBcC7BY6NBY2NBdC4BZGOBZCOBdykBYyLBYuLBeKlBZ2NBZuGBZmBBZN8BY17BYZ7BYB+BXyDBTRyBUFzBU9kBV5jBWdABXJEBYp7BZGOBZCPBdGtBZKNBZKOBc6UBZCLBY+LBcuJBY+KBY+LBc58BZCKBZCJBbt2BZKGBZKHBa5oBY6GBY+GBaNhBYyHBY2HBZpZBYyEBYyFBYlbBYuLBYuLBYmDBYmDBYuLBYuLBW9UBYuKBYqKBYaGBYeFBYqKBYqLBVhiBYaIBYaIBUNtBYOJBYOJBS+GBYeMBYaLBTmXBYqLBYqLBYSOBYOOBYuLBYqLBVasBYiPBYaNBVq8BYeQBYeQBXaxBYqOBYqOBXXHBYqSBYmTBQ75SPfP90gVg/saBYd7BYF+BXyCBXmJBXqPBX2VBYKZBYmbBZL3HAWMjQWLjQWc9wcFi4wFjI0Fms0FjI0Fi4wFnsYFjIwFi40FoL4FjIwFi40ForcFjIwFi40Fo7EFjIwFjI0FoqoFjI0FjIwFoqYFjYwF+96LBXmOBX2UBYGZBYibBY6bBZWZBZmUBZ2PBfhfiwWQigWQigWOigWPigWPiAWQiQWOiQWNiQWOhwWPhwWMiAWNiAWMhgWNhgWLiAWMiAWJhgWLhgWKiAWKiAWIhwWJhgWIiQWJiAWHiAWHiAVqeQV9gQVkaAV3dAV2bgV1aAV2YgV4WwV5UwV8TAUO+Uj3pvf2FUR0BUpaBXBZBYleBaZdBcVnBdlzBciJBeCmBb6wBaLEBYLEBWK1BTi2BVKfBdH3sxU4kQVLgAVXcwVrXQWVaQW4ZQW/bAXDeAWwlgXetQWdpgWMwwV1rwVr9wEVi4sFk4gFk4kFi4sFjIsF0GgFjokFj4kFjocFj4gFjYgFjYgFrVIFjIkFjYgFjIYFjYYFiogFjIgFiTwFi4gFi4kFiYUFioYFiYkFiogFbVwFiYkFiYgFh4gFh4cFiIoFiYkFUm4F0mYFkIcFkYcFw1IFjYcFj4gFjIcFjYgFjIYFjIcFmDoFi4kFi4kFioUFi4UFiokFiokFbDwFiYcFiogFh4cFiYgFiIgFiIkFR1sFhYgFhYcFJ2sFg4oFg4oFP40FhY0FhIsFMqcFho4FhY0FQ7gFio0FiYwFho8Fh5AFio0FiYwFZc0Fio4Fio4FipAFiZAFjI4Fio4Fjs0Fi4wFi4sFjZMFjZIFi4wFi4sFr80Fi4wFjIwFkJAFkJEFi4wFjIsF2sYFkY4Fko8FmI8FaZ8FiI4Fh40FUrwFiY0FiI4FiY8FiI8Fio4FiY4FeMsFi40Fi4wFipIFi5IFi4wFi4wFjpIFjZIFjIsFjI0Fu9IFjo4FjY4Fj44Fj44Fjo0Fjo0F0KsFkYwFkY0F15gFkIsFkYwF7YQFDvlI+Fr4mBWVnQV8xwVwqwVfoAVIkwVHgwVTdAVnagV+XwWYYAWvaQXDdAXMhAXMmgW8qgVf/BoVi4oFZ0IFgX4FfIIFeYgFeo8FfZUFgpkFiJsFj5sFr9QFtuoFwPcXBYuLBYuMBZKcBT55BYOKBYKLBTuUBYWNBYWMBUWoBYSPBYSQBVm6BYqNBYmMBYiQBYeQBYuOBYqNBXfNBYqOBYqOBYyQBYqQBYyOBYyPBZ/NBYyNBYuNBY+QBY6QBY2NBYyNBb26BZKPBZKQBdGnBZGMBZGNBduVBZGKBZGMBduBBZKJBZKJBcdvBYyKBYyLBZGGBZGHBYuKBYyKBbNcBYyKBYyKBY6FBY6F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iAWZggWVfQWPewWHewWBfQV9ggV6iAX8FYsFi/t4BffQiwWdiAWZggWVfQWOewWIewWBfQV9ggV5hwUO+Uj4fve0Ffs1iwV6jwV9lAWBmQWImwWOmwWVmQWZlAWdjgX3bIsFj4oFkIsFj4kFj4oFj4kFj4kFjogFj4kFjYgFjocFjYgFjYcFjIcFjYcFi4cFjIcFiocFi4cFXvtaBYqJBYuIBYiGBYiGBYmJBYqJBUtGBYmKBYqJBYWIBYaHBYmKBYmKBTpwBYqLBYuKBYOKBYOKBYqLBYqLBTWSBYSNBYSNBTmuBYWOBYaOBUfCBYaQBYaQBV/QBYuMBYqMBYmRBYiSBYuMBYuMBXf3UgWLkQWLkgWx90IFjIwFi40FjpEFjpEFjIwFjI0FzdsFjIwFi4wFkZAFkY8FjIwFjIsF37QFi4sFi4sFk40Fk44Fi4sFi4sF9xeVBZKKBZGLBfcQcQWbhQWXfwWRfAWLegWEfAV+gAV7hQV5iwX7CKMF+weCBUhrBVZJBWj7MwWe+0IFrlUFxFwF0W4Fz4UFx6AFvL8FDvlI+H74OhWL95sFj5sFlJkFmpQFnI8FnIcFmoIFlX0FjnsFi/0RBYh7BYF9BXyCBXqIBXqOBXyUBYKZBYebBYv3tgX8DosFi/u2BYd7BYJ9BXyCBXqIBXqOBXyUBYGZBYibBYv34AWL98UFjpsFlZkFmpQFnI8FnIcFmoIFlH0Fj3sFi/ubBQ75SPfu+UEVi/0RBYh7BYF9BXyCBXqIBXqOBXyUBYGZBYibBYv5EQWOmwWVmQWalAWcjwWchwWaggWVfQUO+Ui/9z4Vio4Fia8FjpsFlJkFmZUFnY4FnIkFmoIFlX4Fj3sFjGsFkXIFlXYFmXkFnX0FunoFzoQFu5EFwp8FoJkFnJ0Fl6EFk70FivhxBY6bBZWZBZqUBZyPBZyHBZqCBZR+BY96BYz8dAWKiAWLiAWCTgWJhQWJhAV5awWHhgWIhwVycQWHiAWIiAVtdwWGiQWGiAVKcwWGigWFigVRhAWGiwWGiwU8kwWFjAWFjAVRoQWFjwWFjQVvoQWHjwWHjgV2pQWJkAWIjwV+qAWKkAWJjwWEqwUO+Uj3Uff3FfsBOQWL+3UFiHsFgX0FfYIFeYgFeo4FfZQFgZkFh5sFi/kRBY+bBZWZBZmUBZyPBZ2HBZmCBZV9BY57BYv7xAX4Hve7BZuSBZyNBZyGBZiABZR8BYx7BYZ7BX9/Bfui+14F9+b70AWVfQWPewWHewWCfQV8ggV6iAV6jgV8lAUO+Uj3DOUV+CuLBZyIBZmCBZV9BY97BYd7BYF9BX2CBXqIBfxYiwV6jgV9lAWBmQWHmwWL+REFj5sFlZkFmZQFnI8FnYcFmYIFlX0FjnsFDvlI+KH5WxWOjwWNjQWNjQWRjQWPjgWOjAWOjAWRjAWRjAWOigWOiwWQiQWRigWNigWOigWQhwWPiAWNiQWNiQWOhgWOhgWMiQWMiAWLhgWNhQWL/REFh3sFgX0FfYIFeogFeY4FfZQFgZkFiJsFi/h1BftD+6wFiYkFiokFhocFh4cFiYkFiYoFhYkFhYgFiYsFiIoFhYwFhYoFiIwFiYsFhY4FhY0FiYwFiY0Fh48Fho8Fio0FiY0F+0P3rAWL/HUFiHsFgX0FfYIFeYgFeo4FfZQFgZkFh5sFi/kRBY2RBYuQBYyOBYyNBY6QBY6QBY2NBY2NBY+OBZCPBY6MBY2MBZGMBZCNBY6LBY6MBZGKBZGKBY6KBY6KBY+IBZGJBY2JBY2JBY6HBY+HBfdw+/UF93D39QUO+Uj4e/dPFYT4hgWOmwWVmQWZlAWcjwWdiAWZggWVfQWPewWU/REFioYFi4cFiocFiocFiYgFiYcFiIgFiIcFiIkFiIgFh4kFh4kFh4oFh4oFhosFh4oFhosFh4sFh40Fh4wFh40Fh4wFiI4Fh44FiI4FiI4F/BT4oQWL/IkFh3sFgn0FfIIFeogFeo4FfJQFgZkFiJsFi/kRBYyPBYuPBYyPBYyPBY6PBYyOBY6OBY6PBY6NBY6OBZCNBY+NBY+MBY6NBZCLBZCMBY+KBY+LBY+JBZCKBY+JBY6KBY+IBY+IBY2IBY6IBQ75SPgblBWFiAWJiwWJiwUzgAWKiwWKigWEjAWDjAWKiwWKiwUypQWJjAWIjAWGjgWGjgWJjQWJjAU62gWJjgWIjgWJjwWIjwWLjwWJjgVP96AFi40Fi4wFi5IFi5IFjIwFi40FxPddBY2PBYyPBY6OBY2PBY6NBY6PBdHEBYyMBYyMBZKOBZGOBY2LBYyMBfcOqQWPiwWPjAWQigWPjAWPiQWPiwX3B2cFjIoFjYsFkYcFkYgFjIoFjYkFzkoFjYgFjYkFjocFjYYFjIgFjIgFxfuJBYuDBYuDBW/7LgWIhAWJhQVYMgWKiQWLigWGhgWGhgWKigWKigUwTgWJigWKigUg0BXOkwXUvAW11gWl9x8FVvd1BVm8BTCoBShzBVdgBVj7RgXD+4sFy00FDvlI93j3xxWJigX7AooFi/uVBYd7BYF9BX2CBXqIBXmOBX2UBYGZBYibBYv5BQWMkQWMkgWMjAWLjQWPkQWOkAWNjAWMjQWQjwWRjwWNiwWMjAWSjQWRjAX3HZcFjosFj4sF9w6EBY+KBZCLBdp2BY+KBY+KBa96BZCIBZCIBcRbBYuKBYuLBZCFBZCEBYuLBYyLBaRXBY2EBY2EBZA/BYuJBYuJBYqFBYqFBYqJBYuJBXRcBYqJBYqJBYeHBYeFBYmKBYqKBWhxBYWIBYWIBVN2BYeKBYeJBTp8BYiLBYmLBfsCggWF4BX1kwXWmQW5nAWgmwWZpwWGxAV6sAVesQVxlwVEnQX7BpIFL4MFi/uJBQ75SPiTtRXQOQWTfAWNewWFewWAfwV7gwV6igV6kAV+lQVRzwVUYAWIigWJiQWGiQWGiAWHiwWIigU1fgWJjAWJigWEjAWFiwWJjAWIiwU0qQWJjAWIjAWGjgWGjgWJjgWJjAU75AWKjgWJjQWJkAWIkAWLjgWKjQVQ98MFi4sFi4sFi5MFi5MFi4sFi4wFw/d2BY2OBYyPBY2PBY6PBY2OBY2OBdDLBY2MBYyNBZGOBZGOBY2MBY2MBfcLrAWRjAWRjAWNigWOjAWRiQWRigX3BGMFjYoFjooFj4cFkYgFjIkFjYoFzUEFjIkFjYkFjYYFjoYFjIgFjIkFw/uoBYuEBYuEBW/7QgWJhQWJhQX7K0AVMfUFg5oFipsFkJsFlpcFm5MFnIwFnIYFmIEF0zcFmqkFpfc1BVb3lgVZxAU0qgUucQVXWgVY+2IFwvuvBctDBcx2BcmUBQ75SPfz+EoV3JcFrpgFoJsFlqIFjLMFfbkFgZYFd5gFcZUFQZsF+xSQBfsofgWL+10F90g8FftIhQWL+7cFh3oFgn4FfIEFeogFeo4FfJUFgZgFiJwFi/j8BYyRBYyRBYyNBYuNBY+QBY6RBY2MBYyNBZGOBZCPBY2MBY2MBZGMBZKNBfdUmwWOiwWOjAX3G4UFj4oFj4sF3HoFj4kFj4sFrX0Fj4kFj4kFp3kFj4cFkIgFoHQFi4oFjIsFjoQFj4UFi4oFjIoFnU0FjIUFjIUFiVQFi4sFiYMFiYMFi4sFeWQFiooFi4oFhoUFhoUFiosFi4oFaXAFhIgFhYcFXXoFhooFhokFNX8F94H7rQWTfQWNegWGewV/fwV8gwV5igV6kAV+lgX7nPfLBYOaBQ75SOXBFYaOBYqNBYiNBYmQBYeQBVr3AQWHnAWOmwWVmQWZlAWcjgWdiAWZggWVfgW3KgXNaQX3IIcF7bgFq/AFdsUFS68F+4ezBYiNBYiLBYaNBYaNBYmOBYiMBUu+BYiPBYiOBYmOBYiOBYqQBYmOBXrHBYuPBYqOBYuQBYuPBYyPBYyPBbT3DAWOkAWNkAWNjQWMjQWQjwWPjwXvzAWRjgWQjgWOiwWNjAWRiwWRjAX3R4IFjYoFjIwFkogFkooFjIoFjYoFkIcFkYcFjIoFjIoF1zAFknwFjXoFhXwFgH4Fe4QFeYoFe5AFfpYFTNYF+yOTBUBaBWssBZVoBbZoBfeDYwWTiQWTiAXfWgWQhwWQhwWNiQWMigWOhQWOhgWrNgWLhgWNhwWLhwWLiAWKhgWKhgVi+xgFi4oFiooFh4UFiIQFiosFiooFhYYFhYcFiosFiooF+xJRBYmLBYqKBYSKBYSJBYmLBYmLBfs2jwWJjAWJiwWFjQWEjAWJjAWJjAUzuQUO+Uj3yflsFfeiiwWchwWaggWVfQWOewWIewWBfQV8ggV6iAX7dYsFi/znBYh7BYF9BX2CBXmIBXqOBXyUBYKZBYebBYv45wX7hYsFeo4FfJQFgZkFiJsFjpsFlZkFmpQFnI8FDvlI+HT3hxWQ+E4Fj5sFlZkFmZQFnY4FnIcFmYIFlX0FjnsFhvxQBYqIBYyJBYFHBYqHBYqGBXdYBYmIBYmHBX53BYiHBYiIBW1sBYWHBYaHBVhxBYSJBYSJBU2BBYWLBYSLBTOUBYaNBYWMBUWlBYWPBYWOBVyvBYeQBYWQBWjCBYiRBYiRBXnSBYqPBYqOBYTsBYuNBYuMBYr39wWOmwWVmQWalAWcjwWchwWaggWVfgWOegWM+/UFki8Fm00Fp2EFr28FxXYF14IFu5MFsJ4FoqIFk5cFnLYFDvlI99H3NRX3a/ivBZSZBZqVBZyPBZyIBZqCBZV+BY97BYh6BfuS/REFi4sFi4oFhoUFh4QFi4sFiooFhIcFhYYFiosFi4sFg4kFg4oFiosFi4sFg4wFgowFi4wFiosFhI8FhI8Fi4sFi4wFhpEFhpEFi4wFi4sF+7j5EgWHmwWOmwWVmQWZlAWcjwWciAWaggWVfQUO+Uj4dvdYFdf4gwWQmwWXlwWbkgWcjAWchgWYgAWTfAWMegUq/REFiYcFioYFiYgFiocFiIgFiIcFiIkFiIgFh4kFh4kFh4oFh4kFh4sFhooFh4sFh4sFho0Fh4sFh40Fh40FiI4Fh40FiI4FiI4FiY8FiI4F+0b3/wX7Ofv2BYiHBYiGBYmJBYmJBYaIBYeHBYiKBYiKBYaKBYWJBYiLBYiLBYWMBYaLBYiNBYiLBYaOBYaOBYmNBYiNBYiPBYiPBYqOBYmOBYqQBYmQBTv5CQWNnAWTmQWYlgWckAWcigWbhAWWfgWRewXH/G8F9x/3vgWPkAWPkQWMjAWMjAWRjwWRjwWNiwWMjAWSjAWSjQWNiwWMiwWSiQWTigWMiwWMigWRhwWSiAWMigWMigWPhQWPhQUO+Uj3/Pf/FfeZ+7QFlH0FjXsFhnsFgH4FfIMFeYkFeo8FfpYF+5D3qQX7kPupBX6ABXqHBXmNBXyTBYCYBYabBY2bBZSZBfeZ97QF+5/3uwWCmQWJnAWQmwWWlwWalAWdjAWchwWYgQX3lvuxBfeW97EFmZUFm48FnYoFmoIFln8FkHsFiXoFgn0FDvlI9+j4EhWV++EFiHsFgn0FfYEFeogFeY0FfJQFgZkFh5sFgffjBfud96cFgpkFiJsFj5sFlpkFmpMFnI4FnIcFmYEF94n7kQX3k/eQBZqVBZyPBZyIBZqCBZV+BY96BYh7BYJ9BQ75SPci5RX4KosFnYgFmYIFlX0FjnsFiHsFgX0FfYIFeYgF/IKLBYWMBYaLBYiMBYeMBYeOBYaNBYmNBYiNBYiPBYePBYqOBYmOBYqQBYmPBYuPBYuOBYyQBYuQBYyOBYyOBY6PBY2QBfhP+M4F/CqLBXmOBX2UBYGZBYibBY6bBZWZBZmUBZ2PBfiCiwWRigWQigWOigWPigWPiQWQiAWNiQWOiQWOhwWPhwWMiAWNiAWMhwWNhgWLiAWLhwWKhgWLhgWKiAWKiAWIhwWJhgUO+Uj3h3QV9zaLBZyIBZmCBZV9BY97BYd7BYF9BX2CBXqHBftjiwV5jwV9lAWBmQWImwWL+Z8FjpsFlZkFmZQFnY4F92OLBZyIBZmCBZV9BY97BYd7BYF9BX2CBXqIBfs2iwUO+Ujw+VgV+HH9YwWRfAWKegWEfAV+gAV7hQV5jAV7kQV/lwX8cfljBYWaBYycBZKaBZiWBZuRBZ2KBZuFBQ75SPhWShWHewWBfQV9ggV6hwX7Y4sFeY8FfZQFgZkFiJsFjpsFlZkFmZQFnY4F9zaLBYv5SwX7NosFeY4FfZQFgZkFiJsFjpsFlZkFmZQFnY4F92OLBZyIBZmCBZV9BY97BQ75SPeo+WQVko8FjIsFjIwFkowFk40FjIoFjIwFk4kFkooFjIoFjIsFkocFkYcF9577ggWVfgWPewWIegWBfQV9ggV6hwV6jgV8lAX7f/dmBft/+2YFfIIFeogFeo8FfZQFgZkFiJwFj5sFlZgF9573ggUO+UiL+wEV+O6LBZyIBZqCBZV9BY57BYh7BYF9BXyCBXqIBfzuiwV6jgV8lAWBmQWImwWOmwWVmQWalAUO+Uj4POoVxcIFi/eQBVLBBVCnBS+LBVBvBUxQBWsvBYtQBaswBcpPBcdvBeaLBfcIZhWHiAWFhwVAZwWKigWJigWEigWFiQWJjAWJigX7BYsFiYwFiYoFhI0FhYwFiYwFiYwFQK8FhY8FhY8FP9MFiowFiowFiJEFh5EFiowFiowFZvYFipIFipIFi9IFjJIFjJEFsPcABYyNBYyMBY+RBY6RBYyMBYyMBdfTBZGPBZGPBdeuBYyMBY2MBZKMBZKNBYyKBY2MBfcFiwWMigWNjAWSiQWSigWMigWNigXWaAWQhwWQiAWLjwWPnAWUmAWalQWcjgWciAWagQWVfgWOegWL/IoFiHsFgX4FfIEFeogFeo4FfJUFgpgFh5sFDvlI9xOvFYaOBYuKBYd6BYF+BX2CBXqHBXmPBX2UBYGYBYicBYv5OAWOmwWVmQWZlAWdjgWciAWZggWVfQWPewWL+3YFkI4FkY8F1asFjIsFjIsFko0Fk40FjIoFjIwF9wSLBYyLBYuLBZOJBZOJBYyLBYuLBddrBZCHBZKIBdZKBYyKBY2KBY6FBY+GBYyJBYyKBbApBYyEBYyEBYtLBYqEBYqDBWYrBYqKBYqJBYeGBYiFBYmKBYqJBUBLBYWIBYWHBUBqBYqLBYqLBYSJBYOJBYqLBYqLBfsEiwWKjAWKigWDjQWEjQWKiwWKiwVBrAWA9w0VwlwFxnEF54sFx6UFycAFqdoFi70FbdsFTcAFT6QFL4sFUHIFVFwFDvlI+DLqFczNBZqVBZyPBZyIBZqDBZV9BY97BYl7BYF9BUVDBYWHBYWHBUZmBYiLBYmJBYWKBYWJBYiMBYmKBSGLBYmMBYiKBYWNBYWMBYmNBYmLBUSwBYWPBYWPBUXTBYqMBYqMBYeRBYeRBYuMBYqMBWn2BYqRBYqSBYvSBYyRBYySBa33AAWMjAWLjAWPkQWPkQWMjAWMjAXR0wWRjwWRjwXSrwWNiwWNjQWRjAWSjQWNigWNjAX1iwWNigWNjAWSiQWRigWNiQWNiwXRZwWRhwWRhwXRQwWVfQWNewWHewWBfQV8gwV6iAV6jwV8lQVKzQVWpgU3iwVVcAVRUAVtLgWLUAWoLwXGUAXCbwXdiwUO+Uj4PfUVwroFi/dxBVS6BVCkBS+LBU9yBU1WBW07BYtZBak8BclWBcdxBeeLBfcGYhWGiAWFhwVBagWKiwWKiwWEiQWDiQWKjAWKigX7BIsFiosFiosFhI0Fg40FiosFiosFQKwFhY8Fho4FP8sFio0FiYwFiJEFh5AFio0FiowFZusFipMFipIFi8sFjJIFjJIFsO0FjIwFjI0Fj5AFjpEFjYwFjIwF18wFkY4FkI8F16sFi4sFjIsFk40Fk40Fi4sFjIsF9wSLBYyKBYyMBZOJBZKJBYyLBYyLBdVrBZGHBZCIBYv3dgWPmwWVmQWZlAWcjgWdiAWZggWVfQWOewWL/TgFiHoFgX4FfYIFeYcFeo8FfZQFgZgFh5wFDvlI9x74IBV8YQX4GIsFg5QFZs0FbaYFS6cFJosFSm8F93r7/BXXzgWZlAWdjgWchwWZggWVfQWNegWIewWAfgU6QwWGiAWFhwU8ZgWJiwWKigWEigWEiQWJiwWKiwX7DYsFiosFiosFg40FhIwFiowFiosFOrAFhY8FhY4FO9MFiYwFiowFh5EFh5AFi40Fio0FY/YFipIFipIFi9IFjJIFjJIFs/cABYyNBYuNBY+QBY+QBYyNBY2MBdvTBZKOBZCPBdyvBYyLBYyMBZOMBZKNBYyLBYyLBfcNiwWMiwWMiwWTiQWSigWMigWMiwXbZwWQhwWRiAW1ZwWPhQWQhQWyRAWQewWJegWDfQV/ggWUhQWVfgWOegWIewWBfQV9ggV5iAX8SYsFi3UFrDAFz08FzG4F8IsFDvlI97n4VhWL/CQFiHsFgX0FfIIFeogFeo4FfJQFgZkFiJsFi/gkBfsGiwV6jgV8lQWCmAWHmwWPnAWUmAWalQWcjgX3BosFi8AFi40Fi40FjZEFjJEFjY0Fi4wFwOoFkZEFkJEFi4sFi4wFk44Fko8F9asFkowFkowF9YsFnIgFmoIFlX0FjnsFiHsFgX0FfIIFeogFKIsFOXIFZEUFi2EF9zuLBZyIBZqBBZV+BY56BYh7BYF+BXyBBXqIBQ75SPg99yMVwroFi/dxBVS7BVCkBS+LBU9yBU1WBW06BYtaBak7BclWBcdxBeeLBfcGYhWGiAWFhwVBagWKiwWKigWEigWDiQWKiwWKiwX7BIsFiosFiosFg40FhIwFiowFiosFQKwFhY8FhY4FQMwFiowFiYwFiJEFh5AFio0FiowFZuwFipIFipIFi8wFjJIFjJIFsOwFjI0FjI0Fj5AFjpAFjY0FjIwF1swFko4FkI8F16sFi4sFjIwFk4wFk40Fi4sFjIsF9wSLBYyLBYyLBZOJBZKKBYyKBYyLBdVrBZGHBZCIBYuLBY+cBZWYBZmVBZyOBZ2IBZmBBZV+BY56BYv8mAWKhAWKhAVmKgWKigWKiQWHhgWIhQWJigWKiQVlawWFhwWFhwVBbAWKigWKiwWEiQWDigWKiwWKiwX7BIsFiosFi4sFg4wFg40FiosFi4sFP6sFho8FhI8FQMsFio0FiYwFiJAFh5AFio0Fio0FZuwFiZwFj5sFlZgFm5QFnI0FnIcFmYEFlH0FrDQFyVYFx3EF54sFxqUFpKAFqdoFDvlI+L34CRWNhAWL+9AFiHsFgX0FfIIFeogFeo4FfJQFgZkFiJsFi/fIBW7TBVqfBSyLBU1yBS49BYv7vQWIewWBfQV8ggV6iAV6jgV8lAWBmQWImwWL+SwFjpsFlZkFmpQFnI4FnIgFmoIFlX0FjnsFi/uSBbKsBZGOBZGPBdeqBYyLBYuMBZOMBZONBYyLBYuLBfcGiwWMiwWLiwWTiQWTigWMigWLiwXXbAWLiwWLiwWShgWShwWLigWMiwWPhAWQhQWLigWLiwWxLAUO+CT3NPmIFduLBZyIBZqCBZV9BY57BYh7BYF9BXyCBXqIBTuLBXqOBXyUBYGZBYibBY6bBZWZBZqUBfH7mRWL/E4FiHsFgX0FfIIFeogFeo4FfJQFgZkFiJsFi/hOBY6cBZWYBZqVBZyOBZyIBZqBBZV+BQ75SPgV+YgVyYsFnIgFmoIFlX0FjnsFiHsFgX0FfIIFeogFTYsFeo4FfJQFgpkFh5sFj5sFlJkFmpQF+wn+MhWGigWIjQWHiwUpqQV8kwWAmAWGmwWNmwWUmQWZlgWbjwWdiQXhcQXpoQWhyQWL+I4Fj5sFlJkFmpQFnI8FnIcFmoIFlX0FjnsFi/yVBYqEBYqFBWswBYiGBYmHBYmIBYmIBYeIBYeIBYiJBYiJBYaKBYaJBfsXbQWIiwWHigUO+Uj3f/eMFfsRLwWLIQWIewWBfQV8ggV6iAV6jgV8lAWCmQWHmwWL+SwFj5sFlJkFmpQFnI4FnIgFmoIFlX0FjnsFi/xXBff495sFm5IFnIwFnIYFmIEFk3wFjHoFhnwFgH4F+2v7MgX3mPtwBZV+BZB7BYh7BYJ9BX2BBXqHBXqNBXyTBQ74JPeJ+WMVi/0+BYh7BYF9BXyCBXqIBXqOBXyUBYGZBYibBYv5PgWOmwWVmQWalAWcjwWchwWaggWVfQUO+Uj43/iYFZCGBYuKBYyJBYyFBY2EBYuKBYyJBYv8WwWHewWBfQV9ggV6iAV5jgV9lAWBmQWImwWL+EgFfJYFXIsFdHgFVDEFi/vmBYh7BYF9BX2CBXmIBXqOBX2UBYGZBYebBYv36gVo4wV1nAVdiwVzeAVVMQWL++YFh3sFgX0FfYIFeogFeY4FfZQFgZkFiJsFi/h9BY6cBZWYBZmVBZ2OBZyIBZmBBZV+BY2ABa2mBZGOBZGPBY2LBYyMBZKLBZKNBduLBZKJBZKLBYyKBY2LBZGHBZGIBbZoBYyJBY2KBY+GBY+GBYuJBY2JBZN1BZynBZCQBZCRBbWtBZGPBZGPBY2LBYyMBZKLBZKNBdyLBZKJBZKLBYyKBY2LBZGHBZGIBbZoBYyKBYyKBQ75SPi++B0VjIUFi/vyBYh7BYF9BXyCBXqIBXqOBXyUBYGZBYibBYv36wVt3QVaoQUtiwVPcAUsMwWL++AFiHsFgX0FfIIFeogFeo4FfJQFgZkFiJsFi/h9BY6cBZWYBZqVBZyOBZyIBZqBBZV+BY56BYtlBbCtBZKPBZCPBdiuBYyLBYyMBZKMBZONBYyLBYyLBfcGiwWMiwWNiwWSiQWSigWMigWNiwXWaAWMiwWLiwWShgWRhgWMiwWLiwWPhAWPhAWLiwWLiwWyIQUO+Uj37Ph4FTWLBVRwBU9PBWwvBYtQBaowBcdPBcNvBeCLBcKnBcfHBarmBYvGBWznBU/HBWH3AxWNjAWRiQWSigWNiQWNiwXTaAWRhgWRhwXTQwWLigWMiwWPhAWPhQWLigWMigWv+wAFjIUFjIQFi0QFioQFioUFZyAFiooFi4oFh4QFh4UFiosFi4oFQ0MFhYcFhYcFQ2YFiYsFiYkFhYoFhIkFiYwFiYoF+wCLBYmMBYmKBYSNBYWMBYmNBYmLBUOwBYWPBYWPBUPTBYuMBYqLBYeRBYeSBYuMBYqMBWf2BYqRBYqSBYvSBYySBYyRBa/3AAWMjAWLjAWPkQWPkgWMiwWLjAXT0wWSjwWQkAXTrgWNiwWNjQWSjAWRjQWNigWNjAX3AIsFDvlI9xTXFYWPBYv7dQWHewWCfQV8ggV6iAV6jgV8lAWBmQWImwWL+TMFjpwFlZgFmpUFnI4FnIgFmoEFlH4Fj3oFi4sFkY8FkI4F1asFjIsFjIwFk4wFko0FjIsFjIsF9wSLBYyLBYuLBZOJBZOKBYyKBYuLBdZsBZGHBZGHBdZLBY2KBYyJBY+GBY+GBYuJBY2JBa8rBY2EBYyDBYtLBYqEBYmEBWYsBYqJBYuJBYeGBYeFBYqKBYmKBUBLBYWHBYaIBUBqBYqLBYqKBYOKBYSJBYqLBYqLBfsEiwWKiwWKiwWDjQWEjAWKjAWKiwVBrAWA9w0VwlwFxnEF54sFx6UFyb8FqdoFi7wFbdsFTb8FT6QFL4sFUHIFVFwFDvlI+D33JRXCugWL924FVLoFUKQFL4sFT3IFTVcFbTsFi1oFqTwFyVcFx3EF54sF9wZiFYaIBYWHBUFqBYqLBYqLBYSJBYOJBYqMBYqKBfsEiwWKjAWKigWEjQWDjQWKiwWKiwVArAWGjgWFjwVAywWJjAWKjQWHkAWHkAWLjQWKjQVm6gWJkgWKkwWLywWMkgWNkgWw6wWMjQWLjQWPkAWPkQWMjAWNjAXWywWRjwWRjwXWqgWLiwWMjAWTjAWTjQWLiwWMiwX3BIsFjIsFjIsFkokFk4oFjIoFjIsF1WwFkIcFkYgFi4sFj5sFlJkFmpQFnI4FnIgFmoIFlX0FjnsFi/00BYh7BYF9BXyCBXqIBXqOBXyUBYKZBYebBQ75SPfp+MsVk40F9yaLBZyIBZmBBZV+BY96BYd7BYF+BX2BBXqIBfsdiwU4bgU5TwViNAWL+6MFiHsFgX0FfYIFeYgFeo4FfZQFgZkFh5sFi/h9BY+cBZWYBZmVBZyOBZ2IBZmBBZV+BY56BYtWBdTABZGNBZGPBeutBQ75SO6nFYSQBYuLBYuMBYeSBYeSBXLSBYmcBY+bBZaYBZuTBZyNBZyGBZmBBZN9BZ9TBbt0BfWLBeSsBbuhBYuoBVHCBfsBygX7BIsFiYsFiosFhI0FhIwFiowFiYwFQK8FhY8Fho8FiowFiYwFiJEFh5EFi4wFio0FipEFipIFi9IFjJMFjZMFi4sFi4wFkJEFj5IF1tMFjIsFjIwFkY8Fko8FjIsFi4wF764Fk4wFk40F9xGLBYyKBY2MBZKJBZKKBYyKBY2KBdZoBZmBBZN8BY17BYd7BYB+BXyDBXmJBXqPBUqqBSGLBTluBVRWBYtuBbN4BfcGiwWOigWPiwWQiQWQigWOigWPiQX3EEQFj4cFkIgF1kQFj4QFkIQFi4sFi4sFjYMFjIMFi0MFioUFioQFiooFi4kFh4UFiIYFiYoFiokFhYgFhoYFQGgFiYsFiYkFJ2cFg4oFg4kF+xGLBYmMBYmKBYWNBYSMBYmMBYqMBUCvBQ75SPdd+DEV+wyLBXqOBXyUBYGZBYibBY6bBZWZBZqUBZyOBfcMiwWL9zcFjpsFlZkFmpQFnI4FnIgFmoIFlX0FjnsFi/s3BfdDiwWciAWaggWVfQWOewWIewWBfQV8ggV6iAX7Q4sFi/uCBbNMBeF0BfOLBZyHBZqCBZV9BY57BYh7BYF9BXyCBXqIBfsCiwWFjAWFjAX7AqgFg48FhI4Fi4sFiowFhpEFhZAFVOIFio4FiY4FipAFiZAFjI4Fio4FDvlI+GX3SRWL9+AFjpsFlZkFmpQFnI4FnIgFmoIFlX0FjnsFi/x9BYh6BYF+BXyBBXqIBXqOBXyVBYGYBYicBYuyBWZpBYWHBYWHBT9oBYmKBYqKBYSKBYSJBYmMBYqKBfsGiwWJjAWKigWEjQWEjAWJjAWKjAU/rgWEkAWEkAWLiwWLiwWHkgWHkgVk9AWKkgWKkQWL9/IFjpsFlZkFmpQFnI4FnIgFmoIFlX0FjnsFi/vrBak6Bb10BeeLBcinBQ75SPfB9xcV92j4JgWWmAWakwWcjQWchwWZgQWUfQWNegWHewX7kfxyBYiHBYiGBYiJBYqJBYaIBYaIBYiKBYiKBYaKBYWKBYiLBYiLBYWMBYaMBYiMBYiMBYaOBYaOBYqNBYiNBYiQBYiPBfuQ+HIFhpsFjZwFlJkFmZUFnI8FnIkFmoMFln4FDvlI+Fj3TRX29+kFk5oFmZUFm5AFnYoFmoMFl34FkHsFiXsF+yr8cgWIhwWKhwWIiAWKhwWHiQWIhwWHiQWIiQWGiQWHiQWHiwWHigWHiwWGiwWHjAWHiwWHjQWGjQWIjQWHjQWIjwWIjQWJjwWIjgWKjwWIjwUg9+kFIPvpBYiHBYqHBYiIBYmHBYiJBYiHBYeJBYiJBYaJBYeJBYeLBYeKBYeLBYaLBYeMBYeLBYeNBYaNBYiNBYeNBYiPBYiNBYmPBYiOBYqPBYiPBfsq+HIFiZsFkJsFl5gFmpMFnYwFm4YFmYEFk3wF9wD76QX29+kFjY8FjI8Fjo4FjY8Fj44Fjo4Fjo0Fj40Fj40Fj40Fj4sFj4wFkIsFkIsFj4oFj4sFj4kFkIkFjokFjokFjogFj4gFjYcFjogFjIcFjYcFDvlI+AL3pxX3evtlBZV+BY97BYh7BYF9BX2BBXqIBXmOBX2UBft992YF+337ZgV9ggV5iAV6jgV9lQWBmQWImwWPmwWVmAX3evdlBft692UFgZgFh5sFjpwFlZgFmZUFnI4FnYgFmYMF9337ZwX3ffdnBZmTBZ2OBZyIBZmBBZV+BY56BYd7BYF+BQ75SOj7TxWDigWLiwWLiwVjiwV6jgV8lAWBmQWImwWOmwWVmQWalAWcjgWqiwXLpQXOwQXJ7gX7dfg4BYebBY2bBZSaBZiVBZyPBZ2JBZqDBZZ+BfdX/AEF91n4AQWWmAWakwWdjQWbhwWZgQWUfAWNewWGewX7gfxMBYuKBYqJBT37EQWGhQWGhgU9TAWEiAWGhwU8bAWLiwWLiwUO+Uj3UtkV98+LBZ2IBZmCBZV9BY57BYh7BYF9BX2CBXmIBfwsiwWEjAWFiwWJjQWIiwWGjgWGjgWJjQWJjAWHkAWHkAWKjQWKjQWKkQWJkAWLjgWLjQWMkQWLkQWNjQWLjQWPkAWOkQX38vguBfvPiwV5jgV9lAWBmQWImwWOmwWVmQWZlAWdjgX4LIsFkooFkYsFjYoFjooFkIgFkYgFjIkFjYoFj4YFj4YFjIkFjIkFjIUFjYYFi4gFi4kFioUFi4UFiYkFi4kFh4YFiIYFDgAAAAK0AAACtAAAArQAAAK0AAACtAAAArQAAAK0AAACtAAAArQAAAK0AAACtAAAArQAAAK0AAACtAAAArQAAAK0AAACtAAAArQAAAK0AAACtAAAArQAAAK0AAACtAAAArQAAAK0AAACtAAAArQAAAK0AAACtAAAArQAAAK0AAACtAAAArQAAAK0AAACtAAAArQAAAK0AAACtAAAArQAAAK0AAACtAAAArQAAAK0AAACtAAAArQAAAK0AAACtAAAArQAAAK0AAACtAAAArQAAAK0AAACtAAAArQAAAK0AAACtAAAArQAAAK0AAACtAAAArQAAAK0AAACtAAAArQAAAK0AAACtAAAArQAAAGQAAACtAAAArQAAAGQAAACtAAAArQAAAK0AAACtAAAArQAAAK0AAACtAAAArQAAAK0AAACtAAAArQAAAK0AAACtAAAArQAAA==";var J2=ct(function(nEe,oEe){(function(e,t){typeof nEe==="object"&&typeof oEe<"u"?oEe.exports=t():typeof define==="function"&&define.amd?define(t):(e=typeof globalThis<"u"?globalThis:e||self,e.svgson=t())})(nEe,function(){/*!
* Determine if an object is a Buffer
*
* @author Feross Aboukhadijeh <https://feross.org>
* @license MIT
*/var e=function(U){return U!=null&&(t(U)||n(U)||!!U._isBuffer)};function t(U){return!!U.constructor&&typeof U.constructor.isBuffer==="function"&&U.constructor.isBuffer(U)}function n(U){return typeof U.readFloatLE==="function"&&typeof U.slice==="function"&&t(U.slice(0,0))}var o=Object.prototype.toString,i=function(X){if(typeof X>"u")return"undefined";if(X===null)return"null";if(X===!0||X===!1||X instanceof Boolean)return"boolean";if(typeof X==="string"||X instanceof String)return"string";if(typeof X==="number"||X instanceof Number)return"number";if(typeof X==="function"||X instanceof Function)return"function";if(typeof Array.isArray<"u"&&Array.isArray(X))return"array";if(X instanceof RegExp)return"regexp";if(X instanceof Date)return"date";var V=o.call(X);if(V==="[object RegExp]")return"regexp";if(V==="[object Date]")return"date";if(V==="[object Arguments]")return"arguments";if(V==="[object Error]")return"error";if(e(X))return"buffer";if(V==="[object Set]")return"set";if(V==="[object WeakSet]")return"weakset";if(V==="[object Map]")return"map";if(V==="[object WeakMap]")return"weakmap";if(V==="[object Symbol]")return"symbol";if(V==="[object Int8Array]")return"int8array";if(V==="[object Uint8Array]")return"uint8array";if(V==="[object Uint8ClampedArray]")return"uint8clampedarray";if(V==="[object Int16Array]")return"int16array";if(V==="[object Uint16Array]")return"uint16array";if(V==="[object Int32Array]")return"int32array";if(V==="[object Uint32Array]")return"uint32array";if(V==="[object Float32Array]")return"float32array";if(V==="[object Float64Array]")return"float64array";return"object"};function r(U,X){return X={exports:{}},U(X,X.exports),X.exports}var s=r(function(U){(function(){function X(V,W){if(typeof W!=="function")return V;var j={};for(var q in V)if(Object.prototype.hasOwnProperty.call(V,q))j[W(q,V[q])||q]=V[q];return j}if(U.exports)U.exports=X;else window.rename=X})()}),a=function U(X,V){var W=i(X);if(W!=="object"&&W!=="array")throw Error("expected an object");var j=[];if(W==="object")X=s(X,V),j={};for(var q in X)if(X.hasOwnProperty(q)){var ne=X[q];if(i(ne)==="object"||i(ne)==="array")j[q]=U(ne,V);else j[q]=ne}return j},c=r(function(U){var X=Object.prototype.hasOwnProperty,V="~";function W(){}if(Object.create){if(W.prototype=Object.create(null),!new W().__proto__)V=!1}function j(ne,ce,oe){this.fn=ne,this.context=ce,this.once=oe||!1}function q(){this._events=new W,this._eventsCount=0}q.prototype.eventNames=function(){var ce=[],oe,ie;if(this._eventsCount===0)return ce;for(ie in oe=this._events)if(X.call(oe,ie))ce.push(V?ie.slice(1):ie);if(Object.getOwnPropertySymbols)return ce.concat(Object.getOwnPropertySymbols(oe));return ce},q.prototype.listeners=function(ce,oe){var ie=V?V+ce:ce,J=this._events[ie];if(oe)return!!J;if(!J)return[];if(J.fn)return[J.fn];for(var ee=0,se=J.length,le=Array(se);ee<se;ee++)le[ee]=J[ee].fn;return le},q.prototype.emit=function(ce,oe,ie,J,ee,se){var le=V?V+ce:ce;if(!this._events[le])return!1;var he=this._events[le],ue=arguments.length,Ae,_e;if(he.fn){if(he.once)this.removeListener(ce,he.fn,void 0,!0);switch(ue){case 1:return he.fn.call(he.context),!0;case 2:return he.fn.call(he.context,oe),!0;case 3:return he.fn.call(he.context,oe,ie),!0;case 4:return he.fn.call(he.context,oe,ie,J),!0;case 5:return he.fn.call(he.context,oe,ie,J,ee),!0;case 6:return he.fn.call(he.context,oe,ie,J,ee,se),!0}for(_e=1,Ae=Array(ue-1);_e<ue;_e++)Ae[_e-1]=arguments[_e];he.fn.apply(he.context,Ae)}else{var Pe=he.length,Ee;for(_e=0;_e<Pe;_e++){if(he[_e].once)this.removeListener(ce,he[_e].fn,void 0,!0);switch(ue){case 1:he[_e].fn.call(he[_e].context);break;case 2:he[_e].fn.call(he[_e].context,oe);break;case 3:he[_e].fn.call(he[_e].context,oe,ie);break;case 4:he[_e].fn.call(he[_e].context,oe,ie,J);break;default:if(!Ae)for(Ee=1,Ae=Array(ue-1);Ee<ue;Ee++)Ae[Ee-1]=arguments[Ee];he[_e].fn.apply(he[_e].context,Ae)}}}return!0},q.prototype.on=function(ce,oe,ie){var J=new j(oe,ie||this),ee=V?V+ce:ce;if(!this._events[ee])this._events[ee]=J,this._eventsCount++;else if(!this._events[ee].fn)this._events[ee].push(J);else this._events[ee]=[this._events[ee],J];return this},q.prototype.once=function(ce,oe,ie){var J=new j(oe,ie||this,!0),ee=V?V+ce:ce;if(!this._events[ee])this._events[ee]=J,this._eventsCount++;else if(!this._events[ee].fn)this._events[ee].push(J);else this._events[ee]=[this._events[ee],J];return this},q.prototype.removeListener=function(ce,oe,ie,J){var ee=V?V+ce:ce;if(!this._events[ee])return this;if(!oe){if(--this._eventsCount===0)this._events=new W;else delete this._events[ee];return this}var se=this._events[ee];if(se.fn){if(se.fn===oe&&(!J||se.once)&&(!ie||se.context===ie))if(--this._eventsCount===0)this._events=new W;else delete this._events[ee]}else{for(var le=0,he=[],ue=se.length;le<ue;le++)if(se[le].fn!==oe||J&&!se[le].once||ie&&se[le].context!==ie)he.push(se[le]);if(he.length)this._events[ee]=he.length===1?he[0]:he;else if(--this._eventsCount===0)this._events=new W;else delete this._events[ee]}return this},q.prototype.removeAllListeners=function(ce){var oe;if(ce){if(oe=V?V+ce:ce,this._events[oe])if(--this._eventsCount===0)this._events=new W;else delete this._events[oe]}else this._events=new W,this._eventsCount=0;return this},q.prototype.off=q.prototype.removeListener,q.prototype.addListener=q.prototype.on,q.prototype.setMaxListeners=function(){return this},q.prefixed=V,q.EventEmitter=q,U.exports=q});function l(U,X,V){if(X in U)Object.defineProperty(U,X,{value:V,enumerable:!0,configurable:!0,writable:!0});else U[X]=V;return U}var d=function(){},u={data:"state-data",cdata:"state-cdata",tagBegin:"state-tag-begin",tagName:"state-tag-name",tagEnd:"state-tag-end",attributeNameStart:"state-attribute-name-start",attributeName:"state-attribute-name",attributeNameEnd:"state-attribute-name-end",attributeValueBegin:"state-attribute-value-begin",attributeValue:"state-attribute-value"},h={lt:"action-lt",gt:"action-gt",space:"action-space",equal:"action-equal",quote:"action-quote",slash:"action-slash",char:"action-char",error:"action-error"},A={text:"text",openTag:"open-tag",closeTag:"close-tag",attributeName:"attribute-name",attributeValue:"attribute-value"},m={" ":h.space,"\t":h.space,"\n":h.space,"\r":h.space,"<":h.lt,">":h.gt,'"':h.quote,"'":h.quote,"=":h.equal,"/":h.slash},p=function(X){return m[X]||h.char},g=function(X){var V,W,j,q,ne,ce,oe,ie,J,ee;X=Object.assign({debug:!1},X);var se=new c,le=u.data,he="",ue="",Ae="",_e="",Pe="",Ee="",Te=function(ye,Ce){if(ue[0]==="?"||ue[0]==="!")return;var ve={type:ye,value:Ce};if(X.debug)console.log("emit:",ve);se.emit("data",ve)};se.stateMachine=(ee={},l(ee,u.data,(V={},l(V,h.lt,function(){if(he.trim())Te(A.text,he);ue="",Pe=!1,le=u.tagBegin}),l(V,h.char,function(me){he+=me}),V)),l(ee,u.cdata,l({},h.char,function(me){if(he+=me,he.substr(-3)==="]]>")Te(A.text,he.slice(0,-3)),he="",le=u.data})),l(ee,u.tagBegin,(W={},l(W,h.space,d),l(W,h.char,function(me){ue=me,le=u.tagName}),l(W,h.slash,function(){ue="",Pe=!0}),W)),l(ee,u.tagName,(j={},l(j,h.space,function(){if(Pe)le=u.tagEnd;else le=u.attributeNameStart,Te(A.openTag,ue)}),l(j,h.gt,function(){if(Pe)Te(A.closeTag,ue);else Te(A.openTag,ue);he="",le=u.data}),l(j,h.slash,function(){le=u.tagEnd,Te(A.openTag,ue)}),l(j,h.char,function(me){if(ue+=me,ue==="![CDATA[")le=u.cdata,he="",ue=""}),j)),l(ee,u.tagEnd,(q={},l(q,h.gt,function(){Te(A.closeTag,ue),he="",le=u.data}),l(q,h.char,d),q)),l(ee,u.attributeNameStart,(ne={},l(ne,h.char,function(me){Ae=me,le=u.attributeName}),l(ne,h.gt,function(){he="",le=u.data}),l(ne,h.space,d),l(ne,h.slash,function(){Pe=!0,le=u.tagEnd}),ne)),l(ee,u.attributeName,(ce={},l(ce,h.space,function(){le=u.attributeNameEnd}),l(ce,h.equal,function(){Te(A.attributeName,Ae),le=u.attributeValueBegin}),l(ce,h.gt,function(){_e="",Te(A.attributeName,Ae),Te(A.attributeValue,_e),he="",le=u.data}),l(ce,h.slash,function(){Pe=!0,_e="",Te(A.attributeName,Ae),Te(A.attributeValue,_e),le=u.tagEnd}),l(ce,h.char,function(me){Ae+=me}),ce)),l(ee,u.attributeNameEnd,(oe={},l(oe,h.space,d),l(oe,h.equal,function(){Te(A.attributeName,Ae),le=u.attributeValueBegin}),l(oe,h.gt,function(){_e="",Te(A.attributeName,Ae),Te(A.attributeValue,_e),he="",le=u.data}),l(oe,h.char,function(me){_e="",Te(A.attributeName,Ae),Te(A.attributeValue,_e),Ae=me,le=u.attributeName}),oe)),l(ee,u.attributeValueBegin,(ie={},l(ie,h.space,d),l(ie,h.quote,function(me){Ee=me,_e="",le=u.attributeValue}),l(ie,h.gt,function(){_e="",Te(A.attributeValue,_e),he="",le=u.data}),l(ie,h.char,function(me){Ee="",_e=me,le=u.attributeValue}),ie)),l(ee,u.attributeValue,(J={},l(J,h.space,function(me){if(Ee)_e+=me;else Te(A.attributeValue,_e),le=u.attributeNameStart}),l(J,h.quote,function(me){if(Ee===me)Te(A.attributeValue,_e),le=u.attributeNameStart;else _e+=me}),l(J,h.gt,function(me){if(Ee)_e+=me;else Te(A.attributeValue,_e),he="",le=u.data}),l(J,h.slash,function(me){if(Ee)_e+=me;else Te(A.attributeValue,_e),Pe=!0,le=u.tagEnd}),l(J,h.char,function(me){_e+=me}),J)),ee);var be=function(ye){if(X.debug)console.log(le,ye);var Ce=se.stateMachine[le],ve=Ce[p(ye)]||Ce[h.error]||Ce[h.char];ve(ye)};return se.write=function(me){var ye=me.length;for(var Ce=0;Ce<ye;Ce++)be(me[Ce])},se},_={State:u,Action:h,Type:A,create:g},f=_.Type,y={element:"element",text:"text"},x=function(X){return Object.assign({name:"",type:y.element,value:"",parent:null,attributes:{},children:[]},X)},C=function(X){X=Object.assign({stream:!1,parentNodes:!0,doneEvent:"done",tagPrefix:"tag:",emitTopLevelOnly:!1,debug:!1},X);var V=void 0,W=void 0,j=void 0,q=void 0,ne=new c,ce=function(ie){switch(ie.type){case f.openTag:if(j===null)j=W,j.name=ie.value;else{var J=x({name:ie.value,parent:j});j.children.push(J),j=J}break;case f.closeTag:var ee=j.parent;if(!X.parentNodes)j.parent=null;if(j.name!==ie.value)break;if(X.stream&&ee===W)W.children=[],j.parent=null;if(!X.emitTopLevelOnly||ee===W)ne.emit(X.tagPrefix+j.name,j),ne.emit("tag",j.name,j);if(j===W)V.removeAllListeners("data"),ne.emit(X.doneEvent,j),W=null;j=ee;break;case f.text:if(j)j.children.push(x({type:y.text,value:ie.value,parent:X.parentNodes?j:null}));break;case f.attributeName:q=ie.value,j.attributes[q]="";break;case f.attributeValue:j.attributes[q]=ie.value;break}};return ne.reset=function(){V=_.create({debug:X.debug}),V.on("data",ce),W=x(),j=null,q="",ne.parse=V.write},ne.reset(),ne},I=function(X,V){V=Object.assign({},V,{stream:!1,tagPrefix:":"});var W=C(V),j=void 0;return W.on("done",function(q){j=q}),W.parse(X),j},b={parseSync:I,create:C,NodeType:y},P=b.parseSync,E=function(X){var V=P("<root>".concat(X,"</root>"),{parentNodes:!1}),W=V.children&&V.children.length>0&&V.children.every(function(j){return j.name==="svg"});if(W)return V.children.length===1?V.children[0]:V.children;else throw Error("nothing to parse")},B=function(X){return a(X,function(V){if(!T(V))return w(V);return V})},w=function(X){return X.replace(/[-|:]([a-z])/gi,function(V,W){return W.toUpperCase()})},T=function(X){return/^(data|aria)(-\w+)/.test(X)},Q=function(X){if(X){var V=String(X);return/[&<>]/.test(V)?"<![CDATA[".concat(V.replace(/]]>/,"]]]]><![CDATA[>"),"]]>"):V}return""},N=function(X){return String(X).replace(/&/g,"&").replace(/'/g,"'").replace(/"/g,""").replace(/</g,"<").replace(/>/g,">")},F=function(X){var V=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},W=V.transformNode,j=W===void 0?function(oe){return oe}:W,q=V.camelcase,ne=q===void 0?!1:q,ce=function(ie){var J=j(ie);if(ne)J=B(J);return J};return ce(E(X))};function H(){for(var U=arguments.length,X=Array(U),V=0;V<U;V++)X[V]=arguments[V];return new Promise(function(W,j){try{var q=F.apply(void 0,X);W(q)}catch(ne){j(ne)}})}var z=function U(X){var V=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},W=V.transformAttr,j=W===void 0?function(le,he,ue){return"".concat(le,'="').concat(ue(he),'"')}:W,q=V.transformNode,ne=q===void 0?function(le){return le}:q,ce=V.selfClose,oe=ce===void 0?!0:ce;if(Array.isArray(X))return X.map(function(le){return U(le,{transformAttr:j,selfClose:oe,transformNode:ne})}).join("");var ie=ne(X);if(ie.type==="text")return Q(ie.value);var J="";for(var ee in ie.attributes){var se=j(ee,ie.attributes[ee],N,ie.name);J+=se?" ".concat(se):""}return ie.children&&ie.children.length>0||!oe?"<".concat(ie.name).concat(J,">").concat(U(ie.children,{transformAttr:j,transformNode:ne,selfClose:oe}),"</").concat(ie.name,">"):"<".concat(ie.name).concat(J,"/>")},Y=Object.assign({},{parse:H,parseSync:F,stringify:z});return Y})});var yat=ct(function($Cr,fat){var Iz=1000,bz=Iz*60,Sz=bz*60,FR=Sz*24,hkn=FR*7,mkn=FR*365.25;fat.exports=function(e,t){t=t||{};var n=typeof e;if(n==="string"&&e.length>0)return pkn(e);else if(n==="number"&&isFinite(e))return t.long?_kn(e):Akn(e);throw Error("val is not a non-empty string or a valid number. val="+JSON.stringify(e))};function pkn(e){if(e=String(e),e.length>100)return;var t=/^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(e);if(!t)return;var n=parseFloat(t[1]),o=(t[2]||"ms").toLowerCase();switch(o){case"years":case"year":case"yrs":case"yr":case"y":return n*mkn;case"weeks":case"week":case"w":return n*hkn;case"days":case"day":case"d":return n*FR;case"hours":case"hour":case"hrs":case"hr":case"h":return n*Sz;case"minutes":case"minute":case"mins":case"min":case"m":return n*bz;case"seconds":case"second":case"secs":case"sec":case"s":return n*Iz;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return n;default:return}}function Akn(e){var t=Math.abs(e);if(t>=FR)return Math.round(e/FR)+"d";if(t>=Sz)return Math.round(e/Sz)+"h";if(t>=bz)return Math.round(e/bz)+"m";if(t>=Iz)return Math.round(e/Iz)+"s";return e+"ms"}function _kn(e){var t=Math.abs(e);if(t>=FR)return Wce(e,t,FR,"day");if(t>=Sz)return Wce(e,t,Sz,"hour");if(t>=bz)return Wce(e,t,bz,"minute");if(t>=Iz)return Wce(e,t,Iz,"second");return e+" ms"}function Wce(e,t,n,o){var i=t>=n*1.5;return Math.round(e/n)+" "+o+(i?"s":"")}});var Cat=ct(function(ZCr,xat){function gkn(e){n.debug=n,n.default=n,n.coerce=c,n.disable=s,n.enable=i,n.enabled=a,n.humanize=yat(),n.destroy=l,Object.keys(e).forEach((d)=>{n[d]=e[d]}),n.names=[],n.skips=[],n.formatters={};function t(d){let u=0;for(let h=0;h<d.length;h++)u=(u<<5)-u+d.charCodeAt(h),u|=0;return n.colors[Math.abs(u)%n.colors.length]}n.selectColor=t;function n(d){let u,h=null,A,m;function p(...g){if(!p.enabled)return;let _=p,f=Number(new Date),y=f-(u||f);if(_.diff=y,_.prev=u,_.curr=f,u=f,g[0]=n.coerce(g[0]),typeof g[0]!=="string")g.unshift("%O");let x=0;g[0]=g[0].replace(/%([a-zA-Z%])/g,(I,b)=>{if(I==="%%")return"%";x++;let P=n.formatters[b];if(typeof P==="function"){let E=g[x];I=P.call(_,E),g.splice(x,1),x--}return I}),n.formatArgs.call(_,g),(_.log||n.log).apply(_,g)}if(p.namespace=d,p.useColors=n.useColors(),p.color=n.selectColor(d),p.extend=o,p.destroy=n.destroy,Object.defineProperty(p,"enabled",{enumerable:!0,configurable:!1,get:()=>{if(h!==null)return h;if(A!==n.namespaces)A=n.namespaces,m=n.enabled(d);return m},set:(g)=>{h=g}}),typeof n.init==="function")n.init(p);return p}function o(d,u){let h=n(this.namespace+(typeof u>"u"?":":u)+d);return h.log=this.log,h}function i(d){n.save(d),n.namespaces=d,n.names=[],n.skips=[];let u=(typeof d==="string"?d:"").trim().replace(/\s+/g,",").split(",").filter(Boolean);for(let h of u)if(h[0]==="-")n.skips.push(h.slice(1));else n.names.push(h)}function r(d,u){let h=0,A=0,m=-1,p=0;while(h<d.length)if(A<u.length&&(u[A]===d[h]||u[A]==="*"))if(u[A]==="*")m=A,p=h,A++;else h++,A++;else if(m!==-1)A=m+1,p++,h=p;else return!1;while(A<u.length&&u[A]==="*")A++;return A===u.length}function s(){let d=[...n.names,...n.skips.map((u)=>"-"+u)].join(",");return n.enable(""),d}function a(d){for(let u of n.skips)if(r(d,u))return!1;for(let u of n.names)if(r(d,u))return!0;return!1}function c(d){if(d instanceof Error)return d.stack||d.message;return d}function l(){console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.")}return n.enable(n.load()),n}xat.exports=gkn});var l0=ct(function(iEe,Xce){iEe.formatArgs=ykn;iEe.save=xkn;iEe.load=Ckn;iEe.useColors=fkn;iEe.storage=Ikn();iEe.destroy=(()=>{let e=!1;return()=>{if(!e)e=!0,console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.")}})();iEe.colors=["#0000CC","#0000FF","#0033CC","#0033FF","#0066CC","#0066FF","#0099CC","#0099FF","#00CC00","#00CC33","#00CC66","#00CC99","#00CCCC","#00CCFF","#3300CC","#3300FF","#3333CC","#3333FF","#3366CC","#3366FF","#3399CC","#3399FF","#33CC00","#33CC33","#33CC66","#33CC99","#33CCCC","#33CCFF","#6600CC","#6600FF","#6633CC","#6633FF","#66CC00","#66CC33","#9900CC","#9900FF","#9933CC","#9933FF","#99CC00","#99CC33","#CC0000","#CC0033","#CC0066","#CC0099","#CC00CC","#CC00FF","#CC3300","#CC3333","#CC3366","#CC3399","#CC33CC","#CC33FF","#CC6600","#CC6633","#CC9900","#CC9933","#CCCC00","#CCCC33","#FF0000","#FF0033","#FF0066","#FF0099","#FF00CC","#FF00FF","#FF3300","#FF3333","#FF3366","#FF3399","#FF33CC","#FF33FF","#FF6600","#FF6633","#FF9900","#FF9933","#FFCC00","#FFCC33"];function fkn(){if(typeof window<"u"&&window.process&&(window.process.type==="renderer"||window.process.__nwjs))return!0;if(typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/))return!1;let e;return typeof document<"u"&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||typeof window<"u"&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||typeof navigator<"u"&&navigator.userAgent&&(e=navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/))&&parseInt(e[1],10)>=31||typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)}function ykn(e){if(e[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+e[0]+(this.useColors?"%c ":" ")+"+"+Xce.exports.humanize(this.diff),!this.useColors)return;let t="color: "+this.color;e.splice(1,0,t,"color: inherit");let n=0,o=0;e[0].replace(/%[a-zA-Z%]/g,(i)=>{if(i==="%%")return;if(n++,i==="%c")o=n}),e.splice(o,0,t)}iEe.log=console.debug||console.log||(()=>{});function xkn(e){try{if(e)iEe.storage.setItem("debug",e);else iEe.storage.removeItem("debug")}catch(t){}}function Ckn(){let e;try{e=iEe.storage.getItem("debug")||iEe.storage.getItem("DEBUG")}catch(t){}if(!e&&typeof process<"u"&&"env"in process)e=process.env.DEBUG;return e}function Ikn(){try{return localStorage}catch(e){}}Xce.exports=Cat()(iEe);var{formatters:bkn}=Xce.exports;bkn.j=function(e){try{return JSON.stringify(e)}catch(t){return"[UnexpectedJSONParseError]: "+t.message}}});var Iat,HR,Tkn=0.09,Dkn=0.692052,Nkn=0.692052,Rkn=1.152,Qkn=0,bat,Kce,Sat,k5;var Pz=Ks(()=>{Iat={"0":"M0.301025 0.257813 L0.206593 0.283385 L0.122042 0.361307 L0.075923 0.474441 L0.064942 0.642221 L0.091296 0.78289 L0.159376 0.899463 L0.257104 0.961214 L0.344948 0.961214 L0.442678 0.899463 L0.510757 0.78289 L0.537111 0.642221 L0.526131 0.474441 L0.480012 0.361307 L0.39546 0.283385 L0.301025 0.257813","1":"M0.220426 0.40845 L0.381626 0.270996 L0.381626 0.948966","2":"M0.110409 0.39212 L0.125621 0.342293 L0.170571 0.295823 L0.244237 0.26431 L0.291518 0.257813 L0.373319 0.263799 L0.434683 0.290705 L0.468239 0.331966 L0.480292 0.379913 L0.479492 0.411806 L0.465088 0.465192 L0.402571 0.568988 L0.245134 0.766438 L0.07959 0.948045 L0.522462 0.948045","3":"M0.081606 0.345073 L0.119154 0.315633 L0.178996 0.284091 L0.255265 0.257813 L0.349133 0.263062 L0.43127 0.289348 L0.48994 0.336662 L0.525141 0.394491 L0.513407 0.457577 L0.466472 0.504892 L0.384334 0.541692 L0.290464 0.56272 L0.20833 0.573235 L0.290464 0.583749 L0.384334 0.610035 L0.466472 0.652092 L0.519274 0.709922 L0.531007 0.773007 L0.50754 0.841351 L0.454738 0.899179 L0.3726 0.946494 L0.310412 0.961214 L0.209503 0.959111 L0.127367 0.946494 L0.071046 0.929671","4":"M0.418494 0.270996 L0.048828 0.724199 L0.553224 0.724199 M0.414181 0.578167 L0.414181 0.94897","5":"M0.074951 0.270996 L0.074951 0.614701 L0.267655 0.5695 L0.405247 0.586502 L0.460002 0.617189 L0.498028 0.660731 L0.527101 0.779401 L0.513352 0.841049 L0.477274 0.889568 L0.406378 0.93463 L0.324445 0.958337 L0.247399 0.962139 L0.182516 0.949767 L0.130068 0.925508 L0.074951 0.875607 M0.074951 0.270996 L0.527101 0.270996","6":"M0.428549 0.257813 L0.341433 0.285053 L0.26073 0.312099 L0.192188 0.360182 L0.138902 0.410969 L0.098219 0.500422 L0.070249 0.584267 L0.067264 0.670716 L0.065164 0.756863 L0.087163 0.820973 L0.108168 0.861042 L0.157916 0.913131 L0.210981 0.948192 L0.29279 0.961214 L0.384548 0.956206 L0.456409 0.924151 L0.507262 0.881077 L0.5349 0.821975 L0.537111 0.771889 L0.521634 0.718798 L0.498418 0.67372 L0.463042 0.636657 L0.414398 0.613617 L0.34696 0.598591 L0.28284 0.595587 L0.215403 0.605604 L0.145756 0.641665 L0.109274 0.678729 L0.064942 0.724006","7":"M0.071534 0.270996 L0.530519 0.270996 L0.495935 0.291702 L0.477752 0.305407 L0.435186 0.346112 L0.412067 0.374136 L0.388565 0.40796 L0.365315 0.448098 L0.342943 0.495062 L0.322081 0.549366 L0.303364 0.611524 L0.287416 0.68205 L0.270077 0.80465 L0.26253 0.94897","8":"M0.286761 0.257813 L0.210684 0.27162 L0.1414 0.305622 L0.092494 0.382125 L0.111513 0.450128 L0.16857 0.502193 L0.228345 0.539382 L0.377781 0.594635 L0.470161 0.645637 L0.52586 0.706203 L0.538087 0.792269 L0.506841 0.87621 L0.438915 0.927212 L0.339743 0.961214 L0.263666 0.959089 L0.174004 0.929337 L0.102003 0.881523 L0.063965 0.811395 L0.066682 0.741266 L0.102003 0.671139 L0.180797 0.608448 L0.259591 0.580822 L0.358762 0.548945 L0.456576 0.49688 L0.486463 0.446941 L0.487822 0.362999 L0.453859 0.302434 L0.384574 0.265245 L0.286761 0.257813","9":"M0.511026 0.437812 L0.491026 0.347812 L0.451026 0.297812 L0.391026 0.267812 L0.311026 0.257813 L0.231026 0.267812 L0.161026 0.297812 L0.111026 0.347812 L0.091026 0.417812 L0.111026 0.487812 L0.161026 0.537812 L0.231026 0.567812 L0.311026 0.577812 L0.391026 0.557812 L0.451026 0.517812 L0.491026 0.477812 L0.511026 0.437812 M0.510026 0.438812 L0.434026 0.636812 L0.381026 0.777812 L0.337026 0.879812 L0.301026 0.957812","!":"M0.301026 0.270996 L0.301026 0.749566 M0.251466 0.94897 L0.350587 0.94897",'"':"M0.16504 0.270996 L0.16504 0.523022 M0.437013 0.270996 L0.437013 0.523022","#":"M0.20958 0.282227 L0.146515 0.949754 M0.461844 0.282227 L0.398779 0.949754 M0.032999 0.526969 L0.600587 0.452796 M0.001465 0.82366 L0.569055 0.749486",$:"M0.307121 0.240234 L0.307121 1.083502 M0.490031 0.415915 L0.404676 0.328075 L0.23396 0.310507 L0.136407 0.398347 L0.099828 0.521324 L0.124213 0.591596 L0.197379 0.644299 L0.429061 0.697003 L0.502224 0.749708 L0.526613 0.837547 L0.477836 0.960526 L0.355897 1.013228 L0.197379 0.99566 L0.112021 0.942957 L0.07544 0.837547","'":"M0.301026 0.270996 L0.301026 0.523022","(":"M0.413087 0.241211 L0.372337 0.28347 L0.331589 0.334184 L0.290838 0.393349 L0.25009 0.460965 L0.219528 0.528584 L0.199153 0.5962 L0.188966 0.655364 L0.199153 0.714529 L0.219528 0.782146 L0.25009 0.849764 L0.290838 0.91738 L0.331589 0.976544 L0.372337 1.027258 L0.413087 1.069491",")":"M0.188966 0.241211 L0.229716 0.28347 L0.270466 0.334184 L0.311213 0.393349 L0.351964 0.460965 L0.382526 0.528584 L0.4029 0.5962 L0.413087 0.655364 L0.4029 0.714529 L0.382526 0.782146 L0.351964 0.849764 L0.311213 0.91738 L0.270466 0.976544 L0.229716 1.027258 L0.188966 1.069491","*":"M0.301026 0.458702 L0.301026 0.681942 M0.301026 0.458702 L0.520997 0.536834 M0.301026 0.458702 L0.439954 0.257813 M0.301026 0.458702 L0.162098 0.257813 M0.301026 0.458702 L0.081055 0.536834","+":"M0.042969 0.66845 L0.559083 0.66845 M0.301023 0.428223 L0.301023 0.908661",",":"M0.38672 0.852051 L0.215333 1.030661 L0.301025 1.119971","-":"M0.173829 0.686035 L0.428224 0.686035",".":"M0.362549 0.851074 L0.239503 0.851074","/":"M0.062501 1.035249 L0.539551 0.270996","<":"M0.559083 0.441895 L0.042969 0.66939 L0.042969 0.66939 L0.559083 0.896902","=":"M0.042969 0.545898 L0.559083 0.545898 M0.042969 0.80837 L0.559083 0.80837",">":"M0.042969 0.441895 L0.559083 0.66939 L0.559083 0.66939 L0.042969 0.896902",A:"M0.018067 0.94897 L0.290179 0.270996 L0.583986 0.94897 M0.155303 0.684521 L0.433548 0.684521",B:"M0.063965 0.94897 L0.063965 0.278953 L0.209356 0.270996 L0.342486 0.294394 L0.432179 0.37292 L0.418224 0.48773 L0.312686 0.549166 L0.084728 0.575531 L0.306377 0.589434 L0.468877 0.647456 L0.538087 0.736658 L0.5324 0.85202 L0.501247 0.902983 L0.42355 0.944398 L0.063965 0.94897",C:"M0.529054 0.419847 L0.498425 0.345196 L0.442238 0.292341 L0.33583 0.257813 L0.257199 0.268357 L0.187906 0.303748 L0.120243 0.385432 L0.072998 0.599844 L0.110073 0.815385 L0.165381 0.902183 L0.222883 0.942801 L0.334904 0.961214 L0.43253 0.937679 L0.504816 0.868999 L0.529054 0.772065",D:"M0.064454 0.94897 L0.071838 0.285078 L0.171217 0.270996 L0.247348 0.272633 L0.37101 0.306078 L0.462461 0.378304 L0.514748 0.475555 L0.535591 0.576392 L0.537599 0.652313 L0.528065 0.717381 L0.508562 0.772419 L0.445948 0.855695 L0.362356 0.90871 L0.225203 0.945862 L0.064454 0.94897",E:"M0.080078 0.270996 L0.080078 0.94897 M0.080078 0.270996 L0.521974 0.270996 M0.080078 0.609981 L0.389405 0.609981 M0.080078 0.94897 L0.521974 0.94897",F:"M0.086426 0.270996 L0.086426 0.94897 M0.091304 0.275607 L0.515626 0.275607 M0.091304 0.607677 L0.447344 0.607677",G:"M0.498034 0.284943 L0.374621 0.257813 L0.244219 0.268648 L0.160577 0.311997 L0.094556 0.398116 L0.056397 0.58404 L0.076752 0.785532 L0.120865 0.858197 L0.188947 0.916734 L0.271008 0.953591 L0.357069 0.961214 L0.43715 0.932047 L0.501262 0.858539 L0.545656 0.648611 L0.329595 0.648131",H:"M0.066895 0.270996 L0.066895 0.94897 M0.066895 0.595658 L0.530009 0.595658 M0.535157 0.270996 L0.535157 0.94897",I:"M0.301026 0.270996 L0.301026 0.94897",J:"M0.506839 0.270996 L0.507814 0.782193 L0.498468 0.846168 L0.480733 0.880789 L0.455864 0.90832 L0.426095 0.929408 L0.360746 0.954812 L0.302508 0.962139 L0.223573 0.953638 L0.16538 0.930312 L0.137072 0.907715 L0.116428 0.880312 L0.102822 0.848819 L0.095633 0.813947 L0.094239 0.776413",K:"M0.035401 0.270996 L0.035401 0.94897 M0.502258 0.316194 L0.035401 0.687823 M0.212484 0.582361 L0.566652 0.933903",L:"M0.07544 0.270996 L0.07544 0.94897 L0.526613 0.94897",M:"M0.042481 0.94897 L0.042481 0.270996 L0.301027 0.712492 L0.559571 0.270996 L0.559571 0.94897",N:"M0.067871 0.94897 L0.067871 0.270996 L0.534181 0.94897 L0.525031 0.270996",O:"M0.287293 0.961214 L0.19843 0.933567 L0.1172 0.849451 L0.057129 0.563945 L0.114348 0.350255 L0.18455 0.289392 L0.306101 0.257813 L0.42054 0.29572 L0.487543 0.365003 L0.544923 0.625294 L0.516366 0.789624 L0.465476 0.884596 L0.375084 0.949287 L0.287293 0.961214",P:"M0.070557 0.94897 L0.070557 0.28379 L0.20704 0.270996 L0.329134 0.278993 L0.408525 0.300514 L0.444022 0.317908 L0.500637 0.368929 L0.525796 0.423728 L0.531496 0.50384 L0.508934 0.554205 L0.473724 0.582043 L0.417577 0.604365 L0.336375 0.620372 L0.226014 0.629268 L0.082368 0.630258",Q:"M0.282435 1.050813 L0.195447 1.019646 L0.115933 0.924817 L0.057129 0.602943 L0.113139 0.362034 L0.18186 0.293418 L0.300844 0.257813 L0.412868 0.300553 L0.478457 0.37866 L0.534625 0.672103 L0.506671 0.857367 L0.456855 0.964437 L0.368371 1.037368 L0.282435 1.050813 M0.341225 0.815559 L0.544923 1.070653",R:"M0.034912 0.944112 L0.034912 0.288556 L0.227127 0.270996 L0.362038 0.276867 L0.443423 0.294907 L0.477644 0.309614 L0.505809 0.328757 L0.526616 0.352817 L0.544963 0.418061 L0.543241 0.475921 L0.524463 0.517817 L0.49076 0.546518 L0.444265 0.564799 L0.355195 0.578739 L0.047653 0.589627 M0.303054 0.617306 L0.56714 0.94897",S:"M0.483037 0.364333 L0.407613 0.267477 L0.22883 0.257813 L0.128623 0.327565 L0.087712 0.455539 L0.104656 0.518727 L0.168054 0.573307 L0.41928 0.617318 L0.503796 0.669342 L0.535157 0.759324 L0.493846 0.900055 L0.367668 0.961214 L0.205436 0.956661 L0.116711 0.907038 L0.066895 0.790334",T:"M0.022949 0.270996 L0.579103 0.270996 M0.309284 0.270996 L0.309284 0.94897",U:"M0.072022 0.270996 L0.07308 0.648875 L0.080372 0.75167 L0.099024 0.827813 L0.134786 0.885729 L0.181571 0.924023 L0.251464 0.95168 L0.339655 0.962139 L0.401553 0.951668 L0.45232 0.924086 L0.482701 0.891771 L0.495745 0.870529 L0.515699 0.81637 L0.525014 0.744626 L0.530031 0.272017",V:"M0.027832 0.270996 L0.320083 0.94897 L0.57422 0.270996",W:"M0 0.270996 L0.079799 0.940377 L0.285198 0.472884 L0.505255 0.94897 L0.602052 0.270996",X:"M0.009034 0.270996 L0.586805 0.94897 M0.593019 0.270996 L0.015246 0.94897",Y:"M0.018067 0.270996 L0.293132 0.574135 M0.583986 0.271959 L0.294954 0.57606 L0.305277 0.94897",Z:"M0.053711 0.270996 L0.548341 0.270996 L0.053711 0.94897 L0.548341 0.94897","[":"M0.404542 0.240234 L0.197511 0.240234 L0.197511 1.069424 L0.404542 1.069424","\\":"M0.062501 0.270996 L0.539551 1.035249","]":"M0.19751 0.240234 L0.404542 0.240234 L0.404542 1.069424 L0.19751 1.069424","^":"M0.035156 0.523931 L0.301024 0.270996 L0.566896 0.523931",_:"M0 1.160601 L0.602052 1.160601",a:"M0.527101 0.439941 L0.527101 0.973965 M0.527101 0.553824 L0.451366 0.477535 L0.376759 0.439941 L0.263722 0.439941 L0.187989 0.477535 L0.112255 0.553824 L0.074951 0.66881 L0.074951 0.745099 L0.112255 0.85898 L0.187989 0.93527 L0.263722 0.973965 L0.376759 0.973965 L0.451366 0.93527 L0.527101 0.85898",b:"M0.07666 0.240234 L0.07666 0.959985 M0.07666 0.582737 L0.151822 0.514237 L0.225865 0.480483 L0.338045 0.480483 L0.413211 0.514237 L0.488374 0.582737 L0.525392 0.685983 L0.525392 0.754485 L0.488374 0.856739 L0.413211 0.92524 L0.338045 0.959985 L0.225865 0.959985 L0.151822 0.92524 L0.07666 0.856739",c:"M0.512452 0.553823 L0.441624 0.477535 L0.371854 0.439941 L0.26614 0.439941 L0.195312 0.477535 L0.124486 0.553823 L0.0896 0.668808 L0.0896 0.745099 L0.124486 0.858979 L0.195312 0.93527 L0.26614 0.973965 L0.371854 0.973965 L0.441624 0.93527 L0.512452 0.858979",d:"M0.525392 0.240234 L0.525392 0.959985 M0.525392 0.582737 L0.450232 0.514237 L0.376189 0.480483 L0.264006 0.480483 L0.188844 0.514237 L0.11368 0.582737 L0.076661 0.685983 L0.076661 0.754485 L0.11368 0.856739 L0.188844 0.92524 L0.264006 0.959985 L0.376189 0.959985 L0.450232 0.92524 L0.525392 0.856739",e:"M0.059571 0.668808 L0.542482 0.668808 M0.542482 0.592521 L0.502641 0.516231 L0.461594 0.477535 L0.381914 0.439941 L0.261186 0.439941 L0.180299 0.477535 L0.099412 0.553823 L0.059571 0.668808 L0.059571 0.745099 L0.099412 0.858979 L0.180299 0.93527 L0.261186 0.973965 L0.381914 0.973965 L0.461594 0.93527 L0.542482 0.858979",f:"M0.512941 0.240234 L0.406984 0.240234 L0.301026 0.274346 L0.248047 0.374731 L0.248047 0.946817 M0.089112 0.476088 L0.459965 0.476088",g:"M0.525392 0.439941 L0.525392 0.989395 L0.488373 1.091918 L0.45023 1.126757 L0.376189 1.160601 L0.264004 1.160601 L0.188844 1.126757 L0.113681 1.058075 L0.076661 0.954555 M0.525392 0.542467 L0.45023 0.473786 L0.376189 0.439941 L0.264004 0.439941 L0.188844 0.473786 L0.113681 0.542467 L0.076661 0.645988 L0.076661 0.714669 L0.113681 0.817193 L0.188844 0.885875 L0.264004 0.920713 L0.376189 0.920713 L0.45023 0.885875 L0.525392 0.817193",h:"M0.092041 0.240234 L0.092041 0.946817 M0.092041 0.61058 L0.205937 0.509225 L0.282214 0.476086 L0.396109 0.476086 L0.47187 0.509225 L0.510011 0.61058 L0.510011 0.946817",i:"M0.16 0.240234 L0.24 0.240234 M0.2 0.476089 L0.2 0.946817",j:"M0.3853 0.240234 L0.447023 0.240234 M0.416159 0.465708 L0.416159 1.011689 L0.383887 1.108586 L0.252832 1.140264 L0.15503 1.108586",k:"M0.065186 0.240234 L0.065186 0.946817 M0.493824 0.476086 L0.065186 0.812323 M0.236758 0.677829 L0.536867 0.946817",l:"M0.2 0.234863 L0.2 0.960796",m:"M0.050538 0.439941 L0.050538 0.960796 M0.050538 0.588758 L0.114405 0.476607 L0.157178 0.439941 L0.236864 0.439941 L0.279637 0.476607 L0.32241 0.588758 L0.32241 0.960796 M0.32241 0.588758 L0.386281 0.476607 L0.428467 0.439941 L0.50874 0.439941 L0.551515 0.476607 L0.551515 0.960796",n:"M0.092041 0.439941 L0.092041 0.960796 M0.092041 0.588758 L0.205936 0.476607 L0.282216 0.439941 L0.396113 0.439941 L0.471871 0.476607 L0.510011 0.588758 L0.510011 0.960796",o:"M0.247175 0.439941 L0.175178 0.477535 L0.103186 0.553823 L0.066895 0.668808 L0.066895 0.745099 L0.103186 0.858979 L0.175178 0.93527 L0.247175 0.973965 L0.354874 0.973965 L0.426872 0.93527 L0.498866 0.858979 L0.535157 0.745099 L0.535157 0.668808 L0.498866 0.553823 L0.426872 0.477535 L0.354874 0.439941 L0.247175 0.439941",p:"M0.076904 0.439941 L0.076904 1.154244 M0.076904 0.541563 L0.151986 0.473487 L0.225944 0.439941 L0.338005 0.439941 L0.413087 0.473487 L0.488166 0.541563 L0.525148 0.644169 L0.525148 0.712246 L0.488166 0.813866 L0.413087 0.881942 L0.338005 0.916471 L0.225944 0.916471 L0.151986 0.881942 L0.076904 0.813866",q:"M0.525148 0.441895 L0.525148 1.156195 M0.525148 0.5435 L0.450067 0.47544 L0.376106 0.441895 L0.264042 0.441895 L0.188966 0.47544 L0.113885 0.5435 L0.076905 0.646108 L0.076905 0.714187 L0.113885 0.815809 L0.188966 0.883886 L0.264042 0.918418 L0.376106 0.918418 L0.450067 0.883886 L0.525148 0.815809",r:"M0.107422 0.439941 L0.107422 0.960796 M0.107422 0.663164 L0.155824 0.551014 L0.252626 0.476607 L0.349428 0.439941 L0.49463 0.439941",s:"M0.475556 0.477535 L0.400757 0.439941 L0.276092 0.439941 L0.176361 0.477535 L0.101563 0.553823 L0.101563 0.630112 L0.176361 0.668808 L0.301024 0.668808 L0.425688 0.745099 L0.50049 0.821387 L0.50049 0.897677 L0.425688 0.93527 L0.325956 0.973965 L0.201295 0.973965 L0.126496 0.93527 L0.101563 0.858979",t:"M0.246032 0.297852 L0.246032 0.826549 L0.301023 0.919323 L0.411011 0.950848 L0.520997 0.950848 M0.081055 0.515799 L0.466004 0.515799",u:"M0.092041 0.454102 L0.092041 0.826134 L0.13018 0.937211 L0.205936 0.974954 L0.319832 0.974954 L0.396113 0.937211 L0.510011 0.826134 M0.510011 0.454102 L0.510011 0.974954",v:"M0.048828 0.453125 L0.301026 0.961719 M0.553224 0.453125 L0.301026 0.961719",w:"M0 0.453125 L0.150512 0.961719 M0.301024 0.453125 L0.150512 0.961719 M0.301024 0.453125 L0.451539 0.961719 M0.602052 0.453125 L0.451539 0.961719",x:"M0.03711 0.453125 L0.564943 0.961719 M0.564943 0.453125 L0.03711 0.961719",y:"M0.084618 0.453125 L0.320232 0.921476 M0.55713 0.453125 L0.320232 0.921476 L0.242119 1.055289 L0.163369 1.122196 L0.084618 1.155166 L0.044922 1.155166",z:"M0.505373 0.452148 L0.09668 0.961651 M0.09668 0.452148 L0.505373 0.452148 M0.09668 0.961651 L0.505373 0.961651"},HR={};for(let e in Iat){HR[e]=[];let t=Iat[e].split("M").slice(1).map((n)=>n.split("L").map((o)=>o.trim().split(" ").map(parseFloat)));for(let n of t)for(let o=0;o<n.length-1;o++)HR[e].push({x1:n[o][0],y1:1-n[o][1],x2:n[o+1][0],y2:1-n[o+1][1]})}bat=HR,Kce={"0":0.692052,"1":0.692052,"2":0.692052,"3":0.692052,"4":0.692052,"5":0.692052,"6":0.692052,"7":0.692052,"8":0.692052,"9":0.692052,"!":0.692052,'"':0.692052,"#":0.692052,$:0.692052,"'":0.692052,"(":0.692052,")":0.692052,"*":0.692052,"+":0.692052,",":0.692052,"-":0.692052,".":0.692052,"/":0.692052,"<":0.692052,"=":0.692052,">":0.692052,A:0.692052,B:0.692052,C:0.692052,D:0.692052,E:0.692052,F:0.692052,G:0.692052,H:0.692052,I:0.692052,J:0.692052,K:0.692052,L:0.692052,M:0.692052,N:0.692052,O:0.692052,P:0.692052,Q:0.692052,R:0.692052,S:0.692052,T:0.692052,U:0.692052,V:0.692052,W:0.692052,X:0.692052,Y:0.692052,Z:0.692052,"[":0.692052,"\\":0.692052,"]":0.692052,"^":0.692052,_:0.692052,a:0.692052,b:0.692052,c:0.692052,d:0.692052,e:0.692052,f:0.692052,g:0.692052,h:0.692052,i:0.4,j:0.692052,k:0.692052,l:0.4,m:0.692052,n:0.692052,o:0.692052,p:0.692052,q:0.692052,r:0.692052,s:0.692052,t:0.692052,u:0.692052,v:0.692052,w:0.692052,x:0.692052,y:0.692052,z:0.692052," ":0.692052},Sat={},k5={glyphWidthRatio:Dkn,spaceWidthRatio:Nkn,lineHeightRatio:Rkn,strokeWidthRatio:Tkn,letterSpacingRatio:Qkn}});var Pat=()=>{};var vat=()=>{};function sEe([e,t],[n,o],{lineThickness:i=0}={}){if(i===0)return aEe(e,t,n,o);return kkn(e,t,n,o)<=i}function aEe(e,t,n,o){let i=Gq(e,t,n),r=Gq(e,t,o),s=Gq(n,o,e),a=Gq(n,o,t);if(i!==r&&s!==a)return!0;if(i===0&&Yq(e,n,t))return!0;if(r===0&&Yq(e,o,t))return!0;if(s===0&&Yq(n,e,o))return!0;if(a===0&&Yq(n,t,o))return!0;return!1}function Gq(e,t,n){let o=(t.y-e.y)*(n.x-t.x)-(t.x-e.x)*(n.y-t.y);if(o===0)return 0;return o>0?1:2}function Yq(e,t,n){return t.x<=Math.max(e.x,n.x)&&t.x>=Math.min(e.x,n.x)&&t.y<=Math.max(e.y,n.y)&&t.y>=Math.min(e.y,n.y)}function kkn(e,t,n,o){if(e.x===t.x&&e.y===t.y)return OR(e,n,o);if(n.x===o.x&&n.y===o.y)return OR(n,e,t);if(aEe(e,t,n,o))return 0;let i=[OR(e,n,o),OR(t,n,o),OR(n,e,t),OR(o,e,t)];return Math.min(...i)}function OR(e,t,n){let o=(n.x-t.x)**2+(n.y-t.y)**2;if(o===0)return rEe(e,t);let i=((e.x-t.x)*(n.x-t.x)+(e.y-t.y)*(n.y-t.y))/o;i=Math.max(0,Math.min(1,i));let r={x:t.x+i*(n.x-t.x),y:t.y+i*(n.y-t.y)};return rEe(e,r)}function rEe(e,t){let n=e.x-t.x,o=e.y-t.y;return Math.sqrt(n*n+o*o)}var Eat=()=>{};var Mat=()=>{};var Bat=Ks(()=>{Pat();vat();Eat();Mat()});function wat(e){let t=e;while(t.parent!==null)t=t.parent;let n=e;while(n.parent!==null&&n.parent!==t){let o=n.parent;n.parent=t,n=o}return t}function Lkn(e,t){let n={nodeId:e,nextMember:null},o={parent:null,networkId:`connectivity_net${t.nextNetworkNumber++}`,firstMember:n,lastMember:n};return t.rootByNodeId.set(e,o),o}function Fkn(e,t){let n=t.rootByNodeId.get(e);return n===void 0?Lkn(e,t):wat(n)}function Hkn({targetRoot:e,sourceRoot:t}){e.lastMember.nextMember=t.firstMember,e.lastMember=t.lastMember,t.parent=e}function Okn(e){let t=[],n=e.firstMember;while(n!==null)t.push(n.nodeId),n=n.nextMember;return t}function TM(e){let t={rootByNodeId:new Map,nextNetworkNumber:0};for(let o of e){let i=null;for(let r of o){let s=Fkn(r,t);if(i===null){i=s;continue}if(i=wat(i),s!==i)Hkn({targetRoot:i,sourceRoot:s})}}let n={};for(let o of t.rootByNodeId.values()){if(o.parent!==null)continue;n[o.networkId]=Okn(o)}return n}var dy=class{netMap;idToNetMap;constructor(e){this.netMap=e,this.idToNetMap={};for(let[t,n]of Object.entries(e))for(let o of n)this.idToNetMap[o]=t}addConnections(e){for(let t of e){let n=new Set;for(let i of t){let r=this.idToNetMap[i];if(r)n.add(r)}let o;if(n.size===0)o=`connectivity_net${Object.keys(this.netMap).length}`,this.netMap[o]=[];else if(n.size===1)o=n.values().next().value??`connectivity_net${Object.keys(this.netMap).length}`;else{o=n.values().next().value??`connectivity_net${Object.keys(this.netMap).length}`;for(let i of n)if(i!==o){this.netMap[o].push(...this.netMap[i]),this.netMap[i]=this.netMap[o];for(let r of this.netMap[o])this.idToNetMap[r]=o}}for(let i of t){if(!this.netMap[o].includes(i))this.netMap[o].push(i);this.idToNetMap[i]=o}}}getIdsConnectedToNet(e){return this.netMap[e]||[]}getNetConnectedToId(e){return this.idToNetMap[e]}areIdsConnected(e,t){if(e===t)return!0;let n=this.getNetConnectedToId(e);if(!n)return!1;let o=this.getNetConnectedToId(t);if(!o)return!1;return n===o||o===e||o===e}areAllIdsConnected(e){let t=this.getNetConnectedToId(e[0]);for(let n of e){let o=this.getNetConnectedToId(n);if(o===void 0)return!1;if(o!==t)return!1}return!0}},Nv=(e)=>{let t=[];for(let o of e)if(o.type==="source_trace")t.push([...o.connected_source_port_ids??[],...o.connected_source_net_ids??[]]);else if(o.type==="source_component"){if(o.internally_connected_source_port_ids)for(let i of o.internally_connected_source_port_ids)t.push(i)}else if(o.type==="source_component_internal_connection")t.push(o.source_port_ids);let n=TM(t);return new dy(n)},js=(e)=>{let t=[];for(let o of e)if(o.type==="source_trace")t.push([o.source_trace_id,...o.connected_source_port_ids??[],...o.connected_source_net_ids??[]].filter(Boolean));else if(o.type==="pcb_port"){let{pcb_port_id:i,source_port_id:r}=o;if(r&&i)t.push([r,i])}else if(o.type==="pcb_smtpad"){let{pcb_smtpad_id:i,pcb_port_id:r}=o;if(r&&i)t.push([i,r])}else if(o.type==="pcb_plated_hole"){let{pcb_plated_hole_id:i,pcb_port_id:r}=o;if(r&&i)t.push([i,r])}else if(o.type==="pcb_trace"){let{pcb_trace_id:i,source_trace_id:r}=o,s=Array.isArray(o.route)?o.route.filter((a)=>a&&a.route_type==="wire"):[];if(r&&i)t.push([i,r]);if(Array.isArray(s)){let a=s.find((l)=>l?.start_pcb_port_id)?.start_pcb_port_id,c=s.find((l)=>l?.end_pcb_port_id)?.end_pcb_port_id;if(a&&i)t.push([a,i]);if(i&&c)t.push([i,c])}}else if(o.type==="pcb_via"){let{pcb_via_id:i,pcb_trace_id:r,source_trace_id:s,source_net_id:a}=o,c=[...o.pcb_port_ids??[],r,s,a].filter((l)=>Boolean(l));if(i&&c.length>0)t.push([i,...c])}else if(o.type==="source_component"){if(o.internally_connected_source_port_ids)for(let i of o.internally_connected_source_port_ids)t.push(i)}let n=TM(t);return new dy(n)},vz=class{circuitJson;traceIdToElm;portIdToElm;connMap;constructor(e){if(this.circuitJson=e||[],this.traceIdToElm=new Map,this.portIdToElm=new Map,e)this._buildTraceMap(),this._buildPortMap(),this.connMap=this._buildTraceConnectivityMap();else this.connMap=new dy({})}_buildPortMap(){for(let e of this.circuitJson)if(e.type==="pcb_port")this.portIdToElm.set(e.pcb_port_id,e)}_buildTraceMap(){for(let e of this.circuitJson)if(e.type==="pcb_trace")this.traceIdToElm.set(e.pcb_trace_id,e)}_buildTraceConnectivityMap(){let e=[],t=Array.from(this.traceIdToElm.keys());for(let n=0;n<t.length;n++)for(let o=n+1;o<t.length;o++){let i=this.traceIdToElm.get(t[n]),r=this.traceIdToElm.get(t[o]);if(this._arePcbTracesConnected(i,r))e.push([t[n],t[o]])}for(let n of this.portIdToElm.values())for(let o of this.traceIdToElm.values())for(let i of o.route)if(i.route_type==="wire"){if(i.start_pcb_port_id===n.pcb_port_id)e.push([n.pcb_port_id,o.pcb_trace_id]);else if(i.end_pcb_port_id===n.pcb_port_id)e.push([o.pcb_trace_id,n.pcb_port_id])}return new dy(TM(e))}addTrace(e){this.traceIdToElm.set(e.pcb_trace_id,e);let t=[];for(let n of e.route)if(n.route_type==="wire"){if(n.start_pcb_port_id)t.push([n.start_pcb_port_id,e.pcb_trace_id]);if(n.end_pcb_port_id)t.push([n.end_pcb_port_id,e.pcb_trace_id])}this.connMap.addConnections(t)}_arePcbTracesConnected(e,t){for(let n=0;n<e.route.length-1;n++){let o=e.route[n],i=e.route[n+1];if(o.route_type!=="wire")continue;if(i.route_type!=="wire")continue;if(o.layer!==i.layer)continue;let r=Math.min(o.x,i.x),s=Math.min(o.y,i.y),a=Math.max(o.x,i.x),c=Math.max(o.y,i.y),l=Number.isFinite(r)&&Number.isFinite(s)&&Number.isFinite(a)&&Number.isFinite(c);for(let d=0;d<t.route.length-1;d++){let u=t.route[d],h=t.route[d+1];if(u.route_type!=="wire")continue;if(h.route_type!=="wire")continue;if(u.layer!==h.layer)continue;if(o.layer!==u.layer)continue;let A=(o.width+u.width)/2,m=Math.max(0,A)+0.000000001;if(l&&Number.isFinite(u.x)&&Number.isFinite(u.y)&&Number.isFinite(h.x)&&Number.isFinite(h.y)&&Number.isFinite(A)&&(Math.min(u.x,h.x)>a+m||Math.max(u.x,h.x)<r-m||Math.min(u.y,h.y)>c+m||Math.max(u.y,h.y)<s-m))continue;if(sEe([o,i],[u,h],{lineThickness:A}))return!0}}return!1}areTracesConnected(e,t){return this.connMap.areIdsConnected(e,t)}getAllTracesConnectedToTrace(e){let t=this.connMap.getNetConnectedToId(e);return t?this.connMap.getIdsConnectedToNet(t).filter((n)=>this.traceIdToElm.has(n)).map((n)=>this.traceIdToElm.get(n)):[]}getAllTracesConnectedToPort(e){let t=this.connMap.getNetConnectedToId(e);return t?this.connMap.getIdsConnectedToNet(t).filter((n)=>this.traceIdToElm.has(n)).map((n)=>this.traceIdToElm.get(n)):[]}};var qa=Ks(()=>{Bat()});var cEe=()=>{};function Uat(e){kv=e}function Wat(){return kv}function uEe(e){return e<kv&&e>-kv}function GR(e,t){return e-t<kv&&e-t>-kv}function Xat(e,t){return e-t>kv}function Ykn(e,t){return e-t>-kv}function Kat(e,t){return e-t<-kv}function Vkn(e,t){return e-t<kv}class mu{static get ILLEGAL_PARAMETERS(){return ReferenceError("Illegal Parameters")}static get ZERO_DIVISION(){return Error("Zero division")}static get UNRESOLVED_BOUNDARY_CONFLICT(){return Error("Unresolved boundary conflict in boolean operation")}static get INFINITE_LOOP(){return Error("Infinite loop")}static get CANNOT_COMPLETE_BOOLEAN_OPERATION(){return Error("Cannot complete boolean operation")}static get CANNOT_INVOKE_ABSTRACT_METHOD(){return Error("Abstract method cannot be invoked")}static get OPERATION_IS_NOT_SUPPORTED(){return Error("Operation is not supported")}static get UNSUPPORTED_SHAPE_TYPE(){return Error("Unsupported shape type")}}class jat{constructor(e=Dat){for(let t in e)this[t]=e[t];this.stroke=e.stroke??Dat.stroke}toAttributesString(){return Object.keys(this).reduce((e,t)=>e+(this[t]!==void 0?this.toAttrString(t,this[t]):""),"")}toAttrString(e,t){let n=e==="className"?"class":this.convertCamelToKebabCase(e);return t===null?`${n} `:`${n}="${t.toString()}" `}convertCamelToKebabCase(e){return e.match(/[A-Z]{2,}(?=[A-Z][a-z]+[0-9]*|\b)|[A-Z]?[a-z]+[0-9]*|[A-Z]|[0-9]+/g).join("-").toLowerCase()}}function VR(e){return new jat(e).toAttributesString()}function Dz(e,t){let n=[],[o,i,r]=e.standard,[s,a,c]=t.standard,l=o*a-i*s,d=r*a-i*c,u=o*c-r*s;if(!we.Utils.EQ_0(l)){let h,A;if(i===0)h=r/o,A=u/l;else if(a===0)h=c/s,A=u/l;else if(o===0)h=d/l,A=r/i;else if(s===0)h=d/l,A=c/a;else h=d/l,A=u/l;n.push(new we.Point(h,A))}return n}function UR(e,t){let n=[],o=t.pc.projectionOn(e),i=t.pc.distanceTo(o)[0];if(we.Utils.EQ(i,t.r))n.push(o);else if(we.Utils.LT(i,t.r)){let r=Math.sqrt(t.r*t.r-i*i),s,a;s=e.norm.rotate90CCW().multiply(r),a=o.translate(s),n.push(a),s=e.norm.rotate90CW().multiply(r),a=o.translate(s),n.push(a)}return n}function Mz(e,t){let n=[];for(let o of t.toSegments()){let i=jq(o,e);for(let r of i)if(!ict(r,n))n.push(r)}return n}function Zce(e,t){let n=[];if(Mz(e,t.box).length===0)return n;let o=new we.Circle(t.pc,t.r),i=UR(e,o);for(let r of i)if(r.on(t))n.push(r);return n}function jq(e,t){let n=[];if(e.ps.on(t))n.push(e.ps);if(e.pe.on(t)&&!e.isZeroLength())n.push(e.pe);if(n.length>0)return n;if(e.isZeroLength())return n;if(e.ps.leftTo(t)&&e.pe.leftTo(t)||!e.ps.leftTo(t)&&!e.pe.leftTo(t))return n;let o=new we.Line(e.ps,e.pe);return Dz(o,t)}function ele(e,t){let n=[];if(e.isZeroLength()){if(e.ps.on(t))n.push(e.ps);return n}if(t.isZeroLength()){if(t.ps.on(e))n.push(t.ps);return n}let o=new we.Line(e.ps,e.pe),i=new we.Line(t.ps,t.pe);if(o.incidentTo(i)){if(e.ps.on(t))n.push(e.ps);if(e.pe.on(t))n.push(e.pe);if(t.ps.on(e)&&!t.ps.equalTo(e.ps)&&!t.ps.equalTo(e.pe))n.push(t.ps);if(t.pe.on(e)&&!t.pe.equalTo(e.ps)&&!t.pe.equalTo(e.pe))n.push(t.pe)}else if(o.parallelTo(i)){let r=new we.Vector(e.ps,e.pe),s=new we.Vector(t.ps,t.pe),a=new we.Vector(e.ps,t.ps),c=r.cross(s);if(!we.Utils.EQ_0(c)){let l=a.cross(s)/c,d=a.cross(r)/c;if(we.Utils.GE(l,0)&&we.Utils.LE(l,1)&&we.Utils.GE(d,0)&&we.Utils.LE(d,1))n.push(Nat(e.ps.translate(r.multiply(l)),e,t))}}else{let r=Dz(o,i);if(r.length>0){if(Rat(r[0],e)&&Rat(r[0],t))n.push(Nat(r[0],e,t))}}return n}function Nat(e,t,n){for(let o of[t.ps,t.pe,n.ps,n.pe])if(e.equalTo(o))return o;return e}function Rat(e,t){let n=t.box;return we.Utils.LE(e.x,n.xmax)&&we.Utils.GE(e.x,n.xmin)&&we.Utils.LE(e.y,n.ymax)&&we.Utils.GE(e.y,n.ymin)}function tle(e,t){let n=[];if(e.isZeroLength()){let[r,s]=e.ps.distanceTo(t.pc);if(we.Utils.EQ(r,t.r))n.push(e.ps);return n}let o=new we.Line(e.ps,e.pe),i=UR(o,t);for(let r of i)if(r.on(e))n.push(r);return n}function Nz(e,t){let n=[];if(e.isZeroLength()){if(e.ps.on(t))n.push(e.ps);return n}let o=new we.Line(e.ps,e.pe),i=new we.Circle(t.pc,t.r),r=UR(o,i);for(let s of r)if(s.on(e)&&s.on(t))n.push(s);return n}function Ukn(e,t){let n=[];for(let o of t.toSegments()){let i=ele(o,e);for(let r of i)n.push(r)}return n}function qat(e,t){let n=[],o=new we.Vector(e.pc,t.pc),i=e.r,r=t.r;if(we.Utils.EQ_0(i)||we.Utils.EQ_0(r))return n;if(we.Utils.EQ_0(o.x)&&we.Utils.EQ_0(o.y)&&we.Utils.EQ(i,r))return n.push(e.pc.translate(-i,0)),n;let s=e.pc.distanceTo(t.pc)[0];if(we.Utils.GT(s,i+r))return n;if(we.Utils.LT(s,Math.abs(i-r)))return n;o.x/=s,o.y/=s;let a;if(we.Utils.EQ(s,i+r)||we.Utils.EQ(s,Math.abs(i-r)))return a=e.pc.translate(i*o.x,i*o.y),n.push(a),n;let c=i*i/(2*s)-r*r/(2*s)+s/2,l=e.pc.translate(c*o.x,c*o.y),d=Math.sqrt(i*i-c*c);return a=l.translate(o.rotate90CCW().multiply(d)),n.push(a),a=l.translate(o.rotate90CW().multiply(d)),n.push(a),n}function Wkn(e,t){let n=[];for(let o of t.toSegments()){let i=tle(o,e);for(let r of i)n.push(r)}return n}function Jat(e,t){let n=[];if(e.pc.equalTo(t.pc)&&we.Utils.EQ(e.r,t.r)){let s;if(s=e.start,s.on(t))n.push(s);if(s=e.end,s.on(t))n.push(s);if(s=t.start,s.on(e))n.push(s);if(s=t.end,s.on(e))n.push(s);return n}let o=new we.Circle(e.pc,e.r),i=new we.Circle(t.pc,t.r),r=o.intersect(i);for(let s of r)if(s.on(e)&&s.on(t))n.push(s);return n}function yEe(e,t){let n=[];if(t.pc.equalTo(e.pc)&&we.Utils.EQ(t.r,e.r))return n.push(e.start),n.push(e.end),n;let o=t,i=new we.Circle(e.pc,e.r),r=qat(o,i);for(let s of r)if(s.on(e))n.push(s);return n}function Xkn(e,t){let n=[];for(let o of t.toSegments()){let i=Nz(o,e);for(let r of i)n.push(r)}return n}function $at(e,t){return e.isSegment?ele(e.shape,t):Nz(t,e.shape)}function Zat(e,t){return e.isSegment?Nz(e.shape,t):Jat(e.shape,t)}function ect(e,t){return e.isSegment?jq(e.shape,t):Zce(t,e.shape)}function Kkn(e,t){return e.isSegment?IEe(t,e.shape):bEe(t,e.shape)}function jkn(e,t){return e.isSegment?tle(e.shape,t):yEe(e.shape,t)}function xEe(e,t){let n=[];for(let o of t.edges)for(let i of $at(o,e))n.push(i);return n}function CEe(e,t){let n=[];for(let o of t.edges)for(let i of Zat(o,e))n.push(i);return n}function qq(e,t){let n=[];if(t.isEmpty())return n;for(let o of t.edges)for(let i of ect(o,e))if(!ict(i,n))n.push(i);return e.sortPoints(n)}function tct(e,t){let n=[];if(t.isEmpty())return n;for(let o of t.edges)for(let i of jkn(o,e))n.push(i);return n}function nct(e,t){if(e.isSegment)return $at(t,e.shape);else if(e.isArc)return Zat(t,e.shape);else if(e.isLine)return ect(t,e.shape);else if(e.isRay)return Kkn(t,e.shape);return[]}function oct(e,t){let n=[];if(t.isEmpty()||e.shape.box.not_intersect(t.box))return n;let o=t.edges.search(e.shape.box);for(let i of o)n=[...n,...nct(e,i)];return n}function qkn(e,t){let n=[];if(t.isEmpty()||e.size===0)return n;for(let o of e)n=[...n,...oct(o,t)];return n}function Jkn(e,t){let n=[];if(e.isEmpty()||t.isEmpty())return n;if(e.box.not_intersect(t.box))return n;for(let o of e.edges)n=[...n,...oct(o,t)];return n}function $kn(e,t){if(e instanceof we.Line)return qq(e,t);else if(e instanceof we.Segment)return xEe(e,t);else if(e instanceof we.Arc)return CEe(e,t);else return[]}function ict(e,t){return t.some((n)=>n.equalTo(e))}function m7(e){return new we.Line(e.start,e.norm)}function IEe(e,t){return jq(t,m7(e)).filter((n)=>e.contains(n))}function bEe(e,t){return Zce(m7(e),t).filter((n)=>e.contains(n))}function rct(e,t){return UR(m7(e),t).filter((n)=>e.contains(n))}function Zkn(e,t){return Mz(m7(e),t).filter((n)=>e.contains(n))}function sct(e,t){return Dz(m7(e),t).filter((n)=>e.contains(n))}function eLn(e,t){return Dz(m7(e),m7(t)).filter((n)=>e.contains(n)).filter((n)=>t.contains(n))}function act(e,t){return qq(m7(e),t).filter((n)=>e.contains(n))}function cct(e,t){if(e.intersect&&e.intersect instanceof Function)return e.intersect(t);throw mu.UNSUPPORTED_SHAPE_TYPE}function Rz(e,t){let n=[];for(let o of t)n=[...n,...cct(e,o.shape)];return n}function tLn(e,t){let n=[];for(let o of e)for(let i of t)n=[...n,...cct(o.shape,i.shape)];return n}function Bz(e,t,n){let o=n.length,i=e.shape.split(t);if(i.length===0)return;let r=0;if(i[0]===null)r=0;else if(i[1]===null)r=e.shape.length;else r=i[0].length;let s=0;if(GR(r,0))s|=1;if(GR(r,e.shape.length))s|=2;let a;if(r===1/0)a=i[0].coord(t);else a=s&2&&e.next&&e.next.arc_length===0?0:e.arc_length+r;n.push({id:o,pt:t,arc_length:a,edge_before:e,edge_after:void 0,face:e.face,is_vertex:s})}function Xq(e){e.int_points1_sorted=h7(e.int_points1),e.int_points2_sorted=h7(e.int_points2)}function h7(e){let t=new Map,n=0;for(let i of e)if(!t.has(i.face))t.set(i.face,n),n++;for(let i of e)i.faceId=t.get(i.face);return e.slice().sort(oLn)}function oLn(e,t){if(e.faceId<t.faceId)return-1;if(e.faceId>t.faceId)return 1;if(e.arc_length<t.arc_length)return-1;if(e.arc_length>t.arc_length)return 1;return 0}function SEe(e){if(e.int_points1.length<2)return;let t=!1,n,o,i,r;for(let s=0;s<e.int_points1_sorted.length;s++){if(e.int_points1_sorted[s].id===-1)continue;n=e.int_points1_sorted[s],o=e.int_points2[n.id];for(let a=s+1;a<e.int_points1_sorted.length;a++){if(i=e.int_points1_sorted[a],!GR(i.arc_length,n.arc_length))break;if(i.id===-1)continue;if(r=e.int_points2[i.id],r.id===-1)continue;if(i.edge_before===n.edge_before&&i.edge_after===n.edge_after&&r.edge_before===o.edge_before&&r.edge_after===o.edge_after)i.id=-1,r.id=-1,t=!0}}o=e.int_points2_sorted[0],n=e.int_points1[o.id];for(let s=1;s<e.int_points2_sorted.length;s++){let a=e.int_points2_sorted[s];if(a.id===-1)continue;if(o.id===-1||!GR(a.arc_length,o.arc_length)){o=a,n=e.int_points1[o.id];continue}let c=e.int_points1[a.id];if(c.edge_before===n.edge_before&&c.edge_after===n.edge_after&&a.edge_before===o.edge_before&&a.edge_after===o.edge_after)c.id=-1,a.id=-1,t=!0}if(t)e.int_points1=e.int_points1.filter((s)=>s.id>=0),e.int_points2=e.int_points2.filter((s)=>s.id>=0),e.int_points1.forEach((s,a)=>s.id=a),e.int_points2.forEach((s,a)=>s.id=a)}function hEe(e){for(let t of e){if(t.edge_before)t.edge_before.bvStart=void 0,t.edge_before.bvEnd=void 0,t.edge_before.bv=void 0,t.edge_before.overlap=void 0;if(t.edge_after)t.edge_after.bvStart=void 0,t.edge_after.bvEnd=void 0,t.edge_after.bv=void 0,t.edge_after.overlap=void 0}for(let t of e){if(t.edge_before)t.edge_before.bvEnd=2;if(t.edge_after)t.edge_after.bvStart=2}}function mEe(e,t){for(let n of e){if(n.edge_before)n.edge_before.setInclusion(t);if(n.edge_after)n.edge_after.setInclusion(t)}}function iLn(e){let t=void 0,n=void 0,o=void 0,i=e.int_points1.length;for(let r=0;r<i;r++){let s=e.int_points1_sorted[r];if(s.face!==t)n=r,t=s.face;let a=r,c=wz(e.int_points1_sorted,r,t),l;if(a+c<i&&e.int_points1_sorted[a+c].face===t)l=a+c;else l=n;let d=wz(e.int_points1_sorted,l,t);o=null;for(let _=l;_<l+d;_++){let f=e.int_points1_sorted[_];if(f.face===t&&e.int_points2[f.id].face===e.int_points2[s.id].face){o=f;break}}if(o===null)continue;let u=s.edge_after,h=o.edge_before;if(!(u.bv===2&&h.bv===2))continue;if(u!==h)continue;let A=e.int_points2[s.id],m=e.int_points2[o.id],p=A.edge_after,g=m.edge_before;if(!(p.bv===2&&g.bv===2&&p===g))A=e.int_points2[o.id],m=e.int_points2[s.id],p=A.edge_after,g=m.edge_before;if(!(p.bv===2&&g.bv===2&&p===g))continue;u.setOverlap(p)}}function wz(e,t,n){let o,i,r=1;if(e.length===1)return 1;o=e[t];for(let s=t+1;s<e.length;s++){if(o.face!==n)break;if(i=e[s],!(i.pt.equalTo(o.pt)&&i.edge_before===o.edge_before&&i.edge_after===o.edge_after))break;r++}return r}function Tz(e,t){if(!t)return;for(let n of t){let o=n.edge_before;if(n.is_vertex=0,o.shape.start&&o.shape.start.equalTo(n.pt))n.is_vertex|=1;if(o.shape.end&&o.shape.end.equalTo(n.pt))n.is_vertex|=2;if(n.is_vertex&1){if(n.edge_before=o.prev,o.prev)n.is_vertex=2;continue}if(n.is_vertex&2)continue;let i=e.addVertex(n.pt,o);n.edge_before=i}for(let n of t)if(n.edge_before)n.edge_after=n.edge_before.next;else if(e instanceof WR&&n.is_vertex&1)n.edge_after=e.first}function Qat(e,t,n){let o=e.edge_before,i=t.edge_after,r=n.length;o.next=n[0],n[0].prev=o,n[r-1].next=i,i.prev=n[r-1]}function aLn(e,t){let[n,o]=$q(e,t,nle,!0);return n}function pEe(e,t){let o=t.clone().reverse(),[i,r]=$q(e,o,YR,!0);return i}function lct(e,t){let[n,o]=$q(e,t,Jq,!0);return n}function dct(e,t){let[n,o]=$q(e,t,Jq,!1),i=[];for(let s of n.faces)i=[...i,...[...s.edges].map((a)=>a.shape)];let r=[];for(let s of o.faces)r=[...r,...[...s.edges].map((a)=>a.shape)];return[i,r]}function AEe(e,t){let[n,o]=$q(e,t,YR,!1),i=[];for(let r of n.faces)i=[...i,...[...r.edges].map((s)=>s.shape)];return i}function uct(e,t){let n=e.clone(),o=t.clone(),i=hct(n,o);Xq(i),Tz(n,i.int_points1_sorted),Tz(o,i.int_points2_sorted),SEe(i),Xq(i);let r=i.int_points1_sorted.map((a)=>a.pt),s=i.int_points2_sorted.map((a)=>a.pt);return[r,s]}function cLn(e,t,n,o){let i=Fat(e,n.int_points1),r=Fat(t,n.int_points2);Hat(i,t),Hat(r,e),hEe(n.int_points1),hEe(n.int_points2),mEe(n.int_points1,t),mEe(n.int_points2,e);while(dLn(e,t,n.int_points1,n.int_points1_sorted,n.int_points2,n));iLn(n),_Ee(e,o,n.int_points1_sorted,!0),_Ee(t,o,n.int_points2_sorted,!1),Oat(e,i,o,!0),Oat(t,r,o,!1)}function lLn(e,t,n,o){uLn(e,t,o,n.int_points2),hLn(e,t,n),gEe(e,n.int_points1),gEe(t,n.int_points2),fEe(e,n.int_points1,n.int_points2),fEe(e,n.int_points2,n.int_points1),zat(e),zat(t)}function $q(e,t,n,o){let i=e.clone(),r=t.clone(),s=hct(i,r);if(Xq(s),Tz(i,s.int_points1_sorted),Tz(r,s.int_points2_sorted),SEe(s),Xq(s),cLn(i,r,s,n),o)lLn(i,r,s,n);return[i,r]}function hct(e,t){let n={int_points1:[],int_points2:[]};for(let o of e.edges){let i=t.edges.search(o.box);for(let r of i){let s=o.shape.intersect(r.shape);for(let a of s)Bz(o,a,n.int_points1),Bz(r,a,n.int_points2)}}return n}function Fat(e,t){let n=[];for(let o of e.faces)if(!t.find((i)=>i.face===o))n.push(o);return n}function Hat(e,t){for(let n of e)n.first.bv=n.first.bvStart=n.first.bvEnd=void 0,n.first.setInclusion(t)}function dLn(e,t,n,o,i,r){let s,a,c,l=o.length,d=!1;for(let u=0;u<l;u++){let h=o[u];if(h.face!==s)a=u,s=h.face;let A=u,m=wz(o,u,s),p;if(A+m<l&&o[A+m].face===s)p=A+m;else p=a;let g=wz(o,p,s);c=null;for(let y=p;y<p+g;y++){let x=o[y];if(x.face===s&&i[x.id].face===i[h.id].face){c=x;break}}if(c===null)continue;let _=h.edge_after,f=c.edge_before;if(_.bv===PA&&f.bv!=PA){_.bv=f.bv;continue}if(_.bv!=PA&&f.bv===PA){f.bv=_.bv;continue}if(_.bv===PA&&f.bv===PA&&_!=f||(_.bv===Rv&&f.bv===Qv||_.bv===Qv&&f.bv===Rv)){let y=_.next;while(y!=f)y.bvStart=void 0,y.bvEnd=void 0,y.bv=void 0,y.setInclusion(t),y=y.next}if(_.bv===PA&&f.bv===PA&&_!=f){let y=_.next,x;while(y!=f){if(y.bv!=PA){if(x===void 0)x=y.bv;else if(y.bv!=x)throw mu.UNRESOLVED_BOUNDARY_CONFLICT}y=y.next}if(x!=null)_.bv=x,f.bv=x;continue}if(_.bv===Rv&&f.bv===Qv||_.bv===Qv&&f.bv===Rv){let y=_;while(y!=f){if(y.bvStart===_.bv&&y.bvEnd===f.bv){let[x,C]=y.shape.distanceTo(t);if(x<10*we.DP_TOL){Bz(y,C.ps,n);let I=n[n.length-1];if(I.is_vertex&kat)I.edge_after=y,I.edge_before=y.prev,y.bvStart=PA,y.bv=void 0,y.setInclusion(t);else if(I.is_vertex&Lat)I.edge_after=y.next,y.bvEnd=PA,y.bv=void 0,y.setInclusion(t);else{let E=t.addVertex(I.pt,y);I.edge_before=E,I.edge_after=E.next,E.setInclusion(t),E.next.bvStart=PA,E.next.bvEnd=void 0,E.next.bv=void 0,E.next.setInclusion(t)}let b=t.findEdgeByPoint(C.pe);Bz(b,C.pe,i);let P=i[i.length-1];if(P.is_vertex&kat)P.edge_after=b,P.edge_before=b.prev;else if(P.is_vertex&Lat)P.edge_after=b.next;else{let E=i.find((w)=>w.edge_after===b),B=t.addVertex(P.pt,b);if(P.edge_before=B,P.edge_after=B.next,E)E.edge_after=B;B.bvStart=void 0,B.bvEnd=PA,B.bv=void 0,B.setInclusion(e),B.next.bvStart=PA,B.next.bvEnd=void 0,B.next.bv=void 0,B.next.setInclusion(e)}Xq(r),d=!0;break}}y=y.next}if(d)break;throw mu.UNRESOLVED_BOUNDARY_CONFLICT}}return d}function _Ee(e,t,n,o){if(!n)return;let i=void 0,r=void 0,s,a;for(let c=0;c<n.length;c++){if(s=n[c],s.face!==i)r=c,i=s.face;if(i.isEmpty())continue;let l=c,d=wz(n,c,i),u;if(l+d<n.length&&n[l+d].face===s.face)u=l+d;else u=r;a=n[u];let h=u,A=wz(n,h,i),m=s.edge_after,p=a.edge_before;if(m.bv===Rv&&p.bv===Rv&&t===nle||m.bv===Qv&&p.bv===Qv&&t===Jq||(m.bv===Qv||p.bv===Qv)&&t===YR&&!o||(m.bv===Rv||p.bv===Rv)&&t===YR&&o||m.bv===PA&&p.bv===PA&&m.overlap&rLn&&o||m.bv===PA&&p.bv===PA&&m.overlap&sLn){e.removeChain(i,m,p);for(let g=l;g<l+d;g++)n[g].edge_after=void 0;for(let g=h;g<h+A;g++)n[g].edge_before=void 0}c+=d-1}}function uLn(e,t,n,o){for(let i of t.faces){for(let r of i)e.edges.add(r);if(o.find((r)=>r.face===i)===void 0)e.addFace(i.first,i.last)}}function hLn(e,t,n){if(n.int_points1.length===0)return;for(let o=0;o<n.int_points1.length;o++){let i=n.int_points1[o],r=n.int_points2[o];if(i.edge_before!==void 0&&i.edge_after===void 0){if(r.edge_before===void 0&&r.edge_after!==void 0)i.edge_before.next=r.edge_after,r.edge_after.prev=i.edge_before,i.edge_after=r.edge_after,r.edge_before=i.edge_before}if(r.edge_before!==void 0&&r.edge_after===void 0){if(i.edge_before===void 0&&i.edge_after!==void 0)r.edge_before.next=i.edge_after,i.edge_after.prev=r.edge_before,r.edge_after=i.edge_after,i.edge_before=r.edge_before}if(i.edge_before!==void 0&&i.edge_after===void 0)for(let s of n.int_points1_sorted){if(s===i)continue;if(s.edge_before===void 0&&s.edge_after!==void 0){if(s.pt.equalTo(i.pt))i.edge_before.next=s.edge_after,s.edge_after.prev=i.edge_before,i.edge_after=s.edge_after,s.edge_before=i.edge_before}}if(r.edge_before!==void 0&&r.edge_after===void 0)for(let s of n.int_points2_sorted){if(s===r)continue;if(s.edge_before===void 0&&s.edge_after!==void 0){if(s.pt.equalTo(r.pt))r.edge_before.next=s.edge_after,s.edge_after.prev=r.edge_before,r.edge_after=s.edge_after,s.edge_before=r.edge_before}}}}function gEe(e,t){for(let n of t){if(e.faces.delete(n.face),n.face=void 0,n.edge_before)n.edge_before.face=void 0;if(n.edge_after)n.edge_after.face=void 0}}function fEe(e,t,n){for(let o of t){if(o.edge_before===void 0||o.edge_after===void 0)continue;if(o.face)continue;if(o.edge_after.face||o.edge_before.face)continue;let{edge_after:i,edge_before:r}=o;try{$ce.testInfiniteLoop(i)}catch(a){throw mu.CANNOT_COMPLETE_BOOLEAN_OPERATION}let s=e.addFace(i,r);for(let a of t)if(a.edge_before&&a.edge_after&&a.edge_before.face===s&&a.edge_after.face===s)a.face=s;for(let a of n)if(a.edge_before&&a.edge_after&&a.edge_before.face===s&&a.edge_after.face===s)a.face=s}}function Oat(e,t,n,o){for(let i of t){let r=i.first.bv;if(n===nle&&r===Rv||n===YR&&r===Rv&&o||n===YR&&r===Qv&&!o||n===Jq&&r===Qv)e.deleteFace(i)}}function zat(e){let t=[];for(let n of e.edges)if(!n.face||!e.faces.has(n.face))t.push(n);for(let n of t)e.edges.delete(n)}class XR{constructor(){this.m=[,,,,,,,,,].fill(void 0)}get I2I(){return this.m[0]}set I2I(e){this.m[0]=e}get I2B(){return this.m[1]}set I2B(e){this.m[1]=e}get I2E(){return this.m[2]}set I2E(e){this.m[2]=e}get B2I(){return this.m[3]}set B2I(e){this.m[3]=e}get B2B(){return this.m[4]}set B2B(e){this.m[4]=e}get B2E(){return this.m[5]}set B2E(e){this.m[5]=e}get E2I(){return this.m[6]}set E2I(e){this.m[6]=e}get E2B(){return this.m[7]}set E2B(e){this.m[7]=e}get E2E(){return this.m[8]}set E2E(e){this.m[8]=e}toString(){return this.m.map((e)=>{if(e instanceof Array&&e.length>0)return"T";else if(e instanceof Array&&e.length===0)return"F";else return"*"}).join("")}equal(){return mLn.test(this.toString())}intersect(){return pLn.test(this.toString())}touch(){return ALn.test(this.toString())}inside(){return _Ln.test(this.toString())}covered(){return gLn.test(this.toString())}}function Uq(e,t){let n=void 0,o=new we.Ray(t),i=new we.Line(o.pt,o.norm),r=new we.Box(o.box.xmin-we.DP_TOL,o.box.ymin-we.DP_TOL,o.box.xmax+we.DP_TOL,o.box.ymax+we.DP_TOL);if(e.box.not_intersect(r))return we.OUTSIDE;let s=e.edges.search(r);if(s.length===0)return we.OUTSIDE;for(let d of s)if(d.shape.contains(t))return we.BOUNDARY;let a=[...e.faces],c=[];for(let d of s)for(let u of o.intersect(d.shape)){if(u.equalTo(t))return we.BOUNDARY;c.push({pt:u,edge:d,face_index:a.indexOf(d.face)})}c.sort((d,u)=>{if(Kat(d.pt.x,u.pt.x))return-1;if(Xat(d.pt.x,u.pt.x))return 1;if(d.face_index<u.face_index)return-1;if(d.face_index>u.face_index)return 1;if(d.edge.arc_length<u.edge.arc_length)return-1;if(d.edge.arc_length>u.edge.arc_length)return 1;return 0});let l=0;for(let d=0;d<c.length;d++){let u=c[d];if(u.pt.equalTo(u.edge.shape.start)){if(d>0&&u.pt.equalTo(c[d-1].pt)&&u.face_index===c[d-1].face_index&&u.edge.prev===c[d-1].edge)continue;let h=u.edge.prev;while(uEe(h.length))h=h.prev;let A=h.shape.tangentInEnd(),m=u.pt.translate(A),p=u.edge.shape.tangentInStart(),g=u.pt.translate(p),_=m.leftTo(i),f=g.leftTo(i);if(_&&!f||!_&&f)l++}else if(u.pt.equalTo(u.edge.shape.end)){if(d>0&&u.pt.equalTo(c[d-1].pt)&&u.face_index===c[d-1].face_index&&u.edge.next===c[d-1].edge)continue;let h=u.edge.next;while(uEe(h.length))h=h.next;let A=h.shape.tangentInStart(),m=u.pt.translate(A),p=u.edge.shape.tangentInEnd(),g=u.pt.translate(p),_=m.leftTo(i),f=g.leftTo(i);if(_&&!f||!_&&f)l++}else if(u.edge.shape instanceof we.Segment)l++;else{let h=u.edge.shape.box;if(!(GR(u.pt.y,h.ymin)||GR(u.pt.y,h.ymax)))l++}}return n=l%2===1?1:0,n}function fLn(e,t){return kz(e,t).equal()}function mct(e,t){return kz(e,t).intersect()}function yLn(e,t){return kz(e,t).touch()}function xLn(e,t){return!mct(e,t)}function pct(e,t){return kz(e,t).inside()}function Act(e,t){return kz(e,t).covered()}function CLn(e,t){return pct(t,e)}function _ct(e,t){return Act(t,e)}function kz(e,t){if(e instanceof we.Line&&t instanceof we.Line)return ILn(e,t);else if(e instanceof we.Line&&t instanceof we.Circle)return bLn(e,t);else if(e instanceof we.Line&&t instanceof we.Box)return SLn(e,t);else if(e instanceof we.Line&&t instanceof we.Polygon)return PLn(e,t);else if((e instanceof we.Segment||e instanceof we.Arc)&&t instanceof we.Polygon)return Gat(e,t);else if((e instanceof we.Segment||e instanceof we.Arc)&&(t instanceof we.Circle||t instanceof we.Box))return Gat(e,new we.Polygon(t));else if(e instanceof we.Polygon&&t instanceof we.Polygon)return jce(e,t);else if((e instanceof we.Circle||e instanceof we.Box)&&(t instanceof we.Circle||t instanceof we.Box))return jce(new we.Polygon(e),new we.Polygon(t));else if((e instanceof we.Circle||e instanceof we.Box)&&t instanceof we.Polygon)return jce(new we.Polygon(e),t);else if(e instanceof we.Polygon&&(t instanceof we.Circle||t instanceof we.Box))return jce(e,new we.Polygon(t))}function ILn(e,t){let n=new XR,o=Dz(e,t);if(o.length===0)if(e.contains(t.pt)&&t.contains(e.pt))n.I2I=[e],n.I2E=[],n.E2I=[];else n.I2I=[],n.I2E=[e],n.E2I=[t];else n.I2I=o,n.I2E=e.split(o),n.E2I=t.split(o);return n}function bLn(e,t){let n=new XR,o=UR(e,t);if(o.length===0)n.I2I=[],n.I2B=[],n.I2E=[e],n.E2I=[t];else if(o.length===1)n.I2I=[],n.I2B=o,n.I2E=e.split(o),n.E2I=[t];else{let i=new WR([e]),r=e.sortPoints(o);i.split(r);let s=i.toShapes();n.I2I=[s[1]],n.I2B=r,n.I2E=[s[0],s[2]],n.E2I=new we.Polygon([t.toArc()]).cutWithLine(e)}return n}function SLn(e,t){let n=new XR,o=Mz(e,t);if(o.length===0)n.I2I=[],n.I2B=[],n.I2E=[e],n.E2I=[t];else if(o.length===1)n.I2I=[],n.I2B=o,n.I2E=e.split(o),n.E2I=[t];else{let i=new WR([e]),r=e.sortPoints(o);i.split(r);let s=i.toShapes();if(t.toSegments().some((a)=>a.contains(o[0])&&a.contains(o[1])))n.I2I=[],n.I2B=[s[1]],n.I2E=[s[0],s[2]],n.E2I=[t];else n.I2I=[s[1]],n.I2B=r,n.I2E=[s[0],s[2]],n.E2I=new we.Polygon(t.toSegments()).cutWithLine(e)}return n}function PLn(e,t){let n=new XR,o=qq(e,t),i=new WR([e]),r=o.length>0?o.slice():e.sortPoints(o);return i.split(r),[...i].forEach((s)=>s.setInclusion(t)),n.I2I=[...i].filter((s)=>s.bv===we.INSIDE).map((s)=>s.shape),n.I2B=[...i].slice(1).map((s)=>s.bv===we.BOUNDARY?s.shape:s.shape.start),n.I2E=[...i].filter((s)=>s.bv===we.OUTSIDE).map((s)=>s.shape),n.E2I=t.cutWithLine(e),n}function Gat(e,t){let n=new XR,o=$kn(e,t),i=o.length>0?o.slice():e.sortPoints(o),r=new WR([e]);r.split(i),[...r].forEach((s)=>s.setInclusion(t)),n.I2I=[...r].filter((s)=>s.bv===we.INSIDE).map((s)=>s.shape),n.I2B=[...r].slice(1).map((s)=>s.bv===we.BOUNDARY?s.shape:s.shape.start),n.I2E=[...r].filter((s)=>s.bv===we.OUTSIDE).map((s)=>s.shape),n.B2I=[],n.B2B=[],n.B2E=[];for(let s of[e.start,e.end])switch(Uq(t,s)){case we.INSIDE:n.B2I.push(s);break;case we.BOUNDARY:n.B2B.push(s);break;case we.OUTSIDE:n.B2E.push(s);break}return n}function jce(e,t){let n=new XR,[o,i]=uct(e,t),r=lct(e,t),s=pEe(e,t),a=pEe(t,e),[c,l]=dct(e,t),d=AEe(e,t),u=AEe(t,e);return n.I2I=r.isEmpty()?[]:[r],n.I2B=l,n.I2E=s.isEmpty()?[]:[s],n.B2I=c,n.B2B=o,n.B2E=d,n.E2I=a.isEmpty()?[]:[a],n.E2B=u,n}class T_{constructor(e=1,t=0,n=0,o=1,i=0,r=0){this.a=e,this.b=t,this.c=n,this.d=o,this.tx=i,this.ty=r}fromMatrix3x3(e){let[t,n,o]=e[0],[i,r,s]=e[1];return new T_(t,i,n,r,o,s)}toMatrix3x3(){return[[this.a,this.c,this.tx],[this.b,this.d,this.ty],[0,0,1]]}clone(){return new T_(this.a,this.b,this.c,this.d,this.tx,this.ty)}transform(e){return[e[0]*this.a+e[1]*this.c+this.tx,e[0]*this.b+e[1]*this.d+this.ty]}multiply(e){return new T_(this.a*e.a+this.c*e.b,this.b*e.a+this.d*e.b,this.a*e.c+this.c*e.d,this.b*e.c+this.d*e.d,this.a*e.tx+this.c*e.ty+this.tx,this.b*e.tx+this.d*e.ty+this.ty)}translate(...e){let t,n;if(e.length==1&&!isNaN(e[0].x)&&!isNaN(e[0].y))t=e[0].x,n=e[0].y;else if(e.length===2&&typeof e[0]=="number"&&typeof e[1]=="number")t=e[0],n=e[1];else throw mu.ILLEGAL_PARAMETERS;return this.multiply(new T_(1,0,0,1,t,n))}rotate(e,t=0,n=0){let o=Math.cos(e),i=Math.sin(e);return this.translate(t,n).multiply(new T_(o,i,-i,o,0,0)).translate(-t,-n)}scale(e,t){return this.multiply(new T_(e,0,0,t,0,0))}equalTo(e){if(!we.Utils.EQ(this.tx,e.tx))return!1;if(!we.Utils.EQ(this.ty,e.ty))return!1;if(!we.Utils.EQ(this.a,e.a))return!1;if(!we.Utils.EQ(this.b,e.b))return!1;if(!we.Utils.EQ(this.c,e.c))return!1;if(!we.Utils.EQ(this.d,e.d))return!1;return!0}}class gct{constructor(e,t){this.low=e,this.high=t}get max(){return this.clone()}less_than(e){return this.low<e.low||this.low===e.low&&this.high<e.high}equal_to(e){return this.low===e.low&&this.high===e.high}intersect(e){return!this.not_intersect(e)}not_intersect(e){return this.high<e.low||e.high<this.low}merge(e){let t=this.low===void 0?e.low:this.low<e.low?this.low:e.low,n=this.high===void 0?e.high:this.high>e.high?this.high:e.high,o=this.clone();return o.low=t,o.high=n,o}output(){return[this.low,this.high]}comparable_less_than(e,t){return e<t}}class DM{constructor(e,t,n=null,o=null,i=null,r=$l){if(this.left=n,this.right=o,this.parent=i,this.color=r,this.item={key:void 0,values:[]},t!==void 0)this.item.values.push(t);if(e!==void 0)if(Array.isArray(e)){let[s,a]=e;if(!Number.isNaN(s)&&!Number.isNaN(a)){let c=s,l=a;if(c>l)[c,l]=[l,c];this.item.key=new PEe(c,l)}}else this.item.key=e;this.max=this.item.key?this.item.key.max:void 0}isNil(){return this.item.key===void 0&&this.item.values.length===0&&this.left===null&&this.right===null&&this.color===$l}requireKey(){if(!this.item.key)throw Error("Node key is undefined (nil/sentinel). Operation is not applicable.");return this.item.key}less_than(e){let t=this.requireKey(),n=e.requireKey();return t.less_than(n)}_value_equal(e){let t=this.item.values[0],n=e.item.values[0];return t&&n&&t.equal_to?t.equal_to(n):t===n}equal_to(e){let t=this.requireKey(),n=e.requireKey();return t.equal_to(n)}intersect(e){let t=this.requireKey(),n=e.requireKey();return t.intersect(n)}copy_data(e){this.item.key=e.item.key,this.item.values=e.item.values.slice()}update_max(){if(this.max=this.item.key?this.item.key.max:void 0,this.right&&this.right.max)this.max=this.max?this.max.merge(this.right.max):this.right.max;if(this.left&&this.left.max)this.max=this.max?this.max.merge(this.left.max):this.left.max}not_intersect_left_subtree(e){if(!this.left)return!0;let t=this.left.max?this.left.max.high:this.left.item.key.high,n=this.requireKey(),o=e.requireKey();return n.comparable_less_than(t,o.low)}not_intersect_right_subtree(e){if(!this.right)return!0;let t=this.right.max?this.right.max.low:this.right.item.key.low,n=this.requireKey(),o=e.requireKey();return n.comparable_less_than(o.high,t)}}class Kq{constructor(){this.root=null,this.nil_node=new DM}get size(){let e=0;return this.tree_walk(this.root,(t)=>e+=t.item.values.length),e}get keys(){let e=[];return this.tree_walk(this.root,(t)=>e.push(t.item.key.output())),e}get values(){let e=[];return this.tree_walk(this.root,(t)=>{for(let n of t.item.values)e.push(n)}),e}get items(){let e=[];return this.tree_walk(this.root,(t)=>{let n=t.item.key.output();for(let o of t.item.values)e.push({key:n,value:o})}),e}isEmpty(){return this.root==null||this.root===this.nil_node}clear(){this.root=null}insert(e,t=e){if(e===void 0)return;let n=this.tree_search(this.root,new DM(e));if(n)return n.item.values.push(t),n;let o=new DM(e,t,this.nil_node,this.nil_node,null,w_);return this.tree_insert(o),this.recalc_max(o),o}exist(e,t=e){let n=this.tree_search(this.root,new DM(e));if(!n)return!1;if(arguments.length<2||t===e)return!0;return n.item.values.some((o)=>o&&o.equal_to?o.equal_to(t):o===t)}remove(e,t=e){let n=this.tree_search(this.root,new DM(e));if(!n)return;if(arguments.length<2)return this.tree_delete(n),n;let o=n.item.values.findIndex((i)=>i&&i.equal_to?i.equal_to(t):i===t);if(o>=0){if(n.item.values.splice(o,1),n.item.values.length===0)this.tree_delete(n);return n}return}search(e,t=(n,o)=>n===o?o.output():n){let n=new DM(e),o=[];this.tree_search_interval(this.root,n,o);let i=[];for(let r of o)for(let s of r.item.values)i.push(t(s,r.item.key));return i}intersect_any(e){let t=new DM(e);return this.tree_find_any_interval(this.root,t)}forEach(e){this.tree_walk(this.root,(t)=>{for(let n of t.item.values)e(t.item.key,n)})}map(e){let t=new Kq;return this.tree_walk(this.root,(n)=>{for(let o of n.item.values)t.insert(n.item.key,e(o,n.item.key))}),t}*iterate(e,t=(n,o)=>n===o?o.output():n){let n=null;if(e)n=this.tree_search_nearest_forward(this.root,new DM(e));else if(this.root)n=this.local_minimum(this.root);while(n){for(let o of n.item.values)yield t(o,n.item.key);n=this.tree_successor(n)}}recalc_max(e){let t=e;while(t.parent!=null)t.parent.update_max(),t=t.parent}tree_insert(e){let t=this.root,n=null;if(this.root==null||this.root===this.nil_node)this.root=e;else{while(t!==this.nil_node)if(n=t,e.less_than(t))t=t.left;else t=t.right;if(e.parent=n,e.less_than(n))n.left=e;else n.right=e}this.insert_fixup(e)}insert_fixup(e){let t,n;t=e;while(t!==this.root&&t.parent.color===w_)if(t.parent===t.parent.parent.left)if(n=t.parent.parent.right,n.color===w_)t.parent.color=$l,n.color=$l,t.parent.parent.color=w_,t=t.parent.parent;else{if(t===t.parent.right)t=t.parent,this.rotate_left(t);t.parent.color=$l,t.parent.parent.color=w_,this.rotate_right(t.parent.parent)}else if(n=t.parent.parent.left,n.color===w_)t.parent.color=$l,n.color=$l,t.parent.parent.color=w_,t=t.parent.parent;else{if(t===t.parent.left)t=t.parent,this.rotate_right(t);t.parent.color=$l,t.parent.parent.color=w_,this.rotate_left(t.parent.parent)}this.root.color=$l}tree_delete(e){let t,n;if(e.left===this.nil_node||e.right===this.nil_node)t=e;else t=this.tree_successor(e);if(t.left!==this.nil_node)n=t.left;else n=t.right;if(n.parent=t.parent,t===this.root)this.root=n;else{if(t===t.parent.left)t.parent.left=n;else t.parent.right=n;t.parent.update_max()}if(this.recalc_max(n),t!==e)e.copy_data(t),e.update_max(),this.recalc_max(e);if(t.color===$l)this.delete_fixup(n)}delete_fixup(e){let t=e,n;while(t!==this.root&&t.parent!=null&&t.color===$l)if(t===t.parent.left){if(n=t.parent.right,n.color===w_)n.color=$l,t.parent.color=w_,this.rotate_left(t.parent),n=t.parent.right;if(n.left.color===$l&&n.right.color===$l)n.color=w_,t=t.parent;else{if(n.right.color===$l)n.color=w_,n.left.color=$l,this.rotate_right(n),n=t.parent.right;n.color=t.parent.color,t.parent.color=$l,n.right.color=$l,this.rotate_left(t.parent),t=this.root}}else{if(n=t.parent.left,n.color===w_)n.color=$l,t.parent.color=w_,this.rotate_right(t.parent),n=t.parent.left;if(n.left.color===$l&&n.right.color===$l)n.color=w_,t=t.parent;else{if(n.left.color===$l)n.color=w_,n.right.color=$l,this.rotate_left(n),n=t.parent.left;n.color=t.parent.color,t.parent.color=$l,n.left.color=$l,this.rotate_right(t.parent),t=this.root}}t.color=$l}tree_search(e,t){if(e==null||e===this.nil_node)return;if(t.equal_to(e))return e;if(t.less_than(e))return this.tree_search(e.left,t);else return this.tree_search(e.right,t)}tree_search_nearest_forward(e,t){let n=null,o=e;while(o&&o!==this.nil_node)if(o.less_than(t))if(o.intersect(t))n=o,o=o.left;else o=o.right;else{if(!n||o.less_than(n))n=o;o=o.left}return n||null}tree_search_interval(e,t,n){if(e!=null&&e!==this.nil_node){if(e.left!==this.nil_node&&!e.not_intersect_left_subtree(t))this.tree_search_interval(e.left,t,n);if(e.intersect(t))n.push(e);if(e.right!==this.nil_node&&!e.not_intersect_right_subtree(t))this.tree_search_interval(e.right,t,n)}}tree_find_any_interval(e,t){let n=!1;if(e!=null&&e!==this.nil_node){if(e.left!==this.nil_node&&!e.not_intersect_left_subtree(t))n=this.tree_find_any_interval(e.left,t);if(!n)n=e.intersect(t);if(!n&&e.right!==this.nil_node&&!e.not_intersect_right_subtree(t))n=this.tree_find_any_interval(e.right,t)}return n}local_minimum(e){let t=e;while(t.left!=null&&t.left!==this.nil_node)t=t.left;return t}local_maximum(e){let t=e;while(t.right!=null&&t.right!==this.nil_node)t=t.right;return t}tree_successor(e){let t,n,o;if(e.right!==this.nil_node)t=this.local_minimum(e.right);else{n=e,o=e.parent;while(o!=null&&o.right===n)n=o,o=o.parent;t=o}return t}rotate_left(e){let t=e.right;if(e.right=t.left,t.left!==this.nil_node)t.left.parent=e;if(t.parent=e.parent,e===this.root)this.root=t;else if(e===e.parent.left)e.parent.left=t;else e.parent.right=t;if(t.left=e,e.parent=t,e!==null&&e!==this.nil_node)e.update_max();if(t!=null&&t!==this.nil_node)t.update_max()}rotate_right(e){let t=e.left;if(e.left=t.right,t.right!==this.nil_node)t.right.parent=e;if(t.parent=e.parent,e===this.root)this.root=t;else if(e===e.parent.left)e.parent.left=t;else e.parent.right=t;if(t.right=e,e.parent=t,e!==null&&e!==this.nil_node)e.update_max();if(t!=null&&t!==this.nil_node)t.update_max()}tree_walk(e,t){if(e!=null&&e!==this.nil_node)this.tree_walk(e.left,t),t(e),this.tree_walk(e.right,t)}testRedBlackProperty(){let e=!0;return this.tree_walk(this.root,function(t){if(t.color===w_){if(!(t.left.color===$l&&t.right.color===$l))e=!1}}),e}testBlackHeightProperty(e){let t=0,n=0,o=0;if(e.color===$l)t++;if(e.left!==this.nil_node)n=this.testBlackHeightProperty(e.left);else n=1;if(e.right!==this.nil_node)o=this.testBlackHeightProperty(e.right);else o=1;if(n!==o)throw Error("Red-black height property violated");return t+=n,t}}class NM{get name(){throw mu.CANNOT_INVOKE_ABSTRACT_METHOD}get box(){throw mu.CANNOT_INVOKE_ABSTRACT_METHOD}clone(){throw mu.CANNOT_INVOKE_ABSTRACT_METHOD}translate(...e){return this.transform(new T_().translate(...e))}rotate(e,t=new we.Point){return this.transform(new T_().rotate(e,t.x,t.y))}scale(e,t){return this.transform(new T_().scale(e,t))}transform(...e){throw mu.CANNOT_INVOKE_ABSTRACT_METHOD}toJSON(){return Object.assign({},this,{name:this.name})}svg(e={}){throw mu.CANNOT_INVOKE_ABSTRACT_METHOD}}class ile{constructor(e){this.shape=e,this.next=void 0,this.prev=void 0,this.face=void 0,this.arc_length=0,this.bvStart=void 0,this.bvEnd=void 0,this.bv=void 0,this.overlap=void 0}get start(){return this.shape.start}get end(){return this.shape.end}get length(){return this.shape.length}get box(){return this.shape.box}get isSegment(){return this.shape instanceof we.Segment}get isArc(){return this.shape instanceof we.Arc}get isLine(){return this.shape instanceof we.Line}get isRay(){return this.shape instanceof we.Ray}middle(){return this.shape.middle()}pointAtLength(e){return this.shape.pointAtLength(e)}contains(e){return this.shape.contains(e)}setInclusion(e){if(this.bv!==void 0)return this.bv;if(this.shape instanceof we.Line||this.shape instanceof we.Ray)return this.bv=we.OUTSIDE,this.bv;if(this.bvStart===void 0)this.bvStart=Uq(e,this.start);if(this.bvEnd===void 0)this.bvEnd=Uq(e,this.end);if(this.bvStart===we.OUTSIDE||this.bvEnd==we.OUTSIDE)this.bv=we.OUTSIDE;else if(this.bvStart===we.INSIDE||this.bvEnd==we.INSIDE)this.bv=we.INSIDE;else{let t=Uq(e,this.middle());this.bv=t}return this.bv}setOverlap(e){let t=void 0,n=this.shape,o=e.shape;if(n instanceof we.Segment&&o instanceof we.Segment){if(n.start.equalTo(o.start)&&n.end.equalTo(o.end))t=we.OVERLAP_SAME;else if(n.start.equalTo(o.end)&&n.end.equalTo(o.start))t=we.OVERLAP_OPPOSITE}else if(n instanceof we.Arc&&o instanceof we.Arc){if(n.start.equalTo(o.start)&&n.end.equalTo(o.end)&&n.middle().equalTo(o.middle()))t=we.OVERLAP_SAME;else if(n.start.equalTo(o.end)&&n.end.equalTo(o.start)&&n.middle().equalTo(o.middle()))t=we.OVERLAP_OPPOSITE}else if(n instanceof we.Segment&&o instanceof we.Arc||n instanceof we.Arc&&o instanceof we.Segment){if(n.start.equalTo(o.start)&&n.end.equalTo(o.end)&&n.middle().equalTo(o.middle()))t=we.OVERLAP_SAME;else if(n.start.equalTo(o.end)&&n.end.equalTo(o.start)&&n.middle().equalTo(o.middle()))t=we.OVERLAP_OPPOSITE}if(this.overlap===void 0)this.overlap=t;if(e.overlap===void 0)e.overlap=t}svg(){if(this.shape instanceof we.Segment)return` L${this.shape.end.x},${this.shape.end.y}`;else if(this.shape instanceof we.Arc){let e=this.shape,t,n=e.counterClockwise?"1":"0";if(we.Utils.EQ(e.sweep,2*Math.PI)){let o=e.counterClockwise?1:-1,i=new we.Arc(e.pc,e.r,e.startAngle,e.startAngle+o*Math.PI,e.counterClockwise),r=new we.Arc(e.pc,e.r,e.startAngle+o*Math.PI,e.endAngle,e.counterClockwise);return t="0",` A${i.r},${i.r} 0 ${t},${n} ${i.end.x},${i.end.y}
A${r.r},${r.r} 0 ${t},${n} ${r.end.x},${r.end.y}`}else return t=e.sweep<=Math.PI?"0":"1",` A${e.r},${e.r} 0 ${t},${n} ${e.end.x},${e.end.y}`}}toJSON(){return this.shape.toJSON()}}class Wq{constructor(e){this.circle=e}get inversion_circle(){return this.circle}static inversePoint(e,t){let n=new qce(e.pc,t),o=e.r*e.r,i=n.dot(n);return dEe.EQ_0(i)?new Vat(Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY):e.pc.translate(n.multiply(o/i))}static inverseCircle(e,t){let n=e.pc.distanceTo(t.pc)[0];if(dEe.EQ(n,t.r)){let o=e.r*e.r/(2*t.r),i=new qce(e.pc,t.pc);i=i.normalize();let r=e.pc.translate(i.multiply(o));return new Yat(r,i)}else{let o=new qce(e.pc,t.pc),i=e.r*e.r/(o.dot(o)-t.r*t.r),r=e.pc.translate(o.multiply(i)),s=Math.abs(i)*t.r;return new lEe(r,s)}}static inverseLine(e,t){let[n,o]=e.pc.distanceTo(t);if(dEe.EQ_0(n))return t.clone();else{let i=e.r*e.r/(2*n),r=new qce(e.pc,o.end);return r=r.multiply(i/n),new lEe(e.pc.translate(r),i)}}inverse(e){if(e instanceof Vat)return Wq.inversePoint(this.circle,e);else if(e instanceof lEe)return Wq.inverseCircle(this.circle,e);else if(e instanceof Yat)return Wq.inverseLine(this.circle,e)}}class ki{static point2point(e,t){return e.distanceTo(t)}static point2line(e,t){let n=e.projectionOn(t);return[new we.Vector(e,n).length,new we.Segment(e,n)]}static point2circle(e,t){let[n,o]=e.distanceTo(t.center);if(we.Utils.EQ_0(n))return[t.r,new we.Segment(e,t.toArc().start)];else{let i=Math.abs(n-t.r),r=new we.Vector(t.pc,e).normalize().multiply(t.r),s=t.pc.translate(r);return[i,new we.Segment(e,s)]}}static point2segment(e,t){if(t.start.equalTo(t.end))return ki.point2point(e,t.start);let n=new we.Vector(t.start,t.end),o=new we.Vector(t.start,e),i=new we.Vector(t.end,e),r=n.dot(o),s=-n.dot(i),a,c;if(we.Utils.GE(r,0)&&we.Utils.GE(s,0)){let l=t.tangentInStart();return a=Math.abs(l.cross(o)),c=t.start.translate(l.multiply(l.dot(o))),[a,new we.Segment(e,c)]}else if(r<0)return e.distanceTo(t.start);else return e.distanceTo(t.end)}static point2arc(e,t){let n=new we.Circle(t.pc,t.r),o=[],i,r;if([i,r]=ki.point2circle(e,n),r.end.on(t))o.push(ki.point2circle(e,n));return o.push(ki.point2point(e,t.start)),o.push(ki.point2point(e,t.end)),ki.sort(o),o[0]}static point2edge(e,t){return t.shape instanceof we.Segment?ki.point2segment(e,t.shape):ki.point2arc(e,t.shape)}static segment2line(e,t){let n=e.intersect(t);if(n.length>0)return[0,new we.Segment(n[0],n[0])];let o=[];return o.push(ki.point2line(e.start,t)),o.push(ki.point2line(e.end,t)),ki.sort(o),o[0]}static segment2segment(e,t){let n=ele(e,t);if(n.length>0)return[0,new we.Segment(n[0],n[0])];let o=[],i,r;return[i,r]=ki.point2segment(t.start,e),o.push([i,r.reverse()]),[i,r]=ki.point2segment(t.end,e),o.push([i,r.reverse()]),o.push(ki.point2segment(e.start,t)),o.push(ki.point2segment(e.end,t)),ki.sort(o),o[0]}static segment2circle(e,t){let n=e.intersect(t);if(n.length>0)return[0,new we.Segment(n[0],n[0])];let o=new we.Line(e.ps,e.pe),[i,r]=ki.point2line(t.center,o);if(we.Utils.GE(i,t.r)&&r.end.on(e))return ki.point2circle(r.end,t);else{let[s,a]=ki.point2circle(e.start,t),[c,l]=ki.point2circle(e.end,t);return we.Utils.LT(s,c)?[s,a]:[c,l]}}static segment2arc(e,t){let n=e.intersect(t);if(n.length>0)return[0,new we.Segment(n[0],n[0])];let o=new we.Line(e.ps,e.pe),i=new we.Circle(t.pc,t.r),[r,s]=ki.point2line(i.center,o);if(we.Utils.GE(r,i.r)&&s.end.on(e)){let[d,u]=ki.point2circle(s.end,i);if(u.end.on(t))return[d,u]}let a=[];a.push(ki.point2arc(e.start,t)),a.push(ki.point2arc(e.end,t));let c,l;return[c,l]=ki.point2segment(t.start,e),a.push([c,l.reverse()]),[c,l]=ki.point2segment(t.end,e),a.push([c,l.reverse()]),ki.sort(a),a[0]}static circle2circle(e,t){let n=e.intersect(t);if(n.length>0)return[0,new we.Segment(n[0],n[0])];if(e.center.equalTo(t.center)){let o=e.toArc(),i=t.toArc();return ki.point2point(o.start,i.start)}else{let o=new we.Line(e.center,t.center),i=o.intersect(e),r=o.intersect(t),s=[];return s.push(ki.point2point(i[0],r[0])),s.push(ki.point2point(i[0],r[1])),s.push(ki.point2point(i[1],r[0])),s.push(ki.point2point(i[1],r[1])),ki.sort(s),s[0]}}static circle2line(e,t){let n=e.intersect(t);if(n.length>0)return[0,new we.Segment(n[0],n[0])];let[o,i]=ki.point2line(e.center,t),[r,s]=ki.point2circle(i.end,e);return s=s.reverse(),[r,s]}static arc2line(e,t){let n=t.intersect(e);if(n.length>0)return[0,new we.Segment(n[0],n[0])];let o=new we.Circle(e.center,e.r),[i,r]=ki.point2line(o.center,t);if(we.Utils.GE(i,o.r)){let[s,a]=ki.point2circle(r.end,o);if(a.end.on(e))return[s,a]}else{let s=[];return s.push(ki.point2line(e.start,t)),s.push(ki.point2line(e.end,t)),ki.sort(s),s[0]}}static arc2circle(e,t){let n=e.intersect(t);if(n.length>0)return[0,new we.Segment(n[0],n[0])];let o=new we.Circle(e.center,e.r),[i,r]=ki.circle2circle(o,t);if(r.start.on(e))return[i,r];else{let s=[];return s.push(ki.point2circle(e.start,t)),s.push(ki.point2circle(e.end,t)),ki.sort(s),s[0]}}static arc2arc(e,t){let n=e.intersect(t);if(n.length>0)return[0,new we.Segment(n[0],n[0])];let o=new we.Circle(e.center,e.r),i=new we.Circle(t.center,t.r),[r,s]=ki.circle2circle(o,i);if(s.start.on(e)&&s.end.on(t))return[r,s];else{let a=[],c,l;if([c,l]=ki.point2arc(e.start,t),l.end.on(t))a.push([c,l]);if([c,l]=ki.point2arc(e.end,t),l.end.on(t))a.push([c,l]);if([c,l]=ki.point2arc(t.start,e),l.end.on(e))a.push([c,l.reverse()]);if([c,l]=ki.point2arc(t.end,e),l.end.on(e))a.push([c,l.reverse()]);return[c,l]=ki.point2point(e.start,t.start),a.push([c,l]),[c,l]=ki.point2point(e.start,t.end),a.push([c,l]),[c,l]=ki.point2point(e.end,t.start),a.push([c,l]),[c,l]=ki.point2point(e.end,t.end),a.push([c,l]),ki.sort(a),a[0]}}static point2polygon(e,t){let n=[Number.POSITIVE_INFINITY,new we.Segment];for(let o of t.edges){let[i,r]=ki.point2edge(e,o);if(we.Utils.LT(i,n[0]))n=[i,r]}return n}static shape2polygon(e,t){let n=[Number.POSITIVE_INFINITY,new we.Segment];for(let o of t.edges){let[i,r]=e.distanceTo(o.shape);if(we.Utils.LT(i,n[0]))n=[i,r]}return n}static polygon2polygon(e,t){let n=[Number.POSITIVE_INFINITY,new we.Segment];for(let o of e.edges)for(let i of t.edges){let[r,s]=o.shape.distanceTo(i.shape);if(we.Utils.LT(r,n[0]))n=[r,s]}return n}static box2box_minmax(e,t){let n=Math.max(Math.max(e.xmin-t.xmax,0),Math.max(t.xmin-e.xmax,0)),o=Math.max(Math.max(e.ymin-t.ymax,0),Math.max(t.ymin-e.ymax,0)),i=n*n+o*o,r=e.merge(t),s=r.xmax-r.xmin,a=r.ymax-r.ymin,c=s*s+a*a;return[i,c]}static minmax_tree_process_level(e,t,n,o){let i,r;for(let l of t){[i,r]=ki.box2box_minmax(e.box,l.item.key);for(let d of l.item.values)if(d instanceof we.Edge)o.insert([i,r],d.shape);else o.insert([i,r],d);if(we.Utils.LT(r,n))n=r}if(t.length===0)return n;let s=t.map((l)=>l.left.isNil()?void 0:l.left).filter((l)=>l!==void 0),a=t.map((l)=>l.right.isNil()?void 0:l.right).filter((l)=>l!==void 0),c=[...s,...a].filter((l)=>{let[d,u]=ki.box2box_minmax(e.box,l.max);return we.Utils.LE(d,n)});return n=ki.minmax_tree_process_level(e,c,n,o),n}static minmax_tree(e,t,n){let o=new Kq,i=[t.index.root],r=n<Number.POSITIVE_INFINITY?n*n:Number.POSITIVE_INFINITY;return r=ki.minmax_tree_process_level(e,i,r,o),o}static minmax_tree_calc_distance(e,t,n){let o,i;if(t!=null&&!t.isNil()){if([o,i]=ki.minmax_tree_calc_distance(e,t.left,n),i)return[o,i];if(we.Utils.LT(o[0],Math.sqrt(t.item.key.low)))return[o,!0];let[r,s]=ki.distanceToArray(e,t.item.values);if(we.Utils.LT(r,o[0]))o=[r,s];return[o,i]=ki.minmax_tree_calc_distance(e,t.right,o),[o,i]}return[n,!1]}static shape2planarSet(e,t,n=Number.POSITIVE_INFINITY){let o=[n,new we.Segment],i=!1;if(t instanceof we.PlanarSet){let r=ki.minmax_tree(e,t,n);[o,i]=ki.minmax_tree_calc_distance(e,r.root,o)}return o}static sort(e){e.sort((t,n)=>{if(we.Utils.LT(t[0],n[0]))return-1;if(we.Utils.GT(t[0],n[0]))return 1;return 0})}static distance(e,t){return e.distanceTo(t)}static distanceToArray(e,t){let n=[Number.POSITIVE_INFINITY,new we.Segment];for(let o of t){let[i,r]=e.distanceTo(o);if(we.Utils.LT(i,n[0]))n=[i,r]}return n}static shape2multiline(e,t){let n=[Number.POSITIVE_INFINITY,new we.Segment];for(let o of t){let[i,r]=ki.distance(e,o.shape);if(we.Utils.LT(i,n[0]))n=[i,r]}return n}static multiline2multiline(e,t){let n=[Number.POSITIVE_INFINITY,new we.Segment];for(let o of e)for(let i of t){let[r,s]=ki.distance(o.shape,i.shape);if(we.Utils.LT(r,n[0]))n=[r,s]}return n}}function EEe(e){return new xct(e.split(" ").map(Number))}function Ict(e){return e.split(", ").map(EEe)}function MEe(e){let t=Ict(e),n=[];for(let o=0;o<t.length-1;o++)n.push(new LLn(t[o],t[o+1]));return new kLn(n)}function FLn(e){return e.replace(/\(\(/,"").replace(/\)\)$/,"").split("), (").map(MEe)}function bct(e){let t=e.replace(/\(\(/,"").replace(/\)\)$/,"").split("), ("),n=new Cct,o;return t.forEach((i,r)=>{let s=i.split(", ").map((c)=>new xct(c.split(" ").map(Number))),a=n.addFace(s);if(r===0)o=a.orientation();else if(a.orientation()===o)a.reverse()}),n}function HLn(e){let n=e.split(/\)\), \(\(/).map((r)=>"(("+r+"))").map(bct),o=new Cct;return n.reduce((r,s)=>[...r,...s?.faces],[]).forEach((r)=>o.addFace([...r?.shapes])),o}function OLn(e){if(e.startsWith("POLYGON")){let t=e.replace(/^POLYGON /,"");return bct(t)}else{let t=e.replace(/^MULTIPOLYGON \(\(\((.*)\)\)\)$/,"$1");return HLn(t)}}function zLn(e){return e.split(`
`).map((n)=>n.match(/\(([^)]+)\)/)[1]).map(EEe)}function GLn(e){return e.split(`
`).map((n)=>n.match(/\(([^)]+)\)/)[1]).map(MEe).reduce((n,o)=>[...n,...o],[])}function Sct(e){if(e.startsWith("POINT")){let t=e.replace(/^POINT \(/,"").replace(/\)$/,"");return EEe(t)}else if(e.startsWith("MULTIPOINT")){let t=e.replace(/^MULTIPOINT \(/,"").replace(/\)$/,"");return Ict(t)}else if(e.startsWith("LINESTRING")){let t=e.replace(/^LINESTRING \(/,"").replace(/\)$/,"");return MEe(t)}else if(e.startsWith("MULTILINESTRING")){let t=e.replace(/^MULTILINESTRING /,"");return FLn(t)}else if(e.startsWith("POLYGON")||e.startsWith("MULTIPOLYGON"))return OLn(e);else if(e.startsWith("GEOMETRYCOLLECTION")){let t=/(?<type>POINT|LINESTRING|POLYGON|MULTIPOINT|MULTILINESTRING|MULTIPOLYGON) \((?:[^\(\)]|\([^\)]*\))*\)/g,n=e.match(t);if(n[0].startsWith("GEOMETRYCOLLECTION"))n[0]=n[0].replace("GEOMETRYCOLLECTION (","");return n.map(Sct).map((i)=>i instanceof Array?i:[i]).reduce((i,r)=>[...i,...r],[])}else if(Pct(e))return zLn(e);else if(vct(e))return GLn(e);return[]}function Pct(e){return e.split(`
`)?.every((t)=>t.includes("POINT"))}function vct(e){return e.split(`
`)?.every((t)=>t.includes("LINESTRING"))}function YLn(e){return e.startsWith("POINT")||Pct(e)||e.startsWith("LINESTRING")||vct(e)||e.startsWith("MULTILINESTRING")||e.startsWith("POLYGON")||e.startsWith("MULTIPOINT")||e.startsWith("MULTIPOLYGON")||e.startsWith("GEOMETRYCOLLECTION")}var zR,zkn,Jce,kv=0.000001,Gkn=3,$2,we,$ce,Dat,WR,nLn=(...e)=>new we.Multiline(...e),Rv,Qv,PA,rLn,sLn,bIr,kat,Lat,nle=1,Jq=2,YR=3,Qz,mLn,pLn,ALn,_Ln,gLn,vLn,ELn=(...e)=>new we.Matrix(...e),PEe,w_=1,$l=0,fct,Bs,Nm=(...e)=>new we.Point(...e),Lz,KR=(...e)=>new we.Vector(...e),Bp,ole=(...e)=>new we.Segment(...e),Vq,MLn,BLn=(...e)=>new we.Line(...e),jR,wLn=(...e)=>new we.Circle(...e),d0,TLn=(...e)=>new we.Arc(...e),vA,DLn=(...e)=>new we.Box(...e),yct,Ez,vEe,NLn=(...e)=>new we.Ray(...e),Dc=class e{constructor(){this.faces=new we.PlanarSet,this.edges=new we.PlanarSet;let t=[...arguments];if(t.length===1&&(t[0]instanceof Array&&t[0].length>0||t[0]instanceof we.Circle||t[0]instanceof we.Box)){let n=t[0];if(t[0]instanceof Array&&t[0].every((o)=>o instanceof Array))if(n.every((o)=>o instanceof Array&&o.length===2&&typeof o[0]==="number"&&typeof o[1]==="number"))this.faces.add(new we.Face(this,n));else for(let o of n)if(o instanceof Array&&o[0]instanceof Array&&o[0].every((i)=>i instanceof Array&&i.length===2&&typeof i[0]==="number"&&typeof i[1]==="number"))for(let i of o)this.faces.add(new we.Face(this,i));else this.faces.add(new we.Face(this,o));else this.faces.add(new we.Face(this,n))}}get box(){return[...this.faces].reduce((t,n)=>t.merge(n.box),new we.Box)}get vertices(){return[...this.faces].flatMap((t)=>t.vertices)}clone(){let t=new e;for(let n of this.faces)t.addFace(n.shapes);return t}createFromArray(t){let n=new e;return t.forEach((o)=>[...o.faces].forEach((i)=>n.addFace(i.shapes))),n}isEmpty(){return this.edges.size===0||this.faces.size===0}isValid(){let t=!0;for(let n of this.faces)if(!n.isSimple(this.edges)){t=!1;break}return t}area(){let t=[...this.faces].reduce((n,o)=>n+o.signedArea(),0);return Math.abs(t)}addFace(...t){let n=new we.Face(this,...t);return this.faces.add(n),n}deleteFace(t){for(let n of t)this.edges.delete(n);return this.faces.delete(t)}recreateFaces(){this.faces.clear();for(let o of this.edges)o.face=null;let t,n=!0;while(n){n=!1;for(let o of this.edges)if(o.face===null){t=o,n=!0;break}if(n){let o=t;do o=o.next;while(o.next!==t);this.addFace(t,o)}}}removeChain(t,n,o){if(o.next===n){this.deleteFace(t);return}for(let i=n;i!==o.next;i=i.next)if(t.remove(i),this.edges.delete(i),t.isEmpty()){this.deleteFace(t);break}}addVertex(t,n){let o=n.shape.split(t);if(o[0]===null)return n.prev;if(o[1]===null)return n;let i=new we.Edge(o[0]),r=n.prev;return n.face.insert(i,r),this.edges.delete(n),this.edges.add(i),n.shape=o[1],this.edges.add(n),i}removeEndVertex(t){let n=t.next;if(n===t)return;t.face.merge_with_next_edge(t),this.edges.delete(n)}cut(t){let o=this.splitToIslands().flatMap((i)=>i._cutSingleIsland(t)).filter((i)=>i.isValid()&&i.isEmpty()===!1);return this.createFromArray(o)}_cutSingleIsland(t){let n=this.clone(),o=t.clone(),i={int_points1:[],int_points2:[],int_points1_sorted:[],int_points2_sorted:[]};for(let a of o.edges)for(let c of n.edges){let l=nct(a,c);for(let d of l)Bz(a,d,i.int_points1),Bz(c,d,i.int_points2)}if(i.int_points1.length===0)return n;i.int_points1_sorted=h7(i.int_points1),i.int_points2_sorted=h7(i.int_points2),Tz(o,i.int_points1_sorted),Tz(n,i.int_points2_sorted),SEe(i),i.int_points1_sorted=h7(i.int_points1),i.int_points2_sorted=h7(i.int_points2),hEe(i.int_points1),mEe(i.int_points1,n);for(let a of i.int_points1_sorted)if(a.edge_before&&a.edge_after&&a.edge_before.bv===a.edge_after.bv)i.int_points2[a.id]=-1,a.id=-1;if(i.int_points1=i.int_points1.filter((a)=>a.id>=0),i.int_points2=i.int_points2.filter((a)=>a.id>=0),i.int_points1.forEach((a,c)=>{a.id=c}),i.int_points2.forEach((a,c)=>{a.id=c}),i.int_points1.length===0)return n;i.int_points1_sorted=h7(i.int_points1),i.int_points2_sorted=h7(i.int_points2);let r,s;for(let a=1;a<i.int_points1_sorted.length;a++)if(s=i.int_points1_sorted[a],r=i.int_points1_sorted[a-1],s.edge_before&&s.edge_before.bv===1){let c=r.edge_after,l=s.edge_before,d=o.getChain(c,l);Qat(i.int_points2[r.id],i.int_points2[s.id],d),d.forEach((u)=>n.edges.add(u)),d=d.reverse().map((u)=>new we.Edge(u.shape.reverse()));for(let u=0;u<d.length-1;u++)d[u].next=d[u+1],d[u+1].prev=d[u];Qat(i.int_points2[s.id],i.int_points2[r.id],d),d.forEach((u)=>n.edges.add(u))}return n.recreateFaces(),n}cutWithLine(t){let n=new WR([t]);return this.cut(n)}findEdgeByPoint(t){let n;for(let o of this.faces)if(n=o.findEdgeByPoint(t),n!==void 0)break;return n}splitToIslands(){if(this.isEmpty())return[];let t=this.toArray();t.sort((i,r)=>r.area()-i.area());let n=[...t[0].faces][0].orientation(),o=t.filter((i)=>[...i.faces][0].orientation()===n);for(let i of t){let r=[...i.faces][0];if(r.orientation()===n)continue;for(let s of o)if(r.shapes.every((a)=>s.contains(a))){s.addFace(r.shapes);break}}return o}rearrange(){if(this.faces.size<=1)return this.clone();let t=this.splitToIslands(),n=new e;return t.forEach((o)=>{o.faces.forEach((i)=>n.addFace(i.shapes))}),n}orientation(){if(this.isEmpty())return zR.NOT_ORIENTABLE;return[...this.faces][0].orientation()}isOuter(t){return t.orientation()===this.orientation()}isMultiPolygon(){let t=0;return this.faces.forEach((n)=>{if(this.isOuter(n))t++}),t>1}reverse(){for(let t of this.faces)t.reverse();return this}contains(t){if(t instanceof we.Point){let n=Uq(this,t);return n===1||n===2}else return _ct(this,t)}distanceTo(t){if(t instanceof we.Point){let[n,o]=we.Distance.point2polygon(t,this);return o=o.reverse(),[n,o]}if(t instanceof we.Circle||t instanceof we.Line||t instanceof we.Segment||t instanceof we.Arc){let[n,o]=we.Distance.shape2polygon(t,this);return o=o.reverse(),[n,o]}if(t instanceof we.Box)return this.distanceTo(new we.Polygon(t));if(t instanceof we.Polygon){let n=[Number.POSITIVE_INFINITY,new we.Segment],o,i;for(let r of this.edges){let s=n[0];if([o,i]=we.Distance.shape2planarSet(r.shape,t.edges,s),we.Utils.LT(o,s))n=[o,i]}return n}}intersect(t){if(t instanceof we.Point)return this.contains(t)?[t]:[];if(t instanceof we.Line)return qq(t,this);if(t instanceof we.Ray)return act(t,this);if(t instanceof we.Circle)return tct(t,this);if(t instanceof we.Segment)return xEe(t,this);if(t instanceof we.Arc)return CEe(t,this);if(t instanceof we.Polygon)return Jkn(t,this);if(t instanceof we.Multiline)return qkn(t,this)}translate(t){let n=new e;for(let o of this.faces)n.addFace(o.shapes.map((i)=>i.translate(t)));return n}rotate(t=0,n=new we.Point){let o=new e;for(let i of this.faces)o.addFace(i.shapes.map((r)=>r.rotate(t,n)));return o}scale(t,n){let o=new e;for(let i of this.faces)o.addFace(i.shapes.map((r)=>r.scale(t,n)));return o}transform(t=new we.Matrix){let n=new e;for(let o of this.faces)n.addFace(o.shapes.map((i)=>i.transform(t)));return n}toJSON(){return[...this.faces].map((t)=>t.toJSON())}toArray(){return[...this.faces].map((t)=>t.toPolygon())}dpath(){return[...this.faces].reduce((t,n)=>t+n.svg(),"")}svg(t={}){let n=`
<path ${VR({fillRule:"evenodd",fill:"lightcyan",...t})} d="`;for(let o of this.faces)n+=`
${o.svg()}`;return n+=`" >
</path>`,n}},RLn=(...e)=>new we.Polygon(...e),lEe,Yat,Vat,qce,dEe,QLn=(e)=>new we.Inversion(e),kLn,xct,LLn,Cct;var u0=Ks(()=>{zR={CCW:-1,CW:1,NOT_ORIENTABLE:0},zkn=2*Math.PI,Jce=Object.freeze({__proto__:null,BOUNDARY:2,CCW:!0,CONTAINS:3,CW:!1,END_VERTEX:2,INSIDE:1,INTERLACE:4,NOT_VERTEX:0,ORIENTATION:zR,OUTSIDE:0,OVERLAP_OPPOSITE:2,OVERLAP_SAME:1,PIx2:zkn,START_VERTEX:1});$2=Object.freeze({__proto__:null,DECIMALS:Gkn,EQ:GR,EQ_0:uEe,GE:Ykn,GT:Xat,LE:Vkn,LT:Kat,getTolerance:Wat,setTolerance:Uat}),we={Utils:$2,Errors:void 0,Matrix:void 0,Planar_set:void 0,Point:void 0,Vector:void 0,Line:void 0,Circle:void 0,Segment:void 0,Arc:void 0,Box:void 0,Edge:void 0,Face:void 0,Ray:void 0,Ray_shooting:void 0,Multiline:void 0,Polygon:void 0,Distance:void 0,Inversion:void 0};for(let e in Jce)we[e]=Jce[e];Object.defineProperty(we,"DP_TOL",{get:function(){return Wat()},set:function(e){Uat(e)}});we.Errors=mu;$ce=class $ce{constructor(e,t){this.first=e,this.last=t||this.first}[Symbol.iterator](){let e=void 0;return{next:()=>(e=e?e.next:this.first,{value:e,done:e===void 0})}}get size(){let e=0;for(let t of this)e++;return e}toArray(e=void 0,t=void 0){let n=[],o=e||this.first,i=t||this.last,r=o;if(r===void 0)return n;do n.push(r),r=r.next;while(r!==i.next);return n}append(e){if(this.isEmpty())this.first=e;else e.prev=this.last,this.last.next=e;return this.last=e,this.last.next=void 0,this.first.prev=void 0,this}insert(e,t){if(this.isEmpty())this.first=e,this.last=e;else if(t===null||t===void 0)e.next=this.first,this.first.prev=e,this.first=e;else{let n=t.next;if(t.next=e,n)n.prev=e;if(e.prev=t,e.next=n,this.last===t)this.last=e}return this.last.next=void 0,this.first.prev=void 0,this}remove(e){if(e===this.first&&e===this.last)this.first=void 0,this.last=void 0;else{if(e.prev)e.prev.next=e.next;if(e.next)e.next.prev=e.prev;if(e===this.first)this.first=e.next;if(e===this.last)this.last=e.prev}return this}isEmpty(){return this.first===void 0}static testInfiniteLoop(e){let t=e,n=e;do{if(t!=e&&t===n)throw mu.INFINITE_LOOP;t=t.next,n=n.next.next}while(t!=e)}};Dat={stroke:"black"};WR=class e extends $ce{constructor(...t){super();if(this.isInfinite=!1,t.length===1&&t[0]instanceof Array&&t[0].length>0){let n=t[0],o=n.length,i=(c)=>c instanceof we.Segment||c instanceof we.Arc||c instanceof we.Ray||c instanceof we.Line,r=(c)=>c instanceof we.Segment||c instanceof we.Arc||c instanceof we.Ray,s=(c)=>c instanceof we.Segment||c instanceof we.Arc;if(o===1&&i(n[0])||o>1&&r(n[0])&&r(n[o-1])&&n.slice(1,o-1).every(s)){this.isInfinite=n.some((c)=>c instanceof we.Ray||c instanceof we.Line);for(let c of n){let l=new we.Edge(c);this.append(l)}this.setArcLength()}else throw we.Errors.ILLEGAL_PARAMETERS}}get edges(){return[...this]}get box(){return this.edges.reduce((t,n)=>t.merge(n.box),new we.Box)}get vertices(){let t=this.edges.map((n)=>n.start);return t.push(this.last.end),t}get length(){if(this.isEmpty())return 0;if(this.isInfinite)return Number.POSITIVE_INFINITY;let t=0;for(let n of this)t+=n.length;return t}clone(){return new e(this.toShapes())}setArcLength(){for(let t of this)this.setOneEdgeArcLength(t)}setOneEdgeArcLength(t){if(t===this.first)t.arc_length=0;else t.arc_length=t.prev.arc_length+t.prev.length}pointAtLength(t){if(t>this.length||t<0)return null;if(this.isInfinite)return null;let n=null;for(let o of this)if(t>=o.arc_length&&(o===this.last||t<o.next.arc_length)){n=o.pointAtLength(t-o.arc_length);break}return n}addVertex(t,n){let o=n.shape.split(t);if(o[0]===null)return n.prev;if(o[1]===null)return n;let i=new we.Edge(o[0]),r=n.prev;return this.insert(i,r),n.shape=o[1],i}getChain(t,n){let o=[];for(let i=t;i!==n.next;i=i.next)o.push(i);return o}split(t){for(let n of t){let o=this.findEdgeByPoint(n);this.addVertex(n,o)}return this}findEdgeByPoint(t){let n;for(let o of this)if(o.shape.contains(t)){n=o;break}return n}distanceTo(t){if(t instanceof we.Point){let[n,o]=we.Distance.shape2multiline(t,this);return[n,o.reverse()]}if(t instanceof we.Line){let[n,o]=we.Distance.shape2multiline(t,this);return[n,o.reverse()]}if(t instanceof we.Circle){let[n,o]=we.Distance.shape2multiline(t,this);return[n,o.reverse()]}if(t instanceof we.Segment){let[n,o]=we.Distance.shape2multiline(t,this);return[n,o.reverse()]}if(t instanceof we.Arc){let[n,o]=we.Distance.shape2multiline(t,this);return[n,o.reverse()]}if(t instanceof we.Box){let[n,o]=we.Distance.shape2multiline(new we.Polygon(t),this);return[n,o.reverse()]}if(t instanceof we.Multiline)return we.Distance.multiline2multiline(this,t);throw we.Errors.UNSUPPORTED_SHAPE_TYPE}intersect(t){if(t instanceof we.Multiline)return tLn(this,t);else return Rz(t,this)}contains(t){if(t instanceof we.Point)return this.edges.some((n)=>n.shape.contains(t));throw we.Errors.UNSUPPORTED_SHAPE_TYPE}translate(t){return new e(this.edges.map((n)=>n.shape.translate(t)))}rotate(t=0,n=new we.Point){return new e(this.edges.map((o)=>o.shape.rotate(t,n)))}transform(t=new we.Matrix){return new e(this.edges.map((n)=>n.shape.transform(t)))}toShapes(){return this.edges.map((t)=>t.shape.clone())}toJSON(){return this.edges.map((t)=>t.toJSON())}svgPoints(){return this.vertices.map((t)=>`${t.x},${t.y}`).join(" ")}dpath(){let t=`M${this.first.start.x},${this.first.start.y}`;for(let n of this)t+=n.svg();return t}svg(t={}){let n=`
<path ${VR({fill:"none",...t})} d="`;n+=`
M${this.first.start.x},${this.first.start.y}`;for(let o of this)n+=o.svg();return n+=`" >
</path>`,n}};we.Multiline=WR;we.multiline=nLn;({INSIDE:Rv,OUTSIDE:Qv,BOUNDARY:PA,OVERLAP_SAME:rLn,OVERLAP_OPPOSITE:sLn}=Jce),{NOT_VERTEX:bIr,START_VERTEX:kat,END_VERTEX:Lat}=Jce;Qz=Object.freeze({__proto__:null,BOOLEAN_INTERSECT:Jq,BOOLEAN_SUBTRACT:YR,BOOLEAN_UNION:nle,calculateIntersections:uct,innerClip:dct,intersect:lct,outerClip:AEe,removeNotRelevantChains:_Ee,removeOldFaces:gEe,restoreFaces:fEe,subtract:pEe,unify:aLn}),mLn=RegExp("T.F..FFF.|T.F...F.."),pLn=RegExp("T........|.T.......|...T.....|....T...."),ALn=RegExp("FT.......|F..T.....|F...T...."),_Ln=RegExp("T.F..F..."),gLn=RegExp("T.F..F...|.TF..F...|..FT.F...|..F.TF...");vLn=Object.freeze({__proto__:null,contain:CLn,cover:_ct,covered:Act,disjoint:xLn,equal:fLn,inside:pct,intersect:mct,relate:kz,touch:yLn});we.Matrix=T_;we.matrix=ELn;PEe=class PEe extends gct{clone(){return new PEe(this.low,this.high)}};fct=class fct extends Set{constructor(e){super(e);this.index=new Kq,this.forEach((t)=>this.index.insert(t))}add(e){let t=this.size,{key:n,value:o}=e,i=n||e.box,r=o||e;if(super.add(r),this.size>t)this.index.insert(i,r);return this}delete(e){let{key:t,value:n}=e,o=t||e.box,i=n||e,r=super.delete(i);if(r)this.index.remove(o,i);return r}clear(){super.clear(),this.index=new Kq}search(e){return this.index.search(e)}hit(e){let t=new we.Box(e.x-1,e.y-1,e.x+1,e.y+1);return this.index.search(t).filter((o)=>e.on(o))}svg(){return[...this].reduce((t,n)=>t+n.svg(),"")}};we.PlanarSet=fct;Bs=class e extends NM{constructor(...t){super();if(this.x=0,this.y=0,t.length===0)return;if(t.length===1&&t[0]instanceof Array&&t[0].length===2){let n=t[0];if(typeof n[0]=="number"&&typeof n[1]=="number"){this.x=n[0],this.y=n[1];return}}if(t.length===1&&t[0]instanceof Object&&t[0].name==="point"){let{x:n,y:o}=t[0];this.x=n,this.y=o;return}if(t.length===2){if(typeof t[0]=="number"&&typeof t[1]=="number"){this.x=t[0],this.y=t[1];return}}throw mu.ILLEGAL_PARAMETERS}get box(){return new we.Box(this.x,this.y,this.x,this.y)}clone(){return new we.Point(this.x,this.y)}get vertices(){return[this.clone()]}equalTo(t){return we.Utils.EQ(this.x,t.x)&&we.Utils.EQ(this.y,t.y)}lessThan(t){if(we.Utils.LT(this.y,t.y))return!0;if(we.Utils.EQ(this.y,t.y)&&we.Utils.LT(this.x,t.x))return!0;return!1}transform(t){return new we.Point(t.transform([this.x,this.y]))}projectionOn(t){if(this.equalTo(t.pt))return this.clone();let n=new we.Vector(this,t.pt);if(we.Utils.EQ_0(n.cross(t.norm)))return t.pt.clone();let o=n.dot(t.norm),i=t.norm.multiply(o);return this.translate(i)}leftTo(t){let n=new we.Vector(t.pt,this);return we.Utils.GT(n.dot(t.norm),0)}distanceTo(t){if(t instanceof e){let n=t.x-this.x,o=t.y-this.y;return[Math.sqrt(n*n+o*o),new we.Segment(this,t)]}if(t instanceof we.Line)return we.Distance.point2line(this,t);if(t instanceof we.Circle)return we.Distance.point2circle(this,t);if(t instanceof we.Segment)return we.Distance.point2segment(this,t);if(t instanceof we.Arc)return we.Distance.point2arc(this,t);if(t instanceof we.Box)return we.Distance.point2polygon(this,new we.Polygon(t));if(t instanceof we.Polygon)return we.Distance.point2polygon(this,t);if(t instanceof we.PlanarSet)return we.Distance.shape2planarSet(this,t);if(t instanceof we.Multiline)return we.Distance.shape2multiline(this,t)}on(t){if(t instanceof we.Point)return this.equalTo(t);if(t.contains&&t.contains instanceof Function)return t.contains(this);throw we.Errors.UNSUPPORTED_SHAPE_TYPE}get name(){return"point"}svg(t={}){let n=t.r??3;return`
<circle cx="${this.x}" cy="${this.y}" r="${n}"
${VR({fill:"red",...t})} />`}};we.Point=Bs;we.point=Nm;Lz=class extends NM{constructor(...t){super();if(this.x=0,this.y=0,t.length===0)return;if(t.length===1&&t[0]instanceof Array&&t[0].length===2){let n=t[0];if(typeof n[0]=="number"&&typeof n[1]=="number"){this.x=n[0],this.y=n[1];return}}if(t.length===1&&t[0]instanceof Object&&t[0].name==="vector"){let{x:n,y:o}=t[0];this.x=n,this.y=o;return}if(t.length===1&&t[0]instanceof Object&&t[0].name==="segment"){let{start:n,end:o}=t[0];this.x=o.x-n.x,this.y=o.y-n.y;return}if(t.length===2){let n=t[0],o=t[1];if(typeof n=="number"&&typeof o=="number"){this.x=n,this.y=o;return}if(n instanceof we.Point&&o instanceof we.Point){this.x=o.x-n.x,this.y=o.y-n.y;return}}throw mu.ILLEGAL_PARAMETERS}clone(){return new we.Vector(this.x,this.y)}get slope(){let t=Math.atan2(this.y,this.x);if(t<0)t=2*Math.PI+t;return t}get length(){return Math.sqrt(this.dot(this))}isZeroLength(){return we.Utils.EQ_0(this.length)}equalTo(t){return we.Utils.EQ(this.x,t.x)&&we.Utils.EQ(this.y,t.y)}multiply(t){return new we.Vector(t*this.x,t*this.y)}dot(t){return this.x*t.x+this.y*t.y}cross(t){return this.x*t.y-this.y*t.x}normalize(){if(this.isZeroLength())throw mu.ZERO_DIVISION;return new we.Vector(this.x/this.length,this.y/this.length)}rotate(t,n=new we.Point){if(n.x===0&&n.y===0)return this.transform(new T_().rotate(t));throw mu.OPERATION_IS_NOT_SUPPORTED}transform(t){return new we.Vector(t.transform([this.x,this.y]))}rotate90CCW(){return new we.Vector(-this.y,this.x)}rotate90CW(){return new we.Vector(this.y,-this.x)}invert(){return new we.Vector(-this.x,-this.y)}add(t){return new we.Vector(this.x+t.x,this.y+t.y)}subtract(t){return new we.Vector(this.x-t.x,this.y-t.y)}angleTo(t){let n=this.normalize(),o=t.normalize(),i=Math.atan2(n.cross(o),n.dot(o));if(i<0)i+=2*Math.PI;return i}projectionOn(t){let n=t.normalize(),o=this.dot(n);return n.multiply(o)}get name(){return"vector"}};we.Vector=Lz;we.vector=KR;Bp=class e extends NM{constructor(...t){super();if(this.ps=new we.Point,this.pe=new we.Point,t.length===0)return;if(t.length===1&&t[0]instanceof Array&&t[0].length===4){let n=t[0];this.ps=new we.Point(n[0],n[1]),this.pe=new we.Point(n[2],n[3]);return}if(t.length===1&&t[0]instanceof Object&&t[0].name==="segment"){let{ps:n,pe:o}=t[0];this.ps=new we.Point(n.x,n.y),this.pe=new we.Point(o.x,o.y);return}if(t.length===1&&t[0]instanceof we.Point){this.ps=t[0].clone();return}if(t.length===2&&t[0]instanceof we.Point&&t[1]instanceof we.Point){this.ps=t[0].clone(),this.pe=t[1].clone();return}if(t.length===4){this.ps=new we.Point(t[0],t[1]),this.pe=new we.Point(t[2],t[3]);return}throw mu.ILLEGAL_PARAMETERS}clone(){return new we.Segment(this.start,this.end)}get start(){return this.ps}get end(){return this.pe}get vertices(){return[this.ps.clone(),this.pe.clone()]}get length(){return this.start.distanceTo(this.end)[0]}get slope(){return new we.Vector(this.start,this.end).slope}get box(){return new we.Box(Math.min(this.start.x,this.end.x),Math.min(this.start.y,this.end.y),Math.max(this.start.x,this.end.x),Math.max(this.start.y,this.end.y))}equalTo(t){return this.ps.equalTo(t.ps)&&this.pe.equalTo(t.pe)}contains(t){return we.Utils.EQ_0(this.distanceToPoint(t))}intersect(t){if(t instanceof we.Point)return this.contains(t)?[t]:[];if(t instanceof we.Line)return jq(this,t);if(t instanceof we.Ray)return IEe(t,this);if(t instanceof we.Segment)return ele(this,t);if(t instanceof we.Circle)return tle(this,t);if(t instanceof we.Box)return Ukn(this,t);if(t instanceof we.Arc)return Nz(this,t);if(t instanceof we.Polygon)return xEe(this,t);if(t instanceof we.Multiline)return Rz(this,t)}distanceTo(t){if(t instanceof we.Point){let[n,o]=we.Distance.point2segment(t,this);return o=o.reverse(),[n,o]}if(t instanceof we.Circle){let[n,o]=we.Distance.segment2circle(this,t);return[n,o]}if(t instanceof we.Line){let[n,o]=we.Distance.segment2line(this,t);return[n,o]}if(t instanceof we.Segment){let[n,o]=we.Distance.segment2segment(this,t);return[n,o]}if(t instanceof we.Arc){let[n,o]=we.Distance.segment2arc(this,t);return[n,o]}if(t instanceof we.Box){let[n,o]=we.Distance.shape2polygon(this,new we.Polygon(t));return[n,o]}if(t instanceof we.Polygon){let[n,o]=we.Distance.shape2polygon(this,t);return[n,o]}if(t instanceof we.PlanarSet){let[n,o]=we.Distance.shape2planarSet(this,t);return[n,o]}if(t instanceof we.Multiline)return we.Distance.shape2multiline(this,t)}tangentInStart(){return new we.Vector(this.start,this.end).normalize()}tangentInEnd(){return new we.Vector(this.end,this.start).normalize()}reverse(){return new e(this.end,this.start)}split(t){if(this.start.equalTo(t))return[null,this.clone()];if(this.end.equalTo(t))return[this.clone(),null];return[new we.Segment(this.start,t),new we.Segment(t,this.end)]}middle(){return new we.Point((this.start.x+this.end.x)/2,(this.start.y+this.end.y)/2)}pointAtLength(t){if(t>this.length||t<0)return null;if(t==0)return this.start;if(t==this.length)return this.end;let n=t/this.length;return new we.Point((this.end.x-this.start.x)*n+this.start.x,(this.end.y-this.start.y)*n+this.start.y)}distanceToPoint(t){let[n,...o]=we.Distance.point2segment(t,this);return n}definiteIntegral(t=0){let n=this.end.x-this.start.x,o=this.start.y-t,i=this.end.y-t;return n*(o+i)/2}transform(t=new we.Matrix){return new e(this.ps.transform(t),this.pe.transform(t))}isZeroLength(){return this.ps.equalTo(this.pe)}sortPoints(t){return new we.Line(this.start,this.end).sortPoints(t)}get name(){return"segment"}svg(t={}){return`
<line x1="${this.start.x}" y1="${this.start.y}" x2="${this.end.x}" y2="${this.end.y}" ${VR(t)} />`}};we.Segment=Bp;we.segment=ole;({vector:Vq}=we),MLn=class e extends NM{constructor(...t){super();if(this.pt=new we.Point,this.norm=new we.Vector(0,1),t.length===0)return;if(t.length===1&&t[0]instanceof Object&&t[0].name==="line"){let{pt:n,norm:o}=t[0];this.pt=new we.Point(n),this.norm=new we.Vector(o);return}if(t.length===2){let n=t[0],o=t[1];if(n instanceof we.Point&&o instanceof we.Point){if(this.pt=n,this.norm=e.points2norm(n,o),this.norm.dot(Vq(this.pt.x,this.pt.y))>=0)this.norm.invert();return}if(n instanceof we.Point&&o instanceof we.Vector){if(we.Utils.EQ_0(o.x)&&we.Utils.EQ_0(o.y))throw mu.ILLEGAL_PARAMETERS;if(this.pt=n.clone(),this.norm=o.clone(),this.norm=this.norm.normalize(),this.norm.dot(Vq(this.pt.x,this.pt.y))>=0)this.norm.invert();return}if(n instanceof we.Vector&&o instanceof we.Point){if(we.Utils.EQ_0(n.x)&&we.Utils.EQ_0(n.y))throw mu.ILLEGAL_PARAMETERS;if(this.pt=o.clone(),this.norm=n.clone(),this.norm=this.norm.normalize(),this.norm.dot(Vq(this.pt.x,this.pt.y))>=0)this.norm.invert();return}}throw mu.ILLEGAL_PARAMETERS}clone(){return new we.Line(this.pt,this.norm)}get start(){return}get end(){return}get length(){return Number.POSITIVE_INFINITY}get box(){return new we.Box(Number.NEGATIVE_INFINITY,Number.NEGATIVE_INFINITY,Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY)}get middle(){return}get slope(){return new we.Vector(this.norm.y,-this.norm.x).slope}get standard(){let t=this.norm.x,n=this.norm.y,o=this.norm.dot(Vq(this.pt.x,this.pt.y));return[t,n,o]}parallelTo(t){return we.Utils.EQ_0(this.norm.cross(t.norm))}incidentTo(t){return this.parallelTo(t)&&this.pt.on(t)}contains(t){if(this.pt.equalTo(t))return!0;let n=new we.Vector(this.pt,t);return we.Utils.EQ_0(this.norm.dot(n))}coord(t){return Vq(t.x,t.y).cross(this.norm)}intersect(t){if(t instanceof we.Point)return this.contains(t)?[t]:[];if(t instanceof we.Line)return Dz(this,t);if(t instanceof we.Ray)return sct(t,this);if(t instanceof we.Circle)return UR(this,t);if(t instanceof we.Box)return Mz(this,t);if(t instanceof we.Segment)return jq(t,this);if(t instanceof we.Arc)return Zce(this,t);if(t instanceof we.Polygon)return qq(this,t);if(t instanceof we.Multiline)return Rz(this,t)}distanceTo(t){if(t instanceof we.Point){let[n,o]=we.Distance.point2line(t,this);return o=o.reverse(),[n,o]}if(t instanceof we.Circle){let[n,o]=we.Distance.circle2line(t,this);return o=o.reverse(),[n,o]}if(t instanceof we.Segment){let[n,o]=we.Distance.segment2line(t,this);return[n,o.reverse()]}if(t instanceof we.Arc){let[n,o]=we.Distance.arc2line(t,this);return[n,o.reverse()]}if(t instanceof we.Box){let[n,o]=we.Distance.shape2polygon(this,new we.Polygon(t));return[n,o]}if(t instanceof we.Polygon){let[n,o]=we.Distance.shape2polygon(this,t);return[n,o]}}split(t){if(t instanceof we.Point)return[new we.Ray(t,this.norm),new we.Ray(t,this.norm)];else{let n=new we.Multiline([this]),o=this.sortPoints(t);return n.split(o),n.toShapes()}}rotate(t,n=new we.Point){return new we.Line(this.pt.rotate(t,n),this.norm.rotate(t))}transform(t){return new we.Line(this.pt.transform(t),this.norm.clone())}sortPoints(t){return t.slice().sort((n,o)=>{if(this.coord(n)<this.coord(o))return-1;if(this.coord(n)>this.coord(o))return 1;return 0})}get name(){return"line"}svg(t,n={}){let o=Mz(this,t);if(o.length===0)return"";let i=o[0],r=o.length===2?o[1]:o.find((a)=>!a.equalTo(i));if(r===void 0)r=i;return new we.Segment(i,r).svg(n)}static points2norm(t,n){if(t.equalTo(n))throw mu.ILLEGAL_PARAMETERS;return new we.Vector(t,n).normalize().rotate90CCW()}};we.Line=MLn;we.line=BLn;jR=class extends NM{constructor(...t){super();if(this.pc=new we.Point,this.r=1,t.length===1&&t[0]instanceof Object&&t[0].name==="circle"){let{pc:n,r:o}=t[0];this.pc=new we.Point(n),this.r=o}else{let[n,o]=[...t];if(n&&n instanceof we.Point)this.pc=n.clone();if(o!==void 0)this.r=o}}clone(){return new we.Circle(this.pc.clone(),this.r)}get center(){return this.pc}get box(){return new we.Box(this.pc.x-this.r,this.pc.y-this.r,this.pc.x+this.r,this.pc.y+this.r)}contains(t){if(t instanceof we.Point)return we.Utils.LE(t.distanceTo(this.center)[0],this.r);if(t instanceof we.Segment)return we.Utils.LE(t.start.distanceTo(this.center)[0],this.r)&&we.Utils.LE(t.end.distanceTo(this.center)[0],this.r);if(t instanceof we.Arc)return this.intersect(t).length===0&&we.Utils.LE(t.start.distanceTo(this.center)[0],this.r)&&we.Utils.LE(t.end.distanceTo(this.center)[0],this.r);if(t instanceof we.Circle)return this.intersect(t).length===0&&we.Utils.LE(t.r,this.r)&&we.Utils.LE(t.center.distanceTo(this.center)[0],this.r)}toArc(t=!0){return new we.Arc(this.center,this.r,Math.PI,-Math.PI,t)}scale(t,n){if(t!==n)throw mu.OPERATION_IS_NOT_SUPPORTED;if(!(this.pc.x===0&&this.pc.y===0))throw mu.OPERATION_IS_NOT_SUPPORTED;return new we.Circle(this.pc,this.r*t)}transform(t=new we.Matrix){return new we.Circle(this.pc.transform(t),this.r)}intersect(t){if(t instanceof we.Point)return this.contains(t)?[t]:[];if(t instanceof we.Line)return UR(t,this);if(t instanceof we.Ray)return rct(t,this);if(t instanceof we.Segment)return tle(t,this);if(t instanceof we.Circle)return qat(t,this);if(t instanceof we.Box)return Wkn(this,t);if(t instanceof we.Arc)return yEe(t,this);if(t instanceof we.Polygon)return tct(this,t);if(t instanceof we.Multiline)return Rz(this,t)}distanceTo(t){if(t instanceof we.Point){let[n,o]=we.Distance.point2circle(t,this);return o=o.reverse(),[n,o]}if(t instanceof we.Circle){let[n,o]=we.Distance.circle2circle(this,t);return[n,o]}if(t instanceof we.Line){let[n,o]=we.Distance.circle2line(this,t);return[n,o]}if(t instanceof we.Segment){let[n,o]=we.Distance.segment2circle(t,this);return o=o.reverse(),[n,o]}if(t instanceof we.Arc){let[n,o]=we.Distance.arc2circle(t,this);return o=o.reverse(),[n,o]}if(t instanceof we.Box){let[n,o]=we.Distance.shape2polygon(this,new we.Polygon(t));return[n,o]}if(t instanceof we.Polygon){let[n,o]=we.Distance.shape2polygon(this,t);return[n,o]}if(t instanceof we.PlanarSet){let[n,o]=we.Distance.shape2planarSet(this,t);return[n,o]}if(t instanceof we.Multiline){let[n,o]=we.Distance.shape2multiline(this,t);return[n,o]}}get name(){return"circle"}svg(t={}){return`
<circle cx="${this.pc.x}" cy="${this.pc.y}" r="${this.r}"
${VR({fill:"none",...t})} />`}};we.Circle=jR;we.circle=wLn;d0=class d0 extends NM{constructor(...e){super();if(this.pc=new we.Point,this.r=1,this.startAngle=0,this.endAngle=2*Math.PI,this.counterClockwise=!0,e.length===0)return;if(e.length===1&&e[0]instanceof Object&&e[0].name==="arc"){let{pc:t,r:n,startAngle:o,endAngle:i,counterClockwise:r}=e[0];this.pc=new we.Point(t.x,t.y),this.r=n,this.startAngle=o,this.endAngle=i,this.counterClockwise=r}else{let[t,n,o,i,r]=[...e];if(t&&t instanceof we.Point)this.pc=t.clone();if(n!==void 0)this.r=n;if(o!==void 0)this.startAngle=o;if(i!==void 0)this.endAngle=i;if(r!==void 0)this.counterClockwise=r}}clone(){return new we.Arc(this.pc.clone(),this.r,this.startAngle,this.endAngle,this.counterClockwise)}get sweep(){let e=this.startAngle,t=this.endAngle;if(we.Utils.EQ(Math.abs(e-t),we.PIx2))return we.PIx2;if(Math.abs(e)>we.PIx2)e-=Math.trunc(e/we.PIx2)*we.PIx2;if(e<0)e+=we.PIx2;if(Math.abs(t)>we.PIx2)t-=Math.trunc(t/we.PIx2)*we.PIx2;if(t<0)t+=we.PIx2;let n=this.counterClockwise?t-e:e-t;if(n<0)n+=we.PIx2;return n}get start(){return new we.Point(this.pc.x+this.r,this.pc.y).rotate(this.startAngle,this.pc)}get end(){return new we.Point(this.pc.x+this.r,this.pc.y).rotate(this.endAngle,this.pc)}get center(){return this.pc.clone()}get vertices(){return[this.start.clone(),this.end.clone()]}get length(){return Math.abs(this.sweep*this.r)}get box(){let t=this.breakToFunctional().reduce((n,o)=>n.merge(o.start.box),new we.Box);return t=t.merge(this.end.box),t}contains(e){if(!we.Utils.EQ(this.pc.distanceTo(e)[0],this.r))return!1;if(e.equalTo(this.start))return!0;let t=new we.Vector(this.pc,e).slope,n=new we.Arc(this.pc,this.r,this.startAngle,t,this.counterClockwise);return we.Utils.LE(n.length,this.length)}split(e){if(this.start.equalTo(e))return[null,this.clone()];if(this.end.equalTo(e))return[this.clone(),null];let t=new we.Vector(this.pc,e).slope;return[new we.Arc(this.pc,this.r,this.startAngle,t,this.counterClockwise),new we.Arc(this.pc,this.r,t,this.endAngle,this.counterClockwise)]}middle(){let e=this.counterClockwise?this.startAngle+this.sweep/2:this.startAngle-this.sweep/2;return new we.Arc(this.pc,this.r,this.startAngle,e,this.counterClockwise).end}pointAtLength(e){if(e>this.length||e<0)return null;if(e===0)return this.start;if(e===this.length)return this.end;let t=e/this.length,n=this.counterClockwise?this.startAngle+this.sweep*t:this.startAngle-this.sweep*t;return new we.Arc(this.pc,this.r,this.startAngle,n,this.counterClockwise).end}chordHeight(){return(1-Math.cos(Math.abs(this.sweep/2)))*this.r}intersect(e){if(e instanceof we.Point)return this.contains(e)?[e]:[];if(e instanceof we.Line)return Zce(e,this);if(e instanceof we.Ray)return bEe(e,this);if(e instanceof we.Circle)return yEe(this,e);if(e instanceof we.Segment)return Nz(e,this);if(e instanceof we.Box)return Xkn(this,e);if(e instanceof we.Arc)return Jat(this,e);if(e instanceof we.Polygon)return CEe(this,e);if(e instanceof we.Multiline)return Rz(this,e)}distanceTo(e){if(e instanceof we.Point){let[t,n]=we.Distance.point2arc(e,this);return n=n.reverse(),[t,n]}if(e instanceof we.Circle){let[t,n]=we.Distance.arc2circle(this,e);return[t,n]}if(e instanceof we.Line){let[t,n]=we.Distance.arc2line(this,e);return[t,n]}if(e instanceof we.Segment){let[t,n]=we.Distance.segment2arc(e,this);return n=n.reverse(),[t,n]}if(e instanceof we.Arc){let[t,n]=we.Distance.arc2arc(this,e);return[t,n]}if(e instanceof we.Box){let[t,n]=we.Distance.shape2polygon(this,new we.Polygon(e));return[t,n]}if(e instanceof we.Polygon){let[t,n]=we.Distance.shape2polygon(this,e);return[t,n]}if(e instanceof we.PlanarSet){let[t,n]=we.Distance.shape2planarSet(this,e);return[t,n]}if(e instanceof we.Multiline)return we.Distance.shape2multiline(this,e)}breakToFunctional(){let e=[],t=[0,Math.PI/2,Math.PI,3*Math.PI/2],n=this.startAngle,o=this.endAngle;if(we.Utils.EQ(Math.abs(n-o),we.PIx2))o=n;if(Math.abs(n)>we.PIx2)n-=Math.trunc(n/we.PIx2)*we.PIx2;if(n<0)n+=we.PIx2;if(Math.abs(o)>we.PIx2)o-=Math.trunc(o/we.PIx2)*we.PIx2;if(o<0)o+=we.PIx2;let i=n,r,s,a;if(this.counterClockwise)s=Math.ceil(n/(Math.PI/2))%4,a=1;else s=Math.floor(n/(Math.PI/2))%4,a=-1;for(let c=0,l=s;c<4;c++,l=(l+a+4)%4){if(r=t[l],r===i)continue;let d=this.counterClockwise?r-n:n-r;if(d<0)d+=we.PIx2;if(d>this.sweep)break;e.push(new we.Arc(this.pc,this.r,i,r,this.counterClockwise)),i=r}if(e.length===0)return e.push(this),e;if(r=o,i!==r)e.push(new we.Arc(this.pc,this.r,i,r,this.counterClockwise));return e}tangentInStart(){let e=new we.Vector(this.pc,this.start),t=this.counterClockwise?Math.PI/2:-Math.PI/2;return e.rotate(t).normalize()}tangentInEnd(){let e=new we.Vector(this.pc,this.end),t=this.counterClockwise?-Math.PI/2:Math.PI/2;return e.rotate(t).normalize()}reverse(){return new we.Arc(this.pc,this.r,this.endAngle,this.startAngle,!this.counterClockwise)}transform(e=new we.Matrix){let t=this.start.transform(e),n=this.end.transform(e),o=this.pc.transform(e),i=this.counterClockwise;if(e.a*e.d<0)i=!i;return we.Arc.arcSE(o,t,n,i)}static arcSE(e,t,n,o){let{vector:i}=we,r=i(e,t).slope,s=i(e,n).slope;if(we.Utils.EQ(r,s))s+=2*Math.PI,o=!0;let a=i(e,t).length;return new we.Arc(e,a,r,s,o)}definiteIntegral(e=0){return this.breakToFunctional().reduce((o,i)=>o+i.circularSegmentDefiniteIntegral(e),0)}circularSegmentDefiniteIntegral(e){let n=new we.Segment(this.start,this.end).definiteIntegral(e),o=we.Utils.EQ(this.sweep,we.PIx2)?0:this.circularSegmentArea();return this.counterClockwise?n-o:n+o}circularSegmentArea(){return 0.5*this.r*this.r*(this.sweep-Math.sin(this.sweep))}sortPoints(e){let{vector:t}=we;return e.slice().sort((n,o)=>{let i=t(this.pc,n).slope,r=t(this.pc,o).slope;if(i<r)return-1;if(i>r)return 1;return 0})}get name(){return"arc"}svg(e={}){let t=this.sweep<=Math.PI?"0":"1",n=this.counterClockwise?"1":"0";if(we.Utils.EQ(this.sweep,2*Math.PI))return new we.Circle(this.pc,this.r).svg(e);else return`
<path d="M${this.start.x},${this.start.y}
A${this.r},${this.r} 0 ${t},${n} ${this.end.x},${this.end.y}"
${VR({fill:"none",...e})} />`}};we.Arc=d0;we.arc=TLn;vA=class vA extends NM{constructor(e=void 0,t=void 0,n=void 0,o=void 0){super();this.xmin=e,this.ymin=t,this.xmax=n,this.ymax=o}clone(){return new vA(this.xmin,this.ymin,this.xmax,this.ymax)}get low(){return new we.Point(this.xmin,this.ymin)}get high(){return new we.Point(this.xmax,this.ymax)}get max(){return this.clone()}get center(){return new we.Point((this.xmin+this.xmax)/2,(this.ymin+this.ymax)/2)}get width(){return Math.abs(this.xmax-this.xmin)}get height(){return Math.abs(this.ymax-this.ymin)}get box(){return this.clone()}not_intersect(e){return this.xmax<e.xmin||this.xmin>e.xmax||this.ymax<e.ymin||this.ymin>e.ymax}intersect(e){return!this.not_intersect(e)}merge(e){return new vA(this.xmin===void 0?e.xmin:Math.min(this.xmin,e.xmin),this.ymin===void 0?e.ymin:Math.min(this.ymin,e.ymin),this.xmax===void 0?e.xmax:Math.max(this.xmax,e.xmax),this.ymax===void 0?e.ymax:Math.max(this.ymax,e.ymax))}less_than(e){if(this.low.lessThan(e.low))return!0;if(this.low.equalTo(e.low)&&this.high.lessThan(e.high))return!0;return!1}equal_to(e){return this.low.equalTo(e.low)&&this.high.equalTo(e.high)}output(){return this.clone()}comparable_less_than(e,t){return e.lessThan(t)}set(e,t,n,o){this.xmin=e,this.ymin=t,this.xmax=n,this.ymax=o}extend(e){if(e<=0)return this.clone();return new vA(this.xmin-e,this.ymin-e,this.xmax+e,this.ymax+e)}toPoints(){return[new we.Point(this.xmin,this.ymin),new we.Point(this.xmax,this.ymin),new we.Point(this.xmax,this.ymax),new we.Point(this.xmin,this.ymax)]}toSegments(){let e=this.toPoints();return[new we.Segment(e[0],e[1]),new we.Segment(e[1],e[2]),new we.Segment(e[2],e[3]),new we.Segment(e[3],e[0])]}rotate(e,t=new we.Point){throw mu.OPERATION_IS_NOT_SUPPORTED}transform(e=new we.Matrix){return this.toPoints().map((n)=>n.transform(e)).reduce((n,o)=>n.merge(o.box),new vA)}contains(e){if(e instanceof we.Point)return e.x>=this.xmin&&e.x<=this.xmax&&e.y>=this.ymin&&e.y<=this.ymax;if(e instanceof we.Segment)return e.vertices.every((t)=>this.contains(t));if(e instanceof we.Box)return e.toSegments().every((t)=>this.contains(t));if(e instanceof we.Circle)return this.contains(e.box);if(e instanceof we.Arc)return e.vertices.every((t)=>this.contains(t))&&this.toSegments().every((t)=>Nz(t,e).length===0);if(e instanceof we.Line||e instanceof we.Ray)return!1;if(e instanceof we.Multiline)return e.toShapes().every((t)=>this.contains(t));if(e instanceof we.Polygon)return this.contains(e.box)}distanceTo(e){let t=this.toSegments().map((o)=>o.distanceTo(e)),n=[Number.MAX_SAFE_INTEGER,null];return t.forEach((o)=>{if(o[0]<n[0])n=o}),n}get name(){return"box"}svg(e={}){let t=this.xmax-this.xmin,n=this.ymax-this.ymin;return`
<rect x="${this.xmin}" y="${this.ymin}" width="${t}" height="${n}"
${VR({fill:"none",...e})} />`}};we.Box=vA;we.box=DLn;we.Edge=ile;yct=class yct extends $ce{constructor(e,t){super(e,t);this.setCircularLinks()}setCircularLinks(){if(this.isEmpty())return;this.last.next=this.first,this.first.prev=this.last}[Symbol.iterator](){let e=void 0;return{next:()=>{let t=e?e:this.first,n=this.first?e?e===this.first:!1:!0;return e=t?t.next:void 0,{value:t,done:n}}}}append(e){return super.append(e),this.setCircularLinks(),this}insert(e,t){return super.insert(e,t),this.setCircularLinks(),this}remove(e){return super.remove(e),this}};Ez=class Ez extends yct{constructor(e,...t){super();if(this._box=void 0,this._orientation=void 0,t.length===0)return;if(t.length===1){if(t[0]instanceof Array){let n=t[0];if(n.length===0)return;if(n.every((o)=>o instanceof we.Point)){let o=Ez.points2segments(n);this.shapes2face(e.edges,o)}else if(n.every((o)=>o instanceof Array&&o.length===2)){let o=n.map((r)=>new we.Point(r[0],r[1])),i=Ez.points2segments(o);this.shapes2face(e.edges,i)}else if(n.every((o)=>o instanceof we.Segment||o instanceof we.Arc))this.shapes2face(e.edges,n);else if(n.every((o)=>o.name==="segment"||o.name==="arc")){let o=[];for(let i of n){let r;if(i.name==="segment")r=new we.Segment(i);else r=new we.Arc(i);o.push(r)}this.shapes2face(e.edges,o)}}else if(t[0]instanceof Ez){let n=t[0];this.first=n.first,this.last=n.last;for(let o of n)e.edges.add(o)}else if(t[0]instanceof we.Circle)this.shapes2face(e.edges,[t[0].toArc(!0)]);else if(t[0]instanceof we.Box){let n=t[0];this.shapes2face(e.edges,[new we.Segment(new we.Point(n.xmin,n.ymin),new we.Point(n.xmax,n.ymin)),new we.Segment(new we.Point(n.xmax,n.ymin),new we.Point(n.xmax,n.ymax)),new we.Segment(new we.Point(n.xmax,n.ymax),new we.Point(n.xmin,n.ymax)),new we.Segment(new we.Point(n.xmin,n.ymax),new we.Point(n.xmin,n.ymin))])}}if(t.length===2&&t[0]instanceof we.Edge&&t[1]instanceof we.Edge)this.first=t[0],this.last=t[1],this.last.next=this.first,this.first.prev=this.last,this.setArcLength()}get edges(){return this.toArray()}get vertices(){return this.edges.map((e)=>e.shape.start.clone())}get shapes(){return this.edges.map((e)=>e.shape.clone())}get box(){if(this._box===void 0){let e=new we.Box;for(let t of this)e=e.merge(t.box);this._box=e}return this._box}get perimeter(){return this.last.arc_length+this.last.length}pointAtLength(e){if(e>this.perimeter||e<0)return null;let t=null;for(let n of this)if(e>=n.arc_length&&(n===this.last||e<n.next.arc_length)){t=n.pointAtLength(e-n.arc_length);break}return t}static points2segments(e){let t=[];for(let n=0;n<e.length;n++){if(e[n].equalTo(e[(n+1)%e.length]))continue;t.push(new we.Segment(e[n],e[(n+1)%e.length]))}return t}shapes2face(e,t){for(let n of t){let o=new we.Edge(n);this.append(o),e.add(o)}}append(e){return super.append(e),this.setOneEdgeArcLength(e),e.face=this,this}insert(e,t){return super.insert(e,t),this.setOneEdgeArcLength(e),e.face=this,this}remove(e){return super.remove(e),this.setArcLength(),this}merge_with_next_edge(e){return e.shape.end.x=e.next.shape.end.x,e.shape.end.y=e.next.shape.end.y,this.remove(e.next),this}reverse(){let e=[],t=this.last;do t.shape=t.shape.reverse(),e.push(t),t=t.prev;while(t!==this.last);this.first=void 0,this.last=void 0;for(let n of e){if(this.first===void 0)n.prev=n,n.next=n,this.first=n,this.last=n;else n.prev=this.last,this.last.next=n,this.last=n,this.last.next=this.first,this.first.prev=this.last;this.setOneEdgeArcLength(n)}if(this._orientation!==void 0)this._orientation=void 0,this._orientation=this.orientation()}setArcLength(){for(let e of this)this.setOneEdgeArcLength(e),e.face=this}setOneEdgeArcLength(e){if(e===this.first)e.arc_length=0;else e.arc_length=e.prev.arc_length+e.prev.length}area(){return Math.abs(this.signedArea())}signedArea(){let e=0,t=this.box.ymin;for(let n of this)e+=n.shape.definiteIntegral(t);return e}orientation(){if(this._orientation===void 0){let e=this.signedArea();if(we.Utils.EQ_0(e))this._orientation=zR.NOT_ORIENTABLE;else if(we.Utils.LT(e,0))this._orientation=zR.CCW;else this._orientation=zR.CW}return this._orientation}isSimple(e){return Ez.getSelfIntersections(this,e,!0).length===0}static getSelfIntersections(e,t,n=!1){let o=[];for(let i of e){let r=t.search(i.box);for(let s of r){if(i===s)continue;if(s.face!==e)continue;if(i.shape instanceof we.Segment&&s.shape instanceof we.Segment&&(i.next===s||i.prev===s))continue;let a=i.shape.intersect(s.shape);for(let c of a){if(c.equalTo(i.start)&&c.equalTo(s.end)&&s===i.prev)continue;if(c.equalTo(i.end)&&c.equalTo(s.start)&&s===i.next)continue;if(o.push(c),n)break}if(o.length>0&&n)break}if(o.length>0&&n)break}return o}findEdgeByPoint(e){let t;for(let n of this){if(e.equalTo(n.shape.start))continue;if(e.equalTo(n.shape.end)||n.shape.contains(e)){t=n;break}}return t}toPolygon(){return new we.Polygon(this.shapes)}toJSON(){return this.edges.map((e)=>e.toJSON())}svg(){let e=`M${this.first.start.x},${this.first.start.y}`;for(let t of this)e+=t.svg();return e+=" z",e}};we.Face=Ez;vEe=class vEe extends NM{constructor(...e){super();if(this.pt=new we.Point,this.norm=new we.Vector(0,1),e.length===0)return;if(e.length>=1&&e[0]instanceof we.Point)this.pt=e[0].clone();if(e.length===1)return;if(e.length===2&&e[1]instanceof we.Vector){this.norm=e[1].clone();return}throw mu.ILLEGAL_PARAMETERS}clone(){return new vEe(this.pt,this.norm)}get slope(){return new we.Vector(this.norm.y,-this.norm.x).slope}get box(){let e=this.slope;return new we.Box(e>Math.PI/2&&e<3*Math.PI/2?Number.NEGATIVE_INFINITY:this.pt.x,e>=0&&e<=Math.PI?this.pt.y:Number.NEGATIVE_INFINITY,e>=Math.PI/2&&e<=3*Math.PI/2?this.pt.x:Number.POSITIVE_INFINITY,e>=Math.PI&&e<=2*Math.PI||e===0?this.pt.y:Number.POSITIVE_INFINITY)}get start(){return this.pt}get end(){return}get length(){return Number.POSITIVE_INFINITY}contains(e){if(this.pt.equalTo(e))return!0;let t=new we.Vector(this.pt,e);return we.Utils.EQ_0(this.norm.dot(t))&&we.Utils.GE(t.cross(this.norm),0)}coord(e){return KR(e.x,e.y).cross(this.norm)}split(e){if(!this.contains(e))return[];if(this.pt.equalTo(e))return[this];return[new we.Segment(this.pt,e),new we.Ray(e,this.norm)]}intersect(e){if(e instanceof we.Point)return this.contains(e)?[e]:[];if(e instanceof we.Segment)return IEe(this,e);if(e instanceof we.Arc)return bEe(this,e);if(e instanceof we.Line)return sct(this,e);if(e instanceof we.Ray)return eLn(this,e);if(e instanceof we.Circle)return rct(this,e);if(e instanceof we.Box)return Zkn(this,e);if(e instanceof we.Polygon)return act(this,e);if(e instanceof we.Multiline)return Rz(this,e)}rotate(e,t=new we.Point){return new we.Ray(this.pt.rotate(e,t),this.norm.rotate(e))}transform(e){return new we.Ray(this.pt.transform(e),this.norm.clone())}get name(){return"ray"}svg(e,t={}){let n=new we.Line(this.pt,this.norm),o=Mz(n,e);if(o=o.filter((r)=>this.contains(r)),o.length===0||o.length===2)return"";return new we.Segment(this.pt,o[0]).svg(t)}};we.Ray=vEe;we.ray=NLn;we.Polygon=Dc;we.polygon=RLn;({Circle:lEe,Line:Yat,Point:Vat,Vector:qce,Utils:dEe}=we);we.Inversion=Wq;we.inversion=QLn;we.Distance=ki;({Multiline:kLn,Point:xct,Segment:LLn,Polygon:Cct}=we);we.isWktString=YLn;we.parseWKT=Sct;we.BooleanOperations=Qz;we.Relations=vLn});function Ect(e,t,n){if(!t||!n)return;let o=e.get(t);if(!o)o=new Set,e.set(t,o);o.add(n);let i=e.get(n);if(!i)i=new Set,e.set(n,i);i.add(t)}function zz(e,t){if(!t.subcircuit_id&&!t.source_group_id)return[...e];let n=t;if(t.subcircuit_id){let a=new Set([t.subcircuit_id]),c=new Map,l=new Map;for(let u of e)if(u.type==="source_group"){let{source_group_id:h,subcircuit_id:A}=u;if(A)l.set(h,A);let m=u.parent_source_group_id;if(m){if(!c.has(m))c.set(m,[]);c.get(m).push(h)}}let d;for(let[u,h]of l)if(h===t.subcircuit_id){d=u;break}if(d){let u=(h)=>{let A=c.get(h)||[];for(let m of A){let p=l.get(m);if(p)a.add(p);u(m)}};u(d),n={...t,subcircuit_ids:Array.from(a)}}}let o=new Map;for(let a of e){let c=`${a.type}_id`,l=a[c];if(typeof l==="string")o.set(l,a)}let i=new Map;for(let a of e){let c=Object.entries(a);for(let[l,d]of c){if(l==="parent_source_group_id")continue;if(l.endsWith("_id")&&typeof d==="string"){let u=o.get(d);Ect(i,a,u)}else if(l.endsWith("_ids")&&Array.isArray(d)){for(let u of d)if(typeof u==="string"){let h=o.get(u);Ect(i,a,h)}}}}let r=[],s=new Set;for(let a of e){let c=!1;if(n.subcircuit_id&&"subcircuit_id"in a&&a.subcircuit_id===n.subcircuit_id)c=!0;else if(n.subcircuit_ids&&"subcircuit_id"in a&&a.subcircuit_id&&n.subcircuit_ids.includes(a.subcircuit_id))c=!0;else if(n.source_group_id&&"source_group_id"in a&&a.source_group_id===n.source_group_id)c=!0;else if(n.source_group_id&&"member_source_group_ids"in a&&Array.isArray(a.member_source_group_ids)&&a.member_source_group_ids.includes(n.source_group_id))c=!0;if(c)r.push(a),s.add(a)}while(r.length>0){let a=r.shift(),c=i.get(a);if(!c)continue;for(let l of c)if(!s.has(l))s.add(l),r.push(l)}return e.filter((a)=>s.has(a))}function BEe(e){let t=e.type;return`${t}:${e[`${t}_id`]}`}function tFn(e,t){let n=Gf(e).pcb_smtpad.get(t);if(!n||!n.pcb_port_id)return`smtpad[${t}]`;return Lct(e,n.pcb_port_id)}function nFn(e,t){let n=Gf(e).pcb_trace.get(t);if(!n)return`trace[${t}]`;let o=n.route.flatMap((s)=>[s.start_pcb_port_id,s.end_pcb_port_id]).filter(Boolean);if(o.length===0)return`trace[${t}]`;function i(s){let a=Gf(e).pcb_port.get(s);if(!a)return null;let c=a.pcb_component_id?Gf(e).pcb_component.get(a.pcb_component_id):void 0;if(!c)return null;let l=Gf(e).source_component.get(c.source_component_id);if(!l)return null;let d=Gf(e).source_port.get(a.source_port_id),u=d?.port_hints?d.port_hints[1]:"";return{componentName:l.name,portHint:u}}return`trace[${o.map((s)=>{let a=i(s);if(a)return`.${a.componentName} > port.${a.portHint}`;return`port[${s}]`}).join(", ")}]`}function ale(e){let t=new Map,n=new Map,o=new Map;for(let c of e)switch(c.type){case"pcb_board":o.set(c.pcb_board_id,c);break;case"source_group":{let l=c.parent_subcircuit_id??c.parent_source_group_id;if(n.set(c.source_group_id,c.subcircuit_id??l),c.is_subcircuit&&c.subcircuit_id)n.set(c.subcircuit_id,l);break}case"pcb_group":n.set(c.pcb_group_id,c.subcircuit_id??c.source_group_id);break;case"pcb_component":n.set(c.pcb_component_id,c.subcircuit_id??c.pcb_group_id);break;case"pcb_trace":n.set(c.pcb_trace_id,c.subcircuit_id??c.pcb_group_id??c.pcb_component_id);break;case"pcb_via":n.set(c.pcb_via_id,c.subcircuit_id??c.pcb_group_id??c.pcb_trace_id);break}let i=[...o.values()];for(let c of i)if(t.set(c.pcb_board_id,c),c.subcircuit_id)t.set(c.subcircuit_id,c);let r=i.length===1?i[0]:void 0,s=new Set;function a(c){if(t.has(c))return t.get(c);if(!n.has(c))return;if(s.has(c))return;s.add(c);let l=n.get(c),d=r;if(l)d=a(l);return s.delete(c),t.set(c,d),d}for(let c of n.keys())a(c);return t}function lFn(e){let t=0;if(e.length==0)return t;for(var n=0;n<e.length;n++){var o=e.charCodeAt(n);t=(t<<5)-t+o,t=t&t}return Math.abs(t)}function ule(e,t={}){if(e.length===0)return{width:0,height:0};let n=t.direction??"row",o=t.columnGap??0,i=t.rowGap??0;if(n==="row"||n==="row-reverse"){let a=e.reduce((l,d)=>l+d.width,0)+o*Math.max(0,e.length-1),c=e.reduce((l,d)=>Math.max(l,d.height),0);return{width:a,height:c}}else{let a=e.reduce((l,d)=>l+d.height,0)+i*Math.max(0,e.length-1);return{width:e.reduce((l,d)=>Math.max(l,d.width),0),height:a}}}function hle(e){if(e.type==="pcb_smtpad")return[`${e.layer}_copper`];if(e.type==="pcb_trace"){if(!e.route||!Array.isArray(e.route))return[];let t=new Set;for(let n of e.route)if("layer"in n&&n.layer)t.add(`${n.layer}_copper`);return Array.from(t)}if(e.type==="pcb_copper_pour")return[`${e.layer}_copper`];if(e.type==="pcb_copper_text")return[`${e.layer}_copper`];if(e.type==="pcb_silkscreen_text"||e.type==="pcb_silkscreen_rect"||e.type==="pcb_silkscreen_circle"||e.type==="pcb_silkscreen_line"||e.type==="pcb_silkscreen_path")return[`${e.layer}_silkscreen`];if(e.type==="pcb_fabrication_note_text"||e.type==="pcb_fabrication_note_rect"||e.type==="pcb_fabrication_note_path")return[`${e.layer}_fabrication_note`];if(e.type==="pcb_courtyard_circle"||e.type==="pcb_courtyard_polygon"||e.type==="pcb_courtyard_rect"||e.type==="pcb_courtyard_outline")return[`${e.layer}_courtyard`];if(e.type==="pcb_note_rect"||e.type==="pcb_note_path"||e.type==="pcb_note_text"||e.type==="pcb_note_line"||e.type==="pcb_note_dimension")return[`${e.layer}_user_note`];return[]}var Gf=(e,t={})=>{let n=e,o=n._internal_store;if(!o){o={counts:{},editCount:0},n._internal_store=o;for(let r of n){let s=r.type,a=r[`${s}_id`];if(!a)continue;let c=Number.parseInt(a.split("_").pop());if(!Number.isNaN(c))o.counts[s]=Math.max(o.counts[s]??0,c)}}let i=new Proxy({},{get:(r,s)=>{if(s==="toArray")return()=>(n.editCount=o.editCount,n);if(s==="editCount")return o.editCount;if(s==="subtree")return(c)=>Gf(zz(n,c),t);if(s==="insert")return(c)=>{let l=c.type;if(!l)throw Error("insert requires an element with a type");o.counts[l]??=-1,o.counts[l]++;let d=o.counts[l],u={...c,type:l,[`${l}_id`]:`${l}_${d}`};if(t.validateInserts)(c7[l]??a7).parse(u);return n.push(u),o.editCount++,u};if(s==="insertAll")return(c)=>c.map((l)=>i.insert(l));let a=s;return{get:(c)=>n.find((l)=>l.type===a&&l[`${a}_id`]===c),getUsing:(c)=>{let l=Object.keys(c);if(l.length!==1)throw Error("getUsing requires exactly one key, e.g. { pcb_component_id }");let d=l[0],u=d.replace("_id",""),h=n.find((A)=>A.type===u&&A[d]===c[d]);if(!h)return null;return n.find((A)=>A.type===a&&A[`${a}_id`]===h[`${a}_id`])},getWhere:(c)=>{let l=Object.keys(c);return n.find((d)=>d.type===a&&l.every((u)=>d[u]===c[u]))},list:(c)=>{let l=!c?[]:Object.keys(c);return n.filter((d)=>d.type===a&&l.every((u)=>d[u]===c[u]))},insert:(c)=>{o.counts[a]??=-1,o.counts[a]++;let l=o.counts[a],d={type:a,[`${a}_id`]:`${a}_${l}`,...c};if(t.validateInserts)(c7[a]??a7).parse(d);return n.push(d),o.editCount++,d},delete:(c)=>{let l=n.find((d)=>d[`${a}_id`]===c);if(!l)return;n.splice(n.indexOf(l),1),o.editCount++},update:(c,l)=>{let d=n.find((u)=>u.type===a&&u[`${a}_id`]===c);if(!d)return null;return Object.assign(d,l),o.editCount++,d},select:(c)=>{if(a==="source_component")return n.find((l)=>l.type==="source_component"&&l.name===c.replace(/\./g,""));else if(a==="pcb_port"||a==="source_port"||a==="schematic_port"){let[l,d]=c.replace(/\./g,"").split(/[\s\>]+/),u=n.find((A)=>A.type==="source_component"&&A.name===l);if(!u)return null;let h=n.find((A)=>A.type==="source_port"&&A.source_component_id===u.source_component_id&&(A.name===d||(A.port_hints??[]).includes(d)));if(!h)return null;if(a==="source_port")return h;if(a==="pcb_port")return n.find((A)=>A.type==="pcb_port"&&A.source_port_id===h.source_port_id);else if(a==="schematic_port")return n.find((A)=>A.type==="schematic_port"&&A.source_port_id===h.source_port_id)}}}}});return i},To,ts,sle=(e,t={})=>{let n=e._internal_store_indexed;if(!n){n={counts:{},editCount:0,indexes:{}};for(let s of e){let a=s.type,c=s[`${a}_id`];if(!c)continue;let l=Number.parseInt(c.split("_").pop()||"");if(!Number.isNaN(l))n.counts[a]=Math.max(n.counts[a]??0,l)}let i=t.indexConfig||{},r=n.indexes;if(i.byId)r.byId=new Map;if(i.byType)r.byType=new Map;if(i.byRelation)r.byRelation=new Map;if(i.bySubcircuit)r.bySubcircuit=new Map;if(i.byCustomField&&i.byCustomField.length>0){r.byCustomField=new Map;for(let s of i.byCustomField)r.byCustomField.set(s,new Map)}for(let s of e){if(i.byId){let a=BEe(s);r.byId.set(a,s)}if(i.byType){let a=r.byType.get(s.type)||[];a.push(s),r.byType.set(s.type,a)}if(i.byRelation){let a=Object.entries(s);for(let[c,l]of a)if(c.endsWith("_id")&&c!==`${s.type}_id`&&typeof l==="string"){let d=r.byRelation.get(c)||new Map,u=d.get(l)||[];u.push(s),d.set(l,u),r.byRelation.set(c,d)}}if(i.bySubcircuit&&"subcircuit_id"in s){let a=s.subcircuit_id;if(a&&typeof a==="string"){let c=r.bySubcircuit.get(a)||[];c.push(s),r.bySubcircuit.set(a,c)}}if(i.byCustomField&&r.byCustomField){for(let a of i.byCustomField)if(a in s){let c=s[a];if(c!==void 0&&(typeof c==="string"||typeof c==="number")){let l=String(c),d=r.byCustomField.get(a),u=d.get(l)||[];u.push(s),d.set(l,u)}}}}e._internal_store_indexed=n}let o=new Proxy({},{get:(i,r)=>{if(r==="toArray")return()=>(e.editCount=n.editCount,e);if(r==="editCount")return n.editCount;if(r==="insert")return(a)=>{let{type:c,...l}=a;if(!c)throw Error("insert requires an element with a type");return delete l[`${c}_id`],o[c].insert(l)};if(r==="insertAll")return(a)=>a.map((c)=>o.insert(c));if(r==="subtree")return(a)=>sle(zz(e,a),t);let s=r;return{get:(a)=>{let c=t.indexConfig||{};if(c.byId&&n.indexes.byId)return n.indexes.byId.get(`${s}:${a}`)||null;if(c.byType&&n.indexes.byType)return(n.indexes.byType.get(s)||[]).find((d)=>d[`${s}_id`]===a)||null;return e.find((l)=>l.type===s&&l[`${s}_id`]===a)||null},getUsing:(a)=>{let c=t.indexConfig||{},l=Object.keys(a);if(l.length!==1)throw Error("getUsing requires exactly one key, e.g. { pcb_component_id }");let d=l[0],u=d.replace("_id","");if(c.byRelation&&n.indexes.byRelation){let A=n.indexes.byRelation.get(d);if(A){let p=(A.get(a[d])||[]).find((_)=>_.type===u);if(!p)return null;let g=p[`${s}_id`];if(c.byId&&n.indexes.byId)return n.indexes.byId.get(`${s}:${g}`)||null;if(c.byType&&n.indexes.byType)return(n.indexes.byType.get(s)||[]).find((f)=>f[`${s}_id`]===g)||null;return e.find((_)=>_.type===s&&_[`${s}_id`]===g)||null}}let h=e.find((A)=>A.type===u&&A[d]===a[d]);if(!h)return null;return e.find((A)=>A.type===s&&A[`${s}_id`]===h[`${s}_id`])||null},getWhere:(a)=>{let c=t.indexConfig||{},l=Object.keys(a);if(l.length===1&&c.byCustomField&&n.indexes.byCustomField){let d=l[0],u=n.indexes.byCustomField.get(d);if(u){let h=String(a[d]);return(u.get(h)||[]).find((m)=>m.type===s)||null}}if("subcircuit_id"in a&&c.bySubcircuit&&n.indexes.bySubcircuit){let d=a.subcircuit_id;return(n.indexes.bySubcircuit.get(d)||[]).find((h)=>h.type===s&&l.every((A)=>h[A]===a[A]))||null}if(c.byType&&n.indexes.byType)return(n.indexes.byType.get(s)||[]).find((u)=>l.every((h)=>u[h]===a[h]))||null;return e.find((d)=>d.type===s&&l.every((u)=>d[u]===a[u]))||null},list:(a)=>{let c=t.indexConfig||{},l=!a?[]:Object.keys(a);if(l.length===0&&c.byType&&n.indexes.byType)return(n.indexes.byType.get(s)||[]).slice();if(l.length===1&&l[0]==="subcircuit_id"&&c.bySubcircuit&&n.indexes.bySubcircuit){let u=a.subcircuit_id;return(n.indexes.bySubcircuit.get(u)||[]).filter((A)=>A.type===s)}let d;if(c.byType&&n.indexes.byType)d=n.indexes.byType.get(s)||[];else d=e.filter((u)=>u.type===s);if(l.length>0)return d.filter((u)=>l.every((h)=>u[h]===a[h]));return d.slice()},insert:(a)=>{n.counts[s]??=-1,n.counts[s]++;let c=n.counts[s],l={type:s,[`${s}_id`]:`${s}_${c}`,...a};if(t.validateInserts)(c7[s]??a7).parse(l);e.push(l),n.editCount++;let d=t.indexConfig||{};if(d.byId&&n.indexes.byId){let u=BEe(l);n.indexes.byId.set(u,l)}if(d.byType&&n.indexes.byType){let u=n.indexes.byType.get(s)||[];u.push(l),n.indexes.byType.set(s,u)}if(d.byRelation&&n.indexes.byRelation){let u=Object.entries(l);for(let[h,A]of u)if(h.endsWith("_id")&&h!==`${l.type}_id`&&typeof A==="string"){let m=n.indexes.byRelation.get(h)||new Map,p=m.get(A)||[];p.push(l),m.set(A,p),n.indexes.byRelation.set(h,m)}}if(d.bySubcircuit&&n.indexes.bySubcircuit&&"subcircuit_id"in l){let u=l.subcircuit_id;if(u&&typeof u==="string"){let h=n.indexes.bySubcircuit.get(u)||[];h.push(l),n.indexes.bySubcircuit.set(u,h)}}if(d.byCustomField&&n.indexes.byCustomField){for(let u of d.byCustomField)if(u in l){let h=l[u];if(h!==void 0&&(typeof h==="string"||typeof h==="number")){let A=String(h),m=n.indexes.byCustomField.get(u),p=m.get(A)||[];p.push(l),m.set(A,p)}}}return l},delete:(a)=>{let c=t.indexConfig||{},l;if(c.byId&&n.indexes.byId)l=n.indexes.byId.get(`${s}:${a}`);else if(c.byType&&n.indexes.byType)l=(n.indexes.byType.get(s)||[]).find((h)=>h[`${s}_id`]===a);else l=e.find((u)=>u[`${s}_id`]===a);if(!l)return;let d=e.indexOf(l);if(d>=0)e.splice(d,1),n.editCount++;if(c.byId&&n.indexes.byId){let u=BEe(l);n.indexes.byId.delete(u)}if(c.byType&&n.indexes.byType){let h=(n.indexes.byType.get(s)||[]).filter((A)=>A[`${s}_id`]!==a);n.indexes.byType.set(s,h)}if(c.byRelation&&n.indexes.byRelation)for(let[u,h]of n.indexes.byRelation.entries())for(let[A,m]of h.entries()){let p=m.filter((g)=>g!==l);if(p.length===0)h.delete(A);else h.set(A,p)}if(c.bySubcircuit&&n.indexes.bySubcircuit&&"subcircuit_id"in l){let u=l.subcircuit_id;if(u){let A=(n.indexes.bySubcircuit.get(u)||[]).filter((m)=>m!==l);if(A.length===0)n.indexes.bySubcircuit.delete(u);else n.indexes.bySubcircuit.set(u,A)}}if(c.byCustomField&&n.indexes.byCustomField)for(let u of n.indexes.byCustomField.values())for(let[h,A]of u.entries()){let m=A.filter((p)=>p!==l);if(m.length===0)u.delete(h);else u.set(h,m)}},update:(a,c)=>{let l=t.indexConfig||{},d;if(l.byId&&n.indexes.byId)d=n.indexes.byId.get(`${s}:${a}`);else if(l.byType&&n.indexes.byType)d=(n.indexes.byType.get(s)||[]).find((h)=>h[`${s}_id`]===a);else d=e.find((u)=>u.type===s&&u[`${s}_id`]===a);if(!d)return null;if(l.byRelation&&n.indexes.byRelation){let u=Object.entries(d);for(let[h,A]of u)if(h.endsWith("_id")&&h!==`${d.type}_id`&&typeof A==="string"){if(h in c&&c[h]!==A){let m=n.indexes.byRelation.get(h);if(m){let g=(m.get(A)||[]).filter((_)=>_!==d);if(g.length===0)m.delete(A);else m.set(A,g)}}}}if(l.bySubcircuit&&n.indexes.bySubcircuit&&"subcircuit_id"in d&&"subcircuit_id"in c){let u=d.subcircuit_id,h=c.subcircuit_id;if(u!==h){let m=(n.indexes.bySubcircuit.get(u)||[]).filter((p)=>p!==d);if(m.length===0)n.indexes.bySubcircuit.delete(u);else n.indexes.bySubcircuit.set(u,m)}}if(l.byCustomField&&n.indexes.byCustomField){for(let u of l.byCustomField)if(u in d&&u in c&&d[u]!==c[u]){let h=n.indexes.byCustomField.get(u);if(h){let A=String(d[u]),p=(h.get(A)||[]).filter((g)=>g!==d);if(p.length===0)h.delete(A);else h.set(A,p)}}}if(Object.assign(d,c),n.editCount++,l.byRelation&&n.indexes.byRelation){let u=Object.entries(d);for(let[h,A]of u)if(h.endsWith("_id")&&h!==`${d.type}_id`&&typeof A==="string"){if(h in c){let m=n.indexes.byRelation.get(h)||new Map,p=m.get(A)||[];if(!p.includes(d))p.push(d),m.set(A,p),n.indexes.byRelation.set(h,m)}}}if(l.bySubcircuit&&n.indexes.bySubcircuit&&"subcircuit_id"in d&&"subcircuit_id"in c){let u=d.subcircuit_id;if(u&&typeof u==="string"){let h=n.indexes.bySubcircuit.get(u)||[];if(!h.includes(d))h.push(d),n.indexes.bySubcircuit.set(u,h)}}if(l.byCustomField&&n.indexes.byCustomField){for(let u of l.byCustomField)if(u in d&&u in c){let h=d[u];if(h!==void 0&&(typeof h==="string"||typeof h==="number")){let A=String(h),m=n.indexes.byCustomField.get(u),p=m.get(A)||[];if(!p.includes(d))p.push(d),m.set(A,p)}}}return d},select:(a)=>{if(s==="source_component")return e.find((c)=>c.type==="source_component"&&c.name===a.replace(/\./g,""))||null;else if(s==="pcb_port"||s==="source_port"||s==="schematic_port"){let[c,l]=a.replace(/\./g,"").split(/[\s\>]+/),d=e.find((h)=>h.type==="source_component"&&h.name===c);if(!d)return null;let u=e.find((h)=>h.type==="source_port"&&h.source_component_id===d.source_component_id&&(h.name===l||(h.port_hints??[]).includes(l)));if(!u)return null;if(s==="source_port")return u;if(s==="pcb_port")return e.find((h)=>h.type==="pcb_port"&&h.source_port_id===u.source_port_id)||null;else if(s==="schematic_port")return e.find((h)=>h.type==="schematic_port"&&h.source_port_id===u.source_port_id)||null}return null}}}});return o},NEe,ULn=(e)=>{if(e==="up")return"right";else if(e==="right")return"down";else if(e==="down")return"left";else if(e==="left")return"up";throw Error(`Invalid direction: ${e}`)},WLn=(e)=>{if(e==="up")return"left";else if(e==="left")return"down";else if(e==="down")return"right";else if(e==="right")return"up";throw Error(`Invalid direction: ${e}`)},XLn=(e,t)=>{while(t>0)e=ULn(e),t--;while(t<0)e=WLn(e),t++;return e},Nct=(e)=>{if(e==="top"||e==="up")return"bottom";else if(e==="bottom"||e==="down")return"top";else if(e==="left")return"right";else if(e==="right")return"left";throw Error(`Invalid sideOrDir: ${e}`)},Rct=(e)=>Math.round(e/(Math.PI/2)),KLn=(e)=>{switch(e){case"from_left":return{x:-1,y:0};case"from_right":return{x:1,y:0};case"from_top":return{x:0,y:1};case"from_bottom":return{x:0,y:-1}}},jLn=({x:e,y:t})=>{if(e>0)return"from_right";if(e<0)return"from_left";if(t>0)return"from_top";return"from_bottom"},qLn=(e,t)=>{if(!e)return e;if(e==="from_above"||e==="from_below"){if(!t.isFlipped)return e;return e==="from_above"?"from_below":"from_above"}let{x:n,y:o}=KLn(e),i=Math.round(t.rotationDegrees/90);while(i>0)[n,o]=[-o,n],i--;while(i<0)[n,o]=[o,-n],i++;if(t.isFlipped)o=-o;return jLn({x:n,y:o})},JLn=(e,t)=>{if(e.type==="schematic_component")e.center=tt(t,e.center);else if(e.type==="schematic_port"){if(e.center=tt(t,e.center),e.facing_direction)e.facing_direction=XLn(e.facing_direction,-(Math.atan2(t.b,t.a)/Math.PI)*2)}else if(e.type==="schematic_text")e.position=tt(t,e.position);else if(e.type==="schematic_trace"){let n=e;if(n.route=(n.route??[]).map((o)=>{let i=tt(t,o);return o.x=i.x,o.y=i.y,o}),Array.isArray(n.junctions))n.junctions=n.junctions.map((o)=>{let i=tt(t,o);return o.x=i.x,o.y=i.y,o});if(Array.isArray(n.edges))n.edges=n.edges.map((o)=>(o.from=tt(t,o.from),o.to=tt(t,o.to),o))}else if(e.type==="schematic_box"){let{x:n,y:o}=tt(t,{x:e.x,y:e.y});e.x=n,e.y=o}else if(e.type==="schematic_line"){let{x:n,y:o}=tt(t,{x:e.x1,y:e.y1}),{x:i,y:r}=tt(t,{x:e.x2,y:e.y2});e.x1=n,e.y1=o,e.x2=i,e.y2=r}return e},Qct=(e,t)=>e.map((n)=>JLn(n,t)),REe=(e,t)=>{let n=t.a*t.d-t.b*t.c<0;return ol(_o(t,bA(e)),!1,n).rotation.angle*180/Math.PI},$Ln=(e,t)=>{let n=tt(t,{x:e.x,y:e.y});e.x=n.x,e.y=n.y;let o=REe(e.shape==="rotated_rect"?e.ccw_rotation:0,t),i=Math.round(o/90);if(Math.abs(o-i*90)<0.00000001){if(Math.abs(i)%2===1)[e.width,e.height]=[e.height,e.width];Object.assign(e,{shape:"rect"}),Reflect.deleteProperty(e,"ccw_rotation")}else Object.assign(e,{shape:"rotated_rect",ccw_rotation:o});return e},ZLn=(e,t)=>{if(e.shape==="polygon")return e.points=e.points.map((r)=>tt(t,r)),e;let n=tt(t,{x:e.x,y:e.y});if(e.x=n.x,e.y=n.y,e.shape==="circle")return e;let o=e.shape==="rotated_rect"?e.ccw_rotation:0,i=REe(o,t);if(Math.abs(i)<0.00000001)Object.assign(e,{shape:"rect"}),Reflect.deleteProperty(e,"ccw_rotation");else Object.assign(e,{shape:"rotated_rect",ccw_rotation:i});return e},kct=(e,t)=>{if(e.type==="pcb_cutout"){if(e.shape==="polygon")e.points=e.points.map((s)=>tt(t,s));else if(e.shape==="path")e.route=e.route.map((s)=>tt(t,s));else if(e.center=tt(t,e.center),e.shape==="rect")e.rotation=REe(e.rotation??0,t);return e}if(e.type==="pcb_soldermask_opening")return ZLn(e,t);if(e.type==="pcb_solder_paste"&&(e.shape==="rect"||e.shape==="rotated_rect"))return $Ln(e,t);if((e.type==="pcb_smtpad"||e.type==="pcb_solder_paste")&&e.shape==="polygon"){if(e.points=e.points.map((s)=>tt(t,s)),e.type==="pcb_solder_paste"&&e.holes)e.holes=e.holes.map((s)=>s.map((a)=>tt(t,a)));return e}let n=ol(t),o=Math.abs(Rct(n.rotation.angle))%2===1,i=n.rotation.angle/Math.PI*180,r=n.scale.sy<0;if(e.type==="pcb_plated_hole"||e.type==="pcb_hole"||e.type==="pcb_via"||e.type==="pcb_smtpad"||e.type==="pcb_solder_paste"||e.type==="pcb_port"){let{x:s,y:a}=tt(t,{x:e.x,y:e.y});e.x=s,e.y=a}else if(e.type==="pcb_keepout"&&e.shape==="outline")e.outline=e.outline.map((s)=>tt(t,s));else if(e.type==="pcb_keepout"||e.type==="pcb_board")e.center=tt(t,e.center);else if(e.type==="pcb_silkscreen_text"||e.type==="pcb_fabrication_note_text"||e.type==="pcb_note_text")e.anchor_position=tt(t,e.anchor_position);else if(e.type==="pcb_copper_text"){if(e.anchor_position)e.anchor_position=tt(t,e.anchor_position)}else if(e.type==="pcb_courtyard_rect")e.center=tt(t,e.center),e.ccw_rotation=((e.ccw_rotation??0)+i)%360;else if(e.type==="pcb_silkscreen_circle"||e.type==="pcb_silkscreen_rect"||e.type==="pcb_silkscreen_pill"||e.type==="pcb_silkscreen_oval"||e.type==="pcb_note_rect"||e.type==="pcb_courtyard_circle")e.center=tt(t,e.center);else if(e.type==="pcb_component"){if(e.center=tt(t,e.center),e.rotation=e.rotation+i,e.rotation=e.rotation%360,e.cable_insertion_center)e.cable_insertion_center=tt(t,e.cable_insertion_center);if(e.insertion_direction=qLn(e.insertion_direction,{rotationDegrees:i,isFlipped:r}),o)[e.width,e.height]=[e.height,e.width]}else if(e.type==="pcb_courtyard_outline")e.outline=e.outline.map((s)=>{let a=tt(t,s);return s.x=a.x,s.y=a.y,s});else if(e.type==="pcb_courtyard_polygon")e.points=e.points.map((s)=>{let a=tt(t,s);return s.x=a.x,s.y=a.y,s});else if(e.type==="pcb_trace")e.route=e.route.map((s)=>{if(!("x"in s))return s.start=tt(t,s.start),s.end=tt(t,s.end),s;let a=tt(t,s);return s.x=a.x,s.y=a.y,s});else if(e.type==="pcb_silkscreen_path"||e.type==="pcb_trace_hint"||e.type==="pcb_fabrication_note_path"||e.type==="pcb_note_path")e.route=e.route.map((s)=>{let a=tt(t,s);return s.x=a.x,s.y=a.y,s});else if(e.type==="pcb_silkscreen_line"||e.type==="pcb_note_line"){let s={x:e.x1,y:e.y1},a={x:e.x2,y:e.y2},c=tt(t,s),l=tt(t,a);e.x1=c.x,e.y1=c.y,e.x2=l.x,e.y2=l.y}else if(e.type==="cad_component"){let s=tt(t,{x:e.position.x,y:e.position.y});e.position.x=s.x,e.position.y=s.y}return e},_7=(e,t)=>{let n=ol(t),o=Rct(n.rotation.angle),i=Math.abs(o)%2===1,r=e.map((s)=>kct(s,t));if(i)r=r.map((s)=>{if(s.type==="pcb_smtpad"&&(s.shape==="rect"||s.shape==="pill")||s.type==="pcb_solder_paste"&&s.shape==="pill")[s.width,s.height]=[s.height,s.width];return s});return r},JR=(e)=>{let t=e.type;return e[`${t}_id`]},eFn=(e,t)=>e.find((n)=>JR(n)===t)??null,Lct=(e,t)=>{let n=Gf(e).pcb_port.get(t);if(!n)return`pcb_port[#${t}]`;let o=n.pcb_component_id?Gf(e).pcb_component.get(n.pcb_component_id):void 0;if(!o)return`pcb_port[#${t}]`;let i=Gf(e).source_component.get(o.source_component_id);if(!i)return`pcb_port[#${t}]`;let r=Gf(e).source_port.get(n.source_port_id);if(!r)return`pcb_port[#${t}]`;let s;if(r?.port_hints&&r.port_hints.length>0)s=r.port_hints[0];else if(r.port_hints&&r.port_hints.length>0)s=r.port_hints[0];else s=t;return`pcb_port[.${i.name} > .${s}]`},QEe=(e,t)=>{if(typeof t==="string"){let n=eFn(e,t);if(!n)`unknown (could not find element with id ${t})`;return QEe(e,n)}switch(t.type){case"pcb_port":return Lct(e,t.pcb_port_id);case"pcb_smtpad":return tFn(e,t.pcb_smtpad_id);case"pcb_trace":return nFn(e,t.pcb_trace_id);case"source_component":return`source_component[${t.name}]`;default:return`${t.type}[#${JR(t)}]`}},TEe=(e,t)=>({minX:Math.min(e.minX,t.minX),minY:Math.min(e.minY,t.minY),maxX:Math.max(e.maxX,t.maxX),maxY:Math.max(e.maxY,t.maxY)}),Zq=(e,t,n)=>{let o=n/2;return{minX:e-o,minY:t-o,maxX:e+o,maxY:t+o}},Mct=(e,t,n,o,i)=>{let r=n/2,s=o/2,a=i*Math.PI/180,c=Math.cos(a),l=Math.sin(a),d=[{x:-r,y:-s},{x:r,y:-s},{x:r,y:s},{x:-r,y:s}].map((u)=>({x:e+u.x*c-u.y*l,y:t+u.x*l+u.y*c}));return{minX:Math.min(...d.map((u)=>u.x)),minY:Math.min(...d.map((u)=>u.y)),maxX:Math.max(...d.map((u)=>u.x)),maxY:Math.max(...d.map((u)=>u.y))}},oFn=(e,t,n,o,i)=>{let r=n/2,s=o/2,a=i*Math.PI/180,c=Math.cos(a),l=Math.sin(a),d=Math.hypot(r*c,s*l),u=Math.hypot(r*l,s*c);return{minX:e-d,minY:t-u,maxX:e+d,maxY:t+u}},iFn=(e,t,n,o,i)=>{let r=Math.min(n,o)/2,s=Math.max(n,o)/2-r,a=i*Math.PI/180,c=n>=o?{x:s,y:0}:{x:0,y:s},l={x:c.x*Math.cos(a)-c.y*Math.sin(a),y:c.x*Math.sin(a)+c.y*Math.cos(a)},d=Math.abs(l.x)+r,u=Math.abs(l.y)+r;return{minX:e-d,minY:t-u,maxX:e+d,maxY:t+u}},rle=(e)=>{if(e.length===0)return null;return{minX:Math.min(...e.map((t)=>t.x)),minY:Math.min(...e.map((t)=>t.y)),maxX:Math.max(...e.map((t)=>t.x)),maxY:Math.max(...e.map((t)=>t.y))}},wEe=(e)=>{if(!Array.isArray(e))return[];return e.flatMap((t)=>{if(!t||typeof t!=="object")return[];if("x"in t&&"y"in t&&typeof t.x==="number"&&typeof t.y==="number")return[{x:t.x,y:t.y}];if("start"in t&&"end"in t)return[t.start,t.end].filter((o)=>Boolean(o&&typeof o==="object"&&"x"in o&&"y"in o&&typeof o.x==="number"&&typeof o.y==="number"));return[]})},rFn=(e)=>{if(!e.type.startsWith("pcb_"))return null;if(e.type==="pcb_smtpad"&&e.shape==="polygon"&&Array.isArray(e.points))return rle(e.points);if(e.type==="pcb_hole"&&e.hole_shape==="circle")return Zq(e.x,e.y,e.hole_diameter);if(e.type==="pcb_plated_hole"){let u;if("outer_diameter"in e&&typeof e.outer_diameter==="number")u=Zq(e.x,e.y,e.outer_diameter);else if("hole_diameter"in e&&typeof e.hole_diameter==="number")u=Zq(e.x,e.y,e.hole_diameter);if((e.shape==="oval"||e.shape==="pill")&&typeof e.outer_width==="number"&&typeof e.outer_height==="number")u=(e.shape==="pill"?iFn:oFn)(e.x,e.y,e.outer_width,e.outer_height,e.ccw_rotation??0);if("rect_pad_width"in e&&typeof e.rect_pad_width==="number"&&"rect_pad_height"in e&&typeof e.rect_pad_height==="number"){let h=Mct(e.x,e.y,e.rect_pad_width,e.rect_pad_height,"rect_ccw_rotation"in e?e.rect_ccw_rotation??0:0);u=u?TEe(u,h):h}if("hole_diameter"in e&&typeof e.hole_diameter==="number"){let h=Zq(e.x+("hole_offset_x"in e?e.hole_offset_x??0:0),e.y+("hole_offset_y"in e?e.hole_offset_y??0:0),e.hole_diameter);u=u?TEe(u,h):h}if(u)return u}let t=e,n=rle(wEe(t.route));if(n)return n;let o=rle(wEe(t.outline));if(o)return o;let i=rle(wEe(t.points));if(i)return i;let r,s,a,c;if("x"in e&&"y"in e)r=Number(e.x),s=Number(e.y);if("outer_diameter"in e)a=Number(e.outer_diameter),c=Number(e.outer_diameter);if("width"in e)a=Number(e.width);if("height"in e)c=Number(e.height);if("center"in e&&e.center&&typeof e.center==="object"&&"x"in e.center&&"y"in e.center)r=Number(e.center.x),s=Number(e.center.y);let l=0;if("rotation"in e&&typeof e.rotation==="number")l=e.rotation;if("ccw_rotation"in e&&typeof e.ccw_rotation==="number")l=e.ccw_rotation;if(r!==void 0&&s!==void 0){if(a!==void 0&&c!==void 0)return l?Mct(r,s,a,c,l):{minX:r-a/2,minY:s-c/2,maxX:r+a/2,maxY:s+c/2};if("radius"in e&&typeof e.radius==="number")return Zq(r,s,e.radius*2);return{minX:r,minY:s,maxX:r,maxY:s}}let d=[t.anchor_position,t.position].filter((u)=>Boolean(u&&typeof u==="object"&&"x"in u&&"y"in u&&typeof u.x==="number"&&typeof u.y==="number")).at(0);return d?{minX:d.x,minY:d.y,maxX:d.x,maxY:d.y}:null},Yf=(e)=>{let t={minX:Number.POSITIVE_INFINITY,minY:Number.POSITIVE_INFINITY,maxX:Number.NEGATIVE_INFINITY,maxY:Number.NEGATIVE_INFINITY};for(let n of e){let o=rFn(n);if(o)t=TEe(t,o)}return t},Fct=(e)=>{if(e.width&&e.height&&e.center){let a=e.width/2,c=e.height/2;return{minX:e.center.x-a,minY:e.center.y-c,maxX:e.center.x+a,maxY:e.center.y+c,width:e.width,height:e.height,center:{x:e.center.x,y:e.center.y}}}if(!e.outline||e.outline.length===0)throw Error("Unable to compute board bounds. pcb_board must include width/height/center or a non-empty outline.");let{POSITIVE_INFINITY:t,POSITIVE_INFINITY:n,NEGATIVE_INFINITY:o,NEGATIVE_INFINITY:i}=Number;for(let a of e.outline)t=Math.min(t,a.x),n=Math.min(n,a.y),o=Math.max(o,a.x),i=Math.max(i,a.y);let r=o-t,s=i-n;return{minX:t,minY:n,maxX:o,maxY:i,width:r,height:s,center:{x:t+r/2,y:n+s/2}}},sFn=0.1,Bct=0.18,Lv=0.2,qR=({minX:e,minY:t,maxX:n,maxY:o})=>{let i=n-e,r=o-t;return{minX:e,minY:t,maxX:n,maxY:o,width:i,height:r,center:{x:e+i/2,y:t+r/2}}},aFn=(e)=>{let t=0.12*(Bct/0.18),n=0.12*(Bct/0.18);return e.length*t+n},cFn=(e)=>{let t=aFn(e.text),n=e.anchor_position;if(!n){let o=e.anchor_side==="top"||e.anchor_side==="bottom",i=o?Lv:t,r=o?t:Lv;return qR({minX:e.center.x-i/2,minY:e.center.y-r/2,maxX:e.center.x+i/2,maxY:e.center.y+r/2})}switch(e.anchor_side){case"left":return qR({minX:n.x,minY:n.y-Lv/2,maxX:n.x+t,maxY:n.y+Lv/2});case"right":return qR({minX:n.x-t,minY:n.y-Lv/2,maxX:n.x,maxY:n.y+Lv/2});case"top":return qR({minX:n.x-Lv/2,minY:n.y-t,maxX:n.x+Lv/2,maxY:n.y});case"bottom":return qR({minX:n.x-Lv/2,minY:n.y,maxX:n.x+Lv/2,maxY:n.y+t})}},Hct=(e)=>{if(e.type==="schematic_component")return qR({minX:e.center.x-e.size.width/2,minY:e.center.y-e.size.height/2,maxX:e.center.x+e.size.width/2,maxY:e.center.y+e.size.height/2});if(e.type==="schematic_net_label")return cFn(e);let t=[...e.edges.flatMap((o)=>[o.from,o.to]),...e.junctions];if(t.length===0)return null;let n=sFn/2;return qR({minX:Math.min(...t.map((o)=>o.x))-n,minY:Math.min(...t.map((o)=>o.y))-n,maxX:Math.max(...t.map((o)=>o.x))+n,maxY:Math.max(...t.map((o)=>o.y))+n})},wct,dFn=(e)=>{let{x:t,y:n,width:o,height:i}={...e,...e.size,...e.center,...e.position};if(e.x1!==void 0&&e.x2!==void 0&&e.y1!==void 0&&e.y2!==void 0)t=(e.x1+e.x2)/2,n=(e.y1+e.y2)/2,o=Math.abs(e.x1-e.x2),i=Math.abs(e.y1-e.y2);if(e.points&&Array.isArray(e.points)&&e.points.length>0){let a=e.points.map((A)=>A.x),c=e.points.map((A)=>A.y),l=Math.min(...a),d=Math.max(...a),u=Math.min(...c),h=Math.max(...c);t=(l+d)/2,n=(u+h)/2,o=d-l,i=h-u}let r=e.text||e.name||e.source?.text||e.source?.name||"?",s=e;if(t===void 0||n===void 0)return null;if(o===void 0){if("radius"in e)o=e.radius*2,i=e.radius*2;else if("outer_diameter"in e)o=e.outer_diameter,i=e.outer_diameter;else if("rect_pad_width"in e&&"rect_pad_height"in e){if(o=e.rect_pad_width,i=e.rect_pad_height,"hole_diameter"in e)o=Math.max(o,e.hole_diameter),i=Math.max(i,e.hole_diameter)}else if("hole_diameter"in e)o=e.hole_diameter,i=e.hole_diameter}if(o===void 0||i===void 0)o=0.1,i=0.1;return{x:t,y:n,width:o,height:i,title:r,content:s,bg_color:wct[lFn(e.type||r)%wct.length]?.[4]??"#f00"}},uFn=(e)=>Boolean(e),cle=(e)=>{let t=e.filter((l)=>l.type.startsWith("pcb_")||l.type.startsWith("schematic_")).concat(e.filter((l)=>l.type==="pcb_trace"||l.type==="schematic_trace").flatMap((l)=>l.route)).map((l)=>dFn(l)).filter(uFn);if(t.length===0)return{center:{x:0,y:0},width:0,height:0};let n=t[0].x-t[0].width/2,o=t[0].x+t[0].width/2,i=t[0].y-t[0].height/2,r=t[0].y+t[0].height/2;for(let l of t.slice(1))n=Math.min(n,l.x-l.width/2),o=Math.max(o,l.x+l.width/2),i=Math.min(i,l.y-l.height/2),r=Math.max(r,l.y+l.height/2);let s=o-n,a=r-i;return{center:{x:n+s/2,y:i+a/2},width:s,height:a}},pa=(e)=>e[`${e.type}_id`],lle=(e,t,n)=>{let o=e.find((d)=>d.type==="pcb_component"&&d.pcb_component_id===t);if(!o)return;let i="center"in o?o.center:{x:o.x,y:o.y},r=n.x-i.x,s=n.y-i.y,a=e.filter((d)=>d.type==="pcb_port"&&d.pcb_component_id===t).map((d)=>d.pcb_port_id),c=e.filter((d)=>{if(d===o)return!0;let u=d;if(u.pcb_component_id===t)return!0;if(Array.isArray(u.pcb_component_ids)&&u.pcb_component_ids.includes(t))return!0;if(u.pcb_port_id&&a.includes(u.pcb_port_id))return!0;if(Array.isArray(u.pcb_port_ids)&&u.pcb_port_ids.some((h)=>a.includes(h)))return!0;if(u.start_pcb_port_id&&a.includes(u.start_pcb_port_id))return!0;if(u.end_pcb_port_id&&a.includes(u.end_pcb_port_id))return!0;if(Array.isArray(u.route)&&u.route.some((h)=>h.start_pcb_port_id&&a.includes(h.start_pcb_port_id)||h.end_pcb_port_id&&a.includes(h.end_pcb_port_id)))return!0;return!1}),l=So(r,s);_7(c,l)},Oct=(e,t)=>{let n=[],o=e.filter((i)=>i.type==="source_group"&&i.parent_source_group_id===t).map((i)=>i.source_group_id);n.push(...o);for(let i of o)n.push(...Oct(e,i));return n},dle=(e,t,n)=>{let o=[t,...Oct(e,t)],i=new Set;for(let h of o)zz(e,{source_group_id:h}).forEach((m)=>i.add(m));let r=Array.from(i).filter((h)=>h.type==="pcb_port").map((h)=>h.pcb_port_id);e.filter((h)=>{if(h.type!=="pcb_trace")return!1;if(i.has(h))return!1;let A=h;if(A.start_pcb_port_id&&r.includes(A.start_pcb_port_id))return!0;if(A.end_pcb_port_id&&r.includes(A.end_pcb_port_id))return!0;if(Array.isArray(A.route)&&A.route.some((m)=>m.start_pcb_port_id&&r.includes(m.start_pcb_port_id)||m.end_pcb_port_id&&r.includes(m.end_pcb_port_id)))return!0;return!1}).forEach((h)=>i.add(h));let a=Array.from(i).filter((h)=>h.type.startsWith("pcb_"));if(a.length===0)return;let{center:c}=cle(a),l=n.x-c.x,d=n.y-c.y,u=So(l,d);_7(a,u)},zct=(e,t,n)=>{let o=e.find((d)=>d.type==="schematic_component"&&d.schematic_component_id===t);if(!o)return;let i="center"in o?o.center:{x:o.x,y:o.y},r=n.x-i.x,s=n.y-i.y,a=e.filter((d)=>d.type==="schematic_port"&&d.schematic_component_id===t).map((d)=>d.schematic_port_id),c=e.filter((d)=>{if(d===o)return!0;let u=d;if(u.schematic_component_id===t)return!0;if(Array.isArray(u.schematic_component_ids)&&u.schematic_component_ids.includes(t))return!0;if(u.schematic_port_id&&a.includes(u.schematic_port_id))return!0;if(Array.isArray(u.schematic_port_ids)&&u.schematic_port_ids.some((h)=>a.includes(h)))return!0;if(u.start_schematic_port_id&&a.includes(u.start_schematic_port_id))return!0;if(u.end_schematic_port_id&&a.includes(u.end_schematic_port_id))return!0;if(Array.isArray(u.route)&&u.route.some((h)=>h.start_schematic_port_id&&a.includes(h.start_schematic_port_id)||h.end_schematic_port_id&&a.includes(h.end_schematic_port_id)))return!0;return!1}),l=So(r,s);Qct(c,l)},Gct=(e,t)=>{let n=[],o=e.filter((i)=>i.type==="source_group"&&i.parent_source_group_id===t).map((i)=>i.source_group_id);n.push(...o);for(let i of o)n.push(...Gct(e,i));return n},Yct=(e,t,n)=>{let o=[t,...Gct(e,t)],i=new Set;for(let h of o)zz(e,{source_group_id:h}).forEach((m)=>i.add(m));let r=Array.from(i).filter((h)=>h.type==="schematic_port").map((h)=>h.schematic_port_id);e.filter((h)=>{if(h.type!=="schematic_trace")return!1;if(i.has(h))return!1;let A=h;if(A.start_schematic_port_id&&r.includes(A.start_schematic_port_id))return!0;if(A.end_schematic_port_id&&r.includes(A.end_schematic_port_id))return!0;if(Array.isArray(A.route)&&A.route.some((m)=>m.start_schematic_port_id&&r.includes(m.start_schematic_port_id)||m.end_schematic_port_id&&r.includes(m.end_schematic_port_id)))return!0;return!1}).forEach((h)=>i.add(h));let a=Array.from(i).filter((h)=>h.type.startsWith("schematic_"));if(a.length===0)return;let{center:c}=cle(a),l=n.x-c.x,d=n.y-c.y,u=So(l,d);Qct(a,u)},RM=(e,t)=>{let n=new Map,o=new Set;for(let l of e)if(l.type==="source_group")o.add(l.source_group_id);let i=[];for(let l of e)if(l.type==="source_group"&&l.parent_source_group_id){let{parent_source_group_id:d,source_group_id:u}=l;if(!o.has(d)){if(i.push(u),!n.has(u))n.set(u,[])}else{let h=n.get(d)??[];if(h.push(u),n.set(d,h),!n.has(u))n.set(u,[])}}for(let l of e)if(l.type==="source_group"&&!n.has(l.source_group_id))n.set(l.source_group_id,[]);let r=new Map,s=()=>{for(let[l,d]of n){if(r.has(l))continue;if(d.every((u)=>r.has(u)))return l}return null},a=null;while(!0){let l=s();if(!l)break;let u={nodeType:"group",sourceGroup:e.find((h)=>h.type==="source_group"&&h.source_group_id===l),otherChildElements:[],childNodes:[...n.get(l)?.map((h)=>r.get(h))??[],...e.filter((h)=>h.type==="source_component"&&h.source_group_id===l).map((h)=>({nodeType:"component",sourceComponent:h,childNodes:[],otherChildElements:[...e.filter((A)=>A.type==="pcb_component"&&A.source_component_id===h.source_component_id)]}))]};r.set(l,u),a=l}if(!a)return console.warn("No groups were processed, returning tree without sourceGroup"),{nodeType:"group",childNodes:[],otherChildElements:e};let c=null;if(t&&t.source_group_id!==void 0)c=t.source_group_id;else if(i.length>0)c=i[0];else c=a;if(!c)return console.warn("No valid root group found, returning tree without sourceGroup"),{nodeType:"group",childNodes:[],otherChildElements:e};return r.get(c)},uy=0.000000001,hFn=(e,t,n)=>Math.max(t,Math.min(n,e)),mFn=(e,t)=>Math.hypot(e.x-t.x,e.y-t.y),eJ=(e,t,n)=>{let o=n.x-t.x,i=n.y-t.y,r=o*o+i*i;if(r<=uy)return mFn(e,t);let s=hFn(((e.x-t.x)*o+(e.y-t.y)*i)/r,0,1);return Math.hypot(e.x-(t.x+s*o),e.y-(t.y+s*i))},tJ=(e,t,n)=>(t.x-e.x)*(n.y-e.y)-(t.y-e.y)*(n.x-e.x),nJ=(e,t,n)=>{if(Math.abs(tJ(t,n,e))>uy)return!1;return e.x>=Math.min(t.x,n.x)-uy&&e.x<=Math.max(t.x,n.x)+uy&&e.y>=Math.min(t.y,n.y)-uy&&e.y<=Math.max(t.y,n.y)+uy},pFn=(e,t,n,o)=>{let i=tJ(e,t,n),r=tJ(e,t,o),s=tJ(n,o,e),a=tJ(n,o,t);if((i>uy&&r<-uy||i<-uy&&r>uy)&&(s>uy&&a<-uy||s<-uy&&a>uy))return!0;return nJ(n,e,t)||nJ(o,e,t)||nJ(e,n,o)||nJ(t,n,o)},Hz=(e)=>{let t=[];if(e.points.length<2)return t;for(let n=0;n<e.points.length;n+=1){let o=e.points[n],i=e.points[(n+1)%e.points.length];if(!o||!i)continue;t.push([o,i])}return t},DEe=(e,t)=>{for(let[o,i]of Hz(t))if(nJ(e,o,i))return!0;let n=!1;for(let o=0,i=t.points.length-1;o<t.points.length;i=o++){let r=t.points[o],s=t.points[i];if(!r||!s)continue;if(r.y>e.y!==s.y>e.y&&e.x<(s.x-r.x)*(e.y-r.y)/(s.y-r.y)+r.x)n=!n}return n},Vct=(e,t)=>Math.max(0,Math.hypot(e.x-t.x,e.y-t.y)-e.radius-t.radius),Uct=(e,t)=>{if(e.points.length<3||t.points.length<3)return Number.POSITIVE_INFINITY;for(let[r,s]of Hz(e))for(let[a,c]of Hz(t))if(pFn(r,s,a,c))return 0;let n=e.points[0],o=t.points[0];if(n&&DEe(n,t)||o&&DEe(o,e))return 0;let i=Number.POSITIVE_INFINITY;for(let[r,s]of Hz(e))for(let[a,c]of Hz(t))i=Math.min(i,eJ(r,a,c),eJ(s,a,c),eJ(a,r,s),eJ(c,r,s));return i},kEe=(e,t)=>{if(t.points.length<3)return Number.POSITIVE_INFINITY;if(DEe({x:e.x,y:e.y},t))return 0;let n=Number.POSITIVE_INFINITY;for(let[o,i]of Hz(t))n=Math.min(n,eJ({x:e.x,y:e.y},o,i));return Math.max(0,n-e.radius)},LEe,AFn,_Fn=(e)=>{if(typeof e.x==="number"&&typeof e.y==="number")return{x:e.x,y:e.y};if(e.points&&e.points.length>0){let t=e.points.map((o)=>o.x),n=e.points.map((o)=>o.y);return{x:(Math.min(...t)+Math.max(...t))/2,y:(Math.min(...n)+Math.max(...n))/2}}return null},gFn=(e)=>{for(let t of e.port_hints??[]){let n=String(t).trim().match(/^(?:pin)?(\d+)$/i);if(n)return Number.parseInt(n[1],10)}return null},Tct=(e,t,n)=>{let o=t.x-e.x,i=t.y-e.y;if(Math.abs(i)<=n&&Math.abs(o)>n)return o>0?"topside_left":"bottomside_right";if(Math.abs(o)<=n&&Math.abs(i)>n)return i>0?"leftside_bottom":"rightside_top";return null},fFn=(e,t,n)=>{let o=e.map((f)=>f.x),i=e.map((f)=>f.y),r=Math.min(...o),s=Math.max(...o),a=Math.min(...i),c=Math.max(...i),l=(r+s)/2,d=(a+c)/2,u=s-r,h=c-a,A=Math.max(u,h,1)*0.000001,{side:m,alignment:p}=LEe[n],g=m==="leftside"&&Math.abs(t.x-r)<=A||m==="rightside"&&Math.abs(t.x-s)<=A||m==="topside"&&Math.abs(t.y-c)<=A||m==="bottomside"&&Math.abs(t.y-a)<=A,_=p==="left"&&(u<=A||t.x<l-A)||p==="right"&&(u<=A||t.x>l+A)||p==="top"&&(h<=A||t.y>d+A)||p==="bottom"&&(h<=A||t.y<d-A);return g&&_},FEe=(e)=>{let n=e.filter((h)=>h.type==="pcb_smtpad"||h.type==="pcb_plated_hole").map((h)=>({center:_Fn(h),pinNumber:gFn(h)})),o=n.find((h)=>h.pinNumber===1)?.center,i=n.map((h)=>h.center).filter((h)=>h!==null);if(!o||i.length===0)return null;let r=AFn.filter((h)=>fFn(i,o,h));if(r.length===1)return r[0];if(r.length===0)return null;let s;for(let h of n){if(!h.center||h.pinNumber===null||h.pinNumber<=1)continue;if(!s||h.pinNumber<s.pinNumber)s={center:h.center,pinNumber:h.pinNumber}}if(!s)return null;let a=i.map((h)=>h.x),c=i.map((h)=>h.y),d=Math.max(Math.max(...a)-Math.min(...a),Math.max(...c)-Math.min(...c),1)*0.000001;if(n.length===2&&s.pinNumber===2)return Tct(o,s.center,d);if(n.length>2){let h=[...n].sort((A,m)=>(A.pinNumber??Number.POSITIVE_INFINITY)-(m.pinNumber??Number.POSITIVE_INFINITY));if(h.every(({center:A,pinNumber:m},p)=>m===p+1&&A!==null&&Number.isFinite(A.x)&&Number.isFinite(A.y))){let A=h[0].center,m=h[h.length-1].center,p=m.x-A.x,g=m.y-A.y,_=Math.abs(g)<=d&&Math.abs(p)>d,f=Math.abs(p)<=d&&Math.abs(g)>d;if((_||f)&&h.slice(1).every(({center:y},x)=>{let C=h[x].center;return _?Math.abs(y.y-A.y)<=d&&(y.x-C.x)*Math.sign(p)>d:Math.abs(y.x-A.x)<=d&&(y.y-C.y)*Math.sign(g)>d}))return Tct(A,h[1].center,d)}}let u=r.filter((h)=>{let{side:A}=LEe[h];return A==="leftside"||A==="rightside"?Math.abs(s.center.x-o.x)<=d:Math.abs(s.center.y-o.y)<=d});return u.length===1?u[0]:null},iJ=(e,t,n=0)=>{let{a:o,b:i,c:r,d:s,e:a,f:c}=_o(So(t.x,t.y),wa(n*Math.PI/180));return e.transform(new T_(o,i,r,s,a,c))},p7=(e)=>e.orientation()===zR.CCW?e:e.reverse(),A7=(e,t)=>p7(new Dc(new jR(new Bs(e.x,e.y),t))),Oz=(e,t,n,o=0,i=0)=>{let r=t/2,s=n/2,a=Math.max(0,Math.min(o,r,s));if(a===0)return iJ(p7(new Dc(new vA(-r,-s,r,s))),e,i);let c=[new d0(new Bs(r-a,-s+a),a,-Math.PI/2,0,!0),new d0(new Bs(r-a,s-a),a,0,Math.PI/2,!0),new d0(new Bs(-r+a,s-a),a,Math.PI/2,Math.PI,!0),new d0(new Bs(-r+a,-s+a),a,Math.PI,Math.PI*1.5,!0)],l=[];for(let d=0;d<c.length;d++){let u=c[d],h=c[(d+1)%c.length];if(l.push(u),u.end.distanceTo(h.start)[0]>0.000000000001)l.push(new Bp(u.end,h.start))}return iJ(p7(new Dc(l)),e,i)},Dct=(e)=>{let t=[];for(let n=0;n<e.vertices.length;n++){let o=e.vertices[n],i=e.vertices[(n+1)%e.vertices.length],r=i.x-o.x,s=i.y-o.y;if(r===0&&s===0)continue;let a=o.bulge??0;if(a===0)t.push(new Bp(new Bs(o.x,o.y),new Bs(i.x,i.y)));else{let c=(1-a*a)/(4*a),l=new Bs((o.x+i.x)/2-s*c,(o.y+i.y)/2+r*c);t.push(new d0(l,Math.hypot(r,s)*(1+a*a)/(4*Math.abs(a)),Math.atan2(o.y-l.y,o.x-l.x),Math.atan2(i.y-l.y,i.x-l.x),a>0))}}return p7(new Dc(t))},oJ=(e,t)=>{for(let n of t.reverse().faces)e.addFace(n.shapes);return e},g7=(e)=>{if(e.shape==="rect")return Oz(e.center,e.width,e.height,0,e.rotation);if(e.shape==="polygon")return p7(new Dc(e.points.map((n)=>new Bs(n.x,n.y))));let t=Dct(e.brep_shape.outer_ring);for(let n of e.brep_shape.inner_rings)oJ(t,Dct(n));return t},Gz=(e)=>{if(e.shape==="polygon")return p7(new Dc(e.points.map((n)=>new Bs(n.x,n.y))));if(e.shape==="circle")return A7(e,e.radius);let t=e.shape==="pill"||e.shape==="rotated_pill"?e.radius:e.corner_radius??e.rect_border_radius??0;return Oz(e,e.width,e.height,t,"ccw_rotation"in e?e.ccw_rotation:0)},f7=(e,t,n)=>oJ(A7(e,t/2),A7(e,n/2)),y7=(e,t=0)=>{if(e.shape==="circle")return f7(e,e.outer_diameter,e.hole_diameter);if("outer_width"in e)return oJ(Oz(e,e.outer_width,e.outer_height,Math.min(e.outer_width,e.outer_height)/2,e.ccw_rotation),Oz(e,e.hole_width,e.hole_height,Math.min(e.hole_width,e.hole_height)/2,e.ccw_rotation));let n={x:e.x+e.hole_offset_x,y:e.y+e.hole_offset_y},o=e.shape==="hole_with_polygon_pad"?iJ(p7(new Dc(e.pad_outline.map((i)=>new Bs(i.x,i.y)))),e,e.ccw_rotation??t):Oz(e,e.rect_pad_width,e.rect_pad_height,e.rect_border_radius,"rect_ccw_rotation"in e?e.rect_ccw_rotation:0);if(e.shape==="circular_hole_with_rect_pad"||e.shape==="hole_with_polygon_pad"&&e.hole_shape==="circle"){if(e.hole_diameter===void 0)throw Error("Circular plated hole requires hole_diameter");return oJ(o,A7(n,e.hole_diameter/2))}if(!("hole_width"in e)||e.hole_width===void 0||e.hole_height===void 0)throw Error("Slotted plated hole requires hole_width and hole_height");return oJ(o,Oz(n,e.hole_width,e.hole_height,Math.min(e.hole_width,e.hole_height)/2,"hole_ccw_rotation"in e?e.hole_ccw_rotation:e.shape==="hole_with_polygon_pad"?e.ccw_rotation??t:0))},$R=(e,t,n,o=n)=>{let i=Math.hypot(t.x-e.x,t.y-e.y),r=n/2,s=o/2;if($2.EQ_0(i)||i<=Math.abs(s-r))return A7(r>=s?e:t,Math.max(r,s));let a=Math.atan2(t.y-e.y,t.x-e.x),c=Math.acos((r-s)/i),l=new d0(new Bs(e.x,e.y),r,a+c,a-c,!0),d=new d0(new Bs(t.x,t.y),s,a-c,a+c,!0);return p7(new Dc([l,new Bp(l.end,d.start),d,new Bp(d.end,l.start)]))},Wct=(e,t,n=0.0000001)=>e.vertices.some((o)=>t.contains(o))||t.vertices.some((o)=>e.contains(o))||e.distanceTo(t)[0]<=n;var Yo=Ks(()=>{Gt();Gt();pn();cEe();pn();pn();pn();pn();u0();pn();Gf.unparsed=Gf;To=Gf,ts=Gf;sle.unparsed=sle;NEe=sle;wct=[["#69d2e7","#a7dbd8","#e0e4cc","#f38630","#fa6900"],["#fe4365","#fc9d9a","#f9cdad","#c8c8a9","#83af9b"],["#ecd078","#d95b43","#c02942","#542437","#53777a"],["#556270","#4ecdc4","#c7f464","#ff6b6b","#c44d58"],["#774f38","#e08e79","#f1d4af","#ece5ce","#c5e0dc"],["#e8ddcb","#cdb380","#036564","#033649","#031634"],["#490a3d","#bd1550","#e97f02","#f8ca00","#8a9b0f"],["#594f4f","#547980","#45ada8","#9de0ad","#e5fcc2"],["#00a0b0","#6a4a3c","#cc333f","#eb6841","#edc951"],["#e94e77","#d68189","#c6a49a","#c6e5d9","#f4ead5"],["#3fb8af","#7fc7af","#dad8a7","#ff9e9d","#ff3d7f"],["#d9ceb2","#948c75","#d5ded9","#7a6a53","#99b2b7"],["#ffffff","#cbe86b","#f2e9e1","#1c140d","#cbe86b"],["#efffcd","#dce9be","#555152","#2e2633","#99173c"],["#343838","#005f6b","#008c9e","#00b4cc","#00dffc"],["#413e4a","#73626e","#b38184","#f0b49e","#f7e4be"],["#ff4e50","#fc913a","#f9d423","#ede574","#e1f5c4"],["#99b898","#fecea8","#ff847c","#e84a5f","#2a363b"],["#655643","#80bca3","#f6f7bd","#e6ac27","#bf4d28"],["#00a8c6","#40c0cb","#f9f2e7","#aee239","#8fbe00"],["#351330","#424254","#64908a","#e8caa4","#cc2a41"],["#554236","#f77825","#d3ce3d","#f1efa5","#60b99a"],["#5d4157","#838689","#a8caba","#cad7b2","#ebe3aa"],["#8c2318","#5e8c6a","#88a65e","#bfb35a","#f2c45a"],["#fad089","#ff9c5b","#f5634a","#ed303c","#3b8183"],["#ff4242","#f4fad2","#d4ee5e","#e1edb9","#f0f2eb"],["#f8b195","#f67280","#c06c84","#6c5b7b","#355c7d"],["#d1e751","#ffffff","#000000","#4dbce9","#26ade4"],["#1b676b","#519548","#88c425","#bef202","#eafde6"],["#5e412f","#fcebb6","#78c0a8","#f07818","#f0a830"],["#bcbdac","#cfbe27","#f27435","#f02475","#3b2d38"],["#452632","#91204d","#e4844a","#e8bf56","#e2f7ce"],["#eee6ab","#c5bc8e","#696758","#45484b","#36393b"],["#f0d8a8","#3d1c00","#86b8b1","#f2d694","#fa2a00"],["#2a044a","#0b2e59","#0d6759","#7ab317","#a0c55f"],["#f04155","#ff823a","#f2f26f","#fff7bd","#95cfb7"],["#b9d7d9","#668284","#2a2829","#493736","#7b3b3b"],["#bbbb88","#ccc68d","#eedd99","#eec290","#eeaa88"],["#b3cc57","#ecf081","#ffbe40","#ef746f","#ab3e5b"],["#a3a948","#edb92e","#f85931","#ce1836","#009989"],["#300030","#480048","#601848","#c04848","#f07241"],["#67917a","#170409","#b8af03","#ccbf82","#e33258"],["#aab3ab","#c4cbb7","#ebefc9","#eee0b7","#e8caaf"],["#e8d5b7","#0e2430","#fc3a51","#f5b349","#e8d5b9"],["#ab526b","#bca297","#c5ceae","#f0e2a4","#f4ebc3"],["#607848","#789048","#c0d860","#f0f0d8","#604848"],["#b6d8c0","#c8d9bf","#dadabd","#ecdbbc","#fedcba"],["#a8e6ce","#dcedc2","#ffd3b5","#ffaaa6","#ff8c94"],["#3e4147","#fffedf","#dfba69","#5a2e2e","#2a2c31"],["#fc354c","#29221f","#13747d","#0abfbc","#fcf7c5"],["#cc0c39","#e6781e","#c8cf02","#f8fcc1","#1693a7"],["#1c2130","#028f76","#b3e099","#ffeaad","#d14334"],["#a7c5bd","#e5ddcb","#eb7b59","#cf4647","#524656"],["#dad6ca","#1bb0ce","#4f8699","#6a5e72","#563444"],["#5c323e","#a82743","#e15e32","#c0d23e","#e5f04c"],["#edebe6","#d6e1c7","#94c7b6","#403b33","#d3643b"],["#fdf1cc","#c6d6b8","#987f69","#e3ad40","#fcd036"],["#230f2b","#f21d41","#ebebbc","#bce3c5","#82b3ae"],["#b9d3b0","#81bda4","#b28774","#f88f79","#f6aa93"],["#3a111c","#574951","#83988e","#bcdea5","#e6f9bc"],["#5e3929","#cd8c52","#b7d1a3","#dee8be","#fcf7d3"],["#1c0113","#6b0103","#a30006","#c21a01","#f03c02"],["#000000","#9f111b","#b11623","#292c37","#cccccc"],["#382f32","#ffeaf2","#fcd9e5","#fbc5d8","#f1396d"],["#e3dfba","#c8d6bf","#93ccc6","#6cbdb5","#1a1f1e"],["#f6f6f6","#e8e8e8","#333333","#990100","#b90504"],["#1b325f","#9cc4e4","#e9f2f9","#3a89c9","#f26c4f"],["#a1dbb2","#fee5ad","#faca66","#f7a541","#f45d4c"],["#c1b398","#605951","#fbeec2","#61a6ab","#accec0"],["#5e9fa3","#dcd1b4","#fab87f","#f87e7b","#b05574"],["#951f2b","#f5f4d7","#e0dfb1","#a5a36c","#535233"],["#8dccad","#988864","#fea6a2","#f9d6ac","#ffe9af"],["#2d2d29","#215a6d","#3ca2a2","#92c7a3","#dfece6"],["#413d3d","#040004","#c8ff00","#fa023c","#4b000f"],["#eff3cd","#b2d5ba","#61ada0","#248f8d","#605063"],["#ffefd3","#fffee4","#d0ecea","#9fd6d2","#8b7a5e"],["#cfffdd","#b4dec1","#5c5863","#a85163","#ff1f4c"],["#9dc9ac","#fffec7","#f56218","#ff9d2e","#919167"],["#4e395d","#827085","#8ebe94","#ccfc8e","#dc5b3e"],["#a8a7a7","#cc527a","#e8175d","#474747","#363636"],["#f8edd1","#d88a8a","#474843","#9d9d93","#c5cfc6"],["#046d8b","#309292","#2fb8ac","#93a42a","#ecbe13"],["#f38a8a","#55443d","#a0cab5","#cde9ca","#f1edd0"],["#a70267","#f10c49","#fb6b41","#f6d86b","#339194"],["#ff003c","#ff8a00","#fabe28","#88c100","#00c176"],["#ffedbf","#f7803c","#f54828","#2e0d23","#f8e4c1"],["#4e4d4a","#353432","#94ba65","#2790b0","#2b4e72"],["#0ca5b0","#4e3f30","#fefeeb","#f8f4e4","#a5b3aa"],["#4d3b3b","#de6262","#ffb88c","#ffd0b3","#f5e0d3"],["#fffbb7","#a6f6af","#66b6ab","#5b7c8d","#4f2958"],["#edf6ee","#d1c089","#b3204d","#412e28","#151101"],["#9d7e79","#ccac95","#9a947c","#748b83","#5b756c"],["#fcfef5","#e9ffe1","#cdcfb7","#d6e6c3","#fafbe3"],["#9cddc8","#bfd8ad","#ddd9ab","#f7af63","#633d2e"],["#30261c","#403831","#36544f","#1f5f61","#0b8185"],["#aaff00","#ffaa00","#ff00aa","#aa00ff","#00aaff"],["#d1313d","#e5625c","#f9bf76","#8eb2c5","#615375"],["#ffe181","#eee9e5","#fad3b2","#ffba7f","#ff9c97"],["#73c8a9","#dee1b6","#e1b866","#bd5532","#373b44"],["#805841","#dcf7f3","#fffcdd","#ffd8d8","#f5a2a2"]];LEe={leftside_top:{side:"leftside",alignment:"top"},leftside_bottom:{side:"leftside",alignment:"bottom"},rightside_top:{side:"rightside",alignment:"top"},rightside_bottom:{side:"rightside",alignment:"bottom"},topside_left:{side:"topside",alignment:"left"},topside_right:{side:"topside",alignment:"right"},bottomside_left:{side:"bottomside",alignment:"left"},bottomside_right:{side:"bottomside",alignment:"right"}},AFn=Object.keys(LEe)});var xFn=(e,t,n)=>{let o=[{x:e.x,y:e.y}],i=(e.x+t.x)/2,r=(e.y+t.y)/2,s={x:t.x,y:t.y};switch(t.facingDirection){case"x+":s.x+=n;break;case"x-":s.x-=n;break;case"y+":s.y+=n;break;case"y-":s.y-=n;break}let a=e.facingDirection??"none",c=t.facingDirection??"none",l=(h)=>{let A=o[o.length-1];if(A.x!==h.x||A.y!==h.y)o.push(h)},d=Math.abs(e.y-t.y)<=Math.max(0.000001,n*0.1),u=Math.abs(e.x-t.x)<=Math.max(0.000001,n*0.1);if(a==="none"&&c==="none")l({x:i,y:e.y}),l({x:i,y:t.y});else if(a==="x+"&&c==="y+")if(e.x>t.x&&e.y<t.y)l({x:e.x+n,y:e.y}),l({x:e.x+n,y:t.y+n}),l({x:t.x,y:t.y+n});else if(!u&&!d&&e.x<t.x&&e.y>t.y)l({x:t.x,y:e.y});else if(u)l({x:e.x+n,y:e.y}),l({x:e.x+n,y:t.y+n}),l({x:t.x,y:t.y+n});else if(e.x<t.x)l({x:i,y:e.y}),l({x:i,y:s.y}),l({x:t.x,y:s.y});else if(e.y<=t.y+n)l({x:e.x+n,y:e.y}),l({x:e.x+n,y:e.y+n}),l({x:t.x,y:e.y+n}),l({x:t.x,y:t.y});else l({x:e.x+n,y:e.y}),l({x:e.x+n,y:(e.y+t.y)/2}),l({x:t.x,y:(e.y+t.y)/2});else if(a==="x+"&&c==="x+"&&!d){let h=Math.max(e.x+n,s.x);l({x:h,y:e.y}),l({x:h,y:t.y})}else if(a==="x+"&&c==="x+"&&d)l({x:e.x+n,y:e.y}),l({x:e.x+n,y:e.y+n}),l({x:t.x+n,y:e.y+n}),l({x:t.x+n,y:t.y});else if(a==="x+"&&c==="y-")if(u&&e.y<=t.y)l({x:e.x+n,y:e.y}),l({x:e.x+n,y:r}),l({x:t.x,y:r});else if(u&&e.y>t.y)l({x:e.x+n,y:e.y}),l({x:e.x+n,y:t.y-n}),l({x:t.x,y:t.y-n});else if(e.x<t.x&&e.y<t.y)l({x:t.x,y:e.y});else if(e.x>t.x&&e.y<t.y){let h=e.x+n;l({x:h,y:e.y}),l({x:h,y:r}),l({x:t.x,y:r})}else if(e.x>t.x&&e.y>t.y){let h=e.x+n;l({x:h,y:e.y}),l({x:h,y:s.y}),l({x:t.x,y:s.y})}else if(e.y===t.y)l({x:e.x+n,y:e.y}),l({x:e.x+n,y:e.y-n}),l({x:t.x,y:e.y-n});else l({x:i,y:e.y}),l({x:i,y:s.y}),l({x:t.x,y:s.y});else if(a==="x+"&&c==="x-"&&e.x+n>=t.x-n&&!d){let h=e.x+n;l({x:h,y:e.y}),l({x:h,y:r}),l({x:s.x,y:r}),l({x:s.x,y:s.y})}else if(a==="x+"&&c==="x-"&&d&&t.x>e.x);else if(a==="x+"&&c==="x-"&&d)l({x:e.x+n,y:e.y}),l({x:e.x+n,y:e.y+n}),l({x:t.x-n,y:e.y+n}),l({x:t.x-n,y:e.y});else{if(a==="x+")l({x:e.x+n,y:e.y});l({x:i,y:o[o.length-1].y}),l({x:i,y:s.y}),l({x:s.x,y:s.y})}return l({x:t.x,y:t.y}),o},Yz=(e,t,n={})=>{let o=e,i=t,r=!1;if(o.x>i.x||o.x===i.x&&o.y>i.y)r=!0,[o,i]=[i,o];let s=o.facingDirection==="x-",a=o.facingDirection==="y-",c=(f)=>{let y=s?o.x-(f.x-o.x):f.x,x=a?o.y-(f.y-o.y):f.y,C=f.facingDirection;if(s){if(C==="x+")C="x-";else if(C==="x-")C="x+"}if(a){if(C==="y+")C="y-";else if(C==="y-")C="y+"}return{x:y,y:x,facingDirection:C}},l=(f,y)=>{let x=f.x-y.x,C=f.y-y.y,I=y.x+C,b=y.y-x,P=f.facingDirection;switch(P){case"x+":P="y-";break;case"y-":P="x-";break;case"x-":P="y+";break;case"y+":P="x+";break}return{x:I,y:b,facingDirection:P}},d=(f,y)=>{let x=f.x-y.x,C=f.y-y.y;return{x:y.x-C,y:y.y+x}},u=s||a?c(o):o,h=s||a?c(i):i,A=u,m=h,p=!1;if(u.facingDirection==="y+")p=!0,A={...u,facingDirection:"x+"},m=l(h,u);let g=n?.overshoot??0.1*Math.max(Math.abs(A.x-m.x),Math.abs(A.y-m.y)),_=xFn(A,m,g);if(p)_=_.map((f)=>d(f,A));if(s||a)_=_.map(({x:f,y})=>({x:s?o.x-(f-o.x):f,y:a?o.y-(y-o.y):y}));return r?_.reverse():_};var mle=()=>{};function Z2(e,t){return Array.isArray(t)?[e.a*t[0]+e.c*t[1]+e.e,e.b*t[0]+e.d*t[1]+e.f]:{x:e.a*t.x+e.c*t.y+e.e,y:e.b*t.x+e.d*t.y+e.f}}function Xct(e){return typeof e>"u"}function Kct(e,t=0){return{a:1,c:0,e,b:0,d:1,f:t}}function eue(...e){e=Array.isArray(e[0])?e[0]:e;let t=(n,o)=>({a:n.a*o.a+n.c*o.b,c:n.a*o.c+n.c*o.d,e:n.a*o.e+n.c*o.f+n.e,b:n.b*o.a+n.d*o.b,d:n.b*o.c+n.d*o.d,f:n.b*o.e+n.d*o.f+n.f});switch(e.length){case 0:throw Error("no matrices provided");case 1:return e[0];case 2:return t(e[0],e[1]);default:{let[n,o,...i]=e,r=t(n,o);return eue(r,...i)}}}function bFn(e,t,n){let o=CFn(e),i=IFn(e),r={a:o,c:-i,e:0,b:i,d:o,f:0};return Xct(t)||Xct(n)?r:eue([Kct(t,n),r,Kct(-t,-n)])}function SFn(e,t){function n(){this.constructor=e}n.prototype=t.prototype,e.prototype=new n}function tue(e,t,n,o){var i=Error.call(this,e);return Object.setPrototypeOf&&Object.setPrototypeOf(i,tue.prototype),i.expected=t,i.found=n,i.location=o,i.name="SyntaxError",i}function HEe(e,t,n){return n=n||" ",e.length>t?e:(t-=e.length,n+=n.repeat(t),e+n.slice(0,t))}function QM(e){if(e.length===0)return{minX:0,maxX:0,minY:0,maxY:0};let t=1/0,n=-1/0,o=1/0,i=-1/0,r=(s)=>{t=Math.min(t,s.x),n=Math.max(n,s.x),o=Math.min(o,s.y),i=Math.max(i,s.y)};return e.forEach((s)=>{switch(s.type){case"path":s.points.forEach(r);break;case"text":r({x:s.x,y:s.y});break;case"circle":{let{x:a,y:c,radius:l}=s;r({x:a-l,y:c-l}),r({x:a+l,y:c+l});break}case"box":{let{x:a,y:c,width:l,height:d}=s,u=l/2,h=d/2;r({x:a-u,y:c-h}),r({x:a+u,y:c+h});break}}}),{minX:t,maxX:n,minY:o,maxY:i}}function jc(e){let t=e.size;if(!t){let n=QM(e.primitives);t={width:n.maxX-n.minX,height:n.maxY-n.minY}}return{...e,size:t}}function YYn(e){return typeof e=="object"}function mJ(e,t){return{width:Math.max(...t.map((n)=>Math.abs(n.x-e.x)))*2,height:Math.max(...t.map((n)=>Math.abs(n.y-e.y)))*2}}function Sjn(e){return typeof e=="object"}function _qn(e){return typeof e=="object"}function Kue(e,t){let{width:n,height:o}=e.size,i=1,r=1;t.width!==void 0&&t.height!==void 0?(i=t.width/n,r=t.height/o):t.width!==void 0?i=r=t.width/n:t.height!==void 0&&(i=r=t.height/o);let s=e.primitives.map((a)=>{switch(a.type){case"path":return{...a,points:a.points.map((c)=>({x:c.x*i,y:c.y*r}))};case"text":return{...a,x:a.x*i,y:a.y*r,fontSize:a.fontSize?a.fontSize*i:void 0};case"circle":return{...a,x:a.x*i,y:a.y*r,radius:a.radius*i};case"box":return{...a,x:a.x*i,y:a.y*r,width:a.width*i,height:a.height*r};default:return a}});return{...e,primitives:s,center:{x:e.center.x*i,y:e.center.y*r},ports:e.ports.map((a)=>({...a,x:a.x*i,y:a.y*r})),size:{width:n*i,height:o*r}}}function Lqn(e){return typeof e=="object"}function Uqn(e){return typeof e=="object"}var CFn,IFn,DIr,NIr,PFn=(e,t="right")=>{switch(t){case"down":switch(e){case"middle_top":return"middle_right";case"middle_bottom":return"middle_left";case"middle_left":return"middle_bottom";case"middle_right":return"middle_top"}break;case"up":switch(e){case"middle_top":return"middle_left";case"middle_bottom":return"middle_right";case"middle_left":return"middle_top";case"middle_right":return"middle_bottom"}break;case"left":switch(e){case"middle_top":return"middle_bottom";case"middle_bottom":return"middle_top";case"middle_left":return"middle_right";case"middle_right":return"middle_left"}break;case"right":return e}return e},Kz=(e,t)=>{let{primitives:n,center:o,ports:i,size:r}=e,s=eue({a:1,b:0,c:0,d:-1,e:0,f:2*o.y}),a=n.map((l)=>{switch(l={...l},l.type){case"path":return{...l,points:l.points.map((A)=>Z2(s,A))};case"text":let d=Z2(s,{x:l.x,y:l.y}),u={top_left:"bottom_left",top_right:"bottom_right",bottom_left:"top_left",bottom_right:"top_right",center:"center",middle_top:"middle_bottom",middle_bottom:"middle_top",middle_left:"middle_left",middle_right:"middle_right"};return{...l,x:d.x,y:d.y,anchor:u[l.anchor]};case"circle":case"box":let h=Z2(s,{x:l.x,y:l.y});return{...l,x:h.x,y:h.y}}}),c=i.map((l)=>({...l,...Z2(s,l)}));return{primitives:a,center:o,ports:c,size:r,...t}},L5=(e,t)=>{let{primitives:n,center:o,ports:i,size:r}=e,s=eue({a:-1,b:0,c:0,d:1,e:0,f:2*o.x}),a=n.map((l)=>{switch(l={...l},l.type){case"path":return{...l,points:l.points.map((A)=>Z2(s,A))};case"text":let d=Z2(s,{x:l.x,y:l.y}),u={top_left:"top_right",top_right:"top_left",bottom_left:"bottom_right",bottom_right:"bottom_left",center:"center",middle_top:"middle_top",middle_bottom:"middle_bottom",middle_left:"middle_right",middle_right:"middle_left"};return{...l,x:d.x,y:d.y,anchor:u[l.anchor]};case"circle":case"box":let h=Z2(s,{x:l.x,y:l.y});return{...l,x:h.x,y:h.y}}}),c=i.map((l)=>({...l,...Z2(s,l)}));return{primitives:a,center:o,ports:c,size:r,...t}},dJ=(e,t)=>{let{newOrientation:n,overrides:o}=t,i={up:Math.PI/2,right:0,down:-Math.PI/2,left:-Math.PI},r=bFn(n?i[n]:Math.PI/2,e.center.x,e.center.y),{primitives:s,center:a,size:c,ports:l}=e,d=s.map((A)=>{switch(A={...A},A.type){case"path":return{...A,points:A.points.map((_)=>Z2(r,_))};case"text":let m=Z2(r,{x:A.x,y:A.y});return A.anchor=PFn(A.anchor,n??"right"),{...A,x:m.x,y:m.y};case"circle":let p=Z2(r,{x:A.x,y:A.y});return{...A,x:p.x,y:p.y};case"box":let g=Z2(r,{x:A.x,y:A.y});return{...A,x:g.x,y:g.y,width:A.height,height:A.width}}}),u=l.map((A)=>({...A,...Z2(r,A)})),h=QM(d);return{primitives:d,center:a,ports:u,size:{width:h.maxX-h.minX,height:h.maxY-h.minY},...o}},yo=(e,t="down",n={})=>dJ(e,{newOrientation:t,overrides:n}),vFn=class{symbol;constructor(e){this.symbol=JSON.parse(JSON.stringify(e)),this.symbol.size=this.computeSize()}changeTextAnchor(e,t,n){return this.symbol={...this.symbol,primitives:this.symbol.primitives.map((o)=>o.type==="text"&&o.text===e?{...o,anchor:t,...n?{x:o.x+n.x,y:o.y+n.y}:{}}:o)},this}labelPort(e,t){return this.symbol={...this.symbol,ports:this.symbol.ports.map((n)=>n.labels.includes(e)?{...n,labels:t}:n)},this}rotateRightFacingSymbol(e){return this.symbol=dJ(this.symbol,{newOrientation:e}),this}computeSize(){let e=QM(this.symbol.primitives);return{width:e.maxX-e.minX,height:e.maxY-e.minY}}build(){return{...this.symbol,size:this.computeSize()}}},sn=(e)=>{let t=e.primitives??[...Object.values(e.paths??{}),...Object.values(e.texts??{}),...Object.values(e.circles??{}),...Object.values(e.rects??{})],n=e.ports??Object.entries(e.refblocks).flatMap(([i,r])=>[{...r,labels:[i]}]),o=e.center??{x:e.bounds.centerX,y:e.bounds.centerY};return n.length===2&&(o={x:(n[0].x+n[1].x)/2,y:(n[0].y+n[1].y)/2}),new vFn({...e,primitives:t,ports:n,center:o})},jz,EFn,RIr,ple,jct,MFn,BFn,wFn,QIr,Ale,qct,TFn,DFn,NFn,kIr,_le,Jct,RFn,QFn,kFn,LIr,gle,$ct,LFn,FFn,HFn,FIr,fle,Zct,OFn,zFn,GFn,HIr,yle,elt,YFn,VFn,_3e,UFn,but,WFn,XFn,qz,KFn,OIr,xle,tlt,jFn,qFn,JFn,$Fn,zIr,Cle,nlt,ZFn,eHn,tHn,nue,nHn,fr=(e,{kind:t,orientation:n,pin1Labels:o=["1"],pin2Labels:i=["2"]})=>{let r=nHn[t],s=sn({...e,texts:{}}).rotateRightFacingSymbol(n).labelPort("left1",o).labelPort("right1",i).build(),a=n==="right"||n==="left",c=a?[{type:"text",text:"{REF}",x:0,y:r.horizontalOffset,anchor:"middle_bottom"},{type:"text",text:"{VAL}",x:0,y:-r.horizontalOffset,anchor:"middle_top"}]:[{type:"text",text:"{REF}",x:r.verticalX,y:r.verticalRefY,anchor:"middle_left"},{type:"text",text:"{VAL}",x:r.verticalX,y:r.verticalValY,anchor:"middle_left"}],[l,d]=s.ports,u=Math.hypot(d.x-l.x,d.y-l.y);return{...s,primitives:[...s.primitives,...c],size:a?{width:u,height:r.horizontalHeight}:{width:r.verticalWidth,height:u}}},oHn,iHn,rHn,sHn,aHn,GIr,Ile,olt,cHn,lHn,dHn,YIr,ble,ilt,uHn,hHn,oue,mHn,pHn,AHn,_Hn,iue,gHn,VIr,Sle,rlt,fHn,yHn,xHn,UIr,Ple,slt,CHn,Sut,IHn,WIr,vle,alt,bHn,SHn,XIr,KIr,jIr,qIr,JIr,g3e,f3e,y3e,PHn,uJ,vHn,clt,llt,EHn,MHn,BHn,wHn,dlt,Ele,ult,THn,Put,DHn,hlt,mlt,NHn,RHn,QHn,kHn,plt,Alt,LHn,FHn,HHn,OHn,_lt,glt,zHn,GHn,YHn,VHn,rue,UHn,$Ir,flt,ylt,WHn,XHn,KHn,jHn,ZIr,xlt,Clt,qHn,JHn,$Hn,ZHn,ebr,Ilt,blt,eOn,tOn,nOn,sue,oOn,iOn,rOn,sOn,aue,aOn,tbr,Mle,Slt,cOn,lOn,dOn,nbr,Ble,Plt,uOn,hOn,mOn,obr,wle,vlt,pOn,AOn,_On,ibr,Tle,Elt,gOn,fOn,yOn,rbr,Mlt,Blt,xOn,COn,IOn,cue,bOn,SOn,POn,vOn,x3e,EOn,sbr,wlt,Tlt,MOn,BOn,wOn,abr,Dlt,Nlt,TOn,vut,DOn,NOn,cbr,Rlt,Qlt,ROn,QOn,lue,kOn,lbr,Dle,klt,LOn,FOn,HOn,OOn,zOn,due,GOn,YOn,VOn,UOn,WOn,XOn,uue,KOn,jOn,qOn,JOn,$On,dbr,Nle,Llt,ZOn,ezn,tzn,hue,nzn,ozn,izn,rzn,Jz,szn,ubr,Rle,Flt,azn,czn,lzn,dzn,hbr,Qle,Hlt,uzn,hzn,mzn,pzn,mbr,kle,Olt,Azn,_zn,gzn,pbr,Lle,zlt,fzn,yzn,mue,xzn,Abr,Fle,Hle,Czn,Izn,bzn,Szn,Pzn,_br,Ole,zle,vzn,Ezn,pue,Mzn,gbr,Gle,Glt,Bzn,wzn,Tzn,Dzn,Nzn,fbr,Yle,Ylt,Rzn,Qzn,rJ=0.6,OEe=0.3,kzn,Lzn,sJ=0.6,zEe=0.3,Fzn,Hzn,aJ=0.6,GEe=0.3,Ozn,zzn,cJ=0.6,YEe=0.3,Gzn,Yzn,$z,Vzn,Uzn,Wzn,Xzn,Kzn,jzn,qzn,Vlt,Vle,Ult,Jzn,hJ,h3e,Wlt,$zn,Zzn,m3e,eGn,Zz,tGn,ybr,Ule,Xlt,nGn,oGn,iGn,xbr,Wle,Klt,rGn,sGn,aGn,Cbr,Xle,jlt,cGn,lGn,dGn,Ibr,Kle,qlt,uGn,hGn,mGn,bbr,jle,Jlt,pGn,AGn,_Gn,Sbr,qle,$lt,gGn,fGn,eG,yGn,xGn,CGn,IGn,bGn,SGn,Aue,PGn,Zlt,vGn,EGn,MGn,edt,BGn,wGn,TGn,tdt,DGn,NGn,RGn,ndt,QGn,kGn,LGn,_ue,FGn,HGn,gue,OGn,zGn,GGn,YGn,VGn,fue,UGn,WGn,XGn,KGn,jGn,yue,C3e,I3e,b3e,qGn,S3e,P3e,v3e,JGn,E3e,M3e,B3e,$Gn,ZGn,xue,w3e,T3e,D3e,eYn,N3e,R3e,Q3e,tYn,k3e,L3e,F3e,nYn,oYn,Cue,H3e,O3e,z3e,iYn,G3e,Y3e,V3e,rYn,U3e,W3e,X3e,sYn,aYn,Iue,K3e,j3e,q3e,cYn,J3e,$3e,Z3e,lYn,e4e,t4e,n4e,dYn,Jle,uYn,o4e=(e)=>{let t=uYn[e],n=e==="up"||e==="down";return sn({...Jle,texts:{...Jle.texts,top1:{...Jle.texts.top1,...t.reference},bottom1:{...Jle.texts.bottom1,...t.value}}}).labelPort("left1",["1","anode"]).labelPort("bottom1",["2","junction","common"]).labelPort("right1",["3","cathode"]).rotateRightFacingSymbol(e).changeTextAnchor("{REF}",n?"middle_left":"middle_bottom").changeTextAnchor("{VAL}",n?"middle_left":"middle_top").build()},hYn,Eut,mYn,pYn,Mut,AYn,Pbr,$le,odt,_Yn,But,i4e,r4e,s4e,gYn,wut,fYn,tG,yYn,vbr,Zle,idt,xYn,CYn,IYn,Ebr,ede,rdt,bYn,SYn,PYn,Mbr,tde,sdt,vYn,EYn,MYn,Bbr,nde,adt,BYn,wYn,TYn,wbr,ode,cdt,DYn,NYn,RYn,Tbr,ide,ldt,QYn,kYn,LYn,FYn,HYn,rde,ddt,OYn,a4e,zYn,GYn,udt,VYn,UYn,WYn,XYn,sde,hdt,Tut,KYn,nG,jYn,qYn,JYn,$Yn,ZYn,eVn,c4e,Dbr,Nbr,Rbr,Qbr,kbr,tVn,nVn,oVn,bue,iVn,rVn,l4e,d4e,u4e,sVn,aVn,Dut,h4e,m4e,Nut,cVn,lVn,Rut,Qut,kut,p4e,A4e,dVn,Sue,uVn,hVn,mVn,pVn,Lut,Pue,_4e,g4e,f4e,AVn,y4e,x4e,C4e,_Vn,I4e,b4e,S4e,gVn,fVn,yVn,mdt,ade,pdt,xVn,P4e,v4e,E4e,M4e,Fut,B4e,w4e,T4e,CVn,IVn,vue,bVn,SVn,PVn,vVn,Eue,EVn,MVn,BVn,wVn,TVn,DVn,Adt,cde,_dt,NVn,Hut,Out,zut,D4e,N4e,RVn,QVn,kVn,gdt,fdt,Vz,ydt,Gut,R4e,Yut,Q4e,LVn,FVn,HVn,xdt,lde,Cdt,OVn,Vut,k4e,lJ,Zde,zVn,il=({horizontalSymbol:e,verticalSymbol:t,gateSide:n,drainSide:o})=>{let i=n==="left"||n==="right",r=o==="left"||o==="right";if(i===r)throw Error(`Invalid MOSFET orientation: gate ${n}, drain ${o}. Gate and drain must be perpendicular.`);let s=i?e:t;return(n==="right"||r&&o==="left")&&(s=L5(s)),(n==="bottom"||!r&&o==="bottom")&&(s=Kz(s)),s},GVn,YVn,Idt,bdt,ZR,VVn,Uut,UVn,Fv,Wut,Xut,L4e,F4e,kM,WVn,XVn,KVn,jVn,qVn,JVn,$Vn,ZVn,eUn,tUn,Sdt,Pdt,Uz,nUn,vdt,Hv,Kut,jut,H4e,O4e,LM,oUn,iUn,rUn,sUn,aUn,cUn,lUn,dUn,uUn,hUn,Edt,dde,VEe,mUn,qut,Jut,$ut,z4e,G4e,pUn,AUn,_Un,Mdt,gUn,Mue,fUn,yUn,xUn,oG,CUn,Lbr,ude,UEe,IUn,bUn,SUn,Fbr,hde,WEe,PUn,vUn,EUn,Hbr,mde,XEe,MUn,BUn,wUn,Obr,pde,KEe,TUn,DUn,NUn,zbr,Ade,jEe,RUn,QUn,kUn,Gbr,_de,qEe,LUn,FUn,HUn,Bue,OUn,zUn,GUn,YUn,wue,VUn,UUn,WUn,XUn,KUn,Bdt,wdt,Wz,jUn,Tdt,Ov,Zut,eht,Y4e,V4e,FM,qUn,JUn,$Un,ZUn,eWn,tWn,nWn,oWn,iWn,rWn,Ddt,Ndt,Xz,sWn,Rdt,zv,tht,nht,U4e,W4e,HM,aWn,cWn,lWn,dWn,uWn,hWn,mWn,pWn,AWn,oht,iht,_Wn,rht,gWn,X4e,fWn,sht,yWn,xWn,CWn,IWn,Qdt,gde,JEe,bWn,aht,cht,lht,K4e,j4e,SWn,eQ,PWn,Ybr,fde,$Ee,vWn,EWn,Vbr,Ubr,Wbr,Xbr,Kbr,MWn,BWn,jbr,yde,ZEe,wWn,TWn,DWn,qbr,xde,e3e,NWn,RWn,QWn,Jbr,Cde,t3e,kWn,LWn,FWn,$br,Ide,n3e,HWn,OWn,zWn,GWn,kdt,bde,Ldt,dht,YWn,VWn,UWn,WWn,Fdt,Sde,Hdt,Tue,q4e,J4e,$4e,XWn,Z4e,eMe,tMe,KWn,nMe,oMe,iMe,jWn,Due,qWn,Zbr,Pde,o3e,JWn,$Wn,ZWn,e5r,vde,i3e,eXn,tXn,nXn,oXn,t5r,Ede,r3e,iXn,rXn,sXn,aXn,n5r,Mde,Odt,cXn,uht,hht,rMe,p3e,sMe,A3e,lXn,dXn,uXn,zdt,Gdt,Ydt,hXn,mht,mXn,pht,pXn,Vdt,AXn,s3e,_Xn,pJ,aMe,cMe,lMe,gXn,fXn,Udt,yXn,a3e,xXn,CXn,dMe,uMe,hMe,IXn,mMe,pMe,AMe,bXn,_Me,gMe,fMe,SXn,Nue,PXn,o5r,Wdt,vXn,EXn,MXn,BXn,i5r,Xdt,wXn,TXn,DXn,NXn,r5r,Kdt,RXn,QXn,kXn,LXn,s5r,jdt,FXn,HXn,OXn,zXn,qdt,Bde,wde,GXn,Aht,yMe,YXn,VXn,UXn,Rue,WXn,a5r,Tde,Jdt,XXn,KXn,jXn,c5r,Dde,$dt,qXn,JXn,$Xn,l5r,Nde,Zdt,ZXn,eKn,Que,tKn,nKn,oKn,iKn,rKn,d5r,Rde,eut,sKn,aKn,kue,cKn,lKn,dKn,uKn,_ht,hKn,tut,Qde,c3e,mKn,Lue,xMe,CMe,IMe,pKn,AKn,u5r,kde,l3e,_Kn,ght,bMe,SMe,PMe,gKn,vMe,EMe,MMe,fKn,yKn,BMe,xKn,fht,CKn,IKn,bKn,Fue,wMe,TMe,DMe,SKn,NMe,RMe,QMe,PKn,kMe,LMe,FMe,vKn,yht,h5r,m5r,p5r,A5r,_5r,xht,Cht,EKn,Iht,MKn,bht,BKn,HMe,Sht,OMe,wKn,Pht,zMe,TKn,vht,DKn,GMe,Eht,YMe,NKn,Mht,VMe,RKn,Bht,QKn,UMe,wht,WMe,kKn,Tht,XMe,LKn,Dht,FKn,KMe,Nht,jMe,HKn,Rht,qMe,OKn,Qht,zKn,JMe,kht,$Me,GKn,Lht,ZMe,YKn,Fht,VKn,e6e,Hht,t6e,UKn,Oht,n6e,WKn,XKn,Hue,o6e,i6e,r6e,KKn,s6e,a6e,c6e,jKn,l6e,d6e,u6e,qKn,JKn,Oue,h6e,m6e,p6e,$Kn,A6e,_6e,g6e,ZKn,f6e,y6e,x6e,ejn,iG,zht,Lde,tjn,Ght,Fde,njn,Yht,Hde,ojn,Vht,Ode,ijn,Uht,zde,rjn,Wht,Gde,sjn,zue,Gue,C6e,I6e,b6e,ajn,S6e,P6e,v6e,cjn,E6e,M6e,B6e,ljn,Yue,Vue,w6e,T6e,D6e,djn,N6e,R6e,Q6e,ujn,k6e,L6e,F6e,hjn,Uue,mjn,pjn,Ajn,_jn,Xht,g5r,f5r,y5r,x5r,C5r,Kht,gjn,fjn,yjn,xjn,Yde,nut,Cjn,H6e,Ijn,bjn,out,Pjn,Wue,jht,iut,vjn,Ejn,qht,rut,Mjn,Bjn,O6e,z6e,G6e,Y6e,Jht,V6e,U6e,W6e,wjn,X6e,K6e,j6e,Tjn,q6e,Djn,$ht,Njn,Rjn,Zht,I5r,b5r,S5r,P5r,v5r,e0t,t0t,n0t,Qjn,kjn,Ljn,Fjn,Hjn,sut,Vde,aut,Ojn,o0t,J6e,zjn,Gjn,Yjn,Vjn,Ujn,cut,Ude,d3e,Wjn,i0t,r0t,s0t,Xjn,a0t,Kjn,jjn,qjn,Jjn,$jn,u3e,Wde,lut,Zjn,c0t,eqn,tqn,nqn,dut,Xde,uut,oqn,l0t,$6e,iqn,rqn,sqn,aqn,cqn,hut,Kde,mut,d0t,u0t,h0t,Z6e,eBe,lqn,dqn,uqn,hqn,jde,put,mqn,tBe,pqn,Aqn,Aut,gqn,Xue,fqn,yqn,xqn,Cqn,Iqn,bqn,Sqn,Pqn,nBe,E5r,M5r,B5r,w5r,T5r,vqn,Eqn,D5r,_ut,Mqn,gut,Bqn,wqn,Tqn,Dqn,Nqn,qde,fut,Rqn,oBe,Qqn,kqn,yut,Fqn,Hqn,Oqn,zqn,Jde,xut,Gqn,iBe,Yqn,Vqn,Cut,Wqn,m0t,Xqn,jue,Kqn,jqn,qqn,Jqn,$qn,$de,Iut,Zqn,eJn,que,tJn,nJn,oJn,iJn,ra,N5r;var wp=Ks(()=>{({cos:CFn,sin:IFn,PI:DIr}=Math);({tan:NIr}=Math);SFn(tue,Error);tue.prototype.format=function(e){var t="Error: "+this.message;if(this.location){var n=null,o;for(o=0;o<e.length;o++)if(e[o].source===this.location.source){n=e[o].text.split(/\r\n|\n|\r/g);break}var i=this.location.start,r=this.location.source&&typeof this.location.source.offset=="function"?this.location.source.offset(i):i,s=this.location.source+":"+r.line+":"+r.column;if(n){var a=this.location.end,c=HEe("",r.line.toString().length," "),l=n[i.line-1],d=i.line===a.line?a.column:l.length+1,u=d-i.column||1;t+=`
--> `+s+`
`+c+` |
`+r.line+" | "+l+`
`+c+" | "+HEe("",i.column-1," ")+HEe("",u,"^")}else t+=`
at `+s}return t};tue.buildMessage=function(e,t){var n={literal:function(l){return'"'+i(l.text)+'"'},class:function(l){var d=l.parts.map(function(u){return Array.isArray(u)?r(u[0])+"-"+r(u[1]):r(u)});return"["+(l.inverted?"^":"")+d.join("")+"]"},any:function(){return"any character"},end:function(){return"end of input"},other:function(l){return l.description}};function o(l){return l.charCodeAt(0).toString(16).toUpperCase()}function i(l){return l.replace(/\\/g,"\\\\").replace(/"/g,"\\\"").replace(/\0/g,"\\0").replace(/\t/g,"\\t").replace(/\n/g,"\\n").replace(/\r/g,"\\r").replace(/[\x00-\x0F]/g,function(d){return"\\x0"+o(d)}).replace(/[\x10-\x1F\x7F-\x9F]/g,function(d){return"\\x"+o(d)})}function r(l){return l.replace(/\\/g,"\\\\").replace(/\]/g,"\\]").replace(/\^/g,"\\^").replace(/-/g,"\\-").replace(/\0/g,"\\0").replace(/\t/g,"\\t").replace(/\n/g,"\\n").replace(/\r/g,"\\r").replace(/[\x00-\x0F]/g,function(d){return"\\x0"+o(d)}).replace(/[\x10-\x1F\x7F-\x9F]/g,function(d){return"\\x"+o(d)})}function s(l){return n[l.type](l)}function a(l){var d=l.map(s),u,h;if(d.sort(),d.length>0){for(u=1,h=1;u<d.length;u++)d[u-1]!==d[u]&&(d[h]=d[u],h++);d.length=h}switch(d.length){case 1:return d[0];case 2:return d[0]+" or "+d[1];default:return d.slice(0,-1).join(", ")+", or "+d[d.length-1]}}function c(l){return l?'"'+i(l)+'"':"end of input"}return"Expected "+a(e)+" but "+c(t)+" found."};jz={paths:{path11:{type:"path",points:[{x:-0.54,y:0.03},{x:-0.3,y:0.04}],color:"primary",fill:!1},path12:{type:"path",points:[{x:0.29,y:0.04},{x:0.54,y:0.04}],color:"primary",fill:!1},"path11-5-5":{type:"path",points:[{x:0.1,y:0.13},{x:0,y:-0.06},{x:-0.11,y:0.13}],color:"primary",fill:!1},path17:{type:"path",points:[{x:0,y:-0.13},{x:0.07,y:-0.11}],color:"primary",fill:!1},path18:{type:"path",points:[{x:0.07,y:-0.11},{x:0.14,y:-0.13}],color:"primary",fill:!1},path19:{type:"path",points:[{x:-0.15,y:-0.13},{x:-0.07,y:-0.11}],color:"primary",fill:!1},path20:{type:"path",points:[{x:-0.07,y:-0.11},{x:0,y:-0.13}],color:"primary",fill:!1}},texts:{top1:{type:"text",text:"{REF}",x:-0.17,y:0.4},bottom1:{type:"text",text:"{VAL}",x:-0.01,y:-0.4}},refblocks:{left1:{x:-0.54,y:0.03},right1:{x:0.54,y:0.04}},bounds:{minX:-0.57,maxX:0.57,minY:-0.4,maxY:0.4,width:1.14,height:0.79,centerX:0,centerY:0},circles:{path1:{type:"circle",x:0,y:0.04,radius:0.29,color:"primary",fill:!1}}},{paths:EFn,texts:RIr,bounds:ple,refblocks:jct,circles:MFn}=jz,BFn=sn({primitives:[...Object.values(EFn),...Object.values(MFn),{type:"text",text:"{REF}",x:-0.15,y:0.3894553499999995},{type:"text",text:"{VAL}",x:0.15,y:0.3894553499999995}],ports:[{...jct.left1,labels:["1"]},{...jct.right1,labels:["2"]}],size:{width:ple.width,height:ple.height},center:{x:ple.centerX,y:ple.centerY}}).rotateRightFacingSymbol("down").labelPort("left1",["1"]).labelPort("right1",["2"]).changeTextAnchor("{REF}","middle_left").changeTextAnchor("{VAL}","middle_left").build(),{paths:wFn,texts:QIr,bounds:Ale,refblocks:qct,circles:TFn}=jz,DFn=sn({primitives:[...Object.values(wFn),...Object.values(TFn),{type:"text",text:"{REF}",x:-0,y:0.4094553499999995},{type:"text",text:"{VAL}",x:0,y:-0.4094553499999995}],ports:[{...qct.left1,labels:["1"]},{...qct.right1,labels:["2"]}],size:{width:Ale.width,height:Ale.height},center:{x:Ale.centerX,y:Ale.centerY}}).changeTextAnchor("{VAL}","middle_top").rotateRightFacingSymbol("right").labelPort("left1",["1"]).labelPort("right1",["2"]).changeTextAnchor("{REF}","middle_bottom").build(),{paths:NFn,texts:kIr,bounds:_le,refblocks:Jct,circles:RFn}=jz,QFn=sn({primitives:[...Object.values(NFn),...Object.values(RFn),{type:"text",text:"{REF}",x:-0,y:-0.3094553499999995},{type:"text",text:"{VAL}",x:0,y:0.4094553499999995}],ports:[{...Jct.left1,labels:["1"]},{...Jct.right1,labels:["2"]}],size:{width:_le.width,height:_le.height},center:{x:_le.centerX,y:_le.centerY}}).changeTextAnchor("{VAL}","middle_bottom").rotateRightFacingSymbol("left").labelPort("left1",["1"]).labelPort("right1",["2"]).changeTextAnchor("{REF}","middle_bottom").build(),{paths:kFn,texts:LIr,bounds:gle,refblocks:$ct,circles:LFn}=jz,FFn=sn({primitives:[...Object.values(kFn),...Object.values(LFn),{type:"text",text:"{REF}",x:-0,y:0.4094553499999995},{type:"text",text:"{VAL}",x:0,y:-0.4094553499999995}],ports:[{...$ct.left1,labels:["1"]},{...$ct.right1,labels:["2"]}],size:{width:gle.width,height:gle.height},center:{x:gle.centerX,y:gle.centerY}}).changeTextAnchor("{VAL}","middle_top").rotateRightFacingSymbol("right").labelPort("left1",["1"]).labelPort("right1",["2"]).changeTextAnchor("{REF}","middle_bottom").build(),{paths:HFn,texts:FIr,bounds:fle,refblocks:Zct,circles:OFn}=jz,zFn=sn({primitives:[...Object.values(HFn),...Object.values(OFn),{type:"text",text:"{REF}",x:0.15,y:-0.2894553499999995},{type:"text",text:"{VAL}",x:-0.15,y:-0.2894553499999995}],ports:[{...Zct.left1,labels:["1"]},{...Zct.right1,labels:["2"]}],size:{width:fle.width,height:fle.height},center:{x:fle.centerX,y:fle.centerY}}).rotateRightFacingSymbol("up").labelPort("left1",["1"]).labelPort("right1",["2"]).changeTextAnchor("{REF}","middle_left").changeTextAnchor("{VAL}","middle_left").build(),{paths:GFn,texts:HIr,bounds:yle,refblocks:elt,circles:YFn}=jz,VFn=sn({primitives:[...Object.values(GFn),...Object.values(YFn),{type:"text",text:"{REF}",x:0.15,y:-0.2894553499999995},{type:"text",text:"{VAL}",x:-0.15,y:-0.2894553499999995}],ports:[{...elt.left1,labels:["1"]},{...elt.right1,labels:["2"]}],size:{width:yle.width,height:yle.height},center:{x:yle.centerX,y:yle.centerY}}).rotateRightFacingSymbol("up").labelPort("left1",["1"]).labelPort("right1",["2"]).changeTextAnchor("{REF}","middle_left").changeTextAnchor("{VAL}","middle_left").build(),_3e={paths:{"input-a-lead":{type:"path",points:[{x:-0.6,y:0.16000000000000014},{x:-0.25,y:0.16000000000000014}],color:"primary",fill:!1},"input-b-lead":{type:"path",points:[{x:-0.6,y:-0.1399999999999999},{x:-0.25,y:-0.1399999999999999}],color:"primary",fill:!1},body:{type:"path",points:[{x:-0.25,y:0.3600000000000001},{x:0,y:0.3600000000000001},{x:0,y:0.3600000000000001},{x:0.029662962962962967,y:0.359535925925926},{x:0.05863703703703704,y:0.3581540740740742},{x:0.08690000000000002,y:0.35587000000000013},{x:0.11442962962962966,y:0.3526992592592594},{x:0.14120370370370372,y:0.3486574074074076},{x:0.16720000000000004,y:0.34376000000000023},{x:0.19239629629629632,y:0.3380225925925927},{x:0.21677037037037045,y:0.331460740740741},{x:0.2403,y:0.3240900000000001},{x:0.26296296296296295,y:0.31592592592592605},{x:0.28473703703703696,y:0.30698407407407413},{x:0.30560000000000004,y:0.2972800000000002},{x:0.3255296296296295,y:0.2868292592592593},{x:0.34450370370370376,y:0.2756474074074076},{x:0.36249999999999993,y:0.2637500000000001},{x:0.3794962962962963,y:0.25115259259259276},{x:0.39547037037037036,y:0.2378707407407409},{x:0.41040000000000004,y:0.2239200000000002},{x:0.42426296296296295,y:0.20931592592592613},{x:0.437037037037037,y:0.19407407407407426},{x:0.4487,y:0.1782100000000002},{x:0.4592296296296296,y:0.16173925925925947},{x:0.46860370370370374,y:0.14467740740740764},{x:0.4768,y:0.12704000000000024},{x:0.4837962962962963,y:0.10884259259259285},{x:0.4895703703703703,y:0.09010074074074101},{x:0.4941,y:0.07083000000000027},{x:0.49736296296296295,y:0.05104592592592622},{x:0.49933703703703697,y:0.03076407407407436},{x:0.5,y:0.0100000000000003},{x:0.5,y:0.010000000000000231},{x:0.5,y:0.010000000000000231},{x:0.499337037037037,y:-0.010764074074073858},{x:0.49736296296296295,y:-0.031045925925925727},{x:0.49410000000000004,y:-0.05082999999999982},{x:0.48957037037037043,y:-0.07010074074074057},{x:0.48379629629629634,y:-0.08884259259259243},{x:0.47680000000000006,y:-0.10703999999999986},{x:0.46860370370370374,y:-0.12467740740740728},{x:0.4592296296296297,y:-0.14173925925925915},{x:0.4486999999999999,y:-0.15820999999999985},{x:0.4370370370370371,y:-0.17407407407407394},{x:0.4242629629629629,y:-0.18931592592592578},{x:0.4104000000000001,y:-0.20391999999999988},{x:0.3954703703703703,y:-0.21787074074074056},{x:0.37949629629629644,y:-0.2311525925925925},{x:0.36249999999999993,y:-0.24374999999999986},{x:0.3445037037037037,y:-0.25564740740740727},{x:0.3255296296296296,y:-0.26682925925925916},{x:0.30560000000000004,y:-0.2772799999999999},{x:0.28473703703703707,y:-0.28698407407407395},{x:0.262962962962963,y:-0.29592592592592576},{x:0.24030000000000004,y:-0.30408999999999986},{x:0.21677037037037042,y:-0.3114607407407406},{x:0.19239629629629634,y:-0.31802259259259247},{x:0.16720000000000007,y:-0.3237599999999998},{x:0.14120370370370378,y:-0.32865740740740723},{x:0.11442962962962971,y:-0.33269925925925914},{x:0.08690000000000009,y:-0.33586999999999984},{x:0.058637037037037126,y:-0.33815407407407394},{x:0.029662962962963058,y:-0.33953592592592574},{x:0.00000000000000009992007221626409,y:-0.33999999999999986},{x:0,y:-0.33999999999999986},{x:-0.25,y:-0.33999999999999986},{x:-0.25,y:0.3600000000000001}],color:"primary",fill:!1},"output-lead":{type:"path",points:[{x:0.5,y:0.010000000000000231},{x:0.6000000000000001,y:0.010000000000000231}],color:"primary",fill:!1}},texts:{top1:{type:"text",text:"{REF}",x:0,y:0.4700000000000002},bottom1:{type:"text",text:"{VAL}",x:0,y:-0.47}},refblocks:{left1:{x:-0.6,y:-0.1399999999999999},left2:{x:-0.6,y:0.16000000000000014},right1:{x:0.6000000000000001,y:0.010000000000000231}},bounds:{minX:-0.6,maxX:0.6000000000000001,minY:-0.47,maxY:0.4700000000000002,width:1.2000000000000002,height:0.9400000000000002,centerX:0.00000000000000005551115123125783,centerY:0.00000000000000011102230246251565},circles:{}},UFn=sn(_3e).labelPort("left1",["2","in2","input2","b"]).labelPort("left2",["1","in1","input1","a"]).labelPort("right1",["3","out","output","y"]).changeTextAnchor("{REF}","middle_bottom").changeTextAnchor("{VAL}","middle_top").rotateRightFacingSymbol("down").build(),but=sn(_3e).labelPort("left1",["2","in2","input2","b"]).labelPort("left2",["1","in1","input1","a"]).labelPort("right1",["3","out","output","y"]).changeTextAnchor("{REF}","middle_bottom").changeTextAnchor("{VAL}","middle_top").rotateRightFacingSymbol("right").build(),WFn=L5(but),XFn=sn(_3e).labelPort("left1",["2","in2","input2","b"]).labelPort("left2",["1","in1","input1","a"]).labelPort("right1",["3","out","output","y"]).changeTextAnchor("{REF}","middle_bottom").changeTextAnchor("{VAL}","middle_top").rotateRightFacingSymbol("up").build(),qz={paths:{path40:{type:"path",points:[{x:0.14,y:0.04},{x:-0.12,y:-0.09}],color:"primary",fill:!1},path41:{type:"path",points:[{x:-0.12,y:0.18},{x:0.14,y:0.04}],color:"primary",fill:!1},path42:{type:"path",points:[{x:-0.12,y:-0.09},{x:-0.12,y:0.18}],color:"primary",fill:!1},path43:{type:"path",points:[{x:0.14,y:0.18},{x:0.14,y:-0.09}],color:"primary",fill:!1},path44:{type:"path",points:[{x:-0.12,y:0.04},{x:-0.52,y:0.04}],color:"primary",fill:!1},"path44-0":{type:"path",points:[{x:0.52,y:0.04},{x:0.15,y:0.04}],color:"primary",fill:!1},"path43-8":{type:"path",points:[{x:0.14,y:0.18},{x:0.08,y:0.2}],color:"primary",fill:!1},"path43-8-3":{type:"path",points:[{x:0.21,y:-0.11},{x:0.15,y:-0.09}],color:"primary",fill:!1}},texts:{top1:{type:"text",text:"{REF}",x:-0.01,y:0.27},bottom1:{type:"text",text:"{VAL}",x:0,y:-0.27}},refblocks:{left1:{x:-0.52,y:0.04},right1:{x:0.52,y:0.04}},bounds:{minX:-0.55,maxX:0.55,minY:-0.27,maxY:0.27,width:1.09,height:0.55,centerX:0,centerY:0},circles:{}},{paths:KFn,texts:OIr,bounds:xle,refblocks:tlt,circles:jFn}=qz,qFn=sn({primitives:[...Object.values(KFn),...Object.values(jFn),{type:"text",text:"{REF}",x:-0.15,y:0.3294553499999995},{type:"text",text:"{VAL}",x:0.15,y:0.3294553499999995}],ports:[{...tlt.left1,labels:["1"]},{...tlt.right1,labels:["2"]}],size:{width:xle.width,height:xle.height},center:{x:xle.centerX,y:xle.centerY}}).rotateRightFacingSymbol("down").labelPort("left1",["1"]).labelPort("right1",["2"]).changeTextAnchor("{REF}","middle_left").changeTextAnchor("{VAL}","middle_left").build(),JFn=sn(qz).changeTextAnchor("{VAL}","middle_top").labelPort("left1",["1","neg"]).labelPort("right1",["2","pos"]).changeTextAnchor("{REF}","middle_bottom").build(),{paths:$Fn,texts:zIr,bounds:Cle,refblocks:nlt,circles:ZFn}=qz,eHn=sn({primitives:[...Object.values($Fn),...Object.values(ZFn),{type:"text",text:"{REF}",x:-0,y:-0.2294553499999995},{type:"text",text:"{VAL}",x:0,y:0.3294553499999995}],ports:[{...nlt.left1,labels:["1"]},{...nlt.right1,labels:["2"]}],size:{width:Cle.width,height:Cle.height},center:{x:Cle.centerX,y:Cle.centerY}}).changeTextAnchor("{VAL}","middle_bottom").rotateRightFacingSymbol("left").labelPort("left1",["1"]).labelPort("right1",["2"]).changeTextAnchor("{REF}","middle_bottom").build(),tHn=sn(qz).changeTextAnchor("{VAL}","middle_top").labelPort("left1",["1","neg"]).labelPort("right1",["2","pos"]).changeTextAnchor("{REF}","middle_bottom").build(),nue={paths:{"anode-lead":{type:"path",points:[{x:-0.25,y:0},{x:-0.11999999999999988,y:0}],color:"primary",fill:!1},body:{type:"path",points:[{x:-0.11999999999999988,y:0.11999999999999988},{x:0.1200000000000001,y:0},{x:-0.11999999999999988,y:-0.1200000000000001},{x:-0.11999999999999988,y:0.11999999999999988}],color:"primary",fill:!1},"cathode-bar":{type:"path",points:[{x:0.07000000000000006,y:0.1399999999999999},{x:0.1200000000000001,y:0.11999999999999988},{x:0.1200000000000001,y:-0.1200000000000001},{x:0.16999999999999993,y:-0.1399999999999999}],color:"primary",fill:!1},"cathode-lead":{type:"path",points:[{x:0.1200000000000001,y:0},{x:0.25,y:0}],color:"primary",fill:!1}},texts:{top1:{type:"text",text:"{REF}",x:0,y:0.25},bottom1:{type:"text",text:"{VAL}",x:0,y:-0.25}},refblocks:{left1:{x:-0.25,y:0},right1:{x:0.25,y:0}},bounds:{minX:-0.25,maxX:0.25,minY:-0.25,maxY:0.25,width:0.5,height:0.5,centerX:0,centerY:0},circles:{}},nHn={boxresistor:{horizontalOffset:0.16,horizontalHeight:0.65,verticalX:0.16,verticalRefY:0.16,verticalValY:-0.16,verticalWidth:0.9},capacitor:{horizontalOffset:0.24,horizontalHeight:0.65,verticalX:0.2,verticalRefY:0.095,verticalValY:-0.095,verticalWidth:0.9},led:{horizontalOffset:0.38,horizontalHeight:0.9,verticalX:0.38,verticalRefY:0.14,verticalValY:-0.14,verticalWidth:1.1},diode:{horizontalOffset:0.22,horizontalHeight:0.65,verticalX:0.2,verticalRefY:0.14,verticalValY:-0.14,verticalWidth:0.9},resistor:{horizontalOffset:0.22,horizontalHeight:0.65,verticalX:0.2,verticalRefY:0.14,verticalValY:-0.14,verticalWidth:0.9}},oHn=fr(nue,{kind:"diode",orientation:"down",pin1Labels:["1","pos","anode"],pin2Labels:["2","neg","cathode"]}),iHn=fr(nue,{kind:"diode",orientation:"left",pin1Labels:["1","pos","anode"],pin2Labels:["2","neg","cathode"]}),rHn=fr(nue,{kind:"diode",orientation:"right",pin1Labels:["1","pos","anode"],pin2Labels:["2","neg","cathode"]}),sHn=fr(nue,{kind:"diode",orientation:"up",pin1Labels:["1","pos","anode"],pin2Labels:["2","neg","cathode"]}),{paths:aHn,texts:GIr,bounds:Ile,refblocks:olt,circles:cHn}=qz,lHn=sn({primitives:[...Object.values(aHn),...Object.values(cHn),{type:"text",text:"{REF}",x:0.15,y:-0.2294553499999995},{type:"text",text:"{VAL}",x:-0.15,y:-0.2294553499999995}],ports:[{...olt.left1,labels:["1"]},{...olt.right1,labels:["2"]}],size:{width:Ile.width,height:Ile.height},center:{x:Ile.centerX,y:Ile.centerY}}).rotateRightFacingSymbol("up").labelPort("left1",["1"]).labelPort("right1",["2"]).changeTextAnchor("{REF}","middle_left").changeTextAnchor("{VAL}","middle_left").build(),{paths:dHn,texts:YIr,bounds:ble,refblocks:ilt,circles:uHn}=qz,hHn=sn({primitives:[...Object.values(dHn),...Object.values(uHn),{type:"text",text:"{REF}",x:0.15,y:-0.2294553499999995},{type:"text",text:"{VAL}",x:-0.15,y:-0.2294553499999995}],ports:[{...ilt.left1,labels:["1"]},{...ilt.right1,labels:["2"]}],size:{width:ble.width,height:ble.height},center:{x:ble.centerX,y:ble.centerY}}).rotateRightFacingSymbol("up").labelPort("left1",["1"]).labelPort("right1",["2"]).changeTextAnchor("{REF}","middle_left").changeTextAnchor("{VAL}","middle_left").build(),oue={paths:{"anode-lead":{type:"path",points:[{x:-0.17499999999999982,y:0},{x:-0.09999999999999987,y:0}],color:"primary",fill:!1},body:{type:"path",points:[{x:-0.09999999999999987,y:0.09999999999999987},{x:0.10000000000000009,y:0},{x:-0.09999999999999987,y:-0.10000000000000009},{x:-0.09999999999999987,y:0.09999999999999987}],color:"primary",fill:!1},"cathode-bar":{type:"path",points:[{x:0.050000000000000044,y:0.11999999999999988},{x:0.10000000000000009,y:0.09999999999999987},{x:0.10000000000000009,y:-0.10000000000000009},{x:0.15000000000000013,y:-0.1200000000000001}],color:"primary",fill:!1},"cathode-lead":{type:"path",points:[{x:0.10000000000000009,y:0},{x:0.17500000000000004,y:0}],color:"primary",fill:!1}},texts:{top1:{type:"text",text:"{REF}",x:0,y:0.25},bottom1:{type:"text",text:"{VAL}",x:0,y:-0.25}},refblocks:{left1:{x:-0.17499999999999982,y:0},right1:{x:0.17500000000000004,y:0}},bounds:{minX:-0.17499999999999982,maxX:0.17500000000000004,minY:-0.25,maxY:0.25,width:0.34999999999999987,height:0.5,centerX:0.00000000000000011102230246251565,centerY:0},circles:{}},mHn=fr(oue,{kind:"diode",orientation:"down",pin1Labels:["1","pos","anode"],pin2Labels:["2","neg","cathode"]}),pHn=fr(oue,{kind:"diode",orientation:"left",pin1Labels:["1","pos","anode"],pin2Labels:["2","neg","cathode"]}),AHn=fr(oue,{kind:"diode",orientation:"right",pin1Labels:["1","pos","anode"],pin2Labels:["2","neg","cathode"]}),_Hn=fr(oue,{kind:"diode",orientation:"up",pin1Labels:["1","pos","anode"],pin2Labels:["2","neg","cathode"]}),iue={paths:{path40:{type:"path",points:[{x:0.14,y:0.04},{x:-0.12,y:-0.09}],color:"primary",fill:!1},path41:{type:"path",points:[{x:-0.12,y:0.18},{x:0.14,y:0.04}],color:"primary",fill:!1},path42:{type:"path",points:[{x:-0.12,y:-0.09},{x:-0.12,y:0.18}],color:"primary",fill:!1},path43:{type:"path",points:[{x:0.14,y:0.18},{x:0.14,y:-0.09}],color:"primary",fill:!1},path44:{type:"path",points:[{x:0.14,y:0.04},{x:-0.52,y:0.04}],color:"primary",fill:!1},"path44-0":{type:"path",points:[{x:0.52,y:0.04},{x:0.15,y:0.04}],color:"primary",fill:!1},"path43-8":{type:"path",points:[{x:0.18,y:0.18},{x:0.11,y:0.18}],color:"primary",fill:!1},"path43-8-8":{type:"path",points:[{x:0.18,y:-0.09},{x:0.11,y:-0.09}],color:"primary",fill:!1}},texts:{top1:{type:"text",text:"{REF}",x:-0.01,y:0.27},bottom1:{type:"text",text:"{VAL}",x:0,y:-0.27}},refblocks:{left1:{x:-0.52,y:0.04},right1:{x:0.52,y:0.04}},bounds:{minX:-0.55,maxX:0.55,minY:-0.27,maxY:0.27,width:1.09,height:0.55,centerX:0,centerY:0},circles:{}},{paths:gHn,texts:VIr,bounds:Sle,refblocks:rlt,circles:fHn}=iue,yHn=sn({primitives:[...Object.values(gHn),...Object.values(fHn),{type:"text",text:"{REF}",x:-0.16,y:0.2294553499999995},{type:"text",text:"{VAL}",x:0.16,y:0.2294553499999995}],ports:[{...rlt.left1,labels:["1"]},{...rlt.right1,labels:["2"]}],size:{width:Sle.width,height:Sle.height},center:{x:Sle.centerX,y:Sle.centerY}}).changeTextAnchor("{VAL}","middle_bottom").rotateRightFacingSymbol("down").labelPort("left1",["1"]).labelPort("right1",["2"]).changeTextAnchor("{REF}","middle_left").build(),{paths:xHn,texts:UIr,bounds:Ple,refblocks:slt,circles:CHn}=iue,Sut=sn({primitives:[...Object.values(xHn),...Object.values(CHn),{type:"text",text:"{REF}",x:-0.0001118,y:-0.18},{type:"text",text:"{VAL}",x:0.0001118,y:0.2738453}],ports:[{...slt.left1,labels:["1"]},{...slt.right1,labels:["2"]}],size:{width:Ple.width,height:Ple.height},center:{x:Ple.centerX,y:Ple.centerY}}).changeTextAnchor("{VAL}","middle_bottom").rotateRightFacingSymbol("left").labelPort("left1",["2"]).labelPort("right1",["1"]).changeTextAnchor("{REF}","middle_bottom").build(),{paths:IHn,texts:WIr,bounds:vle,refblocks:alt,circles:bHn}=iue,SHn=sn({primitives:[...Object.values(IHn),...Object.values(bHn),{type:"text",text:"{REF}",x:-0.0050250999999996715,y:0.27384529999999985,anchor:"middle_left"},{type:"text",text:"{VAL}",x:-0.00011179999999999524,y:-0.27384530000000007,anchor:"middle_left"}],ports:[{...alt.left1,labels:["1"]},{...alt.right1,labels:["2"]}],size:{width:vle.width,height:vle.height},center:{x:vle.centerX,y:vle.centerY}}).changeTextAnchor("{VAL}","middle_top").labelPort("right1",["2"]).labelPort("left1",["1"]).changeTextAnchor("{REF}","middle_bottom").build(),{paths:XIr,texts:KIr,bounds:jIr,refblocks:qIr,circles:JIr}=iue,g3e=yo(Sut,"down"),f3e=g3e.primitives.find((e)=>e.type==="text"&&e.text==="{REF}"),y3e=g3e.primitives.find((e)=>e.type==="text"&&e.text==="{VAL}");f3e.anchor="middle_left";y3e.anchor="middle_left";f3e.x=0.25;f3e.y+=0.21;y3e.y-=0.21;y3e.x=0.25;PHn=g3e,uJ={paths:{path43:{type:"path",points:[{x:-0.06,y:0.19},{x:-0.06,y:-0.12}],color:"primary",fill:!1},"path43-6":{type:"path",points:[{x:0.02,y:0.13},{x:0.02,y:-0.06}],color:"primary",fill:!1},path44:{type:"path",points:[{x:-0.06,y:0.03},{x:-0.5,y:0.03}],color:"primary",fill:!1},"path44-0":{type:"path",points:[{x:0.5,y:0.03},{x:0.03,y:0.03}],color:"primary",fill:!1}},texts:{top1:{type:"text",text:"{REF}",x:-0.03,y:0.27},bottom1:{type:"text",text:"{VAL}",x:-0.03,y:-0.28}},refblocks:{left1:{x:-0.5,y:0.03},right1:{x:0.5,y:0.03}},bounds:{minX:-0.5,maxX:0.5,minY:-0.38,maxY:0.27,width:1,height:0.29,centerX:0,centerY:0.06},circles:{}},{paths:vHn,bounds:clt,refblocks:llt,circles:EHn}=uJ,MHn=sn({primitives:[...Object.values(vHn),...Object.values(EHn),{type:"text",text:"{REF}",x:-0.2,y:0.31},{type:"text",text:"{VAL}",x:0.2,y:0.31}],ports:[{...llt.left1,labels:["1"]},{...llt.right1,labels:["2"]}],center:{x:clt.centerX,y:clt.centerY}}).changeTextAnchor("{VAL}","middle_bottom").rotateRightFacingSymbol("down").changeTextAnchor("{REF}","middle_left").build(),BHn={...MHn,size:{width:1,height:0.9}};({paths:wHn,texts:dlt,bounds:Ele,refblocks:ult,circles:THn}=uJ),Put=jc({primitives:[...Object.values(wHn),...Object.values(THn),{...dlt.top1,anchor:"middle_bottom"},{...dlt.bottom1,anchor:"middle_top"}],ports:[{...ult.left1,labels:["1"]},{...ult.right1,labels:["2"]}],size:{width:Ele.width,height:Ele.height},center:{x:Ele.centerX,y:Ele.centerY}}),{paths:DHn,bounds:hlt,refblocks:mlt,circles:NHn}=uJ,RHn=sn({primitives:[...Object.values(DHn),...Object.values(NHn),{type:"text",text:"{REF}",x:0,y:-0.22},{type:"text",text:"{VAL}",x:0,y:0.28}],ports:[{...mlt.left1,labels:["1"]},{...mlt.right1,labels:["2"]}],center:{x:hlt.centerX,y:hlt.centerY}}).changeTextAnchor("{VAL}","middle_bottom").rotateRightFacingSymbol("left").changeTextAnchor("{REF}","middle_bottom").build(),QHn={...RHn,size:{width:1,height:0.65}},{paths:kHn,bounds:plt,refblocks:Alt,circles:LHn}=uJ,FHn=sn({primitives:[...Object.values(kHn),...Object.values(LHn),{type:"text",text:"{REF}",x:0,y:0.28},{type:"text",text:"{VAL}",x:0,y:-0.22}],ports:[{...Alt.left1,labels:["1"]},{...Alt.right1,labels:["2"]}],center:{x:plt.centerX,y:plt.centerY}}).changeTextAnchor("{VAL}","middle_top").rotateRightFacingSymbol("right").changeTextAnchor("{REF}","middle_bottom").build(),HHn={...FHn,size:{width:1,height:0.65}},{paths:OHn,bounds:_lt,refblocks:glt,circles:zHn}=uJ,GHn=sn({primitives:[...Object.values(OHn),...Object.values(zHn),{type:"text",text:"{REF}",x:0.2,y:-0.25},{type:"text",text:"{VAL}",x:-0.2,y:-0.25}],ports:[{...glt.left1,labels:["1"]},{...glt.right1,labels:["2"]}],center:{x:_lt.centerX,y:_lt.centerY}}).changeTextAnchor("{VAL}","middle_top").rotateRightFacingSymbol("up").changeTextAnchor("{REF}","middle_left").build(),YHn={...GHn,size:{width:1,height:0.9}},VHn=dJ(Put,{newOrientation:"up"}),rue={paths:{path1:{type:"path",points:[{x:-0.3,y:0},{x:-0.19998,y:0}],color:"primary",fill:!1,strokeWidth:0.012},path2:{type:"path",points:[{x:0.19998,y:0},{x:0.3,y:0}],color:"primary",fill:!1,strokeWidth:0.012},path3:{type:"path",points:[{x:-0.19998,y:0.07998},{x:0.19998,y:0.07998},{x:0.19998,y:-0.07998},{x:-0.19998,y:-0.07998},{x:-0.19998,y:0.07998}],color:"primary",fill:!1,strokeWidth:0.012}},texts:{top1:{type:"text",text:"{REF}",x:0,y:0.3,anchor:"middle_bottom"},bottom1:{type:"text",text:"{VAL}",x:0,y:-0.45,anchor:"middle_bottom"}},refblocks:{left1:{x:-0.3,y:0},right1:{x:0.3,y:0}},bounds:{minX:-0.3,maxX:0.3,minY:-0.45,maxY:0.3,width:0.6,height:0.75,centerX:0,centerY:0},circles:{}},{paths:UHn,texts:$Ir,bounds:flt,refblocks:ylt,circles:WHn}=rue,XHn=sn({primitives:[...Object.values(UHn),...Object.values(WHn),{type:"text",text:"{REF}",x:-0.16,y:0.16},{type:"text",text:"{VAL}",x:0.16,y:0.16}],ports:[{...ylt.left1,labels:["1"]},{...ylt.right1,labels:["2"]}],center:{x:flt.centerX,y:flt.centerY}}).changeTextAnchor("{VAL}","middle_bottom").rotateRightFacingSymbol("down").labelPort("left1",["1"]).labelPort("right1",["2"]).changeTextAnchor("{REF}","middle_left").build(),KHn={...XHn,size:{width:0.9,height:0.6}},{paths:jHn,texts:ZIr,bounds:xlt,refblocks:Clt,circles:qHn}=rue,JHn=sn({primitives:[...Object.values(jHn),...Object.values(qHn),{type:"text",text:"{REF}",x:0,y:-0.16},{type:"text",text:"{VAL}",x:0,y:0.16}],ports:[{...Clt.left1,labels:["1"]},{...Clt.right1,labels:["2"]}],center:{x:xlt.centerX,y:xlt.centerY}}).changeTextAnchor("{VAL}","middle_bottom").rotateRightFacingSymbol("left").labelPort("left1",["1"]).labelPort("right1",["2"]).changeTextAnchor("{REF}","middle_bottom").build(),$Hn={...JHn,size:{width:0.6,height:0.65}},{paths:ZHn,texts:ebr,bounds:Ilt,refblocks:blt,circles:eOn}=rue,tOn=sn({primitives:[...Object.values(ZHn),...Object.values(eOn),{type:"text",text:"{REF}",x:0,y:0.16},{type:"text",text:"{VAL}",x:0,y:-0.16}],ports:[{...blt.left1,labels:["1"]},{...blt.right1,labels:["2"]}],center:{x:Ilt.centerX,y:Ilt.centerY}}).changeTextAnchor("{VAL}","middle_top").rotateRightFacingSymbol("right").labelPort("left1",["1"]).labelPort("right1",["2"]).changeTextAnchor("{REF}","middle_bottom").build(),nOn={...tOn,size:{width:0.6,height:0.65}},sue={paths:{"left-lead":{type:"path",points:[{x:-0.25,y:0},{x:-0.175,y:0}],color:"primary",fill:!1,strokeWidth:0.012},body:{type:"path",points:[{x:-0.175,y:0.075},{x:0.175,y:0.075},{x:0.175,y:-0.075},{x:-0.175,y:-0.075},{x:-0.175,y:0.075}],color:"primary",fill:!1,strokeWidth:0.012},"right-lead":{type:"path",points:[{x:0.175,y:0},{x:0.25,y:0}],color:"primary",fill:!1,strokeWidth:0.012}},texts:{top1:{type:"text",text:"{REF}",x:0,y:0.25,anchor:"middle_bottom"},bottom1:{type:"text",text:"{VAL}",x:0,y:-0.25,anchor:"middle_top"}},refblocks:{left1:{x:-0.25,y:0},right1:{x:0.25,y:0}},bounds:{minX:-0.25,maxX:0.25,minY:-0.25,maxY:0.25,width:0.5,height:0.5,centerX:0,centerY:0},circles:{}},oOn=fr(sue,{kind:"boxresistor",orientation:"down"}),iOn=fr(sue,{kind:"boxresistor",orientation:"left"}),rOn=fr(sue,{kind:"boxresistor",orientation:"right"}),sOn=fr(sue,{kind:"boxresistor",orientation:"up"}),aue={paths:{path2:{type:"path",points:[{x:0.15,y:-0.01},{x:0.55,y:-0.01}],color:"primary",fill:!0},"path2-5":{type:"path",points:[{x:-0.15,y:0.06},{x:0.14,y:0.06}],color:"primary",fill:!0},"path2-5-1":{type:"path",points:[{x:0.14,y:0.06},{x:0.14,y:-0.08}],color:"primary",fill:!0},"path2-5-1-6":{type:"path",points:[{x:-0.16,y:0.06},{x:-0.16,y:-0.08}],color:"primary",fill:!0},"path2-5-4":{type:"path",points:[{x:-0.15,y:-0.08},{x:0.14,y:-0.08}],color:"primary",fill:!0},"path2-9":{type:"path",points:[{x:-0.55,y:-0.01},{x:-0.17,y:-0.01}],color:"primary",fill:!0}},texts:{top1:{type:"text",text:"{REF}",x:-0.01,y:0.17},bottom1:{type:"text",text:"{VAL}",x:0,y:-0.17}},refblocks:{left1:{x:-0.55,y:-0.01},right1:{x:0.55,y:-0.01}},bounds:{minX:-0.58,maxX:0.58,minY:-0.17,maxY:0.17,width:1.16,height:0.35,centerX:0,centerY:0},circles:{}},{paths:aOn,texts:tbr,bounds:Mle,refblocks:Slt,circles:cOn}=aue,lOn=sn({primitives:[...Object.values(aOn),...Object.values(cOn),{type:"text",text:"{REF}",x:-0.2,y:0.1404553499999995},{type:"text",text:"{VAL}",x:0.2,y:0.1494553499999995}],ports:[{...Slt.left1,labels:["1"]},{...Slt.right1,labels:["2"]}],size:{width:Mle.width,height:Mle.height},center:{x:Mle.centerX,y:Mle.centerY}}).rotateRightFacingSymbol("down").labelPort("left",["1"]).labelPort("right",["2"]).changeTextAnchor("{REF}","middle_left").changeTextAnchor("{VAL}","middle_left").build(),{paths:dOn,texts:nbr,bounds:Ble,refblocks:Plt,circles:uOn}=aue,hOn=sn({primitives:[...Object.values(dOn),...Object.values(uOn),{type:"text",text:"{REF}",x:0,y:-0.2294553499999995},{type:"text",text:"{VAL}",x:0,y:0.1704553499999995}],ports:[{...Plt.left1,labels:["1"]},{...Plt.right1,labels:["2"]}],size:{width:Ble.width,height:Ble.height},center:{x:Ble.centerX,y:Ble.centerY}}).rotateRightFacingSymbol("left").labelPort("left",["1"]).labelPort("right",["2"]).changeTextAnchor("{REF}","middle_bottom").changeTextAnchor("{VAL}","middle_top").build(),{paths:mOn,texts:obr,bounds:wle,refblocks:vlt,circles:pOn}=aue,AOn=sn({primitives:[...Object.values(mOn),...Object.values(pOn),{type:"text",text:"{REF}",x:0,y:0.2294553499999995},{type:"text",text:"{VAL}",x:0,y:-0.1704553499999995}],ports:[{...vlt.left1,labels:["1"]},{...vlt.right1,labels:["2"]}],size:{width:wle.width,height:wle.height},center:{x:wle.centerX,y:wle.centerY}}).rotateRightFacingSymbol("right").labelPort("left",["1"]).labelPort("right",["2"]).changeTextAnchor("{REF}","middle_bottom").changeTextAnchor("{VAL}","middle_top").build(),{paths:_On,texts:ibr,bounds:Tle,refblocks:Elt,circles:gOn}=aue,fOn=sn({primitives:[...Object.values(_On),...Object.values(gOn),{type:"text",text:"{REF}",x:0.2,y:-0.1404553499999995},{type:"text",text:"{VAL}",x:-0.2,y:-0.1494553499999995}],ports:[{...Elt.left1,labels:["1"]},{...Elt.right1,labels:["2"]}],size:{width:Tle.width,height:Tle.height},center:{x:Tle.centerX,y:Tle.centerY}}).rotateRightFacingSymbol("up").labelPort("left",["1"]).labelPort("right",["2"]).changeTextAnchor("{REF}","middle_left").changeTextAnchor("{VAL}","middle_left").build(),{paths:yOn,texts:rbr,bounds:Mlt,refblocks:Blt,circles:xOn}=rue,COn=sn({primitives:[...Object.values(yOn),...Object.values(xOn),{type:"text",text:"{REF}",x:0.16,y:-0.16},{type:"text",text:"{VAL}",x:-0.16,y:-0.16}],ports:[{...Blt.left1,labels:["1"]},{...Blt.right1,labels:["2"]}],center:{x:Mlt.centerX,y:Mlt.centerY}}).changeTextAnchor("{VAL}","middle_top").rotateRightFacingSymbol("up").labelPort("left1",["1"]).labelPort("right1",["2"]).changeTextAnchor("{REF}","middle_left").build(),IOn={...COn,size:{width:0.9,height:0.6}},cue={paths:{"left-lead":{type:"path",points:[{x:-0.175,y:0},{x:-0.14,y:0}],color:"primary",fill:!1,strokeWidth:0.012},body:{type:"path",points:[{x:-0.14,y:0.065},{x:0.14,y:0.065},{x:0.14,y:-0.065},{x:-0.14,y:-0.065},{x:-0.14,y:0.065}],color:"primary",fill:!1,strokeWidth:0.012},"right-lead":{type:"path",points:[{x:0.14,y:0},{x:0.175,y:0}],color:"primary",fill:!1,strokeWidth:0.012}},texts:{top1:{type:"text",text:"{REF}",x:0,y:0.25,anchor:"middle_bottom"},bottom1:{type:"text",text:"{VAL}",x:0,y:-0.25,anchor:"middle_top"}},refblocks:{left1:{x:-0.175,y:0},right1:{x:0.175,y:0}},bounds:{minX:-0.175,maxX:0.175,minY:-0.25,maxY:0.25,width:0.35,height:0.5,centerX:0,centerY:0},circles:{}},bOn=fr(cue,{kind:"boxresistor",orientation:"down"}),SOn=fr(cue,{kind:"boxresistor",orientation:"left"}),POn=fr(cue,{kind:"boxresistor",orientation:"right"}),vOn=fr(cue,{kind:"boxresistor",orientation:"up"}),x3e={paths:{"horizontal-bar":{type:"path",points:[{x:-0.4,y:0},{x:0.4,y:0}],color:"primary",fill:!1},"middle-dash-1":{type:"path",points:[{x:0,y:0.2},{x:0,y:0.07}],color:"primary",fill:!1},"middle-dash-2":{type:"path",points:[{x:0,y:0.01},{x:0,y:-0.12}],color:"primary",fill:!1},"middle-dash-3":{type:"path",points:[{x:0,y:-0.18},{x:0,y:-0.31}],color:"primary",fill:!1},"left-vertical":{type:"path",points:[{x:-0.25,y:0},{x:-0.25,y:-0.2}],color:"primary",fill:!1},"right-vertical":{type:"path",points:[{x:0.25,y:0},{x:0.25,y:-0.2}],color:"primary",fill:!1},"left-ground":{type:"path",points:[{x:-0.3,y:-0.2},{x:-0.25,y:-0.3},{x:-0.2,y:-0.2},{x:-0.3,y:-0.2}],color:"primary",fill:!1},"right-ground":{type:"path",points:[{x:0.2,y:-0.2},{x:0.25,y:-0.3},{x:0.3,y:-0.2},{x:0.2,y:-0.2}],color:"primary",fill:!1}},refblocks:{left1:{x:-0.4,y:0},right1:{x:0.4,y:0}},texts:{ref:{type:"text",text:"{REF}",x:0,y:0.35}},bounds:{minX:-0.4,maxX:0.4,minY:-0.4,maxY:0.35,width:0.8,height:0.75,centerX:0,centerY:-0.02},circles:{}},{paths:EOn,texts:sbr,bounds:wlt,refblocks:Tlt,circles:MOn}=x3e,BOn=sn({primitives:[...Object.values(EOn),...Object.values(MOn),{type:"text",text:"{REF}",x:0,y:0.2594553499999995}],ports:[{...Tlt.left1,labels:["1"]},{...Tlt.right1,labels:["2"]}],center:{x:wlt.centerX,y:wlt.centerY}}).changeTextAnchor("{VAL}","middle_bottom").rotateRightFacingSymbol("down").labelPort("left1",["1"]).labelPort("right1",["2"]).changeTextAnchor("{REF}","middle_left").build(),{paths:wOn,texts:abr,bounds:Dlt,refblocks:Nlt,circles:TOn}=x3e,vut=sn({primitives:[...Object.values(wOn),...Object.values(TOn),{type:"text",text:"{REF}",x:0,y:0.2594553499999995}],ports:[{...Nlt.left1,labels:["1"]},{...Nlt.right1,labels:["2"]}],center:{x:Dlt.centerX,y:Dlt.centerY}}).rotateRightFacingSymbol("right").labelPort("left1",["1"]).labelPort("right1",["2"]).changeTextAnchor("{REF}","middle_bottom").build(),DOn=L5(vut),{paths:NOn,texts:cbr,bounds:Rlt,refblocks:Qlt,circles:ROn}=x3e,QOn=sn({primitives:[...Object.values(NOn),...Object.values(ROn),{type:"text",text:"{REF}",x:0,y:0.2594553499999995}],ports:[{...Qlt.left1,labels:["1"]},{...Qlt.right1,labels:["2"]}],center:{x:Rlt.centerX,y:Rlt.centerY}}).rotateRightFacingSymbol("up").labelPort("left1",["1"]).labelPort("right1",["2"]).changeTextAnchor("{REF}","middle_right").build(),lue={paths:{path27:{type:"path",points:[{x:0.3,y:0},{x:0.06,y:0}],color:"primary",fill:!1,strokeWidth:0.012},path28:{type:"path",points:[{x:-0.06,y:0},{x:-0.3,y:0}],color:"primary",fill:!1,strokeWidth:0.012},path29:{type:"path",points:[{x:0.06,y:0.16002},{x:0.06,y:-0.16002}],color:"primary",fill:!1,strokeWidth:0.012},path30:{type:"path",points:[{x:-0.06,y:0.16002},{x:-0.06,y:-0.16002}],color:"primary",fill:!1,strokeWidth:0.012}},texts:{top1:{type:"text",text:"{REF}",x:0,y:0.24,anchor:"middle_bottom"},bottom1:{type:"text",text:"{VAL}",x:0,y:-0.24,anchor:"middle_top"}},refblocks:{left1:{x:-0.3,y:0},right1:{x:0.3,y:0}},bounds:{minX:-0.3,maxX:0.3,minY:-0.24,maxY:0.24,width:0.6,height:0.48,centerX:0,centerY:0},circles:{}},{paths:kOn,texts:lbr,bounds:Dle,refblocks:klt,circles:LOn}=lue,FOn=sn({primitives:[...Object.values(kOn),...Object.values(LOn),{type:"text",text:"{REF}",x:-0.2,y:0.115},{type:"text",text:"{VAL}",x:0.2,y:0.115}],ports:[{...klt.left1,labels:["1"]},{...klt.right1,labels:["2"]}],size:{width:Dle.width,height:Dle.height},center:{x:Dle.centerX,y:Dle.centerY}}).changeTextAnchor("{VAL}","top_left").rotateRightFacingSymbol("down").labelPort("left1",["1","pos"]).labelPort("right1",["2","neg"]).changeTextAnchor("{REF}","bottom_left").build(),HOn={...FOn,size:{width:0.9,height:0.6}},OOn=sn(lue).changeTextAnchor("{VAL}","middle_top").rotateRightFacingSymbol("right").labelPort("left1",["2","neg"]).labelPort("right1",["1","pos"]).changeTextAnchor("{REF}","middle_bottom").build(),zOn={...OOn,size:{width:0.6,height:0.65}},due={paths:{path27:{type:"path",points:[{x:0.3,y:0},{x:0.000657,y:0}],color:"primary",fill:!1,strokeWidth:0.012},path28:{type:"path",points:[{x:-0.038683,y:0},{x:-0.3,y:0}],color:"primary",fill:!1,strokeWidth:0.012},path30:{type:"path",points:[{x:-0.074255,y:0.16002},{x:-0.074255,y:0.16002},{x:-0.069544,y:0.149352},{x:-0.065126,y:0.138684},{x:-0.061005,y:0.128016},{x:-0.057182,y:0.117348},{x:-0.053663,y:0.10668},{x:-0.05045,y:0.096012},{x:-0.047547,y:0.085344},{x:-0.044957,y:0.074676},{x:-0.042684,y:0.064008},{x:-0.040732,y:0.05334},{x:-0.039103,y:0.042672},{x:-0.037801,y:0.032004},{x:-0.03683,y:0.021336},{x:-0.036193,y:0.010668},{x:-0.035893,y:0},{x:-0.036193,y:-0.010668},{x:-0.03683,y:-0.021336},{x:-0.037801,y:-0.032004},{x:-0.039103,y:-0.042672},{x:-0.040732,y:-0.05334},{x:-0.042684,y:-0.064008},{x:-0.044957,y:-0.074676},{x:-0.047547,y:-0.085344},{x:-0.05045,y:-0.096012},{x:-0.053663,y:-0.10668},{x:-0.057182,y:-0.117348},{x:-0.061005,y:-0.128016},{x:-0.065126,y:-0.138684},{x:-0.069544,y:-0.149352},{x:-0.074255,y:-0.16002},{x:-0.074255,y:-0.16002}],color:"primary",fill:!1,strokeWidth:0.012},"path30-7":{type:"path",points:[{x:-0.000385,y:0.16002},{x:-0.000385,y:-0.16002}],color:"primary",fill:!1,strokeWidth:0.012},"path30-9-2":{type:"path",points:[{x:0.156026,y:0.2},{x:0.085846,y:0.2}],color:"primary",fill:!1,strokeWidth:0.012},"path30-9-2-9":{type:"path",points:[{x:0.120936,y:0.16491},{x:0.120936,y:0.23509}],color:"primary",fill:!1,strokeWidth:0.012}},texts:{top1:{type:"text",text:"{REF}",x:0,y:0.42,anchor:"middle_bottom"},bottom1:{type:"text",text:"{VAL}",x:0,y:-0.42,anchor:"middle_top"}},refblocks:{left1:{x:-0.3,y:0},right1:{x:0.3,y:0}},bounds:{minX:-0.3,maxX:0.3,minY:-0.55,maxY:0.55,width:0.6,height:1.1,centerX:0,centerY:0},circles:{"viewbox-padding-min":{type:"circle",x:-0.3,y:-0.55,radius:0,fill:!1,color:"transparent"},"viewbox-padding-max":{type:"circle",x:0.3,y:0.55,radius:0,fill:!1,color:"transparent"}}},GOn=sn(due).rotateRightFacingSymbol("up").labelPort("left1",["2","neg"]).labelPort("right1",["1","pos"]).changeTextAnchor("{REF}","middle_left",{x:0.7,y:0.3}).changeTextAnchor("{VAL}","middle_left",{x:-0.12,y:-0.3}).build(),YOn=sn(due).rotateRightFacingSymbol("right").labelPort("left1",["2","neg"]).labelPort("right1",["1","pos"]).changeTextAnchor("{REF}","middle_bottom").changeTextAnchor("{VAL}","middle_top").build(),VOn=sn(due).rotateRightFacingSymbol("left").labelPort("left1",["2","neg"]).labelPort("right1",["1","pos"]).changeTextAnchor("{REF}","middle_bottom",{x:0,y:0.78}).changeTextAnchor("{VAL}","middle_top",{x:0,y:-0.78}).build(),UOn=sn(due).rotateRightFacingSymbol("down").labelPort("left1",["2","neg"]).labelPort("right1",["1","pos"]).changeTextAnchor("{REF}","middle_left",{x:-0.12,y:0.3}).changeTextAnchor("{VAL}","middle_left",{x:0.72,y:-0.3}).build(),WOn=sn(lue).rotateRightFacingSymbol("right").changeTextAnchor("{VAL}","middle_top").labelPort("left1",["1","pos"]).labelPort("right1",["2","neg"]).changeTextAnchor("{REF}","middle_bottom").build(),XOn={...WOn,size:{width:0.6,height:0.65}},uue={paths:{"left-lead":{type:"path",points:[{x:-0.25,y:0},{x:-0.06,y:0}],color:"primary",fill:!1,strokeWidth:0.012},"left-plate":{type:"path",points:[{x:-0.06,y:0.16},{x:-0.06,y:-0.16}],color:"primary",fill:!1,strokeWidth:0.012},"right-plate":{type:"path",points:[{x:0.06,y:0.16},{x:0.06,y:-0.16}],color:"primary",fill:!1,strokeWidth:0.012},"right-lead":{type:"path",points:[{x:0.06,y:0},{x:0.25,y:0}],color:"primary",fill:!1,strokeWidth:0.012}},texts:{top1:{type:"text",text:"{REF}",x:0,y:0.25,anchor:"middle_bottom"},bottom1:{type:"text",text:"{VAL}",x:0,y:-0.25,anchor:"middle_top"}},refblocks:{left1:{x:-0.25,y:0},right1:{x:0.25,y:0}},bounds:{minX:-0.25,maxX:0.25,minY:-0.25,maxY:0.25,width:0.5,height:0.5,centerX:0,centerY:0},circles:{}},KOn=fr(uue,{kind:"capacitor",orientation:"down",pin1Labels:["1","pos"],pin2Labels:["2","neg"]}),jOn=fr(uue,{kind:"capacitor",orientation:"left",pin1Labels:["1","pos"],pin2Labels:["2","neg"]}),qOn=fr(uue,{kind:"capacitor",orientation:"right",pin1Labels:["1","pos"],pin2Labels:["2","neg"]}),JOn=fr(uue,{kind:"capacitor",orientation:"up",pin1Labels:["1","pos"],pin2Labels:["2","neg"]}),{paths:$On,texts:dbr,bounds:Nle,refblocks:Llt,circles:ZOn}=lue,ezn=sn({primitives:[...Object.values($On),...Object.values(ZOn),{type:"text",text:"{REF}",x:0.2,y:-0.095},{type:"text",text:"{VAL}",x:-0.2,y:-0.095}],ports:[{...Llt.left1,labels:["1"]},{...Llt.right1,labels:["2"]}],size:{width:Nle.width,height:Nle.height},center:{x:Nle.centerX,y:Nle.centerY}}).changeTextAnchor("{VAL}","top_left").rotateRightFacingSymbol("up").labelPort("left1",["1","pos"]).labelPort("right1",["2","neg"]).changeTextAnchor("{REF}","bottom_left").build(),tzn={...ezn,size:{width:0.9,height:0.6}},hue={paths:{"left-lead":{type:"path",points:[{x:-0.175,y:0},{x:-0.05,y:0}],color:"primary",fill:!1,strokeWidth:0.012},"left-plate":{type:"path",points:[{x:-0.05,y:0.14},{x:-0.05,y:-0.14}],color:"primary",fill:!1,strokeWidth:0.012},"right-plate":{type:"path",points:[{x:0.05,y:0.14},{x:0.05,y:-0.14}],color:"primary",fill:!1,strokeWidth:0.012},"right-lead":{type:"path",points:[{x:0.05,y:0},{x:0.175,y:0}],color:"primary",fill:!1,strokeWidth:0.012}},texts:{top1:{type:"text",text:"{REF}",x:0,y:0.25,anchor:"middle_bottom"},bottom1:{type:"text",text:"{VAL}",x:0,y:-0.25,anchor:"middle_top"}},refblocks:{left1:{x:-0.175,y:0},right1:{x:0.175,y:0}},bounds:{minX:-0.175,maxX:0.175,minY:-0.25,maxY:0.25,width:0.35,height:0.5,centerX:0,centerY:0},circles:{}},nzn=fr(hue,{kind:"capacitor",orientation:"down",pin1Labels:["1","pos"],pin2Labels:["2","neg"]}),ozn=fr(hue,{kind:"capacitor",orientation:"left",pin1Labels:["1","pos"],pin2Labels:["2","neg"]}),izn=fr(hue,{kind:"capacitor",orientation:"right",pin1Labels:["1","pos"],pin2Labels:["2","neg"]}),rzn=fr(hue,{kind:"capacitor",orientation:"up",pin1Labels:["1","pos"],pin2Labels:["2","neg"]}),Jz={paths:{path11:{type:"path",points:[{x:-0.54,y:0.03},{x:-0.3,y:0.03}],color:"primary",fill:!1},path12:{type:"path",points:[{x:0.29,y:0.03},{x:0.54,y:0.03}],color:"primary",fill:!1},path2:{type:"path",points:[{x:0.29,y:0.29},{x:0.29,y:-0.23}],color:"primary",fill:!1}},texts:{top1:{type:"text",text:"{REF}",x:-0.02,y:0.37},bottom1:{type:"text",text:"{VAL}",x:-0.01,y:-0.37}},refblocks:{left1:{x:-0.54,y:0.03},right1:{x:0.54,y:0.03}},bounds:{minX:-0.57,maxX:0.57,minY:-0.37,maxY:0.37,width:1.14,height:0.74,centerX:0,centerY:0},circles:{path1:{type:"circle",x:0,y:0.04,radius:0.29,color:"primary",fill:!1}}},{paths:szn,texts:ubr,bounds:Rle,refblocks:Flt,circles:azn}=Jz,czn=sn({primitives:[...Object.values(szn),...Object.values(azn),{type:"text",text:"{REF}",x:-0.15,y:0.3894553499999995},{type:"text",text:"{VAL}",x:0.15,y:0.3894553499999995}],ports:[{...Flt.left1,labels:["1"]},{...Flt.right1,labels:["2"]}],size:{width:Rle.width,height:Rle.height},center:{x:Rle.centerX,y:Rle.centerY}}).rotateRightFacingSymbol("down").labelPort("left1",["1"]).labelPort("right1",["2"]).changeTextAnchor("{REF}","middle_left").changeTextAnchor("{VAL}","middle_left").build(),lzn=sn(Jz).changeTextAnchor("{VAL}","middle_top").labelPort("left1",["1"]).labelPort("right1",["2"]).changeTextAnchor("{REF}","middle_bottom").build(),{paths:dzn,texts:hbr,bounds:Qle,refblocks:Hlt,circles:uzn}=Jz,hzn=sn({primitives:[...Object.values(dzn),...Object.values(uzn),{type:"text",text:"{REF}",x:-0,y:-0.2894553499999995},{type:"text",text:"{VAL}",x:0,y:0.3894553499999995}],ports:[{...Hlt.left1,labels:["1"]},{...Hlt.right1,labels:["2"]}],size:{width:Qle.width,height:Qle.height},center:{x:Qle.centerX,y:Qle.centerY}}).changeTextAnchor("{VAL}","middle_bottom").rotateRightFacingSymbol("left").labelPort("left1",["1"]).labelPort("right1",["2"]).changeTextAnchor("{REF}","middle_bottom").build(),mzn=sn(Jz).changeTextAnchor("{VAL}","middle_top").labelPort("left1",["1","neg"]).labelPort("right1",["2","pos"]).changeTextAnchor("{REF}","middle_bottom").build(),{paths:pzn,texts:mbr,bounds:kle,refblocks:Olt,circles:Azn}=Jz,_zn=sn({primitives:[...Object.values(pzn),...Object.values(Azn),{type:"text",text:"{REF}",x:0.15,y:-0.2894553499999995},{type:"text",text:"{VAL}",x:-0.15,y:-0.2894553499999995}],ports:[{...Olt.left1,labels:["1"]},{...Olt.right1,labels:["2"]}],size:{width:kle.width,height:kle.height},center:{x:kle.centerX,y:kle.centerY}}).rotateRightFacingSymbol("up").labelPort("left1",["1"]).labelPort("right1",["2"]).changeTextAnchor("{REF}","middle_left").changeTextAnchor("{VAL}","middle_left").build(),{paths:gzn,texts:pbr,bounds:Lle,refblocks:zlt,circles:fzn}=Jz,yzn=sn({primitives:[...Object.values(gzn),...Object.values(fzn),{type:"text",text:"{REF}",x:0.15,y:-0.2894553499999995},{type:"text",text:"{VAL}",x:-0.15,y:-0.2894553499999995}],ports:[{...zlt.left1,labels:["1"]},{...zlt.right1,labels:["2"]}],size:{width:Lle.width,height:Lle.height},center:{x:Lle.centerX,y:Lle.centerY}}).rotateRightFacingSymbol("up").labelPort("left1",["1"]).labelPort("right1",["2"]).changeTextAnchor("{REF}","middle_left").changeTextAnchor("{VAL}","middle_left").build(),mue={paths:{path27:{type:"path",points:[{x:0.54,y:-0.01},{x:0.13,y:-0.01}],color:"primary",fill:!1},path29:{type:"path",points:[{x:0.13,y:0.25},{x:0.13,y:-0.27}],color:"primary",fill:!1},"path29-2":{type:"path",points:[{x:0.07,y:0.25},{x:0.07,y:-0.28}],color:"primary",fill:!1},path30:{type:"path",points:[{x:-0.14,y:0.25},{x:-0.14,y:-0.27}],color:"primary",fill:!1},"path29-5":{type:"path",points:[{x:-0.08,y:0.26},{x:-0.08,y:-0.27}],color:"primary",fill:!1},"path29-2-7":{type:"path",points:[{x:0.07,y:0.26},{x:-0.08,y:0.26}],color:"primary",fill:!1},"path29-2-7-6":{type:"path",points:[{x:0.07,y:-0.28},{x:-0.08,y:-0.28}],color:"primary",fill:!1},path43:{type:"path",points:[{x:-0.21,y:0.32},{x:0.2,y:0.32}],color:"primary",fill:!1},"path44-0":{type:"path",points:[{x:0,y:0.71},{x:0,y:0.33},{x:0,y:0.32}],color:"primary",fill:!1},"path43-8":{type:"path",points:[{x:-0.21,y:0.32},{x:-0.21,y:0.25}],color:"primary",fill:!1},"path43-8-8":{type:"path",points:[{x:0.2,y:0.32},{x:0.2,y:0.25}],color:"primary",fill:!1},"path43-9":{type:"path",points:[{x:0.19,y:-0.35},{x:-0.22,y:-0.35}],color:"primary",fill:!1},"path44-0-5":{type:"path",points:[{x:-0.02,y:-0.71},{x:-0.02,y:-0.36},{x:-0.02,y:-0.35}],color:"primary",fill:!1},"path43-8-1":{type:"path",points:[{x:0.19,y:-0.35},{x:0.19,y:-0.28}],color:"primary",fill:!1},"path43-8-8-9":{type:"path",points:[{x:-0.22,y:-0.35},{x:-0.22,y:-0.28}],color:"primary",fill:!1},path28:{type:"path",points:[{x:-0.14,y:-0.01},{x:-0.54,y:-0.01}],color:"primary",fill:!1}},texts:{left1:{type:"text",text:"{REF}",x:0.53,y:0.28},right1:{type:"text",text:"{VAL}",x:0.54,y:-0.28}},refblocks:{top1:{x:0,y:0.71},bottom1:{x:-0.02,y:-0.71},left1:{x:-0.54,y:-0.01},right1:{x:0.54,y:-0.01}},bounds:{minX:-0.57,maxX:0.57,minY:-0.74,maxY:0.74,width:1.14,height:1.48,centerX:0,centerY:0},circles:{}},{paths:xzn,texts:Abr,bounds:Fle,refblocks:Hle,circles:Czn}=mue,Izn=sn({primitives:[...Object.values(xzn),...Object.values(Czn),{type:"text",text:"{REF}",x:-0.4,y:0.4094554499999995},{type:"text",text:"{VAL}",x:0.4,y:0.4094553499999995}],ports:[{...Hle.left1,labels:["1"]},{...Hle.right1,labels:["3"]},{...Hle.bottom1,labels:["2"]},{...Hle.top1,labels:["4"]}],size:{width:Fle.width,height:Fle.height},center:{x:Fle.centerX,y:Fle.centerY}}).rotateRightFacingSymbol("down").changeTextAnchor("{REF}","bottom_left").changeTextAnchor("{VAL}","top_left").build(),bzn=sn(mue).labelPort("top1",["2","gnd1"]).labelPort("bottom1",["4","gnd2"]).labelPort("left1",["3"]).labelPort("right1",["1"]).changeTextAnchor("{REF}","bottom_left").changeTextAnchor("{VAL}","top_left").build(),Szn=sn(mue).labelPort("top1",["4","gnd1"]).labelPort("bottom1",["2","gnd2"]).labelPort("left1",["1"]).labelPort("right1",["3"]).changeTextAnchor("{REF}","bottom_left").changeTextAnchor("{VAL}","top_left").build(),{paths:Pzn,texts:_br,bounds:Ole,refblocks:zle,circles:vzn}=mue,Ezn=sn({primitives:[...Object.values(Pzn),...Object.values(vzn),{type:"text",text:"{VAL}",x:-0.4,y:-0.4094554499999995},{type:"text",text:"{REF}",x:0.4,y:-0.4094553499999995}],ports:[{...zle.left1,labels:["1"]},{...zle.right1,labels:["3"]},{...zle.bottom1,labels:["2"]},{...zle.top1,labels:["4"]}],size:{width:Ole.width,height:Ole.height},center:{x:Ole.centerX,y:Ole.centerY}}).rotateRightFacingSymbol("up").changeTextAnchor("{REF}","bottom_left").changeTextAnchor("{VAL}","top_left").build(),pue={paths:{path27:{type:"path",points:[{x:0.55,y:-0.01},{x:0.13,y:-0.01}],color:"primary",fill:!1},path28:{type:"path",points:[{x:-0.14,y:-0.01},{x:-0.55,y:-0.01}],color:"primary",fill:!1},path29:{type:"path",points:[{x:0.13,y:-0.28},{x:0.13,y:0.25}],color:"primary",fill:!1},"path29-2":{type:"path",points:[{x:0.07,y:-0.28},{x:0.07,y:0.25}],color:"primary",fill:!1},path30:{type:"path",points:[{x:-0.14,y:-0.28},{x:-0.14,y:0.25}],color:"primary",fill:!1},"path29-5":{type:"path",points:[{x:-0.08,y:-0.28},{x:-0.08,y:0.25}],color:"primary",fill:!1},"path29-2-7":{type:"path",points:[{x:0.07,y:-0.28},{x:-0.08,y:-0.28}],color:"primary",fill:!1},"path29-2-7-6":{type:"path",points:[{x:0.07,y:0.26},{x:-0.08,y:0.26}],color:"primary",fill:!1}},texts:{top1:{type:"text",text:"{VAL}",x:-0.01,y:-0.42},bottom1:{type:"text",text:"{REF}",x:0,y:0.43}},refblocks:{left1:{x:-0.55,y:-0.01},right1:{x:0.55,y:-0.01}},bounds:{minX:-0.58,maxX:0.58,minY:-0.52,maxY:0.43,width:1.16,height:1,centerX:0,centerY:-0.04},circles:{}},{paths:Mzn,texts:gbr,bounds:Gle,refblocks:Glt,circles:Bzn}=pue,wzn=sn({primitives:[...Object.values(Mzn),...Object.values(Bzn),{type:"text",text:"{REF}",x:-0.3,y:0.3094553499999995},{type:"text",text:"{VAL}",x:0.3,y:0.3094553499999995}],ports:[{...Glt.left1,labels:["1"]},{...Glt.right1,labels:["2"]}],size:{width:Gle.width,height:Gle.height},center:{x:Gle.centerX,y:Gle.centerY}}).changeTextAnchor("{VAL}","top_left").rotateRightFacingSymbol("down").labelPort("left1",["1","pos"]).labelPort("right1",["2","neg"]).changeTextAnchor("{REF}","bottom_left").build(),Tzn=sn(pue).changeTextAnchor("{VAL}","middle_top").rotateRightFacingSymbol("right").labelPort("left1",["2","neg"]).labelPort("right1",["1","pos"]).changeTextAnchor("{REF}","middle_bottom").build(),Dzn=sn(pue).changeTextAnchor("{VAL}","middle_top").labelPort("left1",["1"]).labelPort("right1",["2"]).changeTextAnchor("{REF}","middle_bottom").build(),{paths:Nzn,texts:fbr,bounds:Yle,refblocks:Ylt,circles:Rzn}=pue,Qzn=sn({primitives:[...Object.values(Nzn),...Object.values(Rzn),{type:"text",text:"{REF}",x:0.3,y:-0.3094553499999995},{type:"text",text:"{VAL}",x:-0.3,y:-0.3094553499999995}],ports:[{...Ylt.left1,labels:["1"]},{...Ylt.right1,labels:["2"]}],size:{width:Yle.width,height:Yle.height},center:{x:Yle.centerX,y:Yle.centerY}}).changeTextAnchor("{VAL}","middle_top").rotateRightFacingSymbol("up").labelPort("left1",["1","pos"]).labelPort("right1",["2","neg"]).changeTextAnchor("{REF}","bottom_left").build(),kzn=[{type:"path",points:[{x:-rJ,y:0},{x:-OEe,y:0}],color:"primary",fill:!1},{type:"path",points:[{x:OEe,y:0},{x:rJ,y:0}],color:"primary",fill:!1},{type:"circle",x:0,y:0,radius:OEe,color:"primary",fill:!1},{type:"path",points:[{x:-0.1,y:0},{x:0.15,y:0}],color:"primary",fill:!1},{type:"path",points:[{x:0.15,y:0},{x:0.05,y:0.08}],color:"primary",fill:!1},{type:"path",points:[{x:0.15,y:0},{x:0.05,y:-0.08}],color:"primary",fill:!1}],Lzn=sn({primitives:[...kzn,{type:"text",text:"{REF}",x:-0.2,y:0.35},{type:"text",text:"{VAL}",x:0.2,y:0.35}],ports:[{x:-rJ,y:0,labels:["1"]},{x:rJ,y:0,labels:["2"]}],center:{x:0,y:0},size:{width:rJ*2,height:0.9}}).rotateRightFacingSymbol("down").changeTextAnchor("{REF}","middle_left").changeTextAnchor("{VAL}","middle_left").build(),Fzn=[{type:"path",points:[{x:-sJ,y:0},{x:-zEe,y:0}],color:"primary",fill:!1},{type:"path",points:[{x:zEe,y:0},{x:sJ,y:0}],color:"primary",fill:!1},{type:"circle",x:0,y:0,radius:zEe,color:"primary",fill:!1},{type:"path",points:[{x:-0.1,y:0},{x:0.15,y:0}],color:"primary",fill:!1},{type:"path",points:[{x:0.15,y:0},{x:0.05,y:0.08}],color:"primary",fill:!1},{type:"path",points:[{x:0.15,y:0},{x:0.05,y:-0.08}],color:"primary",fill:!1}],Hzn=sn({primitives:[...Fzn,{type:"text",text:"{REF}",x:0,y:-0.4},{type:"text",text:"{VAL}",x:0,y:0.4}],ports:[{x:-sJ,y:0,labels:["1"]},{x:sJ,y:0,labels:["2"]}],center:{x:0,y:0},size:{width:sJ*2,height:0.9}}).rotateRightFacingSymbol("left").changeTextAnchor("{REF}","middle_bottom").changeTextAnchor("{VAL}","middle_top").build(),Ozn=[{type:"path",points:[{x:-aJ,y:0},{x:-GEe,y:0}],color:"primary",fill:!1},{type:"path",points:[{x:GEe,y:0},{x:aJ,y:0}],color:"primary",fill:!1},{type:"circle",x:0,y:0,radius:GEe,color:"primary",fill:!1},{type:"path",points:[{x:-0.1,y:0},{x:0.15,y:0}],color:"primary",fill:!1},{type:"path",points:[{x:0.15,y:0},{x:0.05,y:0.08}],color:"primary",fill:!1},{type:"path",points:[{x:0.15,y:0},{x:0.05,y:-0.08}],color:"primary",fill:!1}],zzn=sn({primitives:[...Ozn,{type:"text",text:"{REF}",x:0,y:0.4},{type:"text",text:"{VAL}",x:0,y:-0.4}],ports:[{x:-aJ,y:0,labels:["1"]},{x:aJ,y:0,labels:["2"]}],center:{x:0,y:0},size:{width:aJ*2,height:0.9}}).changeTextAnchor("{REF}","middle_bottom").changeTextAnchor("{VAL}","middle_top").build(),Gzn=[{type:"path",points:[{x:-cJ,y:0},{x:-YEe,y:0}],color:"primary",fill:!1},{type:"path",points:[{x:YEe,y:0},{x:cJ,y:0}],color:"primary",fill:!1},{type:"circle",x:0,y:0,radius:YEe,color:"primary",fill:!1},{type:"path",points:[{x:-0.1,y:0},{x:0.15,y:0}],color:"primary",fill:!1},{type:"path",points:[{x:0.15,y:0},{x:0.05,y:0.08}],color:"primary",fill:!1},{type:"path",points:[{x:0.15,y:0},{x:0.05,y:-0.08}],color:"primary",fill:!1}],Yzn=sn({primitives:[...Gzn,{type:"text",text:"{REF}",x:0.2,y:-0.35},{type:"text",text:"{VAL}",x:-0.2,y:-0.35}],ports:[{x:-cJ,y:0,labels:["1"]},{x:cJ,y:0,labels:["2"]}],center:{x:0,y:0},size:{width:cJ*2,height:0.9}}).rotateRightFacingSymbol("up").changeTextAnchor("{REF}","middle_left").changeTextAnchor("{VAL}","middle_left").build(),$z={paths:{path11:{type:"path",points:[{x:1.99,y:-1.64},{x:2.1,y:-1.64}],color:"primary",fill:!1},"path40-0":{type:"path",points:[{x:2.1,y:-1.48},{x:2.1,y:-1.8}],color:"primary",fill:!1},"path40-0-5":{type:"path",points:[{x:2.22,y:-1.5},{x:2.11,y:-1.58}],color:"primary",fill:!1},"path40-0-5-0":{type:"path",points:[{x:2.23,y:-1.78},{x:2.11,y:-1.7}],color:"primary",fill:!1},"path12-1-5":{type:"path",points:[{x:2.23,y:-1.49},{x:2.23,y:-1.14}],color:"primary",fill:!1},"path12-1-5-3":{type:"path",points:[{x:2.23,y:-1.97},{x:2.23,y:-1.79}],color:"primary",fill:!1},"arrow-2":{type:"path",points:[{x:2.17,y:-1.7},{x:2.13,y:-1.76},{x:2.19,y:-1.76},{x:2.17,y:-1.7}],color:"primary",fill:!0},path1:{type:"path",points:[{x:1.6,y:-1.5},{x:1.86,y:-1.5}],color:"primary",fill:!1},path2:{type:"path",points:[{x:1.87,y:-1.34},{x:1.87,y:-1.66}],color:"primary",fill:!1},path3:{type:"path",points:[{x:1.99,y:-1.36},{x:1.87,y:-1.44}],color:"primary",fill:!1},path4:{type:"path",points:[{x:1.99,y:-1.64},{x:1.88,y:-1.56}],color:"primary",fill:!1},"arrow-1":{type:"path",points:[{x:1.94,y:-1.56},{x:1.89,y:-1.62},{x:1.96,y:-1.62},{x:1.94,y:-1.56}],color:"primary",fill:!0},path9:{type:"path",points:[{x:1.99,y:-1.35},{x:2.23,y:-1.36}],color:"primary",fill:!1}},texts:{bottom1:{type:"text",text:"{VAL}",x:1.88,y:-1.94},right1:{type:"text",text:"{REF}",x:1.88,y:-1.14}},refblocks:{right1:{x:2.23,y:-1.97},right2:{x:1.6,y:-1.5},right3:{x:2.23,y:-1.14}},bounds:{minX:1.58,maxX:2.35,minY:-1.98,maxY:-1.12,width:0.77,height:0.86,centerX:1.96,centerY:-1.55},circles:{"path1-0":{type:"circle",x:2.05,y:-1.54,radius:0.3,color:"primary",fill:!1}}},Vzn=sn($z).rotateRightFacingSymbol("down").labelPort("right2",["1"]).labelPort("right1",["2"]).labelPort("right3",["3"]).changeTextAnchor("{VAL}","middle_left",{x:0.8,y:-0.15}).changeTextAnchor("{REF}","middle_left",{x:0,y:0.15}).build(),Uzn=sn($z).rotateRightFacingSymbol("right").labelPort("right2",["1"]).labelPort("right1",["2"]).labelPort("right3",["3"]).changeTextAnchor("{VAL}","middle_right").changeTextAnchor("{REF}","middle_right").build(),Wzn=sn($z).rotateRightFacingSymbol("left").labelPort("right2",["1"]).labelPort("right1",["2"]).labelPort("right3",["3"]).changeTextAnchor("{VAL}","middle_left",{x:0,y:-0.8}).changeTextAnchor("{REF}","middle_left",{x:0,y:0.8}).build(),Xzn=sn($z).rotateRightFacingSymbol("right").labelPort("right2",["1"]).labelPort("right1",["2"]).labelPort("right3",["3"]).changeTextAnchor("{VAL}","middle_right").changeTextAnchor("{REF}","middle_right").build(),Kzn=sn($z).rotateRightFacingSymbol("up").labelPort("right2",["1"]).labelPort("right1",["2"]).labelPort("right3",["3"]).changeTextAnchor("{VAL}","middle_left",{x:0,y:-0.15}).changeTextAnchor("{REF}","middle_left",{x:0.8,y:0.15}).build(),jzn=sn($z).rotateRightFacingSymbol("up").labelPort("right2",["1"]).labelPort("right1",["2"]).labelPort("right3",["3"]).changeTextAnchor("{VAL}","middle_left",{x:0,y:-0.15}).changeTextAnchor("{REF}","middle_left",{x:0.8,y:0.15}).build(),qzn={paths:{path11:{type:"path",points:[{x:-0.54,y:0},{x:-0.3,y:0}],color:"primary",fill:!1},path12:{type:"path",points:[{x:0.29,y:0},{x:0.54,y:0}],color:"primary",fill:!1},path2:{type:"path",points:[{x:-0.12,y:0.09},{x:0.12,y:0.09}],color:"primary",fill:!1}},texts:{top1:{type:"text",text:"{REF}",x:-0.18,y:-0.45},bottom1:{type:"text",text:"{VAL}",x:-0.01,y:0.35},left1:{type:"text",text:"A",x:0,y:-0.1}},refblocks:{left1:{x:-0.54,y:0},right1:{x:0.54,y:0}},bounds:{minX:-0.53,maxX:0.53,minY:-0.09,maxY:0.09,width:1.06,height:1,centerX:0,centerY:0},circles:{path1:{type:"circle",x:0,y:0,radius:0.29,color:"primary",fill:!1}}},{paths:Vlt,bounds:Vle,refblocks:Ult,circles:Jzn}=qzn,hJ=jc({primitives:[Vlt.path11,Vlt.path12,{type:"path",points:[{x:-0.12,y:0.14},{x:0.12,y:0.14}],color:"primary",fill:!1},...Object.values(Jzn),{type:"text",text:"{REF}",x:0,y:0.3594553499999995,anchor:"middle_bottom"},{type:"text",text:"{VAL}",x:0,y:-0.35,anchor:"middle_top"},{type:"path",points:[{x:-0.095,y:-0.16},{x:0,y:0.09}],color:"primary",fill:!1},{type:"path",points:[{x:0,y:0.09},{x:0.095,y:-0.16}],color:"primary",fill:!1},{type:"path",points:[{x:-0.048,y:-0.045},{x:0.048,y:-0.045}],color:"primary",fill:!1}],ports:[{...Ult.left1,labels:["1"]},{...Ult.right1,labels:["2"]}],size:{width:Vle.width,height:Vle.height},center:{x:Vle.centerX,y:Vle.centerY}}),h3e=structuredClone(hJ);h3e.primitives=h3e.primitives.map((e)=>e.type!=="text"?e:e.text==="{REF}"?{...e,x:-0.16,y:0.3594553499999995,anchor:"middle_bottom"}:e.text==="{VAL}"?{...e,x:0.16,y:0.35,anchor:"middle_bottom"}:e);Wlt=dJ(h3e,{newOrientation:"down"}),$zn=L5(hJ),Zzn=hJ,m3e=structuredClone(hJ);m3e.primitives=m3e.primitives.map((e)=>e.type!=="text"?e:e.text==="{REF}"?{...e,x:0.16,y:-0.3594553499999995,anchor:"middle_top"}:e.text==="{VAL}"?{...e,x:-0.16,y:-0.35,anchor:"middle_top"}:e);eGn=dJ(m3e,{newOrientation:"up"}),Zz={paths:{path11:{type:"path",points:[{x:-0.54,y:0.03},{x:-0.3,y:0.04}],color:"primary",fill:!1},path12:{type:"path",points:[{x:0.29,y:0.04},{x:0.54,y:0.04}],color:"primary",fill:!1},"path11-5-5":{type:"path",points:[{x:0.1,y:0.13},{x:0,y:-0.06},{x:-0.11,y:0.13}],color:"primary",fill:!1},path2:{type:"path",points:[{x:-0.12,y:-0.14},{x:0.12,y:-0.14}],color:"primary",fill:!1}},texts:{top1:{type:"text",text:"{REF}",x:-0.17,y:0.4},bottom1:{type:"text",text:"{VAL}",x:-0.01,y:-0.4}},refblocks:{left1:{x:-0.54,y:0.03},right1:{x:0.54,y:0.04}},bounds:{minX:-0.57,maxX:0.57,minY:-0.4,maxY:0.4,width:1.14,height:0.79,centerX:0,centerY:0},circles:{path1:{type:"circle",x:0,y:0.04,radius:0.29,color:"primary",fill:!1}}},{paths:tGn,texts:ybr,bounds:Ule,refblocks:Xlt,circles:nGn}=Zz,oGn=sn({primitives:[...Object.values(tGn),...Object.values(nGn),{type:"text",text:"{REF}",x:-0.15,y:0.3894553499999995},{type:"text",text:"{VAL}",x:0.15,y:0.3894553499999995}],ports:[{...Xlt.left1,labels:["1"]},{...Xlt.right1,labels:["2"]}],size:{width:Ule.width,height:Ule.height},center:{x:Ule.centerX,y:Ule.centerY}}).rotateRightFacingSymbol("down").labelPort("left1",["1"]).labelPort("right1",["2"]).changeTextAnchor("{REF}","middle_left").changeTextAnchor("{VAL}","middle_left").build(),{paths:iGn,texts:xbr,bounds:Wle,refblocks:Klt,circles:rGn}=Zz,sGn=sn({primitives:[...Object.values(iGn),...Object.values(rGn),{type:"text",text:"{REF}",x:-0,y:0.3894553499999995},{type:"text",text:"{VAL}",x:0,y:-0.3294553499999995}],ports:[{...Klt.left1,labels:["1"]},{...Klt.right1,labels:["2"]}],size:{width:Wle.width,height:Wle.height},center:{x:Wle.centerX,y:Wle.centerY}}).changeTextAnchor("{VAL}","middle_top").rotateRightFacingSymbol("right").labelPort("left1",["1"]).labelPort("right1",["2"]).changeTextAnchor("{REF}","middle_bottom").build(),{paths:aGn,texts:Cbr,bounds:Xle,refblocks:jlt,circles:cGn}=Zz,lGn=sn({primitives:[...Object.values(aGn),...Object.values(cGn),{type:"text",text:"{REF}",x:-0,y:-0.3294553499999995},{type:"text",text:"{VAL}",x:0,y:0.4294553499999995}],ports:[{...jlt.left1,labels:["1"]},{...jlt.right1,labels:["2"]}],size:{width:Xle.width,height:Xle.height},center:{x:Xle.centerX,y:Xle.centerY}}).changeTextAnchor("{VAL}","middle_bottom").rotateRightFacingSymbol("left").labelPort("left1",["1"]).labelPort("right1",["2"]).changeTextAnchor("{REF}","middle_bottom").build(),{paths:dGn,texts:Ibr,bounds:Kle,refblocks:qlt,circles:uGn}=Zz,hGn=sn({primitives:[...Object.values(dGn),...Object.values(uGn),{type:"text",text:"{REF}",x:-0,y:0.3894553499999995},{type:"text",text:"{VAL}",x:0,y:-0.3294553499999995}],ports:[{...qlt.left1,labels:["1"]},{...qlt.right1,labels:["2"]}],size:{width:Kle.width,height:Kle.height},center:{x:Kle.centerX,y:Kle.centerY}}).changeTextAnchor("{VAL}","middle_top").rotateRightFacingSymbol("right").labelPort("left1",["1"]).labelPort("right1",["2"]).changeTextAnchor("{REF}","middle_bottom").build(),{paths:mGn,texts:bbr,bounds:jle,refblocks:Jlt,circles:pGn}=Zz,AGn=sn({primitives:[...Object.values(mGn),...Object.values(pGn),{type:"text",text:"{REF}",x:0.15,y:-0.2894553499999995},{type:"text",text:"{VAL}",x:-0.15,y:-0.2894553499999995}],ports:[{...Jlt.left1,labels:["1"]},{...Jlt.right1,labels:["2"]}],size:{width:jle.width,height:jle.height},center:{x:jle.centerX,y:jle.centerY}}).rotateRightFacingSymbol("up").labelPort("left1",["1"]).labelPort("right1",["2"]).changeTextAnchor("{REF}","middle_left").changeTextAnchor("{VAL}","middle_left").build(),{paths:_Gn,texts:Sbr,bounds:qle,refblocks:$lt,circles:gGn}=Zz,fGn=sn({primitives:[...Object.values(_Gn),...Object.values(gGn),{type:"text",text:"{REF}",x:0.15,y:-0.2894553499999995},{type:"text",text:"{VAL}",x:-0.15,y:-0.2894553499999995}],ports:[{...$lt.left1,labels:["1"]},{...$lt.right1,labels:["2"]}],size:{width:qle.width,height:qle.height},center:{x:qle.centerX,y:qle.centerY}}).rotateRightFacingSymbol("up").labelPort("left1",["1"]).labelPort("right1",["2"]).changeTextAnchor("{REF}","middle_left").changeTextAnchor("{VAL}","middle_left").build(),eG={paths:{path11:{type:"path",points:[{x:-0.54,y:0.04},{x:-0.11,y:0.04}],color:"primary",fill:!1},path12:{type:"path",points:[{x:0.1,y:0.04},{x:0.54,y:0.04}],color:"primary",fill:!1},"path11-0":{type:"path",points:[{x:-0.09,y:-0.15},{x:-0.09,y:0.26}],color:"primary",fill:!1},"path11-0-3":{type:"path",points:[{x:0.09,y:-0.15},{x:0.09,y:0.26}],color:"primary",fill:!1},"path11-0-9":{type:"path",points:[{x:-0.08,y:0.06},{x:-0.08,y:-0.15},{x:0.09,y:-0.05},{x:-0.08,y:0.06}],color:"primary",fill:!0},"path11-0-9-0":{type:"path",points:[{x:0.08,y:0.26},{x:0.08,y:0.05},{x:-0.09,y:0.15},{x:0.07,y:0.26}],color:"primary",fill:!0}},texts:{top1:{type:"text",text:"{REF}",x:-0.03,y:0.42},bottom1:{type:"text",text:"{VAL}",x:-0.03,y:-0.42}},refblocks:{left1:{x:-0.54,y:0.04},right1:{x:0.54,y:0.04}},bounds:{minX:-0.57,maxX:0.57,minY:-0.42,maxY:0.42,width:1.14,height:0.83,centerX:0,centerY:0},circles:{path1:{type:"circle",x:0,y:0.05,radius:0.29,color:"primary",fill:!1}}},yGn=sn(eG).rotateRightFacingSymbol("down").labelPort("left1",["1"]).labelPort("right1",["2"]).changeTextAnchor("{REF}","middle_left",{x:-0.03,y:0.2}).changeTextAnchor("{VAL}","middle_left",{x:0.8,y:-0.2}).build(),xGn=sn(eG).rotateRightFacingSymbol("right").labelPort("left1",["1"]).labelPort("right1",["2"]).changeTextAnchor("{REF}","middle_bottom",{x:0,y:0.1}).changeTextAnchor("{VAL}","middle_top").build(),CGn=sn(eG).rotateRightFacingSymbol("left").labelPort("left1",["1"]).labelPort("right1",["2"]).changeTextAnchor("{REF}","middle_bottom",{x:0,y:0.8}).changeTextAnchor("{VAL}","middle_top",{x:0,y:-0.9}).build(),IGn=sn(eG).rotateRightFacingSymbol("right").labelPort("left1",["1"]).labelPort("right1",["2"]).changeTextAnchor("{REF}","middle_bottom",{x:0,y:0.1}).changeTextAnchor("{VAL}","middle_top").build(),bGn=sn(eG).rotateRightFacingSymbol("up").labelPort("left1",["1"]).labelPort("right1",["2"]).changeTextAnchor("{REF}","middle_left",{x:0.7,y:0.2}).changeTextAnchor("{VAL}","middle_left",{x:-0.13,y:-0.2}).build(),SGn=sn(eG).rotateRightFacingSymbol("up").labelPort("left1",["1"]).labelPort("right1",["2"]).changeTextAnchor("{REF}","middle_left",{x:0.7,y:0.2}).changeTextAnchor("{VAL}","middle_left",{x:-0.13,y:-0.2}).build(),Aue={paths:{triangle:{type:"path",points:[{x:-0.06,y:-0.09},{x:-0.06,y:0.09},{x:0.06,y:0},{x:-0.06,y:-0.09}],color:"primary",fill:!1},stem:{type:"path",points:[{x:-0.11,y:0},{x:-0.06,y:0}],color:"primary",fill:!1}},texts:{top1:{type:"text",text:"{REF}",x:0,y:0.03}},refblocks:{left1:{x:-0.11,y:0}},bounds:{minX:-0.57,maxX:0.57,minY:-0.37,maxY:0.37,width:1.14,height:0.74,centerX:0,centerY:0},circles:{}},{paths:PGn,bounds:Zlt,refblocks:vGn}=Aue,EGn=sn({primitives:[...Object.values(PGn),{type:"text",text:"{REF}",x:-0.13,y:-0}],ports:[{...vGn.left1,labels:["1"]}],center:{x:Zlt.centerX,y:Zlt.centerY}}).rotateRightFacingSymbol("up").labelPort("left1",["1"]).changeTextAnchor("{REF}","middle_top").build(),{paths:MGn,bounds:edt,refblocks:BGn}=Aue,wGn=sn({primitives:[...Object.values(MGn),{type:"text",text:"{REF}",x:-0.13,y:0}],ports:[{...BGn.left1,labels:["1"]}],center:{x:edt.centerX,y:edt.centerY}}).rotateRightFacingSymbol("right").labelPort("left1",["1"]).changeTextAnchor("{REF}","middle_right").build(),{paths:TGn,bounds:tdt,refblocks:DGn}=Aue,NGn=sn({primitives:[...Object.values(TGn),{type:"text",text:"{REF}",x:-0.13,y:-0}],ports:[{...DGn.left1,labels:["1"]}],center:{x:tdt.centerX,y:tdt.centerY}}).rotateRightFacingSymbol("left").labelPort("left1",["1"]).changeTextAnchor("{REF}","middle_left").build(),{paths:RGn,bounds:ndt,refblocks:QGn}=Aue,kGn=sn({primitives:[...Object.values(RGn),{type:"text",text:"{REF}",x:-0.13,y:0}],ports:[{...QGn.left1,labels:["1"]}],center:{x:ndt.centerX,y:ndt.centerY}}).rotateRightFacingSymbol("down").labelPort("left1",["1"]).changeTextAnchor("{REF}","middle_bottom").build(),LGn={paths:{path40:{type:"path",points:[{x:0.14,y:0.04},{x:-0.12,y:-0.09}],color:"primary",fill:!1},path41:{type:"path",points:[{x:-0.12,y:0.18},{x:0.14,y:0.04}],color:"primary",fill:!1},path42:{type:"path",points:[{x:-0.12,y:-0.09},{x:-0.12,y:0.18}],color:"primary",fill:!1},path43:{type:"path",points:[{x:0.14,y:0.18},{x:0.14,y:-0.09}],color:"primary",fill:!1},path44:{type:"path",points:[{x:-0.12,y:0.04},{x:-0.52,y:0.04}],color:"primary",fill:!1},"path44-0":{type:"path",points:[{x:0.52,y:0.04},{x:0.15,y:0.04}],color:"primary",fill:!1}},texts:{top1:{type:"text",text:"{REF}",x:-0.01,y:0.27},bottom1:{type:"text",text:"{VAL}",x:0,y:-0.27}},refblocks:{left1:{x:-0.52,y:0.04},right1:{x:0.52,y:0.04}},bounds:{minX:-0.55,maxX:0.55,minY:-0.27,maxY:0.27,width:1.09,height:0.55,centerX:0,centerY:0},circles:{}},_ue=sn(LGn).labelPort("left1",["1","pos","anode"]).labelPort("right1",["2","neg","cathode"]).changeTextAnchor("{REF}","middle_bottom").changeTextAnchor("{VAL}","middle_top").build(),FGn=yo(_ue,"down"),HGn=yo(_ue,"left"),gue={paths:{"anode-lead":{type:"path",points:[{x:-0.25,y:0},{x:-0.11999999999999988,y:0}],color:"primary",fill:!1},body:{type:"path",points:[{x:-0.11999999999999988,y:0.11999999999999988},{x:0.1200000000000001,y:0},{x:-0.11999999999999988,y:-0.1200000000000001},{x:-0.11999999999999988,y:0.11999999999999988}],color:"primary",fill:!1},"cathode-bar":{type:"path",points:[{x:0.1200000000000001,y:0.11999999999999988},{x:0.1200000000000001,y:-0.1200000000000001}],color:"primary",fill:!1},"cathode-lead":{type:"path",points:[{x:0.1200000000000001,y:0},{x:0.25,y:0}],color:"primary",fill:!1}},texts:{top1:{type:"text",text:"{REF}",x:0,y:0.25},bottom1:{type:"text",text:"{VAL}",x:0,y:-0.25}},refblocks:{left1:{x:-0.25,y:0},right1:{x:0.25,y:0}},bounds:{minX:-0.25,maxX:0.25,minY:-0.25,maxY:0.25,width:0.5,height:0.5,centerX:0,centerY:0},circles:{}},OGn=fr(gue,{kind:"diode",orientation:"down",pin1Labels:["1","pos","anode"],pin2Labels:["2","neg","cathode"]}),zGn=fr(gue,{kind:"diode",orientation:"left",pin1Labels:["1","pos","anode"],pin2Labels:["2","neg","cathode"]}),GGn=fr(gue,{kind:"diode",orientation:"right",pin1Labels:["1","pos","anode"],pin2Labels:["2","neg","cathode"]}),YGn=fr(gue,{kind:"diode",orientation:"up",pin1Labels:["1","pos","anode"],pin2Labels:["2","neg","cathode"]}),VGn=yo(_ue,"up"),fue={paths:{"anode-lead":{type:"path",points:[{x:-0.17499999999999982,y:0},{x:-0.09999999999999987,y:0}],color:"primary",fill:!1},body:{type:"path",points:[{x:-0.09999999999999987,y:0.09999999999999987},{x:0.10000000000000009,y:0},{x:-0.09999999999999987,y:-0.10000000000000009},{x:-0.09999999999999987,y:0.09999999999999987}],color:"primary",fill:!1},"cathode-bar":{type:"path",points:[{x:0.10000000000000009,y:0.09999999999999987},{x:0.10000000000000009,y:-0.10000000000000009}],color:"primary",fill:!1},"cathode-lead":{type:"path",points:[{x:0.10000000000000009,y:0},{x:0.17500000000000004,y:0}],color:"primary",fill:!1}},texts:{top1:{type:"text",text:"{REF}",x:0,y:0.25},bottom1:{type:"text",text:"{VAL}",x:0,y:-0.25}},refblocks:{left1:{x:-0.17499999999999982,y:0},right1:{x:0.17500000000000004,y:0}},bounds:{minX:-0.17499999999999982,maxX:0.17500000000000004,minY:-0.25,maxY:0.25,width:0.34999999999999987,height:0.5,centerX:0.00000000000000011102230246251565,centerY:0},circles:{}},UGn=fr(fue,{kind:"diode",orientation:"down",pin1Labels:["1","pos","anode"],pin2Labels:["2","neg","cathode"]}),WGn=fr(fue,{kind:"diode",orientation:"left",pin1Labels:["1","pos","anode"],pin2Labels:["2","neg","cathode"]}),XGn=fr(fue,{kind:"diode",orientation:"right",pin1Labels:["1","pos","anode"],pin2Labels:["2","neg","cathode"]}),KGn=fr(fue,{kind:"diode",orientation:"up",pin1Labels:["1","pos","anode"],pin2Labels:["2","neg","cathode"]}),jGn={paths:{path1:{type:"path",points:[{x:-0.37,y:0.22},{x:-0.13,y:0.22}],color:"primary",fill:!1},"path-1-2":{type:"path",points:[{x:-0.07,y:0.22},{x:0.11,y:0.16}],color:"primary",fill:!1},path2:{type:"path",points:[{x:0.1,y:0.13},{x:0.37,y:0.13}],color:"primary",fill:!1},path3:{type:"path",points:[{x:0.12,y:0.36},{x:0.37,y:0.36}],color:"primary",fill:!1},path4:{type:"path",points:[{x:-0.37,y:-0.18},{x:-0.13,y:-0.18}],color:"primary",fill:!1},"path4-5":{type:"path",points:[{x:-0.07,y:-0.19},{x:0.1,y:-0.24}],color:"primary",fill:!1},path5:{type:"path",points:[{x:0.1,y:-0.27},{x:0.37,y:-0.27}],color:"primary",fill:!1},path6:{type:"path",points:[{x:0.12,y:-0.04},{x:0.37,y:-0.04}],color:"primary",fill:!1},"path1-4-join":{type:"path",points:[{x:0,y:-0.2},{x:0,y:0.19}],color:"primary",fill:!1}},texts:{top1:{type:"text",text:"{REF}",x:0,y:0.56},bottom1:{type:"text",text:"{VAL}",x:0,y:-0.42}},refblocks:{left1:{x:-0.37,y:0.22},left2:{x:-0.37,y:-0.18},right1:{x:0.37,y:0.36},right2:{x:0.37,y:0.13},right3:{x:0.37,y:-0.04},right5:{x:0.37,y:-0.27}},bounds:{minX:-0.4,maxX:0.4,minY:-0.47,maxY:0.56,width:1,height:1.04,centerX:0,centerY:0.05},circles:{"circle-2":{type:"circle",x:0.08,y:0.13,radius:0.02,color:"primary",fill:!1},"circle-5":{type:"circle",x:0.08,y:-0.27,radius:0.02,color:"primary",fill:!1},"circle-3":{type:"circle",x:0.08,y:0.37,radius:0.02,color:"primary",fill:!1},"circle-6":{type:"circle",x:0.08,y:-0.04,radius:0.02,color:"primary",fill:!1},"circle-1":{type:"circle",x:-0.1,y:0.22,radius:0.02,color:"primary",fill:!1},"circle-4":{type:"circle",x:-0.1,y:-0.18,radius:0.02,color:"primary",fill:!1}}},yue=sn(jGn).labelPort("left1",["1"]).labelPort("right1",["3"]).labelPort("right2",["2"]).labelPort("right3",["6"]).labelPort("left2",["4"]).labelPort("right5",["5"]).changeTextAnchor("{REF}","middle_bottom").changeTextAnchor("{VAL}","middle_top").build(),C3e=yo(yue,"down"),I3e=C3e.primitives.find((e)=>e.type==="text"&&e.text==="{REF}"),b3e=C3e.primitives.find((e)=>e.type==="text"&&e.text==="{VAL}");I3e.anchor="middle_bottom";b3e.anchor="middle_top";I3e.x=0;I3e.y+=0.537;b3e.y-=0.5375;b3e.x=0;qGn=C3e,S3e=yo(yue,"left"),P3e=S3e.primitives.find((e)=>e.type==="text"&&e.text==="{REF}"),v3e=S3e.primitives.find((e)=>e.type==="text"&&e.text==="{VAL}");P3e.anchor="middle_bottom";v3e.anchor="middle_top";P3e.x=0;P3e.y+=1;v3e.y-=1;v3e.x=0;JGn=S3e,E3e=yo(yue,"up"),M3e=E3e.primitives.find((e)=>e.type==="text"&&e.text==="{REF}"),B3e=E3e.primitives.find((e)=>e.type==="text"&&e.text==="{VAL}");M3e.anchor="middle_bottom";B3e.anchor="middle_top";M3e.x=0;M3e.y+=0.537;B3e.y-=0.5375;B3e.x=0;$Gn=E3e,ZGn={paths:{path1:{type:"path",points:[{x:-0.37,y:0.22},{x:-0.13,y:0.22}],color:"primary",fill:!1},"path-1-3":{type:"path",points:[{x:-0.07,y:0.23},{x:0.11,y:0.33}],color:"primary",fill:!1},path2:{type:"path",points:[{x:0.1,y:0.13},{x:0.37,y:0.13}],color:"primary",fill:!1},path3:{type:"path",points:[{x:0.12,y:0.36},{x:0.37,y:0.36}],color:"primary",fill:!1},path4:{type:"path",points:[{x:-0.37,y:-0.18},{x:-0.13,y:-0.18}],color:"primary",fill:!1},"path4-6":{type:"path",points:[{x:-0.07,y:-0.18},{x:0.11,y:-0.07}],color:"primary",fill:!1},path5:{type:"path",points:[{x:0.1,y:-0.27},{x:0.37,y:-0.27}],color:"primary",fill:!1},path6:{type:"path",points:[{x:0.12,y:-0.04},{x:0.37,y:-0.04}],color:"primary",fill:!1},"path1-4-join":{type:"path",points:[{x:0,y:-0.12},{x:0,y:0.27}],color:"primary",fill:!1}},texts:{top1:{type:"text",text:"{REF}",x:0,y:0.61},bottom1:{type:"text",text:"{VAL}",x:0,y:-0.52}},refblocks:{left1:{x:-0.37,y:0.22},left2:{x:-0.37,y:-0.18},right1:{x:0.37,y:0.36},right2:{x:0.37,y:0.13},right3:{x:0.37,y:-0.04},right5:{x:0.37,y:-0.27}},bounds:{minX:-0.4,maxX:0.4,minY:-0.47,maxY:0.56,width:1,height:1.04,centerX:0,centerY:0.05},circles:{"circle-2":{type:"circle",x:0.08,y:0.13,radius:0.02,color:"primary",fill:!1},"circle-5":{type:"circle",x:0.08,y:-0.27,radius:0.02,color:"primary",fill:!1},"circle-3":{type:"circle",x:0.08,y:0.37,radius:0.02,color:"primary",fill:!1},"circle-6":{type:"circle",x:0.08,y:-0.04,radius:0.02,color:"primary",fill:!1},"circle-1":{type:"circle",x:-0.1,y:0.22,radius:0.02,color:"primary",fill:!1},"circle-4":{type:"circle",x:-0.1,y:-0.18,radius:0.02,color:"primary",fill:!1}}},xue=sn(ZGn).labelPort("left1",["1"]).labelPort("right1",["3"]).labelPort("right2",["2"]).labelPort("right3",["6"]).labelPort("left2",["4"]).labelPort("right5",["5"]).changeTextAnchor("{REF}","middle_bottom").changeTextAnchor("{VAL}","middle_top").build(),w3e=yo(xue,"down"),T3e=w3e.primitives.find((e)=>e.type==="text"&&e.text==="{REF}"),D3e=w3e.primitives.find((e)=>e.type==="text"&&e.text==="{VAL}");T3e.anchor="middle_bottom";D3e.anchor="middle_top";T3e.x=0;T3e.y+=0.565;D3e.y-=0.555;D3e.x=0;eYn=w3e,N3e=yo(xue,"left"),R3e=N3e.primitives.find((e)=>e.type==="text"&&e.text==="{REF}"),Q3e=N3e.primitives.find((e)=>e.type==="text"&&e.text==="{VAL}");R3e.anchor="middle_bottom";Q3e.anchor="middle_top";R3e.x=0;R3e.y+=1.09;Q3e.y-=1.09;Q3e.x=0;tYn=N3e,k3e=yo(xue,"up"),L3e=k3e.primitives.find((e)=>e.type==="text"&&e.text==="{REF}"),F3e=k3e.primitives.find((e)=>e.type==="text"&&e.text==="{VAL}");L3e.anchor="middle_bottom";F3e.anchor="middle_top";L3e.x=0;L3e.y+=0.565;F3e.y-=0.555;F3e.x=0;nYn=k3e,oYn={paths:{path11:{type:"path",points:[{x:-0.38,y:0.06},{x:-0.14,y:0.06}],color:"primary",fill:!1},"path11-0":{type:"path",points:[{x:-0.09,y:0.07},{x:0.11,y:0.11}],color:"primary",fill:!1},path12:{type:"path",points:[{x:0.13,y:0.06},{x:0.38,y:0.06}],color:"primary",fill:!1},"path11-5":{type:"path",points:[{x:-0.38,y:-0.17},{x:-0.14,y:-0.17}],color:"primary",fill:!1},"path11-0-3":{type:"path",points:[{x:-0.09,y:-0.17},{x:0.11,y:-0.12}],color:"primary",fill:!1},"path12-0":{type:"path",points:[{x:0.13,y:-0.17},{x:0.38,y:-0.17}],color:"primary",fill:!1}},texts:{top1:{type:"text",text:"{REF}",x:0,y:0.31},bottom1:{type:"text",text:"{VAL}",x:0,y:-0.31}},refblocks:{left1:{x:-0.38,y:-0.17},left3:{x:-0.38,y:0.06},right1:{x:0.38,y:-0.17},right3:{x:0.38,y:0.06}},bounds:{minX:-0.4,maxX:0.4,minY:-0.4,maxY:0.4,width:0.81,height:0.79,centerX:0,centerY:0},circles:{"circle-4":{type:"circle",x:0.1,y:0.06,radius:0.02,color:"primary",fill:!1},"circle-2":{type:"circle",x:0.1,y:-0.17,radius:0.02,color:"primary",fill:!1},"circle-3":{type:"circle",x:-0.11,y:0.06,radius:0.02,color:"primary",fill:!1},"circle-1":{type:"circle",x:-0.11,y:-0.17,radius:0.02,color:"primary",fill:!1}}},Cue=sn(oYn).labelPort("left1",["1"]).labelPort("right1",["2"]).labelPort("right3",["4"]).labelPort("left3",["3"]).changeTextAnchor("{REF}","middle_bottom").changeTextAnchor("{VAL}","middle_top").build(),H3e=yo(Cue,"down"),O3e=H3e.primitives.find((e)=>e.type==="text"&&e.text==="{REF}"),z3e=H3e.primitives.find((e)=>e.type==="text"&&e.text==="{VAL}");O3e.anchor="middle_bottom";z3e.anchor="middle_top";O3e.x=0.4;O3e.y+=0.265;z3e.y-=0.265;z3e.x=0.4;iYn=H3e,G3e=yo(Cue,"left"),Y3e=G3e.primitives.find((e)=>e.type==="text"&&e.text==="{REF}"),V3e=G3e.primitives.find((e)=>e.type==="text"&&e.text==="{VAL}");Y3e.anchor="middle_bottom";V3e.anchor="middle_top";Y3e.x=0;Y3e.y+=0.67;V3e.y-=0.67;V3e.x=0;rYn=G3e,U3e=yo(Cue,"up"),W3e=U3e.primitives.find((e)=>e.type==="text"&&e.text==="{REF}"),X3e=U3e.primitives.find((e)=>e.type==="text"&&e.text==="{VAL}");W3e.anchor="middle_bottom";X3e.anchor="middle_top";W3e.x=0.46;W3e.y+=0.265;X3e.y-=0.265;X3e.x=0.46;sYn=U3e,aYn={paths:{path11:{type:"path",points:[{x:-0.38,y:0.06},{x:-0.14,y:0.06}],color:"primary",fill:!1},"path11-0":{type:"path",points:[{x:-0.09,y:0.07},{x:0.1,y:0.2}],color:"primary",fill:!1},path12:{type:"path",points:[{x:0.13,y:0.06},{x:0.38,y:0.06}],color:"primary",fill:!1},"path11-5":{type:"path",points:[{x:-0.38,y:-0.17},{x:-0.14,y:-0.17}],color:"primary",fill:!1},"path11-0-3":{type:"path",points:[{x:-0.09,y:-0.16},{x:0.1,y:-0.03}],color:"primary",fill:!1},"path12-0":{type:"path",points:[{x:0.13,y:-0.17},{x:0.38,y:-0.17}],color:"primary",fill:!1}},texts:{top1:{type:"text",text:"{REF}",x:0,y:0.42},bottom1:{type:"text",text:"{VAL}",x:0,y:-0.42}},refblocks:{left1:{x:-0.38,y:-0.17},left3:{x:-0.38,y:0.06},right1:{x:0.38,y:-0.17},right3:{x:0.38,y:0.06}},bounds:{minX:-0.4,maxX:0.4,minY:-0.4,maxY:0.4,width:0.81,height:0.79,centerX:0,centerY:0},circles:{"circle-4":{type:"circle",x:0.1,y:0.06,radius:0.02,color:"primary",fill:!1},"circle-2":{type:"circle",x:0.1,y:-0.17,radius:0.02,color:"primary",fill:!1},"circle-3":{type:"circle",x:-0.11,y:0.06,radius:0.02,color:"primary",fill:!1},"circle-1":{type:"circle",x:-0.11,y:-0.17,radius:0.02,color:"primary",fill:!1}}},Iue=sn(aYn).labelPort("left1",["1"]).labelPort("right1",["2"]).labelPort("right3",["4"]).labelPort("left3",["3"]).changeTextAnchor("{REF}","middle_bottom").changeTextAnchor("{VAL}","middle_top").build(),K3e=yo(Iue,"down"),j3e=K3e.primitives.find((e)=>e.type==="text"&&e.text==="{REF}"),q3e=K3e.primitives.find((e)=>e.type==="text"&&e.text==="{VAL}");j3e.anchor="middle_bottom";q3e.anchor="middle_top";j3e.x=0.4;j3e.y+=0.295;q3e.y-=0.295;q3e.x=0.42;cYn=K3e,J3e=yo(Iue,"left"),$3e=J3e.primitives.find((e)=>e.type==="text"&&e.text==="{REF}"),Z3e=J3e.primitives.find((e)=>e.type==="text"&&e.text==="{VAL}");$3e.anchor="middle_bottom";Z3e.anchor="middle_top";$3e.x=0;$3e.y+=0.795;Z3e.y-=0.795;Z3e.x=0;lYn=J3e,e4e=yo(Iue,"up"),t4e=e4e.primitives.find((e)=>e.type==="text"&&e.text==="{REF}"),n4e=e4e.primitives.find((e)=>e.type==="text"&&e.text==="{VAL}");t4e.anchor="middle_bottom";n4e.anchor="middle_top";t4e.x=0.46;t4e.y+=0.315;n4e.y-=0.315;n4e.x=0.46;dYn=e4e,Jle={paths:{"left-terminal-lead":{type:"path",points:[{x:-0.7,y:0.06000000000000005},{x:-0.3938805999999999,y:0.06000000000000005}],color:"primary",fill:!1},"diode-bridge":{type:"path",points:[{x:-0.2763954999999998,y:0.06000000000000005},{x:0.27446270000000017,y:0.06000000000000005}],color:"primary",fill:!1},"right-terminal-lead":{type:"path",points:[{x:0.39193030000000006,y:0.06000000000000005},{x:0.7000000000000002,y:0.06000000000000005}],color:"primary",fill:!1},"junction-lead":{type:"path",points:[{x:0,y:0.06000000000000005},{x:0,y:-0.2200000000000002}],color:"primary",fill:!1},"first-diode-body":{type:"path",points:[{x:-0.3938805999999999,y:0.12609950000000003},{x:-0.2783806,y:0.05897259999999993},{x:-0.3938805999999999,y:-0.007179100000000105},{x:-0.3938805999999999,y:0.12609950000000003}],color:"primary",fill:!1},"first-cathode-bar":{type:"path",points:[{x:-0.2763954999999998,y:0.1754652000000001},{x:-0.2763954999999998,y:-0.05455969999999999},{x:-0.23000749999999992,y:-0.05455969999999999},{x:-0.23000749999999992,y:-0.027900499999999884}],color:"primary",fill:!1},"first-cathode-upper-hook":{type:"path",points:[{x:-0.32379350000000007,y:0.13499749999999988},{x:-0.3228009999999999,y:0.1754652000000001},{x:-0.2763954999999998,y:0.1754652000000001}],color:"primary",fill:!1},"second-diode-body":{type:"path",points:[{x:0.27446270000000017,y:0.12609950000000003},{x:0.3899626999999999,y:0.05897259999999993},{x:0.27446270000000017,y:-0.007179100000000105},{x:0.27446270000000017,y:0.12609950000000003}],color:"primary",fill:!1},"second-cathode-bar":{type:"path",points:[{x:0.39193030000000006,y:0.1754652000000001},{x:0.39193030000000006,y:-0.05455969999999999},{x:0.43931089999999995,y:-0.05455969999999999},{x:0.43931089999999995,y:-0.027900499999999884}],color:"primary",fill:!1},"second-cathode-upper-hook":{type:"path",points:[{x:0.3455249,y:0.13499749999999988},{x:0.3465174000000002,y:0.1754652000000001},{x:0.39193030000000006,y:0.1754652000000001}],color:"primary",fill:!1}},texts:{top1:{type:"text",text:"{REF}",x:0,y:0.3400000000000001},bottom1:{type:"text",text:"{VAL}",x:0,y:-0.3400000000000001}},refblocks:{bottom1:{x:0,y:-0.2200000000000002},left1:{x:-0.7,y:0.06000000000000005},right1:{x:0.7000000000000002,y:0.06000000000000005}},bounds:{minX:-0.7,maxX:0.7000000000000002,minY:-0.3400000000000001,maxY:0.3400000000000001,width:1.4000000000000001,height:0.6800000000000002,centerX:0.00000000000000011102230246251565,centerY:0},circles:{"junction-dot":{type:"circle",x:0,y:0.06000000000000005,radius:0.024291,color:"primary",fill:!0}}},uYn={right:{reference:{x:0,y:0.34},value:{x:0,y:-0.34}},up:{reference:{x:0.17,y:-0.34},value:{x:-0.17,y:-0.34}},down:{reference:{x:-0.17,y:0.34},value:{x:0.17,y:0.34}}},hYn=o4e("down"),Eut=o4e("right"),mYn=L5(Eut),pYn=o4e("up"),Mut={paths:{path5:{type:"path",points:[{x:-0.44,y:0},{x:-0.16,y:0}],color:"primary",fill:!1},path6:{type:"path",points:[{x:0.17,y:0},{x:0.44,y:0.01}],color:"primary",fill:!1},path9:{type:"path",points:[{x:-0.25,y:-0.16},{x:0.02,y:0.3},{x:0.25,y:0.17},{x:-0.02,y:-0.29},{x:-0.25,y:-0.16}],color:"primary",fill:!1}},texts:{top1:{type:"text",text:"{REF}",x:0,y:0.37},bottom1:{type:"text",text:"{VAL}",x:0,y:-0.37}},refblocks:{left1:{x:-0.44,y:0},right1:{x:0.44,y:0.01}},bounds:{minX:-0.57,maxX:0.57,minY:-0.25,maxY:0.25,width:1.13,height:0.5,centerX:0,centerY:0},circles:{}},{paths:AYn,texts:Pbr,bounds:$le,refblocks:odt,circles:_Yn}=Mut,But=sn({primitives:[...Object.values(AYn),...Object.values(_Yn),{type:"text",text:"{REF}",x:0.18,y:-0.3204553499999995},{type:"text",text:"{VAL}",x:-0.25,y:-0.3294553499999995}],ports:[{...odt.left1,labels:["1"]},{...odt.right1,labels:["2"]}],size:{width:$le.width,height:$le.height},center:{x:$le.centerX,y:$le.centerY}}).rotateRightFacingSymbol("up").labelPort("left",["1"]).labelPort("right",["2"]).changeTextAnchor("{REF}","middle_left").changeTextAnchor("{VAL}","middle_left").build(),i4e=Kz(But),r4e=i4e.primitives.find((e)=>e.type==="text"&&e.text==="{REF}"),s4e=i4e.primitives.find((e)=>e.type==="text"&&e.text==="{VAL}");r4e.anchor="middle_left";s4e.anchor="middle_left";r4e.y+=0.4;r4e.x=0.32;s4e.y-=0.45;s4e.x=0.32;gYn=i4e,wut=sn(Mut).labelPort("left1",["1"]).labelPort("right1",["2"]).changeTextAnchor("{REF}","middle_bottom").changeTextAnchor("{VAL}","middle_top").build(),fYn=L5(wut),tG={paths:{path11:{type:"path",points:[{x:-0.56,y:0.04},{x:-0.22,y:0.04}],color:"primary",fill:!1},path12:{type:"path",points:[{x:0.14,y:0.05},{x:0.48,y:0.05}],color:"primary",fill:!1},"path12-6":{type:"path",points:[{x:0.14,y:-0.15},{x:0.14,y:0.25}],color:"primary",fill:!1},"path11-0-9":{type:"path",points:[{x:-0.22,y:0.25},{x:-0.21,y:-0.15},{x:0.14,y:0.05},{x:-0.22,y:0.25}],color:"primary",fill:!0}},texts:{top1:{type:"text",text:"{REF}",x:-0.09,y:0.38},bottom1:{type:"text",text:"{VAL}",x:-0.07,y:-0.38},right1:{type:"text",text:"",x:0.59,y:-0.33}},refblocks:{left1:{x:-0.56,y:0.04},right1:{x:0.48,y:0.05}},bounds:{minX:-0.59,maxX:0.59,minY:-0.38,maxY:0.38,width:1.18,height:0.76,centerX:0,centerY:0},circles:{}},{paths:yYn,texts:vbr,bounds:Zle,refblocks:idt,circles:xYn}=tG,CYn=sn({primitives:[...Object.values(yYn),...Object.values(xYn),{type:"text",text:"{REF}",x:-0.15,y:0.3294553499999995},{type:"text",text:"{VAL}",x:0.15,y:0.3294553499999995}],ports:[{...idt.left1,labels:["1"]},{...idt.right1,labels:["2"]}],size:{width:Zle.width,height:Zle.height},center:{x:Zle.centerX,y:Zle.centerY}}).rotateRightFacingSymbol("down").labelPort("left1",["1"]).labelPort("right1",["2"]).changeTextAnchor("{REF}","middle_left").changeTextAnchor("{VAL}","middle_left").build(),{paths:IYn,texts:Ebr,bounds:ede,refblocks:rdt,circles:bYn}=tG,SYn=sn({primitives:[...Object.values(IYn),...Object.values(bYn),{type:"text",text:"{REF}",x:-0,y:0.4094553499999995},{type:"text",text:"{VAL}",x:0,y:-0.4094553499999995}],ports:[{...rdt.left1,labels:["1"]},{...rdt.right1,labels:["2"]}],size:{width:ede.width,height:ede.height},center:{x:ede.centerX,y:ede.centerY}}).changeTextAnchor("{VAL}","middle_top").rotateRightFacingSymbol("right").labelPort("left1",["1"]).labelPort("right1",["2"]).changeTextAnchor("{REF}","middle_bottom").build(),{paths:PYn,texts:Mbr,bounds:tde,refblocks:sdt,circles:vYn}=tG,EYn=sn({primitives:[...Object.values(PYn),...Object.values(vYn),{type:"text",text:"{REF}",x:-0,y:-0.3094553499999995},{type:"text",text:"{VAL}",x:0,y:0.4094553499999995}],ports:[{...sdt.left1,labels:["1"]},{...sdt.right1,labels:["2"]}],size:{width:tde.width,height:tde.height},center:{x:tde.centerX,y:tde.centerY}}).changeTextAnchor("{VAL}","middle_bottom").rotateRightFacingSymbol("left").labelPort("left1",["1"]).labelPort("right1",["2"]).changeTextAnchor("{REF}","middle_bottom").build(),{paths:MYn,texts:Bbr,bounds:nde,refblocks:adt,circles:BYn}=tG,wYn=sn({primitives:[...Object.values(MYn),...Object.values(BYn),{type:"text",text:"{REF}",x:-0,y:0.4094553499999995},{type:"text",text:"{VAL}",x:0,y:-0.4094553499999995}],ports:[{...adt.left1,labels:["1"]},{...adt.right1,labels:["2"]}],size:{width:nde.width,height:nde.height},center:{x:nde.centerX,y:nde.centerY}}).changeTextAnchor("{VAL}","middle_top").rotateRightFacingSymbol("right").labelPort("left1",["1"]).labelPort("right1",["2"]).changeTextAnchor("{REF}","middle_bottom").build(),{paths:TYn,texts:wbr,bounds:ode,refblocks:cdt,circles:DYn}=tG,NYn=sn({primitives:[...Object.values(TYn),...Object.values(DYn),{type:"text",text:"{REF}",x:0.15,y:-0.2894553499999995},{type:"text",text:"{VAL}",x:-0.15,y:-0.2894553499999995}],ports:[{...cdt.left1,labels:["1"]},{...cdt.right1,labels:["2"]}],size:{width:ode.width,height:ode.height},center:{x:ode.centerX,y:ode.centerY}}).rotateRightFacingSymbol("up").labelPort("left1",["1"]).labelPort("right1",["2"]).changeTextAnchor("{REF}","middle_left").changeTextAnchor("{VAL}","middle_left").build(),{paths:RYn,texts:Tbr,bounds:ide,refblocks:ldt,circles:QYn}=tG,kYn=sn({primitives:[...Object.values(RYn),...Object.values(QYn),{type:"text",text:"{REF}",x:0.15,y:-0.2894553499999995},{type:"text",text:"{VAL}",x:-0.15,y:-0.2894553499999995}],ports:[{...ldt.left1,labels:["1"]},{...ldt.right1,labels:["2"]}],size:{width:ide.width,height:ide.height},center:{x:ide.centerX,y:ide.centerY}}).rotateRightFacingSymbol("up").labelPort("left1",["1"]).labelPort("right1",["2"]).changeTextAnchor("{REF}","middle_left").changeTextAnchor("{VAL}","middle_left").build(),LYn={paths:{path11:{type:"path",points:[{x:-0.54,y:0},{x:-0.3,y:0}],color:"primary",fill:!1},path12:{type:"path",points:[{x:0.29,y:0},{x:0.54,y:0}],color:"primary",fill:!1}},texts:{top1:{type:"text",text:"{REF}",x:-0.18,y:-0.36},bottom1:{type:"text",text:"{VAL}",x:-0.01,y:0.43},left1:{type:"text",text:"Hz",x:0,y:-0.04}},refblocks:{left1:{x:-0.54,y:0},right1:{x:0.54,y:0}},bounds:{minX:-0.53,maxX:0.53,minY:0,maxY:0,width:1.06,height:1,centerX:0,centerY:0},circles:{path1:{type:"circle",x:-0.01,y:-0.01,radius:0.29,color:"primary",fill:!1}}},{paths:FYn,texts:HYn,bounds:rde,refblocks:ddt,circles:OYn}=LYn,a4e=jc({primitives:[...Object.values(FYn),...Object.values(OYn),{type:"text",text:"{REF}",x:0,y:-0.3594553499999995,anchor:"middle_top"},{type:"text",text:"{VAL}",x:0,y:0.35,anchor:"middle_bottom"},{...HYn.left1,x:0,y:0.01,anchor:"center",fontSize:0.2}],ports:[{...ddt.left1,labels:["1"]},{...ddt.right1,labels:["2"]}],size:{width:rde.width,height:rde.height},center:{x:rde.centerX,y:rde.centerY}}),{5:zYn,...GYn}=a4e.primitives;udt=yo({...a4e,primitives:Object.values(GYn).filter(YYn)}),VYn={...udt,primitives:[...udt.primitives,zYn]},UYn={paths:{path10:{type:"path",points:[{x:-0.53,y:0.04},{x:0.53,y:0.04}],color:"primary",fill:!1},path14:{type:"path",points:[{x:0,y:0.17},{x:0.27,y:0.17},{x:0.27,y:-0.1},{x:-0.26,y:-0.1},{x:-0.26,y:0.17},{x:0,y:0.17}],color:"primary",fill:!1}},texts:{top1:{type:"text",text:"{REF}",x:-0.01,y:0.24},bottom1:{type:"text",text:"{VAL}",x:-0.17,y:-0.24}},refblocks:{left1:{x:-0.53,y:0.04},right1:{x:0.53,y:0.04}},bounds:{minX:-0.56,maxX:0.56,minY:-0.24,maxY:0.24,width:1.13,height:0.47,centerX:0,centerY:0},circles:{}},{paths:WYn,texts:XYn,bounds:sde,refblocks:hdt}=UYn,Tut=jc({primitives:[...Object.values(WYn),{...XYn.top1,anchor:"middle_bottom"},{type:"text",text:"{VAL}",x:0,y:-0.2,anchor:"middle_top"}],ports:[{...hdt.left1,labels:["1"]},{...hdt.right1,labels:["2"]}],size:{width:sde.width,height:sde.height},center:{x:sde.centerX,y:sde.centerY}}),KYn=yo(Tut),nG={paths:{path1:{type:"path",points:[{x:-0.29,y:0.01},{x:0.04,y:0}],color:"primary",fill:!0},path2:{type:"path",points:[{x:0.04,y:-0.22},{x:0.04,y:0.22}],color:"primary",fill:!0},path3:{type:"path",points:[{x:0.12,y:-0.17},{x:0.12,y:0.17}],color:"primary",fill:!0},path4:{type:"path",points:[{x:0.19,y:-0.06},{x:0.19,y:0.06}],color:"primary",fill:!0}},texts:{right1:{type:"text",text:"{REF}",x:0.31,y:-0.02}},refblocks:{left1:{x:-0.29,y:0.01}},bounds:{minX:-0.31,maxX:0.31,minY:-0.22,maxY:0.22,width:0.62,height:0.45,centerX:0,centerY:0},circles:{}},jYn=sn(nG).rotateRightFacingSymbol("down").labelPort("left1",["1"]).changeTextAnchor("{REF}","middle_top").build(),qYn=sn(nG).rotateRightFacingSymbol("right").labelPort("left1",["1"]).changeTextAnchor("{REF}","middle_left").build(),JYn=sn(nG).rotateRightFacingSymbol("left").labelPort("left1",["1"]).changeTextAnchor("{REF}","middle_right").build(),$Yn=sn(nG).rotateRightFacingSymbol("right").labelPort("left1",["1"]).changeTextAnchor("{REF}","middle_left").build(),ZYn=sn(nG).rotateRightFacingSymbol("up").labelPort("left1",["1"]).changeTextAnchor("{REF}","middle_bottom").build(),eVn=sn(nG).rotateRightFacingSymbol("up").labelPort("left1",["1"]).changeTextAnchor("{REF}","middle_bottom").build(),c4e={paths:{path11:{type:"path",points:[{x:-0.52,y:0.03},{x:-0.18,y:0.04}],color:"primary",fill:!1},path12:{type:"path",points:[{x:0.19,y:0.04},{x:0.52,y:0.04}],color:"primary",fill:!1},"path11-0-9":{type:"path",points:[{x:-0.31,y:0.2},{x:-0.31,y:-0.11},{x:-0.01,y:0.04},{x:-0.3,y:0.2}],color:"primary",fill:!0},"path11-0-9-5":{type:"path",points:[{x:0.33,y:0.2},{x:0.33,y:-0.1},{x:0.04,y:0.04},{x:0.33,y:0.2}],color:"primary",fill:!0}},texts:{top1:{type:"text",text:"{REF}",x:0.04,y:0.32},bottom1:{type:"text",text:"{VAL}",x:0.04,y:-0.32}},refblocks:{left1:{x:-0.52,y:0.03},right1:{x:0.52,y:0.04}},bounds:{minX:-0.55,maxX:0.55,minY:-0.32,maxY:0.32,width:1.09,height:0.63,centerX:0,centerY:0},circles:{}},{paths:Dbr,texts:Nbr,bounds:Rbr,refblocks:Qbr,circles:kbr}=c4e,tVn=sn(c4e).changeTextAnchor("{VAL}","middle_top").labelPort("left1",["1"]).labelPort("right1",["2"]).changeTextAnchor("{REF}","middle_bottom").build(),nVn=sn(c4e).rotateRightFacingSymbol("down").changeTextAnchor("{VAL}","middle_right").labelPort("left1",["1"]).labelPort("right1",["2"]).changeTextAnchor("{REF}","middle_left").build(),oVn={paths:{path45:{type:"path",points:[{x:0.14,y:0},{x:-0.13,y:-0.14}],color:"primary",fill:!1},"path1-8":{type:"path",points:[{x:0.13,y:0},{x:0.3,y:0}],color:"primary",fill:!1},path46:{type:"path",points:[{x:-0.13,y:0.13},{x:0.14,y:0}],color:"primary",fill:!1},path47:{type:"path",points:[{x:-0.13,y:-0.14},{x:-0.13,y:0.13}],color:"primary",fill:!1},path48:{type:"path",points:[{x:0.14,y:0.13},{x:0.14,y:-0.14}],color:"primary",fill:!1},path49:{type:"path",points:[{x:-0.13,y:0},{x:-0.3,y:0}],color:"primary",fill:!1},path25:{type:"path",points:[{x:0.16,y:0.29},{x:0.25,y:0.3},{x:0.22,y:0.21}],color:"primary",fill:!0},path78:{type:"path",points:[{x:0.08,y:0.17},{x:0.09,y:0.17},{x:0.21,y:0.27},{x:0.21,y:0.27}],color:"primary",fill:!1},"path25-0":{type:"path",points:[{x:-0.02,y:0.31},{x:0.08,y:0.32},{x:0.04,y:0.23}],color:"primary",fill:!0},"path78-6":{type:"path",points:[{x:-0.1,y:0.19},{x:-0.09,y:0.2},{x:0.04,y:0.29},{x:0.04,y:0.29}],color:"primary",fill:!1},box:{type:"path",points:[{x:-0.3,y:-0.4},{x:0.3,y:-0.4},{x:0.3,y:0.4},{x:-0.3,y:0.4},{x:-0.3,y:-0.4},{x:-0.3,y:0.4}],color:"primary",fill:!1},"path48-1":{type:"path",points:[{x:-0.3,y:0.13},{x:-0.54,y:0.13}],color:"primary",fill:!1},"path48-2":{type:"path",points:[{x:-0.3,y:-0.13},{x:-0.54,y:-0.13}],color:"primary",fill:!1},"path48-3":{type:"path",points:[{x:0.3,y:-0.13},{x:0.54,y:-0.13}],color:"primary",fill:!1},"path48-4":{type:"path",points:[{x:0.3,y:0.13},{x:0.54,y:0.13}],color:"primary",fill:!1}},texts:{bottom1:{type:"text",text:"{VAL}",x:0,y:-0.43},right1:{type:"text",text:"{REF}",x:0,y:0.43}},refblocks:{left1:{x:-0.54,y:0.13},left2:{x:-0.54,y:-0.13},right1:{x:0.54,y:-0.13},right2:{x:0.54,y:0.13}},bounds:{minX:-0.56,maxX:0.56,minY:-0.32,maxY:0.32,width:1.13,height:0.65,centerX:0,centerY:0},circles:{}},bue=sn(oVn).labelPort("left1",["1","DIN"]).labelPort("left2",["2","POWER"]).labelPort("right1",["3","GND"]).labelPort("right2",["4","DOUT"]).changeTextAnchor("{REF}","middle_bottom").changeTextAnchor("{VAL}","middle_top").build(),iVn=yo(bue,"down"),rVn=L5(bue),l4e=yo(bue,"up"),d4e=l4e.primitives.find((e)=>e.type==="text"&&e.text==="{REF}"),u4e=l4e.primitives.find((e)=>e.type==="text"&&e.text==="{VAL}");d4e.anchor="middle_left";u4e.anchor="middle_left";d4e.y+=0.21;d4e.x=0.44;u4e.y-=0.21;u4e.x=0.44;sVn=l4e,aVn={paths:{path11:{type:"path",points:[{x:-0.4,y:0},{x:-0.01,y:0}],color:"primary",fill:!1},path40:{type:"path",points:[{x:0.07,y:0.19},{x:0.07,y:-0.18}],color:"primary",fill:!1},path42:{type:"path",points:[{x:0.01,y:-0.12},{x:0.01,y:0.14}],color:"primary",fill:!1},path12:{type:"path",points:[{x:0.28,y:-0.25},{x:0.28,y:-0.56}],color:"primary",fill:!1},"path12-1":{type:"path",points:[{x:0.28,y:0.56},{x:0.28,y:0.27}],color:"primary",fill:!1},path15:{type:"path",points:[{x:0.17,y:-0.22},{x:0.28,y:-0.23},{x:0.23,y:-0.14}],color:"primary",fill:!0},path17:{type:"path",points:[{x:0.08,y:-0.09},{x:0.23,y:-0.2}],color:"primary",fill:!1},path2:{type:"path",points:[{x:0.07,y:0.11},{x:0.28,y:0.26}],color:"primary",fill:!1}},texts:{top1:{type:"text",text:"{REF}",x:-0.01,y:0.36},bottom1:{type:"text",text:"{VAL}",x:0.02,y:-0.42}},refblocks:{top1:{x:0.28,y:0.56},bottom1:{x:0.28,y:-0.56},left1:{x:-0.4,y:0}},bounds:{minX:-0.43,maxX:0.43,minY:-0.58,maxY:0.58,width:0.85,height:1.17,centerX:0,centerY:0},circles:{path1:{type:"circle",x:0.14,y:0.01,radius:0.29,color:"primary",fill:!1}}},Dut=sn(aVn).changeTextAnchor("{VAL}","middle_right").labelPort("left1",["3"]).labelPort("top1",["2"]).labelPort("bottom1",["1"]).changeTextAnchor("{REF}","middle_right").build(),h4e=yo(Dut),m4e=h4e.primitives.find((e)=>e.type==="text"&&e.text==="{REF}"),Nut=h4e.primitives.find((e)=>e.type==="text"&&e.text==="{VAL}");m4e.anchor="middle_left";Nut.anchor="middle_right";m4e.x=0.45;m4e.y+=0.065;Nut.y+=0.065;cVn=h4e,lVn={paths:{"path12-1-8-6-9":{type:"path",points:[{x:0.02,y:-0.02},{x:0.02,y:-0.1}],color:"primary",fill:!1},"path12-1-5-6":{type:"path",points:[{x:-0.47,y:-0.19},{x:-0.17,y:-0.19}],color:"primary",fill:!1},"path12-1-5-6-8":{type:"path",points:[{x:0.02,y:0.17},{x:0.02,y:0.11}],color:"primary",fill:!1},"path12-1-8-0":{type:"path",points:[{x:-0.15,y:-0.03},{x:0.2,y:-0.19}],color:"primary",fill:!1},"path12-1-0":{type:"path",points:[{x:0.2,y:-0.19},{x:0.47,y:-0.19}],color:"primary",fill:!1},"path12-1-8-6-9-4":{type:"path",points:[{x:0.02,y:0.12},{x:0.02,y:0.02}],color:"primary",fill:!1},"path12-1-8-6-9-4-3":{type:"path",points:[{x:0.08,y:0.11},{x:0.08,y:0.05}],color:"primary",fill:!1},"path12-1-8-6-9-4-3-1":{type:"path",points:[{x:-0.04,y:0.11},{x:-0.04,y:0.05}],color:"primary",fill:!1},"path12-1-8-6-9-4-4":{type:"path",points:[{x:0.08,y:0.11},{x:-0.04,y:0.11}],color:"primary",fill:!1},"path14-5":{type:"path",points:[{x:-0.01,y:0.28},{x:0.01,y:0.25},{x:0.04,y:0.23},{x:0.06,y:0.2}],color:"primary",fill:!0},"path14-5-3":{type:"path",points:[{x:-0.01,y:0.2},{x:0.01,y:0.23},{x:0.04,y:0.25},{x:0.06,y:0.28}],color:"primary",fill:!0}},texts:{top1:{type:"text",text:"{REF}",x:0.01,y:0.38},bottom1:{type:"text",text:"{VAL}",x:0.06,y:-0.38}},refblocks:{left1:{x:-0.47,y:-0.19},right1:{x:0.47,y:-0.19}},bounds:{minX:-0.5,maxX:0.5,minY:-0.38,maxY:0.38,width:1,height:0.76,centerX:0,centerY:0},circles:{path9:{type:"circle",x:0.02,y:0.24,radius:0.06,color:"primary",fill:!1}}},Rut=sn(lVn).changeTextAnchor("{VAL}","middle_top").labelPort("left1",["1"]).labelPort("right1",["2"]).changeTextAnchor("{REF}","middle_bottom").build(),Qut=yo(Rut),kut=Qut.primitives.filter((e)=>e.type==="text"),p4e=kut.find((e)=>e.text==="{VAL}");p4e.x=-0.35;p4e.y=0;p4e.anchor="middle_right";A4e=kut.find((e)=>e.text==="{REF}");A4e.y=0;A4e.x=0.35;A4e.anchor="middle_left";dVn=Qut,Sue={paths:{path8698:{type:"path",points:[{x:-0.19796749999999919,y:-0.023826854587889912},{x:-0.2004570399999992,y:-0.018993393814014044},{x:-0.2029465799999992,y:-0.014174384106555204},{x:-0.20543611999999922,y:-0.009384187436300498},{x:-0.20792565999999923,y:-0.004636988132081332},{x:-0.21041519999999925,y:0.00005329457033053167},{x:-0.21290473999999926,y:0.004673092344940184},{x:-0.21539427999999927,y:0.009209271428771242},{x:-0.21788381999999928,y:0.013649213595881985},{x:-0.2203733599999993,y:0.01798089395292432},{x:-0.2228628999999993,y:0.022192955076609913},{x:-0.22535243999999932,y:0.02627477703600152},{x:-0.22784197999999933,y:0.030216542867918667},{x:-0.23033151999999935,y:0.03400929910178016},{x:-0.23282105999999936,y:0.03764501096072756},{x:-0.23531059999999937,y:0.04111661189869628},{x:-0.23780013999999938,y:0.04441804716802203},{x:-0.2402896799999994,y:0.04754431114897349},{x:-0.2427792199999994,y:0.05049147821106258},{x:-0.24526875999999942,y:0.053256726915861724},{x:-0.24775829999999943,y:0.05583835741211009},{x:-0.25024783999999944,y:0.05823580191586174},{x:-0.25273737999999946,y:0.060449628211062575},{x:-0.25522691999999947,y:0.0624815361489735},{x:-0.2577164599999995,y:0.06433434716802203},{x:-0.2602059999999995,y:0.06601198689869628},{x:-0.2626955399999995,y:0.06751946096072757},{x:-0.2651850799999995,y:0.06886282410178016},{x:-0.26767461999999953,y:0.07004914286791866},{x:-0.27016415999999954,y:0.0710864520360015},{x:-0.27265369999999955,y:0.07198370507660991},{x:-0.27514323999999957,y:0.07275071895292433},{x:-0.2776327799999996,y:0.07339811359588198},{x:-0.2801223199999996,y:0.07393724642877124},{x:-0.2826118599999996,y:0.07438014234494018},{x:-0.2851013999999996,y:0.07473941957033053},{x:-0.28759093999999963,y:0.07502821186791866},{x:-0.29008047999999964,y:0.07526008756369952},{x:-0.29257001999999965,y:0.07544896589344477},{x:-0.29505955999999967,y:0.07560903118598594},{x:-0.2975490999999997,y:0.07575464541211008},{x:-0.30003863749999965,y:0.07560903118598594},{x:-0.3025281749999997,y:0.07544896589344477},{x:-0.30501771249999965,y:0.07526008756369951},{x:-0.3075072499999996,y:0.07502821186791866},{x:-0.30999678749999965,y:0.07473941957033052},{x:-0.3124863249999996,y:0.07438014234494018},{x:-0.3149758624999996,y:0.07393724642877124},{x:-0.31746539999999956,y:0.07339811359588198},{x:-0.3199549374999996,y:0.07275071895292431},{x:-0.32244447499999956,y:0.07198370507660991},{x:-0.32493401249999954,y:0.0710864520360015},{x:-0.32742354999999956,y:0.07004914286791866},{x:-0.32991308749999954,y:0.06886282410178016},{x:-0.3324026249999995,y:0.06751946096072756},{x:-0.33489216249999954,y:0.06601198689869628},{x:-0.3373816999999995,y:0.06433434716802203},{x:-0.3398712374999995,y:0.06248153614897349},{x:-0.3423607749999995,y:0.06044962821106258},{x:-0.3448503124999994,y:0.05823580191586174},{x:-0.34733984999999945,y:0.05583835741211009},{x:-0.3498293874999995,y:0.053256726915861724},{x:-0.35231892499999945,y:0.050491478211062576},{x:-0.3548084624999994,y:0.0475443111489735},{x:-0.3572979999999994,y:0.04441804716802203},{x:-0.35978753749999937,y:0.04111661189869628},{x:-0.3622770749999994,y:0.03764501096072756},{x:-0.36476661249999937,y:0.03400929910178016},{x:-0.36725614999999934,y:0.030216542867918673},{x:-0.36974568749999936,y:0.02627477703600152},{x:-0.37223522499999934,y:0.022192955076609917},{x:-0.3747247624999993,y:0.017980893952924324},{x:-0.37721429999999934,y:0.013649213595881985},{x:-0.3797038374999993,y:0.00920927142877125},{x:-0.3821933749999993,y:0.004673092344940191},{x:-0.3846829124999993,y:0.00005329457033053514},{x:-0.3871724499999993,y:-0.004636988132081328},{x:-0.38966198749999925,y:-0.009384187436300498},{x:-0.3921515249999992,y:-0.014174384106555197},{x:-0.39464106249999925,y:-0.01899339381401404},{x:-0.3971305999999992,y:-0.023826854587889912}],color:"primary",fill:!1},path8700:{type:"path",points:[{x:0.0011955000000007932,y:-0.02382615458789039},{x:-0.00129403749999919,y:-0.01899269131401453},{x:-0.0037835749999991734,y:-0.014173679106555696},{x:-0.006273112499999156,y:-0.009383479936300985},{x:-0.00876264999999914,y:-0.004636278132081827},{x:-0.011252187499999122,y:0.00005400707033003174},{x:-0.013741724999999105,y:0.004673807344939681},{x:-0.016231262499999087,y:0.009209988928770731},{x:-0.018720799999999073,y:0.013649933595881476},{x:-0.021210337499999055,y:0.017981616452923805},{x:-0.023699874999999038,y:0.022193680076609393},{x:-0.026189412499999024,y:0.026275504536001},{x:-0.028678949999999002,y:0.030217272867918137},{x:-0.03116848749999899,y:0.034010031601779636},{x:-0.03365802499999897,y:0.03764574596072702},{x:-0.03614756249999895,y:0.04111734939869574},{x:-0.03863709999999894,y:0.04441878716802149},{x:-0.04112663749999892,y:0.04754505364897295},{x:-0.043616174999998904,y:0.05049222321106203},{x:-0.04610571249999888,y:0.05325747441586117},{x:-0.04859524999999887,y:0.055839107412109526},{x:-0.051084787499998854,y:0.05823655441586117},{x:-0.05357432499999884,y:0.06045038321106201},{x:-0.05606386249999881,y:0.06248229364897292},{x:-0.0585533999999988,y:0.06433510716802145},{x:-0.061042937499998784,y:0.0660127493986957},{x:-0.06353247499999877,y:0.06752022596072697},{x:-0.06602201249999876,y:0.06886359160177957},{x:-0.06851154999999873,y:0.07004991286791806},{x:-0.07100108749999871,y:0.07108722453600091},{x:-0.0734906249999987,y:0.0719844800766093},{x:-0.07598016249999869,y:0.07275149645292371},{x:-0.07846969999999867,y:0.07339889359588138},{x:-0.08095923749999864,y:0.07393802892877062},{x:-0.08344877499999863,y:0.07438092734493956},{x:-0.08593831249999861,y:0.07474020707032991},{x:-0.0884278499999986,y:0.07502900186791804},{x:-0.09091738749999859,y:0.07526088006369888},{x:-0.09340692499999856,y:0.07544976089344414},{x:-0.09589646249999854,y:0.0756098286859853},{x:-0.09838599999999853,y:0.07575544541210943},{x:-0.10087553999999854,y:0.0756098286859853},{x:-0.10336507999999855,y:0.07544976089344414},{x:-0.10585461999999857,y:0.07526088006369887},{x:-0.10834415999999858,y:0.07502900186791804},{x:-0.11083369999999859,y:0.0747402070703299},{x:-0.1133232399999986,y:0.07438092734493956},{x:-0.11581277999999862,y:0.07393802892877062},{x:-0.11830231999999863,y:0.07339889359588138},{x:-0.12079185999999864,y:0.07275149645292371},{x:-0.12328139999999865,y:0.0719844800766093},{x:-0.12577093999999867,y:0.07108722453600091},{x:-0.12826047999999868,y:0.07004991286791806},{x:-0.1307500199999987,y:0.06886359160177957},{x:-0.1332395599999987,y:0.06752022596072697},{x:-0.13572909999999871,y:0.0660127493986957},{x:-0.13821863999999873,y:0.06433510716802145},{x:-0.14070817999999874,y:0.06248229364897291},{x:-0.14319771999999875,y:0.06045038321106202},{x:-0.14568725999999876,y:0.05823655441586117},{x:-0.14817679999999878,y:0.055839107412109526},{x:-0.1506663399999988,y:0.05325747441586117},{x:-0.1531558799999988,y:0.05049222321106202},{x:-0.1556454199999988,y:0.047545053648972956},{x:-0.15813495999999883,y:0.04441878716802149},{x:-0.16062449999999884,y:0.04111734939869574},{x:-0.16311403999999885,y:0.03764574596072702},{x:-0.16560357999999886,y:0.034010031601779636},{x:-0.16809311999999887,y:0.03021727286791814},{x:-0.1705826599999989,y:0.026275504536001},{x:-0.1730721999999989,y:0.022193680076609396},{x:-0.1755617399999989,y:0.017981616452923805},{x:-0.17805127999999892,y:0.013649933595881474},{x:-0.18054081999999894,y:0.00920998892877074},{x:-0.18303035999999895,y:0.0046738073449396865},{x:-0.18551989999999896,y:0.00005400707033003521},{x:-0.18800943999999897,y:-0.004636278132081827},{x:-0.19049897999999899,y:-0.009383479936300985},{x:-0.192988519999999,y:-0.01417367910655569},{x:-0.19547805999999898,y:-0.018992691314014522},{x:-0.19796759999999902,y:-0.02382615458789039}],color:"primary",fill:!1},path8702:{type:"path",points:[{x:0.2003586000000006,y:-0.02382615458789039},{x:0.19786906000000057,y:-0.01899269131401453},{x:0.19537952000000058,y:-0.014173679106555696},{x:0.19288998000000057,y:-0.009383479936300985},{x:0.1904004400000006,y:-0.004636278132081827},{x:0.18791090000000055,y:0.00005400707033003174},{x:0.1854213600000005,y:0.004673807344939681},{x:0.18293182000000052,y:0.009209988928770731},{x:0.1804422800000005,y:0.013649933595881476},{x:0.17795274000000053,y:0.017981616452923805},{x:0.17546320000000049,y:0.022193680076609393},{x:0.17297366000000047,y:0.026275504536001},{x:0.17048412000000046,y:0.030217272867918137},{x:0.16799458000000045,y:0.034010031601779636},{x:0.16550504000000044,y:0.03764574596072702},{x:0.16301550000000042,y:0.04111734939869574},{x:0.1605259600000004,y:0.04441878716802149},{x:0.1580364200000004,y:0.04754505364897295},{x:0.1555468800000004,y:0.05049222321106203},{x:0.15305734000000037,y:0.05325747441586117},{x:0.15056780000000036,y:0.055839107412109526},{x:0.14807826000000035,y:0.05823655441586117},{x:0.14558872000000034,y:0.06045038321106201},{x:0.14309918000000033,y:0.06248229364897292},{x:0.1406096400000003,y:0.06433510716802145},{x:0.1381201000000003,y:0.0660127493986957},{x:0.1356305600000003,y:0.06752022596072697},{x:0.13314102000000028,y:0.06886359160177957},{x:0.13065148000000026,y:0.07004991286791806},{x:0.12816194000000025,y:0.07108722453600091},{x:0.12567240000000024,y:0.0719844800766093},{x:0.12318286000000023,y:0.07275149645292371},{x:0.12069332000000021,y:0.07339889359588138},{x:0.1182037800000002,y:0.07393802892877062},{x:0.11571424000000019,y:0.07438092734493956},{x:0.11322470000000018,y:0.07474020707032991},{x:0.11073516000000017,y:0.07502900186791804},{x:0.10824562000000015,y:0.07526088006369888},{x:0.10575608000000014,y:0.07544976089344414},{x:0.10326654000000013,y:0.0756098286859853},{x:0.10077700000000012,y:0.07575544541210943},{x:0.09828746250000013,y:0.0756098286859853},{x:0.09579792500000014,y:0.07544976089344414},{x:0.09330838750000017,y:0.07526088006369887},{x:0.09081885000000019,y:0.07502900186791804},{x:0.0883293125000002,y:0.0747402070703299},{x:0.08583977500000022,y:0.07438092734493956},{x:0.08335023750000023,y:0.07393802892877062},{x:0.08086070000000026,y:0.07339889359588138},{x:0.07837116250000027,y:0.07275149645292371},{x:0.07588162500000029,y:0.0719844800766093},{x:0.0733920875000003,y:0.07108722453600091},{x:0.07090255000000031,y:0.07004991286791806},{x:0.06841301250000034,y:0.06886359160177957},{x:0.06592347500000036,y:0.06752022596072697},{x:0.06343393750000037,y:0.0660127493986957},{x:0.060944400000000384,y:0.06433510716802145},{x:0.0584548625000004,y:0.06248229364897291},{x:0.05596532500000043,y:0.06045038321106202},{x:0.05347578750000044,y:0.05823655441586117},{x:0.050986250000000455,y:0.055839107412109526},{x:0.04849671250000047,y:0.05325747441586117},{x:0.04600717500000048,y:0.05049222321106202},{x:0.04351763750000051,y:0.047545053648972956},{x:0.041028100000000525,y:0.04441878716802149},{x:0.03853856250000054,y:0.04111734939869574},{x:0.036049025000000554,y:0.03764574596072702},{x:0.03355948750000057,y:0.034010031601779636},{x:0.031069950000000596,y:0.03021727286791814},{x:0.02858041250000061,y:0.026275504536001},{x:0.026090875000000624,y:0.022193680076609396},{x:0.023601337500000638,y:0.017981616452923805},{x:0.021111800000000652,y:0.013649933595881474},{x:0.01862226250000068,y:0.00920998892877074},{x:0.016132725000000694,y:0.0046738073449396865},{x:0.013643187500000709,y:0.00005400707033003521},{x:0.011153650000000723,y:-0.004636278132081827},{x:0.008664112500000737,y:-0.009383479936300985},{x:0.006174575000000764,y:-0.01417367910655569},{x:0.0036850375000007786,y:-0.018992691314014522},{x:0.0011955000000007932,y:-0.02382615458789039}],color:"primary",fill:!1},path8704:{type:"path",points:[{x:0.3995216000000006,y:-0.02382615458789039},{x:0.39703206250000056,y:-0.01899269131401453},{x:0.3945425250000006,y:-0.014173679106555696},{x:0.3920529875000006,y:-0.009383479936300985},{x:0.38956345000000064,y:-0.004636278132081827},{x:0.38707391250000067,y:0.00005400707033003174},{x:0.3845843750000007,y:0.004673807344939681},{x:0.38209483750000073,y:0.009209988928770731},{x:0.37960530000000076,y:0.013649933595881476},{x:0.3771157625000008,y:0.017981616452923805},{x:0.37462622500000076,y:0.022193680076609393},{x:0.37213668750000073,y:0.026275504536001},{x:0.36964715000000076,y:0.030217272867918137},{x:0.3671576125000008,y:0.034010031601779636},{x:0.3646680750000008,y:0.03764574596072702},{x:0.36217853750000084,y:0.04111734939869574},{x:0.3596890000000008,y:0.04441878716802149},{x:0.3571994625000009,y:0.04754505364897295},{x:0.35470992500000087,y:0.05049222321106203},{x:0.35222038750000095,y:0.05325747441586117},{x:0.3497308500000009,y:0.055839107412109526},{x:0.3472413125000009,y:0.05823655441586117},{x:0.344751775000001,y:0.06045038321106201},{x:0.34226223750000095,y:0.06248229364897292},{x:0.33977270000000104,y:0.06433510716802145},{x:0.337283162500001,y:0.0660127493986957},{x:0.334793625000001,y:0.06752022596072697},{x:0.33230408750000107,y:0.06886359160177957},{x:0.3298145500000011,y:0.07004991286791806},{x:0.32732501250000107,y:0.07108722453600091},{x:0.3248354750000011,y:0.0719844800766093},{x:0.3223459375000011,y:0.07275149645292371},{x:0.3198564000000011,y:0.07339889359588138},{x:0.3173668625000012,y:0.07393802892877062},{x:0.31487732500000115,y:0.07438092734493956},{x:0.3123877875000012,y:0.07474020707032991},{x:0.3098982500000012,y:0.07502900186791804},{x:0.30740871250000124,y:0.07526088006369888},{x:0.30491917500000126,y:0.07544976089344414},{x:0.30242963750000124,y:0.0756098286859853},{x:0.29994010000000126,y:0.07575544541210943},{x:0.29745056000000125,y:0.0756098286859853},{x:0.29496102000000124,y:0.07544976089344414},{x:0.2924714800000012,y:0.07526088006369887},{x:0.2899819400000012,y:0.07502900186791804},{x:0.2874924000000012,y:0.0747402070703299},{x:0.2850028600000012,y:0.07438092734493956},{x:0.2825133200000012,y:0.07393802892877062},{x:0.28002378000000117,y:0.07339889359588138},{x:0.27753424000000115,y:0.07275149645292371},{x:0.27504470000000114,y:0.0719844800766093},{x:0.27255516000000113,y:0.07108722453600091},{x:0.2700656200000011,y:0.07004991286791806},{x:0.2675760800000011,y:0.06886359160177957},{x:0.2650865400000011,y:0.06752022596072697},{x:0.2625970000000011,y:0.0660127493986957},{x:0.26010746000000107,y:0.06433510716802145},{x:0.25761792000000105,y:0.06248229364897291},{x:0.25512838000000104,y:0.06045038321106202},{x:0.25263884000000103,y:0.05823655441586117},{x:0.250149300000001,y:0.055839107412109526},{x:0.247659760000001,y:0.05325747441586117},{x:0.245170220000001,y:0.05049222321106202},{x:0.24268068000000098,y:0.047545053648972956},{x:0.24019114000000097,y:0.04441878716802149},{x:0.23770160000000096,y:0.04111734939869574},{x:0.23521206000000094,y:0.03764574596072702},{x:0.23272252000000093,y:0.034010031601779636},{x:0.23023298000000092,y:0.03021727286791814},{x:0.2277434400000009,y:0.026275504536001},{x:0.2252539000000009,y:0.022193680076609396},{x:0.22276436000000088,y:0.017981616452923805},{x:0.22027482000000087,y:0.013649933595881474},{x:0.21778528000000086,y:0.00920998892877074},{x:0.21529574000000085,y:0.0046738073449396865},{x:0.21280620000000083,y:0.00005400707033003521},{x:0.21031666000000082,y:-0.004636278132081827},{x:0.2078271200000008,y:-0.009383479936300985},{x:0.2053375800000008,y:-0.01417367910655569},{x:0.20284804000000078,y:-0.018992691314014522},{x:0.20035850000000077,y:-0.02382615458789039}],color:"primary",fill:!1},path8706:{type:"path",points:[{x:-0.40026109999999937,y:-0.022544054587890106},{x:-0.5272914999999991,y:-0.022544054587890106}],color:"primary",fill:!1},"path8706-5":{type:"path",points:[{x:0.5282280000000006,y:-0.027111054587890093},{x:0.4011975999999997,y:-0.027111054587890093}],color:"primary",fill:!1}},texts:{top1:{type:"text",text:"{REF}",x:-0.0020145999999989783,y:0.22997364541210996},bottom1:{type:"text",text:"{VAL}",x:-0.002185205294839676,y:-0.22997364541210996}},refblocks:{left1:{x:-0.5279125,y:-0.021272154587890446},right1:{x:0.5279125,y:-0.026521254587889898}},bounds:{minX:-0.556070941,maxX:0.556070941,minY:-0.22997364541210996,maxY:0.22997364541210996,width:1.112141882,height:0.4599472908242199,centerX:0,centerY:0},circles:{}},uVn=sn(Sue).rotateRightFacingSymbol("down").labelPort("left1",["1"]).labelPort("right1",["2"]).changeTextAnchor("{REF}","middle_right",{x:-0.5,y:0}).changeTextAnchor("{VAL}","middle_left",{x:0.5,y:0}).build(),hVn=sn(Sue).rotateRightFacingSymbol("left").labelPort("left1",["1"]).labelPort("right1",["2"]).changeTextAnchor("{REF}","middle_bottom",{x:0,y:0.5}).changeTextAnchor("{VAL}","middle_top",{x:0,y:-0.5}).build(),mVn=sn(Sue).rotateRightFacingSymbol("right").labelPort("left1",["1"]).labelPort("right1",["2"]).changeTextAnchor("{REF}","middle_bottom").changeTextAnchor("{VAL}","middle_top").build(),pVn=sn(Sue).rotateRightFacingSymbol("up").labelPort("left1",["1"]).labelPort("right1",["2"]).changeTextAnchor("{REF}","middle_right").changeTextAnchor("{VAL}","middle_left").build(),Lut={paths:{path11:{type:"path",points:[{x:-0.54,y:-0.06},{x:-0.15,y:-0.06}],color:"primary",fill:!1},path40:{type:"path",points:[{x:0.13,y:-0.05},{x:-0.13,y:-0.18}],color:"primary",fill:!1},path41:{type:"path",points:[{x:-0.13,y:0.08},{x:0.13,y:-0.05}],color:"primary",fill:!1},path42:{type:"path",points:[{x:-0.13,y:-0.18},{x:-0.13,y:0.08}],color:"primary",fill:!1},path43:{type:"path",points:[{x:0.13,y:0.08},{x:0.13,y:-0.18}],color:"primary",fill:!1},path12:{type:"path",points:[{x:0.14,y:-0.05},{x:0.54,y:-0.06}],color:"primary",fill:!1},"path25-0-9-8":{type:"path",points:[{x:-0.03,y:0.39},{x:-0.05,y:0.47},{x:-0.08,y:0.39}],color:"primary",fill:!0},"path78-6-5-5":{type:"path",points:[{x:-0.05,y:0.27},{x:-0.05,y:0.29},{x:-0.05,y:0.41},{x:-0.05,y:0.42}],color:"primary",fill:!1},"path25-0-9-8-2":{type:"path",points:[{x:0.07,y:0.39},{x:0.04,y:0.47},{x:0.02,y:0.39}],color:"primary",fill:!0},"path78-6-5-5-7":{type:"path",points:[{x:0.04,y:0.27},{x:0.04,y:0.29},{x:0.04,y:0.41},{x:0.04,y:0.42}],color:"primary",fill:!1},"path43-1":{type:"path",points:[{x:0.03,y:0.06},{x:0.03,y:-0.16}],color:"primary",fill:!1}},texts:{top1:{type:"text",text:"{REF}",x:0.38,y:0.38},bottom1:{type:"text",text:"{VAL}",x:0.38,y:-0.47}},refblocks:{left1:{x:-0.54,y:-0.06},right1:{x:0.54,y:-0.06}},bounds:{minX:-0.57,maxX:0.57,minY:-0.47,maxY:0.47,width:1.14,height:0.93,centerX:0,centerY:0},circles:{path1:{type:"circle",x:0,y:-0.05,radius:0.29,color:"primary",fill:!1}}};Lut.bounds.width+=0.2;Pue=sn(Lut).changeTextAnchor("{VAL}","middle_top").labelPort("left1",["1","anode","pos"]).labelPort("right1",["2","cathode","neg"]).changeTextAnchor("{REF}","middle_bottom").build(),_4e=yo(Pue,"down"),g4e=_4e.primitives.find((e)=>e.type==="text"&&e.text==="{REF}"),f4e=_4e.primitives.find((e)=>e.type==="text"&&e.text==="{VAL}");g4e.anchor="middle_left";f4e.anchor="middle_left";g4e.y+=0.9;g4e.x=0.3;f4e.y-=0.1;f4e.x=0.3;AVn=_4e,y4e=yo(Pue,"left"),x4e=y4e.primitives.find((e)=>e.type==="text"&&e.text==="{REF}"),C4e=y4e.primitives.find((e)=>e.type==="text"&&e.text==="{VAL}");x4e.anchor="middle_left";C4e.anchor="middle_left";x4e.y+=0.71;x4e.x=0.44;C4e.y-=0.71;C4e.x=0.44;_Vn=y4e,I4e=yo(Pue,"up"),b4e=I4e.primitives.find((e)=>e.type==="text"&&e.text==="{REF}"),S4e=I4e.primitives.find((e)=>e.type==="text"&&e.text==="{VAL}");b4e.anchor="middle_left";S4e.anchor="middle_left";b4e.y+=0.1;b4e.x=0.3;S4e.y-=0.71;S4e.x=0.3;gVn=I4e,fVn={paths:{path45:{type:"path",points:[{x:0.14,y:0},{x:-0.13,y:-0.14}],color:"primary",fill:!1},"path1-8":{type:"path",points:[{x:0.13,y:0},{x:0.54,y:0}],color:"primary",fill:!1},path46:{type:"path",points:[{x:-0.13,y:0.13},{x:0.14,y:0}],color:"primary",fill:!1},path47:{type:"path",points:[{x:-0.13,y:-0.14},{x:-0.13,y:0.13}],color:"primary",fill:!1},path48:{type:"path",points:[{x:0.14,y:0.13},{x:0.14,y:-0.14}],color:"primary",fill:!1},path49:{type:"path",points:[{x:-0.13,y:0},{x:-0.54,y:0}],color:"primary",fill:!1},path25:{type:"path",points:[{x:0.16,y:0.29},{x:0.25,y:0.3},{x:0.22,y:0.21}],color:"primary",fill:!0},path78:{type:"path",points:[{x:0.08,y:0.17},{x:0.09,y:0.17},{x:0.21,y:0.27},{x:0.21,y:0.27}],color:"primary",fill:!1},"path25-0":{type:"path",points:[{x:-0.02,y:0.31},{x:0.08,y:0.32},{x:0.04,y:0.23}],color:"primary",fill:!0},"path78-6":{type:"path",points:[{x:-0.1,y:0.19},{x:-0.09,y:0.2},{x:0.04,y:0.29},{x:0.04,y:0.29}],color:"primary",fill:!1}},texts:{bottom1:{type:"text",text:"{VAL}",x:0,y:-0.21},right1:{type:"text",text:"{REF}",x:0,y:0.41}},refblocks:{left1:{x:-0.54,y:0},right1:{x:0.54,y:0}},bounds:{minX:-0.56,maxX:0.56,minY:-0.32,maxY:0.32,width:1.13,height:0.65,centerX:0,centerY:0},circles:{}},{paths:yVn,texts:mdt,bounds:ade,refblocks:pdt,circles:xVn}=fVn,P4e=jc({primitives:[...Object.values(yVn),...Object.values(xVn),{...mdt.bottom1,anchor:"middle_top"},{...mdt.right1,anchor:"middle_bottom"}],ports:[{...pdt.left1,labels:["1","anode","pos"]},{...pdt.right1,labels:["2","cathode","neg"]}],size:{width:ade.width,height:ade.height},center:{x:ade.centerX,y:ade.centerY}}),v4e=yo(P4e,"up"),E4e=v4e.primitives.find((e)=>e.type==="text"&&e.text==="{REF}"),M4e=v4e.primitives.find((e)=>e.type==="text"&&e.text==="{VAL}");E4e.anchor="middle_left";M4e.anchor="middle_left";E4e.y+=0.21;E4e.x=0.21;M4e.y-=0.21;M4e.x=0.21;Fut=v4e,B4e=Kz(Fut),w4e=B4e.primitives.find((e)=>e.type==="text"&&e.text==="{REF}"),T4e=B4e.primitives.find((e)=>e.type==="text"&&e.text==="{VAL}");w4e.anchor="middle_left";T4e.anchor="middle_left";w4e.y+=0.4;w4e.x=0.2;T4e.y-=0.41;T4e.x=0.2;CVn=B4e,IVn=L5(P4e),vue={paths:{"anode-lead":{type:"path",points:[{x:-0.25,y:0},{x:-0.11999999999999988,y:0}],color:"primary",fill:!1},body:{type:"path",points:[{x:-0.11999999999999988,y:0.11999999999999988},{x:0.1200000000000001,y:0},{x:-0.11999999999999988,y:-0.1200000000000001},{x:-0.11999999999999988,y:0.11999999999999988}],color:"primary",fill:!1},"cathode-bar":{type:"path",points:[{x:0.1200000000000001,y:0.11999999999999988},{x:0.1200000000000001,y:-0.1200000000000001}],color:"primary",fill:!1},"cathode-lead":{type:"path",points:[{x:0.1200000000000001,y:0},{x:0.25,y:0}],color:"primary",fill:!1},"emission-0-shaft":{type:"path",points:[{x:-0.11999999999999988,y:0.15999999999999992},{x:-0.030000000000000027,y:0.29000000000000004}],color:"primary",fill:!1},"emission-0-head":{type:"path",points:[{x:-0.08499999999999996,y:0.2699999999999998},{x:-0.030000000000000027,y:0.29000000000000004},{x:-0.030000000000000027,y:0.22999999999999998}],color:"primary",fill:!1},"emission-1-shaft":{type:"path",points:[{x:0,y:0.15999999999999992},{x:0.09000000000000008,y:0.29000000000000004}],color:"primary",fill:!1},"emission-1-head":{type:"path",points:[{x:0.03500000000000014,y:0.2699999999999998},{x:0.09000000000000008,y:0.29000000000000004},{x:0.09000000000000008,y:0.22999999999999998}],color:"primary",fill:!1}},texts:{top1:{type:"text",text:"{REF}",x:0,y:0.3999999999999999},bottom1:{type:"text",text:"{VAL}",x:0,y:-0.40000000000000013}},refblocks:{left1:{x:-0.25,y:0},right1:{x:0.25,y:0}},bounds:{minX:-0.25,maxX:0.25,minY:-0.40000000000000013,maxY:0.3999999999999999,width:0.5,height:0.8,centerX:0,centerY:-0.00000000000000011102230246251565},circles:{}},bVn=fr(vue,{kind:"led",orientation:"down",pin1Labels:["1","pos","anode"],pin2Labels:["2","neg","cathode"]}),SVn=fr(vue,{kind:"led",orientation:"left",pin1Labels:["1","pos","anode"],pin2Labels:["2","neg","cathode"]}),PVn=fr(vue,{kind:"led",orientation:"right",pin1Labels:["1","pos","anode"],pin2Labels:["2","neg","cathode"]}),vVn=fr(vue,{kind:"led",orientation:"up",pin1Labels:["1","pos","anode"],pin2Labels:["2","neg","cathode"]}),Eue={paths:{"anode-lead":{type:"path",points:[{x:-0.17499999999999982,y:0},{x:-0.09999999999999987,y:0}],color:"primary",fill:!1},body:{type:"path",points:[{x:-0.09999999999999987,y:0.09999999999999987},{x:0.10000000000000009,y:0},{x:-0.09999999999999987,y:-0.10000000000000009},{x:-0.09999999999999987,y:0.09999999999999987}],color:"primary",fill:!1},"cathode-bar":{type:"path",points:[{x:0.10000000000000009,y:0.09999999999999987},{x:0.10000000000000009,y:-0.10000000000000009}],color:"primary",fill:!1},"cathode-lead":{type:"path",points:[{x:0.10000000000000009,y:0},{x:0.17500000000000004,y:0}],color:"primary",fill:!1},"emission-0-shaft":{type:"path",points:[{x:-0.11999999999999988,y:0.15999999999999992},{x:-0.030000000000000027,y:0.29000000000000004}],color:"primary",fill:!1},"emission-0-head":{type:"path",points:[{x:-0.08499999999999996,y:0.2699999999999998},{x:-0.030000000000000027,y:0.29000000000000004},{x:-0.030000000000000027,y:0.22999999999999998}],color:"primary",fill:!1},"emission-1-shaft":{type:"path",points:[{x:0,y:0.15999999999999992},{x:0.09000000000000008,y:0.29000000000000004}],color:"primary",fill:!1},"emission-1-head":{type:"path",points:[{x:0.03500000000000014,y:0.2699999999999998},{x:0.09000000000000008,y:0.29000000000000004},{x:0.09000000000000008,y:0.22999999999999998}],color:"primary",fill:!1}},texts:{top1:{type:"text",text:"{REF}",x:0,y:0.3999999999999999},bottom1:{type:"text",text:"{VAL}",x:0,y:-0.40000000000000013}},refblocks:{left1:{x:-0.17499999999999982,y:0},right1:{x:0.17500000000000004,y:0}},bounds:{minX:-0.17499999999999982,maxX:0.17500000000000004,minY:-0.40000000000000013,maxY:0.3999999999999999,width:0.34999999999999987,height:0.8,centerX:0.00000000000000011102230246251565,centerY:-0.00000000000000011102230246251565},circles:{}},EVn=fr(Eue,{kind:"led",orientation:"down",pin1Labels:["1","pos","anode"],pin2Labels:["2","neg","cathode"]}),MVn=fr(Eue,{kind:"led",orientation:"left",pin1Labels:["1","pos","anode"],pin2Labels:["2","neg","cathode"]}),BVn=fr(Eue,{kind:"led",orientation:"right",pin1Labels:["1","pos","anode"],pin2Labels:["2","neg","cathode"]}),wVn=fr(Eue,{kind:"led",orientation:"up",pin1Labels:["1","pos","anode"],pin2Labels:["2","neg","cathode"]}),TVn={paths:{path11:{type:"path",points:[{x:-0.52,y:-0.01},{x:-0.18,y:-0.01}],color:"primary",fill:!1},"path11-2":{type:"path",points:[{x:-0.17,y:-0.11},{x:-0.17,y:0.08}],color:"primary",fill:!1},"path11-5":{type:"path",points:[{x:-0.17,y:-0.12},{x:0.16,y:-0.12}],color:"primary",fill:!1},"path11-5-5":{type:"path",points:[{x:-0.17,y:0.08},{x:0.16,y:0.08}],color:"primary",fill:!1},path12:{type:"path",points:[{x:0.17,y:-0.01},{x:0.52,y:-0.01}],color:"primary",fill:!1},"path11-2-1":{type:"path",points:[{x:0.16,y:-0.12},{x:0.16,y:0.08}],color:"primary",fill:!1},"path25-0-9":{type:"path",points:[{x:-0.4,y:-0.21},{x:-0.33,y:-0.18},{x:-0.34,y:-0.27}],color:"primary",fill:!0},"path78-6-5":{type:"path",points:[{x:-0.45,y:-0.34},{x:-0.44,y:-0.32},{x:-0.35,y:-0.22},{x:-0.35,y:-0.22}],color:"primary",fill:!1},"path25-0-9-0":{type:"path",points:[{x:-0.3,y:-0.34},{x:-0.22,y:-0.31},{x:-0.24,y:-0.4}],color:"primary",fill:!0},"path78-6-5-9":{type:"path",points:[{x:-0.35,y:-0.46},{x:-0.34,y:-0.45},{x:-0.25,y:-0.35},{x:-0.25,y:-0.35}],color:"primary",fill:!1}},texts:{top1:{type:"text",text:"{REF}",x:-0.17,y:-0.41},bottom1:{type:"text",text:"{VAL}",x:-0.01,y:0.46}},refblocks:{left1:{x:-0.52,y:-0.01},right1:{x:0.52,y:-0.01}},bounds:{minX:-0.55,maxX:0.55,minY:-0.51,maxY:0.46,width:1.1,height:0.62,centerX:0,centerY:-0.02},circles:{path1:{type:"circle",x:0,y:-0.02,radius:0.28,color:"primary",fill:!1}}},{paths:DVn,texts:Adt,bounds:cde,refblocks:_dt,circles:NVn}=TVn,Hut=jc({primitives:[...Object.values(DVn),...Object.values(NVn),{...Adt.top1,anchor:"middle_left",x:0},{...Adt.bottom1,anchor:"middle_left",x:0}],ports:[{..._dt.left1,labels:["1"]},{..._dt.right1,labels:["2"]}],size:{width:cde.width,height:cde.height},center:{x:cde.centerX,y:cde.centerY}}),Out=yo(Hut),zut=Out.primitives.filter((e)=>e.type==="text"),D4e=zut.find((e)=>e.text==="{VAL}");D4e.x=-0.35;D4e.y=0;D4e.anchor="middle_right";N4e=zut.find((e)=>e.text==="{REF}");N4e.y=0;N4e.x=0.35;N4e.anchor="middle_left";RVn=Out,QVn={paths:{path208:{type:"path",points:[{x:0.38,y:0.13},{x:0.52,y:-0.13}],color:"primary",fill:!1},path209:{type:"path",points:[{x:0.25,y:-0.13},{x:0.38,y:0.13}],color:"primary",fill:!1},path210:{type:"path",points:[{x:0.52,y:-0.13},{x:0.25,y:-0.13}],color:"primary",fill:!1},path211:{type:"path",points:[{x:0.25,y:0.13},{x:0.52,y:0.13}],color:"primary",fill:!1},path212:{type:"path",points:[{x:0.12,y:-0.4},{x:0.38,y:-0.4}],color:"primary",fill:!1},path213:{type:"path",points:[{x:0.38,y:0.4},{x:0.12,y:0.4}],color:"primary",fill:!1},path214:{type:"path",points:[{x:0.12,y:0.54},{x:0.12,y:0.18}],color:"primary",fill:!1},path215:{type:"path",points:[{x:0.12,y:-0.54},{x:0.12,y:0}],color:"primary",fill:!1},path216:{type:"path",points:[{x:0.38,y:-0.4},{x:0.38,y:0.4}],color:"primary",fill:!1},path217:{type:"path",points:[{x:-0.14,y:0.26},{x:-0.14,y:-0.27}],color:"primary",fill:!1},path218:{type:"path",points:[{x:-0.22,y:-0.27},{x:-0.22,y:0.26}],color:"primary",fill:!1},path219:{type:"path",points:[{x:-0.54,y:-0.27},{x:-0.22,y:-0.27}],color:"primary",fill:!1},path220:{type:"path",points:[{x:-0.14,y:-0.19},{x:0.12,y:-0.19}],color:"primary",fill:!1},path221:{type:"path",points:[{x:-0.14,y:0.18},{x:0.12,y:0.18}],color:"primary",fill:!1},path222:{type:"path",points:[{x:-0.07,y:0},{x:0.12,y:0}],color:"primary",fill:!1}},texts:{right1:{type:"text",text:"{VAL}",x:0.57,y:0.02},right2:{type:"text",text:"{REF}",x:0.57,y:0.21}},refblocks:{top1:{x:0.12,y:0.54},bottom1:{x:0.12,y:-0.54},left1:{x:-0.54,y:-0.27}},bounds:{minX:-0.57,maxX:0.57,minY:-0.57,maxY:0.57,width:1.14,height:1.14,centerX:0,centerY:0},circles:{}};({paths:kVn,texts:gdt,bounds:fdt,refblocks:Vz}=QVn),ydt={x:fdt.centerX+0.2,y:fdt.centerY},Gut=jc({primitives:[...Object.values(kVn),{...gdt.right1,anchor:"middle_left"},{...gdt.right2,anchor:"middle_left"}],ports:[{...Vz.top1,labels:["1"]},{...Vz.bottom1,labels:["2"]},{...Vz.left1,labels:["3"]}],size:mJ(ydt,[Vz.top1,Vz.bottom1,Vz.left1]),center:ydt}),R4e=yo(Gut),Yut=R4e.primitives.find((e)=>e.type==="text"&&e.text==="{REF}"),Q4e=R4e.primitives.find((e)=>e.type==="text"&&e.text==="{VAL}");Yut.anchor="middle_top";Q4e.anchor="middle_top";Yut.x=Q4e.x;Q4e.y+=0.15;LVn=R4e,FVn={paths:{"path12-1-8-6-9":{type:"path",points:[{x:0.01,y:0.07},{x:0.01,y:-0.01}],color:"primary",fill:!1},"path12-1-5-6":{type:"path",points:[{x:-0.47,y:-0.09},{x:-0.17,y:-0.09}],color:"primary",fill:!1},"path12-1-8-0":{type:"path",points:[{x:-0.16,y:-0.01},{x:0.17,y:-0.01}],color:"primary",fill:!1},"path12-1-0":{type:"path",points:[{x:0.2,y:-0.09},{x:0.47,y:-0.09}],color:"primary",fill:!1},path2:{type:"path",points:[{x:-0.1,y:0.06},{x:-0.1,y:0.06},{x:-0.1,y:0.07},{x:-0.1,y:0.07},{x:-0.1,y:0.07},{x:-0.1,y:0.08},{x:-0.1,y:0.08},{x:-0.1,y:0.08},{x:-0.1,y:0.09},{x:-0.09,y:0.09},{x:-0.09,y:0.09},{x:-0.09,y:0.1},{x:-0.09,y:0.1},{x:-0.09,y:0.1},{x:-0.09,y:0.1},{x:-0.09,y:0.11},{x:-0.09,y:0.11},{x:-0.08,y:0.11},{x:-0.08,y:0.12},{x:-0.08,y:0.12},{x:-0.08,y:0.12},{x:-0.08,y:0.12},{x:-0.07,y:0.13},{x:-0.07,y:0.13},{x:-0.07,y:0.13},{x:-0.07,y:0.13},{x:-0.06,y:0.14},{x:-0.06,y:0.14},{x:-0.06,y:0.14},{x:-0.06,y:0.14},{x:-0.05,y:0.14},{x:-0.05,y:0.15},{x:-0.05,y:0.15},{x:-0.04,y:0.15},{x:-0.04,y:0.15},{x:-0.04,y:0.15},{x:-0.04,y:0.15},{x:-0.03,y:0.16},{x:-0.03,y:0.16},{x:-0.03,y:0.16},{x:-0.02,y:0.16},{x:-0.02,y:0.16},{x:-0.02,y:0.16},{x:-0.01,y:0.16},{x:-0.01,y:0.16},{x:0,y:0.16},{x:0,y:0.16},{x:0,y:0.16},{x:0.01,y:0.16},{x:0.01,y:0.16},{x:0.01,y:0.16},{x:0.02,y:0.16},{x:0.02,y:0.16},{x:0.02,y:0.16},{x:0.03,y:0.16},{x:0.03,y:0.16},{x:0.03,y:0.16},{x:0.04,y:0.16},{x:0.04,y:0.16},{x:0.04,y:0.16},{x:0.05,y:0.15},{x:0.05,y:0.15},{x:0.05,y:0.15},{x:0.06,y:0.15},{x:0.06,y:0.15},{x:0.06,y:0.15},{x:0.06,y:0.14},{x:0.07,y:0.14},{x:0.07,y:0.14},{x:0.07,y:0.14},{x:0.08,y:0.14},{x:0.08,y:0.13},{x:0.08,y:0.13},{x:0.08,y:0.13},{x:0.09,y:0.13},{x:0.09,y:0.12},{x:0.09,y:0.12},{x:0.09,y:0.12},{x:0.09,y:0.12},{x:0.1,y:0.11},{x:0.1,y:0.11},{x:0.1,y:0.1},{x:0.1,y:0.1},{x:0.11,y:0.09},{x:0.11,y:0.09},{x:0.11,y:0.09},{x:0.11,y:0.08},{x:0.11,y:0.08},{x:0.11,y:0.08},{x:0.11,y:0.07},{x:0.11,y:0.07},{x:0.11,y:0.07},{x:0.11,y:0.06},{x:0.11,y:0.06},{x:0.1,y:0.06},{x:0.1,y:0.06},{x:0.09,y:0.06},{x:0.09,y:0.06},{x:0.08,y:0.06},{x:0.07,y:0.06},{x:0.07,y:0.06},{x:0.06,y:0.06},{x:0.05,y:0.06},{x:0.05,y:0.06},{x:0.04,y:0.06},{x:0.03,y:0.06},{x:0.03,y:0.06},{x:0.02,y:0.06},{x:0.01,y:0.06},{x:0.01,y:0.06},{x:0,y:0.06},{x:-0.01,y:0.06},{x:-0.01,y:0.06},{x:-0.02,y:0.06},{x:-0.03,y:0.06},{x:-0.03,y:0.06},{x:-0.04,y:0.06},{x:-0.05,y:0.06},{x:-0.05,y:0.06},{x:-0.06,y:0.06},{x:-0.07,y:0.06},{x:-0.07,y:0.06},{x:-0.08,y:0.06},{x:-0.09,y:0.06},{x:-0.09,y:0.06}],color:"primary",fill:!0}},texts:{top1:{type:"text",text:"{REF}",x:0.01,y:0.27},bottom1:{type:"text",text:"{VAL}",x:-0.16,y:-0.27}},refblocks:{left1:{x:-0.47,y:-0.09},right1:{x:0.47,y:-0.09}},bounds:{minX:-0.5,maxX:0.5,minY:-0.27,maxY:0.27,width:1,height:0.53,centerX:0,centerY:0},circles:{}},{paths:HVn,texts:xdt,bounds:lde,refblocks:Cdt,circles:OVn}=FVn,Vut=jc({primitives:[...Object.values(HVn),...Object.values(OVn),{...xdt.top1,anchor:"middle_bottom",x:0},{...xdt.bottom1,anchor:"middle_top",x:0}],ports:[{...Cdt.left1,labels:["1"]},{...Cdt.right1,labels:["2"]}],size:{width:lde.width,height:lde.height},center:{x:lde.centerX+0.006,y:lde.centerY+0.06}}),k4e=yo(Vut),lJ=k4e.primitives.find((e)=>e.type==="text"&&e.text==="{REF}"),Zde=k4e.primitives.find((e)=>e.type==="text"&&e.text==="{VAL}");lJ.anchor="middle_left";Zde.anchor="middle_right";lJ.x=lJ.x-0.03;lJ.y=lJ.y;Zde.x=Zde.x;Zde.y=0;zVn=k4e,GVn={paths:{path11:{type:"path",points:[{x:-0.42,y:-0.1},{x:0.05,y:-0.11}],color:"primary",fill:!1},path40:{type:"path",points:[{x:0.09,y:0.19},{x:0.09,y:-0.18}],color:"primary",fill:!1},"path12-1":{type:"path",points:[{x:0.3,y:0.55},{x:0.3,y:0.11}],color:"primary",fill:!1},"path12-1-5":{type:"path",points:[{x:0.31,y:-0.55},{x:0.31,y:-0.01}],color:"primary",fill:!1},path2:{type:"path",points:[{x:0.09,y:0.11},{x:0.31,y:0.11}],color:"primary",fill:!1},"path2-5":{type:"path",points:[{x:0.09,y:-0.1},{x:0.31,y:-0.1}],color:"primary",fill:!1},path15:{type:"path",points:[{x:0.27,y:-0.04},{x:0.27,y:0.03},{x:0.2,y:0},{x:0.27,y:-0.04}],color:"primary",fill:!0},"path2-0":{type:"path",points:[{x:0.09,y:0},{x:0.31,y:-0.01}],color:"primary",fill:!1},"path12-1-0":{type:"path",points:[{x:0.05,y:0.17},{x:0.05,y:-0.11}],color:"primary",fill:!1}},texts:{top1:{type:"text",text:"{REF}",x:-0.13,y:0.36},bottom1:{type:"text",text:"{VAL}",x:0.06,y:-0.42}},refblocks:{top1:{x:0.3,y:0.55},bottom1:{x:0.31,y:-0.55},left1:{x:-0.42,y:-0.1}},bounds:{minX:-0.45,maxX:0.45,minY:-0.58,maxY:0.58,width:0.89,height:1.16,centerX:0,centerY:0},circles:{path1:{type:"circle",x:0.16,y:0,radius:0.29,color:"primary",fill:!1}}},{paths:YVn,texts:Idt,bounds:bdt,refblocks:ZR,circles:VVn}=GVn,Uut={x:bdt.centerX,y:bdt.centerY},UVn={x:Uut.x,y:ZR.left1.y},Fv=jc({primitives:[...Object.values(YVn),...Object.values(VVn),{...Idt.top1,anchor:"middle_right",x:0},{...Idt.bottom1,anchor:"middle_right",x:0}],ports:[{...ZR.top1,labels:["1","drain"]},{...ZR.bottom1,labels:["2","source"]},{...ZR.left1,labels:["3","gate"]}],size:mJ(Uut,[ZR.top1,ZR.bottom1,ZR.left1]),center:UVn}),Wut=yo(Fv),Xut=Wut.primitives.filter((e)=>e.type==="text"),L4e=Xut.find((e)=>e.text==="{VAL}");L4e.x=-0.35;L4e.y=0;L4e.anchor="middle_right";F4e=Xut.find((e)=>e.text==="{REF}");F4e.y=0;F4e.x=0.35;F4e.anchor="middle_left";kM=Wut,WVn=il({horizontalSymbol:Fv,verticalSymbol:kM,gateSide:"bottom",drainSide:"left"}),XVn=il({horizontalSymbol:Fv,verticalSymbol:kM,gateSide:"bottom",drainSide:"right"}),KVn=il({horizontalSymbol:Fv,verticalSymbol:kM,gateSide:"left",drainSide:"bottom"}),jVn=il({horizontalSymbol:Fv,verticalSymbol:kM,gateSide:"left",drainSide:"top"}),qVn=il({horizontalSymbol:Fv,verticalSymbol:kM,gateSide:"right",drainSide:"bottom"}),JVn=il({horizontalSymbol:Fv,verticalSymbol:kM,gateSide:"right",drainSide:"top"}),$Vn=il({horizontalSymbol:Fv,verticalSymbol:kM,gateSide:"top",drainSide:"left"}),ZVn=il({horizontalSymbol:Fv,verticalSymbol:kM,gateSide:"top",drainSide:"right"}),eUn={paths:{path11:{type:"path",points:[{x:-0.42,y:-0.1},{x:0.05,y:-0.11}],color:"primary",fill:!1},"path12-1":{type:"path",points:[{x:0.3,y:0.55},{x:0.3,y:0.11}],color:"primary",fill:!1},"path12-1-5":{type:"path",points:[{x:0.31,y:-0.55},{x:0.31,y:-0.01}],color:"primary",fill:!1},path2:{type:"path",points:[{x:0.09,y:0.11},{x:0.31,y:0.11}],color:"primary",fill:!1},"path2-8-3-7":{type:"path",points:[{x:0.09,y:0.15},{x:0.09,y:0.07}],color:"primary",fill:!1},"path2-5":{type:"path",points:[{x:0.09,y:-0.1},{x:0.31,y:-0.1}],color:"primary",fill:!1},"path2-8-3":{type:"path",points:[{x:0.09,y:-0.08},{x:0.09,y:-0.15}],color:"primary",fill:!1},"path2-8-3-2":{type:"path",points:[{x:0.09,y:0.03},{x:0.09,y:-0.04}],color:"primary",fill:!1},path15:{type:"path",points:[{x:0.27,y:-0.04},{x:0.27,y:0.03},{x:0.2,y:0},{x:0.27,y:-0.04}],color:"primary",fill:!0},"path2-0":{type:"path",points:[{x:0.09,y:0},{x:0.31,y:-0.01}],color:"primary",fill:!1},"path12-1-0":{type:"path",points:[{x:0.05,y:0.11},{x:0.05,y:-0.11}],color:"primary",fill:!1}},texts:{top1:{type:"text",text:"{REF}",x:-0.13,y:0.36},bottom1:{type:"text",text:"{VAL}",x:0.06,y:-0.42}},refblocks:{top1:{x:0.3,y:0.55},bottom1:{x:0.31,y:-0.55},left1:{x:-0.42,y:-0.1}},bounds:{minX:-0.45,maxX:0.45,minY:-0.58,maxY:0.58,width:0.89,height:1.16,centerX:0,centerY:0},circles:{path1:{type:"circle",x:0.16,y:0,radius:0.29,color:"primary",fill:!1}}},{paths:tUn,texts:Sdt,bounds:Pdt,refblocks:Uz,circles:nUn}=eUn,vdt={x:Pdt.centerX,y:Pdt.centerY},Hv=jc({primitives:[...Object.values(tUn),...Object.values(nUn),{...Sdt.top1,anchor:"middle_right",x:0},{...Sdt.bottom1,anchor:"middle_right",x:0}],ports:[{...Uz.top1,labels:["1","drain"]},{...Uz.bottom1,labels:["2","source"]},{...Uz.left1,labels:["3","gate"]}],size:mJ(vdt,[Uz.top1,Uz.bottom1,Uz.left1]),center:vdt}),Kut=yo(Hv),jut=Kut.primitives.filter((e)=>e.type==="text"),H4e=jut.find((e)=>e.text==="{VAL}");H4e.x=-0.35;H4e.y=0;H4e.anchor="middle_right";O4e=jut.find((e)=>e.text==="{REF}");O4e.y=0;O4e.x=0.35;O4e.anchor="middle_left";LM=Kut,oUn=il({horizontalSymbol:Hv,verticalSymbol:LM,gateSide:"bottom",drainSide:"left"}),iUn=il({horizontalSymbol:Hv,verticalSymbol:LM,gateSide:"bottom",drainSide:"right"}),rUn=il({horizontalSymbol:Hv,verticalSymbol:LM,gateSide:"left",drainSide:"bottom"}),sUn=il({horizontalSymbol:Hv,verticalSymbol:LM,gateSide:"left",drainSide:"top"}),aUn=il({horizontalSymbol:Hv,verticalSymbol:LM,gateSide:"right",drainSide:"bottom"}),cUn=il({horizontalSymbol:Hv,verticalSymbol:LM,gateSide:"right",drainSide:"top"}),lUn=il({horizontalSymbol:Hv,verticalSymbol:LM,gateSide:"top",drainSide:"left"}),dUn=il({horizontalSymbol:Hv,verticalSymbol:LM,gateSide:"top",drainSide:"right"}),uUn={paths:{path11:{type:"path",points:[{x:-0.4,y:0},{x:0.06,y:-0.01}],color:"primary",fill:!1},path40:{type:"path",points:[{x:0.07,y:0.19},{x:0.07,y:-0.18}],color:"primary",fill:!1},"path12-1":{type:"path",points:[{x:0.28,y:0.55},{x:0.28,y:0.11}],color:"primary",fill:!1},"path12-1-5":{type:"path",points:[{x:0.29,y:-0.55},{x:0.29,y:-0.1}],color:"primary",fill:!1},path2:{type:"path",points:[{x:0.07,y:0.11},{x:0.29,y:0.11}],color:"primary",fill:!1},"path2-5":{type:"path",points:[{x:0.07,y:-0.1},{x:0.29,y:-0.1}],color:"primary",fill:!1},path15:{type:"path",points:[{x:-0.08,y:0.06},{x:-0.08,y:-0.07},{x:0.01,y:0},{x:-0.08,y:0.06}],color:"primary",fill:!0}},texts:{top1:{type:"text",text:"{REF}",x:-0.15,y:0.36},bottom1:{type:"text",text:"{VAL}",x:0.04,y:-0.42}},refblocks:{top1:{x:0.28,y:0.55},bottom1:{x:0.29,y:-0.55},left1:{x:-0.4,y:0}},bounds:{minX:-0.43,maxX:0.43,minY:-0.58,maxY:0.58,width:0.85,height:1.16,centerX:0,centerY:0},circles:{path1:{type:"circle",x:0.14,y:0,radius:0.29,color:"primary",fill:!1}}},{paths:hUn,texts:Edt,bounds:dde,refblocks:VEe,circles:mUn}=uUn,qut=jc({primitives:[...Object.values(hUn),...Object.values(mUn),{...Edt.top1,anchor:"middle_right",x:0},{...Edt.bottom1,anchor:"middle_right",x:0}],ports:[{...VEe.top1,labels:["1","drain"]},{...VEe.bottom1,labels:["2","source"]},{...VEe.left1,labels:["3","gate"]}],size:{width:dde.width,height:dde.height},center:{x:dde.centerX,y:dde.centerY}}),Jut=yo(qut),$ut=Jut.primitives.filter((e)=>e.type==="text"),z4e=$ut.find((e)=>e.text==="{VAL}");z4e.x=-0.35;z4e.y=0;z4e.anchor="middle_right";G4e=$ut.find((e)=>e.text==="{REF}");G4e.y=0;G4e.x=0.35;G4e.anchor="middle_left";pUn=Jut,AUn={paths:{diag1:{type:"path",points:[{x:-0.1,y:-0.1},{x:0.1,y:0.1}],color:"primary",fill:!1},diag2:{type:"path",points:[{x:-0.1,y:0.1},{x:0.1,y:-0.1}],color:"primary",fill:!1},stem:{type:"path",points:[{x:-0.2,y:0},{x:0,y:0}],color:"primary",fill:!1}},texts:{},refblocks:{left1:{x:-0.2,y:0}},bounds:{minX:-0.19,maxX:0.2,minY:-0.12,maxY:0.12,width:0.39,height:0.24,centerX:0,centerY:0},circles:{}},{paths:_Un,bounds:Mdt,refblocks:gUn}=AUn,Mue=sn({primitives:[...Object.values(_Un)],ports:[{...gUn.left1,labels:["1"]}],center:{x:Mdt.centerX,y:Mdt.centerY}}).rotateRightFacingSymbol("right").labelPort("left1",["1"]).build(),fUn=yo(Mue,"down"),yUn=yo(Mue,"left"),xUn=yo(Mue,"up"),oG={paths:{path11:{type:"path",points:[{x:-0.4,y:0},{x:0.06,y:-0.01}],color:"primary",fill:!1},"path40-0":{type:"path",points:[{x:0.07,y:0.27},{x:0.07,y:-0.28}],color:"primary",fill:!1},"path40-0-5":{type:"path",points:[{x:0.28,y:0.24},{x:0.08,y:0.11}],color:"primary",fill:!1},"path40-0-5-0":{type:"path",points:[{x:0.29,y:-0.24},{x:0.09,y:-0.11}],color:"primary",fill:!1},"path12-1-5":{type:"path",points:[{x:0.29,y:0.25},{x:0.29,y:0.55}],color:"primary",fill:!1},"path12-1-5-3":{type:"path",points:[{x:0.29,y:-0.55},{x:0.29,y:-0.25}],color:"primary",fill:!1},path15:{type:"path",points:[{x:0.19,y:-0.1},{x:0.12,y:-0.2},{x:0.22,y:-0.2},{x:0.19,y:-0.1}],color:"primary",fill:!0}},texts:{top1:{type:"text",text:"{REF}",x:-0.08,y:0.36},bottom1:{type:"text",text:"{VAL}",x:-0.07,y:-0.41}},refblocks:{top1:{x:0.29,y:0.55},bottom1:{x:0.29,y:-0.55},left1:{x:-0.4,y:0}},bounds:{minX:-0.43,maxX:0.43,minY:-0.58,maxY:0.58,width:0.85,height:1.16,centerX:0,centerY:0},circles:{"path1-0":{type:"circle",x:0.14,y:0,radius:0.29,color:"primary",fill:!1}}},{paths:CUn,texts:Lbr,bounds:ude,refblocks:UEe,circles:IUn}=oG,bUn=sn({primitives:[...Object.values(CUn),...Object.values(IUn),{type:"text",text:"{REF}",x:-0.3,y:0.5094553499999995},{type:"text",text:"{VAL}",x:-0.3,y:-0.5094553499999995}],ports:[{...UEe.top1,labels:["1","collector"]},{...UEe.bottom1,labels:["3","emitter"]},{...UEe.left1,labels:["2","base"]}],size:{width:ude.width,height:ude.height},center:{x:ude.centerX,y:ude.centerY}}).rotateRightFacingSymbol("right").changeTextAnchor("{REF}","middle_right").changeTextAnchor("{VAL}","middle_right").build(),{paths:SUn,texts:Fbr,bounds:hde,refblocks:WEe,circles:PUn}=oG,vUn=sn({primitives:[...Object.values(SUn),...Object.values(PUn),{type:"text",text:"{REF}",x:0.55,y:-0.4094553499999995},{type:"text",text:"{VAL}",x:-0.3,y:-0.4094553499999995}],ports:[{...WEe.top1,labels:["1","collector"]},{...WEe.bottom1,labels:["3","emitter"]},{...WEe.left1,labels:["2","base"]}],size:{width:hde.width,height:hde.height},center:{x:hde.centerX,y:hde.centerY}}).rotateRightFacingSymbol("up").changeTextAnchor("{REF}","middle_bottom").changeTextAnchor("{VAL}","middle_top").build(),{paths:EUn,texts:Hbr,bounds:mde,refblocks:XEe,circles:MUn}=oG,BUn=sn({primitives:[...Object.values(EUn),...Object.values(MUn),{type:"text",text:"{REF}",x:-0.5,y:0.3094553499999995},{type:"text",text:"{VAL}",x:0.55,y:0.3094553499999995}],ports:[{...XEe.top1,labels:["1","collector"]},{...XEe.bottom1,labels:["3","emitter"]},{...XEe.left1,labels:["2","base"]}],size:{width:mde.width,height:mde.height},center:{x:mde.centerX,y:mde.centerY}}).rotateRightFacingSymbol("down").changeTextAnchor("{REF}","middle_bottom").changeTextAnchor("{VAL}","middle_top").build(),{paths:wUn,texts:Obr,bounds:pde,refblocks:KEe,circles:TUn}=oG,DUn=sn({primitives:[...Object.values(wUn),...Object.values(TUn),{type:"text",text:"{REF}",x:0.55,y:-0.4094553499999995},{type:"text",text:"{VAL}",x:-0.3,y:-0.4094553499999995}],ports:[{...KEe.top1,labels:["1","collector"]},{...KEe.bottom1,labels:["3","emitter"]},{...KEe.left1,labels:["2","base"]}],size:{width:pde.width,height:pde.height},center:{x:pde.centerX,y:pde.centerY}}).rotateRightFacingSymbol("up").changeTextAnchor("{REF}","middle_bottom").changeTextAnchor("{VAL}","middle_top").build(),{paths:NUn,texts:zbr,bounds:Ade,refblocks:jEe,circles:RUn}=oG,QUn=sn({primitives:[...Object.values(NUn),...Object.values(RUn),{type:"text",text:"{REF}",x:-0.3,y:-0.4094553499999995},{type:"text",text:"{VAL}",x:-0.3,y:0.4094553499999995}],ports:[{...jEe.top1,labels:["1","collector"]},{...jEe.bottom1,labels:["3","emitter"]},{...jEe.left1,labels:["2","base"]}],size:{width:Ade.width,height:Ade.height},center:{x:Ade.centerX,y:Ade.centerY}}).rotateRightFacingSymbol("left").changeTextAnchor("{REF}","middle_left").changeTextAnchor("{VAL}","middle_left").build(),{paths:kUn,texts:Gbr,bounds:_de,refblocks:qEe,circles:LUn}=oG,FUn=sn({primitives:[...Object.values(kUn),...Object.values(LUn),{type:"text",text:"{REF}",x:-0.3,y:-0.4094553499999995},{type:"text",text:"{VAL}",x:-0.3,y:0.4094553499999995}],ports:[{...qEe.top1,labels:["1","collector"]},{...qEe.bottom1,labels:["3","emitter"]},{...qEe.left1,labels:["2","base"]}],size:{width:_de.width,height:_de.height},center:{x:_de.centerX,y:_de.centerY}}).rotateRightFacingSymbol("left").changeTextAnchor("{REF}","middle_left").changeTextAnchor("{VAL}","middle_left").build(),HUn={paths:{path40:{type:"path",points:[{x:0.14,y:0.04},{x:-0.32,y:-0.21}],color:"primary",fill:!1},path41:{type:"path",points:[{x:-0.32,y:0.31},{x:0.14,y:0.04}],color:"primary",fill:!1},path42:{type:"path",points:[{x:-0.32,y:-0.21},{x:-0.32,y:0.31}],color:"primary",fill:!1},path44:{type:"path",points:[{x:-0.32,y:0.18},{x:-0.57,y:0.18}],color:"primary",fill:!1},path45:{type:"path",points:[{x:-0.32,y:-0.09},{x:-0.57,y:-0.09}],color:"primary",fill:!1},"path44-0":{type:"path",points:[{x:0.43,y:0.04},{x:0.15,y:0.04}],color:"primary",fill:!1},"rect1577-3":{type:"path",points:[{x:-0.19,y:-0.09},{x:-0.27,y:-0.09}],color:"primary",fill:!0},"rect1577-4":{type:"path",points:[{x:-0.19,y:0.18},{x:-0.27,y:0.18}],color:"primary",fill:!0},"rect1577-4-7":{type:"path",points:[{x:-0.23,y:0.14},{x:-0.23,y:0.22}],color:"primary",fill:!0}},texts:{top1:{type:"text",text:"{REF}",x:-0.01,y:0.42},bottom1:{type:"text",text:"{VAL}",x:0,y:-0.3}},refblocks:{left1:{x:-0.57,y:0.18},left2:{x:-0.57,y:-0.09},right1:{x:0.43,y:0.04}},bounds:{minX:-0.57,maxX:0.43,minY:-0.38,maxY:0.27,width:1.09,height:0.3,centerX:-0.07,centerY:0.05},circles:{}},Bue=sn(HUn).labelPort("left1",["1","inp1"]).labelPort("left2",["2","inp2"]).labelPort("right1",["3","out"]).changeTextAnchor("{REF}","middle_bottom").changeTextAnchor("{VAL}","middle_top").build(),OUn=yo(Bue,"down"),zUn=Kz(yo(Bue,"left")),GUn=yo(Bue,"up"),YUn={paths:{path40:{type:"path",points:[{x:0.14,y:0.04},{x:-0.32,y:-0.21}],color:"primary",fill:!1},path41:{type:"path",points:[{x:-0.32,y:0.31},{x:0.14,y:0.04}],color:"primary",fill:!1},path42:{type:"path",points:[{x:-0.32,y:-0.21},{x:-0.32,y:0.31}],color:"primary",fill:!1},path44:{type:"path",points:[{x:-0.32,y:0.18},{x:-0.57,y:0.18}],color:"primary",fill:!1},path45:{type:"path",points:[{x:-0.32,y:-0.09},{x:-0.57,y:-0.09}],color:"primary",fill:!1},"path44-0":{type:"path",points:[{x:0.43,y:0.04},{x:0.15,y:0.04}],color:"primary",fill:!1},"path44-1":{type:"path",points:[{x:-0.1,y:0.44},{x:-0.1,y:0.18}],color:"primary",fill:!1},"path44-2":{type:"path",points:[{x:-0.09,y:-0.34},{x:-0.09,y:-0.09}],color:"primary",fill:!1},"rect1577-3":{type:"path",points:[{x:-0.19,y:0.18},{x:-0.27,y:0.18}],color:"primary",fill:!0},"rect1577-4":{type:"path",points:[{x:-0.19,y:-0.09},{x:-0.27,y:-0.09}],color:"primary",fill:!0},"rect1577-4-7":{type:"path",points:[{x:-0.23,y:0.14},{x:-0.23,y:0.22}],color:"primary",fill:!0}},texts:{top1:{type:"text",text:"{REF}",x:0.25,y:0.32},bottom1:{type:"text",text:"{VAL}",x:0.25,y:-0.24}},refblocks:{left1:{x:-0.57,y:0.18},left2:{x:-0.57,y:-0.09},right1:{x:0.43,y:0.04},top2:{x:-0.1,y:0.44},bottom1:{x:-0.09,y:-0.34}},bounds:{minX:-0.57,maxX:0.43,minY:-0.38,maxY:0.27,width:1.09,height:0.3,centerX:-0.07,centerY:0.05},circles:{}},wue=sn(YUn).labelPort("left1",["1","inp1"]).labelPort("left2",["2","inp2"]).labelPort("right1",["4","out"]).labelPort("top2",["5","V+"]).labelPort("bottom1",["3","V-"]).changeTextAnchor("{REF}","middle_bottom").changeTextAnchor("{VAL}","middle_top").build(),VUn=yo(wue,"down"),UUn=Kz(yo(wue,"left")),WUn=yo(wue,"up"),XUn={paths:{path11:{type:"path",points:[{x:-0.42,y:-0.1},{x:0.05,y:-0.11}],color:"primary",fill:!1},path40:{type:"path",points:[{x:0.09,y:0.19},{x:0.09,y:-0.18}],color:"primary",fill:!1},"path12-1":{type:"path",points:[{x:0.3,y:0.55},{x:0.3,y:0.11}],color:"primary",fill:!1},"path12-1-5":{type:"path",points:[{x:0.31,y:-0.55},{x:0.31,y:-0.01}],color:"primary",fill:!1},path2:{type:"path",points:[{x:0.09,y:0.11},{x:0.31,y:0.11}],color:"primary",fill:!1},"path2-5":{type:"path",points:[{x:0.09,y:-0.1},{x:0.31,y:-0.1}],color:"primary",fill:!1},path15:{type:"path",points:[{x:0.2,y:0.03},{x:0.2,y:-0.04},{x:0.27,y:-0.01},{x:0.2,y:0.03}],color:"primary",fill:!0},"path2-0":{type:"path",points:[{x:0.09,y:0},{x:0.31,y:-0.01}],color:"primary",fill:!1},"path12-1-0":{type:"path",points:[{x:0.05,y:0.17},{x:0.05,y:-0.11}],color:"primary",fill:!1}},texts:{top1:{type:"text",text:"{REF}",x:-0.13,y:0.36},bottom1:{type:"text",text:"{VAL}",x:0.06,y:-0.42}},refblocks:{top1:{x:0.3,y:0.55},bottom1:{x:0.31,y:-0.55},left1:{x:-0.42,y:-0.1}},bounds:{minX:-0.45,maxX:0.45,minY:-0.58,maxY:0.58,width:0.89,height:1.16,centerX:0,centerY:0},circles:{path1:{type:"circle",x:0.16,y:0,radius:0.29,color:"primary",fill:!1}}},{paths:KUn,texts:Bdt,bounds:wdt,refblocks:Wz,circles:jUn}=XUn,Tdt={x:wdt.centerX,y:wdt.centerY},Ov=jc({primitives:[...Object.values(KUn),...Object.values(jUn),{...Bdt.top1,anchor:"middle_right",x:0},{...Bdt.bottom1,anchor:"middle_right",x:0}],ports:[{...Wz.top1,labels:["1","drain"]},{...Wz.bottom1,labels:["2","source"]},{...Wz.left1,labels:["3","gate"]}],size:mJ(Tdt,[Wz.top1,Wz.bottom1,Wz.left1]),center:Tdt}),Zut=yo(Ov),eht=Zut.primitives.filter((e)=>e.type==="text"),Y4e=eht.find((e)=>e.text==="{VAL}");Y4e.x=-0.35;Y4e.y=0;Y4e.anchor="middle_right";V4e=eht.find((e)=>e.text==="{REF}");V4e.y=0;V4e.x=0.35;V4e.anchor="middle_left";FM=Zut,qUn=il({horizontalSymbol:Ov,verticalSymbol:FM,gateSide:"bottom",drainSide:"left"}),JUn=il({horizontalSymbol:Ov,verticalSymbol:FM,gateSide:"bottom",drainSide:"right"}),$Un=il({horizontalSymbol:Ov,verticalSymbol:FM,gateSide:"left",drainSide:"bottom"}),ZUn=il({horizontalSymbol:Ov,verticalSymbol:FM,gateSide:"left",drainSide:"top"}),eWn=il({horizontalSymbol:Ov,verticalSymbol:FM,gateSide:"right",drainSide:"bottom"}),tWn=il({horizontalSymbol:Ov,verticalSymbol:FM,gateSide:"right",drainSide:"top"}),nWn=il({horizontalSymbol:Ov,verticalSymbol:FM,gateSide:"top",drainSide:"left"}),oWn=il({horizontalSymbol:Ov,verticalSymbol:FM,gateSide:"top",drainSide:"right"}),iWn={paths:{path11:{type:"path",points:[{x:-0.42,y:-0.1},{x:0.05,y:-0.11}],color:"primary",fill:!1},"path12-1":{type:"path",points:[{x:0.3,y:0.55},{x:0.3,y:0.11}],color:"primary",fill:!1},"path12-1-5":{type:"path",points:[{x:0.31,y:-0.55},{x:0.31,y:-0.01}],color:"primary",fill:!1},path2:{type:"path",points:[{x:0.09,y:0.11},{x:0.31,y:0.11}],color:"primary",fill:!1},"path2-8-3-7":{type:"path",points:[{x:0.09,y:0.15},{x:0.09,y:0.07}],color:"primary",fill:!1},"path2-5":{type:"path",points:[{x:0.09,y:-0.1},{x:0.31,y:-0.1}],color:"primary",fill:!1},"path2-8-3":{type:"path",points:[{x:0.09,y:-0.08},{x:0.09,y:-0.15}],color:"primary",fill:!1},"path2-8-3-2":{type:"path",points:[{x:0.09,y:0.03},{x:0.09,y:-0.04}],color:"primary",fill:!1},path15:{type:"path",points:[{x:0.2,y:0.03},{x:0.2,y:-0.04},{x:0.27,y:-0.01},{x:0.2,y:0.03}],color:"primary",fill:!0},"path2-0":{type:"path",points:[{x:0.09,y:0},{x:0.31,y:-0.01}],color:"primary",fill:!1},"path12-1-0":{type:"path",points:[{x:0.05,y:0.11},{x:0.05,y:-0.11}],color:"primary",fill:!1}},texts:{top1:{type:"text",text:"{REF}",x:-0.13,y:0.36},bottom1:{type:"text",text:"{VAL}",x:0.06,y:-0.42}},refblocks:{top1:{x:0.3,y:0.55},bottom1:{x:0.31,y:-0.55},left1:{x:-0.42,y:-0.1}},bounds:{minX:-0.45,maxX:0.45,minY:-0.58,maxY:0.58,width:0.89,height:1.16,centerX:0,centerY:0},circles:{path1:{type:"circle",x:0.16,y:0,radius:0.29,color:"primary",fill:!1}}},{paths:rWn,texts:Ddt,bounds:Ndt,refblocks:Xz,circles:sWn}=iWn,Rdt={x:Ndt.centerX,y:Ndt.centerY},zv=jc({primitives:[...Object.values(rWn),...Object.values(sWn),{...Ddt.top1,anchor:"middle_right",x:0},{...Ddt.bottom1,anchor:"middle_right",x:0}],ports:[{...Xz.top1,labels:["1","drain"]},{...Xz.bottom1,labels:["2","source"]},{...Xz.left1,labels:["3","gate"]}],size:mJ(Rdt,[Xz.top1,Xz.bottom1,Xz.left1]),center:Rdt}),tht=yo(zv),nht=tht.primitives.filter((e)=>e.type==="text"),U4e=nht.find((e)=>e.text==="{VAL}");U4e.x=-0.35;U4e.y=0;U4e.anchor="middle_right";W4e=nht.find((e)=>e.text==="{REF}");W4e.y=0;W4e.x=0.35;W4e.anchor="middle_left";HM=tht,aWn=il({horizontalSymbol:zv,verticalSymbol:HM,gateSide:"bottom",drainSide:"left"}),cWn=il({horizontalSymbol:zv,verticalSymbol:HM,gateSide:"bottom",drainSide:"right"}),lWn=il({horizontalSymbol:zv,verticalSymbol:HM,gateSide:"left",drainSide:"bottom"}),dWn=il({horizontalSymbol:zv,verticalSymbol:HM,gateSide:"left",drainSide:"top"}),uWn=il({horizontalSymbol:zv,verticalSymbol:HM,gateSide:"right",drainSide:"bottom"}),hWn=il({horizontalSymbol:zv,verticalSymbol:HM,gateSide:"right",drainSide:"top"}),mWn=il({horizontalSymbol:zv,verticalSymbol:HM,gateSide:"top",drainSide:"left"}),pWn=il({horizontalSymbol:zv,verticalSymbol:HM,gateSide:"top",drainSide:"right"}),AWn={paths:{path11:{type:"path",points:[{x:-0.54,y:-0.01},{x:-0.15,y:-0.02}],color:"primary",fill:!1},path40:{type:"path",points:[{x:0.13,y:0},{x:-0.13,y:-0.13}],color:"primary",fill:!1},path41:{type:"path",points:[{x:-0.13,y:0.13},{x:0.13,y:0}],color:"primary",fill:!1},path42:{type:"path",points:[{x:-0.13,y:-0.13},{x:-0.13,y:0.13}],color:"primary",fill:!1},path43:{type:"path",points:[{x:0.13,y:0.13},{x:0.13,y:-0.13}],color:"primary",fill:!1},path12:{type:"path",points:[{x:0.14,y:0},{x:0.54,y:-0.01}],color:"primary",fill:!1},"path25-0":{type:"path",points:[{x:0.2,y:0.38},{x:0.16,y:0.28},{x:0.26,y:0.3}],color:"primary",fill:!0},"path78-6":{type:"path",points:[{x:0.33,y:0.43},{x:0.32,y:0.42},{x:0.21,y:0.31},{x:0.21,y:0.31}],color:"primary",fill:!1},"path25-0-9":{type:"path",points:[{x:0.35,y:0.35},{x:0.31,y:0.26},{x:0.41,y:0.27}],color:"primary",fill:!0},"path78-6-5":{type:"path",points:[{x:0.48,y:0.4},{x:0.47,y:0.39},{x:0.35,y:0.29},{x:0.35,y:0.29}],color:"primary",fill:!1}},texts:{top1:{type:"text",text:"{REF}",x:-0.1,y:0.35},bottom1:{type:"text",text:"{VAL}",x:0,y:-0.43}},refblocks:{left1:{x:-0.54,y:-0.01},right1:{x:0.54,y:-0.01}},bounds:{minX:-0.57,maxX:0.57,minY:-0.43,maxY:0.43,width:1.14,height:0.85,centerX:0,centerY:0},circles:{path1:{type:"circle",x:0,y:-0.01,radius:0.29,color:"primary",fill:!1}}},oht=sn(AWn).changeTextAnchor("{VAL}","middle_top").labelPort("left1",["1"]).labelPort("right1",["2"]).changeTextAnchor("{REF}","middle_bottom").build(),iht=yo(oht),_Wn=iht.primitives.filter((e)=>e.type==="text"),rht=_Wn.find((e)=>e.text==="{REF}");rht.y=0;rht.anchor="middle_left";gWn=iht,X4e={paths:{enclosure:{type:"path",points:[{x:-0.5,y:0.2749999999999999},{x:0.5,y:0.2749999999999999},{x:0.5,y:-0.27500000000000013},{x:-0.5,y:-0.27500000000000013},{x:-0.5,y:0.2749999999999999}],color:"primary",fill:!1},"pin-one-lead":{type:"path",points:[{x:-0.6499999999999999,y:0.10833329999999997},{x:-0.5,y:0.10833329999999997}],color:"primary",fill:!1},"pin-two-lead":{type:"path",points:[{x:-0.6499999999999999,y:-0.10833329999999997},{x:-0.5,y:-0.10833329999999997}],color:"primary",fill:!1},"pin-four-lead":{type:"path",points:[{x:0.5,y:0.10833329999999997},{x:0.6499999999999999,y:0.10833329999999997}],color:"primary",fill:!1},"pin-three-lead":{type:"path",points:[{x:0.5,y:-0.10833329999999997},{x:0.6499999999999999,y:-0.10833329999999997}],color:"primary",fill:!1},"led-anode-lead":{type:"path",points:[{x:-0.5,y:0.10833329999999997},{x:-0.2749999999999999,y:0.10833329999999997},{x:-0.2749999999999999,y:0.04999999999999982}],color:"primary",fill:!1},"led-body":{type:"path",points:[{x:-0.32499999999999996,y:0.04999999999999982},{x:-0.22499999999999987,y:0.04999999999999982},{x:-0.2749999999999999,y:-0.050000000000000044},{x:-0.32499999999999996,y:0.04999999999999982}],color:"primary",fill:!1},"led-cathode":{type:"path",points:[{x:-0.32499999999999996,y:-0.050000000000000044},{x:-0.22499999999999987,y:-0.050000000000000044}],color:"primary",fill:!1},"led-cathode-lead":{type:"path",points:[{x:-0.2749999999999999,y:-0.050000000000000044},{x:-0.2749999999999999,y:-0.10833329999999997},{x:-0.5,y:-0.10833329999999997}],color:"primary",fill:!1},collector:{type:"path",points:[{x:0.5,y:0.10833329999999997},{x:0.3700000000000001,y:0.10833329999999997},{x:0.28000000000000025,y:0.05499999999999994}],color:"primary",fill:!1},"transistor-base":{type:"path",points:[{x:0.28000000000000025,y:0.08499999999999996},{x:0.28000000000000025,y:-0.08499999999999996}],color:"primary",fill:!1},emitter:{type:"path",points:[{x:0.28000000000000025,y:-0.05500000000000016},{x:0.375,y:-0.10833329999999997},{x:0.5,y:-0.10833329999999997}],color:"primary",fill:!1},"emitter-arrow":{type:"path",points:[{x:0.31620000000000004,y:-0.09600000000000009},{x:0.365,y:-0.10270000000000024},{x:0.3338000000000001,y:-0.06460000000000021}],color:"primary",fill:!1},"light-ray-one":{type:"path",points:[{x:-0.1299999999999999,y:0.10499999999999998},{x:0.1050000000000002,y:0.009999999999999787}],color:"primary",fill:!1},"light-ray-one-head":{type:"path",points:[{x:0.04700000000000015,y:0.014000000000000012},{x:0.1050000000000002,y:0.009999999999999787},{x:0.06099999999999994,y:0.04699999999999993}],color:"primary",fill:!1},"light-ray-two":{type:"path",points:[{x:-0.1299999999999999,y:-0.0050000000000001155},{x:0.1050000000000002,y:-0.10000000000000009}],color:"primary",fill:!1},"light-ray-two-head":{type:"path",points:[{x:0.04700000000000015,y:-0.09600000000000009},{x:0.1050000000000002,y:-0.10000000000000009},{x:0.06099999999999994,y:-0.06300000000000017}],color:"primary",fill:!1}},texts:{top1:{type:"text",text:"{REF}",x:0,y:0.3800000000000001},bottom1:{type:"text",text:"{VAL}",x:0,y:-0.3800000000000001}},refblocks:{left1:{x:-0.6499999999999999,y:-0.10833333333330031},left2:{x:-0.6499999999999999,y:0.10833333333329986},right1:{x:0.6499999999999999,y:-0.10833333333330031},right2:{x:0.6499999999999999,y:0.10833333333329986}},bounds:{minX:-0.6499999999999999,maxX:0.6499999999999999,minY:-0.3800000000000001,maxY:0.3800000000000001,width:1.2999999999999998,height:0.7600000000000002,centerX:0,centerY:0},circles:{}},fWn=sn(X4e).labelPort("left1",["2","cathode","input_cathode"]).labelPort("left2",["1","anode","input_anode"]).labelPort("right1",["3","emitter","output_emitter"]).labelPort("right2",["4","collector","output_collector"]).changeTextAnchor("{REF}","middle_bottom").changeTextAnchor("{VAL}","middle_top").rotateRightFacingSymbol("down").build(),sht=sn(X4e).labelPort("left1",["2","cathode","input_cathode"]).labelPort("left2",["1","anode","input_anode"]).labelPort("right1",["3","emitter","output_emitter"]).labelPort("right2",["4","collector","output_collector"]).changeTextAnchor("{REF}","middle_bottom").changeTextAnchor("{VAL}","middle_top").rotateRightFacingSymbol("right").build(),yWn=L5(sht),xWn=sn(X4e).labelPort("left1",["2","cathode","input_cathode"]).labelPort("left2",["1","anode","input_anode"]).labelPort("right1",["3","emitter","output_emitter"]).labelPort("right2",["4","collector","output_collector"]).changeTextAnchor("{REF}","middle_bottom").changeTextAnchor("{VAL}","middle_top").rotateRightFacingSymbol("up").build(),CWn={paths:{path11:{type:"path",points:[{x:-0.4,y:0},{x:0.06,y:-0.01}],color:"primary",fill:!1},path40:{type:"path",points:[{x:0.07,y:0.19},{x:0.07,y:-0.18}],color:"primary",fill:!1},"path12-1":{type:"path",points:[{x:0.28,y:0.55},{x:0.28,y:0.11}],color:"primary",fill:!1},"path12-1-5":{type:"path",points:[{x:0.29,y:-0.55},{x:0.29,y:-0.1}],color:"primary",fill:!1},path2:{type:"path",points:[{x:0.07,y:0.11},{x:0.29,y:0.11}],color:"primary",fill:!1},"path2-5":{type:"path",points:[{x:0.07,y:-0.1},{x:0.29,y:-0.1}],color:"primary",fill:!1},path15:{type:"path",points:[{x:0.01,y:-0.07},{x:0.01,y:0.06},{x:-0.08,y:0},{x:0.01,y:-0.07}],color:"primary",fill:!0}},texts:{top1:{type:"text",text:"{REF}",x:-0.15,y:0.36},bottom1:{type:"text",text:"{VAL}",x:0.04,y:-0.42}},refblocks:{top1:{x:0.28,y:0.55},bottom1:{x:0.29,y:-0.55},left1:{x:-0.4,y:0}},bounds:{minX:-0.43,maxX:0.43,minY:-0.58,maxY:0.58,width:0.85,height:1.16,centerX:0,centerY:0},circles:{path1:{type:"circle",x:0.14,y:0,radius:0.29,color:"primary",fill:!1}}},{paths:IWn,texts:Qdt,bounds:gde,refblocks:JEe,circles:bWn}=CWn,aht=jc({primitives:[...Object.values(IWn),...Object.values(bWn),{...Qdt.top1,anchor:"middle_right",x:0},{...Qdt.bottom1,anchor:"middle_right"}],ports:[{...JEe.top1,labels:["1","drain"]},{...JEe.bottom1,labels:["2","source"]},{...JEe.left1,labels:["3","gate"]}],size:{width:gde.width,height:gde.height},center:{x:gde.centerX,y:gde.centerY}}),cht=yo(aht),lht=cht.primitives.filter((e)=>e.type==="text"),K4e=lht.find((e)=>e.text==="{VAL}");K4e.x=-0.35;K4e.y=0;K4e.anchor="middle_right";j4e=lht.find((e)=>e.text==="{REF}");j4e.y=0;j4e.x=0.35;j4e.anchor="middle_left";SWn=cht,eQ={paths:{path11:{type:"path",points:[{x:-0.4,y:0},{x:0.06,y:-0.01}],color:"primary",fill:!1},"path40-0":{type:"path",points:[{x:0.07,y:0.27},{x:0.07,y:-0.28}],color:"primary",fill:!1},"path40-0-5":{type:"path",points:[{x:0.28,y:0.24},{x:0.08,y:0.11}],color:"primary",fill:!1},"path40-0-5-0":{type:"path",points:[{x:0.29,y:-0.24},{x:0.09,y:-0.11}],color:"primary",fill:!1},"path12-1-5":{type:"path",points:[{x:0.29,y:0.25},{x:0.29,y:0.55}],color:"primary",fill:!1},"path12-1-5-3":{type:"path",points:[{x:0.29,y:-0.55},{x:0.29,y:-0.25}],color:"primary",fill:!1},path15:{type:"path",points:[{x:0.15,y:-0.23},{x:0.22,y:-0.12},{x:0.12,y:-0.12},{x:0.15,y:-0.23}],color:"primary",fill:!0}},texts:{top1:{type:"text",text:"{REF}",x:-0.08,y:0.37},bottom1:{type:"text",text:"{VAL}",x:-0.07,y:-0.41}},refblocks:{top1:{x:0.29,y:0.55},bottom1:{x:0.29,y:-0.55},left1:{x:-0.4,y:0}},bounds:{minX:-0.43,maxX:0.43,minY:-0.58,maxY:0.58,width:0.85,height:1.16,centerX:0,centerY:0},circles:{"path1-0":{type:"circle",x:0.14,y:0,radius:0.29,color:"primary",fill:!1}}},{paths:PWn,texts:Ybr,bounds:fde,refblocks:$Ee,circles:vWn}=eQ,EWn=sn({primitives:[...Object.values(PWn),...Object.values(vWn),{type:"text",text:"{REF}",x:-0.1,y:0.3094553499999995},{type:"text",text:"{VAL}",x:-0.1,y:-0.3094553499999995}],ports:[{...$Ee.top1,labels:["1","collector"]},{...$Ee.bottom1,labels:["3","emitter"]},{...$Ee.left1,labels:["2","base"]}],size:{width:fde.width,height:fde.height},center:{x:fde.centerX,y:fde.centerY}}).rotateRightFacingSymbol("right").changeTextAnchor("{REF}","middle_right").changeTextAnchor("{VAL}","middle_right").build(),{paths:Vbr,texts:Ubr,bounds:Wbr,refblocks:Xbr,circles:Kbr}=eQ,MWn=sn(eQ).rotateRightFacingSymbol("up").changeTextAnchor("{VAL}","middle_left").labelPort("left1",["2","base"]).labelPort("top1",["1","collector"]).labelPort("bottom1",["3","emitter"]).changeTextAnchor("{REF}","middle_right").build(),{paths:BWn,texts:jbr,bounds:yde,refblocks:ZEe,circles:wWn}=eQ,TWn=sn({primitives:[...Object.values(BWn),...Object.values(wWn),{type:"text",text:"{REF}",x:-0.1,y:-0.3094553499999995},{type:"text",text:"{VAL}",x:-0.1,y:0.3094553499999995}],ports:[{...ZEe.top1,labels:["1","collector"]},{...ZEe.bottom1,labels:["3","emitter"]},{...ZEe.left1,labels:["2","base"]}],size:{width:yde.width,height:yde.height},center:{x:yde.centerX,y:yde.centerY}}).rotateRightFacingSymbol("down").changeTextAnchor("{REF}","middle_bottom").changeTextAnchor("{VAL}","middle_bottom").build(),{paths:DWn,texts:qbr,bounds:xde,refblocks:e3e,circles:NWn}=eQ,RWn=sn({primitives:[...Object.values(DWn),...Object.values(NWn),{type:"text",text:"{REF}",x:-0.1,y:-0.3094553499999995},{type:"text",text:"{VAL}",x:-0.1,y:0.3094553499999995}],ports:[{...e3e.top1,labels:["1","collector"]},{...e3e.bottom1,labels:["3","emitter"]},{...e3e.left1,labels:["2","base"]}],size:{width:xde.width,height:xde.height},center:{x:xde.centerX,y:xde.centerY}}).rotateRightFacingSymbol("up").changeTextAnchor("{REF}","middle_top").changeTextAnchor("{VAL}","middle_top").build(),{paths:QWn,texts:Jbr,bounds:Cde,refblocks:t3e,circles:kWn}=eQ,LWn=sn({primitives:[...Object.values(QWn),...Object.values(kWn),{type:"text",text:"{REF}",x:-0.1,y:-0.3094553499999995},{type:"text",text:"{VAL}",x:-0.1,y:0.3094553499999995}],ports:[{...t3e.top1,labels:["1","collector"]},{...t3e.bottom1,labels:["3","emitter"]},{...t3e.left1,labels:["2","base"]}],size:{width:Cde.width,height:Cde.height},center:{x:Cde.centerX,y:Cde.centerY}}).rotateRightFacingSymbol("left").changeTextAnchor("{REF}","middle_left").changeTextAnchor("{VAL}","middle_left").build(),{paths:FWn,texts:$br,bounds:Ide,refblocks:n3e,circles:HWn}=eQ,OWn=sn({primitives:[...Object.values(FWn),...Object.values(HWn),{type:"text",text:"{REF}",x:-0.1,y:-0.3094553499999995},{type:"text",text:"{VAL}",x:-0.1,y:0.3094553499999995}],ports:[{...n3e.top1,labels:["1","collector"]},{...n3e.bottom1,labels:["3","emitter"]},{...n3e.left1,labels:["2","base"]}],size:{width:Ide.width,height:Ide.height},center:{x:Ide.centerX,y:Ide.centerY}}).rotateRightFacingSymbol("left").changeTextAnchor("{REF}","middle_left").changeTextAnchor("{VAL}","middle_left").build(),zWn={paths:{path40:{type:"path",points:[{x:-0.19,y:0.33},{x:-0.26,y:0.14}],color:"primary",fill:!1},path41:{type:"path",points:[{x:-0.38,y:0.26},{x:-0.19,y:0.33}],color:"primary",fill:!1},path42:{type:"path",points:[{x:-0.26,y:0.14},{x:-0.38,y:0.26}],color:"primary",fill:!1},path43:{type:"path",points:[{x:-0.26,y:0.39},{x:-0.13,y:0.26}],color:"primary",fill:!1},path44:{type:"path",points:[{x:-0.32,y:0.2},{x:-0.52,y:0}],color:"primary",fill:!1},"path44-0":{type:"path",points:[{x:0,y:0.52},{x:-0.19,y:0.33}],color:"primary",fill:!1},"path40-4":{type:"path",points:[{x:-0.19,y:-0.32},{x:-0.38,y:-0.26}],color:"primary",fill:!1},"path41-1":{type:"path",points:[{x:-0.26,y:-0.13},{x:-0.19,y:-0.32}],color:"primary",fill:!1},"path42-7":{type:"path",points:[{x:-0.38,y:-0.26},{x:-0.26,y:-0.13}],color:"primary",fill:!1},"path43-1":{type:"path",points:[{x:-0.13,y:-0.26},{x:-0.26,y:-0.39}],color:"primary",fill:!1},"path44-8":{type:"path",points:[{x:-0.32,y:-0.19},{x:-0.51,y:-0.01}],color:"primary",fill:!1},"path44-0-7":{type:"path",points:[{x:-0.01,y:-0.5},{x:-0.19,y:-0.32}],color:"primary",fill:!1},"path40-4-0":{type:"path",points:[{x:0.32,y:0.19},{x:0.13,y:0.26}],color:"primary",fill:!1},"path41-1-2":{type:"path",points:[{x:0.26,y:0.38},{x:0.32,y:0.19}],color:"primary",fill:!1},"path42-7-1":{type:"path",points:[{x:0.13,y:0.26},{x:0.26,y:0.38}],color:"primary",fill:!1},"path43-1-8":{type:"path",points:[{x:0.39,y:0.26},{x:0.26,y:0.13}],color:"primary",fill:!1},"path44-8-7":{type:"path",points:[{x:0.2,y:0.32},{x:0.01,y:0.51}],color:"primary",fill:!1},"path44-0-7-1":{type:"path",points:[{x:0.52,y:0},{x:0.32,y:0.19}],color:"primary",fill:!1},"path40-4-8":{type:"path",points:[{x:0.32,y:-0.19},{x:0.26,y:-0.38}],color:"primary",fill:!1},"path41-1-4":{type:"path",points:[{x:0.13,y:-0.26},{x:0.32,y:-0.19}],color:"primary",fill:!1},"path42-7-0":{type:"path",points:[{x:0.26,y:-0.38},{x:0.13,y:-0.26}],color:"primary",fill:!1},"path43-1-0":{type:"path",points:[{x:0.26,y:-0.13},{x:0.39,y:-0.26}],color:"primary",fill:!1},"path44-8-9":{type:"path",points:[{x:0.19,y:-0.32},{x:0,y:-0.52}],color:"primary",fill:!1},"path44-0-7-3":{type:"path",points:[{x:0.5,y:-0.01},{x:0.32,y:-0.19}],color:"primary",fill:!1}},texts:{top1:{type:"text",text:"{REF}",x:-0.29,y:0.46},bottom1:{type:"text",text:"{VAL}",x:-0.29,y:-0.5}},refblocks:{top1:{x:0,y:0.52},bottom1:{x:0,y:-0.52},left1:{x:-0.52,y:0},right1:{x:0.52,y:0}},bounds:{minX:-0.55,maxX:0.55,minY:-0.55,maxY:0.55,width:1.09,height:1.09,centerX:0,centerY:0},circles:{}},{paths:GWn,texts:kdt,bounds:bde,refblocks:Ldt}=zWn,dht=jc({primitives:[...Object.values(GWn),{...kdt.bottom1,y:0.35,anchor:"middle_top"},{...kdt.top1,anchor:"middle_left"}],ports:[{...Ldt.left1,labels:["1"]},{...Ldt.right1,labels:["2"]}],size:{width:bde.width+0.05,height:bde.height},center:{x:bde.centerX,y:bde.centerY}}),YWn=yo(dht),VWn=YWn,UWn={paths:{path18:{type:"path",points:[{x:-0.53,y:0},{x:-0.27,y:0}],color:"primary",fill:!1},path19:{type:"path",points:[{x:0.26,y:0},{x:0.53,y:0}],color:"primary",fill:!1},path20:{type:"path",points:[{x:0,y:0.13},{x:0.26,y:0.13},{x:0.26,y:-0.13},{x:-0.27,y:-0.13},{x:-0.27,y:0.13},{x:0,y:0.13}],color:"primary",fill:!1},path24:{type:"path",points:[{x:0.29,y:-0.29},{x:0.26,y:-0.16},{x:0.16,y:-0.26},{x:0.29,y:-0.29}],color:"primary",fill:!0},path26:{type:"path",points:[{x:-0.3,y:0.29},{x:0.2,y:-0.2}],color:"primary",fill:!1}},texts:{top1:{type:"text",text:"{REF}",x:0.06,y:0.2},bottom1:{type:"text",text:"{VAL}",x:-0.1,y:-0.28}},refblocks:{left1:{x:-0.53,y:0},right1:{x:0.53,y:0}},bounds:{minX:-0.56,maxX:0.56,minY:-0.29,maxY:0.29,width:1.13,height:0.58,centerX:0,centerY:0},circles:{}},{paths:WWn,texts:Fdt,bounds:Sde,refblocks:Hdt}=UWn,Tue=jc({primitives:[...Object.values(WWn),{...Fdt.bottom1,x:0,y:-0.35,anchor:"middle_top"},{...Fdt.top1,x:0,y:0.35,anchor:"middle_bottom"}],ports:[{...Hdt.left1,labels:["1"]},{...Hdt.right1,labels:["2"]}],size:{width:Sde.width+0.05,height:Sde.height},center:{x:Sde.centerX,y:Sde.centerY}}),q4e=yo(Tue,"down"),J4e=q4e.primitives.find((e)=>e.type==="text"&&e.text==="{REF}"),$4e=q4e.primitives.find((e)=>e.type==="text"&&e.text==="{VAL}");J4e.anchor="middle_left";$4e.anchor="middle_left";J4e.y+=0.31;J4e.x=0.34;$4e.y-=0.31;$4e.x=0.34;XWn=q4e,Z4e=yo(Tue,"left"),eMe=Z4e.primitives.find((e)=>e.type==="text"&&e.text==="{REF}"),tMe=Z4e.primitives.find((e)=>e.type==="text"&&e.text==="{VAL}");eMe.anchor="middle_bottom";tMe.anchor="middle_top";eMe.y+=0.73;eMe.x=0;tMe.y-=0.7;tMe.x=0;KWn=Z4e,nMe=yo(Tue,"up"),oMe=nMe.primitives.find((e)=>e.type==="text"&&e.text==="{REF}"),iMe=nMe.primitives.find((e)=>e.type==="text"&&e.text==="{VAL}");oMe.anchor="middle_left";iMe.anchor="middle_left";oMe.y+=0.21;oMe.x=0.34;iMe.y-=0.21;iMe.x=0.34;jWn=nMe,Due={paths:{path1:{type:"path",points:[{x:-0.42,y:0},{x:-0.3,y:0}],color:"primary",fill:!1},"path1-2-1":{type:"path",points:[{x:-0.3,y:0},{x:-0.25,y:0.1},{x:-0.15,y:-0.1},{x:-0.05,y:0.1},{x:0.05,y:-0.1},{x:0.15,y:0.1},{x:0.25,y:-0.1},{x:0.3,y:0}],color:"primary",fill:!1},path2:{type:"path",points:[{x:0.3,y:0},{x:0.42,y:0}],color:"primary",fill:!1},path3:{type:"path",points:[{x:0,y:-0.17},{x:0,y:-0.4}],color:"primary",fill:!1},path15:{type:"path",points:[{x:0,y:-0.12},{x:0.05,y:-0.2},{x:-0.05,y:-0.2},{x:0,y:-0.12}],color:"primary",fill:!0}},texts:{top1:{type:"text",text:"{REF}",x:0.3,y:0.25},bottom1:{type:"text",text:"{VAL}",x:0.3,y:-0.25}},refblocks:{left:{x:-0.42,y:0},right:{x:0.42,y:0},bottom:{x:0,y:-0.4}},bounds:{minX:-0.42,maxX:0.42,minY:-0.2,maxY:0.2,width:0.84,height:0.4,centerX:0,centerY:0},circles:{}},{paths:qWn,texts:Zbr,bounds:Pde,refblocks:o3e,circles:JWn}=Due,$Wn=sn({primitives:[...Object.values(qWn),...Object.values(JWn),{type:"text",text:"{REF}",x:-0.15,y:0.2394553499999995},{type:"text",text:"{VAL}",x:0.15,y:0.2394553499999995}],ports:[{...o3e.left,labels:["1"]},{...o3e.right,labels:["3"]},{...o3e.bottom,labels:["2"]}],size:{width:Pde.width,height:Pde.height},center:{x:Pde.centerX,y:Pde.centerY}}).rotateRightFacingSymbol("down").labelPort("left",["1"]).labelPort("right",["2"]).labelPort("bottom",["3"]).changeTextAnchor("{REF}","middle_left").changeTextAnchor("{VAL}","middle_left").build(),{paths:ZWn,texts:e5r,bounds:vde,refblocks:i3e,circles:eXn}=Due,tXn=sn({primitives:[...Object.values(ZWn),...Object.values(eXn),{type:"text",text:"{REF}",x:-0.3,y:-0.3894553499999995},{type:"text",text:"{VAL}",x:-0.3,y:0.3194553499999995}],ports:[{...i3e.left,labels:["1"]},{...i3e.right,labels:["3"]},{...i3e.bottom,labels:["2"]}],size:{width:vde.width,height:vde.height},center:{x:vde.centerX,y:vde.centerY}}).rotateRightFacingSymbol("left").labelPort("left",["1"]).labelPort("right",["2"]).labelPort("bottom",["3"]).changeTextAnchor("{REF}","middle_bottom").changeTextAnchor("{VAL}","middle_top").build(),nXn=sn(Due).labelPort("left",["1"]).labelPort("right",["3"]).labelPort("bottom",["2"]).changeTextAnchor("{REF}","middle_bottom").changeTextAnchor("{VAL}","middle_top").build(),{paths:oXn,texts:t5r,bounds:Ede,refblocks:r3e,circles:iXn}=Due,rXn=sn({primitives:[...Object.values(oXn),...Object.values(iXn),{type:"text",text:"{REF}",x:0.3,y:-0.2894553499999995},{type:"text",text:"{VAL}",x:-0.3,y:-0.2894553499999995}],ports:[{...r3e.left,labels:["1"]},{...r3e.right,labels:["3"]},{...r3e.bottom,labels:["2"]}],size:{width:Ede.width,height:Ede.height},center:{x:Ede.centerX,y:Ede.centerY}}).rotateRightFacingSymbol("up").labelPort("left",["1"]).labelPort("right",["2"]).labelPort("bottom",["3"]).changeTextAnchor("{REF}","middle_left").changeTextAnchor("{VAL}","middle_left").build(),sXn={paths:{path11:{type:"path",points:[{x:-0.54,y:0.03},{x:-0.3,y:0.03}],color:"primary",fill:!1},path12:{type:"path",points:[{x:0.29,y:0.03},{x:0.54,y:0.03}],color:"primary",fill:!1}},texts:{top1:{type:"text",text:"{REF}",x:-0.16,y:0.4},bottom1:{type:"text",text:"{VAL}",x:0,y:-0.4},left1:{type:"text",text:"COS φ",x:-0.15,y:0.01}},refblocks:{left1:{x:-0.54,y:0.03},right1:{x:0.54,y:0.03}},bounds:{minX:-0.57,maxX:0.57,minY:-0.4,maxY:0.4,width:1.14,height:0.79,centerX:0,centerY:0},circles:{path1:{type:"circle",x:0,y:0.04,radius:0.29,color:"primary",fill:!1}}},{paths:aXn,texts:n5r,bounds:Mde,refblocks:Odt,circles:cXn}=sXn,uht=jc({primitives:[...Object.values(aXn),...Object.values(cXn),{type:"text",text:"{REF}",x:0,y:0.43330070000000065,anchor:"middle_bottom"},{type:"text",text:"{VAL}",x:0,y:-0.43330070000000065,anchor:"middle_top"},{type:"text",text:"COS φ",x:0,y:0.014279000000000375,anchor:"center"}],ports:[{...Odt.left1,labels:["1"]},{...Odt.right1,labels:["2"]}],size:{width:Mde.width,height:Mde.height},center:{x:Mde.centerX,y:Mde.centerY}}),hht=yo(uht),rMe=hht.primitives.filter((e)=>e.type==="text"),p3e=rMe.find((e)=>e.text==="{REF}"),sMe=rMe.find((e)=>e.text==="{VAL}"),A3e=rMe.find((e)=>e.text==="COS φ");p3e.x=0.35;p3e.y=0.4279000000000375,p3e.anchor="middle_left";sMe.anchor="middle_left";sMe.x=0.35;sMe.y=-0.4279000000000375,A3e.x=0;A3e.y=0.014279000000000375,A3e.anchor="center";lXn=hht,dXn={paths:{"path12-1-8-6-9-9":{type:"path",points:[{x:0.01,y:0.03},{x:0.01,y:-0.09}],color:"primary",fill:!1},"path12-1-5-6-4":{type:"path",points:[{x:-0.47,y:-0.05},{x:-0.17,y:-0.05}],color:"primary",fill:!1},"path12-1-8-0-0":{type:"path",points:[{x:-0.16,y:-0.09},{x:0.18,y:-0.09}],color:"primary",fill:!1},"path12-1-0-1":{type:"path",points:[{x:0.2,y:-0.05},{x:0.47,y:-0.05}],color:"primary",fill:!1}},texts:{top1:{type:"text",text:"{REF}",x:0.01,y:0.22},bottom1:{type:"text",text:"{VAL}",x:-0.16,y:-0.22}},refblocks:{left1:{x:-0.47,y:-0.05},right1:{x:0.47,y:-0.05}},bounds:{minX:-0.5,maxX:0.5,minY:-0.22,maxY:0.22,width:1,height:0.45,centerX:0,centerY:0},circles:{"circle-2":{type:"circle",x:-0.14,y:-0.05,radius:0.02,color:"primary",fill:!1},circle:{type:"circle",x:0.17,y:-0.05,radius:0.02,color:"primary",fill:!1}}},{paths:uXn,texts:zdt,bounds:Gdt,refblocks:Ydt,circles:hXn}=dXn,mht=jc({primitives:[...Object.values(uXn),...Object.values(hXn),{...zdt.top1,anchor:"middle_left"},{...zdt.bottom1,anchor:"middle_left"}],ports:[{...Ydt.left1,labels:["1"]},{...Ydt.right1,labels:["2"]}],center:{x:Gdt.centerX,y:Gdt.centerY}}),mXn=yo(mht,"up"),pht={paths:{"path12-1-8-6-9-9":{type:"path",points:[{x:-0.05,y:0.09},{x:-0.05,y:0.04}],color:"primary",fill:!1},"path12-1-8-7-9-9":{type:"path",points:[{x:-0.05,y:0.09},{x:0.07,y:0.09}],color:"primary",fill:!1},"path12-1-8-6-9-10":{type:"path",points:[{x:0.07,y:0.09},{x:0.07,y:0.04}],color:"primary",fill:!1},"path12-1-5-6-4":{type:"path",points:[{x:-0.47,y:-0.05},{x:-0.17,y:-0.05}],color:"primary",fill:!1},"path12-1-8-0-0":{type:"path",points:[{x:-0.16,y:0.04},{x:0.18,y:0.04}],color:"primary",fill:!1},"path12-1-0-1":{type:"path",points:[{x:0.2,y:-0.05},{x:0.47,y:-0.05}],color:"primary",fill:!1}},texts:{top1:{type:"text",text:"{REF}",x:0.01,y:0.29},bottom1:{type:"text",text:"{VAL}",x:-0.16,y:-0.22}},refblocks:{left1:{x:-0.47,y:-0.05},right1:{x:0.47,y:-0.05}},bounds:{minX:-0.5,maxX:0.5,minY:-0.22,maxY:0.22,width:1,height:0.45,centerX:0,centerY:0},circles:{"circle-2":{type:"circle",x:-0.14,y:-0.05,radius:0.02,color:"primary",fill:!1},circle:{type:"circle",x:0.17,y:-0.05,radius:0.02,color:"primary",fill:!1}}},{paths:pXn,texts:Vdt,bounds:AXn,refblocks:s3e,circles:_Xn}=pht,pJ=jc({primitives:[...Object.values(pXn),...Object.values(_Xn),{...Vdt.top1,x:0,y:0.3594553499999995,anchor:"middle_bottom"},{...Vdt.bottom1,x:0,y:-0.3594553499999995,anchor:"middle_top"}],ports:[{...s3e.left1,labels:["1"]},{...s3e.right1,labels:["2"]}],center:{x:AXn.centerX,y:s3e.left1.y}}),aMe=yo(pJ,"down"),cMe=aMe.primitives.find((e)=>e.type==="text"&&e.text==="{REF}"),lMe=aMe.primitives.find((e)=>e.type==="text"&&e.text==="{VAL}");cMe.anchor="middle_bottom";lMe.anchor="middle_top";cMe.y=0.4;cMe.x=0.35;lMe.y=-0.4;lMe.x=0.35;gXn=aMe,{paths:fXn,texts:Udt,bounds:yXn,refblocks:a3e,circles:xXn}=pht,CXn=jc({primitives:[...Object.values(fXn),...Object.values(xXn),{...Udt.top1,x:0,y:0.3594553499999995,anchor:"middle_bottom"},{...Udt.bottom1,x:0,y:-0.3594553499999995,anchor:"middle_top"}],ports:[{...a3e.left1,labels:["1"]},{...a3e.right1,labels:["2"]}],center:{x:yXn.centerX,y:a3e.left1.y}}),dMe=yo(pJ,"left"),uMe=dMe.primitives.find((e)=>e.type==="text"&&e.text==="{REF}"),hMe=dMe.primitives.find((e)=>e.type==="text"&&e.text==="{VAL}");uMe.anchor="middle_bottom";hMe.anchor="middle_top";uMe.y=0.4;uMe.x=0;hMe.y=-0.4;hMe.x=0;IXn=dMe,mMe=yo(pJ,"up"),pMe=mMe.primitives.find((e)=>e.type==="text"&&e.text==="{REF}"),AMe=mMe.primitives.find((e)=>e.type==="text"&&e.text==="{VAL}");pMe.anchor="middle_left";AMe.anchor="middle_left";pMe.y+=0.4;pMe.x=0.34;AMe.y-=0.41;AMe.x=0.34;bXn=mMe,_Me=yo(pJ,"up"),gMe=_Me.primitives.find((e)=>e.type==="text"&&e.text==="{REF}"),fMe=_Me.primitives.find((e)=>e.type==="text"&&e.text==="{VAL}");gMe.anchor="middle_left";fMe.anchor="middle_left";gMe.y+=0.4;gMe.x=0.34;fMe.y-=0.41;fMe.x=0.34;SXn=_Me,Nue={paths:{path12_rotated:{type:"path",points:[{x:-0.09,y:0.12},{x:-0.09,y:-0.12}],color:"primary",fill:!1},path2_rotated:{type:"path",points:[{x:-0.09,y:0},{x:0.09,y:0}],color:"primary",fill:!1}},texts:{top1:{type:"text",text:"{REF}",x:0,y:0.03}},refblocks:{left1:{x:0.09,y:0}},bounds:{minX:-0.57,maxX:0.57,minY:-0.37,maxY:0.37,width:1.14,height:0.74,centerX:0,centerY:0},circles:{}},{paths:PXn,texts:o5r,bounds:Wdt,refblocks:vXn,circles:EXn}=Nue,MXn=sn({primitives:[...Object.values(PXn),...Object.values(EXn),{type:"text",text:"{REF}",x:-0.14,y:-0}],ports:[{...vXn.left1,labels:["1"]}],center:{x:Wdt.centerX,y:Wdt.centerY}}).rotateRightFacingSymbol("up").labelPort("left1",["1"]).changeTextAnchor("{REF}","middle_top").build(),{paths:BXn,texts:i5r,bounds:Xdt,refblocks:wXn,circles:TXn}=Nue,DXn=sn({primitives:[...Object.values(BXn),...Object.values(TXn),{type:"text",text:"{REF}",x:-0.13,y:0}],ports:[{...wXn.left1,labels:["1"]}],center:{x:Xdt.centerX,y:Xdt.centerY}}).changeTextAnchor("{VAL}","middle_top").rotateRightFacingSymbol("right").labelPort("left1",["1"]).changeTextAnchor("{REF}","middle_right").build(),{paths:NXn,texts:r5r,bounds:Kdt,refblocks:RXn,circles:QXn}=Nue,kXn=sn({primitives:[...Object.values(NXn),...Object.values(QXn),{type:"text",text:"{REF}",x:-0.14,y:-0}],ports:[{...RXn.left1,labels:["1"]}],center:{x:Kdt.centerX,y:Kdt.centerY}}).rotateRightFacingSymbol("left").labelPort("left1",["1"]).changeTextAnchor("{REF}","middle_left").build(),{paths:LXn,texts:s5r,bounds:jdt,refblocks:FXn}=Nue,HXn=sn({primitives:[...Object.values(LXn),{type:"text",text:"{REF}",x:-0.14,y:0}],ports:[{...FXn.left1,labels:["1"]}],center:{x:jdt.centerX,y:jdt.centerY}}).rotateRightFacingSymbol("down").labelPort("left1",["1"]).changeTextAnchor("{REF}","middle_bottom").build(),OXn={paths:{path40:{type:"path",points:[{x:-0.19,y:-0.33},{x:-0.26,y:-0.14}],color:"primary",fill:!1},path41:{type:"path",points:[{x:-0.38,y:-0.26},{x:-0.19,y:-0.33}],color:"primary",fill:!1},path42:{type:"path",points:[{x:-0.26,y:-0.14},{x:-0.38,y:-0.26}],color:"primary",fill:!1},path43:{type:"path",points:[{x:-0.26,y:-0.39},{x:-0.13,y:-0.26}],color:"primary",fill:!1},path44:{type:"path",points:[{x:-0.32,y:-0.2},{x:-0.52,y:0}],color:"primary",fill:!1},"path44-0":{type:"path",points:[{x:0,y:-0.52},{x:-0.19,y:-0.33}],color:"primary",fill:!1},"path40-4":{type:"path",points:[{x:-0.19,y:0.32},{x:-0.38,y:0.26}],color:"primary",fill:!1},"path41-1":{type:"path",points:[{x:-0.26,y:0.13},{x:-0.19,y:0.32}],color:"primary",fill:!1},"path42-7":{type:"path",points:[{x:-0.38,y:0.26},{x:-0.26,y:0.13}],color:"primary",fill:!1},"path43-1":{type:"path",points:[{x:-0.13,y:0.26},{x:-0.26,y:0.39}],color:"primary",fill:!1},"path44-8":{type:"path",points:[{x:-0.32,y:0.19},{x:-0.51,y:0.01}],color:"primary",fill:!1},"path44-0-7":{type:"path",points:[{x:-0.01,y:0.5},{x:-0.19,y:0.32}],color:"primary",fill:!1},"path40-4-0":{type:"path",points:[{x:0.32,y:-0.19},{x:0.13,y:-0.26}],color:"primary",fill:!1},"path41-1-2":{type:"path",points:[{x:0.26,y:-0.38},{x:0.32,y:-0.19}],color:"primary",fill:!1},"path42-7-1":{type:"path",points:[{x:0.13,y:-0.26},{x:0.26,y:-0.38}],color:"primary",fill:!1},"path43-1-8":{type:"path",points:[{x:0.39,y:-0.26},{x:0.26,y:-0.13}],color:"primary",fill:!1},"path44-8-7":{type:"path",points:[{x:0.2,y:-0.32},{x:0.01,y:-0.51}],color:"primary",fill:!1},"path44-0-7-1":{type:"path",points:[{x:0.52,y:0},{x:0.32,y:-0.19}],color:"primary",fill:!1},"path40-4-8":{type:"path",points:[{x:0.32,y:0.19},{x:0.26,y:0.38}],color:"primary",fill:!1},"path41-1-4":{type:"path",points:[{x:0.13,y:0.26},{x:0.32,y:0.19}],color:"primary",fill:!1},"path42-7-0":{type:"path",points:[{x:0.26,y:0.38},{x:0.13,y:0.26}],color:"primary",fill:!1},"path43-1-0":{type:"path",points:[{x:0.26,y:0.13},{x:0.39,y:0.26}],color:"primary",fill:!1},"path44-8-9":{type:"path",points:[{x:0.19,y:0.32},{x:0,y:0.52}],color:"primary",fill:!1},"path44-0-7-3":{type:"path",points:[{x:0.5,y:0.01},{x:0.32,y:0.19}],color:"primary",fill:!1}},texts:{top1:{type:"text",text:"{REF}",x:-0.29,y:-0.46},bottom1:{type:"text",text:"{VAL}",x:-0.29,y:0.5}},refblocks:{top1:{x:0,y:-0.52},bottom1:{x:0,y:0.52},left1:{x:-0.52,y:0},right1:{x:0.52,y:0}},bounds:{minX:-0.55,maxX:0.55,minY:-0.56,maxY:0.55,width:1.09,height:1.1,centerX:0,centerY:0},circles:{}},{paths:zXn,texts:qdt,bounds:Bde,refblocks:wde,circles:GXn}=OXn,Aht=jc({primitives:[...Object.values(zXn),...Object.values(GXn),{...qdt.top1,anchor:"middle_right"},{...qdt.bottom1,anchor:"middle_right"}],ports:[{...wde.top1,labels:["1"]},{...wde.bottom1,labels:["2"]},{...wde.left1,labels:["3"]},{...wde.right1,labels:["4"]}],size:{width:Bde.width,height:Bde.height},center:{x:Bde.centerX,y:Bde.centerY}}),yMe=yo(Aht),YXn=yMe.primitives.find((e)=>e.type==="text"&&e.text==="{REF}"),VXn=yMe.primitives.find((e)=>e.type==="text"&&e.text==="{VAL}");YXn.anchor="middle_left";VXn.anchor="middle_right";UXn=yMe,Rue={paths:{path27:{type:"path",points:[{x:0.47,y:0.04},{x:0.21,y:0.04}],color:"primary",fill:!1},"path27-0":{type:"path",points:[{x:-0.21,y:0.04},{x:-0.47,y:0.04}],color:"primary",fill:!1},"path27-8-2-4":{type:"path",points:[{x:0.21,y:0.04},{x:0.19,y:-0.05}],color:"primary",fill:!1},"path27-8-2-4-29":{type:"path",points:[{x:-0.19,y:0.14},{x:-0.21,y:0.04}],color:"primary",fill:!1},"path27-8-2-4-5":{type:"path",points:[{x:0.19,y:-0.05},{x:0.13,y:0.14}],color:"primary",fill:!1},"path27-8-2-4-5-1":{type:"path",points:[{x:0.08,y:-0.05},{x:0.13,y:0.14}],color:"primary",fill:!1},"path27-8-2-4-5-1-9":{type:"path",points:[{x:0.08,y:-0.05},{x:0.03,y:0.14}],color:"primary",fill:!1},"path27-8-2-4-5-1-9-2":{type:"path",points:[{x:-0.03,y:-0.05},{x:0.03,y:0.14}],color:"primary",fill:!1},"path27-8-2-4-5-1-9-2-1":{type:"path",points:[{x:-0.03,y:-0.05},{x:-0.08,y:0.14}],color:"primary",fill:!1},"path27-8-2-4-5-1-9-2-1-2":{type:"path",points:[{x:-0.13,y:-0.05},{x:-0.08,y:0.14}],color:"primary",fill:!1},"path27-8-2-4-5-1-9-2-1-2-2":{type:"path",points:[{x:-0.13,y:-0.05},{x:-0.19,y:0.14}],color:"primary",fill:!1}},texts:{top1:{type:"text",text:"{REF}",x:-0.05,y:0.42},bottom1:{type:"text",text:"{VAL}",x:-0.04,y:-0.42}},refblocks:{left1:{x:-0.47,y:0.04},right1:{x:0.47,y:0.04}},bounds:{minX:-0.49,maxX:0.49,minY:-0.42,maxY:0.42,width:0.99,height:0.84,centerX:0,centerY:0},circles:{}},{paths:WXn,texts:a5r,bounds:Tde,refblocks:Jdt,circles:XXn}=Rue,KXn=sn({primitives:[...Object.values(WXn),...Object.values(XXn),{type:"text",text:"{REF}",x:-0.2,y:0.2194553499999995},{type:"text",text:"{VAL}",x:0.2,y:0.2194553499999995}],ports:[{...Jdt.left1,labels:["1"]},{...Jdt.right1,labels:["2"]}],size:{width:Tde.width,height:Tde.height},center:{x:Tde.centerX,y:Tde.centerY}}).rotateRightFacingSymbol("down").labelPort("left",["1"]).labelPort("right",["2"]).changeTextAnchor("{REF}","middle_left").changeTextAnchor("{VAL}","middle_left").build(),{paths:jXn,texts:c5r,bounds:Dde,refblocks:$dt,circles:qXn}=Rue,JXn=sn({primitives:[...Object.values(jXn),...Object.values(qXn),{type:"text",text:"{REF}",x:0,y:-0.1704553499999995},{type:"text",text:"{VAL}",x:0,y:0.2294553499999995}],ports:[{...$dt.left1,labels:["1"]},{...$dt.right1,labels:["2"]}],size:{width:Dde.width,height:Dde.height},center:{x:Dde.centerX,y:Dde.centerY}}).rotateRightFacingSymbol("left").labelPort("left",["1"]).labelPort("right",["2"]).changeTextAnchor("{REF}","middle_bottom").changeTextAnchor("{VAL}","middle_top").build(),{paths:$Xn,texts:l5r,bounds:Nde,refblocks:Zdt,circles:ZXn}=Rue,eKn=sn({primitives:[...Object.values($Xn),...Object.values(ZXn),{type:"text",text:"{REF}",x:0,y:0.2294553499999995},{type:"text",text:"{VAL}",x:0,y:-0.1704553499999995}],ports:[{...Zdt.left1,labels:["1"]},{...Zdt.right1,labels:["2"]}],size:{width:Nde.width,height:Nde.height},center:{x:Nde.centerX,y:Nde.centerY}}).rotateRightFacingSymbol("right").labelPort("left",["1"]).labelPort("right",["2"]).changeTextAnchor("{REF}","middle_bottom").changeTextAnchor("{VAL}","middle_top").build(),Que={paths:{"left-lead":{type:"path",points:[{x:-0.25,y:0},{x:-0.16,y:0}],color:"primary",fill:!1,strokeWidth:0.02},zigzag:{type:"path",points:[{x:-0.16,y:0},{x:-0.12,y:0.095},{x:-0.07,y:-0.095},{x:-0.02,y:0.095},{x:0.02,y:-0.095},{x:0.07,y:0.095},{x:0.12,y:-0.095},{x:0.16,y:0}],color:"primary",fill:!1,strokeWidth:0.02},"right-lead":{type:"path",points:[{x:0.16,y:0},{x:0.25,y:0}],color:"primary",fill:!1,strokeWidth:0.02}},texts:{top1:{type:"text",text:"{REF}",x:0,y:0.25,anchor:"middle_bottom"},bottom1:{type:"text",text:"{VAL}",x:0,y:-0.25,anchor:"middle_top"}},refblocks:{left1:{x:-0.25,y:0},right1:{x:0.25,y:0}},bounds:{minX:-0.25,maxX:0.25,minY:-0.25,maxY:0.25,width:0.5,height:0.5,centerX:0,centerY:0},circles:{}},tKn=fr(Que,{kind:"resistor",orientation:"down"}),nKn=fr(Que,{kind:"resistor",orientation:"left"}),oKn=fr(Que,{kind:"resistor",orientation:"right"}),iKn=fr(Que,{kind:"resistor",orientation:"up"}),{paths:rKn,texts:d5r,bounds:Rde,refblocks:eut,circles:sKn}=Rue,aKn=sn({primitives:[...Object.values(rKn),...Object.values(sKn),{type:"text",text:"{REF}",x:0.2,y:-0.1404553499999995},{type:"text",text:"{VAL}",x:-0.2,y:-0.1494553499999995}],ports:[{...eut.left1,labels:["1"]},{...eut.right1,labels:["2"]}],size:{width:Rde.width,height:Rde.height},center:{x:Rde.centerX,y:Rde.centerY}}).rotateRightFacingSymbol("up").labelPort("left",["1"]).labelPort("right",["2"]).changeTextAnchor("{REF}","middle_left").changeTextAnchor("{VAL}","middle_left").build(),kue={paths:{"left-lead":{type:"path",points:[{x:-0.175,y:0},{x:-0.115,y:0}],color:"primary",fill:!1,strokeWidth:0.02},zigzag:{type:"path",points:[{x:-0.115,y:0},{x:-0.07,y:0.095},{x:-0.025,y:-0.095},{x:0.025,y:0.095},{x:0.07,y:-0.095},{x:0.115,y:0}],color:"primary",fill:!1,strokeWidth:0.02},"right-lead":{type:"path",points:[{x:0.115,y:0},{x:0.175,y:0}],color:"primary",fill:!1,strokeWidth:0.02}},texts:{top1:{type:"text",text:"{REF}",x:0,y:0.25,anchor:"middle_bottom"},bottom1:{type:"text",text:"{VAL}",x:0,y:-0.25,anchor:"middle_top"}},refblocks:{left1:{x:-0.175,y:0},right1:{x:0.175,y:0}},bounds:{minX:-0.175,maxX:0.175,minY:-0.25,maxY:0.25,width:0.35,height:0.5,centerX:0,centerY:0},circles:{}},cKn=fr(kue,{kind:"resistor",orientation:"down"}),lKn=fr(kue,{kind:"resistor",orientation:"left"}),dKn=fr(kue,{kind:"resistor",orientation:"right"}),uKn=fr(kue,{kind:"resistor",orientation:"up"}),_ht={paths:{path27:{type:"path",points:[{x:0.76,y:-0.28},{x:0.31,y:-0.28}],color:"primary",fill:!1},path28:{type:"path",points:[{x:-0.3,y:-0.02},{x:-0.77,y:-0.02}],color:"primary",fill:!1},path30:{type:"path",points:[{x:-0.3,y:0.35},{x:-0.3,y:-0.28}],color:"primary",fill:!1},"path27-3":{type:"path",points:[{x:0.77,y:0.35},{x:0.32,y:0.35}],color:"primary",fill:!1},"path29-5":{type:"path",points:[{x:-0.07,y:-0.28},{x:-0.3,y:-0.28}],color:"primary",fill:!1},"path29-5-7":{type:"path",points:[{x:0.33,y:-0.28},{x:0.11,y:-0.28}],color:"primary",fill:!1},"path29-5-7-6":{type:"path",points:[{x:-0.06,y:-0.17},{x:-0.06,y:-0.39}],color:"primary",fill:!1},"path29-5-7-6-6":{type:"path",points:[{x:0.09,y:-0.17},{x:0.09,y:-0.39}],color:"primary",fill:!1},"path29-5-9":{type:"path",points:[{x:-0.07,y:0.35},{x:-0.3,y:0.35}],color:"primary",fill:!1},"path29-5-7-2":{type:"path",points:[{x:0.33,y:0.35},{x:0.11,y:0.35}],color:"primary",fill:!1},"path29-5-7-6-0":{type:"path",points:[{x:-0.06,y:0.46},{x:-0.06,y:0.24}],color:"primary",fill:!1},"path29-5-7-6-6-2":{type:"path",points:[{x:0.09,y:0.46},{x:0.09,y:0.24}],color:"primary",fill:!1},"path29-5-92":{type:"path",points:[{x:0.33,y:0.13},{x:0.33,y:0.35}],color:"primary",fill:!1},"path29-5-7-28":{type:"path",points:[{x:0.33,y:-0.28},{x:0.33,y:-0.05}],color:"primary",fill:!1},"path29-5-7-6-9":{type:"path",points:[{x:0.44,y:0.11},{x:0.22,y:0.11}],color:"primary",fill:!1},"path29-5-7-6-6-7":{type:"path",points:[{x:0.44,y:-0.04},{x:0.22,y:-0.04}],color:"primary",fill:!1},"path29-5-7-6-9-2":{type:"path",points:[{x:0.44,y:0.07},{x:0.22,y:0.07}],color:"primary",fill:!1},"path29-5-7-6-9-2-4":{type:"path",points:[{x:0.44,y:0},{x:0.44,y:0.07}],color:"primary",fill:!1},"path29-5-7-6-9-2-4-6":{type:"path",points:[{x:0.22,y:0},{x:0.22,y:0.07}],color:"primary",fill:!1},"path29-5-7-6-9-2-9":{type:"path",points:[{x:0.44,y:0},{x:0.22,y:0}],color:"primary",fill:!1}},texts:{top1:{type:"text",text:"{REF}",x:0.02,y:0.53},bottom1:{type:"text",text:"{VAL}",x:0.01,y:-0.54}},refblocks:{left1:{x:-0.77,y:-0.02},right1:{x:0.76,y:-0.28},right2:{x:0.77,y:0.35}},bounds:{minX:-0.79,maxX:0.79,minY:-0.54,maxY:0.54,width:1.59,height:1.07,centerX:0,centerY:0},circles:{}},{paths:hKn,texts:tut,bounds:Qde,refblocks:c3e,circles:mKn}=_ht,Lue=jc({primitives:[...Object.values(hKn),...Object.values(mKn),{...tut.top1,anchor:"middle_bottom"},{...tut.bottom1,anchor:"middle_top"}],ports:[{...c3e.left1,labels:["1"]},{...c3e.right1,labels:["2"]},{...c3e.right2,labels:["3"]}],size:{width:Qde.width,height:Qde.height},center:{x:Qde.centerX,y:Qde.centerY}}),xMe=yo(Lue,"down"),CMe=xMe.primitives.find((e)=>e.type==="text"&&e.text==="{REF}"),IMe=xMe.primitives.find((e)=>e.type==="text"&&e.text==="{VAL}");CMe.anchor="middle_bottom";IMe.anchor="middle_top";CMe.y+=0.3;CMe.x+=0.101;IMe.y-=0.49999;IMe.x+=1.19999;pKn=xMe,{paths:AKn,texts:u5r,bounds:kde,refblocks:l3e,circles:_Kn}=_ht,ght=jc({primitives:[...Object.values(AKn),...Object.values(_Kn),{type:"text",text:"{REF}",x:0.01596175000000022,y:-0.5308501500000009,anchor:"middle_top"},{type:"text",text:"{VAL}",x:0.013116750000000454,y:0.5408501499999989,anchor:"middle_bottom"}],ports:[{...l3e.left1,labels:["1"]},{...l3e.right1,labels:["2"]},{...l3e.right2,labels:["3"]}],size:{width:kde.width,height:kde.height},center:{x:kde.centerX,y:kde.centerY}}),bMe=yo(Lue,"left"),SMe=bMe.primitives.find((e)=>e.type==="text"&&e.text==="{REF}"),PMe=bMe.primitives.find((e)=>e.type==="text"&&e.text==="{VAL}");SMe.anchor="middle_bottom";PMe.anchor="middle_top";SMe.y+=0.99;SMe.x-=0;PMe.y-=1.10999;PMe.x=0;gKn=bMe,vMe=yo(Lue,"up"),EMe=vMe.primitives.find((e)=>e.type==="text"&&e.text==="{REF}"),MMe=vMe.primitives.find((e)=>e.type==="text"&&e.text==="{VAL}");EMe.anchor="middle_bottom";MMe.anchor="middle_top";EMe.y+=0.499;EMe.x=0.62;MMe.y-=0.29999;MMe.x+=0.1;fKn=vMe,yKn=yo(ght),BMe={paths:{"input-lead":{type:"path",points:[{x:-0.65,y:0.010000000000000231},{x:-0.30000000000000004,y:0.010000000000000231}],color:"primary",fill:!1},body:{type:"path",points:[{x:-0.30000000000000004,y:0.3600000000000001},{x:0.25,y:0.010000000000000231},{x:-0.30000000000000004,y:-0.33999999999999986},{x:-0.30000000000000004,y:0.3600000000000001}],color:"primary",fill:!1},"schmitt-marker":{type:"path",points:[{x:-0.17999999999999994,y:-0.08999999999999986},{x:-0.09999999999999987,y:-0.08999999999999986},{x:-0.09999999999999987,y:0.1100000000000001},{x:-0.019999999999999796,y:0.1100000000000001}],color:"primary",fill:!1},"output-lead":{type:"path",points:[{x:0.3800000000000001,y:0.010000000000000231},{x:0.6500000000000001,y:0.010000000000000231}],color:"primary",fill:!1}},texts:{top1:{type:"text",text:"{REF}",x:0,y:0.4700000000000002},bottom1:{type:"text",text:"{VAL}",x:0,y:-0.47}},refblocks:{left1:{x:-0.65,y:0.010000000000000231},right1:{x:0.6500000000000001,y:0.010000000000000231}},bounds:{minX:-0.65,maxX:0.6500000000000001,minY:-0.47,maxY:0.4700000000000002,width:1.3000000000000003,height:0.9400000000000002,centerX:0.00000000000000005551115123125783,centerY:0.00000000000000011102230246251565},circles:{"inversion-bubble":{type:"circle",x:0.31499999999999995,y:0.010000000000000231,radius:0.065,color:"primary",fill:!1}}},xKn=sn(BMe).labelPort("left1",["1","in","input","a"]).labelPort("right1",["2","out","output","y"]).changeTextAnchor("{REF}","middle_bottom").changeTextAnchor("{VAL}","middle_top").rotateRightFacingSymbol("down").build(),fht=sn(BMe).labelPort("left1",["1","in","input","a"]).labelPort("right1",["2","out","output","y"]).changeTextAnchor("{REF}","middle_bottom").changeTextAnchor("{VAL}","middle_top").rotateRightFacingSymbol("right").build(),CKn=L5(fht),IKn=sn(BMe).labelPort("left1",["1","in","input","a"]).labelPort("right1",["2","out","output","y"]).changeTextAnchor("{REF}","middle_bottom").changeTextAnchor("{VAL}","middle_top").rotateRightFacingSymbol("up").build(),bKn={paths:{path40:{type:"path",points:[{x:0.14,y:0.04},{x:-0.12,y:-0.09}],color:"primary",fill:!1},path41:{type:"path",points:[{x:-0.12,y:0.18},{x:0.14,y:0.04}],color:"primary",fill:!1},path42:{type:"path",points:[{x:-0.12,y:-0.09},{x:-0.12,y:0.18}],color:"primary",fill:!1},path43:{type:"path",points:[{x:0.14,y:0.18},{x:0.14,y:-0.09}],color:"primary",fill:!1},path44:{type:"path",points:[{x:-0.12,y:0.04},{x:-0.52,y:0.04}],color:"primary",fill:!1},"path44-0":{type:"path",points:[{x:0.52,y:0.04},{x:0.15,y:0.04}],color:"primary",fill:!1},"path43-7":{type:"path",points:[{x:0.21,y:0.18},{x:0.14,y:0.18}],color:"primary",fill:!1},"path43-7-9":{type:"path",points:[{x:0.21,y:0.13},{x:0.21,y:0.18}],color:"primary",fill:!1},"path43-7-2":{type:"path",points:[{x:0.08,y:-0.09},{x:0.14,y:-0.09}],color:"primary",fill:!1},"path43-7-9-3":{type:"path",points:[{x:0.08,y:-0.04},{x:0.08,y:-0.09}],color:"primary",fill:!1}},texts:{top1:{type:"text",text:"{REF}",x:-0.01,y:0.27},bottom1:{type:"text",text:"{VAL}",x:0,y:-0.27}},refblocks:{left1:{x:-0.52,y:0.04},right1:{x:0.52,y:0.04}},bounds:{minX:-0.55,maxX:0.55,minY:-0.27,maxY:0.27,width:1.09,height:0.55,centerX:0,centerY:0},circles:{}},Fue=sn(bKn).labelPort("left1",["1","pos"]).labelPort("right1",["2","neg"]).changeTextAnchor("{VAL}","middle_top").changeTextAnchor("{REF}","middle_bottom").build(),wMe=yo(Fue,"down"),TMe=wMe.primitives.find((e)=>e.type==="text"&&e.text==="{REF}"),DMe=wMe.primitives.find((e)=>e.type==="text"&&e.text==="{VAL}");TMe.anchor="middle_left";DMe.anchor="middle_left";TMe.y+=0.3;TMe.x=0.3;DMe.y-=0.3;DMe.x=0.3;SKn=wMe,NMe=yo(Fue,"left"),RMe=NMe.primitives.find((e)=>e.type==="text"&&e.text==="{REF}"),QMe=NMe.primitives.find((e)=>e.type==="text"&&e.text==="{VAL}");RMe.anchor="middle_bottom";QMe.anchor="middle_top";RMe.y+=0.5;RMe.x=0;QMe.y-=0.55;QMe.x=0;PKn=NMe,kMe=yo(Fue,"up"),LMe=kMe.primitives.find((e)=>e.type==="text"&&e.text==="{REF}"),FMe=kMe.primitives.find((e)=>e.type==="text"&&e.text==="{VAL}");LMe.anchor="middle_left";FMe.anchor="middle_left";LMe.y+=0.3;LMe.x=0.3;FMe.y-=0.3;FMe.x=0.3;vKn=kMe,yht={paths:{path11:{type:"path",points:[{x:-0.52,y:0.04},{x:-0.18,y:0.04}],color:"primary",fill:!1},path12:{type:"path",points:[{x:0.19,y:0.05},{x:0.52,y:0.05}],color:"primary",fill:!1},"path12-6":{type:"path",points:[{x:0.18,y:-0.15},{x:0.18,y:0.25}],color:"primary",fill:!1},"path12-2":{type:"path",points:[{x:0.19,y:0},{x:0.35,y:-0.14}],color:"primary",fill:!1},"path12-2-9":{type:"path",points:[{x:0.35,y:-0.14},{x:0.34,y:-0.35}],color:"primary",fill:!1},"path11-0-9":{type:"path",points:[{x:-0.17,y:0.27},{x:-0.17,y:-0.15},{x:0.18,y:0.05},{x:-0.17,y:0.27}],color:"primary",fill:!0}},texts:{top1:{type:"text",text:"{REF}",x:-0.22,y:0.38},bottom1:{type:"text",text:"{VAL}",x:0.11,y:-0.38}},refblocks:{bottom1:{x:0.34,y:-0.35},left1:{x:-0.52,y:0.04},right1:{x:0.52,y:0.05}},bounds:{minX:-0.55,maxX:0.55,minY:-0.38,maxY:0.38,width:1.09,height:0.77,centerX:0,centerY:0},circles:{}},{paths:h5r,texts:m5r,bounds:p5r,refblocks:A5r,circles:_5r}=yht,xht=sn(yht).changeTextAnchor("{VAL}","middle_top").labelPort("left1",["1"]).labelPort("right1",["2"]).labelPort("bottom1",["3"]).changeTextAnchor("{REF}","middle_bottom").build(),Cht=yo(xht),EKn=Cht.primitives.filter((e)=>e.type==="text"),Iht=EKn.find((e)=>e.text==="{REF}");Iht.y=0;Iht.anchor="middle_left";MKn=Cht,bht={paths:{path44:{type:"path",points:[{x:-0.195,y:-0.025},{x:-0.45,y:-0.025}],color:"primary",fill:!1},"path44-0":{type:"path",points:[{x:0.45,y:-0.025},{x:0.195,y:-0.025}],color:"primary",fill:!1},"path44-0-7":{type:"path",points:[{x:0.07,y:-0.025},{x:-0.07,y:-0.025}],color:"primary",fill:!1},path2:{type:"path",points:[{x:0.07,y:0.1},{x:0.07,y:-0.15}],color:"primary",fill:!0},"path2-8":{type:"path",points:[{x:-0.07,y:0.1},{x:-0.07,y:-0.15}],color:"primary",fill:!0},"path8704-1":{type:"path",points:[{x:-0.07,y:0.1},{x:-0.082252,y:0.099398},{x:-0.094386,y:0.097598},{x:-0.106286,y:0.094618},{x:-0.117835,y:0.090485},{x:-0.128925,y:0.08524},{x:-0.139446,y:0.078934},{x:-0.149299,y:0.071626},{x:-0.158388,y:0.063388},{x:-0.166626,y:0.054299},{x:-0.173934,y:0.044446},{x:-0.18024,y:0.033925},{x:-0.185485,y:0.022835},{x:-0.189618,y:0.011286},{x:-0.192598,y:-0.000614},{x:-0.194398,y:-0.012748},{x:-0.195,y:-0.025},{x:-0.194398,y:-0.037252},{x:-0.192598,y:-0.049386},{x:-0.189618,y:-0.061286},{x:-0.185485,y:-0.072835},{x:-0.18024,y:-0.083925},{x:-0.173934,y:-0.094446},{x:-0.166626,y:-0.104299},{x:-0.158388,y:-0.113388},{x:-0.149299,y:-0.121626},{x:-0.139446,y:-0.128934},{x:-0.128925,y:-0.13524},{x:-0.117835,y:-0.140485},{x:-0.106286,y:-0.144618},{x:-0.094386,y:-0.147598},{x:-0.082252,y:-0.149398},{x:-0.07,y:-0.15}],color:"primary",fill:!1},"path8704-1-7":{type:"path",points:[{x:0.07,y:0.1},{x:0.082252,y:0.099398},{x:0.094386,y:0.097598},{x:0.106286,y:0.094618},{x:0.117835,y:0.090485},{x:0.128925,y:0.08524},{x:0.139446,y:0.078934},{x:0.149299,y:0.071626},{x:0.158388,y:0.063388},{x:0.166626,y:0.054299},{x:0.173934,y:0.044446},{x:0.18024,y:0.033925},{x:0.185485,y:0.022835},{x:0.189618,y:0.011286},{x:0.192598,y:-0.000614},{x:0.194398,y:-0.012748},{x:0.195,y:-0.025},{x:0.194398,y:-0.037252},{x:0.192598,y:-0.049386},{x:0.189618,y:-0.061286},{x:0.185485,y:-0.072835},{x:0.18024,y:-0.083925},{x:0.173934,y:-0.094446},{x:0.166626,y:-0.104299},{x:0.158388,y:-0.113388},{x:0.149299,y:-0.121626},{x:0.139446,y:-0.128934},{x:0.128925,y:-0.13524},{x:0.117835,y:-0.140485},{x:0.106286,y:-0.144618},{x:0.094386,y:-0.147598},{x:0.082252,y:-0.149398},{x:0.07,y:-0.15}],color:"primary",fill:!1}},texts:{top1:{type:"text",text:"{REF}",x:-0.020635199999998965,y:0.15414649999999952}},refblocks:{left1:{x:-0.4458008,y:-0.025023700000000426},right1:{x:0.4458008,y:-0.02514810000000045}},bounds:{minX:-0.45,maxX:0.45,minY:-0.15,maxY:0.1,width:0.9,height:0.25,centerX:0,centerY:-0.025},circles:{}},BKn=sn(bht).rotateRightFacingSymbol("down").labelPort("left1",["1"]).labelPort("right1",["2"]).changeTextAnchor("{REF}","middle_left").build(),HMe=sn(bht).rotateRightFacingSymbol("right").labelPort("left1",["1"]).labelPort("right1",["2"]).changeTextAnchor("{REF}","middle_bottom").build(),Sht=yo(HMe,"left"),OMe=Sht.primitives.find((e)=>e.type==="text"&&e.text==="{REF}");OMe.anchor="middle_bottom";OMe.y+=0.4;OMe.x=0;wKn=Sht,Pht=yo(HMe,"up"),zMe=Pht.primitives.find((e)=>e.type==="text"&&e.text==="{REF}");zMe.anchor="middle_left";zMe.y+=0;zMe.x=0.2;TKn=Pht,vht={paths:{path44:{type:"path",points:[{x:-0.195,y:-0.025},{x:-0.45,y:-0.025}],color:"primary",fill:!1},"path44-0":{type:"path",points:[{x:0.45,y:-0.025},{x:0.195,y:-0.025}],color:"primary",fill:!1},path2:{type:"path",points:[{x:0.07,y:0.1},{x:0.07,y:-0.15}],color:"primary",fill:!0},"path2-8":{type:"path",points:[{x:-0.07,y:0.1},{x:-0.07,y:-0.15}],color:"primary",fill:!0},"path8704-1":{type:"path",points:[{x:-0.07,y:0.1},{x:-0.082252,y:0.099398},{x:-0.094386,y:0.097598},{x:-0.106286,y:0.094618},{x:-0.117835,y:0.090485},{x:-0.128925,y:0.08524},{x:-0.139446,y:0.078934},{x:-0.149299,y:0.071626},{x:-0.158388,y:0.063388},{x:-0.166626,y:0.054299},{x:-0.173934,y:0.044446},{x:-0.18024,y:0.033925},{x:-0.185485,y:0.022835},{x:-0.189618,y:0.011286},{x:-0.192598,y:-0.000614},{x:-0.194398,y:-0.012748},{x:-0.195,y:-0.025},{x:-0.194398,y:-0.037252},{x:-0.192598,y:-0.049386},{x:-0.189618,y:-0.061286},{x:-0.185485,y:-0.072835},{x:-0.18024,y:-0.083925},{x:-0.173934,y:-0.094446},{x:-0.166626,y:-0.104299},{x:-0.158388,y:-0.113388},{x:-0.149299,y:-0.121626},{x:-0.139446,y:-0.128934},{x:-0.128925,y:-0.13524},{x:-0.117835,y:-0.140485},{x:-0.106286,y:-0.144618},{x:-0.094386,y:-0.147598},{x:-0.082252,y:-0.149398},{x:-0.07,y:-0.15}],color:"primary",fill:!1},"path8704-1-7":{type:"path",points:[{x:0.07,y:0.1},{x:0.082252,y:0.099398},{x:0.094386,y:0.097598},{x:0.106286,y:0.094618},{x:0.117835,y:0.090485},{x:0.128925,y:0.08524},{x:0.139446,y:0.078934},{x:0.149299,y:0.071626},{x:0.158388,y:0.063388},{x:0.166626,y:0.054299},{x:0.173934,y:0.044446},{x:0.18024,y:0.033925},{x:0.185485,y:0.022835},{x:0.189618,y:0.011286},{x:0.192598,y:-0.000614},{x:0.194398,y:-0.012748},{x:0.195,y:-0.025},{x:0.194398,y:-0.037252},{x:0.192598,y:-0.049386},{x:0.189618,y:-0.061286},{x:0.185485,y:-0.072835},{x:0.18024,y:-0.083925},{x:0.173934,y:-0.094446},{x:0.166626,y:-0.104299},{x:0.158388,y:-0.113388},{x:0.149299,y:-0.121626},{x:0.139446,y:-0.128934},{x:0.128925,y:-0.13524},{x:0.117835,y:-0.140485},{x:0.106286,y:-0.144618},{x:0.094386,y:-0.147598},{x:0.082252,y:-0.149398},{x:0.07,y:-0.15}],color:"primary",fill:!1}},texts:{top1:{type:"text",text:"{REF}",x:-0.020635199999998965,y:0.15414649999999952}},refblocks:{left1:{x:-0.44,y:-0.02},right1:{x:0.4458008,y:-0.02514810000000045}},bounds:{minX:-0.45,maxX:0.45,minY:-0.15,maxY:0.1,width:0.9,height:0.25,centerX:0,centerY:-0.025},circles:{}},DKn=sn(vht).rotateRightFacingSymbol("down").labelPort("left1",["1"]).labelPort("right1",["2"]).changeTextAnchor("{REF}","middle_left").build(),GMe=sn(vht).rotateRightFacingSymbol("right").labelPort("left1",["1"]).labelPort("right1",["2"]).changeTextAnchor("{REF}","middle_bottom").build(),Eht=yo(GMe,"left"),YMe=Eht.primitives.find((e)=>e.type==="text"&&e.text==="{REF}");YMe.anchor="middle_bottom";YMe.y+=0.4;YMe.x=0;NKn=Eht,Mht=yo(GMe,"up"),VMe=Mht.primitives.find((e)=>e.type==="text"&&e.text==="{REF}");VMe.anchor="middle_left";VMe.y+=0.05;VMe.x=0.2;RKn=Mht,Bht={paths:{path44:{type:"path",points:[{x:-0.25,y:0.1},{x:-0.45,y:0.1}],color:"primary",fill:!1},"path44-0":{type:"path",points:[{x:0.45,y:0.1},{x:0.25,y:0.1}],color:"primary",fill:!1},"path44-5":{type:"path",points:[{x:0,y:-0.025},{x:0,y:-0.275}],color:"primary",fill:!1},path2:{type:"path",points:[{x:0.125,y:0.225},{x:0.125,y:-0.025}],color:"primary",fill:!0},"path2-88":{type:"path",points:[{x:0.045,y:0.225},{x:0.045,y:-0.025}],color:"primary",fill:!0},"path2-88-5":{type:"path",points:[{x:-0.045,y:0.225},{x:-0.045,y:-0.025}],color:"primary",fill:!0},"path2-88-5-1":{type:"path",points:[{x:0.045,y:0.225},{x:-0.045,y:0.225}],color:"primary",fill:!0},"path2-88-5-1-6":{type:"path",points:[{x:0.045,y:-0.025},{x:-0.045,y:-0.025}],color:"primary",fill:!0},"path2-8":{type:"path",points:[{x:-0.125,y:0.225},{x:-0.125,y:-0.025}],color:"primary",fill:!0},"path8704-1":{type:"path",points:[{x:-0.125,y:0.225},{x:-0.137252,y:0.224398},{x:-0.149386,y:0.222598},{x:-0.161286,y:0.219618},{x:-0.172835,y:0.215485},{x:-0.183925,y:0.21024},{x:-0.194446,y:0.203934},{x:-0.204299,y:0.196626},{x:-0.213388,y:0.188388},{x:-0.221626,y:0.179299},{x:-0.228934,y:0.169446},{x:-0.23524,y:0.158925},{x:-0.240485,y:0.147835},{x:-0.244618,y:0.136286},{x:-0.247598,y:0.124386},{x:-0.249398,y:0.112252},{x:-0.25,y:0.1},{x:-0.249398,y:0.087748},{x:-0.247598,y:0.075614},{x:-0.244618,y:0.063714},{x:-0.240485,y:0.052165},{x:-0.23524,y:0.041075},{x:-0.228934,y:0.030554},{x:-0.221626,y:0.020701},{x:-0.213388,y:0.011612},{x:-0.204299,y:0.003374},{x:-0.194446,y:-0.003934},{x:-0.183925,y:-0.01024},{x:-0.172835,y:-0.015485},{x:-0.161286,y:-0.019618},{x:-0.149386,y:-0.022598},{x:-0.137252,y:-0.024398},{x:-0.125,y:-0.025}],color:"primary",fill:!1},"path8704-1-7":{type:"path",points:[{x:0.125,y:0.225},{x:0.137252,y:0.224398},{x:0.149386,y:0.222598},{x:0.161286,y:0.219618},{x:0.172835,y:0.215485},{x:0.183925,y:0.21024},{x:0.194446,y:0.203934},{x:0.204299,y:0.196626},{x:0.213388,y:0.188388},{x:0.221626,y:0.179299},{x:0.228934,y:0.169446},{x:0.23524,y:0.158925},{x:0.240485,y:0.147835},{x:0.244618,y:0.136286},{x:0.247598,y:0.124386},{x:0.249398,y:0.112252},{x:0.25,y:0.1},{x:0.249398,y:0.087748},{x:0.247598,y:0.075614},{x:0.244618,y:0.063714},{x:0.240485,y:0.052165},{x:0.23524,y:0.041075},{x:0.228934,y:0.030554},{x:0.221626,y:0.020701},{x:0.213388,y:0.011612},{x:0.204299,y:0.003374},{x:0.194446,y:-0.003934},{x:0.183925,y:-0.01024},{x:0.172835,y:-0.015485},{x:0.161286,y:-0.019618},{x:0.149386,y:-0.022598},{x:0.137252,y:-0.024398},{x:0.125,y:-0.025}],color:"primary",fill:!1},path1:{type:"path",points:[{x:-0.045,y:0.1},{x:-0.125,y:0.1}],color:"primary",fill:!1}},texts:{top1:{type:"text",text:"{REF}",x:-0.020635199999998965,y:0.28075747049999955}},refblocks:{left1:{x:-0.45,y:0.1},right1:{x:0.45,y:0.1},bottom1:{x:0,y:-0.275}},bounds:{minX:-0.45,maxX:0.45,minY:-0.28,maxY:0.28,width:0.9,height:0.56,centerX:0,centerY:0},circles:{}},QKn=sn(Bht).rotateRightFacingSymbol("down").labelPort("left1",["1"]).labelPort("bottom1",["2"]).labelPort("right1",["3"]).changeTextAnchor("{REF}","middle_left").build(),UMe=sn(Bht).rotateRightFacingSymbol("right").labelPort("left1",["1"]).labelPort("bottom1",["2"]).labelPort("right1",["3"]).changeTextAnchor("{REF}","middle_bottom").build(),wht=yo(UMe,"left"),WMe=wht.primitives.find((e)=>e.type==="text"&&e.text==="{REF}");WMe.anchor="middle_left";WMe.y+=0.5;WMe.x=0.2;kKn=wht,Tht=yo(UMe,"up"),XMe=Tht.primitives.find((e)=>e.type==="text"&&e.text==="{REF}");XMe.anchor="middle_left";XMe.y+=0.3;XMe.x=0.2;LKn=Tht,Dht={paths:{path44:{type:"path",points:[{x:-0.25,y:0.1},{x:-0.45,y:0.1}],color:"primary",fill:!1},"path44-0":{type:"path",points:[{x:0.45,y:0.1},{x:0.25,y:0.1}],color:"primary",fill:!1},"path44-5":{type:"path",points:[{x:0,y:-0.025},{x:0,y:-0.275}],color:"primary",fill:!1},path2:{type:"path",points:[{x:0.125,y:0.225},{x:0.125,y:-0.025}],color:"primary",fill:!0},"path2-88":{type:"path",points:[{x:0.045,y:0.225},{x:0.045,y:-0.025}],color:"primary",fill:!0},"path2-88-5":{type:"path",points:[{x:-0.045,y:0.225},{x:-0.045,y:-0.025}],color:"primary",fill:!0},"path2-88-5-1":{type:"path",points:[{x:0.045,y:0.225},{x:-0.045,y:0.225}],color:"primary",fill:!0},"path2-88-5-1-6":{type:"path",points:[{x:0.045,y:-0.025},{x:-0.045,y:-0.025}],color:"primary",fill:!0},"path2-8":{type:"path",points:[{x:-0.125,y:0.225},{x:-0.125,y:-0.025}],color:"primary",fill:!0},"path8704-1":{type:"path",points:[{x:-0.125,y:0.225},{x:-0.137252,y:0.224398},{x:-0.149386,y:0.222598},{x:-0.161286,y:0.219618},{x:-0.172835,y:0.215485},{x:-0.183925,y:0.21024},{x:-0.194446,y:0.203934},{x:-0.204299,y:0.196626},{x:-0.213388,y:0.188388},{x:-0.221626,y:0.179299},{x:-0.228934,y:0.169446},{x:-0.23524,y:0.158925},{x:-0.240485,y:0.147835},{x:-0.244618,y:0.136286},{x:-0.247598,y:0.124386},{x:-0.249398,y:0.112252},{x:-0.25,y:0.1},{x:-0.249398,y:0.087748},{x:-0.247598,y:0.075614},{x:-0.244618,y:0.063714},{x:-0.240485,y:0.052165},{x:-0.23524,y:0.041075},{x:-0.228934,y:0.030554},{x:-0.221626,y:0.020701},{x:-0.213388,y:0.011612},{x:-0.204299,y:0.003374},{x:-0.194446,y:-0.003934},{x:-0.183925,y:-0.01024},{x:-0.172835,y:-0.015485},{x:-0.161286,y:-0.019618},{x:-0.149386,y:-0.022598},{x:-0.137252,y:-0.024398},{x:-0.125,y:-0.025}],color:"primary",fill:!1},"path8704-1-7":{type:"path",points:[{x:0.125,y:0.225},{x:0.137252,y:0.224398},{x:0.149386,y:0.222598},{x:0.161286,y:0.219618},{x:0.172835,y:0.215485},{x:0.183925,y:0.21024},{x:0.194446,y:0.203934},{x:0.204299,y:0.196626},{x:0.213388,y:0.188388},{x:0.221626,y:0.179299},{x:0.228934,y:0.169446},{x:0.23524,y:0.158925},{x:0.240485,y:0.147835},{x:0.244618,y:0.136286},{x:0.247598,y:0.124386},{x:0.249398,y:0.112252},{x:0.25,y:0.1},{x:0.249398,y:0.087748},{x:0.247598,y:0.075614},{x:0.244618,y:0.063714},{x:0.240485,y:0.052165},{x:0.23524,y:0.041075},{x:0.228934,y:0.030554},{x:0.221626,y:0.020701},{x:0.213388,y:0.011612},{x:0.204299,y:0.003374},{x:0.194446,y:-0.003934},{x:0.183925,y:-0.01024},{x:0.172835,y:-0.015485},{x:0.161286,y:-0.019618},{x:0.149386,y:-0.022598},{x:0.137252,y:-0.024398},{x:0.125,y:-0.025}],color:"primary",fill:!1},path1:{type:"path",points:[{x:-0.045,y:0.1},{x:-0.125,y:0.1}],color:"primary",fill:!1},"path44-0-7":{type:"path",points:[{x:0.125,y:0.1},{x:0.045,y:0.1}],color:"primary",fill:!1}},texts:{top1:{type:"text",text:"{REF}",x:0,y:0.28}},refblocks:{left1:{x:-0.45,y:0.1},right1:{x:0.45,y:0.1},bottom1:{x:0,y:-0.275}},bounds:{minX:-0.45,maxX:0.45,minY:-0.28,maxY:0.28,width:0.9,height:0.56,centerX:0,centerY:0},circles:{}},FKn=sn(Dht).rotateRightFacingSymbol("down").labelPort("left1",["1"]).labelPort("bottom1",["2"]).labelPort("right1",["3"]).changeTextAnchor("{REF}","middle_left").build(),KMe=sn(Dht).rotateRightFacingSymbol("right").labelPort("left1",["1"]).labelPort("bottom1",["2"]).labelPort("right1",["3"]).changeTextAnchor("{REF}","middle_bottom").build(),Nht=yo(KMe,"left"),jMe=Nht.primitives.find((e)=>e.type==="text"&&e.text==="{REF}");jMe.anchor="middle_left";jMe.y+=0.5;jMe.x=0.2;HKn=Nht,Rht=yo(KMe,"up"),qMe=Rht.primitives.find((e)=>e.type==="text"&&e.text==="{REF}");qMe.anchor="middle_left";qMe.y+=0.4;qMe.x=0.2;OKn=Rht,Qht={paths:{path44:{type:"path",points:[{x:-0.25,y:0.1},{x:-0.45,y:0.1}],color:"primary",fill:!1},"path44-0":{type:"path",points:[{x:0.45,y:0.1},{x:0.25,y:0.1}],color:"primary",fill:!1},"path44-5":{type:"path",points:[{x:0,y:-0.025},{x:0,y:-0.275}],color:"primary",fill:!1},path2:{type:"path",points:[{x:0.125,y:0.225},{x:0.125,y:-0.025}],color:"primary",fill:!0},"path2-88":{type:"path",points:[{x:0.045,y:0.225},{x:0.045,y:-0.025}],color:"primary",fill:!0},"path2-88-5":{type:"path",points:[{x:-0.045,y:0.225},{x:-0.045,y:-0.025}],color:"primary",fill:!0},"path2-88-5-1":{type:"path",points:[{x:0.045,y:0.225},{x:-0.045,y:0.225}],color:"primary",fill:!0},"path2-88-5-1-6":{type:"path",points:[{x:0.045,y:-0.025},{x:-0.045,y:-0.025}],color:"primary",fill:!0},"path2-8":{type:"path",points:[{x:-0.125,y:0.225},{x:-0.125,y:-0.025}],color:"primary",fill:!0},"path8704-1":{type:"path",points:[{x:-0.125,y:0.225},{x:-0.137252,y:0.224398},{x:-0.149386,y:0.222598},{x:-0.161286,y:0.219618},{x:-0.172835,y:0.215485},{x:-0.183925,y:0.21024},{x:-0.194446,y:0.203934},{x:-0.204299,y:0.196626},{x:-0.213388,y:0.188388},{x:-0.221626,y:0.179299},{x:-0.228934,y:0.169446},{x:-0.23524,y:0.158925},{x:-0.240485,y:0.147835},{x:-0.244618,y:0.136286},{x:-0.247598,y:0.124386},{x:-0.249398,y:0.112252},{x:-0.25,y:0.1},{x:-0.249398,y:0.087748},{x:-0.247598,y:0.075614},{x:-0.244618,y:0.063714},{x:-0.240485,y:0.052165},{x:-0.23524,y:0.041075},{x:-0.228934,y:0.030554},{x:-0.221626,y:0.020701},{x:-0.213388,y:0.011612},{x:-0.204299,y:0.003374},{x:-0.194446,y:-0.003934},{x:-0.183925,y:-0.01024},{x:-0.172835,y:-0.015485},{x:-0.161286,y:-0.019618},{x:-0.149386,y:-0.022598},{x:-0.137252,y:-0.024398},{x:-0.125,y:-0.025}],color:"primary",fill:!1},"path8704-1-7":{type:"path",points:[{x:0.125,y:0.225},{x:0.137252,y:0.224398},{x:0.149386,y:0.222598},{x:0.161286,y:0.219618},{x:0.172835,y:0.215485},{x:0.183925,y:0.21024},{x:0.194446,y:0.203934},{x:0.204299,y:0.196626},{x:0.213388,y:0.188388},{x:0.221626,y:0.179299},{x:0.228934,y:0.169446},{x:0.23524,y:0.158925},{x:0.240485,y:0.147835},{x:0.244618,y:0.136286},{x:0.247598,y:0.124386},{x:0.249398,y:0.112252},{x:0.25,y:0.1},{x:0.249398,y:0.087748},{x:0.247598,y:0.075614},{x:0.244618,y:0.063714},{x:0.240485,y:0.052165},{x:0.23524,y:0.041075},{x:0.228934,y:0.030554},{x:0.221626,y:0.020701},{x:0.213388,y:0.011612},{x:0.204299,y:0.003374},{x:0.194446,y:-0.003934},{x:0.183925,y:-0.01024},{x:0.172835,y:-0.015485},{x:0.161286,y:-0.019618},{x:0.149386,y:-0.022598},{x:0.137252,y:-0.024398},{x:0.125,y:-0.025}],color:"primary",fill:!1},"path44-0-7":{type:"path",points:[{x:0.125,y:0.1},{x:0.045,y:0.1}],color:"primary",fill:!1}},texts:{top1:{type:"text",text:"{REF}",x:0,y:0.28}},refblocks:{left1:{x:-0.45,y:0.1},right1:{x:0.45,y:0.1},bottom1:{x:0,y:-0.275}},bounds:{minX:-0.45,maxX:0.45,minY:-0.28,maxY:0.28,width:0.9,height:0.56,centerX:0,centerY:0},circles:{}},zKn=sn(Qht).rotateRightFacingSymbol("down").labelPort("left1",["1"]).labelPort("bottom1",["2"]).labelPort("right1",["3"]).changeTextAnchor("{REF}","middle_left").build(),JMe=sn(Qht).rotateRightFacingSymbol("right").labelPort("left1",["1"]).labelPort("bottom1",["2"]).labelPort("right1",["3"]).changeTextAnchor("{REF}","middle_bottom").build(),kht=yo(JMe,"left"),$Me=kht.primitives.find((e)=>e.type==="text"&&e.text==="{REF}");$Me.anchor="middle_left";$Me.y+=0.6;$Me.x=0.3;GKn=kht,Lht=yo(JMe,"up"),ZMe=Lht.primitives.find((e)=>e.type==="text"&&e.text==="{REF}");ZMe.anchor="middle_left";ZMe.y+=0.4;ZMe.x=0.2;YKn=Lht,Fht={paths:{path44:{type:"path",points:[{x:-0.25,y:0.1},{x:-0.45,y:0.1}],color:"primary",fill:!1},"path44-0":{type:"path",points:[{x:0.45,y:0.1},{x:0.25,y:0.1}],color:"primary",fill:!1},"path44-5":{type:"path",points:[{x:0,y:-0.025},{x:0,y:-0.275}],color:"primary",fill:!1},path2:{type:"path",points:[{x:0.125,y:0.225},{x:0.125,y:-0.025}],color:"primary",fill:!0},"path2-88":{type:"path",points:[{x:0.045,y:0.225},{x:0.045,y:-0.025}],color:"primary",fill:!0},"path2-88-5":{type:"path",points:[{x:-0.045,y:0.225},{x:-0.045,y:-0.025}],color:"primary",fill:!0},"path2-88-5-1":{type:"path",points:[{x:0.045,y:0.225},{x:-0.045,y:0.225}],color:"primary",fill:!0},"path2-88-5-1-6":{type:"path",points:[{x:0.045,y:-0.025},{x:-0.045,y:-0.025}],color:"primary",fill:!0},"path2-8":{type:"path",points:[{x:-0.125,y:0.225},{x:-0.125,y:-0.025}],color:"primary",fill:!0},"path8704-1":{type:"path",points:[{x:-0.125,y:0.225},{x:-0.137252,y:0.224398},{x:-0.149386,y:0.222598},{x:-0.161286,y:0.219618},{x:-0.172835,y:0.215485},{x:-0.183925,y:0.21024},{x:-0.194446,y:0.203934},{x:-0.204299,y:0.196626},{x:-0.213388,y:0.188388},{x:-0.221626,y:0.179299},{x:-0.228934,y:0.169446},{x:-0.23524,y:0.158925},{x:-0.240485,y:0.147835},{x:-0.244618,y:0.136286},{x:-0.247598,y:0.124386},{x:-0.249398,y:0.112252},{x:-0.25,y:0.1},{x:-0.249398,y:0.087748},{x:-0.247598,y:0.075614},{x:-0.244618,y:0.063714},{x:-0.240485,y:0.052165},{x:-0.23524,y:0.041075},{x:-0.228934,y:0.030554},{x:-0.221626,y:0.020701},{x:-0.213388,y:0.011612},{x:-0.204299,y:0.003374},{x:-0.194446,y:-0.003934},{x:-0.183925,y:-0.01024},{x:-0.172835,y:-0.015485},{x:-0.161286,y:-0.019618},{x:-0.149386,y:-0.022598},{x:-0.137252,y:-0.024398},{x:-0.125,y:-0.025}],color:"primary",fill:!1},"path8704-1-7":{type:"path",points:[{x:0.125,y:0.225},{x:0.137252,y:0.224398},{x:0.149386,y:0.222598},{x:0.161286,y:0.219618},{x:0.172835,y:0.215485},{x:0.183925,y:0.21024},{x:0.194446,y:0.203934},{x:0.204299,y:0.196626},{x:0.213388,y:0.188388},{x:0.221626,y:0.179299},{x:0.228934,y:0.169446},{x:0.23524,y:0.158925},{x:0.240485,y:0.147835},{x:0.244618,y:0.136286},{x:0.247598,y:0.124386},{x:0.249398,y:0.112252},{x:0.25,y:0.1},{x:0.249398,y:0.087748},{x:0.247598,y:0.075614},{x:0.244618,y:0.063714},{x:0.240485,y:0.052165},{x:0.23524,y:0.041075},{x:0.228934,y:0.030554},{x:0.221626,y:0.020701},{x:0.213388,y:0.011612},{x:0.204299,y:0.003374},{x:0.194446,y:-0.003934},{x:0.183925,y:-0.01024},{x:0.172835,y:-0.015485},{x:0.161286,y:-0.019618},{x:0.149386,y:-0.022598},{x:0.137252,y:-0.024398},{x:0.125,y:-0.025}],color:"primary",fill:!1}},texts:{top1:{type:"text",text:"{REF}",x:-0.020635199999998965,y:0.28075747049999955}},refblocks:{left1:{x:-0.45,y:0.1},right1:{x:0.45,y:0.1},bottom1:{x:0,y:-0.275}},bounds:{minX:-0.45,maxX:0.45,minY:-0.28,maxY:0.28,width:0.9,height:0.56,centerX:0,centerY:0},circles:{}},VKn=sn(Fht).rotateRightFacingSymbol("down").labelPort("left1",["1"]).labelPort("bottom1",["2"]).labelPort("right1",["3"]).changeTextAnchor("{REF}","middle_left").build(),e6e=sn(Fht).rotateRightFacingSymbol("right").labelPort("left1",["1"]).labelPort("bottom1",["2"]).labelPort("right1",["3"]).changeTextAnchor("{REF}","middle_bottom").build(),Hht=yo(e6e,"left"),t6e=Hht.primitives.find((e)=>e.type==="text"&&e.text==="{REF}");t6e.anchor="middle_left";t6e.y+=0.5;t6e.x=0.3;UKn=Hht,Oht=yo(e6e,"up"),n6e=Oht.primitives.find((e)=>e.type==="text"&&e.text==="{REF}");n6e.anchor="middle_left";n6e.y+=0.3;n6e.x=0.2;WKn=Oht,XKn={paths:{path1:{type:"path",points:[{x:-0.37,y:0.03},{x:-0.13,y:0.03}],color:"primary",fill:!1},"path-1-3":{type:"path",points:[{x:-0.07,y:0.03},{x:0.11,y:-0.03}],color:"primary",fill:!1},path2:{type:"path",points:[{x:0.1,y:-0.06},{x:0.37,y:-0.06}],color:"primary",fill:!1},path3:{type:"path",points:[{x:0.12,y:0.17},{x:0.37,y:0.17}],color:"primary",fill:!1}},texts:{top1:{type:"text",text:"{REF}",x:0,y:0.37},bottom1:{type:"text",text:"{VAL}",x:0,y:-0.37}},refblocks:{left1:{x:-0.37,y:0.03},right1:{x:0.37,y:-0.06},right2:{x:0.37,y:0.17}},bounds:{minX:-0.4,maxX:0.4,minY:-0.4,maxY:0.4,width:0.79,height:0.79,centerX:0,centerY:0},circles:{"circle-3":{type:"circle",x:0.08,y:-0.07,radius:0.02,color:"primary",fill:!1},"circle-1":{type:"circle",x:-0.1,y:0.03,radius:0.02,color:"primary",fill:!1},"circle-2":{type:"circle",x:0.08,y:0.17,radius:0.02,color:"primary",fill:!1}}},Hue=sn(XKn).changeTextAnchor("{VAL}","middle_top").labelPort("left1",["1"]).labelPort("right2",["2"]).labelPort("right1",["3"]).changeTextAnchor("{REF}","middle_bottom").build(),o6e=yo(Hue,"down"),i6e=o6e.primitives.find((e)=>e.type==="text"&&e.text==="{REF}"),r6e=o6e.primitives.find((e)=>e.type==="text"&&e.text==="{VAL}");i6e.anchor="middle_bottom";r6e.anchor="middle_top";i6e.x=0.44;i6e.y+=0.28;r6e.y-=0.28;r6e.x=0.44;KKn=o6e,s6e=yo(Hue,"left"),a6e=s6e.primitives.find((e)=>e.type==="text"&&e.text==="{REF}"),c6e=s6e.primitives.find((e)=>e.type==="text"&&e.text==="{VAL}");a6e.anchor="middle_bottom";c6e.anchor="middle_top";a6e.x=0;a6e.y+=0.625;c6e.y-=0.695;c6e.x=0;jKn=s6e,l6e=yo(Hue,"up"),d6e=l6e.primitives.find((e)=>e.type==="text"&&e.text==="{REF}"),u6e=l6e.primitives.find((e)=>e.type==="text"&&e.text==="{VAL}");d6e.anchor="middle_bottom";u6e.anchor="middle_top";d6e.x=0.4;d6e.y+=0.28;u6e.y-=0.28;u6e.x=0.4;qKn=l6e,JKn={paths:{path1:{type:"path",points:[{x:-0.37,y:0.03},{x:-0.13,y:0.03}],color:"primary",fill:!1},"path-1-3":{type:"path",points:[{x:-0.07,y:0.03},{x:0.11,y:0.14}],color:"primary",fill:!1},path2:{type:"path",points:[{x:0.1,y:-0.06},{x:0.37,y:-0.06}],color:"primary",fill:!1},path3:{type:"path",points:[{x:0.12,y:0.17},{x:0.37,y:0.17}],color:"primary",fill:!1}},texts:{top1:{type:"text",text:"{REF}",x:0,y:0.4},bottom1:{type:"text",text:"{VAL}",x:0,y:-0.4}},refblocks:{left1:{x:-0.37,y:0.03},right1:{x:0.37,y:-0.06},right3:{x:0.37,y:0.17}},bounds:{minX:-0.4,maxX:0.4,minY:-0.4,maxY:0.4,width:0.79,height:0.79,centerX:0,centerY:0},circles:{"circle-3":{type:"circle",x:0.08,y:-0.07,radius:0.02,color:"primary",fill:!1},"circle-1":{type:"circle",x:-0.1,y:0.03,radius:0.02,color:"primary",fill:!1},"circle-2":{type:"circle",x:0.08,y:0.17,radius:0.02,color:"primary",fill:!1}}},Oue=sn(JKn).changeTextAnchor("{VAL}","middle_top").labelPort("left1",["1"]).labelPort("right3",["2"]).labelPort("right1",["3"]).changeTextAnchor("{REF}","middle_bottom").build(),h6e=yo(Oue,"down"),m6e=h6e.primitives.find((e)=>e.type==="text"&&e.text==="{REF}"),p6e=h6e.primitives.find((e)=>e.type==="text"&&e.text==="{VAL}");m6e.anchor="middle_bottom";p6e.anchor="middle_top";m6e.x=0.44;m6e.y+=0.28;p6e.y-=0.28;p6e.x=0.44;$Kn=h6e,A6e=yo(Oue,"left"),_6e=A6e.primitives.find((e)=>e.type==="text"&&e.text==="{REF}"),g6e=A6e.primitives.find((e)=>e.type==="text"&&e.text==="{VAL}");_6e.anchor="middle_bottom";g6e.anchor="middle_top";_6e.x=0;_6e.y+=0.625;g6e.y-=0.695;g6e.x=0;ZKn=A6e,f6e=yo(Oue,"up"),y6e=f6e.primitives.find((e)=>e.type==="text"&&e.text==="{REF}"),x6e=f6e.primitives.find((e)=>e.type==="text"&&e.text==="{VAL}");y6e.anchor="middle_bottom";x6e.anchor="middle_top";y6e.x=0.4;y6e.y+=0.28;x6e.y-=0.28;x6e.x=0.4;ejn=f6e,iG={paths:{"lead-positive":{type:"path",points:[{x:-0.4,y:0.19999999999999996},{x:-0.20000000000000007,y:0.19999999999999996}],color:"primary",fill:!1},"lead-negative":{type:"path",points:[{x:-0.4,y:-0.20000000000000018},{x:-0.20000000000000007,y:-0.20000000000000018}],color:"primary",fill:!1},"voice-coil":{type:"path",points:[{x:-0.20000000000000007,y:0.19999999999999996},{x:0,y:0.19999999999999996},{x:0,y:-0.20000000000000018},{x:-0.20000000000000007,y:-0.20000000000000018},{x:-0.20000000000000007,y:0.19999999999999996}],color:"primary",fill:!1},cone:{type:"path",points:[{x:0,y:0.19999999999999996},{x:0.3999999999999999,y:0.3999999999999999},{x:0.3999999999999999,y:-0.40000000000000013},{x:0,y:-0.20000000000000018},{x:0,y:0.19999999999999996}],color:"primary",fill:!1}},texts:{top1:{type:"text",text:"{REF}",x:0,y:0.6},bottom1:{type:"text",text:"{VAL}",x:0,y:-0.6000000000000001}},refblocks:{left1:{x:-0.4,y:-0.20000000000000018},left2:{x:-0.4,y:0.19999999999999996}},bounds:{minX:-0.4,maxX:0.3999999999999999,minY:-0.6000000000000001,maxY:0.6,width:0.7999999999999999,height:1.2000000000000002,centerX:-0.00000000000000005551115123125783,centerY:-0.00000000000000005551115123125783},circles:{}},zht=sn(iG).rotateRightFacingSymbol("down").labelPort("left1",["2","neg"]).labelPort("left2",["1","pos"]).changeTextAnchor("{REF}","middle_bottom").changeTextAnchor("{VAL}","middle_top").build(),Lde=QM(zht.primitives),tjn={...zht,center:{x:(Lde.minX+Lde.maxX)/2,y:(Lde.minY+Lde.maxY)/2}},Ght=sn(iG).rotateRightFacingSymbol("right").labelPort("left1",["2","neg"]).labelPort("left2",["1","pos"]).changeTextAnchor("{REF}","middle_bottom").changeTextAnchor("{VAL}","middle_top").build(),Fde=QM(Ght.primitives),njn={...Ght,center:{x:(Fde.minX+Fde.maxX)/2,y:(Fde.minY+Fde.maxY)/2}},Yht=sn(iG).rotateRightFacingSymbol("left").labelPort("left1",["2","neg"]).labelPort("left2",["1","pos"]).changeTextAnchor("{REF}","middle_bottom").changeTextAnchor("{VAL}","middle_top").build(),Hde=QM(Yht.primitives),ojn={...Yht,center:{x:(Hde.minX+Hde.maxX)/2,y:(Hde.minY+Hde.maxY)/2}},Vht=sn(iG).rotateRightFacingSymbol("right").labelPort("left1",["2","neg"]).labelPort("left2",["1","pos"]).changeTextAnchor("{REF}","middle_bottom").changeTextAnchor("{VAL}","middle_top").build(),Ode=QM(Vht.primitives),ijn={...Vht,center:{x:(Ode.minX+Ode.maxX)/2,y:(Ode.minY+Ode.maxY)/2}},Uht=sn(iG).rotateRightFacingSymbol("up").labelPort("left1",["2","neg"]).labelPort("left2",["1","pos"]).changeTextAnchor("{REF}","middle_bottom").changeTextAnchor("{VAL}","middle_top").build(),zde=QM(Uht.primitives),rjn={...Uht,center:{x:(zde.minX+zde.maxX)/2,y:(zde.minY+zde.maxY)/2}},Wht=sn(iG).rotateRightFacingSymbol("up").labelPort("left1",["2","neg"]).labelPort("left2",["1","pos"]).changeTextAnchor("{REF}","middle_bottom").changeTextAnchor("{VAL}","middle_top").build(),Gde=QM(Wht.primitives),sjn={...Wht,center:{x:(Gde.minX+Gde.maxX)/2,y:(Gde.minY+Gde.maxY)/2}},zue={paths:{path11:{type:"path",points:[{x:-0.38,y:0},{x:-0.12,y:-0.01}],color:"primary",fill:!1},"path11-0":{type:"path",points:[{x:-0.07,y:0},{x:0.11,y:0.05}],color:"primary",fill:!1},path12:{type:"path",points:[{x:0.12,y:-0.01},{x:0.38,y:0}],color:"primary",fill:!1}},texts:{top1:{type:"text",text:"{REF}",x:0,y:0.31},bottom1:{type:"text",text:"{VAL}",x:0,y:-0.28}},refblocks:{left1:{x:-0.12,y:-0.01},left2:{x:-0.38,y:0},right1:{x:0.12,y:-0.01},right2:{x:0.38,y:0}},bounds:{minX:-0.4,maxX:0.4,minY:-0.25,maxY:0.25,width:0.81,height:0.5,centerX:0,centerY:0},circles:{"circle-2":{type:"circle",x:0.1,y:0,radius:0.02,color:"primary",fill:!1},"circle-1":{type:"circle",x:-0.1,y:0,radius:0.02,color:"primary",fill:!1}}};delete zue.refblocks.left1;delete zue.refblocks.right1;zue.bounds.width+=0.2;Gue=sn(zue).changeTextAnchor("{VAL}","middle_top").labelPort("left2",["1"]).labelPort("right2",["2"]).changeTextAnchor("{REF}","middle_bottom").build(),C6e=yo(Gue,"down"),I6e=C6e.primitives.find((e)=>e.type==="text"&&e.text==="{REF}"),b6e=C6e.primitives.find((e)=>e.type==="text"&&e.text==="{VAL}");I6e.anchor="middle_bottom";b6e.anchor="middle_top";I6e.x=0.3;I6e.y+=0.265;b6e.y-=0.265;b6e.x=0.3;ajn=C6e,S6e=yo(Gue,"left"),P6e=S6e.primitives.find((e)=>e.type==="text"&&e.text==="{REF}"),v6e=S6e.primitives.find((e)=>e.type==="text"&&e.text==="{VAL}");P6e.anchor="middle_bottom";v6e.anchor="middle_top";P6e.x=0;P6e.y+=0.57;v6e.y-=0.57;v6e.x=0;cjn=S6e,E6e=yo(Gue,"up"),M6e=E6e.primitives.find((e)=>e.type==="text"&&e.text==="{REF}"),B6e=E6e.primitives.find((e)=>e.type==="text"&&e.text==="{VAL}");M6e.anchor="middle_bottom";B6e.anchor="middle_top";M6e.x=0.3;M6e.y+=0.265;B6e.y-=0.265;B6e.x=0.3;ljn=E6e,Yue={paths:{path11:{type:"path",points:[{x:-0.38,y:0},{x:-0.12,y:-0.01}],color:"primary",fill:!1},"path11-0":{type:"path",points:[{x:-0.07,y:0.01},{x:0.1,y:0.14}],color:"primary",fill:!1},path12:{type:"path",points:[{x:0.12,y:-0.01},{x:0.38,y:0}],color:"primary",fill:!1}},texts:{top1:{type:"text",text:"{REF}",x:0,y:0.25},bottom1:{type:"text",text:"{VAL}",x:0,y:-0.25}},refblocks:{left1:{x:-0.12,y:-0.01},left2:{x:-0.38,y:0},right1:{x:0.12,y:-0.01},right2:{x:0.38,y:0}},bounds:{minX:-0.4,maxX:0.4,minY:-0.25,maxY:0.25,width:0.81,height:0.5,centerX:0,centerY:0},circles:{"circle-2":{type:"circle",x:0.1,y:0,radius:0.02,color:"primary",fill:!1},"circle-1":{type:"circle",x:-0.1,y:0,radius:0.02,color:"primary",fill:!1}}};delete Yue.refblocks.left1;delete Yue.refblocks.right1;Yue.bounds.width+=0.2;Vue=sn(Yue).changeTextAnchor("{VAL}","middle_top").labelPort("left2",["1"]).labelPort("right2",["2"]).changeTextAnchor("{REF}","middle_bottom").build(),w6e=yo(Vue,"down"),T6e=w6e.primitives.find((e)=>e.type==="text"&&e.text==="{REF}"),D6e=w6e.primitives.find((e)=>e.type==="text"&&e.text==="{VAL}");T6e.anchor="middle_bottom";D6e.anchor="middle_top";T6e.x=0.3;T6e.y+=0.265;D6e.y-=0.265;D6e.x=0.3;djn=w6e,N6e=yo(Vue,"left"),R6e=N6e.primitives.find((e)=>e.type==="text"&&e.text==="{REF}"),Q6e=N6e.primitives.find((e)=>e.type==="text"&&e.text==="{VAL}");R6e.anchor="middle_bottom";Q6e.anchor="middle_top";R6e.x=0;R6e.y+=0.57;Q6e.y-=0.57;Q6e.x=0;ujn=N6e,k6e=yo(Vue,"up"),L6e=k6e.primitives.find((e)=>e.type==="text"&&e.text==="{REF}"),F6e=k6e.primitives.find((e)=>e.type==="text"&&e.text==="{VAL}");L6e.anchor="middle_bottom";F6e.anchor="middle_top";L6e.x=0.3;L6e.y+=0.265;F6e.y-=0.265;F6e.x=0.3;hjn=k6e,Uue={paths:{path44:{type:"path",points:[{x:-0.16845120000000047,y:0.02621170000000017},{x:-0.4458008,y:0.02709619999999968}],color:"primary",fill:!1},"path44-0":{type:"path",points:[{x:0.4458008,y:0.026971799999999657},{x:0.1677968999999997,y:0.027926399999999685}],color:"primary",fill:!1},"path8704-1":{type:"path",points:[{x:-0.0040837000000002455,y:-0.13467459999999964},{x:-0.0040837000000002455,y:-0.13467459999999964},{x:-0.017668143940740948,y:-0.1311205263185182},{x:-0.03043520885925943,y:-0.12727072121481456},{x:-0.04240966440000013,y:-0.1231399985999998},{x:-0.05361628020740751,y:-0.11874317238518502},{x:-0.064079825925926,y:-0.11409505648148131},{x:-0.07382507120000005,y:-0.10921046479999987},{x:-0.0828767856740741,y:-0.10410421125185171},{x:-0.0912597389925926,y:-0.09879110974814802},{x:-0.09899870079999995,y:-0.0932859741999998},{x:-0.10611844074074069,y:-0.08760361851851838},{x:-0.11264372845925916,y:-0.0817588566148146},{x:-0.11859933359999993,y:-0.07576650239999982},{x:-0.12401002580740728,y:-0.06964136978518495},{x:-0.12890057472592584,y:-0.06339827268148127},{x:-0.13329574999999985,y:-0.05705202499999972},{x:-0.13722032127407394,y:-0.05061744065185156},{x:-0.14069905819259243,y:-0.04410933354814783},{x:-0.14375673039999987,y:-0.03754251759999966},{x:-0.14641810754074058,y:-0.030931806718518143},{x:-0.1487079592592591,y:-0.0242920148148144},{x:-0.15065105519999983,y:-0.017637955799999563},{x:-0.15227216500740723,y:-0.01098444358518472},{x:-0.15359605832592574,y:-0.004346292081480994},{x:-0.1546475047999998,y:0.00226168480000051},{x:-0.15545127407407386,y:0.008824673148148676},{x:-0.1560321357925924,y:0.015327859051852397},{x:-0.1564148595999998,y:0.02175642860000056},{x:-0.1566242151407405,y:0.028095567881482052},{x:-0.15668497205925902,y:0.03433046298518576},{x:-0.15662189999999976,y:0.04044630000000058},{x:-0.15662189999999976,y:0.0404463000000006},{x:-0.15662189999999976,y:0.0404463000000006},{x:-0.15622857394444417,y:0.04717166472222282},{x:-0.1553217675555553,y:0.05388046444444503},{x:-0.15392183849999977,y:0.060558907500000585},{x:-0.1520491444444442,y:0.0671932022222228},{x:-0.1497240430555553,y:0.07376955694444502},{x:-0.14696689199999974,y:0.08027418000000058},{x:-0.14379804894444415,y:0.0866932797222228},{x:-0.1402378715555553,y:0.09301306444444506},{x:-0.13630671749999965,y:0.09921974250000057},{x:-0.13202494444444415,y:0.10529952222222282},{x:-0.12741291005555522,y:0.11123861194444501},{x:-0.1224909719999997,y:0.1170232200000006},{x:-0.11727948794444407,y:0.12263955472222278},{x:-0.11179881555555524,y:0.12807382444444504},{x:-0.10606931249999965,y:0.13331223750000057},{x:-0.1001113364444441,y:0.13834100222222284},{x:-0.09394524505555521,y:0.14314632694444504},{x:-0.08759139599999967,y:0.14771442000000062},{x:-0.08107014694444413,y:0.15203148972222283},{x:-0.07440185555555523,y:0.15608374444444503},{x:-0.0676068794999997,y:0.15985739250000058},{x:-0.06070557644444415,y:0.16333864222222283},{x:-0.05371830405555529,y:0.16651370194444504},{x:-0.04666541999999976,y:0.1693687800000006},{x:-0.03956728194444424,y:0.1718900847222228},{x:-0.03244424755555539,y:0.17406382444444501},{x:-0.025316674499999876,y:0.17587620750000055},{x:-0.01820492044444437,y:0.17731344222222278},{x:-0.01112934305555553,y:0.178361736944445},{x:-0.004110300000000034,y:0.17900730000000054},{x:-0.004110300000000011,y:0.17900730000000054}],color:"primary",fill:!1},"path8704-1-9":{type:"path",points:[{x:0.004158700000000071,y:-0.1355885000000001},{x:0.004158700000000071,y:-0.1355885000000001},{x:0.017743143940740766,y:-0.1320344263185187},{x:0.03051020885925925,y:-0.12818462121481505},{x:0.042484664399999955,y:-0.12405389860000024},{x:0.053691280207407335,y:-0.11965707238518546},{x:0.0641548259259258,y:-0.11500895648148178},{x:0.07390007119999986,y:-0.1101243648000003},{x:0.0829517856740739,y:-0.10501811125185218},{x:0.0913347389925924,y:-0.09970500974814848},{x:0.09907370079999973,y:-0.09419987420000027},{x:0.10619344074074046,y:-0.08851751851851883},{x:0.11271872845925893,y:-0.08267275661481507},{x:0.11867433359999968,y:-0.07668040240000029},{x:0.12408502580740703,y:-0.0705552697851854},{x:0.12897557472592555,y:-0.06431217268148172},{x:0.13337074999999957,y:-0.05796592500000018},{x:0.13729532127407365,y:-0.05153134065185202},{x:0.14077405819259214,y:-0.045023233548148286},{x:0.14383173039999952,y:-0.038456417600000126},{x:0.14649310754074024,y:-0.03184570671851861},{x:0.14878295925925875,y:-0.02520591481481487},{x:0.1507260551999995,y:-0.01855185580000003},{x:0.15234716500740686,y:-0.011898343585185192},{x:0.15367105832592537,y:-0.005260192081481464},{x:0.15472250479999944,y:0.001347784800000043},{x:0.1555262740740735,y:0.007910773148148207},{x:0.156107135792592,y:0.01441395905185193},{x:0.1564898595999994,y:0.020842528600000094},{x:0.15669921514074014,y:0.02718166788148159},{x:0.15675997205925862,y:0.03341656298518529},{x:0.15669689999999936,y:0.03953240000000011},{x:0.15669689999999936,y:0.039532400000000134},{x:0.15669689999999936,y:0.039532400000000134},{x:0.1563035739444438,y:0.04625776472222235},{x:0.15539676755555493,y:0.05296656444444457},{x:0.15399683849999934,y:0.05964500750000013},{x:0.1521241444444438,y:0.06627930222222234},{x:0.14979904305555491,y:0.07285565694444456},{x:0.14704189199999937,y:0.07936028000000013},{x:0.1438730489444438,y:0.08577937972222234},{x:0.1403128715555549,y:0.09209916444444458},{x:0.13638171749999925,y:0.0983058425000001},{x:0.13209994444444376,y:0.10438562222222235},{x:0.12748791005555482,y:0.11032471194444453},{x:0.12256597199999929,y:0.11610932000000013},{x:0.1173544879444437,y:0.1217256547222223},{x:0.11187381555555485,y:0.12715992444444457},{x:0.10614431249999925,y:0.1323983375000001},{x:0.10018633644444369,y:0.13742710222222235},{x:0.09402024505555481,y:0.14223242694444457},{x:0.08766639599999927,y:0.14680052000000016},{x:0.08114514694444372,y:0.15111758972222236},{x:0.07447685555555483,y:0.15516984444444457},{x:0.06768187949999929,y:0.15894349250000012},{x:0.06078057644444377,y:0.16242474222222236},{x:0.053793304055554894,y:0.16559980194444457},{x:0.046740419999999366,y:0.16845488000000014},{x:0.039642281944443844,y:0.17097618472222234},{x:0.03251924755555499,y:0.17314992444444455},{x:0.02539167449999948,y:0.17496230750000008},{x:0.018279920444443973,y:0.17639954222222232},{x:0.011204343055555134,y:0.17744783694444452},{x:0.004185299999999637,y:0.17809340000000007},{x:0.004185299999999614,y:0.17809340000000007}],color:"primary",fill:!1},path4:{type:"path",points:[{x:-0.08039130000000005,y:0.0179576999999993},{x:-0.08039130000000005,y:0.09650599999999931}],color:"primary",fill:!0},"path4-5":{type:"path",points:[{x:0.01494479999999987,y:-0.055216500000000224},{x:0.01494479999999987,y:0.09691909999999937}],color:"primary",fill:!0},"path4-5-8":{type:"path",points:[{x:0.06871169999999927,y:-0.056870000000000864},{x:0.06871169999999927,y:0.018784499999999538}],color:"primary",fill:!0},"path4-1":{type:"path",points:[{x:-0.08179359999999969,y:0.09650570000000003},{x:0.015771699999999722,y:0.09650570000000003}],color:"primary",fill:!0},"path4-1-6":{type:"path",points:[{x:0.0117995999999998,y:-0.05594970000000088},{x:0.06843709999999925,y:-0.05594970000000088}],color:"primary",fill:!0},"rect1577-4":{type:"path",points:[{x:-0.17162450000000073,y:0.11125030000000025},{x:-0.2688274000000015,y:0.11125030000000025},{x:-0.2688274000000015,y:0.11469129999999961},{x:-0.17162450000000073,y:0.11469129999999961}],color:"primary",fill:!0},"rect1577-4-7":{type:"path",points:[{x:-0.2184661999999995,y:0.16159429999999997},{x:-0.2184661999999995,y:0.06439139999999943},{x:-0.22190719999999908,y:0.06439139999999943},{x:-0.22190719999999908,y:0.16159429999999997}],color:"primary",fill:!0}},texts:{top1:{type:"text",text:"{REF}",x:-0.0024445000000006267,y:0.23933980000000044},bottom1:{type:"text",text:"{VAL}",x:0.00341719999999901,y:-0.23933980000000066}},refblocks:{left1:{x:-0.4458008,y:0.02709619999999968},right1:{x:0.4458008,y:0.026971799999999657}},bounds:{minX:-0.473959241,maxX:0.473959241,minY:-0.23933980000000066,maxY:0.23933980000000044,width:0.947918482,height:0.4786796000000011,centerX:0,centerY:-0.00000000000000011102230246251565},circles:{}},mjn=sn(Uue).rotateRightFacingSymbol("down").labelPort("left1",["1","pos"]).labelPort("right1",["2","neg"]).changeTextAnchor("{REF}","middle_left",{x:0.02,y:0.2}).changeTextAnchor("{VAL}","middle_left",{x:0.5,y:-0.2}).build(),pjn=sn(Uue).rotateRightFacingSymbol("left").labelPort("left1",["1","pos"]).labelPort("right1",["2","neg"]).changeTextAnchor("{REF}","middle_bottom",{x:0,y:0.45}).changeTextAnchor("{VAL}","middle_top",{x:0,y:-0.55}).build(),Ajn=sn(Uue).rotateRightFacingSymbol("right").labelPort("left1",["1","pos"]).labelPort("right1",["2","neg"]).changeTextAnchor("{REF}","middle_bottom").changeTextAnchor("{VAL}","middle_top").build(),_jn=sn(Uue).rotateRightFacingSymbol("up").labelPort("left1",["1","pos"]).labelPort("right1",["2","neg"]).changeTextAnchor("{VAL}","middle_left",{x:0.02,y:-0.2}).changeTextAnchor("{REF}","middle_left",{x:0.5,y:0.2}).build(),Xht={paths:{path40:{type:"path",points:[{x:0.14,y:0.04},{x:-0.12,y:-0.09}],color:"primary",fill:!1},path41:{type:"path",points:[{x:-0.12,y:0.18},{x:0.14,y:0.04}],color:"primary",fill:!1},path42:{type:"path",points:[{x:-0.12,y:-0.09},{x:-0.12,y:0.18}],color:"primary",fill:!1},path43:{type:"path",points:[{x:0.14,y:0.18},{x:0.14,y:-0.09}],color:"primary",fill:!1},path44:{type:"path",points:[{x:-0.12,y:0.04},{x:-0.52,y:0.04}],color:"primary",fill:!1},"path44-0":{type:"path",points:[{x:0.52,y:0.04},{x:0.15,y:0.04}],color:"primary",fill:!1},"path43-5":{type:"path",points:[{x:0.19,y:-0.09},{x:0.15,y:-0.09}],color:"primary",fill:!1},"path43-5-2":{type:"path",points:[{x:0.19,y:-0.14},{x:0.19,y:-0.09}],color:"primary",fill:!1}},texts:{top1:{type:"text",text:"{REF}",x:-0.01,y:0.27},bottom1:{type:"text",text:"{VAL}",x:0,y:-0.27}},refblocks:{left1:{x:-0.52,y:0.04},right1:{x:0.52,y:0.04}},bounds:{minX:-0.55,maxX:0.55,minY:-0.27,maxY:0.27,width:1.09,height:0.55,centerX:0,centerY:0},circles:{}},{paths:g5r,texts:f5r,bounds:y5r,refblocks:x5r,circles:C5r}=Xht,Kht=sn(Xht).changeTextAnchor("{VAL}","middle_top").labelPort("left1",["1"]).labelPort("right1",["2"]).changeTextAnchor("{REF}","middle_bottom").build(),gjn=yo(Kht),fjn={paths:{path11:{type:"path",points:[{x:-0.54,y:0},{x:-0.3,y:0}],color:"primary",fill:!1},path12:{type:"path",points:[{x:0.29,y:0},{x:0.54,y:0}],color:"primary",fill:!1}},texts:{top1:{type:"text",text:"{REF}",x:-0.18,y:-0.36},bottom1:{type:"text",text:"{VAL}",x:-0.01,y:0.43},left1:{type:"text",text:"RPM",x:0,y:-0.02}},refblocks:{left1:{x:-0.54,y:0},right1:{x:0.54,y:0}},bounds:{minX:-0.53,maxX:0.53,minY:0,maxY:0,width:1.06,height:1,centerX:0,centerY:0},circles:{path1:{type:"circle",x:-0.01,y:-0.01,radius:0.29,color:"primary",fill:!1}}},{paths:yjn,texts:xjn,bounds:Yde,refblocks:nut,circles:Cjn}=fjn,H6e=jc({primitives:[...Object.values(yjn),...Object.values(Cjn),{type:"text",text:"{REF}",x:0,y:-0.3594553499999995,anchor:"middle_top"},{type:"text",text:"{VAL}",x:0,y:0.35,anchor:"middle_bottom"},{...xjn.left1,y:0.01,anchor:"center",fontSize:0.2}],ports:[{...nut.left1,labels:["1"]},{...nut.right1,labels:["2"]}],size:{width:Yde.width,height:Yde.height},center:{x:Yde.centerX,y:Yde.centerY}}),{5:Ijn,...bjn}=H6e.primitives;out=yo({...H6e,primitives:Object.values(bjn).filter(Sjn)}),Pjn={...out,primitives:[...out.primitives,Ijn]},Wue=jc({primitives:[{type:"path",points:[{x:-0.2,y:0},{x:0,y:0}],color:"primary",fill:!1},{type:"path",points:Array.from({length:32},(e,t)=>{let n=Math.PI/2-t*Math.PI/31,o=0.1;return{x:0.1-o*Math.cos(n),y:o*Math.sin(n)}}),color:"primary",fill:!1},{type:"text",text:"{REF}",x:0.125,y:0,anchor:"middle_left"}],ports:[{x:-0.2,y:0,labels:["1"]}],center:{x:0,y:0}}),jht=yo(Wue,"down"),iut=jht.primitives.find((e)=>e.type==="text"&&e.text==="{REF}");iut&&(iut.anchor="middle_top");vjn=jht,Ejn=yo(Wue,"left"),qht=yo(Wue,"up"),rut=qht.primitives.find((e)=>e.type==="text"&&e.text==="{REF}");rut&&(rut.anchor="middle_bottom");Mjn=qht,Bjn={paths:{path40:{type:"path",points:[{x:0.44,y:0.04},{x:0.19,y:-0.09}],color:"primary",fill:!1},path41:{type:"path",points:[{x:0.19,y:0.18},{x:0.44,y:0.04}],color:"primary",fill:!1},path42:{type:"path",points:[{x:0.19,y:-0.09},{x:0.19,y:0.18}],color:"primary",fill:!1},path44:{type:"path",points:[{x:0.19,y:0.04},{x:-0.11,y:0.04}],color:"primary",fill:!1},path45:{type:"path",points:[{x:-0.43,y:0.22},{x:-0.11,y:0.04}],color:"primary",fill:!1}},texts:{top1:{type:"text",text:"{REF}",x:-0.01,y:0.27},bottom1:{type:"text",text:"{VAL}",x:0,y:-0.27}},refblocks:{right1:{x:-0.43,y:0.22}},bounds:{minX:-0.55,maxX:0.55,minY:-0.27,maxY:0.27,width:1.09,height:0.55,centerX:0,centerY:0},circles:{}},O6e=sn(Bjn).labelPort("right1",["1"]).changeTextAnchor("{REF}","middle_bottom").changeTextAnchor("{VAL}","middle_top").build(),z6e=yo(O6e,"up"),G6e=z6e.primitives.find((e)=>e.type==="text"&&e.text==="{REF}"),Y6e=z6e.primitives.find((e)=>e.type==="text"&&e.text==="{VAL}");G6e.anchor="middle_bottom";Y6e.anchor="middle_top";G6e.x=0.4;G6e.y+=0.2;Y6e.y-=0.3;Y6e.x=0.4;Jht=z6e,V6e=Kz(Jht),U6e=V6e.primitives.find((e)=>e.type==="text"&&e.text==="{REF}"),W6e=V6e.primitives.find((e)=>e.type==="text"&&e.text==="{VAL}");U6e.anchor="middle_bottom";W6e.anchor="middle_top";U6e.x=0.35;U6e.y+=0.4;W6e.y-=0.4;W6e.x=0.35;wjn=V6e,X6e=yo(O6e,"left"),K6e=X6e.primitives.find((e)=>e.type==="text"&&e.text==="{REF}"),j6e=X6e.primitives.find((e)=>e.type==="text"&&e.text==="{VAL}");K6e.anchor="middle_bottom";j6e.anchor="middle_top";K6e.x=0;K6e.y+=0.5;j6e.y-=0.6;j6e.x=0;Tjn=X6e,q6e={paths:{"primary-winding":{type:"path",points:[{x:-0.6666666666666999,y:0.6000000000000001},{x:-0.1419999999999999,y:0.6000000000000001},{x:-0.1419999999999999,y:0.6000000000000001},{x:-0.13426666666666656,y:0.5976565925925927},{x:-0.12706666666666658,y:0.5950394074074075},{x:-0.12039999999999991,y:0.5921680000000001},{x:-0.11426666666666657,y:0.5890619259259261},{x:-0.10866666666666656,y:0.5857407407407409},{x:-0.10359999999999989,y:0.5822240000000002},{x:-0.09906666666666655,y:0.5785312592592594},{x:-0.09506666666666656,y:0.5746820740740743},{x:-0.09159999999999985,y:0.5706959999999999},{x:-0.08866666666666653,y:0.5665925925925928},{x:-0.08626666666666649,y:0.5623914074074075},{x:-0.08439999999999986,y:0.5581120000000002},{x:-0.08306666666666651,y:0.5537739259259259},{x:-0.08226666666666653,y:0.5493967407407409},{x:-0.08199999999999985,y:0.5449999999999999},{x:-0.08226666666666652,y:0.5406032592592593},{x:-0.08306666666666651,y:0.5362260740740741},{x:-0.08439999999999986,y:0.5318880000000001},{x:-0.08626666666666652,y:0.5276085925925926},{x:-0.08866666666666652,y:0.5234074074074074},{x:-0.09159999999999985,y:0.519304},{x:-0.09506666666666652,y:0.515317925925926},{x:-0.09906666666666653,y:0.5114687407407408},{x:-0.10359999999999986,y:0.507776},{x:-0.10866666666666652,y:0.5042592592592593},{x:-0.11426666666666653,y:0.5009380740740741},{x:-0.12039999999999987,y:0.49783200000000005},{x:-0.12706666666666652,y:0.4949605925925927},{x:-0.1342666666666665,y:0.49234340740740745},{x:-0.14199999999999988,y:0.4900000000000001},{x:-0.1419999999999999,y:0.4900000000000001},{x:-0.1419999999999999,y:0.4900000000000001},{x:-0.13426666666666656,y:0.48765659259259264},{x:-0.12706666666666658,y:0.48503940740740753},{x:-0.12039999999999991,y:0.4821680000000002},{x:-0.11426666666666657,y:0.4790619259259261},{x:-0.10866666666666656,y:0.47574074074074085},{x:-0.10359999999999989,y:0.4722240000000002},{x:-0.09906666666666655,y:0.46853125925925937},{x:-0.09506666666666656,y:0.46468207407407425},{x:-0.09159999999999985,y:0.46069599999999994},{x:-0.08866666666666653,y:0.45659259259259266},{x:-0.08626666666666649,y:0.45239140740740735},{x:-0.08439999999999986,y:0.4481120000000001},{x:-0.08306666666666651,y:0.4437739259259259},{x:-0.08226666666666653,y:0.43939674074074087},{x:-0.08199999999999985,y:0.43499999999999994},{x:-0.08226666666666652,y:0.4306032592592593},{x:-0.08306666666666651,y:0.42622607407407415},{x:-0.08439999999999986,y:0.42188800000000015},{x:-0.08626666666666652,y:0.41760859259259264},{x:-0.08866666666666652,y:0.4134074074074075},{x:-0.09159999999999985,y:0.40930400000000006},{x:-0.09506666666666652,y:0.40531792592592597},{x:-0.09906666666666653,y:0.4014687407407408},{x:-0.10359999999999986,y:0.3977760000000001},{x:-0.10866666666666652,y:0.3942592592592593},{x:-0.11426666666666653,y:0.3909380740740741},{x:-0.12039999999999987,y:0.38783200000000007},{x:-0.12706666666666652,y:0.3849605925925927},{x:-0.1342666666666665,y:0.38234340740740747},{x:-0.14199999999999988,y:0.3800000000000001},{x:-0.1419999999999999,y:0.3800000000000001},{x:-0.1419999999999999,y:0.3800000000000001},{x:-0.13426666666666656,y:0.37765659259259265},{x:-0.12706666666666658,y:0.3750394074074076},{x:-0.12039999999999991,y:0.3721680000000001},{x:-0.11426666666666657,y:0.36906192592592607},{x:-0.10866666666666656,y:0.36574074074074087},{x:-0.10359999999999989,y:0.36222400000000016},{x:-0.09906666666666655,y:0.3585312592592594},{x:-0.09506666666666656,y:0.35468207407407426},{x:-0.09159999999999985,y:0.350696},{x:-0.08866666666666653,y:0.34659259259259273},{x:-0.08626666666666649,y:0.3423914074074074},{x:-0.08439999999999986,y:0.33811200000000013},{x:-0.08306666666666651,y:0.3337739259259259},{x:-0.08226666666666653,y:0.3293967407407409},{x:-0.08199999999999985,y:0.325},{x:-0.08226666666666652,y:0.3206032592592593},{x:-0.08306666666666651,y:0.31622607407407416},{x:-0.08439999999999986,y:0.3118880000000001},{x:-0.08626666666666652,y:0.30760859259259266},{x:-0.08866666666666652,y:0.30340740740740746},{x:-0.09159999999999985,y:0.299304},{x:-0.09506666666666652,y:0.29531792592592593},{x:-0.09906666666666653,y:0.2914687407407408},{x:-0.10359999999999986,y:0.28777600000000003},{x:-0.10866666666666652,y:0.28425925925925927},{x:-0.11426666666666653,y:0.2809380740740741},{x:-0.12039999999999987,y:0.277832},{x:-0.12706666666666652,y:0.27496059259259265},{x:-0.1342666666666665,y:0.2723434074074074},{x:-0.14199999999999988,y:0.27},{x:-0.1419999999999999,y:0.27},{x:-0.1419999999999999,y:0.27},{x:-0.13426666666666656,y:0.2676565925925926},{x:-0.12706666666666658,y:0.26503940740740745},{x:-0.12039999999999991,y:0.2621680000000001},{x:-0.11426666666666657,y:0.25906192592592603},{x:-0.10866666666666656,y:0.25574074074074093},{x:-0.10359999999999989,y:0.25222400000000017},{x:-0.09906666666666655,y:0.2485312592592594},{x:-0.09506666666666656,y:0.24468207407407425},{x:-0.09159999999999985,y:0.24069600000000008},{x:-0.08866666666666653,y:0.23659259259259274},{x:-0.08626666666666649,y:0.2323914074074075},{x:-0.08439999999999986,y:0.2281120000000002},{x:-0.08306666666666651,y:0.22377392592592601},{x:-0.08226666666666653,y:0.2193967407407409},{x:-0.08199999999999985,y:0.2150000000000001},{x:-0.08226666666666652,y:0.21060325925925938},{x:-0.08306666666666651,y:0.20622607407407423},{x:-0.08439999999999986,y:0.20188800000000012},{x:-0.08626666666666652,y:0.1976085925925927},{x:-0.08866666666666652,y:0.19340740740740753},{x:-0.09159999999999985,y:0.18930400000000008},{x:-0.09506666666666652,y:0.185317925925926},{x:-0.09906666666666653,y:0.18146874074074082},{x:-0.10359999999999986,y:0.17777600000000005},{x:-0.10866666666666652,y:0.17425925925925928},{x:-0.11426666666666653,y:0.17093807407407408},{x:-0.12039999999999987,y:0.16783199999999998},{x:-0.12706666666666652,y:0.16496059259259258},{x:-0.1342666666666665,y:0.16234340740740733},{x:-0.14199999999999988,y:0.15999999999999992},{x:-0.1419999999999999,y:0.15999999999999992},{x:-0.1419999999999999,y:0.15999999999999992},{x:-0.13426666666666656,y:0.1577116296296296},{x:-0.12706666666666658,y:0.15525451851851865},{x:-0.12039999999999991,y:0.15264066666666695},{x:-0.11426666666666657,y:0.1498820740740747},{x:-0.10866666666666656,y:0.1469907407407417},{x:-0.10359999999999989,y:0.14397866666666803},{x:-0.09906666666666655,y:0.14085785185185365},{x:-0.09506666666666656,y:0.1376402962962987},{x:-0.09159999999999985,y:0.13433800000000298},{x:-0.08866666666666653,y:0.1309629629629667},{x:-0.08626666666666649,y:0.12752718518518963},{x:-0.08439999999999986,y:0.12404266666667203},{x:-0.08306666666666651,y:0.12052140740741364},{x:-0.08226666666666653,y:0.11697540740741469},{x:-0.08199999999999985,y:0.11341666666667499},{x:-0.08226666666666652,y:0.10985718518519466},{x:-0.08306666666666651,y:0.10630896296297365},{x:-0.08439999999999986,y:0.10278400000001198},{x:-0.08626666666666652,y:0.09929429629630965},{x:-0.08866666666666652,y:0.09585185185186663},{x:-0.09159999999999985,y:0.09246866666668296},{x:-0.09506666666666652,y:0.08915674074075862},{x:-0.09906666666666653,y:0.08592807407409363},{x:-0.10359999999999986,y:0.08279466666668796},{x:-0.10866666666666652,y:0.07976851851854162},{x:-0.11426666666666653,y:0.07686162962965462},{x:-0.12039999999999987,y:0.07408600000002696},{x:-0.12706666666666652,y:0.07145362962965862},{x:-0.1342666666666665,y:0.06897651851854962},{x:-0.14199999999999988,y:0.06666666666669996},{x:-0.1419999999999999,y:0.06666666666669996},{x:-0.6666666666666999,y:0.06666666666669996}],color:"primary",fill:!1},"auxiliary-winding":{type:"path",points:[{x:-0.6666666666666999,y:-0.06666666666669996},{x:-0.1419999999999999,y:-0.06666666666669996},{x:-0.1419999999999999,y:-0.06666666666669996},{x:-0.13426666666666656,y:-0.0689765185185496},{x:-0.12706666666666658,y:-0.07145362962965864},{x:-0.12039999999999991,y:-0.07408600000002695},{x:-0.11426666666666657,y:-0.07686162962965463},{x:-0.10866666666666656,y:-0.07976851851854162},{x:-0.10359999999999989,y:-0.08279466666668797},{x:-0.09906666666666655,y:-0.08592807407409363},{x:-0.09506666666666656,y:-0.08915674074075866},{x:-0.09159999999999985,y:-0.09246866666668294},{x:-0.08866666666666653,y:-0.09585185185186663},{x:-0.08626666666666649,y:-0.09929429629630962},{x:-0.08439999999999986,y:-0.10278400000001198},{x:-0.08306666666666651,y:-0.10630896296297361},{x:-0.08226666666666653,y:-0.10985718518519468},{x:-0.08199999999999985,y:-0.11341666666667496},{x:-0.08226666666666652,y:-0.11697540740741467},{x:-0.08306666666666651,y:-0.12052140740741367},{x:-0.08439999999999986,y:-0.124042666666672},{x:-0.08626666666666652,y:-0.12752718518518966},{x:-0.08866666666666652,y:-0.13096296296296667},{x:-0.09159999999999985,y:-0.134338000000003},{x:-0.09506666666666652,y:-0.13764029629629865},{x:-0.09906666666666653,y:-0.14085785185185368},{x:-0.10359999999999986,y:-0.14397866666666798},{x:-0.10866666666666652,y:-0.14699074074074164},{x:-0.11426666666666653,y:-0.1498820740740746},{x:-0.12039999999999987,y:-0.15264066666666695},{x:-0.12706666666666652,y:-0.15525451851851862},{x:-0.1342666666666665,y:-0.1577116296296296},{x:-0.14199999999999988,y:-0.15999999999999992},{x:-0.1419999999999999,y:-0.15999999999999992},{x:-0.1419999999999999,y:-0.15999999999999992},{x:-0.13426666666666656,y:-0.16234340740740733},{x:-0.12706666666666658,y:-0.16496059259259252},{x:-0.12039999999999991,y:-0.16783199999999995},{x:-0.11426666666666657,y:-0.17093807407407402},{x:-0.10866666666666656,y:-0.17425925925925922},{x:-0.10359999999999989,y:-0.17777599999999996},{x:-0.09906666666666655,y:-0.18146874074074068},{x:-0.09506666666666656,y:-0.1853179259259259},{x:-0.09159999999999985,y:-0.18930399999999992},{x:-0.08866666666666653,y:-0.19340740740740736},{x:-0.08626666666666649,y:-0.19760859259259247},{x:-0.08439999999999986,y:-0.20188799999999998},{x:-0.08306666666666651,y:-0.20622607407407395},{x:-0.08226666666666653,y:-0.2106032592592592},{x:-0.08199999999999985,y:-0.21499999999999986},{x:-0.08226666666666652,y:-0.21939674074074067},{x:-0.08306666666666651,y:-0.22377392592592585},{x:-0.08439999999999986,y:-0.22811199999999995},{x:-0.08626666666666652,y:-0.23239140740740732},{x:-0.08866666666666652,y:-0.23659259259259252},{x:-0.09159999999999985,y:-0.2406959999999999},{x:-0.09506666666666652,y:-0.244682074074074},{x:-0.09906666666666653,y:-0.24853125925925917},{x:-0.10359999999999986,y:-0.2522239999999999},{x:-0.10866666666666652,y:-0.2557407407407406},{x:-0.11426666666666653,y:-0.2590619259259258},{x:-0.12039999999999987,y:-0.26216799999999985},{x:-0.12706666666666652,y:-0.2650394074074072},{x:-0.1342666666666665,y:-0.2676565925925924},{x:-0.14199999999999988,y:-0.26999999999999974},{x:-0.1419999999999999,y:-0.2699999999999998},{x:-0.1419999999999999,y:-0.2699999999999998},{x:-0.13426666666666656,y:-0.2723434074074072},{x:-0.12706666666666658,y:-0.2749605925925925},{x:-0.12039999999999991,y:-0.27783199999999986},{x:-0.11426666666666657,y:-0.280938074074074},{x:-0.10866666666666656,y:-0.28425925925925916},{x:-0.10359999999999989,y:-0.2877759999999999},{x:-0.09906666666666655,y:-0.29146874074074064},{x:-0.09506666666666656,y:-0.295317925925926},{x:-0.09159999999999985,y:-0.29930399999999985},{x:-0.08866666666666653,y:-0.30340740740740735},{x:-0.08626666666666649,y:-0.30760859259259243},{x:-0.08439999999999986,y:-0.311888},{x:-0.08306666666666651,y:-0.31622607407407394},{x:-0.08226666666666653,y:-0.32060325925925925},{x:-0.08199999999999985,y:-0.3249999999999999},{x:-0.08226666666666652,y:-0.3293967407407407},{x:-0.08306666666666651,y:-0.33377392592592586},{x:-0.08439999999999986,y:-0.338112},{x:-0.08626666666666652,y:-0.3423914074074074},{x:-0.08866666666666652,y:-0.34659259259259256},{x:-0.09159999999999985,y:-0.35069599999999995},{x:-0.09506666666666652,y:-0.35468207407407404},{x:-0.09906666666666653,y:-0.35853125925925927},{x:-0.10359999999999986,y:-0.362224},{x:-0.10866666666666652,y:-0.3657407407407407},{x:-0.11426666666666653,y:-0.3690619259259259},{x:-0.12039999999999987,y:-0.37216800000000005},{x:-0.12706666666666652,y:-0.37503940740740743},{x:-0.1342666666666665,y:-0.37765659259259265},{x:-0.14199999999999988,y:-0.3800000000000001},{x:-0.1419999999999999,y:-0.3800000000000001},{x:-0.1419999999999999,y:-0.3800000000000001},{x:-0.13426666666666656,y:-0.38234340740740747},{x:-0.12706666666666658,y:-0.38496059259259274},{x:-0.12039999999999991,y:-0.38783200000000007},{x:-0.11426666666666657,y:-0.39093807407407416},{x:-0.10866666666666656,y:-0.3942592592592593},{x:-0.10359999999999989,y:-0.3977760000000001},{x:-0.09906666666666655,y:-0.40146874074074074},{x:-0.09506666666666656,y:-0.40531792592592597},{x:-0.09159999999999985,y:-0.40930399999999995},{x:-0.08866666666666653,y:-0.41340740740740745},{x:-0.08626666666666649,y:-0.4176085925925925},{x:-0.08439999999999986,y:-0.4218880000000001},{x:-0.08306666666666651,y:-0.4262260740740739},{x:-0.08226666666666653,y:-0.43060325925925924},{x:-0.08199999999999985,y:-0.4349999999999999},{x:-0.08226666666666652,y:-0.4393967407407407},{x:-0.08306666666666651,y:-0.4437739259259258},{x:-0.08439999999999986,y:-0.44811199999999995},{x:-0.08626666666666652,y:-0.4523914074074073},{x:-0.08866666666666652,y:-0.45659259259259244},{x:-0.09159999999999985,y:-0.4606959999999999},{x:-0.09506666666666652,y:-0.46468207407407397},{x:-0.09906666666666653,y:-0.4685312592592591},{x:-0.10359999999999986,y:-0.47222399999999987},{x:-0.10866666666666652,y:-0.4757407407407406},{x:-0.11426666666666653,y:-0.4790619259259258},{x:-0.12039999999999987,y:-0.4821679999999998},{x:-0.12706666666666652,y:-0.4850394074074072},{x:-0.1342666666666665,y:-0.4876565925925923},{x:-0.14199999999999988,y:-0.48999999999999977},{x:-0.1419999999999999,y:-0.48999999999999977},{x:-0.1419999999999999,y:-0.48999999999999977},{x:-0.13426666666666656,y:-0.4923434074074071},{x:-0.12706666666666658,y:-0.49496059259259245},{x:-0.12039999999999991,y:-0.4978319999999999},{x:-0.11426666666666657,y:-0.500938074074074},{x:-0.10866666666666656,y:-0.5042592592592593},{x:-0.10359999999999989,y:-0.507776},{x:-0.09906666666666655,y:-0.5114687407407407},{x:-0.09506666666666656,y:-0.5153179259259261},{x:-0.09159999999999985,y:-0.5193039999999998},{x:-0.08866666666666653,y:-0.5234074074074074},{x:-0.08626666666666649,y:-0.5276085925925925},{x:-0.08439999999999986,y:-0.531888},{x:-0.08306666666666651,y:-0.536226074074074},{x:-0.08226666666666653,y:-0.5406032592592593},{x:-0.08199999999999985,y:-0.5449999999999999},{x:-0.08226666666666652,y:-0.5493967407407407},{x:-0.08306666666666651,y:-0.5537739259259259},{x:-0.08439999999999986,y:-0.558112},{x:-0.08626666666666652,y:-0.5623914074074075},{x:-0.08866666666666652,y:-0.5665925925925925},{x:-0.09159999999999985,y:-0.5706959999999999},{x:-0.09506666666666652,y:-0.574682074074074},{x:-0.09906666666666653,y:-0.5785312592592593},{x:-0.10359999999999986,y:-0.582224},{x:-0.10866666666666652,y:-0.5857407407407407},{x:-0.11426666666666653,y:-0.5890619259259259},{x:-0.12039999999999987,y:-0.5921679999999998},{x:-0.12706666666666652,y:-0.5950394074074072},{x:-0.1342666666666665,y:-0.5976565925925924},{x:-0.14199999999999988,y:-0.5999999999999999},{x:-0.1419999999999999,y:-0.5999999999999999},{x:-0.6666666666666999,y:-0.5999999999999999}],color:"primary",fill:!1},"secondary-one-winding":{type:"path",points:[{x:0.6666666666666998,y:0.4666666666667001},{x:0.133,y:0.4666666666667001},{x:0.133,y:0.4666666666667001},{x:0.12449333333333333,y:0.46512612345682036},{x:0.11657333333333333,y:0.4634445432099042},{x:0.10923999999999999,y:0.4616320000000254},{x:0.10249333333333334,y:0.45969856790125796},{x:0.09633333333333331,y:0.45765432098767606},{x:0.09075999999999998,y:0.4555093333333538},{x:0.0857733333333333,y:0.45327367901236504},{x:0.08137333333333331,y:0.450957432098784},{x:0.07755999999999993,y:0.44857066666668444},{x:0.0743333333333333,y:0.4461234567901409},{x:0.07169333333333326,y:0.4436258765432269},{x:0.06963999999999997,y:0.44108800000001697},{x:0.06817333333333327,y:0.4385199012345847},{x:0.06729333333333329,y:0.43593165432100456},{x:0.06699999999999995,y:0.43333333333335006},{x:0.06729333333333329,y:0.4307350123456958},{x:0.06817333333333328,y:0.4281467654321155},{x:0.06963999999999995,y:0.42557866666668337},{x:0.07169333333333328,y:0.4230407901234733},{x:0.07433333333333328,y:0.42054320987655935},{x:0.07755999999999996,y:0.4180960000000157},{x:0.08137333333333328,y:0.4157092345679163},{x:0.08577333333333328,y:0.4133929876543353},{x:0.09075999999999997,y:0.4111573333333466},{x:0.0963333333333333,y:0.4090123456790242},{x:0.10249333333333328,y:0.40696809876544227},{x:0.10923999999999996,y:0.405034666666675},{x:0.1165733333333333,y:0.4032221234567961},{x:0.12449333333333329,y:0.40154054320987975},{x:0.13299999999999998,y:0.40000000000000013},{x:0.133,y:0.40000000000000013},{x:0.133,y:0.40000000000000013},{x:0.12449333333333333,y:0.39845945679012046},{x:0.11657333333333333,y:0.3967778765432042},{x:0.10923999999999999,y:0.39496533333332534},{x:0.10249333333333334,y:0.39303190123455795},{x:0.09633333333333331,y:0.3909876543209761},{x:0.09075999999999998,y:0.3888426666666537},{x:0.0857733333333333,y:0.386607012345665},{x:0.08137333333333331,y:0.38429076543208396},{x:0.07755999999999993,y:0.3819039999999844},{x:0.0743333333333333,y:0.37945679012344086},{x:0.07169333333333326,y:0.37695920987652687},{x:0.06963999999999997,y:0.37442133333331695},{x:0.06817333333333327,y:0.37185323456788455},{x:0.06729333333333329,y:0.36926498765430443},{x:0.06699999999999995,y:0.36666666666665004},{x:0.06729333333333329,y:0.3640683456789958},{x:0.06817333333333328,y:0.3614800987654155},{x:0.06963999999999995,y:0.35891199999998336},{x:0.07169333333333328,y:0.3563741234567732},{x:0.07433333333333328,y:0.35387654320985934},{x:0.07755999999999996,y:0.3514293333333157},{x:0.08137333333333328,y:0.3490425679012163},{x:0.08577333333333328,y:0.34672632098763523},{x:0.09075999999999997,y:0.3444906666666465},{x:0.0963333333333333,y:0.34234567901232416},{x:0.10249333333333328,y:0.3403014320987423},{x:0.10923999999999996,y:0.3383679999999749},{x:0.1165733333333333,y:0.33655545679009613},{x:0.12449333333333329,y:0.3348738765431798},{x:0.13299999999999998,y:0.3333333333333002},{x:0.133,y:0.3333333333333002},{x:0.6666666666666998,y:0.3333333333333002}],color:"primary",fill:!1},"secondary-two-winding":{type:"path",points:[{x:0.6666666666666998,y:-0.19999999999999996},{x:0.133,y:-0.19999999999999996},{x:0.133,y:-0.19999999999999996},{x:0.12449333333333333,y:-0.2015405432098796},{x:0.11657333333333333,y:-0.2032221234567959},{x:0.10923999999999999,y:-0.20503466666667475},{x:0.10249333333333334,y:-0.20696809876544214},{x:0.09633333333333331,y:-0.20901234567902405},{x:0.09075999999999998,y:-0.21115733333334635},{x:0.0857733333333333,y:-0.21339298765433506},{x:0.08137333333333331,y:-0.2157092345679162},{x:0.07755999999999993,y:-0.21809600000001547},{x:0.0743333333333333,y:-0.2205432098765592},{x:0.07169333333333326,y:-0.22304079012347303},{x:0.06963999999999997,y:-0.22557866666668316},{x:0.06817333333333327,y:-0.22814676543211523},{x:0.06729333333333329,y:-0.23073501234569563},{x:0.06699999999999995,y:-0.23333333333334982},{x:0.06729333333333329,y:-0.2359316543210042},{x:0.06817333333333328,y:-0.2385199012345845},{x:0.06963999999999995,y:-0.24108800000001673},{x:0.07169333333333328,y:-0.24362587654322676},{x:0.07433333333333328,y:-0.2461234567901406},{x:0.07755999999999996,y:-0.24857066666668426},{x:0.08137333333333328,y:-0.25095743209878363},{x:0.08577333333333328,y:-0.25327367901236475},{x:0.09075999999999997,y:-0.25550933333335346},{x:0.0963333333333333,y:-0.2576543209876757},{x:0.10249333333333328,y:-0.25969856790125756},{x:0.10923999999999996,y:-0.26163200000002496},{x:0.1165733333333333,y:-0.2634445432099038},{x:0.12449333333333329,y:-0.26512612345682},{x:0.13299999999999998,y:-0.2666666666666997},{x:0.133,y:-0.2666666666666997},{x:0.133,y:-0.2666666666666997},{x:0.12449333333333333,y:-0.26820720987657004},{x:0.11657333333333333,y:-0.2698887901234782},{x:0.10923999999999999,y:-0.27170133333335017},{x:0.10249333333333334,y:-0.2736347654321117},{x:0.09633333333333331,y:-0.2756790123456887},{x:0.09075999999999998,y:-0.27782400000000707},{x:0.0857733333333333,y:-0.2800596543209926},{x:0.08137333333333331,y:-0.2823759012345713},{x:0.07755999999999993,y:-0.28476266666666866},{x:0.0743333333333333,y:-0.28720987654321106},{x:0.07169333333333326,y:-0.28970745679012394},{x:0.06963999999999997,y:-0.2922453333333336},{x:0.06817333333333327,y:-0.29481343209876537},{x:0.06729333333333329,y:-0.29740167901234577},{x:0.06699999999999995,y:-0.3},{x:0.06729333333333329,y:-0.3025983209876544},{x:0.06817333333333328,y:-0.30518656790123455},{x:0.06963999999999995,y:-0.3077546666666665},{x:0.07169333333333328,y:-0.310292543209876},{x:0.07433333333333328,y:-0.31279012345678897},{x:0.07755999999999996,y:-0.31523733333333126},{x:0.08137333333333328,y:-0.31762409876542885},{x:0.08577333333333328,y:-0.3199403456790074},{x:0.09075999999999997,y:-0.32217599999999297},{x:0.0963333333333333,y:-0.3243209876543113},{x:0.10249333333333328,y:-0.32636523456788824},{x:0.10923999999999996,y:-0.32829866666664975},{x:0.1165733333333333,y:-0.33011120987652165},{x:0.12449333333333329,y:-0.3317927901234298},{x:0.13299999999999998,y:-0.3333333333333002},{x:0.133,y:-0.3333333333333002},{x:0.6666666666666998,y:-0.3333333333333002}],color:"primary",fill:!1},"core-left":{type:"path",points:[{x:-0.03599999999999981,y:0.66},{x:-0.03599999999999981,y:-0.6599999999999999}],color:"primary",fill:!1},"core-right":{type:"path",points:[{x:0.028999999999999915,y:0.66},{x:0.028999999999999915,y:-0.6599999999999999}],color:"primary",fill:!1}},texts:{top1:{type:"text",text:"{REF}",x:0,y:0.7200000000000001},bottom1:{type:"text",text:"{VAL}",x:0,y:-0.72}},refblocks:{left1:{x:-0.6666666666666999,y:-0.5999999999999999},left2:{x:-0.6666666666666999,y:-0.06666666666669996},left3:{x:-0.6666666666666999,y:0.06666666666669996},left4:{x:-0.6666666666666999,y:0.6000000000000001},right1:{x:0.6666666666666998,y:-0.3333333333333002},right2:{x:0.6666666666666998,y:-0.19999999999999996},right3:{x:0.6666666666666998,y:0.3333333333333002},right4:{x:0.6666666666666998,y:0.4666666666667001}},bounds:{minX:-0.6666666666666999,maxX:0.6666666666666998,minY:-0.72,maxY:0.7200000000000001,width:1.3333333333333997,height:1.44,centerX:-0.00000000000000005551115123125783,centerY:0.00000000000000005551115123125783},circles:{"primary-polarity-dot":{type:"circle",x:-0.19599999999999995,y:0.535,radius:0.0172,color:"primary",fill:!0},"auxiliary-polarity-dot":{type:"circle",x:-0.19599999999999995,y:-0.1316666666666999,radius:0.0172,color:"primary",fill:!0},"secondary-one-polarity-dot":{type:"circle",x:0.18999999999999995,y:0.42700000000000005,radius:0.0172,color:"primary",fill:!0},"secondary-two-polarity-dot":{type:"circle",x:0.18999999999999995,y:-0.23999999999999977,radius:0.0172,color:"primary",fill:!0}}},Djn=sn(q6e).labelPort("left1",["1","primary_end"]).labelPort("left2",["2","primary_start"]).labelPort("left3",["3","auxiliary_end"]).labelPort("left4",["4","auxiliary_start"]).labelPort("right1",["8","secondary1_end"]).labelPort("right2",["7","secondary1_start"]).labelPort("right3",["6","secondary2_end"]).labelPort("right4",["5","secondary2_start"]).changeTextAnchor("{REF}","middle_bottom").changeTextAnchor("{VAL}","middle_top").rotateRightFacingSymbol("down").build(),$ht=sn(q6e).labelPort("left1",["1","primary_end"]).labelPort("left2",["2","primary_start"]).labelPort("left3",["3","auxiliary_end"]).labelPort("left4",["4","auxiliary_start"]).labelPort("right1",["8","secondary1_end"]).labelPort("right2",["7","secondary1_start"]).labelPort("right3",["6","secondary2_end"]).labelPort("right4",["5","secondary2_start"]).changeTextAnchor("{REF}","middle_bottom").changeTextAnchor("{VAL}","middle_top").rotateRightFacingSymbol("right").build(),Njn=L5($ht),Rjn=sn(q6e).labelPort("left1",["1","primary_end"]).labelPort("left2",["2","primary_start"]).labelPort("left3",["3","auxiliary_end"]).labelPort("left4",["4","auxiliary_start"]).labelPort("right1",["8","secondary1_end"]).labelPort("right2",["7","secondary1_start"]).labelPort("right3",["6","secondary2_end"]).labelPort("right4",["5","secondary2_start"]).changeTextAnchor("{REF}","middle_bottom").changeTextAnchor("{VAL}","middle_top").rotateRightFacingSymbol("up").build(),Zht={paths:{path11:{type:"path",points:[{x:-0.54,y:0.04},{x:-0.11,y:0.04}],color:"primary",fill:!1},path12:{type:"path",points:[{x:0.1,y:0.04},{x:0.54,y:0.04}],color:"primary",fill:!1},"path11-0":{type:"path",points:[{x:-0.09,y:-0.15},{x:-0.09,y:0.26}],color:"primary",fill:!1},"path11-0-3":{type:"path",points:[{x:0.09,y:-0.15},{x:0.09,y:0.26}],color:"primary",fill:!1},"path11-0-9":{type:"path",points:[{x:-0.08,y:0.06},{x:-0.08,y:-0.15},{x:0.09,y:-0.05},{x:-0.08,y:0.06}],color:"primary",fill:!0},"path11-0-9-0":{type:"path",points:[{x:0.08,y:0.26},{x:0.08,y:0.05},{x:-0.09,y:0.15},{x:0.07,y:0.26}],color:"primary",fill:!0},"path12-2":{type:"path",points:[{x:0.09,y:-0.06},{x:0.27,y:-0.17}],color:"primary",fill:!1},"path12-2-9":{type:"path",points:[{x:0.27,y:-0.18},{x:0.27,y:-0.31}],color:"primary",fill:!1}},texts:{top1:{type:"text",text:"{REF}",x:0.01,y:0.42},bottom1:{type:"text",text:"{VAL}",x:-0.03,y:-0.42}},refblocks:{bottom1:{x:0.27,y:-0.31},left1:{x:-0.54,y:0.04},right1:{x:0.54,y:0.04}},bounds:{minX:-0.57,maxX:0.57,minY:-0.42,maxY:0.42,width:1.14,height:0.83,centerX:0,centerY:0},circles:{path1:{type:"circle",x:0,y:0.05,radius:0.29,color:"primary",fill:!1}}},{paths:I5r,texts:b5r,bounds:S5r,refblocks:P5r,circles:v5r}=Zht,e0t=sn(Zht).changeTextAnchor("{VAL}","middle_top").labelPort("left1",["1"]).labelPort("right1",["2"]).labelPort("bottom1",["3"]).changeTextAnchor("{REF}","middle_bottom").build(),t0t=yo(e0t),n0t=t0t.primitives.filter((e)=>e.type==="text"),Qjn=n0t.find((e)=>e.text==="{REF}"),kjn=n0t.find((e)=>e.text==="{VAL}");Qjn.y=0;kjn.y=0;Ljn=t0t,Fjn={paths:{path40:{type:"path",points:[{x:0.14,y:0.04},{x:-0.12,y:-0.09}],color:"primary",fill:!1},path41:{type:"path",points:[{x:-0.12,y:0.18},{x:0.14,y:0.04}],color:"primary",fill:!1},path42:{type:"path",points:[{x:-0.12,y:-0.09},{x:-0.12,y:0.18}],color:"primary",fill:!1},path43:{type:"path",points:[{x:0.14,y:0.18},{x:0.14,y:-0.09}],color:"primary",fill:!1},path44:{type:"path",points:[{x:-0.12,y:0.04},{x:-0.52,y:0.04}],color:"primary",fill:!1},"path44-0":{type:"path",points:[{x:0.52,y:0.04},{x:0.15,y:0.04}],color:"primary",fill:!1},"path43-8":{type:"path",points:[{x:0.14,y:0.18},{x:0.08,y:0.18}],color:"primary",fill:!1},"path43-8-8":{type:"path",points:[{x:0.14,y:-0.09},{x:0.08,y:-0.09}],color:"primary",fill:!1}},texts:{top1:{type:"text",text:"{REF}",x:-0.01,y:0.27},bottom1:{type:"text",text:"{VAL}",x:0,y:-0.27}},refblocks:{left1:{x:-0.52,y:0.04},right1:{x:0.52,y:0.04}},bounds:{minX:-0.55,maxX:0.55,minY:-0.27,maxY:0.27,width:1.09,height:0.55,centerX:0,centerY:0},circles:{}},{paths:Hjn,texts:sut,bounds:Vde,refblocks:aut,circles:Ojn}=Fjn,o0t=jc({primitives:[...Object.values(Hjn),...Object.values(Ojn),{...sut.top1,anchor:"middle_bottom"},{...sut.bottom1,anchor:"middle_top"}],ports:[{...aut.left1,labels:["1"]},{...aut.right1,labels:["2"]}],size:{width:Vde.width,height:Vde.height},center:{x:Vde.centerX,y:Vde.centerY}}),J6e=yo(o0t),zjn=J6e.primitives.find((e)=>e.type==="text"&&e.text==="{REF}"),Gjn=J6e.primitives.find((e)=>e.type==="text"&&e.text==="{VAL}");zjn.anchor="middle_left";Gjn.anchor="middle_right";Yjn=J6e,Vjn={paths:{path11:{type:"path",points:[{x:-0.34,y:0.22},{x:-0.02,y:0.01}],color:"primary",fill:!1},path12:{type:"path",points:[{x:0.23,y:0.13},{x:0.23,y:0.4}],color:"primary",fill:!1},"path12-2":{type:"path",points:[{x:0.23,y:-0.08},{x:0.23,y:-0.35}],color:"primary",fill:!1},"path11-0":{type:"path",points:[{x:-0.01,y:-0.18},{x:-0.01,y:0.23}],color:"primary",fill:!1},"path11-0-3":{type:"path",points:[{x:0.23,y:0.12},{x:-0.01,y:0.12}],color:"primary",fill:!1},"path11-0-9":{type:"path",points:[{x:-0.11,y:0.13},{x:-0.17,y:0.04},{x:-0.06,y:0.03},{x:-0.11,y:0.13}],color:"primary",fill:!0},"path11-0-3-8":{type:"path",points:[{x:0.23,y:-0.08},{x:-0.01,y:-0.08}],color:"primary",fill:!1}},texts:{top1:{type:"text",text:"{REF}",x:-0.2,y:0.39},bottom1:{type:"text",text:"{VAL}",x:-0.03,y:-0.42}},refblocks:{top1:{x:0.23,y:0.4},bottom1:{x:0.23,y:-0.35},left1:{x:-0.34,y:0.22}},bounds:{minX:-0.37,maxX:0.37,minY:-0.42,maxY:0.42,width:0.74,height:0.85,centerX:0,centerY:0},circles:{path1:{type:"circle",x:0.08,y:0.01,radius:0.29,color:"primary",fill:!1}}},{paths:Ujn,texts:cut,bounds:Ude,refblocks:d3e,circles:Wjn}=Vjn,i0t=jc({primitives:[...Object.values(Ujn),...Object.values(Wjn),{...cut.top1,anchor:"middle_left"},{...cut.bottom1,anchor:"middle_right"}],ports:[{...d3e.top1,labels:["1"]},{...d3e.bottom1,labels:["2"]},{...d3e.left1,labels:["3"]}],size:{width:Ude.width,height:Ude.height},center:{x:Ude.centerX,y:Ude.centerY}}),r0t=yo(i0t),s0t=r0t.primitives.filter((e)=>e.type==="text"),Xjn=s0t.find((e)=>e.text==="{REF}");Xjn.y=0.1;a0t=s0t.find((e)=>e.text==="{VAL}");a0t.y=0.1;a0t.x=-0.4;Kjn=r0t,jjn={paths:{capsule_outer:{type:"path",points:[{x:-0.44,y:0.34},{x:-0.45,y:0.39},{x:-0.46,y:0.42},{x:-0.49,y:0.44},{x:-0.52,y:0.46},{x:-0.56,y:0.46},{x:-0.6,y:0.46},{x:-0.63,y:0.44},{x:-0.65,y:0.42},{x:-0.67,y:0.39},{x:-0.68,y:0.34},{x:-0.68,y:-0.34},{x:-0.67,y:-0.39},{x:-0.65,y:-0.42},{x:-0.63,y:-0.44},{x:-0.6,y:-0.45},{x:-0.56,y:-0.46},{x:-0.52,y:-0.45},{x:-0.49,y:-0.44},{x:-0.46,y:-0.42},{x:-0.45,y:-0.39},{x:-0.44,y:-0.34},{x:-0.44,y:0.34}],color:"primary",fill:!1},capsule_inner:{type:"path",points:[{x:-0.51,y:0.28},{x:-0.52,y:0.32},{x:-0.53,y:0.34},{x:-0.56,y:0.35},{x:-0.57,y:0.35},{x:-0.58,y:0.34},{x:-0.6,y:0.32},{x:-0.61,y:0.28},{x:-0.61,y:-0.28},{x:-0.6,y:-0.32},{x:-0.58,y:-0.34},{x:-0.57,y:-0.35},{x:-0.56,y:-0.35},{x:-0.53,y:-0.34},{x:-0.52,y:-0.32},{x:-0.51,y:-0.28},{x:-0.51,y:0.28}],color:"primary",fill:!0},usb_vertical:{type:"path",points:[{x:0.1,y:-0.4},{x:0.1,y:0.4}],color:"primary",fill:!1},usb_left_branch:{type:"path",points:[{x:0.1,y:-0.1},{x:-0.03,y:0.05},{x:-0.03,y:0.15}],color:"primary",fill:!1},usb_right_branch:{type:"path",points:[{x:0.1,y:0},{x:0.25,y:0.15},{x:0.25,y:0.25}],color:"primary",fill:!1},usb_arrow:{type:"path",points:[{x:0.05,y:0.4},{x:0.1,y:0.5},{x:0.15,y:0.4},{x:0.05,y:0.4}],color:"primary",fill:!0},usb_square:{type:"path",points:[{x:0.2,y:0.25},{x:0.3,y:0.25},{x:0.3,y:0.35},{x:0.2,y:0.35},{x:0.2,y:0.25}],color:"primary",fill:!0}},circles:{usb_base:{type:"circle",x:0.1,y:-0.4,radius:0.07,color:"primary",fill:!0},usb_tip_circle:{type:"circle",x:-0.03,y:0.15,radius:0.04,color:"primary",fill:!0}},texts:{top1:{type:"text",text:"{REF}",x:-0.25,y:0.7}},refblocks:{},bounds:{minX:-0.75,maxX:0.35,minY:-0.6,maxY:0.75,width:1.1,height:1.35,centerX:-0.2,centerY:0.08}},qjn=sn(jjn).changeTextAnchor("{REF}","middle_bottom").build(),Jjn={paths:{path11:{type:"path",points:[{x:-0.54,y:0},{x:-0.3,y:0}],color:"primary",fill:!1},path12:{type:"path",points:[{x:0.29,y:0},{x:0.54,y:0}],color:"primary",fill:!1}},texts:{top1:{type:"text",text:"{REF}",x:-0.18,y:-0.36},bottom1:{type:"text",text:"{VAL}",x:-0.01,y:0.43},left1:{type:"text",text:"Var",x:-0.19,y:0.07}},refblocks:{left1:{x:-0.54,y:0},right1:{x:0.54,y:0}},bounds:{minX:-0.53,maxX:0.53,minY:0,maxY:0,width:1.06,height:1,centerX:0,centerY:0},circles:{path1:{type:"circle",x:-0.01,y:-0.01,radius:0.29,color:"primary",fill:!1}}},{paths:$jn,texts:u3e,bounds:Wde,refblocks:lut,circles:Zjn}=Jjn,c0t=jc({primitives:[...Object.values($jn),...Object.values(Zjn),{...u3e.top1,x:0,y:-0.3594553499999995,anchor:"middle_top"},{...u3e.bottom1,x:0,y:0.35,anchor:"middle_bottom"},{...u3e.left1,x:-0.02,y:0.01,fontSize:0.2,anchor:"center"}],ports:[{...lut.left1,labels:["1"]},{...lut.right1,labels:["2"]}],size:{width:Wde.width,height:Wde.height},center:{x:Wde.centerX,y:Wde.centerY}}),eqn=yo(c0t),tqn={paths:{path40:{type:"path",points:[{x:0.08,y:0.04},{x:-0.18,y:-0.09}],color:"primary",fill:!1},path41:{type:"path",points:[{x:-0.18,y:0.18},{x:0.08,y:0.04}],color:"primary",fill:!1},path42:{type:"path",points:[{x:-0.18,y:-0.09},{x:-0.18,y:0.18}],color:"primary",fill:!1},path43:{type:"path",points:[{x:0.09,y:0.17},{x:0.1,y:-0.09}],color:"primary",fill:!1},path44:{type:"path",points:[{x:-0.2,y:0.04},{x:-0.52,y:0.04}],color:"primary",fill:!1},"path44-0":{type:"path",points:[{x:0.52,y:0.04},{x:0.21,y:0.04}],color:"primary",fill:!1},"path43-6":{type:"path",points:[{x:0.19,y:0.17},{x:0.19,y:-0.09}],color:"primary",fill:!1}},texts:{top1:{type:"text",text:"{REF}",x:-0.01,y:0.27},bottom1:{type:"text",text:"{VAL}",x:0,y:-0.27}},refblocks:{left1:{x:-0.52,y:0.04},right1:{x:0.52,y:0.04}},bounds:{minX:-0.55,maxX:0.55,minY:-0.27,maxY:0.27,width:1.09,height:0.55,centerX:0,centerY:0},circles:{}},{paths:nqn,texts:dut,bounds:Xde,refblocks:uut,circles:oqn}=tqn,l0t=jc({primitives:[...Object.values(nqn),...Object.values(oqn),{...dut.top1,anchor:"middle_bottom"},{...dut.bottom1,anchor:"middle_top"}],ports:[{...uut.left1,labels:["1"]},{...uut.right1,labels:["2"]}],size:{width:Xde.width,height:Xde.height},center:{x:Xde.centerX,y:Xde.centerY}}),$6e=yo(l0t),iqn=$6e.primitives.find((e)=>e.type==="text"&&e.text==="{REF}"),rqn=$6e.primitives.find((e)=>e.type==="text"&&e.text==="{VAL}");iqn.anchor="middle_left";rqn.anchor="middle_right";sqn=$6e,aqn={paths:{path5:{type:"path",points:[{x:-0.54,y:0},{x:-0.26,y:0}],color:"primary",fill:!1},path6:{type:"path",points:[{x:0.27,y:0},{x:0.54,y:0}],color:"primary",fill:!1},path7:{type:"path",points:[{x:0.27,y:-0.23},{x:-0.26,y:0.24}],color:"primary",fill:!1},path8:{type:"path",points:[{x:0.38,y:-0.23},{x:0.27,y:-0.23}],color:"primary",fill:!1},path9:{type:"path",points:[{x:0,y:0.14},{x:0.27,y:0.14},{x:0.27,y:-0.13},{x:-0.26,y:-0.13},{x:-0.26,y:0.14},{x:0,y:0.14}],color:"primary",fill:!1}},texts:{top1:{type:"text",text:"{REF}",x:-0.06,y:0.25},bottom1:{type:"text",text:"{VAL}",x:0.01,y:-0.25}},refblocks:{left1:{x:-0.54,y:0},right1:{x:0.54,y:0}},bounds:{minX:-0.57,maxX:0.57,minY:-0.25,maxY:0.25,width:1.13,height:0.5,centerX:0,centerY:0},circles:{}},{paths:cqn,texts:hut,bounds:Kde,refblocks:mut}=aqn,d0t=jc({primitives:[...Object.values(cqn),{...hut.top1,x:0,anchor:"middle_bottom"},{...hut.bottom1,x:0,anchor:"middle_top"}],ports:[{...mut.left1,labels:["1","-"]},{...mut.right1,labels:["2","+"]}],size:{width:Kde.width,height:Kde.height},center:{x:Kde.centerX,y:Kde.centerY}}),u0t=yo(d0t),h0t=u0t.primitives.filter((e)=>e.type==="text"),Z6e=h0t.find((e)=>e.text==="{REF}"),eBe=h0t.find((e)=>e.text==="{VAL}");Z6e.x=0.3;Z6e.y=0.15;Z6e.anchor="middle_left";eBe.x=0.3;eBe.y=-0.15;eBe.anchor="middle_left";lqn=u0t,dqn={paths:{path11:{type:"path",points:[{x:-0.54,y:0},{x:-0.3,y:0}],color:"primary",fill:!1},path12:{type:"path",points:[{x:0.29,y:0},{x:0.54,y:0}],color:"primary",fill:!1}},texts:{top1:{type:"text",text:"{REF}",x:-0.18,y:-0.36},bottom1:{type:"text",text:"{VAL}",x:-0.01,y:0.43},left1:{type:"text",text:"Var",x:0,y:-0.02}},refblocks:{left1:{x:-0.54,y:0},right1:{x:0.54,y:0}},bounds:{minX:-0.53,maxX:0.53,minY:0,maxY:0,width:1.06,height:1,centerX:0,centerY:0},circles:{path1:{type:"circle",x:-0.01,y:-0.01,radius:0.29,color:"primary",fill:!1}}},{paths:uqn,texts:hqn,bounds:jde,refblocks:put,circles:mqn}=dqn,tBe=jc({primitives:[...Object.values(uqn),...Object.values(mqn),{type:"text",text:"{REF}",x:0,y:-0.3594553499999995,anchor:"middle_top"},{type:"text",text:"{VAL}",x:0,y:0.35,anchor:"middle_bottom"},{...hqn.left1,anchor:"center",y:0.02,fontSize:0.2}],ports:[{...put.left1,labels:["1"]},{...put.right1,labels:["2"]}],size:{width:jde.width,height:jde.height},center:{x:jde.centerX,y:jde.centerY}}),{5:pqn,...Aqn}=tBe.primitives;Aut=yo({...tBe,primitives:Object.values(Aqn).filter(_qn)}),gqn={...Aut,primitives:[...Aut.primitives,pqn]},Xue={paths:{"path28-2":{type:"path",points:[{x:0.19,y:0},{x:0,y:0.09}],color:"primary",fill:!1},"path28-2-6":{type:"path",points:[{x:0.19,y:0},{x:0,y:-0.09}],color:"primary",fill:!1},"path29-3":{type:"path",points:[{x:0.19,y:0},{x:-0.23,y:0}],color:"primary",fill:!1}},texts:{right1:{type:"text",text:"{REF}",x:0.25,y:0}},refblocks:{left1:{x:-0.23,y:0}},bounds:{minX:-0.25,maxX:0.25,minY:-0.09,maxY:0.09,width:0.5,height:0.19,centerX:0,centerY:0},circles:{}};fqn=sn(Xue).rotateRightFacingSymbol("down").labelPort("left1",["1"]).changeTextAnchor("{REF}","middle_top").build(),yqn=Kue(fqn,{width:0.24,height:0.23}),xqn=sn(Xue).rotateRightFacingSymbol("left").labelPort("left1",["1"]).changeTextAnchor("{REF}","middle_right").build(),Cqn=Kue(xqn,{width:0.23,height:0.24}),Iqn=sn(Xue).rotateRightFacingSymbol("right").labelPort("left1",["1"]).changeTextAnchor("{REF}","middle_left").build(),bqn=Kue(Iqn,{width:0.23,height:0.24}),Sqn=sn(Xue).rotateRightFacingSymbol("up").labelPort("left1",["1"]).changeTextAnchor("{REF}","middle_bottom").build(),Pqn=Kue(Sqn,{width:0.24,height:0.23}),nBe={paths:{path11:{type:"path",points:[{x:-0.54,y:0.03},{x:-0.3,y:0.03}],color:"primary",fill:!1},"path11-5-5":{type:"path",points:[{x:0.1,y:0.13},{x:0,y:-0.06},{x:-0.11,y:0.13}],color:"primary",fill:!1},path12:{type:"path",points:[{x:0.29,y:0.03},{x:0.54,y:0.03}],color:"primary",fill:!1}},texts:{top1:{type:"text",text:"{REF}",x:-0.02,y:0.4},bottom1:{type:"text",text:"{VAL}",x:-0.01,y:-0.4}},refblocks:{left1:{x:-0.54,y:0.03},right1:{x:0.54,y:0.03}},bounds:{minX:-0.57,maxX:0.57,minY:-0.4,maxY:0.4,width:1.14,height:0.8,centerX:0,centerY:0},circles:{path1:{type:"circle",x:0,y:0.04,radius:0.29,color:"primary",fill:!1}}},{paths:E5r,texts:M5r,bounds:B5r,circles:w5r,refblocks:T5r}=nBe,vqn=sn(nBe).changeTextAnchor("{VAL}","middle_top").labelPort("left1",["1"]).labelPort("right1",["2"]).changeTextAnchor("{REF}","middle_bottom").build(),{paths:Eqn,texts:D5r,bounds:_ut,circles:Mqn,refblocks:gut}=nBe,Bqn=sn({primitives:[...Object.values(Eqn),...Object.values(Mqn),{type:"text",text:"{REF}",x:-0.2,y:0.35},{type:"text",text:"{VAL}",x:0.2,y:0.35}],ports:[{...gut.left1,labels:["left1"]},{...gut.right1,labels:["right1"]}],center:{x:_ut.centerX,y:_ut.centerY}}).rotateRightFacingSymbol("down").labelPort("left1",["1"]).labelPort("right1",["2"]).changeTextAnchor("{REF}","middle_left").changeTextAnchor("{VAL}","middle_left").build(),wqn=Bqn,Tqn={paths:{path11:{type:"path",points:[{x:-0.54,y:0},{x:-0.3,y:0}],color:"primary",fill:!1},path12:{type:"path",points:[{x:0.29,y:0},{x:0.54,y:0}],color:"primary",fill:!1}},texts:{top1:{type:"text",text:"{REF}",x:-0.18,y:-0.36},bottom1:{type:"text",text:"{VAL}",x:-0.01,y:0.43},left1:{type:"text",text:"Wh",x:0,y:-0.02}},refblocks:{left1:{x:-0.54,y:0},right1:{x:0.54,y:0}},bounds:{minX:-0.53,maxX:0.53,minY:0,maxY:0,width:1.06,height:1,centerX:0,centerY:0},circles:{path1:{type:"circle",x:-0.01,y:-0.01,radius:0.29,color:"primary",fill:!1}}},{paths:Dqn,texts:Nqn,bounds:qde,refblocks:fut,circles:Rqn}=Tqn,oBe=jc({primitives:[...Object.values(Dqn),...Object.values(Rqn),{type:"text",text:"{REF}",x:0,y:-0.3594553499999995,anchor:"middle_top"},{type:"text",text:"{VAL}",x:0,y:0.35,anchor:"middle_bottom"},{...Nqn.left1,anchor:"center",y:0.01,fontSize:0.2}],ports:[{...fut.left1,labels:["1"]},{...fut.right1,labels:["2"]}],size:{width:qde.width,height:qde.height},center:{x:qde.centerX,y:qde.centerY}}),{5:Qqn,...kqn}=oBe.primitives;yut=yo({...oBe,primitives:Object.values(kqn).filter(Lqn)}),Fqn={...yut,primitives:[...yut.primitives,Qqn]},Hqn={paths:{path11:{type:"path",points:[{x:-0.54,y:0},{x:-0.3,y:0}],color:"primary",fill:!1},path12:{type:"path",points:[{x:0.29,y:0},{x:0.54,y:0}],color:"primary",fill:!1}},texts:{top1:{type:"text",text:"{REF}",x:-0.18,y:-0.36},bottom1:{type:"text",text:"{VAL}",x:-0.01,y:0.43},left1:{type:"text",text:"W",x:0,y:-0.02}},refblocks:{left1:{x:-0.54,y:0},right1:{x:0.54,y:0}},bounds:{minX:-0.53,maxX:0.53,minY:0,maxY:0,width:1.06,height:1,centerX:0,centerY:0},circles:{path1:{type:"circle",x:-0.01,y:-0.01,radius:0.29,color:"primary",fill:!1}}},{paths:Oqn,texts:zqn,bounds:Jde,refblocks:xut,circles:Gqn}=Hqn,iBe=jc({primitives:[...Object.values(Oqn),...Object.values(Gqn),{type:"text",text:"{REF}",x:0,y:-0.3594553499999995,anchor:"middle_top"},{type:"text",text:"{VAL}",x:0,y:0.35,anchor:"middle_bottom"},{...zqn.left1,anchor:"center",y:0.01,fontSize:0.3}],ports:[{...xut.left1,labels:["1"]},{...xut.right1,labels:["2"]}],size:{width:Jde.width,height:Jde.height},center:{x:Jde.centerX,y:Jde.centerY}}),{5:Yqn,...Vqn}=iBe.primitives;Cut=yo({...iBe,primitives:Object.values(Vqn).filter(Uqn)}),Wqn={...Cut,primitives:[...Cut.primitives,Yqn]},m0t={paths:{path40:{type:"path",points:[{x:0.14458890000000002,y:0.04403629999999992},{x:-0.1199943999999995,y:-0.08825540000000043}],color:"primary",fill:!1},path41:{type:"path",points:[{x:-0.1199943999999995,y:0.17632800000000026},{x:0.14458890000000002,y:0.04403629999999992}],color:"primary",fill:!1},path42:{type:"path",points:[{x:-0.1199943999999995,y:-0.0882553999999991},{x:-0.1199943999999995,y:0.17632800000000026}],color:"primary",fill:!1},path43:{type:"path",points:[{x:0.14458890000000002,y:0.17632800000000026},{x:0.14458890000000002,y:-0.0882553999999991}],color:"primary",fill:!1},path44:{type:"path",points:[{x:-0.12219909999999956,y:0.04403629999999992},{x:-0.5168693999999996,y:0.04403629999999992}],color:"primary",fill:!1},"path44-0":{type:"path",points:[{x:0.5233797000000002,y:0.043951100000000354},{x:0.1496715999999998,y:0.043951100000000354}],color:"primary",fill:!1},"path43-8":{type:"path",points:[{x:0.14458890000000002,y:0.17632800000000026},{x:0.21069330000000042,y:0.17632800000000026}],color:"primary",fill:!1},"path43-8-8":{type:"path",points:[{x:0.14458890000000002,y:-0.0882553999999991},{x:0.07848449999999962,y:-0.0882553999999991}],color:"primary",fill:!1}},texts:{top1:{type:"text",text:"{REF}",x:-0.0050250999999996715,y:0.27384530000000007},bottom1:{type:"text",text:"{VAL}",x:-0.00011179999999977319,y:-0.27384529999999985}},refblocks:{left1:{x:-0.5191471000000001,y:0.044920700000000924},right1:{x:0.5191470999999999,y:0.04389609999999999}},bounds:{minX:-0.5473055410000001,maxX:0.5473055409999998,minY:-0.27384529999999985,maxY:0.27384530000000007,width:1.094611082,height:0.5476905999999999,centerX:-0.00000000000000011102230246251565,centerY:0.00000000000000011102230246251565},circles:{}},Xqn=sn(m0t).rotateRightFacingSymbol("right").labelPort("left1",["1"]).labelPort("right1",["2"]).changeTextAnchor("{REF}","middle_left").changeTextAnchor("{VAL}","middle_left").build(),jue={paths:{"anode-lead":{type:"path",points:[{x:-0.25,y:0},{x:-0.11999999999999988,y:0}],color:"primary",fill:!1},body:{type:"path",points:[{x:-0.11999999999999988,y:0.11999999999999988},{x:0.1200000000000001,y:0},{x:-0.11999999999999988,y:-0.1200000000000001},{x:-0.11999999999999988,y:0.11999999999999988}],color:"primary",fill:!1},"cathode-bar":{type:"path",points:[{x:0.16999999999999993,y:0.11999999999999988},{x:0.1200000000000001,y:0.11999999999999988},{x:0.1200000000000001,y:-0.1200000000000001},{x:0.07000000000000006,y:-0.1200000000000001}],color:"primary",fill:!1},"cathode-lead":{type:"path",points:[{x:0.1200000000000001,y:0},{x:0.25,y:0}],color:"primary",fill:!1}},texts:{top1:{type:"text",text:"{REF}",x:0,y:0.25},bottom1:{type:"text",text:"{VAL}",x:0,y:-0.25}},refblocks:{left1:{x:-0.25,y:0},right1:{x:0.25,y:0}},bounds:{minX:-0.25,maxX:0.25,minY:-0.25,maxY:0.25,width:0.5,height:0.5,centerX:0,centerY:0},circles:{}},Kqn=fr(jue,{kind:"diode",orientation:"down",pin1Labels:["1","pos","anode"],pin2Labels:["2","neg","cathode"]}),jqn=fr(jue,{kind:"diode",orientation:"left",pin1Labels:["1","pos","anode"],pin2Labels:["2","neg","cathode"]}),qqn=fr(jue,{kind:"diode",orientation:"right",pin1Labels:["1","pos","anode"],pin2Labels:["2","neg","cathode"]}),Jqn=fr(jue,{kind:"diode",orientation:"up",pin1Labels:["1","pos","anode"],pin2Labels:["2","neg","cathode"]}),{paths:$qn,bounds:$de,refblocks:Iut,circles:Zqn}=m0t,eJn=sn({primitives:[...Object.values($qn),...Object.values(Zqn),{type:"text",text:"{REF}",x:0.15,y:-0.2294553499999995},{type:"text",text:"{VAL}",x:-0.15,y:-0.2294553499999995}],ports:[{...Iut.left1,labels:["1"]},{...Iut.right1,labels:["2"]}],size:{width:$de.width,height:$de.height},center:{x:$de.centerX,y:$de.centerY}}).rotateRightFacingSymbol("up").labelPort("left1",["1"]).labelPort("right1",["2"]).changeTextAnchor("{REF}","middle_left").changeTextAnchor("{VAL}","middle_left").build(),que={paths:{"anode-lead":{type:"path",points:[{x:-0.17499999999999982,y:0},{x:-0.09999999999999987,y:0}],color:"primary",fill:!1},body:{type:"path",points:[{x:-0.09999999999999987,y:0.09999999999999987},{x:0.10000000000000009,y:0},{x:-0.09999999999999987,y:-0.10000000000000009},{x:-0.09999999999999987,y:0.09999999999999987}],color:"primary",fill:!1},"cathode-bar":{type:"path",points:[{x:0.15000000000000013,y:0.09999999999999987},{x:0.10000000000000009,y:0.09999999999999987},{x:0.10000000000000009,y:-0.10000000000000009},{x:0.050000000000000044,y:-0.10000000000000009}],color:"primary",fill:!1},"cathode-lead":{type:"path",points:[{x:0.10000000000000009,y:0},{x:0.17500000000000004,y:0}],color:"primary",fill:!1}},texts:{top1:{type:"text",text:"{REF}",x:0,y:0.25},bottom1:{type:"text",text:"{VAL}",x:0,y:-0.25}},refblocks:{left1:{x:-0.17499999999999982,y:0},right1:{x:0.17500000000000004,y:0}},bounds:{minX:-0.17499999999999982,maxX:0.17500000000000004,minY:-0.25,maxY:0.25,width:0.34999999999999987,height:0.5,centerX:0.00000000000000011102230246251565,centerY:0},circles:{}},tJn=fr(que,{kind:"diode",orientation:"down",pin1Labels:["1","pos","anode"],pin2Labels:["2","neg","cathode"]}),nJn=fr(que,{kind:"diode",orientation:"left",pin1Labels:["1","pos","anode"],pin2Labels:["2","neg","cathode"]}),oJn=fr(que,{kind:"diode",orientation:"right",pin1Labels:["1","pos","anode"],pin2Labels:["2","neg","cathode"]}),iJn=fr(que,{kind:"diode",orientation:"up",pin1Labels:["1","pos","anode"],pin2Labels:["2","neg","cathode"]}),ra={ac_voltmeter_down:BFn,ac_voltmeter_horz:DFn,ac_voltmeter_left:QFn,ac_voltmeter_right:FFn,ac_voltmeter_up:zFn,ac_voltmeter_vert:VFn,and_gate_down:UFn,and_gate_left:WFn,and_gate_right:but,and_gate_up:XFn,avalanche_diode_down:qFn,avalanche_diode_horz:JFn,avalanche_diode_left:eHn,avalanche_diode_right:tHn,avalanche_diode_sm_down:oHn,avalanche_diode_sm_left:iHn,avalanche_diode_sm_right:rHn,avalanche_diode_sm_up:sHn,avalanche_diode_up:lHn,avalanche_diode_vert:hHn,avalanche_diode_xs_down:mHn,avalanche_diode_xs_left:pHn,avalanche_diode_xs_right:AHn,avalanche_diode_xs_up:_Hn,backward_diode_down:yHn,backward_diode_left:Sut,backward_diode_right:SHn,backward_diode_up:PHn,battery_down:BHn,battery_horz:Put,battery_left:QHn,battery_right:HHn,battery_up:YHn,battery_vert:VHn,boxresistor_down:KHn,boxresistor_left:$Hn,boxresistor_right:nOn,boxresistor_sm_down:oOn,boxresistor_sm_left:iOn,boxresistor_sm_right:rOn,boxresistor_sm_up:sOn,boxresistor_small_down:lOn,boxresistor_small_left:hOn,boxresistor_small_right:AOn,boxresistor_small_up:fOn,boxresistor_up:IOn,boxresistor_xs_down:bOn,boxresistor_xs_left:SOn,boxresistor_xs_right:POn,boxresistor_xs_up:vOn,bridged_ground_down:BOn,bridged_ground_left:DOn,bridged_ground_right:vut,bridged_ground_up:QOn,capacitor_down:HOn,capacitor_left:zOn,capacitor_polarized_down:GOn,capacitor_polarized_left:YOn,capacitor_polarized_right:VOn,capacitor_polarized_up:UOn,capacitor_right:XOn,capacitor_sm_down:KOn,capacitor_sm_left:jOn,capacitor_sm_right:qOn,capacitor_sm_up:JOn,capacitor_up:tzn,capacitor_xs_down:nzn,capacitor_xs_left:ozn,capacitor_xs_right:izn,capacitor_xs_up:rzn,constant_current_diode_down:czn,constant_current_diode_horz:lzn,constant_current_diode_left:hzn,constant_current_diode_right:mzn,constant_current_diode_up:_zn,constant_current_diode_vert:yzn,crystal_4pin_down:Izn,crystal_4pin_left:bzn,crystal_4pin_right:Szn,crystal_4pin_up:Ezn,crystal_down:wzn,crystal_left:Tzn,crystal_right:Dzn,crystal_up:Qzn,current_source_down:Lzn,current_source_left:Hzn,current_source_right:zzn,current_source_up:Yzn,darlington_pair_transistor_down:Vzn,darlington_pair_transistor_horz:Uzn,darlington_pair_transistor_left:Wzn,darlington_pair_transistor_right:Xzn,darlington_pair_transistor_up:Kzn,darlington_pair_transistor_vert:jzn,dc_ammeter_down:Wlt,dc_ammeter_horz:hJ,dc_ammeter_left:$zn,dc_ammeter_right:Zzn,dc_ammeter_up:eGn,dc_ammeter_vert:Wlt,dc_voltmeter_down:oGn,dc_voltmeter_horz:sGn,dc_voltmeter_left:lGn,dc_voltmeter_right:hGn,dc_voltmeter_up:AGn,dc_voltmeter_vert:fGn,diac_down:yGn,diac_horz:xGn,diac_left:CGn,diac_right:IGn,diac_up:bGn,diac_vert:SGn,digital_ground_down:EGn,digital_ground_left:wGn,digital_ground_right:NGn,digital_ground_up:kGn,diode_down:FGn,diode_left:HGn,diode_right:_ue,diode_sm_down:OGn,diode_sm_left:zGn,diode_sm_right:GGn,diode_sm_up:YGn,diode_up:VGn,diode_xs_down:UGn,diode_xs_left:WGn,diode_xs_right:XGn,diode_xs_up:KGn,dpdt_normally_closed_switch_down:qGn,dpdt_normally_closed_switch_left:JGn,dpdt_normally_closed_switch_right:yue,dpdt_normally_closed_switch_up:$Gn,dpdt_switch_down:eYn,dpdt_switch_left:tYn,dpdt_switch_right:xue,dpdt_switch_up:nYn,dpst_normally_closed_switch_down:iYn,dpst_normally_closed_switch_left:rYn,dpst_normally_closed_switch_right:Cue,dpst_normally_closed_switch_up:sYn,dpst_switch_down:cYn,dpst_switch_left:lYn,dpst_switch_right:Iue,dpst_switch_up:dYn,dual_series_schottky_diode_down:hYn,dual_series_schottky_diode_left:mYn,dual_series_schottky_diode_right:Eut,dual_series_schottky_diode_up:pYn,ferrite_bead_down:gYn,ferrite_bead_left:fYn,ferrite_bead_right:wut,ferrite_bead_up:But,filled_diode_down:CYn,filled_diode_horz:SYn,filled_diode_left:EYn,filled_diode_right:wYn,filled_diode_up:NYn,filled_diode_vert:kYn,frequency_meter_horz:a4e,frequency_meter_vert:VYn,fuse_horz:Tut,fuse_vert:KYn,ground_down:jYn,ground_horz:qYn,ground_left:JYn,ground_right:$Yn,ground_up:ZYn,ground_vert:eVn,gunn_diode_horz:tVn,gunn_diode_vert:nVn,icled_down:iVn,icled_left:rVn,icled_right:bue,icled_up:sVn,igbt_transistor_horz:Dut,igbt_transistor_vert:cVn,illuminated_push_button_normally_open_horz:Rut,illuminated_push_button_normally_open_vert:dVn,inductor_down:uVn,inductor_left:hVn,inductor_right:mVn,inductor_up:pVn,laser_diode_down:AVn,laser_diode_left:_Vn,laser_diode_right:Pue,laser_diode_up:gVn,led_down:CVn,led_left:IVn,led_right:P4e,led_sm_down:bVn,led_sm_left:SVn,led_sm_right:PVn,led_sm_up:vVn,led_up:Fut,led_xs_down:EVn,led_xs_left:MVn,led_xs_right:BVn,led_xs_up:wVn,light_dependent_resistor_horz:Hut,light_dependent_resistor_vert:RVn,mosfet_depletion_normally_on_horz:Gut,mosfet_depletion_normally_on_vert:LVn,mushroom_head_normally_open_momentary_horz:Vut,mushroom_head_normally_open_momentary_vert:zVn,n_channel_d_mosfet_transistor_gate_bottom_drain_left:WVn,n_channel_d_mosfet_transistor_gate_bottom_drain_right:XVn,n_channel_d_mosfet_transistor_gate_left_drain_bottom:KVn,n_channel_d_mosfet_transistor_gate_left_drain_top:jVn,n_channel_d_mosfet_transistor_gate_right_drain_bottom:qVn,n_channel_d_mosfet_transistor_gate_right_drain_top:JVn,n_channel_d_mosfet_transistor_gate_top_drain_left:$Vn,n_channel_d_mosfet_transistor_gate_top_drain_right:ZVn,n_channel_d_mosfet_transistor_horz:Fv,n_channel_d_mosfet_transistor_vert:kM,n_channel_e_mosfet_transistor_gate_bottom_drain_left:oUn,n_channel_e_mosfet_transistor_gate_bottom_drain_right:iUn,n_channel_e_mosfet_transistor_gate_left_drain_bottom:rUn,n_channel_e_mosfet_transistor_gate_left_drain_top:sUn,n_channel_e_mosfet_transistor_gate_right_drain_bottom:aUn,n_channel_e_mosfet_transistor_gate_right_drain_top:cUn,n_channel_e_mosfet_transistor_gate_top_drain_left:lUn,n_channel_e_mosfet_transistor_gate_top_drain_right:dUn,n_channel_e_mosfet_transistor_horz:Hv,n_channel_e_mosfet_transistor_vert:LM,njfet_transistor_horz:qut,njfet_transistor_vert:pUn,not_connected_down:fUn,not_connected_left:yUn,not_connected_right:Mue,not_connected_up:xUn,npn_bipolar_transistor_down:bUn,npn_bipolar_transistor_horz:vUn,npn_bipolar_transistor_left:BUn,npn_bipolar_transistor_right:DUn,npn_bipolar_transistor_up:QUn,npn_bipolar_transistor_vert:FUn,opamp_no_power_down:OUn,opamp_no_power_left:zUn,opamp_no_power_right:Bue,opamp_no_power_up:GUn,opamp_with_power_down:VUn,opamp_with_power_left:UUn,opamp_with_power_right:wue,opamp_with_power_up:WUn,p_channel_d_mosfet_transistor_gate_bottom_drain_left:qUn,p_channel_d_mosfet_transistor_gate_bottom_drain_right:JUn,p_channel_d_mosfet_transistor_gate_left_drain_bottom:$Un,p_channel_d_mosfet_transistor_gate_left_drain_top:ZUn,p_channel_d_mosfet_transistor_gate_right_drain_bottom:eWn,p_channel_d_mosfet_transistor_gate_right_drain_top:tWn,p_channel_d_mosfet_transistor_gate_top_drain_left:nWn,p_channel_d_mosfet_transistor_gate_top_drain_right:oWn,p_channel_d_mosfet_transistor_horz:Ov,p_channel_d_mosfet_transistor_vert:FM,p_channel_e_mosfet_transistor_gate_bottom_drain_left:aWn,p_channel_e_mosfet_transistor_gate_bottom_drain_right:cWn,p_channel_e_mosfet_transistor_gate_left_drain_bottom:lWn,p_channel_e_mosfet_transistor_gate_left_drain_top:dWn,p_channel_e_mosfet_transistor_gate_right_drain_bottom:uWn,p_channel_e_mosfet_transistor_gate_right_drain_top:hWn,p_channel_e_mosfet_transistor_gate_top_drain_left:mWn,p_channel_e_mosfet_transistor_gate_top_drain_right:pWn,p_channel_e_mosfet_transistor_horz:zv,p_channel_e_mosfet_transistor_vert:HM,photodiode_horz:oht,photodiode_vert:gWn,phototransistor_optocoupler_down:fWn,phototransistor_optocoupler_left:yWn,phototransistor_optocoupler_right:sht,phototransistor_optocoupler_up:xWn,pjfet_transistor_horz:aht,pjfet_transistor_vert:SWn,pnp_bipolar_transistor_down:EWn,pnp_bipolar_transistor_horz:MWn,pnp_bipolar_transistor_left:TWn,pnp_bipolar_transistor_right:RWn,pnp_bipolar_transistor_up:LWn,pnp_bipolar_transistor_vert:OWn,potentiometer_horz:dht,potentiometer_vert:VWn,potentiometer2_down:XWn,potentiometer2_left:KWn,potentiometer2_right:Tue,potentiometer2_up:jWn,potentiometer3_down:$Wn,potentiometer3_left:tXn,potentiometer3_right:nXn,potentiometer3_up:rXn,power_factor_meter_horz:uht,power_factor_meter_vert:lXn,push_button_normally_closed_momentary_horz:mht,push_button_normally_closed_momentary_vert:mXn,push_button_normally_open_momentary_down:gXn,push_button_normally_open_momentary_horz:CXn,push_button_normally_open_momentary_left:IXn,push_button_normally_open_momentary_right:pJ,push_button_normally_open_momentary_up:bXn,push_button_normally_open_momentary_vert:SXn,rail_down:MXn,rail_left:DXn,rail_right:kXn,rail_up:HXn,rectifier_diode_horz:Aht,rectifier_diode_vert:UXn,resistor_down:KXn,resistor_left:JXn,resistor_right:eKn,resistor_sm_down:tKn,resistor_sm_left:nKn,resistor_sm_right:oKn,resistor_sm_up:iKn,resistor_up:aKn,resistor_xs_down:cKn,resistor_xs_left:lKn,resistor_xs_right:dKn,resistor_xs_up:uKn,resonator_down:pKn,resonator_horz:ght,resonator_left:gKn,resonator_right:Lue,resonator_up:fKn,resonator_vert:yKn,schmitt_trigger_inverter_down:xKn,schmitt_trigger_inverter_left:CKn,schmitt_trigger_inverter_right:fht,schmitt_trigger_inverter_up:IKn,schottky_diode_down:SKn,schottky_diode_left:PKn,schottky_diode_right:Fue,schottky_diode_up:vKn,silicon_controlled_rectifier_horz:xht,silicon_controlled_rectifier_vert:MKn,solderjumper2_bridged12_down:BKn,solderjumper2_bridged12_left:wKn,solderjumper2_bridged12_right:HMe,solderjumper2_bridged12_up:TKn,solderjumper2_down:DKn,solderjumper2_left:NKn,solderjumper2_right:GMe,solderjumper2_up:RKn,solderjumper3_bridged12_down:QKn,solderjumper3_bridged12_left:kKn,solderjumper3_bridged12_right:UMe,solderjumper3_bridged12_up:LKn,solderjumper3_bridged123_down:FKn,solderjumper3_bridged123_left:HKn,solderjumper3_bridged123_right:KMe,solderjumper3_bridged123_up:OKn,solderjumper3_bridged23_down:zKn,solderjumper3_bridged23_left:GKn,solderjumper3_bridged23_right:JMe,solderjumper3_bridged23_up:YKn,solderjumper3_down:VKn,solderjumper3_left:UKn,solderjumper3_right:e6e,solderjumper3_up:WKn,spdt_normally_closed_switch_down:KKn,spdt_normally_closed_switch_left:jKn,spdt_normally_closed_switch_right:Hue,spdt_normally_closed_switch_up:qKn,spdt_switch_down:$Kn,spdt_switch_left:ZKn,spdt_switch_right:Oue,spdt_switch_up:ejn,speaker_down:tjn,speaker_horz:njn,speaker_left:ojn,speaker_right:ijn,speaker_up:rjn,speaker_vert:sjn,spst_normally_closed_switch_down:ajn,spst_normally_closed_switch_left:cjn,spst_normally_closed_switch_right:Gue,spst_normally_closed_switch_up:ljn,spst_switch_down:djn,spst_switch_left:ujn,spst_switch_right:Vue,spst_switch_up:hjn,square_wave_down:mjn,square_wave_left:pjn,square_wave_right:Ajn,square_wave_up:_jn,step_recovery_diode_horz:Kht,step_recovery_diode_vert:gjn,tachometer_horz:H6e,tachometer_vert:Pjn,testpoint_down:vjn,testpoint_left:Ejn,testpoint_right:Wue,testpoint_up:Mjn,tilted_ground_down:wjn,tilted_ground_left:Tjn,tilted_ground_right:O6e,tilted_ground_up:Jht,transformer_4_winding_down:Djn,transformer_4_winding_left:Njn,transformer_4_winding_right:$ht,transformer_4_winding_up:Rjn,triac_horz:e0t,triac_vert:Ljn,tunnel_diode_horz:o0t,tunnel_diode_vert:Yjn,unijunction_transistor_horz:i0t,unijunction_transistor_vert:Kjn,usbc:qjn,var_meter_horz:c0t,var_meter_vert:eqn,varactor_diode_horz:l0t,varactor_diode_vert:sqn,varistor_horz:d0t,varistor_vert:lqn,varmeter_horz:tBe,varmeter_vert:gqn,vcc_down:yqn,vcc_left:Cqn,vcc_right:bqn,vcc_up:Pqn,volt_meter_horz:vqn,volt_meter_vert:wqn,watt_hour_meter_horz:oBe,watt_hour_meter_vert:Fqn,wattmeter_horz:iBe,wattmeter_vert:Wqn,zener_diode_horz:Xqn,zener_diode_sm_down:Kqn,zener_diode_sm_left:jqn,zener_diode_sm_right:qqn,zener_diode_sm_up:Jqn,zener_diode_vert:eJn,zener_diode_xs_down:tJn,zener_diode_xs_left:nJn,zener_diode_xs_right:oJn,zener_diode_xs_up:iJn},N5r=Object.fromEntries(Object.keys(ra).map((e)=>[e,e]))});var Ept={};sce(Ept,{CIRCUIT_TO_SVG_VERSION:()=>P7,circuitJsonToPcbSvg:()=>HZn,circuitJsonToSchematicSvg:()=>Mto,colorMap:()=>fd,convertCircuitJsonToAssemblySvg:()=>$Zn,convertCircuitJsonToPcbSimulationSvg:()=>zZn,convertCircuitJsonToPcbSvg:()=>NJ,convertCircuitJsonToPinoutSvg:()=>xeo,convertCircuitJsonToSchematicSimulationSvg:()=>Dno,convertCircuitJsonToSchematicSvg:()=>iQ,convertCircuitJsonToSimulationGraphSvg:()=>Ppt,convertCircuitJsonToSolderPasteMask:()=>Qno,convertCircuitJsonToStackedSchematicSheetsSvg:()=>Rto,createErrorTextOverlay:()=>pG,createSvgObjectsForSchComponentPortHovers:()=>ept,getSoftwareUsedString:()=>S7,isSimulationAnalysisResult:()=>VBe,isSimulationCurrentProbe:()=>bpt,isSimulationExperiment:()=>UBe,isSimulationOscilloscopeTrace:()=>Spt,isSimulationTransientCurrentGraph:()=>gno,isSimulationTransientVoltageGraph:()=>fno,isSimulationVoltageProbe:()=>Ipt});function uhe(e,t){return e.flatMap((n)=>{if(n.children.length){let i=uhe(n.children,t);return i.length?[{...n,children:i}]:[]}return n.attributes["data-pcb-layer"]==="drill"===t?[n]:[]})}function umt(e){let t={...e.attributes};for(let n of["opacity","fill-opacity","stroke-opacity"])if(n in t)t[n]="1";return{...e,attributes:t,children:e.children.map(umt)}}function PBe(e){return{...e,attributes:{...e.attributes,...e.attributes.fill&&e.attributes.fill!=="none"?{fill:"black"}:{},...e.attributes.stroke&&e.attributes.stroke!=="none"?{stroke:"black"}:{}},children:e.children.map(PBe)}}function sJn({circuitJson:e,ctx:t,selectedIds:n,hiddenOpacity:o,width:i,height:r,create:s}){let a=new Set(n),c=(f)=>f[`${f.type}_id`],l=new Set(["top","bottom"]);for(let f of e){if(f.type==="pcb_board")for(let y=1;y<=(f.num_layers??2)-2;y++)l.add(`inner${y}`);if("layer"in f&&typeof f.layer==="string"&&/^(top|bottom|inner\d+)$/.test(f.layer))l.add(f.layer);if("layers"in f&&Array.isArray(f.layers)){for(let y of f.layers)if(/^(top|bottom|inner\d+)$/.test(y))l.add(y)}if(f.type==="pcb_trace"){for(let y of f.route)if(y.route_type==="wire")l.add(y.layer)}}let d=t.layer??"top",u=(f)=>f===d?100:f==="bottom"?0:f==="top"?50:40-Number(f.slice(5)),h=[...l].sort((f,y)=>u(f)-u(y)),A={...t,showSolderMask:!1,showSolderPaste:!1,showPinNumbers:!1,showAnchorOffsets:!1,circuitJson:e.filter((f)=>f.type!=="pcb_copper_pour")},m=[],p=[],g=[],_=[];for(let f of h){let y={...A,layer:f,colorMap:{...t.colorMap,copper:{...t.colorMap.copper,top:t.colorMap.copper[f]}}},x=[],C=[],I=[];for(let E of e){if(E.type==="pcb_hole"||E.type==="pcb_cutout"){I.push(...s(E,y).map(PBe));continue}if(!rJn.has(E.type))continue;if("layer"in E&&E.layer!==f)continue;if((E.type==="pcb_via"||E.type==="pcb_plated_hole")&&!E.layers.includes(f))continue;let B=E.type==="pcb_plated_hole"?{...E,layers:[f]}:E,w=B.type==="pcb_trace"?{...B,route:B.route.map((N)=>{let{is_inside_copper_pour:F,copper_pour_id:H,...z}=N;return z})}:B,T=s(w,y).map(umt),Q=uhe(T,!0);if(I.push(...Q.map(PBe)),x.push(...uhe(T,!1)),a.has(c(E))){if(C.push(...uhe(T,!1)),f===h.filter((N)=>!("layers"in E)||!Array.isArray(E.layers)||E.layers.includes(N)).at(-1))g.push(...Q)}}let b=`xray-holes-${f}`;_.push({name:"mask",type:"element",value:"",attributes:{id:b,maskUnits:"userSpaceOnUse",x:"0",y:"0",width:String(i),height:String(r)},children:[{name:"rect",type:"element",value:"",children:[],attributes:{x:"0",y:"0",width:String(i),height:String(r),fill:"white"}},...I]});let P={"data-pcb-layer":f,mask:`url(#${b})`};m.push(AJ({...P,opacity:String(o)},x)),p.push(AJ(P,C))}return[{name:"defs",type:"element",value:"",attributes:{},children:_},AJ({"data-x-ray":"background"},m),AJ({"data-x-ray":"selected"},p),AJ({"data-x-ray":"drills"},g)]}function aJn(e,t){let{startIsInsideCopperPour:n,endIsInsideCopperPour:o,start:i,end:r}=e;if(n===o)return e;let s=oQ(i),a=oQ(r),c=lJn(t).flatMap((A)=>uJn(A,s,a));if(c.length===0)return e;let l=o?Math.min(...c):Math.max(...c),d=mmt(s,a,l),u=cJn(e.startWidth,e.endWidth,l),h={...e,start:n?d:i,end:o?d:r,startWidth:n?u:e.startWidth,endWidth:o?u:e.endWidth};return mJn(h.start,h.end)?null:h}function cJn(e,t,n){return e+(t-e)*n}function lJn(e){switch(e.shape){case"rect":return[dJn(e)];case"polygon":return[e.points.map(oQ)];case"brep":return[e.brep_shape.outer_ring.vertices.map(A0t),...e.brep_shape.inner_rings.map((t)=>t.vertices.map(A0t))]}}function dJn(e){let t=oQ(e.center),n=e.width/2,o=e.height/2,i=(e.rotation??0)*Math.PI/180,r=Math.cos(i),s=Math.sin(i);return[{x:-n,y:-o},{x:n,y:-o},{x:n,y:o},{x:-n,y:o}].map((a)=>({x:t.x+a.x*r-a.y*s,y:t.y+a.x*s+a.y*r}))}function uJn(e,t,n){let o=[];for(let i=0;i<e.length;i++){let r=e[i],s=e[(i+1)%e.length];if(!r||!s)continue;if(r.bulge){o.push(...hJn(t,n,r,s,r.bulge));continue}let a=hmt(t,n,r,s);if(a!==null)o.push(a)}return o}function hJn(e,t,n,o,i){let r=o.x-n.x,s=o.y-n.y,a=Math.hypot(r,s);if(a<hy||Math.abs(i)<hy){let x=hmt(e,t,n,o);return x===null?[]:[x]}let c=a*(1-i**2)/(4*i),l={x:(n.x+o.x)/2-s/a*c,y:(n.y+o.y)/2+r/a*c},d=Math.atan2(n.y-l.y,n.x-l.x),u=4*Math.atan(i),h=Math.hypot(n.x-l.x,n.y-l.y),A={x:t.x-e.x,y:t.y-e.y},m={x:e.x-l.x,y:e.y-l.y},p=sBe(A,A);if(p<hy)return[];let g=2*sBe(m,A),_=sBe(m,m)-h**2,f=g**2-4*p*_;if(f<-hy)return[];let y=Math.sqrt(Math.max(0,f));return[(-g-y)/(2*p),(-g+y)/(2*p)].filter((x)=>{if(x<-hy||x>1+hy)return!1;let C=mmt(e,t,x),I=Math.atan2(C.y-l.y,C.x-l.x);return(u>0?p0t(I-d):p0t(d-I))<=Math.abs(u)+hy})}function hmt(e,t,n,o){let i={x:t.x-e.x,y:t.y-e.y},r={x:o.x-n.x,y:o.y-n.y},s=rBe(i,r);if(Math.abs(s)<hy)return null;let a={x:n.x-e.x,y:n.y-e.y},c=rBe(a,r)/s,l=rBe(a,i)/s;if(c<-hy||c>1+hy||l<-hy||l>1+hy)return null;return Math.min(1,Math.max(0,c))}function rBe(e,t){return e.x*t.y-e.y*t.x}function sBe(e,t){return e.x*t.x+e.y*t.y}function p0t(e){let t=2*Math.PI,n=e%t;return n<0?n+t:n}function mmt(e,t,n){return{x:e.x+(t.x-e.x)*n,y:e.y+(t.y-e.y)*n}}function oQ(e){return{x:ze.parse(e.x),y:ze.parse(e.y)}}function A0t(e){return{...oQ(e),bulge:e.bulge}}function mJn(e,t){let n=oQ(e),o=oQ(t);return Math.abs(n.x-o.x)<hy&&Math.abs(n.y-o.y)<hy}function QBe(e){if(!e||typeof e!=="object")return!1;return"route_type"in e&&e.route_type==="wire"&&(("start_width"in e)||("end_width"in e)||("width_interpolation_mode"in e))}function pmt(e){let t=[];for(let n=0;n<e.length-1;n++){let o=e[n];if(!QBe(o))continue;let i=e[n+1];if(!i)continue;let r=i.route_type==="through_pad"?i.start:{x:i.x,y:i.y},s=i.route_type==="via"?i.from_layer:i.route_type==="through_pad"?i.start_layer:i.layer;if(!r||s!==o.layer||o.width!==o.start_width)continue;let a={start:{x:o.x,y:o.y},end:r,start_width:o.start_width,end_width:o.end_width,width_interpolation_mode:o.width_interpolation_mode,layer:o.layer,is_inside_copper_pour:Boolean(o.is_inside_copper_pour&&i.is_inside_copper_pour)};if(_mt(a))t.push(a)}return t}function Amt(e){let{start:t,end:n,start_width:o,end_width:i}=e,r=n.x-t.x,s=n.y-t.y,a=Math.hypot(r,s);if(!_mt(e))return[];let c=Math.abs(i-o),l=e.width_interpolation_mode==="linear"?1:Math.max(1,Math.ceil(Math.sqrt(c/(0.001+c*0.000001)*0.375))),d=-s/a,u=r/a,h=[],A=[];for(let m=0;m<=l;m++){let p=m/l,g=o<=i?p:1-p,f=(e.width_interpolation_mode==="quadratic"?Math.min(o,i)+c*g*g:o+(i-o)*p)/2,y=t.x+r*p,x=t.y+s*p;h.push({x:y+d*f,y:x+u*f}),A.push({x:y-d*f,y:x-u*f})}return[...h,...A.reverse()]}function _mt(e){let{start:t,end:n,start_width:o,end_width:i}=e,r=Math.hypot(n.x-t.x,n.y-t.y);if(![t.x,t.y,n.x,n.y,r,o,i].every(Number.isFinite)||r<=0||o<=0||i<=0)return!1;if(e.width_interpolation_mode!=="linear"&&e.width_interpolation_mode!=="quadratic")return!1;return!0}function pJn(e){switch(e.route_type){case"through_pad":return[e.start,e.end];default:return[e]}}function AJn(e){let t=[];for(let n=0;n<e.length-1;n++){let o=e[n],i=e[n+1];if(!o||!i)continue;if(QBe(o))continue;let r=o.route_type==="through_pad"?o.end:o,s=i.route_type==="through_pad"?i.start:i,a=o.route_type==="wire"?o.layer:o.route_type==="through_pad"?o.end_layer:i.route_type==="wire"?i.layer:i.route_type==="through_pad"?i.start_layer:null;if(!a)continue;if(_Jn(r,s))continue;let c=_0t(o),l=_0t(i),d=aBe(o)??aBe(i)??0,u=aBe(i)??d;t.push({start:r,end:s,layer:a,width:d,startWidth:d,endWidth:u,isInsideCopperPour:c&&l,startIsInsideCopperPour:c,endIsInsideCopperPour:l,copperPourId:c?g0t(o):l?g0t(i):void 0})}for(let n of e){if(!n||n.route_type!=="through_pad")continue;for(let o of new Set([n.start_layer,n.end_layer]))t.push({start:n.start,end:n.end,layer:o,width:n.width,startWidth:n.width,endWidth:n.width,isInsideCopperPour:!1,startIsInsideCopperPour:!1,endIsInsideCopperPour:!1})}return t}function aBe(e){return"width"in e?ze.parse(e.width):void 0}function _0t(e){return"is_inside_copper_pour"in e&&e.is_inside_copper_pour===!0}function g0t(e){if(!("copper_pour_id"in e))return;return e.copper_pour_id}function _Jn(e,t){let n=ze.parse(e.x),o=ze.parse(e.y),i=ze.parse(t.x),r=ze.parse(t.y);return n===i&&o===r}function gJn(e){let t=[],n=[];for(let o=0;o<e.length;o++){let i=e[o];if(!i)continue;let r=fJn(e,o),s=kBe(-r.y,r.x),a=i.width/2;t.push({x:i.x+s.x*a,y:i.y+s.y*a}),n.push({x:i.x-s.x*a,y:i.y-s.y*a})}return t.concat(n.reverse())}function fJn(e,t){if(e.length<2)return{x:1,y:0};if(t<=0)return Jue(e[0],e[1]);if(t>=e.length-1)return Jue(e[e.length-2],e[e.length-1]);let n=Jue(e[t-1],e[t]),o=Jue(e[t],e[t+1]),i=kBe(n.x+o.x,n.y+o.y);if(i.x!==0||i.y!==0)return i;if(n.x!==0||n.y!==0)return n;if(o.x!==0||o.y!==0)return o;return{x:1,y:0}}function Jue(e,t){if(!e||!t)return{x:1,y:0};let n=kBe(t.x-e.x,t.y-e.y);return n.x===0&&n.y===0?{x:1,y:0}:n}function kBe(e,t){let n=Math.hypot(e,t);if(n<=Number.EPSILON)return{x:0,y:0};return{x:e/n,y:t/n}}function Vf(e,t=gh){return t.copper[e]??"white"}function tQ(e){return yJn[e]??"rgb(105, 105, 105)"}function vBe({elementType:e,shapeAttributes:t,layer:n,fillColor:o,fillOpacity:i,className:r,additionalAttributes:s}){let a={class:r,fill:o,"fill-opacity":i,"data-type":"pcb_soldermask","data-pcb-layer":n,...t,...s};return{name:e,type:"element",value:"",children:[],attributes:a}}function LBe(e,t){let{transform:n,colorMap:o}=t,i=t.layer??"top",r=t.showSolderMask&&(i==="top"||i==="bottom");if(r&&!e.layers.includes(i))return[];let s=t.boardOwnerMap?.has(e.pcb_via_id)?e.pcb_via_id:e.pcb_trace_id??e.pcb_via_id,a=t.boardOwnerMap?.get(s),c=e,l=(i==="top"?c.tented_on_top:c.tented_on_bottom)??c.is_tented??(i==="top"?a?.default_via_tented_on_top:a?.default_via_tented_on_bottom),[d,u]=tt(n,[e.x,e.y]),h=e.outer_diameter*Math.abs(n.a),A=e.outer_diameter*Math.abs(n.a),m=e.hole_diameter*Math.abs(n.a),p=e.hole_diameter*Math.abs(n.a),g=Math.min(h,A)/2,_=Math.min(m,p)/2,f={name:"g",type:"element",value:"",attributes:{"data-type":"pcb_via","data-pcb-layer":r&&l?i:"through"},children:[{name:"circle",type:"element",value:"",children:[],attributes:{class:"pcb-hole-outer",fill:o.copper[r?i:"top"],cx:d.toString(),cy:u.toString(),r:g.toString(),"data-type":"pcb_via","data-pcb-layer":r?i:"top"}},{name:"circle",type:"element",value:"",children:[],attributes:{class:"pcb-hole-inner",fill:o.drill,cx:d.toString(),cy:u.toString(),r:_.toString(),"data-type":"pcb_via","data-pcb-layer":"drill"}}]};if(r&&l){let y=o.soldermaskWithCopperUnderneath[i],x,C=1;try{let b=Oq(y);C=b.alpha(),y=b.alpha(1).rgb().string(),x=Oq.rgb(b.red()/2,b.green()/2,b.blue()/2).string()}catch{}let I={name:"g",type:"element",value:"",attributes:{class:"pcb-via-tenting","data-type":"pcb_soldermask","data-pcb-layer":i,opacity:C.toString()},children:[vBe({elementType:"circle",shapeAttributes:{cx:d.toString(),cy:u.toString(),r:g.toString()},layer:i,fillColor:y,fillOpacity:"1",className:"pcb-via-tenting-ring"})]};if(x!==void 0)I.children.push(vBe({elementType:"circle",shapeAttributes:{cx:d.toString(),cy:u.toString(),r:_.toString()},layer:i,fillColor:x,fillOpacity:"1",className:"pcb-via-tenting-hole"}));f.children.push(I)}return[f]}function mG(e,t){if(e.length===0)return"";let n=e.map((i)=>{let[r,s]=tt(t,[i.x,i.y]);return{...i,x:r,y:s}}),o=`M ${n[0].x} ${n[0].y}`;for(let i=0;i<n.length;i++){let r=n[i],s=n[(i+1)%n.length];if(r.bulge){if(Math.hypot(s.x-r.x,s.y-r.y)<0.000000001)continue;let a=r.bulge,c=s.x-r.x,l=s.y-r.y,d=Math.hypot(c,l),u=Math.abs(d/4/a*(a*a+1)),h=a<0?1:0,A=Math.abs(a)>1?1:0;o+=` A ${u} ${u} 0 ${A} ${h} ${s.x} ${s.y}`}else o+=` L ${s.x} ${s.y}`}return o+=" Z",o}function gmt(e,t){if(e.shape==="rect"){let[n,o]=tt(t,[e.center.x,e.center.y]),i=e.width*Math.abs(t.a),r=e.height*Math.abs(t.d),s=-(e.rotation??0);return{elementType:"rect",shapeAttributes:{x:(-i/2).toString(),y:(-r/2).toString(),width:i.toString(),height:r.toString(),transform:B_(_o(So(n,o),wa(s*Math.PI/180)))}}}if(e.shape==="polygon"){if(!e.points||e.points.length===0)return null;return{elementType:"polygon",shapeAttributes:{points:e.points.map((o)=>tt(t,[o.x,o.y])).map((o)=>`${o[0]},${o[1]}`).join(" ")}}}if(e.shape==="brep"){let{brep_shape:n}=e,o=mG(n.outer_ring.vertices,t);for(let i of n.inner_rings??[])o+=` ${mG(i.vertices,t)}`;return{elementType:"path",shapeAttributes:{d:o,"fill-rule":"evenodd"}}}return null}function fmt(e){return`copper-pour-trace-mask-${e}`.replace(/[^a-zA-Z0-9_-]/g,"_")}function xJn({layer:e,circuitJson:t}){for(let n of t){if(n.type!=="pcb_copper_pour")continue;if(n.layer!==e)continue;return fmt(e)}return}function CJn({circuitJson:e,transform:t,svgWidth:n,svgHeight:o,usedMaskIds:i}){if(i.size===0)return null;let r=new Map;for(let a of e){if(a.type!=="pcb_copper_pour")continue;let c=a,l=fmt(c.layer);if(!i.has(l))continue;let d=r.get(l);if(d)d.push(c);else r.set(l,[c])}if(r.size===0)return null;let s=[];for(let[a,c]of r){let l=[{name:"rect",type:"element",value:"",children:[],attributes:{x:"0",y:"0",width:n.toString(),height:o.toString(),fill:"#fff"}}];for(let d of c){let u=gmt(d,t);if(!u)continue;l.push({name:u.elementType,type:"element",value:"",children:[],attributes:{...u.shapeAttributes,fill:"#000"}})}s.push({name:"mask",type:"element",value:"",children:l,attributes:{id:a,maskUnits:"userSpaceOnUse",x:"0",y:"0",width:n.toString(),height:o.toString()}})}return{name:"defs",type:"element",value:"",children:s,attributes:{class:"copper-pour-trace-mask-defs"}}}function ymt(e){let t=[],n=new Map;for(let o of e){let i=o.attributes?.["data-type"],r=o.attributes?.mask;if(!(i==="pcb_trace"||i==="pcb_trace_soldermask")||!r?.includes("#copper-pour-trace-mask-")){t.push(o);continue}let a=n.get(r);if(!a){let m={name:"g",type:"element",value:"",children:[],attributes:{class:"pcb-trace-mask-group",mask:r}};a={object:m,pathsByAttributes:new Map},n.set(r,a),t.push(m)}let{mask:c,d:l="",...d}=o.attributes,u=JSON.stringify(d),h=a.pathsByAttributes.get(u);if(h){h.attributes.d+=` ${l}`;continue}let A={...o,attributes:{...d,d:l}};a.pathsByAttributes.set(u,A),a.object.children.push(A)}return t}function xmt(e,t){let{transform:n,layer:o,colorMap:i,showSolderMask:r}=t;if(!e.route||!Array.isArray(e.route)||e.route.length===0)return[];let s=[],a=t.copperPourTraceMaskIdsByLayer??=new Map,c=[];for(let d of AJn(e.route)){let u=d;if(u.isInsideCopperPour)continue;if(u.copperPourId&&u.startIsInsideCopperPour!==u.endIsInsideCopperPour){let A=t.circuitJson?.find((m)=>m.type==="pcb_copper_pour"&&m.pcb_copper_pour_id===u.copperPourId);if(A){let m=aJn(u,A);if(!m)continue;u=m}}let h=u.layer;if(!h)continue;if(o&&h!==o)continue;c.push(u)}let l=(d)=>{if(!a.has(d))a.set(d,t.circuitJson?xJn({layer:d,circuitJson:t.circuitJson}):void 0);let u=a.get(d);if(u)return t.usedCopperPourTraceMaskIds?.add(u),{mask:`url(#${u})`};return{}};for(let d of pmt(e.route)){if(o&&d.layer!==o)continue;if(d.is_inside_copper_pour)continue;let u=Amt(d).map((A)=>tt(n,A));if(!u.length)continue;let h=r?i.soldermaskWithCopperUnderneath[d.layer]:Vf(d.layer,i);s.push({name:"path",type:"element",value:"",children:[],attributes:{class:r?"pcb-soldermask":"pcb-trace",fill:h,stroke:"none",d:u.map((A,m)=>`${m===0?"M":"L"} ${A.x} ${A.y}`).join(" ")+" Z","data-type":r?"pcb_trace_soldermask":"pcb_trace","data-route-type":"wire","data-wire-taper":"true","data-width-interpolation-mode":d.width_interpolation_mode,"data-pcb-layer":d.layer,...l(d.layer)}})}if(e.route_thickness_mode==="interpolated")for(let d of IJn(c)){let u=d[0]?.layer;if(!u)continue;let h=bJn(d,n);if(!h)continue;let A=Vf(u,i),m=i.soldermaskWithCopperUnderneath[u];s.push({name:"path",type:"element",value:"",children:[],attributes:{class:r?"pcb-soldermask":"pcb-trace",fill:r?m:A,stroke:"none",d:h,"shape-rendering":"geometricPrecision","data-type":r?"pcb_trace_soldermask":"pcb_trace","data-pcb-layer":u,...l(u)}})}else for(let d of c){let u=tt(n,[d.start.x,d.start.y]),h=tt(n,[d.end.x,d.end.y]),A=d.layer,m=Vf(A,i),p=i.soldermaskWithCopperUnderneath[A],g=d.width?(d.width*Math.abs(n.a)).toString():"0.3",_=l(A);if(r){let f={name:"path",type:"element",value:"",children:[],attributes:{class:"pcb-soldermask",stroke:p,fill:"none",d:`M ${u[0]} ${u[1]} L ${h[0]} ${h[1]}`,"stroke-width":g,"stroke-linecap":"round","stroke-linejoin":"round","shape-rendering":"crispEdges","data-type":"pcb_trace_soldermask","data-pcb-layer":A,..._}};s.push(f)}else{let f={name:"path",type:"element",value:"",children:[],attributes:{class:"pcb-trace",stroke:m,fill:"none",d:`M ${u[0]} ${u[1]} L ${h[0]} ${h[1]}`,"stroke-width":g,"stroke-linecap":"round","stroke-linejoin":"round","shape-rendering":"crispEdges","data-type":"pcb_trace","data-pcb-layer":A,..._}};s.push(f)}}for(let[d,u]of e.route.entries()){if(!u||u.route_type!=="via")continue;if(MJn(t).has(Cmt(u)))continue;s.push(...LBe(PJn(e,u,d,t),t))}return s}function IJn(e){let t=[];for(let n of e){let o=t[t.length-1],i=o?.[o.length-1];if(o&&i?.layer===n.layer&&SJn(i.end,n.start))o.push(n);else t.push([n])}return t}function bJn(e,t){let n=e[0];if(!n)return"";let o=[{x:ze.parse(n.start.x),y:ze.parse(n.start.y),width:n.startWidth},...e.map((c)=>({x:ze.parse(c.end.x),y:ze.parse(c.end.y),width:c.endWidth}))],r=gJn(o).map((c)=>tt(t,[c.x,c.y])),[s,...a]=r;if(!s)return"";return[`M ${s[0]} ${s[1]}`,...a.map((c)=>`L ${c[0]} ${c[1]}`),"Z"].join(" ")}function SJn(e,t){return ze.parse(e.x)===ze.parse(t.x)&&ze.parse(e.y)===ze.parse(t.y)}function PJn(e,t,n,o){let i=vJn(e.route,n),r=o.boardOwnerMap?.get(e.pcb_trace_id),{holeDiameter:s,outerDiameter:a}=EJn(r,i);return{type:"pcb_via",pcb_via_id:`${e.pcb_trace_id}_route_via_${n}`,pcb_trace_id:e.pcb_trace_id,subcircuit_id:e.subcircuit_id,pcb_group_id:e.pcb_group_id,x:t.x,y:t.y,outer_diameter:a,hole_diameter:s,layers:[t.from_layer,t.to_layer],tented_on_top:t.tented_on_top,tented_on_bottom:t.tented_on_bottom}}function vJn(e,t){let n=f0t(e,t,-1),o=f0t(e,t,1);return Math.max(n??0,o??0)}function f0t(e,t,n){for(let o=t+n;o>=0&&o<e.length;o+=n){let i=e[o];if(QBe(i))return n===-1?i.end_width:i.start_width;if(!i||!("width"in i)||typeof i.width!=="number")continue;return i.width}return}function EJn(e,t){let n=hhe(e?.min_via_hole_diameter),o=hhe(e?.min_via_pad_diameter),i=Math.max(t,0.3),r=Math.max(i*2,0.6);return{holeDiameter:n??i,outerDiameter:o??r}}function MJn(e){return e.standaloneViaPositionKeys??=new Set(e.circuitJson?.filter((t)=>t.type==="pcb_via").map((t)=>Cmt(t))??[])}function Cmt(e){let t=hhe(e.x),n=hhe(e.y);if(t!==void 0&&n!==void 0)return`${t}:${n}`;return`${String(e.x)}:${String(e.y)}`}function hhe(e){if(e===null||e===void 0)return;let t=ze.safeParse(e);return t.success?t.data:void 0}function Imt(e,t){if(!t)return{};let n=bmt(e,t);if(!n)return{};let o=t.find((a)=>a.type==="source_port"&&a.source_port_id===n),i=t.find((a)=>a.type==="source_component"&&a.source_component_id===o?.source_component_id),r={};if(i?.name&&o?.name)r["data-pad-name"]=`${i.name}.${o.name}`;let s=wJn(n,t);if(s)r["data-pad-net-name"]=s;return r}function BJn(e,t){if(t){let i=bmt(e,t),r=t.find((s)=>s.type==="source_port"&&s.source_port_id===i);if(r?.type==="source_port"&&r.pin_number!=null)return r.pin_number.toString()}let n=e.port_hints?.find((i)=>i.trim().length>0);if(!n)return;return n.match(/^pin(\d+)$/i)?.[1]??n}function bmt(e,t){if(e.source_port_id)return e.source_port_id;if(e.pcb_port_id){let i=t.find((r)=>r.type==="pcb_port"&&r.pcb_port_id===e.pcb_port_id);if(i?.source_port_id)return i.source_port_id}let n=e.pcb_smtpad_id??e.pcb_plated_hole_id;if(!n)return;return t.find((i)=>{if(i.type!=="pcb_port")return!1;let r=i;return r.pcb_smtpad_id===n||r.pcb_plated_hole_id===n})?.source_port_id}function wJn(e,t){let o=t.find((r)=>{if(r.type!=="source_trace")return!1;return r.connected_source_port_ids?.includes(e)})?.connected_source_net_ids?.[0];if(!o)return;return t.find((r)=>r.type==="source_net"&&r.source_net_id===o)?.name}function Smt(e,t){let{transform:n,layer:o,colorMap:i,showSolderMask:r}=t;if(o&&e.layer!==o)return[];let s=Imt(e,t.circuitJson),a=Boolean(e?.is_covered_with_solder_mask),c=r&&a,l=i.soldermaskWithCopperUnderneath[e.layer]??i.soldermaskWithCopperUnderneath.top,d=(e.soldermask_margin??0)*Math.abs(n.a);if(e.shape==="rect"||e.shape==="rotated_rect"){let u=e.width*Math.abs(n.a),h=e.height*Math.abs(n.d),[A,m]=tt(n,[e.x,e.y]),g=(e.corner_radius??e.rect_border_radius??0)*Math.abs(n.a),_={left:(e.soldermask_margin_left??e.soldermask_margin??0)*Math.abs(n.a),right:(e.soldermask_margin_right??e.soldermask_margin??0)*Math.abs(n.a),top:(e.soldermask_margin_top??e.soldermask_margin??0)*Math.abs(n.a),bottom:(e.soldermask_margin_bottom??e.soldermask_margin??0)*Math.abs(n.a)},f=_.left<0||_.right<0||_.top<0||_.bottom<0,y=_.left===0&&_.right===0&&_.top===0&&_.bottom===0;if(e.shape==="rotated_rect"&&e.ccw_rotation){let E={name:"rect",type:"element",value:"",children:[],attributes:{class:"pcb-pad",fill:Vf(e.layer,i),x:(-u/2).toString(),y:(-h/2).toString(),width:u.toString(),height:h.toString(),transform:`translate(${A} ${m}) rotate(${-e.ccw_rotation})`,"data-type":"pcb_smtpad","data-pcb-layer":e.layer,...s,...g?{rx:g.toString(),ry:g.toString()}:{}}};if(!c)return[E];let B=u+_.left+_.right,w=h+_.top+_.bottom,T=g?g+d:0;if(f){let N={name:"rect",type:"element",value:"",children:[],attributes:{class:"pcb-pad-covered",fill:l,x:(-u/2).toString(),y:(-h/2).toString(),width:u.toString(),height:h.toString(),transform:`translate(${A} ${m}) rotate(${-e.ccw_rotation})`,"data-type":"pcb_smtpad","data-pcb-layer":e.layer,...g?{rx:g.toString(),ry:g.toString()}:{}}},F={name:"rect",type:"element",value:"",children:[],attributes:{class:"pcb-pad-exposed",fill:Vf(e.layer,i),x:(-u/2-_.left).toString(),y:(-h/2-_.top).toString(),width:B.toString(),height:w.toString(),transform:`translate(${A} ${m}) rotate(${-e.ccw_rotation})`,"data-type":"pcb_soldermask","data-pcb-layer":e.layer,...T>0?{rx:T.toString(),ry:T.toString()}:{}}};return[N,F]}if(y)return[{name:"rect",type:"element",value:"",children:[],attributes:{class:"pcb-pad-covered",fill:l,x:(-u/2).toString(),y:(-h/2).toString(),width:u.toString(),height:h.toString(),transform:`translate(${A} ${m}) rotate(${-e.ccw_rotation})`,"data-type":"pcb_smtpad","data-pcb-layer":e.layer,...g?{rx:g.toString(),ry:g.toString()}:{}}}];return[{name:"rect",type:"element",value:"",children:[],attributes:{class:"pcb-soldermask-cutout",fill:i.substrate,x:(-u/2-_.left).toString(),y:(-h/2-_.top).toString(),width:B.toString(),height:w.toString(),transform:`translate(${A} ${m}) rotate(${-e.ccw_rotation})`,...T>0?{rx:T.toString(),ry:T.toString()}:{},"data-type":"pcb_soldermask_opening","data-pcb-layer":e.layer}},E]}let x={name:"rect",type:"element",value:"",children:[],attributes:{class:"pcb-pad",fill:Vf(e.layer,i),x:(A-u/2).toString(),y:(m-h/2).toString(),width:u.toString(),height:h.toString(),"data-type":"pcb_smtpad","data-pcb-layer":e.layer,...s,...g?{rx:g.toString(),ry:g.toString()}:{}}};if(!c)return[x];let C=u+_.left+_.right,I=h+_.top+_.bottom,b=g?g+d:0;if(f){let E={name:"rect",type:"element",value:"",children:[],attributes:{class:"pcb-pad-covered",fill:l,x:(A-u/2).toString(),y:(m-h/2).toString(),width:u.toString(),height:h.toString(),"data-type":"pcb_smtpad","data-pcb-layer":e.layer,...g?{rx:g.toString(),ry:g.toString()}:{}}},B={name:"rect",type:"element",value:"",children:[],attributes:{class:"pcb-pad-exposed",fill:Vf(e.layer,i),x:(A-u/2-_.left).toString(),y:(m-h/2-_.top).toString(),width:C.toString(),height:I.toString(),"data-type":"pcb_soldermask","data-pcb-layer":e.layer,...b>0?{rx:b.toString(),ry:b.toString()}:{}}};return[E,B]}if(y)return[{name:"rect",type:"element",value:"",children:[],attributes:{class:"pcb-pad-covered",fill:l,x:(A-u/2).toString(),y:(m-h/2).toString(),width:u.toString(),height:h.toString(),...b>0?{rx:g.toString(),ry:g.toString()}:{},"data-type":"pcb_smtpad","data-pcb-layer":e.layer}}];return[{name:"rect",type:"element",value:"",children:[],attributes:{class:"pcb-soldermask-cutout",fill:i.substrate,x:(A-u/2-_.left).toString(),y:(m-h/2-_.top).toString(),width:C.toString(),height:I.toString(),...b>0?{rx:b.toString(),ry:b.toString()}:{},"data-type":"pcb_soldermask_opening","data-pcb-layer":e.layer}},x]}if(e.shape==="pill"||e.shape==="rotated_pill"){let u=e.shape==="rotated_pill",h=e.width*Math.abs(n.a),A=e.height*Math.abs(n.d),m=e.radius*Math.abs(n.a),[p,g]=tt(n,[e.x,e.y]),_=u?{transform:`translate(${p} ${g}) rotate(${-(e.ccw_rotation??0)})`}:void 0,f={class:"pcb-pad",fill:Vf(e.layer,i),x:u?(-h/2).toString():(p-h/2).toString(),y:u?(-A/2).toString():(g-A/2).toString(),width:h.toString(),height:A.toString(),rx:m.toString(),ry:m.toString(),"data-type":"pcb_smtpad","data-pcb-layer":e.layer,...s,..._??{}},y={name:"rect",type:"element",value:"",children:[],attributes:f};if(!c)return[y];let x=h+2*d,C=A+2*d,I=m+d;if(d<0){let E={name:"rect",type:"element",value:"",children:[],attributes:{class:"pcb-pad-covered",fill:l,x:u?(-h/2).toString():(p-h/2).toString(),y:u?(-A/2).toString():(g-A/2).toString(),width:h.toString(),height:A.toString(),rx:m.toString(),ry:m.toString(),"data-type":"pcb_smtpad","data-pcb-layer":e.layer,..._??{}}},B={class:"pcb-pad-exposed",fill:Vf(e.layer,i),x:u?(-x/2).toString():(p-x/2).toString(),y:u?(-C/2).toString():(g-C/2).toString(),width:x.toString(),height:C.toString(),rx:I.toString(),ry:I.toString(),"data-type":"pcb_soldermask","data-pcb-layer":e.layer,..._??{}};return[E,{name:"rect",type:"element",value:"",children:[],attributes:B}]}if(d===0)return[{name:"rect",type:"element",value:"",children:[],attributes:{class:"pcb-pad-covered",fill:l,x:u?(-h/2).toString():(p-h/2).toString(),y:u?(-A/2).toString():(g-A/2).toString(),width:h.toString(),height:A.toString(),rx:m.toString(),ry:m.toString(),"data-type":"pcb_smtpad","data-pcb-layer":e.layer,..._??{}}}];let b={class:"pcb-soldermask-cutout",fill:i.substrate,x:u?(-x/2).toString():(p-x/2).toString(),y:u?(-C/2).toString():(g-C/2).toString(),width:x.toString(),height:C.toString(),rx:I.toString(),ry:I.toString(),"data-type":"pcb_soldermask_opening","data-pcb-layer":e.layer,..._??{}};return[{name:"rect",type:"element",value:"",children:[],attributes:b},y]}if(e.shape==="circle"){let u=e.radius*Math.abs(n.a),[h,A]=tt(n,[e.x,e.y]),m={name:"circle",type:"element",value:"",children:[],attributes:{class:"pcb-pad",fill:Vf(e.layer,i),cx:h.toString(),cy:A.toString(),r:u.toString(),"data-type":"pcb_smtpad","data-pcb-layer":e.layer,...s}};if(!c)return[m];let p=u+d;if(d<0){let _={name:"circle",type:"element",value:"",children:[],attributes:{class:"pcb-pad-covered",fill:l,cx:h.toString(),cy:A.toString(),r:u.toString(),"data-type":"pcb_smtpad","data-pcb-layer":e.layer}},f={name:"circle",type:"element",value:"",children:[],attributes:{class:"pcb-pad-exposed",fill:Vf(e.layer,i),cx:h.toString(),cy:A.toString(),r:p.toString(),"data-type":"pcb_soldermask","data-pcb-layer":e.layer}};return[_,f]}if(d===0)return[{name:"circle",type:"element",value:"",children:[],attributes:{class:"pcb-pad-covered",fill:l,cx:h.toString(),cy:A.toString(),r:u.toString(),"data-type":"pcb_smtpad","data-pcb-layer":e.layer}}];return[{name:"circle",type:"element",value:"",children:[],attributes:{class:"pcb-soldermask-cutout",fill:i.substrate,cx:h.toString(),cy:A.toString(),r:p.toString(),"data-type":"pcb_soldermask_opening","data-pcb-layer":e.layer}},m]}if(e.shape==="polygon"){let u=(e.points??[]).map((p)=>tt(n,[p.x,p.y])),h={name:"polygon",type:"element",value:"",children:[],attributes:{class:"pcb-pad",fill:Vf(e.layer,i),points:u.map((p)=>p.join(",")).join(" "),"data-type":"pcb_smtpad","data-pcb-layer":e.layer,...s}};if(!c)return[h];let A=u;if(d!==0){let p=u.reduce((_,f)=>_+f[0],0)/u.length,g=u.reduce((_,f)=>_+f[1],0)/u.length;A=u.map(([_,f])=>{let y=_-p,x=f-g,C=Math.sqrt(y*y+x*x);if(C===0)return[_,f];let I=y/C,b=x/C;return[_+I*d,f+b*d]})}if(d<0){let p={name:"polygon",type:"element",value:"",children:[],attributes:{class:"pcb-pad-covered",fill:l,points:u.map((_)=>_.join(",")).join(" "),"data-type":"pcb_smtpad","data-pcb-layer":e.layer}},g={name:"polygon",type:"element",value:"",children:[],attributes:{class:"pcb-pad-exposed",fill:Vf(e.layer,i),points:A.map((_)=>_.join(",")).join(" "),"data-type":"pcb_soldermask","data-pcb-layer":e.layer}};return[p,g]}if(d===0)return[{name:"polygon",type:"element",value:"",children:[],attributes:{class:"pcb-pad-covered",fill:l,points:u.map((g)=>g.join(",")).join(" "),"data-type":"pcb_smtpad","data-pcb-layer":e.layer}}];return[{name:"polygon",type:"element",value:"",children:[],attributes:{class:"pcb-soldermask-cutout",fill:i.substrate,points:A.map((p)=>p.join(",")).join(" "),"data-type":"pcb_soldermask_opening","data-pcb-layer":e.layer}},h]}return[]}function Pmt(e,t){let n=e.filter((i)=>i.type==="simulation_pcb_return_current_result"&&i.simulation_pcb_return_current_result_id===t);if(n.length!==1)throw Error(`Expected one return-current result '${t}'`);let o=Fce.parse(n[0]);if(!e.some((i)=>i.type==="simulation_experiment"&&i.simulation_experiment_id===o.simulation_experiment_id&&i.experiment_type==="pcb_return_current"))throw Error(`Missing PCB return-current experiment '${o.simulation_experiment_id}'`);if(!e.some((i)=>i.type==="pcb_board"&&i.pcb_board_id===o.pcb_board_id))throw Error(`Missing PCB board '${o.pcb_board_id}'`);return o}function y0t(e,t){if(e.field_type==="real"){let s=e.sheet_current_x[t],a=e.sheet_current_y[t];return s==null||a==null?null:{x:s,y:a,magnitude:Math.hypot(s,a)}}let n=e.sheet_current_x_real[t],o=e.sheet_current_x_imag[t],i=e.sheet_current_y_real[t],r=e.sheet_current_y_imag[t];if(n==null||o==null||i==null||r==null)return null;return{x:n,y:i,magnitude:Math.hypot(n,o,i,r)}}function x0t(e){let t=Math.max(0,Math.min(1,e))*($ue.length-1),n=Math.floor(t),o=$ue[n],i=$ue[Math.min(n+1,$ue.length-1)];return`rgb(${o.map((r,s)=>Math.round(r+(i[s]-r)*(t-n))).join(",")})`}function TJn({circuitJson:e,resultId:t,ctx:n,options:o={},width:i,height:r}){let s=Pmt(e,t),a=o.opacity??0.65;if(!Number.isFinite(a)||a<0||a>1)throw Error("Return-current opacity must be between 0 and 1");let c=o.densityRange;if(c&&(!Number.isFinite(c.min)||!Number.isFinite(c.max)||c.min<0||c.max<=c.min))throw Error("Return-current densityRange requires 0 <= min < max");let l=(C)=>("simulation_pcb_return_current_result_id"in C)&&C.simulation_pcb_return_current_result_id===t,d=e.filter((C)=>C.type==="simulation_pcb_return_current_heatmap"&&l(C)).map((C)=>Oce.parse(C)).filter((C)=>!n.layer||C.layer===n.layer),u=e.filter((C)=>C.type==="simulation_pcb_return_current_field"&&l(C)).map((C)=>gz.parse(C)).filter((C)=>!n.layer||C.layer===n.layer);if(!u.length&&!d.length)throw Error(`No return-current field or heatmap for '${t}' on ${n.layer??"any layer"}`);let h=u.flatMap((C)=>{let I=o.fieldData?.[C.simulation_pcb_return_current_field_id];if(!I)return[];return[{field:C,grid:Fq(C).parse(I)}]});if(!d.length&&!h.length)throw Error("Return-current field assets need decoded fieldData; use convertCircuitJsonToPcbSimulationSvg to load assets");let A=0;for(let{field:C,grid:I}of h)for(let b=0;b<C.columns*C.rows;b++)A=Math.max(A,(y0t(I,b)?.magnitude??0)/C.copper_thickness);let m=c?.min??0,p=c?.max??(A||1),g=[],_=[];for(let C of d){if(c&&h.some(({field:B})=>B.layer===C.layer&&B.source_net_id===C.source_net_id))continue;let[I,b]=tt(n.transform,[C.min_x,C.max_y]),[P,E]=tt(n.transform,[C.max_x,C.min_y]);g.push(F5("image",{x:String(I),y:String(b),width:String(P-I),height:String(E-b),href:C.image_asset.url,preserveAspectRatio:"none",opacity:String(a),"data-type":C.type,"data-pcb-layer":C.layer,"data-source-net-id":C.source_net_id,"data-units":"A/mm²"}))}for(let{field:C,grid:I}of h){let b=!c&&d.some((P)=>P.layer===C.layer&&P.source_net_id===C.source_net_id);f(C,I,b)}function f(C,I,b){let P=Math.max(1,Math.ceil(Math.sqrt(C.columns*C.rows/500)));for(let E=0;E<C.rows;E++)for(let B=0;B<C.columns;B++){let w=E*C.columns+B,T=y0t(I,w);if(!T)continue;let Q=T.magnitude/C.copper_thickness,N=C.min_x+B*C.cell_width,F=C.min_y+E*C.cell_height,[H,z]=tt(n.transform,[N,F+C.cell_height]);if(!b)g.push(F5("rect",{x:String(H),y:String(z),width:String(C.cell_width*Math.abs(n.transform.a)),height:String(C.cell_height*Math.abs(n.transform.d)),fill:x0t((Q-m)/(p-m)),opacity:String(a),"data-type":"simulation_pcb_return_current_cell","data-pcb-layer":C.layer,"data-grid-index":String(w),"data-current-density":String(Q),"data-units":"A/mm²"}));if(!o.showVectors||E%P||B%P)continue;let Y=Math.hypot(T.x,T.y);if(Y===0)continue;let[U,X]=tt(n.transform,[N+C.cell_width/2,F+C.cell_height/2]),V=T.x/Y*8,W=-T.y/Y*8,j=U+V,q=X+W;_.push(F5("path",{d:`M ${U-V} ${X-W} L ${j} ${q} M ${j-V*0.4-W*0.3} ${q-W*0.4+V*0.3} L ${j} ${q} L ${j-V*0.4+W*0.3} ${q-W*0.4-V*0.3}`,fill:"none",stroke:"#fff","stroke-width":"1.2","data-type":"simulation_pcb_return_current_vector","data-pcb-layer":C.layer,"data-grid-index":String(w),"data-sheet-current-x":String(T.x),"data-sheet-current-y":String(T.y),"data-units":"A/mm","data-arrow-reference":"excitation-current-peak"}))}}let y=[];for(let C of s.simulation_return_current_excitation_ids){let I=e.find((P)=>P.type==="simulation_return_current_excitation"&&P.simulation_return_current_excitation_id===C);if(!I||I.type!=="simulation_return_current_excitation")throw Error(`Missing return-current excitation '${C}'`);if(I.simulation_experiment_id!==s.simulation_experiment_id)throw Error(`Excitation '${C}' belongs to a different experiment`);let b=e.find((P)=>P.type==="pcb_trace"&&P.pcb_trace_id===I.pcb_trace_id);if(!b||b.type!=="pcb_trace")throw Error(`Missing signal trace '${I.pcb_trace_id}'`);y.push(F5("g",{"data-type":"simulation_pcb_return_current_signal","data-pcb-trace-id":b.pcb_trace_id},xmt({...b,route:b.route.map((P)=>{let{is_inside_copper_pour:E,copper_pour_id:B,...w}=P;return w})},{...n,layer:void 0,showSolderMask:!1,circuitJson:e.filter((P)=>P.type!=="pcb_copper_pour"),colorMap:{...n.colorMap,copper:{...n.colorMap.copper,top:"#08d9ef",bottom:"#ff941f"}}})))}for(let C of e){if(C.type!=="simulation_pcb_return_current_marker"||!l(C))continue;let I=zce.parse(C),b=I.target_type==="pcb_port"?e.find((N)=>N.type==="pcb_port"&&N.pcb_port_id===I.pcb_port_id):e.find((N)=>N.type==="pcb_via"&&N.pcb_via_id===I.pcb_via_id);if(!b||b.type!=="pcb_port"&&b.type!=="pcb_via")throw Error(`Missing ${I.target_type} for return-current marker '${I.simulation_pcb_return_current_marker_id}'`);let[P,E]=tt(n.transform,[ze.parse(b.x),ze.parse(b.y)]),B=I.role.startsWith("return_")?"#ed80e6":"#08d9ef",w=I.target_type==="pcb_port"?e.flatMap((N)=>N.type==="pcb_smtpad"&&N.pcb_port_id===I.pcb_port_id?Smt(N,{...n,layer:void 0,showSolderMask:!1,colorMap:{...n.colorMap,copper:{...n.colorMap.copper,[N.layer]:B}}}):[]):[],T=b.type==="pcb_via"?LBe(b,{...n,layer:void 0,showSolderMask:!1,colorMap:{...n.colorMap,drill:"#102b29",copper:{...n.colorMap.copper,top:B}}}):[],Q=[...w,...T,F5("circle",{cx:String(P),cy:String(E),r:"8",stroke:B,"stroke-width":"3",fill:"none"})];if(I.label){let N=I.label_x!==void 0&&I.label_y!==void 0?tt(n.transform,[I.label_x,I.label_y]):[P+13,E-13];Q.push(F5("line",{x1:String(P),y1:String(E),x2:String(N[0]),y2:String(N[1]),stroke:B,"stroke-width":"1"})),Q.push(cBe(I.label,{x:String(N[0]),y:String(N[1]-4),fill:"white","font-size":"12","font-family":"sans-serif","paint-order":"stroke",stroke:"#122b29","stroke-width":"4"}))}y.push(F5("g",{"data-type":I.type,"data-role":I.role,"data-target-type":I.target_type,"data-target-id":I.target_type==="pcb_port"?I.pcb_port_id:I.pcb_via_id},Q))}let x=[];if(o.showLegend!==!1){let I=`${s.frequency_hz===void 0?"frequency not specified":`${s.frequency_hz/1e6} MHz`} · ${n.layer??"all result layers"} · average density A/mm² · cyan: top signal · orange: bottom signal · magenta: return${o.showVectors?" · arrows: current at excitation peak":""}`;if(x.push(F5("rect",{x:"0",y:String(r-28),width:String(i),height:"28",fill:"#102b29",opacity:"0.95"})),x.push(cBe(I,{x:"10",y:String(r-10),fill:"white","font-family":"sans-serif","font-size":"12"})),h.length&&(d.length===0||c)){for(let b=0;b<80;b++)x.push(F5("rect",{x:String(i-170+b*2),y:"12",width:"2",height:"10",fill:x0t(b/79)}));x.push(cBe(`${m.toPrecision(3)} – ${p.toPrecision(3)} A/mm²`,{x:String(i-170),y:"36",fill:"white","font-family":"sans-serif","font-size":"12"}))}}return[F5("g",{"data-simulation-result-id":t},[...g,..._,...y,...x])]}function vmt(e){return e.map((t,n)=>({object:t,index:n,layerPriority:NJn(t.attributes?.["data-pcb-layer"]??void 0),typePriority:RJn(t.attributes?.["data-type"]??void 0)})).sort((t,n)=>{if(t.layerPriority!==n.layerPriority)return t.layerPriority-n.layerPriority;if(t.typePriority!==n.typePriority)return t.typePriority-n.typePriority;return t.index-n.index}).map(({object:t})=>t)}function NJn(e){if(!e)return 500;let t=e.toLowerCase();if(t==="global")return-100;if(t==="bottom")return 4;if(t==="board")return 2;if(t==="soldermask-top"||t==="soldermask-bottom")return 3;if(t.startsWith("inner")){let n=t.match(/\d+/);return 5+(n?Number.parseInt(n[0],10):0)}if(t==="through")return 18;if(t==="top")return 17;if(t==="drill")return 30;if(t==="overlay")return 40;return 10}function RJn(e){if(!e)return C0t;return DJn[e]??C0t}function kJn({circuitJson:e,ctx:t,create:n}){if(!t.showSolderMask)return[];let o=[];for(let i of["bottom","top"]){if(t.layer&&t.layer!==i)continue;let r=e.filter((d)=>d.type==="pcb_soldermask_opening"&&d.layer===i);if(r.length===0)continue;let s=r.map((d)=>LJn(d,t)),a=`pcb-soldermask-openings-${i}`,c={...t,layer:i,showSolderMask:!1},l=e.flatMap((d)=>QJn.has(d.type)?n(d,c):[]);o.push({name:"g",type:"element",value:"",attributes:{"data-type":"pcb_soldermask_opening_layer","data-pcb-layer":i},children:[{name:"defs",type:"element",value:"",attributes:{},children:[{name:"clipPath",type:"element",value:"",attributes:{id:a,clipPathUnits:"userSpaceOnUse"},children:s}]},...s.map((d,u)=>({...d,attributes:{...d.attributes,fill:t.colorMap.substrate,"data-type":"pcb_soldermask_opening","data-pcb-layer":i,"data-pcb-soldermask-opening-id":r[u].pcb_soldermask_opening_id}})),{name:"g",type:"element",value:"",attributes:{"clip-path":`url(#${a})`},children:ymt(vmt(l))}]})}return o}function LJn(e,t){let{transform:n}=t,o={type:"element",value:"",children:[]};if(e.shape==="polygon")return{...o,name:"polygon",attributes:{points:e.points.map((c)=>tt(n,[c.x,c.y]).join(",")).join(" ")}};let[i,r]=tt(n,[e.x,e.y]);if(e.shape==="circle")return{...o,name:"circle",attributes:{cx:String(i),cy:String(r),r:String(e.radius*Math.abs(n.a))}};let s=e.width*Math.abs(n.a),a=e.height*Math.abs(n.d);return{...o,name:"rect",attributes:{x:String(i-s/2),y:String(r-a/2),width:String(s),height:String(a),...e.shape==="rotated_rect"?{transform:`rotate(${-e.ccw_rotation} ${i} ${r})`}:{}}}}function b7(e){let t=(o)=>({...o,children:(o.children??[]).filter((i)=>!(I0t in(i.attributes??{}))).map(t)}),n=t(e);return n.children.push({name:"style",type:"element",value:"",attributes:{[I0t]:"",type:"text/css"},children:[{name:"",type:"text",value:`@font-face { font-family: '${rQ}'; src: url('data:font/ttf;base64,${gat}') format('truetype'); font-weight: normal; font-style: normal; }`,attributes:{},children:[]}]}),Emt.stringify(n)}function FJn(e,t,n){let{transform:o,shouldDrawErrors:i}=n;if(!i)return[];let{pcb_port_ids:r}=e,s=t.find((h)=>h.type==="pcb_port"&&h.pcb_port_id===r?.[0]),a=t.find((h)=>h.type==="pcb_port"&&h.pcb_port_id===r?.[1]);if(!s||!a){let A=e.message?.match(/pcb_via\[#?(pcb_via_\d+)\]/)?.[1],m=t.find((p)=>p.type==="pcb_via"&&p.pcb_via_id===A);if(m&&m.type==="pcb_via")return HJn(e,m,n);if(e.center){let p=tt(o,{x:e.center.x,y:e.center.y});return EBe([{name:"rect",type:"element",attributes:{x:(p.x-5).toString(),y:(p.y-5).toString(),width:"10",height:"10",fill:"red",transform:`rotate(45 ${p.x} ${p.y})`},children:[],value:""},{name:"text",type:"element",attributes:{x:p.x.toString(),y:(p.y-15).toString(),fill:"red","font-family":"sans-serif","font-size":"12","text-anchor":"middle"},children:[{type:"text",value:e.message||"Pcb Trace Error",name:"",attributes:{},children:[]}],value:""}])}else return[]}let c=tt(o,{x:s.x,y:s.y}),l=tt(o,{x:a.x,y:a.y}),d={x:(c.x+l.x)/2,y:(c.y+l.y)/2};if(isNaN(c.x)||isNaN(c.y)||isNaN(l.x)||isNaN(l.y)||isNaN(d.x)||isNaN(d.y))return[];let u=[{name:"line",type:"element",attributes:{x1:c.x.toString(),y1:c.y.toString(),x2:d.x.toString(),y2:d.y.toString(),stroke:"red","stroke-width":"1.5","stroke-dasharray":"2,2"},children:[],value:""},{name:"line",type:"element",attributes:{x1:d.x.toString(),y1:d.y.toString(),x2:l.x.toString(),y2:l.y.toString(),stroke:"red","stroke-width":"1.5","stroke-dasharray":"2,2"},children:[],value:""},{name:"rect",type:"element",attributes:{x:(d.x-5).toString(),y:(d.y-5).toString(),width:"10",height:"10",fill:"red",transform:`rotate(45 ${d.x} ${d.y})`},children:[],value:""},{name:"text",type:"element",attributes:{x:d.x.toString(),y:(d.y-15).toString(),fill:"red","font-family":"sans-serif","font-size":"12","text-anchor":"middle"},children:[{type:"text",value:e.message||"Pcb Trace Error",name:"",attributes:{},children:[]}],value:""}];return EBe(u)}function HJn(e,t,n){let{transform:o}=n;if(e.center&&t){let i=tt(o,{x:e.center.x,y:e.center.y}),r=tt(o,{x:t.x,y:t.y}),s=r.x-i.x,a=r.y-i.y,c=Math.sqrt(s*s+a*a),l=Math.atan2(a,s)*180/Math.PI,d=10,u=c+20,h=20,A=(i.x+r.x)/2,m=(i.y+r.y)/2;return EBe([{name:"rect",type:"element",attributes:{x:(A-u/2).toString(),y:(m-10).toString(),width:u.toString(),height:20 .toString(),fill:"none",stroke:"red","stroke-width":"1","stroke-dasharray":"3,2",transform:`rotate(${l} ${A} ${m})`},children:[],value:""},{name:"rect",type:"element",attributes:{x:(A-5).toString(),y:(m-5).toString(),width:"10",height:"10",fill:"red",transform:`rotate(45 ${A} ${m})`},children:[],value:""},{name:"text",type:"element",attributes:{x:A.toString(),y:(m-10-5).toString(),fill:"red","font-family":"sans-serif","font-size":"12","text-anchor":"middle"},children:[{type:"text",value:e.message||"Pcb Trace Error",name:"",attributes:{},children:[]}],value:""}])}return[]}function EBe(e){return e.map((t)=>({...t,attributes:{...t.attributes??{},"data-type":t.attributes?.["data-type"]??"pcb_trace_error","data-pcb-layer":t.attributes?.["data-pcb-layer"]??"overlay"},children:(t.children??[]).map((n)=>{if(n?.type==="element")return{...n,attributes:{...n.attributes??{},"data-type":n.attributes?.["data-type"]??"pcb_trace_error","data-pcb-layer":n.attributes?.["data-pcb-layer"]??"overlay"}};return n})}))}function OJn(e){return e.map((t)=>({...t,attributes:{...t.attributes??{},"data-type":t.attributes?.["data-type"]??"pcb_footprint_overlap_error","data-pcb-layer":t.attributes?.["data-pcb-layer"]??"overlay"},children:(t.children??[]).map((n)=>{if(n?.type==="element")return{...n,attributes:{...n.attributes??{},"data-type":n.attributes?.["data-type"]??"pcb_footprint_overlap_error","data-pcb-layer":n.attributes?.["data-pcb-layer"]??"overlay"}};return n})}))}function zJn(e,t,n){let{transform:o,shouldDrawErrors:i}=n;if(!i)return[];let r=[],s=[],a=[];if(e.pcb_smtpad_ids)for(let d of e.pcb_smtpad_ids){let u=t.find((h)=>h.type==="pcb_smtpad"&&h.pcb_smtpad_id===d);if(u){if(s.push({x:u.x,y:u.y,type:"pcb_smtpad",id:d,pcb_port_id:u.pcb_port_id}),u.pcb_port_id)a.push(u.pcb_port_id)}}let c=a.length>1&&a.every((d)=>d===a[0]),l=s;if(c)l=s.filter((d)=>d.type!=="pcb_smtpad");if(e.pcb_plated_hole_ids)for(let d of e.pcb_plated_hole_ids){let u=t.find((h)=>h.type==="pcb_plated_hole"&&h.pcb_plated_hole_id===d);if(u)l.push({x:u.x,y:u.y,type:"pcb_plated_hole",id:d})}if(e.pcb_hole_ids)for(let d of e.pcb_hole_ids){let u=t.find((h)=>h.type==="pcb_hole"&&h.pcb_hole_id===d);if(u)l.push({x:u.x,y:u.y,type:"pcb_hole",id:d})}if(l.length>0){let d=l.reduce((A,m)=>A+m.x,0)/l.length,u=l.reduce((A,m)=>A+m.y,0)/l.length,h=tt(o,{x:d,y:u});r.push({name:"rect",type:"element",attributes:{x:(h.x-5).toString(),y:(h.y-5).toString(),width:"10",height:"10",fill:"red",transform:`rotate(45 ${h.x} ${h.y})`},children:[],value:""}),r.push({name:"text",type:"element",attributes:{x:h.x.toString(),y:(h.y-15).toString(),fill:"red","font-family":"sans-serif","font-size":"12","text-anchor":"middle"},children:[{type:"text",value:e.message||"PCB Footprint Overlap Error",name:"",attributes:{},children:[]}],value:""});for(let A of l){let m=tt(o,{x:A.x,y:A.y});if(r.push({name:"rect",type:"element",attributes:{x:(m.x-5).toString(),y:(m.y-5).toString(),width:"10",height:"10",fill:"red",transform:`rotate(45 ${m.x} ${m.y})`},children:[],value:""}),l.length>1)r.push({name:"line",type:"element",attributes:{x1:h.x.toString(),y1:h.y.toString(),x2:m.x.toString(),y2:m.y.toString(),stroke:"red","stroke-width":"1.5","stroke-dasharray":"2,2"},children:[],value:""})}}return OJn(r)}function GJn(e,t,n){let{transform:o,shouldDrawErrors:i}=n;if(!i)return[];let r=[],s=[];for(let d of e.pcb_component_ids){let u=t.find((h)=>h.type==="pcb_component"&&h.pcb_component_id===d);if(u)s.push(u.center)}if(s.length===0)return[];let a=s.reduce((d,u)=>d+u.x,0)/s.length,c=s.reduce((d,u)=>d+u.y,0)/s.length,l=tt(o,{x:a,y:c});r.push({name:"rect",type:"element",attributes:{x:(l.x-5).toString(),y:(l.y-5).toString(),width:"10",height:"10",fill:"red",transform:`rotate(45 ${l.x} ${l.y})`,"data-type":"pcb_courtyard_overlap_error","data-pcb-layer":"overlay"},children:[],value:""}),r.push({name:"text",type:"element",attributes:{x:l.x.toString(),y:(l.y-15).toString(),fill:"red","font-family":"sans-serif","font-size":"12","text-anchor":"middle","data-type":"pcb_courtyard_overlap_error","data-pcb-layer":"overlay"},children:[{type:"text",value:e.message||"PCB Courtyard Overlap",name:"",attributes:{},children:[]}],value:""});for(let d of s){let u=tt(o,d);r.push({name:"rect",type:"element",attributes:{x:(u.x-5).toString(),y:(u.y-5).toString(),width:"10",height:"10",fill:"red",transform:`rotate(45 ${u.x} ${u.y})`,"data-type":"pcb_courtyard_overlap_error","data-pcb-layer":"overlay"},children:[],value:""})}if(s.length===2){let d=s.map((A)=>tt(o,A)),u=d[0],h=d[1];r.push({name:"line",type:"element",attributes:{x1:u.x.toString(),y1:u.y.toString(),x2:h.x.toString(),y2:h.y.toString(),stroke:"red","stroke-width":"1.5","stroke-dasharray":"4,3","data-type":"pcb_courtyard_overlap_error","data-pcb-layer":"overlay"},children:[],value:""})}return r}function YJn(e){return e.map((t)=>({...t,attributes:{...t.attributes??{},"data-type":t.attributes?.["data-type"]??"pcb_component_outside_board_error","data-pcb-layer":t.attributes?.["data-pcb-layer"]??"overlay"}}))}function VJn(e,t){let n=e.pcb_component_id;if(!n)return e.component_bounds??null;let o=t.find((i)=>i.type==="pcb_component"&&i.pcb_component_id===n);if(o?.center&&o?.width&&o?.height)return{min_x:o.center.x-o.width/2,max_x:o.center.x+o.width/2,min_y:o.center.y-o.height/2,max_y:o.center.y+o.height/2};return e.component_bounds??null}function UJn(e,t,n){let{shouldDrawErrors:o,transform:i}=n;if(!o)return[];let r=VJn(e,t);if(!r)return[];let s=tt(i,{x:r.min_x,y:r.min_y}),a=tt(i,{x:r.max_x,y:r.max_y}),c=Math.min(s.x,a.x),l=Math.min(s.y,a.y),d=Math.abs(a.x-s.x),u=Math.abs(a.y-s.y),h=c+d/2,A=l+u/2,m=[{type:"element",name:"rect",value:"",attributes:{x:c.toString(),y:l.toString(),width:d.toString(),height:u.toString(),fill:"none",stroke:"red","stroke-width":"1.5","stroke-dasharray":"4,2"},children:[]},{type:"element",name:"rect",value:"",attributes:{x:(h-5).toString(),y:(A-5).toString(),width:"10",height:"10",fill:"red",transform:`rotate(45 ${h} ${A})`},children:[]},{type:"element",name:"text",value:"",attributes:{x:h.toString(),y:(l-10).toString(),fill:"red","font-family":"sans-serif","font-size":"12","text-anchor":"middle"},children:[{type:"text",name:"",value:e.message??"PCB component extends outside board boundaries",attributes:{},children:[]}]}];return YJn(m)}function MJ(e){return e!==void 0&&typeof e.x==="number"&&Number.isFinite(e.x)&&typeof e.y==="number"&&Number.isFinite(e.y)}function WJn(e,t){if(e.type==="pcb_via_trace_clearance_error")return t.find((n)=>n.type==="pcb_via"&&n.pcb_via_id===e.pcb_via_id);return t.find((n)=>n.type==="pcb_smtpad"&&n.pcb_smtpad_id===e.pcb_pad_id||n.type==="pcb_plated_hole"&&n.pcb_plated_hole_id===e.pcb_pad_id)}function XJn(e){if(!e)return;if("x"in e&&"y"in e&&MJ(e))return{x:e.x,y:e.y};if(e.type==="pcb_smtpad"&&e.shape==="polygon"&&e.points.length>0){let t=e.points.filter(MJ);if(t.length===0)return;let n=t.map((i)=>i.x),o=t.map((i)=>i.y);return{x:(Math.min(...n)+Math.max(...n))/2,y:(Math.min(...o)+Math.max(...o))/2}}return}function KJn(e){if(e.route_type==="through_pad")return[e.start,e.end].filter(MJ);let t=e;return MJ(t)?[{x:t.x,y:t.y}]:[]}function jJn(e){if(!e)return;let t,n;for(let o of e.route){let i=KJn(o);if(!t&&i[0])t=i[0];if(i.length>0)n=i[i.length-1]}return t&&n?{start:t,end:n}:void 0}function qJn(e,t){return{x:(e.x+t.x)/2,y:(e.y+t.y)/2}}function lBe(e,t,n){let o=e.x-t.x,i=e.y-t.y;if(o*o+i*i<0.25)return;return{type:"element",name:"line",value:"",attributes:{x1:e.x.toString(),y1:e.y.toString(),x2:t.x.toString(),y2:t.y.toString(),stroke:"red","stroke-width":"1.5","stroke-dasharray":"2,2","data-error-reference":n},children:[]}}function JJn(e,t){return e.map((n)=>({...n,attributes:{...n.attributes??{},"data-type":n.attributes?.["data-type"]??t,"data-pcb-layer":n.attributes?.["data-pcb-layer"]??"overlay"}}))}function $Jn(e,t,n){let{shouldDrawErrors:o,transform:i}=n;if(!o)return[];let r=XJn(WJn(e,t)),s=t.find((y)=>y.type==="pcb_trace"&&y.pcb_trace_id===e.pcb_trace_id),a=jJn(s),c=MJ(e.center)?e.center:r??(a?qJn(a.start,a.end):void 0);if(!c)return[];let l=tt(i,c),d=r?tt(i,r):void 0,u=a?{start:tt(i,a.start),end:tt(i,a.end)}:void 0,h=[u?lBe(u.start,l,"trace-start"):void 0,u?lBe(u.end,l,"trace-end"):void 0,d?lBe(d,l,"obstacle"):void 0].filter((y)=>y!==void 0),A=e.type==="pcb_pad_trace_clearance_error"?"Pad/trace":"Via/trace",{actual_clearance:m,minimum_clearance:p}=e,g=m!==void 0&&p!==void 0?`${A} clearance ${m} is below minimum ${p}`:e.type==="pcb_pad_trace_clearance_error"?"Pad and trace too close":"Via and trace too close",_=e.message??g,f=[...h,{type:"element",name:"rect",value:"",attributes:{x:(l.x-5).toString(),y:(l.y-5).toString(),width:"10",height:"10",fill:"red",transform:`rotate(45 ${l.x} ${l.y})`},children:[]},{type:"element",name:"text",value:"",attributes:{x:l.x.toString(),y:(l.y-15).toString(),fill:"red","font-family":"sans-serif","font-size":"12","text-anchor":"middle"},children:[{type:"text",name:"",value:_,attributes:{},children:[]}]}];return JJn(f,e.type)}function ZJn(e,t){let{transform:n}=t;if(!Array.isArray(e.route)||e.route.length<2)return[];let o=e.route[0],i=e.route[e.route.length-1],r=o.x===i.x&&o.y===i.y,s=e.route.slice(0,r?-1:void 0).map((d,u)=>{let[h,A]=tt(n,[d.x,d.y]);return u===0?`M ${h} ${A}`:`L ${h} ${A}`}).join(" ")+(r||e.is_filled?" Z":""),a=e.color||"rgba(255,255,255,0.5)",c=a,l;if(e.is_filled&&e.has_stroke!==!1&&e.stroke_width>0)try{let d=Oq(a);if(d.alpha()<1)c=d.alpha(1).rgb().string(),l=d.alpha().toString()}catch{}return[{name:"path",type:"element",attributes:{class:"pcb-fabrication-note-path",stroke:e.has_stroke===!1?"none":c,fill:e.is_filled?c:"none",d:s,...l===void 0?{}:{opacity:l},"stroke-width":(e.stroke_width*Math.abs(n.a)).toString(),"data-pcb-component-id":e.pcb_component_id,"data-pcb-fabrication-note-path-id":e.pcb_fabrication_note_path_id,"data-type":"pcb_fabrication_note_path","data-pcb-layer":"overlay"},value:"",children:[]}]}function wmt(e){switch(e){case"top_left":return{textAnchor:"start",dominantBaseline:"text-before-edge"};case"top_center":return{textAnchor:"middle",dominantBaseline:"text-before-edge"};case"top_right":return{textAnchor:"end",dominantBaseline:"text-before-edge"};case"center_left":return{textAnchor:"start",dominantBaseline:"central"};case"center_right":return{textAnchor:"end",dominantBaseline:"central"};case"bottom_left":return{textAnchor:"start",dominantBaseline:"text-after-edge"};case"bottom_center":return{textAnchor:"middle",dominantBaseline:"text-after-edge"};case"bottom_right":return{textAnchor:"end",dominantBaseline:"text-after-edge"};case"center":default:return{textAnchor:"middle",dominantBaseline:"central"}}}function e$n(e,t){let{transform:n,layer:o}=t,{anchor_position:i,anchor_alignment:r="center",text:s,font_size:a=1,layer:c="top",color:l,ccw_rotation:d=0}=e;if(o&&c!==o)return[];if(!i||typeof i.x!=="number"||typeof i.y!=="number")return Z0(`[pcb_fabrication_note_text] Invalid anchor_position for "${e.pcb_fabrication_note_text_id}": expected {x: number, y: number}, got ${JSON.stringify(i)}`),[];let[u,h]=tt(n,[i.x,i.y]),A=a*Math.abs(n.a),{textAnchor:m,dominantBaseline:p}=wmt(r),g=_o(So(u,h),wa(-d*Math.PI/180));return[{name:"text",type:"element",attributes:{x:"0",y:"0","font-family":rQ,"font-size":A.toString(),"text-anchor":m,"dominant-baseline":p,transform:B_(g),class:"pcb-fabrication-note-text",fill:l||"rgba(255,255,255,0.5)","data-type":"pcb_fabrication_note_text","data-pcb-layer":"overlay"},children:[{type:"text",value:s,name:"",attributes:{},children:[]}],value:""}]}function o$n(e,t){let{transform:n,layer:o}=t,{center:i,width:r,height:s,stroke_width:a,is_filled:c,has_stroke:l,is_stroke_dashed:d,color:u,layer:h="top",pcb_component_id:A,pcb_fabrication_note_rect_id:m,corner_radius:p}=e;if(o&&h!==o)return[];if(!i||typeof i.x!=="number"||typeof i.y!=="number"||typeof r!=="number"||typeof s!=="number")return Z0(`[pcb_fabrication_note_rect] Invalid data for "${m}": expected center {x: number, y: number}, width: number, height: number, got center=${JSON.stringify(i)}, width=${JSON.stringify(r)}, height=${JSON.stringify(s)}`),[];let g=r/2,_=s/2,[f,y]=tt(n,[i.x-g,i.y+_]),[x,C]=tt(n,[i.x+g,i.y-_]),I=Math.min(f,x),b=Math.min(y,C),P=Math.abs(x-f),E=Math.abs(C-y),w=(typeof a==="number"?a:0)*Math.abs(n.a),T=u??t$n,Q=typeof p==="number"&&p>0?p:0,N=Q*Math.abs(n.a),F=Q*Math.abs(n.d),H={x:I.toString(),y:b.toString(),width:P.toString(),height:E.toString(),class:"pcb-fabrication-note-rect","data-type":"pcb_fabrication_note_rect","data-pcb-fabrication-note-rect-id":m,"data-pcb-layer":"overlay"};if(A!==void 0)H["data-pcb-component-id"]=A;if(N>0)H.rx=N.toString();if(F>0)H.ry=F.toString();if(c)H.fill=u??n$n;else H.fill="none";if(l??w>0){if(H.stroke=T,H["stroke-width"]=w.toString(),d){let U=0.2*Math.abs(n.a),X=0.1*Math.abs(n.a);H["stroke-dasharray"]=`${U} ${X}`}}else H.stroke="none";return[{name:"rect",type:"element",value:"",attributes:H,children:[]}]}function dBe(e){let t=Math.hypot(e.x,e.y)||1;return{x:e.x/t,y:e.y/t}}function b0t(e){return e.map((t,n)=>n===0?`M ${t.x} ${t.y}`:`L ${t.x} ${t.y}`).join(" ")}function a$n(e,t){let{transform:n,layer:o}=t,{from:i,to:r,text:s,font_size:a=1,color:c,arrow_size:l,layer:d,pcb_component_id:u,pcb_fabrication_note_dimension_id:h,offset_distance:A,offset_direction:m,text_ccw_rotation:p}=e;if(o&&d&&d!==o)return[];if(!i||!r||typeof i!=="object"||typeof r!=="object")return Z0(`[pcb_fabrication_note_dimension] Invalid endpoints for "${h}": expected {from: {x, y}, to: {x, y}}, got from=${JSON.stringify(i)}, to=${JSON.stringify(r)}`),[];if(typeof i.x!=="number"||typeof i.y!=="number"||typeof r.x!=="number"||typeof r.y!=="number")return Z0(`[pcb_fabrication_note_dimension] Invalid point values for "${h}": x and y must be numbers, got from=${JSON.stringify(i)}, to=${JSON.stringify(r)}`),[];let g=typeof l==="number"?l:void 0;if(g===void 0||!Number.isFinite(g)||g<=0)return Z0(`[pcb_fabrication_note_dimension] Invalid arrow_size for "${h}": expected positive number, got ${JSON.stringify(l)}`),[];let _=g,f=dBe({x:r.x-i.x,y:r.y-i.y});if(Number.isNaN(f.x)||Number.isNaN(f.y))return[];let y={x:-f.y,y:f.x},x=m&&typeof m.x==="number"&&typeof m.y==="number",C=x?dBe({x:m.x,y:m.y}):{x:0,y:0},I=typeof A==="number"?A:0,b={x:C.x*I,y:C.y*I},P=(Ce)=>({x:Ce.x+b.x,y:Ce.y+b.y}),E=P(i),B=P(r),w=_/2,T={x:E.x+f.x*_,y:E.y+f.y*_},Q={x:B.x-f.x*_,y:B.y-f.y*_},N=[ye(E),ye({x:T.x+y.x*w,y:T.y+y.y*w}),ye({x:T.x-y.x*w,y:T.y-y.y*w})],F=[ye(B),ye({x:Q.x+y.x*w,y:Q.y+y.y*w}),ye({x:Q.x-y.x*w,y:Q.y-y.y*w})],[H,z]=tt(n,[T.x,T.y]),[Y,U]=tt(n,[Q.x,Q.y]),X=_/5*Math.abs(n.a),V=c||"rgba(255,255,255,0.5)",W=x&&(Math.abs(C.x)>Number.EPSILON||Math.abs(C.y)>Number.EPSILON)?C:y,j=I+_,q=(Ce)=>{let ve={x:Ce.x+W.x*j,y:Ce.y+W.y*j},[De,Ze]=tt(n,[Ce.x,Ce.y]),[st,et]=tt(n,[ve.x,ve.y]);return{name:"path",type:"element",value:"",attributes:{d:`M ${De} ${Ze} L ${st} ${et}`,stroke:V,fill:"none","stroke-width":X.toString(),"stroke-linecap":"round",class:"pcb-fabrication-note-dimension-extension"},children:[]}},ne=[q(i),q(r)],ce={x:(i.x+r.x)/2+b.x,y:(i.y+r.y)/2+b.y},[oe,ie]=tt(n,[E.x,E.y]),[J,ee]=tt(n,[B.x,B.y]),se=dBe({x:J-oe,y:ee-ie}),le=Math.atan2(se.y,se.x)*180/Math.PI;if(le>90||le<-90)le+=180;let he=typeof p==="number"&&Number.isFinite(p)?le-p:le,ue=0;if(s&&typeof p==="number"&&Number.isFinite(p)){let Ce=s.length*a*r$n,ve=a,De=p*Math.PI/180,Ze=Math.abs(Math.sin(De)),st=Math.abs(Math.cos(De)),et=Ce/2,lt=ve/2;ue=et*Ze+lt*st+a*s$n}let Ae=_*i$n+ue,_e={x:ce.x+y.x*Ae,y:ce.y+y.y*Ae},[Pe,Ee]=tt(n,[_e.x,_e.y]),Te=a*Math.abs(n.a),be=[...ne,{name:"path",type:"element",value:"",attributes:{d:`M ${H} ${z} L ${Y} ${U}`,stroke:V,fill:"none","stroke-width":X.toString(),"stroke-linecap":"round",class:"pcb-fabrication-note-dimension-line"},children:[]},{name:"path",type:"element",value:"",attributes:{d:`${b0t(N)} Z`,fill:V,class:"pcb-fabrication-note-dimension-arrow"},children:[]},{name:"path",type:"element",value:"",attributes:{d:`${b0t(F)} Z`,fill:V,class:"pcb-fabrication-note-dimension-arrow"},children:[]}];if(s)be.push({name:"text",type:"element",value:"",attributes:{x:Pe.toString(),y:Ee.toString(),fill:V,"font-size":Te.toString(),"font-family":rQ,"text-anchor":"middle","dominant-baseline":"central",class:"pcb-fabrication-note-dimension-text",transform:`rotate(${he} ${Pe} ${Ee})`},children:[{type:"text",name:"",value:s,attributes:{},children:[]}]});let me={class:"pcb-fabrication-note-dimension","data-type":"pcb_fabrication_note_dimension","data-pcb-fabrication-note-dimension-id":h,"data-pcb-layer":d??"overlay"};if(u!==void 0)me["data-pcb-component-id"]=u;return[{name:"g",type:"element",value:"",attributes:me,children:be}];function ye(Ce){let[ve,De]=tt(n,[Ce.x,Ce.y]);return{x:ve,y:De}}}function uBe(e){let t=Math.hypot(e.x,e.y)||1;return{x:e.x/t,y:e.y/t}}function S0t(e){return e.map((t,n)=>n===0?`M ${t.x} ${t.y}`:`L ${t.x} ${t.y}`).join(" ")}function c$n(e,t){let{transform:n}=t,{from:o,to:i,text:r,font_size:s=1,color:a,arrow_size:c,offset_distance:l,offset_direction:d,text_ccw_rotation:u}=e;if(!o||!i)return Z0(`[pcb_note_dimension] Invalid endpoints for "${e.pcb_note_dimension_id}": expected {from: {x, y}, to: {x, y}}, got from=${JSON.stringify(o)}, to=${JSON.stringify(i)}`),[];if(!Number.isFinite(c)||c<=0)return Z0(`[pcb_note_dimension] Invalid arrow_size for "${e.pcb_note_dimension_id}": expected positive number, got ${JSON.stringify(c)}`),[];let h=uBe({x:i.x-o.x,y:i.y-o.y});if(Number.isNaN(h.x)||Number.isNaN(h.y))return[];let A={x:-h.y,y:h.x},m=d&&typeof d.x==="number"&&typeof d.y==="number",p=m?uBe({x:d.x,y:d.y}):{x:0,y:0},g=typeof l==="number"?l:0,_={x:p.x*g,y:p.y*g},f=(_e)=>({x:_e.x+_.x,y:_e.y+_.y}),y=f(o),x=f(i),C=c/2,I={x:y.x+h.x*c,y:y.y+h.y*c},b={x:x.x-h.x*c,y:x.y-h.y*c},P=[Ae(y),Ae({x:I.x+A.x*C,y:I.y+A.y*C}),Ae({x:I.x-A.x*C,y:I.y-A.y*C})],E=[Ae(x),Ae({x:b.x+A.x*C,y:b.y+A.y*C}),Ae({x:b.x-A.x*C,y:b.y-A.y*C})],[B,w]=tt(n,[I.x,I.y]),[T,Q]=tt(n,[b.x,b.y]),N=c/5*Math.abs(n.a),F=a||fd.board.user_2,H=m&&(Math.abs(p.x)>Number.EPSILON||Math.abs(p.y)>Number.EPSILON)?p:A,z=g+c,Y=(_e)=>{let Pe={x:_e.x+H.x*z,y:_e.y+H.y*z},[Ee,Te]=tt(n,[_e.x,_e.y]),[be,me]=tt(n,[Pe.x,Pe.y]);return{name:"path",type:"element",value:"",attributes:{d:`M ${Ee} ${Te} L ${be} ${me}`,stroke:F,fill:"none","stroke-width":N.toString(),"stroke-linecap":"round",class:"pcb-note-dimension-extension"},children:[]}},U=[Y(o),Y(i)],X={x:(o.x+i.x)/2+_.x,y:(o.y+i.y)/2+_.y},[V,W]=tt(n,[y.x,y.y]),[j,q]=tt(n,[x.x,x.y]),ne=uBe({x:j-V,y:q-W}),ce=Math.atan2(ne.y,ne.x)*180/Math.PI;if(ce>90||ce<-90)ce+=180;let oe=typeof u==="number"&&Number.isFinite(u)?ce-u:ce,ie=0;if(r&&typeof u==="number"&&Number.isFinite(u)){let _e=r.length*s*0.6,Pe=s,Ee=u*Math.PI/180,Te=Math.abs(Math.sin(Ee)),be=Math.abs(Math.cos(Ee)),me=_e/2,ye=Pe/2;ie=me*Te+ye*be+s*0.3}let J=c*1.5+ie,ee={x:X.x+A.x*J,y:X.y+A.y*J},[se,le]=tt(n,[ee.x,ee.y]),he=s*Math.abs(n.a),ue=[...U,{name:"path",type:"element",value:"",attributes:{d:`M ${B} ${w} L ${T} ${Q}`,stroke:F,fill:"none","stroke-width":N.toString(),"stroke-linecap":"round",class:"pcb-note-dimension-line"},children:[]},{name:"path",type:"element",value:"",attributes:{d:`${S0t(P)} Z`,fill:F,class:"pcb-note-dimension-arrow"},children:[]},{name:"path",type:"element",value:"",attributes:{d:`${S0t(E)} Z`,fill:F,class:"pcb-note-dimension-arrow"},children:[]}];if(r)ue.push({name:"text",type:"element",value:"",attributes:{x:se.toString(),y:le.toString(),fill:F,"font-size":he.toString(),"font-family":"Arial, sans-serif","text-anchor":"middle","dominant-baseline":"central",class:"pcb-note-dimension-text",transform:`rotate(${oe} ${se} ${le})`},children:[{type:"text",name:"",value:r,attributes:{},children:[]}]});return[{name:"g",type:"element",value:"",attributes:{class:"pcb-note-dimension","data-type":"pcb_note_dimension","data-pcb-note-dimension-id":e.pcb_note_dimension_id,"data-pcb-layer":"overlay"},children:ue}];function Ae(_e){let[Pe,Ee]=tt(n,[_e.x,_e.y]);return{x:Pe,y:Ee}}}function d$n(e,t){let{transform:n}=t,{anchor_position:o,text:i,font_size:r=1,anchor_alignment:s="center",color:a}=e;if(!o||typeof o.x!=="number"||typeof o.y!=="number")return Z0(`[pcb_note_text] Invalid anchor_position for "${e.pcb_note_text_id}": expected {x: number, y: number}, got ${JSON.stringify(o)}`),[];if(typeof i!=="string"||i.length===0)return Z0(`[pcb_note_text] Invalid text for "${e.pcb_note_text_id}": expected non-empty string, got ${JSON.stringify(i)}`),[];let[c,l]=tt(n,[o.x,o.y]),d=r*Math.abs(n.a),{textAnchor:u,dominantBaseline:h}=wmt(s),A=i.split(`
`),m=A.length===1?[{type:"text",name:"",value:i,attributes:{},children:[]}]:A.map((g,_)=>({type:"element",name:"tspan",value:"",attributes:{x:c.toString(),..._>0?{dy:"1em"}:{}},children:[{type:"text",name:"",value:g,attributes:{},children:[]}]}));return[{name:"text",type:"element",value:"",attributes:{x:c.toString(),y:l.toString(),fill:a??l$n,"font-family":rQ,"font-size":d.toString(),"text-anchor":u,"dominant-baseline":h,class:"pcb-note-text","data-type":"pcb_note_text","data-pcb-note-text-id":e.pcb_note_text_id,"data-pcb-layer":"overlay"},children:m}]}function m$n(e,t){let{transform:n}=t,{center:o,width:i,height:r,stroke_width:s,is_filled:a,has_stroke:c,is_stroke_dashed:l,color:d,corner_radius:u}=e;if(!o||typeof o.x!=="number"||typeof o.y!=="number"||typeof i!=="number"||typeof r!=="number")return Z0(`[pcb_note_rect] Invalid data for "${e.pcb_note_rect_id}": expected center {x: number, y: number}, width: number, height: number, got center=${JSON.stringify(o)}, width=${JSON.stringify(i)}, height=${JSON.stringify(r)}`),[];let h=i/2,A=r/2,[m,p]=tt(n,[o.x-h,o.y+A]),[g,_]=tt(n,[o.x+h,o.y-A]),f=Math.min(m,g),y=Math.min(p,_),x=Math.abs(g-m),C=Math.abs(_-p),b=(typeof s==="number"?s:0)*Math.abs(n.a),P=typeof u==="number"&&u>0?u:0,E=P*Math.abs(n.a),B=P*Math.abs(n.d),w=d??u$n,T={x:f.toString(),y:y.toString(),width:x.toString(),height:C.toString(),class:"pcb-note-rect","data-type":"pcb_note_rect","data-pcb-note-rect-id":e.pcb_note_rect_id,"data-pcb-layer":"overlay"};if(E>0)T.rx=E.toString();if(B>0)T.ry=B.toString();if(a)T.fill=d??h$n;else T.fill="none";if(c??b>0){if(T.stroke=w,T["stroke-width"]=b.toString(),l){let F=0.2*Math.abs(n.a),H=0.1*Math.abs(n.a);T["stroke-dasharray"]=`${F} ${H}`}}else T.stroke="none";return[{name:"rect",type:"element",value:"",attributes:T,children:[]}]}function A$n(e,t){let{transform:n}=t;if(!Array.isArray(e.route)||e.route.length===0)return Z0(`[pcb_note_path] Invalid route for "${e.pcb_note_path_id}": expected non-empty array of points, got ${JSON.stringify(e.route)}`),[];for(let s of e.route)if(typeof s.x!=="number"||typeof s.y!=="number")return Z0(`[pcb_note_path] Invalid point in route for "${e.pcb_note_path_id}": expected {x: number, y: number}, got ${JSON.stringify(s)}`),[];let o=e.route.map((s,a)=>{let[c,l]=tt(n,[s.x,s.y]);return a===0?`M ${c} ${l}`:`L ${c} ${l}`}).join(" "),i=e.stroke_width*Math.abs(n.a);return[{name:"path",type:"element",value:"",attributes:{d:o,stroke:e.color??p$n,fill:"none","stroke-width":i.toString(),class:"pcb-note-path","data-type":"pcb_note_path","data-pcb-note-path-id":e.pcb_note_path_id,"data-pcb-layer":"overlay"},children:[]}]}function g$n(e,t){let{transform:n}=t,{x1:o,y1:i,x2:r,y2:s,stroke_width:a,color:c,is_dashed:l}=e;if(typeof o!=="number"||typeof i!=="number"||typeof r!=="number"||typeof s!=="number")return Z0(`[pcb_note_line] Invalid coordinates for "${e.pcb_note_line_id}": expected x1, y1, x2, y2 as numbers, got x1=${JSON.stringify(o)}, y1=${JSON.stringify(i)}, x2=${JSON.stringify(r)}, y2=${JSON.stringify(s)}`),[];let[d,u]=tt(n,[o,i]),[h,A]=tt(n,[r,s]),p=(typeof a==="number"?a:0)*Math.abs(n.a),g={x1:d.toString(),y1:u.toString(),x2:h.toString(),y2:A.toString(),stroke:c??_$n,"stroke-width":p.toString(),"stroke-linecap":"round",class:"pcb-note-line","data-type":"pcb_note_line","data-pcb-note-line-id":e.pcb_note_line_id,"data-pcb-layer":"overlay"};if(l){let f=0.2*Math.abs(n.a),y=0.1*Math.abs(n.a);g["stroke-dasharray"]=`${f} ${y}`}return[{name:"line",type:"element",value:"",attributes:g,children:[]}]}function y$n(e,t){let n=t.boardOwnerMap?.get(e.pcb_board_id);if(!n)return[];let[o,i]=tt(t.transform,[n.center.x+e.start.x,n.center.y+e.start.y]),[r,s]=tt(t.transform,[n.center.x+e.end.x,n.center.y+e.end.y]),a=Math.abs(t.transform.a),c=Math.hypot(r-o,s-i),l=Math.min(0.5*a,c*0.8/f$n),d=Math.atan2(s-i,r-o);if(d>=Math.PI/2)d-=Math.PI;if(d<-Math.PI/2)d+=Math.PI;let u=_o(So((o+r)/2,(i+s)/2),wa(d));return[{name:"line",type:"element",value:"",attributes:{x1:o.toString(),y1:i.toString(),x2:r.toString(),y2:s.toString(),stroke:"#ffd54f","stroke-width":(0.15*a).toString(),"stroke-dasharray":`${0.75*a} ${0.4*a}`,"stroke-linecap":"butt",class:"pcb-bend-line","data-type":"pcb_bend","data-pcb-bend-id":e.pcb_bend_id,"data-pcb-board-id":e.pcb_board_id,"data-pcb-layer":"overlay"},children:[{name:"title",type:"element",value:"",attributes:{},children:[{name:"",type:"text",value:`${e.name??e.pcb_bend_id}: ${e.bend_angle}°, radius ${e.bend_radius} mm`,attributes:{},children:[]}]}]},...c>0?[{name:"text",type:"element",value:"",attributes:{x:"0",y:(-(l*0.6+0.2*a)).toString(),fill:"#ffd54f","font-family":rQ,"font-size":l.toString(),"text-anchor":"middle","dominant-baseline":"central",transform:B_(u),class:"pcb-bend-line-label","data-type":"pcb_bend","data-pcb-bend-id":e.pcb_bend_id,"data-pcb-board-id":e.pcb_board_id,"data-pcb-layer":"overlay"},children:[{name:"",type:"text",value:Tmt,attributes:{},children:[]}]}]:[]]}function x$n(e,t){let{transform:n,colorMap:o,showSolderMask:i}=t,[r,s]=tt(n,[e.x,e.y]),a=Imt(e,t.circuitJson),c=Array.isArray(e.layers)&&e.layers[0]||e.layer||"top",l=c,d=Boolean(e.is_covered_with_solder_mask),u=(e.soldermask_margin??0)*Math.abs(n.a),h=i&&d&&u!==0,A=o.soldermaskWithCopperUnderneath.top;if(e.shape==="pill"){let m=e.outer_width*Math.abs(n.a),p=e.outer_height*Math.abs(n.a),g=e.hole_width*Math.abs(n.a),_=e.hole_height*Math.abs(n.a),f=e.ccw_rotation||0,y=f?`translate(${r} ${s}) rotate(${-f})`:`translate(${r} ${s})`,x=f?`translate(${r} ${s}) rotate(${-f})`:`translate(${r} ${s})`,C=(b,P)=>{if(b>P){let E=P/2,B=b-2*E;return`M${-b/2+E},${-E} h${B} a${E},${E} 0 0 1 0,${P} h${-B} a${E},${E} 0 0 1 0,${-P} z`}else if(P>b){let E=b/2,B=P-2*E;return`M${E},${-P/2+E} v${B} a${E},${E} 0 0 1 ${-b},0 v${-B} a${E},${E} 0 0 1 ${b},0 z`}else{let E=b/2;return`M${-E},0 a${E},${E} 0 0 1 ${b},0 a${E},${E} 0 0 1 ${-b},0 z`}},I=[{name:"path",type:"element",attributes:{class:"pcb-hole-outer",fill:o.copper.top,d:C(m,p),transform:y,"data-type":"pcb_plated_hole","data-pcb-layer":c},value:"",children:[]},{name:"path",type:"element",attributes:{class:"pcb-hole-inner",fill:o.drill,d:C(g,_),transform:x,"data-type":"pcb_plated_hole_drill","data-pcb-layer":"drill"},value:"",children:[]}];if(h){let b=m+2*u,P=p+2*u;if(u<0)I=[{name:"path",type:"element",attributes:{class:"pcb-hole-outer-covered",fill:A,d:C(m,p),transform:y,"data-type":"pcb_plated_hole","data-pcb-layer":c},value:"",children:[]},{name:"path",type:"element",attributes:{class:"pcb-hole-outer-exposed",fill:o.copper.top,d:C(b,P),transform:y,"data-type":"pcb_soldermask","data-pcb-layer":l},value:"",children:[]},I[1]];else I.unshift({name:"path",type:"element",attributes:{class:"pcb-soldermask-cutout",fill:o.substrate,d:C(b,P),transform:y,"data-type":"pcb_soldermask_opening","data-pcb-layer":l},value:"",children:[]})}return[{name:"g",type:"element",attributes:{"data-type":"pcb_plated_hole","data-pcb-layer":"through",...a},children:I,value:""}]}if(e.shape==="oval"){let m=e.outer_width*Math.abs(n.a),p=e.outer_height*Math.abs(n.a),g=e.hole_width*Math.abs(n.a),_=e.hole_height*Math.abs(n.a),f=e.ccw_rotation||0,y=f?`translate(${r} ${s}) rotate(${-f})`:`translate(${r} ${s})`,x=[{name:"ellipse",type:"element",attributes:{class:"pcb-hole-outer",fill:o.copper.top,cx:"0",cy:"0",rx:(m/2).toString(),ry:(p/2).toString(),transform:y,"data-type":"pcb_plated_hole","data-pcb-layer":c},value:"",children:[]},{name:"ellipse",type:"element",attributes:{class:"pcb-hole-inner",fill:o.drill,cx:"0",cy:"0",rx:(g/2).toString(),ry:(_/2).toString(),transform:y,"data-type":"pcb_plated_hole_drill","data-pcb-layer":"drill"},value:"",children:[]}];return[{name:"g",type:"element",attributes:{"data-type":"pcb_plated_hole","data-pcb-layer":"through",...a},children:x,value:""}]}if(e.shape==="circle"){let m=e.outer_diameter*Math.abs(n.a),p=e.outer_diameter*Math.abs(n.a),g=e.hole_diameter*Math.abs(n.a),_=e.hole_diameter*Math.abs(n.a),f=Math.min(m,p)/2,y=Math.min(g,_)/2,x=[{name:"circle",type:"element",attributes:{class:"pcb-hole-outer",fill:o.copper.top,cx:r.toString(),cy:s.toString(),r:f.toString(),"data-type":"pcb_plated_hole","data-pcb-layer":c},value:"",children:[]},{name:"circle",type:"element",attributes:{class:"pcb-hole-inner",fill:o.drill,cx:r.toString(),cy:s.toString(),r:y.toString(),"data-type":"pcb_plated_hole_drill","data-pcb-layer":"drill"},value:"",children:[]}];if(h){let C=f+u;if(u<0)x=[{name:"circle",type:"element",attributes:{class:"pcb-hole-outer-covered",fill:A,cx:r.toString(),cy:s.toString(),r:f.toString(),"data-type":"pcb_plated_hole","data-pcb-layer":c},value:"",children:[]},{name:"circle",type:"element",attributes:{class:"pcb-hole-outer-exposed",fill:o.copper.top,cx:r.toString(),cy:s.toString(),r:C.toString(),"data-type":"pcb_soldermask","data-pcb-layer":l},value:"",children:[]},x[1]];else x.unshift({name:"circle",type:"element",attributes:{class:"pcb-soldermask-cutout",fill:o.substrate,cx:r.toString(),cy:s.toString(),r:C.toString(),"data-type":"pcb_soldermask_opening","data-pcb-layer":l},value:"",children:[]})}return[{name:"g",type:"element",attributes:{"data-type":"pcb_plated_hole","data-pcb-layer":"through",...a},children:x,value:""}]}if(e.shape==="circular_hole_with_rect_pad"){let m=e,p=e.hole_diameter*Math.abs(n.a),g=e.rect_pad_width*Math.abs(n.a),_=e.rect_pad_height*Math.abs(n.a),f=(e.rect_border_radius??0)*Math.abs(n.a),y=e.rect_ccw_rotation??0,x=m.rect_ccw_rotation??0,C=x?`translate(${r} ${s}) rotate(${-x})`:void 0,I=x?(-g/2).toString():(r-g/2).toString(),b=x?(-_/2).toString():(s-_/2).toString(),P=p/2,[E,B]=tt(n,[m.x+(m.hole_offset_x??0),m.y+(m.hole_offset_y??0)]),w=[{name:"rect",type:"element",attributes:{class:"pcb-hole-outer-pad",fill:o.copper.top,...y?{x:(-g/2).toString(),y:(-_/2).toString(),transform:`translate(${r} ${s}) rotate(${-y})`}:{x:(r-g/2).toString(),y:(s-_/2).toString()},width:g.toString(),height:_.toString(),...C?{transform:C}:{},...f?{rx:f.toString(),ry:f.toString()}:{},"data-type":"pcb_plated_hole","data-pcb-layer":c},value:"",children:[]},{name:"circle",type:"element",attributes:{class:"pcb-hole-inner",fill:o.drill,cx:E.toString(),cy:B.toString(),r:P.toString(),"data-type":"pcb_plated_hole_drill","data-pcb-layer":"drill"},value:"",children:[]}];if(h){let T=g+2*u,Q=_+2*u,N=f+u;if(u<0)w=[{name:"rect",type:"element",attributes:{class:"pcb-hole-outer-covered",fill:A,...y?{x:(-g/2).toString(),y:(-_/2).toString(),transform:`translate(${r} ${s}) rotate(${-y})`}:{x:(r-g/2).toString(),y:(s-_/2).toString()},width:g.toString(),height:_.toString(),...C?{transform:C}:{},...f?{rx:f.toString(),ry:f.toString()}:{},"data-type":"pcb_plated_hole","data-pcb-layer":c},value:"",children:[]},{name:"rect",type:"element",attributes:{class:"pcb-hole-outer-exposed",fill:o.copper.top,...y?{x:(-T/2).toString(),y:(-Q/2).toString(),transform:`translate(${r} ${s}) rotate(${-y})`}:{x:(r-T/2).toString(),y:(s-Q/2).toString()},width:T.toString(),height:Q.toString(),...C?{transform:C}:{},...N>0?{rx:N.toString(),ry:N.toString()}:{},"data-type":"pcb_soldermask","data-pcb-layer":l},value:"",children:[]},w[1]];else w.unshift({name:"rect",type:"element",attributes:{class:"pcb-soldermask-cutout",fill:o.substrate,...y?{x:(-T/2).toString(),y:(-Q/2).toString(),transform:`translate(${r} ${s}) rotate(${-y})`}:{x:(r-T/2).toString(),y:(s-Q/2).toString()},width:T.toString(),height:Q.toString(),...C?{transform:C}:{},...f?{rx:N.toString(),ry:N.toString()}:{},"data-type":"pcb_soldermask_opening","data-pcb-layer":l},value:"",children:[]})}return[{name:"g",type:"element",attributes:{"data-type":"pcb_plated_hole","data-pcb-layer":"through",...a},children:w,value:""}]}if(e.shape==="pill_hole_with_rect_pad"){let m=e,p=m.rect_pad_width*Math.abs(n.a),g=m.rect_pad_height*Math.abs(n.a),_=(m.rect_border_radius??0)*Math.abs(n.a),f=m.hole_height*Math.abs(n.a),y=m.hole_width*Math.abs(n.a),x=m,C=x.hole_offset_x??0,I=x.hole_offset_y??0,[b,P]=tt(n,[m.x+C,m.y+I]),E=Math.min(f,y)/2,B=[{name:"rect",type:"element",attributes:{class:"pcb-hole-outer-pad",fill:o.copper.top,x:(r-p/2).toString(),y:(s-g/2).toString(),width:p.toString(),height:g.toString(),..._?{rx:_.toString(),ry:_.toString()}:{},"data-type":"pcb_plated_hole","data-pcb-layer":c},value:"",children:[]},{name:"rect",type:"element",attributes:{class:"pcb-hole-inner",fill:o.drill,x:(b-y/2).toString(),y:(P-f/2).toString(),width:y.toString(),height:f.toString(),rx:E.toString(),ry:E.toString(),"data-type":"pcb_plated_hole_drill","data-pcb-layer":"drill"},value:"",children:[]}];if(h){let w=p+2*u,T=g+2*u,Q=_+u;if(u<0)B=[{name:"rect",type:"element",attributes:{class:"pcb-hole-outer-covered",fill:A,x:(r-p/2).toString(),y:(s-g/2).toString(),width:p.toString(),height:g.toString(),..._?{rx:_.toString(),ry:_.toString()}:{},"data-type":"pcb_plated_hole","data-pcb-layer":c},value:"",children:[]},{name:"rect",type:"element",attributes:{class:"pcb-hole-outer-exposed",fill:o.copper.top,x:(r-w/2).toString(),y:(s-T/2).toString(),width:w.toString(),height:T.toString(),...Q>0?{rx:Q.toString(),ry:Q.toString()}:{},"data-type":"pcb_soldermask","data-pcb-layer":l},value:"",children:[]},B[1]];else B.unshift({name:"rect",type:"element",attributes:{class:"pcb-soldermask-cutout",fill:o.substrate,x:(r-w/2).toString(),y:(s-T/2).toString(),width:w.toString(),height:T.toString(),..._?{rx:Q.toString(),ry:Q.toString()}:{},"data-type":"pcb_soldermask_opening","data-pcb-layer":l},value:"",children:[]})}return[{name:"g",type:"element",attributes:{"data-type":"pcb_plated_hole","data-pcb-layer":"through",...a},children:B,value:""}]}if(e.shape==="rotated_pill_hole_with_rect_pad"){let m=e,p=m.rect_pad_width*Math.abs(n.a),g=m.rect_pad_height*Math.abs(n.a),_=(m.rect_border_radius??0)*Math.abs(n.a),f=m.hole_height*Math.abs(n.a),y=m.hole_width*Math.abs(n.a),x=m,C=x.hole_offset_x??0,I=x.hole_offset_y??0,[b,P]=tt(n,[m.x+C,m.y+I]),E=Math.min(f,y)/2,B=[{name:"rect",type:"element",attributes:{class:"pcb-hole-outer-pad",fill:o.copper.top,x:(-p/2).toString(),y:(-g/2).toString(),width:p.toString(),height:g.toString(),transform:`translate(${r} ${s}) rotate(${-m.rect_ccw_rotation})`,..._?{rx:_.toString(),ry:_.toString()}:{},"data-type":"pcb_plated_hole","data-pcb-layer":c},value:"",children:[]},{name:"rect",type:"element",attributes:{class:"pcb-hole-inner",fill:o.drill,x:(-y/2).toString(),y:(-f/2).toString(),width:y.toString(),height:f.toString(),rx:E.toString(),ry:E.toString(),transform:`translate(${b} ${P}) rotate(${-m.hole_ccw_rotation})`,"data-type":"pcb_plated_hole_drill","data-pcb-layer":"drill"},value:"",children:[]}];if(h){let w=p+2*u,T=g+2*u,Q=_+u;if(u<0)B=[{name:"rect",type:"element",attributes:{class:"pcb-hole-outer-covered",fill:A,x:(-p/2).toString(),y:(-g/2).toString(),width:p.toString(),height:g.toString(),transform:`translate(${r} ${s}) rotate(${-m.rect_ccw_rotation})`,..._?{rx:_.toString(),ry:_.toString()}:{},"data-type":"pcb_plated_hole","data-pcb-layer":c},value:"",children:[]},{name:"rect",type:"element",attributes:{class:"pcb-hole-outer-exposed",fill:o.copper.top,x:(-w/2).toString(),y:(-T/2).toString(),width:w.toString(),height:T.toString(),transform:`translate(${r} ${s}) rotate(${-m.rect_ccw_rotation})`,...Q>0?{rx:Q.toString(),ry:Q.toString()}:{},"data-type":"pcb_soldermask","data-pcb-layer":l},value:"",children:[]},B[1]];else B.push({name:"rect",type:"element",attributes:{class:"pcb-solder-mask",fill:A,x:(-w/2).toString(),y:(-T/2).toString(),width:w.toString(),height:T.toString(),transform:`translate(${r} ${s}) rotate(${-m.rect_ccw_rotation})`,..._?{rx:Q.toString(),ry:Q.toString()}:{},"data-type":"pcb_soldermask","data-pcb-layer":l},value:"",children:[]})}return[{name:"g",type:"element",attributes:{"data-type":"pcb_plated_hole","data-pcb-layer":"through",...a},children:B,value:""}]}if(e.shape==="hole_with_polygon_pad"){let m=e,p=m.pad_outline||[],g=m.x??0,_=m.y??0,y=p.map((b)=>tt(n,[g+b.x,_+b.y])).map((b)=>b.join(",")).join(" "),[x,C]=tt(n,[g+m.hole_offset_x,_+m.hole_offset_y]),I=()=>{if(m.hole_shape==="circle"){let P=(m.hole_diameter??0)*Math.abs(n.a)/2;return{name:"circle",type:"element",attributes:{class:"pcb-hole-inner",fill:o.drill,cx:x.toString(),cy:C.toString(),r:P.toString(),"data-type":"pcb_plated_hole_drill","data-pcb-layer":"drill"},value:"",children:[]}}if(m.hole_shape==="oval"){let b=(m.hole_width??0)*Math.abs(n.a),P=(m.hole_height??0)*Math.abs(n.a),E=b/2,B=P/2;return{name:"ellipse",type:"element",attributes:{class:"pcb-hole-inner",fill:o.drill,cx:x.toString(),cy:C.toString(),rx:E.toString(),ry:B.toString(),"data-type":"pcb_plated_hole_drill","data-pcb-layer":"drill"},value:"",children:[]}}if(m.hole_shape==="pill"||m.hole_shape==="rotated_pill"){let b=(m.hole_width??0)*Math.abs(n.a),P=(m.hole_height??0)*Math.abs(n.a),E=b>P,B=Math.min(b,P)/2,w=Math.abs(E?b-P:P-b),T=E?`M${-w/2},${-B} h${w} a${B},${B} 0 0 1 0,${P} h-${w} a${B},${B} 0 0 1 0,-${P} z`:`M${-B},${-w/2} v${w} a${B},${B} 0 0 0 ${b},0 v-${w} a${B},${B} 0 0 0 -${b},0 z`;return{name:"path",type:"element",attributes:{class:"pcb-hole-inner",fill:o.drill,d:T,transform:`translate(${x} ${C})`,"data-type":"pcb_plated_hole_drill","data-pcb-layer":"drill"},value:"",children:[]}}return{name:"g",type:"element",attributes:{},value:"",children:[]}};return[{name:"g",type:"element",attributes:{"data-type":"pcb_plated_hole","data-pcb-layer":"through",...a},children:[{name:"polygon",type:"element",attributes:{class:"pcb-hole-outer-pad",fill:o.copper.top,points:y,"data-type":"pcb_plated_hole","data-pcb-layer":c},value:"",children:[]},I()],value:""}]}return[]}function C$n(e,t){let{transform:n,layer:o,colorMap:i}=t;if(!e.route||!Array.isArray(e.route))return[];let r=e.route.map((d,u)=>{let[h,A]=tt(n,[d.x,d.y]);return u===0?`M ${h} ${A}`:`L ${h} ${A}`}).join(" "),s=e.route[0],a=e.route[e.route.length-1];if(s&&a&&s.x===a.x&&s.y===a.y)r+=" Z";let c=e.layer||"top";if(o&&c!==o)return[];let l=c==="bottom"?i.silkscreen.bottom:i.silkscreen.top;return[{name:"path",type:"element",attributes:{class:`pcb-silkscreen pcb-silkscreen-${c}`,d:r,fill:"none",stroke:l,"stroke-width":(e.stroke_width*Math.abs(n.a)).toString(),"stroke-linecap":"round","stroke-linejoin":"round","data-pcb-component-id":e.pcb_component_id,"data-pcb-silkscreen-path-id":e.pcb_silkscreen_path_id,"data-type":"pcb_silkscreen_path","data-pcb-layer":c},value:"",children:[]}]}function I$n(e,t){let{transform:n,layer:o,colorMap:i}=t,{layer:r="top"}=e;if(o&&r!==o)return[];if(e.shape!=="brep")return[];let s=r==="bottom"?i.silkscreen.bottom:i.silkscreen.top,a=mG(e.brep_shape.outer_ring.vertices,n);for(let c of e.brep_shape.inner_rings??[])a+=` ${mG(c.vertices,n)}`;return[{name:"path",type:"element",attributes:{class:`pcb-silkscreen pcb-silkscreen-${r}`,d:a,fill:s,"fill-rule":"evenodd",stroke:"none","data-pcb-component-id":e.pcb_component_id,"data-pcb-silkscreen-graphic-id":e.pcb_silkscreen_graphic_id,"data-type":"pcb_silkscreen_graphic","data-pcb-layer":r},value:"",children:[]}]}function P0t(e){let{text:t,anchorAlignment:n,fontSize:o,charAdvance:i,spaceAdvance:r,trailingSpacing:s,lineHeight:a,mapSegment:c}=e,l=t.split(`
`),d=l.length*a,u=l.map((f)=>b$n(f,i,r,s)),h=[],A=-d/2;for(let f=0;f<l.length;f++){let y=l[f]??"",C=-(u[f]??0)/2;for(let I of y){if(I===" "){C+=r;continue}let b=HR[I];if(b)for(let P of b)h.push(c(P,C,A,o));C+=i}A+=a}let m=S$n(h);if(!m)return{pathData:"",bounds:null};let p=FBe(n,m),g=E$n(h,p),_=M$n(m,p);return{pathData:B$n(g),bounds:_}}function b$n(e,t,n,o){let i=0;for(let r of e)i+=r===" "?n:t;return i>0?i-o:0}function S$n(e){if(e.length===0)return null;let{POSITIVE_INFINITY:t,POSITIVE_INFINITY:n,NEGATIVE_INFINITY:o,NEGATIVE_INFINITY:i}=Number;for(let r of e)t=Math.min(t,r.x1,r.x2),n=Math.min(n,r.y1,r.y2),o=Math.max(o,r.x1,r.x2),i=Math.max(i,r.y1,r.y2);return{minX:t,minY:n,maxX:o,maxY:i}}function FBe(e,t){return{x:-P$n(e,t),y:-v$n(e,t)}}function P$n(e,t){if(e==="top_left"||e==="center_left"||e==="bottom_left")return t.minX;if(e==="top_right"||e==="center_right"||e==="bottom_right")return t.maxX;return(t.minX+t.maxX)/2}function v$n(e,t){if(e==="top_left"||e==="top_center"||e==="top_right")return t.minY;if(e==="bottom_left"||e==="bottom_center"||e==="bottom_right")return t.maxY;return(t.minY+t.maxY)/2}function E$n(e,t){if(t.x===0&&t.y===0)return e;return e.map((n)=>({x1:n.x1+t.x,y1:n.y1+t.y,x2:n.x2+t.x,y2:n.y2+t.y}))}function M$n(e,t){return{minX:e.minX+t.x,minY:e.minY+t.y,maxX:e.maxX+t.x,maxY:e.maxY+t.y}}function B$n(e){return e.map((t)=>`M${t.x1} ${t.y1}L${t.x2} ${t.y2}`).join(" ")}function w$n(e,t){let n=null,i=e.split(`
`).map((r,s)=>{let a=Array.from(r),c=-(a.length*E0t*t)/2,l=s*t*1.1;return a.forEach((d,u)=>{let h=Dmt[d];if(!h)return;let A=c+u*E0t*t,m={minX:A+h.minX*t,maxX:A+h.maxX*t,minY:l+h.minY*t,maxY:l+h.maxY*t};n=n?{minX:Math.min(n.minX,m.minX),maxX:Math.max(n.maxX,m.maxX),minY:Math.min(n.minY,m.minY),maxY:Math.max(n.maxY,m.maxY)}:m}),{name:"tspan",type:"element",value:"",attributes:{x:c.toString(),y:l.toString()},children:[{name:"",type:"text",value:r,attributes:{},children:[]}]}});return{bounds:n,textNode:{name:"text",type:"element",value:"",attributes:{"font-family":rQ,"font-size":t.toString(),"text-anchor":"start","dominant-baseline":"alphabetic","xml:space":"preserve",fill:"black",stroke:"none"},children:i}}}function D$n(e,t){let{transform:n,layer:o,colorMap:i}=t,{anchor_position:r,text:s,font_size:a=1,layer:c="top",ccw_rotation:l=0,anchor_alignment:d="center",is_knockout:u=!1,knockout_padding:h,is_mirrored:A=!1}=e;if(o&&c!==o)return[];if(!r||typeof r.x!=="number"||typeof r.y!=="number")return Z0(`[pcb_silkscreen_text] Invalid anchor_position for "${e.pcb_silkscreen_text_id}": expected {x: number, y: number}, got ${JSON.stringify(r)}`),[];if(!s)return[];let[m,p]=tt(n,[r.x,r.y]),g=Math.abs(n.a),_=c==="bottom"?i.silkscreen.bottom:i.silkscreen.top,y=c==="bottom"?!0:A===!0;if(u){let B=w$n(s,a);if(!B.bounds)return[];let w=h?.left??a*0.5,T=h?.right??a*0.5,Q=h?.top??a*0.3,N=h?.bottom??a*0.3,F=B.bounds.minX-w,H=B.bounds.minY-Q,z=B.bounds.maxX-B.bounds.minX+w+T,Y=B.bounds.maxY-B.bounds.minY+Q+N,U={minX:F,minY:H,maxX:F+z,maxY:H+Y},X=FBe(d,U),V=F+X.x,W=H+X.y,j=[{name:"rect",type:"element",value:"",attributes:{x:F.toString(),y:H.toString(),width:z.toString(),height:Y.toString(),fill:"white"},children:[]},B.textNode],ne=X.x!==0||X.y!==0?[{name:"g",type:"element",value:"",attributes:{transform:`translate(${X.x} ${X.y})`},children:j}]:j,ce=B_(_o(So(m,p),wa(-l*Math.PI/180),...y?[xc(-1,1)]:[],xc(g,g))),oe=`silkscreen-knockout-mask-${e.pcb_silkscreen_text_id}-${T$n++}`;return[{name:"defs",type:"element",value:"",children:[{name:"mask",type:"element",value:"",attributes:{id:oe},children:ne}],attributes:{}},{name:"rect",type:"element",value:"",children:[],attributes:{x:V.toString(),y:W.toString(),width:z.toString(),height:Y.toString(),fill:_,mask:`url(#${oe})`,transform:ce,class:`pcb-silkscreen-text-knockout pcb-silkscreen-${c}`,"data-type":"pcb_silkscreen_text","data-pcb-silkscreen-text-id":e.pcb_silkscreen_text_id,"data-pcb-layer":c}}]}let x=a*g,C="middle",I="central";switch(d){case"top_left":C="start",I="text-before-edge";break;case"top_center":C="middle",I="text-before-edge";break;case"top_right":C="end",I="text-before-edge";break;case"center_left":C="start",I="central";break;case"center_right":C="end",I="central";break;case"bottom_left":C="start",I="text-after-edge";break;case"bottom_center":C="middle",I="text-after-edge";break;case"bottom_right":C="end",I="text-after-edge";break;case"center":default:C="middle",I="central";break}let b=_o(So(m,p),wa(-l*Math.PI/180),...y?[xc(-1,1)]:[]),P=s.split(`
`),E=P.length===1?[{type:"text",value:s,name:"",attributes:{},children:[]}]:P.map((B,w)=>({type:"element",name:"tspan",value:"",attributes:{x:"0",...w>0?{dy:x.toString()}:{}},children:[{type:"text",value:B,name:"",attributes:{},children:[]}]}));return[{name:"text",type:"element",attributes:{x:"0",y:"0",dx:"0",dy:"0",fill:_,"font-family":rQ,"font-size":x.toString(),"text-anchor":C,"dominant-baseline":I,transform:B_(b),class:`pcb-silkscreen-text pcb-silkscreen-${c}`,"data-pcb-silkscreen-text-id":e.pcb_silkscreen_text_id,stroke:"none","data-type":"pcb_silkscreen_text","data-pcb-layer":c},children:E,value:""}]}function N$n(e,t){let{transform:n,layer:o,colorMap:i}=t,{center:r,width:s,height:a,layer:c="top",pcb_silkscreen_rect_id:l,stroke_width:d,is_filled:u,has_stroke:h,is_stroke_dashed:A,corner_radius:m,ccw_rotation:p=0}=e;if(o&&c!==o)return[];if(!r||typeof r.x!=="number"||typeof r.y!=="number"||typeof s!=="number"||typeof a!=="number")return Z0(`[pcb_silkscreen_rect] Invalid data for "${l}": expected center {x: number, y: number}, width: number, height: number, got center=${JSON.stringify(r)}, width=${JSON.stringify(s)}, height=${JSON.stringify(a)}`),[];let[g,_]=tt(n,[r.x,r.y]),f=typeof m==="number"&&m>0?m:0,y=f*Math.abs(n.a),x=f*Math.abs(n.d),C=s*Math.abs(n.a),I=a*Math.abs(n.d),b=d*Math.abs(n.a),P=c==="bottom"?i.silkscreen.bottom:i.silkscreen.top,E={x:(-C/2).toString(),y:(-I/2).toString(),width:C.toString(),height:I.toString(),class:`pcb-silkscreen-rect pcb-silkscreen-${c}`,"data-pcb-silkscreen-rect-id":l,"data-type":"pcb_silkscreen_rect","data-pcb-layer":c};if(typeof p==="number"&&p!==0)E.transform=`translate(${g} ${_}) rotate(${-p})`;else E.x=(g-C/2).toString(),E.y=(_-I/2).toString();if(y>0)E.rx=y.toString();if(x>0)E.ry=x.toString();E.fill=u?P:"none";let B;if(h===void 0)B=b>0;else B=h;if(B){if(E.stroke=P,E["stroke-width"]=b.toString(),A){let T=0.1*Math.abs(n.a),Q=0.05*Math.abs(n.a);E["stroke-dasharray"]=`${T} ${Q}`}}else E.stroke="none";return[{name:"rect",type:"element",attributes:E,value:"",children:[]}]}function Q$n(e,t){let{transform:n,layer:o,colorMap:i}=t,{anchor_position:r,text:s,font_size:a="0.2mm",layer:c,ccw_rotation:l=0,anchor_alignment:d="center",is_knockout:u=!1,knockout_padding:h,is_mirrored:A=!1}=e,m=c??"top";if(o&&o!==m)return[];if(!r)return[];if(!s)return[];let[p,g]=tt(n,[r.x,r.y]),_=ze.parse(a)??0.2,f=Math.abs(n.a),y=Vf(m,i),C=m==="bottom"?!0:A===!0;if(u){let B=_*B0t,w=P0t({text:s,anchorAlignment:d,fontSize:B,charAdvance:(ehe+rG)*B,spaceAdvance:(ehe+rG)*B*0.6,trailingSpacing:rG*B,lineHeight:B*M0t,mapSegment:(ee,se,le,he)=>({x1:se+ee.x1*he,y1:le+(1-ee.y1)*he,x2:se+ee.x2*he,y2:le+(1-ee.y2)*he})});if(!w.bounds||!w.pathData)return[];let T=h?.left??B*0.5,Q=h?.right??B*0.5,N=h?.top??B*0.3,F=h?.bottom??B*0.3,H=w.bounds.minX-T,z=w.bounds.minY-N,Y=w.bounds.maxX-w.bounds.minX+T+Q,U=w.bounds.maxY-w.bounds.minY+N+F,X=B*0.15,V={minX:H,minY:z,maxX:H+Y,maxY:z+U},W=FBe(d,V),j=H+W.x,q=z+W.y,ne=[{name:"rect",type:"element",value:"",attributes:{x:H.toString(),y:z.toString(),width:Y.toString(),height:U.toString(),fill:"white"},children:[]},{name:"path",type:"element",value:"",attributes:{d:w.pathData,fill:"none",stroke:"black","stroke-width":X.toString(),"stroke-linecap":"round","stroke-linejoin":"round"},children:[]}],oe=W.x!==0||W.y!==0?[{name:"g",type:"element",value:"",attributes:{transform:`translate(${W.x} ${W.y})`},children:ne}]:ne,ie=B_(_o(So(p,g),wa(-l*Math.PI/180),...C?[xc(-1,1)]:[],xc(f,f))),J=`knockout-mask-${e.pcb_copper_text_id}-${R$n++}`;return[{name:"defs",type:"element",value:"",children:[{name:"mask",type:"element",value:"",attributes:{id:J},children:oe}],attributes:{}},{name:"rect",type:"element",value:"",children:[],attributes:{x:j.toString(),y:q.toString(),width:Y.toString(),height:U.toString(),fill:y,mask:`url(#${J})`,transform:ie,class:`pcb-copper-text-knockout pcb-copper-${m}`,"data-type":"pcb_copper_text","data-pcb-copper-text-id":e.pcb_copper_text_id}}]}let I=_*B0t,b=P0t({text:s,anchorAlignment:d,fontSize:I,charAdvance:(ehe+rG)*I,spaceAdvance:(ehe+rG)*I*0.6,trailingSpacing:rG*I,lineHeight:I*M0t,mapSegment:(B,w,T,Q)=>({x1:w+B.x1*Q,y1:T+(1-B.y1)*Q,x2:w+B.x2*Q,y2:T+(1-B.y2)*Q})});if(!b.pathData)return[];let P=B_(_o(So(p,g),wa(-l*Math.PI/180),...C?[xc(-1,1)]:[],xc(f,f))),E=I*0.15;return[{name:"path",type:"element",attributes:{d:b.pathData,fill:"none",stroke:y,"stroke-width":E.toString(),"stroke-linecap":"round","stroke-linejoin":"round",transform:P,class:`pcb-copper-text pcb-copper-${m}`,"data-type":"pcb_copper_text","data-pcb-copper-text-id":e.pcb_copper_text_id},children:[],value:""}]}function k$n(e,t){let{transform:n,layer:o,colorMap:i}=t,{center:r,radius:s,layer:a="top",pcb_silkscreen_circle_id:c,stroke_width:l=1,is_filled:d}=e;if(o&&a!==o)return[];if(!r||typeof r.x!=="number"||typeof r.y!=="number"||typeof s!=="number")return console.error("Invalid PCB Silkscreen Circle data:",{center:r,radius:s}),[];let[u,h]=tt(n,[r.x,r.y]),A=s*Math.abs(n.a),m=l*Math.abs(n.a),p=a==="bottom"?i.silkscreen.bottom:i.silkscreen.top;return[{name:"circle",type:"element",attributes:{cx:u.toString(),cy:h.toString(),r:A.toString(),class:`pcb-silkscreen-circle pcb-silkscreen-${a}`,fill:d?p:"none",stroke:p,"stroke-width":m.toString(),"data-pcb-silkscreen-circle-id":c,"data-type":"pcb_silkscreen_circle","data-pcb-layer":a},value:"",children:[]}]}function L$n(e,t){let{transform:n,layer:o,colorMap:i}=t,{x1:r,y1:s,x2:a,y2:c,stroke_width:l,layer:d="top",pcb_silkscreen_line_id:u}=e;if(o&&d!==o)return[];if(typeof r!=="number"||typeof s!=="number"||typeof a!=="number"||typeof c!=="number")return Z0(`[pcb_silkscreen_line] Invalid coordinates for "${u}": expected x1, y1, x2, y2 as numbers, got x1=${JSON.stringify(r)}, y1=${JSON.stringify(s)}, x2=${JSON.stringify(a)}, y2=${JSON.stringify(c)}`),[];let[h,A]=tt(n,[r,s]),[m,p]=tt(n,[a,c]),g=l*Math.abs(n.a),_=d==="bottom"?i.silkscreen.bottom:i.silkscreen.top;return[{name:"line",type:"element",attributes:{x1:h.toString(),y1:A.toString(),x2:m.toString(),y2:p.toString(),stroke:_,"stroke-width":g.toString(),class:`pcb-silkscreen-line pcb-silkscreen-${d}`,"data-pcb-silkscreen-line-id":u,"data-type":"pcb_silkscreen_line","data-pcb-layer":d},value:"",children:[]}]}function F$n(e,t){let{transform:n,layer:o,colorMap:i}=t,{center:r,width:s,height:a,layer:c="top",pcb_silkscreen_pill_id:l,ccw_rotation:d=0}=e;if(o&&c!==o)return[];let[u,h]=tt(n,[r.x,r.y]),A=s*Math.abs(n.a),m=a*Math.abs(n.d),g=Math.min(s,a)/2,_=g*Math.abs(n.a),f=g*Math.abs(n.d),y=c==="bottom"?i.silkscreen.bottom:i.silkscreen.top;return[{name:"rect",type:"element",attributes:{x:(u-A/2).toString(),y:(h-m/2).toString(),width:A.toString(),height:m.toString(),rx:_.toString(),ry:f.toString(),fill:"none",stroke:y,"stroke-width":(0.1*Math.abs(n.a)).toString(),class:`pcb-silkscreen-pill pcb-silkscreen-${c}`,"data-pcb-silkscreen-pill-id":l,"data-type":"pcb_silkscreen_pill","data-pcb-layer":c,...d!==0&&{transform:`rotate(${-d} ${u} ${h})`}},value:"",children:[]}]}function H$n(e,t){let{transform:n,layer:o,colorMap:i}=t,{center:r,radius_x:s,radius_y:a,layer:c="top",pcb_silkscreen_oval_id:l,ccw_rotation:d=0}=e;if(o&&c!==o)return[];if(!r||typeof r.x!=="number"||typeof r.y!=="number"||typeof s!=="number"||typeof a!=="number")return Z0(`[pcb_silkscreen_oval] Invalid data for "${l}": expected center {x: number, y: number}, radius_x: number, radius_y: number, got center=${JSON.stringify(r)}, radius_x=${JSON.stringify(s)}, radius_y=${JSON.stringify(a)}`),[];let[u,h]=tt(n,[r.x,r.y]),A=s*Math.abs(n.a),m=a*Math.abs(n.d),p=c==="bottom"?i.silkscreen.bottom:i.silkscreen.top;return[{name:"ellipse",type:"element",attributes:{cx:u.toString(),cy:h.toString(),rx:A.toString(),ry:m.toString(),fill:"none",stroke:p,"stroke-width":(0.1*Math.abs(n.a)).toString(),class:`pcb-silkscreen-oval pcb-silkscreen-${c}`,"data-pcb-silkscreen-oval-id":l,"data-type":"pcb_silkscreen_oval","data-pcb-layer":c,...d!==0&&{transform:`rotate(${-d} ${u} ${h})`}},value:"",children:[]}]}function O$n(e,t){let{transform:n,layer:o,colorMap:i}=t,{center:r,width:s,height:a,layer:c="top",pcb_courtyard_rect_id:l,ccw_rotation:d=0}=e;if(o&&c!==o)return[];if(!r||typeof r.x!=="number"||typeof r.y!=="number"||typeof s!=="number"||typeof a!=="number")return Z0(`[pcb_courtyard_rect] Invalid data for "${l}": expected center {x: number, y: number}, width: number, height: number, got center=${JSON.stringify(r)}, width=${JSON.stringify(s)}, height=${JSON.stringify(a)}`),[];let[u,h]=tt(n,[r.x,r.y]),A=s*Math.abs(n.a),m=a*Math.abs(n.d),p=0.05*Math.abs(n.a),g=c==="bottom"?i.courtyard.bottom:i.courtyard.top,_={x:(-A/2).toString(),y:(-m/2).toString(),width:A.toString(),height:m.toString(),class:`pcb-courtyard-rect pcb-courtyard-${c}`,"data-pcb-courtyard-rect-id":l,"data-type":"pcb_courtyard_rect","data-pcb-layer":c,"stroke-linejoin":"round"};if(typeof d==="number"&&d!==0)_.transform=`translate(${u} ${h}) rotate(${-d})`;else _.x=(u-A/2).toString(),_.y=(h-m/2).toString();return _.fill="none",_.stroke=g,_["stroke-width"]=p.toString(),[{name:"rect",type:"element",attributes:_,value:"",children:[]}]}function z$n(e,t){let{transform:n,layer:o,colorMap:i}=t,{layer:r="top",pcb_courtyard_polygon_id:s,points:a,color:c}=e;if(o&&r!==o)return[];if(!a||a.length===0)return Z0(`[pcb_courtyard_polygon] Invalid data for "${s}": expected non-empty array of points, got ${JSON.stringify(a)}`),[];let d=a.map((p)=>tt(n,[p.x,p.y])).map((p)=>`${p[0]},${p[1]}`).join(" "),u=0.05*Math.abs(n.a),h=c??(r==="bottom"?i.courtyard.bottom:i.courtyard.top);return[{name:"polygon",type:"element",attributes:{points:d,class:`pcb-courtyard-polygon pcb-courtyard-${r}`,"data-pcb-courtyard-polygon-id":s,"data-type":"pcb_courtyard_polygon","data-pcb-layer":r,fill:"none",stroke:h,"stroke-width":u.toString(),"stroke-linejoin":"round"},value:"",children:[]}]}function G$n(e,t){let{transform:n,layer:o,colorMap:i}=t,{layer:r,pcb_courtyard_outline_id:s,outline:a}=e;if(o&&r!==o)return[];if(!a||a.length===0)return Z0(`[pcb_courtyard_outline] Invalid data for "${s}": expected non-empty array of points, got ${JSON.stringify(a)}`),[];let l=a.map((m)=>tt(n,[m.x,m.y])).map((m)=>`${m[0]},${m[1]}`).join(" "),d=0.05*Math.abs(n.a),u=r==="bottom"?i.courtyard.bottom:i.courtyard.top;return[{name:"polygon",type:"element",attributes:{points:l,class:`pcb-courtyard-outline pcb-courtyard-${r}`,"data-pcb-courtyard-outline-id":s,"data-type":"pcb_courtyard_outline","data-pcb-layer":r,fill:"none",stroke:u,"stroke-width":d.toString(),"stroke-linejoin":"round"},value:"",children:[]}]}function Y$n(e,t){let{transform:n,layer:o,colorMap:i}=t,{center:r,radius:s,layer:a="top",pcb_courtyard_circle_id:c}=e;if(o&&a!==o)return[];if(!r||typeof r.x!=="number"||typeof r.y!=="number"||typeof s!=="number")return console.error(`[pcb_courtyard_circle] Invalid data for "${c}": expected center {x: number, y: number}, radius: number, got center=${JSON.stringify(r)}, radius=${JSON.stringify(s)}`),[];let[l,d]=tt(n,[r.x,r.y]),u=s*Math.abs(n.a),h=0.05*Math.abs(n.a),A=a==="bottom"?i.courtyard.bottom:i.courtyard.top,m={cx:l.toString(),cy:d.toString(),r:u.toString(),class:`pcb-courtyard-circle pcb-courtyard-${a}`,"data-pcb-courtyard-circle-id":c,"data-type":"pcb_courtyard_circle","data-pcb-layer":a};return m.fill="none",m.stroke=A,m["stroke-width"]=h.toString(),[{name:"circle",type:"element",attributes:m,value:"",children:[]}]}function HBe(e){let{groupAnchorPosition:t,componentPosition:n,transform:o,componentWidth:i=0,componentHeight:r=0,displayXOffset:s,displayYOffset:a}=e,c=[],[l,d]=tt(o,[t.x,t.y]),[u,h]=tt(o,[n.x,n.y]),A=n.x-t.x,m=n.y-t.y,p=Math.abs(o.a),g=i*p,_=r*p;c.push(j$n(l,d));let f=K$n(l,d,u,h);c.push({name:"line",type:"element",attributes:{x1:f.x1.toString(),y1:f.y1.toString(),x2:f.x2.toString(),y2:f.y2.toString(),stroke:"#ffffff","stroke-width":"0.5","stroke-dasharray":"3,3",opacity:"0.5",class:"anchor-offset-connector"},children:[],value:""}),c.push({name:"circle",type:"element",attributes:{cx:u.toString(),cy:h.toString(),r:Rmt.toString(),fill:"#ffffff",opacity:"0.7",class:"anchor-offset-component-marker"},children:[],value:""});let y=Math.abs(h-d),x=Math.abs(u-l),C=Math.sqrt(x*x+y*y),I=_/2+V$n,b=Math.max(I,Math.min(X$n,C*W$n)),P=m>0?h-b:h+b,E=g/2+U$n,B=A>0?u+E:u-E;if(the(P,d)||the(P,h)){let w=Math.min(d,h),T=Math.max(d,h),Q=w-PJ,N=T+PJ;P=Math.abs(P-Q)<Math.abs(P-N)?Q:N}if(the(B,l)||the(B,u)){let w=Math.min(l,u),T=Math.max(l,u),Q=w-PJ,N=T+PJ;B=Math.abs(B-Q)<Math.abs(B-N)?Q:N}if(Math.abs(A)>w0t)c.push(...q$n({startX:l,endX:u,y:P,offsetMm:A,offsetY:m,displayOffset:s}));if(Math.abs(m)>w0t)c.push(...J$n({x:B,startY:d,endY:h,offsetMm:m,offsetX:A,displayOffset:a}));return c}function K$n(e,t,n,o){let i=n-e,r=o-t,s=Math.hypot(i,r),a=hBe+mBe;if(!(s>a))return{x1:e,y1:t,x2:n,y2:o};let c=i/s,l=r/s;return{x1:e+c*hBe,y1:t+l*hBe,x2:n-c*mBe,y2:o-l*mBe}}function the(e,t){return Math.abs(e-t)<PJ}function j$n(e,t){return{name:"g",type:"element",attributes:{class:"anchor-offset-marker","data-type":"anchor_offset_marker"},children:[{name:"line",type:"element",attributes:{x1:e.toString(),y1:(t-aG).toString(),x2:e.toString(),y2:(t+aG).toString(),stroke:"#ffffff","stroke-width":D0t.toString(),"stroke-linecap":"round"},children:[],value:""},{name:"line",type:"element",attributes:{x1:(e-aG).toString(),y1:t.toString(),x2:(e+aG).toString(),y2:t.toString(),stroke:"#ffffff","stroke-width":D0t.toString(),"stroke-linecap":"round"},children:[],value:""}],value:""}}function q$n({startX:e,endX:t,y:n,offsetMm:o,offsetY:i,displayOffset:r}){let s=[];s.push({name:"line",type:"element",attributes:{x1:e.toString(),y1:n.toString(),x2:t.toString(),y2:n.toString(),stroke:"#ffffff","stroke-width":dG.toString(),class:"anchor-offset-dimension-x"},children:[],value:""}),s.push({name:"line",type:"element",attributes:{x1:e.toString(),y1:(n-ex).toString(),x2:e.toString(),y2:(n+ex).toString(),stroke:"#ffffff","stroke-width":dG.toString()},children:[],value:""}),s.push({name:"line",type:"element",attributes:{x1:t.toString(),y1:(n-ex).toString(),x2:t.toString(),y2:(n+ex).toString(),stroke:"#ffffff","stroke-width":dG.toString()},children:[],value:""});let a=(e+t)/2,c=i>0?n-ex-T0t:n+ex+T0t;return s.push({name:"text",type:"element",attributes:{x:a.toString(),y:c.toString(),fill:"#ffffff","font-size":Nmt.toString(),"font-family":"Arial, sans-serif","text-anchor":"middle","dominant-baseline":i>0?"baseline":"hanging",class:"anchor-offset-label"},children:[{type:"text",value:Qmt("X",o,r),name:"",attributes:{},children:[]}],value:""}),s}function J$n({x:e,startY:t,endY:n,offsetMm:o,offsetX:i,displayOffset:r}){let s=[];s.push({name:"line",type:"element",attributes:{x1:e.toString(),y1:t.toString(),x2:e.toString(),y2:n.toString(),stroke:"#ffffff","stroke-width":dG.toString(),class:"anchor-offset-dimension-y"},children:[],value:""}),s.push({name:"line",type:"element",attributes:{x1:(e-ex).toString(),y1:t.toString(),x2:(e+ex).toString(),y2:t.toString(),stroke:"#ffffff","stroke-width":dG.toString()},children:[],value:""}),s.push({name:"line",type:"element",attributes:{x1:(e-ex).toString(),y1:n.toString(),x2:(e+ex).toString(),y2:n.toString(),stroke:"#ffffff","stroke-width":dG.toString()},children:[],value:""});let a=(t+n)/2,c=i<0?e-ex-4:e+ex+4;return s.push({name:"text",type:"element",attributes:{x:c.toString(),y:a.toString(),fill:"#ffffff","font-size":Nmt.toString(),"font-family":"Arial, sans-serif","text-anchor":i<0?"end":"start","dominant-baseline":"middle",class:"anchor-offset-label"},children:[{type:"text",value:Qmt("Y",o,r),name:"",attributes:{},children:[]}],value:""}),s}function Qmt(e,t,n){let o=typeof n==="string"?n:t.toFixed(2),r=typeof o==="string"&&o.trim().endsWith("mm")?"":"mm";return`${e}: ${o}${r}`}function BJ(e){let t=e?.anchor_position??e?.center;if(t&&typeof t.x==="number"&&typeof t.y==="number")return{x:t.x,y:t.y};return}function kmt(e,t){let{transform:n,colorMap:o,showSolderMask:i,circuitJson:r}=t,{width:s,height:a,center:c,outline:l,position_mode:d,anchor_position:u,display_offset_x:h,display_offset_y:A}=e,m;if(l&&Array.isArray(l)&&l.length>=3)m=l.map((g,_)=>{let[f,y]=tt(n,[g.x,g.y]);return _===0?`M ${f} ${y}`:`L ${f} ${y}`}).join(" ");else{let g=s/2,_=a/2,f=tt(n,[c.x-g,c.y-_]),y=tt(n,[c.x+g,c.y-_]),x=tt(n,[c.x+g,c.y+_]),C=tt(n,[c.x-g,c.y+_]);m=`M ${f[0]} ${f[1]} L ${y[0]} ${y[1]} L ${x[0]} ${x[1]} L ${C[0]} ${C[1]}`}m+=" Z";let p=[];if(i){let _=(t.layer??"top")==="bottom"?"soldermask-bottom":"soldermask-top";p.push({name:"path",type:"element",value:"",children:[],attributes:{class:"pcb-board-soldermask",d:m,fill:o.soldermask.top,"fill-opacity":"0.8",stroke:"none","data-type":"pcb_soldermask","data-pcb-layer":_}})}if(p.push({name:"path",type:"element",value:"",children:[],attributes:{class:"pcb-board",d:m,fill:"none",stroke:o.boardOutline,"stroke-width":(0.1*Math.abs(n.a)).toString(),"data-type":"pcb_board","data-pcb-layer":"board"}}),t.showAnchorOffsets&&r&&d==="relative_to_panel_anchor"){let g=r.find((_)=>_.type==="pcb_panel");if(g){let _=BJ(g);if(_)p.push(...HBe({groupAnchorPosition:_,componentPosition:u??c,transform:n,componentWidth:s,componentHeight:a,displayXOffset:h,displayYOffset:A}))}}return p}function $$n(e,t){let{transform:n,colorMap:o,showSolderMask:i}=t,r=Number(e.width),s=Number(e.height),a=e.center??{x:r/2,y:s/2},c=r/2,l=s/2,d=tt(n,[a.x-c,a.y-l]),u=tt(n,[a.x+c,a.y-l]),h=tt(n,[a.x+c,a.y+l]),A=tt(n,[a.x-c,a.y+l]),m=`M ${d[0]} ${d[1]} L ${u[0]} ${u[1]} L ${h[0]} ${h[1]} L ${A[0]} ${A[1]} Z`,p=e.covered_with_solder_mask!==!1,g=Boolean(i&&p);return[{name:"path",type:"element",value:"",children:[],attributes:{class:"pcb-panel",d:m,fill:"none",stroke:o.boardOutline,"stroke-width":(0.1*Math.abs(n.a)).toString(),"data-type":"pcb_panel","data-pcb-layer":"board"}}]}function Z$n(e,t){let{transform:n,colorMap:o,showSolderMask:i}=t,r=t.layer??"top",[s,a]=tt(n,[e.x,e.y]),c=Boolean(e.is_covered_with_solder_mask),l=(e.soldermask_margin??0)*Math.abs(n.a),d=i&&c&&l!==0,u=o.soldermask.top;if(e.hole_shape==="circle"||e.hole_shape==="square"){let h=e.hole_diameter*Math.abs(n.a),A=h/2;if(e.hole_shape==="circle"){let _={name:"circle",type:"element",attributes:{class:"pcb-hole",cx:s.toString(),cy:a.toString(),r:A.toString(),fill:o.drill,"data-type":"pcb_hole","data-pcb-layer":"drill"},children:[],value:""};if(!d)return[_];let f=A+l;if(l<0){let x={name:"circle",type:"element",value:"",children:[],attributes:{class:"pcb-hole-covered",fill:u,cx:s.toString(),cy:a.toString(),r:A.toString(),"data-type":"pcb_hole","data-pcb-layer":"drill"}},C={name:"circle",type:"element",value:"",children:[],attributes:{class:"pcb-hole-exposed",fill:o.drill,cx:s.toString(),cy:a.toString(),r:f.toString(),"data-type":"pcb_soldermask","data-pcb-layer":"drill"}};return[x,C]}return[{name:"circle",type:"element",value:"",children:[],attributes:{class:"pcb-soldermask-cutout",fill:o.substrate,cx:s.toString(),cy:a.toString(),r:f.toString(),"data-type":"pcb_soldermask_opening","data-pcb-layer":r}},_]}let m={name:"rect",type:"element",attributes:{class:"pcb-hole",x:(s-A).toString(),y:(a-A).toString(),width:h.toString(),height:h.toString(),fill:o.drill,"data-type":"pcb_hole","data-pcb-layer":"drill"},children:[],value:""};if(!d)return[m];let p=h+2*l;if(l<0){let _={name:"rect",type:"element",value:"",children:[],attributes:{class:"pcb-hole-covered",fill:u,x:(s-A).toString(),y:(a-A).toString(),width:h.toString(),height:h.toString(),"data-type":"pcb_hole","data-pcb-layer":"drill"}},f={name:"rect",type:"element",value:"",children:[],attributes:{class:"pcb-hole-exposed",fill:o.drill,x:(s-p/2).toString(),y:(a-p/2).toString(),width:p.toString(),height:p.toString(),"data-type":"pcb_soldermask","data-pcb-layer":"drill"}};return[_,f]}return[{name:"rect",type:"element",value:"",children:[],attributes:{class:"pcb-soldermask-cutout",fill:o.substrate,x:(s-p/2).toString(),y:(a-p/2).toString(),width:p.toString(),height:p.toString(),"data-type":"pcb_soldermask_opening","data-pcb-layer":r}},m]}if(e.hole_shape==="oval"){let h=e.hole_width*Math.abs(n.a),A=e.hole_height*Math.abs(n.a),m=h/2,p=A/2,g={name:"ellipse",type:"element",attributes:{class:"pcb-hole",cx:s.toString(),cy:a.toString(),rx:m.toString(),ry:p.toString(),fill:o.drill,"data-type":"pcb_hole","data-pcb-layer":"drill"},children:[],value:""};if(!d)return[g];let _=m+l,f=p+l;if(l<0){let x={name:"ellipse",type:"element",value:"",children:[],attributes:{class:"pcb-hole-covered",fill:u,cx:s.toString(),cy:a.toString(),rx:m.toString(),ry:p.toString(),"data-type":"pcb_hole","data-pcb-layer":"drill"}},C={name:"ellipse",type:"element",value:"",children:[],attributes:{class:"pcb-hole-exposed",fill:o.drill,cx:s.toString(),cy:a.toString(),rx:_.toString(),ry:f.toString(),"data-type":"pcb_soldermask","data-pcb-layer":"drill"}};return[x,C]}return[{name:"ellipse",type:"element",value:"",children:[],attributes:{class:"pcb-soldermask-cutout",fill:o.substrate,cx:s.toString(),cy:a.toString(),rx:_.toString(),ry:f.toString(),"data-type":"pcb_soldermask_opening","data-pcb-layer":r}},g]}if(e.hole_shape==="rect"){let h=e.hole_width*Math.abs(n.a),A=e.hole_height*Math.abs(n.a),m={name:"rect",type:"element",attributes:{class:"pcb-hole",x:(s-h/2).toString(),y:(a-A/2).toString(),width:h.toString(),height:A.toString(),fill:o.drill,"data-type":"pcb_hole","data-pcb-layer":"drill"},children:[],value:""};if(!d)return[m];let p=h+2*l,g=A+2*l;if(l<0){let f={name:"rect",type:"element",value:"",children:[],attributes:{class:"pcb-hole-covered",fill:u,x:(s-h/2).toString(),y:(a-A/2).toString(),width:h.toString(),height:A.toString(),"data-type":"pcb_hole","data-pcb-layer":"drill"}},y={name:"rect",type:"element",value:"",children:[],attributes:{class:"pcb-hole-exposed",fill:o.drill,x:(s-p/2).toString(),y:(a-g/2).toString(),width:p.toString(),height:g.toString(),"data-type":"pcb_soldermask","data-pcb-layer":"drill"}};return[f,y]}return[{name:"rect",type:"element",value:"",children:[],attributes:{class:"pcb-soldermask-cutout",fill:o.substrate,x:(s-p/2).toString(),y:(a-g/2).toString(),width:p.toString(),height:g.toString(),"data-type":"pcb_soldermask_opening","data-pcb-layer":r}},m]}if(e.hole_shape==="pill"){let h=e.hole_width*Math.abs(n.a),A=e.hole_height*Math.abs(n.a),m=h>A,p=Math.min(h,A)/2,g=Math.abs(m?h-A:A-h),_=m?`M${s-g/2},${a-p} h${g} a${p},${p} 0 0 1 0,${A} h-${g} a${p},${p} 0 0 1 0,-${A} z`:`M${s-p},${a-g/2} v${g} a${p},${p} 0 0 0 ${h},0 v-${g} a${p},${p} 0 0 0 -${h},0 z`,f={name:"path",type:"element",attributes:{class:"pcb-hole",fill:o.drill,d:_,"data-type":"pcb_hole","data-pcb-layer":"drill"},children:[],value:""};if(!d)return[f];let y=h+2*l,x=A+2*l,C=y>x,I=Math.min(y,x)/2,b=Math.abs(C?y-x:x-y),P=C?`M${s-b/2},${a-I} h${b} a${I},${I} 0 0 1 0,${x} h-${b} a${I},${I} 0 0 1 0,-${x} z`:`M${s-I},${a-b/2} v${b} a${I},${I} 0 0 0 ${y},0 v-${b} a${I},${I} 0 0 0 -${y},0 z`;if(l<0){let B={name:"path",type:"element",value:"",children:[],attributes:{class:"pcb-hole-covered",fill:u,d:_,"data-type":"pcb_hole","data-pcb-layer":"drill"}},w={name:"path",type:"element",value:"",children:[],attributes:{class:"pcb-hole-exposed",fill:o.drill,d:P,"data-type":"pcb_soldermask","data-pcb-layer":"drill"}};return[B,w]}return[{name:"path",type:"element",value:"",children:[],attributes:{class:"pcb-soldermask-cutout",fill:o.substrate,d:P,"data-type":"pcb_soldermask_opening","data-pcb-layer":r}},f]}if(e.hole_shape==="rotated_pill"){let h=e.hole_width*Math.abs(n.a),A=e.hole_height*Math.abs(n.a),m="ccw_rotation"in e?e.ccw_rotation??0:0,p=h>A,g=Math.min(h,A)/2,_=Math.abs(p?h-A:A-h),f=p?`M${-_/2},${-g} h${_} a${g},${g} 0 0 1 0,${A} h-${_} a${g},${g} 0 0 1 0,-${A} z`:`M${-g},${-_/2} v${_} a${g},${g} 0 0 0 ${h},0 v-${_} a${g},${g} 0 0 0 -${h},0 z`,y={name:"path",type:"element",attributes:{class:"pcb-hole",fill:o.drill,d:f,transform:`translate(${s} ${a}) rotate(${-m})`,"data-type":"pcb_hole","data-pcb-layer":"drill"},children:[],value:""};if(!d)return[y];let x=h+2*l,C=A+2*l,I=x>C,b=Math.min(x,C)/2,P=Math.abs(I?x-C:C-x),E=I?`M${-P/2},${-b} h${P} a${b},${b} 0 0 1 0,${C} h-${P} a${b},${b} 0 0 1 0,-${C} z`:`M${-b},${-P/2} v${P} a${b},${b} 0 0 0 ${x},0 v-${P} a${b},${b} 0 0 0 -${x},0 z`;if(l<0){let w={name:"path",type:"element",value:"",children:[],attributes:{class:"pcb-hole-covered",fill:u,d:f,transform:`translate(${s} ${a}) rotate(${-m})`,"data-type":"pcb_hole","data-pcb-layer":"drill"}},T={name:"path",type:"element",value:"",children:[],attributes:{class:"pcb-hole-exposed",fill:o.drill,d:E,transform:`translate(${s} ${a}) rotate(${-m})`,"data-type":"pcb_soldermask","data-pcb-layer":"drill"}};return[w,T]}return[{name:"path",type:"element",value:"",children:[],attributes:{class:"pcb-soldermask-cutout",fill:o.substrate,d:E,"data-type":"pcb_soldermask_opening","data-pcb-layer":r}},y]}return[]}function nZn(e,t){let{transform:n}=t,o=js(e),i=e.filter((c)=>c.type==="pcb_port"),r=e.filter((c)=>c.type==="source_trace"),s=[];i.forEach((c,l)=>{let d=c.pcb_port_id;if(!d)return;let u=o.getNetConnectedToId(d);if(!u)return;let h=!1,A=To(e).source_port.getWhere({pcb_port_id:d});if(A&&A.source_port_id){let g=A.source_port_id;for(let _ of r)if(Array.isArray(_.connected_source_port_ids)&&_.connected_source_port_ids.includes(g)&&Array.isArray(_.connected_source_net_ids)&&_.connected_source_net_ids.length>0){h=!0;break}}let m={x:c.x,y:c.y},p=tZn(m,u,o,e);if(!p)return;s.push({key:`${d}-${l}`,startPoint:m,endPoint:p,isInNet:h})});let a=[];for(let c of s){let l=tt(n,[c.startPoint.x,c.startPoint.y]),d=tt(n,[c.endPoint.x,c.endPoint.y]),u={x1:l[0].toString(),y1:l[1].toString(),x2:d[0].toString(),y2:d[1].toString(),stroke:"white","stroke-width":"1","stroke-dasharray":"6,6","data-type":"pcb_rats_nest","data-pcb-layer":"overlay"};a.push({name:"line",type:"element",attributes:u,value:"",children:[]})}return a}function oZn(e,t){let{transform:n,colorMap:o}=t;if(e.shape==="rect"){let i=e,[r,s]=tt(n,[i.center.x,i.center.y]),a=i.width*Math.abs(n.a),c=i.height*Math.abs(n.d),l=-(i.rotation??0),{corner_radius:d}=i,u=typeof d==="number"&&d>0?d:0,h=u*Math.abs(n.a),A=u*Math.abs(n.d),m={class:"pcb-cutout pcb-cutout-rect",x:(-a/2).toString(),y:(-c/2).toString(),width:a.toString(),height:c.toString(),fill:o.drill,transform:B_(_o(So(r,s),wa(l*Math.PI/180))),"data-type":"pcb_cutout","data-pcb-layer":"drill"};if(h>0)m.rx=h.toString();if(A>0)m.ry=A.toString();return[{name:"rect",type:"element",attributes:m,children:[],value:""}]}if(e.shape==="circle"){let i=e,[r,s]=tt(n,[i.center.x,i.center.y]),a=i.radius*Math.abs(n.a);return[{name:"circle",type:"element",attributes:{class:"pcb-cutout pcb-cutout-circle",cx:r.toString(),cy:s.toString(),r:a.toString(),fill:o.drill,"data-type":"pcb_cutout","data-pcb-layer":"drill"},children:[],value:""}]}if(e.shape==="polygon"){let i=e;if(!i.points||i.points.length===0)return[];return[{name:"polygon",type:"element",attributes:{class:"pcb-cutout pcb-cutout-polygon",points:i.points.map((a)=>tt(n,[a.x,a.y])).map((a)=>`${a[0]},${a[1]}`).join(" "),fill:o.drill,"data-type":"pcb_cutout","data-pcb-layer":"drill"},children:[],value:""}]}return[]}function iZn(e,t){let{transform:n,colorMap:o}=t;if(!e.route||!Array.isArray(e.route))return[];let i=e.route[0],r=e.route[e.route.length-1],s=i&&r&&i.x===r.x&&i.y===r.y;return[{name:"path",type:"element",attributes:{class:"pcb-cutout pcb-cutout-path",d:e.route.slice(0,s?-1:void 0).map((c,l)=>{let[d,u]=tt(n,[c.x,c.y]);return l===0?`M ${d} ${u}`:`L ${d} ${u}`}).join(" ")+(s?" Z":""),fill:o.drill,"data-type":"pcb_cutout_path","data-pcb-cutout-id":e.pcb_cutout_id,"data-pcb-layer":"drill"},value:"",children:[]}]}function sZn(e){let t=[];for(let n=-cG;n<=cG;n+=rZn)t.push({name:"line",type:"element",value:"",attributes:{x1:n.toString(),y1:"0",x2:(n+cG).toString(),y2:cG.toString(),stroke:e,"stroke-width":"1"},children:[]});return t}function aZn(e){return{name:"defs",type:"element",value:"",attributes:{},children:[{name:"pattern",type:"element",value:"",attributes:{id:OBe,width:cG.toString(),height:cG.toString(),patternUnits:"userSpaceOnUse"},children:sZn(e)}]}}function ABe(e,t,n,o){let i={class:`pcb-keepout ${n} pcb-keepout-background`,"data-type":"pcb_keepout","data-pcb-layer":t,"data-pcb-keepout-id":e,stroke:"none"};if(o)i["data-description"]=o;return i}function _Be(e,t,n,o){let i={class:`pcb-keepout ${n} pcb-keepout-pattern`,fill:`url(#${OBe})`,"data-type":"pcb_keepout","data-pcb-layer":t,"data-pcb-keepout-id":e,stroke:"none"};if(o)i["data-description"]=o;return i}function cZn(e,t){let{transform:n,layer:o,colorMap:i}=t;if(o&&!e.layers.includes(o))return[];let r=[],s=i.keepout;for(let a of e.layers){if(o&&a!==o)continue;if(e.shape==="rect"){let c=e,[l,d]=tt(n,[c.center.x,c.center.y]),u=c.width*Math.abs(n.a),h=c.height*Math.abs(n.d),A=B_(_o(So(l,d))),m={...ABe(c.pcb_keepout_id,a,"pcb-keepout-rect",c.description),x:(-u/2).toString(),y:(-h/2).toString(),width:u.toString(),height:h.toString(),fill:pBe,transform:A},p={..._Be(c.pcb_keepout_id,a,"pcb-keepout-rect",c.description),x:(-u/2).toString(),y:(-h/2).toString(),width:u.toString(),height:h.toString(),transform:A};r.push({name:"rect",type:"element",attributes:m,children:[],value:""},{name:"rect",type:"element",attributes:p,children:[],value:""})}else if(e.shape==="circle"){let c=e,[l,d]=tt(n,[c.center.x,c.center.y]),u=c.radius*Math.abs(n.a),h={...ABe(c.pcb_keepout_id,a,"pcb-keepout-circle",c.description),cx:l.toString(),cy:d.toString(),r:u.toString(),fill:pBe},A={..._Be(c.pcb_keepout_id,a,"pcb-keepout-circle",c.description),cx:l.toString(),cy:d.toString(),r:u.toString()};r.push({name:"circle",type:"element",attributes:h,children:[],value:""},{name:"circle",type:"element",attributes:A,children:[],value:""})}else if(e.shape==="outline"){let c=e,l=c.outline.map((A,m)=>{let[p,g]=tt(n,[A.x,A.y]);return m===0?`M ${p} ${g}`:`L ${p} ${g}`}).join(" "),d=c.stroke_width*Math.abs(n.a),u={...ABe(c.pcb_keepout_id,a,"pcb-keepout-outline",c.description),d:l,fill:"none",stroke:pBe,"stroke-width":d.toString(),"stroke-linecap":"round","stroke-linejoin":"round"},h={..._Be(c.pcb_keepout_id,a,"pcb-keepout-outline",c.description),d:l,fill:"none",stroke:`url(#${OBe})`,"stroke-width":d.toString(),"stroke-linecap":"round","stroke-linejoin":"round"};r.push({name:"path",type:"element",attributes:u,children:[],value:""},{name:"path",type:"element",attributes:h,children:[],value:""})}}return r}function lZn({elementType:e,shapeAttributes:t,layer:n,colorMap:o,additionalAttributes:i}){let r={class:"pcb-soldermask-cutout",fill:o.substrate,"data-type":"pcb_soldermask_opening","data-pcb-layer":n,...t,...i};return{name:e,type:"element",value:"",children:[],attributes:r}}function dZn(e,t){let{transform:n,layer:o,colorMap:i,showSolderMask:r}=t,{layer:s}=e;if(o&&s!==o)return[];let a=gmt(e,n);if(!a)return[];let{elementType:c,shapeAttributes:l}=a,d=Vf(s,i),u="0.5",h=e.covered_with_solder_mask!==!1,A=s==="bottom"?i.soldermaskOverCopper.bottom:i.soldermaskOverCopper.top,m="0.9",p={name:c,type:"element",value:"",children:[],attributes:{class:`pcb-copper-pour pcb-copper-pour-${e.shape}`,...l,fill:d,"fill-opacity":u,"data-type":"pcb_copper_pour","data-pcb-layer":s}},g=r?h?vBe({elementType:c,shapeAttributes:l,layer:s,fillColor:A,fillOpacity:m,className:"pcb-soldermask-covered-pour"}):lZn({elementType:c,shapeAttributes:l,layer:s,colorMap:i}):null;if(!g)return[p];if(!h&&e.pcb_copper_pour_id?.includes("substrate_only"))return[g];return[p,g]}function Lmt(e,t){let{transform:n,layer:o}=t;if(o&&e.layer!==o)return[];if(e.shape==="polygon"){let s=mG(e.points,n);for(let a of e.holes??[])s+=` ${mG(a,n)}`;return[{name:"path",type:"element",value:"",children:[],attributes:{class:"pcb-solder-paste",fill:tQ(e.layer),d:s,"fill-rule":"evenodd","data-type":"pcb_solder_paste","data-pcb-layer":e.layer}}]}let[i,r]=tt(n,[e.x,e.y]);if(e.shape==="rect"||e.shape==="rotated_rect"){let s=e.width*Math.abs(n.a),a=e.height*Math.abs(n.d);if(e.shape==="rotated_rect"&&e.ccw_rotation)return[{name:"rect",type:"element",attributes:{class:"pcb-solder-paste",fill:tQ(e.layer),x:(-s/2).toString(),y:(-a/2).toString(),width:s.toString(),height:a.toString(),transform:`translate(${i} ${r}) rotate(${-e.ccw_rotation})`,"data-type":"pcb_solder_paste","data-pcb-layer":e.layer}}];return[{name:"rect",type:"element",attributes:{class:"pcb-solder-paste",fill:tQ(e.layer),x:(i-s/2).toString(),y:(r-a/2).toString(),width:s.toString(),height:a.toString(),"data-type":"pcb_solder_paste","data-pcb-layer":e.layer}}]}if(e.shape==="pill"){let s=e.width*Math.abs(n.a),a=e.height*Math.abs(n.d),c=e.radius*Math.abs(n.a);return[{name:"rect",type:"element",attributes:{class:"pcb-solder-paste",fill:tQ(e.layer),x:(i-s/2).toString(),y:(r-a/2).toString(),width:s.toString(),height:a.toString(),rx:c.toString(),"data-type":"pcb_solder_paste","data-pcb-layer":e.layer}}]}if(e.shape==="rotated_pill"){let s=e.width*Math.abs(n.a),a=e.height*Math.abs(n.d),c=e.radius*Math.abs(n.a);return[{name:"rect",type:"element",attributes:{class:"pcb-solder-paste",fill:tQ(e.layer),x:(-s/2).toString(),y:(-a/2).toString(),width:s.toString(),height:a.toString(),rx:c.toString(),transform:`translate(${i} ${r}) rotate(${-e.ccw_rotation})`,"data-type":"pcb_solder_paste","data-pcb-layer":e.layer}}]}if(e.shape==="oval"){let s=e.width*Math.abs(n.a),a=e.height*Math.abs(n.d);return[{name:"ellipse",type:"element",attributes:{class:"pcb-solder-paste",fill:tQ(e.layer),cx:i.toString(),cy:r.toString(),rx:(s/2).toString(),ry:(a/2).toString(),"data-type":"pcb_solder_paste","data-pcb-layer":e.layer}}]}if(e.shape==="circle"){let s=e.radius*Math.abs(n.a);return[{name:"circle",type:"element",attributes:{class:"pcb-solder-paste",fill:tQ(e.layer),cx:i.toString(),cy:r.toString(),r:s.toString(),"data-type":"pcb_solder_paste","data-pcb-layer":e.layer}}]}}function hZn({grid:e,svgWidth:t,svgHeight:n}){if(!e)return{};let o=e.lineColor??uZn,{cellSize:i,majorCellSize:r}=e,s=e.majorLineColor??o;if(r!==void 0){if(!i||i<=0)throw Error("grid.majorCellSize requires a positive grid.cellSize");if(r<=0)throw Error("grid.majorCellSize must be a positive multiple of grid.cellSize");let u=r/i,h=Math.round(u);if(!Number.isFinite(u)||Math.abs(u-h)>0.000001)throw Error("grid.majorCellSize must be a positive multiple of grid.cellSize")}if(!i||i<=0)return{};let a=r!==void 0,c=a?mZn(i,r,o,s):[{name:"path",type:"element",value:"",attributes:{d:`M ${i} 0 L 0 0 0 ${i}`,fill:"none",stroke:o,"stroke-width":"1","shape-rendering":"crispEdges"},children:[]}],l={name:"defs",type:"element",value:"",attributes:{},children:[{name:"pattern",type:"element",value:"",attributes:{id:N0t,width:a?r.toString():i.toString(),height:a?r.toString():i.toString(),patternUnits:"userSpaceOnUse"},children:c}]},d={name:"rect",type:"element",value:"",attributes:{x:"0",y:"0",width:t.toString(),height:n.toString(),fill:`url(#${N0t})`,"pointer-events":"none","data-type":"pcb_grid","data-pcb-layer":"global"},children:[]};return{defs:l,rect:d}}function mZn(e,t,n,o){let i=[],r=Math.round(t/e);for(let s=0;s<r;s+=1){let c=Number((s*e).toFixed(6)).toString(),l=s===0?o:n,d=t.toString();i.push({name:"line",type:"element",value:"",attributes:{x1:c,y1:"0",x2:c,y2:d,stroke:l,"stroke-width":"1","shape-rendering":"crispEdges"},children:[]}),i.push({name:"line",type:"element",value:"",attributes:{x1:"0",y1:c,x2:d,y2:c,stroke:l,"stroke-width":"1","shape-rendering":"crispEdges"},children:[]})}return i}function pZn(e,t){let{transform:n,circuitJson:o}=t,{center:i,width:r,height:s,rotation:a=0}=e,[c,l]=tt(n,[i.x,i.y]),d=r*Math.abs(n.a),u=s*Math.abs(n.d),h=`translate(${c}, ${l}) rotate(${-a}) scale(1, -1)`,A=[];if(t.showAnchorOffsets&&o&&e.position_mode==="relative_to_group_anchor"&&(e.positioned_relative_to_pcb_group_id||e.positioned_relative_to_pcb_board_id)){let m=AZn(e,o);if(m)A.push(...HBe({groupAnchorPosition:m,componentPosition:i,transform:n,componentWidth:r,componentHeight:s,displayXOffset:e.display_offset_x,displayYOffset:e.display_offset_y}))}if(!t.colorMap.debugComponent?.fill&&!t.colorMap.debugComponent?.stroke)return A;return A.push({name:"g",type:"element",attributes:{transform:h,"data-type":"pcb_component","data-pcb-layer":e.layer??"top"},children:[{name:"rect",type:"element",attributes:{class:"pcb-component",x:(-d/2).toString(),y:(-u/2).toString(),width:d.toString(),height:u.toString(),fill:t.colorMap.debugComponent.fill??"transparent",stroke:t.colorMap.debugComponent.stroke??"transparent","data-type":"pcb_component","data-pcb-layer":e.layer??"top"}}],value:""}),A}function AZn(e,t){if(e.positioned_relative_to_pcb_group_id){let n=t.find((i)=>i.type==="pcb_group"&&i.pcb_group_id===e.positioned_relative_to_pcb_group_id),o=BJ(n);if(o)return o}if(e.positioned_relative_to_pcb_board_id){let n=t.find((i)=>i.type==="pcb_board"&&i.pcb_board_id===e.positioned_relative_to_pcb_board_id),o=BJ(n);if(o)return o}return}function gZn(e,t){let{transform:n,circuitJson:o}=t,{center:i,width:r,height:s}=e,a=[];if(t.showAnchorOffsets&&e.position_mode==="relative_to_group_anchor"&&o){let P=yZn(e,o);if(P)a.push(...HBe({groupAnchorPosition:P,componentPosition:e.anchor_position??e.center,transform:n,componentWidth:e.width,componentHeight:e.height,displayXOffset:e.display_offset_x,displayYOffset:e.display_offset_y}))}let c=Array.isArray(e.outline)?e.outline:void 0,l=_Zn*Math.abs(n.a),d=0.3*Math.abs(n.a),u=0.15*Math.abs(n.a),h={class:"pcb-group",fill:"none",stroke:fZn(e.pcb_group_id),"stroke-width":l.toString(),"stroke-dasharray":`${d} ${u}`,"data-type":"pcb_group","data-pcb-group-id":e.pcb_group_id,"data-pcb-layer":"overlay"};if(e.name)h["data-group-name"]=e.name;if(c&&c.length>=3&&c.every((P)=>P&&typeof P.x==="number"&&typeof P.y==="number")){let P=c.map((E,B)=>{let[w,T]=tt(n,[E.x,E.y]);return B===0?`M ${w} ${T}`:`L ${w} ${T}`}).join(" ");return a.push({name:"path",type:"element",value:"",children:[],attributes:{...h,d:`${P} Z`}}),a}if(!i||typeof i.x!=="number"||typeof i.y!=="number"||typeof r!=="number"||typeof s!=="number")return Z0(`[pcb_group] Invalid data for "${e.pcb_group_id}"${e.name?` (name: "${e.name}")`:""}: expected center {x: number, y: number}, width: number, height: number, got center=${JSON.stringify(i)}, width=${JSON.stringify(r)}, height=${JSON.stringify(s)}`),a;let A=r/2,m=s/2,[p,g]=tt(n,[i.x-A,i.y+m]),[_,f]=tt(n,[i.x+A,i.y-m]),y=Math.min(p,_),x=Math.min(g,f),C=Math.abs(_-p),I=Math.abs(f-g),b={name:"rect",type:"element",value:"",attributes:{...h,x:y.toString(),y:x.toString(),width:C.toString(),height:I.toString()},children:[]};return a.push(b),a}function fZn(e){let t=e.match(/(\d+)$/),n=t?Number.parseInt(t[1],10):0;return R0t[n%R0t.length]}function yZn(e,t){if(e.positioned_relative_to_pcb_group_id){let n=t.find((i)=>i.type==="pcb_group"&&i.pcb_group_id===e.positioned_relative_to_pcb_group_id),o=BJ(n);if(o)return o}if(e.positioned_relative_to_pcb_board_id){let n=t.find((i)=>i.type==="pcb_board"&&i.pcb_board_id===e.positioned_relative_to_pcb_board_id),o=BJ(n);if(o)return o}return}function S7(e){return e.find((n)=>n.type==="project_software_metadata"||n.type==="source_project_metadata")?.software_used_string}function CZn({objects:e,layer:t,width:n,height:o,showSolderMask:i=!1}){let r=e.filter((d)=>d.attributes["data-pcb-layer"]===t&&(d.attributes.class==="pcb-pad"||d.attributes.class==="pcb-pad-exposed"||d.attributes["data-type"]==="pcb_soldermask_opening"));if(r.length===0)return null;let s=e.filter((d)=>d.attributes["data-type"]==="pcb_via").flatMap((d)=>d.children).filter((d)=>d.attributes.class==="pcb-via-tenting"||d.attributes.class==="pcb-via-tenting-hole"),a=e.filter((d)=>i&&d.attributes["data-pcb-layer"]===t&&(d.attributes["data-type"]==="pcb_copper_pour"||d.attributes.class==="pcb-soldermask-covered-pour")),c=r.filter((d)=>d.attributes.class==="pcb-pad"||d.attributes.class==="pcb-pad-exposed"),l=[];for(let{targets:d,cutouts:u,maskId:h}of[{targets:s,cutouts:r,maskId:`via-tenting-mask-${t}`},{targets:a,cutouts:c,maskId:`copper-pour-pad-opening-mask-${t}`}]){if(d.length===0||u.length===0)continue;for(let A of d)A.attributes.mask=`url(#${h})`;l.push(IZn(h,u,n,o))}if(l.length===0)return null;return{name:"defs",type:"element",value:"",attributes:{},children:l}}function IZn(e,t,n,o){return{name:"mask",type:"element",value:"",attributes:{id:e,maskUnits:"userSpaceOnUse",x:"0",y:"0",width:String(n),height:String(o)},children:[{name:"rect",type:"element",value:"",attributes:{x:"0",y:"0",width:String(n),height:String(o),fill:"white"},children:[]},...t.map((i)=>({...i,attributes:{...i.attributes,fill:"black"}}))]}}function pG(e,t="error_text_overlay"){let n=e.filter((r)=>r.type.endsWith("_error"));if(n.length===0)return null;let o=n.map((r)=>r.message).filter((r)=>!!r);if(o.length===0)return null;return{name:"text",type:"element",value:"",attributes:{x:"10",y:"20",fill:"red","font-family":"monospace","font-size":"12px","data-type":t,"data-layer":"global"},children:o.map((r,s)=>({name:"tspan",type:"element",value:"",attributes:{x:"10",dy:s===0?"0":"1.2em"},children:[{type:"text",value:r,name:"",attributes:{},children:[]}]}))}}function bZn({anchorPosition:e,textWidth:t,textHeight:n,anchorAlignment:o}){switch(o){case"top_left":return{x:e.x+t/2,y:e.y+n/2};case"top_center":return{x:e.x,y:e.y+n/2};case"top_right":return{x:e.x-t/2,y:e.y+n/2};case"center_left":return{x:e.x+t/2,y:e.y};case"center_right":return{x:e.x-t/2,y:e.y};case"bottom_left":return{x:e.x+t/2,y:e.y-n/2};case"bottom_center":return{x:e.x,y:e.y-n/2};case"bottom_right":return{x:e.x-t/2,y:e.y-n/2};case"center":default:return e}}function SZn(e){let{POSITIVE_INFINITY:t,POSITIVE_INFINITY:n,NEGATIVE_INFINITY:o,NEGATIVE_INFINITY:i}=Number,r=!1,{POSITIVE_INFINITY:s,POSITIVE_INFINITY:a,NEGATIVE_INFINITY:c,NEGATIVE_INFINITY:l}=Number,d=!1;for(let y of e)if(y.type==="pcb_panel"){let x=y,C=ze.parse(x.width),I=ze.parse(x.height);if(C===void 0||I===void 0)continue;let b=x.center??{x:C/2,y:I/2};u({center:b,width:C,height:I})}else if(y.type==="pcb_board"){if(y.outline&&Array.isArray(y.outline)&&y.outline.length>=3)A(y.outline),m(y.outline);else if("center"in y&&"width"in y&&"height"in y)u({center:y.center,width:y.width,height:y.height}),h({center:y.center,width:y.width,height:y.height})}else if(y.type==="pcb_courtyard_rect")u({center:y.center,width:y.width,height:y.height,ccwRotationDegrees:y.ccw_rotation});else if(y.type==="pcb_soldermask_opening")if(y.shape==="polygon")p(y.points);else if(y.shape==="circle")u({center:{x:y.x,y:y.y},width:y.radius*2,height:y.radius*2});else u({center:{x:y.x,y:y.y},width:y.width,height:y.height,ccwRotationDegrees:y.shape==="rotated_rect"?y.ccw_rotation:0});else if(y.type==="pcb_solder_paste"&&y.shape==="polygon")p(y.points);else if(y.type==="pcb_smtpad"){let x=y;if(x.shape==="rect"||x.shape==="pill")u({center:{x:x.x,y:x.y},width:x.width,height:x.height});else if(x.shape==="rotated_rect"||x.shape==="rotated_pill")u({center:{x:x.x,y:x.y},width:x.width,height:x.height,ccwRotationDegrees:x.ccw_rotation});else if(x.shape==="circle"){let C=ze.parse(x.radius);if(C!==void 0)u({center:{x:x.x,y:x.y},width:C*2,height:C*2})}else if(x.shape==="polygon")p(x.points)}else if(y.type==="pcb_via"){let x=ze.parse(y.outer_diameter);u({center:{x:y.x,y:y.y},width:x??0,height:x??0})}else if(y.type==="pcb_plated_hole"){let x=y,C={x:x.x,y:x.y};if(x.shape==="circle"){let I=ze.parse(x.outer_diameter);u({center:C,width:I??0,height:I??0})}else if(x.shape==="oval"||x.shape==="pill")u({center:C,width:x.outer_width,height:x.outer_height});else if(x.shape==="circular_hole_with_rect_pad"||x.shape==="pill_hole_with_rect_pad")u({center:C,width:x.rect_pad_width,height:x.rect_pad_height});else if(x.shape==="rotated_pill_hole_with_rect_pad")u({center:C,width:x.rect_pad_width,height:x.rect_pad_height,ccwRotationDegrees:x.rect_ccw_rotation});else if(x.shape==="hole_with_polygon_pad")p((x.pad_outline??[]).map((I)=>({x:x.x+I.x,y:x.y+I.y})))}else if(y.type==="pcb_hole"){let x=y,C={x:x.x,y:x.y};if(x.hole_shape==="circle"||x.hole_shape==="square"){let I=ze.parse(x.hole_diameter);u({center:C,width:I??0,height:I??0})}else if(x.hole_shape==="rotated_pill")u({center:C,width:x.hole_width,height:x.hole_height,ccwRotationDegrees:x.ccw_rotation});else if(x.hole_shape==="oval"||x.hole_shape==="rect"||x.hole_shape==="pill")u({center:C,width:x.hole_width,height:x.hole_height})}else if(y.type==="pcb_note_line")p([{x:y.x1,y:y.y1},{x:y.x2,y:y.y2}]);else if("x"in y&&"y"in y)u({center:{x:y.x,y:y.y},width:0,height:0});else if("route"in y)p(y.route);else if(y.type==="pcb_note_rect"||y.type==="pcb_fabrication_note_rect")u({center:y.center,width:y.width,height:y.height});else if(y.type==="pcb_note_dimension"||y.type==="pcb_fabrication_note_dimension"){let x=y,{from:C,to:I,text:b,font_size:P=1,arrow_size:E,offset_distance:B,offset_direction:w}=x;if(!C||!I||!E)continue;u({center:C,width:0,height:0}),u({center:I,width:0,height:0});let T=(le)=>{let he=Math.hypot(le.x,le.y)||1;return{x:le.x/he,y:le.y/he}},Q=T({x:I.x-C.x,y:I.y-C.y});if(Number.isNaN(Q.x)||Number.isNaN(Q.y))continue;let N={x:-Q.y,y:Q.x},F=w&&typeof w.x==="number"&&typeof w.y==="number",H=F?T(w):{x:0,y:0},z=typeof B==="number"?B:0,Y={x:H.x*z,y:H.y*z},U={x:C.x+Y.x,y:C.y+Y.y},X={x:I.x+Y.x,y:I.y+Y.y};u({center:U,width:0,height:0}),u({center:X,width:0,height:0});let V=F&&(Math.abs(H.x)>Number.EPSILON||Math.abs(H.y)>Number.EPSILON)?H:N,W=z+E,j={x:C.x+V.x*W,y:C.y+V.y*W},q={x:I.x+V.x*W,y:I.y+V.y*W};u({center:j,width:0,height:0}),u({center:q,width:0,height:0});let ne=E/2,ce={x:U.x+Q.x*E,y:U.y+Q.y*E},oe={x:X.x-Q.x*E,y:X.y-Q.y*E},ie={x:ce.x+N.x*ne,y:ce.y+N.y*ne},J={x:ce.x-N.x*ne,y:ce.y-N.y*ne};u({center:ie,width:0,height:0}),u({center:J,width:0,height:0});let ee={x:oe.x+N.x*ne,y:oe.y+N.y*ne},se={x:oe.x-N.x*ne,y:oe.y-N.y*ne};if(u({center:ee,width:0,height:0}),u({center:se,width:0,height:0}),b){let le={x:(C.x+I.x)/2+Y.x,y:(C.y+I.y)/2+Y.y},he=E*1.5,ue={x:le.x+N.x*he,y:le.y+N.y*he},Ae=b.length*P*0.6;u({center:ue,width:Ae,height:P})}}else if(y.type==="pcb_note_text"||y.type==="pcb_fabrication_note_text")_({text:y.text,anchorPosition:y.anchor_position,fontSize:y.font_size,anchorAlignment:y.anchor_alignment,ccwRotationDegrees:y.type==="pcb_fabrication_note_text"?y.ccw_rotation??1:0});else if(y.type==="pcb_cutout"){let x=y;if(x.shape==="rect")u({center:x.center,width:x.width,height:x.height,ccwRotationDegrees:x.rotation});else if(x.shape==="circle"){let C=ze.parse(x.radius);if(C!==void 0)u({center:x.center,width:C*2,height:C*2})}else if(x.shape==="polygon")p(x.points);else if(x.shape==="path"){let C=x;if(C.route&&Array.isArray(C.route))p(C.route)}}else if(y.type==="pcb_keepout"){let x=y;if(x.shape==="rect")u({center:x.center,width:x.width,height:x.height});else if(x.shape==="circle"){let C=typeof x.radius==="number"?x.radius:ze.parse(x.radius)??0;if(C>0)u({center:x.center,width:C*2,height:C*2})}else if(x.shape==="outline")for(let C of x.outline)u({center:C,width:x.stroke_width,height:x.stroke_width})}else if(y.type==="pcb_silkscreen_graphic"||y.type==="pcb_silkscreen_text"||y.type==="pcb_silkscreen_rect"||y.type==="pcb_silkscreen_circle"||y.type==="pcb_silkscreen_line"||y.type==="pcb_silkscreen_oval"||y.type==="pcb_silkscreen_pill")f(y);else if(y.type==="pcb_copper_text")u({center:y.anchor_position,width:0,height:0});else if(y.type==="pcb_copper_pour"){if(y.shape==="rect")u({center:y.center,width:y.width,height:y.height,ccwRotationDegrees:y.rotation});else if(y.shape==="polygon")p(y.points);else if(y.shape==="brep")p(y.brep_shape.outer_ring.vertices)}return{minX:t,minY:n,maxX:o,maxY:i,boardMinX:s,boardMinY:a,boardMaxX:c,boardMaxY:l,hasBounds:r,hasBoardBounds:d};function u({center:y,width:x,height:C,ccwRotationDegrees:I}){if(!y)return;let b=ze.parse(y.x),P=ze.parse(y.y);if(b===void 0||P===void 0)return;let E=ze.parse(x)??0,B=ze.parse(C)??0,w=E/2,T=B/2;if(typeof I==="number"&&I!==0){let Q=I*Math.PI/180,N=Math.abs(Math.cos(Q)),F=Math.abs(Math.sin(Q)),H=w*N+T*F,z=w*F+T*N;w=H,T=z}t=Math.min(t,b-w),n=Math.min(n,P-T),o=Math.max(o,b+w),i=Math.max(i,P+T),r=!0}function h({center:y,width:x,height:C}){if(!y)return;let I=ze.parse(y.x),b=ze.parse(y.y);if(I===void 0||b===void 0)return;let P=ze.parse(x)??0,E=ze.parse(C)??0,B=P/2,w=E/2;s=Math.min(s,I-B),a=Math.min(a,b-w),c=Math.max(c,I+B),l=Math.max(l,b+w),r=!0,d=!0}function A(y){let x=!1;for(let C of y){let I=ze.parse(C.x),b=ze.parse(C.y);if(I===void 0||b===void 0)continue;t=Math.min(t,I),n=Math.min(n,b),o=Math.max(o,I),i=Math.max(i,b),x=!0}if(x)r=!0}function m(y){let x=!1;for(let C of y){let I=ze.parse(C.x),b=ze.parse(C.y);if(I===void 0||b===void 0)continue;s=Math.min(s,I),a=Math.min(a,b),c=Math.max(c,I),l=Math.max(l,b),x=!0}if(x)r=!0,d=!0}function p(y){let x=!1,C=[...y.flatMap(g),...pmt(y).flatMap(Amt)];for(let I of C)for(let b of[I]){let P=ze.parse(b.x),E=ze.parse(b.y);if(P===void 0||E===void 0)continue;t=Math.min(t,P),n=Math.min(n,E),o=Math.max(o,P),i=Math.max(i,E),x=!0}if(x)r=!0}function g(y){return"route_type"in y?pJn(y):[y]}function _({text:y,anchorPosition:x,fontSize:C=1,anchorAlignment:I="center",ccwRotationDegrees:b=0}){if(!y||!x)return;let P=y.split(`
`),B=Math.max(...P.map((Q)=>Q.length),0)*C*0.6,w=Math.max(P.length,1)*C,T=bZn({anchorPosition:x,textWidth:B,textHeight:w,anchorAlignment:I});u({center:T,width:B,height:w,ccwRotationDegrees:b})}function f(y){if(y.type==="pcb_silkscreen_text")u({center:y.anchor_position,width:0,height:0});else if(y.type==="pcb_silkscreen_graphic"){for(let x of y.brep_shape.outer_ring.vertices)u({center:{x:x.x,y:x.y},width:0,height:0});for(let x of y.brep_shape.inner_rings??[])for(let C of x.vertices)u({center:{x:C.x,y:C.y},width:0,height:0})}else if(y.type==="pcb_silkscreen_path")p(y.route);else if(y.type==="pcb_silkscreen_rect")u({center:y.center,width:y.width,height:y.height,ccwRotationDegrees:y.ccw_rotation});else if(y.type==="pcb_silkscreen_circle"){let x=ze.parse(y.radius);if(x!==void 0)u({center:y.center,width:x*2,height:x*2})}else if(y.type==="pcb_silkscreen_line")u({center:{x:y.x1,y:y.y1},width:0,height:0}),u({center:{x:y.x2,y:y.y2},width:0,height:0});else if(y.type==="pcb_silkscreen_oval"){let x=ze.parse(y.radius_x),C=ze.parse(y.radius_y);if(x!==void 0&&C!==void 0)u({center:y.center,width:x*2,height:C*2})}else if(y.type==="pcb_silkscreen_pill")u({center:y.center,width:y.width,height:y.height,ccwRotationDegrees:y.ccw_rotation});else if(y.type==="pcb_cutout"){let x=y;if(x.shape==="rect")u({center:x.center,width:x.width,height:x.height,ccwRotationDegrees:x.rotation});else if(x.shape==="circle"){let C=ze.parse(x.radius);if(C!==void 0)u({center:x.center,width:C*2,height:C*2})}else if(x.shape==="polygon")p(x.points);else if(x.shape==="path"){let C=x;if(C.route&&Array.isArray(C.route))p(C.route)}}}}function Q0t(e,t,n){if(!e||t===void 0||n===void 0)return;let o=ze.parse(e.x),i=ze.parse(e.y);if(o===void 0||i===void 0)return;let r=ze.parse(t),s=ze.parse(n);if(r===void 0||s===void 0)return;let a=r/2,c=s/2;return{minX:o-a,minY:i-c,maxX:o+a,maxY:i+c}}function vZn(e){if(!e||e.length<3)return;let{POSITIVE_INFINITY:t,POSITIVE_INFINITY:n,NEGATIVE_INFINITY:o,NEGATIVE_INFINITY:i}=Number;for(let r of e){let s=ze.parse(r.x),a=ze.parse(r.y);if(s===void 0||a===void 0)continue;t=Math.min(t,s),n=Math.min(n,a),o=Math.max(o,s),i=Math.max(i,a)}if(!Number.isFinite(t)||!Number.isFinite(n))return;if(!Number.isFinite(o)||!Number.isFinite(i))return;return{minX:t,minY:n,maxX:o,maxY:i}}function k0t(e,t){if(!t.showPinNumbers)return[];if(e.type==="pcb_smtpad"){if(t.layer&&e.layer!==t.layer)return[]}else if(t.layer&&!e.layers.includes(t.layer))return[];let n=BJn(e,t.circuitJson);if(!n)return[];let o=TZn(e);if(!o||o.width<=0||o.height<=0)return[];let i=Math.abs(t.transform.a),r=Math.min(EZn,o.height*MZn,o.width*wZn/(n.length*BZn));if(r<=0)return[];let[s,a]=tt(t.transform,[o.centerX,o.centerY]),c=e.type==="pcb_smtpad"?e.layer:"through",l=o.ccwRotation?`rotate(${-o.ccwRotation} ${s} ${a})`:void 0;return[{name:"text",type:"element",value:"",attributes:{class:"pcb-pad-pin-number",x:s.toString(),y:a.toString(),fill:"#b0b0b0","font-family":"Arial, sans-serif","font-size":(r*i).toString(),"font-weight":"500","text-anchor":"middle","dominant-baseline":"central","pointer-events":"none","data-type":"pcb_pad_pin_number","data-pcb-layer":c,"data-pin-number":n,...l?{transform:l}:{}},children:[{type:"text",value:n,name:"",attributes:{},children:[]}]}]}function TZn(e){if(e.type==="pcb_smtpad"){if(e.shape==="polygon")return L0t(e.points);if(e.shape==="circle")return{centerX:e.x,centerY:e.y,width:e.radius*2,height:e.radius*2,ccwRotation:0};return{centerX:e.x,centerY:e.y,width:e.width,height:e.height,ccwRotation:e.shape==="rotated_rect"||e.shape==="rotated_pill"?e.ccw_rotation:0}}if(e.shape==="circle")return{centerX:e.x,centerY:e.y,width:e.outer_diameter,height:e.outer_diameter,ccwRotation:0};if(e.shape==="oval"||e.shape==="pill")return{centerX:e.x,centerY:e.y,width:e.outer_width,height:e.outer_height,ccwRotation:e.ccw_rotation};if(e.shape==="hole_with_polygon_pad"){let t=L0t(e.pad_outline);if(!t)return;return{...t,centerX:e.x+t.centerX,centerY:e.y+t.centerY,ccwRotation:0}}if("rect_pad_width"in e)return{centerX:e.x,centerY:e.y,width:e.rect_pad_width,height:e.rect_pad_height,ccwRotation:e.shape==="rotated_pill_hole_with_rect_pad"?e.rect_ccw_rotation:e.shape==="circular_hole_with_rect_pad"?e.rect_ccw_rotation??0:0};return}function L0t(e){if(e.length===0)return;let t=e.map((a)=>a.x),n=e.map((a)=>a.y),o=Math.min(...t),i=Math.max(...t),r=Math.min(...n),s=Math.max(...n);return{centerX:(o+i)/2,centerY:(r+s)/2,width:i-o,height:s-r,ccwRotation:0}}function DZn(e,t){return e.map((n)=>({...n,attributes:{...n.attributes??{},"data-type":t.type,"data-pcb-layer":"overlay"}}))}function NZn(e,t,n){if(!n.shouldDrawWarnings)return[];let o=t.find((_)=>_.type==="pcb_component"&&_.pcb_component_id===e.pcb_component_id);if(!o)return[];let i=(o.rotation??0)*Math.PI/180,r=Math.cos(i),s=Math.sin(i),a=o.width/2,c=o.height/2,l=[{x:-a,y:-c},{x:a,y:-c},{x:a,y:c},{x:-a,y:c}].map((_)=>tt(n.transform,{x:o.center.x+_.x*r-_.y*s,y:o.center.y+_.x*s+_.y*r})),d=Math.min(...l.map((_)=>_.x)),u=Math.min(...l.map((_)=>_.y)),h=Math.max(...l.map((_)=>_.x)),A=Math.max(...l.map((_)=>_.y)),m=h-d,p=A-u,g=d+m/2;return DZn([{name:"rect",type:"element",value:"",attributes:{x:d.toString(),y:u.toString(),width:m.toString(),height:p.toString(),fill:"none",stroke:F0t,"stroke-width":"2","stroke-dasharray":"6,3"},children:[]},{name:"text",type:"element",value:"",attributes:{x:g.toString(),y:(u-10).toString(),fill:F0t,"font-family":"sans-serif","font-size":"12","font-weight":"600","text-anchor":"middle"},children:[{type:"text",name:"",value:e.message,attributes:{},children:[]}]}],e)}function kZn({debugObject:e,transform:t,style:n,labelStackIndex:o=0}){let i=QZn(e),r={fill:"none",stroke:Fmt,"stroke-width":n.strokeWidth.toString(),"stroke-dasharray":`${n.dashLength},${n.dashLength}`};if(e.shape==="rect"){let c=tt(t,[e.center.x-e.size.width/2,e.center.y-e.size.height/2]),l=tt(t,[e.center.x+e.size.width/2,e.center.y+e.size.height/2]),d=Math.min(c[0],l[0]),u=Math.min(c[1],l[1]),h=Math.abs(l[0]-c[0]),A=Math.abs(l[1]-c[1]);return[{name:"g",type:"element",value:"",attributes:i,children:[{name:"rect",type:"element",value:"",attributes:{x:d.toString(),y:u.toString(),width:h.toString(),height:A.toString(),...r},children:[]},...gBe({label:e.label,x:d,y:u-n.labelGap-o*(n.fontSize+n.labelGap),style:n})]}]}if(e.shape==="line"){let[c,l]=tt(t,[e.start.x,e.start.y]),[d,u]=tt(t,[e.end.x,e.end.y]);return[{name:"g",type:"element",value:"",attributes:i,children:[{name:"line",type:"element",value:"",attributes:{x1:c.toString(),y1:l.toString(),x2:d.toString(),y2:u.toString(),...r},children:[]},...gBe({label:e.label,x:(c+d)/2,y:(l+u)/2-n.labelGap,style:n,anchor:"middle"})]}]}let[s,a]=tt(t,[e.center.x,e.center.y]);return[{name:"g",type:"element",value:"",attributes:i,children:[{name:"circle",type:"element",value:"",attributes:{cx:s.toString(),cy:a.toString(),r:n.pointRadius.toString(),...r},children:[]},...gBe({label:e.label,x:s+n.pointRadius+n.labelGap,y:a-n.pointRadius,style:n})]}]}function LZn(e){let t=new Map,n=new Map,o=e.filter((s)=>s.type==="pcb_board");for(let s of e)switch(s.type){case"source_group":if(n.set(s.source_group_id,s.subcircuit_id??s.parent_subcircuit_id??s.parent_source_group_id),s.is_subcircuit&&s.subcircuit_id)n.set(s.subcircuit_id,s.parent_subcircuit_id??s.parent_source_group_id);break;case"pcb_group":n.set(s.pcb_group_id,s.subcircuit_id??s.source_group_id);break;case"pcb_component":n.set(s.pcb_component_id,s.subcircuit_id??s.pcb_group_id);break;case"pcb_trace":n.set(s.pcb_trace_id,s.subcircuit_id??s.pcb_group_id??s.pcb_component_id);break;case"pcb_via":n.set(s.pcb_via_id,s.subcircuit_id??s.pcb_group_id??s.pcb_trace_id);break}for(let s of o)if(t.set(s.pcb_board_id,s),s.subcircuit_id)t.set(s.subcircuit_id,s);let i=new Set;function r(s){if(t.has(s))return t.get(s);if(i.has(s)||!n.has(s))return;i.add(s);let a=n.get(s),c=a?r(a):o.length===1?o[0]:void 0;return t.set(s,c),i.delete(s),c}for(let s of n.keys())r(s);return t}function NJ(e,t){if(t?.showFabricationNotes===!1)e=e.filter((he)=>!he.type.startsWith("pcb_fabrication_note_"));let n=Boolean(t?.xRayElementIds?.length);if(n&&t?.hiddenLayerOpacity!==void 0&&(!Number.isFinite(t.hiddenLayerOpacity)||t.hiddenLayerOpacity<0||t.hiddenLayerOpacity>1))throw Error("hiddenLayerOpacity must be between 0 and 1");let o=!n&&(t?.drawPaddingOutsideBoard??!0),i=t?.layer,r=t?.colorOverrides,s={...gh.copper};if(r?.copper){for(let[he,ue]of Object.entries(r.copper))if(ue!==void 0)s[he]=ue}let a={copper:s,drill:r?.drill??gh.drill,silkscreen:{top:r?.silkscreen?.top??gh.silkscreen.top,bottom:r?.silkscreen?.bottom??gh.silkscreen.bottom},boardOutline:r?.boardOutline??gh.boardOutline,soldermask:{top:r?.soldermask?.top??gh.soldermask.top,bottom:r?.soldermask?.bottom??gh.soldermask.bottom},soldermaskOverCopper:{top:r?.soldermaskOverCopper?.top??gh.soldermaskOverCopper.top,bottom:r?.soldermaskOverCopper?.bottom??gh.soldermaskOverCopper.bottom},soldermaskWithCopperUnderneath:{top:r?.soldermaskWithCopperUnderneath?.top??gh.soldermaskWithCopperUnderneath.top,bottom:r?.soldermaskWithCopperUnderneath?.bottom??gh.soldermaskWithCopperUnderneath.bottom},substrate:r?.substrate??gh.substrate,courtyard:{top:r?.courtyard?.top??gh.courtyard.top,bottom:r?.courtyard?.bottom??gh.courtyard.bottom},keepout:r?.keepout??gh.keepout,debugComponent:{fill:r?.debugComponent?.fill??gh.debugComponent.fill,stroke:r?.debugComponent?.stroke??gh.debugComponent.stroke}},c=e.filter((he)=>{if(he.type==="pcb_courtyard_rect"&&!t?.showCourtyards)return!1;if(he.type==="pcb_soldermask_opening")return Boolean(t?.showSolderMask)&&(!i||he.layer===i);return!0}),{minX:l,minY:d,maxX:u,maxY:h,boardMinX:A,boardMinY:m,boardMaxX:p,boardMaxY:g,hasBoardBounds:_}=SZn(c),{boundsMinX:f,boundsMinY:y,boundsMaxX:x,boundsMaxY:C,padding:I}=PZn({circuitJson:e,drawPaddingOutsideBoard:o,baseBounds:{minX:l,minY:d,maxX:u,maxY:h,boardMinX:A,boardMinY:m,boardMaxX:p,boardMaxY:g,hasBoardBounds:_},viewportOptions:{viewport:t?.viewport,viewportTarget:t?.viewportTarget}}),b=x-f+2*I,P=C-y+2*I,E=t?.width??800,B=t?.height??600;if(t?.matchBoardAspectRatio){let he=x-f,ue=C-y;if(he>0&&ue>0){let Ae=he/ue;if(t?.width&&!t?.height)B=t.width/Ae;else if(t?.height&&!t?.width)E=t.height*Ae;else B=E/Ae}}let w=[];for(let he of e)if("route"in he&&he.route!==void 0)w.push(he.route);let T=E/b,Q=B/P,N=Math.min(T,Q),F=(E-b*N)/2,H=(B-P*N)/2,z=_o(So(F-f*N+I*N,B-H+y*N-I*N),xc(N,-N)),Y=Math.min(E,B),U=Math.max(1,Math.min(2,Y*0.002)),X=Math.max(10,Math.min(18,Y*0.02)),V={transform:z,layer:i,shouldDrawErrors:t?.shouldDrawErrors,shouldDrawWarnings:t?.shouldDrawWarnings,showCourtyards:t?.showCourtyards,showPcbGroups:t?.showPcbGroups,drawPaddingOutsideBoard:o,colorMap:a,showSolderMask:t?.showSolderMask,showSolderPaste:t?.showSolderPaste,showPcbNotes:t?.showPcbNotes??!0,showBendLines:t?.showBendLines,showDebugObjects:t?.showDebugObjects,debugObjectStyle:{fontSize:X,strokeWidth:U,dashLength:U*4,labelGap:X*0.35,pointRadius:U*3},showAnchorOffsets:t?.showAnchorOffsets,showPinNumbers:t?.showPinNumbers,circuitJson:e,boardOwnerMap:LZn(e),usedCopperPourTraceMaskIds:new Set},W=n?[]:e.flatMap((he)=>fBe({elm:he,circuitJson:e,ctx:V}));if(!n)W.push(...kJn({circuitJson:e,ctx:V,create:(he,ue)=>fBe({elm:he,circuitJson:e,ctx:ue})}));let j=String(0.05*N);for(let he of e)if("stroke_width"in he){j=String(N*he.stroke_width);break}if(!n&&t?.shouldDrawRatsNest){let he=nZn(e,V);W=[...W,...he]}let q=n?sJn({circuitJson:e,ctx:V,selectedIds:t.xRayElementIds,hiddenOpacity:t?.hiddenLayerOpacity??0.2,width:E,height:B,create:(he,ue)=>fBe({elm:he,circuitJson:e,ctx:ue})}):ymt(vmt(W)),ne=[{name:"style",type:"element",value:"",attributes:{},children:[{type:"text",value:"",name:"",attributes:{},children:[]}]}],ce=hZn({grid:n?void 0:t?.grid,svgWidth:E,svgHeight:B});if(ce.defs)ne.push(ce.defs);if(e.some((he)=>he.type==="pcb_keepout"))ne.push(aZn(a.keepout??gh.keepout));let ie=CJn({circuitJson:e,transform:z,svgWidth:E,svgHeight:B,usedMaskIds:V.usedCopperPourTraceMaskIds});if(ie)ne.push(ie);let J=CZn({showSolderMask:V.showSolderMask,objects:W,layer:i??"top",width:E,height:B});if(J)ne.push(J);if(ne.push({name:"rect",type:"element",value:"",attributes:{class:"boundary",x:"0",y:"0",fill:t?.backgroundColor??"#000",width:E.toString(),height:B.toString(),"data-type":"pcb_background","data-pcb-layer":"global"},children:[]}),o)ne.push(FZn(z,l,d,u,h));if(ne.push(...q),t?.simulationResultId)ne.push(...TJn({circuitJson:e,resultId:t.simulationResultId,ctx:V,options:t.returnCurrent,width:E,height:B}));if(ce.rect)ne.push(ce.rect);if(!n&&t?.showErrorsInTextOverlay){let he=pG(e,"pcb_error_text_overlay");if(he)ne.push(he)}let ee=S7(e),se=P7,le={name:"svg",type:"element",attributes:{xmlns:"http://www.w3.org/2000/svg",width:E.toString(),height:B.toString(),...ee&&{"data-software-used-string":ee},...t?.includeVersion&&{"data-circuit-to-svg-version":se}},value:"",children:ne.filter((he)=>he!==null)};try{return b7(le)}catch(he){throw console.error("Error stringifying SVG object:",he),he}}function fBe({elm:e,circuitJson:t,ctx:n}){switch(e.type){case"pcb_debug_object":return n.showDebugObjects?kZn({debugObject:e,transform:n.transform,style:n.debugObjectStyle,labelStackIndex:e.shape==="rect"?t.slice(0,t.indexOf(e)).filter((i)=>i.type==="pcb_debug_object"&&i.shape==="rect"&&i.center.x===e.center.x&&i.center.y===e.center.y&&i.size.width===e.size.width&&i.size.height===e.size.height).length:0}):[];case"pcb_trace_error":return FJn(e,t,n).filter(Boolean);case"pcb_footprint_overlap_error":return zJn(e,t,n).filter(Boolean);case"pcb_courtyard_overlap_error":return GJn(e,t,n).filter(Boolean);case"pcb_component_outside_board_error":return UJn(e,t,n).filter(Boolean);case"pcb_pad_trace_clearance_error":case"pcb_via_trace_clearance_error":return $Jn(e,t,n).filter(Boolean);case"pcb_connector_not_in_accessible_orientation_warning":case"pcb_manual_edit_conflict_warning":return NZn(e,t,n);case"pcb_component":return pZn(e,n).filter(Boolean);case"pcb_trace":return xmt(e,n);case"pcb_copper_pour":return dZn(e,n);case"pcb_plated_hole":return[...x$n(e,n).filter(Boolean),...k0t(e,n)];case"pcb_hole":return Z$n(e,n);case"pcb_smtpad":return[...Smt(e,n),...k0t(e,n)];case"pcb_solder_paste":return n.showSolderPaste?Lmt(e,n):[];case"pcb_silkscreen_text":return D$n(e,n);case"pcb_silkscreen_rect":return N$n(e,n);case"pcb_silkscreen_circle":return k$n(e,n);case"pcb_silkscreen_line":return L$n(e,n);case"pcb_silkscreen_pill":return F$n(e,n);case"pcb_silkscreen_oval":return H$n(e,n);case"pcb_copper_text":return Q$n(e,n);case"pcb_courtyard_rect":if(!n.showCourtyards)return[];return O$n(e,n);case"pcb_courtyard_polygon":if(!n.showCourtyards)return[];return z$n(e,n);case"pcb_courtyard_circle":if(!n.showCourtyards)return[];return Y$n(e,n);case"pcb_courtyard_outline":if(!n.showCourtyards)return[];return G$n(e,n);case"pcb_fabrication_note_path":return ZJn(e,n);case"pcb_fabrication_note_text":return e$n(e,n);case"pcb_fabrication_note_rect":return o$n(e,n);case"pcb_fabrication_note_dimension":return a$n(e,n);case"pcb_note_dimension":if(!n.showPcbNotes)return[];return c$n(e,n);case"pcb_note_text":if(!n.showPcbNotes)return[];return d$n(e,n);case"pcb_note_rect":if(!n.showPcbNotes)return[];return m$n(e,n);case"pcb_note_path":if(!n.showPcbNotes)return[];return A$n(e,n);case"pcb_note_line":if(!n.showPcbNotes)return[];return g$n(e,n);case"pcb_bend":if(!n.showBendLines)return[];return y$n(e,n);case"pcb_silkscreen_path":return C$n(e,n);case"pcb_silkscreen_graphic":return I$n(e,n);case"pcb_panel":return n.drawPaddingOutsideBoard?$$n(e,n):[];case"pcb_board":return n.drawPaddingOutsideBoard?kmt(e,n):[];case"pcb_via":if(n.layer&&!e.layers.includes(n.layer))return[];return LBe(e,n);case"pcb_cutout":let o=e;if(o.shape==="path")return iZn(o,n);return oZn(e,n);case"pcb_keepout":return cZn(e,n);case"pcb_group":return n.showPcbGroups?gZn(e,n):[];default:return[]}}function FZn(e,t,n,o,i){let[r,s]=tt(e,[t,n]),[a,c]=tt(e,[o,i]),l=Math.abs(a-r),d=Math.abs(c-s),u=Math.min(r,a),h=Math.min(s,c);return{name:"rect",type:"element",value:"",children:[],attributes:{class:"pcb-boundary",fill:"none",stroke:"#fff","stroke-width":"0.3",x:u.toString(),y:h.toString(),width:l.toString(),height:d.toString(),"data-type":"pcb_boundary","data-pcb-layer":"global"}}}function OZn(e){let t=/^data:([^,]*),(.*)$/s.exec(e);if(!t)throw Error("Invalid simulation asset data URL");return t[1].split(";").includes("base64")?Uint8Array.from(atob(t[2]),(n)=>n.charCodeAt(0)):new TextEncoder().encode(decodeURIComponent(t[2]))}async function H0t(e,t){if(e.url.startsWith("data:"))return OZn(e.url);if(!t.resolveAsset)throw Error(`External simulation asset '${e.project_relative_path}' requires resolveAsset`);let n=await t.resolveAsset(e);return typeof n==="string"?new TextEncoder().encode(n):n}async function zZn(e,t){Pmt(e,t.simulationResultId);let n={...t.returnCurrent?.fieldData},o=await Promise.all(e.map(async(i)=>{if(!("simulation_pcb_return_current_result_id"in i)||i.simulation_pcb_return_current_result_id!==t.simulationResultId||!("layer"in i)||t.layer&&i.layer!==t.layer)return i;if(i.type==="simulation_pcb_return_current_field"){let r=gz.parse(i),s=r.simulation_pcb_return_current_field_id;if(n[s])return i;let a=await H0t(r.field_asset,t);if(r.field_asset.mimetype==="application/gzip")a=new Uint8Array(await new Response(new Blob([a]).stream().pipeThrough(new DecompressionStream("gzip"))).arrayBuffer());n[s]=Fq(r).parse(JSON.parse(new TextDecoder().decode(a)))}if(i.type==="simulation_pcb_return_current_heatmap"&&t.resolveAsset&&!i.image_asset.url.startsWith("data:")){let r=Hce.parse(i.image_asset),s=await H0t(r,t),a="";for(let c of s)a+=String.fromCharCode(c);return{...i,image_asset:{...r,url:`data:${r.mimetype};base64,${btoa(a)}`}}}return i}));return NJ(o,{...t,returnCurrent:{...t.returnCurrent,fieldData:n}})}function GZn(e,t,n={}){let{width:o,height:i,center:r,outline:s}=e,a;if(s&&Array.isArray(s)&&s.length>=3)a=s.map((c,l)=>{let[d,u]=tt(t,[c.x,c.y]);return l===0?`M ${d} ${u}`:`L ${d} ${u}`}).join(" ");else{let c=o/2,l=i/2,d=tt(t,[r.x-c,r.y-l]),u=tt(t,[r.x+c,r.y-l]),h=tt(t,[r.x+c,r.y+l]),A=tt(t,[r.x-c,r.y+l]);a=`M ${d[0]} ${d[1]} L ${u[0]} ${u[1]} L ${h[0]} ${h[1]} L ${A[0]} ${A[1]}`}return a+=" Z",[{name:"path",type:"element",value:"",children:[],attributes:{class:"pcb-board",d:a,fill:n.fill??nhe.fill,stroke:n.stroke??nhe.stroke,"stroke-opacity":n.strokeOpacity??nhe.strokeOpacity,"stroke-width":((n.strokeWidthFactor??nhe.strokeWidthFactor)*Math.abs(t.a)).toString()}}]}function VZn(e,t){let{elm:n,portPosition:o,name:i,arePinsInterchangeable:r}=e,{transform:s}=t,{center:a,width:c,height:l,rotation:d=0,layer:u="top"}=n;if(!a||typeof c!=="number"||typeof l!=="number")return null;let[h,A]=tt(s,[a.x,a.y]),[m,p]=tt(s,[o.x,o.y]),g=c*Math.abs(s.a),_=l*Math.abs(s.d),f=u==="top",y=p>A,x=m<h,C=[UZn(g,_,d,u),WZn(g,_,i??"",s)];if(!r)C.push(XZn(g,_,d,u,y,x));return{name:"g",type:"element",value:"",attributes:{transform:`translate(${h}, ${A}) scale(1, -1)`},children:C}}function UZn(e,t,n,o){let i=e/2,r=t/2,s=0.8;return{name:"path",type:"element",attributes:{class:"assembly-component",d:KZn(i,r,n),"stroke-width":0.8 .toFixed(2),transform:`rotate(${-n})`,"stroke-dasharray":o==="bottom"?"2,2":""},value:"",children:[]}}function WZn(e,t,n,o){let i=Math.min(e,t),r=3,s=58,a=0.8,c=Math.min(58,Math.max(3,i*0.8)),l=t>e;return{name:"text",type:"element",attributes:{x:"0",y:"0",class:"assembly-component-label","text-anchor":"middle",dy:".10em",style:"pointer-events: none","font-size":`${c.toFixed(1)}px`,transform:l?"rotate(90) scale(1, -1)":"scale(1, -1)"},children:[{type:"text",value:n||"",name:"",attributes:{},children:[]}],value:""}}function XZn(e,t,n,o,i,r){let s=e/2,a=t/2,c=Math.min(s,a)*0.5,l;if(i&&r)l=[[-s,-a],[-s+c,-a],[-s,-a+c]];else if(i&&!r)l=[[s,-a],[s-c,-a],[s,-a+c]];else if(!i&&r)l=[[-s,a],[-s+c,a],[-s,a-c]];else l=[[s,a],[s-c,a],[s,a-c]];return{name:"polygon",type:"element",attributes:{class:"assembly-pin1-indicator",points:l.map((u)=>u.join(",")).join(" "),fill:"#333",stroke:"none",transform:`rotate(${-n})`},value:"",children:[]}}function KZn(e,t,n){let o=(a,c,l)=>{let d=Math.PI/180*l,u=Math.cos(d),h=Math.sin(d);return[a*u-c*h,a*h+c*u]};return`${[[-e,-t],[e,-t],[e,t],[-e,t]].map(([a,c])=>o(a,c,n)).map(([a,c],l)=>l===0?`M${a},${c}`:`L${a},${c}`).join(" ")} Z`}function jZn(e,t){let{transform:n}=t,[o,i]=tt(n,[e.x,e.y]);if(e.hole_shape==="circle"||e.hole_shape==="square"){let r=e.hole_diameter*Math.abs(n.a),s=r/2;if(e.hole_shape==="circle")return[{name:"circle",type:"element",attributes:{class:"assembly-hole",cx:o.toString(),cy:i.toString(),r:s.toString(),fill:yBe},children:[],value:""}];return[{name:"rect",type:"element",attributes:{class:"assembly-hole",x:(o-s).toString(),y:(i-s).toString(),width:r.toString(),height:r.toString(),fill:yBe},children:[],value:""}]}if(e.hole_shape==="oval"){let r=e.hole_width*Math.abs(n.a),s=e.hole_height*Math.abs(n.a),a=r/2,c=s/2;return[{name:"ellipse",type:"element",attributes:{class:"assembly-hole",cx:o.toString(),cy:i.toString(),rx:a.toString(),ry:c.toString(),fill:yBe},children:[],value:""}]}return[]}function qZn(e,t){let{transform:n}=t,[o,i]=tt(n,[e.x,e.y]);if(e.shape==="pill"){let r=e.outer_width*Math.abs(n.a),s=e.outer_height*Math.abs(n.a),a=e.hole_width*Math.abs(n.a),c=e.hole_height*Math.abs(n.a),l=r/2,d=s-r,u=a/2;return[{name:"g",type:"element",children:[{name:"path",type:"element",attributes:{class:"assembly-hole-outer",fill:_J,d:`M${o-l},${i-d/2} v${d} a${l},${l} 0 0 0 ${r},0 v-${d} a${l},${l} 0 0 0 -${r},0 z`},value:"",children:[]},{name:"path",type:"element",attributes:{class:"assembly-hole-inner",fill:gJ,d:`M${o-u},${i-(c-a)/2} v${c-a} a${u},${u} 0 0 0 ${a},0 v-${c-a} a${u},${u} 0 0 0 -${a},0 z`},value:"",children:[]}],value:"",attributes:{}}]}if(e.shape==="circle"){let r=e.outer_diameter*Math.abs(n.a),s=e.outer_diameter*Math.abs(n.a),a=e.hole_diameter*Math.abs(n.a),c=e.hole_diameter*Math.abs(n.a),l=Math.min(r,s)/2,d=Math.min(a,c)/2;return[{name:"g",type:"element",children:[{name:"circle",type:"element",attributes:{class:"assembly-hole-outer",fill:_J,cx:o.toString(),cy:i.toString(),r:l.toString()},value:"",children:[]},{name:"circle",type:"element",attributes:{class:"assembly-hole-inner",fill:gJ,cx:o.toString(),cy:i.toString(),r:d.toString()},value:"",children:[]}],value:"",attributes:{}}]}if(e.shape==="circular_hole_with_rect_pad"){let r=e,s=r.hole_diameter*Math.abs(n.a),a=r.rect_pad_width*Math.abs(n.a),c=r.rect_pad_height*Math.abs(n.a),l=(r.rect_border_radius??0)*Math.abs(n.a),d=r.rect_ccw_rotation??0,u=s/2,[h,A]=tt(n,[r.x+r.hole_offset_x,r.y+r.hole_offset_y]);return[{name:"g",type:"element",children:[{name:"rect",type:"element",attributes:{class:"assembly-hole-outer-pad",fill:_J,...d?{x:(-a/2).toString(),y:(-c/2).toString(),transform:`translate(${o} ${i}) rotate(${-d})`}:{x:(o-a/2).toString(),y:(i-c/2).toString()},width:a.toString(),height:c.toString(),...l?{rx:l.toString(),ry:l.toString()}:{}},value:"",children:[]},{name:"circle",type:"element",attributes:{class:"assembly-hole-inner",fill:gJ,cx:h.toString(),cy:A.toString(),r:u.toString()},value:"",children:[]}],value:"",attributes:{}}]}if(e.shape==="pill_hole_with_rect_pad"){let r=e,s=r.rect_pad_width*Math.abs(n.a),a=r.rect_pad_height*Math.abs(n.a),c=(r.rect_border_radius??0)*Math.abs(n.a),l=r.hole_height*Math.abs(n.a),d=r.hole_width*Math.abs(n.a),u=r,h=u.hole_offset_x??0,A=u.hole_offset_y??0,[m,p]=tt(n,[r.x+h,r.y+A]),g=Math.min(l,d)/2;return[{name:"g",type:"element",children:[{name:"rect",type:"element",attributes:{class:"assembly-hole-outer-pad",fill:_J,x:(o-s/2).toString(),y:(i-a/2).toString(),width:s.toString(),height:a.toString(),...c?{rx:c.toString(),ry:c.toString()}:{}},value:"",children:[]},{name:"rect",type:"element",attributes:{class:"assembly-hole-inner",fill:gJ,x:(m-d/2).toString(),y:(p-l/2).toString(),width:d.toString(),height:l.toString(),rx:g.toString(),ry:g.toString()},value:"",children:[]}],value:"",attributes:{}}]}if(e.shape==="rotated_pill_hole_with_rect_pad"){let r=e,s=r.rect_pad_width*Math.abs(n.a),a=r.rect_pad_height*Math.abs(n.a),c=(r.rect_border_radius??0)*Math.abs(n.a),l=r.hole_height*Math.abs(n.a),d=r.hole_width*Math.abs(n.a),u=r,h=u.hole_offset_x??0,A=u.hole_offset_y??0,[m,p]=tt(n,[r.x+h,r.y+A]),g=Math.min(l,d)/2;return[{name:"g",type:"element",children:[{name:"rect",type:"element",attributes:{class:"assembly-hole-outer-pad",fill:_J,x:(-s/2).toString(),y:(-a/2).toString(),width:s.toString(),height:a.toString(),transform:`translate(${o} ${i}) rotate(${-r.rect_ccw_rotation})`,...c?{rx:c.toString(),ry:c.toString()}:{}},value:"",children:[]},{name:"rect",type:"element",attributes:{class:"assembly-hole-inner",fill:gJ,x:(-d/2).toString(),y:(-l/2).toString(),width:d.toString(),height:l.toString(),rx:g.toString(),ry:g.toString(),transform:`translate(${m} ${p}) rotate(${-r.hole_ccw_rotation})`},value:"",children:[]}],value:"",attributes:{}}]}return[]}function JZn(e,t){let{transform:n}=t;if(e.shape==="rect"||e.shape==="rotated_rect"){let o=e.width*Math.abs(n.a),i=e.height*Math.abs(n.d),[r,s]=tt(n,[e.x,e.y]),a=(e.rect_border_radius??0)*Math.abs(n.a);if(e.shape==="rotated_rect"&&e.ccw_rotation)return[{name:"rect",type:"element",attributes:{class:"assembly-pad",fill:fJ,x:(-o/2).toString(),y:(-i/2).toString(),width:o.toString(),height:i.toString(),transform:`translate(${r} ${s}) rotate(${-e.ccw_rotation})`,"data-layer":e.layer,...a?{rx:a.toString(),ry:a.toString()}:{}},value:"",children:[]}];return[{name:"rect",type:"element",attributes:{class:"assembly-pad",fill:fJ,x:(r-o/2).toString(),y:(s-i/2).toString(),width:o.toString(),height:i.toString(),"data-layer":e.layer,...a?{rx:a.toString(),ry:a.toString()}:{}},value:"",children:[]}]}if(e.shape==="pill"){let o=e.width*Math.abs(n.a),i=e.height*Math.abs(n.d),r=e.radius*Math.abs(n.a),[s,a]=tt(n,[e.x,e.y]);return[{name:"rect",type:"element",attributes:{class:"assembly-pad",fill:fJ,x:(s-o/2).toString(),y:(a-i/2).toString(),width:o.toString(),height:i.toString(),rx:r.toString(),ry:r.toString(),"data-layer":e.layer},value:"",children:[]}]}if(e.shape==="circle"){let o=e.radius*Math.abs(n.a),[i,r]=tt(n,[e.x,e.y]);return[{name:"circle",type:"element",attributes:{class:"assembly-pad",fill:fJ,cx:i.toString(),cy:r.toString(),r:o.toString(),"data-layer":e.layer},value:"",children:[]}]}if(e.shape==="polygon"){let o=(e.points??[]).map((i)=>tt(n,[i.x,i.y]));return[{name:"polygon",type:"element",attributes:{class:"assembly-pad",fill:fJ,points:o.map((i)=>i.join(",")).join(" "),"data-layer":e.layer},value:"",children:[]}]}return[]}function $Zn(e,t){let{POSITIVE_INFINITY:n,POSITIVE_INFINITY:o,NEGATIVE_INFINITY:i,NEGATIVE_INFINITY:r}=Number;for(let b of e)if(b.type==="pcb_board"){let P=b.center,E=b.width||0,B=b.height||0;n=Math.min(n,P.x-E/2),o=Math.min(o,P.y-B/2),i=Math.max(i,P.x+E/2),r=Math.max(r,P.y+B/2)}let s=1,a=i-n+2*s,c=r-o+2*s,l=t?.width??800,d=t?.height??600,u=l/a,h=d/c,A=Math.min(u,h),m=(l-a*A)/2,p=(d-c*A)/2,g=_o(So(m-n*A+s*A,d-p+o*A-s*A),xc(A,-A)),_={transform:g},f=e.sort((b,P)=>(O0t.indexOf(P.type)??9999)-(O0t.indexOf(b.type)??9999)).flatMap((b)=>ZZn(b,_,e)),y=S7(e),x=P7,C=[{name:"style",type:"element",children:[{type:"text",value:`
.assembly-component {
fill: none;
stroke: #000;
}
.assembly-board {
fill: #f2f2f2;
stroke: rgb(0,0,0);
stroke-opacity: 0.8;
}
.assembly-component-label {
fill: #000;
font-family: Arial, serif;
font-weight: bold;
dominant-baseline: middle;
text-anchor: middle;
}
.assembly-boundary {
fill: none;
stroke: #fff;
stroke-width: 0.2;
}
`,name:"",attributes:{},children:[]}],value:"",attributes:{}},{name:"rect",type:"element",attributes:{fill:"#fff",x:"0",y:"0",width:l.toString(),height:d.toString()},value:"",children:[]},eeo(g,n,o,i,r),...f].filter((b)=>b!==null);if(t?.showErrorsInTextOverlay){let b=pG(e);if(b)C.push(b)}let I={name:"svg",type:"element",attributes:{xmlns:"http://www.w3.org/2000/svg",width:l.toString(),height:d.toString(),...y&&{"data-software-used-string":y},...t?.includeVersion&&{"data-circuit-to-svg-version":x}},value:"",children:C};return b7(I)}function ZZn(e,t,n){let o=To(n).source_component.list();switch(e.type){case"pcb_board":return GZn(e,t.transform);case"pcb_component":{let i=o.find((a)=>a.source_component_id===e.source_component_id),s=To(n).pcb_port.list().filter((a)=>a.pcb_component_id===e.pcb_component_id)[0];if(i&&s){let a=i.are_pins_interchangeable,c=VZn({elm:e,portPosition:{x:s.x,y:s.y},name:i.name,arePinsInterchangeable:a},t);return c?[c]:[]}return[]}case"pcb_smtpad":return JZn(e,t);case"pcb_hole":return jZn(e,t);case"pcb_plated_hole":return qZn(e,t);default:return[]}}function eeo(e,t,n,o,i){let[r,s]=tt(e,[t,n]),[a,c]=tt(e,[o,i]),l=Math.abs(a-r),d=Math.abs(c-s),u=Math.min(r,a),h=Math.min(s,c);return{name:"rect",type:"element",value:"",children:[],attributes:{class:"assembly-boundary",x:u.toString(),y:h.toString(),width:l.toString(),height:d.toString()}}}function oeo(e,t){let{transform:n,soup:o}=t,{width:i,height:r,center:s,outline:a}=e,l=o.find((A)=>A.type==="source_board"&&A.title)?.title,d;if(a&&Array.isArray(a)&&a.length>=3)d=a.map((A,m)=>{let[p,g]=tt(n,[A.x,A.y]);return m===0?`M ${p} ${g}`:`L ${p} ${g}`}).join(" ");else{let A=i/2,m=r/2,p=tt(n,[s.x-A,s.y-m]),g=tt(n,[s.x+A,s.y-m]),_=tt(n,[s.x+A,s.y+m]),f=tt(n,[s.x-A,s.y+m]);d=`M ${p[0]} ${p[1]} L ${g[0]} ${g[1]} L ${_[0]} ${_[1]} L ${f[0]} ${f[1]}`}d+=" Z";let u=To(o).pcb_cutout.list();for(let A of u)if(A.shape==="rect"){let{x:m,y:p,width:g,height:_}=A.center?(()=>{let{x:P,y:E}=A.center,{width:B,height:w}=A;return{x:P,y:E,width:B,height:w}})():{x:0,y:0,width:0,height:0},f=g/2,y=_/2,[x,C,I,b]=[tt(n,[m-f,p-y]),tt(n,[m+f,p-y]),tt(n,[m+f,p+y]),tt(n,[m-f,p+y])];d+=` M ${x[0]} ${x[1]} L ${C[0]} ${C[1]} L ${I[0]} ${I[1]} L ${b[0]} ${b[1]} Z`}else if(A.shape==="circle");let h=[{name:"path",type:"element",value:"",children:[],attributes:{class:"pinout-board",d,fill:teo,stroke:neo,"fill-rule":"evenodd","stroke-opacity":"0.8","stroke-width":(0.2*Math.abs(n.a)).toString()}}];if(l){let A=t.svgWidth/2,m=30;h.push({name:"text",type:"element",value:"",children:[{name:"",type:"text",value:l,attributes:{},children:[]}],attributes:{x:A.toString(),y:30 .toString(),"text-anchor":"middle","font-size":"18px","font-weight":"bold","font-family":"Arial, sans-serif",fill:"black",class:"pinout-board-title"}})}return h}function seo(e,t){let{transform:n,soup:o}=t,{center:i,width:r,height:s,rotation:a=0,source_component_id:c}=e,l=To(o).source_component.get(c);if(!i||typeof r!=="number"||typeof s!=="number"||r===0||s===0)return[];let[d,u]=tt(n,[i.x,i.y]),h=r*Math.abs(n.a),A=s*Math.abs(n.d),m=`translate(${d}, ${u})`,p=[{name:"rect",type:"element",attributes:{class:"pinout-component-box",x:(-h/2).toString(),y:(-A/2).toString(),width:h.toString(),height:A.toString(),fill:ieo,transform:`rotate(${a}deg)`},value:"",children:[]}];if(l?.name){let g=Math.min(h,A)*0.4;p.push({name:"text",type:"element",attributes:{x:"0",y:"0",fill:reo,"font-size":`${g}px`,"font-family":"sans-serif","text-anchor":"middle","dominant-baseline":"middle"},children:[{type:"text",value:l.name,name:"",attributes:{},children:[]}],value:""})}return[{name:"g",type:"element",attributes:{transform:m},children:p,value:""}]}function aeo(e,t){let{transform:n}=t,[o,i]=tt(n,[e.x,e.y]);if(e.hole_shape==="circle"||e.hole_shape==="square"){let r=e.hole_diameter*Math.abs(n.a),s=r/2;if(e.hole_shape==="circle")return[{name:"circle",type:"element",attributes:{class:"pinout-hole",cx:o.toString(),cy:i.toString(),r:s.toString(),fill:xBe},children:[],value:""}];return[{name:"rect",type:"element",attributes:{class:"pinout-hole",x:(o-s).toString(),y:(i-s).toString(),width:r.toString(),height:r.toString(),fill:xBe},children:[],value:""}]}if(e.hole_shape==="oval"){let r=e.hole_width*Math.abs(n.a),s=e.hole_height*Math.abs(n.a),a=r/2,c=s/2;return[{name:"ellipse",type:"element",attributes:{class:"pinout-hole",cx:o.toString(),cy:i.toString(),rx:a.toString(),ry:c.toString(),fill:xBe},children:[],value:""}]}return[]}function ceo(e,t){let{transform:n}=t,[o,i]=tt(n,[e.x,e.y]);if(e.shape==="pill"){let r=e.outer_width*Math.abs(n.a),s=e.outer_height*Math.abs(n.a),a=e.hole_width*Math.abs(n.a),c=e.hole_height*Math.abs(n.a),l=r/2,d=s-r,u=a/2;return[{name:"g",type:"element",children:[{name:"path",type:"element",attributes:{class:"pinout-hole-outer",fill:yJ,d:`M${o-l},${i-d/2} v${d} a${l},${l} 0 0 0 ${r},0 v-${d} a${l},${l} 0 0 0 -${r},0 z`},value:"",children:[]},{name:"path",type:"element",attributes:{class:"pinout-hole-inner",fill:xJ,d:`M${o-u},${i-(c-a)/2} v${c-a} a${u},${u} 0 0 0 ${a},0 v-${c-a} a${u},${u} 0 0 0 -${a},0 z`},value:"",children:[]}],value:"",attributes:{}}]}if(e.shape==="circle"){let r=e.outer_diameter*Math.abs(n.a),s=e.outer_diameter*Math.abs(n.a),a=e.hole_diameter*Math.abs(n.a),c=e.hole_diameter*Math.abs(n.a),l=Math.min(r,s)/2,d=Math.min(a,c)/2;return[{name:"g",type:"element",children:[{name:"circle",type:"element",attributes:{class:"pinout-hole-outer",fill:yJ,cx:o.toString(),cy:i.toString(),r:l.toString()},value:"",children:[]},{name:"circle",type:"element",attributes:{class:"pinout-hole-inner",fill:xJ,cx:o.toString(),cy:i.toString(),r:d.toString()},value:"",children:[]}],value:"",attributes:{}}]}if(e.shape==="circular_hole_with_rect_pad"){let r=e.hole_diameter*Math.abs(n.a),s=e.rect_pad_width*Math.abs(n.a),a=e.rect_pad_height*Math.abs(n.a),c=r/2;return[{name:"g",type:"element",children:[{name:"rect",type:"element",attributes:{class:"pinout-hole-outer-pad",fill:yJ,x:(o-s/2).toString(),y:(i-a/2).toString(),width:s.toString(),height:a.toString()},value:"",children:[]},{name:"circle",type:"element",attributes:{class:"pinout-hole-inner",fill:xJ,cx:o.toString(),cy:i.toString(),r:c.toString()},value:"",children:[]}],value:"",attributes:{}}]}if(e.shape==="pill_hole_with_rect_pad"){let r=e.rect_pad_width*Math.abs(n.a),s=e.rect_pad_height*Math.abs(n.a),a=e.hole_height*Math.abs(n.a),c=e.hole_width*Math.abs(n.a),l=Math.min(a,c)/2;return[{name:"g",type:"element",children:[{name:"rect",type:"element",attributes:{class:"pinout-hole-outer-pad",fill:yJ,x:(o-r/2).toString(),y:(i-s/2).toString(),width:r.toString(),height:s.toString()},value:"",children:[]},{name:"rect",type:"element",attributes:{class:"pinout-hole-inner",fill:xJ,x:(o-c/2).toString(),y:(i-a/2).toString(),width:c.toString(),height:a.toString(),rx:l.toString(),ry:l.toString()},value:"",children:[]}],value:"",attributes:{}}]}if(e.shape==="rotated_pill_hole_with_rect_pad"){let r=e.rect_pad_width*Math.abs(n.a),s=e.rect_pad_height*Math.abs(n.a),a=e.hole_height*Math.abs(n.a),c=e.hole_width*Math.abs(n.a),l=Math.min(a,c)/2;return[{name:"g",type:"element",children:[{name:"rect",type:"element",attributes:{class:"pinout-hole-outer-pad",fill:yJ,x:(-r/2).toString(),y:(-s/2).toString(),width:r.toString(),height:s.toString(),transform:`translate(${o} ${i}) rotate(${-e.rect_ccw_rotation})`},value:"",children:[]},{name:"rect",type:"element",attributes:{class:"pinout-hole-inner",fill:xJ,x:(-c/2).toString(),y:(-a/2).toString(),width:c.toString(),height:a.toString(),rx:l.toString(),ry:l.toString(),transform:`translate(${o} ${i}) rotate(${-e.hole_ccw_rotation})`},value:"",children:[]}],value:"",attributes:{}}]}return[]}function leo(e,t){let{transform:n}=t;if(e.shape==="rect"||e.shape==="rotated_rect"){let o=e.width*Math.abs(n.a),i=e.height*Math.abs(n.d),[r,s]=tt(n,[e.x,e.y]);if(e.shape==="rotated_rect"&&e.ccw_rotation)return[{name:"rect",type:"element",attributes:{class:"pinout-pad",fill:CJ,x:(-o/2).toString(),y:(-i/2).toString(),width:o.toString(),height:i.toString(),transform:`translate(${r} ${s}) rotate(${-e.ccw_rotation})`,"data-layer":e.layer},value:"",children:[]}];return[{name:"rect",type:"element",attributes:{class:"pinout-pad",fill:CJ,x:(r-o/2).toString(),y:(s-i/2).toString(),width:o.toString(),height:i.toString(),"data-layer":e.layer},value:"",children:[]}]}if(e.shape==="pill"){let o=e.width*Math.abs(n.a),i=e.height*Math.abs(n.d),r=e.radius*Math.abs(n.a),[s,a]=tt(n,[e.x,e.y]);return[{name:"rect",type:"element",attributes:{class:"pinout-pad",fill:CJ,x:(s-o/2).toString(),y:(a-i/2).toString(),width:o.toString(),height:i.toString(),rx:r.toString(),ry:r.toString(),"data-layer":e.layer},value:"",children:[]}]}if(e.shape==="circle"){let o=e.radius*Math.abs(n.a),[i,r]=tt(n,[e.x,e.y]);return[{name:"circle",type:"element",attributes:{class:"pinout-pad",fill:CJ,cx:i.toString(),cy:r.toString(),r:o.toString(),"data-layer":e.layer},value:"",children:[]}]}if(e.shape==="polygon"){let o=(e.points??[]).map((i)=>tt(n,[i.x,i.y]));return[{name:"polygon",type:"element",attributes:{class:"pinout-pad",fill:CJ,points:o.map((i)=>i.join(",")).join(" "),"data-layer":e.layer},value:"",children:[]}]}return[]}function CBe(e){let{rectX:t,rectY:n,rectWidth:o,rectHeight:i,textX:r,textY:s,text:a,fontSize:c,labelBackground:l,labelColor:d,rx:u=4,ry:h=4,fontFamily:A="Arial, sans-serif",fontWeight:m="bold",textAnchor:p="middle",dominantBaseline:g="middle"}=e;return[{name:"rect",type:"element",attributes:{x:t.toString(),y:n.toString(),width:o.toString(),height:i.toString(),fill:l,rx:typeof u==="number"?u.toString():u,ry:typeof h==="number"?h.toString():h,stroke:"none"},children:[],value:""},{name:"text",type:"element",attributes:{x:r.toString(),y:s.toString(),fill:d,"font-size":`${c}px`,"font-family":A,"font-weight":m,"text-anchor":p,"dominant-baseline":g},children:[{type:"text",value:a,name:"",attributes:{},children:[]}],value:""}]}function meo(e,t){let n=t.label_positions.get(e.pcb_port_id);if(!n)return[];let{text:o,aliases:i,elbow_end:r,label_pos:s,edge:a}=n,[c,l]=tt(t.transform,[e.x,e.y]),d=a==="left"?"x-":a==="right"?"x+":a==="top"?"y-":"y+",u=a==="left"?"x+":a==="right"?"x-":a==="top"?"y+":"y-",h=Yz({x:c,y:l,facingDirection:d},{x:r.x,y:r.y,facingDirection:u},{}),A=/^pin(\d+)$/i.exec(o),m=[{text:A?A[1]:o,bg:A?ueo:G0t,color:A?heo:z0t},...i.map((F)=>({text:F,bg:G0t,color:z0t}))],p=Math.abs(t.transform.a),g=t.styleScale??1,f=1.6*g*p,y=Math.max(0.08,0.25*g),C=0.3*g*p,I=y*p,b={x:s.x+(a==="left"?-I/2:I/2),y:s.y},P=[...h,b].map((F)=>`${F.x},${F.y}`).join(" "),E=f*0.5238095238095238,B=(f-E)/2,w=B,T=m.map(({text:F,bg:H,color:z})=>{let Y=F??"",X=Y.length*E*0.6+2*B;return{text:Y,rectWidth:X,bg:H,color:z}}),Q=s.y,N=[{name:"polyline",type:"element",attributes:{points:P,stroke:deo,"stroke-width":(y*p).toString(),fill:"none"},children:[],value:""}];if(a==="left"){let F=s.x;for(let{text:H,rectWidth:z,bg:Y,color:U}of T){let X=F-z,V=X+z/2;N.push(...CBe({rectX:X,rectY:Q-f/2,rectWidth:z,rectHeight:f,textX:V,textY:Q,text:H,fontSize:E,labelBackground:Y,labelColor:U,rx:C,ry:C})),F=X-w}}else if(a==="right"){let F=s.x;for(let{text:H,rectWidth:z,bg:Y,color:U}of T){let X=F,V=X+z/2;N.push(...CBe({rectX:X,rectY:Q-f/2,rectWidth:z,rectHeight:f,textX:V,textY:Q,text:H,fontSize:E,labelBackground:Y,labelColor:U,rx:C,ry:C})),F=X+z+w}}else{let F=T.reduce((z,Y)=>z+Y.rectWidth,0)+w*Math.max(0,T.length-1),H=s.x-F/2;for(let{text:z,rectWidth:Y,bg:U,color:X}of T){let V=H,W=V+Y/2;N.push(...CBe({rectX:V,rectY:Q-f/2,rectWidth:Y,rectHeight:f,textX:W,textY:Q,text:z,fontSize:E,labelBackground:U,labelColor:X,rx:C,ry:C})),H=V+Y+w}}return N}function Y0t(e,t,{transform:n,soup:o,board_bounds:i,svgHeight:r,styleScale:s},a){let c=t.map((N)=>N.pcb_port.x),l={};for(let N of c){let F=N.toFixed(1);l[F]=(l[F]||0)+1}let d;if(Object.keys(l).length>1&&t.length>2){let N=Object.entries(l).sort((W,j)=>j[1]-W[1]),F=parseFloat(N[0][0]),H=t.filter((W)=>Math.abs(W.pcb_port.x-F)<0.2),z=t.filter((W)=>Math.abs(W.pcb_port.x-F)>=0.2),Y=(W)=>({pcb_port:W.pcb_port,y:tt(n,[W.pcb_port.x,W.pcb_port.y])[1],aliases:W.aliases});H.sort((W,j)=>j.pcb_port.y-W.pcb_port.y),z.sort((W,j)=>j.pcb_port.y-W.pcb_port.y);let U=H.length>0?Math.max(...H.map((W)=>W.pcb_port.y)):-1/0;d=((z.length>0?Math.max(...z.map((W)=>W.pcb_port.y)):-1/0)>U?[...z,...H]:[...H,...z]).map(Y)}else d=t.map((N)=>({pcb_port:N.pcb_port,y:tt(n,[N.pcb_port.x,N.pcb_port.y])[1],aliases:N.aliases})).sort((N,F)=>N.y-F.y);if(d.length===0)return;let u=tt(n,[e==="left"?i.minX:i.maxX,0])[0],h=d.length,A={};for(let N of t){let F=N.pcb_port.x.toFixed(1);A[F]=(A[F]||0)+1}let m=new Set;if(Object.keys(A).length>1&&t.length>2){let N=Object.entries(A).sort((z,Y)=>Y[1]-z[1]),F=parseFloat(N[0][0]),H=t.filter((z)=>Math.abs(z.pcb_port.x-F)<0.2);m=new Set(H.map((z)=>z.pcb_port.pcb_port_id))}let p=d.map((N,F)=>{if(m.has(N.pcb_port.pcb_port_id))return F;return-1}).filter((N)=>N!==-1),g=(h-1)/2,_=Math.abs(n.a),f=Hmt*s*_,y=0.3,x=Math.max(0.2*_,y*s*_),C=_eo*s*_,I=(Omt+h*zmt)*s*_,P=I+g*(MBe*s*_)+Gmt*s*_,E=h-p.length,B=p.length===0?h:E,w=B*f+Math.max(0,B-1)*x,T;if(p.length>0&&E>0){let N=p.map((V)=>d[V].y),F=Math.min(...N),H=Math.max(...N),z=F-f/2,Y=H+f/2;if(d.map((V,W)=>W).filter((V)=>!p.includes(V))[0]<p[0])T=z-(x*2+C)-w+f/2;else T=Y+(x*2+C)+f/2}else T=(r-w)/2+f/2;let Q=p.length===h;d.forEach(({pcb_port:N,aliases:F},H)=>{let z;if(p.length>0)if(p.includes(H))z=g;else{let q=Math.min(...p),ne=Math.max(...p),ce;if(H<q)ce=q-H;else ce=H-ne;z=g-ce}else{let q=Math.abs(H-g);z=g-q}let Y=I+z*(MBe*s*_),U=e==="left"?-1:1,X=p.includes(H),V=Q?d[H].y:p.length>0&&X?d[H].y:T,W={x:u+U*Y,y:V},j={x:u+U*P,y:V};if(a.set(N.pcb_port_id,{text:F[0],aliases:F.slice(1),elbow_end:W,label_pos:j,edge:e}),!(p.length>0&&X))T+=f+x})}function feo(e,t){let n=To(t).source_port.get(e.source_port_id);if(!n)return null;let o=n.port_hints?.filter((s)=>!/^\d+$/.test(s)&&!["left","right","top","bottom"].includes(s))??[],i=o[0];if(!i)i=n.name;if(!i)return null;let r=o.filter((s)=>s!==i);return{text:i,aliases:r}}function yeo(e,t){let n={left:e.x-t.minX,right:t.maxX-e.x,top:t.maxY-e.y,bottom:e.y-t.minY},o="left",i=n.left;if(n.right<i)i=n.right,o="right";if(n.top<i)i=n.top,o="top";if(n.bottom<i)i=n.bottom,o="bottom";return o}function xeo(e,t){let{POSITIVE_INFINITY:n,POSITIVE_INFINITY:o,NEGATIVE_INFINITY:i,NEGATIVE_INFINITY:r}=Number;for(let le of e)if(le.type==="pcb_board")if("outline"in le&&le.outline&&Array.isArray(le.outline)&&le.outline.length>0)for(let he of le.outline)n=Math.min(n,he.x),o=Math.min(o,he.y),i=Math.max(i,he.x),r=Math.max(r,he.y);else{let he=le.center,ue=le.width||0,Ae=le.height||0;n=Math.min(n,he.x-ue/2),o=Math.min(o,he.y-Ae/2),i=Math.max(i,he.x+ue/2),r=Math.max(r,he.y+Ae/2)}let s=2,a=t?.width??1200,c=t?.height??768,l=e.find((le)=>le.type==="source_board"&&!!le.title)?.title,d={minX:n,minY:o,maxX:i,maxY:r},u=e.filter((le)=>le.type==="pcb_port"&&le.is_board_pinout),h=[];for(let le of u){let he=feo(le,e);if(!he)continue;let ue=yeo({x:le.x,y:le.y},d);h.push({pcb_port:le,aliases:[he.text,...he.aliases],edge:ue})}let A=h.filter((le)=>le.edge==="left"),m=h.filter((le)=>le.edge==="right"),p=h.filter((le)=>le.edge==="top"),g=h.filter((le)=>le.edge==="bottom"),_=(n+i)/2;if(p.length>0)if(p.filter((he)=>he.pcb_port.x<_).length>p.length/2)A.push(...p);else m.push(...p);if(g.length>0)if(g.filter((he)=>he.pcb_port.x<_).length>g.length/2)A.push(...g);else m.push(...g);let y=e.filter((le)=>le.type==="pcb_smtpad").map((le)=>{if(typeof le.height==="number")return le.height;if(typeof le.radius==="number")return le.radius*2;return}).filter((le)=>Number.isFinite(le)),x=y.length?y.reduce((le,he)=>le+he,0)/y.length:void 0,I=x?Math.max(0.5,Math.min(1,x/1)):1,b=Hmt*I;function P(le){let he=[...le.aliases??[]];if(he.length===0)return he;let ue=/^pin(\d+)$/i.exec(he[0]);if(ue)he[0]=ue[1];return he}function E(le){if(le.length===0)return 0;let he=b,ue=he*peo,Ae=(he-ue)/2,_e=Ae;return le.map((Te)=>(Te??"").length*ue*Aeo+2*Ae).reduce((Te,be)=>Te+be,0)+_e*Math.max(0,le.length-1)}function B(le){if(le<=0)return 0;let he=(le-1)/2;return(Omt+le*zmt)*I+he*(MBe*I)+Gmt*I}let w=Math.max(0,...A.map((le)=>E(P(le)))),T=Math.max(0,...m.map((le)=>E(P(le)))),Q=B(A.length)+w,N=B(m.length)+T,F=n-Q,z=i+N-F+2*s,Y=r-o+2*s,U=a/z,X=c/Y,V=Math.min(U,X),W=(a-z*V)/2,j=(c-Y*V)/2,q=_o(So(W-F*V+s*V,c-j+o*V-s*V),xc(V,-V)),ne=geo({left_labels:A,right_labels:m,transform:q,soup:e,board_bounds:d,svgWidth:a,svgHeight:c,styleScale:I}),ce={transform:q,soup:e,board_bounds:d,styleScale:I,label_positions:ne,svgWidth:a,svgHeight:c},oe=e.sort((le,he)=>(V0t.indexOf(le.type)??9999)-(V0t.indexOf(he.type)??9999)).flatMap((le)=>Ceo(le,ce,e)),ie=S7(e),J=P7,ee=[{name:"rect",type:"element",attributes:{fill:"rgb(255, 255, 255)",x:"0",y:"0",width:a.toString(),height:c.toString()},value:"",children:[]},...oe].filter((le)=>le!==null);if(t?.showErrorsInTextOverlay){let le=pG(e);if(le)ee.push(le)}let se={name:"svg",type:"element",attributes:{xmlns:"http://www.w3.org/2000/svg",width:a.toString(),height:c.toString(),...ie&&{"data-software-used-string":ie},...t?.includeVersion&&{"data-circuit-to-svg-version":J}},value:"",children:ee};return b7(se)}function Ceo(e,t,n){switch(e.type){case"pcb_board":return oeo(e,t);case"pcb_component":return seo(e,t);case"pcb_smtpad":return leo(e,t);case"pcb_hole":return aeo(e,t);case"pcb_plated_hole":return ceo(e,t);case"pcb_port":if(e.is_board_pinout)return meo(e,t);return[];default:return[]}}function Ieo(e){let{minX:t,minY:n,maxX:o,maxY:i}=e.bounds,r=e.cellSize??1,s=e.labelCells??!1,a=[],c=(l,d)=>{let[u,h]=tt(e.transform,[l,d]);return{x:u,y:h}};for(let l=Math.floor(t);l<=Math.ceil(o);l+=r){let d=c(l,n),u=c(l,i);a.push({name:"line",type:"element",attributes:{x1:d.x.toString(),y1:d.y.toString(),x2:u.x.toString(),y2:u.y.toString(),stroke:fd.schematic.grid,"stroke-width":(0.01*Math.abs(e.transform.a)).toString(),"stroke-opacity":"0.5"}})}for(let l=Math.floor(n);l<=Math.ceil(i);l+=r){let d=c(t,l),u=c(o,l);a.push({name:"line",type:"element",attributes:{x1:d.x.toString(),y1:d.y.toString(),x2:u.x.toString(),y2:u.y.toString(),stroke:fd.schematic.grid,"stroke-width":(0.01*Math.abs(e.transform.a)).toString(),"stroke-opacity":"0.5"}})}if(s){let l=(d,u)=>{if(r<=0.1)return`${d.toFixed(1)},${u.toFixed(1)}`;return`${d},${u}`};for(let d=Math.floor(t);d<=Math.ceil(o);d+=r)for(let u=Math.floor(n);u<=Math.ceil(i);u+=r){let h=c(d,u);a.push({name:"text",type:"element",attributes:{x:(h.x-2.5).toString(),y:(h.y-5).toString(),fill:fd.schematic.grid,"font-size":(r/5*Math.abs(e.transform.a)).toString(),"fill-opacity":"0.5","text-anchor":"middle","dominant-baseline":"middle","font-family":"sans-serif"},children:[{type:"text",value:l(d,u),name:"",attributes:{},children:[]}]})}}return{name:"g",value:"",type:"element",attributes:{class:"grid sch-grid"},children:a}}function beo(e){let{points:t,transform:n}=e,o=[];for(let i of t){let[r,s]=tt(n,[i.x-0.1,i.y-0.1]),[a,c]=tt(n,[i.x+0.1,i.y+0.1]),[l,d]=tt(n,[i.x-0.1,i.y+0.1]),[u,h]=tt(n,[i.x+0.1,i.y-0.1]);o.push({name:"path",type:"element",attributes:{d:`M${r},${s} L${a},${c} M${l},${d} L${u},${h}`,stroke:fd.schematic.grid,"stroke-width":(0.02*Math.abs(n.a)).toString(),"stroke-opacity":"0.7"}});let[A,m]=tt(n,[i.x+0.15,i.y-0.15]);o.push({name:"text",type:"element",attributes:{x:A.toString(),y:m.toString(),fill:fd.schematic.grid,"font-size":(0.1*Math.abs(n.a)).toString(),"fill-opacity":"0.7","text-anchor":"start","font-family":"sans-serif","dominant-baseline":"middle"},children:[{type:"text",value:i.label||`(${i.x},${i.y})`,name:"",attributes:{},children:[]}]})}return{name:"g",value:"",type:"element",attributes:{class:"labeled-points sch-labeled-points"},children:o}}function Seo(e){return e.reduce((t,n)=>{if(!t)return n;if(n.sheet_index===void 0)return t;if(t.sheet_index===void 0)return n;return n.sheet_index<t.sheet_index?n:t},void 0)}function mhe(e){return wJ(e.text||"")+(e.display_superscript?Vmt+wJ(e.display_superscript)*Ymt:0)}function zBe(e,t,n,o="central"){let i=[{type:"text",value:e,name:"",attributes:{},children:[]}];if(t)i.push({type:"element",name:"tspan",value:"",attributes:{class:"sch-net-label-superscript","font-size":`${n*Ymt}px`,dx:`${n*Vmt}`,dy:`${-n*(o==="ideographic"?0.5:0.25)}`},children:[{type:"text",value:t,name:"",attributes:{},children:[]}]});return i}function veo(e){return{left:180,top:90,bottom:-90,right:0}[e]??0}function Eeo(e,t,n){let o=n+x7*2+hG*e.text.length+uG,i=AG(e.anchor_side);return e.anchor_position??{x:e.center.x-i.x*o*t/2,y:e.center.y-i.y*o*t/2}}function Kmt(e,t,n,o){let i=Math.sqrt((n.x-e.x)**2+(n.y-e.y)**2),s=Math.sqrt((o.x-t.x)**2+(o.y-t.y)**2)/i,a=t.x-s*e.x,c=t.y-s*e.y,l=So(a,c),d=xc(s,s);return _o(l,d)}function Beo(e){let t=[],n=new Map,o=new Map,i=null;for(let r of e)if(r.type==="schematic_component")t.push(r);else if(r.type==="schematic_port"&&r.schematic_component_id){let s=n.get(r.schematic_component_id)??[];s.push(r),n.set(r.schematic_component_id,s)}else if(r.type==="source_component")o.set(r.source_component_id,r);for(let r of t){let s=weo({component:r,schematicPorts:n.get(r.schematic_component_id)??[],sourceComponent:r.source_component_id?o.get(r.source_component_id):void 0});if(!s)continue;i=i?jmt(i,s):s}return i}function weo({component:e,schematicPorts:t,sourceComponent:n}){if(!e.symbol_name)return null;let o=ra[e.symbol_name];if(!o)return null;let i=Xmt({schPorts:t,symbol:o,schComponent:e});if(!i[0])return null;let r=Kmt(i[1]?.symbolPort??o.center,i[1]?.schPort.center??e.center,i[0].symbolPort,i[0].schPort.center),s=null;for(let a of o.primitives){if(a.type!=="text")continue;let c=Teo({primitive:a,component:e,sourceComponent:n});if(!c)continue;let l=tt(r,a),d=C7("reference_designator"),u=Deo({x:l.x,y:l.y,width:wJ(c)*d,height:d,anchor:a.anchor});s=s?jmt(s,u):u}return s}function Teo({primitive:e,component:t,sourceComponent:n}){if(e.text==="{REF}")return n?.display_name??n?.name??"";if(e.text==="{VAL}")return t.symbol_display_value??"";return""}function Deo({x:e,y:t,width:n,height:o,anchor:i}){let r=e,s=e,a=t-o/2,c=t+o/2;if(i.includes("left"))s=e+n;else if(i.includes("right"))r=e-n;else r=e-n/2,s=e+n/2;if(i.includes("top"))a=t-o,c=t;else if(i.includes("bottom"))a=t,c=t+o;return{minX:r,minY:a,maxX:s,maxY:c}}function jmt(e,t){return{minX:Math.min(e.minX,t.minX),minY:Math.min(e.minY,t.minY),maxX:Math.max(e.maxX,t.maxX),maxY:Math.max(e.maxY,t.maxY)}}function _G(e={}){let t=e.center??{x:0,y:0},n=e.sheet_width===void 0?Qeo:e.sheet_width/I7,o=e.sheet_height===void 0?keo:e.sheet_height/I7,i=t.x-n/2,r=t.x+n/2,s=t.y-o/2,a=t.y+o/2;return{center:t,width:n,height:o,minX:i,maxX:r,minY:s,maxY:a,innerMinX:i+ohe,innerMaxX:r-ohe,innerMinY:s+ohe,innerMaxY:a-ohe}}function Jmt(e,t=0.5){let{POSITIVE_INFINITY:n,POSITIVE_INFINITY:o,NEGATIVE_INFINITY:i,NEGATIVE_INFINITY:r}=Number,s=0.2;for(let l of e)if(l.type==="schematic_sheet"){let d=_G(l);c(d.center,{width:d.width,height:d.height},0)}else if(l.type==="schematic_component")c(l.center,l.size,0);else if(l.type==="schematic_port")c(l.center,{width:s,height:s},0);else if(l.type==="schematic_debug_object"){if(l.shape==="rect")c(l.center,l.size,0);else if(l.shape==="line")c(l.start,{width:0.1,height:0.1},0),c(l.end,{width:0.1,height:0.1},0)}else if(l.type==="schematic_net_label"){let d=C7("net_label"),u=mhe(l),A=(u+x7*2+hG*(l.text?.length||0)+uG)*d,m=Umt,p=veo(l.anchor_side)/180*Math.PI,g=Eeo(l,d,u),_=AG(l.anchor_side),f={x:g.x+_.x*A/2,y:g.y+_.y*A/2};c(f,{width:A,height:m},p)}else if(l.type==="schematic_trace")for(let d of l.edges)c(d.from,{width:0.1,height:0.1},0),c(d.to,{width:0.1,height:0.1},0);else if(l.type==="schematic_text"){let u=C7("reference_designator",l.font_size)??0.18,h=l.text??"",A=l.display_superscript;if(A){let m=h.split(`
`),p=Math.max(...m.map((I,b)=>mhe({text:I,display_superscript:b===m.length-1?A:void 0})))*u,g=l.anchor,_=g==="left"||g.endsWith("_left")?p/2:g==="right"||g.endsWith("_right")?-p/2:0,f=g==="top"||g.startsWith("top_")?0:g==="bottom"||g.startsWith("bottom_")?-u:-u/2,y=(m.length+0.3)*u,x=-(f-0.3*u+y/2),C=-(l.rotation??0)*Math.PI/180;c({x:l.position.x+_*Math.cos(C)-x*Math.sin(C),y:l.position.y+_*Math.sin(C)+x*Math.cos(C)},{width:p,height:y},C)}else{let m=h.length*u,p=u;c(l.position,{width:m,height:p},l.rotation??0)}}else if(l.type==="schematic_voltage_probe"){if(c(l.position,{width:0.2,height:0.4},0),l.name){let d=C7("net_label"),u=wJ(l.name)*d,h=d,A=0.3,m=l.label_alignment??"top_right",p=l.position.x,g=l.position.y;if(m.includes("top"))g+=0.3+h/2;else if(m.includes("bottom"))g-=0.3+h/2;if(m.includes("right"))p+=0.3+u/2;else if(m.includes("left"))p-=0.3+u/2;c({x:p,y:g},{width:u,height:h},0)}}else if(l.type==="schematic_box")c({x:l.x+l.width/2,y:l.y+l.height/2},{width:l.width,height:l.height},0);else if(l.type==="schematic_table"){let{column_widths:d,row_heights:u}=qmt(l,e),h=d.reduce((y,x)=>y+x,0),A=u.reduce((y,x)=>y+x,0),m=l.anchor??"center",p=l.anchor_position.x,g=l.anchor_position.y;if(m.includes("center"))p-=h/2;else if(m.includes("right"))p-=h;if(m.includes("center"))g+=A/2;else if(m.includes("bottom"))g+=A;let _=p+h/2,f=g-A/2;c({x:_,y:f},{width:h,height:A},0)}else if(l.type==="schematic_line")c({x:l.x1,y:l.y1},{width:0.02,height:0.02},0),c({x:l.x2,y:l.y2},{width:0.02,height:0.02},0);else if(l.type==="schematic_circle")c(l.center,{width:l.radius*2,height:l.radius*2},0);else if(l.type==="schematic_rect")c(l.center,{width:l.width,height:l.height},l.rotation);else if(l.type==="schematic_arc")c(l.center,{width:l.radius*2,height:l.radius*2},0);else if(l.type==="schematic_path"){if(l.points&&l.points.length>0)for(let d of l.points)c(d,{width:0.02,height:0.02},0)}if(!Number.isFinite(n))n=-1,o=-1,i=1,r=1;n-=t,o-=t,i+=t,r+=t;let a=Beo(e);if(a){if(a.minX<n)n=a.minX-t;if(a.minY<o)o=a.minY-t;if(a.maxX>i)i=a.maxX+t;if(a.maxY>r)r=a.maxY+t}return{minX:n,minY:o,maxX:i,maxY:r};function c(l,d,u){let h=[{x:-d.width/2,y:-d.height/2},{x:d.width/2,y:-d.height/2},{x:d.width/2,y:d.height/2},{x:-d.width/2,y:d.height/2}];for(let A of h){let m=A.x*Math.cos(u)-A.y*Math.sin(u)+l.x,p=A.x*Math.sin(u)+A.y*Math.cos(u)+l.y;n=Math.min(n,m),o=Math.min(o,p),i=Math.max(i,m),r=Math.max(r,p)}}}function BBe(e){if(e.type!=="element")throw Error("Expected SVG root element to be of type 'element'");return e}function $mt(e){return{...e,attributes:{...e.attributes??{}},children:e.children?.map($mt)??[]}}function vJ(e,t,n,o,i){let r=$mt(e);return r.attributes={...r.attributes,x:J0(t),y:J0(n),width:J0(o),height:J0(i)},delete r.attributes.xmlns,r}function J0(e){if(!Number.isFinite(e))return"0";return Number.parseFloat(e.toFixed(6)).toString()}function Leo({schematicGraphic:e,viewport:t}){let n=Feo(e);return{name:"g",type:"element",value:"",attributes:{class:"schematic-graphic","pointer-events":"none","data-circuit-json-type":"schematic_graphic","data-schematic-graphic-id":e.schematic_graphic_id,...e.schematic_sheet_id?{"data-schematic-sheet-id":e.schematic_sheet_id}:{}},children:[{name:"image",type:"element",value:"",attributes:{href:n,x:J0(t.x),y:J0(t.y),width:J0(t.width),height:J0(t.height),preserveAspectRatio:"xMidYMid meet",overflow:"hidden","pointer-events":"none"},children:[]}]}}function Feo(e){let t=`Unable to render schematic graphic "${e.schematic_graphic_id}"`,{asset:n,svg_content:o}=e;if(!n){if(o!==void 0)return X0t(o);throw Error(`${t}: asset or svg_content is required`)}if(Zmt(n.mimetype)!==TJ)throw Error(`${t}: asset.mimetype must be "${TJ}" (received ${JSON.stringify(n.mimetype)})`);let i=n.url.trim();if(i.toLowerCase().startsWith("data:"))return Heo(i,t),i;if(o!==void 0)return X0t(o);throw Error(`${t}: asset.url must be an inline SVG data URL because circuit-to-svg cannot synchronously load ${JSON.stringify(n.url)}`)}function Heo(e,t){let n=e.match(/^data:([^,]*),(.*)$/is);if(!n)throw Error(`${t}: asset.url is not a valid SVG data URL`);let o=n[1].split(";").map((c)=>c.trim());if(Zmt(o.shift()??"")!==TJ)throw Error(`${t}: asset.url must use the "${TJ}" media type`);let r=n[2],s=o.findIndex((c)=>c.toLowerCase()==="base64"),a=s!==-1;if(a&&s!==o.length-1)throw Error(`${t}: asset.url must place "base64" as its final metadata token`);if(a){let c=r.replace(/\s+/g,"");if(!/^(?:[a-z\d+/]{4})*(?:[a-z\d+/]{2}==|[a-z\d+/]{3}=)?$/i.test(c))throw Error(`${t}: asset.url is not a valid SVG data URL`);return}if(r.includes("#"))throw Error(`${t}: asset.url must percent-encode "#" in a non-base64 SVG data URL`);try{decodeURIComponent(r)}catch(c){throw Error(`${t}: asset.url is not a valid SVG data URL`,{cause:c})}}function X0t(e){let t=new TextEncoder().encode(e),n="",o=32768;for(let i=0;i<t.length;i+=o)n+=String.fromCharCode(...t.subarray(i,i+o));return`data:${TJ};base64,${btoa(n)}`}function Zmt(e){return(e.split(";",1)[0]??"").trim().toLowerCase()}function npt({schArc:e,transform:t,colorMap:n}){let o=tt(t,e.center),i=Math.abs(t.a)*e.radius,r=e.stroke_width??0.02,s=Math.abs(t.a)*r,a=e.start_angle_degrees*Math.PI/180,c=e.end_angle_degrees*Math.PI/180,l=o.x+i*Math.cos(a),d=o.y+i*Math.sin(a),u=o.x+i*Math.cos(c),h=o.y+i*Math.sin(c),A=e.end_angle_degrees-e.start_angle_degrees;if(e.direction==="clockwise")A=-A;if(A<0)A+=360;let m=A>180?1:0,p=e.direction==="clockwise"?1:0;return[{name:"path",type:"element",attributes:{class:"sch-arc",d:`M ${l} ${d} A ${i} ${i} 0 ${m} ${p} ${u} ${h}`,fill:"none",stroke:e.color,"stroke-width":s.toString(),...e.is_dashed&&{"stroke-dasharray":(s*3).toString()},"data-schematic-arc-id":e.schematic_arc_id,...e.schematic_component_id&&{"data-schematic-component-id":e.schematic_component_id}},children:[],value:""}]}function opt({schCircle:e,transform:t,colorMap:n}){let o=tt(t,e.center),i=Math.abs(t.a)*e.radius,r=e.stroke_width??0.02,s=Math.abs(t.a)*r;return[{name:"circle",type:"element",attributes:{class:"sch-circle",cx:o.x.toString(),cy:o.y.toString(),r:i.toString(),fill:e.is_filled?e.fill_color??e.color:"none",stroke:e.color,"stroke-width":s.toString(),...e.is_dashed&&{"stroke-dasharray":(s*3).toString()},"data-schematic-circle-id":e.schematic_circle_id,...e.schematic_component_id&&{"data-schematic-component-id":e.schematic_component_id}},children:[],value:""}]}function spt({isDashed:e,dashLength:t,dashGap:n,strokeWidth:o,transform:i}){if(!e)return;let r=Math.abs(i.a),s=o*r*3,a=t!==void 0?t*r:s,c=n!==void 0?n*r:s;return`${a} ${c}`}function apt({schLine:e,transform:t,colorMap:n}){let o=tt(t,{x:e.x1,y:e.y1}),i=tt(t,{x:e.x2,y:e.y2}),r=e.stroke_width??0.02,s=Math.abs(t.a)*r,a=spt({isDashed:e.is_dashed,dashLength:e.dash_length,dashGap:e.dash_gap,strokeWidth:r,transform:t});return[{name:"line",type:"element",attributes:{class:"sch-line",x1:o.x.toString(),y1:o.y.toString(),x2:i.x.toString(),y2:i.y.toString(),stroke:e.color,"stroke-width":s.toString(),...a&&{"stroke-dasharray":a},"data-schematic-line-id":e.schematic_line_id,...e.schematic_component_id&&{"data-schematic-component-id":e.schematic_component_id}},children:[],value:""}]}function cpt({schRect:e,transform:t,colorMap:n}){let o=tt(t,e.center),i=Math.abs(t.a)*e.width,r=Math.abs(t.d)*e.height,s=e.stroke_width??0.02,a=Math.abs(t.a)*s,c=o.x-i/2,l=o.y-r/2;return[{name:"rect",type:"element",attributes:{class:"sch-rect",x:c.toString(),y:l.toString(),width:i.toString(),height:r.toString(),fill:e.is_filled?e.fill_color??e.color:"none",stroke:e.color,"stroke-width":a.toString(),...e.is_dashed&&{"stroke-dasharray":(a*3).toString()},...e.rotation!==0&&{transform:`rotate(${e.rotation} ${o.x} ${o.y})`},"data-schematic-rect-id":e.schematic_rect_id,...e.schematic_component_id&&{"data-schematic-component-id":e.schematic_component_id}},children:[],value:""}]}function lpt({schPath:e,transform:t,colorMap:n}){let o=e.stroke_color??n.schematic.component_outline,i=e.fill_color??"none",r=e.stroke_width??0.02,s=Math.abs(t.a)*r,a=spt({isDashed:e.is_dashed,dashLength:e.dash_length,dashGap:e.dash_gap,strokeWidth:r,transform:t});if(!e.points||e.points.length<2)return[];return[{name:"path",type:"element",attributes:{class:"sch-path",d:e.points.map((d)=>tt(t,{x:d.x,y:d.y})).map((d,u)=>`${u===0?"M":"L"} ${d.x} ${d.y}`).join(" "),stroke:o,"stroke-width":s.toString(),fill:e.is_filled?i:"none","stroke-linecap":"round","stroke-linejoin":"round",...a&&{"stroke-dasharray":a},...e.schematic_component_id&&{"data-schematic-component-id":e.schematic_component_id}},children:[],value:""}]}function J0t(e){if(e.type==="schematic_rect")return 0;if((e.type==="schematic_circle"||e.type==="schematic_path")&&e.is_filled)return 1;if(e.type==="schematic_text")return 3;return 2}function oto(e){let{component:t}=e,n=[];if(t.is_box_with_pins!==!1)if(t.symbol_name)n=Jeo(e);else n=tto(e);let o=nto(e),i=[...n,...o];return[{type:"element",name:"g",attributes:{class:"sch-component","data-circuit-json-type":"schematic_component","data-schematic-component-id":t.schematic_component_id,...t.schematic_sheet_id?{"data-schematic-sheet-id":t.schematic_sheet_id}:{}},children:i,value:""}]}function ito({debugObject:e,transform:t}){if(e.shape==="rect"){let[n,o]=tt(t,[e.center.x-e.size.width/2,e.center.y-e.size.height/2]),[i,r]=tt(t,[e.center.x+e.size.width/2,e.center.y+e.size.height/2]);[o,r]=[Math.min(o,r),Math.max(o,r)];let s=Math.abs(i-n),a=Math.abs(r-o),[c,l]=tt(t,[e.center.x,e.center.y]);return[{name:"rect",type:"element",value:"",attributes:{x:n.toString(),y:o.toString(),width:s.toString(),height:a.toString(),fill:"none",stroke:"red","stroke-width":(0.02*Math.abs(t.a)).toString(),"stroke-dasharray":"5,5"},children:e.label?[{name:"text",type:"element",value:"",attributes:{x:c.toString(),y:(l-10).toString(),"text-anchor":"middle","font-size":(0.2*Math.abs(t.a)).toString(),fill:"red"},children:[{type:"text",value:e.label,name:"",attributes:{},children:[]}]}]:[]}]}if(e.shape==="line"){let[n,o]=tt(t,[e.start.x,e.start.y]),[i,r]=tt(t,[e.end.x,e.end.y]),s=(n+i)/2,a=(o+r)/2;return[{name:"line",type:"element",value:"",attributes:{x1:n.toString(),y1:o.toString(),x2:i.toString(),y2:r.toString(),stroke:"red","stroke-width":(0.02*Math.abs(t.a)).toString(),"stroke-dasharray":"5,5"},children:e.label?[{name:"text",type:"element",value:"",attributes:{x:s.toString(),y:(a-10).toString(),"text-anchor":"middle","font-size":(0.2*Math.abs(t.a)).toString(),fill:"red"},children:[{type:"text",value:e.label,name:"",attributes:{},children:[]}]}]:[]}]}return[]}function sto({schematicSheet:e,transform:t,colorMap:n}){let o=_G(e),i=n.schematic.sheet,r=n.schematic.net_name,s=[$0t({id:`${e.schematic_sheet_id}_outer`,center:o.center,width:o.width,height:o.height,transform:t,color:i}),$0t({id:`${e.schematic_sheet_id}_inner`,center:o.center,width:o.innerMaxX-o.innerMinX,height:o.innerMaxY-o.innerMinY,transform:t,color:i})];for(let a=1;a<ihe.length;a++){let c=o.innerMinX+(o.innerMaxX-o.innerMinX)*a/ihe.length;s.push(rhe({id:`${e.schematic_sheet_id}_top_column_${a}`,x1:c,y1:o.maxY,x2:c,y2:o.innerMaxY,transform:t,color:i}),rhe({id:`${e.schematic_sheet_id}_bottom_column_${a}`,x1:c,y1:o.minY,x2:c,y2:o.innerMinY,transform:t,color:i}))}for(let a=1;a<bJ.length;a++){let c=o.innerMinY+(o.innerMaxY-o.innerMinY)*a/bJ.length;s.push(rhe({id:`${e.schematic_sheet_id}_left_row_${a}`,x1:o.minX,y1:c,x2:o.innerMinX,y2:c,transform:t,color:i}),rhe({id:`${e.schematic_sheet_id}_right_row_${a}`,x1:o.maxX,y1:c,x2:o.innerMaxX,y2:c,transform:t,color:i}))}return ihe.forEach((a,c)=>{let l=o.innerMinX+(o.innerMaxX-o.innerMinX)*(c+0.5)/ihe.length;s.push(she({text:a,x:l,y:(o.maxY+o.innerMaxY)/2,transform:t,color:r}),she({text:a,x:l,y:(o.minY+o.innerMinY)/2,transform:t,color:r}))}),bJ.forEach((a,c)=>{let l=o.innerMinY+(o.innerMaxY-o.innerMinY)*(bJ.length-c-0.5)/bJ.length;s.push(she({text:a,x:(o.minX+o.innerMinX)/2,y:l,transform:t,color:r}),she({text:a,x:(o.maxX+o.innerMaxX)/2,y:l,transform:t,color:r}))}),[{name:"g",type:"element",value:"",attributes:{class:"schematic-sheet","data-circuit-json-type":"schematic_sheet","data-schematic-sheet-id":e.schematic_sheet_id},children:s}]}function $0t({id:e,center:t,width:n,height:o,transform:i,color:r}){let s=tt(i,t),a=Math.abs(i.a)*n,c=Math.abs(i.d)*o;return{name:"rect",type:"element",value:"",attributes:{class:"sch-rect",x:(s.x-a/2).toString(),y:(s.y-c/2).toString(),width:a.toString(),height:c.toString(),fill:"none",stroke:r,"stroke-width":(Math.abs(i.a)*dpt).toString(),"data-schematic-rect-id":e},children:[]}}function rhe({id:e,x1:t,y1:n,x2:o,y2:i,transform:r,color:s}){let a=tt(r,{x:t,y:n}),c=tt(r,{x:o,y:i});return{name:"line",type:"element",value:"",attributes:{class:"sch-line",x1:a.x.toString(),y1:a.y.toString(),x2:c.x.toString(),y2:c.y.toString(),stroke:s,"stroke-width":(Math.abs(r.a)*dpt).toString(),"data-schematic-line-id":e},children:[]}}function she({text:e,x:t,y:n,transform:o,color:i}){let r=tt(o,{x:t,y:n});return{type:"element",name:"text",value:"",attributes:{class:"sch-text",x:r.x.toString(),y:r.y.toString(),fill:i,"text-anchor":"middle","dominant-baseline":"middle","font-family":"sans-serif","font-size":`${tx(o,"reference_designator",rto)}px`,transform:`rotate(0, ${r.x}, ${r.y})`},children:[{type:"text",value:e,name:"",attributes:{},children:[]}]}}function cto({trace:e,transform:t,colorMap:n}){let o=e.edges;if(o.length===0)return[];let i=[],r=[],s="";for(let a=0;a<o.length;a++){let c=o[a];if(c.is_crossing)continue;let[l,d]=tt(t,[c.from.x,c.from.y]),[u,h]=tt(t,[c.to.x,c.to.y]);if(a===0||o[a-1]?.is_crossing)s+=`M ${l} ${d} L ${u} ${h}`;else s+=` L ${u} ${h}`}if(s)i.push({name:"path",type:"element",attributes:{d:s,class:"trace-invisible-hover-outline sch-trace-hitbox",stroke:n.schematic.wire,fill:"none","stroke-width":`${Rm(t)*8}px`,"stroke-linecap":"round",opacity:"0","stroke-linejoin":"round"},value:"",children:[]}),i.push({name:"path",type:"element",attributes:{class:"sch-trace-path",d:s,stroke:n.schematic.wire,fill:"none","stroke-width":`${Rm(t)}px`,"stroke-linecap":"round","stroke-linejoin":"round"},value:"",children:[]});for(let a of o){if(!a.is_crossing)continue;let[c,l]=tt(t,[a.from.x,a.from.y]),[d,u]=tt(t,[a.to.x,a.to.y]),h=(c+d)/2,A=(l+u)/2,m=d-c,p=u-l,g=Math.sqrt(m*m+p*p),_=g*0.7,f=-p/g*_,y=m/g*_,x=h+f,C=A-Math.abs(y);r.push({name:"path",type:"element",attributes:{class:"trace-crossing-outline sch-trace-crossing-outline",d:`M ${c} ${l} Q ${x} ${C} ${d} ${u}`,stroke:n.schematic.background,fill:"none","stroke-width":`${Rm(t)*1.5}px`,"stroke-linecap":"butt"},value:"",children:[]}),r.push({name:"path",type:"element",attributes:{class:"sch-trace-crossing-path",d:`M ${c} ${l} Q ${x} ${C} ${d} ${u}`,stroke:n.schematic.wire,fill:"none","stroke-width":`${Rm(t)}px`,"stroke-linecap":"round"},value:"",children:[]})}if(e.junctions)for(let a of e.junctions){let[c,l]=tt(t,[a.x,a.y]);r.push({name:"circle",type:"element",attributes:{cx:c.toString(),cy:l.toString(),r:(Math.abs(t.a)*0.03).toString(),class:"trace-junction sch-trace-junction",fill:n.schematic.junction},value:"",children:[]})}return[{name:"g",type:"element",value:"",attributes:{class:"trace sch-trace","data-layer":"base","data-circuit-json-type":"schematic_trace","data-schematic-trace-id":e.schematic_trace_id,...e.subcircuit_connectivity_map_key&&{"data-subcircuit-connectivity-map-key":e.subcircuit_connectivity_map_key}},children:i},{name:"g",type:"element",value:"",attributes:{class:"trace-overlays sch-trace-overlays","data-layer":"overlay","data-circuit-json-type":"schematic_trace","data-schematic-trace-id":e.schematic_trace_id,...e.subcircuit_connectivity_map_key&&{"data-subcircuit-connectivity-map-key":e.subcircuit_connectivity_map_key}},children:r}]}function lto({probe:e,transform:t,colorMap:n,fallbackColor:o}){let[i,r]=tt(t,[e.position.x,e.position.y]),s=e.color??o??n.schematic.reference,a=Math.abs(t.a)*0.6,c=Math.abs(t.a)*0.28,l=e.label_alignment??"top_right",d,u,h,A;switch(l){case"top_left":d=-135*Math.PI/180,u="end",h=-8,A=-8;break;case"top_center":d=-90*Math.PI/180,u="middle",h=0,A=-8;break;case"top_right":d=-45*Math.PI/180,u="start",h=8,A=-8;break;case"center_left":d=180*Math.PI/180,u="end",h=-8,A=0;break;case"center":d=-90*Math.PI/180,u="middle",h=0,A=-8;break;case"center_right":d=0*Math.PI/180,u="start",h=8,A=0;break;case"bottom_left":d=135*Math.PI/180,u="end",h=-8,A=8;break;case"bottom_center":d=90*Math.PI/180,u="middle",h=0,A=8;break;case"bottom_right":d=45*Math.PI/180,u="start",h=8,A=8;break;default:d=-50*Math.PI/180,u="start",h=8,A=0}let m=i+a*Math.cos(d),p=r+a*Math.sin(d),g=i,_=r,f=[`M ${m},${p}`,`L ${g},${_}`,`M ${g},${_}`,`L ${g-c*Math.cos((d*180/Math.PI+150)*Math.PI/180)},${_-c*Math.sin((d*180/Math.PI+150)*Math.PI/180)}`,`L ${g-c*Math.cos((d*180/Math.PI+210)*Math.PI/180)},${_-c*Math.sin((d*180/Math.PI+210)*Math.PI/180)}`,"Z"].join(" "),y=(m+h).toString(),x=(p+A).toString(),C=[];if(e.name&&e.voltage!==void 0)C.push({type:"element",name:"tspan",value:"",attributes:{x:y},children:[{type:"text",value:e.name,name:"",attributes:{},children:[]}]}),C.push({type:"element",name:"tspan",value:"",attributes:{x:y,dy:"1.2em"},children:[{type:"text",value:`${e.voltage}V`,name:"",attributes:{},children:[]}]});else{let I=[];if(e.name)I.push(e.name);if(e.voltage!==void 0)I.push(`${e.voltage}V`);C.push({type:"text",value:I.join(" "),name:"",attributes:{},children:[]})}return[{name:"path",type:"element",attributes:{class:"sch-voltage-probe",d:f,stroke:s,fill:s,"stroke-width":`${Rm(t)}px`},value:"",children:[]},{type:"element",name:"text",value:"",attributes:{class:"sch-voltage-probe-label",x:y,y:x,fill:s,"text-anchor":u,"dominant-baseline":"middle","font-family":"sans-serif","font-size":`${tx(t,"reference_designator")}px`,"font-weight":"bold","data-schematic-voltage-probe-id":e.schematic_voltage_probe_id},children:C}]}function upt({message:e,targetBounds:t,svgWidth:n,svgHeight:o,occupiedCalloutBounds:i}){let r=Math.max(1,n-D_*2),s=pto(e,Math.max(12,Math.floor((Math.min(emt,r)-IBe*2)/(Z0t*0.56)))),a=Math.max(...s.map((A)=>A.length)),c=Math.min(emt,r,Math.max(Math.min(uto,r),a*Z0t*0.56+IBe*2)),l=IBe*2+s.length*dto,d=hto({targetBounds:t,calloutWidth:c,calloutHeight:l,svgWidth:n,svgHeight:o,occupiedCalloutBounds:i});i.push(d);let u=hpt(t,EJ),h=mto(d,u);return{messageLines:s,calloutWidth:c,calloutHeight:l,placement:d,targetOutline:u,leader:h}}function hto({targetBounds:e,calloutWidth:t,calloutHeight:n,svgWidth:o,svgHeight:i,occupiedCalloutBounds:r}){let s=(e.minX+e.maxX)/2,a=(e.minY+e.maxY)/2,c=e.minY-EJ-ahe-n,l=e.maxY+EJ+ahe,d=e.minX-EJ-ahe-t,u=e.maxX+EJ+ahe,h=[];if(c>=D_)h.push(SJ({x:sG(s-t/2,D_,o-D_-t),y:c,width:t,height:n,side:"top"}));if(l+n<=i-D_)h.push(SJ({x:sG(s-t/2,D_,o-D_-t),y:l,width:t,height:n,side:"bottom"}));if(u+t<=o-D_)h.push(SJ({x:u,y:sG(a-n/2,D_,i-D_-n),width:t,height:n,side:"right"}));if(d>=D_)h.push(SJ({x:d,y:sG(a-n/2,D_,i-D_-n),width:t,height:n,side:"left"}));let A=h.find((m)=>r.every((p)=>!Ato(hpt(m,4),p)));if(A)return A;if(h[0])return h[0];return SJ({x:sG(s-t/2,D_,o-D_-t),y:sG(c,D_,i-D_-n),width:t,height:n,side:"top"})}function mto(e,t){let n=(t.minX+t.maxX)/2,o=(t.minY+t.maxY)/2,i=(e.minX+e.maxX)/2,r=(e.minY+e.maxY)/2;switch(e.side){case"top":return{from:{x:i,y:e.maxY},to:{x:n,y:t.minY}};case"bottom":return{from:{x:i,y:e.minY},to:{x:n,y:t.maxY}};case"left":return{from:{x:e.maxX,y:r},to:{x:t.minX,y:o}};case"right":return{from:{x:e.minX,y:r},to:{x:t.maxX,y:o}}}}function pto(e,t){let n=e.trim().split(/\s+/),o=[],i="";for(let r of n){let s=i?`${i} ${r}`:r;if(s.length<=t||i.length===0){i=s;continue}o.push(i),i=r}if(i)o.push(i);return o.length>0?o:["Diagnostic"]}function hpt(e,t){return{minX:e.minX-t,minY:e.minY-t,maxX:e.maxX+t,maxY:e.maxY+t}}function Ato(e,t){return!(e.maxX<=t.minX||e.minX>=t.maxX||e.maxY<=t.minY||e.minY>=t.maxY)}function SJ({x:e,y:t,width:n,height:o,side:i}){return{minX:e,minY:t,maxX:e+n,maxY:t+o,side:i}}function sG(e,t,n){if(n<t)return(t+n)/2;return Math.min(Math.max(e,t),n)}function gto({circuitJson:e,transform:t,svgWidth:n,svgHeight:o,colorMap:i}){let r=i.schematic.erc_warning,s=[];return e.filter(mpt).flatMap((a)=>{let c=fto(a,e,t);if(!c)return[];let{messageLines:l,calloutWidth:d,calloutHeight:u,placement:h,targetOutline:A,leader:m}=upt({message:a.message,targetBounds:c,svgWidth:n,svgHeight:o,occupiedCalloutBounds:s}),p=Ito(a);return[{name:"g",type:"element",value:"",attributes:{class:"schematic-warning","data-type":a.type,"data-warning-id":p,role:"note","aria-label":a.message},children:[{name:"rect",type:"element",value:"",attributes:{x:A.minX.toString(),y:A.minY.toString(),width:(A.maxX-A.minX).toString(),height:(A.maxY-A.minY).toString(),rx:"6",fill:"none",stroke:r,"stroke-width":"1","stroke-dasharray":"4,3","data-warning-reference":"target"},children:[]},{name:"line",type:"element",value:"",attributes:{x1:m.from.x.toString(),y1:m.from.y.toString(),x2:m.to.x.toString(),y2:m.to.y.toString(),stroke:r,"stroke-width":"1","data-warning-reference":"leader"},children:[]},{name:"rect",type:"element",value:"",attributes:{x:h.minX.toString(),y:h.minY.toString(),width:d.toString(),height:u.toString(),fill:"rgba(255, 250, 235, 0.97)",stroke:r,"stroke-width":"1","data-warning-reference":"callout"},children:[]},{name:"text",type:"element",value:"",attributes:{x:(h.minX+bBe).toString(),y:(h.minY+bBe+tmt).toString(),fill:"#5c4300","font-family":"sans-serif","font-size":tmt.toString()},children:l.map((_,f)=>({name:"tspan",type:"element",value:"",attributes:{x:(h.minX+bBe).toString(),dy:f===0?"0":_to.toString()},children:[Sto(_)]}))}]}]})}function fto(e,t,n){let i=yto(e).map((r)=>xto(t,r)).filter((r)=>Boolean(r)).map((r)=>Cto(r,n)).filter((r)=>Boolean(r));if(i.length===0)return null;return i.reduce(bto)}function yto(e){switch(e.type){case"schematic_sheet_styling_warning":return[e.schematic_sheet_id];case"schematic_component_overlap_warning":return e.schematic_component_ids;case"schematic_component_styling_warning":return[e.schematic_component_id,...e.schematic_port_ids??[]];case"schematic_manual_edit_conflict_warning":return[e.schematic_component_id];case"schematic_element_outside_sheet_warning":return[e.schematic_element_id]}}function xto(e,t){return e.find((n)=>{if(!n.type.startsWith("schematic_"))return!1;let o=`${n.type}_id`;return n[o]===t})}function Cto(e,t){if(e.type==="schematic_sheet"){let n=_G(e);return che([tt(t,{x:n.minX,y:n.maxY}),tt(t,{x:n.maxX,y:n.minY})])}if(e.type==="schematic_component"){let n=tt(t,{x:e.center.x-e.size.width/2,y:e.center.y+e.size.height/2}),o=tt(t,{x:e.center.x+e.size.width/2,y:e.center.y-e.size.height/2});return che([n,o])}if(e.type==="schematic_port"){let n=tt(t,e.center);return nmt(che([n]),4)}if(e.type==="schematic_net_label"){let n=tt(t,e.anchor_position??e.center),o=Math.max(28,e.text.length*8);return{minX:n.x-o/2,minY:n.y-10,maxX:n.x+o/2,maxY:n.y+10}}if(e.type==="schematic_trace"){let n=e.edges.flatMap((o)=>[tt(t,o.from),tt(t,o.to)]);if(n.length===0)return null;return nmt(che(n),4)}return null}function Ito(e){switch(e.type){case"schematic_sheet_styling_warning":return e.schematic_sheet_styling_warning_id;case"schematic_component_overlap_warning":return e.schematic_component_overlap_warning_id;case"schematic_component_styling_warning":return e.schematic_component_styling_warning_id;case"schematic_element_outside_sheet_warning":return e.schematic_element_outside_sheet_warning_id;case"schematic_manual_edit_conflict_warning":return e.schematic_manual_edit_conflict_warning_id}}function che(e){return{minX:Math.min(...e.map((t)=>t.x)),minY:Math.min(...e.map((t)=>t.y)),maxX:Math.max(...e.map((t)=>t.x)),maxY:Math.max(...e.map((t)=>t.y))}}function bto(e,t){return{minX:Math.min(e.minX,t.minX),minY:Math.min(e.minY,t.minY),maxX:Math.max(e.maxX,t.maxX),maxY:Math.max(e.maxY,t.maxY)}}function nmt(e,t){return{minX:e.minX-t,minY:e.minY-t,maxX:e.maxX+t,maxY:e.maxY+t}}function Sto(e){return{name:"",type:"text",value:e,attributes:{},children:[]}}function Pto({circuitJson:e,transform:t,svgWidth:n,svgHeight:o}){let i=vto(e,t);return e.flatMap((r)=>{let s=Eto(r);if(!s)return[];let a=e.filter((g)=>g.type==="schematic_port"&&s.sourcePortIds.includes(g.source_port_id)),c=a[0];if(!c)return[];let l=a.flatMap((g)=>{let _=tt(t,g.center);return[{name:"circle",type:"element",value:"",attributes:{cx:_.x.toString(),cy:_.y.toString(),r:"9",fill:"red","fill-opacity":"0.15",stroke:"red","stroke-width":"2","data-type":r.type,"data-source-port-id":g.source_port_id,"data-error-id":s.errorId,"aria-label":s.message},children:[{name:"title",type:"element",value:"",attributes:{},children:[{name:"",type:"text",value:s.message,attributes:{},children:[]}]}]}]}),d=tt(t,c.center),{placement:u,leader:h,messageLines:A,calloutWidth:m,calloutHeight:p}=upt({message:s.message,targetBounds:{minX:d.x-9,minY:d.y-9,maxX:d.x+9,maxY:d.y+9},svgWidth:n,svgHeight:o,occupiedCalloutBounds:i});return[...l,{name:"g",type:"element",value:"",attributes:{"data-type":"source_port_error_callout","data-error-type":r.type,"data-error-id":s.errorId,"data-source-port-id":c.source_port_id,"aria-label":s.message,role:"note"},children:[{name:"line",type:"element",value:"",children:[],attributes:{x1:h.from.x.toString(),y1:h.from.y.toString(),x2:h.to.x.toString(),y2:h.to.y.toString(),stroke:"red","stroke-width":"1"}},{name:"rect",type:"element",value:"",children:[],attributes:{x:u.minX.toString(),y:u.minY.toString(),width:m.toString(),height:p.toString(),fill:"rgba(255, 245, 245, 0.97)",stroke:"red","stroke-width":"1"}},{name:"text",type:"element",value:"",attributes:{x:(u.minX+6).toString(),y:(u.minY+17).toString(),fill:"#a00000","font-family":"sans-serif","font-size":"11"},children:A.map((g,_)=>({name:"tspan",type:"element",value:"",attributes:{x:(u.minX+6).toString(),dy:_===0?"0":"14"},children:[{name:"",type:"text",value:g,attributes:{},children:[]}]}))}]}]})}function vto(e,t){return e.flatMap((n)=>{if(n.type!=="schematic_component")return[];let o=Jmt(e.filter((r)=>r.type==="source_component"?r.source_component_id===n.source_component_id:("schematic_component_id"in r)&&r.schematic_component_id===n.schematic_component_id),0),i=[{x:o.minX,y:o.minY},{x:o.minX,y:o.maxY},{x:o.maxX,y:o.minY},{x:o.maxX,y:o.maxY}].map((r)=>tt(t,r));return[{minX:Math.min(...i.map((r)=>r.x)),minY:Math.min(...i.map((r)=>r.y)),maxX:Math.max(...i.map((r)=>r.x)),maxY:Math.max(...i.map((r)=>r.y))}]})}function Eto(e){switch(e.type){case"source_component_misconfigured_error":return{errorId:e.source_component_misconfigured_error_id,sourcePortIds:e.source_port_ids??[],message:e.message};case"source_pin_must_be_connected_error":return{errorId:e.source_pin_must_be_connected_error_id,sourcePortIds:[e.source_port_id],message:e.message};case"source_i2c_misconfigured_error":return{errorId:e.source_i2c_misconfigured_error_id,sourcePortIds:e.source_port_ids,message:e.message};case"source_trace_not_connected_error":return{errorId:e.source_trace_not_connected_error_id,sourcePortIds:e.connected_source_port_ids??[],message:e.message}}}function iQ(e,t){let n=e.filter((j)=>j.type==="schematic_sheet"),o=Seo(n),i=o;if(t?.schematicSheetId!==void 0)i=n.find((j)=>j.schematic_sheet_id===t.schematicSheetId)??o;else if(t?.schematicSheetIndex!==void 0)i=n.find((j)=>j.sheet_index===t.schematicSheetIndex)??o;let r=i?e.filter((j)=>!j.type.startsWith("schematic_")||mpt(j)||("schematic_sheet_id"in j)&&j.schematic_sheet_id===i.schematic_sheet_id):e,s=Jmt(i?[i]:r),a=s.maxX-s.minX,c=s.maxY-s.minY,l=t?.width??1200,d=t?.height??600,u=t?.colorOverrides,h={...fd,schematic:{...fd.schematic,...u?.schematic??{}}},A=a/c,m=l/d,p;if(A>m){let j=l/A;p={x:0,y:(d-j)/2}}else{let j=d*A;p={x:(l-j)/2,y:0}}let g=oat([{x:s.minX,y:s.maxY},{x:s.maxX,y:s.maxY},{x:s.maxX,y:s.minY}],[{x:p.x,y:p.y},{x:l-p.x,y:p.y},{x:l-p.x,y:d-p.y}]),_=[];if(_.push({name:"rect",type:"element",attributes:{class:"boundary",x:"0",y:"0",width:l.toString(),height:d.toString()},children:[],value:""}),t?.grid){let j=typeof t.grid==="object"?t.grid:{};_.push(Ieo({bounds:s,transform:g,...j}))}let f=[],y=[],x=[],C=[],I=[],b=[],P=[],E=[],B=[],w=[],T=[],Q=[],N=[],F=Bto({transform:g,svgWidth:l,svgHeight:d,schematicSheet:i}),H=Array.isArray(h.simulation_palette)?h.simulation_palette:Array.isArray(h.palette)?h.palette:[],z=0;for(let j of r)if(j.type==="schematic_sheet")Q.push(...sto({schematicSheet:j,transform:g,colorMap:h}));else if(j.type==="schematic_graphic")N.push(Leo({schematicGraphic:j,viewport:wto({availableViewport:F,schematicGraphic:j,transform:g})}));else if(j.type==="schematic_debug_object")f.push(...ito({debugObject:j,transform:g}));else if(j.type==="schematic_component")y.push(...oto({component:j,transform:g,circuitJson:r,colorMap:h})),B.push(...ept({component:j,transform:g,circuitJson:r}));else if(j.type==="schematic_box")P.push(...Keo({schematicBox:j,transform:g,colorMap:h}));else if(j.type==="schematic_trace")x.push(...cto({trace:j,transform:g,colorMap:h}));else if(j.type==="schematic_net_label")C.push(...zeo({schNetLabel:j,realToScreenTransform:g,colorMap:h}));else if(j.type==="schematic_text"&&!j.schematic_component_id)I.push(GBe({elm:j,transform:g,colorMap:h}));else if(j.type==="schematic_voltage_probe"){let q=H.length>0?H[z%H.length]:void 0;z+=1,b.push(...lto({probe:j,transform:g,colorMap:h,fallbackColor:q}))}else if(j.type==="schematic_table")E.push(...ato({schematicTable:j,transform:g,colorMap:h,circuitJson:r}));else if(j.type==="schematic_line"){if(j.schematic_component_id)continue;T.push(...apt({schLine:j,transform:g,colorMap:h}))}else if(j.type==="schematic_circle"){if(j.schematic_component_id)continue;T.push(...opt({schCircle:j,transform:g,colorMap:h}))}else if(j.type==="schematic_rect"){if(j.schematic_component_id)continue;T.push(...cpt({schRect:j,transform:g,colorMap:h}))}else if(j.type==="schematic_arc"){if(j.schematic_component_id)continue;T.push(...npt({schArc:j,transform:g,colorMap:h}))}else if(j.type==="schematic_path"){if(j.schematic_component_id)continue;T.push(...lpt({schPath:j,transform:g,colorMap:h}))}else if(j.type==="schematic_port"){let q=r.find((ne)=>ne.type==="source_port"&&ne.source_port_id===j.source_port_id);if(q?.type==="source_port"&&q.do_not_connect===!0)w.push(Veo({schPort:j,transform:g,colorMap:h}));if(t?.drawPorts)w.push(...Ueo({schPort:j,transform:g,circuitJson:r,colorMap:h}))}let Y=x.filter((j)=>j.attributes?.["data-layer"]!=="overlay"),U=x.filter((j)=>j.attributes?.["data-layer"]==="overlay");if(_.push(...N,...f,...Q,...Y,...U,...T,...y,...B,...w,...C,...I,...P,...b,...E),t?.labeledPoints)_.push(beo({points:t.labeledPoints,transform:g}));if(t?.shouldDrawWarnings)_.push(...gto({circuitJson:r,transform:g,svgWidth:l,svgHeight:d,colorMap:h}));if(t?.shouldDrawErrors)_.push(...Pto({circuitJson:r,transform:g,svgWidth:l,svgHeight:d}));let X=S7(e),V=P7;if(t?.showErrorsInTextOverlay){let j=pG(e);if(j)_.push(j)}let W={name:"svg",type:"element",attributes:{xmlns:"http://www.w3.org/2000/svg",class:["tscircuit-schematic",t?.className].filter(Boolean).join(" "),width:l.toString(),height:d.toString(),style:`background-color: ${h.schematic.background}`,"data-real-to-screen-transform":tat(g),...X&&{"data-software-used-string":X},...t?.includeVersion&&{"data-circuit-to-svg-version":V}},children:[{name:"style",type:"element",children:[{type:"text",value:`
.boundary { fill: ${h.schematic.background}; }
.schematic-boundary { fill: none; stroke: #fff; }
.component { fill: none; stroke: ${h.schematic.component_outline}; }
.chip { fill: ${h.schematic.component_body}; stroke: ${h.schematic.component_outline}; }
.component-pin { fill: none; stroke: ${h.schematic.component_outline}; }
.text { font-family: sans-serif; fill: ${h.schematic.wire}; }
.pin-number { fill: ${h.schematic.pin_number}; }
.port-label { fill: ${h.schematic.reference}; }
.component-name { fill: ${h.schematic.reference}; }
${t?.css??""}
`,name:"",attributes:{},children:[]}],value:"",attributes:{}},..._],value:""};return b7(W)}function Bto({transform:e,svgWidth:t,svgHeight:n,schematicSheet:o}){if(!o)return{x:0,y:0,width:t,height:n};let i=_G(o),r=tt(e,{x:i.innerMinX,y:i.innerMaxY}),s=tt(e,{x:i.innerMaxX,y:i.innerMinY});return{x:Math.min(r.x,s.x),y:Math.min(r.y,s.y),width:Math.abs(s.x-r.x),height:Math.abs(s.y-r.y)}}function wto({availableViewport:e,schematicGraphic:t,transform:n}){if(t.width===void 0&&t.height===void 0)return e;let o=t.width===void 0?e.width:omt(t.width*Math.hypot(n.a,n.b),e.width),i=t.height===void 0?e.height:omt(t.height*Math.hypot(n.c,n.d),e.height);return{x:e.x+(e.width-o)/2,y:e.y+(e.height-i)/2,width:o,height:i}}function omt(e,t){if(!Number.isFinite(e))return t;return Math.max(0,Math.min(e,t))}function Rto(e,t){let n=e.filter((u)=>u.type==="schematic_sheet").slice().sort((u,h)=>(u.sheet_index??0)-(h.sheet_index??0));if(n.length<=1)return iQ(e,t);let o=t?.width??Tto,i=t?.sheetLabelHeight??Dto,r=t?.sheetGap??Nto,s={...fd,schematic:{...fd.schematic,...t?.colorOverrides?.schematic??{}}},a=[],c=0;n.forEach((u,h)=>{let A=_G(u),m=t?.height??Math.round(o*A.height/A.width),p=iQ(e,{...t,schematicSheetId:u.schematic_sheet_id,schematicSheetIndex:void 0,width:o,height:m}),g=BBe(ppt.parseSync(p)),_=c+i,f=u.display_name??u.name??`Sheet ${u.sheet_index??h+1}`,y=Qto({transformStr:g.attributes?.["data-real-to-screen-transform"],panelTop:_,labelHeight:i,schematicSheet:u});a.push({name:"text",type:"element",value:"",attributes:{class:"stacked-sheet-label",x:J0(y.x),y:J0(y.y),"font-family":"sans-serif","font-size":`${J0(i*0.55)}px`,fill:s.schematic.reference,"data-schematic-sheet-id":u.schematic_sheet_id},children:[{name:"",type:"text",value:f,attributes:{},children:[]}]},vJ(g,0,_,o,m)),c=_+m+r});let l=Math.max(0,c-r),d={name:"svg",type:"element",value:"",attributes:{xmlns:"http://www.w3.org/2000/svg",class:"tscircuit-stacked-schematic",width:J0(o),height:J0(l),viewBox:`0 0 ${J0(o)} ${J0(l)}`,style:`background-color: ${s.schematic.background}`},children:[{name:"rect",type:"element",value:"",attributes:{class:"boundary",x:"0",y:"0",width:J0(o),height:J0(l),fill:s.schematic.background},children:[]},...a]};return b7(d)}function Qto({transformStr:e,panelTop:t,labelHeight:n,schematicSheet:o}){let i=t-n*0.28;if(!e)return{x:4,y:i};let r=_G(o),s=tt($st(e),{x:r.minX,y:r.maxY});return{x:Math.max(2,s.x),y:i}}function DJ(e){return e?.valuePerDiv!==void 0&&Number.isFinite(e.valuePerDiv)&&Math.abs(e.valuePerDiv)>Number.EPSILON}function my(e){return e.type==="simulation_transient_current_graph"}function YBe(e){return my(e)?e.simulation_transient_current_graph_id:e.simulation_transient_voltage_graph_id}function _pt(e){return my(e)?"data-simulation-transient-current-graph-id":"data-simulation-transient-voltage-graph-id"}function gpt(e){return my(e)?e.current_levels:e.voltage_levels}function Wto(e){let t=e.some((o)=>my(o.graph)),n=e.some((o)=>!my(o.graph));if(t&&!n)return"Current (A)";if(n&&!t)return"Voltage (V)";return"Value"}function Xto(e){return`simulation-graph-${e.replace(/[^a-zA-Z0-9_-]+/g,"-")}`}function oi(e){if(!Number.isFinite(e))return"0";let t=Number.parseFloat(e.toFixed(6));if(Number.isInteger(t))return t.toString();return t.toString()}function Ta(e,t,n=[]){return{name:e,type:"element",value:"",attributes:t,children:n}}function H5(e){return{name:"",type:"text",value:e,attributes:{},children:[]}}function RBe(e,t){if(!Number.isFinite(e))return`0 ${t}`;if(e===0)return`0 ${t}`;let n=Math.abs(e),o=[{threshold:1e6,factor:1e6,prefix:"M"},{threshold:1000,factor:1000,prefix:"k"},{threshold:1,factor:1,prefix:""},{threshold:0.001,factor:0.001,prefix:"m"},{threshold:0.000001,factor:0.000001,prefix:"µ"},{threshold:0.000000001,factor:0.000000001,prefix:"n"}],i=o.find((s)=>n>=s.threshold)??o[o.length-1],r=e/i.factor;return`${fpt(r)} ${i.prefix}${t}`}function Kto(e){return`${fpt(e)} div`}function fpt(e){if(!Number.isFinite(e))return"0";let t=Math.abs(e),n=t>=100?0:t>=10?1:t>=1?2:3;return Number.parseFloat(e.toFixed(n)).toString()}function smt(e,t){let n=t.tickLabelOverrides?.get(e);if(n!==void 0)return n;let{ticks:o}=t;if(o.length<=1)return oi(e);let i=o[o.length-1]-o[0];if(!Number.isFinite(i)||i===0)return oi(e);let r=jto(i),s=10**r;return(Math.round(e*s)/s).toFixed(r).replace(/\.0+$/,"").replace(/(\.\d*?)0+$/,"$1").replace(/\.$/,"")}function jto(e){if(e>=100)return 0;if(e>=10)return 1;if(e>=1)return 2;return 3}function qto({graphs:e,valueAxis:t,scaleY:n,plotLeft:o,plotWidth:i,plotHeight:r}){let s=$0.top,a=$0.top+r,c=o,l=o+i,d=[],u=e.filter((h)=>DJ(h.scopeTraceDisplay));for(let[h,A]of u.entries()){let m=h%2===0?"left":"right",p=Math.floor(h/2),g=m==="left"?c-10-p*NBe:l+10+p*NBe,_=m==="left"?g-6:g+6,f=m==="left"?"end":"start",y=m==="left"?g+6:g-6,x=A.scopeTraceDisplay;if(!DJ(x))continue;d.push(Ta("line",{class:"axis axis-y axis-y-scope",x1:oi(g),y1:oi(s),x2:oi(g),y2:oi(a),style:`stroke: ${A.color};`}),Ta("text",{class:"axis-title axis-title-y axis-title-y-scope",x:oi(g),y:oi(s-12),"text-anchor":"middle",style:`fill: ${A.color}; font-size: 10px;`},[H5(A.label)]));for(let C of t.ticks){let I=n(C),b=(x.center??0)+(C-(x.offsetDivs??0))*x.valuePerDiv;d.push(Ta("line",{class:"axis-tick axis-tick-y axis-tick-y-scope",x1:oi(g),y1:oi(I),x2:oi(y),y2:oi(I),style:`stroke: ${A.color};`}),Ta("text",{class:"axis-label axis-label-y axis-label-y-scope",x:oi(_),y:oi(I),"text-anchor":f,"dominant-baseline":"middle",style:`fill: ${A.color}; font-size: 10px;`},[H5(RBe(b,my(A.graph)?"A":"V"))]))}}return d}function Jto({timeAxis:e,valueAxis:t,graphs:n,scaleX:o,scaleY:i,plotLeft:r,plotWidth:s,plotHeight:a,yAxisTitle:c,xAxisTitle:l,usesScopeTraceDisplay:d}){let u=$0.top+a,h=r,A=r+s,m=[Ta("line",{class:"axis axis-x",x1:oi(h),y1:oi(u),x2:oi(A),y2:oi(u)}),...d?[]:[Ta("line",{class:"axis axis-y",x1:oi(h),y1:oi($0.top),x2:oi(h),y2:oi(u)})]];for(let p of e.ticks){let g=oi(o(p));m.push(Ta("line",{class:"axis-tick axis-tick-x",x1:g,y1:oi(u),x2:g,y2:oi(u+6)}),Ta("text",{class:"axis-label axis-label-x",x:g,y:oi(u+22),"text-anchor":"middle"},[H5(smt(p,e))]))}if(d)m.push(...qto({graphs:n,valueAxis:t,scaleY:i,plotLeft:r,plotWidth:s,plotHeight:a}));else{for(let p of t.ticks){let g=oi(i(p));m.push(Ta("line",{class:"axis-tick axis-tick-y",x1:oi(h-6),y1:g,x2:oi(h),y2:g}),Ta("text",{class:"axis-label axis-label-y",x:oi(h-10),y:g,"text-anchor":"end","dominant-baseline":"middle"},[H5(smt(p,t))]))}m.push(Ta("text",{class:"axis-title axis-title-y",x:oi(h-64),y:oi($0.top+a/2),transform:`rotate(-90 ${oi(h-64)} ${oi($0.top+a/2)})`,"text-anchor":"middle"},[H5(c)]))}return m.push(Ta("text",{class:"axis-title axis-title-x",x:oi(h+s/2),y:oi(u+48),"text-anchor":"middle"},[H5(l)])),Ta("g",{class:"axes"},m)}function phe(e,t=!1){if(e.length===0)return{domainMin:0,domainMax:1,ticks:[0,1]};let n=Math.min(...e),o=Math.max(...e);if(n===o){let c=n===0?1:Math.abs(n)*0.1||1;return{domainMin:n-c,domainMax:n+c,ticks:[n-c,n,n+c]}}let i=ypt(n,o),r=i.length>0?[...i]:[n,o],s=r[0],a=r[r.length-1];if(t&&r.length>1){let c=Math.abs(r[1]-r[0]),l=0.1;if(n<s+c*0.1)s-=c,r.unshift(s);if(o>a-c*0.1)a+=c,r.push(a)}return{domainMin:s,domainMax:a,ticks:r}}function $to({values:e,graphs:t,experiment:n}){let o=lhe(n?.start_time_ms),i=lhe(n?.end_time_ms),r=t.map((p)=>lhe(p.start_time_ms)).filter((p)=>p!==void 0),s=t.map((p)=>lhe(p.end_time_ms)).filter((p)=>p!==void 0),a=o??(r.length>0?Math.min(...r):void 0),c=i??(s.length>0?Math.max(...s):void 0);if(a===void 0||c===void 0||a===c)return phe(e);let l=Math.min(a,c),d=Math.max(a,c),h=(d-l)*0.12,A=ypt(l,d).filter((p)=>p>l+h&&p<d-h),m=Zto([l,...A,d]);return{domainMin:l,domainMax:d,ticks:m,tickLabelOverrides:new Map([[l,oi(l)],[d,oi(d)]])}}function lhe(e){return typeof e==="number"&&Number.isFinite(e)?e:void 0}function Zto(e){let t=[...e].sort((o,i)=>o-i),n=[];for(let o of t){let i=n[n.length-1];if(i===void 0||Math.abs(o-i)>0.000000000001)n.push(o)}return n}function ypt(e,t,n=6){let o=t-e;if(!Number.isFinite(o)||o<=Number.EPSILON)return[e,t];let i=eno(o/Math.max(1,n-1)),r=Math.floor(e/i)*i,s=Math.ceil(t/i)*i,a=[];for(let c=r;c<=s+i/2;c+=i)a.push(Number.parseFloat(c.toPrecision(12)));return a}function eno(e){if(!Number.isFinite(e)||e<=0)return 1;let t=Math.floor(Math.log10(e)),n=e/10**t,o;if(n<=1)o=1;else if(n<=2)o=2;else if(n<=5)o=5;else o=10;return o*10**t}function tno(e,t){return Ta("rect",{class:"background",x:"0",y:"0",width:oi(e),height:oi(t)})}function nno(e,t,n,o){return Ta("defs",{},[Ta("clipPath",{id:e},[Ta("rect",{x:oi(t),y:oi($0.top),width:oi(n),height:oi(o)})])])}function ono({timeAxis:e,valueAxis:t,scaleX:n,scaleY:o,plotLeft:i,plotWidth:r,plotHeight:s}){let a=$0.top,c=$0.top+s,l=i,d=i+r,u=[];for(let h of e.ticks){let A=oi(n(h));u.push(Ta("line",{class:"grid-line grid-line-x",x1:A,y1:oi(a),x2:A,y2:oi(c)}))}for(let h of t.ticks){let A=oi(o(h));u.push(Ta("line",{class:"grid-line grid-line-y",x1:oi(l),y1:A,x2:oi(d),y2:A}))}return Ta("g",{class:"grid"},u)}function amt(e,t,n,o){if(!Number.isFinite(e)||!Number.isFinite(t)){let r=(n+o)/2;return()=>r}let i=t-e;if(Math.abs(i)<Number.EPSILON){let r=(n+o)/2;return()=>r}return(r)=>n+(r-e)/i*(o-n)}function ino(e,t,n){return Ta("rect",{class:"plot-background",x:oi(e),y:oi($0.top),width:oi(t),height:oi(n)})}function rno(){let e=`
:root { color-scheme: light; }
svg { font-family: 'Inter', 'Helvetica Neue', Arial, sans-serif; }
.background { fill: ${fd.schematic.background}; }
.plot-background { fill: #ffffff; }
.grid-line { stroke: rgba(0, 0, 0, 0.08); stroke-width: 1; }
.axis { stroke: rgba(0, 0, 0, 0.6); stroke-width: 1.5; }
.axis-tick { stroke: rgba(0, 0, 0, 0.6); stroke-width: 1; }
.axis-label { fill: rgba(0, 0, 0, 0.75); font-size: 12px; }
.axis-title { fill: rgba(0, 0, 0, 0.9); font-size: 14px; font-weight: 600; }
.legend-label { fill: rgba(0, 0, 0, 0.75); font-size: 11px; }
.legend-line { stroke-width: 3; }
.scope-channel-card { fill: #ffffff; stroke: rgba(0, 0, 0, 0.22); stroke-width: 1; }
.scope-channel-header-text { fill: #ffffff; font-size: 14px; font-weight: 700; }
.scope-channel-detail { fill: rgba(0, 0, 0, 0.42); font-size: 14px; }
.simulation-line { fill: none; stroke-width: 2.5; }
.simulation-point { stroke-width: 0; }
.chart-title { fill: rgba(0, 0, 0, 0.85); font-size: 18px; font-weight: 600; }
`;return Ta("style",{},[H5(e)])}function cmt(e,t){let n=e[t];if(typeof n!=="string")return;return n}function sno(e,t,n,o){let r=[4,8],s=r.map((h)=>oi(h)).join(" "),c=r.reduce((h,A)=>h+A,0)/3,l=[];e.forEach((h,A)=>{if(h.points.length===0)return;let m=[];h.points.forEach((y,x)=>{let C=oi(n(y.timeMs)),I=oi(o(y.displayValue));m.push(`${x===0?"M":"L"} ${C} ${I}`)});let p={class:"simulation-line",d:m.join(" "),stroke:h.color,"clip-path":`url(#${t})`,[_pt(h.graph)]:YBe(h.graph)};if(h.graph.source_component_id)p["data-source-component-id"]=h.graph.source_component_id;let g=cmt(h.graph,"source_probe_id");if(g)p["data-source-probe-id"]=g;let _=cmt(h.graph,"source_probe_name");if(_)p["data-source-probe-name"]=_;if(h.graph.subcircuit_connectivity_map_key)p["data-subcircuit-connectivity-map-key"]=h.graph.subcircuit_connectivity_map_key;let f=h.points.map((y)=>{let x=oi(n(y.timeMs)),C=oi(o(y.displayValue));return Ta("circle",{class:"simulation-point",cx:x,cy:C,r:"2.5",fill:h.color,"clip-path":`url(#${t})`})});l.push({entry:h,graphIndex:A,pathAttributes:p,pointElements:f})});let d=[];for(let h=0;h<3;h++)for(let A of l){let m=(A.graphIndex+h)%3,p=oi(m*c);d.push(Ta("path",{...A.pathAttributes,"stroke-dasharray":s,"stroke-dashoffset":p}))}let u=l.flatMap((h)=>h.pointElements);return Ta("g",{class:"data-series"},[...d,...u])}function ano(e,t){if(!e?.name)return null;return Ta("text",{class:"chart-title",x:oi(t/2),y:oi($0.top-40),"text-anchor":"middle"},[H5(e.name)])}function cno(e,t,n,o){let i=o.map((r,s)=>Ta("tspan",{x:"20",dy:s===0?"0":String(xpt)},[H5(r)]));return Ta("g",{class:"legend-item",transform:`translate(${oi(t)} ${oi(n)})`},[Ta("line",{class:"legend-line",x1:"0",y1:"0",x2:"16",y2:"0",stroke:e.color}),Ta("text",{class:"legend-label",x:"20",y:"0","dominant-baseline":"middle"},i)])}function dno(e){let t=e.split("_");if(t.length<=1)return[e];let n=[],o=t[0]??"";for(let i=1;i<t.length;i++){let r=t[i]??"",s=`${o}_${r}`;if(s.length>lno)n.push(o),o=r;else o=s}if(o)n.push(o);return n}function hno(e,t){let n=$0.top,o=e.map((i)=>{let r=t-$0.right+10,s=dno(i.label),a=cno(i,r,n,s),c=s.length*xpt;return n+=Math.max(c,uno),a});return Ta("g",{class:"legend"},o)}function Cpt(e,t){let n=Math.floor((t+lG)/(nQ+lG)),o=Math.max(1,Math.min(n,e)),i=Math.max(1,Math.ceil(e/o)),r=o*nQ+(o-1)*lG,s=i*Ahe+(i-1)*lG;return{columns:o,rows:i,x:Math.max(0,(t-r)/2),height:s}}function pno(e,t,n){let o=Cpt(e.length,t),i=[];for(let[r,s]of e.entries()){let a=r%o.columns,c=Math.floor(r/o.columns);i.push(Ano(s,r,o.x+a*(nQ+lG),n+DBe+c*(Ahe+lG)))}return Ta("g",{class:"scope-legend"},i)}function Ano(e,t,n,o){let i=e.scopeTraceDisplay,r=my(e.graph)?"A":"V",s=i&&DJ(i)?RBe(i.valuePerDiv,r):`1 ${r}`,a=RBe(i?.center??0,r),c=Kto(i?.offsetDivs??0),l=`Ch${t+1}`,u=[e.label===l?void 0:e.label,`${s}/div`,c,a].filter((A)=>Boolean(A)),h=u.length>1?(Ahe-dhe-SBe*2-mno)/(u.length-1):0;return Ta("g",{class:"scope-channel",transform:`translate(${oi(n)} ${oi(o)})`,[_pt(e.graph)]:YBe(e.graph)},[Ta("rect",{class:"scope-channel-card",x:"0",y:"0",width:oi(nQ),height:oi(Ahe),rx:"6",ry:"6"}),Ta("rect",{x:"0",y:"0",width:oi(nQ),height:oi(dhe),rx:"6",ry:"6",fill:e.color}),Ta("rect",{x:"0",y:oi(dhe-6),width:oi(nQ),height:"6",fill:e.color}),Ta("text",{class:"scope-channel-header-text",x:oi(nQ/2),y:"14","text-anchor":"middle"},[H5(l)]),...u.map((A,m)=>Ta("text",{class:"scope-channel-detail",x:oi(SBe),y:oi(dhe+SBe+m*h),"dominant-baseline":"hanging"},[H5(A)]))])}function _no(e){let t=Math.ceil(e/2),n=Math.floor(e/2);return{left:lmt(t),right:lmt(n)}}function lmt(e){if(e<=1)return 0;let t=10+(e-1)*NBe+6+Vto+Uto;return Math.max(0,t-$0.left)}function VBe(e){return e.type==="simulation_transient_voltage_graph"||e.type==="simulation_transient_current_graph"||e.type==="simulation_dc_operating_point_voltage"||e.type==="simulation_dc_operating_point_current"||e.type==="simulation_dc_sweep_voltage_graph"||e.type==="simulation_dc_sweep_current_graph"||e.type==="simulation_ac_sweep_voltage_graph"||e.type==="simulation_ac_sweep_current_graph"}function gno(e){return e?.type==="simulation_transient_current_graph"}function fno(e){return e?.type==="simulation_transient_voltage_graph"}function UBe(e){return e?.type==="simulation_experiment"}function Ipt(e){return e?.type==="simulation_voltage_probe"}function bpt(e){return e?.type==="simulation_current_probe"}function Spt(e){return e?.type==="simulation_oscilloscope_trace"}function yno(e,t){let n=Cno(e),o=gpt(e),i=Math.min(n.length,o.length),r=[],s=xno(t);for(let a=0;a<i;a++){let c=Number(n[a]??Number.NaN),l=Number(o[a]??Number.NaN);if(!Number.isFinite(c)||!Number.isFinite(l))continue;r.push({timeMs:c,rawValue:l,displayValue:s(l)})}return r}function xno(e){if(!DJ(e))return(i)=>i;let t=e.center??0,n=e.offsetDivs??0,o=e.valuePerDiv;return(i)=>n+(i-t)/o}function Cno(e){let t=gpt(e);if(Array.isArray(e.timestamps_ms)&&e.timestamps_ms.length===t.length)return e.timestamps_ms.map((r)=>Number(r));let n=t.length;if(n===0)return[];let o=[];for(let r=0;r<n;r++)o.push(e.start_time_ms+e.time_per_step*r);let i=o.length>0?o[o.length-1]:void 0;if(i!==void 0&&Number.isFinite(e.end_time_ms)&&Number.isFinite(i)&&Math.abs(i-e.end_time_ms)>e.time_per_step/2)o.push(e.end_time_ms);return o}function _he(e,t){let n=e[t];if(typeof n!=="string")return;return n}function Ino(e,t,n,o){let i=my(e)?"I":"V";if(n?.displayName)return n.displayName;if(e.simulation_parameter_sweep_coordinate&&e.name)return e.name;if(t?.name)return`${i}(${t.name})`;let r=_he(e,"source_probe_name");if(r)return`${i}(${r})`;if(e.source_component_id){let s=o.get(e.source_component_id);if(s)return`${i}(${s})`}if(e.name)return e.name;if(e.source_component_id)return`Probe ${e.source_component_id}`;return YBe(e)}function bno(e,t,n,o,i,r){if(my(e)){let c=o.get(e.simulation_transient_current_graph_id);if(c)return c;let l=_he(e,"source_probe_id")??(t?.type==="simulation_current_probe"?t.simulation_current_probe_id:void 0);return l?r.get(l):void 0}let s=n.get(e.simulation_transient_voltage_graph_id);if(s)return s;let a=_he(e,"source_probe_id")??(t?.type==="simulation_voltage_probe"?t.simulation_voltage_probe_id:void 0);return a?i.get(a):void 0}function Sno(e,t,n,o,i){let r=_he(e,"source_probe_id");if(r){let s=my(e)?n.get(r):t.get(r);if(s)return s}if(!e.source_component_id)return;return my(e)?i.get(e.source_component_id):o.get(e.source_component_id)}function Pno(e,t){if(!t)return;return{displayName:t.display_name,color:t.color,center:t.display_center_value,offsetDivs:t.display_center_offset_divs,valuePerDiv:my(e)?t.amps_per_div:t.volts_per_div}}function vno(e,t){let n=Array.isArray(fd.simulation_palette)?fd.simulation_palette:Array.isArray(fd.palette)?fd.palette:[],o=t.filter(Ipt),i=t.filter(bpt),r=t.filter(Spt),s=new Map,a=new Map,c=new Map,l=new Map,d=new Map,u=new Map,h=new Map,A=new Map,m=new Map,p=new Map,g=new Map,_=new Map;for(let f of r){if(f.simulation_transient_voltage_graph_id)m.set(f.simulation_transient_voltage_graph_id,f);if(f.simulation_transient_current_graph_id)p.set(f.simulation_transient_current_graph_id,f);if(f.simulation_voltage_probe_id)g.set(f.simulation_voltage_probe_id,f);if(f.simulation_current_probe_id)_.set(f.simulation_current_probe_id,f)}for(let f of o){if(d.set(f.simulation_voltage_probe_id,f),f.name&&f.source_component_id)s.set(f.source_component_id,f.name);if(f.color&&f.source_component_id)a.set(f.source_component_id,f.color);if(f.source_component_id)h.set(f.source_component_id,f)}for(let f of i){if(u.set(f.simulation_current_probe_id,f),f.name&&f.source_component_id)c.set(f.source_component_id,f.name);if(f.color&&f.source_component_id)l.set(f.source_component_id,f.color);if(f.source_component_id)A.set(f.source_component_id,f)}return e.map((f,y)=>{let x=Sno(f,d,u,h,A),C=bno(f,x,m,p,g,_),I=Pno(f,C),b=yno(f,I),P=Eno(n,y),E=Mno(f,x,my(f)?l:a),B=f.color??I?.color??E??P,w=Ino(f,x,I,my(f)?c:s);return{graph:f,points:b,color:B,label:w,scopeTraceDisplay:I,usesScopeTraceDisplay:DJ(I)}}).filter((f)=>f.points.length>0)}function Eno(e,t){if(e.length===0)return rmt;return e[t%e.length]??rmt}function Mno(e,t,n){if(t?.color)return t.color;if(!e.source_component_id)return;return n.get(e.source_component_id)}function Ppt({circuitJson:e,simulation_experiment_id:t,simulation_transient_current_graph_ids:n,simulation_transient_voltage_graph_ids:o,simulation_result_ids:i,ac_sweep_view:r="magnitude",width:s=Gto,height:a=Yto,includeVersion:c}){let l=o?new Set(o):null,d=n?new Set(n):null,u=Boolean(l||d),h=i?new Set(i):null,A=e.find((W)=>UBe(W)&&W.simulation_experiment_id===t),m=e.filter((W)=>VBe(W)&&W.simulation_experiment_id===t&&(!h||h.has(Apt(W)))&&(!u||W.type==="simulation_transient_voltage_graph"&&(l?.has(W.simulation_transient_voltage_graph_id)??!1)||W.type==="simulation_transient_current_graph"&&(d?.has(W.simulation_transient_current_graph_id)??!1))),p=zto({results:m,acSweepView:r,experiment:A}),g=p.graphs;if(g.length===0)throw Error(`No simulation analysis results found for simulation_experiment_id "${t}"`);let _=vno(g,e),f=_.flatMap((W)=>W.points);if(f.length===0)throw Error(`Simulation results for simulation_experiment_id "${t}" do not contain any datapoints`);let y=f.map((W)=>W.timeMs),x;if(p.usesLogarithmicXValues)x=Bno(y);else if(p.xAxisTitle==="Time (ms)")x=$to({values:y,graphs:g,experiment:A});else x=phe(y);let C=phe(f.map((W)=>W.displayValue),!0),I=_.some((W)=>W.usesScopeTraceDisplay),b=I?_no(_.length):{left:0,right:0},P=s+b.left+b.right,E=I?Cpt(_.length,P):null,B=E?a+DBe+E.height+DBe:a,w=Math.max(1,s-$0.left-$0.right),T=Math.max(1,a-$0.top-$0.bottom),Q=$0.left+b.left,N=amt(x.domainMin,x.domainMax,Q,Q+w),F=amt(C.domainMin,C.domainMax,$0.top+T,$0.top),H=Xto(t),z=S7(e),Y=P7,U=ano(A,P),X=[rno(),tno(P,B),nno(H,Q,w,T),ino(Q,w,T),ono({timeAxis:x,valueAxis:C,scaleX:N,scaleY:F,plotLeft:Q,plotWidth:w,plotHeight:T}),sno(_,H,N,F),Jto({timeAxis:x,valueAxis:C,graphs:_,scaleX:N,scaleY:F,plotLeft:Q,plotWidth:w,plotHeight:T,yAxisTitle:p.yAxisTitle??Wto(_),xAxisTitle:p.xAxisTitle,usesScopeTraceDisplay:I}),I?pno(_,P,a):hno(_,P),...U?[U]:[]],V=Ta("svg",{xmlns:"http://www.w3.org/2000/svg",width:P.toString(),height:B.toString(),style:`background-color: ${fd.schematic.background}`,viewBox:`0 0 ${oi(P)} ${oi(B)}`,"data-simulation-experiment-id":t,...A?.name&&{"data-simulation-experiment-name":A.name},...z&&{"data-software-used-string":z},...c&&{"data-circuit-to-svg-version":Y}},X);return b7(V)}function Dno({circuitJson:e,simulation_experiment_id:t,simulation_transient_current_graph_ids:n,simulation_transient_voltage_graph_ids:o,simulation_result_ids:i,ac_sweep_view:r,width:s=wno,height:a=Tno,schematicHeightRatio:c=vpt,schematicOptions:l,includeVersion:d,graphAboveSchematic:u=!1,showErrorsInTextOverlay:h}){let A=e.filter((F)=>!UBe(F)&&!VBe(F)),m=Rno(c),p=Math.max(1,a*m),g=Math.max(1,a-p),_=p+g,f=_===0?1:a/_,y=p*f,x=g*f,C=iQ(A,{...l,width:s,height:y,includeVersion:!1,showErrorsInTextOverlay:h}),I=Ppt({circuitJson:e,simulation_experiment_id:t,simulation_transient_current_graph_ids:n,simulation_transient_voltage_graph_ids:o,simulation_result_ids:i,ac_sweep_view:r,width:s,height:x,includeVersion:!1}),b=BBe(TBe.parseSync(C)),P=BBe(TBe.parseSync(I)),E=Nno(P)??{width:s,height:x},B=E.width>0?s*(E.height/E.width):x,w=y+B,T=[];if(u)T.push(vJ(P,0,0,s,B)),T.push(vJ(b,0,B,s,y));else T.push(vJ(b,0,0,s,y)),T.push(vJ(P,0,y,s,B));let Q=S7(A),N={name:"svg",type:"element",value:"",attributes:{xmlns:"http://www.w3.org/2000/svg",width:J0(s),height:J0(w),viewBox:`0 0 ${J0(s)} ${J0(w)}`,"data-simulation-experiment-id":t,...Q&&{"data-software-used-string":Q},...d&&{"data-circuit-to-svg-version":P7}},children:T};return b7(N)}function Nno(e){let t=e.attributes?.viewBox;if(typeof t!=="string")return null;let n=t.trim().split(/[\s,]+/).map((r)=>Number.parseFloat(r));if(n.length!==4)return null;let o=n.at(2),i=n.at(3);if(!Number.isFinite(o)||!Number.isFinite(i))return null;if(o===void 0||i===void 0)return null;if(o<=0||i<=0)return null;return{width:o,height:i}}function Rno(e){if(!Number.isFinite(e))return vpt;if(e<=0)return 0;if(e>=1)return 1;return e}function Qno(e,t){let{POSITIVE_INFINITY:n,POSITIVE_INFINITY:o,NEGATIVE_INFINITY:i,NEGATIVE_INFINITY:r}=Number,s=e.filter((B)=>B.type==="pcb_board"||B.type==="pcb_panel"||B.type==="pcb_solder_paste"&&B.layer===t.layer);for(let B of s)if(B.type==="pcb_board"){if(B.outline&&Array.isArray(B.outline)&&B.outline.length>=3)E(B.outline);else if("center"in B&&"width"in B&&"height"in B)P(B.center,B.width,B.height)}else if(B.type==="pcb_panel"){let w=B,T=ze.parse(w.width),Q=ze.parse(w.height);if(T!==void 0&&Q!==void 0){let N=w.center??{x:T/2,y:Q/2};P(N,T,Q)}}else if(B.type==="pcb_solder_paste"&&B.shape==="polygon")E(B.points);else if(B.type==="pcb_solder_paste"&&"x"in B&&"y"in B)P({x:B.x,y:B.y},0,0);let a=1,c=i-n+2*a,l=r-o+2*a,d=t.width??800,u=t.height??600,h=d/c,A=u/l,m=Math.min(h,A),p=(d-c*m)/2,g=(u-l*m)/2,_=_o(So(p-n*m+a*m,u-g+o*m-a*m),xc(m,-m)),f={transform:_,layer:t.layer,colorMap:gh},y=s.sort((B,w)=>(dmt.indexOf(w.type)??9999)-(dmt.indexOf(B.type)??9999)).flatMap((B)=>kno({elm:B,ctx:f})),x=S7(e),C=P7,I=[{name:"style",type:"element",children:[{type:"text",value:""}]},{name:"rect",type:"element",attributes:{class:"boundary",x:"0",y:"0",fill:"#000",width:d.toString(),height:u.toString()}},Lno(_,n,o,i,r),...y].filter((B)=>B!==null);if(t?.showErrorsInTextOverlay){let B=pG(e);if(B)I.push(B)}let b={name:"svg",type:"element",attributes:{xmlns:"http://www.w3.org/2000/svg",width:d.toString(),height:u.toString(),...x&&{"data-software-used-string":x},...t.includeVersion&&{"data-circuit-to-svg-version":C}},value:"",children:I};try{return b7(b)}catch(B){throw console.error("Error stringifying SVG object:",B),B}function P(B,w,T){let Q=w/2,N=T/2;n=Math.min(n,B.x-Q),o=Math.min(o,B.y-N),i=Math.max(i,B.x+Q),r=Math.max(r,B.y+N)}function E(B){for(let w of B)n=Math.min(n,w.x),o=Math.min(o,w.y),i=Math.max(i,w.x),r=Math.max(r,w.y)}}function kno({elm:e,ctx:t}){let{transform:n}=t;switch(e.type){case"pcb_board":return kmt(e,t);case"pcb_solder_paste":return Lmt(e,t);default:return[]}}function Lno(e,t,n,o,i){let[r,s]=tt(e,[t,n]),[a,c]=tt(e,[o,i]),l=Math.abs(a-r),d=Math.abs(c-s),u=Math.min(r,a),h=Math.min(s,c);return{name:"rect",type:"element",value:"",children:[],attributes:{class:"pcb-boundary",fill:"none",stroke:"#fff","stroke-width":"0.3",x:u.toString(),y:h.toString(),width:l.toString(),height:d.toString()}}}var Emt,eSr,Mmt,GSr,JSr,sPr,APr,JPr,tvr,ppt,TBe,Cvr,rJn,AJ=(e,t)=>({name:"g",type:"element",value:"",attributes:e,children:t}),hy=0.000000001,gh,G5r,Y5r,V5r,U5r,yJn,F5=(e,t,n=[])=>({name:e,type:"element",value:"",attributes:t,children:n}),cBe=(e,t)=>F5("text",t,[{name:"",type:"text",value:e,attributes:{},children:[]}]),$ue,DJn,C0t=100,QJn,rQ="TscircuitAlphabet",I0t="data-tscircuit-alphabet-font",Bmt,Z0,lSr,t$n="rgba(255,255,255,0.5)",n$n="rgba(255,255,255,0.2)",i$n=1.5,r$n=0.6,s$n=0.3,fd,l$n,u$n,h$n,p$n,_$n,Tmt="BEND LINE",f$n,v0t=0.94,Zue=0.045,Dmt,E0t,T$n=0,ehe=1,rG=0.2,M0t=1.4,B0t=0.53,R$n=0,w0t=0.05,ex=4,T0t=8,Nmt=11,dG=1,aG=5,D0t=1.5,Rmt=2,hBe,mBe,PJ,V$n=15,U$n=10,W$n=0.2,X$n=50,eZn=(e,t)=>{let n=To(t).pcb_smtpad.get(e);if(n&&"x"in n&&"y"in n)return{x:n.x,y:n.y};let o=To(t).pcb_plated_hole.get(e);if(o&&"x"in o&&"y"in o)return{x:o.x,y:o.y};return null},tZn=(e,t,n,o)=>{let i=n.getIdsConnectedToNet(t),r=null,s=1/0;for(let a of i){let c=eZn(a,o);if(c){let l=e.x-c.x,d=e.y-c.y,u=Math.sqrt(l*l+d*d);if(u>0&&u<s)s=u,r=c}}return r},OBe="pcb-keepout-pattern",cG=20,rZn=5,pBe="rgba(255, 107, 107, 0.2)",uZn="rgba(255, 255, 255, 0.5)",N0t="pcb-grid-pattern",R0t,_Zn=0.1,xZn,P7,PZn=({circuitJson:e,drawPaddingOutsideBoard:t,baseBounds:n,viewportOptions:o})=>{let i=t?1:0,r=t||!n.hasBoardBounds?n.minX:n.boardMinX,s=t||!n.hasBoardBounds?n.minY:n.boardMinY,a=t||!n.hasBoardBounds?n.maxX:n.boardMaxX,c=t||!n.hasBoardBounds?n.maxY:n.boardMaxY,l=!1,{POSITIVE_INFINITY:d,POSITIVE_INFINITY:u,NEGATIVE_INFINITY:h,NEGATIVE_INFINITY:A}=Number,m=new Map,p=new Map;for(let g of e)if(g.type==="pcb_panel"){let _=g,f=Q0t(_.center,_.width,_.height);if(!f)continue;if(d=Math.min(d,f.minX),u=Math.min(u,f.minY),h=Math.max(h,f.maxX),A=Math.max(A,f.maxY),l=!0,_.pcb_panel_id)m.set(_.pcb_panel_id,f)}else if(g.type==="pcb_board"){let _=g,y=vZn(_.outline)??Q0t(_.center,_.width,_.height);if(y&&_.pcb_board_id)p.set(_.pcb_board_id,y)}if(o?.viewport){let{minX:g,minY:_,maxX:f,maxY:y}=o.viewport;r=g,s=_,a=f,c=y,i=0}else if(o?.viewportTarget?.pcb_panel_id){let g=m.get(o.viewportTarget.pcb_panel_id);if(!g)throw Error(`Viewport target panel '${o.viewportTarget.pcb_panel_id}' not found`);r=g.minX,s=g.minY,a=g.maxX,c=g.maxY,i=0}else if(o?.viewportTarget?.pcb_board_id){let g=p.get(o.viewportTarget.pcb_board_id);if(!g)throw Error(`Viewport target board '${o.viewportTarget.pcb_board_id}' not found`);r=g.minX,s=g.minY,a=g.maxX,c=g.maxY,i=0}else if(l)r=d,s=u,a=h,c=A;return{boundsMinX:r,boundsMinY:s,boundsMaxX:a,boundsMaxY:c,padding:i}},EZn=0.5,MZn=0.42,BZn=0.58,wZn=0.75,F0t="rgb(255, 208, 66)",Fmt="#ff4d4d",RZn=(e)=>({type:"text",value:e,name:"",attributes:{},children:[]}),gBe=({label:e,x:t,y:n,style:o,anchor:i="start"})=>e?[{name:"text",type:"element",value:"",attributes:{x:t.toString(),y:n.toString(),fill:Fmt,"font-family":"monospace","font-size":o.fontSize.toString(),"font-weight":"600","text-anchor":i},children:[RZn(e)]}]:[],QZn=(e)=>({"data-type":"pcb_debug_object","data-pcb-layer":"overlay","data-pcb-debug-object-id":e.pcb_debug_object_id,"data-debug-shape":e.shape}),HZn,nhe,YZn,C7=(e,t)=>t??YZn[e],tx=(e,t,n)=>Math.abs(e.a)*C7(t,n),yBe="rgb(190, 190, 190)",_J="rgb(210, 210, 210)",gJ="rgb(190, 190, 190)",fJ="rgb(210, 210, 210)",O0t,teo="rgb(26, 115, 143)",neo="rgba(0,0,0,0.9)",ieo="rgba(120, 120, 120, 0.6)",reo="rgba(255, 255, 255, 0.9)",xBe="rgb(50, 50, 50)",yJ="rgb(218, 165, 32)",xJ="rgb(40, 40, 40)",CJ="rgb(218, 165, 32)",z0t="rgb(255, 255, 255)",G0t="rgb(0, 0, 0)",deo="rgba(0, 0, 0, 0.6)",ueo="rgb(200, 200, 200)",heo="rgb(0, 0, 0)",Hmt=1.6,peo=0.5238095238095238,Aeo=0.6,Omt=0.1,zmt=0.1,MBe=3,Gmt=0.1,_eo=0.8,geo=({left_labels:e,right_labels:t,transform:n,soup:o,board_bounds:i,svgWidth:r,svgHeight:s,styleScale:a})=>{let c=new Map,l={transform:n,soup:o,board_bounds:i};return Y0t("left",e,{...l,svgHeight:s,styleScale:a},c),Y0t("right",t,{...l,svgHeight:s,styleScale:a},c),c},V0t,U0t,wJ=(e)=>{if(!e)return 0;let t=0;for(let n of e){let o=U0t[n];if(o)t+=o.width;else t+=U0t["?"].width}return t/27},Ymt=0.65,Vmt=0.08,AG=(e)=>{switch(e){case"top":return{x:0,y:-1};case"bottom":return{x:0,y:1};case"left":return{x:1,y:0};case"right":return{x:-1,y:0}}throw Error(`Invalid side: ${e}`)},x7=0.3,uG=0.3,hG=0.06,Umt=0.2,Wmt=(e)=>({"data-circuit-json-type":"schematic_net_label","data-schematic-net-label-id":e.schematic_net_label_id}),Peo,W0t,Meo=(e,t)=>{let n=e<0?e+2*Math.PI:e,o=t<0?t+2*Math.PI:t,i=Math.abs(n-o);if(i>Math.PI)i=2*Math.PI-i;return i},Xmt=({schPorts:e,symbol:t,schComponent:n})=>{let o=e.map((a)=>{let c=a.center.x-n.center.x,l=a.center.y-n.center.y;return{port:a,angle:Math.atan2(l,c)}}),i=t.ports.map((a)=>{let c=a.x-t.center.x,l=a.y-t.center.y;return{port:a,angle:Math.atan2(l,c)}});o.sort((a,c)=>a.angle-c.angle),i.sort((a,c)=>a.angle-c.angle);let r=[],s=new Set;for(let a of o){let c=null;for(let l of i){if(s.has(l.port))continue;let d=Meo(a.angle,l.angle);if(c===null||d<c.angleDiff)c={symbolPort:l.port,angleDiff:d}}if(c&&c.angleDiff<Math.PI/4)r.push({schPort:a.port,symbolPort:c.symbolPort}),s.add(c.symbolPort)}return r},qmt=(e,t)=>{if(e.column_widths&&e.column_widths.length>0&&e.row_heights&&e.row_heights.length>0){let d=(u)=>{if(typeof u==="number")return u;if(u.endsWith("mm"))return parseFloat(u);if(u.endsWith("in"))return parseFloat(u)*25.4;return parseFloat(u)};return{column_widths:e.column_widths.map(d),row_heights:e.row_heights.map(d)}}let n=t.filter((d)=>d.type==="schematic_table_cell"&&d.schematic_table_id===e.schematic_table_id);if(n.length===0)return{column_widths:[],row_heights:[]};let o=n.reduce((d,u)=>Math.max(d,u.end_column_index),-1)+1,i=n.reduce((d,u)=>Math.max(d,u.end_row_index),-1)+1,{cell_padding:r=0.2}=e,s=Array(o).fill(0),a=Array(i).fill(0),c={},l={};for(let d of n){let u=C7("reference_designator",d.font_size),A=wJ(d.text??"")*u+2*r,m=u*1.2+2*r,p=`${d.start_row_index}-${d.start_column_index}`;c[p]=A,l[p]=m}for(let d=0;d<i;d++)for(let u=0;u<o;u++){let h=`${d}-${u}`;if(c[h]&&c[h]>s[u])s[u]=c[h];if(l[h]&&l[h]>a[d])a[d]=l[h]}for(let d of n){if(d.start_column_index===d.end_column_index&&d.start_row_index===d.end_row_index)continue;let u=`${d.start_row_index}-${d.start_column_index}`,h=c[u],A=l[u];if(h===void 0||A===void 0)continue;let m=0;for(let g=d.start_column_index;g<=d.end_column_index;g++)m+=s[g];if(h>m){let _=(h-m)/(d.end_column_index-d.start_column_index+1);for(let f=d.start_column_index;f<=d.end_column_index;f++)s[f]+=_}let p=0;for(let g=d.start_row_index;g<=d.end_row_index;g++)p+=a[g];if(A>p){let _=(A-p)/(d.end_row_index-d.start_row_index+1);for(let f=d.start_row_index;f<=d.end_row_index;f++)a[f]+=_}}return{column_widths:s,row_heights:a}},Neo=10.16,Reo=1.1,I7,Qeo,keo,kPr,ohe,TJ="image/svg+xml",Rm=(e)=>Math.abs(e.a)*0.02,wBe=({text:e,realCenter:t,realToScreenTransform:n})=>{let o=tt(n,t);return{type:"element",name:"text",value:"",attributes:{x:o.x.toString(),y:o.y.toString(),fill:"red","text-anchor":"middle","dominant-baseline":"middle","font-family":"sans-serif","font-size":`${tx(n,"error")}px`},children:[{type:"text",value:e,name:"",attributes:{},children:[]}]}},Oeo=({schNetLabel:e,realToScreenTransform:t,colorMap:n})=>{if(!e.text)return[];let o=e.text.startsWith("N_"),i=o?e.text.slice(2):e.text,r=Wmt(e),s=[],a=ra[e.symbol_name];if(!a){let H=wBe({text:`Symbol not found: ${e.symbol_name}`,realCenter:e.center,realToScreenTransform:t});return H.attributes={...H.attributes,...r},s.push(H),s}let c=a.primitives.filter((H)=>H.type==="path"),l=a.primitives.filter((H)=>H.type==="text"),d=a.primitives.filter((H)=>H.type==="circle"),u=a.primitives.filter((H)=>H.type==="box"),h={minX:Math.min(...c.flatMap((H)=>H.points.map((z)=>z.x))),maxX:Math.max(...c.flatMap((H)=>H.points.map((z)=>z.x))),minY:Math.min(...c.flatMap((H)=>H.points.map((z)=>z.y))),maxY:Math.max(...c.flatMap((H)=>H.points.map((z)=>z.y)))},A=C7("net_label"),p=mhe({...e,text:i})+x7*2+hG*i.length+uG,g=AG(e.anchor_side),_=e.anchor_position??{x:e.center.x-g.x*p*A/2,y:e.center.y-g.y*p*A/2},y=wa(0/180*Math.PI),x={minX:Math.min(...a.primitives.flatMap((H)=>H.type==="path"?H.points.map((z)=>z.x):[])),maxX:Math.max(...a.primitives.flatMap((H)=>H.type==="path"?H.points.map((z)=>z.x):[])),minY:Math.min(...a.primitives.flatMap((H)=>H.type==="path"?H.points.map((z)=>z.y):[])),maxY:Math.max(...a.primitives.flatMap((H)=>H.type==="path"?H.points.map((z)=>z.y):[]))},C=a.ports?.[0]?{x:a.ports[0].x,y:a.ports[0].y}:{x:x.minX,y:(x.minY+x.maxY)/2},I=tt(y,C),b=_o(So(_.x-I.x,_.y-I.y),y,xc(1)),[P,E]=tt(_o(t,b),[h.minX,h.minY]),[B,w]=tt(_o(t,b),[h.maxX,h.maxY]),T=Math.abs(w-E),Q=Math.min(E,w),N=Math.abs(B-P),F=Math.min(P,B);s.push({name:"rect",type:"element",value:"",attributes:{class:"component-overlay sch-component-overlay sch-net-label-overlay",...r,x:F.toString(),y:Q.toString(),width:N.toString(),height:T.toString(),fill:"transparent"},children:[]});for(let H of c){let z=H.points.map((Y,U)=>{let[X,V]=tt(_o(t,b),[Y.x,Y.y]);return`${U===0?"M":"L"} ${X} ${V}`}).join(" ");s.push({name:"path",type:"element",attributes:{class:"sch-net-label-symbol-path",...r,d:z+(H.closed?" Z":""),stroke:n.schematic.component_outline,fill:"none","stroke-width":`${Rm(t)}px`,"stroke-linecap":"round"},value:"",children:[]})}for(let H of l){let z=tt(_o(t,b),H),Y=H.text;if(Y==="{REF}")Y=i||"";else if(Y==="{VAL}")Y="";let X=Math.abs(t.a)*0.1,V={x:z.x,y:z.y};s.push({name:"text",type:"element",attributes:{class:"sch-net-label-symbol-text",...r,x:V.x.toString(),y:V.y.toString(),fill:n.schematic.label_local,"font-family":"sans-serif","text-anchor":Peo[H.anchor],"dominant-baseline":W0t[H.anchor],"font-size":`${tx(t,"reference_designator")}px`,...o&&Y===i?{style:"text-decoration: overline;"}:{}},children:zBe(Y,H.text==="{REF}"?e.display_superscript:void 0,tx(t,"reference_designator"),W0t[H.anchor]),value:""})}for(let H of u){let z=tt(_o(t,b),H),Y=_o(t,b).a;s.push({name:"rect",type:"element",attributes:{class:"sch-net-label-symbol-box",...r,x:z.x.toString(),y:z.y.toString(),width:(H.width*Y).toString(),height:(H.height*Y).toString(),fill:"red"},value:"",children:[]})}for(let H of d){let z=tt(_o(t,b),H),Y=_o(t,b).a;s.push({name:"circle",type:"element",attributes:{class:"sch-net-label-symbol-circle",...r,cx:z.x.toString(),cy:z.y.toString(),r:(H.radius*Y).toString(),fill:"none",stroke:n.schematic.component_outline,"stroke-width":`${Rm(t)}px`},value:"",children:[]})}return s},zeo=({schNetLabel:e,realToScreenTransform:t,colorMap:n})=>{if(!e.text)return[];let o=e.text;if(e.symbol_name)return Oeo({schNetLabel:e,realToScreenTransform:t,colorMap:n});let i=Wmt(e),r=[],s=tx(t,"net_label"),a=C7("net_label"),c=Umt/a/2,l=mhe({...e,text:o}),d=tt(t,e.center),u=AG(e.anchor_side),h={...u};h.y*=-1;let A=l+x7*2+hG*o.length+uG,m=e.anchor_position?tt(t,e.anchor_position):{x:d.x-h.x*A*s/2,y:d.y-h.y*A*s/2},p=e.anchor_position??{x:e.center.x-u.x*A*a/2,y:e.center.y-u.y*A*a/2},g={left:0,top:-90,bottom:90,right:180}[e.anchor_side],_=[{x:0,y:0},{x:x7,y:c},{x:x7*2+uG+hG*o.length+l,y:c},{x:x7*2+uG+hG*o.length+l,y:-c},{x:x7,y:-c}].map((I)=>tt(_o(t,So(p.x,p.y),xc(a),wa(g/180*Math.PI)),I)),f=`
M ${_[0].x},${_[0].y}
L ${_[1].x},${_[1].y}
L ${_[2].x},${_[2].y}
L ${_[3].x},${_[3].y}
L ${_[4].x},${_[4].y}
Z
`;r.push({name:"path",type:"element",attributes:{class:"net-label sch-net-label",...i,d:f,fill:n.schematic.label_background,stroke:n.schematic.label_global,"stroke-width":`${Rm(t)}px`},value:"",children:[]});let y={x:m.x+h.x*s*0.5,y:m.y+h.y*s*0.5},x={left:"start",top:"start",bottom:"start",right:"end"}[e.anchor_side],C={left:"",right:"",top:`rotate(90 ${y.x} ${y.y})`,bottom:`rotate(-90 ${y.x} ${y.y})`}[e.anchor_side];return r.push({name:"text",type:"element",attributes:{class:"net-label-text sch-net-label-text",...i,x:y.x.toString(),y:y.y.toString(),fill:n.schematic.label_global,"text-anchor":x,"dominant-baseline":"central","font-family":"sans-serif","font-variant-numeric":"tabular-nums","font-size":`${s}px`,transform:C},children:zBe(o,e.display_superscript,s),value:""}),r},Geo=0.02,Yeo=({schPort:e,transform:t})=>{let n=tt(t,e.center),o=Math.abs(t.a)*Geo*2;return[{name:"g",type:"element",value:"",attributes:{class:"schematic-port-hover sch-port-hover","data-schematic-port-id":e.source_port_id,...e.schematic_sheet_id?{"data-schematic-sheet-id":e.schematic_sheet_id}:{}},children:[{name:"circle",type:"element",value:"",attributes:{cx:n.x.toString(),cy:n.y.toString(),r:o.toString(),fill:"red",opacity:"0"},children:[]}]}]},ept=({component:e,transform:t,circuitJson:n})=>{let o=To(n).schematic_port.list({schematic_component_id:e.schematic_component_id}),i=[];for(let r of o)i.push(...Yeo({schPort:r,transform:t}));return i},Veo=({schPort:e,transform:t,colorMap:n})=>{let{x:i,y:r}=e.center,s=[-1,1].map((a)=>{let c=tt(t,{x:i-0.05,y:r-a*0.05}),l=tt(t,{x:i+0.05,y:r+a*0.05});return`M ${c.x} ${c.y} L ${l.x} ${l.y}`}).join(" ");return{name:"path",type:"element",value:"",attributes:{class:"sch-port-no-connect","data-schematic-port-id":e.schematic_port_id,"data-source-port-id":e.source_port_id,d:s,fill:"none",stroke:n.schematic.no_connect,"stroke-width":`${Rm(t)}px`,"stroke-linecap":"round"},children:[]}},K0t=0.02,Ueo=({schPort:e,transform:t,circuitJson:n,colorMap:o})=>{let i=[],r=Math.abs(t.a)*K0t,s=Math.abs(t.a)*K0t,a=tt(t,e.center),c=n.find((d)=>d.type==="source_port"&&d.source_port_id===e.source_port_id);if(!c?.do_not_connect)i.push({name:"circle",type:"element",value:"",attributes:{class:"component-pin sch-component-pin sch-port-indicator",cx:a.x.toString(),cy:a.y.toString(),r:r.toString(),fill:"none",stroke:o.schematic.component_outline,"stroke-width":s.toString(),"data-schematic-port-id":e.schematic_port_id},children:[]});let l=e.display_pin_label??c?.name;if(l){let d={...e.center},u=e.distance_from_component_edge??0,h=0.05,A="middle",m="";switch(e.facing_direction){case"left":d.x+=u/2,d.y+=0.05,A="start";break;case"right":d.x-=u/2,d.y+=0.05,A="end";break;case"up":d.y-=u/2,d.x-=0.05,A="middle";break;case"down":d.y+=u/2,d.x-=0.05,A="middle";break}let p=tt(t,d),g=tx(t,"pin_number");if(e.facing_direction==="up"||e.facing_direction==="down")m=`rotate(-90 ${p.x} ${p.y})`;i.push({name:"text",type:"element",value:"",attributes:{class:"port-indicator-label sch-port-label",x:p.x.toString(),y:p.y.toString(),fill:o.schematic.component_outline,"font-family":"sans-serif","font-size":`${g*0.7}px`,"text-anchor":A,"dominant-baseline":"middle",...m&&{transform:m}},children:[{type:"text",value:l,name:"",attributes:{},children:[]}]})}return i},tpt=(e)=>({type:"element",name:"tspan",value:"",attributes:e.is_overlined?{"text-decoration":"overline"}:{},children:[{type:"text",name:"",value:e.text,attributes:{},children:[]}]}),Weo=(e)=>e.filter((t)=>t.text).map(tpt),Xeo=(e)=>{let t=[[]];for(let n of e)n.text.split(`
`).forEach((o,i)=>{if(i>0)t.push([]);if(o)t.at(-1).push(tpt({...n,text:o}))});return t},GBe=({elm:e,transform:t,colorMap:n})=>{let o=tt(t,e.position),i={center:"middle",center_right:"end",bottom_left:"start",bottom_center:"middle",bottom_right:"end",left:"start",right:"end",top:"middle",bottom:"middle",top_left:"start",top_center:"middle",top_right:"end",center_left:"start"},r={center:"middle",center_right:"middle",bottom_left:"ideographic",bottom_center:"ideographic",bottom_right:"ideographic",left:"middle",right:"middle",top:"hanging",bottom:"ideographic",top_left:"hanging",top_center:"hanging",top_right:"hanging",center_left:"middle"},s=e.text.split(`
`),a=Xeo(e.text_parts??[]),c=s.length===1?e.text_parts?.length?a[0]:[{type:"text",value:e.text,name:e.schematic_text_id,attributes:{},children:[]}]:s.map((l,d)=>({type:"element",name:"tspan",value:"",attributes:{x:o.x.toString(),...d>0?{dy:"1em"}:{}},children:e.text_parts?.length?a[d]??[]:[{type:"text",value:l,name:d===0?e.schematic_text_id:"",attributes:{},children:[]}]}));if(e.display_superscript)(s.length===1?c:c[c.length-1].children).push(...zBe("",e.display_superscript,tx(t,"reference_designator",e.font_size),r[e.anchor]).slice(1));return{type:"element",name:"text",value:"",attributes:{class:"sch-text","data-schematic-text-id":e.schematic_text_id,x:o.x.toString(),y:o.y.toString(),fill:e.color??n.schematic.sheet_label,"text-anchor":i[e.anchor],"dominant-baseline":r[e.anchor],"font-family":"sans-serif","font-size":`${tx(t,"reference_designator",e.font_size)}px`,transform:`rotate(${e.rotation}, ${o.x}, ${o.y})`},children:c}},Keo=({schematicBox:e,transform:t,colorMap:n})=>{let o=tt(t,{x:e.x,y:e.y}),i=tt(t,{x:e.x+e.width,y:e.y+e.height}),r=Math.min(o.y,i.y),s=Math.max(o.y,i.y),a=Math.min(o.x,i.x),c=Math.max(o.x,i.x),l=Rm(t),d={class:"schematic-box sch-box",x:a.toString(),y:r.toString(),width:(c-a).toString(),height:(s-r).toString(),"stroke-width":`${l}px`,stroke:n.schematic.component_outline||"black",fill:"transparent"};if(e.is_dashed){let u=8*l,h=4*l;d["stroke-dasharray"]=`${u} ${h}`}return[{name:"rect",type:"element",value:"",attributes:d,children:[]}]},ipt=(e,t)=>{for(let n of e){if(n.type!=="source_trace")continue;let o=n;if(Array.isArray(o.connected_source_port_ids)&&o.connected_source_port_ids.includes(t))return!0}return!1},jeo,qeo,Jeo=({component:e,transform:t,circuitJson:n,colorMap:o})=>{let i=[],r=ra[e.symbol_name];if(!r)return[wBe({text:`Symbol not found: ${e.symbol_name}`,realCenter:e.center,realToScreenTransform:t})];let s=To(n).schematic_port.list({schematic_component_id:e.schematic_component_id}),a=To(n).source_component.get(e.source_component_id),c=Xmt({schPorts:s,symbol:r,schComponent:e});if(!c[0])return[wBe({text:`Could not match ports for symbol ${e.symbol_name}`,realCenter:e.center,realToScreenTransform:t})];let l=Kmt(c[1]?.symbolPort??r.center,c[1]?.schPort.center??e.center,c[0].symbolPort,c[0].schPort.center),d=r.primitives.filter((P)=>P.type==="path"),u=r.primitives.filter((P)=>P.type==="text"),h=r.primitives.filter((P)=>P.type==="circle"),A=r.primitives.filter((P)=>P.type==="box"),m=new Set;for(let P of c)if(ipt(n,P.schPort.source_port_id)||To(n).source_port.get(P.schPort.source_port_id)?.do_not_connect)m.add(P.symbolPort);let p={minX:Math.min(...d.flatMap((P)=>P.points.map((E)=>E.x))),maxX:Math.max(...d.flatMap((P)=>P.points.map((E)=>E.x))),minY:Math.min(...d.flatMap((P)=>P.points.map((E)=>E.y))),maxY:Math.max(...d.flatMap((P)=>P.points.map((E)=>E.y)))},[g,_]=tt(_o(t,l),[p.minX,p.minY]),[f,y]=tt(_o(t,l),[p.maxX,p.maxY]),x=Math.abs(y-_),C=Math.min(_,y),I=Math.abs(f-g),b=Math.min(g,f);i.push({name:"rect",type:"element",value:"",attributes:{class:"component-overlay sch-component-overlay",x:b.toString(),y:C.toString(),width:I.toString(),height:x.toString(),fill:"transparent"},children:[]});for(let P of d){let{points:E,color:B,closed:w,fill:T}=P;i.push({type:"element",name:"path",attributes:{class:"sch-component-symbol-path",d:E.map((Q,N)=>{let[F,H]=tt(_o(t,l),[Q.x,Q.y]);return`${N===0?"M":"L"} ${F} ${H}`}).join(" ")+(w?" Z":""),stroke:o.schematic.component_outline,fill:"none","stroke-width":`${Rm(t)}px`,"stroke-linecap":"round"},value:"",children:[]})}for(let P of u){let E=tt(_o(t,l),P),B="",w=P.text==="{REF}";if(w)B=a?.display_name??a?.name??"";else if(P.text==="{VAL}")B=e.symbol_display_value??"";let T=qeo[P.anchor];i.push({name:"text",type:"element",attributes:{class:w?"sch-component-name sch-component-text":"sch-component-text",x:E.x.toString(),y:E.y.toString(),...w?{stroke:o.schematic.background,"stroke-width":`${Rm(t)}px`,"paint-order":"stroke"}:{},fill:o.schematic.label_local,"font-family":"sans-serif","text-anchor":jeo[P.anchor],"dominant-baseline":T,"font-size":`${tx(t,"reference_designator")}px`},value:"",children:[{type:"text",value:B,name:"",attributes:{},children:[]}]})}for(let P of A){let E=tt(_o(t,l),P),B=_o(t,l).a;i.push({name:"rect",type:"element",attributes:{class:"sch-component-symbol-box",x:E.x.toString(),y:E.y.toString(),width:(P.width*B).toString(),height:(P.height*B).toString(),fill:"red"},value:"",children:[]})}for(let P of r.ports){if(m.has(P))continue;let E=tt(_o(t,l),P);i.push({type:"element",name:"circle",attributes:{class:"component-pin sch-component-pin",cx:E.x.toString(),cy:E.y.toString(),r:`${Math.abs(t.a)*0.02}px`,"stroke-width":`${Rm(t)}px`,fill:"none",stroke:o.schematic.component_outline},value:"",children:[]})}for(let P of h){let E=tt(_o(t,l),P),B=Math.abs(P.radius*t.a);i.push({type:"element",name:"circle",attributes:{class:"sch-component-symbol-circle",cx:E.x.toString(),cy:E.y.toString(),r:`${B}px`,"stroke-width":`${Rm(t)}px`,fill:"none",stroke:o.schematic.component_outline},value:"",children:[]})}return i},IJ=0.02,j0t=(e,t,n,o,i)=>{let r=Math.PI/6,s={x:e.x-n*Math.cos(t-r),y:e.y-n*Math.sin(t-r)},a={x:e.x-n*Math.cos(t+r),y:e.y-n*Math.sin(t+r)};return{name:"polygon",type:"element",attributes:{points:`${e.x},${e.y} ${s.x},${s.y} ${a.x},${a.y}`,fill:"white",stroke:o,"stroke-width":`${i}px`},value:"",children:[]}},$eo=({schPort:e,schComponent:t,transform:n,circuitJson:o})=>{let i=[],r=To(o).source_port.get(e.source_port_id),s={x:e.center.x,y:e.center.y},a=e.distance_from_component_edge??0.4;switch(e.side_of_component){case"left":s.x+=a;break;case"right":s.x-=a;break;case"top":s.y-=a;break;case"bottom":s.y+=a;break}let c=tt(n,e.center),l=tt(n,s),d=r!=null&&r.source_component_id==null&&typeof e.is_connected==="boolean"?e.is_connected:ipt(o,e.source_port_id),u=e.is_drawn_with_inversion_circle??!1,h=0.06,A={...e.center};if(!d&&!r?.do_not_connect)switch(e.side_of_component){case"left":A.x+=IJ;break;case"right":A.x-=IJ;break;case"top":A.y-=IJ;break;case"bottom":A.y+=IJ;break}let m=tt(n,A);if(u){let y=Math.abs(n.a)*h,x={...l};switch(e.side_of_component){case"left":x.x-=y,l.x-=y*2;break;case"right":x.x+=y,l.x+=y*2;break;case"top":x.y-=y,l.y-=y*2;break;case"bottom":x.y+=y,l.y+=y*2;break}i.push({name:"circle",type:"element",attributes:{class:"component-pin sch-component-pin sch-inversion-bubble",cx:x.x.toString(),cy:x.y.toString(),r:y.toString(),fill:"white",stroke:fd.schematic.component_outline,"stroke-width":`${Rm(n)}px`},value:"",children:[]})}i.push({name:"line",type:"element",attributes:{class:"component-pin sch-component-pin sch-port-line",x1:l.x.toString(),y1:l.y.toString(),x2:m.x.toString(),y2:m.y.toString(),"stroke-width":`${Rm(n)}px`},value:"",children:[]});let p=Math.abs(n.a)*IJ,g=[];if(!d&&!r?.do_not_connect)g.push({name:"circle",type:"element",attributes:{class:"component-pin sch-component-pin sch-port-terminal",cx:c.x.toString(),cy:c.y.toString(),r:p.toString(),"stroke-width":`${Rm(n)}px`},value:"",children:[]});g.push({name:"rect",type:"element",attributes:{x:(c.x-p).toString(),y:(c.y-p).toString(),width:(p*2).toString(),height:(p*2).toString(),opacity:"0"},value:"",children:[]}),i.push({name:"g",type:"element",value:"",attributes:{class:"sch-port","data-schematic-port-id":e.source_port_id},children:g});let{has_input_arrow:_,has_output_arrow:f}=e;if((_||f)&&e.side_of_component){let y=Math.abs(n.a)*0.1,x=fd.schematic.component_outline,C=y*Math.cos(Math.PI/6),I=Rm(n)/3,b=0,P=0;if(e.side_of_component==="left")b=0,P=Math.PI;else if(e.side_of_component==="right")b=Math.PI,P=0;else if(e.side_of_component==="top")b=Math.PI/2,P=-Math.PI/2;else if(e.side_of_component==="bottom")b=-Math.PI/2,P=Math.PI/2;let E=_&&f,B={...l},w={...l};if(E){let T=C;if(e.side_of_component==="left")w.x-=T;else if(e.side_of_component==="right")w.x+=T;else if(e.side_of_component==="top")w.y-=T;else if(e.side_of_component==="bottom")w.y+=T}if(_)i.push(j0t(B,b,y,x,I));if(f){let T={x:w.x+y*Math.cos(P),y:w.y+y*Math.sin(P)};i.push(j0t(T,P,y,x,I))}}return i},Zeo=(e)=>{let t=[],{schPort:n,schComponent:o,transform:i,circuitJson:r}=e,s={x:n.center.x,y:n.center.y};if(!n.side_of_component)return[];let a=AG(n.side_of_component),c=n.distance_from_component_edge??0.4;if(s.x+=a.x*c/2,s.y+=a.y*c/2,n.side_of_component==="top"||n.side_of_component==="bottom")s.x-=0.02;else s.y+=0.02;let l=tt(i,s);return t.push({name:"text",type:"element",attributes:{class:"pin-number sch-pin-number",x:l.x.toString(),y:l.y.toString(),style:"font-family: sans-serif;",fill:fd.schematic.pin_number,"text-anchor":"middle","dominant-baseline":"auto","font-size":`${tx(i,"pin_number")}px`,transform:n.side_of_component==="top"||n.side_of_component==="bottom"?`rotate(-90 ${l.x} ${l.y})`:""},children:[{type:"text",value:n.pin_number?.toString()||"",name:"",attributes:{},children:[]}],value:""}),t},q0t=0.1,rpt=(e)=>{let t=[],{schPort:n,schComponent:o,transform:i,labelColor:r=fd.schematic.pin_number,labelClassName:s="pin-number sch-pin-label"}=e,a={x:n.center.x,y:n.center.y};if(!n.side_of_component)return[];let c=AG(n.side_of_component),l=n.distance_from_component_edge??0.4;a.x+=c.x*(l+q0t),a.y+=c.y*(l+q0t);let d=tt(i,a),u=n.display_pin_label??o.port_labels?.[`${n.pin_number}`];if(!u)return[];let h=u.startsWith("N_"),A=h?u.slice(2):u,m=n.display_pin_label_text_parts,p=n.is_drawn_with_inversion_circle??!1,g=tx(i,h||p?"negated_pin_number":"pin_number",n.display_pin_label_font_size);return t.push({name:"text",type:"element",attributes:{class:s,x:d.x.toString(),y:d.y.toString(),style:`font-family: sans-serif;${h&&!m?.length?" text-decoration: overline;":""}`,fill:r,"text-anchor":n.side_of_component==="left"||n.side_of_component==="bottom"?"start":"end","dominant-baseline":"middle","font-size":`${g}px`,transform:n.side_of_component==="top"||n.side_of_component==="bottom"?`rotate(-90 ${d.x} ${d.y})`:""},children:m?.length?Weo(m):[{type:"text",value:A||"",name:"",attributes:{},children:[]}],value:""}),t},eto=(e)=>{let t=[],{schPort:n,schComponent:o,transform:i,circuitJson:r}=e;return t.push(...$eo(e)),t.push(...Zeo(e)),t.push(...rpt(e)),t},tto=({component:e,transform:t,circuitJson:n,colorMap:o})=>{let i=[],r=tt(t,{x:e.center.x-e.size.width/2,y:e.center.y+e.size.height/2}),s=tt(t,{x:e.center.x+e.size.width/2,y:e.center.y-e.size.height/2}),a=s.x-r.x,c=s.y-r.y;i.push({name:"rect",type:"element",value:"",attributes:{class:"component chip sch-component-body",x:r.x.toString(),y:r.y.toString(),width:a.toString(),height:c.toString(),"stroke-width":`${Rm(t)}px`,fill:o.schematic.component_body,stroke:o.schematic.component_outline},children:[]}),i.push({name:"rect",type:"element",value:"",attributes:{class:"component-overlay sch-component-overlay",x:r.x.toString(),y:r.y.toString(),width:a.toString(),height:c.toString(),fill:"transparent"},children:[]});let l=To(n).schematic_text.list();for(let u of l)if(u.schematic_component_id===e.schematic_component_id)i.push(GBe({elm:u,transform:t,colorMap:o}));let d=To(n).schematic_port.list({schematic_component_id:e.schematic_component_id});for(let u of d)i.push(...eto({schPort:u,schComponent:e,transform:t,circuitJson:n}));return i},nto=({component:e,transform:t,circuitJson:n,colorMap:o})=>{let i=[],r=e.schematic_component_id,s=n.filter((a)=>("schematic_component_id"in a)&&a.schematic_component_id===r).sort((a,c)=>J0t(a)-J0t(c));for(let a of s)if(a.type==="schematic_text"&&e.is_box_with_pins===!1)i.push(GBe({elm:a,transform:t,colorMap:o}));else if(a.type==="schematic_line")i.push(...apt({schLine:a,transform:t,colorMap:o}));else if(a.type==="schematic_circle")i.push(...opt({schCircle:a,transform:t,colorMap:o}));else if(a.type==="schematic_rect")i.push(...cpt({schRect:a,transform:t,colorMap:o}));else if(a.type==="schematic_arc")i.push(...npt({schArc:a,transform:t,colorMap:o}));else if(a.type==="schematic_path")i.push(...lpt({schPath:a,transform:t,colorMap:o}));if(e.is_box_with_pins===!1){let a=n.filter((l)=>l.type==="schematic_line"&&l.schematic_component_id===r),c=n.filter((l)=>l.type==="schematic_port"&&l.schematic_component_id===r);for(let l of c){let d=a.find((g)=>g.x1===l.center.x&&g.y1===l.center.y||g.x2===l.center.x&&g.y2===l.center.y);if(!d)continue;let u=d.x1===l.center.x&&d.y1===l.center.y?{x:d.x2,y:d.y2}:{x:d.x1,y:d.y1},h=u.x-l.center.x,A=u.y-l.center.y,m=Math.abs(h)>Math.abs(A)?h>0?"left":"right":A>0?"bottom":"top",p=Math.max(Math.abs(h),Math.abs(A));i.push(...rpt({schPort:{...l,side_of_component:m,distance_from_component_edge:p},schComponent:e,transform:t,circuitJson:n,labelClassName:"port-label sch-pin-label",labelColor:o.schematic.pin_name}))}}return i},dpt,rto,ihe,bJ,ato=({schematicTable:e,transform:t,colorMap:n,circuitJson:o})=>{let{anchor_position:i,border_width:r=0.05,anchor:s="center"}=e,{column_widths:a,row_heights:c}=qmt(e,o),l=a.reduce((b,P)=>b+P,0),d=c.reduce((b,P)=>b+P,0),{x:u,y:h}=i;if(s.includes("center"))u-=l/2;else if(s.includes("right"))u-=l;if(s.includes("center"))h+=d/2;else if(s.includes("bottom"))h+=d;let A=[],m=r*Math.abs(t.a),p=Rm(t),[g,_]=tt(t,[u,h]),[f,y]=tt(t,[u+l,h-d]);A.push({name:"rect",type:"element",attributes:{class:"sch-table-border",x:g.toString(),y:_.toString(),width:(f-g).toString(),height:(y-_).toString(),fill:"none",stroke:n.schematic.table,"stroke-width":m.toString()},children:[],value:""});let x=o.filter((b)=>b.type==="schematic_table_cell"&&b.schematic_table_id===e.schematic_table_id),C=u;for(let b=0;b<a.length-1;b++){C+=a[b];let P=h;for(let E=0;E<c.length;E++){let B=P-c[E];if(!x.some((T)=>T.start_column_index<=b&&T.end_column_index>b&&T.start_row_index<=E&&T.end_row_index>=E)){let T=tt(t,{x:C,y:P}),Q=tt(t,{x:C,y:B});A.push({name:"line",type:"element",attributes:{class:"sch-table-grid-line",x1:T.x.toString(),y1:T.y.toString(),x2:Q.x.toString(),y2:Q.y.toString(),stroke:n.schematic.table,"stroke-width":p.toString()},children:[],value:""})}P=B}}let I=h;for(let b=0;b<c.length-1;b++){I-=c[b];let P=u;for(let E=0;E<a.length;E++){let B=P+a[E];if(!x.some((T)=>T.start_row_index<=b&&T.end_row_index>b&&T.start_column_index<=E&&T.end_column_index>=E)){let T=tt(t,{x:P,y:I}),Q=tt(t,{x:B,y:I});A.push({name:"line",type:"element",attributes:{class:"sch-table-grid-line",x1:T.x.toString(),y1:T.y.toString(),x2:Q.x.toString(),y2:Q.y.toString(),stroke:n.schematic.table,"stroke-width":p.toString()},children:[],value:""})}P=B}}for(let b of x)if(b.text){let P=a.slice(b.start_column_index,b.end_column_index+1).reduce((X,V)=>X+V,0),E=c.slice(b.start_row_index,b.end_row_index+1).reduce((X,V)=>X+V,0),B=u+a.slice(0,b.start_column_index).reduce((X,V)=>X+V,0),w=h-c.slice(0,b.start_row_index).reduce((X,V)=>X+V,0),{cell_padding:T=0.2}=e,Q=b.horizontal_align??"center",N=b.vertical_align??"middle",F={x:B+P/2,y:w-E/2};if(Q==="left")F.x=B+T;else if(Q==="right")F.x=B+P-T;if(N==="top")F.y=w-T;else if(N==="bottom")F.y=w-E+T;let H=tt(t,F),z=tx(t,"reference_designator",b.font_size),Y={left:"start",center:"middle",right:"end"},U={top:"hanging",middle:"middle",bottom:"ideographic"};A.push({name:"text",type:"element",attributes:{class:"sch-table-text",x:H.x.toString(),y:H.y.toString(),"font-size":`${z}px`,"text-anchor":Y[Q],"dominant-baseline":U[N],fill:n.schematic.table,"font-family":"sans-serif"},children:[{type:"text",value:b.text,name:"",attributes:{},children:[]}],value:""})}return[{name:"g",type:"element",attributes:{class:"sch-table","data-schematic-table-id":e.schematic_table_id},children:A,value:""}]},EJ=6,ahe=12,D_=12,IBe=6,dto=14,Z0t=11,emt=280,uto=140,bBe=6,_to=14,tmt=11,mpt=(e)=>e.type==="schematic_component_overlap_warning"||e.type==="schematic_component_styling_warning"||e.type==="schematic_sheet_styling_warning"||e.type==="schematic_element_outside_sheet_warning"||e.type==="schematic_manual_edit_conflict_warning",Mto,Tto=1000,Dto=28,Nto=16,imt=({simulationResult:e,fallbackName:t})=>{let n=e.name??t,o=e.simulation_parameter_sweep_coordinate;if(!o)return n;return`${n} (${o.parameter_value}${o.parameter_unit})`},kto=(e)=>{let t=e[0]??0,n=e[1];return{timestamps_ms:e,start_time_ms:t,end_time_ms:e.at(-1)??0,time_per_step:n===void 0?1:Math.abs(n-t)}},Lto=(e)=>e.type==="simulation_transient_voltage_graph"?e.simulation_transient_voltage_graph_id:e.simulation_transient_current_graph_id,Apt=(e)=>{switch(e.type){case"simulation_transient_voltage_graph":return e.simulation_transient_voltage_graph_id;case"simulation_transient_current_graph":return e.simulation_transient_current_graph_id;case"simulation_dc_operating_point_voltage":return e.simulation_dc_operating_point_voltage_id;case"simulation_dc_operating_point_current":return e.simulation_dc_operating_point_current_id;case"simulation_dc_sweep_voltage_graph":return e.simulation_dc_sweep_voltage_graph_id;case"simulation_dc_sweep_current_graph":return e.simulation_dc_sweep_current_graph_id;case"simulation_ac_sweep_voltage_graph":return e.simulation_ac_sweep_voltage_graph_id;case"simulation_ac_sweep_current_graph":return e.simulation_ac_sweep_current_graph_id}},Fto=({simulationResult:e,acSweepView:t,usesLogarithmicXValues:n})=>{switch(e.type){case"simulation_dc_operating_point_voltage":return{horizontalCoordinates:[0],measuredLevels:[e.voltage],isCurrent:!1};case"simulation_dc_operating_point_current":return{horizontalCoordinates:[0],measuredLevels:[e.current],isCurrent:!0};case"simulation_dc_sweep_voltage_graph":return{horizontalCoordinates:e.sweep_values,measuredLevels:e.voltage_levels,isCurrent:!1};case"simulation_dc_sweep_current_graph":return{horizontalCoordinates:e.sweep_values,measuredLevels:e.current_levels,isCurrent:!0};case"simulation_ac_sweep_voltage_graph":return{horizontalCoordinates:n?e.frequencies_hz.map(Math.log10):e.frequencies_hz,measuredLevels:e.complex_voltages.map((o)=>t==="phase"?Math.atan2(o.im,o.re)*180/Math.PI:Math.hypot(o.re,o.im)),isCurrent:!1};case"simulation_ac_sweep_current_graph":return{horizontalCoordinates:n?e.frequencies_hz.map(Math.log10):e.frequencies_hz,measuredLevels:e.complex_currents.map((o)=>t==="phase"?Math.atan2(o.im,o.re)*180/Math.PI:Math.hypot(o.re,o.im)),isCurrent:!0}}},Hto=({simulationResult:e,acSweepView:t,usesLogarithmicXValues:n})=>{if(e.type==="simulation_transient_voltage_graph"||e.type==="simulation_transient_current_graph"){if(!e.simulation_parameter_sweep_coordinate)return e;return{...e,name:imt({simulationResult:e,fallbackName:e.name??Lto(e)})}}let o=Apt(e),{horizontalCoordinates:i,measuredLevels:r,isCurrent:s}=Fto({simulationResult:e,acSweepView:t,usesLogarithmicXValues:n}),a={simulation_experiment_id:e.simulation_experiment_id,simulation_parameter_sweep_coordinate:e.simulation_parameter_sweep_coordinate,name:imt({simulationResult:e,fallbackName:o}),color:e.color,...kto(i)};if(s)return{type:"simulation_transient_current_graph",simulation_transient_current_graph_id:o,current_levels:r,...a};return{type:"simulation_transient_voltage_graph",simulation_transient_voltage_graph_id:o,voltage_levels:r,...a}},Oto=({simulationResultType:e,experiment:t})=>{if(e?.startsWith("simulation_ac_sweep_"))return"Frequency (Hz)";if(e?.startsWith("simulation_dc_sweep_"))return t?.dc_sweep_unit?`DC Sweep (${t.dc_sweep_unit})`:"DC Sweep";if(e?.startsWith("simulation_dc_operating_point_"))return"Operating Point";return"Time (ms)"},zto=({results:e,acSweepView:t,experiment:n})=>{let o=e[0]?.type,i=o?.startsWith("simulation_ac_sweep_")??!1,r=i&&n?.ac_sweep_type!=="linear";return{graphs:e.map((a)=>Hto({simulationResult:a,acSweepView:t,usesLogarithmicXValues:r})),xAxisTitle:Oto({simulationResultType:o,experiment:n}),yAxisTitle:i&&t==="phase"?"Phase (deg)":void 0,usesLogarithmicXValues:r}},Gto=1200,Yto=600,$0,DBe=24,NBe=56,Vto=56,Uto=8,rmt="#1f77b4",xpt=16,lno=15,uno=24,nQ=118,Ahe=94,lG=18,dhe=20,SBe=8,mno=14,Bno=(e)=>{let t=phe(e);return{...t,tickLabelOverrides:new Map(t.ticks.map((n)=>[n,oi(10**n)]))}},wno=1200,Tno=1200,vpt=0.55,dmt;var WBe=Ks(()=>{Gt();pn();Gt();pn();Gt();Gt();tEe();pn();pn();pn();pn();pn();Gt();pn();pn();pn();pn();pn();pn();tEe();pn();pn();pn();pn();pn();pn();pn();pn();pn();pn();Pz();pn();pn();pn();pn();Pz();Pz();pn();pn();Gt();pn();pn();pn();pn();pn();pn();pn();pn();pn();pn();pn();pn();qa();pn();Yo();qa();Yo();pn();pn();pn();pn();pn();pn();Gt();Gt();pn();pn();pn();Gt();Yo();pn();pn();pn();pn();pn();pn();pn();pn();pn();Yo();Yo();pn();pn();pn();pn();pn();mle();pn();Yo();pn();pn();pn();pn();wp();pn();wp();pn();pn();pn();wp();pn();Yo();pn();pn();pn();pn();pn();pn();pn();Yo();wp();pn();Yo();wp();pn();pn();Yo();pn();Yo();pn();pn();pn();pn();pn();pn();pn();pn();pn();pn();pn();pn();pn();Gt();pn();Emt=Rt(J2(),1),eSr=Rt(J2(),1),Mmt=Rt(l0(),1),GSr=Rt(J2(),1),JSr=Rt(J2(),1),sPr=Rt(J2(),1),APr=Rt(J2(),1),JPr=Rt(J2(),1),tvr=Rt(J2(),1),ppt=Rt(J2(),1),TBe=Rt(J2(),1),Cvr=Rt(J2(),1),rJn=new Set(["pcb_trace","pcb_smtpad","pcb_via","pcb_plated_hole","pcb_copper_pour","pcb_copper_text"]);gh={copper:{top:"rgb(200, 52, 52)",inner1:"rgb(255, 140, 0)",inner2:"rgb(255, 215, 0)",inner3:"rgb(50, 205, 50)",inner4:"rgb(64, 224, 208)",inner5:"rgb(138, 43, 226)",inner6:"rgb(255, 105, 180)",inner7:"rgb(0, 191, 255)",inner8:"rgb(160, 82, 45)",bottom:"rgb(77, 127, 196)"},soldermaskWithCopperUnderneath:{top:"rgb(18, 82, 50)",bottom:"rgb(18, 82, 50)"},soldermask:{top:"rgb(12, 55, 33)",bottom:"rgb(12, 55, 33)"},soldermaskOverCopper:{top:"rgb(52, 135, 73)",bottom:"rgb(52, 135, 73)"},substrate:"rgb(201, 162, 110)",drill:"#FF26E2",silkscreen:{top:"#f2eda1",bottom:"#5da9e9"},boardOutline:"rgba(255, 255, 255, 0.5)",courtyard:{top:"#FF00FF",bottom:"rgb(38, 233, 255)"},keepout:"#FF6B6B",debugComponent:{fill:null,stroke:null}},G5r=gh.drill,Y5r=gh.silkscreen.top,V5r=gh.silkscreen.bottom,U5r={...gh.copper};yJn={bottom:"rgb(105, 105, 105)",top:"rgb(105, 105, 105)"};$ue=[[30,60,130],[20,170,190],[90,200,140],[245,210,65],[220,65,45]];DJn={pcb_background:0,pcb_boundary:1,pcb_panel:5,pcb_board:10,pcb_cutout:15,pcb_cutout_path:15,pcb_keepout:16,pcb_hole:18,pcb_plated_hole_drill:19,pcb_plated_hole:20,pcb_trace_soldermask:25,pcb_trace:30,pcb_smtpad:30,pcb_copper_pour:35,pcb_via:36,pcb_soldermask:40,pcb_soldermask_opening:25,pcb_soldermask_opening_layer:44,pcb_solder_paste:45,pcb_silkscreen_text:50,pcb_silkscreen_path:50,pcb_silkscreen_graphic:50,pcb_silkscreen_rect:50,pcb_silkscreen_circle:50,pcb_silkscreen_line:50,pcb_silkscreen_oval:50,pcb_silkscreen_pill:50,pcb_component:60,pcb_pad_pin_number:65,pcb_fabrication_note_text:70,pcb_fabrication_note_path:70,pcb_fabrication_note_rect:70,pcb_fabrication_note_dimension:70,pcb_note_dimension:70,pcb_note_text:70,pcb_note_rect:70,pcb_note_path:70,pcb_note_line:70,pcb_bend:70,pcb_trace_error:80,pcb_footprint_overlap_error:80,pcb_component_outside_board_error:80,pcb_pad_trace_clearance_error:80,pcb_via_trace_clearance_error:80,pcb_connector_not_in_accessible_orientation_warning:80,pcb_manual_edit_conflict_warning:80,pcb_rats_nest:85,pcb_debug_object:90};QJn=new Set(["pcb_trace","pcb_copper_pour","pcb_smtpad","pcb_plated_hole","pcb_via","pcb_copper_text"]);Bmt=Mmt.default("circuit-to-svg"),Z0=Bmt.extend("pcb"),lSr=Bmt.extend("sch");fd={"3d_viewer":{background_bottom:"rgb(102, 102, 128)",background_top:"rgb(204, 204, 230)",board:"rgb(51, 43, 23)",copper:"rgb(179, 156, 0)",silkscreen_bottom:"rgb(230, 230, 230)",silkscreen_top:"rgb(230, 230, 230)",soldermask:"rgb(20, 51, 36)",solderpaste:"rgb(128, 128, 128)"},board:{anchor:"rgb(255, 38, 226)",aux_items:"rgb(255, 255, 255)",b_adhes:"rgb(0, 0, 132)",b_crtyd:"rgb(255, 38, 226)",b_fab:"rgb(88, 93, 132)",b_mask:"rgba(2, 255, 238, 0.400)",b_paste:"rgb(0, 194, 194)",b_silks:"rgb(232, 178, 167)",background:"rgb(0, 16, 35)",cmts_user:"rgb(89, 148, 220)",copper:{b:"rgb(77, 127, 196)",f:"rgb(200, 52, 52)",in1:"rgb(127, 200, 127)",in10:"rgb(237, 124, 51)",in11:"rgb(91, 195, 235)",in12:"rgb(247, 111, 142)",in13:"rgb(167, 165, 198)",in14:"rgb(40, 204, 217)",in15:"rgb(232, 178, 167)",in16:"rgb(242, 237, 161)",in17:"rgb(237, 124, 51)",in18:"rgb(91, 195, 235)",in19:"rgb(247, 111, 142)",in2:"rgb(206, 125, 44)",in20:"rgb(167, 165, 198)",in21:"rgb(40, 204, 217)",in22:"rgb(232, 178, 167)",in23:"rgb(242, 237, 161)",in24:"rgb(237, 124, 51)",in25:"rgb(91, 195, 235)",in26:"rgb(247, 111, 142)",in27:"rgb(167, 165, 198)",in28:"rgb(40, 204, 217)",in29:"rgb(232, 178, 167)",in3:"rgb(79, 203, 203)",in30:"rgb(242, 237, 161)",in4:"rgb(219, 98, 139)",in5:"rgb(167, 165, 198)",in6:"rgb(40, 204, 217)",in7:"rgb(232, 178, 167)",in8:"rgb(242, 237, 161)",in9:"rgb(141, 203, 129)"},cursor:"rgb(255, 255, 255)",drc:"rgb(194, 194, 194)",drc_error:"rgba(215, 91, 107, 0.800)",drc_exclusion:"rgb(255, 255, 255)",drc_warning:"rgba(255, 208, 66, 0.902)",dwgs_user:"rgb(194, 194, 194)",eco1_user:"rgb(180, 219, 210)",eco2_user:"rgb(216, 200, 82)",edge_cuts:"rgb(208, 210, 205)",f_adhes:"rgb(132, 0, 132)",f_crtyd:"rgb(255, 0, 245)",f_fab:"rgb(175, 175, 175)",f_mask:"rgba(216, 100, 255, 0.400)",f_paste:"rgba(180, 160, 154, 0.902)",f_silks:"rgb(242, 237, 161)",footprint_text_back:"rgb(0, 0, 132)",footprint_text_front:"rgb(194, 194, 194)",footprint_text_invisible:"rgb(132, 132, 132)",grid:"rgb(132, 132, 132)",grid_axes:"rgb(194, 194, 194)",margin:"rgb(255, 38, 226)",microvia:"rgb(0, 132, 132)",no_connect:"rgb(0, 0, 132)",pad_back:"rgb(77, 127, 196)",pad_front:"rgb(200, 52, 52)",pad_plated_hole:"rgb(194, 194, 0)",pad_through_hole:"rgb(227, 183, 46)",plated_hole:"rgb(26, 196, 210)",ratsnest:"rgba(245, 255, 213, 0.702)",select_overlay:"rgb(4, 255, 67)",through_via:"rgb(236, 236, 236)",user_1:"rgb(194, 194, 194)",user_2:"rgb(89, 148, 220)",user_3:"rgb(180, 219, 210)",user_4:"rgb(216, 200, 82)",user_5:"rgb(194, 194, 194)",user_6:"rgb(89, 148, 220)",user_7:"rgb(180, 219, 210)",user_8:"rgb(216, 200, 82)",user_9:"rgb(232, 178, 167)",via_blind_buried:"rgb(187, 151, 38)",via_hole:"rgb(227, 183, 46)",via_micro:"rgb(0, 132, 132)",via_through:"rgb(236, 236, 236)",worksheet:"rgb(200, 114, 171)"},gerbview:{axes:"rgb(0, 0, 132)",background:"rgb(0, 0, 0)",dcodes:"rgb(255, 255, 255)",grid:"rgb(132, 132, 132)",layers:["rgb(132, 0, 0)","rgb(194, 194, 0)","rgb(194, 0, 194)","rgb(194, 0, 0)","rgb(0, 132, 132)","rgb(0, 132, 0)","rgb(0, 0, 132)","rgb(132, 132, 132)","rgb(132, 0, 132)","rgb(194, 194, 194)","rgb(132, 0, 132)","rgb(132, 0, 0)","rgb(132, 132, 0)","rgb(194, 194, 194)","rgb(0, 0, 132)","rgb(0, 132, 0)","rgb(132, 0, 0)","rgb(194, 194, 0)","rgb(194, 0, 194)","rgb(194, 0, 0)","rgb(0, 132, 132)","rgb(0, 132, 0)","rgb(0, 0, 132)","rgb(132, 132, 132)","rgb(132, 0, 132)","rgb(194, 194, 194)","rgb(132, 0, 132)","rgb(132, 0, 0)","rgb(132, 132, 0)","rgb(194, 194, 194)","rgb(0, 0, 132)","rgb(0, 132, 0)","rgb(132, 0, 0)","rgb(194, 194, 0)","rgb(194, 0, 194)","rgb(194, 0, 0)","rgb(0, 132, 132)","rgb(0, 132, 0)","rgb(0, 0, 132)","rgb(132, 132, 132)","rgb(132, 0, 132)","rgb(194, 194, 194)","rgb(132, 0, 132)","rgb(132, 0, 0)","rgb(132, 132, 0)","rgb(194, 194, 194)","rgb(0, 0, 132)","rgb(0, 132, 0)","rgb(132, 0, 0)","rgb(194, 194, 0)","rgb(194, 0, 194)","rgb(194, 0, 0)","rgb(0, 132, 132)","rgb(0, 132, 0)","rgb(0, 0, 132)","rgb(132, 132, 132)","rgb(132, 0, 132)","rgb(194, 194, 194)","rgb(132, 0, 132)","rgb(132, 0, 0)"],negative_objects:"rgb(132, 132, 132)",worksheet:"rgb(0, 0, 132)"},meta:{filename:"kicad_2020",name:"KiCad 2020",version:2},simulation_palette:["#1f77b4","#d62728","#2ca02c","#ff7f0e","#9467bd","#17becf","#8c564b","#e377c2","#7f7f7f","#bcbd22"],palette:["rgb(132, 0, 0)","rgb(194, 194, 0)","rgb(194, 0, 194)","rgb(194, 0, 0)","rgb(0, 132, 132)","rgb(0, 132, 0)","rgb(0, 0, 132)","rgb(132, 132, 132)","rgb(132, 0, 132)","rgb(194, 194, 194)","rgb(132, 0, 132)","rgb(132, 0, 0)","rgb(132, 132, 0)","rgb(194, 194, 194)","rgb(0, 0, 132)","rgb(0, 132, 0)"],schematic:{aux_items:"rgb(46, 46, 46)",background:"rgb(245, 241, 237)",brightened:"rgb(255, 0, 255)",bus:"rgb(0, 0, 132)",bus_junction:"rgb(0, 0, 132)",component_body:"rgb(255, 255, 194)",component_outline:"rgb(132, 0, 0)",cursor:"rgb(15, 15, 15)",erc_error:"rgba(230, 9, 13, 0.800)",erc_warning:"rgba(209, 146, 0, 0.800)",fields:"rgb(132, 0, 132)",grid:"rgb(181, 181, 181)",grid_axes:"rgb(0, 0, 132)",hidden:"rgb(194, 194, 194)",junction:"rgb(0, 150, 0)",label_global:"rgb(132, 0, 0)",label_background:"rgba(255, 255, 255, 0.6)",label_hier:"rgb(114, 86, 0)",label_local:"rgb(15, 15, 15)",net_name:"rgb(132, 132, 132)",no_connect:"rgb(132, 0, 0)",note:"rgb(0, 0, 194)",override_item_colors:!1,pin:"rgb(132, 0, 0)",pin_name:"rgb(0, 100, 100)",pin_number:"rgb(169, 0, 0)",reference:"rgb(0, 100, 100)",shadow:"rgba(102, 179, 255, 0.800)",sheet:"rgb(132, 0, 0)",sheet_background:"rgba(253, 255, 231, 0.000)",sheet_fields:"rgb(132, 0, 132)",sheet_filename:"rgb(114, 86, 0)",sheet_label:"rgb(0, 100, 100)",sheet_name:"rgb(0, 100, 100)",table:"rgb(102, 102, 102)",value:"rgb(0, 100, 100)",wire:"rgb(0, 150, 0)",wire_crossing:"rgb(30, 180, 30)",worksheet:"rgb(132, 0, 0)"}};l$n=fd.board.user_2;u$n=fd.board.user_2,h$n=fd.board.user_2;p$n=fd.board.user_2;_$n=fd.board.user_2;f$n=Array.from(Tmt).reduce((e,t)=>e+(Kce[t]??k5.spaceWidthRatio),0);Dmt=Object.fromEntries(Object.entries(HR).map(([e,t])=>{let n=t.flatMap((i)=>[i.x1,i.x2]),o=t.flatMap((i)=>[i.y1,i.y2]);return[e,t.length?{minX:Math.min(...n)-Zue,maxX:Math.max(...n)+Zue,minY:-(Math.max(...o)+Zue)*v0t,maxY:-(Math.min(...o)-Zue)*v0t}:null]})),E0t=Math.round(Math.max(...Object.values(Dmt).map((e)=>e?e.maxX-e.minX:0))*1000)/1000;hBe=aG+2,mBe=Rmt+2,PJ=aG+ex+6;R0t=["rgba(100, 200, 255, 0.6)","rgba(255, 150, 100, 0.6)","rgba(100, 255, 150, 0.6)","rgba(200, 100, 255, 0.6)","rgba(255, 220, 100, 0.6)","rgba(255, 100, 200, 0.6)","rgba(100, 255, 255, 0.6)","rgba(180, 255, 100, 0.6)"];xZn={name:"circuit-to-svg",type:"module",engines:{node:"24.x"},version:"0.0.449",repository:{type:"git",url:"https://github.com/tscircuit/circuit-to-svg.git"},description:"Convert Circuit JSON to SVG",main:"dist/index.js",files:["dist"],scripts:{start:"cosmos",prepublish:"npm run build",prepare:"node scripts/prepare-git.cjs",build:"tsup-node ./lib/index.ts --format esm --dts --sourcemap --external tscircuit",format:"biome format . --write","format:check":"biome format .",cosmos:"cosmos","cosmos-export":"cosmos-export"},license:"ISC",devDependencies:{"@biomejs/biome":"^1.9.4","@resvg/resvg-js":"^2.6.2","@tscircuit/alphabet":"^0.0.27","@tscircuit/checks-latest":"npm:@tscircuit/checks@0.0.179","@tscircuit/circuit-json-util":"^0.0.115","@types/bun":"^1.2.8","@types/color":"^4.2.1","@types/debug":"^4.1.12","@vitejs/plugin-react":"5.0.0",biome:"^0.3.3","bun-match-svg":"^0.0.12","circuit-json":"^0.0.522","circuit-json-to-connectivity-map":"^0.0.23",esbuild:"^0.20.2","format-si-unit":"^0.0.12","performance-now":"^2.1.0",react:"19.1.0","react-cosmos":"7.0.0","react-cosmos-plugin-vite":"7.0.0","react-dom":"19.1.0","schematic-symbols":"^0.0.246",tscircuit:"^0.0.2629",tsup:"^8.0.2",typescript:"^5.4.5","vite-tsconfig-paths":"^5.0.1"},peerDependencies:{"@tscircuit/alphabet":"*","@tscircuit/circuit-json-util":"*","circuit-json":"*","circuit-json-to-connectivity-map":"*","schematic-symbols":"*"},dependencies:{"@types/node":"^22.5.5","bun-types":"^1.1.40","calculate-elbow":"0.0.12",color:"^5.0.3",debug:"^4.4.3","svg-path-commander":"^2.1.11",svgson:"^5.3.1","transformation-matrix":"^2.16.1"}},P7=xZn.version;HZn=NJ;nhe={fill:"none",stroke:"rgb(0,0,0)",strokeOpacity:"0.8",strokeWidthFactor:0.2};YZn={pin_number:0.15,negated_pin_number:0.12,reference_designator:0.18,manufacturer_number:0.18,net_label:0.18,error:0.05};O0t=["pcb_component","pcb_smtpad","pcb_hole","pcb_plated_hole","pcb_board"];V0t=["pcb_board","pcb_smtpad","pcb_hole","pcb_plated_hole","pcb_component","pcb_port"];U0t={"0":{width:13,height:27,ascent:22,descent:5,left:-1,right:12},"1":{width:13,height:27,ascent:22,descent:5,left:-3,right:9},"2":{width:13,height:27,ascent:22,descent:5,left:-1,right:12},"3":{width:13,height:27,ascent:22,descent:5,left:-1,right:12},"4":{width:13,height:27,ascent:22,descent:5,left:0,right:12},"5":{width:13,height:27,ascent:22,descent:5,left:-1,right:12},"6":{width:13,height:27,ascent:22,descent:5,left:-1,right:12},"7":{width:13,height:27,ascent:22,descent:5,left:-1,right:12},"8":{width:13,height:27,ascent:22,descent:5,left:-1,right:12},"9":{width:13,height:27,ascent:22,descent:5,left:-1,right:12}," ":{width:7,height:27,ascent:22,descent:5,left:0,right:0},"!":{width:7,height:27,ascent:22,descent:5,left:-2,right:5},'"':{width:9,height:27,ascent:22,descent:5,left:-1,right:7},"#":{width:13,height:27,ascent:22,descent:5,left:0,right:13},$:{width:13,height:27,ascent:22,descent:5,left:-1,right:12},"%":{width:21,height:27,ascent:22,descent:5,left:-1,right:20},"&":{width:16,height:27,ascent:22,descent:5,left:-1,right:15},"'":{width:5,height:27,ascent:22,descent:5,left:-1,right:3},"(":{width:8,height:27,ascent:22,descent:5,left:-1,right:7},")":{width:8,height:27,ascent:22,descent:5,left:-1,right:7},"*":{width:9,height:27,ascent:22,descent:5,left:-1,right:8},"+":{width:14,height:27,ascent:22,descent:5,left:-1,right:13},",":{width:7,height:27,ascent:22,descent:5,left:-2,right:5},"-":{width:8,height:27,ascent:22,descent:5,left:-1,right:7},".":{width:7,height:27,ascent:22,descent:5,left:-2,right:5},"/":{width:7,height:27,ascent:22,descent:5,left:0,right:7},":":{width:7,height:27,ascent:22,descent:5,left:-2,right:5},";":{width:7,height:27,ascent:22,descent:5,left:-2,right:5},"<":{width:14,height:27,ascent:22,descent:5,left:-1,right:13},"=":{width:14,height:27,ascent:22,descent:5,left:-1,right:13},">":{width:14,height:27,ascent:22,descent:5,left:-1,right:13},"?":{width:13,height:27,ascent:22,descent:5,left:-1,right:12},"@":{width:24,height:27,ascent:22,descent:5,left:-1,right:23},A:{width:16,height:27,ascent:22,descent:5,left:0,right:16},B:{width:16,height:27,ascent:22,descent:5,left:-2,right:15},C:{width:17,height:27,ascent:22,descent:5,left:-1,right:16},D:{width:17,height:27,ascent:22,descent:5,left:-2,right:16},E:{width:16,height:27,ascent:22,descent:5,left:-2,right:15},F:{width:15,height:27,ascent:22,descent:5,left:-2,right:14},G:{width:19,height:27,ascent:22,descent:5,left:-1,right:17},H:{width:17,height:27,ascent:22,descent:5,left:-2,right:15},I:{width:7,height:27,ascent:22,descent:5,left:-2,right:5},J:{width:12,height:27,ascent:22,descent:5,left:-1,right:10},K:{width:16,height:27,ascent:22,descent:5,left:-2,right:16},L:{width:13,height:27,ascent:22,descent:5,left:-2,right:12},M:{width:20,height:27,ascent:22,descent:5,left:-2,right:18},N:{width:17,height:27,ascent:22,descent:5,left:-2,right:15},O:{width:19,height:27,ascent:22,descent:5,left:-1,right:18},P:{width:16,height:27,ascent:22,descent:5,left:-2,right:15},Q:{width:19,height:27,ascent:22,descent:5,left:-1,right:18},R:{width:17,height:27,ascent:22,descent:5,left:-2,right:17},S:{width:16,height:27,ascent:22,descent:5,left:-1,right:15},T:{width:15,height:27,ascent:22,descent:5,left:-1,right:14},U:{width:17,height:27,ascent:22,descent:5,left:-2,right:15},V:{width:16,height:27,ascent:22,descent:5,left:0,right:16},W:{width:23,height:27,ascent:22,descent:5,left:0,right:22},X:{width:16,height:27,ascent:22,descent:5,left:0,right:16},Y:{width:16,height:27,ascent:22,descent:5,left:0,right:16},Z:{width:15,height:27,ascent:22,descent:5,left:0,right:14},"[":{width:7,height:27,ascent:22,descent:5,left:-2,right:6},"\\":{width:7,height:27,ascent:22,descent:5,left:0,right:7},"]":{width:7,height:27,ascent:22,descent:5,left:0,right:5},"^":{width:11,height:27,ascent:22,descent:5,left:-1,right:11},_:{width:13,height:27,ascent:22,descent:5,left:0,right:14},"`":{width:8,height:27,ascent:22,descent:5,left:-1,right:5},a:{width:13,height:27,ascent:22,descent:5,left:-1,right:12},b:{width:13,height:27,ascent:22,descent:5,left:-2,right:12},c:{width:12,height:27,ascent:22,descent:5,left:-1,right:12},d:{width:13,height:27,ascent:22,descent:5,left:-1,right:12},e:{width:13,height:27,ascent:22,descent:5,left:-1,right:12},f:{width:7,height:27,ascent:22,descent:5,left:0,right:8},g:{width:13,height:27,ascent:22,descent:5,left:-1,right:12},h:{width:13,height:27,ascent:22,descent:5,left:-2,right:12},i:{width:5,height:27,ascent:22,descent:5,left:-2,right:4},j:{width:5,height:27,ascent:22,descent:5,left:1,right:4},k:{width:12,height:27,ascent:22,descent:5,left:-2,right:12},l:{width:5,height:27,ascent:22,descent:5,left:-2,right:4},m:{width:20,height:27,ascent:22,descent:5,left:-2,right:18},n:{width:13,height:27,ascent:22,descent:5,left:-2,right:12},o:{width:13,height:27,ascent:22,descent:5,left:-1,right:12},p:{width:13,height:27,ascent:22,descent:5,left:-2,right:12},q:{width:13,height:27,ascent:22,descent:5,left:-1,right:12},r:{width:8,height:27,ascent:22,descent:5,left:-2,right:8},s:{width:12,height:27,ascent:22,descent:5,left:-1,right:11},t:{width:7,height:27,ascent:22,descent:5,left:0,right:6},u:{width:13,height:27,ascent:22,descent:5,left:-2,right:12},v:{width:12,height:27,ascent:22,descent:5,left:0,right:12},w:{width:17,height:27,ascent:22,descent:5,left:0,right:17},x:{width:12,height:27,ascent:22,descent:5,left:0,right:12},y:{width:12,height:27,ascent:22,descent:5,left:0,right:12},z:{width:12,height:27,ascent:22,descent:5,left:0,right:11},"{":{width:8,height:27,ascent:22,descent:5,left:-1,right:7},"|":{width:6,height:27,ascent:22,descent:5,left:-2,right:4},"}":{width:8,height:27,ascent:22,descent:5,left:-1,right:7},"~":{width:14,height:27,ascent:22,descent:5,left:-1,right:13}};Peo={top_left:"start",top_right:"end",middle_left:"start",middle_right:"end",bottom_left:"start",bottom_right:"end",center:"middle",middle_top:"middle",middle_bottom:"middle"},W0t={top_left:"hanging",top_right:"hanging",bottom_left:"ideographic",bottom_right:"ideographic",center:"middle",middle_left:"middle",middle_right:"middle",middle_top:"hanging",middle_bottom:"ideographic"};I7=Neo/Reo,Qeo=297/I7,keo=210/I7,kPr=20/I7,ohe=5/I7;jeo={top_left:"start",top_right:"end",middle_left:"start",middle_right:"end",bottom_left:"start",bottom_right:"end",center:"middle",middle_top:"middle",middle_bottom:"middle"},qeo={top_left:"hanging",top_right:"hanging",bottom_left:"ideographic",bottom_right:"ideographic",center:"middle",middle_left:"middle",middle_right:"middle",middle_top:"hanging",middle_bottom:"ideographic"};dpt=0.2/I7,rto=3/I7,ihe=["1","2","3","4","5","6"],bJ=["A","B","C","D"];Mto=iQ;$0={top:64,right:100,bottom:80,left:100};dmt=["pcb_board","pcb_solder_paste"]});var Ai=ct(function(Nco){var bQ=Rt(lo());(function(){function e(V){if(V==null)return null;if(typeof V==="function")return V.$$typeof===w?null:V.displayName||V.name||null;if(typeof V==="string")return V;switch(V){case p:return"Fragment";case _:return"Profiler";case g:return"StrictMode";case C:return"Suspense";case I:return"SuspenseList";case E:return"Activity";case B:return"ViewTransition"}if(typeof V==="object")switch(typeof V.tag==="number"&&console.error("Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue."),V.$$typeof){case m:return"Portal";case y:return V.displayName||"Context";case f:return(V._context.displayName||"Context")+".Consumer";case x:var W=V.render;return V=V.displayName,V||(V=W.displayName||W.name||"",V=V!==""?"ForwardRef("+V+")":"ForwardRef"),V;case b:return W=V.displayName||null,W!==null?W:e(V.type)||"Memo";case P:W=V._payload,V=V._init;try{return e(V(W))}catch(j){}}return null}function t(V){return""+V}function n(V){try{t(V);var W=!1}catch(ne){W=!0}if(W){W=console;var j=W.error,q=typeof Symbol==="function"&&Symbol.toStringTag&&V[Symbol.toStringTag]||V.constructor.name||"Object";return j.call(W,"The provided key is an unsupported type %s. This value must be coerced to a string before using it here.",q),t(V)}}function o(V){if(V===p)return"<>";if(typeof V==="object"&&V!==null&&V.$$typeof===P)return"<...>";try{var W=e(V);return W?"<"+W+">":"<...>"}catch(j){return"<...>"}}function i(){var V=T.A;return V===null?null:V.getOwner()}function r(){return Error("react-stack-top-frame")}function s(V){if(Q.call(V,"key")){var W=Object.getOwnPropertyDescriptor(V,"key").get;if(W&&W.isReactWarning)return!1}return V.key!==void 0}function a(V,W){function j(){H||(H=!0,console.error("%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://react.dev/link/special-props)",W))}j.isReactWarning=!0,Object.defineProperty(V,"key",{get:j,configurable:!0})}function c(){var V=e(this.type);return z[V]||(z[V]=!0,console.error("Accessing element.ref was removed in React 19. ref is now a regular prop. It will be removed from the JSX Element type in a future release.")),V=this.props.ref,V!==void 0?V:null}function l(V,W,j,q,ne,ce){var oe=j.ref;return V={$$typeof:A,type:V,key:W,props:j,_owner:q},(oe!==void 0?oe:null)!==null?Object.defineProperty(V,"ref",{enumerable:!1,get:c}):Object.defineProperty(V,"ref",{enumerable:!1,value:null}),V._store={},Object.defineProperty(V._store,"validated",{configurable:!1,enumerable:!1,writable:!0,value:0}),Object.defineProperty(V,"_debugInfo",{configurable:!1,enumerable:!1,writable:!0,value:null}),Object.defineProperty(V,"_debugStack",{configurable:!1,enumerable:!1,writable:!0,value:ne}),Object.defineProperty(V,"_debugTask",{configurable:!1,enumerable:!1,writable:!0,value:ce}),Object.freeze&&(Object.freeze(V.props),Object.freeze(V)),V}function d(V,W,j,q,ne,ce){var oe=W.children;if(oe!==void 0)if(q)if(N(oe)){for(q=0;q<oe.length;q++)u(oe[q]);Object.freeze&&Object.freeze(oe)}else console.error("React.jsx: Static children should always be an array. You are likely explicitly calling React.jsxs or React.jsxDEV. Use the Babel transform instead.");else u(oe);if(Q.call(W,"key")){oe=e(V);var ie=Object.keys(W).filter(function(ee){return ee!=="key"});q=0<ie.length?"{key: someKey, "+ie.join(": ..., ")+": ...}":"{key: someKey}",X[oe+q]||(ie=0<ie.length?"{"+ie.join(": ..., ")+": ...}":"{}",console.error(`A props object containing a "key" prop is being spread into JSX:
let props = %s;
<%s {...props} />
React keys must be passed directly to JSX without using spread:
let props = %s;
<%s key={someKey} {...props} />`,q,oe,ie,oe),X[oe+q]=!0)}if(oe=null,j!==void 0&&(n(j),oe=""+j),s(W)&&(n(W.key),oe=""+W.key),"key"in W){j={};for(var J in W)J!=="key"&&(j[J]=W[J])}else j=W;return oe&&a(j,typeof V==="function"?V.displayName||V.name||"Unknown":V),l(V,oe,j,i(),ne,ce)}function u(V){h(V)?V._store&&(V._store.validated=1):typeof V==="object"&&V!==null&&V.$$typeof===P&&(V._payload.status==="fulfilled"?h(V._payload.value)&&V._payload.value._store&&(V._payload.value._store.validated=1):V._store&&(V._store.validated=1))}function h(V){return typeof V==="object"&&V!==null&&V.$$typeof===A}var A=Symbol.for("react.transitional.element"),m=Symbol.for("react.portal"),p=Symbol.for("react.fragment"),g=Symbol.for("react.strict_mode"),_=Symbol.for("react.profiler"),f=Symbol.for("react.consumer"),y=Symbol.for("react.context"),x=Symbol.for("react.forward_ref"),C=Symbol.for("react.suspense"),I=Symbol.for("react.suspense_list"),b=Symbol.for("react.memo"),P=Symbol.for("react.lazy"),E=Symbol.for("react.activity"),B=Symbol.for("react.view_transition"),w=Symbol.for("react.client.reference"),T=bQ.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,Q=Object.prototype.hasOwnProperty,N=Array.isArray,F=console.createTask?console.createTask:function(){return null};bQ={react_stack_bottom_frame:function(V){return V()}};var H,z={},Y=bQ.react_stack_bottom_frame.bind(bQ,r)(),U=F(o(r)),X={};Nco.Fragment=p,Nco.jsx=function(V,W,j){var q=1e4>T.recentlyCreatedOwnerStacks++;if(q){var ne=Error.stackTraceLimit;Error.stackTraceLimit=10;var ce=Error("react-stack-top-frame");Error.stackTraceLimit=ne}else ce=Y;return d(V,W,j,!1,ce,q?F(o(V)):U)},Nco.jsxs=function(V,W,j){var q=1e4>T.recentlyCreatedOwnerStacks++;if(q){var ne=Error.stackTraceLimit;Error.stackTraceLimit=10;var ce=Error("react-stack-top-frame");Error.stackTraceLimit=ne}else ce=Y;return d(V,W,j,!0,ce,q?F(o(V)):U)}})()});var gCt=ct(function(_Ct,iZ){(function(){var e,t,n,o,i,r;if(typeof performance<"u"&&performance!==null&&performance.now)iZ.exports=function(){return performance.now()};else if(typeof process<"u"&&process!==null&&process.hrtime)iZ.exports=function(){return(e()-i)/1e6},t=process.hrtime,e=function(){var s=t();return s[0]*1e9+s[1]},o=e(),r=process.uptime()*1e9,i=o-r;else if(Date.now)iZ.exports=function(){return Date.now()-n},n=Date.now();else iZ.exports=function(){return new Date().getTime()-n},n=new Date().getTime()}).call(_Ct)});var KQ=ct(function(kFr,dIt){dIt.exports={trueFunc:function(){return!0},falseFunc:function(){return!1}}});var BIt=ct(function(xY){(function(){function e(){if(x=!1,P){var F=xY.unstable_now();w=F;var H=!0;try{e:{f=!1,y&&(y=!1,I(E),E=-1),_=!0;var z=g;try{t:{r(F);for(p=n(h);p!==null&&!(p.expirationTime>F&&a());){var Y=p.callback;if(typeof Y==="function"){p.callback=null,g=p.priorityLevel;var U=Y(p.expirationTime<=F);if(F=xY.unstable_now(),typeof U==="function"){p.callback=U,r(F),H=!0;break t}p===n(h)&&o(h),r(F)}else o(h);p=n(h)}if(p!==null)H=!0;else{var X=n(A);X!==null&&c(s,X.startTime-F),H=!1}}break e}finally{p=null,g=z,_=!1}H=void 0}}finally{H?T():P=!1}}}function t(F,H){var z=F.length;F.push(H);e:for(;0<z;){var Y=z-1>>>1,U=F[Y];if(0<i(U,H))F[Y]=H,F[z]=U,z=Y;else break e}}function n(F){return F.length===0?null:F[0]}function o(F){if(F.length===0)return null;var H=F[0],z=F.pop();if(z!==H){F[0]=z;e:for(var Y=0,U=F.length,X=U>>>1;Y<X;){var V=2*(Y+1)-1,W=F[V],j=V+1,q=F[j];if(0>i(W,z))j<U&&0>i(q,W)?(F[Y]=q,F[j]=z,Y=j):(F[Y]=W,F[V]=z,Y=V);else if(j<U&&0>i(q,z))F[Y]=q,F[j]=z,Y=j;else break e}}return H}function i(F,H){var z=F.sortIndex-H.sortIndex;return z!==0?z:F.id-H.id}function r(F){for(var H=n(A);H!==null;){if(H.callback===null)o(A);else if(H.startTime<=F)o(A),H.sortIndex=H.expirationTime,t(h,H);else break;H=n(A)}}function s(F){if(y=!1,r(F),!f)if(n(h)!==null)f=!0,P||(P=!0,T());else{var H=n(A);H!==null&&c(s,H.startTime-F)}}function a(){return x?!0:xY.unstable_now()-w<B?!1:!0}function c(F,H){E=C(function(){F(xY.unstable_now())},H)}if(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__<"u"&&typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart==="function"&&__REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(Error()),xY.unstable_now=void 0,typeof performance==="object"&&typeof performance.now==="function"){var l=performance;xY.unstable_now=function(){return l.now()}}else{var d=Date,u=d.now();xY.unstable_now=function(){return d.now()-u}}var h=[],A=[],m=1,p=null,g=3,_=!1,f=!1,y=!1,x=!1,C=typeof setTimeout==="function"?setTimeout:null,I=typeof clearTimeout==="function"?clearTimeout:null,b=typeof setImmediate<"u"?setImmediate:null,P=!1,E=-1,B=5,w=-1;if(typeof b==="function")var T=function(){b(e)};else if(typeof MessageChannel<"u"){var Q=new MessageChannel,N=Q.port2;Q.port1.onmessage=e,T=function(){N.postMessage(null)}}else T=function(){C(e,0)};xY.unstable_IdlePriority=5,xY.unstable_ImmediatePriority=1,xY.unstable_LowPriority=4,xY.unstable_NormalPriority=3,xY.unstable_Profiling=null,xY.unstable_UserBlockingPriority=2,xY.unstable_cancelCallback=function(F){F.callback=null},xY.unstable_forceFrameRate=function(F){0>F||125<F?console.error("forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported"):B=0<F?Math.floor(1000/F):5},xY.unstable_getCurrentPriorityLevel=function(){return g},xY.unstable_next=function(F){switch(g){case 1:case 2:case 3:var H=3;break;default:H=g}var z=g;g=H;try{return F()}finally{g=z}},xY.unstable_requestPaint=function(){x=!0},xY.unstable_runWithPriority=function(F,H){switch(F){case 1:case 2:case 3:case 4:case 5:break;default:F=3}var z=g;g=F;try{return H()}finally{g=z}},xY.unstable_scheduleCallback=function(F,H,z){var Y=xY.unstable_now();switch(typeof z==="object"&&z!==null?(z=z.delay,z=typeof z==="number"&&0<z?Y+z:Y):z=Y,F){case 1:var U=-1;break;case 2:U=250;break;case 5:U=1073741823;break;case 4:U=1e4;break;default:U=5000}return U=z+U,F={id:m++,callback:H,priorityLevel:F,startTime:z,expirationTime:U,sortIndex:-1},z>Y?(F.sortIndex=z,t(A,F),n(h)===null&&F===n(A)&&(y?(I(E),E=-1):y=!0,c(s,z-Y))):(F.sortIndex=U,t(h,F),f||_||(f=!0,P||(P=!0,T()))),F},xY.unstable_shouldYield=a,xY.unstable_wrapCallback=function(F){var H=g;return function(){var z=g;g=H;try{return F.apply(this,arguments)}finally{g=z}}},typeof __REACT_DEVTOOLS_GLOBAL_HOOK__<"u"&&typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop==="function"&&__REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(Error())})()});var wIt=ct(function(UHr,mZ){var ATe=Rt(lo()),gu=Rt(BIt());mZ.exports=function(e){function t(D,L){for(D=D.memoizedState;D!==null&&0<L;)D=D.next,L--;return D}function n(D,L,K,de){if(K>=L.length)return de;var ge=L[K],Ie=ic(D)?D.slice():Nh({},D);return Ie[ge]=n(D[ge],L,K+1,de),Ie}function o(D,L,K){if(L.length!==K.length)console.warn("copyWithRename() expects paths of the same length");else{for(var de=0;de<K.length-1;de++)if(L[de]!==K[de]){console.warn("copyWithRename() expects paths to be the same except for the deepest key");return}return i(D,L,K,0)}}function i(D,L,K,de){var ge=L[de],Ie=ic(D)?D.slice():Nh({},D);return de+1===L.length?(Ie[K[de]]=Ie[ge],ic(Ie)?Ie.splice(ge,1):delete Ie[ge]):Ie[ge]=i(D[ge],L,K,de+1),Ie}function r(D,L,K){var de=L[K],ge=ic(D)?D.slice():Nh({},D);if(K+1===L.length)return ic(ge)?ge.splice(de,1):delete ge[de],ge;return ge[de]=r(D[de],L,K+1),ge}function s(){return!1}function a(){return null}function c(D,L,K,de){return new Q4(D,L,K,de)}function l(D,L){D.context===X1&&(Hb(L,D,null,null),Lb())}function d(D,L){if(Qf!==null){var K=L.staleFamilies;L=L.updatedFamilies,bC(),R4(D.current,L,K),Lb()}}function u(D){Qf=D}function h(){}function A(){console.error("Do not call Hooks inside useEffect(...), useMemo(...), or other built-in Hooks. You can only call Hooks at the top level of your React function. For more information, see https://react.dev/link/rules-of-hooks")}function m(){console.error("Context can only be read while React is rendering. In classes, you can read it in the render method or getDerivedStateFromProps. In function components, you can read it directly in the function body, but not inside Hooks like useReducer() or useMemo().")}function p(){}function g(D){var L=[];return D.forEach(function(K){L.push(K)}),L.sort().join(", ")}function _(D){var L=D,K=D;if(D.alternate)for(;L.return;)L=L.return;else{D=L;do L=D,(L.flags&4098)!==0&&(K=L.return),D=L.return;while(D)}return L.tag===3?K:null}function f(D){if(_(D)!==D)throw Error("Unable to find node on an unmounted component.")}function y(D){var L=D.alternate;if(!L){if(L=_(D),L===null)throw Error("Unable to find node on an unmounted component.");return L!==D?null:D}for(var K=D,de=L;;){var ge=K.return;if(ge===null)break;var Ie=ge.alternate;if(Ie===null){if(de=ge.return,de!==null){K=de;continue}break}if(ge.child===Ie.child){for(Ie=ge.child;Ie;){if(Ie===K)return f(ge),D;if(Ie===de)return f(ge),L;Ie=Ie.sibling}throw Error("Unable to find node on an unmounted component.")}if(K.return!==de.return)K=ge,de=Ie;else{for(var ot=!1,yt=ge.child;yt;){if(yt===K){ot=!0,K=ge,de=Ie;break}if(yt===de){ot=!0,de=ge,K=Ie;break}yt=yt.sibling}if(!ot){for(yt=Ie.child;yt;){if(yt===K){ot=!0,K=Ie,de=ge;break}if(yt===de){ot=!0,de=Ie,K=ge;break}yt=yt.sibling}if(!ot)throw Error("Child was not found in either parent set. This indicates a bug in React related to the return pointer. Please file an issue.")}}if(K.alternate!==de)throw Error("Return fibers should always be each others' alternates. This error is likely caused by a bug in React. Please file an issue.")}if(K.tag!==3)throw Error("Unable to find node on an unmounted component.");return K.stateNode.current===K?D:L}function x(D){return D=y(D),D!==null?C(D):null}function C(D){var L=D.tag;if(L===5||L===26||L===27||L===6)return D;for(D=D.child;D!==null;){if(L=C(D),L!==null)return L;D=D.sibling}return null}function I(D){var L=D.tag;if(L===5||L===26||L===27||L===6)return D;for(D=D.child;D!==null;){if(D.tag!==4&&(L=I(D),L!==null))return L;D=D.sibling}return null}function b(D){if(D===null||typeof D!=="object")return null;return D=iu&&D[iu]||D["@@iterator"],typeof D==="function"?D:null}function P(D){if(D==null)return null;if(typeof D==="function")return D.$$typeof===OH?null:D.displayName||D.name||null;if(typeof D==="string")return D;switch(D){case Di:return"Fragment";case K9:return"Profiler";case Ap:return"StrictMode";case j9:return"Suspense";case If:return"SuspenseList";case t0:return"Activity"}if(typeof D==="object")switch(typeof D.tag==="number"&&console.error("Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue."),D.$$typeof){case Y1:return"Portal";case Cf:return(D.displayName||"Context")+".Provider";case vP:return(D._context.displayName||"Context")+".Consumer";case zb:var L=D.render;return D=D.displayName,D||(D=L.displayName||L.name||"",D=D!==""?"ForwardRef("+D+")":"ForwardRef"),D;case rr:return L=D.displayName||null,L!==null?L:P(D.type)||"Memo";case __:L=D._payload,D=D._init;try{return P(D(L))}catch(K){}}return null}function E(D){var L=D.type;switch(D.tag){case 31:return"Activity";case 24:return"Cache";case 9:return(L._context.displayName||"Context")+".Consumer";case 10:return(L.displayName||"Context")+".Provider";case 18:return"DehydratedFragment";case 11:return D=L.render,D=D.displayName||D.name||"",L.displayName||(D!==""?"ForwardRef("+D+")":"ForwardRef");case 7:return"Fragment";case 26:case 27:case 5:return L;case 4:return"Portal";case 3:return"Root";case 6:return"Text";case 16:return P(L);case 8:return L===Ap?"StrictMode":"Mode";case 22:return"Offscreen";case 12:return"Profiler";case 21:return"Scope";case 13:return"Suspense";case 19:return"SuspenseList";case 25:return"TracingMarker";case 1:case 0:case 14:case 15:if(typeof L==="function")return L.displayName||L.name||null;if(typeof L==="string")return L;break;case 29:if(L=D._debugInfo,L!=null){for(var K=L.length-1;0<=K;K--)if(typeof L[K].name==="string")return L[K].name}if(D.return!==null)return E(D.return)}return null}function B(D){return{current:D}}function w(D,L){0>vf?console.error("Unexpected pop."):(L!==QP[vf]&&console.error("Unexpected Fiber popped."),D.current=NC[vf],NC[vf]=null,QP[vf]=null,vf--)}function T(D,L,K){vf++,NC[vf]=D.current,QP[vf]=K,D.current=L}function Q(D){return D>>>=0,D===0?32:31-(QN(D)/V4|0)|0}function N(D){if(D&1)return"SyncHydrationLane";if(D&2)return"Sync";if(D&4)return"InputContinuousHydration";if(D&8)return"InputContinuous";if(D&16)return"DefaultHydration";if(D&32)return"Default";if(D&128)return"TransitionHydration";if(D&4194048)return"Transition";if(D&62914560)return"Retry";if(D&67108864)return"SelectiveHydration";if(D&134217728)return"IdleHydration";if(D&268435456)return"Idle";if(D&536870912)return"Offscreen";if(D&1073741824)return"Deferred"}function F(D){var L=D&42;if(L!==0)return L;switch(D&-D){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:return 64;case 128:return 128;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return D&4194048;case 4194304:case 8388608:case 16777216:case 33554432:return D&62914560;case 67108864:return 67108864;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 0;default:return console.error("Should have found matching lanes. This is a bug in React."),D}}function H(D,L,K){var de=D.pendingLanes;if(de===0)return 0;var ge=0,Ie=D.suspendedLanes,ot=D.pingedLanes;D=D.warmLanes;var yt=de&134217727;return yt!==0?(de=yt&~Ie,de!==0?ge=F(de):(ot&=yt,ot!==0?ge=F(ot):K||(K=yt&~D,K!==0&&(ge=F(K))))):(yt=de&~Ie,yt!==0?ge=F(yt):ot!==0?ge=F(ot):K||(K=de&~D,K!==0&&(ge=F(K)))),ge===0?0:L!==0&&L!==ge&&(L&Ie)===0&&(Ie=ge&-ge,K=L&-L,Ie>=K||Ie===32&&(K&4194048)!==0)?L:ge}function z(D,L){return(D.pendingLanes&~(D.suspendedLanes&~D.pingedLanes)&L)===0}function Y(D,L){switch(D){case 1:case 2:case 4:case 8:case 64:return L+250;case 16:case 32:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return L+5000;case 4194304:case 8388608:case 16777216:case 33554432:return-1;case 67108864:case 134217728:case 268435456:case 536870912:case 1073741824:return-1;default:return console.error("Should have found matching lanes. This is a bug in React."),-1}}function U(){var D=t5;return t5<<=1,(t5&4194048)===0&&(t5=256),D}function X(){var D=Ef;return Ef<<=1,(Ef&62914560)===0&&(Ef=4194304),D}function V(D){for(var L=[],K=0;31>K;K++)L.push(D);return L}function W(D,L){D.pendingLanes|=L,L!==268435456&&(D.suspendedLanes=0,D.pingedLanes=0,D.warmLanes=0)}function j(D,L,K,de,ge,Ie){var ot=D.pendingLanes;D.pendingLanes=K,D.suspendedLanes=0,D.pingedLanes=0,D.warmLanes=0,D.expiredLanes&=K,D.entangledLanes&=K,D.errorRecoveryDisabledLanes&=K,D.shellSuspendCounter=0;var{entanglements:yt,expirationTimes:hn,hiddenUpdates:zn}=D;for(K=ot&~K;0<K;){var Qo=31-Sm(K),Go=1<<Qo;yt[Qo]=0,hn[Qo]=-1;var di=zn[Qo];if(di!==null)for(zn[Qo]=null,Qo=0;Qo<di.length;Qo++){var kr=di[Qo];kr!==null&&(kr.lane&=-536870913)}K&=~Go}de!==0&&q(D,de,0),Ie!==0&&ge===0&&D.tag!==0&&(D.suspendedLanes|=Ie&~(ot&~L))}function q(D,L,K){D.pendingLanes|=L,D.suspendedLanes&=~L;var de=31-Sm(L);D.entangledLanes|=L,D.entanglements[de]=D.entanglements[de]|1073741824|K&4194090}function ne(D,L){var K=D.entangledLanes|=L;for(D=D.entanglements;K;){var de=31-Sm(K),ge=1<<de;ge&L|D[de]&L&&(D[de]|=L),K&=~ge}}function ce(D){switch(D){case 2:D=1;break;case 8:D=4;break;case 32:D=16;break;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:case 4194304:case 8388608:case 16777216:case 33554432:D=128;break;case 268435456:D=134217728;break;default:D=0}return D}function oe(D,L,K){if(hg)for(D=D.pendingUpdatersLaneMap;0<K;){var de=31-Sm(K),ge=1<<de;D[de].add(L),K&=~ge}}function ie(D,L){if(hg)for(var K=D.pendingUpdatersLaneMap,de=D.memoizedUpdaters;0<L;){var ge=31-Sm(L);D=1<<ge,ge=K[ge],0<ge.size&&(ge.forEach(function(Ie){var ot=Ie.alternate;ot!==null&&de.has(ot)||de.add(Ie)}),ge.clear()),L&=~D}}function J(D){return D&=-D,2<D?8<D?(D&134217727)!==0?32:268435456:8:2}function ee(D){if(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__>"u")return!1;var L=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(L.isDisabled)return!0;if(!L.supportsFiber)return console.error("The installed version of React DevTools is too old and will not work with the current version of React. Please update React DevTools. https://react.dev/link/react-devtools"),!0;try{RC=L.inject(D),F0=L}catch(K){console.error("React instrumentation encountered an error: %s.",K)}return L.checkDCE?!0:!1}function se(D){if(typeof LN==="function"&&oO(D),F0&&typeof F0.setStrictMode==="function")try{F0.setStrictMode(RC,D)}catch(L){ug||(ug=!0,console.error("React instrumentation encountered an error: %s",L))}}function le(D){ci=D}function he(){ci!==null&&typeof ci.markCommitStopped==="function"&&ci.markCommitStopped()}function ue(D){ci!==null&&typeof ci.markComponentRenderStarted==="function"&&ci.markComponentRenderStarted(D)}function Ae(){ci!==null&&typeof ci.markComponentRenderStopped==="function"&&ci.markComponentRenderStopped()}function _e(D){ci!==null&&typeof ci.markRenderStarted==="function"&&ci.markRenderStarted(D)}function Pe(){ci!==null&&typeof ci.markRenderStopped==="function"&&ci.markRenderStopped()}function Ee(D,L){ci!==null&&typeof ci.markStateUpdateScheduled==="function"&&ci.markStateUpdateScheduled(D,L)}function Te(){}function be(){if(HP===0){pd=console.log,K1=console.info,fp=console.warn,OP=console.error,mg=console.group,zP=console.groupCollapsed,FN=console.groupEnd;var D={configurable:!0,enumerable:!0,value:Te,writable:!0};Object.defineProperties(console,{info:D,log:D,warn:D,error:D,group:D,groupCollapsed:D,groupEnd:D})}HP++}function me(){if(HP--,HP===0){var D={configurable:!0,enumerable:!0,writable:!0};Object.defineProperties(console,{log:Nh({},D,{value:pd}),info:Nh({},D,{value:K1}),warn:Nh({},D,{value:fp}),error:Nh({},D,{value:OP}),group:Nh({},D,{value:mg}),groupCollapsed:Nh({},D,{value:zP}),groupEnd:Nh({},D,{value:FN})})}0>HP&&console.error("disabledDepth fell below zero. This is a bug in React. Please file an issue.")}function ye(D){if(GP===void 0)try{throw Error()}catch(K){var L=K.stack.trim().match(/\n( *(at )?)/);GP=L&&L[1]||"",cw=-1<K.stack.indexOf(`
at`)?" (<anonymous>)":-1<K.stack.indexOf("@")?"@unknown:0:0":""}return`
`+GP+D+cw}function Ce(D,L){if(!D||U4)return"";var K=W4.get(D);if(K!==void 0)return K;U4=!0,K=Error.prepareStackTrace,Error.prepareStackTrace=void 0;var de=null;de=En.H,En.H=null,be();try{var ge={DetermineComponentFrameRoot:function(){try{if(L){var di=function(){throw Error()};if(Object.defineProperty(di.prototype,"props",{set:function(){throw Error()}}),typeof Reflect==="object"&&Reflect.construct){try{Reflect.construct(di,[])}catch(wc){var kr=wc}Reflect.construct(D,[],di)}else{try{di.call()}catch(wc){kr=wc}D.call(di.prototype)}}else{try{throw Error()}catch(wc){kr=wc}(di=D())&&typeof di.catch==="function"&&di.catch(function(){})}}catch(wc){if(wc&&kr&&typeof wc.stack==="string")return[wc.stack,kr.stack]}return[null,null]}};ge.DetermineComponentFrameRoot.displayName="DetermineComponentFrameRoot";var Ie=Object.getOwnPropertyDescriptor(ge.DetermineComponentFrameRoot,"name");Ie&&Ie.configurable&&Object.defineProperty(ge.DetermineComponentFrameRoot,"name",{value:"DetermineComponentFrameRoot"});var ot=ge.DetermineComponentFrameRoot(),yt=ot[0],hn=ot[1];if(yt&&hn){var zn=yt.split(`
`),Qo=hn.split(`
`);for(ot=Ie=0;Ie<zn.length&&!zn[Ie].includes("DetermineComponentFrameRoot");)Ie++;for(;ot<Qo.length&&!Qo[ot].includes("DetermineComponentFrameRoot");)ot++;if(Ie===zn.length||ot===Qo.length)for(Ie=zn.length-1,ot=Qo.length-1;1<=Ie&&0<=ot&&zn[Ie]!==Qo[ot];)ot--;for(;1<=Ie&&0<=ot;Ie--,ot--)if(zn[Ie]!==Qo[ot]){if(Ie!==1||ot!==1)do if(Ie--,ot--,0>ot||zn[Ie]!==Qo[ot]){var Go=`
`+zn[Ie].replace(" at new "," at ");return D.displayName&&Go.includes("<anonymous>")&&(Go=Go.replace("<anonymous>",D.displayName)),typeof D==="function"&&W4.set(D,Go),Go}while(1<=Ie&&0<=ot);break}}}finally{U4=!1,En.H=de,me(),Error.prepareStackTrace=K}return zn=(zn=D?D.displayName||D.name:"")?ye(zn):"",typeof D==="function"&&W4.set(D,zn),zn}function ve(D){var L=Error.prepareStackTrace;if(Error.prepareStackTrace=void 0,D=D.stack,Error.prepareStackTrace=L,D.startsWith(`Error: react-stack-top-frame
`)&&(D=D.slice(29)),L=D.indexOf(`
`),L!==-1&&(D=D.slice(L+1)),L=D.indexOf("react-stack-bottom-frame"),L!==-1&&(L=D.lastIndexOf(`
`,L)),L!==-1)D=D.slice(0,L);else return"";return D}function De(D){switch(D.tag){case 26:case 27:case 5:return ye(D.type);case 16:return ye("Lazy");case 13:return ye("Suspense");case 19:return ye("SuspenseList");case 0:case 15:return Ce(D.type,!1);case 11:return Ce(D.type.render,!1);case 1:return Ce(D.type,!0);case 31:return ye("Activity");default:return""}}function Ze(D){try{var L="";do{L+=De(D);var K=D._debugInfo;if(K)for(var de=K.length-1;0<=de;de--){var ge=K[de];if(typeof ge.name==="string"){var Ie=L,ot=ge.env,yt=ye(ge.name+(ot?" ["+ot+"]":""));L=Ie+yt}}D=D.return}while(D);return L}catch(hn){return`
Error generating stack: `+hn.message+`
`+hn.stack}}function st(D){return(D=D?D.displayName||D.name:"")?ye(D):""}function et(D,L){if(typeof D==="object"&&D!==null){var K=YP.get(D);if(K!==void 0)return K;return L={value:D,source:L,stack:Ze(L)},YP.set(D,L),L}return{value:D,source:L,stack:Ze(L)}}function lt(D,L){Dt(),QC[E2++]=lw,QC[E2++]=o5,o5=D,lw=L}function it(D,L,K){Dt(),Lu[yp++]=pg,Lu[yp++]=Bf,Lu[yp++]=gs,gs=D;var de=pg;D=Bf;var ge=32-Sm(de)-1;de&=~(1<<ge),K+=1;var Ie=32-Sm(L)+ge;if(30<Ie){var ot=ge-ge%5;Ie=(de&(1<<ot)-1).toString(32),de>>=ot,ge-=ot,pg=1<<32-Sm(L)+ge|K<<ge|de,Bf=Ie+D}else pg=1<<Ie|K<<ge|de,Bf=D}function gt(D){Dt(),D.return!==null&&(lt(D,1),it(D,1,0))}function wt(D){for(;D===o5;)o5=QC[--E2],QC[E2]=null,lw=QC[--E2],QC[E2]=null;for(;D===gs;)gs=Lu[--yp],Lu[yp]=null,Bf=Lu[--yp],Lu[yp]=null,pg=Lu[--yp],Lu[yp]=null}function Dt(){ua||console.error("Expected to be hydrating. This is a bug in React. Please file an issue.")}function vt(D){return D===null&&console.error("Expected host context to exist. This error is likely caused by a bug in React. Please file an issue."),D}function Ht(D,L){T(C_,L,D),T(i5,D,D),T(xp,null,D),L=V1(L),w(xp,D),T(xp,L,D)}function Xt(D){w(xp,D),w(i5,D),w(C_,D)}function ut(){return vt(xp.current)}function je(D){D.memoizedState!==null&&T(kC,D,D);var L=vt(xp.current),K=_l(L,D.type);L!==K&&(T(i5,D,D),T(xp,K,D))}function Re(D){i5.current===D&&(w(xp,D),w(i5,D)),kC.current===D&&(w(kC,D),tl?vC._currentValue=Ub:vC._currentValue2=Ub)}function Je(D,L){return D.serverProps===void 0&&D.serverTail.length===0&&D.children.length===1&&3<D.distanceFromLeaf&&D.distanceFromLeaf>15-L?Je(D.children[0],L):D}function Ve(D){return" "+" ".repeat(D)}function Ye(D){return"+ "+" ".repeat(D)}function mt(D){return"- "+" ".repeat(D)}function ft(D){switch(D.tag){case 26:case 27:case 5:return D.type;case 16:return"Lazy";case 13:return"Suspense";case 19:return"SuspenseList";case 0:case 15:return D=D.type,D.displayName||D.name||null;case 11:return D=D.type.render,D.displayName||D.name||null;case 1:return D=D.type,D.displayName||D.name||null;default:return null}}function Oe(D,L){return HN.test(D)?(D=JSON.stringify(D),D.length>L-2?8>L?'{"..."}':"{"+D.slice(0,L-7)+'..."}':"{"+D+"}"):D.length>L?5>L?'{"..."}':D.slice(0,L-3)+"...":D}function qe(D,L,K){var de=120-2*K;if(L===null)return Ye(K)+Oe(D,de)+`
`;if(typeof L==="string"){for(var ge=0;ge<L.length&&ge<D.length&&L.charCodeAt(ge)===D.charCodeAt(ge);ge++);return ge>de-8&&10<ge&&(D="..."+D.slice(ge-8),L="..."+L.slice(ge-8)),Ye(K)+Oe(D,de)+`
`+mt(K)+Oe(L,de)+`
`}return Ve(K)+Oe(D,de)+`
`}function rt(D){return Object.prototype.toString.call(D).replace(/^\[object (.*)\]$/,function(L,K){return K})}function Ct(D,L){switch(typeof D){case"string":return D=JSON.stringify(D),D.length>L?5>L?'"..."':D.slice(0,L-4)+'..."':D;case"object":if(D===null)return"null";if(ic(D))return"[...]";if(D.$$typeof===Rh)return(L=P(D.type))?"<"+L+">":"<...>";var K=rt(D);if(K==="Object"){K="",L-=2;for(var de in D)if(D.hasOwnProperty(de)){var ge=JSON.stringify(de);if(ge!=='"'+de+'"'&&(de=ge),L-=de.length-2,ge=Ct(D[de],15>L?L:15),L-=ge.length,0>L){K+=K===""?"...":", ...";break}K+=(K===""?"":",")+de+":"+ge}return"{"+K+"}"}return K;case"function":return(L=D.displayName||D.name)?"function "+L:"function";default:return String(D)}}function Mt(D,L){return typeof D!=="string"||HN.test(D)?"{"+Ct(D,L-2)+"}":D.length>L-2?5>L?'"..."':'"'+D.slice(0,L-5)+'..."':'"'+D+'"'}function Nt(D,L,K){var de=120-K.length-D.length,ge=[],Ie;for(Ie in L)if(L.hasOwnProperty(Ie)&&Ie!=="children"){var ot=Mt(L[Ie],120-K.length-Ie.length-1);de-=Ie.length+ot.length+2,ge.push(Ie+"="+ot)}return ge.length===0?K+"<"+D+`>
`:0<de?K+"<"+D+" "+ge.join(" ")+`>
`:K+"<"+D+`
`+K+" "+ge.join(`
`+K+" ")+`
`+K+`>
`}function Ot(D,L,K){var de="",ge=Nh({},L),Ie;for(Ie in D)if(D.hasOwnProperty(Ie)){delete ge[Ie];var ot=120-2*K-Ie.length-2,yt=Ct(D[Ie],ot);L.hasOwnProperty(Ie)?(ot=Ct(L[Ie],ot),de+=Ye(K)+Ie+": "+yt+`
`,de+=mt(K)+Ie+": "+ot+`
`):de+=Ye(K)+Ie+": "+yt+`
`}for(var hn in ge)ge.hasOwnProperty(hn)&&(D=Ct(ge[hn],120-2*K-hn.length-2),de+=mt(K)+hn+": "+D+`
`);return de}function mn(D,L,K,de){var ge="",Ie=new Map;for(zn in K)K.hasOwnProperty(zn)&&Ie.set(zn.toLowerCase(),zn);if(Ie.size===1&&Ie.has("children"))ge+=Nt(D,L,Ve(de));else{for(var ot in L)if(L.hasOwnProperty(ot)&&ot!=="children"){var yt=120-2*(de+1)-ot.length-1,hn=Ie.get(ot.toLowerCase());if(hn!==void 0){Ie.delete(ot.toLowerCase());var zn=L[ot];hn=K[hn];var Qo=Mt(zn,yt);yt=Mt(hn,yt),typeof zn==="object"&&zn!==null&&typeof hn==="object"&&hn!==null&&rt(zn)==="Object"&&rt(hn)==="Object"&&(2<Object.keys(zn).length||2<Object.keys(hn).length||-1<Qo.indexOf("...")||-1<yt.indexOf("..."))?ge+=Ve(de+1)+ot+`={{
`+Ot(zn,hn,de+2)+Ve(de+1)+`}}
`:(ge+=Ye(de+1)+ot+"="+Qo+`
`,ge+=mt(de+1)+ot+"="+yt+`
`)}else ge+=Ve(de+1)+ot+"="+Mt(L[ot],yt)+`
`}Ie.forEach(function(Go){if(Go!=="children"){var di=120-2*(de+1)-Go.length-1;ge+=mt(de+1)+Go+"="+Mt(K[Go],di)+`
`}}),ge=ge===""?Ve(de)+"<"+D+`>
`:Ve(de)+"<"+D+`
`+ge+Ve(de)+`>
`}if(D=K.children,L=L.children,typeof D==="string"||typeof D==="number"||typeof D==="bigint"){if(Ie="",typeof L==="string"||typeof L==="number"||typeof L==="bigint")Ie=""+L;ge+=qe(Ie,""+D,de+1)}else if(typeof L==="string"||typeof L==="number"||typeof L==="bigint")ge=D==null?ge+qe(""+L,null,de+1):ge+qe(""+L,void 0,de+1);return ge}function ln(D,L){var K=ft(D);if(K===null){K="";for(D=D.child;D;)K+=ln(D,L),D=D.sibling;return K}return Ve(L)+"<"+K+`>
`}function Cn(D,L){var K=Je(D,L);if(K!==D&&(D.children.length!==1||D.children[0]!==K))return Ve(L)+`...
`+Cn(K,L+1);K="";var de=D.fiber._debugInfo;if(de)for(var ge=0;ge<de.length;ge++){var Ie=de[ge].name;typeof Ie==="string"&&(K+=Ve(L)+"<"+Ie+`>
`,L++)}if(de="",ge=D.fiber.pendingProps,D.fiber.tag===6)de=qe(ge,D.serverProps,L),L++;else if(Ie=ft(D.fiber),Ie!==null)if(D.serverProps===void 0){de=L;var ot=120-2*de-Ie.length-2,yt="";for(zn in ge)if(ge.hasOwnProperty(zn)&&zn!=="children"){var hn=Mt(ge[zn],15);if(ot-=zn.length+hn.length+2,0>ot){yt+=" ...";break}yt+=" "+zn+"="+hn}de=Ve(de)+"<"+Ie+yt+`>
`,L++}else D.serverProps===null?(de=Nt(Ie,ge,Ye(L)),L++):typeof D.serverProps==="string"?console.error("Should not have matched a non HostText fiber to a Text node. This is a bug in React."):(de=mn(Ie,ge,D.serverProps,L),L++);var zn="";ge=D.fiber.child;for(Ie=0;ge&&Ie<D.children.length;)ot=D.children[Ie],ot.fiber===ge?(zn+=Cn(ot,L),Ie++):zn+=ln(ge,L),ge=ge.sibling;ge&&0<D.children.length&&(zn+=Ve(L)+`...
`),ge=D.serverTail,D.serverProps===null&&L--;for(D=0;D<ge.length;D++)Ie=ge[D],zn=typeof Ie==="string"?zn+(mt(L)+Oe(Ie,120-2*L)+`
`):zn+Nt(Ie.type,Ie.props,mt(L));return K+de+zn}function vn(D){try{return`
`+Cn(D,0)}catch(L){return""}}function nn(){if(dA===null)return"";var D=dA;try{var L="";switch(D.tag===6&&(D=D.return),D.tag){case 26:case 27:case 5:L+=ye(D.type);break;case 13:L+=ye("Suspense");break;case 19:L+=ye("SuspenseList");break;case 31:L+=ye("Activity");break;case 30:case 0:case 15:case 1:D._debugOwner||L!==""||(L+=st(D.type));break;case 11:D._debugOwner||L!==""||(L+=st(D.type.render))}for(;D;)if(typeof D.tag==="number"){var K=D;D=K._debugOwner;var de=K._debugStack;D&&de&&(typeof de!=="string"&&(K._debugStack=de=ve(de)),de!==""&&(L+=`
`+de))}else if(D.debugStack!=null){var ge=D.debugStack;(D=D.owner)&&ge&&(L+=`
`+ve(ge))}else break;var Ie=L}catch(ot){Ie=`
Error generating stack: `+ot.message+`
`+ot.stack}return Ie}function on(D,L,K,de,ge,Ie,ot){var yt=dA;Kn(D);try{return D!==null&&D._debugTask?D._debugTask.run(L.bind(null,K,de,ge,Ie,ot)):L(K,de,ge,Ie,ot)}finally{Kn(yt)}throw Error("runWithFiberInDEV should never be called in production. This is a bug in React.")}function Kn(D){En.getCurrentStack=D===null?null:nn,I_=!1,dA=D}function xo(D,L){if(D.return===null){if(cu===null)cu={fiber:D,children:[],serverProps:void 0,serverTail:[],distanceFromLeaf:L};else{if(cu.fiber!==D)throw Error("Saw multiple hydration diff roots in a pass. This is a bug in React.");cu.distanceFromLeaf>L&&(cu.distanceFromLeaf=L)}return cu}var K=xo(D.return,L+1).children;if(0<K.length&&K[K.length-1].fiber===D)return K=K[K.length-1],K.distanceFromLeaf>L&&(K.distanceFromLeaf=L),K;return L={fiber:D,children:[],serverProps:void 0,serverTail:[],distanceFromLeaf:L},K.push(L),L}function ai(D,L){wf||(D=xo(D,0),D.serverProps=null,L!==null&&(L=$b(L),D.serverTail.push(L)))}function At(D){var L="",K=cu;throw K!==null&&(cu=null,L=vn(K)),Gn(et(Error(`Hydration failed because the server rendered HTML didn't match the client. As a result this tree will be regenerated on the client. This can happen if a SSR-ed Client Component used:
- A server/client branch \`if (typeof window !== 'undefined')\`.
- Variable input such as \`Date.now()\` or \`Math.random()\` which changes each time it's called.
- Date formatting in a user's locale which doesn't match the server.
- External changing data without sending a snapshot of it along with the HTML.
- Invalid HTML tag nesting.
It can also happen if the client has a browser extension installed which messes with the HTML before React loaded.
https://react.dev/link/hydration-mismatch`+L),D)),X4}function _t(D,L){if(!_p)throw Error("Expected prepareToHydrateHostInstance() to never be called. This error is likely caused by a bug in React. Please file an issue.");tw(D.stateNode,D.type,D.memoizedProps,L,D)||At(D)}function Tt(D){for(ka=D.return;ka;)switch(ka.tag){case 5:case 13:Zs=!1;return;case 27:case 3:Zs=!0;return;default:ka=ka.return}}function Ut(D){if(!_p||D!==ka)return!1;if(!ua)return Tt(D),ua=!0,!1;var L=D.tag;if(ku?L!==3&&L!==27&&(L!==5||Jb(D.type)&&!g_(D.type,D.memoizedProps))&&au&&(Lt(D),At(D)):L!==3&&(L!==5||Jb(D.type)&&!g_(D.type,D.memoizedProps))&&au&&(Lt(D),At(D)),Tt(D),L===13){if(!_p)throw Error("Expected skipPastDehydratedSuspenseInstance() to never be called. This error is likely caused by a bug in React. Please file an issue.");if(D=D.memoizedState,D=D!==null?D.dehydrated:null,!D)throw Error("Expected to have a hydrated suspense instance. This error is likely caused by a bug in React. Please file an issue.");au=nw(D)}else au=ku&&L===27?wP(D.type,au):ka?gp(D.stateNode):null;return!0}function Lt(D){for(var L=au;L;){var K=xo(D,0),de=$b(L);K.serverTail.push(de),L=de.type==="Suspense"?nw(L):gp(L)}}function fn(){_p&&(au=ka=null,wf=ua=!1)}function On(){var D=LC;return D!==null&&(yl===null?yl=D:yl.push.apply(yl,D),LC=null),D}function Gn(D){LC===null?LC=[D]:LC.push(D)}function fo(){var D=cu;if(D!==null){cu=null;for(var L=vn(D);0<D.children.length;)D=D.children[0];on(D.fiber,function(){console.error(`A tree hydrated but some attributes of the server rendered HTML didn't match the client properties. This won't be patched up. This can happen if a SSR-ed Client Component used:
- A server/client branch \`if (typeof window !== 'undefined')\`.
- Variable input such as \`Date.now()\` or \`Math.random()\` which changes each time it's called.
- Date formatting in a user's locale which doesn't match the server.
- External changing data without sending a snapshot of it along with the HTML.
- Invalid HTML tag nesting.
It can also happen if the client has a browser extension installed which messes with the HTML before React loaded.
%s%s`,"https://react.dev/link/hydration-mismatch",L)})}}function Ho(D,L){return D===L&&(D!==0||1/D===1/L)||D!==D&&L!==L}function Vn(){j1=s5=null,M2=!1}function Wn(D,L,K){tl?(T(VP,L._currentValue,D),L._currentValue=K,T(Pm,L._currentRenderer,D),L._currentRenderer!==void 0&&L._currentRenderer!==null&&L._currentRenderer!==r5&&console.error("Detected multiple renderers concurrently rendering the same context provider. This is currently unsupported."),L._currentRenderer=r5):(T(VP,L._currentValue2,D),L._currentValue2=K,T(dw,L._currentRenderer2,D),L._currentRenderer2!==void 0&&L._currentRenderer2!==null&&L._currentRenderer2!==r5&&console.error("Detected multiple renderers concurrently rendering the same context provider. This is currently unsupported."),L._currentRenderer2=r5)}function Co(D,L){var K=VP.current;tl?(D._currentValue=K,K=Pm.current,w(Pm,L),D._currentRenderer=K):(D._currentValue2=K,K=dw.current,w(dw,L),D._currentRenderer2=K),w(VP,L)}function Eo(D,L,K){for(;D!==null;){var de=D.alternate;if((D.childLanes&L)!==L?(D.childLanes|=L,de!==null&&(de.childLanes|=L)):de!==null&&(de.childLanes&L)!==L&&(de.childLanes|=L),D===K)break;D=D.return}D!==K&&console.error("Expected to find the propagation root when scheduling context work. This error is likely caused by a bug in React. Please file an issue.")}function In(D,L,K,de){var ge=D.child;ge!==null&&(ge.return=D);for(;ge!==null;){var Ie=ge.dependencies;if(Ie!==null){var ot=ge.child;Ie=Ie.firstContext;e:for(;Ie!==null;){var yt=Ie;Ie=ge;for(var hn=0;hn<L.length;hn++)if(yt.context===L[hn]){Ie.lanes|=K,yt=Ie.alternate,yt!==null&&(yt.lanes|=K),Eo(Ie.return,K,D),de||(ot=null);break e}Ie=yt.next}}else if(ge.tag===18){if(ot=ge.return,ot===null)throw Error("We just came from a parent so we must have had a parent. This is a bug in React.");ot.lanes|=K,Ie=ot.alternate,Ie!==null&&(Ie.lanes|=K),Eo(ot,K,D),ot=null}else ot=ge.child;if(ot!==null)ot.return=ge;else for(ot=ge;ot!==null;){if(ot===D){ot=null;break}if(ge=ot.sibling,ge!==null){ge.return=ot.return,ot=ge;break}ot=ot.return}ge=ot}}function eo(D,L,K,de){D=null;for(var ge=L,Ie=!1;ge!==null;){if(!Ie){if((ge.flags&524288)!==0)Ie=!0;else if((ge.flags&262144)!==0)break}if(ge.tag===10){var ot=ge.alternate;if(ot===null)throw Error("Should have a current fiber. This is a bug in React.");if(ot=ot.memoizedProps,ot!==null){var yt=ge.type;H0(ge.pendingProps.value,ot.value)||(D!==null?D.push(yt):D=[yt])}}else if(ge===kC.current){if(ot=ge.alternate,ot===null)throw Error("Should have a current fiber. This is a bug in React.");ot.memoizedState.memoizedState!==ge.memoizedState.memoizedState&&(D!==null?D.push(vC):D=[vC])}ge=ge.return}D!==null&&In(L,D,K,de),L.flags|=262144}function co(D){for(D=D.firstContext;D!==null;){var L=D.context;if(!H0(tl?L._currentValue:L._currentValue2,D.memoizedValue))return!0;D=D.next}return!1}function $n(D){s5=D,j1=null,D=D.dependencies,D!==null&&(D.firstContext=null)}function zo(D){return M2&&console.error("Context can only be read while React is rendering. In classes, you can read it in the render method or getDerivedStateFromProps. In function components, you can read it directly in the function body, but not inside Hooks like useReducer() or useMemo()."),fi(s5,D)}function qo(D,L){return s5===null&&$n(D),fi(D,L)}function fi(D,L){var K=tl?L._currentValue:L._currentValue2;if(L={context:L,memoizedValue:K,next:null},j1===null){if(D===null)throw Error("Context can only be read while React is rendering. In classes, you can read it in the render method or getDerivedStateFromProps. In function components, you can read it directly in the function body, but not inside Hooks like useReducer() or useMemo().");j1=L,D.dependencies={lanes:0,firstContext:L,_debugThenableState:null},D.flags|=524288}else j1=j1.next=L;return K}function Nr(){return{controller:new lj,data:new Map,refCount:0}}function bs(D){D.controller.signal.aborted&&console.warn("A cache instance was retained after it was already freed. This likely indicates a bug in React."),D.refCount++}function Fs(D){D.refCount--,0>D.refCount&&console.warn("A cache instance was released after it was already freed. This likely indicates a bug in React."),D.refCount===0&&zN(dj,function(){D.controller.abort()})}function wo(){var D=FC;return FC=0,D}function wr(D){var L=FC;return FC=D,L}function dr(D){var L=FC;return FC+=D,L}function Yr(D){vm=a5(),0>D.actualStartTime&&(D.actualStartTime=vm)}function mc(D){if(0<=vm){var L=a5()-vm;D.actualDuration+=L,D.selfBaseDuration=L,vm=-1}}function zc(D){if(0<=vm){var L=a5()-vm;D.actualDuration+=L,vm=-1}}function nc(){if(0<=vm){var D=a5()-vm;vm=-1,FC+=D}}function Bd(){vm=a5()}function Mh(D){for(var L=D.child;L;)D.actualDuration+=L.actualDuration,L=L.sibling}function Wo(D){D!==b_&&D.next===null&&(b_===null?B2=b_=D:b_=b_.next=D),hw=!0,En.actQueue!==null?GN||(GN=!0,Hs()):WP||(WP=!0,Hs())}function Ti(D,L){if(!mw&&hw){mw=!0;do{var K=!1;for(var de=B2;de!==null;){if(!L)if(D!==0){var ge=de.pendingLanes;if(ge===0)var Ie=0;else{var ot=de.suspendedLanes,yt=de.pingedLanes;Ie=(1<<31-Sm(42|D)+1)-1,Ie&=ge&~(ot&~yt),Ie=Ie&201326741?Ie&201326741|1:Ie?Ie|2:0}Ie!==0&&(K=!0,sf(de,Ie))}else Ie=ta,Ie=H(de,de===Ll?Ie:0,de.cancelPendingCommit!==null||de.timeoutHandle!==Vb),(Ie&3)===0||z(de,Ie)||(K=!0,sf(de,Ie));de=de.next}}while(K);mw=!1}}function zi(){el()}function el(){hw=GN=WP=!1;var D=0;c5!==0&&(CN()&&(D=c5),c5=0);for(var L=x_(),K=null,de=B2;de!==null;){var ge=de.next,Ie=Gc(de,L);if(Ie===0)de.next=null,K===null?B2=ge:K.next=ge,ge===null&&(b_=K);else if(K=de,D!==0||(Ie&3)!==0)hw=!0;de=ge}Ti(D,!1)}function Gc(D,L){for(var{suspendedLanes:K,pingedLanes:de,expirationTimes:ge}=D,Ie=D.pendingLanes&-62914561;0<Ie;){var ot=31-Sm(Ie),yt=1<<ot,hn=ge[ot];if(hn===-1){if((yt&K)===0||(yt&de)!==0)ge[ot]=Y(yt,L)}else hn<=L&&(D.expiredLanes|=yt);Ie&=~yt}if(L=Ll,K=ta,K=H(D,D===L?K:0,D.cancelPendingCommit!==null||D.timeoutHandle!==Vb),de=D.callbackNode,K===0||D===L&&(Qr===x5||Qr===iM)||D.cancelPendingCommit!==null)return de!==null&&B0(de),D.callbackNode=null,D.callbackPriority=0;if((K&3)===0||z(D,K)){if(L=K&-K,L!==D.callbackPriority||En.actQueue!==null&&de!==YN)B0(de);else return L;switch(J(K)){case 2:case 8:K=aw;break;case 32:K=FP;break;case 268435456:K=sc;break;default:K=FP}return de=wd.bind(null,D),En.actQueue!==null?(En.actQueue.push(de),K=YN):K=kP(K,de),D.callbackPriority=L,D.callbackNode=K,L}return de!==null&&B0(de),D.callbackPriority=2,D.callbackNode=null,2}function wd(D,L){if(uw=UP=!1,Bm!==Gu&&Bm!==_j)return D.callbackNode=null,D.callbackPriority=0,null;var K=D.callbackNode;if(bC(!0)&&D.callbackNode!==K)return null;var de=ta;if(de=H(D,D===Ll?de:0,D.cancelPendingCommit!==null||D.timeoutHandle!==Vb),de===0)return null;return yC(D,de,L),Gc(D,x_()),D.callbackNode!=null&&D.callbackNode===K?wd.bind(null,D):null}function sf(D,L){if(bC())return null;UP=uw,uw=!1,yC(D,L,!0)}function B0(D){D!==YN&&D!==null&&n5(D)}function Hs(){En.actQueue!==null&&En.actQueue.push(function(){return el(),null}),EC?md(function(){(Ma&(zu|mA))!==Ou?kP(Mf,zi):el()}):kP(Mf,zi)}function sh(){return c5===0&&(c5=U()),c5}function w0(D,L){if(XP===null){var K=XP=[];q1=0,l5=sh(),KP={status:"pending",value:void 0,then:function(de){K.push(de)}}}return q1++,L.then(tu,tu),L}function tu(){if(--q1===0&&XP!==null){KP!==null&&(KP.status="fulfilled");var D=XP;XP=null,l5=0,KP=null;for(var L=0;L<D.length;L++)(0,D[L])()}}function wu(D,L){var K=[],de={status:"pending",value:null,reason:null,then:function(ge){K.push(ge)}};return D.then(function(){de.status="fulfilled",de.value=L;for(var ge=0;ge<K.length;ge++)(0,K[ge])(L)},function(ge){de.status="rejected",de.reason=ge;for(ge=0;ge<K.length;ge++)(0,K[ge])(void 0)}),de}function Rr(){var D=w2.current;return D!==null?D:Ll.pooledCache}function Yc(D,L){L===null?T(w2,w2.current,D):T(w2,L.pool,D)}function Ns(){var D=Rr();return D===null?null:{parent:tl?Rl._currentValue:Rl._currentValue2,pool:D}}function ja(D,L){if(H0(D,L))return!0;if(typeof D!=="object"||D===null||typeof L!=="object"||L===null)return!1;var K=Object.keys(D),de=Object.keys(L);if(K.length!==de.length)return!1;for(de=0;de<K.length;de++){var ge=K[de];if(!iO.call(L,ge)||!H0(D[ge],L[ge]))return!1}return!0}function Rs(){return{didWarnAboutUncachedPromise:!1,thenables:[]}}function Vi(D){return D=D.status,D==="fulfilled"||D==="rejected"}function xa(){}function Tl(D,L,K){En.actQueue!==null&&(En.didUsePromise=!0);var de=D.thenables;switch(K=de[K],K===void 0?de.push(L):K!==L&&(D.didWarnAboutUncachedPromise||(D.didWarnAboutUncachedPromise=!0,console.error("A component was suspended by an uncached promise. Creating promises inside a Client Component or hook is not yet supported, except via a Suspense-compatible library or framework.")),L.then(xa,xa),L=K),L.status){case"fulfilled":return L.value;case"rejected":throw D=L.reason,Td(D),D;default:if(typeof L.status==="string")L.then(xa,xa);else{if(D=Ll,D!==null&&100<D.shellSuspendCounter)throw Error("An unknown Component is an async Client Component. Only Server Components can be async at the moment. This error is often caused by accidentally adding `'use client'` to a module that was originally written for the server.");D=L,D.status="pending",D.then(function(ge){if(L.status==="pending"){var Ie=L;Ie.status="fulfilled",Ie.value=ge}},function(ge){if(L.status==="pending"){var Ie=L;Ie.status="rejected",Ie.reason=ge}})}switch(L.status){case"fulfilled":return L.value;case"rejected":throw D=L.reason,Td(D),D}throw ev=L,O0=!0,ZP}}function cs(){if(ev===null)throw Error("Expected a suspended thenable. This is a bug in React. Please file an issue.");var D=ev;return ev=null,O0=!1,D}function Td(D){if(D===ZP||D===j4)throw Error("Hooks are not supported inside an async component. This error is often caused by accidentally adding `'use client'` to a module that was originally written for the server.")}function Dl(){for(var D=N2,L=q4=N2=0;L<D;){var K=Em[L];Em[L++]=null;var de=Em[L];Em[L++]=null;var ge=Em[L];Em[L++]=null;var Ie=Em[L];if(Em[L++]=null,de!==null&&ge!==null){var ot=de.pending;ot===null?ge.next=ge:(ge.next=ot.next,ot.next=ge),de.pending=ge}Ie!==0&&af(K,ge,Ie)}}function Dd(D,L,K,de){Em[N2++]=D,Em[N2++]=L,Em[N2++]=K,Em[N2++]=de,q4|=de,D.lanes|=de,D=D.alternate,D!==null&&(D.lanes|=de)}function tA(D,L,K,de){return Dd(D,L,K,de),r_(D)}function Tu(D,L){return Dd(D,null,null,L),r_(D)}function af(D,L,K){D.lanes|=K;var de=D.alternate;de!==null&&(de.lanes|=K);for(var ge=!1,Ie=D.return;Ie!==null;)Ie.childLanes|=K,de=Ie.alternate,de!==null&&(de.childLanes|=K),Ie.tag===22&&(D=Ie.stateNode,D===null||D._visibility&1||(ge=!0)),D=Ie,Ie=Ie.return;return D.tag===3?(Ie=D.stateNode,ge&&L!==null&&(ge=31-Sm(K),D=Ie.hiddenUpdates,de=D[ge],de===null?D[ge]=[L]:de.push(L),L.lane=K|536870912),Ie):null}function r_(D){if(Ew>DSe)throw gv=Ew=0,Mw=_O=null,Error("Maximum update depth exceeded. This can happen when a component repeatedly calls setState inside componentWillUpdate or componentDidUpdate. React limits the number of nested updates to prevent infinite loops.");gv>eae&&(gv=0,Mw=null,console.error("Maximum update depth exceeded. This can happen when a component calls setState inside useEffect, but useEffect either doesn't have a dependency array, or one of the dependencies changes on every render.")),D.alternate===null&&(D.flags&4098)!==0&&AN(D);for(var L=D,K=L.return;K!==null;)L.alternate===null&&(L.flags&4098)!==0&&AN(D),L=K,K=L.return;return L.tag===3?L.stateNode:null}function Bh(D){D.updateQueue={baseState:D.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,lanes:0,hiddenCallbacks:null},callbacks:null}}function lp(D,L){D=D.updateQueue,L.updateQueue===D&&(L.updateQueue={baseState:D.baseState,firstBaseUpdate:D.firstBaseUpdate,lastBaseUpdate:D.lastBaseUpdate,shared:D.shared,callbacks:null})}function nu(D){return{lane:D,tag:J4,payload:null,callback:null,next:null}}function gm(D,L,K){var de=D.updateQueue;if(de===null)return null;if(de=de.shared,KN===de&&!XN){var ge=E(D);console.error(`An update (setState, replaceState, or forceUpdate) was scheduled from inside an update function. Update functions should be pure, with zero side-effects. Consider using componentDidUpdate or a callback.
Please update the following component: %s`,ge),XN=!0}if((Ma&zu)!==Ou)return ge=de.pending,ge===null?L.next=L:(L.next=ge.next,ge.next=L),de.pending=L,L=r_(D),af(D,null,K),L;return Dd(D,de,L,K),r_(D)}function jl(D,L,K){if(L=L.updateQueue,L!==null&&(L=L.shared,(K&4194048)!==0)){var de=L.lanes;de&=D.pendingLanes,K|=de,L.lanes=K,ne(D,K)}}function k1(D,L){var K=D.updateQueue,de=D.alternate;if(de!==null&&(de=de.updateQueue,K===de)){var ge=null,Ie=null;if(K=K.firstBaseUpdate,K!==null){do{var ot={lane:K.lane,tag:K.tag,payload:K.payload,callback:null,next:null};Ie===null?ge=Ie=ot:Ie=Ie.next=ot,K=K.next}while(K!==null);Ie===null?ge=Ie=L:Ie=Ie.next=L}else ge=Ie=L;K={baseState:de.baseState,firstBaseUpdate:ge,lastBaseUpdate:Ie,shared:de.shared,callbacks:de.callbacks},D.updateQueue=K;return}D=K.lastBaseUpdate,D===null?K.firstBaseUpdate=L:D.next=L,K.lastBaseUpdate=L}function fm(){if(_w){var D=KP;if(D!==null)throw D}}function Z_(D,L,K,de){_w=!1;var ge=D.updateQueue;R2=!1,KN=ge.shared;var{firstBaseUpdate:Ie,lastBaseUpdate:ot}=ge,yt=ge.shared.pending;if(yt!==null){ge.shared.pending=null;var hn=yt,zn=hn.next;hn.next=null,ot===null?Ie=zn:ot.next=zn,ot=hn;var Qo=D.alternate;Qo!==null&&(Qo=Qo.updateQueue,yt=Qo.lastBaseUpdate,yt!==ot&&(yt===null?Qo.firstBaseUpdate=zn:yt.next=zn,Qo.lastBaseUpdate=hn))}if(Ie!==null){var Go=ge.baseState;ot=0,Qo=zn=hn=null,yt=Ie;do{var di=yt.lane&-536870913,kr=di!==yt.lane;if(kr?(ta&di)===di:(de&di)===di){di!==0&&di===l5&&(_w=!0),Qo!==null&&(Qo=Qo.next={lane:0,tag:yt.tag,payload:yt.payload,callback:null,next:null});e:{di=D;var wc=yt,ww=L,Tw=K;switch(wc.tag){case UN:if(wc=wc.payload,typeof wc==="function"){M2=!0;var V2=wc.call(Tw,Go,ww);if(di.mode&8){se(!0);try{wc.call(Tw,Go,ww)}finally{se(!1)}}M2=!1,Go=V2;break e}Go=wc;break e;case WN:di.flags=di.flags&-65537|128;case J4:if(V2=wc.payload,typeof V2==="function"){if(M2=!0,wc=V2.call(Tw,Go,ww),di.mode&8){se(!0);try{V2.call(Tw,Go,ww)}finally{se(!1)}}M2=!1}else wc=V2;if(wc===null||wc===void 0)break e;Go=Nh({},Go,wc);break e;case $4:R2=!0}}di=yt.callback,di!==null&&(D.flags|=64,kr&&(D.flags|=8192),kr=ge.callbacks,kr===null?ge.callbacks=[di]:kr.push(di))}else kr={lane:di,tag:yt.tag,payload:yt.payload,callback:yt.callback,next:null},Qo===null?(zn=Qo=kr,hn=Go):Qo=Qo.next=kr,ot|=di;if(yt=yt.next,yt===null)if(yt=ge.shared.pending,yt===null)break;else kr=yt,yt=kr.next,kr.next=null,ge.lastBaseUpdate=kr,ge.shared.pending=null}while(1);Qo===null&&(hn=Go),ge.baseState=hn,ge.firstBaseUpdate=zn,ge.lastBaseUpdate=Qo,Ie===null&&(ge.shared.lanes=0),mv|=ot,D.lanes=ot,D.memoizedState=Go}KN=null}function cf(D,L){if(typeof D!=="function")throw Error("Invalid argument passed as callback. Expected a function. Instead received: "+D);D.call(L)}function yb(D,L){var K=D.shared.hiddenCallbacks;if(K!==null)for(D.shared.hiddenCallbacks=null,D=0;D<K.length;D++)cf(K[D],L)}function ah(D,L){var K=D.callbacks;if(K!==null)for(D.callbacks=null,D=0;D<K.length;D++)cf(K[D],L)}function xb(D,L){var K=jC;T(nv,K,D),T(tv,L,D),jC=K|L.baseLanes}function lf(D){T(nv,jC,D),T(tv,tv.current,D)}function Nd(D){jC=nv.current,w(tv,D),w(nv,D)}function As(){var D=Qn;S_===null?S_=[D]:S_.push(D)}function Ao(){var D=Qn;if(S_!==null&&(hA++,S_[hA]!==D)){var L=E(Dr);if(!rO.has(L)&&(rO.add(L),S_!==null)){for(var K="",de=0;de<=hA;de++){var ge=S_[de],Ie=de===hA?D:ge;for(ge=de+1+". "+ge;30>ge.length;)ge+=" ";ge+=Ie+`
`,K+=ge}console.error(`React has detected a change in the order of Hooks called by %s. This will lead to bugs and errors if not fixed. For more information, read the Rules of Hooks: https://react.dev/link/rules-of-hooks
Previous render Next render
------------------------------------------------------
%s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
`,L,K)}}}function dd(D){D===void 0||D===null||ic(D)||console.error("%s received a final argument that is not an array (instead, received `%s`). When specified, the final argument must be an array.",Qn,typeof D)}function pc(){var D=E(Dr);sO.has(D)||(sO.add(D),console.error("ReactDOM.useFormState has been renamed to React.useActionState. Please update %s to use React.useActionState.",D))}function Ys(){throw Error(`Invalid hook call. Hooks can only be called inside of the body of a function component. This could happen for one of the following reasons:
1. You might have mismatching versions of React and the renderer (such as React DOM)
2. You might be breaking the Rules of Hooks
3. You might have more than one copy of React in the same app
See https://react.dev/link/invalid-hook-call for tips about how to debug and fix this problem.`)}function nA(D,L){if(eM)return!1;if(L===null)return console.error("%s received a final argument during this render, but not during the previous render. Even though the final argument is optional, its type cannot change between renders.",Qn),!1;D.length!==L.length&&console.error(`The final argument passed to %s changed size between renders. The order and size of this array must remain constant.
Previous: %s
Incoming: %s`,Qn,"["+L.join(", ")+"]","["+D.join(", ")+"]");for(var K=0;K<L.length&&K<D.length;K++)if(!H0(D[K],L[K]))return!1;return!0}function cC(D,L,K,de,ge,Ie){if(Q2=Ie,Dr=L,S_=D!==null?D._debugHookTypes:null,hA=-1,eM=D!==null&&D.type!==L.type,Object.prototype.toString.call(K)==="[object AsyncFunction]"||Object.prototype.toString.call(K)==="[object AsyncGeneratorFunction]")Ie=E(Dr),Z4.has(Ie)||(Z4.add(Ie),console.error("%s is an async Client Component. Only Server Components can be async at the moment. This error is often caused by accidentally adding `'use client'` to a module that was originally written for the server.",Ie===null?"An unknown Component":"<"+Ie+">"));L.memoizedState=null,L.updateQueue=null,L.lanes=0,En.H=D!==null&&D.memoizedState!==null?fw:S_!==null?p5:zC,k2=Ie=(L.mode&8)!==Bc;var ot=yw(K,de,ge);if(k2=!1,OC&&(ot=lC(L,K,de,ge)),Ie){se(!0);try{ot=lC(L,K,de,ge)}finally{se(!1)}}return r9(D,L),ot}function r9(D,L){L._debugHookTypes=S_,L.dependencies===null?J1!==null&&(L.dependencies={lanes:0,firstContext:null,_debugThenableState:J1}):L.dependencies._debugThenableState=J1,En.H=ov;var K=gc!==null&&gc.next!==null;if(Q2=0,S_=Qn=Fu=gc=Dr=null,hA=-1,D!==null&&(D.flags&65011712)!==(L.flags&65011712)&&console.error("Internal React error: Expected static flag was missing. Please notify the React team."),G0=!1,m5=0,J1=null,K)throw Error("Rendered fewer hooks than expected. This may be caused by an accidental early return statement.");D===null||Xc||(D=D.dependencies,D!==null&&co(D)&&(Xc=!0)),O0?(O0=!1,D=!0):D=!1,D&&(L=E(L)||"Unknown",gw.has(L)||Z4.has(L)||(gw.add(L),console.error("`use` was called from inside a try/catch block. This is not allowed and can lead to unexpected behavior. To handle errors triggered by `use`, wrap your component in a error boundary.")))}function lC(D,L,K,de){Dr=D;var ge=0;do{if(OC&&(J1=null),m5=0,OC=!1,ge>=cO)throw Error("Too many re-renders. React limits the number of renders to prevent an infinite loop.");if(ge+=1,eM=!1,Fu=gc=null,D.updateQueue!=null){var Ie=D.updateQueue;Ie.lastEffect=null,Ie.events=null,Ie.stores=null,Ie.memoCache!=null&&(Ie.memoCache.index=0)}hA=-1,En.H=iv,Ie=yw(L,K,de)}while(OC);return Ie}function ZD(){var D=En.H,L=D.useState()[0];return L=typeof L.then==="function"?dp(L):L,D=D.useState()[0],(gc!==null?gc.memoizedState:null)!==D&&(Dr.flags|=1024),L}function h2(){var D=L2!==0;return L2=0,D}function m2(D,L,K){L.updateQueue=D.updateQueue,L.flags=(L.mode&16)!==Bc?L.flags&-402655237:L.flags&-2053,D.lanes&=~K}function iP(D){if(G0){for(D=D.memoizedState;D!==null;){var L=D.queue;L!==null&&(L.pending=null),D=D.next}G0=!1}Q2=0,S_=Fu=gc=Dr=null,hA=-1,Qn=null,OC=!1,m5=L2=0,J1=null}function Du(){var D={memoizedState:null,baseState:null,baseQueue:null,queue:null,next:null};return Fu===null?Dr.memoizedState=Fu=D:Fu=Fu.next=D,Fu}function oc(){if(gc===null){var D=Dr.alternate;D=D!==null?D.memoizedState:null}else D=gc.next;var L=Fu===null?Dr.memoizedState:Fu.next;if(L!==null)Fu=L,gc=D;else{if(D===null){if(Dr.alternate===null)throw Error("Update hook called on initial render. This is likely a bug in React. Please file an issue.");throw Error("Rendered more hooks than during the previous render.")}gc=D,D={memoizedState:gc.memoizedState,baseState:gc.baseState,baseQueue:gc.baseQueue,queue:gc.queue,next:null},Fu===null?Dr.memoizedState=Fu=D:Fu=Fu.next=D}return Fu}function rP(){return{lastEffect:null,events:null,stores:null,memoCache:null}}function dp(D){var L=m5;return m5+=1,J1===null&&(J1=Rs()),D=Tl(J1,D,L),L=Dr,(Fu===null?L.memoizedState:Fu.next)===null&&(L=L.alternate,En.H=L!==null&&L.memoizedState!==null?fw:zC),D}function df(D){if(D!==null&&typeof D==="object"){if(typeof D.then==="function")return dp(D);if(D.$$typeof===Cf)return zo(D)}throw Error("An unsupported type was passed to use(): "+String(D))}function T0(D){var L=null,K=Dr.updateQueue;if(K!==null&&(L=K.memoCache),L==null){var de=Dr.alternate;de!==null&&(de=de.updateQueue,de!==null&&(de=de.memoCache,de!=null&&(L={data:de.data.map(function(ge){return ge.slice()}),index:0})))}if(L==null&&(L={data:[],index:0}),K===null&&(K=rP(),Dr.updateQueue=K),K.memoCache=L,K=L.data[L.index],K===void 0||eM)for(K=L.data[L.index]=Array(D),de=0;de<D;de++)K[de]=v2;else K.length!==D&&console.error("Expected a constant size argument for each invocation of useMemoCache. The previous cache was allocated with size %s but size %s was requested.",K.length,D);return L.index++,K}function wh(D,L){return typeof L==="function"?L(D):L}function D0(D,L,K){var de=Du();if(K!==void 0){var ge=K(L);if(k2){se(!0);try{K(L)}finally{se(!1)}}}else ge=L;return de.memoizedState=de.baseState=ge,D={pending:null,lanes:0,dispatch:null,lastRenderedReducer:D,lastRenderedState:ge},de.queue=D,D=D.dispatch=uC.bind(null,Dr,D),[de.memoizedState,D]}function N0(D){var L=oc();return sP(L,gc,D)}function sP(D,L,K){var de=D.queue;if(de===null)throw Error("Should have a queue. You are likely calling Hooks conditionally, which is not allowed. (https://react.dev/link/invalid-hook-call)");de.lastRenderedReducer=K;var ge=D.baseQueue,Ie=de.pending;if(Ie!==null){if(ge!==null){var ot=ge.next;ge.next=Ie.next,Ie.next=ot}L.baseQueue!==ge&&console.error("Internal error: Expected work-in-progress queue to be a clone. This is a bug in React."),L.baseQueue=ge=Ie,de.pending=null}if(Ie=D.baseState,ge===null)D.memoizedState=Ie;else{L=ge.next;var yt=ot=null,hn=null,zn=L,Qo=!1;do{var Go=zn.lane&-536870913;if(Go!==zn.lane?(ta&Go)===Go:(Q2&Go)===Go){var di=zn.revertLane;if(di===0)hn!==null&&(hn=hn.next={lane:0,revertLane:0,action:zn.action,hasEagerState:zn.hasEagerState,eagerState:zn.eagerState,next:null}),Go===l5&&(Qo=!0);else if((Q2&di)===di){zn=zn.next,di===l5&&(Qo=!0);continue}else Go={lane:0,revertLane:zn.revertLane,action:zn.action,hasEagerState:zn.hasEagerState,eagerState:zn.eagerState,next:null},hn===null?(yt=hn=Go,ot=Ie):hn=hn.next=Go,Dr.lanes|=di,mv|=di;Go=zn.action,k2&&K(Ie,Go),Ie=zn.hasEagerState?zn.eagerState:K(Ie,Go)}else di={lane:Go,revertLane:zn.revertLane,action:zn.action,hasEagerState:zn.hasEagerState,eagerState:zn.eagerState,next:null},hn===null?(yt=hn=di,ot=Ie):hn=hn.next=di,Dr.lanes|=Go,mv|=Go;zn=zn.next}while(zn!==null&&zn!==L);if(hn===null?ot=Ie:hn.next=yt,!H0(Ie,D.memoizedState)&&(Xc=!0,Qo&&(K=KP,K!==null)))throw K;D.memoizedState=Ie,D.baseState=ot,D.baseQueue=hn,de.lastRenderedState=Ie}return ge===null&&(de.lanes=0),[D.memoizedState,de.dispatch]}function ym(D){var L=oc(),K=L.queue;if(K===null)throw Error("Should have a queue. You are likely calling Hooks conditionally, which is not allowed. (https://react.dev/link/invalid-hook-call)");K.lastRenderedReducer=D;var{dispatch:de,pending:ge}=K,Ie=L.memoizedState;if(ge!==null){K.pending=null;var ot=ge=ge.next;do Ie=D(Ie,ot.action),ot=ot.next;while(ot!==ge);H0(Ie,L.memoizedState)||(Xc=!0),L.memoizedState=Ie,L.baseQueue===null&&(L.baseState=Ie),K.lastRenderedState=Ie}return[Ie,de]}function u4(D,L,K){var de=Dr,ge=Du();if(ua){if(K===void 0)throw Error("Missing getServerSnapshot, which is required for server-rendered content. Will revert to client rendering.");var Ie=K();h5||Ie===K()||(console.error("The result of getServerSnapshot should be cached to avoid an infinite loop"),h5=!0)}else{if(Ie=L(),h5||(K=L(),H0(Ie,K)||(console.error("The result of getSnapshot should be cached to avoid an infinite loop"),h5=!0)),Ll===null)throw Error("Expected a work-in-progress root. This is a bug in React. Please file an issue.");(ta&124)!==0||s_(de,L,Ie)}return ge.memoizedState=Ie,K={value:Ie,getSnapshot:L},ge.queue=K,Qa(Cb.bind(null,de,K,D),[D]),de.flags|=2048,yi(ql|Ql,Ss(),Zh.bind(null,de,K,Ie,L),null),Ie}function ch(D,L,K){var de=Dr,ge=oc(),Ie=ua;if(Ie){if(K===void 0)throw Error("Missing getServerSnapshot, which is required for server-rendered content. Will revert to client rendering.");K=K()}else if(K=L(),!h5){var ot=L();H0(K,ot)||(console.error("The result of getSnapshot should be cached to avoid an infinite loop"),h5=!0)}if(ot=!H0((gc||ge).memoizedState,K))ge.memoizedState=K,Xc=!0;ge=ge.queue;var yt=Cb.bind(null,de,ge,D);if(Ps(2048,Ql,yt,[D]),ge.getSnapshot!==L||ot||Fu!==null&&Fu.memoizedState.tag&ql){if(de.flags|=2048,yi(ql|Ql,Ss(),Zh.bind(null,de,ge,K,L),null),Ll===null)throw Error("Expected a work-in-progress root. This is a bug in React. Please file an issue.");Ie||(Q2&124)!==0||s_(de,L,K)}return K}function s_(D,L,K){D.flags|=16384,D={getSnapshot:L,value:K},L=Dr.updateQueue,L===null?(L=rP(),Dr.updateQueue=L,L.stores=[D]):(K=L.stores,K===null?L.stores=[D]:K.push(D))}function Zh(D,L,K,de){L.value=K,L.getSnapshot=de,pl(L)&&a_(D)}function Cb(D,L,K){return K(function(){pl(L)&&a_(D)})}function pl(D){var L=D.getSnapshot;D=D.value;try{var K=L();return!H0(D,K)}catch(de){return!0}}function a_(D){var L=Tu(D,2);L!==null&&Rd(L,D,2)}function dC(D){var L=Du();if(typeof D==="function"){var K=D;if(D=K(),k2){se(!0);try{K()}finally{se(!1)}}}return L.memoizedState=L.baseState=D,L.queue={pending:null,lanes:0,dispatch:null,lastRenderedReducer:wh,lastRenderedState:D},L}function uf(D){D=dC(D);var L=D.queue,K=_4.bind(null,Dr,L);return L.dispatch=K,[D.memoizedState,K]}function hf(D){var L=Du();L.memoizedState=L.baseState=D;var K={pending:null,lanes:0,dispatch:null,lastRenderedReducer:null,lastRenderedState:null};return L.queue=K,L=lP.bind(null,Dr,!0,K),K.dispatch=L,[D,L]}function Nu(D,L){var K=oc();return h4(K,gc,D,L)}function h4(D,L,K,de){return D.baseState=K,sP(D,gc,typeof de==="function"?de:wh)}function p2(D,L){var K=oc();if(gc!==null)return h4(K,gc,D,L);return K.baseState=D,[D,K.queue.dispatch]}function m4(D,L,K,de,ge){if(hC(D))throw Error("Cannot update form state while rendering.");if(D=L.action,D!==null){var Ie={payload:ge,action:D,next:null,isTransition:!0,status:"pending",value:null,reason:null,listeners:[],then:function(ot){Ie.listeners.push(ot)}};En.T!==null?K(!0):Ie.isTransition=!1,de(Ie),K=L.pending,K===null?(Ie.next=L.pending=Ie,A2(L,Ie)):(Ie.next=K.next,L.pending=K.next=Ie)}}function A2(D,L){var{action:K,payload:de}=L,ge=D.state;if(L.isTransition){var Ie=En.T,ot={};En.T=ot,En.T._updatedFibers=new Set;try{var yt=K(ge,de),hn=En.S;hn!==null&&hn(ot,yt),Ge(D,L,yt)}catch(zn){It(D,L,zn)}finally{En.T=Ie,Ie===null&&ot._updatedFibers&&(D=ot._updatedFibers.size,ot._updatedFibers.clear(),10<D&&console.warn("Detected a large number of updates inside startTransition. If this is due to a subscription please re-write it to use React provided hooks. Otherwise concurrent mode guarantees are off the table."))}}else try{ot=K(ge,de),Ge(D,L,ot)}catch(zn){It(D,L,zn)}}function Ge(D,L,K){K!==null&&typeof K==="object"&&typeof K.then==="function"?(K.then(function(de){nt(D,L,de)},function(de){return It(D,L,de)}),L.isTransition||console.error("An async function with useActionState was called outside of a transition. This is likely not what you intended (for example, isPending will not update correctly). Either call the returned function inside startTransition, or pass it to an `action` or `formAction` prop.")):nt(D,L,K)}function nt(D,L,K){L.status="fulfilled",L.value=K,Wt(L),D.state=K,L=D.pending,L!==null&&(K=L.next,K===L?D.pending=null:(K=K.next,L.next=K,A2(D,K)))}function It(D,L,K){var de=D.pending;if(D.pending=null,de!==null){de=de.next;do L.status="rejected",L.reason=K,Wt(L),L=L.next;while(L!==de)}D.action=null}function Wt(D){D=D.listeners;for(var L=0;L<D.length;L++)(0,D[L])()}function dn(D,L){return L}function yn(D,L){if(ua){var K=Ll.formState;if(K!==null){e:{var de=Dr;if(ua){if(au){var ge=Pf(au,Zs);if(ge){au=gp(ge),de=$H(ge);break e}}At(de)}de=!1}de&&(L=K[0])}}K=Du(),K.memoizedState=K.baseState=L,de={pending:null,lanes:0,dispatch:null,lastRenderedReducer:dn,lastRenderedState:L},K.queue=de,K=_4.bind(null,Dr,de),de.dispatch=K,de=dC(!1);var Ie=lP.bind(null,Dr,!1,de.queue);return de=Du(),ge={state:L,dispatch:null,action:D,pending:null},de.queue=ge,K=m4.bind(null,Dr,ge,Ie,K),ge.dispatch=K,de.memoizedState=D,[L,K,!1]}function Sn(D){var L=oc();return Jn(L,gc,D)}function Jn(D,L,K){if(L=sP(D,L,dn)[0],D=N0(wh)[0],typeof L==="object"&&L!==null&&typeof L.then==="function")try{var de=dp(L)}catch(ot){if(ot===ZP)throw j4;throw ot}else de=L;L=oc();var ge=L.queue,Ie=ge.dispatch;return K!==L.memoizedState&&(Dr.flags|=2048,yi(ql|Ql,Ss(),Io.bind(null,ge,K),null)),[de,Ie,D]}function Io(D,L){D.action=L}function Vo(D){var L=oc(),K=gc;if(K!==null)return Jn(L,K,D);oc(),L=L.memoizedState,K=oc();var de=K.queue.dispatch;return K.memoizedState=D,[L,de,!1]}function yi(D,L,K,de){return D={tag:D,create:K,deps:de,inst:L,next:null},L=Dr.updateQueue,L===null&&(L=rP(),Dr.updateQueue=L),K=L.lastEffect,K===null?L.lastEffect=D.next=D:(de=K.next,K.next=D,D.next=de,L.lastEffect=D),D}function Ss(){return{destroy:void 0,resource:void 0}}function Vs(D){var L=Du();return D={current:D},L.memoizedState=D}function _s(D,L,K,de){var ge=Du();de=de===void 0?null:de,Dr.flags|=D,ge.memoizedState=yi(ql|L,Ss(),K,de)}function Ps(D,L,K,de){var ge=oc();de=de===void 0?null:de;var Ie=ge.memoizedState.inst;gc!==null&&de!==null&&nA(de,gc.memoizedState.deps)?ge.memoizedState=yi(L,Ie,K,de):(Dr.flags|=D,ge.memoizedState=yi(ql|L,Ie,K,de))}function Qa(D,L){(Dr.mode&16)!==Bc&&(Dr.mode&64)===Bc?_s(276826112,Ql,D,L):_s(8390656,Ql,D,L)}function e0(D,L){var K=4194308;return(Dr.mode&16)!==Bc&&(K|=134217728),_s(K,Lh,D,L)}function zt(D,L){if(typeof L==="function"){D=D();var K=L(D);return function(){typeof K==="function"?K():L(null)}}if(L!==null&&L!==void 0)return L.hasOwnProperty("current")||console.error("Expected useImperativeHandle() first argument to either be a ref callback or React.createRef() object. Instead received: %s.","an object with keys {"+Object.keys(L).join(", ")+"}"),D=D(),L.current=D,function(){L.current=null}}function An(D,L,K){typeof L!=="function"&&console.error("Expected useImperativeHandle() second argument to be a function that creates a handle. Instead received: %s.",L!==null?typeof L:"null"),K=K!==null&&K!==void 0?K.concat([D]):null;var de=4194308;(Dr.mode&16)!==Bc&&(de|=134217728),_s(de,Lh,zt.bind(null,L,D),K)}function Un(D,L,K){typeof L!=="function"&&console.error("Expected useImperativeHandle() second argument to be a function that creates a handle. Instead received: %s.",L!==null?typeof L:"null"),K=K!==null&&K!==void 0?K.concat([D]):null,Ps(4,Lh,zt.bind(null,L,D),K)}function ao(D,L){return Du().memoizedState=[D,L===void 0?null:L],D}function $i(D,L){var K=oc();L=L===void 0?null:L;var de=K.memoizedState;if(L!==null&&nA(L,de[1]))return de[0];return K.memoizedState=[D,L],D}function vs(D,L){var K=Du();L=L===void 0?null:L;var de=D();if(k2){se(!0);try{D()}finally{se(!1)}}return K.memoizedState=[de,L],de}function Vr(D,L){var K=oc();L=L===void 0?null:L;var de=K.memoizedState;if(L!==null&&nA(L,de[1]))return de[0];if(de=D(),k2){se(!0);try{D()}finally{se(!1)}}return K.memoizedState=[de,L],de}function Us(D,L){var K=Du();return hp(K,D,L)}function Nl(D,L){var K=oc();return Vc(K,gc.memoizedState,D,L)}function up(D,L){var K=oc();return gc===null?hp(K,D,L):Vc(K,gc.memoizedState,D,L)}function hp(D,L,K){if(K===void 0||(Q2&1073741824)!==0)return D.memoizedState=L;return D.memoizedState=K,D=kb(),Dr.lanes|=D,mv|=D,K}function Vc(D,L,K,de){if(H0(K,L))return K;if(tv.current!==null)return D=hp(D,K,de),H0(D,L)||(Xc=!0),D;if((Q2&42)===0)return Xc=!0,D.memoizedState=K;return D=kb(),Dr.lanes|=D,mv|=D,L}function p4(D,L,K,de,ge){var Ie=bf();ru(Ie!==0&&8>Ie?Ie:8);var ot=En.T,yt={};En.T=yt,lP(D,!1,L,K),yt._updatedFibers=new Set;try{var hn=ge(),zn=En.S;if(zn!==null&&zn(yt,hn),hn!==null&&typeof hn==="object"&&typeof hn.then==="function"){var Qo=wu(hn,de);f2(D,L,Qo,Im(D))}else f2(D,L,de,Im(D))}catch(Go){f2(D,L,{then:function(){},status:"rejected",reason:Go},Im(D))}finally{ru(Ie),En.T=ot,ot===null&&yt._updatedFibers&&(D=yt._updatedFibers.size,yt._updatedFibers.clear(),10<D&&console.warn("Detected a large number of updates inside startTransition. If this is due to a subscription please re-write it to use React provided hooks. Otherwise concurrent mode guarantees are off the table."))}}function _2(D){var L=D.memoizedState;if(L!==null)return L;L={memoizedState:Ub,baseState:Ub,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:wh,lastRenderedState:Ub},next:null};var K={};return L.next={memoizedState:K,baseState:K,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:wh,lastRenderedState:K},next:null},D.memoizedState=L,D=D.alternate,D!==null&&(D.memoizedState=L),L}function g2(){var D=dC(!1);return D=p4.bind(null,Dr,D.queue,!0,!1),Du().memoizedState=D,[!1,D]}function eN(){var D=N0(wh)[0],L=oc().memoizedState;return[typeof D==="boolean"?D:dp(D),L]}function A4(){var D=ym(wh)[0],L=oc().memoizedState;return[typeof D==="boolean"?D:dp(D),L]}function oA(){return zo(vC)}function c_(){var D=Du(),L=Ll.identifierPrefix;if(ua){var K=Bf,de=pg;K=(de&~(1<<32-Sm(de)-1)).toString(32)+K,L="«"+L+"R"+K,K=L2++,0<K&&(L+="H"+K.toString(32)),L+="»"}else K=aO++,L="«"+L+"r"+K.toString(32)+"»";return D.memoizedState=L}function aP(){return Du().memoizedState=cP.bind(null,Dr)}function cP(D,L){for(var K=D.return;K!==null;){switch(K.tag){case 24:case 3:var de=Im(K);D=nu(de);var ge=gm(K,D,de);ge!==null&&(Rd(ge,K,de),jl(ge,K,de)),K=Nr(),L!==null&&L!==void 0&&ge!==null&&console.error("The seed argument is not enabled outside experimental channels."),D.payload={cache:K};return}K=K.return}}function uC(D,L,K){var de=arguments;typeof de[3]==="function"&&console.error("State updates from the useState() and useReducer() Hooks don't support the second callback argument. To execute a side effect after rendering, declare it in the component body with useEffect()."),de=Im(D);var ge={lane:de,revertLane:0,action:K,hasEagerState:!1,eagerState:null,next:null};hC(D)?y2(L,ge):(ge=tA(D,L,ge,de),ge!==null&&(Rd(ge,D,de),eg(ge,L,de))),Ee(D,de)}function _4(D,L,K){var de=arguments;typeof de[3]==="function"&&console.error("State updates from the useState() and useReducer() Hooks don't support the second callback argument. To execute a side effect after rendering, declare it in the component body with useEffect()."),de=Im(D),f2(D,L,K,de),Ee(D,de)}function f2(D,L,K,de){var ge={lane:de,revertLane:0,action:K,hasEagerState:!1,eagerState:null,next:null};if(hC(D))y2(L,ge);else{var Ie=D.alternate;if(D.lanes===0&&(Ie===null||Ie.lanes===0)&&(Ie=L.lastRenderedReducer,Ie!==null)){var ot=En.H;En.H=Fh;try{var yt=L.lastRenderedState,hn=Ie(yt,K);if(ge.hasEagerState=!0,ge.eagerState=hn,H0(hn,yt))return Dd(D,L,ge,0),Ll===null&&Dl(),!1}catch(zn){}finally{En.H=ot}}if(K=tA(D,L,ge,de),K!==null)return Rd(K,D,de),eg(K,L,de),!0}return!1}function lP(D,L,K,de){if(En.T===null&&l5===0&&console.error("An optimistic state update occurred outside a transition or action. To fix, move the update to an action, or wrap with startTransition."),de={lane:2,revertLane:sh(),action:de,hasEagerState:!1,eagerState:null,next:null},hC(D)){if(L)throw Error("Cannot update optimistic state while rendering.");console.error("Cannot call startTransition while rendering.")}else L=tA(D,K,de,2),L!==null&&Rd(L,D,2);Ee(D,2)}function hC(D){var L=D.alternate;return D===Dr||L!==null&&L===Dr}function y2(D,L){OC=G0=!0;var K=D.pending;K===null?L.next=L:(L.next=K.next,K.next=L),D.pending=L}function eg(D,L,K){if((K&4194048)!==0){var de=L.lanes;de&=D.pendingLanes,K|=de,L.lanes=K,ne(D,K)}}function Ru(D){var L=mo;return D!=null&&(mo=L===null?D:L.concat(D)),L}function dP(D,L,K){for(var de=Object.keys(D.props),ge=0;ge<de.length;ge++){var Ie=de[ge];if(Ie!=="children"&&Ie!=="key"){L===null&&(L=k4(D,K.mode,0),L._debugInfo=mo,L.return=K),on(L,function(ot){console.error("Invalid prop `%s` supplied to `React.Fragment`. React.Fragment can only have `key` and `children` props.",ot)},Ie);break}}}function L1(D){var L=hi;return hi+=1,Ei===null&&(Ei=Rs()),Tl(Ei,D,L)}function x2(D,L){L=L.props.ref,D.ref=L!==void 0?L:null}function F1(D,L){if(L.$$typeof===Ob)throw Error(`A React Element from an older version of React was rendered. This is not supported. It can happen if:
- Multiple copies of the "react" package is used.
- A library pre-bundled an old copy of "react" or "react/jsx-runtime".
- A compiler tries to "inline" JSX instead of using the runtime.`);throw D=Object.prototype.toString.call(L),Error("Objects are not valid as a React child (found: "+(D==="[object Object]"?"object with keys {"+Object.keys(L).join(", ")+"}":D)+"). If you meant to render a collection of children, use an array instead.")}function vc(D,L){var K=E(D)||"Component";o0[K]||(o0[K]=!0,L=L.displayName||L.name||"Component",D.tag===3?console.error(`Functions are not valid as a React child. This may happen if you return %s instead of <%s /> from render. Or maybe you meant to call this function rather than return it.
root.render(%s)`,L,L,L):console.error(`Functions are not valid as a React child. This may happen if you return %s instead of <%s /> from render. Or maybe you meant to call this function rather than return it.
<%s>{%s}</%s>`,L,L,K,L,K))}function Ib(D,L){var K=E(D)||"Component";GC[K]||(GC[K]=!0,L=String(L),D.tag===3?console.error(`Symbols are not valid as a React child.
root.render(%s)`,L):console.error(`Symbols are not valid as a React child.
<%s>%s</%s>`,K,L,K))}function tN(D){function L(en,$t){if(D){var an=en.deletions;an===null?(en.deletions=[$t],en.flags|=16):an.push($t)}}function K(en,$t){if(!D)return null;for(;$t!==null;)L(en,$t),$t=$t.sibling;return null}function de(en){for(var $t=new Map;en!==null;)en.key!==null?$t.set(en.key,en):$t.set(en.index,en),en=en.sibling;return $t}function ge(en,$t){return en=G1(en,$t),en.index=0,en.sibling=null,en}function Ie(en,$t,an){if(en.index=an,!D)return en.flags|=1048576,$t;if(an=en.alternate,an!==null)return an=an.index,an<$t?(en.flags|=67108866,$t):an;return en.flags|=67108866,$t}function ot(en){return D&&en.alternate===null&&(en.flags|=67108866),en}function yt(en,$t,an,qn){if($t===null||$t.tag!==6)return $t=P2(an,en.mode,qn),$t.return=en,$t._debugOwner=en,$t._debugTask=en._debugTask,$t._debugInfo=mo,$t;return $t=ge($t,an),$t.return=en,$t._debugInfo=mo,$t}function hn(en,$t,an,qn){var xi=an.type;if(xi===Di)return $t=Qo(en,$t,an.props.children,qn,an.key),dP(an,$t,en),$t;if($t!==null&&($t.elementType===xi||bP($t,an)||typeof xi==="object"&&xi!==null&&xi.$$typeof===__&&ji(xi)===$t.type))return $t=ge($t,an.props),x2($t,an),$t.return=en,$t._debugOwner=an._owner,$t._debugInfo=mo,$t;return $t=k4(an,en.mode,qn),x2($t,an),$t.return=en,$t._debugInfo=mo,$t}function zn(en,$t,an,qn){if($t===null||$t.tag!==4||$t.stateNode.containerInfo!==an.containerInfo||$t.stateNode.implementation!==an.implementation)return $t=Qd(an,en.mode,qn),$t.return=en,$t._debugInfo=mo,$t;return $t=ge($t,an.children||[]),$t.return=en,$t._debugInfo=mo,$t}function Qo(en,$t,an,qn,xi){if($t===null||$t.tag!==7)return $t=xf(an,en.mode,qn,xi),$t.return=en,$t._debugOwner=en,$t._debugTask=en._debugTask,$t._debugInfo=mo,$t;return $t=ge($t,an),$t.return=en,$t._debugInfo=mo,$t}function Go(en,$t,an){if(typeof $t==="string"&&$t!==""||typeof $t==="number"||typeof $t==="bigint")return $t=P2(""+$t,en.mode,an),$t.return=en,$t._debugOwner=en,$t._debugTask=en._debugTask,$t._debugInfo=mo,$t;if(typeof $t==="object"&&$t!==null){switch($t.$$typeof){case Rh:return an=k4($t,en.mode,an),x2(an,$t),an.return=en,en=Ru($t._debugInfo),an._debugInfo=mo,mo=en,an;case Y1:return $t=Qd($t,en.mode,an),$t.return=en,$t._debugInfo=mo,$t;case __:var qn=Ru($t._debugInfo);return $t=ji($t),en=Go(en,$t,an),mo=qn,en}if(ic($t)||b($t))return an=xf($t,en.mode,an,null),an.return=en,an._debugOwner=en,an._debugTask=en._debugTask,en=Ru($t._debugInfo),an._debugInfo=mo,mo=en,an;if(typeof $t.then==="function")return qn=Ru($t._debugInfo),en=Go(en,L1($t),an),mo=qn,en;if($t.$$typeof===Cf)return Go(en,qo(en,$t),an);F1(en,$t)}return typeof $t==="function"&&vc(en,$t),typeof $t==="symbol"&&Ib(en,$t),null}function di(en,$t,an,qn){var xi=$t!==null?$t.key:null;if(typeof an==="string"&&an!==""||typeof an==="number"||typeof an==="bigint")return xi!==null?null:yt(en,$t,""+an,qn);if(typeof an==="object"&&an!==null){switch(an.$$typeof){case Rh:return an.key===xi?(xi=Ru(an._debugInfo),en=hn(en,$t,an,qn),mo=xi,en):null;case Y1:return an.key===xi?zn(en,$t,an,qn):null;case __:return xi=Ru(an._debugInfo),an=ji(an),en=di(en,$t,an,qn),mo=xi,en}if(ic(an)||b(an)){if(xi!==null)return null;return xi=Ru(an._debugInfo),en=Qo(en,$t,an,qn,null),mo=xi,en}if(typeof an.then==="function")return xi=Ru(an._debugInfo),en=di(en,$t,L1(an),qn),mo=xi,en;if(an.$$typeof===Cf)return di(en,$t,qo(en,an),qn);F1(en,an)}return typeof an==="function"&&vc(en,an),typeof an==="symbol"&&Ib(en,an),null}function kr(en,$t,an,qn,xi){if(typeof qn==="string"&&qn!==""||typeof qn==="number"||typeof qn==="bigint")return en=en.get(an)||null,yt($t,en,""+qn,xi);if(typeof qn==="object"&&qn!==null){switch(qn.$$typeof){case Rh:return an=en.get(qn.key===null?an:qn.key)||null,en=Ru(qn._debugInfo),$t=hn($t,an,qn,xi),mo=en,$t;case Y1:return en=en.get(qn.key===null?an:qn.key)||null,zn($t,en,qn,xi);case __:var Ms=Ru(qn._debugInfo);return qn=ji(qn),$t=kr(en,$t,an,qn,xi),mo=Ms,$t}if(ic(qn)||b(qn))return an=en.get(an)||null,en=Ru(qn._debugInfo),$t=Qo($t,an,qn,xi,null),mo=en,$t;if(typeof qn.then==="function")return Ms=Ru(qn._debugInfo),$t=kr(en,$t,an,L1(qn),xi),mo=Ms,$t;if(qn.$$typeof===Cf)return kr(en,$t,an,qo($t,qn),xi);F1($t,qn)}return typeof qn==="function"&&vc($t,qn),typeof qn==="symbol"&&Ib($t,qn),null}function wc(en,$t,an,qn){if(typeof an!=="object"||an===null)return qn;switch(an.$$typeof){case Rh:case Y1:h(en,$t,an);var xi=an.key;if(typeof xi!=="string")break;if(qn===null){qn=new Set,qn.add(xi);break}if(!qn.has(xi)){qn.add(xi);break}on($t,function(){console.error("Encountered two children with the same key, `%s`. Keys should be unique so that components maintain their identity across updates. Non-unique keys may cause children to be duplicated and/or omitted — the behavior is unsupported and could change in a future version.",xi)});break;case __:an=ji(an),wc(en,$t,an,qn)}return qn}function ww(en,$t,an,qn){for(var xi=null,Ms=null,Lr=null,Kr=$t,Fr=$t=0,Hl=null;Kr!==null&&Fr<an.length;Fr++){Kr.index>Fr?(Hl=Kr,Kr=null):Hl=Kr.sibling;var uu=di(en,Kr,an[Fr],qn);if(uu===null){Kr===null&&(Kr=Hl);break}xi=wc(en,uu,an[Fr],xi),D&&Kr&&uu.alternate===null&&L(en,Kr),$t=Ie(uu,$t,Fr),Lr===null?Ms=uu:Lr.sibling=uu,Lr=uu,Kr=Hl}if(Fr===an.length)return K(en,Kr),ua&<(en,Fr),Ms;if(Kr===null){for(;Fr<an.length;Fr++)Kr=Go(en,an[Fr],qn),Kr!==null&&(xi=wc(en,Kr,an[Fr],xi),$t=Ie(Kr,$t,Fr),Lr===null?Ms=Kr:Lr.sibling=Kr,Lr=Kr);return ua&<(en,Fr),Ms}for(Kr=de(Kr);Fr<an.length;Fr++)Hl=kr(Kr,en,Fr,an[Fr],qn),Hl!==null&&(xi=wc(en,Hl,an[Fr],xi),D&&Hl.alternate!==null&&Kr.delete(Hl.key===null?Fr:Hl.key),$t=Ie(Hl,$t,Fr),Lr===null?Ms=Hl:Lr.sibling=Hl,Lr=Hl);return D&&Kr.forEach(function(gA){return L(en,gA)}),ua&<(en,Fr),Ms}function Tw(en,$t,an,qn){if(an==null)throw Error("An iterable object provided no iterator.");for(var xi=null,Ms=null,Lr=$t,Kr=$t=0,Fr=null,Hl=null,uu=an.next();Lr!==null&&!uu.done;Kr++,uu=an.next()){Lr.index>Kr?(Fr=Lr,Lr=null):Fr=Lr.sibling;var gA=di(en,Lr,uu.value,qn);if(gA===null){Lr===null&&(Lr=Fr);break}Hl=wc(en,gA,uu.value,Hl),D&&Lr&&gA.alternate===null&&L(en,Lr),$t=Ie(gA,$t,Kr),Ms===null?xi=gA:Ms.sibling=gA,Ms=gA,Lr=Fr}if(uu.done)return K(en,Lr),ua&<(en,Kr),xi;if(Lr===null){for(;!uu.done;Kr++,uu=an.next())Lr=Go(en,uu.value,qn),Lr!==null&&(Hl=wc(en,Lr,uu.value,Hl),$t=Ie(Lr,$t,Kr),Ms===null?xi=Lr:Ms.sibling=Lr,Ms=Lr);return ua&<(en,Kr),xi}for(Lr=de(Lr);!uu.done;Kr++,uu=an.next())Fr=kr(Lr,en,Kr,uu.value,qn),Fr!==null&&(Hl=wc(en,Fr,uu.value,Hl),D&&Fr.alternate!==null&&Lr.delete(Fr.key===null?Kr:Fr.key),$t=Ie(Fr,$t,Kr),Ms===null?xi=Fr:Ms.sibling=Fr,Ms=Fr);return D&&Lr.forEach(function(yO){return L(en,yO)}),ua&<(en,Kr),xi}function V2(en,$t,an,qn){if(typeof an==="object"&&an!==null&&an.type===Di&&an.key===null&&(dP(an,null,en),an=an.props.children),typeof an==="object"&&an!==null){switch(an.$$typeof){case Rh:var xi=Ru(an._debugInfo);e:{for(var Ms=an.key;$t!==null;){if($t.key===Ms){if(Ms=an.type,Ms===Di){if($t.tag===7){K(en,$t.sibling),qn=ge($t,an.props.children),qn.return=en,qn._debugOwner=an._owner,qn._debugInfo=mo,dP(an,qn,en),en=qn;break e}}else if($t.elementType===Ms||bP($t,an)||typeof Ms==="object"&&Ms!==null&&Ms.$$typeof===__&&ji(Ms)===$t.type){K(en,$t.sibling),qn=ge($t,an.props),x2(qn,an),qn.return=en,qn._debugOwner=an._owner,qn._debugInfo=mo,en=qn;break e}K(en,$t);break}else L(en,$t);$t=$t.sibling}an.type===Di?(qn=xf(an.props.children,en.mode,qn,an.key),qn.return=en,qn._debugOwner=en,qn._debugTask=en._debugTask,qn._debugInfo=mo,dP(an,qn,en),en=qn):(qn=k4(an,en.mode,qn),x2(qn,an),qn.return=en,qn._debugInfo=mo,en=qn)}return en=ot(en),mo=xi,en;case Y1:e:{xi=an;for(an=xi.key;$t!==null;){if($t.key===an)if($t.tag===4&&$t.stateNode.containerInfo===xi.containerInfo&&$t.stateNode.implementation===xi.implementation){K(en,$t.sibling),qn=ge($t,xi.children||[]),qn.return=en,en=qn;break e}else{K(en,$t);break}else L(en,$t);$t=$t.sibling}qn=Qd(xi,en.mode,qn),qn.return=en,en=qn}return ot(en);case __:return xi=Ru(an._debugInfo),an=ji(an),en=V2(en,$t,an,qn),mo=xi,en}if(ic(an))return xi=Ru(an._debugInfo),en=ww(en,$t,an,qn),mo=xi,en;if(b(an)){if(xi=Ru(an._debugInfo),Ms=b(an),typeof Ms!=="function")throw Error("An object is not an iterable. This error is likely caused by a bug in React. Please file an issue.");var Lr=Ms.call(an);if(Lr===an){if(en.tag!==0||Object.prototype.toString.call(en.type)!=="[object GeneratorFunction]"||Object.prototype.toString.call(Lr)!=="[object Generator]")ls||console.error("Using Iterators as children is unsupported and will likely yield unexpected results because enumerating a generator mutates it. You may convert it to an array with `Array.from()` or the `[...spread]` operator before rendering. You can also use an Iterable that can iterate multiple times over the same items."),ls=!0}else an.entries!==Ms||vo||(console.error("Using Maps as children is not supported. Use an array of keyed ReactElements instead."),vo=!0);return en=Tw(en,$t,Lr,qn),mo=xi,en}if(typeof an.then==="function")return xi=Ru(an._debugInfo),en=V2(en,$t,L1(an),qn),mo=xi,en;if(an.$$typeof===Cf)return V2(en,$t,qo(en,an),qn);F1(en,an)}if(typeof an==="string"&&an!==""||typeof an==="number"||typeof an==="bigint")return xi=""+an,$t!==null&&$t.tag===6?(K(en,$t.sibling),qn=ge($t,xi),qn.return=en,en=qn):(K(en,$t),qn=P2(xi,en.mode,qn),qn.return=en,qn._debugOwner=en,qn._debugTask=en._debugTask,qn._debugInfo=mo,en=qn),ot(en);return typeof an==="function"&&vc(en,an),typeof an==="symbol"&&Ib(en,an),K(en,$t)}return function(en,$t,an,qn){var xi=mo;mo=null;try{hi=0;var Ms=V2(en,$t,an,qn);return Ei=null,Ms}catch(Hl){if(Hl===ZP||Hl===j4)throw Hl;var Lr=c(29,Hl,null,en.mode);Lr.lanes=qn,Lr.return=en;var Kr=Lr._debugInfo=mo;if(Lr._debugOwner=en._debugOwner,Lr._debugTask=en._debugTask,Kr!=null){for(var Fr=Kr.length-1;0<=Fr;Fr--)if(typeof Kr[Fr].stack==="string"){Lr._debugOwner=Kr[Fr],Lr._debugTask=Kr[Fr].debugTask;break}}return Lr}finally{mo=xi}}}function H1(D){var L=D.alternate;T(kl,kl.current&YC,D),T(Y0,D,D),Df===null&&(L===null||tv.current!==null?Df=D:L.memoizedState!==null&&(Df=D))}function C2(D){if(D.tag===22){if(T(kl,kl.current,D),T(Y0,D,D),Df===null){var L=D.alternate;L!==null&&L.memoizedState!==null&&(Df=D)}}else tg(D)}function tg(D){T(kl,kl.current,D),T(Y0,Y0.current,D)}function mf(D){w(Y0,D),Df===D&&(Df=null),w(kl,D)}function uP(D){for(var L=D;L!==null;){if(L.tag===13){var K=L.memoizedState;if(K!==null&&(K=K.dehydrated,K===null||Sf(K)||Kb(K)))return L}else if(L.tag===19&&L.memoizedProps.revealOrder!==void 0){if((L.flags&128)!==0)return L}else if(L.child!==null){L.child.return=L,L=L.child;continue}if(L===D)break;for(;L.sibling===null;){if(L.return===null||L.return===D)return null;L=L.return}L.sibling.return=L.return,L=L.sibling}return null}function l_(D){if(D!==null&&typeof D!=="function"){var L=String(D);V0.has(L)||(V0.add(L),console.error("Expected the last optional `callback` argument to be a function. Instead received: %s.",D))}}function nN(D,L,K,de){var ge=D.memoizedState,Ie=K(de,ge);if(D.mode&8){se(!0);try{Ie=K(de,ge)}finally{se(!1)}}Ie===void 0&&(L=P(L)||"Component",lO.has(L)||(lO.add(L),console.error("%s.getDerivedStateFromProps(): A valid state object (or null) must be returned. You have returned undefined.",L))),ge=Ie===null||Ie===void 0?ge:Nh({},ge,Ie),D.memoizedState=ge,D.lanes===0&&(D.updateQueue.baseState=ge)}function ng(D,L,K,de,ge,Ie,ot){var yt=D.stateNode;if(typeof yt.shouldComponentUpdate==="function"){if(K=yt.shouldComponentUpdate(de,Ie,ot),D.mode&8){se(!0);try{K=yt.shouldComponentUpdate(de,Ie,ot)}finally{se(!1)}}return K===void 0&&console.error("%s.shouldComponentUpdate(): Returned undefined instead of a boolean value. Make sure to return true or false.",P(L)||"Component"),K}return L.prototype&&L.prototype.isPureReactComponent?!ja(K,de)||!ja(ge,Ie):!0}function g4(D,L,K,de){var ge=L.state;typeof L.componentWillReceiveProps==="function"&&L.componentWillReceiveProps(K,de),typeof L.UNSAFE_componentWillReceiveProps==="function"&&L.UNSAFE_componentWillReceiveProps(K,de),L.state!==ge&&(D=E(D)||"Component",_5.has(D)||(_5.add(D),console.error("%s.componentWillReceiveProps(): Assigning directly to this.state is deprecated (except inside a component's constructor). Use setState instead.",D)),U0.enqueueReplaceState(L,L.state,null))}function d_(D,L){var K=L;if("ref"in L){K={};for(var de in L)de!=="ref"&&(K[de]=L[de])}if(D=D.defaultProps){K===L&&(K=Nh({},K));for(var ge in D)K[ge]===void 0&&(K[ge]=D[ge])}return K}function bb(D,L){try{Fd=L.source?E(L.source):null,_g=null;var K=L.value;if(En.actQueue!==null)En.thrownErrors.push(K);else{var de=D.onUncaughtError;de(K,{componentStack:L.stack})}}catch(ge){setTimeout(function(){throw ge})}}function Th(D,L,K){try{Fd=K.source?E(K.source):null,_g=E(L);var de=D.onCaughtError;de(K.value,{componentStack:K.stack,errorBoundary:L.tag===1?L.stateNode:null})}catch(ge){setTimeout(function(){throw ge})}}function xm(D,L,K){return K=nu(K),K.tag=WN,K.payload={element:null},K.callback=function(){on(L.source,bb,D,L)},K}function og(D){return D=nu(D),D.tag=WN,D}function u_(D,L,K,de){var ge=K.type.getDerivedStateFromError;if(typeof ge==="function"){var Ie=de.value;D.payload=function(){return ge(Ie)},D.callback=function(){_N(K),on(de.source,Th,L,K,de)}}var ot=K.stateNode;ot!==null&&typeof ot.componentDidCatch==="function"&&(D.callback=function(){_N(K),on(de.source,Th,L,K,de),typeof ge!=="function"&&(Mm===null?Mm=new Set([this]):Mm.add(this)),St(this,de),typeof ge==="function"||(K.lanes&2)===0&&console.error("%s: Error boundaries should implement getDerivedStateFromError(). In that method, return a state update to display an error message or fallback UI.",E(K)||"Unknown")})}function pf(D,L,K,de,ge){if(K.flags|=32768,hg&&IP(D,ge),de!==null&&typeof de==="object"&&typeof de.then==="function"){if(L=K.alternate,L!==null&&eo(L,K,ge,!0),ua&&(wf=!0),K=Y0.current,K!==null){switch(K.tag){case 13:return Df===null?fP():K.alternate===null&&du===pA&&(du=mO),K.flags&=-257,K.flags|=65536,K.lanes=ge,de===Aw?K.flags|=16384:(L=K.updateQueue,L===null?K.updateQueue=new Set([de]):L.add(de),O9(D,de,ge)),!1;case 22:return K.flags|=65536,de===Aw?K.flags|=16384:(L=K.updateQueue,L===null?(L={transitions:null,markerInstances:null,retryQueue:new Set([de])},K.updateQueue=L):(K=L.retryQueue,K===null?L.retryQueue=new Set([de]):K.add(de)),O9(D,de,ge)),!1}throw Error("Unexpected Suspense handler tag ("+K.tag+"). This is a bug in React.")}return O9(D,de,ge),fP(),!1}if(ua)return wf=!0,L=Y0.current,L!==null?((L.flags&65536)===0&&(L.flags|=256),L.flags|=65536,L.lanes=ge,de!==X4&&Gn(et(Error("There was an error while hydrating but React was able to recover by instead client rendering from the nearest Suspense boundary.",{cause:de}),K))):(de!==X4&&Gn(et(Error("There was an error while hydrating but React was able to recover by instead client rendering the entire root.",{cause:de}),K)),D=D.current.alternate,D.flags|=65536,ge&=-ge,D.lanes|=ge,de=et(de,K),ge=xm(D.stateNode,de,ge),k1(D,ge),du!==lv&&(du=XC)),!1;var Ie=et(Error("There was an error during concurrent rendering but React was able to recover by instead synchronously rendering the entire root.",{cause:de}),K);if(yg===null?yg=[Ie]:yg.push(Ie),du!==lv&&(du=XC),L===null)return!0;de=et(de,K),K=L;do{switch(K.tag){case 3:return K.flags|=65536,D=ge&-ge,K.lanes|=D,D=xm(K.stateNode,de,D),k1(K,D),!1;case 1:if(L=K.type,Ie=K.stateNode,(K.flags&128)===0&&(typeof L.getDerivedStateFromError==="function"||Ie!==null&&typeof Ie.componentDidCatch==="function"&&(Mm===null||!Mm.has(Ie))))return K.flags|=65536,ge&=-ge,K.lanes|=ge,ge=og(ge),u_(ge,D,K,de),k1(K,ge),!1}K=K.return}while(K!==null);return!1}function Al(D,L,K,de){L.child=D===null?Tf(L,null,K,de):Cp(L,D.child,K,de)}function f4(D,L,K,de,ge){K=K.render;var Ie=L.ref;if("ref"in de){var ot={};for(var yt in de)yt!=="ref"&&(ot[yt]=de[yt])}else ot=de;if($n(L),ue(L),de=cC(D,L,K,ot,Ie,ge),yt=h2(),Ae(),D!==null&&!Xc)return m2(D,L,ge),_f(D,L,ge);return ua&&yt&>(L),L.flags|=1,Al(D,L,de,ge),L.child}function s9(D,L,K,de,ge){if(D===null){var Ie=K.type;if(typeof Ie==="function"&&!SP(Ie)&&Ie.defaultProps===void 0&&K.compare===null)return K=PC(Ie),L.tag=15,L.type=K,y4(L,Ie),oN(D,L,K,de,ge);return D=W9(K.type,null,de,L,L.mode,ge),D.ref=L.ref,D.return=L,L.child=D}if(Ie=D.child,!mP(D,ge)){var ot=Ie.memoizedProps;if(K=K.compare,K=K!==null?K:ja,K(ot,de)&&D.ref===L.ref)return _f(D,L,ge)}return L.flags|=1,D=G1(Ie,de),D.ref=L.ref,D.return=L,L.child=D}function oN(D,L,K,de,ge){if(D!==null){var Ie=D.memoizedProps;if(ja(Ie,de)&&D.ref===L.ref&&L.type===D.type)if(Xc=!1,L.pendingProps=de=Ie,mP(D,ge))(D.flags&131072)!==0&&(Xc=!0);else return L.lanes=D.lanes,_f(D,L,ge)}return m_(D,L,K,de,ge)}function Af(D,L,K){var de=L.pendingProps,ge=de.children,Ie=D!==null?D.memoizedState:null;if(de.mode==="hidden"){if((L.flags&128)!==0){if(de=Ie!==null?Ie.baseLanes|K:K,D!==null){ge=L.child=D.child;for(Ie=0;ge!==null;)Ie=Ie|ge.lanes|ge.childLanes,ge=ge.sibling;L.childLanes=Ie&~de}else L.childLanes=0,L.child=null;return iN(D,L,de,K)}if((K&536870912)!==0)L.memoizedState={baseLanes:0,cachePool:null},D!==null&&Yc(L,Ie!==null?Ie.cachePool:null),Ie!==null?xb(L,Ie):lf(L),C2(L);else return L.lanes=L.childLanes=536870912,iN(D,L,Ie!==null?Ie.baseLanes|K:K,K)}else Ie!==null?(Yc(L,Ie.cachePool),xb(L,Ie),tg(L),L.memoizedState=null):(D!==null&&Yc(L,null),lf(L),tg(L));return Al(D,L,ge,K),L.child}function iN(D,L,K,de){var ge=Rr();return ge=ge===null?null:{parent:tl?Rl._currentValue:Rl._currentValue2,pool:ge},L.memoizedState={baseLanes:K,cachePool:ge},D!==null&&Yc(L,null),lf(L),C2(L),D!==null&&eo(D,L,de,!0),null}function h_(D,L){var K=L.ref;if(K===null)D!==null&&D.ref!==null&&(L.flags|=4194816);else{if(typeof K!=="function"&&typeof K!=="object")throw Error("Expected ref to be a function, an object returned by React.createRef(), or undefined/null.");if(D===null||D.ref!==K)L.flags|=4194816}}function m_(D,L,K,de,ge){if(K.prototype&&typeof K.prototype.render==="function"){var Ie=P(K)||"Unknown";F2[Ie]||(console.error("The <%s /> component appears to have a render method, but doesn't extend React.Component. This is likely to cause errors. Change %s to extend React.Component instead.",Ie,Ie),F2[Ie]=!0)}if(L.mode&8&&Ag.recordLegacyContextWarning(L,null),D===null&&(y4(L,L.type),K.contextTypes&&(Ie=P(K)||"Unknown",nM[Ie]||(nM[Ie]=!0,console.error("%s uses the legacy contextTypes API which was removed in React 19. Use React.createContext() with React.useContext() instead. (https://react.dev/link/legacy-context)",Ie)))),$n(L),ue(L),K=cC(D,L,K,de,void 0,ge),de=h2(),Ae(),D!==null&&!Xc)return m2(D,L,ge),_f(D,L,ge);return ua&&de&>(L),L.flags|=1,Al(D,L,K,ge),L.child}function Sb(D,L,K,de,ge,Ie){if($n(L),ue(L),hA=-1,eM=D!==null&&D.type!==L.type,L.updateQueue=null,K=lC(L,de,K,ge),r9(D,L),de=h2(),Ae(),D!==null&&!Xc)return m2(D,L,Ie),_f(D,L,Ie);return ua&&de&>(L),L.flags|=1,Al(D,L,K,Ie),L.child}function rN(D,L,K,de,ge){switch(a(L)){case!1:var Ie=L.stateNode,ot=new L.type(L.memoizedProps,Ie.context).state;Ie.updater.enqueueSetState(Ie,ot,null);break;case!0:L.flags|=128,L.flags|=65536,Ie=Error("Simulated error coming from DevTools");var yt=ge&-ge;if(L.lanes|=yt,ot=Ll,ot===null)throw Error("Expected a work-in-progress root. This is a bug in React. Please file an issue.");yt=og(yt),u_(yt,ot,L,et(Ie,L)),k1(L,yt)}if($n(L),L.stateNode===null){if(ot=X1,Ie=K.contextType,"contextType"in K&&Ie!==null&&(Ie===void 0||Ie.$$typeof!==Cf)&&!Iw.has(K)&&(Iw.add(K),yt=Ie===void 0?" However, it is set to undefined. This can be caused by a typo or by mixing up named and default imports. This can also happen due to a circular dependency, so try moving the createContext() call to a separate file.":typeof Ie!=="object"?" However, it is set to a "+typeof Ie+".":Ie.$$typeof===vP?" Did you accidentally pass the Context.Consumer instead?":" However, it is set to an object with keys {"+Object.keys(Ie).join(", ")+"}.",console.error("%s defines an invalid contextType. contextType should point to the Context object returned by React.createContext().%s",P(K)||"Component",yt)),typeof Ie==="object"&&Ie!==null&&(ot=zo(Ie)),Ie=new K(de,ot),L.mode&8){se(!0);try{Ie=new K(de,ot)}finally{se(!1)}}if(ot=L.memoizedState=Ie.state!==null&&Ie.state!==void 0?Ie.state:null,Ie.updater=U0,L.stateNode=Ie,Ie._reactInternals=L,Ie._reactInternalInstance=UC,typeof K.getDerivedStateFromProps==="function"&&ot===null&&(ot=P(K)||"Component",tM.has(ot)||(tM.add(ot),console.error("`%s` uses `getDerivedStateFromProps` but its initial state is %s. This is not recommended. Instead, define the initial state by assigning an object to `this.state` in the constructor of `%s`. This ensures that `getDerivedStateFromProps` arguments have a consistent shape.",ot,Ie.state===null?"null":"undefined",ot))),typeof K.getDerivedStateFromProps==="function"||typeof Ie.getSnapshotBeforeUpdate==="function"){var hn=yt=ot=null;if(typeof Ie.componentWillMount==="function"&&Ie.componentWillMount.__suppressDeprecationWarning!==!0?ot="componentWillMount":typeof Ie.UNSAFE_componentWillMount==="function"&&(ot="UNSAFE_componentWillMount"),typeof Ie.componentWillReceiveProps==="function"&&Ie.componentWillReceiveProps.__suppressDeprecationWarning!==!0?yt="componentWillReceiveProps":typeof Ie.UNSAFE_componentWillReceiveProps==="function"&&(yt="UNSAFE_componentWillReceiveProps"),typeof Ie.componentWillUpdate==="function"&&Ie.componentWillUpdate.__suppressDeprecationWarning!==!0?hn="componentWillUpdate":typeof Ie.UNSAFE_componentWillUpdate==="function"&&(hn="UNSAFE_componentWillUpdate"),ot!==null||yt!==null||hn!==null){Ie=P(K)||"Component";var zn=typeof K.getDerivedStateFromProps==="function"?"getDerivedStateFromProps()":"getSnapshotBeforeUpdate()";xw.has(Ie)||(xw.add(Ie),console.error(`Unsafe legacy lifecycles will not be called for components using new component APIs.
%s uses %s but also contains the following legacy lifecycles:%s%s%s
The above lifecycles should be removed. Learn more about this warning here:
https://react.dev/link/unsafe-component-lifecycles`,Ie,zn,ot!==null?`
`+ot:"",yt!==null?`
`+yt:"",hn!==null?`
`+hn:""))}}Ie=L.stateNode,ot=P(K)||"Component",Ie.render||(K.prototype&&typeof K.prototype.render==="function"?console.error("No `render` method found on the %s instance: did you accidentally return an object from the constructor?",ot):console.error("No `render` method found on the %s instance: you may have forgotten to define `render`.",ot)),!Ie.getInitialState||Ie.getInitialState.isReactClassApproved||Ie.state||console.error("getInitialState was defined on %s, a plain JavaScript class. This is only supported for classes created using React.createClass. Did you mean to define a state property instead?",ot),Ie.getDefaultProps&&!Ie.getDefaultProps.isReactClassApproved&&console.error("getDefaultProps was defined on %s, a plain JavaScript class. This is only supported for classes created using React.createClass. Use a static property to define defaultProps instead.",ot),Ie.contextType&&console.error("contextType was defined as an instance property on %s. Use a static property to define contextType instead.",ot),K.childContextTypes&&!Ip.has(K)&&(Ip.add(K),console.error("%s uses the legacy childContextTypes API which was removed in React 19. Use React.createContext() instead. (https://react.dev/link/legacy-context)",ot)),K.contextTypes&&!Cw.has(K)&&(Cw.add(K),console.error("%s uses the legacy contextTypes API which was removed in React 19. Use React.createContext() with static contextType instead. (https://react.dev/link/legacy-context)",ot)),typeof Ie.componentShouldUpdate==="function"&&console.error("%s has a method called componentShouldUpdate(). Did you mean shouldComponentUpdate()? The name is phrased as a question because the function is expected to return a value.",ot),K.prototype&&K.prototype.isPureReactComponent&&typeof Ie.shouldComponentUpdate<"u"&&console.error("%s has a method called shouldComponentUpdate(). shouldComponentUpdate should not be used when extending React.PureComponent. Please extend React.Component if shouldComponentUpdate is used.",P(K)||"A pure component"),typeof Ie.componentDidUnmount==="function"&&console.error("%s has a method called componentDidUnmount(). But there is no such lifecycle method. Did you mean componentWillUnmount()?",ot),typeof Ie.componentDidReceiveProps==="function"&&console.error("%s has a method called componentDidReceiveProps(). But there is no such lifecycle method. If you meant to update the state in response to changing props, use componentWillReceiveProps(). If you meant to fetch data or run side-effects or mutations after React has updated the UI, use componentDidUpdate().",ot),typeof Ie.componentWillRecieveProps==="function"&&console.error("%s has a method called componentWillRecieveProps(). Did you mean componentWillReceiveProps()?",ot),typeof Ie.UNSAFE_componentWillRecieveProps==="function"&&console.error("%s has a method called UNSAFE_componentWillRecieveProps(). Did you mean UNSAFE_componentWillReceiveProps()?",ot),yt=Ie.props!==de,Ie.props!==void 0&&yt&&console.error("When calling super() in `%s`, make sure to pass up the same props that your component's constructor was passed.",ot),Ie.defaultProps&&console.error("Setting defaultProps as an instance property on %s is not supported and will be ignored. Instead, define defaultProps as a static property on %s.",ot,ot),typeof Ie.getSnapshotBeforeUpdate!=="function"||typeof Ie.componentDidUpdate==="function"||g5.has(K)||(g5.add(K),console.error("%s: getSnapshotBeforeUpdate() should be used with componentDidUpdate(). This component defines getSnapshotBeforeUpdate() only.",P(K))),typeof Ie.getDerivedStateFromProps==="function"&&console.error("%s: getDerivedStateFromProps() is defined as an instance method and will be ignored. Instead, declare it as a static method.",ot),typeof Ie.getDerivedStateFromError==="function"&&console.error("%s: getDerivedStateFromError() is defined as an instance method and will be ignored. Instead, declare it as a static method.",ot),typeof K.getSnapshotBeforeUpdate==="function"&&console.error("%s: getSnapshotBeforeUpdate() is defined as a static method and will be ignored. Instead, declare it as an instance method.",ot),(yt=Ie.state)&&(typeof yt!=="object"||ic(yt))&&console.error("%s.state: must be set to an object or null",ot),typeof Ie.getChildContext==="function"&&typeof K.childContextTypes!=="object"&&console.error("%s.getChildContext(): childContextTypes must be defined in order to use getChildContext().",ot),Ie=L.stateNode,Ie.props=de,Ie.state=L.memoizedState,Ie.refs={},Bh(L),ot=K.contextType,Ie.context=typeof ot==="object"&&ot!==null?zo(ot):X1,Ie.state===de&&(ot=P(K)||"Component",f5.has(ot)||(f5.add(ot),console.error("%s: It is not recommended to assign props directly to state because updates to props won't be reflected in state. In most cases, it is better to use props directly.",ot))),L.mode&8&&Ag.recordLegacyContextWarning(L,Ie),Ag.recordUnsafeLifecycleWarnings(L,Ie),Ie.state=L.memoizedState,ot=K.getDerivedStateFromProps,typeof ot==="function"&&(nN(L,K,ot,de),Ie.state=L.memoizedState),typeof K.getDerivedStateFromProps==="function"||typeof Ie.getSnapshotBeforeUpdate==="function"||typeof Ie.UNSAFE_componentWillMount!=="function"&&typeof Ie.componentWillMount!=="function"||(ot=Ie.state,typeof Ie.componentWillMount==="function"&&Ie.componentWillMount(),typeof Ie.UNSAFE_componentWillMount==="function"&&Ie.UNSAFE_componentWillMount(),ot!==Ie.state&&(console.error("%s.componentWillMount(): Assigning directly to this.state is deprecated (except inside a component's constructor). Use setState instead.",E(L)||"Component"),U0.enqueueReplaceState(Ie,Ie.state,null)),Z_(L,de,Ie,ge),fm(),Ie.state=L.memoizedState),typeof Ie.componentDidMount==="function"&&(L.flags|=4194308),(L.mode&16)!==Bc&&(L.flags|=134217728),Ie=!0}else if(D===null){Ie=L.stateNode;var Qo=L.memoizedProps;yt=d_(K,Qo),Ie.props=yt;var Go=Ie.context;hn=K.contextType,ot=X1,typeof hn==="object"&&hn!==null&&(ot=zo(hn)),zn=K.getDerivedStateFromProps,hn=typeof zn==="function"||typeof Ie.getSnapshotBeforeUpdate==="function",Qo=L.pendingProps!==Qo,hn||typeof Ie.UNSAFE_componentWillReceiveProps!=="function"&&typeof Ie.componentWillReceiveProps!=="function"||(Qo||Go!==ot)&&g4(L,Ie,de,ot),R2=!1;var di=L.memoizedState;Ie.state=di,Z_(L,de,Ie,ge),fm(),Go=L.memoizedState,Qo||di!==Go||R2?(typeof zn==="function"&&(nN(L,K,zn,de),Go=L.memoizedState),(yt=R2||ng(L,K,yt,de,di,Go,ot))?(hn||typeof Ie.UNSAFE_componentWillMount!=="function"&&typeof Ie.componentWillMount!=="function"||(typeof Ie.componentWillMount==="function"&&Ie.componentWillMount(),typeof Ie.UNSAFE_componentWillMount==="function"&&Ie.UNSAFE_componentWillMount()),typeof Ie.componentDidMount==="function"&&(L.flags|=4194308),(L.mode&16)!==Bc&&(L.flags|=134217728)):(typeof Ie.componentDidMount==="function"&&(L.flags|=4194308),(L.mode&16)!==Bc&&(L.flags|=134217728),L.memoizedProps=de,L.memoizedState=Go),Ie.props=de,Ie.state=Go,Ie.context=ot,Ie=yt):(typeof Ie.componentDidMount==="function"&&(L.flags|=4194308),(L.mode&16)!==Bc&&(L.flags|=134217728),Ie=!1)}else{Ie=L.stateNode,lp(D,L),ot=L.memoizedProps,hn=d_(K,ot),Ie.props=hn,zn=L.pendingProps,di=Ie.context,Go=K.contextType,yt=X1,typeof Go==="object"&&Go!==null&&(yt=zo(Go)),Qo=K.getDerivedStateFromProps,(Go=typeof Qo==="function"||typeof Ie.getSnapshotBeforeUpdate==="function")||typeof Ie.UNSAFE_componentWillReceiveProps!=="function"&&typeof Ie.componentWillReceiveProps!=="function"||(ot!==zn||di!==yt)&&g4(L,Ie,de,yt),R2=!1,di=L.memoizedState,Ie.state=di,Z_(L,de,Ie,ge),fm();var kr=L.memoizedState;ot!==zn||di!==kr||R2||D!==null&&D.dependencies!==null&&co(D.dependencies)?(typeof Qo==="function"&&(nN(L,K,Qo,de),kr=L.memoizedState),(hn=R2||ng(L,K,hn,de,di,kr,yt)||D!==null&&D.dependencies!==null&&co(D.dependencies))?(Go||typeof Ie.UNSAFE_componentWillUpdate!=="function"&&typeof Ie.componentWillUpdate!=="function"||(typeof Ie.componentWillUpdate==="function"&&Ie.componentWillUpdate(de,kr,yt),typeof Ie.UNSAFE_componentWillUpdate==="function"&&Ie.UNSAFE_componentWillUpdate(de,kr,yt)),typeof Ie.componentDidUpdate==="function"&&(L.flags|=4),typeof Ie.getSnapshotBeforeUpdate==="function"&&(L.flags|=1024)):(typeof Ie.componentDidUpdate!=="function"||ot===D.memoizedProps&&di===D.memoizedState||(L.flags|=4),typeof Ie.getSnapshotBeforeUpdate!=="function"||ot===D.memoizedProps&&di===D.memoizedState||(L.flags|=1024),L.memoizedProps=de,L.memoizedState=kr),Ie.props=de,Ie.state=kr,Ie.context=yt,Ie=hn):(typeof Ie.componentDidUpdate!=="function"||ot===D.memoizedProps&&di===D.memoizedState||(L.flags|=4),typeof Ie.getSnapshotBeforeUpdate!=="function"||ot===D.memoizedProps&&di===D.memoizedState||(L.flags|=1024),Ie=!1)}if(yt=Ie,h_(D,L),ot=(L.flags&128)!==0,yt||ot){if(yt=L.stateNode,Kn(L),ot&&typeof K.getDerivedStateFromError!=="function")K=null,vm=-1;else{if(ue(L),K=ae(yt),L.mode&8){se(!0);try{ae(yt)}finally{se(!1)}}Ae()}L.flags|=1,D!==null&&ot?(L.child=Cp(L,D.child,null,ge),L.child=Cp(L,null,K,ge)):Al(D,L,K,ge),L.memoizedState=yt.state,D=L.child}else D=_f(D,L,ge);return ge=L.stateNode,Ie&&ge.props!==de&&(bw||console.error("It looks like %s is reassigning its own `this.props` while rendering. This is not supported and can lead to confusing bugs.",E(L)||"a component"),bw=!0),D}function MH(D,L,K,de){return fn(),L.flags|=256,Al(D,L,K,de),L.child}function y4(D,L){L&&L.childContextTypes&&console.error(`childContextTypes cannot be defined on a function component.
%s.childContextTypes = ...`,L.displayName||L.name||"Component"),typeof L.getDerivedStateFromProps==="function"&&(D=P(L)||"Unknown",Qs[D]||(console.error("%s: Function components do not support getDerivedStateFromProps.",D),Qs[D]=!0)),typeof L.contextType==="object"&&L.contextType!==null&&(L=P(L)||"Unknown",H2[L]||(console.error("%s: Function components do not support contextType.",L),H2[L]=!0))}function hP(D){return{baseLanes:D,cachePool:Ns()}}function Pb(D,L,K){return D=D!==null?D.childLanes&~K:0,L&&(D|=Fl),D}function x4(D,L,K){var de=L.pendingProps;s(L)&&(L.flags|=128);var ge=!1,Ie=(L.flags&128)!==0,ot;if((ot=Ie)||(ot=D!==null&&D.memoizedState===null?!1:(kl.current&VC)!==0),ot&&(ge=!0,L.flags&=-129),ot=(L.flags&32)!==0,L.flags&=-33,D===null){if(ua){if(ge?H1(L):tg(L),ua){var yt=au,hn;(hn=!yt)||(hn=jb(yt,Zs),hn!==null?(Dt(),L.memoizedState={dehydrated:hn,treeContext:gs!==null?{id:pg,overflow:Bf}:null,retryLane:536870912,hydrationErrors:null},Ie=c(18,null,null,Bc),Ie.stateNode=hn,Ie.return=L,L.child=Ie,ka=L,au=null,hn=!0):hn=!1,hn=!hn),hn&&(ai(L,yt),At(L))}if(yt=L.memoizedState,yt!==null&&(yt=yt.dehydrated,yt!==null))return Kb(yt)?L.lanes=32:L.lanes=536870912,null;mf(L)}if(yt=de.children,de=de.fallback,ge)return tg(L),ge=L.mode,yt=C4({mode:"hidden",children:yt},ge),de=xf(de,ge,K,null),yt.return=L,de.return=L,yt.sibling=de,L.child=yt,ge=L.child,ge.memoizedState=hP(K),ge.childLanes=Pb(D,ot,K),L.memoizedState=sv,de;return H1(L),a9(L,yt)}if(hn=D.memoizedState,hn!==null&&(yt=hn.dehydrated,yt!==null)){if(Ie)L.flags&256?(H1(L),L.flags&=-257,L=O1(D,L,K)):L.memoizedState!==null?(tg(L),L.child=D.child,L.flags|=128,L=null):(tg(L),ge=de.fallback,yt=L.mode,de=C4({mode:"visible",children:de.children},yt),ge=xf(ge,yt,K,null),ge.flags|=2,de.return=L,ge.return=L,de.sibling=ge,L.child=de,Cp(L,D.child,null,K),de=L.child,de.memoizedState=hP(K),de.childLanes=Pb(D,ot,K),L.memoizedState=sv,L=ge);else if(H1(L),ua&&console.error("We should not be hydrating here. This is a bug in React. Please file a bug."),Kb(yt))yt=cg(yt),ot=yt.digest,ge=yt.message,de=yt.stack,yt=yt.componentStack,ge=ge?Error(ge):Error("The server could not finish this Suspense boundary, likely due to an error during server rendering. Switched to client rendering."),ge.stack=de||"",ge.digest=ot,ot=yt===void 0?null:yt,de={value:ge,source:null,stack:ot},typeof ot==="string"&&YP.set(ge,de),Gn(de),L=O1(D,L,K);else if(Xc||eo(D,L,K,!1),ot=(K&D.childLanes)!==0,Xc||ot){if(ot=Ll,ot!==null&&(de=K&-K,de=(de&42)!==0?1:ce(de),de=(de&(ot.suspendedLanes|K))!==0?0:de,de!==0&&de!==hn.retryLane))throw hn.retryLane=de,Tu(D,de),Rd(ot,D,de),Nf;Sf(yt)||fP(),L=O1(D,L,K)}else Sf(yt)?(L.flags|=192,L.child=D.child,L=null):(D=hn.treeContext,_p&&(au=O4(yt),ka=L,ua=!0,LC=null,wf=!1,cu=null,Zs=!1,D!==null&&(Dt(),Lu[yp++]=pg,Lu[yp++]=Bf,Lu[yp++]=gs,pg=D.id,Bf=D.overflow,gs=L)),L=a9(L,de.children),L.flags|=4096);return L}if(ge)return tg(L),ge=de.fallback,yt=L.mode,hn=D.child,Ie=hn.sibling,de=G1(hn,{mode:"hidden",children:de.children}),de.subtreeFlags=hn.subtreeFlags&65011712,Ie!==null?ge=G1(Ie,ge):(ge=xf(ge,yt,K,null),ge.flags|=2),ge.return=L,de.return=L,de.sibling=ge,L.child=de,de=ge,ge=L.child,yt=D.child.memoizedState,yt===null?yt=hP(K):(hn=yt.cachePool,hn!==null?(Ie=tl?Rl._currentValue:Rl._currentValue2,hn=hn.parent!==Ie?{parent:Ie,pool:Ie}:hn):hn=Ns(),yt={baseLanes:yt.baseLanes|K,cachePool:hn}),ge.memoizedState=yt,ge.childLanes=Pb(D,ot,K),L.memoizedState=sv,de;return H1(L),K=D.child,D=K.sibling,K=G1(K,{mode:"visible",children:de.children}),K.return=L,K.sibling=null,D!==null&&(ot=L.deletions,ot===null?(L.deletions=[D],L.flags|=16):ot.push(D)),L.child=K,L.memoizedState=null,K}function a9(D,L){return L=C4({mode:"visible",children:L},D.mode),L.return=D,D.child=L}function C4(D,L){return D=c(22,D,null,L),D.lanes=0,D.stateNode={_visibility:1,_pendingMarkers:null,_retryCache:null,_transitions:null},D}function O1(D,L,K){return Cp(L,D.child,null,K),D=a9(L,L.pendingProps.children),D.flags|=2,L.memoizedState=null,D}function c9(D,L,K){D.lanes|=L;var de=D.alternate;de!==null&&(de.lanes|=L),Eo(D.return,L,K)}function l9(D,L){var K=ic(D);return D=!K&&typeof b(D)==="function",K||D?(K=K?"array":"iterable",console.error("A nested %s was passed to row #%s in <SuspenseList />. Wrap it in an additional SuspenseList to configure its revealOrder: <SuspenseList revealOrder=...> ... <SuspenseList revealOrder=...>{%s}</SuspenseList> ... </SuspenseList>",K,L,K),!1):!0}function d9(D,L,K,de,ge){var Ie=D.memoizedState;Ie===null?D.memoizedState={isBackwards:L,rendering:null,renderingStartTime:0,last:de,tail:K,tailMode:ge}:(Ie.isBackwards=L,Ie.rendering=null,Ie.renderingStartTime=0,Ie.last=de,Ie.tail=K,Ie.tailMode=ge)}function Cm(D,L,K){var de=L.pendingProps,ge=de.revealOrder,Ie=de.tail;if(de=de.children,ge!==void 0&&ge!=="forwards"&&ge!=="backwards"&&ge!=="together"&&!O2[ge])if(O2[ge]=!0,typeof ge==="string")switch(ge.toLowerCase()){case"together":case"forwards":case"backwards":console.error('"%s" is not a valid value for revealOrder on <SuspenseList />. Use lowercase "%s" instead.',ge,ge.toLowerCase());break;case"forward":case"backward":console.error('"%s" is not a valid value for revealOrder on <SuspenseList />. React uses the -s suffix in the spelling. Use "%ss" instead.',ge,ge.toLowerCase());break;default:console.error('"%s" is not a supported revealOrder on <SuspenseList />. Did you mean "together", "forwards" or "backwards"?',ge)}else console.error('%s is not a supported value for revealOrder on <SuspenseList />. Did you mean "together", "forwards" or "backwards"?',ge);Ie===void 0||rv[Ie]||(Ie!=="collapsed"&&Ie!=="hidden"?(rv[Ie]=!0,console.error('"%s" is not a supported value for tail on <SuspenseList />. Did you mean "collapsed" or "hidden"?',Ie)):ge!=="forwards"&&ge!=="backwards"&&(rv[Ie]=!0,console.error('<SuspenseList tail="%s" /> is only valid if revealOrder is "forwards" or "backwards". Did you mean to specify revealOrder="forwards"?',Ie)));e:if((ge==="forwards"||ge==="backwards")&&de!==void 0&&de!==null&&de!==!1)if(ic(de)){for(var ot=0;ot<de.length;ot++)if(!l9(de[ot],ot))break e}else if(ot=b(de),typeof ot==="function"){if(ot=ot.call(de))for(var yt=ot.next(),hn=0;!yt.done;yt=ot.next()){if(!l9(yt.value,hn))break e;hn++}}else console.error('A single row was passed to a <SuspenseList revealOrder="%s" />. This is not useful since it needs multiple rows. Did you mean to pass multiple children or an array?',ge);if(Al(D,L,de,K),de=kl.current,(de&VC)!==0)de=de&YC|VC,L.flags|=128;else{if(D!==null&&(D.flags&128)!==0)e:for(D=L.child;D!==null;){if(D.tag===13)D.memoizedState!==null&&c9(D,K,L);else if(D.tag===19)c9(D,K,L);else if(D.child!==null){D.child.return=D,D=D.child;continue}if(D===L)break e;for(;D.sibling===null;){if(D.return===null||D.return===L)break e;D=D.return}D.sibling.return=D.return,D=D.sibling}de&=YC}switch(T(kl,de,L),ge){case"forwards":K=L.child;for(ge=null;K!==null;)D=K.alternate,D!==null&&uP(D)===null&&(ge=K),K=K.sibling;K=ge,K===null?(ge=L.child,L.child=null):(ge=K.sibling,K.sibling=null),d9(L,!1,ge,K,Ie);break;case"backwards":K=null,ge=L.child;for(L.child=null;ge!==null;){if(D=ge.alternate,D!==null&&uP(D)===null){L.child=ge;break}D=ge.sibling,ge.sibling=K,K=ge,ge=D}d9(L,!0,K,null,Ie);break;case"together":d9(L,!1,null,null,void 0);break;default:L.memoizedState=null}return L.child}function _f(D,L,K){if(D!==null&&(L.dependencies=D.dependencies),vm=-1,mv|=L.lanes,(K&L.childLanes)===0)if(D!==null){if(eo(D,L,K,!1),(K&L.childLanes)===0)return null}else return null;if(D!==null&&L.child!==D.child)throw Error("Resuming work not yet implemented.");if(L.child!==null){D=L.child,K=G1(D,D.pendingProps),L.child=K;for(K.return=L;D.sibling!==null;)D=D.sibling,K=K.sibling=G1(D,D.pendingProps),K.return=L;K.sibling=null}return L.child}function mP(D,L){if((D.lanes&L)!==0)return!0;return D=D.dependencies,D!==null&&co(D)?!0:!1}function u9(D,L,K){switch(L.tag){case 3:Ht(L,L.stateNode.containerInfo),Wn(L,Rl,D.memoizedState.cache),fn();break;case 27:case 5:je(L);break;case 4:Ht(L,L.stateNode.containerInfo);break;case 10:Wn(L,L.type,L.memoizedProps.value);break;case 12:(K&L.childLanes)!==0&&(L.flags|=4),L.flags|=2048;var de=L.stateNode;de.effectDuration=-0,de.passiveEffectDuration=-0;break;case 13:if(de=L.memoizedState,de!==null){if(de.dehydrated!==null)return H1(L),L.flags|=128,null;if((K&L.child.childLanes)!==0)return x4(D,L,K);return H1(L),D=_f(D,L,K),D!==null?D.sibling:null}H1(L);break;case 19:var ge=(D.flags&128)!==0;if(de=(K&L.childLanes)!==0,de||(eo(D,L,K,!1),de=(K&L.childLanes)!==0),ge){if(de)return Cm(D,L,K);L.flags|=128}if(ge=L.memoizedState,ge!==null&&(ge.rendering=null,ge.tail=null,ge.lastEffect=null),T(kl,kl.current,L),de)break;else return null;case 22:case 23:return L.lanes=0,Af(D,L,K);case 24:Wn(L,Rl,D.memoizedState.cache)}return _f(D,L,K)}function z1(D,L,K){if(L._debugNeedsRemount&&D!==null){K=W9(L.type,L.key,L.pendingProps,L._debugOwner||null,L.mode,L.lanes),K._debugStack=L._debugStack,K._debugTask=L._debugTask;var de=L.return;if(de===null)throw Error("Cannot swap the root fiber.");if(D.alternate=null,L.alternate=null,K.index=L.index,K.sibling=L.sibling,K.return=L.return,K.ref=L.ref,K._debugInfo=L._debugInfo,L===de.child)de.child=K;else{var ge=de.child;if(ge===null)throw Error("Expected parent to have a child.");for(;ge.sibling!==L;)if(ge=ge.sibling,ge===null)throw Error("Expected to find the previous sibling.");ge.sibling=K}return L=de.deletions,L===null?(de.deletions=[D],de.flags|=16):L.push(D),K.flags|=2,K}if(D!==null)if(D.memoizedProps!==L.pendingProps||L.type!==D.type)Xc=!0;else{if(!mP(D,K)&&(L.flags&128)===0)return Xc=!1,u9(D,L,K);Xc=(D.flags&131072)!==0?!0:!1}else{if(Xc=!1,de=ua)Dt(),de=(L.flags&1048576)!==0;de&&(de=L.index,Dt(),it(L,lw,de))}switch(L.lanes=0,L.tag){case 16:e:if(de=L.pendingProps,D=ji(L.elementType),L.type=D,typeof D==="function")SP(D)?(de=d_(D,de),L.tag=1,L.type=D=PC(D),L=rN(null,L,D,de,K)):(L.tag=0,y4(L,D),L.type=D=PC(D),L=m_(null,L,D,de,K));else{if(D!==void 0&&D!==null){if(ge=D.$$typeof,ge===zb){L.tag=11,L.type=D=U9(D),L=f4(null,L,D,de,K);break e}else if(ge===rr){L.tag=14,L=s9(null,L,D,de,K);break e}}throw L="",D!==null&&typeof D==="object"&&D.$$typeof===__&&(L=" Did you wrap a component in React.lazy() more than once?"),D=P(D)||D,Error("Element type is invalid. Received a promise that resolves to: "+D+". Lazy element type must resolve to a class or function."+L)}return L;case 0:return m_(D,L,L.type,L.pendingProps,K);case 1:return de=L.type,ge=d_(de,L.pendingProps),rN(D,L,de,ge,K);case 3:e:{if(Ht(L,L.stateNode.containerInfo),D===null)throw Error("Should have a current fiber. This is a bug in React.");var Ie=L.pendingProps;ge=L.memoizedState,de=ge.element,lp(D,L),Z_(L,Ie,null,K);var ot=L.memoizedState;if(Ie=ot.cache,Wn(L,Rl,Ie),Ie!==ge.cache&&In(L,[Rl],K,!0),fm(),Ie=ot.element,_p&&ge.isDehydrated)if(ge={element:Ie,isDehydrated:!1,cache:ot.cache},L.updateQueue.baseState=ge,L.memoizedState=ge,L.flags&256){L=MH(D,L,Ie,K);break e}else if(Ie!==de){de=et(Error("This root received an early update, before anything was able hydrate. Switched the entire root to client rendering."),L),Gn(de),L=MH(D,L,Ie,K);break e}else for(_p&&(au=lg(L.stateNode.containerInfo),ka=L,ua=!0,LC=null,wf=!1,cu=null,Zs=!0),D=Tf(L,null,Ie,K),L.child=D;D;)D.flags=D.flags&-3|4096,D=D.sibling;else{if(fn(),Ie===de){L=_f(D,L,K);break e}Al(D,L,Ie,K)}L=L.child}return L;case 26:if(dg)return h_(D,L),D===null?(D=Zb(L.type,null,L.pendingProps,null))?L.memoizedState=D:ua||(L.stateNode=tO(L.type,L.pendingProps,vt(C_.current),L)):L.memoizedState=Zb(L.type,D.memoizedProps,L.pendingProps,D.memoizedState),null;case 27:if(ku)return je(L),D===null&&ku&&ua&&(ge=vt(C_.current),de=ut(),ge=L.stateNode=DN(L.type,L.pendingProps,ge,de,!1),wf||(de=L0(ge,L.type,L.pendingProps,de),de!==null&&(xo(L,0).serverProps=de)),ka=L,Zs=!0,au=DP(L.type,ge,au)),Al(D,L,L.pendingProps.children,K),h_(D,L),D===null&&(L.flags|=4194304),L.child;case 5:return D===null&&ua&&(Ie=ut(),de=Ld(L.type,L.pendingProps,Ie),ge=au,(ot=!ge)||(ot=EN(ge,L.type,L.pendingProps,Zs),ot!==null?(L.stateNode=ot,wf||(Ie=L0(ot,L.type,L.pendingProps,Ie),Ie!==null&&(xo(L,0).serverProps=Ie)),ka=L,au=TP(ot),Zs=!1,Ie=!0):Ie=!1,ot=!Ie),ot&&(de&&ai(L,ge),At(L))),je(L),ge=L.type,Ie=L.pendingProps,ot=D!==null?D.memoizedProps:null,de=Ie.children,g_(ge,Ie)?de=null:ot!==null&&g_(ge,ot)&&(L.flags|=32),L.memoizedState!==null&&(ge=cC(D,L,ZD,null,null,K),tl?vC._currentValue=ge:vC._currentValue2=ge),h_(D,L),Al(D,L,de,K),L.child;case 6:return D===null&&ua&&(D=L.pendingProps,K=ut(),D=ZH(D,K),K=au,(de=!K)||(de=TC(K,L.pendingProps,Zs),de!==null?(L.stateNode=de,ka=L,au=null,de=!0):de=!1,de=!de),de&&(D&&ai(L,K),At(L))),null;case 13:return x4(D,L,K);case 4:return Ht(L,L.stateNode.containerInfo),de=L.pendingProps,D===null?L.child=Cp(L,null,de,K):Al(D,L,de,K),L.child;case 11:return f4(D,L,L.type,L.pendingProps,K);case 7:return Al(D,L,L.pendingProps,K),L.child;case 8:return Al(D,L,L.pendingProps.children,K),L.child;case 12:return L.flags|=4,L.flags|=2048,de=L.stateNode,de.effectDuration=-0,de.passiveEffectDuration=-0,Al(D,L,L.pendingProps.children,K),L.child;case 10:return de=L.type,ge=L.pendingProps,Ie=ge.value,"value"in ge||jN||(jN=!0,console.error("The `value` prop is required for the `<Context.Provider>`. Did you misspell it or forget to pass it?")),Wn(L,de,Ie),Al(D,L,ge.children,K),L.child;case 9:return ge=L.type._context,de=L.pendingProps.children,typeof de!=="function"&&console.error("A context consumer was rendered with multiple children, or a child that isn't a function. A context consumer expects a single child that is a function. If you did pass a function, make sure there is no trailing or leading whitespace around it."),$n(L),ge=zo(ge),ue(L),de=yw(de,ge,void 0),Ae(),L.flags|=1,Al(D,L,de,K),L.child;case 14:return s9(D,L,L.type,L.pendingProps,K);case 15:return oN(D,L,L.type,L.pendingProps,K);case 19:return Cm(D,L,K);case 31:return de=L.pendingProps,K=L.mode,de={mode:de.mode,children:de.children},D===null?(D=C4(de,K),D.ref=L.ref,L.child=D,D.return=L,L=D):(D=G1(D.child,de),D.ref=L.ref,L.child=D,D.return=L,L=D),L;case 22:return Af(D,L,K);case 24:return $n(L),de=zo(Rl),D===null?(ge=Rr(),ge===null&&(ge=Ll,Ie=Nr(),ge.pooledCache=Ie,bs(Ie),Ie!==null&&(ge.pooledCacheLanes|=K),ge=Ie),L.memoizedState={parent:de,cache:ge},Bh(L),Wn(L,Rl,ge)):((D.lanes&K)!==0&&(lp(D,L),Z_(L,null,null,K),fm()),ge=D.memoizedState,Ie=L.memoizedState,ge.parent!==de?(ge={parent:de,cache:de},L.memoizedState=ge,L.lanes===0&&(L.memoizedState=L.updateQueue.baseState=ge),Wn(L,Rl,de)):(de=Ie.cache,Wn(L,Rl,de),de!==ge.cache&&In(L,[Rl],K,!0))),Al(D,L,L.pendingProps.children,K),L.child;case 29:throw L.pendingProps}throw Error("Unknown unit of work tag ("+L.tag+"). This error is likely caused by a bug in React. Please file an issue.")}function iA(D){D.flags|=4}function I4(D,L){if(D!==null&&D.child===L.child)return!1;if((L.flags&16)!==0)return!0;for(D=L.child;D!==null;){if((D.flags&13878)!==0||(D.subtreeFlags&13878)!==0)return!0;D=D.sibling}return!1}function h9(D,L,K,de){if(rc)for(K=L.child;K!==null;){if(K.tag===5||K.tag===6)q9(D,K.stateNode);else if(!(K.tag===4||ku&&K.tag===27)&&K.child!==null){K.child.return=K,K=K.child;continue}if(K===L)break;for(;K.sibling===null;){if(K.return===null||K.return===L)return;K=K.return}K.sibling.return=K.return,K=K.sibling}else if(Qu)for(var ge=L.child;ge!==null;){if(ge.tag===5){var Ie=ge.stateNode;K&&de&&(Ie=bm(Ie,ge.type,ge.memoizedProps)),q9(D,Ie)}else if(ge.tag===6)Ie=ge.stateNode,K&&de&&(Ie=ew(Ie,ge.memoizedProps)),q9(D,Ie);else if(ge.tag!==4){if(ge.tag===22&&ge.memoizedState!==null)Ie=ge.child,Ie!==null&&(Ie.return=ge),h9(D,ge,!0,!0);else if(ge.child!==null){ge.child.return=ge,ge=ge.child;continue}}if(ge===L)break;for(;ge.sibling===null;){if(ge.return===null||ge.return===L)return;ge=ge.return}ge.sibling.return=ge.return,ge=ge.sibling}}function b4(D,L,K,de){var ge=!1;if(Qu)for(var Ie=L.child;Ie!==null;){if(Ie.tag===5){var ot=Ie.stateNode;K&&de&&(ot=bm(ot,Ie.type,Ie.memoizedProps)),Xb(D,ot)}else if(Ie.tag===6)ot=Ie.stateNode,K&&de&&(ot=ew(ot,Ie.memoizedProps)),Xb(D,ot);else if(Ie.tag!==4){if(Ie.tag===22&&Ie.memoizedState!==null)ge=Ie.child,ge!==null&&(ge.return=Ie),b4(D,Ie,!0,!0),ge=!0;else if(Ie.child!==null){Ie.child.return=Ie,Ie=Ie.child;continue}}if(Ie===L)break;for(;Ie.sibling===null;){if(Ie.return===null||Ie.return===L)return ge;Ie=Ie.return}Ie.sibling.return=Ie.return,Ie=Ie.sibling}return ge}function sN(D,L){if(Qu&&I4(D,L)){D=L.stateNode;var K=D.containerInfo,de=Tr();b4(de,L,!1,!1),D.pendingChildren=de,iA(L),kh(K,de)}}function pP(D,L,K,de){if(rc)D.memoizedProps!==de&&iA(L);else if(Qu){var ge=D.stateNode,Ie=D.memoizedProps;if((D=I4(D,L))||Ie!==de){var ot=ut();Ie=qH(ge,K,Ie,de,!D,null),Ie===ge?L.stateNode=ge:(rg(Ie,K,de,ot)&&iA(L),L.stateNode=Ie,D?h9(Ie,L,!1,!1):iA(L))}else L.stateNode=ge}}function m9(D,L,K){if($9(L,K)){if(D.flags|=16777216,!EP(L,K))if(N9())D.flags|=8192;else throw ev=Aw,pw}else D.flags&=-16777217}function aN(D,L){if(sw(L)){if(D.flags|=16777216,!Y4(L))if(N9())D.flags|=8192;else throw ev=Aw,pw}else D.flags&=-16777217}function AP(D,L){L!==null&&(D.flags|=4),D.flags&16384&&(L=D.tag!==22?X():536870912,D.lanes|=L,AA|=L)}function vb(D,L){if(!ua)switch(D.tailMode){case"hidden":L=D.tail;for(var K=null;L!==null;)L.alternate!==null&&(K=L),L=L.sibling;K===null?D.tail=null:K.sibling=null;break;case"collapsed":K=D.tail;for(var de=null;K!==null;)K.alternate!==null&&(de=K),K=K.sibling;de===null?L||D.tail===null?D.tail=null:D.tail.sibling=null:de.sibling=null}}function Ac(D){var L=D.alternate!==null&&D.alternate.child===D.child,K=0,de=0;if(L)if((D.mode&2)!==Bc){for(var{selfBaseDuration:ge,child:Ie}=D;Ie!==null;)K|=Ie.lanes|Ie.childLanes,de|=Ie.subtreeFlags&65011712,de|=Ie.flags&65011712,ge+=Ie.treeBaseDuration,Ie=Ie.sibling;D.treeBaseDuration=ge}else for(ge=D.child;ge!==null;)K|=ge.lanes|ge.childLanes,de|=ge.subtreeFlags&65011712,de|=ge.flags&65011712,ge.return=D,ge=ge.sibling;else if((D.mode&2)!==Bc){ge=D.actualDuration,Ie=D.selfBaseDuration;for(var ot=D.child;ot!==null;)K|=ot.lanes|ot.childLanes,de|=ot.subtreeFlags,de|=ot.flags,ge+=ot.actualDuration,Ie+=ot.treeBaseDuration,ot=ot.sibling;D.actualDuration=ge,D.treeBaseDuration=Ie}else for(ge=D.child;ge!==null;)K|=ge.lanes|ge.childLanes,de|=ge.subtreeFlags,de|=ge.flags,ge.return=D,ge=ge.sibling;return D.subtreeFlags|=de,D.childLanes=K,L}function mC(D,L,K){var de=L.pendingProps;switch(wt(L),L.tag){case 31:case 16:case 15:case 0:case 11:case 7:case 8:case 12:case 9:case 14:return Ac(L),null;case 1:return Ac(L),null;case 3:if(K=L.stateNode,de=null,D!==null&&(de=D.memoizedState.cache),L.memoizedState.cache!==de&&(L.flags|=2048),Co(Rl,L),Xt(L),K.pendingContext&&(K.context=K.pendingContext,K.pendingContext=null),D===null||D.child===null)Ut(L)?(fo(),iA(L)):D===null||D.memoizedState.isDehydrated&&(L.flags&256)===0||(L.flags|=1024,On());return sN(D,L),Ac(L),null;case 26:if(dg){K=L.type;var ge=L.memoizedState;return D===null?(iA(L),ge!==null?(Ac(L),aN(L,ge)):(Ac(L),m9(L,K,de))):ge?ge!==D.memoizedState?(iA(L),Ac(L),aN(L,ge)):(Ac(L),L.flags&=-16777217):(rc?D.memoizedProps!==de&&iA(L):pP(D,L,K,de),Ac(L),m9(L,K,de)),null}case 27:if(ku){if(Re(L),K=vt(C_.current),ge=L.type,D!==null&&L.stateNode!=null)rc?D.memoizedProps!==de&&iA(L):pP(D,L,ge,de);else{if(!de){if(L.stateNode===null)throw Error("We must have new props for new mounts. This error is likely caused by a bug in React. Please file an issue.");return Ac(L),null}D=ut(),Ut(L)?_t(L,D):(D=DN(ge,de,K,D,!0),L.stateNode=D,iA(L))}return Ac(L),null}case 5:if(Re(L),K=L.type,D!==null&&L.stateNode!=null)pP(D,L,K,de);else{if(!de){if(L.stateNode===null)throw Error("We must have new props for new mounts. This error is likely caused by a bug in React. Please file an issue.");return Ac(L),null}D=ut(),Ut(L)?_t(L,D):(ge=vt(C_.current),ge=Yb(K,de,ge,D,L),h9(ge,L,!1,!1),L.stateNode=ge,rg(ge,K,de,D)&&iA(L))}return Ac(L),m9(L,L.type,L.pendingProps),null;case 6:if(D&&L.stateNode!=null)K=D.memoizedProps,rc?K!==de&&iA(L):Qu&&(K!==de?(D=vt(C_.current),K=ut(),L.stateNode=GH(de,D,K,L),iA(L)):L.stateNode=D.stateNode);else{if(typeof de!=="string"&&L.stateNode===null)throw Error("We must have new props for new mounts. This error is likely caused by a bug in React. Please file an issue.");if(D=vt(C_.current),K=ut(),Ut(L)){if(!_p)throw Error("Expected prepareToHydrateHostTextInstance() to never be called. This error is likely caused by a bug in React. Please file an issue.");D=L.stateNode,K=L.memoizedProps,ge=!wf,de=null;var Ie=ka;if(Ie!==null)switch(Ie.tag){case 3:ge&&(ge=iw(D,K,de),ge!==null&&(xo(L,0).serverProps=ge));break;case 27:case 5:de=Ie.memoizedProps,ge&&(ge=iw(D,K,de),ge!==null&&(xo(L,0).serverProps=ge))}z4(D,K,L,de)||At(L)}else L.stateNode=GH(de,D,K,L)}return Ac(L),null;case 13:if(de=L.memoizedState,D===null||D.memoizedState!==null&&D.memoizedState.dehydrated!==null){if(ge=Ut(L),de!==null&&de.dehydrated!==null){if(D===null){if(!ge)throw Error("A dehydrated suspense component was completed without a hydrated node. This is probably a bug in React.");if(!_p)throw Error("Expected prepareToHydrateHostSuspenseInstance() to never be called. This error is likely caused by a bug in React. Please file an issue.");if(ge=L.memoizedState,ge=ge!==null?ge.dehydrated:null,!ge)throw Error("Expected to have a hydrated suspense instance. This error is likely caused by a bug in React. Please file an issue.");G4(ge,L),Ac(L),(L.mode&2)!==Bc&&de!==null&&(ge=L.child,ge!==null&&(L.treeBaseDuration-=ge.treeBaseDuration))}else fo(),fn(),(L.flags&128)===0&&(L.memoizedState=null),L.flags|=4,Ac(L),(L.mode&2)!==Bc&&de!==null&&(ge=L.child,ge!==null&&(L.treeBaseDuration-=ge.treeBaseDuration));ge=!1}else ge=On(),D!==null&&D.memoizedState!==null&&(D.memoizedState.hydrationErrors=ge),ge=!0;if(!ge){if(L.flags&256)return mf(L),L;return mf(L),null}}if(mf(L),(L.flags&128)!==0)return L.lanes=K,(L.mode&2)!==Bc&&Mh(L),L;return K=de!==null,D=D!==null&&D.memoizedState!==null,K&&(de=L.child,ge=null,de.alternate!==null&&de.alternate.memoizedState!==null&&de.alternate.memoizedState.cachePool!==null&&(ge=de.alternate.memoizedState.cachePool.pool),Ie=null,de.memoizedState!==null&&de.memoizedState.cachePool!==null&&(Ie=de.memoizedState.cachePool.pool),Ie!==ge&&(de.flags|=2048)),K!==D&&K&&(L.child.flags|=8192),AP(L,L.updateQueue),Ac(L),(L.mode&2)!==Bc&&K&&(D=L.child,D!==null&&(L.treeBaseDuration-=D.treeBaseDuration)),null;case 4:return Xt(L),sN(D,L),D===null&&yN(L.stateNode.containerInfo),Ac(L),null;case 10:return Co(L.type,L),Ac(L),null;case 19:if(w(kl,L),ge=L.memoizedState,ge===null)return Ac(L),null;if(de=(L.flags&128)!==0,Ie=ge.rendering,Ie===null)if(de)vb(ge,!1);else{if(du!==pA||D!==null&&(D.flags&128)!==0)for(D=L.child;D!==null;){if(Ie=uP(D),Ie!==null){L.flags|=128,vb(ge,!1),D=Ie.updateQueue,L.updateQueue=D,AP(L,D),L.subtreeFlags=0,D=K;for(K=L.child;K!==null;)lh(K,D),K=K.sibling;return T(kl,kl.current&YC|VC,L),L.child}D=D.sibling}ge.tail!==null&&x_()>_v&&(L.flags|=128,de=!0,vb(ge,!1),L.lanes=4194304)}else{if(!de)if(D=uP(Ie),D!==null){if(L.flags|=128,de=!0,D=D.updateQueue,L.updateQueue=D,AP(L,D),vb(ge,!0),ge.tail===null&&ge.tailMode==="hidden"&&!Ie.alternate&&!ua)return Ac(L),null}else 2*x_()-ge.renderingStartTime>_v&&K!==536870912&&(L.flags|=128,de=!0,vb(ge,!1),L.lanes=4194304);ge.isBackwards?(Ie.sibling=L.child,L.child=Ie):(D=ge.last,D!==null?D.sibling=Ie:L.child=Ie,ge.last=Ie)}if(ge.tail!==null)return D=ge.tail,ge.rendering=D,ge.tail=D.sibling,ge.renderingStartTime=x_(),D.sibling=null,K=kl.current,K=de?K&YC|VC:K&YC,T(kl,K,L),D;return Ac(L),null;case 22:case 23:return mf(L),Nd(L),de=L.memoizedState!==null,D!==null?D.memoizedState!==null!==de&&(L.flags|=8192):de&&(L.flags|=8192),de?(K&536870912)!==0&&(L.flags&128)===0&&(Ac(L),L.subtreeFlags&6&&(L.flags|=8192)):Ac(L),K=L.updateQueue,K!==null&&AP(L,K.retryQueue),K=null,D!==null&&D.memoizedState!==null&&D.memoizedState.cachePool!==null&&(K=D.memoizedState.cachePool.pool),de=null,L.memoizedState!==null&&L.memoizedState.cachePool!==null&&(de=L.memoizedState.cachePool.pool),de!==K&&(L.flags|=2048),D!==null&&w(w2,L),null;case 24:return K=null,D!==null&&(K=D.memoizedState.cache),L.memoizedState.cache!==K&&(L.flags|=2048),Co(Rl,L),Ac(L),null;case 25:return null;case 30:return null}throw Error("Unknown unit of work tag ("+L.tag+"). This error is likely caused by a bug in React. Please file an issue.")}function S4(D,L){switch(wt(L),L.tag){case 1:return D=L.flags,D&65536?(L.flags=D&-65537|128,(L.mode&2)!==Bc&&Mh(L),L):null;case 3:return Co(Rl,L),Xt(L),D=L.flags,(D&65536)!==0&&(D&128)===0?(L.flags=D&-65537|128,L):null;case 26:case 27:case 5:return Re(L),null;case 13:if(mf(L),D=L.memoizedState,D!==null&&D.dehydrated!==null){if(L.alternate===null)throw Error("Threw in newly mounted dehydrated component. This is likely a bug in React. Please file an issue.");fn()}return D=L.flags,D&65536?(L.flags=D&-65537|128,(L.mode&2)!==Bc&&Mh(L),L):null;case 19:return w(kl,L),null;case 4:return Xt(L),null;case 10:return Co(L.type,L),null;case 22:case 23:return mf(L),Nd(L),D!==null&&w(w2,L),D=L.flags,D&65536?(L.flags=D&-65537|128,(L.mode&2)!==Bc&&Mh(L),L):null;case 24:return Co(Rl,L),null;case 25:return null;default:return null}}function P4(D,L){switch(wt(L),L.tag){case 3:Co(Rl,L),Xt(L);break;case 26:case 27:case 5:Re(L);break;case 4:Xt(L);break;case 13:mf(L);break;case 19:w(kl,L);break;case 10:Co(L.type,L);break;case 22:case 23:mf(L),Nd(L),D!==null&&w(w2,L);break;case 24:Co(Rl,L)}}function rA(D){return(D.mode&2)!==Bc}function _P(D,L){rA(D)?(Bd(),v4(L,D),nc()):v4(L,D)}function p9(D,L,K){rA(D)?(Bd(),Eb(K,D,L),nc()):Eb(K,D,L)}function v4(D,L){try{var K=L.updateQueue,de=K!==null?K.lastEffect:null;if(de!==null){var ge=de.next;K=ge;do{if((K.tag&D)===D&&((D&Ql)!==uA?ci!==null&&typeof ci.markComponentPassiveEffectMountStarted==="function"&&ci.markComponentPassiveEffectMountStarted(L):(D&Lh)!==uA&&ci!==null&&typeof ci.markComponentLayoutEffectMountStarted==="function"&&ci.markComponentLayoutEffectMountStarted(L),de=void 0,(D&z0)!==uA&&(rM=!0),de=on(L,uo,K),(D&z0)!==uA&&(rM=!1),(D&Ql)!==uA?ci!==null&&typeof ci.markComponentPassiveEffectMountStopped==="function"&&ci.markComponentPassiveEffectMountStopped():(D&Lh)!==uA&&ci!==null&&typeof ci.markComponentLayoutEffectMountStopped==="function"&&ci.markComponentLayoutEffectMountStopped(),de!==void 0&&typeof de!=="function")){var Ie=void 0;Ie=(K.tag&Lh)!==0?"useLayoutEffect":(K.tag&z0)!==0?"useInsertionEffect":"useEffect";var ot=void 0;ot=de===null?" You returned null. If your effect does not require clean up, return undefined (or nothing).":typeof de.then==="function"?`
It looks like you wrote `+Ie+`(async () => ...) or returned a Promise. Instead, write the async function inside your effect and call it immediately:
`+Ie+`(() => {
async function fetchData() {
// You can await here
const response = await MyAPI.getData(someId);
// ...
}
fetchData();
}, [someId]); // Or [] if effect doesn't need props or state
Learn more about data fetching with Hooks: https://react.dev/link/hooks-data-fetching`:" You returned: "+de,on(L,function(yt,hn){console.error("%s must not return anything besides a function, which is used for clean-up.%s",yt,hn)},Ie,ot)}K=K.next}while(K!==ge)}}catch(yt){Ec(L,L.return,yt)}}function Eb(D,L,K){try{var de=L.updateQueue,ge=de!==null?de.lastEffect:null;if(ge!==null){var Ie=ge.next;de=Ie;do{if((de.tag&D)===D){var ot=de.inst,yt=ot.destroy;yt!==void 0&&(ot.destroy=void 0,(D&Ql)!==uA?ci!==null&&typeof ci.markComponentPassiveEffectUnmountStarted==="function"&&ci.markComponentPassiveEffectUnmountStarted(L):(D&Lh)!==uA&&ci!==null&&typeof ci.markComponentLayoutEffectUnmountStarted==="function"&&ci.markComponentLayoutEffectUnmountStarted(L),(D&z0)!==uA&&(rM=!0),ge=L,on(ge,Ci,ge,K,yt),(D&z0)!==uA&&(rM=!1),(D&Ql)!==uA?ci!==null&&typeof ci.markComponentPassiveEffectUnmountStopped==="function"&&ci.markComponentPassiveEffectUnmountStopped():(D&Lh)!==uA&&ci!==null&&typeof ci.markComponentLayoutEffectUnmountStopped==="function"&&ci.markComponentLayoutEffectUnmountStopped())}de=de.next}while(de!==Ie)}}catch(hn){Ec(L,L.return,hn)}}function A9(D,L){rA(D)?(Bd(),v4(L,D),nc()):v4(L,D)}function E4(D,L,K){rA(D)?(Bd(),Eb(K,D,L),nc()):Eb(K,D,L)}function _9(D){var L=D.updateQueue;if(L!==null){var K=D.stateNode;D.type.defaultProps||"ref"in D.memoizedProps||bw||(K.props!==D.memoizedProps&&console.error("Expected %s props to match memoized props before processing the update queue. This might either be because of a bug in React, or because a component reassigns its own `this.props`. Please file an issue.",E(D)||"instance"),K.state!==D.memoizedState&&console.error("Expected %s state to match memoized state before processing the update queue. This might either be because of a bug in React, or because a component reassigns its own `this.state`. Please file an issue.",E(D)||"instance"));try{on(D,ah,L,K)}catch(de){Ec(D,D.return,de)}}}function pC(D,L,K){return D.getSnapshotBeforeUpdate(L,K)}function cN(D,L){var K=L.memoizedProps,de=L.memoizedState;L=D.stateNode,D.type.defaultProps||"ref"in D.memoizedProps||bw||(L.props!==D.memoizedProps&&console.error("Expected %s props to match memoized props before getSnapshotBeforeUpdate. This might either be because of a bug in React, or because a component reassigns its own `this.props`. Please file an issue.",E(D)||"instance"),L.state!==D.memoizedState&&console.error("Expected %s state to match memoized state before getSnapshotBeforeUpdate. This might either be because of a bug in React, or because a component reassigns its own `this.state`. Please file an issue.",E(D)||"instance"));try{var ge=d_(D.type,K,D.elementType===D.type),Ie=on(D,pC,L,ge,de);K=dO,Ie!==void 0||K.has(D.type)||(K.add(D.type),on(D,function(){console.error("%s.getSnapshotBeforeUpdate(): A snapshot value (or null) must be returned. You have returned undefined.",E(D))})),L.__reactInternalSnapshotBeforeUpdate=Ie}catch(ot){Ec(D,D.return,ot)}}function g9(D,L,K){K.props=d_(D.type,D.memoizedProps),K.state=D.memoizedState,rA(D)?(Bd(),on(D,Pn,D,L,K),nc()):on(D,Pn,D,L,K)}function AC(D){var L=D.ref;if(L!==null){switch(D.tag){case 26:case 27:case 5:var K=Gb(D.stateNode);break;case 30:K=D.stateNode;break;default:K=D.stateNode}if(typeof L==="function")if(rA(D))try{Bd(),D.refCleanup=L(K)}finally{nc()}else D.refCleanup=L(K);else typeof L==="string"?console.error("String refs are no longer supported."):L.hasOwnProperty("current")||console.error("Unexpected ref object provided for %s. Use either a ref-setter function or React.createRef().",E(D)),L.current=K}}function R0(D,L){try{on(D,AC,D)}catch(K){Ec(D,L,K)}}function sA(D,L){var K=D.ref,de=D.refCleanup;if(K!==null)if(typeof de==="function")try{if(rA(D))try{Bd(),on(D,de)}finally{nc(D)}else on(D,de)}catch(ge){Ec(D,L,ge)}finally{D.refCleanup=null,D=D.alternate,D!=null&&(D.refCleanup=null)}else if(typeof K==="function")try{if(rA(D))try{Bd(),on(D,K,null)}finally{nc(D)}else on(D,K,null)}catch(ge){Ec(D,L,ge)}else K.current=null}function f9(D,L,K,de){var ge=D.memoizedProps,Ie=ge.id,ot=ge.onCommit;ge=ge.onRender,L=L===null?"mount":"update",UP&&(L="nested-update"),typeof ge==="function"&&ge(Ie,L,D.actualDuration,D.treeBaseDuration,D.actualStartTime,K),typeof ot==="function"&&ot(D.memoizedProps.id,L,de,K)}function y9(D,L,K,de){var ge=D.memoizedProps;D=ge.id,ge=ge.onPostCommit,L=L===null?"mount":"update",UP&&(L="nested-update"),typeof ge==="function"&&ge(D,L,de,K)}function Es(D){var{type:L,memoizedProps:K,stateNode:de}=D;try{on(D,H4,de,L,K,D)}catch(ge){Ec(D,D.return,ge)}}function go(D,L,K){try{on(D,XH,D.stateNode,D.type,K,L,D)}catch(de){Ec(D,D.return,de)}}function Mb(D){return D.tag===5||D.tag===3||(dg?D.tag===26:!1)||(ku?D.tag===27&&e5(D.type):!1)||D.tag===4}function gP(D){e:for(;;){for(;D.sibling===null;){if(D.return===null||Mb(D.return))return null;D=D.return}D.sibling.return=D.return;for(D=D.sibling;D.tag!==5&&D.tag!==6&&D.tag!==18;){if(ku&&D.tag===27&&e5(D.type))continue e;if(D.flags&2)continue e;if(D.child===null||D.tag===4)continue e;else D.child.return=D,D=D.child}if(!(D.flags&2))return D.stateNode}}function ud(D,L,K){var de=D.tag;if(de===5||de===6)D=D.stateNode,L?BC(K,D,L):MC(K,D);else if(de!==4&&(ku&&de===27&&e5(D.type)&&(K=D.stateNode,L=null),D=D.child,D!==null))for(ud(D,L,K),D=D.sibling;D!==null;)ud(D,L,K),D=D.sibling}function Bb(D,L,K){var de=D.tag;if(de===5||de===6)D=D.stateNode,L?U1(K,D,L):BP(K,D);else if(de!==4&&(ku&&de===27&&e5(D.type)&&(K=D.stateNode),D=D.child,D!==null))for(Bb(D,L,K),D=D.sibling;D!==null;)Bb(D,L,K),D=D.sibling}function lN(D){if(rc){for(var L,K=D.return;K!==null;){if(Mb(K)){L=K;break}K=K.return}if(L==null)throw Error("Expected to find a host parent. This error is likely caused by a bug in React. Please file an issue.");switch(L.tag){case 27:if(ku){L=L.stateNode,K=gP(D),Bb(D,K,L);break}case 5:K=L.stateNode,L.flags&32&&(SN(K),L.flags&=-33),L=gP(D),Bb(D,L,K);break;case 3:case 4:L=L.stateNode.containerInfo,K=gP(D),ud(D,K,L);break;default:throw Error("Invalid host parent fiber. This error is likely caused by a bug in React. Please file an issue.")}}}function dN(D,L,K){D=D.containerInfo;try{on(L,wC,D,K)}catch(de){Ec(L,L.return,de)}}function x9(D){var{stateNode:L,memoizedProps:K}=D;try{on(D,aj,D.type,K,L,D)}catch(de){Ec(D,D.return,de)}}function BH(D,L){fN(D.containerInfo);for(i0=L;i0!==null;)if(D=i0,L=D.child,(D.subtreeFlags&1024)!==0&&L!==null)L.return=D,i0=L;else for(;i0!==null;){L=D=i0;var K=L.alternate,de=L.flags;switch(L.tag){case 0:break;case 11:case 15:break;case 1:(de&1024)!==0&&K!==null&&cN(L,K);break;case 3:(de&1024)!==0&&rc&&jH(L.stateNode.containerInfo);break;case 5:case 26:case 27:case 6:case 4:case 17:break;default:if((de&1024)!==0)throw Error("This unit of work tag should not have side-effects. This error is likely caused by a bug in React. Please file an issue.")}if(L=D.sibling,L!==null){L.return=D.return,i0=L;break}i0=D.return}}function C9(D,L,K){var de=K.flags;switch(K.tag){case 0:case 11:case 15:aA(D,K),de&4&&_P(K,Lh|ql);break;case 1:if(aA(D,K),de&4)if(D=K.stateNode,L===null)K.type.defaultProps||"ref"in K.memoizedProps||bw||(D.props!==K.memoizedProps&&console.error("Expected %s props to match memoized props before componentDidMount. This might either be because of a bug in React, or because a component reassigns its own `this.props`. Please file an issue.",E(K)||"instance"),D.state!==K.memoizedState&&console.error("Expected %s state to match memoized state before componentDidMount. This might either be because of a bug in React, or because a component reassigns its own `this.state`. Please file an issue.",E(K)||"instance")),rA(K)?(Bd(),on(K,Ne,K,D),nc()):on(K,Ne,K,D);else{var ge=d_(K.type,L.memoizedProps);L=L.memoizedState,K.type.defaultProps||"ref"in K.memoizedProps||bw||(D.props!==K.memoizedProps&&console.error("Expected %s props to match memoized props before componentDidUpdate. This might either be because of a bug in React, or because a component reassigns its own `this.props`. Please file an issue.",E(K)||"instance"),D.state!==K.memoizedState&&console.error("Expected %s state to match memoized state before componentDidUpdate. This might either be because of a bug in React, or because a component reassigns its own `this.state`. Please file an issue.",E(K)||"instance")),rA(K)?(Bd(),on(K,pt,K,D,ge,L,D.__reactInternalSnapshotBeforeUpdate),nc()):on(K,pt,K,D,ge,L,D.__reactInternalSnapshotBeforeUpdate)}de&64&&_9(K),de&512&&R0(K,K.return);break;case 3:if(L=wo(),aA(D,K),de&64&&(de=K.updateQueue,de!==null)){if(ge=null,K.child!==null)switch(K.child.tag){case 27:case 5:ge=Gb(K.child.stateNode);break;case 1:ge=K.child.stateNode}try{on(K,ah,de,ge)}catch(ot){Ec(K,K.return,ot)}}D.effectDuration+=wr(L);break;case 27:ku&&L===null&&de&4&&x9(K);case 26:case 5:aA(D,K),L===null&&de&4&&Es(K),de&512&&R0(K,K.return);break;case 12:if(de&4){de=wo(),aA(D,K),D=K.stateNode,D.effectDuration+=dr(de);try{on(K,f9,K,L,K4,D.effectDuration)}catch(ot){Ec(K,K.return,ot)}}else aA(D,K);break;case 13:aA(D,K),de&4&&_c(D,K),de&64&&(D=K.memoizedState,D!==null&&(D=D.dehydrated,D!==null&&(K=A_.bind(null,K),JH(D,K))));break;case 22:if(de=K.memoizedState!==null||z2,!de){L=L!==null&&L.memoizedState!==null||Kc,ge=z2;var Ie=Kc;z2=de,(Kc=L)&&!Ie?ig(D,K,(K.subtreeFlags&8772)!==0):aA(D,K),z2=ge,Kc=Ie}break;case 30:break;default:aA(D,K)}}function I9(D){var L=D.alternate;L!==null&&(D.alternate=null,I9(L)),D.child=null,D.deletions=null,D.sibling=null,D.tag===5&&(L=D.stateNode,L!==null&&IN(L)),D.stateNode=null,D._debugOwner=null,D.return=null,D.dependencies=null,D.memoizedProps=null,D.memoizedState=null,D.pendingProps=null,D.stateNode=null,D.updateQueue=null}function p_(D,L,K){for(K=K.child;K!==null;)Q0(D,L,K),K=K.sibling}function Q0(D,L,K){if(F0&&typeof F0.onCommitFiberUnmount==="function")try{F0.onCommitFiberUnmount(RC,K)}catch(Ie){ug||(ug=!0,console.error("React instrumentation encountered an error: %s",Ie))}switch(K.tag){case 26:if(dg){Kc||sA(K,L),p_(D,L,K),K.memoizedState?DC(K.memoizedState):K.stateNode&&wN(K.stateNode);break}case 27:if(ku){Kc||sA(K,L);var de=dh,ge=gg;e5(K.type)&&(dh=K.stateNode,gg=!1),p_(D,L,K),on(K,NN,K.stateNode),dh=de,gg=ge;break}case 5:Kc||sA(K,L);case 6:if(rc){if(de=dh,ge=gg,dh=null,p_(D,L,K),dh=de,gg=ge,dh!==null)if(gg)try{on(K,Wb,dh,K.stateNode)}catch(Ie){Ec(K,L,Ie)}else try{on(K,bN,dh,K.stateNode)}catch(Ie){Ec(K,L,Ie)}}else p_(D,L,K);break;case 18:rc&&dh!==null&&(gg?qb(dh,K.stateNode):ow(dh,K.stateNode));break;case 4:rc?(de=dh,ge=gg,dh=K.stateNode.containerInfo,gg=!0,p_(D,L,K),dh=de,gg=ge):(Qu&&dN(K.stateNode,K,Tr()),p_(D,L,K));break;case 0:case 11:case 14:case 15:Kc||Eb(z0,K,L),Kc||p9(K,L,Lh),p_(D,L,K);break;case 1:Kc||(sA(K,L),de=K.stateNode,typeof de.componentWillUnmount==="function"&&g9(K,L,de)),p_(D,L,K);break;case 21:p_(D,L,K);break;case 22:Kc=(de=Kc)||K.memoizedState!==null,p_(D,L,K),Kc=de;break;default:p_(D,L,K)}}function _c(D,L){if(_p&&L.memoizedState===null&&(D=L.alternate,D!==null&&(D=D.memoizedState,D!==null&&(D=D.dehydrated,D!==null))))try{on(L,MN,D)}catch(K){Ec(L,L.return,K)}}function b9(D){switch(D.tag){case 13:case 19:var L=D.stateNode;return L===null&&(L=D.stateNode=new uO),L;case 22:return D=D.stateNode,L=D._retryCache,L===null&&(L=D._retryCache=new uO),L;default:throw Error("Unexpected Suspense handler tag ("+D.tag+"). This is a bug in React.")}}function wb(D,L){var K=b9(D);L.forEach(function(de){var ge=kH.bind(null,D,de);if(!K.has(de)){if(K.add(de),hg)if(y5!==null&&W0!==null)IP(W0,y5);else throw Error("Expected finished root and lanes to be set. This is a bug in React.");de.then(ge,ge)}})}function ou(D,L){var K=L.deletions;if(K!==null)for(var de=0;de<K.length;de++){var ge=D,Ie=L,ot=K[de];if(rc){var yt=Ie;e:for(;yt!==null;){switch(yt.tag){case 27:if(ku){if(e5(yt.type)){dh=yt.stateNode,gg=!1;break e}break}case 5:dh=yt.stateNode,gg=!1;break e;case 3:case 4:dh=yt.stateNode.containerInfo,gg=!0;break e}yt=yt.return}if(dh===null)throw Error("Expected to find a host parent. This error is likely caused by a bug in React. Please file an issue.");Q0(ge,Ie,ot),dh=null,gg=!1}else Q0(ge,Ie,ot);ge=ot,Ie=ge.alternate,Ie!==null&&(Ie.return=null),ge.return=null}if(L.subtreeFlags&13878)for(L=L.child;L!==null;)_C(L,D),L=L.sibling}function _C(D,L){var K=D.alternate,de=D.flags;switch(D.tag){case 0:case 11:case 14:case 15:ou(L,D),hd(D),de&4&&(Eb(z0|ql,D,D.return),v4(z0|ql,D),p9(D,D.return,Lh|ql));break;case 1:ou(L,D),hd(D),de&512&&(Kc||K===null||sA(K,K.return)),de&64&&z2&&(D=D.updateQueue,D!==null&&(de=D.callbacks,de!==null&&(K=D.shared.hiddenCallbacks,D.shared.hiddenCallbacks=K===null?de:K.concat(de))));break;case 26:if(dg){var ge=G2;ou(L,D),hd(D),de&512&&(Kc||K===null||sA(K,K.return)),de&4&&(de=K!==null?K.memoizedState:null,L=D.memoizedState,K===null?L===null?D.stateNode===null?D.stateNode=RP(ge,D.type,D.memoizedProps,D):BN(ge,D.type,D.stateNode):D.stateNode=rw(ge,L,D.memoizedProps):de!==L?(de===null?K.stateNode!==null&&wN(K.stateNode):DC(de),L===null?BN(ge,D.type,D.stateNode):rw(ge,L,D.memoizedProps)):L===null&&D.stateNode!==null&&go(D,D.memoizedProps,K.memoizedProps));break}case 27:if(ku){ou(L,D),hd(D),de&512&&(Kc||K===null||sA(K,K.return)),K!==null&&de&4&&go(D,D.memoizedProps,K.memoizedProps);break}case 5:if(ou(L,D),hd(D),de&512&&(Kc||K===null||sA(K,K.return)),rc){if(D.flags&32){L=D.stateNode;try{on(D,SN,L)}catch(Qo){Ec(D,D.return,Qo)}}de&4&&D.stateNode!=null&&(L=D.memoizedProps,go(D,L,K!==null?K.memoizedProps:L)),de&1024&&(Sw=!0,D.type!=="form"&&console.error("Unexpected host component type. Expected a form. This is a bug in React."))}break;case 6:if(ou(L,D),hd(D),de&4&&rc){if(D.stateNode===null)throw Error("This should have a text node initialized. This error is likely caused by a bug in React. Please file an issue.");de=D.memoizedProps,K=K!==null?K.memoizedProps:de,L=D.stateNode;try{on(D,WH,L,K,de)}catch(Qo){Ec(D,D.return,Qo)}}break;case 3:if(ge=wo(),dg){nO();var Ie=G2;G2=W1(L.containerInfo),ou(L,D),G2=Ie}else ou(L,D);if(hd(D),de&4){if(rc&&_p&&K!==null&&K.memoizedState.isDehydrated)try{on(D,NP,L.containerInfo)}catch(Qo){Ec(D,D.return,Qo)}if(Qu){de=L.containerInfo,K=L.pendingChildren;try{on(D,wC,de,K)}catch(Qo){Ec(D,D.return,Qo)}}}Sw&&(Sw=!1,S9(D)),L.effectDuration+=wr(ge);break;case 4:dg?(K=G2,G2=W1(D.stateNode.containerInfo),ou(L,D),hd(D),G2=K):(ou(L,D),hd(D)),de&4&&Qu&&dN(D.stateNode,D,D.stateNode.pendingChildren);break;case 12:de=wo(),ou(L,D),hd(D),D.stateNode.effectDuration+=dr(de);break;case 13:ou(L,D),hd(D),D.child.flags&8192&&D.memoizedState!==null!==(K!==null&&K.memoizedState!==null)&&(pj=x_()),de&4&&(de=D.updateQueue,de!==null&&(D.updateQueue=null,wb(D,de)));break;case 22:ge=D.memoizedState!==null;var ot=K!==null&&K.memoizedState!==null,yt=z2,hn=Kc;if(z2=yt||ge,Kc=hn||ot,ou(L,D),Kc=hn,z2=yt,hd(D),de&8192&&(L=D.stateNode,L._visibility=ge?L._visibility&-2:L._visibility|1,ge&&(K===null||ot||z2||Kc||gf(D)),rc)){e:if(K=null,rc)for(L=D;;){if(L.tag===5||dg&&L.tag===26){if(K===null){ot=K=L;try{Ie=ot.stateNode,ge?on(ot,PN,Ie):on(ot,ag,ot.stateNode,ot.memoizedProps)}catch(Qo){Ec(ot,ot.return,Qo)}}}else if(L.tag===6){if(K===null){ot=L;try{var zn=ot.stateNode;ge?on(ot,KH,zn):on(ot,vN,zn,ot.memoizedProps)}catch(Qo){Ec(ot,ot.return,Qo)}}}else if((L.tag!==22&&L.tag!==23||L.memoizedState===null||L===D)&&L.child!==null){L.child.return=L,L=L.child;continue}if(L===D)break e;for(;L.sibling===null;){if(L.return===null||L.return===D)break e;K===L&&(K=null),L=L.return}K===L&&(K=null),L.sibling.return=L.return,L=L.sibling}}de&4&&(de=D.updateQueue,de!==null&&(K=de.retryQueue,K!==null&&(de.retryQueue=null,wb(D,K))));break;case 19:ou(L,D),hd(D),de&4&&(de=D.updateQueue,de!==null&&(D.updateQueue=null,wb(D,de)));break;case 30:break;case 21:break;default:ou(L,D),hd(D)}}function hd(D){var L=D.flags;if(L&2){try{on(D,lN,D)}catch(K){Ec(D,D.return,K)}D.flags&=-3}L&4096&&(D.flags&=-4097)}function S9(D){if(D.subtreeFlags&1024)for(D=D.child;D!==null;){var L=D;S9(L),L.tag===5&&L.flags&1024&&sg(L.stateNode),D=D.sibling}}function aA(D,L){if(L.subtreeFlags&8772)for(L=L.child;L!==null;)C9(D,L.alternate,L),L=L.sibling}function P9(D){switch(D.tag){case 0:case 11:case 14:case 15:p9(D,D.return,Lh),gf(D);break;case 1:sA(D,D.return);var L=D.stateNode;typeof L.componentWillUnmount==="function"&&g9(D,D.return,L),gf(D);break;case 27:ku&&on(D,NN,D.stateNode);case 26:case 5:sA(D,D.return),gf(D);break;case 22:D.memoizedState===null&&gf(D);break;case 30:gf(D);break;default:gf(D)}}function gf(D){for(D=D.child;D!==null;)P9(D),D=D.sibling}function v9(D,L,K,de){var ge=K.flags;switch(K.tag){case 0:case 11:case 15:ig(D,K,de),_P(K,Lh);break;case 1:if(ig(D,K,de),L=K.stateNode,typeof L.componentDidMount==="function"&&on(K,Ne,K,L),L=K.updateQueue,L!==null){D=K.stateNode;try{on(K,yb,L,D)}catch(Ie){Ec(K,K.return,Ie)}}de&&ge&64&&_9(K),R0(K,K.return);break;case 27:ku&&x9(K);case 26:case 5:ig(D,K,de),de&&L===null&&ge&4&&Es(K),R0(K,K.return);break;case 12:if(de&&ge&4){ge=wo(),ig(D,K,de),de=K.stateNode,de.effectDuration+=dr(ge);try{on(K,f9,K,L,K4,de.effectDuration)}catch(Ie){Ec(K,K.return,Ie)}}else ig(D,K,de);break;case 13:ig(D,K,de),de&&ge&4&&_c(D,K);break;case 22:K.memoizedState===null&&ig(D,K,de),R0(K,K.return);break;case 30:break;default:ig(D,K,de)}}function ig(D,L,K){K=K&&(L.subtreeFlags&8772)!==0;for(L=L.child;L!==null;)v9(D,L.alternate,L,K),L=L.sibling}function Uc(D,L){var K=null;D!==null&&D.memoizedState!==null&&D.memoizedState.cachePool!==null&&(K=D.memoizedState.cachePool.pool),D=null,L.memoizedState!==null&&L.memoizedState.cachePool!==null&&(D=L.memoizedState.cachePool.pool),D!==K&&(D!=null&&bs(D),K!=null&&Fs(K))}function Tb(D,L){D=null,L.alternate!==null&&(D=L.alternate.memoizedState.cache),L=L.memoizedState.cache,L!==D&&(bs(L),D!=null&&Fs(D))}function ff(D,L,K,de){if(L.subtreeFlags&10256)for(L=L.child;L!==null;)Dh(D,L,K,de),L=L.sibling}function Dh(D,L,K,de){var ge=L.flags;switch(L.tag){case 0:case 11:case 15:ff(D,L,K,de),ge&2048&&A9(L,Ql|ql);break;case 1:ff(D,L,K,de);break;case 3:var Ie=wo();ff(D,L,K,de),ge&2048&&(K=null,L.alternate!==null&&(K=L.alternate.memoizedState.cache),L=L.memoizedState.cache,L!==K&&(bs(L),K!=null&&Fs(K))),D.passiveEffectDuration+=wr(Ie);break;case 12:if(ge&2048){ge=wo(),ff(D,L,K,de),D=L.stateNode,D.passiveEffectDuration+=dr(ge);try{on(L,y9,L,L.alternate,K4,D.passiveEffectDuration)}catch(yt){Ec(L,L.return,yt)}}else ff(D,L,K,de);break;case 13:ff(D,L,K,de);break;case 23:break;case 22:Ie=L.stateNode;var ot=L.alternate;L.memoizedState!==null?Ie._visibility&2?ff(D,L,K,de):Db(D,L):Ie._visibility&2?ff(D,L,K,de):(Ie._visibility|=2,yf(D,L,K,de,(L.subtreeFlags&10256)!==0)),ge&2048&&Uc(ot,L);break;case 24:ff(D,L,K,de),ge&2048&&Tb(L.alternate,L);break;default:ff(D,L,K,de)}}function yf(D,L,K,de,ge){ge=ge&&(L.subtreeFlags&10256)!==0;for(L=L.child;L!==null;)E9(D,L,K,de,ge),L=L.sibling}function E9(D,L,K,de,ge){var Ie=L.flags;switch(L.tag){case 0:case 11:case 15:yf(D,L,K,de,ge),A9(L,Ql);break;case 23:break;case 22:var ot=L.stateNode;L.memoizedState!==null?ot._visibility&2?yf(D,L,K,de,ge):Db(D,L):(ot._visibility|=2,yf(D,L,K,de,ge)),ge&&Ie&2048&&Uc(L.alternate,L);break;case 24:yf(D,L,K,de,ge),ge&&Ie&2048&&Tb(L.alternate,L);break;default:yf(D,L,K,de,ge)}}function Db(D,L){if(L.subtreeFlags&10256)for(L=L.child;L!==null;){var K=D,de=L,ge=de.flags;switch(de.tag){case 22:Db(K,de),ge&2048&&Uc(de.alternate,de);break;case 24:Db(K,de),ge&2048&&Tb(de.alternate,de);break;default:Db(K,de)}L=L.sibling}}function I2(D){if(D.subtreeFlags&av)for(D=D.child;D!==null;)gC(D),D=D.sibling}function gC(D){switch(D.tag){case 26:I2(D),D.flags&av&&(D.memoizedState!==null?TN(G2,D.memoizedState,D.memoizedProps):MP(D.type,D.memoizedProps));break;case 5:I2(D),D.flags&av&&MP(D.type,D.memoizedProps);break;case 3:case 4:if(dg){var L=G2;G2=W1(D.stateNode.containerInfo),I2(D),G2=L}else I2(D);break;case 22:D.memoizedState===null&&(L=D.alternate,L!==null&&L.memoizedState!==null?(L=av,av=16777216,I2(D),av=L):I2(D));break;default:I2(D)}}function M9(D){var L=D.alternate;if(L!==null&&(D=L.child,D!==null)){L.child=null;do L=D.sibling,D.sibling=null,D=L;while(D!==null)}}function fC(D){var L=D.deletions;if((D.flags&16)!==0){if(L!==null)for(var K=0;K<L.length;K++){var de=L[K];i0=de,uN(de,D)}M9(D)}if(D.subtreeFlags&10256)for(D=D.child;D!==null;)wH(D),D=D.sibling}function wH(D){switch(D.tag){case 0:case 11:case 15:fC(D),D.flags&2048&&E4(D,D.return,Ql|ql);break;case 3:var L=wo();fC(D),D.stateNode.passiveEffectDuration+=wr(L);break;case 12:L=wo(),fC(D),D.stateNode.passiveEffectDuration+=dr(L);break;case 22:L=D.stateNode,D.memoizedState!==null&&L._visibility&2&&(D.return===null||D.return.tag!==13)?(L._visibility&=-3,M4(D)):fC(D);break;default:fC(D)}}function M4(D){var L=D.deletions;if((D.flags&16)!==0){if(L!==null)for(var K=0;K<L.length;K++){var de=L[K];i0=de,uN(de,D)}M9(D)}for(D=D.child;D!==null;)B9(D),D=D.sibling}function B9(D){switch(D.tag){case 0:case 11:case 15:E4(D,D.return,Ql),M4(D);break;case 22:var L=D.stateNode;L._visibility&2&&(L._visibility&=-3,M4(D));break;default:M4(D)}}function uN(D,L){for(;i0!==null;){var K=i0,de=K;switch(de.tag){case 0:case 11:case 15:E4(de,L,Ql);break;case 23:case 22:de.memoizedState!==null&&de.memoizedState.cachePool!==null&&(de=de.memoizedState.cachePool.pool,de!=null&&bs(de));break;case 24:Fs(de.memoizedState.cache)}if(de=K.child,de!==null)de.return=K,i0=de;else e:for(K=D;i0!==null;){de=i0;var ge=de.sibling,Ie=de.return;if(I9(de),de===K){i0=null;break e}if(ge!==null){ge.return=Ie,i0=ge;break e}i0=Ie}}}function Nb(D){var L=J9(D);if(L!=null){if(typeof L.memoizedProps["data-testname"]!=="string")throw Error("Invalid host root specified. Should be either a React container or a node with a testname attribute.");return L}if(D=f_(D),D===null)throw Error("Could not find React container within specified host subtree.");return D.stateNode.current}function w9(D,L){var K=D.tag;switch(L.$$typeof){case qN:if(D.type===L.value)return!0;break;case hO:e:{L=L.value,D=[D,0];for(K=0;K<D.length;){var de=D[K++],ge=de.tag,Ie=D[K++],ot=L[Ie];if(ge!==5&&ge!==26&&ge!==27||!k0(de)){for(;ot!=null&&w9(de,ot);)Ie++,ot=L[Ie];if(Ie===L.length){L=!0;break e}else for(de=de.child;de!==null;)D.push(de,Ie),de=de.sibling}}L=!1}return L;case uh:if((K===5||K===26||K===27)&&lA(D.stateNode,L.value))return!0;break;case ac:if(K===5||K===6||K===26||K===27){if(D=su(D),D!==null&&0<=D.indexOf(L.value))return!0}break;case Dn:if(K===5||K===26||K===27){if(D=D.memoizedProps["data-testname"],typeof D==="string"&&D.toLowerCase()===L.value.toLowerCase())return!0}break;default:throw Error("Invalid selector type specified.")}return!1}function T9(D){switch(D.$$typeof){case qN:return"<"+(P(D.value)||"Unknown")+">";case hO:return":has("+(T9(D)||"")+")";case uh:return'[role="'+D.value+'"]';case ac:return'"'+D.value+'"';case Dn:return'[data-testname="'+D.value+'"]';default:throw Error("Invalid selector type specified.")}}function Rb(D,L){var K=[];D=[D,0];for(var de=0;de<D.length;){var ge=D[de++],Ie=ge.tag,ot=D[de++],yt=L[ot];if(Ie!==5&&Ie!==26&&Ie!==27||!k0(ge)){for(;yt!=null&&w9(ge,yt);)ot++,yt=L[ot];if(ot===L.length)K.push(ge);else for(ge=ge.child;ge!==null;)D.push(ge,ot),ge=ge.sibling}}return K}function Qb(D,L){if(!kd)throw Error("Test selector API is not supported by this renderer.");D=Nb(D),D=Rb(D,L),L=[],D=Array.from(D);for(var K=0;K<D.length;){var de=D[K++],ge=de.tag;if(ge===5||ge===26||ge===27)k0(de)||L.push(de.stateNode);else for(de=de.child;de!==null;)D.push(de),de=de.sibling}return L}function TH(){kd&&Pw.forEach(function(D){return D()})}function DH(){var D=typeof IS_REACT_ACT_ENVIRONMENT<"u"?IS_REACT_ACT_ENVIRONMENT:void 0;return D||En.actQueue===null||console.error("The current testing environment is not configured to support act(...)"),D}function Im(D){if((Ma&zu)!==Ou&&ta!==0)return ta&-ta;var L=En.T;return L!==null?(L._updatedFibers||(L._updatedFibers=new Set),L._updatedFibers.add(D),D=l5,D!==0?D:sh()):xN()}function kb(){Fl===0&&(Fl=(ta&536870912)===0||ua?U():536870912);var D=Y0.current;return D!==null&&(D.flags|=32),Fl}function Rd(D,L,K){if(rM&&console.error("useInsertionEffect must not schedule updates."),cc&&(gO=!0),D===Ll&&(Qr===x5||Qr===iM)||D.cancelPendingCommit!==null)IC(D,0),xC(D,ta,Fl,!1);if(W(D,K),(Ma&zu)!==0&&D===Ll){if(I_)switch(L.tag){case 0:case 11:case 15:D=ea&&E(ea)||"Unknown",fj.has(D)||(fj.add(D),L=E(L)||"Unknown",console.error("Cannot update a component (`%s`) while rendering a different component (`%s`). To locate the bad setState() call inside `%s`, follow the stack trace as described in https://react.dev/link/setstate-in-render",L,D,D));break;case 1:gj||(console.error("Cannot update during an existing state transition (such as within `render`). Render methods should be a pure function of props and state."),gj=!0)}}else hg&&oe(D,L,K),SC(L),D===Ll&&((Ma&zu)===Ou&&(pv|=K),du===lv&&xC(D,ta,Fl,!1)),Wo(D)}function yC(D,L,K){if((Ma&(zu|mA))!==Ou)throw Error("Should not already be working.");var de=!K&&(L&124)===0&&(L&D.expiredLanes)===0||z(D,L),ge=de?CP(D,L):yP(D,L,!0),Ie=de;do{if(ge===pA){uv&&!de&&xC(D,L,0,!1);break}else{if(K=D.current.alternate,Ie&&!D9(K)){ge=yP(D,L,!1),Ie=!1;continue}if(ge===XC){if(Ie=L,D.errorRecoveryDisabledLanes&Ie)var ot=0;else ot=D.pendingLanes&-536870913,ot=ot!==0?ot:ot&536870912?536870912:0;if(ot!==0){L=ot;e:{ge=D;var yt=ot;ot=yg;var hn=_p&&ge.current.memoizedState.isDehydrated;if(hn&&(IC(ge,yt).flags|=256),yt=yP(ge,yt,!1),yt!==XC){if(hv&&!hn){ge.errorRecoveryDisabledLanes|=Ie,pv|=Ie,ge=lv;break e}ge=yl,yl=ot,ge!==null&&(yl===null?yl=ge:yl.push.apply(yl,ge))}ge=yt}if(Ie=!1,ge!==XC)continue}}if(ge===cv){IC(D,0),xC(D,L,0,!0);break}e:{switch(de=D,ge){case pA:case cv:throw Error("Root did not complete. This is a bug in React.");case lv:if((L&4194048)!==L)break;case $N:xC(de,L,Fl,!KC);break e;case XC:yl=null;break;case mO:case hj:break;default:throw Error("Unknown root exit status.")}if(En.actQueue!==null)T4(de,K,L,yl,X0,pO,Fl,pv,AA);else{if((L&62914560)===L&&(Ie=pj+eR-x_(),10<Ie)){if(xC(de,L,Fl,!KC),H(de,0,!0)!==0)break e;de.timeoutHandle=sj(mp.bind(null,de,K,yl,X0,pO,L,Fl,pv,AA,KC,ge,C5,-0,0),Ie);break e}mp(de,K,yl,X0,pO,L,Fl,pv,AA,KC,ge,qC,-0,0)}}}break}while(1);Wo(D)}function mp(D,L,K,de,ge,Ie,ot,yt,hn,zn,Qo,Go,di,kr){if(D.timeoutHandle=Vb,Go=L.subtreeFlags,Go&8192||(Go&16785408)===16785408){if(Z9(),gC(L),Go=VH(),Go!==null){D.cancelPendingCommit=Go(T4.bind(null,D,L,Ie,K,de,ge,ot,yt,hn,Qo,AO,di,kr)),xC(D,Ie,ot,!zn);return}}T4(D,L,Ie,K,de,ge,ot,yt,hn)}function D9(D){for(var L=D;;){var K=L.tag;if((K===0||K===11||K===15)&&L.flags&16384&&(K=L.updateQueue,K!==null&&(K=K.stores,K!==null)))for(var de=0;de<K.length;de++){var ge=K[de],Ie=ge.getSnapshot;ge=ge.value;try{if(!H0(Ie(),ge))return!1}catch(ot){return!1}}if(K=L.child,L.subtreeFlags&16384&&K!==null)K.return=L,L=K;else{if(L===D)break;for(;L.sibling===null;){if(L.return===null||L.return===D)return!0;L=L.return}L.sibling.return=L.return,L=L.sibling}}return!0}function xC(D,L,K,de){L&=~Av,L&=~pv,D.suspendedLanes|=L,D.pingedLanes&=~L,de&&(D.warmLanes|=L),de=D.expirationTimes;for(var ge=L;0<ge;){var Ie=31-Sm(ge),ot=1<<Ie;de[Ie]=-1,ge&=~ot}K!==0&&q(D,K,L)}function Lb(){return(Ma&(zu|mA))===Ou?(Ti(0,!1),!1):!0}function CC(){if(ea!==null){if(Qr===P_)var D=ea.return;else D=ea,Vn(),iP(D),Ei=null,hi=0,D=ea;for(;D!==null;)P4(D.alternate,D),D=D.return;ea=null}}function IC(D,L){var K=D.timeoutHandle;K!==Vb&&(D.timeoutHandle=Vb,YH(K)),K=D.cancelPendingCommit,K!==null&&(D.cancelPendingCommit=null,K()),CC(),Ll=D,ea=K=G1(D.current,null),ta=L,Qr=P_,Rf=null,KC=!1,uv=z(D,L),hv=!1,du=pA,AA=Fl=Av=pv=mv=0,yl=yg=null,pO=!1,(L&8)!==0&&(L|=L&32);var de=D.entangledLanes;if(de!==0)for(D=D.entanglements,de&=L;0<de;){var ge=31-Sm(de),Ie=1<<ge;L|=D[ge],de&=~Ie}return jC=L,Dl(),L=n0(),1000<L-Mc&&(En.recentlyCreatedOwnerStacks=0,Mc=L),Ag.discardPendingWarnings(),K}function hN(D,L){Dr=null,En.H=ov,En.getCurrentStack=null,I_=!1,dA=null,L===ZP||L===j4?(L=cs(),Qr=bp):L===pw?(L=cs(),Qr=Y2):Qr=L===Nf?mj:L!==null&&typeof L==="object"&&typeof L.then==="function"?dv:oM,Rf=L;var K=ea;if(K===null)du=cv,bb(D,et(L,D.current));else switch(K.mode&2&&mc(K),Ae(),Qr){case oM:ci!==null&&typeof ci.markComponentErrored==="function"&&ci.markComponentErrored(K,L,ta);break;case x5:case iM:case bp:case dv:case ZN:ci!==null&&typeof ci.markComponentSuspended==="function"&&ci.markComponentSuspended(K,L,ta)}}function N9(){var D=Y0.current;return D===null?!0:(ta&4194048)===ta?Df===null?!0:!1:(ta&62914560)===ta||(ta&536870912)!==0?D===Df:!1}function B4(){var D=En.H;return En.H=ov,D===null?ov:D}function R9(){var D=En.A;return En.A=wSe,D}function fP(){du=lv,KC||(ta&4194048)!==ta&&Y0.current!==null||(uv=!0),(mv&134217727)===0&&(pv&134217727)===0||Ll===null||xC(Ll,ta,Fl,!1)}function yP(D,L,K){var de=Ma;Ma|=zu;var ge=B4(),Ie=R9();if(Ll!==D||ta!==L){if(hg){var ot=D.memoizedUpdaters;0<ot.size&&(IP(D,ta),ot.clear()),ie(D,L)}X0=null,IC(D,L)}_e(L),L=!1,ot=du;e:do try{if(Qr!==P_&&ea!==null){var yt=ea,hn=Rf;switch(Qr){case mj:CC(),ot=$N;break e;case bp:case x5:case iM:case dv:Y0.current===null&&(L=!0);var zn=Qr;if(Qr=P_,Rf=null,b2(D,yt,hn,zn),K&&uv){ot=pA;break e}break;default:zn=Qr,Qr=P_,Rf=null,b2(D,yt,hn,zn)}}xP(),ot=du;break}catch(Qo){hN(D,Qo)}while(1);return L&&D.shellSuspendCounter++,Vn(),Ma=de,En.H=ge,En.A=Ie,Pe(),ea===null&&(Ll=null,ta=0,Dl()),ot}function xP(){for(;ea!==null;)Q9(ea)}function CP(D,L){var K=Ma;Ma|=zu;var de=B4(),ge=R9();if(Ll!==D||ta!==L){if(hg){var Ie=D.memoizedUpdaters;0<Ie.size&&(IP(D,ta),Ie.clear()),ie(D,L)}X0=null,_v=x_()+vw,IC(D,L)}else uv=z(D,L);_e(L);e:do try{if(Qr!==P_&&ea!==null)t:switch(L=ea,Ie=Rf,Qr){case oM:Qr=P_,Rf=null,b2(D,L,Ie,oM);break;case x5:case iM:if(Vi(Ie)){Qr=P_,Rf=null,k9(L);break}L=function(){Qr!==x5&&Qr!==iM||Ll!==D||(Qr=ZN),Wo(D)},Ie.then(L,L);break e;case bp:Qr=ZN;break e;case Y2:Qr=fg;break e;case ZN:Vi(Ie)?(Qr=P_,Rf=null,k9(L)):(Qr=P_,Rf=null,b2(D,L,Ie,ZN));break;case fg:var ot=null;switch(ea.tag){case 26:ot=ea.memoizedState;case 5:case 27:var yt=ea,{type:hn,pendingProps:zn}=yt;if(ot?Y4(ot):EP(hn,zn)){Qr=P_,Rf=null;var Qo=yt.sibling;if(Qo!==null)ea=Qo;else{var Go=yt.return;Go!==null?(ea=Go,w4(Go)):ea=null}break t}break;default:console.error("Unexpected type of fiber triggered a suspensey commit. This is a bug in React.")}Qr=P_,Rf=null,b2(D,L,Ie,fg);break;case dv:Qr=P_,Rf=null,b2(D,L,Ie,dv);break;case mj:CC(),du=$N;break e;default:throw Error("Unexpected SuspendedReason. This is a bug in React.")}En.actQueue!==null?xP():NH();break}catch(di){hN(D,di)}while(1);if(Vn(),En.H=de,En.A=ge,Ma=K,ea!==null)return ci!==null&&typeof ci.markRenderYielded==="function"&&ci.markRenderYielded(),pA;return Pe(),Ll=null,ta=0,Dl(),du}function NH(){for(;ea!==null&&!LP();)Q9(ea)}function Q9(D){var L=D.alternate;(D.mode&2)!==Bc?(Yr(D),L=on(D,z1,L,D,jC),mc(D)):L=on(D,z1,L,D,jC),D.memoizedProps=D.pendingProps,L===null?w4(D):ea=L}function k9(D){var L=on(D,L9,D);D.memoizedProps=D.pendingProps,L===null?w4(D):ea=L}function L9(D){var L=D.alternate,K=(D.mode&2)!==Bc;switch(K&&Yr(D),D.tag){case 15:case 0:L=Sb(L,D,D.pendingProps,D.type,void 0,ta);break;case 11:L=Sb(L,D,D.pendingProps,D.type.render,D.ref,ta);break;case 5:iP(D);default:P4(L,D),D=ea=lh(D,jC),L=z1(L,D,jC)}return K&&mc(D),L}function b2(D,L,K,de){Vn(),iP(L),Ei=null,hi=0;var ge=L.return;try{if(pf(D,ge,L,K,ta)){du=cv,bb(D,et(K,D.current)),ea=null;return}}catch(Ie){if(ge!==null)throw ea=ge,Ie;du=cv,bb(D,et(K,D.current)),ea=null;return}if(L.flags&32768){if(ua||de===oM)D=!0;else if(uv||(ta&536870912)!==0)D=!1;else if(KC=D=!0,de===x5||de===iM||de===bp||de===dv)de=Y0.current,de!==null&&de.tag===13&&(de.flags|=16384);F9(L,D)}else w4(L)}function w4(D){var L=D;do{if((L.flags&32768)!==0){F9(L,KC);return}var K=L.alternate;if(D=L.return,Yr(L),K=on(L,mC,K,L,jC),(L.mode&2)!==Bc&&zc(L),K!==null){ea=K;return}if(L=L.sibling,L!==null){ea=L;return}ea=L=D}while(L!==null);du===pA&&(du=hj)}function F9(D,L){do{var K=S4(D.alternate,D);if(K!==null){K.flags&=32767,ea=K;return}if((D.mode&2)!==Bc){zc(D),K=D.actualDuration;for(var de=D.child;de!==null;)K+=de.actualDuration,de=de.sibling;D.actualDuration=K}if(K=D.return,K!==null&&(K.flags|=32768,K.subtreeFlags=0,K.deletions=null),!L&&(D=D.sibling,D!==null)){ea=D;return}ea=D=K}while(D!==null);du=$N,ea=null}function T4(D,L,K,de,ge,Ie,ot,yt,hn){D.cancelPendingCommit=null;do bC();while(Bm!==Gu);if(Ag.flushLegacyContextWarning(),Ag.flushPendingUnsafeLifecycleWarnings(),(Ma&(zu|mA))!==Ou)throw Error("Should not already be working.");if(ci!==null&&typeof ci.markCommitStarted==="function"&&ci.markCommitStarted(K),L===null)he();else{if(K===0&&console.error("finishedLanes should not be empty during a commit. This is a bug in React."),L===D.current)throw Error("Cannot commit the same tree as before. This error is likely caused by a bug in React. Please file an issue.");if(Ie=L.lanes|L.childLanes,Ie|=q4,j(D,K,Ie,ot,yt,hn),D===Ll&&(ea=Ll=null,ta=0),b5=L,$1=D,S5=K,P5=Ie,tR=ge,Zse=de,(L.subtreeFlags&10256)!==0||(L.flags&10256)!==0?(D.callbackNode=null,D.callbackPriority=0,Fb(FP,function(){return H9(!0),null})):(D.callbackNode=null,D.callbackPriority=0),K4=a5(),de=(L.flags&13878)!==0,(L.subtreeFlags&13878)!==0||de){de=En.T,En.T=null,ge=bf(),ru(2),ot=Ma,Ma|=mA;try{BH(D,L,K)}finally{Ma=ot,ru(ge),En.T=de}}Bm=_A,mN(),D4(),pN()}}function mN(){if(Bm===_A){Bm=Gu;var D=$1,L=b5,K=S5,de=(L.flags&13878)!==0;if((L.subtreeFlags&13878)!==0||de){de=En.T,En.T=null;var ge=bf();ru(2);var Ie=Ma;Ma|=mA;try{y5=K,W0=D,_C(L,D),W0=y5=null,F4(D.containerInfo)}finally{Ma=Ie,ru(ge),En.T=de}}D.current=L,Bm=I5}}function D4(){if(Bm===I5){Bm=Gu;var D=$1,L=b5,K=S5,de=(L.flags&8772)!==0;if((L.subtreeFlags&8772)!==0||de){de=En.T,En.T=null;var ge=bf();ru(2);var Ie=Ma;Ma|=mA;try{ci!==null&&typeof ci.markLayoutEffectsStarted==="function"&&ci.markLayoutEffectsStarted(K),y5=K,W0=D,C9(D,L.alternate,L),W0=y5=null,ci!==null&&typeof ci.markLayoutEffectsStopped==="function"&&ci.markLayoutEffectsStopped()}finally{Ma=Ie,ru(ge),En.T=de}}Bm=Aj}}function pN(){if(Bm===TSe||Bm===Aj){Bm=Gu,kN();var D=$1,L=b5,K=S5,de=Zse,ge=(L.subtreeFlags&10256)!==0||(L.flags&10256)!==0;ge?Bm=_j:(Bm=Gu,b5=$1=null,S2(D,D.pendingLanes),gv=0,Mw=null);var Ie=D.pendingLanes;if(Ie===0&&(Mm=null),ge||V9(D),ge=J(K),L=L.stateNode,F0&&typeof F0.onCommitFiberRoot==="function")try{var ot=(L.current.flags&128)===128;switch(ge){case 2:var yt=Mf;break;case 8:yt=aw;break;case 32:yt=FP;break;case 268435456:yt=sc;break;default:yt=FP}F0.onCommitFiberRoot(RC,L,yt,ot)}catch(Go){ug||(ug=!0,console.error("React instrumentation encountered an error: %s",Go))}if(hg&&D.memoizedUpdaters.clear(),TH(),de!==null){ot=En.T,yt=bf(),ru(2),En.T=null;try{var hn=D.onRecoverableError;for(L=0;L<de.length;L++){var zn=de[L],Qo=RH(zn.stack);on(zn.source,hn,zn.value,Qo)}}finally{En.T=ot,ru(yt)}}(S5&3)!==0&&bC(),Wo(D),Ie=D.pendingLanes,(K&4194090)!==0&&(Ie&42)!==0?(uw=!0,D===_O?Ew++:(Ew=0,_O=D)):Ew=0,Ti(0,!1),he()}}function RH(D){return D={componentStack:D},Object.defineProperty(D,"digest",{get:function(){console.error('You are accessing "digest" from the errorInfo object passed to onRecoverableError. This property is no longer provided as part of errorInfo but can be accessed as a property of the Error instance itself.')}}),D}function S2(D,L){(D.pooledCacheLanes&=L)===0&&(L=D.pooledCache,L!=null&&(D.pooledCache=null,Fs(L)))}function bC(D){return mN(),D4(),pN(),H9(D)}function H9(){if(Bm!==_j)return!1;var D=$1,L=P5;P5=0;var K=J(S5),de=32>K?32:K;K=En.T;var ge=bf();try{ru(de),En.T=null,de=tR,tR=null;var Ie=$1,ot=S5;if(Bm=Gu,b5=$1=null,S5=0,(Ma&(zu|mA))!==Ou)throw Error("Cannot flush passive effects while already rendering.");cc=!0,gO=!1,ci!==null&&typeof ci.markPassiveEffectsStarted==="function"&&ci.markPassiveEffectsStarted(ot);var yt=Ma;if(Ma|=mA,wH(Ie.current),Dh(Ie,Ie.current,ot,de),ci!==null&&typeof ci.markPassiveEffectsStopped==="function"&&ci.markPassiveEffectsStopped(),V9(Ie),Ma=yt,Ti(0,!1),gO?Ie===Mw?gv++:(gv=0,Mw=Ie):gv=0,gO=cc=!1,F0&&typeof F0.onPostCommitFiberRoot==="function")try{F0.onPostCommitFiberRoot(RC,Ie)}catch(zn){ug||(ug=!0,console.error("React instrumentation encountered an error: %s",zn))}var hn=Ie.current.stateNode;return hn.effectDuration=0,hn.passiveEffectDuration=0,!0}finally{ru(ge),En.T=K,S2(D,L)}}function QH(D,L,K){L=et(K,L),L=xm(D.stateNode,L,2),D=gm(D,L,2),D!==null&&(W(D,2),Wo(D))}function Ec(D,L,K){if(rM=!1,D.tag===3)QH(D,D,K);else{for(;L!==null;){if(L.tag===3){QH(L,D,K);return}if(L.tag===1){var de=L.stateNode;if(typeof L.type.getDerivedStateFromError==="function"||typeof de.componentDidCatch==="function"&&(Mm===null||!Mm.has(de))){D=et(K,D),K=og(2),de=gm(L,K,2),de!==null&&(u_(K,de,L,D),W(de,2),Wo(de));return}}L=L.return}console.error(`Internal React error: Attempted to capture a commit phase error inside a detached tree. This indicates a bug in React. Potential causes include deleting the same fiber more than once, committing an already-finished tree, or an inconsistent return pointer.
Error message:
%s`,K)}}function O9(D,L,K){var de=D.pingCache;if(de===null){de=D.pingCache=new uj;var ge=new Set;de.set(L,ge)}else ge=de.get(L),ge===void 0&&(ge=new Set,de.set(L,ge));ge.has(K)||(hv=!0,ge.add(K),de=N4.bind(null,D,L,K),hg&&IP(D,K),L.then(de,de))}function N4(D,L,K){var de=D.pingCache;de!==null&&de.delete(L),D.pingedLanes|=D.suspendedLanes&K,D.warmLanes&=~K,DH()&&En.actQueue===null&&console.error(`A suspended resource finished loading inside a test, but the event was not wrapped in act(...).
When testing, code that resolves suspended data should be wrapped into act(...):
act(() => {
/* finish loading suspended data */
});
/* assert on the output */
This ensures that you're testing the behavior the user would see in the browser. Learn more at https://react.dev/link/wrap-tests-with-act`),Ll===D&&(ta&K)===K&&(du===lv||du===mO&&(ta&62914560)===ta&&x_()-pj<eR?(Ma&zu)===Ou&&IC(D,0):Av|=K,AA===ta&&(AA=0)),Wo(D)}function z9(D,L){L===0&&(L=X()),D=Tu(D,L),D!==null&&(W(D,L),Wo(D))}function A_(D){var L=D.memoizedState,K=0;L!==null&&(K=L.retryLane),z9(D,K)}function kH(D,L){var K=0;switch(D.tag){case 13:var{stateNode:de,memoizedState:ge}=D;ge!==null&&(K=ge.retryLane);break;case 19:de=D.stateNode;break;case 22:de=D.stateNode._retryCache;break;default:throw Error("Pinged unknown suspense boundary type. This is probably a bug in React.")}de!==null&&de.delete(L),z9(D,K)}function G9(D,L,K){if((L.subtreeFlags&67117056)!==0)for(L=L.child;L!==null;){var de=D,ge=L,Ie=ge.type===Ap;Ie=K||Ie,ge.tag!==22?ge.flags&67108864?Ie&&on(ge,Y9,de,ge,(ge.mode&64)===Bc):G9(de,ge,Ie):ge.memoizedState===null&&(Ie&&ge.flags&8192?on(ge,Y9,de,ge):ge.subtreeFlags&67108864&&on(ge,G9,de,ge,Ie)),L=L.sibling}}function Y9(D,L){var K=2<arguments.length&&arguments[2]!==void 0?arguments[2]:!0;se(!0);try{P9(L),K&&B9(L),v9(D,L.alternate,L,!1),K&&E9(D,L,0,null,!1,0)}finally{se(!1)}}function V9(D){var L=!0;D.current.mode&24||(L=!1),G9(D,D.current,L)}function AN(D){if((Ma&zu)===Ou){var L=D.tag;if(L===3||L===1||L===0||L===11||L===14||L===15){if(L=E(D)||"ReactComponent",nR!==null){if(nR.has(L))return;nR.add(L)}else nR=new Set([L]);on(D,function(){console.error("Can't perform a React state update on a component that hasn't mounted yet. This indicates that you have a side-effect in your render function that asynchronously later calls tries to update the component. Move this work to useEffect instead.")})}}}function IP(D,L){hg&&D.memoizedUpdaters.forEach(function(K){oe(D,K,L)})}function Fb(D,L){var K=En.actQueue;return K!==null?(K.push(L),tae):kP(D,L)}function SC(D){DH()&&En.actQueue===null&&on(D,function(){console.error(`An update to %s inside a test was not wrapped in act(...).
When testing, code that causes React state updates should be wrapped into act(...):
act(() => {
/* fire events that update state */
});
/* assert on the output */
This ensures that you're testing the behavior the user would see in the browser. Learn more at https://react.dev/link/wrap-tests-with-act`,E(D))})}function PC(D){if(Qf===null)return D;var L=Qf(D);return L===void 0?D:L.current}function U9(D){if(Qf===null)return D;var L=Qf(D);return L===void 0?D!==null&&D!==void 0&&typeof D.render==="function"&&(L=PC(D.render),D.render!==L)?(L={$$typeof:zb,render:L},D.displayName!==void 0&&(L.displayName=D.displayName),L):D:L.current}function bP(D,L){if(Qf===null)return!1;var K=D.elementType;L=L.type;var de=!1,ge=typeof L==="object"&&L!==null?L.$$typeof:null;switch(D.tag){case 1:typeof L==="function"&&(de=!0);break;case 0:typeof L==="function"?de=!0:ge===__&&(de=!0);break;case 11:ge===zb?de=!0:ge===__&&(de=!0);break;case 14:case 15:ge===rr?de=!0:ge===__&&(de=!0);break;default:return!1}return de&&(D=Qf(K),D!==void 0&&D===Qf(L))?!0:!1}function _N(D){Qf!==null&&typeof WeakSet==="function"&&(Bw===null&&(Bw=new WeakSet),Bw.add(D))}function R4(D,L,K){var{alternate:de,child:ge,sibling:Ie,tag:ot,type:yt}=D,hn=null;switch(ot){case 0:case 15:case 1:hn=yt;break;case 11:hn=yt.render}if(Qf===null)throw Error("Expected resolveFamily to be set during hot reload.");var zn=!1;if(yt=!1,hn!==null&&(hn=Qf(hn),hn!==void 0&&(K.has(hn)?yt=!0:L.has(hn)&&(ot===1?yt=!0:zn=!0))),Bw!==null&&(Bw.has(D)||de!==null&&Bw.has(de))&&(yt=!0),yt&&(D._debugNeedsRemount=!0),yt||zn)de=Tu(D,2),de!==null&&Rd(de,D,2);ge===null||yt||R4(ge,L,K),Ie!==null&&R4(Ie,L,K)}function Q4(D,L,K,de){this.tag=D,this.key=K,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.refCleanup=this.ref=null,this.pendingProps=L,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=de,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null,this.actualDuration=-0,this.actualStartTime=-1.1,this.treeBaseDuration=this.selfBaseDuration=-0,this._debugTask=this._debugStack=this._debugOwner=this._debugInfo=null,this._debugNeedsRemount=!1,this._debugHookTypes=null,yj||typeof Object.preventExtensions!=="function"||Object.preventExtensions(this)}function SP(D){return D=D.prototype,!(!D||!D.isReactComponent)}function G1(D,L){var K=D.alternate;switch(K===null?(K=c(D.tag,L,D.key,D.mode),K.elementType=D.elementType,K.type=D.type,K.stateNode=D.stateNode,K._debugOwner=D._debugOwner,K._debugStack=D._debugStack,K._debugTask=D._debugTask,K._debugHookTypes=D._debugHookTypes,K.alternate=D,D.alternate=K):(K.pendingProps=L,K.type=D.type,K.flags=0,K.subtreeFlags=0,K.deletions=null,K.actualDuration=-0,K.actualStartTime=-1.1),K.flags=D.flags&65011712,K.childLanes=D.childLanes,K.lanes=D.lanes,K.child=D.child,K.memoizedProps=D.memoizedProps,K.memoizedState=D.memoizedState,K.updateQueue=D.updateQueue,L=D.dependencies,K.dependencies=L===null?null:{lanes:L.lanes,firstContext:L.firstContext,_debugThenableState:L._debugThenableState},K.sibling=D.sibling,K.index=D.index,K.ref=D.ref,K.refCleanup=D.refCleanup,K.selfBaseDuration=D.selfBaseDuration,K.treeBaseDuration=D.treeBaseDuration,K._debugInfo=D._debugInfo,K._debugNeedsRemount=D._debugNeedsRemount,K.tag){case 0:case 15:K.type=PC(D.type);break;case 1:K.type=PC(D.type);break;case 11:K.type=U9(D.type)}return K}function lh(D,L){D.flags&=65011714;var K=D.alternate;return K===null?(D.childLanes=0,D.lanes=L,D.child=null,D.subtreeFlags=0,D.memoizedProps=null,D.memoizedState=null,D.updateQueue=null,D.dependencies=null,D.stateNode=null,D.selfBaseDuration=0,D.treeBaseDuration=0):(D.childLanes=K.childLanes,D.lanes=K.lanes,D.child=K.child,D.subtreeFlags=0,D.deletions=null,D.memoizedProps=K.memoizedProps,D.memoizedState=K.memoizedState,D.updateQueue=K.updateQueue,D.type=K.type,L=K.dependencies,D.dependencies=L===null?null:{lanes:L.lanes,firstContext:L.firstContext,_debugThenableState:L._debugThenableState},D.selfBaseDuration=K.selfBaseDuration,D.treeBaseDuration=K.treeBaseDuration),D}function W9(D,L,K,de,ge,Ie){var ot=0,yt=D;if(typeof D==="function")SP(D)&&(ot=1),yt=PC(yt);else if(typeof D==="string")dg&&ku?(ot=ut(),ot=eO(D,K,ot)?26:RN(D)?27:5):dg?(ot=ut(),ot=eO(D,K,ot)?26:5):ot=ku?RN(D)?27:5:5;else e:switch(D){case t0:return L=c(31,K,L,ge),L.elementType=t0,L.lanes=Ie,L;case Di:return xf(K.children,ge,Ie,L);case Ap:ot=8,ge|=24;break;case K9:return D=K,de=ge,typeof D.id!=="string"&&console.error('Profiler must specify an "id" of type `string` as a prop. Received the type `%s` instead.',typeof D.id),L=c(12,D,L,de|2),L.elementType=K9,L.lanes=Ie,L.stateNode={effectDuration:0,passiveEffectDuration:0},L;case j9:return L=c(13,K,L,ge),L.elementType=j9,L.lanes=Ie,L;case If:return L=c(19,K,L,ge),L.elementType=If,L.lanes=Ie,L;default:if(typeof D==="object"&&D!==null)switch(D.$$typeof){case HH:case Cf:ot=10;break e;case vP:ot=9;break e;case zb:ot=11,yt=U9(yt);break e;case rr:ot=14;break e;case __:ot=16,yt=null;break e}if(yt="",D===void 0||typeof D==="object"&&D!==null&&Object.keys(D).length===0)yt+=" You likely forgot to export your component from the file it's defined in, or you might have mixed up default and named imports.";D===null?K="null":ic(D)?K="array":D!==void 0&&D.$$typeof===Rh?(K="<"+(P(D.type)||"Unknown")+" />",yt=" Did you accidentally export a JSX literal instead of a component?"):K=typeof D,ot=de?typeof de.tag==="number"?E(de):typeof de.name==="string"?de.name:null:null,ot&&(yt+=`
Check the render method of \``+ot+"`."),ot=29,K=Error("Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: "+(K+"."+yt)),yt=null}return L=c(ot,K,L,ge),L.elementType=D,L.type=yt,L.lanes=Ie,L._debugOwner=de,L}function k4(D,L,K){return L=W9(D.type,D.key,D.props,D._owner,L,K),L._debugOwner=D._owner,L._debugStack=D._debugStack,L._debugTask=D._debugTask,L}function xf(D,L,K,de){return D=c(7,D,de,L),D.lanes=K,D}function P2(D,L,K){return D=c(6,D,null,L),D.lanes=K,D}function Qd(D,L,K){return L=c(4,D.children!==null?D.children:[],D.key,L),L.lanes=K,L.stateNode={containerInfo:D.containerInfo,pendingChildren:null,implementation:D.implementation},L}function PP(D,L,K,de,ge,Ie,ot,yt){this.tag=1,this.containerInfo=D,this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=Vb,this.callbackNode=this.next=this.pendingContext=this.context=this.cancelPendingCommit=null,this.callbackPriority=0,this.expirationTimes=V(-1),this.entangledLanes=this.shellSuspendCounter=this.errorRecoveryDisabledLanes=this.expiredLanes=this.warmLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=V(0),this.hiddenUpdates=V(null),this.identifierPrefix=de,this.onUncaughtError=ge,this.onCaughtError=Ie,this.onRecoverableError=ot,this.pooledCache=null,this.pooledCacheLanes=0,this.formState=yt,this.incompleteTransitions=new Map,this.passiveEffectDuration=this.effectDuration=-0,this.memoizedUpdaters=new Set,D=this.pendingUpdatersLaneMap=[];for(L=0;31>L;L++)D.push(new Set);this._debugRootType=K?"hydrateRoot()":"createRoot()"}function L4(D,L,K,de,ge,Ie,ot,yt,hn,zn,Qo,Go){return D=new PP(D,L,K,ot,yt,hn,zn,Go),L=1,Ie===!0&&(L|=24),hg&&(L|=2),Ie=c(3,null,null,L),D.current=Ie,Ie.stateNode=D,L=Nr(),bs(L),D.pooledCache=L,bs(L),Ie.memoizedState={element:de,isDehydrated:K,cache:L},Bh(Ie),D}function br(D){return""+D}function LH(D){if(!D)return X1;return D=X1,D}function Hb(D,L,K,de){return cA(L.current,2,D,L,K,de),2}function cA(D,L,K,de,ge,Ie){if(F0&&typeof F0.onScheduleFiberRoot==="function")try{F0.onScheduleFiberRoot(RC,de,K)}catch(ot){ug||(ug=!0,console.error("React instrumentation encountered an error: %s",ot))}ci!==null&&typeof ci.markRenderScheduled==="function"&&ci.markRenderScheduled(L),ge=LH(ge),de.context===null?de.context=ge:de.pendingContext=ge,I_&&dA!==null&&!oae&&(oae=!0,console.error(`Render methods should be a pure function of props and state; triggering nested component updates from render is not allowed. If necessary, trigger nested updates in componentDidUpdate.
Check the render method of %s.`,E(dA)||"Unknown")),de=nu(L),de.payload={element:K},Ie=Ie===void 0?null:Ie,Ie!==null&&(typeof Ie!=="function"&&console.error("Expected the last optional `callback` argument to be a function. Instead received: %s.",Ie),de.callback=Ie),K=gm(D,de,L),K!==null&&(Rd(K,D,L),jl(K,D,L))}function X9(D,L){if(D=D.memoizedState,D!==null&&D.dehydrated!==null){var K=D.retryLane;D.retryLane=K!==0&&K<L?K:L}}function pp(D,L){X9(D,L),(D=D.alternate)&&X9(D,L)}function FH(){return dA}function gN(){for(var D=new Map,L=1,K=0;31>K;K++){var de=N(L);D.set(L,de),L*=2}return D}var Ws={},Nh=Object.assign,Ob=Symbol.for("react.element"),Rh=Symbol.for("react.transitional.element"),Y1=Symbol.for("react.portal"),Di=Symbol.for("react.fragment"),Ap=Symbol.for("react.strict_mode"),K9=Symbol.for("react.profiler"),HH=Symbol.for("react.provider"),vP=Symbol.for("react.consumer"),Cf=Symbol.for("react.context"),zb=Symbol.for("react.forward_ref"),j9=Symbol.for("react.suspense"),If=Symbol.for("react.suspense_list"),rr=Symbol.for("react.memo"),__=Symbol.for("react.lazy"),t0=Symbol.for("react.activity"),v2=Symbol.for("react.memo_cache_sentinel"),iu=Symbol.iterator,OH=Symbol.for("react.client.reference"),ic=Array.isArray,En=ATe.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,{rendererVersion:Wc,rendererPackageName:rj,extraDevToolsConfig:zH,getPublicInstance:Gb,getRootHostContext:V1,getChildHostContext:_l,prepareForCommit:fN,resetAfterCommit:F4,createInstance:Yb}=e;e.cloneMutableInstance;var{appendInitialChild:q9,finalizeInitialChildren:rg,shouldSetTextContent:g_,createTextInstance:GH}=e;e.cloneMutableTextInstance;var{scheduleTimeout:sj,cancelTimeout:YH,noTimeout:Vb,isPrimaryRenderer:tl}=e;e.warnsIfNotActing;var{supportsMutation:rc,supportsPersistence:Qu,supportsHydration:_p,getInstanceFromNode:J9}=e;e.beforeActiveInstanceBlur;var yN=e.preparePortalMount;e.prepareScopeUpdate,e.getInstanceFromScope;var{setCurrentUpdatePriority:ru,getCurrentUpdatePriority:bf,resolveUpdatePriority:xN}=e;e.trackSchedulerEvent,e.resolveEventType,e.resolveEventTimeStamp;var{shouldAttemptEagerTransition:CN,detachDeletedInstance:IN}=e;e.requestPostPaintCallback;var{maySuspendCommit:$9,preloadInstance:EP,startSuspendingCommit:Z9,suspendInstance:MP}=e;e.suspendOnActiveViewTransition;var{waitForCommitToBeReady:VH,NotPendingTransition:Ub,HostTransitionContext:vC,resetFormInstance:sg,bindToConsole:Qh,supportsMicrotasks:EC,scheduleMicrotask:md,supportsTestSelectors:kd,findFiberRoot:f_,getBoundingRect:y_,getTextContent:su,isHiddenSubtree:k0,matchAccessibilityRole:lA,setFocusIfFocusable:gl,setupIntersectionObserver:UH,appendChild:BP,appendChildToContainer:MC,commitTextUpdate:WH,commitMount:H4,commitUpdate:XH,insertBefore:U1,insertInContainerBefore:BC,removeChild:bN,removeChildFromContainer:Wb,resetTextContent:SN,hideInstance:PN,hideTextInstance:KH,unhideInstance:ag,unhideTextInstance:vN}=e;e.cancelViewTransitionName,e.cancelRootViewTransitionName,e.restoreRootViewTransitionName,e.cloneRootViewTransitionContainer,e.removeRootViewTransitionClone,e.measureClonedInstance,e.hasInstanceChanged,e.hasInstanceAffectedParent,e.startViewTransition,e.startGestureTransition,e.stopGestureTransition,e.getCurrentGestureOffset,e.subscribeToGestureDirection,e.createViewTransitionInstance;var jH=e.clearContainer;e.createFragmentInstance,e.updateFragmentInstanceFiber,e.commitNewChildToFragmentInstance,e.deleteChildFromFragmentInstance;var{cloneInstance:qH,createContainerChildSet:Tr,appendChildToContainerChildSet:Xb,finalizeContainerChildren:kh,replaceContainerChildren:wC,cloneHiddenInstance:bm,cloneHiddenTextInstance:ew,isSuspenseInstancePending:Sf,isSuspenseInstanceFallback:Kb,getSuspenseInstanceFallbackErrorDetails:cg,registerSuspenseInstanceRetry:JH,canHydrateFormStateMarker:Pf,isFormStateMarkerMatching:$H,getNextHydratableSibling:gp,getNextHydratableSiblingAfterSingleton:wP,getFirstHydratableChild:TP,getFirstHydratableChildWithinContainer:lg,getFirstHydratableChildWithinSuspenseInstance:O4,getFirstHydratableChildWithinSingleton:DP,canHydrateInstance:EN,canHydrateTextInstance:TC,canHydrateSuspenseInstance:jb,hydrateInstance:tw,hydrateTextInstance:z4,hydrateSuspenseInstance:G4,getNextHydratableInstanceAfterSuspenseInstance:nw,commitHydratedContainer:NP,commitHydratedSuspenseInstance:MN,clearSuspenseBoundary:ow,clearSuspenseBoundaryFromContainer:qb,shouldDeleteUnhydratedTailInstances:Jb,diffHydratedPropsForDevWarnings:L0,diffHydratedTextForDevWarnings:iw,describeHydratableInstanceForDevWarnings:$b,validateHydratableInstance:Ld,validateHydratableTextInstance:ZH,supportsResources:dg,isHostHoistableType:eO,getHoistableRoot:W1,getResource:Zb,acquireResource:rw,releaseResource:DC,hydrateHoistable:RP,mountHoistable:BN,unmountHoistable:wN,createHoistableInstance:tO,prepareToCommitHoistables:nO,mayResourceSuspendCommit:sw,preloadResource:Y4,suspendResource:TN,supportsSingletons:ku,resolveSingletonInstance:DN,acquireSingletonInstance:aj,releaseSingletonInstance:NN,isHostSingletonType:RN,isSingletonScope:e5}=e,NC=[],QP=[],vf=-1,X1={};Object.freeze(X1);var Sm=Math.clz32?Math.clz32:Q,{log:QN,LN2:V4}=Math,t5=256,Ef=4194304,kP=gu.unstable_scheduleCallback,n5=gu.unstable_cancelCallback,LP=gu.unstable_shouldYield,kN=gu.unstable_requestPaint,x_=gu.unstable_now,Mf=gu.unstable_ImmediatePriority,aw=gu.unstable_UserBlockingPriority,FP=gu.unstable_NormalPriority,sc=gu.unstable_IdlePriority,LN=gu.log,oO=gu.unstable_setDisableYieldValue,RC=null,F0=null,ci=null,ug=!1,hg=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__<"u",HP=0,pd,K1,fp,OP,mg,zP,FN;Te.__reactDisabledLog=!0;var GP,cw,U4=!1,W4=new(typeof WeakMap==="function"?WeakMap:Map),YP=new WeakMap,QC=[],E2=0,o5=null,lw=0,Lu=[],yp=0,gs=null,pg=1,Bf="",xp=B(null),i5=B(null),C_=B(null),kC=B(null),HN=/["'&<>\n\t]|^\s|\s$/,dA=null,I_=!1,ka=null,au=null,ua=!1,wf=!1,cu=null,LC=null,Zs=!1,X4=Error("Hydration Mismatch Exception: This is not a real error, and should not leak into userspace. If you're seeing this, it's likely a bug in React."),Mc=0;if(typeof performance==="object"&&typeof performance.now==="function")var ON=performance,n0=function(){return ON.now()};else{var cj=Date;n0=function(){return cj.now()}}var H0=typeof Object.is==="function"?Object.is:Ho,Bc=0,VP=B(null),Pm=B(null),dw=B(null),r5={},s5=null,j1=null,M2=!1,lj=typeof AbortController<"u"?AbortController:function(){var D=[],L=this.signal={aborted:!1,addEventListener:function(K,de){D.push(de)}};this.abort=function(){L.aborted=!0,D.forEach(function(K){return K()})}},zN=gu.unstable_scheduleCallback,dj=gu.unstable_NormalPriority,Rl={$$typeof:Cf,Consumer:null,Provider:null,_currentValue:null,_currentValue2:null,_threadCount:0,_currentRenderer:null,_currentRenderer2:null},a5=gu.unstable_now,K4=-0,vm=-1.1,FC=-0,UP=!1,uw=!1,B2=null,b_=null,WP=!1,GN=!1,hw=!1,mw=!1,c5=0,YN={},XP=null,q1=0,l5=0,KP=null,VN=En.S;En.S=function(D,L){typeof L==="object"&&L!==null&&typeof L.then==="function"&&w0(D,L),VN!==null&&VN(D,L)};var w2=B(null),iO=Object.prototype.hasOwnProperty,Ag={recordUnsafeLifecycleWarnings:function(){},flushPendingUnsafeLifecycleWarnings:function(){},recordLegacyContextWarning:function(){},flushLegacyContextWarning:function(){},discardPendingWarnings:function(){}},jP=[],qP=[],HC=[],T2=[],d5=[],u5=[],D2=new Set;Ag.recordUnsafeLifecycleWarnings=function(D,L){D2.has(D.type)||(typeof L.componentWillMount==="function"&&L.componentWillMount.__suppressDeprecationWarning!==!0&&jP.push(D),D.mode&8&&typeof L.UNSAFE_componentWillMount==="function"&&qP.push(D),typeof L.componentWillReceiveProps==="function"&&L.componentWillReceiveProps.__suppressDeprecationWarning!==!0&&HC.push(D),D.mode&8&&typeof L.UNSAFE_componentWillReceiveProps==="function"&&T2.push(D),typeof L.componentWillUpdate==="function"&&L.componentWillUpdate.__suppressDeprecationWarning!==!0&&d5.push(D),D.mode&8&&typeof L.UNSAFE_componentWillUpdate==="function"&&u5.push(D))},Ag.flushPendingUnsafeLifecycleWarnings=function(){var D=new Set;0<jP.length&&(jP.forEach(function(yt){D.add(E(yt)||"Component"),D2.add(yt.type)}),jP=[]);var L=new Set;0<qP.length&&(qP.forEach(function(yt){L.add(E(yt)||"Component"),D2.add(yt.type)}),qP=[]);var K=new Set;0<HC.length&&(HC.forEach(function(yt){K.add(E(yt)||"Component"),D2.add(yt.type)}),HC=[]);var de=new Set;0<T2.length&&(T2.forEach(function(yt){de.add(E(yt)||"Component"),D2.add(yt.type)}),T2=[]);var ge=new Set;0<d5.length&&(d5.forEach(function(yt){ge.add(E(yt)||"Component"),D2.add(yt.type)}),d5=[]);var Ie=new Set;if(0<u5.length&&(u5.forEach(function(yt){Ie.add(E(yt)||"Component"),D2.add(yt.type)}),u5=[]),0<L.size){var ot=g(L);console.error(`Using UNSAFE_componentWillMount in strict mode is not recommended and may indicate bugs in your code. See https://react.dev/link/unsafe-component-lifecycles for details.
* Move code with side effects to componentDidMount, and set initial state in the constructor.
Please update the following components: %s`,ot)}0<de.size&&(ot=g(de),console.error(`Using UNSAFE_componentWillReceiveProps in strict mode is not recommended and may indicate bugs in your code. See https://react.dev/link/unsafe-component-lifecycles for details.
* Move data fetching code or side effects to componentDidUpdate.
* If you're updating state whenever props change, refactor your code to use memoization techniques or move it to static getDerivedStateFromProps. Learn more at: https://react.dev/link/derived-state
Please update the following components: %s`,ot)),0<Ie.size&&(ot=g(Ie),console.error(`Using UNSAFE_componentWillUpdate in strict mode is not recommended and may indicate bugs in your code. See https://react.dev/link/unsafe-component-lifecycles for details.
* Move data fetching code or side effects to componentDidUpdate.
Please update the following components: %s`,ot)),0<D.size&&(ot=g(D),console.warn(`componentWillMount has been renamed, and is not recommended for use. See https://react.dev/link/unsafe-component-lifecycles for details.
* Move code with side effects to componentDidMount, and set initial state in the constructor.
* Rename componentWillMount to UNSAFE_componentWillMount to suppress this warning in non-strict mode. In React 18.x, only the UNSAFE_ name will work. To rename all deprecated lifecycles to their new names, you can run \`npx react-codemod rename-unsafe-lifecycles\` in your project source folder.
Please update the following components: %s`,ot)),0<K.size&&(ot=g(K),console.warn(`componentWillReceiveProps has been renamed, and is not recommended for use. See https://react.dev/link/unsafe-component-lifecycles for details.
* Move data fetching code or side effects to componentDidUpdate.
* If you're updating state whenever props change, refactor your code to use memoization techniques or move it to static getDerivedStateFromProps. Learn more at: https://react.dev/link/derived-state
* Rename componentWillReceiveProps to UNSAFE_componentWillReceiveProps to suppress this warning in non-strict mode. In React 18.x, only the UNSAFE_ name will work. To rename all deprecated lifecycles to their new names, you can run \`npx react-codemod rename-unsafe-lifecycles\` in your project source folder.
Please update the following components: %s`,ot)),0<ge.size&&(ot=g(ge),console.warn(`componentWillUpdate has been renamed, and is not recommended for use. See https://react.dev/link/unsafe-component-lifecycles for details.
* Move data fetching code or side effects to componentDidUpdate.
* Rename componentWillUpdate to UNSAFE_componentWillUpdate to suppress this warning in non-strict mode. In React 18.x, only the UNSAFE_ name will work. To rename all deprecated lifecycles to their new names, you can run \`npx react-codemod rename-unsafe-lifecycles\` in your project source folder.
Please update the following components: %s`,ot))};var JP=new Map,$P=new Set;Ag.recordLegacyContextWarning=function(D,L){var K=null;for(var de=D;de!==null;)de.mode&8&&(K=de),de=de.return;K===null?console.error("Expected to find a StrictMode component in a strict mode tree. This error is likely caused by a bug in React. Please file an issue."):!$P.has(D.type)&&(de=JP.get(K),D.type.contextTypes!=null||D.type.childContextTypes!=null||L!==null&&typeof L.getChildContext==="function")&&(de===void 0&&(de=[],JP.set(K,de)),de.push(D))},Ag.flushLegacyContextWarning=function(){JP.forEach(function(D){if(D.length!==0){var L=D[0],K=new Set;D.forEach(function(ge){K.add(E(ge)||"Component"),$P.add(ge.type)});var de=g(K);on(L,function(){console.error(`Legacy context API has been detected within a strict-mode tree.
The old API will be supported in all 16.x releases, but applications using it should migrate to the new version.
Please update the following components: %s
Learn more about this warning here: https://react.dev/link/legacy-context`,de)})}})},Ag.discardPendingWarnings=function(){jP=[],qP=[],HC=[],T2=[],d5=[],u5=[],JP=new Map};var ZP=Error("Suspense Exception: This is not a real error! It's an implementation detail of `use` to interrupt the current render. You must either rethrow it immediately, or move the `use` call outside of the `try/catch` block. Capturing without rethrowing will lead to unexpected behavior.\n\nTo handle async errors, wrap your component in an error boundary, or call the promise's `.catch` method and pass the result to `use`."),pw=Error("Suspense Exception: This is not a real error, and should not leak into userspace. If you're seeing this, it's likely a bug in React."),j4=Error("Suspense Exception: This is not a real error! It's an implementation detail of `useActionState` to interrupt the current render. You must either rethrow it immediately, or move the `useActionState` call outside of the `try/catch` block. Capturing without rethrowing will lead to unexpected behavior.\n\nTo handle async errors, wrap your component in an error boundary."),Aw={then:function(){console.error('Internal React error: A listener was unexpectedly attached to a "noop" thenable. This is a bug in React. Please file an issue.')}},ev=null,O0=!1,uA=0,ql=1,z0=2,Lh=4,Ql=8,Em=[],N2=0,q4=0,J4=0,UN=1,$4=2,WN=3,R2=!1,XN=!1,KN=null,_w=!1,tv=B(null),nv=B(0),h5,rO=new Set,gw=new Set,Z4=new Set,sO=new Set,Q2=0,Dr=null,gc=null,Fu=null,G0=!1,OC=!1,k2=!1,L2=0,m5=0,J1=null,aO=0,cO=25,Qn=null,S_=null,hA=-1,eM=!1,ov={readContext:zo,use:df,useCallback:Ys,useContext:Ys,useEffect:Ys,useImperativeHandle:Ys,useLayoutEffect:Ys,useInsertionEffect:Ys,useMemo:Ys,useReducer:Ys,useRef:Ys,useState:Ys,useDebugValue:Ys,useDeferredValue:Ys,useTransition:Ys,useSyncExternalStore:Ys,useId:Ys,useHostTransitionStatus:Ys,useFormState:Ys,useActionState:Ys,useOptimistic:Ys,useMemoCache:Ys,useCacheRefresh:Ys},zC=null,p5=null,fw=null,iv=null,Hu=null,Fh=null,lu=null;zC={readContext:function(D){return zo(D)},use:df,useCallback:function(D,L){return Qn="useCallback",As(),dd(L),ao(D,L)},useContext:function(D){return Qn="useContext",As(),zo(D)},useEffect:function(D,L){return Qn="useEffect",As(),dd(L),Qa(D,L)},useImperativeHandle:function(D,L,K){return Qn="useImperativeHandle",As(),dd(K),An(D,L,K)},useInsertionEffect:function(D,L){Qn="useInsertionEffect",As(),dd(L),_s(4,z0,D,L)},useLayoutEffect:function(D,L){return Qn="useLayoutEffect",As(),dd(L),e0(D,L)},useMemo:function(D,L){Qn="useMemo",As(),dd(L);var K=En.H;En.H=Hu;try{return vs(D,L)}finally{En.H=K}},useReducer:function(D,L,K){Qn="useReducer",As();var de=En.H;En.H=Hu;try{return D0(D,L,K)}finally{En.H=de}},useRef:function(D){return Qn="useRef",As(),Vs(D)},useState:function(D){Qn="useState",As();var L=En.H;En.H=Hu;try{return uf(D)}finally{En.H=L}},useDebugValue:function(){Qn="useDebugValue",As()},useDeferredValue:function(D,L){return Qn="useDeferredValue",As(),Us(D,L)},useTransition:function(){return Qn="useTransition",As(),g2()},useSyncExternalStore:function(D,L,K){return Qn="useSyncExternalStore",As(),u4(D,L,K)},useId:function(){return Qn="useId",As(),c_()},useFormState:function(D,L){return Qn="useFormState",As(),pc(),yn(D,L)},useActionState:function(D,L){return Qn="useActionState",As(),yn(D,L)},useOptimistic:function(D){return Qn="useOptimistic",As(),hf(D)},useHostTransitionStatus:oA,useMemoCache:T0,useCacheRefresh:function(){return Qn="useCacheRefresh",As(),aP()}},p5={readContext:function(D){return zo(D)},use:df,useCallback:function(D,L){return Qn="useCallback",Ao(),ao(D,L)},useContext:function(D){return Qn="useContext",Ao(),zo(D)},useEffect:function(D,L){return Qn="useEffect",Ao(),Qa(D,L)},useImperativeHandle:function(D,L,K){return Qn="useImperativeHandle",Ao(),An(D,L,K)},useInsertionEffect:function(D,L){Qn="useInsertionEffect",Ao(),_s(4,z0,D,L)},useLayoutEffect:function(D,L){return Qn="useLayoutEffect",Ao(),e0(D,L)},useMemo:function(D,L){Qn="useMemo",Ao();var K=En.H;En.H=Hu;try{return vs(D,L)}finally{En.H=K}},useReducer:function(D,L,K){Qn="useReducer",Ao();var de=En.H;En.H=Hu;try{return D0(D,L,K)}finally{En.H=de}},useRef:function(D){return Qn="useRef",Ao(),Vs(D)},useState:function(D){Qn="useState",Ao();var L=En.H;En.H=Hu;try{return uf(D)}finally{En.H=L}},useDebugValue:function(){Qn="useDebugValue",Ao()},useDeferredValue:function(D,L){return Qn="useDeferredValue",Ao(),Us(D,L)},useTransition:function(){return Qn="useTransition",Ao(),g2()},useSyncExternalStore:function(D,L,K){return Qn="useSyncExternalStore",Ao(),u4(D,L,K)},useId:function(){return Qn="useId",Ao(),c_()},useActionState:function(D,L){return Qn="useActionState",Ao(),yn(D,L)},useFormState:function(D,L){return Qn="useFormState",Ao(),pc(),yn(D,L)},useOptimistic:function(D){return Qn="useOptimistic",Ao(),hf(D)},useHostTransitionStatus:oA,useMemoCache:T0,useCacheRefresh:function(){return Qn="useCacheRefresh",Ao(),aP()}},fw={readContext:function(D){return zo(D)},use:df,useCallback:function(D,L){return Qn="useCallback",Ao(),$i(D,L)},useContext:function(D){return Qn="useContext",Ao(),zo(D)},useEffect:function(D,L){Qn="useEffect",Ao(),Ps(2048,Ql,D,L)},useImperativeHandle:function(D,L,K){return Qn="useImperativeHandle",Ao(),Un(D,L,K)},useInsertionEffect:function(D,L){return Qn="useInsertionEffect",Ao(),Ps(4,z0,D,L)},useLayoutEffect:function(D,L){return Qn="useLayoutEffect",Ao(),Ps(4,Lh,D,L)},useMemo:function(D,L){Qn="useMemo",Ao();var K=En.H;En.H=Fh;try{return Vr(D,L)}finally{En.H=K}},useReducer:function(D,L,K){Qn="useReducer",Ao();var de=En.H;En.H=Fh;try{return N0(D,L,K)}finally{En.H=de}},useRef:function(){return Qn="useRef",Ao(),oc().memoizedState},useState:function(){Qn="useState",Ao();var D=En.H;En.H=Fh;try{return N0(wh)}finally{En.H=D}},useDebugValue:function(){Qn="useDebugValue",Ao()},useDeferredValue:function(D,L){return Qn="useDeferredValue",Ao(),Nl(D,L)},useTransition:function(){return Qn="useTransition",Ao(),eN()},useSyncExternalStore:function(D,L,K){return Qn="useSyncExternalStore",Ao(),ch(D,L,K)},useId:function(){return Qn="useId",Ao(),oc().memoizedState},useFormState:function(D){return Qn="useFormState",Ao(),pc(),Sn(D)},useActionState:function(D){return Qn="useActionState",Ao(),Sn(D)},useOptimistic:function(D,L){return Qn="useOptimistic",Ao(),Nu(D,L)},useHostTransitionStatus:oA,useMemoCache:T0,useCacheRefresh:function(){return Qn="useCacheRefresh",Ao(),oc().memoizedState}},iv={readContext:function(D){return zo(D)},use:df,useCallback:function(D,L){return Qn="useCallback",Ao(),$i(D,L)},useContext:function(D){return Qn="useContext",Ao(),zo(D)},useEffect:function(D,L){Qn="useEffect",Ao(),Ps(2048,Ql,D,L)},useImperativeHandle:function(D,L,K){return Qn="useImperativeHandle",Ao(),Un(D,L,K)},useInsertionEffect:function(D,L){return Qn="useInsertionEffect",Ao(),Ps(4,z0,D,L)},useLayoutEffect:function(D,L){return Qn="useLayoutEffect",Ao(),Ps(4,Lh,D,L)},useMemo:function(D,L){Qn="useMemo",Ao();var K=En.H;En.H=lu;try{return Vr(D,L)}finally{En.H=K}},useReducer:function(D,L,K){Qn="useReducer",Ao();var de=En.H;En.H=lu;try{return ym(D,L,K)}finally{En.H=de}},useRef:function(){return Qn="useRef",Ao(),oc().memoizedState},useState:function(){Qn="useState",Ao();var D=En.H;En.H=lu;try{return ym(wh)}finally{En.H=D}},useDebugValue:function(){Qn="useDebugValue",Ao()},useDeferredValue:function(D,L){return Qn="useDeferredValue",Ao(),up(D,L)},useTransition:function(){return Qn="useTransition",Ao(),A4()},useSyncExternalStore:function(D,L,K){return Qn="useSyncExternalStore",Ao(),ch(D,L,K)},useId:function(){return Qn="useId",Ao(),oc().memoizedState},useFormState:function(D){return Qn="useFormState",Ao(),pc(),Vo(D)},useActionState:function(D){return Qn="useActionState",Ao(),Vo(D)},useOptimistic:function(D,L){return Qn="useOptimistic",Ao(),p2(D,L)},useHostTransitionStatus:oA,useMemoCache:T0,useCacheRefresh:function(){return Qn="useCacheRefresh",Ao(),oc().memoizedState}},Hu={readContext:function(D){return m(),zo(D)},use:function(D){return A(),df(D)},useCallback:function(D,L){return Qn="useCallback",A(),As(),ao(D,L)},useContext:function(D){return Qn="useContext",A(),As(),zo(D)},useEffect:function(D,L){return Qn="useEffect",A(),As(),Qa(D,L)},useImperativeHandle:function(D,L,K){return Qn="useImperativeHandle",A(),As(),An(D,L,K)},useInsertionEffect:function(D,L){Qn="useInsertionEffect",A(),As(),_s(4,z0,D,L)},useLayoutEffect:function(D,L){return Qn="useLayoutEffect",A(),As(),e0(D,L)},useMemo:function(D,L){Qn="useMemo",A(),As();var K=En.H;En.H=Hu;try{return vs(D,L)}finally{En.H=K}},useReducer:function(D,L,K){Qn="useReducer",A(),As();var de=En.H;En.H=Hu;try{return D0(D,L,K)}finally{En.H=de}},useRef:function(D){return Qn="useRef",A(),As(),Vs(D)},useState:function(D){Qn="useState",A(),As();var L=En.H;En.H=Hu;try{return uf(D)}finally{En.H=L}},useDebugValue:function(){Qn="useDebugValue",A(),As()},useDeferredValue:function(D,L){return Qn="useDeferredValue",A(),As(),Us(D,L)},useTransition:function(){return Qn="useTransition",A(),As(),g2()},useSyncExternalStore:function(D,L,K){return Qn="useSyncExternalStore",A(),As(),u4(D,L,K)},useId:function(){return Qn="useId",A(),As(),c_()},useFormState:function(D,L){return Qn="useFormState",A(),As(),yn(D,L)},useActionState:function(D,L){return Qn="useActionState",A(),As(),yn(D,L)},useOptimistic:function(D){return Qn="useOptimistic",A(),As(),hf(D)},useMemoCache:function(D){return A(),T0(D)},useHostTransitionStatus:oA,useCacheRefresh:function(){return Qn="useCacheRefresh",As(),aP()}},Fh={readContext:function(D){return m(),zo(D)},use:function(D){return A(),df(D)},useCallback:function(D,L){return Qn="useCallback",A(),Ao(),$i(D,L)},useContext:function(D){return Qn="useContext",A(),Ao(),zo(D)},useEffect:function(D,L){Qn="useEffect",A(),Ao(),Ps(2048,Ql,D,L)},useImperativeHandle:function(D,L,K){return Qn="useImperativeHandle",A(),Ao(),Un(D,L,K)},useInsertionEffect:function(D,L){return Qn="useInsertionEffect",A(),Ao(),Ps(4,z0,D,L)},useLayoutEffect:function(D,L){return Qn="useLayoutEffect",A(),Ao(),Ps(4,Lh,D,L)},useMemo:function(D,L){Qn="useMemo",A(),Ao();var K=En.H;En.H=Fh;try{return Vr(D,L)}finally{En.H=K}},useReducer:function(D,L,K){Qn="useReducer",A(),Ao();var de=En.H;En.H=Fh;try{return N0(D,L,K)}finally{En.H=de}},useRef:function(){return Qn="useRef",A(),Ao(),oc().memoizedState},useState:function(){Qn="useState",A(),Ao();var D=En.H;En.H=Fh;try{return N0(wh)}finally{En.H=D}},useDebugValue:function(){Qn="useDebugValue",A(),Ao()},useDeferredValue:function(D,L){return Qn="useDeferredValue",A(),Ao(),Nl(D,L)},useTransition:function(){return Qn="useTransition",A(),Ao(),eN()},useSyncExternalStore:function(D,L,K){return Qn="useSyncExternalStore",A(),Ao(),ch(D,L,K)},useId:function(){return Qn="useId",A(),Ao(),oc().memoizedState},useFormState:function(D){return Qn="useFormState",A(),Ao(),Sn(D)},useActionState:function(D){return Qn="useActionState",A(),Ao(),Sn(D)},useOptimistic:function(D,L){return Qn="useOptimistic",A(),Ao(),Nu(D,L)},useMemoCache:function(D){return A(),T0(D)},useHostTransitionStatus:oA,useCacheRefresh:function(){return Qn="useCacheRefresh",Ao(),oc().memoizedState}},lu={readContext:function(D){return m(),zo(D)},use:function(D){return A(),df(D)},useCallback:function(D,L){return Qn="useCallback",A(),Ao(),$i(D,L)},useContext:function(D){return Qn="useContext",A(),Ao(),zo(D)},useEffect:function(D,L){Qn="useEffect",A(),Ao(),Ps(2048,Ql,D,L)},useImperativeHandle:function(D,L,K){return Qn="useImperativeHandle",A(),Ao(),Un(D,L,K)},useInsertionEffect:function(D,L){return Qn="useInsertionEffect",A(),Ao(),Ps(4,z0,D,L)},useLayoutEffect:function(D,L){return Qn="useLayoutEffect",A(),Ao(),Ps(4,Lh,D,L)},useMemo:function(D,L){Qn="useMemo",A(),Ao();var K=En.H;En.H=Fh;try{return Vr(D,L)}finally{En.H=K}},useReducer:function(D,L,K){Qn="useReducer",A(),Ao();var de=En.H;En.H=Fh;try{return ym(D,L,K)}finally{En.H=de}},useRef:function(){return Qn="useRef",A(),Ao(),oc().memoizedState},useState:function(){Qn="useState",A(),Ao();var D=En.H;En.H=Fh;try{return ym(wh)}finally{En.H=D}},useDebugValue:function(){Qn="useDebugValue",A(),Ao()},useDeferredValue:function(D,L){return Qn="useDeferredValue",A(),Ao(),up(D,L)},useTransition:function(){return Qn="useTransition",A(),Ao(),A4()},useSyncExternalStore:function(D,L,K){return Qn="useSyncExternalStore",A(),Ao(),ch(D,L,K)},useId:function(){return Qn="useId",A(),Ao(),oc().memoizedState},useFormState:function(D){return Qn="useFormState",A(),Ao(),Vo(D)},useActionState:function(D){return Qn="useActionState",A(),Ao(),Vo(D)},useOptimistic:function(D,L){return Qn="useOptimistic",A(),Ao(),p2(D,L)},useMemoCache:function(D){return A(),T0(D)},useHostTransitionStatus:oA,useCacheRefresh:function(){return Qn="useCacheRefresh",Ao(),oc().memoizedState}};var A5={"react-stack-bottom-frame":function(D,L,K){var de=I_;I_=!0;try{return D(L,K)}finally{I_=de}}},yw=A5["react-stack-bottom-frame"].bind(A5),O={"react-stack-bottom-frame":function(D){var L=I_;I_=!0;try{return D.render()}finally{I_=L}}},ae=O["react-stack-bottom-frame"].bind(O),pe={"react-stack-bottom-frame":function(D,L){try{L.componentDidMount()}catch(K){Ec(D,D.return,K)}}},Ne=pe["react-stack-bottom-frame"].bind(pe),Ke={"react-stack-bottom-frame":function(D,L,K,de,ge){try{L.componentDidUpdate(K,de,ge)}catch(Ie){Ec(D,D.return,Ie)}}},pt=Ke["react-stack-bottom-frame"].bind(Ke),xt={"react-stack-bottom-frame":function(D,L){var K=L.stack;D.componentDidCatch(L.value,{componentStack:K!==null?K:""})}},St=xt["react-stack-bottom-frame"].bind(xt),Ft={"react-stack-bottom-frame":function(D,L,K){try{K.componentWillUnmount()}catch(de){Ec(D,L,de)}}},Pn=Ft["react-stack-bottom-frame"].bind(Ft),Xn={"react-stack-bottom-frame":function(D){D.resourceKind!=null&&console.error("Expected only SimpleEffects when enableUseEffectCRUDOverload is disabled, got %s",D.resourceKind);var L=D.create;return D=D.inst,L=L(),D.destroy=L}},uo=Xn["react-stack-bottom-frame"].bind(Xn),Uo={"react-stack-bottom-frame":function(D,L,K){try{K()}catch(de){Ec(D,L,de)}}},Ci=Uo["react-stack-bottom-frame"].bind(Uo),Sr={"react-stack-bottom-frame":function(D){var L=D._init;return L(D._payload)}},ji=Sr["react-stack-bottom-frame"].bind(Sr),Ei=null,hi=0,mo=null,vo,ls=vo=!1,fl={},o0={},GC={};h=function(D,L,K){if(K!==null&&typeof K==="object"&&K._store&&(!K._store.validated&&K.key==null||K._store.validated===2)){if(typeof K._store!=="object")throw Error("React Component in warnForMissingKey should have a _store. This error is likely caused by a bug in React. Please file an issue.");K._store.validated=1;var de=E(D),ge=de||"null";if(!fl[ge]){fl[ge]=!0,K=K._owner,D=D._debugOwner;var Ie="";D&&typeof D.tag==="number"&&(ge=E(D))&&(Ie=`
Check the render method of \``+ge+"`."),Ie||de&&(Ie=`
Check the top-level render call using <`+de+">.");var ot="";K!=null&&D!==K&&(de=null,typeof K.tag==="number"?de=E(K):typeof K.name==="string"&&(de=K.name),de&&(ot=" It was passed a child from "+de+".")),on(L,function(){console.error('Each child in a list should have a unique "key" prop.%s%s See https://react.dev/link/warning-keys for more information.',Ie,ot)})}}};var Cp=tN(!0),Tf=tN(!1),Y0=B(null),Df=null,YC=1,VC=2,kl=B(0),UC={},_5=new Set,tM=new Set,g5=new Set,xw=new Set,f5=new Set,lO=new Set,Cw=new Set,Ip=new Set,Iw=new Set,V0=new Set;Object.freeze(UC);var U0={enqueueSetState:function(D,L,K){D=D._reactInternals;var de=Im(D),ge=nu(de);ge.payload=L,K!==void 0&&K!==null&&(l_(K),ge.callback=K),L=gm(D,ge,de),L!==null&&(Rd(L,D,de),jl(L,D,de)),Ee(D,de)},enqueueReplaceState:function(D,L,K){D=D._reactInternals;var de=Im(D),ge=nu(de);ge.tag=UN,ge.payload=L,K!==void 0&&K!==null&&(l_(K),ge.callback=K),L=gm(D,ge,de),L!==null&&(Rd(L,D,de),jl(L,D,de)),Ee(D,de)},enqueueForceUpdate:function(D,L){D=D._reactInternals;var K=Im(D),de=nu(K);de.tag=$4,L!==void 0&&L!==null&&(l_(L),de.callback=L),L=gm(D,de,K),L!==null&&(Rd(L,D,K),jl(L,D,K)),ci!==null&&typeof ci.markForceUpdateScheduled==="function"&&ci.markForceUpdateScheduled(D,K)}},WC=typeof reportError==="function"?reportError:function(D){if(typeof window==="object"&&typeof window.ErrorEvent==="function"){var L=new window.ErrorEvent("error",{bubbles:!0,cancelable:!0,message:typeof D==="object"&&D!==null&&typeof D.message==="string"?String(D.message):String(D),error:D});if(!window.dispatchEvent(L))return}else if(typeof process==="object"&&typeof process.emit==="function"){process.emit("uncaughtException",D);return}console.error(D)},Fd=null,_g=null,Nf=Error("This is not a real error. It's an implementation detail of React's selective hydration feature. If this leaks into userspace, it's a bug in React. Please file an issue."),Xc=!1,F2={},H2={},nM={},Qs={},bw=!1,O2={},rv={},sv={dehydrated:null,treeContext:null,retryLane:0,hydrationErrors:null},jN=!1,dO=null;dO=new Set;var z2=!1,Kc=!1,Sw=!1,uO=typeof WeakSet==="function"?WeakSet:Set,i0=null,y5=null,W0=null,dh=null,gg=!1,G2=null,av=8192,wSe={getCacheForType:function(D){var L=zo(Rl),K=L.data.get(D);return K===void 0&&(K=D(),L.data.set(D,K)),K},getOwner:function(){return dA}},qN=0,hO=1,uh=2,Dn=3,ac=4;if(typeof Symbol==="function"&&Symbol.for){var JN=Symbol.for;qN=JN("selector.component"),hO=JN("selector.has_pseudo_class"),uh=JN("selector.role"),Dn=JN("selector.test_id"),ac=JN("selector.text")}var Pw=[],uj=typeof WeakMap==="function"?WeakMap:Map,Ou=0,zu=2,mA=4,pA=0,cv=1,XC=2,mO=3,lv=4,$N=6,hj=5,Ma=Ou,Ll=null,ea=null,ta=0,P_=0,oM=1,x5=2,bp=3,Y2=4,fg=5,dv=6,ZN=7,mj=8,iM=9,Qr=P_,Rf=null,KC=!1,uv=!1,hv=!1,jC=0,du=pA,mv=0,pv=0,Av=0,Fl=0,AA=0,yg=null,yl=null,pO=!1,pj=0,eR=300,_v=1/0,vw=500,X0=null,Mm=null,qC=0,AO=1,C5=2,Gu=0,_A=1,I5=2,Aj=3,TSe=4,_j=5,Bm=0,$1=null,b5=null,S5=0,P5=0,tR=null,Zse=null,DSe=50,Ew=0,_O=null,cc=!1,gO=!1,eae=50,gv=0,Mw=null,rM=!1,nR=null,gj=!1,fj=new Set,tae={},Qf=null,Bw=null,yj=!1;try{var nae=Object.preventExtensions({})}catch(D){yj=!0}var oae=!1,xj={},oR=null,fO=null,Cj=null,Ij=null,iae=null,rae=null,sae=null,bj=null,sM=null;return oR=function(D,L,K,de){L=t(D,L),L!==null&&(K=n(L.memoizedState,K,0,de),L.memoizedState=K,L.baseState=K,D.memoizedProps=Nh({},D.memoizedProps),K=Tu(D,2),K!==null&&Rd(K,D,2))},fO=function(D,L,K){L=t(D,L),L!==null&&(K=r(L.memoizedState,K,0),L.memoizedState=K,L.baseState=K,D.memoizedProps=Nh({},D.memoizedProps),K=Tu(D,2),K!==null&&Rd(K,D,2))},Cj=function(D,L,K,de){L=t(D,L),L!==null&&(K=o(L.memoizedState,K,de),L.memoizedState=K,L.baseState=K,D.memoizedProps=Nh({},D.memoizedProps),K=Tu(D,2),K!==null&&Rd(K,D,2))},Ij=function(D,L,K){D.pendingProps=n(D.memoizedProps,L,0,K),D.alternate&&(D.alternate.pendingProps=D.pendingProps),L=Tu(D,2),L!==null&&Rd(L,D,2)},iae=function(D,L){D.pendingProps=r(D.memoizedProps,L,0),D.alternate&&(D.alternate.pendingProps=D.pendingProps),L=Tu(D,2),L!==null&&Rd(L,D,2)},rae=function(D,L,K){D.pendingProps=o(D.memoizedProps,L,K),D.alternate&&(D.alternate.pendingProps=D.pendingProps),L=Tu(D,2),L!==null&&Rd(L,D,2)},sae=function(D){var L=Tu(D,2);L!==null&&Rd(L,D,2)},bj=function(D){a=D},sM=function(D){s=D},Ws.attemptContinuousHydration=function(D){if(D.tag===13){var L=Tu(D,67108864);L!==null&&Rd(L,D,67108864),pp(D,67108864)}},Ws.attemptHydrationAtCurrentPriority=function(D){if(D.tag===13){var L=Im(D);L=ce(L);var K=Tu(D,L);K!==null&&Rd(K,D,L),pp(D,L)}},Ws.attemptSynchronousHydration=function(D){switch(D.tag){case 3:if(D=D.stateNode,D.current.memoizedState.isDehydrated){var L=F(D.pendingLanes);if(L!==0){D.pendingLanes|=2;for(D.entangledLanes|=2;L;){var K=1<<31-Sm(L);D.entanglements[1]|=K,L&=~K}Wo(D),(Ma&(zu|mA))===Ou&&(_v=x_()+vw,Ti(0,!1))}}break;case 13:L=Tu(D,2),L!==null&&Rd(L,D,2),Lb(),pp(D,2)}},Ws.batchedUpdates=function(D,L){return D(L)},Ws.createComponentSelector=function(D){return{$$typeof:qN,value:D}},Ws.createContainer=function(D,L,K,de,ge,Ie,ot,yt,hn,zn){return L4(D,L,!1,null,K,de,Ie,ot,yt,hn,zn,null)},Ws.createHasPseudoClassSelector=function(D){return{$$typeof:hO,value:D}},Ws.createHydrationContainer=function(D,L,K,de,ge,Ie,ot,yt,hn,zn,Qo,Go,di){return D=L4(K,de,!0,D,ge,Ie,yt,hn,zn,Qo,Go,di),D.context=LH(null),K=D.current,de=Im(K),de=ce(de),ge=nu(de),ge.callback=L!==void 0&&L!==null?L:null,gm(K,ge,de),L=de,D.current.lanes=L,W(D,L),Wo(D),D},Ws.createPortal=function(D,L,K){var de=3<arguments.length&&arguments[3]!==void 0?arguments[3]:null;try{br(de);var ge=!1}catch(Ie){ge=!0}return ge&&(console.error("The provided key is an unsupported type %s. This value must be coerced to a string before using it here.",typeof Symbol==="function"&&Symbol.toStringTag&&de[Symbol.toStringTag]||de.constructor.name||"Object"),br(de)),{$$typeof:Y1,key:de==null?null:""+de,children:D,containerInfo:L,implementation:K}},Ws.createRoleSelector=function(D){return{$$typeof:uh,value:D}},Ws.createTestNameSelector=function(D){return{$$typeof:Dn,value:D}},Ws.createTextSelector=function(D){return{$$typeof:ac,value:D}},Ws.defaultOnCaughtError=function(D){var L=Fd?"The above error occurred in the <"+Fd+"> component.":"The above error occurred in one of your React components.",K="React will try to recreate this component tree from scratch using the error boundary you provided, "+((_g||"Anonymous")+".");typeof D==="object"&&D!==null&&typeof D.environmentName==="string"?Qh("error",[`%o
%s
%s
`,D,L,K],D.environmentName)():console.error(`%o
%s
%s
`,D,L,K)},Ws.defaultOnRecoverableError=function(D){WC(D)},Ws.defaultOnUncaughtError=function(D){WC(D),console.warn(`%s
%s
`,Fd?"An error occurred in the <"+Fd+"> component.":"An error occurred in one of your React components.",`Consider adding an error boundary to your tree to customize error handling behavior.
Visit https://react.dev/link/error-boundaries to learn more about error boundaries.`)},Ws.deferredUpdates=function(D){var L=En.T,K=bf();try{return ru(32),En.T=null,D()}finally{ru(K),En.T=L}},Ws.discreteUpdates=function(D,L,K,de,ge){var Ie=En.T,ot=bf();try{return ru(2),En.T=null,D(L,K,de,ge)}finally{ru(ot),En.T=Ie,Ma===Ou&&(_v=x_()+vw)}},Ws.findAllNodes=Qb,Ws.findBoundingRects=function(D,L){if(!kd)throw Error("Test selector API is not supported by this renderer.");L=Qb(D,L),D=[];for(var K=0;K<L.length;K++)D.push(y_(L[K]));for(L=D.length-1;0<L;L--){K=D[L];for(var de=K.x,ge=de+K.width,Ie=K.y,ot=Ie+K.height,yt=L-1;0<=yt;yt--)if(L!==yt){var hn=D[yt],zn=hn.x,Qo=zn+hn.width,Go=hn.y,di=Go+hn.height;if(de>=zn&&Ie>=Go&&ge<=Qo&&ot<=di){D.splice(L,1);break}else if(!(de!==zn||K.width!==hn.width||di<Ie||Go>ot)){Go>Ie&&(hn.height+=Go-Ie,hn.y=Ie),di<ot&&(hn.height=ot-Go),D.splice(L,1);break}else if(!(Ie!==Go||K.height!==hn.height||Qo<de||zn>ge)){zn>de&&(hn.width+=zn-de,hn.x=de),Qo<ge&&(hn.width=ge-zn),D.splice(L,1);break}}}return D},Ws.findHostInstance=function(D){var L=D._reactInternals;if(L===void 0){if(typeof D.render==="function")throw Error("Unable to find node on an unmounted component.");throw D=Object.keys(D).join(","),Error("Argument appears to not be a ReactComponent. Keys: "+D)}return D=x(L),D===null?null:Gb(D.stateNode)},Ws.findHostInstanceWithNoPortals=function(D){return D=y(D),D=D!==null?I(D):null,D===null?null:Gb(D.stateNode)},Ws.findHostInstanceWithWarning=function(D,L){var K=D._reactInternals;if(K===void 0){if(typeof D.render==="function")throw Error("Unable to find node on an unmounted component.");throw D=Object.keys(D).join(","),Error("Argument appears to not be a ReactComponent. Keys: "+D)}if(D=x(K),D===null)return null;if(D.mode&8){var de=E(K)||"Component";xj[de]||(xj[de]=!0,on(D,function(){K.mode&8?console.error("%s is deprecated in StrictMode. %s was passed an instance of %s which is inside StrictMode. Instead, add a ref directly to the element you want to reference. Learn more about using refs safely here: https://react.dev/link/strict-mode-find-node",L,L,de):console.error("%s is deprecated in StrictMode. %s was passed an instance of %s which renders StrictMode children. Instead, add a ref directly to the element you want to reference. Learn more about using refs safely here: https://react.dev/link/strict-mode-find-node",L,L,de)}))}return Gb(D.stateNode)},Ws.flushPassiveEffects=bC,Ws.flushSyncFromReconciler=function(D){var L=Ma;Ma|=1;var K=En.T,de=bf();try{if(ru(2),En.T=null,D)return D()}finally{ru(de),En.T=K,Ma=L,(Ma&(zu|mA))===Ou&&Ti(0,!1)}},Ws.flushSyncWork=Lb,Ws.focusWithin=function(D,L){if(!kd)throw Error("Test selector API is not supported by this renderer.");D=Nb(D),L=Rb(D,L),L=Array.from(L);for(D=0;D<L.length;){var K=L[D++],de=K.tag;if(!k0(K)){if((de===5||de===26||de===27)&&gl(K.stateNode))return!0;for(K=K.child;K!==null;)L.push(K),K=K.sibling}}return!1},Ws.getFindAllNodesFailureDescription=function(D,L){if(!kd)throw Error("Test selector API is not supported by this renderer.");var K=0,de=[];D=[Nb(D),0];for(var ge=0;ge<D.length;){var Ie=D[ge++],ot=Ie.tag,yt=D[ge++],hn=L[yt];if(ot!==5&&ot!==26&&ot!==27||!k0(Ie)){if(w9(Ie,hn)&&(de.push(T9(hn)),yt++,yt>K&&(K=yt)),yt<L.length)for(Ie=Ie.child;Ie!==null;)D.push(Ie,yt),Ie=Ie.sibling}}if(K<L.length){for(D=[];K<L.length;K++)D.push(T9(L[K]));return`findAllNodes was able to match part of the selector:
`+(de.join(" > ")+`
No matching component was found for:
`)+D.join(" > ")}return null},Ws.getPublicRootInstance=function(D){if(D=D.current,!D.child)return null;switch(D.child.tag){case 27:case 5:return Gb(D.child.stateNode);default:return D.child.stateNode}},Ws.injectIntoDevTools=function(){var D={bundleType:1,version:Wc,rendererPackageName:rj,currentDispatcherRef:En,reconcilerVersion:"19.1.0"};return zH!==null&&(D.rendererConfig=zH),D.overrideHookState=oR,D.overrideHookStateDeletePath=fO,D.overrideHookStateRenamePath=Cj,D.overrideProps=Ij,D.overridePropsDeletePath=iae,D.overridePropsRenamePath=rae,D.scheduleUpdate=sae,D.setErrorHandler=bj,D.setSuspenseHandler=sM,D.scheduleRefresh=d,D.scheduleRoot=l,D.setRefreshHandler=u,D.getCurrentFiber=FH,D.getLaneLabelMap=gN,D.injectProfilingHooks=le,ee(D)},Ws.isAlreadyRendering=function(){return(Ma&(zu|mA))!==Ou},Ws.observeVisibleRects=function(D,L,K,de){function ge(){var zn=Qb(D,L);Ie.forEach(function(Qo){0>zn.indexOf(Qo)&&hn(Qo)}),zn.forEach(function(Qo){0>Ie.indexOf(Qo)&&yt(Qo)})}if(!kd)throw Error("Test selector API is not supported by this renderer.");var Ie=Qb(D,L);K=UH(Ie,K,de);var ot=K.disconnect,yt=K.observe,hn=K.unobserve;return Pw.push(ge),{disconnect:function(){var zn=Pw.indexOf(ge);0<=zn&&Pw.splice(zn,1),ot()}}},Ws.shouldError=function(D){return a(D)},Ws.shouldSuspend=function(D){return s(D)},Ws.startHostTransition=function(D,L,K,de){if(D.tag!==5)throw Error("Expected the form instance to be a HostComponent. This is a bug in React.");var ge=_2(D).queue;p4(D,ge,L,Ub,K===null?p:function(){En.T===null&&console.error("requestFormReset was called outside a transition or action. To fix, move to an action, or wrap with startTransition.");var Ie=_2(D).next.queue;return f2(D,Ie,{},Im(D)),K(de)})},Ws.updateContainer=function(D,L,K,de){var ge=L.current,Ie=Im(ge);return cA(ge,Ie,D,L,K,de),Ie},Ws.updateContainerSync=Hb,Ws},mZ.exports.default=mZ.exports,Object.defineProperty(mZ.exports,"__esModule",{value:!0})});var _Te=ct(function(iIo){iIo.ConcurrentRoot=1,iIo.ContinuousEventPriority=8,iIo.DefaultEventPriority=32,iIo.DiscreteEventPriority=2,iIo.IdleEventPriority=268435456,iIo.LegacyRoot=0,iIo.NoEventPriority=0});var oS=ct(function(Abt){Object.defineProperty(Abt,"__esModule",{value:!0});Abt.RANDOM=Abt.EPSILON=Abt.ARRAY_TYPE=Abt.ANGLE_ORDER=void 0;Abt.equals=abo;Abt.round=tbo;Abt.setMatrixArrayType=nbo;Abt.toDegree=sbo;Abt.toRadian=rbo;var ZIo=Abt.EPSILON=0.000001,ebo=Abt.ARRAY_TYPE=typeof Float32Array<"u"?Float32Array:Array,cOr=Abt.RANDOM=Math.random,lOr=Abt.ANGLE_ORDER="zyx";function tbo(e){if(e>=0)return Math.round(e);return e%0.5===0?Math.floor(e):Math.round(e)}function nbo(e){Abt.ARRAY_TYPE=ebo=e}var obo=Math.PI/180,ibo=180/Math.PI;function rbo(e){return e*obo}function sbo(e){return e*ibo}function abo(e,t){var n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:ZIo;return Math.abs(e-t)<=n*Math.max(1,Math.abs(e),Math.abs(t))}});var Sbt=ct(function(Cbt){function UTe(e){return UTe=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},UTe(e)}Object.defineProperty(Cbt,"__esModule",{value:!0});Cbt.LDU=Tbo;Cbt.add=Dbo;Cbt.adjoint=bbo;Cbt.clone=_bo;Cbt.copy=gbo;Cbt.create=Abo;Cbt.determinant=Sbo;Cbt.equals=Rbo;Cbt.exactEquals=Nbo;Cbt.frob=wbo;Cbt.fromRotation=Ebo;Cbt.fromScaling=Mbo;Cbt.fromValues=ybo;Cbt.identity=fbo;Cbt.invert=Ibo;Cbt.mul=void 0;Cbt.multiply=ybt;Cbt.multiplyScalar=Qbo;Cbt.multiplyScalarAndAdd=kbo;Cbt.rotate=Pbo;Cbt.scale=vbo;Cbt.set=xbo;Cbt.str=Bbo;Cbt.sub=void 0;Cbt.subtract=xbt;Cbt.transpose=Cbo;var a8=fbt(oS());function fbt(e,t){if(typeof WeakMap=="function")var n=new WeakMap,o=new WeakMap;return(fbt=function(r,s){if(!s&&r&&r.__esModule)return r;var a,c,l={__proto__:null,default:r};if(r===null||UTe(r)!="object"&&typeof r!="function")return l;if(a=s?o:n){if(a.has(r))return a.get(r);a.set(r,l)}for(var d in r)d!=="default"&&{}.hasOwnProperty.call(r,d)&&((c=(a=Object.defineProperty)&&Object.getOwnPropertyDescriptor(r,d))&&(c.get||c.set)?a(l,d,c):l[d]=r[d]);return l})(e,t)}function Abo(){var e=new a8.ARRAY_TYPE(4);if(a8.ARRAY_TYPE!=Float32Array)e[1]=0,e[2]=0;return e[0]=1,e[3]=1,e}function _bo(e){var t=new a8.ARRAY_TYPE(4);return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t}function gbo(e,t){return e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e}function fbo(e){return e[0]=1,e[1]=0,e[2]=0,e[3]=1,e}function ybo(e,t,n,o){var i=new a8.ARRAY_TYPE(4);return i[0]=e,i[1]=t,i[2]=n,i[3]=o,i}function xbo(e,t,n,o,i){return e[0]=t,e[1]=n,e[2]=o,e[3]=i,e}function Cbo(e,t){if(e===t){var n=t[1];e[1]=t[2],e[2]=n}else e[0]=t[0],e[1]=t[2],e[2]=t[1],e[3]=t[3];return e}function Ibo(e,t){var n=t[0],o=t[1],i=t[2],r=t[3],s=n*r-i*o;if(!s)return null;return s=1/s,e[0]=r*s,e[1]=-o*s,e[2]=-i*s,e[3]=n*s,e}function bbo(e,t){var n=t[0];return e[0]=t[3],e[1]=-t[1],e[2]=-t[2],e[3]=n,e}function Sbo(e){return e[0]*e[3]-e[2]*e[1]}function ybt(e,t,n){var o=t[0],i=t[1],r=t[2],s=t[3],a=n[0],c=n[1],l=n[2],d=n[3];return e[0]=o*a+r*c,e[1]=i*a+s*c,e[2]=o*l+r*d,e[3]=i*l+s*d,e}function Pbo(e,t,n){var o=t[0],i=t[1],r=t[2],s=t[3],a=Math.sin(n),c=Math.cos(n);return e[0]=o*c+r*a,e[1]=i*c+s*a,e[2]=o*-a+r*c,e[3]=i*-a+s*c,e}function vbo(e,t,n){var o=t[0],i=t[1],r=t[2],s=t[3],a=n[0],c=n[1];return e[0]=o*a,e[1]=i*a,e[2]=r*c,e[3]=s*c,e}function Ebo(e,t){var n=Math.sin(t),o=Math.cos(t);return e[0]=o,e[1]=n,e[2]=-n,e[3]=o,e}function Mbo(e,t){return e[0]=t[0],e[1]=0,e[2]=0,e[3]=t[1],e}function Bbo(e){return"mat2("+e[0]+", "+e[1]+", "+e[2]+", "+e[3]+")"}function wbo(e){return Math.sqrt(e[0]*e[0]+e[1]*e[1]+e[2]*e[2]+e[3]*e[3])}function Tbo(e,t,n,o){return e[2]=o[2]/o[0],n[0]=o[0],n[1]=o[1],n[3]=o[3]-e[2]*n[1],[e,t,n]}function Dbo(e,t,n){return e[0]=t[0]+n[0],e[1]=t[1]+n[1],e[2]=t[2]+n[2],e[3]=t[3]+n[3],e}function xbt(e,t,n){return e[0]=t[0]-n[0],e[1]=t[1]-n[1],e[2]=t[2]-n[2],e[3]=t[3]-n[3],e}function Nbo(e,t){return e[0]===t[0]&&e[1]===t[1]&&e[2]===t[2]&&e[3]===t[3]}function Rbo(e,t){var n=e[0],o=e[1],i=e[2],r=e[3],s=t[0],a=t[1],c=t[2],l=t[3];return Math.abs(n-s)<=a8.EPSILON*Math.max(1,Math.abs(n),Math.abs(s))&&Math.abs(o-a)<=a8.EPSILON*Math.max(1,Math.abs(o),Math.abs(a))&&Math.abs(i-c)<=a8.EPSILON*Math.max(1,Math.abs(i),Math.abs(c))&&Math.abs(r-l)<=a8.EPSILON*Math.max(1,Math.abs(r),Math.abs(l))}function Qbo(e,t,n){return e[0]=t[0]*n,e[1]=t[1]*n,e[2]=t[2]*n,e[3]=t[3]*n,e}function kbo(e,t,n,o){return e[0]=t[0]+n[0]*o,e[1]=t[1]+n[1]*o,e[2]=t[2]+n[2]*o,e[3]=t[3]+n[3]*o,e}var uOr=Cbt.mul=ybt,hOr=Cbt.sub=xbt});var Tbt=ct(function(Mbt){function WTe(e){return WTe=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},WTe(e)}Object.defineProperty(Mbt,"__esModule",{value:!0});Mbt.add=b5o;Mbt.clone=c5o;Mbt.copy=l5o;Mbt.create=a5o;Mbt.determinant=p5o;Mbt.equals=E5o;Mbt.exactEquals=v5o;Mbt.frob=I5o;Mbt.fromRotation=f5o;Mbt.fromScaling=y5o;Mbt.fromTranslation=x5o;Mbt.fromValues=u5o;Mbt.identity=d5o;Mbt.invert=m5o;Mbt.mul=void 0;Mbt.multiply=vbt;Mbt.multiplyScalar=S5o;Mbt.multiplyScalarAndAdd=P5o;Mbt.rotate=A5o;Mbt.scale=_5o;Mbt.set=h5o;Mbt.str=C5o;Mbt.sub=void 0;Mbt.subtract=Ebt;Mbt.translate=g5o;var aE=Pbt(oS());function Pbt(e,t){if(typeof WeakMap=="function")var n=new WeakMap,o=new WeakMap;return(Pbt=function(r,s){if(!s&&r&&r.__esModule)return r;var a,c,l={__proto__:null,default:r};if(r===null||WTe(r)!="object"&&typeof r!="function")return l;if(a=s?o:n){if(a.has(r))return a.get(r);a.set(r,l)}for(var d in r)d!=="default"&&{}.hasOwnProperty.call(r,d)&&((c=(a=Object.defineProperty)&&Object.getOwnPropertyDescriptor(r,d))&&(c.get||c.set)?a(l,d,c):l[d]=r[d]);return l})(e,t)}function a5o(){var e=new aE.ARRAY_TYPE(6);if(aE.ARRAY_TYPE!=Float32Array)e[1]=0,e[2]=0,e[4]=0,e[5]=0;return e[0]=1,e[3]=1,e}function c5o(e){var t=new aE.ARRAY_TYPE(6);return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t[4]=e[4],t[5]=e[5],t}function l5o(e,t){return e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e[4]=t[4],e[5]=t[5],e}function d5o(e){return e[0]=1,e[1]=0,e[2]=0,e[3]=1,e[4]=0,e[5]=0,e}function u5o(e,t,n,o,i,r){var s=new aE.ARRAY_TYPE(6);return s[0]=e,s[1]=t,s[2]=n,s[3]=o,s[4]=i,s[5]=r,s}function h5o(e,t,n,o,i,r,s){return e[0]=t,e[1]=n,e[2]=o,e[3]=i,e[4]=r,e[5]=s,e}function m5o(e,t){var n=t[0],o=t[1],i=t[2],r=t[3],s=t[4],a=t[5],c=n*r-o*i;if(!c)return null;return c=1/c,e[0]=r*c,e[1]=-o*c,e[2]=-i*c,e[3]=n*c,e[4]=(i*a-r*s)*c,e[5]=(o*s-n*a)*c,e}function p5o(e){return e[0]*e[3]-e[1]*e[2]}function vbt(e,t,n){var o=t[0],i=t[1],r=t[2],s=t[3],a=t[4],c=t[5],l=n[0],d=n[1],u=n[2],h=n[3],A=n[4],m=n[5];return e[0]=o*l+r*d,e[1]=i*l+s*d,e[2]=o*u+r*h,e[3]=i*u+s*h,e[4]=o*A+r*m+a,e[5]=i*A+s*m+c,e}function A5o(e,t,n){var o=t[0],i=t[1],r=t[2],s=t[3],a=t[4],c=t[5],l=Math.sin(n),d=Math.cos(n);return e[0]=o*d+r*l,e[1]=i*d+s*l,e[2]=o*-l+r*d,e[3]=i*-l+s*d,e[4]=a,e[5]=c,e}function _5o(e,t,n){var o=t[0],i=t[1],r=t[2],s=t[3],a=t[4],c=t[5],l=n[0],d=n[1];return e[0]=o*l,e[1]=i*l,e[2]=r*d,e[3]=s*d,e[4]=a,e[5]=c,e}function g5o(e,t,n){var o=t[0],i=t[1],r=t[2],s=t[3],a=t[4],c=t[5],l=n[0],d=n[1];return e[0]=o,e[1]=i,e[2]=r,e[3]=s,e[4]=o*l+r*d+a,e[5]=i*l+s*d+c,e}function f5o(e,t){var n=Math.sin(t),o=Math.cos(t);return e[0]=o,e[1]=n,e[2]=-n,e[3]=o,e[4]=0,e[5]=0,e}function y5o(e,t){return e[0]=t[0],e[1]=0,e[2]=0,e[3]=t[1],e[4]=0,e[5]=0,e}function x5o(e,t){return e[0]=1,e[1]=0,e[2]=0,e[3]=1,e[4]=t[0],e[5]=t[1],e}function C5o(e){return"mat2d("+e[0]+", "+e[1]+", "+e[2]+", "+e[3]+", "+e[4]+", "+e[5]+")"}function I5o(e){return Math.sqrt(e[0]*e[0]+e[1]*e[1]+e[2]*e[2]+e[3]*e[3]+e[4]*e[4]+e[5]*e[5]+1)}function b5o(e,t,n){return e[0]=t[0]+n[0],e[1]=t[1]+n[1],e[2]=t[2]+n[2],e[3]=t[3]+n[3],e[4]=t[4]+n[4],e[5]=t[5]+n[5],e}function Ebt(e,t,n){return e[0]=t[0]-n[0],e[1]=t[1]-n[1],e[2]=t[2]-n[2],e[3]=t[3]-n[3],e[4]=t[4]-n[4],e[5]=t[5]-n[5],e}function S5o(e,t,n){return e[0]=t[0]*n,e[1]=t[1]*n,e[2]=t[2]*n,e[3]=t[3]*n,e[4]=t[4]*n,e[5]=t[5]*n,e}function P5o(e,t,n,o){return e[0]=t[0]+n[0]*o,e[1]=t[1]+n[1]*o,e[2]=t[2]+n[2]*o,e[3]=t[3]+n[3]*o,e[4]=t[4]+n[4]*o,e[5]=t[5]+n[5]*o,e}function v5o(e,t){return e[0]===t[0]&&e[1]===t[1]&&e[2]===t[2]&&e[3]===t[3]&&e[4]===t[4]&&e[5]===t[5]}function E5o(e,t){var n=e[0],o=e[1],i=e[2],r=e[3],s=e[4],a=e[5],c=t[0],l=t[1],d=t[2],u=t[3],h=t[4],A=t[5];return Math.abs(n-c)<=aE.EPSILON*Math.max(1,Math.abs(n),Math.abs(c))&&Math.abs(o-l)<=aE.EPSILON*Math.max(1,Math.abs(o),Math.abs(l))&&Math.abs(i-d)<=aE.EPSILON*Math.max(1,Math.abs(i),Math.abs(d))&&Math.abs(r-u)<=aE.EPSILON*Math.max(1,Math.abs(r),Math.abs(u))&&Math.abs(s-h)<=aE.EPSILON*Math.max(1,Math.abs(s),Math.abs(h))&&Math.abs(a-A)<=aE.EPSILON*Math.max(1,Math.abs(a),Math.abs(A))}var pOr=Mbt.mul=vbt,AOr=Mbt.sub=Ebt});var KTe=ct(function(Qbt){function XTe(e){return XTe=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},XTe(e)}Object.defineProperty(Qbt,"__esModule",{value:!0});Qbt.add=xSo;Qbt.adjoint=sSo;Qbt.clone=Z5o;Qbt.copy=eSo;Qbt.create=J5o;Qbt.determinant=aSo;Qbt.equals=SSo;Qbt.exactEquals=bSo;Qbt.frob=ySo;Qbt.fromMat2d=pSo;Qbt.fromMat4=$5o;Qbt.fromQuat=ASo;Qbt.fromRotation=hSo;Qbt.fromScaling=mSo;Qbt.fromTranslation=uSo;Qbt.fromValues=tSo;Qbt.identity=oSo;Qbt.invert=rSo;Qbt.mul=void 0;Qbt.multiply=Nbt;Qbt.multiplyScalar=CSo;Qbt.multiplyScalarAndAdd=ISo;Qbt.normalFromMat4=_So;Qbt.projection=gSo;Qbt.rotate=lSo;Qbt.scale=dSo;Qbt.set=nSo;Qbt.str=fSo;Qbt.sub=void 0;Qbt.subtract=Rbt;Qbt.translate=cSo;Qbt.transpose=iSo;var _x=Dbt(oS());function Dbt(e,t){if(typeof WeakMap=="function")var n=new WeakMap,o=new WeakMap;return(Dbt=function(r,s){if(!s&&r&&r.__esModule)return r;var a,c,l={__proto__:null,default:r};if(r===null||XTe(r)!="object"&&typeof r!="function")return l;if(a=s?o:n){if(a.has(r))return a.get(r);a.set(r,l)}for(var d in r)d!=="default"&&{}.hasOwnProperty.call(r,d)&&((c=(a=Object.defineProperty)&&Object.getOwnPropertyDescriptor(r,d))&&(c.get||c.set)?a(l,d,c):l[d]=r[d]);return l})(e,t)}function J5o(){var e=new _x.ARRAY_TYPE(9);if(_x.ARRAY_TYPE!=Float32Array)e[1]=0,e[2]=0,e[3]=0,e[5]=0,e[6]=0,e[7]=0;return e[0]=1,e[4]=1,e[8]=1,e}function $5o(e,t){return e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[4],e[4]=t[5],e[5]=t[6],e[6]=t[8],e[7]=t[9],e[8]=t[10],e}function Z5o(e){var t=new _x.ARRAY_TYPE(9);return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t[4]=e[4],t[5]=e[5],t[6]=e[6],t[7]=e[7],t[8]=e[8],t}function eSo(e,t){return e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e[4]=t[4],e[5]=t[5],e[6]=t[6],e[7]=t[7],e[8]=t[8],e}function tSo(e,t,n,o,i,r,s,a,c){var l=new _x.ARRAY_TYPE(9);return l[0]=e,l[1]=t,l[2]=n,l[3]=o,l[4]=i,l[5]=r,l[6]=s,l[7]=a,l[8]=c,l}function nSo(e,t,n,o,i,r,s,a,c,l){return e[0]=t,e[1]=n,e[2]=o,e[3]=i,e[4]=r,e[5]=s,e[6]=a,e[7]=c,e[8]=l,e}function oSo(e){return e[0]=1,e[1]=0,e[2]=0,e[3]=0,e[4]=1,e[5]=0,e[6]=0,e[7]=0,e[8]=1,e}function iSo(e,t){if(e===t){var n=t[1],o=t[2],i=t[5];e[1]=t[3],e[2]=t[6],e[3]=n,e[5]=t[7],e[6]=o,e[7]=i}else e[0]=t[0],e[1]=t[3],e[2]=t[6],e[3]=t[1],e[4]=t[4],e[5]=t[7],e[6]=t[2],e[7]=t[5],e[8]=t[8];return e}function rSo(e,t){var n=t[0],o=t[1],i=t[2],r=t[3],s=t[4],a=t[5],c=t[6],l=t[7],d=t[8],u=d*s-a*l,h=-d*r+a*c,A=l*r-s*c,m=n*u+o*h+i*A;if(!m)return null;return m=1/m,e[0]=u*m,e[1]=(-d*o+i*l)*m,e[2]=(a*o-i*s)*m,e[3]=h*m,e[4]=(d*n-i*c)*m,e[5]=(-a*n+i*r)*m,e[6]=A*m,e[7]=(-l*n+o*c)*m,e[8]=(s*n-o*r)*m,e}function sSo(e,t){var n=t[0],o=t[1],i=t[2],r=t[3],s=t[4],a=t[5],c=t[6],l=t[7],d=t[8];return e[0]=s*d-a*l,e[1]=i*l-o*d,e[2]=o*a-i*s,e[3]=a*c-r*d,e[4]=n*d-i*c,e[5]=i*r-n*a,e[6]=r*l-s*c,e[7]=o*c-n*l,e[8]=n*s-o*r,e}function aSo(e){var t=e[0],n=e[1],o=e[2],i=e[3],r=e[4],s=e[5],a=e[6],c=e[7],l=e[8];return t*(l*r-s*c)+n*(-l*i+s*a)+o*(c*i-r*a)}function Nbt(e,t,n){var o=t[0],i=t[1],r=t[2],s=t[3],a=t[4],c=t[5],l=t[6],d=t[7],u=t[8],h=n[0],A=n[1],m=n[2],p=n[3],g=n[4],_=n[5],f=n[6],y=n[7],x=n[8];return e[0]=h*o+A*s+m*l,e[1]=h*i+A*a+m*d,e[2]=h*r+A*c+m*u,e[3]=p*o+g*s+_*l,e[4]=p*i+g*a+_*d,e[5]=p*r+g*c+_*u,e[6]=f*o+y*s+x*l,e[7]=f*i+y*a+x*d,e[8]=f*r+y*c+x*u,e}function cSo(e,t,n){var o=t[0],i=t[1],r=t[2],s=t[3],a=t[4],c=t[5],l=t[6],d=t[7],u=t[8],h=n[0],A=n[1];return e[0]=o,e[1]=i,e[2]=r,e[3]=s,e[4]=a,e[5]=c,e[6]=h*o+A*s+l,e[7]=h*i+A*a+d,e[8]=h*r+A*c+u,e}function lSo(e,t,n){var o=t[0],i=t[1],r=t[2],s=t[3],a=t[4],c=t[5],l=t[6],d=t[7],u=t[8],h=Math.sin(n),A=Math.cos(n);return e[0]=A*o+h*s,e[1]=A*i+h*a,e[2]=A*r+h*c,e[3]=A*s-h*o,e[4]=A*a-h*i,e[5]=A*c-h*r,e[6]=l,e[7]=d,e[8]=u,e}function dSo(e,t,n){var o=n[0],i=n[1];return e[0]=o*t[0],e[1]=o*t[1],e[2]=o*t[2],e[3]=i*t[3],e[4]=i*t[4],e[5]=i*t[5],e[6]=t[6],e[7]=t[7],e[8]=t[8],e}function uSo(e,t){return e[0]=1,e[1]=0,e[2]=0,e[3]=0,e[4]=1,e[5]=0,e[6]=t[0],e[7]=t[1],e[8]=1,e}function hSo(e,t){var n=Math.sin(t),o=Math.cos(t);return e[0]=o,e[1]=n,e[2]=0,e[3]=-n,e[4]=o,e[5]=0,e[6]=0,e[7]=0,e[8]=1,e}function mSo(e,t){return e[0]=t[0],e[1]=0,e[2]=0,e[3]=0,e[4]=t[1],e[5]=0,e[6]=0,e[7]=0,e[8]=1,e}function pSo(e,t){return e[0]=t[0],e[1]=t[1],e[2]=0,e[3]=t[2],e[4]=t[3],e[5]=0,e[6]=t[4],e[7]=t[5],e[8]=1,e}function ASo(e,t){var n=t[0],o=t[1],i=t[2],r=t[3],s=n+n,a=o+o,c=i+i,l=n*s,d=o*s,u=o*a,h=i*s,A=i*a,m=i*c,p=r*s,g=r*a,_=r*c;return e[0]=1-u-m,e[3]=d-_,e[6]=h+g,e[1]=d+_,e[4]=1-l-m,e[7]=A-p,e[2]=h-g,e[5]=A+p,e[8]=1-l-u,e}function _So(e,t){var n=t[0],o=t[1],i=t[2],r=t[3],s=t[4],a=t[5],c=t[6],l=t[7],d=t[8],u=t[9],h=t[10],A=t[11],m=t[12],p=t[13],g=t[14],_=t[15],f=n*a-o*s,y=n*c-i*s,x=n*l-r*s,C=o*c-i*a,I=o*l-r*a,b=i*l-r*c,P=d*p-u*m,E=d*g-h*m,B=d*_-A*m,w=u*g-h*p,T=u*_-A*p,Q=h*_-A*g,N=f*Q-y*T+x*w+C*B-I*E+b*P;if(!N)return null;return N=1/N,e[0]=(a*Q-c*T+l*w)*N,e[1]=(c*B-s*Q-l*E)*N,e[2]=(s*T-a*B+l*P)*N,e[3]=(i*T-o*Q-r*w)*N,e[4]=(n*Q-i*B+r*E)*N,e[5]=(o*B-n*T-r*P)*N,e[6]=(p*b-g*I+_*C)*N,e[7]=(g*x-m*b-_*y)*N,e[8]=(m*I-p*x+_*f)*N,e}function gSo(e,t,n){return e[0]=2/t,e[1]=0,e[2]=0,e[3]=0,e[4]=-2/n,e[5]=0,e[6]=-1,e[7]=1,e[8]=1,e}function fSo(e){return"mat3("+e[0]+", "+e[1]+", "+e[2]+", "+e[3]+", "+e[4]+", "+e[5]+", "+e[6]+", "+e[7]+", "+e[8]+")"}function ySo(e){return Math.sqrt(e[0]*e[0]+e[1]*e[1]+e[2]*e[2]+e[3]*e[3]+e[4]*e[4]+e[5]*e[5]+e[6]*e[6]+e[7]*e[7]+e[8]*e[8])}function xSo(e,t,n){return e[0]=t[0]+n[0],e[1]=t[1]+n[1],e[2]=t[2]+n[2],e[3]=t[3]+n[3],e[4]=t[4]+n[4],e[5]=t[5]+n[5],e[6]=t[6]+n[6],e[7]=t[7]+n[7],e[8]=t[8]+n[8],e}function Rbt(e,t,n){return e[0]=t[0]-n[0],e[1]=t[1]-n[1],e[2]=t[2]-n[2],e[3]=t[3]-n[3],e[4]=t[4]-n[4],e[5]=t[5]-n[5],e[6]=t[6]-n[6],e[7]=t[7]-n[7],e[8]=t[8]-n[8],e}function CSo(e,t,n){return e[0]=t[0]*n,e[1]=t[1]*n,e[2]=t[2]*n,e[3]=t[3]*n,e[4]=t[4]*n,e[5]=t[5]*n,e[6]=t[6]*n,e[7]=t[7]*n,e[8]=t[8]*n,e}function ISo(e,t,n,o){return e[0]=t[0]+n[0]*o,e[1]=t[1]+n[1]*o,e[2]=t[2]+n[2]*o,e[3]=t[3]+n[3]*o,e[4]=t[4]+n[4]*o,e[5]=t[5]+n[5]*o,e[6]=t[6]+n[6]*o,e[7]=t[7]+n[7]*o,e[8]=t[8]+n[8]*o,e}function bSo(e,t){return e[0]===t[0]&&e[1]===t[1]&&e[2]===t[2]&&e[3]===t[3]&&e[4]===t[4]&&e[5]===t[5]&&e[6]===t[6]&&e[7]===t[7]&&e[8]===t[8]}function SSo(e,t){var n=e[0],o=e[1],i=e[2],r=e[3],s=e[4],a=e[5],c=e[6],l=e[7],d=e[8],u=t[0],h=t[1],A=t[2],m=t[3],p=t[4],g=t[5],_=t[6],f=t[7],y=t[8];return Math.abs(n-u)<=_x.EPSILON*Math.max(1,Math.abs(n),Math.abs(u))&&Math.abs(o-h)<=_x.EPSILON*Math.max(1,Math.abs(o),Math.abs(h))&&Math.abs(i-A)<=_x.EPSILON*Math.max(1,Math.abs(i),Math.abs(A))&&Math.abs(r-m)<=_x.EPSILON*Math.max(1,Math.abs(r),Math.abs(m))&&Math.abs(s-p)<=_x.EPSILON*Math.max(1,Math.abs(s),Math.abs(p))&&Math.abs(a-g)<=_x.EPSILON*Math.max(1,Math.abs(a),Math.abs(g))&&Math.abs(c-_)<=_x.EPSILON*Math.max(1,Math.abs(c),Math.abs(_))&&Math.abs(l-f)<=_x.EPSILON*Math.max(1,Math.abs(l),Math.abs(f))&&Math.abs(d-y)<=_x.EPSILON*Math.max(1,Math.abs(d),Math.abs(y))}var gOr=Qbt.mul=Nbt,fOr=Qbt.sub=Rbt});var qTe=ct(function(Wbt){function jTe(e){return jTe=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},jTe(e)}Object.defineProperty(Wbt,"__esModule",{value:!0});Wbt.add=LPo;Wbt.adjoint=cPo;Wbt.clone=nPo;Wbt.copy=oPo;Wbt.create=tPo;Wbt.decompose=PPo;Wbt.determinant=lPo;Wbt.equals=zPo;Wbt.exactEquals=OPo;Wbt.frob=kPo;Wbt.fromQuat=MPo;Wbt.fromQuat2=IPo;Wbt.fromRotation=fPo;Wbt.fromRotationTranslation=zbt;Wbt.fromRotationTranslationScale=vPo;Wbt.fromRotationTranslationScaleOrigin=EPo;Wbt.fromScaling=gPo;Wbt.fromTranslation=_Po;Wbt.fromValues=iPo;Wbt.fromXRotation=yPo;Wbt.fromYRotation=xPo;Wbt.fromZRotation=CPo;Wbt.frustum=BPo;Wbt.getRotation=SPo;Wbt.getScaling=Gbt;Wbt.getTranslation=bPo;Wbt.identity=Hbt;Wbt.invert=aPo;Wbt.lookAt=NPo;Wbt.mul=void 0;Wbt.multiply=Obt;Wbt.multiplyScalar=FPo;Wbt.multiplyScalarAndAdd=HPo;Wbt.ortho=void 0;Wbt.orthoNO=Vbt;Wbt.orthoZO=DPo;Wbt.perspective=void 0;Wbt.perspectiveFromFieldOfView=TPo;Wbt.perspectiveNO=Ybt;Wbt.perspectiveZO=wPo;Wbt.rotate=hPo;Wbt.rotateX=mPo;Wbt.rotateY=pPo;Wbt.rotateZ=APo;Wbt.scale=uPo;Wbt.set=rPo;Wbt.str=QPo;Wbt.sub=void 0;Wbt.subtract=Ubt;Wbt.targetTo=RPo;Wbt.translate=dPo;Wbt.transpose=sPo;var zd=Fbt(oS());function Fbt(e,t){if(typeof WeakMap=="function")var n=new WeakMap,o=new WeakMap;return(Fbt=function(r,s){if(!s&&r&&r.__esModule)return r;var a,c,l={__proto__:null,default:r};if(r===null||jTe(r)!="object"&&typeof r!="function")return l;if(a=s?o:n){if(a.has(r))return a.get(r);a.set(r,l)}for(var d in r)d!=="default"&&{}.hasOwnProperty.call(r,d)&&((c=(a=Object.defineProperty)&&Object.getOwnPropertyDescriptor(r,d))&&(c.get||c.set)?a(l,d,c):l[d]=r[d]);return l})(e,t)}function tPo(){var e=new zd.ARRAY_TYPE(16);if(zd.ARRAY_TYPE!=Float32Array)e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[11]=0,e[12]=0,e[13]=0,e[14]=0;return e[0]=1,e[5]=1,e[10]=1,e[15]=1,e}function nPo(e){var t=new zd.ARRAY_TYPE(16);return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t[4]=e[4],t[5]=e[5],t[6]=e[6],t[7]=e[7],t[8]=e[8],t[9]=e[9],t[10]=e[10],t[11]=e[11],t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15],t}function oPo(e,t){return e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e[4]=t[4],e[5]=t[5],e[6]=t[6],e[7]=t[7],e[8]=t[8],e[9]=t[9],e[10]=t[10],e[11]=t[11],e[12]=t[12],e[13]=t[13],e[14]=t[14],e[15]=t[15],e}function iPo(e,t,n,o,i,r,s,a,c,l,d,u,h,A,m,p){var g=new zd.ARRAY_TYPE(16);return g[0]=e,g[1]=t,g[2]=n,g[3]=o,g[4]=i,g[5]=r,g[6]=s,g[7]=a,g[8]=c,g[9]=l,g[10]=d,g[11]=u,g[12]=h,g[13]=A,g[14]=m,g[15]=p,g}function rPo(e,t,n,o,i,r,s,a,c,l,d,u,h,A,m,p,g){return e[0]=t,e[1]=n,e[2]=o,e[3]=i,e[4]=r,e[5]=s,e[6]=a,e[7]=c,e[8]=l,e[9]=d,e[10]=u,e[11]=h,e[12]=A,e[13]=m,e[14]=p,e[15]=g,e}function Hbt(e){return e[0]=1,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=1,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[10]=1,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,e}function sPo(e,t){if(e===t){var n=t[1],o=t[2],i=t[3],r=t[6],s=t[7],a=t[11];e[1]=t[4],e[2]=t[8],e[3]=t[12],e[4]=n,e[6]=t[9],e[7]=t[13],e[8]=o,e[9]=r,e[11]=t[14],e[12]=i,e[13]=s,e[14]=a}else e[0]=t[0],e[1]=t[4],e[2]=t[8],e[3]=t[12],e[4]=t[1],e[5]=t[5],e[6]=t[9],e[7]=t[13],e[8]=t[2],e[9]=t[6],e[10]=t[10],e[11]=t[14],e[12]=t[3],e[13]=t[7],e[14]=t[11],e[15]=t[15];return e}function aPo(e,t){var n=t[0],o=t[1],i=t[2],r=t[3],s=t[4],a=t[5],c=t[6],l=t[7],d=t[8],u=t[9],h=t[10],A=t[11],m=t[12],p=t[13],g=t[14],_=t[15],f=n*a-o*s,y=n*c-i*s,x=n*l-r*s,C=o*c-i*a,I=o*l-r*a,b=i*l-r*c,P=d*p-u*m,E=d*g-h*m,B=d*_-A*m,w=u*g-h*p,T=u*_-A*p,Q=h*_-A*g,N=f*Q-y*T+x*w+C*B-I*E+b*P;if(!N)return null;return N=1/N,e[0]=(a*Q-c*T+l*w)*N,e[1]=(i*T-o*Q-r*w)*N,e[2]=(p*b-g*I+_*C)*N,e[3]=(h*I-u*b-A*C)*N,e[4]=(c*B-s*Q-l*E)*N,e[5]=(n*Q-i*B+r*E)*N,e[6]=(g*x-m*b-_*y)*N,e[7]=(d*b-h*x+A*y)*N,e[8]=(s*T-a*B+l*P)*N,e[9]=(o*B-n*T-r*P)*N,e[10]=(m*I-p*x+_*f)*N,e[11]=(u*x-d*I-A*f)*N,e[12]=(a*E-s*w-c*P)*N,e[13]=(n*w-o*E+i*P)*N,e[14]=(p*y-m*C-g*f)*N,e[15]=(d*C-u*y+h*f)*N,e}function cPo(e,t){var n=t[0],o=t[1],i=t[2],r=t[3],s=t[4],a=t[5],c=t[6],l=t[7],d=t[8],u=t[9],h=t[10],A=t[11],m=t[12],p=t[13],g=t[14],_=t[15],f=n*a-o*s,y=n*c-i*s,x=n*l-r*s,C=o*c-i*a,I=o*l-r*a,b=i*l-r*c,P=d*p-u*m,E=d*g-h*m,B=d*_-A*m,w=u*g-h*p,T=u*_-A*p,Q=h*_-A*g;return e[0]=a*Q-c*T+l*w,e[1]=i*T-o*Q-r*w,e[2]=p*b-g*I+_*C,e[3]=h*I-u*b-A*C,e[4]=c*B-s*Q-l*E,e[5]=n*Q-i*B+r*E,e[6]=g*x-m*b-_*y,e[7]=d*b-h*x+A*y,e[8]=s*T-a*B+l*P,e[9]=o*B-n*T-r*P,e[10]=m*I-p*x+_*f,e[11]=u*x-d*I-A*f,e[12]=a*E-s*w-c*P,e[13]=n*w-o*E+i*P,e[14]=p*y-m*C-g*f,e[15]=d*C-u*y+h*f,e}function lPo(e){var t=e[0],n=e[1],o=e[2],i=e[3],r=e[4],s=e[5],a=e[6],c=e[7],l=e[8],d=e[9],u=e[10],h=e[11],A=e[12],m=e[13],p=e[14],g=e[15],_=t*s-n*r,f=t*a-o*r,y=n*a-o*s,x=l*m-d*A,C=l*p-u*A,I=d*p-u*m,b=t*I-n*C+o*x,P=r*I-s*C+a*x,E=l*y-d*f+u*_,B=A*y-m*f+p*_;return c*b-i*P+g*E-h*B}function Obt(e,t,n){var o=t[0],i=t[1],r=t[2],s=t[3],a=t[4],c=t[5],l=t[6],d=t[7],u=t[8],h=t[9],A=t[10],m=t[11],p=t[12],g=t[13],_=t[14],f=t[15],y=n[0],x=n[1],C=n[2],I=n[3];return e[0]=y*o+x*a+C*u+I*p,e[1]=y*i+x*c+C*h+I*g,e[2]=y*r+x*l+C*A+I*_,e[3]=y*s+x*d+C*m+I*f,y=n[4],x=n[5],C=n[6],I=n[7],e[4]=y*o+x*a+C*u+I*p,e[5]=y*i+x*c+C*h+I*g,e[6]=y*r+x*l+C*A+I*_,e[7]=y*s+x*d+C*m+I*f,y=n[8],x=n[9],C=n[10],I=n[11],e[8]=y*o+x*a+C*u+I*p,e[9]=y*i+x*c+C*h+I*g,e[10]=y*r+x*l+C*A+I*_,e[11]=y*s+x*d+C*m+I*f,y=n[12],x=n[13],C=n[14],I=n[15],e[12]=y*o+x*a+C*u+I*p,e[13]=y*i+x*c+C*h+I*g,e[14]=y*r+x*l+C*A+I*_,e[15]=y*s+x*d+C*m+I*f,e}function dPo(e,t,n){var o=n[0],i=n[1],r=n[2],s,a,c,l,d,u,h,A,m,p,g,_;if(t===e)e[12]=t[0]*o+t[4]*i+t[8]*r+t[12],e[13]=t[1]*o+t[5]*i+t[9]*r+t[13],e[14]=t[2]*o+t[6]*i+t[10]*r+t[14],e[15]=t[3]*o+t[7]*i+t[11]*r+t[15];else s=t[0],a=t[1],c=t[2],l=t[3],d=t[4],u=t[5],h=t[6],A=t[7],m=t[8],p=t[9],g=t[10],_=t[11],e[0]=s,e[1]=a,e[2]=c,e[3]=l,e[4]=d,e[5]=u,e[6]=h,e[7]=A,e[8]=m,e[9]=p,e[10]=g,e[11]=_,e[12]=s*o+d*i+m*r+t[12],e[13]=a*o+u*i+p*r+t[13],e[14]=c*o+h*i+g*r+t[14],e[15]=l*o+A*i+_*r+t[15];return e}function uPo(e,t,n){var o=n[0],i=n[1],r=n[2];return e[0]=t[0]*o,e[1]=t[1]*o,e[2]=t[2]*o,e[3]=t[3]*o,e[4]=t[4]*i,e[5]=t[5]*i,e[6]=t[6]*i,e[7]=t[7]*i,e[8]=t[8]*r,e[9]=t[9]*r,e[10]=t[10]*r,e[11]=t[11]*r,e[12]=t[12],e[13]=t[13],e[14]=t[14],e[15]=t[15],e}function hPo(e,t,n,o){var i=o[0],r=o[1],s=o[2],a=Math.sqrt(i*i+r*r+s*s),c,l,d,u,h,A,m,p,g,_,f,y,x,C,I,b,P,E,B,w,T,Q,N,F;if(a<zd.EPSILON)return null;if(a=1/a,i*=a,r*=a,s*=a,c=Math.sin(n),l=Math.cos(n),d=1-l,u=t[0],h=t[1],A=t[2],m=t[3],p=t[4],g=t[5],_=t[6],f=t[7],y=t[8],x=t[9],C=t[10],I=t[11],b=i*i*d+l,P=r*i*d+s*c,E=s*i*d-r*c,B=i*r*d-s*c,w=r*r*d+l,T=s*r*d+i*c,Q=i*s*d+r*c,N=r*s*d-i*c,F=s*s*d+l,e[0]=u*b+p*P+y*E,e[1]=h*b+g*P+x*E,e[2]=A*b+_*P+C*E,e[3]=m*b+f*P+I*E,e[4]=u*B+p*w+y*T,e[5]=h*B+g*w+x*T,e[6]=A*B+_*w+C*T,e[7]=m*B+f*w+I*T,e[8]=u*Q+p*N+y*F,e[9]=h*Q+g*N+x*F,e[10]=A*Q+_*N+C*F,e[11]=m*Q+f*N+I*F,t!==e)e[12]=t[12],e[13]=t[13],e[14]=t[14],e[15]=t[15];return e}function mPo(e,t,n){var o=Math.sin(n),i=Math.cos(n),r=t[4],s=t[5],a=t[6],c=t[7],l=t[8],d=t[9],u=t[10],h=t[11];if(t!==e)e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e[12]=t[12],e[13]=t[13],e[14]=t[14],e[15]=t[15];return e[4]=r*i+l*o,e[5]=s*i+d*o,e[6]=a*i+u*o,e[7]=c*i+h*o,e[8]=l*i-r*o,e[9]=d*i-s*o,e[10]=u*i-a*o,e[11]=h*i-c*o,e}function pPo(e,t,n){var o=Math.sin(n),i=Math.cos(n),r=t[0],s=t[1],a=t[2],c=t[3],l=t[8],d=t[9],u=t[10],h=t[11];if(t!==e)e[4]=t[4],e[5]=t[5],e[6]=t[6],e[7]=t[7],e[12]=t[12],e[13]=t[13],e[14]=t[14],e[15]=t[15];return e[0]=r*i-l*o,e[1]=s*i-d*o,e[2]=a*i-u*o,e[3]=c*i-h*o,e[8]=r*o+l*i,e[9]=s*o+d*i,e[10]=a*o+u*i,e[11]=c*o+h*i,e}function APo(e,t,n){var o=Math.sin(n),i=Math.cos(n),r=t[0],s=t[1],a=t[2],c=t[3],l=t[4],d=t[5],u=t[6],h=t[7];if(t!==e)e[8]=t[8],e[9]=t[9],e[10]=t[10],e[11]=t[11],e[12]=t[12],e[13]=t[13],e[14]=t[14],e[15]=t[15];return e[0]=r*i+l*o,e[1]=s*i+d*o,e[2]=a*i+u*o,e[3]=c*i+h*o,e[4]=l*i-r*o,e[5]=d*i-s*o,e[6]=u*i-a*o,e[7]=h*i-c*o,e}function _Po(e,t){return e[0]=1,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=1,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[10]=1,e[11]=0,e[12]=t[0],e[13]=t[1],e[14]=t[2],e[15]=1,e}function gPo(e,t){return e[0]=t[0],e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=t[1],e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[10]=t[2],e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,e}function fPo(e,t,n){var o=n[0],i=n[1],r=n[2],s=Math.sqrt(o*o+i*i+r*r),a,c,l;if(s<zd.EPSILON)return null;return s=1/s,o*=s,i*=s,r*=s,a=Math.sin(t),c=Math.cos(t),l=1-c,e[0]=o*o*l+c,e[1]=i*o*l+r*a,e[2]=r*o*l-i*a,e[3]=0,e[4]=o*i*l-r*a,e[5]=i*i*l+c,e[6]=r*i*l+o*a,e[7]=0,e[8]=o*r*l+i*a,e[9]=i*r*l-o*a,e[10]=r*r*l+c,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,e}function yPo(e,t){var n=Math.sin(t),o=Math.cos(t);return e[0]=1,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=o,e[6]=n,e[7]=0,e[8]=0,e[9]=-n,e[10]=o,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,e}function xPo(e,t){var n=Math.sin(t),o=Math.cos(t);return e[0]=o,e[1]=0,e[2]=-n,e[3]=0,e[4]=0,e[5]=1,e[6]=0,e[7]=0,e[8]=n,e[9]=0,e[10]=o,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,e}function CPo(e,t){var n=Math.sin(t),o=Math.cos(t);return e[0]=o,e[1]=n,e[2]=0,e[3]=0,e[4]=-n,e[5]=o,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[10]=1,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,e}function zbt(e,t,n){var o=t[0],i=t[1],r=t[2],s=t[3],a=o+o,c=i+i,l=r+r,d=o*a,u=o*c,h=o*l,A=i*c,m=i*l,p=r*l,g=s*a,_=s*c,f=s*l;return e[0]=1-(A+p),e[1]=u+f,e[2]=h-_,e[3]=0,e[4]=u-f,e[5]=1-(d+p),e[6]=m+g,e[7]=0,e[8]=h+_,e[9]=m-g,e[10]=1-(d+A),e[11]=0,e[12]=n[0],e[13]=n[1],e[14]=n[2],e[15]=1,e}function IPo(e,t){var n=new zd.ARRAY_TYPE(3),o=-t[0],i=-t[1],r=-t[2],s=t[3],a=t[4],c=t[5],l=t[6],d=t[7],u=o*o+i*i+r*r+s*s;if(u>0)n[0]=(a*s+d*o+c*r-l*i)*2/u,n[1]=(c*s+d*i+l*o-a*r)*2/u,n[2]=(l*s+d*r+a*i-c*o)*2/u;else n[0]=(a*s+d*o+c*r-l*i)*2,n[1]=(c*s+d*i+l*o-a*r)*2,n[2]=(l*s+d*r+a*i-c*o)*2;return zbt(e,t,n),e}function bPo(e,t){return e[0]=t[12],e[1]=t[13],e[2]=t[14],e}function Gbt(e,t){var n=t[0],o=t[1],i=t[2],r=t[4],s=t[5],a=t[6],c=t[8],l=t[9],d=t[10];return e[0]=Math.sqrt(n*n+o*o+i*i),e[1]=Math.sqrt(r*r+s*s+a*a),e[2]=Math.sqrt(c*c+l*l+d*d),e}function SPo(e,t){var n=new zd.ARRAY_TYPE(3);Gbt(n,t);var o=1/n[0],i=1/n[1],r=1/n[2],s=t[0]*o,a=t[1]*i,c=t[2]*r,l=t[4]*o,d=t[5]*i,u=t[6]*r,h=t[8]*o,A=t[9]*i,m=t[10]*r,p=s+d+m,g=0;if(p>0)g=Math.sqrt(p+1)*2,e[3]=0.25*g,e[0]=(u-A)/g,e[1]=(h-c)/g,e[2]=(a-l)/g;else if(s>d&&s>m)g=Math.sqrt(1+s-d-m)*2,e[3]=(u-A)/g,e[0]=0.25*g,e[1]=(a+l)/g,e[2]=(h+c)/g;else if(d>m)g=Math.sqrt(1+d-s-m)*2,e[3]=(h-c)/g,e[0]=(a+l)/g,e[1]=0.25*g,e[2]=(u+A)/g;else g=Math.sqrt(1+m-s-d)*2,e[3]=(a-l)/g,e[0]=(h+c)/g,e[1]=(u+A)/g,e[2]=0.25*g;return e}function PPo(e,t,n,o){t[0]=o[12],t[1]=o[13],t[2]=o[14];var i=o[0],r=o[1],s=o[2],a=o[4],c=o[5],l=o[6],d=o[8],u=o[9],h=o[10];n[0]=Math.sqrt(i*i+r*r+s*s),n[1]=Math.sqrt(a*a+c*c+l*l),n[2]=Math.sqrt(d*d+u*u+h*h);var A=1/n[0],m=1/n[1],p=1/n[2],g=i*A,_=r*m,f=s*p,y=a*A,x=c*m,C=l*p,I=d*A,b=u*m,P=h*p,E=g+x+P,B=0;if(E>0)B=Math.sqrt(E+1)*2,e[3]=0.25*B,e[0]=(C-b)/B,e[1]=(I-f)/B,e[2]=(_-y)/B;else if(g>x&&g>P)B=Math.sqrt(1+g-x-P)*2,e[3]=(C-b)/B,e[0]=0.25*B,e[1]=(_+y)/B,e[2]=(I+f)/B;else if(x>P)B=Math.sqrt(1+x-g-P)*2,e[3]=(I-f)/B,e[0]=(_+y)/B,e[1]=0.25*B,e[2]=(C+b)/B;else B=Math.sqrt(1+P-g-x)*2,e[3]=(_-y)/B,e[0]=(I+f)/B,e[1]=(C+b)/B,e[2]=0.25*B;return e}function vPo(e,t,n,o){var i=t[0],r=t[1],s=t[2],a=t[3],c=i+i,l=r+r,d=s+s,u=i*c,h=i*l,A=i*d,m=r*l,p=r*d,g=s*d,_=a*c,f=a*l,y=a*d,x=o[0],C=o[1],I=o[2];return e[0]=(1-(m+g))*x,e[1]=(h+y)*x,e[2]=(A-f)*x,e[3]=0,e[4]=(h-y)*C,e[5]=(1-(u+g))*C,e[6]=(p+_)*C,e[7]=0,e[8]=(A+f)*I,e[9]=(p-_)*I,e[10]=(1-(u+m))*I,e[11]=0,e[12]=n[0],e[13]=n[1],e[14]=n[2],e[15]=1,e}function EPo(e,t,n,o,i){var r=t[0],s=t[1],a=t[2],c=t[3],l=r+r,d=s+s,u=a+a,h=r*l,A=r*d,m=r*u,p=s*d,g=s*u,_=a*u,f=c*l,y=c*d,x=c*u,C=o[0],I=o[1],b=o[2],P=i[0],E=i[1],B=i[2],w=(1-(p+_))*C,T=(A+x)*C,Q=(m-y)*C,N=(A-x)*I,F=(1-(h+_))*I,H=(g+f)*I,z=(m+y)*b,Y=(g-f)*b,U=(1-(h+p))*b;return e[0]=w,e[1]=T,e[2]=Q,e[3]=0,e[4]=N,e[5]=F,e[6]=H,e[7]=0,e[8]=z,e[9]=Y,e[10]=U,e[11]=0,e[12]=n[0]+P-(w*P+N*E+z*B),e[13]=n[1]+E-(T*P+F*E+Y*B),e[14]=n[2]+B-(Q*P+H*E+U*B),e[15]=1,e}function MPo(e,t){var n=t[0],o=t[1],i=t[2],r=t[3],s=n+n,a=o+o,c=i+i,l=n*s,d=o*s,u=o*a,h=i*s,A=i*a,m=i*c,p=r*s,g=r*a,_=r*c;return e[0]=1-u-m,e[1]=d+_,e[2]=h-g,e[3]=0,e[4]=d-_,e[5]=1-l-m,e[6]=A+p,e[7]=0,e[8]=h+g,e[9]=A-p,e[10]=1-l-u,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,e}function BPo(e,t,n,o,i,r,s){var a=1/(n-t),c=1/(i-o),l=1/(r-s);return e[0]=r*2*a,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=r*2*c,e[6]=0,e[7]=0,e[8]=(n+t)*a,e[9]=(i+o)*c,e[10]=(s+r)*l,e[11]=-1,e[12]=0,e[13]=0,e[14]=s*r*2*l,e[15]=0,e}function Ybt(e,t,n,o,i){var r=1/Math.tan(t/2);if(e[0]=r/n,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=r,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[11]=-1,e[12]=0,e[13]=0,e[15]=0,i!=null&&i!==1/0){var s=1/(o-i);e[10]=(i+o)*s,e[14]=2*i*o*s}else e[10]=-1,e[14]=-2*o;return e}var xOr=Wbt.perspective=Ybt;function wPo(e,t,n,o,i){var r=1/Math.tan(t/2);if(e[0]=r/n,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=r,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[11]=-1,e[12]=0,e[13]=0,e[15]=0,i!=null&&i!==1/0){var s=1/(o-i);e[10]=i*s,e[14]=i*o*s}else e[10]=-1,e[14]=-o;return e}function TPo(e,t,n,o){var i=Math.tan(t.upDegrees*Math.PI/180),r=Math.tan(t.downDegrees*Math.PI/180),s=Math.tan(t.leftDegrees*Math.PI/180),a=Math.tan(t.rightDegrees*Math.PI/180),c=2/(s+a),l=2/(i+r);return e[0]=c,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=l,e[6]=0,e[7]=0,e[8]=-((s-a)*c*0.5),e[9]=(i-r)*l*0.5,e[10]=o/(n-o),e[11]=-1,e[12]=0,e[13]=0,e[14]=o*n/(n-o),e[15]=0,e}function Vbt(e,t,n,o,i,r,s){var a=1/(t-n),c=1/(o-i),l=1/(r-s);return e[0]=-2*a,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=-2*c,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[10]=2*l,e[11]=0,e[12]=(t+n)*a,e[13]=(i+o)*c,e[14]=(s+r)*l,e[15]=1,e}var COr=Wbt.ortho=Vbt;function DPo(e,t,n,o,i,r,s){var a=1/(t-n),c=1/(o-i),l=1/(r-s);return e[0]=-2*a,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=-2*c,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[10]=l,e[11]=0,e[12]=(t+n)*a,e[13]=(i+o)*c,e[14]=r*l,e[15]=1,e}function NPo(e,t,n,o){var i,r,s,a,c,l,d,u,h,A,m=t[0],p=t[1],g=t[2],_=o[0],f=o[1],y=o[2],x=n[0],C=n[1],I=n[2];if(Math.abs(m-x)<zd.EPSILON&&Math.abs(p-C)<zd.EPSILON&&Math.abs(g-I)<zd.EPSILON)return Hbt(e);if(d=m-x,u=p-C,h=g-I,A=1/Math.sqrt(d*d+u*u+h*h),d*=A,u*=A,h*=A,i=f*h-y*u,r=y*d-_*h,s=_*u-f*d,A=Math.sqrt(i*i+r*r+s*s),!A)i=0,r=0,s=0;else A=1/A,i*=A,r*=A,s*=A;if(a=u*s-h*r,c=h*i-d*s,l=d*r-u*i,A=Math.sqrt(a*a+c*c+l*l),!A)a=0,c=0,l=0;else A=1/A,a*=A,c*=A,l*=A;return e[0]=i,e[1]=a,e[2]=d,e[3]=0,e[4]=r,e[5]=c,e[6]=u,e[7]=0,e[8]=s,e[9]=l,e[10]=h,e[11]=0,e[12]=-(i*m+r*p+s*g),e[13]=-(a*m+c*p+l*g),e[14]=-(d*m+u*p+h*g),e[15]=1,e}function RPo(e,t,n,o){var i=t[0],r=t[1],s=t[2],a=o[0],c=o[1],l=o[2],d=i-n[0],u=r-n[1],h=s-n[2],A=d*d+u*u+h*h;if(A>0)A=1/Math.sqrt(A),d*=A,u*=A,h*=A;var m=c*h-l*u,p=l*d-a*h,g=a*u-c*d;if(A=m*m+p*p+g*g,A>0)A=1/Math.sqrt(A),m*=A,p*=A,g*=A;return e[0]=m,e[1]=p,e[2]=g,e[3]=0,e[4]=u*g-h*p,e[5]=h*m-d*g,e[6]=d*p-u*m,e[7]=0,e[8]=d,e[9]=u,e[10]=h,e[11]=0,e[12]=i,e[13]=r,e[14]=s,e[15]=1,e}function QPo(e){return"mat4("+e[0]+", "+e[1]+", "+e[2]+", "+e[3]+", "+e[4]+", "+e[5]+", "+e[6]+", "+e[7]+", "+e[8]+", "+e[9]+", "+e[10]+", "+e[11]+", "+e[12]+", "+e[13]+", "+e[14]+", "+e[15]+")"}function kPo(e){return Math.sqrt(e[0]*e[0]+e[1]*e[1]+e[2]*e[2]+e[3]*e[3]+e[4]*e[4]+e[5]*e[5]+e[6]*e[6]+e[7]*e[7]+e[8]*e[8]+e[9]*e[9]+e[10]*e[10]+e[11]*e[11]+e[12]*e[12]+e[13]*e[13]+e[14]*e[14]+e[15]*e[15])}function LPo(e,t,n){return e[0]=t[0]+n[0],e[1]=t[1]+n[1],e[2]=t[2]+n[2],e[3]=t[3]+n[3],e[4]=t[4]+n[4],e[5]=t[5]+n[5],e[6]=t[6]+n[6],e[7]=t[7]+n[7],e[8]=t[8]+n[8],e[9]=t[9]+n[9],e[10]=t[10]+n[10],e[11]=t[11]+n[11],e[12]=t[12]+n[12],e[13]=t[13]+n[13],e[14]=t[14]+n[14],e[15]=t[15]+n[15],e}function Ubt(e,t,n){return e[0]=t[0]-n[0],e[1]=t[1]-n[1],e[2]=t[2]-n[2],e[3]=t[3]-n[3],e[4]=t[4]-n[4],e[5]=t[5]-n[5],e[6]=t[6]-n[6],e[7]=t[7]-n[7],e[8]=t[8]-n[8],e[9]=t[9]-n[9],e[10]=t[10]-n[10],e[11]=t[11]-n[11],e[12]=t[12]-n[12],e[13]=t[13]-n[13],e[14]=t[14]-n[14],e[15]=t[15]-n[15],e}function FPo(e,t,n){return e[0]=t[0]*n,e[1]=t[1]*n,e[2]=t[2]*n,e[3]=t[3]*n,e[4]=t[4]*n,e[5]=t[5]*n,e[6]=t[6]*n,e[7]=t[7]*n,e[8]=t[8]*n,e[9]=t[9]*n,e[10]=t[10]*n,e[11]=t[11]*n,e[12]=t[12]*n,e[13]=t[13]*n,e[14]=t[14]*n,e[15]=t[15]*n,e}function HPo(e,t,n,o){return e[0]=t[0]+n[0]*o,e[1]=t[1]+n[1]*o,e[2]=t[2]+n[2]*o,e[3]=t[3]+n[3]*o,e[4]=t[4]+n[4]*o,e[5]=t[5]+n[5]*o,e[6]=t[6]+n[6]*o,e[7]=t[7]+n[7]*o,e[8]=t[8]+n[8]*o,e[9]=t[9]+n[9]*o,e[10]=t[10]+n[10]*o,e[11]=t[11]+n[11]*o,e[12]=t[12]+n[12]*o,e[13]=t[13]+n[13]*o,e[14]=t[14]+n[14]*o,e[15]=t[15]+n[15]*o,e}function OPo(e,t){return e[0]===t[0]&&e[1]===t[1]&&e[2]===t[2]&&e[3]===t[3]&&e[4]===t[4]&&e[5]===t[5]&&e[6]===t[6]&&e[7]===t[7]&&e[8]===t[8]&&e[9]===t[9]&&e[10]===t[10]&&e[11]===t[11]&&e[12]===t[12]&&e[13]===t[13]&&e[14]===t[14]&&e[15]===t[15]}function zPo(e,t){var n=e[0],o=e[1],i=e[2],r=e[3],s=e[4],a=e[5],c=e[6],l=e[7],d=e[8],u=e[9],h=e[10],A=e[11],m=e[12],p=e[13],g=e[14],_=e[15],f=t[0],y=t[1],x=t[2],C=t[3],I=t[4],b=t[5],P=t[6],E=t[7],B=t[8],w=t[9],T=t[10],Q=t[11],N=t[12],F=t[13],H=t[14],z=t[15];return Math.abs(n-f)<=zd.EPSILON*Math.max(1,Math.abs(n),Math.abs(f))&&Math.abs(o-y)<=zd.EPSILON*Math.max(1,Math.abs(o),Math.abs(y))&&Math.abs(i-x)<=zd.EPSILON*Math.max(1,Math.abs(i),Math.abs(x))&&Math.abs(r-C)<=zd.EPSILON*Math.max(1,Math.abs(r),Math.abs(C))&&Math.abs(s-I)<=zd.EPSILON*Math.max(1,Math.abs(s),Math.abs(I))&&Math.abs(a-b)<=zd.EPSILON*Math.max(1,Math.abs(a),Math.abs(b))&&Math.abs(c-P)<=zd.EPSILON*Math.max(1,Math.abs(c),Math.abs(P))&&Math.abs(l-E)<=zd.EPSILON*Math.max(1,Math.abs(l),Math.abs(E))&&Math.abs(d-B)<=zd.EPSILON*Math.max(1,Math.abs(d),Math.abs(B))&&Math.abs(u-w)<=zd.EPSILON*Math.max(1,Math.abs(u),Math.abs(w))&&Math.abs(h-T)<=zd.EPSILON*Math.max(1,Math.abs(h),Math.abs(T))&&Math.abs(A-Q)<=zd.EPSILON*Math.max(1,Math.abs(A),Math.abs(Q))&&Math.abs(m-N)<=zd.EPSILON*Math.max(1,Math.abs(m),Math.abs(N))&&Math.abs(p-F)<=zd.EPSILON*Math.max(1,Math.abs(p),Math.abs(F))&&Math.abs(g-H)<=zd.EPSILON*Math.max(1,Math.abs(g),Math.abs(H))&&Math.abs(_-z)<=zd.EPSILON*Math.max(1,Math.abs(_),Math.abs(z))}var IOr=Wbt.mul=Obt,bOr=Wbt.sub=Ubt});var ZTe=ct(function(s5t){function JTe(e){return JTe=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},JTe(e)}Object.defineProperty(s5t,"__esModule",{value:!0});s5t.add=Ovo;s5t.angle=lEo;s5t.bezier=tEo;s5t.ceil=zvo;s5t.clone=kvo;s5t.copy=Fvo;s5t.create=$bt;s5t.cross=Jvo;s5t.dist=void 0;s5t.distance=o5t;s5t.div=void 0;s5t.divide=n5t;s5t.dot=$Te;s5t.equals=mEo;s5t.exactEquals=hEo;s5t.floor=Gvo;s5t.forEach=void 0;s5t.fromValues=Lvo;s5t.hermite=eEo;s5t.inverse=jvo;s5t.len=void 0;s5t.length=Zbt;s5t.lerp=$vo;s5t.max=Vvo;s5t.min=Yvo;s5t.mul=void 0;s5t.multiply=t5t;s5t.negate=Kvo;s5t.normalize=qvo;s5t.random=nEo;s5t.rotateX=sEo;s5t.rotateY=aEo;s5t.rotateZ=cEo;s5t.round=Uvo;s5t.scale=Wvo;s5t.scaleAndAdd=Xvo;s5t.set=Hvo;s5t.slerp=Zvo;s5t.sqrLen=s5t.sqrDist=void 0;s5t.squaredDistance=i5t;s5t.squaredLength=r5t;s5t.str=uEo;s5t.sub=void 0;s5t.subtract=e5t;s5t.transformMat3=iEo;s5t.transformMat4=oEo;s5t.transformQuat=rEo;s5t.zero=dEo;var yI=Jbt(oS());function Jbt(e,t){if(typeof WeakMap=="function")var n=new WeakMap,o=new WeakMap;return(Jbt=function(r,s){if(!s&&r&&r.__esModule)return r;var a,c,l={__proto__:null,default:r};if(r===null||JTe(r)!="object"&&typeof r!="function")return l;if(a=s?o:n){if(a.has(r))return a.get(r);a.set(r,l)}for(var d in r)d!=="default"&&{}.hasOwnProperty.call(r,d)&&((c=(a=Object.defineProperty)&&Object.getOwnPropertyDescriptor(r,d))&&(c.get||c.set)?a(l,d,c):l[d]=r[d]);return l})(e,t)}function $bt(){var e=new yI.ARRAY_TYPE(3);if(yI.ARRAY_TYPE!=Float32Array)e[0]=0,e[1]=0,e[2]=0;return e}function kvo(e){var t=new yI.ARRAY_TYPE(3);return t[0]=e[0],t[1]=e[1],t[2]=e[2],t}function Zbt(e){var t=e[0],n=e[1],o=e[2];return Math.sqrt(t*t+n*n+o*o)}function Lvo(e,t,n){var o=new yI.ARRAY_TYPE(3);return o[0]=e,o[1]=t,o[2]=n,o}function Fvo(e,t){return e[0]=t[0],e[1]=t[1],e[2]=t[2],e}function Hvo(e,t,n,o){return e[0]=t,e[1]=n,e[2]=o,e}function Ovo(e,t,n){return e[0]=t[0]+n[0],e[1]=t[1]+n[1],e[2]=t[2]+n[2],e}function e5t(e,t,n){return e[0]=t[0]-n[0],e[1]=t[1]-n[1],e[2]=t[2]-n[2],e}function t5t(e,t,n){return e[0]=t[0]*n[0],e[1]=t[1]*n[1],e[2]=t[2]*n[2],e}function n5t(e,t,n){return e[0]=t[0]/n[0],e[1]=t[1]/n[1],e[2]=t[2]/n[2],e}function zvo(e,t){return e[0]=Math.ceil(t[0]),e[1]=Math.ceil(t[1]),e[2]=Math.ceil(t[2]),e}function Gvo(e,t){return e[0]=Math.floor(t[0]),e[1]=Math.floor(t[1]),e[2]=Math.floor(t[2]),e}function Yvo(e,t,n){return e[0]=Math.min(t[0],n[0]),e[1]=Math.min(t[1],n[1]),e[2]=Math.min(t[2],n[2]),e}function Vvo(e,t,n){return e[0]=Math.max(t[0],n[0]),e[1]=Math.max(t[1],n[1]),e[2]=Math.max(t[2],n[2]),e}function Uvo(e,t){return e[0]=yI.round(t[0]),e[1]=yI.round(t[1]),e[2]=yI.round(t[2]),e}function Wvo(e,t,n){return e[0]=t[0]*n,e[1]=t[1]*n,e[2]=t[2]*n,e}function Xvo(e,t,n,o){return e[0]=t[0]+n[0]*o,e[1]=t[1]+n[1]*o,e[2]=t[2]+n[2]*o,e}function o5t(e,t){var n=t[0]-e[0],o=t[1]-e[1],i=t[2]-e[2];return Math.sqrt(n*n+o*o+i*i)}function i5t(e,t){var n=t[0]-e[0],o=t[1]-e[1],i=t[2]-e[2];return n*n+o*o+i*i}function r5t(e){var t=e[0],n=e[1],o=e[2];return t*t+n*n+o*o}function Kvo(e,t){return e[0]=-t[0],e[1]=-t[1],e[2]=-t[2],e}function jvo(e,t){return e[0]=1/t[0],e[1]=1/t[1],e[2]=1/t[2],e}function qvo(e,t){var n=t[0],o=t[1],i=t[2],r=n*n+o*o+i*i;if(r>0)r=1/Math.sqrt(r);return e[0]=t[0]*r,e[1]=t[1]*r,e[2]=t[2]*r,e}function $Te(e,t){return e[0]*t[0]+e[1]*t[1]+e[2]*t[2]}function Jvo(e,t,n){var o=t[0],i=t[1],r=t[2],s=n[0],a=n[1],c=n[2];return e[0]=i*c-r*a,e[1]=r*s-o*c,e[2]=o*a-i*s,e}function $vo(e,t,n,o){var i=t[0],r=t[1],s=t[2];return e[0]=i+o*(n[0]-i),e[1]=r+o*(n[1]-r),e[2]=s+o*(n[2]-s),e}function Zvo(e,t,n,o){var i=Math.acos(Math.min(Math.max($Te(t,n),-1),1)),r=Math.sin(i),s=Math.sin((1-o)*i)/r,a=Math.sin(o*i)/r;return e[0]=s*t[0]+a*n[0],e[1]=s*t[1]+a*n[1],e[2]=s*t[2]+a*n[2],e}function eEo(e,t,n,o,i,r){var s=r*r,a=s*(2*r-3)+1,c=s*(r-2)+r,l=s*(r-1),d=s*(3-2*r);return e[0]=t[0]*a+n[0]*c+o[0]*l+i[0]*d,e[1]=t[1]*a+n[1]*c+o[1]*l+i[1]*d,e[2]=t[2]*a+n[2]*c+o[2]*l+i[2]*d,e}function tEo(e,t,n,o,i,r){var s=1-r,a=s*s,c=r*r,l=a*s,d=3*r*a,u=3*c*s,h=c*r;return e[0]=t[0]*l+n[0]*d+o[0]*u+i[0]*h,e[1]=t[1]*l+n[1]*d+o[1]*u+i[1]*h,e[2]=t[2]*l+n[2]*d+o[2]*u+i[2]*h,e}function nEo(e,t){t=t===void 0?1:t;var n=yI.RANDOM()*2*Math.PI,o=yI.RANDOM()*2-1,i=Math.sqrt(1-o*o)*t;return e[0]=Math.cos(n)*i,e[1]=Math.sin(n)*i,e[2]=o*t,e}function oEo(e,t,n){var o=t[0],i=t[1],r=t[2],s=n[3]*o+n[7]*i+n[11]*r+n[15];return s=s||1,e[0]=(n[0]*o+n[4]*i+n[8]*r+n[12])/s,e[1]=(n[1]*o+n[5]*i+n[9]*r+n[13])/s,e[2]=(n[2]*o+n[6]*i+n[10]*r+n[14])/s,e}function iEo(e,t,n){var o=t[0],i=t[1],r=t[2];return e[0]=o*n[0]+i*n[3]+r*n[6],e[1]=o*n[1]+i*n[4]+r*n[7],e[2]=o*n[2]+i*n[5]+r*n[8],e}function rEo(e,t,n){var o=n[0],i=n[1],r=n[2],s=n[3],a=t[0],c=t[1],l=t[2],d=i*l-r*c,u=r*a-o*l,h=o*c-i*a;return d=d+d,u=u+u,h=h+h,e[0]=a+s*d+i*h-r*u,e[1]=c+s*u+r*d-o*h,e[2]=l+s*h+o*u-i*d,e}function sEo(e,t,n,o){var i=[],r=[];return i[0]=t[0]-n[0],i[1]=t[1]-n[1],i[2]=t[2]-n[2],r[0]=i[0],r[1]=i[1]*Math.cos(o)-i[2]*Math.sin(o),r[2]=i[1]*Math.sin(o)+i[2]*Math.cos(o),e[0]=r[0]+n[0],e[1]=r[1]+n[1],e[2]=r[2]+n[2],e}function aEo(e,t,n,o){var i=[],r=[];return i[0]=t[0]-n[0],i[1]=t[1]-n[1],i[2]=t[2]-n[2],r[0]=i[2]*Math.sin(o)+i[0]*Math.cos(o),r[1]=i[1],r[2]=i[2]*Math.cos(o)-i[0]*Math.sin(o),e[0]=r[0]+n[0],e[1]=r[1]+n[1],e[2]=r[2]+n[2],e}function cEo(e,t,n,o){var i=[],r=[];return i[0]=t[0]-n[0],i[1]=t[1]-n[1],i[2]=t[2]-n[2],r[0]=i[0]*Math.cos(o)-i[1]*Math.sin(o),r[1]=i[0]*Math.sin(o)+i[1]*Math.cos(o),r[2]=i[2],e[0]=r[0]+n[0],e[1]=r[1]+n[1],e[2]=r[2]+n[2],e}function lEo(e,t){var n=e[0],o=e[1],i=e[2],r=t[0],s=t[1],a=t[2],c=Math.sqrt((n*n+o*o+i*i)*(r*r+s*s+a*a)),l=c&&$Te(e,t)/c;return Math.acos(Math.min(Math.max(l,-1),1))}function dEo(e){return e[0]=0,e[1]=0,e[2]=0,e}function uEo(e){return"vec3("+e[0]+", "+e[1]+", "+e[2]+")"}function hEo(e,t){return e[0]===t[0]&&e[1]===t[1]&&e[2]===t[2]}function mEo(e,t){var n=e[0],o=e[1],i=e[2],r=t[0],s=t[1],a=t[2];return Math.abs(n-r)<=yI.EPSILON*Math.max(1,Math.abs(n),Math.abs(r))&&Math.abs(o-s)<=yI.EPSILON*Math.max(1,Math.abs(o),Math.abs(s))&&Math.abs(i-a)<=yI.EPSILON*Math.max(1,Math.abs(i),Math.abs(a))}var POr=s5t.sub=e5t,vOr=s5t.mul=t5t,EOr=s5t.div=n5t,MOr=s5t.dist=o5t,BOr=s5t.sqrDist=i5t,wOr=s5t.len=Zbt,TOr=s5t.sqrLen=r5t,DOr=s5t.forEach=function(){var e=$bt();return function(t,n,o,i,r,s){var a,c;if(!n)n=3;if(!o)o=0;if(i)c=Math.min(i*n+o,t.length);else c=t.length;for(a=o;a<c;a+=n)e[0]=t[a],e[1]=t[a+1],e[2]=t[a+2],r(e,e,s),t[a]=e[0],t[a+1]=e[1],t[a+2]=e[2];return t}}()});var tDe=ct(function(b5t){function eDe(e){return eDe=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},eDe(e)}Object.defineProperty(b5t,"__esModule",{value:!0});b5t.add=s3o;b5t.ceil=a3o;b5t.clone=n3o;b5t.copy=i3o;b5t.create=A5t;b5t.cross=f3o;b5t.dist=void 0;b5t.distance=y5t;b5t.div=void 0;b5t.divide=f5t;b5t.dot=g3o;b5t.equals=v3o;b5t.exactEquals=P3o;b5t.floor=c3o;b5t.forEach=void 0;b5t.fromValues=o3o;b5t.inverse=A3o;b5t.len=void 0;b5t.length=C5t;b5t.lerp=y3o;b5t.max=d3o;b5t.min=l3o;b5t.mul=void 0;b5t.multiply=g5t;b5t.negate=p3o;b5t.normalize=_3o;b5t.random=x3o;b5t.round=u3o;b5t.scale=h3o;b5t.scaleAndAdd=m3o;b5t.set=r3o;b5t.sqrLen=b5t.sqrDist=void 0;b5t.squaredDistance=x5t;b5t.squaredLength=I5t;b5t.str=S3o;b5t.sub=void 0;b5t.subtract=_5t;b5t.transformMat4=C3o;b5t.transformQuat=I3o;b5t.zero=b3o;var Qg=p5t(oS());function p5t(e,t){if(typeof WeakMap=="function")var n=new WeakMap,o=new WeakMap;return(p5t=function(r,s){if(!s&&r&&r.__esModule)return r;var a,c,l={__proto__:null,default:r};if(r===null||eDe(r)!="object"&&typeof r!="function")return l;if(a=s?o:n){if(a.has(r))return a.get(r);a.set(r,l)}for(var d in r)d!=="default"&&{}.hasOwnProperty.call(r,d)&&((c=(a=Object.defineProperty)&&Object.getOwnPropertyDescriptor(r,d))&&(c.get||c.set)?a(l,d,c):l[d]=r[d]);return l})(e,t)}function A5t(){var e=new Qg.ARRAY_TYPE(4);if(Qg.ARRAY_TYPE!=Float32Array)e[0]=0,e[1]=0,e[2]=0,e[3]=0;return e}function n3o(e){var t=new Qg.ARRAY_TYPE(4);return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t}function o3o(e,t,n,o){var i=new Qg.ARRAY_TYPE(4);return i[0]=e,i[1]=t,i[2]=n,i[3]=o,i}function i3o(e,t){return e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e}function r3o(e,t,n,o,i){return e[0]=t,e[1]=n,e[2]=o,e[3]=i,e}function s3o(e,t,n){return e[0]=t[0]+n[0],e[1]=t[1]+n[1],e[2]=t[2]+n[2],e[3]=t[3]+n[3],e}function _5t(e,t,n){return e[0]=t[0]-n[0],e[1]=t[1]-n[1],e[2]=t[2]-n[2],e[3]=t[3]-n[3],e}function g5t(e,t,n){return e[0]=t[0]*n[0],e[1]=t[1]*n[1],e[2]=t[2]*n[2],e[3]=t[3]*n[3],e}function f5t(e,t,n){return e[0]=t[0]/n[0],e[1]=t[1]/n[1],e[2]=t[2]/n[2],e[3]=t[3]/n[3],e}function a3o(e,t){return e[0]=Math.ceil(t[0]),e[1]=Math.ceil(t[1]),e[2]=Math.ceil(t[2]),e[3]=Math.ceil(t[3]),e}function c3o(e,t){return e[0]=Math.floor(t[0]),e[1]=Math.floor(t[1]),e[2]=Math.floor(t[2]),e[3]=Math.floor(t[3]),e}function l3o(e,t,n){return e[0]=Math.min(t[0],n[0]),e[1]=Math.min(t[1],n[1]),e[2]=Math.min(t[2],n[2]),e[3]=Math.min(t[3],n[3]),e}function d3o(e,t,n){return e[0]=Math.max(t[0],n[0]),e[1]=Math.max(t[1],n[1]),e[2]=Math.max(t[2],n[2]),e[3]=Math.max(t[3],n[3]),e}function u3o(e,t){return e[0]=Qg.round(t[0]),e[1]=Qg.round(t[1]),e[2]=Qg.round(t[2]),e[3]=Qg.round(t[3]),e}function h3o(e,t,n){return e[0]=t[0]*n,e[1]=t[1]*n,e[2]=t[2]*n,e[3]=t[3]*n,e}function m3o(e,t,n,o){return e[0]=t[0]+n[0]*o,e[1]=t[1]+n[1]*o,e[2]=t[2]+n[2]*o,e[3]=t[3]+n[3]*o,e}function y5t(e,t){var n=t[0]-e[0],o=t[1]-e[1],i=t[2]-e[2],r=t[3]-e[3];return Math.sqrt(n*n+o*o+i*i+r*r)}function x5t(e,t){var n=t[0]-e[0],o=t[1]-e[1],i=t[2]-e[2],r=t[3]-e[3];return n*n+o*o+i*i+r*r}function C5t(e){var t=e[0],n=e[1],o=e[2],i=e[3];return Math.sqrt(t*t+n*n+o*o+i*i)}function I5t(e){var t=e[0],n=e[1],o=e[2],i=e[3];return t*t+n*n+o*o+i*i}function p3o(e,t){return e[0]=-t[0],e[1]=-t[1],e[2]=-t[2],e[3]=-t[3],e}function A3o(e,t){return e[0]=1/t[0],e[1]=1/t[1],e[2]=1/t[2],e[3]=1/t[3],e}function _3o(e,t){var n=t[0],o=t[1],i=t[2],r=t[3],s=n*n+o*o+i*i+r*r;if(s>0)s=1/Math.sqrt(s);return e[0]=n*s,e[1]=o*s,e[2]=i*s,e[3]=r*s,e}function g3o(e,t){return e[0]*t[0]+e[1]*t[1]+e[2]*t[2]+e[3]*t[3]}function f3o(e,t,n,o){var i=n[0]*o[1]-n[1]*o[0],r=n[0]*o[2]-n[2]*o[0],s=n[0]*o[3]-n[3]*o[0],a=n[1]*o[2]-n[2]*o[1],c=n[1]*o[3]-n[3]*o[1],l=n[2]*o[3]-n[3]*o[2],d=t[0],u=t[1],h=t[2],A=t[3];return e[0]=u*l-h*c+A*a,e[1]=-(d*l)+h*s-A*r,e[2]=d*c-u*s+A*i,e[3]=-(d*a)+u*r-h*i,e}function y3o(e,t,n,o){var i=t[0],r=t[1],s=t[2],a=t[3];return e[0]=i+o*(n[0]-i),e[1]=r+o*(n[1]-r),e[2]=s+o*(n[2]-s),e[3]=a+o*(n[3]-a),e}function x3o(e,t){t=t===void 0?1:t;var n,o,i,r,s,a,c;c=Qg.RANDOM(),n=c*2-1,o=(4*Qg.RANDOM()-2)*Math.sqrt(c*-c+c),s=n*n+o*o,c=Qg.RANDOM(),i=c*2-1,r=(4*Qg.RANDOM()-2)*Math.sqrt(c*-c+c),a=i*i+r*r;var l=Math.sqrt((1-s)/a);return e[0]=t*n,e[1]=t*o,e[2]=t*i*l,e[3]=t*r*l,e}function C3o(e,t,n){var o=t[0],i=t[1],r=t[2],s=t[3];return e[0]=n[0]*o+n[4]*i+n[8]*r+n[12]*s,e[1]=n[1]*o+n[5]*i+n[9]*r+n[13]*s,e[2]=n[2]*o+n[6]*i+n[10]*r+n[14]*s,e[3]=n[3]*o+n[7]*i+n[11]*r+n[15]*s,e}function I3o(e,t,n){var o=n[0],i=n[1],r=n[2],s=n[3],a=t[0],c=t[1],l=t[2],d=i*l-r*c,u=r*a-o*l,h=o*c-i*a;return d=d+d,u=u+u,h=h+h,e[0]=a+s*d+i*h-r*u,e[1]=c+s*u+r*d-o*h,e[2]=l+s*h+o*u-i*d,e[3]=t[3],e}function b3o(e){return e[0]=0,e[1]=0,e[2]=0,e[3]=0,e}function S3o(e){return"vec4("+e[0]+", "+e[1]+", "+e[2]+", "+e[3]+")"}function P3o(e,t){return e[0]===t[0]&&e[1]===t[1]&&e[2]===t[2]&&e[3]===t[3]}function v3o(e,t){var n=e[0],o=e[1],i=e[2],r=e[3],s=t[0],a=t[1],c=t[2],l=t[3];return Math.abs(n-s)<=Qg.EPSILON*Math.max(1,Math.abs(n),Math.abs(s))&&Math.abs(o-a)<=Qg.EPSILON*Math.max(1,Math.abs(o),Math.abs(a))&&Math.abs(i-c)<=Qg.EPSILON*Math.max(1,Math.abs(i),Math.abs(c))&&Math.abs(r-l)<=Qg.EPSILON*Math.max(1,Math.abs(r),Math.abs(l))}var ROr=b5t.sub=_5t,QOr=b5t.mul=g5t,kOr=b5t.div=f5t,LOr=b5t.dist=y5t,FOr=b5t.sqrDist=x5t,HOr=b5t.len=C5t,OOr=b5t.sqrLen=I5t,zOr=b5t.forEach=function(){var e=A5t();return function(t,n,o,i,r,s){var a,c;if(!n)n=4;if(!o)o=0;if(i)c=Math.min(i*n+o,t.length);else c=t.length;for(a=o;a<c;a+=n)e[0]=t[a],e[1]=t[a+1],e[2]=t[a+2],e[3]=t[a+3],r(e,e,s),t[a]=e[0],t[a+1]=e[1],t[a+2]=e[2],t[a+3]=e[3];return t}}()});var iDe=ct(function(L5t){function nDe(e){return nDe=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},nDe(e)}Object.defineProperty(L5t,"__esModule",{value:!0});L5t.add=void 0;L5t.calculateW=p4o;L5t.clone=void 0;L5t.conjugate=f4o;L5t.copy=void 0;L5t.create=oDe;L5t.dot=void 0;L5t.equals=P4o;L5t.exactEquals=void 0;L5t.exp=N5t;L5t.fromEuler=y4o;L5t.fromMat3=Q5t;L5t.fromValues=void 0;L5t.getAngle=d4o;L5t.getAxisAngle=l4o;L5t.identity=c4o;L5t.invert=g4o;L5t.lerp=L5t.length=L5t.len=void 0;L5t.ln=R5t;L5t.mul=void 0;L5t.multiply=D5t;L5t.normalize=void 0;L5t.pow=A4o;L5t.random=_4o;L5t.rotateX=u4o;L5t.rotateY=h4o;L5t.rotateZ=m4o;L5t.setAxes=L5t.set=L5t.scale=L5t.rotationTo=void 0;L5t.setAxisAngle=T5t;L5t.slerp=Rpe;L5t.squaredLength=L5t.sqrLen=L5t.sqlerp=void 0;L5t.str=x4o;var u6=PZ(oS()),a4o=PZ(KTe()),d6=PZ(ZTe()),gx=PZ(tDe());function PZ(e,t){if(typeof WeakMap=="function")var n=new WeakMap,o=new WeakMap;return(PZ=function(r,s){if(!s&&r&&r.__esModule)return r;var a,c,l={__proto__:null,default:r};if(r===null||nDe(r)!="object"&&typeof r!="function")return l;if(a=s?o:n){if(a.has(r))return a.get(r);a.set(r,l)}for(var d in r)d!=="default"&&{}.hasOwnProperty.call(r,d)&&((c=(a=Object.defineProperty)&&Object.getOwnPropertyDescriptor(r,d))&&(c.get||c.set)?a(l,d,c):l[d]=r[d]);return l})(e,t)}function oDe(){var e=new u6.ARRAY_TYPE(4);if(u6.ARRAY_TYPE!=Float32Array)e[0]=0,e[1]=0,e[2]=0;return e[3]=1,e}function c4o(e){return e[0]=0,e[1]=0,e[2]=0,e[3]=1,e}function T5t(e,t,n){n=n*0.5;var o=Math.sin(n);return e[0]=o*t[0],e[1]=o*t[1],e[2]=o*t[2],e[3]=Math.cos(n),e}function l4o(e,t){var n=Math.acos(t[3])*2,o=Math.sin(n/2);if(o>u6.EPSILON)e[0]=t[0]/o,e[1]=t[1]/o,e[2]=t[2]/o;else e[0]=1,e[1]=0,e[2]=0;return n}function d4o(e,t){var n=I4o(e,t);return Math.acos(2*n*n-1)}function D5t(e,t,n){var o=t[0],i=t[1],r=t[2],s=t[3],a=n[0],c=n[1],l=n[2],d=n[3];return e[0]=o*d+s*a+i*l-r*c,e[1]=i*d+s*c+r*a-o*l,e[2]=r*d+s*l+o*c-i*a,e[3]=s*d-o*a-i*c-r*l,e}function u4o(e,t,n){n*=0.5;var o=t[0],i=t[1],r=t[2],s=t[3],a=Math.sin(n),c=Math.cos(n);return e[0]=o*c+s*a,e[1]=i*c+r*a,e[2]=r*c-i*a,e[3]=s*c-o*a,e}function h4o(e,t,n){n*=0.5;var o=t[0],i=t[1],r=t[2],s=t[3],a=Math.sin(n),c=Math.cos(n);return e[0]=o*c-r*a,e[1]=i*c+s*a,e[2]=r*c+o*a,e[3]=s*c-i*a,e}function m4o(e,t,n){n*=0.5;var o=t[0],i=t[1],r=t[2],s=t[3],a=Math.sin(n),c=Math.cos(n);return e[0]=o*c+i*a,e[1]=i*c-o*a,e[2]=r*c+s*a,e[3]=s*c-r*a,e}function p4o(e,t){var n=t[0],o=t[1],i=t[2];return e[0]=n,e[1]=o,e[2]=i,e[3]=Math.sqrt(Math.abs(1-n*n-o*o-i*i)),e}function N5t(e,t){var n=t[0],o=t[1],i=t[2],r=t[3],s=Math.sqrt(n*n+o*o+i*i),a=Math.exp(r),c=s>0?a*Math.sin(s)/s:0;return e[0]=n*c,e[1]=o*c,e[2]=i*c,e[3]=a*Math.cos(s),e}function R5t(e,t){var n=t[0],o=t[1],i=t[2],r=t[3],s=Math.sqrt(n*n+o*o+i*i),a=s>0?Math.atan2(s,r)/s:0;return e[0]=n*a,e[1]=o*a,e[2]=i*a,e[3]=0.5*Math.log(n*n+o*o+i*i+r*r),e}function A4o(e,t,n){return R5t(e,t),C4o(e,e,n),N5t(e,e),e}function Rpe(e,t,n,o){var i=t[0],r=t[1],s=t[2],a=t[3],c=n[0],l=n[1],d=n[2],u=n[3],h,A,m,p,g;if(A=i*c+r*l+s*d+a*u,A<0)A=-A,c=-c,l=-l,d=-d,u=-u;if(1-A>u6.EPSILON)h=Math.acos(A),m=Math.sin(h),p=Math.sin((1-o)*h)/m,g=Math.sin(o*h)/m;else p=1-o,g=o;return e[0]=p*i+g*c,e[1]=p*r+g*l,e[2]=p*s+g*d,e[3]=p*a+g*u,e}function _4o(e){var t=u6.RANDOM(),n=u6.RANDOM(),o=u6.RANDOM(),i=Math.sqrt(1-t),r=Math.sqrt(t);return e[0]=i*Math.sin(2*Math.PI*n),e[1]=i*Math.cos(2*Math.PI*n),e[2]=r*Math.sin(2*Math.PI*o),e[3]=r*Math.cos(2*Math.PI*o),e}function g4o(e,t){var n=t[0],o=t[1],i=t[2],r=t[3],s=n*n+o*o+i*i+r*r,a=s?1/s:0;return e[0]=-n*a,e[1]=-o*a,e[2]=-i*a,e[3]=r*a,e}function f4o(e,t){return e[0]=-t[0],e[1]=-t[1],e[2]=-t[2],e[3]=t[3],e}function Q5t(e,t){var n=t[0]+t[4]+t[8],o;if(n>0)o=Math.sqrt(n+1),e[3]=0.5*o,o=0.5/o,e[0]=(t[5]-t[7])*o,e[1]=(t[6]-t[2])*o,e[2]=(t[1]-t[3])*o;else{var i=0;if(t[4]>t[0])i=1;if(t[8]>t[i*3+i])i=2;var r=(i+1)%3,s=(i+2)%3;o=Math.sqrt(t[i*3+i]-t[r*3+r]-t[s*3+s]+1),e[i]=0.5*o,o=0.5/o,e[3]=(t[r*3+s]-t[s*3+r])*o,e[r]=(t[r*3+i]+t[i*3+r])*o,e[s]=(t[s*3+i]+t[i*3+s])*o}return e}function y4o(e,t,n,o){var i=arguments.length>4&&arguments[4]!==void 0?arguments[4]:u6.ANGLE_ORDER,r=Math.PI/360;t*=r,o*=r,n*=r;var s=Math.sin(t),a=Math.cos(t),c=Math.sin(n),l=Math.cos(n),d=Math.sin(o),u=Math.cos(o);switch(i){case"xyz":e[0]=s*l*u+a*c*d,e[1]=a*c*u-s*l*d,e[2]=a*l*d+s*c*u,e[3]=a*l*u-s*c*d;break;case"xzy":e[0]=s*l*u-a*c*d,e[1]=a*c*u-s*l*d,e[2]=a*l*d+s*c*u,e[3]=a*l*u+s*c*d;break;case"yxz":e[0]=s*l*u+a*c*d,e[1]=a*c*u-s*l*d,e[2]=a*l*d-s*c*u,e[3]=a*l*u+s*c*d;break;case"yzx":e[0]=s*l*u+a*c*d,e[1]=a*c*u+s*l*d,e[2]=a*l*d-s*c*u,e[3]=a*l*u-s*c*d;break;case"zxy":e[0]=s*l*u-a*c*d,e[1]=a*c*u+s*l*d,e[2]=a*l*d+s*c*u,e[3]=a*l*u-s*c*d;break;case"zyx":e[0]=s*l*u-a*c*d,e[1]=a*c*u+s*l*d,e[2]=a*l*d-s*c*u,e[3]=a*l*u+s*c*d;break;default:throw Error("Unknown angle order "+i)}return e}function x4o(e){return"quat("+e[0]+", "+e[1]+", "+e[2]+", "+e[3]+")"}var YOr=L5t.clone=gx.clone,VOr=L5t.fromValues=gx.fromValues,UOr=L5t.copy=gx.copy,WOr=L5t.set=gx.set,XOr=L5t.add=gx.add,KOr=L5t.mul=D5t,C4o=L5t.scale=gx.scale,I4o=L5t.dot=gx.dot,jOr=L5t.lerp=gx.lerp,b4o=L5t.length=gx.length,qOr=L5t.len=b4o,S4o=L5t.squaredLength=gx.squaredLength,JOr=L5t.sqrLen=S4o,k5t=L5t.normalize=gx.normalize,$Or=L5t.exactEquals=gx.exactEquals;function P4o(e,t){return Math.abs(gx.dot(e,t))>=1-u6.EPSILON}var ZOr=L5t.rotationTo=function(){var e=d6.create(),t=d6.fromValues(1,0,0),n=d6.fromValues(0,1,0);return function(o,i,r){var s=d6.dot(i,r);if(s<-0.999999){if(d6.cross(e,t,i),d6.len(e)<0.000001)d6.cross(e,n,i);return d6.normalize(e,e),T5t(o,e,Math.PI),o}else if(s>0.999999)return o[0]=0,o[1]=0,o[2]=0,o[3]=1,o;else return d6.cross(e,i,r),o[0]=e[0],o[1]=e[1],o[2]=e[2],o[3]=1+s,k5t(o,o)}}(),ezr=L5t.sqlerp=function(){var e=oDe(),t=oDe();return function(n,o,i,r,s,a){return Rpe(e,o,s,a),Rpe(t,i,r,a),Rpe(n,e,t,2*a*(1-a)),n}}(),tzr=L5t.setAxes=function(){var e=a4o.create();return function(t,n,o,i){return e[0]=o[0],e[3]=o[1],e[6]=o[2],e[1]=i[0],e[4]=i[1],e[7]=i[2],e[2]=-n[0],e[5]=-n[1],e[8]=-n[2],k5t(t,Q5t(t,e))}}()});var rSt=ct(function(Z5t){function rDe(e){return rDe=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},rDe(e)}Object.defineProperty(Z5t,"__esModule",{value:!0});Z5t.add=yMo;Z5t.clone=tMo;Z5t.conjugate=SMo;Z5t.copy=J5t;Z5t.create=eMo;Z5t.dot=void 0;Z5t.equals=BMo;Z5t.exactEquals=MMo;Z5t.fromMat4=sMo;Z5t.fromRotation=rMo;Z5t.fromRotationTranslation=q5t;Z5t.fromRotationTranslationValues=oMo;Z5t.fromTranslation=iMo;Z5t.fromValues=nMo;Z5t.getDual=lMo;Z5t.getReal=void 0;Z5t.getTranslation=uMo;Z5t.identity=aMo;Z5t.invert=bMo;Z5t.length=Z5t.len=void 0;Z5t.lerp=IMo;Z5t.mul=void 0;Z5t.multiply=$5t;Z5t.normalize=vMo;Z5t.rotateAroundAxis=fMo;Z5t.rotateByQuatAppend=_Mo;Z5t.rotateByQuatPrepend=gMo;Z5t.rotateX=mMo;Z5t.rotateY=pMo;Z5t.rotateZ=AMo;Z5t.scale=xMo;Z5t.set=cMo;Z5t.setDual=dMo;Z5t.squaredLength=Z5t.sqrLen=Z5t.setReal=void 0;Z5t.str=EMo;Z5t.translate=hMo;var o1=Qpe(oS()),h6=Qpe(iDe()),j5t=Qpe(qTe());function Qpe(e,t){if(typeof WeakMap=="function")var n=new WeakMap,o=new WeakMap;return(Qpe=function(r,s){if(!s&&r&&r.__esModule)return r;var a,c,l={__proto__:null,default:r};if(r===null||rDe(r)!="object"&&typeof r!="function")return l;if(a=s?o:n){if(a.has(r))return a.get(r);a.set(r,l)}for(var d in r)d!=="default"&&{}.hasOwnProperty.call(r,d)&&((c=(a=Object.defineProperty)&&Object.getOwnPropertyDescriptor(r,d))&&(c.get||c.set)?a(l,d,c):l[d]=r[d]);return l})(e,t)}function eMo(){var e=new o1.ARRAY_TYPE(8);if(o1.ARRAY_TYPE!=Float32Array)e[0]=0,e[1]=0,e[2]=0,e[4]=0,e[5]=0,e[6]=0,e[7]=0;return e[3]=1,e}function tMo(e){var t=new o1.ARRAY_TYPE(8);return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t[4]=e[4],t[5]=e[5],t[6]=e[6],t[7]=e[7],t}function nMo(e,t,n,o,i,r,s,a){var c=new o1.ARRAY_TYPE(8);return c[0]=e,c[1]=t,c[2]=n,c[3]=o,c[4]=i,c[5]=r,c[6]=s,c[7]=a,c}function oMo(e,t,n,o,i,r,s){var a=new o1.ARRAY_TYPE(8);a[0]=e,a[1]=t,a[2]=n,a[3]=o;var c=i*0.5,l=r*0.5,d=s*0.5;return a[4]=c*o+l*n-d*t,a[5]=l*o+d*e-c*n,a[6]=d*o+c*t-l*e,a[7]=-c*e-l*t-d*n,a}function q5t(e,t,n){var o=n[0]*0.5,i=n[1]*0.5,r=n[2]*0.5,s=t[0],a=t[1],c=t[2],l=t[3];return e[0]=s,e[1]=a,e[2]=c,e[3]=l,e[4]=o*l+i*c-r*a,e[5]=i*l+r*s-o*c,e[6]=r*l+o*a-i*s,e[7]=-o*s-i*a-r*c,e}function iMo(e,t){return e[0]=0,e[1]=0,e[2]=0,e[3]=1,e[4]=t[0]*0.5,e[5]=t[1]*0.5,e[6]=t[2]*0.5,e[7]=0,e}function rMo(e,t){return e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e[4]=0,e[5]=0,e[6]=0,e[7]=0,e}function sMo(e,t){var n=h6.create();j5t.getRotation(n,t);var o=new o1.ARRAY_TYPE(3);return j5t.getTranslation(o,t),q5t(e,n,o),e}function J5t(e,t){return e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e[4]=t[4],e[5]=t[5],e[6]=t[6],e[7]=t[7],e}function aMo(e){return e[0]=0,e[1]=0,e[2]=0,e[3]=1,e[4]=0,e[5]=0,e[6]=0,e[7]=0,e}function cMo(e,t,n,o,i,r,s,a,c){return e[0]=t,e[1]=n,e[2]=o,e[3]=i,e[4]=r,e[5]=s,e[6]=a,e[7]=c,e}var ozr=Z5t.getReal=h6.copy;function lMo(e,t){return e[0]=t[4],e[1]=t[5],e[2]=t[6],e[3]=t[7],e}var izr=Z5t.setReal=h6.copy;function dMo(e,t){return e[4]=t[0],e[5]=t[1],e[6]=t[2],e[7]=t[3],e}function uMo(e,t){var n=t[4],o=t[5],i=t[6],r=t[7],s=-t[0],a=-t[1],c=-t[2],l=t[3];return e[0]=(n*l+r*s+o*c-i*a)*2,e[1]=(o*l+r*a+i*s-n*c)*2,e[2]=(i*l+r*c+n*a-o*s)*2,e}function hMo(e,t,n){var o=t[0],i=t[1],r=t[2],s=t[3],a=n[0]*0.5,c=n[1]*0.5,l=n[2]*0.5,d=t[4],u=t[5],h=t[6],A=t[7];return e[0]=o,e[1]=i,e[2]=r,e[3]=s,e[4]=s*a+i*l-r*c+d,e[5]=s*c+r*a-o*l+u,e[6]=s*l+o*c-i*a+h,e[7]=-o*a-i*c-r*l+A,e}function mMo(e,t,n){var o=-t[0],i=-t[1],r=-t[2],s=t[3],a=t[4],c=t[5],l=t[6],d=t[7],u=a*s+d*o+c*r-l*i,h=c*s+d*i+l*o-a*r,A=l*s+d*r+a*i-c*o,m=d*s-a*o-c*i-l*r;return h6.rotateX(e,t,n),o=e[0],i=e[1],r=e[2],s=e[3],e[4]=u*s+m*o+h*r-A*i,e[5]=h*s+m*i+A*o-u*r,e[6]=A*s+m*r+u*i-h*o,e[7]=m*s-u*o-h*i-A*r,e}function pMo(e,t,n){var o=-t[0],i=-t[1],r=-t[2],s=t[3],a=t[4],c=t[5],l=t[6],d=t[7],u=a*s+d*o+c*r-l*i,h=c*s+d*i+l*o-a*r,A=l*s+d*r+a*i-c*o,m=d*s-a*o-c*i-l*r;return h6.rotateY(e,t,n),o=e[0],i=e[1],r=e[2],s=e[3],e[4]=u*s+m*o+h*r-A*i,e[5]=h*s+m*i+A*o-u*r,e[6]=A*s+m*r+u*i-h*o,e[7]=m*s-u*o-h*i-A*r,e}function AMo(e,t,n){var o=-t[0],i=-t[1],r=-t[2],s=t[3],a=t[4],c=t[5],l=t[6],d=t[7],u=a*s+d*o+c*r-l*i,h=c*s+d*i+l*o-a*r,A=l*s+d*r+a*i-c*o,m=d*s-a*o-c*i-l*r;return h6.rotateZ(e,t,n),o=e[0],i=e[1],r=e[2],s=e[3],e[4]=u*s+m*o+h*r-A*i,e[5]=h*s+m*i+A*o-u*r,e[6]=A*s+m*r+u*i-h*o,e[7]=m*s-u*o-h*i-A*r,e}function _Mo(e,t,n){var o=n[0],i=n[1],r=n[2],s=n[3],a=t[0],c=t[1],l=t[2],d=t[3];return e[0]=a*s+d*o+c*r-l*i,e[1]=c*s+d*i+l*o-a*r,e[2]=l*s+d*r+a*i-c*o,e[3]=d*s-a*o-c*i-l*r,a=t[4],c=t[5],l=t[6],d=t[7],e[4]=a*s+d*o+c*r-l*i,e[5]=c*s+d*i+l*o-a*r,e[6]=l*s+d*r+a*i-c*o,e[7]=d*s-a*o-c*i-l*r,e}function gMo(e,t,n){var o=t[0],i=t[1],r=t[2],s=t[3],a=n[0],c=n[1],l=n[2],d=n[3];return e[0]=o*d+s*a+i*l-r*c,e[1]=i*d+s*c+r*a-o*l,e[2]=r*d+s*l+o*c-i*a,e[3]=s*d-o*a-i*c-r*l,a=n[4],c=n[5],l=n[6],d=n[7],e[4]=o*d+s*a+i*l-r*c,e[5]=i*d+s*c+r*a-o*l,e[6]=r*d+s*l+o*c-i*a,e[7]=s*d-o*a-i*c-r*l,e}function fMo(e,t,n,o){if(Math.abs(o)<o1.EPSILON)return J5t(e,t);var i=Math.sqrt(n[0]*n[0]+n[1]*n[1]+n[2]*n[2]);o=o*0.5;var r=Math.sin(o),s=r*n[0]/i,a=r*n[1]/i,c=r*n[2]/i,l=Math.cos(o),d=t[0],u=t[1],h=t[2],A=t[3];e[0]=d*l+A*s+u*c-h*a,e[1]=u*l+A*a+h*s-d*c,e[2]=h*l+A*c+d*a-u*s,e[3]=A*l-d*s-u*a-h*c;var m=t[4],p=t[5],g=t[6],_=t[7];return e[4]=m*l+_*s+p*c-g*a,e[5]=p*l+_*a+g*s-m*c,e[6]=g*l+_*c+m*a-p*s,e[7]=_*l-m*s-p*a-g*c,e}function yMo(e,t,n){return e[0]=t[0]+n[0],e[1]=t[1]+n[1],e[2]=t[2]+n[2],e[3]=t[3]+n[3],e[4]=t[4]+n[4],e[5]=t[5]+n[5],e[6]=t[6]+n[6],e[7]=t[7]+n[7],e}function $5t(e,t,n){var o=t[0],i=t[1],r=t[2],s=t[3],a=n[4],c=n[5],l=n[6],d=n[7],u=t[4],h=t[5],A=t[6],m=t[7],p=n[0],g=n[1],_=n[2],f=n[3];return e[0]=o*f+s*p+i*_-r*g,e[1]=i*f+s*g+r*p-o*_,e[2]=r*f+s*_+o*g-i*p,e[3]=s*f-o*p-i*g-r*_,e[4]=o*d+s*a+i*l-r*c+u*f+m*p+h*_-A*g,e[5]=i*d+s*c+r*a-o*l+h*f+m*g+A*p-u*_,e[6]=r*d+s*l+o*c-i*a+A*f+m*_+u*g-h*p,e[7]=s*d-o*a-i*c-r*l+m*f-u*p-h*g-A*_,e}var rzr=Z5t.mul=$5t;function xMo(e,t,n){return e[0]=t[0]*n,e[1]=t[1]*n,e[2]=t[2]*n,e[3]=t[3]*n,e[4]=t[4]*n,e[5]=t[5]*n,e[6]=t[6]*n,e[7]=t[7]*n,e}var CMo=Z5t.dot=h6.dot;function IMo(e,t,n,o){var i=1-o;if(CMo(t,n)<0)o=-o;return e[0]=t[0]*i+n[0]*o,e[1]=t[1]*i+n[1]*o,e[2]=t[2]*i+n[2]*o,e[3]=t[3]*i+n[3]*o,e[4]=t[4]*i+n[4]*o,e[5]=t[5]*i+n[5]*o,e[6]=t[6]*i+n[6]*o,e[7]=t[7]*i+n[7]*o,e}function bMo(e,t){var n=sDe(t);return e[0]=-t[0]/n,e[1]=-t[1]/n,e[2]=-t[2]/n,e[3]=t[3]/n,e[4]=-t[4]/n,e[5]=-t[5]/n,e[6]=-t[6]/n,e[7]=t[7]/n,e}function SMo(e,t){return e[0]=-t[0],e[1]=-t[1],e[2]=-t[2],e[3]=t[3],e[4]=-t[4],e[5]=-t[5],e[6]=-t[6],e[7]=t[7],e}var PMo=Z5t.length=h6.length,szr=Z5t.len=PMo,sDe=Z5t.squaredLength=h6.squaredLength,azr=Z5t.sqrLen=sDe;function vMo(e,t){var n=sDe(t);if(n>0){n=Math.sqrt(n);var o=t[0]/n,i=t[1]/n,r=t[2]/n,s=t[3]/n,a=t[4],c=t[5],l=t[6],d=t[7],u=o*a+i*c+r*l+s*d;e[0]=o,e[1]=i,e[2]=r,e[3]=s,e[4]=(a-o*u)/n,e[5]=(c-i*u)/n,e[6]=(l-r*u)/n,e[7]=(d-s*u)/n}return e}function EMo(e){return"quat2("+e[0]+", "+e[1]+", "+e[2]+", "+e[3]+", "+e[4]+", "+e[5]+", "+e[6]+", "+e[7]+")"}function MMo(e,t){return e[0]===t[0]&&e[1]===t[1]&&e[2]===t[2]&&e[3]===t[3]&&e[4]===t[4]&&e[5]===t[5]&&e[6]===t[6]&&e[7]===t[7]}function BMo(e,t){var n=e[0],o=e[1],i=e[2],r=e[3],s=e[4],a=e[5],c=e[6],l=e[7],d=t[0],u=t[1],h=t[2],A=t[3],m=t[4],p=t[5],g=t[6],_=t[7];return Math.abs(n-d)<=o1.EPSILON*Math.max(1,Math.abs(n),Math.abs(d))&&Math.abs(o-u)<=o1.EPSILON*Math.max(1,Math.abs(o),Math.abs(u))&&Math.abs(i-h)<=o1.EPSILON*Math.max(1,Math.abs(i),Math.abs(h))&&Math.abs(r-A)<=o1.EPSILON*Math.max(1,Math.abs(r),Math.abs(A))&&Math.abs(s-m)<=o1.EPSILON*Math.max(1,Math.abs(s),Math.abs(m))&&Math.abs(a-p)<=o1.EPSILON*Math.max(1,Math.abs(a),Math.abs(p))&&Math.abs(c-g)<=o1.EPSILON*Math.max(1,Math.abs(c),Math.abs(g))&&Math.abs(l-_)<=o1.EPSILON*Math.max(1,Math.abs(l),Math.abs(_))}});var bSt=ct(function(ASt){function aDe(e){return aDe=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},aDe(e)}Object.defineProperty(ASt,"__esModule",{value:!0});ASt.add=p6o;ASt.angle=R6o;ASt.ceil=A6o;ASt.clone=d6o;ASt.copy=h6o;ASt.create=aSt;ASt.cross=v6o;ASt.dist=void 0;ASt.distance=uSt;ASt.div=void 0;ASt.divide=dSt;ASt.dot=P6o;ASt.equals=H6o;ASt.exactEquals=F6o;ASt.floor=_6o;ASt.forEach=void 0;ASt.fromValues=u6o;ASt.inverse=b6o;ASt.len=void 0;ASt.length=mSt;ASt.lerp=E6o;ASt.max=f6o;ASt.min=g6o;ASt.mul=void 0;ASt.multiply=lSt;ASt.negate=I6o;ASt.normalize=S6o;ASt.random=M6o;ASt.rotate=N6o;ASt.round=y6o;ASt.scale=x6o;ASt.scaleAndAdd=C6o;ASt.set=m6o;ASt.signedAngle=Q6o;ASt.sqrLen=ASt.sqrDist=void 0;ASt.squaredDistance=hSt;ASt.squaredLength=pSt;ASt.str=L6o;ASt.sub=void 0;ASt.subtract=cSt;ASt.transformMat2=B6o;ASt.transformMat2d=w6o;ASt.transformMat3=T6o;ASt.transformMat4=D6o;ASt.zero=k6o;var m6=sSt(oS());function sSt(e,t){if(typeof WeakMap=="function")var n=new WeakMap,o=new WeakMap;return(sSt=function(r,s){if(!s&&r&&r.__esModule)return r;var a,c,l={__proto__:null,default:r};if(r===null||aDe(r)!="object"&&typeof r!="function")return l;if(a=s?o:n){if(a.has(r))return a.get(r);a.set(r,l)}for(var d in r)d!=="default"&&{}.hasOwnProperty.call(r,d)&&((c=(a=Object.defineProperty)&&Object.getOwnPropertyDescriptor(r,d))&&(c.get||c.set)?a(l,d,c):l[d]=r[d]);return l})(e,t)}function aSt(){var e=new m6.ARRAY_TYPE(2);if(m6.ARRAY_TYPE!=Float32Array)e[0]=0,e[1]=0;return e}function d6o(e){var t=new m6.ARRAY_TYPE(2);return t[0]=e[0],t[1]=e[1],t}function u6o(e,t){var n=new m6.ARRAY_TYPE(2);return n[0]=e,n[1]=t,n}function h6o(e,t){return e[0]=t[0],e[1]=t[1],e}function m6o(e,t,n){return e[0]=t,e[1]=n,e}function p6o(e,t,n){return e[0]=t[0]+n[0],e[1]=t[1]+n[1],e}function cSt(e,t,n){return e[0]=t[0]-n[0],e[1]=t[1]-n[1],e}function lSt(e,t,n){return e[0]=t[0]*n[0],e[1]=t[1]*n[1],e}function dSt(e,t,n){return e[0]=t[0]/n[0],e[1]=t[1]/n[1],e}function A6o(e,t){return e[0]=Math.ceil(t[0]),e[1]=Math.ceil(t[1]),e}function _6o(e,t){return e[0]=Math.floor(t[0]),e[1]=Math.floor(t[1]),e}function g6o(e,t,n){return e[0]=Math.min(t[0],n[0]),e[1]=Math.min(t[1],n[1]),e}function f6o(e,t,n){return e[0]=Math.max(t[0],n[0]),e[1]=Math.max(t[1],n[1]),e}function y6o(e,t){return e[0]=m6.round(t[0]),e[1]=m6.round(t[1]),e}function x6o(e,t,n){return e[0]=t[0]*n,e[1]=t[1]*n,e}function C6o(e,t,n,o){return e[0]=t[0]+n[0]*o,e[1]=t[1]+n[1]*o,e}function uSt(e,t){var n=t[0]-e[0],o=t[1]-e[1];return Math.sqrt(n*n+o*o)}function hSt(e,t){var n=t[0]-e[0],o=t[1]-e[1];return n*n+o*o}function mSt(e){var t=e[0],n=e[1];return Math.sqrt(t*t+n*n)}function pSt(e){var t=e[0],n=e[1];return t*t+n*n}function I6o(e,t){return e[0]=-t[0],e[1]=-t[1],e}function b6o(e,t){return e[0]=1/t[0],e[1]=1/t[1],e}function S6o(e,t){var n=t[0],o=t[1],i=n*n+o*o;if(i>0)i=1/Math.sqrt(i);return e[0]=t[0]*i,e[1]=t[1]*i,e}function P6o(e,t){return e[0]*t[0]+e[1]*t[1]}function v6o(e,t,n){var o=t[0]*n[1]-t[1]*n[0];return e[0]=e[1]=0,e[2]=o,e}function E6o(e,t,n,o){var i=t[0],r=t[1];return e[0]=i+o*(n[0]-i),e[1]=r+o*(n[1]-r),e}function M6o(e,t){t=t===void 0?1:t;var n=m6.RANDOM()*2*Math.PI;return e[0]=Math.cos(n)*t,e[1]=Math.sin(n)*t,e}function B6o(e,t,n){var o=t[0],i=t[1];return e[0]=n[0]*o+n[2]*i,e[1]=n[1]*o+n[3]*i,e}function w6o(e,t,n){var o=t[0],i=t[1];return e[0]=n[0]*o+n[2]*i+n[4],e[1]=n[1]*o+n[3]*i+n[5],e}function T6o(e,t,n){var o=t[0],i=t[1];return e[0]=n[0]*o+n[3]*i+n[6],e[1]=n[1]*o+n[4]*i+n[7],e}function D6o(e,t,n){var o=t[0],i=t[1];return e[0]=n[0]*o+n[4]*i+n[12],e[1]=n[1]*o+n[5]*i+n[13],e}function N6o(e,t,n,o){var i=t[0]-n[0],r=t[1]-n[1],s=Math.sin(o),a=Math.cos(o);return e[0]=i*a-r*s+n[0],e[1]=i*s+r*a+n[1],e}function R6o(e,t){var n=e[0],o=e[1],i=t[0],r=t[1];return Math.abs(Math.atan2(o*i-n*r,n*i+o*r))}function Q6o(e,t){var n=e[0],o=e[1],i=t[0],r=t[1];return Math.atan2(n*r-o*i,n*i+o*r)}function k6o(e){return e[0]=0,e[1]=0,e}function L6o(e){return"vec2("+e[0]+", "+e[1]+")"}function F6o(e,t){return e[0]===t[0]&&e[1]===t[1]}function H6o(e,t){var n=e[0],o=e[1],i=t[0],r=t[1];return Math.abs(n-i)<=m6.EPSILON*Math.max(1,Math.abs(n),Math.abs(i))&&Math.abs(o-r)<=m6.EPSILON*Math.max(1,Math.abs(o),Math.abs(r))}var lzr=ASt.len=mSt,dzr=ASt.sub=cSt,uzr=ASt.mul=lSt,hzr=ASt.div=dSt,mzr=ASt.dist=uSt,pzr=ASt.sqrDist=hSt,Azr=ASt.sqrLen=pSt,_zr=ASt.forEach=function(){var e=aSt();return function(t,n,o,i,r,s){var a,c;if(!n)n=2;if(!o)o=0;if(i)c=Math.min(i*n+o,t.length);else c=t.length;for(a=o;a<c;a+=n)e[0]=t[a],e[1]=t[a+1],r(e,e,s),t[a]=e[0],t[a+1]=e[1];return t}}()});var cE=ct(function(SSt){function cDe(e){return cDe=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},cDe(e)}Object.defineProperty(SSt,"__esModule",{value:!0});SSt.vec4=SSt.vec3=SSt.vec2=SSt.quat2=SSt.quat=SSt.mat4=SSt.mat3=SSt.mat2d=SSt.mat2=SSt.glMatrix=void 0;var PBo=iS(oS());SSt.glMatrix=PBo;var vBo=iS(Sbt());SSt.mat2=vBo;var EBo=iS(Tbt());SSt.mat2d=EBo;var MBo=iS(KTe());SSt.mat3=MBo;var BBo=iS(qTe());SSt.mat4=BBo;var wBo=iS(iDe());SSt.quat=wBo;var TBo=iS(rSt());SSt.quat2=TBo;var DBo=iS(bSt());SSt.vec2=DBo;var NBo=iS(ZTe());SSt.vec3=NBo;var RBo=iS(tDe());SSt.vec4=RBo;function iS(e,t){if(typeof WeakMap=="function")var n=new WeakMap,o=new WeakMap;return(iS=function(r,s){if(!s&&r&&r.__esModule)return r;var a,c,l={__proto__:null,default:r};if(r===null||cDe(r)!="object"&&typeof r!="function")return l;if(a=s?o:n){if(a.has(r))return a.get(r);a.set(r,l)}for(var d in r)d!=="default"&&{}.hasOwnProperty.call(r,d)&&((c=(a=Object.defineProperty)&&Object.getOwnPropertyDescriptor(r,d))&&(c.get||c.set)?a(l,d,c):l[d]=r[d]);return l})(e,t)}});var uDe=ct(function(yzr,TSt){var{defineProperty:dDe,getOwnPropertyDescriptor:VBo,getOwnPropertyNames:UBo}=Object,WBo=Object.prototype.hasOwnProperty,XBo=(e,t)=>{for(var n in t)dDe(e,n,{get:t[n],enumerable:!0})},KBo=(e,t,n,o)=>{if(t&&typeof t==="object"||typeof t==="function"){for(let i of UBo(t))if(!WBo.call(e,i)&&i!==n)dDe(e,i,{get:()=>t[i],enumerable:!(o=VBo(t,i))||o.enumerable})}return e},jBo=(e)=>KBo(dDe({},"__esModule",{value:!0}),e),vSt={};XBo(vSt,{assertTransformMatrix:()=>MY,executeJscadOperations:()=>BSt,jscadPlanner:()=>qBo,resolveReferencePlanes:()=>MSt,toTransformMatrix:()=>tk});TSt.exports=jBo(vSt);var ESt="Transform matrix must be a column-major array of exactly 16 finite numbers";function MY(e){if(!Array.isArray(e)||e.length!==16||!Array.from(e).every(Number.isFinite))throw Error(ESt)}function tk(e){if(e==null||e.length!==16)throw Error(ESt);let t=Array.from(e);return MY(t),t}var qBo={booleans:{intersect:(...e)=>({type:"intersect",shapes:e}),subtract:(...e)=>({type:"subtract",shapes:e}),union:(...e)=>({type:"union",shapes:e})},hulls:{hull:(...e)=>({type:"hull",shapes:e.flat()}),hullChain:(...e)=>({type:"hullChain",shapes:e.flat()})},colors:{colorize:(e,t)=>({type:"colorize",color:e,shape:t})},primitives:{rectangle:(e)=>({...e,type:"rectangle"}),cube:(e)=>({type:"cube",...e}),sphere:(e)=>({type:"sphere",...e}),cylinder:(e)=>({type:"cylinder",...e}),polygon:(e)=>({type:"polygon",...e}),cuboid:(e)=>({type:"cuboid",...e}),roundedCuboid:(e)=>({type:"roundedCuboid",...e})},transforms:{transform:(e,t)=>(MY(e),{type:"transform",matrix:e,shape:t}),rotate:(e,t)=>({type:"rotate",angles:e,shape:t}),rotateX:(e,t)=>({type:"rotateX",angle:e,shape:t}),rotateY:(e,t)=>({type:"rotateY",angle:e,shape:t}),rotateZ:(e,t)=>({type:"rotateZ",angle:e,shape:t}),scale:(e,t)=>({type:"scale",factors:e,shape:t}),translate:(e,t)=>({type:"translate",vector:e,shape:t})},extrusions:{extrudeLinear:(e,t)=>({type:"extrudeLinear",options:e,shape:t}),extrudeRotate:(e,t)=>({type:"extrudeRotate",options:e,shape:t})},maths:{vec2:{create:(e,t)=>[e,t],fromValues:(e,t)=>[e,t]},vec3:{create:(e,t,n)=>[e,t,n],fromValues:(e,t,n)=>[e,t,n]}},geometries:{geom2:{create:(e)=>({type:"createGeom2",points:e}),fromPoints:(e)=>({type:"fromPointsGeom2",points:e})},geom3:{create:(e)=>({type:"createGeom3",polygons:e})},path2:{create:(e)=>({type:"createPath2",points:e})}},measurements:{measureBoundingBox:(e)=>({type:"measureBoundingBox",shape:e}),measureArea:(e)=>({type:"measureArea",shape:e}),measureVolume:(e)=>({type:"measureVolume",shape:e})},utils:{degToRad:(e)=>e*Math.PI/180,radToDeg:(e)=>e*180/Math.PI}},kg=cE(),lDe=()=>tk(kg.mat4.create());function JBo(e){let t=lDe();switch(e.type){case"transform":return MY(e.matrix),[...e.matrix];case"translate":return tk(kg.mat4.fromTranslation(t,e.vector));case"scale":return tk(kg.mat4.fromScaling(t,e.factors));case"rotate":return kg.mat4.rotateZ(t,t,e.angles[2]),kg.mat4.rotateY(t,t,e.angles[1]),kg.mat4.rotateX(t,t,e.angles[0]),t;case"rotateX":return tk(kg.mat4.fromXRotation(t,e.angle));case"rotateY":return tk(kg.mat4.fromYRotation(t,e.angle));case"rotateZ":return tk(kg.mat4.fromZRotation(t,e.angle));default:throw Error(`Cannot use ${e.type} as a reference transform`)}}function $Bo(e,t){let n=e.name;if(!n?.trim())throw Error("Reference rectangles require a nonblank name");let o;if(e.type==="rectangle"){if(e.size.length!==2||!e.size.every((l)=>Number.isFinite(l)&&l>0))throw Error(`Reference rectangle "${n}" requires two positive finite dimensions`);o=e.center??[0,0]}else{let l=e.points;if(e.paths||l.length!==4||!l.every((A)=>A.length===2&&A.every((m)=>typeof m==="number"&&Number.isFinite(m))))throw Error(`Reference polygon "${n}" must be an axis-aligned rectangle`);let d=l,u=[...new Set(d.map((A)=>A[0]))],h=[...new Set(d.map((A)=>A[1]))];if(u.length!==2||h.length!==2||new Set(d.map((A)=>JSON.stringify(A))).size!==4)throw Error(`Reference polygon "${n}" must be an axis-aligned rectangle`);o=[(u[0]+u[1])/2,(h[0]+h[1])/2]}if(o.length!==2||!o.every(Number.isFinite))throw Error(`Reference rectangle "${n}" has an invalid center`);let i=lDe();for(let l of t)kg.mat4.multiply(i,i,JBo(l));if(MY(i),i[3]!==0||i[7]!==0||i[11]!==0||i[15]!==1)throw Error(`Reference rectangle "${n}" requires affine transforms`);let r=kg.mat4.invert(lDe(),i);if(!r)throw Error(`Reference rectangle "${n}" has a singular transform`);let s=[0,0,0];kg.vec3.transformMat4(s,[o[0],o[1],0],i);let a=[r[2],r[6],r[10]],c=[i[0],i[1],i[2]];if(![...s,...a,...c].every(Number.isFinite)||!kg.vec3.length(a)||!kg.vec3.length(c))throw Error(`Reference rectangle "${n}" has an invalid frame`);return kg.vec3.normalize(a,a),kg.vec3.normalize(c,c),{name:n,origin:s,normal:a,xAxis:c}}function MSt(e){let t=[],n=new Set;function o(s,a,c=!1){if(s.reference){if(s.type!=="rectangle"&&s.type!=="polygon")throw Error("Only rectangles can be reference geometry");if(c)throw Error("Reference rectangles must be outside extrusion and measurement inputs");let l=$Bo(s,a);if(n.has(l.name))throw Error(`Duplicate reference plane "${l.name}"`);n.add(l.name),t.push(l);return}switch(s.type){case"translate":case"rotate":case"rotateX":case"rotateY":case"rotateZ":case"scale":case"transform":{let l=o(s.shape,[...a,s],c);return l?{...s,shape:l}:void 0}case"colorize":{let l=o(s.shape,a,c);return l?{...s,shape:l}:void 0}case"extrudeLinear":case"extrudeRotate":case"measureArea":case"measureVolume":case"measureBoundingBox":{let l=o(s.shape,a,!0);return l?{...s,shape:l}:void 0}case"union":case"subtract":case"intersect":case"hull":case"hullChain":{let l=s.shapes.map((u)=>o(u,a,c));if(s.type==="subtract"&&s.shapes.length&&!l[0])throw Error("A subtraction base cannot be reference geometry");let d=l.filter((u)=>u!==void 0);if(!d.length)return;if(d.length===1)return d[0];return{...s,shapes:d}}default:return{...s}}}let i=(Array.isArray(e)?e:[e]).map((s)=>o(s,[])).filter((s)=>s!==void 0);return{geometry:i.length>1?{type:"union",shapes:i}:i[0],referencePlanes:t}}var BSt=(e,t)=>{if(Array.isArray(t)&&t.length===1)return BSt(e,t[0]);if(Array.isArray(t))throw Error("executeJscadOperations currently doesn't support Array<JscadOperation>, try adding a root union or or executing each element individually");let{geometry:n}=MSt(t);if(!n)throw Error("JSCAD plan contains only reference geometry");return wSt(e,n)},wSt=(e,t)=>{let n=(r)=>wSt(e,r),{type:o,...i}=t;switch(o){case"rectangle":if(!e.primitives.rectangle)throw Error("JSCAD adapter does not support primitives.rectangle");return e.primitives.rectangle({size:t.size,center:t.center??[0,0]});case"intersect":return e.booleans.intersect(...t.shapes.map(n));case"subtract":return e.booleans.subtract(...t.shapes.map(n));case"union":return e.booleans.union(...t.shapes.map(n));case"hull":return e.hulls.hull(...t.shapes.map(n));case"hullChain":return e.hulls.hullChain(...t.shapes.map(n));case"colorize":return e.colors.colorize(t.color,n(t.shape));case"cube":return e.primitives.cube(i);case"sphere":return e.primitives.sphere(i);case"cylinder":return e.primitives.cylinder(i);case"polygon":return e.primitives.polygon(i);case"cuboid":return e.primitives.cuboid(i);case"roundedCuboid":return e.primitives.roundedCuboid(i);case"transform":if(MY(t.matrix),!e.transforms.transform)throw Error('Cannot execute "transform" operation: this JSCAD adapter does not support transforms.transform');return e.transforms.transform(t.matrix,n(t.shape));case"rotate":return e.transforms.rotate(t.angles,n(t.shape));case"rotateX":return e.transforms.rotateX(t.angle,n(t.shape));case"rotateY":return e.transforms.rotateY(t.angle,n(t.shape));case"rotateZ":return e.transforms.rotateZ(t.angle,n(t.shape));case"scale":return e.transforms.scale(t.factors,n(t.shape));case"translate":return e.transforms.translate(t.vector,n(t.shape));case"extrudeLinear":return e.extrusions.extrudeLinear(t.options,n(t.shape));case"extrudeRotate":return e.extrusions.extrudeRotate(t.options,n(t.shape));case"createGeom2":return e.geometries.geom2.create(t.points);case"fromPointsGeom2":return e.geometries.geom2.fromPoints(t.points);case"createGeom3":return e.geometries.geom3.create(t.polygons);case"createPath2":return e.geometries.path2.create(t.points);case"measureBoundingBox":return e.measurements.measureBoundingBox(n(t.shape));case"measureArea":return e.measurements.measureArea(n(t.shape));case"measureVolume":return e.measurements.measureVolume(n(t.shape));case"degToRad":return e.utils.degToRad(t.degrees);case"radToDeg":return e.utils.radToDeg(t.radians);default:if(t.type===void 0)throw Error(`Operation type is undefined. This usually means the operation object is malformed or not properly initialized. Operation: ${JSON.stringify(t,null,2).slice(0,200)}...`);throw Error(`Unsupported operation type: ${t.type}. Operation: ${JSON.stringify(t,null,2)}`)}}});var Hpe=ct(function(kSt,LSt){(function(e){var t;typeof kSt=="object"?LSt.exports=e():typeof define=="function"&&define.amd?define(e):(typeof window<"u"?t=window:typeof global<"u"?t=global:typeof self<"u"&&(t=self),t.objectHash=e())})(function(){return function e(t,n,o){function i(a,c){if(!n[a]){if(!t[a]){var l=$O;if(!c&&l)return l(a,!0);if(r)return r(a,!0);throw Error("Cannot find module '"+a+"'")}c=n[a]={exports:{}},t[a][0].call(c.exports,function(d){var u=t[a][1][d];return i(u||d)},c,c.exports,e,t,n,o)}return n[a].exports}for(var r=$O,s=0;s<o.length;s++)i(o[s]);return i}({1:[function(e,t,n){(function(o,i,r,s,a,c,l,d,u){var h=e("crypto");function A(x,C){C=g(x,C);var I;return(I=C.algorithm!=="passthrough"?h.createHash(C.algorithm):new y).write===void 0&&(I.write=I.update,I.end=I.update),f(C,I).dispatch(x),I.update||I.end(""),I.digest?I.digest(C.encoding==="buffer"?void 0:C.encoding):(x=I.read(),C.encoding!=="buffer"?x.toString(C.encoding):x)}(n=t.exports=A).sha1=function(x){return A(x)},n.keys=function(x){return A(x,{excludeValues:!0,algorithm:"sha1",encoding:"hex"})},n.MD5=function(x){return A(x,{algorithm:"md5",encoding:"hex"})},n.keysMD5=function(x){return A(x,{algorithm:"md5",encoding:"hex",excludeValues:!0})};var m=h.getHashes?h.getHashes().slice():["sha1","md5"],p=(m.push("passthrough"),["buffer","hex","binary","base64"]);function g(x,C){var I={};if(I.algorithm=(C=C||{}).algorithm||"sha1",I.encoding=C.encoding||"hex",I.excludeValues=!!C.excludeValues,I.algorithm=I.algorithm.toLowerCase(),I.encoding=I.encoding.toLowerCase(),I.ignoreUnknown=C.ignoreUnknown===!0,I.respectType=C.respectType!==!1,I.respectFunctionNames=C.respectFunctionNames!==!1,I.respectFunctionProperties=C.respectFunctionProperties!==!1,I.unorderedArrays=C.unorderedArrays===!0,I.unorderedSets=C.unorderedSets!==!1,I.unorderedObjects=C.unorderedObjects!==!1,I.replacer=C.replacer||void 0,I.excludeKeys=C.excludeKeys||void 0,x===void 0)throw Error("Object argument required.");for(var b=0;b<m.length;++b)m[b].toLowerCase()===I.algorithm.toLowerCase()&&(I.algorithm=m[b]);if(m.indexOf(I.algorithm)===-1)throw Error('Algorithm "'+I.algorithm+'" not supported. supported values: '+m.join(", "));if(p.indexOf(I.encoding)===-1&&I.algorithm!=="passthrough")throw Error('Encoding "'+I.encoding+'" not supported. supported values: '+p.join(", "));return I}function _(x){if(typeof x=="function")return/^function\s+\w*\s*\(\s*\)\s*{\s+\[native code\]\s+}$/i.exec(Function.prototype.toString.call(x))!=null}function f(x,C,I){I=I||[];function b(P){return C.update?C.update(P,"utf8"):C.write(P,"utf8")}return{dispatch:function(P){return this["_"+((P=x.replacer?x.replacer(P):P)===null?"null":typeof P)](P)},_object:function(P){var E,B=Object.prototype.toString.call(P),w=/\[object (.*)\]/i.exec(B);if(w=(w=w?w[1]:"unknown:["+B+"]").toLowerCase(),0<=(B=I.indexOf(P)))return this.dispatch("[CIRCULAR:"+B+"]");if(I.push(P),r!==void 0&&r.isBuffer&&r.isBuffer(P))return b("buffer:"),b(P);if(w==="object"||w==="function"||w==="asyncfunction")return B=Object.keys(P),x.unorderedObjects&&(B=B.sort()),x.respectType===!1||_(P)||B.splice(0,0,"prototype","__proto__","constructor"),x.excludeKeys&&(B=B.filter(function(T){return!x.excludeKeys(T)})),b("object:"+B.length+":"),E=this,B.forEach(function(T){E.dispatch(T),b(":"),x.excludeValues||E.dispatch(P[T]),b(",")});if(!this["_"+w]){if(x.ignoreUnknown)return b("["+w+"]");throw Error('Unknown object type "'+w+'"')}this["_"+w](P)},_array:function(P,T){T=T!==void 0?T:x.unorderedArrays!==!1;var B=this;if(b("array:"+P.length+":"),!T||P.length<=1)return P.forEach(function(Q){return B.dispatch(Q)});var w=[],T=P.map(function(Q){var N=new y,F=I.slice();return f(x,N,F).dispatch(Q),w=w.concat(F.slice(I.length)),N.read().toString()});return I=I.concat(w),T.sort(),this._array(T,!1)},_date:function(P){return b("date:"+P.toJSON())},_symbol:function(P){return b("symbol:"+P.toString())},_error:function(P){return b("error:"+P.toString())},_boolean:function(P){return b("bool:"+P.toString())},_string:function(P){b("string:"+P.length+":"),b(P.toString())},_function:function(P){b("fn:"),_(P)?this.dispatch("[native]"):this.dispatch(P.toString()),x.respectFunctionNames!==!1&&this.dispatch("function-name:"+String(P.name)),x.respectFunctionProperties&&this._object(P)},_number:function(P){return b("number:"+P.toString())},_xml:function(P){return b("xml:"+P.toString())},_null:function(){return b("Null")},_undefined:function(){return b("Undefined")},_regexp:function(P){return b("regex:"+P.toString())},_uint8array:function(P){return b("uint8array:"),this.dispatch(Array.prototype.slice.call(P))},_uint8clampedarray:function(P){return b("uint8clampedarray:"),this.dispatch(Array.prototype.slice.call(P))},_int8array:function(P){return b("int8array:"),this.dispatch(Array.prototype.slice.call(P))},_uint16array:function(P){return b("uint16array:"),this.dispatch(Array.prototype.slice.call(P))},_int16array:function(P){return b("int16array:"),this.dispatch(Array.prototype.slice.call(P))},_uint32array:function(P){return b("uint32array:"),this.dispatch(Array.prototype.slice.call(P))},_int32array:function(P){return b("int32array:"),this.dispatch(Array.prototype.slice.call(P))},_float32array:function(P){return b("float32array:"),this.dispatch(Array.prototype.slice.call(P))},_float64array:function(P){return b("float64array:"),this.dispatch(Array.prototype.slice.call(P))},_arraybuffer:function(P){return b("arraybuffer:"),this.dispatch(new Uint8Array(P))},_url:function(P){return b("url:"+P.toString())},_map:function(P){return b("map:"),P=Array.from(P),this._array(P,x.unorderedSets!==!1)},_set:function(P){return b("set:"),P=Array.from(P),this._array(P,x.unorderedSets!==!1)},_file:function(P){return b("file:"),this.dispatch([P.name,P.size,P.type,P.lastModfied])},_blob:function(){if(x.ignoreUnknown)return b("[blob]");throw Error(`Hashing Blob objects is currently not supported
(see https://github.com/puleos/object-hash/issues/26)
Use "options.replacer" or "options.ignoreUnknown"
`)},_domwindow:function(){return b("domwindow")},_bigint:function(P){return b("bigint:"+P.toString())},_process:function(){return b("process")},_timer:function(){return b("timer")},_pipe:function(){return b("pipe")},_tcp:function(){return b("tcp")},_udp:function(){return b("udp")},_tty:function(){return b("tty")},_statwatcher:function(){return b("statwatcher")},_securecontext:function(){return b("securecontext")},_connection:function(){return b("connection")},_zlib:function(){return b("zlib")},_context:function(){return b("context")},_nodescript:function(){return b("nodescript")},_httpparser:function(){return b("httpparser")},_dataview:function(){return b("dataview")},_signal:function(){return b("signal")},_fsevent:function(){return b("fsevent")},_tlswrap:function(){return b("tlswrap")}}}function y(){return{buf:"",write:function(x){this.buf+=x},end:function(x){this.buf+=x},read:function(){return this.buf}}}n.writeToStream=function(x,C,I){return I===void 0&&(I=C,C={}),f(C=g(x,C),I).dispatch(x)}}).call(this,e("lYpoI2"),typeof self<"u"?self:typeof window<"u"?window:{},e("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/fake_9a5aa49d.js","/")},{buffer:3,crypto:5,lYpoI2:11}],2:[function(e,t,n){(function(o,i,r,s,a,c,l,d,u){(function(h){var A=typeof Uint8Array<"u"?Uint8Array:Array,m=43,p=47,g=48,_=97,f=65,y=45,x=95;function C(I){return I=I.charCodeAt(0),I===m||I===y?62:I===p||I===x?63:I<g?-1:I<g+10?I-g+26+26:I<f+26?I-f:I<_+26?I-_+26:void 0}h.toByteArray=function(I){var b,P;if(0<I.length%4)throw Error("Invalid string. Length must be a multiple of 4");var E=I.length,E=I.charAt(E-2)==="="?2:I.charAt(E-1)==="="?1:0,B=new A(3*I.length/4-E),w=0<E?I.length-4:I.length,T=0;function Q(N){B[T++]=N}for(b=0;b<w;b+=4,0)Q((16711680&(P=C(I.charAt(b))<<18|C(I.charAt(b+1))<<12|C(I.charAt(b+2))<<6|C(I.charAt(b+3))))>>16),Q((65280&P)>>8),Q(255&P);return E==2?Q(255&(P=C(I.charAt(b))<<2|C(I.charAt(b+1))>>4)):E==1&&(Q((P=C(I.charAt(b))<<10|C(I.charAt(b+1))<<4|C(I.charAt(b+2))>>2)>>8&255),Q(255&P)),B},h.fromByteArray=function(I){var b,P,E,B,w=I.length%3,T="";function Q(N){return"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(N)}for(b=0,E=I.length-w;b<E;b+=3)P=(I[b]<<16)+(I[b+1]<<8)+I[b+2],T+=Q((B=P)>>18&63)+Q(B>>12&63)+Q(B>>6&63)+Q(63&B);switch(w){case 1:T=(T+=Q((P=I[I.length-1])>>2))+Q(P<<4&63)+"==";break;case 2:T=(T=(T+=Q((P=(I[I.length-2]<<8)+I[I.length-1])>>10))+Q(P>>4&63))+Q(P<<2&63)+"="}return T}})(n===void 0?this.base64js={}:n)}).call(this,e("lYpoI2"),typeof self<"u"?self:typeof window<"u"?window:{},e("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/gulp-browserify/node_modules/base64-js/lib/b64.js","/node_modules/gulp-browserify/node_modules/base64-js/lib")},{buffer:3,lYpoI2:11}],3:[function(e,t,n){(function(o,i,m,s,a,c,l,d,u){var h=e("base64-js"),A=e("ieee754");function m(oe,ie,J){if(!(this instanceof m))return new m(oe,ie,J);var ee,se,le,he,ue=typeof oe;if(ie==="base64"&&ue=="string")for(oe=(he=oe).trim?he.trim():he.replace(/^\s+|\s+$/g,"");oe.length%4!=0;)oe+="=";if(ue=="number")ee=H(oe);else if(ue=="string")ee=m.byteLength(oe,ie);else{if(ue!="object")throw Error("First argument needs to be a number, array or string.");ee=H(oe.length)}if(m._useTypedArrays?se=m._augment(new Uint8Array(ee)):((se=this).length=ee,se._isBuffer=!0),m._useTypedArrays&&typeof oe.byteLength=="number")se._set(oe);else if(z(he=oe)||m.isBuffer(he)||he&&typeof he=="object"&&typeof he.length=="number")for(le=0;le<ee;le++)m.isBuffer(oe)?se[le]=oe.readUInt8(le):se[le]=oe[le];else if(ue=="string")se.write(oe,0,ie);else if(ue=="number"&&!m._useTypedArrays&&!J)for(le=0;le<ee;le++)se[le]=0;return se}function p(oe,ie,J,ee){return m._charsWritten=V(function(se){for(var le=[],he=0;he<se.length;he++)le.push(255&se.charCodeAt(he));return le}(ie),oe,J,ee)}function g(oe,ie,J,ee){return m._charsWritten=V(function(se){for(var le,he,ue=[],Ae=0;Ae<se.length;Ae++)he=se.charCodeAt(Ae),le=he>>8,he=he%256,ue.push(he),ue.push(le);return ue}(ie),oe,J,ee)}function _(oe,ie,J){var ee="";J=Math.min(oe.length,J);for(var se=ie;se<J;se++)ee+=String.fromCharCode(oe[se]);return ee}function f(oe,ie,J,le){le||(ce(typeof J=="boolean","missing or invalid endian"),ce(ie!=null,"missing offset"),ce(ie+1<oe.length,"Trying to read beyond buffer length"));var se,le=oe.length;if(!(le<=ie))return J?(se=oe[ie],ie+1<le&&(se|=oe[ie+1]<<8)):(se=oe[ie]<<8,ie+1<le&&(se|=oe[ie+1])),se}function y(oe,ie,J,le){le||(ce(typeof J=="boolean","missing or invalid endian"),ce(ie!=null,"missing offset"),ce(ie+3<oe.length,"Trying to read beyond buffer length"));var se,le=oe.length;if(!(le<=ie))return J?(ie+2<le&&(se=oe[ie+2]<<16),ie+1<le&&(se|=oe[ie+1]<<8),se|=oe[ie],ie+3<le&&(se+=oe[ie+3]<<24>>>0)):(ie+1<le&&(se=oe[ie+1]<<16),ie+2<le&&(se|=oe[ie+2]<<8),ie+3<le&&(se|=oe[ie+3]),se+=oe[ie]<<24>>>0),se}function x(oe,ie,J,ee){if(ee||(ce(typeof J=="boolean","missing or invalid endian"),ce(ie!=null,"missing offset"),ce(ie+1<oe.length,"Trying to read beyond buffer length")),!(oe.length<=ie))return ee=f(oe,ie,J,!0),32768&ee?-1*(65535-ee+1):ee}function C(oe,ie,J,ee){if(ee||(ce(typeof J=="boolean","missing or invalid endian"),ce(ie!=null,"missing offset"),ce(ie+3<oe.length,"Trying to read beyond buffer length")),!(oe.length<=ie))return ee=y(oe,ie,J,!0),2147483648&ee?-1*(4294967295-ee+1):ee}function I(oe,ie,J,ee){return ee||(ce(typeof J=="boolean","missing or invalid endian"),ce(ie+3<oe.length,"Trying to read beyond buffer length")),A.read(oe,ie,J,23,4)}function b(oe,ie,J,ee){return ee||(ce(typeof J=="boolean","missing or invalid endian"),ce(ie+7<oe.length,"Trying to read beyond buffer length")),A.read(oe,ie,J,52,8)}function P(oe,ie,J,ee,se){if(se||(ce(ie!=null,"missing value"),ce(typeof ee=="boolean","missing or invalid endian"),ce(J!=null,"missing offset"),ce(J+1<oe.length,"trying to write beyond buffer length"),j(ie,65535)),se=oe.length,!(se<=J))for(var le=0,he=Math.min(se-J,2);le<he;le++)oe[J+le]=(ie&255<<8*(ee?le:1-le))>>>8*(ee?le:1-le)}function E(oe,ie,J,ee,se){if(se||(ce(ie!=null,"missing value"),ce(typeof ee=="boolean","missing or invalid endian"),ce(J!=null,"missing offset"),ce(J+3<oe.length,"trying to write beyond buffer length"),j(ie,4294967295)),se=oe.length,!(se<=J))for(var le=0,he=Math.min(se-J,4);le<he;le++)oe[J+le]=ie>>>8*(ee?le:3-le)&255}function B(oe,ie,J,ee,se){se||(ce(ie!=null,"missing value"),ce(typeof ee=="boolean","missing or invalid endian"),ce(J!=null,"missing offset"),ce(J+1<oe.length,"Trying to write beyond buffer length"),q(ie,32767,-32768)),oe.length<=J||P(oe,0<=ie?ie:65535+ie+1,J,ee,se)}function w(oe,ie,J,ee,se){se||(ce(ie!=null,"missing value"),ce(typeof ee=="boolean","missing or invalid endian"),ce(J!=null,"missing offset"),ce(J+3<oe.length,"Trying to write beyond buffer length"),q(ie,2147483647,-2147483648)),oe.length<=J||E(oe,0<=ie?ie:4294967295+ie+1,J,ee,se)}function T(oe,ie,J,ee,se){se||(ce(ie!=null,"missing value"),ce(typeof ee=="boolean","missing or invalid endian"),ce(J!=null,"missing offset"),ce(J+3<oe.length,"Trying to write beyond buffer length"),ne(ie,340282346638528860000000000000000000000,-340282346638528860000000000000000000000)),oe.length<=J||A.write(oe,ie,J,ee,23,4)}function Q(oe,ie,J,ee,se){se||(ce(ie!=null,"missing value"),ce(typeof ee=="boolean","missing or invalid endian"),ce(J!=null,"missing offset"),ce(J+7<oe.length,"Trying to write beyond buffer length"),ne(ie,179769313486231570000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000,-179769313486231570000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000)),oe.length<=J||A.write(oe,ie,J,ee,52,8)}n.Buffer=m,n.SlowBuffer=m,n.INSPECT_MAX_BYTES=50,m.poolSize=8192,m._useTypedArrays=function(){try{var oe=new ArrayBuffer(0),ie=new Uint8Array(oe);return ie.foo=function(){return 42},ie.foo()===42&&typeof ie.subarray=="function"}catch(J){return!1}}(),m.isEncoding=function(oe){switch(String(oe).toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"binary":case"base64":case"raw":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return!0;default:return!1}},m.isBuffer=function(oe){return!(oe==null||!oe._isBuffer)},m.byteLength=function(oe,ie){var J;switch(oe+="",ie||"utf8"){case"hex":J=oe.length/2;break;case"utf8":case"utf-8":J=U(oe).length;break;case"ascii":case"binary":case"raw":J=oe.length;break;case"base64":J=X(oe).length;break;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":J=2*oe.length;break;default:throw Error("Unknown encoding")}return J},m.concat=function(oe,ie){if(ce(z(oe),`Usage: Buffer.concat(list, [totalLength])
list should be an Array.`),oe.length===0)return new m(0);if(oe.length===1)return oe[0];if(typeof ie!="number")for(se=ie=0;se<oe.length;se++)ie+=oe[se].length;for(var J=new m(ie),ee=0,se=0;se<oe.length;se++){var le=oe[se];le.copy(J,ee),ee+=le.length}return J},m.prototype.write=function(oe,ie,J,ee){isFinite(ie)?isFinite(J)||(ee=J,J=void 0):(Ae=ee,ee=ie,ie=J,J=Ae),ie=Number(ie)||0;var se,le,he,ue,Ae=this.length-ie;switch((!J||Ae<(J=Number(J)))&&(J=Ae),ee=String(ee||"utf8").toLowerCase()){case"hex":se=function(_e,Pe,Ee,Te){Ee=Number(Ee)||0;var be=_e.length-Ee;(!Te||be<(Te=Number(Te)))&&(Te=be),ce((be=Pe.length)%2==0,"Invalid hex string"),be/2<Te&&(Te=be/2);for(var me=0;me<Te;me++){var ye=parseInt(Pe.substr(2*me,2),16);ce(!isNaN(ye),"Invalid hex string"),_e[Ee+me]=ye}return m._charsWritten=2*me,me}(this,oe,ie,J);break;case"utf8":case"utf-8":le=this,he=ie,ue=J,se=m._charsWritten=V(U(oe),le,he,ue);break;case"ascii":case"binary":se=p(this,oe,ie,J);break;case"base64":le=this,he=ie,ue=J,se=m._charsWritten=V(X(oe),le,he,ue);break;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":se=g(this,oe,ie,J);break;default:throw Error("Unknown encoding")}return se},m.prototype.toString=function(oe,ie,J){var ee,se,le,he,ue=this;if(oe=String(oe||"utf8").toLowerCase(),ie=Number(ie)||0,(J=J!==void 0?Number(J):ue.length)===ie)return"";switch(oe){case"hex":ee=function(Ae,_e,Pe){var Ee=Ae.length;(!_e||_e<0)&&(_e=0),(!Pe||Pe<0||Ee<Pe)&&(Pe=Ee);for(var Te="",be=_e;be<Pe;be++)Te+=Y(Ae[be]);return Te}(ue,ie,J);break;case"utf8":case"utf-8":ee=function(Ae,_e,Pe){var Ee="",Te="";Pe=Math.min(Ae.length,Pe);for(var be=_e;be<Pe;be++)Ae[be]<=127?(Ee+=W(Te)+String.fromCharCode(Ae[be]),Te=""):Te+="%"+Ae[be].toString(16);return Ee+W(Te)}(ue,ie,J);break;case"ascii":case"binary":ee=_(ue,ie,J);break;case"base64":se=ue,he=J,ee=(le=ie)===0&&he===se.length?h.fromByteArray(se):h.fromByteArray(se.slice(le,he));break;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":ee=function(Ae,_e,Pe){for(var Ee=Ae.slice(_e,Pe),Te="",be=0;be<Ee.length;be+=2)Te+=String.fromCharCode(Ee[be]+256*Ee[be+1]);return Te}(ue,ie,J);break;default:throw Error("Unknown encoding")}return ee},m.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}},m.prototype.copy=function(oe,ie,J,ee){if(ie=ie||0,(ee=ee||ee===0?ee:this.length)!==(J=J||0)&&oe.length!==0&&this.length!==0){ce(J<=ee,"sourceEnd < sourceStart"),ce(0<=ie&&ie<oe.length,"targetStart out of bounds"),ce(0<=J&&J<this.length,"sourceStart out of bounds"),ce(0<=ee&&ee<=this.length,"sourceEnd out of bounds"),ee>this.length&&(ee=this.length);var se=(ee=oe.length-ie<ee-J?oe.length-ie+J:ee)-J;if(se<100||!m._useTypedArrays)for(var le=0;le<se;le++)oe[le+ie]=this[le+J];else oe._set(this.subarray(J,J+se),ie)}},m.prototype.slice=function(oe,ie){var J=this.length;if(oe=F(oe,J,0),ie=F(ie,J,J),m._useTypedArrays)return m._augment(this.subarray(oe,ie));for(var ee=ie-oe,se=new m(ee,void 0,!0),le=0;le<ee;le++)se[le]=this[le+oe];return se},m.prototype.get=function(oe){return console.log(".get() is deprecated. Access using array indexes instead."),this.readUInt8(oe)},m.prototype.set=function(oe,ie){return console.log(".set() is deprecated. Access using array indexes instead."),this.writeUInt8(oe,ie)},m.prototype.readUInt8=function(oe,ie){if(ie||(ce(oe!=null,"missing offset"),ce(oe<this.length,"Trying to read beyond buffer length")),!(oe>=this.length))return this[oe]},m.prototype.readUInt16LE=function(oe,ie){return f(this,oe,!0,ie)},m.prototype.readUInt16BE=function(oe,ie){return f(this,oe,!1,ie)},m.prototype.readUInt32LE=function(oe,ie){return y(this,oe,!0,ie)},m.prototype.readUInt32BE=function(oe,ie){return y(this,oe,!1,ie)},m.prototype.readInt8=function(oe,ie){if(ie||(ce(oe!=null,"missing offset"),ce(oe<this.length,"Trying to read beyond buffer length")),!(oe>=this.length))return 128&this[oe]?-1*(255-this[oe]+1):this[oe]},m.prototype.readInt16LE=function(oe,ie){return x(this,oe,!0,ie)},m.prototype.readInt16BE=function(oe,ie){return x(this,oe,!1,ie)},m.prototype.readInt32LE=function(oe,ie){return C(this,oe,!0,ie)},m.prototype.readInt32BE=function(oe,ie){return C(this,oe,!1,ie)},m.prototype.readFloatLE=function(oe,ie){return I(this,oe,!0,ie)},m.prototype.readFloatBE=function(oe,ie){return I(this,oe,!1,ie)},m.prototype.readDoubleLE=function(oe,ie){return b(this,oe,!0,ie)},m.prototype.readDoubleBE=function(oe,ie){return b(this,oe,!1,ie)},m.prototype.writeUInt8=function(oe,ie,J){J||(ce(oe!=null,"missing value"),ce(ie!=null,"missing offset"),ce(ie<this.length,"trying to write beyond buffer length"),j(oe,255)),ie>=this.length||(this[ie]=oe)},m.prototype.writeUInt16LE=function(oe,ie,J){P(this,oe,ie,!0,J)},m.prototype.writeUInt16BE=function(oe,ie,J){P(this,oe,ie,!1,J)},m.prototype.writeUInt32LE=function(oe,ie,J){E(this,oe,ie,!0,J)},m.prototype.writeUInt32BE=function(oe,ie,J){E(this,oe,ie,!1,J)},m.prototype.writeInt8=function(oe,ie,J){J||(ce(oe!=null,"missing value"),ce(ie!=null,"missing offset"),ce(ie<this.length,"Trying to write beyond buffer length"),q(oe,127,-128)),ie>=this.length||(0<=oe?this.writeUInt8(oe,ie,J):this.writeUInt8(255+oe+1,ie,J))},m.prototype.writeInt16LE=function(oe,ie,J){B(this,oe,ie,!0,J)},m.prototype.writeInt16BE=function(oe,ie,J){B(this,oe,ie,!1,J)},m.prototype.writeInt32LE=function(oe,ie,J){w(this,oe,ie,!0,J)},m.prototype.writeInt32BE=function(oe,ie,J){w(this,oe,ie,!1,J)},m.prototype.writeFloatLE=function(oe,ie,J){T(this,oe,ie,!0,J)},m.prototype.writeFloatBE=function(oe,ie,J){T(this,oe,ie,!1,J)},m.prototype.writeDoubleLE=function(oe,ie,J){Q(this,oe,ie,!0,J)},m.prototype.writeDoubleBE=function(oe,ie,J){Q(this,oe,ie,!1,J)},m.prototype.fill=function(oe,ie,J){if(ie=ie||0,J=J||this.length,ce(typeof(oe=typeof(oe=oe||0)=="string"?oe.charCodeAt(0):oe)=="number"&&!isNaN(oe),"value is not a number"),ce(ie<=J,"end < start"),J!==ie&&this.length!==0){ce(0<=ie&&ie<this.length,"start out of bounds"),ce(0<=J&&J<=this.length,"end out of bounds");for(var ee=ie;ee<J;ee++)this[ee]=oe}},m.prototype.inspect=function(){for(var oe=[],ie=this.length,J=0;J<ie;J++)if(oe[J]=Y(this[J]),J===n.INSPECT_MAX_BYTES){oe[J+1]="...";break}return"<Buffer "+oe.join(" ")+">"},m.prototype.toArrayBuffer=function(){if(typeof Uint8Array>"u")throw Error("Buffer.toArrayBuffer not supported in this browser");if(m._useTypedArrays)return new m(this).buffer;for(var oe=new Uint8Array(this.length),ie=0,J=oe.length;ie<J;ie+=1)oe[ie]=this[ie];return oe.buffer};var N=m.prototype;function F(oe,ie,J){return typeof oe!="number"?J:ie<=(oe=~~oe)?ie:0<=oe||0<=(oe+=ie)?oe:0}function H(oe){return(oe=~~Math.ceil(+oe))<0?0:oe}function z(oe){return(Array.isArray||function(ie){return Object.prototype.toString.call(ie)==="[object Array]"})(oe)}function Y(oe){return oe<16?"0"+oe.toString(16):oe.toString(16)}function U(oe){for(var ie=[],J=0;J<oe.length;J++){var ee=oe.charCodeAt(J);if(ee<=127)ie.push(oe.charCodeAt(J));else for(var se=J,le=(55296<=ee&&ee<=57343&&J++,encodeURIComponent(oe.slice(se,J+1)).substr(1).split("%")),he=0;he<le.length;he++)ie.push(parseInt(le[he],16))}return ie}function X(oe){return h.toByteArray(oe)}function V(oe,ie,J,ee){for(var se=0;se<ee&&!(se+J>=ie.length||se>=oe.length);se++)ie[se+J]=oe[se];return se}function W(oe){try{return decodeURIComponent(oe)}catch(ie){return String.fromCharCode(65533)}}function j(oe,ie){ce(typeof oe=="number","cannot write a non-number as a number"),ce(0<=oe,"specified a negative value for writing an unsigned value"),ce(oe<=ie,"value is larger than maximum value for type"),ce(Math.floor(oe)===oe,"value has a fractional component")}function q(oe,ie,J){ce(typeof oe=="number","cannot write a non-number as a number"),ce(oe<=ie,"value larger than maximum allowed value"),ce(J<=oe,"value smaller than minimum allowed value"),ce(Math.floor(oe)===oe,"value has a fractional component")}function ne(oe,ie,J){ce(typeof oe=="number","cannot write a non-number as a number"),ce(oe<=ie,"value larger than maximum allowed value"),ce(J<=oe,"value smaller than minimum allowed value")}function ce(oe,ie){if(!oe)throw Error(ie||"Failed assertion")}m._augment=function(oe){return oe._isBuffer=!0,oe._get=oe.get,oe._set=oe.set,oe.get=N.get,oe.set=N.set,oe.write=N.write,oe.toString=N.toString,oe.toLocaleString=N.toString,oe.toJSON=N.toJSON,oe.copy=N.copy,oe.slice=N.slice,oe.readUInt8=N.readUInt8,oe.readUInt16LE=N.readUInt16LE,oe.readUInt16BE=N.readUInt16BE,oe.readUInt32LE=N.readUInt32LE,oe.readUInt32BE=N.readUInt32BE,oe.readInt8=N.readInt8,oe.readInt16LE=N.readInt16LE,oe.readInt16BE=N.readInt16BE,oe.readInt32LE=N.readInt32LE,oe.readInt32BE=N.readInt32BE,oe.readFloatLE=N.readFloatLE,oe.readFloatBE=N.readFloatBE,oe.readDoubleLE=N.readDoubleLE,oe.readDoubleBE=N.readDoubleBE,oe.writeUInt8=N.writeUInt8,oe.writeUInt16LE=N.writeUInt16LE,oe.writeUInt16BE=N.writeUInt16BE,oe.writeUInt32LE=N.writeUInt32LE,oe.writeUInt32BE=N.writeUInt32BE,oe.writeInt8=N.writeInt8,oe.writeInt16LE=N.writeInt16LE,oe.writeInt16BE=N.writeInt16BE,oe.writeInt32LE=N.writeInt32LE,oe.writeInt32BE=N.writeInt32BE,oe.writeFloatLE=N.writeFloatLE,oe.writeFloatBE=N.writeFloatBE,oe.writeDoubleLE=N.writeDoubleLE,oe.writeDoubleBE=N.writeDoubleBE,oe.fill=N.fill,oe.inspect=N.inspect,oe.toArrayBuffer=N.toArrayBuffer,oe}}).call(this,e("lYpoI2"),typeof self<"u"?self:typeof window<"u"?window:{},e("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/gulp-browserify/node_modules/buffer/index.js","/node_modules/gulp-browserify/node_modules/buffer")},{"base64-js":2,buffer:3,ieee754:10,lYpoI2:11}],4:[function(e,t,n){(function(o,i,h,s,a,c,l,d,u){var h=e("buffer").Buffer,A=4,m=new h(A);m.fill(0),t.exports={hash:function(p,g,_,f){for(var y=g(function(P,E){P.length%A!=0&&(B=P.length+(A-P.length%A),P=h.concat([P,m],B));for(var B,w=[],T=E?P.readInt32BE:P.readInt32LE,Q=0;Q<P.length;Q+=A)w.push(T.call(P,Q));return w}(p=h.isBuffer(p)?p:new h(p),f),8*p.length),g=f,x=new h(_),C=g?x.writeInt32BE:x.writeInt32LE,I=0;I<y.length;I++)C.call(x,y[I],4*I,!0);return x}}}).call(this,e("lYpoI2"),typeof self<"u"?self:typeof window<"u"?window:{},e("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/gulp-browserify/node_modules/crypto-browserify/helpers.js","/node_modules/gulp-browserify/node_modules/crypto-browserify")},{buffer:3,lYpoI2:11}],5:[function(e,t,n){(function(o,i,h,s,a,c,l,d,u){var h=e("buffer").Buffer,A=e("./sha"),m=e("./sha256"),p=e("./rng"),g={sha1:A,sha256:m,md5:e("./md5")},_=64,f=new h(_);function y(P,E){var B=g[P=P||"sha1"],w=[];return B||x("algorithm:",P,"is not yet supported"),{update:function(T){return h.isBuffer(T)||(T=new h(T)),w.push(T),T.length,this},digest:function(T){var Q=h.concat(w),Q=E?function(N,F,H){h.isBuffer(F)||(F=new h(F)),h.isBuffer(H)||(H=new h(H)),F.length>_?F=N(F):F.length<_&&(F=h.concat([F,f],_));for(var z=new h(_),Y=new h(_),U=0;U<_;U++)z[U]=54^F[U],Y[U]=92^F[U];return H=N(h.concat([z,H])),N(h.concat([Y,H]))}(B,E,Q):B(Q);return w=null,T?Q.toString(T):Q}}}function x(){var P=[].slice.call(arguments).join(" ");throw Error([P,"we accept pull requests","http://github.com/dominictarr/crypto-browserify"].join(`
`))}f.fill(0),n.createHash=function(P){return y(P)},n.createHmac=y,n.randomBytes=function(P,E){if(!E||!E.call)return new h(p(P));try{E.call(this,void 0,new h(p(P)))}catch(B){E(B)}};var C,I=["createCredentials","createCipher","createCipheriv","createDecipher","createDecipheriv","createSign","createVerify","createDiffieHellman","pbkdf2"],b=function(P){n[P]=function(){x("sorry,",P,"is not implemented yet")}};for(C in I)b(I[C],C)}).call(this,e("lYpoI2"),typeof self<"u"?self:typeof window<"u"?window:{},e("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/gulp-browserify/node_modules/crypto-browserify/index.js","/node_modules/gulp-browserify/node_modules/crypto-browserify")},{"./md5":6,"./rng":7,"./sha":8,"./sha256":9,buffer:3,lYpoI2:11}],6:[function(e,t,n){(function(o,i,r,s,a,c,l,d,u){var h=e("./helpers");function A(x,C){x[C>>5]|=128<<C%32,x[14+(C+64>>>9<<4)]=C;for(var I=1732584193,b=-271733879,P=-1732584194,E=271733878,B=0;B<x.length;B+=16){var w=I,T=b,Q=P,N=E,I=p(I,b,P,E,x[B+0],7,-680876936),E=p(E,I,b,P,x[B+1],12,-389564586),P=p(P,E,I,b,x[B+2],17,606105819),b=p(b,P,E,I,x[B+3],22,-1044525330);I=p(I,b,P,E,x[B+4],7,-176418897),E=p(E,I,b,P,x[B+5],12,1200080426),P=p(P,E,I,b,x[B+6],17,-1473231341),b=p(b,P,E,I,x[B+7],22,-45705983),I=p(I,b,P,E,x[B+8],7,1770035416),E=p(E,I,b,P,x[B+9],12,-1958414417),P=p(P,E,I,b,x[B+10],17,-42063),b=p(b,P,E,I,x[B+11],22,-1990404162),I=p(I,b,P,E,x[B+12],7,1804603682),E=p(E,I,b,P,x[B+13],12,-40341101),P=p(P,E,I,b,x[B+14],17,-1502002290),I=g(I,b=p(b,P,E,I,x[B+15],22,1236535329),P,E,x[B+1],5,-165796510),E=g(E,I,b,P,x[B+6],9,-1069501632),P=g(P,E,I,b,x[B+11],14,643717713),b=g(b,P,E,I,x[B+0],20,-373897302),I=g(I,b,P,E,x[B+5],5,-701558691),E=g(E,I,b,P,x[B+10],9,38016083),P=g(P,E,I,b,x[B+15],14,-660478335),b=g(b,P,E,I,x[B+4],20,-405537848),I=g(I,b,P,E,x[B+9],5,568446438),E=g(E,I,b,P,x[B+14],9,-1019803690),P=g(P,E,I,b,x[B+3],14,-187363961),b=g(b,P,E,I,x[B+8],20,1163531501),I=g(I,b,P,E,x[B+13],5,-1444681467),E=g(E,I,b,P,x[B+2],9,-51403784),P=g(P,E,I,b,x[B+7],14,1735328473),I=_(I,b=g(b,P,E,I,x[B+12],20,-1926607734),P,E,x[B+5],4,-378558),E=_(E,I,b,P,x[B+8],11,-2022574463),P=_(P,E,I,b,x[B+11],16,1839030562),b=_(b,P,E,I,x[B+14],23,-35309556),I=_(I,b,P,E,x[B+1],4,-1530992060),E=_(E,I,b,P,x[B+4],11,1272893353),P=_(P,E,I,b,x[B+7],16,-155497632),b=_(b,P,E,I,x[B+10],23,-1094730640),I=_(I,b,P,E,x[B+13],4,681279174),E=_(E,I,b,P,x[B+0],11,-358537222),P=_(P,E,I,b,x[B+3],16,-722521979),b=_(b,P,E,I,x[B+6],23,76029189),I=_(I,b,P,E,x[B+9],4,-640364487),E=_(E,I,b,P,x[B+12],11,-421815835),P=_(P,E,I,b,x[B+15],16,530742520),I=f(I,b=_(b,P,E,I,x[B+2],23,-995338651),P,E,x[B+0],6,-198630844),E=f(E,I,b,P,x[B+7],10,1126891415),P=f(P,E,I,b,x[B+14],15,-1416354905),b=f(b,P,E,I,x[B+5],21,-57434055),I=f(I,b,P,E,x[B+12],6,1700485571),E=f(E,I,b,P,x[B+3],10,-1894986606),P=f(P,E,I,b,x[B+10],15,-1051523),b=f(b,P,E,I,x[B+1],21,-2054922799),I=f(I,b,P,E,x[B+8],6,1873313359),E=f(E,I,b,P,x[B+15],10,-30611744),P=f(P,E,I,b,x[B+6],15,-1560198380),b=f(b,P,E,I,x[B+13],21,1309151649),I=f(I,b,P,E,x[B+4],6,-145523070),E=f(E,I,b,P,x[B+11],10,-1120210379),P=f(P,E,I,b,x[B+2],15,718787259),b=f(b,P,E,I,x[B+9],21,-343485551),I=y(I,w),b=y(b,T),P=y(P,Q),E=y(E,N)}return Array(I,b,P,E)}function m(x,C,I,b,P,E){return y((C=y(y(C,x),y(b,E)))<<P|C>>>32-P,I)}function p(x,C,I,b,P,E,B){return m(C&I|~C&b,x,C,P,E,B)}function g(x,C,I,b,P,E,B){return m(C&b|I&~b,x,C,P,E,B)}function _(x,C,I,b,P,E,B){return m(C^I^b,x,C,P,E,B)}function f(x,C,I,b,P,E,B){return m(I^(C|~b),x,C,P,E,B)}function y(x,C){var I=(65535&x)+(65535&C);return(x>>16)+(C>>16)+(I>>16)<<16|65535&I}t.exports=function(x){return h.hash(x,A,16)}}).call(this,e("lYpoI2"),typeof self<"u"?self:typeof window<"u"?window:{},e("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/gulp-browserify/node_modules/crypto-browserify/md5.js","/node_modules/gulp-browserify/node_modules/crypto-browserify")},{"./helpers":4,buffer:3,lYpoI2:11}],7:[function(e,t,n){(function(o,i,r,s,a,c,l,d,u){var h;t.exports=h||function(A){for(var m,p=Array(A),g=0;g<A;g++)(3&g)==0&&(m=4294967296*Math.random()),p[g]=m>>>((3&g)<<3)&255;return p}}).call(this,e("lYpoI2"),typeof self<"u"?self:typeof window<"u"?window:{},e("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/gulp-browserify/node_modules/crypto-browserify/rng.js","/node_modules/gulp-browserify/node_modules/crypto-browserify")},{buffer:3,lYpoI2:11}],8:[function(e,t,n){(function(o,i,r,s,a,c,l,d,u){var h=e("./helpers");function A(g,_){g[_>>5]|=128<<24-_%32,g[15+(_+64>>9<<4)]=_;for(var f,y,x,C=Array(80),I=1732584193,b=-271733879,P=-1732584194,E=271733878,B=-1009589776,w=0;w<g.length;w+=16){for(var T=I,Q=b,N=P,F=E,H=B,z=0;z<80;z++){C[z]=z<16?g[w+z]:p(C[z-3]^C[z-8]^C[z-14]^C[z-16],1);var Y=m(m(p(I,5),(Y=b,y=P,x=E,(f=z)<20?Y&y|~Y&x:!(f<40)&&f<60?Y&y|Y&x|y&x:Y^y^x)),m(m(B,C[z]),(f=z)<20?1518500249:f<40?1859775393:f<60?-1894007588:-899497514)),B=E,E=P,P=p(b,30),b=I,I=Y}I=m(I,T),b=m(b,Q),P=m(P,N),E=m(E,F),B=m(B,H)}return Array(I,b,P,E,B)}function m(g,_){var f=(65535&g)+(65535&_);return(g>>16)+(_>>16)+(f>>16)<<16|65535&f}function p(g,_){return g<<_|g>>>32-_}t.exports=function(g){return h.hash(g,A,20,!0)}}).call(this,e("lYpoI2"),typeof self<"u"?self:typeof window<"u"?window:{},e("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/gulp-browserify/node_modules/crypto-browserify/sha.js","/node_modules/gulp-browserify/node_modules/crypto-browserify")},{"./helpers":4,buffer:3,lYpoI2:11}],9:[function(e,t,n){(function(o,i,r,s,a,c,l,d,u){function h(_,f){var y=(65535&_)+(65535&f);return(_>>16)+(f>>16)+(y>>16)<<16|65535&y}function A(_,f){var y,x=[1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298],C=[1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225],I=Array(64);_[f>>5]|=128<<24-f%32,_[15+(f+64>>9<<4)]=f;for(var b,P,E=0;E<_.length;E+=16){for(var B=C[0],w=C[1],T=C[2],Q=C[3],N=C[4],F=C[5],H=C[6],z=C[7],Y=0;Y<64;Y++)I[Y]=Y<16?_[Y+E]:h(h(h((P=I[Y-2],p(P,17)^p(P,19)^g(P,10)),I[Y-7]),(P=I[Y-15],p(P,7)^p(P,18)^g(P,3))),I[Y-16]),y=h(h(h(h(z,p(P=N,6)^p(P,11)^p(P,25)),N&F^~N&H),x[Y]),I[Y]),b=h(p(b=B,2)^p(b,13)^p(b,22),B&w^B&T^w&T),z=H,H=F,F=N,N=h(Q,y),Q=T,T=w,w=B,B=h(y,b);C[0]=h(B,C[0]),C[1]=h(w,C[1]),C[2]=h(T,C[2]),C[3]=h(Q,C[3]),C[4]=h(N,C[4]),C[5]=h(F,C[5]),C[6]=h(H,C[6]),C[7]=h(z,C[7])}return C}var m=e("./helpers"),p=function(_,f){return _>>>f|_<<32-f},g=function(_,f){return _>>>f};t.exports=function(_){return m.hash(_,A,32,!0)}}).call(this,e("lYpoI2"),typeof self<"u"?self:typeof window<"u"?window:{},e("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/gulp-browserify/node_modules/crypto-browserify/sha256.js","/node_modules/gulp-browserify/node_modules/crypto-browserify")},{"./helpers":4,buffer:3,lYpoI2:11}],10:[function(e,t,n){(function(o,i,r,s,a,c,l,d,u){n.read=function(h,A,m,p,E){var _,f,y=8*E-p-1,x=(1<<y)-1,C=x>>1,I=-7,b=m?E-1:0,P=m?-1:1,E=h[A+b];for(b+=P,_=E&(1<<-I)-1,E>>=-I,I+=y;0<I;_=256*_+h[A+b],b+=P,I-=8);for(f=_&(1<<-I)-1,_>>=-I,I+=p;0<I;f=256*f+h[A+b],b+=P,I-=8);if(_===0)_=1-C;else{if(_===x)return f?NaN:1/0*(E?-1:1);f+=Math.pow(2,p),_-=C}return(E?-1:1)*f*Math.pow(2,_-p)},n.write=function(h,A,m,p,g,B){var f,y,x=8*B-g-1,C=(1<<x)-1,I=C>>1,b=g===23?Math.pow(2,-24)-Math.pow(2,-77):0,P=p?0:B-1,E=p?1:-1,B=A<0||A===0&&1/A<0?1:0;for(A=Math.abs(A),isNaN(A)||A===1/0?(y=isNaN(A)?1:0,f=C):(f=Math.floor(Math.log(A)/Math.LN2),A*(p=Math.pow(2,-f))<1&&(f--,p*=2),2<=(A+=1<=f+I?b/p:b*Math.pow(2,1-I))*p&&(f++,p/=2),C<=f+I?(y=0,f=C):1<=f+I?(y=(A*p-1)*Math.pow(2,g),f+=I):(y=A*Math.pow(2,I-1)*Math.pow(2,g),f=0));8<=g;h[m+P]=255&y,P+=E,y/=256,g-=8);for(f=f<<g|y,x+=g;0<x;h[m+P]=255&f,P+=E,f/=256,x-=8);h[m+P-E]|=128*B}}).call(this,e("lYpoI2"),typeof self<"u"?self:typeof window<"u"?window:{},e("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/gulp-browserify/node_modules/ieee754/index.js","/node_modules/gulp-browserify/node_modules/ieee754")},{buffer:3,lYpoI2:11}],11:[function(e,t,n){(function(o,i,r,s,a,c,l,d,u){var h,A,m;function p(){}(o=t.exports={}).nextTick=(A=typeof window<"u"&&window.setImmediate,m=typeof window<"u"&&window.postMessage&&window.addEventListener,A?function(g){return window.setImmediate(g)}:m?(h=[],window.addEventListener("message",function(g){var _=g.source;_!==window&&_!==null||g.data!=="process-tick"||(g.stopPropagation(),0<h.length&&h.shift()())},!0),function(g){h.push(g),window.postMessage("process-tick","*")}):function(g){setTimeout(g,0)}),o.title="browser",o.browser=!0,o.env={},o.argv=[],o.on=p,o.addListener=p,o.once=p,o.off=p,o.removeListener=p,o.removeAllListeners=p,o.emit=p,o.binding=function(g){throw Error("process.binding is not supported")},o.cwd=function(){return"/"},o.chdir=function(g){throw Error("process.chdir is not supported")}}).call(this,e("lYpoI2"),typeof self<"u"?self:typeof window<"u"?window:{},e("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/gulp-browserify/node_modules/process/browser.js","/node_modules/gulp-browserify/node_modules/process")},{buffer:3,lYpoI2:11}]},{},[1])(1)})});var Djt=ct(function(c$r,Tjt){Tjt.exports={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]}});var Rjt=ct(function(l$r,Njt){Njt.exports=function(t){if(!t||typeof t==="string")return!1;return t instanceof Array||Array.isArray(t)||t.length>=0&&(t.splice instanceof Function||Object.getOwnPropertyDescriptor(t,t.length-1)&&t.constructor.name!=="String")}});var Ljt=ct(function(d$r,kjt){var Jei=Rjt(),$ei=Array.prototype.concat,Zei=Array.prototype.slice,Qjt=kjt.exports=function(t){var n=[];for(var o=0,i=t.length;o<i;o++){var r=t[o];if(Jei(r))n=$ei.call(n,Zei.call(r));else n.push(r)}return n};Qjt.wrap=function(e){return function(){return e(Qjt(arguments))}}});var zjt=ct(function(u$r,Ojt){var zne=Djt(),Gne=Ljt(),Fjt=Object.hasOwnProperty,Hjt=Object.create(null);for(One in zne)if(Fjt.call(zne,One))Hjt[zne[One]]=One;var One,Tx=Ojt.exports={to:{},get:{}};Tx.get=function(e){var t=e.substring(0,3).toLowerCase(),n,o;switch(t){case"hsl":n=Tx.get.hsl(e),o="hsl";break;case"hwb":n=Tx.get.hwb(e),o="hwb";break;default:n=Tx.get.rgb(e),o="rgb";break}if(!n)return null;return{model:o,value:n}};Tx.get.rgb=function(e){if(!e)return null;var t=/^#([a-f0-9]{3,4})$/i,n=/^#([a-f0-9]{6})([a-f0-9]{2})?$/i,o=/^rgba?\(\s*([+-]?\d+)(?=[\s,])\s*(?:,\s*)?([+-]?\d+)(?=[\s,])\s*(?:,\s*)?([+-]?\d+)\s*(?:[,|\/]\s*([+-]?[\d\.]+)(%?)\s*)?\)$/,i=/^rgba?\(\s*([+-]?[\d\.]+)\%\s*,?\s*([+-]?[\d\.]+)\%\s*,?\s*([+-]?[\d\.]+)\%\s*(?:[,|\/]\s*([+-]?[\d\.]+)(%?)\s*)?\)$/,r=/^(\w+)$/,s=[0,0,0,1],a,c,l;if(a=e.match(n)){l=a[2],a=a[1];for(c=0;c<3;c++){var d=c*2;s[c]=parseInt(a.slice(d,d+2),16)}if(l)s[3]=parseInt(l,16)/255}else if(a=e.match(t)){a=a[1],l=a[3];for(c=0;c<3;c++)s[c]=parseInt(a[c]+a[c],16);if(l)s[3]=parseInt(l+l,16)/255}else if(a=e.match(o)){for(c=0;c<3;c++)s[c]=parseInt(a[c+1],0);if(a[4])if(a[5])s[3]=parseFloat(a[4])*0.01;else s[3]=parseFloat(a[4])}else if(a=e.match(i)){for(c=0;c<3;c++)s[c]=Math.round(parseFloat(a[c+1])*2.55);if(a[4])if(a[5])s[3]=parseFloat(a[4])*0.01;else s[3]=parseFloat(a[4])}else if(a=e.match(r)){if(a[1]==="transparent")return[0,0,0,0];if(!Fjt.call(zne,a[1]))return null;return s=zne[a[1]],s[3]=1,s}else return null;for(c=0;c<3;c++)s[c]=CT(s[c],0,255);return s[3]=CT(s[3],0,1),s};Tx.get.hsl=function(e){if(!e)return null;var t=/^hsla?\(\s*([+-]?(?:\d{0,3}\.)?\d+)(?:deg)?\s*,?\s*([+-]?[\d\.]+)%\s*,?\s*([+-]?[\d\.]+)%\s*(?:[,|\/]\s*([+-]?(?=\.\d|\d)(?:0|[1-9]\d*)?(?:\.\d*)?(?:[eE][+-]?\d+)?)\s*)?\)$/,n=e.match(t);if(n){var o=parseFloat(n[4]),i=(parseFloat(n[1])%360+360)%360,r=CT(parseFloat(n[2]),0,100),s=CT(parseFloat(n[3]),0,100),a=CT(isNaN(o)?1:o,0,1);return[i,r,s,a]}return null};Tx.get.hwb=function(e){if(!e)return null;var t=/^hwb\(\s*([+-]?\d{0,3}(?:\.\d+)?)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?(?=\.\d|\d)(?:0|[1-9]\d*)?(?:\.\d*)?(?:[eE][+-]?\d+)?)\s*)?\)$/,n=e.match(t);if(n){var o=parseFloat(n[4]),i=(parseFloat(n[1])%360+360)%360,r=CT(parseFloat(n[2]),0,100),s=CT(parseFloat(n[3]),0,100),a=CT(isNaN(o)?1:o,0,1);return[i,r,s,a]}return null};Tx.to.hex=function(){var e=Gne(arguments);return"#"+bye(e[0])+bye(e[1])+bye(e[2])+(e[3]<1?bye(Math.round(e[3]*255)):"")};Tx.to.rgb=function(){var e=Gne(arguments);return e.length<4||e[3]===1?"rgb("+Math.round(e[0])+", "+Math.round(e[1])+", "+Math.round(e[2])+")":"rgba("+Math.round(e[0])+", "+Math.round(e[1])+", "+Math.round(e[2])+", "+e[3]+")"};Tx.to.rgb.percent=function(){var e=Gne(arguments),t=Math.round(e[0]/255*100),n=Math.round(e[1]/255*100),o=Math.round(e[2]/255*100);return e.length<4||e[3]===1?"rgb("+t+"%, "+n+"%, "+o+"%)":"rgba("+t+"%, "+n+"%, "+o+"%, "+e[3]+")"};Tx.to.hsl=function(){var e=Gne(arguments);return e.length<4||e[3]===1?"hsl("+e[0]+", "+e[1]+"%, "+e[2]+"%)":"hsla("+e[0]+", "+e[1]+"%, "+e[2]+"%, "+e[3]+")"};Tx.to.hwb=function(){var e=Gne(arguments),t="";if(e.length>=4&&e[3]!==1)t=", "+e[3];return"hwb("+e[0]+", "+e[1]+"%, "+e[2]+"%"+t+")"};Tx.to.keyword=function(e){return Hjt[e.slice(0,3)]};function CT(e,t,n){return Math.min(Math.max(t,e),n)}function bye(e){var t=Math.round(e).toString(16).toUpperCase();return t.length<2?"0"+t:t}});var Yjt=ct(function(h$r,Gjt){Gjt.exports={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]}});var Eze=ct(function(m$r,Ujt){var Yne=Yjt(),Vjt={};for(let e of Object.keys(Yne))Vjt[Yne[e]]=e;var or={rgb:{channels:3,labels:"rgb"},hsl:{channels:3,labels:"hsl"},hsv:{channels:3,labels:"hsv"},hwb:{channels:3,labels:"hwb"},cmyk:{channels:4,labels:"cmyk"},xyz:{channels:3,labels:"xyz"},lab:{channels:3,labels:"lab"},lch:{channels:3,labels:"lch"},hex:{channels:1,labels:["hex"]},keyword:{channels:1,labels:["keyword"]},ansi16:{channels:1,labels:["ansi16"]},ansi256:{channels:1,labels:["ansi256"]},hcg:{channels:3,labels:["h","c","g"]},apple:{channels:3,labels:["r16","g16","b16"]},gray:{channels:1,labels:["gray"]}};Ujt.exports=or;for(let e of Object.keys(or)){if(!("channels"in or[e]))throw Error("missing channels property: "+e);if(!("labels"in or[e]))throw Error("missing channel labels property: "+e);if(or[e].labels.length!==or[e].channels)throw Error("channel and label counts mismatch: "+e);let{channels:t,labels:n}=or[e];delete or[e].channels,delete or[e].labels,Object.defineProperty(or[e],"channels",{value:t}),Object.defineProperty(or[e],"labels",{value:n})}or.rgb.hsl=function(e){let t=e[0]/255,n=e[1]/255,o=e[2]/255,i=Math.min(t,n,o),r=Math.max(t,n,o),s=r-i,a,c;if(r===i)a=0;else if(t===r)a=(n-o)/s;else if(n===r)a=2+(o-t)/s;else if(o===r)a=4+(t-n)/s;if(a=Math.min(a*60,360),a<0)a+=360;let l=(i+r)/2;if(r===i)c=0;else if(l<=0.5)c=s/(r+i);else c=s/(2-r-i);return[a,c*100,l*100]};or.rgb.hsv=function(e){let t,n,o,i,r,s=e[0]/255,a=e[1]/255,c=e[2]/255,l=Math.max(s,a,c),d=l-Math.min(s,a,c),u=function(h){return(l-h)/6/d+0.5};if(d===0)i=0,r=0;else{if(r=d/l,t=u(s),n=u(a),o=u(c),s===l)i=o-n;else if(a===l)i=0.3333333333333333+t-o;else if(c===l)i=0.6666666666666666+n-t;if(i<0)i+=1;else if(i>1)i-=1}return[i*360,r*100,l*100]};or.rgb.hwb=function(e){let t=e[0],n=e[1],o=e[2],i=or.rgb.hsl(e)[0],r=0.00392156862745098*Math.min(t,Math.min(n,o));return o=1-0.00392156862745098*Math.max(t,Math.max(n,o)),[i,r*100,o*100]};or.rgb.cmyk=function(e){let t=e[0]/255,n=e[1]/255,o=e[2]/255,i=Math.min(1-t,1-n,1-o),r=(1-t-i)/(1-i)||0,s=(1-n-i)/(1-i)||0,a=(1-o-i)/(1-i)||0;return[r*100,s*100,a*100,i*100]};function eti(e,t){return(e[0]-t[0])**2+(e[1]-t[1])**2+(e[2]-t[2])**2}or.rgb.keyword=function(e){let t=Vjt[e];if(t)return t;let n=1/0,o;for(let i of Object.keys(Yne)){let r=Yne[i],s=eti(e,r);if(s<n)n=s,o=i}return o};or.keyword.rgb=function(e){return Yne[e]};or.rgb.xyz=function(e){let t=e[0]/255,n=e[1]/255,o=e[2]/255;t=t>0.04045?((t+0.055)/1.055)**2.4:t/12.92,n=n>0.04045?((n+0.055)/1.055)**2.4:n/12.92,o=o>0.04045?((o+0.055)/1.055)**2.4:o/12.92;let i=t*0.4124+n*0.3576+o*0.1805,r=t*0.2126+n*0.7152+o*0.0722,s=t*0.0193+n*0.1192+o*0.9505;return[i*100,r*100,s*100]};or.rgb.lab=function(e){let t=or.rgb.xyz(e),n=t[0],o=t[1],i=t[2];n/=95.047,o/=100,i/=108.883,n=n>0.008856?n**0.3333333333333333:7.787*n+0.13793103448275862,o=o>0.008856?o**0.3333333333333333:7.787*o+0.13793103448275862,i=i>0.008856?i**0.3333333333333333:7.787*i+0.13793103448275862;let r=116*o-16,s=500*(n-o),a=200*(o-i);return[r,s,a]};or.hsl.rgb=function(e){let t=e[0]/360,n=e[1]/100,o=e[2]/100,i,r,s;if(n===0)return s=o*255,[s,s,s];if(o<0.5)i=o*(1+n);else i=o+n-o*n;let a=2*o-i,c=[0,0,0];for(let l=0;l<3;l++){if(r=t+0.3333333333333333*-(l-1),r<0)r++;if(r>1)r--;if(6*r<1)s=a+(i-a)*6*r;else if(2*r<1)s=i;else if(3*r<2)s=a+(i-a)*(0.6666666666666666-r)*6;else s=a;c[l]=s*255}return c};or.hsl.hsv=function(e){let t=e[0],n=e[1]/100,o=e[2]/100,i=n,r=Math.max(o,0.01);o*=2,n*=o<=1?o:2-o,i*=r<=1?r:2-r;let s=(o+n)/2,a=o===0?2*i/(r+i):2*n/(o+n);return[t,a*100,s*100]};or.hsv.rgb=function(e){let t=e[0]/60,n=e[1]/100,o=e[2]/100,i=Math.floor(t)%6,r=t-Math.floor(t),s=255*o*(1-n),a=255*o*(1-n*r),c=255*o*(1-n*(1-r));switch(o*=255,i){case 0:return[o,c,s];case 1:return[a,o,s];case 2:return[s,o,c];case 3:return[s,a,o];case 4:return[c,s,o];case 5:return[o,s,a]}};or.hsv.hsl=function(e){let t=e[0],n=e[1]/100,o=e[2]/100,i=Math.max(o,0.01),r,s;s=(2-n)*o;let a=(2-n)*i;return r=n*i,r/=a<=1?a:2-a,r=r||0,s/=2,[t,r*100,s*100]};or.hwb.rgb=function(e){let t=e[0]/360,n=e[1]/100,o=e[2]/100,i=n+o,r;if(i>1)n/=i,o/=i;let s=Math.floor(6*t),a=1-o;if(r=6*t-s,(s&1)!==0)r=1-r;let c=n+r*(a-n),l,d,u;switch(s){default:case 6:case 0:l=a,d=c,u=n;break;case 1:l=c,d=a,u=n;break;case 2:l=n,d=a,u=c;break;case 3:l=n,d=c,u=a;break;case 4:l=c,d=n,u=a;break;case 5:l=a,d=n,u=c;break}return[l*255,d*255,u*255]};or.cmyk.rgb=function(e){let t=e[0]/100,n=e[1]/100,o=e[2]/100,i=e[3]/100,r=1-Math.min(1,t*(1-i)+i),s=1-Math.min(1,n*(1-i)+i),a=1-Math.min(1,o*(1-i)+i);return[r*255,s*255,a*255]};or.xyz.rgb=function(e){let t=e[0]/100,n=e[1]/100,o=e[2]/100,i,r,s;return i=t*3.2406+n*-1.5372+o*-0.4986,r=t*-0.9689+n*1.8758+o*0.0415,s=t*0.0557+n*-0.204+o*1.057,i=i>0.0031308?1.055*i**0.4166666666666667-0.055:i*12.92,r=r>0.0031308?1.055*r**0.4166666666666667-0.055:r*12.92,s=s>0.0031308?1.055*s**0.4166666666666667-0.055:s*12.92,i=Math.min(Math.max(0,i),1),r=Math.min(Math.max(0,r),1),s=Math.min(Math.max(0,s),1),[i*255,r*255,s*255]};or.xyz.lab=function(e){let t=e[0],n=e[1],o=e[2];t/=95.047,n/=100,o/=108.883,t=t>0.008856?t**0.3333333333333333:7.787*t+0.13793103448275862,n=n>0.008856?n**0.3333333333333333:7.787*n+0.13793103448275862,o=o>0.008856?o**0.3333333333333333:7.787*o+0.13793103448275862;let i=116*n-16,r=500*(t-n),s=200*(n-o);return[i,r,s]};or.lab.xyz=function(e){let t=e[0],n=e[1],o=e[2],i,r,s;r=(t+16)/116,i=n/500+r,s=r-o/200;let a=r**3,c=i**3,l=s**3;return r=a>0.008856?a:(r-0.13793103448275862)/7.787,i=c>0.008856?c:(i-0.13793103448275862)/7.787,s=l>0.008856?l:(s-0.13793103448275862)/7.787,i*=95.047,r*=100,s*=108.883,[i,r,s]};or.lab.lch=function(e){let t=e[0],n=e[1],o=e[2],i;if(i=Math.atan2(o,n)*360/2/Math.PI,i<0)i+=360;let s=Math.sqrt(n*n+o*o);return[t,s,i]};or.lch.lab=function(e){let t=e[0],n=e[1],i=e[2]/360*2*Math.PI,r=n*Math.cos(i),s=n*Math.sin(i);return[t,r,s]};or.rgb.ansi16=function(e,t=null){let[n,o,i]=e,r=t===null?or.rgb.hsv(e)[2]:t;if(r=Math.round(r/50),r===0)return 30;let s=30+(Math.round(i/255)<<2|Math.round(o/255)<<1|Math.round(n/255));if(r===2)s+=60;return s};or.hsv.ansi16=function(e){return or.rgb.ansi16(or.hsv.rgb(e),e[2])};or.rgb.ansi256=function(e){let t=e[0],n=e[1],o=e[2];if(t===n&&n===o){if(t<8)return 16;if(t>248)return 231;return Math.round((t-8)/247*24)+232}return 16+36*Math.round(t/255*5)+6*Math.round(n/255*5)+Math.round(o/255*5)};or.ansi16.rgb=function(e){let t=e%10;if(t===0||t===7){if(e>50)t+=3.5;return t=t/10.5*255,[t,t,t]}let n=(~~(e>50)+1)*0.5,o=(t&1)*n*255,i=(t>>1&1)*n*255,r=(t>>2&1)*n*255;return[o,i,r]};or.ansi256.rgb=function(e){if(e>=232){let r=(e-232)*10+8;return[r,r,r]}e-=16;let t,n=Math.floor(e/36)/5*255,o=Math.floor((t=e%36)/6)/5*255,i=t%6/5*255;return[n,o,i]};or.rgb.hex=function(e){let n=(((Math.round(e[0])&255)<<16)+((Math.round(e[1])&255)<<8)+(Math.round(e[2])&255)).toString(16).toUpperCase();return"000000".substring(n.length)+n};or.hex.rgb=function(e){let t=e.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);if(!t)return[0,0,0];let n=t[0];if(t[0].length===3)n=n.split("").map((a)=>a+a).join("");let o=parseInt(n,16),i=o>>16&255,r=o>>8&255,s=o&255;return[i,r,s]};or.rgb.hcg=function(e){let t=e[0]/255,n=e[1]/255,o=e[2]/255,i=Math.max(Math.max(t,n),o),r=Math.min(Math.min(t,n),o),s=i-r,a,c;if(s<1)a=r/(1-s);else a=0;if(s<=0)c=0;else if(i===t)c=(n-o)/s%6;else if(i===n)c=2+(o-t)/s;else c=4+(t-n)/s;return c/=6,c%=1,[c*360,s*100,a*100]};or.hsl.hcg=function(e){let t=e[1]/100,n=e[2]/100,o=n<0.5?2*t*n:2*t*(1-n),i=0;if(o<1)i=(n-0.5*o)/(1-o);return[e[0],o*100,i*100]};or.hsv.hcg=function(e){let t=e[1]/100,n=e[2]/100,o=t*n,i=0;if(o<1)i=(n-o)/(1-o);return[e[0],o*100,i*100]};or.hcg.rgb=function(e){let t=e[0]/360,n=e[1]/100,o=e[2]/100;if(n===0)return[o*255,o*255,o*255];let i=[0,0,0],r=t%1*6,s=r%1,a=1-s,c=0;switch(Math.floor(r)){case 0:i[0]=1,i[1]=s,i[2]=0;break;case 1:i[0]=a,i[1]=1,i[2]=0;break;case 2:i[0]=0,i[1]=1,i[2]=s;break;case 3:i[0]=0,i[1]=a,i[2]=1;break;case 4:i[0]=s,i[1]=0,i[2]=1;break;default:i[0]=1,i[1]=0,i[2]=a}return c=(1-n)*o,[(n*i[0]+c)*255,(n*i[1]+c)*255,(n*i[2]+c)*255]};or.hcg.hsv=function(e){let t=e[1]/100,n=e[2]/100,o=t+n*(1-t),i=0;if(o>0)i=t/o;return[e[0],i*100,o*100]};or.hcg.hsl=function(e){let t=e[1]/100,o=e[2]/100*(1-t)+0.5*t,i=0;if(o>0&&o<0.5)i=t/(2*o);else if(o>=0.5&&o<1)i=t/(2*(1-o));return[e[0],i*100,o*100]};or.hcg.hwb=function(e){let t=e[1]/100,n=e[2]/100,o=t+n*(1-t);return[e[0],(o-t)*100,(1-o)*100]};or.hwb.hcg=function(e){let t=e[1]/100,o=1-e[2]/100,i=o-t,r=0;if(i<1)r=(o-i)/(1-i);return[e[0],i*100,r*100]};or.apple.rgb=function(e){return[e[0]/65535*255,e[1]/65535*255,e[2]/65535*255]};or.rgb.apple=function(e){return[e[0]/255*65535,e[1]/255*65535,e[2]/255*65535]};or.gray.rgb=function(e){return[e[0]/100*255,e[0]/100*255,e[0]/100*255]};or.gray.hsl=function(e){return[0,0,e[0]]};or.gray.hsv=or.gray.hsl;or.gray.hwb=function(e){return[0,100,e[0]]};or.gray.cmyk=function(e){return[0,0,0,e[0]]};or.gray.lab=function(e){return[e[0],0,0]};or.gray.hex=function(e){let t=Math.round(e[0]/100*255)&255,o=((t<<16)+(t<<8)+t).toString(16).toUpperCase();return"000000".substring(o.length)+o};or.rgb.gray=function(e){return[(e[0]+e[1]+e[2])/3/255*100]}});var Xjt=ct(function(p$r,Wjt){var Sye=Eze();function tti(){let e={},t=Object.keys(Sye);for(let n=t.length,o=0;o<n;o++)e[t[o]]={distance:-1,parent:null};return e}function nti(e){let t=tti(),n=[e];t[e].distance=0;while(n.length){let o=n.pop(),i=Object.keys(Sye[o]);for(let r=i.length,s=0;s<r;s++){let a=i[s],c=t[a];if(c.distance===-1)c.distance=t[o].distance+1,c.parent=o,n.unshift(a)}}return t}function oti(e,t){return function(n){return t(e(n))}}function iti(e,t){let n=[t[e].parent,e],o=Sye[t[e].parent][e],i=t[e].parent;while(t[i].parent)n.unshift(t[i].parent),o=oti(Sye[t[i].parent][i],o),i=t[i].parent;return o.conversion=n,o}Wjt.exports=function(e){let t=nti(e),n={},o=Object.keys(t);for(let i=o.length,r=0;r<i;r++){let s=o[r];if(t[s].parent===null)continue;n[s]=iti(s,t)}return n}});var jjt=ct(function(A$r,Kjt){var Mze=Eze(),rti=Xjt(),oW={},sti=Object.keys(Mze);function ati(e){let t=function(...n){let o=n[0];if(o===void 0||o===null)return o;if(o.length>1)n=o;return e(n)};if("conversion"in e)t.conversion=e.conversion;return t}function cti(e){let t=function(...n){let o=n[0];if(o===void 0||o===null)return o;if(o.length>1)n=o;let i=e(n);if(typeof i==="object")for(let r=i.length,s=0;s<r;s++)i[s]=Math.round(i[s]);return i};if("conversion"in e)t.conversion=e.conversion;return t}sti.forEach((e)=>{oW[e]={},Object.defineProperty(oW[e],"channels",{value:Mze[e].channels}),Object.defineProperty(oW[e],"labels",{value:Mze[e].labels});let t=rti(e);Object.keys(t).forEach((o)=>{let i=t[o];oW[e][o]=cti(i),oW[e][o].raw=ati(i)})});Kjt.exports=oW});var $jt=ct(function(_$r,Jjt){var iW=zjt(),Dx=jjt(),qjt=["keyword","gray","hex"],Bze={};for(let e of Object.keys(Dx))Bze[[...Dx[e].labels].sort().join("")]=e;var Pye={};function GA(e,t){if(!(this instanceof GA))return new GA(e,t);if(t&&t in qjt)t=null;if(t&&!(t in Dx))throw Error("Unknown model: "+t);let n,o;if(e==null)this.model="rgb",this.color=[0,0,0],this.valpha=1;else if(e instanceof GA)this.model=e.model,this.color=[...e.color],this.valpha=e.valpha;else if(typeof e==="string"){let i=iW.get(e);if(i===null)throw Error("Unable to parse color from string: "+e);this.model=i.model,o=Dx[this.model].channels,this.color=i.value.slice(0,o),this.valpha=typeof i.value[o]==="number"?i.value[o]:1}else if(e.length>0){this.model=t||"rgb",o=Dx[this.model].channels;let i=Array.prototype.slice.call(e,0,o);this.color=wze(i,o),this.valpha=typeof e[o]==="number"?e[o]:1}else if(typeof e==="number")this.model="rgb",this.color=[e>>16&255,e>>8&255,e&255],this.valpha=1;else{this.valpha=1;let i=Object.keys(e);if("alpha"in e)i.splice(i.indexOf("alpha"),1),this.valpha=typeof e.alpha==="number"?e.alpha:0;let r=i.sort().join("");if(!(r in Bze))throw Error("Unable to parse color from object: "+JSON.stringify(e));this.model=Bze[r];let{labels:s}=Dx[this.model],a=[];for(n=0;n<s.length;n++)a.push(e[s[n]]);this.color=wze(a)}if(Pye[this.model]){o=Dx[this.model].channels;for(n=0;n<o;n++){let i=Pye[this.model][n];if(i)this.color[n]=i(this.color[n])}}if(this.valpha=Math.max(0,Math.min(1,this.valpha)),Object.freeze)Object.freeze(this)}GA.prototype={toString(){return this.string()},toJSON(){return this[this.model]()},string(e){let t=this.model in iW.to?this:this.rgb();t=t.round(typeof e==="number"?e:1);let n=t.valpha===1?t.color:[...t.color,this.valpha];return iW.to[t.model](n)},percentString(e){let t=this.rgb().round(typeof e==="number"?e:1),n=t.valpha===1?t.color:[...t.color,this.valpha];return iW.to.rgb.percent(n)},array(){return this.valpha===1?[...this.color]:[...this.color,this.valpha]},object(){let e={},{channels:t}=Dx[this.model],{labels:n}=Dx[this.model];for(let o=0;o<t;o++)e[n[o]]=this.color[o];if(this.valpha!==1)e.alpha=this.valpha;return e},unitArray(){let e=this.rgb().color;if(e[0]/=255,e[1]/=255,e[2]/=255,this.valpha!==1)e.push(this.valpha);return e},unitObject(){let e=this.rgb().object();if(e.r/=255,e.g/=255,e.b/=255,this.valpha!==1)e.alpha=this.valpha;return e},round(e){return e=Math.max(e||0,0),new GA([...this.color.map(dti(e)),this.valpha],this.model)},alpha(e){if(e!==void 0)return new GA([...this.color,Math.max(0,Math.min(1,e))],this.model);return this.valpha},red:b0("rgb",0,zp(255)),green:b0("rgb",1,zp(255)),blue:b0("rgb",2,zp(255)),hue:b0(["hsl","hsv","hsl","hwb","hcg"],0,(e)=>(e%360+360)%360),saturationl:b0("hsl",1,zp(100)),lightness:b0("hsl",2,zp(100)),saturationv:b0("hsv",1,zp(100)),value:b0("hsv",2,zp(100)),chroma:b0("hcg",1,zp(100)),gray:b0("hcg",2,zp(100)),white:b0("hwb",1,zp(100)),wblack:b0("hwb",2,zp(100)),cyan:b0("cmyk",0,zp(100)),magenta:b0("cmyk",1,zp(100)),yellow:b0("cmyk",2,zp(100)),black:b0("cmyk",3,zp(100)),x:b0("xyz",0,zp(95.047)),y:b0("xyz",1,zp(100)),z:b0("xyz",2,zp(108.833)),l:b0("lab",0,zp(100)),a:b0("lab",1),b:b0("lab",2),keyword(e){if(e!==void 0)return new GA(e);return Dx[this.model].keyword(this.color)},hex(e){if(e!==void 0)return new GA(e);return iW.to.hex(this.rgb().round().color)},hexa(e){if(e!==void 0)return new GA(e);let t=this.rgb().round().color,n=Math.round(this.valpha*255).toString(16).toUpperCase();if(n.length===1)n="0"+n;return iW.to.hex(t)+n},rgbNumber(){let e=this.rgb().color;return(e[0]&255)<<16|(e[1]&255)<<8|e[2]&255},luminosity(){let e=this.rgb().color,t=[];for(let[n,o]of e.entries()){let i=o/255;t[n]=i<=0.04045?i/12.92:((i+0.055)/1.055)**2.4}return 0.2126*t[0]+0.7152*t[1]+0.0722*t[2]},contrast(e){let t=this.luminosity(),n=e.luminosity();if(t>n)return(t+0.05)/(n+0.05);return(n+0.05)/(t+0.05)},level(e){let t=this.contrast(e);if(t>=7)return"AAA";return t>=4.5?"AA":""},isDark(){let e=this.rgb().color;return(e[0]*2126+e[1]*7152+e[2]*722)/1e4<128},isLight(){return!this.isDark()},negate(){let e=this.rgb();for(let t=0;t<3;t++)e.color[t]=255-e.color[t];return e},lighten(e){let t=this.hsl();return t.color[2]+=t.color[2]*e,t},darken(e){let t=this.hsl();return t.color[2]-=t.color[2]*e,t},saturate(e){let t=this.hsl();return t.color[1]+=t.color[1]*e,t},desaturate(e){let t=this.hsl();return t.color[1]-=t.color[1]*e,t},whiten(e){let t=this.hwb();return t.color[1]+=t.color[1]*e,t},blacken(e){let t=this.hwb();return t.color[2]+=t.color[2]*e,t},grayscale(){let e=this.rgb().color,t=e[0]*0.3+e[1]*0.59+e[2]*0.11;return GA.rgb(t,t,t)},fade(e){return this.alpha(this.valpha-this.valpha*e)},opaquer(e){return this.alpha(this.valpha+this.valpha*e)},rotate(e){let t=this.hsl(),n=t.color[0];return n=(n+e)%360,n=n<0?360+n:n,t.color[0]=n,t},mix(e,t){if(!e||!e.rgb)throw Error('Argument to "mix" was not a Color instance, but rather an instance of '+typeof e);let n=e.rgb(),o=this.rgb(),i=t===void 0?0.5:t,r=2*i-1,s=n.alpha()-o.alpha(),a=((r*s===-1?r:(r+s)/(1+r*s))+1)/2,c=1-a;return GA.rgb(a*n.red()+c*o.red(),a*n.green()+c*o.green(),a*n.blue()+c*o.blue(),n.alpha()*i+o.alpha()*(1-i))}};for(let e of Object.keys(Dx)){if(qjt.includes(e))continue;let{channels:t}=Dx[e];GA.prototype[e]=function(...n){if(this.model===e)return new GA(this);if(n.length>0)return new GA(n,e);return new GA([...uti(Dx[this.model][e].raw(this.color)),this.valpha],e)},GA[e]=function(...n){let o=n[0];if(typeof o==="number")o=wze(n,t);return new GA(o,e)}}function lti(e,t){return Number(e.toFixed(t))}function dti(e){return function(t){return lti(t,e)}}function b0(e,t,n){e=Array.isArray(e)?e:[e];for(let o of e)(Pye[o]||(Pye[o]=[]))[t]=n;return e=e[0],function(o){let i;if(o!==void 0){if(n)o=n(o);return i=this[e](),i.color[t]=o,i}if(i=this[e]().color[t],n)i=n(i);return i}}function zp(e){return function(t){return Math.max(0,Math.min(e,t))}}function uti(e){return Array.isArray(e)?e:[e]}function wze(e,t){for(let n=0;n<t;n++)if(typeof e[n]!=="number")e[n]=0;return e}Jjt.exports=GA});var tqt=ct(function(g$r,eqt){var{defineProperty:Dze,getOwnPropertyDescriptor:hti,getOwnPropertyNames:mti}=Object,pti=Object.prototype.hasOwnProperty,Ati=(e,t)=>{for(var n in t)Dze(e,n,{get:t[n],enumerable:!0})},_ti=(e,t,n,o)=>{if(t&&typeof t==="object"||typeof t==="function"){for(let i of mti(t))if(!pti.call(e,i)&&i!==n)Dze(e,i,{get:()=>t[i],enumerable:!(o=hti(t,i))||o.enumerable})}return e},gti=(e)=>_ti(Dze({},"__esModule",{value:!0}),e),Zjt={};Ati(Zjt,{executeJscadOperations:()=>Tze,jscadPlanner:()=>fti});eqt.exports=gti(Zjt);var fti={booleans:{intersect:(...e)=>({type:"intersect",shapes:e}),subtract:(...e)=>({type:"subtract",shapes:e}),union:(...e)=>({type:"union",shapes:e})},hulls:{hull:(...e)=>({type:"hull",shapes:e.flat()}),hullChain:(...e)=>({type:"hullChain",shapes:e.flat()})},colors:{colorize:(e,t)=>({type:"colorize",color:e,shape:t})},primitives:{cube:(e)=>({type:"cube",...e}),sphere:(e)=>({type:"sphere",...e}),cylinder:(e)=>({type:"cylinder",...e}),polygon:(e)=>({type:"polygon",...e}),cuboid:(e)=>({type:"cuboid",...e}),roundedCuboid:(e)=>({type:"roundedCuboid",...e})},transforms:{rotate:(e,t)=>({type:"rotate",angles:e,shape:t}),rotateX:(e,t)=>({type:"rotateX",angle:e,shape:t}),rotateY:(e,t)=>({type:"rotateY",angle:e,shape:t}),rotateZ:(e,t)=>({type:"rotateZ",angle:e,shape:t}),scale:(e,t)=>({type:"scale",factors:e,shape:t}),translate:(e,t)=>({type:"translate",vector:e,shape:t})},extrusions:{extrudeLinear:(e,t)=>({type:"extrudeLinear",options:e,shape:t}),extrudeRotate:(e,t)=>({type:"extrudeRotate",options:e,shape:t})},maths:{vec2:{create:(e,t)=>[e,t],fromValues:(e,t)=>[e,t]},vec3:{create:(e,t,n)=>[e,t,n],fromValues:(e,t,n)=>[e,t,n]}},geometries:{geom2:{create:(e)=>({type:"createGeom2",points:e}),fromPoints:(e)=>({type:"fromPointsGeom2",points:e})},geom3:{create:(e)=>({type:"createGeom3",polygons:e})},path2:{create:(e)=>({type:"createPath2",points:e})}},measurements:{measureBoundingBox:(e)=>({type:"measureBoundingBox",shape:e}),measureArea:(e)=>({type:"measureArea",shape:e}),measureVolume:(e)=>({type:"measureVolume",shape:e})},utils:{degToRad:(e)=>e*Math.PI/180,radToDeg:(e)=>e*180/Math.PI}},Tze=(e,t)=>{if(Array.isArray(t)&&t.length===1)return Tze(e,t[0]);if(Array.isArray(t))throw Error("executeJscadOperations currently doesn't support Array<JscadOperation>, try adding a root union or or executing each element individually");let n=(r)=>Tze(e,r),{type:o,...i}=t;switch(o){case"intersect":return e.booleans.intersect(...t.shapes.map(n));case"subtract":return e.booleans.subtract(...t.shapes.map(n));case"union":return e.booleans.union(...t.shapes.map(n));case"hull":return e.hulls.hull(...t.shapes.map(n));case"hullChain":return e.hulls.hullChain(...t.shapes.map(n));case"colorize":return e.colors.colorize(t.color,n(t.shape));case"cube":return e.primitives.cube(i);case"sphere":return e.primitives.sphere(i);case"cylinder":return e.primitives.cylinder(i);case"polygon":return e.primitives.polygon(i);case"cuboid":return e.primitives.cuboid(i);case"roundedCuboid":return e.primitives.roundedCuboid(i);case"rotate":return e.transforms.rotate(t.angles,n(t.shape));case"rotateX":return e.transforms.rotateX(t.angle,n(t.shape));case"rotateY":return e.transforms.rotateY(t.angle,n(t.shape));case"rotateZ":return e.transforms.rotateZ(t.angle,n(t.shape));case"scale":return e.transforms.scale(t.factors,n(t.shape));case"translate":return e.transforms.translate(t.vector,n(t.shape));case"extrudeLinear":return e.extrusions.extrudeLinear(t.options,n(t.shape));case"extrudeRotate":return e.extrusions.extrudeRotate(t.options,n(t.shape));case"createGeom2":return e.geometries.geom2.create(t.points);case"fromPointsGeom2":return e.geometries.geom2.fromPoints(t.points);case"createGeom3":return e.geometries.geom3.create(t.polygons);case"createPath2":return e.geometries.path2.create(t.points);case"measureBoundingBox":return e.measurements.measureBoundingBox(n(t.shape));case"measureArea":return e.measurements.measureArea(n(t.shape));case"measureVolume":return e.measurements.measureVolume(n(t.shape));case"degToRad":return e.utils.degToRad(t.degrees);case"radToDeg":return e.utils.radToDeg(t.radians);default:if(t.type===void 0)throw Error(`Operation type is undefined. This usually means the operation object is malformed or not properly initialized. Operation: ${JSON.stringify(t,null,2).slice(0,200)}...`);throw Error(`Unsupported operation type: ${t.type}. Operation: ${JSON.stringify(t,null,2)}`)}}});var Zr=ct(function(l0s,wpn){var rBi=(e)=>e.flat(1/0);wpn.exports=rBi});var Dpn=ct(function(d0s,Tpn){var sBi=(e)=>Object.assign({},e);Tpn.exports=sBi});var Rpn=ct(function(u0s,Npn){var aBi=(e,t,n)=>(e[0]=t[0]+n[0],e[1]=t[1]+n[1],e[2]=t[2]+n[2],e[3]=t[3]+n[3],e[4]=t[4]+n[4],e[5]=t[5]+n[5],e[6]=t[6]+n[6],e[7]=t[7]+n[7],e[8]=t[8]+n[8],e[9]=t[9]+n[9],e[10]=t[10]+n[10],e[11]=t[11]+n[11],e[12]=t[12]+n[12],e[13]=t[13]+n[13],e[14]=t[14]+n[14],e[15]=t[15]+n[15],e);Npn.exports=aBi});var tIe=ct(function(h0s,Qpn){var cBi=()=>[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1];Qpn.exports=cBi});var Lpn=ct(function(m0s,kpn){var lBi=tIe(),dBi=(e)=>{let t=lBi();return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t[4]=e[4],t[5]=e[5],t[6]=e[6],t[7]=e[7],t[8]=e[8],t[9]=e[9],t[10]=e[10],t[11]=e[11],t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15],t};kpn.exports=dBi});var qXe=ct(function(p0s,Fpn){var uBi=(e,t)=>(e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e[4]=t[4],e[5]=t[5],e[6]=t[6],e[7]=t[7],e[8]=t[8],e[9]=t[9],e[10]=t[10],e[11]=t[11],e[12]=t[12],e[13]=t[13],e[14]=t[14],e[15]=t[15],e);Fpn.exports=uBi});var Opn=ct(function(A0s,Hpn){var hBi=(e,t)=>{let n=t[0],o=t[1],i=t[2],r=t[3],s=t[4],a=t[5],c=t[6],l=t[7],d=t[8],u=t[9],h=t[10],A=t[11],m=t[12],p=t[13],g=t[14],_=t[15],f=n*a-o*s,y=n*c-i*s,x=n*l-r*s,C=o*c-i*a,I=o*l-r*a,b=i*l-r*c,P=d*p-u*m,E=d*g-h*m,B=d*_-A*m,w=u*g-h*p,T=u*_-A*p,Q=h*_-A*g,N=f*Q-y*T+x*w+C*B-I*E+b*P;if(!N)return null;return N=1/N,e[0]=(a*Q-c*T+l*w)*N,e[1]=(i*T-o*Q-r*w)*N,e[2]=(p*b-g*I+_*C)*N,e[3]=(h*I-u*b-A*C)*N,e[4]=(c*B-s*Q-l*E)*N,e[5]=(n*Q-i*B+r*E)*N,e[6]=(g*x-m*b-_*y)*N,e[7]=(d*b-h*x+A*y)*N,e[8]=(s*T-a*B+l*P)*N,e[9]=(o*B-n*T-r*P)*N,e[10]=(m*I-p*x+_*f)*N,e[11]=(u*x-d*I-A*f)*N,e[12]=(a*E-s*w-c*P)*N,e[13]=(n*w-o*E+i*P)*N,e[14]=(p*y-m*C-g*f)*N,e[15]=(d*C-u*y+h*f)*N,e};Hpn.exports=hBi});var Gpn=ct(function(_0s,zpn){var mBi=(e,t)=>e[0]===t[0]&&e[1]===t[1]&&e[2]===t[2]&&e[3]===t[3]&&e[4]===t[4]&&e[5]===t[5]&&e[6]===t[6]&&e[7]===t[7]&&e[8]===t[8]&&e[9]===t[9]&&e[10]===t[10]&&e[11]===t[11]&&e[12]===t[12]&&e[13]===t[13]&&e[14]===t[14]&&e[15]===t[15];zpn.exports=mBi});var Na=ct(function(g0s,Ypn){var pBi=Math.PI*2;Ypn.exports={EPS:0.00001,NEPS:0.0000000000001,TAU:pBi,spatialResolution:1e5}});var qA=ct(function(f0s,Upn){var{NEPS:ABi}=Na(),Vpn=(e)=>Math.abs(e)<ABi?0:e,_Bi=(e)=>Vpn(Math.sin(e)),gBi=(e)=>Vpn(Math.cos(e));Upn.exports={sin:_Bi,cos:gBi}});var JXe=ct(function(y0s,Wpn){var fBi=(e)=>(e[0]=1,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=1,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[10]=1,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,e);Wpn.exports=fBi});var $Xe=ct(function(x0s,Xpn){var{EPS:yBi}=Na(),{sin:xBi,cos:CBi}=qA(),IBi=JXe(),bBi=(e,t,n)=>{let[o,i,r]=n,s=o*o+i*i+r*r;if(Math.abs(s)<yBi)return IBi(e);let a=1/Math.sqrt(s);o*=a,i*=a,r*=a;let c=xBi(t),l=CBi(t),d=1-l;return e[0]=o*o*d+l,e[1]=i*o*d+r*c,e[2]=r*o*d-i*c,e[3]=0,e[4]=o*i*d-r*c,e[5]=i*i*d+l,e[6]=r*i*d+o*c,e[7]=0,e[8]=o*r*d+i*c,e[9]=i*r*d-o*c,e[10]=r*r*d+l,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,e};Xpn.exports=bBi});var jpn=ct(function(C0s,Kpn){var SBi=(e,t)=>(e[0]=t[0],e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=t[1],e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[10]=t[2],e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,e);Kpn.exports=SBi});var Jpn=ct(function(I0s,qpn){var{sin:ZXe,cos:eKe}=qA(),PBi=(e,t,n,o)=>{let i=ZXe(t),r=eKe(t),s=ZXe(n),a=eKe(n),c=ZXe(o),l=eKe(o);return e[0]=a*r,e[1]=a*i,e[2]=-s,e[3]=0,e[4]=c*s*r-l*i,e[5]=l*r+c*s*i,e[6]=c*a,e[7]=0,e[8]=c*i+l*s*r,e[9]=l*s*i-c*r,e[10]=l*a,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,e};qpn.exports=PBi});var Zpn=ct(function(b0s,$pn){var vBi=(e,t)=>(e[0]=1,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=1,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[10]=1,e[11]=0,e[12]=t[0],e[13]=t[1],e[14]=t[2],e[15]=1,e);$pn.exports=vBi});var tAn=ct(function(S0s,eAn){var EBi=tIe(),MBi=(e,t,n,o,i,r,s,a,c,l,d,u,h,A,m,p)=>{let g=EBi();return g[0]=e,g[1]=t,g[2]=n,g[3]=o,g[4]=i,g[5]=r,g[6]=s,g[7]=a,g[8]=c,g[9]=l,g[10]=d,g[11]=u,g[12]=h,g[13]=A,g[14]=m,g[15]=p,g};eAn.exports=MBi});var tKe=ct(function(P0s,nAn){var BBi=(e,t)=>(e[0]=Math.abs(t[0]),e[1]=Math.abs(t[1]),e[2]=Math.abs(t[2]),e);nAn.exports=BBi});var nKe=ct(function(v0s,oAn){var wBi=(e,t,n)=>(e[0]=t[0]+n[0],e[1]=t[1]+n[1],e[2]=t[2]+n[2],e);oAn.exports=wBi});var ire=ct(function(E0s,iAn){var TBi=(e,t)=>e[0]*t[0]+e[1]*t[1]+e[2]*t[2];iAn.exports=TBi});var sAn=ct(function(M0s,rAn){var DBi=ire(),NBi=(e,t)=>{let n=e[0],o=e[1],i=e[2],r=t[0],s=t[1],a=t[2],c=Math.sqrt(n*n+o*o+i*i),l=Math.sqrt(r*r+s*s+a*a),d=c*l,u=d&&DBi(e,t)/d;return Math.acos(Math.min(Math.max(u,-1),1))};rAn.exports=NBi});var rre=ct(function(B0s,aAn){var RBi=()=>[0,0,0];aAn.exports=RBi});var lAn=ct(function(w0s,cAn){var QBi=rre(),kBi=(e)=>{let t=QBi();return t[0]=e[0],t[1]=e[1],t[2]=e[2],t};cAn.exports=kBi});var oKe=ct(function(T0s,dAn){var LBi=(e,t)=>(e[0]=t[0],e[1]=t[1],e[2]=t[2],e);dAn.exports=LBi});var TX=ct(function(D0s,uAn){var FBi=(e,t,n)=>{let o=t[0],i=t[1],r=t[2],s=n[0],a=n[1],c=n[2];return e[0]=i*c-r*a,e[1]=r*s-o*c,e[2]=o*a-i*s,e};uAn.exports=FBi});var iKe=ct(function(N0s,hAn){var HBi=(e,t)=>{let n=t[0]-e[0],o=t[1]-e[1],i=t[2]-e[2];return Math.sqrt(n*n+o*o+i*i)};hAn.exports=HBi});var pAn=ct(function(R0s,mAn){var OBi=(e,t,n)=>(e[0]=t[0]/n[0],e[1]=t[1]/n[1],e[2]=t[2]/n[2],e);mAn.exports=OBi});var _An=ct(function(Q0s,AAn){var zBi=(e,t)=>e[0]===t[0]&&e[1]===t[1]&&e[2]===t[2];AAn.exports=zBi});var fAn=ct(function(k0s,gAn){var GBi=(e,t)=>(e[0]=t,e[1]=t,e[2]=t,e);gAn.exports=GBi});var xAn=ct(function(L0s,yAn){var YBi=rre(),VBi=(e,t,n)=>{let o=YBi();return o[0]=e,o[1]=t,o[2]=n,o};yAn.exports=VBi});var IAn=ct(function(F0s,CAn){var UBi=(e,t,n=0)=>(e[0]=t[0],e[1]=t[1],e[2]=n,e);CAn.exports=UBi});var rKe=ct(function(H0s,bAn){var WBi=(e)=>{let t=e[0],n=e[1],o=e[2];return Math.sqrt(t*t+n*n+o*o)};bAn.exports=WBi});var PAn=ct(function(O0s,SAn){var XBi=(e,t,n,o)=>(e[0]=t[0]+o*(n[0]-t[0]),e[1]=t[1]+o*(n[1]-t[1]),e[2]=t[2]+o*(n[2]-t[2]),e);SAn.exports=XBi});var sKe=ct(function(z0s,vAn){var KBi=(e,t,n)=>(e[0]=Math.max(t[0],n[0]),e[1]=Math.max(t[1],n[1]),e[2]=Math.max(t[2],n[2]),e);vAn.exports=KBi});var aKe=ct(function(G0s,EAn){var jBi=(e,t,n)=>(e[0]=Math.min(t[0],n[0]),e[1]=Math.min(t[1],n[1]),e[2]=Math.min(t[2],n[2]),e);EAn.exports=jBi});var BAn=ct(function(Y0s,MAn){var qBi=(e,t,n)=>(e[0]=t[0]*n[0],e[1]=t[1]*n[1],e[2]=t[2]*n[2],e);MAn.exports=qBi});var TAn=ct(function(V0s,wAn){var JBi=(e,t)=>(e[0]=-t[0],e[1]=-t[1],e[2]=-t[2],e);wAn.exports=JBi});var nIe=ct(function(U0s,DAn){var $Bi=(e,t)=>{let n=t[0],o=t[1],i=t[2],r=n*n+o*o+i*i;if(r>0)r=1/Math.sqrt(r);return e[0]=n*r,e[1]=o*r,e[2]=i*r,e};DAn.exports=$Bi});var RAn=ct(function(W0s,NAn){var ZBi=tKe(),e9i=rre(),t9i=TX(),n9i=(e,t)=>{let n=ZBi(e9i(),t),o=0+(n[0]<n[1]&&n[0]<n[2]),i=0+(n[1]<=n[0]&&n[1]<n[2]),r=0+(n[2]<=n[0]&&n[2]<=n[1]);return t9i(e,t,[o,i,r])};NAn.exports=n9i});var kAn=ct(function(X0s,QAn){var o9i=(e,t,n,o)=>{let i=[],r=[];return i[0]=t[0]-n[0],i[1]=t[1]-n[1],i[2]=t[2]-n[2],r[0]=i[0],r[1]=i[1]*Math.cos(o)-i[2]*Math.sin(o),r[2]=i[1]*Math.sin(o)+i[2]*Math.cos(o),e[0]=r[0]+n[0],e[1]=r[1]+n[1],e[2]=r[2]+n[2],e};QAn.exports=o9i});var FAn=ct(function(K0s,LAn){var i9i=(e,t,n,o)=>{let i=[],r=[];return i[0]=t[0]-n[0],i[1]=t[1]-n[1],i[2]=t[2]-n[2],r[0]=i[2]*Math.sin(o)+i[0]*Math.cos(o),r[1]=i[1],r[2]=i[2]*Math.cos(o)-i[0]*Math.sin(o),e[0]=r[0]+n[0],e[1]=r[1]+n[1],e[2]=r[2]+n[2],e};LAn.exports=i9i});var OAn=ct(function(j0s,HAn){var r9i=(e,t,n,o)=>{let i=[],r=[];return i[0]=t[0]-n[0],i[1]=t[1]-n[1],r[0]=i[0]*Math.cos(o)-i[1]*Math.sin(o),r[1]=i[0]*Math.sin(o)+i[1]*Math.cos(o),e[0]=r[0]+n[0],e[1]=r[1]+n[1],e[2]=t[2],e};HAn.exports=r9i});var cKe=ct(function(q0s,zAn){var s9i=(e,t,n)=>(e[0]=t[0]*n,e[1]=t[1]*n,e[2]=t[2]*n,e);zAn.exports=s9i});var YAn=ct(function(J0s,GAn){var a9i=(e,t,n)=>(e[0]=Math.round(t[0]/n)*n+0,e[1]=Math.round(t[1]/n)*n+0,e[2]=Math.round(t[2]/n)*n+0,e);GAn.exports=a9i});var lKe=ct(function($0s,VAn){var c9i=(e,t)=>{let n=t[0]-e[0],o=t[1]-e[1],i=t[2]-e[2];return n*n+o*o+i*i};VAn.exports=c9i});var dKe=ct(function(Z0s,UAn){var l9i=(e)=>{let t=e[0],n=e[1],o=e[2];return t*t+n*n+o*o};UAn.exports=l9i});var sre=ct(function(ems,WAn){var d9i=(e,t,n)=>(e[0]=t[0]-n[0],e[1]=t[1]-n[1],e[2]=t[2]-n[2],e);WAn.exports=d9i});var KAn=ct(function(tms,XAn){var u9i=(e)=>`[${e[0].toFixed(7)}, ${e[1].toFixed(7)}, ${e[2].toFixed(7)}]`;XAn.exports=u9i});var qAn=ct(function(nms,jAn){var h9i=(e,t,n)=>{let o=t[0],i=t[1],r=t[2],s=n[3]*o+n[7]*i+n[11]*r+n[15];return s=s||1,e[0]=(n[0]*o+n[4]*i+n[8]*r+n[12])/s,e[1]=(n[1]*o+n[5]*i+n[9]*r+n[13])/s,e[2]=(n[2]*o+n[6]*i+n[10]*r+n[14])/s,e};jAn.exports=h9i});var Ji=ct(function(oms,JAn){JAn.exports={abs:tKe(),add:nKe(),angle:sAn(),clone:lAn(),copy:oKe(),create:rre(),cross:TX(),distance:iKe(),divide:pAn(),dot:ire(),equals:_An(),fromScalar:fAn(),fromValues:xAn(),fromVec2:IAn(),length:rKe(),lerp:PAn(),max:sKe(),min:aKe(),multiply:BAn(),negate:TAn(),normalize:nIe(),orthogonal:RAn(),rotateX:kAn(),rotateY:FAn(),rotateZ:OAn(),scale:cKe(),snap:YAn(),squaredDistance:lKe(),squaredLength:dKe(),subtract:sre(),toString:KAn(),transform:qAn()}});var ZAn=ct(function(ims,$An){var ID=Ji(),m9i=$Xe(),p9i=(e,t,n)=>{let o=ID.normalize(ID.create(),t),i=ID.normalize(ID.create(),n),r=ID.cross(ID.create(),i,o),s=ID.dot(i,o);if(s===-1)return m9i(e,Math.PI,ID.orthogonal(r,o));let a=1/(1+s);return e[0]=r[0]*r[0]*a+s,e[1]=r[1]*r[0]*a-r[2],e[2]=r[2]*r[0]*a+r[1],e[3]=0,e[4]=r[0]*r[1]*a+r[2],e[5]=r[1]*r[1]*a+s,e[6]=r[2]*r[1]*a-r[0],e[7]=0,e[8]=r[0]*r[2]*a-r[1],e[9]=r[1]*r[2]*a+r[0],e[10]=r[2]*r[2]*a+s,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,e};$An.exports=p9i});var t_n=ct(function(rms,e_n){var{sin:A9i,cos:_9i}=qA(),g9i=(e,t)=>{let n=A9i(t),o=_9i(t);return e[0]=1,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=o,e[6]=n,e[7]=0,e[8]=0,e[9]=-n,e[10]=o,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,e};e_n.exports=g9i});var o_n=ct(function(sms,n_n){var{sin:f9i,cos:y9i}=qA(),x9i=(e,t)=>{let n=f9i(t),o=y9i(t);return e[0]=o,e[1]=0,e[2]=-n,e[3]=0,e[4]=0,e[5]=1,e[6]=0,e[7]=0,e[8]=n,e[9]=0,e[10]=o,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,e};n_n.exports=x9i});var r_n=ct(function(ams,i_n){var{sin:C9i,cos:I9i}=qA(),b9i=(e,t)=>{let n=C9i(t),o=I9i(t);return e[0]=o,e[1]=n,e[2]=0,e[3]=0,e[4]=-n,e[5]=o,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[10]=1,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,e};i_n.exports=b9i});var a_n=ct(function(cms,s_n){var S9i=(e)=>e[0]===1&&e[1]===0&&e[2]===0&&e[3]===0&&e[4]===0&&e[5]===1&&e[6]===0&&e[7]===0&&e[8]===0&&e[9]===0&&e[10]===1&&e[11]===0&&e[12]===0&&e[13]===0&&e[14]===0&&e[15]===1;s_n.exports=S9i});var l_n=ct(function(lms,c_n){var P9i=(e)=>wB(e[1])&&wB(e[2])&&wB(e[3])&&wB(e[4])&&wB(e[6])&&wB(e[7])&&wB(e[8])&&wB(e[9])&&wB(e[11])&&e[15]===1,wB=(e)=>Math.abs(e)<Number.EPSILON;c_n.exports=P9i});var u_n=ct(function(dms,d_n){var v9i=(e)=>{let t=e[4]*e[9]-e[8]*e[5],n=e[8]*e[1]-e[0]*e[9],o=e[0]*e[5]-e[4]*e[1];return t*e[2]+n*e[6]+o*e[10]<0};d_n.exports=v9i});var m_n=ct(function(ums,h_n){var E9i=(e,t)=>{let[n,o,i,r]=t;return e[0]=1-2*n*n,e[1]=-2*o*n,e[2]=-2*i*n,e[3]=0,e[4]=-2*n*o,e[5]=1-2*o*o,e[6]=-2*i*o,e[7]=0,e[8]=-2*n*i,e[9]=-2*o*i,e[10]=1-2*i*i,e[11]=0,e[12]=2*n*r,e[13]=2*o*r,e[14]=2*i*r,e[15]=1,e};h_n.exports=E9i});var A_n=ct(function(hms,p_n){var M9i=(e,t,n)=>{let o=t[0],i=t[1],r=t[2],s=t[3],a=t[4],c=t[5],l=t[6],d=t[7],u=t[8],h=t[9],A=t[10],m=t[11],p=t[12],g=t[13],_=t[14],f=t[15],y=n[0],x=n[1],C=n[2],I=n[3];return e[0]=y*o+x*a+C*u+I*p,e[1]=y*i+x*c+C*h+I*g,e[2]=y*r+x*l+C*A+I*_,e[3]=y*s+x*d+C*m+I*f,y=n[4],x=n[5],C=n[6],I=n[7],e[4]=y*o+x*a+C*u+I*p,e[5]=y*i+x*c+C*h+I*g,e[6]=y*r+x*l+C*A+I*_,e[7]=y*s+x*d+C*m+I*f,y=n[8],x=n[9],C=n[10],I=n[11],e[8]=y*o+x*a+C*u+I*p,e[9]=y*i+x*c+C*h+I*g,e[10]=y*r+x*l+C*A+I*_,e[11]=y*s+x*d+C*m+I*f,y=n[12],x=n[13],C=n[14],I=n[15],e[12]=y*o+x*a+C*u+I*p,e[13]=y*i+x*c+C*h+I*g,e[14]=y*r+x*l+C*A+I*_,e[15]=y*s+x*d+C*m+I*f,e};p_n.exports=M9i});var g_n=ct(function(mms,__n){var{EPS:B9i}=Na(),{sin:w9i,cos:T9i}=qA(),D9i=qXe(),N9i=(e,t,n,o)=>{let[i,r,s]=o,a=i*i+r*r+s*s;if(Math.abs(a)<B9i)return D9i(e,t);let c=1/Math.sqrt(a);i*=c,r*=c,s*=c;let l=w9i(n),d=T9i(n),u=1-d,h=t[0],A=t[1],m=t[2],p=t[3],g=t[4],_=t[5],f=t[6],y=t[7],x=t[8],C=t[9],I=t[10],b=t[11],P=i*i*u+d,E=r*i*u+s*l,B=s*i*u-r*l,w=i*r*u-s*l,T=r*r*u+d,Q=s*r*u+i*l,N=i*s*u+r*l,F=r*s*u-i*l,H=s*s*u+d;if(e[0]=h*P+g*E+x*B,e[1]=A*P+_*E+C*B,e[2]=m*P+f*E+I*B,e[3]=p*P+y*E+b*B,e[4]=h*w+g*T+x*Q,e[5]=A*w+_*T+C*Q,e[6]=m*w+f*T+I*Q,e[7]=p*w+y*T+b*Q,e[8]=h*N+g*F+x*H,e[9]=A*N+_*F+C*H,e[10]=m*N+f*F+I*H,e[11]=p*N+y*F+b*H,t!==e)e[12]=t[12],e[13]=t[13],e[14]=t[14],e[15]=t[15];return e};__n.exports=N9i});var y_n=ct(function(pms,f_n){var{sin:R9i,cos:Q9i}=qA(),k9i=(e,t,n)=>{let o=R9i(n),i=Q9i(n),r=t[4],s=t[5],a=t[6],c=t[7],l=t[8],d=t[9],u=t[10],h=t[11];if(t!==e)e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e[12]=t[12],e[13]=t[13],e[14]=t[14],e[15]=t[15];return e[4]=r*i+l*o,e[5]=s*i+d*o,e[6]=a*i+u*o,e[7]=c*i+h*o,e[8]=l*i-r*o,e[9]=d*i-s*o,e[10]=u*i-a*o,e[11]=h*i-c*o,e};f_n.exports=k9i});var C_n=ct(function(Ams,x_n){var{sin:L9i,cos:F9i}=qA(),H9i=(e,t,n)=>{let o=L9i(n),i=F9i(n),r=t[0],s=t[1],a=t[2],c=t[3],l=t[8],d=t[9],u=t[10],h=t[11];if(t!==e)e[4]=t[4],e[5]=t[5],e[6]=t[6],e[7]=t[7],e[12]=t[12],e[13]=t[13],e[14]=t[14],e[15]=t[15];return e[0]=r*i-l*o,e[1]=s*i-d*o,e[2]=a*i-u*o,e[3]=c*i-h*o,e[8]=r*o+l*i,e[9]=s*o+d*i,e[10]=a*o+u*i,e[11]=c*o+h*i,e};x_n.exports=H9i});var b_n=ct(function(_ms,I_n){var{sin:O9i,cos:z9i}=qA(),G9i=(e,t,n)=>{let o=O9i(n),i=z9i(n),r=t[0],s=t[1],a=t[2],c=t[3],l=t[4],d=t[5],u=t[6],h=t[7];if(t!==e)e[8]=t[8],e[9]=t[9],e[10]=t[10],e[11]=t[11],e[12]=t[12],e[13]=t[13],e[14]=t[14],e[15]=t[15];return e[0]=r*i+l*o,e[1]=s*i+d*o,e[2]=a*i+u*o,e[3]=c*i+h*o,e[4]=l*i-r*o,e[5]=d*i-s*o,e[6]=u*i-a*o,e[7]=h*i-c*o,e};I_n.exports=G9i});var P_n=ct(function(gms,S_n){var Y9i=(e,t,n)=>{let o=n[0],i=n[1],r=n[2];return e[0]=t[0]*o,e[1]=t[1]*o,e[2]=t[2]*o,e[3]=t[3]*o,e[4]=t[4]*i,e[5]=t[5]*i,e[6]=t[6]*i,e[7]=t[7]*i,e[8]=t[8]*r,e[9]=t[9]*r,e[10]=t[10]*r,e[11]=t[11]*r,e[12]=t[12],e[13]=t[13],e[14]=t[14],e[15]=t[15],e};S_n.exports=Y9i});var E_n=ct(function(fms,v_n){var V9i=(e,t,n)=>(e[0]=t[0]-n[0],e[1]=t[1]-n[1],e[2]=t[2]-n[2],e[3]=t[3]-n[3],e[4]=t[4]-n[4],e[5]=t[5]-n[5],e[6]=t[6]-n[6],e[7]=t[7]-n[7],e[8]=t[8]-n[8],e[9]=t[9]-n[9],e[10]=t[10]-n[10],e[11]=t[11]-n[11],e[12]=t[12]-n[12],e[13]=t[13]-n[13],e[14]=t[14]-n[14],e[15]=t[15]-n[15],e);v_n.exports=V9i});var B_n=ct(function(yms,M_n){var U9i=(e)=>e.map((t)=>t.toFixed(7)).toString();M_n.exports=U9i});var T_n=ct(function(xms,w_n){var W9i=(e,t,n)=>{let o=n[0],i=n[1],r=n[2],s,a,c,l,d,u,h,A,m,p,g,_;if(t===e)e[12]=t[0]*o+t[4]*i+t[8]*r+t[12],e[13]=t[1]*o+t[5]*i+t[9]*r+t[13],e[14]=t[2]*o+t[6]*i+t[10]*r+t[14],e[15]=t[3]*o+t[7]*i+t[11]*r+t[15];else s=t[0],a=t[1],c=t[2],l=t[3],d=t[4],u=t[5],h=t[6],A=t[7],m=t[8],p=t[9],g=t[10],_=t[11],e[0]=s,e[1]=a,e[2]=c,e[3]=l,e[4]=d,e[5]=u,e[6]=h,e[7]=A,e[8]=m,e[9]=p,e[10]=g,e[11]=_,e[12]=s*o+d*i+m*r+t[12],e[13]=a*o+u*i+p*r+t[13],e[14]=c*o+h*i+g*r+t[14],e[15]=l*o+A*i+_*r+t[15];return e};w_n.exports=W9i});var cd=ct(function(Cms,D_n){D_n.exports={add:Rpn(),clone:Lpn(),copy:qXe(),create:tIe(),invert:Opn(),equals:Gpn(),fromRotation:$Xe(),fromScaling:jpn(),fromTaitBryanRotation:Jpn(),fromTranslation:Zpn(),fromValues:tAn(),fromVectorRotation:ZAn(),fromXRotation:t_n(),fromYRotation:o_n(),fromZRotation:r_n(),identity:JXe(),isIdentity:a_n(),isOnlyTransformScale:l_n(),isMirroring:u_n(),mirrorByPlane:m_n(),multiply:A_n(),rotate:g_n(),rotateX:y_n(),rotateY:C_n(),rotateZ:b_n(),scale:P_n(),subtract:E_n(),toString:B_n(),translate:T_n()}});var are=ct(function(Ims,N_n){var X9i=cd(),K9i=(e)=>{if(e===void 0)e=[];return{sides:e,transforms:X9i.create()}};N_n.exports=K9i});var Q_n=ct(function(bms,R_n){var j9i=(e,t)=>(e[0]=Math.abs(t[0]),e[1]=Math.abs(t[1]),e);R_n.exports=j9i});var L_n=ct(function(Sms,k_n){var q9i=(e,t,n)=>(e[0]=t[0]+n[0],e[1]=t[1]+n[1],e);k_n.exports=q9i});var oIe=ct(function(Pms,F_n){var J9i=(e)=>Math.atan2(e[1],e[0]);F_n.exports=J9i});var O_n=ct(function(vms,H_n){var $9i=oIe(),Z9i=(e)=>$9i(e)*57.29577951308232;H_n.exports=Z9i});var cre=ct(function(Ems,z_n){var ewi=()=>[0,0];z_n.exports=ewi});var Y_n=ct(function(Mms,G_n){var twi=cre(),nwi=(e)=>{let t=twi();return t[0]=e[0],t[1]=e[1],t};G_n.exports=nwi});var U_n=ct(function(Bms,V_n){var owi=(e,t)=>(e[0]=t[0],e[1]=t[1],e);V_n.exports=owi});var X_n=ct(function(wms,W_n){var iwi=(e,t,n)=>(e[0]=0,e[1]=0,e[2]=t[0]*n[1]-t[1]*n[0],e);W_n.exports=iwi});var j_n=ct(function(Tms,K_n){var rwi=(e,t)=>{let n=t[0]-e[0],o=t[1]-e[1];return Math.sqrt(n*n+o*o)};K_n.exports=rwi});var J_n=ct(function(Dms,q_n){var swi=(e,t,n)=>(e[0]=t[0]/n[0],e[1]=t[1]/n[1],e);q_n.exports=swi});var Z_n=ct(function(Nms,$_n){var awi=(e,t)=>e[0]*t[0]+e[1]*t[1];$_n.exports=awi});var tgn=ct(function(Rms,egn){var cwi=(e,t)=>e[0]===t[0]&&e[1]===t[1];egn.exports=cwi});var uKe=ct(function(Qms,ngn){var{sin:lwi,cos:dwi}=qA(),uwi=(e,t)=>(e[0]=dwi(t),e[1]=lwi(t),e);ngn.exports=uwi});var ign=ct(function(kms,ogn){var hwi=uKe(),mwi=(e,t)=>hwi(e,t*0.017453292519943295);ogn.exports=mwi});var sgn=ct(function(Lms,rgn){var pwi=(e,t)=>(e[0]=t,e[1]=t,e);rgn.exports=pwi});var cgn=ct(function(Fms,agn){var Awi=cre(),_wi=(e,t)=>{let n=Awi();return n[0]=e,n[1]=t,n};agn.exports=_wi});var dgn=ct(function(Hms,lgn){var gwi=(e)=>Math.sqrt(e[0]*e[0]+e[1]*e[1]);lgn.exports=gwi});var hgn=ct(function(Oms,ugn){var fwi=(e,t,n,o)=>{let i=t[0],r=t[1];return e[0]=i+o*(n[0]-i),e[1]=r+o*(n[1]-r),e};ugn.exports=fwi});var pgn=ct(function(zms,mgn){var ywi=(e,t,n)=>(e[0]=Math.max(t[0],n[0]),e[1]=Math.max(t[1],n[1]),e);mgn.exports=ywi});var _gn=ct(function(Gms,Agn){var xwi=(e,t,n)=>(e[0]=Math.min(t[0],n[0]),e[1]=Math.min(t[1],n[1]),e);Agn.exports=xwi});var fgn=ct(function(Yms,ggn){var Cwi=(e,t,n)=>(e[0]=t[0]*n[0],e[1]=t[1]*n[1],e);ggn.exports=Cwi});var xgn=ct(function(Vms,ygn){var Iwi=(e,t)=>(e[0]=-t[0],e[1]=-t[1],e);ygn.exports=Iwi});var hKe=ct(function(Ums,Cgn){var bwi=(e,t,n,o)=>{let i=t[0]-n[0],r=t[1]-n[1],s=Math.cos(o),a=Math.sin(o);return e[0]=i*s-r*a+n[0],e[1]=i*a+r*s+n[1],e};Cgn.exports=bwi});var bgn=ct(function(Wms,Ign){var{TAU:Swi}=Na(),Pwi=cre(),vwi=hKe(),Ewi=(e,t)=>vwi(e,t,Pwi(),Swi/4);Ign.exports=Ewi});var Pgn=ct(function(Xms,Sgn){var Mwi=(e,t)=>{let n=t[0],o=t[1],i=n*n+o*o;if(i>0)i=1/Math.sqrt(i);return e[0]=n*i,e[1]=o*i,e};Sgn.exports=Mwi});var Egn=ct(function(Kms,vgn){var Bwi=(e,t,n)=>(e[0]=t[0]*n,e[1]=t[1]*n,e);vgn.exports=Bwi});var Bgn=ct(function(jms,Mgn){var wwi=(e,t,n)=>(e[0]=Math.round(t[0]/n)*n+0,e[1]=Math.round(t[1]/n)*n+0,e);Mgn.exports=wwi});var Tgn=ct(function(qms,wgn){var Twi=(e,t)=>{let n=t[0]-e[0],o=t[1]-e[1];return n*n+o*o};wgn.exports=Twi});var Ngn=ct(function(Jms,Dgn){var Dwi=(e)=>{let t=e[0],n=e[1];return t*t+n*n};Dgn.exports=Dwi});var Qgn=ct(function($ms,Rgn){var Nwi=(e,t,n)=>(e[0]=t[0]-n[0],e[1]=t[1]-n[1],e);Rgn.exports=Nwi});var Lgn=ct(function(Zms,kgn){var Rwi=(e)=>`[${e[0].toFixed(7)}, ${e[1].toFixed(7)}]`;kgn.exports=Rwi});var Hgn=ct(function(eps,Fgn){var Qwi=(e,t,n)=>{let o=t[0],i=t[1];return e[0]=n[0]*o+n[4]*i+n[12],e[1]=n[1]*o+n[5]*i+n[13],e};Fgn.exports=Qwi});var Gs=ct(function(tps,Ogn){Ogn.exports={abs:Q_n(),add:L_n(),angle:oIe(),angleDegrees:O_n(),angleRadians:oIe(),clone:Y_n(),copy:U_n(),create:cre(),cross:X_n(),distance:j_n(),divide:J_n(),dot:Z_n(),equals:tgn(),fromAngleDegrees:ign(),fromAngleRadians:uKe(),fromScalar:sgn(),fromValues:cgn(),length:dgn(),lerp:hgn(),max:pgn(),min:_gn(),multiply:fgn(),negate:xgn(),normal:bgn(),normalize:Pgn(),rotate:hKe(),scale:Egn(),snap:Bgn(),squaredDistance:Tgn(),squaredLength:Ngn(),subtract:Qgn(),toString:Lgn(),transform:Hgn()}});var Ggn=ct(function(nps,zgn){var mKe=Gs(),kwi=are(),Lwi=(e)=>{if(!Array.isArray(e))throw Error("the given points must be an array");let t=e.length;if(t<3)throw Error("the given points must define a closed geometry with three or more points");if(mKe.equals(e[0],e[t-1]))--t;let n=[],o=e[t-1];for(let i=0;i<t;i++){let r=e[i];n.push([mKe.clone(o),mKe.clone(r)]),o=r}return kwi(n)};zgn.exports=Lwi});var Ugn=ct(function(ops,Vgn){var Fwi=cd(),Ygn=Gs(),Hwi=are(),Owi=(e)=>{if(e[0]!==0)throw Error("invalid compact binary data");let t=Hwi();t.transforms=Fwi.clone(e.slice(1,17));for(let n=21;n<e.length;n+=4){let o=Ygn.fromValues(e[n+0],e[n+1]),i=Ygn.fromValues(e[n+2],e[n+3]);t.sides.push([o,i])}if(e[17]>=0)t.color=[e[17],e[18],e[19],e[20]];return t};Vgn.exports=Owi});var pKe=ct(function(ips,Wgn){var zwi=(e)=>{if(e&&typeof e==="object"){if("sides"in e&&"transforms"in e){if(Array.isArray(e.sides)&&"length"in e.transforms)return!0}}return!1};Wgn.exports=zwi});var jgn=ct(function(rps,Kgn){var Xgn=cd(),iIe=Gs(),Gwi=(e)=>{if(Xgn.isIdentity(e.transforms))return e;return e.sides=e.sides.map((t)=>{let n=iIe.transform(iIe.create(),t[0],e.transforms),o=iIe.transform(iIe.create(),t[1],e.transforms);return[n,o]}),e.transforms=Xgn.create(),e};Kgn.exports=Gwi});var DX=ct(function(sps,qgn){var Ywi=jgn(),Vwi=(e)=>Ywi(e).sides;qgn.exports=Vwi});var AKe=ct(function(aps,Jgn){var Uwi=are(),Wwi=DX(),Xwi=(e)=>{let n=Wwi(e).map((o)=>[o[1],o[0]]);return n.reverse(),Uwi(n)};Jgn.exports=Xwi});var _Ke=ct(function(cps,$gn){var lre=Gs(),Kwi=DX(),jwi=(e)=>{let t=new Map,n=(o)=>{let i=o.toString();if(t.has(i))return t.get(i);else return t.set(i,o),o};return e.map((o)=>o.map(n))},qwi=(e)=>{let t=new Map;return jwi(e).forEach((o)=>{if(t.has(o[0]))t.get(o[0]).push(o);else t.set(o[0],[o])}),t},Jwi=(e)=>{let t=qwi(Kwi(e)),n=[];while(!0){let o;for(let[s,a]of t){if(o=a.shift(),!o){t.delete(s);continue}break}if(o===void 0)break;let i=[],r=o[0];while(!0){i.push(o[0]);let s=o[1];if(s===r)break;let a=t.get(s);if(!a)throw Error(`geometry is not closed at vertex ${s}`);let c=$wi(o,a);if(a.length===0)t.delete(s);o=c}if(i.length>0)i.push(i.shift());n.push(i)}return t.clear(),n},$wi=(e,t)=>{if(t.length===1)return t.pop();let n=lre.create(),o=lre.angleDegrees(lre.subtract(n,e[1],e[0])),i,r;t.forEach((a,c)=>{let d=lre.angleDegrees(lre.subtract(n,a[1],a[0]))-o;if(d<-180)d+=360;if(d>=180)d-=360;if(r===void 0||d>i)r=c,i=d});let s=t[r];return t.splice(r,1),s};$gn.exports=Jwi});var efn=ct(function(lps,Zgn){var Zwi=DX(),e7i=(e)=>{let n=Zwi(e).map((o)=>o[0]);if(n.length>0)n.push(n.shift());return n};Zgn.exports=e7i});var ofn=ct(function(dps,nfn){var tfn=Gs(),t7i=DX(),n7i=(e)=>{let t=t7i(e),n="geom2 ("+t.length+` sides):
[
`;return t.forEach((o)=>{n+=" ["+tfn.toString(o[0])+", "+tfn.toString(o[1])+`]
`}),n+=`]
`,n};nfn.exports=n7i});var rfn=ct(function(ups,ifn){var o7i=(e)=>{let{sides:t,transforms:n}=e,o=[-1,-1,-1,-1];if(e.color)o=e.color;let i=new Float32Array(21+t.length*4);i[0]=0,i[1]=n[0],i[2]=n[1],i[3]=n[2],i[4]=n[3],i[5]=n[4],i[6]=n[5],i[7]=n[6],i[8]=n[7],i[9]=n[8],i[10]=n[9],i[11]=n[10],i[12]=n[11],i[13]=n[12],i[14]=n[13],i[15]=n[14],i[16]=n[15],i[17]=o[0],i[18]=o[1],i[19]=o[2],i[20]=o[3];for(let r=0;r<t.length;r++){let s=r*4+21,a=t[r][0],c=t[r][1];i[s+0]=a[0],i[s+1]=a[1],i[s+2]=c[0],i[s+3]=c[1]}return i};ifn.exports=o7i});var cfn=ct(function(hps,afn){var sfn=cd(),i7i=AKe(),r7i=(e,t)=>{let n=sfn.multiply(sfn.create(),e,t.transforms),o=Object.assign({},t,{transforms:n});if(e[0]*e[5]-e[4]*e[1]<0)return i7i(o);return o};afn.exports=r7i});var dfn=ct(function(mps,lfn){var s7i=Gs(),a7i=pKe(),c7i=_Ke(),l7i=(e)=>{if(!a7i(e))throw Error("invalid geom2 structure");if(c7i(e),e.sides.forEach((t)=>{if(s7i.equals(t[0],t[1]))throw Error(`geom2 self-edge ${t[0]}`)}),!e.transforms.every(Number.isFinite))throw Error(`geom2 invalid transforms ${e.transforms}`)};lfn.exports=l7i});var Cs=ct(function(pps,ufn){ufn.exports={clone:Dpn(),create:are(),fromPoints:Ggn(),fromCompactBinary:Ugn(),isA:pKe(),reverse:AKe(),toOutlines:_Ke(),toPoints:efn(),toSides:DX(),toString:ofn(),toCompactBinary:rfn(),transform:cfn(),validate:dfn()}});var mfn=ct(function(Aps,hfn){var d7i=(e)=>Object.assign({},e);hfn.exports=d7i});var NX=ct(function(_ps,pfn){var u7i=cd(),h7i=(e)=>{if(e===void 0)e=[];return{polygons:e,transforms:u7i.create()}};pfn.exports=h7i});var ffn=ct(function(gps,gfn){var m7i=TX(),Afn=sre(),_fn=dKe(),p7i=(e,t,n)=>{let o=[],i=[],r=[];Afn(o,n,t),Afn(i,e,t);let s=_fn(m7i(r,i,o)),a=_fn(o);if(a===0)throw Error("a and b are the same point");return s/a},A7i=(e,t,n)=>Math.sqrt(p7i(e,t,n));gfn.exports=A7i});var Cfn=ct(function(fps,xfn){var _7i=TX(),g7i=nIe(),yfn=sre(),f7i=(e,t,n,o)=>{let i=[0,0,0];return yfn(e,t,n),yfn(i,n,o),_7i(e,e,i),g7i(e,e)};xfn.exports=f7i});var Sfn=ct(function(yps,bfn){class Ifn{constructor(){this.head=null,this.tail=null}clear(){this.head=this.tail=null}insertBefore(e,t){if(t.prev=e.prev,t.next=e,!t.prev)this.head=t;else t.prev.next=t;e.prev=t}insertAfter(e,t){if(t.prev=e,t.next=e.next,!t.next)this.tail=t;else t.next.prev=t;e.next=t}add(e){if(!this.head)this.head=e;else this.tail.next=e;e.prev=this.tail,e.next=null,this.tail=e}addAll(e){if(!this.head)this.head=e;else this.tail.next=e;e.prev=this.tail;while(e.next)e=e.next;this.tail=e}remove(e){if(!e.prev)this.head=e.next;else e.prev.next=e.next;if(!e.next)this.tail=e.prev;else e.next.prev=e.prev}removeChain(e,t){if(!e.prev)this.head=t.next;else e.prev.next=t.next;if(!t.next)this.tail=e.prev;else t.next.prev=e.prev}first(){return this.head}isEmpty(){return!this.head}}bfn.exports=Ifn});var Efn=ct(function(xps,vfn){class Pfn{constructor(e,t){this.point=e,this.index=t,this.next=null,this.prev=null,this.face=null}}vfn.exports=Pfn});var wfn=ct(function(Cps,Bfn){var y7i=iKe(),x7i=lKe();class Mfn{constructor(e,t){this.vertex=e,this.face=t,this.next=null,this.prev=null,this.opposite=null}head(){return this.vertex}tail(){return this.prev?this.prev.vertex:null}length(){if(this.tail())return y7i(this.tail().point,this.head().point);return-1}lengthSquared(){if(this.tail())return x7i(this.tail().point,this.head().point);return-1}setOpposite(e){this.opposite=e,e.opposite=this}}Bfn.exports=Mfn});var Dfn=ct(function(Ips,Tfn){var gKe=nKe(),C7i=oKe(),I7i=TX(),fKe=ire(),b7i=rKe(),S7i=nIe(),rIe=cKe(),yKe=sre(),xKe=wfn();class CKe{constructor(){this.normal=[],this.centroid=[],this.offset=0,this.outside=null,this.mark=0,this.edge=null,this.nVertices=0}getEdge(e){if(typeof e!=="number")throw Error("requires a number");let t=this.edge;while(e>0)t=t.next,e-=1;while(e<0)t=t.prev,e+=1;return t}computeNormal(){let e=this.edge,t=e.next,n=t.next,o=yKe([],t.head().point,e.head().point),i=[],r=[];this.nVertices=2,this.normal=[0,0,0];while(n!==e)C7i(r,o),yKe(o,n.head().point,e.head().point),gKe(this.normal,this.normal,I7i(i,r,o)),n=n.next,this.nVertices+=1;this.area=b7i(this.normal),this.normal=rIe(this.normal,this.normal,1/this.area)}computeNormalMinArea(e){if(this.computeNormal(),this.area<e){let t,n=0,o=this.edge;do{let l=o.lengthSquared();if(l>n)t=o,n=l;o=o.next}while(o!==this.edge);let i=t.tail().point,r=t.head().point,s=yKe([],r,i),a=Math.sqrt(n);rIe(s,s,1/a);let c=fKe(this.normal,s);rIe(s,s,-c),gKe(this.normal,this.normal,s),S7i(this.normal,this.normal)}}computeCentroid(){this.centroid=[0,0,0];let e=this.edge;do gKe(this.centroid,this.centroid,e.head().point),e=e.next;while(e!==this.edge);rIe(this.centroid,this.centroid,1/this.nVertices)}computeNormalAndCentroid(e){if(typeof e<"u")this.computeNormalMinArea(e);else this.computeNormal();this.computeCentroid(),this.offset=fKe(this.normal,this.centroid)}distanceToPlane(e){return fKe(this.normal,e)-this.offset}connectHalfEdges(e,t){let n;if(e.opposite.face===t.opposite.face){let o=t.opposite.face,i;if(e===this.edge)this.edge=t;if(o.nVertices===3)i=t.opposite.prev.opposite,o.mark=2,n=o;else{if(i=t.opposite.next,o.edge===i.prev)o.edge=i;i.prev=i.prev.prev,i.prev.next=i}t.prev=e.prev,t.prev.next=t,t.setOpposite(i),o.computeNormalAndCentroid()}else e.next=t,t.prev=e;return n}mergeAdjacentFaces(e,t){let n=e.opposite,o=n.face;t.push(o),o.mark=2;let{prev:i,next:r}=e,{prev:s,next:a}=n;while(i.opposite.face===o)i=i.prev,a=a.next;while(r.opposite.face===o)r=r.next,s=s.prev;let c;for(c=a;c!==s.next;c=c.next)c.face=this;this.edge=r;let l;if(l=this.connectHalfEdges(s,r),l)t.push(l);if(l=this.connectHalfEdges(i,a),l)t.push(l);return this.computeNormalAndCentroid(),t}collectIndices(){let e=[],t=this.edge;do e.push(t.head().index),t=t.next;while(t!==this.edge);return e}static createTriangle(e,t,n,o=0){let i=new CKe,r=new xKe(e,i),s=new xKe(t,i),a=new xKe(n,i);return r.next=a.prev=s,s.next=r.prev=a,a.next=s.prev=r,i.edge=r,i.computeNormalAndCentroid(o),i}}Tfn.exports={VISIBLE:0,NON_CONVEX:1,DELETED:2,Face:CKe}});var Lfn=ct(function(bps,kfn){var IKe=ire(),P7i=ffn(),v7i=Cfn(),Nfn=Sfn(),E7i=Efn(),{Face:TB,VISIBLE:RX,NON_CONVEX:Rfn,DELETED:M7i}=Dfn();class Qfn{constructor(e){if(!Array.isArray(e))throw TypeError("input is not a valid array");if(e.length<4)throw Error("cannot build a simplex out of <4 points");this.tolerance=-1,this.nFaces=0,this.nPoints=e.length,this.faces=[],this.newFaces=[],this.claimed=new Nfn,this.unclaimed=new Nfn,this.vertices=[];for(let t=0;t<e.length;t+=1)this.vertices.push(new E7i(e[t],t));this.discardedFaces=[],this.vertexPointIndices=[]}addVertexToFace(e,t){if(e.face=t,!t.outside)this.claimed.add(e);else this.claimed.insertBefore(t.outside,e);t.outside=e}removeVertexFromFace(e,t){if(e===t.outside)if(e.next&&e.next.face===t)t.outside=e.next;else t.outside=null;this.claimed.remove(e)}removeAllVerticesFromFace(e){if(e.outside){let t=e.outside;while(t.next&&t.next.face===e)t=t.next;return this.claimed.removeChain(e.outside,t),t.next=null,e.outside}}deleteFaceVertices(e,t){let n=this.removeAllVerticesFromFace(e);if(n)if(!t)this.unclaimed.addAll(n);else{let o;for(let i=n;i;i=o)if(o=i.next,t.distanceToPlane(i.point)>this.tolerance)this.addVertexToFace(i,t);else this.unclaimed.add(i)}}resolveUnclaimedPoints(e){let t=this.unclaimed.first();for(let n=t;n;n=t){t=n.next;let o=this.tolerance,i;for(let r=0;r<e.length;r+=1){let s=e[r];if(s.mark===RX){let a=s.distanceToPlane(n.point);if(a>o)o=a,i=s;if(o>1000*this.tolerance)break}}if(i)this.addVertexToFace(n,i)}}computeExtremes(){let e=[],t=[],n=[],o=[],i,r;for(i=0;i<3;i+=1)n[i]=o[i]=this.vertices[0];for(i=0;i<3;i+=1)e[i]=t[i]=this.vertices[0].point[i];for(i=1;i<this.vertices.length;i+=1){let s=this.vertices[i],a=s.point;for(r=0;r<3;r+=1)if(a[r]<e[r])e[r]=a[r],n[r]=s;for(r=0;r<3;r+=1)if(a[r]>t[r])t[r]=a[r],o[r]=s}return this.tolerance=3*Number.EPSILON*(Math.max(Math.abs(e[0]),Math.abs(t[0]))+Math.max(Math.abs(e[1]),Math.abs(t[1]))+Math.max(Math.abs(e[2]),Math.abs(t[2]))),[n,o]}createInitialSimplex(){let e=this.vertices,[t,n]=this.computeExtremes(),o,i,r,s,a=0,c=0;for(r=0;r<3;r+=1){let m=n[r].point[r]-t[r].point[r];if(m>a)a=m,c=r}let l=t[c],d=n[c];a=0;for(r=0;r<this.vertices.length;r+=1){let m=this.vertices[r];if(m!==l&&m!==d){let p=P7i(m.point,l.point,d.point);if(p>a)a=p,o=m}}let u=v7i([],l.point,d.point,o.point),h=IKe(l.point,u);a=-1;for(r=0;r<this.vertices.length;r+=1){let m=this.vertices[r];if(m!==l&&m!==d&&m!==o){let p=Math.abs(IKe(u,m.point)-h);if(p>a)a=p,i=m}}let A=[];if(IKe(i.point,u)-h<0){A.push(TB.createTriangle(l,d,o),TB.createTriangle(i,d,l),TB.createTriangle(i,o,d),TB.createTriangle(i,l,o));for(r=0;r<3;r+=1){let m=(r+1)%3;A[r+1].getEdge(2).setOpposite(A[0].getEdge(m)),A[r+1].getEdge(1).setOpposite(A[m+1].getEdge(0))}}else{A.push(TB.createTriangle(l,o,d),TB.createTriangle(i,l,d),TB.createTriangle(i,d,o),TB.createTriangle(i,o,l));for(r=0;r<3;r+=1){let m=(r+1)%3;A[r+1].getEdge(2).setOpposite(A[0].getEdge((3-r)%3)),A[r+1].getEdge(0).setOpposite(A[m+1].getEdge(1))}}for(r=0;r<4;r+=1)this.faces.push(A[r]);for(r=0;r<e.length;r+=1){let m=e[r];if(m!==l&&m!==d&&m!==o&&m!==i){a=this.tolerance;let p;for(s=0;s<4;s+=1){let g=A[s].distanceToPlane(m.point);if(g>a)a=g,p=A[s]}if(p)this.addVertexToFace(m,p)}}}reindexFaceAndVertices(){let e=[];for(let t=0;t<this.faces.length;t+=1){let n=this.faces[t];if(n.mark===RX)e.push(n)}this.faces=e}collectFaces(e){let t=[];for(let n=0;n<this.faces.length;n+=1){if(this.faces[n].mark!==RX)throw Error("attempt to include a destroyed face in the hull");let o=this.faces[n].collectIndices();if(e)t.push(o);else for(let i=0;i<o.length-2;i+=1)t.push([o[0],o[i+1],o[i+2]])}return t}nextVertexToAdd(){if(!this.claimed.isEmpty()){let e,t,n=0,o=this.claimed.first().face;for(t=o.outside;t&&t.face===o;t=t.next){let i=o.distanceToPlane(t.point);if(i>n)n=i,e=t}return e}}computeHorizon(e,t,n,o){this.deleteFaceVertices(n),n.mark=M7i;let i;if(!t)i=t=n.getEdge(0);else i=t.next;do{let r=i.opposite,s=r.face;if(s.mark===RX)if(s.distanceToPlane(e)>this.tolerance)this.computeHorizon(e,r,s,o);else o.push(i);i=i.next}while(i!==t)}addAdjoiningFace(e,t){let n=TB.createTriangle(e,t.tail(),t.head());return this.faces.push(n),n.getEdge(-1).setOpposite(t.opposite),n.getEdge(0)}addNewFaces(e,t){this.newFaces=[];let n,o;for(let i=0;i<t.length;i+=1){let r=t[i],s=this.addAdjoiningFace(e,r);if(!n)n=s;else s.next.setOpposite(o);this.newFaces.push(s.face),o=s}n.next.setOpposite(o)}oppositeFaceDistance(e){return e.face.distanceToPlane(e.opposite.face.centroid)}doAdjacentMerge(e,t){let n=e.edge,o=!0,i=0;do{if(i>=e.nVertices)throw Error("merge recursion limit exceeded");let r=n.opposite.face,s=!1;if(t===2){if(this.oppositeFaceDistance(n)>-this.tolerance||this.oppositeFaceDistance(n.opposite)>-this.tolerance)s=!0}else if(e.area>r.area){if(this.oppositeFaceDistance(n)>-this.tolerance)s=!0;else if(this.oppositeFaceDistance(n.opposite)>-this.tolerance)o=!1}else if(this.oppositeFaceDistance(n.opposite)>-this.tolerance)s=!0;else if(this.oppositeFaceDistance(n)>-this.tolerance)o=!1;if(s){let a=e.mergeAdjacentFaces(n,[]);for(let c=0;c<a.length;c+=1)this.deleteFaceVertices(a[c],e);return!0}n=n.next,i+=1}while(n!==e.edge);if(!o)e.mark=Rfn;return!1}addVertexToHull(e){let t=[];this.unclaimed.clear(),this.removeVertexFromFace(e,e.face),this.computeHorizon(e.point,null,e.face,t),this.addNewFaces(e,t);for(let n=0;n<this.newFaces.length;n+=1){let o=this.newFaces[n];if(o.mark===RX)while(this.doAdjacentMerge(o,1));}for(let n=0;n<this.newFaces.length;n+=1){let o=this.newFaces[n];if(o.mark===Rfn){o.mark=RX;while(this.doAdjacentMerge(o,2));}}this.resolveUnclaimedPoints(this.newFaces)}build(){let e;this.createInitialSimplex();while(e=this.nextVertexToAdd())this.addVertexToHull(e);this.reindexFaceAndVertices()}}kfn.exports=Qfn});var bKe=ct(function(Sps,Ffn){var B7i=Lfn(),w7i=(e,t={})=>{let n=new B7i(e);return n.build(),n.collectFaces(t.skipTriangulation)};Ffn.exports=w7i});var GF=ct(function(Pps,Hfn){var T7i=(e)=>{if(e===void 0||e.length<3)e=[];return{vertices:e}};Hfn.exports=T7i});var zfn=ct(function(vps,Ofn){var D7i=GF(),N7i=Ji(),R7i=(...e)=>{let t,n;if(e.length===1)t=D7i(),n=e[0];else t=e[0],n=e[1];return t.vertices=n.vertices.map((o)=>N7i.clone(o)),t};Ofn.exports=R7i});var Yfn=ct(function(Eps,Gfn){var Q7i=Ji(),k7i=GF(),L7i=(e)=>{let t=e.map((n)=>Q7i.clone(n));return k7i(t)};Gfn.exports=L7i});var Ufn=ct(function(Mps,Vfn){var F7i=GF(),H7i=(e,t)=>{let n=F7i(e);return n.plane=t,n};Vfn.exports=H7i});var dre=ct(function(Bps,Wfn){var O7i=()=>[0,0,0,0];Wfn.exports=O7i});var SKe=ct(function(wps,Xfn){var z7i=dre(),G7i=(e)=>{let t=z7i();return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t};Xfn.exports=G7i});var PKe=ct(function(Tps,Kfn){var Y7i=(e,t)=>(e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e);Kfn.exports=Y7i});var vKe=ct(function(Dps,jfn){var V7i=(e,t)=>e[0]===t[0]&&e[1]===t[1]&&e[2]===t[2]&&e[3]===t[3];jfn.exports=V7i});var EKe=ct(function(Nps,qfn){var U7i=(e,t)=>(e[0]=-t[0],e[1]=-t[1],e[2]=-t[2],e[3]=-t[3],e);qfn.exports=U7i});var BKe=ct(function(Rps,Jfn){var MKe=Ji(),W7i=(e,t,n)=>{let o=MKe.normalize(MKe.create(),t),i=MKe.dot(n,o);return e[0]=o[0],e[1]=o[1],e[2]=o[2],e[3]=i,e};Jfn.exports=W7i});var wKe=ct(function(Qps,$fn){var X7i=dre(),K7i=(e,t,n,o)=>{let i=X7i();return i[0]=e,i[1]=t,i[2]=n,i[3]=o,i};$fn.exports=K7i});var e1n=ct(function(kps,Zfn){var Ux=Ji(),j7i=BKe(),q7i=(e,...t)=>{e[0]=0,e[1]=0,e[2]=0,e[3]=0;let n=t.length;t.forEach((A)=>{Ux.add(e,e,A)}),Ux.scale(e,e,1/n);let o=0,i=0,r=0,s=0,a=0,c=0,l=Ux.create();t.forEach((A)=>{Ux.subtract(l,A,e),o+=l[0]*l[0],i+=l[0]*l[1],r+=l[0]*l[2],s+=l[1]*l[1],a+=l[1]*l[2],c+=l[2]*l[2]}),o/=n,i/=n,r/=n,s/=n,a/=n,c/=n,l[0]=0,l[1]=0,l[2]=0;let d=Ux.create(),u=s*c-a*a;d[0]=u,d[1]=r*a-i*c,d[2]=i*a-r*s;let h=u*u;if(Ux.add(l,l,Ux.scale(d,d,h)),u=o*c-r*r,d[0]=r*a-i*c,d[1]=u,d[2]=i*r-a*o,h=u*u,Ux.dot(l,d)<0)h=-h;if(Ux.add(l,l,Ux.scale(d,d,h)),u=o*s-i*i,d[0]=i*a-r*s,d[1]=i*r-a*o,d[2]=u,h=u*u,Ux.dot(l,d)<0)h=-h;return Ux.add(l,l,Ux.scale(d,d,h)),j7i(e,l,e)};Zfn.exports=q7i});var TKe=ct(function(Lps,t1n){var F3=Ji(),J7i=(e,...t)=>{let n=t.length,o=F3.create(),i=F3.create(),r=(s)=>{let a=t[s],c=t[(s+1)%n],l=t[(s+2)%n];return F3.subtract(o,c,a),F3.subtract(i,l,a),F3.cross(o,o,i),F3.normalize(o,o),o};if(e[0]=0,e[1]=0,e[2]=0,n===3)F3.copy(e,r(0));else t.forEach((s,a)=>{F3.add(e,e,r(a))}),F3.normalize(e,e);return e[3]=F3.dot(e,t[0]),e};t1n.exports=J7i});var o1n=ct(function(Fps,n1n){var{EPS:DKe}=Na(),w1=Ji(),$7i=(e,t,n,o)=>{let i=w1.subtract(w1.create(),n,t),r=w1.subtract(w1.create(),o,t);if(w1.length(i)<DKe)i=w1.orthogonal(i,r);if(w1.length(r)<DKe)r=w1.orthogonal(r,i);let s=w1.cross(w1.create(),i,r);if(w1.length(s)<DKe)r=w1.orthogonal(r,i),s=w1.cross(s,i,r);s=w1.normalize(s,s);let a=w1.dot(s,t);return e[0]=s[0],e[1]=s[1],e[2]=s[2],e[3]=a,e};n1n.exports=$7i});var r1n=ct(function(Hps,i1n){var Z7i=Ji(),e8i=(e,t)=>{let n=t[0]*e[0]+t[1]*e[1]+t[2]*e[2]-e[3],o=t[0]-n*e[0],i=t[1]-n*e[1],r=t[2]-n*e[2];return Z7i.fromValues(o,i,r)};i1n.exports=e8i});var NKe=ct(function(Ops,s1n){var t8i=Ji(),n8i=(e,t)=>t8i.dot(e,t)-e[3];s1n.exports=n8i});var RKe=ct(function(zps,a1n){var o8i=(e)=>`(${e[0].toFixed(9)}, ${e[1].toFixed(9)}, ${e[2].toFixed(9)}, ${e[3].toFixed(9)})`;a1n.exports=o8i});var l1n=ct(function(Gps,c1n){var i8i=cd(),T1=Ji(),r8i=TKe(),s8i=EKe(),a8i=(e,t,n)=>{let o=i8i.isMirroring(n),i=T1.orthogonal(T1.create(),t),r=T1.cross(i,t,i),s=T1.cross(T1.create(),t,r),a=T1.fromScalar(T1.create(),t[3]);T1.multiply(a,a,t);let c=T1.add(T1.create(),a,r),l=T1.add(T1.create(),a,s);if(a=T1.transform(a,a,n),c=T1.transform(c,c,n),l=T1.transform(l,l,n),r8i(e,a,c,l),o)s8i(e,e);return e};c1n.exports=a8i});var VS=ct(function(Yps,d1n){d1n.exports={clone:SKe(),copy:PKe(),create:dre(),equals:vKe(),flip:EKe(),fromNormalAndPoint:BKe(),fromValues:wKe(),fromNoisyPoints:e1n(),fromPoints:TKe(),fromPointsRandom:o1n(),projectionOfPoint:r1n(),signedDistanceToPoint:NKe(),toString:RKe(),transform:l1n()}});var m1n=ct(function(Vps,h1n){var u1n=VS(),c8i=GF(),l8i=(e)=>{let t=e.vertices.slice().reverse(),n=c8i(t);if(e.plane)n.plane=u1n.flip(u1n.create(),e.plane);return n};h1n.exports=l8i});var QKe=ct(function(Ups,p1n){var d8i=(e)=>{if(e&&typeof e==="object"){if("vertices"in e){if(Array.isArray(e.vertices))return!0}}return!1};p1n.exports=d8i});var kKe=ct(function(Wps,_1n){var A1n=VS(),YF=Ji(),u8i=(e)=>h8i(e.vertices),h8i=(e)=>{let t=e.length;if(t>2){let n=A1n.fromPoints(A1n.create(),...e),o=e[t-2],i=e[t-1];for(let r=0;r<t;r++){let s=e[r];if(!m8i(o,i,s,n))return!1;o=i,i=s}}return!0},m8i=(e,t,n,o)=>{let i=YF.cross(YF.create(),YF.subtract(YF.create(),t,e),YF.subtract(YF.create(),n,t));return YF.dot(i,o)>=0};_1n.exports=u8i});var sIe=ct(function(Xps,f1n){var g1n=VS(),p8i=(e)=>{if(!e.plane)e.plane=g1n.fromPoints(g1n.create(),...e.vertices);return e.plane};f1n.exports=p8i});var LKe=ct(function(Kps,y1n){var A8i=sIe(),_8i=(e)=>{let t=e.vertices.length;if(t<3)return 0;let n=e.vertices,o=A8i(e),i=Math.abs(o[0]),r=Math.abs(o[1]),s=Math.abs(o[2]);if(i+r+s===0)return 0;let a=3;if(i>r&&i>s)a=1;else if(r>s)a=2;let c=0,l=0,d=1,u=2;switch(a){case 1:for(d=1;d<t;d++)l=d-1,u=(d+1)%t,c+=n[d][1]*(n[u][2]-n[l][2]);c+=n[0][1]*(n[1][2]-n[t-1][2]),c/=2*o[0];break;case 2:for(d=1;d<t;d++)l=d-1,u=(d+1)%t,c+=n[d][2]*(n[u][0]-n[l][0]);c+=n[0][2]*(n[1][0]-n[t-1][0]),c/=2*o[1];break;case 3:default:for(d=1;d<t;d++)l=d-1,u=(d+1)%t,c+=n[d][0]*(n[u][1]-n[l][1]);c+=n[0][0]*(n[1][1]-n[t-1][1]),c/=2*o[2];break}return c};y1n.exports=_8i});var C1n=ct(function(jps,x1n){var ure=Ji(),g8i=(e)=>{let t=e.vertices,n=t.length,o=n===0?ure.create():ure.clone(t[0]),i=ure.clone(o);for(let r=1;r<n;r++)ure.min(o,o,t[r]),ure.max(i,i,t[r]);return[o,i]};x1n.exports=g8i});var b1n=ct(function(qps,I1n){var f8i=(e,t)=>e[0]*t[0]+e[1]*t[1]+e[2]*t[2]+e[3]*t[3];I1n.exports=f8i});var P1n=ct(function(Jps,S1n){var y8i=(e,t)=>(e[0]=t,e[1]=t,e[2]=t,e[3]=t,e);S1n.exports=y8i});var E1n=ct(function($ps,v1n){var x8i=(e,t,n)=>{let[o,i,r,s]=t;return e[0]=n[0]*o+n[4]*i+n[8]*r+n[12]*s,e[1]=n[1]*o+n[5]*i+n[9]*r+n[13]*s,e[2]=n[2]*o+n[6]*i+n[10]*r+n[14]*s,e[3]=n[3]*o+n[7]*i+n[11]*r+n[15]*s,e};v1n.exports=x8i});var FKe=ct(function(Zps,M1n){M1n.exports={clone:SKe(),copy:PKe(),create:dre(),dot:b1n(),equals:vKe(),fromScalar:P1n(),fromValues:wKe(),toString:RKe(),transform:E1n()}});var T1n=ct(function(eAs,w1n){var C8i=FKe(),B1n=new WeakMap,I8i=(e)=>{let t=B1n.get(e);if(t)return t;let n=e.vertices,o=C8i.create();if(n.length===0)return o[0]=0,o[1]=0,o[2]=0,o[3]=0,o;let i=n[0],r=i,s=i,a=i,c=i,l=i;n.forEach((A)=>{if(i[0]>A[0])i=A;if(r[1]>A[1])r=A;if(s[2]>A[2])s=A;if(a[0]<A[0])a=A;if(c[1]<A[1])c=A;if(l[2]<A[2])l=A}),o[0]=(i[0]+a[0])*0.5,o[1]=(r[1]+c[1])*0.5,o[2]=(s[2]+l[2])*0.5;let d=o[0]-a[0],u=o[1]-c[1],h=o[2]-l[2];return o[3]=Math.sqrt(d*d+u*u+h*h),B1n.set(e,o),o};w1n.exports=I8i});var N1n=ct(function(tAs,D1n){var HKe=Ji(),b8i=(e)=>{let t=0,n=e.vertices,o=HKe.create();for(let i=0;i<n.length-2;i++)HKe.cross(o,n[i+1],n[i+2]),t+=HKe.dot(n[0],o);return t/=6,t};D1n.exports=b8i});var Q1n=ct(function(nAs,R1n){var S8i=(e)=>e.vertices;R1n.exports=S8i});var L1n=ct(function(oAs,k1n){var P8i=Ji(),v8i=(e)=>{let t="poly3: vertices: [";return e.vertices.forEach((n)=>{t+=`${P8i.toString(n)}, `}),t+="]",t};k1n.exports=v8i});var O1n=ct(function(iAs,H1n){var E8i=cd(),F1n=Ji(),M8i=GF(),B8i=(e,t)=>{let n=t.vertices.map((o)=>F1n.transform(F1n.create(),o,e));if(E8i.isMirroring(e))n.reverse();return M8i(n)};H1n.exports=B8i});var G1n=ct(function(rAs,z1n){var w8i=NKe(),{NEPS:T8i}=Na(),D8i=Ji(),N8i=QKe(),R8i=kKe(),Q8i=LKe(),k8i=sIe(),L8i=(e)=>{if(!N8i(e))throw Error("invalid poly3 structure");if(e.vertices.length<3)throw Error(`poly3 not enough vertices ${e.vertices.length}`);if(Q8i(e)<=0)throw Error("poly3 area must be greater than zero");for(let t=0;t<e.vertices.length;t++)if(D8i.equals(e.vertices[t],e.vertices[(t+1)%e.vertices.length]))throw Error(`poly3 duplicate vertex ${e.vertices[t]}`);if(!R8i(e))throw Error("poly3 must be convex");if(e.vertices.forEach((t)=>{if(!t.every(Number.isFinite))throw Error(`poly3 invalid vertex ${t}`)}),e.vertices.length>3){let t=k8i(e);e.vertices.forEach((n)=>{let o=Math.abs(w8i(t,n));if(o>T8i)throw Error(`poly3 must be coplanar: vertex ${n} distance ${o}`)})}};z1n.exports=L8i});var ga=ct(function(sAs,Y1n){Y1n.exports={clone:zfn(),create:GF(),fromPoints:Yfn(),fromPointsAndPlane:Ufn(),invert:m1n(),isA:QKe(),isConvex:kKe(),measureArea:LKe(),measureBoundingBox:C1n(),measureBoundingSphere:T1n(),measureSignedVolume:N1n(),plane:sIe(),toPoints:Q1n(),toString:L1n(),transform:O1n(),validate:G1n()}});var U1n=ct(function(aAs,V1n){var F8i=bKe(),H8i=NX(),O8i=ga(),z8i=(e)=>{if(!Array.isArray(e))throw Error("the given points must be an array");let n=F8i(e,{skipTriangulation:!0}).map((o)=>{let i=o.map((r)=>e[r]);return O8i.create(i)});return H8i(n)};V1n.exports=z8i});var X1n=ct(function(cAs,W1n){var G8i=ga(),Y8i=NX(),V8i=(e)=>{if(!Array.isArray(e))throw Error("the given points must be an array");let t=e.map((o,i)=>G8i.create(o));return Y8i(t)};W1n.exports=V8i});var j1n=ct(function(lAs,K1n){var U8i=Ji(),W8i=cd(),X8i=ga(),K8i=NX(),j8i=(e)=>{if(e[0]!==1)throw Error("invalid compact binary data");let t=K8i();t.transforms=W8i.clone(e.slice(1,17));let n=e[21],o=22,i=e.length-n*3;while(i<e.length){let r=e[o];o++;let s=[];for(let a=0;a<r;a++)s.push(U8i.fromValues(e[i],e[i+1],e[i+2])),i+=3;t.polygons.push(X8i.create(s))}if(e[17]>=0)t.color=[e[17],e[18],e[19],e[20]];return t};K1n.exports=j8i});var $1n=ct(function(dAs,J1n){var q1n=cd(),q8i=ga(),J8i=(e)=>{if(q1n.isIdentity(e.transforms))return e;return e.polygons=e.polygons.map((t)=>q8i.transform(e.transforms,t)),e.transforms=q1n.create(),e};J1n.exports=J8i});var QX=ct(function(uAs,Z1n){var $8i=$1n(),Z8i=(e)=>$8i(e).polygons;Z1n.exports=Z8i});var tyn=ct(function(hAs,eyn){var eTi=ga(),tTi=NX(),nTi=QX(),oTi=(e)=>{let n=nTi(e).map((o)=>eTi.invert(o));return tTi(n)};eyn.exports=oTi});var aIe=ct(function(mAs,nyn){var iTi=(e)=>{if(e&&typeof e==="object"){if("polygons"in e&&"transforms"in e){if(Array.isArray(e.polygons)&&"length"in e.transforms)return!0}}return!1};nyn.exports=iTi});var iyn=ct(function(pAs,oyn){var{EPS:rTi}=Na(),sTi=Ji(),aTi=aIe(),cTi=QX(),lTi=ga(),dTi=(e)=>{if(!aTi(e))throw Error("isConvex requires a geom3 geometry");let t=cTi(e);if(t.length===0)return!0;let n=[],o=new Set;for(let i=0;i<t.length;i++){let r=t[i].vertices;for(let s=0;s<r.length;s++){let a=r[s],c=`${a[0]},${a[1]},${a[2]}`;if(!o.has(c))o.add(c),n.push(a)}}for(let i=0;i<t.length;i++){let r=lTi.plane(t[i]);for(let s=0;s<n.length;s++){let a=n[s];if(sTi.dot(r,a)-r[3]>rTi)return!1}}return!0};oyn.exports=dTi});var syn=ct(function(AAs,ryn){var uTi=ga(),hTi=QX(),mTi=(e)=>hTi(e).map((o)=>uTi.toPoints(o));ryn.exports=mTi});var cyn=ct(function(_As,ayn){var pTi=ga(),ATi=QX(),_Ti=(e)=>{let t=ATi(e),n="geom3 ("+t.length+` polygons):
`;return t.forEach((o)=>{n+=" "+pTi.toString(o)+`
`}),n};ayn.exports=_Ti});var dyn=ct(function(gAs,lyn){var gTi=ga(),fTi=(e)=>{let{polygons:t,transforms:n}=e,o=t.length,i=t.reduce((l,d)=>l+d.vertices.length,0),r=[-1,-1,-1,-1];if(e.color)r=e.color;let s=new Float32Array(22+o+i*3);s[0]=1,s[1]=n[0],s[2]=n[1],s[3]=n[2],s[4]=n[3],s[5]=n[4],s[6]=n[5],s[7]=n[6],s[8]=n[7],s[9]=n[8],s[10]=n[9],s[11]=n[10],s[12]=n[11],s[13]=n[12],s[14]=n[13],s[15]=n[14],s[16]=n[15],s[17]=r[0],s[18]=r[1],s[19]=r[2],s[20]=r[3],s[21]=i;let a=22,c=a+o;return t.forEach((l)=>{let d=gTi.toPoints(l);s[a]=d.length,a++;for(let u=0;u<d.length;u++){let h=d[u];s[c+0]=h[0],s[c+1]=h[1],s[c+2]=h[2],c+=3}}),s};lyn.exports=fTi});var myn=ct(function(fAs,hyn){var uyn=cd(),yTi=(e,t)=>{let n=uyn.multiply(uyn.create(),e,t.transforms);return Object.assign({},t,{transforms:n})};hyn.exports=yTi});var Ayn=ct(function(yAs,pyn){var xTi=ga(),CTi=aIe(),ITi=(e)=>{if(!CTi(e))throw Error("invalid geom3 structure");if(e.polygons.forEach(xTi.validate),bTi(e),!e.transforms.every(Number.isFinite))throw Error(`geom3 invalid transforms ${e.transforms}`)},bTi=(e)=>{let t=new Map;e.polygons.forEach(({vertices:o})=>{o.forEach((i,r)=>{let s=`${i}`,a=`${o[(r+1)%o.length]}`,c=`${s}/${a}`,l=t.has(c)?t.get(c):0;t.set(c,l+1)})});let n=[];if(t.forEach((o,i)=>{let r=i.split("/").reverse().join("/"),s=t.get(r);if(o!==s)n.push(i.replace("/"," -> "))}),n.length>0)throw Error(`non-manifold edges ${n.length}
${n.join(`
`)}`)};pyn.exports=ITi});var ps=ct(function(xAs,_yn){_yn.exports={clone:mfn(),create:NX(),fromPointsConvex:U1n(),fromPoints:X1n(),fromCompactBinary:j1n(),invert:tyn(),isA:aIe(),isConvex:iyn(),toPoints:syn(),toPolygons:QX(),toString:cyn(),toCompactBinary:dyn(),transform:myn(),validate:Ayn()}});var cIe=ct(function(CAs,gyn){var STi=(e)=>Object.assign({},e);gyn.exports=STi});var OKe=ct(function(IAs,yyn){var{EPS:fyn}=Na(),PTi=Gs(),vTi=cIe(),ETi=(e)=>{if(e.isClosed)return e;let t=vTi(e);if(t.isClosed=!0,t.points.length>1){let n=t.points,o=n[0],i=n[n.length-1];while(PTi.distance(o,i)<fyn*fyn){if(n.pop(),n.length===1)break;i=n[n.length-1]}}return t};yyn.exports=ETi});var hre=ct(function(bAs,xyn){var MTi=cd(),BTi=(e)=>{if(e===void 0)e=[];return{points:e,isClosed:!1,transforms:MTi.create()}};xyn.exports=BTi});var lIe=ct(function(SAs,byn){var{EPS:Cyn}=Na(),Iyn=Gs(),wTi=OKe(),TTi=hre(),DTi=(e,t)=>{let n={closed:!1},{closed:o}=Object.assign({},n,e),i=TTi();if(i.points=t.map((r)=>Iyn.clone(r)),i.points.length>1){let r=i.points[0],s=i.points[i.points.length-1];if(Iyn.distance(r,s)<Cyn*Cyn)o=!0}if(o===!0)i=wTi(i);return i};byn.exports=DTi});var Eyn=ct(function(PAs,vyn){var Syn=cd(),Pyn=Gs(),NTi=(e)=>{if(Syn.isIdentity(e.transforms))return e;return e.points=e.points.map((t)=>Pyn.transform(Pyn.create(),t,e.transforms)),e.transforms=Syn.create(),e};vyn.exports=NTi});var VF=ct(function(vAs,Myn){var RTi=Eyn(),QTi=(e)=>RTi(e).points;Myn.exports=QTi});var wyn=ct(function(EAs,Byn){var{TAU:dIe}=Na(),Zm=Gs(),kTi=lIe(),LTi=VF(),FTi=(e,t)=>{let n={radius:[0,0],xaxisrotation:0,clockwise:!1,large:!1,segments:16},{endpoint:o,radius:i,xaxisrotation:r,clockwise:s,large:a,segments:c}=Object.assign({},n,e);if(!Array.isArray(o))throw Error("endpoint must be an array of X and Y values");if(o.length<2)throw Error("endpoint must contain X and Y values");if(o=Zm.clone(o),!Array.isArray(i))throw Error("radius must be an array of X and Y values");if(i.length<2)throw Error("radius must contain X and Y values");if(c<4)throw Error("segments must be four or more");let l=1e5;if(t.isClosed)throw Error("the given path cannot be closed");let d=LTi(t);if(d.length<1)throw Error("the given path must contain one or more points (as the starting point for the arc)");let u=i[0],h=i[1],A=d[d.length-1];u=Math.round(u*l)/l,h=Math.round(h*l)/l,o=Zm.fromValues(Math.round(o[0]*l)/l,Math.round(o[1]*l)/l);let m=!s,p=[];if(u===0||h===0)p.push(o);else{u=Math.abs(u),h=Math.abs(h);let _=r,f=Math.cos(_),y=Math.sin(_),x=Zm.subtract(Zm.create(),A,o);Zm.scale(x,x,0.5);let C=Math.round((f*x[0]+y*x[1])*l)/l,I=Math.round((-y*x[0]+f*x[1])*l)/l,b=Zm.fromValues(C,I),P=b[0]*b[0]/(u*u)+b[1]*b[1]/(h*h);if(P>1){let Y=Math.sqrt(P);u*=Y,h*=Y,u=Math.round(u*l)/l,h=Math.round(h*l)/l}let E=Math.sqrt((u*u*h*h-u*u*b[1]*b[1]-h*h*b[0]*b[0])/(u*u*b[1]*b[1]+h*h*b[0]*b[0]));if(m===a)E=-E;let B=Zm.fromValues(u*b[1]/h,-h*b[0]/u);Zm.scale(B,B,E);let w=Zm.fromValues(f*B[0]-y*B[1],y*B[0]+f*B[1]);w=Zm.add(w,w,Zm.scale(Zm.create(),Zm.add(Zm.create(),A,o),0.5));let T=Zm.fromValues((b[0]-B[0])/u,(b[1]-B[1])/h),Q=Zm.fromValues((-b[0]-B[0])/u,(-b[1]-B[1])/h),N=Zm.angleRadians(T),H=Zm.angleRadians(Q)-N;if(H=H%dIe,!m&&H>0)H-=dIe;else if(m&&H<0)H+=dIe;let z=Math.floor(c*(Math.abs(H)/dIe));if(z<1)z=1;for(let Y=1;Y<z;Y++){let U=N+Y/z*H,X=Math.cos(U),V=Math.sin(U),W=Zm.fromValues(f*u*X-y*h*V,y*u*X+f*h*V);Zm.add(W,W,w),p.push(W)}if(z)p.push(e.endpoint)}return p=d.concat(p),kTi({},p)};Byn.exports=FTi});var zKe=ct(function(MAs,Tyn){var HTi=lIe(),OTi=VF(),{equals:zTi}=Gs(),GTi=(...e)=>{let t=!1,n=[];return e.forEach((o,i)=>{let r=OTi(o).slice();if(n.length>0&&r.length>0&&zTi(r[0],n[n.length-1]))r.shift();if(r.length>0&&t)throw Error(`Cannot concatenate to a closed path; check the ${i}th path`);t=o.isClosed,n=n.concat(r)}),HTi({closed:t},n)};Tyn.exports=GTi});var GKe=ct(function(BAs,Dyn){var YTi=zKe(),VTi=hre(),UTi=(e,t)=>YTi(t,VTi(e));Dyn.exports=UTi});var Ryn=ct(function(wAs,Nyn){var{TAU:WTi}=Na(),Wx=Gs(),XTi=Gs(),KTi=GKe(),jTi=VF(),qTi=(e,t)=>{let n={segments:16},{controlPoints:o,segments:i}=Object.assign({},n,e);if(!Array.isArray(o))throw Error("controlPoints must be an array of one or more points");if(o.length<1)throw Error("controlPoints must be an array of one or more points");if(i<4)throw Error("segments must be four or more");if(t.isClosed)throw Error("the given geometry cannot be closed");let r=jTi(t);if(r.length<1)throw Error("the given path must contain one or more points (as the starting point for the bezier curve)");if(o=o.slice(),o[0]===null){if(o.length<2)throw Error("a null control point must be passed with one more control points");let I=r[r.length-2];if("lastBezierControlPoint"in t)I=t.lastBezierControlPoint;if(!Array.isArray(I))throw Error("the given path must contain TWO or more points if given a null control point");let b=Wx.scale(Wx.create(),r[r.length-1],2);Wx.subtract(b,b,I),o[0]=b}o.unshift(r[r.length-1]);let a=o.length-1,c=[],l=1;for(let I=0;I<=a;++I){if(I>0)l*=I;c.push(l)}let d=[];for(let I=0;I<=a;++I){let b=c[a]/(c[I]*c[a-I]);d.push(b)}let u=Wx.create(),h=Wx.create(),A=XTi.create(),m=(I)=>{let b=1,P=Math.pow(1-I,a),E=I!==1?1/(1-I):1,B=Wx.create();for(let w=0;w<=a;++w){if(w===a)P=1;let T=d[w]*b*P,Q=Wx.scale(u,o[w],T);Wx.add(B,B,Q),b*=I,P*=E}return B},p=[],g=[],_=a+1;for(let I=0;I<_;++I){let b=I/(_-1),P=m(b);p.push(P),g.push(b)}let f=1,y=WTi/i,x=Math.sin(y);while(f<p.length-1){let I=Wx.subtract(u,p[f],p[f-1]);Wx.normalize(I,I);let b=Wx.subtract(h,p[f+1],p[f]);Wx.normalize(b,b);let P=Wx.cross(A,I,b);if(Math.abs(P[2])>x){let E=g[f-1],B=g[f+1],w=E+(B-E)*1/3,T=E+(B-E)*2/3,Q=m(w),N=m(T);if(p.splice(f,1,Q,N),g.splice(f,1,w,T),f--,f<1)f=1}else++f}p.shift();let C=KTi(p,t);return C.lastBezierControlPoint=o[o.length-2],C};Nyn.exports=qTi});var Lyn=ct(function(TAs,kyn){var JTi=Gs(),Qyn=VF(),$Ti=(e,t)=>{if(e.isClosed!==t.isClosed)return!1;if(e.points.length!==t.points.length)return!1;let n=Qyn(e),o=Qyn(t),i=n.length,r=0;do{let s=!1;for(let a=0;a<i;a++)if(!JTi.equals(n[a],o[(a+r)%i])){s=!0;break}if(s===!1)return!0;if(!e.isClosed)return!1}while(++r<i);return!1};kyn.exports=$Ti});var Hyn=ct(function(DAs,Fyn){var ZTi=cd(),eDi=Gs(),tDi=hre(),nDi=(e)=>{if(e[0]!==2)throw Error("invalid compact binary data");let t=tDi();t.transforms=ZTi.clone(e.slice(1,17)),t.isClosed=!!e[17];for(let n=22;n<e.length;n+=2){let o=eDi.fromValues(e[n],e[n+1]);t.points.push(o)}if(e[18]>=0)t.color=[e[18],e[19],e[20],e[21]];return t};Fyn.exports=nDi});var YKe=ct(function(NAs,Oyn){var oDi=(e)=>{if(e&&typeof e==="object"){if("points"in e&&"transforms"in e&&"isClosed"in e){if(Array.isArray(e.points)&&"length"in e.transforms)return!0}}return!1};Oyn.exports=oDi});var Gyn=ct(function(RAs,zyn){var iDi=cIe(),rDi=(e)=>{let t=iDi(e);return t.points=e.points.slice().reverse(),t};zyn.exports=rDi});var Vyn=ct(function(QAs,Yyn){var sDi=Gs(),aDi=VF(),cDi=(e)=>{let t=aDi(e),n="path ("+t.length+" points, "+e.isClosed+`):
[
`;return t.forEach((o)=>{n+=" "+sDi.toString(o)+`,
`}),n+=`]
`,n};Yyn.exports=cDi});var Wyn=ct(function(kAs,Uyn){var lDi=(e)=>{let{points:t,transforms:n}=e,o=[-1,-1,-1,-1];if(e.color)o=e.color;let i=new Float32Array(22+t.length*2);i[0]=2,i[1]=n[0],i[2]=n[1],i[3]=n[2],i[4]=n[3],i[5]=n[4],i[6]=n[5],i[7]=n[6],i[8]=n[7],i[9]=n[8],i[10]=n[9],i[11]=n[10],i[12]=n[11],i[13]=n[12],i[14]=n[13],i[15]=n[14],i[16]=n[15],i[17]=e.isClosed?1:0,i[18]=o[0],i[19]=o[1],i[20]=o[2],i[21]=o[3];for(let r=0;r<t.length;r++){let s=r*2+22,a=t[r];i[s]=a[0],i[s+1]=a[1]}return i};Uyn.exports=lDi});var jyn=ct(function(LAs,Kyn){var Xyn=cd(),dDi=(e,t)=>{let n=Xyn.multiply(Xyn.create(),e,t.transforms);return Object.assign({},t,{transforms:n})};Kyn.exports=dDi});var Jyn=ct(function(FAs,qyn){var uDi=Gs(),hDi=YKe(),mDi=(e)=>{if(!hDi(e))throw Error("invalid path2 structure");if(e.points.length>1){for(let t=0;t<e.points.length;t++)if(uDi.equals(e.points[t],e.points[(t+1)%e.points.length]))throw Error(`path2 duplicate points ${e.points[t]}`)}if(e.points.forEach((t)=>{if(!t.every(Number.isFinite))throw Error(`path2 invalid point ${t}`)}),!e.transforms.every(Number.isFinite))throw Error(`path2 invalid transforms ${e.transforms}`)};qyn.exports=mDi});var Wl=ct(function(HAs,$yn){$yn.exports={appendArc:wyn(),appendBezier:Ryn(),appendPoints:GKe(),clone:cIe(),close:OKe(),concat:zKe(),create:hre(),equals:Lyn(),fromPoints:lIe(),fromCompactBinary:Hyn(),isA:YKe(),reverse:Gyn(),toPoints:VF(),toString:Vyn(),toCompactBinary:Wyn(),transform:jyn(),validate:Jyn()}});var i2n=ct(function(OAs,o2n){var pDi=Zr(),Zyn=Cs(),e2n=ps(),t2n=Wl(),n2n=ga(),ADi=(e,t)=>{let n=Zyn.clone(t);return n.color=e,n},_Di=(e,t)=>{let n=e2n.clone(t);return n.color=e,n},gDi=(e,t)=>{let n=t2n.clone(t);return n.color=e,n},fDi=(e,t)=>{let n=n2n.clone(t);return n.color=e,n},yDi=(e,...t)=>{if(!Array.isArray(e))throw Error("color must be an array");if(e.length<3)throw Error("color must contain R, G and B values");if(e.length===3)e=[e[0],e[1],e[2],1];if(t=pDi(t),t.length===0)throw Error("wrong number of arguments");let n=t.map((o)=>{if(Zyn.isA(o))return ADi(e,o);if(e2n.isA(o))return _Di(e,o);if(t2n.isA(o))return gDi(e,o);if(n2n.isA(o))return fDi(e,o);return o.color=e,o});return n.length===1?n[0]:n};o2n.exports=yDi});var VKe=ct(function(zAs,r2n){var xDi={black:[0,0,0],silver:[0.7529411764705882,0.7529411764705882,0.7529411764705882],gray:[0.5019607843137255,0.5019607843137255,0.5019607843137255],white:[1,1,1],maroon:[0.5019607843137255,0,0],red:[1,0,0],purple:[0.5019607843137255,0,0.5019607843137255],fuchsia:[1,0,1],green:[0,0.5019607843137255,0],lime:[0,1,0],olive:[0.5019607843137255,0.5019607843137255,0],yellow:[1,1,0],navy:[0,0,0.5019607843137255],blue:[0,0,1],teal:[0,0.5019607843137255,0.5019607843137255],aqua:[0,1,1],aliceblue:[0.9411764705882353,0.9725490196078431,1],antiquewhite:[0.9803921568627451,0.9215686274509803,0.8431372549019608],aquamarine:[0.4980392156862745,1,0.8313725490196079],azure:[0.9411764705882353,1,1],beige:[0.9607843137254902,0.9607843137254902,0.8627450980392157],bisque:[1,0.8941176470588236,0.7686274509803922],blanchedalmond:[1,0.9215686274509803,0.803921568627451],blueviolet:[0.5411764705882353,0.16862745098039217,0.8862745098039215],brown:[0.6470588235294118,0.16470588235294117,0.16470588235294117],burlywood:[0.8705882352941177,0.7215686274509804,0.5294117647058824],cadetblue:[0.37254901960784315,0.6196078431372549,0.6274509803921569],chartreuse:[0.4980392156862745,1,0],chocolate:[0.8235294117647058,0.4117647058823529,0.11764705882352941],coral:[1,0.4980392156862745,0.3137254901960784],cornflowerblue:[0.39215686274509803,0.5843137254901961,0.9294117647058824],cornsilk:[1,0.9725490196078431,0.8627450980392157],crimson:[0.8627450980392157,0.0784313725490196,0.23529411764705882],cyan:[0,1,1],darkblue:[0,0,0.5450980392156862],darkcyan:[0,0.5450980392156862,0.5450980392156862],darkgoldenrod:[0.7215686274509804,0.5254901960784314,0.043137254901960784],darkgray:[0.6627450980392157,0.6627450980392157,0.6627450980392157],darkgreen:[0,0.39215686274509803,0],darkgrey:[0.6627450980392157,0.6627450980392157,0.6627450980392157],darkkhaki:[0.7411764705882353,0.7176470588235294,0.4196078431372549],darkmagenta:[0.5450980392156862,0,0.5450980392156862],darkolivegreen:[0.3333333333333333,0.4196078431372549,0.1843137254901961],darkorange:[1,0.5490196078431373,0],darkorchid:[0.6,0.19607843137254902,0.8],darkred:[0.5450980392156862,0,0],darksalmon:[0.9137254901960784,0.5882352941176471,0.47843137254901963],darkseagreen:[0.5607843137254902,0.7372549019607844,0.5607843137254902],darkslateblue:[0.2823529411764706,0.23921568627450981,0.5450980392156862],darkslategray:[0.1843137254901961,0.30980392156862746,0.30980392156862746],darkslategrey:[0.1843137254901961,0.30980392156862746,0.30980392156862746],darkturquoise:[0,0.807843137254902,0.8196078431372549],darkviolet:[0.5803921568627451,0,0.8274509803921568],deeppink:[1,0.0784313725490196,0.5764705882352941],deepskyblue:[0,0.7490196078431373,1],dimgray:[0.4117647058823529,0.4117647058823529,0.4117647058823529],dimgrey:[0.4117647058823529,0.4117647058823529,0.4117647058823529],dodgerblue:[0.11764705882352941,0.5647058823529412,1],firebrick:[0.6980392156862745,0.13333333333333333,0.13333333333333333],floralwhite:[1,0.9803921568627451,0.9411764705882353],forestgreen:[0.13333333333333333,0.5450980392156862,0.13333333333333333],gainsboro:[0.8627450980392157,0.8627450980392157,0.8627450980392157],ghostwhite:[0.9725490196078431,0.9725490196078431,1],gold:[1,0.8431372549019608,0],goldenrod:[0.8549019607843137,0.6470588235294118,0.12549019607843137],greenyellow:[0.6784313725490196,1,0.1843137254901961],grey:[0.5019607843137255,0.5019607843137255,0.5019607843137255],honeydew:[0.9411764705882353,1,0.9411764705882353],hotpink:[1,0.4117647058823529,0.7058823529411765],indianred:[0.803921568627451,0.3607843137254902,0.3607843137254902],indigo:[0.29411764705882354,0,0.5098039215686274],ivory:[1,1,0.9411764705882353],khaki:[0.9411764705882353,0.9019607843137255,0.5490196078431373],lavender:[0.9019607843137255,0.9019607843137255,0.9803921568627451],lavenderblush:[1,0.9411764705882353,0.9607843137254902],lawngreen:[0.48627450980392156,0.9882352941176471,0],lemonchiffon:[1,0.9803921568627451,0.803921568627451],lightblue:[0.6784313725490196,0.8470588235294118,0.9019607843137255],lightcoral:[0.9411764705882353,0.5019607843137255,0.5019607843137255],lightcyan:[0.8784313725490196,1,1],lightgoldenrodyellow:[0.9803921568627451,0.9803921568627451,0.8235294117647058],lightgray:[0.8274509803921568,0.8274509803921568,0.8274509803921568],lightgreen:[0.5647058823529412,0.9333333333333333,0.5647058823529412],lightgrey:[0.8274509803921568,0.8274509803921568,0.8274509803921568],lightpink:[1,0.7137254901960784,0.7568627450980392],lightsalmon:[1,0.6274509803921569,0.47843137254901963],lightseagreen:[0.12549019607843137,0.6980392156862745,0.6666666666666666],lightskyblue:[0.5294117647058824,0.807843137254902,0.9803921568627451],lightslategray:[0.4666666666666667,0.5333333333333333,0.6],lightslategrey:[0.4666666666666667,0.5333333333333333,0.6],lightsteelblue:[0.6901960784313725,0.7686274509803922,0.8705882352941177],lightyellow:[1,1,0.8784313725490196],limegreen:[0.19607843137254902,0.803921568627451,0.19607843137254902],linen:[0.9803921568627451,0.9411764705882353,0.9019607843137255],magenta:[1,0,1],mediumaquamarine:[0.4,0.803921568627451,0.6666666666666666],mediumblue:[0,0,0.803921568627451],mediumorchid:[0.7294117647058823,0.3333333333333333,0.8274509803921568],mediumpurple:[0.5764705882352941,0.4392156862745098,0.8588235294117647],mediumseagreen:[0.23529411764705882,0.7019607843137254,0.44313725490196076],mediumslateblue:[0.4823529411764706,0.40784313725490196,0.9333333333333333],mediumspringgreen:[0,0.9803921568627451,0.6039215686274509],mediumturquoise:[0.2823529411764706,0.8196078431372549,0.8],mediumvioletred:[0.7803921568627451,0.08235294117647059,0.5215686274509804],midnightblue:[0.09803921568627451,0.09803921568627451,0.4392156862745098],mintcream:[0.9607843137254902,1,0.9803921568627451],mistyrose:[1,0.8941176470588236,0.8823529411764706],moccasin:[1,0.8941176470588236,0.7098039215686275],navajowhite:[1,0.8705882352941177,0.6784313725490196],oldlace:[0.9921568627450981,0.9607843137254902,0.9019607843137255],olivedrab:[0.4196078431372549,0.5568627450980392,0.13725490196078433],orange:[1,0.6470588235294118,0],orangered:[1,0.27058823529411763,0],orchid:[0.8549019607843137,0.4392156862745098,0.8392156862745098],palegoldenrod:[0.9333333333333333,0.9098039215686274,0.6666666666666666],palegreen:[0.596078431372549,0.984313725490196,0.596078431372549],paleturquoise:[0.6862745098039216,0.9333333333333333,0.9333333333333333],palevioletred:[0.8588235294117647,0.4392156862745098,0.5764705882352941],papayawhip:[1,0.9372549019607843,0.8352941176470589],peachpuff:[1,0.8549019607843137,0.7254901960784313],peru:[0.803921568627451,0.5215686274509804,0.24705882352941178],pink:[1,0.7529411764705882,0.796078431372549],plum:[0.8666666666666667,0.6274509803921569,0.8666666666666667],powderblue:[0.6901960784313725,0.8784313725490196,0.9019607843137255],rosybrown:[0.7372549019607844,0.5607843137254902,0.5607843137254902],royalblue:[0.2549019607843137,0.4117647058823529,0.8823529411764706],saddlebrown:[0.5450980392156862,0.27058823529411763,0.07450980392156863],salmon:[0.9803921568627451,0.5019607843137255,0.4470588235294118],sandybrown:[0.9568627450980393,0.6431372549019608,0.3764705882352941],seagreen:[0.1803921568627451,0.5450980392156862,0.3411764705882353],seashell:[1,0.9607843137254902,0.9333333333333333],sienna:[0.6274509803921569,0.3215686274509804,0.17647058823529413],skyblue:[0.5294117647058824,0.807843137254902,0.9215686274509803],slateblue:[0.41568627450980394,0.35294117647058826,0.803921568627451],slategray:[0.4392156862745098,0.5019607843137255,0.5647058823529412],slategrey:[0.4392156862745098,0.5019607843137255,0.5647058823529412],snow:[1,0.9803921568627451,0.9803921568627451],springgreen:[0,1,0.4980392156862745],steelblue:[0.27450980392156865,0.5098039215686274,0.7058823529411765],tan:[0.8235294117647058,0.7058823529411765,0.5490196078431373],thistle:[0.8470588235294118,0.7490196078431373,0.8470588235294118],tomato:[1,0.38823529411764707,0.2784313725490196],turquoise:[0.25098039215686274,0.8784313725490196,0.8156862745098039],violet:[0.9333333333333333,0.5098039215686274,0.9333333333333333],wheat:[0.9607843137254902,0.8705882352941177,0.7019607843137254],whitesmoke:[0.9607843137254902,0.9607843137254902,0.9607843137254902],yellowgreen:[0.6039215686274509,0.803921568627451,0.19607843137254902]};r2n.exports=xDi});var a2n=ct(function(GAs,s2n){var CDi=VKe(),IDi=(e)=>CDi[e.toLowerCase()];s2n.exports=IDi});var l2n=ct(function(YAs,c2n){var bDi=(e)=>{if(e=e.replace("#",""),e.length<6)throw Error("the given notation must contain 3 or more hex values");let t=parseInt(e.substring(0,2),16)/255,n=parseInt(e.substring(2,4),16)/255,o=parseInt(e.substring(4,6),16)/255;if(e.length>=8){let i=parseInt(e.substring(6,8),16)/255;return[t,n,o,i]}return[t,n,o]};c2n.exports=bDi});var UKe=ct(function(VAs,d2n){var SDi=(e,t,n)=>{if(n<0)n+=1;if(n>1)n-=1;if(n<0.16666666666666666)return e+(t-e)*6*n;if(n<0.5)return t;if(n<0.6666666666666666)return e+(t-e)*(0.6666666666666666-n)*6;return e};d2n.exports=SDi});var h2n=ct(function(UAs,u2n){var PDi=Zr(),WKe=UKe(),vDi=(...e)=>{if(e=PDi(e),e.length<3)throw Error("values must contain H, S and L values");let t=e[0],n=e[1],o=e[2],i=o,r=o,s=o;if(n!==0){let a=o<0.5?o*(1+n):o+n-o*n,c=2*o-a;i=WKe(c,a,t+0.3333333333333333),r=WKe(c,a,t),s=WKe(c,a,t-0.3333333333333333)}if(e.length>3){let a=e[3];return[i,r,s,a]}return[i,r,s]};u2n.exports=vDi});var p2n=ct(function(WAs,m2n){var EDi=Zr(),MDi=(...e)=>{if(e=EDi(e),e.length<3)throw Error("values must contain H, S and V values");let t=e[0],n=e[1],o=e[2],i=0,r=0,s=0,a=Math.floor(t*6),c=t*6-a,l=o*(1-n),d=o*(1-c*n),u=o*(1-(1-c)*n);switch(a%6){case 0:i=o,r=u,s=l;break;case 1:i=d,r=o,s=l;break;case 2:i=l,r=o,s=u;break;case 3:i=l,r=d,s=o;break;case 4:i=u,r=l,s=o;break;case 5:i=o,r=l,s=d;break}if(e.length>3){let h=e[3];return[i,r,s,h]}return[i,r,s]};m2n.exports=MDi});var _2n=ct(function(XAs,A2n){var BDi=Zr(),wDi=(...e)=>{if(e=BDi(e),e.length<3)throw Error("values must contain R, G and B values");let t=e[0]*255,n=e[1]*255,o=e[2]*255,i=`#${Number(16777216+t*65536+n*256+o).toString(16).substring(1,7)}`;if(e.length>3)i=i+Number(e[3]*255).toString(16);return i};A2n.exports=wDi});var f2n=ct(function(KAs,g2n){var TDi=Zr(),DDi=(...e)=>{if(e=TDi(e),e.length<3)throw Error("values must contain R, G and B values");let t=e[0],n=e[1],o=e[2],i=Math.max(t,n,o),r=Math.min(t,n,o),s,a,c=(i+r)/2;if(i===r)s=a=0;else{let l=i-r;switch(a=c>0.5?l/(2-i-r):l/(i+r),i){case t:s=(n-o)/l+(n<o?6:0);break;case n:s=(o-t)/l+2;break;case o:s=(t-n)/l+4;break}s/=6}if(e.length>3){let l=e[3];return[s,a,c,l]}return[s,a,c]};g2n.exports=DDi});var x2n=ct(function(jAs,y2n){var NDi=Zr(),RDi=(...e)=>{if(e=NDi(e),e.length<3)throw Error("values must contain R, G and B values");let t=e[0],n=e[1],o=e[2],i=Math.max(t,n,o),r=Math.min(t,n,o),s,a=i,c=i-r,l=i===0?0:c/i;if(i===r)s=0;else{switch(i){case t:s=(n-o)/c+(n<o?6:0);break;case n:s=(o-t)/c+2;break;case o:s=(t-n)/c+4;break}s/=6}if(e.length>3){let d=e[3];return[s,l,a,d]}return[s,l,a]};y2n.exports=RDi});var I2n=ct(function(qAs,C2n){C2n.exports={colorize:i2n(),colorNameToRgb:a2n(),cssColors:VKe(),hexToRgb:l2n(),hslToRgb:h2n(),hsvToRgb:p2n(),hueToColorComponent:UKe(),rgbToHex:_2n(),rgbToHsl:f2n(),rgbToHsv:x2n()}});var P2n=ct(function(JAs,S2n){var QDi=(e)=>{if(!Array.isArray(e))throw Error("Bezier points must be a valid array/");if(e.length<2)throw Error("Bezier points must contain at least 2 values.");let t=kDi(e);return{points:e,pointType:t,dimensions:t==="float_single"?0:e[0].length,permutations:b2n(e.length-1),tangentPermutations:b2n(e.length-2)}},kDi=function(e){let t=null;return e.forEach((n)=>{let o="";if(Number.isFinite(n))o="float_single";else if(Array.isArray(n))n.forEach((i)=>{if(!Number.isFinite(i))throw Error("Bezier point values must all be numbers.")}),o="float_"+n.length;else throw Error("Bezier points must all be numbers or arrays of number.");if(t==null)t=o;else if(t!==o)throw Error("Bezier points must be either all numbers or all arrays of numbers of the same size.")}),t},b2n=function(e){let t=[];for(let n=0;n<=e;n++)t.push(XKe(e)/(XKe(n)*XKe(e-n)));return t},XKe=function(e){let t=1;for(let n=2;n<=e;n++)t*=n;return t};S2n.exports=QDi});var KKe=ct(function($As,E2n){var LDi=(e,t)=>{if(e<0||e>1)throw Error("Bezier valueAt() input must be between 0 and 1");if(t.pointType==="float_single")return v2n(t,t.points,e);else{let n=[];for(let o=0;o<t.dimensions;o++){let i=[];for(let r=0;r<t.points.length;r++)i.push(t.points[r][o]);n.push(v2n(t,i,e))}return n}},v2n=function(e,t,n){let o=t.length-1,i=0;for(let r=0;r<=o;r++)i+=e.permutations[r]*Math.pow(1-n,o-r)*Math.pow(n,r)*t[r];return i};E2n.exports=LDi});var w2n=ct(function(ZAs,B2n){var FDi=(e,t)=>{if(e<0||e>1)throw Error("Bezier tangentAt() input must be between 0 and 1");if(t.pointType==="float_single")return M2n(t,t.points,e);else{let n=[];for(let o=0;o<t.dimensions;o++){let i=[];for(let r=0;r<t.points.length;r++)i.push(t.points[r][o]);n.push(M2n(t,i,e))}return n}},M2n=function(e,t,n){let o=t.length-1,i=0;for(let r=0;r<o;r++){let s=o*(t[r+1]-t[r]);i+=e.tangentPermutations[r]*Math.pow(1-n,o-1-r)*Math.pow(n,r)*s}return i};B2n.exports=FDi});var uIe=ct(function(e_s,D2n){var T2n=KKe(),HDi=(e,t)=>{let n=0,o=[0],i=T2n(0,t);for(let r=1;r<=e;r++){let s=T2n(r/e,t);n+=ODi(s,i),o.push(n),i=s}return o},ODi=(e,t)=>{if(Number.isFinite(e)&&Number.isFinite(t))return Math.abs(e-t);else if(Array.isArray(e)&&Array.isArray(t)){if(e.length!==t.length)throw Error("The operands must have the same number of dimensions.");let n=0;for(let o=0;o<e.length;o++)n+=(t[o]-e[o])*(t[o]-e[o]);return Math.sqrt(n)}else throw Error("The operands must be of the same type, either number or array.")};D2n.exports=HDi});var R2n=ct(function(t_s,N2n){var zDi=uIe(),GDi=(e,t)=>zDi(e,t)[e];N2n.exports=GDi});var k2n=ct(function(n_s,Q2n){var YDi=uIe(),VDi=(e,t)=>{let n={distance:0,segments:100},{distance:o,segments:i}=Object.assign({},n,e),r=YDi(i,t),s=0,a=i;while(s<=a){let A=Math.floor(s+(a-s)/2),m=r[A]-o;if(m<0)s=A+1;else if(m>0)a=A-1;else{a=A;break}}let c=a;if(r[c]===o)return c/i;let l=r[c],u=r[c+1]-l,h=(o-l)/u;return(c+h)/i};Q2n.exports=VDi});var F2n=ct(function(o_s,L2n){L2n.exports={create:P2n(),valueAt:KKe(),tangentAt:w2n(),lengths:uIe(),length:R2n(),arcLengthToT:k2n()}});var O2n=ct(function(i_s,H2n){H2n.exports={bezier:F2n()}});var mre=ct(function(r_s,z2n){var UDi=(e)=>{let t=0;for(let n=0;n<e.length;n++){let o=(n+1)%e.length;t+=e[n][0]*e[o][1],t-=e[o][0]*e[n][1]}return t/2};z2n.exports=UDi});var jKe=ct(function(s_s,G2n){var WDi=mre(),XDi=(e)=>WDi(e.vertices);G2n.exports=XDi});var qKe=ct(function(a_s,Y2n){var KDi=(e)=>{if(e===void 0||e.length<3)e=[];return{vertices:e}};Y2n.exports=KDi});var JKe=ct(function(c_s,V2n){var jDi=qKe(),qDi=(e)=>{let t=e.vertices.slice().reverse();return jDi(t)};V2n.exports=qDi});var W2n=ct(function(l_s,U2n){var JDi=jKe(),$Di=JKe(),ZDi=(e,t)=>{if(e.length===0)return 0;let n=t.vertices;if(n.length<3)return 0;if(JDi(t)<0)t=$Di(t);return e.reduce((i,r)=>i+eNi(r,n),0)===e.length?1:0},eNi=(e,t)=>{let n=t.length,o=e[0],i=e[1],r=t[n-1],s=t[0],a=r[1]>i,c=0,l=0;for(let d=n+1;--d;){let u=s[1]>i;if(a!==u){let h=r[0]>o,A=s[0]>o;if(h&&A)c=!c;else if(s[0]-(s[1]-i)*(r[0]-s[0])/(r[1]-s[1])>=o)c=!c}a=u,r=s,s=t[++l]}return c};U2n.exports=ZDi});var hIe=ct(function(d_s,X2n){X2n.exports={arePointsInside:W2n(),create:qKe(),flip:JKe(),measureArea:jKe()}});var mIe=ct(function(u_s,K2n){K2n.exports={geom2:Cs(),geom3:ps(),path2:Wl(),poly2:hIe(),poly3:ga()}});var pIe=ct(function(h_s,j2n){var tNi=()=>[0,1,0];j2n.exports=tNi});var J2n=ct(function(m_s,q2n){var nNi=pIe(),oNi=(e)=>{let t=nNi();return t[0]=e[0],t[1]=e[1],t[2]=e[2],t};q2n.exports=oNi});var AIe=ct(function(p_s,$2n){var $Ke=Gs(),iNi=(e)=>{let t=$Ke.normal($Ke.create(),e);return $Ke.negate(t,t),t};$2n.exports=iNi});var pre=ct(function(A_s,exn){var Z2n=Gs(),rNi=(e)=>Z2n.scale(Z2n.create(),e,e[2]);exn.exports=rNi});var nxn=ct(function(__s,txn){var Are=Gs(),sNi=AIe(),aNi=pre(),cNi=(e,t)=>{let n=aNi(e),o=sNi(e),i=Are.subtract(Are.create(),t,n),r=Are.dot(i,o);return Are.scale(i,o,r),Are.add(i,i,n),i};txn.exports=cNi});var ZKe=ct(function(g_s,oxn){var lNi=(e,t)=>(e[0]=t[0],e[1]=t[1],e[2]=t[2],e);oxn.exports=lNi});var rxn=ct(function(f_s,ixn){var dNi=Gs(),uNi=(e,t)=>{let n=dNi.dot(t,e);return n=Math.abs(n-e[2]),n};ixn.exports=uNi});var axn=ct(function(y_s,sxn){var hNi=(e,t)=>e[0]===t[0]&&(e[1]===t[1]&&e[2]===t[2]);sxn.exports=hNi});var eje=ct(function(x_s,cxn){var _re=Gs(),mNi=(e,t,n)=>{let o=_re.subtract(_re.create(),n,t);_re.normal(o,o),_re.normalize(o,o);let i=_re.dot(t,o);return e[0]=o[0],e[1]=o[1],e[2]=i,e};cxn.exports=mNi});var tje=ct(function(C_s,lxn){var pNi=pIe(),ANi=(e,t,n)=>{let o=pNi();return o[0]=e,o[1]=t,o[2]=n,o};lxn.exports=ANi});var _Ie=ct(function(I_s,dxn){var{NEPS:nje}=Na(),_Ni=(e,t)=>Math.abs(e[0]-t[0])<=nje&&Math.abs(e[1]-t[1])<=nje&&Math.abs(e[2]-t[2])<=nje;dxn.exports=_Ni});var oje=ct(function(b_s,uxn){var gNi=(e,t,n)=>{let o=n-e[1],i=t[1]-e[1];if(i<0)o=-o,i=-i;let r;if(o<=0)r=0;else if(o>=i)r=1;else if(i<0.0000000001)r=0.5;else r=o/i;return e[0]+r*(t[0]-e[0])};uxn.exports=gNi});var ije=ct(function(S_s,hxn){var fNi=(e,t,n,o)=>{if(e[0]===t[0]&&e[1]===t[1]||n[0]===o[0]&&n[1]===o[1])return;let i=(o[1]-n[1])*(t[0]-e[0])-(o[0]-n[0])*(t[1]-e[1]);if(Math.abs(i)<Number.MIN_VALUE)return;let r=((o[0]-n[0])*(e[1]-n[1])-(o[1]-n[1])*(e[0]-n[0]))/i,s=((t[0]-e[0])*(e[1]-n[1])-(t[1]-e[1])*(e[0]-n[0]))/i;if(r<0||r>1||s<0||s>1)return;let a=e[0]+r*(t[0]-e[0]),c=e[1]+r*(t[1]-e[1]);return[a,c]};hxn.exports=fNi});var pxn=ct(function(P_s,mxn){var yNi=(e,t,n,o,i,r)=>{let a=1/(e*o-t*n),c=i*o-t*r,l=-i*n+e*r;return c*=a,l*=a,[c,l]};mxn.exports=yNi});var kX=ct(function(v_s,Axn){Axn.exports={aboutEqualNormals:_Ie(),area:mre(),cos:qA().cos,interpolateBetween2DPointsForY:oje(),intersect:ije(),sin:qA().sin,solve2Linear:pxn()}});var gxn=ct(function(E_s,_xn){var xNi=Gs(),{solve2Linear:CNi}=kX(),INi=(e,t)=>{let n=CNi(e[0],e[1],t[0],t[1],e[2],t[2]);return xNi.clone(n)};_xn.exports=INi});var xxn=ct(function(M_s,yxn){var fxn=Gs(),bNi=ZKe(),SNi=tje(),PNi=(e,t)=>{let n=fxn.negate(fxn.create(),t),o=-t[2];return bNi(e,SNi(n[0],n[1],o))};yxn.exports=PNi});var Ixn=ct(function(B_s,Cxn){var vNi=(e)=>`line2: (${e[0].toFixed(7)}, ${e[1].toFixed(7)}, ${e[2].toFixed(7)})`;Cxn.exports=vNi});var Pxn=ct(function(w_s,Sxn){var bxn=Gs(),ENi=eje(),MNi=pre(),BNi=AIe(),wNi=(e,t,n)=>{let o=MNi(t),i=BNi(t);return bxn.transform(o,o,n),bxn.transform(i,i,n),ENi(e,o,i)};Sxn.exports=wNi});var Exn=ct(function(T_s,vxn){var TNi=pre(),DNi=(e,t)=>{let n=(e[2]-e[1]*t)/e[0];if(Number.isNaN(n))n=TNi(e)[0];return n};vxn.exports=DNi});var gIe=ct(function(D_s,Mxn){Mxn.exports={clone:J2n(),closestPoint:nxn(),copy:ZKe(),create:pIe(),direction:AIe(),distanceToPoint:rxn(),equals:axn(),fromPoints:eje(),fromValues:tje(),intersectPointOfLines:gxn(),origin:pre(),reverse:xxn(),toString:Ixn(),transform:Pxn(),xAtY:Exn()}});var rje=ct(function(N_s,wxn){var Bxn=Ji(),NNi=()=>[Bxn.fromValues(0,0,0),Bxn.fromValues(0,0,1)];wxn.exports=NNi});var Nxn=ct(function(R_s,Dxn){var Txn=Ji(),RNi=rje(),QNi=(e)=>{let t=RNi();return Txn.copy(t[0],e[0]),Txn.copy(t[1],e[1]),t};Dxn.exports=QNi});var sje=ct(function(Q_s,Rxn){var UF=Ji(),kNi=(e,t)=>{let n=e[0],o=e[1],i=UF.dot(UF.subtract(UF.create(),t,n),o),r=UF.dot(o,o),s=i/r,a=UF.scale(UF.create(),o,s);return UF.add(a,a,n),a};Rxn.exports=kNi});var Lxn=ct(function(k_s,kxn){var Qxn=Ji(),LNi=(e,t)=>(Qxn.copy(e[0],t[0]),Qxn.copy(e[1],t[1]),e);kxn.exports=LNi});var Hxn=ct(function(L_s,Fxn){var FNi=(e)=>e[1];Fxn.exports=FNi});var zxn=ct(function(F_s,Oxn){var aje=Ji(),HNi=sje(),ONi=(e,t)=>{let n=HNi(e,t),o=aje.subtract(aje.create(),t,n);return aje.length(o)};Oxn.exports=ONi});var Vxn=ct(function(H_s,Yxn){var Gxn=Ji(),zNi=(e,t)=>{if(!Gxn.equals(e[1],t[1]))return!1;if(!Gxn.equals(e[0],t[0]))return!1;return!0};Yxn.exports=zNi});var LX=ct(function(O_s,Uxn){var fIe=Ji(),GNi=(e,t,n)=>{let o=fIe.normalize(fIe.create(),n);return fIe.copy(e[0],t),fIe.copy(e[1],o),e};Uxn.exports=GNi});var Xxn=ct(function(z_s,Wxn){var WF=Ji(),{solve2Linear:cje}=kX(),{EPS:YNi}=Na(),VNi=LX(),UNi=(e,t,n)=>{let o=WF.cross(WF.create(),t,n),i=WF.length(o);if(i<YNi)throw Error("parallel planes do not intersect");i=1/i,o=WF.scale(o,o,i);let r=Math.abs(o[0]),s=Math.abs(o[1]),a=Math.abs(o[2]),c,l;if(r>=s&&r>=a)l=cje(t[1],t[2],n[1],n[2],t[3],n[3]),c=WF.fromValues(0,l[0],l[1]);else if(s>=r&&s>=a)l=cje(t[0],t[2],n[0],n[2],t[3],n[3]),c=WF.fromValues(l[0],0,l[1]);else l=cje(t[0],t[1],n[0],n[1],t[3],n[3]),c=WF.fromValues(l[0],l[1],0);return VNi(e,c,o)};Wxn.exports=UNi});var qxn=ct(function(G_s,jxn){var Kxn=Ji(),WNi=LX(),XNi=(e,t,n)=>{let o=Kxn.subtract(Kxn.create(),n,t);return WNi(e,t,o)};jxn.exports=XNi});var $xn=ct(function(Y_s,Jxn){var FX=Ji(),KNi=(e,t)=>{let n=t,o=t[3],i=e[0],r=e[1],s=(o-FX.dot(n,i))/FX.dot(n,r);return FX.add(FX.create(),i,FX.scale(FX.create(),r,s))};Jxn.exports=KNi});var eCn=ct(function(V_s,Zxn){var jNi=(e)=>e[0];Zxn.exports=jNi});var nCn=ct(function(U_s,tCn){var lje=Ji(),qNi=LX(),JNi=(e,t)=>{let n=lje.clone(t[0]),o=lje.negate(lje.create(),t[1]);return qNi(e,n,o)};tCn.exports=JNi});var iCn=ct(function(W_s,oCn){var $Ni=(e)=>{let t=e[0],n=e[1];return`line3: point: (${t[0].toFixed(7)}, ${t[1].toFixed(7)}, ${t[2].toFixed(7)}) direction: (${n[0].toFixed(7)}, ${n[1].toFixed(7)}, ${n[2].toFixed(7)})`};oCn.exports=$Ni});var sCn=ct(function(X_s,rCn){var HX=Ji(),ZNi=LX(),eRi=(e,t,n)=>{let o=t[0],i=t[1],r=HX.add(HX.create(),o,i),s=HX.transform(HX.create(),o,n),a=HX.transform(r,r,n),c=HX.subtract(a,a,s);return ZNi(e,s,c)};rCn.exports=eRi});var cCn=ct(function(K_s,aCn){aCn.exports={clone:Nxn(),closestPoint:sje(),copy:Lxn(),create:rje(),direction:Hxn(),distanceToPoint:zxn(),equals:Vxn(),fromPlanes:Xxn(),fromPointAndDirection:LX(),fromPoints:qxn(),intersectPointOfLineAndPlane:$xn(),origin:eCn(),reverse:nCn(),toString:iCn(),transform:sCn()}});var dCn=ct(function(j_s,lCn){lCn.exports={constants:Na(),line2:gIe(),line3:cCn(),mat4:cd(),plane:VS(),utils:kX(),vec2:Gs(),vec3:Ji(),vec4:FKe()}});var dje=ct(function(q_s,mCn){var tRi=Zr(),uCn=Cs(),hCn=ps(),nRi=Wl(),oRi=ga(),yIe=new WeakMap,iRi=()=>0,rRi=(e)=>{let t=yIe.get(e);if(t)return t;return t=uCn.toSides(e).reduce((o,i)=>o+(i[0][0]*i[1][1]-i[0][1]*i[1][0]),0),t*=0.5,yIe.set(e,t),t},sRi=(e)=>{let t=yIe.get(e);if(t)return t;return t=hCn.toPolygons(e).reduce((o,i)=>o+oRi.measureArea(i),0),yIe.set(e,t),t},aRi=(...e)=>{if(e=tRi(e),e.length===0)throw Error("wrong number of arguments");let t=e.map((n)=>{if(nRi.isA(n))return iRi(n);if(uCn.isA(n))return rRi(n);if(hCn.isA(n))return sRi(n);return 0});return t.length===1?t[0]:t};mCn.exports=aRi});var ACn=ct(function(J_s,pCn){var cRi=Zr(),lRi=dje(),dRi=(...e)=>{if(e=cRi(e),e.length===0)throw Error("measureAggregateArea: no geometries supplied");let t=lRi(e);if(e.length===1)return t;let n=0;return t.reduce((o,i)=>o+i,n)};pCn.exports=dRi});var bD=ct(function($_s,xCn){var uRi=Zr(),H3=Gs(),gre=Ji(),gCn=Cs(),fCn=ps(),yCn=Wl(),_Cn=ga(),OX=new WeakMap,hRi=(e)=>{let t=OX.get(e);if(t)return t;let n=yCn.toPoints(e),o;if(n.length===0)o=H3.create();else o=H3.clone(n[0]);let i=H3.clone(o);return n.forEach((r)=>{H3.min(o,o,r),H3.max(i,i,r)}),o=[o[0],o[1],0],i=[i[0],i[1],0],t=[o,i],OX.set(e,t),t},mRi=(e)=>{let t=OX.get(e);if(t)return t;let n=gCn.toPoints(e),o;if(n.length===0)o=H3.create();else o=H3.clone(n[0]);let i=H3.clone(o);return n.forEach((r)=>{H3.min(o,o,r),H3.max(i,i,r)}),o=[o[0],o[1],0],i=[i[0],i[1],0],t=[o,i],OX.set(e,t),t},pRi=(e)=>{let t=OX.get(e);if(t)return t;let n=fCn.toPolygons(e),o=gre.create();if(n.length>0){let r=_Cn.toPoints(n[0]);gre.copy(o,r[0])}let i=gre.clone(o);return n.forEach((r)=>{_Cn.toPoints(r).forEach((s)=>{gre.min(o,o,s),gre.max(i,i,s)})}),o=[o[0],o[1],o[2]],i=[i[0],i[1],i[2]],t=[o,i],OX.set(e,t),t},ARi=(...e)=>{if(e=uRi(e),e.length===0)throw Error("wrong number of arguments");let t=e.map((n)=>{if(yCn.isA(n))return hRi(n);if(gCn.isA(n))return mRi(n);if(fCn.isA(n))return pRi(n);return[[0,0,0],[0,0,0]]});return t.length===1?t[0]:t};xCn.exports=ARi});var xIe=ct(function(Z_s,CCn){var _Ri=Zr(),gRi=aKe(),fRi=sKe(),yRi=bD(),xRi=(...e)=>{if(e=_Ri(e),e.length===0)throw Error("measureAggregateBoundingBox: no geometries supplied");let t=yRi(e);if(e.length===1)return t;let n=[[Number.MAX_VALUE,Number.MAX_VALUE,Number.MAX_VALUE],[-Number.MAX_VALUE,-Number.MAX_VALUE,-Number.MAX_VALUE]];return t.reduce((o,i)=>(o=[gRi(o[0],o[0],i[0]),fRi(o[1],o[1],i[1])],o),n)};CCn.exports=xRi});var uje=ct(function(egs,ICn){var{EPS:CRi}=Na(),IRi=(e,t)=>{let n=0;for(let o=0;o<t;o++)n+=e[1][o]-e[0][o];return CRi*n/t};ICn.exports=IRi});var SCn=ct(function(tgs,bCn){var bRi=Zr(),SRi=xIe(),PRi=uje(),{geom2:vRi,geom3:ERi,path2:MRi}=mIe(),BRi=(...e)=>{if(e=bRi(e),e.length===0)throw Error("measureAggregateEpsilon: no geometries supplied");let t=SRi(e),n=0;return n=e.reduce((o,i)=>{if(MRi.isA(i)||vRi.isA(i))return Math.max(o,2);if(ERi.isA(i))return Math.max(o,3);return 0},n),PRi(t,n)};bCn.exports=BRi});var hje=ct(function(ngs,ECn){var wRi=Zr(),TRi=Cs(),vCn=ps(),DRi=Wl(),NRi=ga(),PCn=new WeakMap,RRi=()=>0,QRi=()=>0,kRi=(e)=>{let t=PCn.get(e);if(t)return t;return t=vCn.toPolygons(e).reduce((o,i)=>o+NRi.measureSignedVolume(i),0),PCn.set(e,t),t},LRi=(...e)=>{if(e=wRi(e),e.length===0)throw Error("wrong number of arguments");let t=e.map((n)=>{if(DRi.isA(n))return RRi(n);if(TRi.isA(n))return QRi(n);if(vCn.isA(n))return kRi(n);return 0});return t.length===1?t[0]:t};ECn.exports=LRi});var BCn=ct(function(ogs,MCn){var FRi=Zr(),HRi=hje(),ORi=(...e)=>{if(e=FRi(e),e.length===0)throw Error("measureAggregateVolume: no geometries supplied");let t=HRi(e);if(e.length===1)return t;let n=0;return t.reduce((o,i)=>o+i,n)};MCn.exports=ORi});var kCn=ct(function(igs,QCn){var zRi=Zr(),TCn=Gs(),qy=Ji(),DCn=Cs(),NCn=ps(),RCn=Wl(),wCn=ga(),zX=new WeakMap,GRi=(e)=>{let t=zX.get(e);if(t!==void 0)return t;let n=qy.create(),o=0,i=RCn.toPoints(e);if(i.length>0){let r=0,s=qy.create();i.forEach((a)=>{qy.add(n,n,qy.fromVec2(s,a,0)),r++}),qy.scale(n,n,1/r),i.forEach((a)=>{o=Math.max(o,TCn.squaredDistance(n,a))}),o=Math.sqrt(o)}return t=[n,o],zX.set(e,t),t},YRi=(e)=>{let t=zX.get(e);if(t!==void 0)return t;let n=qy.create(),o=0,i=DCn.toSides(e);if(i.length>0){let r=0,s=qy.create();i.forEach((a)=>{qy.add(n,n,qy.fromVec2(s,a[0],0)),r++}),qy.scale(n,n,1/r),i.forEach((a)=>{o=Math.max(o,TCn.squaredDistance(n,a[0]))}),o=Math.sqrt(o)}return t=[n,o],zX.set(e,t),t},VRi=(e)=>{let t=zX.get(e);if(t!==void 0)return t;let n=qy.create(),o=0,i=NCn.toPolygons(e);if(i.length>0){let r=0;i.forEach((s)=>{wCn.toPoints(s).forEach((a)=>{qy.add(n,n,a),r++})}),qy.scale(n,n,1/r),i.forEach((s)=>{wCn.toPoints(s).forEach((a)=>{o=Math.max(o,qy.squaredDistance(n,a))})}),o=Math.sqrt(o)}return t=[n,o],zX.set(e,t),t},URi=(...e)=>{e=zRi(e);let t=e.map((n)=>{if(RCn.isA(n))return GRi(n);if(DCn.isA(n))return YRi(n);if(NCn.isA(n))return VRi(n);return[[0,0,0],0]});return t.length===1?t[0]:t};QCn.exports=URi});var FCn=ct(function(rgs,LCn){var WRi=Zr(),XRi=bD(),KRi=(...e)=>{e=WRi(e);let t=e.map((n)=>{let o=XRi(n);return[o[0][0]+(o[1][0]-o[0][0])/2,o[0][1]+(o[1][1]-o[0][1])/2,o[0][2]+(o[1][2]-o[0][2])/2]});return t.length===1?t[0]:t};LCn.exports=KRi});var GCn=ct(function(sgs,zCn){var jRi=Zr(),O3=Ji(),HCn=Cs(),OCn=ps(),CIe=new WeakMap,qRi=(e)=>{let t=CIe.get(e);if(t!==void 0)return t;let n=HCn.toSides(e),o=0,i=0,r=0;if(n.length>0){for(let a=0;a<n.length;a++){let c=n[a][0],l=n[a][1],d=c[0]*l[1]-c[1]*l[0];o+=d,i+=(c[0]+l[0])*d,r+=(c[1]+l[1])*d}o/=2;let s=1/(o*6);i*=s,r*=s}return t=O3.fromValues(i,r,0),CIe.set(e,t),t},JRi=(e)=>{let t=CIe.get(e);if(t!==void 0)return t;t=O3.create();let n=OCn.toPolygons(e);if(n.length===0)return t;let o=0,i=O3.create();return n.forEach((r)=>{let s=r.vertices;for(let a=0;a<s.length-2;a++){O3.cross(i,s[a+1],s[a+2]);let c=O3.dot(s[0],i)/6;o+=c,O3.add(i,s[0],s[a+1]),O3.add(i,i,s[a+2]);let l=O3.scale(i,i,0.25*c);O3.add(t,t,l)}}),O3.scale(t,t,1/o),CIe.set(e,t),t},$Ri=(...e)=>{e=jRi(e);let t=e.map((n)=>{if(HCn.isA(n))return qRi(n);if(OCn.isA(n))return JRi(n);return[0,0,0]});return t.length===1?t[0]:t};zCn.exports=$Ri});var VCn=ct(function(ags,YCn){var ZRi=Zr(),eQi=bD(),tQi=(...e)=>{e=ZRi(e);let t=e.map((n)=>{let o=eQi(n);return[o[1][0]-o[0][0],o[1][1]-o[0][1],o[1][2]-o[0][2]]});return t.length===1?t[0]:t};YCn.exports=tQi});var DB=ct(function(cgs,UCn){var nQi=Zr(),{geom2:oQi,geom3:iQi,path2:rQi}=mIe(),mje=uje(),pje=bD(),sQi=(e)=>mje(pje(e),2),aQi=(e)=>mje(pje(e),2),cQi=(e)=>mje(pje(e),3),lQi=(...e)=>{if(e=nQi(e),e.length===0)throw Error("wrong number of arguments");let t=e.map((n)=>{if(rQi.isA(n))return sQi(n);if(oQi.isA(n))return aQi(n);if(iQi.isA(n))return cQi(n);return 0});return t.length===1?t[0]:t};UCn.exports=lQi});var XCn=ct(function(lgs,WCn){WCn.exports={measureAggregateArea:ACn(),measureAggregateBoundingBox:xIe(),measureAggregateEpsilon:SCn(),measureAggregateVolume:BCn(),measureArea:dje(),measureBoundingBox:bD(),measureBoundingSphere:kCn(),measureCenter:FCn(),measureCenterOfMass:GCn(),measureDimensions:VCn(),measureEpsilon:DB(),measureVolume:hje()}});var ep=ct(function(dgs,KCn){var dQi=(e,t)=>{if(Array.isArray(e)&&e.length>=t)return e.every((n)=>Number.isFinite(n));return!1},uQi=(e,t)=>Number.isFinite(e)&&e>t,hQi=(e,t)=>Number.isFinite(e)&&e>=t;KCn.exports={isNumberArray:dQi,isGT:uQi,isGTE:hQi}});var JCn=ct(function(ugs,qCn){var{EPS:jCn,TAU:GX}=Na(),NB=Gs(),mQi=Wl(),{isGT:pQi,isGTE:Aje,isNumberArray:AQi}=ep(),_Qi=(e)=>{let t={center:[0,0],radius:1,startAngle:0,endAngle:GX,makeTangent:!1,segments:32},{center:n,radius:o,startAngle:i,endAngle:r,makeTangent:s,segments:a}=Object.assign({},t,e);if(!AQi(n,2))throw Error("center must be an array of X and Y values");if(!pQi(o,0))throw Error("radius must be greater than zero");if(!Aje(i,0))throw Error("startAngle must be positive");if(!Aje(r,0))throw Error("endAngle must be positive");if(!Aje(a,4))throw Error("segments must be four or more");i=i%GX,r=r%GX;let c=GX;if(i<r)c=r-i;if(i>r)c=r+(GX-i);let l=Math.acos((o*o+o*o-jCn*jCn)/(2*o*o)),d=NB.clone(n),u,h=[];if(c<l)u=NB.fromAngleRadians(NB.create(),i),NB.scale(u,u,o),NB.add(u,u,d),h.push(u);else{let A=Math.floor(a*(Math.abs(c)/GX)),m=A*0.5/c;if(m>0.25)m=0.25;let p=s?A+2:A;for(let g=0;g<=p;g++){let _=g;if(s){if(_=(g-1)*(A-2*m)/A+m,_<0)_=0;if(_>A)_=A}let f=i+_*(c/A);u=NB.fromAngleRadians(NB.create(),f),NB.scale(u,u,o),NB.add(u,u,d),h.push(u)}}return mQi.fromPoints({closed:!1},h)};qCn.exports=_Qi});var fje=ct(function(hgs,tIn){var{EPS:$Cn,TAU:SD}=Na(),gje=Gs(),eIn=Cs(),{sin:gQi,cos:fQi}=qA(),{isGTE:_je,isNumberArray:ZCn}=ep(),yQi=(e)=>{let t={center:[0,0],radius:[1,1],startAngle:0,endAngle:SD,segments:32},{center:n,radius:o,startAngle:i,endAngle:r,segments:s}=Object.assign({},t,e);if(!ZCn(n,2))throw Error("center must be an array of X and Y values");if(!ZCn(o,2))throw Error("radius must be an array of X and Y values");if(!o.every((A)=>A>=0))throw Error("radius values must be positive");if(!_je(i,0))throw Error("startAngle must be positive");if(!_je(r,0))throw Error("endAngle must be positive");if(!_je(s,3))throw Error("segments must be three or more");if(o[0]===0||o[1]===0)return eIn.create();i=i%SD,r=r%SD;let a=SD;if(i<r)a=r-i;if(i>r)a=r+(SD-i);let c=Math.min(o[0],o[1]),l=Math.acos((c*c+c*c-$Cn*$Cn)/(2*c*c));if(a<l)throw Error("startAngle and endAngle do not define a significant rotation");s=Math.floor(s*(a/SD));let d=gje.clone(n),u=a/s,h=[];s=a<SD?s+1:s;for(let A=0;A<s;A++){let m=u*A+i,p=gje.fromValues(o[0]*fQi(m),o[1]*gQi(m));gje.add(p,d,p),h.push(p)}if(a<SD)h.push(d);return eIn.fromPoints(h)};tIn.exports=yQi});var yje=ct(function(mgs,nIn){var{TAU:xQi}=Na(),CQi=fje(),{isGTE:IQi}=ep(),bQi=(e)=>{let t={center:[0,0],radius:1,startAngle:0,endAngle:xQi,segments:32},{center:n,radius:o,startAngle:i,endAngle:r,segments:s}=Object.assign({},t,e);if(!IQi(o,0))throw Error("radius must be positive");return o=[o,o],CQi({center:n,radius:o,startAngle:i,endAngle:r,segments:s})};nIn.exports=bQi});var IIe=ct(function(pgs,rIn){var oIn=ps(),SQi=ga(),{isNumberArray:iIn}=ep(),PQi=(e)=>{let t={center:[0,0,0],size:[2,2,2]},{center:n,size:o}=Object.assign({},t,e);if(!iIn(n,3))throw Error("center must be an array of X, Y and Z values");if(!iIn(o,3))throw Error("size must be an array of width, depth and height values");if(!o.every((r)=>r>=0))throw Error("size values must be positive");if(o[0]===0||o[1]===0||o[2]===0)return oIn.create();return oIn.create([[[0,4,6,2],[-1,0,0]],[[1,3,7,5],[1,0,0]],[[0,1,5,4],[0,-1,0]],[[2,6,7,3],[0,1,0]],[[0,2,3,1],[0,0,-1]],[[4,5,7,6],[0,0,1]]].map((r)=>{let s=r[0].map((a)=>[n[0]+o[0]/2*(2*!!(a&1)-1),n[1]+o[1]/2*(2*!!(a&2)-1),n[2]+o[2]/2*(2*!!(a&4)-1)]);return SQi.create(s)}))};rIn.exports=PQi});var aIn=ct(function(Ags,sIn){var vQi=IIe(),{isGTE:EQi}=ep(),MQi=(e)=>{let t={center:[0,0,0],size:2},{center:n,size:o}=Object.assign({},t,e);if(!EQi(o,0))throw Error("size must be positive");return o=[o,o,o],vQi({center:n,size:o})};sIn.exports=MQi});var Ije=ct(function(_gs,lIn){var{EPS:cIn,TAU:PD}=Na(),JA=Ji(),BQi=ps(),wQi=ga(),{sin:TQi,cos:DQi}=qA(),{isGT:NQi,isGTE:xje,isNumberArray:Cje}=ep(),RQi=(e)=>{let t={center:[0,0,0],height:2,startRadius:[1,1],startAngle:0,endRadius:[1,1],endAngle:PD,segments:32},{center:n,height:o,startRadius:i,startAngle:r,endRadius:s,endAngle:a,segments:c}=Object.assign({},t,e);if(!Cje(n,3))throw Error("center must be an array of X, Y and Z values");if(!NQi(o,0))throw Error("height must be greater then zero");if(!Cje(i,2))throw Error("startRadius must be an array of X and Y values");if(!i.every((E)=>E>=0))throw Error("startRadius values must be positive");if(!Cje(s,2))throw Error("endRadius must be an array of X and Y values");if(!s.every((E)=>E>=0))throw Error("endRadius values must be positive");if(s.every((E)=>E===0)&&i.every((E)=>E===0))throw Error("at least one radius must be positive");if(!xje(r,0))throw Error("startAngle must be positive");if(!xje(a,0))throw Error("endAngle must be positive");if(!xje(c,4))throw Error("segments must be four or more");r=r%PD,a=a%PD;let l=PD;if(r<a)l=a-r;if(r>a)l=a+(PD-r);let d=Math.min(i[0],i[1],s[0],s[1]),u=Math.acos((d*d+d*d-cIn*cIn)/(2*d*d));if(l<u)throw Error("startAngle and endAngle do not define a significant rotation");let h=Math.floor(c*(l/PD)),A=JA.fromValues(0,0,-(o/2)),m=JA.fromValues(0,0,o/2),p=JA.subtract(JA.create(),m,A),g=JA.fromValues(1,0,0),_=JA.fromValues(0,1,0),f=JA.create(),y=JA.create(),x=JA.create(),C=(E,B,w)=>{let T=B*l+r;return JA.scale(f,g,w[0]*DQi(T)),JA.scale(y,_,w[1]*TQi(T)),JA.add(f,f,y),JA.scale(x,p,E),JA.add(x,x,A),JA.add(JA.create(),f,x)},I=(...E)=>{let B=E.map((w)=>JA.add(JA.create(),w,n));return wQi.create(B)},b=[];for(let E=0;E<h;E++){let B=E/h,w=(E+1)/h;if(l===PD&&E===h-1)w=0;if(s[0]===i[0]&&s[1]===i[1])b.push(I(A,C(0,w,s),C(0,B,s))),b.push(I(C(0,w,s),C(1,w,s),C(1,B,s),C(0,B,s))),b.push(I(m,C(1,B,s),C(1,w,s)));else{if(i[0]>0&&i[1]>0)b.push(I(A,C(0,w,i),C(0,B,i)));if(i[0]>0||i[1]>0)b.push(I(C(0,B,i),C(0,w,i),C(1,B,s)));if(s[0]>0&&s[1]>0)b.push(I(m,C(1,B,s),C(1,w,s)));if(s[0]>0||s[1]>0)b.push(I(C(1,B,s),C(0,w,i),C(1,w,s)))}}if(l<PD)b.push(I(A,C(0,0,i),m)),b.push(I(C(0,0,i),C(1,0,s),m)),b.push(I(A,m,C(0,1,i))),b.push(I(C(0,1,i),m,C(1,1,s)));return BQi.create(b)};lIn.exports=RQi});var bje=ct(function(ggs,dIn){var QQi=ps(),kQi=Ije(),{isGTE:LQi}=ep(),FQi=(e)=>{let t={center:[0,0,0],height:2,radius:1,segments:32},{center:n,height:o,radius:i,segments:r}=Object.assign({},t,e);if(!LQi(i,0))throw Error("radius must be positive");if(o===0||i===0)return QQi.create();return kQi({center:n,height:o,startRadius:[i,i],endRadius:[i,i],segments:r})};dIn.exports=FQi});var Sje=ct(function(fgs,gIn){var{TAU:uIn}=Na(),lr=Ji(),hIn=ps(),mIn=ga(),{sin:pIn,cos:AIn}=qA(),{isGTE:HQi,isNumberArray:_In}=ep(),OQi=(e)=>{let t={center:[0,0,0],radius:[1,1,1],segments:32,axes:[[1,0,0],[0,-1,0],[0,0,1]]},{center:n,radius:o,segments:i,axes:r}=Object.assign({},t,e);if(!_In(n,3))throw Error("center must be an array of X, Y and Z values");if(!_In(o,3))throw Error("radius must be an array of X, Y and Z values");if(!o.every((m)=>m>=0))throw Error("radius values must be positive");if(!HQi(i,4))throw Error("segments must be four or more");if(o[0]===0||o[1]===0||o[2]===0)return hIn.create();let s=lr.scale(lr.create(),lr.normalize(lr.create(),r[0]),o[0]),a=lr.scale(lr.create(),lr.normalize(lr.create(),r[1]),o[1]),c=lr.scale(lr.create(),lr.normalize(lr.create(),r[2]),o[2]),l=Math.round(i/4),d,u=[],h=lr.create(),A=lr.create();for(let m=0;m<=i;m++){let p=uIn*m/i,g=lr.add(lr.create(),lr.scale(h,s,AIn(p)),lr.scale(A,a,pIn(p)));if(m>0){let _,f;for(let y=0;y<=l;y++){let x=uIn/4*y/l,C=AIn(x),I=pIn(x);if(y>0){let b=[],P;if(P=lr.subtract(lr.create(),lr.scale(h,d,_),lr.scale(A,c,f)),b.push(lr.add(P,P,n)),P=lr.subtract(lr.create(),lr.scale(h,g,_),lr.scale(A,c,f)),b.push(lr.add(P,P,n)),y<l)P=lr.subtract(lr.create(),lr.scale(h,g,C),lr.scale(A,c,I)),b.push(lr.add(P,P,n));if(P=lr.subtract(lr.create(),lr.scale(h,d,C),lr.scale(A,c,I)),b.push(lr.add(P,P,n)),u.push(mIn.create(b)),b=[],P=lr.add(lr.create(),lr.scale(h,d,_),lr.scale(A,c,f)),b.push(lr.add(lr.create(),n,P)),P=lr.add(P,lr.scale(h,g,_),lr.scale(A,c,f)),b.push(lr.add(lr.create(),n,P)),y<l)P=lr.add(P,lr.scale(h,g,C),lr.scale(A,c,I)),b.push(lr.add(lr.create(),n,P));P=lr.add(P,lr.scale(h,d,C),lr.scale(A,c,I)),b.push(lr.add(lr.create(),n,P)),b.reverse(),u.push(mIn.create(b))}_=C,f=I}}d=g}return hIn.create(u)};gIn.exports=OQi});var Pje=ct(function(ygs,yIn){var zQi=ps(),GQi=ga(),{isNumberArray:fIn}=ep(),YQi=(e)=>{let t={points:[],faces:[],colors:void 0,orientation:"outward"},{points:n,faces:o,colors:i,orientation:r}=Object.assign({},t,e);if(!(Array.isArray(n)&&Array.isArray(o)))throw Error("points and faces must be arrays");if(n.length<3)throw Error("three or more points are required");if(o.length<1)throw Error("one or more faces are required");if(i){if(!Array.isArray(i))throw Error("colors must be an array");if(i.length!==o.length)throw Error("faces and colors must have the same length")}if(n.forEach((a,c)=>{if(!fIn(a,3))throw Error(`point ${c} must be an array of X, Y, Z values`)}),o.forEach((a,c)=>{if(a.length<3)throw Error(`face ${c} must contain 3 or more indexes`);if(!fIn(a,a.length))throw Error(`face ${c} must be an array of numbers`)}),r!=="outward")o.forEach((a)=>a.reverse());let s=o.map((a,c)=>{let l=GQi.create(a.map((d)=>n[d]));if(i&&i[c])l.color=i[c];return l});return zQi.create(s)};yIn.exports=YQi});var PIn=ct(function(xgs,SIn){var IIn=cd(),xIn=Ji(),bIn=ps(),VQi=Pje(),{isGTE:CIn}=ep(),UQi=(e)=>{let t={radius:1,frequency:6},{radius:n,frequency:o}=Object.assign({},t,e);if(!CIn(n,0))throw Error("radius must be positive");if(!CIn(o,6))throw Error("frequency must be six or more");if(n===0)return bIn.create();o=Math.floor(o/6);let i=[[0.850651,0,-0.525731],[0.850651,-0,0.525731],[-0.850651,-0,0.525731],[-0.850651,0,-0.525731],[0,-0.525731,0.850651],[0,0.525731,0.850651],[0,0.525731,-0.850651],[0,-0.525731,-0.850651],[-0.525731,-0.850651,-0],[0.525731,-0.850651,-0],[0.525731,0.850651,0],[-0.525731,0.850651,0]],r=[[0,9,1],[1,10,0],[6,7,0],[10,6,0],[7,9,0],[5,1,4],[4,1,9],[5,10,1],[2,8,3],[3,11,2],[2,5,4],[4,8,2],[2,11,5],[3,7,6],[6,11,3],[8,7,3],[9,8,4],[11,10,5],[10,11,6],[8,9,7]],s=(h,A,m)=>{let p=h[0],g=h[1],_=h[2],f=m,y=[],x=[];for(let C=0;C<A;C++)for(let I=0;I<A-C;I++){let b=C/A,P=(C+1)/A,E=I/(A-C),B=(I+1)/(A-C),w=A-C-1?I/(A-C-1):1,T=[];T[0]=a(a(p,g,E),_,b),T[1]=a(a(p,g,B),_,b),T[2]=a(a(p,g,w),_,P);for(let Q=0;Q<3;Q++){let N=xIn.length(T[Q]);for(let F=0;F<3;F++)T[Q][F]/=N}if(y.push(T[0],T[1],T[2]),x.push([f,f+1,f+2]),f+=3,I<A-C-1){let Q=A-C-1?(I+1)/(A-C-1):1;T[0]=a(a(p,g,B),_,b),T[1]=a(a(p,g,Q),_,P),T[2]=a(a(p,g,w),_,P);for(let N=0;N<3;N++){let F=xIn.length(T[N]);for(let H=0;H<3;H++)T[N][H]/=F}y.push(T[0],T[1],T[2]),x.push([f,f+1,f+2]),f+=3}}return{points:y,triangles:x,offset:f}},a=(h,A,m)=>{let p=1-m,g=[];for(let _=0;_<3;_++)g[_]=h[_]*p+A[_]*m;return g},c=[],l=[],d=0;for(let h=0;h<r.length;h++){let A=s([i[r[h][0]],i[r[h][1]],i[r[h][2]]],o,d);c=c.concat(A.points),l=l.concat(A.triangles),d=A.offset}let u=VQi({points:c,faces:l,orientation:"inward"});if(n!==1)u=bIn.transform(IIn.fromScaling(IIn.create(),[n,n,n]),u);return u};SIn.exports=UQi});var EIn=ct(function(Cgs,vIn){var WQi=Wl(),XQi=(e)=>{if(!Array.isArray(e))throw Error("points must be an array");return WQi.fromPoints({},e)};vIn.exports=XQi});var BIn=ct(function(Igs,MIn){var bIe=Cs(),KQi=(e)=>{let t={points:[],paths:[],orientation:"counterclockwise"},{points:n,paths:o,orientation:i}=Object.assign({},t,e);if(!(Array.isArray(n)&&Array.isArray(o)))throw Error("points and paths must be arrays");let r=n;if(Array.isArray(n[0])){if(!Array.isArray(n[0][0]))r=[n]}r.forEach((d,u)=>{if(!Array.isArray(d))throw Error("list of points "+u+" must be an array");if(d.length<3)throw Error("list of points "+u+" must contain three or more points");d.forEach((h,A)=>{if(!Array.isArray(h))throw Error("list of points "+u+", point "+A+" must be an array");if(h.length<2)throw Error("list of points "+u+", point "+A+" must contain by X and Y values")})});let s=o;if(o.length===0){let d=0;s=r.map((u)=>u.map((h)=>d++))}let a=[];r.forEach((d)=>d.forEach((u)=>a.push(u)));let c=[];s.forEach((d)=>{let u=d.map((A)=>a[A]),h=bIe.fromPoints(u);c=c.concat(bIe.toSides(h))});let l=bIe.create(c);if(i==="clockwise")l=bIe.reverse(l);return l};MIn.exports=KQi});var SIe=ct(function(bgs,DIn){var vD=Gs(),TIn=Cs(),{isNumberArray:wIn}=ep(),jQi=(e)=>{let t={center:[0,0],size:[2,2]},{center:n,size:o}=Object.assign({},t,e);if(!wIn(n,2))throw Error("center must be an array of X and Y values");if(!wIn(o,2))throw Error("size must be an array of X and Y values");if(!o.every((a)=>a>=0))throw Error("size values must be positive");if(o[0]===0||o[1]===0)return TIn.create();let i=[o[0]/2,o[1]/2],r=[i[0],-i[1]],s=[vD.subtract(vD.create(),n,i),vD.add(vD.create(),n,r),vD.add(vD.create(),n,i),vD.subtract(vD.create(),n,r)];return TIn.fromPoints(s)};DIn.exports=jQi});var OIn=ct(function(Sgs,HIn){var{EPS:PIe,TAU:fre}=Na(),vje=Gs(),pm=Ji(),NIn=ps(),YX=ga(),{sin:qQi,cos:JQi}=qA(),{isGTE:RIn,isNumberArray:QIn}=ep(),$Qi=IIe(),kIn=(e,t,n,o,i,r)=>{let s=fre/4*i/o,a=JQi(s),c=qQi(s),l=o-i,d=n*a,u=t[2]-(n-n*c);if(!r)u=n-n*c-t[2];d=d>PIe?d:0;let h=pm.add(pm.create(),e,[t[0]-n,t[1]-n,u]),A=pm.add(pm.create(),e,[n-t[0],t[1]-n,u]),m=pm.add(pm.create(),e,[n-t[0],n-t[1],u]),p=pm.add(pm.create(),e,[t[0]-n,n-t[1],u]),g=[],_=[],f=[],y=[];for(let x=0;x<=l;x++){let C=l>0?fre/4*x/l:0,I=vje.fromAngleRadians(vje.create(),C);vje.scale(I,I,d);let b=pm.fromVec2(pm.create(),I);g.push(pm.add(pm.create(),h,b)),pm.rotateZ(b,b,[0,0,0],fre/4),_.push(pm.add(pm.create(),A,b)),pm.rotateZ(b,b,[0,0,0],fre/4),f.push(pm.add(pm.create(),m,b)),pm.rotateZ(b,b,[0,0,0],fre/4),y.push(pm.add(pm.create(),p,b))}if(!r)return g.reverse(),_.reverse(),f.reverse(),y.reverse(),[y,f,_,g];return[g,_,f,y]},LIn=(e,t)=>{let n=[];for(let o=0;o<e.length;o++){let i=e[o],r=t[o];for(let s=0;s<i.length-1;s++)if(n.push(YX.create([i[s],i[s+1],r[s]])),s<r.length-1)n.push(YX.create([r[s],i[s+1],r[s+1]]))}return n},FIn=(e,t)=>{let n=[];for(let o=0;o<e.length;o++){let i=e[o],r=t[o],s=i[i.length-1],a=r[r.length-1],c=(o+1)%e.length;i=e[c],r=t[c];let l=i[0],d=r[0];n.push(YX.create([s,l,d,a]))}return n},ZQi=(e,t)=>{e=[e[3],e[2],e[1],e[0]],e=e.map((r)=>r.slice().reverse());let n=[];e.forEach((r)=>{r.forEach((s)=>n.push(s))});let o=[];t.forEach((r)=>{r.forEach((s)=>o.push(s))});let i=[];for(let r=0;r<o.length;r++){let s=(r+1)%o.length;i.push(YX.create([n[r],n[s],o[s],o[r]]))}return i},eki=(e)=>{let t={center:[0,0,0],size:[2,2,2],roundRadius:0.2,segments:32},{center:n,size:o,roundRadius:i,segments:r}=Object.assign({},t,e);if(!QIn(n,3))throw Error("center must be an array of X, Y and Z values");if(!QIn(o,3))throw Error("size must be an array of X, Y and Z values");if(!o.every((l)=>l>=0))throw Error("size values must be positive");if(!RIn(i,0))throw Error("roundRadius must be positive");if(!RIn(r,4))throw Error("segments must be four or more");if(o[0]===0||o[1]===0||o[2]===0)return NIn.create();if(i===0)return $Qi({center:n,size:o});if(o=o.map((l)=>l/2),i>o[0]-PIe||i>o[1]-PIe||i>o[2]-PIe)throw Error("roundRadius must be smaller than the radius of all dimensions");r=Math.floor(r/4);let s=null,a=null,c=[];for(let l=0;l<=r;l++){let d=kIn(n,o,i,r,l,!0),u=kIn(n,o,i,r,l,!1);if(l===0)c=c.concat(ZQi(u,d));if(s)c=c.concat(LIn(s,d),FIn(s,d));if(a)c=c.concat(LIn(a,u),FIn(a,u));if(l===r){let h=d.map((A)=>A[0]);c.push(YX.create(h)),h=u.map((A)=>A[0]),c.push(YX.create(h))}s=d,a=u}return NIn.create(c)};HIn.exports=eki});var WIn=ct(function(Pgs,UIn){var{EPS:tki,TAU:zIn}=Na(),si=Ji(),GIn=ps(),nki=ga(),{sin:YIn,cos:VIn}=qA(),{isGTE:vIe,isNumberArray:oki}=ep(),iki=bje(),rki=(e)=>{let t={center:[0,0,0],height:2,radius:1,roundRadius:0.2,segments:32},{center:n,height:o,radius:i,roundRadius:r,segments:s}=Object.assign({},t,e);if(!oki(n,3))throw Error("center must be an array of X, Y and Z values");if(!vIe(o,0))throw Error("height must be positive");if(!vIe(i,0))throw Error("radius must be positive");if(!vIe(r,0))throw Error("roundRadius must be positive");if(r>i)throw Error("roundRadius must be smaller than the radius");if(!vIe(s,4))throw Error("segments must be four or more");if(o===0||i===0)return GIn.create();if(r===0)return iki({center:n,height:o,radius:i});let a=[0,0,-(o/2)],c=[0,0,o/2],l=si.subtract(si.create(),c,a),d=si.length(l);if(2*r>d-tki)throw Error("height must be larger than twice roundRadius");let u;if(Math.abs(l[0])>Math.abs(l[1]))u=si.fromValues(0,1,0);else u=si.fromValues(1,0,0);let h=si.scale(si.create(),si.normalize(si.create(),l),r),A=si.scale(si.create(),si.normalize(si.create(),si.cross(si.create(),h,u)),i),m=si.scale(si.create(),si.normalize(si.create(),si.cross(si.create(),A,h)),i);si.add(a,a,h),si.subtract(c,c,h);let p=Math.floor(0.25*s),g=(I)=>{let b=I.map((P)=>si.add(P,P,n));return nki.create(b)},_=[],f=si.create(),y=si.create(),x;for(let I=0;I<=s;I++){let b=zIn*I/s,P=si.add(si.create(),si.scale(f,A,VIn(b)),si.scale(y,m,YIn(b)));if(I>0){let E=[];E.push(si.add(si.create(),a,P)),E.push(si.add(si.create(),a,x)),E.push(si.add(si.create(),c,x)),E.push(si.add(si.create(),c,P)),_.push(g(E));let B,w;for(let T=0;T<=p;T++){let Q=zIn/4*T/p,N=VIn(Q),F=YIn(Q);if(T>0){E=[];let H;if(H=si.add(si.create(),a,si.subtract(f,si.scale(f,x,B),si.scale(y,h,w))),E.push(H),H=si.add(si.create(),a,si.subtract(f,si.scale(f,P,B),si.scale(y,h,w))),E.push(H),T<p)H=si.add(si.create(),a,si.subtract(f,si.scale(f,P,N),si.scale(y,h,F))),E.push(H);if(H=si.add(si.create(),a,si.subtract(f,si.scale(f,x,N),si.scale(y,h,F))),E.push(H),_.push(g(E)),E=[],H=si.add(si.create(),si.scale(f,x,B),si.scale(y,h,w)),si.add(H,H,c),E.push(H),H=si.add(si.create(),si.scale(f,P,B),si.scale(y,h,w)),si.add(H,H,c),E.push(H),T<p)H=si.add(si.create(),si.scale(f,P,N),si.scale(y,h,F)),si.add(H,H,c),E.push(H);H=si.add(si.create(),si.scale(f,x,N),si.scale(y,h,F)),si.add(H,H,c),E.push(H),E.reverse(),_.push(g(E))}B=N,w=F}}x=P}return GIn.create(_)};UIn.exports=rki});var $In=ct(function(vgs,JIn){var{EPS:XIn,TAU:EIe}=Na(),nh=Gs(),qIn=Cs(),{isGTE:KIn,isNumberArray:jIn}=ep(),ski=SIe(),aki=(e)=>{let t={center:[0,0],size:[2,2],roundRadius:0.2,segments:32},{center:n,size:o,roundRadius:i,segments:r}=Object.assign({},t,e);if(!jIn(n,2))throw Error("center must be an array of X and Y values");if(!jIn(o,2))throw Error("size must be an array of X and Y values");if(!o.every((p)=>p>=0))throw Error("size values must be positive");if(!KIn(i,0))throw Error("roundRadius must be positive");if(!KIn(r,4))throw Error("segments must be four or more");if(o[0]===0||o[1]===0)return qIn.create();if(i===0)return ski({center:n,size:o});if(o=o.map((p)=>p/2),i>o[0]-XIn||i>o[1]-XIn)throw Error("roundRadius must be smaller than the radius of all dimensions");let s=Math.floor(r/4),a=nh.add(nh.create(),n,[o[0]-i,o[1]-i]),c=nh.add(nh.create(),n,[i-o[0],o[1]-i]),l=nh.add(nh.create(),n,[i-o[0],i-o[1]]),d=nh.add(nh.create(),n,[o[0]-i,i-o[1]]),u=[],h=[],A=[],m=[];for(let p=0;p<=s;p++){let g=EIe/4*p/s,_=nh.fromAngleRadians(nh.create(),g);nh.scale(_,_,i),u.push(nh.add(nh.create(),a,_)),nh.rotate(_,_,nh.create(),EIe/4),h.push(nh.add(nh.create(),c,_)),nh.rotate(_,_,nh.create(),EIe/4),A.push(nh.add(nh.create(),l,_)),nh.rotate(_,_,nh.create(),EIe/4),m.push(nh.add(nh.create(),d,_))}return qIn.fromPoints(u.concat(h,A,m))};JIn.exports=aki});var Eje=ct(function(Egs,ZIn){var cki=Sje(),{isGTE:lki}=ep(),dki=(e)=>{let t={center:[0,0,0],radius:1,segments:32,axes:[[1,0,0],[0,-1,0],[0,0,1]]},{center:n,radius:o,segments:i,axes:r}=Object.assign({},t,e);if(!lki(o,0))throw Error("radius must be positive");return o=[o,o,o],cki({center:n,radius:o,segments:i,axes:r})};ZIn.exports=dki});var tbn=ct(function(Mgs,ebn){var uki=SIe(),{isGTE:hki}=ep(),mki=(e)=>{let t={center:[0,0],size:2},{center:n,size:o}=Object.assign({},t,e);if(!hki(o,0))throw Error("size must be positive");return o=[o,o],uki({center:n,size:o})};ebn.exports=mki});var rbn=ct(function(Bgs,ibn){var{TAU:obn}=Na(),yre=Gs(),pki=Cs(),{isGT:Aki,isGTE:MIe,isNumberArray:_ki}=ep(),gki=(e,t)=>{if(e>0&&t>1&&t<e/2)return Math.cos(Math.PI*t/e)/Math.cos(Math.PI*(t-1)/e);return 0},nbn=(e,t,n,o)=>{let i=obn/e,r=[];for(let s=0;s<e;s++){let a=yre.fromAngleRadians(yre.create(),i*s+n);yre.scale(a,a,t),yre.add(a,o,a),r.push(a)}return r},fki=(e)=>{let t={center:[0,0],vertices:5,outerRadius:1,innerRadius:0,density:2,startAngle:0},{center:n,vertices:o,outerRadius:i,innerRadius:r,density:s,startAngle:a}=Object.assign({},t,e);if(!_ki(n,2))throw Error("center must be an array of X and Y values");if(!MIe(o,2))throw Error("vertices must be two or more");if(!Aki(i,0))throw Error("outerRadius must be greater than zero");if(!MIe(r,0))throw Error("innerRadius must be greater than zero");if(!MIe(a,0))throw Error("startAngle must be greater than zero");if(o=Math.floor(o),s=Math.floor(s),a=a%obn,r===0){if(!MIe(s,2))throw Error("density must be two or more");r=i*gki(o,s)}let c=yre.clone(n),l=nbn(o,i,a,c),d=nbn(o,r,a+Math.PI/o,c),u=[];for(let h=0;h<o;h++)u.push(l[h]),u.push(d[h]);return pki.fromPoints(u)};ibn.exports=fki});var VX=ct(function(wgs,ubn){var yki=Zr(),sbn=cd(),abn=VS(),cbn=Cs(),lbn=ps(),dbn=Wl(),BIe=(e,...t)=>{let n={origin:[0,0,0],normal:[0,0,1]},{origin:o,normal:i}=Object.assign({},n,e);if(t=yki(t),t.length===0)throw Error("wrong number of arguments");let r=abn.fromNormalAndPoint(abn.create(),i,o);if(Number.isNaN(r[0]))throw Error("the given origin and normal do not define a proper plane");let s=sbn.mirrorByPlane(sbn.create(),r),a=t.map((c)=>{if(dbn.isA(c))return dbn.transform(s,c);if(cbn.isA(c))return cbn.transform(s,c);if(lbn.isA(c))return lbn.transform(s,c);return c});return a.length===1?a[0]:a},xki=(...e)=>BIe({normal:[1,0,0]},e),Cki=(...e)=>BIe({normal:[0,1,0]},e),Iki=(...e)=>BIe({normal:[0,0,1]},e);ubn.exports={mirror:BIe,mirrorX:xki,mirrorY:Cki,mirrorZ:Iki}});var Mje=ct(function(Tgs,mbn){var hbn=VS(),XF=Ji(),bki=(e)=>{let t=e.edges;if(t.length<3)throw Error("slices must have 3 or more edges to calculate a plane");let n=t.reduce((s,a)=>XF.add(XF.create(),s,a[0]),XF.create());XF.scale(n,n,1/t.length);let o,i=0;t.forEach((s)=>{if(!XF.equals(s[0],s[1])){let a=XF.squaredDistance(n,s[0]);if(a>i)o=s,i=a}});let r=t.find((s)=>XF.equals(s[1],o[0]));return hbn.fromPoints(hbn.create(),r[0],o[0],o[1])};mbn.exports=bki});var ED=ct(function(Dgs,pbn){var Ski=(e)=>{if(!e)e=[];return{edges:e}};pbn.exports=Ski});var gbn=ct(function(Ngs,_bn){var Pki=ED(),Abn=Ji(),vki=(...e)=>{let t,n;if(e.length===1)t=Pki(),n=e[0];else t=e[0],n=e[1];return t.edges=n.edges.map((o)=>[Abn.clone(o[0]),Abn.clone(o[1])]),t};_bn.exports=vki});var ybn=ct(function(Rgs,fbn){var Eki=Ji(),Mki=(e,t)=>{let n=e.edges,o=t.edges;if(n.length!==o.length)return!1;return n.reduce((r,s,a)=>{let c=o[a],l=Eki.squaredDistance(s[0],c[0]);return r&&l<Number.EPSILON},!0)};fbn.exports=Mki});var Cbn=ct(function(Qgs,xbn){var wIe=Ji(),Bki=ED(),wki=(e)=>{if(!Array.isArray(e))throw Error("the given points must be an array");if(e.length<3)throw Error("the given points must contain THREE or more points");let t=[],n=e[e.length-1];return e.forEach((o)=>{if(o.length===2)t.push([wIe.fromVec2(wIe.create(),n),wIe.fromVec2(wIe.create(),o)]);if(o.length===3)t.push([n,o]);n=o}),Bki(t)};xbn.exports=wki});var bbn=ct(function(kgs,Ibn){var TIe=Ji(),Tki=ED(),Dki=(e)=>{if(!Array.isArray(e))throw Error("the given sides must be an array");let t=[];return e.forEach((n)=>{t.push([TIe.fromVec2(TIe.create(),n[0]),TIe.fromVec2(TIe.create(),n[1])])}),Tki(t)};Ibn.exports=Dki});var Pbn=ct(function(Lgs,Sbn){var Nki=(e)=>{if(e&&typeof e==="object"){if("edges"in e){if(Array.isArray(e.edges))return!0}}return!1};Sbn.exports=Nki});var Ebn=ct(function(Fgs,vbn){var Rki=ED(),Qki=(...e)=>{let t,n;if(e.length===1)t=Rki(),n=e[0];else t=e[0],n=e[1];return t.edges=n.edges.map((o)=>[o[1],o[0]]),t};vbn.exports=Qki});var Bbn=ct(function(Hgs,Mbn){var kki=(e)=>e.edges;Mbn.exports=kki});var Tbn=ct(function(Ogs,wbn){var Lki=(e,t)=>{let n,o,i,r,s,a=1;do{o=e,e=null;let c=null;s=0;while(o){s++,i=o;let l=0;for(n=0;n<a;n++)if(l++,i=i.nextZ,!i)break;let d=a;while(l>0||d>0&&i){if(l!==0&&(d===0||!i||t(o)<=t(i)))r=o,o=o.nextZ,l--;else r=i,i=i.nextZ,d--;if(c)c.nextZ=r;else e=r;r.prevZ=c,c=r}o=i}c.nextZ=null,a*=2}while(s>1);return e};wbn.exports=Lki});var wje=ct(function(zgs,Dbn){var Fki=Tbn();class Bje{constructor(e,t,n){this.i=e,this.x=t,this.y=n,this.prev=null,this.next=null,this.z=null,this.prevZ=null,this.nextZ=null,this.steiner=!1}}var Hki=(e,t,n,o)=>{let i=new Bje(e,t,n);if(!o)i.prev=i,i.next=i;else i.next=o.next,i.prev=o,o.next.prev=i,o.next=i;return i},Oki=(e)=>{if(e.next.prev=e.prev,e.prev.next=e.next,e.prevZ)e.prevZ.nextZ=e.nextZ;if(e.nextZ)e.nextZ.prevZ=e.prevZ};Dbn.exports={Node:Bje,insertNode:Hki,removeNode:Oki,sortLinked:Fki}});var DIe=ct(function(Ggs,Nbn){var zki=(e,t,n,o,i,r,s,a)=>(i-s)*(t-a)-(e-s)*(r-a)>=0&&(e-s)*(o-a)-(n-s)*(t-a)>=0&&(n-s)*(r-a)-(i-s)*(o-a)>=0,Gki=(e,t,n)=>(t.y-e.y)*(n.x-t.x)-(t.x-e.x)*(n.y-t.y);Nbn.exports={area:Gki,pointInTriangle:zki}});var Tje=ct(function(Ygs,Fbn){var{Node:Rbn,insertNode:Qbn,removeNode:RIe}=wje(),{area:Jy}=DIe(),Yki=(e,t,n,o,i)=>{let r;if(i===jki(e,t,n,o)>0)for(let s=t;s<n;s+=o)r=Qbn(s,e[s],e[s+1],r);else for(let s=n-o;s>=t;s-=o)r=Qbn(s,e[s],e[s+1],r);if(r&&QIe(r,r.next))RIe(r),r=r.next;return r},kbn=(e,t)=>{if(!e)return e;if(!t)t=e;let n=e,o;do if(o=!1,!n.steiner&&(QIe(n,n.next)||Jy(n.prev,n,n.next)===0)){if(RIe(n),n=t=n.prev,n===n.next)break;o=!0}else n=n.next;while(o||n!==t);return t},Vki=(e,t,n)=>{let o=e;do{let i=o.prev,r=o.next.next;if(!QIe(i,r)&&Lbn(i,o,o.next,r)&&xre(i,r)&&xre(r,i))t.push(i.i/n),t.push(o.i/n),t.push(r.i/n),RIe(o),RIe(o.next),o=e=r;o=o.next}while(o!==e);return kbn(o)},Uki=(e,t)=>{let n=e;do{if(n.i!==e.i&&n.next.i!==e.i&&n.i!==t.i&&n.next.i!==t.i&&Lbn(n,n.next,e,t))return!0;n=n.next}while(n!==e);return!1},xre=(e,t)=>Jy(e.prev,e,e.next)<0?Jy(e,t,e.next)>=0&&Jy(e,e.prev,t)>=0:Jy(e,t,e.prev)<0||Jy(e,e.next,t)<0,Wki=(e,t)=>{let n=e,o=!1,i=(e.x+t.x)/2,r=(e.y+t.y)/2;do{if(n.y>r!==n.next.y>r&&n.next.y!==n.y&&i<(n.next.x-n.x)*(r-n.y)/(n.next.y-n.y)+n.x)o=!o;n=n.next}while(n!==e);return o},Xki=(e,t)=>{let n=new Rbn(e.i,e.x,e.y),o=new Rbn(t.i,t.x,t.y),i=e.next,r=t.prev;return e.next=t,t.prev=e,n.next=i,i.prev=n,o.next=n,n.prev=o,r.next=o,o.prev=r,o},Kki=(e,t)=>e.next.i!==t.i&&e.prev.i!==t.i&&!Uki(e,t)&&(xre(e,t)&&xre(t,e)&&Wki(e,t)&&(Jy(e.prev,e,t.prev)||Jy(e,t.prev,t))||QIe(e,t)&&Jy(e.prev,e,e.next)>0&&Jy(t.prev,t,t.next)>0),Lbn=(e,t,n,o)=>{let i=Math.sign(Jy(e,t,n)),r=Math.sign(Jy(e,t,o)),s=Math.sign(Jy(n,o,e)),a=Math.sign(Jy(n,o,t));if(i!==r&&s!==a)return!0;if(i===0&&NIe(e,n,t))return!0;if(r===0&&NIe(e,o,t))return!0;if(s===0&&NIe(n,e,o))return!0;if(a===0&&NIe(n,t,o))return!0;return!1},NIe=(e,t,n)=>t.x<=Math.max(e.x,n.x)&&t.x>=Math.min(e.x,n.x)&&t.y<=Math.max(e.y,n.y)&&t.y>=Math.min(e.y,n.y),jki=(e,t,n,o)=>{let i=0;for(let r=t,s=n-o;r<n;r+=o)i+=(e[s]-e[r])*(e[r+1]+e[s+1]),s=r;return i},QIe=(e,t)=>e.x===t.x&&e.y===t.y;Fbn.exports={cureLocalIntersections:Vki,filterPoints:kbn,isValidDiagonal:Kki,linkedPolygon:Yki,locallyInside:xre,splitPolygon:Xki}});var zbn=ct(function(Vgs,Obn){var{filterPoints:Dje,linkedPolygon:qki,locallyInside:Jki,splitPolygon:$ki}=Tje(),{area:Hbn,pointInTriangle:Zki}=DIe(),eLi=(e,t,n,o)=>{let i=[];for(let r=0,s=t.length;r<s;r++){let a=t[r]*o,c=r<s-1?t[r+1]*o:e.length,l=qki(e,a,c,o,!1);if(l===l.next)l.steiner=!0;i.push(iLi(l))}i.sort((r,s)=>r.x-s.x);for(let r=0;r<i.length;r++)n=tLi(i[r],n),n=Dje(n,n.next);return n},tLi=(e,t)=>{let n=nLi(e,t);if(!n)return t;let o=$ki(n,e),i=Dje(n,n.next);return Dje(o,o.next),t===n?i:t},nLi=(e,t)=>{let n=t,{x:o,y:i}=e,r=-1/0,s;do{if(i<=n.y&&i>=n.next.y&&n.next.y!==n.y){let u=n.x+(i-n.y)*(n.next.x-n.x)/(n.next.y-n.y);if(u<=o&&u>r){if(r=u,u===o){if(i===n.y)return n;if(i===n.next.y)return n.next}s=n.x<n.next.x?n:n.next}}n=n.next}while(n!==t);if(!s)return null;if(o===r)return s;let a=s,c=s.x,l=s.y,d=1/0;n=s;do{if(o>=n.x&&n.x>=c&&o!==n.x&&Zki(i<l?o:r,i,c,l,i<l?r:o,i,n.x,n.y)){let u=Math.abs(i-n.y)/(o-n.x);if(Jki(n,e)&&(u<d||u===d&&(n.x>s.x||n.x===s.x&&oLi(s,n))))s=n,d=u}n=n.next}while(n!==a);return s},oLi=(e,t)=>Hbn(e.prev,e,t.prev)<0&&Hbn(t.next,e,e.next)<0,iLi=(e)=>{let t=e,n=e;do{if(t.x<n.x||t.x===n.x&&t.y<n.y)n=t;t=t.next}while(t!==e);return n};Obn.exports=eLi});var Ybn=ct(function(Ugs,Gbn){var rLi=zbn(),{removeNode:sLi,sortLinked:aLi}=wje(),{cureLocalIntersections:cLi,filterPoints:kIe,isValidDiagonal:lLi,linkedPolygon:dLi,splitPolygon:uLi}=Tje(),{area:KF,pointInTriangle:Cre}=DIe(),hLi=(e,t,n=2)=>{let o=t&&t.length,i=o?t[0]*n:e.length,r=dLi(e,0,i,n,!0),s=[];if(!r||r.next===r.prev)return s;let a,c,l,d,u;if(o)r=rLi(e,t,r,n);if(e.length>80*n){a=l=e[0],c=d=e[1];for(let h=n;h<i;h+=n){let A=e[h],m=e[h+1];if(A<a)a=A;if(m<c)c=m;if(A>l)l=A;if(m>d)d=m}u=Math.max(l-a,d-c),u=u!==0?1/u:0}return Ire(r,s,n,a,c,u),s},Ire=(e,t,n,o,i,r,s)=>{if(!e)return;if(!s&&r)_Li(e,o,i,r);let a=e,c,l;while(e.prev!==e.next){if(c=e.prev,l=e.next,r?pLi(e,o,i,r):mLi(e)){t.push(c.i/n),t.push(e.i/n),t.push(l.i/n),sLi(e),e=l.next,a=l.next;continue}if(e=l,e===a){if(!s)Ire(kIe(e),t,n,o,i,r,1);else if(s===1)e=cLi(kIe(e),t,n),Ire(e,t,n,o,i,r,2);else if(s===2)ALi(e,t,n,o,i,r);break}}},mLi=(e)=>{let t=e.prev,n=e,o=e.next;if(KF(t,n,o)>=0)return!1;let i=e.next.next;while(i!==e.prev){if(Cre(t.x,t.y,n.x,n.y,o.x,o.y,i.x,i.y)&&KF(i.prev,i,i.next)>=0)return!1;i=i.next}return!0},pLi=(e,t,n,o)=>{let i=e.prev,r=e,s=e.next;if(KF(i,r,s)>=0)return!1;let a=i.x<r.x?i.x<s.x?i.x:s.x:r.x<s.x?r.x:s.x,c=i.y<r.y?i.y<s.y?i.y:s.y:r.y<s.y?r.y:s.y,l=i.x>r.x?i.x>s.x?i.x:s.x:r.x>s.x?r.x:s.x,d=i.y>r.y?i.y>s.y?i.y:s.y:r.y>s.y?r.y:s.y,u=Nje(a,c,t,n,o),h=Nje(l,d,t,n,o),{prevZ:A,nextZ:m}=e;while(A&&A.z>=u&&m&&m.z<=h){if(A!==e.prev&&A!==e.next&&Cre(i.x,i.y,r.x,r.y,s.x,s.y,A.x,A.y)&&KF(A.prev,A,A.next)>=0)return!1;if(A=A.prevZ,m!==e.prev&&m!==e.next&&Cre(i.x,i.y,r.x,r.y,s.x,s.y,m.x,m.y)&&KF(m.prev,m,m.next)>=0)return!1;m=m.nextZ}while(A&&A.z>=u){if(A!==e.prev&&A!==e.next&&Cre(i.x,i.y,r.x,r.y,s.x,s.y,A.x,A.y)&&KF(A.prev,A,A.next)>=0)return!1;A=A.prevZ}while(m&&m.z<=h){if(m!==e.prev&&m!==e.next&&Cre(i.x,i.y,r.x,r.y,s.x,s.y,m.x,m.y)&&KF(m.prev,m,m.next)>=0)return!1;m=m.nextZ}return!0},ALi=(e,t,n,o,i,r)=>{let s=e;do{let a=s.next.next;while(a!==s.prev){if(s.i!==a.i&&lLi(s,a)){let c=uLi(s,a);s=kIe(s,s.next),c=kIe(c,c.next),Ire(s,t,n,o,i,r),Ire(c,t,n,o,i,r);return}a=a.next}s=s.next}while(s!==e)},_Li=(e,t,n,o)=>{let i=e;do{if(i.z===null)i.z=Nje(i.x,i.y,t,n,o);i.prevZ=i.prev,i.nextZ=i.next,i=i.next}while(i!==e);i.prevZ.nextZ=null,i.prevZ=null,aLi(i,(r)=>r.z)},Nje=(e,t,n,o,i)=>(e=32767*(e-n)*i,t=32767*(t-o)*i,e=(e|e<<8)&16711935,e=(e|e<<4)&252645135,e=(e|e<<2)&858993459,e=(e|e<<1)&1431655765,t=(t|t<<8)&16711935,t=(t|t<<4)&252645135,t=(t|t<<2)&858993459,t=(t|t<<1)&1431655765,e|t<<1);Gbn.exports=hLi});var Ubn=ct(function(Wgs,Vbn){var{area:gLi}=kX(),{toOutlines:fLi}=Cs(),{arePointsInside:yLi}=hIe(),xLi=(e)=>{let t=fLi(e),n=[],o=[];t.forEach((s,a)=>{let c=gLi(s);if(c<0)o.push(a);else if(c>0)n.push(a)});let i=[],r=[];return n.forEach((s,a)=>{let c=t[s];i[a]=[],o.forEach((l,d)=>{let u=t[l];if(yLi([u[0]],{vertices:c})){if(i[a].push(l),!r[d])r[d]=[];r[d].push(a)}})}),o.forEach((s,a)=>{if(r[a]&&r[a].length>1){let c=CLi(r[a],(l)=>i[l].length);r[a].forEach((l,d)=>{if(d!==c)i[l]=i[l].filter((u)=>u!==s)})}}),i.map((s,a)=>({solid:t[n[a]],holes:s.map((c)=>t[c])}))},CLi=(e,t)=>{let n,o;return e.forEach((i,r)=>{let s=t(i);if(o===void 0||s<o)n=r,o=s}),n};Vbn.exports=xLi});var jbn=ct(function(Xgs,Kbn){var ILi=Cs(),Wbn=VS(),bLi=Gs(),K_=Ji(),SLi=Mje(),PLi=Ubn();class Xbn{constructor(e){this.plane=SLi(e);let t=K_.orthogonal(K_.create(),this.plane),n=K_.cross(K_.create(),this.plane,t);this.v=K_.normalize(n,n),this.u=K_.cross(K_.create(),this.v,this.plane),this.basisMap=new Map;let o=e.edges.map((r)=>r.map((s)=>this.to2D(s))),i=ILi.create(o);this.roots=PLi(i)}to2D(e){let t=bLi.fromValues(K_.dot(e,this.u),K_.dot(e,this.v));return this.basisMap.set(t,e),t}to3D(e){let t=this.basisMap.get(e);if(t)return t;else{console.log("Warning: point not in original slice");let n=K_.scale(K_.create(),this.u,e[0]),o=K_.scale(K_.create(),this.v,e[1]),i=K_.scale(K_.create(),Wbn,Wbn[3]),r=K_.add(n,n,i);return K_.add(o,o,r)}}}Kbn.exports=Xbn});var Jbn=ct(function(Kgs,qbn){var vLi=ga(),ELi=Ybn(),MLi=jbn(),BLi=(e)=>{let t=new MLi(e),n=[];return t.roots.forEach(({solid:o,holes:i})=>{let r=o.length,s=[];i.forEach((u,h)=>{s.push(r),r+=u.length});let a=[o,...i].flat(),c=a.flat(),l=(u)=>t.to3D(a[u]),d=ELi(c,s);for(let u=0;u<d.length;u+=3){let h=d.slice(u,u+3).map(l);n.push(vLi.fromPointsAndPlane(h,t.plane))}}),n};qbn.exports=BLi});var e5n=ct(function(jgs,Zbn){var $bn=Ji(),wLi=(e)=>e.reduce((t,n)=>t+=`[${$bn.toString(n[0])}, ${$bn.toString(n[1])}], `,""),TLi=(e)=>`[${wLi(e.edges)}]`;Zbn.exports=TLi});var n5n=ct(function(qgs,t5n){var LIe=Ji(),DLi=ED(),NLi=(e,t)=>{let n=t.edges.map((o)=>[LIe.transform(LIe.create(),o[0],e),LIe.transform(LIe.create(),o[1],e)]);return DLi(n)};t5n.exports=NLi});var jF=ct(function(Jgs,o5n){o5n.exports={calculatePlane:Mje(),clone:gbn(),create:ED(),equals:ybn(),fromPoints:Cbn(),fromSides:bbn(),isA:Pbn(),reverse:Ebn(),toEdges:Bbn(),toPolygons:Jbn(),toString:e5n(),transform:n5n()}});var s5n=ct(function($gs,r5n){var i5n=Ji(),RLi=ED(),QLi=(e)=>{if(!e.edges)return e;let t=e.edges,n=new Map,o=new Map;t=t.filter((s)=>!i5n.equals(s[0],s[1])),t.forEach((s)=>{let a=s[0].toString(),c=s[1].toString();n.set(a,s[0]),n.set(c,s[1]),o.set(a,(o.get(a)||0)+1),o.set(c,(o.get(c)||0)-1)});let i=[],r=[];return o.forEach((s,a)=>{if(s<0)i.push(a);if(s>0)r.push(a)}),i.forEach((s)=>{let a=n.get(s),c=1/0,l;r.forEach((d)=>{let u=n.get(d),h=i5n.distance(a,u);if(h<c)c=h,l=u}),console.warn(`slice.repair: repairing vertex gap ${a} to ${l} distance ${c}`),t=t.map((d)=>{if(d[0].toString()===s)return[l,d[1]];if(d[1].toString()===s)return[d[0],l];return d})}),RLi(t)};r5n.exports=QLi});var h5n=ct(function(Zgs,u5n){var{EPS:a5n}=Na(),UX=Ji(),FIe=ga(),c5n=jF(),Rje=(e,t)=>{if(e===t)return e;if(e<t)return Rje(t,e);if(t===1)return 1;if(t===0)return e;return Rje(t,e%t)},kLi=(e,t)=>e*t/Rje(e,t),l5n=(e,t)=>{let n=e/t.length;if(n===1)return t;let o=UX.fromValues(n,n,n),i=UX.create(),r=[];return t.forEach((s)=>{UX.subtract(i,s[1],s[0]),UX.divide(i,i,o);let a=s[0];for(let c=1;c<=n;++c){let l=UX.add(UX.create(),a,i);r.push([a,l]),a=l}}),r},d5n=a5n*a5n/2*Math.sin(Math.PI/3),LLi=(e,t)=>{let n=c5n.toEdges(e),o=c5n.toEdges(t);if(n.length!==o.length){let r=kLi(n.length,o.length);if(r!==n.length)n=l5n(r,n);if(r!==o.length)o=l5n(r,o)}let i=[];return n.forEach((r,s)=>{let a=o[s],c=FIe.create([r[0],r[1],a[1]]),l=FIe.measureArea(c);if(Number.isFinite(l)&&l>d5n)i.push(c);let d=FIe.create([r[0],a[1],a[0]]),u=FIe.measureArea(d);if(Number.isFinite(u)&&u>d5n)i.push(d)}),i};u5n.exports=LLi});var bre=ct(function(efs,_5n){var p5n=cd(),A5n=Cs(),FLi=ps(),Qje=ga(),MD=jF(),HLi=s5n(),m5n=h5n(),OLi=(e,t,n)=>{let o=null;if(A5n.isA(n))o=MD.fromSides(A5n.toSides(n));if(Qje.isA(n))o=MD.fromPoints(Qje.toPoints(n));return e===0||e===1?MD.transform(p5n.fromTranslation(p5n.create(),[0,0,e]),o):null},zLi=(e,t)=>{let n={numberOfSlices:2,capStart:!0,capEnd:!0,close:!1,repair:!0,callback:OLi},{numberOfSlices:o,capStart:i,capEnd:r,close:s,repair:a,callback:c}=Object.assign({},n,e);if(o<2)throw Error("numberOfSlices must be 2 or more");if(a)t=HLi(t);let l=o-1,d=null,u=null,h=null,A=[];for(let m=0;m<o;m++){let p=c(m/l,m,t);if(p){if(!MD.isA(p))throw Error("the callback function must return slice objects");if(MD.toEdges(p).length===0)throw Error("the callback function must return slices with one or more edges");if(h){let _=m5n(h,p);for(let f=0;f<_.length;f++)A.push(_[f])}if(m===0)d=p;if(m===o-1)u=p;h=p}}if(r){let m=MD.toPolygons(u);for(let p=0;p<m.length;p++)A.push(m[p])}if(i){let m=MD.toPolygons(d).map(Qje.invert);for(let p=0;p<m.length;p++)A.push(m[p])}if(!i&&!r){if(s&&!MD.equals(u,d)){let m=m5n(u,d);for(let p=0;p<m.length;p++)A.push(m[p])}}return FLi.create(A)};_5n.exports=zLi});var Lje=ct(function(tfs,g5n){var{TAU:Xx}=Na(),WX=cd(),{mirrorX:GLi}=VX(),HIe=Cs(),kje=jF(),YLi=bre(),VLi=(e,t)=>{let n={segments:12,startAngle:0,angle:Xx,overflow:"cap"},{segments:o,startAngle:i,angle:r,overflow:s}=Object.assign({},n,e);if(o<3)throw Error("segments must be greater then 3");i=Math.abs(i)>Xx?i%Xx:i,r=Math.abs(r)>Xx?r%Xx:r;let a=i+r;if(a=Math.abs(a)>Xx?a%Xx:a,a<i){let x=i;i=a,a=x}let c=a-i;if(c<=0)c=Xx;if(Math.abs(c)<Xx){let x=Xx/o;if(o=Math.floor(Math.abs(c)/x),Math.abs(c)>o*x)o++}let l=HIe.toSides(t);if(l.length===0)throw Error("the given geometry cannot be empty");let d=l.filter((x)=>x[0][0]<0),u=l.filter((x)=>x[0][0]>=0);if(d.length>0&&u.length>0&&s==="cap"){if(d.length>u.length)l=l.map((x)=>{let C=x[0],I=x[1];return C=[Math.min(C[0],0),C[1]],I=[Math.min(I[0],0),I[1]],[C,I]}),t=HIe.create(l),t=GLi(t);else if(u.length>=d.length)l=l.map((x)=>{let C=x[0],I=x[1];return C=[Math.max(C[0],0),C[1]],I=[Math.max(I[0],0),I[1]],[C,I]}),t=HIe.create(l)}let A=c/o,m=Math.abs(c)<Xx,p=kje.fromSides(HIe.toSides(t));kje.reverse(p,p);let g=WX.create(),_=WX.fromXRotation(WX.create(),Xx/4),f=WX.create(),y=(x,C,I)=>{let b=A*C+i;if(c===Xx&&C===o)b=i;return WX.fromZRotation(f,b),WX.multiply(g,f,_),kje.transform(g,I)};return e={numberOfSlices:o+1,capStart:m,capEnd:m,close:!m,callback:y},YLi(e,p)};g5n.exports=VLi});var XX=ct(function(nfs,I5n){var ULi=Zr(),f5n=cd(),y5n=Cs(),x5n=ps(),C5n=Wl(),OIe=(e,...t)=>{if(!Array.isArray(e))throw Error("angles must be an array");if(t=ULi(t),t.length===0)throw Error("wrong number of arguments");e=e.slice();while(e.length<3)e.push(0);let n=e[2],o=e[1],i=e[0],r=f5n.fromTaitBryanRotation(f5n.create(),n,o,i),s=t.map((a)=>{if(C5n.isA(a))return C5n.transform(r,a);if(y5n.isA(a))return y5n.transform(r,a);if(x5n.isA(a))return x5n.transform(r,a);return a});return s.length===1?s[0]:s},WLi=(e,...t)=>OIe([e,0,0],t),XLi=(e,...t)=>OIe([0,e,0],t),KLi=(e,...t)=>OIe([0,0,e],t);I5n.exports={rotate:OIe,rotateX:WLi,rotateY:XLi,rotateZ:KLi}});var BD=ct(function(ofs,E5n){var jLi=Zr(),b5n=cd(),S5n=Cs(),P5n=ps(),v5n=Wl(),zIe=(e,...t)=>{if(!Array.isArray(e))throw Error("offset must be an array");if(t=jLi(t),t.length===0)throw Error("wrong number of arguments");e=e.slice();while(e.length<3)e.push(0);let n=b5n.fromTranslation(b5n.create(),e),o=t.map((i)=>{if(v5n.isA(i))return v5n.transform(n,i);if(S5n.isA(i))return S5n.transform(n,i);if(P5n.isA(i))return P5n.transform(n,i);return i});return o.length===1?o[0]:o},qLi=(e,...t)=>zIe([e,0,0],t),JLi=(e,...t)=>zIe([0,e,0],t),$Li=(e,...t)=>zIe([0,0,e],t);E5n.exports={translate:zIe,translateX:qLi,translateY:JLi,translateZ:$Li}});var B5n=ct(function(ifs,M5n){var{TAU:ZLi}=Na(),eFi=Lje(),{rotate:tFi}=XX(),{translate:nFi}=BD(),oFi=yje(),{isGT:Fje,isGTE:Hje}=ep(),iFi=(e)=>{let t={innerRadius:1,innerSegments:32,outerRadius:4,outerSegments:32,innerRotation:0,startAngle:0,outerRotation:ZLi},{innerRadius:n,innerSegments:o,outerRadius:i,outerSegments:r,innerRotation:s,startAngle:a,outerRotation:c}=Object.assign({},t,e);if(!Fje(n,0))throw Error("innerRadius must be greater than zero");if(!Hje(o,3))throw Error("innerSegments must be three or more");if(!Fje(i,0))throw Error("outerRadius must be greater than zero");if(!Hje(r,3))throw Error("outerSegments must be three or more");if(!Hje(a,0))throw Error("startAngle must be positive");if(!Fje(c,0))throw Error("outerRotation must be greater than zero");if(n>=i)throw Error("inner circle is too large to rotate about the outer circle");let l=oFi({radius:n,segments:o});if(s!==0)l=tFi([0,0,s],l);return l=nFi([i,0],l),eFi({startAngle:a,angle:c,segments:r},l)};M5n.exports=iFi});var T5n=ct(function(rfs,w5n){var{NEPS:KX}=Na(),Sre=Gs(),rFi=Cs(),{isNumberArray:sFi}=ep(),Oje=(e,t,n)=>Math.acos((e*e+t*t-n*n)/(2*e*t)),aFi=(e,t,n)=>{if(t>KX)return Math.sqrt(e*e+n*n-2*e*n*Math.cos(t));return Math.sqrt((e-n)*(e-n)+e*n*t*t*(1-t*t/12))},cFi=(e)=>{if(Math.abs(e[0]+e[1]+e[2]-Math.PI)>KX)throw Error("AAA triangles require angles that sum to PI");let n=e[0],o=e[1],i=Math.PI-n-o,r=1,s=r/Math.sin(i)*Math.sin(n),a=r/Math.sin(i)*Math.sin(o);return jX(n,o,i,s,a,r)},lFi=(e)=>{let t=e[0],n=e[1],o=Math.PI+KX-t-n;if(o<KX)throw Error("AAS triangles require angles that sum to PI");let i=e[2],r=i/Math.sin(t)*Math.sin(n),s=i/Math.sin(t)*Math.sin(o);return jX(t,n,o,i,r,s)},dFi=(e)=>{let t=e[0],n=e[2],o=Math.PI+KX-t-n;if(o<KX)throw Error("ASA triangles require angles that sum to PI");let i=e[1],r=i/Math.sin(o)*Math.sin(t),s=i/Math.sin(o)*Math.sin(n);return jX(t,n,o,r,s,i)},uFi=(e)=>{let t=e[0],n=e[1],o=e[2],i=aFi(t,n,o),r=Oje(i,t,o),s=Math.PI-r-n;return jX(r,n,s,o,i,t)},hFi=(e)=>{let t=e[0],n=e[1],o=e[2],i=Math.asin(n*Math.sin(o)/t),r=Math.PI-i-o,s=t/Math.sin(o)*Math.sin(r);return jX(i,r,o,n,s,t)},mFi=(e)=>{let t=e[1],n=e[2],o=e[0];if(t+n<=o||n+o<=t||o+t<=n)throw Error("SSS triangle is incorrect, as the longest side is longer than the sum of the other sides");let i=Oje(n,o,t),r=Oje(o,t,n),s=Math.PI-i-r;return jX(i,r,s,t,n,o)},jX=(e,t,n,o,i,r)=>{let s=Sre.fromValues(0,0),a=Sre.fromValues(r,0),c=Sre.fromValues(o,0);return Sre.add(c,Sre.rotate(c,c,[0,0],Math.PI-t),a),rFi.fromPoints([s,a,c])},pFi=(e)=>{let t={type:"SSS",values:[1,1,1]},{type:n,values:o}=Object.assign({},t,e);if(typeof n!=="string")throw Error("triangle type must be a string");if(n=n.toUpperCase(),!((n[0]==="A"||n[0]==="S")&&(n[1]==="A"||n[1]==="S")&&(n[2]==="A"||n[2]==="S")))throw Error("triangle type must contain three letters; A or S");if(!sFi(o,3))throw Error("triangle values must contain three values");if(!o.every((i)=>i>0))throw Error("triangle values must be greater than zero");switch(n){case"AAA":return cFi(o);case"AAS":return lFi(o);case"ASA":return dFi(o);case"SAS":return uFi(o);case"SSA":return hFi(o);case"SSS":return mFi(o);default:throw Error("invalid triangle type, try again")}};w5n.exports=pFi});var N5n=ct(function(sfs,D5n){D5n.exports={arc:JCn(),circle:yje(),cube:aIn(),cuboid:IIe(),cylinder:bje(),cylinderElliptic:Ije(),ellipse:fje(),ellipsoid:Sje(),geodesicSphere:PIn(),line:EIn(),polygon:BIn(),polyhedron:Pje(),rectangle:SIe(),roundedCuboid:OIn(),roundedCylinder:WIn(),roundedRectangle:$In(),sphere:Eje(),square:tbn(),star:rbn(),torus:B5n(),triangle:T5n()}});var Q5n=ct(function(afs,R5n){R5n.exports={height:14,32:[16],33:[10,5,21,5,7,void 0,5,2,4,1,5,0,6,1,5,2],34:[16,4,21,4,14,void 0,12,21,12,14],35:[21,11,25,4,-7,void 0,17,25,10,-7,void 0,4,12,18,12,void 0,3,6,17,6],36:[20,8,25,8,-4,void 0,12,25,12,-4,void 0,17,18,15,20,12,21,8,21,5,20,3,18,3,16,4,14,5,13,7,12,13,10,15,9,16,8,17,6,17,3,15,1,12,0,8,0,5,1,3,3],37:[24,21,21,3,0,void 0,8,21,10,19,10,17,9,15,7,14,5,14,3,16,3,18,4,20,6,21,8,21,10,20,13,19,16,19,19,20,21,21,void 0,17,7,15,6,14,4,14,2,16,0,18,0,20,1,21,3,21,5,19,7,17,7],38:[26,23,12,23,13,22,14,21,14,20,13,19,11,17,6,15,3,13,1,11,0,7,0,5,1,4,2,3,4,3,6,4,8,5,9,12,13,13,14,14,16,14,18,13,20,11,21,9,20,8,18,8,16,9,13,11,10,16,3,18,1,20,0,22,0,23,1,23,2],39:[10,5,19,4,20,5,21,6,20,6,18,5,16,4,15],40:[14,11,25,9,23,7,20,5,16,4,11,4,7,5,2,7,-2,9,-5,11,-7],41:[14,3,25,5,23,7,20,9,16,10,11,10,7,9,2,7,-2,5,-5,3,-7],42:[16,8,21,8,9,void 0,3,18,13,12,void 0,13,18,3,12],43:[26,13,18,13,0,void 0,4,9,22,9],44:[10,6,1,5,0,4,1,5,2,6,1,6,-1,5,-3,4,-4],45:[26,4,9,22,9],46:[10,5,2,4,1,5,0,6,1,5,2],47:[22,20,25,2,-7],48:[20,9,21,6,20,4,17,3,12,3,9,4,4,6,1,9,0,11,0,14,1,16,4,17,9,17,12,16,17,14,20,11,21,9,21],49:[20,6,17,8,18,11,21,11,0],50:[20,4,16,4,17,5,19,6,20,8,21,12,21,14,20,15,19,16,17,16,15,15,13,13,10,3,0,17,0],51:[20,5,21,16,21,10,13,13,13,15,12,16,11,17,8,17,6,16,3,14,1,11,0,8,0,5,1,4,2,3,4],52:[20,13,21,3,7,18,7,void 0,13,21,13,0],53:[20,15,21,5,21,4,12,5,13,8,14,11,14,14,13,16,11,17,8,17,6,16,3,14,1,11,0,8,0,5,1,4,2,3,4],54:[20,16,18,15,20,12,21,10,21,7,20,5,17,4,12,4,7,5,3,7,1,10,0,11,0,14,1,16,3,17,6,17,7,16,10,14,12,11,13,10,13,7,12,5,10,4,7],55:[20,17,21,7,0,void 0,3,21,17,21],56:[20,8,21,5,20,4,18,4,16,5,14,7,13,11,12,14,11,16,9,17,7,17,4,16,2,15,1,12,0,8,0,5,1,4,2,3,4,3,7,4,9,6,11,9,12,13,13,15,14,16,16,16,18,15,20,12,21,8,21],57:[20,16,14,15,11,13,9,10,8,9,8,6,9,4,11,3,14,3,15,4,18,6,20,9,21,10,21,13,20,15,18,16,14,16,9,15,4,13,1,10,0,8,0,5,1,4,3],58:[10,5,14,4,13,5,12,6,13,5,14,void 0,5,2,4,1,5,0,6,1,5,2],59:[10,5,14,4,13,5,12,6,13,5,14,void 0,6,1,5,0,4,1,5,2,6,1,6,-1,5,-3,4,-4],60:[24,20,18,4,9,20,0],61:[26,4,12,22,12,void 0,4,6,22,6],62:[24,4,18,20,9,4,0],63:[18,3,16,3,17,4,19,5,20,7,21,11,21,13,20,14,19,15,17,15,15,14,13,13,12,9,10,9,7,void 0,9,2,8,1,9,0,10,1,9,2],64:[27,18,13,17,15,15,16,12,16,10,15,9,14,8,11,8,8,9,6,11,5,14,5,16,6,17,8,void 0,12,16,10,14,9,11,9,8,10,6,11,5,void 0,18,16,17,8,17,6,19,5,21,5,23,7,24,10,24,12,23,15,22,17,20,19,18,20,15,21,12,21,9,20,7,19,5,17,4,15,3,12,3,9,4,6,5,4,7,2,9,1,12,0,15,0,18,1,20,2,21,3,void 0,19,16,18,8,18,6,19,5],65:[18,9,21,1,0,void 0,9,21,17,0,void 0,4,7,14,7],66:[21,4,21,4,0,void 0,4,21,13,21,16,20,17,19,18,17,18,15,17,13,16,12,13,11,void 0,4,11,13,11,16,10,17,9,18,7,18,4,17,2,16,1,13,0,4,0],67:[21,18,16,17,18,15,20,13,21,9,21,7,20,5,18,4,16,3,13,3,8,4,5,5,3,7,1,9,0,13,0,15,1,17,3,18,5],68:[21,4,21,4,0,void 0,4,21,11,21,14,20,16,18,17,16,18,13,18,8,17,5,16,3,14,1,11,0,4,0],69:[19,4,21,4,0,void 0,4,21,17,21,void 0,4,11,12,11,void 0,4,0,17,0],70:[18,4,21,4,0,void 0,4,21,17,21,void 0,4,11,12,11],71:[21,18,16,17,18,15,20,13,21,9,21,7,20,5,18,4,16,3,13,3,8,4,5,5,3,7,1,9,0,13,0,15,1,17,3,18,5,18,8,void 0,13,8,18,8],72:[22,4,21,4,0,void 0,18,21,18,0,void 0,4,11,18,11],73:[8,4,21,4,0],74:[16,12,21,12,5,11,2,10,1,8,0,6,0,4,1,3,2,2,5,2,7],75:[21,4,21,4,0,void 0,18,21,4,7,void 0,9,12,18,0],76:[17,4,21,4,0,void 0,4,0,16,0],77:[24,4,21,4,0,void 0,4,21,12,0,void 0,20,21,12,0,void 0,20,21,20,0],78:[22,4,21,4,0,void 0,4,21,18,0,void 0,18,21,18,0],79:[22,9,21,7,20,5,18,4,16,3,13,3,8,4,5,5,3,7,1,9,0,13,0,15,1,17,3,18,5,19,8,19,13,18,16,17,18,15,20,13,21,9,21],80:[21,4,21,4,0,void 0,4,21,13,21,16,20,17,19,18,17,18,14,17,12,16,11,13,10,4,10],81:[22,9,21,7,20,5,18,4,16,3,13,3,8,4,5,5,3,7,1,9,0,13,0,15,1,17,3,18,5,19,8,19,13,18,16,17,18,15,20,13,21,9,21,void 0,12,4,18,-2],82:[21,4,21,4,0,void 0,4,21,13,21,16,20,17,19,18,17,18,15,17,13,16,12,13,11,4,11,void 0,11,11,18,0],83:[20,17,18,15,20,12,21,8,21,5,20,3,18,3,16,4,14,5,13,7,12,13,10,15,9,16,8,17,6,17,3,15,1,12,0,8,0,5,1,3,3],84:[16,8,21,8,0,void 0,1,21,15,21],85:[22,4,21,4,6,5,3,7,1,10,0,12,0,15,1,17,3,18,6,18,21],86:[18,1,21,9,0,void 0,17,21,9,0],87:[24,2,21,7,0,void 0,12,21,7,0,void 0,12,21,17,0,void 0,22,21,17,0],88:[20,3,21,17,0,void 0,17,21,3,0],89:[18,1,21,9,11,9,0,void 0,17,21,9,11],90:[20,17,21,3,0,void 0,3,21,17,21,void 0,3,0,17,0],91:[14,4,25,4,-7,void 0,5,25,5,-7,void 0,4,25,11,25,void 0,4,-7,11,-7],92:[14,0,21,14,-3],93:[14,9,25,9,-7,void 0,10,25,10,-7,void 0,3,25,10,25,void 0,3,-7,10,-7],94:[16,6,15,8,18,10,15,void 0,3,12,8,17,13,12,void 0,8,17,8,0],95:[16,0,-2,16,-2],96:[10,6,21,5,20,4,18,4,16,5,15,6,16,5,17],97:[19,15,14,15,0,void 0,15,11,13,13,11,14,8,14,6,13,4,11,3,8,3,6,4,3,6,1,8,0,11,0,13,1,15,3],98:[19,4,21,4,0,void 0,4,11,6,13,8,14,11,14,13,13,15,11,16,8,16,6,15,3,13,1,11,0,8,0,6,1,4,3],99:[18,15,11,13,13,11,14,8,14,6,13,4,11,3,8,3,6,4,3,6,1,8,0,11,0,13,1,15,3],100:[19,15,21,15,0,void 0,15,11,13,13,11,14,8,14,6,13,4,11,3,8,3,6,4,3,6,1,8,0,11,0,13,1,15,3],101:[18,3,8,15,8,15,10,14,12,13,13,11,14,8,14,6,13,4,11,3,8,3,6,4,3,6,1,8,0,11,0,13,1,15,3],102:[12,10,21,8,21,6,20,5,17,5,0,void 0,2,14,9,14],103:[19,15,14,15,-2,14,-5,13,-6,11,-7,8,-7,6,-6,void 0,15,11,13,13,11,14,8,14,6,13,4,11,3,8,3,6,4,3,6,1,8,0,11,0,13,1,15,3],104:[19,4,21,4,0,void 0,4,10,7,13,9,14,12,14,14,13,15,10,15,0],105:[8,3,21,4,20,5,21,4,22,3,21,void 0,4,14,4,0],106:[10,5,21,6,20,7,21,6,22,5,21,void 0,6,14,6,-3,5,-6,3,-7,1,-7],107:[17,4,21,4,0,void 0,14,14,4,4,void 0,8,8,15,0],108:[8,4,21,4,0],109:[30,4,14,4,0,void 0,4,10,7,13,9,14,12,14,14,13,15,10,15,0,void 0,15,10,18,13,20,14,23,14,25,13,26,10,26,0],110:[19,4,14,4,0,void 0,4,10,7,13,9,14,12,14,14,13,15,10,15,0],111:[19,8,14,6,13,4,11,3,8,3,6,4,3,6,1,8,0,11,0,13,1,15,3,16,6,16,8,15,11,13,13,11,14,8,14],112:[19,4,14,4,-7,void 0,4,11,6,13,8,14,11,14,13,13,15,11,16,8,16,6,15,3,13,1,11,0,8,0,6,1,4,3],113:[19,15,14,15,-7,void 0,15,11,13,13,11,14,8,14,6,13,4,11,3,8,3,6,4,3,6,1,8,0,11,0,13,1,15,3],114:[13,4,14,4,0,void 0,4,8,5,11,7,13,9,14,12,14],115:[17,14,11,13,13,10,14,7,14,4,13,3,11,4,9,6,8,11,7,13,6,14,4,14,3,13,1,10,0,7,0,4,1,3,3],116:[12,5,21,5,4,6,1,8,0,10,0,void 0,2,14,9,14],117:[19,4,14,4,4,5,1,7,0,10,0,12,1,15,4,void 0,15,14,15,0],118:[16,2,14,8,0,void 0,14,14,8,0],119:[22,3,14,7,0,void 0,11,14,7,0,void 0,11,14,15,0,void 0,19,14,15,0],120:[17,3,14,14,0,void 0,14,14,3,0],121:[16,2,14,8,0,void 0,14,14,8,0,6,-4,4,-6,2,-7,1,-7],122:[17,14,14,3,0,void 0,3,14,14,14,void 0,3,0,14,0],123:[14,9,25,7,24,6,23,5,21,5,19,6,17,7,16,8,14,8,12,6,10,void 0,7,24,6,22,6,20,7,18,8,17,9,15,9,13,8,11,4,9,8,7,9,5,9,3,8,1,7,0,6,-2,6,-4,7,-6,void 0,6,8,8,6,8,4,7,2,6,1,5,-1,5,-3,6,-5,7,-6,9,-7],124:[8,4,25,4,-7],125:[14,5,25,7,24,8,23,9,21,9,19,8,17,7,16,6,14,6,12,8,10,void 0,7,24,8,22,8,20,7,18,6,17,5,15,5,13,6,11,10,9,6,7,5,5,5,3,6,1,7,0,8,-2,8,-4,7,-6,void 0,8,8,6,6,6,4,7,2,8,1,9,-1,9,-3,8,-5,7,-6,5,-7],126:[24,3,6,3,8,4,11,6,12,8,12,10,11,14,8,16,7,18,7,20,8,21,10,void 0,3,8,4,10,6,11,8,11,10,10,14,7,16,6,18,6,20,7,21,10,21,12]}});var zje=ct(function(cfs,k5n){var AFi=Q5n(),_Fi={xOffset:0,yOffset:0,input:"?",align:"left",font:AFi,height:14,lineSpacing:2.142857142857143,letterSpacing:1,extrudeOffset:0},gFi=(e,t)=>{if(!t&&typeof e==="string")e={input:e};e=e||{};let n=Object.assign({},_Fi,e);return n.input=t||n.input,n};k5n.exports=gFi});var Gje=ct(function(lfs,L5n){var fFi=zje(),yFi=(e,t)=>{let{xOffset:n,yOffset:o,input:i,font:r,height:s,extrudeOffset:a}=fFi(e,t),c=i.charCodeAt(0);if(!c||!r[c])c=63;let l=[].concat(r[c]),d=(s-a)/r.height,u=a/2,h=l.shift()*d,A=[],m=[];for(let p=0,g=l.length;p<g;p+=2){let _=d*l[p]+n,f=d*l[p+1]+o+u;if(l[p]!==void 0){m.push([_,f]);continue}A.push(m),m=[],p--}if(m.length)A.push(m);return{width:h,height:s,segments:A}};L5n.exports=yFi});var O5n=ct(function(dfs,H5n){var xFi=Gje(),CFi=zje(),F5n=(e,t)=>{let{x:n,y:o}=Object.assign({x:0,y:0},e||{}),i=t.segments,r=null,s=null;for(let a=0,c=i.length;a<c;a++){r=i[a];for(let l=0,d=r.length;l<d;l++)s=r[l],r[l]=[s[0]+n,s[1]+o]}return t},IFi=(e,t)=>{let{xOffset:n,yOffset:o,input:i,font:r,height:s,align:a,extrudeOffset:c,lineSpacing:l,letterSpacing:d}=CFi(e,t),[u,h]=[n,o],A,m,p,g,_,f,y={width:0,segments:[]},x=[],C=[],I=0,b=u,P=()=>{x.push(y),I=Math.max(I,y.width),y={width:0,segments:[]}};for(A=0,m=i.length;A<m;A++){if(p=i[A],g=xFi({xOffset:u,yOffset:h,font:r,height:s,extrudeOffset:c},p),p===`
`){u=b,h-=g.height*l,P();continue}if(_=g.width*d,y.width+=_,u+=_,p!==" ")y.segments=y.segments.concat(g.segments)}if(y.segments.length)P();for(A=0,m=x.length;A<m;A++){if(y=x[A],I>y.width){if(f=I-y.width,a==="right")y=F5n({x:f},y);else if(a==="center")y=F5n({x:f/2},y)}C=C.concat(y.segments)}return C};H5n.exports=IFi});var G5n=ct(function(ufs,z5n){z5n.exports={vectorChar:Gje(),vectorText:O5n()}});var qX=ct(function(hfs,Y5n){var bFi=Cs(),SFi=ps(),PFi=Wl(),vFi=(e)=>{let t;for(let n of e){let o=0;if(bFi.isA(n))o=1;if(SFi.isA(n))o=2;if(PFi.isA(n))o=3;if(t&&o!==t)return!1;t=o}return!0};Y5n.exports=vFi});var U5n=ct(function(mfs,V5n){var EFi=(e)=>e*0.017453292519943295;V5n.exports=EFi});var Yje=ct(function(pfs,W5n){var MFi=(e,t)=>e-t;W5n.exports=MFi});var K5n=ct(function(Afs,X5n){var BFi=(e,t,n)=>{let o=0,i=e.length;while(i>o){let r=Math.floor((o+i)/2),s=e[r];if(n(t,s)>0)o=r+1;else i=r}e.splice(o,0,t)};X5n.exports=BFi});var J5n=ct(function(_fs,q5n){var{TAU:j5n}=Na(),wFi=(e,t,n)=>{let o=t>0?e*j5n/t:0,i=n>0?j5n/n:0;return Math.ceil(Math.max(o,i,4))};q5n.exports=wFi});var Z5n=ct(function(gfs,$5n){var TFi=(e)=>e*57.29577951308232;$5n.exports=TFi});var Vje=ct(function(ffs,eSn){eSn.exports={areAllShapesTheSameType:qX(),degToRad:U5n(),flatten:Zr(),fnNumberSort:Yje(),insertSorted:K5n(),radiusToSegments:J5n(),radToDeg:Z5n()}});var GIe=ct(function(yfs,nSn){var tSn=Gs(),DFi=Cs(),NFi=(e,t)=>{if(t.vertices.length<4)return null;let n=[],o=t.vertices.filter((s,a)=>{if(s[2]>0)return n.push(a),!0;return!1});if(o.length!==2)throw Error("Assertion failed: fromFakePolygon: not enough points found");let i=o.map((s)=>{let a=Math.round(s[0]/e)*e+0,c=Math.round(s[1]/e)*e+0;return tSn.fromValues(a,c)});if(tSn.equals(i[0],i[1]))return null;let r=n[1]-n[0];if(r===1||r===3){if(r===1)i.reverse()}else throw Error("Assertion failed: fromFakePolygon: unknown index ordering");return i},RFi=(e,t)=>{let n=t.map((o)=>NFi(e,o)).filter((o)=>o!==null);return DFi.create(n)};nSn.exports=RFi});var YIe=ct(function(xfs,oSn){var wD=Ji(),QFi=Cs(),kFi=ps(),LFi=ga(),FFi=(e,t,n)=>{let o=[wD.fromVec2(wD.create(),n[0],e),wD.fromVec2(wD.create(),n[1],e),wD.fromVec2(wD.create(),n[1],t),wD.fromVec2(wD.create(),n[0],t)];return LFi.create(o)},HFi=(e,t)=>{let o=QFi.toSides(t).map((r)=>FFi(e.z0,e.z1,r));return kFi.create(o)};oSn.exports=HFi});var aSn=ct(function(Cfs,sSn){var iSn=cd(),OFi=Gs(),tp=Ji(),rSn=function(e,t){if(arguments.length<2)t=tp.orthogonal(tp.create(),e);this.v=tp.normalize(tp.create(),tp.cross(tp.create(),e,t)),this.u=tp.cross(tp.create(),this.v,e),this.plane=e,this.planeorigin=tp.scale(tp.create(),e,e[3])};rSn.prototype={getProjectionMatrix:function(){return iSn.fromValues(this.u[0],this.v[0],this.plane[0],0,this.u[1],this.v[1],this.plane[1],0,this.u[2],this.v[2],this.plane[2],0,0,0,-this.plane[3],1)},getInverseProjectionMatrix:function(){let e=tp.scale(tp.create(),this.plane,this.plane[3]);return iSn.fromValues(this.u[0],this.u[1],this.u[2],0,this.v[0],this.v[1],this.v[2],0,this.plane[0],this.plane[1],this.plane[2],0,e[0],e[1],e[2],1)},to2D:function(e){return OFi.fromValues(tp.dot(e,this.u),tp.dot(e,this.v))},to3D:function(e){let t=tp.scale(tp.create(),this.u,e[0]),n=tp.scale(tp.create(),this.v,e[1]),o=tp.add(t,t,this.planeorigin);return tp.add(n,n,o)}};sSn.exports=rSn});var dSn=ct(function(Ifs,lSn){var{EPS:RB}=Na(),TD=gIe(),US=Gs(),zFi=aSn(),JX=oje(),{insertSorted:GFi,fnNumberSort:YFi}=Vje(),cSn=ga(),VFi=(e)=>{if(e.length<2)return e;let t=[],n=e.length,o=cSn.plane(e[0]),i=new zFi(o),r=[],s=[],a=new Map,c=new Map,l=new Map,d=10/RB;for(let m=0;m<n;m++){let p=e[m],g=[],_=p.vertices.length,f=-1;if(_>0){let y,x;for(let C=0;C<_;C++){let I=i.to2D(p.vertices[C]),b=Math.floor(I[1]*d),P;if(l.has(b))P=l.get(b);else if(l.has(b+1))P=l.get(b+1);else if(l.has(b-1))P=l.get(b-1);else P=I[1],l.set(b,I[1]);I=US.fromValues(I[0],P),g.push(I);let E=I[1];if(C===0||E<y)y=E,f=C;if(C===0||E>x)x=E;let B=c.get(E);if(!B)B={},c.set(E,B);B[m]=!0}if(y>=x)g=[],_=0,f=-1;else{let C=a.get(y);if(!C)C=[],a.set(y,C);C.push(m)}}g.reverse(),f=_-f-1,r.push(g),s.push(f)}let u=[];c.forEach((m,p)=>u.push(p)),u.sort(YFi);let h=[],A=[];for(let m=0;m<u.length;m++){let p=[],g=u[m],_=c.get(g),f=0;for(let x=0;x<h.length;++x){let C=h[x],I=C.polygonindex;if(_[I]){let b=r[I],P=b.length,{leftvertexindex:E,rightvertexindex:B}=C;while(!0){let T=E+1;if(T>=P)T=0;if(b[T][1]!==g)break;E=T}let w=B-1;if(w<0)w=P-1;if(b[w][1]===g)B=w;if(E!==C.leftvertexindex&&E===B)C._remove=!0,f++;else{C.leftvertexindex=E,C.rightvertexindex=B,C.topleft=b[E],C.topright=b[B];let T=E+1;if(T>=P)T=0;C.bottomleft=b[T];let Q=B-1;if(Q<0)Q=P-1;C.bottomright=b[Q]}}}if(f>0)h=h.filter((x)=>!x._remove);let y;if(m>=u.length-1)h=[],y=null;else{y=Number(u[m+1]);let x=0.5*(g+y),C=a.get(g);for(let I in C){let b=C[I],P=r[b],E=P.length,B=s[b],w=B;while(!0){let H=w+1;if(H>=E)H=0;if(P[H][1]!==g)break;if(H===B)break;w=H}let T=B;while(!0){let H=T-1;if(H<0)H=E-1;if(P[H][1]!==g)break;if(H===w)break;T=H}let Q=w+1;if(Q>=E)Q=0;let N=T-1;if(N<0)N=E-1;let F={polygonindex:b,leftvertexindex:w,rightvertexindex:T,topleft:P[w],topright:P[T],bottomleft:P[Q],bottomright:P[N]};GFi(h,F,(H,z)=>{let Y=JX(H.topleft,H.bottomleft,x),U=JX(z.topleft,z.bottomleft,x);if(Y>U)return 1;if(Y<U)return-1;return 0})}}for(let x in h){let C=h[x],I=JX(C.topleft,C.bottomleft,g),b=US.fromValues(I,g);I=JX(C.topright,C.bottomright,g);let P=US.fromValues(I,g);I=JX(C.topleft,C.bottomleft,y);let E=US.fromValues(I,y);I=JX(C.topright,C.bottomright,y);let B=US.fromValues(I,y),w={topleft:b,topright:P,bottomleft:E,bottomright:B,leftline:TD.fromPoints(TD.create(),b,E),rightline:TD.fromPoints(TD.create(),B,P)};if(p.length>0){let T=p[p.length-1],Q=US.distance(w.topleft,T.topright),N=US.distance(w.bottomleft,T.bottomright);if(Q<RB&&N<RB)w.topleft=T.topleft,w.leftline=T.leftline,w.bottomleft=T.bottomleft,p.splice(p.length-1,1)}p.push(w)}if(m>0){let x=new Set,C=new Set;for(let I=0;I<p.length;I++){let b=p[I];for(let P=0;P<A.length;P++)if(!C.has(P)){let E=A[P];if(US.distance(E.bottomleft,b.topleft)<RB){if(US.distance(E.bottomright,b.topright)<RB){C.add(P);let B=TD.direction(b.leftline),w=TD.direction(E.leftline),T=B[0]-w[0],Q=TD.direction(b.rightline),N=TD.direction(E.rightline),F=Q[0]-N[0],H=Math.abs(T)<RB,z=Math.abs(F)<RB,Y=H||T>=0,U=z||F>=0;if(Y&&U)b.outpolygon=E.outpolygon,b.leftlinecontinues=H,b.rightlinecontinues=z,x.add(P);break}}}}for(let I=0;I<A.length;I++)if(!x.has(I)){let b=A[I];if(b.outpolygon.rightpoints.push(b.bottomright),US.distance(b.bottomright,b.bottomleft)>RB)b.outpolygon.leftpoints.push(b.bottomleft);b.outpolygon.leftpoints.reverse();let E=b.outpolygon.rightpoints.concat(b.outpolygon.leftpoints).map((w)=>i.to3D(w)),B=cSn.fromPointsAndPlane(E,o);if(B.vertices.length)t.push(B)}}for(let x=0;x<p.length;x++){let C=p[x];if(!C.outpolygon){if(C.outpolygon={leftpoints:[],rightpoints:[]},C.outpolygon.leftpoints.push(C.topleft),US.distance(C.topleft,C.topright)>RB)C.outpolygon.rightpoints.push(C.topright)}else{if(!C.leftlinecontinues)C.outpolygon.leftpoints.push(C.topleft);if(!C.rightlinecontinues)C.outpolygon.rightpoints.push(C.topright)}}A=p}return t};lSn.exports=VFi});var $X=ct(function(bfs,hSn){var uSn=ps(),UFi=ga(),{NEPS:WFi}=Na(),XFi=dSn(),KFi=(e)=>{if(e.isRetesselated)return e;let t=uSn.toPolygons(e).map((r,s)=>({vertices:r.vertices,plane:UFi.plane(r),index:s})),n=jFi(t),o=[];n.forEach((r)=>{if(Array.isArray(r)){let s=XFi(r);for(let a=0;a<s.length;a++)o.push(s[a])}else o.push(r)});let i=uSn.create(o);return i.isRetesselated=!0,i},jFi=(e)=>{let t=[e],n=[];for(let i=3;i>=0;i--){let r=[],s=i===3?0.000000015:WFi;t.forEach((a)=>{a.sort(qFi(i,s));let c=0;for(let l=1;l<a.length;l++)if(a[l].plane[i]-a[c].plane[i]>s){if(l-c===1)n.push(a[c]);else r.push(a.slice(c,l));c=l}if(a.length-c===1)n.push(a[c]);else r.push(a.slice(c))}),t=r}let o=[];return t.forEach((i)=>{if(i[0])o[i[0].index]=i}),n.forEach((i)=>{o[i.index]=i}),o},qFi=(e,t)=>(n,o)=>{if(n.plane[e]-o.plane[e]>t)return 1;else if(o.plane[e]-n.plane[e]>t)return-1;return 0};hSn.exports=KFi});var VIe=ct(function(Sfs,pSn){var{EPS:ZX}=Na(),mSn=bD(),JFi=(e,t)=>{if(e.polygons.length===0||t.polygons.length===0)return!1;let n=mSn(e),o=n[0],i=n[1],r=mSn(t),s=r[0],a=r[1];if(s[0]-i[0]>ZX)return!1;if(o[0]-a[0]>ZX)return!1;if(s[1]-i[1]>ZX)return!1;if(o[1]-a[1]>ZX)return!1;if(s[2]-i[2]>ZX)return!1;if(o[2]-a[2]>ZX)return!1;return!0};pSn.exports=JFi});var gSn=ct(function(Pfs,_Sn){var ASn=VS(),$Fi=ga();class UIe{constructor(e){this.plane=null,this.front=null,this.back=null,this.polygontreenodes=[],this.parent=e}invert(){let e=[this],t;for(let n=0;n<e.length;n++){if(t=e[n],t.plane)t.plane=ASn.flip(ASn.create(),t.plane);if(t.front)e.push(t.front);if(t.back)e.push(t.back);let o=t.front;t.front=t.back,t.back=o}}clipPolygons(e,t){let n={node:this,polygontreenodes:e},o,i=[];do{if(o=n.node,e=n.polygontreenodes,o.plane){let r=o.plane,s=[],a=[],c=t?s:a,l=e.length;for(let u=0;u<l;u++){let h=e[u];if(!h.isRemoved())h.splitByPlane(r,c,s,a,s)}if(o.front&&a.length>0)i.push({node:o.front,polygontreenodes:a});let d=s.length;if(o.back&&d>0)i.push({node:o.back,polygontreenodes:s});else for(let u=0;u<d;u++)s[u].remove()}n=i.pop()}while(n!==void 0)}clipTo(e,t){let n=this,o=[];do{if(n.polygontreenodes.length>0)e.rootnode.clipPolygons(n.polygontreenodes,t);if(n.front)o.push(n.front);if(n.back)o.push(n.back);n=o.pop()}while(n!==void 0)}addPolygonTreeNodes(e){let t={node:this,polygontreenodes:e},n=[];do{let o=t.node,i=t.polygontreenodes;if(i.length===0){t=n.pop();continue}if(!o.plane){let c=0;c=Math.floor(i.length/2);let l=i[c].getPolygon();o.plane=$Fi.plane(l)}let r=[],s=[],a=i.length;for(let c=0;c<a;++c)i[c].splitByPlane(o.plane,o.polygontreenodes,s,r,s);if(r.length>0){if(!o.front)o.front=new UIe(o);if(a===r.length&&s.length===0)o.front.polygontreenodes=r;else n.push({node:o.front,polygontreenodes:r})}if(s.length>0){if(!o.back)o.back=new UIe(o);if(a===s.length&&r.length===0)o.back.polygontreenodes=s;else n.push({node:o.back,polygontreenodes:s})}t=n.pop()}while(t!==void 0)}}_Sn.exports=UIe});var ySn=ct(function(vfs,fSn){var eK=Ji(),ZFi=(e,t,n)=>{let o=eK.subtract(eK.create(),n,t),i=(e[3]-eK.dot(e,t))/eK.dot(e,o);if(Number.isNaN(i))i=0;if(i>1)i=1;if(i<0)i=0;return eK.scale(o,o,i),eK.add(o,t,o),o};fSn.exports=ZFi});var ISn=ct(function(Efs,CSn){var{EPS:WIe}=Na(),eHi=VS(),Uje=Ji(),Wje=ga(),tHi=ySn(),nHi=WIe*WIe,xSn=(e)=>{let t=[],n=e[e.length-1];for(let o=0;o<e.length;o++){let i=e[o];if(Uje.squaredDistance(i,n)>=nHi)t.push(i);n=i}return t},oHi=(e,t)=>{let n={type:null,front:null,back:null},o=t.vertices,i=o.length,r=Wje.plane(t);if(eHi.equals(r,e))n.type=0;else{let s=!1,a=!1,c=[],l=-WIe;for(let d=0;d<i;d++){let u=Uje.dot(e,o[d])-e[3],h=u<l;if(c.push(h),u>WIe)s=!0;if(u<l)a=!0}if(!s&&!a){let d=Uje.dot(e,r);n.type=d>=0?0:1}else if(!a)n.type=2;else if(!s)n.type=3;else{n.type=4;let d=[],u=[],h=c[0];for(let A=0;A<i;A++){let m=o[A],p=A+1;if(p>=i)p=0;let g=c[p];if(h===g)if(h)u.push(m);else d.push(m);else{let _=o[p],f=tHi(e,m,_);if(h)u.push(m),u.push(f),d.push(f);else d.push(m),d.push(f),u.push(f)}h=g}if(d.length>=3){let A=xSn(d);if(A.length>=3)n.front=Wje.fromPointsAndPlane(A,r)}if(u.length>=3){let A=xSn(u);if(A.length>=3)n.back=Wje.fromPointsAndPlane(A,r)}}}return n};CSn.exports=oHi});var PSn=ct(function(Mfs,SSn){var{EPS:iHi}=Na(),rHi=Ji(),bSn=ga(),sHi=ISn();class Xje{constructor(e,t){this.parent=e,this.children=[],this.polygon=t,this.removed=!1}addPolygons(e){if(!this.isRootNode())throw Error("Assertion failed");let t=this;e.forEach((n)=>{t.addChild(n)})}remove(){if(!this.removed)this.removed=!0,this.polygon=null,this.parent.recursivelyInvalidatePolygon()}isRemoved(){return this.removed}isRootNode(){return!this.parent}invert(){if(!this.isRootNode())throw Error("Assertion failed");this.invertSub()}getPolygon(){if(!this.polygon)throw Error("Assertion failed");return this.polygon}getPolygons(e){if(this.isRootNode()&&this.children.length>0){let a=[];for(let c=0;c<this.children.length;c++)if(!this.children[c].removed)a.push(this.children[c]);this.children=a}let t=[this],n=[t],o,i,r,s;for(o=0;o<n.length;++o){t=n[o];for(i=0,r=t.length;i<r;i++)if(s=t[i],s.polygon)e.push(s.polygon);else if(s.children.length>0)n.push(s.children)}}splitByPlane(e,t,n,o,i){if(this.children.length){let r=[this.children],s,a,c,l,d;for(s=0;s<r.length;s++){d=r[s];for(a=0,c=d.length;a<c;a++)if(l=d[a],l.children.length>0)r.push(l.children);else l._splitByPlane(e,t,n,o,i)}}else this._splitByPlane(e,t,n,o,i)}_splitByPlane(e,t,n,o,i){let r=this.polygon;if(r){let s=bSn.measureBoundingSphere(r),a=s[3]+iHi,l=rHi.dot(e,s)-e[3];if(l>a)o.push(this);else if(l<-a)i.push(this);else{let d=sHi(e,r);switch(d.type){case 0:t.push(this);break;case 1:n.push(this);break;case 2:o.push(this);break;case 3:i.push(this);break;case 4:if(d.front){let u=this.addChild(d.front);o.push(u)}if(d.back){let u=this.addChild(d.back);i.push(u)}break}}}}addChild(e){let t=new Xje(this,e);return this.children.push(t),t}invertSub(){let e=[this],t=[e],n,o,i,r;for(n=0;n<t.length;n++){e=t[n];for(o=0,i=e.length;o<i;o++){if(r=e[o],r.polygon)r.polygon=bSn.invert(r.polygon);if(r.children.length>0)t.push(r.children)}}}recursivelyInvalidatePolygon(){if(this.polygon=null,this.parent)this.parent.recursivelyInvalidatePolygon()}clear(){let e=[this],t=[e];for(let n=0;n<t.length;++n){e=t[n];let o=e.length;for(let i=0;i<o;i++){let r=e[i];if(r.polygon)r.polygon=null;if(r.parent)r.parent=null;if(r.children.length>0)t.push(r.children);r.children=[]}}}toString(){let e="",t=[this],n=[t],o,i,r,s;for(o=0;o<n.length;++o){t=n[o];let a=" ".repeat(o);for(i=0,r=t.length;i<r;i++){if(s=t[i],e+=`${a}PolygonTreeNode (${s.isRootNode()}): ${s.children.length}`,s.polygon)e+=`
${a}polygon: ${s.polygon.vertices}
`;else e+=`
`;if(s.children.length>0)n.push(s.children)}}return e}}SSn.exports=Xje});var MSn=ct(function(Bfs,ESn){var aHi=gSn(),cHi=PSn();class vSn{constructor(e){if(this.polygonTree=new cHi,this.rootnode=new aHi(null),e)this.addPolygons(e)}invert(){this.polygonTree.invert(),this.rootnode.invert()}clipTo(e,t=!1){this.rootnode.clipTo(e,t)}allPolygons(){let e=[];return this.polygonTree.getPolygons(e),e}addPolygons(e){let t=Array(e.length);for(let n=0;n<e.length;n++)t[n]=this.polygonTree.addChild(e[n]);this.rootnode.addPolygonTreeNodes(t)}clear(){this.polygonTree.clear()}toString(){return"Tree: "+this.polygonTree.toString("")}}ESn.exports=vSn});var XIe=ct(function(wfs,BSn){BSn.exports={Tree:MSn()}});var DSn=ct(function(Tfs,TSn){var KIe=ps(),lHi=VIe(),{Tree:wSn}=XIe(),dHi=(e,t)=>{if(!lHi(e,t))return KIe.create();let n=new wSn(KIe.toPolygons(e)),o=new wSn(KIe.toPolygons(t));n.invert(),o.clipTo(n),o.invert(),n.clipTo(o),o.clipTo(n),n.addPolygons(o.allPolygons()),n.invert();let i=n.allPolygons();return KIe.create(i)};TSn.exports=dHi});var Kje=ct(function(Dfs,NSn){var uHi=Zr(),hHi=$X(),mHi=DSn(),pHi=(...e)=>{e=uHi(e);let t=e.shift();return e.forEach((n)=>{t=mHi(t,n)}),t=hHi(t),t};NSn.exports=pHi});var QSn=ct(function(Nfs,RSn){var AHi=Zr(),_Hi=ps(),gHi=DB(),fHi=GIe(),yHi=YIe(),xHi=Kje(),CHi=(...e)=>{e=AHi(e);let t=e.map((i)=>yHi({z0:-1,z1:1},i)),n=xHi(t),o=gHi(n);return fHi(o,_Hi.toPolygons(n))};RSn.exports=CHi});var LSn=ct(function(Rfs,kSn){var IHi=Zr(),bHi=qX(),SHi=Cs(),PHi=ps(),vHi=QSn(),EHi=Kje(),MHi=(...e)=>{if(e=IHi(e),e.length===0)throw Error("wrong number of arguments");if(!bHi(e))throw Error("only intersect of the types are supported");let t=e[0];if(SHi.isA(t))return vHi(e);if(PHi.isA(t))return EHi(e);return t};kSn.exports=MHi});var jIe=ct(function(Qfs,FSn){var BHi=ga(),wHi=bKe(),THi=(e)=>wHi(e,{skipTriangulation:!0}).map((o)=>{let i=o.map((r)=>e[r]);return BHi.create(i)});FSn.exports=THi});var jje=ct(function(kfs,OSn){var tK=ps(),DHi=VIe(),{Tree:HSn}=XIe(),NHi=(e,t)=>{if(!DHi(e,t))return RHi(e,t);let n=new HSn(tK.toPolygons(e)),o=new HSn(tK.toPolygons(t));n.clipTo(o,!1),o.clipTo(n),o.invert(),o.clipTo(n),o.invert();let i=n.allPolygons().concat(o.allPolygons());return tK.create(i)},RHi=(e,t)=>{let n=tK.toPolygons(e);return n=n.concat(tK.toPolygons(t)),tK.create(n)};OSn.exports=NHi});var qIe=ct(function(Lfs,zSn){var QHi=Zr(),kHi=$X(),LHi=jje(),FHi=(...e)=>{e=QHi(e);let t;for(t=1;t<e.length;t+=2)e.push(LHi(e[t-1],e[t]));let n=e[t-1];return n=kHi(n),n};zSn.exports=FHi});var qje=ct(function(Ffs,USn){var HHi=Zr(),z3=ps(),Pre=ga(),OHi=jIe(),zHi=qIe(),GHi=(...e)=>{if(e=HHi(e),e.length!==2)throw Error("minkowskiSum requires exactly two geometries");let[t,n]=e;if(!z3.isA(t)||!z3.isA(n))throw Error("minkowskiSum requires geom3 geometries");let o=z3.isConvex(t),i=z3.isConvex(n);if(o&&i)return VSn(t,n);if(!o&&i)return GSn(t,n);if(o&&!i)return GSn(n,t);throw Error("minkowskiSum of two non-convex geometries is not yet supported")},GSn=(e,t)=>{let n=YHi(e);if(n.length===0)return z3.create();let o=n.map((i)=>VSn(i,t));if(o.length===1)return o[0];return zHi(o)},YHi=(e)=>{let t=z3.toPolygons(e);if(t.length===0)return[];let n=[];for(let o=0;o<t.length;o++){let i=t[o],r=i.vertices,s=0,a=0,c=0;for(let p=0;p<r.length;p++)s+=r[p][0],a+=r[p][1],c+=r[p][2];s/=r.length,a/=r.length,c/=r.length;let l=Pre.plane(i),d=l[0],u=l[1],h=l[2],A=0.1,m=[s-d*A,a-u*A,c-h*A];for(let p=1;p<r.length-1;p++){let g=r[0],_=r[p],f=r[p+1],y=VHi(m,g,_,f);n.push(z3.create(y))}}return n},VHi=(e,t,n,o)=>[Pre.create([e,n,t]),Pre.create([e,t,o]),Pre.create([t,n,o]),Pre.create([n,e,o])],VSn=(e,t)=>{let n=YSn(e),o=YSn(t);if(n.length===0||o.length===0)return z3.create();let i=[];for(let s=0;s<n.length;s++){let a=n[s];for(let c=0;c<o.length;c++){let l=o[c];i.push([a[0]+l[0],a[1]+l[1],a[2]+l[2]])}}let r=OHi(i);return z3.create(r)},YSn=(e)=>{let t=new Set,n=[],o=z3.toPolygons(e);for(let i=0;i<o.length;i++){let r=o[i].vertices;for(let s=0;s<r.length;s++){let a=r[s],c=`${a[0]},${a[1]},${a[2]}`;if(!t.has(c))t.add(c),n.push(a)}}return n};USn.exports=GHi});var KSn=ct(function(Hfs,XSn){var Jje=Ji(),UHi=DB(),WSn=ps(),WHi=(e)=>e.sort((t,n)=>t-n).filter((t,n,o)=>!n||t!==o[n-1]),XHi=(e,t,n)=>{let o=`${t}`,i=e.get(o);if(i===void 0)e.set(o,[n]);else i.push(n)},KHi=(e,t)=>{let n=`${t}`;return e.get(n)},jHi=(e)=>{let t=UHi(e),n=WSn.toPolygons(e),o=n.length,i=new Map,r=Jje.create();n.forEach((d,u)=>{d.vertices.forEach((h)=>{XHi(i,Jje.snap(r,h,t),u)})});let s=n.map((d)=>{let u=[];return d.vertices.forEach((h)=>{u=u.concat(KHi(i,Jje.snap(r,h,t)))}),{e:1,d:WHi(u)}});i.clear();let a=0,c=s.length;for(let d=0;d<c;d++){let u=s[d];if(u.e>0){let h=Array(o);h[d]=!0;do a=0,h.forEach((A,m)=>{let p=s[m];if(p.e>0){p.e=-1;for(let g=0;g<p.d.length;g++)h[p.d[g]]=!0;a++}});while(a>0);u.indexes=h}}let l=[];for(let d=0;d<c;d++)if(s[d].indexes){let u=[];s[d].indexes.forEach((h,A)=>u.push(n[A])),l.push(WSn.create(u))}return l};XSn.exports=jHi});var qSn=ct(function(Ofs,jSn){var qHi=Zr(),JHi=ps(),$Hi=KSn(),ZHi=(...e)=>{if(e=qHi(e),e.length===0)throw Error("wrong number of arguments");let t=e.map((n)=>{if(JHi.isA(n))return $Hi(n);return n});return t.length===1?t[0]:t};jSn.exports=ZHi});var ZSn=ct(function(zfs,$Sn){var JIe=ps(),eOi=VIe(),{Tree:JSn}=XIe(),tOi=(e,t)=>{if(!eOi(e,t))return JIe.clone(e);let n=new JSn(JIe.toPolygons(e)),o=new JSn(JIe.toPolygons(t));n.invert(),n.clipTo(o),o.clipTo(n,!0),n.addPolygons(o.allPolygons()),n.invert();let i=n.allPolygons();return JIe.create(i)};$Sn.exports=tOi});var $je=ct(function(Gfs,ePn){var nOi=Zr(),oOi=$X(),iOi=ZSn(),rOi=(...e)=>{e=nOi(e);let t=e.shift();return e.forEach((n)=>{t=iOi(t,n)}),t=oOi(t),t};ePn.exports=rOi});var nPn=ct(function(Yfs,tPn){var sOi=Zr(),aOi=ps(),cOi=DB(),lOi=GIe(),dOi=YIe(),uOi=$je(),hOi=(...e)=>{e=sOi(e);let t=e.map((i)=>dOi({z0:-1,z1:1},i)),n=uOi(t),o=cOi(n);return lOi(o,aOi.toPolygons(n))};tPn.exports=hOi});var iPn=ct(function(Vfs,oPn){var mOi=Zr(),pOi=qX(),AOi=Cs(),_Oi=ps(),gOi=nPn(),fOi=$je(),yOi=(...e)=>{if(e=mOi(e),e.length===0)throw Error("wrong number of arguments");if(!pOi(e))throw Error("only subtract of the types are supported");let t=e[0];if(AOi.isA(t))return gOi(e);if(_Oi.isA(t))return fOi(e);return t};oPn.exports=yOi});var Zje=ct(function(Ufs,rPn){var xOi=Zr(),COi=ps(),IOi=DB(),bOi=GIe(),SOi=YIe(),POi=qIe(),vOi=(...e)=>{e=xOi(e);let t=e.map((i)=>SOi({z0:-1,z1:1},i)),n=POi(t),o=IOi(n);return bOi(o,COi.toPolygons(n))};rPn.exports=vOi});var $Ie=ct(function(Wfs,sPn){var EOi=Zr(),MOi=qX(),BOi=Cs(),wOi=ps(),TOi=Zje(),DOi=qIe(),NOi=(...e)=>{if(e=EOi(e),e.length===0)throw Error("wrong number of arguments");if(!MOi(e))throw Error("only unions of the same type are supported");let t=e[0];if(BOi.isA(t))return TOi(e);if(wOi.isA(t))return DOi(e);return t};sPn.exports=NOi});var cPn=ct(function(Xfs,aPn){aPn.exports={intersect:LSn(),minkowski:qje(),scission:qSn(),subtract:iPn(),union:$Ie()}});var Ere=ct(function(Kfs,dPn){var{EPS:ROi,TAU:QOi}=Na(),lPn=ije(),vre=gIe(),qh=Gs(),kOi=mre(),LOi=(e,t)=>{let n={delta:1,corners:"edge",closed:!1,segments:16},{delta:o,corners:i,closed:r,segments:s}=Object.assign({},n,e);if(Math.abs(o)<ROi)return t;let a=e.closed?kOi(t):1;if(a===0)a=1;let c=a>0&&o>=0||a<0&&o<0;o=Math.abs(o);let l=null,d=[],u=[],h=qh.create(),A=t.length;for(let m=0;m<A;m++){let p=(m+1)%A,g=t[m],_=t[p];c?qh.subtract(h,g,_):qh.subtract(h,_,g),qh.normal(h,h),qh.normalize(h,h),qh.scale(h,h,o);let f=qh.add(qh.create(),g,h),y=qh.add(qh.create(),_,h),x=[f,y];if(l!=null){if(r||!r&&p!==0){let C=lPn(l[0],l[1],x[0],x[1]);if(C)d.pop(),x[0]=C;else u.push({c:g,s0:l,s1:x})}}if(l=[f,y],p===0&&!r)continue;d.push(x[0]),d.push(x[1])}if(r&&l!=null){let m=d[0],p=d[1],g=lPn(l[0],l[1],m,p);if(g)d[0]=g,d.pop();else{let _=t[0],f=[m,p];u.push({c:_,s0:l,s1:f})}}if(i==="edge"){let m=new Map;d.forEach((_,f)=>m.set(_,f));let p=vre.create(),g=vre.create();u.forEach((_)=>{vre.fromPoints(p,_.s0[0],_.s0[1]),vre.fromPoints(g,_.s1[0],_.s1[1]);let f=vre.intersectPointOfLines(p,g);if(Number.isFinite(f[0])&&Number.isFinite(f[1])){let y=_.s0[1],x=m.get(y);d[x]=f,d[(x+1)%d.length]=void 0}else{let y=_.s1[0],x=m.get(y);d[x]=void 0}}),d=d.filter((_)=>_!==void 0)}if(i==="round"){let m=Math.floor(s/4),p=qh.create();u.forEach((g)=>{let _=qh.angle(qh.subtract(p,g.s1[0],g.c));if(_-=qh.angle(qh.subtract(p,g.s0[1],g.c)),c&&_<0){if(_=_+Math.PI,_<0)_=_+Math.PI}if(!c&&_>0){if(_=_-Math.PI,_>0)_=_-Math.PI}if(_!==0){m=Math.floor(s*(Math.abs(_)/QOi));let f=_/m,y=qh.angle(qh.subtract(p,g.s0[1],g.c)),x=[];for(let C=1;C<m;C++){let I=y+f*C,b=qh.fromAngleRadians(qh.create(),I);qh.scale(b,b,o),qh.add(b,b,g.c),x.push(b)}if(x.length>0){let C=g.s0[1],I=d.findIndex((b)=>qh.equals(C,b));I=(I+1)%d.length,d.splice(I,0,...x)}}else{let f=g.s1[0],y=d.findIndex((x)=>qh.equals(f,x));d.splice(y,1)}})}return d};dPn.exports=LOi});var hPn=ct(function(jfs,uPn){var ZIe=Cs(),FOi=Ere(),HOi=(e,t)=>{let n={delta:1,corners:"edge",segments:16},{delta:o,corners:i,segments:r}=Object.assign({},n,e);if(!(i==="edge"||i==="chamfer"||i==="round"))throw Error('corners must be "edge", "chamfer", or "round"');let c=ZIe.toOutlines(t).map((l)=>(e={delta:o,corners:i,closed:!0,segments:r},FOi(e,l))).reduce((l,d)=>l.concat(ZIe.toSides(ZIe.fromPoints(d))),[]);return ZIe.create(c)};uPn.exports=HOi});var APn=ct(function(qfs,pPn){var mPn=cd(),OOi=Ji(),zOi=ps(),Mre=ga(),GOi=(e,t)=>{if(OOi.dot(Mre.plane(t),e)>0)t=Mre.invert(t);let o=[t],i=Mre.transform(mPn.fromTranslation(mPn.create(),e),t),r=t.vertices.length;for(let s=0;s<r;s++){let a=s<r-1?s+1:0,c=Mre.create([t.vertices[s],i.vertices[s],i.vertices[a],t.vertices[a]]);o.push(c)}return o.push(Mre.invert(i)),zOi.create(o)};pPn.exports=GOi});var fPn=ct(function(Jfs,gPn){var{EPS:YOi,TAU:eqe}=Na(),_Pn=cd(),Jd=Ji(),VOi=Yje(),oqe=ps(),qF=ga(),UOi=Eje(),WOi=$X(),tqe=jje(),XOi=APn(),KOi=(e,t,n)=>{let o=t.toString();if(!e.has(o)){let i=[t,[n]];e.set(o,i)}else e.get(o)[1].push(n)},jOi=(e,t,n)=>{let o=t[0].toString(),i=t[1].toString(),r=o<i?`${o},${i}`:`${i},${o}`;if(!e.has(r)){let s=[t,[n]];e.set(r,s)}else e.get(r)[1].push(n)},nqe=(e,t)=>{if(e.findIndex((o)=>o===t)<0)e.push(t)},qOi=(e,t)=>{let n={delta:1,segments:12},{delta:o,segments:i}=Object.assign({},n,e),r=oqe.create(),s=new Map,a=new Map,c=Jd.create(),l=Jd.create();return oqe.toPolygons(t).forEach((u,h)=>{let A=Jd.scale(Jd.create(),qF.plane(u),2*o),m=qF.transform(_Pn.fromTranslation(_Pn.create(),Jd.scale(Jd.create(),A,-0.5)),u),p=XOi(A,m);r=tqe(r,p);let g=u.vertices;for(let _=0;_<g.length;_++){KOi(s,g[_],qF.plane(u));let f=(_+1)%g.length,y=[g[_],g[f]];jOi(a,y,qF.plane(u))}}),a.forEach((u)=>{let h=u[0],A=u[1],m=h[0],p=h[1],g=Jd.subtract(Jd.create(),p,m);Jd.normalize(g,g);let _=A[0],f=Jd.cross(Jd.create(),_,g),y=[];for(let w=0;w<i;w++)nqe(y,w*eqe/i);for(let w=0,T=A.length;w<T;w++){let Q=A[w],N=Jd.dot(f,Q),F=Jd.dot(_,Q),H=Math.atan2(N,F);if(H<0)H+=eqe;if(nqe(y,H),H=Math.atan2(-N,-F),H<0)H+=eqe;nqe(y,H)}y=y.sort(VOi);let x=y.length,C,I,b=[],P=[],E=[];for(let w=-1;w<x;w++){let T=y[w<0?w+x:w],Q=Math.sin(T),N=Math.cos(T);Jd.scale(c,_,N*o),Jd.scale(l,f,Q*o),Jd.add(c,c,l);let F=Jd.add(Jd.create(),m,c),H=Jd.add(Jd.create(),p,c),z=!1;if(w>=0){if(Jd.distance(F,C)<YOi)z=!0}if(!z){if(w>=0){b.push(F),P.push(H);let U=qF.create([I,H,F,C]);E.push(U)}C=F,I=H}}P.reverse(),E.push(qF.create(b)),E.push(qF.create(P));let B=oqe.create(E);r=tqe(r,B)}),s.forEach((u)=>{let h=u[0],A=u[1],m=A[0],p=null,g=0;for(let x=1;x<A.length;x++){let C=A[x],I=Jd.cross(c,m,C),b=Jd.length(I);if(b>0.05){if(b>g)g=b,p=C}}if(!p)p=Jd.orthogonal(c,m);let _=Jd.cross(c,m,p);Jd.normalize(_,_);let f=Jd.cross(l,_,m),y=UOi({center:[h[0],h[1],h[2]],radius:o,segments:i,axes:[m,_,f]});r=tqe(r,y)}),WOi(r)};gPn.exports=qOi});var xPn=ct(function($fs,yPn){var JOi=ps(),$Oi=$Ie(),ZOi=fPn(),ezi=(e,t)=>{let n={delta:1,corners:"round",segments:12},{delta:o,corners:i,segments:r}=Object.assign({},n,e);if(i!=="round")throw Error('corners must be "round" for 3D geometries');if(JOi.toPolygons(t).length===0)throw Error("the given geometry cannot be empty");e={delta:o,corners:i,segments:r};let a=ZOi(e,t);return $Oi(t,a)};yPn.exports=ezi});var bPn=ct(function(Zfs,IPn){var tzi=mre(),$y=Gs(),nK=Cs(),Bre=Wl(),CPn=Ere(),nzi=(e)=>{let{external:t,internal:n}=e;if(tzi(t)<0)t=t.reverse();else n=n.reverse();let o=Bre.fromPoints({closed:!0},t),i=Bre.fromPoints({closed:!0},n),r=nK.toSides(nK.fromPoints(Bre.toPoints(o))),s=nK.toSides(nK.fromPoints(Bre.toPoints(i)));return r.push(...s),nK.create(r)},ozi=(e,t,n,o)=>{let{points:i,external:r,internal:s}=e,a=Math.floor(t/2),c=[],l=[];if(n==="round"&&a>0){let u=Math.PI/a,h=i[i.length-1],A=$y.angle($y.subtract($y.create(),r[r.length-1],h)),m=i[0],p=$y.angle($y.subtract($y.create(),s[0],m));for(let g=1;g<a;g++){let _=A+u*g,f=$y.fromAngleRadians($y.create(),_);$y.scale(f,f,o),$y.add(f,f,h),c.push(f),_=p+u*g,f=$y.fromAngleRadians($y.create(),_),$y.scale(f,f,o),$y.add(f,f,m),l.push(f)}}let d=[];return d.push(...r,...c,...s.reverse(),...l),nK.fromPoints(d)},izi=(e,t)=>{e=Object.assign({},{delta:1,corners:"edge",segments:16},e);let{delta:o,corners:i,segments:r}=e;if(o<=0)throw Error("the given delta must be positive for paths");if(!(i==="edge"||i==="chamfer"||i==="round"))throw Error('corners must be "edge", "chamfer", or "round"');let s=t.isClosed,a=Bre.toPoints(t);if(a.length===0)throw Error("the given geometry cannot be empty");let c={points:a,external:CPn({delta:o,corners:i,segments:r,closed:s},a),internal:CPn({delta:-o,corners:i,segments:r,closed:s},a)};if(t.isClosed)return nzi(c);else return ozi(c,r,i,o)};IPn.exports=izi});var ebe=ct(function(e1s,SPn){var rzi=Zr(),szi=Cs(),azi=ps(),czi=Wl(),lzi=hPn(),dzi=xPn(),uzi=bPn(),hzi=(e,...t)=>{if(t=rzi(t),t.length===0)throw Error("wrong number of arguments");let n=t.map((o)=>{if(czi.isA(o))return uzi(e,o);if(szi.isA(o))return lzi(e,o);if(azi.isA(o))return dzi(e,o);return o});return n.length===1?n[0]:n};SPn.exports=hzi});var EPn=ct(function(t1s,vPn){var tbe=Cs(),PPn=hIe(),mzi=Ere(),pzi=(e,t)=>{let n={delta:1,corners:"edge",segments:0},{delta:o,corners:i,segments:r}=Object.assign({},n,e);if(!(i==="edge"||i==="chamfer"||i==="round"))throw Error('corners must be "edge", "chamfer", or "round"');let s=tbe.toOutlines(t),c=s.map((l)=>(e={delta:s.reduce((h,A)=>h+PPn.arePointsInside(l,PPn.create(A)),0)%2===0?o:-o,corners:i,closed:!0,segments:r},mzi(e,l))).reduce((l,d)=>l.concat(tbe.toSides(tbe.fromPoints(d))),[]);return tbe.create(c)};vPn.exports=pzi});var wPn=ct(function(n1s,BPn){var MPn=Wl(),Azi=Ere(),_zi=(e,t)=>{let n={delta:1,corners:"edge",closed:t.isClosed,segments:16},{delta:o,corners:i,closed:r,segments:s}=Object.assign({},n,e);if(!(i==="edge"||i==="chamfer"||i==="round"))throw Error('corners must be "edge", "chamfer", or "round"');e={delta:o,corners:i,closed:r,segments:s};let a=Azi(e,MPn.toPoints(t));return MPn.fromPoints({closed:r},a)};BPn.exports=_zi});var DPn=ct(function(o1s,TPn){var gzi=Zr(),fzi=Cs(),yzi=Wl(),xzi=EPn(),Czi=wPn(),Izi=(e,...t)=>{if(t=gzi(t),t.length===0)throw Error("wrong number of arguments");let n=t.map((o)=>{if(yzi.isA(o))return Czi(e,o);if(fzi.isA(o))return xzi(e,o);return o});return n.length===1?n[0]:n};TPn.exports=Izi});var RPn=ct(function(i1s,NPn){NPn.exports={expand:ebe(),offset:DPn()}});var Tre=ct(function(r1s,QPn){var wre=cd(),iqe=Ji(),bzi=Cs(),rqe=jF(),Szi=bre(),Pzi=(e,t)=>{let n={offset:[0,0,1],twistAngle:0,twistSteps:12,repair:!0},{offset:o,twistAngle:i,twistSteps:r,repair:s}=Object.assign({},n,e);if(r<1)throw Error("twistSteps must be 1 or more");if(i===0)r=1;let a=iqe.clone(o),c=bzi.toSides(t);if(c.length===0)throw Error("the given geometry cannot be empty");let l=rqe.fromSides(c);if(a[2]<0)rqe.reverse(l,l);let d=wre.create(),u=(h,A,m)=>{let p=A/r*i,g=iqe.scale(iqe.create(),a,A/r);return wre.multiply(d,wre.fromZRotation(d,p),wre.fromTranslation(wre.create(),g)),rqe.transform(d,m)};return e={numberOfSlices:r+1,capStart:!0,capEnd:!0,repair:s,callback:u},Szi(e,l)};QPn.exports=Pzi});var LPn=ct(function(s1s,kPn){var vzi=Cs(),Ezi=Wl(),Mzi=Tre(),Bzi=(e,t)=>{if(!t.isClosed)throw Error("extruded path must be closed");let n=Ezi.toPoints(t),o=vzi.fromPoints(n);return Mzi(e,o)};kPn.exports=Bzi});var HPn=ct(function(a1s,FPn){var wzi=Zr(),Tzi=Cs(),Dzi=Wl(),Nzi=Tre(),Rzi=LPn(),Qzi=(e,...t)=>{let n={height:1,twistAngle:0,twistSteps:1,repair:!0},{height:o,twistAngle:i,twistSteps:r,repair:s}=Object.assign({},n,e);if(t=wzi(t),t.length===0)throw Error("wrong number of arguments");e={offset:[0,0,o],twistAngle:i,twistSteps:r,repair:s};let a=t.map((c)=>{if(Dzi.isA(c))return Rzi(e,c);if(Tzi.isA(c))return Nzi(e,c);return c});return a.length===1?a[0]:a};FPn.exports=Qzi});var zPn=ct(function(c1s,OPn){var kzi=Wl(),Lzi=ebe(),Fzi=Tre(),Hzi=(e,t)=>{let n={size:1,height:1},{size:o,height:i}=Object.assign({},n,e);if(e.delta=o,e.offset=[0,0,i],kzi.toPoints(t).length===0)throw Error("the given geometry cannot be empty");let s=Lzi(e,t);return Fzi(e,s)};OPn.exports=Hzi});var YPn=ct(function(l1s,GPn){var{area:Ozi}=kX(),sqe=Cs(),zzi=Wl(),Gzi=ebe(),Yzi=Tre(),Vzi=(e,t)=>{let n={size:1,height:1},{size:o,height:i}=Object.assign({},n,e);e.delta=o,e.offset=[0,0,i];let r=sqe.toOutlines(t);if(r.length===0)throw Error("the given geometry cannot be empty");let a=r.map((l)=>{if(Ozi(l)<0)l.reverse();return Gzi(e,zzi.fromPoints({closed:!0},l))}).reduce((l,d)=>l.concat(sqe.toSides(d)),[]),c=sqe.create(a);return Yzi(e,c)};GPn.exports=Vzi});var UPn=ct(function(d1s,VPn){var Uzi=Zr(),Wzi=Cs(),Xzi=Wl(),Kzi=zPn(),jzi=YPn(),qzi=(e,...t)=>{let n={size:1,height:1},{size:o,height:i}=Object.assign({},n,e);if(t=Uzi(t),t.length===0)throw Error("wrong number of arguments");if(o<=0)throw Error("size must be positive");if(i<=0)throw Error("height must be positive");let r=t.map((s)=>{if(Xzi.isA(s))return Kzi(e,s);if(Wzi.isA(s))return jzi(e,s);return s});return r.length===1?r[0]:r};VPn.exports=qzi});var XPn=ct(function(u1s,WPn){var{TAU:Dre}=Na(),G3=cd(),Jzi=Cs(),$zi=bre(),aqe=jF(),Zzi=(e,t)=>{let n={angle:Dre,startAngle:0,pitch:10,height:0,endOffset:0,segmentsPerRotation:32},{angle:o,startAngle:i,pitch:r,height:s,endOffset:a,segmentsPerRotation:c}=Object.assign({},n,e);if(s!=0)r=s/(o/Dre);if(c<3)throw Error("The number of segments per rotation needs to be at least 3.");let d=Jzi.toSides(t);if(d.length===0)throw Error("The given geometry cannot be empty");let u=d.filter((f)=>f[0][0]>=0),h=aqe.fromSides(d);if(u.length===0)h=aqe.reverse(h);let A=Math.round(c/Dre*Math.abs(o)),m=A>=2?A:2,p=G3.create(),g=G3.create(),_=(f,y,x)=>{let C=i+o/m*y,I=a/m*y,b=(C-i)/Dre*r;return G3.multiply(p,G3.fromTranslation(G3.create(),[I,0,b*Math.sign(o)]),G3.fromXRotation(G3.create(),-Dre/4*Math.sign(o))),G3.multiply(g,G3.fromZRotation(G3.create(),C),p),aqe.transform(g,x)};return $zi({numberOfSlices:m+1,callback:_},h)};WPn.exports=Zzi});var ZPn=ct(function(h1s,$Pn){var eGi=Zr(),KPn=_Ie(),cqe=VS(),jPn=cd(),qPn=Cs(),JPn=ps(),oK=ga(),tGi=DB(),nGi=Zje(),oGi=(e,t)=>{let n=cqe.fromNormalAndPoint(cqe.create(),e.axis,e.origin);if(Number.isNaN(n[0])||Number.isNaN(n[1])||Number.isNaN(n[2])||Number.isNaN(n[3]))throw Error("project: invalid axis or origin");let o=tGi(t),i=o*o*Math.sqrt(3)/4;if(o===0)return qPn.create();let r=JPn.toPolygons(t),s=[];for(let c=0;c<r.length;c++){let l=r[c].vertices.map((h)=>cqe.projectionOfPoint(n,h)),d=oK.create(l),u=oK.plane(d);if(!KPn(n,u))continue;if(oK.measureArea(d)<i)continue;s.push(d)}if(!KPn(n,[0,0,1])){let c=jPn.fromVectorRotation(jPn.create(),n,[0,0,1]);s=s.map((l)=>oK.transform(c,l))}s=s.sort((c,l)=>oK.measureArea(l)-oK.measureArea(c));let a=s.map((c)=>qPn.fromPoints(c.vertices));return nGi(a)},iGi=(e,...t)=>{let n={axis:[0,0,1],origin:[0,0,0]},{axis:o,origin:i}=Object.assign({},n,e);if(t=eGi(t),t.length===0)throw Error("wrong number of arguments");e={axis:o,origin:i};let r=t.map((s)=>{if(JPn.isA(s))return oGi(e,s);return s});return r.length===1?r[0]:r};$Pn.exports=iGi});var tvn=ct(function(m1s,evn){evn.exports={extrudeFromSlices:bre(),extrudeLinear:HPn(),extrudeRectangular:UPn(),extrudeRotate:Lje(),extrudeHelical:XPn(),project:ZPn(),slice:jF()}});var nbe=ct(function(p1s,ovn){var nvn=Gs(),rGi=(e)=>{let t=nvn.fromValues(1/0,1/0);e.forEach((i)=>{if(i[1]<t[1]||i[1]===t[1]&&i[0]<t[0])t=i});let n=[];e.forEach((i)=>{let r=aGi(i[1]-t[1],i[0]-t[0]),s=nvn.squaredDistance(i,t);n.push({point:i,angle:r,distSq:s})}),n.sort((i,r)=>i.angle!==r.angle?i.angle-r.angle:i.distSq-r.distSq);let o=[];return n.forEach((i)=>{let r=o.length;while(r>1&&sGi(o[r-2],o[r-1],i.point)<=Number.EPSILON)o.pop(),r=o.length;o.push(i.point)}),o},sGi=(e,t,n)=>(t[0]-e[0])*(n[1]-e[1])-(t[1]-e[1])*(n[0]-e[0]),aGi=(e,t)=>{if(e===0&&t===0)return-1/0;else return-t/e};ovn.exports=rGi});var obe=ct(function(A1s,avn){var ivn=Cs(),rvn=ps(),svn=Wl(),cGi=(e)=>{let t=new Set,n=[],o=(i)=>{let r=i.toString();if(!t.has(r))n.push(i),t.add(r)};return e.forEach((i)=>{if(ivn.isA(i))ivn.toPoints(i).forEach(o);else if(rvn.isA(i))rvn.toPoints(i).forEach((r)=>r.forEach(o));else if(svn.isA(i))svn.toPoints(i).forEach(o)}),n};avn.exports=cGi});var lvn=ct(function(_1s,cvn){var lGi=Zr(),dGi=Wl(),uGi=nbe(),hGi=obe(),mGi=(...e)=>{e=lGi(e);let t=hGi(e),n=uGi(t);return dGi.fromPoints({closed:!0},n)};cvn.exports=mGi});var hvn=ct(function(g1s,uvn){var pGi=Zr(),dvn=Cs(),AGi=nbe(),_Gi=obe(),gGi=(...e)=>{e=pGi(e);let t=_Gi(e),n=AGi(t);if(n.length<3)return dvn.create();return dvn.fromPoints(n)};uvn.exports=gGi});var Avn=ct(function(f1s,pvn){var fGi=Zr(),mvn=ps(),yGi=obe(),xGi=jIe(),CGi=(...e)=>{e=fGi(e);let t=yGi(e);if(t.length===0)return mvn.create();return mvn.create(xGi(t))};pvn.exports=CGi});var lqe=ct(function(y1s,_vn){var IGi=Zr(),bGi=qX(),SGi=Cs(),PGi=ps(),vGi=Wl(),EGi=lvn(),MGi=hvn(),BGi=Avn(),wGi=(...e)=>{if(e=IGi(e),e.length===0)throw Error("wrong number of arguments");if(!bGi(e))throw Error("only hulls of the same type are supported");let t=e[0];if(vGi.isA(t))return EGi(e);if(SGi.isA(t))return MGi(e);if(PGi.isA(t))return BGi(e);return t};_vn.exports=wGi});var fvn=ct(function(x1s,gvn){var TGi=Zr(),DGi=$Ie(),NGi=lqe(),RGi=(...e)=>{if(e=TGi(e),e.length<2)throw Error("wrong number of arguments");let t=[];for(let n=1;n<e.length;n++)t.push(NGi(e[n-1],e[n]));return DGi(t)};gvn.exports=RGi});var xvn=ct(function(C1s,yvn){yvn.exports={hull:lqe(),hullChain:fvn(),hullPoints2:nbe(),hullPoints3:jIe()}});var Ivn=ct(function(I1s,Cvn){Cvn.exports={minkowskiSum:qje()}});var uqe=ct(function(b1s,Svn){var dqe=Ji(),bvn=ga(),QGi=(e,t)=>{let n=Math.abs(bvn.measureArea(t));return Number.isFinite(n)&&n>e},kGi=(e,t)=>{let n=t.map((i)=>{let r=i.vertices.map((c)=>dqe.snap(dqe.create(),c,e)),s=[];for(let c=0;c<r.length;c++){let l=(c+1)%r.length;if(!dqe.equals(r[c],r[l]))s.push(r[c])}let a=bvn.create(s);if(i.color)a.color=i.color;return a}),o=e*e*Math.sqrt(3)/4;return n=n.filter((i)=>QGi(o,i)),n};Svn.exports=kGi});var Evn=ct(function(S1s,vvn){var LGi=_Ie(),iK=Ji(),ibe=ga(),FGi=(e)=>{let t=ibe.toPoints(e),n=[];for(let o=0;o<t.length;o++){let i=(o+1)%t.length,r={v1:t[o],v2:t[i]};n.push(r)}for(let o=0;o<n.length;o++){let i=(o+1)%t.length;n[o].next=n[i],n[i].prev=n[o]}return n},HGi=(e,t)=>{let n=`${t.v1}:${t.v2}`;e.set(n,t)},hqe=(e,t)=>{let n=`${t.v1}:${t.v2}`;e.delete(n)},OGi=(e,t)=>{let n=`${t.v2}:${t.v1}`;return e.get(n)},zGi=(e,t,n)=>{let o=e.prev.v1,i=e.prev.v2,r=t.next.v2,s=Pvn(o,i,r,n);o=t.prev.v1,i=t.prev.v2,r=e.next.v2;let a=Pvn(o,i,r,n);return[s,a]},GGi=iK.create(),YGi=iK.create(),Pvn=(e,t,n,o)=>{let i=iK.subtract(GGi,t,e),r=iK.subtract(YGi,n,t);return iK.cross(i,i,r),iK.dot(i,o)},VGi=(e)=>{let t,n=[];while(e.next){let o=e.next;n.push(e.v1),e.v1=null,e.v2=null,e.next=null,e.prev=null,e=o}if(n.length>0)t=ibe.create(n);return t},UGi=(e)=>{if(e.length<2)return e;let t=e[0].plane,n=e.slice(),o=new Map;while(n.length>0){let r=n.shift(),s=FGi(r);for(let a=0;a<s.length;a++){let c=s[a],l=OGi(o,c);if(l){let d=zGi(c,l,t);if(d[0]>=0&&d[1]>=0){let u=l.next,h=c.next;c.prev.next=l.next,c.next.prev=l.prev,l.prev.next=c.next,l.next.prev=c.prev,c.v1=null,c.v2=null,c.next=null,c.prev=null,hqe(o,l),l.v1=null,l.v2=null,l.next=null,l.prev=null;let A=(m,p,g)=>{let _={v1:g.v1,v2:p.v2,next:p.next,prev:g.prev};g.prev.next=_,p.next.prev=_,hqe(m,p),p.v1=null,p.v2=null,p.next=null,p.prev=null,hqe(m,g),g.v1=null,g.v2=null,g.next=null,g.prev=null};if(d[0]===0)A(o,u,u.prev);if(d[1]===0)A(o,h,h.prev)}}else if(c.next)HGi(o,c)}}let i=[];return o.forEach((r)=>{let s=VGi(r);if(s)i.push(s)}),o.clear(),i},WGi=(e,t)=>{if(Math.abs(e[3]-t[3])<0.00000015)return LGi(e,t);return!1},XGi=(e,t)=>{let n=[];t.forEach((i)=>{let r=n.find((s)=>WGi(s[0],ibe.plane(i)));if(r)r[1].push(i);else n.push([ibe.plane(i),[i]])});let o=[];return n.forEach((i)=>{let r=i[1],s=UGi(r);o=o.concat(s)}),o};vvn.exports=XGi});var Tvn=ct(function(P1s,wvn){var Mvn=Na(),Y3=Ji(),KGi=ga(),Zg=(e)=>`${e}`,Bvn=(e,t,n,o,i,r)=>{let s=Zg(o),a=Zg(i),c=`${s}/${a}`,l=`${a}/${s}`;if(e.has(l))return rbe(e,t,n,i,o,null),null;let d={vertex0:o,vertex1:i,polygonindex:r};if(!e.has(c))e.set(c,[d]);else e.get(c).push(d);if(t.has(s))t.get(s).push(c);else t.set(s,[c]);if(n.has(a))n.get(a).push(c);else n.set(a,[c]);return c},rbe=(e,t,n,o,i,r)=>{let s=Zg(o),a=Zg(i),c=`${s}/${a}`,l=-1,d=e.get(c);for(let u=0;u<d.length;u++){let h=d[u],A=Zg(h.vertex0);if(A!==s)continue;if(A=Zg(h.vertex1),A!==a)continue;if(r!==null){if(h.polygonindex!==r)continue}l=u;break}if(d.splice(l,1),d.length===0)e.delete(c);if(l=t.get(s).indexOf(c),t.get(s).splice(l,1),t.get(s).length===0)t.delete(s);if(l=n.get(a).indexOf(c),n.get(a).splice(l,1),n.get(a).length===0)n.delete(a)},jGi=(e)=>{let t=new Map;for(let n=0;n<e.length;n++){let o=e[n],i=o.vertices.length;if(i>=3){let r=o.vertices[0],s=Zg(r);for(let a=0;a<i;a++){let c=a+1;if(c===i)c=0;let l=o.vertices[c],d=Zg(l),u=`${s}/${d}`,h=`${d}/${s}`;if(t.has(h)){let A=t.get(h);if(A.splice(-1,1),A.length===0)t.delete(h)}else{let A={vertex0:r,vertex1:l,polygonindex:n};if(!t.has(u))t.set(u,[A]);else t.get(u).push(A)}r=l,s=d}}else console.warn("warning: invalid polygon found during insertTjunctions")}if(t.size>0){let n=new Map,o=new Map,i=new Map;for(let[s,a]of t)i.set(s,!0),a.forEach((c)=>{let l=Zg(c.vertex0),d=Zg(c.vertex1);if(n.has(l))n.get(l).push(s);else n.set(l,[s]);if(o.has(d))o.get(d).push(s);else o.set(d,[s])});let r=e.slice(0);while(!0){if(t.size===0)break;for(let a of t.keys())i.set(a,!0);let s=!1;while(!0){let a=Array.from(i.keys());if(a.length===0)break;let c=a[0],l=!0;if(t.has(c)){let u=t.get(c)[0];for(let h=0;h<2;h++){let A=h===0?u.vertex0:u.vertex1,m=h===0?u.vertex1:u.vertex0,p=Zg(A),g=Zg(m),_=[];if(h===0){if(o.has(p))_=o.get(p)}else if(n.has(p))_=n.get(p);for(let f=0;f<_.length;f++){let y=_[f],x=t.get(y)[0],C=h===0?x.vertex0:x.vertex1,I=h===0?x.vertex1:x.vertex0,b=Zg(C),P=Zg(I);if(b===g){rbe(t,n,o,A,m,null),rbe(t,n,o,m,A,null),l=!1,h=2,s=!0;break}else{let E=A,B=m,w=C,T=Y3.subtract(Y3.create(),w,E),Q=Y3.dot(Y3.subtract(Y3.create(),B,E),T)/Y3.dot(T,T);if(Q>0&&Q<1){let N=Y3.scale(Y3.create(),T,Q);if(Y3.add(N,N,E),Y3.squaredDistance(N,B)<Mvn.EPS*Mvn.EPS){let H=x.polygonindex,z=r[H],Y=Zg(x.vertex1),U=-1;for(let q=0;q<z.vertices.length;q++)if(Zg(z.vertices[q])===Y){U=q;break}let X=z.vertices.slice(0);X.splice(U,0,m);let V=KGi.create(X);r[H]=V,rbe(t,n,o,x.vertex0,x.vertex1,H);let W=Bvn(t,n,o,x.vertex0,m,H),j=Bvn(t,n,o,m,x.vertex1,H);if(W!==null)i.set(W,!0);if(j!==null)i.set(j,!0);l=!1,h=2,s=!0;break}}}}}}if(l)i.delete(c)}if(!s)break}e=r}return t.clear(),e};wvn.exports=jGi});var Nvn=ct(function(v1s,Dvn){var pqe=Ji(),mqe=ga(),qGi=(e,t,n)=>{let o=t.vertices.length;if(o>3){if(o>4){let s=[0,0,0];t.vertices.forEach((a)=>pqe.add(s,s,a)),pqe.snap(s,pqe.divide(s,s,[o,o,o]),e);for(let a=0;a<o;a++){let c=mqe.create([s,t.vertices[a],t.vertices[(a+1)%o]]);if(t.color)c.color=t.color;n.push(c)}return}let i=mqe.create([t.vertices[0],t.vertices[1],t.vertices[2]]),r=mqe.create([t.vertices[0],t.vertices[2],t.vertices[3]]);if(t.color)i.color=t.color,r.color=t.color;n.push(i,r);return}n.push(t)},JGi=(e,t)=>{let n=[];return t.forEach((o)=>{qGi(e,o,n)}),n};Dvn.exports=JGi});var kvn=ct(function(E1s,Qvn){var $Gi=Zr(),ZGi=DB(),eYi=Cs(),Rvn=ps(),tYi=Wl(),nYi=uqe(),oYi=Evn(),iYi=Tvn(),rYi=Nvn(),sYi=(e,t)=>t,aYi=(e,t)=>t,cYi=(e,t)=>{let n={snap:!1,simplify:!1,triangulate:!1},{snap:o,simplify:i,triangulate:r}=Object.assign({},n,e),s=ZGi(t),a=Rvn.toPolygons(t);if(o)a=nYi(s,a);if(i)a=oYi(s,a);if(r)a=iYi(a),a=rYi(s,a);let c=Object.assign({},t);return c.polygons=a,c},lYi=(e,...t)=>{if(t=$Gi(t),t.length===0)throw Error("wrong number of arguments");let n=t.map((o)=>{if(tYi.isA(o))return sYi(e,o);if(eYi.isA(o))return aYi(e,o);if(Rvn.isA(o))return cYi(e,o);throw Error("invalid geometry")});return n.length===1?n[0]:n};Qvn.exports=lYi});var Fvn=ct(function(M1s,Lvn){var dYi=Zr(),JF=Gs(),Aqe=Cs(),_qe=ps(),gqe=Wl(),fqe=DB(),uYi=uqe(),hYi=(e)=>{let t=fqe(e),o=gqe.toPoints(e).map((i)=>JF.snap(JF.create(),i,t));return gqe.create(o)},mYi=(e)=>{let t=fqe(e),o=Aqe.toSides(e).map((i)=>[JF.snap(JF.create(),i[0],t),JF.snap(JF.create(),i[1],t)]);return o=o.filter((i)=>!JF.equals(i[0],i[1])),Aqe.create(o)},pYi=(e)=>{let t=fqe(e),n=_qe.toPolygons(e),o=uYi(t,n);return _qe.create(o)},AYi=(...e)=>{if(e=dYi(e),e.length===0)throw Error("wrong number of arguments");let t=e.map((n)=>{if(gqe.isA(n))return hYi(n);if(Aqe.isA(n))return mYi(n);if(_qe.isA(n))return pYi(n);return n});return t.length===1?t[0]:t};Lvn.exports=AYi});var Ovn=ct(function(B1s,Hvn){Hvn.exports={generalize:kvn(),snap:Fvn(),retessellate:$X()}});var Gvn=ct(function(w1s,zvn){var _Yi=(e,t,n)=>{e=e.slice();while(e.length<n)e.push(t);return e};zvn.exports=_Yi});var Xvn=ct(function(T1s,Wvn){var gYi=Zr(),Yvn=Gvn(),Uvn=xIe(),{translate:fYi}=BD(),yYi=(e)=>{if(!Array.isArray(e.modes)||e.modes.length>3)throw Error("align(): modes must be an array of length <= 3");if(e.modes=Yvn(e.modes,"none",3),e.modes.filter((t)=>["center","max","min","none"].includes(t)).length!==3)throw Error('align(): all modes must be one of "center", "max" or "min"');if(!Array.isArray(e.relativeTo)||e.relativeTo.length>3)throw Error("align(): relativeTo must be an array of length <= 3");if(e.relativeTo=Yvn(e.relativeTo,0,3),e.relativeTo.filter((t)=>Number.isFinite(t)||t==null).length!==3)throw Error("align(): all relativeTo values must be a number, or null.");if(typeof e.grouped!=="boolean")throw Error("align(): grouped must be a boolean value.");return e},xYi=(e,t,n)=>{for(let o=0;o<3;o++)if(e[o]==null){if(t[o]==="center")e[o]=(n[0][o]+n[1][o])/2;else if(t[o]==="max")e[o]=n[1][o];else if(t[o]==="min")e[o]=n[0][o]}return e},Vvn=(e,t,n)=>{let o=Uvn(e),i=[0,0,0];for(let r=0;r<3;r++)if(t[r]==="center")i[r]=n[r]-(o[0][r]+o[1][r])/2;else if(t[r]==="max")i[r]=n[r]-o[1][r];else if(t[r]==="min")i[r]=n[r]-o[0][r];return fYi(i,e)},CYi=(e,...t)=>{e=Object.assign({},{modes:["center","center","min"],relativeTo:[0,0,0],grouped:!1},e),e=yYi(e);let{modes:o,relativeTo:i,grouped:r}=e;if(t=gYi(t),t.length===0)throw Error("align(): No geometries were provided to act upon");if(i.filter((s)=>s==null).length){let s=Uvn(t);i=xYi(i,o,s)}if(r)t=Vvn(t,o,i);else t=t.map((s)=>Vvn(s,o,i));return t.length===1?t[0]:t};Wvn.exports=CYi});var Nre=ct(function(D1s,Kvn){var IYi=Zr(),bYi=Cs(),SYi=ps(),PYi=Wl(),vYi=bD(),{translate:EYi}=BD(),yqe=(e,t)=>{let n={axes:[!0,!0,!0],relativeTo:[0,0,0]},{axes:o,relativeTo:i}=Object.assign({},n,e),r=vYi(t),s=[0,0,0];if(o[0])s[0]=i[0]-(r[0][0]+(r[1][0]-r[0][0])/2);if(o[1])s[1]=i[1]-(r[0][1]+(r[1][1]-r[0][1])/2);if(o[2])s[2]=i[2]-(r[0][2]+(r[1][2]-r[0][2])/2);return EYi(s,t)},sbe=(e,...t)=>{let n={axes:[!0,!0,!0],relativeTo:[0,0,0]},{axes:o,relativeTo:i}=Object.assign({},n,e);if(t=IYi(t),t.length===0)throw Error("wrong number of arguments");if(i.length!==3)throw Error("relativeTo must be an array of length 3");e={axes:o,relativeTo:i};let r=t.map((s)=>{if(PYi.isA(s))return yqe(e,s);if(bYi.isA(s))return yqe(e,s);if(SYi.isA(s))return yqe(e,s);return s});return r.length===1?r[0]:r},MYi=(...e)=>sbe({axes:[!0,!1,!1]},e),BYi=(...e)=>sbe({axes:[!1,!0,!1]},e),wYi=(...e)=>sbe({axes:[!1,!1,!0]},e);Kvn.exports={center:sbe,centerX:MYi,centerY:BYi,centerZ:wYi}});var Rre=ct(function(N1s,Zvn){var TYi=Zr(),jvn=cd(),qvn=Cs(),Jvn=ps(),$vn=Wl(),abe=(e,...t)=>{if(!Array.isArray(e))throw Error("factors must be an array");if(t=TYi(t),t.length===0)throw Error("wrong number of arguments");e=e.slice();while(e.length<3)e.push(1);if(e[0]<=0||e[1]<=0||e[2]<=0)throw Error("factors must be positive");let n=jvn.fromScaling(jvn.create(),e),o=t.map((i)=>{if($vn.isA(i))return $vn.transform(n,i);if(qvn.isA(i))return qvn.transform(n,i);if(Jvn.isA(i))return Jvn.transform(n,i);return i});return o.length===1?o[0]:o},DYi=(e,...t)=>abe([e,1,1],t),NYi=(e,...t)=>abe([1,e,1],t),RYi=(e,...t)=>abe([1,1,e],t);Zvn.exports={scale:abe,scaleX:DYi,scaleY:NYi,scaleZ:RYi}});var iEn=ct(function(R1s,oEn){var QYi=Zr(),eEn=Cs(),tEn=ps(),nEn=Wl(),kYi=(e,...t)=>{if(t=QYi(t),t.length===0)throw Error("wrong number of arguments");let n=t.map((o)=>{if(nEn.isA(o))return nEn.transform(e,o);if(eEn.isA(o))return eEn.transform(e,o);if(tEn.isA(o))return tEn.transform(e,o);return o});return n.length===1?n[0]:n};oEn.exports=kYi});var sEn=ct(function(Q1s,rEn){rEn.exports={align:Xvn(),center:Nre().center,centerX:Nre().centerX,centerY:Nre().centerY,centerZ:Nre().centerZ,mirror:VX().mirror,mirrorX:VX().mirrorX,mirrorY:VX().mirrorY,mirrorZ:VX().mirrorZ,rotate:XX().rotate,rotateX:XX().rotateX,rotateY:XX().rotateY,rotateZ:XX().rotateZ,scale:Rre().scale,scaleX:Rre().scaleX,scaleY:Rre().scaleY,scaleZ:Rre().scaleZ,transform:iEn(),translate:BD().translate,translateX:BD().translateX,translateY:BD().translateY,translateZ:BD().translateZ}});var Zy=ct(function(k1s,aEn){aEn.exports={colors:I2n(),curves:O2n(),geometries:mIe(),maths:dCn(),measurements:XCn(),primitives:N5n(),text:G5n(),utils:Vje(),booleans:cPn(),expansions:RPn(),extrusions:tvn(),hulls:xvn(),minkowski:Ivn(),modifiers:Ovn(),transforms:sEn()}});var l4n=ct(function(U4s,c4n){var a4n=(e)=>e.reduce((t,n)=>Array.isArray(n)?t.concat(a4n(n)):t.concat(n),[]);c4n.exports=a4n});var u4n=ct(function(W4s,d4n){var nji=(e,t)=>e-t;d4n.exports=nji});var m4n=ct(function(X4s,h4n){var oji=(e)=>{if(!Array.isArray(e)||e.length===0)return;return e[0]};h4n.exports=oji});var A4n=ct(function(K4s,p4n){var iji=(e,t,n)=>{let o=0,i=e.length;while(i>o){let r=Math.floor((o+i)/2),s=e[r];if(n(t,s)>0)o=r+1;else i=r}return e.splice(o,0,t),e};p4n.exports=iji});var g4n=ct(function(j4s,_4n){var rji=(e,t)=>{if(!Array.isArray(e)||e.length<t)return;return e[t]};_4n.exports=rji});var y4n=ct(function(q4s,f4n){var sji=(e,t,n)=>{e=e.slice();while(e.length<n)e.push(t);return e};f4n.exports=sji});var C4n=ct(function(J4s,x4n){var aji=(e)=>{if(Array.isArray(e))return e;if(e===void 0||e===null)return[];return[e]};x4n.exports=aji});var b4n=ct(function($4s,I4n){I4n.exports={flatten:l4n(),fnNumberSort:u4n(),head:m4n(),insertSorted:A4n(),nth:g4n(),padToLength:y4n(),toArray:C4n()}});var P4n=ct(function(Z4s,S4n){var{geometries:hJe}=Zy(),cji=(e,t)=>{t.statusCallback&&t.statusCallback({progress:0});let n=new ArrayBuffer(4),o=new Int32Array(n,0,1),i=new Int8Array(n,0,4);if(o[0]=287454020,i[0]!==68)throw Error("Binary STL output is currently only supported on little-endian (Intel) processors");let r=0,s=0;e.forEach((g,_)=>{hJe.geom3.toPolygons(g).forEach((y)=>{let x=y.vertices.length,C=x>=3?x-2:0;r+=C,s+=1})});let a=new Uint8Array(80);for(let g=0;g<80;g++)a[g]=65;let c=new Uint32Array(1);c[0]=r;let l=new ArrayBuffer(50*r),d=new Int8Array(l),u=new ArrayBuffer(50),h=new Int8Array(u),A=new Float32Array(u,0,12),m=new Uint16Array(u,48,1),p=0;return e.forEach((g)=>{hJe.geom3.toPolygons(g).forEach((f,y)=>{let x=f.vertices,C=x.length,I=hJe.poly3.plane(f);for(let b=0;b<C-2;b++){A[0]=I[0],A[1]=I[1],A[2]=I[2];let P=3;for(let E=0;E<3;E++){let B=E+(E>0?b:0),w=x[B];A[P++]=w[0],A[P++]=w[1],A[P++]=w[2]}m[0]=0,d.set(h,p),p+=50}t.statusCallback&&t.statusCallback({progress:100*y/s})})}),t.statusCallback&&t.statusCallback({progress:100}),[a.buffer,c.buffer,l]};S4n.exports={serializeBinary:cji}});var B4n=ct(function(eMs,M4n){var{geometries:v4n}=Zy(),lji=(e,t)=>{t.statusCallback&&t.statusCallback({progress:0});let n=`solid JSCAD
${dji(e,t)}
endsolid JSCAD
`;return t.statusCallback&&t.statusCallback({progress:100}),[n]},dji=(e,t)=>{let n=[];return e.forEach((o,i)=>{n.push(uji(o,t)),t.statusCallback&&t.statusCallback({progress:100*i/e.length})}),n.join(`
`)},uji=(e,t)=>{let n=[];return v4n.geom3.toPolygons(e).forEach((i,r)=>{n.push(hji(i))}),n.join(`
`)},E4n=(e)=>`${e[0]} ${e[1]} ${e[2]}`,mJe=(e)=>`vertex ${E4n(e)}`,hji=(e)=>{let t=[];if(e.vertices.length>=3){let n=mJe(e.vertices[0]);for(let o=0;o<e.vertices.length-2;o++){let i=`facet normal ${E4n(v4n.poly3.plane(e))}
outer loop
${n}
${mJe(e.vertices[o+1])}
${mJe(e.vertices[o+2])}
endloop
endfacet`;t.push(i)}}return t.join(`
`)};M4n.exports={serializeText:lji}});var T4n=ct(function(tMs,w4n){var{geometries:mji,modifiers:pji}=Zy(),{flatten:Aji,toArray:_ji}=b4n(),{serializeBinary:gji}=P4n(),{serializeText:fji}=B4n(),yji=(e,...t)=>{e=Object.assign({},{binary:!0,statusCallback:null},e),t=Aji(t);let o=t.filter((i)=>mji.geom3.isA(i));if(o.length===0)throw Error("only 3D geometries can be serialized to STL");if(t.length!==o.length)console.warn("some objects could not be serialized to STL");return o=_ji(pji.generalize({snap:!0,triangulate:!0},o)),e.binary?gji(o,e):fji(o,e)};w4n.exports={mimeType:"application/sla",serialize:yji}});WBe();var ZDn=Rt(lo()),ret=Rt(xnt());var n4=Rt(lo(),1),KK=Rt(lo(),1);var OAt="165",Yv={LEFT:0,MIDDLE:1,RIGHT:2,ROTATE:0,DOLLY:1,PAN:2},gQ={ROTATE:0,PAN:1,DOLLY_PAN:2,DOLLY_ROTATE:3};var zAt=2;var Vv=0,ZJ=1,fh=2;var GAt=4;var YAt=303;var rx=1000,dI=1001,e0e=1002,t0e=1003,n0e=1004;var o0e=1005;var Ga=1006,i0e=1007;var Od=1008;var D9e=1023;var r0e=2300,e$=2301;var VAt=0,s0e=1,t$=2;var UAt=3201;var a0e="",k7="srgb";class WM{addEventListener(e,t){if(this._listeners===void 0)this._listeners={};let n=this._listeners;if(n[e]===void 0)n[e]=[];if(n[e].indexOf(t)===-1)n[e].push(t)}hasEventListener(e,t){if(this._listeners===void 0)return!1;let n=this._listeners;return n[e]!==void 0&&n[e].indexOf(t)!==-1}removeEventListener(e,t){if(this._listeners===void 0)return;let o=this._listeners[e];if(o!==void 0){let i=o.indexOf(t);if(i!==-1)o.splice(i,1)}}dispatchEvent(e){if(this._listeners===void 0)return;let n=this._listeners[e.type];if(n!==void 0){e.target=this;let o=n.slice(0);for(let i=0,r=o.length;i<r;i++)o[i].call(this,e);e.target=null}}}var vg=["00","01","02","03","04","05","06","07","08","09","0a","0b","0c","0d","0e","0f","10","11","12","13","14","15","16","17","18","19","1a","1b","1c","1d","1e","1f","20","21","22","23","24","25","26","27","28","29","2a","2b","2c","2d","2e","2f","30","31","32","33","34","35","36","37","38","39","3a","3b","3c","3d","3e","3f","40","41","42","43","44","45","46","47","48","49","4a","4b","4c","4d","4e","4f","50","51","52","53","54","55","56","57","58","59","5a","5b","5c","5d","5e","5f","60","61","62","63","64","65","66","67","68","69","6a","6b","6c","6d","6e","6f","70","71","72","73","74","75","76","77","78","79","7a","7b","7c","7d","7e","7f","80","81","82","83","84","85","86","87","88","89","8a","8b","8c","8d","8e","8f","90","91","92","93","94","95","96","97","98","99","9a","9b","9c","9d","9e","9f","a0","a1","a2","a3","a4","a5","a6","a7","a8","a9","aa","ab","ac","ad","ae","af","b0","b1","b2","b3","b4","b5","b6","b7","b8","b9","ba","bb","bc","bd","be","bf","c0","c1","c2","c3","c4","c5","c6","c7","c8","c9","ca","cb","cc","cd","ce","cf","d0","d1","d2","d3","d4","d5","d6","d7","d8","d9","da","db","dc","dd","de","df","e0","e1","e2","e3","e4","e5","e6","e7","e8","e9","ea","eb","ec","ed","ee","ef","f0","f1","f2","f3","f4","f5","f6","f7","f8","f9","fa","fb","fc","fd","fe","ff"],Mpt=1234567,kG=Math.PI/180,FG=180/Math.PI;function lI(){let e=Math.random()*4294967295|0,t=Math.random()*4294967295|0,n=Math.random()*4294967295|0,o=Math.random()*4294967295|0;return(vg[e&255]+vg[e>>8&255]+vg[e>>16&255]+vg[e>>24&255]+"-"+vg[t&255]+vg[t>>8&255]+"-"+vg[t>>16&15|64]+vg[t>>24&255]+"-"+vg[n&63|128]+vg[n>>8&255]+"-"+vg[n>>16&255]+vg[n>>24&255]+vg[o&255]+vg[o>>8&255]+vg[o>>16&255]+vg[o>>24&255]).toLowerCase()}function Tp(e,t,n){return Math.max(t,Math.min(n,e))}function N9e(e,t){return(e%t+t)%t}function Fno(e,t,n,o,i){return o+(e-t)*(i-o)/(n-t)}function Hno(e,t,n){if(e!==t)return(n-e)/(t-e);else return 0}function YJ(e,t,n){return(1-n)*e+n*t}function Ono(e,t,n,o){return YJ(e,t,1-Math.exp(-n*o))}function zno(e,t=1){return t-Math.abs(N9e(e,t*2)-t)}function Gno(e,t,n){if(e<=t)return 0;if(e>=n)return 1;return e=(e-t)/(n-t),e*e*(3-2*e)}function Yno(e,t,n){if(e<=t)return 0;if(e>=n)return 1;return e=(e-t)/(n-t),e*e*e*(e*(e*6-15)+10)}function Vno(e,t){return e+Math.floor(Math.random()*(t-e+1))}function Uno(e,t){return e+Math.random()*(t-e)}function Wno(e){return e*(0.5-Math.random())}function Xno(e){if(e!==void 0)Mpt=e;let t=Mpt+=1831565813;return t=Math.imul(t^t>>>15,t|1),t^=t+Math.imul(t^t>>>7,t|61),((t^t>>>14)>>>0)/4294967296}function Kno(e){return e*kG}function jno(e){return e*FG}function qno(e){return(e&e-1)===0&&e!==0}function Jno(e){return Math.pow(2,Math.ceil(Math.log(e)/Math.LN2))}function $no(e){return Math.pow(2,Math.floor(Math.log(e)/Math.LN2))}function Zno(e,t,n,o,i){let{cos:r,sin:s}=Math,a=r(n/2),c=s(n/2),l=r((t+o)/2),d=s((t+o)/2),u=r((t-o)/2),h=s((t-o)/2),A=r((o-t)/2),m=s((o-t)/2);switch(i){case"XYX":e.set(a*d,c*u,c*h,a*l);break;case"YZY":e.set(c*h,a*d,c*u,a*l);break;case"ZXZ":e.set(c*u,c*h,a*d,a*l);break;case"XZX":e.set(a*d,c*m,c*A,a*l);break;case"YXY":e.set(c*A,a*d,c*m,a*l);break;case"ZYZ":e.set(c*m,c*A,a*d,a*l);break;default:console.warn("THREE.MathUtils: .setQuaternionFromProperEuler() encountered an unknown order: "+i)}}function V5(e,t){switch(t.constructor){case Float32Array:return e;case Uint32Array:return e/4294967295;case Uint16Array:return e/65535;case Uint8Array:return e/255;case Int32Array:return Math.max(e/2147483647,-1);case Int16Array:return Math.max(e/32767,-1);case Int8Array:return Math.max(e/127,-1);default:throw Error("Invalid component type.")}}function Zl(e,t){switch(t.constructor){case Float32Array:return e;case Uint32Array:return Math.round(e*4294967295);case Uint16Array:return Math.round(e*65535);case Uint8Array:return Math.round(e*255);case Int32Array:return Math.round(e*2147483647);case Int16Array:return Math.round(e*32767);case Int8Array:return Math.round(e*127);default:throw Error("Invalid component type.")}}var Uv={DEG2RAD:kG,RAD2DEG:FG,generateUUID:lI,clamp:Tp,euclideanModulo:N9e,mapLinear:Fno,inverseLerp:Hno,lerp:YJ,damp:Ono,pingpong:zno,smoothstep:Gno,smootherstep:Yno,randInt:Vno,randFloat:Uno,randFloatSpread:Wno,seededRandom:Xno,degToRad:Kno,radToDeg:jno,isPowerOfTwo:qno,ceilPowerOfTwo:Jno,floorPowerOfTwo:$no,setQuaternionFromProperEuler:Zno,normalize:Zl,denormalize:V5};class ro{constructor(e=0,t=0){ro.prototype.isVector2=!0,this.x=e,this.y=t}get width(){return this.x}set width(e){this.x=e}get height(){return this.y}set height(e){this.y=e}set(e,t){return this.x=e,this.y=t,this}setScalar(e){return this.x=e,this.y=e,this}setX(e){return this.x=e,this}setY(e){return this.y=e,this}setComponent(e,t){switch(e){case 0:this.x=t;break;case 1:this.y=t;break;default:throw Error("index is out of range: "+e)}return this}getComponent(e){switch(e){case 0:return this.x;case 1:return this.y;default:throw Error("index is out of range: "+e)}}clone(){return new this.constructor(this.x,this.y)}copy(e){return this.x=e.x,this.y=e.y,this}add(e){return this.x+=e.x,this.y+=e.y,this}addScalar(e){return this.x+=e,this.y+=e,this}addVectors(e,t){return this.x=e.x+t.x,this.y=e.y+t.y,this}addScaledVector(e,t){return this.x+=e.x*t,this.y+=e.y*t,this}sub(e){return this.x-=e.x,this.y-=e.y,this}subScalar(e){return this.x-=e,this.y-=e,this}subVectors(e,t){return this.x=e.x-t.x,this.y=e.y-t.y,this}multiply(e){return this.x*=e.x,this.y*=e.y,this}multiplyScalar(e){return this.x*=e,this.y*=e,this}divide(e){return this.x/=e.x,this.y/=e.y,this}divideScalar(e){return this.multiplyScalar(1/e)}applyMatrix3(e){let t=this.x,n=this.y,o=e.elements;return this.x=o[0]*t+o[3]*n+o[6],this.y=o[1]*t+o[4]*n+o[7],this}min(e){return this.x=Math.min(this.x,e.x),this.y=Math.min(this.y,e.y),this}max(e){return this.x=Math.max(this.x,e.x),this.y=Math.max(this.y,e.y),this}clamp(e,t){return this.x=Math.max(e.x,Math.min(t.x,this.x)),this.y=Math.max(e.y,Math.min(t.y,this.y)),this}clampScalar(e,t){return this.x=Math.max(e,Math.min(t,this.x)),this.y=Math.max(e,Math.min(t,this.y)),this}clampLength(e,t){let n=this.length();return this.divideScalar(n||1).multiplyScalar(Math.max(e,Math.min(t,n)))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this}roundToZero(){return this.x=Math.trunc(this.x),this.y=Math.trunc(this.y),this}negate(){return this.x=-this.x,this.y=-this.y,this}dot(e){return this.x*e.x+this.y*e.y}cross(e){return this.x*e.y-this.y*e.x}lengthSq(){return this.x*this.x+this.y*this.y}length(){return Math.sqrt(this.x*this.x+this.y*this.y)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)}normalize(){return this.divideScalar(this.length()||1)}angle(){return Math.atan2(-this.y,-this.x)+Math.PI}angleTo(e){let t=Math.sqrt(this.lengthSq()*e.lengthSq());if(t===0)return Math.PI/2;let n=this.dot(e)/t;return Math.acos(Tp(n,-1,1))}distanceTo(e){return Math.sqrt(this.distanceToSquared(e))}distanceToSquared(e){let t=this.x-e.x,n=this.y-e.y;return t*t+n*n}manhattanDistanceTo(e){return Math.abs(this.x-e.x)+Math.abs(this.y-e.y)}setLength(e){return this.normalize().multiplyScalar(e)}lerp(e,t){return this.x+=(e.x-this.x)*t,this.y+=(e.y-this.y)*t,this}lerpVectors(e,t,n){return this.x=e.x+(t.x-e.x)*n,this.y=e.y+(t.y-e.y)*n,this}equals(e){return e.x===this.x&&e.y===this.y}fromArray(e,t=0){return this.x=e[t],this.y=e[t+1],this}toArray(e=[],t=0){return e[t]=this.x,e[t+1]=this.y,e}fromBufferAttribute(e,t){return this.x=e.getX(t),this.y=e.getY(t),this}rotateAround(e,t){let n=Math.cos(t),o=Math.sin(t),i=this.x-e.x,r=this.y-e.y;return this.x=i*n-r*o+e.x,this.y=i*o+r*n+e.y,this}random(){return this.x=Math.random(),this.y=Math.random(),this}*[Symbol.iterator](){yield this.x,yield this.y}}class aa{constructor(e,t,n,o,i,r,s,a,c){if(aa.prototype.isMatrix3=!0,this.elements=[1,0,0,0,1,0,0,0,1],e!==void 0)this.set(e,t,n,o,i,r,s,a,c)}set(e,t,n,o,i,r,s,a,c){let l=this.elements;return l[0]=e,l[1]=o,l[2]=s,l[3]=t,l[4]=i,l[5]=a,l[6]=n,l[7]=r,l[8]=c,this}identity(){return this.set(1,0,0,0,1,0,0,0,1),this}copy(e){let t=this.elements,n=e.elements;return t[0]=n[0],t[1]=n[1],t[2]=n[2],t[3]=n[3],t[4]=n[4],t[5]=n[5],t[6]=n[6],t[7]=n[7],t[8]=n[8],this}extractBasis(e,t,n){return e.setFromMatrix3Column(this,0),t.setFromMatrix3Column(this,1),n.setFromMatrix3Column(this,2),this}setFromMatrix4(e){let t=e.elements;return this.set(t[0],t[4],t[8],t[1],t[5],t[9],t[2],t[6],t[10]),this}multiply(e){return this.multiplyMatrices(this,e)}premultiply(e){return this.multiplyMatrices(e,this)}multiplyMatrices(e,t){let n=e.elements,o=t.elements,i=this.elements,r=n[0],s=n[3],a=n[6],c=n[1],l=n[4],d=n[7],u=n[2],h=n[5],A=n[8],m=o[0],p=o[3],g=o[6],_=o[1],f=o[4],y=o[7],x=o[2],C=o[5],I=o[8];return i[0]=r*m+s*_+a*x,i[3]=r*p+s*f+a*C,i[6]=r*g+s*y+a*I,i[1]=c*m+l*_+d*x,i[4]=c*p+l*f+d*C,i[7]=c*g+l*y+d*I,i[2]=u*m+h*_+A*x,i[5]=u*p+h*f+A*C,i[8]=u*g+h*y+A*I,this}multiplyScalar(e){let t=this.elements;return t[0]*=e,t[3]*=e,t[6]*=e,t[1]*=e,t[4]*=e,t[7]*=e,t[2]*=e,t[5]*=e,t[8]*=e,this}determinant(){let e=this.elements,t=e[0],n=e[1],o=e[2],i=e[3],r=e[4],s=e[5],a=e[6],c=e[7],l=e[8];return t*r*l-t*s*c-n*i*l+n*s*a+o*i*c-o*r*a}invert(){let e=this.elements,t=e[0],n=e[1],o=e[2],i=e[3],r=e[4],s=e[5],a=e[6],c=e[7],l=e[8],d=l*r-s*c,u=s*a-l*i,h=c*i-r*a,A=t*d+n*u+o*h;if(A===0)return this.set(0,0,0,0,0,0,0,0,0);let m=1/A;return e[0]=d*m,e[1]=(o*c-l*n)*m,e[2]=(s*n-o*r)*m,e[3]=u*m,e[4]=(l*t-o*a)*m,e[5]=(o*i-s*t)*m,e[6]=h*m,e[7]=(n*a-c*t)*m,e[8]=(r*t-n*i)*m,this}transpose(){let e,t=this.elements;return e=t[1],t[1]=t[3],t[3]=e,e=t[2],t[2]=t[6],t[6]=e,e=t[5],t[5]=t[7],t[7]=e,this}getNormalMatrix(e){return this.setFromMatrix4(e).invert().transpose()}transposeIntoArray(e){let t=this.elements;return e[0]=t[0],e[1]=t[3],e[2]=t[6],e[3]=t[1],e[4]=t[4],e[5]=t[7],e[6]=t[2],e[7]=t[5],e[8]=t[8],this}setUvTransform(e,t,n,o,i,r,s){let a=Math.cos(i),c=Math.sin(i);return this.set(n*a,n*c,-n*(a*r+c*s)+r+e,-o*c,o*a,-o*(-c*r+a*s)+s+t,0,0,1),this}scale(e,t){return this.premultiply(XBe.makeScale(e,t)),this}rotate(e){return this.premultiply(XBe.makeRotation(-e)),this}translate(e,t){return this.premultiply(XBe.makeTranslation(e,t)),this}makeTranslation(e,t){if(e.isVector2)this.set(1,0,e.x,0,1,e.y,0,0,1);else this.set(1,0,e,0,1,t,0,0,1);return this}makeRotation(e){let t=Math.cos(e),n=Math.sin(e);return this.set(t,-n,0,n,t,0,0,0,1),this}makeScale(e,t){return this.set(e,0,0,0,t,0,0,0,1),this}equals(e){let t=this.elements,n=e.elements;for(let o=0;o<9;o++)if(t[o]!==n[o])return!1;return!0}fromArray(e,t=0){for(let n=0;n<9;n++)this.elements[n]=e[n+t];return this}toArray(e=[],t=0){let n=this.elements;return e[t]=n[0],e[t+1]=n[1],e[t+2]=n[2],e[t+3]=n[3],e[t+4]=n[4],e[t+5]=n[5],e[t+6]=n[6],e[t+7]=n[7],e[t+8]=n[8],e}clone(){return new this.constructor().fromArray(this.elements)}}var XBe=new aa;function WAt(e){for(let t=e.length-1;t>=0;--t)if(e[t]>=65535)return!0;return!1}function XJ(e){return document.createElementNS("http://www.w3.org/1999/xhtml",e)}function eoo(){let e=XJ("canvas");return e.style.display="block",e}var Bpt={};function R9e(e){if(e in Bpt)return;Bpt[e]=!0,console.warn(e)}function too(e,t,n){return new Promise(function(o,i){function r(){switch(e.clientWaitSync(t,e.SYNC_FLUSH_COMMANDS_BIT,0)){case e.WAIT_FAILED:i();break;case e.TIMEOUT_EXPIRED:setTimeout(r,n);break;default:o()}}setTimeout(r,n)})}var wpt=new aa().set(0.8224621,0.177538,0,0.0331941,0.9668058,0,0.0170827,0.0723974,0.9105199),Tpt=new aa().set(1.2249401,-0.2249404,0,-0.0420569,1.0420571,0,-0.0196376,-0.0786361,1.0982735),ghe={["srgb-linear"]:{transfer:"linear",primaries:"rec709",toReference:(e)=>e,fromReference:(e)=>e},["srgb"]:{transfer:"srgb",primaries:"rec709",toReference:(e)=>e.convertSRGBToLinear(),fromReference:(e)=>e.convertLinearToSRGB()},["display-p3-linear"]:{transfer:"linear",primaries:"p3",toReference:(e)=>e.applyMatrix3(Tpt),fromReference:(e)=>e.applyMatrix3(wpt)},["display-p3"]:{transfer:"srgb",primaries:"p3",toReference:(e)=>e.convertSRGBToLinear().applyMatrix3(Tpt),fromReference:(e)=>e.applyMatrix3(wpt).convertLinearToSRGB()}},noo=new Set(["srgb-linear","display-p3-linear"]),ed={enabled:!0,_workingColorSpace:"srgb-linear",get workingColorSpace(){return this._workingColorSpace},set workingColorSpace(e){if(!noo.has(e))throw Error(`Unsupported working color space, "${e}".`);this._workingColorSpace=e},convert:function(e,t,n){if(this.enabled===!1||t===n||!t||!n)return e;let o=ghe[t].toReference,i=ghe[n].fromReference;return i(o(e))},fromWorkingColorSpace:function(e,t){return this.convert(e,this._workingColorSpace,t)},toWorkingColorSpace:function(e,t){return this.convert(e,t,this._workingColorSpace)},getPrimaries:function(e){return ghe[e].primaries},getTransfer:function(e){if(e==="")return"linear";return ghe[e].transfer}};function LG(e){return e<0.04045?e*0.0773993808:Math.pow(e*0.9478672986+0.0521327014,2.4)}function KBe(e){return e<0.0031308?e*12.92:1.055*Math.pow(e,0.41666)-0.055}var gG;class XAt{static getDataURL(e){if(/^data:/i.test(e.src))return e.src;if(typeof HTMLCanvasElement>"u")return e.src;let t;if(e instanceof HTMLCanvasElement)t=e;else{if(gG===void 0)gG=XJ("canvas");gG.width=e.width,gG.height=e.height;let n=gG.getContext("2d");if(e instanceof ImageData)n.putImageData(e,0,0);else n.drawImage(e,0,0,e.width,e.height);t=gG}if(t.width>2048||t.height>2048)return console.warn("THREE.ImageUtils.getDataURL: Image converted to jpg for performance reasons",e),t.toDataURL("image/jpeg",0.6);else return t.toDataURL("image/png")}static sRGBToLinear(e){if(typeof HTMLImageElement<"u"&&e instanceof HTMLImageElement||typeof HTMLCanvasElement<"u"&&e instanceof HTMLCanvasElement||typeof ImageBitmap<"u"&&e instanceof ImageBitmap){let t=XJ("canvas");t.width=e.width,t.height=e.height;let n=t.getContext("2d");n.drawImage(e,0,0,e.width,e.height);let o=n.getImageData(0,0,e.width,e.height),i=o.data;for(let r=0;r<i.length;r++)i[r]=LG(i[r]/255)*255;return n.putImageData(o,0,0),t}else if(e.data){let t=e.data.slice(0);for(let n=0;n<t.length;n++)if(t instanceof Uint8Array||t instanceof Uint8ClampedArray)t[n]=Math.floor(LG(t[n]/255)*255);else t[n]=LG(t[n]);return{data:t,width:e.width,height:e.height}}else return console.warn("THREE.ImageUtils.sRGBToLinear(): Unsupported image type. No color space conversion applied."),e}}var ooo=0;class Q9e{constructor(e=null){this.isSource=!0,Object.defineProperty(this,"id",{value:ooo++}),this.uuid=lI(),this.data=e,this.dataReady=!0,this.version=0}set needsUpdate(e){if(e===!0)this.version++}toJSON(e){let t=e===void 0||typeof e==="string";if(!t&&e.images[this.uuid]!==void 0)return e.images[this.uuid];let n={uuid:this.uuid,url:""},o=this.data;if(o!==null){let i;if(Array.isArray(o)){i=[];for(let r=0,s=o.length;r<s;r++)if(o[r].isDataTexture)i.push(jBe(o[r].image));else i.push(jBe(o[r]))}else i=jBe(o);n.url=i}if(!t)e.images[this.uuid]=n;return n}}function jBe(e){if(typeof HTMLImageElement<"u"&&e instanceof HTMLImageElement||typeof HTMLCanvasElement<"u"&&e instanceof HTMLCanvasElement||typeof ImageBitmap<"u"&&e instanceof ImageBitmap)return XAt.getDataURL(e);else if(e.data)return{data:Array.from(e.data),width:e.width,height:e.height,type:e.data.constructor.name};else return console.warn("THREE.Texture: Unable to serialize Texture."),{}}var ioo=0;class sl extends WM{constructor(e=sl.DEFAULT_IMAGE,t=sl.DEFAULT_MAPPING,n=1001,o=1001,i=1006,r=1008,s=1023,a=1009,c=sl.DEFAULT_ANISOTROPY,l=""){super();this.isTexture=!0,Object.defineProperty(this,"id",{value:ioo++}),this.uuid=lI(),this.name="",this.source=new Q9e(e),this.mipmaps=[],this.mapping=t,this.channel=0,this.wrapS=n,this.wrapT=o,this.magFilter=i,this.minFilter=r,this.anisotropy=c,this.format=s,this.internalFormat=null,this.type=a,this.offset=new ro(0,0),this.repeat=new ro(1,1),this.center=new ro(0,0),this.rotation=0,this.matrixAutoUpdate=!0,this.matrix=new aa,this.generateMipmaps=!0,this.premultiplyAlpha=!1,this.flipY=!0,this.unpackAlignment=4,this.colorSpace=l,this.userData={},this.version=0,this.onUpdate=null,this.isRenderTargetTexture=!1,this.pmremVersion=0}get image(){return this.source.data}set image(e=null){this.source.data=e}updateMatrix(){this.matrix.setUvTransform(this.offset.x,this.offset.y,this.repeat.x,this.repeat.y,this.rotation,this.center.x,this.center.y)}clone(){return new this.constructor().copy(this)}copy(e){return this.name=e.name,this.source=e.source,this.mipmaps=e.mipmaps.slice(0),this.mapping=e.mapping,this.channel=e.channel,this.wrapS=e.wrapS,this.wrapT=e.wrapT,this.magFilter=e.magFilter,this.minFilter=e.minFilter,this.anisotropy=e.anisotropy,this.format=e.format,this.internalFormat=e.internalFormat,this.type=e.type,this.offset.copy(e.offset),this.repeat.copy(e.repeat),this.center.copy(e.center),this.rotation=e.rotation,this.matrixAutoUpdate=e.matrixAutoUpdate,this.matrix.copy(e.matrix),this.generateMipmaps=e.generateMipmaps,this.premultiplyAlpha=e.premultiplyAlpha,this.flipY=e.flipY,this.unpackAlignment=e.unpackAlignment,this.colorSpace=e.colorSpace,this.userData=JSON.parse(JSON.stringify(e.userData)),this.needsUpdate=!0,this}toJSON(e){let t=e===void 0||typeof e==="string";if(!t&&e.textures[this.uuid]!==void 0)return e.textures[this.uuid];let n={metadata:{version:4.6,type:"Texture",generator:"Texture.toJSON"},uuid:this.uuid,name:this.name,image:this.source.toJSON(e).uuid,mapping:this.mapping,channel:this.channel,repeat:[this.repeat.x,this.repeat.y],offset:[this.offset.x,this.offset.y],center:[this.center.x,this.center.y],rotation:this.rotation,wrap:[this.wrapS,this.wrapT],format:this.format,internalFormat:this.internalFormat,type:this.type,colorSpace:this.colorSpace,minFilter:this.minFilter,magFilter:this.magFilter,anisotropy:this.anisotropy,flipY:this.flipY,generateMipmaps:this.generateMipmaps,premultiplyAlpha:this.premultiplyAlpha,unpackAlignment:this.unpackAlignment};if(Object.keys(this.userData).length>0)n.userData=this.userData;if(!t)e.textures[this.uuid]=n;return n}dispose(){this.dispatchEvent({type:"dispose"})}transformUv(e){if(this.mapping!==300)return e;if(e.applyMatrix3(this.matrix),e.x<0||e.x>1)switch(this.wrapS){case 1000:e.x=e.x-Math.floor(e.x);break;case 1001:e.x=e.x<0?0:1;break;case 1002:if(Math.abs(Math.floor(e.x)%2)===1)e.x=Math.ceil(e.x)-e.x;else e.x=e.x-Math.floor(e.x);break}if(e.y<0||e.y>1)switch(this.wrapT){case 1000:e.y=e.y-Math.floor(e.y);break;case 1001:e.y=e.y<0?0:1;break;case 1002:if(Math.abs(Math.floor(e.y)%2)===1)e.y=Math.ceil(e.y)-e.y;else e.y=e.y-Math.floor(e.y);break}if(this.flipY)e.y=1-e.y;return e}set needsUpdate(e){if(e===!0)this.version++,this.source.needsUpdate=!0}set needsPMREMUpdate(e){if(e===!0)this.pmremVersion++}}sl.DEFAULT_IMAGE=null;sl.DEFAULT_MAPPING=300;sl.DEFAULT_ANISOTROPY=1;class Gl{constructor(e=0,t=0,n=0,o=1){Gl.prototype.isVector4=!0,this.x=e,this.y=t,this.z=n,this.w=o}get width(){return this.z}set width(e){this.z=e}get height(){return this.w}set height(e){this.w=e}set(e,t,n,o){return this.x=e,this.y=t,this.z=n,this.w=o,this}setScalar(e){return this.x=e,this.y=e,this.z=e,this.w=e,this}setX(e){return this.x=e,this}setY(e){return this.y=e,this}setZ(e){return this.z=e,this}setW(e){return this.w=e,this}setComponent(e,t){switch(e){case 0:this.x=t;break;case 1:this.y=t;break;case 2:this.z=t;break;case 3:this.w=t;break;default:throw Error("index is out of range: "+e)}return this}getComponent(e){switch(e){case 0:return this.x;case 1:return this.y;case 2:return this.z;case 3:return this.w;default:throw Error("index is out of range: "+e)}}clone(){return new this.constructor(this.x,this.y,this.z,this.w)}copy(e){return this.x=e.x,this.y=e.y,this.z=e.z,this.w=e.w!==void 0?e.w:1,this}add(e){return this.x+=e.x,this.y+=e.y,this.z+=e.z,this.w+=e.w,this}addScalar(e){return this.x+=e,this.y+=e,this.z+=e,this.w+=e,this}addVectors(e,t){return this.x=e.x+t.x,this.y=e.y+t.y,this.z=e.z+t.z,this.w=e.w+t.w,this}addScaledVector(e,t){return this.x+=e.x*t,this.y+=e.y*t,this.z+=e.z*t,this.w+=e.w*t,this}sub(e){return this.x-=e.x,this.y-=e.y,this.z-=e.z,this.w-=e.w,this}subScalar(e){return this.x-=e,this.y-=e,this.z-=e,this.w-=e,this}subVectors(e,t){return this.x=e.x-t.x,this.y=e.y-t.y,this.z=e.z-t.z,this.w=e.w-t.w,this}multiply(e){return this.x*=e.x,this.y*=e.y,this.z*=e.z,this.w*=e.w,this}multiplyScalar(e){return this.x*=e,this.y*=e,this.z*=e,this.w*=e,this}applyMatrix4(e){let t=this.x,n=this.y,o=this.z,i=this.w,r=e.elements;return this.x=r[0]*t+r[4]*n+r[8]*o+r[12]*i,this.y=r[1]*t+r[5]*n+r[9]*o+r[13]*i,this.z=r[2]*t+r[6]*n+r[10]*o+r[14]*i,this.w=r[3]*t+r[7]*n+r[11]*o+r[15]*i,this}divideScalar(e){return this.multiplyScalar(1/e)}setAxisAngleFromQuaternion(e){this.w=2*Math.acos(e.w);let t=Math.sqrt(1-e.w*e.w);if(t<0.0001)this.x=1,this.y=0,this.z=0;else this.x=e.x/t,this.y=e.y/t,this.z=e.z/t;return this}setAxisAngleFromRotationMatrix(e){let t,n,o,i,r=0.01,s=0.1,a=e.elements,c=a[0],l=a[4],d=a[8],u=a[1],h=a[5],A=a[9],m=a[2],p=a[6],g=a[10];if(Math.abs(l-u)<0.01&&Math.abs(d-m)<0.01&&Math.abs(A-p)<0.01){if(Math.abs(l+u)<0.1&&Math.abs(d+m)<0.1&&Math.abs(A+p)<0.1&&Math.abs(c+h+g-3)<0.1)return this.set(1,0,0,0),this;t=Math.PI;let f=(c+1)/2,y=(h+1)/2,x=(g+1)/2,C=(l+u)/4,I=(d+m)/4,b=(A+p)/4;if(f>y&&f>x)if(f<0.01)n=0,o=0.707106781,i=0.707106781;else n=Math.sqrt(f),o=C/n,i=I/n;else if(y>x)if(y<0.01)n=0.707106781,o=0,i=0.707106781;else o=Math.sqrt(y),n=C/o,i=b/o;else if(x<0.01)n=0.707106781,o=0.707106781,i=0;else i=Math.sqrt(x),n=I/i,o=b/i;return this.set(n,o,i,t),this}let _=Math.sqrt((p-A)*(p-A)+(d-m)*(d-m)+(u-l)*(u-l));if(Math.abs(_)<0.001)_=1;return this.x=(p-A)/_,this.y=(d-m)/_,this.z=(u-l)/_,this.w=Math.acos((c+h+g-1)/2),this}min(e){return this.x=Math.min(this.x,e.x),this.y=Math.min(this.y,e.y),this.z=Math.min(this.z,e.z),this.w=Math.min(this.w,e.w),this}max(e){return this.x=Math.max(this.x,e.x),this.y=Math.max(this.y,e.y),this.z=Math.max(this.z,e.z),this.w=Math.max(this.w,e.w),this}clamp(e,t){return this.x=Math.max(e.x,Math.min(t.x,this.x)),this.y=Math.max(e.y,Math.min(t.y,this.y)),this.z=Math.max(e.z,Math.min(t.z,this.z)),this.w=Math.max(e.w,Math.min(t.w,this.w)),this}clampScalar(e,t){return this.x=Math.max(e,Math.min(t,this.x)),this.y=Math.max(e,Math.min(t,this.y)),this.z=Math.max(e,Math.min(t,this.z)),this.w=Math.max(e,Math.min(t,this.w)),this}clampLength(e,t){let n=this.length();return this.divideScalar(n||1).multiplyScalar(Math.max(e,Math.min(t,n)))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this.w=Math.floor(this.w),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this.w=Math.ceil(this.w),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this.w=Math.round(this.w),this}roundToZero(){return this.x=Math.trunc(this.x),this.y=Math.trunc(this.y),this.z=Math.trunc(this.z),this.w=Math.trunc(this.w),this}negate(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this.w=-this.w,this}dot(e){return this.x*e.x+this.y*e.y+this.z*e.z+this.w*e.w}lengthSq(){return this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w}length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)+Math.abs(this.w)}normalize(){return this.divideScalar(this.length()||1)}setLength(e){return this.normalize().multiplyScalar(e)}lerp(e,t){return this.x+=(e.x-this.x)*t,this.y+=(e.y-this.y)*t,this.z+=(e.z-this.z)*t,this.w+=(e.w-this.w)*t,this}lerpVectors(e,t,n){return this.x=e.x+(t.x-e.x)*n,this.y=e.y+(t.y-e.y)*n,this.z=e.z+(t.z-e.z)*n,this.w=e.w+(t.w-e.w)*n,this}equals(e){return e.x===this.x&&e.y===this.y&&e.z===this.z&&e.w===this.w}fromArray(e,t=0){return this.x=e[t],this.y=e[t+1],this.z=e[t+2],this.w=e[t+3],this}toArray(e=[],t=0){return e[t]=this.x,e[t+1]=this.y,e[t+2]=this.z,e[t+3]=this.w,e}fromBufferAttribute(e,t){return this.x=e.getX(t),this.y=e.getY(t),this.z=e.getZ(t),this.w=e.getW(t),this}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this.w=Math.random(),this}*[Symbol.iterator](){yield this.x,yield this.y,yield this.z,yield this.w}}class KAt extends WM{constructor(e=1,t=1,n={}){super();this.isRenderTarget=!0,this.width=e,this.height=t,this.depth=1,this.scissor=new Gl(0,0,e,t),this.scissorTest=!1,this.viewport=new Gl(0,0,e,t);let o={width:e,height:t,depth:1};n=Object.assign({generateMipmaps:!1,internalFormat:null,minFilter:1006,depthBuffer:!0,stencilBuffer:!1,resolveDepthBuffer:!0,resolveStencilBuffer:!0,depthTexture:null,samples:0,count:1},n);let i=new sl(o,n.mapping,n.wrapS,n.wrapT,n.magFilter,n.minFilter,n.format,n.type,n.anisotropy,n.colorSpace);i.flipY=!1,i.generateMipmaps=n.generateMipmaps,i.internalFormat=n.internalFormat,this.textures=[];let r=n.count;for(let s=0;s<r;s++)this.textures[s]=i.clone(),this.textures[s].isRenderTargetTexture=!0;this.depthBuffer=n.depthBuffer,this.stencilBuffer=n.stencilBuffer,this.resolveDepthBuffer=n.resolveDepthBuffer,this.resolveStencilBuffer=n.resolveStencilBuffer,this.depthTexture=n.depthTexture,this.samples=n.samples}get texture(){return this.textures[0]}set texture(e){this.textures[0]=e}setSize(e,t,n=1){if(this.width!==e||this.height!==t||this.depth!==n){this.width=e,this.height=t,this.depth=n;for(let o=0,i=this.textures.length;o<i;o++)this.textures[o].image.width=e,this.textures[o].image.height=t,this.textures[o].image.depth=n;this.dispose()}this.viewport.set(0,0,e,t),this.scissor.set(0,0,e,t)}clone(){return new this.constructor().copy(this)}copy(e){this.width=e.width,this.height=e.height,this.depth=e.depth,this.scissor.copy(e.scissor),this.scissorTest=e.scissorTest,this.viewport.copy(e.viewport),this.textures.length=0;for(let n=0,o=e.textures.length;n<o;n++)this.textures[n]=e.textures[n].clone(),this.textures[n].isRenderTargetTexture=!0;let t=Object.assign({},e.texture.image);if(this.texture.source=new Q9e(t),this.depthBuffer=e.depthBuffer,this.stencilBuffer=e.stencilBuffer,this.resolveDepthBuffer=e.resolveDepthBuffer,this.resolveStencilBuffer=e.resolveStencilBuffer,e.depthTexture!==null)this.depthTexture=e.depthTexture.clone();return this.samples=e.samples,this}dispose(){this.dispatchEvent({type:"dispose"})}}class N7 extends KAt{constructor(e=1,t=1,n={}){super(e,t,n);this.isWebGLRenderTarget=!0}}class k9e extends sl{constructor(e=null,t=1,n=1,o=1){super(null);this.isDataArrayTexture=!0,this.image={data:e,width:t,height:n,depth:o},this.magFilter=1003,this.minFilter=1003,this.wrapR=1001,this.generateMipmaps=!1,this.flipY=!1,this.unpackAlignment=1,this.layerUpdates=new Set}addLayerUpdate(e){this.layerUpdates.add(e)}clearLayerUpdates(){this.layerUpdates.clear()}}class jAt extends sl{constructor(e=null,t=1,n=1,o=1){super(null);this.isData3DTexture=!0,this.image={data:e,width:t,height:n,depth:o},this.magFilter=1003,this.minFilter=1003,this.wrapR=1001,this.generateMipmaps=!1,this.flipY=!1,this.unpackAlignment=1}}class em{constructor(e=0,t=0,n=0,o=1){this.isQuaternion=!0,this._x=e,this._y=t,this._z=n,this._w=o}static slerpFlat(e,t,n,o,i,r,s){let a=n[o+0],c=n[o+1],l=n[o+2],d=n[o+3],u=i[r+0],h=i[r+1],A=i[r+2],m=i[r+3];if(s===0){e[t+0]=a,e[t+1]=c,e[t+2]=l,e[t+3]=d;return}if(s===1){e[t+0]=u,e[t+1]=h,e[t+2]=A,e[t+3]=m;return}if(d!==m||a!==u||c!==h||l!==A){let p=1-s,g=a*u+c*h+l*A+d*m,_=g>=0?1:-1,f=1-g*g;if(f>Number.EPSILON){let x=Math.sqrt(f),C=Math.atan2(x,g*_);p=Math.sin(p*C)/x,s=Math.sin(s*C)/x}let y=s*_;if(a=a*p+u*y,c=c*p+h*y,l=l*p+A*y,d=d*p+m*y,p===1-s){let x=1/Math.sqrt(a*a+c*c+l*l+d*d);a*=x,c*=x,l*=x,d*=x}}e[t]=a,e[t+1]=c,e[t+2]=l,e[t+3]=d}static multiplyQuaternionsFlat(e,t,n,o,i,r){let s=n[o],a=n[o+1],c=n[o+2],l=n[o+3],d=i[r],u=i[r+1],h=i[r+2],A=i[r+3];return e[t]=s*A+l*d+a*h-c*u,e[t+1]=a*A+l*u+c*d-s*h,e[t+2]=c*A+l*h+s*u-a*d,e[t+3]=l*A-s*d-a*u-c*h,e}get x(){return this._x}set x(e){this._x=e,this._onChangeCallback()}get y(){return this._y}set y(e){this._y=e,this._onChangeCallback()}get z(){return this._z}set z(e){this._z=e,this._onChangeCallback()}get w(){return this._w}set w(e){this._w=e,this._onChangeCallback()}set(e,t,n,o){return this._x=e,this._y=t,this._z=n,this._w=o,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._w)}copy(e){return this._x=e.x,this._y=e.y,this._z=e.z,this._w=e.w,this._onChangeCallback(),this}setFromEuler(e,t=!0){let{_x:n,_y:o,_z:i,_order:r}=e,{cos:s,sin:a}=Math,c=s(n/2),l=s(o/2),d=s(i/2),u=a(n/2),h=a(o/2),A=a(i/2);switch(r){case"XYZ":this._x=u*l*d+c*h*A,this._y=c*h*d-u*l*A,this._z=c*l*A+u*h*d,this._w=c*l*d-u*h*A;break;case"YXZ":this._x=u*l*d+c*h*A,this._y=c*h*d-u*l*A,this._z=c*l*A-u*h*d,this._w=c*l*d+u*h*A;break;case"ZXY":this._x=u*l*d-c*h*A,this._y=c*h*d+u*l*A,this._z=c*l*A+u*h*d,this._w=c*l*d-u*h*A;break;case"ZYX":this._x=u*l*d-c*h*A,this._y=c*h*d+u*l*A,this._z=c*l*A-u*h*d,this._w=c*l*d+u*h*A;break;case"YZX":this._x=u*l*d+c*h*A,this._y=c*h*d+u*l*A,this._z=c*l*A-u*h*d,this._w=c*l*d-u*h*A;break;case"XZY":this._x=u*l*d-c*h*A,this._y=c*h*d-u*l*A,this._z=c*l*A+u*h*d,this._w=c*l*d+u*h*A;break;default:console.warn("THREE.Quaternion: .setFromEuler() encountered an unknown order: "+r)}if(t===!0)this._onChangeCallback();return this}setFromAxisAngle(e,t){let n=t/2,o=Math.sin(n);return this._x=e.x*o,this._y=e.y*o,this._z=e.z*o,this._w=Math.cos(n),this._onChangeCallback(),this}setFromRotationMatrix(e){let t=e.elements,n=t[0],o=t[4],i=t[8],r=t[1],s=t[5],a=t[9],c=t[2],l=t[6],d=t[10],u=n+s+d;if(u>0){let h=0.5/Math.sqrt(u+1);this._w=0.25/h,this._x=(l-a)*h,this._y=(i-c)*h,this._z=(r-o)*h}else if(n>s&&n>d){let h=2*Math.sqrt(1+n-s-d);this._w=(l-a)/h,this._x=0.25*h,this._y=(o+r)/h,this._z=(i+c)/h}else if(s>d){let h=2*Math.sqrt(1+s-n-d);this._w=(i-c)/h,this._x=(o+r)/h,this._y=0.25*h,this._z=(a+l)/h}else{let h=2*Math.sqrt(1+d-n-s);this._w=(r-o)/h,this._x=(i+c)/h,this._y=(a+l)/h,this._z=0.25*h}return this._onChangeCallback(),this}setFromUnitVectors(e,t){let n=e.dot(t)+1;if(n<Number.EPSILON)if(n=0,Math.abs(e.x)>Math.abs(e.z))this._x=-e.y,this._y=e.x,this._z=0,this._w=n;else this._x=0,this._y=-e.z,this._z=e.y,this._w=n;else this._x=e.y*t.z-e.z*t.y,this._y=e.z*t.x-e.x*t.z,this._z=e.x*t.y-e.y*t.x,this._w=n;return this.normalize()}angleTo(e){return 2*Math.acos(Math.abs(Tp(this.dot(e),-1,1)))}rotateTowards(e,t){let n=this.angleTo(e);if(n===0)return this;let o=Math.min(1,t/n);return this.slerp(e,o),this}identity(){return this.set(0,0,0,1)}invert(){return this.conjugate()}conjugate(){return this._x*=-1,this._y*=-1,this._z*=-1,this._onChangeCallback(),this}dot(e){return this._x*e._x+this._y*e._y+this._z*e._z+this._w*e._w}lengthSq(){return this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w}length(){return Math.sqrt(this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w)}normalize(){let e=this.length();if(e===0)this._x=0,this._y=0,this._z=0,this._w=1;else e=1/e,this._x=this._x*e,this._y=this._y*e,this._z=this._z*e,this._w=this._w*e;return this._onChangeCallback(),this}multiply(e){return this.multiplyQuaternions(this,e)}premultiply(e){return this.multiplyQuaternions(e,this)}multiplyQuaternions(e,t){let{_x:n,_y:o,_z:i,_w:r}=e,{_x:s,_y:a,_z:c,_w:l}=t;return this._x=n*l+r*s+o*c-i*a,this._y=o*l+r*a+i*s-n*c,this._z=i*l+r*c+n*a-o*s,this._w=r*l-n*s-o*a-i*c,this._onChangeCallback(),this}slerp(e,t){if(t===0)return this;if(t===1)return this.copy(e);let n=this._x,o=this._y,i=this._z,r=this._w,s=r*e._w+n*e._x+o*e._y+i*e._z;if(s<0)this._w=-e._w,this._x=-e._x,this._y=-e._y,this._z=-e._z,s=-s;else this.copy(e);if(s>=1)return this._w=r,this._x=n,this._y=o,this._z=i,this;let a=1-s*s;if(a<=Number.EPSILON){let h=1-t;return this._w=h*r+t*this._w,this._x=h*n+t*this._x,this._y=h*o+t*this._y,this._z=h*i+t*this._z,this.normalize(),this}let c=Math.sqrt(a),l=Math.atan2(c,s),d=Math.sin((1-t)*l)/c,u=Math.sin(t*l)/c;return this._w=r*d+this._w*u,this._x=n*d+this._x*u,this._y=o*d+this._y*u,this._z=i*d+this._z*u,this._onChangeCallback(),this}slerpQuaternions(e,t,n){return this.copy(e).slerp(t,n)}random(){let e=2*Math.PI*Math.random(),t=2*Math.PI*Math.random(),n=Math.random(),o=Math.sqrt(1-n),i=Math.sqrt(n);return this.set(o*Math.sin(e),o*Math.cos(e),i*Math.sin(t),i*Math.cos(t))}equals(e){return e._x===this._x&&e._y===this._y&&e._z===this._z&&e._w===this._w}fromArray(e,t=0){return this._x=e[t],this._y=e[t+1],this._z=e[t+2],this._w=e[t+3],this._onChangeCallback(),this}toArray(e=[],t=0){return e[t]=this._x,e[t+1]=this._y,e[t+2]=this._z,e[t+3]=this._w,e}fromBufferAttribute(e,t){return this._x=e.getX(t),this._y=e.getY(t),this._z=e.getZ(t),this._w=e.getW(t),this._onChangeCallback(),this}toJSON(){return this.toArray()}_onChange(e){return this._onChangeCallback=e,this}_onChangeCallback(){}*[Symbol.iterator](){yield this._x,yield this._y,yield this._z,yield this._w}}class bt{constructor(e=0,t=0,n=0){bt.prototype.isVector3=!0,this.x=e,this.y=t,this.z=n}set(e,t,n){if(n===void 0)n=this.z;return this.x=e,this.y=t,this.z=n,this}setScalar(e){return this.x=e,this.y=e,this.z=e,this}setX(e){return this.x=e,this}setY(e){return this.y=e,this}setZ(e){return this.z=e,this}setComponent(e,t){switch(e){case 0:this.x=t;break;case 1:this.y=t;break;case 2:this.z=t;break;default:throw Error("index is out of range: "+e)}return this}getComponent(e){switch(e){case 0:return this.x;case 1:return this.y;case 2:return this.z;default:throw Error("index is out of range: "+e)}}clone(){return new this.constructor(this.x,this.y,this.z)}copy(e){return this.x=e.x,this.y=e.y,this.z=e.z,this}add(e){return this.x+=e.x,this.y+=e.y,this.z+=e.z,this}addScalar(e){return this.x+=e,this.y+=e,this.z+=e,this}addVectors(e,t){return this.x=e.x+t.x,this.y=e.y+t.y,this.z=e.z+t.z,this}addScaledVector(e,t){return this.x+=e.x*t,this.y+=e.y*t,this.z+=e.z*t,this}sub(e){return this.x-=e.x,this.y-=e.y,this.z-=e.z,this}subScalar(e){return this.x-=e,this.y-=e,this.z-=e,this}subVectors(e,t){return this.x=e.x-t.x,this.y=e.y-t.y,this.z=e.z-t.z,this}multiply(e){return this.x*=e.x,this.y*=e.y,this.z*=e.z,this}multiplyScalar(e){return this.x*=e,this.y*=e,this.z*=e,this}multiplyVectors(e,t){return this.x=e.x*t.x,this.y=e.y*t.y,this.z=e.z*t.z,this}applyEuler(e){return this.applyQuaternion(Dpt.setFromEuler(e))}applyAxisAngle(e,t){return this.applyQuaternion(Dpt.setFromAxisAngle(e,t))}applyMatrix3(e){let t=this.x,n=this.y,o=this.z,i=e.elements;return this.x=i[0]*t+i[3]*n+i[6]*o,this.y=i[1]*t+i[4]*n+i[7]*o,this.z=i[2]*t+i[5]*n+i[8]*o,this}applyNormalMatrix(e){return this.applyMatrix3(e).normalize()}applyMatrix4(e){let t=this.x,n=this.y,o=this.z,i=e.elements,r=1/(i[3]*t+i[7]*n+i[11]*o+i[15]);return this.x=(i[0]*t+i[4]*n+i[8]*o+i[12])*r,this.y=(i[1]*t+i[5]*n+i[9]*o+i[13])*r,this.z=(i[2]*t+i[6]*n+i[10]*o+i[14])*r,this}applyQuaternion(e){let t=this.x,n=this.y,o=this.z,{x:i,y:r,z:s,w:a}=e,c=2*(r*o-s*n),l=2*(s*t-i*o),d=2*(i*n-r*t);return this.x=t+a*c+r*d-s*l,this.y=n+a*l+s*c-i*d,this.z=o+a*d+i*l-r*c,this}project(e){return this.applyMatrix4(e.matrixWorldInverse).applyMatrix4(e.projectionMatrix)}unproject(e){return this.applyMatrix4(e.projectionMatrixInverse).applyMatrix4(e.matrixWorld)}transformDirection(e){let t=this.x,n=this.y,o=this.z,i=e.elements;return this.x=i[0]*t+i[4]*n+i[8]*o,this.y=i[1]*t+i[5]*n+i[9]*o,this.z=i[2]*t+i[6]*n+i[10]*o,this.normalize()}divide(e){return this.x/=e.x,this.y/=e.y,this.z/=e.z,this}divideScalar(e){return this.multiplyScalar(1/e)}min(e){return this.x=Math.min(this.x,e.x),this.y=Math.min(this.y,e.y),this.z=Math.min(this.z,e.z),this}max(e){return this.x=Math.max(this.x,e.x),this.y=Math.max(this.y,e.y),this.z=Math.max(this.z,e.z),this}clamp(e,t){return this.x=Math.max(e.x,Math.min(t.x,this.x)),this.y=Math.max(e.y,Math.min(t.y,this.y)),this.z=Math.max(e.z,Math.min(t.z,this.z)),this}clampScalar(e,t){return this.x=Math.max(e,Math.min(t,this.x)),this.y=Math.max(e,Math.min(t,this.y)),this.z=Math.max(e,Math.min(t,this.z)),this}clampLength(e,t){let n=this.length();return this.divideScalar(n||1).multiplyScalar(Math.max(e,Math.min(t,n)))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this}roundToZero(){return this.x=Math.trunc(this.x),this.y=Math.trunc(this.y),this.z=Math.trunc(this.z),this}negate(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this}dot(e){return this.x*e.x+this.y*e.y+this.z*e.z}lengthSq(){return this.x*this.x+this.y*this.y+this.z*this.z}length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)}normalize(){return this.divideScalar(this.length()||1)}setLength(e){return this.normalize().multiplyScalar(e)}lerp(e,t){return this.x+=(e.x-this.x)*t,this.y+=(e.y-this.y)*t,this.z+=(e.z-this.z)*t,this}lerpVectors(e,t,n){return this.x=e.x+(t.x-e.x)*n,this.y=e.y+(t.y-e.y)*n,this.z=e.z+(t.z-e.z)*n,this}cross(e){return this.crossVectors(this,e)}crossVectors(e,t){let{x:n,y:o,z:i}=e,{x:r,y:s,z:a}=t;return this.x=o*a-i*s,this.y=i*r-n*a,this.z=n*s-o*r,this}projectOnVector(e){let t=e.lengthSq();if(t===0)return this.set(0,0,0);let n=e.dot(this)/t;return this.copy(e).multiplyScalar(n)}projectOnPlane(e){return qBe.copy(this).projectOnVector(e),this.sub(qBe)}reflect(e){return this.sub(qBe.copy(e).multiplyScalar(2*this.dot(e)))}angleTo(e){let t=Math.sqrt(this.lengthSq()*e.lengthSq());if(t===0)return Math.PI/2;let n=this.dot(e)/t;return Math.acos(Tp(n,-1,1))}distanceTo(e){return Math.sqrt(this.distanceToSquared(e))}distanceToSquared(e){let t=this.x-e.x,n=this.y-e.y,o=this.z-e.z;return t*t+n*n+o*o}manhattanDistanceTo(e){return Math.abs(this.x-e.x)+Math.abs(this.y-e.y)+Math.abs(this.z-e.z)}setFromSpherical(e){return this.setFromSphericalCoords(e.radius,e.phi,e.theta)}setFromSphericalCoords(e,t,n){let o=Math.sin(t)*e;return this.x=o*Math.sin(n),this.y=Math.cos(t)*e,this.z=o*Math.cos(n),this}setFromCylindrical(e){return this.setFromCylindricalCoords(e.radius,e.theta,e.y)}setFromCylindricalCoords(e,t,n){return this.x=e*Math.sin(t),this.y=n,this.z=e*Math.cos(t),this}setFromMatrixPosition(e){let t=e.elements;return this.x=t[12],this.y=t[13],this.z=t[14],this}setFromMatrixScale(e){let t=this.setFromMatrixColumn(e,0).length(),n=this.setFromMatrixColumn(e,1).length(),o=this.setFromMatrixColumn(e,2).length();return this.x=t,this.y=n,this.z=o,this}setFromMatrixColumn(e,t){return this.fromArray(e.elements,t*4)}setFromMatrix3Column(e,t){return this.fromArray(e.elements,t*3)}setFromEuler(e){return this.x=e._x,this.y=e._y,this.z=e._z,this}setFromColor(e){return this.x=e.r,this.y=e.g,this.z=e.b,this}equals(e){return e.x===this.x&&e.y===this.y&&e.z===this.z}fromArray(e,t=0){return this.x=e[t],this.y=e[t+1],this.z=e[t+2],this}toArray(e=[],t=0){return e[t]=this.x,e[t+1]=this.y,e[t+2]=this.z,e}fromBufferAttribute(e,t){return this.x=e.getX(t),this.y=e.getY(t),this.z=e.getZ(t),this}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this}randomDirection(){let e=Math.random()*Math.PI*2,t=Math.random()*2-1,n=Math.sqrt(1-t*t);return this.x=n*Math.cos(e),this.y=t,this.z=n*Math.sin(e),this}*[Symbol.iterator](){yield this.x,yield this.y,yield this.z}}var qBe=new bt,Dpt=new em;class tm{constructor(e=new bt(1/0,1/0,1/0),t=new bt(-1/0,-1/0,-1/0)){this.isBox3=!0,this.min=e,this.max=t}set(e,t){return this.min.copy(e),this.max.copy(t),this}setFromArray(e){this.makeEmpty();for(let t=0,n=e.length;t<n;t+=3)this.expandByPoint(O5.fromArray(e,t));return this}setFromBufferAttribute(e){this.makeEmpty();for(let t=0,n=e.count;t<n;t++)this.expandByPoint(O5.fromBufferAttribute(e,t));return this}setFromPoints(e){this.makeEmpty();for(let t=0,n=e.length;t<n;t++)this.expandByPoint(e[t]);return this}setFromCenterAndSize(e,t){let n=O5.copy(t).multiplyScalar(0.5);return this.min.copy(e).sub(n),this.max.copy(e).add(n),this}setFromObject(e,t=!1){return this.makeEmpty(),this.expandByObject(e,t)}clone(){return new this.constructor().copy(this)}copy(e){return this.min.copy(e.min),this.max.copy(e.max),this}makeEmpty(){return this.min.x=this.min.y=this.min.z=1/0,this.max.x=this.max.y=this.max.z=-1/0,this}isEmpty(){return this.max.x<this.min.x||this.max.y<this.min.y||this.max.z<this.min.z}getCenter(e){return this.isEmpty()?e.set(0,0,0):e.addVectors(this.min,this.max).multiplyScalar(0.5)}getSize(e){return this.isEmpty()?e.set(0,0,0):e.subVectors(this.max,this.min)}expandByPoint(e){return this.min.min(e),this.max.max(e),this}expandByVector(e){return this.min.sub(e),this.max.add(e),this}expandByScalar(e){return this.min.addScalar(-e),this.max.addScalar(e),this}expandByObject(e,t=!1){e.updateWorldMatrix(!1,!1);let n=e.geometry;if(n!==void 0){let i=n.getAttribute("position");if(t===!0&&i!==void 0&&e.isInstancedMesh!==!0)for(let r=0,s=i.count;r<s;r++){if(e.isMesh===!0)e.getVertexPosition(r,O5);else O5.fromBufferAttribute(i,r);O5.applyMatrix4(e.matrixWorld),this.expandByPoint(O5)}else{if(e.boundingBox!==void 0){if(e.boundingBox===null)e.computeBoundingBox();fhe.copy(e.boundingBox)}else{if(n.boundingBox===null)n.computeBoundingBox();fhe.copy(n.boundingBox)}fhe.applyMatrix4(e.matrixWorld),this.union(fhe)}}let o=e.children;for(let i=0,r=o.length;i<r;i++)this.expandByObject(o[i],t);return this}containsPoint(e){return e.x<this.min.x||e.x>this.max.x||e.y<this.min.y||e.y>this.max.y||e.z<this.min.z||e.z>this.max.z?!1:!0}containsBox(e){return this.min.x<=e.min.x&&e.max.x<=this.max.x&&this.min.y<=e.min.y&&e.max.y<=this.max.y&&this.min.z<=e.min.z&&e.max.z<=this.max.z}getParameter(e,t){return t.set((e.x-this.min.x)/(this.max.x-this.min.x),(e.y-this.min.y)/(this.max.y-this.min.y),(e.z-this.min.z)/(this.max.z-this.min.z))}intersectsBox(e){return e.max.x<this.min.x||e.min.x>this.max.x||e.max.y<this.min.y||e.min.y>this.max.y||e.max.z<this.min.z||e.min.z>this.max.z?!1:!0}intersectsSphere(e){return this.clampPoint(e.center,O5),O5.distanceToSquared(e.center)<=e.radius*e.radius}intersectsPlane(e){let t,n;if(e.normal.x>0)t=e.normal.x*this.min.x,n=e.normal.x*this.max.x;else t=e.normal.x*this.max.x,n=e.normal.x*this.min.x;if(e.normal.y>0)t+=e.normal.y*this.min.y,n+=e.normal.y*this.max.y;else t+=e.normal.y*this.max.y,n+=e.normal.y*this.min.y;if(e.normal.z>0)t+=e.normal.z*this.min.z,n+=e.normal.z*this.max.z;else t+=e.normal.z*this.max.z,n+=e.normal.z*this.min.z;return t<=-e.constant&&n>=-e.constant}intersectsTriangle(e){if(this.isEmpty())return!1;this.getCenter(RJ),yhe.subVectors(this.max,RJ),fG.subVectors(e.a,RJ),yG.subVectors(e.b,RJ),xG.subVectors(e.c,RJ),v7.subVectors(yG,fG),E7.subVectors(xG,yG),sQ.subVectors(fG,xG);let t=[0,-v7.z,v7.y,0,-E7.z,E7.y,0,-sQ.z,sQ.y,v7.z,0,-v7.x,E7.z,0,-E7.x,sQ.z,0,-sQ.x,-v7.y,v7.x,0,-E7.y,E7.x,0,-sQ.y,sQ.x,0];if(!JBe(t,fG,yG,xG,yhe))return!1;if(t=[1,0,0,0,1,0,0,0,1],!JBe(t,fG,yG,xG,yhe))return!1;return xhe.crossVectors(v7,E7),t=[xhe.x,xhe.y,xhe.z],JBe(t,fG,yG,xG,yhe)}clampPoint(e,t){return t.copy(e).clamp(this.min,this.max)}distanceToPoint(e){return this.clampPoint(e,O5).distanceTo(e)}getBoundingSphere(e){if(this.isEmpty())e.makeEmpty();else this.getCenter(e.center),e.radius=this.getSize(O5).length()*0.5;return e}intersect(e){if(this.min.max(e.min),this.max.min(e.max),this.isEmpty())this.makeEmpty();return this}union(e){return this.min.min(e.min),this.max.max(e.max),this}applyMatrix4(e){if(this.isEmpty())return this;return OM[0].set(this.min.x,this.min.y,this.min.z).applyMatrix4(e),OM[1].set(this.min.x,this.min.y,this.max.z).applyMatrix4(e),OM[2].set(this.min.x,this.max.y,this.min.z).applyMatrix4(e),OM[3].set(this.min.x,this.max.y,this.max.z).applyMatrix4(e),OM[4].set(this.max.x,this.min.y,this.min.z).applyMatrix4(e),OM[5].set(this.max.x,this.min.y,this.max.z).applyMatrix4(e),OM[6].set(this.max.x,this.max.y,this.min.z).applyMatrix4(e),OM[7].set(this.max.x,this.max.y,this.max.z).applyMatrix4(e),this.setFromPoints(OM),this}translate(e){return this.min.add(e),this.max.add(e),this}equals(e){return e.min.equals(this.min)&&e.max.equals(this.max)}}var OM=[new bt,new bt,new bt,new bt,new bt,new bt,new bt,new bt],O5=new bt,fhe=new tm,fG=new bt,yG=new bt,xG=new bt,v7=new bt,E7=new bt,sQ=new bt,RJ=new bt,yhe=new bt,xhe=new bt,aQ=new bt;function JBe(e,t,n,o,i){for(let r=0,s=e.length-3;r<=s;r+=3){aQ.fromArray(e,r);let a=i.x*Math.abs(aQ.x)+i.y*Math.abs(aQ.y)+i.z*Math.abs(aQ.z),c=t.dot(aQ),l=n.dot(aQ),d=o.dot(aQ);if(Math.max(-Math.max(c,l,d),Math.min(c,l,d))>a)return!1}return!0}var roo=new tm,QJ=new bt,$Be=new bt;class py{constructor(e=new bt,t=-1){this.isSphere=!0,this.center=e,this.radius=t}set(e,t){return this.center.copy(e),this.radius=t,this}setFromPoints(e,t){let n=this.center;if(t!==void 0)n.copy(t);else roo.setFromPoints(e).getCenter(n);let o=0;for(let i=0,r=e.length;i<r;i++)o=Math.max(o,n.distanceToSquared(e[i]));return this.radius=Math.sqrt(o),this}copy(e){return this.center.copy(e.center),this.radius=e.radius,this}isEmpty(){return this.radius<0}makeEmpty(){return this.center.set(0,0,0),this.radius=-1,this}containsPoint(e){return e.distanceToSquared(this.center)<=this.radius*this.radius}distanceToPoint(e){return e.distanceTo(this.center)-this.radius}intersectsSphere(e){let t=this.radius+e.radius;return e.center.distanceToSquared(this.center)<=t*t}intersectsBox(e){return e.intersectsSphere(this)}intersectsPlane(e){return Math.abs(e.distanceToPoint(this.center))<=this.radius}clampPoint(e,t){let n=this.center.distanceToSquared(e);if(t.copy(e),n>this.radius*this.radius)t.sub(this.center).normalize(),t.multiplyScalar(this.radius).add(this.center);return t}getBoundingBox(e){if(this.isEmpty())return e.makeEmpty(),e;return e.set(this.center,this.center),e.expandByScalar(this.radius),e}applyMatrix4(e){return this.center.applyMatrix4(e),this.radius=this.radius*e.getMaxScaleOnAxis(),this}translate(e){return this.center.add(e),this}expandByPoint(e){if(this.isEmpty())return this.center.copy(e),this.radius=0,this;QJ.subVectors(e,this.center);let t=QJ.lengthSq();if(t>this.radius*this.radius){let n=Math.sqrt(t),o=(n-this.radius)*0.5;this.center.addScaledVector(QJ,o/n),this.radius+=o}return this}union(e){if(e.isEmpty())return this;if(this.isEmpty())return this.copy(e),this;if(this.center.equals(e.center)===!0)this.radius=Math.max(this.radius,e.radius);else $Be.subVectors(e.center,this.center).setLength(e.radius),this.expandByPoint(QJ.copy(e.center).add($Be)),this.expandByPoint(QJ.copy(e.center).sub($Be));return this}equals(e){return e.center.equals(this.center)&&e.radius===this.radius}clone(){return new this.constructor().copy(this)}}var zM=new bt,ZBe=new bt,Che=new bt,M7=new bt,e9e=new bt,Ihe=new bt,t9e=new bt;class L7{constructor(e=new bt,t=new bt(0,0,-1)){this.origin=e,this.direction=t}set(e,t){return this.origin.copy(e),this.direction.copy(t),this}copy(e){return this.origin.copy(e.origin),this.direction.copy(e.direction),this}at(e,t){return t.copy(this.origin).addScaledVector(this.direction,e)}lookAt(e){return this.direction.copy(e).sub(this.origin).normalize(),this}recast(e){return this.origin.copy(this.at(e,zM)),this}closestPointToPoint(e,t){t.subVectors(e,this.origin);let n=t.dot(this.direction);if(n<0)return t.copy(this.origin);return t.copy(this.origin).addScaledVector(this.direction,n)}distanceToPoint(e){return Math.sqrt(this.distanceSqToPoint(e))}distanceSqToPoint(e){let t=zM.subVectors(e,this.origin).dot(this.direction);if(t<0)return this.origin.distanceToSquared(e);return zM.copy(this.origin).addScaledVector(this.direction,t),zM.distanceToSquared(e)}distanceSqToSegment(e,t,n,o){ZBe.copy(e).add(t).multiplyScalar(0.5),Che.copy(t).sub(e).normalize(),M7.copy(this.origin).sub(ZBe);let i=e.distanceTo(t)*0.5,r=-this.direction.dot(Che),s=M7.dot(this.direction),a=-M7.dot(Che),c=M7.lengthSq(),l=Math.abs(1-r*r),d,u,h,A;if(l>0)if(d=r*a-s,u=r*s-a,A=i*l,d>=0)if(u>=-A)if(u<=A){let m=1/l;d*=m,u*=m,h=d*(d+r*u+2*s)+u*(r*d+u+2*a)+c}else u=i,d=Math.max(0,-(r*u+s)),h=-d*d+u*(u+2*a)+c;else u=-i,d=Math.max(0,-(r*u+s)),h=-d*d+u*(u+2*a)+c;else if(u<=-A)d=Math.max(0,-(-r*i+s)),u=d>0?-i:Math.min(Math.max(-i,-a),i),h=-d*d+u*(u+2*a)+c;else if(u<=A)d=0,u=Math.min(Math.max(-i,-a),i),h=u*(u+2*a)+c;else d=Math.max(0,-(r*i+s)),u=d>0?i:Math.min(Math.max(-i,-a),i),h=-d*d+u*(u+2*a)+c;else u=r>0?-i:i,d=Math.max(0,-(r*u+s)),h=-d*d+u*(u+2*a)+c;if(n)n.copy(this.origin).addScaledVector(this.direction,d);if(o)o.copy(ZBe).addScaledVector(Che,u);return h}intersectSphere(e,t){zM.subVectors(e.center,this.origin);let n=zM.dot(this.direction),o=zM.dot(zM)-n*n,i=e.radius*e.radius;if(o>i)return null;let r=Math.sqrt(i-o),s=n-r,a=n+r;if(a<0)return null;if(s<0)return this.at(a,t);return this.at(s,t)}intersectsSphere(e){return this.distanceSqToPoint(e.center)<=e.radius*e.radius}distanceToPlane(e){let t=e.normal.dot(this.direction);if(t===0){if(e.distanceToPoint(this.origin)===0)return 0;return null}let n=-(this.origin.dot(e.normal)+e.constant)/t;return n>=0?n:null}intersectPlane(e,t){let n=this.distanceToPlane(e);if(n===null)return null;return this.at(n,t)}intersectsPlane(e){let t=e.distanceToPoint(this.origin);if(t===0)return!0;if(e.normal.dot(this.direction)*t<0)return!0;return!1}intersectBox(e,t){let n,o,i,r,s,a,c=1/this.direction.x,l=1/this.direction.y,d=1/this.direction.z,u=this.origin;if(c>=0)n=(e.min.x-u.x)*c,o=(e.max.x-u.x)*c;else n=(e.max.x-u.x)*c,o=(e.min.x-u.x)*c;if(l>=0)i=(e.min.y-u.y)*l,r=(e.max.y-u.y)*l;else i=(e.max.y-u.y)*l,r=(e.min.y-u.y)*l;if(n>r||i>o)return null;if(i>n||isNaN(n))n=i;if(r<o||isNaN(o))o=r;if(d>=0)s=(e.min.z-u.z)*d,a=(e.max.z-u.z)*d;else s=(e.max.z-u.z)*d,a=(e.min.z-u.z)*d;if(n>a||s>o)return null;if(s>n||n!==n)n=s;if(a<o||o!==o)o=a;if(o<0)return null;return this.at(n>=0?n:o,t)}intersectsBox(e){return this.intersectBox(e,zM)!==null}intersectTriangle(e,t,n,o,i){e9e.subVectors(t,e),Ihe.subVectors(n,e),t9e.crossVectors(e9e,Ihe);let r=this.direction.dot(t9e),s;if(r>0){if(o)return null;s=1}else if(r<0)s=-1,r=-r;else return null;M7.subVectors(this.origin,e);let a=s*this.direction.dot(Ihe.crossVectors(M7,Ihe));if(a<0)return null;let c=s*this.direction.dot(e9e.cross(M7));if(c<0)return null;if(a+c>r)return null;let l=-s*M7.dot(t9e);if(l<0)return null;return this.at(l/r,i)}applyMatrix4(e){return this.origin.applyMatrix4(e),this.direction.transformDirection(e),this}equals(e){return e.origin.equals(this.origin)&&e.direction.equals(this.direction)}clone(){return new this.constructor().copy(this)}}class Pr{constructor(e,t,n,o,i,r,s,a,c,l,d,u,h,A,m,p){if(Pr.prototype.isMatrix4=!0,this.elements=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],e!==void 0)this.set(e,t,n,o,i,r,s,a,c,l,d,u,h,A,m,p)}set(e,t,n,o,i,r,s,a,c,l,d,u,h,A,m,p){let g=this.elements;return g[0]=e,g[4]=t,g[8]=n,g[12]=o,g[1]=i,g[5]=r,g[9]=s,g[13]=a,g[2]=c,g[6]=l,g[10]=d,g[14]=u,g[3]=h,g[7]=A,g[11]=m,g[15]=p,this}identity(){return this.set(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1),this}clone(){return new Pr().fromArray(this.elements)}copy(e){let t=this.elements,n=e.elements;return t[0]=n[0],t[1]=n[1],t[2]=n[2],t[3]=n[3],t[4]=n[4],t[5]=n[5],t[6]=n[6],t[7]=n[7],t[8]=n[8],t[9]=n[9],t[10]=n[10],t[11]=n[11],t[12]=n[12],t[13]=n[13],t[14]=n[14],t[15]=n[15],this}copyPosition(e){let t=this.elements,n=e.elements;return t[12]=n[12],t[13]=n[13],t[14]=n[14],this}setFromMatrix3(e){let t=e.elements;return this.set(t[0],t[3],t[6],0,t[1],t[4],t[7],0,t[2],t[5],t[8],0,0,0,0,1),this}extractBasis(e,t,n){return e.setFromMatrixColumn(this,0),t.setFromMatrixColumn(this,1),n.setFromMatrixColumn(this,2),this}makeBasis(e,t,n){return this.set(e.x,t.x,n.x,0,e.y,t.y,n.y,0,e.z,t.z,n.z,0,0,0,0,1),this}extractRotation(e){let t=this.elements,n=e.elements,o=1/CG.setFromMatrixColumn(e,0).length(),i=1/CG.setFromMatrixColumn(e,1).length(),r=1/CG.setFromMatrixColumn(e,2).length();return t[0]=n[0]*o,t[1]=n[1]*o,t[2]=n[2]*o,t[3]=0,t[4]=n[4]*i,t[5]=n[5]*i,t[6]=n[6]*i,t[7]=0,t[8]=n[8]*r,t[9]=n[9]*r,t[10]=n[10]*r,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,this}makeRotationFromEuler(e){let t=this.elements,{x:n,y:o,z:i}=e,r=Math.cos(n),s=Math.sin(n),a=Math.cos(o),c=Math.sin(o),l=Math.cos(i),d=Math.sin(i);if(e.order==="XYZ"){let u=r*l,h=r*d,A=s*l,m=s*d;t[0]=a*l,t[4]=-a*d,t[8]=c,t[1]=h+A*c,t[5]=u-m*c,t[9]=-s*a,t[2]=m-u*c,t[6]=A+h*c,t[10]=r*a}else if(e.order==="YXZ"){let u=a*l,h=a*d,A=c*l,m=c*d;t[0]=u+m*s,t[4]=A*s-h,t[8]=r*c,t[1]=r*d,t[5]=r*l,t[9]=-s,t[2]=h*s-A,t[6]=m+u*s,t[10]=r*a}else if(e.order==="ZXY"){let u=a*l,h=a*d,A=c*l,m=c*d;t[0]=u-m*s,t[4]=-r*d,t[8]=A+h*s,t[1]=h+A*s,t[5]=r*l,t[9]=m-u*s,t[2]=-r*c,t[6]=s,t[10]=r*a}else if(e.order==="ZYX"){let u=r*l,h=r*d,A=s*l,m=s*d;t[0]=a*l,t[4]=A*c-h,t[8]=u*c+m,t[1]=a*d,t[5]=m*c+u,t[9]=h*c-A,t[2]=-c,t[6]=s*a,t[10]=r*a}else if(e.order==="YZX"){let u=r*a,h=r*c,A=s*a,m=s*c;t[0]=a*l,t[4]=m-u*d,t[8]=A*d+h,t[1]=d,t[5]=r*l,t[9]=-s*l,t[2]=-c*l,t[6]=h*d+A,t[10]=u-m*d}else if(e.order==="XZY"){let u=r*a,h=r*c,A=s*a,m=s*c;t[0]=a*l,t[4]=-d,t[8]=c*l,t[1]=u*d+m,t[5]=r*l,t[9]=h*d-A,t[2]=A*d-h,t[6]=s*l,t[10]=m*d+u}return t[3]=0,t[7]=0,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,this}makeRotationFromQuaternion(e){return this.compose(soo,e,aoo)}lookAt(e,t,n){let o=this.elements;if(nx.subVectors(e,t),nx.lengthSq()===0)nx.z=1;if(nx.normalize(),B7.crossVectors(n,nx),B7.lengthSq()===0){if(Math.abs(n.z)===1)nx.x+=0.0001;else nx.z+=0.0001;nx.normalize(),B7.crossVectors(n,nx)}return B7.normalize(),bhe.crossVectors(nx,B7),o[0]=B7.x,o[4]=bhe.x,o[8]=nx.x,o[1]=B7.y,o[5]=bhe.y,o[9]=nx.y,o[2]=B7.z,o[6]=bhe.z,o[10]=nx.z,this}multiply(e){return this.multiplyMatrices(this,e)}premultiply(e){return this.multiplyMatrices(e,this)}multiplyMatrices(e,t){let n=e.elements,o=t.elements,i=this.elements,r=n[0],s=n[4],a=n[8],c=n[12],l=n[1],d=n[5],u=n[9],h=n[13],A=n[2],m=n[6],p=n[10],g=n[14],_=n[3],f=n[7],y=n[11],x=n[15],C=o[0],I=o[4],b=o[8],P=o[12],E=o[1],B=o[5],w=o[9],T=o[13],Q=o[2],N=o[6],F=o[10],H=o[14],z=o[3],Y=o[7],U=o[11],X=o[15];return i[0]=r*C+s*E+a*Q+c*z,i[4]=r*I+s*B+a*N+c*Y,i[8]=r*b+s*w+a*F+c*U,i[12]=r*P+s*T+a*H+c*X,i[1]=l*C+d*E+u*Q+h*z,i[5]=l*I+d*B+u*N+h*Y,i[9]=l*b+d*w+u*F+h*U,i[13]=l*P+d*T+u*H+h*X,i[2]=A*C+m*E+p*Q+g*z,i[6]=A*I+m*B+p*N+g*Y,i[10]=A*b+m*w+p*F+g*U,i[14]=A*P+m*T+p*H+g*X,i[3]=_*C+f*E+y*Q+x*z,i[7]=_*I+f*B+y*N+x*Y,i[11]=_*b+f*w+y*F+x*U,i[15]=_*P+f*T+y*H+x*X,this}multiplyScalar(e){let t=this.elements;return t[0]*=e,t[4]*=e,t[8]*=e,t[12]*=e,t[1]*=e,t[5]*=e,t[9]*=e,t[13]*=e,t[2]*=e,t[6]*=e,t[10]*=e,t[14]*=e,t[3]*=e,t[7]*=e,t[11]*=e,t[15]*=e,this}determinant(){let e=this.elements,t=e[0],n=e[4],o=e[8],i=e[12],r=e[1],s=e[5],a=e[9],c=e[13],l=e[2],d=e[6],u=e[10],h=e[14],A=e[3],m=e[7],p=e[11],g=e[15];return A*(+i*a*d-o*c*d-i*s*u+n*c*u+o*s*h-n*a*h)+m*(+t*a*h-t*c*u+i*r*u-o*r*h+o*c*l-i*a*l)+p*(+t*c*d-t*s*h-i*r*d+n*r*h+i*s*l-n*c*l)+g*(-o*s*l-t*a*d+t*s*u+o*r*d-n*r*u+n*a*l)}transpose(){let e=this.elements,t;return t=e[1],e[1]=e[4],e[4]=t,t=e[2],e[2]=e[8],e[8]=t,t=e[6],e[6]=e[9],e[9]=t,t=e[3],e[3]=e[12],e[12]=t,t=e[7],e[7]=e[13],e[13]=t,t=e[11],e[11]=e[14],e[14]=t,this}setPosition(e,t,n){let o=this.elements;if(e.isVector3)o[12]=e.x,o[13]=e.y,o[14]=e.z;else o[12]=e,o[13]=t,o[14]=n;return this}invert(){let e=this.elements,t=e[0],n=e[1],o=e[2],i=e[3],r=e[4],s=e[5],a=e[6],c=e[7],l=e[8],d=e[9],u=e[10],h=e[11],A=e[12],m=e[13],p=e[14],g=e[15],_=d*p*c-m*u*c+m*a*h-s*p*h-d*a*g+s*u*g,f=A*u*c-l*p*c-A*a*h+r*p*h+l*a*g-r*u*g,y=l*m*c-A*d*c+A*s*h-r*m*h-l*s*g+r*d*g,x=A*d*a-l*m*a-A*s*u+r*m*u+l*s*p-r*d*p,C=t*_+n*f+o*y+i*x;if(C===0)return this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);let I=1/C;return e[0]=_*I,e[1]=(m*u*i-d*p*i-m*o*h+n*p*h+d*o*g-n*u*g)*I,e[2]=(s*p*i-m*a*i+m*o*c-n*p*c-s*o*g+n*a*g)*I,e[3]=(d*a*i-s*u*i-d*o*c+n*u*c+s*o*h-n*a*h)*I,e[4]=f*I,e[5]=(l*p*i-A*u*i+A*o*h-t*p*h-l*o*g+t*u*g)*I,e[6]=(A*a*i-r*p*i-A*o*c+t*p*c+r*o*g-t*a*g)*I,e[7]=(r*u*i-l*a*i+l*o*c-t*u*c-r*o*h+t*a*h)*I,e[8]=y*I,e[9]=(A*d*i-l*m*i-A*n*h+t*m*h+l*n*g-t*d*g)*I,e[10]=(r*m*i-A*s*i+A*n*c-t*m*c-r*n*g+t*s*g)*I,e[11]=(l*s*i-r*d*i-l*n*c+t*d*c+r*n*h-t*s*h)*I,e[12]=x*I,e[13]=(l*m*o-A*d*o+A*n*u-t*m*u-l*n*p+t*d*p)*I,e[14]=(A*s*o-r*m*o-A*n*a+t*m*a+r*n*p-t*s*p)*I,e[15]=(r*d*o-l*s*o+l*n*a-t*d*a-r*n*u+t*s*u)*I,this}scale(e){let t=this.elements,{x:n,y:o,z:i}=e;return t[0]*=n,t[4]*=o,t[8]*=i,t[1]*=n,t[5]*=o,t[9]*=i,t[2]*=n,t[6]*=o,t[10]*=i,t[3]*=n,t[7]*=o,t[11]*=i,this}getMaxScaleOnAxis(){let e=this.elements,t=e[0]*e[0]+e[1]*e[1]+e[2]*e[2],n=e[4]*e[4]+e[5]*e[5]+e[6]*e[6],o=e[8]*e[8]+e[9]*e[9]+e[10]*e[10];return Math.sqrt(Math.max(t,n,o))}makeTranslation(e,t,n){if(e.isVector3)this.set(1,0,0,e.x,0,1,0,e.y,0,0,1,e.z,0,0,0,1);else this.set(1,0,0,e,0,1,0,t,0,0,1,n,0,0,0,1);return this}makeRotationX(e){let t=Math.cos(e),n=Math.sin(e);return this.set(1,0,0,0,0,t,-n,0,0,n,t,0,0,0,0,1),this}makeRotationY(e){let t=Math.cos(e),n=Math.sin(e);return this.set(t,0,n,0,0,1,0,0,-n,0,t,0,0,0,0,1),this}makeRotationZ(e){let t=Math.cos(e),n=Math.sin(e);return this.set(t,-n,0,0,n,t,0,0,0,0,1,0,0,0,0,1),this}makeRotationAxis(e,t){let n=Math.cos(t),o=Math.sin(t),i=1-n,{x:r,y:s,z:a}=e,c=i*r,l=i*s;return this.set(c*r+n,c*s-o*a,c*a+o*s,0,c*s+o*a,l*s+n,l*a-o*r,0,c*a-o*s,l*a+o*r,i*a*a+n,0,0,0,0,1),this}makeScale(e,t,n){return this.set(e,0,0,0,0,t,0,0,0,0,n,0,0,0,0,1),this}makeShear(e,t,n,o,i,r){return this.set(1,n,i,0,e,1,r,0,t,o,1,0,0,0,0,1),this}compose(e,t,n){let o=this.elements,{_x:i,_y:r,_z:s,_w:a}=t,c=i+i,l=r+r,d=s+s,u=i*c,h=i*l,A=i*d,m=r*l,p=r*d,g=s*d,_=a*c,f=a*l,y=a*d,{x,y:C,z:I}=n;return o[0]=(1-(m+g))*x,o[1]=(h+y)*x,o[2]=(A-f)*x,o[3]=0,o[4]=(h-y)*C,o[5]=(1-(u+g))*C,o[6]=(p+_)*C,o[7]=0,o[8]=(A+f)*I,o[9]=(p-_)*I,o[10]=(1-(u+m))*I,o[11]=0,o[12]=e.x,o[13]=e.y,o[14]=e.z,o[15]=1,this}decompose(e,t,n){let o=this.elements,i=CG.set(o[0],o[1],o[2]).length(),r=CG.set(o[4],o[5],o[6]).length(),s=CG.set(o[8],o[9],o[10]).length();if(this.determinant()<0)i=-i;e.x=o[12],e.y=o[13],e.z=o[14],z5.copy(this);let c=1/i,l=1/r,d=1/s;return z5.elements[0]*=c,z5.elements[1]*=c,z5.elements[2]*=c,z5.elements[4]*=l,z5.elements[5]*=l,z5.elements[6]*=l,z5.elements[8]*=d,z5.elements[9]*=d,z5.elements[10]*=d,t.setFromRotationMatrix(z5),n.x=i,n.y=r,n.z=s,this}makePerspective(e,t,n,o,i,r,s=2000){let a=this.elements,c=2*i/(t-e),l=2*i/(n-o),d=(t+e)/(t-e),u=(n+o)/(n-o),h,A;if(s===2000)h=-(r+i)/(r-i),A=-2*r*i/(r-i);else if(s===2001)h=-r/(r-i),A=-r*i/(r-i);else throw Error("THREE.Matrix4.makePerspective(): Invalid coordinate system: "+s);return a[0]=c,a[4]=0,a[8]=d,a[12]=0,a[1]=0,a[5]=l,a[9]=u,a[13]=0,a[2]=0,a[6]=0,a[10]=h,a[14]=A,a[3]=0,a[7]=0,a[11]=-1,a[15]=0,this}makeOrthographic(e,t,n,o,i,r,s=2000){let a=this.elements,c=1/(t-e),l=1/(n-o),d=1/(r-i),u=(t+e)*c,h=(n+o)*l,A,m;if(s===2000)A=(r+i)*d,m=-2*d;else if(s===2001)A=i*d,m=-1*d;else throw Error("THREE.Matrix4.makeOrthographic(): Invalid coordinate system: "+s);return a[0]=2*c,a[4]=0,a[8]=0,a[12]=-u,a[1]=0,a[5]=2*l,a[9]=0,a[13]=-h,a[2]=0,a[6]=0,a[10]=m,a[14]=-A,a[3]=0,a[7]=0,a[11]=0,a[15]=1,this}equals(e){let t=this.elements,n=e.elements;for(let o=0;o<16;o++)if(t[o]!==n[o])return!1;return!0}fromArray(e,t=0){for(let n=0;n<16;n++)this.elements[n]=e[n+t];return this}toArray(e=[],t=0){let n=this.elements;return e[t]=n[0],e[t+1]=n[1],e[t+2]=n[2],e[t+3]=n[3],e[t+4]=n[4],e[t+5]=n[5],e[t+6]=n[6],e[t+7]=n[7],e[t+8]=n[8],e[t+9]=n[9],e[t+10]=n[10],e[t+11]=n[11],e[t+12]=n[12],e[t+13]=n[13],e[t+14]=n[14],e[t+15]=n[15],e}}var CG=new bt,z5=new Pr,soo=new bt(0,0,0),aoo=new bt(1,1,1),B7=new bt,bhe=new bt,nx=new bt,Npt=new Pr,Rpt=new em;class MA{constructor(e=0,t=0,n=0,o=MA.DEFAULT_ORDER){this.isEuler=!0,this._x=e,this._y=t,this._z=n,this._order=o}get x(){return this._x}set x(e){this._x=e,this._onChangeCallback()}get y(){return this._y}set y(e){this._y=e,this._onChangeCallback()}get z(){return this._z}set z(e){this._z=e,this._onChangeCallback()}get order(){return this._order}set order(e){this._order=e,this._onChangeCallback()}set(e,t,n,o=this._order){return this._x=e,this._y=t,this._z=n,this._order=o,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._order)}copy(e){return this._x=e._x,this._y=e._y,this._z=e._z,this._order=e._order,this._onChangeCallback(),this}setFromRotationMatrix(e,t=this._order,n=!0){let o=e.elements,i=o[0],r=o[4],s=o[8],a=o[1],c=o[5],l=o[9],d=o[2],u=o[6],h=o[10];switch(t){case"XYZ":if(this._y=Math.asin(Tp(s,-1,1)),Math.abs(s)<0.9999999)this._x=Math.atan2(-l,h),this._z=Math.atan2(-r,i);else this._x=Math.atan2(u,c),this._z=0;break;case"YXZ":if(this._x=Math.asin(-Tp(l,-1,1)),Math.abs(l)<0.9999999)this._y=Math.atan2(s,h),this._z=Math.atan2(a,c);else this._y=Math.atan2(-d,i),this._z=0;break;case"ZXY":if(this._x=Math.asin(Tp(u,-1,1)),Math.abs(u)<0.9999999)this._y=Math.atan2(-d,h),this._z=Math.atan2(-r,c);else this._y=0,this._z=Math.atan2(a,i);break;case"ZYX":if(this._y=Math.asin(-Tp(d,-1,1)),Math.abs(d)<0.9999999)this._x=Math.atan2(u,h),this._z=Math.atan2(a,i);else this._x=0,this._z=Math.atan2(-r,c);break;case"YZX":if(this._z=Math.asin(Tp(a,-1,1)),Math.abs(a)<0.9999999)this._x=Math.atan2(-l,c),this._y=Math.atan2(-d,i);else this._x=0,this._y=Math.atan2(s,h);break;case"XZY":if(this._z=Math.asin(-Tp(r,-1,1)),Math.abs(r)<0.9999999)this._x=Math.atan2(u,c),this._y=Math.atan2(s,i);else this._x=Math.atan2(-l,h),this._y=0;break;default:console.warn("THREE.Euler: .setFromRotationMatrix() encountered an unknown order: "+t)}if(this._order=t,n===!0)this._onChangeCallback();return this}setFromQuaternion(e,t,n){return Npt.makeRotationFromQuaternion(e),this.setFromRotationMatrix(Npt,t,n)}setFromVector3(e,t=this._order){return this.set(e.x,e.y,e.z,t)}reorder(e){return Rpt.setFromEuler(this),this.setFromQuaternion(Rpt,e)}equals(e){return e._x===this._x&&e._y===this._y&&e._z===this._z&&e._order===this._order}fromArray(e){if(this._x=e[0],this._y=e[1],this._z=e[2],e[3]!==void 0)this._order=e[3];return this._onChangeCallback(),this}toArray(e=[],t=0){return e[t]=this._x,e[t+1]=this._y,e[t+2]=this._z,e[t+3]=this._order,e}_onChange(e){return this._onChangeCallback=e,this}_onChangeCallback(){}*[Symbol.iterator](){yield this._x,yield this._y,yield this._z,yield this._order}}MA.DEFAULT_ORDER="XYZ";class c0e{constructor(){this.mask=1}set(e){this.mask=(1<<e|0)>>>0}enable(e){this.mask|=1<<e|0}enableAll(){this.mask=-1}toggle(e){this.mask^=1<<e|0}disable(e){this.mask&=~(1<<e|0)}disableAll(){this.mask=0}test(e){return(this.mask&e.mask)!==0}isEnabled(e){return(this.mask&(1<<e|0))!==0}}var coo=0,Qpt=new bt,IG=new em,GM=new Pr,She=new bt,kJ=new bt,loo=new bt,doo=new em,kpt=new bt(1,0,0),Lpt=new bt(0,1,0),Fpt=new bt(0,0,1),Hpt={type:"added"},uoo={type:"removed"},bG={type:"childadded",child:null},n9e={type:"childremoved",child:null};class Nc extends WM{constructor(){super();this.isObject3D=!0,Object.defineProperty(this,"id",{value:coo++}),this.uuid=lI(),this.name="",this.type="Object3D",this.parent=null,this.children=[],this.up=Nc.DEFAULT_UP.clone();let e=new bt,t=new MA,n=new em,o=new bt(1,1,1);function i(){n.setFromEuler(t,!1)}function r(){t.setFromQuaternion(n,void 0,!1)}t._onChange(i),n._onChange(r),Object.defineProperties(this,{position:{configurable:!0,enumerable:!0,value:e},rotation:{configurable:!0,enumerable:!0,value:t},quaternion:{configurable:!0,enumerable:!0,value:n},scale:{configurable:!0,enumerable:!0,value:o},modelViewMatrix:{value:new Pr},normalMatrix:{value:new aa}}),this.matrix=new Pr,this.matrixWorld=new Pr,this.matrixAutoUpdate=Nc.DEFAULT_MATRIX_AUTO_UPDATE,this.matrixWorldAutoUpdate=Nc.DEFAULT_MATRIX_WORLD_AUTO_UPDATE,this.matrixWorldNeedsUpdate=!1,this.layers=new c0e,this.visible=!0,this.castShadow=!1,this.receiveShadow=!1,this.frustumCulled=!0,this.renderOrder=0,this.animations=[],this.userData={}}onBeforeShadow(){}onAfterShadow(){}onBeforeRender(){}onAfterRender(){}applyMatrix4(e){if(this.matrixAutoUpdate)this.updateMatrix();this.matrix.premultiply(e),this.matrix.decompose(this.position,this.quaternion,this.scale)}applyQuaternion(e){return this.quaternion.premultiply(e),this}setRotationFromAxisAngle(e,t){this.quaternion.setFromAxisAngle(e,t)}setRotationFromEuler(e){this.quaternion.setFromEuler(e,!0)}setRotationFromMatrix(e){this.quaternion.setFromRotationMatrix(e)}setRotationFromQuaternion(e){this.quaternion.copy(e)}rotateOnAxis(e,t){return IG.setFromAxisAngle(e,t),this.quaternion.multiply(IG),this}rotateOnWorldAxis(e,t){return IG.setFromAxisAngle(e,t),this.quaternion.premultiply(IG),this}rotateX(e){return this.rotateOnAxis(kpt,e)}rotateY(e){return this.rotateOnAxis(Lpt,e)}rotateZ(e){return this.rotateOnAxis(Fpt,e)}translateOnAxis(e,t){return Qpt.copy(e).applyQuaternion(this.quaternion),this.position.add(Qpt.multiplyScalar(t)),this}translateX(e){return this.translateOnAxis(kpt,e)}translateY(e){return this.translateOnAxis(Lpt,e)}translateZ(e){return this.translateOnAxis(Fpt,e)}localToWorld(e){return this.updateWorldMatrix(!0,!1),e.applyMatrix4(this.matrixWorld)}worldToLocal(e){return this.updateWorldMatrix(!0,!1),e.applyMatrix4(GM.copy(this.matrixWorld).invert())}lookAt(e,t,n){if(e.isVector3)She.copy(e);else She.set(e,t,n);let o=this.parent;if(this.updateWorldMatrix(!0,!1),kJ.setFromMatrixPosition(this.matrixWorld),this.isCamera||this.isLight)GM.lookAt(kJ,She,this.up);else GM.lookAt(She,kJ,this.up);if(this.quaternion.setFromRotationMatrix(GM),o)GM.extractRotation(o.matrixWorld),IG.setFromRotationMatrix(GM),this.quaternion.premultiply(IG.invert())}add(e){if(arguments.length>1){for(let t=0;t<arguments.length;t++)this.add(arguments[t]);return this}if(e===this)return console.error("THREE.Object3D.add: object can't be added as a child of itself.",e),this;if(e&&e.isObject3D)e.removeFromParent(),e.parent=this,this.children.push(e),e.dispatchEvent(Hpt),bG.child=e,this.dispatchEvent(bG),bG.child=null;else console.error("THREE.Object3D.add: object not an instance of THREE.Object3D.",e);return this}remove(e){if(arguments.length>1){for(let n=0;n<arguments.length;n++)this.remove(arguments[n]);return this}let t=this.children.indexOf(e);if(t!==-1)e.parent=null,this.children.splice(t,1),e.dispatchEvent(uoo),n9e.child=e,this.dispatchEvent(n9e),n9e.child=null;return this}removeFromParent(){let e=this.parent;if(e!==null)e.remove(this);return this}clear(){return this.remove(...this.children)}attach(e){if(this.updateWorldMatrix(!0,!1),GM.copy(this.matrixWorld).invert(),e.parent!==null)e.parent.updateWorldMatrix(!0,!1),GM.multiply(e.parent.matrixWorld);return e.applyMatrix4(GM),e.removeFromParent(),e.parent=this,this.children.push(e),e.updateWorldMatrix(!1,!0),e.dispatchEvent(Hpt),bG.child=e,this.dispatchEvent(bG),bG.child=null,this}getObjectById(e){return this.getObjectByProperty("id",e)}getObjectByName(e){return this.getObjectByProperty("name",e)}getObjectByProperty(e,t){if(this[e]===t)return this;for(let n=0,o=this.children.length;n<o;n++){let r=this.children[n].getObjectByProperty(e,t);if(r!==void 0)return r}return}getObjectsByProperty(e,t,n=[]){if(this[e]===t)n.push(this);let o=this.children;for(let i=0,r=o.length;i<r;i++)o[i].getObjectsByProperty(e,t,n);return n}getWorldPosition(e){return this.updateWorldMatrix(!0,!1),e.setFromMatrixPosition(this.matrixWorld)}getWorldQuaternion(e){return this.updateWorldMatrix(!0,!1),this.matrixWorld.decompose(kJ,e,loo),e}getWorldScale(e){return this.updateWorldMatrix(!0,!1),this.matrixWorld.decompose(kJ,doo,e),e}getWorldDirection(e){this.updateWorldMatrix(!0,!1);let t=this.matrixWorld.elements;return e.set(t[8],t[9],t[10]).normalize()}raycast(){}traverse(e){e(this);let t=this.children;for(let n=0,o=t.length;n<o;n++)t[n].traverse(e)}traverseVisible(e){if(this.visible===!1)return;e(this);let t=this.children;for(let n=0,o=t.length;n<o;n++)t[n].traverseVisible(e)}traverseAncestors(e){let t=this.parent;if(t!==null)e(t),t.traverseAncestors(e)}updateMatrix(){this.matrix.compose(this.position,this.quaternion,this.scale),this.matrixWorldNeedsUpdate=!0}updateMatrixWorld(e){if(this.matrixAutoUpdate)this.updateMatrix();if(this.matrixWorldNeedsUpdate||e){if(this.parent===null)this.matrixWorld.copy(this.matrix);else this.matrixWorld.multiplyMatrices(this.parent.matrixWorld,this.matrix);this.matrixWorldNeedsUpdate=!1,e=!0}let t=this.children;for(let n=0,o=t.length;n<o;n++){let i=t[n];if(i.matrixWorldAutoUpdate===!0||e===!0)i.updateMatrixWorld(e)}}updateWorldMatrix(e,t){let n=this.parent;if(e===!0&&n!==null&&n.matrixWorldAutoUpdate===!0)n.updateWorldMatrix(!0,!1);if(this.matrixAutoUpdate)this.updateMatrix();if(this.parent===null)this.matrixWorld.copy(this.matrix);else this.matrixWorld.multiplyMatrices(this.parent.matrixWorld,this.matrix);if(t===!0){let o=this.children;for(let i=0,r=o.length;i<r;i++){let s=o[i];if(s.matrixWorldAutoUpdate===!0)s.updateWorldMatrix(!1,!0)}}}toJSON(e){let t=e===void 0||typeof e==="string",n={};if(t)e={geometries:{},materials:{},textures:{},images:{},shapes:{},skeletons:{},animations:{},nodes:{}},n.metadata={version:4.6,type:"Object",generator:"Object3D.toJSON"};let o={};if(o.uuid=this.uuid,o.type=this.type,this.name!=="")o.name=this.name;if(this.castShadow===!0)o.castShadow=!0;if(this.receiveShadow===!0)o.receiveShadow=!0;if(this.visible===!1)o.visible=!1;if(this.frustumCulled===!1)o.frustumCulled=!1;if(this.renderOrder!==0)o.renderOrder=this.renderOrder;if(Object.keys(this.userData).length>0)o.userData=this.userData;if(o.layers=this.layers.mask,o.matrix=this.matrix.toArray(),o.up=this.up.toArray(),this.matrixAutoUpdate===!1)o.matrixAutoUpdate=!1;if(this.isInstancedMesh){if(o.type="InstancedMesh",o.count=this.count,o.instanceMatrix=this.instanceMatrix.toJSON(),this.instanceColor!==null)o.instanceColor=this.instanceColor.toJSON()}if(this.isBatchedMesh){if(o.type="BatchedMesh",o.perObjectFrustumCulled=this.perObjectFrustumCulled,o.sortObjects=this.sortObjects,o.drawRanges=this._drawRanges,o.reservedRanges=this._reservedRanges,o.visibility=this._visibility,o.active=this._active,o.bounds=this._bounds.map((s)=>({boxInitialized:s.boxInitialized,boxMin:s.box.min.toArray(),boxMax:s.box.max.toArray(),sphereInitialized:s.sphereInitialized,sphereRadius:s.sphere.radius,sphereCenter:s.sphere.center.toArray()})),o.maxGeometryCount=this._maxGeometryCount,o.maxVertexCount=this._maxVertexCount,o.maxIndexCount=this._maxIndexCount,o.geometryInitialized=this._geometryInitialized,o.geometryCount=this._geometryCount,o.matricesTexture=this._matricesTexture.toJSON(e),this._colorsTexture!==null)o.colorsTexture=this._colorsTexture.toJSON(e);if(this.boundingSphere!==null)o.boundingSphere={center:o.boundingSphere.center.toArray(),radius:o.boundingSphere.radius};if(this.boundingBox!==null)o.boundingBox={min:o.boundingBox.min.toArray(),max:o.boundingBox.max.toArray()}}function i(s,a){if(s[a.uuid]===void 0)s[a.uuid]=a.toJSON(e);return a.uuid}if(this.isScene){if(this.background){if(this.background.isColor)o.background=this.background.toJSON();else if(this.background.isTexture)o.background=this.background.toJSON(e).uuid}if(this.environment&&this.environment.isTexture&&this.environment.isRenderTargetTexture!==!0)o.environment=this.environment.toJSON(e).uuid}else if(this.isMesh||this.isLine||this.isPoints){o.geometry=i(e.geometries,this.geometry);let s=this.geometry.parameters;if(s!==void 0&&s.shapes!==void 0){let a=s.shapes;if(Array.isArray(a))for(let c=0,l=a.length;c<l;c++){let d=a[c];i(e.shapes,d)}else i(e.shapes,a)}}if(this.isSkinnedMesh){if(o.bindMode=this.bindMode,o.bindMatrix=this.bindMatrix.toArray(),this.skeleton!==void 0)i(e.skeletons,this.skeleton),o.skeleton=this.skeleton.uuid}if(this.material!==void 0)if(Array.isArray(this.material)){let s=[];for(let a=0,c=this.material.length;a<c;a++)s.push(i(e.materials,this.material[a]));o.material=s}else o.material=i(e.materials,this.material);if(this.children.length>0){o.children=[];for(let s=0;s<this.children.length;s++)o.children.push(this.children[s].toJSON(e).object)}if(this.animations.length>0){o.animations=[];for(let s=0;s<this.animations.length;s++){let a=this.animations[s];o.animations.push(i(e.animations,a))}}if(t){let s=r(e.geometries),a=r(e.materials),c=r(e.textures),l=r(e.images),d=r(e.shapes),u=r(e.skeletons),h=r(e.animations),A=r(e.nodes);if(s.length>0)n.geometries=s;if(a.length>0)n.materials=a;if(c.length>0)n.textures=c;if(l.length>0)n.images=l;if(d.length>0)n.shapes=d;if(u.length>0)n.skeletons=u;if(h.length>0)n.animations=h;if(A.length>0)n.nodes=A}return n.object=o,n;function r(s){let a=[];for(let c in s){let l=s[c];delete l.metadata,a.push(l)}return a}}clone(e){return new this.constructor().copy(this,e)}copy(e,t=!0){if(this.name=e.name,this.up.copy(e.up),this.position.copy(e.position),this.rotation.order=e.rotation.order,this.quaternion.copy(e.quaternion),this.scale.copy(e.scale),this.matrix.copy(e.matrix),this.matrixWorld.copy(e.matrixWorld),this.matrixAutoUpdate=e.matrixAutoUpdate,this.matrixWorldAutoUpdate=e.matrixWorldAutoUpdate,this.matrixWorldNeedsUpdate=e.matrixWorldNeedsUpdate,this.layers.mask=e.layers.mask,this.visible=e.visible,this.castShadow=e.castShadow,this.receiveShadow=e.receiveShadow,this.frustumCulled=e.frustumCulled,this.renderOrder=e.renderOrder,this.animations=e.animations.slice(),this.userData=JSON.parse(JSON.stringify(e.userData)),t===!0)for(let n=0;n<e.children.length;n++){let o=e.children[n];this.add(o.clone())}return this}}Nc.DEFAULT_UP=new bt(0,1,0);Nc.DEFAULT_MATRIX_AUTO_UPDATE=!0;Nc.DEFAULT_MATRIX_WORLD_AUTO_UPDATE=!0;var G5=new bt,YM=new bt,o9e=new bt,VM=new bt,SG=new bt,PG=new bt,Opt=new bt,i9e=new bt,r9e=new bt,s9e=new bt;class U5{constructor(e=new bt,t=new bt,n=new bt){this.a=e,this.b=t,this.c=n}static getNormal(e,t,n,o){o.subVectors(n,t),G5.subVectors(e,t),o.cross(G5);let i=o.lengthSq();if(i>0)return o.multiplyScalar(1/Math.sqrt(i));return o.set(0,0,0)}static getBarycoord(e,t,n,o,i){G5.subVectors(o,t),YM.subVectors(n,t),o9e.subVectors(e,t);let r=G5.dot(G5),s=G5.dot(YM),a=G5.dot(o9e),c=YM.dot(YM),l=YM.dot(o9e),d=r*c-s*s;if(d===0)return i.set(0,0,0),null;let u=1/d,h=(c*a-s*l)*u,A=(r*l-s*a)*u;return i.set(1-h-A,A,h)}static containsPoint(e,t,n,o){if(this.getBarycoord(e,t,n,o,VM)===null)return!1;return VM.x>=0&&VM.y>=0&&VM.x+VM.y<=1}static getInterpolation(e,t,n,o,i,r,s,a){if(this.getBarycoord(e,t,n,o,VM)===null){if(a.x=0,a.y=0,"z"in a)a.z=0;if("w"in a)a.w=0;return null}return a.setScalar(0),a.addScaledVector(i,VM.x),a.addScaledVector(r,VM.y),a.addScaledVector(s,VM.z),a}static isFrontFacing(e,t,n,o){return G5.subVectors(n,t),YM.subVectors(e,t),G5.cross(YM).dot(o)<0?!0:!1}set(e,t,n){return this.a.copy(e),this.b.copy(t),this.c.copy(n),this}setFromPointsAndIndices(e,t,n,o){return this.a.copy(e[t]),this.b.copy(e[n]),this.c.copy(e[o]),this}setFromAttributeAndIndices(e,t,n,o){return this.a.fromBufferAttribute(e,t),this.b.fromBufferAttribute(e,n),this.c.fromBufferAttribute(e,o),this}clone(){return new this.constructor().copy(this)}copy(e){return this.a.copy(e.a),this.b.copy(e.b),this.c.copy(e.c),this}getArea(){return G5.subVectors(this.c,this.b),YM.subVectors(this.a,this.b),G5.cross(YM).length()*0.5}getMidpoint(e){return e.addVectors(this.a,this.b).add(this.c).multiplyScalar(0.3333333333333333)}getNormal(e){return U5.getNormal(this.a,this.b,this.c,e)}getPlane(e){return e.setFromCoplanarPoints(this.a,this.b,this.c)}getBarycoord(e,t){return U5.getBarycoord(e,this.a,this.b,this.c,t)}getInterpolation(e,t,n,o,i){return U5.getInterpolation(e,this.a,this.b,this.c,t,n,o,i)}containsPoint(e){return U5.containsPoint(e,this.a,this.b,this.c)}isFrontFacing(e){return U5.isFrontFacing(this.a,this.b,this.c,e)}intersectsBox(e){return e.intersectsTriangle(this)}closestPointToPoint(e,t){let n=this.a,o=this.b,i=this.c,r,s;SG.subVectors(o,n),PG.subVectors(i,n),i9e.subVectors(e,n);let a=SG.dot(i9e),c=PG.dot(i9e);if(a<=0&&c<=0)return t.copy(n);r9e.subVectors(e,o);let l=SG.dot(r9e),d=PG.dot(r9e);if(l>=0&&d<=l)return t.copy(o);let u=a*d-l*c;if(u<=0&&a>=0&&l<=0)return r=a/(a-l),t.copy(n).addScaledVector(SG,r);s9e.subVectors(e,i);let h=SG.dot(s9e),A=PG.dot(s9e);if(A>=0&&h<=A)return t.copy(i);let m=h*c-a*A;if(m<=0&&c>=0&&A<=0)return s=c/(c-A),t.copy(n).addScaledVector(PG,s);let p=l*A-h*d;if(p<=0&&d-l>=0&&h-A>=0)return Opt.subVectors(i,o),s=(d-l)/(d-l+(h-A)),t.copy(o).addScaledVector(Opt,s);let g=1/(p+m+u);return r=m*g,s=u*g,t.copy(n).addScaledVector(SG,r).addScaledVector(PG,s)}equals(e){return e.a.equals(this.a)&&e.b.equals(this.b)&&e.c.equals(this.c)}}var qAt={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074},w7={h:0,s:0,l:0},Phe={h:0,s:0,l:0};function a9e(e,t,n){if(n<0)n+=1;if(n>1)n-=1;if(n<0.16666666666666666)return e+(t-e)*6*n;if(n<0.5)return t;if(n<0.6666666666666666)return e+(t-e)*6*(0.6666666666666666-n);return e}class Po{constructor(e,t,n){return this.isColor=!0,this.r=1,this.g=1,this.b=1,this.set(e,t,n)}set(e,t,n){if(t===void 0&&n===void 0){let o=e;if(o&&o.isColor)this.copy(o);else if(typeof o==="number")this.setHex(o);else if(typeof o==="string")this.setStyle(o)}else this.setRGB(e,t,n);return this}setScalar(e){return this.r=e,this.g=e,this.b=e,this}setHex(e,t="srgb"){return e=Math.floor(e),this.r=(e>>16&255)/255,this.g=(e>>8&255)/255,this.b=(e&255)/255,ed.toWorkingColorSpace(this,t),this}setRGB(e,t,n,o=ed.workingColorSpace){return this.r=e,this.g=t,this.b=n,ed.toWorkingColorSpace(this,o),this}setHSL(e,t,n,o=ed.workingColorSpace){if(e=N9e(e,1),t=Tp(t,0,1),n=Tp(n,0,1),t===0)this.r=this.g=this.b=n;else{let i=n<=0.5?n*(1+t):n+t-n*t,r=2*n-i;this.r=a9e(r,i,e+0.3333333333333333),this.g=a9e(r,i,e),this.b=a9e(r,i,e-0.3333333333333333)}return ed.toWorkingColorSpace(this,o),this}setStyle(e,t="srgb"){function n(i){if(i===void 0)return;if(parseFloat(i)<1)console.warn("THREE.Color: Alpha component of "+e+" will be ignored.")}let o;if(o=/^(\w+)\(([^\)]*)\)/.exec(e)){let i,r=o[1],s=o[2];switch(r){case"rgb":case"rgba":if(i=/^\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(s))return n(i[4]),this.setRGB(Math.min(255,parseInt(i[1],10))/255,Math.min(255,parseInt(i[2],10))/255,Math.min(255,parseInt(i[3],10))/255,t);if(i=/^\s*(\d+)\%\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(s))return n(i[4]),this.setRGB(Math.min(100,parseInt(i[1],10))/100,Math.min(100,parseInt(i[2],10))/100,Math.min(100,parseInt(i[3],10))/100,t);break;case"hsl":case"hsla":if(i=/^\s*(\d*\.?\d+)\s*,\s*(\d*\.?\d+)\%\s*,\s*(\d*\.?\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(s))return n(i[4]),this.setHSL(parseFloat(i[1])/360,parseFloat(i[2])/100,parseFloat(i[3])/100,t);break;default:console.warn("THREE.Color: Unknown color model "+e)}}else if(o=/^\#([A-Fa-f\d]+)$/.exec(e)){let i=o[1],r=i.length;if(r===3)return this.setRGB(parseInt(i.charAt(0),16)/15,parseInt(i.charAt(1),16)/15,parseInt(i.charAt(2),16)/15,t);else if(r===6)return this.setHex(parseInt(i,16),t);else console.warn("THREE.Color: Invalid hex color "+e)}else if(e&&e.length>0)return this.setColorName(e,t);return this}setColorName(e,t="srgb"){let n=qAt[e.toLowerCase()];if(n!==void 0)this.setHex(n,t);else console.warn("THREE.Color: Unknown color "+e);return this}clone(){return new this.constructor(this.r,this.g,this.b)}copy(e){return this.r=e.r,this.g=e.g,this.b=e.b,this}copySRGBToLinear(e){return this.r=LG(e.r),this.g=LG(e.g),this.b=LG(e.b),this}copyLinearToSRGB(e){return this.r=KBe(e.r),this.g=KBe(e.g),this.b=KBe(e.b),this}convertSRGBToLinear(){return this.copySRGBToLinear(this),this}convertLinearToSRGB(){return this.copyLinearToSRGB(this),this}getHex(e="srgb"){return ed.fromWorkingColorSpace(Eg.copy(this),e),Math.round(Tp(Eg.r*255,0,255))*65536+Math.round(Tp(Eg.g*255,0,255))*256+Math.round(Tp(Eg.b*255,0,255))}getHexString(e="srgb"){return("000000"+this.getHex(e).toString(16)).slice(-6)}getHSL(e,t=ed.workingColorSpace){ed.fromWorkingColorSpace(Eg.copy(this),t);let{r:n,g:o,b:i}=Eg,r=Math.max(n,o,i),s=Math.min(n,o,i),a,c,l=(s+r)/2;if(s===r)a=0,c=0;else{let d=r-s;switch(c=l<=0.5?d/(r+s):d/(2-r-s),r){case n:a=(o-i)/d+(o<i?6:0);break;case o:a=(i-n)/d+2;break;case i:a=(n-o)/d+4;break}a/=6}return e.h=a,e.s=c,e.l=l,e}getRGB(e,t=ed.workingColorSpace){return ed.fromWorkingColorSpace(Eg.copy(this),t),e.r=Eg.r,e.g=Eg.g,e.b=Eg.b,e}getStyle(e="srgb"){ed.fromWorkingColorSpace(Eg.copy(this),e);let{r:t,g:n,b:o}=Eg;if(e!=="srgb")return`color(${e} ${t.toFixed(3)} ${n.toFixed(3)} ${o.toFixed(3)})`;return`rgb(${Math.round(t*255)},${Math.round(n*255)},${Math.round(o*255)})`}offsetHSL(e,t,n){return this.getHSL(w7),this.setHSL(w7.h+e,w7.s+t,w7.l+n)}add(e){return this.r+=e.r,this.g+=e.g,this.b+=e.b,this}addColors(e,t){return this.r=e.r+t.r,this.g=e.g+t.g,this.b=e.b+t.b,this}addScalar(e){return this.r+=e,this.g+=e,this.b+=e,this}sub(e){return this.r=Math.max(0,this.r-e.r),this.g=Math.max(0,this.g-e.g),this.b=Math.max(0,this.b-e.b),this}multiply(e){return this.r*=e.r,this.g*=e.g,this.b*=e.b,this}multiplyScalar(e){return this.r*=e,this.g*=e,this.b*=e,this}lerp(e,t){return this.r+=(e.r-this.r)*t,this.g+=(e.g-this.g)*t,this.b+=(e.b-this.b)*t,this}lerpColors(e,t,n){return this.r=e.r+(t.r-e.r)*n,this.g=e.g+(t.g-e.g)*n,this.b=e.b+(t.b-e.b)*n,this}lerpHSL(e,t){this.getHSL(w7),e.getHSL(Phe);let n=YJ(w7.h,Phe.h,t),o=YJ(w7.s,Phe.s,t),i=YJ(w7.l,Phe.l,t);return this.setHSL(n,o,i),this}setFromVector3(e){return this.r=e.x,this.g=e.y,this.b=e.z,this}applyMatrix3(e){let t=this.r,n=this.g,o=this.b,i=e.elements;return this.r=i[0]*t+i[3]*n+i[6]*o,this.g=i[1]*t+i[4]*n+i[7]*o,this.b=i[2]*t+i[5]*n+i[8]*o,this}equals(e){return e.r===this.r&&e.g===this.g&&e.b===this.b}fromArray(e,t=0){return this.r=e[t],this.g=e[t+1],this.b=e[t+2],this}toArray(e=[],t=0){return e[t]=this.r,e[t+1]=this.g,e[t+2]=this.b,e}fromBufferAttribute(e,t){return this.r=e.getX(t),this.g=e.getY(t),this.b=e.getZ(t),this}toJSON(){return this.getHex()}*[Symbol.iterator](){yield this.r,yield this.g,yield this.b}}var Eg=new Po;Po.NAMES=qAt;var hoo=0;class BA extends WM{constructor(){super();this.isMaterial=!0,Object.defineProperty(this,"id",{value:hoo++}),this.uuid=lI(),this.name="",this.type="Material",this.blending=1,this.side=0,this.vertexColors=!1,this.opacity=1,this.transparent=!1,this.alphaHash=!1,this.blendSrc=204,this.blendDst=205,this.blendEquation=100,this.blendSrcAlpha=null,this.blendDstAlpha=null,this.blendEquationAlpha=null,this.blendColor=new Po(0,0,0),this.blendAlpha=0,this.depthFunc=3,this.depthTest=!0,this.depthWrite=!0,this.stencilWriteMask=255,this.stencilFunc=519,this.stencilRef=0,this.stencilFuncMask=255,this.stencilFail=7680,this.stencilZFail=7680,this.stencilZPass=7680,this.stencilWrite=!1,this.clippingPlanes=null,this.clipIntersection=!1,this.clipShadows=!1,this.shadowSide=null,this.colorWrite=!0,this.precision=null,this.polygonOffset=!1,this.polygonOffsetFactor=0,this.polygonOffsetUnits=0,this.dithering=!1,this.alphaToCoverage=!1,this.premultipliedAlpha=!1,this.forceSinglePass=!1,this.visible=!0,this.toneMapped=!0,this.userData={},this.version=0,this._alphaTest=0}get alphaTest(){return this._alphaTest}set alphaTest(e){if(this._alphaTest>0!==e>0)this.version++;this._alphaTest=e}onBuild(){}onBeforeRender(){}onBeforeCompile(){}customProgramCacheKey(){return this.onBeforeCompile.toString()}setValues(e){if(e===void 0)return;for(let t in e){let n=e[t];if(n===void 0){console.warn(`THREE.Material: parameter '${t}' has value of undefined.`);continue}let o=this[t];if(o===void 0){console.warn(`THREE.Material: '${t}' is not a property of THREE.${this.type}.`);continue}if(o&&o.isColor)o.set(n);else if(o&&o.isVector3&&(n&&n.isVector3))o.copy(n);else this[t]=n}}toJSON(e){let t=e===void 0||typeof e==="string";if(t)e={textures:{},images:{}};let n={metadata:{version:4.6,type:"Material",generator:"Material.toJSON"}};if(n.uuid=this.uuid,n.type=this.type,this.name!=="")n.name=this.name;if(this.color&&this.color.isColor)n.color=this.color.getHex();if(this.roughness!==void 0)n.roughness=this.roughness;if(this.metalness!==void 0)n.metalness=this.metalness;if(this.sheen!==void 0)n.sheen=this.sheen;if(this.sheenColor&&this.sheenColor.isColor)n.sheenColor=this.sheenColor.getHex();if(this.sheenRoughness!==void 0)n.sheenRoughness=this.sheenRoughness;if(this.emissive&&this.emissive.isColor)n.emissive=this.emissive.getHex();if(this.emissiveIntensity!==void 0&&this.emissiveIntensity!==1)n.emissiveIntensity=this.emissiveIntensity;if(this.specular&&this.specular.isColor)n.specular=this.specular.getHex();if(this.specularIntensity!==void 0)n.specularIntensity=this.specularIntensity;if(this.specularColor&&this.specularColor.isColor)n.specularColor=this.specularColor.getHex();if(this.shininess!==void 0)n.shininess=this.shininess;if(this.clearcoat!==void 0)n.clearcoat=this.clearcoat;if(this.clearcoatRoughness!==void 0)n.clearcoatRoughness=this.clearcoatRoughness;if(this.clearcoatMap&&this.clearcoatMap.isTexture)n.clearcoatMap=this.clearcoatMap.toJSON(e).uuid;if(this.clearcoatRoughnessMap&&this.clearcoatRoughnessMap.isTexture)n.clearcoatRoughnessMap=this.clearcoatRoughnessMap.toJSON(e).uuid;if(this.clearcoatNormalMap&&this.clearcoatNormalMap.isTexture)n.clearcoatNormalMap=this.clearcoatNormalMap.toJSON(e).uuid,n.clearcoatNormalScale=this.clearcoatNormalScale.toArray();if(this.dispersion!==void 0)n.dispersion=this.dispersion;if(this.iridescence!==void 0)n.iridescence=this.iridescence;if(this.iridescenceIOR!==void 0)n.iridescenceIOR=this.iridescenceIOR;if(this.iridescenceThicknessRange!==void 0)n.iridescenceThicknessRange=this.iridescenceThicknessRange;if(this.iridescenceMap&&this.iridescenceMap.isTexture)n.iridescenceMap=this.iridescenceMap.toJSON(e).uuid;if(this.iridescenceThicknessMap&&this.iridescenceThicknessMap.isTexture)n.iridescenceThicknessMap=this.iridescenceThicknessMap.toJSON(e).uuid;if(this.anisotropy!==void 0)n.anisotropy=this.anisotropy;if(this.anisotropyRotation!==void 0)n.anisotropyRotation=this.anisotropyRotation;if(this.anisotropyMap&&this.anisotropyMap.isTexture)n.anisotropyMap=this.anisotropyMap.toJSON(e).uuid;if(this.map&&this.map.isTexture)n.map=this.map.toJSON(e).uuid;if(this.matcap&&this.matcap.isTexture)n.matcap=this.matcap.toJSON(e).uuid;if(this.alphaMap&&this.alphaMap.isTexture)n.alphaMap=this.alphaMap.toJSON(e).uuid;if(this.lightMap&&this.lightMap.isTexture)n.lightMap=this.lightMap.toJSON(e).uuid,n.lightMapIntensity=this.lightMapIntensity;if(this.aoMap&&this.aoMap.isTexture)n.aoMap=this.aoMap.toJSON(e).uuid,n.aoMapIntensity=this.aoMapIntensity;if(this.bumpMap&&this.bumpMap.isTexture)n.bumpMap=this.bumpMap.toJSON(e).uuid,n.bumpScale=this.bumpScale;if(this.normalMap&&this.normalMap.isTexture)n.normalMap=this.normalMap.toJSON(e).uuid,n.normalMapType=this.normalMapType,n.normalScale=this.normalScale.toArray();if(this.displacementMap&&this.displacementMap.isTexture)n.displacementMap=this.displacementMap.toJSON(e).uuid,n.displacementScale=this.displacementScale,n.displacementBias=this.displacementBias;if(this.roughnessMap&&this.roughnessMap.isTexture)n.roughnessMap=this.roughnessMap.toJSON(e).uuid;if(this.metalnessMap&&this.metalnessMap.isTexture)n.metalnessMap=this.metalnessMap.toJSON(e).uuid;if(this.emissiveMap&&this.emissiveMap.isTexture)n.emissiveMap=this.emissiveMap.toJSON(e).uuid;if(this.specularMap&&this.specularMap.isTexture)n.specularMap=this.specularMap.toJSON(e).uuid;if(this.specularIntensityMap&&this.specularIntensityMap.isTexture)n.specularIntensityMap=this.specularIntensityMap.toJSON(e).uuid;if(this.specularColorMap&&this.specularColorMap.isTexture)n.specularColorMap=this.specularColorMap.toJSON(e).uuid;if(this.envMap&&this.envMap.isTexture){if(n.envMap=this.envMap.toJSON(e).uuid,this.combine!==void 0)n.combine=this.combine}if(this.envMapRotation!==void 0)n.envMapRotation=this.envMapRotation.toArray();if(this.envMapIntensity!==void 0)n.envMapIntensity=this.envMapIntensity;if(this.reflectivity!==void 0)n.reflectivity=this.reflectivity;if(this.refractionRatio!==void 0)n.refractionRatio=this.refractionRatio;if(this.gradientMap&&this.gradientMap.isTexture)n.gradientMap=this.gradientMap.toJSON(e).uuid;if(this.transmission!==void 0)n.transmission=this.transmission;if(this.transmissionMap&&this.transmissionMap.isTexture)n.transmissionMap=this.transmissionMap.toJSON(e).uuid;if(this.thickness!==void 0)n.thickness=this.thickness;if(this.thicknessMap&&this.thicknessMap.isTexture)n.thicknessMap=this.thicknessMap.toJSON(e).uuid;if(this.attenuationDistance!==void 0&&this.attenuationDistance!==1/0)n.attenuationDistance=this.attenuationDistance;if(this.attenuationColor!==void 0)n.attenuationColor=this.attenuationColor.getHex();if(this.size!==void 0)n.size=this.size;if(this.shadowSide!==null)n.shadowSide=this.shadowSide;if(this.sizeAttenuation!==void 0)n.sizeAttenuation=this.sizeAttenuation;if(this.blending!==1)n.blending=this.blending;if(this.side!==0)n.side=this.side;if(this.vertexColors===!0)n.vertexColors=!0;if(this.opacity<1)n.opacity=this.opacity;if(this.transparent===!0)n.transparent=!0;if(this.blendSrc!==204)n.blendSrc=this.blendSrc;if(this.blendDst!==205)n.blendDst=this.blendDst;if(this.blendEquation!==100)n.blendEquation=this.blendEquation;if(this.blendSrcAlpha!==null)n.blendSrcAlpha=this.blendSrcAlpha;if(this.blendDstAlpha!==null)n.blendDstAlpha=this.blendDstAlpha;if(this.blendEquationAlpha!==null)n.blendEquationAlpha=this.blendEquationAlpha;if(this.blendColor&&this.blendColor.isColor)n.blendColor=this.blendColor.getHex();if(this.blendAlpha!==0)n.blendAlpha=this.blendAlpha;if(this.depthFunc!==3)n.depthFunc=this.depthFunc;if(this.depthTest===!1)n.depthTest=this.depthTest;if(this.depthWrite===!1)n.depthWrite=this.depthWrite;if(this.colorWrite===!1)n.colorWrite=this.colorWrite;if(this.stencilWriteMask!==255)n.stencilWriteMask=this.stencilWriteMask;if(this.stencilFunc!==519)n.stencilFunc=this.stencilFunc;if(this.stencilRef!==0)n.stencilRef=this.stencilRef;if(this.stencilFuncMask!==255)n.stencilFuncMask=this.stencilFuncMask;if(this.stencilFail!==7680)n.stencilFail=this.stencilFail;if(this.stencilZFail!==7680)n.stencilZFail=this.stencilZFail;if(this.stencilZPass!==7680)n.stencilZPass=this.stencilZPass;if(this.stencilWrite===!0)n.stencilWrite=this.stencilWrite;if(this.rotation!==void 0&&this.rotation!==0)n.rotation=this.rotation;if(this.polygonOffset===!0)n.polygonOffset=!0;if(this.polygonOffsetFactor!==0)n.polygonOffsetFactor=this.polygonOffsetFactor;if(this.polygonOffsetUnits!==0)n.polygonOffsetUnits=this.polygonOffsetUnits;if(this.linewidth!==void 0&&this.linewidth!==1)n.linewidth=this.linewidth;if(this.dashSize!==void 0)n.dashSize=this.dashSize;if(this.gapSize!==void 0)n.gapSize=this.gapSize;if(this.scale!==void 0)n.scale=this.scale;if(this.dithering===!0)n.dithering=!0;if(this.alphaTest>0)n.alphaTest=this.alphaTest;if(this.alphaHash===!0)n.alphaHash=!0;if(this.alphaToCoverage===!0)n.alphaToCoverage=!0;if(this.premultipliedAlpha===!0)n.premultipliedAlpha=!0;if(this.forceSinglePass===!0)n.forceSinglePass=!0;if(this.wireframe===!0)n.wireframe=!0;if(this.wireframeLinewidth>1)n.wireframeLinewidth=this.wireframeLinewidth;if(this.wireframeLinecap!=="round")n.wireframeLinecap=this.wireframeLinecap;if(this.wireframeLinejoin!=="round")n.wireframeLinejoin=this.wireframeLinejoin;if(this.flatShading===!0)n.flatShading=!0;if(this.visible===!1)n.visible=!1;if(this.toneMapped===!1)n.toneMapped=!1;if(this.fog===!1)n.fog=!1;if(Object.keys(this.userData).length>0)n.userData=this.userData;function o(i){let r=[];for(let s in i){let a=i[s];delete a.metadata,r.push(a)}return r}if(t){let i=o(e.textures),r=o(e.images);if(i.length>0)n.textures=i;if(r.length>0)n.images=r}return n}clone(){return new this.constructor().copy(this)}copy(e){this.name=e.name,this.blending=e.blending,this.side=e.side,this.vertexColors=e.vertexColors,this.opacity=e.opacity,this.transparent=e.transparent,this.blendSrc=e.blendSrc,this.blendDst=e.blendDst,this.blendEquation=e.blendEquation,this.blendSrcAlpha=e.blendSrcAlpha,this.blendDstAlpha=e.blendDstAlpha,this.blendEquationAlpha=e.blendEquationAlpha,this.blendColor.copy(e.blendColor),this.blendAlpha=e.blendAlpha,this.depthFunc=e.depthFunc,this.depthTest=e.depthTest,this.depthWrite=e.depthWrite,this.stencilWriteMask=e.stencilWriteMask,this.stencilFunc=e.stencilFunc,this.stencilRef=e.stencilRef,this.stencilFuncMask=e.stencilFuncMask,this.stencilFail=e.stencilFail,this.stencilZFail=e.stencilZFail,this.stencilZPass=e.stencilZPass,this.stencilWrite=e.stencilWrite;let t=e.clippingPlanes,n=null;if(t!==null){let o=t.length;n=Array(o);for(let i=0;i!==o;++i)n[i]=t[i].clone()}return this.clippingPlanes=n,this.clipIntersection=e.clipIntersection,this.clipShadows=e.clipShadows,this.shadowSide=e.shadowSide,this.colorWrite=e.colorWrite,this.precision=e.precision,this.polygonOffset=e.polygonOffset,this.polygonOffsetFactor=e.polygonOffsetFactor,this.polygonOffsetUnits=e.polygonOffsetUnits,this.dithering=e.dithering,this.alphaTest=e.alphaTest,this.alphaHash=e.alphaHash,this.alphaToCoverage=e.alphaToCoverage,this.premultipliedAlpha=e.premultipliedAlpha,this.forceSinglePass=e.forceSinglePass,this.visible=e.visible,this.toneMapped=e.toneMapped,this.userData=JSON.parse(JSON.stringify(e.userData)),this}dispose(){this.dispatchEvent({type:"dispose"})}set needsUpdate(e){if(e===!0)this.version++}}class wA extends BA{constructor(e){super();this.isMeshBasicMaterial=!0,this.type="MeshBasicMaterial",this.color=new Po(16777215),this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.specularMap=null,this.alphaMap=null,this.envMap=null,this.envMapRotation=new MA,this.combine=0,this.reflectivity=1,this.refractionRatio=0.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap="round",this.wireframeLinejoin="round",this.fog=!0,this.setValues(e)}copy(e){return super.copy(e),this.color.copy(e.color),this.map=e.map,this.lightMap=e.lightMap,this.lightMapIntensity=e.lightMapIntensity,this.aoMap=e.aoMap,this.aoMapIntensity=e.aoMapIntensity,this.specularMap=e.specularMap,this.alphaMap=e.alphaMap,this.envMap=e.envMap,this.envMapRotation.copy(e.envMapRotation),this.combine=e.combine,this.reflectivity=e.reflectivity,this.refractionRatio=e.refractionRatio,this.wireframe=e.wireframe,this.wireframeLinewidth=e.wireframeLinewidth,this.wireframeLinecap=e.wireframeLinecap,this.wireframeLinejoin=e.wireframeLinejoin,this.fog=e.fog,this}}var Qm=new bt,vhe=new ro;class Rc{constructor(e,t,n=!1){if(Array.isArray(e))throw TypeError("THREE.BufferAttribute: array should be a Typed Array.");this.isBufferAttribute=!0,this.name="",this.array=e,this.itemSize=t,this.count=e!==void 0?e.length/t:0,this.normalized=n,this.usage=35044,this._updateRange={offset:0,count:-1},this.updateRanges=[],this.gpuType=1015,this.version=0}onUploadCallback(){}set needsUpdate(e){if(e===!0)this.version++}get updateRange(){return R9e("THREE.BufferAttribute: updateRange() is deprecated and will be removed in r169. Use addUpdateRange() instead."),this._updateRange}setUsage(e){return this.usage=e,this}addUpdateRange(e,t){this.updateRanges.push({start:e,count:t})}clearUpdateRanges(){this.updateRanges.length=0}copy(e){return this.name=e.name,this.array=new e.array.constructor(e.array),this.itemSize=e.itemSize,this.count=e.count,this.normalized=e.normalized,this.usage=e.usage,this.gpuType=e.gpuType,this}copyAt(e,t,n){e*=this.itemSize,n*=t.itemSize;for(let o=0,i=this.itemSize;o<i;o++)this.array[e+o]=t.array[n+o];return this}copyArray(e){return this.array.set(e),this}applyMatrix3(e){if(this.itemSize===2)for(let t=0,n=this.count;t<n;t++)vhe.fromBufferAttribute(this,t),vhe.applyMatrix3(e),this.setXY(t,vhe.x,vhe.y);else if(this.itemSize===3)for(let t=0,n=this.count;t<n;t++)Qm.fromBufferAttribute(this,t),Qm.applyMatrix3(e),this.setXYZ(t,Qm.x,Qm.y,Qm.z);return this}applyMatrix4(e){for(let t=0,n=this.count;t<n;t++)Qm.fromBufferAttribute(this,t),Qm.applyMatrix4(e),this.setXYZ(t,Qm.x,Qm.y,Qm.z);return this}applyNormalMatrix(e){for(let t=0,n=this.count;t<n;t++)Qm.fromBufferAttribute(this,t),Qm.applyNormalMatrix(e),this.setXYZ(t,Qm.x,Qm.y,Qm.z);return this}transformDirection(e){for(let t=0,n=this.count;t<n;t++)Qm.fromBufferAttribute(this,t),Qm.transformDirection(e),this.setXYZ(t,Qm.x,Qm.y,Qm.z);return this}set(e,t=0){return this.array.set(e,t),this}getComponent(e,t){let n=this.array[e*this.itemSize+t];if(this.normalized)n=V5(n,this.array);return n}setComponent(e,t,n){if(this.normalized)n=Zl(n,this.array);return this.array[e*this.itemSize+t]=n,this}getX(e){let t=this.array[e*this.itemSize];if(this.normalized)t=V5(t,this.array);return t}setX(e,t){if(this.normalized)t=Zl(t,this.array);return this.array[e*this.itemSize]=t,this}getY(e){let t=this.array[e*this.itemSize+1];if(this.normalized)t=V5(t,this.array);return t}setY(e,t){if(this.normalized)t=Zl(t,this.array);return this.array[e*this.itemSize+1]=t,this}getZ(e){let t=this.array[e*this.itemSize+2];if(this.normalized)t=V5(t,this.array);return t}setZ(e,t){if(this.normalized)t=Zl(t,this.array);return this.array[e*this.itemSize+2]=t,this}getW(e){let t=this.array[e*this.itemSize+3];if(this.normalized)t=V5(t,this.array);return t}setW(e,t){if(this.normalized)t=Zl(t,this.array);return this.array[e*this.itemSize+3]=t,this}setXY(e,t,n){if(e*=this.itemSize,this.normalized)t=Zl(t,this.array),n=Zl(n,this.array);return this.array[e+0]=t,this.array[e+1]=n,this}setXYZ(e,t,n,o){if(e*=this.itemSize,this.normalized)t=Zl(t,this.array),n=Zl(n,this.array),o=Zl(o,this.array);return this.array[e+0]=t,this.array[e+1]=n,this.array[e+2]=o,this}setXYZW(e,t,n,o,i){if(e*=this.itemSize,this.normalized)t=Zl(t,this.array),n=Zl(n,this.array),o=Zl(o,this.array),i=Zl(i,this.array);return this.array[e+0]=t,this.array[e+1]=n,this.array[e+2]=o,this.array[e+3]=i,this}onUpload(e){return this.onUploadCallback=e,this}clone(){return new this.constructor(this.array,this.itemSize).copy(this)}toJSON(){let e={itemSize:this.itemSize,type:this.array.constructor.name,array:Array.from(this.array),normalized:this.normalized};if(this.name!=="")e.name=this.name;if(this.usage!==35044)e.usage=this.usage;return e}}class L9e extends Rc{constructor(e,t,n){super(new Uint16Array(e),t,n)}}class n$ extends Rc{constructor(e,t,n){super(new Uint32Array(e),t,n)}}class Hi extends Rc{constructor(e,t,n){super(new Float32Array(e),t,n)}}var moo=0,cI=new Pr,c9e=new Nc,vG=new bt,ox=new tm,LJ=new tm,EA=new bt;class zs extends WM{constructor(){super();this.isBufferGeometry=!0,Object.defineProperty(this,"id",{value:moo++}),this.uuid=lI(),this.name="",this.type="BufferGeometry",this.index=null,this.attributes={},this.morphAttributes={},this.morphTargetsRelative=!1,this.groups=[],this.boundingBox=null,this.boundingSphere=null,this.drawRange={start:0,count:1/0},this.userData={}}getIndex(){return this.index}setIndex(e){if(Array.isArray(e))this.index=new((WAt(e))?n$:L9e)(e,1);else this.index=e;return this}getAttribute(e){return this.attributes[e]}setAttribute(e,t){return this.attributes[e]=t,this}deleteAttribute(e){return delete this.attributes[e],this}hasAttribute(e){return this.attributes[e]!==void 0}addGroup(e,t,n=0){this.groups.push({start:e,count:t,materialIndex:n})}clearGroups(){this.groups=[]}setDrawRange(e,t){this.drawRange.start=e,this.drawRange.count=t}applyMatrix4(e){let t=this.attributes.position;if(t!==void 0)t.applyMatrix4(e),t.needsUpdate=!0;let n=this.attributes.normal;if(n!==void 0){let i=new aa().getNormalMatrix(e);n.applyNormalMatrix(i),n.needsUpdate=!0}let o=this.attributes.tangent;if(o!==void 0)o.transformDirection(e),o.needsUpdate=!0;if(this.boundingBox!==null)this.computeBoundingBox();if(this.boundingSphere!==null)this.computeBoundingSphere();return this}applyQuaternion(e){return cI.makeRotationFromQuaternion(e),this.applyMatrix4(cI),this}rotateX(e){return cI.makeRotationX(e),this.applyMatrix4(cI),this}rotateY(e){return cI.makeRotationY(e),this.applyMatrix4(cI),this}rotateZ(e){return cI.makeRotationZ(e),this.applyMatrix4(cI),this}translate(e,t,n){return cI.makeTranslation(e,t,n),this.applyMatrix4(cI),this}scale(e,t,n){return cI.makeScale(e,t,n),this.applyMatrix4(cI),this}lookAt(e){return c9e.lookAt(e),c9e.updateMatrix(),this.applyMatrix4(c9e.matrix),this}center(){return this.computeBoundingBox(),this.boundingBox.getCenter(vG).negate(),this.translate(vG.x,vG.y,vG.z),this}setFromPoints(e){let t=[];for(let n=0,o=e.length;n<o;n++){let i=e[n];t.push(i.x,i.y,i.z||0)}return this.setAttribute("position",new Hi(t,3)),this}computeBoundingBox(){if(this.boundingBox===null)this.boundingBox=new tm;let e=this.attributes.position,t=this.morphAttributes.position;if(e&&e.isGLBufferAttribute){console.error("THREE.BufferGeometry.computeBoundingBox(): GLBufferAttribute requires a manual bounding box.",this),this.boundingBox.set(new bt(-1/0,-1/0,-1/0),new bt(1/0,1/0,1/0));return}if(e!==void 0){if(this.boundingBox.setFromBufferAttribute(e),t)for(let n=0,o=t.length;n<o;n++){let i=t[n];if(ox.setFromBufferAttribute(i),this.morphTargetsRelative)EA.addVectors(this.boundingBox.min,ox.min),this.boundingBox.expandByPoint(EA),EA.addVectors(this.boundingBox.max,ox.max),this.boundingBox.expandByPoint(EA);else this.boundingBox.expandByPoint(ox.min),this.boundingBox.expandByPoint(ox.max)}}else this.boundingBox.makeEmpty();if(isNaN(this.boundingBox.min.x)||isNaN(this.boundingBox.min.y)||isNaN(this.boundingBox.min.z))console.error('THREE.BufferGeometry.computeBoundingBox(): Computed min/max have NaN values. The "position" attribute is likely to have NaN values.',this)}computeBoundingSphere(){if(this.boundingSphere===null)this.boundingSphere=new py;let e=this.attributes.position,t=this.morphAttributes.position;if(e&&e.isGLBufferAttribute){console.error("THREE.BufferGeometry.computeBoundingSphere(): GLBufferAttribute requires a manual bounding sphere.",this),this.boundingSphere.set(new bt,1/0);return}if(e){let n=this.boundingSphere.center;if(ox.setFromBufferAttribute(e),t)for(let i=0,r=t.length;i<r;i++){let s=t[i];if(LJ.setFromBufferAttribute(s),this.morphTargetsRelative)EA.addVectors(ox.min,LJ.min),ox.expandByPoint(EA),EA.addVectors(ox.max,LJ.max),ox.expandByPoint(EA);else ox.expandByPoint(LJ.min),ox.expandByPoint(LJ.max)}ox.getCenter(n);let o=0;for(let i=0,r=e.count;i<r;i++)EA.fromBufferAttribute(e,i),o=Math.max(o,n.distanceToSquared(EA));if(t)for(let i=0,r=t.length;i<r;i++){let s=t[i],a=this.morphTargetsRelative;for(let c=0,l=s.count;c<l;c++){if(EA.fromBufferAttribute(s,c),a)vG.fromBufferAttribute(e,c),EA.add(vG);o=Math.max(o,n.distanceToSquared(EA))}}if(this.boundingSphere.radius=Math.sqrt(o),isNaN(this.boundingSphere.radius))console.error('THREE.BufferGeometry.computeBoundingSphere(): Computed radius is NaN. The "position" attribute is likely to have NaN values.',this)}}computeTangents(){let e=this.index,t=this.attributes;if(e===null||t.position===void 0||t.normal===void 0||t.uv===void 0){console.error("THREE.BufferGeometry: .computeTangents() failed. Missing required attributes (index, position, normal or uv)");return}let{position:n,normal:o,uv:i}=t;if(this.hasAttribute("tangent")===!1)this.setAttribute("tangent",new Rc(new Float32Array(4*n.count),4));let r=this.getAttribute("tangent"),s=[],a=[];for(let b=0;b<n.count;b++)s[b]=new bt,a[b]=new bt;let c=new bt,l=new bt,d=new bt,u=new ro,h=new ro,A=new ro,m=new bt,p=new bt;function g(b,P,E){c.fromBufferAttribute(n,b),l.fromBufferAttribute(n,P),d.fromBufferAttribute(n,E),u.fromBufferAttribute(i,b),h.fromBufferAttribute(i,P),A.fromBufferAttribute(i,E),l.sub(c),d.sub(c),h.sub(u),A.sub(u);let B=1/(h.x*A.y-A.x*h.y);if(!isFinite(B))return;m.copy(l).multiplyScalar(A.y).addScaledVector(d,-h.y).multiplyScalar(B),p.copy(d).multiplyScalar(h.x).addScaledVector(l,-A.x).multiplyScalar(B),s[b].add(m),s[P].add(m),s[E].add(m),a[b].add(p),a[P].add(p),a[E].add(p)}let _=this.groups;if(_.length===0)_=[{start:0,count:e.count}];for(let b=0,P=_.length;b<P;++b){let E=_[b],{start:B,count:w}=E;for(let T=B,Q=B+w;T<Q;T+=3)g(e.getX(T+0),e.getX(T+1),e.getX(T+2))}let f=new bt,y=new bt,x=new bt,C=new bt;function I(b){x.fromBufferAttribute(o,b),C.copy(x);let P=s[b];f.copy(P),f.sub(x.multiplyScalar(x.dot(P))).normalize(),y.crossVectors(C,P);let B=y.dot(a[b])<0?-1:1;r.setXYZW(b,f.x,f.y,f.z,B)}for(let b=0,P=_.length;b<P;++b){let E=_[b],{start:B,count:w}=E;for(let T=B,Q=B+w;T<Q;T+=3)I(e.getX(T+0)),I(e.getX(T+1)),I(e.getX(T+2))}}computeVertexNormals(){let e=this.index,t=this.getAttribute("position");if(t!==void 0){let n=this.getAttribute("normal");if(n===void 0)n=new Rc(new Float32Array(t.count*3),3),this.setAttribute("normal",n);else for(let u=0,h=n.count;u<h;u++)n.setXYZ(u,0,0,0);let o=new bt,i=new bt,r=new bt,s=new bt,a=new bt,c=new bt,l=new bt,d=new bt;if(e)for(let u=0,h=e.count;u<h;u+=3){let A=e.getX(u+0),m=e.getX(u+1),p=e.getX(u+2);o.fromBufferAttribute(t,A),i.fromBufferAttribute(t,m),r.fromBufferAttribute(t,p),l.subVectors(r,i),d.subVectors(o,i),l.cross(d),s.fromBufferAttribute(n,A),a.fromBufferAttribute(n,m),c.fromBufferAttribute(n,p),s.add(l),a.add(l),c.add(l),n.setXYZ(A,s.x,s.y,s.z),n.setXYZ(m,a.x,a.y,a.z),n.setXYZ(p,c.x,c.y,c.z)}else for(let u=0,h=t.count;u<h;u+=3)o.fromBufferAttribute(t,u+0),i.fromBufferAttribute(t,u+1),r.fromBufferAttribute(t,u+2),l.subVectors(r,i),d.subVectors(o,i),l.cross(d),n.setXYZ(u+0,l.x,l.y,l.z),n.setXYZ(u+1,l.x,l.y,l.z),n.setXYZ(u+2,l.x,l.y,l.z);this.normalizeNormals(),n.needsUpdate=!0}}normalizeNormals(){let e=this.attributes.normal;for(let t=0,n=e.count;t<n;t++)EA.fromBufferAttribute(e,t),EA.normalize(),e.setXYZ(t,EA.x,EA.y,EA.z)}toNonIndexed(){function e(s,a){let{array:c,itemSize:l,normalized:d}=s,u=new c.constructor(a.length*l),h=0,A=0;for(let m=0,p=a.length;m<p;m++){if(s.isInterleavedBufferAttribute)h=a[m]*s.data.stride+s.offset;else h=a[m]*l;for(let g=0;g<l;g++)u[A++]=c[h++]}return new Rc(u,l,d)}if(this.index===null)return console.warn("THREE.BufferGeometry.toNonIndexed(): BufferGeometry is already non-indexed."),this;let t=new zs,n=this.index.array,o=this.attributes;for(let s in o){let a=o[s],c=e(a,n);t.setAttribute(s,c)}let i=this.morphAttributes;for(let s in i){let a=[],c=i[s];for(let l=0,d=c.length;l<d;l++){let u=c[l],h=e(u,n);a.push(h)}t.morphAttributes[s]=a}t.morphTargetsRelative=this.morphTargetsRelative;let r=this.groups;for(let s=0,a=r.length;s<a;s++){let c=r[s];t.addGroup(c.start,c.count,c.materialIndex)}return t}toJSON(){let e={metadata:{version:4.6,type:"BufferGeometry",generator:"BufferGeometry.toJSON"}};if(e.uuid=this.uuid,e.type=this.type,this.name!=="")e.name=this.name;if(Object.keys(this.userData).length>0)e.userData=this.userData;if(this.parameters!==void 0){let a=this.parameters;for(let c in a)if(a[c]!==void 0)e[c]=a[c];return e}e.data={attributes:{}};let t=this.index;if(t!==null)e.data.index={type:t.array.constructor.name,array:Array.prototype.slice.call(t.array)};let n=this.attributes;for(let a in n){let c=n[a];e.data.attributes[a]=c.toJSON(e.data)}let o={},i=!1;for(let a in this.morphAttributes){let c=this.morphAttributes[a],l=[];for(let d=0,u=c.length;d<u;d++){let h=c[d];l.push(h.toJSON(e.data))}if(l.length>0)o[a]=l,i=!0}if(i)e.data.morphAttributes=o,e.data.morphTargetsRelative=this.morphTargetsRelative;let r=this.groups;if(r.length>0)e.data.groups=JSON.parse(JSON.stringify(r));let s=this.boundingSphere;if(s!==null)e.data.boundingSphere={center:s.center.toArray(),radius:s.radius};return e}clone(){return new this.constructor().copy(this)}copy(e){this.index=null,this.attributes={},this.morphAttributes={},this.groups=[],this.boundingBox=null,this.boundingSphere=null;let t={};this.name=e.name;let n=e.index;if(n!==null)this.setIndex(n.clone(t));let o=e.attributes;for(let c in o){let l=o[c];this.setAttribute(c,l.clone(t))}let i=e.morphAttributes;for(let c in i){let l=[],d=i[c];for(let u=0,h=d.length;u<h;u++)l.push(d[u].clone(t));this.morphAttributes[c]=l}this.morphTargetsRelative=e.morphTargetsRelative;let r=e.groups;for(let c=0,l=r.length;c<l;c++){let d=r[c];this.addGroup(d.start,d.count,d.materialIndex)}let s=e.boundingBox;if(s!==null)this.boundingBox=s.clone();let a=e.boundingSphere;if(a!==null)this.boundingSphere=a.clone();return this.drawRange.start=e.drawRange.start,this.drawRange.count=e.drawRange.count,this.userData=e.userData,this}dispose(){this.dispatchEvent({type:"dispose"})}}var zpt=new Pr,cQ=new L7,Ehe=new py,Gpt=new bt,EG=new bt,MG=new bt,BG=new bt,l9e=new bt,Mhe=new bt,Bhe=new ro,whe=new ro,The=new ro,Ypt=new bt,Vpt=new bt,Upt=new bt,Dhe=new bt,Nhe=new bt;class Mo extends Nc{constructor(e=new zs,t=new wA){super();this.isMesh=!0,this.type="Mesh",this.geometry=e,this.material=t,this.updateMorphTargets()}copy(e,t){if(super.copy(e,t),e.morphTargetInfluences!==void 0)this.morphTargetInfluences=e.morphTargetInfluences.slice();if(e.morphTargetDictionary!==void 0)this.morphTargetDictionary=Object.assign({},e.morphTargetDictionary);return this.material=Array.isArray(e.material)?e.material.slice():e.material,this.geometry=e.geometry,this}updateMorphTargets(){let t=this.geometry.morphAttributes,n=Object.keys(t);if(n.length>0){let o=t[n[0]];if(o!==void 0){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let i=0,r=o.length;i<r;i++){let s=o[i].name||String(i);this.morphTargetInfluences.push(0),this.morphTargetDictionary[s]=i}}}}getVertexPosition(e,t){let n=this.geometry,o=n.attributes.position,i=n.morphAttributes.position,r=n.morphTargetsRelative;t.fromBufferAttribute(o,e);let s=this.morphTargetInfluences;if(i&&s){Mhe.set(0,0,0);for(let a=0,c=i.length;a<c;a++){let l=s[a],d=i[a];if(l===0)continue;if(l9e.fromBufferAttribute(d,e),r)Mhe.addScaledVector(l9e,l);else Mhe.addScaledVector(l9e.sub(t),l)}t.add(Mhe)}return t}raycast(e,t){let n=this.geometry,o=this.material,i=this.matrixWorld;if(o===void 0)return;if(n.boundingSphere===null)n.computeBoundingSphere();if(Ehe.copy(n.boundingSphere),Ehe.applyMatrix4(i),cQ.copy(e.ray).recast(e.near),Ehe.containsPoint(cQ.origin)===!1){if(cQ.intersectSphere(Ehe,Gpt)===null)return;if(cQ.origin.distanceToSquared(Gpt)>(e.far-e.near)**2)return}if(zpt.copy(i).invert(),cQ.copy(e.ray).applyMatrix4(zpt),n.boundingBox!==null){if(cQ.intersectsBox(n.boundingBox)===!1)return}this._computeIntersections(e,t,cQ)}_computeIntersections(e,t,n){let o,i=this.geometry,r=this.material,s=i.index,a=i.attributes.position,c=i.attributes.uv,l=i.attributes.uv1,d=i.attributes.normal,{groups:u,drawRange:h}=i;if(s!==null)if(Array.isArray(r))for(let A=0,m=u.length;A<m;A++){let p=u[A],g=r[p.materialIndex],_=Math.max(p.start,h.start),f=Math.min(s.count,Math.min(p.start+p.count,h.start+h.count));for(let y=_,x=f;y<x;y+=3){let C=s.getX(y),I=s.getX(y+1),b=s.getX(y+2);if(o=Rhe(this,g,e,n,c,l,d,C,I,b),o)o.faceIndex=Math.floor(y/3),o.face.materialIndex=p.materialIndex,t.push(o)}}else{let A=Math.max(0,h.start),m=Math.min(s.count,h.start+h.count);for(let p=A,g=m;p<g;p+=3){let _=s.getX(p),f=s.getX(p+1),y=s.getX(p+2);if(o=Rhe(this,r,e,n,c,l,d,_,f,y),o)o.faceIndex=Math.floor(p/3),t.push(o)}}else if(a!==void 0)if(Array.isArray(r))for(let A=0,m=u.length;A<m;A++){let p=u[A],g=r[p.materialIndex],_=Math.max(p.start,h.start),f=Math.min(a.count,Math.min(p.start+p.count,h.start+h.count));for(let y=_,x=f;y<x;y+=3){let C=y,I=y+1,b=y+2;if(o=Rhe(this,g,e,n,c,l,d,C,I,b),o)o.faceIndex=Math.floor(y/3),o.face.materialIndex=p.materialIndex,t.push(o)}}else{let A=Math.max(0,h.start),m=Math.min(a.count,h.start+h.count);for(let p=A,g=m;p<g;p+=3){let _=p,f=p+1,y=p+2;if(o=Rhe(this,r,e,n,c,l,d,_,f,y),o)o.faceIndex=Math.floor(p/3),t.push(o)}}}}function poo(e,t,n,o,i,r,s,a){let c;if(t.side===1)c=o.intersectTriangle(s,r,i,!0,a);else c=o.intersectTriangle(i,r,s,t.side===0,a);if(c===null)return null;Nhe.copy(a),Nhe.applyMatrix4(e.matrixWorld);let l=n.ray.origin.distanceTo(Nhe);if(l<n.near||l>n.far)return null;return{distance:l,point:Nhe.clone(),object:e}}function Rhe(e,t,n,o,i,r,s,a,c,l){e.getVertexPosition(a,EG),e.getVertexPosition(c,MG),e.getVertexPosition(l,BG);let d=poo(e,t,n,o,EG,MG,BG,Dhe);if(d){if(i)Bhe.fromBufferAttribute(i,a),whe.fromBufferAttribute(i,c),The.fromBufferAttribute(i,l),d.uv=U5.getInterpolation(Dhe,EG,MG,BG,Bhe,whe,The,new ro);if(r)Bhe.fromBufferAttribute(r,a),whe.fromBufferAttribute(r,c),The.fromBufferAttribute(r,l),d.uv1=U5.getInterpolation(Dhe,EG,MG,BG,Bhe,whe,The,new ro);if(s){if(Ypt.fromBufferAttribute(s,a),Vpt.fromBufferAttribute(s,c),Upt.fromBufferAttribute(s,l),d.normal=U5.getInterpolation(Dhe,EG,MG,BG,Ypt,Vpt,Upt,new bt),d.normal.dot(o.direction)>0)d.normal.multiplyScalar(-1)}let u={a,b:c,c:l,normal:new bt,materialIndex:0};U5.getNormal(EG,MG,BG,u.normal),d.face=u}return d}class km extends zs{constructor(e=1,t=1,n=1,o=1,i=1,r=1){super();this.type="BoxGeometry",this.parameters={width:e,height:t,depth:n,widthSegments:o,heightSegments:i,depthSegments:r};let s=this;o=Math.floor(o),i=Math.floor(i),r=Math.floor(r);let a=[],c=[],l=[],d=[],u=0,h=0;A("z","y","x",-1,-1,n,t,e,r,i,0),A("z","y","x",1,-1,n,t,-e,r,i,1),A("x","z","y",1,1,e,n,t,o,r,2),A("x","z","y",1,-1,e,n,-t,o,r,3),A("x","y","z",1,-1,e,t,n,o,i,4),A("x","y","z",-1,-1,e,t,-n,o,i,5),this.setIndex(a),this.setAttribute("position",new Hi(c,3)),this.setAttribute("normal",new Hi(l,3)),this.setAttribute("uv",new Hi(d,2));function A(m,p,g,_,f,y,x,C,I,b,P){let E=y/I,B=x/b,w=y/2,T=x/2,Q=C/2,N=I+1,F=b+1,H=0,z=0,Y=new bt;for(let U=0;U<F;U++){let X=U*B-T;for(let V=0;V<N;V++){let W=V*E-w;Y[m]=W*_,Y[p]=X*f,Y[g]=Q,c.push(Y.x,Y.y,Y.z),Y[m]=0,Y[p]=0,Y[g]=C>0?1:-1,l.push(Y.x,Y.y,Y.z),d.push(V/I),d.push(1-U/b),H+=1}}for(let U=0;U<b;U++)for(let X=0;X<I;X++){let V=u+X+N*U,W=u+X+N*(U+1),j=u+(X+1)+N*(U+1),q=u+(X+1)+N*U;a.push(V,W,q),a.push(W,j,q),z+=6}s.addGroup(h,z,P),h+=z,u+=H}}copy(e){return super.copy(e),this.parameters=Object.assign({},e.parameters),this}static fromJSON(e){return new km(e.width,e.height,e.depth,e.widthSegments,e.heightSegments,e.depthSegments)}}function HG(e){let t={};for(let n in e){t[n]={};for(let o in e[n]){let i=e[n][o];if(i&&(i.isColor||i.isMatrix3||i.isMatrix4||i.isVector2||i.isVector3||i.isVector4||i.isTexture||i.isQuaternion))if(i.isRenderTargetTexture)console.warn("UniformsUtils: Textures of render targets cannot be cloned via cloneUniforms() or mergeUniforms()."),t[n][o]=null;else t[n][o]=i.clone();else if(Array.isArray(i))t[n][o]=i.slice();else t[n][o]=i}}return t}function Wf(e){let t={};for(let n=0;n<e.length;n++){let o=HG(e[n]);for(let i in o)t[i]=o[i]}return t}function Aoo(e){let t=[];for(let n=0;n<e.length;n++)t.push(e[n].clone());return t}function JAt(e){let t=e.getRenderTarget();if(t===null)return e.outputColorSpace;if(t.isXRRenderTarget===!0)return t.texture.colorSpace;return ed.workingColorSpace}var F9e={clone:HG,merge:Wf},_oo=`void main() {
gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
}`,goo=`void main() {
gl_FragColor = vec4( 1.0, 0.0, 0.0, 1.0 );
}`;class ix extends BA{constructor(e){super();if(this.isShaderMaterial=!0,this.type="ShaderMaterial",this.defines={},this.uniforms={},this.uniformsGroups=[],this.vertexShader=_oo,this.fragmentShader=goo,this.linewidth=1,this.wireframe=!1,this.wireframeLinewidth=1,this.fog=!1,this.lights=!1,this.clipping=!1,this.forceSinglePass=!0,this.extensions={clipCullDistance:!1,multiDraw:!1},this.defaultAttributeValues={color:[1,1,1],uv:[0,0],uv1:[0,0]},this.index0AttributeName=void 0,this.uniformsNeedUpdate=!1,this.glslVersion=null,e!==void 0)this.setValues(e)}copy(e){return super.copy(e),this.fragmentShader=e.fragmentShader,this.vertexShader=e.vertexShader,this.uniforms=HG(e.uniforms),this.uniformsGroups=Aoo(e.uniformsGroups),this.defines=Object.assign({},e.defines),this.wireframe=e.wireframe,this.wireframeLinewidth=e.wireframeLinewidth,this.fog=e.fog,this.lights=e.lights,this.clipping=e.clipping,this.extensions=Object.assign({},e.extensions),this.glslVersion=e.glslVersion,this}toJSON(e){let t=super.toJSON(e);t.glslVersion=this.glslVersion,t.uniforms={};for(let o in this.uniforms){let r=this.uniforms[o].value;if(r&&r.isTexture)t.uniforms[o]={type:"t",value:r.toJSON(e).uuid};else if(r&&r.isColor)t.uniforms[o]={type:"c",value:r.getHex()};else if(r&&r.isVector2)t.uniforms[o]={type:"v2",value:r.toArray()};else if(r&&r.isVector3)t.uniforms[o]={type:"v3",value:r.toArray()};else if(r&&r.isVector4)t.uniforms[o]={type:"v4",value:r.toArray()};else if(r&&r.isMatrix3)t.uniforms[o]={type:"m3",value:r.toArray()};else if(r&&r.isMatrix4)t.uniforms[o]={type:"m4",value:r.toArray()};else t.uniforms[o]={value:r}}if(Object.keys(this.defines).length>0)t.defines=this.defines;t.vertexShader=this.vertexShader,t.fragmentShader=this.fragmentShader,t.lights=this.lights,t.clipping=this.clipping;let n={};for(let o in this.extensions)if(this.extensions[o]===!0)n[o]=!0;if(Object.keys(n).length>0)t.extensions=n;return t}}class H9e extends Nc{constructor(){super();this.isCamera=!0,this.type="Camera",this.matrixWorldInverse=new Pr,this.projectionMatrix=new Pr,this.projectionMatrixInverse=new Pr,this.coordinateSystem=2000}copy(e,t){return super.copy(e,t),this.matrixWorldInverse.copy(e.matrixWorldInverse),this.projectionMatrix.copy(e.projectionMatrix),this.projectionMatrixInverse.copy(e.projectionMatrixInverse),this.coordinateSystem=e.coordinateSystem,this}getWorldDirection(e){return super.getWorldDirection(e).negate()}updateMatrixWorld(e){super.updateMatrixWorld(e),this.matrixWorldInverse.copy(this.matrixWorld).invert()}updateWorldMatrix(e,t){super.updateWorldMatrix(e,t),this.matrixWorldInverse.copy(this.matrixWorld).invert()}clone(){return new this.constructor().copy(this)}}var T7=new bt,Wpt=new ro,Xpt=new ro;class rl extends H9e{constructor(e=50,t=1,n=0.1,o=2000){super();this.isPerspectiveCamera=!0,this.type="PerspectiveCamera",this.fov=e,this.zoom=1,this.near=n,this.far=o,this.focus=10,this.aspect=t,this.view=null,this.filmGauge=35,this.filmOffset=0,this.updateProjectionMatrix()}copy(e,t){return super.copy(e,t),this.fov=e.fov,this.zoom=e.zoom,this.near=e.near,this.far=e.far,this.focus=e.focus,this.aspect=e.aspect,this.view=e.view===null?null:Object.assign({},e.view),this.filmGauge=e.filmGauge,this.filmOffset=e.filmOffset,this}setFocalLength(e){let t=0.5*this.getFilmHeight()/e;this.fov=FG*2*Math.atan(t),this.updateProjectionMatrix()}getFocalLength(){let e=Math.tan(kG*0.5*this.fov);return 0.5*this.getFilmHeight()/e}getEffectiveFOV(){return FG*2*Math.atan(Math.tan(kG*0.5*this.fov)/this.zoom)}getFilmWidth(){return this.filmGauge*Math.min(this.aspect,1)}getFilmHeight(){return this.filmGauge/Math.max(this.aspect,1)}getViewBounds(e,t,n){T7.set(-1,-1,0.5).applyMatrix4(this.projectionMatrixInverse),t.set(T7.x,T7.y).multiplyScalar(-e/T7.z),T7.set(1,1,0.5).applyMatrix4(this.projectionMatrixInverse),n.set(T7.x,T7.y).multiplyScalar(-e/T7.z)}getViewSize(e,t){return this.getViewBounds(e,Wpt,Xpt),t.subVectors(Xpt,Wpt)}setViewOffset(e,t,n,o,i,r){if(this.aspect=e/t,this.view===null)this.view={enabled:!0,fullWidth:1,fullHeight:1,offsetX:0,offsetY:0,width:1,height:1};this.view.enabled=!0,this.view.fullWidth=e,this.view.fullHeight=t,this.view.offsetX=n,this.view.offsetY=o,this.view.width=i,this.view.height=r,this.updateProjectionMatrix()}clearViewOffset(){if(this.view!==null)this.view.enabled=!1;this.updateProjectionMatrix()}updateProjectionMatrix(){let e=this.near,t=e*Math.tan(kG*0.5*this.fov)/this.zoom,n=2*t,o=this.aspect*n,i=-0.5*o,r=this.view;if(this.view!==null&&this.view.enabled){let{fullWidth:a,fullHeight:c}=r;i+=r.offsetX*o/a,t-=r.offsetY*n/c,o*=r.width/a,n*=r.height/c}let s=this.filmOffset;if(s!==0)i+=e*s/this.getFilmWidth();this.projectionMatrix.makePerspective(i,i+o,t,t-n,e,this.far,this.coordinateSystem),this.projectionMatrixInverse.copy(this.projectionMatrix).invert()}toJSON(e){let t=super.toJSON(e);if(t.object.fov=this.fov,t.object.zoom=this.zoom,t.object.near=this.near,t.object.far=this.far,t.object.focus=this.focus,t.object.aspect=this.aspect,this.view!==null)t.object.view=Object.assign({},this.view);return t.object.filmGauge=this.filmGauge,t.object.filmOffset=this.filmOffset,t}}var wG=-90,TG=1;class $At extends Nc{constructor(e,t,n){super();this.type="CubeCamera",this.renderTarget=n,this.coordinateSystem=null,this.activeMipmapLevel=0;let o=new rl(wG,TG,e,t);o.layers=this.layers,this.add(o);let i=new rl(wG,TG,e,t);i.layers=this.layers,this.add(i);let r=new rl(wG,TG,e,t);r.layers=this.layers,this.add(r);let s=new rl(wG,TG,e,t);s.layers=this.layers,this.add(s);let a=new rl(wG,TG,e,t);a.layers=this.layers,this.add(a);let c=new rl(wG,TG,e,t);c.layers=this.layers,this.add(c)}updateCoordinateSystem(){let e=this.coordinateSystem,t=this.children.concat(),[n,o,i,r,s,a]=t;for(let c of t)this.remove(c);if(e===2000)n.up.set(0,1,0),n.lookAt(1,0,0),o.up.set(0,1,0),o.lookAt(-1,0,0),i.up.set(0,0,-1),i.lookAt(0,1,0),r.up.set(0,0,1),r.lookAt(0,-1,0),s.up.set(0,1,0),s.lookAt(0,0,1),a.up.set(0,1,0),a.lookAt(0,0,-1);else if(e===2001)n.up.set(0,-1,0),n.lookAt(-1,0,0),o.up.set(0,-1,0),o.lookAt(1,0,0),i.up.set(0,0,1),i.lookAt(0,1,0),r.up.set(0,0,-1),r.lookAt(0,-1,0),s.up.set(0,-1,0),s.lookAt(0,0,1),a.up.set(0,-1,0),a.lookAt(0,0,-1);else throw Error("THREE.CubeCamera.updateCoordinateSystem(): Invalid coordinate system: "+e);for(let c of t)this.add(c),c.updateMatrixWorld()}update(e,t){if(this.parent===null)this.updateMatrixWorld();let{renderTarget:n,activeMipmapLevel:o}=this;if(this.coordinateSystem!==e.coordinateSystem)this.coordinateSystem=e.coordinateSystem,this.updateCoordinateSystem();let[i,r,s,a,c,l]=this.children,d=e.getRenderTarget(),u=e.getActiveCubeFace(),h=e.getActiveMipmapLevel(),A=e.xr.enabled;e.xr.enabled=!1;let m=n.texture.generateMipmaps;n.texture.generateMipmaps=!1,e.setRenderTarget(n,0,o),e.render(t,i),e.setRenderTarget(n,1,o),e.render(t,r),e.setRenderTarget(n,2,o),e.render(t,s),e.setRenderTarget(n,3,o),e.render(t,a),e.setRenderTarget(n,4,o),e.render(t,c),n.texture.generateMipmaps=m,e.setRenderTarget(n,5,o),e.render(t,l),e.setRenderTarget(d,u,h),e.xr.enabled=A,n.texture.needsPMREMUpdate=!0}}class O9e extends sl{constructor(e,t,n,o,i,r,s,a,c,l){e=e!==void 0?e:[],t=t!==void 0?t:301;super(e,t,n,o,i,r,s,a,c,l);this.isCubeTexture=!0,this.flipY=!1}get images(){return this.image}set images(e){this.image=e}}class ZAt extends N7{constructor(e=1,t={}){super(e,e,t);this.isWebGLCubeRenderTarget=!0;let n={width:e,height:e,depth:1},o=[n,n,n,n,n,n];this.texture=new O9e(o,t.mapping,t.wrapS,t.wrapT,t.magFilter,t.minFilter,t.format,t.type,t.anisotropy,t.colorSpace),this.texture.isRenderTargetTexture=!0,this.texture.generateMipmaps=t.generateMipmaps!==void 0?t.generateMipmaps:!1,this.texture.minFilter=t.minFilter!==void 0?t.minFilter:1006}fromEquirectangularTexture(e,t){this.texture.type=t.type,this.texture.colorSpace=t.colorSpace,this.texture.generateMipmaps=t.generateMipmaps,this.texture.minFilter=t.minFilter,this.texture.magFilter=t.magFilter;let n={uniforms:{tEquirect:{value:null}},vertexShader:`
varying vec3 vWorldDirection;
vec3 transformDirection( in vec3 dir, in mat4 matrix ) {
return normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );
}
void main() {
vWorldDirection = transformDirection( position, modelMatrix );
#include <begin_vertex>
#include <project_vertex>
}
`,fragmentShader:`
uniform sampler2D tEquirect;
varying vec3 vWorldDirection;
#include <common>
void main() {
vec3 direction = normalize( vWorldDirection );
vec2 sampleUV = equirectUv( direction );
gl_FragColor = texture2D( tEquirect, sampleUV );
}
`},o=new km(5,5,5),i=new ix({name:"CubemapFromEquirect",uniforms:HG(n.uniforms),vertexShader:n.vertexShader,fragmentShader:n.fragmentShader,side:1,blending:0});i.uniforms.tEquirect.value=t;let r=new Mo(o,i),s=t.minFilter;if(t.minFilter===1008)t.minFilter=1006;return new $At(1,10,this).update(e,r),t.minFilter=s,r.geometry.dispose(),r.material.dispose(),this}clear(e,t,n,o){let i=e.getRenderTarget();for(let r=0;r<6;r++)e.setRenderTarget(this,r),e.clear(t,n,o);e.setRenderTarget(i)}}var d9e=new bt,foo=new bt,yoo=new aa;class Gv{constructor(e=new bt(1,0,0),t=0){this.isPlane=!0,this.normal=e,this.constant=t}set(e,t){return this.normal.copy(e),this.constant=t,this}setComponents(e,t,n,o){return this.normal.set(e,t,n),this.constant=o,this}setFromNormalAndCoplanarPoint(e,t){return this.normal.copy(e),this.constant=-t.dot(this.normal),this}setFromCoplanarPoints(e,t,n){let o=d9e.subVectors(n,t).cross(foo.subVectors(e,t)).normalize();return this.setFromNormalAndCoplanarPoint(o,e),this}copy(e){return this.normal.copy(e.normal),this.constant=e.constant,this}normalize(){let e=1/this.normal.length();return this.normal.multiplyScalar(e),this.constant*=e,this}negate(){return this.constant*=-1,this.normal.negate(),this}distanceToPoint(e){return this.normal.dot(e)+this.constant}distanceToSphere(e){return this.distanceToPoint(e.center)-e.radius}projectPoint(e,t){return t.copy(e).addScaledVector(this.normal,-this.distanceToPoint(e))}intersectLine(e,t){let n=e.delta(d9e),o=this.normal.dot(n);if(o===0){if(this.distanceToPoint(e.start)===0)return t.copy(e.start);return null}let i=-(e.start.dot(this.normal)+this.constant)/o;if(i<0||i>1)return null;return t.copy(e.start).addScaledVector(n,i)}intersectsLine(e){let t=this.distanceToPoint(e.start),n=this.distanceToPoint(e.end);return t<0&&n>0||n<0&&t>0}intersectsBox(e){return e.intersectsPlane(this)}intersectsSphere(e){return e.intersectsPlane(this)}coplanarPoint(e){return e.copy(this.normal).multiplyScalar(-this.constant)}applyMatrix4(e,t){let n=t||yoo.getNormalMatrix(e),o=this.coplanarPoint(d9e).applyMatrix4(e),i=this.normal.applyMatrix3(n).normalize();return this.constant=-o.dot(i),this}translate(e){return this.constant-=e.dot(this.normal),this}equals(e){return e.normal.equals(this.normal)&&e.constant===this.constant}clone(){return new this.constructor().copy(this)}}var lQ=new py,Qhe=new bt;class l0e{constructor(e=new Gv,t=new Gv,n=new Gv,o=new Gv,i=new Gv,r=new Gv){this.planes=[e,t,n,o,i,r]}set(e,t,n,o,i,r){let s=this.planes;return s[0].copy(e),s[1].copy(t),s[2].copy(n),s[3].copy(o),s[4].copy(i),s[5].copy(r),this}copy(e){let t=this.planes;for(let n=0;n<6;n++)t[n].copy(e.planes[n]);return this}setFromProjectionMatrix(e,t=2000){let n=this.planes,o=e.elements,i=o[0],r=o[1],s=o[2],a=o[3],c=o[4],l=o[5],d=o[6],u=o[7],h=o[8],A=o[9],m=o[10],p=o[11],g=o[12],_=o[13],f=o[14],y=o[15];if(n[0].setComponents(a-i,u-c,p-h,y-g).normalize(),n[1].setComponents(a+i,u+c,p+h,y+g).normalize(),n[2].setComponents(a+r,u+l,p+A,y+_).normalize(),n[3].setComponents(a-r,u-l,p-A,y-_).normalize(),n[4].setComponents(a-s,u-d,p-m,y-f).normalize(),t===2000)n[5].setComponents(a+s,u+d,p+m,y+f).normalize();else if(t===2001)n[5].setComponents(s,d,m,f).normalize();else throw Error("THREE.Frustum.setFromProjectionMatrix(): Invalid coordinate system: "+t);return this}intersectsObject(e){if(e.boundingSphere!==void 0){if(e.boundingSphere===null)e.computeBoundingSphere();lQ.copy(e.boundingSphere).applyMatrix4(e.matrixWorld)}else{let t=e.geometry;if(t.boundingSphere===null)t.computeBoundingSphere();lQ.copy(t.boundingSphere).applyMatrix4(e.matrixWorld)}return this.intersectsSphere(lQ)}intersectsSprite(e){return lQ.center.set(0,0,0),lQ.radius=0.7071067811865476,lQ.applyMatrix4(e.matrixWorld),this.intersectsSphere(lQ)}intersectsSphere(e){let t=this.planes,n=e.center,o=-e.radius;for(let i=0;i<6;i++)if(t[i].distanceToPoint(n)<o)return!1;return!0}intersectsBox(e){let t=this.planes;for(let n=0;n<6;n++){let o=t[n];if(Qhe.x=o.normal.x>0?e.max.x:e.min.x,Qhe.y=o.normal.y>0?e.max.y:e.min.y,Qhe.z=o.normal.z>0?e.max.z:e.min.z,o.distanceToPoint(Qhe)<0)return!1}return!0}containsPoint(e){let t=this.planes;for(let n=0;n<6;n++)if(t[n].distanceToPoint(e)<0)return!1;return!0}clone(){return new this.constructor().copy(this)}}function e_t(){let e=null,t=!1,n=null,o=null;function i(r,s){n(r,s),o=e.requestAnimationFrame(i)}return{start:function(){if(t===!0)return;if(n===null)return;o=e.requestAnimationFrame(i),t=!0},stop:function(){e.cancelAnimationFrame(o),t=!1},setAnimationLoop:function(r){n=r},setContext:function(r){e=r}}}function xoo(e){let t=new WeakMap;function n(a,c){let{array:l,usage:d}=a,u=l.byteLength,h=e.createBuffer();e.bindBuffer(c,h),e.bufferData(c,l,d),a.onUploadCallback();let A;if(l instanceof Float32Array)A=e.FLOAT;else if(l instanceof Uint16Array)if(a.isFloat16BufferAttribute)A=e.HALF_FLOAT;else A=e.UNSIGNED_SHORT;else if(l instanceof Int16Array)A=e.SHORT;else if(l instanceof Uint32Array)A=e.UNSIGNED_INT;else if(l instanceof Int32Array)A=e.INT;else if(l instanceof Int8Array)A=e.BYTE;else if(l instanceof Uint8Array)A=e.UNSIGNED_BYTE;else if(l instanceof Uint8ClampedArray)A=e.UNSIGNED_BYTE;else throw Error("THREE.WebGLAttributes: Unsupported buffer data format: "+l);return{buffer:h,type:A,bytesPerElement:l.BYTES_PER_ELEMENT,version:a.version,size:u}}function o(a,c,l){let{array:d,_updateRange:u,updateRanges:h}=c;if(e.bindBuffer(l,a),u.count===-1&&h.length===0)e.bufferSubData(l,0,d);if(h.length!==0){for(let A=0,m=h.length;A<m;A++){let p=h[A];e.bufferSubData(l,p.start*d.BYTES_PER_ELEMENT,d,p.start,p.count)}c.clearUpdateRanges()}if(u.count!==-1)e.bufferSubData(l,u.offset*d.BYTES_PER_ELEMENT,d,u.offset,u.count),u.count=-1;c.onUploadCallback()}function i(a){if(a.isInterleavedBufferAttribute)a=a.data;return t.get(a)}function r(a){if(a.isInterleavedBufferAttribute)a=a.data;let c=t.get(a);if(c)e.deleteBuffer(c.buffer),t.delete(a)}function s(a,c){if(a.isGLBufferAttribute){let d=t.get(a);if(!d||d.version<a.version)t.set(a,{buffer:a.buffer,type:a.type,bytesPerElement:a.elementSize,version:a.version});return}if(a.isInterleavedBufferAttribute)a=a.data;let l=t.get(a);if(l===void 0)t.set(a,n(a,c));else if(l.version<a.version){if(l.size!==a.array.byteLength)throw Error("THREE.WebGLAttributes: The size of the buffer attribute's array buffer does not match the original size. Resizing buffer attributes is not supported.");o(l.buffer,a,c),l.version=a.version}}return{get:i,remove:r,update:s}}class Mg extends zs{constructor(e=1,t=1,n=1,o=1){super();this.type="PlaneGeometry",this.parameters={width:e,height:t,widthSegments:n,heightSegments:o};let i=e/2,r=t/2,s=Math.floor(n),a=Math.floor(o),c=s+1,l=a+1,d=e/s,u=t/a,h=[],A=[],m=[],p=[];for(let g=0;g<l;g++){let _=g*u-r;for(let f=0;f<c;f++){let y=f*d-i;A.push(y,-_,0),m.push(0,0,1),p.push(f/s),p.push(1-g/a)}}for(let g=0;g<a;g++)for(let _=0;_<s;_++){let f=_+c*g,y=_+c*(g+1),x=_+1+c*(g+1),C=_+1+c*g;h.push(f,y,C),h.push(y,x,C)}this.setIndex(h),this.setAttribute("position",new Hi(A,3)),this.setAttribute("normal",new Hi(m,3)),this.setAttribute("uv",new Hi(p,2))}copy(e){return super.copy(e),this.parameters=Object.assign({},e.parameters),this}static fromJSON(e){return new Mg(e.width,e.height,e.widthSegments,e.heightSegments)}}var Coo=`#ifdef USE_ALPHAHASH
if ( diffuseColor.a < getAlphaHashThreshold( vPosition ) ) discard;
#endif`,Ioo=`#ifdef USE_ALPHAHASH
const float ALPHA_HASH_SCALE = 0.05;
float hash2D( vec2 value ) {
return fract( 1.0e4 * sin( 17.0 * value.x + 0.1 * value.y ) * ( 0.1 + abs( sin( 13.0 * value.y + value.x ) ) ) );
}
float hash3D( vec3 value ) {
return hash2D( vec2( hash2D( value.xy ), value.z ) );
}
float getAlphaHashThreshold( vec3 position ) {
float maxDeriv = max(
length( dFdx( position.xyz ) ),
length( dFdy( position.xyz ) )
);
float pixScale = 1.0 / ( ALPHA_HASH_SCALE * maxDeriv );
vec2 pixScales = vec2(
exp2( floor( log2( pixScale ) ) ),
exp2( ceil( log2( pixScale ) ) )
);
vec2 alpha = vec2(
hash3D( floor( pixScales.x * position.xyz ) ),
hash3D( floor( pixScales.y * position.xyz ) )
);
float lerpFactor = fract( log2( pixScale ) );
float x = ( 1.0 - lerpFactor ) * alpha.x + lerpFactor * alpha.y;
float a = min( lerpFactor, 1.0 - lerpFactor );
vec3 cases = vec3(
x * x / ( 2.0 * a * ( 1.0 - a ) ),
( x - 0.5 * a ) / ( 1.0 - a ),
1.0 - ( ( 1.0 - x ) * ( 1.0 - x ) / ( 2.0 * a * ( 1.0 - a ) ) )
);
float threshold = ( x < ( 1.0 - a ) )
? ( ( x < a ) ? cases.x : cases.y )
: cases.z;
return clamp( threshold , 1.0e-6, 1.0 );
}
#endif`,boo=`#ifdef USE_ALPHAMAP
diffuseColor.a *= texture2D( alphaMap, vAlphaMapUv ).g;
#endif`,Soo=`#ifdef USE_ALPHAMAP
uniform sampler2D alphaMap;
#endif`,Poo=`#ifdef USE_ALPHATEST
#ifdef ALPHA_TO_COVERAGE
diffuseColor.a = smoothstep( alphaTest, alphaTest + fwidth( diffuseColor.a ), diffuseColor.a );
if ( diffuseColor.a == 0.0 ) discard;
#else
if ( diffuseColor.a < alphaTest ) discard;
#endif
#endif`,voo=`#ifdef USE_ALPHATEST
uniform float alphaTest;
#endif`,Eoo=`#ifdef USE_AOMAP
float ambientOcclusion = ( texture2D( aoMap, vAoMapUv ).r - 1.0 ) * aoMapIntensity + 1.0;
reflectedLight.indirectDiffuse *= ambientOcclusion;
#if defined( USE_CLEARCOAT )
clearcoatSpecularIndirect *= ambientOcclusion;
#endif
#if defined( USE_SHEEN )
sheenSpecularIndirect *= ambientOcclusion;
#endif
#if defined( USE_ENVMAP ) && defined( STANDARD )
float dotNV = saturate( dot( geometryNormal, geometryViewDir ) );
reflectedLight.indirectSpecular *= computeSpecularOcclusion( dotNV, ambientOcclusion, material.roughness );
#endif
#endif`,Moo=`#ifdef USE_AOMAP
uniform sampler2D aoMap;
uniform float aoMapIntensity;
#endif`,Boo=`#ifdef USE_BATCHING
attribute float batchId;
uniform highp sampler2D batchingTexture;
mat4 getBatchingMatrix( const in float i ) {
int size = textureSize( batchingTexture, 0 ).x;
int j = int( i ) * 4;
int x = j % size;
int y = j / size;
vec4 v1 = texelFetch( batchingTexture, ivec2( x, y ), 0 );
vec4 v2 = texelFetch( batchingTexture, ivec2( x + 1, y ), 0 );
vec4 v3 = texelFetch( batchingTexture, ivec2( x + 2, y ), 0 );
vec4 v4 = texelFetch( batchingTexture, ivec2( x + 3, y ), 0 );
return mat4( v1, v2, v3, v4 );
}
#endif
#ifdef USE_BATCHING_COLOR
uniform sampler2D batchingColorTexture;
vec3 getBatchingColor( const in float i ) {
int size = textureSize( batchingColorTexture, 0 ).x;
int j = int( i );
int x = j % size;
int y = j / size;
return texelFetch( batchingColorTexture, ivec2( x, y ), 0 ).rgb;
}
#endif`,woo=`#ifdef USE_BATCHING
mat4 batchingMatrix = getBatchingMatrix( batchId );
#endif`,Too=`vec3 transformed = vec3( position );
#ifdef USE_ALPHAHASH
vPosition = vec3( position );
#endif`,Doo=`vec3 objectNormal = vec3( normal );
#ifdef USE_TANGENT
vec3 objectTangent = vec3( tangent.xyz );
#endif`,Noo=`float G_BlinnPhong_Implicit( ) {
return 0.25;
}
float D_BlinnPhong( const in float shininess, const in float dotNH ) {
return RECIPROCAL_PI * ( shininess * 0.5 + 1.0 ) * pow( dotNH, shininess );
}
vec3 BRDF_BlinnPhong( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, const in vec3 specularColor, const in float shininess ) {
vec3 halfDir = normalize( lightDir + viewDir );
float dotNH = saturate( dot( normal, halfDir ) );
float dotVH = saturate( dot( viewDir, halfDir ) );
vec3 F = F_Schlick( specularColor, 1.0, dotVH );
float G = G_BlinnPhong_Implicit( );
float D = D_BlinnPhong( shininess, dotNH );
return F * ( G * D );
} // validated`,Roo=`#ifdef USE_IRIDESCENCE
const mat3 XYZ_TO_REC709 = mat3(
3.2404542, -0.9692660, 0.0556434,
-1.5371385, 1.8760108, -0.2040259,
-0.4985314, 0.0415560, 1.0572252
);
vec3 Fresnel0ToIor( vec3 fresnel0 ) {
vec3 sqrtF0 = sqrt( fresnel0 );
return ( vec3( 1.0 ) + sqrtF0 ) / ( vec3( 1.0 ) - sqrtF0 );
}
vec3 IorToFresnel0( vec3 transmittedIor, float incidentIor ) {
return pow2( ( transmittedIor - vec3( incidentIor ) ) / ( transmittedIor + vec3( incidentIor ) ) );
}
float IorToFresnel0( float transmittedIor, float incidentIor ) {
return pow2( ( transmittedIor - incidentIor ) / ( transmittedIor + incidentIor ));
}
vec3 evalSensitivity( float OPD, vec3 shift ) {
float phase = 2.0 * PI * OPD * 1.0e-9;
vec3 val = vec3( 5.4856e-13, 4.4201e-13, 5.2481e-13 );
vec3 pos = vec3( 1.6810e+06, 1.7953e+06, 2.2084e+06 );
vec3 var = vec3( 4.3278e+09, 9.3046e+09, 6.6121e+09 );
vec3 xyz = val * sqrt( 2.0 * PI * var ) * cos( pos * phase + shift ) * exp( - pow2( phase ) * var );
xyz.x += 9.7470e-14 * sqrt( 2.0 * PI * 4.5282e+09 ) * cos( 2.2399e+06 * phase + shift[ 0 ] ) * exp( - 4.5282e+09 * pow2( phase ) );
xyz /= 1.0685e-7;
vec3 rgb = XYZ_TO_REC709 * xyz;
return rgb;
}
vec3 evalIridescence( float outsideIOR, float eta2, float cosTheta1, float thinFilmThickness, vec3 baseF0 ) {
vec3 I;
float iridescenceIOR = mix( outsideIOR, eta2, smoothstep( 0.0, 0.03, thinFilmThickness ) );
float sinTheta2Sq = pow2( outsideIOR / iridescenceIOR ) * ( 1.0 - pow2( cosTheta1 ) );
float cosTheta2Sq = 1.0 - sinTheta2Sq;
if ( cosTheta2Sq < 0.0 ) {
return vec3( 1.0 );
}
float cosTheta2 = sqrt( cosTheta2Sq );
float R0 = IorToFresnel0( iridescenceIOR, outsideIOR );
float R12 = F_Schlick( R0, 1.0, cosTheta1 );
float T121 = 1.0 - R12;
float phi12 = 0.0;
if ( iridescenceIOR < outsideIOR ) phi12 = PI;
float phi21 = PI - phi12;
vec3 baseIOR = Fresnel0ToIor( clamp( baseF0, 0.0, 0.9999 ) ); vec3 R1 = IorToFresnel0( baseIOR, iridescenceIOR );
vec3 R23 = F_Schlick( R1, 1.0, cosTheta2 );
vec3 phi23 = vec3( 0.0 );
if ( baseIOR[ 0 ] < iridescenceIOR ) phi23[ 0 ] = PI;
if ( baseIOR[ 1 ] < iridescenceIOR ) phi23[ 1 ] = PI;
if ( baseIOR[ 2 ] < iridescenceIOR ) phi23[ 2 ] = PI;
float OPD = 2.0 * iridescenceIOR * thinFilmThickness * cosTheta2;
vec3 phi = vec3( phi21 ) + phi23;
vec3 R123 = clamp( R12 * R23, 1e-5, 0.9999 );
vec3 r123 = sqrt( R123 );
vec3 Rs = pow2( T121 ) * R23 / ( vec3( 1.0 ) - R123 );
vec3 C0 = R12 + Rs;
I = C0;
vec3 Cm = Rs - T121;
for ( int m = 1; m <= 2; ++ m ) {
Cm *= r123;
vec3 Sm = 2.0 * evalSensitivity( float( m ) * OPD, float( m ) * phi );
I += Cm * Sm;
}
return max( I, vec3( 0.0 ) );
}
#endif`,Qoo=`#ifdef USE_BUMPMAP
uniform sampler2D bumpMap;
uniform float bumpScale;
vec2 dHdxy_fwd() {
vec2 dSTdx = dFdx( vBumpMapUv );
vec2 dSTdy = dFdy( vBumpMapUv );
float Hll = bumpScale * texture2D( bumpMap, vBumpMapUv ).x;
float dBx = bumpScale * texture2D( bumpMap, vBumpMapUv + dSTdx ).x - Hll;
float dBy = bumpScale * texture2D( bumpMap, vBumpMapUv + dSTdy ).x - Hll;
return vec2( dBx, dBy );
}
vec3 perturbNormalArb( vec3 surf_pos, vec3 surf_norm, vec2 dHdxy, float faceDirection ) {
vec3 vSigmaX = normalize( dFdx( surf_pos.xyz ) );
vec3 vSigmaY = normalize( dFdy( surf_pos.xyz ) );
vec3 vN = surf_norm;
vec3 R1 = cross( vSigmaY, vN );
vec3 R2 = cross( vN, vSigmaX );
float fDet = dot( vSigmaX, R1 ) * faceDirection;
vec3 vGrad = sign( fDet ) * ( dHdxy.x * R1 + dHdxy.y * R2 );
return normalize( abs( fDet ) * surf_norm - vGrad );
}
#endif`,koo=`#if NUM_CLIPPING_PLANES > 0
vec4 plane;
#ifdef ALPHA_TO_COVERAGE
float distanceToPlane, distanceGradient;
float clipOpacity = 1.0;
#pragma unroll_loop_start
for ( int i = 0; i < UNION_CLIPPING_PLANES; i ++ ) {
plane = clippingPlanes[ i ];
distanceToPlane = - dot( vClipPosition, plane.xyz ) + plane.w;
distanceGradient = fwidth( distanceToPlane ) / 2.0;
clipOpacity *= smoothstep( - distanceGradient, distanceGradient, distanceToPlane );
if ( clipOpacity == 0.0 ) discard;
}
#pragma unroll_loop_end
#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES
float unionClipOpacity = 1.0;
#pragma unroll_loop_start
for ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; i ++ ) {
plane = clippingPlanes[ i ];
distanceToPlane = - dot( vClipPosition, plane.xyz ) + plane.w;
distanceGradient = fwidth( distanceToPlane ) / 2.0;
unionClipOpacity *= 1.0 - smoothstep( - distanceGradient, distanceGradient, distanceToPlane );
}
#pragma unroll_loop_end
clipOpacity *= 1.0 - unionClipOpacity;
#endif
diffuseColor.a *= clipOpacity;
if ( diffuseColor.a == 0.0 ) discard;
#else
#pragma unroll_loop_start
for ( int i = 0; i < UNION_CLIPPING_PLANES; i ++ ) {
plane = clippingPlanes[ i ];
if ( dot( vClipPosition, plane.xyz ) > plane.w ) discard;
}
#pragma unroll_loop_end
#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES
bool clipped = true;
#pragma unroll_loop_start
for ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; i ++ ) {
plane = clippingPlanes[ i ];
clipped = ( dot( vClipPosition, plane.xyz ) > plane.w ) && clipped;
}
#pragma unroll_loop_end
if ( clipped ) discard;
#endif
#endif
#endif`,Loo=`#if NUM_CLIPPING_PLANES > 0
varying vec3 vClipPosition;
uniform vec4 clippingPlanes[ NUM_CLIPPING_PLANES ];
#endif`,Foo=`#if NUM_CLIPPING_PLANES > 0
varying vec3 vClipPosition;
#endif`,Hoo=`#if NUM_CLIPPING_PLANES > 0
vClipPosition = - mvPosition.xyz;
#endif`,Ooo=`#if defined( USE_COLOR_ALPHA )
diffuseColor *= vColor;
#elif defined( USE_COLOR )
diffuseColor.rgb *= vColor;
#endif`,zoo=`#if defined( USE_COLOR_ALPHA )
varying vec4 vColor;
#elif defined( USE_COLOR )
varying vec3 vColor;
#endif`,Goo=`#if defined( USE_COLOR_ALPHA )
varying vec4 vColor;
#elif defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR ) || defined( USE_BATCHING_COLOR )
varying vec3 vColor;
#endif`,Yoo=`#if defined( USE_COLOR_ALPHA )
vColor = vec4( 1.0 );
#elif defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR ) || defined( USE_BATCHING_COLOR )
vColor = vec3( 1.0 );
#endif
#ifdef USE_COLOR
vColor *= color;
#endif
#ifdef USE_INSTANCING_COLOR
vColor.xyz *= instanceColor.xyz;
#endif
#ifdef USE_BATCHING_COLOR
vec3 batchingColor = getBatchingColor( batchId );
vColor.xyz *= batchingColor.xyz;
#endif`,Voo=`#define PI 3.141592653589793
#define PI2 6.283185307179586
#define PI_HALF 1.5707963267948966
#define RECIPROCAL_PI 0.3183098861837907
#define RECIPROCAL_PI2 0.15915494309189535
#define EPSILON 1e-6
#ifndef saturate
#define saturate( a ) clamp( a, 0.0, 1.0 )
#endif
#define whiteComplement( a ) ( 1.0 - saturate( a ) )
float pow2( const in float x ) { return x*x; }
vec3 pow2( const in vec3 x ) { return x*x; }
float pow3( const in float x ) { return x*x*x; }
float pow4( const in float x ) { float x2 = x*x; return x2*x2; }
float max3( const in vec3 v ) { return max( max( v.x, v.y ), v.z ); }
float average( const in vec3 v ) { return dot( v, vec3( 0.3333333 ) ); }
highp float rand( const in vec2 uv ) {
const highp float a = 12.9898, b = 78.233, c = 43758.5453;
highp float dt = dot( uv.xy, vec2( a,b ) ), sn = mod( dt, PI );
return fract( sin( sn ) * c );
}
#ifdef HIGH_PRECISION
float precisionSafeLength( vec3 v ) { return length( v ); }
#else
float precisionSafeLength( vec3 v ) {
float maxComponent = max3( abs( v ) );
return length( v / maxComponent ) * maxComponent;
}
#endif
struct IncidentLight {
vec3 color;
vec3 direction;
bool visible;
};
struct ReflectedLight {
vec3 directDiffuse;
vec3 directSpecular;
vec3 indirectDiffuse;
vec3 indirectSpecular;
};
#ifdef USE_ALPHAHASH
varying vec3 vPosition;
#endif
vec3 transformDirection( in vec3 dir, in mat4 matrix ) {
return normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );
}
vec3 inverseTransformDirection( in vec3 dir, in mat4 matrix ) {
return normalize( ( vec4( dir, 0.0 ) * matrix ).xyz );
}
mat3 transposeMat3( const in mat3 m ) {
mat3 tmp;
tmp[ 0 ] = vec3( m[ 0 ].x, m[ 1 ].x, m[ 2 ].x );
tmp[ 1 ] = vec3( m[ 0 ].y, m[ 1 ].y, m[ 2 ].y );
tmp[ 2 ] = vec3( m[ 0 ].z, m[ 1 ].z, m[ 2 ].z );
return tmp;
}
float luminance( const in vec3 rgb ) {
const vec3 weights = vec3( 0.2126729, 0.7151522, 0.0721750 );
return dot( weights, rgb );
}
bool isPerspectiveMatrix( mat4 m ) {
return m[ 2 ][ 3 ] == - 1.0;
}
vec2 equirectUv( in vec3 dir ) {
float u = atan( dir.z, dir.x ) * RECIPROCAL_PI2 + 0.5;
float v = asin( clamp( dir.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;
return vec2( u, v );
}
vec3 BRDF_Lambert( const in vec3 diffuseColor ) {
return RECIPROCAL_PI * diffuseColor;
}
vec3 F_Schlick( const in vec3 f0, const in float f90, const in float dotVH ) {
float fresnel = exp2( ( - 5.55473 * dotVH - 6.98316 ) * dotVH );
return f0 * ( 1.0 - fresnel ) + ( f90 * fresnel );
}
float F_Schlick( const in float f0, const in float f90, const in float dotVH ) {
float fresnel = exp2( ( - 5.55473 * dotVH - 6.98316 ) * dotVH );
return f0 * ( 1.0 - fresnel ) + ( f90 * fresnel );
} // validated`,Uoo=`#ifdef ENVMAP_TYPE_CUBE_UV
#define cubeUV_minMipLevel 4.0
#define cubeUV_minTileSize 16.0
float getFace( vec3 direction ) {
vec3 absDirection = abs( direction );
float face = - 1.0;
if ( absDirection.x > absDirection.z ) {
if ( absDirection.x > absDirection.y )
face = direction.x > 0.0 ? 0.0 : 3.0;
else
face = direction.y > 0.0 ? 1.0 : 4.0;
} else {
if ( absDirection.z > absDirection.y )
face = direction.z > 0.0 ? 2.0 : 5.0;
else
face = direction.y > 0.0 ? 1.0 : 4.0;
}
return face;
}
vec2 getUV( vec3 direction, float face ) {
vec2 uv;
if ( face == 0.0 ) {
uv = vec2( direction.z, direction.y ) / abs( direction.x );
} else if ( face == 1.0 ) {
uv = vec2( - direction.x, - direction.z ) / abs( direction.y );
} else if ( face == 2.0 ) {
uv = vec2( - direction.x, direction.y ) / abs( direction.z );
} else if ( face == 3.0 ) {
uv = vec2( - direction.z, direction.y ) / abs( direction.x );
} else if ( face == 4.0 ) {
uv = vec2( - direction.x, direction.z ) / abs( direction.y );
} else {
uv = vec2( direction.x, direction.y ) / abs( direction.z );
}
return 0.5 * ( uv + 1.0 );
}
vec3 bilinearCubeUV( sampler2D envMap, vec3 direction, float mipInt ) {
float face = getFace( direction );
float filterInt = max( cubeUV_minMipLevel - mipInt, 0.0 );
mipInt = max( mipInt, cubeUV_minMipLevel );
float faceSize = exp2( mipInt );
highp vec2 uv = getUV( direction, face ) * ( faceSize - 2.0 ) + 1.0;
if ( face > 2.0 ) {
uv.y += faceSize;
face -= 3.0;
}
uv.x += face * faceSize;
uv.x += filterInt * 3.0 * cubeUV_minTileSize;
uv.y += 4.0 * ( exp2( CUBEUV_MAX_MIP ) - faceSize );
uv.x *= CUBEUV_TEXEL_WIDTH;
uv.y *= CUBEUV_TEXEL_HEIGHT;
#ifdef texture2DGradEXT
return texture2DGradEXT( envMap, uv, vec2( 0.0 ), vec2( 0.0 ) ).rgb;
#else
return texture2D( envMap, uv ).rgb;
#endif
}
#define cubeUV_r0 1.0
#define cubeUV_m0 - 2.0
#define cubeUV_r1 0.8
#define cubeUV_m1 - 1.0
#define cubeUV_r4 0.4
#define cubeUV_m4 2.0
#define cubeUV_r5 0.305
#define cubeUV_m5 3.0
#define cubeUV_r6 0.21
#define cubeUV_m6 4.0
float roughnessToMip( float roughness ) {
float mip = 0.0;
if ( roughness >= cubeUV_r1 ) {
mip = ( cubeUV_r0 - roughness ) * ( cubeUV_m1 - cubeUV_m0 ) / ( cubeUV_r0 - cubeUV_r1 ) + cubeUV_m0;
} else if ( roughness >= cubeUV_r4 ) {
mip = ( cubeUV_r1 - roughness ) * ( cubeUV_m4 - cubeUV_m1 ) / ( cubeUV_r1 - cubeUV_r4 ) + cubeUV_m1;
} else if ( roughness >= cubeUV_r5 ) {
mip = ( cubeUV_r4 - roughness ) * ( cubeUV_m5 - cubeUV_m4 ) / ( cubeUV_r4 - cubeUV_r5 ) + cubeUV_m4;
} else if ( roughness >= cubeUV_r6 ) {
mip = ( cubeUV_r5 - roughness ) * ( cubeUV_m6 - cubeUV_m5 ) / ( cubeUV_r5 - cubeUV_r6 ) + cubeUV_m5;
} else {
mip = - 2.0 * log2( 1.16 * roughness ); }
return mip;
}
vec4 textureCubeUV( sampler2D envMap, vec3 sampleDir, float roughness ) {
float mip = clamp( roughnessToMip( roughness ), cubeUV_m0, CUBEUV_MAX_MIP );
float mipF = fract( mip );
float mipInt = floor( mip );
vec3 color0 = bilinearCubeUV( envMap, sampleDir, mipInt );
if ( mipF == 0.0 ) {
return vec4( color0, 1.0 );
} else {
vec3 color1 = bilinearCubeUV( envMap, sampleDir, mipInt + 1.0 );
return vec4( mix( color0, color1, mipF ), 1.0 );
}
}
#endif`,Woo=`vec3 transformedNormal = objectNormal;
#ifdef USE_TANGENT
vec3 transformedTangent = objectTangent;
#endif
#ifdef USE_BATCHING
mat3 bm = mat3( batchingMatrix );
transformedNormal /= vec3( dot( bm[ 0 ], bm[ 0 ] ), dot( bm[ 1 ], bm[ 1 ] ), dot( bm[ 2 ], bm[ 2 ] ) );
transformedNormal = bm * transformedNormal;
#ifdef USE_TANGENT
transformedTangent = bm * transformedTangent;
#endif
#endif
#ifdef USE_INSTANCING
mat3 im = mat3( instanceMatrix );
transformedNormal /= vec3( dot( im[ 0 ], im[ 0 ] ), dot( im[ 1 ], im[ 1 ] ), dot( im[ 2 ], im[ 2 ] ) );
transformedNormal = im * transformedNormal;
#ifdef USE_TANGENT
transformedTangent = im * transformedTangent;
#endif
#endif
transformedNormal = normalMatrix * transformedNormal;
#ifdef FLIP_SIDED
transformedNormal = - transformedNormal;
#endif
#ifdef USE_TANGENT
transformedTangent = ( modelViewMatrix * vec4( transformedTangent, 0.0 ) ).xyz;
#ifdef FLIP_SIDED
transformedTangent = - transformedTangent;
#endif
#endif`,Xoo=`#ifdef USE_DISPLACEMENTMAP
uniform sampler2D displacementMap;
uniform float displacementScale;
uniform float displacementBias;
#endif`,Koo=`#ifdef USE_DISPLACEMENTMAP
transformed += normalize( objectNormal ) * ( texture2D( displacementMap, vDisplacementMapUv ).x * displacementScale + displacementBias );
#endif`,joo=`#ifdef USE_EMISSIVEMAP
vec4 emissiveColor = texture2D( emissiveMap, vEmissiveMapUv );
totalEmissiveRadiance *= emissiveColor.rgb;
#endif`,qoo=`#ifdef USE_EMISSIVEMAP
uniform sampler2D emissiveMap;
#endif`,Joo="gl_FragColor = linearToOutputTexel( gl_FragColor );",$oo=`
const mat3 LINEAR_SRGB_TO_LINEAR_DISPLAY_P3 = mat3(
vec3( 0.8224621, 0.177538, 0.0 ),
vec3( 0.0331941, 0.9668058, 0.0 ),
vec3( 0.0170827, 0.0723974, 0.9105199 )
);
const mat3 LINEAR_DISPLAY_P3_TO_LINEAR_SRGB = mat3(
vec3( 1.2249401, - 0.2249404, 0.0 ),
vec3( - 0.0420569, 1.0420571, 0.0 ),
vec3( - 0.0196376, - 0.0786361, 1.0982735 )
);
vec4 LinearSRGBToLinearDisplayP3( in vec4 value ) {
return vec4( value.rgb * LINEAR_SRGB_TO_LINEAR_DISPLAY_P3, value.a );
}
vec4 LinearDisplayP3ToLinearSRGB( in vec4 value ) {
return vec4( value.rgb * LINEAR_DISPLAY_P3_TO_LINEAR_SRGB, value.a );
}
vec4 LinearTransferOETF( in vec4 value ) {
return value;
}
vec4 sRGBTransferOETF( in vec4 value ) {
return vec4( mix( pow( value.rgb, vec3( 0.41666 ) ) * 1.055 - vec3( 0.055 ), value.rgb * 12.92, vec3( lessThanEqual( value.rgb, vec3( 0.0031308 ) ) ) ), value.a );
}
vec4 LinearToLinear( in vec4 value ) {
return value;
}
vec4 LinearTosRGB( in vec4 value ) {
return sRGBTransferOETF( value );
}`,Zoo=`#ifdef USE_ENVMAP
#ifdef ENV_WORLDPOS
vec3 cameraToFrag;
if ( isOrthographic ) {
cameraToFrag = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );
} else {
cameraToFrag = normalize( vWorldPosition - cameraPosition );
}
vec3 worldNormal = inverseTransformDirection( normal, viewMatrix );
#ifdef ENVMAP_MODE_REFLECTION
vec3 reflectVec = reflect( cameraToFrag, worldNormal );
#else
vec3 reflectVec = refract( cameraToFrag, worldNormal, refractionRatio );
#endif
#else
vec3 reflectVec = vReflect;
#endif
#ifdef ENVMAP_TYPE_CUBE
vec4 envColor = textureCube( envMap, envMapRotation * vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );
#else
vec4 envColor = vec4( 0.0 );
#endif
#ifdef ENVMAP_BLENDING_MULTIPLY
outgoingLight = mix( outgoingLight, outgoingLight * envColor.xyz, specularStrength * reflectivity );
#elif defined( ENVMAP_BLENDING_MIX )
outgoingLight = mix( outgoingLight, envColor.xyz, specularStrength * reflectivity );
#elif defined( ENVMAP_BLENDING_ADD )
outgoingLight += envColor.xyz * specularStrength * reflectivity;
#endif
#endif`,eio=`#ifdef USE_ENVMAP
uniform float envMapIntensity;
uniform float flipEnvMap;
uniform mat3 envMapRotation;
#ifdef ENVMAP_TYPE_CUBE
uniform samplerCube envMap;
#else
uniform sampler2D envMap;
#endif
#endif`,tio=`#ifdef USE_ENVMAP
uniform float reflectivity;
#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) || defined( LAMBERT )
#define ENV_WORLDPOS
#endif
#ifdef ENV_WORLDPOS
varying vec3 vWorldPosition;
uniform float refractionRatio;
#else
varying vec3 vReflect;
#endif
#endif`,nio=`#ifdef USE_ENVMAP
#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) || defined( LAMBERT )
#define ENV_WORLDPOS
#endif
#ifdef ENV_WORLDPOS
varying vec3 vWorldPosition;
#else
varying vec3 vReflect;
uniform float refractionRatio;
#endif
#endif`,oio=`#ifdef USE_ENVMAP
#ifdef ENV_WORLDPOS
vWorldPosition = worldPosition.xyz;
#else
vec3 cameraToVertex;
if ( isOrthographic ) {
cameraToVertex = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );
} else {
cameraToVertex = normalize( worldPosition.xyz - cameraPosition );
}
vec3 worldNormal = inverseTransformDirection( transformedNormal, viewMatrix );
#ifdef ENVMAP_MODE_REFLECTION
vReflect = reflect( cameraToVertex, worldNormal );
#else
vReflect = refract( cameraToVertex, worldNormal, refractionRatio );
#endif
#endif
#endif`,iio=`#ifdef USE_FOG
vFogDepth = - mvPosition.z;
#endif`,rio=`#ifdef USE_FOG
varying float vFogDepth;
#endif`,sio=`#ifdef USE_FOG
#ifdef FOG_EXP2
float fogFactor = 1.0 - exp( - fogDensity * fogDensity * vFogDepth * vFogDepth );
#else
float fogFactor = smoothstep( fogNear, fogFar, vFogDepth );
#endif
gl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor );
#endif`,aio=`#ifdef USE_FOG
uniform vec3 fogColor;
varying float vFogDepth;
#ifdef FOG_EXP2
uniform float fogDensity;
#else
uniform float fogNear;
uniform float fogFar;
#endif
#endif`,cio=`#ifdef USE_GRADIENTMAP
uniform sampler2D gradientMap;
#endif
vec3 getGradientIrradiance( vec3 normal, vec3 lightDirection ) {
float dotNL = dot( normal, lightDirection );
vec2 coord = vec2( dotNL * 0.5 + 0.5, 0.0 );
#ifdef USE_GRADIENTMAP
return vec3( texture2D( gradientMap, coord ).r );
#else
vec2 fw = fwidth( coord ) * 0.5;
return mix( vec3( 0.7 ), vec3( 1.0 ), smoothstep( 0.7 - fw.x, 0.7 + fw.x, coord.x ) );
#endif
}`,lio=`#ifdef USE_LIGHTMAP
uniform sampler2D lightMap;
uniform float lightMapIntensity;
#endif`,dio=`LambertMaterial material;
material.diffuseColor = diffuseColor.rgb;
material.specularStrength = specularStrength;`,uio=`varying vec3 vViewPosition;
struct LambertMaterial {
vec3 diffuseColor;
float specularStrength;
};
void RE_Direct_Lambert( const in IncidentLight directLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in LambertMaterial material, inout ReflectedLight reflectedLight ) {
float dotNL = saturate( dot( geometryNormal, directLight.direction ) );
vec3 irradiance = dotNL * directLight.color;
reflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );
}
void RE_IndirectDiffuse_Lambert( const in vec3 irradiance, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in LambertMaterial material, inout ReflectedLight reflectedLight ) {
reflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );
}
#define RE_Direct RE_Direct_Lambert
#define RE_IndirectDiffuse RE_IndirectDiffuse_Lambert`,hio=`uniform bool receiveShadow;
uniform vec3 ambientLightColor;
#if defined( USE_LIGHT_PROBES )
uniform vec3 lightProbe[ 9 ];
#endif
vec3 shGetIrradianceAt( in vec3 normal, in vec3 shCoefficients[ 9 ] ) {
float x = normal.x, y = normal.y, z = normal.z;
vec3 result = shCoefficients[ 0 ] * 0.886227;
result += shCoefficients[ 1 ] * 2.0 * 0.511664 * y;
result += shCoefficients[ 2 ] * 2.0 * 0.511664 * z;
result += shCoefficients[ 3 ] * 2.0 * 0.511664 * x;
result += shCoefficients[ 4 ] * 2.0 * 0.429043 * x * y;
result += shCoefficients[ 5 ] * 2.0 * 0.429043 * y * z;
result += shCoefficients[ 6 ] * ( 0.743125 * z * z - 0.247708 );
result += shCoefficients[ 7 ] * 2.0 * 0.429043 * x * z;
result += shCoefficients[ 8 ] * 0.429043 * ( x * x - y * y );
return result;
}
vec3 getLightProbeIrradiance( const in vec3 lightProbe[ 9 ], const in vec3 normal ) {
vec3 worldNormal = inverseTransformDirection( normal, viewMatrix );
vec3 irradiance = shGetIrradianceAt( worldNormal, lightProbe );
return irradiance;
}
vec3 getAmbientLightIrradiance( const in vec3 ambientLightColor ) {
vec3 irradiance = ambientLightColor;
return irradiance;
}
float getDistanceAttenuation( const in float lightDistance, const in float cutoffDistance, const in float decayExponent ) {
float distanceFalloff = 1.0 / max( pow( lightDistance, decayExponent ), 0.01 );
if ( cutoffDistance > 0.0 ) {
distanceFalloff *= pow2( saturate( 1.0 - pow4( lightDistance / cutoffDistance ) ) );
}
return distanceFalloff;
}
float getSpotAttenuation( const in float coneCosine, const in float penumbraCosine, const in float angleCosine ) {
return smoothstep( coneCosine, penumbraCosine, angleCosine );
}
#if NUM_DIR_LIGHTS > 0
struct DirectionalLight {
vec3 direction;
vec3 color;
};
uniform DirectionalLight directionalLights[ NUM_DIR_LIGHTS ];
void getDirectionalLightInfo( const in DirectionalLight directionalLight, out IncidentLight light ) {
light.color = directionalLight.color;
light.direction = directionalLight.direction;
light.visible = true;
}
#endif
#if NUM_POINT_LIGHTS > 0
struct PointLight {
vec3 position;
vec3 color;
float distance;
float decay;
};
uniform PointLight pointLights[ NUM_POINT_LIGHTS ];
void getPointLightInfo( const in PointLight pointLight, const in vec3 geometryPosition, out IncidentLight light ) {
vec3 lVector = pointLight.position - geometryPosition;
light.direction = normalize( lVector );
float lightDistance = length( lVector );
light.color = pointLight.color;
light.color *= getDistanceAttenuation( lightDistance, pointLight.distance, pointLight.decay );
light.visible = ( light.color != vec3( 0.0 ) );
}
#endif
#if NUM_SPOT_LIGHTS > 0
struct SpotLight {
vec3 position;
vec3 direction;
vec3 color;
float distance;
float decay;
float coneCos;
float penumbraCos;
};
uniform SpotLight spotLights[ NUM_SPOT_LIGHTS ];
void getSpotLightInfo( const in SpotLight spotLight, const in vec3 geometryPosition, out IncidentLight light ) {
vec3 lVector = spotLight.position - geometryPosition;
light.direction = normalize( lVector );
float angleCos = dot( light.direction, spotLight.direction );
float spotAttenuation = getSpotAttenuation( spotLight.coneCos, spotLight.penumbraCos, angleCos );
if ( spotAttenuation > 0.0 ) {
float lightDistance = length( lVector );
light.color = spotLight.color * spotAttenuation;
light.color *= getDistanceAttenuation( lightDistance, spotLight.distance, spotLight.decay );
light.visible = ( light.color != vec3( 0.0 ) );
} else {
light.color = vec3( 0.0 );
light.visible = false;
}
}
#endif
#if NUM_RECT_AREA_LIGHTS > 0
struct RectAreaLight {
vec3 color;
vec3 position;
vec3 halfWidth;
vec3 halfHeight;
};
uniform sampler2D ltc_1; uniform sampler2D ltc_2;
uniform RectAreaLight rectAreaLights[ NUM_RECT_AREA_LIGHTS ];
#endif
#if NUM_HEMI_LIGHTS > 0
struct HemisphereLight {
vec3 direction;
vec3 skyColor;
vec3 groundColor;
};
uniform HemisphereLight hemisphereLights[ NUM_HEMI_LIGHTS ];
vec3 getHemisphereLightIrradiance( const in HemisphereLight hemiLight, const in vec3 normal ) {
float dotNL = dot( normal, hemiLight.direction );
float hemiDiffuseWeight = 0.5 * dotNL + 0.5;
vec3 irradiance = mix( hemiLight.groundColor, hemiLight.skyColor, hemiDiffuseWeight );
return irradiance;
}
#endif`,mio=`#ifdef USE_ENVMAP
vec3 getIBLIrradiance( const in vec3 normal ) {
#ifdef ENVMAP_TYPE_CUBE_UV
vec3 worldNormal = inverseTransformDirection( normal, viewMatrix );
vec4 envMapColor = textureCubeUV( envMap, envMapRotation * worldNormal, 1.0 );
return PI * envMapColor.rgb * envMapIntensity;
#else
return vec3( 0.0 );
#endif
}
vec3 getIBLRadiance( const in vec3 viewDir, const in vec3 normal, const in float roughness ) {
#ifdef ENVMAP_TYPE_CUBE_UV
vec3 reflectVec = reflect( - viewDir, normal );
reflectVec = normalize( mix( reflectVec, normal, roughness * roughness) );
reflectVec = inverseTransformDirection( reflectVec, viewMatrix );
vec4 envMapColor = textureCubeUV( envMap, envMapRotation * reflectVec, roughness );
return envMapColor.rgb * envMapIntensity;
#else
return vec3( 0.0 );
#endif
}
#ifdef USE_ANISOTROPY
vec3 getIBLAnisotropyRadiance( const in vec3 viewDir, const in vec3 normal, const in float roughness, const in vec3 bitangent, const in float anisotropy ) {
#ifdef ENVMAP_TYPE_CUBE_UV
vec3 bentNormal = cross( bitangent, viewDir );
bentNormal = normalize( cross( bentNormal, bitangent ) );
bentNormal = normalize( mix( bentNormal, normal, pow2( pow2( 1.0 - anisotropy * ( 1.0 - roughness ) ) ) ) );
return getIBLRadiance( viewDir, bentNormal, roughness );
#else
return vec3( 0.0 );
#endif
}
#endif
#endif`,pio=`ToonMaterial material;
material.diffuseColor = diffuseColor.rgb;`,Aio=`varying vec3 vViewPosition;
struct ToonMaterial {
vec3 diffuseColor;
};
void RE_Direct_Toon( const in IncidentLight directLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {
vec3 irradiance = getGradientIrradiance( geometryNormal, directLight.direction ) * directLight.color;
reflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );
}
void RE_IndirectDiffuse_Toon( const in vec3 irradiance, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {
reflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );
}
#define RE_Direct RE_Direct_Toon
#define RE_IndirectDiffuse RE_IndirectDiffuse_Toon`,_io=`BlinnPhongMaterial material;
material.diffuseColor = diffuseColor.rgb;
material.specularColor = specular;
material.specularShininess = shininess;
material.specularStrength = specularStrength;`,gio=`varying vec3 vViewPosition;
struct BlinnPhongMaterial {
vec3 diffuseColor;
vec3 specularColor;
float specularShininess;
float specularStrength;
};
void RE_Direct_BlinnPhong( const in IncidentLight directLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {
float dotNL = saturate( dot( geometryNormal, directLight.direction ) );
vec3 irradiance = dotNL * directLight.color;
reflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );
reflectedLight.directSpecular += irradiance * BRDF_BlinnPhong( directLight.direction, geometryViewDir, geometryNormal, material.specularColor, material.specularShininess ) * material.specularStrength;
}
void RE_IndirectDiffuse_BlinnPhong( const in vec3 irradiance, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {
reflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );
}
#define RE_Direct RE_Direct_BlinnPhong
#define RE_IndirectDiffuse RE_IndirectDiffuse_BlinnPhong`,fio=`PhysicalMaterial material;
material.diffuseColor = diffuseColor.rgb * ( 1.0 - metalnessFactor );
vec3 dxy = max( abs( dFdx( nonPerturbedNormal ) ), abs( dFdy( nonPerturbedNormal ) ) );
float geometryRoughness = max( max( dxy.x, dxy.y ), dxy.z );
material.roughness = max( roughnessFactor, 0.0525 );material.roughness += geometryRoughness;
material.roughness = min( material.roughness, 1.0 );
#ifdef IOR
material.ior = ior;
#ifdef USE_SPECULAR
float specularIntensityFactor = specularIntensity;
vec3 specularColorFactor = specularColor;
#ifdef USE_SPECULAR_COLORMAP
specularColorFactor *= texture2D( specularColorMap, vSpecularColorMapUv ).rgb;
#endif
#ifdef USE_SPECULAR_INTENSITYMAP
specularIntensityFactor *= texture2D( specularIntensityMap, vSpecularIntensityMapUv ).a;
#endif
material.specularF90 = mix( specularIntensityFactor, 1.0, metalnessFactor );
#else
float specularIntensityFactor = 1.0;
vec3 specularColorFactor = vec3( 1.0 );
material.specularF90 = 1.0;
#endif
material.specularColor = mix( min( pow2( ( material.ior - 1.0 ) / ( material.ior + 1.0 ) ) * specularColorFactor, vec3( 1.0 ) ) * specularIntensityFactor, diffuseColor.rgb, metalnessFactor );
#else
material.specularColor = mix( vec3( 0.04 ), diffuseColor.rgb, metalnessFactor );
material.specularF90 = 1.0;
#endif
#ifdef USE_CLEARCOAT
material.clearcoat = clearcoat;
material.clearcoatRoughness = clearcoatRoughness;
material.clearcoatF0 = vec3( 0.04 );
material.clearcoatF90 = 1.0;
#ifdef USE_CLEARCOATMAP
material.clearcoat *= texture2D( clearcoatMap, vClearcoatMapUv ).x;
#endif
#ifdef USE_CLEARCOAT_ROUGHNESSMAP
material.clearcoatRoughness *= texture2D( clearcoatRoughnessMap, vClearcoatRoughnessMapUv ).y;
#endif
material.clearcoat = saturate( material.clearcoat ); material.clearcoatRoughness = max( material.clearcoatRoughness, 0.0525 );
material.clearcoatRoughness += geometryRoughness;
material.clearcoatRoughness = min( material.clearcoatRoughness, 1.0 );
#endif
#ifdef USE_DISPERSION
material.dispersion = dispersion;
#endif
#ifdef USE_IRIDESCENCE
material.iridescence = iridescence;
material.iridescenceIOR = iridescenceIOR;
#ifdef USE_IRIDESCENCEMAP
material.iridescence *= texture2D( iridescenceMap, vIridescenceMapUv ).r;
#endif
#ifdef USE_IRIDESCENCE_THICKNESSMAP
material.iridescenceThickness = (iridescenceThicknessMaximum - iridescenceThicknessMinimum) * texture2D( iridescenceThicknessMap, vIridescenceThicknessMapUv ).g + iridescenceThicknessMinimum;
#else
material.iridescenceThickness = iridescenceThicknessMaximum;
#endif
#endif
#ifdef USE_SHEEN
material.sheenColor = sheenColor;
#ifdef USE_SHEEN_COLORMAP
material.sheenColor *= texture2D( sheenColorMap, vSheenColorMapUv ).rgb;
#endif
material.sheenRoughness = clamp( sheenRoughness, 0.07, 1.0 );
#ifdef USE_SHEEN_ROUGHNESSMAP
material.sheenRoughness *= texture2D( sheenRoughnessMap, vSheenRoughnessMapUv ).a;
#endif
#endif
#ifdef USE_ANISOTROPY
#ifdef USE_ANISOTROPYMAP
mat2 anisotropyMat = mat2( anisotropyVector.x, anisotropyVector.y, - anisotropyVector.y, anisotropyVector.x );
vec3 anisotropyPolar = texture2D( anisotropyMap, vAnisotropyMapUv ).rgb;
vec2 anisotropyV = anisotropyMat * normalize( 2.0 * anisotropyPolar.rg - vec2( 1.0 ) ) * anisotropyPolar.b;
#else
vec2 anisotropyV = anisotropyVector;
#endif
material.anisotropy = length( anisotropyV );
if( material.anisotropy == 0.0 ) {
anisotropyV = vec2( 1.0, 0.0 );
} else {
anisotropyV /= material.anisotropy;
material.anisotropy = saturate( material.anisotropy );
}
material.alphaT = mix( pow2( material.roughness ), 1.0, pow2( material.anisotropy ) );
material.anisotropyT = tbn[ 0 ] * anisotropyV.x + tbn[ 1 ] * anisotropyV.y;
material.anisotropyB = tbn[ 1 ] * anisotropyV.x - tbn[ 0 ] * anisotropyV.y;
#endif`,yio=`struct PhysicalMaterial {
vec3 diffuseColor;
float roughness;
vec3 specularColor;
float specularF90;
float dispersion;
#ifdef USE_CLEARCOAT
float clearcoat;
float clearcoatRoughness;
vec3 clearcoatF0;
float clearcoatF90;
#endif
#ifdef USE_IRIDESCENCE
float iridescence;
float iridescenceIOR;
float iridescenceThickness;
vec3 iridescenceFresnel;
vec3 iridescenceF0;
#endif
#ifdef USE_SHEEN
vec3 sheenColor;
float sheenRoughness;
#endif
#ifdef IOR
float ior;
#endif
#ifdef USE_TRANSMISSION
float transmission;
float transmissionAlpha;
float thickness;
float attenuationDistance;
vec3 attenuationColor;
#endif
#ifdef USE_ANISOTROPY
float anisotropy;
float alphaT;
vec3 anisotropyT;
vec3 anisotropyB;
#endif
};
vec3 clearcoatSpecularDirect = vec3( 0.0 );
vec3 clearcoatSpecularIndirect = vec3( 0.0 );
vec3 sheenSpecularDirect = vec3( 0.0 );
vec3 sheenSpecularIndirect = vec3(0.0 );
vec3 Schlick_to_F0( const in vec3 f, const in float f90, const in float dotVH ) {
float x = clamp( 1.0 - dotVH, 0.0, 1.0 );
float x2 = x * x;
float x5 = clamp( x * x2 * x2, 0.0, 0.9999 );
return ( f - vec3( f90 ) * x5 ) / ( 1.0 - x5 );
}
float V_GGX_SmithCorrelated( const in float alpha, const in float dotNL, const in float dotNV ) {
float a2 = pow2( alpha );
float gv = dotNL * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );
float gl = dotNV * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );
return 0.5 / max( gv + gl, EPSILON );
}
float D_GGX( const in float alpha, const in float dotNH ) {
float a2 = pow2( alpha );
float denom = pow2( dotNH ) * ( a2 - 1.0 ) + 1.0;
return RECIPROCAL_PI * a2 / pow2( denom );
}
#ifdef USE_ANISOTROPY
float V_GGX_SmithCorrelated_Anisotropic( const in float alphaT, const in float alphaB, const in float dotTV, const in float dotBV, const in float dotTL, const in float dotBL, const in float dotNV, const in float dotNL ) {
float gv = dotNL * length( vec3( alphaT * dotTV, alphaB * dotBV, dotNV ) );
float gl = dotNV * length( vec3( alphaT * dotTL, alphaB * dotBL, dotNL ) );
float v = 0.5 / ( gv + gl );
return saturate(v);
}
float D_GGX_Anisotropic( const in float alphaT, const in float alphaB, const in float dotNH, const in float dotTH, const in float dotBH ) {
float a2 = alphaT * alphaB;
highp vec3 v = vec3( alphaB * dotTH, alphaT * dotBH, a2 * dotNH );
highp float v2 = dot( v, v );
float w2 = a2 / v2;
return RECIPROCAL_PI * a2 * pow2 ( w2 );
}
#endif
#ifdef USE_CLEARCOAT
vec3 BRDF_GGX_Clearcoat( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, const in PhysicalMaterial material) {
vec3 f0 = material.clearcoatF0;
float f90 = material.clearcoatF90;
float roughness = material.clearcoatRoughness;
float alpha = pow2( roughness );
vec3 halfDir = normalize( lightDir + viewDir );
float dotNL = saturate( dot( normal, lightDir ) );
float dotNV = saturate( dot( normal, viewDir ) );
float dotNH = saturate( dot( normal, halfDir ) );
float dotVH = saturate( dot( viewDir, halfDir ) );
vec3 F = F_Schlick( f0, f90, dotVH );
float V = V_GGX_SmithCorrelated( alpha, dotNL, dotNV );
float D = D_GGX( alpha, dotNH );
return F * ( V * D );
}
#endif
vec3 BRDF_GGX( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, const in PhysicalMaterial material ) {
vec3 f0 = material.specularColor;
float f90 = material.specularF90;
float roughness = material.roughness;
float alpha = pow2( roughness );
vec3 halfDir = normalize( lightDir + viewDir );
float dotNL = saturate( dot( normal, lightDir ) );
float dotNV = saturate( dot( normal, viewDir ) );
float dotNH = saturate( dot( normal, halfDir ) );
float dotVH = saturate( dot( viewDir, halfDir ) );
vec3 F = F_Schlick( f0, f90, dotVH );
#ifdef USE_IRIDESCENCE
F = mix( F, material.iridescenceFresnel, material.iridescence );
#endif
#ifdef USE_ANISOTROPY
float dotTL = dot( material.anisotropyT, lightDir );
float dotTV = dot( material.anisotropyT, viewDir );
float dotTH = dot( material.anisotropyT, halfDir );
float dotBL = dot( material.anisotropyB, lightDir );
float dotBV = dot( material.anisotropyB, viewDir );
float dotBH = dot( material.anisotropyB, halfDir );
float V = V_GGX_SmithCorrelated_Anisotropic( material.alphaT, alpha, dotTV, dotBV, dotTL, dotBL, dotNV, dotNL );
float D = D_GGX_Anisotropic( material.alphaT, alpha, dotNH, dotTH, dotBH );
#else
float V = V_GGX_SmithCorrelated( alpha, dotNL, dotNV );
float D = D_GGX( alpha, dotNH );
#endif
return F * ( V * D );
}
vec2 LTC_Uv( const in vec3 N, const in vec3 V, const in float roughness ) {
const float LUT_SIZE = 64.0;
const float LUT_SCALE = ( LUT_SIZE - 1.0 ) / LUT_SIZE;
const float LUT_BIAS = 0.5 / LUT_SIZE;
float dotNV = saturate( dot( N, V ) );
vec2 uv = vec2( roughness, sqrt( 1.0 - dotNV ) );
uv = uv * LUT_SCALE + LUT_BIAS;
return uv;
}
float LTC_ClippedSphereFormFactor( const in vec3 f ) {
float l = length( f );
return max( ( l * l + f.z ) / ( l + 1.0 ), 0.0 );
}
vec3 LTC_EdgeVectorFormFactor( const in vec3 v1, const in vec3 v2 ) {
float x = dot( v1, v2 );
float y = abs( x );
float a = 0.8543985 + ( 0.4965155 + 0.0145206 * y ) * y;
float b = 3.4175940 + ( 4.1616724 + y ) * y;
float v = a / b;
float theta_sintheta = ( x > 0.0 ) ? v : 0.5 * inversesqrt( max( 1.0 - x * x, 1e-7 ) ) - v;
return cross( v1, v2 ) * theta_sintheta;
}
vec3 LTC_Evaluate( const in vec3 N, const in vec3 V, const in vec3 P, const in mat3 mInv, const in vec3 rectCoords[ 4 ] ) {
vec3 v1 = rectCoords[ 1 ] - rectCoords[ 0 ];
vec3 v2 = rectCoords[ 3 ] - rectCoords[ 0 ];
vec3 lightNormal = cross( v1, v2 );
if( dot( lightNormal, P - rectCoords[ 0 ] ) < 0.0 ) return vec3( 0.0 );
vec3 T1, T2;
T1 = normalize( V - N * dot( V, N ) );
T2 = - cross( N, T1 );
mat3 mat = mInv * transposeMat3( mat3( T1, T2, N ) );
vec3 coords[ 4 ];
coords[ 0 ] = mat * ( rectCoords[ 0 ] - P );
coords[ 1 ] = mat * ( rectCoords[ 1 ] - P );
coords[ 2 ] = mat * ( rectCoords[ 2 ] - P );
coords[ 3 ] = mat * ( rectCoords[ 3 ] - P );
coords[ 0 ] = normalize( coords[ 0 ] );
coords[ 1 ] = normalize( coords[ 1 ] );
coords[ 2 ] = normalize( coords[ 2 ] );
coords[ 3 ] = normalize( coords[ 3 ] );
vec3 vectorFormFactor = vec3( 0.0 );
vectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 0 ], coords[ 1 ] );
vectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 1 ], coords[ 2 ] );
vectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 2 ], coords[ 3 ] );
vectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 3 ], coords[ 0 ] );
float result = LTC_ClippedSphereFormFactor( vectorFormFactor );
return vec3( result );
}
#if defined( USE_SHEEN )
float D_Charlie( float roughness, float dotNH ) {
float alpha = pow2( roughness );
float invAlpha = 1.0 / alpha;
float cos2h = dotNH * dotNH;
float sin2h = max( 1.0 - cos2h, 0.0078125 );
return ( 2.0 + invAlpha ) * pow( sin2h, invAlpha * 0.5 ) / ( 2.0 * PI );
}
float V_Neubelt( float dotNV, float dotNL ) {
return saturate( 1.0 / ( 4.0 * ( dotNL + dotNV - dotNL * dotNV ) ) );
}
vec3 BRDF_Sheen( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, vec3 sheenColor, const in float sheenRoughness ) {
vec3 halfDir = normalize( lightDir + viewDir );
float dotNL = saturate( dot( normal, lightDir ) );
float dotNV = saturate( dot( normal, viewDir ) );
float dotNH = saturate( dot( normal, halfDir ) );
float D = D_Charlie( sheenRoughness, dotNH );
float V = V_Neubelt( dotNV, dotNL );
return sheenColor * ( D * V );
}
#endif
float IBLSheenBRDF( const in vec3 normal, const in vec3 viewDir, const in float roughness ) {
float dotNV = saturate( dot( normal, viewDir ) );
float r2 = roughness * roughness;
float a = roughness < 0.25 ? -339.2 * r2 + 161.4 * roughness - 25.9 : -8.48 * r2 + 14.3 * roughness - 9.95;
float b = roughness < 0.25 ? 44.0 * r2 - 23.7 * roughness + 3.26 : 1.97 * r2 - 3.27 * roughness + 0.72;
float DG = exp( a * dotNV + b ) + ( roughness < 0.25 ? 0.0 : 0.1 * ( roughness - 0.25 ) );
return saturate( DG * RECIPROCAL_PI );
}
vec2 DFGApprox( const in vec3 normal, const in vec3 viewDir, const in float roughness ) {
float dotNV = saturate( dot( normal, viewDir ) );
const vec4 c0 = vec4( - 1, - 0.0275, - 0.572, 0.022 );
const vec4 c1 = vec4( 1, 0.0425, 1.04, - 0.04 );
vec4 r = roughness * c0 + c1;
float a004 = min( r.x * r.x, exp2( - 9.28 * dotNV ) ) * r.x + r.y;
vec2 fab = vec2( - 1.04, 1.04 ) * a004 + r.zw;
return fab;
}
vec3 EnvironmentBRDF( const in vec3 normal, const in vec3 viewDir, const in vec3 specularColor, const in float specularF90, const in float roughness ) {
vec2 fab = DFGApprox( normal, viewDir, roughness );
return specularColor * fab.x + specularF90 * fab.y;
}
#ifdef USE_IRIDESCENCE
void computeMultiscatteringIridescence( const in vec3 normal, const in vec3 viewDir, const in vec3 specularColor, const in float specularF90, const in float iridescence, const in vec3 iridescenceF0, const in float roughness, inout vec3 singleScatter, inout vec3 multiScatter ) {
#else
void computeMultiscattering( const in vec3 normal, const in vec3 viewDir, const in vec3 specularColor, const in float specularF90, const in float roughness, inout vec3 singleScatter, inout vec3 multiScatter ) {
#endif
vec2 fab = DFGApprox( normal, viewDir, roughness );
#ifdef USE_IRIDESCENCE
vec3 Fr = mix( specularColor, iridescenceF0, iridescence );
#else
vec3 Fr = specularColor;
#endif
vec3 FssEss = Fr * fab.x + specularF90 * fab.y;
float Ess = fab.x + fab.y;
float Ems = 1.0 - Ess;
vec3 Favg = Fr + ( 1.0 - Fr ) * 0.047619; vec3 Fms = FssEss * Favg / ( 1.0 - Ems * Favg );
singleScatter += FssEss;
multiScatter += Fms * Ems;
}
#if NUM_RECT_AREA_LIGHTS > 0
void RE_Direct_RectArea_Physical( const in RectAreaLight rectAreaLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {
vec3 normal = geometryNormal;
vec3 viewDir = geometryViewDir;
vec3 position = geometryPosition;
vec3 lightPos = rectAreaLight.position;
vec3 halfWidth = rectAreaLight.halfWidth;
vec3 halfHeight = rectAreaLight.halfHeight;
vec3 lightColor = rectAreaLight.color;
float roughness = material.roughness;
vec3 rectCoords[ 4 ];
rectCoords[ 0 ] = lightPos + halfWidth - halfHeight; rectCoords[ 1 ] = lightPos - halfWidth - halfHeight;
rectCoords[ 2 ] = lightPos - halfWidth + halfHeight;
rectCoords[ 3 ] = lightPos + halfWidth + halfHeight;
vec2 uv = LTC_Uv( normal, viewDir, roughness );
vec4 t1 = texture2D( ltc_1, uv );
vec4 t2 = texture2D( ltc_2, uv );
mat3 mInv = mat3(
vec3( t1.x, 0, t1.y ),
vec3( 0, 1, 0 ),
vec3( t1.z, 0, t1.w )
);
vec3 fresnel = ( material.specularColor * t2.x + ( vec3( 1.0 ) - material.specularColor ) * t2.y );
reflectedLight.directSpecular += lightColor * fresnel * LTC_Evaluate( normal, viewDir, position, mInv, rectCoords );
reflectedLight.directDiffuse += lightColor * material.diffuseColor * LTC_Evaluate( normal, viewDir, position, mat3( 1.0 ), rectCoords );
}
#endif
void RE_Direct_Physical( const in IncidentLight directLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {
float dotNL = saturate( dot( geometryNormal, directLight.direction ) );
vec3 irradiance = dotNL * directLight.color;
#ifdef USE_CLEARCOAT
float dotNLcc = saturate( dot( geometryClearcoatNormal, directLight.direction ) );
vec3 ccIrradiance = dotNLcc * directLight.color;
clearcoatSpecularDirect += ccIrradiance * BRDF_GGX_Clearcoat( directLight.direction, geometryViewDir, geometryClearcoatNormal, material );
#endif
#ifdef USE_SHEEN
sheenSpecularDirect += irradiance * BRDF_Sheen( directLight.direction, geometryViewDir, geometryNormal, material.sheenColor, material.sheenRoughness );
#endif
reflectedLight.directSpecular += irradiance * BRDF_GGX( directLight.direction, geometryViewDir, geometryNormal, material );
reflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );
}
void RE_IndirectDiffuse_Physical( const in vec3 irradiance, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {
reflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );
}
void RE_IndirectSpecular_Physical( const in vec3 radiance, const in vec3 irradiance, const in vec3 clearcoatRadiance, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in PhysicalMaterial material, inout ReflectedLight reflectedLight) {
#ifdef USE_CLEARCOAT
clearcoatSpecularIndirect += clearcoatRadiance * EnvironmentBRDF( geometryClearcoatNormal, geometryViewDir, material.clearcoatF0, material.clearcoatF90, material.clearcoatRoughness );
#endif
#ifdef USE_SHEEN
sheenSpecularIndirect += irradiance * material.sheenColor * IBLSheenBRDF( geometryNormal, geometryViewDir, material.sheenRoughness );
#endif
vec3 singleScattering = vec3( 0.0 );
vec3 multiScattering = vec3( 0.0 );
vec3 cosineWeightedIrradiance = irradiance * RECIPROCAL_PI;
#ifdef USE_IRIDESCENCE
computeMultiscatteringIridescence( geometryNormal, geometryViewDir, material.specularColor, material.specularF90, material.iridescence, material.iridescenceFresnel, material.roughness, singleScattering, multiScattering );
#else
computeMultiscattering( geometryNormal, geometryViewDir, material.specularColor, material.specularF90, material.roughness, singleScattering, multiScattering );
#endif
vec3 totalScattering = singleScattering + multiScattering;
vec3 diffuse = material.diffuseColor * ( 1.0 - max( max( totalScattering.r, totalScattering.g ), totalScattering.b ) );
reflectedLight.indirectSpecular += radiance * singleScattering;
reflectedLight.indirectSpecular += multiScattering * cosineWeightedIrradiance;
reflectedLight.indirectDiffuse += diffuse * cosineWeightedIrradiance;
}
#define RE_Direct RE_Direct_Physical
#define RE_Direct_RectArea RE_Direct_RectArea_Physical
#define RE_IndirectDiffuse RE_IndirectDiffuse_Physical
#define RE_IndirectSpecular RE_IndirectSpecular_Physical
float computeSpecularOcclusion( const in float dotNV, const in float ambientOcclusion, const in float roughness ) {
return saturate( pow( dotNV + ambientOcclusion, exp2( - 16.0 * roughness - 1.0 ) ) - 1.0 + ambientOcclusion );
}`,xio=`
vec3 geometryPosition = - vViewPosition;
vec3 geometryNormal = normal;
vec3 geometryViewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( vViewPosition );
vec3 geometryClearcoatNormal = vec3( 0.0 );
#ifdef USE_CLEARCOAT
geometryClearcoatNormal = clearcoatNormal;
#endif
#ifdef USE_IRIDESCENCE
float dotNVi = saturate( dot( normal, geometryViewDir ) );
if ( material.iridescenceThickness == 0.0 ) {
material.iridescence = 0.0;
} else {
material.iridescence = saturate( material.iridescence );
}
if ( material.iridescence > 0.0 ) {
material.iridescenceFresnel = evalIridescence( 1.0, material.iridescenceIOR, dotNVi, material.iridescenceThickness, material.specularColor );
material.iridescenceF0 = Schlick_to_F0( material.iridescenceFresnel, 1.0, dotNVi );
}
#endif
IncidentLight directLight;
#if ( NUM_POINT_LIGHTS > 0 ) && defined( RE_Direct )
PointLight pointLight;
#if defined( USE_SHADOWMAP ) && NUM_POINT_LIGHT_SHADOWS > 0
PointLightShadow pointLightShadow;
#endif
#pragma unroll_loop_start
for ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {
pointLight = pointLights[ i ];
getPointLightInfo( pointLight, geometryPosition, directLight );
#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_POINT_LIGHT_SHADOWS )
pointLightShadow = pointLightShadows[ i ];
directLight.color *= ( directLight.visible && receiveShadow ) ? getPointShadow( pointShadowMap[ i ], pointLightShadow.shadowMapSize, pointLightShadow.shadowBias, pointLightShadow.shadowRadius, vPointShadowCoord[ i ], pointLightShadow.shadowCameraNear, pointLightShadow.shadowCameraFar ) : 1.0;
#endif
RE_Direct( directLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );
}
#pragma unroll_loop_end
#endif
#if ( NUM_SPOT_LIGHTS > 0 ) && defined( RE_Direct )
SpotLight spotLight;
vec4 spotColor;
vec3 spotLightCoord;
bool inSpotLightMap;
#if defined( USE_SHADOWMAP ) && NUM_SPOT_LIGHT_SHADOWS > 0
SpotLightShadow spotLightShadow;
#endif
#pragma unroll_loop_start
for ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {
spotLight = spotLights[ i ];
getSpotLightInfo( spotLight, geometryPosition, directLight );
#if ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS_WITH_MAPS )
#define SPOT_LIGHT_MAP_INDEX UNROLLED_LOOP_INDEX
#elif ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )
#define SPOT_LIGHT_MAP_INDEX NUM_SPOT_LIGHT_MAPS
#else
#define SPOT_LIGHT_MAP_INDEX ( UNROLLED_LOOP_INDEX - NUM_SPOT_LIGHT_SHADOWS + NUM_SPOT_LIGHT_SHADOWS_WITH_MAPS )
#endif
#if ( SPOT_LIGHT_MAP_INDEX < NUM_SPOT_LIGHT_MAPS )
spotLightCoord = vSpotLightCoord[ i ].xyz / vSpotLightCoord[ i ].w;
inSpotLightMap = all( lessThan( abs( spotLightCoord * 2. - 1. ), vec3( 1.0 ) ) );
spotColor = texture2D( spotLightMap[ SPOT_LIGHT_MAP_INDEX ], spotLightCoord.xy );
directLight.color = inSpotLightMap ? directLight.color * spotColor.rgb : directLight.color;
#endif
#undef SPOT_LIGHT_MAP_INDEX
#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )
spotLightShadow = spotLightShadows[ i ];
directLight.color *= ( directLight.visible && receiveShadow ) ? getShadow( spotShadowMap[ i ], spotLightShadow.shadowMapSize, spotLightShadow.shadowBias, spotLightShadow.shadowRadius, vSpotLightCoord[ i ] ) : 1.0;
#endif
RE_Direct( directLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );
}
#pragma unroll_loop_end
#endif
#if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct )
DirectionalLight directionalLight;
#if defined( USE_SHADOWMAP ) && NUM_DIR_LIGHT_SHADOWS > 0
DirectionalLightShadow directionalLightShadow;
#endif
#pragma unroll_loop_start
for ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {
directionalLight = directionalLights[ i ];
getDirectionalLightInfo( directionalLight, directLight );
#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS )
directionalLightShadow = directionalLightShadows[ i ];
directLight.color *= ( directLight.visible && receiveShadow ) ? getShadow( directionalShadowMap[ i ], directionalLightShadow.shadowMapSize, directionalLightShadow.shadowBias, directionalLightShadow.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;
#endif
RE_Direct( directLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );
}
#pragma unroll_loop_end
#endif
#if ( NUM_RECT_AREA_LIGHTS > 0 ) && defined( RE_Direct_RectArea )
RectAreaLight rectAreaLight;
#pragma unroll_loop_start
for ( int i = 0; i < NUM_RECT_AREA_LIGHTS; i ++ ) {
rectAreaLight = rectAreaLights[ i ];
RE_Direct_RectArea( rectAreaLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );
}
#pragma unroll_loop_end
#endif
#if defined( RE_IndirectDiffuse )
vec3 iblIrradiance = vec3( 0.0 );
vec3 irradiance = getAmbientLightIrradiance( ambientLightColor );
#if defined( USE_LIGHT_PROBES )
irradiance += getLightProbeIrradiance( lightProbe, geometryNormal );
#endif
#if ( NUM_HEMI_LIGHTS > 0 )
#pragma unroll_loop_start
for ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {
irradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometryNormal );
}
#pragma unroll_loop_end
#endif
#endif
#if defined( RE_IndirectSpecular )
vec3 radiance = vec3( 0.0 );
vec3 clearcoatRadiance = vec3( 0.0 );
#endif`,Cio=`#if defined( RE_IndirectDiffuse )
#ifdef USE_LIGHTMAP
vec4 lightMapTexel = texture2D( lightMap, vLightMapUv );
vec3 lightMapIrradiance = lightMapTexel.rgb * lightMapIntensity;
irradiance += lightMapIrradiance;
#endif
#if defined( USE_ENVMAP ) && defined( STANDARD ) && defined( ENVMAP_TYPE_CUBE_UV )
iblIrradiance += getIBLIrradiance( geometryNormal );
#endif
#endif
#if defined( USE_ENVMAP ) && defined( RE_IndirectSpecular )
#ifdef USE_ANISOTROPY
radiance += getIBLAnisotropyRadiance( geometryViewDir, geometryNormal, material.roughness, material.anisotropyB, material.anisotropy );
#else
radiance += getIBLRadiance( geometryViewDir, geometryNormal, material.roughness );
#endif
#ifdef USE_CLEARCOAT
clearcoatRadiance += getIBLRadiance( geometryViewDir, geometryClearcoatNormal, material.clearcoatRoughness );
#endif
#endif`,Iio=`#if defined( RE_IndirectDiffuse )
RE_IndirectDiffuse( irradiance, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );
#endif
#if defined( RE_IndirectSpecular )
RE_IndirectSpecular( radiance, iblIrradiance, clearcoatRadiance, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );
#endif`;var bio=`#if defined( USE_LOGDEPTHBUF )
gl_FragDepth = vIsPerspective == 0.0 ? gl_FragCoord.z : log2( vFragDepth ) * logDepthBufFC * 0.5;
#endif`,Sio=`#if defined( USE_LOGDEPTHBUF )
uniform float logDepthBufFC;
varying float vFragDepth;
varying float vIsPerspective;
#endif`,Pio=`#ifdef USE_LOGDEPTHBUF
varying float vFragDepth;
varying float vIsPerspective;
#endif`,vio=`#ifdef USE_LOGDEPTHBUF
vFragDepth = 1.0 + gl_Position.w;
vIsPerspective = float( isPerspectiveMatrix( projectionMatrix ) );
#endif`,Eio=`#ifdef USE_MAP
vec4 sampledDiffuseColor = texture2D( map, vMapUv );
#ifdef DECODE_VIDEO_TEXTURE
sampledDiffuseColor = vec4( mix( pow( sampledDiffuseColor.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), sampledDiffuseColor.rgb * 0.0773993808, vec3( lessThanEqual( sampledDiffuseColor.rgb, vec3( 0.04045 ) ) ) ), sampledDiffuseColor.w );
#endif
diffuseColor *= sampledDiffuseColor;
#endif`,Mio=`#ifdef USE_MAP
uniform sampler2D map;
#endif`,Bio=`#if defined( USE_MAP ) || defined( USE_ALPHAMAP )
#if defined( USE_POINTS_UV )
vec2 uv = vUv;
#else
vec2 uv = ( uvTransform * vec3( gl_PointCoord.x, 1.0 - gl_PointCoord.y, 1 ) ).xy;
#endif
#endif
#ifdef USE_MAP
diffuseColor *= texture2D( map, uv );
#endif
#ifdef USE_ALPHAMAP
diffuseColor.a *= texture2D( alphaMap, uv ).g;
#endif`,wio=`#if defined( USE_POINTS_UV )
varying vec2 vUv;
#else
#if defined( USE_MAP ) || defined( USE_ALPHAMAP )
uniform mat3 uvTransform;
#endif
#endif
#ifdef USE_MAP
uniform sampler2D map;
#endif
#ifdef USE_ALPHAMAP
uniform sampler2D alphaMap;
#endif`,Tio=`float metalnessFactor = metalness;
#ifdef USE_METALNESSMAP
vec4 texelMetalness = texture2D( metalnessMap, vMetalnessMapUv );
metalnessFactor *= texelMetalness.b;
#endif`,Dio=`#ifdef USE_METALNESSMAP
uniform sampler2D metalnessMap;
#endif`,Nio=`#ifdef USE_INSTANCING_MORPH
float morphTargetInfluences[ MORPHTARGETS_COUNT ];
float morphTargetBaseInfluence = texelFetch( morphTexture, ivec2( 0, gl_InstanceID ), 0 ).r;
for ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {
morphTargetInfluences[i] = texelFetch( morphTexture, ivec2( i + 1, gl_InstanceID ), 0 ).r;
}
#endif`,Rio=`#if defined( USE_MORPHCOLORS )
vColor *= morphTargetBaseInfluence;
for ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {
#if defined( USE_COLOR_ALPHA )
if ( morphTargetInfluences[ i ] != 0.0 ) vColor += getMorph( gl_VertexID, i, 2 ) * morphTargetInfluences[ i ];
#elif defined( USE_COLOR )
if ( morphTargetInfluences[ i ] != 0.0 ) vColor += getMorph( gl_VertexID, i, 2 ).rgb * morphTargetInfluences[ i ];
#endif
}
#endif`,Qio=`#ifdef USE_MORPHNORMALS
objectNormal *= morphTargetBaseInfluence;
for ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {
if ( morphTargetInfluences[ i ] != 0.0 ) objectNormal += getMorph( gl_VertexID, i, 1 ).xyz * morphTargetInfluences[ i ];
}
#endif`,kio=`#ifdef USE_MORPHTARGETS
#ifndef USE_INSTANCING_MORPH
uniform float morphTargetBaseInfluence;
uniform float morphTargetInfluences[ MORPHTARGETS_COUNT ];
#endif
uniform sampler2DArray morphTargetsTexture;
uniform ivec2 morphTargetsTextureSize;
vec4 getMorph( const in int vertexIndex, const in int morphTargetIndex, const in int offset ) {
int texelIndex = vertexIndex * MORPHTARGETS_TEXTURE_STRIDE + offset;
int y = texelIndex / morphTargetsTextureSize.x;
int x = texelIndex - y * morphTargetsTextureSize.x;
ivec3 morphUV = ivec3( x, y, morphTargetIndex );
return texelFetch( morphTargetsTexture, morphUV, 0 );
}
#endif`,Lio=`#ifdef USE_MORPHTARGETS
transformed *= morphTargetBaseInfluence;
for ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {
if ( morphTargetInfluences[ i ] != 0.0 ) transformed += getMorph( gl_VertexID, i, 0 ).xyz * morphTargetInfluences[ i ];
}
#endif`,Fio=`float faceDirection = gl_FrontFacing ? 1.0 : - 1.0;
#ifdef FLAT_SHADED
vec3 fdx = dFdx( vViewPosition );
vec3 fdy = dFdy( vViewPosition );
vec3 normal = normalize( cross( fdx, fdy ) );
#else
vec3 normal = normalize( vNormal );
#ifdef DOUBLE_SIDED
normal *= faceDirection;
#endif
#endif
#if defined( USE_NORMALMAP_TANGENTSPACE ) || defined( USE_CLEARCOAT_NORMALMAP ) || defined( USE_ANISOTROPY )
#ifdef USE_TANGENT
mat3 tbn = mat3( normalize( vTangent ), normalize( vBitangent ), normal );
#else
mat3 tbn = getTangentFrame( - vViewPosition, normal,
#if defined( USE_NORMALMAP )
vNormalMapUv
#elif defined( USE_CLEARCOAT_NORMALMAP )
vClearcoatNormalMapUv
#else
vUv
#endif
);
#endif
#if defined( DOUBLE_SIDED ) && ! defined( FLAT_SHADED )
tbn[0] *= faceDirection;
tbn[1] *= faceDirection;
#endif
#endif
#ifdef USE_CLEARCOAT_NORMALMAP
#ifdef USE_TANGENT
mat3 tbn2 = mat3( normalize( vTangent ), normalize( vBitangent ), normal );
#else
mat3 tbn2 = getTangentFrame( - vViewPosition, normal, vClearcoatNormalMapUv );
#endif
#if defined( DOUBLE_SIDED ) && ! defined( FLAT_SHADED )
tbn2[0] *= faceDirection;
tbn2[1] *= faceDirection;
#endif
#endif
vec3 nonPerturbedNormal = normal;`,Hio=`#ifdef USE_NORMALMAP_OBJECTSPACE
normal = texture2D( normalMap, vNormalMapUv ).xyz * 2.0 - 1.0;
#ifdef FLIP_SIDED
normal = - normal;
#endif
#ifdef DOUBLE_SIDED
normal = normal * faceDirection;
#endif
normal = normalize( normalMatrix * normal );
#elif defined( USE_NORMALMAP_TANGENTSPACE )
vec3 mapN = texture2D( normalMap, vNormalMapUv ).xyz * 2.0 - 1.0;
mapN.xy *= normalScale;
normal = normalize( tbn * mapN );
#elif defined( USE_BUMPMAP )
normal = perturbNormalArb( - vViewPosition, normal, dHdxy_fwd(), faceDirection );
#endif`,Oio=`#ifndef FLAT_SHADED
varying vec3 vNormal;
#ifdef USE_TANGENT
varying vec3 vTangent;
varying vec3 vBitangent;
#endif
#endif`,zio=`#ifndef FLAT_SHADED
varying vec3 vNormal;
#ifdef USE_TANGENT
varying vec3 vTangent;
varying vec3 vBitangent;
#endif
#endif`,Gio=`#ifndef FLAT_SHADED
vNormal = normalize( transformedNormal );
#ifdef USE_TANGENT
vTangent = normalize( transformedTangent );
vBitangent = normalize( cross( vNormal, vTangent ) * tangent.w );
#endif
#endif`,Yio=`#ifdef USE_NORMALMAP
uniform sampler2D normalMap;
uniform vec2 normalScale;
#endif
#ifdef USE_NORMALMAP_OBJECTSPACE
uniform mat3 normalMatrix;
#endif
#if ! defined ( USE_TANGENT ) && ( defined ( USE_NORMALMAP_TANGENTSPACE ) || defined ( USE_CLEARCOAT_NORMALMAP ) || defined( USE_ANISOTROPY ) )
mat3 getTangentFrame( vec3 eye_pos, vec3 surf_norm, vec2 uv ) {
vec3 q0 = dFdx( eye_pos.xyz );
vec3 q1 = dFdy( eye_pos.xyz );
vec2 st0 = dFdx( uv.st );
vec2 st1 = dFdy( uv.st );
vec3 N = surf_norm;
vec3 q1perp = cross( q1, N );
vec3 q0perp = cross( N, q0 );
vec3 T = q1perp * st0.x + q0perp * st1.x;
vec3 B = q1perp * st0.y + q0perp * st1.y;
float det = max( dot( T, T ), dot( B, B ) );
float scale = ( det == 0.0 ) ? 0.0 : inversesqrt( det );
return mat3( T * scale, B * scale, N );
}
#endif`,Vio=`#ifdef USE_CLEARCOAT
vec3 clearcoatNormal = nonPerturbedNormal;
#endif`,Uio=`#ifdef USE_CLEARCOAT_NORMALMAP
vec3 clearcoatMapN = texture2D( clearcoatNormalMap, vClearcoatNormalMapUv ).xyz * 2.0 - 1.0;
clearcoatMapN.xy *= clearcoatNormalScale;
clearcoatNormal = normalize( tbn2 * clearcoatMapN );
#endif`,Wio=`#ifdef USE_CLEARCOATMAP
uniform sampler2D clearcoatMap;
#endif
#ifdef USE_CLEARCOAT_NORMALMAP
uniform sampler2D clearcoatNormalMap;
uniform vec2 clearcoatNormalScale;
#endif
#ifdef USE_CLEARCOAT_ROUGHNESSMAP
uniform sampler2D clearcoatRoughnessMap;
#endif`,Xio=`#ifdef USE_IRIDESCENCEMAP
uniform sampler2D iridescenceMap;
#endif
#ifdef USE_IRIDESCENCE_THICKNESSMAP
uniform sampler2D iridescenceThicknessMap;
#endif`,Kio=`#ifdef OPAQUE
diffuseColor.a = 1.0;
#endif
#ifdef USE_TRANSMISSION
diffuseColor.a *= material.transmissionAlpha;
#endif
gl_FragColor = vec4( outgoingLight, diffuseColor.a );`,jio=`vec3 packNormalToRGB( const in vec3 normal ) {
return normalize( normal ) * 0.5 + 0.5;
}
vec3 unpackRGBToNormal( const in vec3 rgb ) {
return 2.0 * rgb.xyz - 1.0;
}
const float PackUpscale = 256. / 255.;const float UnpackDownscale = 255. / 256.;
const vec3 PackFactors = vec3( 256. * 256. * 256., 256. * 256., 256. );
const vec4 UnpackFactors = UnpackDownscale / vec4( PackFactors, 1. );
const float ShiftRight8 = 1. / 256.;
vec4 packDepthToRGBA( const in float v ) {
vec4 r = vec4( fract( v * PackFactors ), v );
r.yzw -= r.xyz * ShiftRight8; return r * PackUpscale;
}
float unpackRGBAToDepth( const in vec4 v ) {
return dot( v, UnpackFactors );
}
vec2 packDepthToRG( in highp float v ) {
return packDepthToRGBA( v ).yx;
}
float unpackRGToDepth( const in highp vec2 v ) {
return unpackRGBAToDepth( vec4( v.xy, 0.0, 0.0 ) );
}
vec4 pack2HalfToRGBA( vec2 v ) {
vec4 r = vec4( v.x, fract( v.x * 255.0 ), v.y, fract( v.y * 255.0 ) );
return vec4( r.x - r.y / 255.0, r.y, r.z - r.w / 255.0, r.w );
}
vec2 unpackRGBATo2Half( vec4 v ) {
return vec2( v.x + ( v.y / 255.0 ), v.z + ( v.w / 255.0 ) );
}
float viewZToOrthographicDepth( const in float viewZ, const in float near, const in float far ) {
return ( viewZ + near ) / ( near - far );
}
float orthographicDepthToViewZ( const in float depth, const in float near, const in float far ) {
return depth * ( near - far ) - near;
}
float viewZToPerspectiveDepth( const in float viewZ, const in float near, const in float far ) {
return ( ( near + viewZ ) * far ) / ( ( far - near ) * viewZ );
}
float perspectiveDepthToViewZ( const in float depth, const in float near, const in float far ) {
return ( near * far ) / ( ( far - near ) * depth - far );
}`,qio=`#ifdef PREMULTIPLIED_ALPHA
gl_FragColor.rgb *= gl_FragColor.a;
#endif`,Jio=`vec4 mvPosition = vec4( transformed, 1.0 );
#ifdef USE_BATCHING
mvPosition = batchingMatrix * mvPosition;
#endif
#ifdef USE_INSTANCING
mvPosition = instanceMatrix * mvPosition;
#endif
mvPosition = modelViewMatrix * mvPosition;
gl_Position = projectionMatrix * mvPosition;`,$io=`#ifdef DITHERING
gl_FragColor.rgb = dithering( gl_FragColor.rgb );
#endif`,Zio=`#ifdef DITHERING
vec3 dithering( vec3 color ) {
float grid_position = rand( gl_FragCoord.xy );
vec3 dither_shift_RGB = vec3( 0.25 / 255.0, -0.25 / 255.0, 0.25 / 255.0 );
dither_shift_RGB = mix( 2.0 * dither_shift_RGB, -2.0 * dither_shift_RGB, grid_position );
return color + dither_shift_RGB;
}
#endif`,ero=`float roughnessFactor = roughness;
#ifdef USE_ROUGHNESSMAP
vec4 texelRoughness = texture2D( roughnessMap, vRoughnessMapUv );
roughnessFactor *= texelRoughness.g;
#endif`,tro=`#ifdef USE_ROUGHNESSMAP
uniform sampler2D roughnessMap;
#endif`,nro=`#if NUM_SPOT_LIGHT_COORDS > 0
varying vec4 vSpotLightCoord[ NUM_SPOT_LIGHT_COORDS ];
#endif
#if NUM_SPOT_LIGHT_MAPS > 0
uniform sampler2D spotLightMap[ NUM_SPOT_LIGHT_MAPS ];
#endif
#ifdef USE_SHADOWMAP
#if NUM_DIR_LIGHT_SHADOWS > 0
uniform sampler2D directionalShadowMap[ NUM_DIR_LIGHT_SHADOWS ];
varying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];
struct DirectionalLightShadow {
float shadowBias;
float shadowNormalBias;
float shadowRadius;
vec2 shadowMapSize;
};
uniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];
#endif
#if NUM_SPOT_LIGHT_SHADOWS > 0
uniform sampler2D spotShadowMap[ NUM_SPOT_LIGHT_SHADOWS ];
struct SpotLightShadow {
float shadowBias;
float shadowNormalBias;
float shadowRadius;
vec2 shadowMapSize;
};
uniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];
#endif
#if NUM_POINT_LIGHT_SHADOWS > 0
uniform sampler2D pointShadowMap[ NUM_POINT_LIGHT_SHADOWS ];
varying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];
struct PointLightShadow {
float shadowBias;
float shadowNormalBias;
float shadowRadius;
vec2 shadowMapSize;
float shadowCameraNear;
float shadowCameraFar;
};
uniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];
#endif
float texture2DCompare( sampler2D depths, vec2 uv, float compare ) {
return step( compare, unpackRGBAToDepth( texture2D( depths, uv ) ) );
}
vec2 texture2DDistribution( sampler2D shadow, vec2 uv ) {
return unpackRGBATo2Half( texture2D( shadow, uv ) );
}
float VSMShadow (sampler2D shadow, vec2 uv, float compare ){
float occlusion = 1.0;
vec2 distribution = texture2DDistribution( shadow, uv );
float hard_shadow = step( compare , distribution.x );
if (hard_shadow != 1.0 ) {
float distance = compare - distribution.x ;
float variance = max( 0.00000, distribution.y * distribution.y );
float softness_probability = variance / (variance + distance * distance ); softness_probability = clamp( ( softness_probability - 0.3 ) / ( 0.95 - 0.3 ), 0.0, 1.0 ); occlusion = clamp( max( hard_shadow, softness_probability ), 0.0, 1.0 );
}
return occlusion;
}
float getShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord ) {
float shadow = 1.0;
shadowCoord.xyz /= shadowCoord.w;
shadowCoord.z += shadowBias;
bool inFrustum = shadowCoord.x >= 0.0 && shadowCoord.x <= 1.0 && shadowCoord.y >= 0.0 && shadowCoord.y <= 1.0;
bool frustumTest = inFrustum && shadowCoord.z <= 1.0;
if ( frustumTest ) {
#if defined( SHADOWMAP_TYPE_PCF )
vec2 texelSize = vec2( 1.0 ) / shadowMapSize;
float dx0 = - texelSize.x * shadowRadius;
float dy0 = - texelSize.y * shadowRadius;
float dx1 = + texelSize.x * shadowRadius;
float dy1 = + texelSize.y * shadowRadius;
float dx2 = dx0 / 2.0;
float dy2 = dy0 / 2.0;
float dx3 = dx1 / 2.0;
float dy3 = dy1 / 2.0;
shadow = (
texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +
texture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +
texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +
texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy2 ), shadowCoord.z ) +
texture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy2 ), shadowCoord.z ) +
texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy2 ), shadowCoord.z ) +
texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +
texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, 0.0 ), shadowCoord.z ) +
texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z ) +
texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, 0.0 ), shadowCoord.z ) +
texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +
texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy3 ), shadowCoord.z ) +
texture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy3 ), shadowCoord.z ) +
texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy3 ), shadowCoord.z ) +
texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +
texture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +
texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )
) * ( 1.0 / 17.0 );
#elif defined( SHADOWMAP_TYPE_PCF_SOFT )
vec2 texelSize = vec2( 1.0 ) / shadowMapSize;
float dx = texelSize.x;
float dy = texelSize.y;
vec2 uv = shadowCoord.xy;
vec2 f = fract( uv * shadowMapSize + 0.5 );
uv -= f * texelSize;
shadow = (
texture2DCompare( shadowMap, uv, shadowCoord.z ) +
texture2DCompare( shadowMap, uv + vec2( dx, 0.0 ), shadowCoord.z ) +
texture2DCompare( shadowMap, uv + vec2( 0.0, dy ), shadowCoord.z ) +
texture2DCompare( shadowMap, uv + texelSize, shadowCoord.z ) +
mix( texture2DCompare( shadowMap, uv + vec2( -dx, 0.0 ), shadowCoord.z ),
texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 0.0 ), shadowCoord.z ),
f.x ) +
mix( texture2DCompare( shadowMap, uv + vec2( -dx, dy ), shadowCoord.z ),
texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, dy ), shadowCoord.z ),
f.x ) +
mix( texture2DCompare( shadowMap, uv + vec2( 0.0, -dy ), shadowCoord.z ),
texture2DCompare( shadowMap, uv + vec2( 0.0, 2.0 * dy ), shadowCoord.z ),
f.y ) +
mix( texture2DCompare( shadowMap, uv + vec2( dx, -dy ), shadowCoord.z ),
texture2DCompare( shadowMap, uv + vec2( dx, 2.0 * dy ), shadowCoord.z ),
f.y ) +
mix( mix( texture2DCompare( shadowMap, uv + vec2( -dx, -dy ), shadowCoord.z ),
texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, -dy ), shadowCoord.z ),
f.x ),
mix( texture2DCompare( shadowMap, uv + vec2( -dx, 2.0 * dy ), shadowCoord.z ),
texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 2.0 * dy ), shadowCoord.z ),
f.x ),
f.y )
) * ( 1.0 / 9.0 );
#elif defined( SHADOWMAP_TYPE_VSM )
shadow = VSMShadow( shadowMap, shadowCoord.xy, shadowCoord.z );
#else
shadow = texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z );
#endif
}
return shadow;
}
vec2 cubeToUV( vec3 v, float texelSizeY ) {
vec3 absV = abs( v );
float scaleToCube = 1.0 / max( absV.x, max( absV.y, absV.z ) );
absV *= scaleToCube;
v *= scaleToCube * ( 1.0 - 2.0 * texelSizeY );
vec2 planar = v.xy;
float almostATexel = 1.5 * texelSizeY;
float almostOne = 1.0 - almostATexel;
if ( absV.z >= almostOne ) {
if ( v.z > 0.0 )
planar.x = 4.0 - v.x;
} else if ( absV.x >= almostOne ) {
float signX = sign( v.x );
planar.x = v.z * signX + 2.0 * signX;
} else if ( absV.y >= almostOne ) {
float signY = sign( v.y );
planar.x = v.x + 2.0 * signY + 2.0;
planar.y = v.z * signY - 2.0;
}
return vec2( 0.125, 0.25 ) * planar + vec2( 0.375, 0.75 );
}
float getPointShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord, float shadowCameraNear, float shadowCameraFar ) {
float shadow = 1.0;
vec3 lightToPosition = shadowCoord.xyz;
float lightToPositionLength = length( lightToPosition );
if ( lightToPositionLength - shadowCameraFar <= 0.0 && lightToPositionLength - shadowCameraNear >= 0.0 ) {
float dp = ( lightToPositionLength - shadowCameraNear ) / ( shadowCameraFar - shadowCameraNear ); dp += shadowBias;
vec3 bd3D = normalize( lightToPosition );
vec2 texelSize = vec2( 1.0 ) / ( shadowMapSize * vec2( 4.0, 2.0 ) );
#if defined( SHADOWMAP_TYPE_PCF ) || defined( SHADOWMAP_TYPE_PCF_SOFT ) || defined( SHADOWMAP_TYPE_VSM )
vec2 offset = vec2( - 1, 1 ) * shadowRadius * texelSize.y;
shadow = (
texture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyy, texelSize.y ), dp ) +
texture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyy, texelSize.y ), dp ) +
texture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyx, texelSize.y ), dp ) +
texture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyx, texelSize.y ), dp ) +
texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp ) +
texture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxy, texelSize.y ), dp ) +
texture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxy, texelSize.y ), dp ) +
texture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxx, texelSize.y ), dp ) +
texture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxx, texelSize.y ), dp )
) * ( 1.0 / 9.0 );
#else
shadow = texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp );
#endif
}
return shadow;
}
#endif`,oro=`#if NUM_SPOT_LIGHT_COORDS > 0
uniform mat4 spotLightMatrix[ NUM_SPOT_LIGHT_COORDS ];
varying vec4 vSpotLightCoord[ NUM_SPOT_LIGHT_COORDS ];
#endif
#ifdef USE_SHADOWMAP
#if NUM_DIR_LIGHT_SHADOWS > 0
uniform mat4 directionalShadowMatrix[ NUM_DIR_LIGHT_SHADOWS ];
varying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];
struct DirectionalLightShadow {
float shadowBias;
float shadowNormalBias;
float shadowRadius;
vec2 shadowMapSize;
};
uniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];
#endif
#if NUM_SPOT_LIGHT_SHADOWS > 0
struct SpotLightShadow {
float shadowBias;
float shadowNormalBias;
float shadowRadius;
vec2 shadowMapSize;
};
uniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];
#endif
#if NUM_POINT_LIGHT_SHADOWS > 0
uniform mat4 pointShadowMatrix[ NUM_POINT_LIGHT_SHADOWS ];
varying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];
struct PointLightShadow {
float shadowBias;
float shadowNormalBias;
float shadowRadius;
vec2 shadowMapSize;
float shadowCameraNear;
float shadowCameraFar;
};
uniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];
#endif
#endif`,iro=`#if ( defined( USE_SHADOWMAP ) && ( NUM_DIR_LIGHT_SHADOWS > 0 || NUM_POINT_LIGHT_SHADOWS > 0 ) ) || ( NUM_SPOT_LIGHT_COORDS > 0 )
vec3 shadowWorldNormal = inverseTransformDirection( transformedNormal, viewMatrix );
vec4 shadowWorldPosition;
#endif
#if defined( USE_SHADOWMAP )
#if NUM_DIR_LIGHT_SHADOWS > 0
#pragma unroll_loop_start
for ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {
shadowWorldPosition = worldPosition + vec4( shadowWorldNormal * directionalLightShadows[ i ].shadowNormalBias, 0 );
vDirectionalShadowCoord[ i ] = directionalShadowMatrix[ i ] * shadowWorldPosition;
}
#pragma unroll_loop_end
#endif
#if NUM_POINT_LIGHT_SHADOWS > 0
#pragma unroll_loop_start
for ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {
shadowWorldPosition = worldPosition + vec4( shadowWorldNormal * pointLightShadows[ i ].shadowNormalBias, 0 );
vPointShadowCoord[ i ] = pointShadowMatrix[ i ] * shadowWorldPosition;
}
#pragma unroll_loop_end
#endif
#endif
#if NUM_SPOT_LIGHT_COORDS > 0
#pragma unroll_loop_start
for ( int i = 0; i < NUM_SPOT_LIGHT_COORDS; i ++ ) {
shadowWorldPosition = worldPosition;
#if ( defined( USE_SHADOWMAP ) && UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )
shadowWorldPosition.xyz += shadowWorldNormal * spotLightShadows[ i ].shadowNormalBias;
#endif
vSpotLightCoord[ i ] = spotLightMatrix[ i ] * shadowWorldPosition;
}
#pragma unroll_loop_end
#endif`,rro=`float getShadowMask() {
float shadow = 1.0;
#ifdef USE_SHADOWMAP
#if NUM_DIR_LIGHT_SHADOWS > 0
DirectionalLightShadow directionalLight;
#pragma unroll_loop_start
for ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {
directionalLight = directionalLightShadows[ i ];
shadow *= receiveShadow ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;
}
#pragma unroll_loop_end
#endif
#if NUM_SPOT_LIGHT_SHADOWS > 0
SpotLightShadow spotLight;
#pragma unroll_loop_start
for ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) {
spotLight = spotLightShadows[ i ];
shadow *= receiveShadow ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowBias, spotLight.shadowRadius, vSpotLightCoord[ i ] ) : 1.0;
}
#pragma unroll_loop_end
#endif
#if NUM_POINT_LIGHT_SHADOWS > 0
PointLightShadow pointLight;
#pragma unroll_loop_start
for ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {
pointLight = pointLightShadows[ i ];
shadow *= receiveShadow ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ], pointLight.shadowCameraNear, pointLight.shadowCameraFar ) : 1.0;
}
#pragma unroll_loop_end
#endif
#endif
return shadow;
}`,sro=`#ifdef USE_SKINNING
mat4 boneMatX = getBoneMatrix( skinIndex.x );
mat4 boneMatY = getBoneMatrix( skinIndex.y );
mat4 boneMatZ = getBoneMatrix( skinIndex.z );
mat4 boneMatW = getBoneMatrix( skinIndex.w );
#endif`,aro=`#ifdef USE_SKINNING
uniform mat4 bindMatrix;
uniform mat4 bindMatrixInverse;
uniform highp sampler2D boneTexture;
mat4 getBoneMatrix( const in float i ) {
int size = textureSize( boneTexture, 0 ).x;
int j = int( i ) * 4;
int x = j % size;
int y = j / size;
vec4 v1 = texelFetch( boneTexture, ivec2( x, y ), 0 );
vec4 v2 = texelFetch( boneTexture, ivec2( x + 1, y ), 0 );
vec4 v3 = texelFetch( boneTexture, ivec2( x + 2, y ), 0 );
vec4 v4 = texelFetch( boneTexture, ivec2( x + 3, y ), 0 );
return mat4( v1, v2, v3, v4 );
}
#endif`,cro=`#ifdef USE_SKINNING
vec4 skinVertex = bindMatrix * vec4( transformed, 1.0 );
vec4 skinned = vec4( 0.0 );
skinned += boneMatX * skinVertex * skinWeight.x;
skinned += boneMatY * skinVertex * skinWeight.y;
skinned += boneMatZ * skinVertex * skinWeight.z;
skinned += boneMatW * skinVertex * skinWeight.w;
transformed = ( bindMatrixInverse * skinned ).xyz;
#endif`,lro=`#ifdef USE_SKINNING
mat4 skinMatrix = mat4( 0.0 );
skinMatrix += skinWeight.x * boneMatX;
skinMatrix += skinWeight.y * boneMatY;
skinMatrix += skinWeight.z * boneMatZ;
skinMatrix += skinWeight.w * boneMatW;
skinMatrix = bindMatrixInverse * skinMatrix * bindMatrix;
objectNormal = vec4( skinMatrix * vec4( objectNormal, 0.0 ) ).xyz;
#ifdef USE_TANGENT
objectTangent = vec4( skinMatrix * vec4( objectTangent, 0.0 ) ).xyz;
#endif
#endif`,dro=`float specularStrength;
#ifdef USE_SPECULARMAP
vec4 texelSpecular = texture2D( specularMap, vSpecularMapUv );
specularStrength = texelSpecular.r;
#else
specularStrength = 1.0;
#endif`,uro=`#ifdef USE_SPECULARMAP
uniform sampler2D specularMap;
#endif`,hro=`#if defined( TONE_MAPPING )
gl_FragColor.rgb = toneMapping( gl_FragColor.rgb );
#endif`,mro=`#ifndef saturate
#define saturate( a ) clamp( a, 0.0, 1.0 )
#endif
uniform float toneMappingExposure;
vec3 LinearToneMapping( vec3 color ) {
return saturate( toneMappingExposure * color );
}
vec3 ReinhardToneMapping( vec3 color ) {
color *= toneMappingExposure;
return saturate( color / ( vec3( 1.0 ) + color ) );
}
vec3 OptimizedCineonToneMapping( vec3 color ) {
color *= toneMappingExposure;
color = max( vec3( 0.0 ), color - 0.004 );
return pow( ( color * ( 6.2 * color + 0.5 ) ) / ( color * ( 6.2 * color + 1.7 ) + 0.06 ), vec3( 2.2 ) );
}
vec3 RRTAndODTFit( vec3 v ) {
vec3 a = v * ( v + 0.0245786 ) - 0.000090537;
vec3 b = v * ( 0.983729 * v + 0.4329510 ) + 0.238081;
return a / b;
}
vec3 ACESFilmicToneMapping( vec3 color ) {
const mat3 ACESInputMat = mat3(
vec3( 0.59719, 0.07600, 0.02840 ), vec3( 0.35458, 0.90834, 0.13383 ),
vec3( 0.04823, 0.01566, 0.83777 )
);
const mat3 ACESOutputMat = mat3(
vec3( 1.60475, -0.10208, -0.00327 ), vec3( -0.53108, 1.10813, -0.07276 ),
vec3( -0.07367, -0.00605, 1.07602 )
);
color *= toneMappingExposure / 0.6;
color = ACESInputMat * color;
color = RRTAndODTFit( color );
color = ACESOutputMat * color;
return saturate( color );
}
const mat3 LINEAR_REC2020_TO_LINEAR_SRGB = mat3(
vec3( 1.6605, - 0.1246, - 0.0182 ),
vec3( - 0.5876, 1.1329, - 0.1006 ),
vec3( - 0.0728, - 0.0083, 1.1187 )
);
const mat3 LINEAR_SRGB_TO_LINEAR_REC2020 = mat3(
vec3( 0.6274, 0.0691, 0.0164 ),
vec3( 0.3293, 0.9195, 0.0880 ),
vec3( 0.0433, 0.0113, 0.8956 )
);
vec3 agxDefaultContrastApprox( vec3 x ) {
vec3 x2 = x * x;
vec3 x4 = x2 * x2;
return + 15.5 * x4 * x2
- 40.14 * x4 * x
+ 31.96 * x4
- 6.868 * x2 * x
+ 0.4298 * x2
+ 0.1191 * x
- 0.00232;
}
vec3 AgXToneMapping( vec3 color ) {
const mat3 AgXInsetMatrix = mat3(
vec3( 0.856627153315983, 0.137318972929847, 0.11189821299995 ),
vec3( 0.0951212405381588, 0.761241990602591, 0.0767994186031903 ),
vec3( 0.0482516061458583, 0.101439036467562, 0.811302368396859 )
);
const mat3 AgXOutsetMatrix = mat3(
vec3( 1.1271005818144368, - 0.1413297634984383, - 0.14132976349843826 ),
vec3( - 0.11060664309660323, 1.157823702216272, - 0.11060664309660294 ),
vec3( - 0.016493938717834573, - 0.016493938717834257, 1.2519364065950405 )
);
const float AgxMinEv = - 12.47393; const float AgxMaxEv = 4.026069;
color *= toneMappingExposure;
color = LINEAR_SRGB_TO_LINEAR_REC2020 * color;
color = AgXInsetMatrix * color;
color = max( color, 1e-10 ); color = log2( color );
color = ( color - AgxMinEv ) / ( AgxMaxEv - AgxMinEv );
color = clamp( color, 0.0, 1.0 );
color = agxDefaultContrastApprox( color );
color = AgXOutsetMatrix * color;
color = pow( max( vec3( 0.0 ), color ), vec3( 2.2 ) );
color = LINEAR_REC2020_TO_LINEAR_SRGB * color;
color = clamp( color, 0.0, 1.0 );
return color;
}
vec3 NeutralToneMapping( vec3 color ) {
const float StartCompression = 0.8 - 0.04;
const float Desaturation = 0.15;
color *= toneMappingExposure;
float x = min( color.r, min( color.g, color.b ) );
float offset = x < 0.08 ? x - 6.25 * x * x : 0.04;
color -= offset;
float peak = max( color.r, max( color.g, color.b ) );
if ( peak < StartCompression ) return color;
float d = 1. - StartCompression;
float newPeak = 1. - d * d / ( peak + d - StartCompression );
color *= newPeak / peak;
float g = 1. - 1. / ( Desaturation * ( peak - newPeak ) + 1. );
return mix( color, vec3( newPeak ), g );
}
vec3 CustomToneMapping( vec3 color ) { return color; }`,pro=`#ifdef USE_TRANSMISSION
material.transmission = transmission;
material.transmissionAlpha = 1.0;
material.thickness = thickness;
material.attenuationDistance = attenuationDistance;
material.attenuationColor = attenuationColor;
#ifdef USE_TRANSMISSIONMAP
material.transmission *= texture2D( transmissionMap, vTransmissionMapUv ).r;
#endif
#ifdef USE_THICKNESSMAP
material.thickness *= texture2D( thicknessMap, vThicknessMapUv ).g;
#endif
vec3 pos = vWorldPosition;
vec3 v = normalize( cameraPosition - pos );
vec3 n = inverseTransformDirection( normal, viewMatrix );
vec4 transmitted = getIBLVolumeRefraction(
n, v, material.roughness, material.diffuseColor, material.specularColor, material.specularF90,
pos, modelMatrix, viewMatrix, projectionMatrix, material.dispersion, material.ior, material.thickness,
material.attenuationColor, material.attenuationDistance );
material.transmissionAlpha = mix( material.transmissionAlpha, transmitted.a, material.transmission );
totalDiffuse = mix( totalDiffuse, transmitted.rgb, material.transmission );
#endif`,Aro=`#ifdef USE_TRANSMISSION
uniform float transmission;
uniform float thickness;
uniform float attenuationDistance;
uniform vec3 attenuationColor;
#ifdef USE_TRANSMISSIONMAP
uniform sampler2D transmissionMap;
#endif
#ifdef USE_THICKNESSMAP
uniform sampler2D thicknessMap;
#endif
uniform vec2 transmissionSamplerSize;
uniform sampler2D transmissionSamplerMap;
uniform mat4 modelMatrix;
uniform mat4 projectionMatrix;
varying vec3 vWorldPosition;
float w0( float a ) {
return ( 1.0 / 6.0 ) * ( a * ( a * ( - a + 3.0 ) - 3.0 ) + 1.0 );
}
float w1( float a ) {
return ( 1.0 / 6.0 ) * ( a * a * ( 3.0 * a - 6.0 ) + 4.0 );
}
float w2( float a ){
return ( 1.0 / 6.0 ) * ( a * ( a * ( - 3.0 * a + 3.0 ) + 3.0 ) + 1.0 );
}
float w3( float a ) {
return ( 1.0 / 6.0 ) * ( a * a * a );
}
float g0( float a ) {
return w0( a ) + w1( a );
}
float g1( float a ) {
return w2( a ) + w3( a );
}
float h0( float a ) {
return - 1.0 + w1( a ) / ( w0( a ) + w1( a ) );
}
float h1( float a ) {
return 1.0 + w3( a ) / ( w2( a ) + w3( a ) );
}
vec4 bicubic( sampler2D tex, vec2 uv, vec4 texelSize, float lod ) {
uv = uv * texelSize.zw + 0.5;
vec2 iuv = floor( uv );
vec2 fuv = fract( uv );
float g0x = g0( fuv.x );
float g1x = g1( fuv.x );
float h0x = h0( fuv.x );
float h1x = h1( fuv.x );
float h0y = h0( fuv.y );
float h1y = h1( fuv.y );
vec2 p0 = ( vec2( iuv.x + h0x, iuv.y + h0y ) - 0.5 ) * texelSize.xy;
vec2 p1 = ( vec2( iuv.x + h1x, iuv.y + h0y ) - 0.5 ) * texelSize.xy;
vec2 p2 = ( vec2( iuv.x + h0x, iuv.y + h1y ) - 0.5 ) * texelSize.xy;
vec2 p3 = ( vec2( iuv.x + h1x, iuv.y + h1y ) - 0.5 ) * texelSize.xy;
return g0( fuv.y ) * ( g0x * textureLod( tex, p0, lod ) + g1x * textureLod( tex, p1, lod ) ) +
g1( fuv.y ) * ( g0x * textureLod( tex, p2, lod ) + g1x * textureLod( tex, p3, lod ) );
}
vec4 textureBicubic( sampler2D sampler, vec2 uv, float lod ) {
vec2 fLodSize = vec2( textureSize( sampler, int( lod ) ) );
vec2 cLodSize = vec2( textureSize( sampler, int( lod + 1.0 ) ) );
vec2 fLodSizeInv = 1.0 / fLodSize;
vec2 cLodSizeInv = 1.0 / cLodSize;
vec4 fSample = bicubic( sampler, uv, vec4( fLodSizeInv, fLodSize ), floor( lod ) );
vec4 cSample = bicubic( sampler, uv, vec4( cLodSizeInv, cLodSize ), ceil( lod ) );
return mix( fSample, cSample, fract( lod ) );
}
vec3 getVolumeTransmissionRay( const in vec3 n, const in vec3 v, const in float thickness, const in float ior, const in mat4 modelMatrix ) {
vec3 refractionVector = refract( - v, normalize( n ), 1.0 / ior );
vec3 modelScale;
modelScale.x = length( vec3( modelMatrix[ 0 ].xyz ) );
modelScale.y = length( vec3( modelMatrix[ 1 ].xyz ) );
modelScale.z = length( vec3( modelMatrix[ 2 ].xyz ) );
return normalize( refractionVector ) * thickness * modelScale;
}
float applyIorToRoughness( const in float roughness, const in float ior ) {
return roughness * clamp( ior * 2.0 - 2.0, 0.0, 1.0 );
}
vec4 getTransmissionSample( const in vec2 fragCoord, const in float roughness, const in float ior ) {
float lod = log2( transmissionSamplerSize.x ) * applyIorToRoughness( roughness, ior );
return textureBicubic( transmissionSamplerMap, fragCoord.xy, lod );
}
vec3 volumeAttenuation( const in float transmissionDistance, const in vec3 attenuationColor, const in float attenuationDistance ) {
if ( isinf( attenuationDistance ) ) {
return vec3( 1.0 );
} else {
vec3 attenuationCoefficient = -log( attenuationColor ) / attenuationDistance;
vec3 transmittance = exp( - attenuationCoefficient * transmissionDistance ); return transmittance;
}
}
vec4 getIBLVolumeRefraction( const in vec3 n, const in vec3 v, const in float roughness, const in vec3 diffuseColor,
const in vec3 specularColor, const in float specularF90, const in vec3 position, const in mat4 modelMatrix,
const in mat4 viewMatrix, const in mat4 projMatrix, const in float dispersion, const in float ior, const in float thickness,
const in vec3 attenuationColor, const in float attenuationDistance ) {
vec4 transmittedLight;
vec3 transmittance;
#ifdef USE_DISPERSION
float halfSpread = ( ior - 1.0 ) * 0.025 * dispersion;
vec3 iors = vec3( ior - halfSpread, ior, ior + halfSpread );
for ( int i = 0; i < 3; i ++ ) {
vec3 transmissionRay = getVolumeTransmissionRay( n, v, thickness, iors[ i ], modelMatrix );
vec3 refractedRayExit = position + transmissionRay;
vec4 ndcPos = projMatrix * viewMatrix * vec4( refractedRayExit, 1.0 );
vec2 refractionCoords = ndcPos.xy / ndcPos.w;
refractionCoords += 1.0;
refractionCoords /= 2.0;
vec4 transmissionSample = getTransmissionSample( refractionCoords, roughness, iors[ i ] );
transmittedLight[ i ] = transmissionSample[ i ];
transmittedLight.a += transmissionSample.a;
transmittance[ i ] = diffuseColor[ i ] * volumeAttenuation( length( transmissionRay ), attenuationColor, attenuationDistance )[ i ];
}
transmittedLight.a /= 3.0;
#else
vec3 transmissionRay = getVolumeTransmissionRay( n, v, thickness, ior, modelMatrix );
vec3 refractedRayExit = position + transmissionRay;
vec4 ndcPos = projMatrix * viewMatrix * vec4( refractedRayExit, 1.0 );
vec2 refractionCoords = ndcPos.xy / ndcPos.w;
refractionCoords += 1.0;
refractionCoords /= 2.0;
transmittedLight = getTransmissionSample( refractionCoords, roughness, ior );
transmittance = diffuseColor * volumeAttenuation( length( transmissionRay ), attenuationColor, attenuationDistance );
#endif
vec3 attenuatedColor = transmittance * transmittedLight.rgb;
vec3 F = EnvironmentBRDF( n, v, specularColor, specularF90, roughness );
float transmittanceFactor = ( transmittance.r + transmittance.g + transmittance.b ) / 3.0;
return vec4( ( 1.0 - F ) * attenuatedColor, 1.0 - ( 1.0 - transmittedLight.a ) * transmittanceFactor );
}
#endif`,_ro=`#if defined( USE_UV ) || defined( USE_ANISOTROPY )
varying vec2 vUv;
#endif
#ifdef USE_MAP
varying vec2 vMapUv;
#endif
#ifdef USE_ALPHAMAP
varying vec2 vAlphaMapUv;
#endif
#ifdef USE_LIGHTMAP
varying vec2 vLightMapUv;
#endif
#ifdef USE_AOMAP
varying vec2 vAoMapUv;
#endif
#ifdef USE_BUMPMAP
varying vec2 vBumpMapUv;
#endif
#ifdef USE_NORMALMAP
varying vec2 vNormalMapUv;
#endif
#ifdef USE_EMISSIVEMAP
varying vec2 vEmissiveMapUv;
#endif
#ifdef USE_METALNESSMAP
varying vec2 vMetalnessMapUv;
#endif
#ifdef USE_ROUGHNESSMAP
varying vec2 vRoughnessMapUv;
#endif
#ifdef USE_ANISOTROPYMAP
varying vec2 vAnisotropyMapUv;
#endif
#ifdef USE_CLEARCOATMAP
varying vec2 vClearcoatMapUv;
#endif
#ifdef USE_CLEARCOAT_NORMALMAP
varying vec2 vClearcoatNormalMapUv;
#endif
#ifdef USE_CLEARCOAT_ROUGHNESSMAP
varying vec2 vClearcoatRoughnessMapUv;
#endif
#ifdef USE_IRIDESCENCEMAP
varying vec2 vIridescenceMapUv;
#endif
#ifdef USE_IRIDESCENCE_THICKNESSMAP
varying vec2 vIridescenceThicknessMapUv;
#endif
#ifdef USE_SHEEN_COLORMAP
varying vec2 vSheenColorMapUv;
#endif
#ifdef USE_SHEEN_ROUGHNESSMAP
varying vec2 vSheenRoughnessMapUv;
#endif
#ifdef USE_SPECULARMAP
varying vec2 vSpecularMapUv;
#endif
#ifdef USE_SPECULAR_COLORMAP
varying vec2 vSpecularColorMapUv;
#endif
#ifdef USE_SPECULAR_INTENSITYMAP
varying vec2 vSpecularIntensityMapUv;
#endif
#ifdef USE_TRANSMISSIONMAP
uniform mat3 transmissionMapTransform;
varying vec2 vTransmissionMapUv;
#endif
#ifdef USE_THICKNESSMAP
uniform mat3 thicknessMapTransform;
varying vec2 vThicknessMapUv;
#endif`,gro=`#if defined( USE_UV ) || defined( USE_ANISOTROPY )
varying vec2 vUv;
#endif
#ifdef USE_MAP
uniform mat3 mapTransform;
varying vec2 vMapUv;
#endif
#ifdef USE_ALPHAMAP
uniform mat3 alphaMapTransform;
varying vec2 vAlphaMapUv;
#endif
#ifdef USE_LIGHTMAP
uniform mat3 lightMapTransform;
varying vec2 vLightMapUv;
#endif
#ifdef USE_AOMAP
uniform mat3 aoMapTransform;
varying vec2 vAoMapUv;
#endif
#ifdef USE_BUMPMAP
uniform mat3 bumpMapTransform;
varying vec2 vBumpMapUv;
#endif
#ifdef USE_NORMALMAP
uniform mat3 normalMapTransform;
varying vec2 vNormalMapUv;
#endif
#ifdef USE_DISPLACEMENTMAP
uniform mat3 displacementMapTransform;
varying vec2 vDisplacementMapUv;
#endif
#ifdef USE_EMISSIVEMAP
uniform mat3 emissiveMapTransform;
varying vec2 vEmissiveMapUv;
#endif
#ifdef USE_METALNESSMAP
uniform mat3 metalnessMapTransform;
varying vec2 vMetalnessMapUv;
#endif
#ifdef USE_ROUGHNESSMAP
uniform mat3 roughnessMapTransform;
varying vec2 vRoughnessMapUv;
#endif
#ifdef USE_ANISOTROPYMAP
uniform mat3 anisotropyMapTransform;
varying vec2 vAnisotropyMapUv;
#endif
#ifdef USE_CLEARCOATMAP
uniform mat3 clearcoatMapTransform;
varying vec2 vClearcoatMapUv;
#endif
#ifdef USE_CLEARCOAT_NORMALMAP
uniform mat3 clearcoatNormalMapTransform;
varying vec2 vClearcoatNormalMapUv;
#endif
#ifdef USE_CLEARCOAT_ROUGHNESSMAP
uniform mat3 clearcoatRoughnessMapTransform;
varying vec2 vClearcoatRoughnessMapUv;
#endif
#ifdef USE_SHEEN_COLORMAP
uniform mat3 sheenColorMapTransform;
varying vec2 vSheenColorMapUv;
#endif
#ifdef USE_SHEEN_ROUGHNESSMAP
uniform mat3 sheenRoughnessMapTransform;
varying vec2 vSheenRoughnessMapUv;
#endif
#ifdef USE_IRIDESCENCEMAP
uniform mat3 iridescenceMapTransform;
varying vec2 vIridescenceMapUv;
#endif
#ifdef USE_IRIDESCENCE_THICKNESSMAP
uniform mat3 iridescenceThicknessMapTransform;
varying vec2 vIridescenceThicknessMapUv;
#endif
#ifdef USE_SPECULARMAP
uniform mat3 specularMapTransform;
varying vec2 vSpecularMapUv;
#endif
#ifdef USE_SPECULAR_COLORMAP
uniform mat3 specularColorMapTransform;
varying vec2 vSpecularColorMapUv;
#endif
#ifdef USE_SPECULAR_INTENSITYMAP
uniform mat3 specularIntensityMapTransform;
varying vec2 vSpecularIntensityMapUv;
#endif
#ifdef USE_TRANSMISSIONMAP
uniform mat3 transmissionMapTransform;
varying vec2 vTransmissionMapUv;
#endif
#ifdef USE_THICKNESSMAP
uniform mat3 thicknessMapTransform;
varying vec2 vThicknessMapUv;
#endif`,fro=`#if defined( USE_UV ) || defined( USE_ANISOTROPY )
vUv = vec3( uv, 1 ).xy;
#endif
#ifdef USE_MAP
vMapUv = ( mapTransform * vec3( MAP_UV, 1 ) ).xy;
#endif
#ifdef USE_ALPHAMAP
vAlphaMapUv = ( alphaMapTransform * vec3( ALPHAMAP_UV, 1 ) ).xy;
#endif
#ifdef USE_LIGHTMAP
vLightMapUv = ( lightMapTransform * vec3( LIGHTMAP_UV, 1 ) ).xy;
#endif
#ifdef USE_AOMAP
vAoMapUv = ( aoMapTransform * vec3( AOMAP_UV, 1 ) ).xy;
#endif
#ifdef USE_BUMPMAP
vBumpMapUv = ( bumpMapTransform * vec3( BUMPMAP_UV, 1 ) ).xy;
#endif
#ifdef USE_NORMALMAP
vNormalMapUv = ( normalMapTransform * vec3( NORMALMAP_UV, 1 ) ).xy;
#endif
#ifdef USE_DISPLACEMENTMAP
vDisplacementMapUv = ( displacementMapTransform * vec3( DISPLACEMENTMAP_UV, 1 ) ).xy;
#endif
#ifdef USE_EMISSIVEMAP
vEmissiveMapUv = ( emissiveMapTransform * vec3( EMISSIVEMAP_UV, 1 ) ).xy;
#endif
#ifdef USE_METALNESSMAP
vMetalnessMapUv = ( metalnessMapTransform * vec3( METALNESSMAP_UV, 1 ) ).xy;
#endif
#ifdef USE_ROUGHNESSMAP
vRoughnessMapUv = ( roughnessMapTransform * vec3( ROUGHNESSMAP_UV, 1 ) ).xy;
#endif
#ifdef USE_ANISOTROPYMAP
vAnisotropyMapUv = ( anisotropyMapTransform * vec3( ANISOTROPYMAP_UV, 1 ) ).xy;
#endif
#ifdef USE_CLEARCOATMAP
vClearcoatMapUv = ( clearcoatMapTransform * vec3( CLEARCOATMAP_UV, 1 ) ).xy;
#endif
#ifdef USE_CLEARCOAT_NORMALMAP
vClearcoatNormalMapUv = ( clearcoatNormalMapTransform * vec3( CLEARCOAT_NORMALMAP_UV, 1 ) ).xy;
#endif
#ifdef USE_CLEARCOAT_ROUGHNESSMAP
vClearcoatRoughnessMapUv = ( clearcoatRoughnessMapTransform * vec3( CLEARCOAT_ROUGHNESSMAP_UV, 1 ) ).xy;
#endif
#ifdef USE_IRIDESCENCEMAP
vIridescenceMapUv = ( iridescenceMapTransform * vec3( IRIDESCENCEMAP_UV, 1 ) ).xy;
#endif
#ifdef USE_IRIDESCENCE_THICKNESSMAP
vIridescenceThicknessMapUv = ( iridescenceThicknessMapTransform * vec3( IRIDESCENCE_THICKNESSMAP_UV, 1 ) ).xy;
#endif
#ifdef USE_SHEEN_COLORMAP
vSheenColorMapUv = ( sheenColorMapTransform * vec3( SHEEN_COLORMAP_UV, 1 ) ).xy;
#endif
#ifdef USE_SHEEN_ROUGHNESSMAP
vSheenRoughnessMapUv = ( sheenRoughnessMapTransform * vec3( SHEEN_ROUGHNESSMAP_UV, 1 ) ).xy;
#endif
#ifdef USE_SPECULARMAP
vSpecularMapUv = ( specularMapTransform * vec3( SPECULARMAP_UV, 1 ) ).xy;
#endif
#ifdef USE_SPECULAR_COLORMAP
vSpecularColorMapUv = ( specularColorMapTransform * vec3( SPECULAR_COLORMAP_UV, 1 ) ).xy;
#endif
#ifdef USE_SPECULAR_INTENSITYMAP
vSpecularIntensityMapUv = ( specularIntensityMapTransform * vec3( SPECULAR_INTENSITYMAP_UV, 1 ) ).xy;
#endif
#ifdef USE_TRANSMISSIONMAP
vTransmissionMapUv = ( transmissionMapTransform * vec3( TRANSMISSIONMAP_UV, 1 ) ).xy;
#endif
#ifdef USE_THICKNESSMAP
vThicknessMapUv = ( thicknessMapTransform * vec3( THICKNESSMAP_UV, 1 ) ).xy;
#endif`,yro=`#if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP ) || defined ( USE_TRANSMISSION ) || NUM_SPOT_LIGHT_COORDS > 0
vec4 worldPosition = vec4( transformed, 1.0 );
#ifdef USE_BATCHING
worldPosition = batchingMatrix * worldPosition;
#endif
#ifdef USE_INSTANCING
worldPosition = instanceMatrix * worldPosition;
#endif
worldPosition = modelMatrix * worldPosition;
#endif`,xro=`varying vec2 vUv;
uniform mat3 uvTransform;
void main() {
vUv = ( uvTransform * vec3( uv, 1 ) ).xy;
gl_Position = vec4( position.xy, 1.0, 1.0 );
}`,Cro=`uniform sampler2D t2D;
uniform float backgroundIntensity;
varying vec2 vUv;
void main() {
vec4 texColor = texture2D( t2D, vUv );
#ifdef DECODE_VIDEO_TEXTURE
texColor = vec4( mix( pow( texColor.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), texColor.rgb * 0.0773993808, vec3( lessThanEqual( texColor.rgb, vec3( 0.04045 ) ) ) ), texColor.w );
#endif
texColor.rgb *= backgroundIntensity;
gl_FragColor = texColor;
#include <tonemapping_fragment>
#include <colorspace_fragment>
}`,Iro=`varying vec3 vWorldDirection;
#include <common>
void main() {
vWorldDirection = transformDirection( position, modelMatrix );
#include <begin_vertex>
#include <project_vertex>
gl_Position.z = gl_Position.w;
}`,bro=`#ifdef ENVMAP_TYPE_CUBE
uniform samplerCube envMap;
#elif defined( ENVMAP_TYPE_CUBE_UV )
uniform sampler2D envMap;
#endif
uniform float flipEnvMap;
uniform float backgroundBlurriness;
uniform float backgroundIntensity;
uniform mat3 backgroundRotation;
varying vec3 vWorldDirection;
#include <cube_uv_reflection_fragment>
void main() {
#ifdef ENVMAP_TYPE_CUBE
vec4 texColor = textureCube( envMap, backgroundRotation * vec3( flipEnvMap * vWorldDirection.x, vWorldDirection.yz ) );
#elif defined( ENVMAP_TYPE_CUBE_UV )
vec4 texColor = textureCubeUV( envMap, backgroundRotation * vWorldDirection, backgroundBlurriness );
#else
vec4 texColor = vec4( 0.0, 0.0, 0.0, 1.0 );
#endif
texColor.rgb *= backgroundIntensity;
gl_FragColor = texColor;
#include <tonemapping_fragment>
#include <colorspace_fragment>
}`,Sro=`varying vec3 vWorldDirection;
#include <common>
void main() {
vWorldDirection = transformDirection( position, modelMatrix );
#include <begin_vertex>
#include <project_vertex>
gl_Position.z = gl_Position.w;
}`,Pro=`uniform samplerCube tCube;
uniform float tFlip;
uniform float opacity;
varying vec3 vWorldDirection;
void main() {
vec4 texColor = textureCube( tCube, vec3( tFlip * vWorldDirection.x, vWorldDirection.yz ) );
gl_FragColor = texColor;
gl_FragColor.a *= opacity;
#include <tonemapping_fragment>
#include <colorspace_fragment>
}`,vro=`#include <common>
#include <batching_pars_vertex>
#include <uv_pars_vertex>
#include <displacementmap_pars_vertex>
#include <morphtarget_pars_vertex>
#include <skinning_pars_vertex>
#include <logdepthbuf_pars_vertex>
#include <clipping_planes_pars_vertex>
varying vec2 vHighPrecisionZW;
void main() {
#include <uv_vertex>
#include <batching_vertex>
#include <skinbase_vertex>
#include <morphinstance_vertex>
#ifdef USE_DISPLACEMENTMAP
#include <beginnormal_vertex>
#include <morphnormal_vertex>
#include <skinnormal_vertex>
#endif
#include <begin_vertex>
#include <morphtarget_vertex>
#include <skinning_vertex>
#include <displacementmap_vertex>
#include <project_vertex>
#include <logdepthbuf_vertex>
#include <clipping_planes_vertex>
vHighPrecisionZW = gl_Position.zw;
}`,Ero=`#if DEPTH_PACKING == 3200
uniform float opacity;
#endif
#include <common>
#include <packing>
#include <uv_pars_fragment>
#include <map_pars_fragment>
#include <alphamap_pars_fragment>
#include <alphatest_pars_fragment>
#include <alphahash_pars_fragment>
#include <logdepthbuf_pars_fragment>
#include <clipping_planes_pars_fragment>
varying vec2 vHighPrecisionZW;
void main() {
vec4 diffuseColor = vec4( 1.0 );
#include <clipping_planes_fragment>
#if DEPTH_PACKING == 3200
diffuseColor.a = opacity;
#endif
#include <map_fragment>
#include <alphamap_fragment>
#include <alphatest_fragment>
#include <alphahash_fragment>
#include <logdepthbuf_fragment>
float fragCoordZ = 0.5 * vHighPrecisionZW[0] / vHighPrecisionZW[1] + 0.5;
#if DEPTH_PACKING == 3200
gl_FragColor = vec4( vec3( 1.0 - fragCoordZ ), opacity );
#elif DEPTH_PACKING == 3201
gl_FragColor = packDepthToRGBA( fragCoordZ );
#endif
}`,Mro=`#define DISTANCE
varying vec3 vWorldPosition;
#include <common>
#include <batching_pars_vertex>
#include <uv_pars_vertex>
#include <displacementmap_pars_vertex>
#include <morphtarget_pars_vertex>
#include <skinning_pars_vertex>
#include <clipping_planes_pars_vertex>
void main() {
#include <uv_vertex>
#include <batching_vertex>
#include <skinbase_vertex>
#include <morphinstance_vertex>
#ifdef USE_DISPLACEMENTMAP
#include <beginnormal_vertex>
#include <morphnormal_vertex>
#include <skinnormal_vertex>
#endif
#include <begin_vertex>
#include <morphtarget_vertex>
#include <skinning_vertex>
#include <displacementmap_vertex>
#include <project_vertex>
#include <worldpos_vertex>
#include <clipping_planes_vertex>
vWorldPosition = worldPosition.xyz;
}`,Bro=`#define DISTANCE
uniform vec3 referencePosition;
uniform float nearDistance;
uniform float farDistance;
varying vec3 vWorldPosition;
#include <common>
#include <packing>
#include <uv_pars_fragment>
#include <map_pars_fragment>
#include <alphamap_pars_fragment>
#include <alphatest_pars_fragment>
#include <alphahash_pars_fragment>
#include <clipping_planes_pars_fragment>
void main () {
vec4 diffuseColor = vec4( 1.0 );
#include <clipping_planes_fragment>
#include <map_fragment>
#include <alphamap_fragment>
#include <alphatest_fragment>
#include <alphahash_fragment>
float dist = length( vWorldPosition - referencePosition );
dist = ( dist - nearDistance ) / ( farDistance - nearDistance );
dist = saturate( dist );
gl_FragColor = packDepthToRGBA( dist );
}`,wro=`varying vec3 vWorldDirection;
#include <common>
void main() {
vWorldDirection = transformDirection( position, modelMatrix );
#include <begin_vertex>
#include <project_vertex>
}`,Tro=`uniform sampler2D tEquirect;
varying vec3 vWorldDirection;
#include <common>
void main() {
vec3 direction = normalize( vWorldDirection );
vec2 sampleUV = equirectUv( direction );
gl_FragColor = texture2D( tEquirect, sampleUV );
#include <tonemapping_fragment>
#include <colorspace_fragment>
}`,Dro=`uniform float scale;
attribute float lineDistance;
varying float vLineDistance;
#include <common>
#include <uv_pars_vertex>
#include <color_pars_vertex>
#include <fog_pars_vertex>
#include <morphtarget_pars_vertex>
#include <logdepthbuf_pars_vertex>
#include <clipping_planes_pars_vertex>
void main() {
vLineDistance = scale * lineDistance;
#include <uv_vertex>
#include <color_vertex>
#include <morphinstance_vertex>
#include <morphcolor_vertex>
#include <begin_vertex>
#include <morphtarget_vertex>
#include <project_vertex>
#include <logdepthbuf_vertex>
#include <clipping_planes_vertex>
#include <fog_vertex>
}`,Nro=`uniform vec3 diffuse;
uniform float opacity;
uniform float dashSize;
uniform float totalSize;
varying float vLineDistance;
#include <common>
#include <color_pars_fragment>
#include <uv_pars_fragment>
#include <map_pars_fragment>
#include <fog_pars_fragment>
#include <logdepthbuf_pars_fragment>
#include <clipping_planes_pars_fragment>
void main() {
vec4 diffuseColor = vec4( diffuse, opacity );
#include <clipping_planes_fragment>
if ( mod( vLineDistance, totalSize ) > dashSize ) {
discard;
}
vec3 outgoingLight = vec3( 0.0 );
#include <logdepthbuf_fragment>
#include <map_fragment>
#include <color_fragment>
outgoingLight = diffuseColor.rgb;
#include <opaque_fragment>
#include <tonemapping_fragment>
#include <colorspace_fragment>
#include <fog_fragment>
#include <premultiplied_alpha_fragment>
}`,Rro=`#include <common>
#include <batching_pars_vertex>
#include <uv_pars_vertex>
#include <envmap_pars_vertex>
#include <color_pars_vertex>
#include <fog_pars_vertex>
#include <morphtarget_pars_vertex>
#include <skinning_pars_vertex>
#include <logdepthbuf_pars_vertex>
#include <clipping_planes_pars_vertex>
void main() {
#include <uv_vertex>
#include <color_vertex>
#include <morphinstance_vertex>
#include <morphcolor_vertex>
#include <batching_vertex>
#if defined ( USE_ENVMAP ) || defined ( USE_SKINNING )
#include <beginnormal_vertex>
#include <morphnormal_vertex>
#include <skinbase_vertex>
#include <skinnormal_vertex>
#include <defaultnormal_vertex>
#endif
#include <begin_vertex>
#include <morphtarget_vertex>
#include <skinning_vertex>
#include <project_vertex>
#include <logdepthbuf_vertex>
#include <clipping_planes_vertex>
#include <worldpos_vertex>
#include <envmap_vertex>
#include <fog_vertex>
}`,Qro=`uniform vec3 diffuse;
uniform float opacity;
#ifndef FLAT_SHADED
varying vec3 vNormal;
#endif
#include <common>
#include <dithering_pars_fragment>
#include <color_pars_fragment>
#include <uv_pars_fragment>
#include <map_pars_fragment>
#include <alphamap_pars_fragment>
#include <alphatest_pars_fragment>
#include <alphahash_pars_fragment>
#include <aomap_pars_fragment>
#include <lightmap_pars_fragment>
#include <envmap_common_pars_fragment>
#include <envmap_pars_fragment>
#include <fog_pars_fragment>
#include <specularmap_pars_fragment>
#include <logdepthbuf_pars_fragment>
#include <clipping_planes_pars_fragment>
void main() {
vec4 diffuseColor = vec4( diffuse, opacity );
#include <clipping_planes_fragment>
#include <logdepthbuf_fragment>
#include <map_fragment>
#include <color_fragment>
#include <alphamap_fragment>
#include <alphatest_fragment>
#include <alphahash_fragment>
#include <specularmap_fragment>
ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );
#ifdef USE_LIGHTMAP
vec4 lightMapTexel = texture2D( lightMap, vLightMapUv );
reflectedLight.indirectDiffuse += lightMapTexel.rgb * lightMapIntensity * RECIPROCAL_PI;
#else
reflectedLight.indirectDiffuse += vec3( 1.0 );
#endif
#include <aomap_fragment>
reflectedLight.indirectDiffuse *= diffuseColor.rgb;
vec3 outgoingLight = reflectedLight.indirectDiffuse;
#include <envmap_fragment>
#include <opaque_fragment>
#include <tonemapping_fragment>
#include <colorspace_fragment>
#include <fog_fragment>
#include <premultiplied_alpha_fragment>
#include <dithering_fragment>
}`,kro=`#define LAMBERT
varying vec3 vViewPosition;
#include <common>
#include <batching_pars_vertex>
#include <uv_pars_vertex>
#include <displacementmap_pars_vertex>
#include <envmap_pars_vertex>
#include <color_pars_vertex>
#include <fog_pars_vertex>
#include <normal_pars_vertex>
#include <morphtarget_pars_vertex>
#include <skinning_pars_vertex>
#include <shadowmap_pars_vertex>
#include <logdepthbuf_pars_vertex>
#include <clipping_planes_pars_vertex>
void main() {
#include <uv_vertex>
#include <color_vertex>
#include <morphinstance_vertex>
#include <morphcolor_vertex>
#include <batching_vertex>
#include <beginnormal_vertex>
#include <morphnormal_vertex>
#include <skinbase_vertex>
#include <skinnormal_vertex>
#include <defaultnormal_vertex>
#include <normal_vertex>
#include <begin_vertex>
#include <morphtarget_vertex>
#include <skinning_vertex>
#include <displacementmap_vertex>
#include <project_vertex>
#include <logdepthbuf_vertex>
#include <clipping_planes_vertex>
vViewPosition = - mvPosition.xyz;
#include <worldpos_vertex>
#include <envmap_vertex>
#include <shadowmap_vertex>
#include <fog_vertex>
}`,Lro=`#define LAMBERT
uniform vec3 diffuse;
uniform vec3 emissive;
uniform float opacity;
#include <common>
#include <packing>
#include <dithering_pars_fragment>
#include <color_pars_fragment>
#include <uv_pars_fragment>
#include <map_pars_fragment>
#include <alphamap_pars_fragment>
#include <alphatest_pars_fragment>
#include <alphahash_pars_fragment>
#include <aomap_pars_fragment>
#include <lightmap_pars_fragment>
#include <emissivemap_pars_fragment>
#include <envmap_common_pars_fragment>
#include <envmap_pars_fragment>
#include <fog_pars_fragment>
#include <bsdfs>
#include <lights_pars_begin>
#include <normal_pars_fragment>
#include <lights_lambert_pars_fragment>
#include <shadowmap_pars_fragment>
#include <bumpmap_pars_fragment>
#include <normalmap_pars_fragment>
#include <specularmap_pars_fragment>
#include <logdepthbuf_pars_fragment>
#include <clipping_planes_pars_fragment>
void main() {
vec4 diffuseColor = vec4( diffuse, opacity );
#include <clipping_planes_fragment>
ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );
vec3 totalEmissiveRadiance = emissive;
#include <logdepthbuf_fragment>
#include <map_fragment>
#include <color_fragment>
#include <alphamap_fragment>
#include <alphatest_fragment>
#include <alphahash_fragment>
#include <specularmap_fragment>
#include <normal_fragment_begin>
#include <normal_fragment_maps>
#include <emissivemap_fragment>
#include <lights_lambert_fragment>
#include <lights_fragment_begin>
#include <lights_fragment_maps>
#include <lights_fragment_end>
#include <aomap_fragment>
vec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;
#include <envmap_fragment>
#include <opaque_fragment>
#include <tonemapping_fragment>
#include <colorspace_fragment>
#include <fog_fragment>
#include <premultiplied_alpha_fragment>
#include <dithering_fragment>
}`,Fro=`#define MATCAP
varying vec3 vViewPosition;
#include <common>
#include <batching_pars_vertex>
#include <uv_pars_vertex>
#include <color_pars_vertex>
#include <displacementmap_pars_vertex>
#include <fog_pars_vertex>
#include <normal_pars_vertex>
#include <morphtarget_pars_vertex>
#include <skinning_pars_vertex>
#include <logdepthbuf_pars_vertex>
#include <clipping_planes_pars_vertex>
void main() {
#include <uv_vertex>
#include <color_vertex>
#include <morphinstance_vertex>
#include <morphcolor_vertex>
#include <batching_vertex>
#include <beginnormal_vertex>
#include <morphnormal_vertex>
#include <skinbase_vertex>
#include <skinnormal_vertex>
#include <defaultnormal_vertex>
#include <normal_vertex>
#include <begin_vertex>
#include <morphtarget_vertex>
#include <skinning_vertex>
#include <displacementmap_vertex>
#include <project_vertex>
#include <logdepthbuf_vertex>
#include <clipping_planes_vertex>
#include <fog_vertex>
vViewPosition = - mvPosition.xyz;
}`,Hro=`#define MATCAP
uniform vec3 diffuse;
uniform float opacity;
uniform sampler2D matcap;
varying vec3 vViewPosition;
#include <common>
#include <dithering_pars_fragment>
#include <color_pars_fragment>
#include <uv_pars_fragment>
#include <map_pars_fragment>
#include <alphamap_pars_fragment>
#include <alphatest_pars_fragment>
#include <alphahash_pars_fragment>
#include <fog_pars_fragment>
#include <normal_pars_fragment>
#include <bumpmap_pars_fragment>
#include <normalmap_pars_fragment>
#include <logdepthbuf_pars_fragment>
#include <clipping_planes_pars_fragment>
void main() {
vec4 diffuseColor = vec4( diffuse, opacity );
#include <clipping_planes_fragment>
#include <logdepthbuf_fragment>
#include <map_fragment>
#include <color_fragment>
#include <alphamap_fragment>
#include <alphatest_fragment>
#include <alphahash_fragment>
#include <normal_fragment_begin>
#include <normal_fragment_maps>
vec3 viewDir = normalize( vViewPosition );
vec3 x = normalize( vec3( viewDir.z, 0.0, - viewDir.x ) );
vec3 y = cross( viewDir, x );
vec2 uv = vec2( dot( x, normal ), dot( y, normal ) ) * 0.495 + 0.5;
#ifdef USE_MATCAP
vec4 matcapColor = texture2D( matcap, uv );
#else
vec4 matcapColor = vec4( vec3( mix( 0.2, 0.8, uv.y ) ), 1.0 );
#endif
vec3 outgoingLight = diffuseColor.rgb * matcapColor.rgb;
#include <opaque_fragment>
#include <tonemapping_fragment>
#include <colorspace_fragment>
#include <fog_fragment>
#include <premultiplied_alpha_fragment>
#include <dithering_fragment>
}`,Oro=`#define NORMAL
#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP_TANGENTSPACE )
varying vec3 vViewPosition;
#endif
#include <common>
#include <batching_pars_vertex>
#include <uv_pars_vertex>
#include <displacementmap_pars_vertex>
#include <normal_pars_vertex>
#include <morphtarget_pars_vertex>
#include <skinning_pars_vertex>
#include <logdepthbuf_pars_vertex>
#include <clipping_planes_pars_vertex>
void main() {
#include <uv_vertex>
#include <batching_vertex>
#include <beginnormal_vertex>
#include <morphinstance_vertex>
#include <morphnormal_vertex>
#include <skinbase_vertex>
#include <skinnormal_vertex>
#include <defaultnormal_vertex>
#include <normal_vertex>
#include <begin_vertex>
#include <morphtarget_vertex>
#include <skinning_vertex>
#include <displacementmap_vertex>
#include <project_vertex>
#include <logdepthbuf_vertex>
#include <clipping_planes_vertex>
#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP_TANGENTSPACE )
vViewPosition = - mvPosition.xyz;
#endif
}`,zro=`#define NORMAL
uniform float opacity;
#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP_TANGENTSPACE )
varying vec3 vViewPosition;
#endif
#include <packing>
#include <uv_pars_fragment>
#include <normal_pars_fragment>
#include <bumpmap_pars_fragment>
#include <normalmap_pars_fragment>
#include <logdepthbuf_pars_fragment>
#include <clipping_planes_pars_fragment>
void main() {
vec4 diffuseColor = vec4( 0.0, 0.0, 0.0, opacity );
#include <clipping_planes_fragment>
#include <logdepthbuf_fragment>
#include <normal_fragment_begin>
#include <normal_fragment_maps>
gl_FragColor = vec4( packNormalToRGB( normal ), diffuseColor.a );
#ifdef OPAQUE
gl_FragColor.a = 1.0;
#endif
}`,Gro=`#define PHONG
varying vec3 vViewPosition;
#include <common>
#include <batching_pars_vertex>
#include <uv_pars_vertex>
#include <displacementmap_pars_vertex>
#include <envmap_pars_vertex>
#include <color_pars_vertex>
#include <fog_pars_vertex>
#include <normal_pars_vertex>
#include <morphtarget_pars_vertex>
#include <skinning_pars_vertex>
#include <shadowmap_pars_vertex>
#include <logdepthbuf_pars_vertex>
#include <clipping_planes_pars_vertex>
void main() {
#include <uv_vertex>
#include <color_vertex>
#include <morphcolor_vertex>
#include <batching_vertex>
#include <beginnormal_vertex>
#include <morphinstance_vertex>
#include <morphnormal_vertex>
#include <skinbase_vertex>
#include <skinnormal_vertex>
#include <defaultnormal_vertex>
#include <normal_vertex>
#include <begin_vertex>
#include <morphtarget_vertex>
#include <skinning_vertex>
#include <displacementmap_vertex>
#include <project_vertex>
#include <logdepthbuf_vertex>
#include <clipping_planes_vertex>
vViewPosition = - mvPosition.xyz;
#include <worldpos_vertex>
#include <envmap_vertex>
#include <shadowmap_vertex>
#include <fog_vertex>
}`,Yro=`#define PHONG
uniform vec3 diffuse;
uniform vec3 emissive;
uniform vec3 specular;
uniform float shininess;
uniform float opacity;
#include <common>
#include <packing>
#include <dithering_pars_fragment>
#include <color_pars_fragment>
#include <uv_pars_fragment>
#include <map_pars_fragment>
#include <alphamap_pars_fragment>
#include <alphatest_pars_fragment>
#include <alphahash_pars_fragment>
#include <aomap_pars_fragment>
#include <lightmap_pars_fragment>
#include <emissivemap_pars_fragment>
#include <envmap_common_pars_fragment>
#include <envmap_pars_fragment>
#include <fog_pars_fragment>
#include <bsdfs>
#include <lights_pars_begin>
#include <normal_pars_fragment>
#include <lights_phong_pars_fragment>
#include <shadowmap_pars_fragment>
#include <bumpmap_pars_fragment>
#include <normalmap_pars_fragment>
#include <specularmap_pars_fragment>
#include <logdepthbuf_pars_fragment>
#include <clipping_planes_pars_fragment>
void main() {
vec4 diffuseColor = vec4( diffuse, opacity );
#include <clipping_planes_fragment>
ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );
vec3 totalEmissiveRadiance = emissive;
#include <logdepthbuf_fragment>
#include <map_fragment>
#include <color_fragment>
#include <alphamap_fragment>
#include <alphatest_fragment>
#include <alphahash_fragment>
#include <specularmap_fragment>
#include <normal_fragment_begin>
#include <normal_fragment_maps>
#include <emissivemap_fragment>
#include <lights_phong_fragment>
#include <lights_fragment_begin>
#include <lights_fragment_maps>
#include <lights_fragment_end>
#include <aomap_fragment>
vec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;
#include <envmap_fragment>
#include <opaque_fragment>
#include <tonemapping_fragment>
#include <colorspace_fragment>
#include <fog_fragment>
#include <premultiplied_alpha_fragment>
#include <dithering_fragment>
}`,Vro=`#define STANDARD
varying vec3 vViewPosition;
#ifdef USE_TRANSMISSION
varying vec3 vWorldPosition;
#endif
#include <common>
#include <batching_pars_vertex>
#include <uv_pars_vertex>
#include <displacementmap_pars_vertex>
#include <color_pars_vertex>
#include <fog_pars_vertex>
#include <normal_pars_vertex>
#include <morphtarget_pars_vertex>
#include <skinning_pars_vertex>
#include <shadowmap_pars_vertex>
#include <logdepthbuf_pars_vertex>
#include <clipping_planes_pars_vertex>
void main() {
#include <uv_vertex>
#include <color_vertex>
#include <morphinstance_vertex>
#include <morphcolor_vertex>
#include <batching_vertex>
#include <beginnormal_vertex>
#include <morphnormal_vertex>
#include <skinbase_vertex>
#include <skinnormal_vertex>
#include <defaultnormal_vertex>
#include <normal_vertex>
#include <begin_vertex>
#include <morphtarget_vertex>
#include <skinning_vertex>
#include <displacementmap_vertex>
#include <project_vertex>
#include <logdepthbuf_vertex>
#include <clipping_planes_vertex>
vViewPosition = - mvPosition.xyz;
#include <worldpos_vertex>
#include <shadowmap_vertex>
#include <fog_vertex>
#ifdef USE_TRANSMISSION
vWorldPosition = worldPosition.xyz;
#endif
}`,Uro=`#define STANDARD
#ifdef PHYSICAL
#define IOR
#define USE_SPECULAR
#endif
uniform vec3 diffuse;
uniform vec3 emissive;
uniform float roughness;
uniform float metalness;
uniform float opacity;
#ifdef IOR
uniform float ior;
#endif
#ifdef USE_SPECULAR
uniform float specularIntensity;
uniform vec3 specularColor;
#ifdef USE_SPECULAR_COLORMAP
uniform sampler2D specularColorMap;
#endif
#ifdef USE_SPECULAR_INTENSITYMAP
uniform sampler2D specularIntensityMap;
#endif
#endif
#ifdef USE_CLEARCOAT
uniform float clearcoat;
uniform float clearcoatRoughness;
#endif
#ifdef USE_DISPERSION
uniform float dispersion;
#endif
#ifdef USE_IRIDESCENCE
uniform float iridescence;
uniform float iridescenceIOR;
uniform float iridescenceThicknessMinimum;
uniform float iridescenceThicknessMaximum;
#endif
#ifdef USE_SHEEN
uniform vec3 sheenColor;
uniform float sheenRoughness;
#ifdef USE_SHEEN_COLORMAP
uniform sampler2D sheenColorMap;
#endif
#ifdef USE_SHEEN_ROUGHNESSMAP
uniform sampler2D sheenRoughnessMap;
#endif
#endif
#ifdef USE_ANISOTROPY
uniform vec2 anisotropyVector;
#ifdef USE_ANISOTROPYMAP
uniform sampler2D anisotropyMap;
#endif
#endif
varying vec3 vViewPosition;
#include <common>
#include <packing>
#include <dithering_pars_fragment>
#include <color_pars_fragment>
#include <uv_pars_fragment>
#include <map_pars_fragment>
#include <alphamap_pars_fragment>
#include <alphatest_pars_fragment>
#include <alphahash_pars_fragment>
#include <aomap_pars_fragment>
#include <lightmap_pars_fragment>
#include <emissivemap_pars_fragment>
#include <iridescence_fragment>
#include <cube_uv_reflection_fragment>
#include <envmap_common_pars_fragment>
#include <envmap_physical_pars_fragment>
#include <fog_pars_fragment>
#include <lights_pars_begin>
#include <normal_pars_fragment>
#include <lights_physical_pars_fragment>
#include <transmission_pars_fragment>
#include <shadowmap_pars_fragment>
#include <bumpmap_pars_fragment>
#include <normalmap_pars_fragment>
#include <clearcoat_pars_fragment>
#include <iridescence_pars_fragment>
#include <roughnessmap_pars_fragment>
#include <metalnessmap_pars_fragment>
#include <logdepthbuf_pars_fragment>
#include <clipping_planes_pars_fragment>
void main() {
vec4 diffuseColor = vec4( diffuse, opacity );
#include <clipping_planes_fragment>
ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );
vec3 totalEmissiveRadiance = emissive;
#include <logdepthbuf_fragment>
#include <map_fragment>
#include <color_fragment>
#include <alphamap_fragment>
#include <alphatest_fragment>
#include <alphahash_fragment>
#include <roughnessmap_fragment>
#include <metalnessmap_fragment>
#include <normal_fragment_begin>
#include <normal_fragment_maps>
#include <clearcoat_normal_fragment_begin>
#include <clearcoat_normal_fragment_maps>
#include <emissivemap_fragment>
#include <lights_physical_fragment>
#include <lights_fragment_begin>
#include <lights_fragment_maps>
#include <lights_fragment_end>
#include <aomap_fragment>
vec3 totalDiffuse = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse;
vec3 totalSpecular = reflectedLight.directSpecular + reflectedLight.indirectSpecular;
#include <transmission_fragment>
vec3 outgoingLight = totalDiffuse + totalSpecular + totalEmissiveRadiance;
#ifdef USE_SHEEN
float sheenEnergyComp = 1.0 - 0.157 * max3( material.sheenColor );
outgoingLight = outgoingLight * sheenEnergyComp + sheenSpecularDirect + sheenSpecularIndirect;
#endif
#ifdef USE_CLEARCOAT
float dotNVcc = saturate( dot( geometryClearcoatNormal, geometryViewDir ) );
vec3 Fcc = F_Schlick( material.clearcoatF0, material.clearcoatF90, dotNVcc );
outgoingLight = outgoingLight * ( 1.0 - material.clearcoat * Fcc ) + ( clearcoatSpecularDirect + clearcoatSpecularIndirect ) * material.clearcoat;
#endif
#include <opaque_fragment>
#include <tonemapping_fragment>
#include <colorspace_fragment>
#include <fog_fragment>
#include <premultiplied_alpha_fragment>
#include <dithering_fragment>
}`,Wro=`#define TOON
varying vec3 vViewPosition;
#include <common>
#include <batching_pars_vertex>
#include <uv_pars_vertex>
#include <displacementmap_pars_vertex>
#include <color_pars_vertex>
#include <fog_pars_vertex>
#include <normal_pars_vertex>
#include <morphtarget_pars_vertex>
#include <skinning_pars_vertex>
#include <shadowmap_pars_vertex>
#include <logdepthbuf_pars_vertex>
#include <clipping_planes_pars_vertex>
void main() {
#include <uv_vertex>
#include <color_vertex>
#include <morphinstance_vertex>
#include <morphcolor_vertex>
#include <batching_vertex>
#include <beginnormal_vertex>
#include <morphnormal_vertex>
#include <skinbase_vertex>
#include <skinnormal_vertex>
#include <defaultnormal_vertex>
#include <normal_vertex>
#include <begin_vertex>
#include <morphtarget_vertex>
#include <skinning_vertex>
#include <displacementmap_vertex>
#include <project_vertex>
#include <logdepthbuf_vertex>
#include <clipping_planes_vertex>
vViewPosition = - mvPosition.xyz;
#include <worldpos_vertex>
#include <shadowmap_vertex>
#include <fog_vertex>
}`,Xro=`#define TOON
uniform vec3 diffuse;
uniform vec3 emissive;
uniform float opacity;
#include <common>
#include <packing>
#include <dithering_pars_fragment>
#include <color_pars_fragment>
#include <uv_pars_fragment>
#include <map_pars_fragment>
#include <alphamap_pars_fragment>
#include <alphatest_pars_fragment>
#include <alphahash_pars_fragment>
#include <aomap_pars_fragment>
#include <lightmap_pars_fragment>
#include <emissivemap_pars_fragment>
#include <gradientmap_pars_fragment>
#include <fog_pars_fragment>
#include <bsdfs>
#include <lights_pars_begin>
#include <normal_pars_fragment>
#include <lights_toon_pars_fragment>
#include <shadowmap_pars_fragment>
#include <bumpmap_pars_fragment>
#include <normalmap_pars_fragment>
#include <logdepthbuf_pars_fragment>
#include <clipping_planes_pars_fragment>
void main() {
vec4 diffuseColor = vec4( diffuse, opacity );
#include <clipping_planes_fragment>
ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );
vec3 totalEmissiveRadiance = emissive;
#include <logdepthbuf_fragment>
#include <map_fragment>
#include <color_fragment>
#include <alphamap_fragment>
#include <alphatest_fragment>
#include <alphahash_fragment>
#include <normal_fragment_begin>
#include <normal_fragment_maps>
#include <emissivemap_fragment>
#include <lights_toon_fragment>
#include <lights_fragment_begin>
#include <lights_fragment_maps>
#include <lights_fragment_end>
#include <aomap_fragment>
vec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;
#include <opaque_fragment>
#include <tonemapping_fragment>
#include <colorspace_fragment>
#include <fog_fragment>
#include <premultiplied_alpha_fragment>
#include <dithering_fragment>
}`,Kro=`uniform float size;
uniform float scale;
#include <common>
#include <color_pars_vertex>
#include <fog_pars_vertex>
#include <morphtarget_pars_vertex>
#include <logdepthbuf_pars_vertex>
#include <clipping_planes_pars_vertex>
#ifdef USE_POINTS_UV
varying vec2 vUv;
uniform mat3 uvTransform;
#endif
void main() {
#ifdef USE_POINTS_UV
vUv = ( uvTransform * vec3( uv, 1 ) ).xy;
#endif
#include <color_vertex>
#include <morphinstance_vertex>
#include <morphcolor_vertex>
#include <begin_vertex>
#include <morphtarget_vertex>
#include <project_vertex>
gl_PointSize = size;
#ifdef USE_SIZEATTENUATION
bool isPerspective = isPerspectiveMatrix( projectionMatrix );
if ( isPerspective ) gl_PointSize *= ( scale / - mvPosition.z );
#endif
#include <logdepthbuf_vertex>
#include <clipping_planes_vertex>
#include <worldpos_vertex>
#include <fog_vertex>
}`,jro=`uniform vec3 diffuse;
uniform float opacity;
#include <common>
#include <color_pars_fragment>
#include <map_particle_pars_fragment>
#include <alphatest_pars_fragment>
#include <alphahash_pars_fragment>
#include <fog_pars_fragment>
#include <logdepthbuf_pars_fragment>
#include <clipping_planes_pars_fragment>
void main() {
vec4 diffuseColor = vec4( diffuse, opacity );
#include <clipping_planes_fragment>
vec3 outgoingLight = vec3( 0.0 );
#include <logdepthbuf_fragment>
#include <map_particle_fragment>
#include <color_fragment>
#include <alphatest_fragment>
#include <alphahash_fragment>
outgoingLight = diffuseColor.rgb;
#include <opaque_fragment>
#include <tonemapping_fragment>
#include <colorspace_fragment>
#include <fog_fragment>
#include <premultiplied_alpha_fragment>
}`,qro=`#include <common>
#include <batching_pars_vertex>
#include <fog_pars_vertex>
#include <morphtarget_pars_vertex>
#include <skinning_pars_vertex>
#include <logdepthbuf_pars_vertex>
#include <shadowmap_pars_vertex>
void main() {
#include <batching_vertex>
#include <beginnormal_vertex>
#include <morphinstance_vertex>
#include <morphnormal_vertex>
#include <skinbase_vertex>
#include <skinnormal_vertex>
#include <defaultnormal_vertex>
#include <begin_vertex>
#include <morphtarget_vertex>
#include <skinning_vertex>
#include <project_vertex>
#include <logdepthbuf_vertex>
#include <worldpos_vertex>
#include <shadowmap_vertex>
#include <fog_vertex>
}`,Jro=`uniform vec3 color;
uniform float opacity;
#include <common>
#include <packing>
#include <fog_pars_fragment>
#include <bsdfs>
#include <lights_pars_begin>
#include <logdepthbuf_pars_fragment>
#include <shadowmap_pars_fragment>
#include <shadowmask_pars_fragment>
void main() {
#include <logdepthbuf_fragment>
gl_FragColor = vec4( color, opacity * ( 1.0 - getShadowMask() ) );
#include <tonemapping_fragment>
#include <colorspace_fragment>
#include <fog_fragment>
}`,$ro=`uniform float rotation;
uniform vec2 center;
#include <common>
#include <uv_pars_vertex>
#include <fog_pars_vertex>
#include <logdepthbuf_pars_vertex>
#include <clipping_planes_pars_vertex>
void main() {
#include <uv_vertex>
vec4 mvPosition = modelViewMatrix * vec4( 0.0, 0.0, 0.0, 1.0 );
vec2 scale;
scale.x = length( vec3( modelMatrix[ 0 ].x, modelMatrix[ 0 ].y, modelMatrix[ 0 ].z ) );
scale.y = length( vec3( modelMatrix[ 1 ].x, modelMatrix[ 1 ].y, modelMatrix[ 1 ].z ) );
#ifndef USE_SIZEATTENUATION
bool isPerspective = isPerspectiveMatrix( projectionMatrix );
if ( isPerspective ) scale *= - mvPosition.z;
#endif
vec2 alignedPosition = ( position.xy - ( center - vec2( 0.5 ) ) ) * scale;
vec2 rotatedPosition;
rotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y;
rotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y;
mvPosition.xy += rotatedPosition;
gl_Position = projectionMatrix * mvPosition;
#include <logdepthbuf_vertex>
#include <clipping_planes_vertex>
#include <fog_vertex>
}`,Zro=`uniform vec3 diffuse;
uniform float opacity;
#include <common>
#include <uv_pars_fragment>
#include <map_pars_fragment>
#include <alphamap_pars_fragment>
#include <alphatest_pars_fragment>
#include <alphahash_pars_fragment>
#include <fog_pars_fragment>
#include <logdepthbuf_pars_fragment>
#include <clipping_planes_pars_fragment>
void main() {
vec4 diffuseColor = vec4( diffuse, opacity );
#include <clipping_planes_fragment>
vec3 outgoingLight = vec3( 0.0 );
#include <logdepthbuf_fragment>
#include <map_fragment>
#include <alphamap_fragment>
#include <alphatest_fragment>
#include <alphahash_fragment>
outgoingLight = diffuseColor.rgb;
#include <opaque_fragment>
#include <tonemapping_fragment>
#include <colorspace_fragment>
#include <fog_fragment>
}`,sa={alphahash_fragment:Coo,alphahash_pars_fragment:Ioo,alphamap_fragment:boo,alphamap_pars_fragment:Soo,alphatest_fragment:Poo,alphatest_pars_fragment:voo,aomap_fragment:Eoo,aomap_pars_fragment:Moo,batching_pars_vertex:Boo,batching_vertex:woo,begin_vertex:Too,beginnormal_vertex:Doo,bsdfs:Noo,iridescence_fragment:Roo,bumpmap_pars_fragment:Qoo,clipping_planes_fragment:koo,clipping_planes_pars_fragment:Loo,clipping_planes_pars_vertex:Foo,clipping_planes_vertex:Hoo,color_fragment:Ooo,color_pars_fragment:zoo,color_pars_vertex:Goo,color_vertex:Yoo,common:Voo,cube_uv_reflection_fragment:Uoo,defaultnormal_vertex:Woo,displacementmap_pars_vertex:Xoo,displacementmap_vertex:Koo,emissivemap_fragment:joo,emissivemap_pars_fragment:qoo,colorspace_fragment:Joo,colorspace_pars_fragment:$oo,envmap_fragment:Zoo,envmap_common_pars_fragment:eio,envmap_pars_fragment:tio,envmap_pars_vertex:nio,envmap_physical_pars_fragment:mio,envmap_vertex:oio,fog_vertex:iio,fog_pars_vertex:rio,fog_fragment:sio,fog_pars_fragment:aio,gradientmap_pars_fragment:cio,lightmap_pars_fragment:lio,lights_lambert_fragment:dio,lights_lambert_pars_fragment:uio,lights_pars_begin:hio,lights_toon_fragment:pio,lights_toon_pars_fragment:Aio,lights_phong_fragment:_io,lights_phong_pars_fragment:gio,lights_physical_fragment:fio,lights_physical_pars_fragment:yio,lights_fragment_begin:xio,lights_fragment_maps:Cio,lights_fragment_end:Iio,logdepthbuf_fragment:bio,logdepthbuf_pars_fragment:Sio,logdepthbuf_pars_vertex:Pio,logdepthbuf_vertex:vio,map_fragment:Eio,map_pars_fragment:Mio,map_particle_fragment:Bio,map_particle_pars_fragment:wio,metalnessmap_fragment:Tio,metalnessmap_pars_fragment:Dio,morphinstance_vertex:Nio,morphcolor_vertex:Rio,morphnormal_vertex:Qio,morphtarget_pars_vertex:kio,morphtarget_vertex:Lio,normal_fragment_begin:Fio,normal_fragment_maps:Hio,normal_pars_fragment:Oio,normal_pars_vertex:zio,normal_vertex:Gio,normalmap_pars_fragment:Yio,clearcoat_normal_fragment_begin:Vio,clearcoat_normal_fragment_maps:Uio,clearcoat_pars_fragment:Wio,iridescence_pars_fragment:Xio,opaque_fragment:Kio,packing:jio,premultiplied_alpha_fragment:qio,project_vertex:Jio,dithering_fragment:$io,dithering_pars_fragment:Zio,roughnessmap_fragment:ero,roughnessmap_pars_fragment:tro,shadowmap_pars_fragment:nro,shadowmap_pars_vertex:oro,shadowmap_vertex:iro,shadowmask_pars_fragment:rro,skinbase_vertex:sro,skinning_pars_vertex:aro,skinning_vertex:cro,skinnormal_vertex:lro,specularmap_fragment:dro,specularmap_pars_fragment:uro,tonemapping_fragment:hro,tonemapping_pars_fragment:mro,transmission_fragment:pro,transmission_pars_fragment:Aro,uv_pars_fragment:_ro,uv_pars_vertex:gro,uv_vertex:fro,worldpos_vertex:yro,background_vert:xro,background_frag:Cro,backgroundCube_vert:Iro,backgroundCube_frag:bro,cube_vert:Sro,cube_frag:Pro,depth_vert:vro,depth_frag:Ero,distanceRGBA_vert:Mro,distanceRGBA_frag:Bro,equirect_vert:wro,equirect_frag:Tro,linedashed_vert:Dro,linedashed_frag:Nro,meshbasic_vert:Rro,meshbasic_frag:Qro,meshlambert_vert:kro,meshlambert_frag:Lro,meshmatcap_vert:Fro,meshmatcap_frag:Hro,meshnormal_vert:Oro,meshnormal_frag:zro,meshphong_vert:Gro,meshphong_frag:Yro,meshphysical_vert:Vro,meshphysical_frag:Uro,meshtoon_vert:Wro,meshtoon_frag:Xro,points_vert:Kro,points_frag:jro,shadow_vert:qro,shadow_frag:Jro,sprite_vert:$ro,sprite_frag:Zro},pi={common:{diffuse:{value:new Po(16777215)},opacity:{value:1},map:{value:null},mapTransform:{value:new aa},alphaMap:{value:null},alphaMapTransform:{value:new aa},alphaTest:{value:0}},specularmap:{specularMap:{value:null},specularMapTransform:{value:new aa}},envmap:{envMap:{value:null},envMapRotation:{value:new aa},flipEnvMap:{value:-1},reflectivity:{value:1},ior:{value:1.5},refractionRatio:{value:0.98}},aomap:{aoMap:{value:null},aoMapIntensity:{value:1},aoMapTransform:{value:new aa}},lightmap:{lightMap:{value:null},lightMapIntensity:{value:1},lightMapTransform:{value:new aa}},bumpmap:{bumpMap:{value:null},bumpMapTransform:{value:new aa},bumpScale:{value:1}},normalmap:{normalMap:{value:null},normalMapTransform:{value:new aa},normalScale:{value:new ro(1,1)}},displacementmap:{displacementMap:{value:null},displacementMapTransform:{value:new aa},displacementScale:{value:1},displacementBias:{value:0}},emissivemap:{emissiveMap:{value:null},emissiveMapTransform:{value:new aa}},metalnessmap:{metalnessMap:{value:null},metalnessMapTransform:{value:new aa}},roughnessmap:{roughnessMap:{value:null},roughnessMapTransform:{value:new aa}},gradientmap:{gradientMap:{value:null}},fog:{fogDensity:{value:0.00025},fogNear:{value:1},fogFar:{value:2000},fogColor:{value:new Po(16777215)}},lights:{ambientLightColor:{value:[]},lightProbe:{value:[]},directionalLights:{value:[],properties:{direction:{},color:{}}},directionalLightShadows:{value:[],properties:{shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{}}},directionalShadowMap:{value:[]},directionalShadowMatrix:{value:[]},spotLights:{value:[],properties:{color:{},position:{},direction:{},distance:{},coneCos:{},penumbraCos:{},decay:{}}},spotLightShadows:{value:[],properties:{shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{}}},spotLightMap:{value:[]},spotShadowMap:{value:[]},spotLightMatrix:{value:[]},pointLights:{value:[],properties:{color:{},position:{},decay:{},distance:{}}},pointLightShadows:{value:[],properties:{shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{},shadowCameraNear:{},shadowCameraFar:{}}},pointShadowMap:{value:[]},pointShadowMatrix:{value:[]},hemisphereLights:{value:[],properties:{direction:{},skyColor:{},groundColor:{}}},rectAreaLights:{value:[],properties:{color:{},position:{},width:{},height:{}}},ltc_1:{value:null},ltc_2:{value:null}},points:{diffuse:{value:new Po(16777215)},opacity:{value:1},size:{value:1},scale:{value:1},map:{value:null},alphaMap:{value:null},alphaMapTransform:{value:new aa},alphaTest:{value:0},uvTransform:{value:new aa}},sprite:{diffuse:{value:new Po(16777215)},opacity:{value:1},center:{value:new ro(0.5,0.5)},rotation:{value:0},map:{value:null},mapTransform:{value:new aa},alphaMap:{value:null},alphaMapTransform:{value:new aa},alphaTest:{value:0}}},Y5={basic:{uniforms:Wf([pi.common,pi.specularmap,pi.envmap,pi.aomap,pi.lightmap,pi.fog]),vertexShader:sa.meshbasic_vert,fragmentShader:sa.meshbasic_frag},lambert:{uniforms:Wf([pi.common,pi.specularmap,pi.envmap,pi.aomap,pi.lightmap,pi.emissivemap,pi.bumpmap,pi.normalmap,pi.displacementmap,pi.fog,pi.lights,{emissive:{value:new Po(0)}}]),vertexShader:sa.meshlambert_vert,fragmentShader:sa.meshlambert_frag},phong:{uniforms:Wf([pi.common,pi.specularmap,pi.envmap,pi.aomap,pi.lightmap,pi.emissivemap,pi.bumpmap,pi.normalmap,pi.displacementmap,pi.fog,pi.lights,{emissive:{value:new Po(0)},specular:{value:new Po(1118481)},shininess:{value:30}}]),vertexShader:sa.meshphong_vert,fragmentShader:sa.meshphong_frag},standard:{uniforms:Wf([pi.common,pi.envmap,pi.aomap,pi.lightmap,pi.emissivemap,pi.bumpmap,pi.normalmap,pi.displacementmap,pi.roughnessmap,pi.metalnessmap,pi.fog,pi.lights,{emissive:{value:new Po(0)},roughness:{value:1},metalness:{value:0},envMapIntensity:{value:1}}]),vertexShader:sa.meshphysical_vert,fragmentShader:sa.meshphysical_frag},toon:{uniforms:Wf([pi.common,pi.aomap,pi.lightmap,pi.emissivemap,pi.bumpmap,pi.normalmap,pi.displacementmap,pi.gradientmap,pi.fog,pi.lights,{emissive:{value:new Po(0)}}]),vertexShader:sa.meshtoon_vert,fragmentShader:sa.meshtoon_frag},matcap:{uniforms:Wf([pi.common,pi.bumpmap,pi.normalmap,pi.displacementmap,pi.fog,{matcap:{value:null}}]),vertexShader:sa.meshmatcap_vert,fragmentShader:sa.meshmatcap_frag},points:{uniforms:Wf([pi.points,pi.fog]),vertexShader:sa.points_vert,fragmentShader:sa.points_frag},dashed:{uniforms:Wf([pi.common,pi.fog,{scale:{value:1},dashSize:{value:1},totalSize:{value:2}}]),vertexShader:sa.linedashed_vert,fragmentShader:sa.linedashed_frag},depth:{uniforms:Wf([pi.common,pi.displacementmap]),vertexShader:sa.depth_vert,fragmentShader:sa.depth_frag},normal:{uniforms:Wf([pi.common,pi.bumpmap,pi.normalmap,pi.displacementmap,{opacity:{value:1}}]),vertexShader:sa.meshnormal_vert,fragmentShader:sa.meshnormal_frag},sprite:{uniforms:Wf([pi.sprite,pi.fog]),vertexShader:sa.sprite_vert,fragmentShader:sa.sprite_frag},background:{uniforms:{uvTransform:{value:new aa},t2D:{value:null},backgroundIntensity:{value:1}},vertexShader:sa.background_vert,fragmentShader:sa.background_frag},backgroundCube:{uniforms:{envMap:{value:null},flipEnvMap:{value:-1},backgroundBlurriness:{value:0},backgroundIntensity:{value:1},backgroundRotation:{value:new aa}},vertexShader:sa.backgroundCube_vert,fragmentShader:sa.backgroundCube_frag},cube:{uniforms:{tCube:{value:null},tFlip:{value:-1},opacity:{value:1}},vertexShader:sa.cube_vert,fragmentShader:sa.cube_frag},equirect:{uniforms:{tEquirect:{value:null}},vertexShader:sa.equirect_vert,fragmentShader:sa.equirect_frag},distanceRGBA:{uniforms:Wf([pi.common,pi.displacementmap,{referencePosition:{value:new bt},nearDistance:{value:1},farDistance:{value:1000}}]),vertexShader:sa.distanceRGBA_vert,fragmentShader:sa.distanceRGBA_frag},shadow:{uniforms:Wf([pi.lights,pi.fog,{color:{value:new Po(0)},opacity:{value:1}}]),vertexShader:sa.shadow_vert,fragmentShader:sa.shadow_frag}};Y5.physical={uniforms:Wf([Y5.standard.uniforms,{clearcoat:{value:0},clearcoatMap:{value:null},clearcoatMapTransform:{value:new aa},clearcoatNormalMap:{value:null},clearcoatNormalMapTransform:{value:new aa},clearcoatNormalScale:{value:new ro(1,1)},clearcoatRoughness:{value:0},clearcoatRoughnessMap:{value:null},clearcoatRoughnessMapTransform:{value:new aa},dispersion:{value:0},iridescence:{value:0},iridescenceMap:{value:null},iridescenceMapTransform:{value:new aa},iridescenceIOR:{value:1.3},iridescenceThicknessMinimum:{value:100},iridescenceThicknessMaximum:{value:400},iridescenceThicknessMap:{value:null},iridescenceThicknessMapTransform:{value:new aa},sheen:{value:0},sheenColor:{value:new Po(0)},sheenColorMap:{value:null},sheenColorMapTransform:{value:new aa},sheenRoughness:{value:1},sheenRoughnessMap:{value:null},sheenRoughnessMapTransform:{value:new aa},transmission:{value:0},transmissionMap:{value:null},transmissionMapTransform:{value:new aa},transmissionSamplerSize:{value:new ro},transmissionSamplerMap:{value:null},thickness:{value:0},thicknessMap:{value:null},thicknessMapTransform:{value:new aa},attenuationDistance:{value:0},attenuationColor:{value:new Po(0)},specularColor:{value:new Po(1,1,1)},specularColorMap:{value:null},specularColorMapTransform:{value:new aa},specularIntensity:{value:1},specularIntensityMap:{value:null},specularIntensityMapTransform:{value:new aa},anisotropyVector:{value:new ro},anisotropyMap:{value:null},anisotropyMapTransform:{value:new aa}}]),vertexShader:sa.meshphysical_vert,fragmentShader:sa.meshphysical_frag};var khe={r:0,b:0,g:0},dQ=new MA,eso=new Pr;function tso(e,t,n,o,i,r,s){let a=new Po(0),c=r===!0?0:1,l,d,u=null,h=0,A=null;function m(f){let y=f.isScene===!0?f.background:null;if(y&&y.isTexture)y=(f.backgroundBlurriness>0?n:t).get(y);return y}function p(f){let y=!1,x=m(f);if(x===null)_(a,c);else if(x&&x.isColor)_(x,1),y=!0;let C=e.xr.getEnvironmentBlendMode();if(C==="additive")o.buffers.color.setClear(0,0,0,1,s);else if(C==="alpha-blend")o.buffers.color.setClear(0,0,0,0,s);if(e.autoClear||y)o.buffers.depth.setTest(!0),o.buffers.depth.setMask(!0),o.buffers.color.setMask(!0),e.clear(e.autoClearColor,e.autoClearDepth,e.autoClearStencil)}function g(f,y){let x=m(y);if(x&&(x.isCubeTexture||x.mapping===306)){if(d===void 0)d=new Mo(new km(1,1,1),new ix({name:"BackgroundCubeMaterial",uniforms:HG(Y5.backgroundCube.uniforms),vertexShader:Y5.backgroundCube.vertexShader,fragmentShader:Y5.backgroundCube.fragmentShader,side:1,depthTest:!1,depthWrite:!1,fog:!1})),d.geometry.deleteAttribute("normal"),d.geometry.deleteAttribute("uv"),d.onBeforeRender=function(C,I,b){this.matrixWorld.copyPosition(b.matrixWorld)},Object.defineProperty(d.material,"envMap",{get:function(){return this.uniforms.envMap.value}}),i.update(d);if(dQ.copy(y.backgroundRotation),dQ.x*=-1,dQ.y*=-1,dQ.z*=-1,x.isCubeTexture&&x.isRenderTargetTexture===!1)dQ.y*=-1,dQ.z*=-1;if(d.material.uniforms.envMap.value=x,d.material.uniforms.flipEnvMap.value=x.isCubeTexture&&x.isRenderTargetTexture===!1?-1:1,d.material.uniforms.backgroundBlurriness.value=y.backgroundBlurriness,d.material.uniforms.backgroundIntensity.value=y.backgroundIntensity,d.material.uniforms.backgroundRotation.value.setFromMatrix4(eso.makeRotationFromEuler(dQ)),d.material.toneMapped=ed.getTransfer(x.colorSpace)!=="srgb",u!==x||h!==x.version||A!==e.toneMapping)d.material.needsUpdate=!0,u=x,h=x.version,A=e.toneMapping;d.layers.enableAll(),f.unshift(d,d.geometry,d.material,0,0,null)}else if(x&&x.isTexture){if(l===void 0)l=new Mo(new Mg(2,2),new ix({name:"BackgroundMaterial",uniforms:HG(Y5.background.uniforms),vertexShader:Y5.background.vertexShader,fragmentShader:Y5.background.fragmentShader,side:0,depthTest:!1,depthWrite:!1,fog:!1})),l.geometry.deleteAttribute("normal"),Object.defineProperty(l.material,"map",{get:function(){return this.uniforms.t2D.value}}),i.update(l);if(l.material.uniforms.t2D.value=x,l.material.uniforms.backgroundIntensity.value=y.backgroundIntensity,l.material.toneMapped=ed.getTransfer(x.colorSpace)!=="srgb",x.matrixAutoUpdate===!0)x.updateMatrix();if(l.material.uniforms.uvTransform.value.copy(x.matrix),u!==x||h!==x.version||A!==e.toneMapping)l.material.needsUpdate=!0,u=x,h=x.version,A=e.toneMapping;l.layers.enableAll(),f.unshift(l,l.geometry,l.material,0,0,null)}}function _(f,y){f.getRGB(khe,JAt(e)),o.buffers.color.setClear(khe.r,khe.g,khe.b,y,s)}return{getClearColor:function(){return a},setClearColor:function(f,y=1){a.set(f),c=y,_(a,c)},getClearAlpha:function(){return c},setClearAlpha:function(f){c=f,_(a,c)},render:p,addToRenderList:g}}function nso(e,t){let n=e.getParameter(e.MAX_VERTEX_ATTRIBS),o={},i=h(null),r=i,s=!1;function a(B,w,T,Q,N){let F=!1,H=u(Q,T,w);if(r!==H)r=H,l(r.object);if(F=A(B,Q,T,N),F)m(B,Q,T,N);if(N!==null)t.update(N,e.ELEMENT_ARRAY_BUFFER);if(F||s){if(s=!1,x(B,w,T,Q),N!==null)e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t.get(N).buffer)}}function c(){return e.createVertexArray()}function l(B){return e.bindVertexArray(B)}function d(B){return e.deleteVertexArray(B)}function u(B,w,T){let Q=T.wireframe===!0,N=o[B.id];if(N===void 0)N={},o[B.id]=N;let F=N[w.id];if(F===void 0)F={},N[w.id]=F;let H=F[Q];if(H===void 0)H=h(c()),F[Q]=H;return H}function h(B){let w=[],T=[],Q=[];for(let N=0;N<n;N++)w[N]=0,T[N]=0,Q[N]=0;return{geometry:null,program:null,wireframe:!1,newAttributes:w,enabledAttributes:T,attributeDivisors:Q,object:B,attributes:{},index:null}}function A(B,w,T,Q){let N=r.attributes,F=w.attributes,H=0,z=T.getAttributes();for(let Y in z)if(z[Y].location>=0){let X=N[Y],V=F[Y];if(V===void 0){if(Y==="instanceMatrix"&&B.instanceMatrix)V=B.instanceMatrix;if(Y==="instanceColor"&&B.instanceColor)V=B.instanceColor}if(X===void 0)return!0;if(X.attribute!==V)return!0;if(V&&X.data!==V.data)return!0;H++}if(r.attributesNum!==H)return!0;if(r.index!==Q)return!0;return!1}function m(B,w,T,Q){let N={},F=w.attributes,H=0,z=T.getAttributes();for(let Y in z)if(z[Y].location>=0){let X=F[Y];if(X===void 0){if(Y==="instanceMatrix"&&B.instanceMatrix)X=B.instanceMatrix;if(Y==="instanceColor"&&B.instanceColor)X=B.instanceColor}let V={};if(V.attribute=X,X&&X.data)V.data=X.data;N[Y]=V,H++}r.attributes=N,r.attributesNum=H,r.index=Q}function p(){let B=r.newAttributes;for(let w=0,T=B.length;w<T;w++)B[w]=0}function g(B){_(B,0)}function _(B,w){let T=r.newAttributes,Q=r.enabledAttributes,N=r.attributeDivisors;if(T[B]=1,Q[B]===0)e.enableVertexAttribArray(B),Q[B]=1;if(N[B]!==w)e.vertexAttribDivisor(B,w),N[B]=w}function f(){let B=r.newAttributes,w=r.enabledAttributes;for(let T=0,Q=w.length;T<Q;T++)if(w[T]!==B[T])e.disableVertexAttribArray(T),w[T]=0}function y(B,w,T,Q,N,F,H){if(H===!0)e.vertexAttribIPointer(B,w,T,N,F);else e.vertexAttribPointer(B,w,T,Q,N,F)}function x(B,w,T,Q){p();let N=Q.attributes,F=T.getAttributes(),H=w.defaultAttributeValues;for(let z in F){let Y=F[z];if(Y.location>=0){let U=N[z];if(U===void 0){if(z==="instanceMatrix"&&B.instanceMatrix)U=B.instanceMatrix;if(z==="instanceColor"&&B.instanceColor)U=B.instanceColor}if(U!==void 0){let X=U.normalized,V=U.itemSize,W=t.get(U);if(W===void 0)continue;let{buffer:j,type:q,bytesPerElement:ne}=W,ce=q===e.INT||q===e.UNSIGNED_INT||U.gpuType===1013;if(U.isInterleavedBufferAttribute){let oe=U.data,ie=oe.stride,J=U.offset;if(oe.isInstancedInterleavedBuffer){for(let ee=0;ee<Y.locationSize;ee++)_(Y.location+ee,oe.meshPerAttribute);if(B.isInstancedMesh!==!0&&Q._maxInstanceCount===void 0)Q._maxInstanceCount=oe.meshPerAttribute*oe.count}else for(let ee=0;ee<Y.locationSize;ee++)g(Y.location+ee);e.bindBuffer(e.ARRAY_BUFFER,j);for(let ee=0;ee<Y.locationSize;ee++)y(Y.location+ee,V/Y.locationSize,q,X,ie*ne,(J+V/Y.locationSize*ee)*ne,ce)}else{if(U.isInstancedBufferAttribute){for(let oe=0;oe<Y.locationSize;oe++)_(Y.location+oe,U.meshPerAttribute);if(B.isInstancedMesh!==!0&&Q._maxInstanceCount===void 0)Q._maxInstanceCount=U.meshPerAttribute*U.count}else for(let oe=0;oe<Y.locationSize;oe++)g(Y.location+oe);e.bindBuffer(e.ARRAY_BUFFER,j);for(let oe=0;oe<Y.locationSize;oe++)y(Y.location+oe,V/Y.locationSize,q,X,V*ne,V/Y.locationSize*oe*ne,ce)}}else if(H!==void 0){let X=H[z];if(X!==void 0)switch(X.length){case 2:e.vertexAttrib2fv(Y.location,X);break;case 3:e.vertexAttrib3fv(Y.location,X);break;case 4:e.vertexAttrib4fv(Y.location,X);break;default:e.vertexAttrib1fv(Y.location,X)}}}}f()}function C(){P();for(let B in o){let w=o[B];for(let T in w){let Q=w[T];for(let N in Q)d(Q[N].object),delete Q[N];delete w[T]}delete o[B]}}function I(B){if(o[B.id]===void 0)return;let w=o[B.id];for(let T in w){let Q=w[T];for(let N in Q)d(Q[N].object),delete Q[N];delete w[T]}delete o[B.id]}function b(B){for(let w in o){let T=o[w];if(T[B.id]===void 0)continue;let Q=T[B.id];for(let N in Q)d(Q[N].object),delete Q[N];delete T[B.id]}}function P(){if(E(),s=!0,r===i)return;r=i,l(r.object)}function E(){i.geometry=null,i.program=null,i.wireframe=!1}return{setup:a,reset:P,resetDefaultState:E,dispose:C,releaseStatesOfGeometry:I,releaseStatesOfProgram:b,initAttributes:p,enableAttribute:g,disableUnusedAttributes:f}}function oso(e,t,n){let o;function i(l){o=l}function r(l,d){e.drawArrays(o,l,d),n.update(d,o,1)}function s(l,d,u){if(u===0)return;e.drawArraysInstanced(o,l,d,u),n.update(d,o,u)}function a(l,d,u){if(u===0)return;let h=t.get("WEBGL_multi_draw");if(h===null)for(let A=0;A<u;A++)this.render(l[A],d[A]);else{h.multiDrawArraysWEBGL(o,l,0,d,0,u);let A=0;for(let m=0;m<u;m++)A+=d[m];n.update(A,o,1)}}function c(l,d,u,h){if(u===0)return;let A=t.get("WEBGL_multi_draw");if(A===null)for(let m=0;m<l.length;m++)s(l[m],d[m],h[m]);else{A.multiDrawArraysInstancedWEBGL(o,l,0,d,0,h,0,u);let m=0;for(let p=0;p<u;p++)m+=d[p];for(let p=0;p<h.length;p++)n.update(m,o,h[p])}}this.setMode=i,this.render=r,this.renderInstances=s,this.renderMultiDraw=a,this.renderMultiDrawInstances=c}function iso(e,t,n,o){let i;function r(){if(i!==void 0)return i;if(t.has("EXT_texture_filter_anisotropic")===!0){let I=t.get("EXT_texture_filter_anisotropic");i=e.getParameter(I.MAX_TEXTURE_MAX_ANISOTROPY_EXT)}else i=0;return i}function s(I){if(I!==1023&&o.convert(I)!==e.getParameter(e.IMPLEMENTATION_COLOR_READ_FORMAT))return!1;return!0}function a(I){let b=I===1016&&(t.has("EXT_color_buffer_half_float")||t.has("EXT_color_buffer_float"));if(I!==1009&&o.convert(I)!==e.getParameter(e.IMPLEMENTATION_COLOR_READ_TYPE)&&I!==1015&&!b)return!1;return!0}function c(I){if(I==="highp"){if(e.getShaderPrecisionFormat(e.VERTEX_SHADER,e.HIGH_FLOAT).precision>0&&e.getShaderPrecisionFormat(e.FRAGMENT_SHADER,e.HIGH_FLOAT).precision>0)return"highp";I="mediump"}if(I==="mediump"){if(e.getShaderPrecisionFormat(e.VERTEX_SHADER,e.MEDIUM_FLOAT).precision>0&&e.getShaderPrecisionFormat(e.FRAGMENT_SHADER,e.MEDIUM_FLOAT).precision>0)return"mediump"}return"lowp"}let l=n.precision!==void 0?n.precision:"highp",d=c(l);if(d!==l)console.warn("THREE.WebGLRenderer:",l,"not supported, using",d,"instead."),l=d;let u=n.logarithmicDepthBuffer===!0,h=e.getParameter(e.MAX_TEXTURE_IMAGE_UNITS),A=e.getParameter(e.MAX_VERTEX_TEXTURE_IMAGE_UNITS),m=e.getParameter(e.MAX_TEXTURE_SIZE),p=e.getParameter(e.MAX_CUBE_MAP_TEXTURE_SIZE),g=e.getParameter(e.MAX_VERTEX_ATTRIBS),_=e.getParameter(e.MAX_VERTEX_UNIFORM_VECTORS),f=e.getParameter(e.MAX_VARYING_VECTORS),y=e.getParameter(e.MAX_FRAGMENT_UNIFORM_VECTORS),x=A>0,C=e.getParameter(e.MAX_SAMPLES);return{isWebGL2:!0,getMaxAnisotropy:r,getMaxPrecision:c,textureFormatReadable:s,textureTypeReadable:a,precision:l,logarithmicDepthBuffer:u,maxTextures:h,maxVertexTextures:A,maxTextureSize:m,maxCubemapSize:p,maxAttributes:g,maxVertexUniforms:_,maxVaryings:f,maxFragmentUniforms:y,vertexTextures:x,maxSamples:C}}function rso(e){let t=this,n=null,o=0,i=!1,r=!1,s=new Gv,a=new aa,c={value:null,needsUpdate:!1};this.uniform=c,this.numPlanes=0,this.numIntersection=0,this.init=function(u,h){let A=u.length!==0||h||o!==0||i;return i=h,o=u.length,A},this.beginShadows=function(){r=!0,d(null)},this.endShadows=function(){r=!1},this.setGlobalState=function(u,h){n=d(u,h,0)},this.setState=function(u,h,A){let{clippingPlanes:m,clipIntersection:p,clipShadows:g}=u,_=e.get(u);if(!i||m===null||m.length===0||r&&!g)if(r)d(null);else l();else{let f=r?0:o,y=f*4,x=_.clippingState||null;c.value=x,x=d(m,h,y,A);for(let C=0;C!==y;++C)x[C]=n[C];_.clippingState=x,this.numIntersection=p?this.numPlanes:0,this.numPlanes+=f}};function l(){if(c.value!==n)c.value=n,c.needsUpdate=o>0;t.numPlanes=o,t.numIntersection=0}function d(u,h,A,m){let p=u!==null?u.length:0,g=null;if(p!==0){if(g=c.value,m!==!0||g===null){let _=A+p*4,f=h.matrixWorldInverse;if(a.getNormalMatrix(f),g===null||g.length<_)g=new Float32Array(_);for(let y=0,x=A;y!==p;++y,x+=4)s.copy(u[y]).applyMatrix4(f,a),s.normal.toArray(g,x),g[x+3]=s.constant}c.value=g,c.needsUpdate=!0}return t.numPlanes=p,t.numIntersection=0,g}}function sso(e){let t=new WeakMap;function n(s,a){if(a===303)s.mapping=301;else if(a===304)s.mapping=302;return s}function o(s){if(s&&s.isTexture){let a=s.mapping;if(a===303||a===304)if(t.has(s)){let c=t.get(s).texture;return n(c,s.mapping)}else{let c=s.image;if(c&&c.height>0){let l=new ZAt(c.height);return l.fromEquirectangularTexture(e,s),t.set(s,l),s.addEventListener("dispose",i),n(l.texture,s.mapping)}else return null}}return s}function i(s){let a=s.target;a.removeEventListener("dispose",i);let c=t.get(a);if(c!==void 0)t.delete(a),c.dispose()}function r(){t=new WeakMap}return{get:o,dispose:r}}class Wv extends H9e{constructor(e=-1,t=1,n=1,o=-1,i=0.1,r=2000){super();this.isOrthographicCamera=!0,this.type="OrthographicCamera",this.zoom=1,this.view=null,this.left=e,this.right=t,this.top=n,this.bottom=o,this.near=i,this.far=r,this.updateProjectionMatrix()}copy(e,t){return super.copy(e,t),this.left=e.left,this.right=e.right,this.top=e.top,this.bottom=e.bottom,this.near=e.near,this.far=e.far,this.zoom=e.zoom,this.view=e.view===null?null:Object.assign({},e.view),this}setViewOffset(e,t,n,o,i,r){if(this.view===null)this.view={enabled:!0,fullWidth:1,fullHeight:1,offsetX:0,offsetY:0,width:1,height:1};this.view.enabled=!0,this.view.fullWidth=e,this.view.fullHeight=t,this.view.offsetX=n,this.view.offsetY=o,this.view.width=i,this.view.height=r,this.updateProjectionMatrix()}clearViewOffset(){if(this.view!==null)this.view.enabled=!1;this.updateProjectionMatrix()}updateProjectionMatrix(){let e=(this.right-this.left)/(2*this.zoom),t=(this.top-this.bottom)/(2*this.zoom),n=(this.right+this.left)/2,o=(this.top+this.bottom)/2,i=n-e,r=n+e,s=o+t,a=o-t;if(this.view!==null&&this.view.enabled){let c=(this.right-this.left)/this.view.fullWidth/this.zoom,l=(this.top-this.bottom)/this.view.fullHeight/this.zoom;i+=c*this.view.offsetX,r=i+c*this.view.width,s-=l*this.view.offsetY,a=s-l*this.view.height}this.projectionMatrix.makeOrthographic(i,r,s,a,this.near,this.far,this.coordinateSystem),this.projectionMatrixInverse.copy(this.projectionMatrix).invert()}toJSON(e){let t=super.toJSON(e);if(t.object.zoom=this.zoom,t.object.left=this.left,t.object.right=this.right,t.object.top=this.top,t.object.bottom=this.bottom,t.object.near=this.near,t.object.far=this.far,this.view!==null)t.object.view=Object.assign({},this.view);return t}}var RG=4,Kpt=[0.125,0.215,0.35,0.446,0.526,0.582],mQ=20,u9e=new Wv,jpt=new Po,h9e=null,m9e=0,p9e=0,A9e=!1,hQ=(1+Math.sqrt(5))/2,DG=1/hQ,qpt=[new bt(-hQ,DG,0),new bt(hQ,DG,0),new bt(-DG,0,hQ),new bt(DG,0,hQ),new bt(0,hQ,-DG),new bt(0,hQ,DG),new bt(-1,1,-1),new bt(1,1,-1),new bt(-1,1,1),new bt(1,1,1)];class KJ{constructor(e){this._renderer=e,this._pingPongRenderTarget=null,this._lodMax=0,this._cubeSize=0,this._lodPlanes=[],this._sizeLods=[],this._sigmas=[],this._blurMaterial=null,this._cubemapMaterial=null,this._equirectMaterial=null,this._compileMaterial(this._blurMaterial)}fromScene(e,t=0,n=0.1,o=100){h9e=this._renderer.getRenderTarget(),m9e=this._renderer.getActiveCubeFace(),p9e=this._renderer.getActiveMipmapLevel(),A9e=this._renderer.xr.enabled,this._renderer.xr.enabled=!1,this._setSize(256);let i=this._allocateTargets();if(i.depthBuffer=!0,this._sceneToCubeUV(e,n,o,i),t>0)this._blur(i,0,0,t);return this._applyPMREM(i),this._cleanup(i),i}fromEquirectangular(e,t=null){return this._fromTexture(e,t)}fromCubemap(e,t=null){return this._fromTexture(e,t)}compileCubemapShader(){if(this._cubemapMaterial===null)this._cubemapMaterial=Zpt(),this._compileMaterial(this._cubemapMaterial)}compileEquirectangularShader(){if(this._equirectMaterial===null)this._equirectMaterial=$pt(),this._compileMaterial(this._equirectMaterial)}dispose(){if(this._dispose(),this._cubemapMaterial!==null)this._cubemapMaterial.dispose();if(this._equirectMaterial!==null)this._equirectMaterial.dispose()}_setSize(e){this._lodMax=Math.floor(Math.log2(e)),this._cubeSize=Math.pow(2,this._lodMax)}_dispose(){if(this._blurMaterial!==null)this._blurMaterial.dispose();if(this._pingPongRenderTarget!==null)this._pingPongRenderTarget.dispose();for(let e=0;e<this._lodPlanes.length;e++)this._lodPlanes[e].dispose()}_cleanup(e){this._renderer.setRenderTarget(h9e,m9e,p9e),this._renderer.xr.enabled=A9e,e.scissorTest=!1,Lhe(e,0,0,e.width,e.height)}_fromTexture(e,t){if(e.mapping===301||e.mapping===302)this._setSize(e.image.length===0?16:e.image[0].width||e.image[0].image.width);else this._setSize(e.image.width/4);h9e=this._renderer.getRenderTarget(),m9e=this._renderer.getActiveCubeFace(),p9e=this._renderer.getActiveMipmapLevel(),A9e=this._renderer.xr.enabled,this._renderer.xr.enabled=!1;let n=t||this._allocateTargets();return this._textureToCubeUV(e,n),this._applyPMREM(n),this._cleanup(n),n}_allocateTargets(){let e=3*Math.max(this._cubeSize,112),t=4*this._cubeSize,n={magFilter:1006,minFilter:1006,generateMipmaps:!1,type:1016,format:1023,colorSpace:"srgb-linear",depthBuffer:!1},o=Jpt(e,t,n);if(this._pingPongRenderTarget===null||this._pingPongRenderTarget.width!==e||this._pingPongRenderTarget.height!==t){if(this._pingPongRenderTarget!==null)this._dispose();this._pingPongRenderTarget=Jpt(e,t,n);let{_lodMax:i}=this;({sizeLods:this._sizeLods,lodPlanes:this._lodPlanes,sigmas:this._sigmas}=aso(i)),this._blurMaterial=cso(i,e,t)}return o}_compileMaterial(e){let t=new Mo(this._lodPlanes[0],e);this._renderer.compile(t,u9e)}_sceneToCubeUV(e,t,n,o){let s=new rl(90,1,t,n),a=[1,-1,1,1,1,1],c=[1,1,1,-1,-1,-1],l=this._renderer,{autoClear:d,toneMapping:u}=l;l.getClearColor(jpt),l.toneMapping=0,l.autoClear=!1;let h=new wA({name:"PMREM.Background",side:1,depthWrite:!1,depthTest:!1}),A=new Mo(new km,h),m=!1,p=e.background;if(p){if(p.isColor)h.color.copy(p),e.background=null,m=!0}else h.color.copy(jpt),m=!0;for(let g=0;g<6;g++){let _=g%3;if(_===0)s.up.set(0,a[g],0),s.lookAt(c[g],0,0);else if(_===1)s.up.set(0,0,a[g]),s.lookAt(0,c[g],0);else s.up.set(0,a[g],0),s.lookAt(0,0,c[g]);let f=this._cubeSize;if(Lhe(o,_*f,g>2?f:0,f,f),l.setRenderTarget(o),m)l.render(A,s);l.render(e,s)}A.geometry.dispose(),A.material.dispose(),l.toneMapping=u,l.autoClear=d,e.background=p}_textureToCubeUV(e,t){let n=this._renderer,o=e.mapping===301||e.mapping===302;if(o){if(this._cubemapMaterial===null)this._cubemapMaterial=Zpt();this._cubemapMaterial.uniforms.flipEnvMap.value=e.isRenderTargetTexture===!1?-1:1}else if(this._equirectMaterial===null)this._equirectMaterial=$pt();let i=o?this._cubemapMaterial:this._equirectMaterial,r=new Mo(this._lodPlanes[0],i),s=i.uniforms;s.envMap.value=e;let a=this._cubeSize;Lhe(t,0,0,3*a,2*a),n.setRenderTarget(t),n.render(r,u9e)}_applyPMREM(e){let t=this._renderer,n=t.autoClear;t.autoClear=!1;let o=this._lodPlanes.length;for(let i=1;i<o;i++){let r=Math.sqrt(this._sigmas[i]*this._sigmas[i]-this._sigmas[i-1]*this._sigmas[i-1]),s=qpt[(o-i-1)%qpt.length];this._blur(e,i-1,i,r,s)}t.autoClear=n}_blur(e,t,n,o,i){let r=this._pingPongRenderTarget;this._halfBlur(e,r,t,n,o,"latitudinal",i),this._halfBlur(r,e,n,n,o,"longitudinal",i)}_halfBlur(e,t,n,o,i,r,s){let a=this._renderer,c=this._blurMaterial;if(r!=="latitudinal"&&r!=="longitudinal")console.error("blur direction must be either latitudinal or longitudinal!");let l=3,d=new Mo(this._lodPlanes[o],c),u=c.uniforms,h=this._sizeLods[n]-1,A=isFinite(i)?Math.PI/(2*h):2*Math.PI/(2*mQ-1),m=i/A,p=isFinite(i)?1+Math.floor(l*m):mQ;if(p>mQ)console.warn(`sigmaRadians, ${i}, is too large and will clip, as it requested ${p} samples when the maximum is set to ${mQ}`);let g=[],_=0;for(let I=0;I<mQ;++I){let b=I/m,P=Math.exp(-b*b/2);if(g.push(P),I===0)_+=P;else if(I<p)_+=2*P}for(let I=0;I<g.length;I++)g[I]=g[I]/_;if(u.envMap.value=e.texture,u.samples.value=p,u.weights.value=g,u.latitudinal.value=r==="latitudinal",s)u.poleAxis.value=s;let{_lodMax:f}=this;u.dTheta.value=A,u.mipInt.value=f-n;let y=this._sizeLods[o],x=3*y*(o>f-RG?o-f+RG:0),C=4*(this._cubeSize-y);Lhe(t,x,C,3*y,2*y),a.setRenderTarget(t),a.render(d,u9e)}}function aso(e){let t=[],n=[],o=[],i=e,r=e-RG+1+Kpt.length;for(let s=0;s<r;s++){let a=Math.pow(2,i);n.push(a);let c=1/a;if(s>e-RG)c=Kpt[s-e+RG-1];else if(s===0)c=0;o.push(c);let l=1/(a-2),d=-l,u=1+l,h=[d,d,u,d,u,u,d,d,u,u,d,u],A=6,m=6,p=3,g=2,_=1,f=new Float32Array(p*m*A),y=new Float32Array(g*m*A),x=new Float32Array(_*m*A);for(let I=0;I<A;I++){let b=I%3*2/3-1,P=I>2?0:-1,E=[b,P,0,b+0.6666666666666666,P,0,b+0.6666666666666666,P+1,0,b,P,0,b+0.6666666666666666,P+1,0,b,P+1,0];f.set(E,p*m*I),y.set(h,g*m*I);let B=[I,I,I,I,I,I];x.set(B,_*m*I)}let C=new zs;if(C.setAttribute("position",new Rc(f,p)),C.setAttribute("uv",new Rc(y,g)),C.setAttribute("faceIndex",new Rc(x,_)),t.push(C),i>RG)i--}return{lodPlanes:t,sizeLods:n,sigmas:o}}function Jpt(e,t,n){let o=new N7(e,t,n);return o.texture.mapping=306,o.texture.name="PMREM.cubeUv",o.scissorTest=!0,o}function Lhe(e,t,n,o,i){e.viewport.set(t,n,o,i),e.scissor.set(t,n,o,i)}function cso(e,t,n){let o=new Float32Array(mQ),i=new bt(0,1,0);return new ix({name:"SphericalGaussianBlur",defines:{n:mQ,CUBEUV_TEXEL_WIDTH:1/t,CUBEUV_TEXEL_HEIGHT:1/n,CUBEUV_MAX_MIP:`${e}.0`},uniforms:{envMap:{value:null},samples:{value:1},weights:{value:o},latitudinal:{value:!1},dTheta:{value:0},mipInt:{value:0},poleAxis:{value:i}},vertexShader:z9e(),fragmentShader:`
precision mediump float;
precision mediump int;
varying vec3 vOutputDirection;
uniform sampler2D envMap;
uniform int samples;
uniform float weights[ n ];
uniform bool latitudinal;
uniform float dTheta;
uniform float mipInt;
uniform vec3 poleAxis;
#define ENVMAP_TYPE_CUBE_UV
#include <cube_uv_reflection_fragment>
vec3 getSample( float theta, vec3 axis ) {
float cosTheta = cos( theta );
// Rodrigues' axis-angle rotation
vec3 sampleDirection = vOutputDirection * cosTheta
+ cross( axis, vOutputDirection ) * sin( theta )
+ axis * dot( axis, vOutputDirection ) * ( 1.0 - cosTheta );
return bilinearCubeUV( envMap, sampleDirection, mipInt );
}
void main() {
vec3 axis = latitudinal ? poleAxis : cross( poleAxis, vOutputDirection );
if ( all( equal( axis, vec3( 0.0 ) ) ) ) {
axis = vec3( vOutputDirection.z, 0.0, - vOutputDirection.x );
}
axis = normalize( axis );
gl_FragColor = vec4( 0.0, 0.0, 0.0, 1.0 );
gl_FragColor.rgb += weights[ 0 ] * getSample( 0.0, axis );
for ( int i = 1; i < n; i++ ) {
if ( i >= samples ) {
break;
}
float theta = dTheta * float( i );
gl_FragColor.rgb += weights[ i ] * getSample( -1.0 * theta, axis );
gl_FragColor.rgb += weights[ i ] * getSample( theta, axis );
}
}
`,blending:0,depthTest:!1,depthWrite:!1})}function $pt(){return new ix({name:"EquirectangularToCubeUV",uniforms:{envMap:{value:null}},vertexShader:z9e(),fragmentShader:`
precision mediump float;
precision mediump int;
varying vec3 vOutputDirection;
uniform sampler2D envMap;
#include <common>
void main() {
vec3 outputDirection = normalize( vOutputDirection );
vec2 uv = equirectUv( outputDirection );
gl_FragColor = vec4( texture2D ( envMap, uv ).rgb, 1.0 );
}
`,blending:0,depthTest:!1,depthWrite:!1})}function Zpt(){return new ix({name:"CubemapToCubeUV",uniforms:{envMap:{value:null},flipEnvMap:{value:-1}},vertexShader:z9e(),fragmentShader:`
precision mediump float;
precision mediump int;
uniform float flipEnvMap;
varying vec3 vOutputDirection;
uniform samplerCube envMap;
void main() {
gl_FragColor = textureCube( envMap, vec3( flipEnvMap * vOutputDirection.x, vOutputDirection.yz ) );
}
`,blending:0,depthTest:!1,depthWrite:!1})}function z9e(){return`
precision mediump float;
precision mediump int;
attribute float faceIndex;
varying vec3 vOutputDirection;
// RH coordinate system; PMREM face-indexing convention
vec3 getDirection( vec2 uv, float face ) {
uv = 2.0 * uv - 1.0;
vec3 direction = vec3( uv, 1.0 );
if ( face == 0.0 ) {
direction = direction.zyx; // ( 1, v, u ) pos x
} else if ( face == 1.0 ) {
direction = direction.xzy;
direction.xz *= -1.0; // ( -u, 1, -v ) pos y
} else if ( face == 2.0 ) {
direction.x *= -1.0; // ( -u, v, 1 ) pos z
} else if ( face == 3.0 ) {
direction = direction.zyx;
direction.xz *= -1.0; // ( -1, v, -u ) neg x
} else if ( face == 4.0 ) {
direction = direction.xzy;
direction.xy *= -1.0; // ( -u, -1, v ) neg y
} else if ( face == 5.0 ) {
direction.z *= -1.0; // ( u, v, -1 ) neg z
}
return direction;
}
void main() {
vOutputDirection = getDirection( uv, faceIndex );
gl_Position = vec4( position, 1.0 );
}
`}function lso(e){let t=new WeakMap,n=null;function o(a){if(a&&a.isTexture){let c=a.mapping,l=c===303||c===304,d=c===301||c===302;if(l||d){let u=t.get(a),h=u!==void 0?u.texture.pmremVersion:0;if(a.isRenderTargetTexture&&a.pmremVersion!==h){if(n===null)n=new KJ(e);return u=l?n.fromEquirectangular(a,u):n.fromCubemap(a,u),u.texture.pmremVersion=a.pmremVersion,t.set(a,u),u.texture}else if(u!==void 0)return u.texture;else{let A=a.image;if(l&&A&&A.height>0||d&&A&&i(A)){if(n===null)n=new KJ(e);return u=l?n.fromEquirectangular(a):n.fromCubemap(a),u.texture.pmremVersion=a.pmremVersion,t.set(a,u),a.addEventListener("dispose",r),u.texture}else return null}}}return a}function i(a){let c=0,l=6;for(let d=0;d<l;d++)if(a[d]!==void 0)c++;return c===l}function r(a){let c=a.target;c.removeEventListener("dispose",r);let l=t.get(c);if(l!==void 0)t.delete(c),l.dispose()}function s(){if(t=new WeakMap,n!==null)n.dispose(),n=null}return{get:o,dispose:s}}function dso(e){let t={};function n(o){if(t[o]!==void 0)return t[o];let i;switch(o){case"WEBGL_depth_texture":i=e.getExtension("WEBGL_depth_texture")||e.getExtension("MOZ_WEBGL_depth_texture")||e.getExtension("WEBKIT_WEBGL_depth_texture");break;case"EXT_texture_filter_anisotropic":i=e.getExtension("EXT_texture_filter_anisotropic")||e.getExtension("MOZ_EXT_texture_filter_anisotropic")||e.getExtension("WEBKIT_EXT_texture_filter_anisotropic");break;case"WEBGL_compressed_texture_s3tc":i=e.getExtension("WEBGL_compressed_texture_s3tc")||e.getExtension("MOZ_WEBGL_compressed_texture_s3tc")||e.getExtension("WEBKIT_WEBGL_compressed_texture_s3tc");break;case"WEBGL_compressed_texture_pvrtc":i=e.getExtension("WEBGL_compressed_texture_pvrtc")||e.getExtension("WEBKIT_WEBGL_compressed_texture_pvrtc");break;default:i=e.getExtension(o)}return t[o]=i,i}return{has:function(o){return n(o)!==null},init:function(){n("EXT_color_buffer_float"),n("WEBGL_clip_cull_distance"),n("OES_texture_float_linear"),n("EXT_color_buffer_half_float"),n("WEBGL_multisampled_render_to_texture"),n("WEBGL_render_shared_exponent")},get:function(o){let i=n(o);if(i===null)R9e("THREE.WebGLRenderer: "+o+" extension not supported.");return i}}}function uso(e,t,n,o){let i={},r=new WeakMap;function s(u){let h=u.target;if(h.index!==null)t.remove(h.index);for(let m in h.attributes)t.remove(h.attributes[m]);for(let m in h.morphAttributes){let p=h.morphAttributes[m];for(let g=0,_=p.length;g<_;g++)t.remove(p[g])}h.removeEventListener("dispose",s),delete i[h.id];let A=r.get(h);if(A)t.remove(A),r.delete(h);if(o.releaseStatesOfGeometry(h),h.isInstancedBufferGeometry===!0)delete h._maxInstanceCount;n.memory.geometries--}function a(u,h){if(i[h.id]===!0)return h;return h.addEventListener("dispose",s),i[h.id]=!0,n.memory.geometries++,h}function c(u){let h=u.attributes;for(let m in h)t.update(h[m],e.ARRAY_BUFFER);let A=u.morphAttributes;for(let m in A){let p=A[m];for(let g=0,_=p.length;g<_;g++)t.update(p[g],e.ARRAY_BUFFER)}}function l(u){let h=[],A=u.index,m=u.attributes.position,p=0;if(A!==null){let f=A.array;p=A.version;for(let y=0,x=f.length;y<x;y+=3){let C=f[y+0],I=f[y+1],b=f[y+2];h.push(C,I,I,b,b,C)}}else if(m!==void 0){let f=m.array;p=m.version;for(let y=0,x=f.length/3-1;y<x;y+=3){let C=y+0,I=y+1,b=y+2;h.push(C,I,I,b,b,C)}}else return;let g=new((WAt(h))?n$:L9e)(h,1);g.version=p;let _=r.get(u);if(_)t.remove(_);r.set(u,g)}function d(u){let h=r.get(u);if(h){let A=u.index;if(A!==null){if(h.version<A.version)l(u)}}else l(u);return r.get(u)}return{get:a,update:c,getWireframeAttribute:d}}function hso(e,t,n){let o;function i(h){o=h}let r,s;function a(h){r=h.type,s=h.bytesPerElement}function c(h,A){e.drawElements(o,A,r,h*s),n.update(A,o,1)}function l(h,A,m){if(m===0)return;e.drawElementsInstanced(o,A,r,h*s,m),n.update(A,o,m)}function d(h,A,m){if(m===0)return;let p=t.get("WEBGL_multi_draw");if(p===null)for(let g=0;g<m;g++)this.render(h[g]/s,A[g]);else{p.multiDrawElementsWEBGL(o,A,0,r,h,0,m);let g=0;for(let _=0;_<m;_++)g+=A[_];n.update(g,o,1)}}function u(h,A,m,p){if(m===0)return;let g=t.get("WEBGL_multi_draw");if(g===null)for(let _=0;_<h.length;_++)l(h[_]/s,A[_],p[_]);else{g.multiDrawElementsInstancedWEBGL(o,A,0,r,h,0,p,0,m);let _=0;for(let f=0;f<m;f++)_+=A[f];for(let f=0;f<p.length;f++)n.update(_,o,p[f])}}this.setMode=i,this.setIndex=a,this.render=c,this.renderInstances=l,this.renderMultiDraw=d,this.renderMultiDrawInstances=u}function mso(e){let t={geometries:0,textures:0},n={frame:0,calls:0,triangles:0,points:0,lines:0};function o(r,s,a){switch(n.calls++,s){case e.TRIANGLES:n.triangles+=a*(r/3);break;case e.LINES:n.lines+=a*(r/2);break;case e.LINE_STRIP:n.lines+=a*(r-1);break;case e.LINE_LOOP:n.lines+=a*r;break;case e.POINTS:n.points+=a*r;break;default:console.error("THREE.WebGLInfo: Unknown draw mode:",s);break}}function i(){n.calls=0,n.triangles=0,n.points=0,n.lines=0}return{memory:t,render:n,programs:null,autoReset:!0,reset:i,update:o}}function pso(e,t,n){let o=new WeakMap,i=new Gl;function r(s,a,c){let l=s.morphTargetInfluences,d=a.morphAttributes.position||a.morphAttributes.normal||a.morphAttributes.color,u=d!==void 0?d.length:0,h=o.get(a);if(h===void 0||h.count!==u){let E=function(){b.dispose(),o.delete(a),a.removeEventListener("dispose",E)};if(h!==void 0)h.texture.dispose();let A=a.morphAttributes.position!==void 0,m=a.morphAttributes.normal!==void 0,p=a.morphAttributes.color!==void 0,g=a.morphAttributes.position||[],_=a.morphAttributes.normal||[],f=a.morphAttributes.color||[],y=0;if(A===!0)y=1;if(m===!0)y=2;if(p===!0)y=3;let x=a.attributes.position.count*y,C=1;if(x>t.maxTextureSize)C=Math.ceil(x/t.maxTextureSize),x=t.maxTextureSize;let I=new Float32Array(x*C*4*u),b=new k9e(I,x,C,u);b.type=1015,b.needsUpdate=!0;let P=y*4;for(let B=0;B<u;B++){let w=g[B],T=_[B],Q=f[B],N=x*C*4*B;for(let F=0;F<w.count;F++){let H=F*P;if(A===!0)i.fromBufferAttribute(w,F),I[N+H+0]=i.x,I[N+H+1]=i.y,I[N+H+2]=i.z,I[N+H+3]=0;if(m===!0)i.fromBufferAttribute(T,F),I[N+H+4]=i.x,I[N+H+5]=i.y,I[N+H+6]=i.z,I[N+H+7]=0;if(p===!0)i.fromBufferAttribute(Q,F),I[N+H+8]=i.x,I[N+H+9]=i.y,I[N+H+10]=i.z,I[N+H+11]=Q.itemSize===4?i.w:1}}h={count:u,texture:b,size:new ro(x,C)},o.set(a,h),a.addEventListener("dispose",E)}if(s.isInstancedMesh===!0&&s.morphTexture!==null)c.getUniforms().setValue(e,"morphTexture",s.morphTexture,n);else{let A=0;for(let p=0;p<l.length;p++)A+=l[p];let m=a.morphTargetsRelative?1:1-A;c.getUniforms().setValue(e,"morphTargetBaseInfluence",m),c.getUniforms().setValue(e,"morphTargetInfluences",l)}c.getUniforms().setValue(e,"morphTargetsTexture",h.texture,n),c.getUniforms().setValue(e,"morphTargetsTextureSize",h.size)}return{update:r}}function Aso(e,t,n,o){let i=new WeakMap;function r(c){let l=o.render.frame,d=c.geometry,u=t.get(c,d);if(i.get(u)!==l)t.update(u),i.set(u,l);if(c.isInstancedMesh){if(c.hasEventListener("dispose",a)===!1)c.addEventListener("dispose",a);if(i.get(c)!==l){if(n.update(c.instanceMatrix,e.ARRAY_BUFFER),c.instanceColor!==null)n.update(c.instanceColor,e.ARRAY_BUFFER);i.set(c,l)}}if(c.isSkinnedMesh){let h=c.skeleton;if(i.get(h)!==l)h.update(),i.set(h,l)}return u}function s(){i=new WeakMap}function a(c){let l=c.target;if(l.removeEventListener("dispose",a),n.remove(l.instanceMatrix),l.instanceColor!==null)n.remove(l.instanceColor)}return{update:r,dispose:s}}class G9e extends sl{constructor(e,t,n,o,i,r,s,a,c,l=1026){if(l!==1026&&l!==1027)throw Error("DepthTexture format must be either THREE.DepthFormat or THREE.DepthStencilFormat");if(n===void 0&&l===1026)n=1014;if(n===void 0&&l===1027)n=1020;super(null,o,i,r,s,a,l,n,c);this.isDepthTexture=!0,this.image={width:e,height:t},this.magFilter=s!==void 0?s:1003,this.minFilter=a!==void 0?a:1003,this.flipY=!1,this.generateMipmaps=!1,this.compareFunction=null}copy(e){return super.copy(e),this.compareFunction=e.compareFunction,this}toJSON(e){let t=super.toJSON(e);if(this.compareFunction!==null)t.compareFunction=this.compareFunction;return t}}var t_t=new sl,n_t=new G9e(1,1);n_t.compareFunction=515;var o_t=new k9e,i_t=new jAt,r_t=new O9e,eAt=[],tAt=[],nAt=new Float32Array(16),oAt=new Float32Array(9),iAt=new Float32Array(4);function OG(e,t,n){let o=e[0];if(o<=0||o>0)return e;let i=t*n,r=eAt[i];if(r===void 0)r=new Float32Array(i),eAt[i]=r;if(t!==0){o.toArray(r,0);for(let s=1,a=0;s!==t;++s)a+=n,e[s].toArray(r,a)}return r}function Dp(e,t){if(e.length!==t.length)return!1;for(let n=0,o=e.length;n<o;n++)if(e[n]!==t[n])return!1;return!0}function Np(e,t){for(let n=0,o=t.length;n<o;n++)e[n]=t[n]}function d0e(e,t){let n=tAt[t];if(n===void 0)n=new Int32Array(t),tAt[t]=n;for(let o=0;o!==t;++o)n[o]=e.allocateTextureUnit();return n}function _so(e,t){let n=this.cache;if(n[0]===t)return;e.uniform1f(this.addr,t),n[0]=t}function gso(e,t){let n=this.cache;if(t.x!==void 0){if(n[0]!==t.x||n[1]!==t.y)e.uniform2f(this.addr,t.x,t.y),n[0]=t.x,n[1]=t.y}else{if(Dp(n,t))return;e.uniform2fv(this.addr,t),Np(n,t)}}function fso(e,t){let n=this.cache;if(t.x!==void 0){if(n[0]!==t.x||n[1]!==t.y||n[2]!==t.z)e.uniform3f(this.addr,t.x,t.y,t.z),n[0]=t.x,n[1]=t.y,n[2]=t.z}else if(t.r!==void 0){if(n[0]!==t.r||n[1]!==t.g||n[2]!==t.b)e.uniform3f(this.addr,t.r,t.g,t.b),n[0]=t.r,n[1]=t.g,n[2]=t.b}else{if(Dp(n,t))return;e.uniform3fv(this.addr,t),Np(n,t)}}function yso(e,t){let n=this.cache;if(t.x!==void 0){if(n[0]!==t.x||n[1]!==t.y||n[2]!==t.z||n[3]!==t.w)e.uniform4f(this.addr,t.x,t.y,t.z,t.w),n[0]=t.x,n[1]=t.y,n[2]=t.z,n[3]=t.w}else{if(Dp(n,t))return;e.uniform4fv(this.addr,t),Np(n,t)}}function xso(e,t){let n=this.cache,o=t.elements;if(o===void 0){if(Dp(n,t))return;e.uniformMatrix2fv(this.addr,!1,t),Np(n,t)}else{if(Dp(n,o))return;iAt.set(o),e.uniformMatrix2fv(this.addr,!1,iAt),Np(n,o)}}function Cso(e,t){let n=this.cache,o=t.elements;if(o===void 0){if(Dp(n,t))return;e.uniformMatrix3fv(this.addr,!1,t),Np(n,t)}else{if(Dp(n,o))return;oAt.set(o),e.uniformMatrix3fv(this.addr,!1,oAt),Np(n,o)}}function Iso(e,t){let n=this.cache,o=t.elements;if(o===void 0){if(Dp(n,t))return;e.uniformMatrix4fv(this.addr,!1,t),Np(n,t)}else{if(Dp(n,o))return;nAt.set(o),e.uniformMatrix4fv(this.addr,!1,nAt),Np(n,o)}}function bso(e,t){let n=this.cache;if(n[0]===t)return;e.uniform1i(this.addr,t),n[0]=t}function Sso(e,t){let n=this.cache;if(t.x!==void 0){if(n[0]!==t.x||n[1]!==t.y)e.uniform2i(this.addr,t.x,t.y),n[0]=t.x,n[1]=t.y}else{if(Dp(n,t))return;e.uniform2iv(this.addr,t),Np(n,t)}}function Pso(e,t){let n=this.cache;if(t.x!==void 0){if(n[0]!==t.x||n[1]!==t.y||n[2]!==t.z)e.uniform3i(this.addr,t.x,t.y,t.z),n[0]=t.x,n[1]=t.y,n[2]=t.z}else{if(Dp(n,t))return;e.uniform3iv(this.addr,t),Np(n,t)}}function vso(e,t){let n=this.cache;if(t.x!==void 0){if(n[0]!==t.x||n[1]!==t.y||n[2]!==t.z||n[3]!==t.w)e.uniform4i(this.addr,t.x,t.y,t.z,t.w),n[0]=t.x,n[1]=t.y,n[2]=t.z,n[3]=t.w}else{if(Dp(n,t))return;e.uniform4iv(this.addr,t),Np(n,t)}}function Eso(e,t){let n=this.cache;if(n[0]===t)return;e.uniform1ui(this.addr,t),n[0]=t}function Mso(e,t){let n=this.cache;if(t.x!==void 0){if(n[0]!==t.x||n[1]!==t.y)e.uniform2ui(this.addr,t.x,t.y),n[0]=t.x,n[1]=t.y}else{if(Dp(n,t))return;e.uniform2uiv(this.addr,t),Np(n,t)}}function Bso(e,t){let n=this.cache;if(t.x!==void 0){if(n[0]!==t.x||n[1]!==t.y||n[2]!==t.z)e.uniform3ui(this.addr,t.x,t.y,t.z),n[0]=t.x,n[1]=t.y,n[2]=t.z}else{if(Dp(n,t))return;e.uniform3uiv(this.addr,t),Np(n,t)}}function wso(e,t){let n=this.cache;if(t.x!==void 0){if(n[0]!==t.x||n[1]!==t.y||n[2]!==t.z||n[3]!==t.w)e.uniform4ui(this.addr,t.x,t.y,t.z,t.w),n[0]=t.x,n[1]=t.y,n[2]=t.z,n[3]=t.w}else{if(Dp(n,t))return;e.uniform4uiv(this.addr,t),Np(n,t)}}function Tso(e,t,n){let o=this.cache,i=n.allocateTextureUnit();if(o[0]!==i)e.uniform1i(this.addr,i),o[0]=i;let r=this.type===e.SAMPLER_2D_SHADOW?n_t:t_t;n.setTexture2D(t||r,i)}function Dso(e,t,n){let o=this.cache,i=n.allocateTextureUnit();if(o[0]!==i)e.uniform1i(this.addr,i),o[0]=i;n.setTexture3D(t||i_t,i)}function Nso(e,t,n){let o=this.cache,i=n.allocateTextureUnit();if(o[0]!==i)e.uniform1i(this.addr,i),o[0]=i;n.setTextureCube(t||r_t,i)}function Rso(e,t,n){let o=this.cache,i=n.allocateTextureUnit();if(o[0]!==i)e.uniform1i(this.addr,i),o[0]=i;n.setTexture2DArray(t||o_t,i)}function Qso(e){switch(e){case 5126:return _so;case 35664:return gso;case 35665:return fso;case 35666:return yso;case 35674:return xso;case 35675:return Cso;case 35676:return Iso;case 5124:case 35670:return bso;case 35667:case 35671:return Sso;case 35668:case 35672:return Pso;case 35669:case 35673:return vso;case 5125:return Eso;case 36294:return Mso;case 36295:return Bso;case 36296:return wso;case 35678:case 36198:case 36298:case 36306:case 35682:return Tso;case 35679:case 36299:case 36307:return Dso;case 35680:case 36300:case 36308:case 36293:return Nso;case 36289:case 36303:case 36311:case 36292:return Rso}}function kso(e,t){e.uniform1fv(this.addr,t)}function Lso(e,t){let n=OG(t,this.size,2);e.uniform2fv(this.addr,n)}function Fso(e,t){let n=OG(t,this.size,3);e.uniform3fv(this.addr,n)}function Hso(e,t){let n=OG(t,this.size,4);e.uniform4fv(this.addr,n)}function Oso(e,t){let n=OG(t,this.size,4);e.uniformMatrix2fv(this.addr,!1,n)}function zso(e,t){let n=OG(t,this.size,9);e.uniformMatrix3fv(this.addr,!1,n)}function Gso(e,t){let n=OG(t,this.size,16);e.uniformMatrix4fv(this.addr,!1,n)}function Yso(e,t){e.uniform1iv(this.addr,t)}function Vso(e,t){e.uniform2iv(this.addr,t)}function Uso(e,t){e.uniform3iv(this.addr,t)}function Wso(e,t){e.uniform4iv(this.addr,t)}function Xso(e,t){e.uniform1uiv(this.addr,t)}function Kso(e,t){e.uniform2uiv(this.addr,t)}function jso(e,t){e.uniform3uiv(this.addr,t)}function qso(e,t){e.uniform4uiv(this.addr,t)}function Jso(e,t,n){let o=this.cache,i=t.length,r=d0e(n,i);if(!Dp(o,r))e.uniform1iv(this.addr,r),Np(o,r);for(let s=0;s!==i;++s)n.setTexture2D(t[s]||t_t,r[s])}function $so(e,t,n){let o=this.cache,i=t.length,r=d0e(n,i);if(!Dp(o,r))e.uniform1iv(this.addr,r),Np(o,r);for(let s=0;s!==i;++s)n.setTexture3D(t[s]||i_t,r[s])}function Zso(e,t,n){let o=this.cache,i=t.length,r=d0e(n,i);if(!Dp(o,r))e.uniform1iv(this.addr,r),Np(o,r);for(let s=0;s!==i;++s)n.setTextureCube(t[s]||r_t,r[s])}function eao(e,t,n){let o=this.cache,i=t.length,r=d0e(n,i);if(!Dp(o,r))e.uniform1iv(this.addr,r),Np(o,r);for(let s=0;s!==i;++s)n.setTexture2DArray(t[s]||o_t,r[s])}function tao(e){switch(e){case 5126:return kso;case 35664:return Lso;case 35665:return Fso;case 35666:return Hso;case 35674:return Oso;case 35675:return zso;case 35676:return Gso;case 5124:case 35670:return Yso;case 35667:case 35671:return Vso;case 35668:case 35672:return Uso;case 35669:case 35673:return Wso;case 5125:return Xso;case 36294:return Kso;case 36295:return jso;case 36296:return qso;case 35678:case 36198:case 36298:case 36306:case 35682:return Jso;case 35679:case 36299:case 36307:return $so;case 35680:case 36300:case 36308:case 36293:return Zso;case 36289:case 36303:case 36311:case 36292:return eao}}class s_t{constructor(e,t,n){this.id=e,this.addr=n,this.cache=[],this.type=t.type,this.setValue=Qso(t.type)}}class a_t{constructor(e,t,n){this.id=e,this.addr=n,this.cache=[],this.type=t.type,this.size=t.size,this.setValue=tao(t.type)}}class c_t{constructor(e){this.id=e,this.seq=[],this.map={}}setValue(e,t,n){let o=this.seq;for(let i=0,r=o.length;i!==r;++i){let s=o[i];s.setValue(e,t[s.id],n)}}}var _9e=/(\w+)(\])?(\[|\.)?/g;function rAt(e,t){e.seq.push(t),e.map[t.id]=t}function nao(e,t,n){let o=e.name,i=o.length;_9e.lastIndex=0;while(!0){let r=_9e.exec(o),s=_9e.lastIndex,a=r[1],c=r[2]==="]",l=r[3];if(c)a=a|0;if(l===void 0||l==="["&&s+2===i){rAt(n,l===void 0?new s_t(a,e,t):new a_t(a,e,t));break}else{let u=n.map[a];if(u===void 0)u=new c_t(a),rAt(n,u);n=u}}}class VJ{constructor(e,t){this.seq=[],this.map={};let n=e.getProgramParameter(t,e.ACTIVE_UNIFORMS);for(let o=0;o<n;++o){let i=e.getActiveUniform(t,o),r=e.getUniformLocation(t,i.name);nao(i,r,this)}}setValue(e,t,n,o){let i=this.map[t];if(i!==void 0)i.setValue(e,n,o)}setOptional(e,t,n){let o=t[n];if(o!==void 0)this.setValue(e,n,o)}static upload(e,t,n,o){for(let i=0,r=t.length;i!==r;++i){let s=t[i],a=n[s.id];if(a.needsUpdate!==!1)s.setValue(e,a.value,o)}}static seqWithValue(e,t){let n=[];for(let o=0,i=e.length;o!==i;++o){let r=e[o];if(r.id in t)n.push(r)}return n}}function sAt(e,t,n){let o=e.createShader(t);return e.shaderSource(o,n),e.compileShader(o),o}var oao=37297,iao=0;function rao(e,t){let n=e.split(`
`),o=[],i=Math.max(t-6,0),r=Math.min(t+6,n.length);for(let s=i;s<r;s++){let a=s+1;o.push(`${a===t?">":" "} ${a}: ${n[s]}`)}return o.join(`
`)}function sao(e){let t=ed.getPrimaries(ed.workingColorSpace),n=ed.getPrimaries(e),o;if(t===n)o="";else if(t==="p3"&&n==="rec709")o="LinearDisplayP3ToLinearSRGB";else if(t==="rec709"&&n==="p3")o="LinearSRGBToLinearDisplayP3";switch(e){case"srgb-linear":case"display-p3-linear":return[o,"LinearTransferOETF"];case"srgb":case"display-p3":return[o,"sRGBTransferOETF"];default:return console.warn("THREE.WebGLProgram: Unsupported color space:",e),[o,"LinearTransferOETF"]}}function aAt(e,t,n){let o=e.getShaderParameter(t,e.COMPILE_STATUS),i=e.getShaderInfoLog(t).trim();if(o&&i==="")return"";let r=/ERROR: 0:(\d+)/.exec(i);if(r){let s=parseInt(r[1]);return n.toUpperCase()+`
`+i+`
`+rao(e.getShaderSource(t),s)}else return i}function aao(e,t){let n=sao(t);return`vec4 ${e}( vec4 value ) { return ${n[0]}( ${n[1]}( value ) ); }`}function cao(e,t){let n;switch(t){case 1:n="Linear";break;case 2:n="Reinhard";break;case 3:n="OptimizedCineon";break;case 4:n="ACESFilmic";break;case 6:n="AgX";break;case 7:n="Neutral";break;case 5:n="Custom";break;default:console.warn("THREE.WebGLProgram: Unsupported toneMapping:",t),n="Linear"}return"vec3 "+e+"( vec3 color ) { return "+n+"ToneMapping( color ); }"}function lao(e){return[e.extensionClipCullDistance?"#extension GL_ANGLE_clip_cull_distance : require":"",e.extensionMultiDraw?"#extension GL_ANGLE_multi_draw : require":""].filter(GJ).join(`
`)}function dao(e){let t=[];for(let n in e){let o=e[n];if(o===!1)continue;t.push("#define "+n+" "+o)}return t.join(`
`)}function uao(e,t){let n={},o=e.getProgramParameter(t,e.ACTIVE_ATTRIBUTES);for(let i=0;i<o;i++){let r=e.getActiveAttrib(t,i),s=r.name,a=1;if(r.type===e.FLOAT_MAT2)a=2;if(r.type===e.FLOAT_MAT3)a=3;if(r.type===e.FLOAT_MAT4)a=4;n[s]={type:r.type,location:e.getAttribLocation(t,s),locationSize:a}}return n}function GJ(e){return e!==""}function cAt(e,t){let n=t.numSpotLightShadows+t.numSpotLightMaps-t.numSpotLightShadowsWithMaps;return e.replace(/NUM_DIR_LIGHTS/g,t.numDirLights).replace(/NUM_SPOT_LIGHTS/g,t.numSpotLights).replace(/NUM_SPOT_LIGHT_MAPS/g,t.numSpotLightMaps).replace(/NUM_SPOT_LIGHT_COORDS/g,n).replace(/NUM_RECT_AREA_LIGHTS/g,t.numRectAreaLights).replace(/NUM_POINT_LIGHTS/g,t.numPointLights).replace(/NUM_HEMI_LIGHTS/g,t.numHemiLights).replace(/NUM_DIR_LIGHT_SHADOWS/g,t.numDirLightShadows).replace(/NUM_SPOT_LIGHT_SHADOWS_WITH_MAPS/g,t.numSpotLightShadowsWithMaps).replace(/NUM_SPOT_LIGHT_SHADOWS/g,t.numSpotLightShadows).replace(/NUM_POINT_LIGHT_SHADOWS/g,t.numPointLightShadows)}function lAt(e,t){return e.replace(/NUM_CLIPPING_PLANES/g,t.numClippingPlanes).replace(/UNION_CLIPPING_PLANES/g,t.numClippingPlanes-t.numClipIntersection)}var hao=/^[ \t]*#include +<([\w\d./]+)>/gm;function v9e(e){return e.replace(hao,pao)}var mao=new Map;function pao(e,t){let n=sa[t];if(n===void 0){let o=mao.get(t);if(o!==void 0)n=sa[o],console.warn('THREE.WebGLRenderer: Shader chunk "%s" has been deprecated. Use "%s" instead.',t,o);else throw Error("Can not resolve #include <"+t+">")}return v9e(n)}var Aao=/#pragma unroll_loop_start\s+for\s*\(\s*int\s+i\s*=\s*(\d+)\s*;\s*i\s*<\s*(\d+)\s*;\s*i\s*\+\+\s*\)\s*{([\s\S]+?)}\s+#pragma unroll_loop_end/g;function dAt(e){return e.replace(Aao,_ao)}function _ao(e,t,n,o){let i="";for(let r=parseInt(t);r<parseInt(n);r++)i+=o.replace(/\[\s*i\s*\]/g,"[ "+r+" ]").replace(/UNROLLED_LOOP_INDEX/g,r);return i}function uAt(e){let t=`precision ${e.precision} float;
precision ${e.precision} int;
precision ${e.precision} sampler2D;
precision ${e.precision} samplerCube;
precision ${e.precision} sampler3D;
precision ${e.precision} sampler2DArray;
precision ${e.precision} sampler2DShadow;
precision ${e.precision} samplerCubeShadow;
precision ${e.precision} sampler2DArrayShadow;
precision ${e.precision} isampler2D;
precision ${e.precision} isampler3D;
precision ${e.precision} isamplerCube;
precision ${e.precision} isampler2DArray;
precision ${e.precision} usampler2D;
precision ${e.precision} usampler3D;
precision ${e.precision} usamplerCube;
precision ${e.precision} usampler2DArray;
`;if(e.precision==="highp")t+=`
#define HIGH_PRECISION`;else if(e.precision==="mediump")t+=`
#define MEDIUM_PRECISION`;else if(e.precision==="lowp")t+=`
#define LOW_PRECISION`;return t}function gao(e){let t="SHADOWMAP_TYPE_BASIC";if(e.shadowMapType===1)t="SHADOWMAP_TYPE_PCF";else if(e.shadowMapType===2)t="SHADOWMAP_TYPE_PCF_SOFT";else if(e.shadowMapType===3)t="SHADOWMAP_TYPE_VSM";return t}function fao(e){let t="ENVMAP_TYPE_CUBE";if(e.envMap)switch(e.envMapMode){case 301:case 302:t="ENVMAP_TYPE_CUBE";break;case 306:t="ENVMAP_TYPE_CUBE_UV";break}return t}function yao(e){let t="ENVMAP_MODE_REFLECTION";if(e.envMap)switch(e.envMapMode){case 302:t="ENVMAP_MODE_REFRACTION";break}return t}function xao(e){let t="ENVMAP_BLENDING_NONE";if(e.envMap)switch(e.combine){case 0:t="ENVMAP_BLENDING_MULTIPLY";break;case 1:t="ENVMAP_BLENDING_MIX";break;case 2:t="ENVMAP_BLENDING_ADD";break}return t}function Cao(e){let t=e.envMapCubeUVHeight;if(t===null)return null;let n=Math.log2(t)-2,o=1/t;return{texelWidth:1/(3*Math.max(Math.pow(2,n),112)),texelHeight:o,maxMip:n}}function Iao(e,t,n,o){let i=e.getContext(),{defines:r,vertexShader:s,fragmentShader:a}=n,c=gao(n),l=fao(n),d=yao(n),u=xao(n),h=Cao(n),A=lao(n),m=dao(r),p=i.createProgram(),g,_,f=n.glslVersion?"#version "+n.glslVersion+`
`:"";if(n.isRawShaderMaterial){if(g=["#define SHADER_TYPE "+n.shaderType,"#define SHADER_NAME "+n.shaderName,m].filter(GJ).join(`
`),g.length>0)g+=`
`;if(_=["#define SHADER_TYPE "+n.shaderType,"#define SHADER_NAME "+n.shaderName,m].filter(GJ).join(`
`),_.length>0)_+=`
`}else g=[uAt(n),"#define SHADER_TYPE "+n.shaderType,"#define SHADER_NAME "+n.shaderName,m,n.extensionClipCullDistance?"#define USE_CLIP_DISTANCE":"",n.batching?"#define USE_BATCHING":"",n.batchingColor?"#define USE_BATCHING_COLOR":"",n.instancing?"#define USE_INSTANCING":"",n.instancingColor?"#define USE_INSTANCING_COLOR":"",n.instancingMorph?"#define USE_INSTANCING_MORPH":"",n.useFog&&n.fog?"#define USE_FOG":"",n.useFog&&n.fogExp2?"#define FOG_EXP2":"",n.map?"#define USE_MAP":"",n.envMap?"#define USE_ENVMAP":"",n.envMap?"#define "+d:"",n.lightMap?"#define USE_LIGHTMAP":"",n.aoMap?"#define USE_AOMAP":"",n.bumpMap?"#define USE_BUMPMAP":"",n.normalMap?"#define USE_NORMALMAP":"",n.normalMapObjectSpace?"#define USE_NORMALMAP_OBJECTSPACE":"",n.normalMapTangentSpace?"#define USE_NORMALMAP_TANGENTSPACE":"",n.displacementMap?"#define USE_DISPLACEMENTMAP":"",n.emissiveMap?"#define USE_EMISSIVEMAP":"",n.anisotropy?"#define USE_ANISOTROPY":"",n.anisotropyMap?"#define USE_ANISOTROPYMAP":"",n.clearcoatMap?"#define USE_CLEARCOATMAP":"",n.clearcoatRoughnessMap?"#define USE_CLEARCOAT_ROUGHNESSMAP":"",n.clearcoatNormalMap?"#define USE_CLEARCOAT_NORMALMAP":"",n.iridescenceMap?"#define USE_IRIDESCENCEMAP":"",n.iridescenceThicknessMap?"#define USE_IRIDESCENCE_THICKNESSMAP":"",n.specularMap?"#define USE_SPECULARMAP":"",n.specularColorMap?"#define USE_SPECULAR_COLORMAP":"",n.specularIntensityMap?"#define USE_SPECULAR_INTENSITYMAP":"",n.roughnessMap?"#define USE_ROUGHNESSMAP":"",n.metalnessMap?"#define USE_METALNESSMAP":"",n.alphaMap?"#define USE_ALPHAMAP":"",n.alphaHash?"#define USE_ALPHAHASH":"",n.transmission?"#define USE_TRANSMISSION":"",n.transmissionMap?"#define USE_TRANSMISSIONMAP":"",n.thicknessMap?"#define USE_THICKNESSMAP":"",n.sheenColorMap?"#define USE_SHEEN_COLORMAP":"",n.sheenRoughnessMap?"#define USE_SHEEN_ROUGHNESSMAP":"",n.mapUv?"#define MAP_UV "+n.mapUv:"",n.alphaMapUv?"#define ALPHAMAP_UV "+n.alphaMapUv:"",n.lightMapUv?"#define LIGHTMAP_UV "+n.lightMapUv:"",n.aoMapUv?"#define AOMAP_UV "+n.aoMapUv:"",n.emissiveMapUv?"#define EMISSIVEMAP_UV "+n.emissiveMapUv:"",n.bumpMapUv?"#define BUMPMAP_UV "+n.bumpMapUv:"",n.normalMapUv?"#define NORMALMAP_UV "+n.normalMapUv:"",n.displacementMapUv?"#define DISPLACEMENTMAP_UV "+n.displacementMapUv:"",n.metalnessMapUv?"#define METALNESSMAP_UV "+n.metalnessMapUv:"",n.roughnessMapUv?"#define ROUGHNESSMAP_UV "+n.roughnessMapUv:"",n.anisotropyMapUv?"#define ANISOTROPYMAP_UV "+n.anisotropyMapUv:"",n.clearcoatMapUv?"#define CLEARCOATMAP_UV "+n.clearcoatMapUv:"",n.clearcoatNormalMapUv?"#define CLEARCOAT_NORMALMAP_UV "+n.clearcoatNormalMapUv:"",n.clearcoatRoughnessMapUv?"#define CLEARCOAT_ROUGHNESSMAP_UV "+n.clearcoatRoughnessMapUv:"",n.iridescenceMapUv?"#define IRIDESCENCEMAP_UV "+n.iridescenceMapUv:"",n.iridescenceThicknessMapUv?"#define IRIDESCENCE_THICKNESSMAP_UV "+n.iridescenceThicknessMapUv:"",n.sheenColorMapUv?"#define SHEEN_COLORMAP_UV "+n.sheenColorMapUv:"",n.sheenRoughnessMapUv?"#define SHEEN_ROUGHNESSMAP_UV "+n.sheenRoughnessMapUv:"",n.specularMapUv?"#define SPECULARMAP_UV "+n.specularMapUv:"",n.specularColorMapUv?"#define SPECULAR_COLORMAP_UV "+n.specularColorMapUv:"",n.specularIntensityMapUv?"#define SPECULAR_INTENSITYMAP_UV "+n.specularIntensityMapUv:"",n.transmissionMapUv?"#define TRANSMISSIONMAP_UV "+n.transmissionMapUv:"",n.thicknessMapUv?"#define THICKNESSMAP_UV "+n.thicknessMapUv:"",n.vertexTangents&&n.flatShading===!1?"#define USE_TANGENT":"",n.vertexColors?"#define USE_COLOR":"",n.vertexAlphas?"#define USE_COLOR_ALPHA":"",n.vertexUv1s?"#define USE_UV1":"",n.vertexUv2s?"#define USE_UV2":"",n.vertexUv3s?"#define USE_UV3":"",n.pointsUvs?"#define USE_POINTS_UV":"",n.flatShading?"#define FLAT_SHADED":"",n.skinning?"#define USE_SKINNING":"",n.morphTargets?"#define USE_MORPHTARGETS":"",n.morphNormals&&n.flatShading===!1?"#define USE_MORPHNORMALS":"",n.morphColors?"#define USE_MORPHCOLORS":"",n.morphTargetsCount>0?"#define MORPHTARGETS_TEXTURE_STRIDE "+n.morphTextureStride:"",n.morphTargetsCount>0?"#define MORPHTARGETS_COUNT "+n.morphTargetsCount:"",n.doubleSided?"#define DOUBLE_SIDED":"",n.flipSided?"#define FLIP_SIDED":"",n.shadowMapEnabled?"#define USE_SHADOWMAP":"",n.shadowMapEnabled?"#define "+c:"",n.sizeAttenuation?"#define USE_SIZEATTENUATION":"",n.numLightProbes>0?"#define USE_LIGHT_PROBES":"",n.logarithmicDepthBuffer?"#define USE_LOGDEPTHBUF":"","uniform mat4 modelMatrix;","uniform mat4 modelViewMatrix;","uniform mat4 projectionMatrix;","uniform mat4 viewMatrix;","uniform mat3 normalMatrix;","uniform vec3 cameraPosition;","uniform bool isOrthographic;","#ifdef USE_INSTANCING","\tattribute mat4 instanceMatrix;","#endif","#ifdef USE_INSTANCING_COLOR","\tattribute vec3 instanceColor;","#endif","#ifdef USE_INSTANCING_MORPH","\tuniform sampler2D morphTexture;","#endif","attribute vec3 position;","attribute vec3 normal;","attribute vec2 uv;","#ifdef USE_UV1","\tattribute vec2 uv1;","#endif","#ifdef USE_UV2","\tattribute vec2 uv2;","#endif","#ifdef USE_UV3","\tattribute vec2 uv3;","#endif","#ifdef USE_TANGENT","\tattribute vec4 tangent;","#endif","#if defined( USE_COLOR_ALPHA )","\tattribute vec4 color;","#elif defined( USE_COLOR )","\tattribute vec3 color;","#endif","#ifdef USE_SKINNING","\tattribute vec4 skinIndex;","\tattribute vec4 skinWeight;","#endif",`
`].filter(GJ).join(`
`),_=[uAt(n),"#define SHADER_TYPE "+n.shaderType,"#define SHADER_NAME "+n.shaderName,m,n.useFog&&n.fog?"#define USE_FOG":"",n.useFog&&n.fogExp2?"#define FOG_EXP2":"",n.alphaToCoverage?"#define ALPHA_TO_COVERAGE":"",n.map?"#define USE_MAP":"",n.matcap?"#define USE_MATCAP":"",n.envMap?"#define USE_ENVMAP":"",n.envMap?"#define "+l:"",n.envMap?"#define "+d:"",n.envMap?"#define "+u:"",h?"#define CUBEUV_TEXEL_WIDTH "+h.texelWidth:"",h?"#define CUBEUV_TEXEL_HEIGHT "+h.texelHeight:"",h?"#define CUBEUV_MAX_MIP "+h.maxMip+".0":"",n.lightMap?"#define USE_LIGHTMAP":"",n.aoMap?"#define USE_AOMAP":"",n.bumpMap?"#define USE_BUMPMAP":"",n.normalMap?"#define USE_NORMALMAP":"",n.normalMapObjectSpace?"#define USE_NORMALMAP_OBJECTSPACE":"",n.normalMapTangentSpace?"#define USE_NORMALMAP_TANGENTSPACE":"",n.emissiveMap?"#define USE_EMISSIVEMAP":"",n.anisotropy?"#define USE_ANISOTROPY":"",n.anisotropyMap?"#define USE_ANISOTROPYMAP":"",n.clearcoat?"#define USE_CLEARCOAT":"",n.clearcoatMap?"#define USE_CLEARCOATMAP":"",n.clearcoatRoughnessMap?"#define USE_CLEARCOAT_ROUGHNESSMAP":"",n.clearcoatNormalMap?"#define USE_CLEARCOAT_NORMALMAP":"",n.dispersion?"#define USE_DISPERSION":"",n.iridescence?"#define USE_IRIDESCENCE":"",n.iridescenceMap?"#define USE_IRIDESCENCEMAP":"",n.iridescenceThicknessMap?"#define USE_IRIDESCENCE_THICKNESSMAP":"",n.specularMap?"#define USE_SPECULARMAP":"",n.specularColorMap?"#define USE_SPECULAR_COLORMAP":"",n.specularIntensityMap?"#define USE_SPECULAR_INTENSITYMAP":"",n.roughnessMap?"#define USE_ROUGHNESSMAP":"",n.metalnessMap?"#define USE_METALNESSMAP":"",n.alphaMap?"#define USE_ALPHAMAP":"",n.alphaTest?"#define USE_ALPHATEST":"",n.alphaHash?"#define USE_ALPHAHASH":"",n.sheen?"#define USE_SHEEN":"",n.sheenColorMap?"#define USE_SHEEN_COLORMAP":"",n.sheenRoughnessMap?"#define USE_SHEEN_ROUGHNESSMAP":"",n.transmission?"#define USE_TRANSMISSION":"",n.transmissionMap?"#define USE_TRANSMISSIONMAP":"",n.thicknessMap?"#define USE_THICKNESSMAP":"",n.vertexTangents&&n.flatShading===!1?"#define USE_TANGENT":"",n.vertexColors||n.instancingColor||n.batchingColor?"#define USE_COLOR":"",n.vertexAlphas?"#define USE_COLOR_ALPHA":"",n.vertexUv1s?"#define USE_UV1":"",n.vertexUv2s?"#define USE_UV2":"",n.vertexUv3s?"#define USE_UV3":"",n.pointsUvs?"#define USE_POINTS_UV":"",n.gradientMap?"#define USE_GRADIENTMAP":"",n.flatShading?"#define FLAT_SHADED":"",n.doubleSided?"#define DOUBLE_SIDED":"",n.flipSided?"#define FLIP_SIDED":"",n.shadowMapEnabled?"#define USE_SHADOWMAP":"",n.shadowMapEnabled?"#define "+c:"",n.premultipliedAlpha?"#define PREMULTIPLIED_ALPHA":"",n.numLightProbes>0?"#define USE_LIGHT_PROBES":"",n.decodeVideoTexture?"#define DECODE_VIDEO_TEXTURE":"",n.logarithmicDepthBuffer?"#define USE_LOGDEPTHBUF":"","uniform mat4 viewMatrix;","uniform vec3 cameraPosition;","uniform bool isOrthographic;",n.toneMapping!==0?"#define TONE_MAPPING":"",n.toneMapping!==0?sa.tonemapping_pars_fragment:"",n.toneMapping!==0?cao("toneMapping",n.toneMapping):"",n.dithering?"#define DITHERING":"",n.opaque?"#define OPAQUE":"",sa.colorspace_pars_fragment,aao("linearToOutputTexel",n.outputColorSpace),n.useDepthPacking?"#define DEPTH_PACKING "+n.depthPacking:"",`
`].filter(GJ).join(`
`);if(s=v9e(s),s=cAt(s,n),s=lAt(s,n),a=v9e(a),a=cAt(a,n),a=lAt(a,n),s=dAt(s),a=dAt(a),n.isRawShaderMaterial!==!0)f=`#version 300 es
`,g=[A,"#define attribute in","#define varying out","#define texture2D texture"].join(`
`)+`
`+g,_=["#define varying in",n.glslVersion==="300 es"?"":"layout(location = 0) out highp vec4 pc_fragColor;",n.glslVersion==="300 es"?"":"#define gl_FragColor pc_fragColor","#define gl_FragDepthEXT gl_FragDepth","#define texture2D texture","#define textureCube texture","#define texture2DProj textureProj","#define texture2DLodEXT textureLod","#define texture2DProjLodEXT textureProjLod","#define textureCubeLodEXT textureLod","#define texture2DGradEXT textureGrad","#define texture2DProjGradEXT textureProjGrad","#define textureCubeGradEXT textureGrad"].join(`
`)+`
`+_;let y=f+g+s,x=f+_+a,C=sAt(i,i.VERTEX_SHADER,y),I=sAt(i,i.FRAGMENT_SHADER,x);if(i.attachShader(p,C),i.attachShader(p,I),n.index0AttributeName!==void 0)i.bindAttribLocation(p,0,n.index0AttributeName);else if(n.morphTargets===!0)i.bindAttribLocation(p,0,"position");i.linkProgram(p);function b(w){if(e.debug.checkShaderErrors){let T=i.getProgramInfoLog(p).trim(),Q=i.getShaderInfoLog(C).trim(),N=i.getShaderInfoLog(I).trim(),F=!0,H=!0;if(i.getProgramParameter(p,i.LINK_STATUS)===!1)if(F=!1,typeof e.debug.onShaderError==="function")e.debug.onShaderError(i,p,C,I);else{let z=aAt(i,C,"vertex"),Y=aAt(i,I,"fragment");console.error("THREE.WebGLProgram: Shader Error "+i.getError()+" - VALIDATE_STATUS "+i.getProgramParameter(p,i.VALIDATE_STATUS)+`
Material Name: `+w.name+`
Material Type: `+w.type+`
Program Info Log: `+T+`
`+z+`
`+Y)}else if(T!=="")console.warn("THREE.WebGLProgram: Program Info Log:",T);else if(Q===""||N==="")H=!1;if(H)w.diagnostics={runnable:F,programLog:T,vertexShader:{log:Q,prefix:g},fragmentShader:{log:N,prefix:_}}}i.deleteShader(C),i.deleteShader(I),P=new VJ(i,p),E=uao(i,p)}let P;this.getUniforms=function(){if(P===void 0)b(this);return P};let E;this.getAttributes=function(){if(E===void 0)b(this);return E};let B=n.rendererExtensionParallelShaderCompile===!1;return this.isReady=function(){if(B===!1)B=i.getProgramParameter(p,oao);return B},this.destroy=function(){o.releaseStatesOfProgram(this),i.deleteProgram(p),this.program=void 0},this.type=n.shaderType,this.name=n.shaderName,this.id=iao++,this.cacheKey=t,this.usedTimes=1,this.program=p,this.vertexShader=C,this.fragmentShader=I,this}var bao=0;class l_t{constructor(){this.shaderCache=new Map,this.materialCache=new Map}update(e){let{vertexShader:t,fragmentShader:n}=e,o=this._getShaderStage(t),i=this._getShaderStage(n),r=this._getShaderCacheForMaterial(e);if(r.has(o)===!1)r.add(o),o.usedTimes++;if(r.has(i)===!1)r.add(i),i.usedTimes++;return this}remove(e){let t=this.materialCache.get(e);for(let n of t)if(n.usedTimes--,n.usedTimes===0)this.shaderCache.delete(n.code);return this.materialCache.delete(e),this}getVertexShaderID(e){return this._getShaderStage(e.vertexShader).id}getFragmentShaderID(e){return this._getShaderStage(e.fragmentShader).id}dispose(){this.shaderCache.clear(),this.materialCache.clear()}_getShaderCacheForMaterial(e){let t=this.materialCache,n=t.get(e);if(n===void 0)n=new Set,t.set(e,n);return n}_getShaderStage(e){let t=this.shaderCache,n=t.get(e);if(n===void 0)n=new d_t(e),t.set(e,n);return n}}class d_t{constructor(e){this.id=bao++,this.code=e,this.usedTimes=0}}function Sao(e,t,n,o,i,r,s){let a=new c0e,c=new l_t,l=new Set,d=[],{logarithmicDepthBuffer:u,vertexTextures:h,precision:A}=i,m={MeshDepthMaterial:"depth",MeshDistanceMaterial:"distanceRGBA",MeshNormalMaterial:"normal",MeshBasicMaterial:"basic",MeshLambertMaterial:"lambert",MeshPhongMaterial:"phong",MeshToonMaterial:"toon",MeshStandardMaterial:"physical",MeshPhysicalMaterial:"physical",MeshMatcapMaterial:"matcap",LineBasicMaterial:"basic",LineDashedMaterial:"dashed",PointsMaterial:"points",ShadowMaterial:"shadow",SpriteMaterial:"sprite"};function p(E){if(l.add(E),E===0)return"uv";return`uv${E}`}function g(E,B,w,T,Q){let N=T.fog,F=Q.geometry,H=E.isMeshStandardMaterial?T.environment:null,z=(E.isMeshStandardMaterial?n:t).get(E.envMap||H),Y=!!z&&z.mapping===306?z.image.height:null,U=m[E.type];if(E.precision!==null){if(A=i.getMaxPrecision(E.precision),A!==E.precision)console.warn("THREE.WebGLProgram.getParameters:",E.precision,"not supported, using",A,"instead.")}let X=F.morphAttributes.position||F.morphAttributes.normal||F.morphAttributes.color,V=X!==void 0?X.length:0,W=0;if(F.morphAttributes.position!==void 0)W=1;if(F.morphAttributes.normal!==void 0)W=2;if(F.morphAttributes.color!==void 0)W=3;let j,q,ne,ce;if(U){let rt=Y5[U];j=rt.vertexShader,q=rt.fragmentShader}else j=E.vertexShader,q=E.fragmentShader,c.update(E),ne=c.getVertexShaderID(E),ce=c.getFragmentShaderID(E);let oe=e.getRenderTarget(),ie=Q.isInstancedMesh===!0,J=Q.isBatchedMesh===!0,ee=!!E.map,se=!!E.matcap,le=!!z,he=!!E.aoMap,ue=!!E.lightMap,Ae=!!E.bumpMap,_e=!!E.normalMap,Pe=!!E.displacementMap,Ee=!!E.emissiveMap,Te=!!E.metalnessMap,be=!!E.roughnessMap,me=E.anisotropy>0,ye=E.clearcoat>0,Ce=E.dispersion>0,ve=E.iridescence>0,De=E.sheen>0,Ze=E.transmission>0,st=me&&!!E.anisotropyMap,et=ye&&!!E.clearcoatMap,lt=ye&&!!E.clearcoatNormalMap,it=ye&&!!E.clearcoatRoughnessMap,gt=ve&&!!E.iridescenceMap,wt=ve&&!!E.iridescenceThicknessMap,Dt=De&&!!E.sheenColorMap,vt=De&&!!E.sheenRoughnessMap,Ht=!!E.specularMap,Xt=!!E.specularColorMap,ut=!!E.specularIntensityMap,je=Ze&&!!E.transmissionMap,Re=Ze&&!!E.thicknessMap,Je=!!E.gradientMap,Ve=!!E.alphaMap,Ye=E.alphaTest>0,mt=!!E.alphaHash,ft=!!E.extensions,Oe=0;if(E.toneMapped){if(oe===null||oe.isXRRenderTarget===!0)Oe=e.toneMapping}let qe={shaderID:U,shaderType:E.type,shaderName:E.name,vertexShader:j,fragmentShader:q,defines:E.defines,customVertexShaderID:ne,customFragmentShaderID:ce,isRawShaderMaterial:E.isRawShaderMaterial===!0,glslVersion:E.glslVersion,precision:A,batching:J,batchingColor:J&&Q._colorsTexture!==null,instancing:ie,instancingColor:ie&&Q.instanceColor!==null,instancingMorph:ie&&Q.morphTexture!==null,supportsVertexTextures:h,outputColorSpace:oe===null?e.outputColorSpace:oe.isXRRenderTarget===!0?oe.texture.colorSpace:"srgb-linear",alphaToCoverage:!!E.alphaToCoverage,map:ee,matcap:se,envMap:le,envMapMode:le&&z.mapping,envMapCubeUVHeight:Y,aoMap:he,lightMap:ue,bumpMap:Ae,normalMap:_e,displacementMap:h&&Pe,emissiveMap:Ee,normalMapObjectSpace:_e&&E.normalMapType===1,normalMapTangentSpace:_e&&E.normalMapType===0,metalnessMap:Te,roughnessMap:be,anisotropy:me,anisotropyMap:st,clearcoat:ye,clearcoatMap:et,clearcoatNormalMap:lt,clearcoatRoughnessMap:it,dispersion:Ce,iridescence:ve,iridescenceMap:gt,iridescenceThicknessMap:wt,sheen:De,sheenColorMap:Dt,sheenRoughnessMap:vt,specularMap:Ht,specularColorMap:Xt,specularIntensityMap:ut,transmission:Ze,transmissionMap:je,thicknessMap:Re,gradientMap:Je,opaque:E.transparent===!1&&E.blending===1&&E.alphaToCoverage===!1,alphaMap:Ve,alphaTest:Ye,alphaHash:mt,combine:E.combine,mapUv:ee&&p(E.map.channel),aoMapUv:he&&p(E.aoMap.channel),lightMapUv:ue&&p(E.lightMap.channel),bumpMapUv:Ae&&p(E.bumpMap.channel),normalMapUv:_e&&p(E.normalMap.channel),displacementMapUv:Pe&&p(E.displacementMap.channel),emissiveMapUv:Ee&&p(E.emissiveMap.channel),metalnessMapUv:Te&&p(E.metalnessMap.channel),roughnessMapUv:be&&p(E.roughnessMap.channel),anisotropyMapUv:st&&p(E.anisotropyMap.channel),clearcoatMapUv:et&&p(E.clearcoatMap.channel),clearcoatNormalMapUv:lt&&p(E.clearcoatNormalMap.channel),clearcoatRoughnessMapUv:it&&p(E.clearcoatRoughnessMap.channel),iridescenceMapUv:gt&&p(E.iridescenceMap.channel),iridescenceThicknessMapUv:wt&&p(E.iridescenceThicknessMap.channel),sheenColorMapUv:Dt&&p(E.sheenColorMap.channel),sheenRoughnessMapUv:vt&&p(E.sheenRoughnessMap.channel),specularMapUv:Ht&&p(E.specularMap.channel),specularColorMapUv:Xt&&p(E.specularColorMap.channel),specularIntensityMapUv:ut&&p(E.specularIntensityMap.channel),transmissionMapUv:je&&p(E.transmissionMap.channel),thicknessMapUv:Re&&p(E.thicknessMap.channel),alphaMapUv:Ve&&p(E.alphaMap.channel),vertexTangents:!!F.attributes.tangent&&(_e||me),vertexColors:E.vertexColors,vertexAlphas:E.vertexColors===!0&&!!F.attributes.color&&F.attributes.color.itemSize===4,pointsUvs:Q.isPoints===!0&&!!F.attributes.uv&&(ee||Ve),fog:!!N,useFog:E.fog===!0,fogExp2:!!N&&N.isFogExp2,flatShading:E.flatShading===!0,sizeAttenuation:E.sizeAttenuation===!0,logarithmicDepthBuffer:u,skinning:Q.isSkinnedMesh===!0,morphTargets:F.morphAttributes.position!==void 0,morphNormals:F.morphAttributes.normal!==void 0,morphColors:F.morphAttributes.color!==void 0,morphTargetsCount:V,morphTextureStride:W,numDirLights:B.directional.length,numPointLights:B.point.length,numSpotLights:B.spot.length,numSpotLightMaps:B.spotLightMap.length,numRectAreaLights:B.rectArea.length,numHemiLights:B.hemi.length,numDirLightShadows:B.directionalShadowMap.length,numPointLightShadows:B.pointShadowMap.length,numSpotLightShadows:B.spotShadowMap.length,numSpotLightShadowsWithMaps:B.numSpotLightShadowsWithMaps,numLightProbes:B.numLightProbes,numClippingPlanes:s.numPlanes,numClipIntersection:s.numIntersection,dithering:E.dithering,shadowMapEnabled:e.shadowMap.enabled&&w.length>0,shadowMapType:e.shadowMap.type,toneMapping:Oe,decodeVideoTexture:ee&&E.map.isVideoTexture===!0&&ed.getTransfer(E.map.colorSpace)==="srgb",premultipliedAlpha:E.premultipliedAlpha,doubleSided:E.side===2,flipSided:E.side===1,useDepthPacking:E.depthPacking>=0,depthPacking:E.depthPacking||0,index0AttributeName:E.index0AttributeName,extensionClipCullDistance:ft&&E.extensions.clipCullDistance===!0&&o.has("WEBGL_clip_cull_distance"),extensionMultiDraw:ft&&E.extensions.multiDraw===!0&&o.has("WEBGL_multi_draw"),rendererExtensionParallelShaderCompile:o.has("KHR_parallel_shader_compile"),customProgramCacheKey:E.customProgramCacheKey()};return qe.vertexUv1s=l.has(1),qe.vertexUv2s=l.has(2),qe.vertexUv3s=l.has(3),l.clear(),qe}function _(E){let B=[];if(E.shaderID)B.push(E.shaderID);else B.push(E.customVertexShaderID),B.push(E.customFragmentShaderID);if(E.defines!==void 0)for(let w in E.defines)B.push(w),B.push(E.defines[w]);if(E.isRawShaderMaterial===!1)f(B,E),y(B,E),B.push(e.outputColorSpace);return B.push(E.customProgramCacheKey),B.join()}function f(E,B){E.push(B.precision),E.push(B.outputColorSpace),E.push(B.envMapMode),E.push(B.envMapCubeUVHeight),E.push(B.mapUv),E.push(B.alphaMapUv),E.push(B.lightMapUv),E.push(B.aoMapUv),E.push(B.bumpMapUv),E.push(B.normalMapUv),E.push(B.displacementMapUv),E.push(B.emissiveMapUv),E.push(B.metalnessMapUv),E.push(B.roughnessMapUv),E.push(B.anisotropyMapUv),E.push(B.clearcoatMapUv),E.push(B.clearcoatNormalMapUv),E.push(B.clearcoatRoughnessMapUv),E.push(B.iridescenceMapUv),E.push(B.iridescenceThicknessMapUv),E.push(B.sheenColorMapUv),E.push(B.sheenRoughnessMapUv),E.push(B.specularMapUv),E.push(B.specularColorMapUv),E.push(B.specularIntensityMapUv),E.push(B.transmissionMapUv),E.push(B.thicknessMapUv),E.push(B.combine),E.push(B.fogExp2),E.push(B.sizeAttenuation),E.push(B.morphTargetsCount),E.push(B.morphAttributeCount),E.push(B.numDirLights),E.push(B.numPointLights),E.push(B.numSpotLights),E.push(B.numSpotLightMaps),E.push(B.numHemiLights),E.push(B.numRectAreaLights),E.push(B.numDirLightShadows),E.push(B.numPointLightShadows),E.push(B.numSpotLightShadows),E.push(B.numSpotLightShadowsWithMaps),E.push(B.numLightProbes),E.push(B.shadowMapType),E.push(B.toneMapping),E.push(B.numClippingPlanes),E.push(B.numClipIntersection),E.push(B.depthPacking)}function y(E,B){if(a.disableAll(),B.supportsVertexTextures)a.enable(0);if(B.instancing)a.enable(1);if(B.instancingColor)a.enable(2);if(B.instancingMorph)a.enable(3);if(B.matcap)a.enable(4);if(B.envMap)a.enable(5);if(B.normalMapObjectSpace)a.enable(6);if(B.normalMapTangentSpace)a.enable(7);if(B.clearcoat)a.enable(8);if(B.iridescence)a.enable(9);if(B.alphaTest)a.enable(10);if(B.vertexColors)a.enable(11);if(B.vertexAlphas)a.enable(12);if(B.vertexUv1s)a.enable(13);if(B.vertexUv2s)a.enable(14);if(B.vertexUv3s)a.enable(15);if(B.vertexTangents)a.enable(16);if(B.anisotropy)a.enable(17);if(B.alphaHash)a.enable(18);if(B.batching)a.enable(19);if(B.dispersion)a.enable(20);if(B.batchingColor)a.enable(21);if(E.push(a.mask),a.disableAll(),B.fog)a.enable(0);if(B.useFog)a.enable(1);if(B.flatShading)a.enable(2);if(B.logarithmicDepthBuffer)a.enable(3);if(B.skinning)a.enable(4);if(B.morphTargets)a.enable(5);if(B.morphNormals)a.enable(6);if(B.morphColors)a.enable(7);if(B.premultipliedAlpha)a.enable(8);if(B.shadowMapEnabled)a.enable(9);if(B.doubleSided)a.enable(10);if(B.flipSided)a.enable(11);if(B.useDepthPacking)a.enable(12);if(B.dithering)a.enable(13);if(B.transmission)a.enable(14);if(B.sheen)a.enable(15);if(B.opaque)a.enable(16);if(B.pointsUvs)a.enable(17);if(B.decodeVideoTexture)a.enable(18);if(B.alphaToCoverage)a.enable(19);E.push(a.mask)}function x(E){let B=m[E.type],w;if(B){let T=Y5[B];w=F9e.clone(T.uniforms)}else w=E.uniforms;return w}function C(E,B){let w;for(let T=0,Q=d.length;T<Q;T++){let N=d[T];if(N.cacheKey===B){w=N,++w.usedTimes;break}}if(w===void 0)w=new Iao(e,B,E,r),d.push(w);return w}function I(E){if(--E.usedTimes===0){let B=d.indexOf(E);d[B]=d[d.length-1],d.pop(),E.destroy()}}function b(E){c.remove(E)}function P(){c.dispose()}return{getParameters:g,getProgramCacheKey:_,getUniforms:x,acquireProgram:C,releaseProgram:I,releaseShaderCache:b,programs:d,dispose:P}}function Pao(){let e=new WeakMap;function t(r){let s=e.get(r);if(s===void 0)s={},e.set(r,s);return s}function n(r){e.delete(r)}function o(r,s,a){e.get(r)[s]=a}function i(){e=new WeakMap}return{get:t,remove:n,update:o,dispose:i}}function vao(e,t){if(e.groupOrder!==t.groupOrder)return e.groupOrder-t.groupOrder;else if(e.renderOrder!==t.renderOrder)return e.renderOrder-t.renderOrder;else if(e.material.id!==t.material.id)return e.material.id-t.material.id;else if(e.z!==t.z)return e.z-t.z;else return e.id-t.id}function hAt(e,t){if(e.groupOrder!==t.groupOrder)return e.groupOrder-t.groupOrder;else if(e.renderOrder!==t.renderOrder)return e.renderOrder-t.renderOrder;else if(e.z!==t.z)return t.z-e.z;else return e.id-t.id}function mAt(){let e=[],t=0,n=[],o=[],i=[];function r(){t=0,n.length=0,o.length=0,i.length=0}function s(u,h,A,m,p,g){let _=e[t];if(_===void 0)_={id:u.id,object:u,geometry:h,material:A,groupOrder:m,renderOrder:u.renderOrder,z:p,group:g},e[t]=_;else _.id=u.id,_.object=u,_.geometry=h,_.material=A,_.groupOrder=m,_.renderOrder=u.renderOrder,_.z=p,_.group=g;return t++,_}function a(u,h,A,m,p,g){let _=s(u,h,A,m,p,g);if(A.transmission>0)o.push(_);else if(A.transparent===!0)i.push(_);else n.push(_)}function c(u,h,A,m,p,g){let _=s(u,h,A,m,p,g);if(A.transmission>0)o.unshift(_);else if(A.transparent===!0)i.unshift(_);else n.unshift(_)}function l(u,h){if(n.length>1)n.sort(u||vao);if(o.length>1)o.sort(h||hAt);if(i.length>1)i.sort(h||hAt)}function d(){for(let u=t,h=e.length;u<h;u++){let A=e[u];if(A.id===null)break;A.id=null,A.object=null,A.geometry=null,A.material=null,A.group=null}}return{opaque:n,transmissive:o,transparent:i,init:r,push:a,unshift:c,finish:d,sort:l}}function Eao(){let e=new WeakMap;function t(o,i){let r=e.get(o),s;if(r===void 0)s=new mAt,e.set(o,[s]);else if(i>=r.length)s=new mAt,r.push(s);else s=r[i];return s}function n(){e=new WeakMap}return{get:t,dispose:n}}function Mao(){let e={};return{get:function(t){if(e[t.id]!==void 0)return e[t.id];let n;switch(t.type){case"DirectionalLight":n={direction:new bt,color:new Po};break;case"SpotLight":n={position:new bt,direction:new bt,color:new Po,distance:0,coneCos:0,penumbraCos:0,decay:0};break;case"PointLight":n={position:new bt,color:new Po,distance:0,decay:0};break;case"HemisphereLight":n={direction:new bt,skyColor:new Po,groundColor:new Po};break;case"RectAreaLight":n={color:new Po,position:new bt,halfWidth:new bt,halfHeight:new bt};break}return e[t.id]=n,n}}}function Bao(){let e={};return{get:function(t){if(e[t.id]!==void 0)return e[t.id];let n;switch(t.type){case"DirectionalLight":n={shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new ro};break;case"SpotLight":n={shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new ro};break;case"PointLight":n={shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new ro,shadowCameraNear:1,shadowCameraFar:1000};break}return e[t.id]=n,n}}}var wao=0;function Tao(e,t){return(t.castShadow?2:0)-(e.castShadow?2:0)+(t.map?1:0)-(e.map?1:0)}function Dao(e){let t=new Mao,n=Bao(),o={version:0,hash:{directionalLength:-1,pointLength:-1,spotLength:-1,rectAreaLength:-1,hemiLength:-1,numDirectionalShadows:-1,numPointShadows:-1,numSpotShadows:-1,numSpotMaps:-1,numLightProbes:-1},ambient:[0,0,0],probe:[],directional:[],directionalShadow:[],directionalShadowMap:[],directionalShadowMatrix:[],spot:[],spotLightMap:[],spotShadow:[],spotShadowMap:[],spotLightMatrix:[],rectArea:[],rectAreaLTC1:null,rectAreaLTC2:null,point:[],pointShadow:[],pointShadowMap:[],pointShadowMatrix:[],hemi:[],numSpotLightShadowsWithMaps:0,numLightProbes:0};for(let l=0;l<9;l++)o.probe.push(new bt);let i=new bt,r=new Pr,s=new Pr;function a(l){let d=0,u=0,h=0;for(let E=0;E<9;E++)o.probe[E].set(0,0,0);let A=0,m=0,p=0,g=0,_=0,f=0,y=0,x=0,C=0,I=0,b=0;l.sort(Tao);for(let E=0,B=l.length;E<B;E++){let w=l[E],{color:T,intensity:Q,distance:N}=w,F=w.shadow&&w.shadow.map?w.shadow.map.texture:null;if(w.isAmbientLight)d+=T.r*Q,u+=T.g*Q,h+=T.b*Q;else if(w.isLightProbe){for(let H=0;H<9;H++)o.probe[H].addScaledVector(w.sh.coefficients[H],Q);b++}else if(w.isDirectionalLight){let H=t.get(w);if(H.color.copy(w.color).multiplyScalar(w.intensity),w.castShadow){let z=w.shadow,Y=n.get(w);Y.shadowBias=z.bias,Y.shadowNormalBias=z.normalBias,Y.shadowRadius=z.radius,Y.shadowMapSize=z.mapSize,o.directionalShadow[A]=Y,o.directionalShadowMap[A]=F,o.directionalShadowMatrix[A]=w.shadow.matrix,f++}o.directional[A]=H,A++}else if(w.isSpotLight){let H=t.get(w);H.position.setFromMatrixPosition(w.matrixWorld),H.color.copy(T).multiplyScalar(Q),H.distance=N,H.coneCos=Math.cos(w.angle),H.penumbraCos=Math.cos(w.angle*(1-w.penumbra)),H.decay=w.decay,o.spot[p]=H;let z=w.shadow;if(w.map){if(o.spotLightMap[C]=w.map,C++,z.updateMatrices(w),w.castShadow)I++}if(o.spotLightMatrix[p]=z.matrix,w.castShadow){let Y=n.get(w);Y.shadowBias=z.bias,Y.shadowNormalBias=z.normalBias,Y.shadowRadius=z.radius,Y.shadowMapSize=z.mapSize,o.spotShadow[p]=Y,o.spotShadowMap[p]=F,x++}p++}else if(w.isRectAreaLight){let H=t.get(w);H.color.copy(T).multiplyScalar(Q),H.halfWidth.set(w.width*0.5,0,0),H.halfHeight.set(0,w.height*0.5,0),o.rectArea[g]=H,g++}else if(w.isPointLight){let H=t.get(w);if(H.color.copy(w.color).multiplyScalar(w.intensity),H.distance=w.distance,H.decay=w.decay,w.castShadow){let z=w.shadow,Y=n.get(w);Y.shadowBias=z.bias,Y.shadowNormalBias=z.normalBias,Y.shadowRadius=z.radius,Y.shadowMapSize=z.mapSize,Y.shadowCameraNear=z.camera.near,Y.shadowCameraFar=z.camera.far,o.pointShadow[m]=Y,o.pointShadowMap[m]=F,o.pointShadowMatrix[m]=w.shadow.matrix,y++}o.point[m]=H,m++}else if(w.isHemisphereLight){let H=t.get(w);H.skyColor.copy(w.color).multiplyScalar(Q),H.groundColor.copy(w.groundColor).multiplyScalar(Q),o.hemi[_]=H,_++}}if(g>0)if(e.has("OES_texture_float_linear")===!0)o.rectAreaLTC1=pi.LTC_FLOAT_1,o.rectAreaLTC2=pi.LTC_FLOAT_2;else o.rectAreaLTC1=pi.LTC_HALF_1,o.rectAreaLTC2=pi.LTC_HALF_2;o.ambient[0]=d,o.ambient[1]=u,o.ambient[2]=h;let P=o.hash;if(P.directionalLength!==A||P.pointLength!==m||P.spotLength!==p||P.rectAreaLength!==g||P.hemiLength!==_||P.numDirectionalShadows!==f||P.numPointShadows!==y||P.numSpotShadows!==x||P.numSpotMaps!==C||P.numLightProbes!==b)o.directional.length=A,o.spot.length=p,o.rectArea.length=g,o.point.length=m,o.hemi.length=_,o.directionalShadow.length=f,o.directionalShadowMap.length=f,o.pointShadow.length=y,o.pointShadowMap.length=y,o.spotShadow.length=x,o.spotShadowMap.length=x,o.directionalShadowMatrix.length=f,o.pointShadowMatrix.length=y,o.spotLightMatrix.length=x+C-I,o.spotLightMap.length=C,o.numSpotLightShadowsWithMaps=I,o.numLightProbes=b,P.directionalLength=A,P.pointLength=m,P.spotLength=p,P.rectAreaLength=g,P.hemiLength=_,P.numDirectionalShadows=f,P.numPointShadows=y,P.numSpotShadows=x,P.numSpotMaps=C,P.numLightProbes=b,o.version=wao++}function c(l,d){let u=0,h=0,A=0,m=0,p=0,g=d.matrixWorldInverse;for(let _=0,f=l.length;_<f;_++){let y=l[_];if(y.isDirectionalLight){let x=o.directional[u];x.direction.setFromMatrixPosition(y.matrixWorld),i.setFromMatrixPosition(y.target.matrixWorld),x.direction.sub(i),x.direction.transformDirection(g),u++}else if(y.isSpotLight){let x=o.spot[A];x.position.setFromMatrixPosition(y.matrixWorld),x.position.applyMatrix4(g),x.direction.setFromMatrixPosition(y.matrixWorld),i.setFromMatrixPosition(y.target.matrixWorld),x.direction.sub(i),x.direction.transformDirection(g),A++}else if(y.isRectAreaLight){let x=o.rectArea[m];x.position.setFromMatrixPosition(y.matrixWorld),x.position.applyMatrix4(g),s.identity(),r.copy(y.matrixWorld),r.premultiply(g),s.extractRotation(r),x.halfWidth.set(y.width*0.5,0,0),x.halfHeight.set(0,y.height*0.5,0),x.halfWidth.applyMatrix4(s),x.halfHeight.applyMatrix4(s),m++}else if(y.isPointLight){let x=o.point[h];x.position.setFromMatrixPosition(y.matrixWorld),x.position.applyMatrix4(g),h++}else if(y.isHemisphereLight){let x=o.hemi[p];x.direction.setFromMatrixPosition(y.matrixWorld),x.direction.transformDirection(g),p++}}}return{setup:a,setupView:c,state:o}}function pAt(e){let t=new Dao(e),n=[],o=[];function i(d){l.camera=d,n.length=0,o.length=0}function r(d){n.push(d)}function s(d){o.push(d)}function a(){t.setup(n)}function c(d){t.setupView(n,d)}let l={lightsArray:n,shadowsArray:o,camera:null,lights:t,transmissionRenderTarget:{}};return{init:i,state:l,setupLights:a,setupLightsView:c,pushLight:r,pushShadow:s}}function Nao(e){let t=new WeakMap;function n(i,r=0){let s=t.get(i),a;if(s===void 0)a=new pAt(e),t.set(i,[a]);else if(r>=s.length)a=new pAt(e),s.push(a);else a=s[r];return a}function o(){t=new WeakMap}return{get:n,dispose:o}}class u0e extends BA{constructor(e){super();this.isMeshDepthMaterial=!0,this.type="MeshDepthMaterial",this.depthPacking=3200,this.map=null,this.alphaMap=null,this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.wireframe=!1,this.wireframeLinewidth=1,this.setValues(e)}copy(e){return super.copy(e),this.depthPacking=e.depthPacking,this.map=e.map,this.alphaMap=e.alphaMap,this.displacementMap=e.displacementMap,this.displacementScale=e.displacementScale,this.displacementBias=e.displacementBias,this.wireframe=e.wireframe,this.wireframeLinewidth=e.wireframeLinewidth,this}}class h0e extends BA{constructor(e){super();this.isMeshDistanceMaterial=!0,this.type="MeshDistanceMaterial",this.map=null,this.alphaMap=null,this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.setValues(e)}copy(e){return super.copy(e),this.map=e.map,this.alphaMap=e.alphaMap,this.displacementMap=e.displacementMap,this.displacementScale=e.displacementScale,this.displacementBias=e.displacementBias,this}}var Rao=`void main() {
gl_Position = vec4( position, 1.0 );
}`,Qao=`uniform sampler2D shadow_pass;
uniform vec2 resolution;
uniform float radius;
#include <packing>
void main() {
const float samples = float( VSM_SAMPLES );
float mean = 0.0;
float squared_mean = 0.0;
float uvStride = samples <= 1.0 ? 0.0 : 2.0 / ( samples - 1.0 );
float uvStart = samples <= 1.0 ? 0.0 : - 1.0;
for ( float i = 0.0; i < samples; i ++ ) {
float uvOffset = uvStart + i * uvStride;
#ifdef HORIZONTAL_PASS
vec2 distribution = unpackRGBATo2Half( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( uvOffset, 0.0 ) * radius ) / resolution ) );
mean += distribution.x;
squared_mean += distribution.y * distribution.y + distribution.x * distribution.x;
#else
float depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( 0.0, uvOffset ) * radius ) / resolution ) );
mean += depth;
squared_mean += depth * depth;
#endif
}
mean = mean / samples;
squared_mean = squared_mean / samples;
float std_dev = sqrt( squared_mean - mean * mean );
gl_FragColor = pack2HalfToRGBA( vec2( mean, std_dev ) );
}`;function kao(e,t,n){let o=new l0e,i=new ro,r=new ro,s=new Gl,a=new u0e({depthPacking:3201}),c=new h0e,l={},d=n.maxTextureSize,u={[0]:1,[1]:0,[2]:2},h=new ix({defines:{VSM_SAMPLES:8},uniforms:{shadow_pass:{value:null},resolution:{value:new ro},radius:{value:4}},vertexShader:Rao,fragmentShader:Qao}),A=h.clone();A.defines.HORIZONTAL_PASS=1;let m=new zs;m.setAttribute("position",new Rc(new Float32Array([-1,-1,0.5,3,-1,0.5,-1,3,0.5]),3));let p=new Mo(m,h),g=this;this.enabled=!1,this.autoUpdate=!0,this.needsUpdate=!1,this.type=1;let _=this.type;this.render=function(I,b,P){if(g.enabled===!1)return;if(g.autoUpdate===!1&&g.needsUpdate===!1)return;if(I.length===0)return;let E=e.getRenderTarget(),B=e.getActiveCubeFace(),w=e.getActiveMipmapLevel(),T=e.state;T.setBlending(0),T.buffers.color.setClear(1,1,1,1),T.buffers.depth.setTest(!0),T.setScissorTest(!1);let Q=_!==3&&this.type===3,N=_===3&&this.type!==3;for(let F=0,H=I.length;F<H;F++){let z=I[F],Y=z.shadow;if(Y===void 0){console.warn("THREE.WebGLShadowMap:",z,"has no shadow.");continue}if(Y.autoUpdate===!1&&Y.needsUpdate===!1)continue;i.copy(Y.mapSize);let U=Y.getFrameExtents();if(i.multiply(U),r.copy(Y.mapSize),i.x>d||i.y>d){if(i.x>d)r.x=Math.floor(d/U.x),i.x=r.x*U.x,Y.mapSize.x=r.x;if(i.y>d)r.y=Math.floor(d/U.y),i.y=r.y*U.y,Y.mapSize.y=r.y}if(Y.map===null||Q===!0||N===!0){let V=this.type!==3?{minFilter:1003,magFilter:1003}:{};if(Y.map!==null)Y.map.dispose();Y.map=new N7(i.x,i.y,V),Y.map.texture.name=z.name+".shadowMap",Y.camera.updateProjectionMatrix()}e.setRenderTarget(Y.map),e.clear();let X=Y.getViewportCount();for(let V=0;V<X;V++){let W=Y.getViewport(V);s.set(r.x*W.x,r.y*W.y,r.x*W.z,r.y*W.w),T.viewport(s),Y.updateMatrices(z,V),o=Y.getFrustum(),x(b,P,Y.camera,z,this.type)}if(Y.isPointLightShadow!==!0&&this.type===3)f(Y,P);Y.needsUpdate=!1}_=this.type,g.needsUpdate=!1,e.setRenderTarget(E,B,w)};function f(I,b){let P=t.update(p);if(h.defines.VSM_SAMPLES!==I.blurSamples)h.defines.VSM_SAMPLES=I.blurSamples,A.defines.VSM_SAMPLES=I.blurSamples,h.needsUpdate=!0,A.needsUpdate=!0;if(I.mapPass===null)I.mapPass=new N7(i.x,i.y);h.uniforms.shadow_pass.value=I.map.texture,h.uniforms.resolution.value=I.mapSize,h.uniforms.radius.value=I.radius,e.setRenderTarget(I.mapPass),e.clear(),e.renderBufferDirect(b,null,P,h,p,null),A.uniforms.shadow_pass.value=I.mapPass.texture,A.uniforms.resolution.value=I.mapSize,A.uniforms.radius.value=I.radius,e.setRenderTarget(I.map),e.clear(),e.renderBufferDirect(b,null,P,A,p,null)}function y(I,b,P,E){let B=null,w=P.isPointLight===!0?I.customDistanceMaterial:I.customDepthMaterial;if(w!==void 0)B=w;else if(B=P.isPointLight===!0?c:a,e.localClippingEnabled&&b.clipShadows===!0&&Array.isArray(b.clippingPlanes)&&b.clippingPlanes.length!==0||b.displacementMap&&b.displacementScale!==0||b.alphaMap&&b.alphaTest>0||b.map&&b.alphaTest>0){let T=B.uuid,Q=b.uuid,N=l[T];if(N===void 0)N={},l[T]=N;let F=N[Q];if(F===void 0)F=B.clone(),N[Q]=F,b.addEventListener("dispose",C);B=F}if(B.visible=b.visible,B.wireframe=b.wireframe,E===3)B.side=b.shadowSide!==null?b.shadowSide:b.side;else B.side=b.shadowSide!==null?b.shadowSide:u[b.side];if(B.alphaMap=b.alphaMap,B.alphaTest=b.alphaTest,B.map=b.map,B.clipShadows=b.clipShadows,B.clippingPlanes=b.clippingPlanes,B.clipIntersection=b.clipIntersection,B.displacementMap=b.displacementMap,B.displacementScale=b.displacementScale,B.displacementBias=b.displacementBias,B.wireframeLinewidth=b.wireframeLinewidth,B.linewidth=b.linewidth,P.isPointLight===!0&&B.isMeshDistanceMaterial===!0){let T=e.properties.get(B);T.light=P}return B}function x(I,b,P,E,B){if(I.visible===!1)return;if(I.layers.test(b.layers)&&(I.isMesh||I.isLine||I.isPoints)){if((I.castShadow||I.receiveShadow&&B===3)&&(!I.frustumCulled||o.intersectsObject(I))){I.modelViewMatrix.multiplyMatrices(P.matrixWorldInverse,I.matrixWorld);let Q=t.update(I),N=I.material;if(Array.isArray(N)){let F=Q.groups;for(let H=0,z=F.length;H<z;H++){let Y=F[H],U=N[Y.materialIndex];if(U&&U.visible){let X=y(I,U,E,B);I.onBeforeShadow(e,I,b,P,Q,X,Y),e.renderBufferDirect(P,null,Q,X,I,Y),I.onAfterShadow(e,I,b,P,Q,X,Y)}}}else if(N.visible){let F=y(I,N,E,B);I.onBeforeShadow(e,I,b,P,Q,F,null),e.renderBufferDirect(P,null,Q,F,I,null),I.onAfterShadow(e,I,b,P,Q,F,null)}}}let T=I.children;for(let Q=0,N=T.length;Q<N;Q++)x(T[Q],b,P,E,B)}function C(I){I.target.removeEventListener("dispose",C);for(let P in l){let E=l[P],B=I.target.uuid;if(B in E)E[B].dispose(),delete E[B]}}}function Lao(e){function t(){let je=!1,Re=new Gl,Je=null,Ve=new Gl(0,0,0,0);return{setMask:function(Ye){if(Je!==Ye&&!je)e.colorMask(Ye,Ye,Ye,Ye),Je=Ye},setLocked:function(Ye){je=Ye},setClear:function(Ye,mt,ft,Oe,qe){if(qe===!0)Ye*=Oe,mt*=Oe,ft*=Oe;if(Re.set(Ye,mt,ft,Oe),Ve.equals(Re)===!1)e.clearColor(Ye,mt,ft,Oe),Ve.copy(Re)},reset:function(){je=!1,Je=null,Ve.set(-1,0,0,0)}}}function n(){let je=!1,Re=null,Je=null,Ve=null;return{setTest:function(Ye){if(Ye)ce(e.DEPTH_TEST);else oe(e.DEPTH_TEST)},setMask:function(Ye){if(Re!==Ye&&!je)e.depthMask(Ye),Re=Ye},setFunc:function(Ye){if(Je!==Ye){switch(Ye){case 0:e.depthFunc(e.NEVER);break;case 1:e.depthFunc(e.ALWAYS);break;case 2:e.depthFunc(e.LESS);break;case 3:e.depthFunc(e.LEQUAL);break;case 4:e.depthFunc(e.EQUAL);break;case 5:e.depthFunc(e.GEQUAL);break;case 6:e.depthFunc(e.GREATER);break;case 7:e.depthFunc(e.NOTEQUAL);break;default:e.depthFunc(e.LEQUAL)}Je=Ye}},setLocked:function(Ye){je=Ye},setClear:function(Ye){if(Ve!==Ye)e.clearDepth(Ye),Ve=Ye},reset:function(){je=!1,Re=null,Je=null,Ve=null}}}function o(){let je=!1,Re=null,Je=null,Ve=null,Ye=null,mt=null,ft=null,Oe=null,qe=null;return{setTest:function(rt){if(!je)if(rt)ce(e.STENCIL_TEST);else oe(e.STENCIL_TEST)},setMask:function(rt){if(Re!==rt&&!je)e.stencilMask(rt),Re=rt},setFunc:function(rt,Ct,Mt){if(Je!==rt||Ve!==Ct||Ye!==Mt)e.stencilFunc(rt,Ct,Mt),Je=rt,Ve=Ct,Ye=Mt},setOp:function(rt,Ct,Mt){if(mt!==rt||ft!==Ct||Oe!==Mt)e.stencilOp(rt,Ct,Mt),mt=rt,ft=Ct,Oe=Mt},setLocked:function(rt){je=rt},setClear:function(rt){if(qe!==rt)e.clearStencil(rt),qe=rt},reset:function(){je=!1,Re=null,Je=null,Ve=null,Ye=null,mt=null,ft=null,Oe=null,qe=null}}}let i=new t,r=new n,s=new o,a=new WeakMap,c=new WeakMap,l={},d={},u=new WeakMap,h=[],A=null,m=!1,p=null,g=null,_=null,f=null,y=null,x=null,C=null,I=new Po(0,0,0),b=0,P=!1,E=null,B=null,w=null,T=null,Q=null,N=e.getParameter(e.MAX_COMBINED_TEXTURE_IMAGE_UNITS),F=!1,H=0,z=e.getParameter(e.VERSION);if(z.indexOf("WebGL")!==-1)H=parseFloat(/^WebGL (\d)/.exec(z)[1]),F=H>=1;else if(z.indexOf("OpenGL ES")!==-1)H=parseFloat(/^OpenGL ES (\d)/.exec(z)[1]),F=H>=2;let Y=null,U={},X=e.getParameter(e.SCISSOR_BOX),V=e.getParameter(e.VIEWPORT),W=new Gl().fromArray(X),j=new Gl().fromArray(V);function q(je,Re,Je,Ve){let Ye=new Uint8Array(4),mt=e.createTexture();e.bindTexture(je,mt),e.texParameteri(je,e.TEXTURE_MIN_FILTER,e.NEAREST),e.texParameteri(je,e.TEXTURE_MAG_FILTER,e.NEAREST);for(let ft=0;ft<Je;ft++)if(je===e.TEXTURE_3D||je===e.TEXTURE_2D_ARRAY)e.texImage3D(Re,0,e.RGBA,1,1,Ve,0,e.RGBA,e.UNSIGNED_BYTE,Ye);else e.texImage2D(Re+ft,0,e.RGBA,1,1,0,e.RGBA,e.UNSIGNED_BYTE,Ye);return mt}let ne={};ne[e.TEXTURE_2D]=q(e.TEXTURE_2D,e.TEXTURE_2D,1),ne[e.TEXTURE_CUBE_MAP]=q(e.TEXTURE_CUBE_MAP,e.TEXTURE_CUBE_MAP_POSITIVE_X,6),ne[e.TEXTURE_2D_ARRAY]=q(e.TEXTURE_2D_ARRAY,e.TEXTURE_2D_ARRAY,1,1),ne[e.TEXTURE_3D]=q(e.TEXTURE_3D,e.TEXTURE_3D,1,1),i.setClear(0,0,0,1),r.setClear(1),s.setClear(0),ce(e.DEPTH_TEST),r.setFunc(3),Ae(!1),_e(1),ce(e.CULL_FACE),he(0);function ce(je){if(l[je]!==!0)e.enable(je),l[je]=!0}function oe(je){if(l[je]!==!1)e.disable(je),l[je]=!1}function ie(je,Re){if(d[je]!==Re){if(e.bindFramebuffer(je,Re),d[je]=Re,je===e.DRAW_FRAMEBUFFER)d[e.FRAMEBUFFER]=Re;if(je===e.FRAMEBUFFER)d[e.DRAW_FRAMEBUFFER]=Re;return!0}return!1}function J(je,Re){let Je=h,Ve=!1;if(je){if(Je=u.get(Re),Je===void 0)Je=[],u.set(Re,Je);let Ye=je.textures;if(Je.length!==Ye.length||Je[0]!==e.COLOR_ATTACHMENT0){for(let mt=0,ft=Ye.length;mt<ft;mt++)Je[mt]=e.COLOR_ATTACHMENT0+mt;Je.length=Ye.length,Ve=!0}}else if(Je[0]!==e.BACK)Je[0]=e.BACK,Ve=!0;if(Ve)e.drawBuffers(Je)}function ee(je){if(A!==je)return e.useProgram(je),A=je,!0;return!1}let se={[100]:e.FUNC_ADD,[101]:e.FUNC_SUBTRACT,[102]:e.FUNC_REVERSE_SUBTRACT};se[103]=e.MIN,se[104]=e.MAX;let le={[200]:e.ZERO,[201]:e.ONE,[202]:e.SRC_COLOR,[204]:e.SRC_ALPHA,[210]:e.SRC_ALPHA_SATURATE,[208]:e.DST_COLOR,[206]:e.DST_ALPHA,[203]:e.ONE_MINUS_SRC_COLOR,[205]:e.ONE_MINUS_SRC_ALPHA,[209]:e.ONE_MINUS_DST_COLOR,[207]:e.ONE_MINUS_DST_ALPHA,[211]:e.CONSTANT_COLOR,[212]:e.ONE_MINUS_CONSTANT_COLOR,[213]:e.CONSTANT_ALPHA,[214]:e.ONE_MINUS_CONSTANT_ALPHA};function he(je,Re,Je,Ve,Ye,mt,ft,Oe,qe,rt){if(je===0){if(m===!0)oe(e.BLEND),m=!1;return}if(m===!1)ce(e.BLEND),m=!0;if(je!==5){if(je!==p||rt!==P){if(g!==100||y!==100)e.blendEquation(e.FUNC_ADD),g=100,y=100;if(rt)switch(je){case 1:e.blendFuncSeparate(e.ONE,e.ONE_MINUS_SRC_ALPHA,e.ONE,e.ONE_MINUS_SRC_ALPHA);break;case 2:e.blendFunc(e.ONE,e.ONE);break;case 3:e.blendFuncSeparate(e.ZERO,e.ONE_MINUS_SRC_COLOR,e.ZERO,e.ONE);break;case 4:e.blendFuncSeparate(e.ZERO,e.SRC_COLOR,e.ZERO,e.SRC_ALPHA);break;default:console.error("THREE.WebGLState: Invalid blending: ",je);break}else switch(je){case 1:e.blendFuncSeparate(e.SRC_ALPHA,e.ONE_MINUS_SRC_ALPHA,e.ONE,e.ONE_MINUS_SRC_ALPHA);break;case 2:e.blendFunc(e.SRC_ALPHA,e.ONE);break;case 3:e.blendFuncSeparate(e.ZERO,e.ONE_MINUS_SRC_COLOR,e.ZERO,e.ONE);break;case 4:e.blendFunc(e.ZERO,e.SRC_COLOR);break;default:console.error("THREE.WebGLState: Invalid blending: ",je);break}_=null,f=null,x=null,C=null,I.set(0,0,0),b=0,p=je,P=rt}return}if(Ye=Ye||Re,mt=mt||Je,ft=ft||Ve,Re!==g||Ye!==y)e.blendEquationSeparate(se[Re],se[Ye]),g=Re,y=Ye;if(Je!==_||Ve!==f||mt!==x||ft!==C)e.blendFuncSeparate(le[Je],le[Ve],le[mt],le[ft]),_=Je,f=Ve,x=mt,C=ft;if(Oe.equals(I)===!1||qe!==b)e.blendColor(Oe.r,Oe.g,Oe.b,qe),I.copy(Oe),b=qe;p=je,P=!1}function ue(je,Re){je.side===2?oe(e.CULL_FACE):ce(e.CULL_FACE);let Je=je.side===1;if(Re)Je=!Je;Ae(Je),je.blending===1&&je.transparent===!1?he(0):he(je.blending,je.blendEquation,je.blendSrc,je.blendDst,je.blendEquationAlpha,je.blendSrcAlpha,je.blendDstAlpha,je.blendColor,je.blendAlpha,je.premultipliedAlpha),r.setFunc(je.depthFunc),r.setTest(je.depthTest),r.setMask(je.depthWrite),i.setMask(je.colorWrite);let Ve=je.stencilWrite;if(s.setTest(Ve),Ve)s.setMask(je.stencilWriteMask),s.setFunc(je.stencilFunc,je.stencilRef,je.stencilFuncMask),s.setOp(je.stencilFail,je.stencilZFail,je.stencilZPass);Ee(je.polygonOffset,je.polygonOffsetFactor,je.polygonOffsetUnits),je.alphaToCoverage===!0?ce(e.SAMPLE_ALPHA_TO_COVERAGE):oe(e.SAMPLE_ALPHA_TO_COVERAGE)}function Ae(je){if(E!==je){if(je)e.frontFace(e.CW);else e.frontFace(e.CCW);E=je}}function _e(je){if(je!==0){if(ce(e.CULL_FACE),je!==B)if(je===1)e.cullFace(e.BACK);else if(je===2)e.cullFace(e.FRONT);else e.cullFace(e.FRONT_AND_BACK)}else oe(e.CULL_FACE);B=je}function Pe(je){if(je!==w){if(F)e.lineWidth(je);w=je}}function Ee(je,Re,Je){if(je){if(ce(e.POLYGON_OFFSET_FILL),T!==Re||Q!==Je)e.polygonOffset(Re,Je),T=Re,Q=Je}else oe(e.POLYGON_OFFSET_FILL)}function Te(je){if(je)ce(e.SCISSOR_TEST);else oe(e.SCISSOR_TEST)}function be(je){if(je===void 0)je=e.TEXTURE0+N-1;if(Y!==je)e.activeTexture(je),Y=je}function me(je,Re,Je){if(Je===void 0)if(Y===null)Je=e.TEXTURE0+N-1;else Je=Y;let Ve=U[Je];if(Ve===void 0)Ve={type:void 0,texture:void 0},U[Je]=Ve;if(Ve.type!==je||Ve.texture!==Re){if(Y!==Je)e.activeTexture(Je),Y=Je;e.bindTexture(je,Re||ne[je]),Ve.type=je,Ve.texture=Re}}function ye(){let je=U[Y];if(je!==void 0&&je.type!==void 0)e.bindTexture(je.type,null),je.type=void 0,je.texture=void 0}function Ce(){try{e.compressedTexImage2D.apply(e,arguments)}catch(je){console.error("THREE.WebGLState:",je)}}function ve(){try{e.compressedTexImage3D.apply(e,arguments)}catch(je){console.error("THREE.WebGLState:",je)}}function De(){try{e.texSubImage2D.apply(e,arguments)}catch(je){console.error("THREE.WebGLState:",je)}}function Ze(){try{e.texSubImage3D.apply(e,arguments)}catch(je){console.error("THREE.WebGLState:",je)}}function st(){try{e.compressedTexSubImage2D.apply(e,arguments)}catch(je){console.error("THREE.WebGLState:",je)}}function et(){try{e.compressedTexSubImage3D.apply(e,arguments)}catch(je){console.error("THREE.WebGLState:",je)}}function lt(){try{e.texStorage2D.apply(e,arguments)}catch(je){console.error("THREE.WebGLState:",je)}}function it(){try{e.texStorage3D.apply(e,arguments)}catch(je){console.error("THREE.WebGLState:",je)}}function gt(){try{e.texImage2D.apply(e,arguments)}catch(je){console.error("THREE.WebGLState:",je)}}function wt(){try{e.texImage3D.apply(e,arguments)}catch(je){console.error("THREE.WebGLState:",je)}}function Dt(je){if(W.equals(je)===!1)e.scissor(je.x,je.y,je.z,je.w),W.copy(je)}function vt(je){if(j.equals(je)===!1)e.viewport(je.x,je.y,je.z,je.w),j.copy(je)}function Ht(je,Re){let Je=c.get(Re);if(Je===void 0)Je=new WeakMap,c.set(Re,Je);let Ve=Je.get(je);if(Ve===void 0)Ve=e.getUniformBlockIndex(Re,je.name),Je.set(je,Ve)}function Xt(je,Re){let Ve=c.get(Re).get(je);if(a.get(Re)!==Ve)e.uniformBlockBinding(Re,Ve,je.__bindingPointIndex),a.set(Re,Ve)}function ut(){e.disable(e.BLEND),e.disable(e.CULL_FACE),e.disable(e.DEPTH_TEST),e.disable(e.POLYGON_OFFSET_FILL),e.disable(e.SCISSOR_TEST),e.disable(e.STENCIL_TEST),e.disable(e.SAMPLE_ALPHA_TO_COVERAGE),e.blendEquation(e.FUNC_ADD),e.blendFunc(e.ONE,e.ZERO),e.blendFuncSeparate(e.ONE,e.ZERO,e.ONE,e.ZERO),e.blendColor(0,0,0,0),e.colorMask(!0,!0,!0,!0),e.clearColor(0,0,0,0),e.depthMask(!0),e.depthFunc(e.LESS),e.clearDepth(1),e.stencilMask(4294967295),e.stencilFunc(e.ALWAYS,0,4294967295),e.stencilOp(e.KEEP,e.KEEP,e.KEEP),e.clearStencil(0),e.cullFace(e.BACK),e.frontFace(e.CCW),e.polygonOffset(0,0),e.activeTexture(e.TEXTURE0),e.bindFramebuffer(e.FRAMEBUFFER,null),e.bindFramebuffer(e.DRAW_FRAMEBUFFER,null),e.bindFramebuffer(e.READ_FRAMEBUFFER,null),e.useProgram(null),e.lineWidth(1),e.scissor(0,0,e.canvas.width,e.canvas.height),e.viewport(0,0,e.canvas.width,e.canvas.height),l={},Y=null,U={},d={},u=new WeakMap,h=[],A=null,m=!1,p=null,g=null,_=null,f=null,y=null,x=null,C=null,I=new Po(0,0,0),b=0,P=!1,E=null,B=null,w=null,T=null,Q=null,W.set(0,0,e.canvas.width,e.canvas.height),j.set(0,0,e.canvas.width,e.canvas.height),i.reset(),r.reset(),s.reset()}return{buffers:{color:i,depth:r,stencil:s},enable:ce,disable:oe,bindFramebuffer:ie,drawBuffers:J,useProgram:ee,setBlending:he,setMaterial:ue,setFlipSided:Ae,setCullFace:_e,setLineWidth:Pe,setPolygonOffset:Ee,setScissorTest:Te,activeTexture:be,bindTexture:me,unbindTexture:ye,compressedTexImage2D:Ce,compressedTexImage3D:ve,texImage2D:gt,texImage3D:wt,updateUBOMapping:Ht,uniformBlockBinding:Xt,texStorage2D:lt,texStorage3D:it,texSubImage2D:De,texSubImage3D:Ze,compressedTexSubImage2D:st,compressedTexSubImage3D:et,scissor:Dt,viewport:vt,reset:ut}}function Fao(e,t,n,o,i,r,s){let a=t.has("WEBGL_multisampled_render_to_texture")?t.get("WEBGL_multisampled_render_to_texture"):null,c=typeof navigator>"u"?!1:/OculusBrowser/g.test(navigator.userAgent),l=new ro,d=new WeakMap,u,h=new WeakMap,A=!1;try{A=typeof OffscreenCanvas<"u"&&new OffscreenCanvas(1,1).getContext("2d")!==null}catch(be){}function m(be,me){return A?new OffscreenCanvas(be,me):XJ("canvas")}function p(be,me,ye){let Ce=1,ve=Te(be);if(ve.width>ye||ve.height>ye)Ce=ye/Math.max(ve.width,ve.height);if(Ce<1)if(typeof HTMLImageElement<"u"&&be instanceof HTMLImageElement||typeof HTMLCanvasElement<"u"&&be instanceof HTMLCanvasElement||typeof ImageBitmap<"u"&&be instanceof ImageBitmap||typeof VideoFrame<"u"&&be instanceof VideoFrame){let De=Math.floor(Ce*ve.width),Ze=Math.floor(Ce*ve.height);if(u===void 0)u=m(De,Ze);let st=me?m(De,Ze):u;return st.width=De,st.height=Ze,st.getContext("2d").drawImage(be,0,0,De,Ze),console.warn("THREE.WebGLRenderer: Texture has been resized from ("+ve.width+"x"+ve.height+") to ("+De+"x"+Ze+")."),st}else{if("data"in be)console.warn("THREE.WebGLRenderer: Image in DataTexture is too big ("+ve.width+"x"+ve.height+").");return be}return be}function g(be){return be.generateMipmaps&&be.minFilter!==1003&&be.minFilter!==1006}function _(be){e.generateMipmap(be)}function f(be,me,ye,Ce,ve=!1){if(be!==null){if(e[be]!==void 0)return e[be];console.warn("THREE.WebGLRenderer: Attempt to use non-existing WebGL internal format '"+be+"'")}let De=me;if(me===e.RED){if(ye===e.FLOAT)De=e.R32F;if(ye===e.HALF_FLOAT)De=e.R16F;if(ye===e.UNSIGNED_BYTE)De=e.R8}if(me===e.RED_INTEGER){if(ye===e.UNSIGNED_BYTE)De=e.R8UI;if(ye===e.UNSIGNED_SHORT)De=e.R16UI;if(ye===e.UNSIGNED_INT)De=e.R32UI;if(ye===e.BYTE)De=e.R8I;if(ye===e.SHORT)De=e.R16I;if(ye===e.INT)De=e.R32I}if(me===e.RG){if(ye===e.FLOAT)De=e.RG32F;if(ye===e.HALF_FLOAT)De=e.RG16F;if(ye===e.UNSIGNED_BYTE)De=e.RG8}if(me===e.RG_INTEGER){if(ye===e.UNSIGNED_BYTE)De=e.RG8UI;if(ye===e.UNSIGNED_SHORT)De=e.RG16UI;if(ye===e.UNSIGNED_INT)De=e.RG32UI;if(ye===e.BYTE)De=e.RG8I;if(ye===e.SHORT)De=e.RG16I;if(ye===e.INT)De=e.RG32I}if(me===e.RGB){if(ye===e.UNSIGNED_INT_5_9_9_9_REV)De=e.RGB9_E5}if(me===e.RGBA){let Ze=ve?"linear":ed.getTransfer(Ce);if(ye===e.FLOAT)De=e.RGBA32F;if(ye===e.HALF_FLOAT)De=e.RGBA16F;if(ye===e.UNSIGNED_BYTE)De=Ze==="srgb"?e.SRGB8_ALPHA8:e.RGBA8;if(ye===e.UNSIGNED_SHORT_4_4_4_4)De=e.RGBA4;if(ye===e.UNSIGNED_SHORT_5_5_5_1)De=e.RGB5_A1}if(De===e.R16F||De===e.R32F||De===e.RG16F||De===e.RG32F||De===e.RGBA16F||De===e.RGBA32F)t.get("EXT_color_buffer_float");return De}function y(be,me){let ye;if(be){if(me===null||me===1014||me===1020)ye=e.DEPTH24_STENCIL8;else if(me===1015)ye=e.DEPTH32F_STENCIL8;else if(me===1012)ye=e.DEPTH24_STENCIL8,console.warn("DepthTexture: 16 bit depth attachment is not supported with stencil. Using 24-bit attachment.")}else if(me===null||me===1014||me===1020)ye=e.DEPTH_COMPONENT24;else if(me===1015)ye=e.DEPTH_COMPONENT32F;else if(me===1012)ye=e.DEPTH_COMPONENT16;return ye}function x(be,me){if(g(be)===!0||be.isFramebufferTexture&&be.minFilter!==1003&&be.minFilter!==1006)return Math.log2(Math.max(me.width,me.height))+1;else if(be.mipmaps!==void 0&&be.mipmaps.length>0)return be.mipmaps.length;else if(be.isCompressedTexture&&Array.isArray(be.image))return me.mipmaps.length;else return 1}function C(be){let me=be.target;if(me.removeEventListener("dispose",C),b(me),me.isVideoTexture)d.delete(me)}function I(be){let me=be.target;me.removeEventListener("dispose",I),E(me)}function b(be){let me=o.get(be);if(me.__webglInit===void 0)return;let ye=be.source,Ce=h.get(ye);if(Ce){let ve=Ce[me.__cacheKey];if(ve.usedTimes--,ve.usedTimes===0)P(be);if(Object.keys(Ce).length===0)h.delete(ye)}o.remove(be)}function P(be){let me=o.get(be);e.deleteTexture(me.__webglTexture);let ye=be.source,Ce=h.get(ye);delete Ce[me.__cacheKey],s.memory.textures--}function E(be){let me=o.get(be);if(be.depthTexture)be.depthTexture.dispose();if(be.isWebGLCubeRenderTarget)for(let Ce=0;Ce<6;Ce++){if(Array.isArray(me.__webglFramebuffer[Ce]))for(let ve=0;ve<me.__webglFramebuffer[Ce].length;ve++)e.deleteFramebuffer(me.__webglFramebuffer[Ce][ve]);else e.deleteFramebuffer(me.__webglFramebuffer[Ce]);if(me.__webglDepthbuffer)e.deleteRenderbuffer(me.__webglDepthbuffer[Ce])}else{if(Array.isArray(me.__webglFramebuffer))for(let Ce=0;Ce<me.__webglFramebuffer.length;Ce++)e.deleteFramebuffer(me.__webglFramebuffer[Ce]);else e.deleteFramebuffer(me.__webglFramebuffer);if(me.__webglDepthbuffer)e.deleteRenderbuffer(me.__webglDepthbuffer);if(me.__webglMultisampledFramebuffer)e.deleteFramebuffer(me.__webglMultisampledFramebuffer);if(me.__webglColorRenderbuffer){for(let Ce=0;Ce<me.__webglColorRenderbuffer.length;Ce++)if(me.__webglColorRenderbuffer[Ce])e.deleteRenderbuffer(me.__webglColorRenderbuffer[Ce])}if(me.__webglDepthRenderbuffer)e.deleteRenderbuffer(me.__webglDepthRenderbuffer)}let ye=be.textures;for(let Ce=0,ve=ye.length;Ce<ve;Ce++){let De=o.get(ye[Ce]);if(De.__webglTexture)e.deleteTexture(De.__webglTexture),s.memory.textures--;o.remove(ye[Ce])}o.remove(be)}let B=0;function w(){B=0}function T(){let be=B;if(be>=i.maxTextures)console.warn("THREE.WebGLTextures: Trying to use "+be+" texture units while this GPU supports only "+i.maxTextures);return B+=1,be}function Q(be){let me=[];return me.push(be.wrapS),me.push(be.wrapT),me.push(be.wrapR||0),me.push(be.magFilter),me.push(be.minFilter),me.push(be.anisotropy),me.push(be.internalFormat),me.push(be.format),me.push(be.type),me.push(be.generateMipmaps),me.push(be.premultiplyAlpha),me.push(be.flipY),me.push(be.unpackAlignment),me.push(be.colorSpace),me.join()}function N(be,me){let ye=o.get(be);if(be.isVideoTexture)Pe(be);if(be.isRenderTargetTexture===!1&&be.version>0&&ye.__version!==be.version){let Ce=be.image;if(Ce===null)console.warn("THREE.WebGLRenderer: Texture marked for update but no image data found.");else if(Ce.complete===!1)console.warn("THREE.WebGLRenderer: Texture marked for update but image is incomplete");else{j(ye,be,me);return}}n.bindTexture(e.TEXTURE_2D,ye.__webglTexture,e.TEXTURE0+me)}function F(be,me){let ye=o.get(be);if(be.version>0&&ye.__version!==be.version){j(ye,be,me);return}n.bindTexture(e.TEXTURE_2D_ARRAY,ye.__webglTexture,e.TEXTURE0+me)}function H(be,me){let ye=o.get(be);if(be.version>0&&ye.__version!==be.version){j(ye,be,me);return}n.bindTexture(e.TEXTURE_3D,ye.__webglTexture,e.TEXTURE0+me)}function z(be,me){let ye=o.get(be);if(be.version>0&&ye.__version!==be.version){q(ye,be,me);return}n.bindTexture(e.TEXTURE_CUBE_MAP,ye.__webglTexture,e.TEXTURE0+me)}let Y={[1000]:e.REPEAT,[1001]:e.CLAMP_TO_EDGE,[1002]:e.MIRRORED_REPEAT},U={[1003]:e.NEAREST,[1004]:e.NEAREST_MIPMAP_NEAREST,[1005]:e.NEAREST_MIPMAP_LINEAR,[1006]:e.LINEAR,[1007]:e.LINEAR_MIPMAP_NEAREST,[1008]:e.LINEAR_MIPMAP_LINEAR},X={[512]:e.NEVER,[519]:e.ALWAYS,[513]:e.LESS,[515]:e.LEQUAL,[514]:e.EQUAL,[518]:e.GEQUAL,[516]:e.GREATER,[517]:e.NOTEQUAL};function V(be,me){if(me.type===1015&&t.has("OES_texture_float_linear")===!1&&(me.magFilter===1006||me.magFilter===1007||me.magFilter===1005||me.magFilter===1008||me.minFilter===1006||me.minFilter===1007||me.minFilter===1005||me.minFilter===1008))console.warn("THREE.WebGLRenderer: Unable to use linear filtering with floating point textures. OES_texture_float_linear not supported on this device.");if(e.texParameteri(be,e.TEXTURE_WRAP_S,Y[me.wrapS]),e.texParameteri(be,e.TEXTURE_WRAP_T,Y[me.wrapT]),be===e.TEXTURE_3D||be===e.TEXTURE_2D_ARRAY)e.texParameteri(be,e.TEXTURE_WRAP_R,Y[me.wrapR]);if(e.texParameteri(be,e.TEXTURE_MAG_FILTER,U[me.magFilter]),e.texParameteri(be,e.TEXTURE_MIN_FILTER,U[me.minFilter]),me.compareFunction)e.texParameteri(be,e.TEXTURE_COMPARE_MODE,e.COMPARE_REF_TO_TEXTURE),e.texParameteri(be,e.TEXTURE_COMPARE_FUNC,X[me.compareFunction]);if(t.has("EXT_texture_filter_anisotropic")===!0){if(me.magFilter===1003)return;if(me.minFilter!==1005&&me.minFilter!==1008)return;if(me.type===1015&&t.has("OES_texture_float_linear")===!1)return;if(me.anisotropy>1||o.get(me).__currentAnisotropy){let ye=t.get("EXT_texture_filter_anisotropic");e.texParameterf(be,ye.TEXTURE_MAX_ANISOTROPY_EXT,Math.min(me.anisotropy,i.getMaxAnisotropy())),o.get(me).__currentAnisotropy=me.anisotropy}}}function W(be,me){let ye=!1;if(be.__webglInit===void 0)be.__webglInit=!0,me.addEventListener("dispose",C);let Ce=me.source,ve=h.get(Ce);if(ve===void 0)ve={},h.set(Ce,ve);let De=Q(me);if(De!==be.__cacheKey){if(ve[De]===void 0)ve[De]={texture:e.createTexture(),usedTimes:0},s.memory.textures++,ye=!0;ve[De].usedTimes++;let Ze=ve[be.__cacheKey];if(Ze!==void 0){if(ve[be.__cacheKey].usedTimes--,Ze.usedTimes===0)P(me)}be.__cacheKey=De,be.__webglTexture=ve[De].texture}return ye}function j(be,me,ye){let Ce=e.TEXTURE_2D;if(me.isDataArrayTexture||me.isCompressedArrayTexture)Ce=e.TEXTURE_2D_ARRAY;if(me.isData3DTexture)Ce=e.TEXTURE_3D;let ve=W(be,me),De=me.source;n.bindTexture(Ce,be.__webglTexture,e.TEXTURE0+ye);let Ze=o.get(De);if(De.version!==Ze.__version||ve===!0){n.activeTexture(e.TEXTURE0+ye);let st=ed.getPrimaries(ed.workingColorSpace),et=me.colorSpace===""?null:ed.getPrimaries(me.colorSpace),lt=me.colorSpace===""||st===et?e.NONE:e.BROWSER_DEFAULT_WEBGL;e.pixelStorei(e.UNPACK_FLIP_Y_WEBGL,me.flipY),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,me.premultiplyAlpha),e.pixelStorei(e.UNPACK_ALIGNMENT,me.unpackAlignment),e.pixelStorei(e.UNPACK_COLORSPACE_CONVERSION_WEBGL,lt);let it=p(me.image,!1,i.maxTextureSize);it=Ee(me,it);let gt=r.convert(me.format,me.colorSpace),wt=r.convert(me.type),Dt=f(me.internalFormat,gt,wt,me.colorSpace,me.isVideoTexture);V(Ce,me);let vt,Ht=me.mipmaps,Xt=me.isVideoTexture!==!0,ut=Ze.__version===void 0||ve===!0,je=De.dataReady,Re=x(me,it);if(me.isDepthTexture){if(Dt=y(me.format===1027,me.type),ut)if(Xt)n.texStorage2D(e.TEXTURE_2D,1,Dt,it.width,it.height);else n.texImage2D(e.TEXTURE_2D,0,Dt,it.width,it.height,0,gt,wt,null)}else if(me.isDataTexture)if(Ht.length>0){if(Xt&&ut)n.texStorage2D(e.TEXTURE_2D,Re,Dt,Ht[0].width,Ht[0].height);for(let Je=0,Ve=Ht.length;Je<Ve;Je++)if(vt=Ht[Je],Xt){if(je)n.texSubImage2D(e.TEXTURE_2D,Je,0,0,vt.width,vt.height,gt,wt,vt.data)}else n.texImage2D(e.TEXTURE_2D,Je,Dt,vt.width,vt.height,0,gt,wt,vt.data);me.generateMipmaps=!1}else if(Xt){if(ut)n.texStorage2D(e.TEXTURE_2D,Re,Dt,it.width,it.height);if(je)n.texSubImage2D(e.TEXTURE_2D,0,0,0,it.width,it.height,gt,wt,it.data)}else n.texImage2D(e.TEXTURE_2D,0,Dt,it.width,it.height,0,gt,wt,it.data);else if(me.isCompressedTexture)if(me.isCompressedArrayTexture){if(Xt&&ut)n.texStorage3D(e.TEXTURE_2D_ARRAY,Re,Dt,Ht[0].width,Ht[0].height,it.depth);for(let Je=0,Ve=Ht.length;Je<Ve;Je++)if(vt=Ht[Je],me.format!==1023)if(gt!==null)if(Xt){if(je)if(me.layerUpdates.size>0){for(let Ye of me.layerUpdates){let mt=vt.width*vt.height;n.compressedTexSubImage3D(e.TEXTURE_2D_ARRAY,Je,0,0,Ye,vt.width,vt.height,1,gt,vt.data.slice(mt*Ye,mt*(Ye+1)),0,0)}me.clearLayerUpdates()}else n.compressedTexSubImage3D(e.TEXTURE_2D_ARRAY,Je,0,0,0,vt.width,vt.height,it.depth,gt,vt.data,0,0)}else n.compressedTexImage3D(e.TEXTURE_2D_ARRAY,Je,Dt,vt.width,vt.height,it.depth,0,vt.data,0,0);else console.warn("THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()");else if(Xt){if(je)n.texSubImage3D(e.TEXTURE_2D_ARRAY,Je,0,0,0,vt.width,vt.height,it.depth,gt,wt,vt.data)}else n.texImage3D(e.TEXTURE_2D_ARRAY,Je,Dt,vt.width,vt.height,it.depth,0,gt,wt,vt.data)}else{if(Xt&&ut)n.texStorage2D(e.TEXTURE_2D,Re,Dt,Ht[0].width,Ht[0].height);for(let Je=0,Ve=Ht.length;Je<Ve;Je++)if(vt=Ht[Je],me.format!==1023)if(gt!==null)if(Xt){if(je)n.compressedTexSubImage2D(e.TEXTURE_2D,Je,0,0,vt.width,vt.height,gt,vt.data)}else n.compressedTexImage2D(e.TEXTURE_2D,Je,Dt,vt.width,vt.height,0,vt.data);else console.warn("THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()");else if(Xt){if(je)n.texSubImage2D(e.TEXTURE_2D,Je,0,0,vt.width,vt.height,gt,wt,vt.data)}else n.texImage2D(e.TEXTURE_2D,Je,Dt,vt.width,vt.height,0,gt,wt,vt.data)}else if(me.isDataArrayTexture)if(Xt){if(ut)n.texStorage3D(e.TEXTURE_2D_ARRAY,Re,Dt,it.width,it.height,it.depth);if(je)if(me.layerUpdates.size>0){let Je;switch(wt){case e.UNSIGNED_BYTE:switch(gt){case e.ALPHA:Je=1;break;case e.LUMINANCE:Je=1;break;case e.LUMINANCE_ALPHA:Je=2;break;case e.RGB:Je=3;break;case e.RGBA:Je=4;break;default:throw Error(`Unknown texel size for format ${gt}.`)}break;case e.UNSIGNED_SHORT_4_4_4_4:case e.UNSIGNED_SHORT_5_5_5_1:case e.UNSIGNED_SHORT_5_6_5:Je=1;break;default:throw Error(`Unknown texel size for type ${wt}.`)}let Ve=it.width*it.height*Je;for(let Ye of me.layerUpdates)n.texSubImage3D(e.TEXTURE_2D_ARRAY,0,0,0,Ye,it.width,it.height,1,gt,wt,it.data.slice(Ve*Ye,Ve*(Ye+1)));me.clearLayerUpdates()}else n.texSubImage3D(e.TEXTURE_2D_ARRAY,0,0,0,0,it.width,it.height,it.depth,gt,wt,it.data)}else n.texImage3D(e.TEXTURE_2D_ARRAY,0,Dt,it.width,it.height,it.depth,0,gt,wt,it.data);else if(me.isData3DTexture)if(Xt){if(ut)n.texStorage3D(e.TEXTURE_3D,Re,Dt,it.width,it.height,it.depth);if(je)n.texSubImage3D(e.TEXTURE_3D,0,0,0,0,it.width,it.height,it.depth,gt,wt,it.data)}else n.texImage3D(e.TEXTURE_3D,0,Dt,it.width,it.height,it.depth,0,gt,wt,it.data);else if(me.isFramebufferTexture){if(ut)if(Xt)n.texStorage2D(e.TEXTURE_2D,Re,Dt,it.width,it.height);else{let Je=it.width,Ve=it.height;for(let Ye=0;Ye<Re;Ye++)n.texImage2D(e.TEXTURE_2D,Ye,Dt,Je,Ve,0,gt,wt,null),Je>>=1,Ve>>=1}}else if(Ht.length>0){if(Xt&&ut){let Je=Te(Ht[0]);n.texStorage2D(e.TEXTURE_2D,Re,Dt,Je.width,Je.height)}for(let Je=0,Ve=Ht.length;Je<Ve;Je++)if(vt=Ht[Je],Xt){if(je)n.texSubImage2D(e.TEXTURE_2D,Je,0,0,gt,wt,vt)}else n.texImage2D(e.TEXTURE_2D,Je,Dt,gt,wt,vt);me.generateMipmaps=!1}else if(Xt){if(ut){let Je=Te(it);n.texStorage2D(e.TEXTURE_2D,Re,Dt,Je.width,Je.height)}if(je)n.texSubImage2D(e.TEXTURE_2D,0,0,0,gt,wt,it)}else n.texImage2D(e.TEXTURE_2D,0,Dt,gt,wt,it);if(g(me))_(Ce);if(Ze.__version=De.version,me.onUpdate)me.onUpdate(me)}be.__version=me.version}function q(be,me,ye){if(me.image.length!==6)return;let Ce=W(be,me),ve=me.source;n.bindTexture(e.TEXTURE_CUBE_MAP,be.__webglTexture,e.TEXTURE0+ye);let De=o.get(ve);if(ve.version!==De.__version||Ce===!0){n.activeTexture(e.TEXTURE0+ye);let Ze=ed.getPrimaries(ed.workingColorSpace),st=me.colorSpace===""?null:ed.getPrimaries(me.colorSpace),et=me.colorSpace===""||Ze===st?e.NONE:e.BROWSER_DEFAULT_WEBGL;e.pixelStorei(e.UNPACK_FLIP_Y_WEBGL,me.flipY),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,me.premultiplyAlpha),e.pixelStorei(e.UNPACK_ALIGNMENT,me.unpackAlignment),e.pixelStorei(e.UNPACK_COLORSPACE_CONVERSION_WEBGL,et);let lt=me.isCompressedTexture||me.image[0].isCompressedTexture,it=me.image[0]&&me.image[0].isDataTexture,gt=[];for(let Ve=0;Ve<6;Ve++){if(!lt&&!it)gt[Ve]=p(me.image[Ve],!0,i.maxCubemapSize);else gt[Ve]=it?me.image[Ve].image:me.image[Ve];gt[Ve]=Ee(me,gt[Ve])}let wt=gt[0],Dt=r.convert(me.format,me.colorSpace),vt=r.convert(me.type),Ht=f(me.internalFormat,Dt,vt,me.colorSpace),Xt=me.isVideoTexture!==!0,ut=De.__version===void 0||Ce===!0,je=ve.dataReady,Re=x(me,wt);V(e.TEXTURE_CUBE_MAP,me);let Je;if(lt){if(Xt&&ut)n.texStorage2D(e.TEXTURE_CUBE_MAP,Re,Ht,wt.width,wt.height);for(let Ve=0;Ve<6;Ve++){Je=gt[Ve].mipmaps;for(let Ye=0;Ye<Je.length;Ye++){let mt=Je[Ye];if(me.format!==1023)if(Dt!==null)if(Xt){if(je)n.compressedTexSubImage2D(e.TEXTURE_CUBE_MAP_POSITIVE_X+Ve,Ye,0,0,mt.width,mt.height,Dt,mt.data)}else n.compressedTexImage2D(e.TEXTURE_CUBE_MAP_POSITIVE_X+Ve,Ye,Ht,mt.width,mt.height,0,mt.data);else console.warn("THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .setTextureCube()");else if(Xt){if(je)n.texSubImage2D(e.TEXTURE_CUBE_MAP_POSITIVE_X+Ve,Ye,0,0,mt.width,mt.height,Dt,vt,mt.data)}else n.texImage2D(e.TEXTURE_CUBE_MAP_POSITIVE_X+Ve,Ye,Ht,mt.width,mt.height,0,Dt,vt,mt.data)}}}else{if(Je=me.mipmaps,Xt&&ut){if(Je.length>0)Re++;let Ve=Te(gt[0]);n.texStorage2D(e.TEXTURE_CUBE_MAP,Re,Ht,Ve.width,Ve.height)}for(let Ve=0;Ve<6;Ve++)if(it){if(Xt){if(je)n.texSubImage2D(e.TEXTURE_CUBE_MAP_POSITIVE_X+Ve,0,0,0,gt[Ve].width,gt[Ve].height,Dt,vt,gt[Ve].data)}else n.texImage2D(e.TEXTURE_CUBE_MAP_POSITIVE_X+Ve,0,Ht,gt[Ve].width,gt[Ve].height,0,Dt,vt,gt[Ve].data);for(let Ye=0;Ye<Je.length;Ye++){let ft=Je[Ye].image[Ve].image;if(Xt){if(je)n.texSubImage2D(e.TEXTURE_CUBE_MAP_POSITIVE_X+Ve,Ye+1,0,0,ft.width,ft.height,Dt,vt,ft.data)}else n.texImage2D(e.TEXTURE_CUBE_MAP_POSITIVE_X+Ve,Ye+1,Ht,ft.width,ft.height,0,Dt,vt,ft.data)}}else{if(Xt){if(je)n.texSubImage2D(e.TEXTURE_CUBE_MAP_POSITIVE_X+Ve,0,0,0,Dt,vt,gt[Ve])}else n.texImage2D(e.TEXTURE_CUBE_MAP_POSITIVE_X+Ve,0,Ht,Dt,vt,gt[Ve]);for(let Ye=0;Ye<Je.length;Ye++){let mt=Je[Ye];if(Xt){if(je)n.texSubImage2D(e.TEXTURE_CUBE_MAP_POSITIVE_X+Ve,Ye+1,0,0,Dt,vt,mt.image[Ve])}else n.texImage2D(e.TEXTURE_CUBE_MAP_POSITIVE_X+Ve,Ye+1,Ht,Dt,vt,mt.image[Ve])}}}if(g(me))_(e.TEXTURE_CUBE_MAP);if(De.__version=ve.version,me.onUpdate)me.onUpdate(me)}be.__version=me.version}function ne(be,me,ye,Ce,ve,De){let Ze=r.convert(ye.format,ye.colorSpace),st=r.convert(ye.type),et=f(ye.internalFormat,Ze,st,ye.colorSpace);if(!o.get(me).__hasExternalTextures){let it=Math.max(1,me.width>>De),gt=Math.max(1,me.height>>De);if(ve===e.TEXTURE_3D||ve===e.TEXTURE_2D_ARRAY)n.texImage3D(ve,De,et,it,gt,me.depth,0,Ze,st,null);else n.texImage2D(ve,De,et,it,gt,0,Ze,st,null)}if(n.bindFramebuffer(e.FRAMEBUFFER,be),_e(me))a.framebufferTexture2DMultisampleEXT(e.FRAMEBUFFER,Ce,ve,o.get(ye).__webglTexture,0,Ae(me));else if(ve===e.TEXTURE_2D||ve>=e.TEXTURE_CUBE_MAP_POSITIVE_X&&ve<=e.TEXTURE_CUBE_MAP_NEGATIVE_Z)e.framebufferTexture2D(e.FRAMEBUFFER,Ce,ve,o.get(ye).__webglTexture,De);n.bindFramebuffer(e.FRAMEBUFFER,null)}function ce(be,me,ye){if(e.bindRenderbuffer(e.RENDERBUFFER,be),me.depthBuffer){let Ce=me.depthTexture,ve=Ce&&Ce.isDepthTexture?Ce.type:null,De=y(me.stencilBuffer,ve),Ze=me.stencilBuffer?e.DEPTH_STENCIL_ATTACHMENT:e.DEPTH_ATTACHMENT,st=Ae(me);if(_e(me))a.renderbufferStorageMultisampleEXT(e.RENDERBUFFER,st,De,me.width,me.height);else if(ye)e.renderbufferStorageMultisample(e.RENDERBUFFER,st,De,me.width,me.height);else e.renderbufferStorage(e.RENDERBUFFER,De,me.width,me.height);e.framebufferRenderbuffer(e.FRAMEBUFFER,Ze,e.RENDERBUFFER,be)}else{let Ce=me.textures;for(let ve=0;ve<Ce.length;ve++){let De=Ce[ve],Ze=r.convert(De.format,De.colorSpace),st=r.convert(De.type),et=f(De.internalFormat,Ze,st,De.colorSpace),lt=Ae(me);if(ye&&_e(me)===!1)e.renderbufferStorageMultisample(e.RENDERBUFFER,lt,et,me.width,me.height);else if(_e(me))a.renderbufferStorageMultisampleEXT(e.RENDERBUFFER,lt,et,me.width,me.height);else e.renderbufferStorage(e.RENDERBUFFER,et,me.width,me.height)}}e.bindRenderbuffer(e.RENDERBUFFER,null)}function oe(be,me){if(me&&me.isWebGLCubeRenderTarget)throw Error("Depth Texture with cube render targets is not supported");if(n.bindFramebuffer(e.FRAMEBUFFER,be),!(me.depthTexture&&me.depthTexture.isDepthTexture))throw Error("renderTarget.depthTexture must be an instance of THREE.DepthTexture");if(!o.get(me.depthTexture).__webglTexture||me.depthTexture.image.width!==me.width||me.depthTexture.image.height!==me.height)me.depthTexture.image.width=me.width,me.depthTexture.image.height=me.height,me.depthTexture.needsUpdate=!0;N(me.depthTexture,0);let Ce=o.get(me.depthTexture).__webglTexture,ve=Ae(me);if(me.depthTexture.format===1026)if(_e(me))a.framebufferTexture2DMultisampleEXT(e.FRAMEBUFFER,e.DEPTH_ATTACHMENT,e.TEXTURE_2D,Ce,0,ve);else e.framebufferTexture2D(e.FRAMEBUFFER,e.DEPTH_ATTACHMENT,e.TEXTURE_2D,Ce,0);else if(me.depthTexture.format===1027)if(_e(me))a.framebufferTexture2DMultisampleEXT(e.FRAMEBUFFER,e.DEPTH_STENCIL_ATTACHMENT,e.TEXTURE_2D,Ce,0,ve);else e.framebufferTexture2D(e.FRAMEBUFFER,e.DEPTH_STENCIL_ATTACHMENT,e.TEXTURE_2D,Ce,0);else throw Error("Unknown depthTexture format")}function ie(be){let me=o.get(be),ye=be.isWebGLCubeRenderTarget===!0;if(be.depthTexture&&!me.__autoAllocateDepthBuffer){if(ye)throw Error("target.depthTexture not supported in Cube render targets");oe(me.__webglFramebuffer,be)}else if(ye){me.__webglDepthbuffer=[];for(let Ce=0;Ce<6;Ce++)n.bindFramebuffer(e.FRAMEBUFFER,me.__webglFramebuffer[Ce]),me.__webglDepthbuffer[Ce]=e.createRenderbuffer(),ce(me.__webglDepthbuffer[Ce],be,!1)}else n.bindFramebuffer(e.FRAMEBUFFER,me.__webglFramebuffer),me.__webglDepthbuffer=e.createRenderbuffer(),ce(me.__webglDepthbuffer,be,!1);n.bindFramebuffer(e.FRAMEBUFFER,null)}function J(be,me,ye){let Ce=o.get(be);if(me!==void 0)ne(Ce.__webglFramebuffer,be,be.texture,e.COLOR_ATTACHMENT0,e.TEXTURE_2D,0);if(ye!==void 0)ie(be)}function ee(be){let me=be.texture,ye=o.get(be),Ce=o.get(me);be.addEventListener("dispose",I);let ve=be.textures,De=be.isWebGLCubeRenderTarget===!0,Ze=ve.length>1;if(!Ze){if(Ce.__webglTexture===void 0)Ce.__webglTexture=e.createTexture();Ce.__version=me.version,s.memory.textures++}if(De){ye.__webglFramebuffer=[];for(let st=0;st<6;st++)if(me.mipmaps&&me.mipmaps.length>0){ye.__webglFramebuffer[st]=[];for(let et=0;et<me.mipmaps.length;et++)ye.__webglFramebuffer[st][et]=e.createFramebuffer()}else ye.__webglFramebuffer[st]=e.createFramebuffer()}else{if(me.mipmaps&&me.mipmaps.length>0){ye.__webglFramebuffer=[];for(let st=0;st<me.mipmaps.length;st++)ye.__webglFramebuffer[st]=e.createFramebuffer()}else ye.__webglFramebuffer=e.createFramebuffer();if(Ze)for(let st=0,et=ve.length;st<et;st++){let lt=o.get(ve[st]);if(lt.__webglTexture===void 0)lt.__webglTexture=e.createTexture(),s.memory.textures++}if(be.samples>0&&_e(be)===!1){ye.__webglMultisampledFramebuffer=e.createFramebuffer(),ye.__webglColorRenderbuffer=[],n.bindFramebuffer(e.FRAMEBUFFER,ye.__webglMultisampledFramebuffer);for(let st=0;st<ve.length;st++){let et=ve[st];ye.__webglColorRenderbuffer[st]=e.createRenderbuffer(),e.bindRenderbuffer(e.RENDERBUFFER,ye.__webglColorRenderbuffer[st]);let lt=r.convert(et.format,et.colorSpace),it=r.convert(et.type),gt=f(et.internalFormat,lt,it,et.colorSpace,be.isXRRenderTarget===!0),wt=Ae(be);e.renderbufferStorageMultisample(e.RENDERBUFFER,wt,gt,be.width,be.height),e.framebufferRenderbuffer(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0+st,e.RENDERBUFFER,ye.__webglColorRenderbuffer[st])}if(e.bindRenderbuffer(e.RENDERBUFFER,null),be.depthBuffer)ye.__webglDepthRenderbuffer=e.createRenderbuffer(),ce(ye.__webglDepthRenderbuffer,be,!0);n.bindFramebuffer(e.FRAMEBUFFER,null)}}if(De){n.bindTexture(e.TEXTURE_CUBE_MAP,Ce.__webglTexture),V(e.TEXTURE_CUBE_MAP,me);for(let st=0;st<6;st++)if(me.mipmaps&&me.mipmaps.length>0)for(let et=0;et<me.mipmaps.length;et++)ne(ye.__webglFramebuffer[st][et],be,me,e.COLOR_ATTACHMENT0,e.TEXTURE_CUBE_MAP_POSITIVE_X+st,et);else ne(ye.__webglFramebuffer[st],be,me,e.COLOR_ATTACHMENT0,e.TEXTURE_CUBE_MAP_POSITIVE_X+st,0);if(g(me))_(e.TEXTURE_CUBE_MAP);n.unbindTexture()}else if(Ze){for(let st=0,et=ve.length;st<et;st++){let lt=ve[st],it=o.get(lt);if(n.bindTexture(e.TEXTURE_2D,it.__webglTexture),V(e.TEXTURE_2D,lt),ne(ye.__webglFramebuffer,be,lt,e.COLOR_ATTACHMENT0+st,e.TEXTURE_2D,0),g(lt))_(e.TEXTURE_2D)}n.unbindTexture()}else{let st=e.TEXTURE_2D;if(be.isWebGL3DRenderTarget||be.isWebGLArrayRenderTarget)st=be.isWebGL3DRenderTarget?e.TEXTURE_3D:e.TEXTURE_2D_ARRAY;if(n.bindTexture(st,Ce.__webglTexture),V(st,me),me.mipmaps&&me.mipmaps.length>0)for(let et=0;et<me.mipmaps.length;et++)ne(ye.__webglFramebuffer[et],be,me,e.COLOR_ATTACHMENT0,st,et);else ne(ye.__webglFramebuffer,be,me,e.COLOR_ATTACHMENT0,st,0);if(g(me))_(st);n.unbindTexture()}if(be.depthBuffer)ie(be)}function se(be){let me=be.textures;for(let ye=0,Ce=me.length;ye<Ce;ye++){let ve=me[ye];if(g(ve)){let De=be.isWebGLCubeRenderTarget?e.TEXTURE_CUBE_MAP:e.TEXTURE_2D,Ze=o.get(ve).__webglTexture;n.bindTexture(De,Ze),_(De),n.unbindTexture()}}}let le=[],he=[];function ue(be){if(be.samples>0){if(_e(be)===!1){let{textures:me,width:ye,height:Ce}=be,ve=e.COLOR_BUFFER_BIT,De=be.stencilBuffer?e.DEPTH_STENCIL_ATTACHMENT:e.DEPTH_ATTACHMENT,Ze=o.get(be),st=me.length>1;if(st)for(let et=0;et<me.length;et++)n.bindFramebuffer(e.FRAMEBUFFER,Ze.__webglMultisampledFramebuffer),e.framebufferRenderbuffer(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0+et,e.RENDERBUFFER,null),n.bindFramebuffer(e.FRAMEBUFFER,Ze.__webglFramebuffer),e.framebufferTexture2D(e.DRAW_FRAMEBUFFER,e.COLOR_ATTACHMENT0+et,e.TEXTURE_2D,null,0);n.bindFramebuffer(e.READ_FRAMEBUFFER,Ze.__webglMultisampledFramebuffer),n.bindFramebuffer(e.DRAW_FRAMEBUFFER,Ze.__webglFramebuffer);for(let et=0;et<me.length;et++){if(be.resolveDepthBuffer){if(be.depthBuffer)ve|=e.DEPTH_BUFFER_BIT;if(be.stencilBuffer&&be.resolveStencilBuffer)ve|=e.STENCIL_BUFFER_BIT}if(st){e.framebufferRenderbuffer(e.READ_FRAMEBUFFER,e.COLOR_ATTACHMENT0,e.RENDERBUFFER,Ze.__webglColorRenderbuffer[et]);let lt=o.get(me[et]).__webglTexture;e.framebufferTexture2D(e.DRAW_FRAMEBUFFER,e.COLOR_ATTACHMENT0,e.TEXTURE_2D,lt,0)}if(e.blitFramebuffer(0,0,ye,Ce,0,0,ye,Ce,ve,e.NEAREST),c===!0){if(le.length=0,he.length=0,le.push(e.COLOR_ATTACHMENT0+et),be.depthBuffer&&be.resolveDepthBuffer===!1)le.push(De),he.push(De),e.invalidateFramebuffer(e.DRAW_FRAMEBUFFER,he);e.invalidateFramebuffer(e.READ_FRAMEBUFFER,le)}}if(n.bindFramebuffer(e.READ_FRAMEBUFFER,null),n.bindFramebuffer(e.DRAW_FRAMEBUFFER,null),st)for(let et=0;et<me.length;et++){n.bindFramebuffer(e.FRAMEBUFFER,Ze.__webglMultisampledFramebuffer),e.framebufferRenderbuffer(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0+et,e.RENDERBUFFER,Ze.__webglColorRenderbuffer[et]);let lt=o.get(me[et]).__webglTexture;n.bindFramebuffer(e.FRAMEBUFFER,Ze.__webglFramebuffer),e.framebufferTexture2D(e.DRAW_FRAMEBUFFER,e.COLOR_ATTACHMENT0+et,e.TEXTURE_2D,lt,0)}n.bindFramebuffer(e.DRAW_FRAMEBUFFER,Ze.__webglMultisampledFramebuffer)}else if(be.depthBuffer&&be.resolveDepthBuffer===!1&&c){let me=be.stencilBuffer?e.DEPTH_STENCIL_ATTACHMENT:e.DEPTH_ATTACHMENT;e.invalidateFramebuffer(e.DRAW_FRAMEBUFFER,[me])}}}function Ae(be){return Math.min(i.maxSamples,be.samples)}function _e(be){let me=o.get(be);return be.samples>0&&t.has("WEBGL_multisampled_render_to_texture")===!0&&me.__useRenderToTexture!==!1}function Pe(be){let me=s.render.frame;if(d.get(be)!==me)d.set(be,me),be.update()}function Ee(be,me){let{colorSpace:ye,format:Ce,type:ve}=be;if(be.isCompressedTexture===!0||be.isVideoTexture===!0)return me;if(ye!=="srgb-linear"&&ye!=="")if(ed.getTransfer(ye)==="srgb"){if(Ce!==1023||ve!==1009)console.warn("THREE.WebGLTextures: sRGB encoded textures have to use RGBAFormat and UnsignedByteType.")}else console.error("THREE.WebGLTextures: Unsupported texture color space:",ye);return me}function Te(be){if(typeof HTMLImageElement<"u"&&be instanceof HTMLImageElement)l.width=be.naturalWidth||be.width,l.height=be.naturalHeight||be.height;else if(typeof VideoFrame<"u"&&be instanceof VideoFrame)l.width=be.displayWidth,l.height=be.displayHeight;else l.width=be.width,l.height=be.height;return l}this.allocateTextureUnit=T,this.resetTextureUnits=w,this.setTexture2D=N,this.setTexture2DArray=F,this.setTexture3D=H,this.setTextureCube=z,this.rebindTextures=J,this.setupRenderTarget=ee,this.updateRenderTargetMipmap=se,this.updateMultisampleRenderTarget=ue,this.setupDepthRenderbuffer=ie,this.setupFrameBufferTexture=ne,this.useMultisampledRTT=_e}function Hao(e,t){function n(o,i=""){let r,s=ed.getTransfer(i);if(o===1009)return e.UNSIGNED_BYTE;if(o===1017)return e.UNSIGNED_SHORT_4_4_4_4;if(o===1018)return e.UNSIGNED_SHORT_5_5_5_1;if(o===35902)return e.UNSIGNED_INT_5_9_9_9_REV;if(o===1010)return e.BYTE;if(o===1011)return e.SHORT;if(o===1012)return e.UNSIGNED_SHORT;if(o===1013)return e.INT;if(o===1014)return e.UNSIGNED_INT;if(o===1015)return e.FLOAT;if(o===1016)return e.HALF_FLOAT;if(o===1021)return e.ALPHA;if(o===1022)return e.RGB;if(o===1023)return e.RGBA;if(o===1024)return e.LUMINANCE;if(o===1025)return e.LUMINANCE_ALPHA;if(o===1026)return e.DEPTH_COMPONENT;if(o===1027)return e.DEPTH_STENCIL;if(o===1028)return e.RED;if(o===1029)return e.RED_INTEGER;if(o===1030)return e.RG;if(o===1031)return e.RG_INTEGER;if(o===1033)return e.RGBA_INTEGER;if(o===33776||o===33777||o===33778||o===33779)if(s==="srgb")if(r=t.get("WEBGL_compressed_texture_s3tc_srgb"),r!==null){if(o===33776)return r.COMPRESSED_SRGB_S3TC_DXT1_EXT;if(o===33777)return r.COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT;if(o===33778)return r.COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT;if(o===33779)return r.COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT}else return null;else if(r=t.get("WEBGL_compressed_texture_s3tc"),r!==null){if(o===33776)return r.COMPRESSED_RGB_S3TC_DXT1_EXT;if(o===33777)return r.COMPRESSED_RGBA_S3TC_DXT1_EXT;if(o===33778)return r.COMPRESSED_RGBA_S3TC_DXT3_EXT;if(o===33779)return r.COMPRESSED_RGBA_S3TC_DXT5_EXT}else return null;if(o===35840||o===35841||o===35842||o===35843)if(r=t.get("WEBGL_compressed_texture_pvrtc"),r!==null){if(o===35840)return r.COMPRESSED_RGB_PVRTC_4BPPV1_IMG;if(o===35841)return r.COMPRESSED_RGB_PVRTC_2BPPV1_IMG;if(o===35842)return r.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG;if(o===35843)return r.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG}else return null;if(o===36196||o===37492||o===37496)if(r=t.get("WEBGL_compressed_texture_etc"),r!==null){if(o===36196||o===37492)return s==="srgb"?r.COMPRESSED_SRGB8_ETC2:r.COMPRESSED_RGB8_ETC2;if(o===37496)return s==="srgb"?r.COMPRESSED_SRGB8_ALPHA8_ETC2_EAC:r.COMPRESSED_RGBA8_ETC2_EAC}else return null;if(o===37808||o===37809||o===37810||o===37811||o===37812||o===37813||o===37814||o===37815||o===37816||o===37817||o===37818||o===37819||o===37820||o===37821)if(r=t.get("WEBGL_compressed_texture_astc"),r!==null){if(o===37808)return s==="srgb"?r.COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR:r.COMPRESSED_RGBA_ASTC_4x4_KHR;if(o===37809)return s==="srgb"?r.COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR:r.COMPRESSED_RGBA_ASTC_5x4_KHR;if(o===37810)return s==="srgb"?r.COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR:r.COMPRESSED_RGBA_ASTC_5x5_KHR;if(o===37811)return s==="srgb"?r.COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR:r.COMPRESSED_RGBA_ASTC_6x5_KHR;if(o===37812)return s==="srgb"?r.COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR:r.COMPRESSED_RGBA_ASTC_6x6_KHR;if(o===37813)return s==="srgb"?r.COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR:r.COMPRESSED_RGBA_ASTC_8x5_KHR;if(o===37814)return s==="srgb"?r.COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR:r.COMPRESSED_RGBA_ASTC_8x6_KHR;if(o===37815)return s==="srgb"?r.COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR:r.COMPRESSED_RGBA_ASTC_8x8_KHR;if(o===37816)return s==="srgb"?r.COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR:r.COMPRESSED_RGBA_ASTC_10x5_KHR;if(o===37817)return s==="srgb"?r.COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR:r.COMPRESSED_RGBA_ASTC_10x6_KHR;if(o===37818)return s==="srgb"?r.COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR:r.COMPRESSED_RGBA_ASTC_10x8_KHR;if(o===37819)return s==="srgb"?r.COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR:r.COMPRESSED_RGBA_ASTC_10x10_KHR;if(o===37820)return s==="srgb"?r.COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR:r.COMPRESSED_RGBA_ASTC_12x10_KHR;if(o===37821)return s==="srgb"?r.COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR:r.COMPRESSED_RGBA_ASTC_12x12_KHR}else return null;if(o===36492||o===36494||o===36495)if(r=t.get("EXT_texture_compression_bptc"),r!==null){if(o===36492)return s==="srgb"?r.COMPRESSED_SRGB_ALPHA_BPTC_UNORM_EXT:r.COMPRESSED_RGBA_BPTC_UNORM_EXT;if(o===36494)return r.COMPRESSED_RGB_BPTC_SIGNED_FLOAT_EXT;if(o===36495)return r.COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_EXT}else return null;if(o===36283||o===36284||o===36285||o===36286)if(r=t.get("EXT_texture_compression_rgtc"),r!==null){if(o===36492)return r.COMPRESSED_RED_RGTC1_EXT;if(o===36284)return r.COMPRESSED_SIGNED_RED_RGTC1_EXT;if(o===36285)return r.COMPRESSED_RED_GREEN_RGTC2_EXT;if(o===36286)return r.COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT}else return null;if(o===1020)return e.UNSIGNED_INT_24_8;return e[o]!==void 0?e[o]:null}return{convert:n}}class u_t extends rl{constructor(e=[]){super();this.isArrayCamera=!0,this.cameras=e}}class za extends Nc{constructor(){super();this.isGroup=!0,this.type="Group"}}var Oao={type:"move"};class Jhe{constructor(){this._targetRay=null,this._grip=null,this._hand=null}getHandSpace(){if(this._hand===null)this._hand=new za,this._hand.matrixAutoUpdate=!1,this._hand.visible=!1,this._hand.joints={},this._hand.inputState={pinching:!1};return this._hand}getTargetRaySpace(){if(this._targetRay===null)this._targetRay=new za,this._targetRay.matrixAutoUpdate=!1,this._targetRay.visible=!1,this._targetRay.hasLinearVelocity=!1,this._targetRay.linearVelocity=new bt,this._targetRay.hasAngularVelocity=!1,this._targetRay.angularVelocity=new bt;return this._targetRay}getGripSpace(){if(this._grip===null)this._grip=new za,this._grip.matrixAutoUpdate=!1,this._grip.visible=!1,this._grip.hasLinearVelocity=!1,this._grip.linearVelocity=new bt,this._grip.hasAngularVelocity=!1,this._grip.angularVelocity=new bt;return this._grip}dispatchEvent(e){if(this._targetRay!==null)this._targetRay.dispatchEvent(e);if(this._grip!==null)this._grip.dispatchEvent(e);if(this._hand!==null)this._hand.dispatchEvent(e);return this}connect(e){if(e&&e.hand){let t=this._hand;if(t)for(let n of e.hand.values())this._getHandJoint(t,n)}return this.dispatchEvent({type:"connected",data:e}),this}disconnect(e){if(this.dispatchEvent({type:"disconnected",data:e}),this._targetRay!==null)this._targetRay.visible=!1;if(this._grip!==null)this._grip.visible=!1;if(this._hand!==null)this._hand.visible=!1;return this}update(e,t,n){let o=null,i=null,r=null,s=this._targetRay,a=this._grip,c=this._hand;if(e&&t.session.visibilityState!=="visible-blurred"){if(c&&e.hand){r=!0;for(let m of e.hand.values()){let p=t.getJointPose(m,n),g=this._getHandJoint(c,m);if(p!==null)g.matrix.fromArray(p.transform.matrix),g.matrix.decompose(g.position,g.rotation,g.scale),g.matrixWorldNeedsUpdate=!0,g.jointRadius=p.radius;g.visible=p!==null}let l=c.joints["index-finger-tip"],d=c.joints["thumb-tip"],u=l.position.distanceTo(d.position),h=0.02,A=0.005;if(c.inputState.pinching&&u>h+A)c.inputState.pinching=!1,this.dispatchEvent({type:"pinchend",handedness:e.handedness,target:this});else if(!c.inputState.pinching&&u<=h-A)c.inputState.pinching=!0,this.dispatchEvent({type:"pinchstart",handedness:e.handedness,target:this})}else if(a!==null&&e.gripSpace){if(i=t.getPose(e.gripSpace,n),i!==null){if(a.matrix.fromArray(i.transform.matrix),a.matrix.decompose(a.position,a.rotation,a.scale),a.matrixWorldNeedsUpdate=!0,i.linearVelocity)a.hasLinearVelocity=!0,a.linearVelocity.copy(i.linearVelocity);else a.hasLinearVelocity=!1;if(i.angularVelocity)a.hasAngularVelocity=!0,a.angularVelocity.copy(i.angularVelocity);else a.hasAngularVelocity=!1}}if(s!==null){if(o=t.getPose(e.targetRaySpace,n),o===null&&i!==null)o=i;if(o!==null){if(s.matrix.fromArray(o.transform.matrix),s.matrix.decompose(s.position,s.rotation,s.scale),s.matrixWorldNeedsUpdate=!0,o.linearVelocity)s.hasLinearVelocity=!0,s.linearVelocity.copy(o.linearVelocity);else s.hasLinearVelocity=!1;if(o.angularVelocity)s.hasAngularVelocity=!0,s.angularVelocity.copy(o.angularVelocity);else s.hasAngularVelocity=!1;this.dispatchEvent(Oao)}}}if(s!==null)s.visible=o!==null;if(a!==null)a.visible=i!==null;if(c!==null)c.visible=r!==null;return this}_getHandJoint(e,t){if(e.joints[t.jointName]===void 0){let n=new za;n.matrixAutoUpdate=!1,n.visible=!1,e.joints[t.jointName]=n,e.add(n)}return e.joints[t.jointName]}}var zao=`
void main() {
gl_Position = vec4( position, 1.0 );
}`,Gao=`
uniform sampler2DArray depthColor;
uniform float depthWidth;
uniform float depthHeight;
void main() {
vec2 coord = vec2( gl_FragCoord.x / depthWidth, gl_FragCoord.y / depthHeight );
if ( coord.x >= 1.0 ) {
gl_FragDepth = texture( depthColor, vec3( coord.x - 1.0, coord.y, 1 ) ).r;
} else {
gl_FragDepth = texture( depthColor, vec3( coord.x, coord.y, 0 ) ).r;
}
}`;class h_t{constructor(){this.texture=null,this.mesh=null,this.depthNear=0,this.depthFar=0}init(e,t,n){if(this.texture===null){let o=new sl,i=e.properties.get(o);if(i.__webglTexture=t.texture,t.depthNear!=n.depthNear||t.depthFar!=n.depthFar)this.depthNear=t.depthNear,this.depthFar=t.depthFar;this.texture=o}}getMesh(e){if(this.texture!==null){if(this.mesh===null){let t=e.cameras[0].viewport,n=new ix({vertexShader:zao,fragmentShader:Gao,uniforms:{depthColor:{value:this.texture},depthWidth:{value:t.z},depthHeight:{value:t.w}}});this.mesh=new Mo(new Mg(20,20),n)}}return this.mesh}reset(){this.texture=null,this.mesh=null}}class m_t extends WM{constructor(e,t){super();let n=this,o=null,i=1,r=null,s="local-floor",a=1,c=null,l=null,d=null,u=null,h=null,A=null,m=new h_t,p=t.getContextAttributes(),g=null,_=null,f=[],y=[],x=new ro,C=null,I=new rl;I.layers.enable(1),I.viewport=new Gl;let b=new rl;b.layers.enable(2),b.viewport=new Gl;let P=[I,b],E=new u_t;E.layers.enable(1),E.layers.enable(2);let B=null,w=null;this.cameraAutoUpdate=!0,this.enabled=!1,this.isPresenting=!1,this.getController=function(j){let q=f[j];if(q===void 0)q=new Jhe,f[j]=q;return q.getTargetRaySpace()},this.getControllerGrip=function(j){let q=f[j];if(q===void 0)q=new Jhe,f[j]=q;return q.getGripSpace()},this.getHand=function(j){let q=f[j];if(q===void 0)q=new Jhe,f[j]=q;return q.getHandSpace()};function T(j){let q=y.indexOf(j.inputSource);if(q===-1)return;let ne=f[q];if(ne!==void 0)ne.update(j.inputSource,j.frame,c||r),ne.dispatchEvent({type:j.type,data:j.inputSource})}function Q(){o.removeEventListener("select",T),o.removeEventListener("selectstart",T),o.removeEventListener("selectend",T),o.removeEventListener("squeeze",T),o.removeEventListener("squeezestart",T),o.removeEventListener("squeezeend",T),o.removeEventListener("end",Q),o.removeEventListener("inputsourceschange",N);for(let j=0;j<f.length;j++){let q=y[j];if(q===null)continue;y[j]=null,f[j].disconnect(q)}B=null,w=null,m.reset(),e.setRenderTarget(g),h=null,u=null,d=null,o=null,_=null,W.stop(),n.isPresenting=!1,e.setPixelRatio(C),e.setSize(x.width,x.height,!1),n.dispatchEvent({type:"sessionend"})}this.setFramebufferScaleFactor=function(j){if(i=j,n.isPresenting===!0)console.warn("THREE.WebXRManager: Cannot change framebuffer scale while presenting.")},this.setReferenceSpaceType=function(j){if(s=j,n.isPresenting===!0)console.warn("THREE.WebXRManager: Cannot change reference space type while presenting.")},this.getReferenceSpace=function(){return c||r},this.setReferenceSpace=function(j){c=j},this.getBaseLayer=function(){return u!==null?u:h},this.getBinding=function(){return d},this.getFrame=function(){return A},this.getSession=function(){return o},this.setSession=async function(j){if(o=j,o!==null){if(g=e.getRenderTarget(),o.addEventListener("select",T),o.addEventListener("selectstart",T),o.addEventListener("selectend",T),o.addEventListener("squeeze",T),o.addEventListener("squeezestart",T),o.addEventListener("squeezeend",T),o.addEventListener("end",Q),o.addEventListener("inputsourceschange",N),p.xrCompatible!==!0)await t.makeXRCompatible();if(C=e.getPixelRatio(),e.getSize(x),o.renderState.layers===void 0){let q={antialias:p.antialias,alpha:!0,depth:p.depth,stencil:p.stencil,framebufferScaleFactor:i};h=new XRWebGLLayer(o,t,q),o.updateRenderState({baseLayer:h}),e.setPixelRatio(1),e.setSize(h.framebufferWidth,h.framebufferHeight,!1),_=new N7(h.framebufferWidth,h.framebufferHeight,{format:1023,type:1009,colorSpace:e.outputColorSpace,stencilBuffer:p.stencil})}else{let q=null,ne=null,ce=null;if(p.depth)ce=p.stencil?t.DEPTH24_STENCIL8:t.DEPTH_COMPONENT24,q=p.stencil?1027:1026,ne=p.stencil?1020:1014;let oe={colorFormat:t.RGBA8,depthFormat:ce,scaleFactor:i};d=new XRWebGLBinding(o,t),u=d.createProjectionLayer(oe),o.updateRenderState({layers:[u]}),e.setPixelRatio(1),e.setSize(u.textureWidth,u.textureHeight,!1),_=new N7(u.textureWidth,u.textureHeight,{format:1023,type:1009,depthTexture:new G9e(u.textureWidth,u.textureHeight,ne,void 0,void 0,void 0,void 0,void 0,void 0,q),stencilBuffer:p.stencil,colorSpace:e.outputColorSpace,samples:p.antialias?4:0,resolveDepthBuffer:u.ignoreDepthValues===!1})}_.isXRRenderTarget=!0,this.setFoveation(a),c=null,r=await o.requestReferenceSpace(s),W.setContext(o),W.start(),n.isPresenting=!0,n.dispatchEvent({type:"sessionstart"})}},this.getEnvironmentBlendMode=function(){if(o!==null)return o.environmentBlendMode};function N(j){for(let q=0;q<j.removed.length;q++){let ne=j.removed[q],ce=y.indexOf(ne);if(ce>=0)y[ce]=null,f[ce].disconnect(ne)}for(let q=0;q<j.added.length;q++){let ne=j.added[q],ce=y.indexOf(ne);if(ce===-1){for(let ie=0;ie<f.length;ie++)if(ie>=y.length){y.push(ne),ce=ie;break}else if(y[ie]===null){y[ie]=ne,ce=ie;break}if(ce===-1)break}let oe=f[ce];if(oe)oe.connect(ne)}}let F=new bt,H=new bt;function z(j,q,ne){F.setFromMatrixPosition(q.matrixWorld),H.setFromMatrixPosition(ne.matrixWorld);let ce=F.distanceTo(H),oe=q.projectionMatrix.elements,ie=ne.projectionMatrix.elements,J=oe[14]/(oe[10]-1),ee=oe[14]/(oe[10]+1),se=(oe[9]+1)/oe[5],le=(oe[9]-1)/oe[5],he=(oe[8]-1)/oe[0],ue=(ie[8]+1)/ie[0],Ae=J*he,_e=J*ue,Pe=ce/(-he+ue),Ee=Pe*-he;q.matrixWorld.decompose(j.position,j.quaternion,j.scale),j.translateX(Ee),j.translateZ(Pe),j.matrixWorld.compose(j.position,j.quaternion,j.scale),j.matrixWorldInverse.copy(j.matrixWorld).invert();let Te=J+Pe,be=ee+Pe,me=Ae-Ee,ye=_e+(ce-Ee),Ce=se*ee/be*Te,ve=le*ee/be*Te;j.projectionMatrix.makePerspective(me,ye,Ce,ve,Te,be),j.projectionMatrixInverse.copy(j.projectionMatrix).invert()}function Y(j,q){if(q===null)j.matrixWorld.copy(j.matrix);else j.matrixWorld.multiplyMatrices(q.matrixWorld,j.matrix);j.matrixWorldInverse.copy(j.matrixWorld).invert()}this.updateCamera=function(j){if(o===null)return;if(m.texture!==null)j.near=m.depthNear,j.far=m.depthFar;if(E.near=b.near=I.near=j.near,E.far=b.far=I.far=j.far,B!==E.near||w!==E.far)o.updateRenderState({depthNear:E.near,depthFar:E.far}),B=E.near,w=E.far,I.near=B,I.far=w,b.near=B,b.far=w,I.updateProjectionMatrix(),b.updateProjectionMatrix(),j.updateProjectionMatrix();let q=j.parent,ne=E.cameras;Y(E,q);for(let ce=0;ce<ne.length;ce++)Y(ne[ce],q);if(ne.length===2)z(E,I,b);else E.projectionMatrix.copy(I.projectionMatrix);U(j,E,q)};function U(j,q,ne){if(ne===null)j.matrix.copy(q.matrixWorld);else j.matrix.copy(ne.matrixWorld),j.matrix.invert(),j.matrix.multiply(q.matrixWorld);if(j.matrix.decompose(j.position,j.quaternion,j.scale),j.updateMatrixWorld(!0),j.projectionMatrix.copy(q.projectionMatrix),j.projectionMatrixInverse.copy(q.projectionMatrixInverse),j.isPerspectiveCamera)j.fov=FG*2*Math.atan(1/j.projectionMatrix.elements[5]),j.zoom=1}this.getCamera=function(){return E},this.getFoveation=function(){if(u===null&&h===null)return;return a},this.setFoveation=function(j){if(a=j,u!==null)u.fixedFoveation=j;if(h!==null&&h.fixedFoveation!==void 0)h.fixedFoveation=j},this.hasDepthSensing=function(){return m.texture!==null},this.getDepthSensingMesh=function(){return m.getMesh(E)};let X=null;function V(j,q){if(l=q.getViewerPose(c||r),A=q,l!==null){let ne=l.views;if(h!==null)e.setRenderTargetFramebuffer(_,h.framebuffer),e.setRenderTarget(_);let ce=!1;if(ne.length!==E.cameras.length)E.cameras.length=0,ce=!0;for(let ie=0;ie<ne.length;ie++){let J=ne[ie],ee=null;if(h!==null)ee=h.getViewport(J);else{let le=d.getViewSubImage(u,J);if(ee=le.viewport,ie===0)e.setRenderTargetTextures(_,le.colorTexture,u.ignoreDepthValues?void 0:le.depthStencilTexture),e.setRenderTarget(_)}let se=P[ie];if(se===void 0)se=new rl,se.layers.enable(ie),se.viewport=new Gl,P[ie]=se;if(se.matrix.fromArray(J.transform.matrix),se.matrix.decompose(se.position,se.quaternion,se.scale),se.projectionMatrix.fromArray(J.projectionMatrix),se.projectionMatrixInverse.copy(se.projectionMatrix).invert(),se.viewport.set(ee.x,ee.y,ee.width,ee.height),ie===0)E.matrix.copy(se.matrix),E.matrix.decompose(E.position,E.quaternion,E.scale);if(ce===!0)E.cameras.push(se)}let oe=o.enabledFeatures;if(oe&&oe.includes("depth-sensing")){let ie=d.getDepthInformation(ne[0]);if(ie&&ie.isValid&&ie.texture)m.init(e,ie,o.renderState)}}for(let ne=0;ne<f.length;ne++){let ce=y[ne],oe=f[ne];if(ce!==null&&oe!==void 0)oe.update(ce,q,c||r)}if(X)X(j,q);if(q.detectedPlanes)n.dispatchEvent({type:"planesdetected",data:q});A=null}let W=new e_t;W.setAnimationLoop(V),this.setAnimationLoop=function(j){X=j},this.dispose=function(){}}}var uQ=new MA,Yao=new Pr;function Vao(e,t){function n(g,_){if(g.matrixAutoUpdate===!0)g.updateMatrix();_.value.copy(g.matrix)}function o(g,_){if(_.color.getRGB(g.fogColor.value,JAt(e)),_.isFog)g.fogNear.value=_.near,g.fogFar.value=_.far;else if(_.isFogExp2)g.fogDensity.value=_.density}function i(g,_,f,y,x){if(_.isMeshBasicMaterial)r(g,_);else if(_.isMeshLambertMaterial)r(g,_);else if(_.isMeshToonMaterial)r(g,_),u(g,_);else if(_.isMeshPhongMaterial)r(g,_),d(g,_);else if(_.isMeshStandardMaterial){if(r(g,_),h(g,_),_.isMeshPhysicalMaterial)A(g,_,x)}else if(_.isMeshMatcapMaterial)r(g,_),m(g,_);else if(_.isMeshDepthMaterial)r(g,_);else if(_.isMeshDistanceMaterial)r(g,_),p(g,_);else if(_.isMeshNormalMaterial)r(g,_);else if(_.isLineBasicMaterial){if(s(g,_),_.isLineDashedMaterial)a(g,_)}else if(_.isPointsMaterial)c(g,_,f,y);else if(_.isSpriteMaterial)l(g,_);else if(_.isShadowMaterial)g.color.value.copy(_.color),g.opacity.value=_.opacity;else if(_.isShaderMaterial)_.uniformsNeedUpdate=!1}function r(g,_){if(g.opacity.value=_.opacity,_.color)g.diffuse.value.copy(_.color);if(_.emissive)g.emissive.value.copy(_.emissive).multiplyScalar(_.emissiveIntensity);if(_.map)g.map.value=_.map,n(_.map,g.mapTransform);if(_.alphaMap)g.alphaMap.value=_.alphaMap,n(_.alphaMap,g.alphaMapTransform);if(_.bumpMap){if(g.bumpMap.value=_.bumpMap,n(_.bumpMap,g.bumpMapTransform),g.bumpScale.value=_.bumpScale,_.side===1)g.bumpScale.value*=-1}if(_.normalMap){if(g.normalMap.value=_.normalMap,n(_.normalMap,g.normalMapTransform),g.normalScale.value.copy(_.normalScale),_.side===1)g.normalScale.value.negate()}if(_.displacementMap)g.displacementMap.value=_.displacementMap,n(_.displacementMap,g.displacementMapTransform),g.displacementScale.value=_.displacementScale,g.displacementBias.value=_.displacementBias;if(_.emissiveMap)g.emissiveMap.value=_.emissiveMap,n(_.emissiveMap,g.emissiveMapTransform);if(_.specularMap)g.specularMap.value=_.specularMap,n(_.specularMap,g.specularMapTransform);if(_.alphaTest>0)g.alphaTest.value=_.alphaTest;let f=t.get(_),{envMap:y,envMapRotation:x}=f;if(y){if(g.envMap.value=y,uQ.copy(x),uQ.x*=-1,uQ.y*=-1,uQ.z*=-1,y.isCubeTexture&&y.isRenderTargetTexture===!1)uQ.y*=-1,uQ.z*=-1;g.envMapRotation.value.setFromMatrix4(Yao.makeRotationFromEuler(uQ)),g.flipEnvMap.value=y.isCubeTexture&&y.isRenderTargetTexture===!1?-1:1,g.reflectivity.value=_.reflectivity,g.ior.value=_.ior,g.refractionRatio.value=_.refractionRatio}if(_.lightMap)g.lightMap.value=_.lightMap,g.lightMapIntensity.value=_.lightMapIntensity,n(_.lightMap,g.lightMapTransform);if(_.aoMap)g.aoMap.value=_.aoMap,g.aoMapIntensity.value=_.aoMapIntensity,n(_.aoMap,g.aoMapTransform)}function s(g,_){if(g.diffuse.value.copy(_.color),g.opacity.value=_.opacity,_.map)g.map.value=_.map,n(_.map,g.mapTransform)}function a(g,_){g.dashSize.value=_.dashSize,g.totalSize.value=_.dashSize+_.gapSize,g.scale.value=_.scale}function c(g,_,f,y){if(g.diffuse.value.copy(_.color),g.opacity.value=_.opacity,g.size.value=_.size*f,g.scale.value=y*0.5,_.map)g.map.value=_.map,n(_.map,g.uvTransform);if(_.alphaMap)g.alphaMap.value=_.alphaMap,n(_.alphaMap,g.alphaMapTransform);if(_.alphaTest>0)g.alphaTest.value=_.alphaTest}function l(g,_){if(g.diffuse.value.copy(_.color),g.opacity.value=_.opacity,g.rotation.value=_.rotation,_.map)g.map.value=_.map,n(_.map,g.mapTransform);if(_.alphaMap)g.alphaMap.value=_.alphaMap,n(_.alphaMap,g.alphaMapTransform);if(_.alphaTest>0)g.alphaTest.value=_.alphaTest}function d(g,_){g.specular.value.copy(_.specular),g.shininess.value=Math.max(_.shininess,0.0001)}function u(g,_){if(_.gradientMap)g.gradientMap.value=_.gradientMap}function h(g,_){if(g.metalness.value=_.metalness,_.metalnessMap)g.metalnessMap.value=_.metalnessMap,n(_.metalnessMap,g.metalnessMapTransform);if(g.roughness.value=_.roughness,_.roughnessMap)g.roughnessMap.value=_.roughnessMap,n(_.roughnessMap,g.roughnessMapTransform);if(_.envMap)g.envMapIntensity.value=_.envMapIntensity}function A(g,_,f){if(g.ior.value=_.ior,_.sheen>0){if(g.sheenColor.value.copy(_.sheenColor).multiplyScalar(_.sheen),g.sheenRoughness.value=_.sheenRoughness,_.sheenColorMap)g.sheenColorMap.value=_.sheenColorMap,n(_.sheenColorMap,g.sheenColorMapTransform);if(_.sheenRoughnessMap)g.sheenRoughnessMap.value=_.sheenRoughnessMap,n(_.sheenRoughnessMap,g.sheenRoughnessMapTransform)}if(_.clearcoat>0){if(g.clearcoat.value=_.clearcoat,g.clearcoatRoughness.value=_.clearcoatRoughness,_.clearcoatMap)g.clearcoatMap.value=_.clearcoatMap,n(_.clearcoatMap,g.clearcoatMapTransform);if(_.clearcoatRoughnessMap)g.clearcoatRoughnessMap.value=_.clearcoatRoughnessMap,n(_.clearcoatRoughnessMap,g.clearcoatRoughnessMapTransform);if(_.clearcoatNormalMap){if(g.clearcoatNormalMap.value=_.clearcoatNormalMap,n(_.clearcoatNormalMap,g.clearcoatNormalMapTransform),g.clearcoatNormalScale.value.copy(_.clearcoatNormalScale),_.side===1)g.clearcoatNormalScale.value.negate()}}if(_.dispersion>0)g.dispersion.value=_.dispersion;if(_.iridescence>0){if(g.iridescence.value=_.iridescence,g.iridescenceIOR.value=_.iridescenceIOR,g.iridescenceThicknessMinimum.value=_.iridescenceThicknessRange[0],g.iridescenceThicknessMaximum.value=_.iridescenceThicknessRange[1],_.iridescenceMap)g.iridescenceMap.value=_.iridescenceMap,n(_.iridescenceMap,g.iridescenceMapTransform);if(_.iridescenceThicknessMap)g.iridescenceThicknessMap.value=_.iridescenceThicknessMap,n(_.iridescenceThicknessMap,g.iridescenceThicknessMapTransform)}if(_.transmission>0){if(g.transmission.value=_.transmission,g.transmissionSamplerMap.value=f.texture,g.transmissionSamplerSize.value.set(f.width,f.height),_.transmissionMap)g.transmissionMap.value=_.transmissionMap,n(_.transmissionMap,g.transmissionMapTransform);if(g.thickness.value=_.thickness,_.thicknessMap)g.thicknessMap.value=_.thicknessMap,n(_.thicknessMap,g.thicknessMapTransform);g.attenuationDistance.value=_.attenuationDistance,g.attenuationColor.value.copy(_.attenuationColor)}if(_.anisotropy>0){if(g.anisotropyVector.value.set(_.anisotropy*Math.cos(_.anisotropyRotation),_.anisotropy*Math.sin(_.anisotropyRotation)),_.anisotropyMap)g.anisotropyMap.value=_.anisotropyMap,n(_.anisotropyMap,g.anisotropyMapTransform)}if(g.specularIntensity.value=_.specularIntensity,g.specularColor.value.copy(_.specularColor),_.specularColorMap)g.specularColorMap.value=_.specularColorMap,n(_.specularColorMap,g.specularColorMapTransform);if(_.specularIntensityMap)g.specularIntensityMap.value=_.specularIntensityMap,n(_.specularIntensityMap,g.specularIntensityMapTransform)}function m(g,_){if(_.matcap)g.matcap.value=_.matcap}function p(g,_){let f=t.get(_).light;g.referencePosition.value.setFromMatrixPosition(f.matrixWorld),g.nearDistance.value=f.shadow.camera.near,g.farDistance.value=f.shadow.camera.far}return{refreshFogUniforms:o,refreshMaterialUniforms:i}}function Uao(e,t,n,o){let i={},r={},s=[],a=e.getParameter(e.MAX_UNIFORM_BUFFER_BINDINGS);function c(f,y){let x=y.program;o.uniformBlockBinding(f,x)}function l(f,y){let x=i[f.id];if(x===void 0)m(f),x=d(f),i[f.id]=x,f.addEventListener("dispose",g);let C=y.program;o.updateUBOMapping(f,C);let I=t.render.frame;if(r[f.id]!==I)h(f),r[f.id]=I}function d(f){let y=u();f.__bindingPointIndex=y;let x=e.createBuffer(),{__size:C,usage:I}=f;return e.bindBuffer(e.UNIFORM_BUFFER,x),e.bufferData(e.UNIFORM_BUFFER,C,I),e.bindBuffer(e.UNIFORM_BUFFER,null),e.bindBufferBase(e.UNIFORM_BUFFER,y,x),x}function u(){for(let f=0;f<a;f++)if(s.indexOf(f)===-1)return s.push(f),f;return console.error("THREE.WebGLRenderer: Maximum number of simultaneously usable uniforms groups reached."),0}function h(f){let y=i[f.id],{uniforms:x,__cache:C}=f;e.bindBuffer(e.UNIFORM_BUFFER,y);for(let I=0,b=x.length;I<b;I++){let P=Array.isArray(x[I])?x[I]:[x[I]];for(let E=0,B=P.length;E<B;E++){let w=P[E];if(A(w,I,E,C)===!0){let T=w.__offset,Q=Array.isArray(w.value)?w.value:[w.value],N=0;for(let F=0;F<Q.length;F++){let H=Q[F],z=p(H);if(typeof H==="number"||typeof H==="boolean")w.__data[0]=H,e.bufferSubData(e.UNIFORM_BUFFER,T+N,w.__data);else if(H.isMatrix3)w.__data[0]=H.elements[0],w.__data[1]=H.elements[1],w.__data[2]=H.elements[2],w.__data[3]=0,w.__data[4]=H.elements[3],w.__data[5]=H.elements[4],w.__data[6]=H.elements[5],w.__data[7]=0,w.__data[8]=H.elements[6],w.__data[9]=H.elements[7],w.__data[10]=H.elements[8],w.__data[11]=0;else H.toArray(w.__data,N),N+=z.storage/Float32Array.BYTES_PER_ELEMENT}e.bufferSubData(e.UNIFORM_BUFFER,T,w.__data)}}}e.bindBuffer(e.UNIFORM_BUFFER,null)}function A(f,y,x,C){let I=f.value,b=y+"_"+x;if(C[b]===void 0){if(typeof I==="number"||typeof I==="boolean")C[b]=I;else C[b]=I.clone();return!0}else{let P=C[b];if(typeof I==="number"||typeof I==="boolean"){if(P!==I)return C[b]=I,!0}else if(P.equals(I)===!1)return P.copy(I),!0}return!1}function m(f){let y=f.uniforms,x=0,C=16;for(let b=0,P=y.length;b<P;b++){let E=Array.isArray(y[b])?y[b]:[y[b]];for(let B=0,w=E.length;B<w;B++){let T=E[B],Q=Array.isArray(T.value)?T.value:[T.value];for(let N=0,F=Q.length;N<F;N++){let H=Q[N],z=p(H),Y=x%C;if(Y!==0&&C-Y<z.boundary)x+=C-Y;T.__data=new Float32Array(z.storage/Float32Array.BYTES_PER_ELEMENT),T.__offset=x,x+=z.storage}}}let I=x%C;if(I>0)x+=C-I;return f.__size=x,f.__cache={},this}function p(f){let y={boundary:0,storage:0};if(typeof f==="number"||typeof f==="boolean")y.boundary=4,y.storage=4;else if(f.isVector2)y.boundary=8,y.storage=8;else if(f.isVector3||f.isColor)y.boundary=16,y.storage=12;else if(f.isVector4)y.boundary=16,y.storage=16;else if(f.isMatrix3)y.boundary=48,y.storage=48;else if(f.isMatrix4)y.boundary=64,y.storage=64;else if(f.isTexture)console.warn("THREE.WebGLRenderer: Texture samplers can not be part of an uniforms group.");else console.warn("THREE.WebGLRenderer: Unsupported uniform value type.",f);return y}function g(f){let y=f.target;y.removeEventListener("dispose",g);let x=s.indexOf(y.__bindingPointIndex);s.splice(x,1),e.deleteBuffer(i[y.id]),delete i[y.id],delete r[y.id]}function _(){for(let f in i)e.deleteBuffer(i[f]);s=[],i={},r={}}return{bind:c,update:l,dispose:_}}class XM{constructor(e={}){let{canvas:t=eoo(),context:n=null,depth:o=!0,stencil:i=!1,alpha:r=!1,antialias:s=!1,premultipliedAlpha:a=!0,preserveDrawingBuffer:c=!1,powerPreference:l="default",failIfMajorPerformanceCaveat:d=!1}=e;this.isWebGLRenderer=!0;let u;if(n!==null){if(typeof WebGLRenderingContext<"u"&&n instanceof WebGLRenderingContext)throw Error("THREE.WebGLRenderer: WebGL 1 is not supported since r163.");u=n.getContextAttributes().alpha}else u=r;let h=new Uint32Array(4),A=new Int32Array(4),m=null,p=null,g=[],_=[];this.domElement=t,this.debug={checkShaderErrors:!0,onShaderError:null},this.autoClear=!0,this.autoClearColor=!0,this.autoClearDepth=!0,this.autoClearStencil=!0,this.sortObjects=!0,this.clippingPlanes=[],this.localClippingEnabled=!1,this._outputColorSpace="srgb",this.toneMapping=0,this.toneMappingExposure=1;let f=this,y=!1,x=0,C=0,I=null,b=-1,P=null,E=new Gl,B=new Gl,w=null,T=new Po(0),Q=0,{width:N,height:F}=t,H=1,z=null,Y=null,U=new Gl(0,0,N,F),X=new Gl(0,0,N,F),V=!1,W=new l0e,j=!1,q=!1,ne=new Pr,ce=new bt,oe={background:null,fog:null,environment:null,overrideMaterial:null,isScene:!0},ie=!1;function J(){return I===null?H:1}let ee=n;function se(At,_t){return t.getContext(At,_t)}try{let At={alpha:!0,depth:o,stencil:i,antialias:s,premultipliedAlpha:a,preserveDrawingBuffer:c,powerPreference:l,failIfMajorPerformanceCaveat:d};if("setAttribute"in t)t.setAttribute("data-engine","three.js r165");if(t.addEventListener("webglcontextlost",je,!1),t.addEventListener("webglcontextrestored",Re,!1),t.addEventListener("webglcontextcreationerror",Je,!1),ee===null){if(ee=se("webgl2",At),ee===null)if(se("webgl2"))throw Error("Error creating WebGL context with your selected attributes.");else throw Error("Error creating WebGL context.")}}catch(At){throw console.error("THREE.WebGLRenderer: "+At.message),At}let le,he,ue,Ae,_e,Pe,Ee,Te,be,me,ye,Ce,ve,De,Ze,st,et,lt,it,gt,wt,Dt,vt,Ht;function Xt(){le=new dso(ee),le.init(),Dt=new Hao(ee,le),he=new iso(ee,le,e,Dt),ue=new Lao(ee),Ae=new mso(ee),_e=new Pao,Pe=new Fao(ee,le,ue,_e,he,Dt,Ae),Ee=new sso(f),Te=new lso(f),be=new xoo(ee),vt=new nso(ee,be),me=new uso(ee,be,Ae,vt),ye=new Aso(ee,me,be,Ae),it=new pso(ee,he,Pe),st=new rso(_e),Ce=new Sao(f,Ee,Te,le,he,vt,st),ve=new Vao(f,_e),De=new Eao,Ze=new Nao(le),lt=new tso(f,Ee,Te,ue,ye,u,a),et=new kao(f,ye,he),Ht=new Uao(ee,Ae,he,ue),gt=new oso(ee,le,Ae),wt=new hso(ee,le,Ae),Ae.programs=Ce.programs,f.capabilities=he,f.extensions=le,f.properties=_e,f.renderLists=De,f.shadowMap=et,f.state=ue,f.info=Ae}Xt();let ut=new m_t(f,ee);this.xr=ut,this.getContext=function(){return ee},this.getContextAttributes=function(){return ee.getContextAttributes()},this.forceContextLoss=function(){let At=le.get("WEBGL_lose_context");if(At)At.loseContext()},this.forceContextRestore=function(){let At=le.get("WEBGL_lose_context");if(At)At.restoreContext()},this.getPixelRatio=function(){return H},this.setPixelRatio=function(At){if(At===void 0)return;H=At,this.setSize(N,F,!1)},this.getSize=function(At){return At.set(N,F)},this.setSize=function(At,_t,Tt=!0){if(ut.isPresenting){console.warn("THREE.WebGLRenderer: Can't change size while VR device is presenting.");return}if(N=At,F=_t,t.width=Math.floor(At*H),t.height=Math.floor(_t*H),Tt===!0)t.style.width=At+"px",t.style.height=_t+"px";this.setViewport(0,0,At,_t)},this.getDrawingBufferSize=function(At){return At.set(N*H,F*H).floor()},this.setDrawingBufferSize=function(At,_t,Tt){N=At,F=_t,H=Tt,t.width=Math.floor(At*Tt),t.height=Math.floor(_t*Tt),this.setViewport(0,0,At,_t)},this.getCurrentViewport=function(At){return At.copy(E)},this.getViewport=function(At){return At.copy(U)},this.setViewport=function(At,_t,Tt,Ut){if(At.isVector4)U.set(At.x,At.y,At.z,At.w);else U.set(At,_t,Tt,Ut);ue.viewport(E.copy(U).multiplyScalar(H).round())},this.getScissor=function(At){return At.copy(X)},this.setScissor=function(At,_t,Tt,Ut){if(At.isVector4)X.set(At.x,At.y,At.z,At.w);else X.set(At,_t,Tt,Ut);ue.scissor(B.copy(X).multiplyScalar(H).round())},this.getScissorTest=function(){return V},this.setScissorTest=function(At){ue.setScissorTest(V=At)},this.setOpaqueSort=function(At){z=At},this.setTransparentSort=function(At){Y=At},this.getClearColor=function(At){return At.copy(lt.getClearColor())},this.setClearColor=function(){lt.setClearColor.apply(lt,arguments)},this.getClearAlpha=function(){return lt.getClearAlpha()},this.setClearAlpha=function(){lt.setClearAlpha.apply(lt,arguments)},this.clear=function(At=!0,_t=!0,Tt=!0){let Ut=0;if(At){let Lt=!1;if(I!==null){let fn=I.texture.format;Lt=fn===1033||fn===1031||fn===1029}if(Lt){let fn=I.texture.type,On=fn===1009||fn===1014||fn===1012||fn===1020||fn===1017||fn===1018,Gn=lt.getClearColor(),fo=lt.getClearAlpha(),{r:Ho,g:Vn,b:Wn}=Gn;if(On)h[0]=Ho,h[1]=Vn,h[2]=Wn,h[3]=fo,ee.clearBufferuiv(ee.COLOR,0,h);else A[0]=Ho,A[1]=Vn,A[2]=Wn,A[3]=fo,ee.clearBufferiv(ee.COLOR,0,A)}else Ut|=ee.COLOR_BUFFER_BIT}if(_t)Ut|=ee.DEPTH_BUFFER_BIT;if(Tt)Ut|=ee.STENCIL_BUFFER_BIT,this.state.buffers.stencil.setMask(4294967295);ee.clear(Ut)},this.clearColor=function(){this.clear(!0,!1,!1)},this.clearDepth=function(){this.clear(!1,!0,!1)},this.clearStencil=function(){this.clear(!1,!1,!0)},this.dispose=function(){t.removeEventListener("webglcontextlost",je,!1),t.removeEventListener("webglcontextrestored",Re,!1),t.removeEventListener("webglcontextcreationerror",Je,!1),De.dispose(),Ze.dispose(),_e.dispose(),Ee.dispose(),Te.dispose(),ye.dispose(),vt.dispose(),Ht.dispose(),Ce.dispose(),ut.dispose(),ut.removeEventListener("sessionstart",rt),ut.removeEventListener("sessionend",Ct),Mt.stop()};function je(At){At.preventDefault(),console.log("THREE.WebGLRenderer: Context Lost."),y=!0}function Re(){console.log("THREE.WebGLRenderer: Context Restored."),y=!1;let At=Ae.autoReset,_t=et.enabled,Tt=et.autoUpdate,Ut=et.needsUpdate,Lt=et.type;Xt(),Ae.autoReset=At,et.enabled=_t,et.autoUpdate=Tt,et.needsUpdate=Ut,et.type=Lt}function Je(At){console.error("THREE.WebGLRenderer: A WebGL context could not be created. Reason: ",At.statusMessage)}function Ve(At){let _t=At.target;_t.removeEventListener("dispose",Ve),Ye(_t)}function Ye(At){mt(At),_e.remove(At)}function mt(At){let _t=_e.get(At).programs;if(_t!==void 0){if(_t.forEach(function(Tt){Ce.releaseProgram(Tt)}),At.isShaderMaterial)Ce.releaseShaderCache(At)}}this.renderBufferDirect=function(At,_t,Tt,Ut,Lt,fn){if(_t===null)_t=oe;let On=Lt.isMesh&&Lt.matrixWorld.determinant()<0,Gn=Kn(At,_t,Tt,Ut,Lt);ue.setMaterial(Ut,On);let fo=Tt.index,Ho=1;if(Ut.wireframe===!0){if(fo=me.getWireframeAttribute(Tt),fo===void 0)return;Ho=2}let Vn=Tt.drawRange,Wn=Tt.attributes.position,Co=Vn.start*Ho,Eo=(Vn.start+Vn.count)*Ho;if(fn!==null)Co=Math.max(Co,fn.start*Ho),Eo=Math.min(Eo,(fn.start+fn.count)*Ho);if(fo!==null)Co=Math.max(Co,0),Eo=Math.min(Eo,fo.count);else if(Wn!==void 0&&Wn!==null)Co=Math.max(Co,0),Eo=Math.min(Eo,Wn.count);let In=Eo-Co;if(In<0||In===1/0)return;vt.setup(Lt,Ut,Gn,Tt,fo);let eo,co=gt;if(fo!==null)eo=be.get(fo),co=wt,co.setIndex(eo);if(Lt.isMesh)if(Ut.wireframe===!0)ue.setLineWidth(Ut.wireframeLinewidth*J()),co.setMode(ee.LINES);else co.setMode(ee.TRIANGLES);else if(Lt.isLine){let $n=Ut.linewidth;if($n===void 0)$n=1;if(ue.setLineWidth($n*J()),Lt.isLineSegments)co.setMode(ee.LINES);else if(Lt.isLineLoop)co.setMode(ee.LINE_LOOP);else co.setMode(ee.LINE_STRIP)}else if(Lt.isPoints)co.setMode(ee.POINTS);else if(Lt.isSprite)co.setMode(ee.TRIANGLES);if(Lt.isBatchedMesh)if(Lt._multiDrawInstances!==null)co.renderMultiDrawInstances(Lt._multiDrawStarts,Lt._multiDrawCounts,Lt._multiDrawCount,Lt._multiDrawInstances);else co.renderMultiDraw(Lt._multiDrawStarts,Lt._multiDrawCounts,Lt._multiDrawCount);else if(Lt.isInstancedMesh)co.renderInstances(Co,In,Lt.count);else if(Tt.isInstancedBufferGeometry){let $n=Tt._maxInstanceCount!==void 0?Tt._maxInstanceCount:1/0,zo=Math.min(Tt.instanceCount,$n);co.renderInstances(Co,In,zo)}else co.render(Co,In)};function ft(At,_t,Tt){if(At.transparent===!0&&At.side===2&&At.forceSinglePass===!1)At.side=1,At.needsUpdate=!0,vn(At,_t,Tt),At.side=0,At.needsUpdate=!0,vn(At,_t,Tt),At.side=2;else vn(At,_t,Tt)}this.compile=function(At,_t,Tt=null){if(Tt===null)Tt=At;if(p=Ze.get(Tt),p.init(_t),_.push(p),Tt.traverseVisible(function(Lt){if(Lt.isLight&&Lt.layers.test(_t.layers)){if(p.pushLight(Lt),Lt.castShadow)p.pushShadow(Lt)}}),At!==Tt)At.traverseVisible(function(Lt){if(Lt.isLight&&Lt.layers.test(_t.layers)){if(p.pushLight(Lt),Lt.castShadow)p.pushShadow(Lt)}});p.setupLights();let Ut=new Set;return At.traverse(function(Lt){let fn=Lt.material;if(fn)if(Array.isArray(fn))for(let On=0;On<fn.length;On++){let Gn=fn[On];ft(Gn,Tt,Lt),Ut.add(Gn)}else ft(fn,Tt,Lt),Ut.add(fn)}),_.pop(),p=null,Ut},this.compileAsync=function(At,_t,Tt=null){let Ut=this.compile(At,_t,Tt);return new Promise((Lt)=>{function fn(){if(Ut.forEach(function(On){if(_e.get(On).currentProgram.isReady())Ut.delete(On)}),Ut.size===0){Lt(At);return}setTimeout(fn,10)}if(le.get("KHR_parallel_shader_compile")!==null)fn();else setTimeout(fn,10)})};let Oe=null;function qe(At){if(Oe)Oe(At)}function rt(){Mt.stop()}function Ct(){Mt.start()}let Mt=new e_t;if(Mt.setAnimationLoop(qe),typeof self<"u")Mt.setContext(self);this.setAnimationLoop=function(At){Oe=At,ut.setAnimationLoop(At),At===null?Mt.stop():Mt.start()},ut.addEventListener("sessionstart",rt),ut.addEventListener("sessionend",Ct),this.render=function(At,_t){if(_t!==void 0&&_t.isCamera!==!0){console.error("THREE.WebGLRenderer.render: camera is not an instance of THREE.Camera.");return}if(y===!0)return;if(At.matrixWorldAutoUpdate===!0)At.updateMatrixWorld();if(_t.parent===null&&_t.matrixWorldAutoUpdate===!0)_t.updateMatrixWorld();if(ut.enabled===!0&&ut.isPresenting===!0){if(ut.cameraAutoUpdate===!0)ut.updateCamera(_t);_t=ut.getCamera()}if(At.isScene===!0)At.onBeforeRender(f,At,_t,I);if(p=Ze.get(At,_.length),p.init(_t),_.push(p),ne.multiplyMatrices(_t.projectionMatrix,_t.matrixWorldInverse),W.setFromProjectionMatrix(ne),q=this.localClippingEnabled,j=st.init(this.clippingPlanes,q),m=De.get(At,g.length),m.init(),g.push(m),ut.enabled===!0&&ut.isPresenting===!0){let fn=f.xr.getDepthSensingMesh();if(fn!==null)Nt(fn,_t,-1/0,f.sortObjects)}if(Nt(At,_t,0,f.sortObjects),m.finish(),f.sortObjects===!0)m.sort(z,Y);if(ie=ut.enabled===!1||ut.isPresenting===!1||ut.hasDepthSensing()===!1,ie)lt.addToRenderList(m,At);if(this.info.render.frame++,j===!0)st.beginShadows();let Tt=p.state.shadowsArray;if(et.render(Tt,At,_t),j===!0)st.endShadows();if(this.info.autoReset===!0)this.info.reset();let Ut=m.opaque,Lt=m.transmissive;if(p.setupLights(),_t.isArrayCamera){let fn=_t.cameras;if(Lt.length>0)for(let On=0,Gn=fn.length;On<Gn;On++){let fo=fn[On];mn(Ut,Lt,At,fo)}if(ie)lt.render(At);for(let On=0,Gn=fn.length;On<Gn;On++){let fo=fn[On];Ot(m,At,fo,fo.viewport)}}else{if(Lt.length>0)mn(Ut,Lt,At,_t);if(ie)lt.render(At);Ot(m,At,_t)}if(I!==null)Pe.updateMultisampleRenderTarget(I),Pe.updateRenderTargetMipmap(I);if(At.isScene===!0)At.onAfterRender(f,At,_t);if(vt.resetDefaultState(),b=-1,P=null,_.pop(),_.length>0){if(p=_[_.length-1],j===!0)st.setGlobalState(f.clippingPlanes,p.state.camera)}else p=null;if(g.pop(),g.length>0)m=g[g.length-1];else m=null};function Nt(At,_t,Tt,Ut){if(At.visible===!1)return;if(At.layers.test(_t.layers)){if(At.isGroup)Tt=At.renderOrder;else if(At.isLOD){if(At.autoUpdate===!0)At.update(_t)}else if(At.isLight){if(p.pushLight(At),At.castShadow)p.pushShadow(At)}else if(At.isSprite){if(!At.frustumCulled||W.intersectsSprite(At)){if(Ut)ce.setFromMatrixPosition(At.matrixWorld).applyMatrix4(ne);let On=ye.update(At),Gn=At.material;if(Gn.visible)m.push(At,On,Gn,Tt,ce.z,null)}}else if(At.isMesh||At.isLine||At.isPoints){if(!At.frustumCulled||W.intersectsObject(At)){let On=ye.update(At),Gn=At.material;if(Ut){if(At.boundingSphere!==void 0){if(At.boundingSphere===null)At.computeBoundingSphere();ce.copy(At.boundingSphere.center)}else{if(On.boundingSphere===null)On.computeBoundingSphere();ce.copy(On.boundingSphere.center)}ce.applyMatrix4(At.matrixWorld).applyMatrix4(ne)}if(Array.isArray(Gn)){let fo=On.groups;for(let Ho=0,Vn=fo.length;Ho<Vn;Ho++){let Wn=fo[Ho],Co=Gn[Wn.materialIndex];if(Co&&Co.visible)m.push(At,On,Co,Tt,ce.z,Wn)}}else if(Gn.visible)m.push(At,On,Gn,Tt,ce.z,null)}}}let fn=At.children;for(let On=0,Gn=fn.length;On<Gn;On++)Nt(fn[On],_t,Tt,Ut)}function Ot(At,_t,Tt,Ut){let{opaque:Lt,transmissive:fn,transparent:On}=At;if(p.setupLightsView(Tt),j===!0)st.setGlobalState(f.clippingPlanes,Tt);if(Ut)ue.viewport(E.copy(Ut));if(Lt.length>0)ln(Lt,_t,Tt);if(fn.length>0)ln(fn,_t,Tt);if(On.length>0)ln(On,_t,Tt);ue.buffers.depth.setTest(!0),ue.buffers.depth.setMask(!0),ue.buffers.color.setMask(!0),ue.setPolygonOffset(!1)}function mn(At,_t,Tt,Ut){if((Tt.isScene===!0?Tt.overrideMaterial:null)!==null)return;if(p.state.transmissionRenderTarget[Ut.id]===void 0)p.state.transmissionRenderTarget[Ut.id]=new N7(1,1,{generateMipmaps:!0,type:le.has("EXT_color_buffer_half_float")||le.has("EXT_color_buffer_float")?1016:1009,minFilter:1008,samples:4,stencilBuffer:i,resolveDepthBuffer:!1,resolveStencilBuffer:!1,colorSpace:ed.workingColorSpace});let fn=p.state.transmissionRenderTarget[Ut.id],On=Ut.viewport||E;fn.setSize(On.z,On.w);let Gn=f.getRenderTarget();if(f.setRenderTarget(fn),f.getClearColor(T),Q=f.getClearAlpha(),Q<1)f.setClearColor(16777215,0.5);if(ie)lt.render(Tt);else f.clear();let fo=f.toneMapping;f.toneMapping=0;let Ho=Ut.viewport;if(Ut.viewport!==void 0)Ut.viewport=void 0;if(p.setupLightsView(Ut),j===!0)st.setGlobalState(f.clippingPlanes,Ut);if(ln(At,Tt,Ut),Pe.updateMultisampleRenderTarget(fn),Pe.updateRenderTargetMipmap(fn),le.has("WEBGL_multisampled_render_to_texture")===!1){let Vn=!1;for(let Wn=0,Co=_t.length;Wn<Co;Wn++){let Eo=_t[Wn],{object:In,geometry:eo,material:co,group:$n}=Eo;if(co.side===2&&In.layers.test(Ut.layers)){let zo=co.side;co.side=1,co.needsUpdate=!0,Cn(In,Tt,Ut,eo,co,$n),co.side=zo,co.needsUpdate=!0,Vn=!0}}if(Vn===!0)Pe.updateMultisampleRenderTarget(fn),Pe.updateRenderTargetMipmap(fn)}if(f.setRenderTarget(Gn),f.setClearColor(T,Q),Ho!==void 0)Ut.viewport=Ho;f.toneMapping=fo}function ln(At,_t,Tt){let Ut=_t.isScene===!0?_t.overrideMaterial:null;for(let Lt=0,fn=At.length;Lt<fn;Lt++){let On=At[Lt],{object:Gn,geometry:fo}=On,Ho=Ut===null?On.material:Ut,Vn=On.group;if(Gn.layers.test(Tt.layers))Cn(Gn,_t,Tt,fo,Ho,Vn)}}function Cn(At,_t,Tt,Ut,Lt,fn){if(At.onBeforeRender(f,_t,Tt,Ut,Lt,fn),At.modelViewMatrix.multiplyMatrices(Tt.matrixWorldInverse,At.matrixWorld),At.normalMatrix.getNormalMatrix(At.modelViewMatrix),Lt.onBeforeRender(f,_t,Tt,Ut,At,fn),Lt.transparent===!0&&Lt.side===2&&Lt.forceSinglePass===!1)Lt.side=1,Lt.needsUpdate=!0,f.renderBufferDirect(Tt,_t,Ut,Lt,At,fn),Lt.side=0,Lt.needsUpdate=!0,f.renderBufferDirect(Tt,_t,Ut,Lt,At,fn),Lt.side=2;else f.renderBufferDirect(Tt,_t,Ut,Lt,At,fn);At.onAfterRender(f,_t,Tt,Ut,Lt,fn)}function vn(At,_t,Tt){if(_t.isScene!==!0)_t=oe;let Ut=_e.get(At),Lt=p.state.lights,fn=p.state.shadowsArray,On=Lt.state.version,Gn=Ce.getParameters(At,Lt.state,fn,_t,Tt),fo=Ce.getProgramCacheKey(Gn),Ho=Ut.programs;if(Ut.environment=At.isMeshStandardMaterial?_t.environment:null,Ut.fog=_t.fog,Ut.envMap=(At.isMeshStandardMaterial?Te:Ee).get(At.envMap||Ut.environment),Ut.envMapRotation=Ut.environment!==null&&At.envMap===null?_t.environmentRotation:At.envMapRotation,Ho===void 0)At.addEventListener("dispose",Ve),Ho=new Map,Ut.programs=Ho;let Vn=Ho.get(fo);if(Vn!==void 0){if(Ut.currentProgram===Vn&&Ut.lightsStateVersion===On)return on(At,Gn),Vn}else Gn.uniforms=Ce.getUniforms(At),At.onBuild(Tt,Gn,f),At.onBeforeCompile(Gn,f),Vn=Ce.acquireProgram(Gn,fo),Ho.set(fo,Vn),Ut.uniforms=Gn.uniforms;let Wn=Ut.uniforms;if(!At.isShaderMaterial&&!At.isRawShaderMaterial||At.clipping===!0)Wn.clippingPlanes=st.uniform;if(on(At,Gn),Ut.needsLights=ai(At),Ut.lightsStateVersion=On,Ut.needsLights)Wn.ambientLightColor.value=Lt.state.ambient,Wn.lightProbe.value=Lt.state.probe,Wn.directionalLights.value=Lt.state.directional,Wn.directionalLightShadows.value=Lt.state.directionalShadow,Wn.spotLights.value=Lt.state.spot,Wn.spotLightShadows.value=Lt.state.spotShadow,Wn.rectAreaLights.value=Lt.state.rectArea,Wn.ltc_1.value=Lt.state.rectAreaLTC1,Wn.ltc_2.value=Lt.state.rectAreaLTC2,Wn.pointLights.value=Lt.state.point,Wn.pointLightShadows.value=Lt.state.pointShadow,Wn.hemisphereLights.value=Lt.state.hemi,Wn.directionalShadowMap.value=Lt.state.directionalShadowMap,Wn.directionalShadowMatrix.value=Lt.state.directionalShadowMatrix,Wn.spotShadowMap.value=Lt.state.spotShadowMap,Wn.spotLightMatrix.value=Lt.state.spotLightMatrix,Wn.spotLightMap.value=Lt.state.spotLightMap,Wn.pointShadowMap.value=Lt.state.pointShadowMap,Wn.pointShadowMatrix.value=Lt.state.pointShadowMatrix;return Ut.currentProgram=Vn,Ut.uniformsList=null,Vn}function nn(At){if(At.uniformsList===null){let _t=At.currentProgram.getUniforms();At.uniformsList=VJ.seqWithValue(_t.seq,At.uniforms)}return At.uniformsList}function on(At,_t){let Tt=_e.get(At);Tt.outputColorSpace=_t.outputColorSpace,Tt.batching=_t.batching,Tt.batchingColor=_t.batchingColor,Tt.instancing=_t.instancing,Tt.instancingColor=_t.instancingColor,Tt.instancingMorph=_t.instancingMorph,Tt.skinning=_t.skinning,Tt.morphTargets=_t.morphTargets,Tt.morphNormals=_t.morphNormals,Tt.morphColors=_t.morphColors,Tt.morphTargetsCount=_t.morphTargetsCount,Tt.numClippingPlanes=_t.numClippingPlanes,Tt.numIntersection=_t.numClipIntersection,Tt.vertexAlphas=_t.vertexAlphas,Tt.vertexTangents=_t.vertexTangents,Tt.toneMapping=_t.toneMapping}function Kn(At,_t,Tt,Ut,Lt){if(_t.isScene!==!0)_t=oe;Pe.resetTextureUnits();let fn=_t.fog,On=Ut.isMeshStandardMaterial?_t.environment:null,Gn=I===null?f.outputColorSpace:I.isXRRenderTarget===!0?I.texture.colorSpace:"srgb-linear",fo=(Ut.isMeshStandardMaterial?Te:Ee).get(Ut.envMap||On),Ho=Ut.vertexColors===!0&&!!Tt.attributes.color&&Tt.attributes.color.itemSize===4,Vn=!!Tt.attributes.tangent&&(!!Ut.normalMap||Ut.anisotropy>0),Wn=!!Tt.morphAttributes.position,Co=!!Tt.morphAttributes.normal,Eo=!!Tt.morphAttributes.color,In=0;if(Ut.toneMapped){if(I===null||I.isXRRenderTarget===!0)In=f.toneMapping}let eo=Tt.morphAttributes.position||Tt.morphAttributes.normal||Tt.morphAttributes.color,co=eo!==void 0?eo.length:0,$n=_e.get(Ut),zo=p.state.lights;if(j===!0){if(q===!0||At!==P){let Yr=At===P&&Ut.id===b;st.setState(Ut,At,Yr)}}let qo=!1;if(Ut.version===$n.__version){if($n.needsLights&&$n.lightsStateVersion!==zo.state.version)qo=!0;else if($n.outputColorSpace!==Gn)qo=!0;else if(Lt.isBatchedMesh&&$n.batching===!1)qo=!0;else if(!Lt.isBatchedMesh&&$n.batching===!0)qo=!0;else if(Lt.isBatchedMesh&&$n.batchingColor===!0&&Lt.colorTexture===null)qo=!0;else if(Lt.isBatchedMesh&&$n.batchingColor===!1&&Lt.colorTexture!==null)qo=!0;else if(Lt.isInstancedMesh&&$n.instancing===!1)qo=!0;else if(!Lt.isInstancedMesh&&$n.instancing===!0)qo=!0;else if(Lt.isSkinnedMesh&&$n.skinning===!1)qo=!0;else if(!Lt.isSkinnedMesh&&$n.skinning===!0)qo=!0;else if(Lt.isInstancedMesh&&$n.instancingColor===!0&&Lt.instanceColor===null)qo=!0;else if(Lt.isInstancedMesh&&$n.instancingColor===!1&&Lt.instanceColor!==null)qo=!0;else if(Lt.isInstancedMesh&&$n.instancingMorph===!0&&Lt.morphTexture===null)qo=!0;else if(Lt.isInstancedMesh&&$n.instancingMorph===!1&&Lt.morphTexture!==null)qo=!0;else if($n.envMap!==fo)qo=!0;else if(Ut.fog===!0&&$n.fog!==fn)qo=!0;else if($n.numClippingPlanes!==void 0&&($n.numClippingPlanes!==st.numPlanes||$n.numIntersection!==st.numIntersection))qo=!0;else if($n.vertexAlphas!==Ho)qo=!0;else if($n.vertexTangents!==Vn)qo=!0;else if($n.morphTargets!==Wn)qo=!0;else if($n.morphNormals!==Co)qo=!0;else if($n.morphColors!==Eo)qo=!0;else if($n.toneMapping!==In)qo=!0;else if($n.morphTargetsCount!==co)qo=!0}else qo=!0,$n.__version=Ut.version;let fi=$n.currentProgram;if(qo===!0)fi=vn(Ut,_t,Lt);let Nr=!1,bs=!1,Fs=!1,wo=fi.getUniforms(),wr=$n.uniforms;if(ue.useProgram(fi.program))Nr=!0,bs=!0,Fs=!0;if(Ut.id!==b)b=Ut.id,bs=!0;if(Nr||P!==At){wo.setValue(ee,"projectionMatrix",At.projectionMatrix),wo.setValue(ee,"viewMatrix",At.matrixWorldInverse);let Yr=wo.map.cameraPosition;if(Yr!==void 0)Yr.setValue(ee,ce.setFromMatrixPosition(At.matrixWorld));if(he.logarithmicDepthBuffer)wo.setValue(ee,"logDepthBufFC",2/(Math.log(At.far+1)/Math.LN2));if(Ut.isMeshPhongMaterial||Ut.isMeshToonMaterial||Ut.isMeshLambertMaterial||Ut.isMeshBasicMaterial||Ut.isMeshStandardMaterial||Ut.isShaderMaterial)wo.setValue(ee,"isOrthographic",At.isOrthographicCamera===!0);if(P!==At)P=At,bs=!0,Fs=!0}if(Lt.isSkinnedMesh){wo.setOptional(ee,Lt,"bindMatrix"),wo.setOptional(ee,Lt,"bindMatrixInverse");let Yr=Lt.skeleton;if(Yr){if(Yr.boneTexture===null)Yr.computeBoneTexture();wo.setValue(ee,"boneTexture",Yr.boneTexture,Pe)}}if(Lt.isBatchedMesh){if(wo.setOptional(ee,Lt,"batchingTexture"),wo.setValue(ee,"batchingTexture",Lt._matricesTexture,Pe),wo.setOptional(ee,Lt,"batchingColorTexture"),Lt._colorsTexture!==null)wo.setValue(ee,"batchingColorTexture",Lt._colorsTexture,Pe)}let dr=Tt.morphAttributes;if(dr.position!==void 0||dr.normal!==void 0||dr.color!==void 0)it.update(Lt,Tt,fi);if(bs||$n.receiveShadow!==Lt.receiveShadow)$n.receiveShadow=Lt.receiveShadow,wo.setValue(ee,"receiveShadow",Lt.receiveShadow);if(Ut.isMeshGouraudMaterial&&Ut.envMap!==null)wr.envMap.value=fo,wr.flipEnvMap.value=fo.isCubeTexture&&fo.isRenderTargetTexture===!1?-1:1;if(Ut.isMeshStandardMaterial&&Ut.envMap===null&&_t.environment!==null)wr.envMapIntensity.value=_t.environmentIntensity;if(bs){if(wo.setValue(ee,"toneMappingExposure",f.toneMappingExposure),$n.needsLights)xo(wr,Fs);if(fn&&Ut.fog===!0)ve.refreshFogUniforms(wr,fn);ve.refreshMaterialUniforms(wr,Ut,H,F,p.state.transmissionRenderTarget[At.id]),VJ.upload(ee,nn($n),wr,Pe)}if(Ut.isShaderMaterial&&Ut.uniformsNeedUpdate===!0)VJ.upload(ee,nn($n),wr,Pe),Ut.uniformsNeedUpdate=!1;if(Ut.isSpriteMaterial)wo.setValue(ee,"center",Lt.center);if(wo.setValue(ee,"modelViewMatrix",Lt.modelViewMatrix),wo.setValue(ee,"normalMatrix",Lt.normalMatrix),wo.setValue(ee,"modelMatrix",Lt.matrixWorld),Ut.isShaderMaterial||Ut.isRawShaderMaterial){let Yr=Ut.uniformsGroups;for(let mc=0,zc=Yr.length;mc<zc;mc++){let nc=Yr[mc];Ht.update(nc,fi),Ht.bind(nc,fi)}}return fi}function xo(At,_t){At.ambientLightColor.needsUpdate=_t,At.lightProbe.needsUpdate=_t,At.directionalLights.needsUpdate=_t,At.directionalLightShadows.needsUpdate=_t,At.pointLights.needsUpdate=_t,At.pointLightShadows.needsUpdate=_t,At.spotLights.needsUpdate=_t,At.spotLightShadows.needsUpdate=_t,At.rectAreaLights.needsUpdate=_t,At.hemisphereLights.needsUpdate=_t}function ai(At){return At.isMeshLambertMaterial||At.isMeshToonMaterial||At.isMeshPhongMaterial||At.isMeshStandardMaterial||At.isShadowMaterial||At.isShaderMaterial&&At.lights===!0}if(this.getActiveCubeFace=function(){return x},this.getActiveMipmapLevel=function(){return C},this.getRenderTarget=function(){return I},this.setRenderTargetTextures=function(At,_t,Tt){_e.get(At.texture).__webglTexture=_t,_e.get(At.depthTexture).__webglTexture=Tt;let Ut=_e.get(At);if(Ut.__hasExternalTextures=!0,Ut.__autoAllocateDepthBuffer=Tt===void 0,!Ut.__autoAllocateDepthBuffer){if(le.has("WEBGL_multisampled_render_to_texture")===!0)console.warn("THREE.WebGLRenderer: Render-to-texture extension was disabled because an external texture was provided"),Ut.__useRenderToTexture=!1}},this.setRenderTargetFramebuffer=function(At,_t){let Tt=_e.get(At);Tt.__webglFramebuffer=_t,Tt.__useDefaultFramebuffer=_t===void 0},this.setRenderTarget=function(At,_t=0,Tt=0){I=At,x=_t,C=Tt;let Ut=!0,Lt=null,fn=!1,On=!1;if(At){let fo=_e.get(At);if(fo.__useDefaultFramebuffer!==void 0)ue.bindFramebuffer(ee.FRAMEBUFFER,null),Ut=!1;else if(fo.__webglFramebuffer===void 0)Pe.setupRenderTarget(At);else if(fo.__hasExternalTextures)Pe.rebindTextures(At,_e.get(At.texture).__webglTexture,_e.get(At.depthTexture).__webglTexture);let Ho=At.texture;if(Ho.isData3DTexture||Ho.isDataArrayTexture||Ho.isCompressedArrayTexture)On=!0;let Vn=_e.get(At).__webglFramebuffer;if(At.isWebGLCubeRenderTarget){if(Array.isArray(Vn[_t]))Lt=Vn[_t][Tt];else Lt=Vn[_t];fn=!0}else if(At.samples>0&&Pe.useMultisampledRTT(At)===!1)Lt=_e.get(At).__webglMultisampledFramebuffer;else if(Array.isArray(Vn))Lt=Vn[Tt];else Lt=Vn;E.copy(At.viewport),B.copy(At.scissor),w=At.scissorTest}else E.copy(U).multiplyScalar(H).floor(),B.copy(X).multiplyScalar(H).floor(),w=V;if(ue.bindFramebuffer(ee.FRAMEBUFFER,Lt)&&Ut)ue.drawBuffers(At,Lt);if(ue.viewport(E),ue.scissor(B),ue.setScissorTest(w),fn){let fo=_e.get(At.texture);ee.framebufferTexture2D(ee.FRAMEBUFFER,ee.COLOR_ATTACHMENT0,ee.TEXTURE_CUBE_MAP_POSITIVE_X+_t,fo.__webglTexture,Tt)}else if(On){let fo=_e.get(At.texture),Ho=_t||0;ee.framebufferTextureLayer(ee.FRAMEBUFFER,ee.COLOR_ATTACHMENT0,fo.__webglTexture,Tt||0,Ho)}b=-1},this.readRenderTargetPixels=function(At,_t,Tt,Ut,Lt,fn,On){if(!(At&&At.isWebGLRenderTarget)){console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.");return}let Gn=_e.get(At).__webglFramebuffer;if(At.isWebGLCubeRenderTarget&&On!==void 0)Gn=Gn[On];if(Gn){ue.bindFramebuffer(ee.FRAMEBUFFER,Gn);try{let fo=At.texture,{format:Ho,type:Vn}=fo;if(!he.textureFormatReadable(Ho)){console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format.");return}if(!he.textureTypeReadable(Vn)){console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.");return}if(_t>=0&&_t<=At.width-Ut&&(Tt>=0&&Tt<=At.height-Lt))ee.readPixels(_t,Tt,Ut,Lt,Dt.convert(Ho),Dt.convert(Vn),fn)}finally{let fo=I!==null?_e.get(I).__webglFramebuffer:null;ue.bindFramebuffer(ee.FRAMEBUFFER,fo)}}},this.readRenderTargetPixelsAsync=async function(At,_t,Tt,Ut,Lt,fn,On){if(!(At&&At.isWebGLRenderTarget))throw Error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.");let Gn=_e.get(At).__webglFramebuffer;if(At.isWebGLCubeRenderTarget&&On!==void 0)Gn=Gn[On];if(Gn){ue.bindFramebuffer(ee.FRAMEBUFFER,Gn);try{let fo=At.texture,{format:Ho,type:Vn}=fo;if(!he.textureFormatReadable(Ho))throw Error("THREE.WebGLRenderer.readRenderTargetPixelsAsync: renderTarget is not in RGBA or implementation defined format.");if(!he.textureTypeReadable(Vn))throw Error("THREE.WebGLRenderer.readRenderTargetPixelsAsync: renderTarget is not in UnsignedByteType or implementation defined type.");if(_t>=0&&_t<=At.width-Ut&&(Tt>=0&&Tt<=At.height-Lt)){let Wn=ee.createBuffer();ee.bindBuffer(ee.PIXEL_PACK_BUFFER,Wn),ee.bufferData(ee.PIXEL_PACK_BUFFER,fn.byteLength,ee.STREAM_READ),ee.readPixels(_t,Tt,Ut,Lt,Dt.convert(Ho),Dt.convert(Vn),0),ee.flush();let Co=ee.fenceSync(ee.SYNC_GPU_COMMANDS_COMPLETE,0);await too(ee,Co,4);try{ee.bindBuffer(ee.PIXEL_PACK_BUFFER,Wn),ee.getBufferSubData(ee.PIXEL_PACK_BUFFER,0,fn)}finally{ee.deleteBuffer(Wn),ee.deleteSync(Co)}return fn}}finally{let fo=I!==null?_e.get(I).__webglFramebuffer:null;ue.bindFramebuffer(ee.FRAMEBUFFER,fo)}}},this.copyFramebufferToTexture=function(At,_t=null,Tt=0){if(At.isTexture!==!0)console.warn("WebGLRenderer: copyFramebufferToTexture function signature has changed."),_t=arguments[0]||null,At=arguments[1];let Ut=Math.pow(2,-Tt),Lt=Math.floor(At.image.width*Ut),fn=Math.floor(At.image.height*Ut),On=_t!==null?_t.x:0,Gn=_t!==null?_t.y:0;Pe.setTexture2D(At,0),ee.copyTexSubImage2D(ee.TEXTURE_2D,Tt,0,0,On,Gn,Lt,fn),ue.unbindTexture()},this.copyTextureToTexture=function(At,_t,Tt=null,Ut=null,Lt=0){if(At.isTexture!==!0)console.warn("WebGLRenderer: copyTextureToTexture function signature has changed."),Ut=arguments[0]||null,At=arguments[1],_t=arguments[2],Lt=arguments[3]||0,Tt=null;let fn,On,Gn,fo,Ho,Vn;if(Tt!==null)fn=Tt.max.x-Tt.min.x,On=Tt.max.y-Tt.min.y,Gn=Tt.min.x,fo=Tt.min.y;else fn=At.image.width,On=At.image.height,Gn=0,fo=0;if(Ut!==null)Ho=Ut.x,Vn=Ut.y;else Ho=0,Vn=0;let Wn=Dt.convert(_t.format),Co=Dt.convert(_t.type);Pe.setTexture2D(_t,0),ee.pixelStorei(ee.UNPACK_FLIP_Y_WEBGL,_t.flipY),ee.pixelStorei(ee.UNPACK_PREMULTIPLY_ALPHA_WEBGL,_t.premultiplyAlpha),ee.pixelStorei(ee.UNPACK_ALIGNMENT,_t.unpackAlignment);let Eo=ee.getParameter(ee.UNPACK_ROW_LENGTH),In=ee.getParameter(ee.UNPACK_IMAGE_HEIGHT),eo=ee.getParameter(ee.UNPACK_SKIP_PIXELS),co=ee.getParameter(ee.UNPACK_SKIP_ROWS),$n=ee.getParameter(ee.UNPACK_SKIP_IMAGES),zo=At.isCompressedTexture?At.mipmaps[Lt]:At.image;if(ee.pixelStorei(ee.UNPACK_ROW_LENGTH,zo.width),ee.pixelStorei(ee.UNPACK_IMAGE_HEIGHT,zo.height),ee.pixelStorei(ee.UNPACK_SKIP_PIXELS,Gn),ee.pixelStorei(ee.UNPACK_SKIP_ROWS,fo),At.isDataTexture)ee.texSubImage2D(ee.TEXTURE_2D,Lt,Ho,Vn,fn,On,Wn,Co,zo.data);else if(At.isCompressedTexture)ee.compressedTexSubImage2D(ee.TEXTURE_2D,Lt,Ho,Vn,zo.width,zo.height,Wn,zo.data);else ee.texSubImage2D(ee.TEXTURE_2D,Lt,Ho,Vn,Wn,Co,zo);if(ee.pixelStorei(ee.UNPACK_ROW_LENGTH,Eo),ee.pixelStorei(ee.UNPACK_IMAGE_HEIGHT,In),ee.pixelStorei(ee.UNPACK_SKIP_PIXELS,eo),ee.pixelStorei(ee.UNPACK_SKIP_ROWS,co),ee.pixelStorei(ee.UNPACK_SKIP_IMAGES,$n),Lt===0&&_t.generateMipmaps)ee.generateMipmap(ee.TEXTURE_2D);ue.unbindTexture()},this.copyTextureToTexture3D=function(At,_t,Tt=null,Ut=null,Lt=0){if(At.isTexture!==!0)console.warn("WebGLRenderer: copyTextureToTexture3D function signature has changed."),Tt=arguments[0]||null,Ut=arguments[1]||null,At=arguments[2],_t=arguments[3],Lt=arguments[4]||0;let fn,On,Gn,fo,Ho,Vn,Wn,Co,Eo,In=At.isCompressedTexture?At.mipmaps[Lt]:At.image;if(Tt!==null)fn=Tt.max.x-Tt.min.x,On=Tt.max.y-Tt.min.y,Gn=Tt.max.z-Tt.min.z,fo=Tt.min.x,Ho=Tt.min.y,Vn=Tt.min.z;else fn=In.width,On=In.height,Gn=In.depth,fo=0,Ho=0,Vn=0;if(Ut!==null)Wn=Ut.x,Co=Ut.y,Eo=Ut.z;else Wn=0,Co=0,Eo=0;let eo=Dt.convert(_t.format),co=Dt.convert(_t.type),$n;if(_t.isData3DTexture)Pe.setTexture3D(_t,0),$n=ee.TEXTURE_3D;else if(_t.isDataArrayTexture||_t.isCompressedArrayTexture)Pe.setTexture2DArray(_t,0),$n=ee.TEXTURE_2D_ARRAY;else{console.warn("THREE.WebGLRenderer.copyTextureToTexture3D: only supports THREE.DataTexture3D and THREE.DataTexture2DArray.");return}ee.pixelStorei(ee.UNPACK_FLIP_Y_WEBGL,_t.flipY),ee.pixelStorei(ee.UNPACK_PREMULTIPLY_ALPHA_WEBGL,_t.premultiplyAlpha),ee.pixelStorei(ee.UNPACK_ALIGNMENT,_t.unpackAlignment);let zo=ee.getParameter(ee.UNPACK_ROW_LENGTH),qo=ee.getParameter(ee.UNPACK_IMAGE_HEIGHT),fi=ee.getParameter(ee.UNPACK_SKIP_PIXELS),Nr=ee.getParameter(ee.UNPACK_SKIP_ROWS),bs=ee.getParameter(ee.UNPACK_SKIP_IMAGES);if(ee.pixelStorei(ee.UNPACK_ROW_LENGTH,In.width),ee.pixelStorei(ee.UNPACK_IMAGE_HEIGHT,In.height),ee.pixelStorei(ee.UNPACK_SKIP_PIXELS,fo),ee.pixelStorei(ee.UNPACK_SKIP_ROWS,Ho),ee.pixelStorei(ee.UNPACK_SKIP_IMAGES,Vn),At.isDataTexture||At.isData3DTexture)ee.texSubImage3D($n,Lt,Wn,Co,Eo,fn,On,Gn,eo,co,In.data);else if(_t.isCompressedArrayTexture)ee.compressedTexSubImage3D($n,Lt,Wn,Co,Eo,fn,On,Gn,eo,In.data);else ee.texSubImage3D($n,Lt,Wn,Co,Eo,fn,On,Gn,eo,co,In);if(ee.pixelStorei(ee.UNPACK_ROW_LENGTH,zo),ee.pixelStorei(ee.UNPACK_IMAGE_HEIGHT,qo),ee.pixelStorei(ee.UNPACK_SKIP_PIXELS,fi),ee.pixelStorei(ee.UNPACK_SKIP_ROWS,Nr),ee.pixelStorei(ee.UNPACK_SKIP_IMAGES,bs),Lt===0&&_t.generateMipmaps)ee.generateMipmap($n);ue.unbindTexture()},this.initRenderTarget=function(At){if(_e.get(At).__webglFramebuffer===void 0)Pe.setupRenderTarget(At)},this.initTexture=function(At){if(At.isCubeTexture)Pe.setTextureCube(At,0);else if(At.isData3DTexture)Pe.setTexture3D(At,0);else if(At.isDataArrayTexture||At.isCompressedArrayTexture)Pe.setTexture2DArray(At,0);else Pe.setTexture2D(At,0);ue.unbindTexture()},this.resetState=function(){x=0,C=0,I=null,ue.reset(),vt.reset()},typeof __THREE_DEVTOOLS__<"u")__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("observe",{detail:this}))}get coordinateSystem(){return 2000}get outputColorSpace(){return this._outputColorSpace}set outputColorSpace(e){this._outputColorSpace=e;let t=this.getContext();t.drawingBufferColorSpace=e==="display-p3"?"display-p3":"srgb",t.unpackColorSpace=ed.workingColorSpace==="display-p3-linear"?"display-p3":"srgb"}}class sx extends Nc{constructor(){super();if(this.isScene=!0,this.type="Scene",this.background=null,this.environment=null,this.fog=null,this.backgroundBlurriness=0,this.backgroundIntensity=1,this.backgroundRotation=new MA,this.environmentIntensity=1,this.environmentRotation=new MA,this.overrideMaterial=null,typeof __THREE_DEVTOOLS__<"u")__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("observe",{detail:this}))}copy(e,t){if(super.copy(e,t),e.background!==null)this.background=e.background.clone();if(e.environment!==null)this.environment=e.environment.clone();if(e.fog!==null)this.fog=e.fog.clone();if(this.backgroundBlurriness=e.backgroundBlurriness,this.backgroundIntensity=e.backgroundIntensity,this.backgroundRotation.copy(e.backgroundRotation),this.environmentIntensity=e.environmentIntensity,this.environmentRotation.copy(e.environmentRotation),e.overrideMaterial!==null)this.overrideMaterial=e.overrideMaterial.clone();return this.matrixAutoUpdate=e.matrixAutoUpdate,this}toJSON(e){let t=super.toJSON(e);if(this.fog!==null)t.object.fog=this.fog.toJSON();if(this.backgroundBlurriness>0)t.object.backgroundBlurriness=this.backgroundBlurriness;if(this.backgroundIntensity!==1)t.object.backgroundIntensity=this.backgroundIntensity;if(t.object.backgroundRotation=this.backgroundRotation.toArray(),this.environmentIntensity!==1)t.object.environmentIntensity=this.environmentIntensity;return t.object.environmentRotation=this.environmentRotation.toArray(),t}}class m0e{constructor(e,t){this.isInterleavedBuffer=!0,this.array=e,this.stride=t,this.count=e!==void 0?e.length/t:0,this.usage=35044,this._updateRange={offset:0,count:-1},this.updateRanges=[],this.version=0,this.uuid=lI()}onUploadCallback(){}set needsUpdate(e){if(e===!0)this.version++}get updateRange(){return R9e("THREE.InterleavedBuffer: updateRange() is deprecated and will be removed in r169. Use addUpdateRange() instead."),this._updateRange}setUsage(e){return this.usage=e,this}addUpdateRange(e,t){this.updateRanges.push({start:e,count:t})}clearUpdateRanges(){this.updateRanges.length=0}copy(e){return this.array=new e.array.constructor(e.array),this.count=e.count,this.stride=e.stride,this.usage=e.usage,this}copyAt(e,t,n){e*=this.stride,n*=t.stride;for(let o=0,i=this.stride;o<i;o++)this.array[e+o]=t.array[n+o];return this}set(e,t=0){return this.array.set(e,t),this}clone(e){if(e.arrayBuffers===void 0)e.arrayBuffers={};if(this.array.buffer._uuid===void 0)this.array.buffer._uuid=lI();if(e.arrayBuffers[this.array.buffer._uuid]===void 0)e.arrayBuffers[this.array.buffer._uuid]=this.array.slice(0).buffer;let t=new this.array.constructor(e.arrayBuffers[this.array.buffer._uuid]),n=new this.constructor(t,this.stride);return n.setUsage(this.usage),n}onUpload(e){return this.onUploadCallback=e,this}toJSON(e){if(e.arrayBuffers===void 0)e.arrayBuffers={};if(this.array.buffer._uuid===void 0)this.array.buffer._uuid=lI();if(e.arrayBuffers[this.array.buffer._uuid]===void 0)e.arrayBuffers[this.array.buffer._uuid]=Array.from(new Uint32Array(this.array.buffer));return{uuid:this.uuid,buffer:this.array.buffer._uuid,type:this.array.constructor.name,stride:this.stride}}}var Uf=new bt;class o${constructor(e,t,n,o=!1){this.isInterleavedBufferAttribute=!0,this.name="",this.data=e,this.itemSize=t,this.offset=n,this.normalized=o}get count(){return this.data.count}get array(){return this.data.array}set needsUpdate(e){this.data.needsUpdate=e}applyMatrix4(e){for(let t=0,n=this.data.count;t<n;t++)Uf.fromBufferAttribute(this,t),Uf.applyMatrix4(e),this.setXYZ(t,Uf.x,Uf.y,Uf.z);return this}applyNormalMatrix(e){for(let t=0,n=this.count;t<n;t++)Uf.fromBufferAttribute(this,t),Uf.applyNormalMatrix(e),this.setXYZ(t,Uf.x,Uf.y,Uf.z);return this}transformDirection(e){for(let t=0,n=this.count;t<n;t++)Uf.fromBufferAttribute(this,t),Uf.transformDirection(e),this.setXYZ(t,Uf.x,Uf.y,Uf.z);return this}getComponent(e,t){let n=this.array[e*this.data.stride+this.offset+t];if(this.normalized)n=V5(n,this.array);return n}setComponent(e,t,n){if(this.normalized)n=Zl(n,this.array);return this.data.array[e*this.data.stride+this.offset+t]=n,this}setX(e,t){if(this.normalized)t=Zl(t,this.array);return this.data.array[e*this.data.stride+this.offset]=t,this}setY(e,t){if(this.normalized)t=Zl(t,this.array);return this.data.array[e*this.data.stride+this.offset+1]=t,this}setZ(e,t){if(this.normalized)t=Zl(t,this.array);return this.data.array[e*this.data.stride+this.offset+2]=t,this}setW(e,t){if(this.normalized)t=Zl(t,this.array);return this.data.array[e*this.data.stride+this.offset+3]=t,this}getX(e){let t=this.data.array[e*this.data.stride+this.offset];if(this.normalized)t=V5(t,this.array);return t}getY(e){let t=this.data.array[e*this.data.stride+this.offset+1];if(this.normalized)t=V5(t,this.array);return t}getZ(e){let t=this.data.array[e*this.data.stride+this.offset+2];if(this.normalized)t=V5(t,this.array);return t}getW(e){let t=this.data.array[e*this.data.stride+this.offset+3];if(this.normalized)t=V5(t,this.array);return t}setXY(e,t,n){if(e=e*this.data.stride+this.offset,this.normalized)t=Zl(t,this.array),n=Zl(n,this.array);return this.data.array[e+0]=t,this.data.array[e+1]=n,this}setXYZ(e,t,n,o){if(e=e*this.data.stride+this.offset,this.normalized)t=Zl(t,this.array),n=Zl(n,this.array),o=Zl(o,this.array);return this.data.array[e+0]=t,this.data.array[e+1]=n,this.data.array[e+2]=o,this}setXYZW(e,t,n,o,i){if(e=e*this.data.stride+this.offset,this.normalized)t=Zl(t,this.array),n=Zl(n,this.array),o=Zl(o,this.array),i=Zl(i,this.array);return this.data.array[e+0]=t,this.data.array[e+1]=n,this.data.array[e+2]=o,this.data.array[e+3]=i,this}clone(e){if(e===void 0){console.log("THREE.InterleavedBufferAttribute.clone(): Cloning an interleaved buffer attribute will de-interleave buffer data.");let t=[];for(let n=0;n<this.count;n++){let o=n*this.data.stride+this.offset;for(let i=0;i<this.itemSize;i++)t.push(this.data.array[o+i])}return new Rc(new this.array.constructor(t),this.itemSize,this.normalized)}else{if(e.interleavedBuffers===void 0)e.interleavedBuffers={};if(e.interleavedBuffers[this.data.uuid]===void 0)e.interleavedBuffers[this.data.uuid]=this.data.clone(e);return new o$(e.interleavedBuffers[this.data.uuid],this.itemSize,this.offset,this.normalized)}}toJSON(e){if(e===void 0){console.log("THREE.InterleavedBufferAttribute.toJSON(): Serializing an interleaved buffer attribute will de-interleave buffer data.");let t=[];for(let n=0;n<this.count;n++){let o=n*this.data.stride+this.offset;for(let i=0;i<this.itemSize;i++)t.push(this.data.array[o+i])}return{itemSize:this.itemSize,type:this.array.constructor.name,array:t,normalized:this.normalized}}else{if(e.interleavedBuffers===void 0)e.interleavedBuffers={};if(e.interleavedBuffers[this.data.uuid]===void 0)e.interleavedBuffers[this.data.uuid]=this.data.toJSON(e);return{isInterleavedBufferAttribute:!0,itemSize:this.itemSize,data:this.data.uuid,offset:this.offset,normalized:this.normalized}}}}var AAt=new bt,_At=new Gl,gAt=new Gl,Wao=new bt,fAt=new Pr,Fhe=new bt,g9e=new py,yAt=new Pr,f9e=new L7;class Y9e extends Mo{constructor(e,t){super(e,t);this.isSkinnedMesh=!0,this.type="SkinnedMesh",this.bindMode="attached",this.bindMatrix=new Pr,this.bindMatrixInverse=new Pr,this.boundingBox=null,this.boundingSphere=null}computeBoundingBox(){let e=this.geometry;if(this.boundingBox===null)this.boundingBox=new tm;this.boundingBox.makeEmpty();let t=e.getAttribute("position");for(let n=0;n<t.count;n++)this.getVertexPosition(n,Fhe),this.boundingBox.expandByPoint(Fhe)}computeBoundingSphere(){let e=this.geometry;if(this.boundingSphere===null)this.boundingSphere=new py;this.boundingSphere.makeEmpty();let t=e.getAttribute("position");for(let n=0;n<t.count;n++)this.getVertexPosition(n,Fhe),this.boundingSphere.expandByPoint(Fhe)}copy(e,t){if(super.copy(e,t),this.bindMode=e.bindMode,this.bindMatrix.copy(e.bindMatrix),this.bindMatrixInverse.copy(e.bindMatrixInverse),this.skeleton=e.skeleton,e.boundingBox!==null)this.boundingBox=e.boundingBox.clone();if(e.boundingSphere!==null)this.boundingSphere=e.boundingSphere.clone();return this}raycast(e,t){let n=this.material,o=this.matrixWorld;if(n===void 0)return;if(this.boundingSphere===null)this.computeBoundingSphere();if(g9e.copy(this.boundingSphere),g9e.applyMatrix4(o),e.ray.intersectsSphere(g9e)===!1)return;if(yAt.copy(o).invert(),f9e.copy(e.ray).applyMatrix4(yAt),this.boundingBox!==null){if(f9e.intersectsBox(this.boundingBox)===!1)return}this._computeIntersections(e,t,f9e)}getVertexPosition(e,t){return super.getVertexPosition(e,t),this.applyBoneTransform(e,t),t}bind(e,t){if(this.skeleton=e,t===void 0)this.updateMatrixWorld(!0),this.skeleton.calculateInverses(),t=this.matrixWorld;this.bindMatrix.copy(t),this.bindMatrixInverse.copy(t).invert()}pose(){this.skeleton.pose()}normalizeSkinWeights(){let e=new Gl,t=this.geometry.attributes.skinWeight;for(let n=0,o=t.count;n<o;n++){e.fromBufferAttribute(t,n);let i=1/e.manhattanLength();if(i!==1/0)e.multiplyScalar(i);else e.set(1,0,0,0);t.setXYZW(n,e.x,e.y,e.z,e.w)}}updateMatrixWorld(e){if(super.updateMatrixWorld(e),this.bindMode==="attached")this.bindMatrixInverse.copy(this.matrixWorld).invert();else if(this.bindMode==="detached")this.bindMatrixInverse.copy(this.bindMatrix).invert();else console.warn("THREE.SkinnedMesh: Unrecognized bindMode: "+this.bindMode)}applyBoneTransform(e,t){let n=this.skeleton,o=this.geometry;_At.fromBufferAttribute(o.attributes.skinIndex,e),gAt.fromBufferAttribute(o.attributes.skinWeight,e),AAt.copy(t).applyMatrix4(this.bindMatrix),t.set(0,0,0);for(let i=0;i<4;i++){let r=gAt.getComponent(i);if(r!==0){let s=_At.getComponent(i);fAt.multiplyMatrices(n.bones[s].matrixWorld,n.boneInverses[s]),t.addScaledVector(Wao.copy(AAt).applyMatrix4(fAt),r)}}return t.applyMatrix4(this.bindMatrixInverse)}}class p0e extends Nc{constructor(){super();this.isBone=!0,this.type="Bone"}}class zG extends sl{constructor(e=null,t=1,n=1,o,i,r,s,a,c=1003,l=1003,d,u){super(null,r,s,a,c,l,o,i,d,u);this.isDataTexture=!0,this.image={data:e,width:t,height:n},this.generateMipmaps=!1,this.flipY=!1,this.unpackAlignment=1}}var xAt=new Pr,Xao=new Pr;class A0e{constructor(e=[],t=[]){this.uuid=lI(),this.bones=e.slice(0),this.boneInverses=t,this.boneMatrices=null,this.boneTexture=null,this.init()}init(){let e=this.bones,t=this.boneInverses;if(this.boneMatrices=new Float32Array(e.length*16),t.length===0)this.calculateInverses();else if(e.length!==t.length){console.warn("THREE.Skeleton: Number of inverse bone matrices does not match amount of bones."),this.boneInverses=[];for(let n=0,o=this.bones.length;n<o;n++)this.boneInverses.push(new Pr)}}calculateInverses(){this.boneInverses.length=0;for(let e=0,t=this.bones.length;e<t;e++){let n=new Pr;if(this.bones[e])n.copy(this.bones[e].matrixWorld).invert();this.boneInverses.push(n)}}pose(){for(let e=0,t=this.bones.length;e<t;e++){let n=this.bones[e];if(n)n.matrixWorld.copy(this.boneInverses[e]).invert()}for(let e=0,t=this.bones.length;e<t;e++){let n=this.bones[e];if(n){if(n.parent&&n.parent.isBone)n.matrix.copy(n.parent.matrixWorld).invert(),n.matrix.multiply(n.matrixWorld);else n.matrix.copy(n.matrixWorld);n.matrix.decompose(n.position,n.quaternion,n.scale)}}}update(){let e=this.bones,t=this.boneInverses,n=this.boneMatrices,o=this.boneTexture;for(let i=0,r=e.length;i<r;i++){let s=e[i]?e[i].matrixWorld:Xao;xAt.multiplyMatrices(s,t[i]),xAt.toArray(n,i*16)}if(o!==null)o.needsUpdate=!0}clone(){return new A0e(this.bones,this.boneInverses)}computeBoneTexture(){let e=Math.sqrt(this.bones.length*4);e=Math.ceil(e/4)*4,e=Math.max(e,4);let t=new Float32Array(e*e*4);t.set(this.boneMatrices);let n=new zG(t,e,e,1023,1015);return n.needsUpdate=!0,this.boneMatrices=t,this.boneTexture=n,this}getBoneByName(e){for(let t=0,n=this.bones.length;t<n;t++){let o=this.bones[t];if(o.name===e)return o}return}dispose(){if(this.boneTexture!==null)this.boneTexture.dispose(),this.boneTexture=null}fromJSON(e,t){this.uuid=e.uuid;for(let n=0,o=e.bones.length;n<o;n++){let i=e.bones[n],r=t[i];if(r===void 0)console.warn("THREE.Skeleton: No bone found with UUID:",i),r=new p0e;this.bones.push(r),this.boneInverses.push(new Pr().fromArray(e.boneInverses[n]))}return this.init(),this}toJSON(){let e={metadata:{version:4.6,type:"Skeleton",generator:"Skeleton.toJSON"},bones:[],boneInverses:[]};e.uuid=this.uuid;let t=this.bones,n=this.boneInverses;for(let o=0,i=t.length;o<i;o++){let r=t[o];e.bones.push(r.uuid);let s=n[o];e.boneInverses.push(s.toArray())}return e}}class AQ extends Rc{constructor(e,t,n,o=1){super(e,t,n);this.isInstancedBufferAttribute=!0,this.meshPerAttribute=o}copy(e){return super.copy(e),this.meshPerAttribute=e.meshPerAttribute,this}toJSON(){let e=super.toJSON();return e.meshPerAttribute=this.meshPerAttribute,e.isInstancedBufferAttribute=!0,e}}var NG=new Pr,CAt=new Pr,Hhe=[],IAt=new tm,Kao=new Pr,FJ=new Mo,HJ=new py;class V9e extends Mo{constructor(e,t,n){super(e,t);this.isInstancedMesh=!0,this.instanceMatrix=new AQ(new Float32Array(n*16),16),this.instanceColor=null,this.morphTexture=null,this.count=n,this.boundingBox=null,this.boundingSphere=null;for(let o=0;o<n;o++)this.setMatrixAt(o,Kao)}computeBoundingBox(){let e=this.geometry,t=this.count;if(this.boundingBox===null)this.boundingBox=new tm;if(e.boundingBox===null)e.computeBoundingBox();this.boundingBox.makeEmpty();for(let n=0;n<t;n++)this.getMatrixAt(n,NG),IAt.copy(e.boundingBox).applyMatrix4(NG),this.boundingBox.union(IAt)}computeBoundingSphere(){let e=this.geometry,t=this.count;if(this.boundingSphere===null)this.boundingSphere=new py;if(e.boundingSphere===null)e.computeBoundingSphere();this.boundingSphere.makeEmpty();for(let n=0;n<t;n++)this.getMatrixAt(n,NG),HJ.copy(e.boundingSphere).applyMatrix4(NG),this.boundingSphere.union(HJ)}copy(e,t){if(super.copy(e,t),this.instanceMatrix.copy(e.instanceMatrix),e.morphTexture!==null)this.morphTexture=e.morphTexture.clone();if(e.instanceColor!==null)this.instanceColor=e.instanceColor.clone();if(this.count=e.count,e.boundingBox!==null)this.boundingBox=e.boundingBox.clone();if(e.boundingSphere!==null)this.boundingSphere=e.boundingSphere.clone();return this}getColorAt(e,t){t.fromArray(this.instanceColor.array,e*3)}getMatrixAt(e,t){t.fromArray(this.instanceMatrix.array,e*16)}getMorphAt(e,t){let n=t.morphTargetInfluences,o=this.morphTexture.source.data.data,i=n.length+1,r=e*i+1;for(let s=0;s<n.length;s++)n[s]=o[r+s]}raycast(e,t){let n=this.matrixWorld,o=this.count;if(FJ.geometry=this.geometry,FJ.material=this.material,FJ.material===void 0)return;if(this.boundingSphere===null)this.computeBoundingSphere();if(HJ.copy(this.boundingSphere),HJ.applyMatrix4(n),e.ray.intersectsSphere(HJ)===!1)return;for(let i=0;i<o;i++){this.getMatrixAt(i,NG),CAt.multiplyMatrices(n,NG),FJ.matrixWorld=CAt,FJ.raycast(e,Hhe);for(let r=0,s=Hhe.length;r<s;r++){let a=Hhe[r];a.instanceId=i,a.object=this,t.push(a)}Hhe.length=0}}setColorAt(e,t){if(this.instanceColor===null)this.instanceColor=new AQ(new Float32Array(this.instanceMatrix.count*3),3);t.toArray(this.instanceColor.array,e*3)}setMatrixAt(e,t){t.toArray(this.instanceMatrix.array,e*16)}setMorphAt(e,t){let n=t.morphTargetInfluences,o=n.length+1;if(this.morphTexture===null)this.morphTexture=new zG(new Float32Array(o*this.count),o,this.count,1028,1015);let i=this.morphTexture.source.data.data,r=0;for(let c=0;c<n.length;c++)r+=n[c];let s=this.geometry.morphTargetsRelative?1:1-r,a=o*e;i[a]=s,i.set(n,a+1)}updateMorphTargets(){}dispose(){if(this.dispatchEvent({type:"dispose"}),this.morphTexture!==null)this.morphTexture.dispose(),this.morphTexture=null;return this}}class uI extends BA{constructor(e){super();this.isLineBasicMaterial=!0,this.type="LineBasicMaterial",this.color=new Po(16777215),this.map=null,this.linewidth=1,this.linecap="round",this.linejoin="round",this.fog=!0,this.setValues(e)}copy(e){return super.copy(e),this.color.copy(e.color),this.map=e.map,this.linewidth=e.linewidth,this.linecap=e.linecap,this.linejoin=e.linejoin,this.fog=e.fog,this}}var $he=new bt,Zhe=new bt,bAt=new Pr,OJ=new L7,Ohe=new py,y9e=new bt,SAt=new bt;class i$ extends Nc{constructor(e=new zs,t=new uI){super();this.isLine=!0,this.type="Line",this.geometry=e,this.material=t,this.updateMorphTargets()}copy(e,t){return super.copy(e,t),this.material=Array.isArray(e.material)?e.material.slice():e.material,this.geometry=e.geometry,this}computeLineDistances(){let e=this.geometry;if(e.index===null){let t=e.attributes.position,n=[0];for(let o=1,i=t.count;o<i;o++)$he.fromBufferAttribute(t,o-1),Zhe.fromBufferAttribute(t,o),n[o]=n[o-1],n[o]+=$he.distanceTo(Zhe);e.setAttribute("lineDistance",new Hi(n,1))}else console.warn("THREE.Line.computeLineDistances(): Computation only possible with non-indexed BufferGeometry.");return this}raycast(e,t){let n=this.geometry,o=this.matrixWorld,i=e.params.Line.threshold,r=n.drawRange;if(n.boundingSphere===null)n.computeBoundingSphere();if(Ohe.copy(n.boundingSphere),Ohe.applyMatrix4(o),Ohe.radius+=i,e.ray.intersectsSphere(Ohe)===!1)return;bAt.copy(o).invert(),OJ.copy(e.ray).applyMatrix4(bAt);let s=i/((this.scale.x+this.scale.y+this.scale.z)/3),a=s*s,c=this.isLineSegments?2:1,l=n.index,u=n.attributes.position;if(l!==null){let h=Math.max(0,r.start),A=Math.min(l.count,r.start+r.count);for(let m=h,p=A-1;m<p;m+=c){let g=l.getX(m),_=l.getX(m+1),f=zhe(this,e,OJ,a,g,_);if(f)t.push(f)}if(this.isLineLoop){let m=l.getX(A-1),p=l.getX(h),g=zhe(this,e,OJ,a,m,p);if(g)t.push(g)}}else{let h=Math.max(0,r.start),A=Math.min(u.count,r.start+r.count);for(let m=h,p=A-1;m<p;m+=c){let g=zhe(this,e,OJ,a,m,m+1);if(g)t.push(g)}if(this.isLineLoop){let m=zhe(this,e,OJ,a,A-1,h);if(m)t.push(m)}}}updateMorphTargets(){let t=this.geometry.morphAttributes,n=Object.keys(t);if(n.length>0){let o=t[n[0]];if(o!==void 0){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let i=0,r=o.length;i<r;i++){let s=o[i].name||String(i);this.morphTargetInfluences.push(0),this.morphTargetDictionary[s]=i}}}}}function zhe(e,t,n,o,i,r){let s=e.geometry.attributes.position;if($he.fromBufferAttribute(s,i),Zhe.fromBufferAttribute(s,r),n.distanceSqToSegment($he,Zhe,y9e,SAt)>o)return;y9e.applyMatrix4(e.matrixWorld);let c=t.ray.origin.distanceTo(y9e);if(c<t.near||c>t.far)return;return{distance:c,point:SAt.clone().applyMatrix4(e.matrixWorld),index:i,face:null,faceIndex:null,object:e}}var PAt=new bt,vAt=new bt;class Xv extends i${constructor(e,t){super(e,t);this.isLineSegments=!0,this.type="LineSegments"}computeLineDistances(){let e=this.geometry;if(e.index===null){let t=e.attributes.position,n=[];for(let o=0,i=t.count;o<i;o+=2)PAt.fromBufferAttribute(t,o),vAt.fromBufferAttribute(t,o+1),n[o]=o===0?0:n[o-1],n[o+1]=n[o]+PAt.distanceTo(vAt);e.setAttribute("lineDistance",new Hi(n,1))}else console.warn("THREE.LineSegments.computeLineDistances(): Computation only possible with non-indexed BufferGeometry.");return this}}class U9e extends i${constructor(e,t){super(e,t);this.isLineLoop=!0,this.type="LineLoop"}}class W5 extends BA{constructor(e){super();this.isPointsMaterial=!0,this.type="PointsMaterial",this.color=new Po(16777215),this.map=null,this.alphaMap=null,this.size=1,this.sizeAttenuation=!0,this.fog=!0,this.setValues(e)}copy(e){return super.copy(e),this.color.copy(e.color),this.map=e.map,this.alphaMap=e.alphaMap,this.size=e.size,this.sizeAttenuation=e.sizeAttenuation,this.fog=e.fog,this}}var EAt=new Pr,E9e=new L7,Ghe=new py,Yhe=new bt;class KM extends Nc{constructor(e=new zs,t=new W5){super();this.isPoints=!0,this.type="Points",this.geometry=e,this.material=t,this.updateMorphTargets()}copy(e,t){return super.copy(e,t),this.material=Array.isArray(e.material)?e.material.slice():e.material,this.geometry=e.geometry,this}raycast(e,t){let n=this.geometry,o=this.matrixWorld,i=e.params.Points.threshold,r=n.drawRange;if(n.boundingSphere===null)n.computeBoundingSphere();if(Ghe.copy(n.boundingSphere),Ghe.applyMatrix4(o),Ghe.radius+=i,e.ray.intersectsSphere(Ghe)===!1)return;EAt.copy(o).invert(),E9e.copy(e.ray).applyMatrix4(EAt);let s=i/((this.scale.x+this.scale.y+this.scale.z)/3),a=s*s,c=n.index,d=n.attributes.position;if(c!==null){let u=Math.max(0,r.start),h=Math.min(c.count,r.start+r.count);for(let A=u,m=h;A<m;A++){let p=c.getX(A);Yhe.fromBufferAttribute(d,p),MAt(Yhe,p,a,o,e,t,this)}}else{let u=Math.max(0,r.start),h=Math.min(d.count,r.start+r.count);for(let A=u,m=h;A<m;A++)Yhe.fromBufferAttribute(d,A),MAt(Yhe,A,a,o,e,t,this)}}updateMorphTargets(){let t=this.geometry.morphAttributes,n=Object.keys(t);if(n.length>0){let o=t[n[0]];if(o!==void 0){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let i=0,r=o.length;i<r;i++){let s=o[i].name||String(i);this.morphTargetInfluences.push(0),this.morphTargetDictionary[s]=i}}}}}function MAt(e,t,n,o,i,r,s){let a=E9e.distanceSqToPoint(e);if(a<n){let c=new bt;E9e.closestPointToPoint(e,c),c.applyMatrix4(o);let l=i.ray.origin.distanceTo(c);if(l<i.near||l>i.far)return;r.push({distance:l,distanceToRay:Math.sqrt(a),point:c,index:t,face:null,object:s})}}class r$ extends sl{constructor(e,t,n,o,i,r,s,a,c,l,d,u){super(null,r,s,a,c,l,o,i,d,u);this.isCompressedTexture=!0,this.image={width:t,height:n},this.mipmaps=e,this.flipY=!1,this.generateMipmaps=!1}}class yd extends sl{constructor(e,t,n,o,i,r,s,a,c){super(e,t,n,o,i,r,s,a,c);this.isCanvasTexture=!0,this.needsUpdate=!0}}class X5{constructor(){this.type="Curve",this.arcLengthDivisions=200}getPoint(){return console.warn("THREE.Curve: .getPoint() not implemented."),null}getPointAt(e,t){let n=this.getUtoTmapping(e);return this.getPoint(n,t)}getPoints(e=5){let t=[];for(let n=0;n<=e;n++)t.push(this.getPoint(n/e));return t}getSpacedPoints(e=5){let t=[];for(let n=0;n<=e;n++)t.push(this.getPointAt(n/e));return t}getLength(){let e=this.getLengths();return e[e.length-1]}getLengths(e=this.arcLengthDivisions){if(this.cacheArcLengths&&this.cacheArcLengths.length===e+1&&!this.needsUpdate)return this.cacheArcLengths;this.needsUpdate=!1;let t=[],n,o=this.getPoint(0),i=0;t.push(0);for(let r=1;r<=e;r++)n=this.getPoint(r/e),i+=n.distanceTo(o),t.push(i),o=n;return this.cacheArcLengths=t,t}updateArcLengths(){this.needsUpdate=!0,this.getLengths()}getUtoTmapping(e,t){let n=this.getLengths(),o=0,i=n.length,r;if(t)r=t;else r=e*n[i-1];let s=0,a=i-1,c;while(s<=a)if(o=Math.floor(s+(a-s)/2),c=n[o]-r,c<0)s=o+1;else if(c>0)a=o-1;else{a=o;break}if(o=a,n[o]===r)return o/(i-1);let l=n[o],u=n[o+1]-l,h=(r-l)/u;return(o+h)/(i-1)}getTangent(e,t){let o=e-0.0001,i=e+0.0001;if(o<0)o=0;if(i>1)i=1;let r=this.getPoint(o),s=this.getPoint(i),a=t||(r.isVector2?new ro:new bt);return a.copy(s).sub(r).normalize(),a}getTangentAt(e,t){let n=this.getUtoTmapping(e);return this.getTangent(n,t)}computeFrenetFrames(e,t){let n=new bt,o=[],i=[],r=[],s=new bt,a=new Pr;for(let h=0;h<=e;h++){let A=h/e;o[h]=this.getTangentAt(A,new bt)}i[0]=new bt,r[0]=new bt;let c=Number.MAX_VALUE,l=Math.abs(o[0].x),d=Math.abs(o[0].y),u=Math.abs(o[0].z);if(l<=c)c=l,n.set(1,0,0);if(d<=c)c=d,n.set(0,1,0);if(u<=c)n.set(0,0,1);s.crossVectors(o[0],n).normalize(),i[0].crossVectors(o[0],s),r[0].crossVectors(o[0],i[0]);for(let h=1;h<=e;h++){if(i[h]=i[h-1].clone(),r[h]=r[h-1].clone(),s.crossVectors(o[h-1],o[h]),s.length()>Number.EPSILON){s.normalize();let A=Math.acos(Tp(o[h-1].dot(o[h]),-1,1));i[h].applyMatrix4(a.makeRotationAxis(s,A))}r[h].crossVectors(o[h],i[h])}if(t===!0){let h=Math.acos(Tp(i[0].dot(i[e]),-1,1));if(h/=e,o[0].dot(s.crossVectors(i[0],i[e]))>0)h=-h;for(let A=1;A<=e;A++)i[A].applyMatrix4(a.makeRotationAxis(o[A],h*A)),r[A].crossVectors(o[A],i[A])}return{tangents:o,normals:i,binormals:r}}clone(){return new this.constructor().copy(this)}copy(e){return this.arcLengthDivisions=e.arcLengthDivisions,this}toJSON(){let e={metadata:{version:4.6,type:"Curve",generator:"Curve.toJSON"}};return e.arcLengthDivisions=this.arcLengthDivisions,e.type=this.type,e}fromJSON(e){return this.arcLengthDivisions=e.arcLengthDivisions,this}}class _0e extends X5{constructor(e=0,t=0,n=1,o=1,i=0,r=Math.PI*2,s=!1,a=0){super();this.isEllipseCurve=!0,this.type="EllipseCurve",this.aX=e,this.aY=t,this.xRadius=n,this.yRadius=o,this.aStartAngle=i,this.aEndAngle=r,this.aClockwise=s,this.aRotation=a}getPoint(e,t=new ro){let n=t,o=Math.PI*2,i=this.aEndAngle-this.aStartAngle,r=Math.abs(i)<Number.EPSILON;while(i<0)i+=o;while(i>o)i-=o;if(i<Number.EPSILON)if(r)i=0;else i=o;if(this.aClockwise===!0&&!r)if(i===o)i=-o;else i=i-o;let s=this.aStartAngle+e*i,a=this.aX+this.xRadius*Math.cos(s),c=this.aY+this.yRadius*Math.sin(s);if(this.aRotation!==0){let l=Math.cos(this.aRotation),d=Math.sin(this.aRotation),u=a-this.aX,h=c-this.aY;a=u*l-h*d+this.aX,c=u*d+h*l+this.aY}return n.set(a,c)}copy(e){return super.copy(e),this.aX=e.aX,this.aY=e.aY,this.xRadius=e.xRadius,this.yRadius=e.yRadius,this.aStartAngle=e.aStartAngle,this.aEndAngle=e.aEndAngle,this.aClockwise=e.aClockwise,this.aRotation=e.aRotation,this}toJSON(){let e=super.toJSON();return e.aX=this.aX,e.aY=this.aY,e.xRadius=this.xRadius,e.yRadius=this.yRadius,e.aStartAngle=this.aStartAngle,e.aEndAngle=this.aEndAngle,e.aClockwise=this.aClockwise,e.aRotation=this.aRotation,e}fromJSON(e){return super.fromJSON(e),this.aX=e.aX,this.aY=e.aY,this.xRadius=e.xRadius,this.yRadius=e.yRadius,this.aStartAngle=e.aStartAngle,this.aEndAngle=e.aEndAngle,this.aClockwise=e.aClockwise,this.aRotation=e.aRotation,this}}class p_t extends _0e{constructor(e,t,n,o,i,r){super(e,t,n,n,o,i,r);this.isArcCurve=!0,this.type="ArcCurve"}}function W9e(){let e=0,t=0,n=0,o=0;function i(r,s,a,c){e=r,t=a,n=-3*r+3*s-2*a-c,o=2*r-2*s+a+c}return{initCatmullRom:function(r,s,a,c,l){i(s,a,l*(a-r),l*(c-s))},initNonuniformCatmullRom:function(r,s,a,c,l,d,u){let h=(s-r)/l-(a-r)/(l+d)+(a-s)/d,A=(a-s)/d-(c-s)/(d+u)+(c-a)/u;h*=d,A*=d,i(s,a,h,A)},calc:function(r){let s=r*r,a=s*r;return e+t*r+n*s+o*a}}}var Vhe=new bt,x9e=new W9e,C9e=new W9e,I9e=new W9e;class g0e extends X5{constructor(e=[],t=!1,n="centripetal",o=0.5){super();this.isCatmullRomCurve3=!0,this.type="CatmullRomCurve3",this.points=e,this.closed=t,this.curveType=n,this.tension=o}getPoint(e,t=new bt){let n=t,o=this.points,i=o.length,r=(i-(this.closed?0:1))*e,s=Math.floor(r),a=r-s;if(this.closed)s+=s>0?0:(Math.floor(Math.abs(s)/i)+1)*i;else if(a===0&&s===i-1)s=i-2,a=1;let c,l;if(this.closed||s>0)c=o[(s-1)%i];else Vhe.subVectors(o[0],o[1]).add(o[0]),c=Vhe;let d=o[s%i],u=o[(s+1)%i];if(this.closed||s+2<i)l=o[(s+2)%i];else Vhe.subVectors(o[i-1],o[i-2]).add(o[i-1]),l=Vhe;if(this.curveType==="centripetal"||this.curveType==="chordal"){let h=this.curveType==="chordal"?0.5:0.25,A=Math.pow(c.distanceToSquared(d),h),m=Math.pow(d.distanceToSquared(u),h),p=Math.pow(u.distanceToSquared(l),h);if(m<0.0001)m=1;if(A<0.0001)A=m;if(p<0.0001)p=m;x9e.initNonuniformCatmullRom(c.x,d.x,u.x,l.x,A,m,p),C9e.initNonuniformCatmullRom(c.y,d.y,u.y,l.y,A,m,p),I9e.initNonuniformCatmullRom(c.z,d.z,u.z,l.z,A,m,p)}else if(this.curveType==="catmullrom")x9e.initCatmullRom(c.x,d.x,u.x,l.x,this.tension),C9e.initCatmullRom(c.y,d.y,u.y,l.y,this.tension),I9e.initCatmullRom(c.z,d.z,u.z,l.z,this.tension);return n.set(x9e.calc(a),C9e.calc(a),I9e.calc(a)),n}copy(e){super.copy(e),this.points=[];for(let t=0,n=e.points.length;t<n;t++){let o=e.points[t];this.points.push(o.clone())}return this.closed=e.closed,this.curveType=e.curveType,this.tension=e.tension,this}toJSON(){let e=super.toJSON();e.points=[];for(let t=0,n=this.points.length;t<n;t++){let o=this.points[t];e.points.push(o.toArray())}return e.closed=this.closed,e.curveType=this.curveType,e.tension=this.tension,e}fromJSON(e){super.fromJSON(e),this.points=[];for(let t=0,n=e.points.length;t<n;t++){let o=e.points[t];this.points.push(new bt().fromArray(o))}return this.closed=e.closed,this.curveType=e.curveType,this.tension=e.tension,this}}function BAt(e,t,n,o,i){let r=(o-t)*0.5,s=(i-n)*0.5,a=e*e,c=e*a;return(2*n-2*o+r+s)*c+(-3*n+3*o-2*r-s)*a+r*e+n}function jao(e,t){let n=1-e;return n*n*t}function qao(e,t){return 2*(1-e)*e*t}function Jao(e,t){return e*e*t}function UJ(e,t,n,o){return jao(e,t)+qao(e,n)+Jao(e,o)}function $ao(e,t){let n=1-e;return n*n*n*t}function Zao(e,t){let n=1-e;return 3*n*n*e*t}function eco(e,t){return 3*(1-e)*e*e*t}function tco(e,t){return e*e*e*t}function WJ(e,t,n,o,i){return $ao(e,t)+Zao(e,n)+eco(e,o)+tco(e,i)}class X9e extends X5{constructor(e=new ro,t=new ro,n=new ro,o=new ro){super();this.isCubicBezierCurve=!0,this.type="CubicBezierCurve",this.v0=e,this.v1=t,this.v2=n,this.v3=o}getPoint(e,t=new ro){let n=t,o=this.v0,i=this.v1,r=this.v2,s=this.v3;return n.set(WJ(e,o.x,i.x,r.x,s.x),WJ(e,o.y,i.y,r.y,s.y)),n}copy(e){return super.copy(e),this.v0.copy(e.v0),this.v1.copy(e.v1),this.v2.copy(e.v2),this.v3.copy(e.v3),this}toJSON(){let e=super.toJSON();return e.v0=this.v0.toArray(),e.v1=this.v1.toArray(),e.v2=this.v2.toArray(),e.v3=this.v3.toArray(),e}fromJSON(e){return super.fromJSON(e),this.v0.fromArray(e.v0),this.v1.fromArray(e.v1),this.v2.fromArray(e.v2),this.v3.fromArray(e.v3),this}}class A_t extends X5{constructor(e=new bt,t=new bt,n=new bt,o=new bt){super();this.isCubicBezierCurve3=!0,this.type="CubicBezierCurve3",this.v0=e,this.v1=t,this.v2=n,this.v3=o}getPoint(e,t=new bt){let n=t,o=this.v0,i=this.v1,r=this.v2,s=this.v3;return n.set(WJ(e,o.x,i.x,r.x,s.x),WJ(e,o.y,i.y,r.y,s.y),WJ(e,o.z,i.z,r.z,s.z)),n}copy(e){return super.copy(e),this.v0.copy(e.v0),this.v1.copy(e.v1),this.v2.copy(e.v2),this.v3.copy(e.v3),this}toJSON(){let e=super.toJSON();return e.v0=this.v0.toArray(),e.v1=this.v1.toArray(),e.v2=this.v2.toArray(),e.v3=this.v3.toArray(),e}fromJSON(e){return super.fromJSON(e),this.v0.fromArray(e.v0),this.v1.fromArray(e.v1),this.v2.fromArray(e.v2),this.v3.fromArray(e.v3),this}}class K9e extends X5{constructor(e=new ro,t=new ro){super();this.isLineCurve=!0,this.type="LineCurve",this.v1=e,this.v2=t}getPoint(e,t=new ro){let n=t;if(e===1)n.copy(this.v2);else n.copy(this.v2).sub(this.v1),n.multiplyScalar(e).add(this.v1);return n}getPointAt(e,t){return this.getPoint(e,t)}getTangent(e,t=new ro){return t.subVectors(this.v2,this.v1).normalize()}getTangentAt(e,t){return this.getTangent(e,t)}copy(e){return super.copy(e),this.v1.copy(e.v1),this.v2.copy(e.v2),this}toJSON(){let e=super.toJSON();return e.v1=this.v1.toArray(),e.v2=this.v2.toArray(),e}fromJSON(e){return super.fromJSON(e),this.v1.fromArray(e.v1),this.v2.fromArray(e.v2),this}}class __t extends X5{constructor(e=new bt,t=new bt){super();this.isLineCurve3=!0,this.type="LineCurve3",this.v1=e,this.v2=t}getPoint(e,t=new bt){let n=t;if(e===1)n.copy(this.v2);else n.copy(this.v2).sub(this.v1),n.multiplyScalar(e).add(this.v1);return n}getPointAt(e,t){return this.getPoint(e,t)}getTangent(e,t=new bt){return t.subVectors(this.v2,this.v1).normalize()}getTangentAt(e,t){return this.getTangent(e,t)}copy(e){return super.copy(e),this.v1.copy(e.v1),this.v2.copy(e.v2),this}toJSON(){let e=super.toJSON();return e.v1=this.v1.toArray(),e.v2=this.v2.toArray(),e}fromJSON(e){return super.fromJSON(e),this.v1.fromArray(e.v1),this.v2.fromArray(e.v2),this}}class j9e extends X5{constructor(e=new ro,t=new ro,n=new ro){super();this.isQuadraticBezierCurve=!0,this.type="QuadraticBezierCurve",this.v0=e,this.v1=t,this.v2=n}getPoint(e,t=new ro){let n=t,o=this.v0,i=this.v1,r=this.v2;return n.set(UJ(e,o.x,i.x,r.x),UJ(e,o.y,i.y,r.y)),n}copy(e){return super.copy(e),this.v0.copy(e.v0),this.v1.copy(e.v1),this.v2.copy(e.v2),this}toJSON(){let e=super.toJSON();return e.v0=this.v0.toArray(),e.v1=this.v1.toArray(),e.v2=this.v2.toArray(),e}fromJSON(e){return super.fromJSON(e),this.v0.fromArray(e.v0),this.v1.fromArray(e.v1),this.v2.fromArray(e.v2),this}}class g_t extends X5{constructor(e=new bt,t=new bt,n=new bt){super();this.isQuadraticBezierCurve3=!0,this.type="QuadraticBezierCurve3",this.v0=e,this.v1=t,this.v2=n}getPoint(e,t=new bt){let n=t,o=this.v0,i=this.v1,r=this.v2;return n.set(UJ(e,o.x,i.x,r.x),UJ(e,o.y,i.y,r.y),UJ(e,o.z,i.z,r.z)),n}copy(e){return super.copy(e),this.v0.copy(e.v0),this.v1.copy(e.v1),this.v2.copy(e.v2),this}toJSON(){let e=super.toJSON();return e.v0=this.v0.toArray(),e.v1=this.v1.toArray(),e.v2=this.v2.toArray(),e}fromJSON(e){return super.fromJSON(e),this.v0.fromArray(e.v0),this.v1.fromArray(e.v1),this.v2.fromArray(e.v2),this}}class q9e extends X5{constructor(e=[]){super();this.isSplineCurve=!0,this.type="SplineCurve",this.points=e}getPoint(e,t=new ro){let n=t,o=this.points,i=(o.length-1)*e,r=Math.floor(i),s=i-r,a=o[r===0?r:r-1],c=o[r],l=o[r>o.length-2?o.length-1:r+1],d=o[r>o.length-3?o.length-1:r+2];return n.set(BAt(s,a.x,c.x,l.x,d.x),BAt(s,a.y,c.y,l.y,d.y)),n}copy(e){super.copy(e),this.points=[];for(let t=0,n=e.points.length;t<n;t++){let o=e.points[t];this.points.push(o.clone())}return this}toJSON(){let e=super.toJSON();e.points=[];for(let t=0,n=this.points.length;t<n;t++){let o=this.points[t];e.points.push(o.toArray())}return e}fromJSON(e){super.fromJSON(e),this.points=[];for(let t=0,n=e.points.length;t<n;t++){let o=e.points[t];this.points.push(new ro().fromArray(o))}return this}}var M9e=Object.freeze({__proto__:null,ArcCurve:p_t,CatmullRomCurve3:g0e,CubicBezierCurve:X9e,CubicBezierCurve3:A_t,EllipseCurve:_0e,LineCurve:K9e,LineCurve3:__t,QuadraticBezierCurve:j9e,QuadraticBezierCurve3:g_t,SplineCurve:q9e});class f_t extends X5{constructor(){super();this.type="CurvePath",this.curves=[],this.autoClose=!1}add(e){this.curves.push(e)}closePath(){let e=this.curves[0].getPoint(0),t=this.curves[this.curves.length-1].getPoint(1);if(!e.equals(t)){let n=e.isVector2===!0?"LineCurve":"LineCurve3";this.curves.push(new M9e[n](t,e))}return this}getPoint(e,t){let n=e*this.getLength(),o=this.getCurveLengths(),i=0;while(i<o.length){if(o[i]>=n){let r=o[i]-n,s=this.curves[i],a=s.getLength(),c=a===0?0:1-r/a;return s.getPointAt(c,t)}i++}return null}getLength(){let e=this.getCurveLengths();return e[e.length-1]}updateArcLengths(){this.needsUpdate=!0,this.cacheLengths=null,this.getCurveLengths()}getCurveLengths(){if(this.cacheLengths&&this.cacheLengths.length===this.curves.length)return this.cacheLengths;let e=[],t=0;for(let n=0,o=this.curves.length;n<o;n++)t+=this.curves[n].getLength(),e.push(t);return this.cacheLengths=e,e}getSpacedPoints(e=40){let t=[];for(let n=0;n<=e;n++)t.push(this.getPoint(n/e));if(this.autoClose)t.push(t[0]);return t}getPoints(e=12){let t=[],n;for(let o=0,i=this.curves;o<i.length;o++){let r=i[o],s=r.isEllipseCurve?e*2:r.isLineCurve||r.isLineCurve3?1:r.isSplineCurve?e*r.points.length:e,a=r.getPoints(s);for(let c=0;c<a.length;c++){let l=a[c];if(n&&n.equals(l))continue;t.push(l),n=l}}if(this.autoClose&&t.length>1&&!t[t.length-1].equals(t[0]))t.push(t[0]);return t}copy(e){super.copy(e),this.curves=[];for(let t=0,n=e.curves.length;t<n;t++){let o=e.curves[t];this.curves.push(o.clone())}return this.autoClose=e.autoClose,this}toJSON(){let e=super.toJSON();e.autoClose=this.autoClose,e.curves=[];for(let t=0,n=this.curves.length;t<n;t++){let o=this.curves[t];e.curves.push(o.toJSON())}return e}fromJSON(e){super.fromJSON(e),this.autoClose=e.autoClose,this.curves=[];for(let t=0,n=e.curves.length;t<n;t++){let o=e.curves[t];this.curves.push(new M9e[o.type]().fromJSON(o))}return this}}class jJ extends f_t{constructor(e){super();if(this.type="Path",this.currentPoint=new ro,e)this.setFromPoints(e)}setFromPoints(e){this.moveTo(e[0].x,e[0].y);for(let t=1,n=e.length;t<n;t++)this.lineTo(e[t].x,e[t].y);return this}moveTo(e,t){return this.currentPoint.set(e,t),this}lineTo(e,t){let n=new K9e(this.currentPoint.clone(),new ro(e,t));return this.curves.push(n),this.currentPoint.set(e,t),this}quadraticCurveTo(e,t,n,o){let i=new j9e(this.currentPoint.clone(),new ro(e,t),new ro(n,o));return this.curves.push(i),this.currentPoint.set(n,o),this}bezierCurveTo(e,t,n,o,i,r){let s=new X9e(this.currentPoint.clone(),new ro(e,t),new ro(n,o),new ro(i,r));return this.curves.push(s),this.currentPoint.set(i,r),this}splineThru(e){let t=[this.currentPoint.clone()].concat(e),n=new q9e(t);return this.curves.push(n),this.currentPoint.copy(e[e.length-1]),this}arc(e,t,n,o,i,r){let s=this.currentPoint.x,a=this.currentPoint.y;return this.absarc(e+s,t+a,n,o,i,r),this}absarc(e,t,n,o,i,r){return this.absellipse(e,t,n,n,o,i,r),this}ellipse(e,t,n,o,i,r,s,a){let c=this.currentPoint.x,l=this.currentPoint.y;return this.absellipse(e+c,t+l,n,o,i,r,s,a),this}absellipse(e,t,n,o,i,r,s,a){let c=new _0e(e,t,n,o,i,r,s,a);if(this.curves.length>0){let d=c.getPoint(0);if(!d.equals(this.currentPoint))this.lineTo(d.x,d.y)}this.curves.push(c);let l=c.getPoint(1);return this.currentPoint.copy(l),this}copy(e){return super.copy(e),this.currentPoint.copy(e.currentPoint),this}toJSON(){let e=super.toJSON();return e.currentPoint=this.currentPoint.toArray(),e}fromJSON(e){return super.fromJSON(e),this.currentPoint.fromArray(e.currentPoint),this}}class jM extends zs{constructor(e=1,t=1,n=1,o=32,i=1,r=!1,s=0,a=Math.PI*2){super();this.type="CylinderGeometry",this.parameters={radiusTop:e,radiusBottom:t,height:n,radialSegments:o,heightSegments:i,openEnded:r,thetaStart:s,thetaLength:a};let c=this;o=Math.floor(o),i=Math.floor(i);let l=[],d=[],u=[],h=[],A=0,m=[],p=n/2,g=0;if(_(),r===!1){if(e>0)f(!0);if(t>0)f(!1)}this.setIndex(l),this.setAttribute("position",new Hi(d,3)),this.setAttribute("normal",new Hi(u,3)),this.setAttribute("uv",new Hi(h,2));function _(){let y=new bt,x=new bt,C=0,I=(t-e)/n;for(let b=0;b<=i;b++){let P=[],E=b/i,B=E*(t-e)+e;for(let w=0;w<=o;w++){let T=w/o,Q=T*a+s,N=Math.sin(Q),F=Math.cos(Q);x.x=B*N,x.y=-E*n+p,x.z=B*F,d.push(x.x,x.y,x.z),y.set(N,I,F).normalize(),u.push(y.x,y.y,y.z),h.push(T,1-E),P.push(A++)}m.push(P)}for(let b=0;b<o;b++)for(let P=0;P<i;P++){let E=m[P][b],B=m[P+1][b],w=m[P+1][b+1],T=m[P][b+1];l.push(E,B,T),l.push(B,w,T),C+=6}c.addGroup(g,C,0),g+=C}function f(y){let x=A,C=new ro,I=new bt,b=0,P=y===!0?e:t,E=y===!0?1:-1;for(let w=1;w<=o;w++)d.push(0,p*E,0),u.push(0,E,0),h.push(0.5,0.5),A++;let B=A;for(let w=0;w<=o;w++){let Q=w/o*a+s,N=Math.cos(Q),F=Math.sin(Q);I.x=P*F,I.y=p*E,I.z=P*N,d.push(I.x,I.y,I.z),u.push(0,E,0),C.x=N*0.5+0.5,C.y=F*0.5*E+0.5,h.push(C.x,C.y),A++}for(let w=0;w<o;w++){let T=x+w,Q=B+w;if(y===!0)l.push(Q,Q+1,T);else l.push(Q+1,Q,T);b+=3}c.addGroup(g,b,y===!0?1:2),g+=b}}copy(e){return super.copy(e),this.parameters=Object.assign({},e.parameters),this}static fromJSON(e){return new jM(e.radiusTop,e.radiusBottom,e.height,e.radialSegments,e.heightSegments,e.openEnded,e.thetaStart,e.thetaLength)}}class f0e extends jM{constructor(e=1,t=1,n=32,o=1,i=!1,r=0,s=Math.PI*2){super(0,e,t,n,o,i,r,s);this.type="ConeGeometry",this.parameters={radius:e,height:t,radialSegments:n,heightSegments:o,openEnded:i,thetaStart:r,thetaLength:s}}static fromJSON(e){return new f0e(e.radius,e.height,e.radialSegments,e.heightSegments,e.openEnded,e.thetaStart,e.thetaLength)}}var Uhe=new bt,Whe=new bt,b9e=new bt,Xhe=new U5;class J9e extends zs{constructor(e=null,t=1){super();if(this.type="EdgesGeometry",this.parameters={geometry:e,thresholdAngle:t},e!==null){let o=Math.pow(10,4),i=Math.cos(kG*t),r=e.getIndex(),s=e.getAttribute("position"),a=r?r.count:s.count,c=[0,0,0],l=["a","b","c"],d=[,,,],u={},h=[];for(let A=0;A<a;A+=3){if(r)c[0]=r.getX(A),c[1]=r.getX(A+1),c[2]=r.getX(A+2);else c[0]=A,c[1]=A+1,c[2]=A+2;let{a:m,b:p,c:g}=Xhe;if(m.fromBufferAttribute(s,c[0]),p.fromBufferAttribute(s,c[1]),g.fromBufferAttribute(s,c[2]),Xhe.getNormal(b9e),d[0]=`${Math.round(m.x*o)},${Math.round(m.y*o)},${Math.round(m.z*o)}`,d[1]=`${Math.round(p.x*o)},${Math.round(p.y*o)},${Math.round(p.z*o)}`,d[2]=`${Math.round(g.x*o)},${Math.round(g.y*o)},${Math.round(g.z*o)}`,d[0]===d[1]||d[1]===d[2]||d[2]===d[0])continue;for(let _=0;_<3;_++){let f=(_+1)%3,y=d[_],x=d[f],C=Xhe[l[_]],I=Xhe[l[f]],b=`${y}_${x}`,P=`${x}_${y}`;if(P in u&&u[P]){if(b9e.dot(u[P].normal)<=i)h.push(C.x,C.y,C.z),h.push(I.x,I.y,I.z);u[P]=null}else if(!(b in u))u[b]={index0:c[_],index1:c[f],normal:b9e.clone()}}}for(let A in u)if(u[A]){let{index0:m,index1:p}=u[A];Uhe.fromBufferAttribute(s,m),Whe.fromBufferAttribute(s,p),h.push(Uhe.x,Uhe.y,Uhe.z),h.push(Whe.x,Whe.y,Whe.z)}this.setAttribute("position",new Hi(h,3))}}copy(e){return super.copy(e),this.parameters=Object.assign({},e.parameters),this}}class y0e extends jJ{constructor(e){super(e);this.uuid=lI(),this.type="Shape",this.holes=[]}getPointsHoles(e){let t=[];for(let n=0,o=this.holes.length;n<o;n++)t[n]=this.holes[n].getPoints(e);return t}extractPoints(e){return{shape:this.getPoints(e),holes:this.getPointsHoles(e)}}copy(e){super.copy(e),this.holes=[];for(let t=0,n=e.holes.length;t<n;t++){let o=e.holes[t];this.holes.push(o.clone())}return this}toJSON(){let e=super.toJSON();e.uuid=this.uuid,e.holes=[];for(let t=0,n=this.holes.length;t<n;t++){let o=this.holes[t];e.holes.push(o.toJSON())}return e}fromJSON(e){super.fromJSON(e),this.uuid=e.uuid,this.holes=[];for(let t=0,n=e.holes.length;t<n;t++){let o=e.holes[t];this.holes.push(new jJ().fromJSON(o))}return this}}var nco={triangulate:function(e,t,n=2){let o=t&&t.length,i=o?t[0]*n:e.length,r=y_t(e,0,i,n,!0),s=[];if(!r||r.next===r.prev)return s;let a,c,l,d,u,h,A;if(o)r=aco(e,t,r,n);if(e.length>80*n){a=l=e[0],c=d=e[1];for(let m=n;m<i;m+=n){if(u=e[m],h=e[m+1],u<a)a=u;if(h<c)c=h;if(u>l)l=u;if(h>d)d=h}A=Math.max(l-a,d-c),A=A!==0?32767/A:0}return qJ(r,s,n,a,c,A,0),s}};function y_t(e,t,n,o,i){let r,s;if(i===fco(e,t,n,o)>0)for(r=t;r<n;r+=o)s=wAt(r,e[r],e[r+1],s);else for(r=n-o;r>=t;r-=o)s=wAt(r,e[r],e[r+1],s);if(s&&x0e(s,s.next))$J(s),s=s.next;return s}function _Q(e,t){if(!e)return e;if(!t)t=e;let n=e,o;do if(o=!1,!n.steiner&&(x0e(n,n.next)||zh(n.prev,n,n.next)===0)){if($J(n),n=t=n.prev,n===n.next)break;o=!0}else n=n.next;while(o||n!==t);return t}function qJ(e,t,n,o,i,r,s){if(!e)return;if(!s&&r)hco(e,o,i,r);let a=e,c,l;while(e.prev!==e.next){if(c=e.prev,l=e.next,r?ico(e,o,i,r):oco(e)){t.push(c.i/n|0),t.push(e.i/n|0),t.push(l.i/n|0),$J(e),e=l.next,a=l.next;continue}if(e=l,e===a){if(!s)qJ(_Q(e),t,n,o,i,r,1);else if(s===1)e=rco(_Q(e),t,n),qJ(e,t,n,o,i,r,2);else if(s===2)sco(e,t,n,o,i,r);break}}}function oco(e){let t=e.prev,n=e,o=e.next;if(zh(t,n,o)>=0)return!1;let i=t.x,r=n.x,s=o.x,a=t.y,c=n.y,l=o.y,d=i<r?i<s?i:s:r<s?r:s,u=a<c?a<l?a:l:c<l?c:l,h=i>r?i>s?i:s:r>s?r:s,A=a>c?a>l?a:l:c>l?c:l,m=o.next;while(m!==t){if(m.x>=d&&m.x<=h&&m.y>=u&&m.y<=A&&QG(i,a,r,c,s,l,m.x,m.y)&&zh(m.prev,m,m.next)>=0)return!1;m=m.next}return!0}function ico(e,t,n,o){let i=e.prev,r=e,s=e.next;if(zh(i,r,s)>=0)return!1;let a=i.x,c=r.x,l=s.x,d=i.y,u=r.y,h=s.y,A=a<c?a<l?a:l:c<l?c:l,m=d<u?d<h?d:h:u<h?u:h,p=a>c?a>l?a:l:c>l?c:l,g=d>u?d>h?d:h:u>h?u:h,_=B9e(A,m,t,n,o),f=B9e(p,g,t,n,o),{prevZ:y,nextZ:x}=e;while(y&&y.z>=_&&x&&x.z<=f){if(y.x>=A&&y.x<=p&&y.y>=m&&y.y<=g&&y!==i&&y!==s&&QG(a,d,c,u,l,h,y.x,y.y)&&zh(y.prev,y,y.next)>=0)return!1;if(y=y.prevZ,x.x>=A&&x.x<=p&&x.y>=m&&x.y<=g&&x!==i&&x!==s&&QG(a,d,c,u,l,h,x.x,x.y)&&zh(x.prev,x,x.next)>=0)return!1;x=x.nextZ}while(y&&y.z>=_){if(y.x>=A&&y.x<=p&&y.y>=m&&y.y<=g&&y!==i&&y!==s&&QG(a,d,c,u,l,h,y.x,y.y)&&zh(y.prev,y,y.next)>=0)return!1;y=y.prevZ}while(x&&x.z<=f){if(x.x>=A&&x.x<=p&&x.y>=m&&x.y<=g&&x!==i&&x!==s&&QG(a,d,c,u,l,h,x.x,x.y)&&zh(x.prev,x,x.next)>=0)return!1;x=x.nextZ}return!0}function rco(e,t,n){let o=e;do{let i=o.prev,r=o.next.next;if(!x0e(i,r)&&x_t(i,o,o.next,r)&&JJ(i,r)&&JJ(r,i))t.push(i.i/n|0),t.push(o.i/n|0),t.push(r.i/n|0),$J(o),$J(o.next),o=e=r;o=o.next}while(o!==e);return _Q(o)}function sco(e,t,n,o,i,r){let s=e;do{let a=s.next.next;while(a!==s.prev){if(s.i!==a.i&&Aco(s,a)){let c=C_t(s,a);s=_Q(s,s.next),c=_Q(c,c.next),qJ(s,t,n,o,i,r,0),qJ(c,t,n,o,i,r,0);return}a=a.next}s=s.next}while(s!==e)}function aco(e,t,n,o){let i=[],r,s,a,c,l;for(r=0,s=t.length;r<s;r++){if(a=t[r]*o,c=r<s-1?t[r+1]*o:e.length,l=y_t(e,a,c,o,!1),l===l.next)l.steiner=!0;i.push(pco(l))}i.sort(cco);for(r=0;r<i.length;r++)n=lco(i[r],n);return n}function cco(e,t){return e.x-t.x}function lco(e,t){let n=dco(e,t);if(!n)return t;let o=C_t(n,e);return _Q(o,o.next),_Q(n,n.next)}function dco(e,t){let n=t,o=-1/0,i,{x:r,y:s}=e;do{if(s<=n.y&&s>=n.next.y&&n.next.y!==n.y){let h=n.x+(s-n.y)*(n.next.x-n.x)/(n.next.y-n.y);if(h<=r&&h>o){if(o=h,i=n.x<n.next.x?n:n.next,h===r)return i}}n=n.next}while(n!==t);if(!i)return null;let a=i,c=i.x,l=i.y,d=1/0,u;n=i;do{if(r>=n.x&&n.x>=c&&r!==n.x&&QG(s<l?r:o,s,c,l,s<l?o:r,s,n.x,n.y)){if(u=Math.abs(s-n.y)/(r-n.x),JJ(n,e)&&(u<d||u===d&&(n.x>i.x||n.x===i.x&&uco(i,n))))i=n,d=u}n=n.next}while(n!==a);return i}function uco(e,t){return zh(e.prev,e,t.prev)<0&&zh(t.next,e,e.next)<0}function hco(e,t,n,o){let i=e;do{if(i.z===0)i.z=B9e(i.x,i.y,t,n,o);i.prevZ=i.prev,i.nextZ=i.next,i=i.next}while(i!==e);i.prevZ.nextZ=null,i.prevZ=null,mco(i)}function mco(e){let t,n,o,i,r,s,a,c,l=1;do{n=e,e=null,r=null,s=0;while(n){s++,o=n,a=0;for(t=0;t<l;t++)if(a++,o=o.nextZ,!o)break;c=l;while(a>0||c>0&&o){if(a!==0&&(c===0||!o||n.z<=o.z))i=n,n=n.nextZ,a--;else i=o,o=o.nextZ,c--;if(r)r.nextZ=i;else e=i;i.prevZ=r,r=i}n=o}r.nextZ=null,l*=2}while(s>1);return e}function B9e(e,t,n,o,i){return e=(e-n)*i|0,t=(t-o)*i|0,e=(e|e<<8)&16711935,e=(e|e<<4)&252645135,e=(e|e<<2)&858993459,e=(e|e<<1)&1431655765,t=(t|t<<8)&16711935,t=(t|t<<4)&252645135,t=(t|t<<2)&858993459,t=(t|t<<1)&1431655765,e|t<<1}function pco(e){let t=e,n=e;do{if(t.x<n.x||t.x===n.x&&t.y<n.y)n=t;t=t.next}while(t!==e);return n}function QG(e,t,n,o,i,r,s,a){return(i-s)*(t-a)>=(e-s)*(r-a)&&(e-s)*(o-a)>=(n-s)*(t-a)&&(n-s)*(r-a)>=(i-s)*(o-a)}function Aco(e,t){return e.next.i!==t.i&&e.prev.i!==t.i&&!_co(e,t)&&(JJ(e,t)&&JJ(t,e)&&gco(e,t)&&(zh(e.prev,e,t.prev)||zh(e,t.prev,t))||x0e(e,t)&&zh(e.prev,e,e.next)>0&&zh(t.prev,t,t.next)>0)}function zh(e,t,n){return(t.y-e.y)*(n.x-t.x)-(t.x-e.x)*(n.y-t.y)}function x0e(e,t){return e.x===t.x&&e.y===t.y}function x_t(e,t,n,o){let i=jhe(zh(e,t,n)),r=jhe(zh(e,t,o)),s=jhe(zh(n,o,e)),a=jhe(zh(n,o,t));if(i!==r&&s!==a)return!0;if(i===0&&Khe(e,n,t))return!0;if(r===0&&Khe(e,o,t))return!0;if(s===0&&Khe(n,e,o))return!0;if(a===0&&Khe(n,t,o))return!0;return!1}function Khe(e,t,n){return t.x<=Math.max(e.x,n.x)&&t.x>=Math.min(e.x,n.x)&&t.y<=Math.max(e.y,n.y)&&t.y>=Math.min(e.y,n.y)}function jhe(e){return e>0?1:e<0?-1:0}function _co(e,t){let n=e;do{if(n.i!==e.i&&n.next.i!==e.i&&n.i!==t.i&&n.next.i!==t.i&&x_t(n,n.next,e,t))return!0;n=n.next}while(n!==e);return!1}function JJ(e,t){return zh(e.prev,e,e.next)<0?zh(e,t,e.next)>=0&&zh(e,e.prev,t)>=0:zh(e,t,e.prev)<0||zh(e,e.next,t)<0}function gco(e,t){let n=e,o=!1,i=(e.x+t.x)/2,r=(e.y+t.y)/2;do{if(n.y>r!==n.next.y>r&&n.next.y!==n.y&&i<(n.next.x-n.x)*(r-n.y)/(n.next.y-n.y)+n.x)o=!o;n=n.next}while(n!==e);return o}function C_t(e,t){let n=new w9e(e.i,e.x,e.y),o=new w9e(t.i,t.x,t.y),i=e.next,r=t.prev;return e.next=t,t.prev=e,n.next=i,i.prev=n,o.next=n,n.prev=o,r.next=o,o.prev=r,o}function wAt(e,t,n,o){let i=new w9e(e,t,n);if(!o)i.prev=i,i.next=i;else i.next=o.next,i.prev=o,o.next.prev=i,o.next=i;return i}function $J(e){if(e.next.prev=e.prev,e.prev.next=e.next,e.prevZ)e.prevZ.nextZ=e.nextZ;if(e.nextZ)e.nextZ.prevZ=e.prevZ}function w9e(e,t,n){this.i=e,this.x=t,this.y=n,this.prev=null,this.next=null,this.z=0,this.prevZ=null,this.nextZ=null,this.steiner=!1}function fco(e,t,n,o){let i=0;for(let r=t,s=n-o;r<n;r+=o)i+=(e[s]-e[r])*(e[r+1]+e[s+1]),s=r;return i}class pQ{static area(e){let t=e.length,n=0;for(let o=t-1,i=0;i<t;o=i++)n+=e[o].x*e[i].y-e[i].x*e[o].y;return n*0.5}static isClockWise(e){return pQ.area(e)<0}static triangulateShape(e,t){let n=[],o=[],i=[];TAt(e),DAt(n,e);let r=e.length;t.forEach(TAt);for(let a=0;a<t.length;a++)o.push(r),r+=t[a].length,DAt(n,t[a]);let s=nco.triangulate(n,o);for(let a=0;a<s.length;a+=3)i.push(s.slice(a,a+3));return i}}function TAt(e){let t=e.length;if(t>2&&e[t-1].equals(e[0]))e.pop()}function DAt(e,t){for(let n=0;n<t.length;n++)e.push(t[n].x),e.push(t[n].y)}class C0e extends zs{constructor(e=new y0e([new ro(0.5,0.5),new ro(-0.5,0.5),new ro(-0.5,-0.5),new ro(0.5,-0.5)]),t={}){super();this.type="ExtrudeGeometry",this.parameters={shapes:e,options:t},e=Array.isArray(e)?e:[e];let n=this,o=[],i=[];for(let s=0,a=e.length;s<a;s++){let c=e[s];r(c)}this.setAttribute("position",new Hi(o,3)),this.setAttribute("uv",new Hi(i,2)),this.computeVertexNormals();function r(s){let a=[],c=t.curveSegments!==void 0?t.curveSegments:12,l=t.steps!==void 0?t.steps:1,d=t.depth!==void 0?t.depth:1,u=t.bevelEnabled!==void 0?t.bevelEnabled:!0,h=t.bevelThickness!==void 0?t.bevelThickness:0.2,A=t.bevelSize!==void 0?t.bevelSize:h-0.1,m=t.bevelOffset!==void 0?t.bevelOffset:0,p=t.bevelSegments!==void 0?t.bevelSegments:3,g=t.extrudePath,_=t.UVGenerator!==void 0?t.UVGenerator:yco,f,y=!1,x,C,I,b;if(g)f=g.getSpacedPoints(l),y=!0,u=!1,x=g.computeFrenetFrames(l,!1),C=new bt,I=new bt,b=new bt;if(!u)p=0,h=0,A=0,m=0;let P=s.extractPoints(c),{shape:E,holes:B}=P;if(!pQ.isClockWise(E)){E=E.reverse();for(let se=0,le=B.length;se<le;se++){let he=B[se];if(pQ.isClockWise(he))B[se]=he.reverse()}}let T=pQ.triangulateShape(E,B),Q=E;for(let se=0,le=B.length;se<le;se++){let he=B[se];E=E.concat(he)}function N(se,le,he){if(!le)console.error("THREE.ExtrudeGeometry: vec does not exist");return se.clone().addScaledVector(le,he)}let F=E.length,H=T.length;function z(se,le,he){let ue,Ae,_e,Pe=se.x-le.x,Ee=se.y-le.y,Te=he.x-se.x,be=he.y-se.y,me=Pe*Pe+Ee*Ee,ye=Pe*be-Ee*Te;if(Math.abs(ye)>Number.EPSILON){let Ce=Math.sqrt(me),ve=Math.sqrt(Te*Te+be*be),De=le.x-Ee/Ce,Ze=le.y+Pe/Ce,st=he.x-be/ve,et=he.y+Te/ve,lt=((st-De)*be-(et-Ze)*Te)/(Pe*be-Ee*Te);ue=De+Pe*lt-se.x,Ae=Ze+Ee*lt-se.y;let it=ue*ue+Ae*Ae;if(it<=2)return new ro(ue,Ae);else _e=Math.sqrt(it/2)}else{let Ce=!1;if(Pe>Number.EPSILON){if(Te>Number.EPSILON)Ce=!0}else if(Pe<-Number.EPSILON){if(Te<-Number.EPSILON)Ce=!0}else if(Math.sign(Ee)===Math.sign(be))Ce=!0;if(Ce)ue=-Ee,Ae=Pe,_e=Math.sqrt(me);else ue=Pe,Ae=Ee,_e=Math.sqrt(me/2)}return new ro(ue/_e,Ae/_e)}let Y=[];for(let se=0,le=Q.length,he=le-1,ue=se+1;se<le;se++,he++,ue++){if(he===le)he=0;if(ue===le)ue=0;Y[se]=z(Q[se],Q[he],Q[ue])}let U=[],X,V=Y.concat();for(let se=0,le=B.length;se<le;se++){let he=B[se];X=[];for(let ue=0,Ae=he.length,_e=Ae-1,Pe=ue+1;ue<Ae;ue++,_e++,Pe++){if(_e===Ae)_e=0;if(Pe===Ae)Pe=0;X[ue]=z(he[ue],he[_e],he[Pe])}U.push(X),V=V.concat(X)}for(let se=0;se<p;se++){let le=se/p,he=h*Math.cos(le*Math.PI/2),ue=A*Math.sin(le*Math.PI/2)+m;for(let Ae=0,_e=Q.length;Ae<_e;Ae++){let Pe=N(Q[Ae],Y[Ae],ue);ce(Pe.x,Pe.y,-he)}for(let Ae=0,_e=B.length;Ae<_e;Ae++){let Pe=B[Ae];X=U[Ae];for(let Ee=0,Te=Pe.length;Ee<Te;Ee++){let be=N(Pe[Ee],X[Ee],ue);ce(be.x,be.y,-he)}}}let W=A+m;for(let se=0;se<F;se++){let le=u?N(E[se],V[se],W):E[se];if(!y)ce(le.x,le.y,0);else I.copy(x.normals[0]).multiplyScalar(le.x),C.copy(x.binormals[0]).multiplyScalar(le.y),b.copy(f[0]).add(I).add(C),ce(b.x,b.y,b.z)}for(let se=1;se<=l;se++)for(let le=0;le<F;le++){let he=u?N(E[le],V[le],W):E[le];if(!y)ce(he.x,he.y,d/l*se);else I.copy(x.normals[se]).multiplyScalar(he.x),C.copy(x.binormals[se]).multiplyScalar(he.y),b.copy(f[se]).add(I).add(C),ce(b.x,b.y,b.z)}for(let se=p-1;se>=0;se--){let le=se/p,he=h*Math.cos(le*Math.PI/2),ue=A*Math.sin(le*Math.PI/2)+m;for(let Ae=0,_e=Q.length;Ae<_e;Ae++){let Pe=N(Q[Ae],Y[Ae],ue);ce(Pe.x,Pe.y,d+he)}for(let Ae=0,_e=B.length;Ae<_e;Ae++){let Pe=B[Ae];X=U[Ae];for(let Ee=0,Te=Pe.length;Ee<Te;Ee++){let be=N(Pe[Ee],X[Ee],ue);if(!y)ce(be.x,be.y,d+he);else ce(be.x,be.y+f[l-1].y,f[l-1].x+he)}}}j(),q();function j(){let se=o.length/3;if(u){let le=0,he=F*le;for(let ue=0;ue<H;ue++){let Ae=T[ue];oe(Ae[2]+he,Ae[1]+he,Ae[0]+he)}le=l+p*2,he=F*le;for(let ue=0;ue<H;ue++){let Ae=T[ue];oe(Ae[0]+he,Ae[1]+he,Ae[2]+he)}}else{for(let le=0;le<H;le++){let he=T[le];oe(he[2],he[1],he[0])}for(let le=0;le<H;le++){let he=T[le];oe(he[0]+F*l,he[1]+F*l,he[2]+F*l)}}n.addGroup(se,o.length/3-se,0)}function q(){let se=o.length/3,le=0;ne(Q,le),le+=Q.length;for(let he=0,ue=B.length;he<ue;he++){let Ae=B[he];ne(Ae,le),le+=Ae.length}n.addGroup(se,o.length/3-se,1)}function ne(se,le){let he=se.length;while(--he>=0){let ue=he,Ae=he-1;if(Ae<0)Ae=se.length-1;for(let _e=0,Pe=l+p*2;_e<Pe;_e++){let Ee=F*_e,Te=F*(_e+1),be=le+ue+Ee,me=le+Ae+Ee,ye=le+Ae+Te,Ce=le+ue+Te;ie(be,me,ye,Ce)}}}function ce(se,le,he){a.push(se),a.push(le),a.push(he)}function oe(se,le,he){J(se),J(le),J(he);let ue=o.length/3,Ae=_.generateTopUV(n,o,ue-3,ue-2,ue-1);ee(Ae[0]),ee(Ae[1]),ee(Ae[2])}function ie(se,le,he,ue){J(se),J(le),J(ue),J(le),J(he),J(ue);let Ae=o.length/3,_e=_.generateSideWallUV(n,o,Ae-6,Ae-3,Ae-2,Ae-1);ee(_e[0]),ee(_e[1]),ee(_e[3]),ee(_e[1]),ee(_e[2]),ee(_e[3])}function J(se){o.push(a[se*3+0]),o.push(a[se*3+1]),o.push(a[se*3+2])}function ee(se){i.push(se.x),i.push(se.y)}}}copy(e){return super.copy(e),this.parameters=Object.assign({},e.parameters),this}toJSON(){let e=super.toJSON(),t=this.parameters.shapes,n=this.parameters.options;return xco(t,n,e)}static fromJSON(e,t){let n=[];for(let i=0,r=e.shapes.length;i<r;i++){let s=t[e.shapes[i]];n.push(s)}let o=e.options.extrudePath;if(o!==void 0)e.options.extrudePath=new M9e[o.type]().fromJSON(o);return new C0e(n,e.options)}}var yco={generateTopUV:function(e,t,n,o,i){let r=t[n*3],s=t[n*3+1],a=t[o*3],c=t[o*3+1],l=t[i*3],d=t[i*3+1];return[new ro(r,s),new ro(a,c),new ro(l,d)]},generateSideWallUV:function(e,t,n,o,i,r){let s=t[n*3],a=t[n*3+1],c=t[n*3+2],l=t[o*3],d=t[o*3+1],u=t[o*3+2],h=t[i*3],A=t[i*3+1],m=t[i*3+2],p=t[r*3],g=t[r*3+1],_=t[r*3+2];if(Math.abs(a-d)<Math.abs(s-l))return[new ro(s,1-c),new ro(l,1-u),new ro(h,1-m),new ro(p,1-_)];else return[new ro(a,1-c),new ro(d,1-u),new ro(A,1-m),new ro(g,1-_)]}};function xco(e,t,n){if(n.shapes=[],Array.isArray(e))for(let o=0,i=e.length;o<i;o++){let r=e[o];n.shapes.push(r.uuid)}else n.shapes.push(e.uuid);if(n.options=Object.assign({},t),t.extrudePath!==void 0)n.options.extrudePath=t.extrudePath.toJSON();return n}class qM extends zs{constructor(e=1,t=32,n=16,o=0,i=Math.PI*2,r=0,s=Math.PI){super();this.type="SphereGeometry",this.parameters={radius:e,widthSegments:t,heightSegments:n,phiStart:o,phiLength:i,thetaStart:r,thetaLength:s},t=Math.max(3,Math.floor(t)),n=Math.max(2,Math.floor(n));let a=Math.min(r+s,Math.PI),c=0,l=[],d=new bt,u=new bt,h=[],A=[],m=[],p=[];for(let g=0;g<=n;g++){let _=[],f=g/n,y=0;if(g===0&&r===0)y=0.5/t;else if(g===n&&a===Math.PI)y=-0.5/t;for(let x=0;x<=t;x++){let C=x/t;d.x=-e*Math.cos(o+C*i)*Math.sin(r+f*s),d.y=e*Math.cos(r+f*s),d.z=e*Math.sin(o+C*i)*Math.sin(r+f*s),A.push(d.x,d.y,d.z),u.copy(d).normalize(),m.push(u.x,u.y,u.z),p.push(C+y,1-f),_.push(c++)}l.push(_)}for(let g=0;g<n;g++)for(let _=0;_<t;_++){let f=l[g][_+1],y=l[g][_],x=l[g+1][_],C=l[g+1][_+1];if(g!==0||r>0)h.push(f,y,C);if(g!==n-1||a<Math.PI)h.push(y,x,C)}this.setIndex(h),this.setAttribute("position",new Hi(A,3)),this.setAttribute("normal",new Hi(m,3)),this.setAttribute("uv",new Hi(p,2))}copy(e){return super.copy(e),this.parameters=Object.assign({},e.parameters),this}static fromJSON(e){return new qM(e.radius,e.widthSegments,e.heightSegments,e.phiStart,e.phiLength,e.thetaStart,e.thetaLength)}}class fs extends BA{constructor(e){super();this.isMeshStandardMaterial=!0,this.defines={STANDARD:""},this.type="MeshStandardMaterial",this.color=new Po(16777215),this.roughness=1,this.metalness=0,this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new Po(0),this.emissiveIntensity=1,this.emissiveMap=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=0,this.normalScale=new ro(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.roughnessMap=null,this.metalnessMap=null,this.alphaMap=null,this.envMap=null,this.envMapRotation=new MA,this.envMapIntensity=1,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap="round",this.wireframeLinejoin="round",this.flatShading=!1,this.fog=!0,this.setValues(e)}copy(e){return super.copy(e),this.defines={STANDARD:""},this.color.copy(e.color),this.roughness=e.roughness,this.metalness=e.metalness,this.map=e.map,this.lightMap=e.lightMap,this.lightMapIntensity=e.lightMapIntensity,this.aoMap=e.aoMap,this.aoMapIntensity=e.aoMapIntensity,this.emissive.copy(e.emissive),this.emissiveMap=e.emissiveMap,this.emissiveIntensity=e.emissiveIntensity,this.bumpMap=e.bumpMap,this.bumpScale=e.bumpScale,this.normalMap=e.normalMap,this.normalMapType=e.normalMapType,this.normalScale.copy(e.normalScale),this.displacementMap=e.displacementMap,this.displacementScale=e.displacementScale,this.displacementBias=e.displacementBias,this.roughnessMap=e.roughnessMap,this.metalnessMap=e.metalnessMap,this.alphaMap=e.alphaMap,this.envMap=e.envMap,this.envMapRotation.copy(e.envMapRotation),this.envMapIntensity=e.envMapIntensity,this.wireframe=e.wireframe,this.wireframeLinewidth=e.wireframeLinewidth,this.wireframeLinecap=e.wireframeLinecap,this.wireframeLinejoin=e.wireframeLinejoin,this.flatShading=e.flatShading,this.fog=e.fog,this}}class TA extends fs{constructor(e){super();this.isMeshPhysicalMaterial=!0,this.defines={STANDARD:"",PHYSICAL:""},this.type="MeshPhysicalMaterial",this.anisotropyRotation=0,this.anisotropyMap=null,this.clearcoatMap=null,this.clearcoatRoughness=0,this.clearcoatRoughnessMap=null,this.clearcoatNormalScale=new ro(1,1),this.clearcoatNormalMap=null,this.ior=1.5,Object.defineProperty(this,"reflectivity",{get:function(){return Tp(2.5*(this.ior-1)/(this.ior+1),0,1)},set:function(t){this.ior=(1+0.4*t)/(1-0.4*t)}}),this.iridescenceMap=null,this.iridescenceIOR=1.3,this.iridescenceThicknessRange=[100,400],this.iridescenceThicknessMap=null,this.sheenColor=new Po(0),this.sheenColorMap=null,this.sheenRoughness=1,this.sheenRoughnessMap=null,this.transmissionMap=null,this.thickness=0,this.thicknessMap=null,this.attenuationDistance=1/0,this.attenuationColor=new Po(1,1,1),this.specularIntensity=1,this.specularIntensityMap=null,this.specularColor=new Po(1,1,1),this.specularColorMap=null,this._anisotropy=0,this._clearcoat=0,this._dispersion=0,this._iridescence=0,this._sheen=0,this._transmission=0,this.setValues(e)}get anisotropy(){return this._anisotropy}set anisotropy(e){if(this._anisotropy>0!==e>0)this.version++;this._anisotropy=e}get clearcoat(){return this._clearcoat}set clearcoat(e){if(this._clearcoat>0!==e>0)this.version++;this._clearcoat=e}get iridescence(){return this._iridescence}set iridescence(e){if(this._iridescence>0!==e>0)this.version++;this._iridescence=e}get dispersion(){return this._dispersion}set dispersion(e){if(this._dispersion>0!==e>0)this.version++;this._dispersion=e}get sheen(){return this._sheen}set sheen(e){if(this._sheen>0!==e>0)this.version++;this._sheen=e}get transmission(){return this._transmission}set transmission(e){if(this._transmission>0!==e>0)this.version++;this._transmission=e}copy(e){return super.copy(e),this.defines={STANDARD:"",PHYSICAL:""},this.anisotropy=e.anisotropy,this.anisotropyRotation=e.anisotropyRotation,this.anisotropyMap=e.anisotropyMap,this.clearcoat=e.clearcoat,this.clearcoatMap=e.clearcoatMap,this.clearcoatRoughness=e.clearcoatRoughness,this.clearcoatRoughnessMap=e.clearcoatRoughnessMap,this.clearcoatNormalMap=e.clearcoatNormalMap,this.clearcoatNormalScale.copy(e.clearcoatNormalScale),this.dispersion=e.dispersion,this.ior=e.ior,this.iridescence=e.iridescence,this.iridescenceMap=e.iridescenceMap,this.iridescenceIOR=e.iridescenceIOR,this.iridescenceThicknessRange=[...e.iridescenceThicknessRange],this.iridescenceThicknessMap=e.iridescenceThicknessMap,this.sheen=e.sheen,this.sheenColor.copy(e.sheenColor),this.sheenColorMap=e.sheenColorMap,this.sheenRoughness=e.sheenRoughness,this.sheenRoughnessMap=e.sheenRoughnessMap,this.transmission=e.transmission,this.transmissionMap=e.transmissionMap,this.thickness=e.thickness,this.thicknessMap=e.thicknessMap,this.attenuationDistance=e.attenuationDistance,this.attenuationColor.copy(e.attenuationColor),this.specularIntensity=e.specularIntensity,this.specularIntensityMap=e.specularIntensityMap,this.specularColor.copy(e.specularColor),this.specularColorMap=e.specularColorMap,this}}class fQ extends BA{constructor(e){super();this.isMeshPhongMaterial=!0,this.type="MeshPhongMaterial",this.color=new Po(16777215),this.specular=new Po(1118481),this.shininess=30,this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new Po(0),this.emissiveIntensity=1,this.emissiveMap=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=0,this.normalScale=new ro(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.specularMap=null,this.alphaMap=null,this.envMap=null,this.envMapRotation=new MA,this.combine=0,this.reflectivity=1,this.refractionRatio=0.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap="round",this.wireframeLinejoin="round",this.flatShading=!1,this.fog=!0,this.setValues(e)}copy(e){return super.copy(e),this.color.copy(e.color),this.specular.copy(e.specular),this.shininess=e.shininess,this.map=e.map,this.lightMap=e.lightMap,this.lightMapIntensity=e.lightMapIntensity,this.aoMap=e.aoMap,this.aoMapIntensity=e.aoMapIntensity,this.emissive.copy(e.emissive),this.emissiveMap=e.emissiveMap,this.emissiveIntensity=e.emissiveIntensity,this.bumpMap=e.bumpMap,this.bumpScale=e.bumpScale,this.normalMap=e.normalMap,this.normalMapType=e.normalMapType,this.normalScale.copy(e.normalScale),this.displacementMap=e.displacementMap,this.displacementScale=e.displacementScale,this.displacementBias=e.displacementBias,this.specularMap=e.specularMap,this.alphaMap=e.alphaMap,this.envMap=e.envMap,this.envMapRotation.copy(e.envMapRotation),this.combine=e.combine,this.reflectivity=e.reflectivity,this.refractionRatio=e.refractionRatio,this.wireframe=e.wireframe,this.wireframeLinewidth=e.wireframeLinewidth,this.wireframeLinecap=e.wireframeLinecap,this.wireframeLinejoin=e.wireframeLinejoin,this.flatShading=e.flatShading,this.fog=e.fog,this}}function qhe(e,t,n){if(!e||!n&&e.constructor===t)return e;if(typeof t.BYTES_PER_ELEMENT==="number")return new t(e);return Array.prototype.slice.call(e)}function Cco(e){return ArrayBuffer.isView(e)&&!(e instanceof DataView)}function Ico(e){function t(i,r){return e[i]-e[r]}let n=e.length,o=Array(n);for(let i=0;i!==n;++i)o[i]=i;return o.sort(t),o}function NAt(e,t,n){let o=e.length,i=new e.constructor(o);for(let r=0,s=0;s!==o;++r){let a=n[r]*t;for(let c=0;c!==t;++c)i[s++]=e[a+c]}return i}function I_t(e,t,n,o){let i=1,r=e[0];while(r!==void 0&&r[o]===void 0)r=e[i++];if(r===void 0)return;let s=r[o];if(s===void 0)return;if(Array.isArray(s))do{if(s=r[o],s!==void 0)t.push(r.time),n.push.apply(n,s);r=e[i++]}while(r!==void 0);else if(s.toArray!==void 0)do{if(s=r[o],s!==void 0)t.push(r.time),s.toArray(n,n.length);r=e[i++]}while(r!==void 0);else do{if(s=r[o],s!==void 0)t.push(r.time),n.push(s);r=e[i++]}while(r!==void 0)}class yQ{constructor(e,t,n,o){this.parameterPositions=e,this._cachedIndex=0,this.resultBuffer=o!==void 0?o:new t.constructor(n),this.sampleValues=t,this.valueSize=n,this.settings=null,this.DefaultSettings_={}}evaluate(e){let t=this.parameterPositions,n=this._cachedIndex,o=t[n],i=t[n-1];e:{t:{let r;n:{o:if(!(e<o)){for(let s=n+2;;){if(o===void 0){if(e<i)break o;return n=t.length,this._cachedIndex=n,this.copySampleValue_(n-1)}if(n===s)break;if(i=o,o=t[++n],e<o)break t}r=t.length;break n}if(!(e>=i)){let s=t[1];if(e<s)n=2,i=s;for(let a=n-2;;){if(i===void 0)return this._cachedIndex=0,this.copySampleValue_(0);if(n===a)break;if(o=i,i=t[--n-1],e>=i)break t}r=n,n=0;break n}break e}while(n<r){let s=n+r>>>1;if(e<t[s])r=s;else n=s+1}if(o=t[n],i=t[n-1],i===void 0)return this._cachedIndex=0,this.copySampleValue_(0);if(o===void 0)return n=t.length,this._cachedIndex=n,this.copySampleValue_(n-1)}this._cachedIndex=n,this.intervalChanged_(n,i,o)}return this.interpolate_(n,i,e,o)}getSettings_(){return this.settings||this.DefaultSettings_}copySampleValue_(e){let t=this.resultBuffer,n=this.sampleValues,o=this.valueSize,i=e*o;for(let r=0;r!==o;++r)t[r]=n[i+r];return t}interpolate_(){throw Error("call to abstract method")}intervalChanged_(){}}class b_t extends yQ{constructor(e,t,n,o){super(e,t,n,o);this._weightPrev=-0,this._offsetPrev=-0,this._weightNext=-0,this._offsetNext=-0,this.DefaultSettings_={endingStart:2400,endingEnd:2400}}intervalChanged_(e,t,n){let o=this.parameterPositions,i=e-2,r=e+1,s=o[i],a=o[r];if(s===void 0)switch(this.getSettings_().endingStart){case 2401:i=e,s=2*t-n;break;case 2402:i=o.length-2,s=t+o[i]-o[i+1];break;default:i=e,s=n}if(a===void 0)switch(this.getSettings_().endingEnd){case 2401:r=e,a=2*n-t;break;case 2402:r=1,a=n+o[1]-o[0];break;default:r=e-1,a=t}let c=(n-t)*0.5,l=this.valueSize;this._weightPrev=c/(t-s),this._weightNext=c/(a-n),this._offsetPrev=i*l,this._offsetNext=r*l}interpolate_(e,t,n,o){let i=this.resultBuffer,r=this.sampleValues,s=this.valueSize,a=e*s,c=a-s,l=this._offsetPrev,d=this._offsetNext,u=this._weightPrev,h=this._weightNext,A=(n-t)/(o-t),m=A*A,p=m*A,g=-u*p+2*u*m-u*A,_=(1+u)*p+(-1.5-2*u)*m+(-0.5+u)*A+1,f=(-1-h)*p+(1.5+h)*m+0.5*A,y=h*p-h*m;for(let x=0;x!==s;++x)i[x]=g*r[l+x]+_*r[c+x]+f*r[a+x]+y*r[d+x];return i}}class S_t extends yQ{constructor(e,t,n,o){super(e,t,n,o)}interpolate_(e,t,n,o){let i=this.resultBuffer,r=this.sampleValues,s=this.valueSize,a=e*s,c=a-s,l=(n-t)/(o-t),d=1-l;for(let u=0;u!==s;++u)i[u]=r[c+u]*d+r[a+u]*l;return i}}class P_t extends yQ{constructor(e,t,n,o){super(e,t,n,o)}interpolate_(e){return this.copySampleValue_(e-1)}}class K5{constructor(e,t,n,o){if(e===void 0)throw Error("THREE.KeyframeTrack: track name is undefined");if(t===void 0||t.length===0)throw Error("THREE.KeyframeTrack: no keyframes in track named "+e);this.name=e,this.times=qhe(t,this.TimeBufferType),this.values=qhe(n,this.ValueBufferType),this.setInterpolation(o||this.DefaultInterpolation)}static toJSON(e){let t=e.constructor,n;if(t.toJSON!==this.toJSON)n=t.toJSON(e);else{n={name:e.name,times:qhe(e.times,Array),values:qhe(e.values,Array)};let o=e.getInterpolation();if(o!==e.DefaultInterpolation)n.interpolation=o}return n.type=e.ValueTypeName,n}InterpolantFactoryMethodDiscrete(e){return new P_t(this.times,this.values,this.getValueSize(),e)}InterpolantFactoryMethodLinear(e){return new S_t(this.times,this.values,this.getValueSize(),e)}InterpolantFactoryMethodSmooth(e){return new b_t(this.times,this.values,this.getValueSize(),e)}setInterpolation(e){let t;switch(e){case 2300:t=this.InterpolantFactoryMethodDiscrete;break;case 2301:t=this.InterpolantFactoryMethodLinear;break;case 2302:t=this.InterpolantFactoryMethodSmooth;break}if(t===void 0){let n="unsupported interpolation for "+this.ValueTypeName+" keyframe track named "+this.name;if(this.createInterpolant===void 0)if(e!==this.DefaultInterpolation)this.setInterpolation(this.DefaultInterpolation);else throw Error(n);return console.warn("THREE.KeyframeTrack:",n),this}return this.createInterpolant=t,this}getInterpolation(){switch(this.createInterpolant){case this.InterpolantFactoryMethodDiscrete:return 2300;case this.InterpolantFactoryMethodLinear:return 2301;case this.InterpolantFactoryMethodSmooth:return 2302}}getValueSize(){return this.values.length/this.times.length}shift(e){if(e!==0){let t=this.times;for(let n=0,o=t.length;n!==o;++n)t[n]+=e}return this}scale(e){if(e!==1){let t=this.times;for(let n=0,o=t.length;n!==o;++n)t[n]*=e}return this}trim(e,t){let n=this.times,o=n.length,i=0,r=o-1;while(i!==o&&n[i]<e)++i;while(r!==-1&&n[r]>t)--r;if(++r,i!==0||r!==o){if(i>=r)r=Math.max(r,1),i=r-1;let s=this.getValueSize();this.times=n.slice(i,r),this.values=this.values.slice(i*s,r*s)}return this}validate(){let e=!0,t=this.getValueSize();if(t-Math.floor(t)!==0)console.error("THREE.KeyframeTrack: Invalid value size in track.",this),e=!1;let n=this.times,o=this.values,i=n.length;if(i===0)console.error("THREE.KeyframeTrack: Track is empty.",this),e=!1;let r=null;for(let s=0;s!==i;s++){let a=n[s];if(typeof a==="number"&&isNaN(a)){console.error("THREE.KeyframeTrack: Time is not a valid number.",this,s,a),e=!1;break}if(r!==null&&r>a){console.error("THREE.KeyframeTrack: Out of order keys.",this,s,a,r),e=!1;break}r=a}if(o!==void 0){if(Cco(o))for(let s=0,a=o.length;s!==a;++s){let c=o[s];if(isNaN(c)){console.error("THREE.KeyframeTrack: Value is not a valid number.",this,s,c),e=!1;break}}}return e}optimize(){let e=this.times.slice(),t=this.values.slice(),n=this.getValueSize(),o=this.getInterpolation()===2302,i=e.length-1,r=1;for(let s=1;s<i;++s){let a=!1,c=e[s],l=e[s+1];if(c!==l&&(s!==1||c!==e[0]))if(!o){let d=s*n,u=d-n,h=d+n;for(let A=0;A!==n;++A){let m=t[d+A];if(m!==t[u+A]||m!==t[h+A]){a=!0;break}}}else a=!0;if(a){if(s!==r){e[r]=e[s];let d=s*n,u=r*n;for(let h=0;h!==n;++h)t[u+h]=t[d+h]}++r}}if(i>0){e[r]=e[i];for(let s=i*n,a=r*n,c=0;c!==n;++c)t[a+c]=t[s+c];++r}if(r!==e.length)this.times=e.slice(0,r),this.values=t.slice(0,r*n);else this.times=e,this.values=t;return this}clone(){let e=this.times.slice(),t=this.values.slice(),o=new this.constructor(this.name,e,t);return o.createInterpolant=this.createInterpolant,o}}K5.prototype.TimeBufferType=Float32Array;K5.prototype.ValueBufferType=Float32Array;K5.prototype.DefaultInterpolation=2301;class xQ extends K5{constructor(e,t,n){super(e,t,n)}}xQ.prototype.ValueTypeName="bool";xQ.prototype.ValueBufferType=Array;xQ.prototype.DefaultInterpolation=2300;xQ.prototype.InterpolantFactoryMethodLinear=void 0;xQ.prototype.InterpolantFactoryMethodSmooth=void 0;class $9e extends K5{}$9e.prototype.ValueTypeName="color";class R7 extends K5{}R7.prototype.ValueTypeName="number";class v_t extends yQ{constructor(e,t,n,o){super(e,t,n,o)}interpolate_(e,t,n,o){let i=this.resultBuffer,r=this.sampleValues,s=this.valueSize,a=(n-t)/(o-t),c=e*s;for(let l=c+s;c!==l;c+=4)em.slerpFlat(i,0,r,c-s,r,c,a);return i}}class F7 extends K5{InterpolantFactoryMethodLinear(e){return new v_t(this.times,this.values,this.getValueSize(),e)}}F7.prototype.ValueTypeName="quaternion";F7.prototype.InterpolantFactoryMethodSmooth=void 0;class CQ extends K5{constructor(e,t,n){super(e,t,n)}}CQ.prototype.ValueTypeName="string";CQ.prototype.ValueBufferType=Array;CQ.prototype.DefaultInterpolation=2300;CQ.prototype.InterpolantFactoryMethodLinear=void 0;CQ.prototype.InterpolantFactoryMethodSmooth=void 0;class Q7 extends K5{}Q7.prototype.ValueTypeName="vector";class Z9e{constructor(e="",t=-1,n=[],o=2500){if(this.name=e,this.tracks=n,this.duration=t,this.blendMode=o,this.uuid=lI(),this.duration<0)this.resetDuration()}static parse(e){let t=[],n=e.tracks,o=1/(e.fps||1);for(let r=0,s=n.length;r!==s;++r)t.push(Sco(n[r]).scale(o));let i=new this(e.name,e.duration,t,e.blendMode);return i.uuid=e.uuid,i}static toJSON(e){let t=[],n=e.tracks,o={name:e.name,duration:e.duration,tracks:t,uuid:e.uuid,blendMode:e.blendMode};for(let i=0,r=n.length;i!==r;++i)t.push(K5.toJSON(n[i]));return o}static CreateFromMorphTargetSequence(e,t,n,o){let i=t.length,r=[];for(let s=0;s<i;s++){let a=[],c=[];a.push((s+i-1)%i,s,(s+1)%i),c.push(0,1,0);let l=Ico(a);if(a=NAt(a,1,l),c=NAt(c,1,l),!o&&a[0]===0)a.push(i),c.push(c[0]);r.push(new R7(".morphTargetInfluences["+t[s].name+"]",a,c).scale(1/n))}return new this(e,-1,r)}static findByName(e,t){let n=e;if(!Array.isArray(e)){let o=e;n=o.geometry&&o.geometry.animations||o.animations}for(let o=0;o<n.length;o++)if(n[o].name===t)return n[o];return null}static CreateClipsFromMorphTargetSequences(e,t,n){let o={},i=/^([\w-]*?)([\d]+)$/;for(let s=0,a=e.length;s<a;s++){let c=e[s],l=c.name.match(i);if(l&&l.length>1){let d=l[1],u=o[d];if(!u)o[d]=u=[];u.push(c)}}let r=[];for(let s in o)r.push(this.CreateFromMorphTargetSequence(s,o[s],t,n));return r}static parseAnimation(e,t){if(!e)return console.error("THREE.AnimationClip: No animation in JSONLoader data."),null;let n=function(d,u,h,A,m){if(h.length!==0){let p=[],g=[];if(I_t(h,p,g,A),p.length!==0)m.push(new d(u,p,g))}},o=[],i=e.name||"default",r=e.fps||30,s=e.blendMode,a=e.length||-1,c=e.hierarchy||[];for(let d=0;d<c.length;d++){let u=c[d].keys;if(!u||u.length===0)continue;if(u[0].morphTargets){let h={},A;for(A=0;A<u.length;A++)if(u[A].morphTargets)for(let m=0;m<u[A].morphTargets.length;m++)h[u[A].morphTargets[m]]=-1;for(let m in h){let p=[],g=[];for(let _=0;_!==u[A].morphTargets.length;++_){let f=u[A];p.push(f.time),g.push(f.morphTarget===m?1:0)}o.push(new R7(".morphTargetInfluence["+m+"]",p,g))}a=h.length*r}else{let h=".bones["+t[d].name+"]";n(Q7,h+".position",u,"pos",o),n(F7,h+".quaternion",u,"rot",o),n(Q7,h+".scale",u,"scl",o)}}if(o.length===0)return null;return new this(i,a,o,s)}resetDuration(){let e=this.tracks,t=0;for(let n=0,o=e.length;n!==o;++n){let i=this.tracks[n];t=Math.max(t,i.times[i.times.length-1])}return this.duration=t,this}trim(){for(let e=0;e<this.tracks.length;e++)this.tracks[e].trim(0,this.duration);return this}validate(){let e=!0;for(let t=0;t<this.tracks.length;t++)e=e&&this.tracks[t].validate();return e}optimize(){for(let e=0;e<this.tracks.length;e++)this.tracks[e].optimize();return this}clone(){let e=[];for(let t=0;t<this.tracks.length;t++)e.push(this.tracks[t].clone());return new this.constructor(this.name,this.duration,e,this.blendMode)}toJSON(){return this.constructor.toJSON(this)}}function bco(e){switch(e.toLowerCase()){case"scalar":case"double":case"float":case"number":case"integer":return R7;case"vector":case"vector2":case"vector3":case"vector4":return Q7;case"color":return $9e;case"quaternion":return F7;case"bool":case"boolean":return xQ;case"string":return CQ}throw Error("THREE.KeyframeTrack: Unsupported typeName: "+e)}function Sco(e){if(e.type===void 0)throw Error("THREE.KeyframeTrack: track type undefined, can not parse");let t=bco(e.type);if(e.times===void 0){let n=[],o=[];I_t(e.keys,n,o,"value"),e.times=n,e.values=o}if(t.parse!==void 0)return t.parse(e);else return new t(e.name,e.times,e.values,e.interpolation)}var D7={enabled:!1,files:{},add:function(e,t){if(this.enabled===!1)return;this.files[e]=t},get:function(e){if(this.enabled===!1)return;return this.files[e]},remove:function(e){delete this.files[e]},clear:function(){this.files={}}};class E_t{constructor(e,t,n){let o=this,i=!1,r=0,s=0,a=void 0,c=[];this.onStart=void 0,this.onLoad=e,this.onProgress=t,this.onError=n,this.itemStart=function(l){if(s++,i===!1){if(o.onStart!==void 0)o.onStart(l,r,s)}i=!0},this.itemEnd=function(l){if(r++,o.onProgress!==void 0)o.onProgress(l,r,s);if(r===s){if(i=!1,o.onLoad!==void 0)o.onLoad()}},this.itemError=function(l){if(o.onError!==void 0)o.onError(l)},this.resolveURL=function(l){if(a)return a(l);return l},this.setURLModifier=function(l){return a=l,this},this.addHandler=function(l,d){return c.push(l,d),this},this.removeHandler=function(l){let d=c.indexOf(l);if(d!==-1)c.splice(d,2);return this},this.getHandler=function(l){for(let d=0,u=c.length;d<u;d+=2){let h=c[d],A=c[d+1];if(h.global)h.lastIndex=0;if(h.test(l))return A}return null}}}var ewe=new E_t;class Bg{constructor(e){this.manager=e!==void 0?e:ewe,this.crossOrigin="anonymous",this.withCredentials=!1,this.path="",this.resourcePath="",this.requestHeader={}}load(){}loadAsync(e,t){let n=this;return new Promise(function(o,i){n.load(e,o,t,i)})}parse(){}setCrossOrigin(e){return this.crossOrigin=e,this}setWithCredentials(e){return this.withCredentials=e,this}setPath(e){return this.path=e,this}setResourcePath(e){return this.resourcePath=e,this}setRequestHeader(e){return this.requestHeader=e,this}}Bg.DEFAULT_MATERIAL_NAME="__DEFAULT";var UM={};class M_t extends Error{constructor(e,t){super(e);this.response=t}}class hI extends Bg{constructor(e){super(e)}load(e,t,n,o){if(e===void 0)e="";if(this.path!==void 0)e=this.path+e;e=this.manager.resolveURL(e);let i=D7.get(e);if(i!==void 0)return this.manager.itemStart(e),setTimeout(()=>{if(t)t(i);this.manager.itemEnd(e)},0),i;if(UM[e]!==void 0){UM[e].push({onLoad:t,onProgress:n,onError:o});return}UM[e]=[],UM[e].push({onLoad:t,onProgress:n,onError:o});let r=new Request(e,{headers:new Headers(this.requestHeader),credentials:this.withCredentials?"include":"same-origin"}),s=this.mimeType,a=this.responseType;fetch(r).then((c)=>{if(c.status===200||c.status===0){if(c.status===0)console.warn("THREE.FileLoader: HTTP Status 0 received.");if(typeof ReadableStream>"u"||c.body===void 0||c.body.getReader===void 0)return c;let l=UM[e],d=c.body.getReader(),u=c.headers.get("X-File-Size")||c.headers.get("Content-Length"),h=u?parseInt(u):0,A=h!==0,m=0,p=new ReadableStream({start(g){_();function _(){d.read().then(({done:f,value:y})=>{if(f)g.close();else{m+=y.byteLength;let x=new ProgressEvent("progress",{lengthComputable:A,loaded:m,total:h});for(let C=0,I=l.length;C<I;C++){let b=l[C];if(b.onProgress)b.onProgress(x)}g.enqueue(y),_()}},(f)=>{g.error(f)})}}});return new Response(p)}else throw new M_t(`fetch for "${c.url}" responded with ${c.status}: ${c.statusText}`,c)}).then((c)=>{switch(a){case"arraybuffer":return c.arrayBuffer();case"blob":return c.blob();case"document":return c.text().then((l)=>new DOMParser().parseFromString(l,s));case"json":return c.json();default:if(s===void 0)return c.text();else{let d=/charset="?([^;"\s]*)"?/i.exec(s),u=d&&d[1]?d[1].toLowerCase():void 0,h=new TextDecoder(u);return c.arrayBuffer().then((A)=>h.decode(A))}}}).then((c)=>{D7.add(e,c);let l=UM[e];delete UM[e];for(let d=0,u=l.length;d<u;d++){let h=l[d];if(h.onLoad)h.onLoad(c)}}).catch((c)=>{let l=UM[e];if(l===void 0)throw this.manager.itemError(e),c;delete UM[e];for(let d=0,u=l.length;d<u;d++){let h=l[d];if(h.onError)h.onError(c)}this.manager.itemError(e)}).finally(()=>{this.manager.itemEnd(e)}),this.manager.itemStart(e)}setResponseType(e){return this.responseType=e,this}setMimeType(e){return this.mimeType=e,this}}class B_t extends Bg{constructor(e){super(e)}load(e,t,n,o){if(this.path!==void 0)e=this.path+e;e=this.manager.resolveURL(e);let i=this,r=D7.get(e);if(r!==void 0)return i.manager.itemStart(e),setTimeout(function(){if(t)t(r);i.manager.itemEnd(e)},0),r;let s=XJ("img");function a(){if(l(),D7.add(e,this),t)t(this);i.manager.itemEnd(e)}function c(d){if(l(),o)o(d);i.manager.itemError(e),i.manager.itemEnd(e)}function l(){s.removeEventListener("load",a,!1),s.removeEventListener("error",c,!1)}if(s.addEventListener("load",a,!1),s.addEventListener("error",c,!1),e.slice(0,5)!=="data:"){if(this.crossOrigin!==void 0)s.crossOrigin=this.crossOrigin}return i.manager.itemStart(e),s.src=e,s}}class IQ extends Bg{constructor(e){super(e)}load(e,t,n,o){let i=new sl,r=new B_t(this.manager);return r.setCrossOrigin(this.crossOrigin),r.setPath(this.path),r.load(e,function(s){if(i.image=s,i.needsUpdate=!0,t!==void 0)t(i)},n,o),i}}class GG extends Nc{constructor(e,t=1){super();this.isLight=!0,this.type="Light",this.color=new Po(e),this.intensity=t}dispose(){}copy(e,t){return super.copy(e,t),this.color.copy(e.color),this.intensity=e.intensity,this}toJSON(e){let t=super.toJSON(e);if(t.object.color=this.color.getHex(),t.object.intensity=this.intensity,this.groundColor!==void 0)t.object.groundColor=this.groundColor.getHex();if(this.distance!==void 0)t.object.distance=this.distance;if(this.angle!==void 0)t.object.angle=this.angle;if(this.decay!==void 0)t.object.decay=this.decay;if(this.penumbra!==void 0)t.object.penumbra=this.penumbra;if(this.shadow!==void 0)t.object.shadow=this.shadow.toJSON();return t}}class twe extends GG{constructor(e,t,n){super(e,n);this.isHemisphereLight=!0,this.type="HemisphereLight",this.position.copy(Nc.DEFAULT_UP),this.updateMatrix(),this.groundColor=new Po(t)}copy(e,t){return super.copy(e,t),this.groundColor.copy(e.groundColor),this}}var S9e=new Pr,RAt=new bt,QAt=new bt;class I0e{constructor(e){this.camera=e,this.bias=0,this.normalBias=0,this.radius=1,this.blurSamples=8,this.mapSize=new ro(512,512),this.map=null,this.mapPass=null,this.matrix=new Pr,this.autoUpdate=!0,this.needsUpdate=!1,this._frustum=new l0e,this._frameExtents=new ro(1,1),this._viewportCount=1,this._viewports=[new Gl(0,0,1,1)]}getViewportCount(){return this._viewportCount}getFrustum(){return this._frustum}updateMatrices(e){let t=this.camera,n=this.matrix;RAt.setFromMatrixPosition(e.matrixWorld),t.position.copy(RAt),QAt.setFromMatrixPosition(e.target.matrixWorld),t.lookAt(QAt),t.updateMatrixWorld(),S9e.multiplyMatrices(t.projectionMatrix,t.matrixWorldInverse),this._frustum.setFromProjectionMatrix(S9e),n.set(0.5,0,0,0.5,0,0.5,0,0.5,0,0,0.5,0.5,0,0,0,1),n.multiply(S9e)}getViewport(e){return this._viewports[e]}getFrameExtents(){return this._frameExtents}dispose(){if(this.map)this.map.dispose();if(this.mapPass)this.mapPass.dispose()}copy(e){return this.camera=e.camera.clone(),this.bias=e.bias,this.radius=e.radius,this.mapSize.copy(e.mapSize),this}clone(){return new this.constructor().copy(this)}toJSON(){let e={};if(this.bias!==0)e.bias=this.bias;if(this.normalBias!==0)e.normalBias=this.normalBias;if(this.radius!==1)e.radius=this.radius;if(this.mapSize.x!==512||this.mapSize.y!==512)e.mapSize=this.mapSize.toArray();return e.camera=this.camera.toJSON(!1).object,delete e.camera.matrix,e}}class w_t extends I0e{constructor(){super(new rl(50,1,0.5,500));this.isSpotLightShadow=!0,this.focus=1}updateMatrices(e){let t=this.camera,n=FG*2*e.angle*this.focus,o=this.mapSize.width/this.mapSize.height,i=e.distance||t.far;if(n!==t.fov||o!==t.aspect||i!==t.far)t.fov=n,t.aspect=o,t.far=i,t.updateProjectionMatrix();super.updateMatrices(e)}copy(e){return super.copy(e),this.focus=e.focus,this}}class nwe extends GG{constructor(e,t,n=0,o=Math.PI/3,i=0,r=2){super(e,t);this.isSpotLight=!0,this.type="SpotLight",this.position.copy(Nc.DEFAULT_UP),this.updateMatrix(),this.target=new Nc,this.distance=n,this.angle=o,this.penumbra=i,this.decay=r,this.map=null,this.shadow=new w_t}get power(){return this.intensity*Math.PI}set power(e){this.intensity=e/Math.PI}dispose(){this.shadow.dispose()}copy(e,t){return super.copy(e,t),this.distance=e.distance,this.angle=e.angle,this.penumbra=e.penumbra,this.decay=e.decay,this.target=e.target.clone(),this.shadow=e.shadow.clone(),this}}var kAt=new Pr,zJ=new bt,P9e=new bt;class T_t extends I0e{constructor(){super(new rl(90,1,0.5,500));this.isPointLightShadow=!0,this._frameExtents=new ro(4,2),this._viewportCount=6,this._viewports=[new Gl(2,1,1,1),new Gl(0,1,1,1),new Gl(3,1,1,1),new Gl(1,1,1,1),new Gl(3,0,1,1),new Gl(1,0,1,1)],this._cubeDirections=[new bt(1,0,0),new bt(-1,0,0),new bt(0,0,1),new bt(0,0,-1),new bt(0,1,0),new bt(0,-1,0)],this._cubeUps=[new bt(0,1,0),new bt(0,1,0),new bt(0,1,0),new bt(0,1,0),new bt(0,0,1),new bt(0,0,-1)]}updateMatrices(e,t=0){let n=this.camera,o=this.matrix,i=e.distance||n.far;if(i!==n.far)n.far=i,n.updateProjectionMatrix();zJ.setFromMatrixPosition(e.matrixWorld),n.position.copy(zJ),P9e.copy(n.position),P9e.add(this._cubeDirections[t]),n.up.copy(this._cubeUps[t]),n.lookAt(P9e),n.updateMatrixWorld(),o.makeTranslation(-zJ.x,-zJ.y,-zJ.z),kAt.multiplyMatrices(n.projectionMatrix,n.matrixWorldInverse),this._frustum.setFromProjectionMatrix(kAt)}}class s$ extends GG{constructor(e,t,n=0,o=2){super(e,t);this.isPointLight=!0,this.type="PointLight",this.distance=n,this.decay=o,this.shadow=new T_t}get power(){return this.intensity*4*Math.PI}set power(e){this.intensity=e/(4*Math.PI)}dispose(){this.shadow.dispose()}copy(e,t){return super.copy(e,t),this.distance=e.distance,this.decay=e.decay,this.shadow=e.shadow.clone(),this}}class D_t extends I0e{constructor(){super(new Wv(-5,5,5,-5,0.5,500));this.isDirectionalLightShadow=!0}}class a$ extends GG{constructor(e,t){super(e,t);this.isDirectionalLight=!0,this.type="DirectionalLight",this.position.copy(Nc.DEFAULT_UP),this.updateMatrix(),this.target=new Nc,this.shadow=new D_t}dispose(){this.shadow.dispose()}copy(e){return super.copy(e),this.target=e.target.clone(),this.shadow=e.shadow.clone(),this}}class c$ extends GG{constructor(e,t){super(e,t);this.isAmbientLight=!0,this.type="AmbientLight"}}class j5{static decodeText(e){if(console.warn("THREE.LoaderUtils: decodeText() has been deprecated with r165 and will be removed with r175. Use TextDecoder instead."),typeof TextDecoder<"u")return new TextDecoder().decode(e);let t="";for(let n=0,o=e.length;n<o;n++)t+=String.fromCharCode(e[n]);try{return decodeURIComponent(escape(t))}catch(n){return t}}static extractUrlBase(e){let t=e.lastIndexOf("/");if(t===-1)return"./";return e.slice(0,t+1)}static resolveURL(e,t){if(typeof e!=="string"||e==="")return"";if(/^https?:\/\//i.test(t)&&/^\//.test(e))t=t.replace(/(^https?:\/\/[^\/]+).*/i,"$1");if(/^(https?:)?\/\//i.test(e))return e;if(/^data:.*,.*$/i.test(e))return e;if(/^blob:.*$/i.test(e))return e;return t+e}}class owe extends zs{constructor(){super();this.isInstancedBufferGeometry=!0,this.type="InstancedBufferGeometry",this.instanceCount=1/0}copy(e){return super.copy(e),this.instanceCount=e.instanceCount,this}toJSON(){let e=super.toJSON();return e.instanceCount=this.instanceCount,e.isInstancedBufferGeometry=!0,e}}class iwe extends Bg{constructor(e){super(e);if(this.isImageBitmapLoader=!0,typeof createImageBitmap>"u")console.warn("THREE.ImageBitmapLoader: createImageBitmap() not supported.");if(typeof fetch>"u")console.warn("THREE.ImageBitmapLoader: fetch() not supported.");this.options={premultiplyAlpha:"none"}}setOptions(e){return this.options=e,this}load(e,t,n,o){if(e===void 0)e="";if(this.path!==void 0)e=this.path+e;e=this.manager.resolveURL(e);let i=this,r=D7.get(e);if(r!==void 0){if(i.manager.itemStart(e),r.then){r.then((c)=>{if(t)t(c);i.manager.itemEnd(e)}).catch((c)=>{if(o)o(c)});return}return setTimeout(function(){if(t)t(r);i.manager.itemEnd(e)},0),r}let s={};s.credentials=this.crossOrigin==="anonymous"?"same-origin":"include",s.headers=this.requestHeader;let a=fetch(e,s).then(function(c){return c.blob()}).then(function(c){return createImageBitmap(c,Object.assign(i.options,{colorSpaceConversion:"none"}))}).then(function(c){if(D7.add(e,c),t)t(c);return i.manager.itemEnd(e),c}).catch(function(c){if(o)o(c);D7.remove(e),i.manager.itemError(e),i.manager.itemEnd(e)});D7.add(e,a),i.manager.itemStart(e)}}class rwe{constructor(e=!0){this.autoStart=e,this.startTime=0,this.oldTime=0,this.elapsedTime=0,this.running=!1}start(){this.startTime=LAt(),this.oldTime=this.startTime,this.elapsedTime=0,this.running=!0}stop(){this.getElapsedTime(),this.running=!1,this.autoStart=!1}getElapsedTime(){return this.getDelta(),this.elapsedTime}getDelta(){let e=0;if(this.autoStart&&!this.running)return this.start(),0;if(this.running){let t=LAt();e=(t-this.oldTime)/1000,this.oldTime=t,this.elapsedTime+=e}return e}}function LAt(){return(typeof performance>"u"?Date:performance).now()}var swe="\\[\\]\\.:\\/",Pco=new RegExp("["+swe+"]","g"),awe="[^"+swe+"]",vco="[^"+swe.replace("\\.","")+"]",Eco=/((?:WC+[\/:])*)/.source.replace("WC",awe),Mco=/(WCOD+)?/.source.replace("WCOD",vco),Bco=/(?:\.(WC+)(?:\[(.+)\])?)?/.source.replace("WC",awe),wco=/\.(WC+)(?:\[(.+)\])?/.source.replace("WC",awe),Tco=new RegExp("^"+Eco+Mco+Bco+wco+"$"),Dco=["material","materials","bones","map"];class N_t{constructor(e,t,n){let o=n||Cc.parseTrackName(t);this._targetGroup=e,this._bindings=e.subscribe_(t,o)}getValue(e,t){this.bind();let n=this._targetGroup.nCachedObjects_,o=this._bindings[n];if(o!==void 0)o.getValue(e,t)}setValue(e,t){let n=this._bindings;for(let o=this._targetGroup.nCachedObjects_,i=n.length;o!==i;++o)n[o].setValue(e,t)}bind(){let e=this._bindings;for(let t=this._targetGroup.nCachedObjects_,n=e.length;t!==n;++t)e[t].bind()}unbind(){let e=this._bindings;for(let t=this._targetGroup.nCachedObjects_,n=e.length;t!==n;++t)e[t].unbind()}}class Cc{constructor(e,t,n){this.path=t,this.parsedPath=n||Cc.parseTrackName(t),this.node=Cc.findNode(e,this.parsedPath.nodeName),this.rootNode=e,this.getValue=this._getValue_unbound,this.setValue=this._setValue_unbound}static create(e,t,n){if(!(e&&e.isAnimationObjectGroup))return new Cc(e,t,n);else return new Cc.Composite(e,t,n)}static sanitizeNodeName(e){return e.replace(/\s/g,"_").replace(Pco,"")}static parseTrackName(e){let t=Tco.exec(e);if(t===null)throw Error("PropertyBinding: Cannot parse trackName: "+e);let n={nodeName:t[2],objectName:t[3],objectIndex:t[4],propertyName:t[5],propertyIndex:t[6]},o=n.nodeName&&n.nodeName.lastIndexOf(".");if(o!==void 0&&o!==-1){let i=n.nodeName.substring(o+1);if(Dco.indexOf(i)!==-1)n.nodeName=n.nodeName.substring(0,o),n.objectName=i}if(n.propertyName===null||n.propertyName.length===0)throw Error("PropertyBinding: can not parse propertyName from trackName: "+e);return n}static findNode(e,t){if(t===void 0||t===""||t==="."||t===-1||t===e.name||t===e.uuid)return e;if(e.skeleton){let n=e.skeleton.getBoneByName(t);if(n!==void 0)return n}if(e.children){let n=function(i){for(let r=0;r<i.length;r++){let s=i[r];if(s.name===t||s.uuid===t)return s;let a=n(s.children);if(a)return a}return null},o=n(e.children);if(o)return o}return null}_getValue_unavailable(){}_setValue_unavailable(){}_getValue_direct(e,t){e[t]=this.targetObject[this.propertyName]}_getValue_array(e,t){let n=this.resolvedProperty;for(let o=0,i=n.length;o!==i;++o)e[t++]=n[o]}_getValue_arrayElement(e,t){e[t]=this.resolvedProperty[this.propertyIndex]}_getValue_toArray(e,t){this.resolvedProperty.toArray(e,t)}_setValue_direct(e,t){this.targetObject[this.propertyName]=e[t]}_setValue_direct_setNeedsUpdate(e,t){this.targetObject[this.propertyName]=e[t],this.targetObject.needsUpdate=!0}_setValue_direct_setMatrixWorldNeedsUpdate(e,t){this.targetObject[this.propertyName]=e[t],this.targetObject.matrixWorldNeedsUpdate=!0}_setValue_array(e,t){let n=this.resolvedProperty;for(let o=0,i=n.length;o!==i;++o)n[o]=e[t++]}_setValue_array_setNeedsUpdate(e,t){let n=this.resolvedProperty;for(let o=0,i=n.length;o!==i;++o)n[o]=e[t++];this.targetObject.needsUpdate=!0}_setValue_array_setMatrixWorldNeedsUpdate(e,t){let n=this.resolvedProperty;for(let o=0,i=n.length;o!==i;++o)n[o]=e[t++];this.targetObject.matrixWorldNeedsUpdate=!0}_setValue_arrayElement(e,t){this.resolvedProperty[this.propertyIndex]=e[t]}_setValue_arrayElement_setNeedsUpdate(e,t){this.resolvedProperty[this.propertyIndex]=e[t],this.targetObject.needsUpdate=!0}_setValue_arrayElement_setMatrixWorldNeedsUpdate(e,t){this.resolvedProperty[this.propertyIndex]=e[t],this.targetObject.matrixWorldNeedsUpdate=!0}_setValue_fromArray(e,t){this.resolvedProperty.fromArray(e,t)}_setValue_fromArray_setNeedsUpdate(e,t){this.resolvedProperty.fromArray(e,t),this.targetObject.needsUpdate=!0}_setValue_fromArray_setMatrixWorldNeedsUpdate(e,t){this.resolvedProperty.fromArray(e,t),this.targetObject.matrixWorldNeedsUpdate=!0}_getValue_unbound(e,t){this.bind(),this.getValue(e,t)}_setValue_unbound(e,t){this.bind(),this.setValue(e,t)}bind(){let e=this.node,t=this.parsedPath,{objectName:n,propertyName:o,propertyIndex:i}=t;if(!e)e=Cc.findNode(this.rootNode,t.nodeName),this.node=e;if(this.getValue=this._getValue_unavailable,this.setValue=this._setValue_unavailable,!e){console.warn("THREE.PropertyBinding: No target node found for track: "+this.path+".");return}if(n){let c=t.objectIndex;switch(n){case"materials":if(!e.material){console.error("THREE.PropertyBinding: Can not bind to material as node does not have a material.",this);return}if(!e.material.materials){console.error("THREE.PropertyBinding: Can not bind to material.materials as node.material does not have a materials array.",this);return}e=e.material.materials;break;case"bones":if(!e.skeleton){console.error("THREE.PropertyBinding: Can not bind to bones as node does not have a skeleton.",this);return}e=e.skeleton.bones;for(let l=0;l<e.length;l++)if(e[l].name===c){c=l;break}break;case"map":if("map"in e){e=e.map;break}if(!e.material){console.error("THREE.PropertyBinding: Can not bind to material as node does not have a material.",this);return}if(!e.material.map){console.error("THREE.PropertyBinding: Can not bind to material.map as node.material does not have a map.",this);return}e=e.material.map;break;default:if(e[n]===void 0){console.error("THREE.PropertyBinding: Can not bind to objectName of node undefined.",this);return}e=e[n]}if(c!==void 0){if(e[c]===void 0){console.error("THREE.PropertyBinding: Trying to bind to objectIndex of objectName, but is undefined.",this,e);return}e=e[c]}}let r=e[o];if(r===void 0){let c=t.nodeName;console.error("THREE.PropertyBinding: Trying to update property for track: "+c+"."+o+" but it wasn't found.",e);return}let s=this.Versioning.None;if(this.targetObject=e,e.needsUpdate!==void 0)s=this.Versioning.NeedsUpdate;else if(e.matrixWorldNeedsUpdate!==void 0)s=this.Versioning.MatrixWorldNeedsUpdate;let a=this.BindingType.Direct;if(i!==void 0){if(o==="morphTargetInfluences"){if(!e.geometry){console.error("THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.",this);return}if(!e.geometry.morphAttributes){console.error("THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.morphAttributes.",this);return}if(e.morphTargetDictionary[i]!==void 0)i=e.morphTargetDictionary[i]}a=this.BindingType.ArrayElement,this.resolvedProperty=r,this.propertyIndex=i}else if(r.fromArray!==void 0&&r.toArray!==void 0)a=this.BindingType.HasFromToArray,this.resolvedProperty=r;else if(Array.isArray(r))a=this.BindingType.EntireArray,this.resolvedProperty=r;else this.propertyName=o;this.getValue=this.GetterByBindingType[a],this.setValue=this.SetterByBindingTypeAndVersioning[a][s]}unbind(){this.node=null,this.getValue=this._getValue_unbound,this.setValue=this._setValue_unbound}}Cc.Composite=N_t;Cc.prototype.BindingType={Direct:0,EntireArray:1,ArrayElement:2,HasFromToArray:3};Cc.prototype.Versioning={None:0,NeedsUpdate:1,MatrixWorldNeedsUpdate:2};Cc.prototype.GetterByBindingType=[Cc.prototype._getValue_direct,Cc.prototype._getValue_array,Cc.prototype._getValue_arrayElement,Cc.prototype._getValue_toArray];Cc.prototype.SetterByBindingTypeAndVersioning=[[Cc.prototype._setValue_direct,Cc.prototype._setValue_direct_setNeedsUpdate,Cc.prototype._setValue_direct_setMatrixWorldNeedsUpdate],[Cc.prototype._setValue_array,Cc.prototype._setValue_array_setNeedsUpdate,Cc.prototype._setValue_array_setMatrixWorldNeedsUpdate],[Cc.prototype._setValue_arrayElement,Cc.prototype._setValue_arrayElement_setNeedsUpdate,Cc.prototype._setValue_arrayElement_setMatrixWorldNeedsUpdate],[Cc.prototype._setValue_fromArray,Cc.prototype._setValue_fromArray_setNeedsUpdate,Cc.prototype._setValue_fromArray_setMatrixWorldNeedsUpdate]];var bvr=new Float32Array(1);class b0e{constructor(e){this.value=e}clone(){return new b0e(this.value.clone===void 0?this.value:this.value.clone())}}var FAt=new Pr;class l${constructor(e,t,n=0,o=1/0){this.ray=new L7(e,t),this.near=n,this.far=o,this.camera=null,this.layers=new c0e,this.params={Mesh:{},Line:{threshold:1},LOD:{},Points:{threshold:1},Sprite:{}}}set(e,t){this.ray.set(e,t)}setFromCamera(e,t){if(t.isPerspectiveCamera)this.ray.origin.setFromMatrixPosition(t.matrixWorld),this.ray.direction.set(e.x,e.y,0.5).unproject(t).sub(this.ray.origin).normalize(),this.camera=t;else if(t.isOrthographicCamera)this.ray.origin.set(e.x,e.y,(t.near+t.far)/(t.near-t.far)).unproject(t),this.ray.direction.set(0,0,-1).transformDirection(t.matrixWorld),this.camera=t;else console.error("THREE.Raycaster: Unsupported camera type: "+t.type)}setFromXRController(e){return FAt.identity().extractRotation(e.matrixWorld),this.ray.origin.setFromMatrixPosition(e.matrixWorld),this.ray.direction.set(0,0,-1).applyMatrix4(FAt),this}intersectObject(e,t=!0,n=[]){return T9e(e,this,n,t),n.sort(HAt),n}intersectObjects(e,t=!0,n=[]){for(let o=0,i=e.length;o<i;o++)T9e(e[o],this,n,t);return n.sort(HAt),n}}function HAt(e,t){return e.distance-t.distance}function T9e(e,t,n,o){let i=!0;if(e.layers.test(t.layers)){if(e.raycast(t,n)===!1)i=!1}if(i===!0&&o===!0){let r=e.children;for(let s=0,a=r.length;s<a;s++)T9e(r[s],t,n,!0)}}class S0e{constructor(e=1,t=0,n=0){return this.radius=e,this.phi=t,this.theta=n,this}set(e,t,n){return this.radius=e,this.phi=t,this.theta=n,this}copy(e){return this.radius=e.radius,this.phi=e.phi,this.theta=e.theta,this}makeSafe(){return this.phi=Math.max(0.000001,Math.min(Math.PI-0.000001,this.phi)),this}setFromVector3(e){return this.setFromCartesianCoords(e.x,e.y,e.z)}setFromCartesianCoords(e,t,n){if(this.radius=Math.sqrt(e*e+t*t+n*n),this.radius===0)this.theta=0,this.phi=0;else this.theta=Math.atan2(e,n),this.phi=Math.acos(Tp(t/this.radius,-1,1));return this}clone(){return new this.constructor().copy(this)}}if(typeof __THREE_DEVTOOLS__<"u")__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("register",{detail:{revision:"165"}}));if(typeof window<"u")if(window.__THREE__)console.warn("WARNING: Multiple instances of Three.js being imported.");else window.__THREE__="165";var k7n=Rt(Ai(),1);var H7n=Rt(lo(),1);function Rco(){var e=Object.create(null);function t(i,r){var{id:s,name:a,dependencies:c}=i;if(c===void 0)c=[];var l=i.init;if(l===void 0)l=function(){};var d=i.getTransferables;if(d===void 0)d=null;if(e[s])return;try{if(c=c.map(function(h){if(h&&h.isWorkerModule)t(h,function(A){if(A instanceof Error)throw A}),h=e[h.id].value;return h}),l=o("<"+a+">.init",l),d)d=o("<"+a+">.getTransferables",d);var u=null;if(typeof l==="function")u=l.apply(void 0,c);else console.error("worker module init function failed to rehydrate");e[s]={id:s,value:u,getTransferables:d},r(u)}catch(h){if(!(h&&h.noLog))console.error(h);r(h)}}function n(i,r){var s,{id:a,args:c}=i;if(!e[a]||typeof e[a].value!=="function")r(Error("Worker module "+a+": not found or its 'init' did not return a function"));try{var l=(s=e[a]).value.apply(s,c);if(l&&typeof l.then==="function")l.then(d,function(u){return r(u instanceof Error?u:Error(""+u))});else d(l)}catch(u){r(u)}function d(u){try{var h=e[a].getTransferables&&e[a].getTransferables(u);if(!h||!Array.isArray(h)||!h.length)h=void 0;r(u,h)}catch(A){console.error(A),r(A)}}}function o(i,r){var s=void 0;self.troikaDefine=function(c){return s=c};var a=URL.createObjectURL(new Blob(["/** "+i.replace(/\*/g,"")+` **/
troikaDefine(
`+r+`
)`],{type:"application/javascript"}));try{importScripts(a)}catch(c){console.error(c)}return URL.revokeObjectURL(a),delete self.troikaDefine,s}self.addEventListener("message",function(i){var r=i.data,{messageId:s,action:a,data:c}=r;try{if(a==="registerModule")t(c,function(l){if(l instanceof Error)postMessage({messageId:s,success:!1,error:l.message});else postMessage({messageId:s,success:!0,result:{isCallable:typeof l==="function"}})});if(a==="callModule")n(c,function(l,d){if(l instanceof Error)postMessage({messageId:s,success:!1,error:l.message});else postMessage({messageId:s,success:!0,result:l},d||void 0)})}catch(l){postMessage({messageId:s,success:!1,error:l.stack})}})}function Qco(e){var t=function(){var n=[],o=arguments.length;while(o--)n[o]=arguments[o];return t._getInitResult().then(function(i){if(typeof i==="function")return i.apply(void 0,n);else throw Error("Worker module function was called but `init` did not return a callable function")})};return t._getInitResult=function(){var{dependencies:n,init:o}=e;n=Array.isArray(n)?n.map(function(r){if(r){if(r=r.onMainThread||r,r._getInitResult)r=r._getInitResult()}return r}):[];var i=Promise.all(n).then(function(r){return o.apply(null,r)});return t._getInitResult=function(){return i},i},t}var Q_t=function(){var e=!1;if(typeof window<"u"&&typeof window.document<"u")try{var t=new Worker(URL.createObjectURL(new Blob([""],{type:"application/javascript"})));t.terminate(),e=!0}catch(n){console.log("Troika createWorkerModule: web workers not allowed; falling back to main thread execution. Cause: ["+n.message+"]")}return Q_t=function(){return e},e},kco=0,Lco=0,cwe=!1,d$=Object.create(null),u$=Object.create(null),lwe=Object.create(null);function SQ(e){if((!e||typeof e.init!=="function")&&!cwe)throw Error("requires `options.init` function");var{dependencies:t,init:n,getTransferables:o,workerId:i}=e,r=Qco(e);if(i==null)i="#default";var s="workerModule"+ ++kco,a=e.name||s,c=null;t=t&&t.map(function(d){if(typeof d==="function"&&!d.workerModuleData)cwe=!0,d=SQ({workerId:i,name:"<"+a+"> function dependency: "+d.name,init:`function(){return (
`+P0e(d)+`
)}`}),cwe=!1;if(d&&d.workerModuleData)d=d.workerModuleData;return d});function l(){var d=[],u=arguments.length;while(u--)d[u]=arguments[u];if(!Q_t())return r.apply(void 0,d);if(!c){c=R_t(i,"registerModule",l.workerModuleData);var h=function(){c=null,u$[i].delete(h)};(u$[i]||(u$[i]=new Set)).add(h)}return c.then(function(A){var m=A.isCallable;if(m)return R_t(i,"callModule",{id:s,args:d});else throw Error("Worker module function was called but `init` did not return a callable function")})}return l.workerModuleData={isWorkerModule:!0,id:s,name:a,dependencies:t,init:P0e(n),getTransferables:o&&P0e(o)},l.onMainThread=r,l}function k_t(e){if(u$[e])u$[e].forEach(function(t){t()});if(d$[e])d$[e].terminate(),delete d$[e]}function P0e(e){var t=e.toString();if(!/^function/.test(t)&&/^\w+\s*\(/.test(t))t="function "+t;return t}function Fco(e){var t=d$[e];if(!t){var n=P0e(Rco);t=d$[e]=new Worker(URL.createObjectURL(new Blob(["/** Worker Module Bootstrap: "+e.replace(/\*/g,"")+` **/
;(`+n+")()"],{type:"application/javascript"}))),t.onmessage=function(o){var i=o.data,r=i.messageId,s=lwe[r];if(!s)throw Error("WorkerModule response with empty or unknown messageId");delete lwe[r],s(i)}}return t}function R_t(e,t,n){return new Promise(function(o,i){var r=++Lco;lwe[r]=function(s){if(s.success)o(s.result);else i(Error("Error in worker "+t+" call: "+s.error))},Fco(e).postMessage({messageId:r,action:t,data:n})})}function dwe(){var e=function(t){function n(U,X,V,W,j,q,ne,ce){var oe=1-ne;ce.x=oe*oe*U+2*oe*ne*V+ne*ne*j,ce.y=oe*oe*X+2*oe*ne*W+ne*ne*q}function o(U,X,V,W,j,q,ne,ce,oe,ie){var J=1-oe;ie.x=J*J*J*U+3*J*J*oe*V+3*J*oe*oe*j+oe*oe*oe*ne,ie.y=J*J*J*X+3*J*J*oe*W+3*J*oe*oe*q+oe*oe*oe*ce}function i(U,X){var V=/([MLQCZ])([^MLQCZ]*)/g,W,j,q,ne,ce;while(W=V.exec(U)){var oe=W[2].replace(/^\s*|\s*$/g,"").split(/[,\s]+/).map(function(ie){return parseFloat(ie)});switch(W[1]){case"M":ne=j=oe[0],ce=q=oe[1];break;case"L":if(oe[0]!==ne||oe[1]!==ce)X("L",ne,ce,ne=oe[0],ce=oe[1]);break;case"Q":{X("Q",ne,ce,ne=oe[2],ce=oe[3],oe[0],oe[1]);break}case"C":{X("C",ne,ce,ne=oe[4],ce=oe[5],oe[0],oe[1],oe[2],oe[3]);break}case"Z":if(ne!==j||ce!==q)X("L",ne,ce,j,q);break}}}function r(U,X,V){if(V===void 0)V=16;var W={x:0,y:0};i(U,function(j,q,ne,ce,oe,ie,J,ee,se){switch(j){case"L":X(q,ne,ce,oe);break;case"Q":{var le=q,he=ne;for(var ue=1;ue<V;ue++)n(q,ne,ie,J,ce,oe,ue/(V-1),W),X(le,he,W.x,W.y),le=W.x,he=W.y;break}case"C":{var Ae=q,_e=ne;for(var Pe=1;Pe<V;Pe++)o(q,ne,ie,J,ee,se,ce,oe,Pe/(V-1),W),X(Ae,_e,W.x,W.y),Ae=W.x,_e=W.y;break}}})}var s="precision highp float;attribute vec2 aUV;varying vec2 vUV;void main(){vUV=aUV;gl_Position=vec4(mix(vec2(-1.0),vec2(1.0),aUV),0.0,1.0);}",a="precision highp float;uniform sampler2D tex;varying vec2 vUV;void main(){gl_FragColor=texture2D(tex,vUV);}",c=new WeakMap,l={premultipliedAlpha:!1,preserveDrawingBuffer:!0,antialias:!1,depth:!1};function d(U,X){var V=U.getContext?U.getContext("webgl",l):U,W=c.get(V);if(!W){let J=function(Ae){var _e=q[Ae];if(!_e){if(_e=q[Ae]=V.getExtension(Ae),!_e)throw Error(Ae+" not supported")}return _e},ee=function(Ae,_e){var Pe=V.createShader(_e);return V.shaderSource(Pe,Ae),V.compileShader(Pe),Pe},se=function(Ae,_e,Pe,Ee){if(!ne[Ae]){var Te={},be={},me=V.createProgram();V.attachShader(me,ee(_e,V.VERTEX_SHADER)),V.attachShader(me,ee(Pe,V.FRAGMENT_SHADER)),V.linkProgram(me),ne[Ae]={program:me,transaction:function(Ce){V.useProgram(me),Ce({setUniform:function(De,Ze){var st=[],et=arguments.length-2;while(et-- >0)st[et]=arguments[et+2];var lt=be[Ze]||(be[Ze]=V.getUniformLocation(me,Ze));V["uniform"+De].apply(V,[lt].concat(st))},setAttribute:function(De,Ze,st,et,lt){var it=Te[De];if(!it)it=Te[De]={buf:V.createBuffer(),loc:V.getAttribLocation(me,De),data:null};if(V.bindBuffer(V.ARRAY_BUFFER,it.buf),V.vertexAttribPointer(it.loc,Ze,V.FLOAT,!1,0,0),V.enableVertexAttribArray(it.loc),j)V.vertexAttribDivisor(it.loc,et);else J("ANGLE_instanced_arrays").vertexAttribDivisorANGLE(it.loc,et);if(lt!==it.data)V.bufferData(V.ARRAY_BUFFER,lt,st),it.data=lt}})}}}ne[Ae].transaction(Ee)},le=function(Ae,_e){oe++;try{V.activeTexture(V.TEXTURE0+oe);var Pe=ce[Ae];if(!Pe)Pe=ce[Ae]=V.createTexture(),V.bindTexture(V.TEXTURE_2D,Pe),V.texParameteri(V.TEXTURE_2D,V.TEXTURE_MIN_FILTER,V.NEAREST),V.texParameteri(V.TEXTURE_2D,V.TEXTURE_MAG_FILTER,V.NEAREST);V.bindTexture(V.TEXTURE_2D,Pe),_e(Pe,oe)}finally{oe--}},he=function(Ae,_e,Pe){var Ee=V.createFramebuffer();ie.push(Ee),V.bindFramebuffer(V.FRAMEBUFFER,Ee),V.activeTexture(V.TEXTURE0+_e),V.bindTexture(V.TEXTURE_2D,Ae),V.framebufferTexture2D(V.FRAMEBUFFER,V.COLOR_ATTACHMENT0,V.TEXTURE_2D,Ae,0);try{Pe(Ee)}finally{V.deleteFramebuffer(Ee),V.bindFramebuffer(V.FRAMEBUFFER,ie[--ie.length-1]||null)}},ue=function(){q={},ne={},ce={},oe=-1,ie.length=0};var j=typeof WebGL2RenderingContext<"u"&&V instanceof WebGL2RenderingContext,q={},ne={},ce={},oe=-1,ie=[];V.canvas.addEventListener("webglcontextlost",function(Ae){ue(),Ae.preventDefault()},!1),c.set(V,W={gl:V,isWebGL2:j,getExtension:J,withProgram:se,withTexture:le,withTextureFramebuffer:he,handleContextLoss:ue})}X(W)}function u(U,X,V,W,j,q,ne,ce){if(ne===void 0)ne=15;if(ce===void 0)ce=null;d(U,function(oe){var{gl:ie,withProgram:J,withTexture:ee}=oe;ee("copy",function(se,le){ie.texImage2D(ie.TEXTURE_2D,0,ie.RGBA,j,q,0,ie.RGBA,ie.UNSIGNED_BYTE,X),J("copy",s,a,function(he){var{setUniform:ue,setAttribute:Ae}=he;Ae("aUV",2,ie.STATIC_DRAW,0,new Float32Array([0,0,2,0,0,2])),ue("1i","image",le),ie.bindFramebuffer(ie.FRAMEBUFFER,ce||null),ie.disable(ie.BLEND),ie.colorMask(ne&8,ne&4,ne&2,ne&1),ie.viewport(V,W,j,q),ie.scissor(V,W,j,q),ie.drawArrays(ie.TRIANGLES,0,3)})})})}function h(U,X,V){var{width:W,height:j}=U;d(U,function(q){var ne=q.gl,ce=new Uint8Array(W*j*4);ne.readPixels(0,0,W,j,ne.RGBA,ne.UNSIGNED_BYTE,ce),U.width=X,U.height=V,u(ne,ce,0,0,W,j)})}var A=Object.freeze({__proto__:null,withWebGLContext:d,renderImageData:u,resizeWebGLCanvasWithoutClearing:h});function m(U,X,V,W,j,q){if(q===void 0)q=1;var ne=new Uint8Array(U*X),ce=W[2]-W[0],oe=W[3]-W[1],ie=[];r(V,function(Ae,_e,Pe,Ee){ie.push({x1:Ae,y1:_e,x2:Pe,y2:Ee,minX:Math.min(Ae,Pe),minY:Math.min(_e,Ee),maxX:Math.max(Ae,Pe),maxY:Math.max(_e,Ee)})}),ie.sort(function(Ae,_e){return Ae.maxX-_e.maxX});for(var J=0;J<U;J++)for(var ee=0;ee<X;ee++){var se=he(W[0]+ce*(J+0.5)/U,W[1]+oe*(ee+0.5)/X),le=Math.pow(1-Math.abs(se)/j,q)/2;if(se<0)le=1-le;le=Math.max(0,Math.min(255,Math.round(le*255))),ne[ee*U+J]=le}return ne;function he(Ae,_e){var Pe=1/0,Ee=1/0;for(var Te=ie.length;Te--;){var be=ie[Te];if(be.maxX+Ee<=Ae)break;if(Ae+Ee>be.minX&&_e-Ee<be.maxY&&_e+Ee>be.minY){var me=_(Ae,_e,be.x1,be.y1,be.x2,be.y2);if(me<Pe)Pe=me,Ee=Math.sqrt(Pe)}}if(ue(Ae,_e))Ee=-Ee;return Ee}function ue(Ae,_e){var Pe=0;for(var Ee=ie.length;Ee--;){var Te=ie[Ee];if(Te.maxX<=Ae)break;var be=Te.y1>_e!==Te.y2>_e&&Ae<(Te.x2-Te.x1)*(_e-Te.y1)/(Te.y2-Te.y1)+Te.x1;if(be)Pe+=Te.y1<Te.y2?1:-1}return Pe!==0}}function p(U,X,V,W,j,q,ne,ce,oe,ie){if(q===void 0)q=1;if(ce===void 0)ce=0;if(oe===void 0)oe=0;if(ie===void 0)ie=0;g(U,X,V,W,j,q,ne,null,ce,oe,ie)}function g(U,X,V,W,j,q,ne,ce,oe,ie,J){if(q===void 0)q=1;if(oe===void 0)oe=0;if(ie===void 0)ie=0;if(J===void 0)J=0;var ee=m(U,X,V,W,j,q),se=new Uint8Array(ee.length*4);for(var le=0;le<ee.length;le++)se[le*4+J]=ee[le];u(ne,se,oe,ie,U,X,1<<3-J,ce)}function _(U,X,V,W,j,q){var ne=j-V,ce=q-W,oe=ne*ne+ce*ce,ie=oe?Math.max(0,Math.min(1,((U-V)*ne+(X-W)*ce)/oe)):0,J=U-(V+ie*ne),ee=X-(W+ie*ce);return J*J+ee*ee}var f=Object.freeze({__proto__:null,generate:m,generateIntoCanvas:p,generateIntoFramebuffer:g}),y="precision highp float;uniform vec4 uGlyphBounds;attribute vec2 aUV;attribute vec4 aLineSegment;varying vec4 vLineSegment;varying vec2 vGlyphXY;void main(){vLineSegment=aLineSegment;vGlyphXY=mix(uGlyphBounds.xy,uGlyphBounds.zw,aUV);gl_Position=vec4(mix(vec2(-1.0),vec2(1.0),aUV),0.0,1.0);}",x="precision highp float;uniform vec4 uGlyphBounds;uniform float uMaxDistance;uniform float uExponent;varying vec4 vLineSegment;varying vec2 vGlyphXY;float absDistToSegment(vec2 point,vec2 lineA,vec2 lineB){vec2 lineDir=lineB-lineA;float lenSq=dot(lineDir,lineDir);float t=lenSq==0.0 ? 0.0 : clamp(dot(point-lineA,lineDir)/lenSq,0.0,1.0);vec2 linePt=lineA+t*lineDir;return distance(point,linePt);}void main(){vec4 seg=vLineSegment;vec2 p=vGlyphXY;float dist=absDistToSegment(p,seg.xy,seg.zw);float val=pow(1.0-clamp(dist/uMaxDistance,0.0,1.0),uExponent)*0.5;bool crossing=(seg.y>p.y!=seg.w>p.y)&&(p.x<(seg.z-seg.x)*(p.y-seg.y)/(seg.w-seg.y)+seg.x);bool crossingUp=crossing&&vLineSegment.y<vLineSegment.w;gl_FragColor=vec4(crossingUp ? 1.0/255.0 : 0.0,crossing&&!crossingUp ? 1.0/255.0 : 0.0,0.0,val);}",C="precision highp float;uniform sampler2D tex;varying vec2 vUV;void main(){vec4 color=texture2D(tex,vUV);bool inside=color.r!=color.g;float val=inside ? 1.0-color.a : color.a;gl_FragColor=vec4(val);}",I=new Float32Array([0,0,2,0,0,2]),b=null,P=!1,E={},B=new WeakMap;function w(U){if(!P&&!F(U))throw Error("WebGL generation not supported")}function T(U,X,V,W,j,q,ne){if(q===void 0)q=1;if(ne===void 0)ne=null;if(!ne){if(ne=b,!ne){var ce=typeof OffscreenCanvas==="function"?new OffscreenCanvas(1,1):typeof document<"u"?document.createElement("canvas"):null;if(!ce)throw Error("OffscreenCanvas or DOM canvas not supported");ne=b=ce.getContext("webgl",{depth:!1})}}w(ne);var oe=new Uint8Array(U*X*4);d(ne,function(se){var{gl:le,withTexture:he,withTextureFramebuffer:ue}=se;he("readable",function(Ae,_e){le.texImage2D(le.TEXTURE_2D,0,le.RGBA,U,X,0,le.RGBA,le.UNSIGNED_BYTE,null),ue(Ae,_e,function(Pe){N(U,X,V,W,j,q,le,Pe,0,0,0),le.readPixels(0,0,U,X,le.RGBA,le.UNSIGNED_BYTE,oe)})})});var ie=new Uint8Array(U*X);for(var J=0,ee=0;J<oe.length;J+=4)ie[ee++]=oe[J];return ie}function Q(U,X,V,W,j,q,ne,ce,oe,ie){if(q===void 0)q=1;if(ce===void 0)ce=0;if(oe===void 0)oe=0;if(ie===void 0)ie=0;N(U,X,V,W,j,q,ne,null,ce,oe,ie)}function N(U,X,V,W,j,q,ne,ce,oe,ie,J){if(q===void 0)q=1;if(oe===void 0)oe=0;if(ie===void 0)ie=0;if(J===void 0)J=0;w(ne);var ee=[];r(V,function(se,le,he,ue){ee.push(se,le,he,ue)}),ee=new Float32Array(ee),d(ne,function(se){var{gl:le,isWebGL2:he,getExtension:ue,withProgram:Ae,withTexture:_e,withTextureFramebuffer:Pe,handleContextLoss:Ee}=se;if(_e("rawDistances",function(Te,be){if(U!==Te._lastWidth||X!==Te._lastHeight)le.texImage2D(le.TEXTURE_2D,0,le.RGBA,Te._lastWidth=U,Te._lastHeight=X,0,le.RGBA,le.UNSIGNED_BYTE,null);Ae("main",y,x,function(me){var{setAttribute:ye,setUniform:Ce}=me,ve=!he&&ue("ANGLE_instanced_arrays"),De=!he&&ue("EXT_blend_minmax");ye("aUV",2,le.STATIC_DRAW,0,I),ye("aLineSegment",4,le.DYNAMIC_DRAW,1,ee),Ce.apply(void 0,["4f","uGlyphBounds"].concat(W)),Ce("1f","uMaxDistance",j),Ce("1f","uExponent",q),Pe(Te,be,function(Ze){if(le.enable(le.BLEND),le.colorMask(!0,!0,!0,!0),le.viewport(0,0,U,X),le.scissor(0,0,U,X),le.blendFunc(le.ONE,le.ONE),le.blendEquationSeparate(le.FUNC_ADD,he?le.MAX:De.MAX_EXT),le.clear(le.COLOR_BUFFER_BIT),he)le.drawArraysInstanced(le.TRIANGLES,0,3,ee.length/4);else ve.drawArraysInstancedANGLE(le.TRIANGLES,0,3,ee.length/4)})}),Ae("post",s,C,function(me){me.setAttribute("aUV",2,le.STATIC_DRAW,0,I),me.setUniform("1i","tex",be),le.bindFramebuffer(le.FRAMEBUFFER,ce),le.disable(le.BLEND),le.colorMask(J===0,J===1,J===2,J===3),le.viewport(oe,ie,U,X),le.scissor(oe,ie,U,X),le.drawArrays(le.TRIANGLES,0,3)})}),le.isContextLost())throw Ee(),Error("webgl context lost")})}function F(U){var X=!U||U===b?E:U.canvas||U,V=B.get(X);if(V===void 0){P=!0;var W=null;try{var j=[97,106,97,61,99,137,118,80,80,118,137,99,61,97,106,97],q=T(4,4,"M8,8L16,8L24,24L16,24Z",[0,0,32,32],24,1,U);if(V=q&&j.length===q.length&&q.every(function(ne,ce){return ne===j[ce]}),!V)W="bad trial run results",console.info(j,q)}catch(ne){V=!1,W=ne.message}if(W)console.warn("WebGL SDF generation not supported:",W);P=!1,B.set(X,V)}return V}var H=Object.freeze({__proto__:null,generate:T,generateIntoCanvas:Q,generateIntoFramebuffer:N,isSupported:F});function z(U,X,V,W,j,q){if(j===void 0)j=Math.max(W[2]-W[0],W[3]-W[1])/2;if(q===void 0)q=1;try{return T.apply(H,arguments)}catch(ne){return console.info("WebGL SDF generation failed, falling back to JS",ne),m.apply(f,arguments)}}function Y(U,X,V,W,j,q,ne,ce,oe,ie){if(j===void 0)j=Math.max(W[2]-W[0],W[3]-W[1])/2;if(q===void 0)q=1;if(ce===void 0)ce=0;if(oe===void 0)oe=0;if(ie===void 0)ie=0;try{return Q.apply(H,arguments)}catch(J){return console.info("WebGL SDF generation failed, falling back to JS",J),p.apply(f,arguments)}}return t.forEachPathCommand=i,t.generate=z,t.generateIntoCanvas=Y,t.javascript=f,t.pathToLineSegments=r,t.webgl=H,t.webglUtils=A,Object.defineProperty(t,"__esModule",{value:!0}),t}({});return e}function L_t(){var e=function(t){var n={R:"13k,1a,2,3,3,2+1j,ch+16,a+1,5+2,2+n,5,a,4,6+16,4+3,h+1b,4mo,179q,2+9,2+11,2i9+7y,2+68,4,3+4,5+13,4+3,2+4k,3+29,8+cf,1t+7z,w+17,3+3m,1t+3z,16o1+5r,8+30,8+mc,29+1r,29+4v,75+73",EN:"1c+9,3d+1,6,187+9,513,4+5,7+9,sf+j,175h+9,qw+q,161f+1d,4xt+a,25i+9",ES:"17,2,6dp+1,f+1,av,16vr,mx+1,4o,2",ET:"z+2,3h+3,b+1,ym,3e+1,2o,p4+1,8,6u,7c,g6,1wc,1n9+4,30+1b,2n,6d,qhx+1,h0m,a+1,49+2,63+1,4+1,6bb+3,12jj",AN:"16o+5,2j+9,2+1,35,ed,1ff2+9,87+u",CS:"18,2+1,b,2u,12k,55v,l,17v0,2,3,53,2+1,b",B:"a,3,f+2,2v,690",S:"9,2,k",WS:"c,k,4f4,1vk+a,u,1j,335",ON:"x+1,4+4,h+5,r+5,r+3,z,5+3,2+1,2+1,5,2+2,3+4,o,w,ci+1,8+d,3+d,6+8,2+g,39+1,9,6+1,2,33,b8,3+1,3c+1,7+1,5r,b,7h+3,sa+5,2,3i+6,jg+3,ur+9,2v,ij+1,9g+9,7+a,8m,4+1,49+x,14u,2+2,c+2,e+2,e+2,e+1,i+n,e+e,2+p,u+2,e+2,36+1,2+3,2+1,b,2+2,6+5,2,2,2,h+1,5+4,6+3,3+f,16+2,5+3l,3+81,1y+p,2+40,q+a,m+13,2r+ch,2+9e,75+hf,3+v,2+2w,6e+5,f+6,75+2a,1a+p,2+2g,d+5x,r+b,6+3,4+o,g,6+1,6+2,2k+1,4,2j,5h+z,1m+1,1e+f,t+2,1f+e,d+3,4o+3,2s+1,w,535+1r,h3l+1i,93+2,2s,b+1,3l+x,2v,4g+3,21+3,kz+1,g5v+1,5a,j+9,n+v,2,3,2+8,2+1,3+2,2,3,46+1,4+4,h+5,r+5,r+a,3h+2,4+6,b+4,78,1r+24,4+c,4,1hb,ey+6,103+j,16j+c,1ux+7,5+g,fsh,jdq+1t,4,57+2e,p1,1m,1m,1m,1m,4kt+1,7j+17,5+2r,d+e,3+e,2+e,2+10,m+4,w,1n+5,1q,4z+5,4b+rb,9+c,4+c,4+37,d+2g,8+b,l+b,5+1j,9+9,7+13,9+t,3+1,27+3c,2+29,2+3q,d+d,3+4,4+2,6+6,a+o,8+6,a+2,e+6,16+42,2+1i",BN:"0+8,6+d,2s+5,2+p,e,4m9,1kt+2,2b+5,5+5,17q9+v,7k,6p+8,6+1,119d+3,440+7,96s+1,1ekf+1,1ekf+1,1ekf+1,1ekf+1,1ekf+1,1ekf+1,1ekf+1,1ekf+1,1ekf+1,1ekf+1,1ekf+1,1ekf+75,6p+2rz,1ben+1,1ekf+1,1ekf+1",NSM:"lc+33,7o+6,7c+18,2,2+1,2+1,2,21+a,1d+k,h,2u+6,3+5,3+1,2+3,10,v+q,2k+a,1n+8,a,p+3,2+8,2+2,2+4,18+2,3c+e,2+v,1k,2,5+7,5,4+6,b+1,u,1n,5+3,9,l+1,r,3+1,1m,5+1,5+1,3+2,4,v+1,4,c+1,1m,5+4,2+1,5,l+1,n+5,2,1n,3,2+3,9,8+1,c+1,v,1q,d,1f,4,1m+2,6+2,2+3,8+1,c+1,u,1n,g+1,l+1,t+1,1m+1,5+3,9,l+1,u,21,8+2,2,2j,3+6,d+7,2r,3+8,c+5,23+1,s,2,2,1k+d,2+4,2+1,6+a,2+z,a,2v+3,2+5,2+1,3+1,q+1,5+2,h+3,e,3+1,7,g,jk+2,qb+2,u+2,u+1,v+1,1t+1,2+6,9,3+a,a,1a+2,3c+1,z,3b+2,5+1,a,7+2,64+1,3,1n,2+6,2,2,3+7,7+9,3,1d+g,1s+3,1d,2+4,2,6,15+8,d+1,x+3,3+1,2+2,1l,2+1,4,2+2,1n+7,3+1,49+2,2+c,2+6,5,7,4+1,5j+1l,2+4,k1+w,2db+2,3y,2p+v,ff+3,30+1,n9x+3,2+9,x+1,29+1,7l,4,5,q+1,6,48+1,r+h,e,13+7,q+a,1b+2,1d,3+3,3+1,14,1w+5,3+1,3+1,d,9,1c,1g,2+2,3+1,6+1,2,17+1,9,6n,3,5,fn5,ki+f,h+f,r2,6b,46+4,1af+2,2+1,6+3,15+2,5,4m+1,fy+3,as+1,4a+a,4x,1j+e,1l+2,1e+3,3+1,1y+2,11+4,2+7,1r,d+1,1h+8,b+3,3,2o+2,3,2+1,7,4h,4+7,m+1,1m+1,4,12+6,4+4,5g+7,3+2,2,o,2d+5,2,5+1,2+1,6n+3,7+1,2+1,s+1,2e+7,3,2+1,2z,2,3+5,2,2u+2,3+3,2+4,78+8,2+1,75+1,2,5,41+3,3+1,5,x+5,3+1,15+5,3+3,9,a+5,3+2,1b+c,2+1,bb+6,2+5,2d+l,3+6,2+1,2+1,3f+5,4,2+1,2+6,2,21+1,4,2,9o+1,f0c+4,1o+6,t5,1s+3,2a,f5l+1,43t+2,i+7,3+6,v+3,45+2,1j0+1i,5+1d,9,f,n+4,2+e,11t+6,2+g,3+6,2+1,2+4,7a+6,c6+3,15t+6,32+6,gzhy+6n",AL:"16w,3,2,e+1b,z+2,2+2s,g+1,8+1,b+m,2+t,s+2i,c+e,4h+f,1d+1e,1bwe+dp,3+3z,x+c,2+1,35+3y,2rm+z,5+7,b+5,dt+l,c+u,17nl+27,1t+27,4x+6n,3+d",LRO:"6ct",RLO:"6cu",LRE:"6cq",RLE:"6cr",PDF:"6cs",LRI:"6ee",RLI:"6ef",FSI:"6eg",PDI:"6eh"},o={},i={};o.L=1,i[1]="L",Object.keys(n).forEach(function(Ee,Te){o[Ee]=1<<Te+1,i[o[Ee]]=Ee}),Object.freeze(o);var r=o.LRI|o.RLI|o.FSI,s=o.L|o.R|o.AL,a=o.B|o.S|o.WS|o.ON|o.FSI|o.LRI|o.RLI|o.PDI,c=o.BN|o.RLE|o.LRE|o.RLO|o.LRO|o.PDF,l=o.S|o.WS|o.B|r|o.PDI|c,d=null;function u(){if(!d){d=new Map;var Ee=0;for(var Te in n)if(n.hasOwnProperty(Te)){var be=n[Te],me="",ye=void 0,Ce=!1,ve=0;for(var De=0;De<=be.length+1;De+=1){var Ze=be[De];if(Ze!==","&&De!==be.length)if(Ze==="+")Ce=!0,ve=Ee=ve+parseInt(me,36),me="";else me+=Ze;else{if(!Ce)ve=Ee=ve+parseInt(me,36),ye=Ee;else ye=Ee+parseInt(me,36);Ce=!1,me="",ve=ye;for(var st=Ee;st<ye+1;st+=1)d.set(st,o[Te])}}}}}function h(Ee){return u(),d.get(Ee.codePointAt(0))||o.L}function A(Ee){return i[h(Ee)]}var m={pairs:"14>1,1e>2,u>2,2wt>1,1>1,1ge>1,1wp>1,1j>1,f>1,hm>1,1>1,u>1,u6>1,1>1,+5,28>1,w>1,1>1,+3,b8>1,1>1,+3,1>3,-1>-1,3>1,1>1,+2,1s>1,1>1,x>1,th>1,1>1,+2,db>1,1>1,+3,3>1,1>1,+2,14qm>1,1>1,+1,4q>1,1e>2,u>2,2>1,+1",canonical:"6f1>-6dx,6dy>-6dx,6ec>-6ed,6ee>-6ed,6ww>2jj,-2ji>2jj,14r4>-1e7l,1e7m>-1e7l,1e7m>-1e5c,1e5d>-1e5b,1e5c>-14qx,14qy>-14qx,14vn>-1ecg,1ech>-1ecg,1edu>-1ecg,1eci>-1ecg,1eda>-1ecg,1eci>-1ecg,1eci>-168q,168r>-168q,168s>-14ye,14yf>-14ye"};function p(Ee,Te){var be=36,me=0,ye=new Map,Ce=Te&&new Map,ve;return Ee.split(",").forEach(function De(Ze){if(Ze.indexOf("+")!==-1)for(var st=+Ze;st--;)De(ve);else{ve=Ze;var et=Ze.split(">"),lt=et[0],it=et[1];lt=String.fromCodePoint(me+=parseInt(lt,be)),it=String.fromCodePoint(me+=parseInt(it,be)),ye.set(lt,it),Te&&Ce.set(it,lt)}}),{map:ye,reverseMap:Ce}}var g,_,f;function y(){if(!g){var Ee=p(m.pairs,!0),{map:Te,reverseMap:be}=Ee;g=Te,_=be,f=p(m.canonical,!1).map}}function x(Ee){return y(),g.get(Ee)||null}function C(Ee){return y(),_.get(Ee)||null}function I(Ee){return y(),f.get(Ee)||null}var{L:b,R:P,EN:E,ES:B,ET:w,AN:T,CS:Q,B:N,S:F,ON:H,BN:z,NSM:Y,AL:U,LRO:X,RLO:V,LRE:W,RLE:j,PDF:q,LRI:ne,RLI:ce,FSI:oe,PDI:ie}=o;function J(Ee,Te){var be=125,me=new Uint32Array(Ee.length);for(var ye=0;ye<Ee.length;ye++)me[ye]=h(Ee[ye]);var Ce=new Map;function ve(dd,pc){var Ys=me[dd];if(me[dd]=pc,Ce.set(Ys,Ce.get(Ys)-1),Ys&a)Ce.set(a,Ce.get(a)-1);if(Ce.set(pc,(Ce.get(pc)||0)+1),pc&a)Ce.set(a,(Ce.get(a)||0)+1)}var De=new Uint8Array(Ee.length),Ze=new Map,st=[],et=null;for(var lt=0;lt<Ee.length;lt++){if(!et)st.push(et={start:lt,end:Ee.length-1,level:Te==="rtl"?1:Te==="ltr"?0:As(lt,!1)});if(me[lt]&N)et.end=lt,et=null}var it=j|W|V|X|r|ie|q|N,gt=function(dd){return dd+(dd&1?1:2)},wt=function(dd){return dd+(dd&1?2:1)};for(var Dt=0;Dt<st.length;Dt++){et=st[Dt];var vt=[{_level:et.level,_override:0,_isolate:0}],Ht=void 0,Xt=0,ut=0,je=0;Ce.clear();for(var Re=et.start;Re<=et.end;Re++){var Je=me[Re];if(Ht=vt[vt.length-1],Ce.set(Je,(Ce.get(Je)||0)+1),Je&a)Ce.set(a,(Ce.get(a)||0)+1);if(Je&it){if(Je&(j|W)){De[Re]=Ht._level;var Ve=(Je===j?wt:gt)(Ht._level);if(Ve<=be&&!Xt&&!ut)vt.push({_level:Ve,_override:0,_isolate:0});else if(!Xt)ut++}else if(Je&(V|X)){De[Re]=Ht._level;var Ye=(Je===V?wt:gt)(Ht._level);if(Ye<=be&&!Xt&&!ut)vt.push({_level:Ye,_override:Je&V?P:b,_isolate:0});else if(!Xt)ut++}else if(Je&r){if(Je&oe)Je=As(Re+1,!0)===1?ce:ne;if(De[Re]=Ht._level,Ht._override)ve(Re,Ht._override);var mt=(Je===ce?wt:gt)(Ht._level);if(mt<=be&&Xt===0&&ut===0)je++,vt.push({_level:mt,_override:0,_isolate:1,_isolInitIndex:Re});else Xt++}else if(Je&ie){if(Xt>0)Xt--;else if(je>0){ut=0;while(!vt[vt.length-1]._isolate)vt.pop();var ft=vt[vt.length-1]._isolInitIndex;if(ft!=null)Ze.set(ft,Re),Ze.set(Re,ft);vt.pop(),je--}if(Ht=vt[vt.length-1],De[Re]=Ht._level,Ht._override)ve(Re,Ht._override)}else if(Je&q){if(Xt===0){if(ut>0)ut--;else if(!Ht._isolate&&vt.length>1)vt.pop(),Ht=vt[vt.length-1]}De[Re]=Ht._level}else if(Je&N)De[Re]=et.level}else if(De[Re]=Ht._level,Ht._override&&Je!==z)ve(Re,Ht._override)}var Oe=[],qe=null;for(var rt=et.start;rt<=et.end;rt++){var Ct=me[rt];if(!(Ct&c)){var Mt=De[rt],Nt=Ct&r,Ot=Ct===ie;if(qe&&Mt===qe._level)qe._end=rt,qe._endsWithIsolInit=Nt;else Oe.push(qe={_start:rt,_end:rt,_level:Mt,_startsWithPDI:Ot,_endsWithIsolInit:Nt})}}var mn=[];for(var ln=0;ln<Oe.length;ln++){var Cn=Oe[ln];if(!Cn._startsWithPDI||Cn._startsWithPDI&&!Ze.has(Cn._start)){var vn=[qe=Cn];for(var nn=void 0;qe&&qe._endsWithIsolInit&&(nn=Ze.get(qe._end))!=null;)for(var on=ln+1;on<Oe.length;on++)if(Oe[on]._start===nn){vn.push(qe=Oe[on]);break}var Kn=[];for(var xo=0;xo<vn.length;xo++){var ai=vn[xo];for(var At=ai._start;At<=ai._end;At++)Kn.push(At)}var _t=De[Kn[0]],Tt=et.level;for(var Ut=Kn[0]-1;Ut>=0;Ut--)if(!(me[Ut]&c)){Tt=De[Ut];break}var Lt=Kn[Kn.length-1],fn=De[Lt],On=et.level;if(!(me[Lt]&r)){for(var Gn=Lt+1;Gn<=et.end;Gn++)if(!(me[Gn]&c)){On=De[Gn];break}}mn.push({_seqIndices:Kn,_sosType:Math.max(Tt,_t)%2?P:b,_eosType:Math.max(On,fn)%2?P:b})}}for(var fo=0;fo<mn.length;fo++){var Ho=mn[fo],{_seqIndices:Vn,_sosType:Wn,_eosType:Co}=Ho,Eo=De[Vn[0]]&1?P:b;if(Ce.get(Y))for(var In=0;In<Vn.length;In++){var eo=Vn[In];if(me[eo]&Y){var co=Wn;for(var $n=In-1;$n>=0;$n--)if(!(me[Vn[$n]]&c)){co=me[Vn[$n]];break}ve(eo,co&(r|ie)?H:co)}}if(Ce.get(E))for(var zo=0;zo<Vn.length;zo++){var qo=Vn[zo];if(me[qo]&E)for(var fi=zo-1;fi>=-1;fi--){var Nr=fi===-1?Wn:me[Vn[fi]];if(Nr&s){if(Nr===U)ve(qo,T);break}}}if(Ce.get(U))for(var bs=0;bs<Vn.length;bs++){var Fs=Vn[bs];if(me[Fs]&U)ve(Fs,P)}if(Ce.get(B)||Ce.get(Q))for(var wo=1;wo<Vn.length-1;wo++){var wr=Vn[wo];if(me[wr]&(B|Q)){var dr=0,Yr=0;for(var mc=wo-1;mc>=0;mc--)if(dr=me[Vn[mc]],!(dr&c))break;for(var zc=wo+1;zc<Vn.length;zc++)if(Yr=me[Vn[zc]],!(Yr&c))break;if(dr===Yr&&(me[wr]===B?dr===E:dr&(E|T)))ve(wr,dr)}}if(Ce.get(E))for(var nc=0;nc<Vn.length;nc++){var Bd=Vn[nc];if(me[Bd]&E){for(var Mh=nc-1;Mh>=0&&me[Vn[Mh]]&(w|c);Mh--)ve(Vn[Mh],E);for(nc++;nc<Vn.length&&me[Vn[nc]]&(w|c|E);nc++)if(me[Vn[nc]]!==E)ve(Vn[nc],E)}}if(Ce.get(w)||Ce.get(B)||Ce.get(Q))for(var Wo=0;Wo<Vn.length;Wo++){var Ti=Vn[Wo];if(me[Ti]&(w|B|Q)){ve(Ti,H);for(var zi=Wo-1;zi>=0&&me[Vn[zi]]&c;zi--)ve(Vn[zi],H);for(var el=Wo+1;el<Vn.length&&me[Vn[el]]&c;el++)ve(Vn[el],H)}}if(Ce.get(E))for(var Gc=0,wd=Wn;Gc<Vn.length;Gc++){var sf=Vn[Gc],B0=me[sf];if(B0&E){if(wd===b)ve(sf,b)}else if(B0&s)wd=B0}if(Ce.get(a)){var Hs=P|E|T,sh=Hs|b,w0=[];{var tu=[];for(var wu=0;wu<Vn.length;wu++)if(me[Vn[wu]]&a){var Rr=Ee[Vn[wu]],Yc=void 0;if(x(Rr)!==null)if(tu.length<63)tu.push({char:Rr,seqIndex:wu});else break;else if((Yc=C(Rr))!==null)for(var Ns=tu.length-1;Ns>=0;Ns--){var ja=tu[Ns].char;if(ja===Yc||ja===C(I(Rr))||x(I(ja))===Rr){w0.push([tu[Ns].seqIndex,wu]),tu.length=Ns;break}}}w0.sort(function(dd,pc){return dd[0]-pc[0]})}for(var Rs=0;Rs<w0.length;Rs++){var Vi=w0[Rs],xa=Vi[0],Tl=Vi[1],cs=!1,Td=0;for(var Dl=xa+1;Dl<Tl;Dl++){var Dd=Vn[Dl];if(me[Dd]&sh){cs=!0;var tA=me[Dd]&Hs?P:b;if(tA===Eo){Td=tA;break}}}if(cs&&!Td){Td=Wn;for(var Tu=xa-1;Tu>=0;Tu--){var af=Vn[Tu];if(me[af]&sh){var r_=me[af]&Hs?P:b;if(r_!==Eo)Td=r_;else Td=Eo;break}}}if(Td){if(me[Vn[xa]]=me[Vn[Tl]]=Td,Td!==Eo){for(var Bh=xa+1;Bh<Vn.length;Bh++)if(!(me[Vn[Bh]]&c)){if(h(Ee[Vn[Bh]])&Y)me[Vn[Bh]]=Td;break}}if(Td!==Eo){for(var lp=Tl+1;lp<Vn.length;lp++)if(!(me[Vn[lp]]&c)){if(h(Ee[Vn[lp]])&Y)me[Vn[lp]]=Td;break}}}}for(var nu=0;nu<Vn.length;nu++)if(me[Vn[nu]]&a){var gm=nu,jl=nu,k1=Wn;for(var fm=nu-1;fm>=0;fm--)if(me[Vn[fm]]&c)gm=fm;else{k1=me[Vn[fm]]&Hs?P:b;break}var Z_=Co;for(var cf=nu+1;cf<Vn.length;cf++)if(me[Vn[cf]]&(a|c))jl=cf;else{Z_=me[Vn[cf]]&Hs?P:b;break}for(var yb=gm;yb<=jl;yb++)me[Vn[yb]]=k1===Z_?k1:Eo;nu=jl}}}for(var ah=et.start;ah<=et.end;ah++){var xb=De[ah],lf=me[ah];if(xb&1){if(lf&(b|E|T))De[ah]++}else if(lf&P)De[ah]++;else if(lf&(T|E))De[ah]+=2;if(lf&c)De[ah]=ah===0?et.level:De[ah-1];if(ah===et.end||h(Ee[ah])&(F|N))for(var Nd=ah;Nd>=0&&h(Ee[Nd])&l;Nd--)De[Nd]=et.level}}return{levels:De,paragraphs:st};function As(dd,pc){for(var Ys=dd;Ys<Ee.length;Ys++){var nA=me[Ys];if(nA&(P|U))return 1;if(nA&(N|b)||pc&&nA===ie)return 0;if(nA&r){var cC=Ao(Ys);Ys=cC===-1?Ee.length:cC}}return 0}function Ao(dd){var pc=1;for(var Ys=dd+1;Ys<Ee.length;Ys++){var nA=me[Ys];if(nA&N)break;if(nA&ie){if(--pc===0)return Ys}else if(nA&r)pc++}return-1}}var ee="14>1,j>2,t>2,u>2,1a>g,2v3>1,1>1,1ge>1,1wd>1,b>1,1j>1,f>1,ai>3,-2>3,+1,8>1k0,-1jq>1y7,-1y6>1hf,-1he>1h6,-1h5>1ha,-1h8>1qi,-1pu>1,6>3u,-3s>7,6>1,1>1,f>1,1>1,+2,3>1,1>1,+13,4>1,1>1,6>1eo,-1ee>1,3>1mg,-1me>1mk,-1mj>1mi,-1mg>1mi,-1md>1,1>1,+2,1>10k,-103>1,1>1,4>1,5>1,1>1,+10,3>1,1>8,-7>8,+1,-6>7,+1,a>1,1>1,u>1,u6>1,1>1,+5,26>1,1>1,2>1,2>2,8>1,7>1,4>1,1>1,+5,b8>1,1>1,+3,1>3,-2>1,2>1,1>1,+2,c>1,3>1,1>1,+2,h>1,3>1,a>1,1>1,2>1,3>1,1>1,d>1,f>1,3>1,1a>1,1>1,6>1,7>1,13>1,k>1,1>1,+19,4>1,1>1,+2,2>1,1>1,+18,m>1,a>1,1>1,lk>1,1>1,4>1,2>1,f>1,3>1,1>1,+3,db>1,1>1,+3,3>1,1>1,+2,14qm>1,1>1,+1,6>1,4j>1,j>2,t>2,u>2,2>1,+1",se;function le(){if(!se){var Ee=p(ee,!0),{map:Te,reverseMap:be}=Ee;be.forEach(function(me,ye){Te.set(ye,me)}),se=Te}}function he(Ee){return le(),se.get(Ee)||null}function ue(Ee,Te,be,me){var ye=Ee.length;be=Math.max(0,be==null?0:+be),me=Math.min(ye-1,me==null?ye-1:+me);var Ce=new Map;for(var ve=be;ve<=me;ve++)if(Te[ve]&1){var De=he(Ee[ve]);if(De!==null)Ce.set(ve,De)}return Ce}function Ae(Ee,Te,be,me){var ye=Ee.length;be=Math.max(0,be==null?0:+be),me=Math.min(ye-1,me==null?ye-1:+me);var Ce=[];return Te.paragraphs.forEach(function(ve){var De=Math.max(be,ve.start),Ze=Math.min(me,ve.end);if(De<Ze){var st=Te.levels.slice(De,Ze+1);for(var et=Ze;et>=De&&h(Ee[et])&l;et--)st[et]=ve.level;var lt=ve.level,it=1/0;for(var gt=0;gt<st.length;gt++){var wt=st[gt];if(wt>lt)lt=wt;if(wt<it)it=wt|1}for(var Dt=lt;Dt>=it;Dt--)for(var vt=0;vt<st.length;vt++)if(st[vt]>=Dt){var Ht=vt;while(vt+1<st.length&&st[vt+1]>=Dt)vt++;if(vt>Ht)Ce.push([Ht+De,vt+De])}}}),Ce}function _e(Ee,Te,be,me){var ye=Pe(Ee,Te,be,me),Ce=[].concat(Ee);return ye.forEach(function(ve,De){Ce[De]=(Te.levels[ve]&1?he(Ee[ve]):null)||Ee[ve]}),Ce.join("")}function Pe(Ee,Te,be,me){var ye=Ae(Ee,Te,be,me),Ce=[];for(var ve=0;ve<Ee.length;ve++)Ce[ve]=ve;return ye.forEach(function(De){var Ze=De[0],st=De[1],et=Ce.slice(Ze,st+1);for(var lt=et.length;lt--;)Ce[st-lt]=et[lt]}),Ce}return t.closingToOpeningBracket=C,t.getBidiCharType=h,t.getBidiCharTypeName=A,t.getCanonicalBracket=I,t.getEmbeddingLevels=J,t.getMirroredCharacter=he,t.getMirroredCharactersMap=ue,t.getReorderSegments=Ae,t.getReorderedIndices=Pe,t.getReorderedString=_e,t.openingToClosingBracket=x,Object.defineProperty(t,"__esModule",{value:!0}),t}({});return e}var hwe=/\bvoid\s+main\s*\(\s*\)\s*{/g;function uwe(e){let t=/^[ \t]*#include +<([\w\d./]+)>/gm;function n(o,i){let r=sa[i];return r?uwe(r):o}return e.replace(t,n)}var N_=[];for(let e=0;e<256;e++)N_[e]=(e<16?"0":"")+e.toString(16);function Hco(){let e=Math.random()*4294967295|0,t=Math.random()*4294967295|0,n=Math.random()*4294967295|0,o=Math.random()*4294967295|0;return(N_[e&255]+N_[e>>8&255]+N_[e>>16&255]+N_[e>>24&255]+"-"+N_[t&255]+N_[t>>8&255]+"-"+N_[t>>16&15|64]+N_[t>>24&255]+"-"+N_[n&63|128]+N_[n>>8&255]+"-"+N_[n>>16&255]+N_[n>>24&255]+N_[o&255]+N_[o>>8&255]+N_[o>>16&255]+N_[o>>24&255]).toUpperCase()}var PQ=Object.assign||function(){let e=arguments[0];for(let t=1,n=arguments.length;t<n;t++){let o=arguments[t];if(o){for(let i in o)if(Object.prototype.hasOwnProperty.call(o,i))e[i]=o[i]}}return e},Oco=Date.now(),F_t=new WeakMap,H_t=new Map,zco=10000000000;function v0e(e,t){let n=Uco(t),o=F_t.get(e);if(!o)F_t.set(e,o=Object.create(null));if(o[n])return new o[n];let i=`_onBeforeCompile${n}`,r=function(l,d){e.onBeforeCompile.call(this,l,d);let u=this.customProgramCacheKey()+"|"+l.vertexShader+"|"+l.fragmentShader,h=H_t[u];if(!h){let A=Gco(this,l,t,n);h=H_t[u]=A}if(l.vertexShader=h.vertexShader,l.fragmentShader=h.fragmentShader,PQ(l.uniforms,this.uniforms),t.timeUniform)l.uniforms[t.timeUniform]={get value(){return Date.now()-Oco}};if(this[i])this[i](l)},s=function(){return a(t.chained?e:e.clone())},a=function(l){let d=Object.create(l,c);return Object.defineProperty(d,"baseMaterial",{value:e}),Object.defineProperty(d,"id",{value:zco++}),d.uuid=Hco(),d.uniforms=PQ({},l.uniforms,t.uniforms),d.defines=PQ({},l.defines,t.defines),d.defines[`TROIKA_DERIVED_MATERIAL_${n}`]="",d.extensions=PQ({},l.extensions,t.extensions),d._listeners=void 0,d},c={constructor:{value:s},isDerivedMaterial:{value:!0},type:{get:()=>e.type,set:(l)=>{e.type=l}},isDerivedFrom:{writable:!0,configurable:!0,value:function(l){let d=this.baseMaterial;return l===d||d.isDerivedMaterial&&d.isDerivedFrom(l)||!1}},customProgramCacheKey:{writable:!0,configurable:!0,value:function(){return e.customProgramCacheKey()+"|"+n}},onBeforeCompile:{get(){return r},set(l){this[i]=l}},copy:{writable:!0,configurable:!0,value:function(l){if(e.copy.call(this,l),!e.isShaderMaterial&&!e.isDerivedMaterial)PQ(this.extensions,l.extensions),PQ(this.defines,l.defines),PQ(this.uniforms,F9e.clone(l.uniforms));return this}},clone:{writable:!0,configurable:!0,value:function(){let l=new e.constructor;return a(l).copy(this)}},getDepthMaterial:{writable:!0,configurable:!0,value:function(){let l=this._depthMaterial;if(!l)l=this._depthMaterial=v0e(e.isDerivedMaterial?e.getDepthMaterial():new u0e({depthPacking:UAt}),t),l.defines.IS_DEPTH_MATERIAL="",l.uniforms=this.uniforms;return l}},getDistanceMaterial:{writable:!0,configurable:!0,value:function(){let l=this._distanceMaterial;if(!l)l=this._distanceMaterial=v0e(e.isDerivedMaterial?e.getDistanceMaterial():new h0e,t),l.defines.IS_DISTANCE_MATERIAL="",l.uniforms=this.uniforms;return l}},dispose:{writable:!0,configurable:!0,value(){let{_depthMaterial:l,_distanceMaterial:d}=this;if(l)l.dispose();if(d)d.dispose();e.dispose.call(this)}}};return o[n]=s,new s}function Gco(e,{vertexShader:t,fragmentShader:n},o,i){let{vertexDefs:r,vertexMainIntro:s,vertexMainOutro:a,vertexTransform:c,fragmentDefs:l,fragmentMainIntro:d,fragmentMainOutro:u,fragmentColorTransform:h,customRewriter:A,timeUniform:m}=o;if(r=r||"",s=s||"",a=a||"",l=l||"",d=d||"",u=u||"",c||A)t=uwe(t);if(h||A)n=n.replace(/^[ \t]*#include <((?:tonemapping|encodings|colorspace|fog|premultiplied_alpha|dithering)_fragment)>/gm,`
//!BEGIN_POST_CHUNK $1
$&
//!END_POST_CHUNK
`),n=uwe(n);if(A){let p=A({vertexShader:t,fragmentShader:n});t=p.vertexShader,n=p.fragmentShader}if(h){let p=[];n=n.replace(/^\/\/!BEGIN_POST_CHUNK[^]+?^\/\/!END_POST_CHUNK/gm,(g)=>(p.push(g),"")),u=`${h}
${p.join(`
`)}
${u}`}if(m){let p=`
uniform float ${m};
`;r=p+r,l=p+l}if(c){if(t=`vec3 troika_position_${i};
vec3 troika_normal_${i};
vec2 troika_uv_${i};
${t}
`,r=`${r}
void troikaVertexTransform${i}() {
vec3 position = troika_position_${i};
vec3 normal = troika_normal_${i};
vec2 uv = troika_uv_${i};
${c}
troika_position_${i} = position;
troika_normal_${i} = normal;
troika_uv_${i} = uv;
}
`,s=`
troika_position_${i} = vec3(position);
troika_normal_${i} = vec3(normal);
troika_uv_${i} = vec2(uv);
troikaVertexTransform${i}();
${s}
`,t=t.replace(/\b(position|normal|uv)\b/g,(p,g,_,f)=>/\battribute\s+vec[23]\s+$/.test(f.substr(0,_))?g:`troika_${g}_${i}`),!(e.map&&e.map.channel>0))t=t.replace(/\bMAP_UV\b/g,`troika_uv_${i}`)}return t=O_t(t,i,r,s,a),n=O_t(n,i,l,d,u),{vertexShader:t,fragmentShader:n}}function O_t(e,t,n,o,i){if(o||i||n)e=e.replace(hwe,`
${n}
void troikaOrigMain${t}() {`),e+=`
void main() {
${o}
troikaOrigMain${t}();
${i}
}`;return e}function Yco(e,t){return e==="uniforms"?void 0:typeof t==="function"?t.toString():t}var Vco=0,z_t=new Map;function Uco(e){let t=JSON.stringify(e,Yco),n=z_t.get(t);if(n==null)z_t.set(t,n=++Vco);return n}/*!
Custom build of Typr.ts (https://github.com/fredli74/Typr.ts) for use in Troika text rendering.
Original MIT license applies: https://github.com/fredli74/Typr.ts/blob/master/LICENSE
*/function Wco(){return typeof window>"u"&&(self.window=self),function(e){var t={parse:function(i){var r=t._bin,s=new Uint8Array(i);if(r.readASCII(s,0,4)=="ttcf"){var a=4;r.readUshort(s,a),a+=2,r.readUshort(s,a),a+=2;var c=r.readUint(s,a);a+=4;for(var l=[],d=0;d<c;d++){var u=r.readUint(s,a);a+=4,l.push(t._readFont(s,u))}return l}return[t._readFont(s,0)]},_readFont:function(i,r){var s=t._bin,a=r;s.readFixed(i,r),r+=4;var c=s.readUshort(i,r);r+=2,s.readUshort(i,r),r+=2,s.readUshort(i,r),r+=2,s.readUshort(i,r),r+=2;for(var l=["cmap","head","hhea","maxp","hmtx","name","OS/2","post","loca","glyf","kern","CFF ","GDEF","GPOS","GSUB","SVG "],d={_data:i,_offset:a},u={},h=0;h<c;h++){var A=s.readASCII(i,r,4);r+=4,s.readUint(i,r),r+=4;var m=s.readUint(i,r);r+=4;var p=s.readUint(i,r);r+=4,u[A]={offset:m,length:p}}for(h=0;h<l.length;h++){var g=l[h];u[g]&&(d[g.trim()]=t[g.trim()].parse(i,u[g].offset,u[g].length,d))}return d},_tabOffset:function(i,r,s){for(var a=t._bin,c=a.readUshort(i,s+4),l=s+12,d=0;d<c;d++){var u=a.readASCII(i,l,4);l+=4,a.readUint(i,l),l+=4;var h=a.readUint(i,l);if(l+=4,a.readUint(i,l),l+=4,u==r)return h}return 0}};t._bin={readFixed:function(i,r){return(i[r]<<8|i[r+1])+(i[r+2]<<8|i[r+3])/65540},readF2dot14:function(i,r){return t._bin.readShort(i,r)/16384},readInt:function(i,r){return t._bin._view(i).getInt32(r)},readInt8:function(i,r){return t._bin._view(i).getInt8(r)},readShort:function(i,r){return t._bin._view(i).getInt16(r)},readUshort:function(i,r){return t._bin._view(i).getUint16(r)},readUshorts:function(i,r,s){for(var a=[],c=0;c<s;c++)a.push(t._bin.readUshort(i,r+2*c));return a},readUint:function(i,r){return t._bin._view(i).getUint32(r)},readUint64:function(i,r){return 4294967296*t._bin.readUint(i,r)+t._bin.readUint(i,r+4)},readASCII:function(i,r,s){for(var a="",c=0;c<s;c++)a+=String.fromCharCode(i[r+c]);return a},readUnicode:function(i,r,s){for(var a="",c=0;c<s;c++){var l=i[r++]<<8|i[r++];a+=String.fromCharCode(l)}return a},_tdec:typeof window<"u"&&window.TextDecoder?new window.TextDecoder:null,readUTF8:function(i,r,s){var a=t._bin._tdec;return a&&r==0&&s==i.length?a.decode(i):t._bin.readASCII(i,r,s)},readBytes:function(i,r,s){for(var a=[],c=0;c<s;c++)a.push(i[r+c]);return a},readASCIIArray:function(i,r,s){for(var a=[],c=0;c<s;c++)a.push(String.fromCharCode(i[r+c]));return a},_view:function(i){return i._dataView||(i._dataView=i.buffer?new DataView(i.buffer,i.byteOffset,i.byteLength):new DataView(new Uint8Array(i).buffer))}},t._lctf={},t._lctf.parse=function(i,r,s,a,c){var l=t._bin,d={},u=r;l.readFixed(i,r),r+=4;var h=l.readUshort(i,r);r+=2;var A=l.readUshort(i,r);r+=2;var m=l.readUshort(i,r);return r+=2,d.scriptList=t._lctf.readScriptList(i,u+h),d.featureList=t._lctf.readFeatureList(i,u+A),d.lookupList=t._lctf.readLookupList(i,u+m,c),d},t._lctf.readLookupList=function(i,r,s){var a=t._bin,c=r,l=[],d=a.readUshort(i,r);r+=2;for(var u=0;u<d;u++){var h=a.readUshort(i,r);r+=2;var A=t._lctf.readLookupTable(i,c+h,s);l.push(A)}return l},t._lctf.readLookupTable=function(i,r,s){var a=t._bin,c=r,l={tabs:[]};l.ltype=a.readUshort(i,r),r+=2,l.flag=a.readUshort(i,r),r+=2;var d=a.readUshort(i,r);r+=2;for(var u=l.ltype,h=0;h<d;h++){var A=a.readUshort(i,r);r+=2;var m=s(i,u,c+A,l);l.tabs.push(m)}return l},t._lctf.numOfOnes=function(i){for(var r=0,s=0;s<32;s++)(i>>>s&1)!=0&&r++;return r},t._lctf.readClassDef=function(i,r){var s=t._bin,a=[],c=s.readUshort(i,r);if(r+=2,c==1){var l=s.readUshort(i,r);r+=2;var d=s.readUshort(i,r);r+=2;for(var u=0;u<d;u++)a.push(l+u),a.push(l+u),a.push(s.readUshort(i,r)),r+=2}if(c==2){var h=s.readUshort(i,r);r+=2;for(u=0;u<h;u++)a.push(s.readUshort(i,r)),r+=2,a.push(s.readUshort(i,r)),r+=2,a.push(s.readUshort(i,r)),r+=2}return a},t._lctf.getInterval=function(i,r){for(var s=0;s<i.length;s+=3){var a=i[s],c=i[s+1];if(i[s+2],a<=r&&r<=c)return s}return-1},t._lctf.readCoverage=function(i,r){var s=t._bin,a={};a.fmt=s.readUshort(i,r),r+=2;var c=s.readUshort(i,r);return r+=2,a.fmt==1&&(a.tab=s.readUshorts(i,r,c)),a.fmt==2&&(a.tab=s.readUshorts(i,r,3*c)),a},t._lctf.coverageIndex=function(i,r){var s=i.tab;if(i.fmt==1)return s.indexOf(r);if(i.fmt==2){var a=t._lctf.getInterval(s,r);if(a!=-1)return s[a+2]+(r-s[a])}return-1},t._lctf.readFeatureList=function(i,r){var s=t._bin,a=r,c=[],l=s.readUshort(i,r);r+=2;for(var d=0;d<l;d++){var u=s.readASCII(i,r,4);r+=4;var h=s.readUshort(i,r);r+=2;var A=t._lctf.readFeatureTable(i,a+h);A.tag=u.trim(),c.push(A)}return c},t._lctf.readFeatureTable=function(i,r){var s=t._bin,a=r,c={},l=s.readUshort(i,r);r+=2,l>0&&(c.featureParams=a+l);var d=s.readUshort(i,r);r+=2,c.tab=[];for(var u=0;u<d;u++)c.tab.push(s.readUshort(i,r+2*u));return c},t._lctf.readScriptList=function(i,r){var s=t._bin,a=r,c={},l=s.readUshort(i,r);r+=2;for(var d=0;d<l;d++){var u=s.readASCII(i,r,4);r+=4;var h=s.readUshort(i,r);r+=2,c[u.trim()]=t._lctf.readScriptTable(i,a+h)}return c},t._lctf.readScriptTable=function(i,r){var s=t._bin,a=r,c={},l=s.readUshort(i,r);r+=2,l>0&&(c.default=t._lctf.readLangSysTable(i,a+l));var d=s.readUshort(i,r);r+=2;for(var u=0;u<d;u++){var h=s.readASCII(i,r,4);r+=4;var A=s.readUshort(i,r);r+=2,c[h.trim()]=t._lctf.readLangSysTable(i,a+A)}return c},t._lctf.readLangSysTable=function(i,r){var s=t._bin,a={};s.readUshort(i,r),r+=2,a.reqFeature=s.readUshort(i,r),r+=2;var c=s.readUshort(i,r);return r+=2,a.features=s.readUshorts(i,r,c),a},t.CFF={},t.CFF.parse=function(i,r,s){var a=t._bin;(i=new Uint8Array(i.buffer,r,s))[r=0],i[++r],i[++r],i[++r],r++;var c=[];r=t.CFF.readIndex(i,r,c);for(var l=[],d=0;d<c.length-1;d++)l.push(a.readASCII(i,r+c[d],c[d+1]-c[d]));r+=c[c.length-1];var u=[];r=t.CFF.readIndex(i,r,u);var h=[];for(d=0;d<u.length-1;d++)h.push(t.CFF.readDict(i,r+u[d],r+u[d+1]));r+=u[u.length-1];var A=h[0],m=[];r=t.CFF.readIndex(i,r,m);var p=[];for(d=0;d<m.length-1;d++)p.push(a.readASCII(i,r+m[d],m[d+1]-m[d]));if(r+=m[m.length-1],t.CFF.readSubrs(i,r,A),A.CharStrings){r=A.CharStrings,m=[],r=t.CFF.readIndex(i,r,m);var g=[];for(d=0;d<m.length-1;d++)g.push(a.readBytes(i,r+m[d],m[d+1]-m[d]));A.CharStrings=g}if(A.ROS){r=A.FDArray;var _=[];r=t.CFF.readIndex(i,r,_),A.FDArray=[];for(d=0;d<_.length-1;d++){var f=t.CFF.readDict(i,r+_[d],r+_[d+1]);t.CFF._readFDict(i,f,p),A.FDArray.push(f)}r+=_[_.length-1],r=A.FDSelect,A.FDSelect=[];var y=i[r];if(r++,y!=3)throw y;var x=a.readUshort(i,r);r+=2;for(d=0;d<x+1;d++)A.FDSelect.push(a.readUshort(i,r),i[r+2]),r+=3}return A.Encoding&&(A.Encoding=t.CFF.readEncoding(i,A.Encoding,A.CharStrings.length)),A.charset&&(A.charset=t.CFF.readCharset(i,A.charset,A.CharStrings.length)),t.CFF._readFDict(i,A,p),A},t.CFF._readFDict=function(i,r,s){var a;for(var c in r.Private&&(a=r.Private[1],r.Private=t.CFF.readDict(i,a,a+r.Private[0]),r.Private.Subrs&&t.CFF.readSubrs(i,a+r.Private.Subrs,r.Private)),r)["FamilyName","FontName","FullName","Notice","version","Copyright"].indexOf(c)!=-1&&(r[c]=s[r[c]-426+35])},t.CFF.readSubrs=function(i,r,s){var a=t._bin,c=[];r=t.CFF.readIndex(i,r,c);var l,d=c.length;l=d<1240?107:d<33900?1131:32768,s.Bias=l,s.Subrs=[];for(var u=0;u<c.length-1;u++)s.Subrs.push(a.readBytes(i,r+c[u],c[u+1]-c[u]))},t.CFF.tableSE=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,0,111,112,113,114,0,115,116,117,118,119,120,121,122,0,123,0,124,125,126,127,128,129,130,131,0,132,133,0,134,135,136,137,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,138,0,139,0,0,0,0,140,141,142,143,0,0,0,0,0,144,0,0,0,145,0,0,146,147,148,149,0,0,0,0],t.CFF.glyphByUnicode=function(i,r){for(var s=0;s<i.charset.length;s++)if(i.charset[s]==r)return s;return-1},t.CFF.glyphBySE=function(i,r){return r<0||r>255?-1:t.CFF.glyphByUnicode(i,t.CFF.tableSE[r])},t.CFF.readEncoding=function(i,r,s){t._bin;var a=[".notdef"],c=i[r];if(r++,c!=0)throw"error: unknown encoding format: "+c;var l=i[r];r++;for(var d=0;d<l;d++)a.push(i[r+d]);return a},t.CFF.readCharset=function(i,r,s){var a=t._bin,c=[".notdef"],l=i[r];if(r++,l==0)for(var d=0;d<s;d++){var u=a.readUshort(i,r);r+=2,c.push(u)}else{if(l!=1&&l!=2)throw"error: format: "+l;for(;c.length<s;){u=a.readUshort(i,r),r+=2;var h=0;l==1?(h=i[r],r++):(h=a.readUshort(i,r),r+=2);for(d=0;d<=h;d++)c.push(u),u++}}return c},t.CFF.readIndex=function(i,r,s){var a=t._bin,c=a.readUshort(i,r)+1,l=i[r+=2];if(r++,l==1)for(var d=0;d<c;d++)s.push(i[r+d]);else if(l==2)for(d=0;d<c;d++)s.push(a.readUshort(i,r+2*d));else if(l==3)for(d=0;d<c;d++)s.push(16777215&a.readUint(i,r+3*d-1));else if(c!=1)throw"unsupported offset size: "+l+", count: "+c;return(r+=c*l)-1},t.CFF.getCharString=function(i,r,s){var a=t._bin,c=i[r],l=i[r+1];i[r+2],i[r+3],i[r+4];var d=1,u=null,h=null;c<=20&&(u=c,d=1),c==12&&(u=100*c+l,d=2),21<=c&&c<=27&&(u=c,d=1),c==28&&(h=a.readShort(i,r+1),d=3),29<=c&&c<=31&&(u=c,d=1),32<=c&&c<=246&&(h=c-139,d=1),247<=c&&c<=250&&(h=256*(c-247)+l+108,d=2),251<=c&&c<=254&&(h=256*-(c-251)-l-108,d=2),c==255&&(h=a.readInt(i,r+1)/65535,d=5),s.val=h!=null?h:"o"+u,s.size=d},t.CFF.readCharString=function(i,r,s){for(var a=r+s,c=t._bin,l=[];r<a;){var d=i[r],u=i[r+1];i[r+2],i[r+3],i[r+4];var h=1,A=null,m=null;d<=20&&(A=d,h=1),d==12&&(A=100*d+u,h=2),d!=19&&d!=20||(A=d,h=2),21<=d&&d<=27&&(A=d,h=1),d==28&&(m=c.readShort(i,r+1),h=3),29<=d&&d<=31&&(A=d,h=1),32<=d&&d<=246&&(m=d-139,h=1),247<=d&&d<=250&&(m=256*(d-247)+u+108,h=2),251<=d&&d<=254&&(m=256*-(d-251)-u-108,h=2),d==255&&(m=c.readInt(i,r+1)/65535,h=5),l.push(m!=null?m:"o"+A),r+=h}return l},t.CFF.readDict=function(i,r,s){for(var a=t._bin,c={},l=[];r<s;){var d=i[r],u=i[r+1];i[r+2],i[r+3],i[r+4];var h=1,A=null,m=null;if(d==28&&(m=a.readShort(i,r+1),h=3),d==29&&(m=a.readInt(i,r+1),h=5),32<=d&&d<=246&&(m=d-139,h=1),247<=d&&d<=250&&(m=256*(d-247)+u+108,h=2),251<=d&&d<=254&&(m=256*-(d-251)-u-108,h=2),d==255)throw m=a.readInt(i,r+1)/65535,h=5,"unknown number";if(d==30){var p=[];for(h=1;;){var g=i[r+h];h++;var _=g>>4,f=15&g;if(_!=15&&p.push(_),f!=15&&p.push(f),f==15)break}for(var y="",x=[0,1,2,3,4,5,6,7,8,9,".","e","e-","reserved","-","endOfNumber"],C=0;C<p.length;C++)y+=x[p[C]];m=parseFloat(y)}if(d<=21){if(A=["version","Notice","FullName","FamilyName","Weight","FontBBox","BlueValues","OtherBlues","FamilyBlues","FamilyOtherBlues","StdHW","StdVW","escape","UniqueID","XUID","charset","Encoding","CharStrings","Private","Subrs","defaultWidthX","nominalWidthX"][d],h=1,d==12)A=["Copyright","isFixedPitch","ItalicAngle","UnderlinePosition","UnderlineThickness","PaintType","CharstringType","FontMatrix","StrokeWidth","BlueScale","BlueShift","BlueFuzz","StemSnapH","StemSnapV","ForceBold",0,0,"LanguageGroup","ExpansionFactor","initialRandomSeed","SyntheticBase","PostScript","BaseFontName","BaseFontBlend",0,0,0,0,0,0,"ROS","CIDFontVersion","CIDFontRevision","CIDFontType","CIDCount","UIDBase","FDArray","FDSelect","FontName"][u],h=2}A!=null?(c[A]=l.length==1?l[0]:l,l=[]):l.push(m),r+=h}return c},t.cmap={},t.cmap.parse=function(i,r,s){i=new Uint8Array(i.buffer,r,s),r=0;var a=t._bin,c={};a.readUshort(i,r),r+=2;var l=a.readUshort(i,r);r+=2;var d=[];c.tables=[];for(var u=0;u<l;u++){var h=a.readUshort(i,r);r+=2;var A=a.readUshort(i,r);r+=2;var m=a.readUint(i,r);r+=4;var p="p"+h+"e"+A,g=d.indexOf(m);if(g==-1){var _;g=c.tables.length,d.push(m);var f=a.readUshort(i,m);f==0?_=t.cmap.parse0(i,m):f==4?_=t.cmap.parse4(i,m):f==6?_=t.cmap.parse6(i,m):f==12?_=t.cmap.parse12(i,m):console.debug("unknown format: "+f,h,A,m),c.tables.push(_)}if(c[p]!=null)throw"multiple tables for one platform+encoding";c[p]=g}return c},t.cmap.parse0=function(i,r){var s=t._bin,a={};a.format=s.readUshort(i,r),r+=2;var c=s.readUshort(i,r);r+=2,s.readUshort(i,r),r+=2,a.map=[];for(var l=0;l<c-6;l++)a.map.push(i[r+l]);return a},t.cmap.parse4=function(i,r){var s=t._bin,a=r,c={};c.format=s.readUshort(i,r),r+=2;var l=s.readUshort(i,r);r+=2,s.readUshort(i,r),r+=2;var d=s.readUshort(i,r);r+=2;var u=d/2;c.searchRange=s.readUshort(i,r),r+=2,c.entrySelector=s.readUshort(i,r),r+=2,c.rangeShift=s.readUshort(i,r),r+=2,c.endCount=s.readUshorts(i,r,u),r+=2*u,r+=2,c.startCount=s.readUshorts(i,r,u),r+=2*u,c.idDelta=[];for(var h=0;h<u;h++)c.idDelta.push(s.readShort(i,r)),r+=2;for(c.idRangeOffset=s.readUshorts(i,r,u),r+=2*u,c.glyphIdArray=[];r<a+l;)c.glyphIdArray.push(s.readUshort(i,r)),r+=2;return c},t.cmap.parse6=function(i,r){var s=t._bin,a={};a.format=s.readUshort(i,r),r+=2,s.readUshort(i,r),r+=2,s.readUshort(i,r),r+=2,a.firstCode=s.readUshort(i,r),r+=2;var c=s.readUshort(i,r);r+=2,a.glyphIdArray=[];for(var l=0;l<c;l++)a.glyphIdArray.push(s.readUshort(i,r)),r+=2;return a},t.cmap.parse12=function(i,r){var s=t._bin,a={};a.format=s.readUshort(i,r),r+=2,r+=2,s.readUint(i,r),r+=4,s.readUint(i,r),r+=4;var c=s.readUint(i,r);r+=4,a.groups=[];for(var l=0;l<c;l++){var d=r+12*l,u=s.readUint(i,d+0),h=s.readUint(i,d+4),A=s.readUint(i,d+8);a.groups.push([u,h,A])}return a},t.glyf={},t.glyf.parse=function(i,r,s,a){for(var c=[],l=0;l<a.maxp.numGlyphs;l++)c.push(null);return c},t.glyf._parseGlyf=function(i,r){var s=t._bin,a=i._data,c=t._tabOffset(a,"glyf",i._offset)+i.loca[r];if(i.loca[r]==i.loca[r+1])return null;var l={};if(l.noc=s.readShort(a,c),c+=2,l.xMin=s.readShort(a,c),c+=2,l.yMin=s.readShort(a,c),c+=2,l.xMax=s.readShort(a,c),c+=2,l.yMax=s.readShort(a,c),c+=2,l.xMin>=l.xMax||l.yMin>=l.yMax)return null;if(l.noc>0){l.endPts=[];for(var d=0;d<l.noc;d++)l.endPts.push(s.readUshort(a,c)),c+=2;var u=s.readUshort(a,c);if(c+=2,a.length-c<u)return null;l.instructions=s.readBytes(a,c,u),c+=u;var h=l.endPts[l.noc-1]+1;l.flags=[];for(d=0;d<h;d++){var A=a[c];if(c++,l.flags.push(A),(8&A)!=0){var m=a[c];c++;for(var p=0;p<m;p++)l.flags.push(A),d++}}l.xs=[];for(d=0;d<h;d++){var g=(2&l.flags[d])!=0,_=(16&l.flags[d])!=0;g?(l.xs.push(_?a[c]:-a[c]),c++):_?l.xs.push(0):(l.xs.push(s.readShort(a,c)),c+=2)}l.ys=[];for(d=0;d<h;d++)g=(4&l.flags[d])!=0,_=(32&l.flags[d])!=0,g?(l.ys.push(_?a[c]:-a[c]),c++):_?l.ys.push(0):(l.ys.push(s.readShort(a,c)),c+=2);var f=0,y=0;for(d=0;d<h;d++)f+=l.xs[d],y+=l.ys[d],l.xs[d]=f,l.ys[d]=y}else{var x;l.parts=[];do{x=s.readUshort(a,c),c+=2;var C={m:{a:1,b:0,c:0,d:1,tx:0,ty:0},p1:-1,p2:-1};if(l.parts.push(C),C.glyphIndex=s.readUshort(a,c),c+=2,1&x){var I=s.readShort(a,c);c+=2;var b=s.readShort(a,c);c+=2}else I=s.readInt8(a,c),c++,b=s.readInt8(a,c),c++;2&x?(C.m.tx=I,C.m.ty=b):(C.p1=I,C.p2=b),8&x?(C.m.a=C.m.d=s.readF2dot14(a,c),c+=2):64&x?(C.m.a=s.readF2dot14(a,c),c+=2,C.m.d=s.readF2dot14(a,c),c+=2):128&x&&(C.m.a=s.readF2dot14(a,c),c+=2,C.m.b=s.readF2dot14(a,c),c+=2,C.m.c=s.readF2dot14(a,c),c+=2,C.m.d=s.readF2dot14(a,c),c+=2)}while(32&x);if(256&x){var P=s.readUshort(a,c);c+=2,l.instr=[];for(d=0;d<P;d++)l.instr.push(a[c]),c++}}return l},t.GDEF={},t.GDEF.parse=function(i,r,s,a){var c=r;r+=4;var l=t._bin.readUshort(i,r);return{glyphClassDef:l===0?null:t._lctf.readClassDef(i,c+l)}},t.GPOS={},t.GPOS.parse=function(i,r,s,a){return t._lctf.parse(i,r,s,a,t.GPOS.subt)},t.GPOS.subt=function(i,r,s,a){var c=t._bin,l=s,d={};if(d.fmt=c.readUshort(i,s),s+=2,r==1||r==2||r==3||r==7||r==8&&d.fmt<=2){var u=c.readUshort(i,s);s+=2,d.coverage=t._lctf.readCoverage(i,u+l)}if(r==1&&d.fmt==1){var h=c.readUshort(i,s);s+=2,h!=0&&(d.pos=t.GPOS.readValueRecord(i,s,h))}else if(r==2&&d.fmt>=1&&d.fmt<=2){h=c.readUshort(i,s),s+=2;var A=c.readUshort(i,s);s+=2;var m=t._lctf.numOfOnes(h),p=t._lctf.numOfOnes(A);if(d.fmt==1){d.pairsets=[];var g=c.readUshort(i,s);s+=2;for(var _=0;_<g;_++){var f=l+c.readUshort(i,s);s+=2;var y=c.readUshort(i,f);f+=2;for(var x=[],C=0;C<y;C++){var I=c.readUshort(i,f);f+=2,h!=0&&(T=t.GPOS.readValueRecord(i,f,h),f+=2*m),A!=0&&(Q=t.GPOS.readValueRecord(i,f,A),f+=2*p),x.push({gid2:I,val1:T,val2:Q})}d.pairsets.push(x)}}if(d.fmt==2){var b=c.readUshort(i,s);s+=2;var P=c.readUshort(i,s);s+=2;var E=c.readUshort(i,s);s+=2;var B=c.readUshort(i,s);s+=2,d.classDef1=t._lctf.readClassDef(i,l+b),d.classDef2=t._lctf.readClassDef(i,l+P),d.matrix=[];for(_=0;_<E;_++){var w=[];for(C=0;C<B;C++){var T=null,Q=null;h!=0&&(T=t.GPOS.readValueRecord(i,s,h),s+=2*m),A!=0&&(Q=t.GPOS.readValueRecord(i,s,A),s+=2*p),w.push({val1:T,val2:Q})}d.matrix.push(w)}}}else if(r==4&&d.fmt==1)d.markCoverage=t._lctf.readCoverage(i,c.readUshort(i,s)+l),d.baseCoverage=t._lctf.readCoverage(i,c.readUshort(i,s+2)+l),d.markClassCount=c.readUshort(i,s+4),d.markArray=t.GPOS.readMarkArray(i,c.readUshort(i,s+6)+l),d.baseArray=t.GPOS.readBaseArray(i,c.readUshort(i,s+8)+l,d.markClassCount);else if(r==6&&d.fmt==1)d.mark1Coverage=t._lctf.readCoverage(i,c.readUshort(i,s)+l),d.mark2Coverage=t._lctf.readCoverage(i,c.readUshort(i,s+2)+l),d.markClassCount=c.readUshort(i,s+4),d.mark1Array=t.GPOS.readMarkArray(i,c.readUshort(i,s+6)+l),d.mark2Array=t.GPOS.readBaseArray(i,c.readUshort(i,s+8)+l,d.markClassCount);else{if(r==9&&d.fmt==1){var N=c.readUshort(i,s);s+=2;var F=c.readUint(i,s);if(s+=4,a.ltype==9)a.ltype=N;else if(a.ltype!=N)throw"invalid extension substitution";return t.GPOS.subt(i,a.ltype,l+F)}console.debug("unsupported GPOS table LookupType",r,"format",d.fmt)}return d},t.GPOS.readValueRecord=function(i,r,s){var a=t._bin,c=[];return c.push(1&s?a.readShort(i,r):0),r+=1&s?2:0,c.push(2&s?a.readShort(i,r):0),r+=2&s?2:0,c.push(4&s?a.readShort(i,r):0),r+=4&s?2:0,c.push(8&s?a.readShort(i,r):0),r+=8&s?2:0,c},t.GPOS.readBaseArray=function(i,r,s){var a=t._bin,c=[],l=r,d=a.readUshort(i,r);r+=2;for(var u=0;u<d;u++){for(var h=[],A=0;A<s;A++)h.push(t.GPOS.readAnchorRecord(i,l+a.readUshort(i,r))),r+=2;c.push(h)}return c},t.GPOS.readMarkArray=function(i,r){var s=t._bin,a=[],c=r,l=s.readUshort(i,r);r+=2;for(var d=0;d<l;d++){var u=t.GPOS.readAnchorRecord(i,s.readUshort(i,r+2)+c);u.markClass=s.readUshort(i,r),a.push(u),r+=4}return a},t.GPOS.readAnchorRecord=function(i,r){var s=t._bin,a={};return a.fmt=s.readUshort(i,r),a.x=s.readShort(i,r+2),a.y=s.readShort(i,r+4),a},t.GSUB={},t.GSUB.parse=function(i,r,s,a){return t._lctf.parse(i,r,s,a,t.GSUB.subt)},t.GSUB.subt=function(i,r,s,a){var c=t._bin,l=s,d={};if(d.fmt=c.readUshort(i,s),s+=2,r!=1&&r!=2&&r!=4&&r!=5&&r!=6)return null;if(r==1||r==2||r==4||r==5&&d.fmt<=2||r==6&&d.fmt<=2){var u=c.readUshort(i,s);s+=2,d.coverage=t._lctf.readCoverage(i,l+u)}if(r==1&&d.fmt>=1&&d.fmt<=2){if(d.fmt==1)d.delta=c.readShort(i,s),s+=2;else if(d.fmt==2){var h=c.readUshort(i,s);s+=2,d.newg=c.readUshorts(i,s,h),s+=2*d.newg.length}}else if(r==2&&d.fmt==1){h=c.readUshort(i,s),s+=2,d.seqs=[];for(var A=0;A<h;A++){var m=c.readUshort(i,s)+l;s+=2;var p=c.readUshort(i,m);d.seqs.push(c.readUshorts(i,m+2,p))}}else if(r==4){d.vals=[],h=c.readUshort(i,s),s+=2;for(A=0;A<h;A++){var g=c.readUshort(i,s);s+=2,d.vals.push(t.GSUB.readLigatureSet(i,l+g))}}else if(r==5&&d.fmt==2){if(d.fmt==2){var _=c.readUshort(i,s);s+=2,d.cDef=t._lctf.readClassDef(i,l+_),d.scset=[];var f=c.readUshort(i,s);s+=2;for(A=0;A<f;A++){var y=c.readUshort(i,s);s+=2,d.scset.push(y==0?null:t.GSUB.readSubClassSet(i,l+y))}}}else if(r==6&&d.fmt==3){if(d.fmt==3){for(A=0;A<3;A++){h=c.readUshort(i,s),s+=2;for(var x=[],C=0;C<h;C++)x.push(t._lctf.readCoverage(i,l+c.readUshort(i,s+2*C)));s+=2*h,A==0&&(d.backCvg=x),A==1&&(d.inptCvg=x),A==2&&(d.ahedCvg=x)}h=c.readUshort(i,s),s+=2,d.lookupRec=t.GSUB.readSubstLookupRecords(i,s,h)}}else{if(r==7&&d.fmt==1){var I=c.readUshort(i,s);s+=2;var b=c.readUint(i,s);if(s+=4,a.ltype==9)a.ltype=I;else if(a.ltype!=I)throw"invalid extension substitution";return t.GSUB.subt(i,a.ltype,l+b)}console.debug("unsupported GSUB table LookupType",r,"format",d.fmt)}return d},t.GSUB.readSubClassSet=function(i,r){var s=t._bin.readUshort,a=r,c=[],l=s(i,r);r+=2;for(var d=0;d<l;d++){var u=s(i,r);r+=2,c.push(t.GSUB.readSubClassRule(i,a+u))}return c},t.GSUB.readSubClassRule=function(i,r){var s=t._bin.readUshort,a={},c=s(i,r),l=s(i,r+=2);r+=2,a.input=[];for(var d=0;d<c-1;d++)a.input.push(s(i,r)),r+=2;return a.substLookupRecords=t.GSUB.readSubstLookupRecords(i,r,l),a},t.GSUB.readSubstLookupRecords=function(i,r,s){for(var a=t._bin.readUshort,c=[],l=0;l<s;l++)c.push(a(i,r),a(i,r+2)),r+=4;return c},t.GSUB.readChainSubClassSet=function(i,r){var s=t._bin,a=r,c=[],l=s.readUshort(i,r);r+=2;for(var d=0;d<l;d++){var u=s.readUshort(i,r);r+=2,c.push(t.GSUB.readChainSubClassRule(i,a+u))}return c},t.GSUB.readChainSubClassRule=function(i,r){for(var s=t._bin,a={},c=["backtrack","input","lookahead"],l=0;l<c.length;l++){var d=s.readUshort(i,r);r+=2,l==1&&d--,a[c[l]]=s.readUshorts(i,r,d),r+=2*a[c[l]].length}return d=s.readUshort(i,r),r+=2,a.subst=s.readUshorts(i,r,2*d),r+=2*a.subst.length,a},t.GSUB.readLigatureSet=function(i,r){var s=t._bin,a=r,c=[],l=s.readUshort(i,r);r+=2;for(var d=0;d<l;d++){var u=s.readUshort(i,r);r+=2,c.push(t.GSUB.readLigature(i,a+u))}return c},t.GSUB.readLigature=function(i,r){var s=t._bin,a={chain:[]};a.nglyph=s.readUshort(i,r),r+=2;var c=s.readUshort(i,r);r+=2;for(var l=0;l<c-1;l++)a.chain.push(s.readUshort(i,r)),r+=2;return a},t.head={},t.head.parse=function(i,r,s){var a=t._bin,c={};return a.readFixed(i,r),r+=4,c.fontRevision=a.readFixed(i,r),r+=4,a.readUint(i,r),r+=4,a.readUint(i,r),r+=4,c.flags=a.readUshort(i,r),r+=2,c.unitsPerEm=a.readUshort(i,r),r+=2,c.created=a.readUint64(i,r),r+=8,c.modified=a.readUint64(i,r),r+=8,c.xMin=a.readShort(i,r),r+=2,c.yMin=a.readShort(i,r),r+=2,c.xMax=a.readShort(i,r),r+=2,c.yMax=a.readShort(i,r),r+=2,c.macStyle=a.readUshort(i,r),r+=2,c.lowestRecPPEM=a.readUshort(i,r),r+=2,c.fontDirectionHint=a.readShort(i,r),r+=2,c.indexToLocFormat=a.readShort(i,r),r+=2,c.glyphDataFormat=a.readShort(i,r),r+=2,c},t.hhea={},t.hhea.parse=function(i,r,s){var a=t._bin,c={};return a.readFixed(i,r),r+=4,c.ascender=a.readShort(i,r),r+=2,c.descender=a.readShort(i,r),r+=2,c.lineGap=a.readShort(i,r),r+=2,c.advanceWidthMax=a.readUshort(i,r),r+=2,c.minLeftSideBearing=a.readShort(i,r),r+=2,c.minRightSideBearing=a.readShort(i,r),r+=2,c.xMaxExtent=a.readShort(i,r),r+=2,c.caretSlopeRise=a.readShort(i,r),r+=2,c.caretSlopeRun=a.readShort(i,r),r+=2,c.caretOffset=a.readShort(i,r),r+=2,r+=8,c.metricDataFormat=a.readShort(i,r),r+=2,c.numberOfHMetrics=a.readUshort(i,r),r+=2,c},t.hmtx={},t.hmtx.parse=function(i,r,s,a){for(var c=t._bin,l={aWidth:[],lsBearing:[]},d=0,u=0,h=0;h<a.maxp.numGlyphs;h++)h<a.hhea.numberOfHMetrics&&(d=c.readUshort(i,r),r+=2,u=c.readShort(i,r),r+=2),l.aWidth.push(d),l.lsBearing.push(u);return l},t.kern={},t.kern.parse=function(i,r,s,a){var c=t._bin,l=c.readUshort(i,r);if(r+=2,l==1)return t.kern.parseV1(i,r-2,s,a);var d=c.readUshort(i,r);r+=2;for(var u={glyph1:[],rval:[]},h=0;h<d;h++){r+=2,s=c.readUshort(i,r),r+=2;var A=c.readUshort(i,r);r+=2;var m=A>>>8;if((m&=15)!=0)throw"unknown kern table format: "+m;r=t.kern.readFormat0(i,r,u)}return u},t.kern.parseV1=function(i,r,s,a){var c=t._bin;c.readFixed(i,r),r+=4;var l=c.readUint(i,r);r+=4;for(var d={glyph1:[],rval:[]},u=0;u<l;u++){c.readUint(i,r),r+=4;var h=c.readUshort(i,r);r+=2,c.readUshort(i,r),r+=2;var A=h>>>8;if((A&=15)!=0)throw"unknown kern table format: "+A;r=t.kern.readFormat0(i,r,d)}return d},t.kern.readFormat0=function(i,r,s){var a=t._bin,c=-1,l=a.readUshort(i,r);r+=2,a.readUshort(i,r),r+=2,a.readUshort(i,r),r+=2,a.readUshort(i,r),r+=2;for(var d=0;d<l;d++){var u=a.readUshort(i,r);r+=2;var h=a.readUshort(i,r);r+=2;var A=a.readShort(i,r);r+=2,u!=c&&(s.glyph1.push(u),s.rval.push({glyph2:[],vals:[]}));var m=s.rval[s.rval.length-1];m.glyph2.push(h),m.vals.push(A),c=u}return r},t.loca={},t.loca.parse=function(i,r,s,a){var c=t._bin,l=[],d=a.head.indexToLocFormat,u=a.maxp.numGlyphs+1;if(d==0)for(var h=0;h<u;h++)l.push(c.readUshort(i,r+(h<<1))<<1);if(d==1)for(h=0;h<u;h++)l.push(c.readUint(i,r+(h<<2)));return l},t.maxp={},t.maxp.parse=function(i,r,s){var a=t._bin,c={},l=a.readUint(i,r);return r+=4,c.numGlyphs=a.readUshort(i,r),r+=2,l==65536&&(c.maxPoints=a.readUshort(i,r),r+=2,c.maxContours=a.readUshort(i,r),r+=2,c.maxCompositePoints=a.readUshort(i,r),r+=2,c.maxCompositeContours=a.readUshort(i,r),r+=2,c.maxZones=a.readUshort(i,r),r+=2,c.maxTwilightPoints=a.readUshort(i,r),r+=2,c.maxStorage=a.readUshort(i,r),r+=2,c.maxFunctionDefs=a.readUshort(i,r),r+=2,c.maxInstructionDefs=a.readUshort(i,r),r+=2,c.maxStackElements=a.readUshort(i,r),r+=2,c.maxSizeOfInstructions=a.readUshort(i,r),r+=2,c.maxComponentElements=a.readUshort(i,r),r+=2,c.maxComponentDepth=a.readUshort(i,r),r+=2),c},t.name={},t.name.parse=function(i,r,s){var a=t._bin,c={};a.readUshort(i,r),r+=2;var l=a.readUshort(i,r);r+=2,a.readUshort(i,r);for(var d,u=["copyright","fontFamily","fontSubfamily","ID","fullName","version","postScriptName","trademark","manufacturer","designer","description","urlVendor","urlDesigner","licence","licenceURL","---","typoFamilyName","typoSubfamilyName","compatibleFull","sampleText","postScriptCID","wwsFamilyName","wwsSubfamilyName","lightPalette","darkPalette"],h=r+=2,A=0;A<l;A++){var m=a.readUshort(i,r);r+=2;var p=a.readUshort(i,r);r+=2;var g=a.readUshort(i,r);r+=2;var _=a.readUshort(i,r);r+=2;var f=a.readUshort(i,r);r+=2;var y=a.readUshort(i,r);r+=2;var x,C=u[_],I=h+12*l+y;if(m==0)x=a.readUnicode(i,I,f/2);else if(m==3&&p==0)x=a.readUnicode(i,I,f/2);else if(p==0)x=a.readASCII(i,I,f);else if(p==1)x=a.readUnicode(i,I,f/2);else if(p==3)x=a.readUnicode(i,I,f/2);else{if(m!=1)throw"unknown encoding "+p+", platformID: "+m;x=a.readASCII(i,I,f),console.debug("reading unknown MAC encoding "+p+" as ASCII")}var b="p"+m+","+g.toString(16);c[b]==null&&(c[b]={}),c[b][C!==void 0?C:_]=x,c[b]._lang=g}for(var P in c)if(c[P].postScriptName!=null&&c[P]._lang==1033)return c[P];for(var P in c)if(c[P].postScriptName!=null&&c[P]._lang==0)return c[P];for(var P in c)if(c[P].postScriptName!=null&&c[P]._lang==3084)return c[P];for(var P in c)if(c[P].postScriptName!=null)return c[P];for(var P in c){d=P;break}return console.debug("returning name table with languageID "+c[d]._lang),c[d]},t["OS/2"]={},t["OS/2"].parse=function(i,r,s){var a=t._bin.readUshort(i,r);r+=2;var c={};if(a==0)t["OS/2"].version0(i,r,c);else if(a==1)t["OS/2"].version1(i,r,c);else if(a==2||a==3||a==4)t["OS/2"].version2(i,r,c);else{if(a!=5)throw"unknown OS/2 table version: "+a;t["OS/2"].version5(i,r,c)}return c},t["OS/2"].version0=function(i,r,s){var a=t._bin;return s.xAvgCharWidth=a.readShort(i,r),r+=2,s.usWeightClass=a.readUshort(i,r),r+=2,s.usWidthClass=a.readUshort(i,r),r+=2,s.fsType=a.readUshort(i,r),r+=2,s.ySubscriptXSize=a.readShort(i,r),r+=2,s.ySubscriptYSize=a.readShort(i,r),r+=2,s.ySubscriptXOffset=a.readShort(i,r),r+=2,s.ySubscriptYOffset=a.readShort(i,r),r+=2,s.ySuperscriptXSize=a.readShort(i,r),r+=2,s.ySuperscriptYSize=a.readShort(i,r),r+=2,s.ySuperscriptXOffset=a.readShort(i,r),r+=2,s.ySuperscriptYOffset=a.readShort(i,r),r+=2,s.yStrikeoutSize=a.readShort(i,r),r+=2,s.yStrikeoutPosition=a.readShort(i,r),r+=2,s.sFamilyClass=a.readShort(i,r),r+=2,s.panose=a.readBytes(i,r,10),r+=10,s.ulUnicodeRange1=a.readUint(i,r),r+=4,s.ulUnicodeRange2=a.readUint(i,r),r+=4,s.ulUnicodeRange3=a.readUint(i,r),r+=4,s.ulUnicodeRange4=a.readUint(i,r),r+=4,s.achVendID=[a.readInt8(i,r),a.readInt8(i,r+1),a.readInt8(i,r+2),a.readInt8(i,r+3)],r+=4,s.fsSelection=a.readUshort(i,r),r+=2,s.usFirstCharIndex=a.readUshort(i,r),r+=2,s.usLastCharIndex=a.readUshort(i,r),r+=2,s.sTypoAscender=a.readShort(i,r),r+=2,s.sTypoDescender=a.readShort(i,r),r+=2,s.sTypoLineGap=a.readShort(i,r),r+=2,s.usWinAscent=a.readUshort(i,r),r+=2,s.usWinDescent=a.readUshort(i,r),r+=2},t["OS/2"].version1=function(i,r,s){var a=t._bin;return r=t["OS/2"].version0(i,r,s),s.ulCodePageRange1=a.readUint(i,r),r+=4,s.ulCodePageRange2=a.readUint(i,r),r+=4},t["OS/2"].version2=function(i,r,s){var a=t._bin;return r=t["OS/2"].version1(i,r,s),s.sxHeight=a.readShort(i,r),r+=2,s.sCapHeight=a.readShort(i,r),r+=2,s.usDefault=a.readUshort(i,r),r+=2,s.usBreak=a.readUshort(i,r),r+=2,s.usMaxContext=a.readUshort(i,r),r+=2},t["OS/2"].version5=function(i,r,s){var a=t._bin;return r=t["OS/2"].version2(i,r,s),s.usLowerOpticalPointSize=a.readUshort(i,r),r+=2,s.usUpperOpticalPointSize=a.readUshort(i,r),r+=2},t.post={},t.post.parse=function(i,r,s){var a=t._bin,c={};return c.version=a.readFixed(i,r),r+=4,c.italicAngle=a.readFixed(i,r),r+=4,c.underlinePosition=a.readShort(i,r),r+=2,c.underlineThickness=a.readShort(i,r),r+=2,c},t==null&&(t={}),t.U==null&&(t.U={}),t.U.codeToGlyph=function(i,r){var s=i.cmap,a=-1;if(s.p0e4!=null?a=s.p0e4:s.p3e1!=null?a=s.p3e1:s.p1e0!=null?a=s.p1e0:s.p0e3!=null&&(a=s.p0e3),a==-1)throw"no familiar platform and encoding!";var c=s.tables[a];if(c.format==0)return r>=c.map.length?0:c.map[r];if(c.format==4){for(var l=-1,d=0;d<c.endCount.length;d++)if(r<=c.endCount[d]){l=d;break}if(l==-1)return 0;if(c.startCount[l]>r)return 0;return 65535&(c.idRangeOffset[l]!=0?c.glyphIdArray[r-c.startCount[l]+(c.idRangeOffset[l]>>1)-(c.idRangeOffset.length-l)]:r+c.idDelta[l])}if(c.format==12){if(r>c.groups[c.groups.length-1][1])return 0;for(d=0;d<c.groups.length;d++){var u=c.groups[d];if(u[0]<=r&&r<=u[1])return u[2]+(r-u[0])}return 0}throw"unknown cmap table format "+c.format},t.U.glyphToPath=function(i,r){var s={cmds:[],crds:[]};if(i.SVG&&i.SVG.entries[r]){var a=i.SVG.entries[r];return a==null?s:(typeof a=="string"&&(a=t.SVG.toPath(a),i.SVG.entries[r]=a),a)}if(i.CFF){var c={x:0,y:0,stack:[],nStems:0,haveWidth:!1,width:i.CFF.Private?i.CFF.Private.defaultWidthX:0,open:!1},l=i.CFF,d=i.CFF.Private;if(l.ROS){for(var u=0;l.FDSelect[u+2]<=r;)u+=2;d=l.FDArray[l.FDSelect[u+1]].Private}t.U._drawCFF(i.CFF.CharStrings[r],c,l,d,s)}else i.glyf&&t.U._drawGlyf(r,i,s);return s},t.U._drawGlyf=function(i,r,s){var a=r.glyf[i];a==null&&(a=r.glyf[i]=t.glyf._parseGlyf(r,i)),a!=null&&(a.noc>-1?t.U._simpleGlyph(a,s):t.U._compoGlyph(a,r,s))},t.U._simpleGlyph=function(i,r){for(var s=0;s<i.noc;s++){for(var a=s==0?0:i.endPts[s-1]+1,c=i.endPts[s],l=a;l<=c;l++){var d=l==a?c:l-1,u=l==c?a:l+1,h=1&i.flags[l],A=1&i.flags[d],m=1&i.flags[u],p=i.xs[l],g=i.ys[l];if(l==a)if(h){if(!A){t.U.P.moveTo(r,p,g);continue}t.U.P.moveTo(r,i.xs[d],i.ys[d])}else A?t.U.P.moveTo(r,i.xs[d],i.ys[d]):t.U.P.moveTo(r,(i.xs[d]+p)/2,(i.ys[d]+g)/2);h?A&&t.U.P.lineTo(r,p,g):m?t.U.P.qcurveTo(r,p,g,i.xs[u],i.ys[u]):t.U.P.qcurveTo(r,p,g,(p+i.xs[u])/2,(g+i.ys[u])/2)}t.U.P.closePath(r)}},t.U._compoGlyph=function(i,r,s){for(var a=0;a<i.parts.length;a++){var c={cmds:[],crds:[]},l=i.parts[a];t.U._drawGlyf(l.glyphIndex,r,c);for(var d=l.m,u=0;u<c.crds.length;u+=2){var h=c.crds[u],A=c.crds[u+1];s.crds.push(h*d.a+A*d.b+d.tx),s.crds.push(h*d.c+A*d.d+d.ty)}for(u=0;u<c.cmds.length;u++)s.cmds.push(c.cmds[u])}},t.U._getGlyphClass=function(i,r){var s=t._lctf.getInterval(r,i);return s==-1?0:r[s+2]},t.U._applySubs=function(i,r,s,a){for(var c=i.length-r-1,l=0;l<s.tabs.length;l++)if(s.tabs[l]!=null){var d,u=s.tabs[l];if(!u.coverage||(d=t._lctf.coverageIndex(u.coverage,i[r]))!=-1){if(s.ltype==1)i[r],u.fmt==1?i[r]=i[r]+u.delta:i[r]=u.newg[d];else if(s.ltype==4)for(var h=u.vals[d],A=0;A<h.length;A++){var m=h[A],p=m.chain.length;if(!(p>c)){for(var g=!0,_=0,f=0;f<p;f++){for(;i[r+_+(1+f)]==-1;)_++;m.chain[f]!=i[r+_+(1+f)]&&(g=!1)}if(g){i[r]=m.nglyph;for(f=0;f<p+_;f++)i[r+f+1]=-1;break}}}else if(s.ltype==5&&u.fmt==2)for(var y=t._lctf.getInterval(u.cDef,i[r]),x=u.cDef[y+2],C=u.scset[x],I=0;I<C.length;I++){var b=C[I],P=b.input;if(!(P.length>c)){for(g=!0,f=0;f<P.length;f++){var E=t._lctf.getInterval(u.cDef,i[r+1+f]);if(y==-1&&u.cDef[E+2]!=P[f]){g=!1;break}}if(g){var B=b.substLookupRecords;for(A=0;A<B.length;A+=2)B[A],B[A+1]}}}else if(s.ltype==6&&u.fmt==3){if(!t.U._glsCovered(i,u.backCvg,r-u.backCvg.length))continue;if(!t.U._glsCovered(i,u.inptCvg,r))continue;if(!t.U._glsCovered(i,u.ahedCvg,r+u.inptCvg.length))continue;var w=u.lookupRec;for(I=0;I<w.length;I+=2){y=w[I];var T=a[w[I+1]];t.U._applySubs(i,r+y,T,a)}}}}},t.U._glsCovered=function(i,r,s){for(var a=0;a<r.length;a++)if(t._lctf.coverageIndex(r[a],i[s+a])==-1)return!1;return!0},t.U.glyphsToPath=function(i,r,s){for(var a={cmds:[],crds:[]},c=0,l=0;l<r.length;l++){var d=r[l];if(d!=-1){for(var u=l<r.length-1&&r[l+1]!=-1?r[l+1]:0,h=t.U.glyphToPath(i,d),A=0;A<h.crds.length;A+=2)a.crds.push(h.crds[A]+c),a.crds.push(h.crds[A+1]);s&&a.cmds.push(s);for(A=0;A<h.cmds.length;A++)a.cmds.push(h.cmds[A]);s&&a.cmds.push("X"),c+=i.hmtx.aWidth[d],l<r.length-1&&(c+=t.U.getPairAdjustment(i,d,u))}}return a},t.U.P={},t.U.P.moveTo=function(i,r,s){i.cmds.push("M"),i.crds.push(r,s)},t.U.P.lineTo=function(i,r,s){i.cmds.push("L"),i.crds.push(r,s)},t.U.P.curveTo=function(i,r,s,a,c,l,d){i.cmds.push("C"),i.crds.push(r,s,a,c,l,d)},t.U.P.qcurveTo=function(i,r,s,a,c){i.cmds.push("Q"),i.crds.push(r,s,a,c)},t.U.P.closePath=function(i){i.cmds.push("Z")},t.U._drawCFF=function(i,r,s,a,c){for(var{stack:l,nStems:d,haveWidth:u,width:h,open:A}=r,m=0,{x:p,y:g}=r,_=0,f=0,y=0,x=0,C=0,I=0,b=0,P=0,E=0,B=0,w={val:0,size:0};m<i.length;){t.CFF.getCharString(i,m,w);var T=w.val;if(m+=w.size,T=="o1"||T=="o18")l.length%2!=0&&!u&&(h=l.shift()+a.nominalWidthX),d+=l.length>>1,l.length=0,u=!0;else if(T=="o3"||T=="o23")l.length%2!=0&&!u&&(h=l.shift()+a.nominalWidthX),d+=l.length>>1,l.length=0,u=!0;else if(T=="o4")l.length>1&&!u&&(h=l.shift()+a.nominalWidthX,u=!0),A&&t.U.P.closePath(c),g+=l.pop(),t.U.P.moveTo(c,p,g),A=!0;else if(T=="o5")for(;l.length>0;)p+=l.shift(),g+=l.shift(),t.U.P.lineTo(c,p,g);else if(T=="o6"||T=="o7")for(var Q=l.length,N=T=="o6",F=0;F<Q;F++){var H=l.shift();N?p+=H:g+=H,N=!N,t.U.P.lineTo(c,p,g)}else if(T=="o8"||T=="o24"){Q=l.length;for(var z=0;z+6<=Q;)_=p+l.shift(),f=g+l.shift(),y=_+l.shift(),x=f+l.shift(),p=y+l.shift(),g=x+l.shift(),t.U.P.curveTo(c,_,f,y,x,p,g),z+=6;T=="o24"&&(p+=l.shift(),g+=l.shift(),t.U.P.lineTo(c,p,g))}else{if(T=="o11")break;if(T=="o1234"||T=="o1235"||T=="o1236"||T=="o1237")T=="o1234"&&(f=g,y=(_=p+l.shift())+l.shift(),B=x=f+l.shift(),I=x,P=g,p=(b=(C=(E=y+l.shift())+l.shift())+l.shift())+l.shift(),t.U.P.curveTo(c,_,f,y,x,E,B),t.U.P.curveTo(c,C,I,b,P,p,g)),T=="o1235"&&(_=p+l.shift(),f=g+l.shift(),y=_+l.shift(),x=f+l.shift(),E=y+l.shift(),B=x+l.shift(),C=E+l.shift(),I=B+l.shift(),b=C+l.shift(),P=I+l.shift(),p=b+l.shift(),g=P+l.shift(),l.shift(),t.U.P.curveTo(c,_,f,y,x,E,B),t.U.P.curveTo(c,C,I,b,P,p,g)),T=="o1236"&&(_=p+l.shift(),f=g+l.shift(),y=_+l.shift(),B=x=f+l.shift(),I=x,b=(C=(E=y+l.shift())+l.shift())+l.shift(),P=I+l.shift(),p=b+l.shift(),t.U.P.curveTo(c,_,f,y,x,E,B),t.U.P.curveTo(c,C,I,b,P,p,g)),T=="o1237"&&(_=p+l.shift(),f=g+l.shift(),y=_+l.shift(),x=f+l.shift(),E=y+l.shift(),B=x+l.shift(),C=E+l.shift(),I=B+l.shift(),b=C+l.shift(),P=I+l.shift(),Math.abs(b-p)>Math.abs(P-g)?p=b+l.shift():g=P+l.shift(),t.U.P.curveTo(c,_,f,y,x,E,B),t.U.P.curveTo(c,C,I,b,P,p,g));else if(T=="o14"){if(l.length>0&&!u&&(h=l.shift()+s.nominalWidthX,u=!0),l.length==4){var Y=l.shift(),U=l.shift(),X=l.shift(),V=l.shift(),W=t.CFF.glyphBySE(s,X),j=t.CFF.glyphBySE(s,V);t.U._drawCFF(s.CharStrings[W],r,s,a,c),r.x=Y,r.y=U,t.U._drawCFF(s.CharStrings[j],r,s,a,c)}A&&(t.U.P.closePath(c),A=!1)}else if(T=="o19"||T=="o20")l.length%2!=0&&!u&&(h=l.shift()+a.nominalWidthX),d+=l.length>>1,l.length=0,u=!0,m+=d+7>>3;else if(T=="o21")l.length>2&&!u&&(h=l.shift()+a.nominalWidthX,u=!0),g+=l.pop(),p+=l.pop(),A&&t.U.P.closePath(c),t.U.P.moveTo(c,p,g),A=!0;else if(T=="o22")l.length>1&&!u&&(h=l.shift()+a.nominalWidthX,u=!0),p+=l.pop(),A&&t.U.P.closePath(c),t.U.P.moveTo(c,p,g),A=!0;else if(T=="o25"){for(;l.length>6;)p+=l.shift(),g+=l.shift(),t.U.P.lineTo(c,p,g);_=p+l.shift(),f=g+l.shift(),y=_+l.shift(),x=f+l.shift(),p=y+l.shift(),g=x+l.shift(),t.U.P.curveTo(c,_,f,y,x,p,g)}else if(T=="o26")for(l.length%2&&(p+=l.shift());l.length>0;)_=p,f=g+l.shift(),p=y=_+l.shift(),g=(x=f+l.shift())+l.shift(),t.U.P.curveTo(c,_,f,y,x,p,g);else if(T=="o27")for(l.length%2&&(g+=l.shift());l.length>0;)f=g,y=(_=p+l.shift())+l.shift(),x=f+l.shift(),p=y+l.shift(),g=x,t.U.P.curveTo(c,_,f,y,x,p,g);else if(T=="o10"||T=="o29"){var q=T=="o10"?a:s;if(l.length==0)console.debug("error: empty stack");else{var ne=l.pop(),ce=q.Subrs[ne+q.Bias];r.x=p,r.y=g,r.nStems=d,r.haveWidth=u,r.width=h,r.open=A,t.U._drawCFF(ce,r,s,a,c),p=r.x,g=r.y,d=r.nStems,u=r.haveWidth,h=r.width,A=r.open}}else if(T=="o30"||T=="o31"){var oe=l.length,ie=(z=0,T=="o31");for(z+=oe-(Q=-3&oe);z<Q;)ie?(f=g,y=(_=p+l.shift())+l.shift(),g=(x=f+l.shift())+l.shift(),Q-z==5?(p=y+l.shift(),z++):p=y,ie=!1):(_=p,f=g+l.shift(),y=_+l.shift(),x=f+l.shift(),p=y+l.shift(),Q-z==5?(g=x+l.shift(),z++):g=x,ie=!0),t.U.P.curveTo(c,_,f,y,x,p,g),z+=4}else{if((T+"").charAt(0)=="o")throw console.debug("Unknown operation: "+T,i),T;l.push(T)}}}r.x=p,r.y=g,r.nStems=d,r.haveWidth=u,r.width=h,r.open=A};var n=t,o={Typr:n};return e.Typr=n,e.default=o,Object.defineProperty(e,"__esModule",{value:!0}),e}({}).Typr}/*!
Custom bundle of woff2otf (https://github.com/arty-name/woff2otf) with fflate
(https://github.com/101arrowz/fflate) for use in Troika text rendering.
Original licenses apply:
- fflate: https://github.com/101arrowz/fflate/blob/master/LICENSE (MIT)
- woff2otf.js: https://github.com/arty-name/woff2otf/blob/master/woff2otf.js (Apache2)
*/function Xco(){return function(e){var t=Uint8Array,n=Uint16Array,o=Uint32Array,i=new t([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),r=new t([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),s=new t([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),a=function(T,Q){for(var N=new n(31),F=0;F<31;++F)N[F]=Q+=1<<T[F-1];var H=new o(N[30]);for(F=1;F<30;++F)for(var z=N[F];z<N[F+1];++z)H[z]=z-N[F]<<5|F;return[N,H]},c=a(i,2),l=c[0],d=c[1];l[28]=258,d[258]=28;for(var u=a(r,0)[0],h=new n(32768),A=0;A<32768;++A){var m=(43690&A)>>>1|(21845&A)<<1;m=(61680&(m=(52428&m)>>>2|(13107&m)<<2))>>>4|(3855&m)<<4,h[A]=((65280&m)>>>8|(255&m)<<8)>>>1}var p=function(T,Q,N){for(var F=T.length,H=0,z=new n(Q);H<F;++H)++z[T[H]-1];var Y,U=new n(Q);for(H=0;H<Q;++H)U[H]=U[H-1]+z[H-1]<<1;if(N){Y=new n(1<<Q);var X=15-Q;for(H=0;H<F;++H)if(T[H])for(var V=H<<4|T[H],W=Q-T[H],j=U[T[H]-1]++<<W,q=j|(1<<W)-1;j<=q;++j)Y[h[j]>>>X]=V}else for(Y=new n(F),H=0;H<F;++H)T[H]&&(Y[H]=h[U[T[H]-1]++]>>>15-T[H]);return Y},g=new t(288);for(A=0;A<144;++A)g[A]=8;for(A=144;A<256;++A)g[A]=9;for(A=256;A<280;++A)g[A]=7;for(A=280;A<288;++A)g[A]=8;var _=new t(32);for(A=0;A<32;++A)_[A]=5;var f=p(g,9,1),y=p(_,5,1),x=function(T){for(var Q=T[0],N=1;N<T.length;++N)T[N]>Q&&(Q=T[N]);return Q},C=function(T,Q,N){var F=Q/8|0;return(T[F]|T[F+1]<<8)>>(7&Q)&N},I=function(T,Q){var N=Q/8|0;return(T[N]|T[N+1]<<8|T[N+2]<<16)>>(7&Q)},b=["unexpected EOF","invalid block type","invalid length/literal","invalid distance","stream finished","no stream handler",,"no callback","invalid UTF-8 data","extra field too long","date not in range 1980-2099","filename too long","stream finishing","invalid zip data"],P=function(T,Q,N){var F=Error(Q||b[T]);if(F.code=T,Error.captureStackTrace&&Error.captureStackTrace(F,P),!N)throw F;return F},E=function(T,Q,N){var F=T.length;if(!F||N&&!N.l&&F<5)return Q||new t(0);var H=!Q||N,z=!N||N.i;N||(N={}),Q||(Q=new t(3*F));var Y,U=function(Ht){var Xt=Q.length;if(Ht>Xt){var ut=new t(Math.max(2*Xt,Ht));ut.set(Q),Q=ut}},X=N.f||0,V=N.p||0,W=N.b||0,j=N.l,q=N.d,ne=N.m,ce=N.n,oe=8*F;do{if(!j){N.f=X=C(T,V,1);var ie=C(T,V+1,3);if(V+=3,!ie){var J=T[(be=((Y=V)/8|0)+(7&Y&&1)+4)-4]|T[be-3]<<8,ee=be+J;if(ee>F){z&&P(0);break}H&&U(W+J),Q.set(T.subarray(be,ee),W),N.b=W+=J,N.p=V=8*ee;continue}if(ie==1)j=f,q=y,ne=9,ce=5;else if(ie==2){var se=C(T,V,31)+257,le=C(T,V+10,15)+4,he=se+C(T,V+5,31)+1;V+=14;for(var ue=new t(he),Ae=new t(19),_e=0;_e<le;++_e)Ae[s[_e]]=C(T,V+3*_e,7);V+=3*le;var Pe=x(Ae),Ee=(1<<Pe)-1,Te=p(Ae,Pe,1);for(_e=0;_e<he;){var be,me=Te[C(T,V,Ee)];if(V+=15&me,(be=me>>>4)<16)ue[_e++]=be;else{var ye=0,Ce=0;for(be==16?(Ce=3+C(T,V,3),V+=2,ye=ue[_e-1]):be==17?(Ce=3+C(T,V,7),V+=3):be==18&&(Ce=11+C(T,V,127),V+=7);Ce--;)ue[_e++]=ye}}var ve=ue.subarray(0,se),De=ue.subarray(se);ne=x(ve),ce=x(De),j=p(ve,ne,1),q=p(De,ce,1)}else P(1);if(V>oe){z&&P(0);break}}H&&U(W+131072);for(var Ze=(1<<ne)-1,st=(1<<ce)-1,et=V;;et=V){var lt=(ye=j[I(T,V)&Ze])>>>4;if((V+=15&ye)>oe){z&&P(0);break}if(ye||P(2),lt<256)Q[W++]=lt;else{if(lt==256){et=V,j=null;break}var it=lt-254;if(lt>264){var gt=i[_e=lt-257];it=C(T,V,(1<<gt)-1)+l[_e],V+=gt}var wt=q[I(T,V)&st],Dt=wt>>>4;if(wt||P(3),V+=15&wt,De=u[Dt],Dt>3)gt=r[Dt],De+=I(T,V)&(1<<gt)-1,V+=gt;if(V>oe){z&&P(0);break}H&&U(W+131072);for(var vt=W+it;W<vt;W+=4)Q[W]=Q[W-De],Q[W+1]=Q[W+1-De],Q[W+2]=Q[W+2-De],Q[W+3]=Q[W+3-De];W=vt}}N.l=j,N.p=et,N.b=W,j&&(X=1,N.m=ne,N.d=q,N.n=ce)}while(!X);return W==Q.length?Q:function(Ht,Xt,ut){(Xt==null||Xt<0)&&(Xt=0),(ut==null||ut>Ht.length)&&(ut=Ht.length);var je=new(Ht instanceof n?n:Ht instanceof o?o:t)(ut-Xt);return je.set(Ht.subarray(Xt,ut)),je}(Q,0,W)},B=new t(0),w=typeof TextDecoder<"u"&&new TextDecoder;try{w.decode(B,{stream:!0})}catch(T){}return e.convert_streams=function(T){var Q=new DataView(T),N=0;function F(){var se=Q.getUint16(N);return N+=2,se}function H(){var se=Q.getUint32(N);return N+=4,se}function z(se){J.setUint16(ee,se),ee+=2}function Y(se){J.setUint32(ee,se),ee+=4}for(var U={signature:H(),flavor:H(),length:H(),numTables:F(),reserved:F(),totalSfntSize:H(),majorVersion:F(),minorVersion:F(),metaOffset:H(),metaLength:H(),metaOrigLength:H(),privOffset:H(),privLength:H()},X=0;Math.pow(2,X)<=U.numTables;)X++;X--;for(var V=16*Math.pow(2,X),W=16*U.numTables-V,j=12,q=[],ne=0;ne<U.numTables;ne++)q.push({tag:H(),offset:H(),compLength:H(),origLength:H(),origChecksum:H()}),j+=16;var ce,oe=new Uint8Array(12+16*q.length+q.reduce(function(se,le){return se+le.origLength+4},0)),ie=oe.buffer,J=new DataView(ie),ee=0;return Y(U.flavor),z(U.numTables),z(V),z(X),z(W),q.forEach(function(se){Y(se.tag),Y(se.origChecksum),Y(j),Y(se.origLength),se.outOffset=j,(j+=se.origLength)%4!=0&&(j+=4-j%4)}),q.forEach(function(se){var le,he=T.slice(se.offset,se.offset+se.compLength);if(se.compLength!=se.origLength){var ue=new Uint8Array(se.origLength);le=new Uint8Array(he,2),E(le,ue)}else ue=new Uint8Array(he);oe.set(ue,se.outOffset);var Ae=0;(j=se.outOffset+se.origLength)%4!=0&&(Ae=4-j%4),oe.set(new Uint8Array(Ae).buffer,se.outOffset+se.origLength),ce=j+Ae}),ie.slice(0,ce)},Object.defineProperty(e,"__esModule",{value:!0}),e}({}).convert_streams}function Kco(e,t){let n={M:2,L:2,Q:4,C:6,Z:0},o={C:"18g,ca,368,1kz",D:"17k,6,2,2+4,5+c,2+6,2+1,10+1,9+f,j+11,2+1,a,2,2+1,15+2,3,j+2,6+3,2+8,2,2,2+1,w+a,4+e,3+3,2,3+2,3+5,23+w,2f+4,3,2+9,2,b,2+3,3,1k+9,6+1,3+1,2+2,2+d,30g,p+y,1,1+1g,f+x,2,sd2+1d,jf3+4,f+3,2+4,2+2,b+3,42,2,4+2,2+1,2,3,t+1,9f+w,2,el+2,2+g,d+2,2l,2+1,5,3+1,2+1,2,3,6,16wm+1v",R:"17m+3,2,2,6+3,m,15+2,2+2,h+h,13,3+8,2,2,3+1,2,p+1,x,5+4,5,a,2,2,3,u,c+2,g+1,5,2+1,4+1,5j,6+1,2,b,2+2,f,2+1,1s+2,2,3+1,7,1ez0,2,2+1,4+4,b,4,3,b,42,2+2,4,3,2+1,2,o+3,ae,ep,x,2o+2,3+1,3,5+1,6",L:"x9u,jff,a,fd,jv",T:"4t,gj+33,7o+4,1+1,7c+18,2,2+1,2+1,2,21+a,2,1b+k,h,2u+6,3+5,3+1,2+3,y,2,v+q,2k+a,1n+8,a,p+3,2+8,2+2,2+4,18+2,3c+e,2+v,1k,2,5+7,5,4+6,b+1,u,1n,5+3,9,l+1,r,3+1,1m,5+1,5+1,3+2,4,v+1,4,c+1,1m,5+4,2+1,5,l+1,n+5,2,1n,3,2+3,9,8+1,c+1,v,1q,d,1f,4,1m+2,6+2,2+3,8+1,c+1,u,1n,3,7,6+1,l+1,t+1,1m+1,5+3,9,l+1,u,21,8+2,2,2j,3+6,d+7,2r,3+8,c+5,23+1,s,2,2,1k+d,2+4,2+1,6+a,2+z,a,2v+3,2+5,2+1,3+1,q+1,5+2,h+3,e,3+1,7,g,jk+2,qb+2,u+2,u+1,v+1,1t+1,2+6,9,3+a,a,1a+2,3c+1,z,3b+2,5+1,a,7+2,64+1,3,1n,2+6,2,2,3+7,7+9,3,1d+d,1,1+1,1s+3,1d,2+4,2,6,15+8,d+1,x+3,3+1,2+2,1l,2+1,4,2+2,1n+7,3+1,49+2,2+c,2+6,5,7,4+1,5j+1l,2+4,ek,3+1,r+4,1e+4,6+5,2p+c,1+3,1,1+2,1+b,2db+2,3y,2p+v,ff+3,30+1,n9x,1+2,2+9,x+1,29+1,7l,4,5,q+1,6,48+1,r+h,e,13+7,q+a,1b+2,1d,3+3,3+1,14,1w+5,3+1,3+1,d,9,1c,1g,2+2,3+1,6+1,2,17+1,9,6n,3,5,fn5,ki+f,h+f,5s,6y+2,ea,6b,46+4,1af+2,2+1,6+3,15+2,5,4m+1,fy+3,as+1,4a+a,4x,1j+e,1l+2,1e+3,3+1,1y+2,11+4,2+7,1r,d+1,1h+8,b+3,3,2o+2,3,2+1,7,4h,4+7,m+1,1m+1,4,12+6,4+4,5g+7,3+2,2,o,2d+5,2,5+1,2+1,6n+3,7+1,2+1,s+1,2e+7,3,2+1,2z,2,3+5,2,2u+2,3+3,2+4,78+8,2+1,75+1,2,5,41+3,3+1,5,x+9,15+5,3+3,9,a+5,3+2,1b+c,2+1,bb+6,2+5,2,2b+l,3+6,2+1,2+1,3f+5,4,2+1,2+6,2,21+1,4,2,9o+1,470+8,at4+4,1o+6,t5,1s+3,2a,f5l+1,2+3,43o+2,a+7,1+7,3+6,v+3,45+2,1j0+1i,5+1d,9,f,n+4,2+e,11t+6,2+g,3+6,2+1,2+4,7a+6,c6+3,15t+6,32+6,1,gzau,v+2n,3l+6n"},i=1,r=2,s=4,a=8,c=16,l=32,d;function u(b){if(!d){let P={R:2,L:1,D:4,C:16,U:32,T:8};d=new Map;for(let E in o){let B=0;o[E].split(",").forEach((w)=>{let[T,Q]=w.split("+");T=parseInt(T,36),Q=Q?parseInt(Q,36):0,d.set(B+=T,P[E]);for(let N=Q;N--;)d.set(++B,P[E])})}}return d.get(b)||32}let h=1,A=2,m=3,p=4,g=[null,"isol","init","fina","medi"];function _(b){let P=new Uint8Array(b.length),E=32,B=h,w=-1;for(let T=0;T<b.length;T++){let Q=b.codePointAt(T),N=u(Q)|0,F=h;if(N&8)continue;if(E&21){if(N&22){if(F=m,B===h||B===m)P[w]++}else if(N&33){if(B===A||B===p)P[w]--}}else if(E&34){if(B===A||B===p)P[w]--}if(B=P[T]=F,E=N,w=T,Q>65535)T++}return P}function f(b,P){let E=[];for(let w=0;w<P.length;w++){let T=P.codePointAt(w);if(T>65535)w++;E.push(e.U.codeToGlyph(b,T))}let B=b.GSUB;if(B){let{lookupList:w,featureList:T}=B,Q,N=/^(rlig|liga|mset|isol|init|fina|medi|half|pres|blws|ccmp)$/,F=[];T.forEach((H)=>{if(N.test(H.tag))for(let z=0;z<H.tab.length;z++){if(F[H.tab[z]])continue;F[H.tab[z]]=!0;let Y=w[H.tab[z]],U=/^(isol|init|fina|medi)$/.test(H.tag);if(U&&!Q)Q=_(P);for(let X=0;X<E.length;X++)if(!Q||!U||g[Q[X]]===H.tag)e.U._applySubs(E,X,Y,w)}})}return E}function y(b,P){let E=new Int16Array(P.length*3),B=0;for(;B<P.length;B++){let N=P[B];if(N===-1)continue;E[B*3+2]=b.hmtx.aWidth[N];let F=b.GPOS;if(F){let H=F.lookupList;for(let z=0;z<H.length;z++){let Y=H[z];for(let U=0;U<Y.tabs.length;U++){let X=Y.tabs[U];if(Y.ltype===1){if(e._lctf.coverageIndex(X.coverage,N)!==-1&&X.pos){Q(X.pos,B);break}}else if(Y.ltype===2){let V=null,W=w();if(W!==-1){let j=e._lctf.coverageIndex(X.coverage,P[W]);if(j!==-1){if(X.fmt===1){let q=X.pairsets[j];for(let ne=0;ne<q.length;ne++)if(q[ne].gid2===N)V=q[ne]}else if(X.fmt===2){let q=e.U._getGlyphClass(P[W],X.classDef1),ne=e.U._getGlyphClass(N,X.classDef2);V=X.matrix[q][ne]}if(V){if(V.val1)Q(V.val1,W);if(V.val2)Q(V.val2,B);break}}}}else if(Y.ltype===4){let V=e._lctf.coverageIndex(X.markCoverage,N);if(V!==-1){let W=w(T),j=W===-1?-1:e._lctf.coverageIndex(X.baseCoverage,P[W]);if(j!==-1){let q=X.markArray[V],ne=X.baseArray[j][q.markClass];E[B*3]=ne.x-q.x+E[W*3]-E[W*3+2],E[B*3+1]=ne.y-q.y+E[W*3+1];break}}}else if(Y.ltype===6){let V=e._lctf.coverageIndex(X.mark1Coverage,N);if(V!==-1){let W=w();if(W!==-1){let j=P[W];if(x(b,j)===3){let q=e._lctf.coverageIndex(X.mark2Coverage,j);if(q!==-1){let ne=X.mark1Array[V],ce=X.mark2Array[q][ne.markClass];E[B*3]=ce.x-ne.x+E[W*3]-E[W*3+2],E[B*3+1]=ce.y-ne.y+E[W*3+1];break}}}}}}}}else if(b.kern&&!b.cff){let H=w();if(H!==-1){let z=b.kern.glyph1.indexOf(P[H]);if(z!==-1){let Y=b.kern.rval[z].glyph2.indexOf(N);if(Y!==-1)E[H*3+2]+=b.kern.rval[z].vals[Y]}}}}return E;function w(N){for(let F=B-1;F>=0;F--)if(P[F]!==-1&&(!N||N(P[F])))return F;return-1}function T(N){return x(b,N)===1}function Q(N,F){for(let H=0;H<3;H++)E[F*3+H]+=N[H]||0}}function x(b,P){let E=b.GDEF&&b.GDEF.glyphClassDef;return E?e.U._getGlyphClass(P,E):0}function C(...b){for(let P=0;P<b.length;P++)if(typeof b[P]==="number")return b[P]}function I(b){let P=Object.create(null),E=b["OS/2"],B=b.hhea,w=b.head.unitsPerEm,T=C(E&&E.sTypoAscender,B&&B.ascender,w),Q={unitsPerEm:w,ascender:T,descender:C(E&&E.sTypoDescender,B&&B.descender,0),capHeight:C(E&&E.sCapHeight,T),xHeight:C(E&&E.sxHeight,T),lineGap:C(E&&E.sTypoLineGap,B&&B.lineGap),supportsCodePoint(N){return e.U.codeToGlyph(b,N)>0},forEachGlyph(N,F,H,z){let Y=0,U=1/Q.unitsPerEm*F,X=f(b,N),V=0,W=y(b,X);return X.forEach((j,q)=>{if(j!==-1){let ne=P[j];if(!ne){let{cmds:ce,crds:oe}=e.U.glyphToPath(b,j),ie="",J=0;for(let ue=0,Ae=ce.length;ue<Ae;ue++){let _e=n[ce[ue]];ie+=ce[ue];for(let Pe=1;Pe<=_e;Pe++)ie+=(Pe>1?",":"")+oe[J++]}let ee,se,le,he;if(oe.length){ee=se=1/0,le=he=-1/0;for(let ue=0,Ae=oe.length;ue<Ae;ue+=2){let _e=oe[ue],Pe=oe[ue+1];if(_e<ee)ee=_e;if(Pe<se)se=Pe;if(_e>le)le=_e;if(Pe>he)he=Pe}}else ee=le=se=he=0;ne=P[j]={index:j,advanceWidth:b.hmtx.aWidth[j],xMin:ee,yMin:se,xMax:le,yMax:he,path:ie}}if(z.call(null,ne,Y+W[q*3]*U,W[q*3+1]*U,V),Y+=W[q*3+2]*U,H)Y+=H*F}V+=N.codePointAt(V)>65535?2:1}),Y}};return Q}return function(P){let E=new Uint8Array(P,0,4),B=e._bin.readASCII(E,0,4);if(B==="wOFF")P=t(P);else if(B==="wOF2")throw Error("woff2 fonts not supported");return I(e.parse(P)[0])}}var jco=SQ({name:"Typr Font Parser",dependencies:[Wco,Xco,Kco],init(e,t,n){let o=e(),i=t();return n(o,i)}});/*!
Custom bundle of @unicode-font-resolver/client v1.0.2 (https://github.com/lojjic/unicode-font-resolver)
for use in Troika text rendering.
Original MIT license applies
*/function qco(){return function(e){var t=function(){this.buckets=new Map};t.prototype.add=function(y){var x=y>>5;this.buckets.set(x,(this.buckets.get(x)||0)|1<<(31&y))},t.prototype.has=function(y){var x=this.buckets.get(y>>5);return x!==void 0&&(x&1<<(31&y))!=0},t.prototype.serialize=function(){var y=[];return this.buckets.forEach(function(x,C){y.push((+C).toString(36)+":"+x.toString(36))}),y.join(",")},t.prototype.deserialize=function(y){var x=this;this.buckets.clear(),y.split(",").forEach(function(C){var I=C.split(":");x.buckets.set(parseInt(I[0],36),parseInt(I[1],36))})};var n=Math.pow(2,8),o=n-1,i=~o;function r(y){var x=function(I){return I&i}(y).toString(16),C=function(I){return(I&i)+n-1}(y).toString(16);return"codepoint-index/plane"+(y>>16)+"/"+x+"-"+C+".json"}function s(y,x){var C=y&o,I=x.codePointAt(C/6|0);return((I=(I||48)-48)&1<<C%6)!=0}function a(y,x){var C;(C=y,C.replace(/U\+/gi,"").replace(/^,+|,+$/g,"").split(/,+/).map(function(I){return I.split("-").map(function(b){return parseInt(b.trim(),16)})})).forEach(function(I){var b=I[0],P=I[1];P===void 0&&(P=b),x(b,P)})}function c(y,x){a(y,function(C,I){for(var b=C;b<=I;b++)x(b)})}var l={},d={},u=new WeakMap,h="https://cdn.jsdelivr.net/gh/lojjic/unicode-font-resolver@v1.0.1/packages/data";function A(y){var x=u.get(y);return x||(x=new t,c(y.ranges,function(C){return x.add(C)}),u.set(y,x)),x}var m,p=new Map;function g(y,x,C){return y[x]?x:y[C]?C:function(I){for(var b in I)return b}(y)}function _(y,x){var C=x;if(!y.includes(C)){C=1/0;for(var I=0;I<y.length;I++)Math.abs(y[I]-x)<Math.abs(C-x)&&(C=y[I])}return C}function f(y){return m||(m=new Set,c("9-D,20,85,A0,1680,2000-200A,2028-202F,205F,3000",function(x){m.add(x)})),m.has(y)}return e.CodePointSet=t,e.clearCache=function(){l={},d={}},e.getFontsForString=function(y,x){x===void 0&&(x={});var C,I=x.lang;I===void 0&&(I=/\p{Script=Hangul}/u.test(C=y)?"ko":/\p{Script=Hiragana}|\p{Script=Katakana}/u.test(C)?"ja":"en");var b=x.category;b===void 0&&(b="sans-serif");var P=x.style;P===void 0&&(P="normal");var E=x.weight;E===void 0&&(E=400);var B=(x.dataUrl||h).replace(/\/$/g,""),w=new Map,T=new Uint8Array(y.length),Q={},N={},F=Array(y.length),H=new Map,z=!1;function Y(V){var W=p.get(V);return W||(W=fetch(B+"/"+V).then(function(j){if(!j.ok)throw Error(j.statusText);return j.json().then(function(q){if(!Array.isArray(q)||q[0]!==1)throw Error("Incorrect schema version; need 1, got "+q[0]);return q[1]})}).catch(function(j){if(B!==h)return z||(console.error('unicode-font-resolver: Failed loading from dataUrl "'+B+'", trying default CDN. '+j.message),z=!0),B=h,p.delete(V),Y(V);throw j}),p.set(V,W)),W}for(var U=function(V){var W=y.codePointAt(V),j=r(W);F[V]=j,l[j]||H.has(j)||H.set(j,Y(j).then(function(q){l[j]=q})),W>65535&&(V++,X=V)},X=0;X<y.length;X++)U(X);return Promise.all(H.values()).then(function(){H.clear();for(var V=function(j){var q=y.codePointAt(j),ne=null,ce=l[F[j]],oe=void 0;for(var ie in ce){var J=N[ie];if(J===void 0&&(J=N[ie]=new RegExp(ie).test(I||"en")),J){for(var ee in oe=ie,ce[ie])if(s(q,ce[ie][ee])){ne=ee;break}break}}if(!ne){e:for(var se in ce)if(se!==oe){for(var le in ce[se])if(s(q,ce[se][le])){ne=le;break e}}}ne||(console.debug("No font coverage for U+"+q.toString(16)),ne="latin"),F[j]=ne,d[ne]||H.has(ne)||H.set(ne,Y("font-meta/"+ne+".json").then(function(he){d[ne]=he})),q>65535&&(j++,W=j)},W=0;W<y.length;W++)V(W);return Promise.all(H.values())}).then(function(){for(var V,W=null,j=0;j<y.length;j++){var q=y.codePointAt(j);if(W&&(f(q)||A(W).has(q)))T[j]=T[j-1];else{W=d[F[j]];var ne=Q[W.id];if(!ne){var ce=W.typeforms,oe=g(ce,b,"sans-serif"),ie=g(ce[oe],P,"normal"),J=_((V=ce[oe])===null||V===void 0?void 0:V[ie],E);ne=Q[W.id]=B+"/font-files/"+W.id+"/"+oe+"."+ie+"."+J+".woff"}var ee=w.get(ne);ee==null&&(ee=w.size,w.set(ne,ee)),T[j]=ee}q>65535&&(j++,T[j]=T[j-1])}return{fontUrls:Array.from(w.keys()),chars:T}})},Object.defineProperty(e,"__esModule",{value:!0}),e}({})}function Jco(e,t){let n=Object.create(null),o=Object.create(null);function i(s,a){let c=(l)=>{console.error(`Failure loading font ${s}`,l)};try{let l=new XMLHttpRequest;l.open("get",s,!0),l.responseType="arraybuffer",l.onload=function(){if(l.status>=400)c(Error(l.statusText));else if(l.status>0)try{let d=e(l.response);d.src=s,a(d)}catch(d){c(d)}},l.onerror=c,l.send()}catch(l){c(l)}}function r(s,a){let c=n[s];if(c)a(c);else if(o[s])o[s].push(a);else o[s]=[a],i(s,(l)=>{l.src=s,n[s]=l,o[s].forEach((d)=>d(l)),delete o[s]})}return function(s,a,{lang:c,fonts:l=[],style:d="normal",weight:u="normal",unicodeFontsURL:h}={}){let A=new Uint8Array(s.length),m=[];if(!s.length)f();let p=new Map,g=[];if(d!=="italic")d="normal";if(typeof u!=="number")u=u==="bold"?700:400;if(l&&!Array.isArray(l))l=[l];if(l=l.slice().filter((x)=>!x.lang||x.lang.test(c)).reverse(),l.length){let b=0;(function P(E=0){for(let B=E,w=s.length;B<w;B++){let T=s.codePointAt(B);if(b===1&&m[A[B-1]].supportsCodePoint(T)||B>0&&/\s/.test(s[B])){if(A[B]=A[B-1],b===2)g[g.length-1][1]=B}else for(let Q=A[B],N=l.length;Q<=N;Q++)if(Q===N){let F=b===2?g[g.length-1]:g[g.length]=[B,B];F[1]=B,b=2}else{A[B]=Q;let{src:F,unicodeRange:H}=l[Q];if(!H||y(T,H)){let z=n[F];if(!z){r(F,()=>{P(B)});return}if(z.supportsCodePoint(T)){let Y=p.get(z);if(typeof Y!=="number")Y=m.length,m.push(z),p.set(z,Y);A[B]=Y,b=1;break}}}if(T>65535&&B+1<w){if(A[B+1]=A[B],B++,b===2)g[g.length-1][1]=B}}_()})()}else g.push([0,s.length-1]),_();function _(){if(g.length){let x=g.map((C)=>s.substring(C[0],C[1]+1)).join(`
`);t.getFontsForString(x,{lang:c||void 0,style:d,weight:u,dataUrl:h}).then(({fontUrls:C,chars:I})=>{let b=m.length,P=0;g.forEach((B)=>{for(let w=0,T=B[1]-B[0];w<=T;w++)A[B[0]+w]=I[P++]+b;P++});let E=0;C.forEach((B,w)=>{r(B,(T)=>{if(m[w+b]=T,++E===C.length)f()})})})}else f()}function f(){a({chars:A,fonts:m})}function y(x,C){for(let I=0;I<C.length;I++){let[b,P=b]=C[I];if(b<=x&&x<=P)return!0}return!1}}}var $co=SQ({name:"FontResolver",dependencies:[Jco,jco,qco],init(e,t,n){return e(t,n())}});function Zco(e,t){let o=/[\u00AD\u034F\u061C\u115F-\u1160\u17B4-\u17B5\u180B-\u180E\u200B-\u200F\u202A-\u202E\u2060-\u206F\u3164\uFE00-\uFE0F\uFEFF\uFFA0\uFFF0-\uFFF8]/,i="[^\\S\\u00A0]",r=new RegExp("[^\\S\\u00A0]|[\\-\\u007C\\u00AD\\u2010\\u2012-\\u2014\\u2027\\u2056\\u2E17\\u2E40]");function s({text:m,lang:p,fonts:g,style:_,weight:f,preResolvedFonts:y,unicodeFontsURL:x},C){let I=({chars:b,fonts:P})=>{let E,B,w=[];for(let T=0;T<b.length;T++)if(b[T]!==B)B=b[T],w.push(E={start:T,end:T,fontObj:P[b[T]]});else E.end=T;C(w)};if(y)I(y);else e(m,I,{lang:p,fonts:g,style:_,weight:f,unicodeFontsURL:x})}function a({text:m="",font:p,lang:g,sdfGlyphSize:_=64,fontSize:f=400,fontWeight:y=1,fontStyle:x="normal",letterSpacing:C=0,lineHeight:I="normal",maxWidth:b=1/0,direction:P,textAlign:E="left",textIndent:B=0,whiteSpace:w="normal",overflowWrap:T="normal",anchorX:Q=0,anchorY:N=0,metricsOnly:F=!1,unicodeFontsURL:H,preResolvedFonts:z=null,includeCaretPositions:Y=!1,chunkedBoundsSize:U=8192,colorRanges:X=null},V){let W=u(),j={fontLoad:0,typesetting:0};if(m.indexOf("\r")>-1)console.info("Typesetter: got text with \\r chars; normalizing to \\n"),m=m.replace(/\r\n/g,`
`).replace(/\r/g,`
`);f=+f,C=+C,b=+b,I=I||"normal",B=+B,s({text:m,lang:g,style:x,weight:y,fonts:typeof p==="string"?[{src:p}]:p,unicodeFontsURL:H,preResolvedFonts:z},(q)=>{j.fontLoad=u()-W;let ne=isFinite(b),ce=null,oe=null,ie=null,J=null,ee=null,se=null,le=null,he=null,ue=0,Ae=0,_e=w!=="nowrap",Pe=new Map,Ee=u(),Te=B,be=0,me=new h,ye=[me];q.forEach((st)=>{let{fontObj:et}=st,{ascender:lt,descender:it,unitsPerEm:gt,lineGap:wt,capHeight:Dt,xHeight:vt}=et,Ht=Pe.get(et);if(!Ht){let Je=f/gt,Ve=I==="normal"?(lt-it+wt)*Je:I*f,Ye=(Ve-(lt-it)*Je)/2,mt=Math.min(Ve,(lt-it)*Je),ft=(lt+it)/2*Je+mt/2;Ht={index:Pe.size,src:et.src,fontObj:et,fontSizeMult:Je,unitsPerEm:gt,ascender:lt*Je,descender:it*Je,capHeight:Dt*Je,xHeight:vt*Je,lineHeight:Ve,baseline:-Ye-lt*Je,caretTop:ft,caretBottom:ft-mt},Pe.set(et,Ht)}let{fontSizeMult:Xt}=Ht,ut=m.slice(st.start,st.end+1),je,Re;et.forEachGlyph(ut,f,C,(Je,Ve,Ye,mt)=>{Ve+=be,mt+=st.start,je=Ve,Re=Je;let ft=m.charAt(mt),Oe=Je.advanceWidth*Xt,qe=me.count,rt;if(!("isEmpty"in Je))Je.isWhitespace=!!ft&&new RegExp("[^\\S\\u00A0]").test(ft),Je.canBreakAfter=!!ft&&r.test(ft),Je.isEmpty=Je.xMin===Je.xMax||Je.yMin===Je.yMax||o.test(ft);if(!Je.isWhitespace&&!Je.isEmpty)Ae++;if(_e&&ne&&!Je.isWhitespace&&Ve+Oe+Te>b&&qe){if(me.glyphAt(qe-1).glyphObj.canBreakAfter)rt=new h,Te=-Ve;else for(let Mt=qe;Mt--;)if(Mt===0&&T==="break-word"){rt=new h,Te=-Ve;break}else if(me.glyphAt(Mt).glyphObj.canBreakAfter){rt=me.splitAt(Mt+1);let Nt=rt.glyphAt(0).x;Te-=Nt;for(let Ot=rt.count;Ot--;)rt.glyphAt(Ot).x-=Nt;break}if(rt)me.isSoftWrapped=!0,me=rt,ye.push(me),ue=b}let Ct=me.glyphAt(me.count);if(Ct.glyphObj=Je,Ct.x=Ve+Te,Ct.y=Ye,Ct.width=Oe,Ct.charIndex=mt,Ct.fontData=Ht,ft===`
`)me=new h,ye.push(me),Te=-(Ve+Oe+C*f)+B}),be=je+Re.advanceWidth*Xt+C*f});let Ce=0;ye.forEach((st)=>{let et=!0;for(let lt=st.count;lt--;){let it=st.glyphAt(lt);if(et&&!it.glyphObj.isWhitespace){if(st.width=it.x+it.width,st.width>ue)ue=st.width;et=!1}let{lineHeight:gt,capHeight:wt,xHeight:Dt,baseline:vt}=it.fontData;if(gt>st.lineHeight)st.lineHeight=gt;let Ht=vt-st.baseline;if(Ht<0)st.baseline+=Ht,st.cap+=Ht,st.ex+=Ht;st.cap=Math.max(st.cap,st.baseline+wt),st.ex=Math.max(st.ex,st.baseline+Dt)}st.baseline-=Ce,st.cap-=Ce,st.ex-=Ce,Ce+=st.lineHeight});let ve=0,De=0;if(Q){if(typeof Q==="number")ve=-Q;else if(typeof Q==="string")ve=-ue*(Q==="left"?0:Q==="center"?0.5:Q==="right"?1:l(Q))}if(N){if(typeof N==="number")De=-N;else if(typeof N==="string")De=N==="top"?0:N==="top-baseline"?-ye[0].baseline:N==="top-cap"?-ye[0].cap:N==="top-ex"?-ye[0].ex:N==="middle"?Ce/2:N==="bottom"?Ce:N==="bottom-baseline"?-ye[ye.length-1].baseline:l(N)*Ce}if(!F){let st=t.getEmbeddingLevels(m,P);if(ce=new Uint16Array(Ae),oe=new Uint8Array(Ae),ie=new Float32Array(Ae*2),J={},le=[1/0,1/0,-1/0,-1/0],he=[],Y)se=new Float32Array(m.length*4);if(X)ee=new Uint8Array(Ae*3);let et=0,lt=-1,it=-1,gt,wt;if(ye.forEach((Dt,vt)=>{let{count:Ht,width:Xt}=Dt;if(Ht>0){let ut=0;for(let mt=Ht;mt--&&Dt.glyphAt(mt).glyphObj.isWhitespace;)ut++;let je=0,Re=0;if(E==="center")je=(ue-Xt)/2;else if(E==="right")je=ue-Xt;else if(E==="justify"&&Dt.isSoftWrapped){let mt=0;for(let ft=Ht-ut;ft--;)if(Dt.glyphAt(ft).glyphObj.isWhitespace)mt++;Re=(ue-Xt)/mt}if(Re||je){let mt=0;for(let ft=0;ft<Ht;ft++){let Oe=Dt.glyphAt(ft),qe=Oe.glyphObj;if(Oe.x+=je+mt,Re!==0&&qe.isWhitespace&&ft<Ht-ut)mt+=Re,Oe.width+=Re}}let Je=t.getReorderSegments(m,st,Dt.glyphAt(0).charIndex,Dt.glyphAt(Dt.count-1).charIndex);for(let mt=0;mt<Je.length;mt++){let[ft,Oe]=Je[mt],qe=1/0,rt=-1/0;for(let Ct=0;Ct<Ht;Ct++)if(Dt.glyphAt(Ct).charIndex>=ft){let Mt=Ct,Nt=Ct;for(;Nt<Ht;Nt++){let Ot=Dt.glyphAt(Nt);if(Ot.charIndex>Oe)break;if(Nt<Ht-ut)qe=Math.min(qe,Ot.x),rt=Math.max(rt,Ot.x+Ot.width)}for(let Ot=Mt;Ot<Nt;Ot++){let mn=Dt.glyphAt(Ot);mn.x=rt-(mn.x+mn.width-qe)}break}}let Ve,Ye=(mt)=>Ve=mt;for(let mt=0;mt<Ht;mt++){let ft=Dt.glyphAt(mt);Ve=ft.glyphObj;let Oe=Ve.index,qe=st.levels[ft.charIndex]&1;if(qe){let rt=t.getMirroredCharacter(m[ft.charIndex]);if(rt)ft.fontData.fontObj.forEachGlyph(rt,0,0,Ye)}if(Y){let{charIndex:rt,fontData:Ct}=ft,Mt=ft.x+ve,Nt=ft.x+ft.width+ve;se[rt*4]=qe?Nt:Mt,se[rt*4+1]=qe?Mt:Nt,se[rt*4+2]=Dt.baseline+Ct.caretBottom+De,se[rt*4+3]=Dt.baseline+Ct.caretTop+De;let Ot=rt-lt;if(Ot>1)d(se,lt,Ot);lt=rt}if(X){let{charIndex:rt}=ft;while(rt>it)if(it++,X.hasOwnProperty(it))wt=X[it]}if(!Ve.isWhitespace&&!Ve.isEmpty){let rt=et++,{fontSizeMult:Ct,src:Mt,index:Nt}=ft.fontData,Ot=J[Mt]||(J[Mt]={});if(!Ot[Oe])Ot[Oe]={path:Ve.path,pathBounds:[Ve.xMin,Ve.yMin,Ve.xMax,Ve.yMax]};let mn=ft.x+ve,ln=ft.y+Dt.baseline+De;ie[rt*2]=mn,ie[rt*2+1]=ln;let Cn=mn+Ve.xMin*Ct,vn=ln+Ve.yMin*Ct,nn=mn+Ve.xMax*Ct,on=ln+Ve.yMax*Ct;if(Cn<le[0])le[0]=Cn;if(vn<le[1])le[1]=vn;if(nn>le[2])le[2]=nn;if(on>le[3])le[3]=on;if(rt%U===0)gt={start:rt,end:rt,rect:[1/0,1/0,-1/0,-1/0]},he.push(gt);gt.end++;let Kn=gt.rect;if(Cn<Kn[0])Kn[0]=Cn;if(vn<Kn[1])Kn[1]=vn;if(nn>Kn[2])Kn[2]=nn;if(on>Kn[3])Kn[3]=on;if(ce[rt]=Oe,oe[rt]=Nt,X){let xo=rt*3;ee[xo]=wt>>16&255,ee[xo+1]=wt>>8&255,ee[xo+2]=wt&255}}}}}),se){let Dt=m.length-lt;if(Dt>1)d(se,lt,Dt)}}let Ze=[];Pe.forEach(({index:st,src:et,unitsPerEm:lt,ascender:it,descender:gt,lineHeight:wt,capHeight:Dt,xHeight:vt})=>{Ze[st]={src:et,unitsPerEm:lt,ascender:it,descender:gt,lineHeight:wt,capHeight:Dt,xHeight:vt}}),j.typesetting=u()-Ee,V({glyphIds:ce,glyphFontIndices:oe,glyphPositions:ie,glyphData:J,fontData:Ze,caretPositions:se,glyphColors:ee,chunkedBounds:he,fontSize:f,topBaseline:De+ye[0].baseline,blockBounds:[ve,De-Ce,ve+ue,De],visibleBounds:le,timings:j})})}function c(m,p){a({...m,metricsOnly:!0},(g)=>{let[_,f,y,x]=g.blockBounds;p({width:y-_,height:x-f})})}function l(m){let p=m.match(/^([\d.]+)%$/),g=p?parseFloat(p[1]):NaN;return isNaN(g)?0:g/100}function d(m,p,g){let _=m[p*4],f=m[p*4+1],y=m[p*4+2],x=m[p*4+3],C=(f-_)/g;for(let I=0;I<g;I++){let b=(p+I)*4;m[b]=_+C*I,m[b+1]=_+C*(I+1),m[b+2]=y,m[b+3]=x}}function u(){return(self.performance||Date).now()}function h(){this.data=[]}let A=["glyphObj","x","y","width","charIndex","fontData"];return h.prototype={width:0,lineHeight:0,baseline:0,cap:0,ex:0,isSoftWrapped:!1,get count(){return Math.ceil(this.data.length/A.length)},glyphAt(m){let p=h.flyweight;return p.data=this.data,p.index=m,p},splitAt(m){let p=new h;return p.data=this.data.splice(m*A.length),p}},h.flyweight=A.reduce((m,p,g,_)=>(Object.defineProperty(m,p,{get(){return this.data[this.index*A.length+g]},set(f){this.data[this.index*A.length+g]=f}}),m),{data:null,index:0}),{typeset:a,measure:c}}var vQ=()=>(self.performance||Date).now(),w0e=dwe(),G_t;function elo(e,t,n,o,i,r,s,a,c,l,d=!0){if(!d)return V_t(e,t,n,o,i,r,s,a,c,l);return nlo(e,t,n,o,i,r,s,a,c,l).then(null,(u)=>{if(!G_t)console.warn("WebGL SDF generation failed, falling back to JS",u),G_t=!0;return V_t(e,t,n,o,i,r,s,a,c,l)})}var B0e=[],tlo=5,Awe=0;function $_t(){let e=vQ();while(B0e.length&&vQ()-e<tlo)B0e.shift()();Awe=B0e.length?setTimeout($_t,0):0}var nlo=(...e)=>new Promise((t,n)=>{if(B0e.push(()=>{let o=vQ();try{w0e.webgl.generateIntoCanvas(...e),t({timing:vQ()-o})}catch(i){n(i)}}),!Awe)Awe=setTimeout($_t,0)}),olo=4,ilo=2000,Y_t={},rlo=0;function V_t(e,t,n,o,i,r,s,a,c,l){let d="TroikaTextSDFGenerator_JS_"+rlo++%olo,u=Y_t[d];if(!u)u=Y_t[d]={workerModule:SQ({name:d,workerId:d,dependencies:[dwe,vQ],init(h,A){let m=h().javascript.generate;return function(...p){let g=A();return{textureData:m(...p),timing:A()-g}}},getTransferables(h){return[h.textureData.buffer]}}),requests:0,idleTimer:null};return u.requests++,clearTimeout(u.idleTimer),u.workerModule(e,t,n,o,i,r).then(({textureData:h,timing:A})=>{let m=vQ(),p=new Uint8Array(h.length*4);for(let g=0;g<h.length;g++)p[g*4+l]=h[g];if(w0e.webglUtils.renderImageData(s,p,a,c,e,t,1<<3-l),A+=vQ()-m,--u.requests===0)u.idleTimer=setTimeout(()=>{k_t(d)},ilo);return{timing:A}})}function slo(e){if(!e._warm)w0e.webgl.isSupported(e),e._warm=!0}var alo=w0e.webglUtils.resizeWebGLCanvasWithoutClearing,H7={defaultFontURL:null,unicodeFontsURL:null,sdfGlyphSize:64,sdfMargin:0.0625,sdfExponent:9,textureWidth:2048,useWorker:!0},clo=new Po,Z_t=!1;function YG(){return(self.performance||Date).now()}function egt(e){if(Z_t)console.warn("configureTextBuilder called after first font request; will be ignored.");else ngt(H7,e)}var U_t=Object.create(null);function llo(e,t){Z_t=!0,e=ngt({},e);let n=YG(),{defaultFontURL:o}=H7,i=[];if(o)i.push({label:"default",src:W_t(o)});if(e.font)i.push({label:"user",src:W_t(e.font)});if(e.font=i,e.text=""+e.text,e.sdfGlyphSize=e.sdfGlyphSize||H7.sdfGlyphSize,e.unicodeFontsURL=e.unicodeFontsURL||H7.unicodeFontsURL,e.colorRanges!=null){let A={};for(let m in e.colorRanges)if(e.colorRanges.hasOwnProperty(m)){let p=e.colorRanges[m];if(typeof p!=="number")p=clo.set(p).getHex();A[m]=p}e.colorRanges=A}Object.freeze(e);let{textureWidth:r,sdfExponent:s}=H7,{sdfGlyphSize:a}=e,c=r/a*4,l=U_t[a];if(!l){let A=document.createElement("canvas");A.width=r,A.height=a*256/c,l=U_t[a]={glyphCount:0,sdfGlyphSize:a,sdfCanvas:A,sdfTexture:new sl(A,void 0,void 0,void 0,Ga,Ga),contextLost:!1,glyphsByFont:new Map},l.sdfTexture.generateMipmaps=!1,dlo(l)}let{sdfTexture:d,sdfCanvas:u}=l;(H7.useWorker?igt:hlo)(e).then((A)=>{let{glyphIds:m,glyphFontIndices:p,fontData:g,glyphPositions:_,fontSize:f,timings:y}=A,x=[],C=new Float32Array(m.length*4),I=0,b=0,P=YG(),E=g.map((N)=>{let F=l.glyphsByFont.get(N.src);if(!F)l.glyphsByFont.set(N.src,F=new Map);return F});m.forEach((N,F)=>{let H=p[F],{src:z,unitsPerEm:Y}=g[H],U=E[H].get(N);if(!U){let{path:q,pathBounds:ne}=A.glyphData[z][N],ce=Math.max(ne[2]-ne[0],ne[3]-ne[1])/a*(H7.sdfMargin*a+0.5),oe=l.glyphCount++,ie=[ne[0]-ce,ne[1]-ce,ne[2]+ce,ne[3]+ce];E[H].set(N,U={path:q,atlasIndex:oe,sdfViewBox:ie}),x.push(U)}let{sdfViewBox:X}=U,V=_[b++],W=_[b++],j=f/Y;C[I++]=V+X[0]*j,C[I++]=W+X[1]*j,C[I++]=V+X[2]*j,C[I++]=W+X[3]*j,m[F]=U.atlasIndex}),y.quads=(y.quads||0)+(YG()-P);let B=YG();y.sdf={};let w=u.height,T=Math.ceil(l.glyphCount/c),Q=Math.pow(2,Math.ceil(Math.log2(T*a)));if(Q>w)console.info(`Increasing SDF texture size ${w}->${Q}`),alo(u,r,Q),d.dispose();Promise.all(x.map((N)=>tgt(N,l,e.gpuAccelerateSDF).then(({timing:F})=>{y.sdf[N.atlasIndex]=F}))).then(()=>{if(x.length&&!l.contextLost)ogt(l),d.needsUpdate=!0;y.sdfTotal=YG()-B,y.total=YG()-n,t(Object.freeze({parameters:e,sdfTexture:d,sdfGlyphSize:a,sdfExponent:s,glyphBounds:C,glyphAtlasIndices:m,glyphColors:A.glyphColors,caretPositions:A.caretPositions,chunkedBounds:A.chunkedBounds,ascender:A.ascender,descender:A.descender,lineHeight:A.lineHeight,capHeight:A.capHeight,xHeight:A.xHeight,topBaseline:A.topBaseline,blockBounds:A.blockBounds,visibleBounds:A.visibleBounds,timings:A.timings}))})}),Promise.resolve().then(()=>{if(!l.contextLost)slo(u)})}function tgt({path:e,atlasIndex:t,sdfViewBox:n},{sdfGlyphSize:o,sdfCanvas:i,contextLost:r},s){if(r)return Promise.resolve({timing:-1});let{textureWidth:a,sdfExponent:c}=H7,l=Math.max(n[2]-n[0],n[3]-n[1]),d=Math.floor(t/4),u=d%(a/o)*o,h=Math.floor(d/(a/o))*o,A=t%4;return elo(o,o,e,n,l,c,i,u,h,A,s)}function dlo(e){let t=e.sdfCanvas;t.addEventListener("webglcontextlost",(n)=>{console.log("Context Lost",n),n.preventDefault(),e.contextLost=!0}),t.addEventListener("webglcontextrestored",(n)=>{console.log("Context Restored",n),e.contextLost=!1;let o=[];e.glyphsByFont.forEach((i)=>{i.forEach((r)=>{o.push(tgt(r,e,!0))})}),Promise.all(o).then(()=>{ogt(e),e.sdfTexture.needsUpdate=!0})})}function ngt(e,t){for(let n in t)if(t.hasOwnProperty(n))e[n]=t[n];return e}var E0e;function W_t(e){if(!E0e)E0e=typeof document>"u"?{}:document.createElement("a");return E0e.href=e,E0e.href}function ogt(e){if(typeof createImageBitmap!=="function"){console.info("Safari<15: applying SDF canvas workaround");let{sdfCanvas:t,sdfTexture:n}=e,{width:o,height:i}=t,r=e.sdfCanvas.getContext("webgl"),s=n.image.data;if(!s||s.length!==o*i*4)s=new Uint8Array(o*i*4),n.image={width:o,height:i,data:s},n.flipY=!1,n.isDataTexture=!0;r.readPixels(0,0,o,i,r.RGBA,r.UNSIGNED_BYTE,s)}}var ulo=SQ({name:"Typesetter",dependencies:[Zco,$co,L_t],init(e,t,n){return e(t,n())}}),igt=SQ({name:"Typesetter",dependencies:[ulo],init(e){return function(t){return new Promise((n)=>{e.typeset(t,n)})}},getTransferables(e){let t=[];for(let n in e)if(e[n]&&e[n].buffer)t.push(e[n].buffer);return t}}),hlo=igt.onMainThread;var X_t={};function mlo(e){let t=X_t[e];if(!t)t=X_t[e]=new Mg(1,1,e,e).translate(0.5,0.5,0);return t}var plo="aTroikaGlyphBounds",K_t="aTroikaGlyphIndex",Alo="aTroikaGlyphColor";class rgt extends owe{constructor(){super();this.detail=1,this.curveRadius=0,this.groups=[{start:0,count:1/0,materialIndex:0},{start:0,count:1/0,materialIndex:1}],this.boundingSphere=new py,this.boundingBox=new tm}computeBoundingSphere(){}computeBoundingBox(){}set detail(e){if(e!==this._detail){if(this._detail=e,typeof e!=="number"||e<1)e=1;let t=mlo(e);["position","normal","uv"].forEach((n)=>{this.attributes[n]=t.attributes[n].clone()}),this.setIndex(t.getIndex().clone())}}get detail(){return this._detail}set curveRadius(e){if(e!==this._curveRadius)this._curveRadius=e,this._updateBounds()}get curveRadius(){return this._curveRadius}updateGlyphs(e,t,n,o,i){this.updateAttributeData(plo,e,4),this.updateAttributeData(K_t,t,1),this.updateAttributeData(Alo,i,3),this._blockBounds=n,this._chunkedBounds=o,this.instanceCount=t.length,this._updateBounds()}_updateBounds(){let e=this._blockBounds;if(e){let{curveRadius:t,boundingBox:n}=this;if(t){let{PI:o,floor:i,min:r,max:s,sin:a,cos:c}=Math,l=o/2,d=o*2,u=Math.abs(t),h=e[0]/u,A=e[2]/u,m=i((h+l)/d)!==i((A+l)/d)?-u:r(a(h)*u,a(A)*u),p=i((h-l)/d)!==i((A-l)/d)?u:s(a(h)*u,a(A)*u),g=i((h+o)/d)!==i((A+o)/d)?u*2:s(u-c(h)*u,u-c(A)*u);n.min.set(m,e[1],t<0?-g:0),n.max.set(p,e[3],t<0?0:g)}else n.min.set(e[0],e[1],0),n.max.set(e[2],e[3],0);n.getBoundingSphere(this.boundingSphere)}}applyClipRect(e){let t=this.getAttribute(K_t).count,n=this._chunkedBounds;if(n)for(let o=n.length;o--;){t=n[o].end;let i=n[o].rect;if(i[1]<e.w&&i[3]>e.y&&i[0]<e.z&&i[2]>e.x)break}this.instanceCount=t}updateAttributeData(e,t,n){let o=this.getAttribute(e);if(t)if(o&&o.array.length===t.length)o.array.set(t),o.needsUpdate=!0;else this.setAttribute(e,new AQ(t,n)),delete this._maxInstanceCount,this.dispose();else if(o)this.deleteAttribute(e)}}var _lo=`
uniform vec2 uTroikaSDFTextureSize;
uniform float uTroikaSDFGlyphSize;
uniform vec4 uTroikaTotalBounds;
uniform vec4 uTroikaClipRect;
uniform mat3 uTroikaOrient;
uniform bool uTroikaUseGlyphColors;
uniform float uTroikaEdgeOffset;
uniform float uTroikaBlurRadius;
uniform vec2 uTroikaPositionOffset;
uniform float uTroikaCurveRadius;
attribute vec4 aTroikaGlyphBounds;
attribute float aTroikaGlyphIndex;
attribute vec3 aTroikaGlyphColor;
varying vec2 vTroikaGlyphUV;
varying vec4 vTroikaTextureUVBounds;
varying float vTroikaTextureChannel;
varying vec3 vTroikaGlyphColor;
varying vec2 vTroikaGlyphDimensions;
`,glo=`
vec4 bounds = aTroikaGlyphBounds;
bounds.xz += uTroikaPositionOffset.x;
bounds.yw -= uTroikaPositionOffset.y;
vec4 outlineBounds = vec4(
bounds.xy - uTroikaEdgeOffset - uTroikaBlurRadius,
bounds.zw + uTroikaEdgeOffset + uTroikaBlurRadius
);
vec4 clippedBounds = vec4(
clamp(outlineBounds.xy, uTroikaClipRect.xy, uTroikaClipRect.zw),
clamp(outlineBounds.zw, uTroikaClipRect.xy, uTroikaClipRect.zw)
);
vec2 clippedXY = (mix(clippedBounds.xy, clippedBounds.zw, position.xy) - bounds.xy) / (bounds.zw - bounds.xy);
position.xy = mix(bounds.xy, bounds.zw, clippedXY);
uv = (position.xy - uTroikaTotalBounds.xy) / (uTroikaTotalBounds.zw - uTroikaTotalBounds.xy);
float rad = uTroikaCurveRadius;
if (rad != 0.0) {
float angle = position.x / rad;
position.xz = vec2(sin(angle) * rad, rad - cos(angle) * rad);
normal.xz = vec2(sin(angle), cos(angle));
}
position = uTroikaOrient * position;
normal = uTroikaOrient * normal;
vTroikaGlyphUV = clippedXY.xy;
vTroikaGlyphDimensions = vec2(bounds[2] - bounds[0], bounds[3] - bounds[1]);
float txCols = uTroikaSDFTextureSize.x / uTroikaSDFGlyphSize;
vec2 txUvPerSquare = uTroikaSDFGlyphSize / uTroikaSDFTextureSize;
vec2 txStartUV = txUvPerSquare * vec2(
mod(floor(aTroikaGlyphIndex / 4.0), txCols),
floor(floor(aTroikaGlyphIndex / 4.0) / txCols)
);
vTroikaTextureUVBounds = vec4(txStartUV, vec2(txStartUV) + txUvPerSquare);
vTroikaTextureChannel = mod(aTroikaGlyphIndex, 4.0);
`,flo=`
uniform sampler2D uTroikaSDFTexture;
uniform vec2 uTroikaSDFTextureSize;
uniform float uTroikaSDFGlyphSize;
uniform float uTroikaSDFExponent;
uniform float uTroikaEdgeOffset;
uniform float uTroikaFillOpacity;
uniform float uTroikaBlurRadius;
uniform vec3 uTroikaStrokeColor;
uniform float uTroikaStrokeWidth;
uniform float uTroikaStrokeOpacity;
uniform bool uTroikaSDFDebug;
varying vec2 vTroikaGlyphUV;
varying vec4 vTroikaTextureUVBounds;
varying float vTroikaTextureChannel;
varying vec2 vTroikaGlyphDimensions;
float troikaSdfValueToSignedDistance(float alpha) {
// Inverse of exponential encoding in webgl-sdf-generator
float maxDimension = max(vTroikaGlyphDimensions.x, vTroikaGlyphDimensions.y);
float absDist = (1.0 - pow(2.0 * (alpha > 0.5 ? 1.0 - alpha : alpha), 1.0 / uTroikaSDFExponent)) * maxDimension;
float signedDist = absDist * (alpha > 0.5 ? -1.0 : 1.0);
return signedDist;
}
float troikaGlyphUvToSdfValue(vec2 glyphUV) {
vec2 textureUV = mix(vTroikaTextureUVBounds.xy, vTroikaTextureUVBounds.zw, glyphUV);
vec4 rgba = texture2D(uTroikaSDFTexture, textureUV);
float ch = floor(vTroikaTextureChannel + 0.5); //NOTE: can't use round() in WebGL1
return ch == 0.0 ? rgba.r : ch == 1.0 ? rgba.g : ch == 2.0 ? rgba.b : rgba.a;
}
float troikaGlyphUvToDistance(vec2 uv) {
return troikaSdfValueToSignedDistance(troikaGlyphUvToSdfValue(uv));
}
float troikaGetAADist() {
#if defined(GL_OES_standard_derivatives) || __VERSION__ >= 300
return length(fwidth(vTroikaGlyphUV * vTroikaGlyphDimensions)) * 0.5;
#else
return vTroikaGlyphDimensions.x / 64.0;
#endif
}
float troikaGetFragDistValue() {
vec2 clampedGlyphUV = clamp(vTroikaGlyphUV, 0.5 / uTroikaSDFGlyphSize, 1.0 - 0.5 / uTroikaSDFGlyphSize);
float distance = troikaGlyphUvToDistance(clampedGlyphUV);
// Extrapolate distance when outside bounds:
distance += clampedGlyphUV == vTroikaGlyphUV ? 0.0 :
length((vTroikaGlyphUV - clampedGlyphUV) * vTroikaGlyphDimensions);
return distance;
}
float troikaGetEdgeAlpha(float distance, float distanceOffset, float aaDist) {
#if defined(IS_DEPTH_MATERIAL) || defined(IS_DISTANCE_MATERIAL)
float alpha = step(-distanceOffset, -distance);
#else
float alpha = smoothstep(
distanceOffset + aaDist,
distanceOffset - aaDist,
distance
);
#endif
return alpha;
}
`,ylo=`
float aaDist = troikaGetAADist();
float fragDistance = troikaGetFragDistValue();
float edgeAlpha = uTroikaSDFDebug ?
troikaGlyphUvToSdfValue(vTroikaGlyphUV) :
troikaGetEdgeAlpha(fragDistance, uTroikaEdgeOffset, max(aaDist, uTroikaBlurRadius));
#if !defined(IS_DEPTH_MATERIAL) && !defined(IS_DISTANCE_MATERIAL)
vec4 fillRGBA = gl_FragColor;
fillRGBA.a *= uTroikaFillOpacity;
vec4 strokeRGBA = uTroikaStrokeWidth == 0.0 ? fillRGBA : vec4(uTroikaStrokeColor, uTroikaStrokeOpacity);
if (fillRGBA.a == 0.0) fillRGBA.rgb = strokeRGBA.rgb;
gl_FragColor = mix(fillRGBA, strokeRGBA, smoothstep(
-uTroikaStrokeWidth - aaDist,
-uTroikaStrokeWidth + aaDist,
fragDistance
));
gl_FragColor.a *= edgeAlpha;
#endif
if (edgeAlpha == 0.0) {
discard;
}
`;function xlo(e){let t=v0e(e,{chained:!0,extensions:{derivatives:!0},uniforms:{uTroikaSDFTexture:{value:null},uTroikaSDFTextureSize:{value:new ro},uTroikaSDFGlyphSize:{value:0},uTroikaSDFExponent:{value:0},uTroikaTotalBounds:{value:new Gl(0,0,0,0)},uTroikaClipRect:{value:new Gl(0,0,0,0)},uTroikaEdgeOffset:{value:0},uTroikaFillOpacity:{value:1},uTroikaPositionOffset:{value:new ro},uTroikaCurveRadius:{value:0},uTroikaBlurRadius:{value:0},uTroikaStrokeWidth:{value:0},uTroikaStrokeColor:{value:new Po},uTroikaStrokeOpacity:{value:1},uTroikaOrient:{value:new aa},uTroikaUseGlyphColors:{value:!0},uTroikaSDFDebug:{value:!1}},vertexDefs:_lo,vertexTransform:glo,fragmentDefs:flo,fragmentColorTransform:ylo,customRewriter({vertexShader:n,fragmentShader:o}){let i=/\buniform\s+vec3\s+diffuse\b/;if(i.test(o)){if(o=o.replace(i,"varying vec3 vTroikaGlyphColor").replace(/\bdiffuse\b/g,"vTroikaGlyphColor"),!i.test(n))n=n.replace(hwe,`uniform vec3 diffuse;
$&
vTroikaGlyphColor = uTroikaUseGlyphColors ? aTroikaGlyphColor / 255.0 : diffuse;
`)}return{vertexShader:n,fragmentShader:o}}});return t.transparent=!0,t.forceSinglePass=!0,Object.defineProperties(t,{isTroikaTextMaterial:{value:!0},shadowSide:{get(){return this.side},set(){}}}),t}var _we=new wA({color:16777215,side:fh,transparent:!0}),j_t=8421504,q_t=new Pr,M0e=new bt,mwe=new bt,h$=[],Clo=new bt,pwe="+x+y";function J_t(e){return Array.isArray(e)?e[0]:e}var sgt=()=>{let e=new Mo(new Mg(1,1),_we);return sgt=()=>e,e},agt=()=>{let e=new Mo(new Mg(1,1,32,1),_we);return agt=()=>e,e},Ilo={type:"syncstart"},blo={type:"synccomplete"},cgt=["font","fontSize","fontStyle","fontWeight","lang","letterSpacing","lineHeight","maxWidth","overflowWrap","text","direction","textAlign","textIndent","whiteSpace","anchorX","anchorY","colorRanges","sdfGlyphSize"],Slo=cgt.concat("material","color","depthOffset","clipRect","curveRadius","orientation","glyphGeometryDetail");class VG extends Mo{constructor(){let e=new rgt;super(e,null);this.text="",this.anchorX=0,this.anchorY=0,this.curveRadius=0,this.direction="auto",this.font=null,this.unicodeFontsURL=null,this.fontSize=0.1,this.fontWeight="normal",this.fontStyle="normal",this.lang=null,this.letterSpacing=0,this.lineHeight="normal",this.maxWidth=1/0,this.overflowWrap="normal",this.textAlign="left",this.textIndent=0,this.whiteSpace="normal",this.material=null,this.color=null,this.colorRanges=null,this.outlineWidth=0,this.outlineColor=0,this.outlineOpacity=1,this.outlineBlur=0,this.outlineOffsetX=0,this.outlineOffsetY=0,this.strokeWidth=0,this.strokeColor=j_t,this.strokeOpacity=1,this.fillOpacity=1,this.depthOffset=0,this.clipRect=null,this.orientation=pwe,this.glyphGeometryDetail=1,this.sdfGlyphSize=null,this.gpuAccelerateSDF=!0,this.debugSDF=!1}sync(e){if(this._needsSync)if(this._needsSync=!1,this._isSyncing)(this._queuedSyncs||(this._queuedSyncs=[])).push(e);else this._isSyncing=!0,this.dispatchEvent(Ilo),llo({text:this.text,font:this.font,lang:this.lang,fontSize:this.fontSize||0.1,fontWeight:this.fontWeight||"normal",fontStyle:this.fontStyle||"normal",letterSpacing:this.letterSpacing||0,lineHeight:this.lineHeight||"normal",maxWidth:this.maxWidth,direction:this.direction||"auto",textAlign:this.textAlign,textIndent:this.textIndent,whiteSpace:this.whiteSpace,overflowWrap:this.overflowWrap,anchorX:this.anchorX,anchorY:this.anchorY,colorRanges:this.colorRanges,includeCaretPositions:!0,sdfGlyphSize:this.sdfGlyphSize,gpuAccelerateSDF:this.gpuAccelerateSDF,unicodeFontsURL:this.unicodeFontsURL},(t)=>{this._isSyncing=!1,this._textRenderInfo=t,this.geometry.updateGlyphs(t.glyphBounds,t.glyphAtlasIndices,t.blockBounds,t.chunkedBounds,t.glyphColors);let n=this._queuedSyncs;if(n)this._queuedSyncs=null,this._needsSync=!0,this.sync(()=>{n.forEach((o)=>o&&o())});if(this.dispatchEvent(blo),e)e()})}onBeforeRender(e,t,n,o,i,r){if(this.sync(),i.isTroikaTextMaterial)this._prepareForRender(i)}dispose(){this.geometry.dispose()}get textRenderInfo(){return this._textRenderInfo||null}createDerivedMaterial(e){return xlo(e)}get material(){let e=this._derivedMaterial,t=this._baseMaterial||this._defaultMaterial||(this._defaultMaterial=_we.clone());if(!e||!e.isDerivedFrom(t))e=this._derivedMaterial=this.createDerivedMaterial(t),t.addEventListener("dispose",function n(){t.removeEventListener("dispose",n),e.dispose()});if(this.hasOutline()){let n=e._outlineMtl;if(!n)n=e._outlineMtl=Object.create(e,{id:{value:e.id+0.1}}),n.isTextOutlineMaterial=!0,n.depthWrite=!1,n.map=null,e.addEventListener("dispose",function o(){e.removeEventListener("dispose",o),n.dispose()});return[n,e]}else return e}set material(e){if(e&&e.isTroikaTextMaterial)this._derivedMaterial=e,this._baseMaterial=e.baseMaterial;else this._baseMaterial=e}hasOutline(){return!!(this.outlineWidth||this.outlineBlur||this.outlineOffsetX||this.outlineOffsetY)}get glyphGeometryDetail(){return this.geometry.detail}set glyphGeometryDetail(e){this.geometry.detail=e}get curveRadius(){return this.geometry.curveRadius}set curveRadius(e){this.geometry.curveRadius=e}get customDepthMaterial(){return J_t(this.material).getDepthMaterial()}set customDepthMaterial(e){}get customDistanceMaterial(){return J_t(this.material).getDistanceMaterial()}set customDistanceMaterial(e){}_prepareForRender(e){let{isTextOutlineMaterial:t,uniforms:n}=e,o=this.textRenderInfo;if(o){let{sdfTexture:s,blockBounds:a}=o;n.uTroikaSDFTexture.value=s,n.uTroikaSDFTextureSize.value.set(s.image.width,s.image.height),n.uTroikaSDFGlyphSize.value=o.sdfGlyphSize,n.uTroikaSDFExponent.value=o.sdfExponent,n.uTroikaTotalBounds.value.fromArray(a),n.uTroikaUseGlyphColors.value=!t&&!!o.glyphColors;let c=0,l=0,d=0,u,h,A,m=0,p=0;if(t){let{outlineWidth:_,outlineOffsetX:f,outlineOffsetY:y,outlineBlur:x,outlineOpacity:C}=this;c=this._parsePercent(_)||0,l=Math.max(0,this._parsePercent(x)||0),u=C,m=this._parsePercent(f)||0,p=this._parsePercent(y)||0}else{if(d=Math.max(0,this._parsePercent(this.strokeWidth)||0),d){if(A=this.strokeColor,n.uTroikaStrokeColor.value.set(A==null?j_t:A),h=this.strokeOpacity,h==null)h=1}u=this.fillOpacity}n.uTroikaEdgeOffset.value=c,n.uTroikaPositionOffset.value.set(m,p),n.uTroikaBlurRadius.value=l,n.uTroikaStrokeWidth.value=d,n.uTroikaStrokeOpacity.value=h,n.uTroikaFillOpacity.value=u==null?1:u,n.uTroikaCurveRadius.value=this.curveRadius||0;let g=this.clipRect;if(g&&Array.isArray(g)&&g.length===4)n.uTroikaClipRect.value.fromArray(g);else{let _=(this.fontSize||0.1)*100;n.uTroikaClipRect.value.set(a[0]-_,a[1]-_,a[2]+_,a[3]+_)}this.geometry.applyClipRect(n.uTroikaClipRect.value)}n.uTroikaSDFDebug.value=!!this.debugSDF,e.polygonOffset=!!this.depthOffset,e.polygonOffsetFactor=e.polygonOffsetUnits=this.depthOffset||0;let i=t?this.outlineColor||0:this.color;if(i==null)delete e.color;else{let s=e.hasOwnProperty("color")?e.color:e.color=new Po;if(i!==s._input||typeof i==="object")s.set(s._input=i)}let r=this.orientation||pwe;if(r!==e._orientation){let s=n.uTroikaOrient.value;r=r.replace(/[^-+xyz]/g,"");let a=r!==pwe&&r.match(/^([-+])([xyz])([-+])([xyz])$/);if(a){let[,c,l,d,u]=a;M0e.set(0,0,0)[l]=c==="-"?1:-1,mwe.set(0,0,0)[u]=d==="-"?-1:1,q_t.lookAt(Clo,M0e.cross(mwe),mwe),s.setFromMatrix4(q_t)}else s.identity();e._orientation=r}}_parsePercent(e){if(typeof e==="string"){let t=e.match(/^(-?[\d.]+)%$/),n=t?parseFloat(t[1]):NaN;e=(isNaN(n)?0:n/100)*this.fontSize}return e}localPositionToTextCoords(e,t=new ro){t.copy(e);let n=this.curveRadius;if(n)t.x=Math.atan2(e.x,Math.abs(n)-Math.abs(e.z))*Math.abs(n);return t}worldPositionToTextCoords(e,t=new ro){return M0e.copy(e),this.localPositionToTextCoords(this.worldToLocal(M0e),t)}raycast(e,t){let{textRenderInfo:n,curveRadius:o}=this;if(n){let i=n.blockBounds,r=o?agt():sgt(),s=r.geometry,{position:a,uv:c}=s.attributes;for(let l=0;l<c.count;l++){let d=i[0]+c.getX(l)*(i[2]-i[0]),u=i[1]+c.getY(l)*(i[3]-i[1]),h=0;if(o)h=o-Math.cos(d/o)*o,d=Math.sin(d/o)*o;a.setXYZ(l,d,u,h)}s.boundingSphere=this.geometry.boundingSphere,s.boundingBox=this.geometry.boundingBox,r.matrixWorld=this.matrixWorld,r.material.side=this.material.side,h$.length=0,r.raycast(e,h$);for(let l=0;l<h$.length;l++)h$[l].object=this,t.push(h$[l])}}copy(e){let t=this.geometry;return super.copy(e),this.geometry=t,Slo.forEach((n)=>{this[n]=e[n]}),this}clone(){return new this.constructor().copy(this)}}cgt.forEach((e)=>{let t="_private_"+e;Object.defineProperty(VG.prototype,e,{get(){return this[t]},set(n){if(n!==this[t])this[t]=n,this._needsSync=!0}})});var zvr=new tm,Gvr=new Po;var wl=Rt(lo(),1);Yo();function MQ([e,t],[n,o],{lineThickness:i=0}={}){if(i===0)return DA(e,t,n,o);return Plo(e,t,n,o)<=i}function DA(e,t,n,o){let i=m$(e,t,n),r=m$(e,t,o),s=m$(n,o,e),a=m$(n,o,t);if(i!==r&&s!==a)return!0;if(i===0&&EQ(e,n,t))return!0;if(r===0&&EQ(e,o,t))return!0;if(s===0&&EQ(n,e,o))return!0;if(a===0&&EQ(n,t,o))return!0;return!1}function m$(e,t,n){let o=(t.y-e.y)*(n.x-t.x)-(t.x-e.x)*(n.y-t.y);if(o===0)return 0;return o>0?1:2}function EQ(e,t,n){return t.x<=Math.max(e.x,n.x)&&t.x>=Math.min(e.x,n.x)&&t.y<=Math.max(e.y,n.y)&&t.y>=Math.min(e.y,n.y)}function Plo(e,t,n,o){if(e.x===t.x&&e.y===t.y)return qs(e,n,o);if(n.x===o.x&&n.y===o.y)return qs(n,e,t);if(DA(e,t,n,o))return 0;let i=[qs(e,n,o),qs(t,n,o),qs(n,e,t),qs(o,e,t)];return Math.min(...i)}function qs(e,t,n){let o=(n.x-t.x)**2+(n.y-t.y)**2;if(o===0)return al(e,t);let i=((e.x-t.x)*(n.x-t.x)+(e.y-t.y)*(n.y-t.y))/o;i=Math.max(0,Math.min(1,i));let r={x:t.x+i*(n.x-t.x),y:t.y+i*(n.y-t.y)};return al(e,r)}function al(e,t){let n=e.x-t.x,o=e.y-t.y;return Math.sqrt(n*n+o*o)}function T0e(e,t,n,o){let i=t.x-e.x,r=t.y-e.y,s=o.x-n.x,a=o.y-n.y,c=e.x-n.x,l=e.y-n.y,d=i*a-r*s;if(Math.abs(d)<0.0000000001)return null;let u=(l*s-c*a)/d,h=(i*l-r*c)/d,A=0.000000001;if(u>=-A&&u<=1+A&&h>=-A&&h<=1+A){let m=e.x+u*i,p=e.y+u*r;return{x:m,y:p}}return null}function p$(e,t,n){let o=(c)=>c.x>=n.minX&&c.x<=n.maxX&&c.y>=n.minY&&c.y<=n.maxY;if(o(e)||o(t))return!0;let i={x:n.minX,y:n.minY},r={x:n.maxX,y:n.minY},s={x:n.minX,y:n.maxY},a={x:n.maxX,y:n.maxY};return DA(e,t,i,r)||DA(e,t,r,a)||DA(e,t,a,s)||DA(e,t,s,i)}var vlo=(e)=>{let t=[];for(let n=0;n<e.length;n++){let o=e[n],i=e[(n+1)%e.length];t.push([o,i])}return t},Elo=(e,t,n)=>{let o=(e.y-t.y)*(n.x-t.x)-(e.x-t.x)*(n.y-t.y);if(Math.abs(o)>0.000000001)return!1;let i=(e.x-t.x)*(n.x-t.x)+(e.y-t.y)*(n.y-t.y);if(i<0)return!1;let r=(n.x-t.x)**2+(n.y-t.y)**2;if(r===0)return!1;if(i>r)return!1;return!0};var mI=(e,t)=>{if(t.length<3)return!1;let n=vlo(t);for(let[i,r]of n)if(Elo(e,i,r))return!0;let o=!1;for(let i=0,r=t.length-1;i<t.length;r=i++){let s=t[i].x,a=t[i].y,c=t[r].x,l=t[r].y;if(a>e.y!==l>e.y&&e.x<(c-s)*(e.y-a)/(l-a)+s)o=!o}return o};function O7(e){let t=e.width/2,n=e.height/2;return{minX:e.center.x-t,maxX:e.center.x+t,minY:e.center.y-n,maxY:e.center.y+n}}function D0e(e,t){let n=O7(e),o=O7(t),i=Math.max(n.minX-o.maxX,o.minX-n.maxX,0),r=Math.max(n.minY-o.maxY,o.minY-n.maxY,0),s={x:0,y:0},a={x:0,y:0};if(i===0&&r===0)return{distance:0,pointA:e.center,pointB:t.center};return s.x=td(e.center.x,o.minX,o.maxX),s.y=td(e.center.y,o.minY,o.maxY),a.x=td(t.center.x,n.minX,n.maxX),a.y=td(t.center.y,n.minY,n.maxY),{distance:Math.hypot(s.x-a.x,s.y-a.y),pointA:s,pointB:a}}function JM(e,t){return D0e(e,t)}function td(e,t,n){return Math.max(t,Math.min(n,e))}function N0e(e,t){let n=Number.POSITIVE_INFINITY,o={x:0,y:0},i={x:0,y:0};for(let r of e)for(let s of t){let{distance:a,pointA:c,pointB:l}=D0e(r,s);if(a<n)n=a,o=c,i=l}return{pointA:o,pointB:i,distance:n}}function Ay(e,t,n,o){if(e.x===t.x&&e.y===t.y)return qs(e,n,o);if(n.x===o.x&&n.y===o.y)return qs(n,e,t);if(DA(e,t,n,o))return 0;let i=[qs(e,n,o),qs(t,n,o),qs(n,e,t),qs(o,e,t)];return Math.min(...i)}function gwe(e,t,n){let o={x:n.minX,y:n.minY},i={x:n.maxX,y:n.minY},r={x:n.minX,y:n.maxY},s={x:n.maxX,y:n.maxY};if(DA(e,t,o,i)||DA(e,t,i,s)||DA(e,t,s,r)||DA(e,t,r,o))return 0;if(e.x>=n.minX&&e.x<=n.maxX&&e.y>=n.minY&&e.y<=n.maxY&&t.x>=n.minX&&t.x<=n.maxX&&t.y>=n.minY&&t.y<=n.maxY)return 0;let a=[qs(o,e,t),qs(i,e,t),qs(r,e,t),qs(s,e,t)];if(e.x>=n.minX&&e.x<=n.maxX&&e.y>=n.minY&&e.y<=n.maxY)return 0;if(t.x>=n.minX&&t.x<=n.maxX&&t.y>=n.minY&&t.y<=n.maxY)return 0;if(e.x<n.minX||e.x>n.maxX||e.y<n.minY||e.y>n.maxY){let c=td(e.x,n.minX,n.maxX),l=td(e.y,n.minY,n.maxY);a.push(al(e,{x:c,y:l}))}if(t.x<n.minX||t.x>n.maxX||t.y<n.minY||t.y>n.maxY){let c=td(t.x,n.minX,n.maxX),l=td(t.y,n.minY,n.maxY);a.push(al(t,{x:c,y:l}))}return Math.min(...a)}function A$(e,t,n){let o={x:n.x,y:n.y};if(e.x===t.x&&e.y===t.y)return Math.max(0,al(e,o)-n.radius);let i={x:t.x-e.x,y:t.y-e.y},r={x:o.x-e.x,y:o.y-e.y},s=i.x*i.x+i.y*i.y,a=Math.max(0,Math.min(1,(i.x*r.x+i.y*r.y)/s)),c={x:e.x+a*i.x,y:e.y+a*i.y},l=al(c,o);return Math.max(0,l-n.radius)}function Xf(e,t,n){let o=n.x-t.x,i=n.y-t.y,r=o*o+i*i;if(r===0)return{x:t.x,y:t.y};let s=((e.x-t.x)*o+(e.y-t.y)*i)/r;return s=Math.max(0,Math.min(1,s)),{x:t.x+s*o,y:t.y+s*i}}var UG=(e,t)=>{let n={x:t.x-e.x,y:t.y-e.y},o=Math.sqrt(n.x**2+n.y**2);return{x:n.x/o,y:n.y/o}},Kv=(e)=>{switch(e){case"up":return{x:0,y:1};case"down":return{x:0,y:-1};case"left":return{x:-1,y:0};case"right":return{x:1,y:0}}};function fwe({rows:e,cols:t,xSpacing:n,ySpacing:o,width:i,height:r,offsetX:s=0,offsetY:a=0,yDirection:c="cartesian",centered:l=!0}){let d=n??1,u=o??1,h=i??t*d,A=r??e*u,m=l?-h/2:0,p=l?-A/2:0,g=i?i/t:d,_=r?r/e:u,f=[];for(let y=0;y<e;y++)for(let x=0;x<t;x++){let C=y*t+x,I=s+m+x*g+g/2,b=a+y*_+_/2,P=c==="cartesian"?a+p+(e-1-y)*_+_/2:a+p+y*_+_/2;f.push({index:C,center:{x:I,y:P},topLeft:{x:I-g/2,y:P+_/2},bottomRight:{x:I+g/2,y:P-_/2},row:y,col:x})}return f}function pu(e){return(e%360+360)%360}function ywe(e,t){let n=t.width/2,o=t.height/2,i=t.center.x-n,r=t.center.x+n,s=t.center.y-o,a=t.center.y+o;if(e.x>=i&&e.x<=r&&e.y>=s&&e.y<=a)return 0;let c=td(e.x,i,r),l=td(e.y,s,a);return al(e,{x:c,y:l})}function xwe(e,t){if(e.x>=t.minX&&e.x<=t.maxX&&e.y>=t.minY&&e.y<=t.maxY)return 0;let n=td(e.x,t.minX,t.maxX),o=td(e.y,t.minY,t.maxY);return al(e,{x:n,y:o})}function BQ(e,t){return{x:(e.x+t.x)/2,y:(e.y+t.y)/2}}function WG(e,t){let n=e.x-t.x,o=e.y-t.y;return n*n+o*o}var Cwe=(e,t)=>{let n=Math.max(0,Math.min(e.maxX,t.maxX)-Math.max(e.minX,t.minX)),o=Math.max(0,Math.min(e.maxY,t.maxY)-Math.max(e.minY,t.minY));return n*o};var z7=(e,t)=>{let n=e.maxX<t.minX?t.minX-e.maxX:t.maxX<e.minX?e.minX-t.maxX:0,o=e.maxY<t.minY?t.minY-e.maxY:t.maxY<e.minY?e.minY-t.maxY:0;return Math.sqrt(n*n+o*o)};var h0=(e,t)=>!(e.maxX<t.minX||t.maxX<e.minX||e.maxY<t.minY||t.maxY<e.minY);var xd=(e)=>{let{center:t,width:n,height:o}=e,i=n/2,r=o/2;return{minX:t.x-i,maxX:t.x+i,minY:t.y-r,maxY:t.y+r}};var ax=(e)=>({x:(e.minX+e.maxX)/2,y:(e.minY+e.maxY)/2});var ws=(e)=>{if(e.length===0)return null;let t=e[0].x,n=e[0].y,o=e[0].x,i=e[0].y;for(let r=1;r<e.length;r++){let s=e[r];if(s.x<t)t=s.x;if(s.y<n)n=s.y;if(s.x>o)o=s.x;if(s.y>i)i=s.y}return{minX:t,minY:n,maxX:o,maxY:i}};Gt();qa();u0();Yo();u0();Gt();Yo();Yo();Yo();Gt();class R0e{constructor(e=1/0,t=Float64Array,n=Uint32Array){let o=e!==1/0;this.ids=o?new n(e):[],this.values=o?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++;while(n>0){let o=n-1>>1,i=this.values[o];if(t>=i)break;this.ids[n]=this.ids[o],this.values[n]=i,n=o}this.ids[n]=e,this.values[n]=t}pop(){if(this.length===0)return;let e=this.ids,t=this.values,n=e[0],o=--this.length;if(o>0){let i=e[o],r=t[o],s=0,a=o>>1;while(s<a){let c=(s<<1)+1,l=c+1,d=c+(+(l<o)&+(t[l]<t[c]));if(t[d]>=r)break;e[s]=e[d],t[s]=t[d],s=d}e[s]=i,t[s]=r}return n}peek(){return this.length>0?this.ids[0]:void 0}peekValue(){return this.length>0?this.values[0]:void 0}shrink(){if(Array.isArray(this.ids))this.ids.length=this.length;if(Array.isArray(this.values))this.values.length=this.length}}var lgt=[Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array],Iwe=3;class cx{static from(e,t=0){if(t%8!==0)throw Error("byteOffset must be 8-byte aligned.");if(!e||e.byteLength===void 0||"buffer"in e)throw Error("Data must be an instance of ArrayBuffer or SharedArrayBuffer.");let[n,o]=new Uint8Array(e,t+0,2);if(n!==251)throw Error("Data does not appear to be in a Flatbush format.");let i=o>>4;if(i!==Iwe)throw Error(`Got v${i} data when expected v${Iwe}.`);let r=lgt[o&15];if(!r)throw Error("Unrecognized array type.");let[s]=new Uint16Array(e,t+2,1),[a]=new Uint32Array(e,t+4,1);return new cx(a,s,r,void 0,e,t)}constructor(e,t=16,n=Float64Array,o=ArrayBuffer,i,r=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=r;let s=e,a=s;this._levelBounds=[s*4];do s=Math.ceil(s/this.nodeSize),a+=s,this._levelBounds.push(a*4);while(s!==1);this.ArrayType=n,this.IndexArrayType=a<16384?Uint16Array:Uint32Array;let c=lgt.indexOf(n),l=a*4*n.BYTES_PER_ELEMENT;if(c<0)throw Error(`Unexpected typed array class: ${n}.`);let d=n,u=this.IndexArrayType;if(i)this.data=i,this._boxes=new d(i,r+8,a*4),this._indices=new u(i,r+8+l,a),this._pos=a*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 h=this.data=new o(8+l+a*this.IndexArrayType.BYTES_PER_ELEMENT);this._boxes=new d(h,8,a*4),this._indices=new u(h,8+l,a),this._pos=0,this.minX=1/0,this.minY=1/0,this.maxX=-1/0,this.maxY=-1/0,new Uint8Array(h,0,2).set([251,(Iwe<<4)+c]),new Uint16Array(h,2,1)[0]=t,new Uint32Array(h,4,1)[0]=e}this._queue=new R0e}add(e,t,n=e,o=t){let i=this._pos,r=i>>2,s=this._boxes;if(this._indices[r]=r,s[i]=e,s[i+1]=t,s[i+2]=n,s[i+3]=o,this._pos=i+4,e<this.minX)this.minX=e;if(t<this.minY)this.minY=t;if(n>this.maxX)this.maxX=n;if(o>this.maxY)this.maxY=o;return r}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:o,nodeSize:i,_indices:r,_levelBounds:s}=this,a=this.maxX-n||1,c=this.maxY-o||1,l=new Int32Array(t),d=65535,u=d/a,h=d/c;for(let m=0,p=0;m<t;m++){let g=e[p++],_=e[p++],f=e[p++],y=e[p++],x=u*((g+f)/2-n)|0,C=h*((_+y)/2-o)|0;l[m]=Dlo(x,C)}wlo(l,e,r,0,t-1,i);let A=t*4;for(let m=0,p=0;m<s.length-1;m++){let g=s[m];while(p<g){let _=p,f=e[p++],y=e[p++],x=e[p++],C=e[p++];for(let I=1;I<i&&p<g;I++)f=Math.min(f,e[p++]),y=Math.min(y,e[p++]),x=Math.max(x,e[p++]),C=Math.max(C,e[p++]);r[A>>2]=_,e[A++]=f,e[A++]=y,e[A++]=x,e[A++]=C}}this._pos=A}search(e,t,n,o,i){if(this._pos!==this._boxes.length)throw Error("Data not yet indexed - call index.finish().");let{_boxes:r,_levelBounds:s,_indices:a,nodeSize:c}=this,l=this.numItems*4,d=r.length-4,u=s.length-1,h=[],A=[],m=!1;while(d!==void 0){let p=Math.min(d+c*4,s[u]),g=d>=l;if(m)this._collectContained(d,p,u,l,A,i);else for(let _=d;_<p;_+=4){let f=r[_];if(n<f)continue;let y=r[_+1];if(o<y)continue;let x=r[_+2];if(e>x)continue;let C=r[_+3];if(t>C)continue;let I=a[_>>2]|0;if(g){let b=+(e<=f&&t<=y&&n>=x&&o>=C);h.push(I|b,u-1)}else if(i===void 0||i(I,f,y,x,C))A.push(I)}if(u=h.pop(),d=h.pop(),d!==void 0)m=(d&1)===1,d&=-2}return A}_collectContained(e,t,n,o,i,r){let s=this._boxes,a=this._indices,c=e;for(let d=n;d>0;d--)c=a[c>>2];let l=Math.min(c+(t-e)*this.nodeSize**n,o);if(r===void 0)for(;c<l;c+=4)i.push(a[c>>2]|0);else for(;c<l;c+=4){let d=a[c>>2]|0;if(r(d,s[c],s[c+1],s[c+2],s[c+3]))i.push(d)}}neighbors(e,t,n=1/0,o=1/0,i){if(this._pos!==this._boxes.length)throw Error("Data not yet indexed - call index.finish().");let{_boxes:r,_levelBounds:s,_indices:a,_queue:c,nodeSize:l}=this,d=this.numItems*4,u=l*4,h=[],A=o*o,m=n===1,p=A;c.push(r.length-4<<1,0);while(c.length){let g=c.ids[0];if(g&1){if(c.pop(),h.push(g>>1),h.length===n)break;continue}c.pop();let _=g>>1,f=_<d,y=Math.min(_+u,Blo(_,s));for(let x=_;x<y;x+=4){let C=r[x],I=r[x+1],b=r[x+2],P=r[x+3],E=Math.max(Math.max(C-e,e-b),0),B=Math.max(Math.max(I-t,t-P),0),w=E*E+B*B;if(w>p)continue;let T=a[x>>2]|0;if(f){if(i===void 0||i(T)){if(c.push(T<<1|1,w),m&&w<p)p=w}}else c.push(T<<1,w)}}return c.clear(),h}}function Blo(e,t){let n=0,o=t.length-1;while(n<o){let i=n+o>>1;if(t[i]>e)o=i;else n=i+1}return t[n]}function wlo(e,t,n,o,i,r){let s=[o,i];while(s.length){let a=s.pop()||0,c=s.pop()||0;if(a-c<=r&&Math.floor(c/r)>=Math.floor(a/r))continue;let l=e[c],d=e[c+a>>1],u=e[a],h=l>d!==l>u?l:d<l!==d<u?d:u,A=c-1,m=a+1;while(!0){do A++;while(e[A]<h);do m--;while(e[m]>h);if(A>=m)break;Tlo(e,t,n,A,m)}s.push(c,m,m+1,a)}}function Tlo(e,t,n,o,i){let r=e[o];e[o]=e[i],e[i]=r;let s=4*o,a=4*i,c=t[s],l=t[s+1],d=t[s+2],u=t[s+3];t[s]=t[a],t[s+1]=t[a+1],t[s+2]=t[a+2],t[s+3]=t[a+3],t[a]=c,t[a+1]=l,t[a+2]=d,t[a+3]=u;let h=n[o];n[o]=n[i],n[i]=h}function Dlo(e,t){let n=e^t,o=65535^n,i=65535^(e|t),r=e&(t^65535),s=n|o>>1,a=n>>1^n,c=i^(i>>1^o&r>>1),l=r^(n&i>>1^r>>1);return n=s&s>>2^a&a>>2,o=s&a>>2^a&(s^a)>>2,i=c^(s&c>>2^a&l>>2),r=l^(a&c>>2^(s^a)&l>>2),s=n&n>>4^o&o>>4,a=n&o>>4^o&(n^o)>>4,c=i^(n&i>>4^o&r>>4),l=r^(o&i>>4^(n^o)&r>>4),i=c^(s&c>>8^a&l>>8),r=l^(a&c>>8^(s^a)&l>>8),i^=i>>1,r^=r>>1,n=e^t,o=r|65535^(n|i),n=(n|n<<8)&16711935,n=(n|n<<4)&252645135,n=(n|n<<2)&858993459,n=(n|n<<1)&1431655765,o=(o|o<<8)&16711935,o=(o|o<<4)&252645135,o=(o|o<<2)&858993459,o=(o|o<<1)&1431655765,((o<<1|n)>>>0)-2147483648}u0();u0();u0();u0();u0();u0();qa();Gt();qa();Gt();Yo();qa();Yo();u0();Yo();Yo();qa();Yo();u0();pn();u0();pn();Yo();Yo();qa();qa();u0();Yo();qa();qa();qa();Gt();Yo();Gt();Yo();Yo();qa();Yo();Yo();vp();qa();Yo();vp();qa();vp();qa();Yo();vp();qa();Yo();Gt();qa();Gt();Yo();Yo();Yo();var{cos:n3r,sin:o3r,PI:i3r}=Math;var{tan:u3r}=Math;var k0e=0.6,L0e=1;var Qlo=(e)=>(e.ccwRotationDegrees??0)*Math.PI/180;var klo=(e,t)=>{let n=Math.cos(t),o=Math.sin(t);return{x:e.x*n-e.y*o,y:e.x*o+e.y*n}},Swe=(e)=>Llo(e,Qlo(e));var Llo=(e,t)=>{let n=e.width/2,o=e.height/2;return[{x:-n,y:-o},{x:n,y:-o},{x:n,y:o},{x:-n,y:o}].map((i)=>{let r=klo(i,t);return{x:e.center.x+r.x,y:e.center.y+r.y}})};var Flo=2,Hlo=12,Olo=12,F0e=(e)=>({tip:{...e},base:{...e},leftWing:{...e},rightWing:{...e}}),ugt=(e,t,n)=>{let o=e.x-t.x,i=e.y-t.y,r=Math.hypot(o,i);if(r===0)return F0e(e);let s=o/r,c=-(i/r)*(n/2),l=s*(n/2);return{tip:{...e},base:{...t},leftWing:{x:t.x+c,y:t.y+l},rightWing:{x:t.x-c,y:t.y-l}}};function H0e(e){let{start:t,end:n}=e,o=n.x-t.x,i=n.y-t.y,r=Math.hypot(o,i),s=Flo,a=Hlo;if(r===0){let f=e.doubleSided?[F0e(t),F0e(t)]:[F0e(t)];return{shaftStart:{...t},shaftEnd:{...t},heads:f,shaftWidth:s,headLength:0,headWidth:a,length:r}}let c=o/r,l=i/r,d=Math.min(Olo,r*0.5),u=Math.max(d,s*2),h=e.doubleSided?r/2:r,A=Math.min(u,h),m={x:n.x-c*A,y:n.y-l*A},p=[ugt(n,m,a)],g={...t},_={...m};if(e.doubleSided){let f={x:t.x+c*A,y:t.y+l*A};p.unshift(ugt(t,f,a)),g=f}return{shaftStart:g,shaftEnd:_,heads:p,shaftWidth:s,headLength:A,headWidth:a,length:r}}function Pwe(e){let t=H0e(e);return[t.shaftStart,t.shaftEnd,...t.heads.flatMap((o)=>[o.tip,o.base,o.leftWing,o.rightWing])].reduce((o,i)=>({minX:Math.min(o.minX,i.x),maxX:Math.max(o.maxX,i.x),minY:Math.min(o.minY,i.y),maxY:Math.max(o.maxY,i.y)}),{minX:1/0,maxX:-1/0,minY:1/0,maxY:-1/0})}var zlo=Rt(J2(),1);var Rp=Uint8Array,lx=Uint16Array,Rwe=Int32Array,O0e=new Rp([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),z0e=new Rp([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),wwe=new Rp([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),fgt=function(e,t){var n=new lx(31);for(var o=0;o<31;++o)n[o]=t+=1<<e[o-1];var i=new Rwe(n[30]);for(var o=1;o<30;++o)for(var r=n[o];r<n[o+1];++r)i[r]=r-n[o]<<5|o;return{b:n,r:i}},ygt=fgt(O0e,2),{b:xgt,r:Twe}=ygt;xgt[28]=258,Twe[258]=28;var Cgt=fgt(z0e,0),{b:Glo,r:Agt}=Cgt,Dwe=new lx(32768);for(Ja=0;Ja<32768;++Ja)jv=(Ja&43690)>>1|(Ja&21845)<<1,jv=(jv&52428)>>2|(jv&13107)<<2,jv=(jv&61680)>>4|(jv&3855)<<4,Dwe[Ja]=((jv&65280)>>8|(jv&255)<<8)>>1;var jv,Ja,qv=function(e,t,n){var o=e.length,i=0,r=new lx(t);for(;i<o;++i)if(e[i])++r[e[i]-1];var s=new lx(t);for(i=1;i<t;++i)s[i]=s[i-1]+r[i-1]<<1;var a;if(n){a=new lx(1<<t);var c=15-t;for(i=0;i<o;++i)if(e[i]){var l=i<<4|e[i],d=t-e[i],u=s[e[i]-1]++<<d;for(var h=u|(1<<d)-1;u<=h;++u)a[Dwe[u]>>c]=l}}else{a=new lx(o);for(i=0;i<o;++i)if(e[i])a[i]=Dwe[s[e[i]-1]++]>>15-e[i]}return a},G7=new Rp(288);for(Ja=0;Ja<144;++Ja)G7[Ja]=8;var Ja;for(Ja=144;Ja<256;++Ja)G7[Ja]=9;var Ja;for(Ja=256;Ja<280;++Ja)G7[Ja]=7;var Ja;for(Ja=280;Ja<288;++Ja)G7[Ja]=8;var Ja,C$=new Rp(32);for(Ja=0;Ja<32;++Ja)C$[Ja]=5;var Ja,Ylo=qv(G7,9,0),Vlo=qv(G7,9,1),Ulo=qv(C$,5,0),Wlo=qv(C$,5,1),vwe=function(e){var t=e[0];for(var n=1;n<e.length;++n)if(e[n]>t)t=e[n];return t},q5=function(e,t,n){var o=t/8|0;return(e[o]|e[o+1]<<8)>>(t&7)&n},Ewe=function(e,t){var n=t/8|0;return(e[n]|e[n+1]<<8|e[n+2]<<16)>>(t&7)},Qwe=function(e){return(e+7)/8|0},x$=function(e,t,n){if(t==null||t<0)t=0;if(n==null||n>e.length)n=e.length;return new Rp(e.subarray(t,n))};var Xlo=["unexpected EOF","invalid block type","invalid length/literal","invalid distance","stream finished","no stream handler",,"no callback","invalid UTF-8 data","extra field too long","date not in range 1980-2099","filename too long","stream finishing","invalid zip data"],_y=function(e,t,n){var o=Error(t||Xlo[e]);if(o.code=e,Error.captureStackTrace)Error.captureStackTrace(o,_y);if(!n)throw o;return o},Igt=function(e,t,n,o){var i=e.length,r=o?o.length:0;if(!i||t.f&&!t.l)return n||new Rp(0);var s=!n,a=s||t.i!=2,c=t.i;if(s)n=new Rp(i*3);var l=function(se){var le=n.length;if(se>le){var he=new Rp(Math.max(le*2,se));he.set(n),n=he}},d=t.f||0,u=t.p||0,h=t.b||0,{l:A,d:m,m:p,n:g}=t,_=i*8;do{if(!A){d=q5(e,u,1);var f=q5(e,u+1,3);if(u+=3,!f){var y=Qwe(u)+4,x=e[y-4]|e[y-3]<<8,C=y+x;if(C>i){if(c)_y(0);break}if(a)l(h+x);n.set(e.subarray(y,C),h),t.b=h+=x,t.p=u=C*8,t.f=d;continue}else if(f==1)A=Vlo,m=Wlo,p=9,g=5;else if(f==2){var I=q5(e,u,31)+257,b=q5(e,u+10,15)+4,P=I+q5(e,u+5,31)+1;u+=14;var E=new Rp(P),B=new Rp(19);for(var w=0;w<b;++w)B[wwe[w]]=q5(e,u+w*3,7);u+=b*3;var T=vwe(B),Q=(1<<T)-1,N=qv(B,T,1);for(var w=0;w<P;){var F=N[q5(e,u,Q)];u+=F&15;var y=F>>4;if(y<16)E[w++]=y;else{var H=0,z=0;if(y==16)z=3+q5(e,u,3),u+=2,H=E[w-1];else if(y==17)z=3+q5(e,u,7),u+=3;else if(y==18)z=11+q5(e,u,127),u+=7;while(z--)E[w++]=H}}var Y=E.subarray(0,I),U=E.subarray(I);p=vwe(Y),g=vwe(U),A=qv(Y,p,1),m=qv(U,g,1)}else _y(1);if(u>_){if(c)_y(0);break}}if(a)l(h+131072);var X=(1<<p)-1,V=(1<<g)-1,W=u;for(;;W=u){var H=A[Ewe(e,u)&X],j=H>>4;if(u+=H&15,u>_){if(c)_y(0);break}if(!H)_y(2);if(j<256)n[h++]=j;else if(j==256){W=u,A=null;break}else{var q=j-254;if(j>264){var w=j-257,ne=O0e[w];q=q5(e,u,(1<<ne)-1)+xgt[w],u+=ne}var ce=m[Ewe(e,u)&V],oe=ce>>4;if(!ce)_y(3);u+=ce&15;var U=Glo[oe];if(oe>3){var ne=z0e[oe];U+=Ewe(e,u)&(1<<ne)-1,u+=ne}if(u>_){if(c)_y(0);break}if(a)l(h+131072);var ie=h+q;if(h<U){var J=r-U,ee=Math.min(U,ie);if(J+h<0)_y(3);for(;h<ee;++h)n[h]=o[J+h]}for(;h<ie;++h)n[h]=n[h-U]}}if(t.l=A,t.p=W,t.b=h,t.f=d,A)d=1,t.m=p,t.d=m,t.n=g}while(!d);return h!=n.length&&s?x$(n,0,h):n.subarray(0,h)},$M=function(e,t,n){n<<=t&7;var o=t/8|0;e[o]|=n,e[o+1]|=n>>8},f$=function(e,t,n){n<<=t&7;var o=t/8|0;e[o]|=n,e[o+1]|=n>>8,e[o+2]|=n>>16},Mwe=function(e,t){var n=[];for(var o=0;o<e.length;++o)if(e[o])n.push({s:o,f:e[o]});var i=n.length,r=n.slice();if(!i)return{t:Sgt,l:0};if(i==1){var s=new Rp(n[0].s+1);return s[n[0].s]=1,{t:s,l:1}}n.sort(function(C,I){return C.f-I.f}),n.push({s:-1,f:25001});var a=n[0],c=n[1],l=0,d=1,u=2;n[0]={s:-1,f:a.f+c.f,l:a,r:c};while(d!=i-1)a=n[n[l].f<n[u].f?l++:u++],c=n[l!=d&&n[l].f<n[u].f?l++:u++],n[d++]={s:-1,f:a.f+c.f,l:a,r:c};var h=r[0].s;for(var o=1;o<i;++o)if(r[o].s>h)h=r[o].s;var A=new lx(h+1),m=Nwe(n[d-1],A,0);if(m>t){var o=0,p=0,g=m-t,_=1<<g;r.sort(function(I,b){return A[b.s]-A[I.s]||I.f-b.f});for(;o<i;++o){var f=r[o].s;if(A[f]>t)p+=_-(1<<m-A[f]),A[f]=t;else break}p>>=g;while(p>0){var y=r[o].s;if(A[y]<t)p-=1<<t-A[y]++-1;else++o}for(;o>=0&&p;--o){var x=r[o].s;if(A[x]==t)--A[x],++p}m=t}return{t:new Rp(A),l:m}},Nwe=function(e,t,n){return e.s==-1?Math.max(Nwe(e.l,t,n+1),Nwe(e.r,t,n+1)):t[e.s]=n},_gt=function(e){var t=e.length;while(t&&!e[--t]);var n=new lx(++t),o=0,i=e[0],r=1,s=function(c){n[o++]=c};for(var a=1;a<=t;++a)if(e[a]==i&&a!=t)++r;else{if(!i&&r>2){for(;r>138;r-=138)s(32754);if(r>2)s(r>10?r-11<<5|28690:r-3<<5|12305),r=0}else if(r>3){s(i),--r;for(;r>6;r-=6)s(8304);if(r>2)s(r-3<<5|8208),r=0}while(r--)s(i);r=1,i=e[a]}return{c:n.subarray(0,o),n:t}},y$=function(e,t){var n=0;for(var o=0;o<t.length;++o)n+=e[o]*t[o];return n},bgt=function(e,t,n){var o=n.length,i=Qwe(t+2);e[i]=o&255,e[i+1]=o>>8,e[i+2]=e[i]^255,e[i+3]=e[i+1]^255;for(var r=0;r<o;++r)e[i+r+4]=n[r];return(i+4+o)*8},ggt=function(e,t,n,o,i,r,s,a,c,l,d){$M(t,d++,n),++i[256];var u=Mwe(i,15),{t:h,l:A}=u,m=Mwe(r,15),{t:p,l:g}=m,_=_gt(h),{c:f,n:y}=_,x=_gt(p),{c:C,n:I}=x,b=new lx(19);for(var P=0;P<f.length;++P)++b[f[P]&31];for(var P=0;P<C.length;++P)++b[C[P]&31];var E=Mwe(b,7),{t:B,l:w}=E,T=19;for(;T>4&&!B[wwe[T-1]];--T);var Q=l+5<<3,N=y$(i,G7)+y$(r,C$)+s,F=y$(i,h)+y$(r,p)+s+14+3*T+y$(b,B)+2*b[16]+3*b[17]+7*b[18];if(c>=0&&Q<=N&&Q<=F)return bgt(t,d,e.subarray(c,c+l));var H,z,Y,U;if($M(t,d,1+(F<N)),d+=2,F<N){H=qv(h,A,0),z=h,Y=qv(p,g,0),U=p;var X=qv(B,w,0);$M(t,d,y-257),$M(t,d+5,I-1),$M(t,d+10,T-4),d+=14;for(var P=0;P<T;++P)$M(t,d+3*P,B[wwe[P]]);d+=3*T;var V=[f,C];for(var W=0;W<2;++W){var j=V[W];for(var P=0;P<j.length;++P){var q=j[P]&31;if($M(t,d,X[q]),d+=B[q],q>15)$M(t,d,j[P]>>5&127),d+=j[P]>>12}}}else H=Ylo,z=G7,Y=Ulo,U=C$;for(var P=0;P<a;++P){var ne=o[P];if(ne>255){var q=ne>>18&31;if(f$(t,d,H[q+257]),d+=z[q+257],q>7)$M(t,d,ne>>23&31),d+=O0e[q];var ce=ne&31;if(f$(t,d,Y[ce]),d+=U[ce],ce>3)f$(t,d,ne>>5&8191),d+=z0e[ce]}else f$(t,d,H[ne]),d+=z[ne]}return f$(t,d,H[256]),d+z[256]},Klo=new Rwe([65540,131080,131088,131104,262176,1048704,1048832,2114560,2117632]),Sgt=new Rp(0),jlo=function(e,t,n,o,i,r){var s=r.z||e.length,a=new Rp(o+s+5*(1+Math.ceil(s/7000))+i),c=a.subarray(o,a.length-i),l=r.l,d=(r.r||0)&7;if(t){if(d)c[0]=r.r>>3;var u=Klo[t-1],h=u>>13,A=u&8191,m=(1<<n)-1,p=r.p||new lx(32768),g=r.h||new lx(m+1),_=Math.ceil(n/3),f=2*_,y=function(ue){return(e[ue]^e[ue+1]<<_^e[ue+2]<<f)&m},x=new Rwe(25000),C=new lx(288),I=new lx(32),b=0,P=0,E=r.i||0,B=0,w=r.w||0,T=0;for(;E+2<s;++E){var Q=y(E),N=E&32767,F=g[Q];if(p[N]=F,g[Q]=N,w<=E){var H=s-E;if((b>7000||B>24576)&&(H>423||!l)){d=ggt(e,c,0,x,C,I,P,B,T,E-T,d),B=b=P=0,T=E;for(var z=0;z<286;++z)C[z]=0;for(var z=0;z<30;++z)I[z]=0}var Y=2,U=0,X=A,V=N-F&32767;if(H>2&&Q==y(E-V)){var W=Math.min(h,H)-1,j=Math.min(32767,E),q=Math.min(258,H);while(V<=j&&--X&&N!=F){if(e[E+Y]==e[E+Y-V]){var ne=0;for(;ne<q&&e[E+ne]==e[E+ne-V];++ne);if(ne>Y){if(Y=ne,U=V,ne>W)break;var ce=Math.min(V,ne-2),oe=0;for(var z=0;z<ce;++z){var ie=E-V+z&32767,J=p[ie],ee=ie-J&32767;if(ee>oe)oe=ee,F=ie}}}N=F,F=p[N],V+=N-F&32767}}if(U){x[B++]=268435456|Twe[Y]<<18|Agt[U];var se=Twe[Y]&31,le=Agt[U]&31;P+=O0e[se]+z0e[le],++C[257+se],++I[le],w=E+Y,++b}else x[B++]=e[E],++C[e[E]]}}for(E=Math.max(E,w);E<s;++E)x[B++]=e[E],++C[e[E]];if(d=ggt(e,c,l,x,C,I,P,B,T,E-T,d),!l)r.r=d&7|c[d/8|0]<<3,d-=7,r.h=g,r.p=p,r.i=E,r.w=w}else{for(var E=r.w||0;E<s+l;E+=65535){var he=E+65535;if(he>=s)c[d/8|0]=l,he=s;d=bgt(c,d+1,e.subarray(E,he))}r.i=s}return x$(a,0,o+Qwe(d)+i)};var Pgt=function(){var e=1,t=0;return{p:function(n){var o=e,i=t,r=n.length|0;for(var s=0;s!=r;){var a=Math.min(s+2655,r);for(;s<a;++s)i+=o+=n[s];o=(o&65535)+15*(o>>16),i=(i&65535)+15*(i>>16)}e=o,t=i},d:function(){return e%=65521,t%=65521,(e&255)<<24|(e&65280)<<8|(t&255)<<8|t>>8}}},qlo=function(e,t,n,o,i){if(!i){if(i={l:1},t.dictionary){var r=t.dictionary.subarray(-32768),s=new Rp(r.length+e.length);s.set(r),s.set(e,r.length),e=s,i.w=r.length}}return jlo(e,t.level==null?6:t.level,t.mem==null?i.l?Math.ceil(Math.max(8,Math.min(13,Math.log(e.length)))*1.5):20:12+t.mem,n,o,i)};var vgt=function(e,t,n){for(;n;++t)e[t]=n,n>>>=8};var Jlo=function(e,t){var n=t.level,o=n==0?0:n<6?1:n==9?3:2;if(e[0]=120,e[1]=o<<6|(t.dictionary&&32),e[1]|=31-(e[0]<<8|e[1])%31,t.dictionary){var i=Pgt();i.p(t.dictionary),vgt(e,2,i.d())}},Egt=function(e,t){if((e[0]&15)!=8||e[0]>>4>7||(e[0]<<8|e[1])%31)_y(6,"invalid zlib data");if((e[1]>>5&1)==+!t)_y(6,"invalid zlib data: "+(e[1]&32?"need":"unexpected")+" dictionary");return(e[1]>>3&4)+2};var Bwe=function(){function e(t,n){if(typeof t=="function")n=t,t={};this.ondata=n;var o=t&&t.dictionary&&t.dictionary.subarray(-32768);if(this.s={i:0,b:o?o.length:0},this.o=new Rp(32768),this.p=new Rp(0),o)this.o.set(o)}return e.prototype.e=function(t){if(!this.ondata)_y(5);if(this.d)_y(4);if(!this.p.length)this.p=t;else if(t.length){var n=new Rp(this.p.length+t.length);n.set(this.p),n.set(t,this.p.length),this.p=n}},e.prototype.c=function(t){this.s.i=+(this.d=t||!1);var n=this.s.b,o=Igt(this.p,this.s,this.o);this.ondata(x$(o,n,this.s.b),this.d),this.o=x$(o,this.s.b-32768),this.s.b=this.o.length,this.p=x$(this.p,this.s.p/8|0),this.s.p&=7},e.prototype.push=function(t,n){this.e(t),this.c(n)},e}();function Mgt(e,t){if(!t)t={};var n=Pgt();n.p(e);var o=qlo(e,t,t.dictionary?6:2,4);return Jlo(o,t),vgt(o,o.length-4,n.d()),o}var kwe=function(){function e(t,n){Bwe.call(this,t,n),this.v=t&&t.dictionary?2:1}return e.prototype.push=function(t,n){if(Bwe.prototype.e.call(this,t),this.v){if(this.p.length<6&&!n)return;this.p=this.p.subarray(Egt(this.p,this.v-1)),this.v=0}if(n){if(this.p.length<4)_y(6,"invalid zlib data");this.p=this.p.subarray(0,-4)}Bwe.prototype.c.call(this,n)},e}();function Bgt(e,t){return Igt(e.subarray(Egt(e,t&&t.dictionary),-4),{i:2},t&&t.out,t&&t.dictionary)}var $lo=typeof TextDecoder<"u"&&new TextDecoder,Zlo=0;try{$lo.decode(Sgt,{stream:!0}),Zlo=1}catch(e){}function Lwe(e,t="utf8"){return new TextDecoder(t).decode(e)}var edo=new TextEncoder;function wgt(e){return edo.encode(e)}var tdo=8192,ndo=(()=>{let e=new Uint8Array(4),t=new Uint32Array(e.buffer);return!((t[0]=1)&e[0])})(),Fwe={int8:globalThis.Int8Array,uint8:globalThis.Uint8Array,int16:globalThis.Int16Array,uint16:globalThis.Uint16Array,int32:globalThis.Int32Array,uint32:globalThis.Uint32Array,uint64:globalThis.BigUint64Array,int64:globalThis.BigInt64Array,float32:globalThis.Float32Array,float64:globalThis.Float64Array};class wQ{buffer;byteLength;byteOffset;length;offset;lastWrittenByte;littleEndian;_data;_mark;_marks;constructor(e=tdo,t={}){let n=!1;if(typeof e==="number")e=new ArrayBuffer(e);else n=!0,this.lastWrittenByte=e.byteLength;let o=t.offset?t.offset>>>0:0,i=e.byteLength-o,r=o;if(ArrayBuffer.isView(e)||e instanceof wQ){if(e.byteLength!==e.buffer.byteLength)r=e.byteOffset+o;e=e.buffer}if(n)this.lastWrittenByte=i;else this.lastWrittenByte=0;this.buffer=e,this.length=i,this.byteLength=i,this.byteOffset=r,this.offset=0,this.littleEndian=!0,this._data=new DataView(this.buffer,r,i),this._mark=0,this._marks=[]}available(e=1){return this.offset+e<=this.length}isLittleEndian(){return this.littleEndian}setLittleEndian(){return this.littleEndian=!0,this}isBigEndian(){return!this.littleEndian}setBigEndian(){return this.littleEndian=!1,this}skip(e=1){return this.offset+=e,this}back(e=1){return this.offset-=e,this}seek(e){return this.offset=e,this}mark(){return this._mark=this.offset,this}reset(){return this.offset=this._mark,this}pushMark(){return this._marks.push(this.offset),this}popMark(){let e=this._marks.pop();if(e===void 0)throw Error("Mark stack empty");return this.seek(e),this}rewind(){return this.offset=0,this}ensureAvailable(e=1){if(!this.available(e)){let n=(this.offset+e)*2,o=new Uint8Array(n);o.set(new Uint8Array(this.buffer)),this.buffer=o.buffer,this.length=n,this.byteLength=n,this._data=new DataView(this.buffer)}return this}readBoolean(){return this.readUint8()!==0}readInt8(){return this._data.getInt8(this.offset++)}readUint8(){return this._data.getUint8(this.offset++)}readByte(){return this.readUint8()}readBytes(e=1){return this.readArray(e,"uint8")}readArray(e,t){let n=Fwe[t].BYTES_PER_ELEMENT*e,o=this.byteOffset+this.offset,i=this.buffer.slice(o,o+n);if(this.littleEndian===ndo&&t!=="uint8"&&t!=="int8"){let s=new Uint8Array(this.buffer.slice(o,o+n));s.reverse();let a=new Fwe[t](s.buffer);return this.offset+=n,a.reverse(),a}let r=new Fwe[t](i);return this.offset+=n,r}readInt16(){let e=this._data.getInt16(this.offset,this.littleEndian);return this.offset+=2,e}readUint16(){let e=this._data.getUint16(this.offset,this.littleEndian);return this.offset+=2,e}readInt32(){let e=this._data.getInt32(this.offset,this.littleEndian);return this.offset+=4,e}readUint32(){let e=this._data.getUint32(this.offset,this.littleEndian);return this.offset+=4,e}readFloat32(){let e=this._data.getFloat32(this.offset,this.littleEndian);return this.offset+=4,e}readFloat64(){let e=this._data.getFloat64(this.offset,this.littleEndian);return this.offset+=8,e}readBigInt64(){let e=this._data.getBigInt64(this.offset,this.littleEndian);return this.offset+=8,e}readBigUint64(){let e=this._data.getBigUint64(this.offset,this.littleEndian);return this.offset+=8,e}readChar(){return String.fromCharCode(this.readInt8())}readChars(e=1){let t="";for(let n=0;n<e;n++)t+=this.readChar();return t}readUtf8(e=1){return Lwe(this.readBytes(e))}decodeText(e=1,t="utf8"){return Lwe(this.readBytes(e),t)}writeBoolean(e){return this.writeUint8(e?255:0),this}writeInt8(e){return this.ensureAvailable(1),this._data.setInt8(this.offset++,e),this._updateLastWrittenByte(),this}writeUint8(e){return this.ensureAvailable(1),this._data.setUint8(this.offset++,e),this._updateLastWrittenByte(),this}writeByte(e){return this.writeUint8(e)}writeBytes(e){this.ensureAvailable(e.length);for(let t=0;t<e.length;t++)this._data.setUint8(this.offset++,e[t]);return this._updateLastWrittenByte(),this}writeInt16(e){return this.ensureAvailable(2),this._data.setInt16(this.offset,e,this.littleEndian),this.offset+=2,this._updateLastWrittenByte(),this}writeUint16(e){return this.ensureAvailable(2),this._data.setUint16(this.offset,e,this.littleEndian),this.offset+=2,this._updateLastWrittenByte(),this}writeInt32(e){return this.ensureAvailable(4),this._data.setInt32(this.offset,e,this.littleEndian),this.offset+=4,this._updateLastWrittenByte(),this}writeUint32(e){return this.ensureAvailable(4),this._data.setUint32(this.offset,e,this.littleEndian),this.offset+=4,this._updateLastWrittenByte(),this}writeFloat32(e){return this.ensureAvailable(4),this._data.setFloat32(this.offset,e,this.littleEndian),this.offset+=4,this._updateLastWrittenByte(),this}writeFloat64(e){return this.ensureAvailable(8),this._data.setFloat64(this.offset,e,this.littleEndian),this.offset+=8,this._updateLastWrittenByte(),this}writeBigInt64(e){return this.ensureAvailable(8),this._data.setBigInt64(this.offset,e,this.littleEndian),this.offset+=8,this._updateLastWrittenByte(),this}writeBigUint64(e){return this.ensureAvailable(8),this._data.setBigUint64(this.offset,e,this.littleEndian),this.offset+=8,this._updateLastWrittenByte(),this}writeChar(e){return this.writeUint8(e.charCodeAt(0))}writeChars(e){for(let t=0;t<e.length;t++)this.writeUint8(e.charCodeAt(t));return this}writeUtf8(e){return this.writeBytes(wgt(e))}toArray(){return new Uint8Array(this.buffer,this.byteOffset,this.lastWrittenByte)}getWrittenByteLength(){return this.lastWrittenByte-this.byteOffset}_updateLastWrittenByte(){if(this.offset>this.lastWrittenByte)this.lastWrittenByte=this.offset}}var Dgt=[];for(let e=0;e<256;e++){let t=e;for(let n=0;n<8;n++)if(t&1)t=3988292384^t>>>1;else t=t>>>1;Dgt[e]=t}var Tgt=4294967295;function odo(e,t,n){let o=e;for(let i=0;i<n;i++)o=Dgt[(o^t[i])&255]^o>>>8;return o}function Ngt(e,t){return(odo(Tgt,e,t)^Tgt)>>>0}function Hwe(e,t,n){let o=e.readUint32(),i=Ngt(new Uint8Array(e.buffer,e.byteOffset+e.offset-t-4,t),t);if(i!==o)throw Error(`CRC mismatch for chunk ${n}. Expected ${o}, found ${i}`)}function Y7(e,t){e.writeUint32(Ngt(new Uint8Array(e.buffer,e.byteOffset+e.offset-t,t),t))}function G0e(e,t,n){for(let o=0;o<n;o++)t[o]=e[o]}function Y0e(e,t,n,o){let i=0;for(;i<o;i++)t[i]=e[i];for(;i<n;i++)t[i]=e[i]+t[i-o]&255}function V0e(e,t,n,o){let i=0;if(n.length===0)for(;i<o;i++)t[i]=e[i];else for(;i<o;i++)t[i]=e[i]+n[i]&255}function U0e(e,t,n,o,i){let r=0;if(n.length===0){for(;r<i;r++)t[r]=e[r];for(;r<o;r++)t[r]=e[r]+(t[r-i]>>1)&255}else{for(;r<i;r++)t[r]=e[r]+(n[r]>>1)&255;for(;r<o;r++)t[r]=e[r]+(t[r-i]+n[r]>>1)&255}}function W0e(e,t,n,o,i){let r=0;if(n.length===0){for(;r<i;r++)t[r]=e[r];for(;r<o;r++)t[r]=e[r]+t[r-i]&255}else{for(;r<i;r++)t[r]=e[r]+n[r]&255;for(;r<o;r++)t[r]=e[r]+ido(t[r-i],n[r],n[r-i])&255}}function ido(e,t,n){let o=e+t-n,i=Math.abs(o-e),r=Math.abs(o-t),s=Math.abs(o-n);if(i<=r&&i<=s)return e;else if(r<=s)return t;else return n}function Rgt(e,t,n,o,i,r){switch(e){case 0:G0e(t,n,i);break;case 1:Y0e(t,n,i,r);break;case 2:V0e(t,n,o,i);break;case 3:U0e(t,n,o,i,r);break;case 4:W0e(t,n,o,i,r);break;default:throw Error(`Unsupported filter: ${e}`)}}var rdo=new Uint16Array([255]),sdo=new Uint8Array(rdo.buffer),ado=sdo[0]===255;function Qgt(e){let{data:t,width:n,height:o,channels:i,depth:r}=e,s=[{x:0,y:0,xStep:8,yStep:8},{x:4,y:0,xStep:8,yStep:8},{x:0,y:4,xStep:4,yStep:8},{x:2,y:0,xStep:4,yStep:4},{x:0,y:2,xStep:2,yStep:4},{x:1,y:0,xStep:2,yStep:2},{x:0,y:1,xStep:1,yStep:2}],a=Math.ceil(r/8)*i,c=new Uint8Array(o*n*a),l=0;for(let d=0;d<7;d++){let u=s[d],h=Math.ceil((n-u.x)/u.xStep),A=Math.ceil((o-u.y)/u.yStep);if(h<=0||A<=0)continue;let m=h*a,p=new Uint8Array(m);for(let g=0;g<A;g++){let _=t[l++],f=t.subarray(l,l+m);l+=m;let y=new Uint8Array(m);Rgt(_,f,y,p,m,a),p.set(y);for(let x=0;x<h;x++){let C=u.x+x*u.xStep,I=u.y+g*u.yStep;if(C>=n||I>=o)continue;for(let b=0;b<a;b++)c[(I*n+C)*a+b]=y[x*a+b]}}}if(r===16){let d=new Uint16Array(c.buffer);if(ado)for(let u=0;u<d.length;u++)d[u]=cdo(d[u]);return d}else return c}function cdo(e){return(e&255)<<8|e>>8&255}var ldo=new Uint16Array([255]),ddo=new Uint8Array(ldo.buffer),udo=ddo[0]===255,hdo=new Uint8Array(0);function Owe(e){let{data:t,width:n,height:o,channels:i,depth:r}=e,s=Math.ceil(r/8)*i,a=Math.ceil(r/8*i*n),c=new Uint8Array(o*a),l=hdo,d=0,u,h;for(let A=0;A<o;A++){switch(u=t.subarray(d+1,d+1+a),h=c.subarray(A*a,(A+1)*a),t[d]){case 0:G0e(u,h,a);break;case 1:Y0e(u,h,a,s);break;case 2:V0e(u,h,l,a);break;case 3:U0e(u,h,l,a,s);break;case 4:W0e(u,h,l,a,s);break;default:throw Error(`Unsupported filter: ${t[d]}`)}l=h,d+=a+1}if(r===16){let A=new Uint16Array(c.buffer);if(udo)for(let m=0;m<A.length;m++)A[m]=mdo(A[m]);return A}else return c}function mdo(e){return(e&255)<<8|e>>8&255}var I$=Uint8Array.of(137,80,78,71,13,10,26,10);function kgt(e){e.writeBytes(I$)}function zwe(e){if(!Lgt(e.readBytes(I$.length)))throw Error("wrong PNG signature")}function Lgt(e){if(e.length<I$.length)return!1;for(let t=0;t<I$.length;t++)if(e[t]!==I$[t])return!1;return!0}var Gwe="tEXt",Fgt=0,Hgt=new TextDecoder("latin1");function Ogt(e){if(zgt(e),e.length===0||e.length>79)throw Error("keyword length must be between 1 and 79")}var pdo=/^[\u0000-\u00FF]*$/;function zgt(e){if(!pdo.test(e))throw Error("invalid latin1 text")}function Ggt(e,t,n){let o=Ywe(t);e[o]=Ado(t,n-o.length-1)}function Ygt(e,t,n){Ogt(t),zgt(n);let o=t.length+1+n.length;e.writeUint32(o),e.writeChars(Gwe),e.writeChars(t),e.writeByte(Fgt),e.writeChars(n),Y7(e,o+4)}function Ywe(e){e.mark();while(e.readByte()!==Fgt);let t=e.offset;e.reset();let n=Hgt.decode(e.readBytes(t-e.offset-1));return e.skip(1),Ogt(n),n}function Ado(e,t){return Hgt.decode(e.readBytes(t))}var m0={UNKNOWN:-1,GREYSCALE:0,TRUECOLOUR:2,INDEXED_COLOUR:3,GREYSCALE_ALPHA:4,TRUECOLOUR_ALPHA:6},XG={UNKNOWN:-1,DEFLATE:0},b$={UNKNOWN:-1,ADAPTIVE:0},Jv={UNKNOWN:-1,NO_INTERLACE:0,ADAM7:1},S$={NONE:0,BACKGROUND:1,PREVIOUS:2},X0e={SOURCE:0,OVER:1};class K0e extends wQ{_checkCrc;_inflator;_png;_apng;_end;_hasPalette;_palette;_hasTransparency;_transparency;_compressionMethod;_filterMethod;_interlaceMethod;_colorType;_isAnimated;_numberOfFrames;_numberOfPlays;_frames;_writingDataChunks;_chunks;_inflatorResult;constructor(e,t={}){super(e);let{checkCrc:n=!1}=t;this._checkCrc=n,this._inflator=new kwe((o,i)=>{if(this._chunks.push(o),i){let r=this._chunks.reduce((a,c)=>a+c.length,0);this._inflatorResult=new Uint8Array(r);let s=0;for(let a of this._chunks)this._inflatorResult.set(a,s),s+=a.length;this._chunks=[]}}),this._chunks=[],this._png={width:-1,height:-1,channels:-1,data:new Uint8Array(0),depth:1,text:{}},this._apng={width:-1,height:-1,channels:-1,depth:1,numberOfFrames:1,numberOfPlays:0,text:{},frames:[]},this._end=!1,this._hasPalette=!1,this._palette=[],this._hasTransparency=!1,this._transparency=new Uint16Array(0),this._compressionMethod=XG.UNKNOWN,this._filterMethod=b$.UNKNOWN,this._interlaceMethod=Jv.UNKNOWN,this._colorType=m0.UNKNOWN,this._isAnimated=!1,this._numberOfFrames=1,this._numberOfPlays=0,this._frames=[],this._writingDataChunks=!1,this._inflatorResult=new Uint8Array(0),this.setBigEndian()}decode(){zwe(this);while(!this._end){let e=this.readUint32(),t=this.readChars(4);this.decodeChunk(e,t)}return this._inflator.push(new Uint8Array(0),!0),this.decodeImage(),this._png}decodeApng(){zwe(this);while(!this._end){let e=this.readUint32(),t=this.readChars(4);this.decodeApngChunk(e,t)}return this.decodeApngImage(),this._apng}decodeChunk(e,t){let n=this.offset;switch(t){case"IHDR":this.decodeIHDR();break;case"PLTE":this.decodePLTE(e);break;case"IDAT":this.decodeIDAT(e);break;case"IEND":this._end=!0;break;case"tRNS":this.decodetRNS(e);break;case"iCCP":this.decodeiCCP(e);break;case Gwe:Ggt(this._png.text,this,e);break;case"pHYs":this.decodepHYs();break;default:this.skip(e);break}if(this.offset-n!==e)throw Error(`Length mismatch while decoding chunk ${t}`);if(this._checkCrc)Hwe(this,e+4,t);else this.skip(4)}decodeApngChunk(e,t){let n=this.offset;if(t!=="fdAT"&&t!=="IDAT"&&this._writingDataChunks)this.pushDataToFrame();switch(t){case"acTL":this.decodeACTL();break;case"fcTL":this.decodeFCTL();break;case"fdAT":this.decodeFDAT(e);break;default:this.decodeChunk(e,t),this.offset=n+e;break}if(this.offset-n!==e)throw Error(`Length mismatch while decoding chunk ${t}`);if(this._checkCrc)Hwe(this,e+4,t);else this.skip(4)}decodeIHDR(){let e=this._png;e.width=this.readUint32(),e.height=this.readUint32(),e.depth=_do(this.readUint8());let t=this.readUint8();this._colorType=t;let n;switch(t){case m0.GREYSCALE:n=1;break;case m0.TRUECOLOUR:n=3;break;case m0.INDEXED_COLOUR:n=1;break;case m0.GREYSCALE_ALPHA:n=2;break;case m0.TRUECOLOUR_ALPHA:n=4;break;case m0.UNKNOWN:default:throw Error(`Unknown color type: ${t}`)}if(this._png.channels=n,this._compressionMethod=this.readUint8(),this._compressionMethod!==XG.DEFLATE)throw Error(`Unsupported compression method: ${this._compressionMethod}`);this._filterMethod=this.readUint8(),this._interlaceMethod=this.readUint8()}decodeACTL(){this._numberOfFrames=this.readUint32(),this._numberOfPlays=this.readUint32(),this._isAnimated=!0}decodeFCTL(){let e={sequenceNumber:this.readUint32(),width:this.readUint32(),height:this.readUint32(),xOffset:this.readUint32(),yOffset:this.readUint32(),delayNumber:this.readUint16(),delayDenominator:this.readUint16(),disposeOp:this.readUint8(),blendOp:this.readUint8(),data:new Uint8Array(0)};this._frames.push(e)}decodePLTE(e){if(e%3!==0)throw RangeError(`PLTE field length must be a multiple of 3. Got ${e}`);let t=e/3;this._hasPalette=!0;let n=[];this._palette=n;for(let o=0;o<t;o++)n.push([this.readUint8(),this.readUint8(),this.readUint8()])}decodeIDAT(e){this._writingDataChunks=!0;let t=e,n=this.offset+this.byteOffset;try{this._inflator.push(new Uint8Array(this.buffer,n,t),!1)}catch(o){throw Error("Error while decompressing the data:",{cause:o})}this.skip(e)}decodeFDAT(e){this._writingDataChunks=!0;let t=e,n=this.offset+this.byteOffset;n+=4,t-=4;try{this._inflator.push(new Uint8Array(this.buffer,n,t),!1)}catch(o){throw Error("Error while decompressing the data:",{cause:o})}this.skip(e)}decodetRNS(e){switch(this._colorType){case m0.GREYSCALE:case m0.TRUECOLOUR:{if(e%2!==0)throw RangeError(`tRNS chunk length must be a multiple of 2. Got ${e}`);if(e/2>this._png.width*this._png.height)throw Error(`tRNS chunk contains more alpha values than there are pixels (${e/2} vs ${this._png.width*this._png.height})`);this._hasTransparency=!0,this._transparency=new Uint16Array(e/2);for(let t=0;t<e/2;t++)this._transparency[t]=this.readUint16();break}case m0.INDEXED_COLOUR:{if(e>this._palette.length)throw Error(`tRNS chunk contains more alpha values than there are palette colors (${e} vs ${this._palette.length})`);let t=0;for(;t<e;t++){let n=this.readByte();this._palette[t].push(n)}for(;t<this._palette.length;t++)this._palette[t].push(255);break}case m0.UNKNOWN:case m0.GREYSCALE_ALPHA:case m0.TRUECOLOUR_ALPHA:default:throw Error(`tRNS chunk is not supported for color type ${this._colorType}`)}}decodeiCCP(e){let t=Ywe(this),n=this.readUint8();if(n!==XG.DEFLATE)throw Error(`Unsupported iCCP compression method: ${n}`);let o=this.readBytes(e-t.length-2);this._png.iccEmbeddedProfile={name:t,profile:Bgt(o)}}decodepHYs(){let e=this.readUint32(),t=this.readUint32(),n=this.readByte();this._png.resolution={x:e,y:t,unit:n}}decodeApngImage(){this._apng.width=this._png.width,this._apng.height=this._png.height,this._apng.channels=this._png.channels,this._apng.depth=this._png.depth,this._apng.numberOfFrames=this._numberOfFrames,this._apng.numberOfPlays=this._numberOfPlays,this._apng.text=this._png.text,this._apng.resolution=this._png.resolution;for(let e=0;e<this._numberOfFrames;e++){let t={sequenceNumber:this._frames[e].sequenceNumber,delayNumber:this._frames[e].delayNumber,delayDenominator:this._frames[e].delayDenominator,data:this._apng.depth===8?new Uint8Array(this._apng.width*this._apng.height*this._apng.channels):new Uint16Array(this._apng.width*this._apng.height*this._apng.channels)},n=this._frames.at(e);if(n){if(n.data=Owe({data:n.data,width:n.width,height:n.height,channels:this._apng.channels,depth:this._apng.depth}),this._hasPalette)this._apng.palette=this._palette;if(this._hasTransparency)this._apng.transparency=this._transparency;if(e===0||n.xOffset===0&&n.yOffset===0&&n.width===this._png.width&&n.height===this._png.height)t.data=n.data;else{let o=this._apng.frames.at(e-1);this.disposeFrame(n,o,t),this.addFrameDataToCanvas(t,n)}this._apng.frames.push(t)}}return this._apng}disposeFrame(e,t,n){switch(e.disposeOp){case S$.NONE:break;case S$.BACKGROUND:for(let o=0;o<this._png.height;o++)for(let i=0;i<this._png.width;i++){let r=(o*e.width+i)*this._png.channels;for(let s=0;s<this._png.channels;s++)n.data[r+s]=0}break;case S$.PREVIOUS:n.data.set(t.data);break;default:throw Error("Unknown disposeOp")}}addFrameDataToCanvas(e,t){let n=1<<this._png.depth,o=(i,r)=>{let s=((i+t.yOffset)*this._png.width+t.xOffset+r)*this._png.channels,a=(i*t.width+r)*this._png.channels;return{index:s,frameIndex:a}};switch(t.blendOp){case X0e.SOURCE:for(let i=0;i<t.height;i++)for(let r=0;r<t.width;r++){let{index:s,frameIndex:a}=o(i,r);for(let c=0;c<this._png.channels;c++)e.data[s+c]=t.data[a+c]}break;case X0e.OVER:for(let i=0;i<t.height;i++)for(let r=0;r<t.width;r++){let{index:s,frameIndex:a}=o(i,r);for(let c=0;c<this._png.channels;c++){let l=t.data[a+this._png.channels-1]/n,d=c%(this._png.channels-1)===0?1:t.data[a+c],u=Math.floor(l*d+(1-l)*e.data[s+c]);e.data[s+c]+=u}}break;default:throw Error("Unknown blendOp")}}decodeImage(){let e=this._inflatorResult;if(this._filterMethod!==b$.ADAPTIVE)throw Error(`Filter method ${this._filterMethod} not supported`);if(this._interlaceMethod===Jv.NO_INTERLACE)this._png.data=Owe({data:e,width:this._png.width,height:this._png.height,channels:this._png.channels,depth:this._png.depth});else if(this._interlaceMethod===Jv.ADAM7)this._png.data=Qgt({data:e,width:this._png.width,height:this._png.height,channels:this._png.channels,depth:this._png.depth});else throw Error(`Interlace method ${this._interlaceMethod} not supported`);if(this._hasPalette)this._png.palette=this._palette;if(this._hasTransparency)this._png.transparency=this._transparency}pushDataToFrame(){this._inflator.push(new Uint8Array(0),!0);let e=this._inflatorResult,t=this._frames.at(-1);if(t)t.data=e;else this._frames.push({sequenceNumber:0,width:this._png.width,height:this._png.height,xOffset:0,yOffset:0,delayNumber:0,delayDenominator:0,disposeOp:S$.NONE,blendOp:X0e.SOURCE,data:e});this._inflator=new kwe((n,o)=>{if(this._chunks.push(n),o){let i=this._chunks.reduce((s,a)=>s+a.length,0);this._inflatorResult=new Uint8Array(i);let r=0;for(let s of this._chunks)this._inflatorResult.set(s,r),r+=s.length;this._chunks=[]}}),this._chunks=[],this._writingDataChunks=!1}}function _do(e){if(e!==1&&e!==2&&e!==4&&e!==8&&e!==16)throw Error(`invalid bit depth: ${e}`);return e}var gdo={level:3};class j0e extends wQ{_png;_zlibOptions;_colorType;_interlaceMethod;constructor(e,t={}){super();this._colorType=m0.UNKNOWN,this._zlibOptions={...gdo,...t.zlib},this._png=this._checkData(e),this._interlaceMethod=(t.interlace==="Adam7"?Jv.ADAM7:Jv.NO_INTERLACE)??Jv.NO_INTERLACE,this.setBigEndian()}encode(){if(kgt(this),this.encodeIHDR(),this._png.palette){if(this.encodePLTE(),this._png.palette[0].length===4)this.encodeTRNS()}if(this.encodeData(),this._png.text)for(let[e,t]of Object.entries(this._png.text))Ygt(this,e,t);return this.encodeIEND(),this.toArray()}encodeIHDR(){this.writeUint32(13),this.writeChars("IHDR"),this.writeUint32(this._png.width),this.writeUint32(this._png.height),this.writeByte(this._png.depth),this.writeByte(this._colorType),this.writeByte(XG.DEFLATE),this.writeByte(b$.ADAPTIVE),this.writeByte(this._interlaceMethod),Y7(this,17)}encodeIEND(){this.writeUint32(0),this.writeChars("IEND"),Y7(this,4)}encodePLTE(){let e=this._png.palette?.length*3;this.writeUint32(e),this.writeChars("PLTE");for(let t of this._png.palette)this.writeByte(t[0]),this.writeByte(t[1]),this.writeByte(t[2]);Y7(this,4+e)}encodeTRNS(){let e=this._png.palette.filter((t)=>t.at(-1)!==255);this.writeUint32(e.length),this.writeChars("tRNS");for(let t of e)this.writeByte(t.at(-1));Y7(this,4+e.length)}encodeIDAT(e){this.writeUint32(e.length),this.writeChars("IDAT"),this.writeBytes(e),Y7(this,e.length+4)}encodeData(){let{width:e,height:t,channels:n,depth:o,data:i}=this._png,r=o<=8?Math.ceil(e*o/8)*n:Math.ceil(e*o/8*n/2),s=new wQ().setBigEndian(),a=0;if(this._interlaceMethod===Jv.NO_INTERLACE)for(let d=0;d<t;d++)if(s.writeByte(0),o===16)a=Cdo(i,s,r,a);else a=ydo(i,s,r,a);else if(this._interlaceMethod===Jv.ADAM7)a=xdo(this._png,i,s,a);let c=s.toArray(),l=Mgt(c,this._zlibOptions);this.encodeIDAT(l)}_checkData(e){let{colorType:t,channels:n,depth:o}=fdo(e,e.palette),i={width:Vgt(e.width,"width"),height:Vgt(e.height,"height"),channels:n,data:e.data,depth:o,text:e.text,palette:e.palette};this._colorType=t;let r=o<8?Math.ceil(i.width*o/8)*i.height*n:i.width*i.height*n;if(i.data.length!==r)throw RangeError(`wrong data size. Found ${i.data.length}, expected ${r}`);return i}}function Vgt(e,t){if(Number.isInteger(e)&&e>0)return e;throw TypeError(`${t} must be a positive integer`)}function fdo(e,t){let{channels:n=4,depth:o=8}=e;if(n!==4&&n!==3&&n!==2&&n!==1)throw RangeError(`unsupported number of channels: ${n}`);let i={channels:n,depth:o,colorType:m0.UNKNOWN};switch(n){case 4:i.colorType=m0.TRUECOLOUR_ALPHA;break;case 3:i.colorType=m0.TRUECOLOUR;break;case 1:if(t)i.colorType=m0.INDEXED_COLOUR;else i.colorType=m0.GREYSCALE;break;case 2:i.colorType=m0.GREYSCALE_ALPHA;break;default:throw Error("unsupported number of channels")}return i}function ydo(e,t,n,o){for(let i=0;i<n;i++)t.writeByte(e[o++]);return o}function xdo(e,t,n,o){let i=[{x:0,y:0,xStep:8,yStep:8},{x:4,y:0,xStep:8,yStep:8},{x:0,y:4,xStep:4,yStep:8},{x:2,y:0,xStep:4,yStep:4},{x:0,y:2,xStep:2,yStep:4},{x:1,y:0,xStep:2,yStep:2},{x:0,y:1,xStep:1,yStep:2}],{width:r,height:s,channels:a,depth:c}=e,l;if(c===16)l=a*c/8/2;else l=a*c/8;for(let d=0;d<7;d++){let u=i[d],h=Math.floor((r-u.x+u.xStep-1)/u.xStep),A=Math.floor((s-u.y+u.yStep-1)/u.yStep);if(h<=0||A<=0)continue;let m=h*l;for(let p=0;p<A;p++){let g=u.y+p*u.yStep,_=c<=8?new Uint8Array(m):new Uint16Array(m),f=0;for(let y=0;y<h;y++){let x=u.x+y*u.xStep;if(x<r&&g<s){let C=(g*r+x)*l;for(let I=0;I<l;I++)_[f++]=t[C+I]}}if(n.writeByte(0),c===8)n.writeBytes(_);else if(c===16)for(let y of _)n.writeByte(y>>8&255),n.writeByte(y&255)}}return o}function Cdo(e,t,n,o){for(let i=0;i<n;i++)t.writeUint16(e[o++]);return o}function Ugt(e,t){return new K0e(e,t).decode()}function Vwe(e,t){return new j0e(e,t).encode()}var Wgt={"0":"M0.301025 0.257813 L0.206593 0.283385 L0.122042 0.361307 L0.075923 0.474441 L0.064942 0.642221 L0.091296 0.78289 L0.159376 0.899463 L0.257104 0.961214 L0.344948 0.961214 L0.442678 0.899463 L0.510757 0.78289 L0.537111 0.642221 L0.526131 0.474441 L0.480012 0.361307 L0.39546 0.283385 L0.301025 0.257813","1":"M0.220426 0.40845 L0.381626 0.270996 L0.381626 0.948966","2":"M0.110409 0.39212 L0.125621 0.342293 L0.170571 0.295823 L0.244237 0.26431 L0.291518 0.257813 L0.373319 0.263799 L0.434683 0.290705 L0.468239 0.331966 L0.480292 0.379913 L0.479492 0.411806 L0.465088 0.465192 L0.402571 0.568988 L0.245134 0.766438 L0.07959 0.948045 L0.522462 0.948045","3":"M0.081606 0.345073 L0.119154 0.315633 L0.178996 0.284091 L0.255265 0.257813 L0.349133 0.263062 L0.43127 0.289348 L0.48994 0.336662 L0.525141 0.394491 L0.513407 0.457577 L0.466472 0.504892 L0.384334 0.541692 L0.290464 0.56272 L0.20833 0.573235 L0.290464 0.583749 L0.384334 0.610035 L0.466472 0.652092 L0.519274 0.709922 L0.531007 0.773007 L0.50754 0.841351 L0.454738 0.899179 L0.3726 0.946494 L0.310412 0.961214 L0.209503 0.959111 L0.127367 0.946494 L0.071046 0.929671","4":"M0.418494 0.270996 L0.048828 0.724199 L0.553224 0.724199 M0.414181 0.578167 L0.414181 0.94897","5":"M0.074951 0.270996 L0.074951 0.614701 L0.267655 0.5695 L0.405247 0.586502 L0.460002 0.617189 L0.498028 0.660731 L0.527101 0.779401 L0.513352 0.841049 L0.477274 0.889568 L0.406378 0.93463 L0.324445 0.958337 L0.247399 0.962139 L0.182516 0.949767 L0.130068 0.925508 L0.074951 0.875607 M0.074951 0.270996 L0.527101 0.270996","6":"M0.428549 0.257813 L0.341433 0.285053 L0.26073 0.312099 L0.192188 0.360182 L0.138902 0.410969 L0.098219 0.500422 L0.070249 0.584267 L0.067264 0.670716 L0.065164 0.756863 L0.087163 0.820973 L0.108168 0.861042 L0.157916 0.913131 L0.210981 0.948192 L0.29279 0.961214 L0.384548 0.956206 L0.456409 0.924151 L0.507262 0.881077 L0.5349 0.821975 L0.537111 0.771889 L0.521634 0.718798 L0.498418 0.67372 L0.463042 0.636657 L0.414398 0.613617 L0.34696 0.598591 L0.28284 0.595587 L0.215403 0.605604 L0.145756 0.641665 L0.109274 0.678729 L0.064942 0.724006","7":"M0.071534 0.270996 L0.530519 0.270996 L0.495935 0.291702 L0.477752 0.305407 L0.435186 0.346112 L0.412067 0.374136 L0.388565 0.40796 L0.365315 0.448098 L0.342943 0.495062 L0.322081 0.549366 L0.303364 0.611524 L0.287416 0.68205 L0.270077 0.80465 L0.26253 0.94897","8":"M0.286761 0.257813 L0.210684 0.27162 L0.1414 0.305622 L0.092494 0.382125 L0.111513 0.450128 L0.16857 0.502193 L0.228345 0.539382 L0.377781 0.594635 L0.470161 0.645637 L0.52586 0.706203 L0.538087 0.792269 L0.506841 0.87621 L0.438915 0.927212 L0.339743 0.961214 L0.263666 0.959089 L0.174004 0.929337 L0.102003 0.881523 L0.063965 0.811395 L0.066682 0.741266 L0.102003 0.671139 L0.180797 0.608448 L0.259591 0.580822 L0.358762 0.548945 L0.456576 0.49688 L0.486463 0.446941 L0.487822 0.362999 L0.453859 0.302434 L0.384574 0.265245 L0.286761 0.257813","9":"M0.511026 0.437812 L0.491026 0.347812 L0.451026 0.297812 L0.391026 0.267812 L0.311026 0.257813 L0.231026 0.267812 L0.161026 0.297812 L0.111026 0.347812 L0.091026 0.417812 L0.111026 0.487812 L0.161026 0.537812 L0.231026 0.567812 L0.311026 0.577812 L0.391026 0.557812 L0.451026 0.517812 L0.491026 0.477812 L0.511026 0.437812 M0.510026 0.438812 L0.434026 0.636812 L0.381026 0.777812 L0.337026 0.879812 L0.301026 0.957812","!":"M0.301026 0.270996 L0.301026 0.749566 M0.251466 0.94897 L0.350587 0.94897",'"':"M0.16504 0.270996 L0.16504 0.523022 M0.437013 0.270996 L0.437013 0.523022","#":"M0.20958 0.282227 L0.146515 0.949754 M0.461844 0.282227 L0.398779 0.949754 M0.032999 0.526969 L0.600587 0.452796 M0.001465 0.82366 L0.569055 0.749486",$:"M0.307121 0.240234 L0.307121 1.083502 M0.490031 0.415915 L0.404676 0.328075 L0.23396 0.310507 L0.136407 0.398347 L0.099828 0.521324 L0.124213 0.591596 L0.197379 0.644299 L0.429061 0.697003 L0.502224 0.749708 L0.526613 0.837547 L0.477836 0.960526 L0.355897 1.013228 L0.197379 0.99566 L0.112021 0.942957 L0.07544 0.837547","'":"M0.301026 0.270996 L0.301026 0.523022","(":"M0.413087 0.241211 L0.372337 0.28347 L0.331589 0.334184 L0.290838 0.393349 L0.25009 0.460965 L0.219528 0.528584 L0.199153 0.5962 L0.188966 0.655364 L0.199153 0.714529 L0.219528 0.782146 L0.25009 0.849764 L0.290838 0.91738 L0.331589 0.976544 L0.372337 1.027258 L0.413087 1.069491",")":"M0.188966 0.241211 L0.229716 0.28347 L0.270466 0.334184 L0.311213 0.393349 L0.351964 0.460965 L0.382526 0.528584 L0.4029 0.5962 L0.413087 0.655364 L0.4029 0.714529 L0.382526 0.782146 L0.351964 0.849764 L0.311213 0.91738 L0.270466 0.976544 L0.229716 1.027258 L0.188966 1.069491","*":"M0.301026 0.458702 L0.301026 0.681942 M0.301026 0.458702 L0.520997 0.536834 M0.301026 0.458702 L0.439954 0.257813 M0.301026 0.458702 L0.162098 0.257813 M0.301026 0.458702 L0.081055 0.536834","+":"M0.042969 0.66845 L0.559083 0.66845 M0.301023 0.428223 L0.301023 0.908661",",":"M0.38672 0.852051 L0.215333 1.030661 L0.301025 1.119971","-":"M0.173829 0.686035 L0.428224 0.686035",".":"M0.362549 0.851074 L0.239503 0.851074","/":"M0.062501 1.035249 L0.539551 0.270996","<":"M0.559083 0.441895 L0.042969 0.66939 L0.042969 0.66939 L0.559083 0.896902","=":"M0.042969 0.545898 L0.559083 0.545898 M0.042969 0.80837 L0.559083 0.80837",">":"M0.042969 0.441895 L0.559083 0.66939 L0.559083 0.66939 L0.042969 0.896902",A:"M0.018067 0.94897 L0.290179 0.270996 L0.583986 0.94897 M0.155303 0.684521 L0.433548 0.684521",B:"M0.063965 0.94897 L0.063965 0.278953 L0.209356 0.270996 L0.342486 0.294394 L0.432179 0.37292 L0.418224 0.48773 L0.312686 0.549166 L0.084728 0.575531 L0.306377 0.589434 L0.468877 0.647456 L0.538087 0.736658 L0.5324 0.85202 L0.501247 0.902983 L0.42355 0.944398 L0.063965 0.94897",C:"M0.529054 0.419847 L0.498425 0.345196 L0.442238 0.292341 L0.33583 0.257813 L0.257199 0.268357 L0.187906 0.303748 L0.120243 0.385432 L0.072998 0.599844 L0.110073 0.815385 L0.165381 0.902183 L0.222883 0.942801 L0.334904 0.961214 L0.43253 0.937679 L0.504816 0.868999 L0.529054 0.772065",D:"M0.064454 0.94897 L0.071838 0.285078 L0.171217 0.270996 L0.247348 0.272633 L0.37101 0.306078 L0.462461 0.378304 L0.514748 0.475555 L0.535591 0.576392 L0.537599 0.652313 L0.528065 0.717381 L0.508562 0.772419 L0.445948 0.855695 L0.362356 0.90871 L0.225203 0.945862 L0.064454 0.94897",E:"M0.080078 0.270996 L0.080078 0.94897 M0.080078 0.270996 L0.521974 0.270996 M0.080078 0.609981 L0.389405 0.609981 M0.080078 0.94897 L0.521974 0.94897",F:"M0.086426 0.270996 L0.086426 0.94897 M0.091304 0.275607 L0.515626 0.275607 M0.091304 0.607677 L0.447344 0.607677",G:"M0.498034 0.284943 L0.374621 0.257813 L0.244219 0.268648 L0.160577 0.311997 L0.094556 0.398116 L0.056397 0.58404 L0.076752 0.785532 L0.120865 0.858197 L0.188947 0.916734 L0.271008 0.953591 L0.357069 0.961214 L0.43715 0.932047 L0.501262 0.858539 L0.545656 0.648611 L0.329595 0.648131",H:"M0.066895 0.270996 L0.066895 0.94897 M0.066895 0.595658 L0.530009 0.595658 M0.535157 0.270996 L0.535157 0.94897",I:"M0.301026 0.270996 L0.301026 0.94897",J:"M0.506839 0.270996 L0.507814 0.782193 L0.498468 0.846168 L0.480733 0.880789 L0.455864 0.90832 L0.426095 0.929408 L0.360746 0.954812 L0.302508 0.962139 L0.223573 0.953638 L0.16538 0.930312 L0.137072 0.907715 L0.116428 0.880312 L0.102822 0.848819 L0.095633 0.813947 L0.094239 0.776413",K:"M0.035401 0.270996 L0.035401 0.94897 M0.502258 0.316194 L0.035401 0.687823 M0.212484 0.582361 L0.566652 0.933903",L:"M0.07544 0.270996 L0.07544 0.94897 L0.526613 0.94897",M:"M0.042481 0.94897 L0.042481 0.270996 L0.301027 0.712492 L0.559571 0.270996 L0.559571 0.94897",N:"M0.067871 0.94897 L0.067871 0.270996 L0.534181 0.94897 L0.525031 0.270996",O:"M0.287293 0.961214 L0.19843 0.933567 L0.1172 0.849451 L0.057129 0.563945 L0.114348 0.350255 L0.18455 0.289392 L0.306101 0.257813 L0.42054 0.29572 L0.487543 0.365003 L0.544923 0.625294 L0.516366 0.789624 L0.465476 0.884596 L0.375084 0.949287 L0.287293 0.961214",P:"M0.070557 0.94897 L0.070557 0.28379 L0.20704 0.270996 L0.329134 0.278993 L0.408525 0.300514 L0.444022 0.317908 L0.500637 0.368929 L0.525796 0.423728 L0.531496 0.50384 L0.508934 0.554205 L0.473724 0.582043 L0.417577 0.604365 L0.336375 0.620372 L0.226014 0.629268 L0.082368 0.630258",Q:"M0.282435 1.050813 L0.195447 1.019646 L0.115933 0.924817 L0.057129 0.602943 L0.113139 0.362034 L0.18186 0.293418 L0.300844 0.257813 L0.412868 0.300553 L0.478457 0.37866 L0.534625 0.672103 L0.506671 0.857367 L0.456855 0.964437 L0.368371 1.037368 L0.282435 1.050813 M0.341225 0.815559 L0.544923 1.070653",R:"M0.034912 0.944112 L0.034912 0.288556 L0.227127 0.270996 L0.362038 0.276867 L0.443423 0.294907 L0.477644 0.309614 L0.505809 0.328757 L0.526616 0.352817 L0.544963 0.418061 L0.543241 0.475921 L0.524463 0.517817 L0.49076 0.546518 L0.444265 0.564799 L0.355195 0.578739 L0.047653 0.589627 M0.303054 0.617306 L0.56714 0.94897",S:"M0.483037 0.364333 L0.407613 0.267477 L0.22883 0.257813 L0.128623 0.327565 L0.087712 0.455539 L0.104656 0.518727 L0.168054 0.573307 L0.41928 0.617318 L0.503796 0.669342 L0.535157 0.759324 L0.493846 0.900055 L0.367668 0.961214 L0.205436 0.956661 L0.116711 0.907038 L0.066895 0.790334",T:"M0.022949 0.270996 L0.579103 0.270996 M0.309284 0.270996 L0.309284 0.94897",U:"M0.072022 0.270996 L0.07308 0.648875 L0.080372 0.75167 L0.099024 0.827813 L0.134786 0.885729 L0.181571 0.924023 L0.251464 0.95168 L0.339655 0.962139 L0.401553 0.951668 L0.45232 0.924086 L0.482701 0.891771 L0.495745 0.870529 L0.515699 0.81637 L0.525014 0.744626 L0.530031 0.272017",V:"M0.027832 0.270996 L0.320083 0.94897 L0.57422 0.270996",W:"M0 0.270996 L0.079799 0.940377 L0.285198 0.472884 L0.505255 0.94897 L0.602052 0.270996",X:"M0.009034 0.270996 L0.586805 0.94897 M0.593019 0.270996 L0.015246 0.94897",Y:"M0.018067 0.270996 L0.293132 0.574135 M0.583986 0.271959 L0.294954 0.57606 L0.305277 0.94897",Z:"M0.053711 0.270996 L0.548341 0.270996 L0.053711 0.94897 L0.548341 0.94897","[":"M0.404542 0.240234 L0.197511 0.240234 L0.197511 1.069424 L0.404542 1.069424","\\":"M0.062501 0.270996 L0.539551 1.035249","]":"M0.19751 0.240234 L0.404542 0.240234 L0.404542 1.069424 L0.19751 1.069424","^":"M0.035156 0.523931 L0.301024 0.270996 L0.566896 0.523931",_:"M0 1.160601 L0.602052 1.160601",a:"M0.527101 0.439941 L0.527101 0.973965 M0.527101 0.553824 L0.451366 0.477535 L0.376759 0.439941 L0.263722 0.439941 L0.187989 0.477535 L0.112255 0.553824 L0.074951 0.66881 L0.074951 0.745099 L0.112255 0.85898 L0.187989 0.93527 L0.263722 0.973965 L0.376759 0.973965 L0.451366 0.93527 L0.527101 0.85898",b:"M0.07666 0.240234 L0.07666 0.959985 M0.07666 0.582737 L0.151822 0.514237 L0.225865 0.480483 L0.338045 0.480483 L0.413211 0.514237 L0.488374 0.582737 L0.525392 0.685983 L0.525392 0.754485 L0.488374 0.856739 L0.413211 0.92524 L0.338045 0.959985 L0.225865 0.959985 L0.151822 0.92524 L0.07666 0.856739",c:"M0.512452 0.553823 L0.441624 0.477535 L0.371854 0.439941 L0.26614 0.439941 L0.195312 0.477535 L0.124486 0.553823 L0.0896 0.668808 L0.0896 0.745099 L0.124486 0.858979 L0.195312 0.93527 L0.26614 0.973965 L0.371854 0.973965 L0.441624 0.93527 L0.512452 0.858979",d:"M0.525392 0.240234 L0.525392 0.959985 M0.525392 0.582737 L0.450232 0.514237 L0.376189 0.480483 L0.264006 0.480483 L0.188844 0.514237 L0.11368 0.582737 L0.076661 0.685983 L0.076661 0.754485 L0.11368 0.856739 L0.188844 0.92524 L0.264006 0.959985 L0.376189 0.959985 L0.450232 0.92524 L0.525392 0.856739",e:"M0.059571 0.668808 L0.542482 0.668808 M0.542482 0.592521 L0.502641 0.516231 L0.461594 0.477535 L0.381914 0.439941 L0.261186 0.439941 L0.180299 0.477535 L0.099412 0.553823 L0.059571 0.668808 L0.059571 0.745099 L0.099412 0.858979 L0.180299 0.93527 L0.261186 0.973965 L0.381914 0.973965 L0.461594 0.93527 L0.542482 0.858979",f:"M0.512941 0.240234 L0.406984 0.240234 L0.301026 0.274346 L0.248047 0.374731 L0.248047 0.946817 M0.089112 0.476088 L0.459965 0.476088",g:"M0.525392 0.439941 L0.525392 0.989395 L0.488373 1.091918 L0.45023 1.126757 L0.376189 1.160601 L0.264004 1.160601 L0.188844 1.126757 L0.113681 1.058075 L0.076661 0.954555 M0.525392 0.542467 L0.45023 0.473786 L0.376189 0.439941 L0.264004 0.439941 L0.188844 0.473786 L0.113681 0.542467 L0.076661 0.645988 L0.076661 0.714669 L0.113681 0.817193 L0.188844 0.885875 L0.264004 0.920713 L0.376189 0.920713 L0.45023 0.885875 L0.525392 0.817193",h:"M0.092041 0.240234 L0.092041 0.946817 M0.092041 0.61058 L0.205937 0.509225 L0.282214 0.476086 L0.396109 0.476086 L0.47187 0.509225 L0.510011 0.61058 L0.510011 0.946817",i:"M0.261026 0.240234 L0.341026 0.240234 M0.300978 0.476089 L0.300978 0.946817",j:"M0.3853 0.240234 L0.447023 0.240234 M0.416159 0.465708 L0.416159 1.011689 L0.383887 1.108586 L0.252832 1.140264 L0.15503 1.108586",k:"M0.065186 0.240234 L0.065186 0.946817 M0.493824 0.476086 L0.065186 0.812323 M0.236758 0.677829 L0.536867 0.946817",l:"M0.301026 0.234863 L0.301026 0.946441",m:"M0.050538 0.439941 L0.050538 0.960796 M0.050538 0.588758 L0.114405 0.476607 L0.157178 0.439941 L0.236864 0.439941 L0.279637 0.476607 L0.32241 0.588758 L0.32241 0.960796 M0.32241 0.588758 L0.386281 0.476607 L0.428467 0.439941 L0.50874 0.439941 L0.551515 0.476607 L0.551515 0.960796",n:"M0.092041 0.439941 L0.092041 0.960796 M0.092041 0.588758 L0.205936 0.476607 L0.282216 0.439941 L0.396113 0.439941 L0.471871 0.476607 L0.510011 0.588758 L0.510011 0.960796",o:"M0.247175 0.439941 L0.175178 0.477535 L0.103186 0.553823 L0.066895 0.668808 L0.066895 0.745099 L0.103186 0.858979 L0.175178 0.93527 L0.247175 0.973965 L0.354874 0.973965 L0.426872 0.93527 L0.498866 0.858979 L0.535157 0.745099 L0.535157 0.668808 L0.498866 0.553823 L0.426872 0.477535 L0.354874 0.439941 L0.247175 0.439941",p:"M0.076904 0.439941 L0.076904 1.154244 M0.076904 0.541563 L0.151986 0.473487 L0.225944 0.439941 L0.338005 0.439941 L0.413087 0.473487 L0.488166 0.541563 L0.525148 0.644169 L0.525148 0.712246 L0.488166 0.813866 L0.413087 0.881942 L0.338005 0.916471 L0.225944 0.916471 L0.151986 0.881942 L0.076904 0.813866",q:"M0.525148 0.441895 L0.525148 1.156195 M0.525148 0.5435 L0.450067 0.47544 L0.376106 0.441895 L0.264042 0.441895 L0.188966 0.47544 L0.113885 0.5435 L0.076905 0.646108 L0.076905 0.714187 L0.113885 0.815809 L0.188966 0.883886 L0.264042 0.918418 L0.376106 0.918418 L0.450067 0.883886 L0.525148 0.815809",r:"M0.107422 0.439941 L0.107422 0.960796 M0.107422 0.663164 L0.155824 0.551014 L0.252626 0.476607 L0.349428 0.439941 L0.49463 0.439941",s:"M0.475556 0.477535 L0.400757 0.439941 L0.276092 0.439941 L0.176361 0.477535 L0.101563 0.553823 L0.101563 0.630112 L0.176361 0.668808 L0.301024 0.668808 L0.425688 0.745099 L0.50049 0.821387 L0.50049 0.897677 L0.425688 0.93527 L0.325956 0.973965 L0.201295 0.973965 L0.126496 0.93527 L0.101563 0.858979",t:"M0.246032 0.297852 L0.246032 0.826549 L0.301023 0.919323 L0.411011 0.950848 L0.520997 0.950848 M0.081055 0.515799 L0.466004 0.515799",u:"M0.092041 0.454102 L0.092041 0.826134 L0.13018 0.937211 L0.205936 0.974954 L0.319832 0.974954 L0.396113 0.937211 L0.510011 0.826134 M0.510011 0.454102 L0.510011 0.974954",v:"M0.048828 0.453125 L0.301026 0.961719 M0.553224 0.453125 L0.301026 0.961719",w:"M0 0.453125 L0.150512 0.961719 M0.301024 0.453125 L0.150512 0.961719 M0.301024 0.453125 L0.451539 0.961719 M0.602052 0.453125 L0.451539 0.961719",x:"M0.03711 0.453125 L0.564943 0.961719 M0.564943 0.453125 L0.03711 0.961719",y:"M0.084618 0.453125 L0.320232 0.921476 M0.55713 0.453125 L0.320232 0.921476 L0.242119 1.055289 L0.163369 1.122196 L0.084618 1.155166 L0.044922 1.155166",z:"M0.505373 0.452148 L0.09668 0.961651 M0.09668 0.452148 L0.505373 0.452148 M0.09668 0.961651 L0.505373 0.961651"},Xgt={};for(let e in Wgt){Xgt[e]=[];let t=Wgt[e].split("M").slice(1).map((n)=>n.split("L").map((o)=>o.trim().split(" ").map(parseFloat)));for(let n of t)for(let o=0;o<n.length-1;o++)Xgt[e].push({x1:n[o][0],y1:1-n[o][1],x2:n[o+1][0],y2:1-n[o+1][1]})}function Kf(e){let t=[...e.points||[],...(e.lines||[]).flatMap((n)=>n.points),...(e.polygons||[]).flatMap((n)=>n.points),...(e.rects||[]).flatMap((n)=>Swe(n)),...(e.circles||[]).flatMap((n)=>[{x:n.center.x-n.radius,y:n.center.y},{x:n.center.x+n.radius,y:n.center.y},{x:n.center.x,y:n.center.y-n.radius},{x:n.center.x,y:n.center.y+n.radius}]),...(e.arrows||[]).flatMap((n)=>{let o=Pwe(n);return[{x:o.minX,y:o.minY},{x:o.maxX,y:o.maxY}]}),...(e.texts||[]).flatMap((n)=>{let o=n.fontSize??12,i=n.text.length*o*k0e,r=o*L0e,s=n.anchorSide??"center",a={top_left:{dx:0,dy:0},top_center:{dx:-i/2,dy:0},top_right:{dx:-i,dy:0},center_left:{dx:0,dy:-r/2},center:{dx:-i/2,dy:-r/2},center_right:{dx:-i,dy:-r/2},bottom_left:{dx:0,dy:-r},bottom_center:{dx:-i/2,dy:-r},bottom_right:{dx:-i,dy:-r}},{dx:c,dy:l}=a[s],d=n.x+c,u=n.y+l;return[{x:d,y:u},{x:d+i,y:u+r}]})];if(t.length===0)return{minX:-1,maxX:1,minY:-1,maxY:1};return t.reduce((n,o)=>({minX:Math.min(n.minX,o.x),maxX:Math.max(n.maxX,o.x),minY:Math.min(n.minY,o.y),maxY:Math.max(n.maxY,o.y)}),{minX:1/0,maxX:-1/0,minY:1/0,maxY:-1/0})}function q0e(e,t,n){return{...e,points:e.points?.map((o)=>({...o,x:o.x+t,y:o.y+n})),lines:e.lines?.map((o)=>({...o,points:o.points.map((i)=>({x:i.x+t,y:i.y+n}))})),infiniteLines:e.infiniteLines?.map((o)=>({...o,origin:{x:o.origin.x+t,y:o.origin.y+n}})),polygons:e.polygons?.map((o)=>({...o,points:o.points.map((i)=>({x:i.x+t,y:i.y+n}))})),rects:e.rects?.map((o)=>({...o,center:{x:o.center.x+t,y:o.center.y+n}})),circles:e.circles?.map((o)=>({...o,center:{x:o.center.x+t,y:o.center.y+n}})),arrows:e.arrows?.map((o)=>({...o,start:{x:o.start.x+t,y:o.start.y+n},end:{x:o.end.x+t,y:o.end.y+n}})),texts:e.texts?.map((o)=>({...o,x:o.x+t,y:o.y+n}))}}var pI=(e,t)=>({...e,rects:[...e.rects??[],...t.rects??[]],points:[...e.points??[],...t.points??[]],lines:[...e.lines??[],...t.lines??[]],infiniteLines:[...e.infiniteLines??[],...t.infiniteLines??[]],polygons:[...e.polygons??[],...t.polygons??[]],circles:[...e.circles??[],...t.circles??[]],arrows:[...e.arrows??[],...t.arrows??[]],texts:[...e.texts??[],...t.texts??[]]});function V7(e,t={}){if(e.length===0)return{};let n=e[0],o=Kf(n),i=o.minY,r=[o];for(let s=1;s<e.length;s++){let a=e[s],c=Kf(a),l=o.maxX-o.minX,d=c.maxX-c.minX,u=(l+d)/8,h=o.maxX+u-c.minX,A=i-c.minY,m=q0e(a,h,A);n=pI(n,m),o=Kf(m),r.push(o)}if(t.titles&&t.titles.length>0){let s=Kf(n),c=(s.maxX-s.minX)*0.025,l=t.titles.slice(0,r.length).map((d,u)=>{let h=r[u];return{x:(h.minX+h.maxX)/2,y:h.maxY+c,text:d,fontSize:c,anchorSide:"bottom_center"}});n=pI(n,{texts:l})}return n}function P$(e,t={}){if(e.length===0)return{};let n=e[0],o=Kf(n),i=o.minX,r=[o];for(let s=1;s<e.length;s++){let a=e[s],c=Kf(a),l=o.maxY-o.minY,d=c.maxY-c.minY,u=(l+d)/8,h=i-c.minX,A=o.minY-u-c.maxY,m=q0e(a,h,A);n=pI(n,m),o=Kf(m),r.push(o)}if(t.titles&&t.titles.length>0){let s=Kf(n),c=(s.maxY-s.minY)*0.025,l=t.titles.slice(0,r.length).map((d,u)=>{let h=r[u];return{x:h.minX-c,y:h.maxY,text:d,fontSize:c,anchorSide:"top_right"}});n=pI(n,{texts:l})}return n}function v$(e,t){if(e.points)for(let n of e.points)n.step=t;if(e.lines)for(let n of e.lines)n.step=t;if(e.infiniteLines)for(let n of e.infiniteLines)n.step=t;if(e.polygons)for(let n of e.polygons)n.step=t;if(e.rects)for(let n of e.rects)n.step=t;if(e.circles)for(let n of e.circles)n.step=t;if(e.texts)for(let n of e.texts)n.step=t;if(e.arrows)for(let n of e.arrows)n.step=t;return e}var Zn=class{MAX_ITERATIONS=1e5;solved=!1;failed=!1;iterations=0;progress=0;error=null;activeSubSolver;failedSubSolvers;timeToSolve;stats={};_setupDone=!1;getSolverName(){return this.constructor.name}setup(){if(this._setupDone)return;this._setup(),this._setupDone=!0}_setup(){}step(){if(!this._setupDone)this.setup();if(this.solved)return;if(this.failed)return;this.iterations++;try{this._step()}catch(e){throw this.error=`${this.getSolverName()} error: ${e}`,this.failed=!0,e}if(!this.solved&&this.iterations>=this.MAX_ITERATIONS)this.tryFinalAcceptance();if(!this.solved&&this.iterations>=this.MAX_ITERATIONS)this.error=`${this.getSolverName()} ran out of iterations`,this.failed=!0;if("computeProgress"in this)this.progress=this.computeProgress()}_step(){}getConstructorParams(){throw Error("getConstructorParams not implemented")}getOutput(){return null}solve(){let e=Date.now();while(!this.solved&&!this.failed)this.step();let t=Date.now();this.timeToSolve=t-e}visualize(){return{lines:[],points:[],rects:[],circles:[]}}tryFinalAcceptance(){}preview(){return{lines:[],points:[],rects:[],circles:[]}}};function cr(e,t,n,o={}){return{solverName:e,solverClass:t,getConstructorParams:n,onSolved:o.onSolved}}var AI=class extends Zn{startTimeOfStage={};endTimeOfStage={};timeSpentOnStage={};firstIterationOfStage={};currentPipelineStageIndex=0;inputProblem;pipelineOutputs={};constructor(e){super();this.inputProblem=e,this.MAX_ITERATIONS=1e6}_step(){let e=this.pipelineDef[this.currentPipelineStageIndex];if(!e){this.solved=!0;return}if(this.activeSubSolver){if(this.activeSubSolver.step(),this.activeSubSolver.solved){this.endTimeOfStage[e.solverName]=performance.now(),this.timeSpentOnStage[e.solverName]=this.endTimeOfStage[e.solverName]-this.startTimeOfStage[e.solverName];let n=this.activeSubSolver.getOutput();if(n!==null)this.pipelineOutputs[e.solverName]=n;e.onSolved?.(this),this.activeSubSolver=null,this.currentPipelineStageIndex++}else if(this.activeSubSolver.failed)this.error=this.activeSubSolver?.error,this.failed=!0,this.activeSubSolver=null;return}let t=e.getConstructorParams(this);this.activeSubSolver=new e.solverClass(...t),this[e.solverName]=this.activeSubSolver,this.timeSpentOnStage[e.solverName]=0,this.startTimeOfStage[e.solverName]=performance.now(),this.firstIterationOfStage[e.solverName]=this.iterations}solveUntilStage(e){while(this.getCurrentStageName().toLowerCase()!==e.toLowerCase())if(this.step(),this.failed||this.solved)break}getCurrentStageName(){return this.pipelineDef[this.currentPipelineStageIndex]?.solverName??"none"}getStageProgress(){let e=this.pipelineDef.length;if(e===0)return 1;let t=this.activeSubSolver?.progress??0;return(this.currentPipelineStageIndex+t)/e}getStageStats(){let e={};for(let t of this.pipelineDef){let n=this.timeSpentOnStage[t.solverName]||0,o=this.firstIterationOfStage[t.solverName]||0,i=this.iterations,r=t.solverName===this.getCurrentStageName()?i-o:0,s=this.currentPipelineStageIndex>this.pipelineDef.findIndex((a)=>a.solverName===t.solverName);e[t.solverName]={timeSpent:n,iterations:r,completed:s}}return e}initialVisualize(){return null}finalVisualize(){return null}visualize(){if(!this.solved&&this.activeSubSolver)return this.activeSubSolver.visualize();let e=0,t=this.initialVisualize();if(t)v$(t,0),e=1;let n=null;if(this.solved)n=this.finalVisualize();let o=[t].filter(Boolean).concat(this.pipelineDef.map((i,r)=>{let a=this[i.solverName]?.visualize();if(!a)return null;return v$(a,r+e),a}).filter(Boolean));if(o.length===0)return{points:[],rects:[],lines:[],circles:[],texts:[]};if(this.solved&&n)v$(n,o.length+e+1),o.push(n);if(o.length===1)return o[0];return{points:o.flatMap((i)=>i.points||[]),rects:o.flatMap((i)=>i.rects||[]),lines:o.flatMap((i)=>i.lines||[]),circles:o.flatMap((i)=>i.circles||[]),texts:o.flatMap((i)=>i.texts||[])}}preview(){if(this.activeSubSolver)return this.activeSubSolver.preview();return super.preview()}computeProgress(){return this.getStageProgress()}getStageOutput(e){return this.pipelineOutputs[e]}getAllOutputs(){return{...this.pipelineOutputs}}hasStageOutput(e){return e in this.pipelineOutputs}getSolver(e){return this[e]}};qa();Yo();qa();Yo();Gt();qa();Yo();Yo();var Edo=/\b(?:pcb|source|schematic|subcircuit)_[a-z0-9_]+\b/i,cme=(e,t,n)=>{if(!e||e===t||t.length>0&&e.includes(t)||Edo.test(e))return n;return e},oY=(e,t)=>{for(let n of e){let o=cme(n,t,"");if(o)return o}return""},kQ=(e,t)=>ys(e,t),Kgt=(e,t)=>{let n=e.find((r)=>r.type==="source_component"&&r.source_component_id===t.source_component_id),o=n?.type==="source_component"?oY([n.name],n.source_component_id):"",i=oY([t.name,t.pin_number?.toString(),t.port_hints?.[0]],t.source_port_id);return`${o||"unnamed component"}.${i||"unnamed pin"}`},tE=(e,t)=>{let n=e.find((o)=>o.type==="pcb_port"&&o.pcb_port_id===t);if(n?.type==="pcb_port"){let o=e.find((a)=>a.type==="source_port"&&a.source_port_id===n.source_port_id),i=o?.type==="source_port"?e.find((a)=>a.type==="source_component"&&a.source_component_id===o.source_component_id):null,r=oY([i?.type==="source_component"?i.name:null],i?.type==="source_component"?i.source_component_id:""),s=oY([o?.type==="source_port"?o.name:null,o?.type==="source_port"?o.pin_number?.toString():null,o?.type==="source_port"?o.port_hints?.[0]:null],o?.type==="source_port"?o.source_port_id:"");if(r&&s)return`${r}.${s}`;if(s)return s}return"unnamed port"},_7e=(e,t)=>{let n=cme(t.display_name,t.source_trace_id,"");if(n)return n;let o=(t.connected_source_port_ids??[]).map((i)=>{let r=e.find((d)=>d.type==="pcb_port"&&d.source_port_id===i);if(r?.type==="pcb_port"){let d=tE(e,r.pcb_port_id);return d==="unnamed port"?null:d}let s=e.find((d)=>d.type==="source_port"&&d.source_port_id===i);if(s?.type!=="source_port")return null;let a=e.find((d)=>d.type==="source_component"&&d.source_component_id===s.source_component_id),c=a?.type==="source_component"?cme(a.name,a.source_component_id,""):"",l=oY([s.name,s.pin_number?.toString(),s.port_hints?.[0]],s.source_port_id);if(c&&l)return`${c}.${l}`;return l||null}).filter((i)=>Boolean(i));if(o.length>=2)return`${o[0]} to ${o[1]}`;if(o.length===1)return`trace connected to ${o[0]}`;return"unnamed trace"},ys=(e,t)=>{let n=e.find((a)=>pa(a)===t);if(!n)return"unnamed element";if(n.type==="pcb_component"||n.type==="schematic_component"){let a=e.find((c)=>c.type==="source_component"&&c.source_component_id===n.source_component_id);if(a?.type==="source_component")return cme(a.name,a.source_component_id,"unnamed component")}if((n.type==="pcb_smtpad"||n.type==="pcb_plated_hole")&&n.pcb_port_id){let a=tE(e,n.pcb_port_id);if(a!=="unnamed port")return a}if(n.type==="pcb_trace")return t6(e,t);let i={pcb_smtpad:"SMD pad",pcb_plated_hole:"through-hole pad",pcb_via:"via",pcb_hole:"hole",pcb_bend:"bend",pcb_stiffener:"stiffener",pcb_keepout:"keepout",pcb_cutout:"cutout",pcb_copper_pour:"copper pour"}[n.type]??n.type.replace(/^(pcb|source|schematic)_/,"").replaceAll("_"," "),r="name"in n?n.name:void 0,s="description"in n?n.description:void 0;return oY([r,s,QEe(e,t)],t)||`unnamed ${i}`},t6=(e,t)=>{let n=e.find((r)=>r.type==="pcb_trace"&&r.pcb_trace_id===t);if(n?.type==="pcb_trace"&&n.source_trace_id){let r=e.find((s)=>s.type==="source_trace"&&s.source_trace_id===n.source_trace_id);if(r?.type==="source_trace")return _7e(e,r)}if(n?.type!=="pcb_trace")return"unnamed trace";let i=[...new Set(n.route.flatMap((r)=>r.route_type==="wire"?[r.start_pcb_port_id,r.end_pcb_port_id]:[]).filter((r)=>Boolean(r)))].map((r)=>tE(e,r)).filter((r)=>r!=="unnamed port");if(i.length>=2)return`${i[0]} to ${i[1]}`;if(i.length===1)return`trace connected to ${i[0]}`;return"unnamed trace"};function Mdo(e,t,n){let o=t.type==="pcb_smtpad"?"SMD pad":"through-hole pad",i=t.pcb_port_id?tE(e,t.pcb_port_id):null,r=Yf([t]),s=(r.minX+r.maxX)/2,a=(r.minY+r.maxY)/2,c=`(${s.toFixed(2)}mm, ${a.toFixed(2)}mm)`;if(i)return`${o} ${i} at ${c}`;return`${o} #${n+1} at ${c}`}var Oft=(e,t)=>{let n=t*Math.PI/180;return{x:e.x*Math.cos(n)-e.y*Math.sin(n),y:e.x*Math.sin(n)+e.y*Math.cos(n)}},lme=({x:e,y:t,width:n,height:o,ccwRotation:i})=>{let r=n/2,s=o/2;return[{x:-r,y:-s},{x:r,y:-s},{x:r,y:s},{x:-r,y:s}].map((a)=>{let c=Oft(a,i);return{x:e+c.x,y:t+c.y}})},ZM=(e)=>{let t,n,o,i=0;if(e.type==="pcb_hole"){if(t=e.hole_width,n=e.hole_height,o=Math.min(t,n)/2,e.hole_shape==="rotated_pill")i=e.ccw_rotation}else if(e.type==="pcb_plated_hole")t=e.outer_width,n=e.outer_height,o=Math.min(t,n)/2,i=e.ccw_rotation;else if(t=e.width,n=e.height,o=e.radius,e.shape==="rotated_pill")i=e.ccw_rotation;let r=Math.max(Math.max(t,n)/2-o,0),s=t>=n?{x:r,y:0}:{x:0,y:r},a=Oft(s,i);return{start:{x:e.x-a.x,y:e.y-a.y},end:{x:e.x+a.x,y:e.y+a.y},radius:o}},L$=(e)=>{if(e.type==="pcb_smtpad"){if(e.shape==="polygon")return e.points;if(e.shape==="rotated_rect")return lme({x:e.x,y:e.y,width:e.width,height:e.height,ccwRotation:e.ccw_rotation})}if(e.type==="pcb_plated_hole"&&"rect_pad_width"in e&&"rect_pad_height"in e)return lme({x:e.x,y:e.y,width:e.rect_pad_width,height:e.rect_pad_height,ccwRotation:"rect_ccw_rotation"in e&&typeof e.rect_ccw_rotation==="number"?e.rect_ccw_rotation:0});throw Error(`Expected polygonal pad geometry, got ${e.type} with shape "${e.shape}"`)},jgt=(e)=>e.map((t,n)=>[t,e[(n+1)%e.length]]),n7e=(e,t,n,o)=>{let i=T0e(e,t,n,o);if(i)return{distance:0,pointOnA:i,pointOnB:i,center:i};let r=[{pointOnA:e,pointOnB:Xf(e,n,o)},{pointOnA:t,pointOnB:Xf(t,n,o)},{pointOnA:Xf(n,e,t),pointOnB:n},{pointOnA:Xf(o,e,t),pointOnB:o}],s=r[0],a=WG(s.pointOnA,s.pointOnB);for(let c of r.slice(1)){let l=WG(c.pointOnA,c.pointOnB);if(l<a)s=c,a=l}return{distance:Ay(e,t,n,o),pointOnA:s.pointOnA,pointOnB:s.pointOnB,center:{x:(s.pointOnA.x+s.pointOnB.x)/2,y:(s.pointOnA.y+s.pointOnB.y)/2}}},F$=(e,t,n)=>{if(n.length<3)return{distance:Number.POSITIVE_INFINITY,center:e,tracePoint:e,obstaclePoint:e};let o=jgt(n).map(([r,s])=>T0e(e,t,r,s)).filter((r)=>r!==null);if(o.length>0){let r=t.x-e.x,s=t.y-e.y,a=r*r+s*s;return o.sort((c,l)=>{let d=((c.x-e.x)*r+(c.y-e.y)*s)/a,u=((l.x-e.x)*r+(l.y-e.y)*s)/a;return d-u}),{distance:0,center:o[0],tracePoint:o[0],obstaclePoint:o[0]}}if(mI(e,n)||mI(t,n)){let r={x:(e.x+t.x)/2,y:(e.y+t.y)/2};return{distance:0,center:r,tracePoint:r,obstaclePoint:r}}let i=n7e(e,t,n[0],n[1]);for(let[r,s]of jgt(n).slice(1)){let a=n7e(e,t,r,s);if(a.distance<i.distance)i=a}return{distance:i.distance,center:i.center,tracePoint:i.pointOnA,obstaclePoint:i.pointOnB}},Bdo=(e,t)=>{let n=ZM(t),o=n7e({x:e.x1,y:e.y1},{x:e.x2,y:e.y2},n.start,n.end);return{distance:o.distance,center:o.center,radius:n.radius,tracePoint:o.pointOnA,obstaclePoint:o.pointOnB}};function qgt(e,t){return Math.sqrt((t.x-e.x)**2+(t.y-e.y)**2)}var Uwe=0.000000001,$v=0.000000001;function wdo(e,t){let n=(e.y-t.start.y)*(t.end.x-t.start.x)-(e.x-t.start.x)*(t.end.y-t.start.y);if(Math.abs(n)>Uwe)return!1;let o=(e.x-t.start.x)*(t.end.x-t.start.x)+(e.y-t.start.y)*(t.end.y-t.start.y);if(o<-Uwe)return!1;let i=(t.end.x-t.start.x)**2+(t.end.y-t.start.y)**2;return o<=i+Uwe}function Wwe(e,t){let n=!1;for(let o=0,i=t.length-1;o<t.length;i=o++){let r=t[o],s=t[i];if(wdo(e,{start:r,end:s}))return!0;if(r.y>e.y!==s.y>e.y&&e.x<(s.x-r.x)*(e.y-r.y)/(s.y-r.y)+r.x)n=!n}return n}function aY(e,t){if(t.type==="pcb_smtpad"){if(t.shape==="circle")return qgt(e,t)<=t.radius+$v;if(t.shape==="rect"){let n=t.width/2,o=t.height/2;return Math.abs(e.x-t.x)<=n+$v&&Math.abs(e.y-t.y)<=o+$v}if(t.shape==="rotated_rect")return Wwe(e,L$(t));if(t.shape==="pill"||t.shape==="rotated_pill"){if(t.shape==="rotated_pill"){let c=ZM(t);return qs(e,c.start,c.end)<=c.radius+$v}let n=t.width/2,o=t.height/2,i=t.radius;if(Math.abs(e.x-t.x)<=n-i+$v&&Math.abs(e.y-t.y)<=o+$v)return!0;let r=Math.max(Math.abs(e.x-t.x)-(n-i),0),s=Math.max(Math.abs(e.y-t.y)-(o-i),0),a=i+$v;return r*r+s*s<=a*a}if(t.shape==="polygon")return Wwe(e,t.points)}if(t.type==="pcb_plated_hole"){if(t.shape==="circle")return qgt(e,t)<=t.outer_diameter/2+$v;if("rect_pad_width"in t&&"rect_pad_height"in t)return Wwe(e,L$(t));if(t.shape==="oval"||t.shape==="pill")return Math.abs(e.x-t.x)<=t.outer_width/2+$v&&Math.abs(e.y-t.y)<=t.outer_height/2+$v}return!1}function kp(e){if(e.type==="pcb_trace_segment")return[e.layer];if(e.type==="pcb_smtpad")return[e.layer];if(e.type==="pcb_plated_hole")return Array.isArray(e.layers)?e.layers:[...Ep];if(e.type==="pcb_hole")return[...Ep];if(e.type==="pcb_via")return Array.isArray(e.layers)?e.layers:[...Ep];if(e.type==="pcb_keepout")return Array.isArray(e.layers)?e.layers:[];return[]}function Tdo(e,t){return e.route_type==="wire"&&kp(t).includes(e.layer)&&aY(e,t)}var qf=0.000000001;function g7e(e){let t=new WeakMap,n=(o)=>{let i=t.get(o);if(!i)i={box:o.box,facePoints:[...o.faces].map((r)=>r.first.start),edges:[...o.edges].map((r)=>r.shape),edgeIndex:o.edges},t.set(o,i);return i};return(o,i)=>{if(o.isEmpty()||i.isEmpty())return!1;let r=n(o),s=n(i);if(r.box.xmin>s.box.xmax+e||r.box.xmax<s.box.xmin-e||r.box.ymin>s.box.ymax+e||r.box.ymax<s.box.ymin-e)return!1;if(r.facePoints.some((l)=>s.box.contains(l)&&i.contains(l))||s.facePoints.some((l)=>r.box.contains(l)&&o.contains(l)))return!0;let[a,c]=r.edges.length<=s.edges.length?[r,s]:[s,r];for(let l of a.edges){let d=l.box,u=new vA(d.xmin-e,d.ymin-e,d.xmax+e,d.ymax+e),h=c.edgeIndex.search(u);for(let A of h)if(l.distanceTo(A.shape)[0]<=e)return!0}return!1}}var eE=1e6;function Ddo({center:e,radius:t,holeRadius:n=0}){if(n>0)return f7(e,t*2,n*2).scale(eE,eE);return new Dc(new jR(new Bs(e.x*eE,e.y*eE),t*eE))}function Ndo(e,t){let n=new Map;for(let i of e){if(i.type!=="pcb_copper_pour"||!i.source_net_id)continue;let r=t.getNetConnectedToId(i.source_net_id);if(!r)continue;let s=n.get(r)??[];s.push({layer:i.layer,polygon:g7(i).scale(eE,eE)}),n.set(r,s)}let o=g7e(qf*eE);return(i)=>{let r=(n.get(i.netId)??[]).filter((a)=>i.layers.includes(a.layer));if(i.radius===0){let a=new Bs(i.center.x*eE,i.center.y*eE);return r.some((c)=>c.polygon.contains(a))}if(r.length===0)return!1;let s=Ddo(i);return r.some((a)=>o(s,a.polygon))}}var Tg={min_trace_width:0.1,min_via_hole_edge_to_via_hole_edge_clearance:0.1,min_plated_hole_drill_edge_to_drill_edge_clearance:0.15,min_trace_to_hole_edge_clearance:0.2,min_trace_to_pad_edge_clearance:0.1,min_pad_edge_to_pad_edge_clearance:0.1,min_board_edge_clearance:0.2,min_via_hole_diameter:0.2,min_via_pad_diameter:0.3},Rdo=0.1,{min_trace_width:o7e,min_via_pad_diameter:Q6r,min_board_edge_clearance:k6r,min_via_hole_edge_to_via_hole_edge_clearance:L6r,min_via_hole_edge_to_via_hole_edge_clearance:F6r,min_pad_edge_to_pad_edge_clearance:H6r}=Tg,hx=0.005,Z5=(e)=>e.find((t)=>t.type==="pcb_board"),$5=(e,t)=>e?.[t],nE=(e)=>{if(e.type==="pcb_keepout"){if(e.shape==="outline")return{minX:Math.min(...e.outline.map((t)=>t.x)),minY:Math.min(...e.outline.map((t)=>t.y)),maxX:Math.max(...e.outline.map((t)=>t.x)),maxY:Math.max(...e.outline.map((t)=>t.y))};if(e.shape==="circle")return{minX:e.center.x-e.radius,minY:e.center.y-e.radius,maxX:e.center.x+e.radius,maxY:e.center.y+e.radius};return{minX:e.center.x-e.width/2,minY:e.center.y-e.height/2,maxX:e.center.x+e.width/2,maxY:e.center.y+e.height/2}}return Yf([e])},i7e=(e)=>{if(e.type==="pcb_keepout"&&e.shape!=="outline")return e.center;let t=nE(e);return BQ({x:t.minX,y:t.minY},{x:t.maxX,y:t.maxY})},Qdo=(e)=>{if(e.type==="pcb_keepout"&&e.shape==="circle")return e.radius;let t=nE(e);return Math.min(t.maxX-t.minX,t.maxY-t.minY)/2},DQ=(e)=>e.type==="pcb_via"||e.shape==="circle",NQ=(e)=>e.type==="pcb_smtpad"&&(e.shape==="pill"||e.shape==="rotated_pill")||e.type==="pcb_plated_hole"&&(e.shape==="oval"||e.shape==="pill"),RQ=(e)=>{let t=i7e(e);return{kind:"circle",x:t.x,y:t.y,radius:Qdo(e)}},QQ=(e)=>{if(e.type==="pcb_keepout"){if(e.shape==="outline")return{kind:"polygon",points:e.outline};if(e.shape!=="rect")throw Error(`Expected rectangular keepout, got ${e.shape}`);return{kind:"polygon",points:[{x:e.center.x-e.width/2,y:e.center.y-e.height/2},{x:e.center.x+e.width/2,y:e.center.y-e.height/2},{x:e.center.x+e.width/2,y:e.center.y+e.height/2},{x:e.center.x-e.width/2,y:e.center.y+e.height/2}]}}if(e.type==="pcb_smtpad"&&(e.shape==="polygon"||e.shape==="rotated_rect"))return{kind:"polygon",points:L$(e)};if(e.type==="pcb_plated_hole"&&"rect_pad_width"in e&&"rect_pad_height"in e)return{kind:"polygon",points:L$(e)};let t=nE(e);return{kind:"polygon",points:[{x:t.minX,y:t.minY},{x:t.maxX,y:t.minY},{x:t.maxX,y:t.maxY},{x:t.minX,y:t.maxY}]}},r7e=(e)=>{if(e.type!=="pcb_smtpad"||e.shape!=="rect"&&e.shape!=="rotated_rect"||!e.corner_radius||e.corner_radius<=0)return null;let t=Math.min(e.corner_radius,e.width/2,e.height/2);if(t===Math.min(e.width,e.height)/2)return{core:{...e,shape:"rotated_pill",radius:t,ccw_rotation:e.shape==="rotated_rect"?e.ccw_rotation:0},radius:0};return{core:{...e,width:e.width-2*t,height:e.height-2*t,corner_radius:0},radius:t}},ux=(e,t)=>{let n=r7e(e),o=r7e(t);if(n||o)return ux(n?.core??e,o?.core??t)-(n?.radius??0)-(o?.radius??0);if(NQ(e)&&NQ(t)){let i=ZM(e),r=ZM(t);return Ay(i.start,i.end,r.start,r.end)-i.radius-r.radius}if(NQ(e)&&DQ(t)){let i=ZM(e);return A$(i.start,i.end,RQ(t))-i.radius}if(DQ(e)&&NQ(t)){let i=ZM(t);return A$(i.start,i.end,RQ(e))-i.radius}if(NQ(e)){let i=ZM(e);return F$(i.start,i.end,QQ(t).points).distance-i.radius}if(NQ(t)){let i=ZM(t);return F$(i.start,i.end,QQ(e).points).distance-i.radius}if(DQ(e)&&DQ(t))return Vct(RQ(e),RQ(t));if(DQ(e))return kEe(RQ(e),QQ(t));if(DQ(t))return kEe(RQ(t),QQ(e));return Uct(QQ(e),QQ(t))},j7=(e)=>[...ts(e).pcb_smtpad.list(),...ts(e).pcb_plated_hole.list()],zft=(e)=>ts(e).pcb_trace.list().flatMap((n)=>{let o=[];for(let i=0;i<n.route.length-1;i++){let r=n.route[i],s=n.route[i+1];if(r.route_type!=="wire")continue;if(s.route_type!=="wire")continue;if(r.layer!==s.layer)continue;o.push({type:"pcb_trace_segment",pcb_trace_id:n.pcb_trace_id,_pcbTrace:n,thickness:"width"in r?r.width:("width"in s)?s.width:o7e,layer:r.layer,x1:r.x,y1:r.y,x2:s.x,y2:s.y})}return o}),Xwe=({tracePoint:e,obstaclePoint:t,traceRadius:n,obstacleRadius:o})=>{let i=t.x-e.x,r=t.y-e.y,s=Math.hypot(i,r);if(s===0)return BQ(e,t);let a=i/s,c=r/s;if(s<=n+o){let u=Math.max(-n,s-o),h=Math.min(n,s+o),A=(u+h)/2;return{x:e.x+a*A,y:e.y+c*A}}let l={x:e.x+a*n,y:e.y+c*n},d={x:t.x-a*o,y:t.y-c*o};return BQ(l,d)},z$=(e,t)=>{let n=r7e(t);if(n)t=n.core;let o=n?.radius??0,i={x:e.x1,y:e.y1},r={x:e.x2,y:e.y2},s=e.thickness/2;if(t.type==="pcb_via"||DQ(t)){let c=t.type==="pcb_via"?{x:t.x,y:t.y,radius:t.outer_diameter/2}:RQ(t),l=Xf(c,i,r);return{gap:A$(i,r,c)-s,center:Xwe({tracePoint:l,obstaclePoint:c,traceRadius:s,obstacleRadius:c.radius})}}if(NQ(t)){let c=Bdo(e,t);return{gap:c.distance-s-c.radius,center:Xwe({tracePoint:c.tracePoint,obstaclePoint:c.obstaclePoint,traceRadius:s,obstacleRadius:c.radius})}}let a=F$(i,r,QQ(t).points);return{gap:a.distance-s-o,center:Xwe({tracePoint:a.tracePoint,obstaclePoint:a.obstaclePoint,traceRadius:s,obstacleRadius:o})}},nY=(e)=>e<=0,kdo=(e,t)=>z$({x1:e.x,y1:e.y,x2:e.x,y2:e.y,thickness:e.outer_diameter},t).center;function Ldo(e){let t=e.find((i)=>i.type==="pcb_board")?.num_layers,n=Ep.filter((i)=>i.startsWith("inner"));if(t!==void 0)n=n.slice(0,Math.max(0,t-2));let o=["top",...n];if(t!==1)o.push("bottom");return o}function Fdo(e){return e.filter((t)=>Number.isFinite(t.outer_diameter)&&t.outer_diameter>0).map((t)=>({id:t.pcb_via_id,layers:kp(t),x:t.x,y:t.y,radius:t.outer_diameter/2,holeRadius:t.hole_diameter/2}))}function Hdo({traces:e,vias:t},{circuitJson:n,connMap:o}){let i=Ldo(n),r=[];for(let s of e)for(let a of s.route){if(a.route_type!=="via")continue;if(t.some((A)=>Math.hypot(A.x-a.x,A.y-a.y)<=qf&&(A.pcb_trace_id===s.pcb_trace_id||!A.pcb_trace_id&&o.areIdsConnected(A.pcb_via_id,s.pcb_trace_id))))continue;let l=i.indexOf(a.from_layer),d=i.indexOf(a.to_layer);if(l<0||d<0)continue;let u=a.outer_diameter,h;if(u!==void 0){if(!Number.isFinite(u)||u<=0)continue;h=u/2}r.push({id:s.pcb_trace_id,layers:i.slice(Math.min(l,d),Math.max(l,d)+1),x:a.x,y:a.y,radius:h})}return r}function Odo({viaCopper:e,pad:t}){if(e.radius===void 0)return aY(e,t);let n={type:"pcb_via",pcb_via_id:e.id,x:e.x,y:e.y,outer_diameter:e.radius*2,hole_diameter:0,layers:Ep.filter((o)=>e.layers.includes(o))};return ux(n,t)<=qf}function zdo({trace:e,viaCopper:t}){if(e.route_thickness_mode==="interpolated")return!1;for(let n=1;n<e.route.length;n++){let o=e.route[n-1],i=e.route[n];if(o.route_type!=="wire"||i.route_type!=="wire"||o.layer!==i.layer||!t.layers.includes(o.layer)||!Number.isFinite(o.width)||o.width<=0||Math.hypot(o.x-i.x,o.y-i.y)<=qf)continue;let r=0;if(t.radius!==void 0)r=t.radius+o.width/2;if(qs(t,o,i)<=r+qf)return!0}return!1}function Gdo(e){let{circuitJson:t,connMap:n,touchesPour:o}=e,i=j7(t),r=t.filter((l)=>l.type==="pcb_trace"),s=t.filter((l)=>l.type==="pcb_via"),a=[...Fdo(s),...Hdo({traces:r,vias:s},e)],c=new Map;for(let l of a){if(!Number.isFinite(l.x)||!Number.isFinite(l.y))continue;let d=n.getNetConnectedToId(l.id);if(!d)continue;let u=o({netId:d,layers:l.layers,center:l,radius:l.radius??0,holeRadius:l.holeRadius})||i.some((p)=>n.getNetConnectedToId(pa(p))===d&&kp(p).some((g)=>l.layers.includes(g))&&Odo({viaCopper:l,pad:p})),h=new Set;for(let p of r)if(n.getNetConnectedToId(p.pcb_trace_id)===d&&zdo({trace:p,viaCopper:l}))h.add(p.pcb_trace_id);let A={viaCopper:l,touchesPadOrPour:u,touchingTraceIds:h},m=c.get(d)??new Map;for(let p of l.layers){let g=m.get(p)??[];g.push(A),m.set(p,g)}c.set(d,m)}return c}function Ydo({trace:e,point:t,width:n},{connMap:o,viaContactIndex:i}){if(!Number.isFinite(n)||n<=0)return!1;let r=o.getNetConnectedToId(e.pcb_trace_id);if(!r)return!1;return(i.get(r)?.get(t.layer)??[]).some(({viaCopper:a,touchesPadOrPour:c,touchingTraceIds:l})=>{if(!(c||[...l].some((h)=>h!==e.pcb_trace_id)))return!1;let u=0;if(a.radius!==void 0)u=a.radius+n/2;return Math.hypot(t.x-a.x,t.y-a.y)<=u+qf})}function Gft({route:e,anchorPoint:t,fromIndex:n,step:o}){let i=t;for(let r=n;r>=0&&r<e.length;r+=o){let s=e[r];if(s.route_type!=="wire"||s.layer!==t.layer||qs(i,t,s)>qf)break;i=s}return i}function Vdo(e,t){if(e.route_thickness_mode==="interpolated")return;let{route:n}=e,o=0,i=1;if(t==="end")o=n.length-1,i=-1;let r=o+i;while(r>=0&&r<n.length){let s=n[o],a=n[r];if(s.route_type!=="wire"||a.route_type!=="wire"||s.layer!==a.layer)return;if(!(Math.hypot(s.x-a.x,s.y-a.y)<=qf)){let l=s.width;if(t==="end")l=a.width;let d=Gft({route:n,anchorPoint:s,fromIndex:r,step:i});return{width:l,inwardPoint:d}}o=r,r+=i}return}function Udo({route:e,startIndex:t,start:n,end:o}){let i=n;for(let r=t-1;r>=0;r--){let s=e[r];if(s.route_type!=="wire"||s.layer!==o.layer||qs(i,s,o)>qf)break;i=s}return i}function Wdo(e,t){let n=new Map;for(let o of e){if(o.type!=="pcb_trace")continue;if(o.route_thickness_mode==="interpolated")continue;let i=t.getNetConnectedToId(o.pcb_trace_id);if(!i)continue;for(let r=0;r<o.route.length-1;r++){let s=o.route[r],a=o.route[r+1];if(s.route_type!=="wire"||a.route_type!=="wire")continue;if(s.layer!==a.layer)continue;if(Math.hypot(s.x-a.x,s.y-a.y)<=qf)continue;let c=Udo({route:o.route,startIndex:r,start:s,end:a}),l=Gft({route:o.route,anchorPoint:c,fromIndex:r+1,step:1}),d=n.get(i)??new Map,u=d.get(s.layer)??[];u.push({trace:o,start:s,end:a,centerlineStart:c,centerlineEnd:l}),d.set(s.layer,u),n.set(i,d)}}return n}function Xdo({point:e,terminalSegment:t,segment:n}){let o=qs(e,n.start,n.end),i=t.width/2,r=n.start.width/2;if(o+i<=r+qf)return!0;if(qs(t.inwardPoint,n.centerlineStart,n.centerlineEnd)<=qf&&qs(e,n.centerlineStart,n.centerlineEnd)>qf)return!1;return o<=i+r+qf}function Kdo(e,t){let n=e.filter((o)=>o.type==="pcb_smtpad"||o.type==="pcb_plated_hole").filter((o)=>o.pcb_port_id);return{circuitJson:e,portPads:n,connMap:t}}function mme(e){return e.connMap??=js(e.circuitJson),e.connMap}function Yft(e){return e.touchesPour??=Ndo(e.circuitJson,mme(e)),e.touchesPour}function jdo(e){return e.traceWireSegmentsByNetAndLayer??=Wdo(e.circuitJson,mme(e)),e.traceWireSegmentsByNetAndLayer}function qdo(e){return e.viaContactIndex??=Gdo({circuitJson:e.circuitJson,connMap:mme(e),touchesPour:Yft(e)}),e.viaContactIndex}function Jdo({trace:e,point:t,terminalSegment:n},o){let i=mme(o),r=i.getNetConnectedToId(e.pcb_trace_id),s=Yft(o);if(r&&s({netId:r,layers:[t.layer],center:t,radius:n.width/2}))return!0;let a=jdo(o);if(r){if((a.get(r)?.get(t.layer)??[]).some((d)=>d.trace.pcb_trace_id!==e.pcb_trace_id&&Xdo({point:t,terminalSegment:n,segment:d})))return!0}return Ydo({trace:e,point:t,width:n.width},{connMap:i,viaContactIndex:qdo(o)})}function $do({trace:e,endpoint:t,point:n,hasExpectedPorts:o},i){if(i.portPads.some((s)=>Tdo(n,s)))return!1;let r=Vdo(e,t);if(!r)return!o;return!Jdo({trace:e,point:n,terminalSegment:r},i)}function Zdo({trace:e,hasExpectedPorts:t},n){let o=[{endpoint:"start",point:e.route[0]},{endpoint:"end",point:e.route[e.route.length-1]}],i=[];for(let{endpoint:a,point:c}of o){if(c.route_type!=="wire")continue;if($do({trace:e,endpoint:a,point:c,hasExpectedPorts:t},n))i.push({endpoint:a,point:c})}let[r,s]=i;if(r&&s&&r.point.layer===s.point.layer&&Math.hypot(r.point.x-s.point.x,r.point.y-s.point.y)<=qf)i.pop();return i}function euo(e,t={}){let n=Kdo(e,t.connMap),o=new Map,i=new Set;for(let s of e){if(s.type==="source_trace")o.set(s.source_trace_id,s);if(s.type==="pcb_port")i.add(s.source_port_id)}let r=[];for(let s of e){if(s.type!=="pcb_trace"||s.route.length===0)continue;if(s.is_antenna_trace===!0)continue;let a=!1;if(s.source_trace_id){let c=o.get(s.source_trace_id);a=Boolean(c?.connected_source_port_ids.some((l)=>i.has(l)))}for(let{endpoint:c,point:l}of Zdo({trace:s,hasExpectedPorts:a},n)){let d=t6(e,s.pcb_trace_id);r.push({type:"pcb_trace_error",error_type:"pcb_trace_error",pcb_trace_error_id:`disconnected_endpoint_${s.pcb_trace_id}_${c}`,message:`Trace [${d}] has dangling endpoint at (${l.x.toFixed(2)}, ${l.y.toFixed(2)})`,source_trace_id:s.source_trace_id||`!${s.pcb_trace_id}`,pcb_trace_id:s.pcb_trace_id,center:{x:l.x,y:l.y},pcb_component_ids:[],pcb_port_ids:[]})}}return r}var s7e=(e,t)=>{let n={x:e.x1,y:e.y1},o={x:e.x2,y:e.y2},i={x:t.x1,y:t.y1},r={x:t.x2,y:t.y2},s={x:o.x-n.x,y:o.y-n.y},a={x:r.x-i.x,y:r.y-i.y},c=s.x*s.x+s.y*s.y,l=a.x*a.x+a.y*a.y;if(c===0||l===0){if(c===0&&l===0)return{x:(n.x+i.x)/2,y:(n.y+i.y)/2};if(c===0){let w=Zv(((n.x-i.x)*a.x+(n.y-i.y)*a.y)/l,0,1),T={x:i.x+w*a.x,y:i.y+w*a.y};return{x:(n.x+T.x)/2,y:(n.y+T.y)/2}}let E=Zv(((i.x-n.x)*s.x+(i.y-n.y)*s.y)/c,0,1),B={x:n.x+E*s.x,y:n.y+E*s.y};return{x:(B.x+i.x)/2,y:(B.y+i.y)/2}}let d={x:n.x-i.x,y:n.y-i.y},u=s.x*s.x+s.y*s.y,h=s.x*a.x+s.y*a.y,A=s.x*d.x+s.y*d.y,m=a.x*a.x+a.y*a.y,p=a.x*d.x+a.y*d.y,g=u*m-h*h;if(g<0.0000000001)return tuo(n,o,i,r,s,a,c,l);let _=(h*p-m*A)/g,f=(u*p-h*A)/g;_=Zv(_,0,1),f=Zv(f,0,1),f=(_*h+p)/m,f=Zv(f,0,1),_=(f*h-A)/u,_=Zv(_,0,1);let y={x:n.x+_*s.x,y:n.y+_*s.y},x={x:i.x+f*a.x,y:i.y+f*a.y},C=y.x-x.x,I=y.y-x.y,b=Math.sqrt(C*C+I*I);return{x:(y.x+x.x)/2,y:(y.y+x.y)/2}},tuo=(e,t,n,o,i,r,s,a)=>{let c=((n.x-e.x)*i.x+(n.y-e.y)*i.y)/s;c=Zv(c,0,1);let l={x:e.x+c*i.x,y:e.y+c*i.y},d=((o.x-e.x)*i.x+(o.y-e.y)*i.y)/s;d=Zv(d,0,1);let u={x:e.x+d*i.x,y:e.y+d*i.y},h=((e.x-n.x)*r.x+(e.y-n.y)*r.y)/a;h=Zv(h,0,1);let A={x:n.x+h*r.x,y:n.y+h*r.y},m=((t.x-n.x)*r.x+(t.y-n.y)*r.y)/a;m=Zv(m,0,1);let p={x:n.x+m*r.x,y:n.y+m*r.y},_=[{pointA:l,pointB:n,distance:Math.sqrt((l.x-n.x)**2+(l.y-n.y)**2)},{pointA:u,pointB:o,distance:Math.sqrt((u.x-o.x)**2+(u.y-o.y)**2)},{pointA:e,pointB:A,distance:Math.sqrt((e.x-A.x)**2+(e.y-A.y)**2)},{pointA:t,pointB:p,distance:Math.sqrt((t.x-p.x)**2+(t.y-p.y)**2)}].reduce((f,y)=>y.distance<f.distance?y:f);return{x:(_.pointA.x+_.pointB.x)/2,y:(_.pointA.y+_.pointB.y)/2}},Zv=(e,t,n)=>Math.max(t,Math.min(n,e));function a7e(e){if(e.route_type!=="wire")return[];return[e.start_pcb_port_id,e.end_pcb_port_id].filter((t)=>Boolean(t))}function nuo(e){let t=new Set;for(let n of e.route)for(let o of a7e(n))t.add(o);return Array.from(t)}function B$(e){let t=new Set;for(let n of e)for(let o of nuo(n))t.add(o);return Array.from(t)}function ouo(e){let t=new Set(e.flatMap((i)=>i.type==="source_bus"&&i.max_length_skew!==void 0?i.source_trace_ids:[])),n=ts(e),o=[];for(let i of e){if(i.type!=="pcb_trace")continue;if(!i.source_trace_id||!t.has(i.source_trace_id))continue;let r=[],s=[],a=0,c=0;for(let d=0;d<i.route.length-1;d++){s[d]=a;let u=i.route[d],h=i.route[d+1];if(u.route_type!=="wire"||h.route_type!=="wire"||u.layer!==h.layer){c++;continue}let A=Math.hypot(h.x-u.x,h.y-u.y);if(A===0)continue;r.push({type:"pcb_trace_segment",_pcbTrace:i,pcb_trace_id:i.pcb_trace_id,thickness:u.width,layer:u.layer,x1:u.x,y1:u.y,x2:h.x,y2:h.y,run:c,startDistance:a,endDistance:a+A}),a+=A}s[i.route.length-1]=a;let l;e:for(let d=0;d<r.length;d++){let u=r[d];for(let h=d+1;h<r.length;h++){let A=r[h];if(u.layer!==A.layer)continue;let m=(u.thickness+A.thickness)/2,p=(u.x2-u.x1)*(A.x2-A.x1)+(u.y2-u.y1)*(A.y2-A.y1),g=(u.x2-u.x1)*(A.y2-A.y1)-(u.y2-u.y1)*(A.x2-A.x1),_=Math.hypot(u.x2-u.x1,u.y2-u.y1)*Math.hypot(A.x2-A.x1,A.y2-A.y1),f=p>=-0.000000001*_,y=u.run===A.run&&A.startDistance===u.endDistance;if(y&&!(p<0&&Math.abs(g)<0.000000001))continue;if(!y&&u.run===A.run&&A.startDistance-u.endDistance<=Math.SQRT2*m&&f)continue;if(Ay({x:u.x1,y:u.y1},{x:u.x2,y:u.y2},{x:A.x1,y:A.y1},{x:A.x2,y:A.y2})-m>0.000000001)continue;l=s7e(u,A);break e}}if(!l){let d=e.find((h)=>h.type==="pcb_board"),u=["top",...Ep.filter((h)=>h.startsWith("inner")).slice(0,d?Math.max(0,d.num_layers-2):void 0),...d?.num_layers===1?[]:["bottom"]];e:for(let h=0;h<i.route.length;h++){let A=i.route[h];if(A.route_type!=="via")continue;let m=n.pcb_via.list().find((y)=>(y.pcb_trace_id===i.pcb_trace_id||!y.pcb_trace_id&&y.source_trace_id===i.source_trace_id)&&Math.hypot(y.x-A.x,y.y-A.y)<=0.000000001),p=m?.outer_diameter??A.outer_diameter;if(p===void 0||!Number.isFinite(p)||p<=0)continue;let g=u.indexOf(A.from_layer),_=u.indexOf(A.to_layer),f=m?.layers??(g>=0&&_>=0?u.slice(Math.min(g,_),Math.max(g,_)+1):[]);for(let y of r){if(!f.includes(y.layer))continue;let x=(p+y.thickness)/2;if(Math.max(y.startDistance-s[h],s[h]-y.endDistance,0)<=x+0.000000001)continue;let I={...y,x1:A.x,y1:A.y,x2:A.x,y2:A.y};if(Ay(A,A,{x:y.x1,y:y.y1},{x:y.x2,y:y.y2})-x>0.000000001)continue;l=s7e(y,I);break e}}}if(l){let d=n.source_trace.get(i.source_trace_id),u=(d?.connected_source_port_ids??[]).map((A)=>{let m=n.source_port.get(A),p=m?.source_component_id?n.source_component.get(m.source_component_id):void 0;return p?.name&&m?.name?`${p.name}.${m.name}`:void 0}).filter((A)=>Boolean(A)),h=d?.name||d?.display_name||u.join(" → ")||"unnamed";o.push({type:"pcb_trace_error",error_type:"pcb_trace_error",pcb_trace_error_id:`self_short_${i.pcb_trace_id}`,pcb_trace_id:i.pcb_trace_id,source_trace_id:i.source_trace_id,message:`PCB trace "${h}" shorts to itself, bypassing part of its length-matched route`,center:l,pcb_component_ids:[],pcb_port_ids:B$([i]),subcircuit_id:i.subcircuit_id})}}return o}function Jgt(e,t){let n=$2.getTolerance(),o=e.edges.search(new vA(t.x-n,t.y-n,1/0,t.y+n)),i=!1;for(let r of o){if(!(r instanceof ile))throw Error("Expected a polygon edge in the spatial index");let s=r.shape;if(!(s instanceof Bp||s instanceof d0))throw Error("Expected a segment or arc in the polygon");if(s.contains(t))return!0;if(s instanceof Bp){let{start:a,end:c}=s;if(a.y>t.y===c.y>t.y)continue;if(a.x+(t.y-a.y)*(c.x-a.x)/(c.y-a.y)>t.x)i=!i}else{let a=2*Math.PI,c=(s.startAngle%a+a)%a,l=new d0(s.pc,s.r,c,c+(s.counterClockwise?s.sweep:-s.sweep),s.counterClockwise).breakToFunctional(),d=r.prev.shape instanceof Bp?r.prev.end.y:s.start.y,u=r.next.start.y;for(let[h,A]of l.entries()){let m=h===0?d:A.start.y,p=h===l.length-1?u:A.end.y;if(m>t.y===p>t.y)continue;let g=t.y-A.pc.y;if(Math.abs(g)>A.r)continue;let _=Math.sqrt((A.r-g)*(A.r+g));if(A.pc.x+(A.middle().x>=A.pc.x?_:-_)>t.x)i=!i}}}return i}var X7=0.000000001,J5=(e)=>new Bs(e.x,e.y);function n6(e,t){if(!Number.isFinite(e)||e<=0)throw Error(`${t} must be finite and positive`);return e}function Jf(e,t){return n6(t,"radius"),new Dc(new jR(J5(e),t))}function dx(e){let t=e.filter((i,r)=>r===0||J5(i).distanceTo(J5(e[r-1]))[0]>X7);if(t.length>1&&J5(t[0]).distanceTo(J5(t.at(-1)))[0]<=X7)t.pop();if(t.length<2)throw Error("A ring needs at least two distinct vertices");let n=t.map((i,r)=>{let s=t[(r+1)%t.length];if(![i.x,i.y,i.bulge??0].every(Number.isFinite))throw Error("Non-finite ring vertex");let a=i.bulge??0;if(Math.abs(a)<=X7)return new Bp(J5(i),J5(s));let c=s.x-i.x,l=s.y-i.y,d=Math.hypot(c,l),u=d*(1-a*a)/(4*a),h=new Bs((i.x+s.x)/2-l/d*u,(i.y+s.y)/2+c/d*u);return new d0(h,d*(1+a*a)/(4*Math.abs(a)),Math.atan2(i.y-h.y,i.x-h.x),Math.atan2(s.y-h.y,s.x-h.x),a>0)}),o=new Dc;if(o.addFace(n),o.area()<=X7)throw Error("A ring must enclose a non-zero area");return o}function wg(e,t,n,o=0,i=0){if(n6(t,"width"),n6(n,"height"),!Number.isFinite(o)||!Number.isFinite(i)||i<0)throw Error("Invalid rectangle rotation or corner radius");let r=Math.min(i,t/2,n/2),s=t/2,a=n/2,c;if(r<=X7)c=dx([{x:-s,y:-a},{x:s,y:-a},{x:s,y:a},{x:-s,y:a}]);else{let l=[new Bs(s-r,-a+r),new Bs(s-r,a-r),new Bs(-s+r,a-r),new Bs(-s+r,-a+r)],d=[];for(let u=0;u<4;u++){let h=-Math.PI/2+u*Math.PI/2,A=new d0(l[u],r,h,h+Math.PI/2,!0),m=l[(u+1)%4],p=new Bs(m.x+r*Math.cos(h+Math.PI/2),m.y+r*Math.sin(h+Math.PI/2));if(d.push(A),A.end.distanceTo(p)[0]>X7)d.push(new Bp(A.end,p))}c=new Dc,c.addFace(d)}return c.rotate(o*Math.PI/180).translate(new Lz(e.x,e.y))}function c7e(e,t,n,o=n){let i=n6(n,"trace width")/2,r=n6(o,"trace width")/2,s=J5(e).distanceTo(J5(t))[0];if(s<=Math.abs(i-r)+X7)return Jf(i>=r?e:t,Math.max(i,r));let a=Math.atan2(t.y-e.y,t.x-e.x),c=Math.acos((i-r)/s),l=a-c,d=a+c,u=(A,m,p)=>new Bs(A.x+m*Math.cos(p),A.y+m*Math.sin(p)),h=new Dc;return h.addFace([new Bp(u(e,i,l),u(t,r,l)),new d0(J5(t),r,l,d,!0),new Bp(u(t,r,d),u(e,i,d)),new d0(J5(e),i,d,l,!0)]),h}function dme(e,t){let n=e.clone(),o=[...n.faces][0].orientation();for(let i of t){let r=i.clone();if([...r.faces][0].orientation()===o)r.reverse();for(let s of r.faces)n.addFace(s.shapes)}return n}function ime(e,t,n,o=0,i=0.001){if(n6(t,"ellipse width"),n6(n,"ellipse height"),n6(i,"curveTolerance"),Math.abs(t-n)<X7)return Jf(e,t/2);let r=Math.max(t,n)/2,s=Math.max(16,Math.ceil(Math.PI/Math.acos(Math.max(-1,1-i/r))));if(s>1e5)throw Error("curveTolerance requires more than 100000 ellipse segments");return dx(Array.from({length:s},(a,c)=>({x:t/2*Math.cos(c*2*Math.PI/s),y:n/2*Math.sin(c*2*Math.PI/s)}))).rotate(o*Math.PI/180).translate(new Lz(e.x,e.y))}function iuo(e,t){if(t.copperLayers){if(!t.copperLayers.length||new Set(t.copperLayers).size!==t.copperLayers.length)throw Error("copperLayers must be a non-empty list without duplicates");return[...t.copperLayers]}let o=e.find((i)=>i.type==="pcb_board")?.num_layers??2;for(let i of e){let r="layers"in i?i.layers:("layer"in i)?[i.layer]:[];if(Array.isArray(r))for(let s of r){let a=typeof s==="string"&&/^inner(\d+)$/.exec(s);if(a)o=Math.max(o,Number(a[1])+2)}if(i.type==="pcb_trace")for(let s of i.route)for(let a of s.route_type==="wire"?[s.layer]:s.route_type==="via"?[s.from_layer,s.to_layer]:[s.start_layer,s.end_layer]){let c=/^inner(\d+)$/.exec(a);if(c)o=Math.max(o,Number(c[1])+2)}}if(!Number.isInteger(o)||o<1||o>10)throw Error("Supported copper layer count is 1–10");return o===1?["top"]:["top",...Array.from({length:o-2},(i,r)=>`inner${r+1}`),"bottom"]}function D$(e,t){if(!e.length)return[];let n=e.map((o)=>t.indexOf(o));if(n.some((o)=>o<0))throw Error(`Layer is missing from copperLayers: ${e.join(", ")}`);return t.slice(Math.min(...n),Math.max(...n)+1)}function ruo(e){switch(e.shape){case"circle":return Jf(e,e.radius);case"polygon":return dx(e.points);case"rect":case"rotated_rect":return wg(e,e.width,e.height,"ccw_rotation"in e?e.ccw_rotation:0,e.rect_border_radius??e.corner_radius??0);case"pill":case"rotated_pill":return wg(e,e.width,e.height,"ccw_rotation"in e?e.ccw_rotation:0,e.radius)}}function suo(e,t){switch(e.hole_shape){case"circle":return Jf(e,e.hole_diameter/2);case"square":return wg(e,e.hole_diameter,e.hole_diameter);case"rect":return wg(e,e.hole_width,e.hole_height);case"oval":return ime(e,e.hole_width,e.hole_height,0,t);case"pill":case"rotated_pill":return wg(e,e.hole_width,e.hole_height,"ccw_rotation"in e?e.ccw_rotation:0,Math.min(e.hole_width,e.hole_height)/2)}}function auo(e,t,n,o){let i,r,s={x:e.x+("hole_offset_x"in e?e.hole_offset_x??0:0),y:e.y+("hole_offset_y"in e?e.hole_offset_y??0:0)};switch(e.shape){case"circle":i=Jf(e,e.outer_diameter/2),r=Jf(e,e.hole_diameter/2);break;case"oval":i=ime(e,e.outer_width,e.outer_height,e.ccw_rotation,o),r=ime(e,e.hole_width,e.hole_height,e.ccw_rotation,o);break;case"pill":i=wg(e,e.outer_width,e.outer_height,e.ccw_rotation,Math.min(e.outer_width,e.outer_height)/2),r=wg(e,e.hole_width,e.hole_height,e.ccw_rotation,Math.min(e.hole_width,e.hole_height)/2);break;case"circular_hole_with_rect_pad":case"pill_hole_with_rect_pad":case"rotated_pill_hole_with_rect_pad":i=wg(e,e.rect_pad_width,e.rect_pad_height,"rect_ccw_rotation"in e?e.rect_ccw_rotation:0,e.rect_border_radius??0),r=e.shape==="circular_hole_with_rect_pad"?Jf(s,e.hole_diameter/2):wg(s,e.hole_width,e.hole_height,"hole_ccw_rotation"in e?e.hole_ccw_rotation:0,Math.min(e.hole_width,e.hole_height)/2);break;case"hole_with_polygon_pad":{let a=e.ccw_rotation??t;i=dx(e.pad_outline).rotate(a*Math.PI/180).translate(new Lz(e.x,e.y)),r=e.hole_shape==="circle"?Jf(s,e.hole_diameter/2):e.hole_shape==="oval"?ime(s,e.hole_width,e.hole_height,a,o):wg(s,e.hole_width,e.hole_height,a,Math.min(e.hole_width,e.hole_height)/2);break}}return n?dme(i,[r]):i}var Kwe=(e,t)=>e.x===t.x&&e.y===t.y,$gt=(e,t)=>{let n=Math.hypot(e,t);return n?{x:e/n,y:t/n}:{x:1,y:0}};function cuo(e){let t=[{...e[0].start,width:e[0].startWidth},...e.map((r)=>({...r.end,width:r.endWidth}))],n=e.map((r)=>$gt(r.end.x-r.start.x,r.end.y-r.start.y)),o=[],i=[];for(let r=0;r<t.length;r++){let s=t[r];n6(s.width,"interpolated trace width");let a=n[Math.max(0,r-1)],c=n[Math.min(r,n.length-1)],l=$gt(a.x+c.x,a.y+c.y),d=-l.y*s.width/2,u=l.x*s.width/2;o.push({x:s.x+d,y:s.y+u}),i.push({x:s.x-d,y:s.y-u})}return dx([...o,...i.reverse()])}function luo(e,t){try{return Qz.subtract(e,t)}catch(n){if(!(n instanceof Error)||n.message!=="Unresolved boundary conflict in boolean operation")throw n;let o=new T_(1000,0,0,1000,0,0),i=new T_(0.001,0,0,0.001,0,0);return Qz.subtract(e.transform(o),t.transform(o)).transform(i)}}function duo(e,t,n){let o=new Map,i=new Map,r=[],s=(a,c)=>o.set(a,[...o.get(a)??[],c]);for(let a of e.route){if(a.route_type==="via"){let c=a,l=a.outer_diameter??c.via_diameter;if(l===void 0)continue;let d=a.hole_diameter??c.via_hole_diameter,u=Jf(a,l/2),h=n&&d?Jf(a,d/2):void 0;for(let A of D$([a.from_layer,a.to_layer],t))if(s(A,h?dme(u,[h]):u),h)i.set(A,[...i.get(A)??[],h])}if(a.route_type==="through_pad")for(let c of new Set([a.start_layer,a.end_layer]))s(c,c7e(a.start,a.end,a.width))}for(let a=0;a<e.route.length-1;a++){let c=e.route[a],l=e.route[a+1],d=c.route_type==="through_pad"?c.end:c,u=l.route_type==="through_pad"?l.start:l;if(Kwe(d,u))continue;let h=c.route_type==="wire"?[c.layer]:c.route_type==="via"?D$([c.from_layer,c.to_layer],t):[c.end_layer],A=l.route_type==="wire"?[l.layer]:l.route_type==="via"?D$([l.from_layer,l.to_layer],t):[l.start_layer],m=h.filter((_)=>A.includes(_));if(m.length!==1)throw Error(`Cannot determine one wire layer between route points ${a} and ${a+1}`);let p=m[0],g="width"in c?c.width:("width"in l)?l.width:void 0;if(g===void 0||Kwe(d,u))continue;r.push({start:d,end:u,layer:p,startWidth:g,endWidth:"width"in l?l.width:g})}if(e.route_thickness_mode==="interpolated"){let a=[],c=()=>{if(a.length)s(a[0].layer,cuo(a)),a=[]};for(let l of r){let d=a.at(-1);if(d&&(d.layer!==l.layer||!Kwe(d.end,l.start)||d.endWidth!==l.startWidth))c();a.push(l)}c()}else for(let a of r)s(a.layer,c7e(a.start,a.end,a.startWidth));for(let[a,c]of i)o.set(a,o.get(a).map((l)=>c.reduce((d,u)=>luo(d,u),l)).filter((l)=>l.faces.size>0));return o}var uuo=["pcb_board","pcb_smtpad","pcb_plated_hole","pcb_hole","pcb_via","pcb_trace","pcb_copper_pour","pcb_cutout","pcb_keepout","pcb_courtyard_rect","pcb_courtyard_circle","pcb_courtyard_pill","pcb_courtyard_polygon","pcb_courtyard_outline"];function huo(e){switch(e.shape){case"circle":return[Jf(e.center,e.radius)];case"rect":return[wg(e.center,e.width,e.height,e.rotation,e.corner_radius)];case"polygon":return[dx(e.points)];case"path":{if(e.slot_length!==void 0||e.space_between_slots!==void 0||e.slot_corner_radius!==void 0)throw Error("Patterned/custom-corner path cutouts are not supported; use explicit rect/polygon cutouts");return e.route.slice(1).map((t,n)=>c7e(e.route[n],t,e.slot_width))}}}function iY(e,t={}){if(t.layer&&t.layers)throw Error("Specify layer or layers, not both");let n=t.layer?[t.layer]:t.layers,o=iuo(e,t),i={elements:[],warnings:[],bounds:void 0,copperLayers:o},r=new Map(e.filter((c)=>c.type==="pcb_component").map((c)=>[c.pcb_component_id,c.rotation])),s=t.curveTolerance??0.001;if(!Number.isFinite(s)||s<=0)throw Error("curveTolerance must be finite and positive");let a=t.includeDrillHoles!==!1;for(let c of e){if(!uuo.includes(c.type))continue;let l=c[`${c.type}_id`];if(t.elementTypes&&!t.elementTypes.includes(c.type))continue;if(t.elementIds&&!t.elementIds.includes(l))continue;let d="copper",u=[null],h=[],A;try{switch(c.type){case"pcb_smtpad":u=[c.layer],h=[ruo(c)];break;case"pcb_plated_hole":u=D$(c.layers,o),h=[auo(c,r.get(c.pcb_component_id??"")??0,a,s)];break;case"pcb_via":{u=D$(c.layers,o);let p=Jf(c,c.outer_diameter/2);h=[a?dme(p,[Jf(c,c.hole_diameter/2)]):p];break}case"pcb_trace":A=duo(c,o,a),u=[...A.keys()];break;case"pcb_copper_pour":u=[c.layer],h=[c.shape==="rect"?wg(c.center,c.width,c.height,c.rotation):c.shape==="polygon"?dx(c.points):dme(dx(c.brep_shape.outer_ring.vertices),c.brep_shape.inner_rings.map((p)=>dx(p.vertices)))];break;case"pcb_board":d="board",h=[c.outline?.length?dx(c.outline):wg(c.center,c.width,c.height)];break;case"pcb_hole":d="drill",h=[suo(c,s)];break;case"pcb_cutout":d="cutout",h=huo(c);break;case"pcb_keepout":d="keepout",u=c.layers,h=[c.shape==="circle"?Jf(c.center,c.radius):c.shape==="rect"?wg(c.center,c.width,c.height):dx(c.outline)];break;case"pcb_courtyard_rect":d="courtyard",u=[c.layer],h=[wg(c.center,c.width,c.height,c.ccw_rotation)];break;case"pcb_courtyard_circle":d="courtyard",u=[c.layer],h=[Jf(c.center,c.radius)];break;case"pcb_courtyard_pill":d="courtyard",u=[c.layer],h=[wg(c.center,c.width,c.height,0,c.radius)];break;case"pcb_courtyard_polygon":d="courtyard",u=[c.layer],h=[dx(c.points)];break;case"pcb_courtyard_outline":d="courtyard",u=[c.layer],h=[dx(c.outline)];break}if(t.roles&&!t.roles.includes(d))continue;let m=[];for(let p of new Set(u)){if(p===null?t.includeLayerless===!1:n&&!n.includes(p))continue;let g=A?.get(p)??h;if(!g.length)continue;let _=g.reduce((y,x)=>y.merge(x.box),g[0].box);if(![_.xmin,_.ymin,_.xmax,_.ymax].every(Number.isFinite))throw Error("Non-finite geometry bounds");let f={elementId:l,elementType:c.type,sourceElement:c,role:d,layer:p,shapes:g,bounds:_};m.push(f)}for(let p of m)i.elements.push(p),i.bounds=i.bounds?i.bounds.merge(p.bounds):p.bounds}catch(m){let p=m instanceof Error?m.message:String(m);if(t.strict)throw Error(`${l}: ${p}`);i.warnings.push({elementId:l,elementType:c.type,message:p})}}return i}function muo(e,t){if(!e.box.intersect(t.box))return!1;return e.intersect(t).some((o)=>Zgt(e,o)&&Zgt(t,o))||[...t.faces].some((o)=>Jgt(e,o.first.start))||[...e.faces].some((o)=>Jgt(t,o.first.start))}function Zgt(e,t){let n=$2.getTolerance();return e.edges.search(new vA(t.x-n,t.y-n,t.x+n,t.y+n)).length>0}function puo(e,{connMap:t}={}){if(!e.some((s)=>s.type==="pcb_copper_pour"))return[];t??=js(e);let{elements:n}=iY(e,{elementTypes:["pcb_smtpad","pcb_plated_hole","pcb_via","pcb_trace","pcb_copper_pour"],strict:!0}),o=new Map;for(let s of n){let a=o.get(s.layer)??[];for(let c of s.shapes)a.push({element:s,shape:c});o.set(s.layer,a)}let i=new Map([...o].map(([s,a])=>{let c=new cx(a.length);for(let{shape:l}of a){let d=l.box;c.add(d.xmin,d.ymin,d.xmax,d.ymax)}return c.finish(),[s,{index:c,entries:a}]})),r=new Map;for(let s of n){let a=s.sourceElement;if(a.type!=="pcb_copper_pour")continue;let c=a.source_net_id,{index:l,entries:d}=i.get(s.layer),u=new Set;for(let h of s.shapes){let A=h.box;for(let m of l.search(A.xmin,A.ymin,A.xmax,A.ymax))u.add(m)}for(let h of[...u].sort((A,m)=>A-m)){let{element:A,shape:m}=d[h];if(s.elementId===A.elementId)continue;let p=A.sourceElement.type==="pcb_copper_pour"?A.sourceElement.source_net_id:A.elementId;if(c&&p&&(c===p||t.areIdsConnected(c,p)))continue;let g=`copper_pour_short_${[s.elementId,A.elementId].sort().join("_")}`;if(r.has(g)||!s.shapes.some((_)=>muo(_,m)))continue;r.set(g,{type:"pcb_placement_error",pcb_placement_error_id:g,error_type:"pcb_placement_error",message:`Copper pour ${ys(e,s.elementId)} (${c?ys(e,c):"unassigned net"}) shorts to ${ys(e,A.elementId)} on ${s.layer} (accidental copper contact)`,subcircuit_id:a.subcircuit_id})}}return[...r.values()]}var J0e=0.000000001;function Vft(e){let t=new Map(e.filter((l)=>l.type==="pcb_port").map((l)=>[l.pcb_port_id,l])),n=e.filter((l)=>l.type==="pcb_smtpad"||l.type==="pcb_plated_hole"),o=new Map;for(let l of n){if(!l.pcb_port_id)continue;let d=o.get(l.pcb_port_id)??[];d.push(l),o.set(l.pcb_port_id,d)}let i=e.filter((l)=>l.type==="pcb_via"),r,s=()=>{if(r)return r;r=i.map((u)=>({...u,diameter:u.outer_diameter}));let l=e.find((u)=>u.type==="pcb_board"),d=["top",...Ep.filter((u)=>u.startsWith("inner")).slice(0,l?Math.max(0,l.num_layers-2):void 0),...l?.num_layers===1?[]:["bottom"]];for(let u of e){if(u.type!=="pcb_trace")continue;for(let h of u.route){if(h.route_type!=="via")continue;if(i.some((p)=>Math.hypot(p.x-h.x,p.y-h.y)<=J0e))continue;let A=d.indexOf(h.from_layer),m=d.indexOf(h.to_layer);if(A<0||m<0)continue;r.push({...h,layers:d.slice(Math.min(A,m),Math.max(A,m)+1),diameter:h.outer_diameter})}}return r},a=(l)=>{let d=o.get(l.pcb_port_id);return d?.length?[...new Set(d.flatMap(kp))]:l.layers};return{ports:t,layersForPort:a,canConnect:(l,d)=>{let u=t.get(d);if(!u)return!0;let h=a(u);if(h.includes(l.layer))return!0;let A=o.get(d)??[];return s().some((m)=>{if(!m.layers.includes(l.layer)||!h.some((g)=>m.layers.includes(g)))return!1;if(m.diameter!==void 0&&(!Number.isFinite(m.diameter)||m.diameter<=0))return!1;let p=m.diameter===void 0?0:m.diameter/2+l.width/2;if(Math.hypot(l.x-m.x,l.y-m.y)>p+J0e)return!1;if(A.length===0)return Math.hypot(u.x-m.x,u.y-m.y)<=J0e;return A.some((g)=>{if(!kp(g).some((_)=>m.layers.includes(_)))return!1;if(m.diameter===void 0)return aY(m,g);return ux({type:"pcb_via",pcb_via_id:"layer-contact",x:m.x,y:m.y,outer_diameter:m.diameter,hole_diameter:0,layers:m.layers},g)<=J0e})})}}}function Uft(e){let t=Vft(e);return e.flatMap((n)=>{if(n.type!=="pcb_trace")return[];return n.route.flatMap((o,i)=>{if(o.route_type!=="wire")return[];return[...new Set([o.start_pcb_port_id,o.end_pcb_port_id])].flatMap((r)=>{if(!r||t.canConnect(o,r))return[];let s=t.ports.get(r);return[{trace:n,point:o,index:i,port:s,padLayers:t.layersForPort(s)}]})})})}function Auo(e){if(!e.some((m)=>m.type==="pcb_via"||m.type==="pcb_plated_hole"||m.type==="pcb_copper_pour"||m.type==="pcb_trace"&&m.route.some((p)=>p.route_type==="via")))return[];let t=[],n=[],o=1e6,i=0.0000001*o,r=g7e(i),s=(m,p,g,_=!1,f=!1)=>{if(!g.isEmpty()){let y=g.scale(o,o);t.push({id:m,layers:p,geometry:{polygon:y},box:y.box,bridges:_,platedPort:f})}},a=new Map,c=(m)=>{if("polygon"in m.geometry)return m.geometry.polygon;let p=a.get(m);if(!p){let{start:g,end:_}=m.geometry;p=$R(g,_,g.width).scale(o,o),a.set(m,p)}return p},l=e.filter((m)=>m.type==="pcb_via"),d=new Map(e.filter((m)=>m.type==="pcb_component").map((m)=>[m.pcb_component_id,m])),u=e.find((m)=>m.type==="pcb_board"),h=["top",...Ep.filter((m)=>m.startsWith("inner")).slice(0,u?Math.max(0,u.num_layers-2):void 0),...u?.num_layers===1?[]:["bottom"]];for(let m of e)if(m.type==="pcb_via"){if(s(m.pcb_via_id,m.layers,A7(m,m.outer_diameter/2),!0),m.pcb_trace_id)n.push([m.pcb_via_id,m.pcb_trace_id])}else if(m.type==="pcb_plated_hole"){if(!m.pcb_port_id)continue;let p={...m,hole_offset_x:"hole_offset_x"in m?m.hole_offset_x??0:0,hole_offset_y:"hole_offset_y"in m?m.hole_offset_y??0:0};s(m.pcb_port_id,m.layers,y7(p,m.pcb_component_id?d.get(m.pcb_component_id)?.rotation:0),!0,!0)}else if(m.type==="pcb_copper_pour")s(m.pcb_copper_pour_id,[m.layer],g7(m),!0);else if(m.type==="pcb_trace"){if(m.route_thickness_mode==="interpolated")continue;for(let p=0;p<m.route.length;p++){let g=m.route[p],_=m.route[p+1];if(g.route_type==="wire"&&_?.route_type==="wire"&&g.layer===_.layer&&(g.x!==_.x||g.y!==_.y))if(g.width>0){let f=g.width/2;t.push({id:m.pcb_trace_id,layers:[g.layer],geometry:{start:g,end:_},box:{xmin:(Math.min(g.x,_.x)-f)*o,ymin:(Math.min(g.y,_.y)-f)*o,xmax:(Math.max(g.x,_.x)+f)*o,ymax:(Math.max(g.y,_.y)+f)*o},bridges:!1,platedPort:!1})}else s(m.pcb_trace_id,[g.layer],$R(g,_,g.width));else if(g.route_type==="via"){if(l.some((C)=>C.pcb_trace_id===m.pcb_trace_id&&Math.hypot(C.x-g.x,C.y-g.y)<0.000000001))continue;let f=h.indexOf(g.from_layer),y=h.indexOf(g.to_layer);if(f<0||y<0||!g.outer_diameter)continue;let x={type:"pcb_via",pcb_via_id:`${m.pcb_trace_id}_via_${p}`,x:g.x,y:g.y,outer_diameter:g.outer_diameter,hole_diameter:0,layers:h.slice(Math.min(f,y),Math.max(f,y)+1)};s(m.pcb_trace_id,x.layers,A7(x,x.outer_diameter/2),!0)}}}if(!t.length)return n;let A=new cx(t.length);for(let{box:m}of t)A.add(m.xmin,m.ymin,m.xmax,m.ymax);A.finish();for(let[m,p]of t.entries()){if(!p.bridges)continue;let g=p.box;for(let _ of A.search(g.xmin-i,g.ymin-i,g.xmax+i,g.ymax+i)){let f=t[_];if(p.platedPort&&f.bridges||f.platedPort&&p.bridges||m===_||p.id===f.id||f.bridges&&_<m||!p.layers.some((y)=>f.layers.includes(y)))continue;if(r(c(p),c(f)))n.push([p.id,f.id])}}return n}function f7e(e){let t=new vz;t.circuitJson=e;for(let c of e)if(c.type==="pcb_trace")t.traceIdToElm.set(c.pcb_trace_id,c);else if(c.type==="pcb_port")t.portIdToElm.set(c.pcb_port_id,c);let n=[...t.traceIdToElm.values()],o=new Map;for(let[c,l]of n.entries())for(let d=0;d<l.route.length-1;d++){let u=l.route[d],h=l.route[d+1];if(u.route_type!=="wire"||h.route_type!=="wire"||u.layer!==h.layer)continue;let A=u.width/2+0.000000001,m=o.get(u.layer)??[];m.push({traceIndex:c,segmentTrace:{...l,route:[u,h]},minX:Math.min(u.x,h.x)-A,minY:Math.min(u.y,h.y)-A,maxX:Math.max(u.x,h.x)+A,maxY:Math.max(u.y,h.y)+A}),o.set(u.layer,m)}let i=n.map(()=>new Set);for(let c of o.values()){let l=new cx(c.length);for(let d of c)l.add(d.minX,d.minY,d.maxX,d.maxY);l.finish();for(let d of c)for(let u of l.search(d.minX,d.minY,d.maxX,d.maxY)){let h=c[u],A=h.traceIndex,m=i[d.traceIndex];if(A>d.traceIndex&&!m.has(A)&&t._arePcbTracesConnected(d.segmentTrace,h.segmentTrace))m.add(A)}}let r=[];for(let[c,l]of i.entries())for(let d of[...l].sort((u,h)=>u-h))r.push([n[c].pcb_trace_id,n[d].pcb_trace_id]);let s=Vft(e),a=new Map;for(let c of n)for(let l of c.route){if(l.route_type!=="wire")continue;for(let d of new Set([l.start_pcb_port_id,l.end_pcb_port_id])){if(!d||!t.portIdToElm.has(d))continue;if(!s.canConnect(l,d))continue;let u=a.get(d)??[];u.push(l.start_pcb_port_id===d?[d,c.pcb_trace_id]:[c.pcb_trace_id,d]),a.set(d,u)}}for(let c of t.portIdToElm.keys())for(let l of a.get(c)??[])r.push(l);return r.push(...Auo(e)),t.connMap=new dy(TM(r)),t}function eft(e,t,n,o){return Math.sqrt((n-e)**2+(o-t)**2)}var y7e=(e)=>{let t=e.filter((r)=>r.type==="pcb_port"),n=e.filter((r)=>r.type==="pcb_smtpad"),o=e.filter((r)=>r.type==="pcb_trace");function i(r,s={}){let a=s.traceWidth||0,c=t.find((l)=>l.layers.includes(r.layer)&&eft(l.x,l.y,r.x,r.y)<0.01);if(c)return c.pcb_port_id;if(s.isFirstOrLastPoint){let l=n.find((d)=>{if(d.layer!==r.layer)return!1;if(d.shape==="rect")return Math.abs(r.x-d.x)<d.width/2+a/2&&Math.abs(r.y-d.y)<d.height/2+a/2;else if(d.shape==="circle")return eft(r.x,r.y,d.x,d.y)<d.radius;else if(d.shape==="pill"||d.shape==="rotated_pill")return aY(r,d)});if(l)return l.pcb_port_id??null}return null}for(let r of o)for(let s=0;s<r.route.length;s++){let a=r.route[s],c=s===0||s===r.route.length-1;if(a.route_type==="wire"){if(!a.start_pcb_port_id&&s===0){let l=i(a,{isFirstOrLastPoint:c,traceWidth:a.width});if(l)a.start_pcb_port_id=l}if(!a.end_pcb_port_id&&s===r.route.length-1){let l=i(a,{isFirstOrLastPoint:c,traceWidth:a.width});if(l)a.end_pcb_port_id=l}}}};function Wft(e,t){let i=g7e(0.09999999999999999),r=[],s=new Set,a=(_)=>t.getNetConnectedToId(_),c=(_)=>{if(!_.polygon.isEmpty())r.push({..._,polygon:_.polygon.scale(1e6,1e6)})};for(let _ of e){if(_.type!=="pcb_copper_pour"||!_.source_net_id)continue;let f=a(_.source_net_id);if(!f)continue;s.add(f),c({polygon:g7(_),layers:[_.layer],netId:f,isPour:!0})}let l=new Map(e.filter((_)=>_.type==="pcb_component").map((_)=>[_.pcb_component_id,_]));if(s.size>0)for(let _ of e){if(_.type==="pcb_trace"){let y=a(_.pcb_trace_id);if(!y||!s.has(y)||_.route_thickness_mode==="interpolated")continue;for(let x=0;x<_.route.length-1;x++){let C=_.route[x],I=_.route[x+1];if(C.route_type!=="wire"||I.route_type!=="wire"||C.layer!==I.layer)continue;c({polygon:$R(C,I,C.width),layers:[C.layer],netId:y})}continue}if(_.type!=="pcb_smtpad"&&_.type!=="pcb_plated_hole"&&_.type!=="pcb_via")continue;let f=a(pa(_));if(!f||!s.has(f))continue;if(_.type==="pcb_smtpad")c({polygon:Gz(_),layers:[_.layer],netId:f,portIds:_.pcb_port_id?[_.pcb_port_id]:[]});else if(_.type==="pcb_plated_hole")c({polygon:y7(_,_.pcb_component_id?l.get(_.pcb_component_id)?.rotation:0),layers:_.layers,netId:f,portIds:_.pcb_port_id?[_.pcb_port_id]:[]});else c({polygon:f7(_,_.outer_diameter,_.hole_diameter),layers:_.layers,netId:f,portIds:_.pcb_port_ids})}let d=r.map((_,f)=>f),u=(_)=>{while(d[_]!==_)d[_]=d[d[_]],_=d[_];return _},h=r.map((_)=>_.polygon.box),A=r.map((_,f)=>f).sort((_,f)=>h[_].xmin-h[f].xmin);for(let _=0;_<A.length;_++){let f=A[_];for(let y=_+1;y<A.length;y++){let x=A[y];if(h[x].xmin>h[f].xmax+0.09999999999999999)break;if(u(f)===u(x)||r[f].netId!==r[x].netId)continue;if(h[x].ymin>h[f].ymax+0.09999999999999999||h[x].ymax<h[f].ymin-0.09999999999999999)continue;if(!r[f].layers.some((C)=>r[x].layers.includes(C)))continue;if(i(r[f].polygon,r[x].polygon))d[u(x)]=u(f)}}let m=new Set(r.flatMap((_,f)=>_.isPour?[u(f)]:[])),p=new Map;for(let[_,f]of r.entries()){if(!m.has(u(_)))continue;for(let y of f.portIds??[]){let x=p.get(y)??new Set;x.add(u(_)),p.set(y,x)}}let g=new Map;for(let _ of e){if(_.type!=="pcb_port")continue;let f=a(_.pcb_port_id);if(!f||!s.has(f))continue;let y=g.get(f)??[];y.push(_.pcb_port_id),g.set(f,y)}return{isPortConnectedToNet(_,f){let y=p.get(_);return f.every((x)=>[...y??[]].some((C)=>r[C].netId===a(x)&&(g.get(r[C].netId)??[]).every((I)=>p.get(I)?.has(C))))},arePortsConnected(_){if(_.length<2)return!1;return[...p.get(_[0])??[]].some((f)=>_.every((y)=>p.get(y)?.has(f)))}}}function _uo(e,{connMap:t,pcbConnectivityMap:n}={}){y7e(e);let o=e.filter((h)=>h.type==="source_trace"),i=e.filter((h)=>h.type==="pcb_port"),r=e.filter((h)=>h.type==="source_net"),s=Uft(e).map(({trace:h,point:A,index:m,port:p,padLayers:g})=>({type:"pcb_port_not_connected_error",error_type:"pcb_port_not_connected_error",pcb_port_not_connected_error_id:`missing_layer_connection_${h.pcb_trace_id}_${m}_${p.pcb_port_id}`,pcb_port_ids:[p.pcb_port_id],pcb_component_ids:p.pcb_component_id?[p.pcb_component_id]:[],center:{x:A.x,y:A.y},message:`Port [${tE(e,p.pcb_port_id)}] on ${g.join(", ")} is not connected to trace [${t6(e,h.pcb_trace_id)}] on ${A.layer}: missing via connection.`})),a=t??js(e);n??=f7e(e);let c,l=()=>c??=Wft(e,a),d=new Map;for(let h of i)d.set(h.source_port_id,h);let u=new Map(r.map((h)=>[h.source_net_id,h.name]));for(let h of o){let A=h.connected_source_port_ids;if(A.length===1&&h.connected_source_net_ids.length>0){let x=d.get(A[0]);if(!x)continue;if(n.getAllTracesConnectedToPort(x.pcb_port_id).length===0&&!l().isPortConnectedToNet(x.pcb_port_id,h.connected_source_net_ids)){let I=h.connected_source_net_ids.map((P)=>u.get(P)).filter((P)=>Boolean(P)),b=I.length>0?`net [${I.join(", ")}]`:"its connected net";s.push({type:"pcb_port_not_connected_error",message:`Port [${tE(e,x.pcb_port_id)}] is not connected to ${b} by a PCB trace.`,error_type:"pcb_port_not_connected_error",pcb_port_ids:[x.pcb_port_id],pcb_component_ids:x.pcb_component_id?[x.pcb_component_id]:[],pcb_port_not_connected_error_id:`pcb_port_not_connected_error_trace_${h.source_trace_id}`})}continue}if(A.length<2)continue;let m=[],p=[];for(let x of A){let C=d.get(x);if(C)m.push(C);else p.push(x)}if(m.length<2)continue;let g=m[0],_=a.getNetConnectedToId(g.pcb_port_id);if(a.getIdsConnectedToNet(_).filter((x)=>e.some((C)=>C.type==="pcb_trace"&&(("pcb_trace_id"in C)&&C.pcb_trace_id===x||("route_id"in C)&&C.route_id===x))).length===0&&!l().arePortsConnected(m.map((x)=>x.pcb_port_id))){if(new Set(m.map((C)=>C.pcb_component_id)).size>1)s.push({type:"pcb_port_not_connected_error",message:`Ports [${m.map((C)=>tE(e,C.pcb_port_id)).join(", ")}] are not connected together through the same net.`,error_type:"pcb_port_not_connected_error",pcb_port_ids:m.map((C)=>C.pcb_port_id),pcb_component_ids:m.map((C)=>C.pcb_component_id).filter((C)=>C!==void 0),pcb_port_not_connected_error_id:`pcb_port_not_connected_error_trace_${h.source_trace_id}`})}}return s}var Xft=(e)=>iY(e.filter((t)=>t.type==="pcb_hole"),{elementTypes:["pcb_hole"],strict:!0,curveTolerance:0.000001}).elements,Kft=(e,t)=>{let n=t.sourceElement;if(n.type!=="pcb_hole")throw Error("Expected hole geometry");let o=new Bs(e.x1,e.y1),i=new Bs(e.x2,e.y2),r=1/0,s=Xf(n,o,i);if(n.hole_shape==="circle")r=qs(n,o,i)-n.hole_diameter/2;else{let a=new Bp(o,i);for(let c of t.shapes){let[l,d]=c.distanceTo(a),u=c.contains(o)||c.contains(i)?0:l;if(u<r)r=u,s=d.end}}return{gap:r-e.thickness/2,center:s}},cY=class{buckets;objectsById;getBounds;getId;CELL_SIZE=0.4;constructor({objects:e,getBounds:t,getId:n,CELL_SIZE:o}){this.buckets=new Map,this.objectsById=new Map,this.getBounds=t,this.getId=n??(()=>this._getNextId()),this.CELL_SIZE=o??this.CELL_SIZE;for(let i of e)this.addObject(i)}_idCounter=0;_getNextId(){return`${this._idCounter++}`}addObject(e){let t=this.getBounds(e),n=this.getId(e),o={...e,spatialIndexId:n};this.objectsById.set(n,o);let i=Math.floor(t.minX/this.CELL_SIZE),r=Math.floor(t.minY/this.CELL_SIZE),s=Math.floor(t.maxX/this.CELL_SIZE),a=Math.floor(t.maxY/this.CELL_SIZE);for(let c=i;c<=s;c++)for(let l=r;l<=a;l++){let d=`${c}x${l}`,u=this.buckets.get(d);if(!u)this.buckets.set(d,[o]);else u.push(o)}}removeObject(e){let t=this.objectsById.get(e);if(!t)return!1;this.objectsById.delete(e);let n=this.getBounds(t),o=Math.floor(n.minX/this.CELL_SIZE),i=Math.floor(n.minY/this.CELL_SIZE),r=Math.floor(n.maxX/this.CELL_SIZE),s=Math.floor(n.maxY/this.CELL_SIZE);for(let a=o;a<=r;a++)for(let c=i;c<=s;c++){let l=`${a}x${c}`,d=this.buckets.get(l);if(d){let u=d.findIndex((h)=>h.spatialIndexId===e);if(u!==-1){if(d.splice(u,1),d.length===0)this.buckets.delete(l)}}}return!0}getBucketKey(e,t){return`${Math.floor(e/this.CELL_SIZE)}x${Math.floor(t/this.CELL_SIZE)}`}getObjectsInBounds(e,t=0){let n=[],o=new Set,i=Math.floor((e.minX-t)/this.CELL_SIZE),r=Math.floor((e.minY-t)/this.CELL_SIZE),s=Math.floor((e.maxX+t)/this.CELL_SIZE),a=Math.floor((e.maxY+t)/this.CELL_SIZE);for(let c=i;c<=s;c++)for(let l=r;l<=a;l++){let d=`${c}x${l}`,u=this.buckets.get(d)||[];for(let h of u){let A=h.spatialIndexId;if(o.has(A))continue;o.add(A),n.push(h)}}return n}},tft=(e,t)=>{let n={x:e.x1,y:e.y1},o={x:e.x2,y:e.y2},{minX:i,minY:r,maxX:s,maxY:a}=t;if(n.x===o.x&&n.y===o.y){let P=Math.max(i,Math.min(s,n.x)),E=Math.max(r,Math.min(a,n.y));if(P===n.x&&E===n.y)return{x:n.x,y:n.y};return{x:P,y:E}}let c=o.x-n.x,l=o.y-n.y,d=c!==0?(i-n.x)/c:Number.NEGATIVE_INFINITY,u=c!==0?(s-n.x)/c:Number.POSITIVE_INFINITY,h=l!==0?(r-n.y)/l:Number.NEGATIVE_INFINITY,A=l!==0?(a-n.y)/l:Number.POSITIVE_INFINITY,m=Math.max(Math.min(d,u),Math.min(h,A)),p=Math.min(Math.max(d,u),Math.max(h,A));if(m<=p&&p>=0&&m<=1){let P=Math.max(0,Math.min(1,m));return{x:n.x+P*c,y:n.y+P*l}}let g={x:Math.max(i,Math.min(s,n.x)),y:Math.max(r,Math.min(a,n.y))},_={x:Math.max(i,Math.min(s,o.x)),y:Math.max(r,Math.min(a,o.y))},f=(g.x-n.x)**2+(g.y-n.y)**2,y=(_.x-o.x)**2+(_.y-o.y)**2,x=[{start:{x:i,y:r},end:{x:s,y:r}},{start:{x:s,y:r},end:{x:s,y:a}},{start:{x:s,y:a},end:{x:i,y:a}},{start:{x:i,y:a},end:{x:i,y:r}}],C=Math.min(f,y),I=f<=y?g:_,b=(P,E,B)=>Math.max(E,Math.min(B,P));for(let P of x){let E={x:o.x-n.x,y:o.y-n.y},B={x:P.end.x-P.start.x,y:P.end.y-P.start.y},w={x:n.x-P.start.x,y:n.y-P.start.y},T=E.x*E.x+E.y*E.y,Q=E.x*B.x+E.y*B.y,N=E.x*w.x+E.y*w.y,F=B.x*B.x+B.y*B.y,H=B.x*w.x+B.y*w.y,z=T*F-Q*Q;if(Math.abs(z)<0.0000000001)continue;let Y=(Q*H-F*N)/z,U=(T*H-Q*N)/z;Y=b(Y,0,1),U=b(U,0,1);let X={x:n.x+Y*E.x,y:n.y+Y*E.y},V={x:P.start.x+U*B.x,y:P.start.y+U*B.y},W=X.x-V.x,j=X.y-V.y,q=W*W+j*j;if(q<C)C=q,I={x:(X.x+V.x)/2,y:(X.y+V.y)/2}}return I},$G=(e)=>{if(e.type==="pcb_hole"&&(e.hole_shape==="pill"||e.hole_shape==="rotated_pill")||e.type==="pcb_smtpad"&&e.shape==="rotated_pill"){let t=ZM(e);return{minX:Math.min(t.start.x,t.end.x)-t.radius,minY:Math.min(t.start.y,t.end.y)-t.radius,maxX:Math.max(t.start.x,t.end.x)+t.radius,maxY:Math.max(t.start.y,t.end.y)+t.radius}}if(e.type==="pcb_trace_segment")return{minX:Math.min(e.x1,e.x2),minY:Math.min(e.y1,e.y2),maxX:Math.max(e.x1,e.x2),maxY:Math.max(e.y1,e.y2)};if(e.type==="pcb_smtpad"||e.type==="pcb_plated_hole"){if(e.type==="pcb_smtpad"&&(e.shape==="rotated_rect"||e.shape==="polygon")||e.type==="pcb_plated_hole"&&"rect_pad_width"in e&&"rect_pad_height"in e){let n=L$(e);return{minX:Math.min(...n.map((o)=>o.x)),minY:Math.min(...n.map((o)=>o.y)),maxX:Math.max(...n.map((o)=>o.x)),maxY:Math.max(...n.map((o)=>o.y))}}}return Yf([e])},guo=(e)=>{if(e.type==="pcb_port")return e.pcb_port_id;if(e.type==="pcb_smtpad")return e.pcb_smtpad_id;return e.pcb_plated_hole_id};function fuo(e,{connMap:t,minClearance:n}={}){let o=ouo(e);y7e(e),t??=js(e);let i=Z5(e);n??=$5(i,"min_trace_to_pad_edge_clearance")??Rdo;let s=ts(e).pcb_trace.list().flatMap((C)=>{let I=[];for(let b=0;b<C.route.length-1;b++){let P=C.route[b],E=C.route[b+1];if(P.route_type!=="wire"&&P.route_type!=="via"||E.route_type!=="wire"&&E.route_type!=="via")continue;let B=P.route_type==="wire"?P:E;if(B.route_type!=="wire")continue;if(P.route_type==="wire"&&E.route_type==="wire"&&P.layer!==E.layer)continue;I.push({type:"pcb_trace_segment",pcb_trace_id:C.pcb_trace_id,_pcbTrace:C,thickness:Math.max(P.route_type==="wire"?P.width??o7e:0,E.route_type==="wire"?E.width??o7e:0),layer:B.layer,x1:P.x,y1:P.y,x2:E.x,y2:E.y})}return I}),a=ts(e).pcb_smtpad.list(),c=ts(e).pcb_plated_hole.list(),l=ts(e).pcb_port.list(),d=ts(e).pcb_hole.list(),u=new Map(Xft(e).map((C)=>[C.elementId,C])),h=ts(e).pcb_via.list(),A=ts(e).pcb_keepout.list().filter((C)=>!C.allow_traces),m=[...l,...a,...c],p=new Map;for(let C of A){let I=new Set(C.excluded_pcb_component_ids??[]);if(I.size===0)continue;p.set(C.pcb_keepout_id,m.filter((b)=>b.pcb_component_id&&I.has(b.pcb_component_id)).map(guo))}let g=[...s,...a,...c,...d,...h,...A],_=new cY({objects:g,getBounds:$G}),f=(C)=>ys(e,C),y=(C,I,b)=>{if(nY(b))return`PCB trace ${C} overlaps with ${I} (accidental contact)`;return`PCB trace ${C} is too close to ${I} (gap: ${b.toFixed(3)}mm)`},x=new Set;for(let C of s){let I=n,b=$G(C),P=_.getObjectsInBounds(b,I+C.thickness/2);if(C.x1===C.x2&&C.y1===C.y2)continue;for(let E of P){if(!kp(E).includes(C.layer))continue;if(E.type==="pcb_keepout"&&(p.get(E.pcb_keepout_id)??[]).some((T)=>t.areIdsConnected(C.pcb_trace_id,T)))continue;if(E.type==="pcb_trace_segment"){let T=E;if(C.layer!==T.layer)continue;if(t.areIdsConnected(C.pcb_trace_id,T.pcb_trace_id))continue;let Q=Ay({x:C.x1,y:C.y1},{x:C.x2,y:C.y2},{x:T.x1,y:T.y1},{x:T.x2,y:T.y2})-C.thickness/2-T.thickness/2;if(Q>n-hx)continue;let N=`overlap_${C.pcb_trace_id}_${T.pcb_trace_id}`,F=`overlap_${T.pcb_trace_id}_${C.pcb_trace_id}`;if(x.has(N))continue;if(x.has(F))continue;x.add(N),o.push({type:"pcb_trace_error",error_type:"pcb_trace_error",message:y(f(C.pcb_trace_id),f(T.pcb_trace_id),Q),pcb_trace_id:C.pcb_trace_id,source_trace_id:"",pcb_trace_error_id:N,pcb_component_ids:[],center:s7e(C,T),pcb_port_ids:B$([C._pcbTrace,T._pcbTrace])});continue}let B=pa(E);if(t.areIdsConnected(C.pcb_trace_id,"pcb_trace_id"in E?E.pcb_trace_id:B))continue;if(E.type==="pcb_smtpad"||E.type==="pcb_plated_hole"||E.type==="pcb_via"){let{gap:T,center:Q}=z$(C,E);if(!nY(T))continue;let N=`overlap_${C.pcb_trace_id}_${B}`;if(x.has(N))continue;x.add(N),o.push({type:"pcb_trace_error",error_type:"pcb_trace_error",message:y(f(C.pcb_trace_id),`${E.type} "${f(B)}"`,T),pcb_trace_id:C.pcb_trace_id,center:Q,source_trace_id:"",pcb_trace_error_id:N,pcb_component_ids:["pcb_component_id"in E?E.pcb_component_id:void 0].filter(Boolean),pcb_port_ids:[...B$([C._pcbTrace]),"pcb_port_id"in E?E.pcb_port_id:void 0].filter(Boolean)});continue}if(E.type==="pcb_hole"){let{gap:T,center:Q}=Kft(C,u.get(E.pcb_hole_id));if(!nY(T))continue;let N=`overlap_${C.pcb_trace_id}_${B}`;if(x.has(N))continue;x.add(N),o.push({type:"pcb_trace_error",error_type:"pcb_trace_error",message:y(f(C.pcb_trace_id),`${E.type} "${f(B)}"`,T),pcb_trace_id:C.pcb_trace_id,source_trace_id:C._pcbTrace.source_trace_id??"",pcb_trace_error_id:N,pcb_component_ids:E.pcb_component_id?[E.pcb_component_id]:[],pcb_port_ids:B$([C._pcbTrace]),center:Q});continue}let w=gwe({x:C.x1,y:C.y1},{x:C.x2,y:C.y2},$G(E))-C.thickness/2;if(w+hx<I){let T=`overlap_${C.pcb_trace_id}_${B}`;if(x.has(T))continue;if(x.add(T),E.type==="pcb_keepout"&&E.warning_only){o.push({type:"pcb_keepout_overlap_warning",warning_type:"pcb_keepout_overlap_warning",pcb_keepout_overlap_warning_id:`pcb_keepout_overlap_warning_${T}`,pcb_keepout_id:E.pcb_keepout_id,pcb_trace_ids:[C.pcb_trace_id],message:`PCB trace ${f(C.pcb_trace_id)} violates advisory PCB keepout "${ys(e,E.pcb_keepout_id)}"`,center:tft(C,$G(E)),subcircuit_id:C._pcbTrace.subcircuit_id??E.subcircuit_id});continue}o.push({type:"pcb_trace_error",error_type:"pcb_trace_error",message:y(f(C.pcb_trace_id),`${E.type} "${f(pa(E))}"`,w),pcb_trace_id:C.pcb_trace_id,source_trace_id:"",pcb_trace_error_id:T,pcb_component_ids:["pcb_component_id"in E?E.pcb_component_id:void 0].filter(Boolean),center:tft(C,$G(E)),pcb_port_ids:[...B$([C._pcbTrace]),"pcb_port_id"in E?E.pcb_port_id:void 0].filter(Boolean)})}}}return o}var yuo=0.000000001,xuo=(e)=>{if(e.type==="pcb_via")return"Via";if(e.type==="pcb_smtpad")return"SMT pad";if(e.type==="pcb_plated_hole")return"Plated hole";return"Copper pour"};function Cuo(e){let t=Z5(e);if(!t)return[];if(!e.some((c)=>c.type==="pcb_via"||c.type==="pcb_smtpad"||c.type==="pcb_plated_hole"||c.type==="pcb_copper_pour"))return[];let n=iY([t],{strict:!0}).elements[0]?.shapes[0];if(!n)return[];let o=$5(t,"min_board_edge_clearance")??Tg.min_board_edge_clearance;if(o===void 0)return[];let i=new Set(e.filter((c)=>c.type==="pcb_component").filter((c)=>c.is_allowed_to_be_off_board).map((c)=>c.pcb_component_id)),{elements:r}=iY(e,{elementTypes:["pcb_via","pcb_smtpad","pcb_plated_hole","pcb_copper_pour"],includeDrillHoles:!1,strict:!0}),s=[],a=new Set;for(let c of r){if(a.has(c.elementId))continue;a.add(c.elementId);let l=c.sourceElement;if((l.type==="pcb_smtpad"||l.type==="pcb_plated_hole")&&l.pcb_component_id&&i.has(l.pcb_component_id))continue;let d=c.shapes.every((m)=>n.contains(m)),u=d?Math.min(...c.shapes.map((m)=>n.distanceTo(m)[0])):0;if(d&&u+yuo>=o)continue;let h=c.elementId,A=xuo(l);s.push({type:"pcb_placement_error",pcb_placement_error_id:`copper_too_close_to_board_edge_${h}`,error_type:"pcb_placement_error",message:`${A} ${ys(e,h)} violates copper-to-board-edge clearance (measured ${u.toFixed(3)}mm, required ${o.toFixed(3)}mm)`})}return s}function jft(e){return e.area()>=0}function qft({center:e,size:t,rotationDeg:n=0}){let{x:o,y:i}=e,r=t.width/2,s=t.height/2,a=[new Bs(o-r,i-s),new Bs(o+r,i-s),new Bs(o+r,i+s),new Bs(o-r,i+s)],c=new Dc(a);if(n){let l=bA(n,o,i),d=a.map((u)=>{let h=tt(l,{x:u.x,y:u.y});return new Bs(h.x,h.y)});c=new Dc(d)}if(!jft(c))c.reverse();return c}function Iuo({board:e}){if(e.outline&&e.outline.length>0){let t=e.outline.map((o)=>new Bs(o.x,o.y)),n=new Dc(t);if(!jft(n))n.reverse();return n}if(e.center&&typeof e.width==="number"&&typeof e.height==="number")return qft({center:e.center,size:{width:e.width,height:e.height},rotationDeg:0});return null}function buo({circuitJson:e,component:t}){if(t.source_component_id){let n=e.find((o)=>o.type==="source_component"&&o.source_component_id===t.source_component_id);if(n&&"name"in n&&n.name)return n.name}return kQ(e,t.pcb_component_id)}function Suo(e,t){let n=[...e.edges],o=n[0]?.shape;if(n.length===1&&o instanceof d0&&$2.EQ(o.sweep,2*Math.PI)){let[r]=t.distanceTo(o.pc);return t.contains(o.pc)?o.r-r:o.r+r}let i=0;for(let r of n){let s=r.shape instanceof d0?Math.ceil(r.shape.sweep/(Math.PI/32)):2;for(let a=0;a<=s;a++){let c=r.pointAtLength(r.length*a/s);if(!t.contains(c))i=Math.max(i,t.distanceTo(c)[0])}}return i||0.1}function Puo({componentBox:e,boardPoly:t}){let n=t.box,o=0,i=0;if(e.xmin<n.xmin)o=n.xmin-e.xmin;else if(e.xmax>n.xmax)o=n.xmax-e.xmax;if(e.ymin<n.ymin)i=n.ymin-e.ymin;else if(e.ymax>n.ymax)i=n.ymax-e.ymax;if(o===0&&i===0)return null;let r=o>=0?"right":"left",s=i>=0?"up":"down",a=Math.abs(Math.round(o*100)/100),c=Math.abs(Math.round(i*100)/100);if(a>0&&c>0)return`Try moving it ${a}mm ${r} and ${c}mm ${s} to fit within the board edge.`;if(a>0)return`Try moving it ${a}mm ${r} to fit within the board edge.`;return`Try moving it ${c}mm ${s} to fit within the board edge.`}function vuo(e){let t=e.find((s)=>s.type==="pcb_board");if(!t)return[];let n=Iuo({board:t});if(!n)return[];let o=e.filter((s)=>s.type==="pcb_component");if(o.length===0)return[];let i=iY(e,{elementTypes:["pcb_smtpad","pcb_plated_hole","pcb_hole","pcb_courtyard_circle","pcb_courtyard_rect","pcb_courtyard_pill","pcb_courtyard_polygon","pcb_courtyard_outline"],includeDrillHoles:!1,strict:!0}).elements,r=[];for(let s of o){if(s.is_allowed_to_be_off_board)continue;if(!s.center||typeof s.width!=="number"||typeof s.height!=="number")continue;if(s.width<=0||s.height<=0)continue;let a=qft({center:s.center,size:{width:s.width,height:s.height},rotationDeg:0}),c=i.filter(({sourceElement:_})=>("pcb_component_id"in _)&&_.pcb_component_id===s.pcb_component_id),l=c.filter(({role:_})=>_!=="courtyard").reduce((_,f)=>_?_.merge(f.bounds):f.bounds,void 0),d=c.flatMap(({shapes:_})=>_);if(!l||!$2.EQ(l.xmin,a.box.xmin)||!$2.EQ(l.xmax,a.box.xmax)||!$2.EQ(l.ymin,a.box.ymin)||!$2.EQ(l.ymax,a.box.ymax))d.push(a);let u=d.filter((_)=>_.area()>0&&!n.contains(_));if(u.length===0)continue;let h=d.reduce((_,f)=>_.merge(f.box),d[0].box),A=Math.max(...u.map((_)=>Suo(_,n))),m=buo({circuitJson:e,component:s}),p=Math.round(A*100)/100,g=Puo({componentBox:h,boardPoly:n});r.push({type:"pcb_component_outside_board_error",error_type:"pcb_component_outside_board_error",pcb_component_outside_board_error_id:`pcb_component_outside_board_${s.pcb_component_id}`,message:`Component ${m} extends outside board boundaries by ${p}mm.${g?` ${g}`:""}`,pcb_component_id:s.pcb_component_id,pcb_board_id:t.pcb_board_id,component_center:s.center,component_bounds:{min_x:h.xmin,max_x:h.xmax,min_y:h.ymin,max_y:h.ymax},subcircuit_id:s.subcircuit_id,source_component_id:s.source_component_id})}return r}var nft=32;function Jft({center:e,width:t,height:n,rotation:o=0}){let i=t/2,r=n/2,s=[{x:e.x-i,y:e.y-r},{x:e.x+i,y:e.y-r},{x:e.x+i,y:e.y+r},{x:e.x-i,y:e.y+r}],a=bA(o,e.x,e.y);return new Dc(s.map((c)=>{let l=o?tt(a,c):c;return new Bs(l.x,l.y)}))}function Euo({center:e,radius:t}){return new Dc(Array.from({length:nft},(n,o)=>{let i=2*Math.PI*o/nft;return new Bs(e.x+Math.cos(i)*t,e.y+Math.sin(i)*t)}))}function Muo(e){if(e.shape==="rect")return Jft({center:e.center,width:e.width,height:e.height,rotation:e.rotation??0});if(e.shape==="circle")return Euo({center:e.center,radius:e.radius});if(e.shape==="polygon")return new Dc(e.points.map((t)=>new Bs(t.x,t.y)));return null}function oft(e){return{minX:e.box.xmin,minY:e.box.ymin,maxX:e.box.xmax,maxY:e.box.ymax}}function Buo(e,t){if(!h0(oft(e),oft(t)))return!1;if(e.contains(t)||t.contains(e))return!0;try{let n=Qz.intersect(e,t);if(Array.isArray(n))return n.some((o)=>o.area()>0);return n.area()>0}catch{return!1}}function wuo(e){let t=e.filter((r)=>r.type==="pcb_cutout"),n=e.filter((r)=>r.type==="pcb_component");if(t.length===0||n.length===0)return[];let o=t.map((r)=>({cutout:r,polygon:Muo(r)})).filter((r)=>r.polygon!==null&&r.polygon.area()>0),i=[];for(let r of n){if(r.do_not_place)continue;if(!r.center||r.width<=0||r.height<=0)continue;let s=Jft({center:r.center,width:r.width,height:r.height});for(let{cutout:a,polygon:c}of o){if(a.pcb_component_id===r.pcb_component_id)continue;if(!Buo(s,c))continue;let l=kQ(e,r.pcb_component_id),d=a.pcb_cutout_id;i.push({type:"pcb_placement_error",pcb_placement_error_id:`component_over_cutout_${r.pcb_component_id}_${d}`,error_type:"pcb_placement_error",message:`Component ${l} overlaps with cutout [${ys(e,d)}]`,subcircuit_id:r.subcircuit_id})}}return i}var Tuo=(e)=>{switch(e.type){case"pcb_courtyard_circle":return e.pcb_courtyard_circle_id;case"pcb_courtyard_outline":return e.pcb_courtyard_outline_id;case"pcb_courtyard_polygon":return e.pcb_courtyard_polygon_id;case"pcb_courtyard_rect":return e.pcb_courtyard_rect_id}},l7e=(e)=>{let t={type:"pcb_keepout",pcb_keepout_id:Tuo(e),layers:[e.layer]};if(e.type==="pcb_courtyard_circle")return{...t,shape:"circle",center:e.center,radius:e.radius};let n=e.type==="pcb_courtyard_rect"?lme({x:e.center.x,y:e.center.y,width:e.width,height:e.height,ccwRotation:e.ccw_rotation??0}):e.type==="pcb_courtyard_polygon"?e.points:e.outline;return{...t,shape:"outline",outline:n,stroke_width:0}};function Duo(e){let t=e.filter((r)=>r.type==="pcb_keepout"&&!r.allow_placements),n=new Map(e.flatMap((r)=>r.type==="pcb_component"?[[r.pcb_component_id,r]]:[])),o=e.filter((r)=>r.type==="pcb_courtyard_rect"||r.type==="pcb_courtyard_circle"||r.type==="pcb_courtyard_outline"||r.type==="pcb_courtyard_polygon"),i=new Map;for(let r of o){let s=r.pcb_component_id,a=n.get(s);if(a?.do_not_place)continue;let c=l7e(r);for(let l of t){if(!l.layers.includes(r.layer))continue;if(l.excluded_pcb_component_ids?.includes(s))continue;let d=`courtyard_over_keepout_${s}_${l.pcb_keepout_id}`;if(i.has(d))continue;if(ux(c,l)>hx)continue;let u=ys(e,s),h=ys(e,l.pcb_keepout_id),A=a?.subcircuit_id??l.subcircuit_id;if(l.warning_only)i.set(d,{type:"pcb_keepout_overlap_warning",warning_type:"pcb_keepout_overlap_warning",pcb_keepout_overlap_warning_id:`pcb_keepout_overlap_warning_${d}`,pcb_keepout_id:l.pcb_keepout_id,pcb_component_ids:[s],message:`Courtyard of ${u} overlaps advisory PCB keepout "${h}"`,subcircuit_id:A});else i.set(d,{type:"pcb_placement_error",error_type:"pcb_placement_error",pcb_placement_error_id:d,message:`Courtyard of ${u} overlaps PCB keepout "${h}"`,subcircuit_id:A})}}return[...i.values()]}var Nuo=(e)=>("pcb_component_id"in e)&&e.pcb_component_id?e.pcb_component_id:pa(e),ift=(e,t)=>{if("pcb_component_id"in t&&t.pcb_component_id){let n=e.find((r)=>r.type==="pcb_component"&&r.pcb_component_id===t.pcb_component_id),o=n?.type==="pcb_component"?e.find((r)=>r.type==="source_component"&&r.source_component_id===n.source_component_id):void 0;return`component ${o?.type==="source_component"&&o.name?o.name:kQ(e,t.pcb_component_id)}`}return t.type==="pcb_via"?`via ${ys(e,t.pcb_via_id)}`:ys(e,pa(t))};function Ruo(e){let t=ts(e).pcb_keepout.list();if(t.length===0)return[];let n=[...j7(e),...ts(e).pcb_via.list()],o=new Map;for(let i of t){let r=new Set(i.excluded_pcb_component_ids??[]);for(let s of n){if(i.allow_placements&&s.type!=="pcb_via")continue;let a="pcb_component_id"in s?s.pcb_component_id:void 0;if(a&&r.has(a))continue;if(!kp(s).some((u)=>i.layers.includes(u)))continue;if(ux(s,i)>hx)continue;let d=`copper_over_keepout_${Nuo(s)}_${i.pcb_keepout_id}`;if(i.warning_only){let u=s.type==="pcb_smtpad"?"pcb_smtpad_ids":s.type==="pcb_plated_hole"?"pcb_plated_hole_ids":"pcb_via_ids",h=o.get(d);if(h?.type==="pcb_keepout_overlap_warning")h[u]=Array.from(new Set([...h[u]??[],pa(s)]));else o.set(d,{type:"pcb_keepout_overlap_warning",warning_type:"pcb_keepout_overlap_warning",pcb_keepout_overlap_warning_id:`pcb_keepout_overlap_warning_${d}`,pcb_keepout_id:i.pcb_keepout_id,message:`Copper for ${ift(e,s)} overlaps advisory PCB keepout "${ys(e,i.pcb_keepout_id)}"`,...a?{pcb_component_ids:[a]}:{},[u]:[pa(s)],subcircuit_id:s.subcircuit_id??i.subcircuit_id});continue}if(o.has(d))continue;o.set(d,{type:"pcb_placement_error",pcb_placement_error_id:d,error_type:"pcb_placement_error",message:`Copper for ${ift(e,s)} overlaps ${i.description?`PCB keepout "${i.description}"`:"a PCB keepout"}`,subcircuit_id:s.subcircuit_id??i.subcircuit_id})}}return[...o.values()]}var jf=0.000000001;function $ft(e){let t=new Map(e.flatMap((i)=>i.type==="pcb_board"&&i.subcircuit_id?[[i.subcircuit_id,i.pcb_board_id]]:[])),n=new Map(e.flatMap((i)=>i.type==="source_group"&&i.is_subcircuit&&i.subcircuit_id?[[i.subcircuit_id,i.parent_subcircuit_id]]:[])),o=new Map(e.flatMap((i)=>i.type==="pcb_component"?[[i.pcb_component_id,i]]:[]));return(i)=>{if("pcb_board_id"in i&&i.pcb_board_id)return i.pcb_board_id;if("positioned_relative_to_pcb_board_id"in i&&i.positioned_relative_to_pcb_board_id)return i.positioned_relative_to_pcb_board_id;let r="pcb_component_id"in i&&i.pcb_component_id?o.get(i.pcb_component_id):void 0;if(r?.positioned_relative_to_pcb_board_id)return r.positioned_relative_to_pcb_board_id;let s=("subcircuit_id"in i?i.subcircuit_id:void 0)??r?.subcircuit_id,a=new Set;while(s&&!a.has(s)){let c=t.get(s);if(c)return c;a.add(s),s=n.get(s)}}}function Zft(e){let t=new Map(e.filter((n)=>n.type==="pcb_board").map((n)=>[n.pcb_board_id,n]));return e.flatMap((n)=>{if(n.type!=="pcb_bend")return[];let o=t.get(n.pcb_board_id);if(!o)return[];let i=n.end.x-n.start.x,r=n.end.y-n.start.y,s=Math.hypot(i,r),a=n.bend_radius*Math.abs(n.bend_angle*Math.PI/180);if(!Number.isFinite(s)||!Number.isFinite(a)||s<=jf||a<=jf)return[];let c={x:i/s,y:r/s},l={x:-c.y*a/2,y:c.x*a/2},d={x:o.center.x+n.start.x,y:o.center.y+n.start.y},u={x:o.center.x+n.end.x,y:o.center.y+n.end.y},h=[{x:d.x+l.x,y:d.y+l.y},{x:u.x+l.x,y:u.y+l.y},{x:u.x-l.x,y:u.y-l.y},{x:d.x-l.x,y:d.y-l.y}],A={type:"pcb_keepout",pcb_keepout_id:n.pcb_bend_id,shape:"outline",outline:h,stroke_width:0,layers:["top","bottom"]};return[{bend:n,board:o,tangent:c,keepout:A}]})}function Quo(e,t){return(e.shape==="polygon"?e.outline:lme({x:e.center.x,y:e.center.y,width:e.width,height:e.height,ccwRotation:e.rotation??0})).map((o)=>({x:o.x+t.center.x,y:o.y+t.center.y}))}function kuo(e){let t=Zft(e);if(t.length===0)return[];let n=$ft(e),o=[...j7(e),...e.filter((a)=>a.type==="pcb_via")].map((a)=>({element:a,boardId:n(a)}));for(let a of e){if(a.type!=="pcb_trace")continue;let c=n(a);for(let[l,d]of a.route.entries()){if(d.route_type!=="via")continue;let u=d.outer_diameter??d.hole_diameter??0;if(o.some(({element:m,boardId:p})=>m.type==="pcb_via"&&!(c&&p&&c!==p)&&Math.hypot(m.x-d.x,m.y-d.y)<=jf&&m.layers.includes(d.from_layer)&&m.layers.includes(d.to_layer)&&(d.outer_diameter===void 0||Math.abs(m.outer_diameter-u)<=jf)&&(d.hole_diameter===void 0||Math.abs(m.hole_diameter-d.hole_diameter)<=jf)))continue;let A={type:"pcb_via",pcb_via_id:`${a.pcb_trace_id}_route_via_${l}`,pcb_trace_id:a.pcb_trace_id,x:d.x,y:d.y,outer_diameter:u,hole_diameter:d.hole_diameter??0,layers:[d.from_layer,d.to_layer],subcircuit_id:a.subcircuit_id};o.push({element:A,boardId:c})}}let i=e.filter((a)=>a.type==="pcb_stiffener"),r=[],s=(a,c,l)=>{r.push({type:"pcb_placement_error",pcb_placement_error_id:`bend_zone_${c.pcb_bend_id}_${a}`,error_type:"pcb_placement_error",message:`${ys(e,a)} overlaps PCB bend zone ${ys(e,c.pcb_bend_id)}`,subcircuit_id:l??c.subcircuit_id})};for(let{bend:a,board:c,keepout:l}of t){for(let{element:d,boardId:u}of o){if(u&&u!==c.pcb_board_id)continue;if(ux(d,l)<=jf)s(pa(d),a,d.subcircuit_id)}for(let d of i){if(d.pcb_board_id!==c.pcb_board_id)continue;let u=Quo(d,c);if(u.length<3)continue;if(ux({...l,outline:u,pcb_keepout_id:d.pcb_stiffener_id},l)<=jf)s(d.pcb_stiffener_id,a,d.subcircuit_id)}}return r}function Luo(e){let t=Zft(e);if(t.length===0)return[];let n=$ft(e),o=[];for(let i of e){if(i.type!=="pcb_trace")continue;let r=n(i);for(let{bend:s,tangent:a,keepout:c}of t){if(r&&r!==s.pcb_board_id)continue;let l;for(let d=1;d<i.route.length;d++){let u=i.route[d-1],h=i.route[d],A=u.route_type==="wire"?u:h.route_type==="wire"?h:void 0;if(!A)continue;let m=u.route_type==="through_pad"?u.end_layer===A.layer?u.end:u.start_layer===A.layer?u.start:void 0:u.route_type==="wire"?u.layer===A.layer?u:void 0:u.to_layer===A.layer?u:void 0,p=h.route_type==="through_pad"?h.start_layer===A.layer?h.start:h.end_layer===A.layer?h.end:void 0:h.route_type==="wire"?h.layer===A.layer?h:void 0:h.from_layer===A.layer?h:void 0;if(!m||!p)continue;let g=p.x-m.x,_=p.y-m.y,f=Math.hypot(g,_);if(f<=jf)continue;if(Math.abs(g*a.x+_*a.y)/f<=jf)continue;let x=Math.max(A.width,A.start_width??0,A.end_width??0)/2,C=F$(m,p,c.outline);if(C.distance>x+jf)continue;l={center:C.center,reason:"Non-perpendicular trace copper"};break}for(let d=1;!l&&d<i.route.length-1;d++){let u=i.route[d];if(u.route_type!=="wire")continue;let h=d-1,A=d+1;while(h>=0){let b=i.route[h];if(b.route_type!=="wire"||b.layer!==u.layer||Math.hypot(b.x-u.x,b.y-u.y)>jf)break;h--}while(A<i.route.length){let b=i.route[A];if(b.route_type!=="wire"||b.layer!==u.layer||Math.hypot(b.x-u.x,b.y-u.y)>jf)break;A++}let m=i.route[h],p=i.route[A];if(m?.route_type!=="wire"||p?.route_type!=="wire"||m.layer!==u.layer||p.layer!==u.layer)continue;let g={x:u.x-m.x,y:u.y-m.y},_={x:p.x-u.x,y:p.y-u.y},f=Math.hypot(g.x,g.y)*Math.hypot(_.x,_.y);if(f<=jf)continue;let y=(g.x*_.x+g.y*_.y)/f,x=(g.x*_.y-g.y*_.x)/f;if(y>0&&Math.abs(x)<=jf)continue;let C=Math.max(m.width,m.end_width??0,u.width,u.start_width??0)/2;if(F$(u,u,c.outline).distance>C+jf)continue;l={center:u,reason:"Trace corner"}}if(!l)continue;o.push({type:"pcb_trace_error",pcb_trace_error_id:`bend_zone_${s.pcb_bend_id}_${i.pcb_trace_id}`,error_type:"pcb_trace_error",message:`${l.reason} for ${t6(e,i.pcb_trace_id)} overlaps PCB bend zone ${ys(e,s.pcb_bend_id)}`,center:l.center,pcb_trace_id:i.pcb_trace_id,source_trace_id:i.source_trace_id??"",pcb_component_ids:i.pcb_component_id?[i.pcb_component_id]:[],pcb_port_ids:[],subcircuit_id:i.subcircuit_id??s.subcircuit_id})}}return o}function H$(e,t){return Math.hypot(e.x-t.x,e.y-t.y)}function Fuo(e,t){return H$(e,t)<=hx}function Huo(e,{connMap:t,minClearance:n}={}){let o=e.filter((a)=>a.type==="pcb_via");if(o.length<2)return[];let i=Z5(e);n??=$5(i,"min_via_hole_edge_to_via_hole_edge_clearance")??Tg.min_via_hole_edge_to_via_hole_edge_clearance,t??=js(e);let r=[],s=new Set;for(let a=0;a<o.length;a++)for(let c=a+1;c<o.length;c++){let l=o[a],d=o[c];if(Fuo(l,d))continue;if(!t.areIdsConnected(l.pcb_via_id,d.pcb_via_id))continue;let u=H$(l,d)-l.hole_diameter/2-d.hole_diameter/2;if(u+hx>=n)continue;let h=[l.pcb_via_id,d.pcb_via_id].sort().join("_");if(s.has(h))continue;s.add(h),r.push({type:"pcb_via_clearance_error",pcb_error_id:`same_net_vias_close_${h}`,message:`Vias ${ys(e,l.pcb_via_id)} and ${ys(e,d.pcb_via_id)} are too close together (gap: ${u.toFixed(3)}mm)`,error_type:"pcb_via_clearance_error",pcb_via_ids:[l.pcb_via_id,d.pcb_via_id],minimum_clearance:n,actual_clearance:u,pcb_center:{x:(l.x+d.x)/2,y:(l.y+d.y)/2}})}return r}function Ouo(e,{connMap:t,minClearance:n}={}){let o=e.filter((c)=>c.type==="pcb_via");if(o.length<2)return[];let i=Z5(e);n??=$5(i,"min_via_hole_edge_to_via_hole_edge_clearance")??Tg.min_via_hole_edge_to_via_hole_edge_clearance;let r=$5(i,"min_pad_edge_to_pad_edge_clearance")??Tg.min_pad_edge_to_pad_edge_clearance;t??=js(e);let s=[],a=new Set;for(let c=0;c<o.length;c++)for(let l=c+1;l<o.length;l++){let d=o[c],u=o[l];if(t.areIdsConnected(d.pcb_via_id,u.pcb_via_id))continue;let h=H$(d,u),A=h-d.hole_diameter/2-u.hole_diameter/2,m=n;if(A+hx>=m){if(!d.layers.some((g)=>u.layers.includes(g)))continue;if(A=h-d.outer_diameter/2-u.outer_diameter/2,m=r,A>=0&&A+hx>=m)continue}let p=[d.pcb_via_id,u.pcb_via_id].sort().join("_");if(a.has(p))continue;a.add(p),s.push({type:"pcb_via_clearance_error",pcb_error_id:`different_net_vias_close_${p}`,message:`Vias ${ys(e,d.pcb_via_id)} and ${ys(e,u.pcb_via_id)} from different nets are too close together (gap: ${A.toFixed(3)}mm)`,error_type:"pcb_via_clearance_error",pcb_via_ids:[d.pcb_via_id,u.pcb_via_id],minimum_clearance:m,actual_clearance:A,pcb_center:{x:(d.x+u.x)/2,y:(d.y+u.y)/2}})}return s}function zuo(e,t,n){let o=new Map,i=new Map;for(let r of[!1,!0]){let s=e.route[r?e.route.length-1:0];if(s?.route_type!=="wire")continue;let a=r?s.end_pcb_port_id:s.start_pcb_port_id;if(!a)continue;let c=t.filter((p)=>(p.type==="pcb_smtpad"||p.type==="pcb_plated_hole")&&p.pcb_port_id===a);if(!c.length)continue;let l=iY(t,{elementIds:c.map((p)=>p.type==="pcb_smtpad"?p.pcb_smtpad_id:p.pcb_plated_hole_id),layers:[s.layer],roles:["copper"],includeDrillHoles:!1});if(l.warnings.length)continue;let d=l.elements.flatMap((p)=>p.shapes),u=(p)=>d.some((g)=>g.contains(p));if(!u(new Bs(s.x,s.y)))continue;let h=!0,A=n,m=r?i:o;for(let p=r?e.route.length-2:0;p>=0&&p<e.route.length-1;p+=r?-1:1){let g=e.route[r?p+1:p],_=e.route[r?p:p+1];if(g.route_type!=="wire"||_.route_type!=="wire"||g.layer!==s.layer||_.layer!==s.layer)break;let f=new Bs(g.x,g.y),y=new Bs(_.x,_.y),x=new Bp(f,y),C=x.length;if(C===0)continue;let I=0;if(h){let P=[0,C,...d.flatMap((E)=>E.intersect(x).map((B)=>f.distanceTo(B)[0]))].sort((E,B)=>E-B);for(let E=0;E<P.length-1;E++){if(P[E+1]-P[E]<0.000000001)continue;let B=(P[E]+P[E+1])/(2*C);if(!u(new Bs(g.x+(_.x-g.x)*B,g.y+(_.y-g.y)*B))){h=!1;break}I=P[E+1]}}let b=Math.min(C-I,A);if(I+=b,A-=b,m.set(p,I),I<C)break}}return{fromStart:o,fromEnd:i}}function Guo(e,{maxPadNeckdownLength:t}={}){if(t!==void 0&&(!Number.isFinite(t)||t<0))throw Error("maxPadNeckdownLength must be finite and nonnegative");let n=[],o=ts(e),i=o.source_trace.list(),r=o.pcb_trace.list(),s=o.pcb_port.list(),a=js(e);for(let c of i){let l=c.min_trace_thickness;if(l===void 0)continue;let d=s.filter((p)=>c.connected_source_port_ids?.includes(p.source_port_id));if(d.length<2)continue;let u=a.getNetConnectedToId(d[0].pcb_port_id);if(!u)continue;let h=a.getIdsConnectedToNet(u),A=r.filter((p)=>h.includes(p.pcb_trace_id));if(A.length===0)continue;let m;for(let p of A){let g=zuo(p,e,t??l);for(let _=0;_<p.route.length-1;_++){let f=p.route[_],y=p.route[_+1];if(f.route_type!=="wire"||y.route_type!=="wire")continue;if(f.layer!==y.layer)continue;if(f.x===y.x&&f.y===y.y)continue;let x=p.route_thickness_mode==="interpolated";if(Math.min(f.width,x?y.width:f.width)>=l)continue;let C=0,I=1;if(x&&f.width!==y.width){let B=(l-f.width)/(y.width-f.width);if(f.width>=l)C=B;if(y.width>=l)I=B}let b=Math.hypot(y.x-f.x,y.y-f.y);if(C=Math.max(C,(g.fromStart.get(_)??0)/b),I=Math.min(I,1-(g.fromEnd.get(_)??0)/b),I-C<0.000000001)continue;let P=x?Math.min(f.width+(y.width-f.width)*C,f.width+(y.width-f.width)*I):f.width;if(m&&P>=m.width)continue;let E=(C+I)/2;m={pcb_trace_id:p.pcb_trace_id,center:{x:f.x+(y.x-f.x)*E,y:f.y+(y.y-f.y)*E},width:P}}}if(!m)continue;n.push({type:"pcb_trace_warning",pcb_trace_warning_id:`pcb_trace_warning_${c.source_trace_id}`,warning_type:"pcb_trace_warning",message:`Trace [${_7e(e,c)}] is routed thinner than requested (requested: ${l}mm, actual: ${m.width}mm).`,center:m.center,source_trace_id:c.source_trace_id,pcb_trace_id:m.pcb_trace_id,pcb_component_ids:Array.from(new Set(d.map((p)=>p.pcb_component_id).filter((p)=>p!==void 0))),pcb_port_ids:d.map((p)=>p.pcb_port_id)})}return n}function Yuo(e,{connMap:t}={}){let n=[],o=e.filter((d)=>d.type==="source_trace"),i=e.filter((d)=>d.type==="pcb_trace"),r=e.filter((d)=>d.type==="pcb_port"),s=new Map(r.map((d)=>[d.source_port_id,d])),a=t??js(e),c,l=()=>c??=Wft(e,a);for(let d of o){if(!d.connected_source_port_ids?.length)continue;if((d.connected_source_net_ids?.length??0)>0)continue;if(d.connected_source_port_ids.length<2)continue;if(!i.some((h)=>a.areIdsConnected(d.source_trace_id,h.pcb_trace_id))){let h=d.connected_source_port_ids.map((m)=>s.get(m)).filter((m)=>m!==void 0);if(h.length===d.connected_source_port_ids.length&&l().arePortsConnected(h.map((m)=>m.pcb_port_id)))continue;let A=Array.from(new Set(h.map((m)=>m.pcb_component_id).filter((m)=>m!==void 0)));n.push({type:"pcb_trace_missing_error",pcb_trace_missing_error_id:`pcb_trace_missing_${d.source_trace_id}`,error_type:"pcb_trace_missing_error",message:`Trace [${_7e(e,d)}] is not connected (it has no PCB trace)`,source_trace_id:d.source_trace_id,pcb_component_ids:A,pcb_port_ids:h.map((m)=>m.pcb_port_id)})}}return n}var w$=0.000000001;function Vuo(e,t){let n=new Map,o=j7(e),i=e.filter((u)=>u.type==="pcb_trace"),r=e.filter((u)=>u.type==="pcb_via"),a=e.find((u)=>u.type==="pcb_board")?.num_layers,l=["top",...Ep.filter((u)=>u.startsWith("inner")).slice(0,a===void 0?void 0:Math.max(0,a-2)),...a===1?[]:["bottom"]],d=(u,h,A)=>{if(![A.x,A.y].every(Number.isFinite))return;let m=t.getNetConnectedToId(u);if(!m)return;let p=o.some((y)=>{if(t.getNetConnectedToId(pa(y))!==m||!kp(y).some((C)=>h.includes(C)))return!1;if(A.radius===void 0)return aY(A,y);let x={type:"pcb_via",pcb_via_id:u,x:A.x,y:A.y,outer_diameter:A.radius*2,hole_diameter:0,layers:h};return ux(x,y)<=w$}),g=new Set;for(let y of i){if(y.route_thickness_mode==="interpolated"||t.getNetConnectedToId(y.pcb_trace_id)!==m)continue;for(let x=1;x<y.route.length;x++){let C=y.route[x-1],I=y.route[x];if(C.route_type!=="wire"||I.route_type!=="wire"||C.layer!==I.layer||!h.includes(C.layer)||!Number.isFinite(C.width)||C.width<=0||Math.hypot(C.x-I.x,C.y-I.y)<=w$)continue;let b=A.radius===void 0?0:A.radius+C.width/2;if(qs(A,C,I)<=b+w$){g.add(y.pcb_trace_id);break}}}let _={...A,touchesPad:p,touchingTraceIds:g},f=n.get(m)??new Map;for(let y of h){let x=f.get(y)??[];x.push(_),f.set(y,x)}n.set(m,f)};for(let u of r){if(!Number.isFinite(u.outer_diameter)||u.outer_diameter<=0)continue;d(u.pcb_via_id,kp(u),{x:u.x,y:u.y,ownerTraceId:u.pcb_trace_id,radius:u.outer_diameter/2})}for(let u of e){if(u.type!=="pcb_trace")continue;for(let h of u.route){if(h.route_type!=="via")continue;if(r.some((g)=>Math.hypot(g.x-h.x,g.y-h.y)<=w$&&(g.pcb_trace_id===u.pcb_trace_id||!g.pcb_trace_id&&t.areIdsConnected(g.pcb_via_id,u.pcb_trace_id))))continue;let A=l.indexOf(h.from_layer),m=l.indexOf(h.to_layer);if(A<0||m<0)continue;let p=h.outer_diameter;if(p!==void 0&&(!Number.isFinite(p)||p<=0))continue;d(u.pcb_trace_id,l.slice(Math.min(A,m),Math.max(A,m)+1),{x:h.x,y:h.y,ownerTraceId:u.pcb_trace_id,radius:p===void 0?void 0:p/2})}}return n}function rft({point:e,width:t,ownerTrace:n,index:o,connectivity:i}){if(e.route_type!=="wire"||!Number.isFinite(t)||t<=0)return!1;let r=i.getNetConnectedToId(n.pcb_trace_id);if(!r)return!1;return(o.get(r)?.get(e.layer)??[]).some((s)=>{if(s.ownerTraceId===n.pcb_trace_id)return!1;if(!s.touchesPad&&![...s.touchingTraceIds].some((c)=>c!==n.pcb_trace_id))return!1;let a=s.radius===void 0?0:s.radius+t/2;return Math.hypot(e.x-s.x,e.y-s.y)<=a+w$})}var KG=0.01;function Uuo(e){let t=e.find((r)=>r.type==="pcb_board"),o=["top",...Ep.filter((r)=>r.startsWith("inner")).slice(0,t?Math.max(0,t.num_layers-2):void 0),...t?.num_layers===1?[]:["bottom"]],i=new Map;for(let r of e){if(r.type!=="pcb_via"||!r.pcb_trace_id)continue;let s=i.get(r.pcb_trace_id);if(s)s.push(r);else i.set(r.pcb_trace_id,[r])}return{stack:o,ownedViasByTrace:i}}function Wuo({via:e,incoming:t,outgoing:n,traceId:o,context:{stack:i,ownedViasByTrace:r}}){let s=i.indexOf(e.from_layer),a=i.indexOf(e.to_layer);if(s<0||a<0)return!1;let c=r.get(o)?.filter((h)=>Math.abs(h.x-e.x)<KG&&Math.abs(h.y-e.y)<KG)??[],l=c.length>0?c.map((h)=>h.layers):[i.slice(Math.min(s,a),Math.max(s,a)+1)],d=Math.abs(t.x-e.x)<KG&&Math.abs(t.y-e.y)<KG,u=Math.abs(n.x-e.x)<KG&&Math.abs(n.y-e.y)<KG;return i.includes(t.layer)&&i.includes(n.layer)&&l.some((h)=>h.includes(t.layer)&&h.includes(n.layer))&&(d||t.layer===e.from_layer)&&(u||n.layer===e.to_layer)}var e1t=0.000000001,t1t=0.000000001;function ZG(e,t){return e.route_type==="wire"&&kp(t).includes(e.layer)&&aY(e,t)}function Xuo(e,t){let n=new Map;for(let o of e){if(o.route_thickness_mode==="interpolated")continue;let i=t.getNetConnectedToId(o.pcb_trace_id);if(!i)continue;for(let r=0;r<o.route.length-1;r++){let s=o.route[r],a=o.route[r+1];if(s.route_type!=="wire"||a.route_type!=="wire")continue;if(s.layer!==a.layer)continue;if(Math.hypot(s.x-a.x,s.y-a.y)<=t1t)continue;let c=n.get(i)??new Map,l=c.get(s.layer)??[];l.push({trace:o,start:s,end:a}),c.set(s.layer,l),n.set(i,c)}}return n}function sft(e,t){if(e.route_thickness_mode==="interpolated")return;let n=t==="start"?0:e.route.length-2,o=t==="start"?1:-1;while(n>=0&&n<e.route.length-1){let i=e.route[n],r=e.route[n+1];if(i?.route_type!=="wire"||r?.route_type!=="wire"||i.layer!==r.layer)return;if(Math.hypot(i.x-r.x,i.y-r.y)>t1t)return i.width;n+=o}return}function aft({point:e,endpointTraceCopperWidth:t,ownerTrace:n,traceWireSegmentsByNetAndLayer:o,fullConnectivityMap:i}){if(e.route_type!=="wire")return!1;let r=i.getNetConnectedToId(n.pcb_trace_id);if(!r)return!1;let s=o.get(r)?.get(e.layer)??[];for(let a of s){if(a.trace.pcb_trace_id===n.pcb_trace_id)continue;let c=t/2+a.start.width/2+e1t;if(qs(e,a.start,a.end)<=c)return!0}return!1}function cft(e){if(e.route_type==="through_pad")return{x:(e.start.x+e.end.x)/2,y:(e.start.y+e.end.y)/2};return{x:e.x,y:e.y}}function lft(e,t,n,o){return t.some((i)=>{if(!i.pcb_port_id||i.pcb_port_id===n)return!1;return o.get(i.pcb_port_id)?.some((s)=>ZG(e,s))??!1})}function Kuo({firstPoint:e,lastPoint:t,port:n,expectedPorts:o,padMap:i}){let r,s=e.route_type==="wire"?e:void 0,a=t.route_type==="wire"?t:void 0,c=a7e(e).includes(n.pcb_port_id),l=a7e(t).includes(n.pcb_port_id);if(c&&s)r=s;else if(l&&a)r=a;else if(lft(e,o,n.pcb_port_id,i)&&a)r=a;else if(lft(t,o,n.pcb_port_id,i)&&s)r=s;else if(s&&a)r=H$(s,n)<=H$(a,n)?s:a;else if(s)r=s;else if(a)r=a;let d=cft(e),u=cft(t);return r?{x:r.x,y:r.y}:{x:(d.x+u.x)/2,y:(d.y+u.y)/2}}function juo(e,{connMap:t,pcbConnectivityMap:n}={}){let o=Uuo(e),i=Uft(e).map(({trace:I,point:b,index:P,port:E,padLayers:B})=>({type:"pcb_trace_error",error_type:"pcb_trace_error",pcb_trace_error_id:`missing_layer_connection_${I.pcb_trace_id}_${P}_${E.pcb_port_id}`,pcb_trace_id:I.pcb_trace_id,source_trace_id:I.source_trace_id??`!${I.pcb_trace_id}`,pcb_port_ids:[E.pcb_port_id],pcb_component_ids:E.pcb_component_id?[E.pcb_component_id]:[],center:{x:b.x,y:b.y},message:`Trace [${t6(e,I.pcb_trace_id)}] on ${b.layer} is missing a via connection to port [${tE(e,E.pcb_port_id)}] on ${B.join(", ")}.`})),r=e.filter((I)=>I.type==="pcb_port"),s=e.filter((I)=>I.type==="pcb_trace"),a=e.filter((I)=>I.type==="source_trace"),c=e.filter((I)=>I.type==="pcb_smtpad"),l=e.filter((I)=>I.type==="pcb_plated_hole"),d=new Map,u=t,h,A=()=>(u??=js(e),u),m=()=>(h??=Xuo(s,A()),h),p,g=()=>(p??=Vuo(e,A()),p),_=new Set;for(let I of c)if(I.pcb_port_id)d.set(I.pcb_port_id,[...d.get(I.pcb_port_id)??[],I]);for(let I of l)if(I.pcb_port_id)d.set(I.pcb_port_id,[...d.get(I.pcb_port_id)??[],I]);let f=new Map,y=new Map;for(let I of s){let b=new Set,P=I.route[0],E=I.route.at(-1);for(let B of[P,E]){if(!B)continue;for(let[w,T]of d)if(T.some((Q)=>ZG(B,Q)))b.add(w)}f.set(I.pcb_trace_id,b);for(let B of b){let w=y.get(B)??new Set;w.add(I.pcb_trace_id),y.set(B,w)}}let x=new Map,C=(I)=>{let b=x.get(I.pcb_trace_id);if(b)return b;n??=f7e(e);let P=new Set,E=[I.pcb_trace_id];while(E.length>0){let w=E.pop();if(P.has(w))continue;P.add(w);for(let T of n.getAllTracesConnectedToTrace(w))if(!P.has(T.pcb_trace_id))E.push(T.pcb_trace_id);for(let T of f.get(w)??[])for(let Q of y.get(T)??[])if(!P.has(Q))E.push(Q)}let B=s.filter((w)=>P.has(w.pcb_trace_id));for(let w of B)x.set(w.pcb_trace_id,B);return B};for(let I of s){if(I.route.length===0)continue;let b=I.route[0],P=I.route[I.route.length-1],E=a.find((T)=>T.source_trace_id===I.source_trace_id),B=E?r.filter((T)=>E.connected_source_port_ids?.includes(T.source_port_id)):[];for(let T=1;T<I.route.length-1;T++){let Q=I.route[T-1],N=I.route[T],F=I.route[T+1];if(N.route_type==="via"){let H=Q.route_type==="wire",z=F.route_type==="wire";if(H&&z){if(!Wuo({via:N,incoming:Q,outgoing:F,traceId:I.pcb_trace_id,context:o})){let Y=t6(e,I.pcb_trace_id);i.push({type:"pcb_trace_error",message:`Via in trace [${Y}] does not connect its adjacent wire layers at position {x: ${N.x}, y: ${N.y}}.`,source_trace_id:E?.source_trace_id||I.source_trace_id||`!${I.pcb_trace_id}`,error_type:"pcb_trace_error",pcb_trace_id:I.pcb_trace_id,pcb_trace_error_id:`misaligned_via_${I.pcb_trace_id}_${T}`,pcb_component_ids:[],pcb_port_ids:[]})}}}}let w=t6(e,I.pcb_trace_id);if(E&&B.length>0){if(_.has(E.source_trace_id))continue;_.add(E.source_trace_id)}for(let T of B){if(!T.pcb_port_id)continue;let Q=d.get(T.pcb_port_id);if(!Q?.length)continue;let N=Q.some((z)=>ZG(b,z)),F=Q.some((z)=>ZG(P,z));if(N||F)continue;if(C(I).some((z)=>f.get(z.pcb_trace_id)?.has(T.pcb_port_id)))continue;if(!N&&!F){let z=tE(e,T.pcb_port_id),Y=Q[0].type==="pcb_smtpad"?"SMD pad":"through-hole pad",U=Kuo({firstPoint:b,lastPoint:P,port:T,expectedPorts:B,padMap:d});i.push({type:"pcb_trace_error",message:`Trace [${w}] is missing a connection to ${Y} ${z}`,source_trace_id:E?.source_trace_id||I.source_trace_id||`!${I.pcb_trace_id}`,error_type:"pcb_trace_error",pcb_trace_id:I.pcb_trace_id,pcb_trace_error_id:`missing_connection_${I.pcb_trace_id}_${T.pcb_port_id}`,center:U,pcb_component_ids:[],pcb_port_ids:[T.pcb_port_id]})}}if(B.length===0){let T=!1,Q=!1;for(let V of d.values()){if(V.some((W)=>ZG(b,W)))T=!0;if(V.some((W)=>ZG(P,W)))Q=!0}let N=!T?sft(I,"start"):void 0,F=!Q?sft(I,"end"):void 0,H=N!==void 0&&aft({point:b,endpointTraceCopperWidth:N,ownerTrace:I,traceWireSegmentsByNetAndLayer:m(),fullConnectivityMap:A()}),z=F!==void 0&&aft({point:P,endpointTraceCopperWidth:F,ownerTrace:I,traceWireSegmentsByNetAndLayer:m(),fullConnectivityMap:A()}),Y=T||H||N!==void 0&&rft({point:b,width:N,ownerTrace:I,index:g(),connectivity:A()}),U=Q||z||F!==void 0&&rft({point:P,width:F,ownerTrace:I,index:g(),connectivity:A()}),X=b.route_type==="wire"&&P.route_type==="wire"&&b.layer===P.layer&&Math.hypot(b.x-P.x,b.y-P.y)<=e1t;if(!Y&&b.route_type==="wire")i.push({type:"pcb_trace_error",message:`Trace [${w}] has disconnected endpoint at (${b.x.toFixed(2)}, ${b.y.toFixed(2)})`,source_trace_id:E?.source_trace_id||I.source_trace_id||`!${I.pcb_trace_id}`,error_type:"pcb_trace_error",pcb_trace_id:I.pcb_trace_id,pcb_trace_error_id:`disconnected_endpoint_${I.pcb_trace_id}_start`,center:{x:b.x,y:b.y},pcb_component_ids:[],pcb_port_ids:[]});if(!U&&P.route_type==="wire"&&!(X&&!Y))i.push({type:"pcb_trace_error",message:`Trace [${w}] has disconnected endpoint at (${P.x.toFixed(2)}, ${P.y.toFixed(2)})`,source_trace_id:E?.source_trace_id||I.source_trace_id||`!${I.pcb_trace_id}`,error_type:"pcb_trace_error",pcb_trace_id:I.pcb_trace_id,pcb_trace_error_id:`disconnected_endpoint_${I.pcb_trace_id}_end`,center:{x:P.x,y:P.y},pcb_component_ids:[],pcb_port_ids:[]})}}return i}function quo(e){if(e.outline&&e.outline.length>0)return e.outline.map((t)=>({x:t.x,y:t.y}));if(e.center&&typeof e.width==="number"&&typeof e.height==="number"){let t=e.center.x,n=e.center.y,o=e.width/2,i=e.height/2;return[{x:t-o,y:n-i},{x:t+o,y:n-i},{x:t+o,y:n+i},{x:t-o,y:n+i}]}return null}function Juo(e,t={}){let n=[],o=Z5(e);if(!o)return n;let i=t.margin??$5(o,"min_board_edge_clearance")??Tg.min_board_edge_clearance,r=quo(o);if(!r)return n;let s=ts(e).pcb_trace.list();for(let a of s){if(a.route.length<2)continue;for(let c=0;c<a.route.length-1;c++){let l=a.route[c],d=a.route[c+1];if(l.route_type!=="wire"||d.route_type!=="wire")continue;let u="width"in l?l.width:("width"in d)?d.width:0.1,h={x:l.x,y:l.y},A={x:d.x,y:d.y},m=Number.POSITIVE_INFINITY;for(let g=0;g<r.length;g++){let _=r[g],f=r[(g+1)%r.length],y=Ay(h,A,_,f);if(y<m)m=y}let p=u/2+i;if(m<p){let g={type:"pcb_trace_error",error_type:"pcb_trace_error",pcb_trace_error_id:`trace_too_close_to_board_${a.pcb_trace_id}_segment_${c}`,message:`Trace too close to board edge (${m.toFixed(3)}mm < ${p.toFixed(3)}mm required, margin: ${i}mm)`,pcb_trace_id:a.pcb_trace_id,source_trace_id:a.source_trace_id||"",center:{x:(h.x+A.x)/2,y:(h.y+A.y)/2},pcb_component_ids:[],pcb_port_ids:[]};n.push(g)}}}return n}var d7e=(e)=>e.type==="pcb_courtyard_circle"||e.type==="pcb_courtyard_outline"||e.type==="pcb_courtyard_polygon"||e.type==="pcb_courtyard_rect";function dft(e){if(d7e(e))return[e.layer];return kp(e)}function $uo(e,t){if(e.length===0||t.length===0)return!0;return e.some((n)=>t.includes(n))}function Zuo(e,t){let n=dft(e),o=dft(t);if(!$uo(n,o))return!1;if(e.type==="pcb_smtpad"&&t.type==="pcb_smtpad")return ux(e,t)<=0;if(e.type==="pcb_plated_hole"&&d7e(t))return ux(e,l7e(t))<=0;if(d7e(e)&&t.type==="pcb_plated_hole")return ux(t,l7e(e))<=0;let i=Yf([e]),r=Yf([t]);return h0(i,r)}var E$=(e)=>e.type==="pcb_courtyard_circle"||e.type==="pcb_courtyard_outline"||e.type==="pcb_courtyard_polygon"||e.type==="pcb_courtyard_rect",uft=(e)=>e.type==="pcb_hole"||e.type==="pcb_plated_hole",hft=(e,t)=>{if("pcb_port_id"in t&&t.pcb_port_id)return tE(e,t.pcb_port_id);let n=pa(t);return ys(e,n)};function eho(e){let t=[],n=new Set(e.flatMap((d)=>d.type==="pcb_component"&&d.do_not_place?[d.pcb_component_id]:[])),o=js(e),i=ts(e).pcb_smtpad.list(),r=ts(e).pcb_plated_hole.list(),s=ts(e).pcb_hole.list(),a=e.filter(E$),c=new Map;for(let d of i){let u=d.pcb_component_id||`standalone_pad_${pa(d)}`;if(!c.has(u))c.set(u,{component_id:u,elements:[]});c.get(u).elements.push(d)}for(let d of r){let u=d.pcb_component_id||`standalone_plated_hole_${pa(d)}`;if(!c.has(u))c.set(u,{component_id:u,elements:[]});c.get(u).elements.push(d)}for(let d of s){let u=d.pcb_component_id||`standalone_hole_${pa(d)}`;if(!c.has(u))c.set(u,{component_id:u,elements:[d]})}for(let d of a){let u=d.pcb_component_id;if(!c.has(u))c.set(u,{component_id:u,elements:[]});c.get(u).elements.push(d)}for(let[d,u]of c)if(u.elements.length>0)u.bounds=Yf(u.elements);let l=Array.from(c.values());for(let d=0;d<l.length;d++)for(let u=d+1;u<l.length;u++){let h=l[d],A=l[u],m=n.has(h.component_id)||n.has(A.component_id);if(!h.bounds||!A.bounds)continue;if(!h0(h.bounds,A.bounds))continue;for(let p of h.elements)for(let g of A.elements){let _=pa(p),f=pa(g);if(m&&(E$(p)||E$(g)))continue;if((E$(p)||E$(g))&&!uft(p)&&!uft(g))continue;if(p.type==="pcb_smtpad"&&g.type==="pcb_smtpad"&&o.areIdsConnected(_,f))continue;if(Zuo(p,g)){let y=hft(e,p),x=hft(e,g),C={type:"pcb_footprint_overlap_error",pcb_error_id:`pcb_footprint_overlap_${_}_${f}`,error_type:"pcb_footprint_overlap_error",message:`${p.type} ${y} overlaps with ${g.type} ${x}`,pcb_component_ids:[p.pcb_component_id,g.pcb_component_id].filter((I)=>Boolean(I))};if(p.type==="pcb_smtpad"||g.type==="pcb_smtpad"){if(C.pcb_smtpad_ids=[],p.type==="pcb_smtpad")C.pcb_smtpad_ids.push(_);if(g.type==="pcb_smtpad")C.pcb_smtpad_ids.push(f)}if(p.type==="pcb_plated_hole"||g.type==="pcb_plated_hole"){if(C.pcb_plated_hole_ids=[],p.type==="pcb_plated_hole")C.pcb_plated_hole_ids.push(_);if(g.type==="pcb_plated_hole")C.pcb_plated_hole_ids.push(f)}if(p.type==="pcb_hole"||g.type==="pcb_hole"){if(C.pcb_hole_ids=[],p.type==="pcb_hole")C.pcb_hole_ids.push(_);if(g.type==="pcb_hole")C.pcb_hole_ids.push(f)}t.push(C)}}}return t}var tho=new Set(["pcb_courtyard_circle","pcb_courtyard_outline","pcb_courtyard_polygon","pcb_courtyard_pill","pcb_courtyard_rect"]);function nho(e){let t=new Set(e.flatMap((o)=>{if(o.type==="source_manually_placed_via")return[o.source_manually_placed_via_id];if(o.type==="source_component"&&o.ftype==="simple_test_point")return[o.source_component_id];return[]})),n=new Set(e.filter((o)=>tho.has(o.type)).flatMap((o)=>("pcb_component_id"in o)&&o.pcb_component_id?[o.pcb_component_id]:[]));return e.filter((o)=>o.type==="pcb_component").filter((o)=>!n.has(o.pcb_component_id)&&(!o.source_component_id||!t.has(o.source_component_id))).map((o)=>{let i=o.source_component_id?e.find((s)=>s.type==="source_component"&&s.source_component_id===o.source_component_id):void 0,r=i?.type==="source_component"?i.name:kQ(e,o.pcb_component_id);return{type:"pcb_component_missing_courtyard_warning",pcb_component_missing_courtyard_warning_id:`pcb_component_missing_courtyard_warning_${o.pcb_component_id}`,warning_type:"pcb_component_missing_courtyard_warning",message:`${r} has no courtyard`,pcb_component_id:o.pcb_component_id,source_component_id:o.source_component_id,subcircuit_id:o.subcircuit_id}})}var n1t=(e)=>{if(e.trace_length!==void 0)return e.trace_length;let t=0,n;for(let o of e.route){let i=o.route_type==="through_pad"?o.start:o;if(n)t+=Math.hypot(i.x-n.x,i.y-n.y);if(o.route_type==="via")t+=1.6;if(o.route_type==="through_pad")t+=Math.hypot(o.end.x-o.start.x,o.end.y-o.start.y),n=o.end;else n=o}return t},oho=(e)=>{let t=new Set;for(let n of e.route){if(n.route_type!=="wire")continue;if(n.start_pcb_port_id)t.add(n.start_pcb_port_id);if(n.end_pcb_port_id)t.add(n.end_pcb_port_id)}return t},o1t=(e)=>{let t=e.filter((a)=>a.type==="source_trace"),n=e.filter((a)=>a.type==="pcb_trace"),o=e.filter((a)=>a.type==="pcb_port"),i=new Map;for(let a of o){if(!a.source_port_id)continue;let c=i.get(a.source_port_id)??new Set;c.add(a.pcb_port_id),i.set(a.source_port_id,c)}let r=new Map;for(let a of n){if(!a.source_trace_id)continue;let c=r.get(a.source_trace_id)??[];c.push(a),r.set(a.source_trace_id,c)}let s=new Map;for(let a of t){if(a.connected_source_port_ids.length!==2)continue;let c=a.connected_source_port_ids.map((d)=>i.get(d));if(c.some((d)=>!d?.size))continue;let l=new Set((r.get(a.source_trace_id)??[]).filter((d)=>{let u=oho(d);return c.every((h)=>[...h].some((A)=>u.has(A)))}).map((d)=>d.pcb_trace_id));if(l.size>0)s.set(a.source_trace_id,l)}for(let[a,c]of s)r.set(a,r.get(a).filter((l)=>c.has(l.pcb_trace_id)));return r},iho=(e)=>{let t=new Map(e.filter((i)=>i.type==="source_trace").map((i)=>[i.source_trace_id,i])),n=o1t(e),o=[];for(let[i,r]of n){let s=r[0],a=t.get(i);if(!a)continue;let c=a.max_length;if(typeof c!=="number")continue;let l=r.reduce((d,u)=>d+n1t(u),0);if(l<=c+0.000000001)continue;o.push({type:"pcb_trace_too_long_error",pcb_trace_too_long_error_id:`pcb_trace_too_long_error_${s.pcb_trace_id}`,error_type:"pcb_trace_too_long_error",message:`PCB trace is ${l.toFixed(2)}mm long, exceeding the ${c}mm maximum`,pcb_trace_id:s.pcb_trace_id,source_trace_id:a.source_trace_id,source_net_id:a.connected_source_net_ids[0],actual_trace_length:l,maximum_trace_length:c,subcircuit_id:s.subcircuit_id??a.subcircuit_id})}return o},rho=(e)=>{let t=e.filter((r)=>r.type==="source_trace"),n=e.filter((r)=>r.type==="pcb_trace"),o=e.filter((r)=>r.type==="pcb_port"),i=[];for(let r of t){let s=r.max_via_count;if(typeof s!=="number")continue;let a=n.filter((d)=>d.source_trace_id===r.source_trace_id);if(a.length===0)continue;let c=a.reduce((d,u)=>d+u.route.filter((h)=>h.route_type==="via").length,0);if(c<=s)continue;let l=o.filter((d)=>d.source_port_id!==void 0&&r.connected_source_port_ids.includes(d.source_port_id));i.push({type:"pcb_trace_error",pcb_trace_error_id:`max_via_count_exceeded_${r.source_trace_id}`,error_type:"pcb_trace_error",message:`PCB trace uses ${c} vias, exceeding the ${s} maximum`,pcb_trace_id:a[0].pcb_trace_id,source_trace_id:r.source_trace_id,pcb_component_ids:[...new Set(l.map((d)=>d.pcb_component_id).filter((d)=>d!==void 0))],pcb_port_ids:l.map((d)=>d.pcb_port_id),subcircuit_id:a[0].subcircuit_id??r.subcircuit_id})}return i};function sho(e,{connMap:t,minClearance:n}={}){let o=j7(e);if(o.length<2)return[];let i=Z5(e);n??=$5(i,"min_pad_edge_to_pad_edge_clearance")??Tg.min_pad_edge_to_pad_edge_clearance,t??=js(e);let r=new cY({objects:o,getBounds:nE,getId:(a)=>pa(a)}),s=new Map;for(let a of o){let c=pa(a),l=r.getObjectsInBounds(nE(a),n);for(let d of l){let u=pa(d);if(c===u)continue;if(!kp(a).some((_)=>kp(d).includes(_)))continue;if(t.areIdsConnected(c,u))continue;let h=[c,u].sort().join("_"),A=ux(a,d);if(A+hx>=n)continue;let m=i7e(a),p=i7e(d),g={type:"pcb_pad_pad_clearance_error",pcb_pad_pad_clearance_error_id:`pad_pad_clearance_${h}`,error_type:"pcb_pad_pad_clearance_error",message:`Pads ${ys(e,c)} and ${ys(e,u)} are too close (clearance: ${yc(A)}, minimum: ${yc(n)})`,pcb_pad_ids:[c,u],minimum_clearance:n,actual_clearance:A,center:{x:(m.x+p.x)/2,y:(m.y+p.y)/2}};if(!s.has(h))s.set(h,g)}}return Array.from(s.values())}function aho(e,{connMap:t,minClearance:n}={}){let o=j7(e),i=zft(e);if(o.length===0||i.length===0)return[];let r=Z5(e);n??=$5(r,"min_trace_to_pad_edge_clearance")??Tg.min_trace_to_pad_edge_clearance,t??=js(e);let s=new cY({objects:o,getBounds:nE,getId:(l)=>pa(l)}),a=new Map,c=new Set;for(let l of i){let d=s.getObjectsInBounds($G(l),n+l.thickness/2);for(let u of d){let h=pa(u);if(!kp(u).includes(l.layer))continue;if(t.areIdsConnected(l.pcb_trace_id,h))continue;let A=`${h}_${l.pcb_trace_id}`,{gap:m,center:p}=z$(l,u);if(nY(m)){a.delete(A),c.add(A);continue}if(c.has(A))continue;if(m+hx>=n)continue;let g={type:"pcb_pad_trace_clearance_error",pcb_pad_trace_clearance_error_id:`pad_trace_clearance_${A}`,error_type:"pcb_pad_trace_clearance_error",message:`Pad ${ys(e,h)} and trace ${ys(e,l.pcb_trace_id)} are too close (clearance: ${yc(m)}, minimum: ${yc(n)})`,pcb_pad_id:h,pcb_trace_id:l.pcb_trace_id,minimum_clearance:n,actual_clearance:m,center:p},_=a.get(A);if(!_||m<_.gap)a.set(A,{error:g,gap:m})}}return Array.from(a.values()).map(({error:l})=>l)}function cho(e,{connMap:t,minClearance:n}={}){let o=e.filter((c)=>c.type==="pcb_via"),i=zft(e).map((c)=>({...c,minX:Math.min(c.x1,c.x2),maxX:Math.max(c.x1,c.x2),minY:Math.min(c.y1,c.y2),maxY:Math.max(c.y1,c.y2),radius:Math.max(0,c.thickness/2),finiteBounds:Number.isFinite(c.x1)&&Number.isFinite(c.x2)&&Number.isFinite(c.y1)&&Number.isFinite(c.y2)&&Number.isFinite(c.thickness)}));if(o.length===0||i.length===0)return[];let r=Z5(e);n??=$5(r,"min_trace_to_pad_edge_clearance")??Tg.min_trace_to_pad_edge_clearance,t??=js(e);let s=new Map,a=new Set;for(let c of o){let l=kp(c),d=Number.isFinite(c.x)&&Number.isFinite(c.y)&&Number.isFinite(c.outer_diameter)&&Number.isFinite(n),u=Math.max(0,c.outer_diameter/2)+Math.max(0,n)+hx;for(let h of i){let A=u+h.radius;if(d&&h.finiteBounds&&(c.x<h.minX-A||c.x>h.maxX+A||c.y<h.minY-A||c.y>h.maxY+A))continue;if(!l.includes(h.layer))continue;if(t.areIdsConnected(h.pcb_trace_id,c.pcb_via_id))continue;let m=`${c.pcb_via_id}_${h.pcb_trace_id}`,{gap:p,center:g}=z$(h,c);if(nY(p)){s.delete(m),a.add(m);continue}if(a.has(m))continue;if(p+hx>=n)continue;let _={type:"pcb_via_trace_clearance_error",pcb_via_trace_clearance_error_id:`via_trace_clearance_${m}`,error_type:"pcb_via_trace_clearance_error",message:`Via ${ys(e,c.pcb_via_id)} and trace ${ys(e,h.pcb_trace_id)} are too close (clearance: ${yc(p)}, minimum: ${yc(n)})`,pcb_via_id:c.pcb_via_id,pcb_trace_id:h.pcb_trace_id,minimum_clearance:n,actual_clearance:p,center:g},f=s.get(m);if(!f||p<f.gap)s.set(m,{error:_,gap:p})}}return Array.from(s.values()).map(({error:c})=>c)}function lho(e,{connMap:t,minClearance:n}={}){let o=e.filter((l)=>l.type==="pcb_via"),i=j7(e);if(o.length===0||i.length===0)return[];let r=Z5(e),s=n??$5(r,"min_pad_edge_to_pad_edge_clearance")??Tg.min_pad_edge_to_pad_edge_clearance;t??=js(e);let a=new cY({objects:i,getBounds:nE,getId:pa}),c=[];for(let l of o){let d=a.getObjectsInBounds(nE(l),s);for(let u of d){let h=pa(u);if(!kp(l).some((m)=>kp(u).includes(m)))continue;if(t.areIdsConnected(l.pcb_via_id,h))continue;let A=ux(l,u);if(A+hx>=s)continue;c.push({type:"pcb_pad_pad_clearance_error",pcb_pad_pad_clearance_error_id:`via_pad_clearance_${l.pcb_via_id}_${h}`,error_type:"pcb_pad_pad_clearance_error",message:`Via ${ys(e,l.pcb_via_id)} and pad ${ys(e,h)} are too close (clearance: ${yc(A)}, minimum: ${yc(s)})`,pcb_pad_ids:[l.pcb_via_id,h],minimum_clearance:s,actual_clearance:A,center:kdo(l,u)})}}return c}var dho=0.000000001;function uho(e,t){let{gap:n}=z$({x1:e.x,y1:e.y,x2:e.x,y2:e.y,thickness:e.hole_diameter},t);return n<-dho}function hho(e){let t=Z5(e);if(t&&"is_via_in_pad_allowed"in t&&t.is_via_in_pad_allowed===!0)return[];let n=e.filter((a)=>a.type==="pcb_via"),o=j7(e);if(n.length===0||o.length===0)return[];let i=new Map(o.map((a,c)=>[pa(a),c])),r=new cY({objects:o,getBounds:nE,getId:pa}),s=[];for(let a of n){let c=r.getObjectsInBounds(nE(a));for(let l of c){let d=pa(l),u=kp(a),h=kp(l);if(!u.some((p)=>h.includes(p)))continue;if(!uho(a,l))continue;let A=i.get(d)??0,m=Mdo(e,l,A);s.push({type:"pcb_placement_error",pcb_placement_error_id:`via_in_pad_${a.pcb_via_id}_${d}`,error_type:"pcb_placement_error",message:`Via hole at (${a.x.toFixed(2)}mm, ${a.y.toFixed(2)}mm) overlaps ${m}`,subcircuit_id:a.subcircuit_id??l.subcircuit_id})}}return s}var pme=(e)=>{let t=new Set;for(let n of e){if(n.type==="pcb_pad_trace_clearance_error"&&typeof n.pcb_trace_id==="string"&&typeof n.pcb_pad_id==="string")t.add(`overlap_${n.pcb_trace_id}_${n.pcb_pad_id}`);if(n.type==="pcb_via_trace_clearance_error"&&typeof n.pcb_trace_id==="string"&&typeof n.pcb_via_id==="string")t.add(`overlap_${n.pcb_trace_id}_${n.pcb_via_id}`)}return e.filter((n)=>{let o=n;return!(o.type==="pcb_trace_error"&&typeof o.pcb_trace_error_id==="string"&&t.has(o.pcb_trace_error_id))})};function mho(e){let t=[],n=e.filter((a)=>("source_component_id"in a)&&(a.type==="source_component"||a.type.startsWith("source_simple_"))),o=e.filter((a)=>a.type==="source_port"),i=e.filter((a)=>a.type==="source_trace"),r=new Set;for(let a of i)for(let c of a.connected_source_port_ids??[])r.add(c);let s=new Map;for(let a of n)if("internally_connected_source_port_ids"in a&&a.internally_connected_source_port_ids)s.set(a.source_component_id,a.internally_connected_source_port_ids);for(let a of s.values())for(let c of a)if(c.some((l)=>r.has(l)))for(let l of c)r.add(l);for(let a of o)if(a.must_be_connected===!0){if(!r.has(a.source_port_id)){let l=n.find((d)=>d.source_component_id===a.source_component_id)?.name??"Unknown";t.push({type:"source_pin_must_be_connected_error",source_pin_must_be_connected_error_id:`source_pin_must_be_connected_error_${a.source_port_id}`,error_type:"source_pin_must_be_connected_error",message:`Port ${a.name} on ${l} must be connected but is floating`,source_component_id:a.source_component_id??"",source_port_id:a.source_port_id,subcircuit_id:a.subcircuit_id})}}return t}var mft=(e)=>{if(e===void 0)return;if(typeof e==="string"&&!/^[+-]?(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?\s*(?:[pnumkKMGTµμ]?V)?$/i.test(e.trim()))return;try{let t=xl.parse(e);return Number.isFinite(t)?t:void 0}catch{return}};function pho(e){let t=Nv(e),n=e.filter((r)=>r.type==="source_port"),o=new Map;for(let r of n){let s=mft(r.provides_voltage);if(s===void 0)continue;let a=t.getNetConnectedToId(r.source_port_id);if(a===void 0)continue;let c=o.get(a)??[];c.push({sourcePort:r,volts:s}),o.set(a,c)}let i=[];for(let r of n){let s=mft(r.requires_voltage);if(s===void 0)continue;let a=t.getNetConnectedToId(r.source_port_id);if(a===void 0)continue;for(let c of o.get(a)??[]){if(c.sourcePort.source_port_id===r.source_port_id)continue;if(Math.abs(c.volts-s)<=0.000000001*Math.max(1,Math.abs(c.volts),Math.abs(s)))continue;i.push(EM.parse({type:"source_component_misconfigured_error",message:`${Kgt(e,r)} requires ${s} V, but is connected to ${Kgt(e,c.sourcePort)}, which provides ${c.volts} V.`,source_component_ids:[...new Set([r.source_component_id,c.sourcePort.source_component_id].filter((l)=>l!==void 0))],source_port_ids:[r.source_port_id,c.sourcePort.source_port_id],is_fatal:!0}))}}return i}function Aho(e){let t=e.filter((r)=>r.type==="source_component"&&(r.ftype==="simple_push_button"||r.ftype==="simple_switch")),n=e.filter((r)=>r.type==="source_port"),o=e.filter((r)=>r.type==="schematic_port"),i=[];for(let r of t){let s=o.flatMap((l)=>{let d=n.find((u)=>u.source_port_id===l.source_port_id&&u.source_component_id===r.source_component_id);if(!d)return[];return[d]});if(s.length!==2)continue;let a=s[0].subcircuit_connectivity_map_key,c=s[1].subcircuit_connectivity_map_key;if(!a)continue;if(a!==c)continue;i.push(EM.parse({type:"source_component_misconfigured_error",message:`Switch ${r.name} has both schematic contacts connected to the same net. Check internallyConnectedPins and the footprint pin mapping.`,source_component_ids:[r.source_component_id],source_port_ids:s.map((l)=>l.source_port_id),is_fatal:!0}))}return i}var _ho=["must_be_connected","provides_power","requires_power","provides_ground","requires_ground","provides_voltage","requires_voltage","do_not_connect","include_in_board_pinout","can_use_internal_pullup","is_using_internal_pullup","needs_external_pullup","can_use_internal_pulldown","is_using_internal_pulldown","needs_external_pulldown","can_use_open_drain","is_using_open_drain","can_use_push_pull","is_using_push_pull","should_have_decoupling_capacitor","recommended_decoupling_capacitor_capacitance","is_configured_for_i2c_sda","is_configured_for_i2c_scl","is_configured_for_spi_mosi","is_configured_for_spi_miso","is_configured_for_spi_sck","is_configured_for_spi_cs","is_configured_for_uart_tx","is_configured_for_uart_rx","supports_i2c_sda","supports_i2c_scl","supports_spi_mosi","supports_spi_miso","supports_spi_sck","supports_spi_cs","supports_uart_tx","supports_uart_rx"];function gho(e){return _ho.some((t)=>e[t]!==void 0)}function i1t(e){let t=[],n=ts(e),o=n.source_component.list(),i=n.source_port.list(),r=new Map;for(let s of i){if(!s.source_component_id)continue;let a=r.get(s.source_component_id)??[];a.push(s),r.set(s.source_component_id,a)}for(let s of o){if(s.ftype!=="simple_chip")continue;let a=r.get(s.source_component_id)??[];if(a.length===0)continue;if(a.some((l)=>gho(l)))continue;t.push({type:"source_component_pins_underspecified_warning",source_component_pins_underspecified_warning_id:`source_component_pins_underspecified_warning_${s.source_component_id}`,warning_type:"source_component_pins_underspecified_warning",message:`All pins on ${s.name} are underspecified (no pinAttributes set)`,source_component_id:s.source_component_id,source_port_ids:a.map((l)=>l.source_port_id),subcircuit_id:a[0]?.subcircuit_id})}return t}var r1t=(e,t)=>e.ftype==="simple_chip"&&t.filter((n)=>n.do_not_connect!==!0).length>=2;function s1t(e){let t=[],n=ts(e),o=n.source_component.list(),i=n.source_port.list(),r=new Map;for(let s of i){if(!s.source_component_id)continue;let a=r.get(s.source_component_id)??[];a.push(s),r.set(s.source_component_id,a)}for(let s of o){let a=r.get(s.source_component_id)??[];if(!r1t(s,a))continue;if(a.some((l)=>l.requires_power===!0))continue;t.push({type:"source_no_power_pin_defined_warning",source_no_power_pin_defined_warning_id:`source_no_power_pin_defined_warning_${s.source_component_id}`,warning_type:"source_no_power_pin_defined_warning",message:`${s.name} has no pin with requires_power=true`,source_component_id:s.source_component_id,source_port_ids:a.map((l)=>l.source_port_id),subcircuit_id:a[0]?.subcircuit_id})}return t}function a1t(e){let t=[],n=ts(e),o=n.source_component.list(),i=n.source_port.list(),r=new Map;for(let s of i){if(!s.source_component_id)continue;let a=r.get(s.source_component_id)??[];a.push(s),r.set(s.source_component_id,a)}for(let s of o){let a=r.get(s.source_component_id)??[];if(!r1t(s,a))continue;if(a.some((l)=>l.requires_ground===!0))continue;t.push({type:"source_no_ground_pin_defined_warning",source_no_ground_pin_defined_warning_id:`source_no_ground_pin_defined_warning_${s.source_component_id}`,warning_type:"source_no_ground_pin_defined_warning",message:`${s.name} has no pin with requires_ground=true`,source_component_id:s.source_component_id,source_port_ids:a.map((l)=>l.source_port_id),subcircuit_id:a[0]?.subcircuit_id})}return t}var fho=0.2,pft=3,yho=0.000000001;function xho(e){let t=e.filter((r)=>r.type==="schematic_component"),n=e.filter((r)=>r.type==="schematic_port"),o=new Map;for(let r of n){if(!r.schematic_component_id)continue;let s=o.get(r.schematic_component_id)??[];s.push(r),o.set(r.schematic_component_id,s)}let i=[];for(let r of t){if(!r.is_box_with_pins||r.size.height<=0)continue;let s=(o.get(r.schematic_component_id)??[]).filter((g)=>g.side_of_component==="left"||g.side_of_component==="right");if(s.length<2)continue;let a=s.map((g)=>g.center.y),c=Math.max(...a),l=Math.min(...a),d=r.center.y+r.size.height/2,u=r.center.y-r.size.height/2,A=(r.pin_spacing??fho)*pft,m={top:d-c,bottom:l-u},p=ys(e,r.schematic_component_id);for(let g of["top","bottom"]){let _=m[g];if(_<=A+yho||_<=0)continue;let f=g==="top"?"above":"below",y=`excessive_${g}_padding`;i.push({type:"schematic_component_styling_warning",schematic_component_styling_warning_id:`schematic_component_styling_warning_${r.schematic_component_id}_${y}`,warning_type:"schematic_component_styling_warning",message:`${p} has excessive empty space ${f} its pins (${_.toFixed(2)}mm, more than ${pft} pin spacings)`,schematic_component_id:r.schematic_component_id,styling_issue_type:y,schematic_port_ids:s.map((x)=>x.schematic_port_id),source_component_id:r.source_component_id,schematic_sheet_id:r.schematic_sheet_id,subcircuit_id:r.subcircuit_id})}}return i}var Cho=(e)=>/^unnamed_[a-z0-9_-]+\d+$/i.test(e),Iho=(e,t)=>{let{center:n,size:o}=t,i=0.000000001;return e.position.x>=n.x-o.width/2-0.000000001&&e.position.x<=n.x+o.width/2+0.000000001&&e.position.y>=n.y-o.height/2-0.000000001&&e.position.y<=n.y+o.height/2+0.000000001};function bho(e){let t=e.filter((c)=>c.type==="schematic_component"),n=e.filter((c)=>c.type==="source_component"),o=e.filter((c)=>c.type==="schematic_text"),i=new Map(n.map((c)=>[c.source_component_id,c])),r=new Map,s=[];for(let c of o){if(!c.schematic_component_id){if(c.schematic_symbol_id)s.push(c);continue}let l=r.get(c.schematic_component_id)??new Set;l.add(c.text.trim()),r.set(c.schematic_component_id,l)}let a=[];for(let c of t){if(c.symbol_name)continue;if(c.is_box_with_pins)continue;if(!c.source_component_id)continue;let l=i.get(c.source_component_id);if(!l)continue;let d=new Set([l.name,l.display_name].map((p)=>p?.trim()).filter((p)=>Boolean(p))),u=[...d].find((p)=>!Cho(p)),h=r.get(c.schematic_component_id),A=[...d].some((p)=>h?.has(p))||s.some((p)=>d.has(p.text.trim())&&Iho(p,c));if(u&&A)continue;let m=u??"Schematic component";a.push({type:"schematic_component_styling_warning",schematic_component_styling_warning_id:`schematic_component_styling_warning_${c.schematic_component_id}_missing_reference_designator_text`,warning_type:"schematic_component_styling_warning",message:`${m} is missing schematic reference designator text. For a custom symbol, add name="{REFDES}" inside the symbol.`,schematic_component_id:c.schematic_component_id,styling_issue_type:"missing_reference_designator_text",source_component_id:c.source_component_id,schematic_sheet_id:c.schematic_sheet_id,subcircuit_id:c.subcircuit_id})}return a}var jG=0.000000001,Sho=(e)=>e.display_pin_label??`pin ${e.pin_number}`;function Pho(e){let t=e.filter((r)=>r.type==="schematic_component"),n=e.filter((r)=>r.type==="schematic_port"),o=new Map;for(let r of n){if(!r.schematic_component_id)continue;let s=o.get(r.schematic_component_id)??[];s.push(r),o.set(r.schematic_component_id,s)}let i=[];for(let r of t){if(r.is_box_with_pins===!1||r.size.width<=0||r.size.height<=0)continue;let s=r.center.x-r.size.width/2,a=r.center.x+r.size.width/2,c=r.center.y-r.size.height/2,l=r.center.y+r.size.height/2,u=(o.get(r.schematic_component_id)??[]).filter((_)=>{if(_.side_of_component==="left"||_.side_of_component==="right")return _.center.y<c-jG||_.center.y>l+jG;if(_.side_of_component==="top"||_.side_of_component==="bottom")return _.center.x<s-jG||_.center.x>a+jG;return!1}).sort((_,f)=>{let y=_.side_of_component==="left"||_.side_of_component==="right",x=f.side_of_component==="left"||f.side_of_component==="right";if(y&&x)return f.center.y-_.center.y;if(!y&&!x)return _.center.x-f.center.x;return y?-1:1});if(u.length===0)continue;let h=Math.max(r.size.height,...u.filter((_)=>_.side_of_component==="left"||_.side_of_component==="right").map((_)=>2*Math.abs(_.center.y-r.center.y))),A=Math.max(r.size.width,...u.filter((_)=>_.side_of_component==="top"||_.side_of_component==="bottom").map((_)=>2*Math.abs(_.center.x-r.center.x))),m=[];if(h>r.size.height+jG)m.push(`increase schHeight to at least ${h.toFixed(2)}mm`);if(A>r.size.width+jG)m.push(`increase schWidth to at least ${A.toFixed(2)}mm`);let p=ys(e,r.schematic_component_id),g=u.map(Sho).join(", ");i.push({type:"schematic_component_styling_warning",schematic_component_styling_warning_id:`schematic_component_styling_warning_${r.schematic_component_id}_ports_outside_body`,warning_type:"schematic_component_styling_warning",message:`${p} has schematic pins outside its body (${g}); ${m.join(" and ")}`,schematic_component_id:r.schematic_component_id,styling_issue_type:"ports_outside_body",schematic_port_ids:u.map((_)=>_.schematic_port_id),source_component_id:r.source_component_id,schematic_sheet_id:r.schematic_sheet_id,subcircuit_id:r.subcircuit_id})}return i}var N$=(e)=>{if(Number.isInteger(e))return String(e);return e.toFixed(3).replace(/\.0+$/,"").replace(/(\.\d*?)0+$/,"$1")},c1t=(e)=>{let t=N$(e);return e>0?`+${t}`:t},vho=(e)=>e.replaceAll("&","&").replaceAll('"',""").replaceAll("<","<").replaceAll(">",">"),tn=(e,t,n,o)=>{if(n===void 0)return;let i=typeof n==="number"?o?.formatDelta?c1t(n):N$(n):vho(n);e.push(`${t}="${i}"`)};function l1t(e){let t=new Map,n=(i)=>{let r=t.get(i);if(r===void 0||r===i)return i;let s=n(r);return t.set(i,s),s},o=(i)=>{let r=i[0];if(!r)return;let s=n(r);for(let a of i.slice(1))t.set(n(a),s)};for(let i of e){if(i.type==="source_port"||i.type==="source_net"){let r=i.type==="source_port"?i.source_port_id:i.source_net_id;if(i.subcircuit_connectivity_map_key)o([r,`connectivity:${i.subcircuit_connectivity_map_key}`])}if(i.type==="source_trace")o([...i.connected_source_port_ids,...i.connected_source_net_ids,...i.subcircuit_connectivity_map_key?[`connectivity:${i.subcircuit_connectivity_map_key}`]:[]]);if(i.type==="source_component_internal_connection")o(i.source_port_ids);if(i.type==="source_component")for(let r of i.internally_connected_source_port_ids??[])o(r)}return n}var p0=class{connected;components=new Map;portsByComponent=new Map;portsByNet=new Map;powerNets=new Set;groundNets=new Set;placements=new Map;schematicComponents=new Map;schematicPorts=new Map;constructor(e){this.connected=l1t(e.circuitJson);for(let t of e.componentPlacements)if(t.sourceComponentId)$0e(this.placements,t.sourceComponentId,t);for(let t of e.circuitJson){if(t.type==="source_component")this.components.set(t.source_component_id,t);if(t.type==="source_port"&&t.source_component_id)$0e(this.portsByComponent,t.source_component_id,t),$0e(this.portsByNet,this.connected(t.source_port_id),t);if(t.type==="source_net"){let n=this.connected(t.source_net_id);if(t.is_power||t.is_positive_voltage_source)this.powerNets.add(n);if(t.is_ground)this.groundNets.add(n)}if(t.type==="schematic_component")this.schematicComponents.set(t.schematic_component_id,t);if(t.type==="schematic_port"&&t.source_port_id)$0e(this.schematicPorts,t.source_port_id,t)}}placement(e){let t=this.placements.get(e);return t?.length===1?t[0]:void 0}port(e){let t=this.placement(e.source_component_id),n=this.schematicPorts.get(e.source_port_id)?.filter((o)=>o.schematic_component_id===t?.schematicComponentId);return n?.length===1?n[0]:void 0}namedPort(e,t){let n=this.portsByComponent.get(e)?.filter((o)=>o.name===t||o.port_hints?.includes(t));return n?.length===1?n[0]:void 0}twoTerminalNets(e){let t=this.portsByComponent.get(e);if(t?.length!==2)return;let n=this.connected(t[0].source_port_id),o=this.connected(t[1].source_port_id);if(n!==o)return[n,o]}isRail(e){return this.powerNets.has(e)||this.groundNets.has(e)}isDirectOpAmpFeedback(e){let t=this.twoTerminalNets(e);if(!t||t.some((n)=>this.isRail(n)))return!1;return t.some((n)=>(this.portsByNet.get(n)??[]).some((o)=>{let i=o.source_component_id;if(this.components.get(i)?.ftype!=="simple_op_amp")return!1;if(this.namedPort(i,"output")?.source_port_id!==o.source_port_id)return!1;return["inverting_input","non_inverting_input"].some((s)=>{let a=this.namedPort(i,s);if(!a)return!1;let c=this.connected(a.source_port_id);return c!==n&&t.includes(c)})}))}sameLocalScope(e,t){if(e.schematicSheetId!==t.schematicSheetId||e.subcircuitId!==t.subcircuitId)return!1;let n=this.schematicComponents.get(e.schematicComponentId??""),o=this.schematicComponents.get(t.schematicComponentId??"");if(!n||!o||n.schematic_group_id!==o.schematic_group_id)return!1;let i=this.components.get(e.sourceComponentId??""),r=this.components.get(t.sourceComponentId??"");return i?.source_group_id===r?.source_group_id&&i?.subcircuit_id===r?.subcircuit_id}};function $0e(e,t,n){let o=e.get(t);if(o)o.push(n);else e.set(t,[n])}var x7e=class extends Zn{constructor(e){super();this.params=e,this.index=new p0(e.ctx);for(let t of e.ctx.circuitJson){if(t.type==="pcb_component"&&t.do_not_place)this.unpopulated.add(t.source_component_id);if(t.type==="source_port"){let n=this.index.connected(t.source_port_id);if(t.requires_ground||t.provides_ground)this.index.groundNets.add(n);if(t.requires_power||t.provides_power)this.index.powerNets.add(n)}}this.nets=[...this.index.portsByNet.keys()],this.solved=this.nets.length===0}params;index;nets;unpopulated=new Set;currentIndex=0;_step(){let e=this.nets[this.currentIndex++];if(this.solved=this.currentIndex>=this.nets.length,!e||this.index.isRail(e))return;let t=this.index,n=t.portsByNet.get(e);if(n.length!==3||new Set(n.map((I)=>I.source_component_id)).size!==3)return;let o=n.map((I)=>this.localPart(I.source_component_id));if(o.some((I)=>!I))return;let i=o.filter((I)=>I.component.ftype==="simple_diode"),r=o.filter((I)=>I.component.ftype==="simple_capacitor");if(i.length!==2||r.length!==1)return;let s=r[0],a=i[0],c=i[1];if(![a,c].every((I)=>t.sameLocalScope(s.placement,I.placement)))return;let l=(I)=>I.nets.find((b)=>b!==e),d=[l(a),l(c)],u=d.filter((I)=>t.groundNets.has(I));if(u.length!==1)return;let h=u[0],A=d.find((I)=>I!==h),m=l(s);if(m===A||m===h||t.isRail(m))return;let g=[...new Set((t.portsByNet.get(A)??[]).filter((I)=>t.components.get(I.source_component_id)?.ftype==="simple_capacitor").map((I)=>I.source_component_id))].filter((I)=>t.twoTerminalNets(I)?.includes(h));if(!g.length||g.some((I)=>{let b=this.localPart(I);return!b||!t.sameLocalScope(s.placement,b.placement)}))return;let _=[s.placement,a.placement,c.placement],f=n.map((I)=>t.port(I)),y=Math.max(...f.flatMap((I,b)=>f.slice(b+1).map((P)=>Math.hypot(I.center.x-P.center.x,I.center.y-P.center.y)))),x=Math.max(4,..._.map((I)=>3*Math.max(I.width,I.height)));if(y<=x)return;let C=_.map((I)=>I.sourceComponentName||"component");this.params.issues.push({lineItemType:"DiodeCapacitorJunctionTooSpreadOut",capacitorSchematicBox:s.placement,diodeSchematicBoxes:[a.placement,c.placement],maxJunctionPinDistance:y,maxRecommendedJunctionPinDistance:x,message:`Bring ${C.join(", ")} closer together so their shared junction can be read as one local diode-capacitor stage. Preserve pin connections, leave room for labels, and reroute affected traces.`})}localPart(e){let t=this.index.components.get(e),n=this.index.placement(e),o=this.index.portsByComponent.get(e),i=this.index.twoTerminalNets(e);if(!t||!n||!i||this.unpopulated.has(e)||o?.length!==2||![n.width,n.height].every((r)=>Number.isFinite(r)&&r>0)||t.ftype==="simple_capacitor"&&(!Number.isFinite(t.capacitance)||t.capacitance<=0)||o.some((r)=>{let s=this.index.port(r);return r.do_not_connect||!s||s.schematic_sheet_id!==n.schematicSheetId||!Number.isFinite(s.center.x)||!Number.isFinite(s.center.y)}))return;return{component:t,placement:n,ports:o,nets:i}}static issueToString(e){let t=[];return tn(t,"capacitorName",e.capacitorSchematicBox.sourceComponentName),tn(t,"diodeNames",e.diodeSchematicBoxes.map((n)=>n.sourceComponentName).join(",")),tn(t,"maxJunctionPinDistance",e.maxJunctionPinDistance),tn(t,"maxRecommendedJunctionPinDistance",e.maxRecommendedJunctionPinDistance),tn(t,"message",e.message),`<DiodeCapacitorJunctionTooSpreadOut ${t.join(" ")} />`}},C7e=class extends Zn{constructor(e){super();this.params=e,this.index=new p0(e.ctx),this.ledIds=new Set([...this.index.components.values()].filter((t)=>t.ftype==="simple_led").map((t)=>t.source_component_id));for(let t of e.ctx.circuitJson)if(t.type==="pcb_component"&&t.do_not_place)this.unpopulated.add(t.source_component_id);this.solved=this.ledIds.size===0}params;index;ledIds;visited=new Set;unpopulated=new Set;_step(){let e=[...this.ledIds].find((l)=>!this.visited.has(l));if(!e){this.solved=!0;return}let t=[e];this.visited.add(e);let n=new Map;for(let l=0;l<t.length;l++){let d=t[l],u=new Set;for(let h of this.index.portsByComponent.get(d)??[])for(let A of this.index.portsByNet.get(this.index.connected(h.source_port_id))??[]){let m=A.source_component_id;if(m===d||!this.ledIds.has(m))continue;if(u.add(m),!this.visited.has(m))this.visited.add(m),t.push(m)}n.set(d,u)}if(this.solved=this.visited.size===this.ledIds.size,t.length<3)return;let o=t.filter((l)=>n.get(l).size===1);if(o.length!==2||t.some((l)=>n.get(l).size>2))return;let i=[o.sort()[0]];while(i.length<t.length){let l=i.at(-1),d=i.at(-2),u=[...n.get(l)].find((h)=>h!==d);if(!u||i.includes(u))return;i.push(u)}let r=i.map((l)=>this.index.placement(l));if(r.some((l)=>!l))return;let s=r.filter((l)=>l!==void 0);if(s.some((l)=>!this.index.sameLocalScope(s[0],l)||![l.schX,l.schY,l.width,l.height].every(Number.isFinite)||l.width<=0||l.height<=0))return;for(let l of i){let d=this.index.portsByComponent.get(l)??[];if(this.unpopulated.has(l)||!this.index.twoTerminalNets(l)||d.some((h)=>h.do_not_connect))return;let u=this.index.placement(l);for(let h of d){let A=this.index.port(h);if(!A||A.schematic_sheet_id!==u.schematicSheetId||!Number.isFinite(A.center.x)||!Number.isFinite(A.center.y)||!A.facing_direction)return}}let a=[];for(let l=1;l<i.length;l++){let d=i[l-1],u=i[l],h=this.index.twoTerminalNets(d),A=this.index.twoTerminalNets(u).filter((b)=>h.includes(b));if(A.length!==1||this.index.isRail(A[0]))return;let m=this.index.portsByNet.get(A[0])??[];if(m.length!==2)return;let p=m.find((b)=>b.source_component_id===d),g=m.find((b)=>b.source_component_id===u),_=this.index.port(p),f=this.index.port(g),y=f.center.x-_.center.x,x=f.center.y-_.center.y,C=Math.hypot(y,x),I=Math.max(s[l-1].width,s[l-1].height,s[l].width,s[l].height);if(C>Math.max(4,3*I)&&(Aft(_,y,x)<-I||Aft(f,-y,-x)<-I))a.push({firstSourcePortId:p.source_port_id,secondSourcePortId:g.source_port_id,pinDistance:C})}if(!a.length)return;let c=s.map((l)=>l.sourceComponentName||"LED").join(", ");this.params.issues.push({lineItemType:"SeriesLedChainNotOrdered",ledSchematicBoxes:s,backtrackingConnections:a,message:`Arrange ${c} in their connected series order so adjacent LEDs do not require long connections behind their pins. Move or rotate the symbols while preserving anode/cathode connections; allow space for labels and reroute affected traces. A horizontal, vertical, or clearly connected folded chain is acceptable.`})}static issueToString(e){let t=[];return tn(t,"ledComponents",e.ledSchematicBoxes.map((n)=>n.sourceComponentName).join(",")),tn(t,"backtrackingConnections",e.backtrackingConnections.length),tn(t,"maxPinDistance",Math.max(...e.backtrackingConnections.map((n)=>n.pinDistance))),tn(t,"message",e.message),`<SeriesLedChainNotOrdered ${t.join(" ")} />`}};function Aft(e,t,n){switch(e.facing_direction){case"left":return-t;case"right":return t;case"up":return n;case"down":return-n;default:return 0}}var I7e=class extends Zn{constructor(e){super();this.params=e,this.index=new p0(e.ctx);for(let t of e.ctx.circuitJson){if(t.type==="pcb_component"&&t.do_not_place)this.unpopulated.add(t.source_component_id);if(t.type==="source_port"){let n=this.index.connected(t.source_port_id);if(t.requires_ground||t.provides_ground)this.index.groundNets.add(n);if(t.requires_power||t.provides_power||t.requires_voltage!==void 0||t.provides_voltage!==void 0)this.index.powerNets.add(n)}}this.resistorIds=[...this.index.components.values()].filter((t)=>t.ftype==="simple_resistor").map((t)=>t.source_component_id),this.solved=this.resistorIds.length===0}params;index;resistorIds;unpopulated=new Set;currentIndex=0;_step(){let e=this.resistorIds[this.currentIndex++];this.solved=this.currentIndex>=this.resistorIds.length;let t=this.index,n=t.components.get(e),o=t.twoTerminalNets(e);if(n?.ftype!=="simple_resistor"||!Number.isFinite(n.resistance)||n.resistance<=0||!o)return;let i=o.filter((I)=>t.groundNets.has(I)&&!t.powerNets.has(I));if(i.length!==1)return;let r=i[0],s=o.find((I)=>I!==r);if(t.isRail(s))return;let a=t.portsByNet.get(s)??[];if(a.length!==3||a.some((I)=>I.do_not_connect))return;let c=a.find((I)=>t.components.get(I.source_component_id)?.ftype==="simple_capacitor"),l=a.find((I)=>t.components.get(I.source_component_id)?.ftype==="simple_chip");if(!c||!l)return;let d=c.source_component_id,u=t.components.get(d);if(u?.ftype!=="simple_capacitor"||!Number.isFinite(u.capacitance)||u.capacitance<=0||!t.twoTerminalNets(d)?.includes(r))return;let h=l.source_component_id;if((t.portsByComponent.get(h)?.length??0)<3)return;let A=t.placement(e),m=t.placement(d),p=t.placement(h);if(!A||!m||!p||[e,d,h].some((I)=>this.unpopulated.has(I)))return;if([A,m].some((I)=>I.schematicSheetId!==p.schematicSheetId||I.subcircuitId!==p.subcircuitId))return;if([A,m,p].some((I)=>![I.schX,I.schY,I.width,I.height].every(Number.isFinite)||I.width<=0||I.height<=0))return;let g=t.port(l);if(!g||g.schematic_sheet_id!==p.schematicSheetId)return;let _=this.pins(e,s,r,A),f=this.pins(d,s,r,m);if(!_||!f)return;let y=_ft(..._),x=_ft(...f);if(!y||!x)return;if(Math.abs(A.schX-m.schX)<(A.width+m.width)/2&&Math.abs(A.schY-m.schY)<(A.height+m.height)/2)return;let C;if(y!==x)C="different_axes";else{let I=y==="horizontal"?"x":"y",b=_.map((E)=>E.center[I]),P=f.map((E)=>E.center[I]);if((b[1]-b[0])*(P[1]-P[0])<0)C="crossed_connections";else{if(Math.min(Math.max(...b),Math.max(...P))-Math.max(Math.min(...b),Math.min(...P))>0.01)return;C="staggered"}}this.params.issues.push({lineItemType:"ParallelRcNotAligned",resistorSchematicBox:A,capacitorSchematicBox:m,chipSourcePortId:l.source_port_id,reason:C,message:`Draw ${A.sourceComponentName||"the resistor"} and ${m.sourceComponentName||"the capacitor"} as adjacent parallel branches with their shared nets at matching ends. Preserve all pin connections and capacitor polarity, leave room for labels, and reroute affected wires.`})}pins(e,t,n,o){let i=this.index.portsByComponent.get(e)??[];if(i.length!==2||i.some((c)=>c.do_not_connect))return;let r=[t,n].map((c)=>{let l=i.find((d)=>this.index.connected(d.source_port_id)===c);return l&&this.index.port(l)}),[s,a]=r;if(!s||!a||r.some((c)=>c.schematic_sheet_id!==o.schematicSheetId||!Number.isFinite(c.center.x)||!Number.isFinite(c.center.y)))return;return[s,a]}static issueToString(e){let t=[];return tn(t,"resistorComponentName",e.resistorSchematicBox.sourceComponentName),tn(t,"capacitorComponentName",e.capacitorSchematicBox.sourceComponentName),tn(t,"reason",e.reason),tn(t,"message",e.message),`<ParallelRcNotAligned ${t.join(" ")} />`}};function _ft(e,t){let n=new Set([e.facing_direction,t.facing_direction]);if(n.has("left")&&n.has("right")&&Math.abs(e.center.y-t.center.y)<0.01&&Math.abs(e.center.x-t.center.x)>0.01)return"horizontal";if(n.has("up")&&n.has("down")&&Math.abs(e.center.x-t.center.x)<0.01&&Math.abs(e.center.y-t.center.y)>0.01)return"vertical"}var b7e=class extends Zn{constructor(e){super();this.params=e,this.index=new p0(e.ctx);for(let t of e.ctx.circuitJson)if(t.type==="pcb_component"&&t.do_not_place)this.unpopulated.add(t.source_component_id);this.resistorIds=[...this.index.components.values()].filter((t)=>t.ftype==="simple_resistor").map((t)=>t.source_component_id),this.solved=this.resistorIds.length===0}params;index;resistorIds;unpopulated=new Set;currentIndex=0;_step(){let e=this.resistorIds[this.currentIndex++];if(this.solved=this.currentIndex>=this.resistorIds.length,!e||this.unpopulated.has(e))return;let t=this.index,n=t.components.get(e),o=t.placement(e),i=t.twoTerminalNets(e),r=t.portsByComponent.get(e)??[];if(n?.ftype!=="simple_resistor"||!Number.isFinite(n.resistance)||n.resistance<=0||!o||!i||r.some((I)=>I.do_not_connect))return;let s=i.filter((I)=>t.groundNets.has(I)&&!t.powerNets.has(I));if(s.length!==1)return;let a=i.find((I)=>I!==s[0]);if(t.isRail(a))return;let c=t.portsByNet.get(a)??[];if(c.length!==2)return;let l=c.find((I)=>I.source_component_id!==e),d=c.find((I)=>I.source_component_id===e);if(!l||!d||l.do_not_connect||Eho(l))return;let u=l.source_component_id,h=t.placement(u);if(t.components.get(u)?.ftype!=="simple_chip"||(t.portsByComponent.get(u)?.length??0)<3||this.unpopulated.has(u)||!h||!t.sameLocalScope(h,o))return;let A=t.port(l),m=t.port(d);if(!A||!m||[A,m].some((I)=>I.schematic_sheet_id!==h.schematicSheetId||!Number.isFinite(I.center.x)||!Number.isFinite(I.center.y))||[h,o].some((I)=>![I.schX,I.schY,I.width,I.height].every(Number.isFinite)||I.width<=0||I.height<=0))return;let p=A.facing_direction;if(!p)return;let g=p==="left"||p==="right",f=-(p==="left"||p==="down"?-1:1)*(g?o.schX-h.schX:o.schY-h.schY),y=g?(h.width+o.width)/2:(h.height+o.height)/2;if(f<=y+0.2)return;let x=Math.hypot(A.center.x-m.center.x,A.center.y-m.center.y),C=Math.max(4,3*Math.max(o.width,o.height));if(x<=C)return;this.params.issues.push({lineItemType:"ResistorSeparatedFromChipPin",hostSchematicBox:h,resistorSchematicBox:o,chipSourcePortId:l.source_port_id,resistorSourcePortId:d.source_port_id,pinDistance:x,maxRecommendedPinDistance:C,message:`Place ${o.sourceComponentName||"resistor"} beside its connected pin on the ${p} side of ${h.sourceComponentName||"chip"} so the resistor-to-ground branch can be read together. Preserve pin connections, leave room for labels, and reroute affected traces; exact alignment is not required.`})}static issueToString(e){let t=[];return tn(t,"hostComponentName",e.hostSchematicBox.sourceComponentName),tn(t,"resistorName",e.resistorSchematicBox.sourceComponentName),tn(t,"pinDistance",e.pinDistance),tn(t,"maxRecommendedPinDistance",e.maxRecommendedPinDistance),tn(t,"message",e.message),`<ResistorSeparatedFromChipPin ${t.join(" ")} />`}};function Eho(e){return Boolean(e.requires_power||e.provides_power||e.requires_ground||e.provides_ground||e.requires_voltage!==void 0||e.provides_voltage!==void 0)}var S7e=class extends Zn{constructor(e){super();this.params=e;let t=new p0(e.ctx),n=new Map;for(let o of t.components.values()){let i=o.ftype==="simple_diode"||o.ftype==="simple_led";if(!i&&o.ftype!=="simple_resistor")continue;let r=o.source_component_id,s=t.placement(r),a=t.twoTerminalNets(r)?.sort(),c=t.portsByComponent.get(r);if(!s||!a||!c)continue;let l=a.map((g)=>{let _=c.find((f)=>t.connected(f.source_port_id)===g);return _&&t.port(_)}),[d,u]=l,h={diode:i,box:s};if(d&&u&&!c.some((g)=>g.do_not_connect)&&l.every((g)=>g?.schematic_sheet_id===s.schematicSheetId))h.pins=[d,u],h.axis=Mho(d,u);let A=JSON.stringify(a),m=n.get(A)??[],p=m.find((g)=>t.sameLocalScope(g[0].box,s));if(p)p.push(h);else{let g=[h];m.push(g),this.banks.push(g)}n.set(A,m)}this.solved=this.banks.length===0}params;banks=[];bankIndex=0;_step(){let e=this.banks[this.bankIndex++];if(this.solved=this.bankIndex>=this.banks.length,e.length!==2)return;let t=e.find((s)=>s.diode),n=e.find((s)=>!s.diode);if(!t?.pins||!t.axis||!n?.pins||!n.axis)return;let o=t.box,i=n.box;if(Math.abs(o.schX-i.schX)<(o.width+i.width)/2&&Math.abs(o.schY-i.schY)<(o.height+i.height)/2)return;let r;if(t.axis!==n.axis)r="different_axes";else{let s=t.axis==="horizontal"?"x":"y",a=t.pins.map((l)=>l.center[s]),c=n.pins.map((l)=>l.center[s]);if((a[1]-a[0])*(c[1]-c[0])<0)r="crossed_connections";else{if(Math.min(Math.max(...a),Math.max(...c))-Math.max(Math.min(...a),Math.min(...c))>0.01)return;r="staggered"}}this.params.issues.push({lineItemType:"ParallelDiodeResistorNotAligned",diodeSchematicBox:o,resistorSchematicBox:i,reason:r,message:`Draw ${o.sourceComponentName||"the diode"} and ${i.sourceComponentName||"the resistor"} as adjacent parallel rows or columns with their shared nets at matching ends. Preserve every pin connection and diode polarity, leave room for labels, and reroute the affected wires.`})}static issueToString(e){let t=[];return tn(t,"diodeComponentName",e.diodeSchematicBox.sourceComponentName),tn(t,"resistorComponentName",e.resistorSchematicBox.sourceComponentName),tn(t,"reason",e.reason),tn(t,"message",e.message),`<ParallelDiodeResistorNotAligned ${t.join(" ")} />`}};function Mho(e,t){let n=new Set([e.facing_direction,t.facing_direction]);if(n.has("left")&&n.has("right")&&Math.abs(e.center.y-t.center.y)<0.01&&Math.abs(e.center.x-t.center.x)>0.01)return"horizontal";if(n.has("up")&&n.has("down")&&Math.abs(e.center.x-t.center.x)<0.01&&Math.abs(e.center.y-t.center.y)>0.01)return"vertical"}var eY=(e,t)=>Math.hypot(e.x-t.x,e.y-t.y),U7=0.001,P7e=class extends Zn{index;nodes=new Map;starts=[];currentIndex=0;issues;maxSpan;maxLength;constructor({ctx:e,issues:t,maxSpan:n=8,maxLength:o=16}){super();if(this.index=new p0(e),this.issues=t,!Number.isFinite(n)||n<0||!Number.isFinite(o)||o<0)throw Error("Rail visibility thresholds must be finite and nonnegative");this.maxSpan=n,this.maxLength=o;let i=this.index,r=(l,d,u)=>{let h=JSON.stringify([u,d,Math.round(l.x/U7),Math.round(l.y/U7)]);if(!this.nodes.has(h))this.nodes.set(h,{point:l,net:d,sheet:u,links:[]});return h},s=(l,d,u)=>{let h=this.nodes.get(l),A=this.nodes.get(d),m=eY(h.point,A.point);h.links.push({to:d,length:m,...u}),A.links.push({to:l,length:m,...u})},a=new Map;for(let[l,d]of i.portsByComponent)for(let u of d){let h=i.port(u);if(!h)continue;let A=r(h.center,i.connected(u.source_port_id),h.schematic_sheet_id);if(a.set(u.source_port_id,A),d.length>2)this.starts.push({portId:u.source_port_id,componentId:l,nodeId:A})}for(let l of e.circuitJson){if(l.type!=="schematic_net_label"||!l.source_net_id||!l.anchor_position)continue;let d=i.connected(l.source_net_id);if(!i.isRail(d)||i.powerNets.has(d)&&i.groundNets.has(d))continue;let u=r(l.anchor_position,d,l.schematic_sheet_id);this.nodes.get(u).terminal=i.groundNets.has(d)?"ground":"power"}let c=[];for(let l of e.circuitJson){if(l.type!=="schematic_trace")continue;let d=Bho(l,e.circuitJson,i);if(!d)continue;for(let u of l.edges)c.push({from:r(u.from,d,l.schematic_sheet_id),to:r(u.to,d,l.schematic_sheet_id),traceId:l.schematic_trace_id})}for(let l of c){let d=this.nodes.get(l.from),u=this.nodes.get(l.to);if(eY(d.point,u.point)<U7)continue;let A=[...this.nodes].filter(([,m])=>m.net===d.net&&m.sheet===d.sheet&&who(m.point,d.point,u.point)).sort(([,m],[,p])=>eY(d.point,m.point)-eY(d.point,p.point));for(let m=1;m<A.length;m++)s(A[m-1][0],A[m][0],{traceId:l.traceId})}for(let[l,d]of i.components){if(!["simple_resistor","simple_capacitor","simple_inductor"].includes(d.ftype))continue;let u=i.portsByComponent.get(l);if(u?.length!==2||!i.twoTerminalNets(l))continue;let h=a.get(u[0].source_port_id),A=a.get(u[1].source_port_id);if(h&&A)s(h,A,{componentId:l})}this.solved=this.starts.length===0}_step(){let e=this.starts[this.currentIndex++];if(this.solved=this.currentIndex>=this.starts.length,!e)return;let t=this.index.portsByComponent.get(e.componentId)?.find((a)=>a.source_port_id===e.portId),n=t?this.index.port(t):void 0,o=n?.display_pin_label||t?.name||(n?.pin_number!==void 0?`pin${n.pin_number}`:"connected pin"),i=this.index.placement(e.componentId);if(!i)return;let r=[{id:e.nodeId,length:0,hops:0,path:[e.nodeId],links:[]}],s=new Map([[`${e.nodeId}:0`,0]]);while(r.length){r.sort((d,u)=>d.length-u.length);let a=r.shift(),c=`${a.id}:${a.hops}`;if(a.length!==s.get(c))continue;let l=this.nodes.get(a.id);if(l.terminal){let d=a.path.map((g)=>this.nodes.get(g).point),u=d.map((g)=>g.x),h=d.map((g)=>g.y),A={left:Math.min(...u),right:Math.max(...u),bottom:Math.min(...h),top:Math.max(...h)},m=Math.max(A.right-A.left,A.top-A.bottom);if(m<=this.maxSpan&&a.length<=this.maxLength)return;let p=[...new Set(a.links.flatMap((g)=>g.componentId?[g.componentId]:[]))];this.issues.push({lineItemType:"RailPathTooSpreadOut",hostSchematicBox:i,sourcePortId:e.portId,sourcePortName:o,railType:l.terminal,supportSchematicBoxes:p.flatMap((g)=>{let _=this.index.placement(g);return _?[_]:[]}),schematicTraceIds:[...new Set(a.links.flatMap((g)=>g.traceId?[g.traceId]:[]))],pathPoints:d,pathBounds:A,pathLength:a.length,pathSpan:m,maxRecommendedSpan:this.maxSpan,maxRecommendedPathLength:this.maxLength,message:`Visible path from ${i.sourceComponentName||"component"}.${o} to ${l.terminal} spans ${m.toFixed(2)} schematic units; move the connected support elements closer together near the pin and recompute their schematic traces.`});return}for(let d of l.links){if(a.path.includes(d.to))continue;if(d.componentId){let m=this.index.placement(d.componentId);if(a.hops>=3||!m||!this.index.sameLocalScope(i,m))continue}let u=a.length+d.length,h=a.hops+(d.componentId?1:0),A=`${d.to}:${h}`;if(u>=(s.get(A)??1/0))continue;s.set(A,u),r.push({id:d.to,length:u,hops:h,path:[...a.path,d.to],links:[...a.links,d]})}}}static issueToString(e){let t=[];return tn(t,"hostName",e.hostSchematicBox.sourceComponentName),tn(t,"pinName",e.sourcePortName),tn(t,"railType",e.railType),tn(t,"pathSpan",e.pathSpan),tn(t,"pathLength",e.pathLength),tn(t,"message",e.message),`<RailPathTooSpreadOut ${t.join(" ")} />`}};function Bho(e,t,n){if(e.subcircuit_connectivity_map_key)return n.connected(`connectivity:${e.subcircuit_connectivity_map_key}`);let o=t.find((r)=>r.type==="source_trace"&&r.source_trace_id===e.source_trace_id);if(o?.type!=="source_trace")return;let i=[...o.connected_source_port_ids,...o.connected_source_net_ids];return i[0]?n.connected(i[0]):void 0}function who(e,t,n){let o=n.x-t.x,i=n.y-t.y,r=eY(t,n);if(r<U7)return eY(t,e)<U7;let s=((e.x-t.x)*o+(e.y-t.y)*i)/r;return Math.abs((e.x-t.x)*i-(e.y-t.y)*o)/r<U7&&s>=-U7&&s<=r+U7}var v7e=class extends Zn{constructor(e){super();this.params=e,this.index=new p0(e.ctx);for(let t of e.ctx.circuitJson)if(t.type==="pcb_component"&&t.do_not_place)this.unpopulated.add(t.source_component_id);this.capacitorIds=[...this.index.components.values()].filter((t)=>t.ftype==="simple_capacitor").map((t)=>t.source_component_id),this.solved=this.capacitorIds.length===0}params;index;capacitorIds;unpopulated=new Set;currentIndex=0;_step(){let e=this.capacitorIds[this.currentIndex++];if(this.solved=this.currentIndex>=this.capacitorIds.length,!e||this.unpopulated.has(e))return;let t=this.index,n=t.components.get(e),o=t.placement(e),i=t.portsByComponent.get(e)??[],r=t.twoTerminalNets(e);if(n?.ftype!=="simple_capacitor"||!Number.isFinite(n.capacitance)||n.capacitance<=0||!o||!r||r.some((P)=>t.isRail(P))||i.some((P)=>P.do_not_connect||jwe(P)))return;let s=r.map((P)=>{let E=t.portsByNet.get(P)??[];if(E.length!==2)return;return E.find((B)=>B.source_component_id!==e)}),[a,c]=s;if(!a||!c||a.source_component_id!==c.source_component_id||a.do_not_connect||c.do_not_connect||jwe(a)||jwe(c))return;let l=a.source_component_id,d=t.placement(l);if(t.components.get(l)?.ftype!=="simple_chip"||this.unpopulated.has(l)||!d||!t.sameLocalScope(d,o))return;let u=[a,c],h=u.map((P)=>t.port(P)),A=i.map((P)=>t.port(P));if([...h,...A].some((P)=>!P||P.schematic_sheet_id!==d.schematicSheetId||!Number.isFinite(P.center.x)||!Number.isFinite(P.center.y))||[d,o].some((P)=>![P.schX,P.schY,P.width,P.height].every(Number.isFinite)||P.width<=0||P.height<=0))return;let m=h[0],p=h[1],g=m.facing_direction;if(!g||g!==p.facing_direction)return;let _=g==="left"||g==="right",f=g==="left"||g==="down"?-1:1,y=Math.hypot(m.center.x-p.center.x,m.center.y-p.center.y);if(y<0.01)return;let x=-f*(_?o.schX-d.schX:o.schY-d.schY),C=_?(d.width+o.width)/2:(d.height+o.height)/2;if(x<=C+0.2)return;let I=Math.max(...h.map((P,E)=>Math.hypot(P.center.x-A[E].center.x,P.center.y-A[E].center.y))),b=Math.max(4,3*Math.max(o.width,o.height),2*y);if(I<=b)return;this.params.issues.push({lineItemType:"CapacitorSeparatedFromChipPins",hostSchematicBox:d,capacitorSchematicBox:o,chipSourcePortIds:[u[0].source_port_id,u[1].source_port_id],maxPinDistance:I,maxRecommendedPinDistance:b,message:`Place ${o.sourceComponentName||"component"} beside its two connected pins on the ${g} side of ${d.sourceComponentName||"component"} so their connections can be read together. Preserve pin connections, leave room for labels, and reroute affected traces; exact alignment is not required.`})}static issueToString(e){let t=[];return tn(t,"hostComponentName",e.hostSchematicBox.sourceComponentName),tn(t,"capacitorName",e.capacitorSchematicBox.sourceComponentName),tn(t,"maxPinDistance",e.maxPinDistance),tn(t,"maxRecommendedPinDistance",e.maxRecommendedPinDistance),tn(t,"message",e.message),`<CapacitorSeparatedFromChipPins ${t.join(" ")} />`}};function jwe(e){return Boolean(e.requires_power||e.provides_power||e.requires_ground||e.provides_ground||e.requires_voltage!==void 0||e.provides_voltage!==void 0)}var E7e=class extends Zn{constructor(e){super();this.params=e,this.index=new p0(e.ctx);for(let t of e.ctx.circuitJson)if(t.type==="pcb_component"&&t.do_not_place)this.unpopulated.add(t.source_component_id);for(let t of e.ctx.circuitJson)if(t.type==="pcb_component"&&!t.do_not_place)this.unpopulated.delete(t.source_component_id);this.inductorIds=[...this.index.components.values()].filter((t)=>t.ftype==="simple_inductor"&&!this.unpopulated.has(t.source_component_id)).map((t)=>t.source_component_id),this.solved=this.inductorIds.length===0}params;index;inductorIds;unpopulated=new Set;currentIndex=0;_step(){let e=this.inductorIds[this.currentIndex++];if(this.solved=this.currentIndex>=this.inductorIds.length,!e)return;let t=this.index,n=this.localPart(e),o=t.twoTerminalNets(e);if(!n||!o||o.some((u)=>t.isRail(u)))return;let i=o.map((u)=>{let h=t.portsByNet.get(u)??[];if(h.some((y)=>y.source_component_id!==e&&!this.unpopulated.has(y.source_component_id)&&t.components.get(y.source_component_id)?.ftype==="simple_inductor"))return;let A=h.filter((y)=>{let x=t.components.get(y.source_component_id),C=t.twoTerminalNets(y.source_component_id);return x?.ftype==="simple_capacitor"&&!this.unpopulated.has(y.source_component_id)&&C?.some((I)=>I!==u&&t.groundNets.has(I))});if(A.length!==1)return;let m=A[0],p=t.components.get(m.source_component_id);if(p.ftype!=="simple_capacitor"||!Number.isFinite(p.capacitance)||p.capacitance<=0)return;let g=this.localPart(m.source_component_id);if(!g||!t.sameLocalScope(n.placement,g.placement))return;let _=t.port(m),f=t.port(n.ports.find((y)=>t.connected(y.source_port_id)===u));return{placement:g.placement,ground:t.twoTerminalNets(m.source_component_id).find((y)=>y!==u),distance:Math.hypot(_.center.x-f.center.x,_.center.y-f.center.y)}}),[r,s]=i;if(!r||!s||r.ground!==s.ground)return;let a=[n.placement,r.placement,s.placement],c=Math.max(4,...a.map((u)=>3*Math.max(u.width,u.height))),l=Math.max(r.distance,s.distance);if(l<=c)return;let d=(u)=>u.sourceComponentName||"component";this.params.issues.push({lineItemType:"PiFilterComponentsNotGrouped",inductorSchematicBox:n.placement,firstCapacitorSchematicBox:r.placement,secondCapacitorSchematicBox:s.placement,maxSignalPinDistance:l,maxRecommendedSignalPinDistance:c,message:`Group ${d(r.placement)} and ${d(s.placement)} beside the connected ends of ${d(n.placement)} so the series path and both grounded branches of the pi filter can be read together. Preserve pin connections, allow room for labels, and reroute affected traces.`})}localPart(e){let t=this.index.placement(e),n=this.index.portsByComponent.get(e);if(!t||n?.length!==2||n.some((o)=>{let i=this.index.port(o);return o.do_not_connect||!i||i.schematic_sheet_id!==t.schematicSheetId||!Number.isFinite(i.center.x)||!Number.isFinite(i.center.y)}))return;return{placement:t,ports:n}}static issueToString(e){let t=[];return tn(t,"inductorName",e.inductorSchematicBox.sourceComponentName),tn(t,"firstCapacitorName",e.firstCapacitorSchematicBox.sourceComponentName),tn(t,"secondCapacitorName",e.secondCapacitorSchematicBox.sourceComponentName),tn(t,"maxSignalPinDistance",e.maxSignalPinDistance),tn(t,"maxRecommendedSignalPinDistance",e.maxRecommendedSignalPinDistance),tn(t,"message",e.message),`<PiFilterComponentsNotGrouped ${t.join(" ")} />`}},M7e=class extends Zn{constructor(e){super();this.params=e,this.index=new p0(e.ctx),this.mosfetIds=[...this.index.components.keys()].filter((t)=>this.mosfetPorts(t)),this.solved=this.mosfetIds.length===0}params;index;mosfetIds;currentIndex=0;_step(){let e=this.mosfetIds[this.currentIndex++];if(this.solved=this.currentIndex>=this.mosfetIds.length,!e)return;let t=this.index,n=t.placement(e),o=this.mosfetPorts(e);if(!n)return;let i=t.connected(o.gate.source_port_id),r=t.connected(o.sources[0].source_port_id),s=t.connected(o.drains[0].source_port_id);if(new Set([i,r,s]).size!==3||t.isRail(i))return;if([o.gate,...o.sources,...o.drains].some((p)=>{let g=t.port(p);return!g||g.schematic_sheet_id!==n.schematicSheetId}))return;let a=(t.portsByNet.get(i)??[]).filter((p)=>p.source_component_id!==e);if(a.length!==2)return;let c=a.map((p)=>{let g=p.source_component_id,_=t.components.get(g),f=t.placement(g),y=t.twoTerminalNets(g);if(_?.ftype!=="simple_resistor"||!Number.isFinite(_.resistance)||_.resistance<=0||!f||!y||!t.sameLocalScope(n,f)||t.portsByComponent.get(g).some((x)=>{let C=t.port(x);return x.do_not_connect||!C||C.schematic_sheet_id!==n.schematicSheetId}))return;return{placement:f,otherNet:y.find((x)=>x!==i)}});if(c.some((p)=>!p))return;let l=c.filter((p)=>p.otherNet===r),d=c.filter((p)=>p.otherNet!==r);if(l.length!==1||d.length!==1)return;let u=l[0].placement,h=d[0].placement;if(d[0].otherNet===s||t.isRail(d[0].otherNet))return;let A=Math.max(6,3*Math.max(n.width,n.height)),m=Math.max(gft(n,h),gft(n,u));if(m<=A)return;this.params.issues.push({lineItemType:"MosfetGateNetworkNotGrouped",mosfetSchematicBox:n,seriesGateResistorSchematicBox:h,gateSourceResistorSchematicBox:u,maxBodyGap:m,maxRecommendedBodyGap:A,message:`Group ${h.sourceComponentName||"component"} and ${u.sourceComponentName||"component"} beside ${n.sourceComponentName||"component"}'s gate/source pins so the gate-drive branch can be read together. Preserve all pin connections, leave room for labels, and reroute affected traces.`})}mosfetPorts(e){let t=this.index.components.get(e)?.ftype;if(t!=="simple_mosfet"&&t!=="simple_chip")return;let n=this.index.portsByComponent.get(e)??[],o=n.filter((s)=>qwe(s,/^(G|GATE)$/)),i=n.filter((s)=>qwe(s,/^(S|SOURCE)[0-9]*$/)),r=n.filter((s)=>qwe(s,/^(D|DRAIN)[0-9]*$/));if(o.length!==1||!i.length||!r.length||o.length+i.length+r.length!==n.length||new Set([...o,...i,...r]).size!==n.length||n.some((s)=>s.do_not_connect))return;for(let s of[i,r])if(new Set(s.map((a)=>this.index.connected(a.source_port_id))).size!==1)return;return{gate:o[0],sources:i,drains:r}}static issueToString(e){let t=[];return tn(t,"mosfetName",e.mosfetSchematicBox.sourceComponentName),tn(t,"seriesGateResistorName",e.seriesGateResistorSchematicBox.sourceComponentName),tn(t,"gateSourceResistorName",e.gateSourceResistorSchematicBox.sourceComponentName),tn(t,"maxBodyGap",e.maxBodyGap),tn(t,"maxRecommendedBodyGap",e.maxRecommendedBodyGap),tn(t,"message",e.message),`<MosfetGateNetworkNotGrouped ${t.join(" ")} />`}};function qwe(e,t){return[e.name,...e.port_hints??[]].some((n)=>t.test(n.toUpperCase().replace(/[\s_]/g,"")))}function gft(e,t){return Math.hypot(Math.max(0,Math.abs(e.schX-t.schX)-(e.width+t.width)/2),Math.max(0,Math.abs(e.schY-t.schY)-(e.height+t.height)/2))}var B7e=class extends Zn{constructor(e){super();this.params=e,this.index=new p0(e.ctx),this.relayIds=[...this.index.components.keys()].filter((t)=>this.coilPorts(t)),this.solved=this.relayIds.length===0}params;index;relayIds;currentIndex=0;_step(){let e=this.relayIds[this.currentIndex++];if(this.solved=this.currentIndex>=this.relayIds.length,!e)return;let t=this.index,n=t.placement(e),o=this.coilPorts(e);if(!n||o.some((P)=>P.do_not_connect))return;let i=o.map((P)=>t.connected(P.source_port_id));if(i[0]===i[1])return;if(this.relayIds.some((P)=>P!==e&&this.coilPorts(P).every((E)=>i.includes(t.connected(E.source_port_id)))))return;let r=new Set((t.portsByNet.get(i[0])??[]).filter((P)=>t.components.get(P.source_component_id)?.ftype==="simple_diode").map((P)=>P.source_component_id).filter((P)=>t.twoTerminalNets(P)?.includes(i[1])));if(r.size!==1)return;let s=[...r][0],a=t.placement(s),c=this.uniquePort(s,/^(?:ANODE|A)$/),l=this.uniquePort(s,/^(?:CATHODE|K)$/);if(!a||!t.sameLocalScope(n,a)||!c||!l||c===l||c.do_not_connect||l.do_not_connect)return;let d=t.connected(c.source_port_id),u=t.connected(l.source_port_id);if(t.isRail(d)||t.groundNets.has(u)||!this.hasGroundedDriver(d,u))return;let h=o.map((P)=>t.port(P)),A=[c,l].map((P)=>t.port(P));if([...h,...A].some((P)=>!P||P.schematic_sheet_id!==n.schematicSheetId))return;let[m,p]=h,g=Math.min(m.center.x,p.center.x),_=Math.max(m.center.x,p.center.x),f=Math.min(m.center.y,p.center.y),y=Math.max(m.center.y,p.center.y),x=Math.max(g-(a.schX+a.width/2),a.schX-a.width/2-_,0),C=Math.max(f-(a.schY+a.height/2),a.schY-a.height/2-y,0),I=Math.hypot(x,C),b=Math.hypot(_-g,y-f);if(I<=Math.max(1.5,2*b)||I>Math.max(8,4*Math.max(n.width,n.height)))return;if(!this.params.ctx.circuitJson.some((P)=>P.type==="schematic_net_label"&&P.schematic_sheet_id===n.schematicSheetId&&P.anchor_position&&A.some((E)=>Math.hypot(E.center.x-P.anchor_position.x,E.center.y-P.anchor_position.y)<0.01&&!this.hasWireAtPin(E))))return;this.params.issues.push({lineItemType:"FlybackDiodeSeparatedFromRelayCoil",relaySchematicBox:n,diodeSchematicBox:a,coilSourcePortIds:[o[0].source_port_id,o[1].source_port_id],distanceFromCoilPins:I,message:`Place ${a.sourceComponentName||"component"} beside ${n.sourceComponentName||"component"}'s coil pins so the flyback protection loop can be read together. Preserve diode polarity and all pin connections; leave room for labels and reroute affected traces.`})}hasWireAtPin(e){return this.params.ctx.circuitJson.some((t)=>t.type==="schematic_trace"&&t.schematic_sheet_id===e.schematic_sheet_id&&t.edges.some(({from:n,to:o})=>{let i=o.x-n.x,r=o.y-n.y,s=i*i+r*r,a=s?Math.max(0,Math.min(1,((e.center.x-n.x)*i+(e.center.y-n.y)*r)/s)):0;return Math.hypot(e.center.x-n.x-a*i,e.center.y-n.y-a*r)<0.01}))}uniquePort(e,t){let n=this.index.portsByComponent.get(e)?.filter((o)=>M$(o,t));return n?.length===1?n[0]:void 0}coilPorts(e){if(this.index.components.get(e)?.ftype!=="simple_chip")return;let t=this.index.portsByComponent.get(e)??[];if(!this.uniquePort(e,/^(?:COM|COMMON)$/)||!t.some((o)=>M$(o,/^(?:NO|NC|NORMALLYOPEN|NORMALLYCLOSED)$/)))return;if(t.filter((o)=>M$(o,/^(?:COIL[A-B12]|A[12])$/)).length!==2)return;for(let[o,i]of[["COILA","COILB"],["COIL1","COIL2"],["A1","A2"]]){let r=this.uniquePort(e,new RegExp(`^${o}$`)),s=this.uniquePort(e,new RegExp(`^${i}$`));if(r&&s&&r!==s&&!M$(r,new RegExp(`^${i}$`))&&!M$(s,new RegExp(`^${o}$`)))return[r,s]}}hasGroundedDriver(e,t){return(this.index.portsByNet.get(e)??[]).some((n)=>{let o=n.source_component_id,i=this.index.components.get(o);if(i?.ftype!=="simple_chip"&&!(i?.ftype==="simple_transistor"&&i.transistor_type==="npn"))return!1;if(this.index.portsByComponent.get(o)?.length!==3)return!1;let r=this.uniquePort(o,/^(?:C|COLLECTOR)$/),s=this.uniquePort(o,/^(?:E|EMITTER)$/),a=this.uniquePort(o,/^(?:B|BASE)$/);if(!r||!s||!a||new Set([r,s,a]).size!==3||[r,s,a].some((d)=>d.do_not_connect)||r.source_port_id!==n.source_port_id)return!1;let c=this.index.connected(s.source_port_id),l=this.index.connected(a.source_port_id);return this.index.groundNets.has(c)&&!this.index.powerNets.has(c)&&new Set([e,t,c,l]).size===4})}static issueToString(e){let t=[];return tn(t,"relayName",e.relaySchematicBox.sourceComponentName),tn(t,"diodeName",e.diodeSchematicBox.sourceComponentName),tn(t,"distanceFromCoilPins",e.distanceFromCoilPins),tn(t,"message",e.message),`<FlybackDiodeSeparatedFromRelayCoil ${t.join(" ")} />`}};function M$(e,t){return[e.name,...e.port_hints??[]].some((n)=>t.test(n.toUpperCase().replace(/[\s_]/g,"")))}var W7=0.01,w7e=class extends Zn{constructor(e){super();this.params=e,this.index=new p0(e.ctx),this.hostIds=[...this.index.components.values()].filter((t)=>t.ftype==="simple_chip").map((t)=>t.source_component_id),this.traces=e.ctx.circuitJson.filter((t)=>t.type==="schematic_trace"),this.solved=this.hostIds.length===0}params;index;hostIds;traces;currentIndex=0;_step(){let e=this.hostIds[this.currentIndex++];if(this.solved=this.currentIndex>=this.hostIds.length,!e)return;let t=this.index,n=t.placement(e),o=t.portsByComponent.get(e)??[],i=o.filter((Q)=>Jwe(Q)==="positive"),r=o.filter((Q)=>Jwe(Q)==="negative"),s=o.filter((Q)=>R$(Q,/^(?:OUT|VOUT|OUTPUT)$/));if(!n||i.length!==1||r.length!==1||s.length!==1||!o.some((Q)=>R$(Q,/^(?:VS|VCC|VDD)$/))||!o.some((Q)=>R$(Q,/^(?:GND|GROUND|VSS)$/)))return;let a=[i[0],r[0]],c=a.map((Q)=>t.connected(Q.source_port_id));if(a.some((Q)=>Q.do_not_connect)||c[0]===c[1]||c.includes(t.connected(s[0].source_port_id)))return;let l=a.map((Q)=>t.port(Q)),[d,u]=l;if(!d||!u||!d.facing_direction||d.facing_direction!==u.facing_direction||l.some((Q)=>Q.schematic_sheet_id!==n.schematicSheetId))return;let h=new Set((t.portsByNet.get(c[0])??[]).filter((Q)=>t.components.get(Q.source_component_id)?.ftype==="simple_resistor").map((Q)=>Q.source_component_id).filter((Q)=>t.twoTerminalNets(Q)?.includes(c[1])));if(h.size!==1)return;let A=[...h][0],m=t.components.get(A);if(m?.ftype!=="simple_resistor"||!Number.isFinite(m.resistance)||m.resistance<=0||m.resistance>1)return;if(c.some((Q)=>(t.portsByNet.get(Q)??[]).some((N)=>N.source_component_id!==e&&Jwe(N)!==void 0&&t.components.get(N.source_component_id)?.ftype==="simple_chip")))return;let p=t.placement(A);if(!p||!t.sameLocalScope(n,p))return;let g=t.portsByComponent.get(A);if(g.some((Q)=>Q.do_not_connect))return;let _=c.map((Q)=>t.port(g.find((N)=>t.connected(N.source_port_id)===Q)));if(_.some((Q)=>!Q||Q.schematic_sheet_id!==n.schematicSheetId))return;let f=d.facing_direction==="left"||d.facing_direction==="right",y=(Q)=>f?Q.y:Q.x,x=y(d.center),C=y(u.center),I=Math.abs(x-C);if(I<W7)return;let b=f?p.schY:p.schX,P=(f?p.height:p.width)/2,E=Math.max(Math.min(x,C)-(b+P),b-P-Math.max(x,C));if(E<=Math.max(1.5,2*I)||Math.hypot(p.schX-n.schX,p.schY-n.schY)>Math.max(8,4*Math.max(n.width,n.height)))return;let B=l.map((Q,N)=>this.hasVisibleConnection(_[N],Q,c[N]));if(B[0]===B[1])return;let w=B[0]?1:0,T=c[w];if(!this.params.ctx.circuitJson.some((Q)=>{if(Q.type!=="schematic_net_label"||Q.schematic_sheet_id!==n.schematicSheetId)return!1;if(Q.source_net_id&&(t.connected(Q.source_net_id)===T||t.connected(`connectivity:${Q.source_net_id}`)===T))return!0;let N=_[w].center;if(Q.anchor_position&&Math.hypot(Q.anchor_position.x-N.x,Q.anchor_position.y-N.y)<W7)return!0;return Q.source_trace_id!==void 0&&this.sourceTraceTouchesNet(Q.source_trace_id,T)}))return;this.params.issues.push({lineItemType:"CurrentSenseShuntSeparatedFromInputs",amplifierSchematicBox:n,shuntSchematicBox:p,positiveInputSourcePortId:a[0].source_port_id,negativeInputSourcePortId:a[1].source_port_id,inputBandGap:E,message:`Place ${p.sourceComponentName||"component"} near ${n.sourceComponentName||"component"}.${a[0].name}/${a[1].name}, so both sense connections can be read together. Move or rotate the shunt as needed; preserve all pin connections and leave room for labels.`})}hasVisibleConnection(e,t,n){let o=this.traces.filter((s)=>{if(s.schematic_sheet_id!==e.schematic_sheet_id)return!1;if(s.subcircuit_connectivity_map_key)return this.index.connected(`connectivity:${s.subcircuit_connectivity_map_key}`)===n;if(this.sourceTraceTouchesNet(s.source_trace_id,n))return!0;let a=[s.edges[0]?.from,s.edges.at(-1)?.to],c=new Set(this.params.ctx.circuitJson.flatMap((l)=>l.type==="schematic_port"&&l.source_port_id&&l.schematic_sheet_id===s.schematic_sheet_id&&a.some((d)=>d&&Math.hypot(d.x-l.center.x,d.y-l.center.y)<W7)?[this.index.connected(l.source_port_id)]:[]));return c.size===1&&c.has(n)}).flatMap((s)=>s.edges),i=o.filter((s)=>Z0e(e.center,s.from,s.to)),r=new Set;for(let s=0;s<i.length;s++){let a=i[s];if(Z0e(t.center,a.from,a.to))return!0;for(let[c,l]of o.entries()){if(r.has(c)||![a.from,a.to].some((d)=>Z0e(d,l.from,l.to))&&![l.from,l.to].some((d)=>Z0e(d,a.from,a.to)))continue;r.add(c),i.push(l)}}return!1}sourceTraceTouchesNet(e,t){if(!e)return!1;let n=this.params.ctx.circuitJson.find((o)=>o.type==="source_trace"&&o.source_trace_id===e);return n?.type==="source_trace"&&n.connected_source_port_ids.some((o)=>this.index.connected(o)===t)}static issueToString(e){let t=[];return tn(t,"amplifierName",e.amplifierSchematicBox.sourceComponentName),tn(t,"shuntName",e.shuntSchematicBox.sourceComponentName),tn(t,"inputBandGap",e.inputBandGap),tn(t,"message",e.message),`<CurrentSenseShuntSeparatedFromInputs ${t.join(" ")} />`}};function R$(e,t){return[e.name,...e.port_hints??[]].some((n)=>t.test(n.toUpperCase().replace(/[\s_]/g,"")))}function Jwe(e){let t=R$(e,/^(?:IN\+|VIN\+|INPOS|VINPOS)$/),n=R$(e,/^(?:IN-|VIN-|INNEG|VINNEG)$/);return t===n?void 0:t?"positive":"negative"}function Z0e(e,t,n){let o=n.x-t.x,i=n.y-t.y,r=Math.hypot(o,i);if(r<W7)return Math.hypot(e.x-t.x,e.y-t.y)<W7;let s=((e.x-t.x)*o+(e.y-t.y)*i)/r;return s>=-W7&&s<=r+W7&&Math.abs((e.x-t.x)*i-(e.y-t.y)*o)/r<W7}var T7e=class extends Zn{constructor(e){super();this.params=e,this.index=new p0(e.ctx),this.resistorIds=[...this.index.components.values()].filter((t)=>t.ftype==="simple_resistor").map((t)=>t.source_component_id);for(let t of e.ctx.circuitJson)if(t.type==="source_net"&&t.is_positive_voltage_source)this.positiveNets.add(this.index.connected(t.source_net_id));this.solved=this.resistorIds.length===0}params;index;positiveNets=new Set;resistorIds;currentIndex=0;_step(){let e=this.resistorIds[this.currentIndex++];if(this.solved=this.currentIndex>=this.resistorIds.length,!e||!this.isResistor(e))return;let t=this.index,n=t.twoTerminalNets(e);if(!n)return;let o=n.filter((g)=>t.isRail(g));if(o.length!==1)return;let i=o[0];if(!this.positiveNets.has(i)||t.groundNets.has(i))return;let r=n.find((g)=>g!==i),s=t.portsByNet.get(r)??[],a=new Set(s.filter((g)=>t.components.get(g.source_component_id)?.ftype==="simple_resistor").map((g)=>g.source_component_id));if(a.size!==2)return;let c=[...a].find((g)=>g!==e);if(!this.isResistor(c))return;let l=t.twoTerminalNets(c),d=l?.find((g)=>g!==r);if(!l?.includes(r)||!d||!t.groundNets.has(d)||t.powerNets.has(d)||!s.some((g)=>!a.has(g.source_component_id)))return;let u=t.placement(e),h=t.placement(c);if(!u||!h||!t.sameLocalScope(u,h))return;let A=this.getDownwardResistorPorts(e,i,r),m=this.getDownwardResistorPorts(c,r,d);if(!A||!m)return;let p=h.schY-h.height/2-(u.schY+u.height/2);if(p<=1.5)return;this.params.issues.push({lineItemType:"VoltageDividerSupplyResistorBelowGroundResistor",supplyResistorSchematicBox:u,groundResistorSchematicBox:h,supplyTapSourcePortId:A.bottom.source_port_id,groundTapSourcePortId:m.top.source_port_id,reversedBodyGap:p,message:`Place ${u.sourceComponentName||"component"} above ${h.sourceComponentName||"component"}, close enough to read their shared divider tap. Preserve all connections and leave room for labels; exact alignment is not required.`})}isResistor(e){let t=this.index.components.get(e);return t?.ftype==="simple_resistor"&&Number.isFinite(t.resistance)&&t.resistance>0}getDownwardResistorPorts(e,t,n){let o=this.index,i=o.placement(e),r=o.portsByComponent.get(e);if(r.some((d)=>d.do_not_connect))return;let s=r.find((d)=>o.connected(d.source_port_id)===t),a=r.find((d)=>o.connected(d.source_port_id)===n);if(!s||!a)return;let c=o.port(s),l=o.port(a);if(!c||!l||c.schematic_sheet_id!==i.schematicSheetId||l.schematic_sheet_id!==i.schematicSheetId||c.facing_direction!=="up"||l.facing_direction!=="down"||c.center.y<=l.center.y)return;return{top:s,bottom:a}}static issueToString(e){let t=[];return tn(t,"supplyResistorName",e.supplyResistorSchematicBox.sourceComponentName),tn(t,"groundResistorName",e.groundResistorSchematicBox.sourceComponentName),tn(t,"reversedBodyGap",e.reversedBodyGap),tn(t,"message",e.message),`<VoltageDividerSupplyResistorBelowGroundResistor ${t.join(" ")} />`}},D7e=class extends Zn{constructor(e){super();this.params=e,this.index=new p0(e.ctx),this.hostIds=[...this.index.components.values()].filter((t)=>t.ftype==="simple_chip").map((t)=>t.source_component_id),this.solved=this.hostIds.length===0}params;index;hostIds;currentIndex=0;_step(){let e=this.hostIds[this.currentIndex++];if(this.solved=this.currentIndex>=this.hostIds.length,!e)return;let t=this.index,n=t.placement(e),o=t.portsByComponent.get(e)??[];if(!n||o.some((b)=>!eme(b)))return;let i=o.filter((b)=>eme(b)==="input"),r=o.filter((b)=>eme(b)==="output"),s=o.filter((b)=>eme(b)==="ground");if(i.length!==1||r.length!==1||!s.length)return;let a=i[0],c=r[0];if([a,c,...s].some((b)=>b.do_not_connect))return;let l=t.connected(a.source_port_id),d=t.connected(c.source_port_id),u=new Set(s.map((b)=>t.connected(b.source_port_id)));if(u.size!==1)return;let h=[...u][0];if(new Set([l,d,h]).size!==3||!(t.groundNets.has(h)||s.some((b)=>b.requires_ground||b.provides_ground))||!(t.powerNets.has(l)||a.requires_power)||!(t.powerNets.has(d)||c.provides_power))return;let A=t.port(a),m=t.port(c);if(!A||!m||A.schematic_sheet_id!==n.schematicSheetId||m.schematic_sheet_id!==n.schematicSheetId)return;let p=A.facing_direction==="left"&&m.facing_direction==="right"||A.facing_direction==="right"&&m.facing_direction==="left",g=A.facing_direction==="up"&&m.facing_direction==="down"||A.facing_direction==="down"&&m.facing_direction==="up";if(!p&&!g)return;let _=m.facing_direction==="right"||m.facing_direction==="up"?1:-1;if(_*(p?m.center.x-A.center.x:m.center.y-A.center.y)<=0.01)return;let y=this.localCapacitor(n,l,h),x=this.localCapacitor(n,d,h);if(!y||!x)return;let C=(b,P)=>{let E=P*_*(p?b.schX-n.schX:b.schY-n.schY),B=p?(n.width+b.width)/2:(n.height+b.height)/2;return E>B+0.2};if(!C(y,1)||!C(x,-1))return;let I=n.sourceComponentName||"component";this.params.issues.push({lineItemType:"RegulatorCapacitorsOnWrongSides",regulatorSchematicBox:n,inputCapacitorSchematicBox:y,outputCapacitorSchematicBox:x,inputSourcePortId:a.source_port_id,outputSourcePortId:c.source_port_id,message:`Place ${y.sourceComponentName} near ${I}.${a.name} on the ${A.facing_direction} side and ${x.sourceComponentName} near ${I}.${c.name} on the ${m.facing_direction} side. Preserve all connections and leave room for labels; exact alignment is not required.`})}localCapacitor(e,t,n){let o=this.index,i=[],r=Math.max(6,4*Math.max(e.width,e.height)),s=new Set((o.portsByNet.get(t)??[]).map((a)=>a.source_component_id));for(let a of s){if(o.components.get(a)?.ftype!=="simple_capacitor")continue;let c=o.twoTerminalNets(a),l=o.placement(a);if(!c?.includes(n)||!l||!o.sameLocalScope(e,l))continue;if(Math.hypot(l.schX-e.schX,l.schY-e.schY)>r)continue;if(o.portsByComponent.get(a).some((u)=>u.do_not_connect||!o.port(u)||o.port(u).schematic_sheet_id!==e.schematicSheetId))continue;i.push(l)}return i.length===1?i[0]:void 0}static issueToString(e){let t=[];return tn(t,"regulatorName",e.regulatorSchematicBox.sourceComponentName),tn(t,"inputCapacitorName",e.inputCapacitorSchematicBox.sourceComponentName),tn(t,"outputCapacitorName",e.outputCapacitorSchematicBox.sourceComponentName),tn(t,"message",e.message),`<RegulatorCapacitorsOnWrongSides ${t.join(" ")} />`}};function eme(e){let t=new Set;for(let n of[e.name,...e.port_hints??[]]){let o=n.toUpperCase().replace(/[ _-]/g,"");if(/^(?:VIN|IN|INPUT)$/.test(o))t.add("input");else if(/^(?:VOUT|OUT|OUTPUT)$/.test(o))t.add("output");else if(/^(?:GND\d*|VSS)$/.test(o))t.add("ground");else if(/^(?:EN|ENABLE|CE|SHDN|NC\d*|EP|PAD|ADJ|FB|BYP|BYPASS|NR|PG|PGOOD)$/.test(o))t.add("control")}return t.size===1?[...t][0]:void 0}function e6(e,t,n,o){return{left:e-n/2,right:e+n/2,top:t+o/2,bottom:t-o/2}}function ume(e,t){let n=Math.min(e.right,t.right)-Math.max(e.left,t.left),o=Math.min(e.top,t.top)-Math.max(e.bottom,t.bottom);return n>0&&o>0?{ow:n,oh:o}:null}var O$=0.01,fft={right:{x:1,y:0},left:{x:-1,y:0},up:{x:0,y:1},down:{x:0,y:-1}},Qp=(e,t)=>e.x*t.x+e.y*t.y,T$=(e,t)=>Math.abs(e.x-t.x)+Math.abs(e.y-t.y),K7=(e,t)=>T$(e,t)<=O$,qG=(e)=>Math.round(e*100)/100,N7e=class extends Zn{constructor(e){super();this.params=e}params;_step(){let{ctx:e,issues:t}=this.params,n=new p0(e);for(let i of n.portsByComponent.values())for(let r of i){let s=n.connected(r.source_port_id);if(r.requires_ground||r.provides_ground)n.groundNets.add(s);if(r.requires_power||r.provides_power)n.powerNets.add(s)}let o=e.circuitJson.filter((i)=>i.type==="schematic_trace");for(let[i,r]of n.components){if(r.ftype!=="simple_pin_header"&&r.ftype!=="simple_connector")continue;let s=n.placement(i),a=n.portsByComponent.get(i)??[];if(!s||a.length<2)continue;let c=a.map((z)=>n.port(z)),l=c[0]?.facing_direction;if(!l||c.some((z)=>!z||z.facing_direction!==l))continue;let d=fft[l],u={x:-d.y,y:d.x},h=o.filter((z)=>z.schematic_sheet_id===s.schematicSheetId),A=e.circuitJson.filter((z)=>z.type==="schematic_net_label"&&z.schematic_sheet_id===s.schematicSheetId),m=[],p=!1;for(let z of a){let Y=n.port(z),U=n.connected(z.source_port_id),X=(n.portsByNet.get(U)??[]).filter((q)=>q.source_port_id!==z.source_port_id),V=h.filter((q)=>q.edges.some((ne)=>K7(ne.from,Y.center)||K7(ne.to,Y.center)));if(n.isRail(U)){if(V.some((q)=>!A.some((ne)=>ne.anchor_position&&yft(q,Y.center,ne.anchor_position))))p=!0;continue}if(X.length===0){if(V.length>0)p=!0;continue}let W=X.length===1?n.port(X[0]):void 0,j=X.length===1?n.placement(X[0].source_component_id):void 0;if(!W?.facing_direction||!j||!n.sameLocalScope(s,j)||Qp(fft[W.facing_direction],d)!==-1){p=!0;break}m.push({pin:Y,peer:W,component:j})}if(p||m.length<2)continue;if(m.some((z)=>Qp(z.peer.center,d)>=Qp(z.pin.center,d)-2))continue;let g=m.map((z)=>h.filter((Y)=>yft(Y,z.pin.center,z.peer.center)&&Tho(Y)>=3)).filter((z)=>z.length>0);if(g.length<2)continue;let _=g.flat(),f=[...m].sort((z,Y)=>Qp(z.pin.center,u)-Qp(Y.pin.center,u));if(f.some((z,Y)=>Y>0&&Qp(z.peer.center,u)<=Qp(f[Y-1].peer.center,u)+O$))continue;let y={x:s.schX,y:s.schY},x=Math.max(...m.map((z)=>Qp(z.pin.center,d)-Qp(y,d))),C=Math.min(...m.map((z)=>Qp(z.peer.center,d)))-2-x,I=m.map((z)=>Qp(z.peer.center,u)-Qp(z.pin.center,u)+Qp(y,u)).sort((z,Y)=>z-Y),b=I[Math.floor(I.length/2)],P={x:qG(d.x*C+u.x*b),y:qG(d.y*C+u.y*b)},E={x:P.x-y.x,y:P.y-y.y},B=(z)=>({x:z.center.x+E.x,y:z.center.y+E.y});if(m.some((z)=>T$(B(z.pin),z.peer.center)>T$(z.pin.center,z.peer.center)+O$))continue;let w=m.reduce((z,Y)=>z+T$(Y.pin.center,Y.peer.center),0),T=m.reduce((z,Y)=>z+T$(B(Y.pin),Y.peer.center),0);if(w-T<4||T>w*0.75)continue;let Q=e.componentPlacements.filter((z)=>z.schematicSheetId===s.schematicSheetId&&z.schematicComponentId!==s.schematicComponentId),N=e6(P.x,P.y,s.width+0.4,s.height+0.4);if(Q.some((z)=>ume(N,e6(z.schX,z.schY,z.width,z.height))))continue;if(m.some((z)=>{let Y=B(z.pin),U=z.peer.center,X=(Qp(Y,d)+Qp(U,d))/2,V=[Y,{x:d.x*X+u.x*Qp(Y,u),y:d.y*X+u.y*Qp(Y,u)},{x:d.x*X+u.x*Qp(U,u),y:d.y*X+u.y*Qp(U,u)},U];return Q.some((W)=>W.schematicComponentId!==z.component.schematicComponentId&&V.slice(1).some((j,q)=>Dho(V[q],j,W)))}))continue;let F=[...new Map(m.map((z)=>[z.component.schematicComponentId,z.component])).values()],H=s.sourceComponentName||"component";t.push({lineItemType:"ConnectorPositionCausesTraceDetours",connectorSchematicBox:s,connectedComponents:F,schematicTraceIds:[...new Set(_.map((z)=>z.schematic_trace_id))],evaluatedSignalCount:m.length,newSchX:P.x,newSchY:P.y,deltaSchX:qG(E.x),deltaSchY:qG(E.y),currentTotalSignalDistance:qG(w),suggestedTotalSignalDistance:qG(T),message:`Move ${H} to schX=${P.x}, schY=${P.y} so its signal pins face ${F.map((z)=>z.sourceComponentName||"component").join(", ")}. Preserve rotation and pin assignments; reroute the connections and attached rail labels.`})}this.solved=!0}static issueToString(e){let t=[];tn(t,"connectorComponentName",e.connectorSchematicBox.sourceComponentName),tn(t,"connectedComponents",e.connectedComponents.map((n)=>n.sourceComponentName||"component").join(","));for(let n of["evaluatedSignalCount","newSchX","newSchY","deltaSchX","deltaSchY","currentTotalSignalDistance","suggestedTotalSignalDistance"])tn(t,n,e[n]);return tn(t,"message",e.message),`<ConnectorPositionCausesTraceDetours ${t.join(" ")} />`}};function yft(e,t,n){let o=e.edges[0]?.from,i=e.edges.at(-1)?.to;return!!o&&!!i&&(K7(o,t)&&K7(i,n)||K7(o,n)&&K7(i,t))}function Tho(e){let t,n=0;for(let o=0;o<e.edges.length;o++){let i=e.edges[o];if(o>0&&!K7(e.edges[o-1].to,i.from))return 0;if(K7(i.from,i.to))continue;let r=Math.abs(i.from.y-i.to.y)<O$?"x":Math.abs(i.from.x-i.to.x)<O$?"y":void 0;if(!r)return 0;if(t&&t!==r)n++;t=r}return n}function Dho(e,t,n){let o=e6(n.schX,n.schY,n.width+0.2,n.height+0.2);return Math.max(e.x,t.x)>o.left&&Math.min(e.x,t.x)<o.right&&Math.max(e.y,t.y)>o.bottom&&Math.min(e.y,t.y)<o.top}var R7e=class extends Zn{index;positiveNets=new Set;transistorIds;issues;currentIndex=0;constructor({ctx:e,issues:t}){super();this.issues=t,this.index=new p0(e);for(let n of e.circuitJson)if(n.type==="source_net"&&n.is_positive_voltage_source)this.positiveNets.add(this.index.connected(n.source_net_id));this.transistorIds=[...this.index.components.values()].filter((n)=>n.ftype==="simple_transistor"&&n.transistor_type==="npn").map((n)=>n.source_component_id),this.solved=this.transistorIds.length===0}_step(){let e=this.transistorIds[this.currentIndex++];if(this.solved=this.currentIndex>=this.transistorIds.length,!e)return;let t=this.index,n=t.placement(e);if(!n||t.portsByComponent.get(e)?.length!==3)return;let o=t.namedPort(e,"base"),i=t.namedPort(e,"collector"),r=t.namedPort(e,"emitter");if(!o||!i||!r)return;let s=t.connected(o.source_port_id),a=t.connected(i.source_port_id),c=t.connected(r.source_port_id);if(new Set([s,a,c]).size!==3||!t.groundNets.has(c)||t.powerNets.has(c)||t.isRail(s)||t.isRail(a))return;let l=(t.portsByNet.get(s)??[]).filter((Y)=>Y.source_component_id!==e);if(l.length!==1)return;let d=l[0].source_component_id,u=t.components.get(d),h=t.placement(d),m=t.twoTerminalNets(d)?.find((Y)=>Y!==s);if(u?.ftype!=="simple_resistor"||u.resistance<=0||!h||!t.sameLocalScope(n,h)||!m||t.isRail(m)||m===a)return;let p=(t.portsByNet.get(a)??[]).filter((Y)=>Y.source_component_id!==e),g=p.filter((Y)=>t.components.get(Y.source_component_id)?.ftype==="simple_chip");if(g.length!==1)return;let _=g[0].source_component_id,f=t.placement(_),x=t.twoTerminalNets(_)?.find((Y)=>Y!==a);if(!f||!t.sameLocalScope(n,f)||!x||!this.positiveNets.has(x)||t.groundNets.has(x))return;let C=p.filter((Y)=>Y.source_component_id!==_);if(C.length!==1)return;let I=C[0].source_component_id,b=t.placement(I),P=t.namedPort(I,"anode"),E=t.namedPort(I,"cathode");if(t.components.get(I)?.ftype!=="simple_diode"||!t.twoTerminalNets(I)||!P||!E||t.connected(P.source_port_id)!==a||t.connected(E.source_port_id)!==x||!b||!t.sameLocalScope(n,b))return;let B=t.port(i),w=t.port(r),T=t.port(o);if(!B||!w||!T)return;let Q=B.facing_direction,N=w.facing_direction;if(!Q||!N)return;let F=[];if(n.schY>=f.schY)F.push("transistor_not_below_load");if(Q!=="up")F.push("collector_not_up");if(N!=="down")F.push("emitter_not_down");if(F.length===0)return;let H=n.sourceComponentName||"component",z=f.sourceComponentName||"component";this.issues.push({lineItemType:"LowSideTransistorNotAlignedWithLoad",transistorSchematicBox:n,loadSchematicBox:f,baseResistorSchematicBox:h,clampDiodeSchematicBox:b,collectorSourcePortId:i.source_port_id,emitterSourcePortId:r.source_port_id,collectorFacingDirection:Q,emitterFacingDirection:N,placementProblems:F,message:`Arrange ${H} below ${z}, with its collector facing up toward the load and emitter facing down toward ground; place ${h.sourceComponentName||"component"} beside the base. Preserve all pin connections and reroute affected traces.`})}static issueToString(e){let t=[];return tn(t,"transistorName",e.transistorSchematicBox.sourceComponentName),tn(t,"loadName",e.loadSchematicBox.sourceComponentName),tn(t,"baseResistorName",e.baseResistorSchematicBox.sourceComponentName),tn(t,"clampDiodeName",e.clampDiodeSchematicBox.sourceComponentName),tn(t,"placementProblems",e.placementProblems.join(",")),tn(t,"collectorFacingDirection",e.collectorFacingDirection),tn(t,"emitterFacingDirection",e.emitterFacingDirection),tn(t,"message",e.message),`<LowSideTransistorNotAlignedWithLoad ${t.join(" ")} />`}},Q7e=class extends Zn{constructor(e){super();this.params=e,this.index=new p0(e.ctx),this.hostIds=[...this.index.components.values()].filter((t)=>t.ftype==="simple_chip").map((t)=>t.source_component_id),this.solved=this.hostIds.length===0}params;index;hostIds;reportedPairs=new Set;currentIndex=0;_step(){let e=this.hostIds[this.currentIndex++];if(this.solved=this.currentIndex>=this.hostIds.length,!e)return;let t=this.index.portsByComponent.get(e)??[],n=t.filter((C)=>xft(C)==="positive"),o=t.filter((C)=>xft(C)==="negative");if(n.length!==1||o.length!==1)return;let i=n[0],r=o[0],s=this.seriesResistor(i),a=this.seriesResistor(r);if(!s||!a||s.axis!==a.axis||!this.index.sameLocalScope(s.placement,a.placement)||new Set([s.hostNet,a.hostNet,s.interfaceNet,a.interfaceNet]).size!==4||!this.shareInterface(s,a,e))return;let c=[s.id,a.id].sort().join("\x00");if(this.reportedPairs.has(c))return;let l=s.placement,d=a.placement,u=s.axis==="horizontal",h=Math.abs(u?l.schX-d.schX:l.schY-d.schY),A=Math.abs(u?l.schY-d.schY:l.schX-d.schX),m=u?l.width:l.height,p=u?d.width:d.height,g=u?l.height:l.width,_=u?d.height:d.width;if(h-(m+p)/2<Math.max(m,p)||A>=(g+_)/2-0.01)return;this.reportedPairs.add(c);let y=l.sourceComponentName||"component",x=d.sourceComponentName||"component";this.params.issues.push({lineItemType:"UsbSeriesResistorsNotAligned",positiveResistorSchematicBox:l,negativeResistorSchematicBox:d,hostSourceComponentId:e,positiveSourcePortId:i.source_port_id,negativeSourcePortId:r.source_port_id,signalAxis:s.axis,message:`Place ${y} (D+) and ${x} (D−) near each other and draw clear traces to their corresponding USB ports. Exact alignment is not required; preserve pin assignments and leave space for labels.`})}seriesResistor(e){let t=this.index,n=t.connected(e.source_port_id);if(t.isRail(n))return;let o=new Set((t.portsByNet.get(n)??[]).filter((A)=>t.components.get(A.source_component_id)?.ftype==="simple_resistor").map((A)=>A.source_component_id));if(o.size!==1)return;let i=[...o][0],s=t.twoTerminalNets(i)?.find((A)=>A!==n),a=t.placement(i);if(!s||t.isRail(s)||!a)return;if((t.portsByNet.get(s)??[]).some((A)=>A.source_component_id!==i&&t.components.get(A.source_component_id)?.ftype==="simple_resistor"))return;let c=t.portsByComponent.get(i).map((A)=>t.port(A)),[l,d]=c;if(!l||!d)return;let u=new Set([l.facing_direction,d.facing_direction]),h;if(u.has("left")&&u.has("right")&&Math.abs(l.center.y-d.center.y)<0.01)h="horizontal";else if(u.has("up")&&u.has("down")&&Math.abs(l.center.x-d.center.x)<0.01)h="vertical";else return;return{id:i,placement:a,hostNet:n,interfaceNet:s,axis:h}}shareInterface(e,t,n){let o=(r)=>new Set((this.index.portsByNet.get(r)??[]).map((s)=>s.source_component_id).filter((s)=>s!==n&&s!==e.id&&s!==t.id&&(this.index.portsByComponent.get(s)?.length??0)>2)),i=o(e.interfaceNet);return[...o(t.interfaceNet)].some((r)=>i.has(r))}static issueToString(e){let t=[];return tn(t,"positiveResistorName",e.positiveResistorSchematicBox.sourceComponentName),tn(t,"negativeResistorName",e.negativeResistorSchematicBox.sourceComponentName),tn(t,"signalAxis",e.signalAxis),tn(t,"message",e.message),`<UsbSeriesResistorsNotAligned ${t.join(" ")} />`}};function xft(e){let t=new Set;for(let n of[e.name,...e.port_hints??[]]){let o=n.toUpperCase();if(/^(?:USB_?)?D(?:P|\+|_POS)$/.test(o))t.add("positive");if(/^(?:USB_?)?D(?:M|N|-|_NEG)$/.test(o))t.add("negative")}return t.size===1?[...t][0]:void 0}function Nho(e){return e.filter((t)=>t!==void 0).reduce((t,n)=>pI(t,n),{})}function Rho(e,t,n){return{rects:[{center:{x:e.schX,y:e.schY},width:e.width,height:e.height,stroke:t,fill:t.replace("0.95","0.15"),label:n}]}}function Qho(e){return{rects:e.filter((n)=>n.type==="schematic_box").map((n)=>{let o=n;return{center:{x:o.x,y:o.y},width:o.width,height:o.height,stroke:"hsl(0,0%,60%)"}})}}var k7e=class e extends Zn{static EPSILON=0.01;static ORIENTATION_MESSAGE='Use schOrientation="vertical" on this capacitor to fix the symbol orientation';ctx;out;schematicComponentById;sourceComponentById;capacitorPlacements;feedbackCapacitorIds;currentPlacementIndex=0;horizontalSymbolNames=new Set(["capacitor_left","capacitor_right"]);constructor({ctx:t,issues:n}){super();this.ctx=t,this.out=n,this.schematicComponentById=this.buildSchematicComponentById(t.circuitJson),this.sourceComponentById=this.buildSourceComponentById(t.circuitJson),this.capacitorPlacements=this.getCapacitorPlacements();let o=new p0(t);this.feedbackCapacitorIds=new Set(this.capacitorPlacements.flatMap((i)=>i.sourceComponentId&&o.isDirectOpAmpFeedback(i.sourceComponentId)?[i.sourceComponentId]:[])),this.solved=this.capacitorPlacements.length===0}getCapacitorPlacements(){return this.ctx.componentPlacements.filter((t)=>t.sourceComponentId!==void 0&&this.sourceComponentById.get(t.sourceComponentId)?.ftype==="simple_capacitor").map((t)=>({schX:t.schX,schY:t.schY,width:t.width,height:t.height,sourceComponentId:t.sourceComponentId,sourceComponentName:t.sourceComponentName,schematicComponentId:t.schematicComponentId,schematicSheetId:t.schematicSheetId,schematicSheetName:t.schematicSheetName}))}_step(){let t=this.capacitorPlacements[this.currentPlacementIndex];if(!t){this.solved=!0;return}this.currentPlacementIndex+=1,this.solved=this.currentPlacementIndex>=this.capacitorPlacements.length;let n=this.getIssueForPlacement(t);if(n)this.out.push(n)}visualize(){let t=this.getFocusedPlacement();return Nho([Qho(this.ctx.circuitJson),t?Rho(t,"hsl(210, 100%, 50%, 0.95)","capacitorOrientation"):void 0])}getFocusedPlacement(){if(this.capacitorPlacements.length===0)return;let t=this.iterations===0?this.currentPlacementIndex:Math.max(0,this.currentPlacementIndex-1);return this.capacitorPlacements[t]}buildSchematicComponentById(t){return new Map(t.filter((n)=>n.type==="schematic_component").map((n)=>[n.schematic_component_id,n]))}buildSourceComponentById(t){return new Map(t.flatMap((n)=>{if(n.type!=="source_component"||!("source_component_id"in n)||typeof n.source_component_id!=="string")return[];return[{type:"source_component",source_component_id:n.source_component_id,ftype:"ftype"in n&&typeof n.ftype==="string"?n.ftype:void 0}]}).map((n)=>[n.source_component_id,n]))}createIssuePlacement(t){return{positionAnchor:"center",schX:t.schX,schY:t.schY,width:t.width,height:t.height,sourceComponentId:t.sourceComponentId,sourceComponentName:t.sourceComponentName,schematicComponentId:t.schematicComponentId,schematicSheetId:t.schematicSheetId,schematicSheetName:t.schematicSheetName}}getIssueForPlacement(t){if(!t.schematicComponentId||!t.sourceComponentId)return;let n=this.schematicComponentById.get(t.schematicComponentId);if(!n)return;if(!this.horizontalSymbolNames.has(n.symbol_name??""))return;if(this.feedbackCapacitorIds.has(t.sourceComponentId))return;if(this.isInlineWithHorizontalTraces(t.schematicComponentId))return;return{lineItemType:"CapacitorSymbolHorizontal",schematicBox:this.createIssuePlacement(t),message:e.ORIENTATION_MESSAGE}}isInlineWithHorizontalTraces(t){let n=this.ctx.circuitJson.filter((i)=>i.type==="schematic_port"&&i.schematic_component_id===t);if(n.length!==2)return!1;let o=n.map((i)=>this.getOutwardHorizontalTrace(i));return o.every((i)=>i!==void 0)&&o.some((i)=>i!==void 0&&i.edges.every((r)=>Math.abs(r.from.y-r.to.y)<=e.EPSILON))}getOutwardHorizontalTrace(t){if(t.facing_direction!=="left"&&t.facing_direction!=="right")return;return this.ctx.circuitJson.find((n)=>n.type==="schematic_trace"&&n.schematic_sheet_id===t.schematic_sheet_id&&n.edges.some((o)=>{let i=this.pointsEqual(o.from,t.center)?o.to:this.pointsEqual(o.to,t.center)?o.from:void 0;return i!==void 0&&Math.abs(i.y-t.center.y)<=e.EPSILON&&(t.facing_direction==="left"?i.x<t.center.x-e.EPSILON:i.x>t.center.x+e.EPSILON)}))}pointsEqual(t,n){return Math.abs(t.x-n.x)<=e.EPSILON&&Math.abs(t.y-n.y)<=e.EPSILON}static issueToString(t){let n=[];return tn(n,"componentName",t.schematicBox.sourceComponentName),tn(n,"schX",t.schematicBox.schX),tn(n,"schY",t.schematicBox.schY),tn(n,"width",t.schematicBox.width),tn(n,"height",t.schematicBox.height),tn(n,"message",t.message),`<CapacitorSymbolHorizontal ${n.join(" ")} />`}},L7e=class e extends Zn{constructor(t){super();this.params=t;let n=new p0(t.ctx),o=new Set(n.powerNets),i=new Set(n.groundNets);for(let r of t.ctx.circuitJson)if(r.type==="source_net"){let s=n.connected(r.source_net_id);if(!this.netNames.has(s))this.netNames.set(s,r.name)}for(let r of n.portsByComponent.values())for(let s of r){if(s.do_not_connect)continue;let a=n.connected(s.source_port_id);if(s.provides_power||s.requires_power)o.add(a);if(s.provides_ground||s.requires_ground)i.add(a);if((o.has(a)||i.has(a))&&!this.netNames.has(a))this.netNames.set(a,s.name)}for(let r of n.components.values()){if(r.ftype!=="simple_capacitor")continue;let s=r.source_component_id,a=n.placement(s),c=n.twoTerminalNets(s),l=n.portsByComponent.get(s);if(!a||!c||!l||l.some((A)=>{let m=n.port(A);return A.do_not_connect||!m||m.schematic_sheet_id!==a.schematicSheetId}))continue;let d=c.find((A)=>o.has(A)&&!i.has(A)),u=c.find((A)=>i.has(A)&&!o.has(A));if(!d||!u)continue;let h=this.banks.find((A)=>A.power===d&&A.ground===u&&n.sameLocalScope(A.capacitors[0],a));if(h)h.capacitors.push(a);else this.banks.push({power:d,ground:u,capacitors:[a]})}this.solved=this.banks.length===0}params;static MIN_BODY_GAP=1;banks=[];netNames=new Map;bankIndex=0;_step(){let t=this.banks[this.bankIndex++];if(this.solved=this.bankIndex>=this.banks.length,t.capacitors.length<2)return;let n=Math.max(e.MIN_BODY_GAP,...t.capacitors.map((a)=>Math.max(a.width,a.height))),o=0,i=t.capacitors.slice(1).map((a)=>({box:a,gap:e.bodyGap(t.capacitors[0],a)}));while(i.length>0){let a=0;for(let l=1;l<i.length;l++)if(i[l].gap<i[a].gap)a=l;let c=i.splice(a,1)[0];o=Math.max(o,c.gap);for(let l of i)l.gap=Math.min(l.gap,e.bodyGap(c.box,l.box))}if(o<=n+0.000001)return;let r=this.netNames.get(t.power)??"power",s=this.netNames.get(t.ground)??"ground";this.params.issues.push({lineItemType:"DecouplingCapacitorsNotCloseTogether",railName:r,groundName:s,capacitorSchematicBoxes:t.capacitors,maxBodyGap:o,maxRecommendedBodyGap:n,message:`Group the decoupling capacitors between ${r} and ${s} closer together in this schematic block. Preserve their net connections.`})}static bodyGap(t,n){return Math.hypot(Math.max(0,Math.abs(t.schX-n.schX)-(t.width+n.width)/2),Math.max(0,Math.abs(t.schY-n.schY)-(t.height+n.height)/2))}static issueToString(t){let n=[];return tn(n,"rail",t.railName),tn(n,"ground",t.groundName),tn(n,"capacitorNames",t.capacitorSchematicBoxes.map((o)=>o.sourceComponentName||"component").join(", ")),tn(n,"maxBodyGap",t.maxBodyGap),tn(n,"maxRecommendedBodyGap",t.maxRecommendedBodyGap),tn(n,"message",t.message),`<DecouplingCapacitorsNotCloseTogether ${n.join(" ")} />`}};function rme(e){let t=e.anchor_side;if(t==="top"||t==="bottom"){let c=e.anchor_position?.y??e.center.y,l=(e.text?.length??8)*0.13/2+0.1,d=e.center.x-0.1,u=e.center.x+0.1;if(t==="top")return{left:d,right:u,top:c,bottom:c-l*2};return{left:d,right:u,top:c+l*2,bottom:c}}let o=e.anchor_position?.x??e.center.x,r=Math.abs(e.center.x-o)+0.1,s=e.center.y+0.1,a=e.center.y-0.1;if(e.center.x>=o)return{left:o,right:e.center.x+r,top:s,bottom:a};return{left:e.center.x-r,right:o,top:s,bottom:a}}var Q$=class extends Zn{constructor(e){super();this.params=e,this.placements=e.ctx.componentPlacements,this.netLabelsByComponentId=this.buildNetLabelsByComponentId(e.ctx.circuitJson),this.solved=this.placements.length<2}params;placements;netLabelsByComponentId;rawCollisions=[];firstIndex=0;secondIndex=1;_step(){if(this.firstIndex>=this.placements.length-1){this.buildAndPushIssues(),this.solved=!0;return}let e=this.placements[this.firstIndex],t=this.placements[this.secondIndex];if(this.detectPair(e,t),this.secondIndex++,this.secondIndex>=this.placements.length)this.firstIndex++,this.secondIndex=this.firstIndex+1}detectPair(e,t){if(e.schematicSheetId!==t.schematicSheetId)return;this.rawCollisions.push(...this.detectLabelLabel(e,t)),this.rawCollisions.push(...this.detectBoxLabel(e,t)),this.rawCollisions.push(...this.detectBoxLabel(t,e))}detectLabelLabel(e,t){let n=e,o=t;if(e.schX>t.schX)n=t,o=e;let i=n.schematicComponentId,r=o.schematicComponentId;if(!i||!r)return[];let s=this.netLabelsByComponentId.get(i)??[],a=this.netLabelsByComponentId.get(r)??[];if(s.length===0||a.length===0)return[];let c=[];for(let l of s)for(let d of a){let u=rme(l),h=rme(d);if(ume(u,h))c.push({type:"label-label",bounds:{left:Math.max(u.left,h.left),right:Math.min(u.right,h.right),top:Math.min(u.top,h.top),bottom:Math.max(u.bottom,h.bottom)},leftComp:n,rightComp:o,leftId:i,rightId:r,xSeparation:u.right-h.left+0.1})}return c}detectBoxLabel(e,t){let n=e.schematicComponentId,o=t.schematicComponentId;if(!n||!o)return[];let i=this.netLabelsByComponentId.get(o)??[];if(i.length===0)return[];let r=e6(e.schX,e.schY,e.width,e.height),s=e.schX<=t.schX,a=[];for(let c of i){let l=rme(c);if(!ume(r,l))continue;let d;if(s)d=r.right-l.left+0.1;else d=l.right-r.left+0.1;a.push({type:"box-label",bounds:{left:Math.max(r.left,l.left),right:Math.min(r.right,l.right),top:Math.min(r.top,l.top),bottom:Math.max(r.bottom,l.bottom)},boxComp:e,labelComp:t,boxId:n,labelId:o,xSeparation:d})}return a}buildAndPushIssues(){if(this.rawCollisions.length===0)return;let e=new Map;for(let t of this.rawCollisions){let o=(t.type==="label-label"?t.leftComp:t.boxComp).schematicSheetId??"",i=e.get(o);if(i)i.push(t);else e.set(o,[t])}for(let t of e.values())this.buildAndPushIssueForSheet(t)}buildAndPushIssueForSheet(e){let t=this.computeGlobalFixes(e);if(t.size===0)return;let n=new Set,o=[];for(let s of e){let a,c;if(s.type==="label-label")a=s.leftComp.sourceComponentName??"",c=s.rightComp.sourceComponentName??"";else a=s.boxComp.sourceComponentName??"",c=s.labelComp.sourceComponentName??"";let l=`${a}/${c}`;if(!n.has(l))n.add(l),o.push({comp1Name:a,comp2Name:c})}let i=e[0],r=i.type==="label-label"?i.leftComp:i.boxComp;this.params.issues.push({lineItemType:"NetLabelCollision",schematicSheetId:r.schematicSheetId,schematicSheetName:r.schematicSheetName,pairs:o,collisionBounds:e.map((s)=>s.bounds),moves:Array.from(t.values())})}computeGlobalFixes(e){let t=new Map;for(let l of this.placements)if(l.schematicComponentId)t.set(l.schematicComponentId,l);let n=new Map,o=(l,d,u)=>{let h=t.get(l),A=t.get(d);if(!h||!A)return;let m=A.schX-h.schX+u,p=`${l}|${d}`;n.set(p,Math.max(n.get(p)??0,m))};for(let l of e)if(l.type==="label-label")o(l.leftId,l.rightId,l.xSeparation);else if(l.boxComp.schX<=l.labelComp.schX)o(l.boxId,l.labelId,l.xSeparation);else o(l.labelId,l.boxId,l.xSeparation);let i=[...n.entries()].map(([l,d])=>{let u=l.indexOf("|");return{leftId:l.slice(0,u),rightId:l.slice(u+1),minSep:d}}),r=new Set,s=new Map;for(let{leftId:l,rightId:d}of i){if(r.add(l),r.add(d),!s.has(l))s.set(l,new Set);if(!s.has(d))s.set(d,new Set);s.get(l).add(d),s.get(d).add(l)}let a=new Set,c=new Map;for(let l of r){if(a.has(l))continue;let d=[],u=[l];a.add(l);while(u.length){let g=u.shift();d.push(g);for(let _ of s.get(g)??[])if(!a.has(_))a.add(_),u.push(_)}d.sort((g,_)=>(t.get(g)?.schX??0)-(t.get(_)?.schX??0));let h=new Set(d),A=i.filter((g)=>h.has(g.leftId)&&h.has(g.rightId)),m=new Map;for(let g of d){let _=t.get(g)?.schX??0;for(let{leftId:f,rightId:y,minSep:x}of A)if(y===g&&m.has(f))_=Math.max(_,m.get(f)+x);m.set(g,_)}let p=[...m.entries()].reduce((g,[_,f])=>g+(f-(t.get(_)?.schX??0)),0);if(p>0.000000001){let g=p/d.length,_=new Map;for(let y of d){let x=(t.get(y)?.schX??0)-g;for(let{leftId:C,rightId:I,minSep:b}of A)if(I===y&&_.has(C))x=Math.max(x,_.get(C)+b);_.set(y,x)}let f=(y)=>[...y.entries()].reduce((x,[C,I])=>Math.max(x,Math.abs(I-(t.get(C)?.schX??0))),0);if(f(_)<f(m))for(let[y,x]of _)m.set(y,x)}for(let[g,_]of m){let f=t.get(g);if(!f||Math.abs(_-f.schX)<0.000000001)continue;c.set(g,{componentName:f.sourceComponentName||"component",newSchX:Math.round(_*100)/100,newSchY:Math.round(f.schY*100)/100})}}return c}buildNetLabelsByComponentId(e){let n=[];for(let i of e){if(i.type!=="schematic_port")continue;let r=i;if(!r.schematic_component_id)continue;n.push({componentId:r.schematic_component_id,cx:r.center.x,cy:r.center.y,schematicSheetId:r.schematic_sheet_id})}let o=new Map;for(let i of e){if(i.type!=="schematic_net_label")continue;let r=i;if(!r.anchor_position)continue;let{x:s,y:a}=r.anchor_position,c=n.filter((h)=>h.schematicSheetId===r.schematic_sheet_id&&Math.hypot(h.cx-s,h.cy-a)<0.0001);if(c.length===0)continue;if(new Set(c.map((h)=>h.componentId)).size!==1)continue;let d=c[0].componentId,u=o.get(d)??[];u.push(r),o.set(d,u)}return o}static netLabelCollisionToString(e){let t=e.pairs.map((o,i)=>`pair${i+1}="${o.comp1Name}/${o.comp2Name}"`).join(" "),n=e.moves.map((o)=>` <Move componentName="${o.componentName}" newSchX="${o.newSchX}" newSchY="${o.newSchY}" />`);return[`<ComponentNetLabelCollision ${t}>`,' <SuggestedFix note="Apply all moves simultaneously. Set schAutoLayoutEnabled on your circuit.">',...n," </SuggestedFix>","</ComponentNetLabelCollision>"].join(`
`)}};var F7e=class e extends Zn{static ALIGNMENT_EPSILON=0.01;ctx;out;constructor({ctx:t,issues:n}){super();this.ctx=t,this.out=n}_step(){let t=new Map(this.ctx.circuitJson.filter((i)=>i.type==="schematic_port").map((i)=>[i.schematic_port_id,i])),n=new Map(this.ctx.componentPlacements.flatMap((i)=>i.schematicComponentId?[[i.schematicComponentId,i]]:[])),o=new Map;for(let i of this.ctx.circuitJson.filter((r)=>r.type==="schematic_trace")){let r=this.getTracePinPair(i,t);if(!r)continue;let s=r.firstPort.schematic_component_id,a=r.secondPort.schematic_component_id;if(!s||!a||s===a)continue;let c=s<a?r:{firstPort:r.secondPort,secondPort:r.firstPort},l=[s,a].sort().join("\x00"),d=o.get(l)??[];if(!d.some((h)=>h.firstPort.schematic_port_id===c.firstPort.schematic_port_id&&h.secondPort.schematic_port_id===c.secondPort.schematic_port_id))d.push(c);o.set(l,d)}for(let i of o.values()){let r=this.findVerticalShiftIssue(i,n);if(r)this.out.push(r)}this.solved=!0}getTracePinPair(t,n){let o=t.edges?.[0],i=t.edges?.at(-1);if(!o||!i)return;let r=o.from_schematic_port_id??o.to_schematic_port_id,s=i.to_schematic_port_id??i.from_schematic_port_id,a=[...n.values()],c=r?n.get(r):this.findPortAtPoint(a,o.from,t.schematic_sheet_id),l=s?n.get(s):this.findPortAtPoint(a,i.to,t.schematic_sheet_id);if(!c||!l)return;if(c.schematic_port_id===l.schematic_port_id)return;if(c.schematic_sheet_id!==l.schematic_sheet_id)return;return{firstPort:c,secondPort:l}}findPortAtPoint(t,n,o){let{ALIGNMENT_EPSILON:i}=e;return t.find((r)=>r.schematic_sheet_id===o&&Math.abs(r.center.x-n.x)<=i&&Math.abs(r.center.y-n.y)<=i)}findVerticalShiftIssue(t,n){let o=t[0];if(!o)return;let i=n.get(o.firstPort.schematic_component_id),r=n.get(o.secondPort.schematic_component_id);if(!i||!r)return;let[s,a]=i.schX<=r.schX?[i,r]:[r,i],c=t.flatMap((g)=>{let[_,f]=g.firstPort.center.x<=g.secondPort.center.x?[g.firstPort,g.secondPort]:[g.secondPort,g.firstPort];return _.facing_direction==="right"&&f.facing_direction==="left"?[{leftPort:_,rightPort:f}]:[]});if(c.length<2)return;let{ALIGNMENT_EPSILON:l}=e,d=c.filter(({leftPort:g,rightPort:_})=>Math.abs(g.center.y-_.center.y)<=l).length,u=[];for(let g of c){let _=g.leftPort.center.y-g.rightPort.center.y;if(Math.abs(_)<=l)continue;let f=u.find((y)=>Math.abs(y.deltaSchY-_)<=l);if(f)f.pairs.push(g);else u.push({deltaSchY:_,pairs:[g]})}let h=u.sort((g,_)=>_.pairs.length-g.pairs.length||Math.abs(g.deltaSchY)-Math.abs(_.deltaSchY))[0];if(!h||h.pairs.length<2||h.pairs.length<=d)return;let A=a.sourceComponentName||"component",m=h.deltaSchY,p=a.schY+m;return{lineItemType:"ComponentPinsWouldAlignWithVerticalShift",firstComponent:s,secondComponent:a,targetComponent:a,deltaSchY:m,newSchY:p,currentlyAlignedPinCount:d,alignedPinCount:h.pairs.length,alignedPinPairs:h.pairs.map(({leftPort:g,rightPort:_})=>({firstPin:this.getPinLabel(g),secondPin:this.getPinLabel(_)})),message:`shift ${A} vertically by ${c1t(m)} to align ${h.pairs.length} connected pin pairs`}}getPinLabel(t){return t.display_pin_label??t.pin_number?.toString()}static issueToString(t){let n=[];return tn(n,"firstComponentName",t.firstComponent.sourceComponentName),tn(n,"secondComponentName",t.secondComponent.sourceComponentName),tn(n,"targetComponentName",t.targetComponent.sourceComponentName),tn(n,"deltaSchY",t.deltaSchY),tn(n,"newSchY",t.newSchY),tn(n,"currentlyAlignedPinCount",t.currentlyAlignedPinCount),tn(n,"alignedPinCount",t.alignedPinCount),tn(n,"message",t.message),`<ComponentPinsWouldAlignWithVerticalShift ${n.join(" ")} />`}},H7e=class e extends Zn{static ALIGNMENT_TOLERANCE=0.1;issues;networks;currentNetworkIndex=0;constructor({ctx:t,issues:n}){super();this.issues=n,this.networks=this.findCrystalLoadNetworks(t),this.solved=this.networks.length===0}_step(){let t=this.networks[this.currentNetworkIndex];if(!t){this.solved=!0;return}this.currentNetworkIndex+=1,this.solved=this.currentNetworkIndex>=this.networks.length;let n=tme(t.newSchX-t.crystal.schX),o=tme(t.newSchY-t.crystal.schY);if(Math.abs(n)<=e.ALIGNMENT_TOLERANCE&&Math.abs(o)<=e.ALIGNMENT_TOLERANCE)return;let i=t.crystal.sourceComponentName??"the crystal",r=t.firstLoadCapacitor.sourceComponentName??"the first load capacitor",s=t.secondLoadCapacitor.sourceComponentName??"the second load capacitor";this.issues.push({lineItemType:"CrystalNotCenteredOverLoadCapacitors",crystalSchematicBox:t.crystal,firstLoadCapacitorSchematicBox:t.firstLoadCapacitor,secondLoadCapacitorSchematicBox:t.secondLoadCapacitor,deltaSchX:n,deltaSchY:o,newSchX:t.newSchX,newSchY:t.newSchY,message:`move ${i} to schX=${t.newSchX}, schY=${t.newSchY} so it is centered between ${r} and ${s} and aligned with their load-side pins`})}findCrystalLoadNetworks(t){let n=new Map,o=new Map,i=new Map,r=new Map(t.componentPlacements.flatMap((c)=>c.sourceComponentId?[[c.sourceComponentId,c]]:[]));for(let c of t.circuitJson){if(c.type==="source_component")n.set(c.source_component_id,{sourceComponentId:c.source_component_id,ftype:"ftype"in c&&typeof c.ftype==="string"?c.ftype:void 0});if(c.type==="source_port"&&typeof c.source_component_id==="string"&&typeof c.subcircuit_connectivity_map_key==="string"){let l={sourcePortId:c.source_port_id,sourceComponentId:c.source_component_id,connectivityKey:c.subcircuit_connectivity_map_key},d=o.get(c.source_component_id)??[];d.push(l),o.set(c.source_component_id,d)}if(c.type==="schematic_port"&&c.source_port_id)i.set(c.source_port_id,c)}let s=new Map;for(let c of n.values()){if(c.ftype!=="simple_capacitor")continue;let l=o.get(c.sourceComponentId)??[];if(l.length!==2)continue;let d=l[0],u=l[1],h=r.get(c.sourceComponentId);if(!h)continue;for(let[A,m]of[[d,u],[u,d]]){let p=i.get(A.sourcePortId);if(!p)continue;let g=s.get(A.connectivityKey)??[];g.push({capacitor:h,loadPort:p,returnConnectivityKey:m.connectivityKey}),s.set(A.connectivityKey,g)}}let a=[];for(let c of n.values()){if(c.ftype!=="simple_crystal"&&c.ftype!=="simple_chip")continue;let l=o.get(c.sourceComponentId)??[];if(l.length!==2||l[0].connectivityKey===l[1].connectivityKey)continue;let d=l[0].connectivityKey,u=l[1].connectivityKey;if(![...o.entries()].some(([x,C])=>x!==c.sourceComponentId&&C.length>2&&C.some((I)=>I.connectivityKey===d)&&C.some((I)=>I.connectivityKey===u)))continue;let A=r.get(c.sourceComponentId);if(!A)continue;let m=s.get(l[0].connectivityKey)??[],p=s.get(l[1].connectivityKey)??[],g=m.flatMap((x)=>p.flatMap((C)=>{if(x.capacitor.sourceComponentId===C.capacitor.sourceComponentId||x.returnConnectivityKey!==C.returnConnectivityKey||x.returnConnectivityKey===d||x.returnConnectivityKey===u||x.capacitor.schematicSheetId!==A.schematicSheetId||C.capacitor.schematicSheetId!==A.schematicSheetId)return[];return[{firstConnection:x,secondConnection:C}]}));if(g.length===0)continue;let _=g.toSorted((x,C)=>Cft(x,A)-Cft(C,A))[0],f=[_.firstConnection.loadPort,_.secondConnection.loadPort],y=[_.firstConnection.capacitor,_.secondConnection.capacitor].toSorted((x,C)=>x.schX-C.schX);a.push({crystal:A,firstLoadCapacitor:y[0],secondLoadCapacitor:y[1],newSchX:tme((f[0].center.x+f[1].center.x)/2),newSchY:tme((f[0].center.y+f[1].center.y)/2)})}return a}static issueToString(t){let n=[];return tn(n,"crystalName",t.crystalSchematicBox.sourceComponentName),tn(n,"firstLoadCapacitorName",t.firstLoadCapacitorSchematicBox.sourceComponentName),tn(n,"secondLoadCapacitorName",t.secondLoadCapacitorSchematicBox.sourceComponentName),tn(n,"newSchX",t.newSchX),tn(n,"newSchY",t.newSchY),tn(n,"deltaSchX",t.deltaSchX,{formatDelta:!0}),tn(n,"deltaSchY",t.deltaSchY,{formatDelta:!0}),tn(n,"message",t.message),`<CrystalNotCenteredOverLoadCapacitors ${n.join(" ")} />`}},Cft=(e,t)=>Ift(e.firstConnection.capacitor,t)+Ift(e.secondConnection.capacitor,t),Ift=(e,t)=>Math.hypot(e.schX-t.schX,e.schY-t.schY),tme=(e)=>Math.round(e*100)/100,O7e=class e extends Zn{static DIODE_FTYPES=new Set(["simple_led","simple_diode"]);ctx;out;schematicTraces;currentIndex=0;sourceConnectivity;sourceComponentFtypeById;sourceComponentIdBySourcePortId;schematicPorts;schematicBoxBySourceComponentId;constructor({ctx:t,issues:n}){super();this.ctx=t,this.out=n;let{circuitJson:o}=t;this.sourceConnectivity=Nv(o),this.sourceComponentFtypeById=this.buildSourceComponentFtypeById(o),this.sourceComponentIdBySourcePortId=this.buildSourceComponentIdBySourcePortId(o),this.schematicPorts=o.filter((i)=>i.type==="schematic_port"),this.schematicBoxBySourceComponentId=this.buildSchematicBoxBySourceComponentId(),this.schematicTraces=o.filter((i)=>i.type==="schematic_trace"),this.solved=this.schematicTraces.length===0}_step(){let t=this.schematicTraces[this.currentIndex];if(!t){this.solved=!0;return}if(this.currentIndex++,this.solved=this.currentIndex>=this.schematicTraces.length,!t.edges||t.edges.length===0)return;let n=t.edges[0],o=t.edges[t.edges.length-1];if(!n||!o)return;let i=n.from,r=o.to,s=t.schematic_sheet_id,a=this.findSourceComponentIdNearPoint(i,s),c=this.findSourceComponentIdNearPoint(r,s);if(!a||!c)return;let l=this.sourceComponentFtypeById.get(a),d=this.sourceComponentFtypeById.get(c),{DIODE_FTYPES:u}=e;if(!(u.has(l)&&d==="simple_resistor"||l==="simple_resistor"&&u.has(d)))return;let A=u.has(l)?a:c,m=l==="simple_resistor"?a:c,p=this.schematicBoxBySourceComponentId.get(A),g=this.schematicBoxBySourceComponentId.get(m);if(!p||!g)return;let _=this.findNearestPort(u.has(l)?i:r,s),f=this.findNearestPort(l==="simple_resistor"?i:r,s);if(!_?.center||!f?.center)return;if(!this.sourceConnectivity.areIdsConnected(_.source_port_id,f.source_port_id))return;let y=p.sourceComponentName||"component",x=g.sourceComponentName||"component",C=_?.display_pin_label??_?.pin_number?.toString(),I=f?.display_pin_label??f?.pin_number?.toString(),b=_?.facing_direction,P=f?.facing_direction,E=C?`${y}.${C}`:y,B=I?`${x}.${I}`:x,w=(T)=>({lineItemType:"DiodeResistorNotAligned",diodeSchematicBox:p,resistorSchematicBox:g,diodePin:C,resistorPin:I,diodePinFacingDirection:b,resistorPinFacingDirection:P,message:T});if(!e.isCoLinear(_.center,f.center)){this.out.push(w(`trace has corners — align ${y} and ${x} on same axis and rotate so ${E} faces ${B}`));return}if(b&&P&&!e.pinsFacingEachOther(_.center,b,f.center,P))this.out.push(w(`${E} and ${B} face away from each other — rotate ${y} so ${E} faces ${B}`))}static isCoLinear(t,n,o=0.01){return Math.abs(t.x-n.x)<o||Math.abs(t.y-n.y)<o}static pinsFacingEachOther(t,n,o,i){let r=o.x-t.x,s=o.y-t.y,a=n==="right"&&r>0||n==="left"&&r<0||n==="up"&&s>0||n==="down"&&s<0,c=i==="right"&&r<0||i==="left"&&r>0||i==="up"&&s<0||i==="down"&&s>0;return a&&c}static dist(t,n){return Math.sqrt((t.x-n.x)**2+(t.y-n.y)**2)}findNearestPort(t,n){let o,i=1/0;for(let r of this.schematicPorts){if(r.schematic_sheet_id!==n)continue;if(!r.center)continue;let s=e.dist(t,r.center);if(s<i)i=s,o=r}return o}findSourceComponentIdNearPoint(t,n){let o=this.findNearestPort(t,n);if(!o||!o.source_port_id)return;return this.sourceComponentIdBySourcePortId.get(o.source_port_id)}buildSourceComponentFtypeById(t){let n=new Map;for(let o of t)if(o.type==="source_component"&&"source_component_id"in o&&"ftype"in o&&typeof o.ftype==="string")n.set(o.source_component_id,o.ftype);return n}buildSourceComponentIdBySourcePortId(t){let n=new Map;for(let o of t)if(o.type==="source_port"&&"source_port_id"in o&&"source_component_id"in o&&typeof o.source_port_id==="string"&&typeof o.source_component_id==="string")n.set(o.source_port_id,o.source_component_id);return n}buildSchematicBoxBySourceComponentId(){let t=new Map;for(let n of this.ctx.componentPlacements)if(n.sourceComponentId)t.set(n.sourceComponentId,n);return t}static issueToString(t){let n=[];return tn(n,"diodeComponentName",t.diodeSchematicBox.sourceComponentName),tn(n,"diodePin",t.diodePin),tn(n,"resistorComponentName",t.resistorSchematicBox.sourceComponentName),tn(n,"resistorPin",t.resistorPin),tn(n,"message",t.message),`<DiodeResistorNotAligned ${n.join(" ")} />`}},z7e=class e extends Zn{static MIN_BODY_GAP=4;index;amplifierIds;issues;currentIndex=0;constructor({ctx:t,issues:n}){super();this.issues=n,this.index=new p0(t),this.amplifierIds=[...this.index.components.values()].filter((o)=>o.ftype==="simple_op_amp").map((o)=>o.source_component_id),this.solved=this.amplifierIds.length===0}_step(){let t=this.amplifierIds[this.currentIndex++];if(this.solved=this.currentIndex>=this.amplifierIds.length,!t)return;let n=this.index,o=n.placement(t),i=n.namedPort(t,"output"),r=n.namedPort(t,"inverting_input");if(!o||!i||!r||!n.port(i)||!n.port(r))return;let s=n.connected(i.source_port_id),a=n.connected(r.source_port_id);if(s===a||n.isRail(s)||n.isRail(a))return;if((n.portsByNet.get(a)??[]).some((h)=>h.source_component_id!==t&&n.components.get(h.source_component_id)?.ftype==="simple_op_amp"))return;let c=[],l=new Set;for(let h of n.portsByNet.get(s)??[]){let A=h.source_component_id;if(l.has(A))continue;l.add(A);let m=n.components.get(A);if(m?.ftype!=="simple_resistor"&&m?.ftype!=="simple_capacitor")continue;if(m.ftype==="simple_resistor"&&!(m.resistance>0))continue;let p=n.twoTerminalNets(A);if(!p?.includes(a)||!p.includes(s))continue;let g=n.placement(A);if(!g||!n.sameLocalScope(o,g))return;c.push(g)}let d=c.flatMap((h)=>{let A=kho(o,h),m=Math.max(e.MIN_BODY_GAP,3*Math.max(h.width,h.height));return A>m?[{schematicBox:h,bodyGap:A,maxRecommendedBodyGap:m}]:[]});if(d.length===0)return;let u=d.map(({schematicBox:h})=>h.sourceComponentName||"component").join(", ");this.issues.push({lineItemType:"FeedbackNetworkNotCompact",amplifierSchematicBox:o,feedbackComponents:c,distantComponents:d,outputSourcePortId:i.source_port_id,invertingInputSourcePortId:r.source_port_id,message:`consider grouping ${u} closer to ${o.sourceComponentName||"component"}, with a compact feedback return path above or below the amplifier`})}static issueToString(t){let n=[];return tn(n,"amplifierName",t.amplifierSchematicBox.sourceComponentName),tn(n,"feedbackComponentNames",t.feedbackComponents.map((o)=>o.sourceComponentName||"component").join(", ")),tn(n,"distantComponentNames",t.distantComponents.map(({schematicBox:o})=>o.sourceComponentName||"component").join(", ")),tn(n,"message",t.message),`<FeedbackNetworkNotCompact ${n.join(" ")} />`}};function kho(e,t){return Math.hypot(Math.max(0,Math.abs(e.schX-t.schX)-(e.width+t.width)/2),Math.max(0,Math.abs(e.schY-t.schY)-(e.height+t.height)/2))}function d1t(e){let t=[],n=(o)=>{let i=e.portsByComponent.get(o);if(i?.length!==2)return!1;let r=e.port(i[0]),s=e.port(i[1]);return!!r&&!!s&&Math.abs(r.center.y-s.center.y)<0.01&&Math.abs(r.center.x-s.center.x)>0.01};for(let o of e.components.values()){if(o.ftype!=="simple_resistor"||o.resistance<=0)continue;let i=o.source_component_id,r=e.twoTerminalNets(i);if(!r||r.filter((y)=>e.isRail(y)).length!==1)continue;let s=r.find((y)=>e.isRail(y));if(e.powerNets.has(s)&&e.groundNets.has(s))continue;let a=r.find((y)=>y!==s),c=e.portsByNet.get(a)??[],l=c.filter((y)=>{let x=e.components.get(y.source_component_id)?.ftype;return x==="simple_switch"||x==="simple_push_button"});if(l.length!==1||c.filter((y)=>e.components.get(y.source_component_id)?.ftype==="simple_resistor").length!==1)continue;let d=l[0],u=d.source_component_id,h=e.components.get(u)?.ftype,m=e.twoTerminalNets(u)?.find((y)=>y!==a);if(!m)continue;let p=e.powerNets.has(s)?"up":"down";if(p==="up"?!e.groundNets.has(m)||e.powerNets.has(m):!e.powerNets.has(m)||e.groundNets.has(m))continue;if([i,u].some((y)=>e.portsByComponent.get(y)?.some((x)=>x.do_not_connect)))continue;let g=e.placement(i),_=e.placement(u),f=e.port(d);if(!g||!_||!f||!e.sameLocalScope(g,_))continue;t.push({resistor:g,switchBox:_,signalPort:d,signalSchY:f.center.y,pullDirection:p,horizontalPushbutton:h==="simple_push_button"&&n(i)&&n(u)})}return t}function u1t(e){return new Set(d1t(e).flatMap((t)=>t.horizontalPushbutton?[t.resistor.sourceComponentId,t.switchBox.sourceComponentId]:[]))}var G7e=class e extends Zn{static MIN_WRONG_SIDE_GAP=1.5;index;resistorIds;horizontalPushbuttonComponentIds;issues;currentIndex=0;constructor({ctx:t,issues:n}){super();this.issues=n,this.index=new p0(t),this.horizontalPushbuttonComponentIds=u1t(this.index),this.resistorIds=[...this.index.components.values()].filter((o)=>o.ftype==="simple_resistor"&&o.resistance>0).map((o)=>o.source_component_id),this.solved=this.resistorIds.length===0}_step(){let t=this.resistorIds[this.currentIndex++];if(this.solved=this.currentIndex>=this.resistorIds.length,!t)return;if(this.horizontalPushbuttonComponentIds.has(t))return;let n=this.index,o=n.placement(t),i=n.twoTerminalNets(t);if(!o||!i)return;let r=i.filter((_)=>n.isRail(_));if(r.length!==1)return;let s=r[0];if(n.powerNets.has(s)&&n.groundNets.has(s))return;let a=n.groundNets.has(s)?"down":"up",c=i.find((_)=>_!==s),l=n.portsByNet.get(c)??[],d=l.filter((_)=>_.needs_external_pullup||_.needs_external_pulldown);if(d.length!==1)return;let u=d[0];if(u.needs_external_pullup&&u.needs_external_pulldown)return;if(a==="up"?!u.needs_external_pullup:!u.needs_external_pulldown)return;let h=n.placement(u.source_component_id),A=n.port(u);if(!h||!A||!n.sameLocalScope(h,o))return;if(l.some((_)=>{let f=_.source_component_id;if(f===t||f===u.source_component_id)return!1;if(n.components.get(f)?.ftype!=="simple_capacitor")return!0;let C=n.twoTerminalNets(f)?.find((b)=>b!==c);if(!C||!n.groundNets.has(C)||n.powerNets.has(C))return!0;let I=n.placement(f);return!I||!n.sameLocalScope(h,I)}))return;let m=A.center.y,p=a==="up"?m-(o.schY+o.height/2):o.schY-o.height/2-m;if(p<=e.MIN_WRONG_SIDE_GAP)return;let g=a==="up"?"above":"below";this.issues.push({lineItemType:"PullResistorOnWrongSide",resistorSchematicBox:o,hostSchematicBox:h,signalSourcePortId:u.source_port_id,signalPinName:u.name,signalSchY:m,pullDirection:a,preferredSide:g,wrongSideGap:p,maxRecommendedWrongSideGap:e.MIN_WRONG_SIDE_GAP,message:`consider placing ${o.sourceComponentName||"component"} ${g} ${h.sourceComponentName||"component"}.${u.name} so the pull-${a} branch reads toward ${a==="up"?"power":"ground"}`})}static issueToString(t){let n=[];return tn(n,"resistorName",t.resistorSchematicBox.sourceComponentName),tn(n,"hostName",t.hostSchematicBox.sourceComponentName),tn(n,"signalPin",t.signalPinName),tn(n,"pullDirection",t.pullDirection),tn(n,"preferredSide",t.preferredSide),tn(n,"signalSchY",t.signalSchY),tn(n,"wrongSideGap",t.wrongSideGap),tn(n,"message",t.message),`<PullResistorOnWrongSide ${n.join(" ")} />`}},k$=class e extends Zn{static EPSILON=0.01;index;powerNets;groundNets;positiveVoltageNets=new Set;componentIds;horizontalPushbuttonComponentIds;issues;currentIndex=0;constructor({ctx:t,issues:n}){super();this.issues=n,this.index=new p0(t),this.horizontalPushbuttonComponentIds=u1t(this.index),this.powerNets=new Set(this.index.powerNets),this.groundNets=new Set(this.index.groundNets);for(let o of t.circuitJson){if(o.type==="source_net"&&o.is_positive_voltage_source)this.positiveVoltageNets.add(this.index.connected(o.source_net_id));if(o.type!=="source_port")continue;let i=this.index.connected(o.source_port_id);if(o.provides_power||o.requires_power)this.powerNets.add(i);if(o.provides_ground||o.requires_ground)this.groundNets.add(i)}this.componentIds=[...this.index.components.keys()].filter((o)=>this.index.portsByComponent.get(o)?.length===2),this.solved=this.componentIds.length===0}_step(){let t=this.componentIds[this.currentIndex++];if(this.solved=this.currentIndex>=this.componentIds.length,!t)return;let n=this.index,o=n.placement(t),i=n.components.get(t),r=n.twoTerminalNets(t);if(!o||!r)return;if(i?.ftype==="simple_inductor"&&!r.some((b)=>this.groundNets.has(b)))return;if(i?.ftype==="simple_diode"&&r.every((b)=>this.powerNets.has(b)))return;if(r.some((b)=>this.powerNets.has(b)&&this.groundNets.has(b)))return;let s=r.map((b)=>this.powerNets.has(b)?"power":this.groundNets.has(b)?"ground":void 0);if(s.every((b)=>b===void 0))return;let a=s.includes("power")?"power":"ground",c=r.flatMap((b,P)=>s[P]===a?[{net:b,index:P}]:[]),l=(c.find(({net:b})=>n.portsByNet.get(b)?.some((P)=>a==="power"?P.provides_power:P.provides_ground))??c.find(({net:b})=>(a==="power"?n.powerNets:n.groundNets).has(b))??c[0]).index,d=r[l],u=n.portsByComponent.get(t),h=u.find((b)=>n.connected(b.source_port_id)===d),A=u.find((b)=>b!==h),m=n.port(h),p=n.port(A);if(!m||!p)return;let g=n.connected(A.source_port_id),_=this.groundNets.has(g),f=i?.ftype==="simple_resistor"&&!this.powerNets.has(g)&&!_;if(this.positiveVoltageNets.has(d)&&(_||f)&&Math.abs(m.center.x-p.center.x)<=e.EPSILON&&m.center.y<p.center.y-e.EPSILON&&m.facing_direction==="down"&&p.facing_direction==="up"){this.issues.push({lineItemType:"TwoPinComponentHasInvertedRails",schematicBox:o,railSourcePortId:h.source_port_id,railPinName:h.name,railType:"power",deltaSchRotation:180,suggestedRailFacingDirection:"up",message:`rotate ${o.sourceComponentName||"component"} by 180° so its positive-supply pin faces up and its ${_?"ground":"signal"} pin faces down; preserve pin connections and reroute attached traces`});return}if(!(Math.abs(m.center.y-p.center.y)<=e.EPSILON&&Math.abs(m.center.x-p.center.x)>e.EPSILON&&(m.facing_direction==="left"&&p.facing_direction==="right"||m.facing_direction==="right"&&p.facing_direction==="left")))return;if(this.horizontalPushbuttonComponentIds.has(t))return;let C=a==="power"?"up":"down",I=m.facing_direction==="left"===(a==="power")?-90:90;this.issues.push({lineItemType:"TwoPinComponentShouldBeVertical",schematicBox:o,railSourcePortId:h.source_port_id,railPinName:h.name,railType:a,deltaSchRotation:I,suggestedRailFacingDirection:C,message:`rotate ${o.sourceComponentName||"component"} by ${I}° so its ${a}-connected pin faces ${C} and the component is vertical`})}static issueToString(t){let n=[];return tn(n,"componentName",t.schematicBox.sourceComponentName),tn(n,"railPin",t.railPinName),tn(n,"railType",t.railType),tn(n,"deltaSchRotation",t.deltaSchRotation),tn(n,"suggestedRailFacingDirection",t.suggestedRailFacingDirection),tn(n,"message",t.message),`<${t.lineItemType} ${n.join(" ")} />`}},nme=0.1,Lho=0.15,rY=0.02,Fho=0.000000001;function Y7e(e,t,n){let o={left:e.schX-e.width/2,right:e.schX+e.width/2,top:e.schY+e.height/2,bottom:e.schY-e.height/2},i=[];for(let r of t){if(!r.side_of_component)continue;if(!r.display_pin_label)continue;let s=n(r),a=Lho/2;switch(r.side_of_component){case"left":{let c=o.left+nme;i.push({side:r.side_of_component,xMin:c,xMax:c+s,yMin:r.center.y-a,yMax:r.center.y+a});break}case"right":{let c=o.right-nme;i.push({side:r.side_of_component,xMin:c-s,xMax:c,yMin:r.center.y-a,yMax:r.center.y+a});break}case"top":{let c=o.top-nme;i.push({side:r.side_of_component,xMin:r.center.x-a,xMax:r.center.x+a,yMin:c-s,yMax:c});break}case"bottom":{let c=o.bottom+nme;i.push({side:r.side_of_component,xMin:r.center.x-a,xMax:r.center.x+a,yMin:c,yMax:c+s});break}}}return i}function h1t(e,t,n=rY){return u7e(e.xMin,e.xMax,t.xMin,t.xMax,n)&&u7e(e.yMin,e.yMax,t.yMin,t.yMax,n)}function u7e(e,t,n,o,i=rY){return Math.min(t,o)-Math.max(e,n)+i>Fho}function V7e(e){return new Set(e.flatMap((t)=>t.type==="schematic_component"&&t.is_box_with_pins!==!1&&!t.symbol_name&&!t.schematic_symbol_id?[t.schematic_component_id]:[]))}var tY=(e)=>[{x:e.left,y:e.bottom},{x:e.right,y:e.bottom},{x:e.right,y:e.top},{x:e.left,y:e.top}],Hho=(e)=>{if(/\s/.test(e))return 0.28;if(/[ilI.,:;!'|]/.test(e))return 0.25;if(/[MW@%]/.test(e))return 0.9;if(/[mw]/.test(e))return 0.8;if(/[A-Z]/.test(e))return 0.67;return 0.56},sme=(e)=>Array.from(e).reduce((t,n)=>t+Hho(n),0),Oho=(e,t)=>sme(e)*t;function h7e(e){let t=e.font_size;if(!Number.isFinite(t)||t<=0||!Number.isFinite(e.rotation)||!Number.isFinite(e.position.x)||!Number.isFinite(e.position.y))return[];let n=e.anchor,o=n.includes("left")?0:n.includes("right")?1:0.5,i=n.includes("top")?0:n.includes("bottom")?t:t/2,r=-e.rotation*Math.PI/180,s=Math.cos(r),a=Math.sin(r);return e.text.split(`
`).flatMap((c,l)=>{let d=c.trim();if(!d)return[];let u=c.length-c.trimStart().length,h=(sme(c.slice(0,u))-sme(c)*o)*t;return[tY({left:h,right:h+sme(d)*t,top:i-l*t-t*0.05,bottom:i-(l+1)*t+t*0.05}).map(({x:m,y:p})=>({x:e.position.x+m*s-p*a,y:e.position.y+m*a+p*s}))]})}function m7e(e,t){for(let n of[e,t])for(let o=0;o<n.length;o++){let i=n[o],r=n[(o+1)%n.length],s=Math.hypot(r.x-i.x,r.y-i.y);if(s<0.000000001)continue;let a=-(r.y-i.y)/s,c=(r.x-i.x)/s,l=(h)=>h.map(({x:A,y:m})=>A*a+m*c),d=l(e),u=l(t);if(Math.min(Math.max(...d),Math.max(...u))-Math.max(Math.min(...d),Math.min(...u))<=0.000001)return!1}return!0}function p7e(e,t){let n=Math.hypot(t.x-e.x,t.y-e.y);if(n<0.000000001)return;let o=-(t.y-e.y)/n*0.01,i=(t.x-e.x)/n*0.01;return[{x:e.x+o,y:e.y+i},{x:t.x+o,y:t.y+i},{x:t.x-o,y:t.y-i},{x:e.x-o,y:e.y-i}]}function ame(e,t,n){if(Math.hypot(t.x-e.x,t.y-e.y)<0.000000001)return!1;let o=0,i=1;for(let r=0;r<n.length;r++){let s=n[r],a=n[(r+1)%n.length],c=Math.hypot(a.x-s.x,a.y-s.y);if(c<0.000000001)continue;let l=-(a.y-s.y)/c,d=(a.x-s.x)/c,u=(e.x-s.x)*l+(e.y-s.y)*d-0.000001,h=(t.x-s.x)*l+(t.y-s.y)*d-0.000001;if(u<=0&&h<=0)return!1;if(u<=0)o=Math.max(o,-u/(h-u));if(h<=0)i=Math.min(i,-u/(h-u));if(i<=o)return!1}return i>o}var bft=(e)=>{let t=e.flat();return{left:Math.min(...t.map((n)=>n.x)),right:Math.max(...t.map((n)=>n.x)),top:Math.max(...t.map((n)=>n.y)),bottom:Math.min(...t.map((n)=>n.y))}},U7e=class extends Zn{constructor(e){super();this.params=e;let{circuitJson:t,componentPlacements:n}=e.ctx;this.placementById=this.getPlacementBySchematicComponentId(n);let o=V7e(t);this.entries=Array.from(this.getPortsBySchematicComponentId(t)).filter(([i])=>o.has(i)),this.solved=this.entries.length===0}params;entries;placementById;currentIndex=0;_step(){let e=this.entries[this.currentIndex++];if(!e){this.solved=!0;return}this.solved=this.currentIndex>=this.entries.length;let[t,n]=e,o=this.placementById.get(t);if(!o)return;let i=Y7e(o,n,(s)=>Oho(s.display_pin_label,0.15));if(i.length===0)return;let r=this.getCollisionSummary(i);if(r.overlappingSides.length===0)return;this.params.issues.push({lineItemType:"SchematicBoxInnerLabelCollision",schematicBox:o,overlappingSides:r.overlappingSides,message:this.getMessage(r.overlappingSides)})}static issueToString(e){let t=[];return tn(t,"message",e.message),tn(t,"componentName",e.schematicBox.sourceComponentName),tn(t,"currentSchWidth",e.schematicBox.width),tn(t,"currentSchHeight",e.schematicBox.height),tn(t,"overlappingSides",e.overlappingSides.join(",")),`<SchematicBoxInnerLabelCollision ${t.join(" ")} />`}getMessage(e){return`Inner labels are colliding. Increase the ${e.every((n)=>n==="left"||n==="right")?"schWidth":e.every((n)=>n==="top"||n==="bottom")?"schHeight":"schWidth or schHeight"}.`}isSchematicPort(e){return e.type==="schematic_port"}isSchematicSide(e){return e==="left"||e==="right"||e==="top"||e==="bottom"}getPlacementBySchematicComponentId(e){return new Map(e.filter((t)=>t.schematicComponentId).map((t)=>[t.schematicComponentId,t]))}getPortsBySchematicComponentId(e){let t=new Map;for(let n of e.filter((o)=>this.isSchematicPort(o))){if(!n.schematic_component_id)continue;if(!this.isSchematicSide(n.side_of_component))continue;let o=t.get(n.schematic_component_id);if(o)o.push(n);else t.set(n.schematic_component_id,[n])}return t}getCollisionSummary(e){let t=new Set;for(let n=0;n<e.length;n++)for(let o=n+1;o<e.length;o++){let i=e[n],r=e[o];if(i.side===r.side)continue;if(!h1t(i,r))continue;t.add(i.side),t.add(r.side)}return{overlappingSides:this.sortSides(Array.from(t))}}sortSides(e){let t={left:0,right:1,top:2,bottom:3};return e.sort((n,o)=>t[n]-t[o])}},W7e=class e extends Zn{constructor(t){super();this.params=t,this.placements=t.ctx.componentPlacements,this.solved=this.placements.length<2}params;placements;firstIndex=0;secondIndex=1;_step(){if(this.firstIndex>=this.placements.length-1){this.solved=!0;return}let t=this.getComponentOverlap(this.placements[this.firstIndex],this.placements[this.secondIndex]);if(t)this.params.issues.push(t);if(this.secondIndex++,this.secondIndex>=this.placements.length)this.firstIndex++,this.secondIndex=this.firstIndex+1;this.solved=this.firstIndex>=this.placements.length-1}getCenteredRectBounds(t){return{left:t.schX-t.width/2,right:t.schX+t.width/2,top:t.schY-t.height/2,bottom:t.schY+t.height/2}}getOverlapCorrectionSuggestions({firstComponent:t,secondComponent:n,overlapWidth:o,overlapHeight:i}){let r=t.width*t.height,s=n.width*n.height,a=r<=s?t:n,c=a===t?n:t,l=a.schX<=c.schX?-o:o,d=a.schY<=c.schY?-i:i;return[{targetComponentName:a.sourceComponentName,deltaSchX:l,deltaSchY:0,newSchX:a.schX+l,newSchY:a.schY},{targetComponentName:a.sourceComponentName,deltaSchX:0,deltaSchY:d,newSchX:a.schX,newSchY:a.schY+d}]}static issueToString(t){let n=[];return tn(n,"component1Name",t.firstComponent.sourceComponentName),tn(n,"component2Name",t.secondComponent.sourceComponentName),tn(n,"component1SchX",t.firstComponent.schX),tn(n,"component1SchY",t.firstComponent.schY),tn(n,"component2SchX",t.secondComponent.schX),tn(n,"component2SchY",t.secondComponent.schY),tn(n,"overlapWidth",t.overlapWidth),tn(n,"overlapHeight",t.overlapHeight),[`<ComponentOverlap ${n.join(" ")}>`,...t.correctionSuggestions.map(e.correctionSuggestionToString),"</ComponentOverlap>"].join(`
`)}static correctionSuggestionToString(t){let n=[];if(tn(n,"target",t.targetComponentName),t.deltaSchX!==0)tn(n,"newSchX",t.newSchX),tn(n,"deltaSchX",t.deltaSchX,{formatDelta:!0});if(t.deltaSchY!==0)tn(n,"newSchY",t.newSchY),tn(n,"deltaSchY",t.deltaSchY,{formatDelta:!0});return`<OverlapCorrectionSuggestion ${n.join(" ")} />`}getComponentOverlap(t,n){if(t.schematicSheetId!==n.schematicSheetId)return null;let o=this.getCenteredRectBounds(t),i=this.getCenteredRectBounds(n),r=Math.min(o.right,i.right)-Math.max(o.left,i.left),s=Math.min(o.bottom,i.bottom)-Math.max(o.top,i.top);if(r<=0||s<=0)return null;return{lineItemType:"ComponentOverlap",firstComponent:t,secondComponent:n,overlapWidth:r,overlapHeight:s,correctionSuggestions:this.getOverlapCorrectionSuggestions({firstComponent:t,secondComponent:n,overlapWidth:r,overlapHeight:s})}}};function m1t(e,t){let n;for(let o of e){if(o.type!=="schematic_path"&&o.type!=="schematic_circle"&&o.type!=="schematic_rect"||o.schematic_component_id!==t)continue;let i=(o.stroke_width??0.02)/2,r;if(o.type==="schematic_path"){if(!o.points.length)continue;r={xMin:Math.min(...o.points.map((s)=>s.x)),xMax:Math.max(...o.points.map((s)=>s.x)),yMin:Math.min(...o.points.map((s)=>s.y)),yMax:Math.max(...o.points.map((s)=>s.y))}}else{let s=o.type==="schematic_rect"?(o.rotation??0)*Math.PI/180:0,a=o.type==="schematic_circle"?2*o.radius:o.width,c=o.type==="schematic_circle"?2*o.radius:o.height,l=(Math.abs(a*Math.cos(s))+Math.abs(c*Math.sin(s)))/2,d=(Math.abs(a*Math.sin(s))+Math.abs(c*Math.cos(s)))/2;r={xMin:o.center.x-l,xMax:o.center.x+l,yMin:o.center.y-d,yMax:o.center.y+d}}r.xMin-=i,r.xMax+=i,r.yMin-=i,r.yMax+=i,n=n?{xMin:Math.min(n.xMin,r.xMin),xMax:Math.max(n.xMax,r.xMax),yMin:Math.min(n.yMin,r.yMin),yMax:Math.max(n.yMax,r.yMax)}:r}return n}var p1t=0.2,Ame=(e)=>Array.from(e.display_pin_label??"").length*0.095;function A1t(e,t,n,o,i=0,r){if(!Number.isFinite(n)||n<=0)return;if(t.some((p)=>!p.side_of_component))return;if(!Pft(e,t,rY,r))return;let s=0,a=0;for(let p of t)if(p.side_of_component==="left"||p.side_of_component==="right")a=Math.max(a,2*(Math.abs(p.center.y-e.schY)+n));else s=Math.max(s,2*(Math.abs(p.center.x-e.schX)+n));let c=o.width===void 0?e.width:Math.max(o.width,s,Sft(e,t,"width",r)),l=o.height===void 0?e.height:Math.max(o.height,a,Sft(e,t,"height",r)),d=(p)=>p>0.000000001&&p>=i-0.000000001,u=d(e.width-c)?c:void 0,h=d(e.height-l)?l:void 0;if(u===void 0&&h===void 0)return;let A=[{width:u,height:h}];if(u!==void 0&&h!==void 0)A.push({width:u},{height:h});let m=(p)=>(p.width??e.width)*(p.height??e.height);return A.sort((p,g)=>m(p)-m(g)),A.find((p)=>Pft({...e,width:p.width??e.width,height:p.height??e.height},t,p1t,r))}function Sft(e,t,n,o){let i=e[n],r=n==="width"?e.schX:e.schY,s=n==="width"?"xMin":"yMin",a=n==="width"?"xMax":"yMax",c=n==="width"?"yMin":"xMin",l=n==="width"?"yMax":"xMax",d=(m)=>{if(n==="width")return m.side==="left"?-0.5:m.side==="right"?0.5:0;return m.side==="bottom"?-0.5:m.side==="top"?0.5:0},u=0,h=(m,p,g=0)=>{if(p>0)u=Math.max(u,i+(g-m)/p)},A=Y7e(e,t,Ame);if(o)A.push(o);for(let m=0;m<A.length;m++){let p=A[m];h(p[s]-(r-i/2),d(p)+0.5),h(r+i/2-p[a],0.5-d(p));for(let g=m+1;g<A.length;g++){let _=A[g],f=p.side&&_.side&&p.side!==_.side?p1t:rY;if(!u7e(p[c],p[l],_[c],_[l],f))continue;let[y,x]=p[a]<=_[s]?[p,_]:[_,p];h(x[s]-y[a],d(x)-d(y),f)}}return u}function Pft(e,t,n=rY,o){if(!Number.isFinite(e.width)||!Number.isFinite(e.height))return!1;let i=Y7e(e,t,Ame);if(o)i.push(o);for(let r=0;r<i.length;r++){let s=i[r];if(s.xMin<e.schX-e.width/2-0.000000001||s.xMax>e.schX+e.width/2+0.000000001||s.yMin<e.schY-e.height/2-0.000000001||s.yMax>e.schY+e.height/2+0.000000001)return!1;for(let a=r+1;a<i.length;a++){let c=i[a],l=s.side&&c.side&&s.side!==c.side?n:rY;if(h1t(s,c,l))return!1}}return!0}var hme=class extends Zn{constructor(e){super();this.params=e;let{circuitJson:t,componentPlacements:n}=e.ctx;this.placementById=this.getPlacementBySchematicComponentId(n),this.schematicComponentById=new Map(t.filter((i)=>i.type==="schematic_component").map((i)=>[i.schematic_component_id,i])),this.sourceComponentById=this.getSourceComponentById(t);let o=V7e(t);this.entries=Array.from(this.getPortsBySchematicComponentId(t)).filter(([i])=>o.has(i)),this.solved=this.entries.length===0}params;SCHEMATIC_BOX_TOO_WIDE_MESSAGE="Shrink schematic box width";PIN_HEADER_MAX_ALLOWED_GAP=0.1;GENERIC_MAX_ALLOWED_GAP=1;PIN_LABEL_EDGE_PADDING=0.1;GAP_COMPARISON_EPSILON=0.000000001;entries;placementById;schematicComponentById;sourceComponentById;currentIndex=0;_step(){let e=this.entries[this.currentIndex++];if(!e){this.solved=!0;return}this.solved=this.currentIndex>=this.entries.length;let[t,n]=e,o=this.placementById.get(t);if(!o)return;let i=this.getCenteredRectBounds(o),r=this.getLabelColumn("left",n),s=this.getLabelColumn("right",n),a=this.getSourceComponentFtype(o,this.sourceComponentById),c;if(r&&s)c=this.getInnerLabelEdge(i,s)-this.getInnerLabelEdge(i,r);else if(r&&r.labelCount>=4)c=i.right-this.getInnerLabelEdge(i,r);else if(s&&s.labelCount>=4)c=this.getInnerLabelEdge(i,s)-i.left;if(c===void 0)return;let l=a==="simple_pin_header"?this.PIN_HEADER_MAX_ALLOWED_GAP:this.GENERIC_MAX_ALLOWED_GAP;if(!this.exceedsMaxAllowedGap(c,l))return;let d=this.getSuggestedWidth({measuredInnerLabelHorizontalEmptySpace:c,maxAllowedInnerLabelHorizontalEmptySpace:l,currentWidth:o.width}),u=this.schematicComponentById.get(t)?.pin_spacing;if(u===void 0)return;let h=A1t(o,n,u,{width:d},0,m1t(this.params.ctx.circuitJson,t));if(h?.width===void 0)return;let A=h.width;if(a==="simple_pin_header")this.params.issues.push({lineItemType:"PinHeaderSchematicBoxTooWide",schematicBox:o,measuredInnerLabelHorizontalEmptySpace:c,maxAllowedInnerLabelHorizontalEmptySpace:l,suggestedSchWidth:A,message:this.SCHEMATIC_BOX_TOO_WIDE_MESSAGE});else this.params.issues.push({lineItemType:"GenericSchematicBoxTooWide",schematicBox:o,measuredInnerLabelHorizontalEmptySpace:c,maxAllowedInnerLabelHorizontalEmptySpace:l,suggestedSchWidth:A,message:this.SCHEMATIC_BOX_TOO_WIDE_MESSAGE})}static issueToString(e){let t=[];return tn(t,"message",e.message),tn(t,"componentName",e.schematicBox.sourceComponentName),tn(t,"currentSchWidth",e.schematicBox.width),tn(t,"measuredInnerLabelHorizontalEmptySpace",e.measuredInnerLabelHorizontalEmptySpace),tn(t,"maxAllowedInnerLabelHorizontalEmptySpace",e.maxAllowedInnerLabelHorizontalEmptySpace),tn(t,"suggestedSchWidth",e.suggestedSchWidth),`<${e.lineItemType} ${t.join(" ")} />`}isSchematicPort(e){return e.type==="schematic_port"}getSourceComponentWithFtype(e){if(e.type!=="source_component"||!("source_component_id"in e)||typeof e.source_component_id!=="string")return null;return{type:"source_component",source_component_id:e.source_component_id,ftype:"ftype"in e&&typeof e.ftype==="string"?e.ftype:void 0}}exceedsMaxAllowedGap(e,t){return e-t>this.GAP_COMPARISON_EPSILON}getCenteredRectBounds(e){return{left:e.schX-e.width/2,right:e.schX+e.width/2,top:e.schY+e.height/2,bottom:e.schY-e.height/2}}getSourceComponentById(e){return new Map(e.flatMap((t)=>{let n=this.getSourceComponentWithFtype(t);return n?[n]:[]}).map((t)=>[t.source_component_id,t]))}getPlacementBySchematicComponentId(e){return new Map(e.filter((t)=>t.schematicComponentId).map((t)=>[t.schematicComponentId,t]))}getPortsBySchematicComponentId(e){let t=new Map;for(let n of e.filter((o)=>this.isSchematicPort(o))){if(!n.schematic_component_id)continue;let o=t.get(n.schematic_component_id);if(o)o.push(n);else t.set(n.schematic_component_id,[n])}return t}getSourceComponentFtype(e,t){return e.sourceComponentId?t.get(e.sourceComponentId)?.ftype:void 0}getLabelColumn(e,t){let n=t.filter((o)=>o.side_of_component===e).flatMap((o)=>o.display_pin_label?[Ame(o)]:[]);if(n.length===0)return null;return{side:e,labelCount:n.length,maxLabelWidth:Math.max(...n)}}getInnerLabelEdge(e,t){return t.side==="left"?e.left+this.PIN_LABEL_EDGE_PADDING+t.maxLabelWidth:e.right-this.PIN_LABEL_EDGE_PADDING-t.maxLabelWidth}getSuggestedWidth(e){return e.currentWidth-e.measuredInnerLabelHorizontalEmptySpace+e.maxAllowedInnerLabelHorizontalEmptySpace}},X7e=class extends Zn{constructor(e){super();this.params=e;let{circuitJson:t,componentPlacements:n}=e.ctx;this.placementById=this.getPlacementBySchematicComponentId(n),this.schematicComponentById=this.getSchematicComponentById(t),this.sourcePortById=this.getSourcePortById(t);let o=V7e(t);this.entries=Array.from(this.getPortsBySchematicComponentId(t)).filter(([i])=>o.has(i)),this.solved=this.entries.length===0}params;MESSAGE="Move schematic pins closer to the box edge or change the schematic box";GAP_COMPARISON_EPSILON=0.000000001;entries;placementById;schematicComponentById;sourcePortById;currentIndex=0;_step(){let e=this.entries[this.currentIndex++];if(!e){this.solved=!0;return}this.solved=this.currentIndex>=this.entries.length;let[t,n]=e,o=this.placementById.get(t);if(!o)return;let i=this.getPinSpacing(o,this.schematicComponentById);if(i===null)return;let r=this.getMaxLabelLengthBySide(n),s=new Map;for(let p of n){if(!this.isSchematicSide(p.side_of_component))continue;let g=s.get(p.side_of_component)??[];g.push(p),s.set(p.side_of_component,g)}let a=[];for(let[p,g]of s){if(g.length===1)continue;for(let _ of this.getBoxEdgeSidesForPinSide(p)){let f=this.getOuterPinBySide(_,g);if(!f)continue;let y=this.getPinPaddingToEdge(o,f,_),x=Math.max(i,this.getMaxAllowedPinPadding(i,_,r));if(!this.exceedsMaxAllowedGap(y,x+i))continue;a.push({schematicBox:o,pinSide:p,edgeSide:_,pinName:this.getPinName(f,this.sourcePortById),measuredPadding:y,maxAllowedPadding:x})}}if(!a.length)return;let c=a.map((p)=>this.createIssue(p)),l=c.flatMap((p)=>p.suggestedSchWidth===void 0?[]:[p.suggestedSchWidth]),d=c.flatMap((p)=>p.suggestedSchHeight===void 0?[]:[p.suggestedSchHeight]),u=A1t(o,n,i,{width:l.length?Math.max(...l):void 0,height:d.length?Math.max(...d):void 0},2*i,m1t(this.params.ctx.circuitJson,t));if(!u)return;let h=c.filter((p)=>u.width!==void 0&&p.suggestedSchWidth!==void 0||u.height!==void 0&&p.suggestedSchHeight!==void 0),A=h.reduce((p,g)=>g.excessPadding>p.excessPadding?g:p),m=[u.width===void 0?"":"width",u.height===void 0?"":"height"].filter(Boolean).join(" and ");this.params.issues.push({...A,paddingDetails:h.map(({pinSide:p,edgeSide:g,pinName:_,measuredPadding:f,maxAllowedPadding:y,excessPadding:x})=>({pinSide:p,edgeSide:g,pinName:_,measuredPadding:f,maxAllowedPadding:y,excessPadding:x})),suggestedSchWidth:u.width,suggestedSchHeight:u.height,message:`${this.MESSAGE} ${m}`})}static issueToString(e){let t=[];if(tn(t,"message",e.message),tn(t,"componentName",e.schematicBox.sourceComponentName),e.paddingDetails)tn(t,"pinSides",[...new Set(e.paddingDetails.map((n)=>n.pinSide))].join(",")),tn(t,"edgeSides",[...new Set(e.paddingDetails.map((n)=>n.edgeSide))].join(","));else tn(t,"pinSide",e.pinSide),tn(t,"edgeSide",e.edgeSide),tn(t,"pinName",e.pinName),tn(t,"measuredPadding",e.measuredPadding),tn(t,"maxAllowedPadding",e.maxAllowedPadding),tn(t,"excessPadding",e.excessPadding);return tn(t,"suggestedSchWidth",e.suggestedSchWidth),tn(t,"suggestedSchHeight",e.suggestedSchHeight),`<SchematicPinPaddingToEdgeTooLarge ${t.join(" ")} />`}isSchematicPort(e){return e.type==="schematic_port"}isSourcePort(e){return e.type==="source_port"}isSchematicComponent(e){return e.type==="schematic_component"}isHorizontalSide(e){return e==="left"||e==="right"}isVerticalSide(e){return e==="top"||e==="bottom"}isSchematicSide(e){return this.isHorizontalSide(e)||this.isVerticalSide(e)}exceedsMaxAllowedGap(e,t){return e-t>this.GAP_COMPARISON_EPSILON}getCenteredRectBounds(e){return{left:e.schX-e.width/2,right:e.schX+e.width/2,top:e.schY+e.height/2,bottom:e.schY-e.height/2}}getSourcePortById(e){return new Map(e.filter((t)=>this.isSourcePort(t)).map((t)=>[t.source_port_id,t]))}getSchematicComponentById(e){return new Map(e.filter((t)=>this.isSchematicComponent(t)).map((t)=>[t.schematic_component_id,t]))}getPlacementBySchematicComponentId(e){return new Map(e.filter((t)=>t.schematicComponentId).map((t)=>[t.schematicComponentId,t]))}getPortsBySchematicComponentId(e){let t=new Map;for(let n of e.filter((o)=>this.isSchematicPort(o))){if(!n.schematic_component_id)continue;let o=t.get(n.schematic_component_id);if(o)o.push(n);else t.set(n.schematic_component_id,[n])}return t}getPinSpacing(e,t){if(!e.schematicComponentId)return null;let n=t.get(e.schematicComponentId);return typeof n?.pin_spacing==="number"?n.pin_spacing:null}getPinName(e,t){let n=t.get(e.source_port_id);if(n?.name)return n.name;if(e.display_pin_label)return e.display_pin_label;if(n?.pin_number!==void 0)return String(n.pin_number);return}getMaxLabelLengthBySide(e){let t={left:0,right:0,top:0,bottom:0};for(let n of e){if(!this.isSchematicSide(n.side_of_component))continue;if(!n.display_pin_label)continue;t[n.side_of_component]=Math.max(t[n.side_of_component],Ame(n))}return t}getOuterPinBySide(e,t){if(t.length===0)return null;switch(e){case"top":return t.reduce((n,o)=>o.center.y>n.center.y?o:n);case"bottom":return t.reduce((n,o)=>o.center.y<n.center.y?o:n);case"left":return t.reduce((n,o)=>o.center.x<n.center.x?o:n);case"right":return t.reduce((n,o)=>o.center.x>n.center.x?o:n)}}getPinPaddingToEdge(e,t,n){let o=this.getCenteredRectBounds(e);switch(n){case"top":return Math.max(0,o.top-t.center.y);case"bottom":return Math.max(0,t.center.y-o.bottom);case"left":return Math.max(0,t.center.x-o.left);case"right":return Math.max(0,o.right-t.center.x)}}getBoxEdgeSidesForPinSide(e){return this.isHorizontalSide(e)?["top","bottom"]:["left","right"]}getMaxAllowedPinPadding(e,t,n){let o=this.isHorizontalSide(t)?["left","right"]:["top","bottom"];return(n[o[0]]+n[o[1]]+e)/2}createIssue(e){let t=Math.max(0,e.measuredPadding-e.maxAllowedPadding),n=t*2;return{lineItemType:"SchematicPinPaddingToEdgeTooLarge",pinSide:e.pinSide,edgeSide:e.edgeSide,pinName:e.pinName,schematicBox:e.schematicBox,measuredPadding:e.measuredPadding,maxAllowedPadding:e.maxAllowedPadding,excessPadding:t,suggestedSchWidth:this.isHorizontalSide(e.pinSide)?void 0:Math.max(0,e.schematicBox.width-n),suggestedSchHeight:this.isHorizontalSide(e.pinSide)?Math.max(0,e.schematicBox.height-n):void 0,message:this.isHorizontalSide(e.pinSide)?`${this.MESSAGE} height`:`${this.MESSAGE} width`}}},K7e=(e)=>{let t=new Map;for(let n of e)if(n.type==="schematic_sheet"&&n.name)t.set(n.schematic_sheet_id,n.name);return t},zho=(e)=>e.type==="schematic_box",vft=(e)=>e.type==="schematic_component",A7e=(e)=>e.schematic_sheet_id,Gho=(e,t)=>{if(!t)return;return ts(e).source_component.get(t)?.name},Yho=(e,t)=>{if(!e.schematic_component_id)return{};let n=ts(t),o=n.schematic_component.get(e.schematic_component_id);if(!o?.source_component_id)return{};let i=n.source_component.get(o.source_component_id);return{sourceComponentId:o.source_component_id,sourceComponentName:i?.name}},Vho=(e,t,n,o)=>{let i=A7e(e);if(i===void 0&&o)i=A7e(o);let r;if(i)r=n.get(i);let s={lineItemType:"SchematicBoxPlacement",positionAnchor:"center",schX:e.center.x,schY:e.center.y,width:o?.width??e.size.width,height:o?.height??e.size.height,sourceComponentId:e.source_component_id,sourceComponentName:Gho(t,e.source_component_id),schematicComponentId:e.schematic_component_id,schematicSymbolId:o?.schematic_symbol_id??e.schematic_symbol_id,subcircuitId:e.subcircuit_id??o?.subcircuit_id};if(i)s.schematicSheetId=i;if(r)s.schematicSheetName=r;return s},Uho=(e,t,n)=>{let o=A7e(e),i;if(o)i=n.get(o);let r={lineItemType:"SchematicBoxPlacement",positionAnchor:"center",schX:e.x+e.width/2,schY:e.y+e.height/2,width:e.width,height:e.height,...Yho(e,t),schematicComponentId:e.schematic_component_id,schematicSymbolId:e.schematic_symbol_id,subcircuitId:e.subcircuit_id};if(o)r.schematicSheetId=o;if(i)r.schematicSheetName=i;return r},Who=(e)=>{let t=e.filter(zho).filter((r)=>r.schematic_component_id||r.schematic_symbol_id),n=K7e(e),o=new Set(e.filter(vft).map((r)=>r.schematic_component_id)),i=[...e.filter(vft).map((r)=>Vho(r,e,n,t.find((s)=>s.schematic_component_id===r.schematic_component_id))),...t.filter((r)=>!r.schematic_component_id||!o.has(r.schematic_component_id)).map((r)=>Uho(r,e,n))];return{circuitJson:e,componentPlacements:i}},_1t=class extends Zn{constructor(e){super();this.params=e}params;_step(){let e=new p0(this.params.ctx);for(let t of d1t(e)){let{resistor:n,switchBox:o,signalPort:i,signalSchY:r,pullDirection:s}=t;if(t.horizontalPushbutton)continue;let a=e.connected(i.source_port_id);if(e.portsByNet.get(a)?.length!==2)continue;if(i.needs_external_pullup||i.needs_external_pulldown)continue;let c=s==="up"?r-(n.schY+n.height/2):n.schY-n.height/2-r;if(c<=1.5)continue;let l=s==="up"?"above":"below";this.params.issues.push({lineItemType:"PullResistorOnWrongSide",resistorSchematicBox:n,hostSchematicBox:o,signalSourcePortId:i.source_port_id,signalPinName:i.name,signalSchY:r,pullDirection:s,preferredSide:l,wrongSideGap:c,maxRecommendedWrongSideGap:1.5,message:`place ${n.sourceComponentName} ${l} ${o.sourceComponentName} so the pull-${s} branch reads toward ${s==="up"?"power":"ground"}`})}this.solved=!0}};function g1t(e,t){let n=e.find((c)=>c.type==="source_trace"&&c.source_trace_id===t.source_trace_id);if(n?.type==="source_trace"&&n.name)return n.name;let o=t.edges[0],i=t.edges.at(-1),r=(c,l)=>{let d=e.filter((_)=>_.type==="schematic_port"&&_.schematic_sheet_id===t.schematic_sheet_id&&(l?_.schematic_port_id===l:Math.hypot(_.center.x-c.x,_.center.y-c.y)<=0.01));if(d.length!==1||d[0]?.type!=="schematic_port")return;let u=d[0],h=e.find((_)=>_.type==="source_port"&&_.source_port_id===u.source_port_id),A=e.find((_)=>_.type==="schematic_component"&&_.schematic_component_id===u.schematic_component_id),m=h?.type==="source_port"?h.source_component_id:A?.type==="schematic_component"?A.source_component_id:void 0,p=e.find((_)=>_.type==="source_component"&&_.source_component_id===m);if(p?.type!=="source_component"||!p.name)return;let g=h?.type==="source_port"&&h.name?h.name:u.pin_number!==void 0?`pin${u.pin_number}`:u.display_pin_label;return g?`${p.name}.${g}`:p.name},s=o&&r(o.from,o.from_schematic_port_id),a=i&&r(i.to,i.to_schematic_port_id);if(s&&a)return`${s} to ${a}`;return n?.type==="source_trace"&&n.display_name||s||a||"trace"}var Xho=(e,t,n)=>{let o=[{x:e.x,y:e.y}],i=(e.x+t.x)/2,r=(e.y+t.y)/2,s={x:t.x,y:t.y};switch(t.facingDirection){case"x+":s.x+=n;break;case"x-":s.x-=n;break;case"y+":s.y+=n;break;case"y-":s.y-=n;break}let a=e.facingDirection??"none",c=t.facingDirection??"none",l=(h)=>{let A=o[o.length-1];if(A.x!==h.x||A.y!==h.y)o.push(h)},d=Math.abs(e.y-t.y)<=Math.max(0.000001,n*0.1),u=Math.abs(e.x-t.x)<=Math.max(0.000001,n*0.1);if(a==="none"&&c==="none")globalThis.__DEBUG_CALCULATE_ELBOW_CASE=1,l({x:i,y:e.y}),l({x:i,y:t.y});else if(a==="x+"&&c==="y+")if(globalThis.__DEBUG_CALCULATE_ELBOW_CASE=2,e.x>t.x&&e.y<t.y)globalThis.__DEBUG_CALCULATE_ELBOW_CASE=2.1,l({x:e.x+n,y:e.y}),l({x:e.x+n,y:t.y+n}),l({x:t.x,y:t.y+n});else if(!u&&!d&&e.x<t.x&&e.y>t.y)globalThis.__DEBUG_CALCULATE_ELBOW_CASE=2.2,l({x:t.x,y:e.y});else if(u)globalThis.__DEBUG_CALCULATE_ELBOW_CASE=2.3,l({x:e.x+n,y:e.y}),l({x:e.x+n,y:t.y+n}),l({x:t.x,y:t.y+n});else if(e.x<t.x)globalThis.__DEBUG_CALCULATE_ELBOW_CASE=2.4,l({x:i,y:e.y}),l({x:i,y:s.y}),l({x:t.x,y:s.y});else if(e.y<=t.y+n)globalThis.__DEBUG_CALCULATE_ELBOW_CASE=2.5,l({x:e.x+n,y:e.y}),l({x:e.x+n,y:e.y+n}),l({x:t.x,y:e.y+n}),l({x:t.x,y:t.y});else globalThis.__DEBUG_CALCULATE_ELBOW_CASE=2.6,l({x:e.x+n,y:e.y}),l({x:e.x+n,y:(e.y+t.y)/2}),l({x:t.x,y:(e.y+t.y)/2});else if(a==="x+"&&c==="x+"&&!d){globalThis.__DEBUG_CALCULATE_ELBOW_CASE=3;let h=Math.max(e.x+n,s.x);l({x:h,y:e.y}),l({x:h,y:t.y})}else if(a==="x+"&&c==="x+"&&d)globalThis.__DEBUG_CALCULATE_ELBOW_CASE=3.1,l({x:e.x+n,y:e.y}),l({x:e.x+n,y:e.y+n}),l({x:t.x+n,y:e.y+n}),l({x:t.x+n,y:t.y});else if(a==="x+"&&c==="y-")if(u&&e.y<=t.y)globalThis.__DEBUG_CALCULATE_ELBOW_CASE=4.11,l({x:e.x+n,y:e.y}),l({x:e.x+n,y:r}),l({x:t.x,y:r});else if(u&&e.y>t.y)globalThis.__DEBUG_CALCULATE_ELBOW_CASE=4.12,l({x:e.x+n,y:e.y}),l({x:e.x+n,y:t.y-n}),l({x:t.x,y:t.y-n});else if(e.x<t.x&&e.y<t.y)globalThis.__DEBUG_CALCULATE_ELBOW_CASE=4.2,l({x:t.x,y:e.y});else if(e.x>t.x&&e.y<t.y){globalThis.__DEBUG_CALCULATE_ELBOW_CASE=4.3;let h=e.x+n;l({x:h,y:e.y}),l({x:h,y:r}),l({x:t.x,y:r})}else if(e.x>t.x&&e.y>t.y){globalThis.__DEBUG_CALCULATE_ELBOW_CASE=4.4;let h=e.x+n;l({x:h,y:e.y}),l({x:h,y:s.y}),l({x:t.x,y:s.y})}else if(e.y===t.y)globalThis.__DEBUG_CALCULATE_ELBOW_CASE=4.5,l({x:e.x+n,y:e.y}),l({x:e.x+n,y:e.y-n}),l({x:t.x,y:e.y-n});else globalThis.__DEBUG_CALCULATE_ELBOW_CASE=4.6,l({x:i,y:e.y}),l({x:i,y:s.y}),l({x:t.x,y:s.y});else if(a==="x+"&&c==="x-"&&e.x+n>=t.x-n&&!d){globalThis.__DEBUG_CALCULATE_ELBOW_CASE=5;let h=e.x+n;l({x:h,y:e.y}),l({x:h,y:r}),l({x:s.x,y:r}),l({x:s.x,y:s.y})}else if(a==="x+"&&c==="x-"&&d&&t.x>e.x);else if(a==="x+"&&c==="x-"&&d)globalThis.__DEBUG_CALCULATE_ELBOW_CASE=7,l({x:e.x+n,y:e.y}),l({x:e.x+n,y:e.y+n}),l({x:t.x-n,y:e.y+n}),l({x:t.x-n,y:e.y});else{if(globalThis.__DEBUG_CALCULATE_ELBOW_CASE=8,a==="x+")l({x:e.x+n,y:e.y});l({x:i,y:o[o.length-1].y}),l({x:i,y:s.y}),l({x:s.x,y:s.y})}return l({x:t.x,y:t.y}),o},Eft=(e,t,n={})=>{let o=e,i=t,r=!1;if(o.x>i.x||o.x===i.x&&o.y>i.y)r=!0,[o,i]=[i,o];let s=o.facingDirection==="x-",a=o.facingDirection==="y-",c=(f)=>{let y=s?o.x-(f.x-o.x):f.x,x=a?o.y-(f.y-o.y):f.y,C=f.facingDirection;if(s){if(C==="x+")C="x-";else if(C==="x-")C="x+"}if(a){if(C==="y+")C="y-";else if(C==="y-")C="y+"}return{x:y,y:x,facingDirection:C}},l=(f,y)=>{let x=f.x-y.x,C=f.y-y.y,I=y.x+C,b=y.y-x,P=f.facingDirection;switch(P){case"x+":P="y-";break;case"y-":P="x-";break;case"x-":P="y+";break;case"y+":P="x+";break}return{x:I,y:b,facingDirection:P}},d=(f,y)=>{let x=f.x-y.x,C=f.y-y.y;return{x:y.x-C,y:y.y+x}},u=s||a?c(o):o,h=s||a?c(i):i,A=u,m=h,p=!1;if(u.facingDirection==="y+")p=!0,A={...u,facingDirection:"x+"},m=l(h,u);let g=n?.overshoot??0.1*Math.max(Math.abs(A.x-m.x),Math.abs(A.y-m.y)),_=Xho(A,m,g);if(p)_=_.map((f)=>d(f,A));if(s||a)_=_.map(({x:f,y})=>({x:s?o.x-(f-o.x):f,y:a?o.y-(y-o.y):y}));return r?_.reverse():_},j7e=class e extends Zn{static EPSILON=0.01;ctx;out;constructor({ctx:t,issues:n}){super();this.ctx=t,this.out=n}_step(){let t=this.ctx.circuitJson.filter((r)=>r.type==="schematic_port"),n=new Map(t.map((r)=>[r.schematic_port_id,r])),o=new Map(this.ctx.componentPlacements.flatMap((r)=>r.schematicComponentId?[[r.schematicComponentId,r]]:[])),i=new Set;for(let r of this.ctx.circuitJson.filter((s)=>s.type==="schematic_trace")){let s=this.getTracePoints(r),a=this.countTurns(s);if(a!==3)continue;let c=[this.getCandidate({trace:r,points:s,atStart:!0,currentTurnCount:a,ports:t,portsById:n,placementsByComponentId:o}),this.getCandidate({trace:r,points:s,atStart:!1,currentTurnCount:a,ports:t,portsById:n,placementsByComponentId:o})].filter((d)=>Boolean(d));for(let d of[...c]){if(!d.target.sourceComponentName?.startsWith("U"))continue;for(let u of[s[0],s.at(-1)]){let h=this.findPortAtPoint(t,u,r.schematic_sheet_id),A=h?.schematic_component_id?o.get(h.schematic_component_id):void 0;if(!A||!/^[CR]/.test(A.sourceComponentName??""))continue;c.push({target:A,deltaSchX:-d.deltaSchX,deltaSchY:-d.deltaSchY,currentTurnCount:a,suggestedTurnCount:d.suggestedTurnCount})}}let l=(d)=>/^[CR]/.test(d.target.sourceComponentName??"")?0:d.target.sourceComponentName?.startsWith("U")?2:1;c.sort((d,u)=>l(d)-l(u));for(let d of c){if(this.wouldOverlapAnotherComponent(d))continue;if(!this.validateMove(r,d,t))continue;let u=[d.target.schematicComponentId,d.deltaSchX.toFixed(3),d.deltaSchY.toFixed(3)].join("\x00");if(i.has(u))break;i.add(u),this.out.push(this.makeIssue(r,d));break}}this.solved=!0}getCandidate({trace:t,points:n,atStart:o,currentTurnCount:i,ports:r,portsById:s,placementsByComponentId:a}){if(n.length<4)return;let c=o?0:n.length-1,l=o?1:n.length-2,d=o?2:n.length-3,u=o?3:n.length-4,h=n[c],A=n[l],m=n[d],p=n[u],g=o?t.edges[0]:t.edges.at(-1);if(!g)return;let _=o?g.from_schematic_port_id:g.to_schematic_port_id,f=_?s.get(_):this.findPortAtPoint(r,h,t.schematic_sheet_id);if(!f?.schematic_component_id||!f.facing_direction)return;let y=this.getAxis(h,A),x=this.getAxis(A,m),C=this.getAxis(m,p),I=f.facing_direction==="left"||f.facing_direction==="right"?"horizontal":"vertical";if(!y||!x||!C)return;if(y!==I||x===I||C!==I)return;if(!this.isPointInFacingDirection(h,A,f.facing_direction)||!this.isPointInFacingDirection(m,p,f.facing_direction))return;let b=a.get(f.schematic_component_id);if(!b)return;let P=m.x-A.x,E=m.y-A.y;if(Math.abs(P)<=e.EPSILON&&Math.abs(E)<=e.EPSILON)return;let B={x:h.x+P,y:h.y+E},w=o?[B,...n.slice(2)]:[...n.slice(0,-2),B],T=this.countTurns(w);if(T===void 0||T!==1||T>=i)return;return{target:b,deltaSchX:P,deltaSchY:E,currentTurnCount:i,suggestedTurnCount:T}}validateMove(t,n,o){let i=n.target.schematicComponentId,r=n.target.schematicSheetId,s=o.filter((x)=>x.schematic_sheet_id===r),a=s.filter((x)=>x.schematic_component_id===i),c=this.ctx.circuitJson.filter((x)=>x.type==="schematic_trace"&&x.schematic_sheet_id===r),l=(x,C)=>x.edges.some((I)=>I.from_schematic_port_id===C.schematic_port_id||I.to_schematic_port_id===C.schematic_port_id||this.pointsEqual(I.from,C.center)||this.pointsEqual(I.to,C.center)),d=c.filter((x)=>a.some((C)=>l(x,C)));if(!d.includes(t))return!1;if(this.ctx.circuitJson.some((x)=>x.type==="schematic_net_label"&&x.schematic_sheet_id===r&&a.some((C)=>this.pointsEqual(x.anchor_position??x.center,C.center))))return!1;let u=(x)=>({x:x.x+n.deltaSchX,y:x.y+n.deltaSchY}),h={left:"x-",right:"x+",up:"y+",down:"y-"},A=(x,C)=>({...C&&x.schematic_component_id===i?u(x.center):x.center,facingDirection:h[x.facing_direction]}),m=(x)=>x.slice(1).reduce((C,I,b)=>C+Math.abs(I.x-x[b].x)+Math.abs(I.y-x[b].y),0),p=(x)=>x.slice(1).map((C,I)=>({from:x[I],to:C})),g=e6(n.target.schX+n.deltaSchX,n.target.schY+n.deltaSchY,n.target.width,n.target.height),_=c.filter((x)=>!d.includes(x));if(_.some((x)=>x.edges.some((C)=>ame(C.from,C.to,tY(g)))))return!1;let f=this.ctx.circuitJson.flatMap((x)=>{if(x.type==="schematic_net_label"&&x.schematic_sheet_id===r)return[tY(rme(x))];if(x.type!=="schematic_text"||x.schematic_sheet_id!==r)return[];return h7e(x.schematic_component_id===i?{...x,position:u(x.position)}:x)});if(f.some((x)=>m7e(x,tY(g))))return!1;let y=[];for(let x of d){let C=this.getTracePoints(x);if(C.length<2||x.junctions?.length)return!1;let I=(Q,N)=>{let F=s.filter((H)=>N?H.schematic_port_id===N:this.pointsEqual(H.center,Q));return F.length===1&&this.pointsEqual(F[0].center,Q)?F[0]:void 0},b=I(C[0],x.edges[0].from_schematic_port_id),P=I(C.at(-1),x.edges.at(-1).to_schematic_port_id);if(!b?.facing_direction||!P?.facing_direction)return!1;if(a.some((Q)=>l(x,Q)&&Q!==b&&Q!==P))return!1;let E=(Q)=>!this.pointsEqual(Q,b.center)&&!this.pointsEqual(Q,P.center)&&p(C).some(({from:N,to:F})=>Math.abs(Math.hypot(Q.x-N.x,Q.y-N.y)+Math.hypot(Q.x-F.x,Q.y-F.y)-Math.hypot(F.x-N.x,F.y-N.y))<0.000001);if(c.some((Q)=>Q!==x&&Q.edges.some((N)=>E(N.from)||E(N.to))))return!1;if(this.ctx.circuitJson.some((Q)=>Q.type==="schematic_net_label"&&Q.schematic_sheet_id===r&&E(Q.anchor_position??Q.center)))return!1;let B=Eft(A(b,!0),A(P,!0)).filter((Q,N,F)=>N===0||!this.pointsEqual(Q,F[N-1])),w=this.countTurns(B),T=this.countTurns(C);if(B.length<2||w===void 0||T===void 0||w>T||m(B)>m(C)+0.000001)return!1;if(!this.isPointInFacingDirection(B[0],B[1],b.facing_direction)||!this.isPointInFacingDirection(B.at(-1),B.at(-2),P.facing_direction))return!1;if(x===t){let Q=this.countTurns(Eft(A(b,!1),A(P,!1)));if(w>=T||Q===void 0||w>=Q)return!1;n.suggestedTurnCount=w}for(let Q of p(B)){if(f.some((H)=>ame(Q.from,Q.to,H)))return!1;if(this.ctx.componentPlacements.some((H)=>{if(H.schematicSheetId!==r)return!1;let z=H.schematicComponentId===i?g:e6(H.schX,H.schY,H.width,H.height);return ame(Q.from,Q.to,tY(z))}))return!1;let N=p7e(Q.from,Q.to);if(!N)continue;if([..._.flatMap((H)=>H.edges),...y.flatMap((H)=>p(H.points))].some((H)=>{if([b,P].some((Y)=>Y.schematic_component_id!==i&&[Q.from,Q.to].some((U)=>this.pointsEqual(U,Y.center))&&[H.from,H.to].some((U)=>this.pointsEqual(U,Y.center)))&&this.getAxis(Q.from,Q.to)!==this.getAxis(H.from,H.to))return!1;let z=p7e(H.from,H.to);return z&&m7e(N,z)}))return!1}y.push({schematicTraceId:x.schematic_trace_id,points:B})}return n.suggestedTraces=y,!0}getTracePoints(t){let n=t.edges[0];if(!n)return[];let o=[n.from];for(let i of t.edges){let r=o.at(-1);if(!this.pointsEqual(r,i.from))return[];o.push(i.to)}return o}countTurns(t){let n=[];for(let[o,i]of t.slice(1).entries()){let r=t[o];if(this.pointsEqual(r,i))continue;let s=this.getAxis(r,i);if(!s)return;n.push(s)}return n.slice(1).filter((o,i)=>o!==n[i]).length}pointsEqual(t,n){let{EPSILON:o}=e;return Math.abs(t.x-n.x)<=o&&Math.abs(t.y-n.y)<=o}getAxis(t,n){let o=Math.abs(n.x-t.x),i=Math.abs(n.y-t.y),{EPSILON:r}=e;if(o<=r&&i>r)return"vertical";if(i<=r&&o>r)return"horizontal";return}isPointInFacingDirection(t,n,o){let{EPSILON:i}=e;switch(o){case"left":return n.x<t.x-i;case"right":return n.x>t.x+i;case"up":return n.y>t.y+i;case"down":return n.y<t.y-i}}findPortAtPoint(t,n,o){let{EPSILON:i}=e;return t.find((r)=>r.schematic_sheet_id===o&&Math.abs(r.center.x-n.x)<=i&&Math.abs(r.center.y-n.y)<=i)}wouldOverlapAnotherComponent(t){let n=e6(t.target.schX+t.deltaSchX,t.target.schY+t.deltaSchY,t.target.width,t.target.height);return this.ctx.componentPlacements.some((o)=>{if(o===t.target)return!1;if(o.schematicSheetId!==t.target.schematicSheetId)return!1;return Boolean(ume(n,e6(o.schX,o.schY,o.width,o.height)))})}makeIssue(t,n){let o=n.target.sourceComponentName||"component",i=this.getMoveDirection(n.deltaSchX,n.deltaSchY),r=Math.abs(n.deltaSchX||n.deltaSchY),s=n.target.schX+n.deltaSchX,a=n.target.schY+n.deltaSchY;return{lineItemType:"TraceCanBeSimplifiedByMovingComponent",schematicTraceId:t.schematic_trace_id,traceName:g1t(this.ctx.circuitJson,t),targetComponent:n.target,deltaSchX:n.deltaSchX,deltaSchY:n.deltaSchY,newSchX:s,newSchY:a,currentTurnCount:n.currentTurnCount,suggestedTurnCount:n.suggestedTurnCount,suggestedTraces:n.suggestedTraces,message:`move ${o} ${i} by ${N$(r)} (to schX=${N$(s)}, schY=${N$(a)}) to reduce this trace from ${n.currentTurnCount} turns to ${n.suggestedTurnCount}`}}getMoveDirection(t,n){if(Math.abs(t)>e.EPSILON)return t>0?"right":"left";return n>0?"up":"down"}static issueToString(t){let n=[];return tn(n,"traceName",t.traceName),tn(n,"targetComponentName",t.targetComponent.sourceComponentName),tn(n,"deltaSchX",t.deltaSchX,{formatDelta:!0}),tn(n,"deltaSchY",t.deltaSchY,{formatDelta:!0}),tn(n,"newSchX",t.newSchX),tn(n,"newSchY",t.newSchY),tn(n,"currentTurnCount",t.currentTurnCount),tn(n,"suggestedTurnCount",t.suggestedTurnCount),tn(n,"message",t.message),`<TraceCanBeSimplifiedByMovingComponent ${n.join(" ")} />`}};function Kho(e){let t=new Set,n=new Map;for(let r of e){if(r.type!=="source_net"&&r.type!=="source_port")continue;let s=r.type==="source_net"?r.source_net_id:r.source_port_id;if(r.type==="source_net"?r.is_power||r.is_ground||r.is_positive_voltage_source:r.provides_power||r.requires_power||r.provides_ground||r.requires_ground)t.add(s);let c=r.subcircuit_connectivity_map_key;if(c!==void 0){let l=n.get(c)??[];l.push(s),n.set(c,l)}}let o=Nv(e),i=TM([...Object.values(o.netMap),...n.values()]);for(let r of Object.values(i))if(r.some((s)=>t.has(s)))for(let s of r)t.add(s);return t}var q7e=class e extends Zn{static EPSILON=0.01;ctx;out;powerOrGroundConnectionIds;constructor({ctx:t,issues:n}){super();this.ctx=t,this.out=n,this.powerOrGroundConnectionIds=Kho(t.circuitJson)}_step(){let t=this.ctx.circuitJson.filter((s)=>s.type==="schematic_port"),n=new Map(t.map((s)=>[s.schematic_port_id,s])),o=new Map;for(let s of t){if(!s.schematic_component_id)continue;let a=o.get(s.schematic_component_id)??[];a.push(s),o.set(s.schematic_component_id,a)}let i=new Map(this.ctx.componentPlacements.flatMap((s)=>s.schematicComponentId?[[s.schematicComponentId,s]]:[])),r=new Map;for(let s of this.ctx.circuitJson.filter((a)=>a.type==="schematic_trace")){let a=this.getTracePoints(s),c=this.countTurns(a);if(c===void 0||c<2)continue;let l=this.getTraceEndpoints(s,a,t,n);if(!l)continue;for(let[d,u]of[l,[l[1],l[0]]]){let h=this.getFlipCandidate({trace:s,targetEndpoint:d,connectedEndpoint:u,currentTurnCount:c,portsByComponentId:o,placementsByComponentId:i});if(!h)continue;let A=h.targetPort.schematic_component_id,m=r.get(A);if(!m||this.isBetterCandidate(h,m))r.set(A,h)}}for(let s of r.values())this.out.push(this.makeIssue(s));this.solved=!0}getFlipCandidate({trace:t,targetEndpoint:n,connectedEndpoint:o,currentTurnCount:i,portsByComponentId:r,placementsByComponentId:s}){let a=n.port,c=o.port,l=a.schematic_component_id,d=c.schematic_component_id;if(!l||!d||l===d||a.schematic_sheet_id!==c.schematic_sheet_id)return;let u=r.get(l);if(u?.length!==2)return;if(u.some((x)=>x.source_port_id&&this.powerOrGroundConnectionIds.has(x.source_port_id)))return;if((r.get(d)??[]).length<=2)return;let A=u.find((x)=>x.schematic_port_id!==a.schematic_port_id);if(!A||!this.areOppositePorts(a,A))return;let m=a.facing_direction,p=A.facing_direction;if(!m||!p)return;if(!this.traceLeavesPortInFacingDirection(n))return;let g=c.center;if(this.isPointInFacingDirection(a.center,g,m)||!this.isPointInFacingDirection(A.center,g,p)||!c.facing_direction||!this.isPointInFacingDirection(g,A.center,c.facing_direction))return;let _=this.getMinimumTurnCount(A.center,g,p);if(_>=i)return;let f=s.get(l),y=s.get(d);if(!f||!y)return;return{trace:t,targetPort:a,targetPlacement:f,connectedPlacement:y,suggestedFacingDirection:p,currentTurnCount:i,suggestedTurnCount:_,traceLength:this.getTraceLength(n.pointsFromEndpoint)}}getTraceEndpoints(t,n,o,i){let r=t.edges[0],s=t.edges.at(-1);if(!r||!s||n.length<2)return;let a=r.from_schematic_port_id?i.get(r.from_schematic_port_id):this.findPortAtPoint(o,n[0],t.schematic_sheet_id),c=s.to_schematic_port_id?i.get(s.to_schematic_port_id):this.findPortAtPoint(o,n.at(-1),t.schematic_sheet_id);if(!a||!c)return;return[{port:a,pointsFromEndpoint:n},{port:c,pointsFromEndpoint:[...n].reverse()}]}getTracePoints(t){let n=t.edges[0];if(!n)return[];let o=[n.from];for(let i of t.edges){if(!this.pointsEqual(o.at(-1),i.from))return[];o.push(i.to)}return o}countTurns(t){let n=[];for(let[o,i]of t.slice(1).entries()){let r=t[o];if(this.pointsEqual(r,i))continue;let s=this.getAxis(r,i);if(!s)return;if(n.at(-1)!==s)n.push(s)}return Math.max(0,n.length-1)}traceLeavesPortInFacingDirection(t){let n=t.pointsFromEndpoint.find((o)=>!this.pointsEqual(o,t.port.center));return Boolean(n&&t.port.facing_direction&&this.isPointInFacingDirection(t.port.center,n,t.port.facing_direction))}areOppositePorts(t,n){let o=(t.facing_direction==="left"&&n.facing_direction==="right"||t.facing_direction==="right"&&n.facing_direction==="left")&&Math.abs(t.center.y-n.center.y)<=e.EPSILON,i=(t.facing_direction==="up"&&n.facing_direction==="down"||t.facing_direction==="down"&&n.facing_direction==="up")&&Math.abs(t.center.x-n.center.x)<=e.EPSILON;return o||i}getMinimumTurnCount(t,n,o){return(o==="left"||o==="right"?Math.abs(t.y-n.y)<=e.EPSILON:Math.abs(t.x-n.x)<=e.EPSILON)?0:1}isPointInFacingDirection(t,n,o){let{EPSILON:i}=e;switch(o){case"left":return n.x<t.x-i;case"right":return n.x>t.x+i;case"up":return n.y>t.y+i;case"down":return n.y<t.y-i}}getAxis(t,n){let o=Math.abs(t.x-n.x),i=Math.abs(t.y-n.y),{EPSILON:r}=e;if(o<=r&&i>r)return"vertical";if(i<=r&&o>r)return"horizontal";return}pointsEqual(t,n){let{EPSILON:o}=e;return Math.abs(t.x-n.x)<=o&&Math.abs(t.y-n.y)<=o}findPortAtPoint(t,n,o){return t.find((i)=>i.schematic_sheet_id===o&&this.pointsEqual(i.center,n))}getTraceLength(t){return t.slice(1).reduce((n,o,i)=>{let r=t[i];return n+Math.abs(o.x-r.x)+Math.abs(o.y-r.y)},0)}isBetterCandidate(t,n){let o=t.currentTurnCount-t.suggestedTurnCount,i=n.currentTurnCount-n.suggestedTurnCount;return o>i||o===i&&t.traceLength>n.traceLength}makeIssue(t){let n=t.targetPlacement.sourceComponentName||"component",o=t.connectedPlacement.sourceComponentName||"component",i=t.targetPort.pin_number?`pin${t.targetPort.pin_number}`:t.targetPort.display_pin_label;return{lineItemType:"TwoPinComponentCouldBeFlipped",schematicTraceId:t.trace.schematic_trace_id,traceName:g1t(this.ctx.circuitJson,t.trace),targetComponent:t.targetPlacement,connectedComponent:t.connectedPlacement,targetPin:i,currentFacingDirection:t.targetPort.facing_direction,suggestedFacingDirection:t.suggestedFacingDirection,deltaSchRotation:180,currentTurnCount:t.currentTurnCount,suggestedTurnCount:t.suggestedTurnCount,message:`rotate ${n} by 180° so ${i??"its connected pin"} faces ${o} and reduce this trace from ${t.currentTurnCount} turns to ${t.suggestedTurnCount}`}}static issueToString(t){let n=[];return tn(n,"traceName",t.traceName),tn(n,"targetComponentName",t.targetComponent.sourceComponentName),tn(n,"connectedComponentName",t.connectedComponent.sourceComponentName),tn(n,"targetPin",t.targetPin),tn(n,"currentFacingDirection",t.currentFacingDirection),tn(n,"suggestedFacingDirection",t.suggestedFacingDirection),tn(n,"deltaSchRotation",t.deltaSchRotation),tn(n,"currentTurnCount",t.currentTurnCount),tn(n,"suggestedTurnCount",t.suggestedTurnCount),tn(n,"message",t.message),`<TwoPinComponentCouldBeFlipped ${n.join(" ")} />`}};var J7e=class extends Zn{constructor(e){super();this.params=e;let{circuitJson:t}=e.ctx;this.netLabels=t.filter((n)=>this.isSchematicNetLabel(n)),this.tokenToInvolvedPin=this.buildTokenToInvolvedPinMap(t),this.schematicSheetNameById=K7e(t),this.solved=this.netLabels.length===0}params;VERBOSE_NET_LABEL_MESSAGE="Create trace with schDisplayLabel";netLabels;tokenToInvolvedPin;schematicSheetNameById;currentIndex=0;seen=new Set;_step(){let e=this.netLabels[this.currentIndex++];if(!e){this.solved=!0;return}this.solved=this.currentIndex>=this.netLabels.length;let t=`${e.schematic_sheet_id??""}:${e.text}`;if(!e.text.includes("/")||this.seen.has(t))return;this.seen.add(t);let n;if(e.schematic_sheet_id)n=this.schematicSheetNameById.get(e.schematic_sheet_id);let o={lineItemType:"VerboseSchematicNetLabel",schematicNetLabelId:e.schematic_net_label_id,sourceNetId:e.source_net_id,schematicSheetId:e.schematic_sheet_id,schematicSheetName:n,text:e.text,involvedPins:this.getInvolvedPins(e.text,this.tokenToInvolvedPin),schX:e.center.x,schY:e.center.y,message:this.VERBOSE_NET_LABEL_MESSAGE};this.params.issues.push(o)}static issueToString(e){let t=[];return tn(t,"message",e.message),tn(t,"text",e.text),tn(t,"involvedPins",e.involvedPins.join(",")),tn(t,"schSheetName",e.schematicSheetName),tn(t,"schX",e.schX),tn(t,"schY",e.schY),`<VerboseSchematicNetLabel ${t.join(" ")} />`}isSchematicNetLabel(e){return e.type==="schematic_net_label"}isSourcePort(e){return e.type==="source_port"}getSourceComponentWithName(e){if(e.type!=="source_component"||!("source_component_id"in e)||!("name"in e)||typeof e.source_component_id!=="string"||typeof e.name!=="string")return null;return{source_component_id:e.source_component_id,name:e.name}}getSourcePortNameCandidates(e){return[e.most_frequently_referenced_by_name,e.name,...e.port_hints??[],e.pin_number===void 0?void 0:String(e.pin_number)].filter((t)=>Boolean(t))}getBestSourcePortName(e){return e.most_frequently_referenced_by_name??e.name??(e.pin_number===void 0?"":`pin${e.pin_number}`)}buildTokenToInvolvedPinMap(e){let t=new Map(e.flatMap((o)=>{let i=this.getSourceComponentWithName(o);return i?[i]:[]}).map((o)=>[o.source_component_id,o])),n=new Map;for(let o of e.filter((i)=>this.isSourcePort(i))){if(!o.source_component_id)continue;let i=t.get(o.source_component_id);if(!i?.name)continue;let r=`${i.name}.${this.getBestSourcePortName(o)}`;for(let s of this.getSourcePortNameCandidates(o))n.set(`${i.name}_${s}`,r)}return n}getInvolvedPins(e,t){let n=new Set;for(let o of e.split("/")){let i=t.get(o);if(i)n.add(i)}return Array.from(n)}},$7e=class extends Zn{constructor(e){super();this.params=e;let{ctx:t}=e;this.sheetNames=K7e(t.circuitJson);let n=new Set(t.circuitJson.flatMap((i)=>i.type==="schematic_component"&&i.is_box_with_pins===!1&&!i.symbol_name?[i.schematic_component_id]:[])),o=new Set;this.texts=t.circuitJson.flatMap((i)=>{if(i.type!=="schematic_text")return[];if(i.schematic_component_id||i.schematic_symbol_id)return[];let r=h7e(i);if(!r.length)return[];let s=i.schematic_sheet_id,a=JSON.stringify([s,i.text,i.position.x,i.position.y,i.font_size,i.anchor,i.rotation,i.color]);if(o.has(a))return[];return o.add(a),[{text:i,isTraceLabel:Boolean("source_trace_id"in i&&i.source_trace_id),polygons:r,sheetId:s,object:{type:"text",id:i.schematic_text_id,text:i.text}}]}),this.obstacles=[...t.componentPlacements.flatMap((i)=>i.schematicComponentId&&!n.has(i.schematicComponentId)?[{object:{type:"component",id:i.schematicComponentId,componentName:i.sourceComponentName,schematicComponentId:i.schematicComponentId},polygons:[tY(e6(i.schX,i.schY,i.width,i.height))],sheetId:i.schematicSheetId}]:[]),...t.circuitJson.flatMap((i)=>i.type==="schematic_trace"?[{object:{type:"trace",id:i.schematic_trace_id},sheetId:i.schematic_sheet_id,segments:i.edges,polygons:i.edges.flatMap((r)=>{let s=p7e(r.from,r.to);return s?[s]:[]})}]:[])],this.solved=this.texts.length===0}params;texts;obstacles;sheetNames;index=0;_step(){let e=this.texts[this.index],n=[...this.obstacles,...this.texts.slice(this.index+1)].filter((o)=>this.collides(e,o));if(n.length){let o=e.isTraceLabel?void 0:this.findClearPosition(e);for(let i of n){let r=i.object.componentName??i.object.text;this.params.issues.push({lineItemType:"SchematicTextCollision",schematicSheetId:e.sheetId,schematicSheetName:e.sheetId?this.sheetNames.get(e.sheetId):void 0,schematicTextId:e.text.schematic_text_id,text:e.text.text,collidingObject:i.object,textBounds:bft(e.polygons),collidingObjectBounds:bft(i.polygons),suggestedMove:o,message:`Text "${e.text.text}" overlaps ${i.object.type}${r?` ${r}`:""}; ${e.isTraceLabel?"adjust the owning trace's label placement or remove stale duplicates to leave the visible text area clear.":"reposition the text to leave its visible area clear."}`})}}this.index++,this.solved=this.index>=this.texts.length}collides(e,t){if(e.sheetId!==t.sheetId)return!1;return e.polygons.some((n)=>t.segments?t.segments.some((o)=>ame(o.from,o.to,n)):t.polygons.some((o)=>m7e(n,o)))}findClearPosition(e){let t=[...this.obstacles,...this.texts.filter((o)=>o!==e)],n=Math.max(0.1,e.text.font_size/2);for(let o=n;o<=Math.max(4,e.text.font_size*8);o+=n)for(let[i,r]of[[0,o],[0,-o],[-o,0],[o,0]]){let s=Math.round((e.text.position.x+i)*1000)/1000,a=Math.round((e.text.position.y+r)*1000)/1000,c={...e,polygons:h7e({...e.text,position:{x:s,y:a}})};if(t.every((l)=>!this.collides(c,l)))return{newSchX:s,newSchY:a}}return}static issueToString(e){let t=[];return tn(t,"text",e.text),tn(t,"collidingObjectType",e.collidingObject.type),tn(t,"collidingText",e.collidingObject.text),tn(t,"newSchX",e.suggestedMove?.newSchX),tn(t,"newSchY",e.suggestedMove?.newSchY),tn(t,"message",e.message),`<SchematicTextCollision ${t.join(" ")} />`}},Z7e=class e extends Zn{constructor(t){super();this.params=t,this.networks=this.findNetworks(t.ctx),this.solved=this.networks.length===0}params;static MIN_DISTANCE=6;networks;index=0;_step(){let t=this.networks[this.index],n=t.members.slice(0,2),o=Math.max(e.MIN_DISTANCE,...n.map((r)=>3*Math.max(r.width,r.height))),i=n.map((r)=>Math.hypot(Math.max(0,Math.abs(r.schX-t.pinPosition.x)-r.width/2),Math.max(0,Math.abs(r.schY-t.pinPosition.y)-r.height/2)));if(i.some((r)=>r>o)){let r=t.host.sourceComponentName||"component",s=Mft(t.pin),a=n.map((c)=>c.sourceComponentName||"component").join(", ");this.params.issues.push({lineItemType:"ResetNetworkNotGrouped",hostSchematicBox:t.host,resetSourcePortId:t.pin.source_port_id,resetPinName:s,supportNetworkComponents:t.members,maxDistanceFromResetPin:Math.round(Math.max(...i)*100)/100,maxRecommendedDistance:o,message:`Group ${a} near ${r}.${s} so the reset pull-up and capacitor can be read together. Preserve all net connections; associated test points may remain in a debug area.`})}this.index++,this.solved=this.index>=this.networks.length}findNetworks(t){let n=l1t(t.circuitJson),o=t.circuitJson.filter((p)=>p.type==="source_component"),i=new Map(o.map((p)=>[p.source_component_id,p])),r=t.circuitJson.filter((p)=>p.type==="source_port"),s=new Map,a=new Map,c=new Set,l=new Set;for(let p of r){if(!p.source_component_id)continue;let g=s.get(p.source_component_id)??[];g.push(p),s.set(p.source_component_id,g);let _=n(p.source_port_id),f=a.get(_)??[];if(f.push(p),a.set(_,f),p.provides_power||p.requires_power)c.add(_);if(p.provides_ground||p.requires_ground)l.add(_)}for(let p of t.circuitJson){if(p.type!=="source_net")continue;if(p.is_power||p.is_positive_voltage_source)c.add(n(p.source_net_id));if(p.is_ground)l.add(n(p.source_net_id))}let d=new Map(t.componentPlacements.flatMap((p)=>p.sourceComponentId?[[p.sourceComponentId,p]]:[])),u=t.circuitJson.filter((p)=>p.type==="schematic_port"),h=new Map(t.circuitJson.filter((p)=>p.type==="schematic_component").map((p)=>[p.schematic_component_id,p])),A=[],m=new Set;for(let p of r){if(!p.source_component_id||!Mft(p)||p.do_not_connect)continue;if(i.get(p.source_component_id)?.ftype!=="simple_chip")continue;let g=n(p.source_port_id);if(m.has(g)||c.has(g)||l.has(g))continue;m.add(g);let _=a.get(g)??[];if(new Set(_.filter((w)=>w.source_component_id&&i.get(w.source_component_id)?.ftype==="simple_chip").map((w)=>w.source_component_id)).size!==1)continue;let y=d.get(p.source_component_id),x=u.find((w)=>w.source_port_id===p.source_port_id&&w.schematic_component_id===y?.schematicComponentId);if(!y||!x||x.schematic_sheet_id!==y.schematicSheetId)continue;let C=[],I=[],b=[],P=!1;for(let w of new Set(_.map((T)=>T.source_component_id))){if(!w||w===p.source_component_id)continue;let T=i.get(w)?.ftype,Q=s.get(w)??[],N=d.get(w);if(T==="simple_connector"||T==="simple_pin_header")continue;if(!N){P=!0;break}if(T==="simple_test_point"&&Q.length===1){b.push(N);continue}if(Q.length!==2){P=!0;break}let F=Q.find((z)=>n(z.source_port_id)!==g);if(!F){P=!0;break}let H=n(F.source_port_id);if(T==="simple_resistor"&&c.has(H)&&!l.has(H))C.push(N);else if(T==="simple_capacitor"&&l.has(H)&&!c.has(H))I.push(N);else{P=!0;break}}if(P||C.length!==1||I.length!==1)continue;let E=[...C,...I,...b],B=y.schematicComponentId?h.get(y.schematicComponentId)?.schematic_group_id:void 0;if(E.some((w)=>{let T=w.schematicComponentId?h.get(w.schematicComponentId)?.schematic_group_id:void 0;return w.schematicSheetId!==y.schematicSheetId||w.subcircuitId!==y.subcircuitId||T!==B}))continue;A.push({host:y,pin:p,pinPosition:x.center,members:E})}return A}static issueToString(t){let n=[];return tn(n,"hostComponentName",t.hostSchematicBox.sourceComponentName),tn(n,"resetPin",t.resetPinName),tn(n,"supportNetworkComponents",t.supportNetworkComponents.map((o)=>o.sourceComponentName||"component").join(",")),tn(n,"maxDistanceFromResetPin",t.maxDistanceFromResetPin),tn(n,"maxRecommendedDistance",t.maxRecommendedDistance),tn(n,"message",t.message),`<ResetNetworkNotGrouped ${n.join(" ")} />`}},Mft=(e)=>[e.name,...e.port_hints??[]].find((t)=>/^N?(RESET|RST)(N|B)?$/.test(t.toUpperCase().replace(/[_\-!~#/]/g,""))),jho={SeriesLedChainNotOrdered:[C7e],RailPathTooSpreadOut:[P7e],ResistorSeparatedFromChipPin:[b7e],CapacitorSeparatedFromChipPins:[v7e],DiodeCapacitorJunctionTooSpreadOut:[x7e],PiFilterComponentsNotGrouped:[E7e],MosfetGateNetworkNotGrouped:[M7e],FlybackDiodeSeparatedFromRelayCoil:[B7e],ComponentOverlap:[W7e],SchematicBoxHasALotOfSurroundingWhitespace:[],CapacitorSymbolHorizontal:[k7e,k$],VerboseSchematicNetLabel:[J7e],PinHeaderSchematicBoxTooWide:[hme],GenericSchematicBoxTooWide:[hme],SchematicBoxInnerLabelCollision:[U7e],SchematicPinPaddingToEdgeTooLarge:[X7e],DiodeResistorNotAligned:[O7e],ParallelRcNotAligned:[I7e],ParallelDiodeResistorNotAligned:[S7e],ComponentPinsWouldAlignWithVerticalShift:[F7e],TraceCanBeSimplifiedByMovingComponent:[j7e],CrystalNotCenteredOverLoadCapacitors:[H7e],ComponentNetLabelCollision:[Q$],ComponentBoxNetLabelCollision:[Q$],NetLabelCollision:[Q$],FeedbackNetworkNotCompact:[z7e],PullResistorOnWrongSide:[G7e,_1t],SchematicTextCollision:[$7e],ResetNetworkNotGrouped:[Z7e],TwoPinComponentCouldBeFlipped:[q7e],TwoPinComponentShouldBeVertical:[k$],TwoPinComponentHasInvertedRails:[k$],DecouplingCapacitorsNotCloseTogether:[L7e],ConnectorPositionCausesTraceDetours:[N7e],LowSideTransistorNotAlignedWithLoad:[R7e],UsbSeriesResistorsNotAligned:[Q7e],CurrentSenseShuntSeparatedFromInputs:[w7e],VoltageDividerSupplyResistorBelowGroundResistor:[T7e],RegulatorCapacitorsOnWrongSides:[D7e]},qho=class extends AI{ctx;issues=[];pipelineDef=[cr("SeriesLedChainPlacementSolver",C7e,(e)=>[{ctx:e.ctx,issues:e.issues}]),cr("ParallelRcPlacementSolver",I7e,(e)=>[{ctx:e.ctx,issues:e.issues}]),cr("ParallelDiodeResistorPlacementSolver",S7e,(e)=>[{ctx:e.ctx,issues:e.issues}]),cr("SchematicTextClearanceSolver",$7e,(e)=>[{ctx:e.ctx,issues:e.issues}]),cr("ResetNetworkGroupingSolver",Z7e,(e)=>[{ctx:e.ctx,issues:e.issues}]),cr("SchematicBoxOverlapSolver",W7e,(e)=>[{ctx:e.ctx,issues:e.issues}]),cr("CapacitorOrientationSolver",k7e,(e)=>[{ctx:e.ctx,issues:e.issues}]),cr("VerboseNetLabelSolver",J7e,(e)=>[{ctx:e.ctx,issues:e.issues}]),cr("SchematicBoxTooWideSolver",hme,(e)=>[{ctx:e.ctx,issues:e.issues}]),cr("SchematicPinPaddingToEdgeSolver",X7e,(e)=>[{ctx:e.ctx,issues:e.issues}]),cr("SchematicBoxInnerLabelCollisionSolver",U7e,(e)=>[{ctx:e.ctx,issues:e.issues}]),cr("DiodeResistorAlignmentSolver",O7e,(e)=>[{ctx:e.ctx,issues:e.issues}]),cr("ComponentPinAlignmentSolver",F7e,(e)=>[{ctx:e.ctx,issues:e.issues}]),cr("TraceSimplificationSolver",j7e,(e)=>[{ctx:e.ctx,issues:e.issues}]),cr("CrystalLoadCapacitorPlacementSolver",H7e,(e)=>[{ctx:e.ctx,issues:e.issues}]),cr("TwoPinComponentOrientationSolver",q7e,(e)=>[{ctx:e.ctx,issues:e.issues}]),cr("FeedbackNetworkPlacementSolver",z7e,(e)=>[{ctx:e.ctx,issues:e.issues}]),cr("TwoPinComponentRailOrientationSolver",k$,(e)=>[{ctx:e.ctx,issues:e.issues}]),cr("PullResistorPlacementSolver",G7e,(e)=>[{ctx:e.ctx,issues:e.issues}]),cr("SwitchPullResistorPlacementSolver",_1t,(e)=>[{ctx:e.ctx,issues:e.issues}]),cr("ComponentNetLabelCollisionSolver",Q$,(e)=>[{ctx:e.ctx,issues:e.issues}]),cr("DecouplingCapacitorGroupingSolver",L7e,(e)=>[{ctx:e.ctx,issues:e.issues}]),cr("ConnectorPlacementSolver",N7e,(e)=>[{ctx:e.ctx,issues:e.issues}]),cr("LowSideTransistorPlacementSolver",R7e,(e)=>[{ctx:e.ctx,issues:e.issues}]),cr("UsbSeriesResistorPlacementSolver",Q7e,(e)=>[{ctx:e.ctx,issues:e.issues}]),cr("RegulatorInputOutputCapacitorPlacementSolver",D7e,(e)=>[{ctx:e.ctx,issues:e.issues}]),cr("VoltageDividerPlacementSolver",T7e,(e)=>[{ctx:e.ctx,issues:e.issues}]),cr("CurrentSenseShuntPlacementSolver",w7e,(e)=>[{ctx:e.ctx,issues:e.issues}]),cr("RelayFlybackDiodePlacementSolver",B7e,(e)=>[{ctx:e.ctx,issues:e.issues}]),cr("DiodeCapacitorStagePlacementSolver",x7e,(e)=>[{ctx:e.ctx,issues:e.issues}]),cr("PiFilterPlacementSolver",E7e,(e)=>[{ctx:e.ctx,issues:e.issues}]),cr("MosfetGateNetworkPlacementSolver",M7e,(e)=>[{ctx:e.ctx,issues:e.issues}]),cr("ChipPinResistorPlacementSolver",b7e,(e)=>[{ctx:e.ctx,issues:e.issues}]),cr("ChipPinPairCapacitorPlacementSolver",v7e,(e)=>[{ctx:e.ctx,issues:e.issues}]),cr("RailPathVisibilitySolver",P7e,(e)=>[{ctx:e.ctx,issues:e.issues,maxSpan:e.railPathVisibility?.maxSpan,maxLength:e.railPathVisibility?.maxPathLength}])];selectedIssueTypes;railPathVisibility;constructor(e,t={}){super(e);if(this.railPathVisibility=t.railPathVisibility,t.issueTypes!==void 0){this.selectedIssueTypes=new Set(t.issueTypes);let n=new Set(t.issueTypes.flatMap((o)=>jho[o]));this.pipelineDef=this.pipelineDef.filter((o)=>n.has(o.solverClass))}}_setup(){this.ctx=Who(this.inputProblem)}getOutput(){let e=new Set(this.issues.flatMap((t)=>t.lineItemType==="TwoPinComponentShouldBeVertical"&&t.schematicBox.schematicComponentId?[t.schematicBox.schematicComponentId]:[]));return{issues:this.issues.filter((t)=>t.lineItemType!=="CapacitorSymbolHorizontal"||!e.has(t.schematicBox.schematicComponentId??"")).filter((t)=>this.selectedIssueTypes===void 0||this.selectedIssueTypes.has(t.lineItemType)),componentPlacements:this.ctx.componentPlacements}}},Bft=0.01,Jho=({issues:e,componentPlacements:t,circuitJson:n})=>{let o=new Set,i=new Map(t.flatMap((c)=>c.schematicComponentId?[[c.schematicComponentId,c]]:[])),r=new Map;for(let c of t){if(!c.sourceComponentName)continue;let l=r.get(c.sourceComponentName);if(l)l.push(c);else r.set(c.sourceComponentName,[c])}let s=(c)=>{if(!c)return;let l=c.schematicComponentId?i.get(c.schematicComponentId):t.find((d)=>d.sourceComponentId===c.sourceComponentId&&d.schX===c.schX&&d.schY===c.schY);if(l)o.add(l)},a=(c,l)=>{if(!c)return;for(let d of r.get(c)??[])if(l===void 0||d.schematicSheetId===l)o.add(d)};for(let c of e)switch(c.lineItemType){case"SeriesLedChainNotOrdered":for(let l of c.ledSchematicBoxes)s(l);break;case"ResistorSeparatedFromChipPin":s(c.hostSchematicBox),s(c.resistorSchematicBox);break;case"CapacitorSeparatedFromChipPins":s(c.hostSchematicBox),s(c.capacitorSchematicBox);break;case"DiodeCapacitorJunctionTooSpreadOut":s(c.capacitorSchematicBox);for(let l of c.diodeSchematicBoxes)s(l);break;case"PiFilterComponentsNotGrouped":s(c.inductorSchematicBox),s(c.firstCapacitorSchematicBox),s(c.secondCapacitorSchematicBox);break;case"MosfetGateNetworkNotGrouped":s(c.mosfetSchematicBox),s(c.seriesGateResistorSchematicBox),s(c.gateSourceResistorSchematicBox);break;case"FlybackDiodeSeparatedFromRelayCoil":s(c.relaySchematicBox),s(c.diodeSchematicBox);break;case"CurrentSenseShuntSeparatedFromInputs":s(c.amplifierSchematicBox),s(c.shuntSchematicBox);break;case"VoltageDividerSupplyResistorBelowGroundResistor":s(c.supplyResistorSchematicBox),s(c.groundResistorSchematicBox);break;case"RegulatorCapacitorsOnWrongSides":s(c.regulatorSchematicBox),s(c.inputCapacitorSchematicBox),s(c.outputCapacitorSchematicBox);break;case"UsbSeriesResistorsNotAligned":s(c.positiveResistorSchematicBox),s(c.negativeResistorSchematicBox);break;case"LowSideTransistorNotAlignedWithLoad":s(c.transistorSchematicBox),s(c.loadSchematicBox),s(c.baseResistorSchematicBox),s(c.clampDiodeSchematicBox);break;case"DecouplingCapacitorsNotCloseTogether":for(let l of c.capacitorSchematicBoxes)s(l);break;case"ConnectorPositionCausesTraceDetours":s(c.connectorSchematicBox);for(let l of c.connectedComponents)s(l);break;case"ResetNetworkNotGrouped":s(c.hostSchematicBox);for(let l of c.supportNetworkComponents)s(l);break;case"SchematicTextCollision":if(c.collidingObject.schematicComponentId)s(i.get(c.collidingObject.schematicComponentId));if(c.collidingObject.type==="trace")for(let l of Tft({schematicTraceId:c.collidingObject.id,circuitJson:n,placementByComponentId:i}))s(l);break;case"ComponentOverlap":s(c.firstComponent),s(c.secondComponent);break;case"SchematicBoxHasALotOfSurroundingWhitespace":case"CapacitorSymbolHorizontal":case"PinHeaderSchematicBoxTooWide":case"GenericSchematicBoxTooWide":case"SchematicBoxInnerLabelCollision":case"SchematicPinPaddingToEdgeTooLarge":s(c.schematicBox);break;case"VerboseSchematicNetLabel":for(let l of c.involvedPins)a($ho(l),c.schematicSheetId);break;case"ParallelRcNotAligned":s(c.resistorSchematicBox),s(c.capacitorSchematicBox);break;case"ParallelDiodeResistorNotAligned":case"DiodeResistorNotAligned":s(c.diodeSchematicBox),s(c.resistorSchematicBox);break;case"ComponentPinsWouldAlignWithVerticalShift":s(c.firstComponent),s(c.secondComponent),s(c.targetComponent);break;case"TraceCanBeSimplifiedByMovingComponent":s(c.targetComponent);for(let l of Tft({schematicTraceId:c.schematicTraceId,circuitJson:n,placementByComponentId:i}))o.add(l);break;case"CrystalNotCenteredOverLoadCapacitors":s(c.crystalSchematicBox),s(c.firstLoadCapacitorSchematicBox),s(c.secondLoadCapacitorSchematicBox);break;case"TwoPinComponentCouldBeFlipped":s(c.targetComponent),s(c.connectedComponent);break;case"FeedbackNetworkNotCompact":s(c.amplifierSchematicBox);for(let l of c.feedbackComponents)s(l);break;case"TwoPinComponentShouldBeVertical":case"TwoPinComponentHasInvertedRails":s(c.schematicBox);break;case"RailPathTooSpreadOut":s(c.hostSchematicBox);for(let l of c.supportSchematicBoxes)s(l);break;case"PullResistorOnWrongSide":s(c.resistorSchematicBox),s(c.hostSchematicBox);break;case"ComponentNetLabelCollision":s(c.firstComponent),s(c.secondComponent);break;case"ComponentBoxNetLabelCollision":s(c.boxComponent),s(c.labelComponent);break;case"NetLabelCollision":for(let l of c.pairs)a(l.comp1Name,c.schematicSheetId),a(l.comp2Name,c.schematicSheetId);for(let l of c.moves)a(l.componentName,c.schematicSheetId);break}return t.filter((c)=>o.has(c))},wft=(e)=>{if("schematicSheetId"in e||"schematicSheetName"in e){let t="schematicSheetId"in e&&typeof e.schematicSheetId==="string"?e.schematicSheetId:void 0,n="schematicSheetName"in e&&typeof e.schematicSheetName==="string"?e.schematicSheetName:void 0;if(t||n)return{schematicSheetId:t,schematicSheetName:n}}for(let t of Object.values(e).flat())if(Zho(t))return{schematicSheetId:t.schematicSheetId,schematicSheetName:t.schematicSheetName};return{}},$ho=(e)=>{let t=e.lastIndexOf(".");return t===-1?e:e.slice(0,t)},Zho=(e)=>Boolean(e&&typeof e==="object"&&"positionAnchor"in e&&e.positionAnchor==="center"&&"schX"in e&&"schY"in e&&"width"in e&&"height"in e),Tft=({schematicTraceId:e,circuitJson:t,placementByComponentId:n})=>{let o=t.find((l)=>l.type==="schematic_trace"&&l.schematic_trace_id===e),i=o?.edges[0],r=o?.edges.at(-1);if(!o||!i||!r)return[];let s=t.filter((l)=>l.type==="schematic_port"),a=new Map(s.map((l)=>[l.schematic_port_id,l]));return[i.from_schematic_port_id?a.get(i.from_schematic_port_id):Dft(s,i.from,o.schematic_sheet_id),r.to_schematic_port_id?a.get(r.to_schematic_port_id):Dft(s,r.to,o.schematic_sheet_id)].flatMap((l)=>{let d=l?.schematic_component_id?n.get(l.schematic_component_id):void 0;return d?[d]:[]})},Dft=(e,t,n)=>e.find((o)=>o.schematic_sheet_id===n&&Math.abs(o.center.x-t.x)<=Bft&&Math.abs(o.center.y-t.y)<=Bft),e0o=class{constructor(e,t=!1){this.lineItems=e,this.groupBySchematicSheet=t}lineItems;groupBySchematicSheet;getLineItems(){return this.lineItems}getIssues(e={}){return this.lineItems.flatMap((t)=>t.lineItemType==="SchematicPlacementIssues"?t.issues:[]).filter((t)=>(e.issueTypes===void 0||e.issueTypes.includes(t.lineItemType))&&(e.schematicSheetId===void 0||(wft(t).schematicSheetId??"")===e.schematicSheetId))}getIssueCounts(e={}){let t={FlybackDiodeSeparatedFromRelayCoil:0,ComponentOverlap:0,SchematicBoxHasALotOfSurroundingWhitespace:0,CapacitorSymbolHorizontal:0,VerboseSchematicNetLabel:0,PinHeaderSchematicBoxTooWide:0,GenericSchematicBoxTooWide:0,SchematicBoxInnerLabelCollision:0,SchematicPinPaddingToEdgeTooLarge:0,DiodeResistorNotAligned:0,ParallelRcNotAligned:0,ParallelDiodeResistorNotAligned:0,ComponentPinsWouldAlignWithVerticalShift:0,TraceCanBeSimplifiedByMovingComponent:0,CrystalNotCenteredOverLoadCapacitors:0,ComponentNetLabelCollision:0,ComponentBoxNetLabelCollision:0,NetLabelCollision:0,FeedbackNetworkNotCompact:0,PullResistorOnWrongSide:0,SchematicTextCollision:0,ResetNetworkNotGrouped:0,TwoPinComponentCouldBeFlipped:0,TwoPinComponentShouldBeVertical:0,TwoPinComponentHasInvertedRails:0,DecouplingCapacitorsNotCloseTogether:0,ConnectorPositionCausesTraceDetours:0,LowSideTransistorNotAlignedWithLoad:0,UsbSeriesResistorsNotAligned:0,RegulatorCapacitorsOnWrongSides:0,VoltageDividerSupplyResistorBelowGroundResistor:0,CurrentSenseShuntSeparatedFromInputs:0,DiodeCapacitorJunctionTooSpreadOut:0,PiFilterComponentsNotGrouped:0,MosfetGateNetworkNotGrouped:0,CapacitorSeparatedFromChipPins:0,ResistorSeparatedFromChipPin:0,RailPathTooSpreadOut:0,SeriesLedChainNotOrdered:0};for(let n of this.getIssues(e))t[n.lineItemType]++;return t}getString(){return this.toString()}schematicBoxPlacementsToString(e){let t=[];return tn(t,"componentName",e.sourceComponentName),tn(t,"positionAnchor",e.positionAnchor),tn(t,"schX",e.schX),tn(t,"schY",e.schY),tn(t,"width",e.width),tn(t,"height",e.height),`<SchematicBoxPlacement ${t.join(" ")} />`}schematicIssuesToString(e){switch(e.lineItemType){case"SeriesLedChainNotOrdered":return C7e.issueToString(e);case"ResistorSeparatedFromChipPin":return b7e.issueToString(e);case"CapacitorSeparatedFromChipPins":return v7e.issueToString(e);case"DiodeCapacitorJunctionTooSpreadOut":return x7e.issueToString(e);case"PiFilterComponentsNotGrouped":return E7e.issueToString(e);case"MosfetGateNetworkNotGrouped":return M7e.issueToString(e);case"CurrentSenseShuntSeparatedFromInputs":return w7e.issueToString(e);case"ComponentOverlap":return W7e.issueToString(e);case"CapacitorSymbolHorizontal":return k7e.issueToString(e);case"DecouplingCapacitorsNotCloseTogether":return L7e.issueToString(e);case"VerboseSchematicNetLabel":return J7e.issueToString(e);case"PinHeaderSchematicBoxTooWide":case"GenericSchematicBoxTooWide":return hme.issueToString(e);case"SchematicBoxInnerLabelCollision":return U7e.issueToString(e);case"SchematicPinPaddingToEdgeTooLarge":return X7e.issueToString(e);case"ParallelRcNotAligned":return I7e.issueToString(e);case"ParallelDiodeResistorNotAligned":return S7e.issueToString(e);case"DiodeResistorNotAligned":return O7e.issueToString(e);case"ComponentPinsWouldAlignWithVerticalShift":return F7e.issueToString(e);case"TraceCanBeSimplifiedByMovingComponent":return j7e.issueToString(e);case"CrystalNotCenteredOverLoadCapacitors":return H7e.issueToString(e);case"TwoPinComponentCouldBeFlipped":return q7e.issueToString(e);case"FeedbackNetworkNotCompact":return z7e.issueToString(e);case"TwoPinComponentShouldBeVertical":case"TwoPinComponentHasInvertedRails":return k$.issueToString(e);case"RailPathTooSpreadOut":return P7e.issueToString(e);case"PullResistorOnWrongSide":return G7e.issueToString(e);case"NetLabelCollision":return Q$.netLabelCollisionToString(e);case"SchematicTextCollision":return $7e.issueToString(e);case"ResetNetworkNotGrouped":return Z7e.issueToString(e);case"ConnectorPositionCausesTraceDetours":return N7e.issueToString(e);case"LowSideTransistorNotAlignedWithLoad":return R7e.issueToString(e);case"FlybackDiodeSeparatedFromRelayCoil":return B7e.issueToString(e);case"VoltageDividerSupplyResistorBelowGroundResistor":return T7e.issueToString(e);case"RegulatorCapacitorsOnWrongSides":return D7e.issueToString(e);case"UsbSeriesResistorsNotAligned":return Q7e.issueToString(e);default:return""}}toString(){let e=this.lineItems.filter((i)=>i.lineItemType==="SchematicBoxPlacement"),t=this.lineItems.flatMap((i)=>i.lineItemType==="SchematicPlacementIssues"?i.issues:[]);if(t.length===0)return"";if(!this.groupBySchematicSheet)return this.issueContextToLines(e,t).join(`
`);let n=new Map,o=(i)=>{let r=i.schematicSheetId??i.schematicSheetName??"__default__",s=n.get(r);if(s)return s;let a={...i,placements:[],issues:[]};return n.set(r,a),a};for(let i of t)o(wft(i)).issues.push(i);for(let i of e)o({schematicSheetId:i.schematicSheetId,schematicSheetName:i.schematicSheetName}).placements.push(i);return[...n.values()].flatMap((i)=>{let r=[];return tn(r,"name",i.schematicSheetName),tn(r,"id",i.schematicSheetId),[`<SchematicSheet${r.length>0?` ${r.join(" ")}`:""}>`,...this.issueContextToLines(i.placements,i.issues),"</SchematicSheet>"]}).join(`
`)}issueContextToLines(e,t){return[...e.length>0?["<SchematicBoxPositions>",...e.map(this.schematicBoxPlacementsToString),"</SchematicBoxPositions>"]:[],"<SchematicPlacementIssues>",...t.map(this.schematicIssuesToString),"</SchematicPlacementIssues>"]}},t0o=(e,t={})=>{let n=new qho(e,t);n.solve();let{issues:o,componentPlacements:i}=n.getOutput(),s=[...Jho({issues:o,componentPlacements:i,circuitJson:e}),...o.length>0?[{lineItemType:"SchematicPlacementIssues",issues:o}]:[]],a=new Set(e.flatMap((c)=>("schematic_sheet_id"in c)&&typeof c.schematic_sheet_id==="string"?[c.schematic_sheet_id]:[]));return new e0o(s,a.size>1)},n0o=["TwoPinComponentHasInvertedRails","RegulatorCapacitorsOnWrongSides","PullResistorOnWrongSide","VoltageDividerSupplyResistorBelowGroundResistor","SeriesLedChainNotOrdered","ParallelRcNotAligned"];function o0o(e){let t=t0o(e,{issueTypes:n0o}),n=ts(e);return t.getIssues().flatMap((o)=>{let i,r,s;switch(o.lineItemType){case"TwoPinComponentHasInvertedRails":{i=o.schematicBox.schematicComponentId;let l=ys(e,i??"");r="inverted_rails",s=`${l} has its positive-supply pin facing down. Rotate ${l} by 180° so that pin faces up, preserving pin connections, and reroute attached traces.`;break}case"RegulatorCapacitorsOnWrongSides":{i=o.regulatorSchematicBox.schematicComponentId;let l=ys(e,i??""),d=ys(e,o.inputCapacitorSchematicBox.schematicComponentId??""),u=ys(e,o.outputCapacitorSchematicBox.schematicComponentId??"");r="regulator_capacitors_on_wrong_sides",s=`${d} and ${u} are on the wrong sides of ${l}. Move them beside their connected regulator pins, preserving connections and rerouting traces.`;break}case"PullResistorOnWrongSide":i=o.resistorSchematicBox.schematicComponentId,r="pull_resistor_on_wrong_side",s=`consider placing ${ys(e,i??"")} ${o.preferredSide} ${ys(e,o.hostSchematicBox.schematicComponentId??"")}.${ys(e,o.signalSourcePortId)} so the pull-${o.pullDirection} branch reads toward ${o.pullDirection==="up"?"power":"ground"}`;break;case"VoltageDividerSupplyResistorBelowGroundResistor":{i=o.supplyResistorSchematicBox.schematicComponentId;let l=ys(e,i??""),d=ys(e,o.groundResistorSchematicBox.schematicComponentId??"");r="voltage_divider_supply_resistor_below_ground_resistor",s=`${l}, connected to the supply, is below ${d}, connected to ground. Place ${l} above ${d} so their shared divider tap is easy to follow. Preserve pin connections and reroute affected traces; exact alignment is not required.`;break}case"SeriesLedChainNotOrdered":{i=o.ledSchematicBoxes[0]?.schematicComponentId;let l=o.ledSchematicBoxes.map((d)=>ys(e,d.schematicComponentId??"")).join(", ");r="series_led_chain_not_ordered",s=`The series chain ${l} requires long connections behind LED pins. Arrange the LEDs in their connected order, preserving anode/cathode connections, and reroute affected traces. A horizontal, vertical, or clearly connected folded chain is acceptable.`;break}case"ParallelRcNotAligned":{i=o.resistorSchematicBox.schematicComponentId;let l=ys(e,i??""),d=ys(e,o.capacitorSchematicBox.schematicComponentId??"");r="parallel_rc_not_aligned",s=`${l} and ${d} share chip-pin and ground connections but are not drawn as adjacent parallel branches. Place their shared connections at matching ends, preserving pin connections and capacitor polarity, and reroute affected traces.`;break}default:return[]}if(!i)return[];let a=n.schematic_component.get(i);if(!a)return[];let c=a.schematic_group_id?n.schematic_group.get(a.schematic_group_id):void 0;return[{type:"schematic_component_styling_warning",schematic_component_styling_warning_id:`schematic_component_styling_warning_${i}_${r}`,warning_type:"schematic_component_styling_warning",styling_issue_type:r,message:s,schematic_component_id:i,source_component_id:a.source_component_id,schematic_sheet_id:a.schematic_sheet_id,subcircuit_id:a.subcircuit_id??c?.subcircuit_id,schematic_port_ids:n.schematic_port.list().filter((l)=>l.schematic_component_id===i).map((l)=>l.schematic_port_id)}]})}var i0o=Object.create,{getPrototypeOf:r0o,defineProperty:Nft,getOwnPropertyNames:s0o}=Object,Rft=Object.prototype.hasOwnProperty;function a0o(e){return this[e]}var c0o,l0o,d0o=(e,t,n)=>{var o=e!=null&&typeof e==="object";if(o){var i=t?c0o??=new WeakMap:l0o??=new WeakMap,r=i.get(e);if(r)return r}n=e!=null?i0o(r0o(e)):{};let s=t||!e||!e.__esModule||!Rft.call(e,"default")?Nft(n,"default",{value:e,enumerable:!0}):n;if(e&&typeof e==="object"||typeof e==="function"){for(let a of s0o(e))if(!Rft.call(s,a))Nft(s,a,{get:a0o.bind(e,a),enumerable:!0})}if(o)i.set(e,s);return s},u0o=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),h0o=u0o(function(e,t){(function(n,o){typeof e==="object"&&typeof t<"u"?t.exports=o():typeof define==="function"&&define.amd?define(o):(n=typeof globalThis<"u"?globalThis:n||self,n.svgson=o())})(e,function(){var n=function(V){return V!=null&&(o(V)||i(V)||!!V._isBuffer)};function o(V){return!!V.constructor&&typeof V.constructor.isBuffer==="function"&&V.constructor.isBuffer(V)}function i(V){return typeof V.readFloatLE==="function"&&typeof V.slice==="function"&&o(V.slice(0,0))}var r=Object.prototype.toString,s=function(V){if(typeof V>"u")return"undefined";if(V===null)return"null";if(V===!0||V===!1||V instanceof Boolean)return"boolean";if(typeof V==="string"||V instanceof String)return"string";if(typeof V==="number"||V instanceof Number)return"number";if(typeof V==="function"||V instanceof Function)return"function";if(typeof Array.isArray<"u"&&Array.isArray(V))return"array";if(V instanceof RegExp)return"regexp";if(V instanceof Date)return"date";var W=r.call(V);if(W==="[object RegExp]")return"regexp";if(W==="[object Date]")return"date";if(W==="[object Arguments]")return"arguments";if(W==="[object Error]")return"error";if(n(V))return"buffer";if(W==="[object Set]")return"set";if(W==="[object WeakSet]")return"weakset";if(W==="[object Map]")return"map";if(W==="[object WeakMap]")return"weakmap";if(W==="[object Symbol]")return"symbol";if(W==="[object Int8Array]")return"int8array";if(W==="[object Uint8Array]")return"uint8array";if(W==="[object Uint8ClampedArray]")return"uint8clampedarray";if(W==="[object Int16Array]")return"int16array";if(W==="[object Uint16Array]")return"uint16array";if(W==="[object Int32Array]")return"int32array";if(W==="[object Uint32Array]")return"uint32array";if(W==="[object Float32Array]")return"float32array";if(W==="[object Float64Array]")return"float64array";return"object"};function a(V,W){return W={exports:{}},V(W,W.exports),W.exports}var c=a(function(V){(function(){function W(j,q){if(typeof q!=="function")return j;var ne={};for(var ce in j)if(Object.prototype.hasOwnProperty.call(j,ce))ne[q(ce,j[ce])||ce]=j[ce];return ne}if(V.exports)V.exports=W;else window.rename=W})()}),l=function V(W,j){var q=s(W);if(q!=="object"&&q!=="array")throw Error("expected an object");var ne=[];if(q==="object")W=c(W,j),ne={};for(var ce in W)if(W.hasOwnProperty(ce)){var oe=W[ce];if(s(oe)==="object"||s(oe)==="array")ne[ce]=V(oe,j);else ne[ce]=oe}return ne},d=a(function(V){var W=Object.prototype.hasOwnProperty,j="~";function q(){}if(Object.create){if(q.prototype=Object.create(null),!new q().__proto__)j=!1}function ne(oe,ie,J){this.fn=oe,this.context=ie,this.once=J||!1}function ce(){this._events=new q,this._eventsCount=0}ce.prototype.eventNames=function(){var oe=[],ie,J;if(this._eventsCount===0)return oe;for(J in ie=this._events)if(W.call(ie,J))oe.push(j?J.slice(1):J);if(Object.getOwnPropertySymbols)return oe.concat(Object.getOwnPropertySymbols(ie));return oe},ce.prototype.listeners=function(oe,ie){var J=j?j+oe:oe,ee=this._events[J];if(ie)return!!ee;if(!ee)return[];if(ee.fn)return[ee.fn];for(var se=0,le=ee.length,he=Array(le);se<le;se++)he[se]=ee[se].fn;return he},ce.prototype.emit=function(oe,ie,J,ee,se,le){var he=j?j+oe:oe;if(!this._events[he])return!1;var ue=this._events[he],Ae=arguments.length,_e,Pe;if(ue.fn){if(ue.once)this.removeListener(oe,ue.fn,void 0,!0);switch(Ae){case 1:return ue.fn.call(ue.context),!0;case 2:return ue.fn.call(ue.context,ie),!0;case 3:return ue.fn.call(ue.context,ie,J),!0;case 4:return ue.fn.call(ue.context,ie,J,ee),!0;case 5:return ue.fn.call(ue.context,ie,J,ee,se),!0;case 6:return ue.fn.call(ue.context,ie,J,ee,se,le),!0}for(Pe=1,_e=Array(Ae-1);Pe<Ae;Pe++)_e[Pe-1]=arguments[Pe];ue.fn.apply(ue.context,_e)}else{var Ee=ue.length,Te;for(Pe=0;Pe<Ee;Pe++){if(ue[Pe].once)this.removeListener(oe,ue[Pe].fn,void 0,!0);switch(Ae){case 1:ue[Pe].fn.call(ue[Pe].context);break;case 2:ue[Pe].fn.call(ue[Pe].context,ie);break;case 3:ue[Pe].fn.call(ue[Pe].context,ie,J);break;case 4:ue[Pe].fn.call(ue[Pe].context,ie,J,ee);break;default:if(!_e)for(Te=1,_e=Array(Ae-1);Te<Ae;Te++)_e[Te-1]=arguments[Te];ue[Pe].fn.apply(ue[Pe].context,_e)}}}return!0},ce.prototype.on=function(oe,ie,J){var ee=new ne(ie,J||this),se=j?j+oe:oe;if(!this._events[se])this._events[se]=ee,this._eventsCount++;else if(!this._events[se].fn)this._events[se].push(ee);else this._events[se]=[this._events[se],ee];return this},ce.prototype.once=function(oe,ie,J){var ee=new ne(ie,J||this,!0),se=j?j+oe:oe;if(!this._events[se])this._events[se]=ee,this._eventsCount++;else if(!this._events[se].fn)this._events[se].push(ee);else this._events[se]=[this._events[se],ee];return this},ce.prototype.removeListener=function(oe,ie,J,ee){var se=j?j+oe:oe;if(!this._events[se])return this;if(!ie){if(--this._eventsCount===0)this._events=new q;else delete this._events[se];return this}var le=this._events[se];if(le.fn){if(le.fn===ie&&(!ee||le.once)&&(!J||le.context===J))if(--this._eventsCount===0)this._events=new q;else delete this._events[se]}else{for(var he=0,ue=[],Ae=le.length;he<Ae;he++)if(le[he].fn!==ie||ee&&!le[he].once||J&&le[he].context!==J)ue.push(le[he]);if(ue.length)this._events[se]=ue.length===1?ue[0]:ue;else if(--this._eventsCount===0)this._events=new q;else delete this._events[se]}return this},ce.prototype.removeAllListeners=function(oe){var ie;if(oe){if(ie=j?j+oe:oe,this._events[ie])if(--this._eventsCount===0)this._events=new q;else delete this._events[ie]}else this._events=new q,this._eventsCount=0;return this},ce.prototype.off=ce.prototype.removeListener,ce.prototype.addListener=ce.prototype.on,ce.prototype.setMaxListeners=function(){return this},ce.prefixed=j,ce.EventEmitter=ce,V.exports=ce});function u(V,W,j){if(W in V)Object.defineProperty(V,W,{value:j,enumerable:!0,configurable:!0,writable:!0});else V[W]=j;return V}var h=function(){},A={data:"state-data",cdata:"state-cdata",tagBegin:"state-tag-begin",tagName:"state-tag-name",tagEnd:"state-tag-end",attributeNameStart:"state-attribute-name-start",attributeName:"state-attribute-name",attributeNameEnd:"state-attribute-name-end",attributeValueBegin:"state-attribute-value-begin",attributeValue:"state-attribute-value"},m={lt:"action-lt",gt:"action-gt",space:"action-space",equal:"action-equal",quote:"action-quote",slash:"action-slash",char:"action-char",error:"action-error"},p={text:"text",openTag:"open-tag",closeTag:"close-tag",attributeName:"attribute-name",attributeValue:"attribute-value"},g={" ":m.space,"\t":m.space,"\n":m.space,"\r":m.space,"<":m.lt,">":m.gt,'"':m.quote,"'":m.quote,"=":m.equal,"/":m.slash},_=function(V){return g[V]||m.char},f=function(V){var W,j,q,ne,ce,oe,ie,J,ee,se;V=Object.assign({debug:!1},V);var le=new d,he=A.data,ue="",Ae="",_e="",Pe="",Ee="",Te="",be=function(ye,Ce){if(Ae[0]==="?"||Ae[0]==="!")return;var ve={type:ye,value:Ce};if(V.debug)console.log("emit:",ve);le.emit("data",ve)};le.stateMachine=(se={},u(se,A.data,(W={},u(W,m.lt,function(){if(ue.trim())be(p.text,ue);Ae="",Ee=!1,he=A.tagBegin}),u(W,m.char,function(ye){ue+=ye}),W)),u(se,A.cdata,u({},m.char,function(ye){if(ue+=ye,ue.substr(-3)==="]]>")be(p.text,ue.slice(0,-3)),ue="",he=A.data})),u(se,A.tagBegin,(j={},u(j,m.space,h),u(j,m.char,function(ye){Ae=ye,he=A.tagName}),u(j,m.slash,function(){Ae="",Ee=!0}),j)),u(se,A.tagName,(q={},u(q,m.space,function(){if(Ee)he=A.tagEnd;else he=A.attributeNameStart,be(p.openTag,Ae)}),u(q,m.gt,function(){if(Ee)be(p.closeTag,Ae);else be(p.openTag,Ae);ue="",he=A.data}),u(q,m.slash,function(){he=A.tagEnd,be(p.openTag,Ae)}),u(q,m.char,function(ye){if(Ae+=ye,Ae==="![CDATA[")he=A.cdata,ue="",Ae=""}),q)),u(se,A.tagEnd,(ne={},u(ne,m.gt,function(){be(p.closeTag,Ae),ue="",he=A.data}),u(ne,m.char,h),ne)),u(se,A.attributeNameStart,(ce={},u(ce,m.char,function(ye){_e=ye,he=A.attributeName}),u(ce,m.gt,function(){ue="",he=A.data}),u(ce,m.space,h),u(ce,m.slash,function(){Ee=!0,he=A.tagEnd}),ce)),u(se,A.attributeName,(oe={},u(oe,m.space,function(){he=A.attributeNameEnd}),u(oe,m.equal,function(){be(p.attributeName,_e),he=A.attributeValueBegin}),u(oe,m.gt,function(){Pe="",be(p.attributeName,_e),be(p.attributeValue,Pe),ue="",he=A.data}),u(oe,m.slash,function(){Ee=!0,Pe="",be(p.attributeName,_e),be(p.attributeValue,Pe),he=A.tagEnd}),u(oe,m.char,function(ye){_e+=ye}),oe)),u(se,A.attributeNameEnd,(ie={},u(ie,m.space,h),u(ie,m.equal,function(){be(p.attributeName,_e),he=A.attributeValueBegin}),u(ie,m.gt,function(){Pe="",be(p.attributeName,_e),be(p.attributeValue,Pe),ue="",he=A.data}),u(ie,m.char,function(ye){Pe="",be(p.attributeName,_e),be(p.attributeValue,Pe),_e=ye,he=A.attributeName}),ie)),u(se,A.attributeValueBegin,(J={},u(J,m.space,h),u(J,m.quote,function(ye){Te=ye,Pe="",he=A.attributeValue}),u(J,m.gt,function(){Pe="",be(p.attributeValue,Pe),ue="",he=A.data}),u(J,m.char,function(ye){Te="",Pe=ye,he=A.attributeValue}),J)),u(se,A.attributeValue,(ee={},u(ee,m.space,function(ye){if(Te)Pe+=ye;else be(p.attributeValue,Pe),he=A.attributeNameStart}),u(ee,m.quote,function(ye){if(Te===ye)be(p.attributeValue,Pe),he=A.attributeNameStart;else Pe+=ye}),u(ee,m.gt,function(ye){if(Te)Pe+=ye;else be(p.attributeValue,Pe),ue="",he=A.data}),u(ee,m.slash,function(ye){if(Te)Pe+=ye;else be(p.attributeValue,Pe),Ee=!0,he=A.tagEnd}),u(ee,m.char,function(ye){Pe+=ye}),ee)),se);var me=function(ye){if(V.debug)console.log(he,ye);var Ce=le.stateMachine[he],ve=Ce[_(ye)]||Ce[m.error]||Ce[m.char];ve(ye)};return le.write=function(ye){var Ce=ye.length;for(var ve=0;ve<Ce;ve++)me(ye[ve])},le},y={State:A,Action:m,Type:p,create:f},x=y.Type,C={element:"element",text:"text"},I=function(V){return Object.assign({name:"",type:C.element,value:"",parent:null,attributes:{},children:[]},V)},b=function(V){V=Object.assign({stream:!1,parentNodes:!0,doneEvent:"done",tagPrefix:"tag:",emitTopLevelOnly:!1,debug:!1},V);var W=void 0,j=void 0,q=void 0,ne=void 0,ce=new d,oe=function(ie){switch(ie.type){case x.openTag:if(q===null)q=j,q.name=ie.value;else{var J=I({name:ie.value,parent:q});q.children.push(J),q=J}break;case x.closeTag:var ee=q.parent;if(!V.parentNodes)q.parent=null;if(q.name!==ie.value)break;if(V.stream&&ee===j)j.children=[],q.parent=null;if(!V.emitTopLevelOnly||ee===j)ce.emit(V.tagPrefix+q.name,q),ce.emit("tag",q.name,q);if(q===j)W.removeAllListeners("data"),ce.emit(V.doneEvent,q),j=null;q=ee;break;case x.text:if(q)q.children.push(I({type:C.text,value:ie.value,parent:V.parentNodes?q:null}));break;case x.attributeName:ne=ie.value,q.attributes[ne]="";break;case x.attributeValue:q.attributes[ne]=ie.value;break}};return ce.reset=function(){W=y.create({debug:V.debug}),W.on("data",oe),j=I(),q=null,ne="",ce.parse=W.write},ce.reset(),ce},P=function(V,W){W=Object.assign({},W,{stream:!1,tagPrefix:":"});var j=b(W),q=void 0;return j.on("done",function(ne){q=ne}),j.parse(V),q},E={parseSync:P,create:b,NodeType:C},B=E.parseSync,w=function(V){var W=B("<root>".concat(V,"</root>"),{parentNodes:!1}),j=W.children&&W.children.length>0&&W.children.every(function(q){return q.name==="svg"});if(j)return W.children.length===1?W.children[0]:W.children;else throw Error("nothing to parse")},T=function(V){return l(V,function(W){if(!N(W))return Q(W);return W})},Q=function(V){return V.replace(/[-|:]([a-z])/gi,function(W,j){return j.toUpperCase()})},N=function(V){return/^(data|aria)(-\w+)/.test(V)},F=function(V){if(V){var W=String(V);return/[&<>]/.test(W)?"<![CDATA[".concat(W.replace(/]]>/,"]]]]><![CDATA[>"),"]]>"):W}return""},H=function(V){return String(V).replace(/&/g,"&").replace(/'/g,"'").replace(/"/g,""").replace(/</g,"<").replace(/>/g,">")},z=function(V){var W=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},j=W.transformNode,q=j===void 0?function(ie){return ie}:j,ne=W.camelcase,ce=ne===void 0?!1:ne,oe=function(ie){var J=q(ie);if(ce)J=T(J);return J};return oe(w(V))};function Y(){for(var V=arguments.length,W=Array(V),j=0;j<V;j++)W[j]=arguments[j];return new Promise(function(q,ne){try{var ce=z.apply(void 0,W);q(ce)}catch(oe){ne(oe)}})}var U=function V(W){var j=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},q=j.transformAttr,ne=q===void 0?function(ue,Ae,_e){return"".concat(ue,'="').concat(_e(Ae),'"')}:q,ce=j.transformNode,oe=ce===void 0?function(ue){return ue}:ce,ie=j.selfClose,J=ie===void 0?!0:ie;if(Array.isArray(W))return W.map(function(ue){return V(ue,{transformAttr:ne,selfClose:J,transformNode:oe})}).join("");var ee=oe(W);if(ee.type==="text")return F(ee.value);var se="";for(var le in ee.attributes){var he=ne(le,ee.attributes[le],H,ee.name);se+=he?" ".concat(he):""}return ee.children&&ee.children.length>0||!J?"<".concat(ee.name).concat(se,">").concat(V(ee.children,{transformAttr:ne,transformNode:oe,selfClose:J}),"</").concat(ee.name,">"):"<".concat(ee.name).concat(se,"/>")},X=Object.assign({},{parse:Y,parseSync:z,stringify:U});return X})}),Qft={"0":"M0.301025 0.257813 L0.206593 0.283385 L0.122042 0.361307 L0.075923 0.474441 L0.064942 0.642221 L0.091296 0.78289 L0.159376 0.899463 L0.257104 0.961214 L0.344948 0.961214 L0.442678 0.899463 L0.510757 0.78289 L0.537111 0.642221 L0.526131 0.474441 L0.480012 0.361307 L0.39546 0.283385 L0.301025 0.257813","1":"M0.220426 0.40845 L0.381626 0.270996 L0.381626 0.948966","2":"M0.110409 0.39212 L0.125621 0.342293 L0.170571 0.295823 L0.244237 0.26431 L0.291518 0.257813 L0.373319 0.263799 L0.434683 0.290705 L0.468239 0.331966 L0.480292 0.379913 L0.479492 0.411806 L0.465088 0.465192 L0.402571 0.568988 L0.245134 0.766438 L0.07959 0.948045 L0.522462 0.948045","3":"M0.081606 0.345073 L0.119154 0.315633 L0.178996 0.284091 L0.255265 0.257813 L0.349133 0.263062 L0.43127 0.289348 L0.48994 0.336662 L0.525141 0.394491 L0.513407 0.457577 L0.466472 0.504892 L0.384334 0.541692 L0.290464 0.56272 L0.20833 0.573235 L0.290464 0.583749 L0.384334 0.610035 L0.466472 0.652092 L0.519274 0.709922 L0.531007 0.773007 L0.50754 0.841351 L0.454738 0.899179 L0.3726 0.946494 L0.310412 0.961214 L0.209503 0.959111 L0.127367 0.946494 L0.071046 0.929671","4":"M0.418494 0.270996 L0.048828 0.724199 L0.553224 0.724199 M0.414181 0.578167 L0.414181 0.94897","5":"M0.074951 0.270996 L0.074951 0.614701 L0.267655 0.5695 L0.405247 0.586502 L0.460002 0.617189 L0.498028 0.660731 L0.527101 0.779401 L0.513352 0.841049 L0.477274 0.889568 L0.406378 0.93463 L0.324445 0.958337 L0.247399 0.962139 L0.182516 0.949767 L0.130068 0.925508 L0.074951 0.875607 M0.074951 0.270996 L0.527101 0.270996","6":"M0.428549 0.257813 L0.341433 0.285053 L0.26073 0.312099 L0.192188 0.360182 L0.138902 0.410969 L0.098219 0.500422 L0.070249 0.584267 L0.067264 0.670716 L0.065164 0.756863 L0.087163 0.820973 L0.108168 0.861042 L0.157916 0.913131 L0.210981 0.948192 L0.29279 0.961214 L0.384548 0.956206 L0.456409 0.924151 L0.507262 0.881077 L0.5349 0.821975 L0.537111 0.771889 L0.521634 0.718798 L0.498418 0.67372 L0.463042 0.636657 L0.414398 0.613617 L0.34696 0.598591 L0.28284 0.595587 L0.215403 0.605604 L0.145756 0.641665 L0.109274 0.678729 L0.064942 0.724006","7":"M0.071534 0.270996 L0.530519 0.270996 L0.495935 0.291702 L0.477752 0.305407 L0.435186 0.346112 L0.412067 0.374136 L0.388565 0.40796 L0.365315 0.448098 L0.342943 0.495062 L0.322081 0.549366 L0.303364 0.611524 L0.287416 0.68205 L0.270077 0.80465 L0.26253 0.94897","8":"M0.286761 0.257813 L0.210684 0.27162 L0.1414 0.305622 L0.092494 0.382125 L0.111513 0.450128 L0.16857 0.502193 L0.228345 0.539382 L0.377781 0.594635 L0.470161 0.645637 L0.52586 0.706203 L0.538087 0.792269 L0.506841 0.87621 L0.438915 0.927212 L0.339743 0.961214 L0.263666 0.959089 L0.174004 0.929337 L0.102003 0.881523 L0.063965 0.811395 L0.066682 0.741266 L0.102003 0.671139 L0.180797 0.608448 L0.259591 0.580822 L0.358762 0.548945 L0.456576 0.49688 L0.486463 0.446941 L0.487822 0.362999 L0.453859 0.302434 L0.384574 0.265245 L0.286761 0.257813","9":"M0.511026 0.437812 L0.491026 0.347812 L0.451026 0.297812 L0.391026 0.267812 L0.311026 0.257813 L0.231026 0.267812 L0.161026 0.297812 L0.111026 0.347812 L0.091026 0.417812 L0.111026 0.487812 L0.161026 0.537812 L0.231026 0.567812 L0.311026 0.577812 L0.391026 0.557812 L0.451026 0.517812 L0.491026 0.477812 L0.511026 0.437812 M0.510026 0.438812 L0.434026 0.636812 L0.381026 0.777812 L0.337026 0.879812 L0.301026 0.957812","!":"M0.301026 0.270996 L0.301026 0.749566 M0.251466 0.94897 L0.350587 0.94897",'"':"M0.16504 0.270996 L0.16504 0.523022 M0.437013 0.270996 L0.437013 0.523022","#":"M0.20958 0.282227 L0.146515 0.949754 M0.461844 0.282227 L0.398779 0.949754 M0.032999 0.526969 L0.600587 0.452796 M0.001465 0.82366 L0.569055 0.749486",$:"M0.307121 0.240234 L0.307121 1.083502 M0.490031 0.415915 L0.404676 0.328075 L0.23396 0.310507 L0.136407 0.398347 L0.099828 0.521324 L0.124213 0.591596 L0.197379 0.644299 L0.429061 0.697003 L0.502224 0.749708 L0.526613 0.837547 L0.477836 0.960526 L0.355897 1.013228 L0.197379 0.99566 L0.112021 0.942957 L0.07544 0.837547","'":"M0.301026 0.270996 L0.301026 0.523022","(":"M0.413087 0.241211 L0.372337 0.28347 L0.331589 0.334184 L0.290838 0.393349 L0.25009 0.460965 L0.219528 0.528584 L0.199153 0.5962 L0.188966 0.655364 L0.199153 0.714529 L0.219528 0.782146 L0.25009 0.849764 L0.290838 0.91738 L0.331589 0.976544 L0.372337 1.027258 L0.413087 1.069491",")":"M0.188966 0.241211 L0.229716 0.28347 L0.270466 0.334184 L0.311213 0.393349 L0.351964 0.460965 L0.382526 0.528584 L0.4029 0.5962 L0.413087 0.655364 L0.4029 0.714529 L0.382526 0.782146 L0.351964 0.849764 L0.311213 0.91738 L0.270466 0.976544 L0.229716 1.027258 L0.188966 1.069491","*":"M0.301026 0.458702 L0.301026 0.681942 M0.301026 0.458702 L0.520997 0.536834 M0.301026 0.458702 L0.439954 0.257813 M0.301026 0.458702 L0.162098 0.257813 M0.301026 0.458702 L0.081055 0.536834","+":"M0.042969 0.66845 L0.559083 0.66845 M0.301023 0.428223 L0.301023 0.908661",",":"M0.38672 0.852051 L0.215333 1.030661 L0.301025 1.119971","-":"M0.173829 0.686035 L0.428224 0.686035",".":"M0.362549 0.851074 L0.239503 0.851074","/":"M0.062501 1.035249 L0.539551 0.270996","<":"M0.559083 0.441895 L0.042969 0.66939 L0.042969 0.66939 L0.559083 0.896902","=":"M0.042969 0.545898 L0.559083 0.545898 M0.042969 0.80837 L0.559083 0.80837",">":"M0.042969 0.441895 L0.559083 0.66939 L0.559083 0.66939 L0.042969 0.896902",A:"M0.018067 0.94897 L0.290179 0.270996 L0.583986 0.94897 M0.155303 0.684521 L0.433548 0.684521",B:"M0.063965 0.94897 L0.063965 0.278953 L0.209356 0.270996 L0.342486 0.294394 L0.432179 0.37292 L0.418224 0.48773 L0.312686 0.549166 L0.084728 0.575531 L0.306377 0.589434 L0.468877 0.647456 L0.538087 0.736658 L0.5324 0.85202 L0.501247 0.902983 L0.42355 0.944398 L0.063965 0.94897",C:"M0.529054 0.419847 L0.498425 0.345196 L0.442238 0.292341 L0.33583 0.257813 L0.257199 0.268357 L0.187906 0.303748 L0.120243 0.385432 L0.072998 0.599844 L0.110073 0.815385 L0.165381 0.902183 L0.222883 0.942801 L0.334904 0.961214 L0.43253 0.937679 L0.504816 0.868999 L0.529054 0.772065",D:"M0.064454 0.94897 L0.071838 0.285078 L0.171217 0.270996 L0.247348 0.272633 L0.37101 0.306078 L0.462461 0.378304 L0.514748 0.475555 L0.535591 0.576392 L0.537599 0.652313 L0.528065 0.717381 L0.508562 0.772419 L0.445948 0.855695 L0.362356 0.90871 L0.225203 0.945862 L0.064454 0.94897",E:"M0.080078 0.270996 L0.080078 0.94897 M0.080078 0.270996 L0.521974 0.270996 M0.080078 0.609981 L0.389405 0.609981 M0.080078 0.94897 L0.521974 0.94897",F:"M0.086426 0.270996 L0.086426 0.94897 M0.091304 0.275607 L0.515626 0.275607 M0.091304 0.607677 L0.447344 0.607677",G:"M0.498034 0.284943 L0.374621 0.257813 L0.244219 0.268648 L0.160577 0.311997 L0.094556 0.398116 L0.056397 0.58404 L0.076752 0.785532 L0.120865 0.858197 L0.188947 0.916734 L0.271008 0.953591 L0.357069 0.961214 L0.43715 0.932047 L0.501262 0.858539 L0.545656 0.648611 L0.329595 0.648131",H:"M0.066895 0.270996 L0.066895 0.94897 M0.066895 0.595658 L0.530009 0.595658 M0.535157 0.270996 L0.535157 0.94897",I:"M0.301026 0.270996 L0.301026 0.94897",J:"M0.506839 0.270996 L0.507814 0.782193 L0.498468 0.846168 L0.480733 0.880789 L0.455864 0.90832 L0.426095 0.929408 L0.360746 0.954812 L0.302508 0.962139 L0.223573 0.953638 L0.16538 0.930312 L0.137072 0.907715 L0.116428 0.880312 L0.102822 0.848819 L0.095633 0.813947 L0.094239 0.776413",K:"M0.035401 0.270996 L0.035401 0.94897 M0.502258 0.316194 L0.035401 0.687823 M0.212484 0.582361 L0.566652 0.933903",L:"M0.07544 0.270996 L0.07544 0.94897 L0.526613 0.94897",M:"M0.042481 0.94897 L0.042481 0.270996 L0.301027 0.712492 L0.559571 0.270996 L0.559571 0.94897",N:"M0.067871 0.94897 L0.067871 0.270996 L0.534181 0.94897 L0.525031 0.270996",O:"M0.287293 0.961214 L0.19843 0.933567 L0.1172 0.849451 L0.057129 0.563945 L0.114348 0.350255 L0.18455 0.289392 L0.306101 0.257813 L0.42054 0.29572 L0.487543 0.365003 L0.544923 0.625294 L0.516366 0.789624 L0.465476 0.884596 L0.375084 0.949287 L0.287293 0.961214",P:"M0.070557 0.94897 L0.070557 0.28379 L0.20704 0.270996 L0.329134 0.278993 L0.408525 0.300514 L0.444022 0.317908 L0.500637 0.368929 L0.525796 0.423728 L0.531496 0.50384 L0.508934 0.554205 L0.473724 0.582043 L0.417577 0.604365 L0.336375 0.620372 L0.226014 0.629268 L0.082368 0.630258",Q:"M0.282435 1.050813 L0.195447 1.019646 L0.115933 0.924817 L0.057129 0.602943 L0.113139 0.362034 L0.18186 0.293418 L0.300844 0.257813 L0.412868 0.300553 L0.478457 0.37866 L0.534625 0.672103 L0.506671 0.857367 L0.456855 0.964437 L0.368371 1.037368 L0.282435 1.050813 M0.341225 0.815559 L0.544923 1.070653",R:"M0.034912 0.944112 L0.034912 0.288556 L0.227127 0.270996 L0.362038 0.276867 L0.443423 0.294907 L0.477644 0.309614 L0.505809 0.328757 L0.526616 0.352817 L0.544963 0.418061 L0.543241 0.475921 L0.524463 0.517817 L0.49076 0.546518 L0.444265 0.564799 L0.355195 0.578739 L0.047653 0.589627 M0.303054 0.617306 L0.56714 0.94897",S:"M0.483037 0.364333 L0.407613 0.267477 L0.22883 0.257813 L0.128623 0.327565 L0.087712 0.455539 L0.104656 0.518727 L0.168054 0.573307 L0.41928 0.617318 L0.503796 0.669342 L0.535157 0.759324 L0.493846 0.900055 L0.367668 0.961214 L0.205436 0.956661 L0.116711 0.907038 L0.066895 0.790334",T:"M0.022949 0.270996 L0.579103 0.270996 M0.309284 0.270996 L0.309284 0.94897",U:"M0.072022 0.270996 L0.07308 0.648875 L0.080372 0.75167 L0.099024 0.827813 L0.134786 0.885729 L0.181571 0.924023 L0.251464 0.95168 L0.339655 0.962139 L0.401553 0.951668 L0.45232 0.924086 L0.482701 0.891771 L0.495745 0.870529 L0.515699 0.81637 L0.525014 0.744626 L0.530031 0.272017",V:"M0.027832 0.270996 L0.320083 0.94897 L0.57422 0.270996",W:"M0 0.270996 L0.079799 0.940377 L0.285198 0.472884 L0.505255 0.94897 L0.602052 0.270996",X:"M0.009034 0.270996 L0.586805 0.94897 M0.593019 0.270996 L0.015246 0.94897",Y:"M0.018067 0.270996 L0.293132 0.574135 M0.583986 0.271959 L0.294954 0.57606 L0.305277 0.94897",Z:"M0.053711 0.270996 L0.548341 0.270996 L0.053711 0.94897 L0.548341 0.94897","[":"M0.404542 0.240234 L0.197511 0.240234 L0.197511 1.069424 L0.404542 1.069424","\\":"M0.062501 0.270996 L0.539551 1.035249","]":"M0.19751 0.240234 L0.404542 0.240234 L0.404542 1.069424 L0.19751 1.069424","^":"M0.035156 0.523931 L0.301024 0.270996 L0.566896 0.523931",_:"M0 1.160601 L0.602052 1.160601",a:"M0.527101 0.439941 L0.527101 0.973965 M0.527101 0.553824 L0.451366 0.477535 L0.376759 0.439941 L0.263722 0.439941 L0.187989 0.477535 L0.112255 0.553824 L0.074951 0.66881 L0.074951 0.745099 L0.112255 0.85898 L0.187989 0.93527 L0.263722 0.973965 L0.376759 0.973965 L0.451366 0.93527 L0.527101 0.85898",b:"M0.07666 0.240234 L0.07666 0.959985 M0.07666 0.582737 L0.151822 0.514237 L0.225865 0.480483 L0.338045 0.480483 L0.413211 0.514237 L0.488374 0.582737 L0.525392 0.685983 L0.525392 0.754485 L0.488374 0.856739 L0.413211 0.92524 L0.338045 0.959985 L0.225865 0.959985 L0.151822 0.92524 L0.07666 0.856739",c:"M0.512452 0.553823 L0.441624 0.477535 L0.371854 0.439941 L0.26614 0.439941 L0.195312 0.477535 L0.124486 0.553823 L0.0896 0.668808 L0.0896 0.745099 L0.124486 0.858979 L0.195312 0.93527 L0.26614 0.973965 L0.371854 0.973965 L0.441624 0.93527 L0.512452 0.858979",d:"M0.525392 0.240234 L0.525392 0.959985 M0.525392 0.582737 L0.450232 0.514237 L0.376189 0.480483 L0.264006 0.480483 L0.188844 0.514237 L0.11368 0.582737 L0.076661 0.685983 L0.076661 0.754485 L0.11368 0.856739 L0.188844 0.92524 L0.264006 0.959985 L0.376189 0.959985 L0.450232 0.92524 L0.525392 0.856739",e:"M0.059571 0.668808 L0.542482 0.668808 M0.542482 0.592521 L0.502641 0.516231 L0.461594 0.477535 L0.381914 0.439941 L0.261186 0.439941 L0.180299 0.477535 L0.099412 0.553823 L0.059571 0.668808 L0.059571 0.745099 L0.099412 0.858979 L0.180299 0.93527 L0.261186 0.973965 L0.381914 0.973965 L0.461594 0.93527 L0.542482 0.858979",f:"M0.512941 0.240234 L0.406984 0.240234 L0.301026 0.274346 L0.248047 0.374731 L0.248047 0.946817 M0.089112 0.476088 L0.459965 0.476088",g:"M0.525392 0.439941 L0.525392 0.989395 L0.488373 1.091918 L0.45023 1.126757 L0.376189 1.160601 L0.264004 1.160601 L0.188844 1.126757 L0.113681 1.058075 L0.076661 0.954555 M0.525392 0.542467 L0.45023 0.473786 L0.376189 0.439941 L0.264004 0.439941 L0.188844 0.473786 L0.113681 0.542467 L0.076661 0.645988 L0.076661 0.714669 L0.113681 0.817193 L0.188844 0.885875 L0.264004 0.920713 L0.376189 0.920713 L0.45023 0.885875 L0.525392 0.817193",h:"M0.092041 0.240234 L0.092041 0.946817 M0.092041 0.61058 L0.205937 0.509225 L0.282214 0.476086 L0.396109 0.476086 L0.47187 0.509225 L0.510011 0.61058 L0.510011 0.946817",i:"M0.261026 0.240234 L0.341026 0.240234 M0.300978 0.476089 L0.300978 0.946817",j:"M0.3853 0.240234 L0.447023 0.240234 M0.416159 0.465708 L0.416159 1.011689 L0.383887 1.108586 L0.252832 1.140264 L0.15503 1.108586",k:"M0.065186 0.240234 L0.065186 0.946817 M0.493824 0.476086 L0.065186 0.812323 M0.236758 0.677829 L0.536867 0.946817",l:"M0.301026 0.234863 L0.301026 0.946441",m:"M0.050538 0.439941 L0.050538 0.960796 M0.050538 0.588758 L0.114405 0.476607 L0.157178 0.439941 L0.236864 0.439941 L0.279637 0.476607 L0.32241 0.588758 L0.32241 0.960796 M0.32241 0.588758 L0.386281 0.476607 L0.428467 0.439941 L0.50874 0.439941 L0.551515 0.476607 L0.551515 0.960796",n:"M0.092041 0.439941 L0.092041 0.960796 M0.092041 0.588758 L0.205936 0.476607 L0.282216 0.439941 L0.396113 0.439941 L0.471871 0.476607 L0.510011 0.588758 L0.510011 0.960796",o:"M0.247175 0.439941 L0.175178 0.477535 L0.103186 0.553823 L0.066895 0.668808 L0.066895 0.745099 L0.103186 0.858979 L0.175178 0.93527 L0.247175 0.973965 L0.354874 0.973965 L0.426872 0.93527 L0.498866 0.858979 L0.535157 0.745099 L0.535157 0.668808 L0.498866 0.553823 L0.426872 0.477535 L0.354874 0.439941 L0.247175 0.439941",p:"M0.076904 0.439941 L0.076904 1.154244 M0.076904 0.541563 L0.151986 0.473487 L0.225944 0.439941 L0.338005 0.439941 L0.413087 0.473487 L0.488166 0.541563 L0.525148 0.644169 L0.525148 0.712246 L0.488166 0.813866 L0.413087 0.881942 L0.338005 0.916471 L0.225944 0.916471 L0.151986 0.881942 L0.076904 0.813866",q:"M0.525148 0.441895 L0.525148 1.156195 M0.525148 0.5435 L0.450067 0.47544 L0.376106 0.441895 L0.264042 0.441895 L0.188966 0.47544 L0.113885 0.5435 L0.076905 0.646108 L0.076905 0.714187 L0.113885 0.815809 L0.188966 0.883886 L0.264042 0.918418 L0.376106 0.918418 L0.450067 0.883886 L0.525148 0.815809",r:"M0.107422 0.439941 L0.107422 0.960796 M0.107422 0.663164 L0.155824 0.551014 L0.252626 0.476607 L0.349428 0.439941 L0.49463 0.439941",s:"M0.475556 0.477535 L0.400757 0.439941 L0.276092 0.439941 L0.176361 0.477535 L0.101563 0.553823 L0.101563 0.630112 L0.176361 0.668808 L0.301024 0.668808 L0.425688 0.745099 L0.50049 0.821387 L0.50049 0.897677 L0.425688 0.93527 L0.325956 0.973965 L0.201295 0.973965 L0.126496 0.93527 L0.101563 0.858979",t:"M0.246032 0.297852 L0.246032 0.826549 L0.301023 0.919323 L0.411011 0.950848 L0.520997 0.950848 M0.081055 0.515799 L0.466004 0.515799",u:"M0.092041 0.454102 L0.092041 0.826134 L0.13018 0.937211 L0.205936 0.974954 L0.319832 0.974954 L0.396113 0.937211 L0.510011 0.826134 M0.510011 0.454102 L0.510011 0.974954",v:"M0.048828 0.453125 L0.301026 0.961719 M0.553224 0.453125 L0.301026 0.961719",w:"M0 0.453125 L0.150512 0.961719 M0.301024 0.453125 L0.150512 0.961719 M0.301024 0.453125 L0.451539 0.961719 M0.602052 0.453125 L0.451539 0.961719",x:"M0.03711 0.453125 L0.564943 0.961719 M0.564943 0.453125 L0.03711 0.961719",y:"M0.084618 0.453125 L0.320232 0.921476 M0.55713 0.453125 L0.320232 0.921476 L0.242119 1.055289 L0.163369 1.122196 L0.084618 1.155166 L0.044922 1.155166",z:"M0.505373 0.452148 L0.09668 0.961651 M0.09668 0.452148 L0.505373 0.452148 M0.09668 0.961651 L0.505373 0.961651"},kft={};for(let e in Qft){kft[e]=[];let t=Qft[e].split("M").slice(1).map((n)=>n.split("L").map((o)=>o.trim().split(" ").map(parseFloat)));for(let n of t)for(let o=0;o<n.length-1;o++)kft[e].push({x1:n[o][0],y1:1-n[o][1],x2:n[o+1][0],y2:1-n[o+1][1]})}var H9r=(()=>{let e=new Uint8Array(4),t=new Uint32Array(e.buffer);return!((t[0]=1)&e[0])})(),O9r={int8:globalThis.Int8Array,uint8:globalThis.Uint8Array,int16:globalThis.Int16Array,uint16:globalThis.Uint16Array,int32:globalThis.Int32Array,uint32:globalThis.Uint32Array,uint64:globalThis.BigUint64Array,int64:globalThis.BigInt64Array,float32:globalThis.Float32Array,float64:globalThis.Float64Array},m0o=[];for(let e=0;e<256;e++){let t=e;for(let n=0;n<8;n++)if(t&1)t=3988292384^t>>>1;else t=t>>>1;m0o[e]=t}var p0o=new Uint16Array([255]),A0o=new Uint8Array(p0o.buffer),z9r=A0o[0]===255,_0o=new Uint16Array([255]),g0o=new Uint8Array(_0o.buffer),G9r=g0o[0]===255,Y9r=new Uint8Array(0),V9r=Uint8Array.of(137,80,78,71,13,10,26,10),U9r=new TextDecoder("latin1"),{cos:W9r,sin:X9r,PI:K9r}=Math,{tan:j9r}=Math,q9r=d0o(h0o(),1);function $we(e,t){if(e.points)for(let n of e.points)n.step=t;if(e.lines)for(let n of e.lines)n.step=t;if(e.infiniteLines)for(let n of e.infiniteLines)n.step=t;if(e.polygons)for(let n of e.polygons)n.step=t;if(e.rects)for(let n of e.rects)n.step=t;if(e.circles)for(let n of e.circles)n.step=t;if(e.texts)for(let n of e.texts)n.step=t;return e}var e8e=class{MAX_ITERATIONS=1e5;solved=!1;failed=!1;iterations=0;progress=0;error=null;activeSubSolver;failedSubSolvers;timeToSolve;stats={};_setupDone=!1;getSolverName(){return this.constructor.name}setup(){if(this._setupDone)return;this._setup(),this._setupDone=!0}_setup(){}step(){if(!this._setupDone)this.setup();if(this.solved)return;if(this.failed)return;this.iterations++;try{this._step()}catch(e){throw this.error=`${this.getSolverName()} error: ${e}`,this.failed=!0,e}if(!this.solved&&this.iterations>=this.MAX_ITERATIONS)this.tryFinalAcceptance();if(!this.solved&&this.iterations>=this.MAX_ITERATIONS)this.error=`${this.getSolverName()} ran out of iterations`,this.failed=!0;if("computeProgress"in this)this.progress=this.computeProgress()}_step(){}getConstructorParams(){throw Error("getConstructorParams not implemented")}getOutput(){return null}solve(){let e=Date.now();while(!this.solved&&!this.failed)this.step();let t=Date.now();this.timeToSolve=t-e}visualize(){return{lines:[],points:[],rects:[],circles:[]}}tryFinalAcceptance(){}preview(){return{lines:[],points:[],rects:[],circles:[]}}};function Zwe(e,t,n,o={}){return{solverName:e,solverClass:t,getConstructorParams:n,onSolved:o.onSolved}}var f0o=class extends e8e{startTimeOfStage={};endTimeOfStage={};timeSpentOnStage={};firstIterationOfStage={};currentPipelineStageIndex=0;inputProblem;pipelineOutputs={};constructor(e){super();this.inputProblem=e,this.MAX_ITERATIONS=1e6}_step(){let e=this.pipelineDef[this.currentPipelineStageIndex];if(!e){this.solved=!0;return}if(this.activeSubSolver){if(this.activeSubSolver.step(),this.activeSubSolver.solved){this.endTimeOfStage[e.solverName]=performance.now(),this.timeSpentOnStage[e.solverName]=this.endTimeOfStage[e.solverName]-this.startTimeOfStage[e.solverName];let n=this.activeSubSolver.getOutput();if(n!==null)this.pipelineOutputs[e.solverName]=n;e.onSolved?.(this),this.activeSubSolver=null,this.currentPipelineStageIndex++}else if(this.activeSubSolver.failed)this.error=this.activeSubSolver?.error,this.failed=!0,this.activeSubSolver=null;return}let t=e.getConstructorParams(this);this.activeSubSolver=new e.solverClass(...t),this[e.solverName]=this.activeSubSolver,this.timeSpentOnStage[e.solverName]=0,this.startTimeOfStage[e.solverName]=performance.now(),this.firstIterationOfStage[e.solverName]=this.iterations}solveUntilStage(e){while(this.getCurrentStageName().toLowerCase()!==e.toLowerCase())if(this.step(),this.failed||this.solved)break}getCurrentStageName(){return this.pipelineDef[this.currentPipelineStageIndex]?.solverName??"none"}getStageProgress(){let e=this.pipelineDef.length;if(e===0)return 1;let t=this.activeSubSolver?.progress??0;return(this.currentPipelineStageIndex+t)/e}getStageStats(){let e={};for(let t of this.pipelineDef){let n=this.timeSpentOnStage[t.solverName]||0,o=this.firstIterationOfStage[t.solverName]||0,i=this.iterations,r=t.solverName===this.getCurrentStageName()?i-o:0,s=this.currentPipelineStageIndex>this.pipelineDef.findIndex((a)=>a.solverName===t.solverName);e[t.solverName]={timeSpent:n,iterations:r,completed:s}}return e}initialVisualize(){return null}finalVisualize(){return null}visualize(){if(!this.solved&&this.activeSubSolver)return this.activeSubSolver.visualize();let e=0,t=this.initialVisualize();if(t)$we(t,0),e=1;let n=null;if(this.solved)n=this.finalVisualize();let o=[t].filter(Boolean).concat(this.pipelineDef.map((i,r)=>{let s=this[i.solverName]?.visualize();if(!s)return null;return $we(s,r+e),s}).filter(Boolean));if(o.length===0)return{points:[],rects:[],lines:[],circles:[],texts:[]};if(this.solved&&n)$we(n,o.length+e+1),o.push(n);if(o.length===1)return o[0];return{points:o.flatMap((i)=>i.points||[]),rects:o.flatMap((i)=>i.rects||[]),lines:o.flatMap((i)=>i.lines||[]),circles:o.flatMap((i)=>i.circles||[]),texts:o.flatMap((i)=>i.texts||[])}}preview(){if(this.activeSubSolver)return this.activeSubSolver.preview();return super.preview()}computeProgress(){return this.getStageProgress()}getStageOutput(e){return this.pipelineOutputs[e]}getAllOutputs(){return{...this.pipelineOutputs}}hasStageOutput(e){return e in this.pipelineOutputs}getSolver(e){return this[e]}};function Lft(e,t){if(e.route_type==="through_pad")return t?e.end:e.start;return{x:e.x,y:e.y}}function e7e(e,t){if(e.route_type==="wire")return e.layer;if(e.route_type==="via")return t?e.to_layer:e.from_layer;return t?e.end_layer:e.start_layer}function y0o(e){let t=new Set;for(let o of e){if(o.type!=="source_bus")continue;if(o.max_length_skew===void 0&&o.target_length===void 0&&!o.length_match_source_trace_ids?.length)continue;for(let i of o.source_trace_ids)t.add(i);for(let i of o.length_match_source_trace_ids??[])t.add(i)}let n=[];for(let[o,i]of e.entries()){if(i.type!=="pcb_trace")continue;for(let r=0;r<i.route.length-1;r++){let s=i.route[r],a=i.route[r+1],c=(m)=>["wire","via","through_pad"].includes(m.route_type);if(!c(s)||!c(a))throw Error(i.pcb_trace_id+": unsupported route point at "+r);if(s.route_type!=="wire"&&a.route_type!=="wire")continue;if(e7e(s,!0)!==e7e(a,!1))continue;let l=Lft(s,!0),d=Lft(a,!1);if(![l.x,l.y,d.x,d.y].every(Number.isFinite))throw Error(i.pcb_trace_id+": nonfinite route coordinates at "+r);let u=Math.hypot(d.x-l.x,d.y-l.y);if(u<=0.000000001)continue;let h=s.route_type==="wire"?s:a,A=h.route_type==="wire"?Math.max(h.width,h.end_width??h.width):0;if(!Number.isFinite(A)||A<=0)throw Error(i.pcb_trace_id+": invalid wire width at "+r);n.push({pcbTraceId:i.pcb_trace_id,sourceTraceId:i.source_trace_id,pcbGroupId:i.pcb_group_id,subcircuitId:i.subcircuit_id,circuitJsonIndex:o,startRouteIndex:r,endRouteIndex:r+1,layer:e7e(s,!0),start:{...l},end:{...d},width:A,lengthMm:u})}}return{circuitJson:e,segments:n,lengthMatchedSourceTraceIds:t}}function x0o(e){return e.map((t)=>({issue:t,color:"#ff5555",message:t.message}))}function sY(e,t){let n=x0o(t);return{coordinateSystem:"cartesian",lines:[...e.segments.map((o)=>({points:[o.start,o.end],strokeColor:o.layer==="bottom"?"#60a5fa":"#94a3b8",strokeWidth:o.width})),...n.flatMap(({issue:o,color:i,message:r})=>(o.constituentSegments??[o]).map((s)=>({points:[s.start,s.end],strokeColor:i,strokeWidth:Math.max(s.width*2,0.25),label:r})))],points:n.map(({issue:o,color:i,message:r},s)=>({...o.location,color:i,label:s+1+": "+r}))}}function C0o(e,t,n){let o=n.x-t.x,i=n.y-t.y,r=o*o+i*i,s=r?Math.max(0,Math.min(1,((e.x-t.x)*o+(e.y-t.y)*i)/r)):0;return Math.hypot(e.x-t.x-s*o,e.y-t.y-s*i)}function f1t(e){let t=[],n=(o)=>{let i=[[0,o.length-1]];while(i.length){let[r,s]=i.pop();if(r===s)continue;let a=o[r].start,c=o[s].end,l=1/0,d=-1,u=r;for(let A=r;A<=s;A++){if(l=Math.min(l,o[A].width),A===s)continue;let m=C0o(o[A].end,a,c);if(m>d)d=m,u=A}if(d>l/2+0.000000001){i.push([u+1,s],[r,u]);continue}let h=o.slice(r,s+1);t.push({...o[r],endRouteIndex:o[s].endRouteIndex,end:c,width:h.reduce((A,m)=>Math.max(A,m.width),0),lengthMm:Math.hypot(c.x-a.x,c.y-a.y),constituentSegments:h,maxCenterlineDeviationMm:d<=0.000000001?0:d})}};for(let o of y1t(e))n(o);return[...e.segments.filter((o)=>!t8e(e,o)),...t]}function t8e(e,t){return t.sourceTraceId!==void 0&&(e.lengthMatchedSourceTraceIds?.has(t.sourceTraceId)??!1)}function y1t(e){let t=[],n=[];for(let o of e.segments){if(t8e(e,o)){if(n.length)t.push(n);n=[];continue}let i=n.at(-1);if(i){let r=e.circuitJson[o.circuitJsonIndex];if(!(i.circuitJsonIndex===o.circuitJsonIndex&&r.type==="pcb_trace"&&r.route.slice(i.endRouteIndex,o.startRouteIndex+1).every((s)=>s.route_type==="wire"&&s.layer===o.layer))||i.layer!==o.layer||Math.hypot(i.end.x-o.start.x,i.end.y-o.start.y)>0.000000001)t.push(n),n=[]}n.push(o)}if(n.length)t.push(n);return t}var I0o=class extends e8e{params;segments=[];nextSegment=0;candidates;constructor(e){super();if(this.params=e,!Number.isFinite(e.maxSegmentLengthMm)||e.maxSegmentLengthMm<=0)throw Error("maxSegmentLengthMm must be finite and positive");this.candidates=f1t(e.ctx),this.MAX_ITERATIONS=this.candidates.length+2}_step(){let e=this.candidates[this.nextSegment++];if(!e){this.solved=!0,this.progress=1;return}if(e.lengthMm>this.params.maxSegmentLengthMm)this.segments.push(e);this.progress=this.nextSegment/this.candidates.length,this.stats={segmentsChecked:this.nextSegment,candidateCount:this.segments.length}}getOutput(){return this.segments}visualize(){return sY(this.params.ctx,[])}getConstructorParams(){return[this.params]}};function x1t(e,t){let{start:n,end:o}=e,i=(e.constituentSegments??[e]).reduce((r,s)=>({minX:Math.min(r.minX,s.start.x-s.width/2,s.end.x-s.width/2),minY:Math.min(r.minY,s.start.y-s.width/2,s.end.y-s.width/2),maxX:Math.max(r.maxX,s.start.x+s.width/2,s.end.x+s.width/2),maxY:Math.max(r.maxY,s.start.y+s.width/2,s.end.y+s.width/2)}),{minX:1/0,minY:1/0,maxX:-1/0,maxY:-1/0});return{...e,issueId:t+":"+e.circuitJsonIndex+":"+e.startRouteIndex,severity:"error",message:"",location:{x:(n.x+o.x)/2,y:(n.y+o.y)/2},bounds:i}}var C1t=class extends e8e{ctx;issues=[];nextSegment=0;constructor(e){super();this.ctx=e,this.MAX_ITERATIONS=e.segments.length+2}_step(){let e=this.ctx.segments[this.nextSegment++];if(!e){this.solved=!0,this.progress=1;return}let t=this.checkSegment(e);if(t)this.issues.push(t);this.progress=this.nextSegment/this.ctx.segments.length,this.stats={segmentsChecked:this.nextSegment,issueCount:this.issues.length}}getOutput(){return this.issues}visualize(){return sY(this.ctx,this.issues)}},b0o=class extends C1t{params;constructor(e){super({...e.ctx,segments:e.candidateSegments??f1t(e.ctx)});if(this.params=e,!Number.isFinite(e.maxSegmentLengthMm)||e.maxSegmentLengthMm<=0)throw Error("maxSegmentLengthMm must be finite and positive");if(!Number.isFinite(e.angleToleranceDegrees)||e.angleToleranceDegrees<0||e.angleToleranceDegrees>=22.5)throw Error("angleToleranceDegrees must be in [0, 22.5)");let t=new Set;for(let n of this.ctx.segments){if(!n.constituentSegments||!this.checkSegment(n))continue;for(let o of n.constituentSegments)t.add(o.circuitJsonIndex+":"+o.startRouteIndex)}this.ctx={...this.ctx,segments:this.ctx.segments.filter((n)=>n.constituentSegments||!t.has(n.circuitJsonIndex+":"+n.startRouteIndex))}}checkSegment(e){if(t8e(this.params.ctx,e))return;if(e.lengthMm<=this.params.maxSegmentLengthMm)return;let t=(Math.atan2(e.end.y-e.start.y,e.end.x-e.start.x)*180/Math.PI+360)%360,n=Math.round(t/45)*45,o=Math.abs(t-n),i=Math.atan2(2*(e.maxCenterlineDeviationMm??0),e.lengthMm)*180/Math.PI;if(o<=this.params.angleToleranceDegrees+i+0.0000000001)return;return{...x1t(e,"odd-angle"),lineItemType:"PcbTraceSegmentOddAngle",maxSegmentLengthMm:this.params.maxSegmentLengthMm,angleDegrees:t,nearestAllowedAngleDegrees:n%360,deviationDegrees:o,angleToleranceDegrees:this.params.angleToleranceDegrees,...e.constituentSegments?{angleUncertaintyDegrees:i}:{},message:e.pcbTraceId+(e.constituentSegments?" run "+e.startRouteIndex+" → "+e.endRouteIndex:" segment "+e.startRouteIndex)+" on "+e.layer+" is "+e.lengthMm.toFixed(3)+" mm long (threshold "+this.params.maxSegmentLengthMm+" mm) and at "+t.toFixed(3)+"°; nearest allowed direction "+n%360+"° (deviation "+o.toFixed(3)+"°, tolerance "+this.params.angleToleranceDegrees+"°"+(i?", approximation allowance "+i.toFixed(3)+"°":"")+")"}}visualize(){return sY(this.params.ctx,this.issues)}getConstructorParams(){return[this.params]}};function S0o(e){return(Math.atan2(e.end.y-e.start.y,e.end.x-e.start.x)*180/Math.PI+360)%360}function t7e(e,t){return Math.abs((e-t+540)%360-180)}var P0o=class extends C1t{params;bendCounts=new Map;constructor(e){super({...e.ctx,segments:[]});this.params=e;let t=e.minStaircaseBends??6,n=e.minStaircaseLengthMm??2,o=e.maxStairStepLengthMm??1;if(!Number.isInteger(t)||t<2)throw Error("minStaircaseBends must be an integer of at least 2");if(!Number.isFinite(n)||n<=0)throw Error("minStaircaseLengthMm must be finite and positive");if(!Number.isFinite(o)||o<=0)throw Error("maxStairStepLengthMm must be finite and positive");let i=[];for(let r of y1t(e.ctx)){let s=[];for(let a of r){let c=S0o(a),l=s.at(-1);if(l&&t7e(l.direction,c)<=4.0000000001)l.parts.push(a),l.lengthMm+=a.lengthMm;else s.push({direction:c,parts:[a],lengthMm:a.lengthMm})}for(let a=0;a<s.length-1;){let c=s[a],l=s[a+1],d=t7e(c.direction,l.direction);if(d<14.9999999999||d>90.0000000001||c.lengthMm>o+0.000000001||l.lengthMm>o+0.000000001){a++;continue}let u=a+2;while(u<s.length&&t7e(s[u].direction,s[a+(u-a)%2].direction)<=4.0000000001&&s[u].lengthMm<=o+0.000000001)u++;let h=s.slice(a,u).flatMap((m)=>m.parts),A=h.reduce((m,p)=>m+p.lengthMm,0);if(u-a-1>=t&&A+0.000000001>=n){let m={...h[0],end:h.at(-1).end,endRouteIndex:h.at(-1).endRouteIndex,width:h.reduce((p,g)=>Math.max(p,g.width),0),lengthMm:A,constituentSegments:h};i.push(m),this.bendCounts.set(m,u-a-1),a=u}else a=u-1}}this.ctx={...e.ctx,segments:i},this.MAX_ITERATIONS=i.length+2}checkSegment(e){let t=this.bendCounts.get(e);return{...x1t(e,"staircase"),lineItemType:"PcbTraceStaircase",bendCount:t,minStaircaseBends:this.params.minStaircaseBends??6,minStaircaseLengthMm:this.params.minStaircaseLengthMm??2,maxStairStepLengthMm:this.params.maxStairStepLengthMm??1,message:`${e.pcbTraceId} route ${e.startRouteIndex} → ${e.endRouteIndex} on ${e.layer} has ${t} alternating staircase bends over ${e.lengthMm.toFixed(3)} mm`}}visualize(){return sY(this.params.ctx,this.issues)}getConstructorParams(){return[this.params]}},v0o=class extends f0o{options;ctx;pipelineDef=[Zwe("LongTraceSegmentSolver",I0o,(e)=>[{ctx:e.ctx,maxSegmentLengthMm:e.options.maxSegmentLengthMm??5}]),Zwe("OddAngleTraceSegmentSolver",b0o,(e)=>[{ctx:e.ctx,candidateSegments:e.getSolver("LongTraceSegmentSolver").getOutput(),maxSegmentLengthMm:e.options.maxSegmentLengthMm??5,angleToleranceDegrees:e.options.angleToleranceDegrees??4}]),Zwe("StaircaseTraceSolver",P0o,(e)=>[{ctx:e.ctx,minStaircaseBends:e.options.minStaircaseBends,minStaircaseLengthMm:e.options.minStaircaseLengthMm,maxStairStepLengthMm:e.options.maxStairStepLengthMm}])];constructor(e,t={}){super(e);if(this.options=t,t.issueTypes){let n=t.issueTypes.includes("PcbTraceSegmentOddAngle"),o=t.issueTypes.includes("PcbTraceStaircase");this.pipelineDef=this.pipelineDef.filter((i)=>i.solverName==="StaircaseTraceSolver"?o:n)}this.MAX_ITERATIONS=e.reduce((n,o)=>n+(o.type==="pcb_trace"?o.route.length*5:0),10)}_setup(){this.ctx=y0o(this.inputProblem)}getOutput(){return{issues:[...this.getSolver("OddAngleTraceSegmentSolver")?.getOutput()??[],...this.getSolver("StaircaseTraceSolver")?.getOutput()??[]]}}getConstructorParams(){return[this.inputProblem,this.options]}initialVisualize(){return this.setup(),sY(this.ctx,[])}finalVisualize(){return this.setup(),sY(this.ctx,this.getOutput().issues)}};function E0o(e,t={}){let n=new v0o(e,t);if(n.solve(),n.failed)throw Error(n.error??"PCB style analysis failed");return n.getOutput()}function M0o(e){return E0o(e,{issueTypes:["PcbTraceSegmentOddAngle"]}).issues.filter((t)=>t.lineItemType==="PcbTraceSegmentOddAngle").map((t)=>({type:"pcb_trace_style_warning",pcb_trace_style_warning_id:`pcb_trace_style_warning_${t.pcbTraceId}_${t.startRouteIndex}_${t.endRouteIndex}`,warning_type:"pcb_trace_style_warning",styling_issue_type:"long_segment_at_odd_angle",pcb_trace_id:t.pcbTraceId,source_trace_id:t.sourceTraceId,subcircuit_id:t.subcircuitId,layer:t.layer,start_route_index:t.startRouteIndex,end_route_index:t.endRouteIndex,segment_start:t.start,segment_end:t.end,center:t.location,segment_length:t.lengthMm,minimum_segment_length:t.maxSegmentLengthMm,angle_degrees:t.angleDegrees,nearest_allowed_angle_degrees:t.nearestAllowedAngleDegrees,angle_deviation_degrees:t.deviationDegrees,angle_tolerance_degrees:t.angleToleranceDegrees,message:`${t6(e,t.pcbTraceId)} has a ${t.lengthMm.toFixed(2)} mm segment on ${t.layer} at ${t.angleDegrees.toFixed(2)}°, ${t.deviationDegrees.toFixed(2)}° from the nearest allowed direction (${t.nearestAllowedAngleDegrees}°). Prefer a multiple of 45° for segments longer than ${t.maxSegmentLengthMm} mm (tolerance ${t.angleToleranceDegrees}°).`}))}function B0o(e,t,n){if(e.connected_source_port_ids.length!==2||!t.length)return;let o=e.connected_source_port_ids.map((g)=>n.filter((_)=>_.type==="pcb_port"&&_.source_port_id===g));if(o.some((g)=>g.length!==1))return;let i=new Map,r=new Set,s=[],a=(g,_)=>`${g.x.toFixed(6)},${g.y.toFixed(6)},${_}`,c=!0,l=(g,_,f,y,x)=>{if(![g.x,g.y,f.x,f.y,x].every(Number.isFinite)){c=!1;return}let C=a(g,_),I=a(f,y);if(C===I)return;let b=[C,I].sort().join("|");if(r.has(b)){c=!1;return}r.add(b);for(let[P,E,B,w]of[[C,g,_,I],[I,f,y,C]]){if(!i.has(P))i.set(P,{point:E,layer:B,edges:new Set});i.get(P).edges.add(w)}if(_===y){if(x<=0)c=!1;s.push({a:g,b:f,layer:_,width:x})}else if(Math.hypot(g.x-f.x,g.y-f.y)>0.000001)c=!1};for(let g of t)for(let _=0;_<g.route.length;_++){let f=g.route[_],y=g.route[_+1];if(f.route_type==="through_pad"||y?.route_type==="through_pad")return;if(f.route_type==="wire"&&f.width_interpolation_mode)return;if(f.route_type==="via")l(f,f.from_layer,f,f.to_layer,0);if(!y)continue;let x=f.route_type==="wire"?f.layer:f.to_layer,C=y.route_type==="wire"?y.layer:y.from_layer;if(x!==C){c=!1;continue}let I=f.route_type==="wire"?Math.max(f.width,f.end_width??f.width):y.route_type==="wire"?y.width:0;l(f,x,y,C,I)}for(let g of n.filter((_)=>_.type==="pcb_via")){let _=g.layers.filter((f)=>i.has(a(g,f)));if(_.length>2){c=!1;continue}if(_.length===2){let f=a(g,_[0]),y=a(g,_[1]);if(!r.has([f,y].sort().join("|")))l(g,_[0],g,_[1],0)}}if(!c||!s.length||[...i.values()].some((g)=>g.edges.size>2))return;let d=[...i.entries()].filter(([,g])=>g.edges.size===1);if(d.length!==2)return;let u=(g,_)=>g.layers.includes(_.layer)&&Math.hypot(g.x-_.point.x,g.y-_.point.y)<=0.00001,[h,A]=o.map((g)=>g[0]);if(!(u(h,d[0][1])&&u(A,d[1][1]))&&!(u(h,d[1][1])&&u(A,d[0][1])))return;let m=new Set,p=[d[0][0]];while(p.length){let g=p.pop();if(m.has(g))continue;m.add(g),p.push(...i.get(g).edges)}if(m.size!==i.size)return;return{length:s.reduce((g,_)=>g+Math.hypot(_.a.x-_.b.x,_.a.y-_.b.y),0),manhattan:Math.abs(h.x-A.x)+Math.abs(h.y-A.y),segments:s}}var JG=(e,t)=>e.x*t.x+e.y*t.y,ome=(e,t)=>({x:e.x-t.x,y:e.y-t.y});function w0o(e,t,n){let o=ome(e.b,e.a),i=ome(t.b,t.a),r=ome(e.a,t.a),s=JG(i,i);if(s===0)return[];let a=JG(r,i)/s,c=JG(o,i)/s,l=[0,1];if(Math.abs(c)>0.000000000000001){for(let u of[-a/c,(1-a)/c])if(u>0&&u<1)l.push(u)}l.sort((u,h)=>u-h);let d=[];for(let u=0;u<l.length-1;u++){let h=l[u],A=l[u+1],m=a+c*(h+A)/2,p=r,g=o;if(m>=1)p=ome(e.a,t.b);else if(m>0)p={x:r.x-i.x*a,y:r.y-i.y*a},g={x:o.x-i.x*c,y:o.y-i.y*c};let _=JG(g,g),f=2*JG(p,g),y=JG(p,p)-n*n;if(_<0.00000000000000000001){if(y<-0.000000000001)d.push([h,A]);continue}let x=f*f-4*_*y;if(x<=0)continue;let C=Math.sqrt(x),I=Math.max(h,(-f-C)/(2*_)),b=Math.min(A,(-f+C)/(2*_));if(b-I>0.0000000001)d.push([I,b])}return d}function T0o(e,t){let n=(r,s,a)=>(s.x-r.x)*(a.y-r.y)-(s.y-r.y)*(a.x-r.x),o=(r,s,a,c)=>Math.max(Math.min(r,s),Math.min(a,c))<=Math.min(Math.max(r,s),Math.max(a,c));if(o(e.a.x,e.b.x,t.a.x,t.b.x)&&o(e.a.y,e.b.y,t.a.y,t.b.y)&&n(e.a,e.b,t.a)*n(e.a,e.b,t.b)<=0&&n(t.a,t.b,e.a)*n(t.a,t.b,e.b)<=0)return 0;let i=(r,s)=>{let a=s.b.x-s.a.x,c=s.b.y-s.a.y,l=a*a+c*c,d=l?Math.max(0,Math.min(1,((r.x-s.a.x)*a+(r.y-s.a.y)*c)/l)):0;return Math.hypot(r.x-s.a.x-d*a,r.y-s.a.y-d*c)};return Math.min(i(e.a,t),i(e.b,t),i(t.a,e),i(t.b,e))}var TQ=0.00000001,I1t=(e)=>[e.length_match_source_trace_ids,e.min_length,e.max_length,e.target_length,e.length_tolerance,e.pcb_trace_spacing,e.pcb_spacing_to_other_signals,e.target_impedance_min,e.target_impedance_max,e.target_differential_impedance_min,e.target_differential_impedance_max].some((t)=>t!==void 0);function D0o(e){let t=[],n=e.filter((A)=>A.type==="source_bus"),o=new Map(e.filter((A)=>A.type==="source_trace").map((A)=>[A.source_trace_id,A])),i=e.filter((A)=>A.type==="pcb_trace"),r=new Map;for(let A of i){if(!A.source_trace_id)continue;let m=r.get(A.source_trace_id)??[];m.push(A),r.set(A.source_trace_id,m)}let s=new Map,a=(A)=>{if(!s.has(A)){let m=o.get(A);s.set(A,m&&B0o(m,r.get(A)??[],e))}return s.get(A)},c=[];for(let A of i)for(let m=0;m<A.route.length-1;m++){let p=A.route[m],g=A.route[m+1];if(p.route_type==="through_pad"||g.route_type==="through_pad")continue;let _=p.route_type==="wire"?p.layer:p.to_layer,f=g.route_type==="wire"?g.layer:g.from_layer,y=Math.max(p.route_type==="wire"?Math.max(p.width,p.end_width??p.width):0,g.route_type==="wire"?Math.max(g.width,g.end_width??g.width):0);if(_!==f||y<=0||![p.x,p.y,g.x,g.y,y].every(Number.isFinite))continue;c.push({trace:A,segment:{a:p,b:g,layer:_,width:y}})}let l=c.length?new cx(c.length):void 0,d=0;for(let{segment:A}of c)d=Math.max(d,A.width),l.add(Math.min(A.a.x,A.b.x),Math.min(A.a.y,A.b.y),Math.max(A.a.x,A.b.x),Math.max(A.a.y,A.b.y));l?.finish();let u=(A,m)=>typeof A==="number"?A:A.width_multiplier*m,h=new Set(n.filter((A)=>A.differential_pair).map((A)=>[A.differential_pair.positive_source_trace_id,A.differential_pair.negative_source_trace_id].sort().join("|")));for(let A of n){if(!I1t(A))continue;let m=[...new Set(A.source_trace_ids)],p=[...new Set([...m,...A.length_match_source_trace_ids??[]])],g=(P,E,B)=>({message:`${E?"Unverified ":""}bus ${ys(e,A.source_bus_id)}: ${B}`,source_bus_id:A.source_bus_id,source_trace_ids:P,pcb_trace_ids:P.flatMap((w)=>(r.get(w)??[]).map((T)=>T.pcb_trace_id)),subcircuit_id:A.subcircuit_id}),_=(P,E,B=m[0])=>{t.push(Dce.parse({type:"pcb_bus_routing_constraint_warning",pcb_bus_routing_constraint_warning_id:`pcb_bus_routing_constraint_warning_${A.source_bus_id}_${t.length}`,...g([B],!0,E),routing_rule:P}))},f=(P,E,B=m[0])=>{let w=P.routing_rule==="length_skew"?p:[B];t.push(Tce.parse({type:"pcb_bus_routing_constraint_error",pcb_bus_routing_constraint_error_id:`pcb_bus_routing_constraint_error_${A.source_bus_id}_${t.length}`,...g(w,!1,E),...P}))},y=(P,E)=>{let B=P.find((w)=>!a(w));if(B)_(E,"a signal lacks complete, unbranched pad-to-pad geometry",B);return!B};if(A.max_length_skew!==void 0&&y(p,"route_geometry")){let P=p.map((B)=>a(B).length),E=Math.max(...P)-Math.min(...P);if(E>A.max_length_skew+TQ)f({routing_rule:"length_skew",actual_length_skew:E,maximum_length_skew:A.max_length_skew},`planar length skew is ${E.toFixed(3)} mm`,p[P.indexOf(Math.max(...P))])}let x=(P)=>{if(P===void 0||typeof P==="number")return P;let E=P.source_trace_ids??p;if(!E.length||!y(E,"reference_geometry"))return;return Math.max(...E.map((B)=>a(B).manhattan))+(P.offset??0)},C=x(A.min_length),I=x(A.max_length),b=x(A.target_length);if(A.target_length!==void 0&&A.length_tolerance===void 0)_("target_length","a target length requires an explicit length tolerance");else if(A.length_tolerance!==void 0&&A.target_length===void 0)_("target_length","a length tolerance requires an explicit target length");if([A.min_length,A.max_length,A.target_length].some((P)=>P!==void 0)&&y(m,"route_geometry"))for(let P of m){let E=a(P).length;if(C!==void 0&&E<C-TQ)f({routing_rule:"min_length",actual_trace_length:E,minimum_trace_length:C},"planar length is below the declared minimum",P);if(I!==void 0&&E>I+TQ)f({routing_rule:"max_length",actual_trace_length:E,maximum_trace_length:I},"planar length exceeds the declared maximum",P);if(b!==void 0&&A.length_tolerance!==void 0&&Math.abs(E-b)>A.length_tolerance+TQ)f({routing_rule:"target_length",actual_trace_length:E,target_trace_length:b,length_tolerance:A.length_tolerance},"planar length is outside the target tolerance",P)}for(let P of m){if(A.pcb_trace_spacing===void 0&&A.pcb_spacing_to_other_signals===void 0)break;let E=a(P);if(!E){_("spacing_geometry","spacing requires supported route geometry",P);continue}let B=new Set;for(let w of E.segments){let T=Math.max(...[A.pcb_trace_spacing,A.pcb_spacing_to_other_signals].filter((Q)=>Q!==void 0).map((Q)=>u(Q,Math.max(w.width,d))));for(let Q of l?.search(Math.min(w.a.x,w.b.x)-T,Math.min(w.a.y,w.b.y)-T,Math.max(w.a.x,w.b.x)+T,Math.max(w.a.y,w.b.y)+T)??[]){let{trace:N,segment:F}=c[Q],H=N.source_trace_id;if(P===H||w.layer!==F.layer||H&&h.has([P,H].sort().join("|")))continue;if(H&&o.get(P)?.connected_source_net_ids.some((X)=>o.get(H)?.connected_source_net_ids.includes(X)))continue;let z=H!==void 0&&m.includes(H),Y=z?A.pcb_trace_spacing:A.pcb_spacing_to_other_signals;if(Y===void 0)continue;let U=u(Y,Math.max(w.width,F.width));if(w0o(w,F,U-TQ).length){let X=z?"pcb_trace_spacing":"pcb_spacing_to_other_signals";if(!B.has(X))f({routing_rule:X,other_pcb_trace_id:N.pcb_trace_id,other_source_trace_id:H,actual_centerline_spacing:T0o(w,F),minimum_centerline_spacing:U},`${ys(e,P)} falls below declared centreline spacing`,P);B.add(X)}}}}for(let[P,E,B]of[[A.target_impedance,A.target_impedance_min,A.target_impedance_max],[A.target_differential_impedance,A.target_differential_impedance_min,A.target_differential_impedance_max]]){if([P,E,B].every((w)=>w===void 0))continue;if(P!==void 0&&(E!==void 0&&P<E-TQ||B!==void 0&&P>B+TQ))f({routing_rule:"impedance_target",target_impedance:P,minimum_impedance:E,maximum_impedance:B},"declared impedance target is outside its bounds");_("physical_impedance","actual impedance requires physical stackup analysis; declared targets are not measured impedance")}}return t}var N0o=(e)=>{let t=e.filter((i)=>i.type==="source_bus"),n=o1t(e),o=[];for(let i of t){if(i.max_length_skew===void 0||I1t(i))continue;let r=[...new Set(i.source_trace_ids)].flatMap((a)=>{let c=n.get(a)?.filter((l)=>l.trace_length!==void 0||l.route.length>1);if(!c?.length)return[];return[{id:a,traces:c,length:c.reduce((l,d)=>l+n1t(d),0)}]});if(r.length<2)continue;let s=Math.max(...r.map((a)=>a.length))-Math.min(...r.map((a)=>a.length));if(s<=i.max_length_skew+0.000000001)continue;o.push({type:"pcb_bus_length_skew_error",pcb_bus_length_skew_error_id:`pcb_bus_length_skew_error_${i.source_bus_id}`,error_type:"pcb_bus_length_skew_error",message:`PCB bus ${ys(e,i.source_bus_id)} has ${s.toFixed(2)}mm length skew, exceeding the ${i.max_length_skew}mm maximum`,source_bus_id:i.source_bus_id,source_trace_ids:r.map((a)=>a.id),pcb_trace_ids:r.flatMap((a)=>a.traces.map((c)=>c.pcb_trace_id)),actual_length_skew:s,maximum_length_skew:i.max_length_skew,subcircuit_id:i.subcircuit_id})}return o};function lY(e,t){let n=new Map,o=new Map;for(let l of e){let d=pa(l);if(o.set(d,l),"pcb_component_id"in l&&l.pcb_component_id)n.set(d,l.pcb_component_id)}let i=t.flatMap((l)=>l.type==="pcb_footprint_overlap_error"?l.related_errors??[l]:[l]),r=new Map,s=new Map;for(let l of i){let d;if(l.type==="pcb_footprint_overlap_error"){if(l.pcb_keepout_ids?.length)continue;let A=l,m=[...l.pcb_smtpad_ids??[],...l.pcb_plated_hole_ids??[],...l.pcb_hole_ids??[]];if(m.some((p)=>!n.has(p)))continue;d=A.pcb_component_ids??m.map((p)=>n.get(p))}else if(l.type==="pcb_pad_pad_clearance_error"){if(l.pcb_pad_ids.some((A)=>!n.has(A)))continue;d=l.pcb_pad_ids.map((A)=>n.get(A))}else if(l.type==="pcb_courtyard_overlap_error")d=l.pcb_component_ids;else continue;if(d=[...new Set(d)].sort(),d.length!==2)continue;let u=JSON.stringify(d);s.set(l,u);let h=r.get(u)??[];h.push(l),r.set(u,h)}let a=new Map;for(let[l,d]of r){let u=d.filter((f)=>f.type==="pcb_footprint_overlap_error");if(d.length<2||u.length===0)continue;let h=JSON.parse(l),A=h.map((f)=>{let y=o.get(f),x=y?.type==="pcb_component"?o.get(y.source_component_id):void 0;return x?.type==="source_component"?x.name:f}),p=[[u.length,"footprint overlap"],[d.filter((f)=>f.type==="pcb_pad_pad_clearance_error").length,"pad clearance violation"],[d.filter((f)=>f.type==="pcb_courtyard_overlap_error").length,"courtyard conflict"]].filter(([f])=>f>0).map(([f,y])=>`${f} ${y}${f===1?"":"s"}`),g={type:"pcb_footprint_overlap_error",error_type:"pcb_footprint_overlap_error",pcb_error_id:`pcb_component_overlap_${h.join("_")}`,pcb_component_ids:h,message:`${A.join(" overlaps ")}: ${p.join(", ")}. Move the components apart.`,related_errors:d};if(d.some((f)=>f.is_fatal))g.is_fatal=!0;let _=new Set;for(let f of d)if(f.type==="pcb_footprint_overlap_error")for(let y of[...f.pcb_smtpad_ids??[],...f.pcb_plated_hole_ids??[],...f.pcb_hole_ids??[]])_.add(y);else if(f.type==="pcb_pad_pad_clearance_error")for(let y of f.pcb_pad_ids)_.add(y);for(let[f,y]of[["pcb_smtpad_ids","pcb_smtpad"],["pcb_plated_hole_ids","pcb_plated_hole"],["pcb_hole_ids","pcb_hole"]]){let x=[..._].filter((C)=>o.get(C)?.type===y).sort();if(x.length)g[f]=x}a.set(l,g)}let c=new Set;return i.flatMap((l)=>{let d=s.get(l),u=d===void 0?void 0:a.get(d);if(!u||d===void 0)return[l];if(c.has(d))return[];return c.add(d),[u]})}function R0o(e){let t=new Map,n=(s)=>{let a=s;while(t.has(a)&&t.get(a)!==a)a=t.get(a);while(t.has(s)&&t.get(s)!==a){let c=t.get(s);t.set(s,a),s=c}return a},o=(s)=>{if(s.length<2)return;let a=n(s[0]);for(let c of s.slice(1))t.set(n(c),a)},i=new Map;for(let s of e){if(s.type==="source_net"&&s.name.trim()){let a=i.get(s.name)??[];a.push(s),i.set(s.name,a)}if(s.type==="source_trace")o([...s.connected_source_net_ids.map((a)=>`net:${a}`),...s.connected_source_port_ids.map((a)=>`port:${a}`)]);if(s.type==="source_component_internal_connection")o(s.source_port_ids.map((a)=>`port:${a}`));if(s.type==="source_component")for(let a of s.internally_connected_source_port_ids??[])o(a.map((c)=>`port:${c}`))}let r=[];for(let[s,a]of i){let c=new Set(a.map((d)=>n(`net:${d.source_net_id}`)));if(c.size<2)continue;let l=a.map((d)=>d.source_net_id).sort();r.push({type:"source_confusing_net_name_warning",source_confusing_net_name_warning_id:`source_confusing_net_name_warning_${l[0]}`,warning_type:"source_confusing_net_name_warning",message:`Nets named "${s}" are not all connected (${c.size} separate electrical networks). Connect them or use distinct names to avoid confusion.`,source_net_ids:l,net_name:s,...a.every((d)=>d.subcircuit_id===a[0].subcircuit_id)?{subcircuit_id:a[0].subcircuit_id}:{}})}return r}function Q0o(e){switch(e.insertion_direction){case"from_left":return"x-";case"from_right":return"x+";case"from_top":return"y+";case"from_bottom":return"y-";case"from_above":case"from_below":return null;default:return null}}function k0o(e){if(e.insertion_direction)return Q0o(e);if(!e.center||!e.cable_insertion_center)return null;let t=e.cable_insertion_center.x-e.center.x,n=e.cable_insertion_center.y-e.center.y;if(Math.abs(t)<0.000001&&Math.abs(n)<0.000001)return null;if(Math.abs(t)>=Math.abs(n))return t>=0?"x+":"x-";return n>=0?"y+":"y-"}function L0o(e,t){if(!e.center)return null;let n=[{direction:"x-",distance:e.center.x-t.minX},{direction:"x+",distance:t.maxX-e.center.x},{direction:"y-",distance:e.center.y-t.minY},{direction:"y+",distance:t.maxY-e.center.y}];return n.sort((o,i)=>o.distance-i.distance),n[0]?.direction??null}function n8e(e){let t=e.find((s)=>s.type==="pcb_board");if(!t)return[];let n=(()=>{try{return Fct(t)}catch{return null}})();if(!n)return[];let o=[],i=e.filter((s)=>s.type==="pcb_component"),r=new Set(e.filter((s)=>s.type==="source_component"&&s.ftype==="simple_pin_header").map((s)=>s.source_component_id));for(let s of i){if(!s.insertion_direction&&r.has(s.source_component_id))continue;let a=k0o(s),c=L0o(s,n);if(!a||!c)continue;if(a===c)continue;let l=kQ(e,s.pcb_component_id),d=s.insertion_direction?`${l} is facing ${a} but should face ${c} so the connector is accessible from the board edge`:`${l} is inferred to face ${a} from its cable insertion center because no explicit footprint insertionDirection is defined, but should face ${c} so the connector is accessible from the board edge. Set insertionDirection on the <footprint> to specify the actual direction in the footprint's unrotated orientation; for example, <footprint insertionDirection="from_above"> for a connector accessed from above the PCB (+Z).`;o.push({type:"pcb_connector_not_in_accessible_orientation_warning",warning_type:"pcb_connector_not_in_accessible_orientation_warning",pcb_connector_not_in_accessible_orientation_warning_id:`pcb_connector_not_in_accessible_orientation_warning_${s.pcb_component_id}`,message:d,pcb_component_id:s.pcb_component_id,source_component_id:s.source_component_id,pcb_board_id:t.pcb_board_id,facing_direction:a,recommended_facing_direction:c,subcircuit_id:s.subcircuit_id})}return o}function Fft(e){if(e.type==="pcb_courtyard_rect"){let t=e.width/2,n=e.height/2,o=[{x:-t,y:-n},{x:+t,y:-n},{x:+t,y:+n},{x:-t,y:+n}],i=(e.ccw_rotation??0)*Math.PI/180,r=Math.cos(i),s=Math.sin(i);return o.map(({x:a,y:c})=>({x:e.center.x+a*r-c*s,y:e.center.y+a*s+c*r}))}if(e.type==="pcb_courtyard_circle")return Array.from({length:32},(n,o)=>{let i=2*Math.PI*o/32;return{x:e.center.x+e.radius*Math.cos(i),y:e.center.y+e.radius*Math.sin(i)}});return e.outline}function Hft(e,t){return kQ(e,t)}function F0o(e,t){if(e.some((n)=>mI(n,t)))return!0;if(t.some((n)=>mI(n,e)))return!0;for(let n=0;n<e.length;n++){let o=e[n],i=e[(n+1)%e.length];for(let r=0;r<t.length;r++){let s=t[r],a=t[(r+1)%t.length];if(DA(o,i,s,a))return!0}}return!1}function H0o(e){let t=new Set(e.flatMap((s)=>s.type==="pcb_component"&&s.do_not_place?[s.pcb_component_id]:[])),n=e.filter((s)=>s.type==="pcb_courtyard_rect"||s.type==="pcb_courtyard_circle"||s.type==="pcb_courtyard_outline").filter((s)=>!t.has(s.pcb_component_id)),o=new Map;for(let s of n){let a=s.pcb_component_id;if(!o.has(a))o.set(a,[]);o.get(a).push(s)}let i=Array.from(o.keys()),r=[];for(let s=0;s<i.length;s++)for(let a=s+1;a<i.length;a++){let c=i[s],l=i[a],d=!1;e:for(let u of o.get(c))for(let h of o.get(l)){if("layer"in u&&"layer"in h&&u.layer!==h.layer)continue;let A=Fft(u),m=Fft(h);if(F0o(A,m)){d=!0;break e}}if(d)r.push({type:"pcb_courtyard_overlap_error",pcb_error_id:`pcb_courtyard_overlap_${c}_${l}`,error_type:"pcb_courtyard_overlap_error",message:`Courtyard of ${Hft(e,c)} overlaps with courtyard of ${Hft(e,l)}`,pcb_component_ids:[c,l]})}return r}function O0o(e,{minClearance:t}={}){let n=t??$5(Z5(e),"min_trace_to_hole_edge_clearance")??Tg.min_trace_to_hole_edge_clearance;if(!Number.isFinite(n)||n<0)throw Error("Trace-to-hole clearance must be finite and non-negative");let o=Xft(e);if(o.length===0)return[];let i=new cY({objects:o,getId:(a)=>a.elementId,getBounds:(a)=>({minX:a.bounds.xmin,minY:a.bounds.ymin,maxX:a.bounds.xmax,maxY:a.bounds.ymax})}),r=new Map,s=new Set;for(let a of e){if(a.type!=="pcb_trace")continue;for(let c=1;c<a.route.length;c++){let l=a.route[c-1],d=a.route[c];if(l.route_type!=="wire"&&l.route_type!=="via"||d.route_type!=="wire"&&d.route_type!=="via")continue;if(l.route_type!=="wire"&&d.route_type!=="wire")continue;if(l.route_type==="wire"&&d.route_type==="wire"&&l.layer!==d.layer)continue;let u=Math.max(l.route_type==="wire"?l.width:0,d.route_type==="wire"?d.width:0)/2,h=i.getObjectsInBounds({minX:Math.min(l.x,d.x),minY:Math.min(l.y,d.y),maxX:Math.max(l.x,d.x),maxY:Math.max(l.y,d.y)},n+u);for(let A of h){let m=A.sourceElement;if(m.type!=="pcb_hole")continue;let{gap:p,center:g}=Kft({x1:l.x,y1:l.y,x2:d.x,y2:d.y,thickness:u*2},A),_=`${a.pcb_trace_id}_${m.pcb_hole_id}`;if(nY(p)){r.delete(_),s.add(_);continue}if(s.has(_))continue;if(p+0.000001>=n)continue;if((r.get(_)?.gap??1/0)<=p)continue;r.set(_,{gap:p,error:{type:"pcb_trace_error",error_type:"pcb_trace_error",pcb_trace_error_id:`overlap_${_}`,pcb_trace_id:a.pcb_trace_id,source_trace_id:a.source_trace_id??"",pcb_component_ids:m.pcb_component_id?[m.pcb_component_id]:[],pcb_port_ids:[],center:g,message:`Trace ${t6(e,a.pcb_trace_id)} is too close to non-plated hole ${ys(e,m.pcb_hole_id)} (gap: ${p.toFixed(6)}mm, required: ${n}mm)`}})}}}return Array.from(r.values(),({error:a})=>a)}var z0o=(e)=>e.type==="pcb_courtyard_circle"||e.type==="pcb_courtyard_outline"||e.type==="pcb_courtyard_polygon"||e.type==="pcb_courtyard_rect",G0o=(e,t)=>{if(t.type==="pcb_courtyard_circle"){let o=e.x-t.center.x,i=e.y-t.center.y;return o*o+i*i<=t.radius*t.radius}if(t.type==="pcb_courtyard_rect"){let o=-1*(t.ccw_rotation??0)*Math.PI/180,i=e.x-t.center.x,r=e.y-t.center.y,s=i*Math.cos(o)-r*Math.sin(o),a=i*Math.sin(o)+r*Math.cos(o);return Math.abs(s)<=t.width/2&&Math.abs(a)<=t.height/2}let n=t.type==="pcb_courtyard_polygon"?t.points:t.outline;return mI(e,n)},Y0o=(e,t)=>{let n=e.find((i)=>i.type==="pcb_component"&&i.pcb_component_id===t),o=e.find((i)=>i.type==="source_component"&&i.source_component_id===n?.source_component_id);return(o&&"name"in o?o.name:void 0)??kQ(e,t)};function V0o(e){let t=e.filter((c)=>c.type==="source_component"&&c.ftype==="simple_test_point"),n=new Set(t.map((c)=>c.source_component_id)),o=new Map(t.map((c)=>[c.source_component_id,c.name])),i=e.filter((c)=>c.type==="pcb_component"&&n.has(c.source_component_id)),r=e.filter(z0o),s=[],a=new Set;for(let c of i)for(let l of r){if(l.pcb_component_id===c.pcb_component_id)continue;if(l.layer!==c.layer)continue;if(!G0o(c.center,l))continue;let d=`${c.pcb_component_id}:${l.pcb_component_id}`;if(a.has(d))continue;a.add(d);let u=o.get(c.source_component_id)??"Test point",h=Y0o(e,l.pcb_component_id);s.push({type:"pcb_placement_error",pcb_placement_error_id:`testpoint_in_courtyard_${c.pcb_component_id}_${l.pcb_component_id}`,error_type:"pcb_placement_error",message:`Test point ${u} is not accessible because it is inside the courtyard of ${h}`,subcircuit_id:c.subcircuit_id})}return s}async function _me(e,{consolidateOverlaps:t=!0}={}){let n=[...Cuo(e),...hho(e),...vuo(e),...wuo(e),...Ruo(e),...kuo(e),...Duo(e),...eho(e),...nho(e),...sho(e),...H0o(e),...n8e(e),...V0o(e)];return t?lY(e,n):n}async function b1t(e){return[...mho(e),...pho(e),...R0o(e),...Aho(e)]}async function S1t(e){return[...xho(e),...bho(e),...Pho(e),...o0o(e)]}async function gme(e){y7e(e);let t={connMap:js(e),pcbConnectivityMap:f7e(e)};return[..._uo(e,t),...Yuo(e,t),...Guo(e),...Luo(e),...iho(e),...M0o(e),...N0o(e),...D0o(e),...rho(e),...fuo(e,t),...puo(e,t),...aho(e,t),...O0o(e),...cho(e,t),...lho(e,t),...Huo(e,t),...Ouo(e,t),...juo(e,t),...euo(e,t),...Juo(e)]}/*! Bundled license information:
@tscircuit/circuit-json-pcb-style-analysis/dist/index.js:
(*!
* Determine if an object is a Buffer
*
* @author Feross Aboukhadijeh <https://feross.org>
* @license MIT
*)
*/Gt();Gt();We();Gt();We();We();We();We();Gt();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();Gt();We();We();Gt();We();Gt();We();Gt();We();Gt();We();Gt();We();We();Gt();We();We();Gt();We();var J1t=Rt(lo(),1);We();We();Gt();We();We();Gt();We();We();We();We();We();Gt();We();We();We();We();We();We();We();We();We();We();Gt();We();Gt();We();Gt();We();Gt();We();We();We();We();Gt();We();Gt();We();We();We();Gt();We();Gt();We();We();We();We();We();Gt();We();Gt();We();Gt();We();Gt();We();Gt();We();Gt();We();Gt();We();Gt();We();var fyt=Rt(lo(),1);We();We();We();We();We();We();We();We();Gt();We();Gt();We();Gt();We();Gt();We();Gt();We();Gt();We();Gt();We();We();Gt();We();We();Gt();We();We();We();Gt();We();Gt();Gt();We();Gt();We();We();Gt();We();Gt();We();Gt();We();We();Gt();We();We();We();We();We();Gt();We();We();We();We();Gt();We();Gt();We();Gt();We();Gt();We();Gt();We();Gt();We();Gt();We();Gt();We();We();Gt();We();Gt();We();Gt();We();Gt();Gt();We();Gt();Gt();We();We();Gt();Gt();We();Gt();We();We();We();Gt();We();We();Gt();We();Gt();We();Gt();We();Gt();We();Gt();We();Gt();We();We();Gt();We();Gt();We();Gt();We();Gt();We();Gt();We();We();Gt();We();Gt();We();Gt();We();Gt();We();Gt();Gt();We();Gt();We();Gt();Gt();We();Gt();We();Gt();We();Gt();We();Gt();We();Gt();We();Gt();We();We();var cn=(e)=>{};cn("extra props b");cn("missing props b");cn(!0);cn("property a has mismatched types");var U0o=Zt(["up","down","left","right"]),Owr=Zt(["top-to-bottom","left-to-right","bottom-to-top","right-to-left"]);cn(!0);cn(!0);var W0o=Z().regex(/^calc\(.*\)$/),Bn=ze,Lm=W0o.or(ze),Y1t=at({shape:Be("pill"),width:Bn,height:Bn}),V1t=at({shape:Be("rect"),width:Bn,height:Bn}),U1t=at({shape:Be("circle"),radius:Bn}),Vwr=nl("shape",[Y1t,V1t,U1t]);cn(!0);var Au=Tq((e)=>{if(e&&typeof e==="object"&&"default"in e)return e.default;return e},Z()),$f=at({x:ze,y:ze,z:ze}),X0o=at({x:kn([He(),Z()]),y:kn([He(),Z()]),z:kn([He(),Z()])}),K0o=["x+","x-","y+","y-","z+","z-"],W1t=Zt(K0o),mx=at({rotationOffset:He().or(X0o).optional(),positionOffset:$f.optional(),modelOriginPosition:$f.optional(),modelBounds:at({min:$f,max:$f}).optional(),size:$f.optional(),modelUnitToMmScale:Bn.optional(),modelBoardNormalDirection:W1t.optional(),pcbRotationOffset:He().optional(),zOffsetFromSurface:Bn.optional(),showAsTranslucentModel:Ue().optional(),stepUrl:Au.optional()});cn(!0);var j0o=mx.extend({stlUrl:Au}),q0o=mx.extend({objUrl:Au,mtlUrl:Au.optional()}),J0o=mx.extend({gltfUrl:Au}),$0o=mx.extend({glbUrl:Au}),Z0o=mx.extend({stepUrl:Au}),emo=mx.extend({wrlUrl:Au}),tmo=mx.extend({jscad:Fa(_h())}),FQ=kn([Dnt(),Z().min(1),dc((e)=>e&&typeof e==="object"&&("type"in e)&&("props"in e)),j0o,q0o,J0o,$0o,Z0o,emo,tmo]);cn(!0);var X1t=at({name:Z().refine((e)=>e.trim().length>0,{message:"name cannot be empty"}),displayName:Z().optional(),model:Z().trim().min(1).optional(),modelUrl:Au.refine((e)=>e.trim().length>0,{message:"modelUrl cannot be empty"}).optional(),cadModel:FQ.optional(),children:dc().optional()}).refine((e)=>e.modelUrl===void 0||e.cadModel===void 0,{message:"Provide either modelUrl or cadModel, not both",path:["modelUrl"]}).refine((e)=>e.model===void 0||e.modelUrl===void 0&&e.cadModel===void 0,{message:"Provide only one of model, modelUrl, or cadModel",path:["model"]});cn(!0);var K1t=at({name:Z().trim().min(1),from:Z().trim().min(1),to:Z().trim().min(1),standard:Be("usb_c").optional(),model:Z().trim().min(1).optional()});cn(!0);var g8e=at({name:Z().trim().min(1),displayName:Z().optional(),model:Z().trim().min(1).optional(),modelUrl:Au.refine((e)=>e.trim().length>0,"modelUrl cannot be empty").optional(),cadModel:FQ.optional(),children:dc().optional()}).refine((e)=>[e.model,e.modelUrl,e.cadModel].filter((t)=>t!==void 0).length<=1,{message:"Provide only one of model, modelUrl, or cadModel",path:["model"]});cn(!0);var P1t=Z().trim().regex(/^[A-Za-z_][A-Za-z0-9_-]*(?:\.[A-Za-z_][A-Za-z0-9_-]*)+$/,"Expected a qualified reference surface, e.g. part.face"),nmo=g8e.and(at({mountedTo:P1t.optional(),fastenedTo:P1t.optional(),mountFace:Z().trim().min(1).optional(),mountGap:Bn.pipe(He().nonnegative().finite()).optional()})).superRefine((e,t)=>{if(e.mountedTo!==void 0&&e.fastenedTo!==void 0&&e.mountedTo!==e.fastenedTo)t.addIssue({code:jt.custom,path:["fastenedTo"],message:"mountedTo and fastenedTo must refer to the same surface"});if(e.mountedTo===void 0&&e.fastenedTo===void 0){for(let n of["mountFace","mountGap"])if(e[n]!==void 0)t.addIssue({code:jt.custom,path:[n],message:`${n} requires mountedTo or fastenedTo`})}}).transform(({fastenedTo:e,...t})=>{let n=t.mountedTo??e;return n===void 0?t:{...t,mountedTo:n}});cn(!0);var o8e=Bn.pipe(He().positive().finite()),e7r=nmo.and(at({diameter:o8e.optional(),length:o8e.optional(),threadPitch:o8e.optional(),headType:Zt(["socket","hex","pan","countersunk"]).optional()})).superRefine((e,t)=>{if([e.model,e.modelUrl,e.cadModel].some((o)=>o!==void 0)){for(let o of["diameter","length","threadPitch","headType"])if(e[o]!==void 0)t.addIssue({code:jt.custom,path:[o],message:"Bolt dimensions and headType are exclusive with CAD sources"})}else for(let o of["diameter","length"])if(e[o]===void 0)t.addIssue({code:jt.custom,path:[o],message:"Provide diameter and length, or an assembly CAD source"})}).transform((e)=>e.diameter===void 0?e:{...e,headType:e.headType??"socket"});cn(!0);var j1t=at({name:Z().optional(),model:Z().trim().min(1).optional(),modelUrl:Au.refine((e)=>e.trim().length>0,{message:"modelUrl cannot be empty"}).optional()}).refine((e)=>e.model===void 0||e.modelUrl===void 0,{message:"Provide either model or modelUrl, not both",path:["model"]});cn(!0);var i8e=Bn.pipe(He().finite()),v1t=Bn.pipe(He().positive().finite()),q1t=at({name:Z().trim().min(1).default("anchor"),shape:Be("rect").default("rect"),plane:Zt(["xy","xz","yz"]).default("xy"),normalDirection:Zt(["x+","x-","y+","y-","z+","z-"]).optional(),centerXOffset:i8e.default(0),centerYOffset:i8e.default(0),centerZOffset:i8e.default(0),width:v1t.optional(),height:v1t.optional()}).refine((e)=>e.width===void 0===(e.height===void 0),{message:"Provide width and height together",path:["width"]}).superRefine((e,t)=>{let n=e.plane==="xy"?"z":e.plane==="xz"?"y":"x";if(e.normalDirection&&e.normalDirection[0]!==n)t.addIssue({code:jt.custom,path:["normalDirection"],message:`normalDirection must be ${n}+ or ${n}- for plane ${e.plane}`})}).transform((e)=>({...e,normalDirection:e.normalDirection??(e.plane==="xy"?"z+":e.plane==="xz"?"y+":"x+")}));cn(!0);var $1t=at({name:Z().trim().min(1),displayName:Z().optional(),color:Z().trim().min(1).optional(),material:Zt(["pla","petg","nylon"]).optional(),children:dc().optional(),jscad:dc(J1t.isValidElement,"Expected jscad-fiber JSX").optional(),model:Z().trim().min(1).optional(),modelUrl:Au.refine((e)=>e.trim().length>0,"modelUrl cannot be empty").optional(),cadModel:FQ.optional(),mountedTo:Z().trim().regex(/^.+\.[^.]+$/,"Expected part.face").optional(),mountFace:Z().trim().min(1).optional(),mountGap:Bn.pipe(He().nonnegative().finite()).optional()}).superRefine((e,t)=>{if([e.jscad,e.model,e.modelUrl,e.cadModel].filter((n)=>n!==void 0).length!==1)t.addIssue({code:jt.custom,path:["jscad"],message:"Provide exactly one of jscad, model, modelUrl, or cadModel"});if(e.mountedTo===void 0!==(e.mountFace===void 0))t.addIssue({code:jt.custom,path:["mountFace"],message:"Provide mountedTo and mountFace together"});if(e.mountGap!==void 0&&e.mountedTo===void 0)t.addIssue({code:jt.custom,path:["mountGap"],message:"mountGap requires mountedTo"})});cn(!0);var Z1t=at({name:Z().refine((e)=>e.trim().length>0,{message:"name cannot be empty"}),displayName:Z().optional(),standard:Zt(["nema8","nema17","nema23"]).optional(),model:Z().trim().min(1).optional(),shaftFacingDirection:W1t.optional(),wireConnection:Z().optional(),mountedTo:Z().trim().regex(/^.+\.[^.]+$/,"Expected part.face").optional(),mountFace:Z().trim().min(1).optional(),mountGap:Bn.pipe(He().nonnegative().finite()).optional()}).superRefine((e,t)=>{if(e.mountedTo===void 0!==(e.mountFace===void 0))t.addIssue({code:jt.custom,message:"Provide mountedTo and mountFace together",path:["mountFace"]});if(e.mountGap!==void 0&&e.mountedTo===void 0)t.addIssue({code:jt.custom,message:"mountGap requires mountedTo",path:["mountGap"]});if(e.mountedTo!==void 0&&e.shaftFacingDirection!==void 0)t.addIssue({code:jt.custom,message:"Mounted motors derive shaft direction from the mating faces",path:["shaftFacingDirection"]});if(e.model!==void 0&&e.wireConnection!==void 0)t.addIssue({code:jt.custom,message:"Set wireConnection in the custom model string, or use standard",path:["wireConnection"]});if(e.standard===void 0&&e.model===void 0)t.addIssue({code:jt.custom,message:"Provide standard or model",path:["standard"]});if(e.standard!==void 0&&e.model!==void 0)t.addIssue({code:jt.custom,message:"Provide either standard or model, not both",path:["model"]})}).transform((e)=>e.mountedTo===void 0?{...e,shaftFacingDirection:e.shaftFacingDirection??"z+"}:e);cn(!0);var r8e=(e)=>Z().refine((t)=>t.trim().length>0,{message:`${e} cannot be empty`}),E1t=(e)=>Bn.refine((t)=>Number.isFinite(t)&&t>0,{message:`${e} must be a positive finite distance`}),eyt=at({name:r8e("name"),model:Z().trim().min(1).optional(),modelUrl:Au.refine((e)=>e.trim().length>0,{message:"modelUrl cannot be empty"}).optional(),connectsTo:r8e("connectsTo"),width:E1t("width").optional(),height:E1t("height").optional(),cadModel:r8e("cadModel").optional()}).superRefine((e,t)=>{if(e.model!==void 0&&(e.modelUrl!==void 0||e.cadModel!==void 0))t.addIssue({code:jt.custom,message:"Provide only one of model, modelUrl, or cadModel",path:["model"]});if(e.modelUrl!==void 0&&e.cadModel!==void 0)t.addIssue({code:jt.custom,message:"Provide either modelUrl or cadModel, not both",path:["modelUrl"]});let n=e.width!==void 0,o=e.height!==void 0;if(n!==o){t.addIssue({code:jt.custom,message:"width and height must be provided together",path:n?["height"]:["width"]});return}if(!n&&e.cadModel===void 0&&e.modelUrl===void 0&&e.model===void 0)t.addIssue({code:jt.custom,message:"provide width and height, model, cadModel, or modelUrl",path:[]})});cn(!0);var omo="[A-Za-z_][A-Za-z0-9_-]*(?:\\.[A-Za-z_][A-Za-z0-9_-]*)*",tyt="[A-Za-z_][A-Za-z0-9_-]*(?:\\.[A-Za-z_][A-Za-z0-9_-]*)+",imo=new RegExp(`^${tyt}$`),rmo=new RegExp(`^${omo}$`),smo=new RegExp(`^calc\\(\\s*(${tyt})\\s*(?:([+-])\\s*((?:\\d+(?:\\.\\d*)?|\\.\\d+))\\s*(degcw|degccw))?\\s*\\)$`),amo=Z().trim().superRefine((e,t)=>{if(imo.test(e))return;let n=smo.exec(e);if(!n){t.addIssue({code:jt.custom,message:"Expected a qualified mounting reference or calc(reference +/- Ndegcw|Ndegccw)"});return}if(n[3]!==void 0&&!Number.isFinite(Number(n[3])))t.addIssue({code:jt.custom,message:"Mount rotation angle must be finite"})}),cmo=dc((e)=>typeof e==="string",{message:"Expected a board edge or component identity path"}).transform((e)=>e.trim()).refine((e)=>rmo.test(e),{message:"Expected a board edge or component identity path"}),lmo=Zt(["top_layer_toward_mount_face","bottom_layer_toward_mount_face"]);var dmo=at({margin:Bn.optional(),widthDimensionOffset:Bn.optional(),heightDimensionOffset:Bn.optional(),depth:Bn.optional()}),s8e=dmo.shape,nyt=nl("shape",[Y1t.extend(s8e),V1t.extend(s8e),U1t.extend(s8e)]);cn(!0);var oyt=at({name:Z().optional(),boardRef:Z().min(1),width:Bn.optional(),height:Bn.optional(),depth:Bn.optional(),wallThickness:Bn.default("2mm"),floorThickness:Bn.optional(),lidThickness:Bn.optional(),boardClearance:Bn.optional(),standoffHeight:Bn.optional(),topHeadroom:Bn.optional(),lidLipDepth:Bn.optional(),disableCutouts:Ue().optional(),showHiddenEdges:Ue().optional()});cn(!0);var _I=Qt(Z().or(He()));cn(!0);var f8e=dc((e)=>!0),Zf=at({x:ze,y:ze}),y8e=Zf.extend({rotation:Ui.optional()});cn(!0);var iyt=at({size:Zf.optional(),thickness:ze.optional()});cn(!0);var umo=at({font:iyt.optional()});cn(!0);var fme=at({value:Z(),at:y8e.optional(),layer:Z().optional(),uuid:Z().optional(),hide:Ue().optional(),effects:umo.optional()});cn(!0);var hmo=at({Reference:fme.optional(),Value:fme.optional(),Datasheet:fme.optional(),Description:fme.optional()});cn(!0);var mmo=at({through_hole:Ue().optional(),smd:Ue().optional(),exclude_from_pos_files:Ue().optional(),exclude_from_bom:Ue().optional()});cn(!0);var pmo=at({name:Z(),type:Z(),shape:Z().optional(),at:y8e.optional(),size:Zf.optional(),drill:ze.optional(),layers:Qt(Z()).optional(),removeUnusedLayers:Ue().optional(),uuid:Z().optional()});cn(!0);var Amo=at({path:Z(),offset:$f.optional(),scale:$f.optional(),rotate:$f.optional()});cn(!0);var _mo=at({footprintName:Z().optional(),version:kn([He(),Z()]).optional(),generator:Z().optional(),generatorVersion:kn([He(),Z()]).optional(),layer:Z().optional(),properties:hmo.optional(),attributes:mmo.optional(),pads:Qt(pmo).optional(),embeddedFonts:Ue().optional(),model:Amo.optional()});cn(!0);var gmo=at({hide:Ue().optional()});cn(!0);var fmo=at({offset:ze.optional(),hide:Ue().optional()});cn(!0);var ymo=at({font:iyt.optional(),justify:kn([Z(),Qt(Z())]).optional(),hide:Ue().optional()});cn(!0);var LQ=at({value:Z(),id:kn([He(),Z()]).optional(),at:y8e.optional(),effects:ymo.optional()});cn(!0);var xmo=at({Reference:LQ.optional(),Value:LQ.optional(),Footprint:LQ.optional(),Datasheet:LQ.optional(),Description:LQ.optional(),ki_keywords:LQ.optional(),ki_fp_filters:LQ.optional()});cn(!0);var Cmo=at({symbolName:Z().optional(),extends:Z().optional(),pinNumbers:gmo.optional(),pinNames:fmo.optional(),excludeFromSim:Ue().optional(),inBom:Ue().optional(),onBoard:Ue().optional(),properties:xmo.optional(),embeddedFonts:Ue().optional()});cn(!0);var x8e=at({silkscreenFontSize:ze.optional(),viaPadDiameter:ze.optional(),viaHoleDiameter:ze.optional(),silkscreenTextPosition:kn([Zt(["centered","outside","none"]),at({offsetX:He(),offsetY:He()})]).optional(),silkscreenTextVisibility:Zt(["hidden","visible","inherit"]).optional()});cn(!0);var Imo=at({fontSize:fe.optional(),pcbX:Lm.optional(),pcbY:Lm.optional(),visibility:Zt(["hidden","visible","inherit"]).optional()}),ryt=Fa(Z(),Imo);cn(!0);var a8e=Zt(["i2c_sda","i2c_scl","spi_cs","spi_sck","spi_mosi","spi_miso","uart_tx","uart_rx"]),bmo=at({isInput:Ue().optional(),isOutput:Ue().optional(),isBidirectional:Ue().optional(),isPassive:Ue().optional(),canUseTriState:Ue().optional(),isUsingTriState:Ue().optional(),canUseOpenCollector:Ue().optional(),isUsingOpenCollector:Ue().optional(),canUseOpenEmitter:Ue().optional(),isUsingOpenEmitter:Ue().optional(),capabilities:Qt(a8e).optional(),activeCapabilities:Qt(a8e).optional(),activeCapability:a8e.optional(),providesPower:Ue().optional(),requiresPower:Ue().optional(),providesGround:Ue().optional(),requiresGround:Ue().optional(),providesVoltage:kn([Z(),He()]).optional(),requiresVoltage:kn([Z(),He()]).optional(),requiredVoltageTolerance:kn([He(),Z().trim().regex(/^(?:\d+(?:\.\d*)?|\.\d+)(?:[eE][+-]?\d+)?\s*%?$/,"Expected a tolerance fraction or percentage").transform((e)=>e.endsWith("%")?Number(e.slice(0,-1))/100:Number(e))]).pipe(He().finite().min(0).max(1)).optional(),doNotConnect:Ue().optional(),includeInBoardPinout:Ue().optional(),highlightColor:Z().optional(),mustBeConnected:Ue().optional(),canUseInternalPullup:Ue().optional(),isUsingInternalPullup:Ue().optional(),needsExternalPullup:Ue().optional(),canUseInternalPulldown:Ue().optional(),isUsingInternalPulldown:Ue().optional(),needsExternalPulldown:Ue().optional(),canUseOpenDrain:Ue().optional(),isUsingOpenDrain:Ue().optional(),canUsePushPull:Ue().optional(),isUsingPushPull:Ue().optional(),shouldHaveDecouplingCapacitor:Ue().optional(),recommendedDecouplingCapacitorCapacitance:kn([Z(),He()]).optional(),isGpio:Ue().optional()});cn(!0);var Smo=at({defaultPassiveSize:kn([Zt(["xs","sm","md"]),ze]).optional(),defaultCapacitorOrientation:Zt(["vertical","none"]).optional()});cn(!0);var Pmo=dc((e)=>!0),us=at({pcbX:Lm.optional(),pcbY:Lm.optional(),pcbLeftEdgeX:Lm.optional(),pcbRightEdgeX:Lm.optional(),pcbTopEdgeY:Lm.optional(),pcbBottomEdgeY:Lm.optional(),pcbOffsetX:ze.optional(),pcbOffsetY:ze.optional(),pcbRotation:Ui.optional(),pcbPositionAnchor:Z().optional(),pcbPositionMode:Zt(["relative_to_group_anchor","auto","relative_to_board_anchor","relative_to_component_anchor"]).optional(),shouldBeOnEdgeOfBoard:Ue().optional(),layer:bo.optional(),pcbMarginTop:ze.optional(),pcbMarginRight:ze.optional(),pcbMarginBottom:ze.optional(),pcbMarginLeft:ze.optional(),pcbMarginX:ze.optional(),pcbMarginY:ze.optional(),pcbStyle:x8e.optional(),pcbSx:ryt.optional(),pcbRelative:Ue().optional(),relative:Ue().optional()});cn(!0);var Sme=at({pcbX:Lm.optional(),pcbY:Lm.optional(),pcbLeftEdgeX:Lm.optional(),pcbRightEdgeX:Lm.optional(),pcbTopEdgeY:Lm.optional(),pcbBottomEdgeY:Lm.optional(),pcbOffsetX:ze.optional(),pcbOffsetY:ze.optional(),pcbRotation:Ui.optional(),pcbPositionAnchor:Z().optional(),pcbPositionMode:Zt(["relative_to_group_anchor","auto","relative_to_board_anchor","relative_to_component_anchor"]).optional(),shouldBeOnEdgeOfBoard:Ue().optional(),pcbMarginTop:ze.optional(),pcbMarginRight:ze.optional(),pcbMarginBottom:ze.optional(),pcbMarginLeft:ze.optional(),pcbMarginX:ze.optional(),pcbMarginY:ze.optional(),pcbStyle:x8e.optional(),pcbSx:ryt.optional(),schMarginTop:ze.optional(),schMarginRight:ze.optional(),schMarginBottom:ze.optional(),schMarginLeft:ze.optional(),schMarginX:ze.optional(),schMarginY:ze.optional(),schX:ze.optional(),schY:ze.optional(),schRotation:Ui.optional(),layer:bo.optional(),footprint:f8e.optional(),symbol:Pmo.optional(),schStyle:Smo.optional(),relative:Ue().optional(),schRelative:Ue().optional(),pcbRelative:Ue().optional()});cn(!0);var o6=at({supplierPartNumbers:Fa(Dv,Qt(Z())).optional()});cn(!0);var _u=Sme.merge(o6).extend({key:_h().optional(),name:Z(),displayName:Z().optional(),schSectionName:Z().optional().describe('This component will be drawn as part of this section e.g. "Power"'),schSheetName:Z().optional().describe('This component will be drawn as part of this sheet e.g. "Main"'),datasheetUrl:Au.optional(),cadModel:FQ.optional(),kicadFootprintMetadata:_mo.optional(),kicadSymbolMetadata:Cmo.optional(),children:_h().optional(),symbolName:Z().optional(),doNotPlace:Ue().optional(),isSmt:Ue().optional().describe("Whether this component is surface mounted. True marks it as SMT; false marks it as through hole. Omit to let core infer mounting style from the footprint. Parsed unchanged with no aliases or schema conflicts; core determines solder paste generation, including for plated-hole pads."),allowOffBoard:Ue().optional().describe("Allows the PCB component to hang off the board (e.g. for USB ports or displays)"),obstructsWithinBounds:Ue().optional().describe("Does this component take up all the space within its bounds on a layer. This is generally true except for when separated pin headers are being represented by a single component (in which case, chips can be placed between the pin headers) or for tall modules where chips fit underneath"),showAsTranslucentModel:Ue().optional().describe("Whether to show this component's CAD model as translucent in the 3D viewer."),pinAttributes:Fa(Z(),bmo).optional(),mpn:Z().describe("Manufacturer Part Number").optional(),mfn:Z().describe("Manufacturer Part Number").optional(),manufacturerPartNumber:Z().optional()});cn(!0);var syt=["pin1","left","pin2","right"],W$=["pin1","left","anode","pos","pin2","right","cathode","neg"],E7r=ze.or(Zt(["2x","3x","4x"])),qi=(e)=>{let t=[e.manufacturerPartNumber,e.mpn,e.mfn].map((n)=>n?.trim()).filter((n)=>Boolean(n));if(new Set(t).size>1)throw Error("Conflicting manufacturerPartNumber, mpn, and mfn: specify the same manufacturer part number for all aliases");return t[0]},vmo=Zf.extend({via:Ue().optional(),fromLayer:bo.optional(),toLayer:bo.optional()}),Emo=vmo.superRefine((e,t)=>{if(e.via){if(!e.toLayer)t.addIssue({code:jt.custom,message:"toLayer is required when via is true",path:["toLayer"]})}else if(e.fromLayer||e.toLayer)t.addIssue({code:jt.custom,message:"fromLayer/toLayer are only allowed when via is true",path:["via"]})}),m8e=Qt(kn([Emo,Z()]));cn(!0);cn(!0);var Mmo=["Audio_Module/Reverb_BTDR-1H","Audio_Module/Reverb_BTDR-1V","Battery/BatteryClip_Keystone_54_D16-19mm","Battery/BatteryHolder_Bulgin_BX0034_1xAAA","Battery/BatteryHolder_Bulgin_BX0036_1xC","Battery/BatteryHolder_Bulgin_BX0123_1xCR123","Battery/BatteryHolder_ComfortableElectronic_CH273-2450_1x2450","Battery/BatteryHolder_Eagle_12BH611-GR","Battery/BatteryHolder_Keystone_103_1x20mm","Battery/BatteryHolder_Keystone_1042_1x18650","Battery/BatteryHolder_Keystone_104_1x23mm","Battery/BatteryHolder_Keystone_1057_1x2032","Battery/BatteryHolder_Keystone_1058_1x2032","Battery/BatteryHolder_Keystone_105_1x2430","Battery/BatteryHolder_Keystone_1060_1x2032","Battery/BatteryHolder_Keystone_106_1x20mm","Battery/BatteryHolder_Keystone_107_1x23mm","Battery/BatteryHolder_Keystone_2460_1xAA","Battery/BatteryHolder_Keystone_2462_2xAA","Battery/BatteryHolder_Keystone_2466_1xAAA","Battery/BatteryHolder_Keystone_2468_2xAAA","Battery/BatteryHolder_Keystone_2479_3xAAA","Battery/BatteryHolder_Keystone_2993","Battery/BatteryHolder_Keystone_2998_1x6.8mm","Battery/BatteryHolder_Keystone_3000_1x12mm","Battery/BatteryHolder_Keystone_3001_1x12mm","Battery/BatteryHolder_Keystone_3002_1x2032","Battery/BatteryHolder_Keystone_3008_1x2450","Battery/BatteryHolder_Keystone_3009_1x2450","Battery/BatteryHolder_Keystone_3034_1x20mm","Battery/BatteryHolder_Keystone_500","Battery/BatteryHolder_Keystone_590","Battery/BatteryHolder_LINX_BAT-HLD-012-SMT","Battery/BatteryHolder_MPD_BA9VPC_1xPP3","Battery/BatteryHolder_MPD_BC12AAPC_2xAA","Battery/BatteryHolder_MPD_BC2003_1x2032","Battery/BatteryHolder_MPD_BC2AAPC_2xAA","Battery/BatteryHolder_MPD_BH-18650-PC","Battery/BatteryHolder_MPD_BK-18650-PC2","Battery/BatteryHolder_MYOUNG_BS-07-A1BJ001_CR2032","Battery/BatteryHolder_Multicomp_BC-2001_1x2032","Battery/BatteryHolder_Renata_SMTU2032-LF_1x2032","Battery/BatteryHolder_Seiko_MS621F","Battery/BatteryHolder_TruPower_BH-331P_3xAA","Battery/Battery_CR1225","Battery/Battery_Panasonic_CR1025-VSK_Vertical_CircularHoles","Battery/Battery_Panasonic_CR1220-VCN_Vertical_CircularHoles","Battery/Battery_Panasonic_CR1632-V1AN_Vertical_CircularHoles","Battery/Battery_Panasonic_CR2025-V1AK_Vertical_CircularHoles","Battery/Battery_Panasonic_CR2032-HFN_Horizontal_CircularHoles","Battery/Battery_Panasonic_CR2032-VS1N_Vertical_CircularHoles","Battery/Battery_Panasonic_CR2354-VCN_Vertical_CircularHoles","Battery/Battery_Panasonic_CR2450-VAN_Vertical_CircularHoles","Battery/Battery_Panasonic_CR2477-VCN_Vertical_CircularHoles","Battery/Battery_Panasonic_CR3032-VCN_Vertical_CircularHoles","Button_Switch_Keyboard/SW_Cherry_MX_1.00u_PCB","Button_Switch_Keyboard/SW_Cherry_MX_1.00u_Plate","Button_Switch_Keyboard/SW_Cherry_MX_1.25u_PCB","Button_Switch_Keyboard/SW_Cherry_MX_1.25u_Plate","Button_Switch_Keyboard/SW_Cherry_MX_1.50u_PCB","Button_Switch_Keyboard/SW_Cherry_MX_1.50u_Plate","Button_Switch_Keyboard/SW_Cherry_MX_1.75u_PCB","Button_Switch_Keyboard/SW_Cherry_MX_1.75u_Plate","Button_Switch_Keyboard/SW_Cherry_MX_2.00u_PCB","Button_Switch_Keyboard/SW_Cherry_MX_2.00u_Plate","Button_Switch_Keyboard/SW_Cherry_MX_2.00u_Vertical_PCB","Button_Switch_Keyboard/SW_Cherry_MX_2.00u_Vertical_Plate","Button_Switch_Keyboard/SW_Cherry_MX_2.25u_PCB","Button_Switch_Keyboard/SW_Cherry_MX_2.25u_Plate","Button_Switch_Keyboard/SW_Cherry_MX_2.75u_PCB","Button_Switch_Keyboard/SW_Cherry_MX_2.75u_Plate","Button_Switch_Keyboard/SW_Cherry_MX_6.25u_PCB","Button_Switch_Keyboard/SW_Cherry_MX_6.25u_Plate","Button_Switch_Keyboard/SW_Cherry_MX_ISOEnter_PCB","Button_Switch_Keyboard/SW_Cherry_MX_ISOEnter_Plate","Button_Switch_Keyboard/SW_Matias_1.00u","Button_Switch_Keyboard/SW_Matias_1.25u","Button_Switch_Keyboard/SW_Matias_1.50u","Button_Switch_Keyboard/SW_Matias_1.75u","Button_Switch_Keyboard/SW_Matias_2.00u","Button_Switch_Keyboard/SW_Matias_2.25u","Button_Switch_Keyboard/SW_Matias_2.75u","Button_Switch_Keyboard/SW_Matias_6.25u","Button_Switch_Keyboard/SW_Matias_ISOEnter","Button_Switch_SMD/Nidec_Copal_CAS-120A","Button_Switch_SMD/Nidec_Copal_SH-7010A","Button_Switch_SMD/Nidec_Copal_SH-7010B","Button_Switch_SMD/Nidec_Copal_SH-7040B","Button_Switch_SMD/Panasonic_EVQPUJ_EVQPUA","Button_Switch_SMD/Panasonic_EVQPUK_EVQPUB","Button_Switch_SMD/Panasonic_EVQPUL_EVQPUC","Button_Switch_SMD/Panasonic_EVQPUM_EVQPUD","Button_Switch_SMD/SW_DIP_SPSTx01_Slide_6.7x4.1mm_W6.73mm_P2.54mm_LowProfile_JPin","Button_Switch_SMD/SW_DIP_SPSTx01_Slide_6.7x4.1mm_W8.61mm_P2.54mm_LowProfile","Button_Switch_SMD/SW_DIP_SPSTx01_Slide_9.78x4.72mm_W8.61mm_P2.54mm","Button_Switch_SMD/SW_DIP_SPSTx01_Slide_Copal_CHS-01A_W5.08mm_P1.27mm_JPin","Button_Switch_SMD/SW_DIP_SPSTx01_Slide_Copal_CHS-01B_W7.62mm_P1.27mm","Button_Switch_SMD/SW_DIP_SPSTx01_Slide_Copal_CVS-01xB_W5.9mm_P1mm","Button_Switch_SMD/SW_DIP_SPSTx01_Slide_Omron_A6S-110x_W8.9mm_P2.54mm","Button_Switch_SMD/SW_DIP_SPSTx02_Slide_6.7x6.64mm_W6.73mm_P2.54mm_LowProfile_JPin","Button_Switch_SMD/SW_DIP_SPSTx02_Slide_6.7x6.64mm_W8.61mm_P2.54mm_LowProfile","Button_Switch_SMD/SW_DIP_SPSTx02_Slide_9.78x7.26mm_W8.61mm_P2.54mm","Button_Switch_SMD/SW_DIP_SPSTx02_Slide_Copal_CHS-02A_W5.08mm_P1.27mm_JPin","Button_Switch_SMD/SW_DIP_SPSTx02_Slide_Copal_CHS-02B_W7.62mm_P1.27mm","Button_Switch_SMD/SW_DIP_SPSTx02_Slide_Copal_CVS-02xB_W5.9mm_P1mm","Button_Switch_SMD/SW_DIP_SPSTx02_Slide_KingTek_DSHP02TJ_W5.25mm_P1.27mm_JPin","Button_Switch_SMD/SW_DIP_SPSTx02_Slide_KingTek_DSHP02TS_W7.62mm_P1.27mm","Button_Switch_SMD/SW_DIP_SPSTx02_Slide_Omron_A6H-2101_W6.15mm_P1.27mm","Button_Switch_SMD/SW_DIP_SPSTx02_Slide_Omron_A6S-210x_W8.9mm_P2.54mm","Button_Switch_SMD/SW_DIP_SPSTx03_Slide_6.7x9.18mm_W6.73mm_P2.54mm_LowProfile_JPin","Button_Switch_SMD/SW_DIP_SPSTx03_Slide_6.7x9.18mm_W8.61mm_P2.54mm_LowProfile","Button_Switch_SMD/SW_DIP_SPSTx03_Slide_9.78x9.8mm_W8.61mm_P2.54mm","Button_Switch_SMD/SW_DIP_SPSTx03_Slide_Copal_CVS-03xB_W5.9mm_P1mm","Button_Switch_SMD/SW_DIP_SPSTx03_Slide_KingTek_DSHP03TJ_W5.25mm_P1.27mm_JPin","Button_Switch_SMD/SW_DIP_SPSTx03_Slide_KingTek_DSHP03TS_W7.62mm_P1.27mm","Button_Switch_SMD/SW_DIP_SPSTx03_Slide_Omron_A6S-310x_W8.9mm_P2.54mm","Button_Switch_SMD/SW_DIP_SPSTx04_Slide_6.7x11.72mm_W6.73mm_P2.54mm_LowProfile_JPin","Button_Switch_SMD/SW_DIP_SPSTx04_Slide_6.7x11.72mm_W8.61mm_P2.54mm_LowProfile","Button_Switch_SMD/SW_DIP_SPSTx04_Slide_9.78x12.34mm_W8.61mm_P2.54mm","Button_Switch_SMD/SW_DIP_SPSTx04_Slide_Copal_CHS-04A_W5.08mm_P1.27mm_JPin","Button_Switch_SMD/SW_DIP_SPSTx04_Slide_Copal_CHS-04B_W7.62mm_P1.27mm","Button_Switch_SMD/SW_DIP_SPSTx04_Slide_Copal_CVS-04xB_W5.9mm_P1mm","Button_Switch_SMD/SW_DIP_SPSTx04_Slide_KingTek_DSHP04TJ_W5.25mm_P1.27mm_JPin","Button_Switch_SMD/SW_DIP_SPSTx04_Slide_KingTek_DSHP04TS_W7.62mm_P1.27mm","Button_Switch_SMD/SW_DIP_SPSTx04_Slide_Omron_A6H-4101_W6.15mm_P1.27mm","Button_Switch_SMD/SW_DIP_SPSTx04_Slide_Omron_A6S-410x_W8.9mm_P2.54mm","Button_Switch_SMD/SW_DIP_SPSTx05_Slide_6.7x14.26mm_W6.73mm_P2.54mm_LowProfile_JPin","Button_Switch_SMD/SW_DIP_SPSTx05_Slide_6.7x14.26mm_W8.61mm_P2.54mm_LowProfile","Button_Switch_SMD/SW_DIP_SPSTx05_Slide_9.78x14.88mm_W8.61mm_P2.54mm","Button_Switch_SMD/SW_DIP_SPSTx05_Slide_KingTek_DSHP05TJ_W5.25mm_P1.27mm_JPin","Button_Switch_SMD/SW_DIP_SPSTx05_Slide_KingTek_DSHP05TS_W7.62mm_P1.27mm","Button_Switch_SMD/SW_DIP_SPSTx05_Slide_Omron_A6S-510x_W8.9mm_P2.54mm","Button_Switch_SMD/SW_DIP_SPSTx06_Slide_6.7x16.8mm_W6.73mm_P2.54mm_LowProfile_JPin","Button_Switch_SMD/SW_DIP_SPSTx06_Slide_6.7x16.8mm_W8.61mm_P2.54mm_LowProfile","Button_Switch_SMD/SW_DIP_SPSTx06_Slide_9.78x17.42mm_W8.61mm_P2.54mm","Button_Switch_SMD/SW_DIP_SPSTx06_Slide_Copal_CHS-06A_W5.08mm_P1.27mm_JPin","Button_Switch_SMD/SW_DIP_SPSTx06_Slide_Copal_CHS-06B_W7.62mm_P1.27mm","Button_Switch_SMD/SW_DIP_SPSTx06_Slide_KingTek_DSHP06TJ_W5.25mm_P1.27mm_JPin","Button_Switch_SMD/SW_DIP_SPSTx06_Slide_KingTek_DSHP06TS_W7.62mm_P1.27mm","Button_Switch_SMD/SW_DIP_SPSTx06_Slide_Omron_A6H-6101_W6.15mm_P1.27mm","Button_Switch_SMD/SW_DIP_SPSTx06_Slide_Omron_A6S-610x_W8.9mm_P2.54mm","Button_Switch_SMD/SW_DIP_SPSTx07_Slide_6.7x19.34mm_W6.73mm_P2.54mm_LowProfile_JPin","Button_Switch_SMD/SW_DIP_SPSTx07_Slide_6.7x19.34mm_W8.61mm_P2.54mm_LowProfile","Button_Switch_SMD/SW_DIP_SPSTx07_Slide_9.78x19.96mm_W8.61mm_P2.54mm","Button_Switch_SMD/SW_DIP_SPSTx07_Slide_KingTek_DSHP07TJ_W5.25mm_P1.27mm_JPin","Button_Switch_SMD/SW_DIP_SPSTx07_Slide_KingTek_DSHP07TS_W7.62mm_P1.27mm","Button_Switch_SMD/SW_DIP_SPSTx07_Slide_Omron_A6S-710x_W8.9mm_P2.54mm","Button_Switch_SMD/SW_DIP_SPSTx08_Slide_6.7x21.88mm_W6.73mm_P2.54mm_LowProfile_JPin","Button_Switch_SMD/SW_DIP_SPSTx08_Slide_6.7x21.88mm_W8.61mm_P2.54mm_LowProfile","Button_Switch_SMD/SW_DIP_SPSTx08_Slide_9.78x22.5mm_W8.61mm_P2.54mm","Button_Switch_SMD/SW_DIP_SPSTx08_Slide_Copal_CHS-08A_W5.08mm_P1.27mm_JPin","Button_Switch_SMD/SW_DIP_SPSTx08_Slide_Copal_CHS-08B_W7.62mm_P1.27mm","Button_Switch_SMD/SW_DIP_SPSTx08_Slide_Copal_CVS-08xB_W5.9mm_P1mm","Button_Switch_SMD/SW_DIP_SPSTx08_Slide_KingTek_DSHP08TJ_W5.25mm_P1.27mm_JPin","Button_Switch_SMD/SW_DIP_SPSTx08_Slide_KingTek_DSHP08TS_W7.62mm_P1.27mm","Button_Switch_SMD/SW_DIP_SPSTx08_Slide_Omron_A6H-8101_W6.15mm_P1.27mm","Button_Switch_SMD/SW_DIP_SPSTx08_Slide_Omron_A6S-810x_W8.9mm_P2.54mm","Button_Switch_SMD/SW_DIP_SPSTx09_Slide_6.7x24.42mm_W6.73mm_P2.54mm_LowProfile_JPin","Button_Switch_SMD/SW_DIP_SPSTx09_Slide_6.7x24.42mm_W8.61mm_P2.54mm_LowProfile","Button_Switch_SMD/SW_DIP_SPSTx09_Slide_9.78x25.04mm_W8.61mm_P2.54mm","Button_Switch_SMD/SW_DIP_SPSTx09_Slide_KingTek_DSHP09TJ_W5.25mm_P1.27mm_JPin","Button_Switch_SMD/SW_DIP_SPSTx09_Slide_KingTek_DSHP09TS_W7.62mm_P1.27mm","Button_Switch_SMD/SW_DIP_SPSTx09_Slide_Omron_A6S-910x_W8.9mm_P2.54mm","Button_Switch_SMD/SW_DIP_SPSTx10_Slide_6.7x26.96mm_W6.73mm_P2.54mm_LowProfile_JPin","Button_Switch_SMD/SW_DIP_SPSTx10_Slide_6.7x26.96mm_W8.61mm_P2.54mm_LowProfile","Button_Switch_SMD/SW_DIP_SPSTx10_Slide_9.78x27.58mm_W8.61mm_P2.54mm","Button_Switch_SMD/SW_DIP_SPSTx10_Slide_Copal_CHS-10A_W5.08mm_P1.27mm_JPin","Button_Switch_SMD/SW_DIP_SPSTx10_Slide_Copal_CHS-10B_W7.62mm_P1.27mm","Button_Switch_SMD/SW_DIP_SPSTx10_Slide_KingTek_DSHP10TJ_W5.25mm_P1.27mm_JPin","Button_Switch_SMD/SW_DIP_SPSTx10_Slide_KingTek_DSHP10TS_W7.62mm_P1.27mm","Button_Switch_SMD/SW_DIP_SPSTx10_Slide_Omron_A6H-10101_W6.15mm_P1.27mm","Button_Switch_SMD/SW_DIP_SPSTx10_Slide_Omron_A6S-1010x_W8.9mm_P2.54mm","Button_Switch_SMD/SW_DIP_SPSTx11_Slide_6.7x29.5mm_W6.73mm_P2.54mm_LowProfile_JPin","Button_Switch_SMD/SW_DIP_SPSTx11_Slide_6.7x29.5mm_W8.61mm_P2.54mm_LowProfile","Button_Switch_SMD/SW_DIP_SPSTx11_Slide_9.78x30.12mm_W8.61mm_P2.54mm","Button_Switch_SMD/SW_DIP_SPSTx12_Slide_6.7x32.04mm_W6.73mm_P2.54mm_LowProfile_JPin","Button_Switch_SMD/SW_DIP_SPSTx12_Slide_6.7x32.04mm_W8.61mm_P2.54mm_LowProfile","Button_Switch_SMD/SW_DIP_SPSTx12_Slide_9.78x32.66mm_W8.61mm_P2.54mm","Button_Switch_SMD/SW_DPDT_CK_JS202011JCQN","Button_Switch_SMD/SW_MEC_5GSH9","Button_Switch_SMD/SW_Push_1P1T-MP_NO_Horizontal_Alps_SKRTLAE010","Button_Switch_SMD/SW_Push_1P1T-SH_NO_CK_KMR2xxG","Button_Switch_SMD/SW_Push_1P1T_NO_CK_KMR2","Button_Switch_SMD/SW_Push_1P1T_NO_CK_KSC6xxG","Button_Switch_SMD/SW_Push_1P1T_NO_CK_KSC6xxJ","Button_Switch_SMD/SW_Push_1P1T_NO_CK_KSC7xxJ","Button_Switch_SMD/SW_Push_1P1T_NO_CK_KSC9xxG","Button_Switch_SMD/SW_Push_1P1T_NO_CK_KSC9xxJ","Button_Switch_SMD/SW_Push_1P1T_NO_CK_PTS125Sx43PSMTR","Button_Switch_SMD/SW_Push_1P1T_NO_CK_PTS125Sx43SMTR","Button_Switch_SMD/SW_Push_1P1T_NO_CK_PTS125Sx73PSMTR","Button_Switch_SMD/SW_Push_1P1T_NO_CK_PTS125Sx73SMTR","Button_Switch_SMD/SW_Push_1P1T_NO_CK_PTS125Sx85PSMTR","Button_Switch_SMD/SW_Push_1P1T_NO_CK_PTS125Sx85SMTR","Button_Switch_SMD/SW_Push_1P1T_NO_E-Switch_TL3301NxxxxxG","Button_Switch_SMD/SW_Push_1P1T_NO_Vertical_Wuerth_434133025816","Button_Switch_SMD/SW_Push_1P1T_XKB_TS-1187A","Button_Switch_SMD/SW_Push_1TS009xxxx-xxxx-xxxx_6x6x5mm","Button_Switch_SMD/SW_Push_SPST_NO_Alps_SKRK","Button_Switch_SMD/SW_SP3T_PCM13","Button_Switch_SMD/SW_SPDT_CK_JS102011SAQN","Button_Switch_SMD/SW_SPDT_PCM12","Button_Switch_SMD/SW_SPDT_REED_MSDM-DT","Button_Switch_SMD/SW_SPDT_Shouhan_MSK12C02","Button_Switch_SMD/SW_SPST_B3S-1000","Button_Switch_SMD/SW_SPST_B3S-1100","Button_Switch_SMD/SW_SPST_B3SL-1002P","Button_Switch_SMD/SW_SPST_B3SL-1022P","Button_Switch_SMD/SW_SPST_B3U-1000P-B","Button_Switch_SMD/SW_SPST_B3U-1000P","Button_Switch_SMD/SW_SPST_B3U-1100P-B","Button_Switch_SMD/SW_SPST_B3U-1100P","Button_Switch_SMD/SW_SPST_B3U-3000P-B","Button_Switch_SMD/SW_SPST_B3U-3000P","Button_Switch_SMD/SW_SPST_B3U-3100P-B","Button_Switch_SMD/SW_SPST_B3U-3100P","Button_Switch_SMD/SW_SPST_CK_KMS2xxG","Button_Switch_SMD/SW_SPST_CK_KMS2xxGP","Button_Switch_SMD/SW_SPST_CK_KXT3","Button_Switch_SMD/SW_SPST_CK_RS282G05A3","Button_Switch_SMD/SW_SPST_EVPBF","Button_Switch_SMD/SW_SPST_EVQP0","Button_Switch_SMD/SW_SPST_EVQP2_MiddlePushTravel_H2.5mm","Button_Switch_SMD/SW_SPST_EVQP2_ShortPushTravel_H2.1mm","Button_Switch_SMD/SW_SPST_EVQP2_ShortPushTravel_H2.5mm","Button_Switch_SMD/SW_SPST_EVQP7A","Button_Switch_SMD/SW_SPST_EVQP7C","Button_Switch_SMD/SW_SPST_EVQPE1","Button_Switch_SMD/SW_SPST_EVQQ2","Button_Switch_SMD/SW_SPST_FSMSM","Button_Switch_SMD/SW_SPST_GT-TC155X","Button_Switch_SMD/SW_SPST_Omron_B3FS-100xP","Button_Switch_SMD/SW_SPST_Omron_B3FS-101xP","Button_Switch_SMD/SW_SPST_Omron_B3FS-105xP","Button_Switch_SMD/SW_SPST_PTS645Sx43SMTR92","Button_Switch_SMD/SW_SPST_PTS647_Sx38","Button_Switch_SMD/SW_SPST_PTS647_Sx50","Button_Switch_SMD/SW_SPST_PTS647_Sx70","Button_Switch_SMD/SW_SPST_PTS810","Button_Switch_SMD/SW_SPST_Panasonic_EVQPL_3PL_5PL_PT_A08","Button_Switch_SMD/SW_SPST_Panasonic_EVQPL_3PL_5PL_PT_A15","Button_Switch_SMD/SW_SPST_REED_CT05-XXXX-G1","Button_Switch_SMD/SW_SPST_REED_CT05-XXXX-J1","Button_Switch_SMD/SW_SPST_REED_CT10-XXXX-G1","Button_Switch_SMD/SW_SPST_REED_CT10-XXXX-G2","Button_Switch_SMD/SW_SPST_REED_CT10-XXXX-G4","Button_Switch_SMD/SW_SPST_SKQG_WithStem","Button_Switch_SMD/SW_SPST_SKQG_WithoutStem","Button_Switch_SMD/SW_SPST_TL3305A","Button_Switch_SMD/SW_SPST_TL3305B","Button_Switch_SMD/SW_SPST_TL3305C","Button_Switch_SMD/SW_SPST_TL3342","Button_Switch_SMD/SW_SPST_TS-1088-xR020","Button_Switch_SMD/SW_SPST_TS-1088-xR025","Button_Switch_SMD/SW_Tactile_SPST_NO_Straight_CK_PTS636Sx25SMTRLFS","Button_Switch_THT/KSA_Tactile_SPST","Button_Switch_THT/Nidec_Copal_SH-7010C","Button_Switch_THT/Push_E-Switch_KS01Q01","Button_Switch_THT/SW_CK_JS202011AQN_DPDT_Angled","Button_Switch_THT/SW_CK_JS202011CQN_DPDT_Straight","Button_Switch_THT/SW_CW_GPTS203211B","Button_Switch_THT/SW_DIP_SPSTx01_Piano_10.8x4.1mm_W7.62mm_P2.54mm","Button_Switch_THT/SW_DIP_SPSTx01_Slide_6.7x4.1mm_W7.62mm_P2.54mm_LowProfile","Button_Switch_THT/SW_DIP_SPSTx01_Slide_9.78x4.72mm_W7.62mm_P2.54mm","Button_Switch_THT/SW_DIP_SPSTx02_Piano_10.8x6.64mm_W7.62mm_P2.54mm","Button_Switch_THT/SW_DIP_SPSTx02_Piano_CTS_Series194-2MSTN_W7.62mm_P2.54mm","Button_Switch_THT/SW_DIP_SPSTx02_Slide_6.7x6.64mm_W7.62mm_P2.54mm_LowProfile","Button_Switch_THT/SW_DIP_SPSTx02_Slide_9.78x7.26mm_W7.62mm_P2.54mm","Button_Switch_THT/SW_DIP_SPSTx03_Piano_10.8x9.18mm_W7.62mm_P2.54mm","Button_Switch_THT/SW_DIP_SPSTx03_Piano_CTS_Series194-3MSTN_W7.62mm_P2.54mm","Button_Switch_THT/SW_DIP_SPSTx03_Slide_6.7x9.18mm_W7.62mm_P2.54mm_LowProfile","Button_Switch_THT/SW_DIP_SPSTx03_Slide_9.78x9.8mm_W7.62mm_P2.54mm","Button_Switch_THT/SW_DIP_SPSTx04_Piano_10.8x11.72mm_W7.62mm_P2.54mm","Button_Switch_THT/SW_DIP_SPSTx04_Piano_CTS_Series194-4MSTN_W7.62mm_P2.54mm","Button_Switch_THT/SW_DIP_SPSTx04_Slide_6.7x11.72mm_W7.62mm_P2.54mm_LowProfile","Button_Switch_THT/SW_DIP_SPSTx04_Slide_9.78x12.34mm_W7.62mm_P2.54mm","Button_Switch_THT/SW_DIP_SPSTx05_Piano_10.8x14.26mm_W7.62mm_P2.54mm","Button_Switch_THT/SW_DIP_SPSTx05_Piano_CTS_Series194-5MSTN_W7.62mm_P2.54mm","Button_Switch_THT/SW_DIP_SPSTx05_Slide_6.7x14.26mm_W7.62mm_P2.54mm_LowProfile","Button_Switch_THT/SW_DIP_SPSTx05_Slide_9.78x14.88mm_W7.62mm_P2.54mm","Button_Switch_THT/SW_DIP_SPSTx06_Piano_10.8x16.8mm_W7.62mm_P2.54mm","Button_Switch_THT/SW_DIP_SPSTx06_Piano_CTS_Series194-6MSTN_W7.62mm_P2.54mm","Button_Switch_THT/SW_DIP_SPSTx06_Slide_6.7x16.8mm_W7.62mm_P2.54mm_LowProfile","Button_Switch_THT/SW_DIP_SPSTx06_Slide_9.78x17.42mm_W7.62mm_P2.54mm","Button_Switch_THT/SW_DIP_SPSTx07_Piano_10.8x19.34mm_W7.62mm_P2.54mm","Button_Switch_THT/SW_DIP_SPSTx07_Piano_CTS_Series194-7MSTN_W7.62mm_P2.54mm","Button_Switch_THT/SW_DIP_SPSTx07_Slide_6.7x19.34mm_W7.62mm_P2.54mm_LowProfile","Button_Switch_THT/SW_DIP_SPSTx07_Slide_9.78x19.96mm_W7.62mm_P2.54mm","Button_Switch_THT/SW_DIP_SPSTx08_Piano_10.8x21.88mm_W7.62mm_P2.54mm","Button_Switch_THT/SW_DIP_SPSTx08_Piano_CTS_Series194-8MSTN_W7.62mm_P2.54mm","Button_Switch_THT/SW_DIP_SPSTx08_Slide_6.7x21.88mm_W7.62mm_P2.54mm_LowProfile","Button_Switch_THT/SW_DIP_SPSTx08_Slide_9.78x22.5mm_W7.62mm_P2.54mm","Button_Switch_THT/SW_DIP_SPSTx09_Piano_10.8x24.42mm_W7.62mm_P2.54mm","Button_Switch_THT/SW_DIP_SPSTx09_Piano_CTS_Series194-9MSTN_W7.62mm_P2.54mm","Button_Switch_THT/SW_DIP_SPSTx09_Slide_6.7x24.42mm_W7.62mm_P2.54mm_LowProfile","Button_Switch_THT/SW_DIP_SPSTx09_Slide_9.78x25.04mm_W7.62mm_P2.54mm","Button_Switch_THT/SW_DIP_SPSTx10_Piano_10.8x26.96mm_W7.62mm_P2.54mm","Button_Switch_THT/SW_DIP_SPSTx10_Piano_CTS_Series194-10MSTN_W7.62mm_P2.54mm","Button_Switch_THT/SW_DIP_SPSTx10_Slide_6.7x26.96mm_W7.62mm_P2.54mm_LowProfile","Button_Switch_THT/SW_DIP_SPSTx10_Slide_9.78x27.58mm_W7.62mm_P2.54mm","Button_Switch_THT/SW_DIP_SPSTx11_Piano_10.8x29.5mm_W7.62mm_P2.54mm","Button_Switch_THT/SW_DIP_SPSTx11_Piano_CTS_Series194-11MSTN_W7.62mm_P2.54mm","Button_Switch_THT/SW_DIP_SPSTx11_Slide_6.7x29.5mm_W7.62mm_P2.54mm_LowProfile","Button_Switch_THT/SW_DIP_SPSTx11_Slide_9.78x30.12mm_W7.62mm_P2.54mm","Button_Switch_THT/SW_DIP_SPSTx12_Piano_10.8x32.04mm_W7.62mm_P2.54mm","Button_Switch_THT/SW_DIP_SPSTx12_Piano_CTS_Series194-12MSTN_W7.62mm_P2.54mm","Button_Switch_THT/SW_DIP_SPSTx12_Slide_6.7x32.04mm_W7.62mm_P2.54mm_LowProfile","Button_Switch_THT/SW_DIP_SPSTx12_Slide_9.78x32.66mm_W7.62mm_P2.54mm","Button_Switch_THT/SW_E-Switch_EG1224_SPDT_Angled","Button_Switch_THT/SW_E-Switch_EG1271_SPDT","Button_Switch_THT/SW_E-Switch_EG2219_DPDT_Angled","Button_Switch_THT/SW_Lever_1P2T_NKK_GW12LxH","Button_Switch_THT/SW_MEC_5GTH9","Button_Switch_THT/SW_NKK_BB15AH","Button_Switch_THT/SW_NKK_G1xJP","Button_Switch_THT/SW_NKK_GW12LJP","Button_Switch_THT/SW_NKK_NR01","Button_Switch_THT/SW_PUSH-12mm","Button_Switch_THT/SW_PUSH-12mm_Wuerth-430476085716","Button_Switch_THT/SW_PUSH_1P1T_6x3.5mm_H4.3_APEM_MJTP1243","Button_Switch_THT/SW_PUSH_1P1T_6x3.5mm_H5.0_APEM_MJTP1250","Button_Switch_THT/SW_PUSH_6mm","Button_Switch_THT/SW_PUSH_6mm_H13mm","Button_Switch_THT/SW_PUSH_6mm_H4.3mm","Button_Switch_THT/SW_PUSH_6mm_H5mm","Button_Switch_THT/SW_PUSH_6mm_H7.3mm","Button_Switch_THT/SW_PUSH_6mm_H8.5mm","Button_Switch_THT/SW_PUSH_6mm_H8mm","Button_Switch_THT/SW_PUSH_6mm_H9.5mm","Button_Switch_THT/SW_PUSH_E-Switch_FS5700DP_DPDT","Button_Switch_THT/SW_PUSH_LCD_E3_SAxxxx","Button_Switch_THT/SW_PUSH_LCD_E3_SAxxxx_SocketPins","Button_Switch_THT/SW_Push_1P1T_NO_LED_E-Switch_TL1250","Button_Switch_THT/SW_Push_1P2T_Vertical_E-Switch_800UDP8P1A1M6","Button_Switch_THT/SW_Push_2P1T_Toggle_CK_PVA1xxH1xxxxxxV2","Button_Switch_THT/SW_Push_2P1T_Toggle_CK_PVA1xxH2xxxxxxV2","Button_Switch_THT/SW_Push_2P1T_Toggle_CK_PVA1xxH3xxxxxxV2","Button_Switch_THT/SW_Push_2P1T_Toggle_CK_PVA1xxH4xxxxxxV2","Button_Switch_THT/SW_Push_2P2T_Toggle_CK_PVA2OAH5xxxxxxV2","Button_Switch_THT/SW_Push_2P2T_Toggle_CK_PVA2xxH1xxxxxxV2","Button_Switch_THT/SW_Push_2P2T_Toggle_CK_PVA2xxH2xxxxxxV2","Button_Switch_THT/SW_Push_2P2T_Toggle_CK_PVA2xxH3xxxxxxV2","Button_Switch_THT/SW_Push_2P2T_Toggle_CK_PVA2xxH4xxxxxxV2","Button_Switch_THT/SW_Push_2P2T_Vertical_E-Switch_800UDP8P1A1M6","Button_Switch_THT/SW_SPST_Omron_B3F-315x_Angled","Button_Switch_THT/SW_SPST_Omron_B3F-40xx","Button_Switch_THT/SW_SPST_Omron_B3F-50xx","Button_Switch_THT/SW_Slide-03_Wuerth-WS-SLTV_10x2.5x6.4_P2.54mm","Button_Switch_THT/SW_Slide_SP3T_Straight_CK_OS103012MU1QP1","Button_Switch_THT/SW_Slide_SPDT_Angled_CK_OS102011MA1Q","Button_Switch_THT/SW_Slide_SPDT_Straight_CK_OS102011MS2Q","Button_Switch_THT/SW_TH_Tactile_Omron_B3F-100x","Button_Switch_THT/SW_TH_Tactile_Omron_B3F-102x","Button_Switch_THT/SW_TH_Tactile_Omron_B3F-106x","Button_Switch_THT/SW_TH_Tactile_Omron_B3F-107x","Button_Switch_THT/SW_TH_Tactile_Omron_B3F-110x","Button_Switch_THT/SW_TH_Tactile_Omron_B3F-1110","Button_Switch_THT/SW_TH_Tactile_Omron_B3F-112x","Button_Switch_THT/SW_Tactile_SKHH_Angled","Button_Switch_THT/SW_Tactile_SPST_Angled_PTS645Vx31-2LFS","Button_Switch_THT/SW_Tactile_SPST_Angled_PTS645Vx39-2LFS","Button_Switch_THT/SW_Tactile_SPST_Angled_PTS645Vx58-2LFS","Button_Switch_THT/SW_Tactile_SPST_Angled_PTS645Vx83-2LFS","Button_Switch_THT/SW_Tactile_Straight_KSA0Axx1LFTR","Button_Switch_THT/SW_Tactile_Straight_KSL0Axx1LFTR","Button_Switch_THT/SW_XKB_DM1-16UC-1","Button_Switch_THT/SW_XKB_DM1-16UD-1","Button_Switch_THT/SW_XKB_DM1-16UP-1","Buzzer_Beeper/Buzzer_12x9.5RM7.6","Buzzer_Beeper/Buzzer_15x7.5RM7.6","Buzzer_Beeper/Buzzer_CUI_CPT-9019S-SMT","Buzzer_Beeper/Buzzer_D14mm_H7mm_P10mm","Buzzer_Beeper/Buzzer_Mallory_AST1109MLTRQ","Buzzer_Beeper/Buzzer_Mallory_AST1240MLQ","Buzzer_Beeper/Buzzer_Murata_PKLCS1212E","Buzzer_Beeper/Buzzer_Murata_PKMCS0909E","Buzzer_Beeper/Buzzer_TDK_PS1240P02BT_D12.2mm_H6.5mm","Buzzer_Beeper/Indicator_PUI_AI-1440-TWT-24V-2-R","Buzzer_Beeper/MagneticBuzzer_CUI_CMT-8504-100-SMT","Buzzer_Beeper/MagneticBuzzer_CUI_CST-931RP-A","Buzzer_Beeper/MagneticBuzzer_Kingstate_KCG0601","Buzzer_Beeper/MagneticBuzzer_Kobitone_254-EMB73-RO","Buzzer_Beeper/MagneticBuzzer_Kobitone_254-EMB84Q-RO","Buzzer_Beeper/MagneticBuzzer_PUI_AT-0927-TT-6-R","Buzzer_Beeper/MagneticBuzzer_PUI_SMT-1028-T-2-R","Buzzer_Beeper/MagneticBuzzer_ProSignal_ABI-009-RC","Buzzer_Beeper/MagneticBuzzer_ProSignal_ABI-010-RC","Buzzer_Beeper/MagneticBuzzer_ProSignal_ABT-410-RC","Buzzer_Beeper/MagneticBuzzer_ProjectsUnlimited_AI-4228-TWT-R","Buzzer_Beeper/MagneticBuzzer_StarMicronics_HGP","Buzzer_Beeper/MagneticBuzzer_StarMicronics_HMB-06_HMB-12","Buzzer_Beeper/MagneticBuzzer_StarMicronics_HMB","Buzzer_Beeper/MagneticBuzzer_StarMicronics_QMB-105","Buzzer_Beeper/MagneticBuzzer_StarMicronics_QMB-108","Buzzer_Beeper/MagneticBuzzer_StarMicronics_QMB-111","Buzzer_Beeper/MagneticBuzzer_StarMicronics_QMB","Buzzer_Beeper/MagneticBuzzer_StarMicronics_QMX","Buzzer_Beeper/MagneticBuzzer_StarMicronics_RMX","Buzzer_Beeper/MagneticBuzzer_StarMicronics_TMB","Buzzer_Beeper/MagneticBuzzer_StarMicronics_TMX-F","Buzzer_Beeper/MagneticBuzzer_StarMicronics_TMX-H","Buzzer_Beeper/PUIAudio_SMT_0825_S_4_R","Buzzer_Beeper/Speaker_CUI_CMR-1206S-67","Calibration_Scale/Gauge_100mm_Grid_Type1_CopperTop","Calibration_Scale/Gauge_100mm_Type1_CopperTop","Calibration_Scale/Gauge_100mm_Type1_SilkScreenTop","Calibration_Scale/Gauge_100mm_Type2_CopperTop","Calibration_Scale/Gauge_100mm_Type2_SilkScreenTop","Calibration_Scale/Gauge_10mm_Type1_CopperTop","Calibration_Scale/Gauge_10mm_Type1_SilkScreenTop","Calibration_Scale/Gauge_10mm_Type2_CopperTop","Calibration_Scale/Gauge_10mm_Type2_SilkScreenTop","Calibration_Scale/Gauge_10mm_Type3_CopperTop","Calibration_Scale/Gauge_10mm_Type3_SilkScreenTop","Calibration_Scale/Gauge_10mm_Type4_CopperTop","Calibration_Scale/Gauge_10mm_Type4_SilkScreenTop","Calibration_Scale/Gauge_10mm_Type5_CopperTop","Calibration_Scale/Gauge_10mm_Type5_SilkScreenTop","Calibration_Scale/Gauge_50mm_Type1_CopperTop","Calibration_Scale/Gauge_50mm_Type1_SilkScreenTop","Calibration_Scale/Gauge_50mm_Type2_CopperTop","Calibration_Scale/Gauge_50mm_Type2_SilkScreenTop","Capacitor_SMD/CP_Elec_10x10.5","Capacitor_SMD/CP_Elec_10x10","Capacitor_SMD/CP_Elec_10x12.5","Capacitor_SMD/CP_Elec_10x12.6","Capacitor_SMD/CP_Elec_10x14.3","Capacitor_SMD/CP_Elec_10x7.7","Capacitor_SMD/CP_Elec_10x7.9","Capacitor_SMD/CP_Elec_16x17.5","Capacitor_SMD/CP_Elec_16x22","Capacitor_SMD/CP_Elec_18x17.5","Capacitor_SMD/CP_Elec_18x22","Capacitor_SMD/CP_Elec_3x5.3","Capacitor_SMD/CP_Elec_3x5.4","Capacitor_SMD/CP_Elec_4x3.9","Capacitor_SMD/CP_Elec_4x3","Capacitor_SMD/CP_Elec_4x4.5","Capacitor_SMD/CP_Elec_4x5.3","Capacitor_SMD/CP_Elec_4x5.4","Capacitor_SMD/CP_Elec_4x5.7","Capacitor_SMD/CP_Elec_4x5.8","Capacitor_SMD/CP_Elec_5x3.9","Capacitor_SMD/CP_Elec_5x3","Capacitor_SMD/CP_Elec_5x4.4","Capacitor_SMD/CP_Elec_5x4.5","Capacitor_SMD/CP_Elec_5x5.3","Capacitor_SMD/CP_Elec_5x5.4","Capacitor_SMD/CP_Elec_5x5.7","Capacitor_SMD/CP_Elec_5x5.8","Capacitor_SMD/CP_Elec_5x5.9","Capacitor_SMD/CP_Elec_6.3x3.9","Capacitor_SMD/CP_Elec_6.3x3","Capacitor_SMD/CP_Elec_6.3x4.5","Capacitor_SMD/CP_Elec_6.3x4.9","Capacitor_SMD/CP_Elec_6.3x5.2","Capacitor_SMD/CP_Elec_6.3x5.3","Capacitor_SMD/CP_Elec_6.3x5.4","Capacitor_SMD/CP_Elec_6.3x5.4_Nichicon","Capacitor_SMD/CP_Elec_6.3x5.7","Capacitor_SMD/CP_Elec_6.3x5.8","Capacitor_SMD/CP_Elec_6.3x5.9","Capacitor_SMD/CP_Elec_6.3x7.7","Capacitor_SMD/CP_Elec_6.3x9.9","Capacitor_SMD/CP_Elec_8x10.5","Capacitor_SMD/CP_Elec_8x10","Capacitor_SMD/CP_Elec_8x11.9","Capacitor_SMD/CP_Elec_8x5.4","Capacitor_SMD/CP_Elec_8x6.2","Capacitor_SMD/CP_Elec_8x6.5","Capacitor_SMD/CP_Elec_8x6.7","Capacitor_SMD/CP_Elec_8x6.9","Capacitor_SMD/CP_Elec_CAP-XX_DMF3Zxxxxxxxx3D","Capacitor_SMD/C_01005_0402Metric","Capacitor_SMD/C_01005_0402Metric_Pad0.57x0.30mm_HandSolder","Capacitor_SMD/C_0201_0603Metric","Capacitor_SMD/C_0201_0603Metric_Pad0.64x0.40mm_HandSolder","Capacitor_SMD/C_0402_1005Metric","Capacitor_SMD/C_0402_1005Metric_Pad0.74x0.62mm_HandSolder","Capacitor_SMD/C_0504_1310Metric","Capacitor_SMD/C_0504_1310Metric_Pad0.83x1.28mm_HandSolder","Capacitor_SMD/C_0603_1608Metric","Capacitor_SMD/C_0603_1608Metric_Pad1.08x0.95mm_HandSolder","Capacitor_SMD/C_0805_2012Metric","Capacitor_SMD/C_0805_2012Metric_Pad1.18x1.45mm_HandSolder","Capacitor_SMD/C_1206_3216Metric","Capacitor_SMD/C_1206_3216Metric_Pad1.33x1.80mm_HandSolder","Capacitor_SMD/C_1210_3225Metric","Capacitor_SMD/C_1210_3225Metric_Pad1.33x2.70mm_HandSolder","Capacitor_SMD/C_1808_4520Metric","Capacitor_SMD/C_1808_4520Metric_Pad1.72x2.30mm_HandSolder","Capacitor_SMD/C_1812_4532Metric","Capacitor_SMD/C_1812_4532Metric_Pad1.57x3.40mm_HandSolder","Capacitor_SMD/C_1825_4564Metric","Capacitor_SMD/C_1825_4564Metric_Pad1.57x6.80mm_HandSolder","Capacitor_SMD/C_2220_5750Metric","Capacitor_SMD/C_2220_5750Metric_Pad1.97x5.40mm_HandSolder","Capacitor_SMD/C_2225_5664Metric","Capacitor_SMD/C_2225_5664Metric_Pad1.80x6.60mm_HandSolder","Capacitor_SMD/C_3640_9110Metric","Capacitor_SMD/C_3640_9110Metric_Pad2.10x10.45mm_HandSolder","Capacitor_SMD/C_Elec_10x10.2","Capacitor_SMD/C_Elec_3x5.4","Capacitor_SMD/C_Elec_4x5.4","Capacitor_SMD/C_Elec_4x5.8","Capacitor_SMD/C_Elec_5x5.4","Capacitor_SMD/C_Elec_5x5.8","Capacitor_SMD/C_Elec_6.3x5.4","Capacitor_SMD/C_Elec_6.3x5.8","Capacitor_SMD/C_Elec_6.3x7.7","Capacitor_SMD/C_Elec_8x10.2","Capacitor_SMD/C_Elec_8x5.4","Capacitor_SMD/C_Elec_8x6.2","Capacitor_SMD/C_Trimmer_Murata_TZB4-A","Capacitor_SMD/C_Trimmer_Murata_TZB4-B","Capacitor_SMD/C_Trimmer_Murata_TZC3","Capacitor_SMD/C_Trimmer_Murata_TZR1","Capacitor_SMD/C_Trimmer_Murata_TZW4","Capacitor_SMD/C_Trimmer_Murata_TZY2","Capacitor_SMD/C_Trimmer_Sprague-Goodman_SGC3","Capacitor_SMD/C_Trimmer_Voltronics_JN","Capacitor_SMD/C_Trimmer_Voltronics_JQ","Capacitor_SMD/C_Trimmer_Voltronics_JR","Capacitor_SMD/C_Trimmer_Voltronics_JV","Capacitor_SMD/C_Trimmer_Voltronics_JZ","Capacitor_THT/CP_Axial_L10.0mm_D4.5mm_P15.00mm_Horizontal","Capacitor_THT/CP_Axial_L10.0mm_D6.0mm_P15.00mm_Horizontal","Capacitor_THT/CP_Axial_L11.0mm_D5.0mm_P18.00mm_Horizontal","Capacitor_THT/CP_Axial_L11.0mm_D6.0mm_P18.00mm_Horizontal","Capacitor_THT/CP_Axial_L11.0mm_D8.0mm_P15.00mm_Horizontal","Capacitor_THT/CP_Axial_L18.0mm_D10.0mm_P25.00mm_Horizontal","Capacitor_THT/CP_Axial_L18.0mm_D6.5mm_P25.00mm_Horizontal","Capacitor_THT/CP_Axial_L18.0mm_D8.0mm_P25.00mm_Horizontal","Capacitor_THT/CP_Axial_L20.0mm_D10.0mm_P26.00mm_Horizontal","Capacitor_THT/CP_Axial_L20.0mm_D13.0mm_P26.00mm_Horizontal","Capacitor_THT/CP_Axial_L21.0mm_D8.0mm_P28.00mm_Horizontal","Capacitor_THT/CP_Axial_L25.0mm_D10.0mm_P30.00mm_Horizontal","Capacitor_THT/CP_Axial_L26.5mm_D20.0mm_P33.00mm_Horizontal","Capacitor_THT/CP_Axial_L29.0mm_D10.0mm_P35.00mm_Horizontal","Capacitor_THT/CP_Axial_L29.0mm_D13.0mm_P35.00mm_Horizontal","Capacitor_THT/CP_Axial_L29.0mm_D16.0mm_P35.00mm_Horizontal","Capacitor_THT/CP_Axial_L29.0mm_D20.0mm_P35.00mm_Horizontal","Capacitor_THT/CP_Axial_L30.0mm_D10.0mm_P35.00mm_Horizontal","Capacitor_THT/CP_Axial_L30.0mm_D12.5mm_P35.00mm_Horizontal","Capacitor_THT/CP_Axial_L30.0mm_D15.0mm_P35.00mm_Horizontal","Capacitor_THT/CP_Axial_L30.0mm_D18.0mm_P35.00mm_Horizontal","Capacitor_THT/CP_Axial_L34.5mm_D20.0mm_P41.00mm_Horizontal","Capacitor_THT/CP_Axial_L37.0mm_D13.0mm_P43.00mm_Horizontal","Capacitor_THT/CP_Axial_L37.0mm_D16.0mm_P43.00mm_Horizontal","Capacitor_THT/CP_Axial_L37.0mm_D20.0mm_P43.00mm_Horizontal","Capacitor_THT/CP_Axial_L38.0mm_D18.0mm_P44.00mm_Horizontal","Capacitor_THT/CP_Axial_L38.0mm_D21.0mm_P44.00mm_Horizontal","Capacitor_THT/CP_Axial_L40.0mm_D16.0mm_P48.00mm_Horizontal","Capacitor_THT/CP_Axial_L42.0mm_D23.0mm_P45.00mm_Horizontal","Capacitor_THT/CP_Axial_L42.0mm_D26.0mm_P45.00mm_Horizontal","Capacitor_THT/CP_Axial_L42.0mm_D29.0mm_P45.00mm_Horizontal","Capacitor_THT/CP_Axial_L42.0mm_D32.0mm_P45.00mm_Horizontal","Capacitor_THT/CP_Axial_L42.0mm_D35.0mm_P45.00mm_Horizontal","Capacitor_THT/CP_Axial_L42.5mm_D20.0mm_P49.00mm_Horizontal","Capacitor_THT/CP_Axial_L46.0mm_D20.0mm_P52.00mm_Horizontal","Capacitor_THT/CP_Axial_L55.0mm_D23.0mm_P60.00mm_Horizontal","Capacitor_THT/CP_Axial_L55.0mm_D26.0mm_P60.00mm_Horizontal","Capacitor_THT/CP_Axial_L55.0mm_D29.0mm_P60.00mm_Horizontal","Capacitor_THT/CP_Axial_L55.0mm_D32.0mm_P60.00mm_Horizontal","Capacitor_THT/CP_Axial_L55.0mm_D35.0mm_P60.00mm_Horizontal","Capacitor_THT/CP_Axial_L67.0mm_D23.0mm_P75.00mm_Horizontal","Capacitor_THT/CP_Axial_L67.0mm_D26.0mm_P75.00mm_Horizontal","Capacitor_THT/CP_Axial_L67.0mm_D29.0mm_P75.00mm_Horizontal","Capacitor_THT/CP_Axial_L67.0mm_D32.0mm_P75.00mm_Horizontal","Capacitor_THT/CP_Axial_L67.0mm_D35.0mm_P75.00mm_Horizontal","Capacitor_THT/CP_Axial_L80.0mm_D23.0mm_P85.00mm_Horizontal","Capacitor_THT/CP_Axial_L80.0mm_D26.0mm_P85.00mm_Horizontal","Capacitor_THT/CP_Axial_L80.0mm_D29.0mm_P85.00mm_Horizontal","Capacitor_THT/CP_Axial_L80.0mm_D32.0mm_P85.00mm_Horizontal","Capacitor_THT/CP_Axial_L80.0mm_D35.0mm_P85.00mm_Horizontal","Capacitor_THT/CP_Axial_L93.0mm_D23.0mm_P100.00mm_Horizontal","Capacitor_THT/CP_Axial_L93.0mm_D26.0mm_P100.00mm_Horizontal","Capacitor_THT/CP_Axial_L93.0mm_D29.0mm_P100.00mm_Horizontal","Capacitor_THT/CP_Axial_L93.0mm_D32.0mm_P100.00mm_Horizontal","Capacitor_THT/CP_Axial_L93.0mm_D35.0mm_P100.00mm_Horizontal","Capacitor_THT/CP_Radial_D10.0mm_P2.50mm","Capacitor_THT/CP_Radial_D10.0mm_P2.50mm_P5.00mm","Capacitor_THT/CP_Radial_D10.0mm_P3.50mm","Capacitor_THT/CP_Radial_D10.0mm_P3.80mm","Capacitor_THT/CP_Radial_D10.0mm_P5.00mm","Capacitor_THT/CP_Radial_D10.0mm_P5.00mm_P7.50mm","Capacitor_THT/CP_Radial_D10.0mm_P7.50mm","Capacitor_THT/CP_Radial_D12.5mm_P2.50mm","Capacitor_THT/CP_Radial_D12.5mm_P5.00mm","Capacitor_THT/CP_Radial_D12.5mm_P7.50mm","Capacitor_THT/CP_Radial_D13.0mm_P2.50mm","Capacitor_THT/CP_Radial_D13.0mm_P5.00mm","Capacitor_THT/CP_Radial_D13.0mm_P7.50mm","Capacitor_THT/CP_Radial_D14.0mm_P5.00mm","Capacitor_THT/CP_Radial_D14.0mm_P7.50mm","Capacitor_THT/CP_Radial_D16.0mm_P7.50mm","Capacitor_THT/CP_Radial_D17.0mm_P7.50mm","Capacitor_THT/CP_Radial_D18.0mm_P7.50mm","Capacitor_THT/CP_Radial_D22.0mm_P10.00mm_3pin_SnapIn","Capacitor_THT/CP_Radial_D22.0mm_P10.00mm_SnapIn","Capacitor_THT/CP_Radial_D24.0mm_P10.00mm_3pin_SnapIn","Capacitor_THT/CP_Radial_D24.0mm_P10.00mm_SnapIn","Capacitor_THT/CP_Radial_D25.0mm_P10.00mm_3pin_SnapIn","Capacitor_THT/CP_Radial_D25.0mm_P10.00mm_SnapIn","Capacitor_THT/CP_Radial_D26.0mm_P10.00mm_3pin_SnapIn","Capacitor_THT/CP_Radial_D26.0mm_P10.00mm_SnapIn","Capacitor_THT/CP_Radial_D30.0mm_P10.00mm_3pin_SnapIn","Capacitor_THT/CP_Radial_D30.0mm_P10.00mm_SnapIn","Capacitor_THT/CP_Radial_D35.0mm_P10.00mm_3pin_SnapIn","Capacitor_THT/CP_Radial_D35.0mm_P10.00mm_SnapIn","Capacitor_THT/CP_Radial_D4.0mm_P1.50mm","Capacitor_THT/CP_Radial_D4.0mm_P2.00mm","Capacitor_THT/CP_Radial_D40.0mm_P10.00mm_3pin_SnapIn","Capacitor_THT/CP_Radial_D40.0mm_P10.00mm_SnapIn","Capacitor_THT/CP_Radial_D5.0mm_P2.00mm","Capacitor_THT/CP_Radial_D5.0mm_P2.50mm","Capacitor_THT/CP_Radial_D6.3mm_P2.50mm","Capacitor_THT/CP_Radial_D7.5mm_P2.50mm","Capacitor_THT/CP_Radial_D8.0mm_P2.50mm","Capacitor_THT/CP_Radial_D8.0mm_P3.50mm","Capacitor_THT/CP_Radial_D8.0mm_P3.80mm","Capacitor_THT/CP_Radial_D8.0mm_P5.00mm","Capacitor_THT/CP_Radial_Tantal_D10.5mm_P2.50mm","Capacitor_THT/CP_Radial_Tantal_D10.5mm_P5.00mm","Capacitor_THT/CP_Radial_Tantal_D4.5mm_P2.50mm","Capacitor_THT/CP_Radial_Tantal_D4.5mm_P5.00mm","Capacitor_THT/CP_Radial_Tantal_D5.0mm_P2.50mm","Capacitor_THT/CP_Radial_Tantal_D5.0mm_P5.00mm","Capacitor_THT/CP_Radial_Tantal_D5.5mm_P2.50mm","Capacitor_THT/CP_Radial_Tantal_D5.5mm_P5.00mm","Capacitor_THT/CP_Radial_Tantal_D6.0mm_P2.50mm","Capacitor_THT/CP_Radial_Tantal_D6.0mm_P5.00mm","Capacitor_THT/CP_Radial_Tantal_D7.0mm_P2.50mm","Capacitor_THT/CP_Radial_Tantal_D7.0mm_P5.00mm","Capacitor_THT/CP_Radial_Tantal_D8.0mm_P2.50mm","Capacitor_THT/CP_Radial_Tantal_D8.0mm_P5.00mm","Capacitor_THT/CP_Radial_Tantal_D9.0mm_P2.50mm","Capacitor_THT/CP_Radial_Tantal_D9.0mm_P5.00mm","Capacitor_THT/C_Axial_L12.0mm_D10.5mm_P15.00mm_Horizontal","Capacitor_THT/C_Axial_L12.0mm_D10.5mm_P20.00mm_Horizontal","Capacitor_THT/C_Axial_L12.0mm_D6.5mm_P15.00mm_Horizontal","Capacitor_THT/C_Axial_L12.0mm_D6.5mm_P20.00mm_Horizontal","Capacitor_THT/C_Axial_L12.0mm_D7.5mm_P15.00mm_Horizontal","Capacitor_THT/C_Axial_L12.0mm_D7.5mm_P20.00mm_Horizontal","Capacitor_THT/C_Axial_L12.0mm_D8.5mm_P15.00mm_Horizontal","Capacitor_THT/C_Axial_L12.0mm_D8.5mm_P20.00mm_Horizontal","Capacitor_THT/C_Axial_L12.0mm_D9.5mm_P15.00mm_Horizontal","Capacitor_THT/C_Axial_L12.0mm_D9.5mm_P20.00mm_Horizontal","Capacitor_THT/C_Axial_L17.0mm_D6.5mm_P20.00mm_Horizontal","Capacitor_THT/C_Axial_L17.0mm_D6.5mm_P25.00mm_Horizontal","Capacitor_THT/C_Axial_L17.0mm_D7.0mm_P20.00mm_Horizontal","Capacitor_THT/C_Axial_L17.0mm_D7.0mm_P25.00mm_Horizontal","Capacitor_THT/C_Axial_L19.0mm_D7.5mm_P25.00mm_Horizontal","Capacitor_THT/C_Axial_L19.0mm_D8.0mm_P25.00mm_Horizontal","Capacitor_THT/C_Axial_L19.0mm_D9.0mm_P25.00mm_Horizontal","Capacitor_THT/C_Axial_L19.0mm_D9.5mm_P25.00mm_Horizontal","Capacitor_THT/C_Axial_L22.0mm_D10.5mm_P27.50mm_Horizontal","Capacitor_THT/C_Axial_L22.0mm_D9.5mm_P27.50mm_Horizontal","Capacitor_THT/C_Axial_L3.8mm_D2.6mm_P10.00mm_Horizontal","Capacitor_THT/C_Axial_L3.8mm_D2.6mm_P12.50mm_Horizontal","Capacitor_THT/C_Axial_L3.8mm_D2.6mm_P15.00mm_Horizontal","Capacitor_THT/C_Axial_L3.8mm_D2.6mm_P7.50mm_Horizontal","Capacitor_THT/C_Axial_L5.1mm_D3.1mm_P10.00mm_Horizontal","Capacitor_THT/C_Axial_L5.1mm_D3.1mm_P12.50mm_Horizontal","Capacitor_THT/C_Axial_L5.1mm_D3.1mm_P15.00mm_Horizontal","Capacitor_THT/C_Axial_L5.1mm_D3.1mm_P7.50mm_Horizontal","Capacitor_THT/C_Disc_D10.0mm_W2.5mm_P5.00mm","Capacitor_THT/C_Disc_D10.5mm_W5.0mm_P10.00mm","Capacitor_THT/C_Disc_D10.5mm_W5.0mm_P5.00mm","Capacitor_THT/C_Disc_D10.5mm_W5.0mm_P7.50mm","Capacitor_THT/C_Disc_D11.0mm_W5.0mm_P10.00mm","Capacitor_THT/C_Disc_D11.0mm_W5.0mm_P5.00mm","Capacitor_THT/C_Disc_D11.0mm_W5.0mm_P7.50mm","Capacitor_THT/C_Disc_D12.0mm_W4.4mm_P7.75mm","Capacitor_THT/C_Disc_D12.5mm_W5.0mm_P10.00mm","Capacitor_THT/C_Disc_D12.5mm_W5.0mm_P7.50mm","Capacitor_THT/C_Disc_D14.5mm_W5.0mm_P10.00mm","Capacitor_THT/C_Disc_D14.5mm_W5.0mm_P7.50mm","Capacitor_THT/C_Disc_D16.0mm_W5.0mm_P10.00mm","Capacitor_THT/C_Disc_D16.0mm_W5.0mm_P7.50mm","Capacitor_THT/C_Disc_D3.0mm_W1.6mm_P2.50mm","Capacitor_THT/C_Disc_D3.0mm_W2.0mm_P2.50mm","Capacitor_THT/C_Disc_D3.4mm_W2.1mm_P2.50mm","Capacitor_THT/C_Disc_D3.8mm_W2.6mm_P2.50mm","Capacitor_THT/C_Disc_D4.3mm_W1.9mm_P5.00mm","Capacitor_THT/C_Disc_D4.7mm_W2.5mm_P5.00mm","Capacitor_THT/C_Disc_D5.0mm_W2.5mm_P2.50mm","Capacitor_THT/C_Disc_D5.0mm_W2.5mm_P5.00mm","Capacitor_THT/C_Disc_D5.1mm_W3.2mm_P5.00mm","Capacitor_THT/C_Disc_D6.0mm_W2.5mm_P5.00mm","Capacitor_THT/C_Disc_D6.0mm_W4.4mm_P5.00mm","Capacitor_THT/C_Disc_D7.0mm_W2.5mm_P5.00mm","Capacitor_THT/C_Disc_D7.5mm_W2.5mm_P5.00mm","Capacitor_THT/C_Disc_D7.5mm_W4.4mm_P5.00mm","Capacitor_THT/C_Disc_D7.5mm_W5.0mm_P10.00mm","Capacitor_THT/C_Disc_D7.5mm_W5.0mm_P5.00mm","Capacitor_THT/C_Disc_D7.5mm_W5.0mm_P7.50mm","Capacitor_THT/C_Disc_D8.0mm_W2.5mm_P5.00mm","Capacitor_THT/C_Disc_D8.0mm_W5.0mm_P10.00mm","Capacitor_THT/C_Disc_D8.0mm_W5.0mm_P5.00mm","Capacitor_THT/C_Disc_D8.0mm_W5.0mm_P7.50mm","Capacitor_THT/C_Disc_D9.0mm_W2.5mm_P5.00mm","Capacitor_THT/C_Disc_D9.0mm_W5.0mm_P10.00mm","Capacitor_THT/C_Disc_D9.0mm_W5.0mm_P5.00mm","Capacitor_THT/C_Disc_D9.0mm_W5.0mm_P7.50mm","Capacitor_THT/C_Radial_D10.0mm_H12.5mm_P5.00mm","Capacitor_THT/C_Radial_D10.0mm_H16.0mm_P5.00mm","Capacitor_THT/C_Radial_D10.0mm_H20.0mm_P5.00mm","Capacitor_THT/C_Radial_D12.5mm_H20.0mm_P5.00mm","Capacitor_THT/C_Radial_D12.5mm_H25.0mm_P5.00mm","Capacitor_THT/C_Radial_D16.0mm_H25.0mm_P7.50mm","Capacitor_THT/C_Radial_D16.0mm_H31.5mm_P7.50mm","Capacitor_THT/C_Radial_D18.0mm_H35.5mm_P7.50mm","Capacitor_THT/C_Radial_D4.0mm_H5.0mm_P1.50mm","Capacitor_THT/C_Radial_D4.0mm_H7.0mm_P1.50mm","Capacitor_THT/C_Radial_D5.0mm_H11.0mm_P2.00mm","Capacitor_THT/C_Radial_D5.0mm_H5.0mm_P2.00mm","Capacitor_THT/C_Radial_D5.0mm_H7.0mm_P2.00mm","Capacitor_THT/C_Radial_D6.3mm_H11.0mm_P2.50mm","Capacitor_THT/C_Radial_D6.3mm_H5.0mm_P2.50mm","Capacitor_THT/C_Radial_D6.3mm_H7.0mm_P2.50mm","Capacitor_THT/C_Radial_D8.0mm_H11.5mm_P3.50mm","Capacitor_THT/C_Radial_D8.0mm_H7.0mm_P3.50mm","Capacitor_THT/C_Rect_L10.0mm_W2.5mm_P7.50mm_MKS4","Capacitor_THT/C_Rect_L10.0mm_W3.0mm_P7.50mm_FKS3_FKP3","Capacitor_THT/C_Rect_L10.0mm_W3.0mm_P7.50mm_MKS4","Capacitor_THT/C_Rect_L10.0mm_W4.0mm_P7.50mm_FKS3_FKP3","Capacitor_THT/C_Rect_L10.0mm_W4.0mm_P7.50mm_MKS4","Capacitor_THT/C_Rect_L10.0mm_W5.0mm_P5.00mm_P7.50mm","Capacitor_THT/C_Rect_L10.3mm_W4.5mm_P7.50mm_MKS4","Capacitor_THT/C_Rect_L10.3mm_W5.0mm_P7.50mm_MKS4","Capacitor_THT/C_Rect_L10.3mm_W5.7mm_P7.50mm_MKS4","Capacitor_THT/C_Rect_L10.3mm_W7.2mm_P7.50mm_MKS4","Capacitor_THT/C_Rect_L11.0mm_W2.8mm_P10.00mm_MKT","Capacitor_THT/C_Rect_L11.0mm_W3.4mm_P10.00mm_MKT","Capacitor_THT/C_Rect_L11.0mm_W3.5mm_P10.00mm_MKT","Capacitor_THT/C_Rect_L11.0mm_W4.2mm_P10.00mm_MKT","Capacitor_THT/C_Rect_L11.0mm_W4.3mm_P10.00mm_MKT","Capacitor_THT/C_Rect_L11.0mm_W5.1mm_P10.00mm_MKT","Capacitor_THT/C_Rect_L11.0mm_W5.3mm_P10.00mm_MKT","Capacitor_THT/C_Rect_L11.0mm_W6.3mm_P10.00mm_MKT","Capacitor_THT/C_Rect_L11.0mm_W6.4mm_P10.00mm_MKT","Capacitor_THT/C_Rect_L11.0mm_W7.3mm_P10.00mm_MKT","Capacitor_THT/C_Rect_L11.0mm_W8.8mm_P10.00mm_MKT","Capacitor_THT/C_Rect_L11.5mm_W2.0mm_P10.00mm_MKT","Capacitor_THT/C_Rect_L11.5mm_W2.6mm_P10.00mm_MKT","Capacitor_THT/C_Rect_L11.5mm_W2.8mm_P10.00mm_MKT","Capacitor_THT/C_Rect_L11.5mm_W3.2mm_P10.00mm_MKT","Capacitor_THT/C_Rect_L11.5mm_W3.5mm_P10.00mm_MKT","Capacitor_THT/C_Rect_L11.5mm_W3.6mm_P10.00mm_MKT","Capacitor_THT/C_Rect_L11.5mm_W4.0mm_P10.00mm_MKT","Capacitor_THT/C_Rect_L11.5mm_W4.3mm_P10.00mm_MKT","Capacitor_THT/C_Rect_L11.5mm_W4.5mm_P10.00mm_MKT","Capacitor_THT/C_Rect_L11.5mm_W5.0mm_P10.00mm_MKT","Capacitor_THT/C_Rect_L11.5mm_W5.1mm_P10.00mm_MKT","Capacitor_THT/C_Rect_L11.5mm_W5.2mm_P10.00mm_MKT","Capacitor_THT/C_Rect_L11.5mm_W5.6mm_P10.00mm_MKT","Capacitor_THT/C_Rect_L11.5mm_W6.4mm_P10.00mm_MKT","Capacitor_THT/C_Rect_L11.5mm_W6.6mm_P10.00mm_MKT","Capacitor_THT/C_Rect_L11.5mm_W6.9mm_P10.00mm_MKT","Capacitor_THT/C_Rect_L11.5mm_W7.3mm_P10.00mm_MKT","Capacitor_THT/C_Rect_L11.5mm_W7.5mm_P10.00mm_MKT","Capacitor_THT/C_Rect_L11.5mm_W7.8mm_P10.00mm_MKT","Capacitor_THT/C_Rect_L11.5mm_W8.0mm_P10.00mm_MKT","Capacitor_THT/C_Rect_L11.5mm_W8.8mm_P10.00mm_MKT","Capacitor_THT/C_Rect_L11.5mm_W9.5mm_P10.00mm_MKT","Capacitor_THT/C_Rect_L11.5mm_W9.8mm_P10.00mm_MKT","Capacitor_THT/C_Rect_L13.0mm_W3.0mm_P10.00mm_FKS3_FKP3_MKS4","Capacitor_THT/C_Rect_L13.0mm_W4.0mm_P10.00mm_FKS3_FKP3_MKS4","Capacitor_THT/C_Rect_L13.0mm_W5.0mm_P10.00mm_FKS3_FKP3_MKS4","Capacitor_THT/C_Rect_L13.0mm_W6.0mm_P10.00mm_FKS3_FKP3_MKS4","Capacitor_THT/C_Rect_L13.0mm_W6.5mm_P7.50mm_P10.00mm","Capacitor_THT/C_Rect_L13.0mm_W8.0mm_P10.00mm_FKS3_FKP3_MKS4","Capacitor_THT/C_Rect_L13.5mm_W4.0mm_P10.00mm_FKS3_FKP3_MKS4","Capacitor_THT/C_Rect_L13.5mm_W5.0mm_P10.00mm_FKS3_FKP3_MKS4","Capacitor_THT/C_Rect_L16.5mm_W10.7mm_P15.00mm_MKT","Capacitor_THT/C_Rect_L16.5mm_W10.9mm_P15.00mm_MKT","Capacitor_THT/C_Rect_L16.5mm_W11.2mm_P15.00mm_MKT","Capacitor_THT/C_Rect_L16.5mm_W11.8mm_P15.00mm_MKT","Capacitor_THT/C_Rect_L16.5mm_W13.5mm_P15.00mm_MKT","Capacitor_THT/C_Rect_L16.5mm_W13.7mm_P15.00mm_MKT","Capacitor_THT/C_Rect_L16.5mm_W13.9mm_P15.00mm_MKT","Capacitor_THT/C_Rect_L16.5mm_W4.7mm_P15.00mm_MKT","Capacitor_THT/C_Rect_L16.5mm_W4.9mm_P15.00mm_MKT","Capacitor_THT/C_Rect_L16.5mm_W5.0mm_P15.00mm_MKT","Capacitor_THT/C_Rect_L16.5mm_W6.0mm_P15.00mm_MKT","Capacitor_THT/C_Rect_L16.5mm_W7.0mm_P15.00mm_MKT","Capacitor_THT/C_Rect_L16.5mm_W7.3mm_P15.00mm_MKT","Capacitor_THT/C_Rect_L16.5mm_W8.7mm_P15.00mm_MKT","Capacitor_THT/C_Rect_L16.5mm_W8.9mm_P15.00mm_MKT","Capacitor_THT/C_Rect_L16.5mm_W9.0mm_P15.00mm_MKT","Capacitor_THT/C_Rect_L16.5mm_W9.2mm_P15.00mm_MKT","Capacitor_THT/C_Rect_L18.0mm_W11.0mm_P15.00mm_FKS3_FKP3","Capacitor_THT/C_Rect_L18.0mm_W5.0mm_P15.00mm_FKS3_FKP3","Capacitor_THT/C_Rect_L18.0mm_W6.0mm_P15.00mm_FKS3_FKP3","Capacitor_THT/C_Rect_L18.0mm_W7.0mm_P15.00mm_FKS3_FKP3","Capacitor_THT/C_Rect_L18.0mm_W8.0mm_P15.00mm_FKS3_FKP3","Capacitor_THT/C_Rect_L18.0mm_W9.0mm_P15.00mm_FKS3_FKP3","Capacitor_THT/C_Rect_L19.0mm_W11.0mm_P15.00mm_MKS4","Capacitor_THT/C_Rect_L19.0mm_W5.0mm_P15.00mm_MKS4","Capacitor_THT/C_Rect_L19.0mm_W6.0mm_P15.00mm_MKS4","Capacitor_THT/C_Rect_L19.0mm_W7.0mm_P15.00mm_MKS4","Capacitor_THT/C_Rect_L19.0mm_W8.0mm_P15.00mm_MKS4","Capacitor_THT/C_Rect_L19.0mm_W9.0mm_P15.00mm_MKS4","Capacitor_THT/C_Rect_L24.0mm_W10.1mm_P22.50mm_MKT","Capacitor_THT/C_Rect_L24.0mm_W10.3mm_P22.50mm_MKT","Capacitor_THT/C_Rect_L24.0mm_W10.9mm_P22.50mm_MKT","Capacitor_THT/C_Rect_L24.0mm_W12.2mm_P22.50mm_MKT","Capacitor_THT/C_Rect_L24.0mm_W12.6mm_P22.50mm_MKT","Capacitor_THT/C_Rect_L24.0mm_W12.8mm_P22.50mm_MKT","Capacitor_THT/C_Rect_L24.0mm_W7.0mm_P22.50mm_MKT","Capacitor_THT/C_Rect_L24.0mm_W8.3mm_P22.50mm_MKT","Capacitor_THT/C_Rect_L24.0mm_W8.6mm_P22.50mm_MKT","Capacitor_THT/C_Rect_L26.5mm_W10.5mm_P22.50mm_MKS4","Capacitor_THT/C_Rect_L26.5mm_W11.5mm_P22.50mm_MKS4","Capacitor_THT/C_Rect_L26.5mm_W5.0mm_P22.50mm_MKS4","Capacitor_THT/C_Rect_L26.5mm_W6.0mm_P22.50mm_MKS4","Capacitor_THT/C_Rect_L26.5mm_W7.0mm_P22.50mm_MKS4","Capacitor_THT/C_Rect_L26.5mm_W8.5mm_P22.50mm_MKS4","Capacitor_THT/C_Rect_L27.0mm_W11.0mm_P22.00mm","Capacitor_THT/C_Rect_L27.0mm_W9.0mm_P22.00mm","Capacitor_THT/C_Rect_L27.0mm_W9.0mm_P23.00mm","Capacitor_THT/C_Rect_L28.0mm_W10.0mm_P22.50mm_MKS4","Capacitor_THT/C_Rect_L28.0mm_W12.0mm_P22.50mm_MKS4","Capacitor_THT/C_Rect_L28.0mm_W8.0mm_P22.50mm_MKS4","Capacitor_THT/C_Rect_L29.0mm_W11.0mm_P27.50mm_MKT","Capacitor_THT/C_Rect_L29.0mm_W11.9mm_P27.50mm_MKT","Capacitor_THT/C_Rect_L29.0mm_W12.2mm_P27.50mm_MKT","Capacitor_THT/C_Rect_L29.0mm_W13.0mm_P27.50mm_MKT","Capacitor_THT/C_Rect_L29.0mm_W13.8mm_P27.50mm_MKT","Capacitor_THT/C_Rect_L29.0mm_W14.2mm_P27.50mm_MKT","Capacitor_THT/C_Rect_L29.0mm_W16.0mm_P27.50mm_MKT","Capacitor_THT/C_Rect_L29.0mm_W7.6mm_P27.50mm_MKT","Capacitor_THT/C_Rect_L29.0mm_W7.8mm_P27.50mm_MKT","Capacitor_THT/C_Rect_L29.0mm_W7.9mm_P27.50mm_MKT","Capacitor_THT/C_Rect_L29.0mm_W9.1mm_P27.50mm_MKT","Capacitor_THT/C_Rect_L29.0mm_W9.6mm_P27.50mm_MKT","Capacitor_THT/C_Rect_L31.5mm_W11.0mm_P27.50mm_MKS4","Capacitor_THT/C_Rect_L31.5mm_W13.0mm_P27.50mm_MKS4","Capacitor_THT/C_Rect_L31.5mm_W15.0mm_P27.50mm_MKS4","Capacitor_THT/C_Rect_L31.5mm_W17.0mm_P27.50mm_MKS4","Capacitor_THT/C_Rect_L31.5mm_W20.0mm_P27.50mm_MKS4","Capacitor_THT/C_Rect_L31.5mm_W9.0mm_P27.50mm_MKS4","Capacitor_THT/C_Rect_L32.0mm_W15.0mm_P27.00mm","Capacitor_THT/C_Rect_L33.0mm_W13.0mm_P27.50mm_MKS4","Capacitor_THT/C_Rect_L33.0mm_W15.0mm_P27.50mm_MKS4","Capacitor_THT/C_Rect_L33.0mm_W20.0mm_P27.50mm_MKS4","Capacitor_THT/C_Rect_L4.0mm_W2.5mm_P2.50mm","Capacitor_THT/C_Rect_L4.6mm_W2.0mm_P2.50mm_MKS02_FKP02","Capacitor_THT/C_Rect_L4.6mm_W3.0mm_P2.50mm_MKS02_FKP02","Capacitor_THT/C_Rect_L4.6mm_W3.8mm_P2.50mm_MKS02_FKP02","Capacitor_THT/C_Rect_L4.6mm_W4.6mm_P2.50mm_MKS02_FKP02","Capacitor_THT/C_Rect_L4.6mm_W5.5mm_P2.50mm_MKS02_FKP02","Capacitor_THT/C_Rect_L41.5mm_W11.0mm_P37.50mm_MKS4","Capacitor_THT/C_Rect_L41.5mm_W13.0mm_P37.50mm_MKS4","Capacitor_THT/C_Rect_L41.5mm_W15.0mm_P37.50mm_MKS4","Capacitor_THT/C_Rect_L41.5mm_W17.0mm_P37.50mm_MKS4","Capacitor_THT/C_Rect_L41.5mm_W19.0mm_P37.50mm_MKS4","Capacitor_THT/C_Rect_L41.5mm_W20.0mm_P37.50mm_MKS4","Capacitor_THT/C_Rect_L41.5mm_W24.0mm_P37.50mm_MKS4","Capacitor_THT/C_Rect_L41.5mm_W31.0mm_P37.50mm_MKS4","Capacitor_THT/C_Rect_L41.5mm_W35.0mm_P37.50mm_MKS4","Capacitor_THT/C_Rect_L41.5mm_W40.0mm_P37.50mm_MKS4","Capacitor_THT/C_Rect_L41.5mm_W9.0mm_P37.50mm_MKS4","Capacitor_THT/C_Rect_L7.0mm_W2.0mm_P5.00mm","Capacitor_THT/C_Rect_L7.0mm_W2.5mm_P5.00mm","Capacitor_THT/C_Rect_L7.0mm_W3.5mm_P2.50mm_P5.00mm","Capacitor_THT/C_Rect_L7.0mm_W3.5mm_P5.00mm","Capacitor_THT/C_Rect_L7.0mm_W4.5mm_P5.00mm","Capacitor_THT/C_Rect_L7.0mm_W6.0mm_P5.00mm","Capacitor_THT/C_Rect_L7.0mm_W6.5mm_P5.00mm","Capacitor_THT/C_Rect_L7.2mm_W11.0mm_P5.00mm_FKS2_FKP2_MKS2_MKP2","Capacitor_THT/C_Rect_L7.2mm_W2.5mm_P5.00mm","Capacitor_THT/C_Rect_L7.2mm_W2.5mm_P5.00mm_FKS2_FKP2_MKS2_MKP2","Capacitor_THT/C_Rect_L7.2mm_W3.0mm_P5.00mm_FKS2_FKP2_MKS2_MKP2","Capacitor_THT/C_Rect_L7.2mm_W3.5mm_P5.00mm","Capacitor_THT/C_Rect_L7.2mm_W3.5mm_P5.00mm_FKS2_FKP2_MKS2_MKP2","Capacitor_THT/C_Rect_L7.2mm_W4.5mm_P5.00mm","Capacitor_THT/C_Rect_L7.2mm_W4.5mm_P5.00mm_FKS2_FKP2_MKS2_MKP2","Capacitor_THT/C_Rect_L7.2mm_W5.0mm_P5.00mm","Capacitor_THT/C_Rect_L7.2mm_W5.5mm_P5.00mm_FKS2_FKP2_MKS2_MKP2","Capacitor_THT/C_Rect_L7.2mm_W6.0mm_P5.00mm","Capacitor_THT/C_Rect_L7.2mm_W7.2mm_P5.00mm","Capacitor_THT/C_Rect_L7.2mm_W7.2mm_P5.00mm_FKS2_FKP2_MKS2_MKP2","Capacitor_THT/C_Rect_L7.2mm_W8.5mm_P5.00mm_FKP2_FKP2_MKS2_MKP2","Capacitor_THT/C_Rect_L7.5mm_W6.5mm_P5.00mm","Capacitor_THT/C_Rect_L9.0mm_W2.5mm_P7.50mm_MKT","Capacitor_THT/C_Rect_L9.0mm_W2.6mm_P7.50mm_MKT","Capacitor_THT/C_Rect_L9.0mm_W2.7mm_P7.50mm_MKT","Capacitor_THT/C_Rect_L9.0mm_W3.2mm_P7.50mm_MKT","Capacitor_THT/C_Rect_L9.0mm_W3.3mm_P7.50mm_MKT","Capacitor_THT/C_Rect_L9.0mm_W3.4mm_P7.50mm_MKT","Capacitor_THT/C_Rect_L9.0mm_W3.6mm_P7.50mm_MKT","Capacitor_THT/C_Rect_L9.0mm_W3.8mm_P7.50mm_MKT","Capacitor_THT/C_Rect_L9.0mm_W3.9mm_P7.50mm_MKT","Capacitor_THT/C_Rect_L9.0mm_W4.0mm_P7.50mm_MKT","Capacitor_THT/C_Rect_L9.0mm_W4.2mm_P7.50mm_MKT","Capacitor_THT/C_Rect_L9.0mm_W4.9mm_P7.50mm_MKT","Capacitor_THT/C_Rect_L9.0mm_W5.1mm_P7.50mm_MKT","Capacitor_THT/C_Rect_L9.0mm_W5.7mm_P7.50mm_MKT","Capacitor_THT/C_Rect_L9.0mm_W6.4mm_P7.50mm_MKT","Capacitor_THT/C_Rect_L9.0mm_W6.7mm_P7.50mm_MKT","Capacitor_THT/C_Rect_L9.0mm_W7.7mm_P7.50mm_MKT","Capacitor_THT/C_Rect_L9.0mm_W8.5mm_P7.50mm_MKT","Capacitor_THT/C_Rect_L9.0mm_W9.5mm_P7.50mm_MKT","Capacitor_THT/C_Rect_L9.0mm_W9.8mm_P7.50mm_MKT","Capacitor_THT/DX_5R5HxxxxU_D11.5mm_P10.00mm","Capacitor_THT/DX_5R5VxxxxU_D11.5mm_P5.00mm","Capacitor_THT/DX_5R5VxxxxU_D19.0mm_P5.00mm","Capacitor_Tantalum_SMD/CP_EIA-1608-08_AVX-J","Capacitor_Tantalum_SMD/CP_EIA-1608-08_AVX-J_HandSolder","Capacitor_Tantalum_SMD/CP_EIA-1608-10_AVX-L","Capacitor_Tantalum_SMD/CP_EIA-1608-10_AVX-L_HandSolder","Capacitor_Tantalum_SMD/CP_EIA-2012-12_Kemet-R","Capacitor_Tantalum_SMD/CP_EIA-2012-12_Kemet-R_HandSolder","Capacitor_Tantalum_SMD/CP_EIA-2012-15_AVX-P","Capacitor_Tantalum_SMD/CP_EIA-2012-15_AVX-P_HandSolder","Capacitor_Tantalum_SMD/CP_EIA-3216-10_Kemet-I","Capacitor_Tantalum_SMD/CP_EIA-3216-10_Kemet-I_HandSolder","Capacitor_Tantalum_SMD/CP_EIA-3216-12_Kemet-S","Capacitor_Tantalum_SMD/CP_EIA-3216-12_Kemet-S_HandSolder","Capacitor_Tantalum_SMD/CP_EIA-3216-18_Kemet-A","Capacitor_Tantalum_SMD/CP_EIA-3216-18_Kemet-A_HandSolder","Capacitor_Tantalum_SMD/CP_EIA-3528-12_Kemet-T","Capacitor_Tantalum_SMD/CP_EIA-3528-12_Kemet-T_HandSolder","Capacitor_Tantalum_SMD/CP_EIA-3528-15_AVX-H","Capacitor_Tantalum_SMD/CP_EIA-3528-15_AVX-H_HandSolder","Capacitor_Tantalum_SMD/CP_EIA-3528-21_Kemet-B","Capacitor_Tantalum_SMD/CP_EIA-3528-21_Kemet-B_HandSolder","Capacitor_Tantalum_SMD/CP_EIA-6032-15_Kemet-U","Capacitor_Tantalum_SMD/CP_EIA-6032-15_Kemet-U_HandSolder","Capacitor_Tantalum_SMD/CP_EIA-6032-20_AVX-F","Capacitor_Tantalum_SMD/CP_EIA-6032-20_AVX-F_HandSolder","Capacitor_Tantalum_SMD/CP_EIA-6032-28_Kemet-C","Capacitor_Tantalum_SMD/CP_EIA-6032-28_Kemet-C_HandSolder","Capacitor_Tantalum_SMD/CP_EIA-7132-20_AVX-U","Capacitor_Tantalum_SMD/CP_EIA-7132-20_AVX-U_HandSolder","Capacitor_Tantalum_SMD/CP_EIA-7132-28_AVX-C","Capacitor_Tantalum_SMD/CP_EIA-7132-28_AVX-C_HandSolder","Capacitor_Tantalum_SMD/CP_EIA-7260-15_AVX-R","Capacitor_Tantalum_SMD/CP_EIA-7260-15_AVX-R_HandSolder","Capacitor_Tantalum_SMD/CP_EIA-7260-20_AVX-M","Capacitor_Tantalum_SMD/CP_EIA-7260-20_AVX-M_HandSolder","Capacitor_Tantalum_SMD/CP_EIA-7260-28_AVX-M","Capacitor_Tantalum_SMD/CP_EIA-7260-28_AVX-M_HandSolder","Capacitor_Tantalum_SMD/CP_EIA-7260-38_AVX-R","Capacitor_Tantalum_SMD/CP_EIA-7260-38_AVX-R_HandSolder","Capacitor_Tantalum_SMD/CP_EIA-7343-15_Kemet-W","Capacitor_Tantalum_SMD/CP_EIA-7343-15_Kemet-W_HandSolder","Capacitor_Tantalum_SMD/CP_EIA-7343-20_Kemet-V","Capacitor_Tantalum_SMD/CP_EIA-7343-20_Kemet-V_HandSolder","Capacitor_Tantalum_SMD/CP_EIA-7343-30_AVX-N","Capacitor_Tantalum_SMD/CP_EIA-7343-30_AVX-N_HandSolder","Capacitor_Tantalum_SMD/CP_EIA-7343-31_Kemet-D","Capacitor_Tantalum_SMD/CP_EIA-7343-31_Kemet-D_HandSolder","Capacitor_Tantalum_SMD/CP_EIA-7343-40_Kemet-Y","Capacitor_Tantalum_SMD/CP_EIA-7343-40_Kemet-Y_HandSolder","Capacitor_Tantalum_SMD/CP_EIA-7343-43_Kemet-X","Capacitor_Tantalum_SMD/CP_EIA-7343-43_Kemet-X_HandSolder","Capacitor_Tantalum_SMD/CP_EIA-7360-38_Kemet-E","Capacitor_Tantalum_SMD/CP_EIA-7360-38_Kemet-E_HandSolder","Capacitor_Tantalum_SMD/CP_EIA-7361-38_AVX-V","Capacitor_Tantalum_SMD/CP_EIA-7361-38_AVX-V_HandSolder","Capacitor_Tantalum_SMD/CP_EIA-7361-438_AVX-U","Capacitor_Tantalum_SMD/CP_EIA-7361-438_AVX-U_HandSolder","Connector/BJB_Pico_46.110.1001_Receptacle_Horizontal","Connector/Banana_Cliff_FCR7350B_S16N-PC_Horizontal","Connector/Banana_Cliff_FCR7350G_S16N-PC_Horizontal","Connector/Banana_Cliff_FCR7350L_S16N-PC_Horizontal","Connector/Banana_Cliff_FCR7350N_S16N-PC_Horizontal","Connector/Banana_Cliff_FCR7350R_S16N-PC_Horizontal","Connector/Banana_Cliff_FCR7350Y_S16N-PC_Horizontal","Connector/Banana_Jack_1Pin","Connector/Banana_Jack_2Pin","Connector/Banana_Jack_3Pin","Connector/CUI_PD-30","Connector/CUI_PD-30S","Connector/CUI_PD-30S_CircularHoles","Connector/CalTest_CT3151","Connector/Conn_C14_Receptacle_RightAngle_Schurter_DD21.01xx","Connector/Connector_SFP_and_Cage","Connector/DTF13-12Px","Connector/FanPinHeader_1x03_P2.54mm_Vertical","Connector/FanPinHeader_1x04_P2.54mm_Vertical","Connector/GB042-34S-H10","Connector/IHI_B6A-PCB-45_Vertical","Connector/JWT_A3963_1x02_P3.96mm_Vertical","Connector/Joint-Tech_C5080WR-04P_1x04_P5.08mm_Vertical","Connector/NS-Tech_Grove_1x04_P2mm_Vertical","Connector/OCN_OK-01GM030-04_2x15_P0.4mm_Vertical","Connector/SpringContact_Harwin_S1941-46R","Connector/Tag-Connect_TC2030-IDC-FP_2x03_P1.27mm_Vertical","Connector/Tag-Connect_TC2030-IDC-NL_2x03_P1.27mm_Vertical","Connector/Tag-Connect_TC2050-IDC-FP_2x05_P1.27mm_Vertical","Connector/Tag-Connect_TC2050-IDC-NL_2x05_P1.27mm_Vertical","Connector/Tag-Connect_TC2050-IDC-NL_2x05_P1.27mm_Vertical_with_bottom_clip","Connector/Tag-Connect_TC2070-IDC-FP_2x07_P1.27mm_Vertical","Connector_AMASS/AMASS_MR30PW-FB_1x03_P3.50mm_Horizontal","Connector_AMASS/AMASS_MR30PW-M_1x03_P3.50mm_Horizontal","Connector_AMASS/AMASS_XT30PW-F_1x02_P2.50mm_Horizontal","Connector_AMASS/AMASS_XT30PW-M_1x02_P2.50mm_Horizontal","Connector_AMASS/AMASS_XT30U-F_1x02_P5.0mm_Vertical","Connector_AMASS/AMASS_XT30U-M_1x02_P5.0mm_Vertical","Connector_AMASS/AMASS_XT30UPB-F_1x02_P5.0mm_Vertical","Connector_AMASS/AMASS_XT30UPB-M_1x02_P5.0mm_Vertical","Connector_AMASS/AMASS_XT60-F_1x02_P7.20mm_Vertical","Connector_AMASS/AMASS_XT60-M_1x02_P7.20mm_Vertical","Connector_AMASS/AMASS_XT60IPW-M_1x03_P7.20mm_Horizontal","Connector_AMASS/AMASS_XT60PW-F_1x02_P7.20mm_Horizontal","Connector_AMASS/AMASS_XT60PW-M_1x02_P7.20mm_Horizontal","Connector_AMASS/AMASS_XT90PW-M_1x02_P10.90mm_Horizontal","Connector_Amphenol/Amphenol_M8S-03PMMR-SF8001","Connector_Audio/Jack_3.5mm_CUI_SJ-3523-SMT_Horizontal","Connector_Audio/Jack_3.5mm_CUI_SJ-3524-SMT_Horizontal","Connector_Audio/Jack_3.5mm_CUI_SJ1-3513N_Horizontal","Connector_Audio/Jack_3.5mm_CUI_SJ1-3514N_Horizontal","Connector_Audio/Jack_3.5mm_CUI_SJ1-3515N_Horizontal","Connector_Audio/Jack_3.5mm_CUI_SJ1-3523N_Horizontal","Connector_Audio/Jack_3.5mm_CUI_SJ1-3524N_Horizontal","Connector_Audio/Jack_3.5mm_CUI_SJ1-3525N_Horizontal","Connector_Audio/Jack_3.5mm_CUI_SJ1-3533NG_Horizontal","Connector_Audio/Jack_3.5mm_CUI_SJ1-3533NG_Horizontal_CircularHoles","Connector_Audio/Jack_3.5mm_CUI_SJ1-3535NG_Horizontal","Connector_Audio/Jack_3.5mm_CUI_SJ1-3535NG_Horizontal_CircularHoles","Connector_Audio/Jack_3.5mm_CUI_SJ2-3593D-SMT_Horizontal","Connector_Audio/Jack_3.5mm_KoreanHropartsElec_PJ-320D-4A_Horizontal","Connector_Audio/Jack_3.5mm_Ledino_KB3SPRS_Horizontal","Connector_Audio/Jack_3.5mm_Lumberg_1503_02_Horizontal","Connector_Audio/Jack_3.5mm_Lumberg_1503_03_Horizontal","Connector_Audio/Jack_3.5mm_Lumberg_1503_07_Horizontal","Connector_Audio/Jack_3.5mm_PJ31060-I_Horizontal","Connector_Audio/Jack_3.5mm_PJ311_Horizontal","Connector_Audio/Jack_3.5mm_PJ320D_Horizontal","Connector_Audio/Jack_3.5mm_PJ320E_Horizontal","Connector_Audio/Jack_3.5mm_QingPu_WQP-PJ398SM_Vertical_CircularHoles","Connector_Audio/Jack_3.5mm_Switronic_ST-005-G_horizontal","Connector_Audio/Jack_3.5mm_Technik_TWP-3002_Horizontal","Connector_Audio/Jack_6.35mm_Neutrik_NJ2FD-V_Vertical","Connector_Audio/Jack_6.35mm_Neutrik_NJ3FD-V_Vertical","Connector_Audio/Jack_6.35mm_Neutrik_NJ5FD-V_Vertical","Connector_Audio/Jack_6.35mm_Neutrik_NJ6FD-V_Vertical","Connector_Audio/Jack_6.35mm_Neutrik_NJ6TB-V_Vertical","Connector_Audio/Jack_6.35mm_Neutrik_NMJ4HCD2_Horizontal","Connector_Audio/Jack_6.35mm_Neutrik_NMJ4HFD2_Horizontal","Connector_Audio/Jack_6.35mm_Neutrik_NMJ4HFD3_Horizontal","Connector_Audio/Jack_6.35mm_Neutrik_NMJ4HHD2_Horizontal","Connector_Audio/Jack_6.35mm_Neutrik_NMJ6HCD2_Horizontal","Connector_Audio/Jack_6.35mm_Neutrik_NMJ6HCD3_Horizontal","Connector_Audio/Jack_6.35mm_Neutrik_NMJ6HFD2-AU_Horizontal","Connector_Audio/Jack_6.35mm_Neutrik_NMJ6HFD2_Horizontal","Connector_Audio/Jack_6.35mm_Neutrik_NMJ6HFD3_Horizontal","Connector_Audio/Jack_6.35mm_Neutrik_NMJ6HFD4_Horizontal","Connector_Audio/Jack_6.35mm_Neutrik_NMJ6HHD2_Horizontal","Connector_Audio/Jack_6.35mm_Neutrik_NRJ3HF-1_Horizontal","Connector_Audio/Jack_6.35mm_Neutrik_NRJ4HF-1_Horizontal","Connector_Audio/Jack_6.35mm_Neutrik_NRJ4HF_Horizontal","Connector_Audio/Jack_6.35mm_Neutrik_NRJ4HH-1_Horizontal","Connector_Audio/Jack_6.35mm_Neutrik_NRJ4HH_Horizontal","Connector_Audio/Jack_6.35mm_Neutrik_NRJ6HF-1-AU_Horizontal","Connector_Audio/Jack_6.35mm_Neutrik_NRJ6HF-1_Horizontal","Connector_Audio/Jack_6.35mm_Neutrik_NRJ6HF-AU_Horizontal","Connector_Audio/Jack_6.35mm_Neutrik_NRJ6HF_Horizontal","Connector_Audio/Jack_6.35mm_Neutrik_NRJ6HH-1_Horizontal","Connector_Audio/Jack_6.35mm_Neutrik_NRJ6HH-AU_Horizontal","Connector_Audio/Jack_6.35mm_Neutrik_NRJ6HH_Horizontal","Connector_Audio/Jack_6.35mm_Neutrik_NRJ6HM-1-AU_Horizontal","Connector_Audio/Jack_6.35mm_Neutrik_NRJ6HM-1-PRE_Horizontal","Connector_Audio/Jack_6.35mm_Neutrik_NRJ6HM-1_Horizontal","Connector_Audio/Jack_6.35mm_Neutrik_NSJ12HC_Horizontal","Connector_Audio/Jack_6.35mm_Neutrik_NSJ12HF-1_Horizontal","Connector_Audio/Jack_6.35mm_Neutrik_NSJ12HH-1_Horizontal","Connector_Audio/Jack_6.35mm_Neutrik_NSJ12HL_Horizontal","Connector_Audio/Jack_6.35mm_Neutrik_NSJ8HC_Horizontal","Connector_Audio/Jack_6.35mm_Neutrik_NSJ8HL_Horizontal","Connector_Audio/Jack_XLR-6.35mm_Neutrik_NCJ10FI-H-0_Horizontal","Connector_Audio/Jack_XLR-6.35mm_Neutrik_NCJ10FI-H_Horizontal","Connector_Audio/Jack_XLR-6.35mm_Neutrik_NCJ10FI-V-0_Vertical","Connector_Audio/Jack_XLR-6.35mm_Neutrik_NCJ10FI-V_Vertical","Connector_Audio/Jack_XLR-6.35mm_Neutrik_NCJ5FI-H-0_Horizontal","Connector_Audio/Jack_XLR-6.35mm_Neutrik_NCJ5FI-H_Horizontal","Connector_Audio/Jack_XLR-6.35mm_Neutrik_NCJ5FI-V-0_Vertical","Connector_Audio/Jack_XLR-6.35mm_Neutrik_NCJ5FI-V_Vertical","Connector_Audio/Jack_XLR-6.35mm_Neutrik_NCJ6FA-H-0_Horizontal","Connector_Audio/Jack_XLR-6.35mm_Neutrik_NCJ6FA-H-DA_Horizontal","Connector_Audio/Jack_XLR-6.35mm_Neutrik_NCJ6FA-H_Horizontal","Connector_Audio/Jack_XLR-6.35mm_Neutrik_NCJ6FA-V-0_Vertical","Connector_Audio/Jack_XLR-6.35mm_Neutrik_NCJ6FA-V-DA_Vertical","Connector_Audio/Jack_XLR-6.35mm_Neutrik_NCJ6FA-V_Vertical","Connector_Audio/Jack_XLR-6.35mm_Neutrik_NCJ6FI-H-0_Horizontal","Connector_Audio/Jack_XLR-6.35mm_Neutrik_NCJ6FI-H_Horizontal","Connector_Audio/Jack_XLR-6.35mm_Neutrik_NCJ6FI-V-0_Vertical","Connector_Audio/Jack_XLR-6.35mm_Neutrik_NCJ6FI-V_Vertical","Connector_Audio/Jack_XLR-6.35mm_Neutrik_NCJ9FI-H-0_Horizontal","Connector_Audio/Jack_XLR-6.35mm_Neutrik_NCJ9FI-H_Horizontal","Connector_Audio/Jack_XLR-6.35mm_Neutrik_NCJ9FI-V-0_Vertical","Connector_Audio/Jack_XLR-6.35mm_Neutrik_NCJ9FI-V_Vertical","Connector_Audio/Jack_XLR_Neutrik_NC3FAAH-0_Horizontal","Connector_Audio/Jack_XLR_Neutrik_NC3FAAH1-0_Horizontal","Connector_Audio/Jack_XLR_Neutrik_NC3FAAH1-DA_Horizontal","Connector_Audio/Jack_XLR_Neutrik_NC3FAAH1_Horizontal","Connector_Audio/Jack_XLR_Neutrik_NC3FAAH2-0_Horizontal","Connector_Audio/Jack_XLR_Neutrik_NC3FAAH2_Horizontal","Connector_Audio/Jack_XLR_Neutrik_NC3FAAH_Horizontal","Connector_Audio/Jack_XLR_Neutrik_NC3FAAV-0_Vertical","Connector_Audio/Jack_XLR_Neutrik_NC3FAAV1-0_Vertical","Connector_Audio/Jack_XLR_Neutrik_NC3FAAV1-DA_Vertical","Connector_Audio/Jack_XLR_Neutrik_NC3FAAV1_Vertical","Connector_Audio/Jack_XLR_Neutrik_NC3FAAV2-0_Vertical","Connector_Audio/Jack_XLR_Neutrik_NC3FAAV2_Vertical","Connector_Audio/Jack_XLR_Neutrik_NC3FAAV_Vertical","Connector_Audio/Jack_XLR_Neutrik_NC3FAH-0_Horizontal","Connector_Audio/Jack_XLR_Neutrik_NC3FAH1-0_Horizontal","Connector_Audio/Jack_XLR_Neutrik_NC3FAH1-DA_Horizontal","Connector_Audio/Jack_XLR_Neutrik_NC3FAH1_Horizontal","Connector_Audio/Jack_XLR_Neutrik_NC3FAH2-0_Horizontal","Connector_Audio/Jack_XLR_Neutrik_NC3FAH2-DA_Horizontal","Connector_Audio/Jack_XLR_Neutrik_NC3FAH2_Horizontal","Connector_Audio/Jack_XLR_Neutrik_NC3FAHL-0_Horizontal","Connector_Audio/Jack_XLR_Neutrik_NC3FAHL1-0_Horizontal","Connector_Audio/Jack_XLR_Neutrik_NC3FAHL1_Horizontal","Connector_Audio/Jack_XLR_Neutrik_NC3FAHR-0_Horizontal","Connector_Audio/Jack_XLR_Neutrik_NC3FAHR1-0_Horizontal","Connector_Audio/Jack_XLR_Neutrik_NC3FAHR1_Horizontal","Connector_Audio/Jack_XLR_Neutrik_NC3FAHR2-0_Horizontal","Connector_Audio/Jack_XLR_Neutrik_NC3FAHR2_Horizontal","Connector_Audio/Jack_XLR_Neutrik_NC3FAH_Horizontal","Connector_Audio/Jack_XLR_Neutrik_NC3FAV-0_Vertical","Connector_Audio/Jack_XLR_Neutrik_NC3FAV1-0_Vertical","Connector_Audio/Jack_XLR_Neutrik_NC3FAV1-DA_Vertical","Connector_Audio/Jack_XLR_Neutrik_NC3FAV1_Vertical","Connector_Audio/Jack_XLR_Neutrik_NC3FAV2-0_Vertical","Connector_Audio/Jack_XLR_Neutrik_NC3FAV2-DA_Vertical","Connector_Audio/Jack_XLR_Neutrik_NC3FAV2_Vertical","Connector_Audio/Jack_XLR_Neutrik_NC3FAV_Vertical","Connector_Audio/Jack_XLR_Neutrik_NC3FBH1-B_Horizontal","Connector_Audio/Jack_XLR_Neutrik_NC3FBH1-DA_Horizontal","Connector_Audio/Jack_XLR_Neutrik_NC3FBH1-E_Horizontal","Connector_Audio/Jack_XLR_Neutrik_NC3FBH1_Horizontal","Connector_Audio/Jack_XLR_Neutrik_NC3FBH2-B_Horizontal","Connector_Audio/Jack_XLR_Neutrik_NC3FBH2-DA_Horizontal","Connector_Audio/Jack_XLR_Neutrik_NC3FBH2-E_Horizontal","Connector_Audio/Jack_XLR_Neutrik_NC3FBH2_Horizontal","Connector_Audio/Jack_XLR_Neutrik_NC3FBHL1_Horizontal","Connector_Audio/Jack_XLR_Neutrik_NC3FBV1-0_Vertical","Connector_Audio/Jack_XLR_Neutrik_NC3FBV1-B_Vertical","Connector_Audio/Jack_XLR_Neutrik_NC3FBV1-DA_Vertical","Connector_Audio/Jack_XLR_Neutrik_NC3FBV1_Vertical","Connector_Audio/Jack_XLR_Neutrik_NC3FBV2-B_Vertical","Connector_Audio/Jack_XLR_Neutrik_NC3FBV2-DA_Vertical","Connector_Audio/Jack_XLR_Neutrik_NC3FBV2-SW_Vertical","Connector_Audio/Jack_XLR_Neutrik_NC3FBV2_Vertical","Connector_Audio/Jack_XLR_Neutrik_NC3MAAH-0_Horizontal","Connector_Audio/Jack_XLR_Neutrik_NC3MAAH-1_Horizontal","Connector_Audio/Jack_XLR_Neutrik_NC3MAAH_Horizontal","Connector_Audio/Jack_XLR_Neutrik_NC3MAAV-0_Vertical","Connector_Audio/Jack_XLR_Neutrik_NC3MAAV-1_Vertical","Connector_Audio/Jack_XLR_Neutrik_NC3MAAV_Vertical","Connector_Audio/Jack_XLR_Neutrik_NC3MAFH-PH_Horizontal","Connector_Audio/Jack_XLR_Neutrik_NC3MAH-0_Horizontal","Connector_Audio/Jack_XLR_Neutrik_NC3MAHL_Horizontal","Connector_Audio/Jack_XLR_Neutrik_NC3MAHR_Horizontal","Connector_Audio/Jack_XLR_Neutrik_NC3MAH_Horizontal","Connector_Audio/Jack_XLR_Neutrik_NC3MAMH-PH_Horizontal","Connector_Audio/Jack_XLR_Neutrik_NC3MAV-0_Vertical","Connector_Audio/Jack_XLR_Neutrik_NC3MAV_Vertical","Connector_Audio/Jack_XLR_Neutrik_NC3MBH-0_Horizontal","Connector_Audio/Jack_XLR_Neutrik_NC3MBH-1_Horizontal","Connector_Audio/Jack_XLR_Neutrik_NC3MBH-B_Horizontal","Connector_Audio/Jack_XLR_Neutrik_NC3MBH-E_Horizontal","Connector_Audio/Jack_XLR_Neutrik_NC3MBHL-B_Horizontal","Connector_Audio/Jack_XLR_Neutrik_NC3MBHL_Horizontal","Connector_Audio/Jack_XLR_Neutrik_NC3MBHR-B_Horizontal","Connector_Audio/Jack_XLR_Neutrik_NC3MBHR_Horizontal","Connector_Audio/Jack_XLR_Neutrik_NC3MBH_Horizontal","Connector_Audio/Jack_XLR_Neutrik_NC3MBV-0_Vertical","Connector_Audio/Jack_XLR_Neutrik_NC3MBV-1_Vertical","Connector_Audio/Jack_XLR_Neutrik_NC3MBV-B_Vertical","Connector_Audio/Jack_XLR_Neutrik_NC3MBV-E_Vertical","Connector_Audio/Jack_XLR_Neutrik_NC3MBV-SW_Vertical","Connector_Audio/Jack_XLR_Neutrik_NC3MBV_Vertical","Connector_Audio/Jack_XLR_Neutrik_NC4FAH-0_Horizontal","Connector_Audio/Jack_XLR_Neutrik_NC4FAH_Horizontal","Connector_Audio/Jack_XLR_Neutrik_NC4FAV-0_Vertical","Connector_Audio/Jack_XLR_Neutrik_NC4FAV_Vertical","Connector_Audio/Jack_XLR_Neutrik_NC4FBH_Horizontal","Connector_Audio/Jack_XLR_Neutrik_NC4FBV_Vertical","Connector_Audio/Jack_XLR_Neutrik_NC4MAH_Horizontal","Connector_Audio/Jack_XLR_Neutrik_NC4MAV_Vertical","Connector_Audio/Jack_XLR_Neutrik_NC4MBH_Horizontal","Connector_Audio/Jack_XLR_Neutrik_NC4MBV_Vertical","Connector_Audio/Jack_XLR_Neutrik_NC5FAH-0_Horizontal","Connector_Audio/Jack_XLR_Neutrik_NC5FAH-DA_Horizontal","Connector_Audio/Jack_XLR_Neutrik_NC5FAH_Horizontal","Connector_Audio/Jack_XLR_Neutrik_NC5FAV-DA_Vertical","Connector_Audio/Jack_XLR_Neutrik_NC5FAV-SW_Vertical","Connector_Audio/Jack_XLR_Neutrik_NC5FAV_Vertical","Connector_Audio/Jack_XLR_Neutrik_NC5FBH-B_Horizontal","Connector_Audio/Jack_XLR_Neutrik_NC5FBH_Horizontal","Connector_Audio/Jack_XLR_Neutrik_NC5FBV-B_Vertical","Connector_Audio/Jack_XLR_Neutrik_NC5FBV-SW_Vertical","Connector_Audio/Jack_XLR_Neutrik_NC5FBV_Vertical","Connector_Audio/Jack_XLR_Neutrik_NC5MAH_Horizontal","Connector_Audio/Jack_XLR_Neutrik_NC5MAV-SW_Vertical","Connector_Audio/Jack_XLR_Neutrik_NC5MAV_Vertical","Connector_Audio/Jack_XLR_Neutrik_NC5MBH-B_Horizontal","Connector_Audio/Jack_XLR_Neutrik_NC5MBH_Horizontal","Connector_Audio/Jack_XLR_Neutrik_NC5MBV-B_Vertical","Connector_Audio/Jack_XLR_Neutrik_NC5MBV-SW_Vertical","Connector_Audio/Jack_XLR_Neutrik_NC5MBV_Vertical","Connector_Audio/Jack_speakON-6.35mm_Neutrik_NLJ2MDXX-H_Horizontal","Connector_Audio/Jack_speakON-6.35mm_Neutrik_NLJ2MDXX-V_Vertical","Connector_Audio/Jack_speakON_Neutrik_NL2MDXX-H-3_Horizontal","Connector_Audio/Jack_speakON_Neutrik_NL2MDXX-V_Vertical","Connector_Audio/Jack_speakON_Neutrik_NL4MDXX-H-2_Horizontal","Connector_Audio/Jack_speakON_Neutrik_NL4MDXX-H-3_Horizontal","Connector_Audio/Jack_speakON_Neutrik_NL4MDXX-V-2_Vertical","Connector_Audio/Jack_speakON_Neutrik_NL4MDXX-V-3_Vertical","Connector_Audio/Jack_speakON_Neutrik_NL4MDXX-V_Vertical","Connector_Audio/Jack_speakON_Neutrik_NL8MDXX-V-3_Vertical","Connector_Audio/Jack_speakON_Neutrik_NL8MDXX-V_Vertical","Connector_Audio/Jack_speakON_Neutrik_NLT4MD-V_Vertical","Connector_Audio/MiniXLR-5_Switchcraft_TRAPC_Horizontal","Connector_Audio/Plug_3.5mm_CUI_SP-3541","Connector_BarrelJack/BarrelJack_CLIFF_FC681465S_SMT_Horizontal","Connector_BarrelJack/BarrelJack_CUI_PJ-036AH-SMT_Horizontal","Connector_BarrelJack/BarrelJack_CUI_PJ-063AH_Horizontal","Connector_BarrelJack/BarrelJack_CUI_PJ-063AH_Horizontal_CircularHoles","Connector_BarrelJack/BarrelJack_CUI_PJ-079BH_Horizontal","Connector_BarrelJack/BarrelJack_CUI_PJ-102AH_Horizontal","Connector_BarrelJack/BarrelJack_GCT_DCJ200-10-A_Horizontal","Connector_BarrelJack/BarrelJack_Horizontal","Connector_BarrelJack/BarrelJack_Kycon_KLDX-0202-xC_Horizontal","Connector_BarrelJack/BarrelJack_SwitchcraftConxall_RAPC10U_Horizontal","Connector_BarrelJack/BarrelJack_Wuerth_694102107102_1.0x3.9mm","Connector_BarrelJack/BarrelJack_Wuerth_694103107102_1.35x3.9mm","Connector_BarrelJack/BarrelJack_Wuerth_694106106102_2.0x5.5mm","Connector_BarrelJack/BarrelJack_Wuerth_694108106102_2.5x5.5mm","Connector_BarrelJack/BarrelJack_Wuerth_6941xx301002","Connector_Card/CF-Card_3M_N7E50-A516xx-30","Connector_Card/CF-Card_3M_N7E50-E516xx-30","Connector_Card/SD-SIM_microSD-microSIM_Molex_104168-1620","Connector_Card/SD_Card_Device_16mm_SlotDepth","Connector_Card/SD_Hirose_DM1AA_SF_PEJ82","Connector_Card/SD_Kyocera_145638009211859+","Connector_Card/SD_Kyocera_145638009511859+","Connector_Card/SD_Kyocera_145638109211859+","Connector_Card/SD_Kyocera_145638109511859+","Connector_Card/SD_TE_2041021","Connector_Card/microSD_HC_Hirose_DM3AT-SF-PEJM5","Connector_Card/microSD_HC_Hirose_DM3BT-DSF-PEJS","Connector_Card/microSD_HC_Hirose_DM3D-SF","Connector_Card/microSD_HC_Molex_104031-0811","Connector_Card/microSD_HC_Molex_47219-2001","Connector_Card/microSD_HC_Wuerth_693072010801","Connector_Card/microSIM_JAE_SF53S006VCBR2000","Connector_Card/nanoSIM_GCT_SIM8060-6-0-14-00","Connector_Card/nanoSIM_GCT_SIM8060-6-1-14-00","Connector_Card/nanoSIM_Hinged_CUI_NSIM-2-C","Connector_Coaxial/BNC_Amphenol_031-5539_Vertical","Connector_Coaxial/BNC_Amphenol_031-6575_Horizontal","Connector_Coaxial/BNC_Amphenol_B6252HB-NPP3G-50_Horizontal","Connector_Coaxial/BNC_PanelMountable_Vertical","Connector_Coaxial/BNC_TEConnectivity_1478035_Horizontal","Connector_Coaxial/BNC_TEConnectivity_1478204_Vertical","Connector_Coaxial/BNC_Win_364A2x95_Horizontal","Connector_Coaxial/CoaxialSwitch_Hirose_MS-156C3_Horizontal","Connector_Coaxial/LEMO-EPG.00.302.NLN","Connector_Coaxial/LEMO-EPL.00.250.NTN","Connector_Coaxial/MMCX_Molex_73415-0961_Horizontal_0.8mm-PCB","Connector_Coaxial/MMCX_Molex_73415-0961_Horizontal_1.0mm-PCB","Connector_Coaxial/MMCX_Molex_73415-0961_Horizontal_1.6mm-PCB","Connector_Coaxial/MMCX_Molex_73415-1471_Vertical","Connector_Coaxial/SMA_Amphenol_132134-10_Vertical","Connector_Coaxial/SMA_Amphenol_132134-11_Vertical","Connector_Coaxial/SMA_Amphenol_132134-14_Vertical","Connector_Coaxial/SMA_Amphenol_132134-16_Vertical","Connector_Coaxial/SMA_Amphenol_132134_Vertical","Connector_Coaxial/SMA_Amphenol_132203-12_Horizontal","Connector_Coaxial/SMA_Amphenol_132289_EdgeMount","Connector_Coaxial/SMA_Amphenol_132291-12_Vertical","Connector_Coaxial/SMA_Amphenol_132291_Vertical","Connector_Coaxial/SMA_Amphenol_901-143_Horizontal","Connector_Coaxial/SMA_Amphenol_901-144_Vertical","Connector_Coaxial/SMA_BAT_Wireless_BWSMA-KWE-Z001","Connector_Coaxial/SMA_Molex_73251-1153_EdgeMount_Horizontal","Connector_Coaxial/SMA_Molex_73251-2120_EdgeMount_Horizontal","Connector_Coaxial/SMA_Molex_73251-2200_Horizontal","Connector_Coaxial/SMA_Samtec_SMA-J-P-H-ST-EM1_EdgeMount","Connector_Coaxial/SMA_Wurth_60312002114503_Vertical","Connector_Coaxial/SMA_Wurth_60312102114405_Vertical","Connector_Coaxial/SMB_Jack_Vertical","Connector_Coaxial/U.FL_Hirose_U.FL-R-SMT-1_Vertical","Connector_Coaxial/U.FL_Molex_MCRF_73412-0110_Vertical","Connector_Coaxial/WR-MMCX_Wuerth_66011102111302_Horizontal","Connector_Coaxial/WR-MMCX_Wuerth_66012102111404_Vertical","Connector_DIN/DIN41612_B2_2x16_Female_Vertical_THT","Connector_DIN/DIN41612_B2_2x16_Male_Horizontal_THT","Connector_DIN/DIN41612_B2_2x8_Female_Vertical_THT","Connector_DIN/DIN41612_B2_2x8_Male_Horizontal_THT","Connector_DIN/DIN41612_B3_2x10_Female_Vertical_THT","Connector_DIN/DIN41612_B3_2x10_Male_Horizontal_THT","Connector_DIN/DIN41612_B3_2x5_Female_Vertical_THT","Connector_DIN/DIN41612_B3_2x5_Male_Horizontal_THT","Connector_DIN/DIN41612_B_1x32_Female_Vertical_THT","Connector_DIN/DIN41612_B_1x32_Male_Horizontal_THT","Connector_DIN/DIN41612_B_2x16_Female_Vertical_THT","Connector_DIN/DIN41612_B_2x16_Male_Horizontal_THT","Connector_DIN/DIN41612_B_2x32_Female_Vertical_THT","Connector_DIN/DIN41612_B_2x32_Male_Horizontal_THT","Connector_DIN/DIN41612_C2_2x16_Female_Vertical_THT","Connector_DIN/DIN41612_C2_2x16_Male_Horizontal_THT","Connector_DIN/DIN41612_C2_3x16_Female_Vertical_THT","Connector_DIN/DIN41612_C2_3x16_Male_Horizontal_THT","Connector_DIN/DIN41612_C3_2x10_Female_Vertical_THT","Connector_DIN/DIN41612_C3_2x10_Male_Horizontal_THT","Connector_DIN/DIN41612_C3_3x10_Female_Vertical_THT","Connector_DIN/DIN41612_C3_3x10_Male_Horizontal_THT","Connector_DIN/DIN41612_C_1x32_Female_Vertical_THT","Connector_DIN/DIN41612_C_1x32_Male_Horizontal_THT","Connector_DIN/DIN41612_C_2x16_Female_Vertical_THT","Connector_DIN/DIN41612_C_2x16_Male_Horizontal_THT","Connector_DIN/DIN41612_C_2x32_Female_Vertical_THT","Connector_DIN/DIN41612_C_2x32_Male_Horizontal_THT","Connector_DIN/DIN41612_C_3x16_Female_Vertical_THT","Connector_DIN/DIN41612_C_3x16_Male_Horizontal_THT","Connector_DIN/DIN41612_C_3x32_Female_Vertical_THT","Connector_DIN/DIN41612_C_3x32_Male_Horizontal_THT","Connector_DIN/DIN41612_D_2x16_Female_Vertical_THT","Connector_DIN/DIN41612_D_2x16_Male_Horizontal_THT","Connector_DIN/DIN41612_D_2x8_Female_Vertical_THT","Connector_DIN/DIN41612_D_2x8_Male_Horizontal_THT","Connector_DIN/DIN41612_E_2x16_Female_Vertical_THT","Connector_DIN/DIN41612_E_2x16_Male_Horizontal_THT","Connector_DIN/DIN41612_E_2x16_RowsAC_Female_Vertical_THT","Connector_DIN/DIN41612_E_2x16_RowsAC_Male_Horizontal_THT","Connector_DIN/DIN41612_E_3x16_Female_Vertical_THT","Connector_DIN/DIN41612_E_3x16_Male_Horizontal_THT","Connector_DIN/DIN41612_F_2x16_Female_Vertical_THT","Connector_DIN/DIN41612_F_2x16_Male_Horizontal_THT","Connector_DIN/DIN41612_F_2x16_RowsZD_Female_Vertical_THT","Connector_DIN/DIN41612_F_2x16_RowsZD_Male_Horizontal_THT","Connector_DIN/DIN41612_F_3x16_Female_Vertical_THT","Connector_DIN/DIN41612_F_3x16_Male_Horizontal_THT","Connector_DIN/DIN41612_M-flat_3x14+6_Female_Vertical_THT","Connector_DIN/DIN41612_M-flat_3x20+4_Female_Vertical_THT","Connector_DIN/DIN41612_M-flat_3x26+2_Female_Vertical_THT","Connector_DIN/DIN41612_M-flat_3x8+8_Female_Vertical_THT","Connector_DIN/DIN41612_M-invers_3x14+6_Female_Horizontal_THT","Connector_DIN/DIN41612_M-invers_3x14+6_Male_Vertical_THT","Connector_DIN/DIN41612_M-invers_3x2+10_Female_Horizontal_THT","Connector_DIN/DIN41612_M-invers_3x2+10_Male_Vertical_THT","Connector_DIN/DIN41612_M-invers_3x20+4_Female_Horizontal_THT","Connector_DIN/DIN41612_M-invers_3x20+4_Male_Vertical_THT","Connector_DIN/DIN41612_M-invers_3x26+2_Female_Horizontal_THT","Connector_DIN/DIN41612_M-invers_3x26+2_Male_Vertical_THT","Connector_DIN/DIN41612_M-invers_3x8+8_Female_Horizontal_THT","Connector_DIN/DIN41612_M-invers_3x8+8_Male_Vertical_THT","Connector_DIN/DIN41612_M_3x14+6_Female_Vertical_THT","Connector_DIN/DIN41612_M_3x14+6_Male_Horizontal_THT","Connector_DIN/DIN41612_M_3x20+4_Female_Vertical_THT","Connector_DIN/DIN41612_M_3x20+4_Male_Horizontal_THT","Connector_DIN/DIN41612_M_3x26+2_Female_Vertical_THT","Connector_DIN/DIN41612_M_3x26+2_Male_Horizontal_THT","Connector_DIN/DIN41612_M_3x8+8_Female_Vertical_THT","Connector_DIN/DIN41612_M_3x8+8_Male_Horizontal_THT","Connector_DIN/DIN41612_Q2_2x16_Female_Horizontal_THT","Connector_DIN/DIN41612_Q2_2x16_Male_Vertical_THT","Connector_DIN/DIN41612_Q3_2x10_Female_Horizontal_THT","Connector_DIN/DIN41612_Q3_2x10_Male_Vertical_THT","Connector_DIN/DIN41612_Q_2x32_Female_Horizontal_THT","Connector_DIN/DIN41612_Q_2x32_Male_Vertical_THT","Connector_DIN/DIN41612_R2_2x16_Female_Horizontal_THT","Connector_DIN/DIN41612_R2_2x16_Male_Vertical_THT","Connector_DIN/DIN41612_R2_3x16_Female_Horizontal_THT","Connector_DIN/DIN41612_R2_3x16_Male_Vertical_THT","Connector_DIN/DIN41612_R3_2x10_Female_Horizontal_THT","Connector_DIN/DIN41612_R3_2x10_Male_Vertical_THT","Connector_DIN/DIN41612_R3_3x10_Female_Horizontal_THT","Connector_DIN/DIN41612_R3_3x10_Male_Vertical_THT","Connector_DIN/DIN41612_R_1x32_Female_Horizontal_THT","Connector_DIN/DIN41612_R_1x32_Male_Vertical_THT","Connector_DIN/DIN41612_R_2x16_Female_Horizontal_THT","Connector_DIN/DIN41612_R_2x16_Male_Vertical_THT","Connector_DIN/DIN41612_R_2x32_Female_Horizontal_THT","Connector_DIN/DIN41612_R_2x32_Male_Vertical_THT","Connector_DIN/DIN41612_R_3x16_Female_Horizontal_THT","Connector_DIN/DIN41612_R_3x16_Male_Vertical_THT","Connector_DIN/DIN41612_R_3x32_Female_Horizontal_THT","Connector_DIN/DIN41612_R_3x32_Male_Vertical_THT","Connector_Dsub/DSUB-15-HD_Pins_Horizontal_P2.29x1.90mm_EdgePinOffset3.03mm_Housed_MountingHolesOffset4.94mm","Connector_Dsub/DSUB-15-HD_Pins_Horizontal_P2.29x2.54mm_EdgePinOffset8.35mm_Housed_MountingHolesOffset10.89mm","Connector_Dsub/DSUB-15-HD_Pins_Vertical_P2.29x1.98mm_MountingHoles","Connector_Dsub/DSUB-15-HD_Socket_Horizontal_P2.29x1.90mm_EdgePinOffset3.03mm_Housed_MountingHolesOffset4.94mm","Connector_Dsub/DSUB-15-HD_Socket_Horizontal_P2.29x2.54mm_EdgePinOffset8.35mm_Housed_MountingHolesOffset10.89mm","Connector_Dsub/DSUB-15-HD_Socket_Vertical_P2.29x1.98mm_MountingHoles","Connector_Dsub/DSUB-15_Pins_EdgeMount_P2.77mm","Connector_Dsub/DSUB-15_Pins_Horizontal_P2.77x2.54mm_EdgePinOffset9.40mm","Connector_Dsub/DSUB-15_Pins_Horizontal_P2.77x2.84mm_EdgePinOffset14.56mm_Housed_MountingHolesOffset15.98mm","Connector_Dsub/DSUB-15_Pins_Horizontal_P2.77x2.84mm_EdgePinOffset14.56mm_Housed_MountingHolesOffset8.20mm","Connector_Dsub/DSUB-15_Pins_Horizontal_P2.77x2.84mm_EdgePinOffset4.94mm_Housed_MountingHolesOffset4.94mm","Connector_Dsub/DSUB-15_Pins_Horizontal_P2.77x2.84mm_EdgePinOffset7.70mm_Housed_MountingHolesOffset9.12mm","Connector_Dsub/DSUB-15_Pins_Horizontal_P2.77x2.84mm_EdgePinOffset9.40mm","Connector_Dsub/DSUB-15_Pins_Horizontal_P2.77x2.84mm_EdgePinOffset9.90mm_Housed_MountingHolesOffset11.32mm","Connector_Dsub/DSUB-15_Pins_Vertical_P2.77x2.84mm","Connector_Dsub/DSUB-15_Pins_Vertical_P2.77x2.84mm_MountingHoles","Connector_Dsub/DSUB-15_Socket_EdgeMount_P2.77mm","Connector_Dsub/DSUB-15_Socket_Horizontal_P2.77x2.54mm_EdgePinOffset9.40mm","Connector_Dsub/DSUB-15_Socket_Horizontal_P2.77x2.84mm_EdgePinOffset14.56mm_Housed_MountingHolesOffset15.98mm","Connector_Dsub/DSUB-15_Socket_Horizontal_P2.77x2.84mm_EdgePinOffset14.56mm_Housed_MountingHolesOffset8.20mm","Connector_Dsub/DSUB-15_Socket_Horizontal_P2.77x2.84mm_EdgePinOffset4.94mm_Housed_MountingHolesOffset4.94mm","Connector_Dsub/DSUB-15_Socket_Horizontal_P2.77x2.84mm_EdgePinOffset7.70mm_Housed_MountingHolesOffset9.12mm","Connector_Dsub/DSUB-15_Socket_Horizontal_P2.77x2.84mm_EdgePinOffset9.40mm","Connector_Dsub/DSUB-15_Socket_Horizontal_P2.77x2.84mm_EdgePinOffset9.90mm_Housed_MountingHolesOffset11.32mm","Connector_Dsub/DSUB-15_Socket_Vertical_P2.77x2.84mm","Connector_Dsub/DSUB-15_Socket_Vertical_P2.77x2.84mm_MountingHoles","Connector_Dsub/DSUB-25_Pins_EdgeMount_P2.77mm","Connector_Dsub/DSUB-25_Pins_Horizontal_P2.77x2.54mm_EdgePinOffset9.40mm","Connector_Dsub/DSUB-25_Pins_Horizontal_P2.77x2.84mm_EdgePinOffset14.56mm_Housed_MountingHolesOffset15.98mm","Connector_Dsub/DSUB-25_Pins_Horizontal_P2.77x2.84mm_EdgePinOffset14.56mm_Housed_MountingHolesOffset8.20mm","Connector_Dsub/DSUB-25_Pins_Horizontal_P2.77x2.84mm_EdgePinOffset4.94mm_Housed_MountingHolesOffset4.94mm","Connector_Dsub/DSUB-25_Pins_Horizontal_P2.77x2.84mm_EdgePinOffset7.70mm_Housed_MountingHolesOffset9.12mm","Connector_Dsub/DSUB-25_Pins_Horizontal_P2.77x2.84mm_EdgePinOffset9.40mm","Connector_Dsub/DSUB-25_Pins_Horizontal_P2.77x2.84mm_EdgePinOffset9.90mm_Housed_MountingHolesOffset11.32mm","Connector_Dsub/DSUB-25_Pins_Vertical_P2.77x2.84mm","Connector_Dsub/DSUB-25_Pins_Vertical_P2.77x2.84mm_MountingHoles","Connector_Dsub/DSUB-25_Socket_EdgeMount_P2.77mm","Connector_Dsub/DSUB-25_Socket_Horizontal_P2.77x2.54mm_EdgePinOffset9.40mm","Connector_Dsub/DSUB-25_Socket_Horizontal_P2.77x2.84mm_EdgePinOffset14.56mm_Housed_MountingHolesOffset15.98mm","Connector_Dsub/DSUB-25_Socket_Horizontal_P2.77x2.84mm_EdgePinOffset14.56mm_Housed_MountingHolesOffset8.20mm","Connector_Dsub/DSUB-25_Socket_Horizontal_P2.77x2.84mm_EdgePinOffset4.94mm_Housed_MountingHolesOffset4.94mm","Connector_Dsub/DSUB-25_Socket_Horizontal_P2.77x2.84mm_EdgePinOffset7.70mm_Housed_MountingHolesOffset9.12mm","Connector_Dsub/DSUB-25_Socket_Horizontal_P2.77x2.84mm_EdgePinOffset9.40mm","Connector_Dsub/DSUB-25_Socket_Horizontal_P2.77x2.84mm_EdgePinOffset9.90mm_Housed_MountingHolesOffset11.32mm","Connector_Dsub/DSUB-25_Socket_Vertical_P2.77x2.84mm","Connector_Dsub/DSUB-25_Socket_Vertical_P2.77x2.84mm_MountingHoles","Connector_Dsub/DSUB-26-HD_Pins_Horizontal_P2.29x1.90mm_EdgePinOffset3.03mm_Housed_MountingHolesOffset4.94mm","Connector_Dsub/DSUB-26-HD_Pins_Horizontal_P2.29x2.54mm_EdgePinOffset8.35mm_Housed_MountingHolesOffset10.89mm","Connector_Dsub/DSUB-26-HD_Pins_Vertical_P2.29x1.98mm_MountingHoles","Connector_Dsub/DSUB-26-HD_Socket_Horizontal_P2.29x1.90mm_EdgePinOffset3.03mm_Housed_MountingHolesOffset4.94mm","Connector_Dsub/DSUB-26-HD_Socket_Horizontal_P2.29x2.54mm_EdgePinOffset8.35mm_Housed_MountingHolesOffset10.89mm","Connector_Dsub/DSUB-26-HD_Socket_Vertical_P2.29x1.98mm_MountingHoles","Connector_Dsub/DSUB-37_Pins_EdgeMount_P2.77mm","Connector_Dsub/DSUB-37_Pins_Horizontal_P2.77x2.54mm_EdgePinOffset9.40mm","Connector_Dsub/DSUB-37_Pins_Horizontal_P2.77x2.84mm_EdgePinOffset14.56mm_Housed_MountingHolesOffset15.98mm","Connector_Dsub/DSUB-37_Pins_Horizontal_P2.77x2.84mm_EdgePinOffset14.56mm_Housed_MountingHolesOffset8.20mm","Connector_Dsub/DSUB-37_Pins_Horizontal_P2.77x2.84mm_EdgePinOffset4.94mm_Housed_MountingHolesOffset4.94mm","Connector_Dsub/DSUB-37_Pins_Horizontal_P2.77x2.84mm_EdgePinOffset7.70mm_Housed_MountingHolesOffset9.12mm","Connector_Dsub/DSUB-37_Pins_Horizontal_P2.77x2.84mm_EdgePinOffset9.40mm","Connector_Dsub/DSUB-37_Pins_Horizontal_P2.77x2.84mm_EdgePinOffset9.90mm_Housed_MountingHolesOffset11.32mm","Connector_Dsub/DSUB-37_Pins_Vertical_P2.77x2.84mm","Connector_Dsub/DSUB-37_Pins_Vertical_P2.77x2.84mm_MountingHoles","Connector_Dsub/DSUB-37_Socket_EdgeMount_P2.77mm","Connector_Dsub/DSUB-37_Socket_Horizontal_P2.77x2.54mm_EdgePinOffset9.40mm","Connector_Dsub/DSUB-37_Socket_Horizontal_P2.77x2.84mm_EdgePinOffset14.56mm_Housed_MountingHolesOffset15.98mm","Connector_Dsub/DSUB-37_Socket_Horizontal_P2.77x2.84mm_EdgePinOffset14.56mm_Housed_MountingHolesOffset8.20mm","Connector_Dsub/DSUB-37_Socket_Horizontal_P2.77x2.84mm_EdgePinOffset4.94mm_Housed_MountingHolesOffset4.94mm","Connector_Dsub/DSUB-37_Socket_Horizontal_P2.77x2.84mm_EdgePinOffset7.70mm_Housed_MountingHolesOffset9.12mm","Connector_Dsub/DSUB-37_Socket_Horizontal_P2.77x2.84mm_EdgePinOffset9.40mm","Connector_Dsub/DSUB-37_Socket_Horizontal_P2.77x2.84mm_EdgePinOffset9.90mm_Housed_MountingHolesOffset11.32mm","Connector_Dsub/DSUB-37_Socket_Vertical_P2.77x2.84mm","Connector_Dsub/DSUB-37_Socket_Vertical_P2.77x2.84mm_MountingHoles","Connector_Dsub/DSUB-44-HD_Pins_Horizontal_P2.29x1.90mm_EdgePinOffset3.03mm_Housed_MountingHolesOffset4.94mm","Connector_Dsub/DSUB-44-HD_Pins_Horizontal_P2.29x2.54mm_EdgePinOffset8.35mm_Housed_MountingHolesOffset10.89mm","Connector_Dsub/DSUB-44-HD_Pins_Vertical_P2.29x1.98mm_MountingHoles","Connector_Dsub/DSUB-44-HD_Socket_Horizontal_P2.29x1.90mm_EdgePinOffset3.03mm_Housed_MountingHolesOffset4.94mm","Connector_Dsub/DSUB-44-HD_Socket_Horizontal_P2.29x2.54mm_EdgePinOffset8.35mm_Housed_MountingHolesOffset10.89mm","Connector_Dsub/DSUB-44-HD_Socket_Vertical_P2.29x1.98mm_MountingHoles","Connector_Dsub/DSUB-62-HD_Pins_Horizontal_P2.41x1.90mm_EdgePinOffset3.03mm_Housed_MountingHolesOffset4.94mm","Connector_Dsub/DSUB-62-HD_Pins_Horizontal_P2.41x2.54mm_EdgePinOffset8.35mm_Housed_MountingHolesOffset10.89mm","Connector_Dsub/DSUB-62-HD_Pins_Vertical_P2.41x1.98mm_MountingHoles","Connector_Dsub/DSUB-62-HD_Socket_Horizontal_P2.41x1.90mm_EdgePinOffset3.03mm_Housed_MountingHolesOffset4.94mm","Connector_Dsub/DSUB-62-HD_Socket_Horizontal_P2.41x2.54mm_EdgePinOffset8.35mm_Housed_MountingHolesOffset10.89mm","Connector_Dsub/DSUB-62-HD_Socket_Vertical_P2.41x1.98mm_MountingHoles","Connector_Dsub/DSUB-9_Pins_EdgeMount_P2.77mm","Connector_Dsub/DSUB-9_Pins_Horizontal_P2.77x2.54mm_EdgePinOffset9.40mm","Connector_Dsub/DSUB-9_Pins_Horizontal_P2.77x2.84mm_EdgePinOffset14.56mm_Housed_MountingHolesOffset15.98mm","Connector_Dsub/DSUB-9_Pins_Horizontal_P2.77x2.84mm_EdgePinOffset14.56mm_Housed_MountingHolesOffset8.20mm","Connector_Dsub/DSUB-9_Pins_Horizontal_P2.77x2.84mm_EdgePinOffset4.94mm_Housed_MountingHolesOffset4.94mm","Connector_Dsub/DSUB-9_Pins_Horizontal_P2.77x2.84mm_EdgePinOffset7.70mm_Housed_MountingHolesOffset9.12mm","Connector_Dsub/DSUB-9_Pins_Horizontal_P2.77x2.84mm_EdgePinOffset9.40mm","Connector_Dsub/DSUB-9_Pins_Horizontal_P2.77x2.84mm_EdgePinOffset9.90mm_Housed_MountingHolesOffset11.32mm","Connector_Dsub/DSUB-9_Pins_Vertical_P2.77x2.84mm","Connector_Dsub/DSUB-9_Pins_Vertical_P2.77x2.84mm_MountingHoles","Connector_Dsub/DSUB-9_Socket_EdgeMount_P2.77mm","Connector_Dsub/DSUB-9_Socket_Horizontal_P2.77x2.54mm_EdgePinOffset9.40mm","Connector_Dsub/DSUB-9_Socket_Horizontal_P2.77x2.84mm_EdgePinOffset14.56mm_Housed_MountingHolesOffset15.98mm","Connector_Dsub/DSUB-9_Socket_Horizontal_P2.77x2.84mm_EdgePinOffset14.56mm_Housed_MountingHolesOffset8.20mm","Connector_Dsub/DSUB-9_Socket_Horizontal_P2.77x2.84mm_EdgePinOffset4.94mm_Housed_MountingHolesOffset4.94mm","Connector_Dsub/DSUB-9_Socket_Horizontal_P2.77x2.84mm_EdgePinOffset7.70mm_Housed_MountingHolesOffset9.12mm","Connector_Dsub/DSUB-9_Socket_Horizontal_P2.77x2.84mm_EdgePinOffset9.40mm","Connector_Dsub/DSUB-9_Socket_Horizontal_P2.77x2.84mm_EdgePinOffset9.90mm_Housed_MountingHolesOffset11.32mm","Connector_Dsub/DSUB-9_Socket_Vertical_P2.77x2.84mm","Connector_Dsub/DSUB-9_Socket_Vertical_P2.77x2.84mm_MountingHoles","Connector_FFC-FPC/Amphenol_F32Q-1A7x1-11004_1x04-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/Amphenol_F32Q-1A7x1-11005_1x05-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/Amphenol_F32Q-1A7x1-11006_1x06-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/Amphenol_F32Q-1A7x1-11007_1x07-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/Amphenol_F32Q-1A7x1-11008_1x08-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/Amphenol_F32Q-1A7x1-11009_1x09-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/Amphenol_F32Q-1A7x1-11010_1x10-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/Amphenol_F32Q-1A7x1-11011_1x11-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/Amphenol_F32Q-1A7x1-11012_1x12-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/Amphenol_F32Q-1A7x1-11013_1x13-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/Amphenol_F32Q-1A7x1-11014_1x14-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/Amphenol_F32Q-1A7x1-11015_1x15-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/Amphenol_F32Q-1A7x1-11016_1x16-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/Amphenol_F32Q-1A7x1-11017_1x17-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/Amphenol_F32Q-1A7x1-11018_1x18-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/Amphenol_F32Q-1A7x1-11019_1x19-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/Amphenol_F32Q-1A7x1-11020_1x20-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/Amphenol_F32Q-1A7x1-11021_1x21-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/Amphenol_F32Q-1A7x1-11022_1x22-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/Amphenol_F32Q-1A7x1-11023_1x23-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/Amphenol_F32Q-1A7x1-11024_1x24-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/Amphenol_F32Q-1A7x1-11025_1x25-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/Amphenol_F32Q-1A7x1-11026_1x26-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/Amphenol_F32Q-1A7x1-11027_1x27-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/Amphenol_F32Q-1A7x1-11028_1x28-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/Amphenol_F32Q-1A7x1-11029_1x29-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/Amphenol_F32Q-1A7x1-11030_1x30-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/Amphenol_F32Q-1A7x1-11031_1x31-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/Amphenol_F32Q-1A7x1-11032_1x32-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/Amphenol_F32Q-1A7x1-11033_1x33-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/Amphenol_F32Q-1A7x1-11034_1x34-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/Amphenol_F32Q-1A7x1-11035_1x35-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/Amphenol_F32Q-1A7x1-11036_1x36-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/Amphenol_F32Q-1A7x1-11037_1x37-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/Amphenol_F32Q-1A7x1-11038_1x38-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/Amphenol_F32Q-1A7x1-11039_1x39-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/Amphenol_F32Q-1A7x1-11040_1x40-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/Amphenol_F32Q-1A7x1-11041_1x41-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/Amphenol_F32Q-1A7x1-11042_1x42-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/Amphenol_F32Q-1A7x1-11043_1x43-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/Amphenol_F32Q-1A7x1-11044_1x44-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/Amphenol_F32Q-1A7x1-11045_1x45-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/Amphenol_F32Q-1A7x1-11046_1x46-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/Amphenol_F32Q-1A7x1-11047_1x47-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/Amphenol_F32Q-1A7x1-11048_1x48-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/Amphenol_F32Q-1A7x1-11049_1x49-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/Amphenol_F32Q-1A7x1-11050_1x50-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/Amphenol_F32Q-1A7x1-11051_1x51-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/Amphenol_F32Q-1A7x1-11052_1x52-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/Amphenol_F32Q-1A7x1-11053_1x53-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/Amphenol_F32Q-1A7x1-11054_1x54-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/Amphenol_F32Q-1A7x1-11055_1x55-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/Amphenol_F32Q-1A7x1-11056_1x56-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/Amphenol_F32Q-1A7x1-11057_1x57-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/Amphenol_F32Q-1A7x1-11058_1x58-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/Amphenol_F32Q-1A7x1-11059_1x59-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/Amphenol_F32Q-1A7x1-11060_1x60-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/Amphenol_F32R-1A7x1-11004_1x04-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/Amphenol_F32R-1A7x1-11005_1x05-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/Amphenol_F32R-1A7x1-11006_1x06-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/Amphenol_F32R-1A7x1-11007_1x07-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/Amphenol_F32R-1A7x1-11008_1x08-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/Amphenol_F32R-1A7x1-11009_1x09-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/Amphenol_F32R-1A7x1-11010_1x10-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/Amphenol_F32R-1A7x1-11011_1x11-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/Amphenol_F32R-1A7x1-11012_1x12-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/Amphenol_F32R-1A7x1-11013_1x13-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/Amphenol_F32R-1A7x1-11014_1x14-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/Amphenol_F32R-1A7x1-11015_1x15-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/Amphenol_F32R-1A7x1-11016_1x16-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/Amphenol_F32R-1A7x1-11017_1x17-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/Amphenol_F32R-1A7x1-11018_1x18-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/Amphenol_F32R-1A7x1-11019_1x19-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/Amphenol_F32R-1A7x1-11020_1x20-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/Amphenol_F32R-1A7x1-11021_1x21-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/Amphenol_F32R-1A7x1-11022_1x22-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/Amphenol_F32R-1A7x1-11023_1x23-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/Amphenol_F32R-1A7x1-11024_1x24-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/Amphenol_F32R-1A7x1-11025_1x25-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/Amphenol_F32R-1A7x1-11026_1x26-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/Amphenol_F32R-1A7x1-11027_1x27-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/Amphenol_F32R-1A7x1-11028_1x28-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/Amphenol_F32R-1A7x1-11029_1x29-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/Amphenol_F32R-1A7x1-11030_1x30-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/Amphenol_F32R-1A7x1-11031_1x31-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/Amphenol_F32R-1A7x1-11032_1x32-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/Amphenol_F32R-1A7x1-11033_1x33-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/Amphenol_F32R-1A7x1-11034_1x34-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/Amphenol_F32R-1A7x1-11035_1x35-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/Amphenol_F32R-1A7x1-11036_1x36-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/Amphenol_F32R-1A7x1-11037_1x37-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/Amphenol_F32R-1A7x1-11038_1x38-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/Amphenol_F32R-1A7x1-11039_1x39-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/Amphenol_F32R-1A7x1-11040_1x40-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/Amphenol_F32R-1A7x1-11041_1x41-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/Amphenol_F32R-1A7x1-11042_1x42-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/Amphenol_F32R-1A7x1-11043_1x43-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/Amphenol_F32R-1A7x1-11044_1x44-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/Amphenol_F32R-1A7x1-11045_1x45-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/Amphenol_F32R-1A7x1-11046_1x46-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/Amphenol_F32R-1A7x1-11047_1x47-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/Amphenol_F32R-1A7x1-11048_1x48-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/Amphenol_F32R-1A7x1-11049_1x49-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/Amphenol_F32R-1A7x1-11050_1x50-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/Amphenol_F32R-1A7x1-11051_1x51-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/Amphenol_F32R-1A7x1-11052_1x52-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/Amphenol_F32R-1A7x1-11053_1x53-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/Amphenol_F32R-1A7x1-11054_1x54-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/Amphenol_F32R-1A7x1-11055_1x55-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/Amphenol_F32R-1A7x1-11056_1x56-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/Amphenol_F32R-1A7x1-11057_1x57-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/Amphenol_F32R-1A7x1-11058_1x58-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/Amphenol_F32R-1A7x1-11059_1x59-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/Amphenol_F32R-1A7x1-11060_1x60-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/Hirose_FH12-10S-0.5SH_1x10-1MP_P0.50mm_Horizontal","Connector_FFC-FPC/Hirose_FH12-11S-0.5SH_1x11-1MP_P0.50mm_Horizontal","Connector_FFC-FPC/Hirose_FH12-12S-0.5SH_1x12-1MP_P0.50mm_Horizontal","Connector_FFC-FPC/Hirose_FH12-13S-0.5SH_1x13-1MP_P0.50mm_Horizontal","Connector_FFC-FPC/Hirose_FH12-14S-0.5SH_1x14-1MP_P0.50mm_Horizontal","Connector_FFC-FPC/Hirose_FH12-15S-0.5SH_1x15-1MP_P0.50mm_Horizontal","Connector_FFC-FPC/Hirose_FH12-16S-0.5SH_1x16-1MP_P0.50mm_Horizontal","Connector_FFC-FPC/Hirose_FH12-17S-0.5SH_1x17-1MP_P0.50mm_Horizontal","Connector_FFC-FPC/Hirose_FH12-18S-0.5SH_1x18-1MP_P0.50mm_Horizontal","Connector_FFC-FPC/Hirose_FH12-19S-0.5SH_1x19-1MP_P0.50mm_Horizontal","Connector_FFC-FPC/Hirose_FH12-20S-0.5SH_1x20-1MP_P0.50mm_Horizontal","Connector_FFC-FPC/Hirose_FH12-22S-0.5SH_1x22-1MP_P0.50mm_Horizontal","Connector_FFC-FPC/Hirose_FH12-24S-0.5SH_1x24-1MP_P0.50mm_Horizontal","Connector_FFC-FPC/Hirose_FH12-25S-0.5SH_1x25-1MP_P0.50mm_Horizontal","Connector_FFC-FPC/Hirose_FH12-26S-0.5SH_1x26-1MP_P0.50mm_Horizontal","Connector_FFC-FPC/Hirose_FH12-28S-0.5SH_1x28-1MP_P0.50mm_Horizontal","Connector_FFC-FPC/Hirose_FH12-30S-0.5SH_1x30-1MP_P0.50mm_Horizontal","Connector_FFC-FPC/Hirose_FH12-32S-0.5SH_1x32-1MP_P0.50mm_Horizontal","Connector_FFC-FPC/Hirose_FH12-33S-0.5SH_1x33-1MP_P0.50mm_Horizontal","Connector_FFC-FPC/Hirose_FH12-34S-0.5SH_1x34-1MP_P0.50mm_Horizontal","Connector_FFC-FPC/Hirose_FH12-35S-0.5SH_1x35-1MP_P0.50mm_Horizontal","Connector_FFC-FPC/Hirose_FH12-36S-0.5SH_1x36-1MP_P0.50mm_Horizontal","Connector_FFC-FPC/Hirose_FH12-40S-0.5SH_1x40-1MP_P0.50mm_Horizontal","Connector_FFC-FPC/Hirose_FH12-45S-0.5SH_1x45-1MP_P0.50mm_Horizontal","Connector_FFC-FPC/Hirose_FH12-50S-0.5SH_1x50-1MP_P0.50mm_Horizontal","Connector_FFC-FPC/Hirose_FH12-53S-0.5SH_1x53-1MP_P0.50mm_Horizontal","Connector_FFC-FPC/Hirose_FH12-6S-0.5SH_1x06-1MP_P0.50mm_Horizontal","Connector_FFC-FPC/Hirose_FH12-8S-0.5SH_1x08-1MP_P0.50mm_Horizontal","Connector_FFC-FPC/Hirose_FH26-13S-0.3SHW_2Rows-13Pins-1MP_P0.60mm_Horizontal","Connector_FFC-FPC/Hirose_FH26-15S-0.3SHW_2Rows-15Pins-1MP_P0.60mm_Horizontal","Connector_FFC-FPC/Hirose_FH26-17S-0.3SHW_2Rows-17Pins-1MP_P0.60mm_Horizontal","Connector_FFC-FPC/Hirose_FH26-19S-0.3SHW_2Rows-19Pins-1MP_P0.60mm_Horizontal","Connector_FFC-FPC/Hirose_FH26-21S-0.3SHW_2Rows-21Pins-1MP_P0.60mm_Horizontal","Connector_FFC-FPC/Hirose_FH26-23S-0.3SHW_2Rows-23Pins-1MP_P0.60mm_Horizontal","Connector_FFC-FPC/Hirose_FH26-25S-0.3SHW_2Rows-25Pins-1MP_P0.60mm_Horizontal","Connector_FFC-FPC/Hirose_FH26-27S-0.3SHW_2Rows-27Pins-1MP_P0.60mm_Horizontal","Connector_FFC-FPC/Hirose_FH26-29S-0.3SHW_2Rows-29Pins-1MP_P0.60mm_Horizontal","Connector_FFC-FPC/Hirose_FH26-31S-0.3SHW_2Rows-31Pins-1MP_P0.60mm_Horizontal","Connector_FFC-FPC/Hirose_FH26-33S-0.3SHW_2Rows-33Pins-1MP_P0.60mm_Horizontal","Connector_FFC-FPC/Hirose_FH26-35S-0.3SHW_2Rows-35Pins-1MP_P0.60mm_Horizontal","Connector_FFC-FPC/Hirose_FH26-37S-0.3SHW_2Rows-37Pins-1MP_P0.60mm_Horizontal","Connector_FFC-FPC/Hirose_FH26-39S-0.3SHW_2Rows-39Pins-1MP_P0.60mm_Horizontal","Connector_FFC-FPC/Hirose_FH26-41S-0.3SHW_2Rows-41Pins-1MP_P0.60mm_Horizontal","Connector_FFC-FPC/Hirose_FH26-45S-0.3SHW_2Rows-45Pins-1MP_P0.60mm_Horizontal","Connector_FFC-FPC/Hirose_FH26-51S-0.3SHW_2Rows-51Pins-1MP_P0.60mm_Horizontal","Connector_FFC-FPC/Hirose_FH26-55S-0.3SHW_2Rows-55Pins-1MP_P0.60mm_Horizontal","Connector_FFC-FPC/Hirose_FH26-57S-0.3SHW_2Rows-57Pins-1MP_P0.60mm_Horizontal","Connector_FFC-FPC/Hirose_FH26-61S-0.3SHW_2Rows-61Pins-1MP_P0.60mm_Horizontal","Connector_FFC-FPC/Hirose_FH26-71S-0.3SHW_2Rows-71Pins-1MP_P0.60mm_Horizontal","Connector_FFC-FPC/Hirose_FH41-30S-0.5SH_1x30_1MP_1SH_P0.5mm_Horizontal","Connector_FFC-FPC/JAE_FF0825SA1_2Rows-25Pins_P0.40mm_Horizontal","Connector_FFC-FPC/JAE_FF0829SA1_2Rows-29Pins_P0.40mm_Horizontal","Connector_FFC-FPC/JAE_FF0841SA1_2Rows-41Pins_P0.40mm_Horizontal","Connector_FFC-FPC/JAE_FF0851SA1_2Rows-51Pins_P0.40mm_Horizontal","Connector_FFC-FPC/JAE_FF0871SA1_2Rows-71Pins_P0.40mm_Horizontal","Connector_FFC-FPC/JAE_FF0881SA1_2Rows-81Pins_P0.40mm_Horizontal","Connector_FFC-FPC/JUSHUO_AFA07-S04FCA-00_1x4-1MP_P1.0mm_Horizontal","Connector_FFC-FPC/JUSHUO_AFA07-S05FCA-00_1x5-1MP_P1.0mm_Horizontal","Connector_FFC-FPC/JUSHUO_AFA07-S06FCA-00_1x6-1MP_P1.0mm_Horizontal","Connector_FFC-FPC/JUSHUO_AFA07-S07FCA-00_1x7-1MP_P1.0mm_Horizontal","Connector_FFC-FPC/JUSHUO_AFA07-S08FCA-00_1x8-1MP_P1.0mm_Horizontal","Connector_FFC-FPC/JUSHUO_AFA07-S09FCA-00_1x9-1MP_P1.0mm_Horizontal","Connector_FFC-FPC/JUSHUO_AFA07-S10FCA-00_1x10-1MP_P1.0mm_Horizontal","Connector_FFC-FPC/JUSHUO_AFA07-S11FCA-00_1x11-1MP_P1.0mm_Horizontal","Connector_FFC-FPC/JUSHUO_AFA07-S12FCA-00_1x12-1MP_P1.0mm_Horizontal","Connector_FFC-FPC/JUSHUO_AFA07-S13FCA-00_1x13-1MP_P1.0mm_Horizontal","Connector_FFC-FPC/JUSHUO_AFA07-S14FCA-00_1x14-1MP_P1.0mm_Horizontal","Connector_FFC-FPC/JUSHUO_AFA07-S15FCA-00_1x15-1MP_P1.0mm_Horizontal","Connector_FFC-FPC/JUSHUO_AFA07-S16FCA-00_1x16-1MP_P1.0mm_Horizontal","Connector_FFC-FPC/JUSHUO_AFA07-S17FCA-00_1x17-1MP_P1.0mm_Horizontal","Connector_FFC-FPC/JUSHUO_AFA07-S18FCA-00_1x18-1MP_P1.0mm_Horizontal","Connector_FFC-FPC/JUSHUO_AFA07-S19FCA-00_1x19-1MP_P1.0mm_Horizontal","Connector_FFC-FPC/JUSHUO_AFA07-S20FCA-00_1x20-1MP_P1.0mm_Horizontal","Connector_FFC-FPC/JUSHUO_AFA07-S21FCA-00_1x21-1MP_P1.0mm_Horizontal","Connector_FFC-FPC/JUSHUO_AFA07-S22FCA-00_1x22-1MP_P1.0mm_Horizontal","Connector_FFC-FPC/JUSHUO_AFA07-S23FCA-00_1x23-1MP_P1.0mm_Horizontal","Connector_FFC-FPC/JUSHUO_AFA07-S24FCA-00_1x24-1MP_P1.0mm_Horizontal","Connector_FFC-FPC/JUSHUO_AFA07-S25FCA-00_1x25-1MP_P1.0mm_Horizontal","Connector_FFC-FPC/JUSHUO_AFA07-S26FCA-00_1x26-1MP_P1.0mm_Horizontal","Connector_FFC-FPC/JUSHUO_AFA07-S27FCA-00_1x27-1MP_P1.0mm_Horizontal","Connector_FFC-FPC/JUSHUO_AFA07-S28FCA-00_1x28-1MP_P1.0mm_Horizontal","Connector_FFC-FPC/JUSHUO_AFA07-S29FCA-00_1x29-1MP_P1.0mm_Horizontal","Connector_FFC-FPC/Jushuo_AFC07-S06FCA-00_1x6-1MP_P0.50_Horizontal","Connector_FFC-FPC/Jushuo_AFC07-S24FCA-00_1x24-1MP_P0.50_Horizontal","Connector_FFC-FPC/Molex_200528-0040_1x04-1MP_P1.00mm_Horizontal","Connector_FFC-FPC/Molex_200528-0050_1x05-1MP_P1.00mm_Horizontal","Connector_FFC-FPC/Molex_200528-0060_1x06-1MP_P1.00mm_Horizontal","Connector_FFC-FPC/Molex_200528-0070_1x07-1MP_P1.00mm_Horizontal","Connector_FFC-FPC/Molex_200528-0080_1x08-1MP_P1.00mm_Horizontal","Connector_FFC-FPC/Molex_200528-0090_1x09-1MP_P1.00mm_Horizontal","Connector_FFC-FPC/Molex_200528-0100_1x10-1MP_P1.00mm_Horizontal","Connector_FFC-FPC/Molex_200528-0110_1x11-1MP_P1.00mm_Horizontal","Connector_FFC-FPC/Molex_200528-0120_1x12-1MP_P1.00mm_Horizontal","Connector_FFC-FPC/Molex_200528-0130_1x13-1MP_P1.00mm_Horizontal","Connector_FFC-FPC/Molex_200528-0140_1x14-1MP_P1.00mm_Horizontal","Connector_FFC-FPC/Molex_200528-0150_1x15-1MP_P1.00mm_Horizontal","Connector_FFC-FPC/Molex_200528-0160_1x16-1MP_P1.00mm_Horizontal","Connector_FFC-FPC/Molex_200528-0170_1x17-1MP_P1.00mm_Horizontal","Connector_FFC-FPC/Molex_200528-0180_1x18-1MP_P1.00mm_Horizontal","Connector_FFC-FPC/Molex_200528-0190_1x19-1MP_P1.00mm_Horizontal","Connector_FFC-FPC/Molex_200528-0200_1x20-1MP_P1.00mm_Horizontal","Connector_FFC-FPC/Molex_200528-0210_1x21-1MP_P1.00mm_Horizontal","Connector_FFC-FPC/Molex_200528-0220_1x22-1MP_P1.00mm_Horizontal","Connector_FFC-FPC/Molex_200528-0230_1x23-1MP_P1.00mm_Horizontal","Connector_FFC-FPC/Molex_200528-0240_1x24-1MP_P1.00mm_Horizontal","Connector_FFC-FPC/Molex_200528-0250_1x25-1MP_P1.00mm_Horizontal","Connector_FFC-FPC/Molex_200528-0260_1x26-1MP_P1.00mm_Horizontal","Connector_FFC-FPC/Molex_200528-0270_1x27-1MP_P1.00mm_Horizontal","Connector_FFC-FPC/Molex_200528-0280_1x28-1MP_P1.00mm_Horizontal","Connector_FFC-FPC/Molex_200528-0290_1x29-1MP_P1.00mm_Horizontal","Connector_FFC-FPC/Molex_200528-0300_1x30-1MP_P1.00mm_Horizontal","Connector_FFC-FPC/Molex_502231-1500_1x15-1SH_P0.5mm_Vertical","Connector_FFC-FPC/Molex_502231-2400_1x24-1SH_P0.5mm_Vertical","Connector_FFC-FPC/Molex_502231-3300_1x33-1SH_P0.5mm_Vertical","Connector_FFC-FPC/Molex_502244-1530_1x15-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/Molex_502244-2430_1x24-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/Molex_502244-3330_1x33-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/Molex_502250-1791_2Rows-17Pins-1MP_P0.60mm_Horizontal","Connector_FFC-FPC/Molex_502250-2191_2Rows-21Pins-1MP_P0.60mm_Horizontal","Connector_FFC-FPC/Molex_502250-2391_2Rows-23Pins-1MP_P0.60mm_Horizontal","Connector_FFC-FPC/Molex_502250-2791_2Rows-27Pins-1MP_P0.60mm_Horizontal","Connector_FFC-FPC/Molex_502250-3391_2Rows-33Pins-1MP_P0.60mm_Horizontal","Connector_FFC-FPC/Molex_502250-3591_2Rows-35Pins-1MP_P0.60mm_Horizontal","Connector_FFC-FPC/Molex_502250-3991_2Rows-39Pins-1MP_P0.60mm_Horizontal","Connector_FFC-FPC/Molex_502250-4191_2Rows-41Pins-1MP_P0.60mm_Horizontal","Connector_FFC-FPC/Molex_502250-5191_2Rows-51Pins-1MP_P0.60mm_Horizontal","Connector_FFC-FPC/Molex_52559-3652_2x18-1MP_P0.5mm_Vertical","Connector_FFC-FPC/Molex_54132-5033_1x50-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/Molex_54548-1071_1x10-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/Omron_XF2M-4015-1A_1x40-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/TE_0-1734839-5_1x05-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/TE_0-1734839-6_1x06-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/TE_0-1734839-7_1x07-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/TE_0-1734839-8_1x08-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/TE_0-1734839-9_1x09-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/TE_1-1734839-0_1x10-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/TE_1-1734839-1_1x11-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/TE_1-1734839-2_1x12-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/TE_1-1734839-3_1x13-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/TE_1-1734839-4_1x14-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/TE_1-1734839-5_1x15-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/TE_1-1734839-6_1x16-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/TE_1-1734839-7_1x17-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/TE_1-1734839-8_1x18-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/TE_1-1734839-9_1x19-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/TE_1-84952-0_1x10-1MP_P1.0mm_Horizontal","Connector_FFC-FPC/TE_1-84952-1_1x11-1MP_P1.0mm_Horizontal","Connector_FFC-FPC/TE_1-84952-2_1x12-1MP_P1.0mm_Horizontal","Connector_FFC-FPC/TE_1-84952-3_1x13-1MP_P1.0mm_Horizontal","Connector_FFC-FPC/TE_1-84952-4_1x14-1MP_P1.0mm_Horizontal","Connector_FFC-FPC/TE_1-84952-5_1x15-1MP_P1.0mm_Horizontal","Connector_FFC-FPC/TE_1-84952-6_1x16-1MP_P1.0mm_Horizontal","Connector_FFC-FPC/TE_1-84952-7_1x17-1MP_P1.0mm_Horizontal","Connector_FFC-FPC/TE_1-84952-8_1x18-1MP_P1.0mm_Horizontal","Connector_FFC-FPC/TE_1-84952-9_1x19-1MP_P1.0mm_Horizontal","Connector_FFC-FPC/TE_1-84953-0_1x10-1MP_P1.0mm_Horizontal","Connector_FFC-FPC/TE_1-84953-1_1x11-1MP_P1.0mm_Horizontal","Connector_FFC-FPC/TE_1-84953-2_1x12-1MP_P1.0mm_Horizontal","Connector_FFC-FPC/TE_1-84953-3_1x13-1MP_P1.0mm_Horizontal","Connector_FFC-FPC/TE_1-84953-4_1x14-1MP_P1.0mm_Horizontal","Connector_FFC-FPC/TE_1-84953-5_1x15-1MP_P1.0mm_Horizontal","Connector_FFC-FPC/TE_1-84953-6_1x16-1MP_P1.0mm_Horizontal","Connector_FFC-FPC/TE_1-84953-7_1x17-1MP_P1.0mm_Horizontal","Connector_FFC-FPC/TE_1-84953-8_1x18-1MP_P1.0mm_Horizontal","Connector_FFC-FPC/TE_1-84953-9_1x19-1MP_P1.0mm_Horizontal","Connector_FFC-FPC/TE_1-84982-0_2Rows-10Pins-P1.0mm_Vertical","Connector_FFC-FPC/TE_1-84982-1_2Rows-11Pins-P1.0mm_Vertical","Connector_FFC-FPC/TE_1-84982-2_2Rows-12Pins-P1.0mm_Vertical","Connector_FFC-FPC/TE_1-84982-3_2Rows-13Pins-P1.0mm_Vertical","Connector_FFC-FPC/TE_1-84982-4_2Rows-14Pins-P1.0mm_Vertical","Connector_FFC-FPC/TE_1-84982-5_2Rows-15Pins-P1.0mm_Vertical","Connector_FFC-FPC/TE_1-84982-6_2Rows-16Pins-P1.0mm_Vertical","Connector_FFC-FPC/TE_1-84982-7_2Rows-17Pins-P1.0mm_Vertical","Connector_FFC-FPC/TE_1-84982-8_2Rows-18Pins-P1.0mm_Vertical","Connector_FFC-FPC/TE_1-84982-9_2Rows-19Pins-P1.0mm_Vertical","Connector_FFC-FPC/TE_2-1734839-0_1x20-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/TE_2-1734839-1_1x21-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/TE_2-1734839-2_1x22-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/TE_2-1734839-3_1x23-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/TE_2-1734839-4_1x24-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/TE_2-1734839-5_1x25-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/TE_2-1734839-6_1x26-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/TE_2-1734839-7_1x27-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/TE_2-1734839-8_1x28-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/TE_2-1734839-9_1x29-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/TE_2-84952-0_1x20-1MP_P1.0mm_Horizontal","Connector_FFC-FPC/TE_2-84952-1_1x21-1MP_P1.0mm_Horizontal","Connector_FFC-FPC/TE_2-84952-2_1x22-1MP_P1.0mm_Horizontal","Connector_FFC-FPC/TE_2-84952-3_1x23-1MP_P1.0mm_Horizontal","Connector_FFC-FPC/TE_2-84952-4_1x24-1MP_P1.0mm_Horizontal","Connector_FFC-FPC/TE_2-84952-5_1x25-1MP_P1.0mm_Horizontal","Connector_FFC-FPC/TE_2-84952-6_1x26-1MP_P1.0mm_Horizontal","Connector_FFC-FPC/TE_2-84952-7_1x27-1MP_P1.0mm_Horizontal","Connector_FFC-FPC/TE_2-84952-8_1x28-1MP_P1.0mm_Horizontal","Connector_FFC-FPC/TE_2-84952-9_1x29-1MP_P1.0mm_Horizontal","Connector_FFC-FPC/TE_2-84953-0_1x20-1MP_P1.0mm_Horizontal","Connector_FFC-FPC/TE_2-84953-1_1x21-1MP_P1.0mm_Horizontal","Connector_FFC-FPC/TE_2-84953-2_1x22-1MP_P1.0mm_Horizontal","Connector_FFC-FPC/TE_2-84953-3_1x23-1MP_P1.0mm_Horizontal","Connector_FFC-FPC/TE_2-84953-4_1x24-1MP_P1.0mm_Horizontal","Connector_FFC-FPC/TE_2-84953-5_1x25-1MP_P1.0mm_Horizontal","Connector_FFC-FPC/TE_2-84953-6_1x26-1MP_P1.0mm_Horizontal","Connector_FFC-FPC/TE_2-84953-7_1x27-1MP_P1.0mm_Horizontal","Connector_FFC-FPC/TE_2-84953-8_1x28-1MP_P1.0mm_Horizontal","Connector_FFC-FPC/TE_2-84953-9_1x29-1MP_P1.0mm_Horizontal","Connector_FFC-FPC/TE_2-84982-0_2Rows-20Pins-P1.0mm_Vertical","Connector_FFC-FPC/TE_2-84982-1_2Rows-21Pins-P1.0mm_Vertical","Connector_FFC-FPC/TE_2-84982-2_2Rows-22Pins-P1.0mm_Vertical","Connector_FFC-FPC/TE_2-84982-3_2Rows-23Pins-P1.0mm_Vertical","Connector_FFC-FPC/TE_2-84982-4_2Rows-24Pins-P1.0mm_Vertical","Connector_FFC-FPC/TE_2-84982-5_2Rows-25Pins-P1.0mm_Vertical","Connector_FFC-FPC/TE_2-84982-6_2Rows-26Pins-P1.0mm_Vertical","Connector_FFC-FPC/TE_2-84982-7_2Rows-27Pins-P1.0mm_Vertical","Connector_FFC-FPC/TE_2-84982-8_2Rows-28Pins-P1.0mm_Vertical","Connector_FFC-FPC/TE_2-84982-9_2Rows-29Pins-P1.0mm_Vertical","Connector_FFC-FPC/TE_3-1734839-0_1x30-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/TE_3-1734839-1_1x31-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/TE_3-1734839-2_1x32-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/TE_3-1734839-3_1x33-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/TE_3-1734839-4_1x34-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/TE_3-1734839-5_1x35-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/TE_3-1734839-6_1x36-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/TE_3-1734839-7_1x37-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/TE_3-1734839-8_1x38-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/TE_3-1734839-9_1x39-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/TE_3-84952-0_1x30-1MP_P1.0mm_Horizontal","Connector_FFC-FPC/TE_3-84953-0_1x30-1MP_P1.0mm_Horizontal","Connector_FFC-FPC/TE_3-84982-0_2Rows-30Pins-P1.0mm_Vertical","Connector_FFC-FPC/TE_4-1734839-0_1x40-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/TE_4-1734839-1_1x41-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/TE_4-1734839-2_1x42-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/TE_4-1734839-3_1x43-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/TE_4-1734839-4_1x44-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/TE_4-1734839-5_1x45-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/TE_4-1734839-6_1x46-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/TE_4-1734839-7_1x47-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/TE_4-1734839-8_1x48-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/TE_4-1734839-9_1x49-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/TE_5-1734839-0_1x50-1MP_P0.5mm_Horizontal","Connector_FFC-FPC/TE_84952-4_1x04-1MP_P1.0mm_Horizontal","Connector_FFC-FPC/TE_84952-5_1x05-1MP_P1.0mm_Horizontal","Connector_FFC-FPC/TE_84952-6_1x06-1MP_P1.0mm_Horizontal","Connector_FFC-FPC/TE_84952-7_1x07-1MP_P1.0mm_Horizontal","Connector_FFC-FPC/TE_84952-8_1x08-1MP_P1.0mm_Horizontal","Connector_FFC-FPC/TE_84952-9_1x09-1MP_P1.0mm_Horizontal","Connector_FFC-FPC/TE_84953-4_1x04-1MP_P1.0mm_Horizontal","Connector_FFC-FPC/TE_84953-5_1x05-1MP_P1.0mm_Horizontal","Connector_FFC-FPC/TE_84953-6_1x06-1MP_P1.0mm_Horizontal","Connector_FFC-FPC/TE_84953-7_1x07-1MP_P1.0mm_Horizontal","Connector_FFC-FPC/TE_84953-8_1x08-1MP_P1.0mm_Horizontal","Connector_FFC-FPC/TE_84953-9_1x09-1MP_P1.0mm_Horizontal","Connector_FFC-FPC/TE_84982-4_2Rows-04Pins-P1.0mm_Vertical","Connector_FFC-FPC/TE_84982-5_2Rows-05Pins-P1.0mm_Vertical","Connector_FFC-FPC/TE_84982-6_2Rows-06Pins-P1.0mm_Vertical","Connector_FFC-FPC/TE_84982-7_2Rows-07Pins-P1.0mm_Vertical","Connector_FFC-FPC/TE_84982-8_2Rows-08Pins-P1.0mm_Vertical","Connector_FFC-FPC/TE_84982-9_2Rows-09Pins-P1.0mm_Vertical","Connector_FFC-FPC/Wuerth_68611214422_1x12-1MP_P1.0mm_Horizontal","Connector_Harting/Harting_har-flexicon_14110213001xxx_1x02-MP_P2.54mm_Vertical","Connector_Harting/Harting_har-flexicon_14110213002xxx_1x02-MP_P2.54mm_Horizontal","Connector_Harting/Harting_har-flexicon_14110213010xxx_1x02-MP_P2.54mm_Horizontal","Connector_Harting/Harting_har-flexicon_14110313001xxx_1x03-MP_P2.54mm_Vertical","Connector_Harting/Harting_har-flexicon_14110313002xxx_1x03-MP_P2.54mm_Horizontal","Connector_Harting/Harting_har-flexicon_14110313010xxx_1x03-MP_P2.54mm_Horizontal","Connector_Harting/Harting_har-flexicon_14110413001xxx_1x04-MP_P2.54mm_Vertical","Connector_Harting/Harting_har-flexicon_14110413002xxx_1x04-MP_P2.54mm_Horizontal","Connector_Harting/Harting_har-flexicon_14110413010xxx_1x04-MP_P2.54mm_Horizontal","Connector_Harting/Harting_har-flexicon_14110513001xxx_1x05-MP_P2.54mm_Vertical","Connector_Harting/Harting_har-flexicon_14110513002xxx_1x05-MP_P2.54mm_Horizontal","Connector_Harting/Harting_har-flexicon_14110513010xxx_1x05-MP_P2.54mm_Horizontal","Connector_Harting/Harting_har-flexicon_14110613001xxx_1x06-MP_P2.54mm_Vertical","Connector_Harting/Harting_har-flexicon_14110613002xxx_1x06-MP_P2.54mm_Horizontal","Connector_Harting/Harting_har-flexicon_14110613010xxx_1x06-MP_P2.54mm_Horizontal","Connector_Harting/Harting_har-flexicon_14110713001xxx_1x07-MP_P2.54mm_Vertical","Connector_Harting/Harting_har-flexicon_14110713002xxx_1x07-MP_P2.54mm_Horizontal","Connector_Harting/Harting_har-flexicon_14110713010xxx_1x07-MP_P2.54mm_Horizontal","Connector_Harting/Harting_har-flexicon_14110813001xxx_1x08-MP_P2.54mm_Vertical","Connector_Harting/Harting_har-flexicon_14110813002xxx_1x08-MP_P2.54mm_Horizontal","Connector_Harting/Harting_har-flexicon_14110813010xxx_1x08-MP_P2.54mm_Horizontal","Connector_Harting/Harting_har-flexicon_14110913001xxx_1x09-MP_P2.54mm_Vertical","Connector_Harting/Harting_har-flexicon_14110913002xxx_1x09-MP_P2.54mm_Horizontal","Connector_Harting/Harting_har-flexicon_14110913010xxx_1x09-MP_P2.54mm_Horizontal","Connector_Harting/Harting_har-flexicon_14111013001xxx_1x10-MP_P2.54mm_Vertical","Connector_Harting/Harting_har-flexicon_14111013002xxx_1x10-MP_P2.54mm_Horizontal","Connector_Harting/Harting_har-flexicon_14111013010xxx_1x10-MP_P2.54mm_Horizontal","Connector_Harting/Harting_har-flexicon_14111113001xxx_1x11-MP_P2.54mm_Vertical","Connector_Harting/Harting_har-flexicon_14111113002xxx_1x11-MP_P2.54mm_Horizontal","Connector_Harting/Harting_har-flexicon_14111113010xxx_1x11-MP_P2.54mm_Horizontal","Connector_Harting/Harting_har-flexicon_14111213001xxx_1x12-MP_P2.54mm_Vertical","Connector_Harting/Harting_har-flexicon_14111213002xxx_1x12-MP_P2.54mm_Horizontal","Connector_Harting/Harting_har-flexicon_14111213010xxx_1x12-MP_P2.54mm_Horizontal","Connector_Harwin/Harwin_Gecko-G125-FVX0605L0X_2x03_P1.25mm_Vertical","Connector_Harwin/Harwin_Gecko-G125-FVX1005L0X_2x05_P1.25mm_Vertical","Connector_Harwin/Harwin_Gecko-G125-FVX1205L0X_2x06_P1.25mm_Vertical","Connector_Harwin/Harwin_Gecko-G125-FVX1605L0X_2x08_P1.25mm_Vertical","Connector_Harwin/Harwin_Gecko-G125-FVX2005L0X_2x10_P1.25mm_Vertical","Connector_Harwin/Harwin_Gecko-G125-FVX2605L0X_2x13_P1.25mm_Vertical","Connector_Harwin/Harwin_Gecko-G125-FVX3405L0X_2x17_P1.25mm_Vertical","Connector_Harwin/Harwin_Gecko-G125-FVX5005L0X_2x25_P1.25mm_Vertical","Connector_Harwin/Harwin_Gecko-G125-MVX0605L0X_2x03_P1.25mm_Vertical","Connector_Harwin/Harwin_Gecko-G125-MVX0605L1X_2x03_P1.25mm_Vertical","Connector_Harwin/Harwin_Gecko-G125-MVX1005L0X_2x05_P1.25mm_Vertical","Connector_Harwin/Harwin_Gecko-G125-MVX1005L1X_2x05_P1.25mm_Vertical","Connector_Harwin/Harwin_Gecko-G125-MVX1205L0X_2x06_P1.25mm_Vertical","Connector_Harwin/Harwin_Gecko-G125-MVX1205L1X_2x06_P1.25mm_Vertical","Connector_Harwin/Harwin_Gecko-G125-MVX1605L0X_2x08_P1.25mm_Vertical","Connector_Harwin/Harwin_Gecko-G125-MVX1605L1X_2x08_P1.25mm_Vertical","Connector_Harwin/Harwin_Gecko-G125-MVX2005L0X_2x10_P1.25mm_Vertical","Connector_Harwin/Harwin_Gecko-G125-MVX2005L1X_2x10_P1.25mm_Vertical","Connector_Harwin/Harwin_Gecko-G125-MVX2605L0X_2x13_P1.25mm_Vertical","Connector_Harwin/Harwin_Gecko-G125-MVX2605L1X_2x13_P1.25mm_Vertical","Connector_Harwin/Harwin_Gecko-G125-MVX3405L0X_2x17_P1.25mm_Vertical","Connector_Harwin/Harwin_Gecko-G125-MVX3405L1X_2x17_P1.25mm_Vertical","Connector_Harwin/Harwin_Gecko-G125-MVX5005L0X_2x25_P1.25mm_Vertical","Connector_Harwin/Harwin_Gecko-G125-MVX5005L1X_2x25_P1.25mm_Vertical","Connector_Harwin/Harwin_Gecko_G125-MS10605M2P_2x03_P1.25mm_Vertical","Connector_Harwin/Harwin_Gecko_G125-MS11005M2P_2x05_P1.25mm_Vertical","Connector_Harwin/Harwin_Gecko_G125-MS11205M2P_2x06_P1.25mm_Vertical","Connector_Harwin/Harwin_Gecko_G125-MS11605M2P_2x08_P1.25mm_Vertical","Connector_Harwin/Harwin_Gecko_G125-MS12005M2P_2x10_P1.25mm_Vertical","Connector_Harwin/Harwin_Gecko_G125-MS12605M2P_2x13_P1.25mm_Vertical","Connector_Harwin/Harwin_Gecko_G125-MS13405M2P_2x17_P1.25mm_Vertical","Connector_Harwin/Harwin_Gecko_G125-MS15005M2P_2x25_P1.25mm_Vertical","Connector_Harwin/Harwin_LTek-Male_02_P2.00mm_Vertical","Connector_Harwin/Harwin_LTek-Male_02_P2.00mm_Vertical_StrainRelief","Connector_Harwin/Harwin_LTek-Male_03_P2.00mm_Vertical","Connector_Harwin/Harwin_LTek-Male_03_P2.00mm_Vertical_StrainRelief","Connector_Harwin/Harwin_LTek-Male_04_P2.00mm_Vertical","Connector_Harwin/Harwin_LTek-Male_04_P2.00mm_Vertical_StrainRelief","Connector_Harwin/Harwin_LTek-Male_05_P2.00mm_Vertical","Connector_Harwin/Harwin_LTek-Male_05_P2.00mm_Vertical_StrainRelief","Connector_Harwin/Harwin_LTek-Male_06_P2.00mm_Vertical","Connector_Harwin/Harwin_LTek-Male_06_P2.00mm_Vertical_StrainRelief","Connector_Harwin/Harwin_LTek-Male_07_P2.00mm_Vertical","Connector_Harwin/Harwin_LTek-Male_07_P2.00mm_Vertical_StrainRelief","Connector_Harwin/Harwin_LTek-Male_17_P2.00mm_Vertical","Connector_Harwin/Harwin_LTek-Male_17_P2.00mm_Vertical_StrainRelief","Connector_Harwin/Harwin_LTek-Male_22_P2.00mm_Vertical","Connector_Harwin/Harwin_LTek-Male_22_P2.00mm_Vertical_StrainRelief","Connector_Harwin/Harwin_LTek-Male_2x02_P2.00mm_Vertical","Connector_Harwin/Harwin_LTek-Male_2x02_P2.00mm_Vertical_StrainRelief","Connector_Harwin/Harwin_LTek-Male_2x03_P2.00mm_Vertical","Connector_Harwin/Harwin_LTek-Male_2x03_P2.00mm_Vertical_StrainRelief","Connector_Harwin/Harwin_LTek-Male_2x04_P2.00mm_Vertical","Connector_Harwin/Harwin_LTek-Male_2x04_P2.00mm_Vertical_StrainRelief","Connector_Harwin/Harwin_LTek-Male_2x05_P2.00mm_Vertical","Connector_Harwin/Harwin_LTek-Male_2x05_P2.00mm_Vertical_StrainRelief","Connector_Harwin/Harwin_LTek-Male_2x06_P2.00mm_Vertical","Connector_Harwin/Harwin_LTek-Male_2x06_P2.00mm_Vertical_StrainRelief","Connector_Harwin/Harwin_LTek-Male_2x07_P2.00mm_Vertical","Connector_Harwin/Harwin_LTek-Male_2x07_P2.00mm_Vertical_StrainRelief","Connector_Harwin/Harwin_LTek-Male_2x08_P2.00mm_Vertical","Connector_Harwin/Harwin_LTek-Male_2x08_P2.00mm_Vertical_StrainRelief","Connector_Harwin/Harwin_LTek-Male_2x09_P2.00mm_Vertical","Connector_Harwin/Harwin_LTek-Male_2x09_P2.00mm_Vertical_StrainRelief","Connector_Harwin/Harwin_LTek-Male_2x10_P2.00mm_Vertical","Connector_Harwin/Harwin_LTek-Male_2x10_P2.00mm_Vertical_StrainRelief","Connector_Harwin/Harwin_LTek-Male_2x13_P2.00mm_Vertical","Connector_Harwin/Harwin_LTek-Male_2x13_P2.00mm_Vertical_StrainRelief","Connector_Harwin/Harwin_LTek-Male_2x17_P2.00mm_Vertical","Connector_Harwin/Harwin_LTek-Male_2x17_P2.00mm_Vertical_StrainRelief","Connector_Harwin/Harwin_LTek-Male_2x22_P2.00mm_Vertical","Connector_Harwin/Harwin_LTek-Male_2x22_P2.00mm_Vertical_StrainRelief","Connector_Harwin/Harwin_M20-7810245_2x02_P2.54mm_Vertical","Connector_Harwin/Harwin_M20-7810345_2x03_P2.54mm_Vertical","Connector_Harwin/Harwin_M20-7810445_2x04_P2.54mm_Vertical","Connector_Harwin/Harwin_M20-7810545_2x05_P2.54mm_Vertical","Connector_Harwin/Harwin_M20-7810645_2x06_P2.54mm_Vertical","Connector_Harwin/Harwin_M20-7810745_2x07_P2.54mm_Vertical","Connector_Harwin/Harwin_M20-7810845_2x08_P2.54mm_Vertical","Connector_Harwin/Harwin_M20-7810945_2x09_P2.54mm_Vertical","Connector_Harwin/Harwin_M20-7811045_2x10_P2.54mm_Vertical","Connector_Harwin/Harwin_M20-7811245_2x12_P2.54mm_Vertical","Connector_Harwin/Harwin_M20-7811545_2x15_P2.54mm_Vertical","Connector_Harwin/Harwin_M20-7812045_2x20_P2.54mm_Vertical","Connector_Harwin/Harwin_M20-89003xx_1x03_P2.54mm_Horizontal","Connector_Harwin/Harwin_M20-89004xx_1x04_P2.54mm_Horizontal","Connector_Harwin/Harwin_M20-89005xx_1x05_P2.54mm_Horizontal","Connector_Harwin/Harwin_M20-89006xx_1x06_P2.54mm_Horizontal","Connector_Harwin/Harwin_M20-89007xx_1x07_P2.54mm_Horizontal","Connector_Harwin/Harwin_M20-89008xx_1x08_P2.54mm_Horizontal","Connector_Harwin/Harwin_M20-89009xx_1x09_P2.54mm_Horizontal","Connector_Harwin/Harwin_M20-89010xx_1x10_P2.54mm_Horizontal","Connector_Harwin/Harwin_M20-89011xx_1x11_P2.54mm_Horizontal","Connector_Harwin/Harwin_M20-89012xx_1x12_P2.54mm_Horizontal","Connector_Harwin/Harwin_M20-89013xx_1x13_P2.54mm_Horizontal","Connector_Harwin/Harwin_M20-89014xx_1x14_P2.54mm_Horizontal","Connector_Harwin/Harwin_M20-89015xx_1x15_P2.54mm_Horizontal","Connector_Harwin/Harwin_M20-89016xx_1x16_P2.54mm_Horizontal","Connector_Harwin/Harwin_M20-89017xx_1x17_P2.54mm_Horizontal","Connector_Harwin/Harwin_M20-89018xx_1x18_P2.54mm_Horizontal","Connector_Harwin/Harwin_M20-89019xx_1x19_P2.54mm_Horizontal","Connector_Harwin/Harwin_M20-89020xx_1x20_P2.54mm_Horizontal","Connector_Hirose/Hirose_BM23FR0.6-16DP-0.35V_2x08_1MP_Vertical","Connector_Hirose/Hirose_BM23FR0.6-16DS-0.35V_2x08_P0.35_1MP_Vertical","Connector_Hirose/Hirose_BM24_BM24-40DP-2-0.35V_2x20_P0.35mm_PowerPin2_Vertical","Connector_Hirose/Hirose_BM24_BM24-40DS-2-0.35V_2x20_P0.35mm_PowerPin2_Vertical","Connector_Hirose/Hirose_DF11-10DP-2DSA_2x05_P2.00mm_Vertical","Connector_Hirose/Hirose_DF11-12DP-2DSA_2x06_P2.00mm_Vertical","Connector_Hirose/Hirose_DF11-14DP-2DSA_2x07_P2.00mm_Vertical","Connector_Hirose/Hirose_DF11-16DP-2DSA_2x08_P2.00mm_Vertical","Connector_Hirose/Hirose_DF11-18DP-2DSA_2x09_P2.00mm_Vertical","Connector_Hirose/Hirose_DF11-20DP-2DSA_2x10_P2.00mm_Vertical","Connector_Hirose/Hirose_DF11-22DP-2DSA_2x11_P2.00mm_Vertical","Connector_Hirose/Hirose_DF11-24DP-2DSA_2x12_P2.00mm_Vertical","Connector_Hirose/Hirose_DF11-26DP-2DSA_2x13_P2.00mm_Vertical","Connector_Hirose/Hirose_DF11-28DP-2DSA_2x14_P2.00mm_Vertical","Connector_Hirose/Hirose_DF11-30DP-2DSA_2x15_P2.00mm_Vertical","Connector_Hirose/Hirose_DF11-32DP-2DSA_2x16_P2.00mm_Vertical","Connector_Hirose/Hirose_DF11-4DP-2DSA_2x02_P2.00mm_Vertical","Connector_Hirose/Hirose_DF11-6DP-2DSA_2x03_P2.00mm_Vertical","Connector_Hirose/Hirose_DF11-8DP-2DSA_2x04_P2.00mm_Vertical","Connector_Hirose/Hirose_DF12_DF12C3.0-10DS-0.5V_2x05_P0.50mm_Vertical","Connector_Hirose/Hirose_DF12_DF12C3.0-14DS-0.5V_2x07_P0.50mm_Vertical","Connector_Hirose/Hirose_DF12_DF12C3.0-20DS-0.5V_2x10_P0.50mm_Vertical","Connector_Hirose/Hirose_DF12_DF12C3.0-30DS-0.5V_2x15_P0.50mm_Vertical","Connector_Hirose/Hirose_DF12_DF12C3.0-32DS-0.5V_2x16_P0.50mm_Vertical","Connector_Hirose/Hirose_DF12_DF12C3.0-36DS-0.5V_2x18_P0.50mm_Vertical","Connector_Hirose/Hirose_DF12_DF12C3.0-40DS-0.5V_2x20_P0.50mm_Vertical","Connector_Hirose/Hirose_DF12_DF12C3.0-50DS-0.5V_2x25_P0.50mm_Vertical","Connector_Hirose/Hirose_DF12_DF12C3.0-60DS-0.5V_2x30_P0.50mm_Vertical","Connector_Hirose/Hirose_DF12_DF12E3.0-10DP-0.5V_2x05_P0.50mm_Vertical","Connector_Hirose/Hirose_DF12_DF12E3.0-14DP-0.5V_2x07_P0.50mm_Vertical","Connector_Hirose/Hirose_DF12_DF12E3.0-20DP-0.5V_2x10_P0.50mm_Vertical","Connector_Hirose/Hirose_DF12_DF12E3.0-30DP-0.5V_2x15_P0.50mm_Vertical","Connector_Hirose/Hirose_DF12_DF12E3.0-32DP-0.5V_2x16_P0.50mm_Vertical","Connector_Hirose/Hirose_DF12_DF12E3.0-36DP-0.5V_2x18_P0.50mm_Vertical","Connector_Hirose/Hirose_DF12_DF12E3.0-40DP-0.5V_2x20_P0.50mm_Vertical","Connector_Hirose/Hirose_DF12_DF12E3.0-50DP-0.5V_2x25_P0.50mm_Vertical","Connector_Hirose/Hirose_DF12_DF12E3.0-60DP-0.5V_2x30_P0.50mm_Vertical","Connector_Hirose/Hirose_DF12_DF12E3.0-80DP-0.5V_2x40_P0.50mm_Vertical","Connector_Hirose/Hirose_DF13-02P-1.25DSA_1x02_P1.25mm_Vertical","Connector_Hirose/Hirose_DF13-02P-1.25DS_1x02_P1.25mm_Horizontal","Connector_Hirose/Hirose_DF13-03P-1.25DSA_1x03_P1.25mm_Vertical","Connector_Hirose/Hirose_DF13-03P-1.25DS_1x03_P1.25mm_Horizontal","Connector_Hirose/Hirose_DF13-04P-1.25DSA_1x04_P1.25mm_Vertical","Connector_Hirose/Hirose_DF13-04P-1.25DS_1x04_P1.25mm_Horizontal","Connector_Hirose/Hirose_DF13-05P-1.25DSA_1x05_P1.25mm_Vertical","Connector_Hirose/Hirose_DF13-05P-1.25DS_1x05_P1.25mm_Horizontal","Connector_Hirose/Hirose_DF13-06P-1.25DSA_1x06_P1.25mm_Vertical","Connector_Hirose/Hirose_DF13-06P-1.25DS_1x06_P1.25mm_Horizontal","Connector_Hirose/Hirose_DF13-07P-1.25DSA_1x07_P1.25mm_Vertical","Connector_Hirose/Hirose_DF13-07P-1.25DS_1x07_P1.25mm_Horizontal","Connector_Hirose/Hirose_DF13-08P-1.25DSA_1x08_P1.25mm_Vertical","Connector_Hirose/Hirose_DF13-08P-1.25DS_1x08_P1.25mm_Horizontal","Connector_Hirose/Hirose_DF13-09P-1.25DSA_1x09_P1.25mm_Vertical","Connector_Hirose/Hirose_DF13-09P-1.25DS_1x09_P1.25mm_Horizontal","Connector_Hirose/Hirose_DF13-10P-1.25DSA_1x10_P1.25mm_Vertical","Connector_Hirose/Hirose_DF13-10P-1.25DS_1x10_P1.25mm_Horizontal","Connector_Hirose/Hirose_DF13-11P-1.25DSA_1x11_P1.25mm_Vertical","Connector_Hirose/Hirose_DF13-11P-1.25DS_1x11_P1.25mm_Horizontal","Connector_Hirose/Hirose_DF13-12P-1.25DSA_1x12_P1.25mm_Vertical","Connector_Hirose/Hirose_DF13-12P-1.25DS_1x12_P1.25mm_Horizontal","Connector_Hirose/Hirose_DF13-13P-1.25DSA_1x13_P1.25mm_Vertical","Connector_Hirose/Hirose_DF13-14P-1.25DSA_1x14_P1.25mm_Vertical","Connector_Hirose/Hirose_DF13-14P-1.25DS_1x14_P1.25mm_Horizontal","Connector_Hirose/Hirose_DF13-15P-1.25DSA_1x15_P1.25mm_Vertical","Connector_Hirose/Hirose_DF13-15P-1.25DS_1x15_P1.25mm_Horizontal","Connector_Hirose/Hirose_DF13C_CL535-0402-2-51_1x02-1MP_P1.25mm_Vertical","Connector_Hirose/Hirose_DF13C_CL535-0403-5-51_1x03-1MP_P1.25mm_Vertical","Connector_Hirose/Hirose_DF13C_CL535-0404-8-51_1x04-1MP_P1.25mm_Vertical","Connector_Hirose/Hirose_DF13C_CL535-0405-0-51_1x05-1MP_P1.25mm_Vertical","Connector_Hirose/Hirose_DF13C_CL535-0406-3-51_1x06-1MP_P1.25mm_Vertical","Connector_Hirose/Hirose_DF13C_CL535-0407-6-51_1x07-1MP_P1.25mm_Vertical","Connector_Hirose/Hirose_DF13C_CL535-0408-9-51_1x08-1MP_P1.25mm_Vertical","Connector_Hirose/Hirose_DF13C_CL535-0409-1-51_1x09-1MP_P1.25mm_Vertical","Connector_Hirose/Hirose_DF13C_CL535-0410-4-51_1x10-1MP_P1.25mm_Vertical","Connector_Hirose/Hirose_DF13C_CL535-0411-3-51_1x11-1MP_P1.25mm_Vertical","Connector_Hirose/Hirose_DF13C_CL535-0412-6-51_1x12-1MP_P1.25mm_Vertical","Connector_Hirose/Hirose_DF13C_CL535-0414-1-51_1x14-1MP_P1.25mm_Vertical","Connector_Hirose/Hirose_DF13C_CL535-0415-4-51_1x15-1MP_P1.25mm_Vertical","Connector_Hirose/Hirose_DF3EA-02P-2H_1x02-1MP_P2.00mm_Horizontal","Connector_Hirose/Hirose_DF3EA-02P-2V_1x02-1MP_P2.00mm_Vertical","Connector_Hirose/Hirose_DF3EA-03P-2H_1x03-1MP_P2.00mm_Horizontal","Connector_Hirose/Hirose_DF3EA-03P-2V_1x03-1MP_P2.00mm_Vertical","Connector_Hirose/Hirose_DF3EA-04P-2H_1x04-1MP_P2.00mm_Horizontal","Connector_Hirose/Hirose_DF3EA-04P-2V_1x04-1MP_P2.00mm_Vertical","Connector_Hirose/Hirose_DF3EA-05P-2H_1x05-1MP_P2.00mm_Horizontal","Connector_Hirose/Hirose_DF3EA-05P-2V_1x05-1MP_P2.00mm_Vertical","Connector_Hirose/Hirose_DF3EA-06P-2H_1x06-1MP_P2.00mm_Horizontal","Connector_Hirose/Hirose_DF3EA-06P-2V_1x06-1MP_P2.00mm_Vertical","Connector_Hirose/Hirose_DF3EA-07P-2H_1x07-1MP_P2.00mm_Horizontal","Connector_Hirose/Hirose_DF3EA-07P-2V_1x07-1MP_P2.00mm_Vertical","Connector_Hirose/Hirose_DF3EA-08P-2H_1x08-1MP_P2.00mm_Horizontal","Connector_Hirose/Hirose_DF3EA-08P-2V_1x08-1MP_P2.00mm_Vertical","Connector_Hirose/Hirose_DF3EA-09P-2H_1x09-1MP_P2.00mm_Horizontal","Connector_Hirose/Hirose_DF3EA-09P-2V_1x09-1MP_P2.00mm_Vertical","Connector_Hirose/Hirose_DF3EA-10P-2H_1x10-1MP_P2.00mm_Horizontal","Connector_Hirose/Hirose_DF3EA-10P-2V_1x10-1MP_P2.00mm_Vertical","Connector_Hirose/Hirose_DF3EA-11P-2H_1x11-1MP_P2.00mm_Horizontal","Connector_Hirose/Hirose_DF3EA-11P-2V_1x11-1MP_P2.00mm_Vertical","Connector_Hirose/Hirose_DF3EA-12P-2H_1x12-1MP_P2.00mm_Horizontal","Connector_Hirose/Hirose_DF3EA-12P-2V_1x12-1MP_P2.00mm_Vertical","Connector_Hirose/Hirose_DF3EA-13P-2H_1x13-1MP_P2.00mm_Horizontal","Connector_Hirose/Hirose_DF3EA-13P-2V_1x13-1MP_P2.00mm_Vertical","Connector_Hirose/Hirose_DF3EA-14P-2H_1x14-1MP_P2.00mm_Horizontal","Connector_Hirose/Hirose_DF3EA-14P-2V_1x14-1MP_P2.00mm_Vertical","Connector_Hirose/Hirose_DF3EA-15P-2H_1x15-1MP_P2.00mm_Horizontal","Connector_Hirose/Hirose_DF3EA-15P-2V_1x15-1MP_P2.00mm_Vertical","Connector_Hirose/Hirose_DF52-10S-0.8H_1x10-1MP_P0.80mm_Horizontal","Connector_Hirose/Hirose_DF52-11S-0.8H_1x11-1MP_P0.80mm_Horizontal","Connector_Hirose/Hirose_DF52-12S-0.8H_1x12-1MP_P0.80mm_Horizontal","Connector_Hirose/Hirose_DF52-14S-0.8H_1x14-1MP_P0.80mm_Horizontal","Connector_Hirose/Hirose_DF52-15S-0.8H_1x15-1MP_P0.80mm_Horizontal","Connector_Hirose/Hirose_DF52-2S-0.8H_1x02-1MP_P0.80mm_Horizontal","Connector_Hirose/Hirose_DF52-3S-0.8H_1x03-1MP_P0.80mm_Horizontal","Connector_Hirose/Hirose_DF52-4S-0.8H_1x04-1MP_P0.80mm_Horizontal","Connector_Hirose/Hirose_DF52-5S-0.8H_1x05-1MP_P0.80mm_Horizontal","Connector_Hirose/Hirose_DF52-6S-0.8H_1x06-1MP_P0.80mm_Horizontal","Connector_Hirose/Hirose_DF52-7S-0.8H_1x07-1MP_P0.80mm_Horizontal","Connector_Hirose/Hirose_DF52-8S-0.8H_1x08-1MP_P0.80mm_Horizontal","Connector_Hirose/Hirose_DF52-9S-0.8H_1x09-1MP_P0.80mm_Horizontal","Connector_Hirose/Hirose_DF57H-2P-1.2V_1x02_P1.2mm_Socket","Connector_Hirose/Hirose_DF57H-2P-2.4V_1x02_P2.4mm_Socket","Connector_Hirose/Hirose_DF57H-3P-1.2V_1x03_P1.2mm_Socket","Connector_Hirose/Hirose_DF57H-4P-1.2V_1x04_P1.2mm_Socket","Connector_Hirose/Hirose_DF57H-5P-1.2V_1x05_P1.2mm_Socket","Connector_Hirose/Hirose_DF57H-6P-1.2V_1x06_P1.2mm_Socket","Connector_Hirose/Hirose_DF63-5P-3.96DSA_1x05_P3.96mm_Vertical","Connector_Hirose/Hirose_DF63-6P-3.96DSA_1x06_P3.96mm_Vertical","Connector_Hirose/Hirose_DF63M-1P-3.96DSA_1x01_P3.96mm_Vertical","Connector_Hirose/Hirose_DF63M-2P-3.96DSA_1x02_P3.96mm_Vertical","Connector_Hirose/Hirose_DF63M-3P-3.96DSA_1x03_P3.96mm_Vertical","Connector_Hirose/Hirose_DF63M-4P-3.96DSA_1x04_P3.96mm_Vertical","Connector_Hirose/Hirose_DF63R-1P-3.96DSA_1x01_P3.96mm_Vertical","Connector_Hirose/Hirose_DF63R-2P-3.96DSA_1x02_P3.96mm_Vertical","Connector_Hirose/Hirose_DF63R-3P-3.96DSA_1x03_P3.96mm_Vertical","Connector_Hirose/Hirose_DF63R-4P-3.96DSA_1x04_P3.96mm_Vertical","Connector_Hirose/Hirose_DF63R-5P-3.96DSA_1x05_P3.96mm_Vertical","Connector_Hirose/Hirose_FX10A-120P-SV_2x60-1MP_P0.5mm","Connector_Hirose/Hirose_FX10A-120S-SV_2x60-1MP_P0.5mm","Connector_Hirose/Hirose_FX10A-144P-SV_2x72-1MP_P0.5mm","Connector_Hirose/Hirose_FX10A-144S-SV_2x72-1MP_P0.5mm","Connector_Hirose/Hirose_FX10A-168P-SV_2x84-1MP_P0.5mm","Connector_Hirose/Hirose_FX10A-168S-SV_2x84-1MP_P0.5mm","Connector_Hirose/Hirose_FX10A-96P-SV_2x48-1MP_P0.5mm","Connector_Hirose/Hirose_FX10A-96S-SV_2x48-1MP_P0.5mm","Connector_Hirose/Hirose_FX10B-120P-SV_2x60-1MP_P0.5mm","Connector_Hirose/Hirose_FX10B-120S-SV_2x60-1MP_P0.5mm","Connector_Hirose/Hirose_FX10B-144P-SV_2x72-1MP_P0.5mm","Connector_Hirose/Hirose_FX10B-144S-SV_2x72-1MP_P0.5mm","Connector_Hirose/Hirose_FX10B-168P-SV_2x84-1MP_P0.5mm","Connector_Hirose/Hirose_FX10B-168S-SV_2x84-1MP_P0.5mm","Connector_Hirose/Hirose_FX10B-96P-SV_2x48-1MP_P0.5mm","Connector_Hirose/Hirose_FX10B-96S-SV_2x48-1MP_P0.5mm","Connector_Hirose_DF40/Hirose_DF40B(2.0)-12DS-0.4V_2x06-1MP_P0.4mm","Connector_Hirose_DF40/Hirose_DF40B(2.0)-80DS-0.4V_2x40-1MP_P0.4mm","Connector_Hirose_DF40/Hirose_DF40B-10DS-0.4V_2x05-1MP_P0.4mm","Connector_Hirose_DF40/Hirose_DF40B-12DS-0.4V_2x06-1MP_P0.4mm","Connector_Hirose_DF40/Hirose_DF40B-30DS-0.4V_2x15-1MP_P0.4mm","Connector_Hirose_DF40/Hirose_DF40B-50DS-0.4V_2x25-1MP_P0.4mm","Connector_Hirose_DF40/Hirose_DF40B-60DS-0.4V_2x30-1MP_P0.4mm","Connector_Hirose_DF40/Hirose_DF40B-80DS-0.4V_2x40-1MP_P0.4mm","Connector_Hirose_DF40/Hirose_DF40C(2.0)-20DS-0.4V_2x10_P0.4mm","Connector_Hirose_DF40/Hirose_DF40C(2.0)-24DS-0.4V_2x12_P0.4mm","Connector_Hirose_DF40/Hirose_DF40C(2.0)-30DS-0.4V_2x15_P0.4mm","Connector_Hirose_DF40/Hirose_DF40C(2.0)-40DS-0.4V_2x20_P0.4mm","Connector_Hirose_DF40/Hirose_DF40C(2.0)-50DS-0.4V_2x25_P0.4mm","Connector_Hirose_DF40/Hirose_DF40C(2.0)-60DS-0.4V_2x30_P0.4mm","Connector_Hirose_DF40/Hirose_DF40C(2.0)-70DS-0.4V_2x35_P0.4mm","Connector_Hirose_DF40/Hirose_DF40C(2.0)-80DS-0.4V_2x40_P0.4mm","Connector_Hirose_DF40/Hirose_DF40C-100DP-0.4V_2x50-1MP_P0.4mm","Connector_Hirose_DF40/Hirose_DF40C-100DS-0.4V_2x50_P0.4mm","Connector_Hirose_DF40/Hirose_DF40C-10DP-0.4V_2x05-1MP_P0.4mm","Connector_Hirose_DF40/Hirose_DF40C-120DP-0.4V_2x60-1MP_P0.4mm","Connector_Hirose_DF40/Hirose_DF40C-120DS-0.4V_2x60_P0.4mm","Connector_Hirose_DF40/Hirose_DF40C-12DP-0.4V_2x06-1MP_P0.4mm","Connector_Hirose_DF40/Hirose_DF40C-20DP-0.4V_2x10-1MP_P0.4mm","Connector_Hirose_DF40/Hirose_DF40C-20DS-0.4V_2x10_P0.4mm","Connector_Hirose_DF40/Hirose_DF40C-24DP-0.4V_2x12-1MP_P0.4mm","Connector_Hirose_DF40/Hirose_DF40C-24DS-0.4V_2x12_P0.4mm","Connector_Hirose_DF40/Hirose_DF40C-30DP-0.4V_2x15-1MP_P0.4mm","Connector_Hirose_DF40/Hirose_DF40C-30DS-0.4V_2x15_P0.4mm","Connector_Hirose_DF40/Hirose_DF40C-34DP-0.4V_2x17-1MP_P0.4mm","Connector_Hirose_DF40/Hirose_DF40C-34DS-0.4V_2x17_P0.4mm","Connector_Hirose_DF40/Hirose_DF40C-40DP-0.4V_2x20-1MP_P0.4mm","Connector_Hirose_DF40/Hirose_DF40C-40DS-0.4V_2x20_P0.4mm","Connector_Hirose_DF40/Hirose_DF40C-44DP-0.4V_2x22-1MP_P0.4mm","Connector_Hirose_DF40/Hirose_DF40C-50DP-0.4V_2x25-1MP_P0.4mm","Connector_Hirose_DF40/Hirose_DF40C-50DS-0.4V_2x25_P0.4mm","Connector_Hirose_DF40/Hirose_DF40C-60DP-0.4V_2x30-1MP_P0.4mm","Connector_Hirose_DF40/Hirose_DF40C-60DS-0.4V_2x30_P0.4mm","Connector_Hirose_DF40/Hirose_DF40C-70DP-0.4V_2x35-1MP_P0.4mm","Connector_Hirose_DF40/Hirose_DF40C-70DS-0.4V_2x35_P0.4mm","Connector_Hirose_DF40/Hirose_DF40C-80DP-0.4V_2x40-1MP_P0.4mm","Connector_Hirose_DF40/Hirose_DF40C-80DS-0.4V_2x40_P0.4mm","Connector_Hirose_DF40/Hirose_DF40C-90DP-0.4V_2x45-1MP_P0.4mm","Connector_Hirose_DF40/Hirose_DF40C-90DS-0.4V_2x45_P0.4mm","Connector_Hirose_DF40/Hirose_DF40HB(2.5)-10DS-0.4V_2x05-1MP_P0.4mm","Connector_Hirose_DF40/Hirose_DF40HB(4.0)-50DS-0.4V_2x25-1MP_P0.4mm","Connector_Hirose_DF40/Hirose_DF40HC(2.5)-20DS-0.4V_2x10_P0.4mm","Connector_Hirose_DF40/Hirose_DF40HC(2.5)-30DS-0.4V_2x15_P0.4mm","Connector_Hirose_DF40/Hirose_DF40HC(2.5)-40DS-0.4V_2x20_P0.4mm","Connector_Hirose_DF40/Hirose_DF40HC(2.5)-50DS-0.4V_2x25_P0.4mm","Connector_Hirose_DF40/Hirose_DF40HC(2.5)-60DS-0.4V_2x30_P0.4mm","Connector_Hirose_DF40/Hirose_DF40HC(3.0)-100DS-0.4V_2x50_P0.4mm","Connector_Hirose_DF40/Hirose_DF40HC(3.0)-30DS-0.4V_2x15_P0.4mm","Connector_Hirose_DF40/Hirose_DF40HC(3.0)-40DS-0.4V_2x20_P0.4mm","Connector_Hirose_DF40/Hirose_DF40HC(3.0)-44DS-0.4V_2x22_P0.4mm","Connector_Hirose_DF40/Hirose_DF40HC(3.0)-50DS-0.4V_2x25_P0.4mm","Connector_Hirose_DF40/Hirose_DF40HC(3.0)-60DS-0.4V_2x30_P0.4mm","Connector_Hirose_DF40/Hirose_DF40HC(3.0)-70DS-0.4V_2x35_P0.4mm","Connector_Hirose_DF40/Hirose_DF40HC(3.0)-80DS-0.4V_2x40_P0.4mm","Connector_Hirose_DF40/Hirose_DF40HC(3.0)-90DS-0.4V_2x45_P0.4mm","Connector_Hirose_DF40/Hirose_DF40HC(3.5)-20DS-0.4V_2x10_P0.4mm","Connector_Hirose_DF40/Hirose_DF40HC(3.5)-30DS-0.4V_2x15_P0.4mm","Connector_Hirose_DF40/Hirose_DF40HC(3.5)-40DS-0.4V_2x20_P0.4mm","Connector_Hirose_DF40/Hirose_DF40HC(3.5)-50DS-0.4V_2x25_P0.4mm","Connector_Hirose_DF40/Hirose_DF40HC(3.5)-60DS-0.4V_2x30_P0.4mm","Connector_Hirose_DF40/Hirose_DF40HC(3.5)-80DS-0.4V_2x40_P0.4mm","Connector_Hirose_DF40/Hirose_DF40HC(4.0)-40DS-0.4V_2x20_P0.4mm","Connector_Hirose_DF40/Hirose_DF40HC(4.0)-50DS-0.4V_2x25_P0.4mm","Connector_Hirose_DF40/Hirose_DF40HC(4.0)-60DS-0.4V_2x30_P0.4mm","Connector_Hirose_DF40/Hirose_DF40HC(4.0)-80DS-0.4V_2x40_P0.4mm","Connector_Hirose_DF40/Hirose_DF40HC(4.0)-90DS-0.4V_2x45_P0.4mm","Connector_Hirose_FX8/Hirose_FX8-100P-SV_2x50_P0.6mm","Connector_Hirose_FX8/Hirose_FX8-100S-SV_2x50_P0.6mm","Connector_Hirose_FX8/Hirose_FX8-120P-SV_2x60_P0.6mm","Connector_Hirose_FX8/Hirose_FX8-120S-SV_2x60_P0.6mm","Connector_Hirose_FX8/Hirose_FX8-140P-SV_2x70_P0.6mm","Connector_Hirose_FX8/Hirose_FX8-140S-SV_2x70_P0.6mm","Connector_Hirose_FX8/Hirose_FX8-60P-SV_2x30_P0.6mm","Connector_Hirose_FX8/Hirose_FX8-60S-SV_2x30_P0.6mm","Connector_Hirose_FX8/Hirose_FX8-80P-SV_2x40_P0.6mm","Connector_Hirose_FX8/Hirose_FX8-80S-SV_2x40_P0.6mm","Connector_Hirose_FX8/Hirose_FX8-90P-SV_2x45_P0.6mm","Connector_Hirose_FX8/Hirose_FX8-90S-SV_2x45_P0.6mm","Connector_IDC/IDC-Header_2x03_P2.54mm_Horizontal","Connector_IDC/IDC-Header_2x03_P2.54mm_Vertical","Connector_IDC/IDC-Header_2x03_P2.54mm_Vertical_SMD","Connector_IDC/IDC-Header_2x04_P2.54mm_Horizontal","Connector_IDC/IDC-Header_2x04_P2.54mm_Vertical","Connector_IDC/IDC-Header_2x04_P2.54mm_Vertical_SMD","Connector_IDC/IDC-Header_2x05-1MP_P2.54mm_Latch12.0mm_Vertical","Connector_IDC/IDC-Header_2x05-1MP_P2.54mm_Latch6.5mm_Vertical","Connector_IDC/IDC-Header_2x05-1MP_P2.54mm_Latch9.5mm_Vertical","Connector_IDC/IDC-Header_2x05-1MP_P2.54mm_Latch_Horizontal","Connector_IDC/IDC-Header_2x05-1MP_P2.54mm_Latch_Vertical","Connector_IDC/IDC-Header_2x05_P2.54mm_Horizontal","Connector_IDC/IDC-Header_2x05_P2.54mm_Latch12.0mm_Vertical","Connector_IDC/IDC-Header_2x05_P2.54mm_Latch6.5mm_Vertical","Connector_IDC/IDC-Header_2x05_P2.54mm_Latch9.5mm_Vertical","Connector_IDC/IDC-Header_2x05_P2.54mm_Latch_Horizontal","Connector_IDC/IDC-Header_2x05_P2.54mm_Latch_Vertical","Connector_IDC/IDC-Header_2x05_P2.54mm_Vertical","Connector_IDC/IDC-Header_2x05_P2.54mm_Vertical_SMD","Connector_IDC/IDC-Header_2x06-1MP_P2.54mm_Latch12.0mm_Vertical","Connector_IDC/IDC-Header_2x06-1MP_P2.54mm_Latch6.5mm_Vertical","Connector_IDC/IDC-Header_2x06-1MP_P2.54mm_Latch9.5mm_Vertical","Connector_IDC/IDC-Header_2x06-1MP_P2.54mm_Latch_Horizontal","Connector_IDC/IDC-Header_2x06-1MP_P2.54mm_Latch_Vertical","Connector_IDC/IDC-Header_2x06_P2.54mm_Horizontal","Connector_IDC/IDC-Header_2x06_P2.54mm_Latch12.0mm_Vertical","Connector_IDC/IDC-Header_2x06_P2.54mm_Latch6.5mm_Vertical","Connector_IDC/IDC-Header_2x06_P2.54mm_Latch9.5mm_Vertical","Connector_IDC/IDC-Header_2x06_P2.54mm_Latch_Horizontal","Connector_IDC/IDC-Header_2x06_P2.54mm_Latch_Vertical","Connector_IDC/IDC-Header_2x06_P2.54mm_Vertical","Connector_IDC/IDC-Header_2x06_P2.54mm_Vertical_SMD","Connector_IDC/IDC-Header_2x07-1MP_P2.54mm_Latch12.0mm_Vertical","Connector_IDC/IDC-Header_2x07-1MP_P2.54mm_Latch6.5mm_Vertical","Connector_IDC/IDC-Header_2x07-1MP_P2.54mm_Latch9.5mm_Vertical","Connector_IDC/IDC-Header_2x07-1MP_P2.54mm_Latch_Horizontal","Connector_IDC/IDC-Header_2x07-1MP_P2.54mm_Latch_Vertical","Connector_IDC/IDC-Header_2x07_P2.54mm_Horizontal","Connector_IDC/IDC-Header_2x07_P2.54mm_Horizontal_Lock","Connector_IDC/IDC-Header_2x07_P2.54mm_Latch12.0mm_Vertical","Connector_IDC/IDC-Header_2x07_P2.54mm_Latch6.5mm_Vertical","Connector_IDC/IDC-Header_2x07_P2.54mm_Latch9.5mm_Vertical","Connector_IDC/IDC-Header_2x07_P2.54mm_Latch_Horizontal","Connector_IDC/IDC-Header_2x07_P2.54mm_Latch_Vertical","Connector_IDC/IDC-Header_2x07_P2.54mm_Vertical","Connector_IDC/IDC-Header_2x07_P2.54mm_Vertical_SMD","Connector_IDC/IDC-Header_2x08-1MP_P2.54mm_Latch12.0mm_Vertical","Connector_IDC/IDC-Header_2x08-1MP_P2.54mm_Latch6.5mm_Vertical","Connector_IDC/IDC-Header_2x08-1MP_P2.54mm_Latch9.5mm_Vertical","Connector_IDC/IDC-Header_2x08-1MP_P2.54mm_Latch_Horizontal","Connector_IDC/IDC-Header_2x08-1MP_P2.54mm_Latch_Vertical","Connector_IDC/IDC-Header_2x08_P2.54mm_Horizontal","Connector_IDC/IDC-Header_2x08_P2.54mm_Latch12.0mm_Vertical","Connector_IDC/IDC-Header_2x08_P2.54mm_Latch6.5mm_Vertical","Connector_IDC/IDC-Header_2x08_P2.54mm_Latch9.5mm_Vertical","Connector_IDC/IDC-Header_2x08_P2.54mm_Latch_Horizontal","Connector_IDC/IDC-Header_2x08_P2.54mm_Latch_Vertical","Connector_IDC/IDC-Header_2x08_P2.54mm_Vertical","Connector_IDC/IDC-Header_2x08_P2.54mm_Vertical_SMD","Connector_IDC/IDC-Header_2x09_P2.54mm_Horizontal","Connector_IDC/IDC-Header_2x09_P2.54mm_Vertical","Connector_IDC/IDC-Header_2x09_P2.54mm_Vertical_SMD","Connector_IDC/IDC-Header_2x10-1MP_P2.54mm_Latch12.0mm_Vertical","Connector_IDC/IDC-Header_2x10-1MP_P2.54mm_Latch6.5mm_Vertical","Connector_IDC/IDC-Header_2x10-1MP_P2.54mm_Latch9.5mm_Vertical","Connector_IDC/IDC-Header_2x10-1MP_P2.54mm_Latch_Horizontal","Connector_IDC/IDC-Header_2x10-1MP_P2.54mm_Latch_Vertical","Connector_IDC/IDC-Header_2x10_P2.54mm_Horizontal","Connector_IDC/IDC-Header_2x10_P2.54mm_Latch12.0mm_Vertical","Connector_IDC/IDC-Header_2x10_P2.54mm_Latch6.5mm_Vertical","Connector_IDC/IDC-Header_2x10_P2.54mm_Latch9.5mm_Vertical","Connector_IDC/IDC-Header_2x10_P2.54mm_Latch_Horizontal","Connector_IDC/IDC-Header_2x10_P2.54mm_Latch_Vertical","Connector_IDC/IDC-Header_2x10_P2.54mm_Vertical","Connector_IDC/IDC-Header_2x10_P2.54mm_Vertical_SMD","Connector_IDC/IDC-Header_2x11_P2.54mm_Horizontal","Connector_IDC/IDC-Header_2x11_P2.54mm_Vertical","Connector_IDC/IDC-Header_2x11_P2.54mm_Vertical_SMD","Connector_IDC/IDC-Header_2x12-1MP_P2.54mm_Latch12.0mm_Vertical","Connector_IDC/IDC-Header_2x12-1MP_P2.54mm_Latch6.5mm_Vertical","Connector_IDC/IDC-Header_2x12-1MP_P2.54mm_Latch9.5mm_Vertical","Connector_IDC/IDC-Header_2x12-1MP_P2.54mm_Latch_Horizontal","Connector_IDC/IDC-Header_2x12-1MP_P2.54mm_Latch_Vertical","Connector_IDC/IDC-Header_2x12_P2.54mm_Horizontal","Connector_IDC/IDC-Header_2x12_P2.54mm_Latch12.0mm_Vertical","Connector_IDC/IDC-Header_2x12_P2.54mm_Latch6.5mm_Vertical","Connector_IDC/IDC-Header_2x12_P2.54mm_Latch9.5mm_Vertical","Connector_IDC/IDC-Header_2x12_P2.54mm_Latch_Horizontal","Connector_IDC/IDC-Header_2x12_P2.54mm_Latch_Vertical","Connector_IDC/IDC-Header_2x12_P2.54mm_Vertical","Connector_IDC/IDC-Header_2x12_P2.54mm_Vertical_SMD","Connector_IDC/IDC-Header_2x13-1MP_P2.54mm_Latch12.0mm_Vertical","Connector_IDC/IDC-Header_2x13-1MP_P2.54mm_Latch6.5mm_Vertical","Connector_IDC/IDC-Header_2x13-1MP_P2.54mm_Latch9.5mm_Vertical","Connector_IDC/IDC-Header_2x13-1MP_P2.54mm_Latch_Horizontal","Connector_IDC/IDC-Header_2x13-1MP_P2.54mm_Latch_Vertical","Connector_IDC/IDC-Header_2x13_P2.54mm_Horizontal","Connector_IDC/IDC-Header_2x13_P2.54mm_Latch12.0mm_Vertical","Connector_IDC/IDC-Header_2x13_P2.54mm_Latch6.5mm_Vertical","Connector_IDC/IDC-Header_2x13_P2.54mm_Latch9.5mm_Vertical","Connector_IDC/IDC-Header_2x13_P2.54mm_Latch_Horizontal","Connector_IDC/IDC-Header_2x13_P2.54mm_Latch_Vertical","Connector_IDC/IDC-Header_2x13_P2.54mm_Vertical","Connector_IDC/IDC-Header_2x13_P2.54mm_Vertical_SMD","Connector_IDC/IDC-Header_2x15-1MP_P2.54mm_Latch12.0mm_Vertical","Connector_IDC/IDC-Header_2x15-1MP_P2.54mm_Latch6.5mm_Vertical","Connector_IDC/IDC-Header_2x15-1MP_P2.54mm_Latch9.5mm_Vertical","Connector_IDC/IDC-Header_2x15-1MP_P2.54mm_Latch_Horizontal","Connector_IDC/IDC-Header_2x15-1MP_P2.54mm_Latch_Vertical","Connector_IDC/IDC-Header_2x15_P2.54mm_Horizontal","Connector_IDC/IDC-Header_2x15_P2.54mm_Latch12.0mm_Vertical","Connector_IDC/IDC-Header_2x15_P2.54mm_Latch6.5mm_Vertical","Connector_IDC/IDC-Header_2x15_P2.54mm_Latch9.5mm_Vertical","Connector_IDC/IDC-Header_2x15_P2.54mm_Latch_Horizontal","Connector_IDC/IDC-Header_2x15_P2.54mm_Latch_Vertical","Connector_IDC/IDC-Header_2x15_P2.54mm_Vertical","Connector_IDC/IDC-Header_2x17-1MP_P2.54mm_Latch12.0mm_Vertical","Connector_IDC/IDC-Header_2x17-1MP_P2.54mm_Latch6.5mm_Vertical","Connector_IDC/IDC-Header_2x17-1MP_P2.54mm_Latch9.5mm_Vertical","Connector_IDC/IDC-Header_2x17-1MP_P2.54mm_Latch_Horizontal","Connector_IDC/IDC-Header_2x17-1MP_P2.54mm_Latch_Vertical","Connector_IDC/IDC-Header_2x17_P2.54mm_Horizontal","Connector_IDC/IDC-Header_2x17_P2.54mm_Latch12.0mm_Vertical","Connector_IDC/IDC-Header_2x17_P2.54mm_Latch6.5mm_Vertical","Connector_IDC/IDC-Header_2x17_P2.54mm_Latch9.5mm_Vertical","Connector_IDC/IDC-Header_2x17_P2.54mm_Latch_Horizontal","Connector_IDC/IDC-Header_2x17_P2.54mm_Latch_Vertical","Connector_IDC/IDC-Header_2x17_P2.54mm_Vertical","Connector_IDC/IDC-Header_2x20-1MP_P2.54mm_Latch12.0mm_Vertical","Connector_IDC/IDC-Header_2x20-1MP_P2.54mm_Latch6.5mm_Vertical","Connector_IDC/IDC-Header_2x20-1MP_P2.54mm_Latch9.5mm_Vertical","Connector_IDC/IDC-Header_2x20-1MP_P2.54mm_Latch_Horizontal","Connector_IDC/IDC-Header_2x20-1MP_P2.54mm_Latch_Vertical","Connector_IDC/IDC-Header_2x20_P2.54mm_Horizontal","Connector_IDC/IDC-Header_2x20_P2.54mm_Latch12.0mm_Vertical","Connector_IDC/IDC-Header_2x20_P2.54mm_Latch6.5mm_Vertical","Connector_IDC/IDC-Header_2x20_P2.54mm_Latch9.5mm_Vertical","Connector_IDC/IDC-Header_2x20_P2.54mm_Latch_Horizontal","Connector_IDC/IDC-Header_2x20_P2.54mm_Latch_Vertical","Connector_IDC/IDC-Header_2x20_P2.54mm_Vertical","Connector_IDC/IDC-Header_2x20_P2.54mm_Vertical_SMD","Connector_IDC/IDC-Header_2x22_P2.54mm_Horizontal","Connector_IDC/IDC-Header_2x22_P2.54mm_Vertical","Connector_IDC/IDC-Header_2x22_P2.54mm_Vertical_SMD","Connector_IDC/IDC-Header_2x25-1MP_P2.54mm_Latch12.0mm_Vertical","Connector_IDC/IDC-Header_2x25-1MP_P2.54mm_Latch6.5mm_Vertical","Connector_IDC/IDC-Header_2x25-1MP_P2.54mm_Latch9.5mm_Vertical","Connector_IDC/IDC-Header_2x25-1MP_P2.54mm_Latch_Horizontal","Connector_IDC/IDC-Header_2x25-1MP_P2.54mm_Latch_Vertical","Connector_IDC/IDC-Header_2x25_P2.54mm_Horizontal","Connector_IDC/IDC-Header_2x25_P2.54mm_Latch12.0mm_Vertical","Connector_IDC/IDC-Header_2x25_P2.54mm_Latch6.5mm_Vertical","Connector_IDC/IDC-Header_2x25_P2.54mm_Latch9.5mm_Vertical","Connector_IDC/IDC-Header_2x25_P2.54mm_Latch_Horizontal","Connector_IDC/IDC-Header_2x25_P2.54mm_Latch_Vertical","Connector_IDC/IDC-Header_2x25_P2.54mm_Vertical","Connector_IDC/IDC-Header_2x25_P2.54mm_Vertical_SMD","Connector_IDC/IDC-Header_2x30-1MP_P2.54mm_Latch12.0mm_Vertical","Connector_IDC/IDC-Header_2x30-1MP_P2.54mm_Latch6.5mm_Vertical","Connector_IDC/IDC-Header_2x30-1MP_P2.54mm_Latch9.5mm_Vertical","Connector_IDC/IDC-Header_2x30-1MP_P2.54mm_Latch_Horizontal","Connector_IDC/IDC-Header_2x30-1MP_P2.54mm_Latch_Vertical","Connector_IDC/IDC-Header_2x30_P2.54mm_Horizontal","Connector_IDC/IDC-Header_2x30_P2.54mm_Latch12.0mm_Vertical","Connector_IDC/IDC-Header_2x30_P2.54mm_Latch6.5mm_Vertical","Connector_IDC/IDC-Header_2x30_P2.54mm_Latch9.5mm_Vertical","Connector_IDC/IDC-Header_2x30_P2.54mm_Latch_Horizontal","Connector_IDC/IDC-Header_2x30_P2.54mm_Latch_Vertical","Connector_IDC/IDC-Header_2x30_P2.54mm_Vertical","Connector_IDC/IDC-Header_2x30_P2.54mm_Vertical_SMD","Connector_IDC/IDC-Header_2x32-1MP_P2.54mm_Latch12.0mm_Vertical","Connector_IDC/IDC-Header_2x32-1MP_P2.54mm_Latch6.5mm_Vertical","Connector_IDC/IDC-Header_2x32-1MP_P2.54mm_Latch9.5mm_Vertical","Connector_IDC/IDC-Header_2x32-1MP_P2.54mm_Latch_Horizontal","Connector_IDC/IDC-Header_2x32-1MP_P2.54mm_Latch_Vertical","Connector_IDC/IDC-Header_2x32_P2.54mm_Horizontal","Connector_IDC/IDC-Header_2x32_P2.54mm_Latch12.0mm_Vertical","Connector_IDC/IDC-Header_2x32_P2.54mm_Latch6.5mm_Vertical","Connector_IDC/IDC-Header_2x32_P2.54mm_Latch9.5mm_Vertical","Connector_IDC/IDC-Header_2x32_P2.54mm_Latch_Horizontal","Connector_IDC/IDC-Header_2x32_P2.54mm_Latch_Vertical","Connector_IDC/IDC-Header_2x32_P2.54mm_Vertical","Connector_JAE/JAE_LY20-10P-DLT1_2x05_P2.00mm_Horizontal","Connector_JAE/JAE_LY20-10P-DT1_2x05_P2.00mm_Vertical","Connector_JAE/JAE_LY20-12P-DLT1_2x06_P2.00mm_Horizontal","Connector_JAE/JAE_LY20-12P-DT1_2x06_P2.00mm_Vertical","Connector_JAE/JAE_LY20-14P-DLT1_2x07_P2.00mm_Horizontal","Connector_JAE/JAE_LY20-14P-DT1_2x07_P2.00mm_Vertical","Connector_JAE/JAE_LY20-16P-DLT1_2x08_P2.00mm_Horizontal","Connector_JAE/JAE_LY20-16P-DT1_2x08_P2.00mm_Vertical","Connector_JAE/JAE_LY20-18P-DLT1_2x09_P2.00mm_Horizontal","Connector_JAE/JAE_LY20-18P-DT1_2x09_P2.00mm_Vertical","Connector_JAE/JAE_LY20-20P-DLT1_2x10_P2.00mm_Horizontal","Connector_JAE/JAE_LY20-20P-DT1_2x10_P2.00mm_Vertical","Connector_JAE/JAE_LY20-22P-DLT1_2x11_P2.00mm_Horizontal","Connector_JAE/JAE_LY20-22P-DT1_2x11_P2.00mm_Vertical","Connector_JAE/JAE_LY20-24P-DLT1_2x12_P2.00mm_Horizontal","Connector_JAE/JAE_LY20-24P-DT1_2x12_P2.00mm_Vertical","Connector_JAE/JAE_LY20-26P-DLT1_2x13_P2.00mm_Horizontal","Connector_JAE/JAE_LY20-26P-DT1_2x13_P2.00mm_Vertical","Connector_JAE/JAE_LY20-28P-DLT1_2x14_P2.00mm_Horizontal","Connector_JAE/JAE_LY20-28P-DT1_2x14_P2.00mm_Vertical","Connector_JAE/JAE_LY20-30P-DLT1_2x15_P2.00mm_Horizontal","Connector_JAE/JAE_LY20-30P-DT1_2x15_P2.00mm_Vertical","Connector_JAE/JAE_LY20-32P-DLT1_2x16_P2.00mm_Horizontal","Connector_JAE/JAE_LY20-32P-DT1_2x16_P2.00mm_Vertical","Connector_JAE/JAE_LY20-34P-DLT1_2x17_P2.00mm_Horizontal","Connector_JAE/JAE_LY20-34P-DT1_2x17_P2.00mm_Vertical","Connector_JAE/JAE_LY20-36P-DLT1_2x18_P2.00mm_Horizontal","Connector_JAE/JAE_LY20-36P-DT1_2x18_P2.00mm_Vertical","Connector_JAE/JAE_LY20-38P-DLT1_2x19_P2.00mm_Horizontal","Connector_JAE/JAE_LY20-38P-DT1_2x19_P2.00mm_Vertical","Connector_JAE/JAE_LY20-40P-DLT1_2x20_P2.00mm_Horizontal","Connector_JAE/JAE_LY20-40P-DT1_2x20_P2.00mm_Vertical","Connector_JAE/JAE_LY20-42P-DLT1_2x21_P2.00mm_Horizontal","Connector_JAE/JAE_LY20-42P-DT1_2x21_P2.00mm_Vertical","Connector_JAE/JAE_LY20-44P-DLT1_2x22_P2.00mm_Horizontal","Connector_JAE/JAE_LY20-44P-DT1_2x22_P2.00mm_Vertical","Connector_JAE/JAE_LY20-4P-DLT1_2x02_P2.00mm_Horizontal","Connector_JAE/JAE_LY20-4P-DT1_2x02_P2.00mm_Vertical","Connector_JAE/JAE_LY20-6P-DLT1_2x03_P2.00mm_Horizontal","Connector_JAE/JAE_LY20-6P-DT1_2x03_P2.00mm_Vertical","Connector_JAE/JAE_LY20-8P-DLT1_2x04_P2.00mm_Horizontal","Connector_JAE/JAE_LY20-8P-DT1_2x04_P2.00mm_Vertical","Connector_JAE/JAE_MM70-314-310B1","Connector_JAE/JAE_SIM_Card_SF72S006","Connector_JAE_WP7B/JAE_WP7B-P034VA1-R8000_2x17-1MP_P0.4mm","Connector_JAE_WP7B/JAE_WP7B-P034VA1-R8000_Longpads_2x17-1MP_P0.4mm","Connector_JAE_WP7B/JAE_WP7B-P040VA1-R8000_2x20-1MP_P0.4mm","Connector_JAE_WP7B/JAE_WP7B-P040VA1-R8000_Longpads_2x20-1MP_P0.4mm","Connector_JAE_WP7B/JAE_WP7B-P050VA1-R8000_2x25-1MP_P0.4mm","Connector_JAE_WP7B/JAE_WP7B-P050VA1-R8000_Longpads_2x25-1MP_P0.4mm","Connector_JAE_WP7B/JAE_WP7B-P060VA1-R8000_2x30-1MP_P0.4mm","Connector_JAE_WP7B/JAE_WP7B-P060VA1-R8000_Longpads_2x30-1MP_P0.4mm","Connector_JAE_WP7B/JAE_WP7B-P070VA1-R8000_2x35-1MP_P0.4mm","Connector_JAE_WP7B/JAE_WP7B-P070VA1-R8000_Longpads_2x35-1MP_P0.4mm","Connector_JAE_WP7B/JAE_WP7B-S034VA1-R8000_2x17-1MP_P0.4mm","Connector_JAE_WP7B/JAE_WP7B-S034VA1-R8000_Longpads_2x17-1MP_P0.4mm","Connector_JAE_WP7B/JAE_WP7B-S040VA1-R8000_2x20-1MP_P0.4mm","Connector_JAE_WP7B/JAE_WP7B-S040VA1-R8000_Longpads_2x20-1MP_P0.4mm","Connector_JAE_WP7B/JAE_WP7B-S050VA1-R8000_2x25-1MP_P0.4mm","Connector_JAE_WP7B/JAE_WP7B-S050VA1-R8000_Longpads_2x25-1MP_P0.4mm","Connector_JAE_WP7B/JAE_WP7B-S060VA1-R8000_2x30-1MP_P0.4mm","Connector_JAE_WP7B/JAE_WP7B-S060VA1-R8000_Longpads_2x30-1MP_P0.4mm","Connector_JAE_WP7B/JAE_WP7B-S070VA1-R8000_2x35-1MP_P0.4mm","Connector_JAE_WP7B/JAE_WP7B-S070VA1-R8000_Longpads_2x35-1MP_P0.4mm","Connector_JST/JST_ACH_BM01B-ACHSS-A-GAN-ETF_1x01-1MP_P1.20mm_Vertical","Connector_JST/JST_ACH_BM02B-ACHSS-GAN-ETF_1x02-1MP_P1.20mm_Vertical","Connector_JST/JST_ACH_BM03B-ACHSS-GAN-ETF_1x03-1MP_P1.20mm_Vertical","Connector_JST/JST_ACH_BM04B-ACHSS-A-GAN-ETF_1x04-1MP_P1.20mm_Vertical","Connector_JST/JST_ACH_BM05B-ACHSS-A-GAN-ETF_1x05-1MP_P1.20mm_Vertical","Connector_JST/JST_AUH_BM03B-AUHKS-GA-TB_1x03-1MP_P1.50mm_Vertical","Connector_JST/JST_AUH_BM05B-AUHKS-GA-TB_1x05-1MP_P1.50mm_Vertical","Connector_JST/JST_EH_B10B-EH-A_1x10_P2.50mm_Vertical","Connector_JST/JST_EH_B11B-EH-A_1x11_P2.50mm_Vertical","Connector_JST/JST_EH_B12B-EH-A_1x12_P2.50mm_Vertical","Connector_JST/JST_EH_B13B-EH-A_1x13_P2.50mm_Vertical","Connector_JST/JST_EH_B14B-EH-A_1x14_P2.50mm_Vertical","Connector_JST/JST_EH_B15B-EH-A_1x15_P2.50mm_Vertical","Connector_JST/JST_EH_B2B-EH-A_1x02_P2.50mm_Vertical","Connector_JST/JST_EH_B3B-EH-A_1x03_P2.50mm_Vertical","Connector_JST/JST_EH_B4B-EH-A_1x04_P2.50mm_Vertical","Connector_JST/JST_EH_B5B-EH-A_1x05_P2.50mm_Vertical","Connector_JST/JST_EH_B6B-EH-A_1x06_P2.50mm_Vertical","Connector_JST/JST_EH_B7B-EH-A_1x07_P2.50mm_Vertical","Connector_JST/JST_EH_B8B-EH-A_1x08_P2.50mm_Vertical","Connector_JST/JST_EH_B9B-EH-A_1x09_P2.50mm_Vertical","Connector_JST/JST_EH_S10B-EH_1x10_P2.50mm_Horizontal","Connector_JST/JST_EH_S11B-EH_1x11_P2.50mm_Horizontal","Connector_JST/JST_EH_S12B-EH_1x12_P2.50mm_Horizontal","Connector_JST/JST_EH_S13B-EH_1x13_P2.50mm_Horizontal","Connector_JST/JST_EH_S14B-EH_1x14_P2.50mm_Horizontal","Connector_JST/JST_EH_S15B-EH_1x15_P2.50mm_Horizontal","Connector_JST/JST_EH_S2B-EH_1x02_P2.50mm_Horizontal","Connector_JST/JST_EH_S3B-EH_1x03_P2.50mm_Horizontal","Connector_JST/JST_EH_S4B-EH_1x04_P2.50mm_Horizontal","Connector_JST/JST_EH_S5B-EH_1x05_P2.50mm_Horizontal","Connector_JST/JST_EH_S6B-EH_1x06_P2.50mm_Horizontal","Connector_JST/JST_EH_S7B-EH_1x07_P2.50mm_Horizontal","Connector_JST/JST_EH_S8B-EH_1x08_P2.50mm_Horizontal","Connector_JST/JST_EH_S9B-EH_1x09_P2.50mm_Horizontal","Connector_JST/JST_GH_BM02B-GHS-TBT_1x02-1MP_P1.25mm_Vertical","Connector_JST/JST_GH_BM03B-GHS-TBT_1x03-1MP_P1.25mm_Vertical","Connector_JST/JST_GH_BM04B-GHS-TBT_1x04-1MP_P1.25mm_Vertical","Connector_JST/JST_GH_BM05B-GHS-TBT_1x05-1MP_P1.25mm_Vertical","Connector_JST/JST_GH_BM06B-GHS-TBT_1x06-1MP_P1.25mm_Vertical","Connector_JST/JST_GH_BM07B-GHS-TBT_1x07-1MP_P1.25mm_Vertical","Connector_JST/JST_GH_BM08B-GHS-TBT_1x08-1MP_P1.25mm_Vertical","Connector_JST/JST_GH_BM09B-GHS-TBT_1x09-1MP_P1.25mm_Vertical","Connector_JST/JST_GH_BM10B-GHS-TBT_1x10-1MP_P1.25mm_Vertical","Connector_JST/JST_GH_BM11B-GHS-TBT_1x11-1MP_P1.25mm_Vertical","Connector_JST/JST_GH_BM12B-GHS-TBT_1x12-1MP_P1.25mm_Vertical","Connector_JST/JST_GH_BM13B-GHS-TBT_1x13-1MP_P1.25mm_Vertical","Connector_JST/JST_GH_BM14B-GHS-TBT_1x14-1MP_P1.25mm_Vertical","Connector_JST/JST_GH_BM15B-GHS-TBT_1x15-1MP_P1.25mm_Vertical","Connector_JST/JST_GH_SM02B-GHS-TB_1x02-1MP_P1.25mm_Horizontal","Connector_JST/JST_GH_SM03B-GHS-TB_1x03-1MP_P1.25mm_Horizontal","Connector_JST/JST_GH_SM04B-GHS-TB_1x04-1MP_P1.25mm_Horizontal","Connector_JST/JST_GH_SM05B-GHS-TB_1x05-1MP_P1.25mm_Horizontal","Connector_JST/JST_GH_SM06B-GHS-TB_1x06-1MP_P1.25mm_Horizontal","Connector_JST/JST_GH_SM07B-GHS-TB_1x07-1MP_P1.25mm_Horizontal","Connector_JST/JST_GH_SM08B-GHS-TB_1x08-1MP_P1.25mm_Horizontal","Connector_JST/JST_GH_SM09B-GHS-TB_1x09-1MP_P1.25mm_Horizontal","Connector_JST/JST_GH_SM10B-GHS-TB_1x10-1MP_P1.25mm_Horizontal","Connector_JST/JST_GH_SM11B-GHS-TB_1x11-1MP_P1.25mm_Horizontal","Connector_JST/JST_GH_SM12B-GHS-TB_1x12-1MP_P1.25mm_Horizontal","Connector_JST/JST_GH_SM13B-GHS-TB_1x13-1MP_P1.25mm_Horizontal","Connector_JST/JST_GH_SM14B-GHS-TB_1x14-1MP_P1.25mm_Horizontal","Connector_JST/JST_GH_SM15B-GHS-TB_1x15-1MP_P1.25mm_Horizontal","Connector_JST/JST_J2100_B06B-J21DK-GGXR_2x03_P2.50x4.00mm_Vertical","Connector_JST/JST_J2100_B08B-J21DK-GGXR_2x04_P2.50x4.00mm_Vertical","Connector_JST/JST_J2100_B10B-J21DK-GGXR_2x05_P2.50x4.00mm_Vertical","Connector_JST/JST_J2100_B12B-J21DK-GGXR_2x06_P2.50x4.00mm_Vertical","Connector_JST/JST_J2100_B16B-J21DK-GGXR_2x08_P2.50x4.00mm_Vertical","Connector_JST/JST_J2100_B20B-J21DK-GGXR_2x10_P2.50x4.00mm_Vertical","Connector_JST/JST_J2100_S06B-J21DK-GGXR_2x03_P2.50mm_Horizontal","Connector_JST/JST_J2100_S08B-J21DK-GGXR_2x04_P2.50mm_Horizontal","Connector_JST/JST_J2100_S10B-J21DK-GGXR_2x05_P2.50mm_Horizontal","Connector_JST/JST_J2100_S12B-J21DK-GGXR_2x06_P2.50mm_Horizontal","Connector_JST/JST_J2100_S16B-J21DK-GGXR_2x08_P2.50mm_Horizontal","Connector_JST/JST_J2100_S20B-J21DK-GGXR_2x10_P2.50mm_Horizontal","Connector_JST/JST_JWPF_B02B-JWPF-SK-R_1x02_P2.00mm_Vertical","Connector_JST/JST_JWPF_B03B-JWPF-SK-R_1x03_P2.00mm_Vertical","Connector_JST/JST_JWPF_B04B-JWPF-SK-R_1x04_P2.00mm_Vertical","Connector_JST/JST_JWPF_B06B-JWPF-SK-R_2x03_P2.00mm_Vertical","Connector_JST/JST_JWPF_B08B-JWPF-SK-R_2x04_P2.00mm_Vertical","Connector_JST/JST_LEA_SM02B-LEASS-TF_1x02-1MP_P4.20mm_Horizontal","Connector_JST/JST_NV_B02P-NV_1x02_P5.00mm_Vertical","Connector_JST/JST_NV_B03P-NV_1x03_P5.00mm_Vertical","Connector_JST/JST_NV_B04P-NV_1x04_P5.00mm_Vertical","Connector_JST/JST_PHD_B10B-PHDSS_2x05_P2.00mm_Vertical","Connector_JST/JST_PHD_B12B-PHDSS_2x06_P2.00mm_Vertical","Connector_JST/JST_PHD_B14B-PHDSS_2x07_P2.00mm_Vertical","Connector_JST/JST_PHD_B16B-PHDSS_2x08_P2.00mm_Vertical","Connector_JST/JST_PHD_B18B-PHDSS_2x09_P2.00mm_Vertical","Connector_JST/JST_PHD_B20B-PHDSS_2x10_P2.00mm_Vertical","Connector_JST/JST_PHD_B22B-PHDSS_2x11_P2.00mm_Vertical","Connector_JST/JST_PHD_B24B-PHDSS_2x12_P2.00mm_Vertical","Connector_JST/JST_PHD_B26B-PHDSS_2x13_P2.00mm_Vertical","Connector_JST/JST_PHD_B28B-PHDSS_2x14_P2.00mm_Vertical","Connector_JST/JST_PHD_B30B-PHDSS_2x15_P2.00mm_Vertical","Connector_JST/JST_PHD_B32B-PHDSS_2x16_P2.00mm_Vertical","Connector_JST/JST_PHD_B34B-PHDSS_2x17_P2.00mm_Vertical","Connector_JST/JST_PHD_B8B-PHDSS_2x04_P2.00mm_Vertical","Connector_JST/JST_PHD_S10B-PHDSS_2x05_P2.00mm_Horizontal","Connector_JST/JST_PHD_S12B-PHDSS_2x06_P2.00mm_Horizontal","Connector_JST/JST_PHD_S14B-PHDSS_2x07_P2.00mm_Horizontal","Connector_JST/JST_PHD_S16B-PHDSS_2x08_P2.00mm_Horizontal","Connector_JST/JST_PHD_S18B-PHDSS_2x09_P2.00mm_Horizontal","Connector_JST/JST_PHD_S20B-PHDSS_2x10_P2.00mm_Horizontal","Connector_JST/JST_PHD_S22B-PHDSS_2x11_P2.00mm_Horizontal","Connector_JST/JST_PHD_S24B-PHDSS_2x12_P2.00mm_Horizontal","Connector_JST/JST_PHD_S26B-PHDSS_2x13_P2.00mm_Horizontal","Connector_JST/JST_PHD_S28B-PHDSS_2x14_P2.00mm_Horizontal","Connector_JST/JST_PHD_S30B-PHDSS_2x15_P2.00mm_Horizontal","Connector_JST/JST_PHD_S32B-PHDSS_2x16_P2.00mm_Horizontal","Connector_JST/JST_PHD_S34B-PHDSS_2x17_P2.00mm_Horizontal","Connector_JST/JST_PHD_S8B-PHDSS_2x04_P2.00mm_Horizontal","Connector_JST/JST_PH_B10B-PH-K_1x10_P2.00mm_Vertical","Connector_JST/JST_PH_B10B-PH-SM4-TB_1x10-1MP_P2.00mm_Vertical","Connector_JST/JST_PH_B11B-PH-K_1x11_P2.00mm_Vertical","Connector_JST/JST_PH_B11B-PH-SM4-TB_1x11-1MP_P2.00mm_Vertical","Connector_JST/JST_PH_B12B-PH-K_1x12_P2.00mm_Vertical","Connector_JST/JST_PH_B12B-PH-SM4-TB_1x12-1MP_P2.00mm_Vertical","Connector_JST/JST_PH_B13B-PH-K_1x13_P2.00mm_Vertical","Connector_JST/JST_PH_B13B-PH-SM4-TB_1x13-1MP_P2.00mm_Vertical","Connector_JST/JST_PH_B14B-PH-K_1x14_P2.00mm_Vertical","Connector_JST/JST_PH_B14B-PH-SM4-TB_1x14-1MP_P2.00mm_Vertical","Connector_JST/JST_PH_B15B-PH-K_1x15_P2.00mm_Vertical","Connector_JST/JST_PH_B15B-PH-SM4-TB_1x15-1MP_P2.00mm_Vertical","Connector_JST/JST_PH_B16B-PH-K_1x16_P2.00mm_Vertical","Connector_JST/JST_PH_B16B-PH-SM4-TB_1x16-1MP_P2.00mm_Vertical","Connector_JST/JST_PH_B2B-PH-K_1x02_P2.00mm_Vertical","Connector_JST/JST_PH_B2B-PH-SM4-TB_1x02-1MP_P2.00mm_Vertical","Connector_JST/JST_PH_B3B-PH-K_1x03_P2.00mm_Vertical","Connector_JST/JST_PH_B3B-PH-SM4-TB_1x03-1MP_P2.00mm_Vertical","Connector_JST/JST_PH_B4B-PH-K_1x04_P2.00mm_Vertical","Connector_JST/JST_PH_B4B-PH-SM4-TB_1x04-1MP_P2.00mm_Vertical","Connector_JST/JST_PH_B5B-PH-K_1x05_P2.00mm_Vertical","Connector_JST/JST_PH_B5B-PH-SM4-TB_1x05-1MP_P2.00mm_Vertical","Connector_JST/JST_PH_B6B-PH-K_1x06_P2.00mm_Vertical","Connector_JST/JST_PH_B6B-PH-SM4-TB_1x06-1MP_P2.00mm_Vertical","Connector_JST/JST_PH_B7B-PH-K_1x07_P2.00mm_Vertical","Connector_JST/JST_PH_B7B-PH-SM4-TB_1x07-1MP_P2.00mm_Vertical","Connector_JST/JST_PH_B8B-PH-K_1x08_P2.00mm_Vertical","Connector_JST/JST_PH_B8B-PH-SM4-TB_1x08-1MP_P2.00mm_Vertical","Connector_JST/JST_PH_B9B-PH-K_1x09_P2.00mm_Vertical","Connector_JST/JST_PH_B9B-PH-SM4-TB_1x09-1MP_P2.00mm_Vertical","Connector_JST/JST_PH_S10B-PH-K_1x10_P2.00mm_Horizontal","Connector_JST/JST_PH_S10B-PH-SM4-TB_1x10-1MP_P2.00mm_Horizontal","Connector_JST/JST_PH_S11B-PH-K_1x11_P2.00mm_Horizontal","Connector_JST/JST_PH_S11B-PH-SM4-TB_1x11-1MP_P2.00mm_Horizontal","Connector_JST/JST_PH_S12B-PH-K_1x12_P2.00mm_Horizontal","Connector_JST/JST_PH_S12B-PH-SM4-TB_1x12-1MP_P2.00mm_Horizontal","Connector_JST/JST_PH_S13B-PH-K_1x13_P2.00mm_Horizontal","Connector_JST/JST_PH_S13B-PH-SM4-TB_1x13-1MP_P2.00mm_Horizontal","Connector_JST/JST_PH_S14B-PH-K_1x14_P2.00mm_Horizontal","Connector_JST/JST_PH_S14B-PH-SM4-TB_1x14-1MP_P2.00mm_Horizontal","Connector_JST/JST_PH_S15B-PH-K_1x15_P2.00mm_Horizontal","Connector_JST/JST_PH_S15B-PH-SM4-TB_1x15-1MP_P2.00mm_Horizontal","Connector_JST/JST_PH_S16B-PH-K_1x16_P2.00mm_Horizontal","Connector_JST/JST_PH_S2B-PH-K_1x02_P2.00mm_Horizontal","Connector_JST/JST_PH_S2B-PH-SM4-TB_1x02-1MP_P2.00mm_Horizontal","Connector_JST/JST_PH_S3B-PH-K_1x03_P2.00mm_Horizontal","Connector_JST/JST_PH_S3B-PH-SM4-TB_1x03-1MP_P2.00mm_Horizontal","Connector_JST/JST_PH_S4B-PH-K_1x04_P2.00mm_Horizontal","Connector_JST/JST_PH_S4B-PH-SM4-TB_1x04-1MP_P2.00mm_Horizontal","Connector_JST/JST_PH_S5B-PH-K_1x05_P2.00mm_Horizontal","Connector_JST/JST_PH_S5B-PH-SM4-TB_1x05-1MP_P2.00mm_Horizontal","Connector_JST/JST_PH_S6B-PH-K_1x06_P2.00mm_Horizontal","Connector_JST/JST_PH_S6B-PH-SM4-TB_1x06-1MP_P2.00mm_Horizontal","Connector_JST/JST_PH_S7B-PH-K_1x07_P2.00mm_Horizontal","Connector_JST/JST_PH_S7B-PH-SM4-TB_1x07-1MP_P2.00mm_Horizontal","Connector_JST/JST_PH_S8B-PH-K_1x08_P2.00mm_Horizontal","Connector_JST/JST_PH_S8B-PH-SM4-TB_1x08-1MP_P2.00mm_Horizontal","Connector_JST/JST_PH_S9B-PH-K_1x09_P2.00mm_Horizontal","Connector_JST/JST_PH_S9B-PH-SM4-TB_1x09-1MP_P2.00mm_Horizontal","Connector_JST/JST_PUD_B08B-PUDSS_2x04_P2.00mm_Vertical","Connector_JST/JST_PUD_B10B-PUDSS_2x05_P2.00mm_Vertical","Connector_JST/JST_PUD_B12B-PUDSS_2x06_P2.00mm_Vertical","Connector_JST/JST_PUD_B14B-PUDSS_2x07_P2.00mm_Vertical","Connector_JST/JST_PUD_B16B-PUDSS_2x08_P2.00mm_Vertical","Connector_JST/JST_PUD_B18B-PUDSS_2x09_P2.00mm_Vertical","Connector_JST/JST_PUD_B20B-PUDSS_2x10_P2.00mm_Vertical","Connector_JST/JST_PUD_B22B-PUDSS_2x11_P2.00mm_Vertical","Connector_JST/JST_PUD_B24B-PUDSS_2x12_P2.00mm_Vertical","Connector_JST/JST_PUD_B26B-PUDSS_2x13_P2.00mm_Vertical","Connector_JST/JST_PUD_B28B-PUDSS_2x14_P2.00mm_Vertical","Connector_JST/JST_PUD_B30B-PUDSS_2x15_P2.00mm_Vertical","Connector_JST/JST_PUD_B32B-PUDSS_2x16_P2.00mm_Vertical","Connector_JST/JST_PUD_B34B-PUDSS_2x17_P2.00mm_Vertical","Connector_JST/JST_PUD_B36B-PUDSS_2x18_P2.00mm_Vertical","Connector_JST/JST_PUD_B38B-PUDSS_2x19_P2.00mm_Vertical","Connector_JST/JST_PUD_B40B-PUDSS_2x20_P2.00mm_Vertical","Connector_JST/JST_PUD_S08B-PUDSS-1_2x04_P2.00mm_Horizontal","Connector_JST/JST_PUD_S10B-PUDSS-1_2x05_P2.00mm_Horizontal","Connector_JST/JST_PUD_S12B-PUDSS-1_2x06_P2.00mm_Horizontal","Connector_JST/JST_PUD_S14B-PUDSS-1_2x07_P2.00mm_Horizontal","Connector_JST/JST_PUD_S16B-PUDSS-1_2x08_P2.00mm_Horizontal","Connector_JST/JST_PUD_S18B-PUDSS-1_2x09_P2.00mm_Horizontal","Connector_JST/JST_PUD_S20B-PUDSS-1_2x10_P2.00mm_Horizontal","Connector_JST/JST_PUD_S22B-PUDSS-1_2x11_P2.00mm_Horizontal","Connector_JST/JST_PUD_S24B-PUDSS-1_2x12_P2.00mm_Horizontal","Connector_JST/JST_PUD_S26B-PUDSS-1_2x13_P2.00mm_Horizontal","Connector_JST/JST_PUD_S28B-PUDSS-1_2x14_P2.00mm_Horizontal","Connector_JST/JST_PUD_S30B-PUDSS-1_2x15_P2.00mm_Horizontal","Connector_JST/JST_PUD_S32B-PUDSS-1_2x16_P2.00mm_Horizontal","Connector_JST/JST_PUD_S34B-PUDSS-1_2x17_P2.00mm_Horizontal","Connector_JST/JST_PUD_S36B-PUDSS-1_2x18_P2.00mm_Horizontal","Connector_JST/JST_PUD_S38B-PUDSS-1_2x19_P2.00mm_Horizontal","Connector_JST/JST_PUD_S40B-PUDSS-1_2x20_P2.00mm_Horizontal","Connector_JST/JST_SFH_SM02B-SFHRS-TF_1x02-1MP_P4.20mm_Horizontal","Connector_JST/JST_SHD_BM20B-SRDS-A-G-TF_2x10-1MP_P1.0mm_Vertical","Connector_JST/JST_SHD_BM20B-SRDS-G-TF_2x10-1MP_P1.0mm_Vertical","Connector_JST/JST_SHD_BM30B-SRDS-A-G-TF_2x15-1MP_P1.0mm_Vertical","Connector_JST/JST_SHD_BM30B-SRDS-G-TF_2x15-1MP_P1.0mm_Vertical","Connector_JST/JST_SHD_BM40B-SRDS-A-G-TF_2x20-1MP_P1.0mm_Vertical","Connector_JST/JST_SHD_BM40B-SRDS-G-TF_2x20-1MP_P1.0mm_Vertical","Connector_JST/JST_SHD_BM50B-SRDS-A-G-TF_2x25-1MP_P1.0mm_Vertical","Connector_JST/JST_SHD_BM50B-SRDS-G-TF_2x25-1MP_P1.0mm_Vertical","Connector_JST/JST_SHD_SM20B-SRDS-G-TF_2x10-1MP_P1.0mm_Horizontal","Connector_JST/JST_SHD_SM30B-SRDS-G-TF_2x15-1MP_P1.0mm_Horizontal","Connector_JST/JST_SHD_SM40B-SRDS-G-TF_2x20-1MP_P1.0mm_Horizontal","Connector_JST/JST_SHD_SM50B-SRDS-G-TF_2x25-1MP_P1.0mm_Horizontal","Connector_JST/JST_SHL_SM02B-SHLS-TF_1x02-1MP_P1.00mm_Horizontal","Connector_JST/JST_SHL_SM05B-SHLS-TF_1x05-1MP_P1.00mm_Horizontal","Connector_JST/JST_SHL_SM06B-SHLS-TF_1x06-1MP_P1.00mm_Horizontal","Connector_JST/JST_SHL_SM07B-SHLS-TF_1x07-1MP_P1.00mm_Horizontal","Connector_JST/JST_SHL_SM08B-SHLS-TF_1x08-1MP_P1.00mm_Horizontal","Connector_JST/JST_SHL_SM10B-SHLS-TF_1x10-1MP_P1.00mm_Horizontal","Connector_JST/JST_SHL_SM11B-SHLS-TF_1x11-1MP_P1.00mm_Horizontal","Connector_JST/JST_SHL_SM12B-SHLS-TF_1x12-1MP_P1.00mm_Horizontal","Connector_JST/JST_SHL_SM14B-SHLS-TF_1x14-1MP_P1.00mm_Horizontal","Connector_JST/JST_SHL_SM16B-SHLS-TF_1x16-1MP_P1.00mm_Horizontal","Connector_JST/JST_SHL_SM20B-SHLS-TF_1x20-1MP_P1.00mm_Horizontal","Connector_JST/JST_SHL_SM22B-SHLS-TF_1x22-1MP_P1.00mm_Horizontal","Connector_JST/JST_SHL_SM26B-SHLS-TF_1x26-1MP_P1.00mm_Horizontal","Connector_JST/JST_SHL_SM30B-SHLS-TF_1x30-1MP_P1.00mm_Horizontal","Connector_JST/JST_SH_BM02B-SRSS-TB_1x02-1MP_P1.00mm_Vertical","Connector_JST/JST_SH_BM03B-SRSS-TB_1x03-1MP_P1.00mm_Vertical","Connector_JST/JST_SH_BM04B-SRSS-TB_1x04-1MP_P1.00mm_Vertical","Connector_JST/JST_SH_BM05B-SRSS-TB_1x05-1MP_P1.00mm_Vertical","Connector_JST/JST_SH_BM06B-SRSS-TB_1x06-1MP_P1.00mm_Vertical","Connector_JST/JST_SH_BM07B-SRSS-TB_1x07-1MP_P1.00mm_Vertical","Connector_JST/JST_SH_BM08B-SRSS-TB_1x08-1MP_P1.00mm_Vertical","Connector_JST/JST_SH_BM09B-SRSS-TB_1x09-1MP_P1.00mm_Vertical","Connector_JST/JST_SH_BM10B-SRSS-TB_1x10-1MP_P1.00mm_Vertical","Connector_JST/JST_SH_BM11B-SRSS-TB_1x11-1MP_P1.00mm_Vertical","Connector_JST/JST_SH_BM12B-SRSS-TB_1x12-1MP_P1.00mm_Vertical","Connector_JST/JST_SH_BM13B-SRSS-TB_1x13-1MP_P1.00mm_Vertical","Connector_JST/JST_SH_BM14B-SRSS-TB_1x14-1MP_P1.00mm_Vertical","Connector_JST/JST_SH_BM15B-SRSS-TB_1x15-1MP_P1.00mm_Vertical","Connector_JST/JST_SH_SM02B-SRSS-TB_1x02-1MP_P1.00mm_Horizontal","Connector_JST/JST_SH_SM03B-SRSS-TB_1x03-1MP_P1.00mm_Horizontal","Connector_JST/JST_SH_SM04B-SRSS-TB_1x04-1MP_P1.00mm_Horizontal","Connector_JST/JST_SH_SM05B-SRSS-TB_1x05-1MP_P1.00mm_Horizontal","Connector_JST/JST_SH_SM06B-SRSS-TB_1x06-1MP_P1.00mm_Horizontal","Connector_JST/JST_SH_SM07B-SRSS-TB_1x07-1MP_P1.00mm_Horizontal","Connector_JST/JST_SH_SM08B-SRSS-TB_1x08-1MP_P1.00mm_Horizontal","Connector_JST/JST_SH_SM09B-SRSS-TB_1x09-1MP_P1.00mm_Horizontal","Connector_JST/JST_SH_SM10B-SRSS-TB_1x10-1MP_P1.00mm_Horizontal","Connector_JST/JST_SH_SM11B-SRSS-TB_1x11-1MP_P1.00mm_Horizontal","Connector_JST/JST_SH_SM12B-SRSS-TB_1x12-1MP_P1.00mm_Horizontal","Connector_JST/JST_SH_SM13B-SRSS-TB_1x13-1MP_P1.00mm_Horizontal","Connector_JST/JST_SH_SM14B-SRSS-TB_1x14-1MP_P1.00mm_Horizontal","Connector_JST/JST_SH_SM15B-SRSS-TB_1x15-1MP_P1.00mm_Horizontal","Connector_JST/JST_SH_SM20B-SRSS-TB_1x20-1MP_P1.00mm_Horizontal","Connector_JST/JST_SUR_BM02B-SURS-TF_1x02-1MP_P0.80mm_Vertical","Connector_JST/JST_SUR_BM03B-SURS-TF_1x03-1MP_P0.80mm_Vertical","Connector_JST/JST_SUR_BM04B-SURS-TF_1x04-1MP_P0.80mm_Vertical","Connector_JST/JST_SUR_BM05B-SURS-TF_1x05-1MP_P0.80mm_Vertical","Connector_JST/JST_SUR_BM06B-SURS-TF_1x06-1MP_P0.80mm_Vertical","Connector_JST/JST_SUR_BM08B-SURS-TF_1x08-1MP_P0.80mm_Vertical","Connector_JST/JST_SUR_BM10B-SURS-TF_1x10-1MP_P0.80mm_Vertical","Connector_JST/JST_SUR_BM12B-SURS-TF_1x12-1MP_P0.80mm_Vertical","Connector_JST/JST_SUR_BM14B-SURS-TF_1x14-1MP_P0.80mm_Vertical","Connector_JST/JST_SUR_BM15B-SURS-TF_1x15-1MP_P0.80mm_Vertical","Connector_JST/JST_SUR_BM16B-SURS-TF_1x16-1MP_P0.80mm_Vertical","Connector_JST/JST_SUR_BM17B-SURS-TF_1x17-1MP_P0.80mm_Vertical","Connector_JST/JST_SUR_BM20B-SURS-TF_1x20-1MP_P0.80mm_Vertical","Connector_JST/JST_SUR_SM02B-SURS-TF_1x02-1MP_P0.80mm_Horizontal","Connector_JST/JST_SUR_SM03B-SURS-TF_1x03-1MP_P0.80mm_Horizontal","Connector_JST/JST_SUR_SM04B-SURS-TF_1x04-1MP_P0.80mm_Horizontal","Connector_JST/JST_SUR_SM05B-SURS-TF_1x05-1MP_P0.80mm_Horizontal","Connector_JST/JST_SUR_SM06B-SURS-TF_1x06-1MP_P0.80mm_Horizontal","Connector_JST/JST_SUR_SM08B-SURS-TF_1x08-1MP_P0.80mm_Horizontal","Connector_JST/JST_SUR_SM10B-SURS-TF_1x10-1MP_P0.80mm_Horizontal","Connector_JST/JST_SUR_SM12B-SURS-TF_1x12-1MP_P0.80mm_Horizontal","Connector_JST/JST_SUR_SM14B-SURS-TF_1x14-1MP_P0.80mm_Horizontal","Connector_JST/JST_SUR_SM15B-SURS-TF_1x15-1MP_P0.80mm_Horizontal","Connector_JST/JST_SUR_SM16B-SURS-TF_1x16-1MP_P0.80mm_Horizontal","Connector_JST/JST_SUR_SM17B-SURS-TF_1x17-1MP_P0.80mm_Horizontal","Connector_JST/JST_SUR_SM20B-SURS-TF_1x20-1MP_P0.80mm_Horizontal","Connector_JST/JST_SUR_SM22B-SURS-TF_1x22-1MP_P0.80mm_Horizontal","Connector_JST/JST_VH_B10P-VH-B_1x10_P3.96mm_Vertical","Connector_JST/JST_VH_B10P-VH-FB-B_1x10_P3.96mm_Vertical","Connector_JST/JST_VH_B10P-VH_1x10_P3.96mm_Vertical","Connector_JST/JST_VH_B10PS-VH_1x10_P3.96mm_Horizontal","Connector_JST/JST_VH_B11P-VH-B_1x11_P3.96mm_Vertical","Connector_JST/JST_VH_B2P-VH-B_1x02_P3.96mm_Vertical","Connector_JST/JST_VH_B2P-VH-FB-B_1x02_P3.96mm_Vertical","Connector_JST/JST_VH_B2P-VH_1x02_P3.96mm_Vertical","Connector_JST/JST_VH_B2P3-VH_1x02_P7.92mm_Vertical","Connector_JST/JST_VH_B2PS-VH_1x02_P3.96mm_Horizontal","Connector_JST/JST_VH_B3P-VH-B_1x03_P3.96mm_Vertical","Connector_JST/JST_VH_B3P-VH-FB-B_1x03_P3.96mm_Vertical","Connector_JST/JST_VH_B3P-VH_1x03_P3.96mm_Vertical","Connector_JST/JST_VH_B3PS-VH_1x03_P3.96mm_Horizontal","Connector_JST/JST_VH_B4P-VH-B_1x04_P3.96mm_Vertical","Connector_JST/JST_VH_B4P-VH-FB-B_1x04_P3.96mm_Vertical","Connector_JST/JST_VH_B4P-VH_1x04_P3.96mm_Vertical","Connector_JST/JST_VH_B4PS-VH_1x04_P3.96mm_Horizontal","Connector_JST/JST_VH_B5P-VH-B_1x05_P3.96mm_Vertical","Connector_JST/JST_VH_B5P-VH-FB-B_1x05_P3.96mm_Vertical","Connector_JST/JST_VH_B5P-VH_1x05_P3.96mm_Vertical","Connector_JST/JST_VH_B5PS-VH_1x05_P3.96mm_Horizontal","Connector_JST/JST_VH_B6P-VH-B_1x06_P3.96mm_Vertical","Connector_JST/JST_VH_B6P-VH-FB-B_1x06_P3.96mm_Vertical","Connector_JST/JST_VH_B6P-VH_1x06_P3.96mm_Vertical","Connector_JST/JST_VH_B6PS-VH_1x06_P3.96mm_Horizontal","Connector_JST/JST_VH_B7P-VH-B_1x07_P3.96mm_Vertical","Connector_JST/JST_VH_B7P-VH-FB-B_1x07_P3.96mm_Vertical","Connector_JST/JST_VH_B7P-VH_1x07_P3.96mm_Vertical","Connector_JST/JST_VH_B7PS-VH_1x07_P3.96mm_Horizontal","Connector_JST/JST_VH_B8P-VH-B_1x08_P3.96mm_Vertical","Connector_JST/JST_VH_B8P-VH-FB-B_1x08_P3.96mm_Vertical","Connector_JST/JST_VH_B8P-VH_1x08_P3.96mm_Vertical","Connector_JST/JST_VH_B8PS-VH_1x08_P3.96mm_Horizontal","Connector_JST/JST_VH_B9P-VH-B_1x09_P3.96mm_Vertical","Connector_JST/JST_VH_B9P-VH-FB-B_1x09_P3.96mm_Vertical","Connector_JST/JST_VH_B9P-VH_1x09_P3.96mm_Vertical","Connector_JST/JST_VH_B9PS-VH_1x09_P3.96mm_Horizontal","Connector_JST/JST_VH_S2P-VH_1x02_P3.96mm_Horizontal","Connector_JST/JST_VH_S3P-VH_1x03_P3.96mm_Horizontal","Connector_JST/JST_VH_S4P-VH_1x04_P3.96mm_Horizontal","Connector_JST/JST_VH_S5P-VH_1x05_P3.96mm_Horizontal","Connector_JST/JST_VH_S6P-VH_1x06_P3.96mm_Horizontal","Connector_JST/JST_VH_S7P-VH_1x07_P3.96mm_Horizontal","Connector_JST/JST_XAG_SM05B-XAGKS-BN-TB_1x05-1MP_P2.50mm_Horizontal","Connector_JST/JST_XA_B02B-XASK-1-A_1x02_P2.50mm_Vertical","Connector_JST/JST_XA_B02B-XASK-1_1x02_P2.50mm_Vertical","Connector_JST/JST_XA_B03B-XASK-1-A_1x03_P2.50mm_Vertical","Connector_JST/JST_XA_B03B-XASK-1_1x03_P2.50mm_Vertical","Connector_JST/JST_XA_B04B-XASK-1-A_1x04_P2.50mm_Vertical","Connector_JST/JST_XA_B04B-XASK-1_1x04_P2.50mm_Vertical","Connector_JST/JST_XA_B05B-XASK-1-A_1x05_P2.50mm_Vertical","Connector_JST/JST_XA_B05B-XASK-1_1x05_P2.50mm_Vertical","Connector_JST/JST_XA_B06B-XASK-1-A_1x06_P2.50mm_Vertical","Connector_JST/JST_XA_B06B-XASK-1_1x06_P2.50mm_Vertical","Connector_JST/JST_XA_B07B-XASK-1-A_1x07_P2.50mm_Vertical","Connector_JST/JST_XA_B07B-XASK-1_1x07_P2.50mm_Vertical","Connector_JST/JST_XA_B08B-XASK-1-A_1x08_P2.50mm_Vertical","Connector_JST/JST_XA_B08B-XASK-1_1x08_P2.50mm_Vertical","Connector_JST/JST_XA_B09B-XASK-1-A_1x09_P2.50mm_Vertical","Connector_JST/JST_XA_B09B-XASK-1_1x09_P2.50mm_Vertical","Connector_JST/JST_XA_B10B-XASK-1-A_1x10_P2.50mm_Vertical","Connector_JST/JST_XA_B10B-XASK-1_1x10_P2.50mm_Vertical","Connector_JST/JST_XA_B11B-XASK-1-A_1x11_P2.50mm_Vertical","Connector_JST/JST_XA_B11B-XASK-1_1x11_P2.50mm_Vertical","Connector_JST/JST_XA_B12B-XASK-1-A_1x12_P2.50mm_Vertical","Connector_JST/JST_XA_B12B-XASK-1_1x12_P2.50mm_Vertical","Connector_JST/JST_XA_B13B-XASK-1-A_1x13_P2.50mm_Vertical","Connector_JST/JST_XA_B13B-XASK-1_1x13_P2.50mm_Vertical","Connector_JST/JST_XA_B14B-XASK-1-A_1x14_P2.50mm_Vertical","Connector_JST/JST_XA_B14B-XASK-1_1x14_P2.50mm_Vertical","Connector_JST/JST_XA_B15B-XASK-1-A_1x15_P2.50mm_Vertical","Connector_JST/JST_XA_B15B-XASK-1_1x15_P2.50mm_Vertical","Connector_JST/JST_XA_B18B-XASK-1_1x18_P2.50mm_Vertical","Connector_JST/JST_XA_B20B-XASK-1-A_1x20_P2.50mm_Vertical","Connector_JST/JST_XA_B20B-XASK-1_1x20_P2.50mm_Vertical","Connector_JST/JST_XA_S02B-XASK-1N-BN_1x02_P2.50mm_Horizontal","Connector_JST/JST_XA_S02B-XASK-1_1x02_P2.50mm_Horizontal","Connector_JST/JST_XA_S03B-XASK-1N-BN_1x03_P2.50mm_Horizontal","Connector_JST/JST_XA_S03B-XASK-1_1x03_P2.50mm_Horizontal","Connector_JST/JST_XA_S04B-XASK-1N-BN_1x04_P2.50mm_Horizontal","Connector_JST/JST_XA_S04B-XASK-1_1x04_P2.50mm_Horizontal","Connector_JST/JST_XA_S05B-XASK-1N-BN_1x05_P2.50mm_Horizontal","Connector_JST/JST_XA_S05B-XASK-1_1x05_P2.50mm_Horizontal","Connector_JST/JST_XA_S06B-XASK-1N-BN_1x06_P2.50mm_Horizontal","Connector_JST/JST_XA_S06B-XASK-1_1x06_P2.50mm_Horizontal","Connector_JST/JST_XA_S07B-XASK-1N-BN_1x07_P2.50mm_Horizontal","Connector_JST/JST_XA_S07B-XASK-1_1x07_P2.50mm_Horizontal","Connector_JST/JST_XA_S08B-XASK-1N-BN_1x08_P2.50mm_Horizontal","Connector_JST/JST_XA_S08B-XASK-1_1x08_P2.50mm_Horizontal","Connector_JST/JST_XA_S09B-XASK-1N-BN_1x09_P2.50mm_Horizontal","Connector_JST/JST_XA_S09B-XASK-1_1x09_P2.50mm_Horizontal","Connector_JST/JST_XA_S10B-XASK-1N-BN_1x10_P2.50mm_Horizontal","Connector_JST/JST_XA_S10B-XASK-1_1x10_P2.50mm_Horizontal","Connector_JST/JST_XA_S11B-XASK-1N-BN_1x11_P2.50mm_Horizontal","Connector_JST/JST_XA_S11B-XASK-1_1x11_P2.50mm_Horizontal","Connector_JST/JST_XA_S12B-XASK-1N-BN_1x12_P2.50mm_Horizontal","Connector_JST/JST_XA_S12B-XASK-1_1x12_P2.50mm_Horizontal","Connector_JST/JST_XA_S13B-XASK-1N-BN_1x13_P2.50mm_Horizontal","Connector_JST/JST_XA_S13B-XASK-1_1x13_P2.50mm_Horizontal","Connector_JST/JST_XA_S14B-XASK-1N-BN_1x14_P2.50mm_Horizontal","Connector_JST/JST_XA_S14B-XASK-1_1x14_P2.50mm_Horizontal","Connector_JST/JST_XH_B10B-XH-AM_1x10_P2.50mm_Vertical","Connector_JST/JST_XH_B10B-XH-A_1x10_P2.50mm_Vertical","Connector_JST/JST_XH_B11B-XH-A_1x11_P2.50mm_Vertical","Connector_JST/JST_XH_B12B-XH-AM_1x12_P2.50mm_Vertical","Connector_JST/JST_XH_B12B-XH-A_1x12_P2.50mm_Vertical","Connector_JST/JST_XH_B13B-XH-A_1x13_P2.50mm_Vertical","Connector_JST/JST_XH_B14B-XH-A_1x14_P2.50mm_Vertical","Connector_JST/JST_XH_B15B-XH-A_1x15_P2.50mm_Vertical","Connector_JST/JST_XH_B16B-XH-A_1x16_P2.50mm_Vertical","Connector_JST/JST_XH_B1B-XH-AM_1x01_P2.50mm_Vertical","Connector_JST/JST_XH_B20B-XH-A_1x20_P2.50mm_Vertical","Connector_JST/JST_XH_B2B-XH-AM_1x02_P2.50mm_Vertical","Connector_JST/JST_XH_B2B-XH-A_1x02_P2.50mm_Vertical","Connector_JST/JST_XH_B3B-XH-AM_1x03_P2.50mm_Vertical","Connector_JST/JST_XH_B3B-XH-A_1x03_P2.50mm_Vertical","Connector_JST/JST_XH_B4B-XH-AM_1x04_P2.50mm_Vertical","Connector_JST/JST_XH_B4B-XH-A_1x04_P2.50mm_Vertical","Connector_JST/JST_XH_B5B-XH-AM_1x05_P2.50mm_Vertical","Connector_JST/JST_XH_B5B-XH-A_1x05_P2.50mm_Vertical","Connector_JST/JST_XH_B6B-XH-AM_1x06_P2.50mm_Vertical","Connector_JST/JST_XH_B6B-XH-A_1x06_P2.50mm_Vertical","Connector_JST/JST_XH_B7B-XH-AM_1x07_P2.50mm_Vertical","Connector_JST/JST_XH_B7B-XH-A_1x07_P2.50mm_Vertical","Connector_JST/JST_XH_B8B-XH-AM_1x08_P2.50mm_Vertical","Connector_JST/JST_XH_B8B-XH-A_1x08_P2.50mm_Vertical","Connector_JST/JST_XH_B9B-XH-AM_1x09_P2.50mm_Vertical","Connector_JST/JST_XH_B9B-XH-A_1x09_P2.50mm_Vertical","Connector_JST/JST_XH_S10B-XH-A-1_1x10_P2.50mm_Horizontal","Connector_JST/JST_XH_S10B-XH-A_1x10_P2.50mm_Horizontal","Connector_JST/JST_XH_S11B-XH-A-1_1x11_P2.50mm_Horizontal","Connector_JST/JST_XH_S11B-XH-A_1x11_P2.50mm_Horizontal","Connector_JST/JST_XH_S12B-XH-A-1_1x12_P2.50mm_Horizontal","Connector_JST/JST_XH_S12B-XH-A_1x12_P2.50mm_Horizontal","Connector_JST/JST_XH_S13B-XH-A-1_1x13_P2.50mm_Horizontal","Connector_JST/JST_XH_S13B-XH-A_1x13_P2.50mm_Horizontal","Connector_JST/JST_XH_S14B-XH-A-1_1x14_P2.50mm_Horizontal","Connector_JST/JST_XH_S14B-XH-A_1x14_P2.50mm_Horizontal","Connector_JST/JST_XH_S15B-XH-A-1_1x15_P2.50mm_Horizontal","Connector_JST/JST_XH_S15B-XH-A_1x15_P2.50mm_Horizontal","Connector_JST/JST_XH_S16B-XH-A_1x16_P2.50mm_Horizontal","Connector_JST/JST_XH_S2B-XH-A-1_1x02_P2.50mm_Horizontal","Connector_JST/JST_XH_S2B-XH-A_1x02_P2.50mm_Horizontal","Connector_JST/JST_XH_S3B-XH-A-1_1x03_P2.50mm_Horizontal","Connector_JST/JST_XH_S3B-XH-A_1x03_P2.50mm_Horizontal","Connector_JST/JST_XH_S3B-XH-SM4-TB_1x03-1MP_P2.50mm_Horizontal","Connector_JST/JST_XH_S4B-XH-A-1_1x04_P2.50mm_Horizontal","Connector_JST/JST_XH_S4B-XH-A_1x04_P2.50mm_Horizontal","Connector_JST/JST_XH_S4B-XH-SM4-TB_1x04-1MP_P2.50mm_Horizontal","Connector_JST/JST_XH_S5B-XH-A-1_1x05_P2.50mm_Horizontal","Connector_JST/JST_XH_S5B-XH-A_1x05_P2.50mm_Horizontal","Connector_JST/JST_XH_S6B-XH-A-1_1x06_P2.50mm_Horizontal","Connector_JST/JST_XH_S6B-XH-A_1x06_P2.50mm_Horizontal","Connector_JST/JST_XH_S6B-XH-SM4-TB_1x06-1MP_P2.50mm_Horizontal","Connector_JST/JST_XH_S7B-XH-A-1_1x07_P2.50mm_Horizontal","Connector_JST/JST_XH_S7B-XH-A_1x07_P2.50mm_Horizontal","Connector_JST/JST_XH_S8B-XH-A-1_1x08_P2.50mm_Horizontal","Connector_JST/JST_XH_S8B-XH-A_1x08_P2.50mm_Horizontal","Connector_JST/JST_XH_S9B-XH-A-1_1x09_P2.50mm_Horizontal","Connector_JST/JST_XH_S9B-XH-A_1x09_P2.50mm_Horizontal","Connector_JST/JST_ZE_B02B-ZESK-1D_1x02_P1.50mm_Vertical","Connector_JST/JST_ZE_B03B-ZESK-1D_1x03_P1.50mm_Vertical","Connector_JST/JST_ZE_B03B-ZESK-D_1x03_P1.50mm_Vertical","Connector_JST/JST_ZE_B04B-ZESK-1D_1x04_P1.50mm_Vertical","Connector_JST/JST_ZE_B04B-ZESK-D_1x04_P1.50mm_Vertical","Connector_JST/JST_ZE_B05B-ZESK-1D_1x05_P1.50mm_Vertical","Connector_JST/JST_ZE_B05B-ZESK-D_1x05_P1.50mm_Vertical","Connector_JST/JST_ZE_B06B-ZESK-1D_1x06_P1.50mm_Vertical","Connector_JST/JST_ZE_B06B-ZESK-D_1x06_P1.50mm_Vertical","Connector_JST/JST_ZE_B07B-ZESK-1D_1x07_P1.50mm_Vertical","Connector_JST/JST_ZE_B07B-ZESK-D_1x07_P1.50mm_Vertical","Connector_JST/JST_ZE_B08B-ZESK-1D_1x08_P1.50mm_Vertical","Connector_JST/JST_ZE_B08B-ZESK-D_1x08_P1.50mm_Vertical","Connector_JST/JST_ZE_B09B-ZESK-1D_1x09_P1.50mm_Vertical","Connector_JST/JST_ZE_B09B-ZESK-D_1x09_P1.50mm_Vertical","Connector_JST/JST_ZE_B10B-ZESK-1D_1x10_P1.50mm_Vertical","Connector_JST/JST_ZE_B10B-ZESK-D_1x10_P1.50mm_Vertical","Connector_JST/JST_ZE_B11B-ZESK-1D_1x11_P1.50mm_Vertical","Connector_JST/JST_ZE_B11B-ZESK-D_1x11_P1.50mm_Vertical","Connector_JST/JST_ZE_B12B-ZESK-1D_1x12_P1.50mm_Vertical","Connector_JST/JST_ZE_B12B-ZESK-D_1x12_P1.50mm_Vertical","Connector_JST/JST_ZE_B13B-ZESK-1D_1x13_P1.50mm_Vertical","Connector_JST/JST_ZE_B13B-ZESK-D_1x13_P1.50mm_Vertical","Connector_JST/JST_ZE_B14B-ZESK-1D_1x14_P1.50mm_Vertical","Connector_JST/JST_ZE_B14B-ZESK-D_1x14_P1.50mm_Vertical","Connector_JST/JST_ZE_B15B-ZESK-1D_1x15_P1.50mm_Vertical","Connector_JST/JST_ZE_B15B-ZESK-D_1x15_P1.50mm_Vertical","Connector_JST/JST_ZE_B16B-ZESK-1D_1x16_P1.50mm_Vertical","Connector_JST/JST_ZE_B16B-ZESK-D_1x16_P1.50mm_Vertical","Connector_JST/JST_ZE_BM02B-ZESS-TBT_1x02-1MP_P1.50mm_Vertical","Connector_JST/JST_ZE_BM03B-ZESS-TBT_1x03-1MP_P1.50mm_Vertical","Connector_JST/JST_ZE_BM04B-ZESS-TBT_1x04-1MP_P1.50mm_Vertical","Connector_JST/JST_ZE_BM05B-ZESS-TBT_1x05-1MP_P1.50mm_Vertical","Connector_JST/JST_ZE_BM06B-ZESS-TBT_1x06-1MP_P1.50mm_Vertical","Connector_JST/JST_ZE_BM07B-ZESS-TBT_1x07-1MP_P1.50mm_Vertical","Connector_JST/JST_ZE_BM08B-ZESS-TBT_1x08-1MP_P1.50mm_Vertical","Connector_JST/JST_ZE_BM09B-ZESS-TBT_1x09-1MP_P1.50mm_Vertical","Connector_JST/JST_ZE_BM10B-ZESS-TBT_1x10-1MP_P1.50mm_Vertical","Connector_JST/JST_ZE_BM11B-ZESS-TBT_1x11-1MP_P1.50mm_Vertical","Connector_JST/JST_ZE_BM12B-ZESS-TBT_1x12-1MP_P1.50mm_Vertical","Connector_JST/JST_ZE_BM13B-ZESS-TBT_1x13-1MP_P1.50mm_Vertical","Connector_JST/JST_ZE_BM14B-ZESS-TBT_1x14-1MP_P1.50mm_Vertical","Connector_JST/JST_ZE_BM15B-ZESS-TBT_1x15-1MP_P1.50mm_Vertical","Connector_JST/JST_ZE_BM16B-ZESS-TBT_1x16-1MP_P1.50mm_Vertical","Connector_JST/JST_ZE_S02B-ZESK-2D_1x02_P1.50mm_Horizontal","Connector_JST/JST_ZE_S03B-ZESK-2D_1x03_P1.50mm_Horizontal","Connector_JST/JST_ZE_S04B-ZESK-2D_1x04_P1.50mm_Horizontal","Connector_JST/JST_ZE_S05B-ZESK-2D_1x05_P1.50mm_Horizontal","Connector_JST/JST_ZE_S06B-ZESK-2D_1x06_P1.50mm_Horizontal","Connector_JST/JST_ZE_S07B-ZESK-2D_1x07_P1.50mm_Horizontal","Connector_JST/JST_ZE_S08B-ZESK-2D_1x08_P1.50mm_Horizontal","Connector_JST/JST_ZE_S09B-ZESK-2D_1x09_P1.50mm_Horizontal","Connector_JST/JST_ZE_S10B-ZESK-2D_1x10_P1.50mm_Horizontal","Connector_JST/JST_ZE_S11B-ZESK-2D_1x11_P1.50mm_Horizontal","Connector_JST/JST_ZE_S12B-ZESK-2D_1x12_P1.50mm_Horizontal","Connector_JST/JST_ZE_S13B-ZESK-2D_1x13_P1.50mm_Horizontal","Connector_JST/JST_ZE_S14B-ZESK-2D_1x14_P1.50mm_Horizontal","Connector_JST/JST_ZE_S15B-ZESK-2D_1x15_P1.50mm_Horizontal","Connector_JST/JST_ZE_S16B-ZESK-2D_1x16_P1.50mm_Horizontal","Connector_JST/JST_ZE_SM02B-ZESS-TB_1x02-1MP_P1.50mm_Horizontal","Connector_JST/JST_ZE_SM03B-ZESS-TB_1x03-1MP_P1.50mm_Horizontal","Connector_JST/JST_ZE_SM04B-ZESS-TB_1x04-1MP_P1.50mm_Horizontal","Connector_JST/JST_ZE_SM05B-ZESS-TB_1x05-1MP_P1.50mm_Horizontal","Connector_JST/JST_ZE_SM06B-ZESS-TB_1x06-1MP_P1.50mm_Horizontal","Connector_JST/JST_ZE_SM07B-ZESS-TB_1x07-1MP_P1.50mm_Horizontal","Connector_JST/JST_ZE_SM08B-ZESS-TB_1x08-1MP_P1.50mm_Horizontal","Connector_JST/JST_ZE_SM09B-ZESS-TB_1x09-1MP_P1.50mm_Horizontal","Connector_JST/JST_ZE_SM10B-ZESS-TB_1x10-1MP_P1.50mm_Horizontal","Connector_JST/JST_ZE_SM11B-ZESS-TB_1x11-1MP_P1.50mm_Horizontal","Connector_JST/JST_ZE_SM12B-ZESS-TB_1x12-1MP_P1.50mm_Horizontal","Connector_JST/JST_ZE_SM13B-ZESS-TB_1x13-1MP_P1.50mm_Horizontal","Connector_JST/JST_ZE_SM14B-ZESS-TB_1x14-1MP_P1.50mm_Horizontal","Connector_JST/JST_ZE_SM15B-ZESS-TB_1x15-1MP_P1.50mm_Horizontal","Connector_JST/JST_ZE_SM16B-ZESS-TB_1x16-1MP_P1.50mm_Horizontal","Connector_JST/JST_ZH_B10B-ZR-SM4-TF_1x10-1MP_P1.50mm_Vertical","Connector_JST/JST_ZH_B10B-ZR_1x10_P1.50mm_Vertical","Connector_JST/JST_ZH_B11B-ZR-SM4-TF_1x11-1MP_P1.50mm_Vertical","Connector_JST/JST_ZH_B11B-ZR_1x11_P1.50mm_Vertical","Connector_JST/JST_ZH_B12B-ZR-SM4-TF_1x12-1MP_P1.50mm_Vertical","Connector_JST/JST_ZH_B12B-ZR_1x12_P1.50mm_Vertical","Connector_JST/JST_ZH_B13B-ZR-SM4-TF_1x13-1MP_P1.50mm_Vertical","Connector_JST/JST_ZH_B2B-ZR-SM4-TF_1x02-1MP_P1.50mm_Vertical","Connector_JST/JST_ZH_B2B-ZR_1x02_P1.50mm_Vertical","Connector_JST/JST_ZH_B3B-ZR-SM4-TF_1x03-1MP_P1.50mm_Vertical","Connector_JST/JST_ZH_B3B-ZR_1x03_P1.50mm_Vertical","Connector_JST/JST_ZH_B4B-ZR-SM4-TF_1x04-1MP_P1.50mm_Vertical","Connector_JST/JST_ZH_B4B-ZR_1x04_P1.50mm_Vertical","Connector_JST/JST_ZH_B5B-ZR-SM4-TF_1x05-1MP_P1.50mm_Vertical","Connector_JST/JST_ZH_B5B-ZR_1x05_P1.50mm_Vertical","Connector_JST/JST_ZH_B6B-ZR-SM4-TF_1x06-1MP_P1.50mm_Vertical","Connector_JST/JST_ZH_B6B-ZR_1x06_P1.50mm_Vertical","Connector_JST/JST_ZH_B7B-ZR-SM4-TF_1x07-1MP_P1.50mm_Vertical","Connector_JST/JST_ZH_B7B-ZR_1x07_P1.50mm_Vertical","Connector_JST/JST_ZH_B8B-ZR-SM4-TF_1x08-1MP_P1.50mm_Vertical","Connector_JST/JST_ZH_B8B-ZR_1x08_P1.50mm_Vertical","Connector_JST/JST_ZH_B9B-ZR-SM4-TF_1x09-1MP_P1.50mm_Vertical","Connector_JST/JST_ZH_B9B-ZR_1x09_P1.50mm_Vertical","Connector_JST/JST_ZH_S10B-ZR-SM4A-TF_1x10-1MP_P1.50mm_Horizontal","Connector_JST/JST_ZH_S11B-ZR-SM4A-TF_1x11-1MP_P1.50mm_Horizontal","Connector_JST/JST_ZH_S12B-ZR-SM4A-TF_1x12-1MP_P1.50mm_Horizontal","Connector_JST/JST_ZH_S13B-ZR-SM4A-TF_1x13-1MP_P1.50mm_Horizontal","Connector_JST/JST_ZH_S2B-ZR-SM4A-TF_1x02-1MP_P1.50mm_Horizontal","Connector_JST/JST_ZH_S3B-ZR-SM4A-TF_1x03-1MP_P1.50mm_Horizontal","Connector_JST/JST_ZH_S4B-ZR-SM4A-TF_1x04-1MP_P1.50mm_Horizontal","Connector_JST/JST_ZH_S5B-ZR-SM4A-TF_1x05-1MP_P1.50mm_Horizontal","Connector_JST/JST_ZH_S6B-ZR-SM4A-TF_1x06-1MP_P1.50mm_Horizontal","Connector_JST/JST_ZH_S7B-ZR-SM4A-TF_1x07-1MP_P1.50mm_Horizontal","Connector_JST/JST_ZH_S8B-ZR-SM4A-TF_1x08-1MP_P1.50mm_Horizontal","Connector_JST/JST_ZH_S9B-ZR-SM4A-TF_1x09-1MP_P1.50mm_Horizontal","Connector_Molex/Molex_CLIK-Mate_502382-0270_1x02-1MP_P1.25mm_Vertical","Connector_Molex/Molex_CLIK-Mate_502382-0370_1x03-1MP_P1.25mm_Vertical","Connector_Molex/Molex_CLIK-Mate_502382-0470_1x04-1MP_P1.25mm_Vertical","Connector_Molex/Molex_CLIK-Mate_502382-0570_1x05-1MP_P1.25mm_Vertical","Connector_Molex/Molex_CLIK-Mate_502382-0670_1x06-1MP_P1.25mm_Vertical","Connector_Molex/Molex_CLIK-Mate_502382-0770_1x07-1MP_P1.25mm_Vertical","Connector_Molex/Molex_CLIK-Mate_502382-0870_1x08-1MP_P1.25mm_Vertical","Connector_Molex/Molex_CLIK-Mate_502382-0970_1x09-1MP_P1.25mm_Vertical","Connector_Molex/Molex_CLIK-Mate_502382-1070_1x10-1MP_P1.25mm_Vertical","Connector_Molex/Molex_CLIK-Mate_502382-1170_1x11-1MP_P1.25mm_Vertical","Connector_Molex/Molex_CLIK-Mate_502382-1270_1x12-1MP_P1.25mm_Vertical","Connector_Molex/Molex_CLIK-Mate_502382-1370_1x13-1MP_P1.25mm_Vertical","Connector_Molex/Molex_CLIK-Mate_502382-1470_1x14-1MP_P1.25mm_Vertical","Connector_Molex/Molex_CLIK-Mate_502382-1570_1x15-1MP_P1.25mm_Vertical","Connector_Molex/Molex_CLIK-Mate_502386-0270_1x02-1MP_P1.25mm_Horizontal","Connector_Molex/Molex_CLIK-Mate_502386-0370_1x03-1MP_P1.25mm_Horizontal","Connector_Molex/Molex_CLIK-Mate_502386-0470_1x04-1MP_P1.25mm_Horizontal","Connector_Molex/Molex_CLIK-Mate_502386-0570_1x05-1MP_P1.25mm_Horizontal","Connector_Molex/Molex_CLIK-Mate_502386-0670_1x06-1MP_P1.25mm_Horizontal","Connector_Molex/Molex_CLIK-Mate_502386-0770_1x07-1MP_P1.25mm_Horizontal","Connector_Molex/Molex_CLIK-Mate_502386-0870_1x08-1MP_P1.25mm_Horizontal","Connector_Molex/Molex_CLIK-Mate_502386-0970_1x09-1MP_P1.25mm_Horizontal","Connector_Molex/Molex_CLIK-Mate_502386-1070_1x10-1MP_P1.25mm_Horizontal","Connector_Molex/Molex_CLIK-Mate_502386-1170_1x11-1MP_P1.25mm_Horizontal","Connector_Molex/Molex_CLIK-Mate_502386-1270_1x12-1MP_P1.25mm_Horizontal","Connector_Molex/Molex_CLIK-Mate_502386-1370_1x13-1MP_P1.25mm_Horizontal","Connector_Molex/Molex_CLIK-Mate_502386-1470_1x14-1MP_P1.25mm_Horizontal","Connector_Molex/Molex_CLIK-Mate_502386-1570_1x15-1MP_P1.25mm_Horizontal","Connector_Molex/Molex_CLIK-Mate_502443-0270_1x02-1MP_P2.00mm_Vertical","Connector_Molex/Molex_CLIK-Mate_502443-0370_1x03-1MP_P2.00mm_Vertical","Connector_Molex/Molex_CLIK-Mate_502443-0470_1x04-1MP_P2.00mm_Vertical","Connector_Molex/Molex_CLIK-Mate_502443-0570_1x05-1MP_P2.00mm_Vertical","Connector_Molex/Molex_CLIK-Mate_502443-0670_1x06-1MP_P2.00mm_Vertical","Connector_Molex/Molex_CLIK-Mate_502443-0770_1x07-1MP_P2.00mm_Vertical","Connector_Molex/Molex_CLIK-Mate_502443-0870_1x08-1MP_P2.00mm_Vertical","Connector_Molex/Molex_CLIK-Mate_502443-0970_1x09-1MP_P2.00mm_Vertical","Connector_Molex/Molex_CLIK-Mate_502443-1270_1x12-1MP_P2.00mm_Vertical","Connector_Molex/Molex_CLIK-Mate_502443-1370_1x13-1MP_P2.00mm_Vertical","Connector_Molex/Molex_CLIK-Mate_502443-1470_1x14-1MP_P2.00mm_Vertical","Connector_Molex/Molex_CLIK-Mate_502443-1570_1x15-1MP_P2.00mm_Vertical","Connector_Molex/Molex_CLIK-Mate_502494-0270_1x02-1MP_P2.00mm_Horizontal","Connector_Molex/Molex_CLIK-Mate_502494-0370_1x03-1MP_P2.00mm_Horizontal","Connector_Molex/Molex_CLIK-Mate_502494-0470_1x04-1MP_P2.00mm_Horizontal","Connector_Molex/Molex_CLIK-Mate_502494-0670_1x06-1MP_P2.00mm_Horizontal","Connector_Molex/Molex_CLIK-Mate_502494-0870_1x08-1MP_P2.00mm_Horizontal","Connector_Molex/Molex_CLIK-Mate_502494-1070_1x10-1MP_P2.00mm_Horizontal","Connector_Molex/Molex_CLIK-Mate_502494-1270_1x12-1MP_P2.00mm_Horizontal","Connector_Molex/Molex_CLIK-Mate_502494-1370_1x13-1MP_P2.00mm_Horizontal","Connector_Molex/Molex_CLIK-Mate_502494-1470_1x14-1MP_P2.00mm_Horizontal","Connector_Molex/Molex_CLIK-Mate_502494-1570_1x15-1MP_P2.00mm_Horizontal","Connector_Molex/Molex_CLIK-Mate_502585-0270_1x02-1MP_P1.50mm_Horizontal","Connector_Molex/Molex_CLIK-Mate_502585-0370_1x03-1MP_P1.50mm_Horizontal","Connector_Molex/Molex_CLIK-Mate_502585-0470_1x04-1MP_P1.50mm_Horizontal","Connector_Molex/Molex_CLIK-Mate_502585-0570_1x05-1MP_P1.50mm_Horizontal","Connector_Molex/Molex_CLIK-Mate_502585-0670_1x06-1MP_P1.50mm_Horizontal","Connector_Molex/Molex_CLIK-Mate_502585-0770_1x07-1MP_P1.50mm_Horizontal","Connector_Molex/Molex_CLIK-Mate_502585-0870_1x08-1MP_P1.50mm_Horizontal","Connector_Molex/Molex_CLIK-Mate_502585-0970_1x09-1MP_P1.50mm_Horizontal","Connector_Molex/Molex_CLIK-Mate_502585-1070_1x10-1MP_P1.50mm_Horizontal","Connector_Molex/Molex_CLIK-Mate_502585-1170_1x11-1MP_P1.50mm_Horizontal","Connector_Molex/Molex_CLIK-Mate_502585-1270_1x12-1MP_P1.50mm_Horizontal","Connector_Molex/Molex_CLIK-Mate_502585-1370_1x13-1MP_P1.50mm_Horizontal","Connector_Molex/Molex_CLIK-Mate_502585-1470_1x14-1MP_P1.50mm_Horizontal","Connector_Molex/Molex_CLIK-Mate_502585-1570_1x15-1MP_P1.50mm_Horizontal","Connector_Molex/Molex_CLIK-Mate_505405-0270_1x02-1MP_P1.50mm_Vertical","Connector_Molex/Molex_CLIK-Mate_505405-0370_1x03-1MP_P1.50mm_Vertical","Connector_Molex/Molex_CLIK-Mate_505405-0470_1x04-1MP_P1.50mm_Vertical","Connector_Molex/Molex_CLIK-Mate_505405-0570_1x05-1MP_P1.50mm_Vertical","Connector_Molex/Molex_CLIK-Mate_505405-0670_1x06-1MP_P1.50mm_Vertical","Connector_Molex/Molex_CLIK-Mate_505405-0770_1x07-1MP_P1.50mm_Vertical","Connector_Molex/Molex_CLIK-Mate_505405-0870_1x08-1MP_P1.50mm_Vertical","Connector_Molex/Molex_CLIK-Mate_505405-0970_1x09-1MP_P1.50mm_Vertical","Connector_Molex/Molex_CLIK-Mate_505405-1070_1x10-1MP_P1.50mm_Vertical","Connector_Molex/Molex_CLIK-Mate_505405-1170_1x11-1MP_P1.50mm_Vertical","Connector_Molex/Molex_CLIK-Mate_505405-1270_1x12-1MP_P1.50mm_Vertical","Connector_Molex/Molex_CLIK-Mate_505405-1370_1x13-1MP_P1.50mm_Vertical","Connector_Molex/Molex_CLIK-Mate_505405-1470_1x14-1MP_P1.50mm_Vertical","Connector_Molex/Molex_CLIK-Mate_505405-1570_1x15-1MP_P1.50mm_Vertical","Connector_Molex/Molex_DuraClik_502352-0200_1x02-1MP_P2.00mm_Horizontal","Connector_Molex/Molex_DuraClik_502352-0300_1x03-1MP_P2.00mm_Horizontal","Connector_Molex/Molex_DuraClik_502352-0400_1x04-1MP_P2.00mm_Horizontal","Connector_Molex/Molex_DuraClik_502352-0500_1x05-1MP_P2.00mm_Horizontal","Connector_Molex/Molex_DuraClik_502352-0600_1x06-1MP_P2.00mm_Horizontal","Connector_Molex/Molex_DuraClik_502352-0700_1x07-1MP_P2.00mm_Horizontal","Connector_Molex/Molex_DuraClik_502352-0800_1x08-1MP_P2.00mm_Horizontal","Connector_Molex/Molex_DuraClik_502352-0900_1x09-1MP_P2.00mm_Horizontal","Connector_Molex/Molex_DuraClik_502352-1000_1x10-1MP_P2.00mm_Horizontal","Connector_Molex/Molex_DuraClik_502352-1100_1x11-1MP_P2.00mm_Horizontal","Connector_Molex/Molex_DuraClik_502352-1200_1x12-1MP_P2.00mm_Horizontal","Connector_Molex/Molex_DuraClik_502352-1300_1x13-1MP_P2.00mm_Horizontal","Connector_Molex/Molex_DuraClik_502352-1400_1x14-1MP_P2.00mm_Horizontal","Connector_Molex/Molex_DuraClik_502352-1500_1x15-1MP_P2.00mm_Horizontal","Connector_Molex/Molex_KK-254_AE-6410-02A_1x02_P2.54mm_Vertical","Connector_Molex/Molex_KK-254_AE-6410-03A_1x03_P2.54mm_Vertical","Connector_Molex/Molex_KK-254_AE-6410-04A_1x04_P2.54mm_Vertical","Connector_Molex/Molex_KK-254_AE-6410-05A_1x05_P2.54mm_Vertical","Connector_Molex/Molex_KK-254_AE-6410-06A_1x06_P2.54mm_Vertical","Connector_Molex/Molex_KK-254_AE-6410-07A_1x07_P2.54mm_Vertical","Connector_Molex/Molex_KK-254_AE-6410-08A_1x08_P2.54mm_Vertical","Connector_Molex/Molex_KK-254_AE-6410-09A_1x09_P2.54mm_Vertical","Connector_Molex/Molex_KK-254_AE-6410-10A_1x10_P2.54mm_Vertical","Connector_Molex/Molex_KK-254_AE-6410-11A_1x11_P2.54mm_Vertical","Connector_Molex/Molex_KK-254_AE-6410-12A_1x12_P2.54mm_Vertical","Connector_Molex/Molex_KK-254_AE-6410-13A_1x13_P2.54mm_Vertical","Connector_Molex/Molex_KK-254_AE-6410-14A_1x14_P2.54mm_Vertical","Connector_Molex/Molex_KK-254_AE-6410-15A_1x15_P2.54mm_Vertical","Connector_Molex/Molex_KK-254_AE-6410-16A_1x16_P2.54mm_Vertical","Connector_Molex/Molex_KK-396_5273-02A_1x02_P3.96mm_Vertical","Connector_Molex/Molex_KK-396_5273-03A_1x03_P3.96mm_Vertical","Connector_Molex/Molex_KK-396_5273-04A_1x04_P3.96mm_Vertical","Connector_Molex/Molex_KK-396_5273-05A_1x05_P3.96mm_Vertical","Connector_Molex/Molex_KK-396_5273-06A_1x06_P3.96mm_Vertical","Connector_Molex/Molex_KK-396_5273-07A_1x07_P3.96mm_Vertical","Connector_Molex/Molex_KK-396_5273-08A_1x08_P3.96mm_Vertical","Connector_Molex/Molex_KK-396_5273-09A_1x09_P3.96mm_Vertical","Connector_Molex/Molex_KK-396_5273-10A_1x10_P3.96mm_Vertical","Connector_Molex/Molex_KK-396_5273-11A_1x11_P3.96mm_Vertical","Connector_Molex/Molex_KK-396_5273-12A_1x12_P3.96mm_Vertical","Connector_Molex/Molex_KK-396_A-41791-0002_1x02_P3.96mm_Vertical","Connector_Molex/Molex_KK-396_A-41791-0003_1x03_P3.96mm_Vertical","Connector_Molex/Molex_KK-396_A-41791-0004_1x04_P3.96mm_Vertical","Connector_Molex/Molex_KK-396_A-41791-0005_1x05_P3.96mm_Vertical","Connector_Molex/Molex_KK-396_A-41791-0006_1x06_P3.96mm_Vertical","Connector_Molex/Molex_KK-396_A-41791-0007_1x07_P3.96mm_Vertical","Connector_Molex/Molex_KK-396_A-41791-0008_1x08_P3.96mm_Vertical","Connector_Molex/Molex_KK-396_A-41791-0009_1x09_P3.96mm_Vertical","Connector_Molex/Molex_KK-396_A-41791-0010_1x10_P3.96mm_Vertical","Connector_Molex/Molex_KK-396_A-41791-0011_1x11_P3.96mm_Vertical","Connector_Molex/Molex_KK-396_A-41791-0012_1x12_P3.96mm_Vertical","Connector_Molex/Molex_KK-396_A-41791-0013_1x13_P3.96mm_Vertical","Connector_Molex/Molex_KK-396_A-41791-0014_1x14_P3.96mm_Vertical","Connector_Molex/Molex_KK-396_A-41791-0015_1x15_P3.96mm_Vertical","Connector_Molex/Molex_KK-396_A-41791-0016_1x16_P3.96mm_Vertical","Connector_Molex/Molex_KK-396_A-41791-0017_1x17_P3.96mm_Vertical","Connector_Molex/Molex_KK-396_A-41791-0018_1x18_P3.96mm_Vertical","Connector_Molex/Molex_KK-396_A-41792-0002_1x02_P3.96mm_Horizontal","Connector_Molex/Molex_KK-396_A-41792-0003_1x03_P3.96mm_Horizontal","Connector_Molex/Molex_KK-396_A-41792-0004_1x04_P3.96mm_Horizontal","Connector_Molex/Molex_KK-396_A-41792-0005_1x05_P3.96mm_Horizontal","Connector_Molex/Molex_KK-396_A-41792-0006_1x06_P3.96mm_Horizontal","Connector_Molex/Molex_KK-396_A-41792-0007_1x07_P3.96mm_Horizontal","Connector_Molex/Molex_KK-396_A-41792-0008_1x08_P3.96mm_Horizontal","Connector_Molex/Molex_KK-396_A-41792-0009_1x09_P3.96mm_Horizontal","Connector_Molex/Molex_KK-396_A-41792-0010_1x10_P3.96mm_Horizontal","Connector_Molex/Molex_KK-396_A-41792-0011_1x11_P3.96mm_Horizontal","Connector_Molex/Molex_KK-396_A-41792-0012_1x12_P3.96mm_Horizontal","Connector_Molex/Molex_KK-396_A-41792-0013_1x13_P3.96mm_Horizontal","Connector_Molex/Molex_KK-396_A-41792-0014_1x14_P3.96mm_Horizontal","Connector_Molex/Molex_KK-396_A-41792-0015_1x15_P3.96mm_Horizontal","Connector_Molex/Molex_KK-396_A-41792-0016_1x16_P3.96mm_Horizontal","Connector_Molex/Molex_KK-396_A-41792-0017_1x17_P3.96mm_Horizontal","Connector_Molex/Molex_KK-396_A-41792-0018_1x18_P3.96mm_Horizontal","Connector_Molex/Molex_Mega-Fit_76825-0002_2x01_P5.70mm_Horizontal","Connector_Molex/Molex_Mega-Fit_76825-0004_2x02_P5.70mm_Horizontal","Connector_Molex/Molex_Mega-Fit_76825-0006_2x03_P5.70mm_Horizontal","Connector_Molex/Molex_Mega-Fit_76825-0008_2x04_P5.70mm_Horizontal","Connector_Molex/Molex_Mega-Fit_76825-0010_2x05_P5.70mm_Horizontal","Connector_Molex/Molex_Mega-Fit_76825-0012_2x06_P5.70mm_Horizontal","Connector_Molex/Molex_Mega-Fit_76829-0002_2x01_P5.70mm_Vertical","Connector_Molex/Molex_Mega-Fit_76829-0004_2x02_P5.70mm_Vertical","Connector_Molex/Molex_Mega-Fit_76829-0006_2x03_P5.70mm_Vertical","Connector_Molex/Molex_Mega-Fit_76829-0008_2x04_P5.70mm_Vertical","Connector_Molex/Molex_Mega-Fit_76829-0010_2x05_P5.70mm_Vertical","Connector_Molex/Molex_Mega-Fit_76829-0012_2x06_P5.70mm_Vertical","Connector_Molex/Molex_Mega-Fit_76829-0102_2x01_P5.70mm_Vertical","Connector_Molex/Molex_Mega-Fit_76829-0104_2x02_P5.70mm_Vertical","Connector_Molex/Molex_Mega-Fit_76829-0106_2x03_P5.70mm_Vertical","Connector_Molex/Molex_Mega-Fit_76829-0108_2x04_P5.70mm_Vertical","Connector_Molex/Molex_Mega-Fit_76829-0110_2x05_P5.70mm_Vertical","Connector_Molex/Molex_Mega-Fit_76829-0112_2x06_P5.70mm_Vertical","Connector_Molex/Molex_Micro-Fit_3.0_43045-0200_2x01_P3.00mm_Horizontal","Connector_Molex/Molex_Micro-Fit_3.0_43045-0210_2x01-1MP_P3.00mm_Horizontal","Connector_Molex/Molex_Micro-Fit_3.0_43045-0212_2x01_P3.00mm_Vertical","Connector_Molex/Molex_Micro-Fit_3.0_43045-0215_2x01_P3.00mm_Vertical","Connector_Molex/Molex_Micro-Fit_3.0_43045-0218_2x01-1MP_P3.00mm_Vertical","Connector_Molex/Molex_Micro-Fit_3.0_43045-0221_2x01-1MP_P3.00mm_Horizontal","Connector_Molex/Molex_Micro-Fit_3.0_43045-0400_2x02_P3.00mm_Horizontal","Connector_Molex/Molex_Micro-Fit_3.0_43045-0410_2x02-1MP_P3.00mm_Horizontal","Connector_Molex/Molex_Micro-Fit_3.0_43045-0412_2x02_P3.00mm_Vertical","Connector_Molex/Molex_Micro-Fit_3.0_43045-0415_2x02_P3.00mm_Vertical","Connector_Molex/Molex_Micro-Fit_3.0_43045-0418_2x02-1MP_P3.00mm_Vertical","Connector_Molex/Molex_Micro-Fit_3.0_43045-0421_2x02-1MP_P3.00mm_Horizontal","Connector_Molex/Molex_Micro-Fit_3.0_43045-0600_2x03_P3.00mm_Horizontal","Connector_Molex/Molex_Micro-Fit_3.0_43045-0610_2x03-1MP_P3.00mm_Horizontal","Connector_Molex/Molex_Micro-Fit_3.0_43045-0612_2x03_P3.00mm_Vertical","Connector_Molex/Molex_Micro-Fit_3.0_43045-0615_2x03_P3.00mm_Vertical","Connector_Molex/Molex_Micro-Fit_3.0_43045-0618_2x03-1MP_P3.00mm_Vertical","Connector_Molex/Molex_Micro-Fit_3.0_43045-0621_2x03-1MP_P3.00mm_Horizontal","Connector_Molex/Molex_Micro-Fit_3.0_43045-0800_2x04_P3.00mm_Horizontal","Connector_Molex/Molex_Micro-Fit_3.0_43045-0810_2x04-1MP_P3.00mm_Horizontal","Connector_Molex/Molex_Micro-Fit_3.0_43045-0812_2x04_P3.00mm_Vertical","Connector_Molex/Molex_Micro-Fit_3.0_43045-0815_2x04_P3.00mm_Vertical","Connector_Molex/Molex_Micro-Fit_3.0_43045-0818_2x04-1MP_P3.00mm_Vertical","Connector_Molex/Molex_Micro-Fit_3.0_43045-0821_2x04-1MP_P3.00mm_Horizontal","Connector_Molex/Molex_Micro-Fit_3.0_43045-1000_2x05_P3.00mm_Horizontal","Connector_Molex/Molex_Micro-Fit_3.0_43045-1010_2x05-1MP_P3.00mm_Horizontal","Connector_Molex/Molex_Micro-Fit_3.0_43045-1012_2x05_P3.00mm_Vertical","Connector_Molex/Molex_Micro-Fit_3.0_43045-1015_2x05_P3.00mm_Vertical","Connector_Molex/Molex_Micro-Fit_3.0_43045-1018_2x05-1MP_P3.00mm_Vertical","Connector_Molex/Molex_Micro-Fit_3.0_43045-1021_2x05-1MP_P3.00mm_Horizontal","Connector_Molex/Molex_Micro-Fit_3.0_43045-1200_2x06_P3.00mm_Horizontal","Connector_Molex/Molex_Micro-Fit_3.0_43045-1210_2x06-1MP_P3.00mm_Horizontal","Connector_Molex/Molex_Micro-Fit_3.0_43045-1212_2x06_P3.00mm_Vertical","Connector_Molex/Molex_Micro-Fit_3.0_43045-1215_2x06_P3.00mm_Vertical","Connector_Molex/Molex_Micro-Fit_3.0_43045-1218_2x06-1MP_P3.00mm_Vertical","Connector_Molex/Molex_Micro-Fit_3.0_43045-1221_2x06-1MP_P3.00mm_Horizontal","Connector_Molex/Molex_Micro-Fit_3.0_43045-1400_2x07_P3.00mm_Horizontal","Connector_Molex/Molex_Micro-Fit_3.0_43045-1410_2x07-1MP_P3.00mm_Horizontal","Connector_Molex/Molex_Micro-Fit_3.0_43045-1412_2x07_P3.00mm_Vertical","Connector_Molex/Molex_Micro-Fit_3.0_43045-1415_2x07_P3.00mm_Vertical","Connector_Molex/Molex_Micro-Fit_3.0_43045-1418_2x07-1MP_P3.00mm_Vertical","Connector_Molex/Molex_Micro-Fit_3.0_43045-1421_2x07-1MP_P3.00mm_Horizontal","Connector_Molex/Molex_Micro-Fit_3.0_43045-1600_2x08_P3.00mm_Horizontal","Connector_Molex/Molex_Micro-Fit_3.0_43045-1610_2x08-1MP_P3.00mm_Horizontal","Connector_Molex/Molex_Micro-Fit_3.0_43045-1612_2x08_P3.00mm_Vertical","Connector_Molex/Molex_Micro-Fit_3.0_43045-1615_2x08_P3.00mm_Vertical","Connector_Molex/Molex_Micro-Fit_3.0_43045-1618_2x08-1MP_P3.00mm_Vertical","Connector_Molex/Molex_Micro-Fit_3.0_43045-1621_2x08-1MP_P3.00mm_Horizontal","Connector_Molex/Molex_Micro-Fit_3.0_43045-1800_2x09_P3.00mm_Horizontal","Connector_Molex/Molex_Micro-Fit_3.0_43045-1810_2x09-1MP_P3.00mm_Horizontal","Connector_Molex/Molex_Micro-Fit_3.0_43045-1812_2x09_P3.00mm_Vertical","Connector_Molex/Molex_Micro-Fit_3.0_43045-1815_2x09_P3.00mm_Vertical","Connector_Molex/Molex_Micro-Fit_3.0_43045-1818_2x09-1MP_P3.00mm_Vertical","Connector_Molex/Molex_Micro-Fit_3.0_43045-1821_2x09-1MP_P3.00mm_Horizontal","Connector_Molex/Molex_Micro-Fit_3.0_43045-2000_2x10_P3.00mm_Horizontal","Connector_Molex/Molex_Micro-Fit_3.0_43045-2010_2x10-1MP_P3.00mm_Horizontal","Connector_Molex/Molex_Micro-Fit_3.0_43045-2012_2x10_P3.00mm_Vertical","Connector_Molex/Molex_Micro-Fit_3.0_43045-2015_2x10_P3.00mm_Vertical","Connector_Molex/Molex_Micro-Fit_3.0_43045-2018_2x10-1MP_P3.00mm_Vertical","Connector_Molex/Molex_Micro-Fit_3.0_43045-2021_2x10-1MP_P3.00mm_Horizontal","Connector_Molex/Molex_Micro-Fit_3.0_43045-2200_2x11_P3.00mm_Horizontal","Connector_Molex/Molex_Micro-Fit_3.0_43045-2210_2x11-1MP_P3.00mm_Horizontal","Connector_Molex/Molex_Micro-Fit_3.0_43045-2212_2x11_P3.00mm_Vertical","Connector_Molex/Molex_Micro-Fit_3.0_43045-2215_2x11_P3.00mm_Vertical","Connector_Molex/Molex_Micro-Fit_3.0_43045-2218_2x11-1MP_P3.00mm_Vertical","Connector_Molex/Molex_Micro-Fit_3.0_43045-2221_2x11-1MP_P3.00mm_Horizontal","Connector_Molex/Molex_Micro-Fit_3.0_43045-2400_2x12_P3.00mm_Horizontal","Connector_Molex/Molex_Micro-Fit_3.0_43045-2410_2x12-1MP_P3.00mm_Horizontal","Connector_Molex/Molex_Micro-Fit_3.0_43045-2412_2x12_P3.00mm_Vertical","Connector_Molex/Molex_Micro-Fit_3.0_43045-2415_2x12_P3.00mm_Vertical","Connector_Molex/Molex_Micro-Fit_3.0_43045-2418_2x12-1MP_P3.00mm_Vertical","Connector_Molex/Molex_Micro-Fit_3.0_43045-2421_2x12-1MP_P3.00mm_Horizontal","Connector_Molex/Molex_Micro-Fit_3.0_43650-0200_1x02_P3.00mm_Horizontal","Connector_Molex/Molex_Micro-Fit_3.0_43650-0210_1x02-1MP_P3.00mm_Horizontal","Connector_Molex/Molex_Micro-Fit_3.0_43650-0210_1x02-1MP_P3.00mm_Horizontal_PnP","Connector_Molex/Molex_Micro-Fit_3.0_43650-0212_1x02-1MP_P3.00mm_Horizontal","Connector_Molex/Molex_Micro-Fit_3.0_43650-0215_1x02_P3.00mm_Vertical","Connector_Molex/Molex_Micro-Fit_3.0_43650-0221_1x02_P3.00mm_Vertical","Connector_Molex/Molex_Micro-Fit_3.0_43650-0224_1x02-1MP_P3.00mm_Vertical","Connector_Molex/Molex_Micro-Fit_3.0_43650-0300_1x03_P3.00mm_Horizontal","Connector_Molex/Molex_Micro-Fit_3.0_43650-0310_1x03-1MP_P3.00mm_Horizontal","Connector_Molex/Molex_Micro-Fit_3.0_43650-0310_1x03-1MP_P3.00mm_Horizontal_PnP","Connector_Molex/Molex_Micro-Fit_3.0_43650-0312_1x03-1MP_P3.00mm_Horizontal","Connector_Molex/Molex_Micro-Fit_3.0_43650-0315_1x03_P3.00mm_Vertical","Connector_Molex/Molex_Micro-Fit_3.0_43650-0321_1x03_P3.00mm_Vertical","Connector_Molex/Molex_Micro-Fit_3.0_43650-0324_1x03-1MP_P3.00mm_Vertical","Connector_Molex/Molex_Micro-Fit_3.0_43650-0400_1x04_P3.00mm_Horizontal","Connector_Molex/Molex_Micro-Fit_3.0_43650-0410_1x04-1MP_P3.00mm_Horizontal","Connector_Molex/Molex_Micro-Fit_3.0_43650-0410_1x04-1MP_P3.00mm_Horizontal_PnP","Connector_Molex/Molex_Micro-Fit_3.0_43650-0412_1x04-1MP_P3.00mm_Horizontal","Connector_Molex/Molex_Micro-Fit_3.0_43650-0415_1x04_P3.00mm_Vertical","Connector_Molex/Molex_Micro-Fit_3.0_43650-0421_1x04_P3.00mm_Vertical","Connector_Molex/Molex_Micro-Fit_3.0_43650-0424_1x04-1MP_P3.00mm_Vertical","Connector_Molex/Molex_Micro-Fit_3.0_43650-0500_1x05_P3.00mm_Horizontal","Connector_Molex/Molex_Micro-Fit_3.0_43650-0510_1x05-1MP_P3.00mm_Horizontal","Connector_Molex/Molex_Micro-Fit_3.0_43650-0510_1x05-1MP_P3.00mm_Horizontal_PnP","Connector_Molex/Molex_Micro-Fit_3.0_43650-0512_1x05-1MP_P3.00mm_Horizontal","Connector_Molex/Molex_Micro-Fit_3.0_43650-0515_1x05_P3.00mm_Vertical","Connector_Molex/Molex_Micro-Fit_3.0_43650-0521_1x05_P3.00mm_Vertical","Connector_Molex/Molex_Micro-Fit_3.0_43650-0524_1x05-1MP_P3.00mm_Vertical","Connector_Molex/Molex_Micro-Fit_3.0_43650-0600_1x06_P3.00mm_Horizontal","Connector_Molex/Molex_Micro-Fit_3.0_43650-0610_1x06-1MP_P3.00mm_Horizontal","Connector_Molex/Molex_Micro-Fit_3.0_43650-0610_1x06-1MP_P3.00mm_Horizontal_PnP","Connector_Molex/Molex_Micro-Fit_3.0_43650-0612_1x06-1MP_P3.00mm_Horizontal","Connector_Molex/Molex_Micro-Fit_3.0_43650-0615_1x06_P3.00mm_Vertical","Connector_Molex/Molex_Micro-Fit_3.0_43650-0621_1x06_P3.00mm_Vertical","Connector_Molex/Molex_Micro-Fit_3.0_43650-0624_1x06-1MP_P3.00mm_Vertical","Connector_Molex/Molex_Micro-Fit_3.0_43650-0700_1x07_P3.00mm_Horizontal","Connector_Molex/Molex_Micro-Fit_3.0_43650-0710_1x07-1MP_P3.00mm_Horizontal","Connector_Molex/Molex_Micro-Fit_3.0_43650-0710_1x07-1MP_P3.00mm_Horizontal_PnP","Connector_Molex/Molex_Micro-Fit_3.0_43650-0712_1x07-1MP_P3.00mm_Horizontal","Connector_Molex/Molex_Micro-Fit_3.0_43650-0715_1x07_P3.00mm_Vertical","Connector_Molex/Molex_Micro-Fit_3.0_43650-0721_1x07_P3.00mm_Vertical","Connector_Molex/Molex_Micro-Fit_3.0_43650-0724_1x07-1MP_P3.00mm_Vertical","Connector_Molex/Molex_Micro-Fit_3.0_43650-0800_1x08_P3.00mm_Horizontal","Connector_Molex/Molex_Micro-Fit_3.0_43650-0810_1x08-1MP_P3.00mm_Horizontal","Connector_Molex/Molex_Micro-Fit_3.0_43650-0810_1x08-1MP_P3.00mm_Horizontal_PnP","Connector_Molex/Molex_Micro-Fit_3.0_43650-0812_1x08-1MP_P3.00mm_Horizontal","Connector_Molex/Molex_Micro-Fit_3.0_43650-0815_1x08_P3.00mm_Vertical","Connector_Molex/Molex_Micro-Fit_3.0_43650-0821_1x08_P3.00mm_Vertical","Connector_Molex/Molex_Micro-Fit_3.0_43650-0824_1x08-1MP_P3.00mm_Vertical","Connector_Molex/Molex_Micro-Fit_3.0_43650-0900_1x09_P3.00mm_Horizontal","Connector_Molex/Molex_Micro-Fit_3.0_43650-0910_1x09-1MP_P3.00mm_Horizontal","Connector_Molex/Molex_Micro-Fit_3.0_43650-0910_1x09-1MP_P3.00mm_Horizontal_PnP","Connector_Molex/Molex_Micro-Fit_3.0_43650-0912_1x09-1MP_P3.00mm_Horizontal","Connector_Molex/Molex_Micro-Fit_3.0_43650-0915_1x09_P3.00mm_Vertical","Connector_Molex/Molex_Micro-Fit_3.0_43650-0921_1x09_P3.00mm_Vertical","Connector_Molex/Molex_Micro-Fit_3.0_43650-0924_1x09-1MP_P3.00mm_Vertical","Connector_Molex/Molex_Micro-Fit_3.0_43650-1000_1x10_P3.00mm_Horizontal","Connector_Molex/Molex_Micro-Fit_3.0_43650-1010_1x10-1MP_P3.00mm_Horizontal","Connector_Molex/Molex_Micro-Fit_3.0_43650-1010_1x10-1MP_P3.00mm_Horizontal_PnP","Connector_Molex/Molex_Micro-Fit_3.0_43650-1012_1x10-1MP_P3.00mm_Horizontal","Connector_Molex/Molex_Micro-Fit_3.0_43650-1015_1x10_P3.00mm_Vertical","Connector_Molex/Molex_Micro-Fit_3.0_43650-1021_1x10_P3.00mm_Vertical","Connector_Molex/Molex_Micro-Fit_3.0_43650-1024_1x10-1MP_P3.00mm_Vertical","Connector_Molex/Molex_Micro-Fit_3.0_43650-1100_1x11_P3.00mm_Horizontal","Connector_Molex/Molex_Micro-Fit_3.0_43650-1110_1x11-1MP_P3.00mm_Horizontal","Connector_Molex/Molex_Micro-Fit_3.0_43650-1110_1x11-1MP_P3.00mm_Horizontal_PnP","Connector_Molex/Molex_Micro-Fit_3.0_43650-1112_1x11-1MP_P3.00mm_Horizontal","Connector_Molex/Molex_Micro-Fit_3.0_43650-1115_1x11_P3.00mm_Vertical","Connector_Molex/Molex_Micro-Fit_3.0_43650-1121_1x11_P3.00mm_Vertical","Connector_Molex/Molex_Micro-Fit_3.0_43650-1124_1x11-1MP_P3.00mm_Vertical","Connector_Molex/Molex_Micro-Fit_3.0_43650-1200_1x12_P3.00mm_Horizontal","Connector_Molex/Molex_Micro-Fit_3.0_43650-1210_1x12-1MP_P3.00mm_Horizontal","Connector_Molex/Molex_Micro-Fit_3.0_43650-1210_1x12-1MP_P3.00mm_Horizontal_PnP","Connector_Molex/Molex_Micro-Fit_3.0_43650-1212_1x12-1MP_P3.00mm_Horizontal","Connector_Molex/Molex_Micro-Fit_3.0_43650-1215_1x12_P3.00mm_Vertical","Connector_Molex/Molex_Micro-Fit_3.0_43650-1221_1x12_P3.00mm_Vertical","Connector_Molex/Molex_Micro-Fit_3.0_43650-1224_1x12-1MP_P3.00mm_Vertical","Connector_Molex/Molex_Micro-Latch_53253-0270_1x02_P2.00mm_Vertical","Connector_Molex/Molex_Micro-Latch_53253-0370_1x03_P2.00mm_Vertical","Connector_Molex/Molex_Micro-Latch_53253-0470_1x04_P2.00mm_Vertical","Connector_Molex/Molex_Micro-Latch_53253-0570_1x05_P2.00mm_Vertical","Connector_Molex/Molex_Micro-Latch_53253-0670_1x06_P2.00mm_Vertical","Connector_Molex/Molex_Micro-Latch_53253-0770_1x07_P2.00mm_Vertical","Connector_Molex/Molex_Micro-Latch_53253-0870_1x08_P2.00mm_Vertical","Connector_Molex/Molex_Micro-Latch_53253-0970_1x09_P2.00mm_Vertical","Connector_Molex/Molex_Micro-Latch_53253-1070_1x10_P2.00mm_Vertical","Connector_Molex/Molex_Micro-Latch_53253-1170_1x11_P2.00mm_Vertical","Connector_Molex/Molex_Micro-Latch_53253-1270_1x12_P2.00mm_Vertical","Connector_Molex/Molex_Micro-Latch_53253-1370_1x13_P2.00mm_Vertical","Connector_Molex/Molex_Micro-Latch_53253-1470_1x14_P2.00mm_Vertical","Connector_Molex/Molex_Micro-Latch_53253-1570_1x15_P2.00mm_Vertical","Connector_Molex/Molex_Micro-Latch_53254-0270_1x02_P2.00mm_Horizontal","Connector_Molex/Molex_Micro-Latch_53254-0370_1x03_P2.00mm_Horizontal","Connector_Molex/Molex_Micro-Latch_53254-0470_1x04_P2.00mm_Horizontal","Connector_Molex/Molex_Micro-Latch_53254-0570_1x05_P2.00mm_Horizontal","Connector_Molex/Molex_Micro-Latch_53254-0670_1x06_P2.00mm_Horizontal","Connector_Molex/Molex_Micro-Latch_53254-0770_1x07_P2.00mm_Horizontal","Connector_Molex/Molex_Micro-Latch_53254-0870_1x08_P2.00mm_Horizontal","Connector_Molex/Molex_Micro-Latch_53254-0970_1x09_P2.00mm_Horizontal","Connector_Molex/Molex_Micro-Latch_53254-1070_1x10_P2.00mm_Horizontal","Connector_Molex/Molex_Micro-Latch_53254-1170_1x11_P2.00mm_Horizontal","Connector_Molex/Molex_Micro-Latch_53254-1270_1x12_P2.00mm_Horizontal","Connector_Molex/Molex_Micro-Latch_53254-1370_1x13_P2.00mm_Horizontal","Connector_Molex/Molex_Micro-Latch_53254-1470_1x14_P2.00mm_Horizontal","Connector_Molex/Molex_Micro-Latch_53254-1570_1x15_P2.00mm_Horizontal","Connector_Molex/Molex_MicroClasp_55932-0210_1x02_P2.00mm_Vertical","Connector_Molex/Molex_MicroClasp_55932-0230_1x02_P2.00mm_Vertical","Connector_Molex/Molex_MicroClasp_55932-0310_1x03_P2.00mm_Vertical","Connector_Molex/Molex_MicroClasp_55932-0330_1x03_P2.00mm_Vertical","Connector_Molex/Molex_MicroClasp_55932-0410_1x04_P2.00mm_Vertical","Connector_Molex/Molex_MicroClasp_55932-0430_1x04_P2.00mm_Vertical","Connector_Molex/Molex_MicroClasp_55932-0510_1x05_P2.00mm_Vertical","Connector_Molex/Molex_MicroClasp_55932-0530_1x05_P2.00mm_Vertical","Connector_Molex/Molex_MicroClasp_55932-0610_1x06_P2.00mm_Vertical","Connector_Molex/Molex_MicroClasp_55932-0630_1x06_P2.00mm_Vertical","Connector_Molex/Molex_MicroClasp_55932-0710_1x07_P2.00mm_Vertical","Connector_Molex/Molex_MicroClasp_55932-0730_1x07_P2.00mm_Vertical","Connector_Molex/Molex_MicroClasp_55932-0810_1x08_P2.00mm_Vertical","Connector_Molex/Molex_MicroClasp_55932-0830_1x08_P2.00mm_Vertical","Connector_Molex/Molex_MicroClasp_55932-0910_1x09_P2.00mm_Vertical","Connector_Molex/Molex_MicroClasp_55932-0930_1x09_P2.00mm_Vertical","Connector_Molex/Molex_MicroClasp_55932-1010_1x10_P2.00mm_Vertical","Connector_Molex/Molex_MicroClasp_55932-1030_1x10_P2.00mm_Vertical","Connector_Molex/Molex_MicroClasp_55932-1110_1x11_P2.00mm_Vertical","Connector_Molex/Molex_MicroClasp_55932-1130_1x11_P2.00mm_Vertical","Connector_Molex/Molex_MicroClasp_55932-1210_1x12_P2.00mm_Vertical","Connector_Molex/Molex_MicroClasp_55932-1230_1x12_P2.00mm_Vertical","Connector_Molex/Molex_MicroClasp_55932-1310_1x13_P2.00mm_Vertical","Connector_Molex/Molex_MicroClasp_55932-1330_1x13_P2.00mm_Vertical","Connector_Molex/Molex_MicroClasp_55932-1410_1x14_P2.00mm_Vertical","Connector_Molex/Molex_MicroClasp_55932-1430_1x14_P2.00mm_Vertical","Connector_Molex/Molex_MicroClasp_55932-1510_1x15_P2.00mm_Vertical","Connector_Molex/Molex_MicroClasp_55932-1530_1x15_P2.00mm_Vertical","Connector_Molex/Molex_MicroClasp_55935-0210_1x02_P2.00mm_Horizontal","Connector_Molex/Molex_MicroClasp_55935-0230_1x02_P2.00mm_Horizontal","Connector_Molex/Molex_MicroClasp_55935-0310_1x03_P2.00mm_Horizontal","Connector_Molex/Molex_MicroClasp_55935-0330_1x03_P2.00mm_Horizontal","Connector_Molex/Molex_MicroClasp_55935-0410_1x04_P2.00mm_Horizontal","Connector_Molex/Molex_MicroClasp_55935-0430_1x04_P2.00mm_Horizontal","Connector_Molex/Molex_MicroClasp_55935-0510_1x05_P2.00mm_Horizontal","Connector_Molex/Molex_MicroClasp_55935-0530_1x05_P2.00mm_Horizontal","Connector_Molex/Molex_MicroClasp_55935-0610_1x06_P2.00mm_Horizontal","Connector_Molex/Molex_MicroClasp_55935-0630_1x06_P2.00mm_Horizontal","Connector_Molex/Molex_MicroClasp_55935-0710_1x07_P2.00mm_Horizontal","Connector_Molex/Molex_MicroClasp_55935-0730_1x07_P2.00mm_Horizontal","Connector_Molex/Molex_MicroClasp_55935-0810_1x08_P2.00mm_Horizontal","Connector_Molex/Molex_MicroClasp_55935-0830_1x08_P2.00mm_Horizontal","Connector_Molex/Molex_MicroClasp_55935-0910_1x09_P2.00mm_Horizontal","Connector_Molex/Molex_MicroClasp_55935-0930_1x09_P2.00mm_Horizontal","Connector_Molex/Molex_MicroClasp_55935-1010_1x10_P2.00mm_Horizontal","Connector_Molex/Molex_MicroClasp_55935-1030_1x10_P2.00mm_Horizontal","Connector_Molex/Molex_MicroClasp_55935-1110_1x11_P2.00mm_Horizontal","Connector_Molex/Molex_MicroClasp_55935-1130_1x11_P2.00mm_Horizontal","Connector_Molex/Molex_MicroClasp_55935-1210_1x12_P2.00mm_Horizontal","Connector_Molex/Molex_MicroClasp_55935-1230_1x12_P2.00mm_Horizontal","Connector_Molex/Molex_MicroClasp_55935-1310_1x13_P2.00mm_Horizontal","Connector_Molex/Molex_MicroClasp_55935-1330_1x13_P2.00mm_Horizontal","Connector_Molex/Molex_MicroClasp_55935-1410_1x14_P2.00mm_Horizontal","Connector_Molex/Molex_MicroClasp_55935-1430_1x14_P2.00mm_Horizontal","Connector_Molex/Molex_MicroClasp_55935-1510_1x15_P2.00mm_Horizontal","Connector_Molex/Molex_MicroClasp_55935-1530_1x15_P2.00mm_Horizontal","Connector_Molex/Molex_Mini-Fit_Jr_5566-02A2_2x01_P4.20mm_Vertical","Connector_Molex/Molex_Mini-Fit_Jr_5566-02A_2x01_P4.20mm_Vertical","Connector_Molex/Molex_Mini-Fit_Jr_5566-04A2_2x02_P4.20mm_Vertical","Connector_Molex/Molex_Mini-Fit_Jr_5566-04A_2x02_P4.20mm_Vertical","Connector_Molex/Molex_Mini-Fit_Jr_5566-06A2_2x03_P4.20mm_Vertical","Connector_Molex/Molex_Mini-Fit_Jr_5566-06A_2x03_P4.20mm_Vertical","Connector_Molex/Molex_Mini-Fit_Jr_5566-08A2_2x04_P4.20mm_Vertical","Connector_Molex/Molex_Mini-Fit_Jr_5566-08A_2x04_P4.20mm_Vertical","Connector_Molex/Molex_Mini-Fit_Jr_5566-10A2_2x05_P4.20mm_Vertical","Connector_Molex/Molex_Mini-Fit_Jr_5566-10A_2x05_P4.20mm_Vertical","Connector_Molex/Molex_Mini-Fit_Jr_5566-12A2_2x06_P4.20mm_Vertical","Connector_Molex/Molex_Mini-Fit_Jr_5566-12A_2x06_P4.20mm_Vertical","Connector_Molex/Molex_Mini-Fit_Jr_5566-14A2_2x07_P4.20mm_Vertical","Connector_Molex/Molex_Mini-Fit_Jr_5566-14A_2x07_P4.20mm_Vertical","Connector_Molex/Molex_Mini-Fit_Jr_5566-16A2_2x08_P4.20mm_Vertical","Connector_Molex/Molex_Mini-Fit_Jr_5566-16A_2x08_P4.20mm_Vertical","Connector_Molex/Molex_Mini-Fit_Jr_5566-18A2_2x09_P4.20mm_Vertical","Connector_Molex/Molex_Mini-Fit_Jr_5566-18A_2x09_P4.20mm_Vertical","Connector_Molex/Molex_Mini-Fit_Jr_5566-20A2_2x10_P4.20mm_Vertical","Connector_Molex/Molex_Mini-Fit_Jr_5566-20A_2x10_P4.20mm_Vertical","Connector_Molex/Molex_Mini-Fit_Jr_5566-22A2_2x11_P4.20mm_Vertical","Connector_Molex/Molex_Mini-Fit_Jr_5566-22A_2x11_P4.20mm_Vertical","Connector_Molex/Molex_Mini-Fit_Jr_5566-24A2_2x12_P4.20mm_Vertical","Connector_Molex/Molex_Mini-Fit_Jr_5566-24A_2x12_P4.20mm_Vertical","Connector_Molex/Molex_Mini-Fit_Jr_5569-02A1_2x01_P4.20mm_Horizontal","Connector_Molex/Molex_Mini-Fit_Jr_5569-02A2_2x01_P4.20mm_Horizontal","Connector_Molex/Molex_Mini-Fit_Jr_5569-04A1_2x02_P4.20mm_Horizontal","Connector_Molex/Molex_Mini-Fit_Jr_5569-04A2_2x02_P4.20mm_Horizontal","Connector_Molex/Molex_Mini-Fit_Jr_5569-06A1_2x03_P4.20mm_Horizontal","Connector_Molex/Molex_Mini-Fit_Jr_5569-06A2_2x03_P4.20mm_Horizontal","Connector_Molex/Molex_Mini-Fit_Jr_5569-08A1_2x04_P4.20mm_Horizontal","Connector_Molex/Molex_Mini-Fit_Jr_5569-08A2_2x04_P4.20mm_Horizontal","Connector_Molex/Molex_Mini-Fit_Jr_5569-10A1_2x05_P4.20mm_Horizontal","Connector_Molex/Molex_Mini-Fit_Jr_5569-10A2_2x05_P4.20mm_Horizontal","Connector_Molex/Molex_Mini-Fit_Jr_5569-12A1_2x06_P4.20mm_Horizontal","Connector_Molex/Molex_Mini-Fit_Jr_5569-12A2_2x06_P4.20mm_Horizontal","Connector_Molex/Molex_Mini-Fit_Jr_5569-14A1_2x07_P4.20mm_Horizontal","Connector_Molex/Molex_Mini-Fit_Jr_5569-14A2_2x07_P4.20mm_Horizontal","Connector_Molex/Molex_Mini-Fit_Jr_5569-16A1_2x08_P4.20mm_Horizontal","Connector_Molex/Molex_Mini-Fit_Jr_5569-16A2_2x08_P4.20mm_Horizontal","Connector_Molex/Molex_Mini-Fit_Jr_5569-18A1_2x09_P4.20mm_Horizontal","Connector_Molex/Molex_Mini-Fit_Jr_5569-18A2_2x09_P4.20mm_Horizontal","Connector_Molex/Molex_Mini-Fit_Jr_5569-20A1_2x10_P4.20mm_Horizontal","Connector_Molex/Molex_Mini-Fit_Jr_5569-20A2_2x10_P4.20mm_Horizontal","Connector_Molex/Molex_Mini-Fit_Jr_5569-22A1_2x11_P4.20mm_Horizontal","Connector_Molex/Molex_Mini-Fit_Jr_5569-22A2_2x11_P4.20mm_Horizontal","Connector_Molex/Molex_Mini-Fit_Jr_5569-24A1_2x12_P4.20mm_Horizontal","Connector_Molex/Molex_Mini-Fit_Jr_5569-24A2_2x12_P4.20mm_Horizontal","Connector_Molex/Molex_Mini-Fit_Sr_42819-22XX_1x02_P10.00mm_Vertical","Connector_Molex/Molex_Mini-Fit_Sr_42819-22XX_1x02_P10.00mm_Vertical_ThermalVias","Connector_Molex/Molex_Mini-Fit_Sr_42819-32XX_1x03_P10.00mm_Vertical","Connector_Molex/Molex_Mini-Fit_Sr_42819-32XX_1x03_P10.00mm_Vertical_ThermalVias","Connector_Molex/Molex_Mini-Fit_Sr_42819-42XX_1x04_P10.00mm_Vertical","Connector_Molex/Molex_Mini-Fit_Sr_42819-42XX_1x04_P10.00mm_Vertical_ThermalVias","Connector_Molex/Molex_Mini-Fit_Sr_42819-52XX_1x05_P10.00mm_Vertical","Connector_Molex/Molex_Mini-Fit_Sr_42819-52XX_1x05_P10.00mm_Vertical_ThermalVias","Connector_Molex/Molex_Mini-Fit_Sr_42819-62XX_1x06_P10.00mm_Vertical","Connector_Molex/Molex_Mini-Fit_Sr_42819-62XX_1x06_P10.00mm_Vertical_ThermalVias","Connector_Molex/Molex_Mini-Fit_Sr_42820-22XX_1x02_P10.00mm_Horizontal","Connector_Molex/Molex_Mini-Fit_Sr_42820-22XX_1x02_P10.00mm_Horizontal_ThermalVias","Connector_Molex/Molex_Mini-Fit_Sr_42820-32XX_1x03_P10.00mm_Horizontal","Connector_Molex/Molex_Mini-Fit_Sr_42820-32XX_1x03_P10.00mm_Horizontal_ThermalVias","Connector_Molex/Molex_Mini-Fit_Sr_42820-42XX_1x04_P10.00mm_Horizontal","Connector_Molex/Molex_Mini-Fit_Sr_42820-42XX_1x04_P10.00mm_Horizontal_ThermalVias","Connector_Molex/Molex_Mini-Fit_Sr_42820-52XX_1x05_P10.00mm_Horizontal","Connector_Molex/Molex_Mini-Fit_Sr_42820-52XX_1x05_P10.00mm_Horizontal_ThermalVias","Connector_Molex/Molex_Mini-Fit_Sr_42820-62XX_1x06_P10.00mm_Horizontal","Connector_Molex/Molex_Mini-Fit_Sr_42820-62XX_1x06_P10.00mm_Horizontal_ThermalVias","Connector_Molex/Molex_Mini-Fit_Sr_43915-xx06_2x03_P10.00mm_Vertical","Connector_Molex/Molex_Mini-Fit_Sr_43915-xx06_2x03_P10.00mm_Vertical_ThermalVias","Connector_Molex/Molex_Mini-Fit_Sr_43915-xx08_2x04_P10.00mm_Vertical","Connector_Molex/Molex_Mini-Fit_Sr_43915-xx08_2x04_P10.00mm_Vertical_ThermalVias","Connector_Molex/Molex_Mini-Fit_Sr_43915-xx10_2x05_P10.00mm_Vertical","Connector_Molex/Molex_Mini-Fit_Sr_43915-xx10_2x05_P10.00mm_Vertical_ThermalVias","Connector_Molex/Molex_Mini-Fit_Sr_43915-xx12_2x06_P10.00mm_Vertical","Connector_Molex/Molex_Mini-Fit_Sr_43915-xx12_2x06_P10.00mm_Vertical_ThermalVias","Connector_Molex/Molex_Mini-Fit_Sr_43915-xx14_2x07_P10.00mm_Vertical","Connector_Molex/Molex_Mini-Fit_Sr_43915-xx14_2x07_P10.00mm_Vertical_ThermalVias","Connector_Molex/Molex_Nano-Fit_105309-xx02_1x02_P2.50mm_Vertical","Connector_Molex/Molex_Nano-Fit_105309-xx03_1x03_P2.50mm_Vertical","Connector_Molex/Molex_Nano-Fit_105309-xx04_1x04_P2.50mm_Vertical","Connector_Molex/Molex_Nano-Fit_105309-xx05_1x05_P2.50mm_Vertical","Connector_Molex/Molex_Nano-Fit_105309-xx06_1x06_P2.50mm_Vertical","Connector_Molex/Molex_Nano-Fit_105309-xx07_1x07_P2.50mm_Vertical","Connector_Molex/Molex_Nano-Fit_105309-xx08_1x08_P2.50mm_Vertical","Connector_Molex/Molex_Nano-Fit_105310-xx04_2x02_P2.50mm_Vertical","Connector_Molex/Molex_Nano-Fit_105310-xx06_2x03_P2.50mm_Vertical","Connector_Molex/Molex_Nano-Fit_105310-xx08_2x04_P2.50mm_Vertical","Connector_Molex/Molex_Nano-Fit_105310-xx10_2x05_P2.50mm_Vertical","Connector_Molex/Molex_Nano-Fit_105310-xx12_2x06_P2.50mm_Vertical","Connector_Molex/Molex_Nano-Fit_105310-xx14_2x07_P2.50mm_Vertical","Connector_Molex/Molex_Nano-Fit_105310-xx16_2x08_P2.50mm_Vertical","Connector_Molex/Molex_Nano-Fit_105313-xx02_1x02_P2.50mm_Horizontal","Connector_Molex/Molex_Nano-Fit_105313-xx03_1x03_P2.50mm_Horizontal","Connector_Molex/Molex_Nano-Fit_105313-xx04_1x04_P2.50mm_Horizontal","Connector_Molex/Molex_Nano-Fit_105313-xx05_1x05_P2.50mm_Horizontal","Connector_Molex/Molex_Nano-Fit_105313-xx06_1x06_P2.50mm_Horizontal","Connector_Molex/Molex_Nano-Fit_105313-xx07_1x07_P2.50mm_Horizontal","Connector_Molex/Molex_Nano-Fit_105313-xx08_1x08_P2.50mm_Horizontal","Connector_Molex/Molex_Nano-Fit_105314-xx04_2x02_P2.50mm_Horizontal","Connector_Molex/Molex_Nano-Fit_105314-xx06_2x03_P2.50mm_Horizontal","Connector_Molex/Molex_Nano-Fit_105314-xx08_2x04_P2.50mm_Horizontal","Connector_Molex/Molex_Nano-Fit_105314-xx10_2x05_P2.50mm_Horizontal","Connector_Molex/Molex_Nano-Fit_105314-xx12_2x06_P2.50mm_Horizontal","Connector_Molex/Molex_Nano-Fit_105314-xx14_2x07_P2.50mm_Horizontal","Connector_Molex/Molex_Nano-Fit_105314-xx16_2x08_P2.50mm_Horizontal","Connector_Molex/Molex_Panelmate_53780-0270_1x02-1MP_P1.25mm_Horizontal","Connector_Molex/Molex_Panelmate_53780-0370_1x03-1MP_P1.25mm_Horizontal","Connector_Molex/Molex_Panelmate_53780-0470_1x04-1MP_P1.25mm_Horizontal","Connector_Molex/Molex_Panelmate_53780-0570_1x05-1MP_P1.25mm_Horizontal","Connector_Molex/Molex_Panelmate_53780-0670_1x06-1MP_P1.25mm_Horizontal","Connector_Molex/Molex_Panelmate_53780-0770_1x07-1MP_P1.25mm_Horizontal","Connector_Molex/Molex_Panelmate_53780-0870_1x08-1MP_P1.25mm_Horizontal","Connector_Molex/Molex_Panelmate_53780-0970_1x09-1MP_P1.25mm_Horizontal","Connector_Molex/Molex_Panelmate_53780-1070_1x10-1MP_P1.25mm_Horizontal","Connector_Molex/Molex_Panelmate_53780-1270_1x12-1MP_P1.25mm_Horizontal","Connector_Molex/Molex_Panelmate_53780-1470_1x14-1MP_P1.25mm_Horizontal","Connector_Molex/Molex_Panelmate_53780-1570_1x15-1MP_P1.25mm_Horizontal","Connector_Molex/Molex_Panelmate_53780-1870_1x18-1MP_P1.25mm_Horizontal","Connector_Molex/Molex_Panelmate_53780-3070_1x30-1MP_P1.25mm_Horizontal","Connector_Molex/Molex_Pico-Clasp_202396-0207_1x02-1MP_P1.00mm_Horizontal","Connector_Molex/Molex_Pico-Clasp_202396-0307_1x03-1MP_P1.00mm_Horizontal","Connector_Molex/Molex_Pico-Clasp_202396-0407_1x04-1MP_P1.00mm_Horizontal","Connector_Molex/Molex_Pico-Clasp_202396-0507_1x05-1MP_P1.00mm_Horizontal","Connector_Molex/Molex_Pico-Clasp_202396-0607_1x06-1MP_P1.00mm_Horizontal","Connector_Molex/Molex_Pico-Clasp_202396-0707_1x07-1MP_P1.00mm_Horizontal","Connector_Molex/Molex_Pico-Clasp_202396-0807_1x08-1MP_P1.00mm_Horizontal","Connector_Molex/Molex_Pico-Clasp_202396-0907_1x09-1MP_P1.00mm_Horizontal","Connector_Molex/Molex_Pico-Clasp_202396-1007_1x10-1MP_P1.00mm_Horizontal","Connector_Molex/Molex_Pico-Clasp_202396-1107_1x11-1MP_P1.00mm_Horizontal","Connector_Molex/Molex_Pico-Clasp_202396-1207_1x12-1MP_P1.00mm_Horizontal","Connector_Molex/Molex_Pico-Clasp_202396-1307_1x13-1MP_P1.00mm_Horizontal","Connector_Molex/Molex_Pico-Clasp_202396-1407_1x14-1MP_P1.00mm_Horizontal","Connector_Molex/Molex_Pico-Clasp_202396-1507_1x15-1MP_P1.00mm_Horizontal","Connector_Molex/Molex_Pico-Clasp_501331-0207_1x02-1MP_P1.00mm_Vertical","Connector_Molex/Molex_Pico-Clasp_501331-0307_1x03-1MP_P1.00mm_Vertical","Connector_Molex/Molex_Pico-Clasp_501331-0407_1x04-1MP_P1.00mm_Vertical","Connector_Molex/Molex_Pico-Clasp_501331-0507_1x05-1MP_P1.00mm_Vertical","Connector_Molex/Molex_Pico-Clasp_501331-0607_1x06-1MP_P1.00mm_Vertical","Connector_Molex/Molex_Pico-Clasp_501331-0707_1x07-1MP_P1.00mm_Vertical","Connector_Molex/Molex_Pico-Clasp_501331-0807_1x08-1MP_P1.00mm_Vertical","Connector_Molex/Molex_Pico-Clasp_501331-0907_1x09-1MP_P1.00mm_Vertical","Connector_Molex/Molex_Pico-Clasp_501331-1007_1x10-1MP_P1.00mm_Vertical","Connector_Molex/Molex_Pico-Clasp_501331-1107_1x11-1MP_P1.00mm_Vertical","Connector_Molex/Molex_Pico-Clasp_501331-1207_1x12-1MP_P1.00mm_Vertical","Connector_Molex/Molex_Pico-Clasp_501331-1307_1x13-1MP_P1.00mm_Vertical","Connector_Molex/Molex_Pico-Clasp_501331-1407_1x14-1MP_P1.00mm_Vertical","Connector_Molex/Molex_Pico-Clasp_501331-1507_1x15-1MP_P1.00mm_Vertical","Connector_Molex/Molex_Pico-EZmate_78171-0002_1x02-1MP_P1.20mm_Vertical","Connector_Molex/Molex_Pico-EZmate_78171-0003_1x03-1MP_P1.20mm_Vertical","Connector_Molex/Molex_Pico-EZmate_78171-0004_1x04-1MP_P1.20mm_Vertical","Connector_Molex/Molex_Pico-EZmate_78171-0005_1x05-1MP_P1.20mm_Vertical","Connector_Molex/Molex_Pico-EZmate_Slim_202656-0021_1x02-1MP_P1.20mm_Vertical","Connector_Molex/Molex_Pico-Lock_205338-0002_1x02-1MP_P2.00mm_Horizontal","Connector_Molex/Molex_Pico-Lock_205338-0004_1x04-1MP_P2.00mm_Horizontal","Connector_Molex/Molex_Pico-Lock_205338-0006_1x06-1MP_P2.00mm_Horizontal","Connector_Molex/Molex_Pico-Lock_205338-0008_1x08-1MP_P2.00mm_Horizontal","Connector_Molex/Molex_Pico-Lock_205338-0010_1x10-1MP_P2.00mm_Horizontal","Connector_Molex/Molex_Pico-Lock_504050-0291_1x02-1MP_P1.50mm_Horizontal","Connector_Molex/Molex_Pico-Lock_504050-0391_1x03-1MP_P1.50mm_Horizontal","Connector_Molex/Molex_Pico-Lock_504050-0491_1x04-1MP_P1.50mm_Horizontal","Connector_Molex/Molex_Pico-Lock_504050-0591_1x05-1MP_P1.50mm_Horizontal","Connector_Molex/Molex_Pico-Lock_504050-0691_1x06-1MP_P1.50mm_Horizontal","Connector_Molex/Molex_Pico-Lock_504050-0791_1x07-1MP_P1.50mm_Horizontal","Connector_Molex/Molex_Pico-Lock_504050-0891_1x08-1MP_P1.50mm_Horizontal","Connector_Molex/Molex_Pico-Lock_504050-0991_1x09-1MP_P1.50mm_Horizontal","Connector_Molex/Molex_Pico-Lock_504050-1091_1x10-1MP_P1.50mm_Horizontal","Connector_Molex/Molex_Pico-Lock_504050-1191_1x11-1MP_P1.50mm_Horizontal","Connector_Molex/Molex_Pico-Lock_504050-1291_1x12-1MP_P1.50mm_Horizontal","Connector_Molex/Molex_Pico-SPOX_87437-1443_1x14-P1.5mm_Vertical","Connector_Molex/Molex_PicoBlade_53047-0210_1x02_P1.25mm_Vertical","Connector_Molex/Molex_PicoBlade_53047-0310_1x03_P1.25mm_Vertical","Connector_Molex/Molex_PicoBlade_53047-0410_1x04_P1.25mm_Vertical","Connector_Molex/Molex_PicoBlade_53047-0510_1x05_P1.25mm_Vertical","Connector_Molex/Molex_PicoBlade_53047-0610_1x06_P1.25mm_Vertical","Connector_Molex/Molex_PicoBlade_53047-0710_1x07_P1.25mm_Vertical","Connector_Molex/Molex_PicoBlade_53047-0810_1x08_P1.25mm_Vertical","Connector_Molex/Molex_PicoBlade_53047-0910_1x09_P1.25mm_Vertical","Connector_Molex/Molex_PicoBlade_53047-1010_1x10_P1.25mm_Vertical","Connector_Molex/Molex_PicoBlade_53047-1110_1x11_P1.25mm_Vertical","Connector_Molex/Molex_PicoBlade_53047-1210_1x12_P1.25mm_Vertical","Connector_Molex/Molex_PicoBlade_53047-1310_1x13_P1.25mm_Vertical","Connector_Molex/Molex_PicoBlade_53047-1410_1x14_P1.25mm_Vertical","Connector_Molex/Molex_PicoBlade_53047-1510_1x15_P1.25mm_Vertical","Connector_Molex/Molex_PicoBlade_53048-0210_1x02_P1.25mm_Horizontal","Connector_Molex/Molex_PicoBlade_53048-0310_1x03_P1.25mm_Horizontal","Connector_Molex/Molex_PicoBlade_53048-0410_1x04_P1.25mm_Horizontal","Connector_Molex/Molex_PicoBlade_53048-0510_1x05_P1.25mm_Horizontal","Connector_Molex/Molex_PicoBlade_53048-0610_1x06_P1.25mm_Horizontal","Connector_Molex/Molex_PicoBlade_53048-0710_1x07_P1.25mm_Horizontal","Connector_Molex/Molex_PicoBlade_53048-0810_1x08_P1.25mm_Horizontal","Connector_Molex/Molex_PicoBlade_53048-0910_1x09_P1.25mm_Horizontal","Connector_Molex/Molex_PicoBlade_53048-1010_1x10_P1.25mm_Horizontal","Connector_Molex/Molex_PicoBlade_53048-1110_1x11_P1.25mm_Horizontal","Connector_Molex/Molex_PicoBlade_53048-1210_1x12_P1.25mm_Horizontal","Connector_Molex/Molex_PicoBlade_53048-1310_1x13_P1.25mm_Horizontal","Connector_Molex/Molex_PicoBlade_53048-1410_1x14_P1.25mm_Horizontal","Connector_Molex/Molex_PicoBlade_53048-1510_1x15_P1.25mm_Horizontal","Connector_Molex/Molex_PicoBlade_53261-0271_1x02-1MP_P1.25mm_Horizontal","Connector_Molex/Molex_PicoBlade_53261-0371_1x03-1MP_P1.25mm_Horizontal","Connector_Molex/Molex_PicoBlade_53261-0471_1x04-1MP_P1.25mm_Horizontal","Connector_Molex/Molex_PicoBlade_53261-0571_1x05-1MP_P1.25mm_Horizontal","Connector_Molex/Molex_PicoBlade_53261-0671_1x06-1MP_P1.25mm_Horizontal","Connector_Molex/Molex_PicoBlade_53261-0771_1x07-1MP_P1.25mm_Horizontal","Connector_Molex/Molex_PicoBlade_53261-0871_1x08-1MP_P1.25mm_Horizontal","Connector_Molex/Molex_PicoBlade_53261-0971_1x09-1MP_P1.25mm_Horizontal","Connector_Molex/Molex_PicoBlade_53261-1071_1x10-1MP_P1.25mm_Horizontal","Connector_Molex/Molex_PicoBlade_53261-1171_1x11-1MP_P1.25mm_Horizontal","Connector_Molex/Molex_PicoBlade_53261-1271_1x12-1MP_P1.25mm_Horizontal","Connector_Molex/Molex_PicoBlade_53261-1371_1x13-1MP_P1.25mm_Horizontal","Connector_Molex/Molex_PicoBlade_53261-1471_1x14-1MP_P1.25mm_Horizontal","Connector_Molex/Molex_PicoBlade_53261-1571_1x15-1MP_P1.25mm_Horizontal","Connector_Molex/Molex_PicoBlade_53261-1771_1x17-1MP_P1.25mm_Horizontal","Connector_Molex/Molex_PicoBlade_53398-0271_1x02-1MP_P1.25mm_Vertical","Connector_Molex/Molex_PicoBlade_53398-0371_1x03-1MP_P1.25mm_Vertical","Connector_Molex/Molex_PicoBlade_53398-0471_1x04-1MP_P1.25mm_Vertical","Connector_Molex/Molex_PicoBlade_53398-0571_1x05-1MP_P1.25mm_Vertical","Connector_Molex/Molex_PicoBlade_53398-0671_1x06-1MP_P1.25mm_Vertical","Connector_Molex/Molex_PicoBlade_53398-0771_1x07-1MP_P1.25mm_Vertical","Connector_Molex/Molex_PicoBlade_53398-0871_1x08-1MP_P1.25mm_Vertical","Connector_Molex/Molex_PicoBlade_53398-0971_1x09-1MP_P1.25mm_Vertical","Connector_Molex/Molex_PicoBlade_53398-1071_1x10-1MP_P1.25mm_Vertical","Connector_Molex/Molex_PicoBlade_53398-1171_1x11-1MP_P1.25mm_Vertical","Connector_Molex/Molex_PicoBlade_53398-1271_1x12-1MP_P1.25mm_Vertical","Connector_Molex/Molex_PicoBlade_53398-1371_1x13-1MP_P1.25mm_Vertical","Connector_Molex/Molex_PicoBlade_53398-1471_1x14-1MP_P1.25mm_Vertical","Connector_Molex/Molex_PicoBlade_53398-1571_1x15-1MP_P1.25mm_Vertical","Connector_Molex/Molex_Picoflex_90325-0004_2x02_P1.27mm_Vertical","Connector_Molex/Molex_Picoflex_90325-0006_2x03_P1.27mm_Vertical","Connector_Molex/Molex_Picoflex_90325-0008_2x04_P1.27mm_Vertical","Connector_Molex/Molex_Picoflex_90325-0010_2x05_P1.27mm_Vertical","Connector_Molex/Molex_Picoflex_90325-0012_2x06_P1.27mm_Vertical","Connector_Molex/Molex_Picoflex_90325-0014_2x07_P1.27mm_Vertical","Connector_Molex/Molex_Picoflex_90325-0016_2x08_P1.27mm_Vertical","Connector_Molex/Molex_Picoflex_90325-0018_2x09_P1.27mm_Vertical","Connector_Molex/Molex_Picoflex_90325-0020_2x10_P1.27mm_Vertical","Connector_Molex/Molex_Picoflex_90325-0022_2x11_P1.27mm_Vertical","Connector_Molex/Molex_Picoflex_90325-0024_2x12_P1.27mm_Vertical","Connector_Molex/Molex_Picoflex_90325-0026_2x13_P1.27mm_Vertical","Connector_Molex/Molex_Picoflex_90814-0004_2x02_P1.27mm_Vertical","Connector_Molex/Molex_Picoflex_90814-0006_2x03_P1.27mm_Vertical","Connector_Molex/Molex_Picoflex_90814-0008_2x04_P1.27mm_Vertical","Connector_Molex/Molex_Picoflex_90814-0010_2x05_P1.27mm_Vertical","Connector_Molex/Molex_Picoflex_90814-0012_2x06_P1.27mm_Vertical","Connector_Molex/Molex_Picoflex_90814-0014_2x07_P1.27mm_Vertical","Connector_Molex/Molex_Picoflex_90814-0016_2x08_P1.27mm_Vertical","Connector_Molex/Molex_Picoflex_90814-0018_2x09_P1.27mm_Vertical","Connector_Molex/Molex_Picoflex_90814-0020_2x10_P1.27mm_Vertical","Connector_Molex/Molex_Picoflex_90814-0022_2x11_P1.27mm_Vertical","Connector_Molex/Molex_Picoflex_90814-0024_2x12_P1.27mm_Vertical","Connector_Molex/Molex_Picoflex_90814-0026_2x13_P1.27mm_Vertical","Connector_Molex/Molex_SL_171971-0002_1x02_P2.54mm_Vertical","Connector_Molex/Molex_SL_171971-0003_1x03_P2.54mm_Vertical","Connector_Molex/Molex_SL_171971-0004_1x04_P2.54mm_Vertical","Connector_Molex/Molex_SL_171971-0005_1x05_P2.54mm_Vertical","Connector_Molex/Molex_SL_171971-0006_1x06_P2.54mm_Vertical","Connector_Molex/Molex_SL_171971-0007_1x07_P2.54mm_Vertical","Connector_Molex/Molex_SL_171971-0008_1x08_P2.54mm_Vertical","Connector_Molex/Molex_SL_171971-0009_1x09_P2.54mm_Vertical","Connector_Molex/Molex_SL_171971-0010_1x10_P2.54mm_Vertical","Connector_Molex/Molex_SL_171971-0011_1x11_P2.54mm_Vertical","Connector_Molex/Molex_SL_171971-0012_1x12_P2.54mm_Vertical","Connector_Molex/Molex_SL_171971-0013_1x13_P2.54mm_Vertical","Connector_Molex/Molex_SL_171971-0014_1x14_P2.54mm_Vertical","Connector_Molex/Molex_SL_171971-0015_1x15_P2.54mm_Vertical","Connector_Molex/Molex_SL_171971-0016_1x16_P2.54mm_Vertical","Connector_Molex/Molex_SL_171971-0017_1x17_P2.54mm_Vertical","Connector_Molex/Molex_SL_171971-0018_1x18_P2.54mm_Vertical","Connector_Molex/Molex_SL_171971-0019_1x19_P2.54mm_Vertical","Connector_Molex/Molex_SL_171971-0020_1x20_P2.54mm_Vertical","Connector_Molex/Molex_SL_171971-0021_1x21_P2.54mm_Vertical","Connector_Molex/Molex_SL_171971-0022_1x22_P2.54mm_Vertical","Connector_Molex/Molex_SL_171971-0023_1x23_P2.54mm_Vertical","Connector_Molex/Molex_SL_171971-0024_1x24_P2.54mm_Vertical","Connector_Molex/Molex_SL_171971-0025_1x25_P2.54mm_Vertical","Connector_Molex/Molex_SPOX_5267-02A_1x02_P2.50mm_Vertical","Connector_Molex/Molex_SPOX_5267-03A_1x03_P2.50mm_Vertical","Connector_Molex/Molex_SPOX_5267-04A_1x04_P2.50mm_Vertical","Connector_Molex/Molex_SPOX_5267-05A_1x05_P2.50mm_Vertical","Connector_Molex/Molex_SPOX_5267-06A_1x06_P2.50mm_Vertical","Connector_Molex/Molex_SPOX_5267-07A_1x07_P2.50mm_Vertical","Connector_Molex/Molex_SPOX_5267-08A_1x08_P2.50mm_Vertical","Connector_Molex/Molex_SPOX_5267-09A_1x09_P2.50mm_Vertical","Connector_Molex/Molex_SPOX_5267-10A_1x10_P2.50mm_Vertical","Connector_Molex/Molex_SPOX_5267-11A_1x11_P2.50mm_Vertical","Connector_Molex/Molex_SPOX_5267-12A_1x12_P2.50mm_Vertical","Connector_Molex/Molex_SPOX_5267-13A_1x13_P2.50mm_Vertical","Connector_Molex/Molex_SPOX_5267-14A_1x14_P2.50mm_Vertical","Connector_Molex/Molex_SPOX_5267-15A_1x15_P2.50mm_Vertical","Connector_Molex/Molex_SPOX_5268-02A_1x02_P2.50mm_Horizontal","Connector_Molex/Molex_SPOX_5268-03A_1x03_P2.50mm_Horizontal","Connector_Molex/Molex_SPOX_5268-04A_1x04_P2.50mm_Horizontal","Connector_Molex/Molex_SPOX_5268-05A_1x05_P2.50mm_Horizontal","Connector_Molex/Molex_SPOX_5268-06A_1x06_P2.50mm_Horizontal","Connector_Molex/Molex_SPOX_5268-07A_1x07_P2.50mm_Horizontal","Connector_Molex/Molex_SPOX_5268-08A_1x08_P2.50mm_Horizontal","Connector_Molex/Molex_SPOX_5268-09A_1x09_P2.50mm_Horizontal","Connector_Molex/Molex_SPOX_5268-10A_1x10_P2.50mm_Horizontal","Connector_Molex/Molex_SPOX_5268-11A_1x11_P2.50mm_Horizontal","Connector_Molex/Molex_SPOX_5268-12A_1x12_P2.50mm_Horizontal","Connector_Molex/Molex_SPOX_5268-13A_1x13_P2.50mm_Horizontal","Connector_Molex/Molex_SPOX_5268-14A_1x14_P2.50mm_Horizontal","Connector_Molex/Molex_SPOX_5268-15A_1x15_P2.50mm_Horizontal","Connector_Molex/Molex_Sabre_43160-0102_1x02_P7.49mm_Vertical","Connector_Molex/Molex_Sabre_43160-0102_1x02_P7.49mm_Vertical_ThermalVias","Connector_Molex/Molex_Sabre_43160-0103_1x03_P7.49mm_Vertical","Connector_Molex/Molex_Sabre_43160-0103_1x03_P7.49mm_Vertical_ThermalVias","Connector_Molex/Molex_Sabre_43160-0104_1x04_P7.49mm_Vertical","Connector_Molex/Molex_Sabre_43160-0104_1x04_P7.49mm_Vertical_ThermalVias","Connector_Molex/Molex_Sabre_43160-0105_1x05_P7.49mm_Vertical","Connector_Molex/Molex_Sabre_43160-0105_1x05_P7.49mm_Vertical_ThermalVias","Connector_Molex/Molex_Sabre_43160-0106_1x06_P7.49mm_Vertical","Connector_Molex/Molex_Sabre_43160-0106_1x06_P7.49mm_Vertical_ThermalVias","Connector_Molex/Molex_Sabre_43160-1102_1x02_P7.49mm_Horizontal","Connector_Molex/Molex_Sabre_43160-1102_1x02_P7.49mm_Horizontal_ThermalVias","Connector_Molex/Molex_Sabre_43160-1103_1x03_P7.49mm_Horizontal","Connector_Molex/Molex_Sabre_43160-1103_1x03_P7.49mm_Horizontal_ThermalVias","Connector_Molex/Molex_Sabre_43160-1104_1x04_P7.49mm_Horizontal","Connector_Molex/Molex_Sabre_43160-1104_1x04_P7.49mm_Horizontal_ThermalVias","Connector_Molex/Molex_Sabre_43160-1105_1x05_P7.49mm_Horizontal","Connector_Molex/Molex_Sabre_43160-1105_1x05_P7.49mm_Horizontal_ThermalVias","Connector_Molex/Molex_Sabre_43160-1106_1x06_P7.49mm_Horizontal","Connector_Molex/Molex_Sabre_43160-1106_1x06_P7.49mm_Horizontal_ThermalVias","Connector_Molex/Molex_Sabre_43160-2102_1x02_P7.49mm_Vertical","Connector_Molex/Molex_Sabre_43160-2102_1x02_P7.49mm_Vertical_ThermalVias","Connector_Molex/Molex_Sabre_43160-2103_1x03_P7.49mm_Vertical","Connector_Molex/Molex_Sabre_43160-2103_1x03_P7.49mm_Vertical_ThermalVias","Connector_Molex/Molex_Sabre_43160-2104_1x04_P7.49mm_Vertical","Connector_Molex/Molex_Sabre_43160-2104_1x04_P7.49mm_Vertical_ThermalVias","Connector_Molex/Molex_Sabre_43160-2105_1x05_P7.49mm_Vertical","Connector_Molex/Molex_Sabre_43160-2105_1x05_P7.49mm_Vertical_ThermalVias","Connector_Molex/Molex_Sabre_43160-2106_1x06_P7.49mm_Vertical","Connector_Molex/Molex_Sabre_43160-2106_1x06_P7.49mm_Vertical_ThermalVias","Connector_Molex/Molex_Sabre_46007-1102_1x02_P7.49mm_Horizontal","Connector_Molex/Molex_Sabre_46007-1102_1x02_P7.49mm_Horizontal_ThermalVias","Connector_Molex/Molex_Sabre_46007-1103_1x03_P7.49mm_Horizontal","Connector_Molex/Molex_Sabre_46007-1103_1x03_P7.49mm_Horizontal_ThermalVias","Connector_Molex/Molex_Sabre_46007-1104_1x04_P7.49mm_Horizontal","Connector_Molex/Molex_Sabre_46007-1104_1x04_P7.49mm_Horizontal_ThermalVias","Connector_Molex/Molex_Sabre_46007-1105_1x05_P7.49mm_Horizontal","Connector_Molex/Molex_Sabre_46007-1105_1x05_P7.49mm_Horizontal_ThermalVias","Connector_Molex/Molex_Sabre_46007-1106_1x06_P7.49mm_Horizontal","Connector_Molex/Molex_Sabre_46007-1106_1x06_P7.49mm_Horizontal_ThermalVias","Connector_Molex/Molex_SlimStack_501920-3001_2x15_P0.50mm_Vertical","Connector_Molex/Molex_SlimStack_501920-4001_2x20_P0.50mm_Vertical","Connector_Molex/Molex_SlimStack_501920-5001_2x25_P0.50mm_Vertical","Connector_Molex/Molex_SlimStack_502426-0810_2x04_P0.40mm_Vertical","Connector_Molex/Molex_SlimStack_502426-1410_2x07_P0.40mm_Vertical","Connector_Molex/Molex_SlimStack_502426-2010_2x10_P0.40mm_Vertical","Connector_Molex/Molex_SlimStack_502426-2210_2x11_P0.40mm_Vertical","Connector_Molex/Molex_SlimStack_502426-2410_2x12_P0.40mm_Vertical","Connector_Molex/Molex_SlimStack_502426-2610_2x13_P0.40mm_Vertical","Connector_Molex/Molex_SlimStack_502426-3010_2x15_P0.40mm_Vertical","Connector_Molex/Molex_SlimStack_502426-3210_2x16_P0.40mm_Vertical","Connector_Molex/Molex_SlimStack_502426-3410_2x17_P0.40mm_Vertical","Connector_Molex/Molex_SlimStack_502426-4010_2x20_P0.40mm_Vertical","Connector_Molex/Molex_SlimStack_502426-4410_2x22_P0.40mm_Vertical","Connector_Molex/Molex_SlimStack_502426-5010_2x25_P0.40mm_Vertical","Connector_Molex/Molex_SlimStack_502426-6010_2x30_P0.40mm_Vertical","Connector_Molex/Molex_SlimStack_502426-6410_2x32_P0.40mm_Vertical","Connector_Molex/Molex_SlimStack_502426-8010_2x40_P0.40mm_Vertical","Connector_Molex/Molex_SlimStack_502430-0820_2x04_P0.40mm_Vertical","Connector_Molex/Molex_SlimStack_502430-1410_2x07_P0.40mm_Vertical","Connector_Molex/Molex_SlimStack_502430-2010_2x10_P0.40mm_Vertical","Connector_Molex/Molex_SlimStack_502430-2210_2x11_P0.40mm_Vertical","Connector_Molex/Molex_SlimStack_502430-2410_2x12_P0.40mm_Vertical","Connector_Molex/Molex_SlimStack_502430-2610_2x13_P0.40mm_Vertical","Connector_Molex/Molex_SlimStack_502430-3010_2x15_P0.40mm_Vertical","Connector_Molex/Molex_SlimStack_502430-3210_2x16_P0.40mm_Vertical","Connector_Molex/Molex_SlimStack_502430-3410_2x17_P0.40mm_Vertical","Connector_Molex/Molex_SlimStack_502430-4010_2x20_P0.40mm_Vertical","Connector_Molex/Molex_SlimStack_502430-4410_2x22_P0.40mm_Vertical","Connector_Molex/Molex_SlimStack_502430-5010_2x25_P0.40mm_Vertical","Connector_Molex/Molex_SlimStack_502430-6010_2x30_P0.40mm_Vertical","Connector_Molex/Molex_SlimStack_502430-6410_2x32_P0.40mm_Vertical","Connector_Molex/Molex_SlimStack_502430-8010_2x40_P0.40mm_Vertical","Connector_Molex/Molex_SlimStack_52991-0208_2x10_P0.50mm_Vertical","Connector_Molex/Molex_SlimStack_52991-0308_2x15_P0.50mm_Vertical","Connector_Molex/Molex_SlimStack_52991-0408_2x20_P0.50mm_Vertical","Connector_Molex/Molex_SlimStack_52991-0508_2x25_P0.50mm_Vertical","Connector_Molex/Molex_SlimStack_52991-0608_2x30_P0.50mm_Vertical","Connector_Molex/Molex_SlimStack_52991-0708_2x35_P0.50mm_Vertical","Connector_Molex/Molex_SlimStack_52991-0808_2x40_P0.50mm_Vertical","Connector_Molex/Molex_SlimStack_53748-0208_2x10_P0.50mm_Vertical","Connector_Molex/Molex_SlimStack_53748-0308_2x15_P0.50mm_Vertical","Connector_Molex/Molex_SlimStack_53748-0408_2x20_P0.50mm_Vertical","Connector_Molex/Molex_SlimStack_53748-0608_2x30_P0.50mm_Vertical","Connector_Molex/Molex_SlimStack_53748-0708_2x35_P0.50mm_Vertical","Connector_Molex/Molex_SlimStack_53748-0808_2x40_P0.50mm_Vertical","Connector_Molex/Molex_SlimStack_54722-0164_2x08_P0.50mm_Vertical","Connector_Molex/Molex_SlimStack_54722-0204_2x10_P0.50mm_Vertical","Connector_Molex/Molex_SlimStack_54722-0224_2x11_P0.50mm_Vertical","Connector_Molex/Molex_SlimStack_54722-0244_2x12_P0.50mm_Vertical","Connector_Molex/Molex_SlimStack_54722-0304_2x15_P0.50mm_Vertical","Connector_Molex/Molex_SlimStack_54722-0344_2x17_P0.50mm_Vertical","Connector_Molex/Molex_SlimStack_54722-0404_2x20_P0.50mm_Vertical","Connector_Molex/Molex_SlimStack_54722-0504_2x25_P0.50mm_Vertical","Connector_Molex/Molex_SlimStack_54722-0604_2x30_P0.50mm_Vertical","Connector_Molex/Molex_SlimStack_54722-0804_2x40_P0.50mm_Vertical","Connector_Molex/Molex_SlimStack_55560-0161_2x08_P0.50mm_Vertical","Connector_Molex/Molex_SlimStack_55560-0201_2x10_P0.50mm_Vertical","Connector_Molex/Molex_SlimStack_55560-0221_2x11_P0.50mm_Vertical","Connector_Molex/Molex_SlimStack_55560-0241_2x12_P0.50mm_Vertical","Connector_Molex/Molex_SlimStack_55560-0301_2x15_P0.50mm_Vertical","Connector_Molex/Molex_SlimStack_55560-0341_2x17_P0.50mm_Vertical","Connector_Molex/Molex_SlimStack_55560-0401_2x20_P0.50mm_Vertical","Connector_Molex/Molex_SlimStack_55560-0501_2x25_P0.50mm_Vertical","Connector_Molex/Molex_SlimStack_55560-0601_2x30_P0.50mm_Vertical","Connector_Molex/Molex_SlimStack_55560-0801_2x40_P0.50mm_Vertical","Connector_Molex_Milligrid/Molex_8783204xx_2x02_P2.0mm_Header_Vertical","Connector_Molex_Milligrid/Molex_8783206xx_2x03_P2.0mm_Header_Vertical","Connector_Molex_Milligrid/Molex_8783206xx_2x03_P2.0mm_Header_Vertical_MountingPegs","Connector_Molex_Milligrid/Molex_8783206xx_2x03_P2.0mm_Header_Vertical_Polarized","Connector_Molex_Milligrid/Molex_8783206xx_2x03_P2.0mm_Header_Vertical_Polarized_MountingPegs","Connector_Molex_Milligrid/Molex_8783208xx_2x04_P2.0mm_Header_Vertical","Connector_Molex_Milligrid/Molex_8783208xx_2x04_P2.0mm_Header_Vertical_MountingPegs","Connector_Molex_Milligrid/Molex_8783208xx_2x04_P2.0mm_Header_Vertical_Polarized","Connector_Molex_Milligrid/Molex_8783208xx_2x04_P2.0mm_Header_Vertical_Polarized_MountingPegs","Connector_Molex_Milligrid/Molex_8783210xx_2x05_P2.0mm_Header_Vertical","Connector_Molex_Milligrid/Molex_8783210xx_2x05_P2.0mm_Header_Vertical_MountingPegs","Connector_Molex_Milligrid/Molex_8783210xx_2x05_P2.0mm_Header_Vertical_Polarized","Connector_Molex_Milligrid/Molex_8783210xx_2x05_P2.0mm_Header_Vertical_Polarized_MountingPegs","Connector_Molex_Milligrid/Molex_8783212xx_2x06_P2.0mm_Header_Vertical","Connector_Molex_Milligrid/Molex_8783212xx_2x06_P2.0mm_Header_Vertical_MountingPegs","Connector_Molex_Milligrid/Molex_8783212xx_2x06_P2.0mm_Header_Vertical_Polarized","Connector_Molex_Milligrid/Molex_8783212xx_2x06_P2.0mm_Header_Vertical_Polarized_MountingPegs","Connector_Molex_Milligrid/Molex_8783214xx_2x07_P2.0mm_Header_Vertical_Polarized","Connector_Molex_Milligrid/Molex_8783214xx_2x07_P2.0mm_Header_Vertical_Polarized_MountingPegs","Connector_Molex_Milligrid/Molex_8783216xx_2x08_P2.0mm_Header_Vertical_Polarized","Connector_Molex_Milligrid/Molex_8783216xx_2x08_P2.0mm_Header_Vertical_Polarized_MountingPegs","Connector_Molex_Milligrid/Molex_8783218xx_2x09_P2.0mm_Header_Vertical_Polarized","Connector_Molex_Milligrid/Molex_8783218xx_2x09_P2.0mm_Header_Vertical_Polarized_MountingPegs","Connector_Molex_Milligrid/Molex_8783220xx_2x10_P2.0mm_Header_Vertical_Polarized","Connector_Molex_Milligrid/Molex_8783220xx_2x10_P2.0mm_Header_Vertical_Polarized_MountingPegs","Connector_Molex_Milligrid/Molex_8783222xx_2x11_P2.0mm_Header_Vertical_Polarized","Connector_Molex_Milligrid/Molex_8783222xx_2x11_P2.0mm_Header_Vertical_Polarized_MountingPegs","Connector_Molex_Milligrid/Molex_8783224xx_2x12_P2.0mm_Header_Vertical_Polarized","Connector_Molex_Milligrid/Molex_8783224xx_2x12_P2.0mm_Header_Vertical_Polarized_MountingPegs","Connector_Molex_Milligrid/Molex_8783226xx_2x13_P2.0mm_Header_Vertical_Polarized","Connector_Molex_Milligrid/Molex_8783226xx_2x13_P2.0mm_Header_Vertical_Polarized_MountingPegs","Connector_Molex_Milligrid/Molex_8783228xx_2x14_P2.0mm_Header_Vertical_Polarized","Connector_Molex_Milligrid/Molex_8783228xx_2x14_P2.0mm_Header_Vertical_Polarized_MountingPegs","Connector_Molex_Milligrid/Molex_8783230xx_2x15_P2.0mm_Header_Vertical_Polarized","Connector_Molex_Milligrid/Molex_8783230xx_2x15_P2.0mm_Header_Vertical_Polarized_MountingPegs","Connector_Molex_Milligrid/Molex_8783232xx_2x16_P2.0mm_Header_Vertical_Polarized","Connector_Molex_Milligrid/Molex_8783232xx_2x16_P2.0mm_Header_Vertical_Polarized_MountingPegs","Connector_Molex_Milligrid/Molex_8783234xx_2x17_P2.0mm_Header_Vertical_Polarized","Connector_Molex_Milligrid/Molex_8783234xx_2x17_P2.0mm_Header_Vertical_Polarized_MountingPegs","Connector_Molex_Milligrid/Molex_8783236xx_2x18_P2.0mm_Header_Vertical_Polarized","Connector_Molex_Milligrid/Molex_8783236xx_2x18_P2.0mm_Header_Vertical_Polarized_MountingPegs","Connector_Molex_Milligrid/Molex_8783238xx_2x19_P2.0mm_Header_Vertical_Polarized","Connector_Molex_Milligrid/Molex_8783238xx_2x19_P2.0mm_Header_Vertical_Polarized_MountingPegs","Connector_Molex_Milligrid/Molex_8783240xx_2x20_P2.0mm_Header_Vertical_Polarized","Connector_Molex_Milligrid/Molex_8783240xx_2x20_P2.0mm_Header_Vertical_Polarized_MountingPegs","Connector_Molex_Milligrid/Molex_8783242xx_2x21_P2.0mm_Header_Vertical_Polarized","Connector_Molex_Milligrid/Molex_8783242xx_2x21_P2.0mm_Header_Vertical_Polarized_MountingPegs","Connector_Molex_Milligrid/Molex_8783244xx_2x22_P2.0mm_Header_Vertical_Polarized","Connector_Molex_Milligrid/Molex_8783244xx_2x22_P2.0mm_Header_Vertical_Polarized_MountingPegs","Connector_Molex_Milligrid/Molex_8783246xx_2x23_P2.0mm_Header_Vertical_Polarized","Connector_Molex_Milligrid/Molex_8783246xx_2x23_P2.0mm_Header_Vertical_Polarized_MountingPegs","Connector_Molex_Milligrid/Molex_8783248xx_2x24_P2.0mm_Header_Vertical_Polarized","Connector_Molex_Milligrid/Molex_8783248xx_2x24_P2.0mm_Header_Vertical_Polarized_MountingPegs","Connector_Molex_Milligrid/Molex_8783250xx_2x25_P2.0mm_Header_Vertical_Polarized","Connector_Molex_Milligrid/Molex_8783250xx_2x25_P2.0mm_Header_Vertical_Polarized_MountingPegs","Connector_PCBEdge/4UCON_10156_2x40_P1.27mm_Socket_Horizontal","Connector_PCBEdge/BUS_AT","Connector_PCBEdge/BUS_PCI","Connector_PCBEdge/BUS_PCI_Express_Mini","Connector_PCBEdge/BUS_PCI_Express_Mini_Dual","Connector_PCBEdge/BUS_PCI_Express_Mini_Full","Connector_PCBEdge/BUS_PCI_Express_Mini_Half","Connector_PCBEdge/BUS_PCIexpress_x1","Connector_PCBEdge/BUS_PCIexpress_x16","Connector_PCBEdge/BUS_PCIexpress_x4","Connector_PCBEdge/BUS_PCIexpress_x8","Connector_PCBEdge/DEC_double_long","Connector_PCBEdge/DEC_double_short","Connector_PCBEdge/DEC_quad_long","Connector_PCBEdge/DEC_quad_short","Connector_PCBEdge/DEC_single_long","Connector_PCBEdge/DEC_single_short","Connector_PCBEdge/JAE_MM60-EZH039-Bx_BUS_PCI_Express_Holder","Connector_PCBEdge/JAE_MM60-EZH059-Bx_BUS_PCI_Express_Holder","Connector_PCBEdge/M.2_22110-xx-B","Connector_PCBEdge/M.2_22110-xx-M","Connector_PCBEdge/M.2_2230-xx-A","Connector_PCBEdge/M.2_2230-xx-B","Connector_PCBEdge/M.2_2230-xx-E","Connector_PCBEdge/M.2_2230-xx-M","Connector_PCBEdge/M.2_2242-xx-B","Connector_PCBEdge/M.2_2242-xx-M","Connector_PCBEdge/M.2_2260-xx-B","Connector_PCBEdge/M.2_2260-xx-M","Connector_PCBEdge/M.2_2280-xx-B","Connector_PCBEdge/M.2_2280-xx-M","Connector_PCBEdge/M.2_3030-xx-A","Connector_PCBEdge/M.2_3030-xx-E","Connector_PCBEdge/M.2_3042-xx-B","Connector_PCBEdge/SODIMM-200_1.8V_Card_edge","Connector_PCBEdge/SODIMM-200_2.5V_Card_edge","Connector_PCBEdge/SODIMM-260_DDR4_H4.0-5.2_OrientationStd_Socket","Connector_PCBEdge/Samtec_MECF-05-01-L-DV-WT_2x05_P1.27mm_Polarized_Socket_Horizontal","Connector_PCBEdge/Samtec_MECF-05-01-L-DV_2x05_P1.27mm_Polarized_Socket_Horizontal","Connector_PCBEdge/Samtec_MECF-05-01-NP-L-DV-WT_2x05_P1.27mm_Socket_Horizontal","Connector_PCBEdge/Samtec_MECF-05-01-NP-L-DV_2x05_P1.27mm_Socket_Horizontal","Connector_PCBEdge/Samtec_MECF-05-02-L-DV-WT_2x05_P1.27mm_Polarized_Socket_Horizontal","Connector_PCBEdge/Samtec_MECF-05-02-L-DV_2x05_P1.27mm_Polarized_Socket_Horizontal","Connector_PCBEdge/Samtec_MECF-05-02-NP-L-DV-WT_2x05_P1.27mm_Socket_Horizontal","Connector_PCBEdge/Samtec_MECF-05-02-NP-L-DV_2x05_P1.27mm_Socket_Horizontal","Connector_PCBEdge/Samtec_MECF-05-0_-L-DV_2x05_P1.27mm_Polarized_Edge","Connector_PCBEdge/Samtec_MECF-05-0_-NP-L-DV_2x05_P1.27mm_Edge","Connector_PCBEdge/Samtec_MECF-08-01-L-DV-WT_2x08_P1.27mm_Polarized_Socket_Horizontal","Connector_PCBEdge/Samtec_MECF-08-01-L-DV_2x08_P1.27mm_Polarized_Socket_Horizontal","Connector_PCBEdge/Samtec_MECF-08-01-NP-L-DV-WT_2x08_P1.27mm_Socket_Horizontal","Connector_PCBEdge/Samtec_MECF-08-01-NP-L-DV_2x08_P1.27mm_Socket_Horizontal","Connector_PCBEdge/Samtec_MECF-08-02-L-DV-WT_2x08_P1.27mm_Polarized_Socket_Horizontal","Connector_PCBEdge/Samtec_MECF-08-02-L-DV_2x08_P1.27mm_Polarized_Socket_Horizontal","Connector_PCBEdge/Samtec_MECF-08-02-NP-L-DV-WT_2x08_P1.27mm_Socket_Horizontal","Connector_PCBEdge/Samtec_MECF-08-02-NP-L-DV_2x08_P1.27mm_Socket_Horizontal","Connector_PCBEdge/Samtec_MECF-08-0_-L-DV_2x08_P1.27mm_Polarized_Edge","Connector_PCBEdge/Samtec_MECF-08-0_-NP-L-DV_2x08_P1.27mm_Edge","Connector_PCBEdge/Samtec_MECF-20-01-L-DV-WT_2x20_P1.27mm_Polarized_Socket_Horizontal","Connector_PCBEdge/Samtec_MECF-20-01-L-DV_2x20_P1.27mm_Polarized_Socket_Horizontal","Connector_PCBEdge/Samtec_MECF-20-01-NP-L-DV-WT_2x20_P1.27mm_Socket_Horizontal","Connector_PCBEdge/Samtec_MECF-20-01-NP-L-DV_2x20_P1.27mm_Socket_Horizontal","Connector_PCBEdge/Samtec_MECF-20-02-L-DV-WT_2x20_P1.27mm_Polarized_Socket_Horizontal","Connector_PCBEdge/Samtec_MECF-20-02-L-DV_2x20_P1.27mm_Polarized_Socket_Horizontal","Connector_PCBEdge/Samtec_MECF-20-02-NP-L-DV-WT_2x20_P1.27mm_Socket_Horizontal","Connector_PCBEdge/Samtec_MECF-20-02-NP-L-DV_2x20_P1.27mm_Socket_Horizontal","Connector_PCBEdge/Samtec_MECF-20-0_-L-DV_2x20_P1.27mm_Polarized_Edge","Connector_PCBEdge/Samtec_MECF-20-0_-NP-L-DV_2x20_P1.27mm_Edge","Connector_PCBEdge/Samtec_MECF-30-01-L-DV-WT_2x30_P1.27mm_Polarized_Socket_Horizontal","Connector_PCBEdge/Samtec_MECF-30-01-L-DV_2x30_P1.27mm_Polarized_Socket_Horizontal","Connector_PCBEdge/Samtec_MECF-30-01-NP-L-DV-WT_2x30_P1.27mm_Socket_Horizontal","Connector_PCBEdge/Samtec_MECF-30-01-NP-L-DV_2x30_P1.27mm_Socket_Horizontal","Connector_PCBEdge/Samtec_MECF-30-02-L-DV-WT_2x30_P1.27mm_Polarized_Socket_Horizontal","Connector_PCBEdge/Samtec_MECF-30-02-L-DV_2x30_P1.27mm_Polarized_Socket_Horizontal","Connector_PCBEdge/Samtec_MECF-30-02-NP-L-DV-WT_2x30_P1.27mm_Socket_Horizontal","Connector_PCBEdge/Samtec_MECF-30-02-NP-L-DV_2x30_P1.27mm_Socket_Horizontal","Connector_PCBEdge/Samtec_MECF-30-0_-L-DV_2x30_P1.27mm_Polarized_Edge","Connector_PCBEdge/Samtec_MECF-30-0_-NP-L-DV_2x30_P1.27mm_Edge","Connector_PCBEdge/Samtec_MECF-40-01-L-DV-WT_2x40_P1.27mm_Polarized_Socket_Horizontal","Connector_PCBEdge/Samtec_MECF-40-01-L-DV_2x40_P1.27mm_Polarized_Socket_Horizontal","Connector_PCBEdge/Samtec_MECF-40-01-NP-L-DV-WT_2x40_P1.27mm_Socket_Horizontal","Connector_PCBEdge/Samtec_MECF-40-01-NP-L-DV_2x40_P1.27mm_Socket_Horizontal","Connector_PCBEdge/Samtec_MECF-40-02-L-DV-WT_2x40_P1.27mm_Polarized_Socket_Horizontal","Connector_PCBEdge/Samtec_MECF-40-02-L-DV_2x40_P1.27mm_Polarized_Socket_Horizontal","Connector_PCBEdge/Samtec_MECF-40-02-NP-L-DV-WT_2x40_P1.27mm_Socket_Horizontal","Connector_PCBEdge/Samtec_MECF-40-02-NP-L-DV_2x40_P1.27mm_Socket_Horizontal","Connector_PCBEdge/Samtec_MECF-40-0_-L-DV_2x40_P1.27mm_Polarized_Edge","Connector_PCBEdge/Samtec_MECF-40-0_-NP-L-DV_2x40_P1.27mm_Edge","Connector_PCBEdge/Samtec_MECF-50-01-L-DV-WT_2x50_P1.27mm_Polarized_Socket_Horizontal","Connector_PCBEdge/Samtec_MECF-50-01-L-DV_2x50_P1.27mm_Polarized_Socket_Horizontal","Connector_PCBEdge/Samtec_MECF-50-01-NP-L-DV-WT_2x50_P1.27mm_Socket_Horizontal","Connector_PCBEdge/Samtec_MECF-50-01-NP-L-DV_2x50_P1.27mm_Socket_Horizontal","Connector_PCBEdge/Samtec_MECF-50-02-L-DV-WT_2x50_P1.27mm_Polarized_Socket_Horizontal","Connector_PCBEdge/Samtec_MECF-50-02-L-DV_2x50_P1.27mm_Polarized_Socket_Horizontal","Connector_PCBEdge/Samtec_MECF-50-02-NP-L-DV-WT_2x50_P1.27mm_Socket_Horizontal","Connector_PCBEdge/Samtec_MECF-50-02-NP-L-DV_2x50_P1.27mm_Socket_Horizontal","Connector_PCBEdge/Samtec_MECF-50-0_-L-DV_2x50_P1.27mm_Polarized_Edge","Connector_PCBEdge/Samtec_MECF-50-0_-NP-L-DV_2x50_P1.27mm_Edge","Connector_PCBEdge/Samtec_MECF-60-01-L-DV-WT_2x60_P1.27mm_Polarized_Socket_Horizontal","Connector_PCBEdge/Samtec_MECF-60-01-L-DV_2x60_P1.27mm_Polarized_Socket_Horizontal","Connector_PCBEdge/Samtec_MECF-60-01-NP-L-DV-WT_2x60_P1.27mm_Socket_Horizontal","Connector_PCBEdge/Samtec_MECF-60-01-NP-L-DV_2x60_P1.27mm_Socket_Horizontal","Connector_PCBEdge/Samtec_MECF-60-02-L-DV-WT_2x60_P1.27mm_Polarized_Socket_Horizontal","Connector_PCBEdge/Samtec_MECF-60-02-L-DV_2x60_P1.27mm_Polarized_Socket_Horizontal","Connector_PCBEdge/Samtec_MECF-60-02-NP-L-DV-WT_2x60_P1.27mm_Socket_Horizontal","Connector_PCBEdge/Samtec_MECF-60-02-NP-L-DV_2x60_P1.27mm_Socket_Horizontal","Connector_PCBEdge/Samtec_MECF-60-0_-L-DV_2x60_P1.27mm_Polarized_Edge","Connector_PCBEdge/Samtec_MECF-60-0_-NP-L-DV_2x60_P1.27mm_Edge","Connector_PCBEdge/Samtec_MECF-70-01-L-DV-WT_2x70_P1.27mm_Polarized_Socket_Horizontal","Connector_PCBEdge/Samtec_MECF-70-01-L-DV_2x70_P1.27mm_Polarized_Socket_Horizontal","Connector_PCBEdge/Samtec_MECF-70-01-NP-L-DV-WT_2x70_P1.27mm_Socket_Horizontal","Connector_PCBEdge/Samtec_MECF-70-01-NP-L-DV_2x70_P1.27mm_Socket_Horizontal","Connector_PCBEdge/Samtec_MECF-70-02-L-DV-WT_2x70_P1.27mm_Polarized_Socket_Horizontal","Connector_PCBEdge/Samtec_MECF-70-02-L-DV_2x70_P1.27mm_Polarized_Socket_Horizontal","Connector_PCBEdge/Samtec_MECF-70-02-NP-L-DV-WT_2x70_P1.27mm_Socket_Horizontal","Connector_PCBEdge/Samtec_MECF-70-02-NP-L-DV_2x70_P1.27mm_Socket_Horizontal","Connector_PCBEdge/Samtec_MECF-70-0_-L-DV_2x70_P1.27mm_Polarized_Edge","Connector_PCBEdge/Samtec_MECF-70-0_-NP-L-DV_2x70_P1.27mm_Edge","Connector_PCBEdge/molex_EDGELOCK_2-CKT","Connector_PCBEdge/molex_EDGELOCK_4-CKT","Connector_PCBEdge/molex_EDGELOCK_6-CKT","Connector_PCBEdge/molex_EDGELOCK_8-CKT","Connector_Phoenix_GMSTB/PhoenixContact_GMSTBA_2,5_10-G-7,62_1x10_P7.62mm_Horizontal","Connector_Phoenix_GMSTB/PhoenixContact_GMSTBA_2,5_10-G_1x10_P7.50mm_Horizontal","Connector_Phoenix_GMSTB/PhoenixContact_GMSTBA_2,5_11-G-7,62_1x11_P7.62mm_Horizontal","Connector_Phoenix_GMSTB/PhoenixContact_GMSTBA_2,5_11-G_1x11_P7.50mm_Horizontal","Connector_Phoenix_GMSTB/PhoenixContact_GMSTBA_2,5_12-G-7,62_1x12_P7.62mm_Horizontal","Connector_Phoenix_GMSTB/PhoenixContact_GMSTBA_2,5_12-G_1x12_P7.50mm_Horizontal","Connector_Phoenix_GMSTB/PhoenixContact_GMSTBA_2,5_2-G-7,62_1x02_P7.62mm_Horizontal","Connector_Phoenix_GMSTB/PhoenixContact_GMSTBA_2,5_2-G_1x02_P7.50mm_Horizontal","Connector_Phoenix_GMSTB/PhoenixContact_GMSTBA_2,5_3-G-7,62_1x03_P7.62mm_Horizontal","Connector_Phoenix_GMSTB/PhoenixContact_GMSTBA_2,5_3-G_1x03_P7.50mm_Horizontal","Connector_Phoenix_GMSTB/PhoenixContact_GMSTBA_2,5_4-G-7,62_1x04_P7.62mm_Horizontal","Connector_Phoenix_GMSTB/PhoenixContact_GMSTBA_2,5_4-G_1x04_P7.50mm_Horizontal","Connector_Phoenix_GMSTB/PhoenixContact_GMSTBA_2,5_5-G-7,62_1x05_P7.62mm_Horizontal","Connector_Phoenix_GMSTB/PhoenixContact_GMSTBA_2,5_5-G_1x05_P7.50mm_Horizontal","Connector_Phoenix_GMSTB/PhoenixContact_GMSTBA_2,5_6-G-7,62_1x06_P7.62mm_Horizontal","Connector_Phoenix_GMSTB/PhoenixContact_GMSTBA_2,5_6-G_1x06_P7.50mm_Horizontal","Connector_Phoenix_GMSTB/PhoenixContact_GMSTBA_2,5_7-G-7,62_1x07_P7.62mm_Horizontal","Connector_Phoenix_GMSTB/PhoenixContact_GMSTBA_2,5_7-G_1x07_P7.50mm_Horizontal","Connector_Phoenix_GMSTB/PhoenixContact_GMSTBA_2,5_8-G-7,62_1x08_P7.62mm_Horizontal","Connector_Phoenix_GMSTB/PhoenixContact_GMSTBA_2,5_8-G_1x08_P7.50mm_Horizontal","Connector_Phoenix_GMSTB/PhoenixContact_GMSTBA_2,5_9-G-7,62_1x09_P7.62mm_Horizontal","Connector_Phoenix_GMSTB/PhoenixContact_GMSTBA_2,5_9-G_1x09_P7.50mm_Horizontal","Connector_Phoenix_GMSTB/PhoenixContact_GMSTBVA_2,5_10-G-7,62_1x10_P7.62mm_Vertical","Connector_Phoenix_GMSTB/PhoenixContact_GMSTBVA_2,5_10-G_1x10_P7.50mm_Vertical","Connector_Phoenix_GMSTB/PhoenixContact_GMSTBVA_2,5_11-G-7,62_1x11_P7.62mm_Vertical","Connector_Phoenix_GMSTB/PhoenixContact_GMSTBVA_2,5_11-G_1x11_P7.50mm_Vertical","Connector_Phoenix_GMSTB/PhoenixContact_GMSTBVA_2,5_12-G-7,62_1x12_P7.62mm_Vertical","Connector_Phoenix_GMSTB/PhoenixContact_GMSTBVA_2,5_12-G_1x12_P7.50mm_Vertical","Connector_Phoenix_GMSTB/PhoenixContact_GMSTBVA_2,5_2-G-7,62_1x02_P7.62mm_Vertical","Connector_Phoenix_GMSTB/PhoenixContact_GMSTBVA_2,5_2-G_1x02_P7.50mm_Vertical","Connector_Phoenix_GMSTB/PhoenixContact_GMSTBVA_2,5_3-G-7,62_1x03_P7.62mm_Vertical","Connector_Phoenix_GMSTB/PhoenixContact_GMSTBVA_2,5_3-G_1x03_P7.50mm_Vertical","Connector_Phoenix_GMSTB/PhoenixContact_GMSTBVA_2,5_4-G-7,62_1x04_P7.62mm_Vertical","Connector_Phoenix_GMSTB/PhoenixContact_GMSTBVA_2,5_4-G_1x04_P7.50mm_Vertical","Connector_Phoenix_GMSTB/PhoenixContact_GMSTBVA_2,5_5-G-7,62_1x05_P7.62mm_Vertical","Connector_Phoenix_GMSTB/PhoenixContact_GMSTBVA_2,5_5-G_1x05_P7.50mm_Vertical","Connector_Phoenix_GMSTB/PhoenixContact_GMSTBVA_2,5_6-G-7,62_1x06_P7.62mm_Vertical","Connector_Phoenix_GMSTB/PhoenixContact_GMSTBVA_2,5_6-G_1x06_P7.50mm_Vertical","Connector_Phoenix_GMSTB/PhoenixContact_GMSTBVA_2,5_7-G-7,62_1x07_P7.62mm_Vertical","Connector_Phoenix_GMSTB/PhoenixContact_GMSTBVA_2,5_7-G_1x07_P7.50mm_Vertical","Connector_Phoenix_GMSTB/PhoenixContact_GMSTBVA_2,5_8-G-7,62_1x08_P7.62mm_Vertical","Connector_Phoenix_GMSTB/PhoenixContact_GMSTBVA_2,5_8-G_1x08_P7.50mm_Vertical","Connector_Phoenix_GMSTB/PhoenixContact_GMSTBVA_2,5_9-G-7,62_1x09_P7.62mm_Vertical","Connector_Phoenix_GMSTB/PhoenixContact_GMSTBVA_2,5_9-G_1x09_P7.50mm_Vertical","Connector_Phoenix_GMSTB/PhoenixContact_GMSTBV_2,5_10-GF-7,62_1x10_P7.62mm_Vertical_ThreadedFlange","Connector_Phoenix_GMSTB/PhoenixContact_GMSTBV_2,5_10-GF-7,62_1x10_P7.62mm_Vertical_ThreadedFlange_MountHole","Connector_Phoenix_GMSTB/PhoenixContact_GMSTBV_2,5_11-GF-7,62_1x11_P7.62mm_Vertical_ThreadedFlange","Connector_Phoenix_GMSTB/PhoenixContact_GMSTBV_2,5_11-GF-7,62_1x11_P7.62mm_Vertical_ThreadedFlange_MountHole","Connector_Phoenix_GMSTB/PhoenixContact_GMSTBV_2,5_12-GF-7,62_1x12_P7.62mm_Vertical_ThreadedFlange","Connector_Phoenix_GMSTB/PhoenixContact_GMSTBV_2,5_12-GF-7,62_1x12_P7.62mm_Vertical_ThreadedFlange_MountHole","Connector_Phoenix_GMSTB/PhoenixContact_GMSTBV_2,5_2-GF-7,62_1x02_P7.62mm_Vertical_ThreadedFlange","Connector_Phoenix_GMSTB/PhoenixContact_GMSTBV_2,5_2-GF-7,62_1x02_P7.62mm_Vertical_ThreadedFlange_MountHole","Connector_Phoenix_GMSTB/PhoenixContact_GMSTBV_2,5_3-GF-7,62_1x03_P7.62mm_Vertical_ThreadedFlange","Connector_Phoenix_GMSTB/PhoenixContact_GMSTBV_2,5_3-GF-7,62_1x03_P7.62mm_Vertical_ThreadedFlange_MountHole","Connector_Phoenix_GMSTB/PhoenixContact_GMSTBV_2,5_4-GF-7,62_1x04_P7.62mm_Vertical_ThreadedFlange","Connector_Phoenix_GMSTB/PhoenixContact_GMSTBV_2,5_4-GF-7,62_1x04_P7.62mm_Vertical_ThreadedFlange_MountHole","Connector_Phoenix_GMSTB/PhoenixContact_GMSTBV_2,5_5-GF-7,62_1x05_P7.62mm_Vertical_ThreadedFlange","Connector_Phoenix_GMSTB/PhoenixContact_GMSTBV_2,5_5-GF-7,62_1x05_P7.62mm_Vertical_ThreadedFlange_MountHole","Connector_Phoenix_GMSTB/PhoenixContact_GMSTBV_2,5_6-GF-7,62_1x06_P7.62mm_Vertical_ThreadedFlange","Connector_Phoenix_GMSTB/PhoenixContact_GMSTBV_2,5_6-GF-7,62_1x06_P7.62mm_Vertical_ThreadedFlange_MountHole","Connector_Phoenix_GMSTB/PhoenixContact_GMSTBV_2,5_7-GF-7,62_1x07_P7.62mm_Vertical_ThreadedFlange","Connector_Phoenix_GMSTB/PhoenixContact_GMSTBV_2,5_7-GF-7,62_1x07_P7.62mm_Vertical_ThreadedFlange_MountHole","Connector_Phoenix_GMSTB/PhoenixContact_GMSTBV_2,5_8-GF-7,62_1x08_P7.62mm_Vertical_ThreadedFlange","Connector_Phoenix_GMSTB/PhoenixContact_GMSTBV_2,5_8-GF-7,62_1x08_P7.62mm_Vertical_ThreadedFlange_MountHole","Connector_Phoenix_GMSTB/PhoenixContact_GMSTBV_2,5_9-GF-7,62_1x09_P7.62mm_Vertical_ThreadedFlange","Connector_Phoenix_GMSTB/PhoenixContact_GMSTBV_2,5_9-GF-7,62_1x09_P7.62mm_Vertical_ThreadedFlange_MountHole","Connector_Phoenix_GMSTB/PhoenixContact_GMSTB_2,5_10-GF-7,62_1x10_P7.62mm_Horizontal_ThreadedFlange","Connector_Phoenix_GMSTB/PhoenixContact_GMSTB_2,5_10-GF-7,62_1x10_P7.62mm_Horizontal_ThreadedFlange_MountHole","Connector_Phoenix_GMSTB/PhoenixContact_GMSTB_2,5_11-GF-7,62_1x11_P7.62mm_Horizontal_ThreadedFlange","Connector_Phoenix_GMSTB/PhoenixContact_GMSTB_2,5_11-GF-7,62_1x11_P7.62mm_Horizontal_ThreadedFlange_MountHole","Connector_Phoenix_GMSTB/PhoenixContact_GMSTB_2,5_12-GF-7,62_1x12_P7.62mm_Horizontal_ThreadedFlange","Connector_Phoenix_GMSTB/PhoenixContact_GMSTB_2,5_12-GF-7,62_1x12_P7.62mm_Horizontal_ThreadedFlange_MountHole","Connector_Phoenix_GMSTB/PhoenixContact_GMSTB_2,5_2-GF-7,62_1x02_P7.62mm_Horizontal_ThreadedFlange","Connector_Phoenix_GMSTB/PhoenixContact_GMSTB_2,5_2-GF-7,62_1x02_P7.62mm_Horizontal_ThreadedFlange_MountHole","Connector_Phoenix_GMSTB/PhoenixContact_GMSTB_2,5_3-GF-7,62_1x03_P7.62mm_Horizontal_ThreadedFlange","Connector_Phoenix_GMSTB/PhoenixContact_GMSTB_2,5_3-GF-7,62_1x03_P7.62mm_Horizontal_ThreadedFlange_MountHole","Connector_Phoenix_GMSTB/PhoenixContact_GMSTB_2,5_4-GF-7,62_1x04_P7.62mm_Horizontal_ThreadedFlange","Connector_Phoenix_GMSTB/PhoenixContact_GMSTB_2,5_4-GF-7,62_1x04_P7.62mm_Horizontal_ThreadedFlange_MountHole","Connector_Phoenix_GMSTB/PhoenixContact_GMSTB_2,5_5-GF-7,62_1x05_P7.62mm_Horizontal_ThreadedFlange","Connector_Phoenix_GMSTB/PhoenixContact_GMSTB_2,5_5-GF-7,62_1x05_P7.62mm_Horizontal_ThreadedFlange_MountHole","Connector_Phoenix_GMSTB/PhoenixContact_GMSTB_2,5_6-GF-7,62_1x06_P7.62mm_Horizontal_ThreadedFlange","Connector_Phoenix_GMSTB/PhoenixContact_GMSTB_2,5_6-GF-7,62_1x06_P7.62mm_Horizontal_ThreadedFlange_MountHole","Connector_Phoenix_GMSTB/PhoenixContact_GMSTB_2,5_7-GF-7,62_1x07_P7.62mm_Horizontal_ThreadedFlange","Connector_Phoenix_GMSTB/PhoenixContact_GMSTB_2,5_7-GF-7,62_1x07_P7.62mm_Horizontal_ThreadedFlange_MountHole","Connector_Phoenix_GMSTB/PhoenixContact_GMSTB_2,5_8-GF-7,62_1x08_P7.62mm_Horizontal_ThreadedFlange","Connector_Phoenix_GMSTB/PhoenixContact_GMSTB_2,5_8-GF-7,62_1x08_P7.62mm_Horizontal_ThreadedFlange_MountHole","Connector_Phoenix_GMSTB/PhoenixContact_GMSTB_2,5_9-GF-7,62_1x09_P7.62mm_Horizontal_ThreadedFlange","Connector_Phoenix_GMSTB/PhoenixContact_GMSTB_2,5_9-GF-7,62_1x09_P7.62mm_Horizontal_ThreadedFlange_MountHole","Connector_Phoenix_MC/PhoenixContact_MCV_1,5_10-G-3.5_1x10_P3.50mm_Vertical","Connector_Phoenix_MC/PhoenixContact_MCV_1,5_10-G-3.81_1x10_P3.81mm_Vertical","Connector_Phoenix_MC/PhoenixContact_MCV_1,5_10-GF-3.5_1x10_P3.50mm_Vertical_ThreadedFlange","Connector_Phoenix_MC/PhoenixContact_MCV_1,5_10-GF-3.5_1x10_P3.50mm_Vertical_ThreadedFlange_MountHole","Connector_Phoenix_MC/PhoenixContact_MCV_1,5_10-GF-3.81_1x10_P3.81mm_Vertical_ThreadedFlange","Connector_Phoenix_MC/PhoenixContact_MCV_1,5_10-GF-3.81_1x10_P3.81mm_Vertical_ThreadedFlange_MountHole","Connector_Phoenix_MC/PhoenixContact_MCV_1,5_11-G-3.5_1x11_P3.50mm_Vertical","Connector_Phoenix_MC/PhoenixContact_MCV_1,5_11-G-3.81_1x11_P3.81mm_Vertical","Connector_Phoenix_MC/PhoenixContact_MCV_1,5_11-GF-3.5_1x11_P3.50mm_Vertical_ThreadedFlange","Connector_Phoenix_MC/PhoenixContact_MCV_1,5_11-GF-3.5_1x11_P3.50mm_Vertical_ThreadedFlange_MountHole","Connector_Phoenix_MC/PhoenixContact_MCV_1,5_11-GF-3.81_1x11_P3.81mm_Vertical_ThreadedFlange","Connector_Phoenix_MC/PhoenixContact_MCV_1,5_11-GF-3.81_1x11_P3.81mm_Vertical_ThreadedFlange_MountHole","Connector_Phoenix_MC/PhoenixContact_MCV_1,5_12-G-3.5_1x12_P3.50mm_Vertical","Connector_Phoenix_MC/PhoenixContact_MCV_1,5_12-G-3.81_1x12_P3.81mm_Vertical","Connector_Phoenix_MC/PhoenixContact_MCV_1,5_12-GF-3.5_1x12_P3.50mm_Vertical_ThreadedFlange","Connector_Phoenix_MC/PhoenixContact_MCV_1,5_12-GF-3.5_1x12_P3.50mm_Vertical_ThreadedFlange_MountHole","Connector_Phoenix_MC/PhoenixContact_MCV_1,5_12-GF-3.81_1x12_P3.81mm_Vertical_ThreadedFlange","Connector_Phoenix_MC/PhoenixContact_MCV_1,5_12-GF-3.81_1x12_P3.81mm_Vertical_ThreadedFlange_MountHole","Connector_Phoenix_MC/PhoenixContact_MCV_1,5_13-G-3.5_1x13_P3.50mm_Vertical","Connector_Phoenix_MC/PhoenixContact_MCV_1,5_13-G-3.81_1x13_P3.81mm_Vertical","Connector_Phoenix_MC/PhoenixContact_MCV_1,5_13-GF-3.5_1x13_P3.50mm_Vertical_ThreadedFlange","Connector_Phoenix_MC/PhoenixContact_MCV_1,5_13-GF-3.5_1x13_P3.50mm_Vertical_ThreadedFlange_MountHole","Connector_Phoenix_MC/PhoenixContact_MCV_1,5_13-GF-3.81_1x13_P3.81mm_Vertical_ThreadedFlange","Connector_Phoenix_MC/PhoenixContact_MCV_1,5_13-GF-3.81_1x13_P3.81mm_Vertical_ThreadedFlange_MountHole","Connector_Phoenix_MC/PhoenixContact_MCV_1,5_14-G-3.5_1x14_P3.50mm_Vertical","Connector_Phoenix_MC/PhoenixContact_MCV_1,5_14-G-3.81_1x14_P3.81mm_Vertical","Connector_Phoenix_MC/PhoenixContact_MCV_1,5_14-GF-3.5_1x14_P3.50mm_Vertical_ThreadedFlange","Connector_Phoenix_MC/PhoenixContact_MCV_1,5_14-GF-3.5_1x14_P3.50mm_Vertical_ThreadedFlange_MountHole","Connector_Phoenix_MC/PhoenixContact_MCV_1,5_14-GF-3.81_1x14_P3.81mm_Vertical_ThreadedFlange","Connector_Phoenix_MC/PhoenixContact_MCV_1,5_14-GF-3.81_1x14_P3.81mm_Vertical_ThreadedFlange_MountHole","Connector_Phoenix_MC/PhoenixContact_MCV_1,5_15-G-3.5_1x15_P3.50mm_Vertical","Connector_Phoenix_MC/PhoenixContact_MCV_1,5_15-G-3.81_1x15_P3.81mm_Vertical","Connector_Phoenix_MC/PhoenixContact_MCV_1,5_15-GF-3.5_1x15_P3.50mm_Vertical_ThreadedFlange","Connector_Phoenix_MC/PhoenixContact_MCV_1,5_15-GF-3.5_1x15_P3.50mm_Vertical_ThreadedFlange_MountHole","Connector_Phoenix_MC/PhoenixContact_MCV_1,5_15-GF-3.81_1x15_P3.81mm_Vertical_ThreadedFlange","Connector_Phoenix_MC/PhoenixContact_MCV_1,5_15-GF-3.81_1x15_P3.81mm_Vertical_ThreadedFlange_MountHole","Connector_Phoenix_MC/PhoenixContact_MCV_1,5_16-G-3.5_1x16_P3.50mm_Vertical","Connector_Phoenix_MC/PhoenixContact_MCV_1,5_16-G-3.81_1x16_P3.81mm_Vertical","Connector_Phoenix_MC/PhoenixContact_MCV_1,5_16-GF-3.5_1x16_P3.50mm_Vertical_ThreadedFlange","Connector_Phoenix_MC/PhoenixContact_MCV_1,5_16-GF-3.5_1x16_P3.50mm_Vertical_ThreadedFlange_MountHole","Connector_Phoenix_MC/PhoenixContact_MCV_1,5_16-GF-3.81_1x16_P3.81mm_Vertical_ThreadedFlange","Connector_Phoenix_MC/PhoenixContact_MCV_1,5_16-GF-3.81_1x16_P3.81mm_Vertical_ThreadedFlange_MountHole","Connector_Phoenix_MC/PhoenixContact_MCV_1,5_2-G-3.5_1x02_P3.50mm_Vertical","Connector_Phoenix_MC/PhoenixContact_MCV_1,5_2-G-3.81_1x02_P3.81mm_Vertical","Connector_Phoenix_MC/PhoenixContact_MCV_1,5_2-GF-3.5_1x02_P3.50mm_Vertical_ThreadedFlange","Connector_Phoenix_MC/PhoenixContact_MCV_1,5_2-GF-3.5_1x02_P3.50mm_Vertical_ThreadedFlange_MountHole","Connector_Phoenix_MC/PhoenixContact_MCV_1,5_2-GF-3.81_1x02_P3.81mm_Vertical_ThreadedFlange","Connector_Phoenix_MC/PhoenixContact_MCV_1,5_2-GF-3.81_1x02_P3.81mm_Vertical_ThreadedFlange_MountHole","Connector_Phoenix_MC/PhoenixContact_MCV_1,5_3-G-3.5_1x03_P3.50mm_Vertical","Connector_Phoenix_MC/PhoenixContact_MCV_1,5_3-G-3.81_1x03_P3.81mm_Vertical","Connector_Phoenix_MC/PhoenixContact_MCV_1,5_3-GF-3.5_1x03_P3.50mm_Vertical_ThreadedFlange","Connector_Phoenix_MC/PhoenixContact_MCV_1,5_3-GF-3.5_1x03_P3.50mm_Vertical_ThreadedFlange_MountHole","Connector_Phoenix_MC/PhoenixContact_MCV_1,5_3-GF-3.81_1x03_P3.81mm_Vertical_ThreadedFlange","Connector_Phoenix_MC/PhoenixContact_MCV_1,5_3-GF-3.81_1x03_P3.81mm_Vertical_ThreadedFlange_MountHole","Connector_Phoenix_MC/PhoenixContact_MCV_1,5_4-G-3.5_1x04_P3.50mm_Vertical","Connector_Phoenix_MC/PhoenixContact_MCV_1,5_4-G-3.81_1x04_P3.81mm_Vertical","Connector_Phoenix_MC/PhoenixContact_MCV_1,5_4-GF-3.5_1x04_P3.50mm_Vertical_ThreadedFlange","Connector_Phoenix_MC/PhoenixContact_MCV_1,5_4-GF-3.5_1x04_P3.50mm_Vertical_ThreadedFlange_MountHole","Connector_Phoenix_MC/PhoenixContact_MCV_1,5_4-GF-3.81_1x04_P3.81mm_Vertical_ThreadedFlange","Connector_Phoenix_MC/PhoenixContact_MCV_1,5_4-GF-3.81_1x04_P3.81mm_Vertical_ThreadedFlange_MountHole","Connector_Phoenix_MC/PhoenixContact_MCV_1,5_5-G-3.5_1x05_P3.50mm_Vertical","Connector_Phoenix_MC/PhoenixContact_MCV_1,5_5-G-3.81_1x05_P3.81mm_Vertical","Connector_Phoenix_MC/PhoenixContact_MCV_1,5_5-GF-3.5_1x05_P3.50mm_Vertical_ThreadedFlange","Connector_Phoenix_MC/PhoenixContact_MCV_1,5_5-GF-3.5_1x05_P3.50mm_Vertical_ThreadedFlange_MountHole","Connector_Phoenix_MC/PhoenixContact_MCV_1,5_5-GF-3.81_1x05_P3.81mm_Vertical_ThreadedFlange","Connector_Phoenix_MC/PhoenixContact_MCV_1,5_5-GF-3.81_1x05_P3.81mm_Vertical_ThreadedFlange_MountHole","Connector_Phoenix_MC/PhoenixContact_MCV_1,5_6-G-3.5_1x06_P3.50mm_Vertical","Connector_Phoenix_MC/PhoenixContact_MCV_1,5_6-G-3.81_1x06_P3.81mm_Vertical","Connector_Phoenix_MC/PhoenixContact_MCV_1,5_6-GF-3.5_1x06_P3.50mm_Vertical_ThreadedFlange","Connector_Phoenix_MC/PhoenixContact_MCV_1,5_6-GF-3.5_1x06_P3.50mm_Vertical_ThreadedFlange_MountHole","Connector_Phoenix_MC/PhoenixContact_MCV_1,5_6-GF-3.81_1x06_P3.81mm_Vertical_ThreadedFlange","Connector_Phoenix_MC/PhoenixContact_MCV_1,5_6-GF-3.81_1x06_P3.81mm_Vertical_ThreadedFlange_MountHole","Connector_Phoenix_MC/PhoenixContact_MCV_1,5_7-G-3.5_1x07_P3.50mm_Vertical","Connector_Phoenix_MC/PhoenixContact_MCV_1,5_7-G-3.81_1x07_P3.81mm_Vertical","Connector_Phoenix_MC/PhoenixContact_MCV_1,5_7-GF-3.5_1x07_P3.50mm_Vertical_ThreadedFlange","Connector_Phoenix_MC/PhoenixContact_MCV_1,5_7-GF-3.5_1x07_P3.50mm_Vertical_ThreadedFlange_MountHole","Connector_Phoenix_MC/PhoenixContact_MCV_1,5_7-GF-3.81_1x07_P3.81mm_Vertical_ThreadedFlange","Connector_Phoenix_MC/PhoenixContact_MCV_1,5_7-GF-3.81_1x07_P3.81mm_Vertical_ThreadedFlange_MountHole","Connector_Phoenix_MC/PhoenixContact_MCV_1,5_8-G-3.5_1x08_P3.50mm_Vertical","Connector_Phoenix_MC/PhoenixContact_MCV_1,5_8-G-3.81_1x08_P3.81mm_Vertical","Connector_Phoenix_MC/PhoenixContact_MCV_1,5_8-GF-3.5_1x08_P3.50mm_Vertical_ThreadedFlange","Connector_Phoenix_MC/PhoenixContact_MCV_1,5_8-GF-3.5_1x08_P3.50mm_Vertical_ThreadedFlange_MountHole","Connector_Phoenix_MC/PhoenixContact_MCV_1,5_8-GF-3.81_1x08_P3.81mm_Vertical_ThreadedFlange","Connector_Phoenix_MC/PhoenixContact_MCV_1,5_8-GF-3.81_1x08_P3.81mm_Vertical_ThreadedFlange_MountHole","Connector_Phoenix_MC/PhoenixContact_MCV_1,5_9-G-3.5_1x09_P3.50mm_Vertical","Connector_Phoenix_MC/PhoenixContact_MCV_1,5_9-G-3.81_1x09_P3.81mm_Vertical","Connector_Phoenix_MC/PhoenixContact_MCV_1,5_9-GF-3.5_1x09_P3.50mm_Vertical_ThreadedFlange","Connector_Phoenix_MC/PhoenixContact_MCV_1,5_9-GF-3.5_1x09_P3.50mm_Vertical_ThreadedFlange_MountHole","Connector_Phoenix_MC/PhoenixContact_MCV_1,5_9-GF-3.81_1x09_P3.81mm_Vertical_ThreadedFlange","Connector_Phoenix_MC/PhoenixContact_MCV_1,5_9-GF-3.81_1x09_P3.81mm_Vertical_ThreadedFlange_MountHole","Connector_Phoenix_MC/PhoenixContact_MC_1,5_10-G-3.5_1x10_P3.50mm_Horizontal","Connector_Phoenix_MC/PhoenixContact_MC_1,5_10-G-3.81_1x10_P3.81mm_Horizontal","Connector_Phoenix_MC/PhoenixContact_MC_1,5_10-GF-3.5_1x10_P3.50mm_Horizontal_ThreadedFlange","Connector_Phoenix_MC/PhoenixContact_MC_1,5_10-GF-3.5_1x10_P3.50mm_Horizontal_ThreadedFlange_MountHole","Connector_Phoenix_MC/PhoenixContact_MC_1,5_10-GF-3.81_1x10_P3.81mm_Horizontal_ThreadedFlange","Connector_Phoenix_MC/PhoenixContact_MC_1,5_10-GF-3.81_1x10_P3.81mm_Horizontal_ThreadedFlange_MountHole","Connector_Phoenix_MC/PhoenixContact_MC_1,5_11-G-3.5_1x11_P3.50mm_Horizontal","Connector_Phoenix_MC/PhoenixContact_MC_1,5_11-G-3.81_1x11_P3.81mm_Horizontal","Connector_Phoenix_MC/PhoenixContact_MC_1,5_11-GF-3.5_1x11_P3.50mm_Horizontal_ThreadedFlange","Connector_Phoenix_MC/PhoenixContact_MC_1,5_11-GF-3.5_1x11_P3.50mm_Horizontal_ThreadedFlange_MountHole","Connector_Phoenix_MC/PhoenixContact_MC_1,5_11-GF-3.81_1x11_P3.81mm_Horizontal_ThreadedFlange","Connector_Phoenix_MC/PhoenixContact_MC_1,5_11-GF-3.81_1x11_P3.81mm_Horizontal_ThreadedFlange_MountHole","Connector_Phoenix_MC/PhoenixContact_MC_1,5_12-G-3.5_1x12_P3.50mm_Horizontal","Connector_Phoenix_MC/PhoenixContact_MC_1,5_12-G-3.81_1x12_P3.81mm_Horizontal","Connector_Phoenix_MC/PhoenixContact_MC_1,5_12-GF-3.5_1x12_P3.50mm_Horizontal_ThreadedFlange","Connector_Phoenix_MC/PhoenixContact_MC_1,5_12-GF-3.5_1x12_P3.50mm_Horizontal_ThreadedFlange_MountHole","Connector_Phoenix_MC/PhoenixContact_MC_1,5_12-GF-3.81_1x12_P3.81mm_Horizontal_ThreadedFlange","Connector_Phoenix_MC/PhoenixContact_MC_1,5_12-GF-3.81_1x12_P3.81mm_Horizontal_ThreadedFlange_MountHole","Connector_Phoenix_MC/PhoenixContact_MC_1,5_13-G-3.5_1x13_P3.50mm_Horizontal","Connector_Phoenix_MC/PhoenixContact_MC_1,5_13-G-3.81_1x13_P3.81mm_Horizontal","Connector_Phoenix_MC/PhoenixContact_MC_1,5_13-GF-3.5_1x13_P3.50mm_Horizontal_ThreadedFlange","Connector_Phoenix_MC/PhoenixContact_MC_1,5_13-GF-3.5_1x13_P3.50mm_Horizontal_ThreadedFlange_MountHole","Connector_Phoenix_MC/PhoenixContact_MC_1,5_13-GF-3.81_1x13_P3.81mm_Horizontal_ThreadedFlange","Connector_Phoenix_MC/PhoenixContact_MC_1,5_13-GF-3.81_1x13_P3.81mm_Horizontal_ThreadedFlange_MountHole","Connector_Phoenix_MC/PhoenixContact_MC_1,5_14-G-3.5_1x14_P3.50mm_Horizontal","Connector_Phoenix_MC/PhoenixContact_MC_1,5_14-G-3.81_1x14_P3.81mm_Horizontal","Connector_Phoenix_MC/PhoenixContact_MC_1,5_14-GF-3.5_1x14_P3.50mm_Horizontal_ThreadedFlange","Connector_Phoenix_MC/PhoenixContact_MC_1,5_14-GF-3.5_1x14_P3.50mm_Horizontal_ThreadedFlange_MountHole","Connector_Phoenix_MC/PhoenixContact_MC_1,5_14-GF-3.81_1x14_P3.81mm_Horizontal_ThreadedFlange","Connector_Phoenix_MC/PhoenixContact_MC_1,5_14-GF-3.81_1x14_P3.81mm_Horizontal_ThreadedFlange_MountHole","Connector_Phoenix_MC/PhoenixContact_MC_1,5_15-G-3.5_1x15_P3.50mm_Horizontal","Connector_Phoenix_MC/PhoenixContact_MC_1,5_15-G-3.81_1x15_P3.81mm_Horizontal","Connector_Phoenix_MC/PhoenixContact_MC_1,5_15-GF-3.5_1x15_P3.50mm_Horizontal_ThreadedFlange","Connector_Phoenix_MC/PhoenixContact_MC_1,5_15-GF-3.5_1x15_P3.50mm_Horizontal_ThreadedFlange_MountHole","Connector_Phoenix_MC/PhoenixContact_MC_1,5_15-GF-3.81_1x15_P3.81mm_Horizontal_ThreadedFlange","Connector_Phoenix_MC/PhoenixContact_MC_1,5_15-GF-3.81_1x15_P3.81mm_Horizontal_ThreadedFlange_MountHole","Connector_Phoenix_MC/PhoenixContact_MC_1,5_16-G-3.5_1x16_P3.50mm_Horizontal","Connector_Phoenix_MC/PhoenixContact_MC_1,5_16-G-3.81_1x16_P3.81mm_Horizontal","Connector_Phoenix_MC/PhoenixContact_MC_1,5_16-GF-3.5_1x16_P3.50mm_Horizontal_ThreadedFlange","Connector_Phoenix_MC/PhoenixContact_MC_1,5_16-GF-3.5_1x16_P3.50mm_Horizontal_ThreadedFlange_MountHole","Connector_Phoenix_MC/PhoenixContact_MC_1,5_16-GF-3.81_1x16_P3.81mm_Horizontal_ThreadedFlange","Connector_Phoenix_MC/PhoenixContact_MC_1,5_16-GF-3.81_1x16_P3.81mm_Horizontal_ThreadedFlange_MountHole","Connector_Phoenix_MC/PhoenixContact_MC_1,5_2-G-3.5_1x02_P3.50mm_Horizontal","Connector_Phoenix_MC/PhoenixContact_MC_1,5_2-G-3.81_1x02_P3.81mm_Horizontal","Connector_Phoenix_MC/PhoenixContact_MC_1,5_2-GF-3.5_1x02_P3.50mm_Horizontal_ThreadedFlange","Connector_Phoenix_MC/PhoenixContact_MC_1,5_2-GF-3.5_1x02_P3.50mm_Horizontal_ThreadedFlange_MountHole","Connector_Phoenix_MC/PhoenixContact_MC_1,5_2-GF-3.81_1x02_P3.81mm_Horizontal_ThreadedFlange","Connector_Phoenix_MC/PhoenixContact_MC_1,5_2-GF-3.81_1x02_P3.81mm_Horizontal_ThreadedFlange_MountHole","Connector_Phoenix_MC/PhoenixContact_MC_1,5_3-G-3.5_1x03_P3.50mm_Horizontal","Connector_Phoenix_MC/PhoenixContact_MC_1,5_3-G-3.81_1x03_P3.81mm_Horizontal","Connector_Phoenix_MC/PhoenixContact_MC_1,5_3-GF-3.5_1x03_P3.50mm_Horizontal_ThreadedFlange","Connector_Phoenix_MC/PhoenixContact_MC_1,5_3-GF-3.5_1x03_P3.50mm_Horizontal_ThreadedFlange_MountHole","Connector_Phoenix_MC/PhoenixContact_MC_1,5_3-GF-3.81_1x03_P3.81mm_Horizontal_ThreadedFlange","Connector_Phoenix_MC/PhoenixContact_MC_1,5_3-GF-3.81_1x03_P3.81mm_Horizontal_ThreadedFlange_MountHole","Connector_Phoenix_MC/PhoenixContact_MC_1,5_4-G-3.5_1x04_P3.50mm_Horizontal","Connector_Phoenix_MC/PhoenixContact_MC_1,5_4-G-3.81_1x04_P3.81mm_Horizontal","Connector_Phoenix_MC/PhoenixContact_MC_1,5_4-GF-3.5_1x04_P3.50mm_Horizontal_ThreadedFlange","Connector_Phoenix_MC/PhoenixContact_MC_1,5_4-GF-3.5_1x04_P3.50mm_Horizontal_ThreadedFlange_MountHole","Connector_Phoenix_MC/PhoenixContact_MC_1,5_4-GF-3.81_1x04_P3.81mm_Horizontal_ThreadedFlange","Connector_Phoenix_MC/PhoenixContact_MC_1,5_4-GF-3.81_1x04_P3.81mm_Horizontal_ThreadedFlange_MountHole","Connector_Phoenix_MC/PhoenixContact_MC_1,5_5-G-3.5_1x05_P3.50mm_Horizontal","Connector_Phoenix_MC/PhoenixContact_MC_1,5_5-G-3.81_1x05_P3.81mm_Horizontal","Connector_Phoenix_MC/PhoenixContact_MC_1,5_5-GF-3.5_1x05_P3.50mm_Horizontal_ThreadedFlange","Connector_Phoenix_MC/PhoenixContact_MC_1,5_5-GF-3.5_1x05_P3.50mm_Horizontal_ThreadedFlange_MountHole","Connector_Phoenix_MC/PhoenixContact_MC_1,5_5-GF-3.81_1x05_P3.81mm_Horizontal_ThreadedFlange","Connector_Phoenix_MC/PhoenixContact_MC_1,5_5-GF-3.81_1x05_P3.81mm_Horizontal_ThreadedFlange_MountHole","Connector_Phoenix_MC/PhoenixContact_MC_1,5_6-G-3.5_1x06_P3.50mm_Horizontal","Connector_Phoenix_MC/PhoenixContact_MC_1,5_6-G-3.81_1x06_P3.81mm_Horizontal","Connector_Phoenix_MC/PhoenixContact_MC_1,5_6-GF-3.5_1x06_P3.50mm_Horizontal_ThreadedFlange","Connector_Phoenix_MC/PhoenixContact_MC_1,5_6-GF-3.5_1x06_P3.50mm_Horizontal_ThreadedFlange_MountHole","Connector_Phoenix_MC/PhoenixContact_MC_1,5_6-GF-3.81_1x06_P3.81mm_Horizontal_ThreadedFlange","Connector_Phoenix_MC/PhoenixContact_MC_1,5_6-GF-3.81_1x06_P3.81mm_Horizontal_ThreadedFlange_MountHole","Connector_Phoenix_MC/PhoenixContact_MC_1,5_7-G-3.5_1x07_P3.50mm_Horizontal","Connector_Phoenix_MC/PhoenixContact_MC_1,5_7-G-3.81_1x07_P3.81mm_Horizontal","Connector_Phoenix_MC/PhoenixContact_MC_1,5_7-GF-3.5_1x07_P3.50mm_Horizontal_ThreadedFlange","Connector_Phoenix_MC/PhoenixContact_MC_1,5_7-GF-3.5_1x07_P3.50mm_Horizontal_ThreadedFlange_MountHole","Connector_Phoenix_MC/PhoenixContact_MC_1,5_7-GF-3.81_1x07_P3.81mm_Horizontal_ThreadedFlange","Connector_Phoenix_MC/PhoenixContact_MC_1,5_7-GF-3.81_1x07_P3.81mm_Horizontal_ThreadedFlange_MountHole","Connector_Phoenix_MC/PhoenixContact_MC_1,5_8-G-3.5_1x08_P3.50mm_Horizontal","Connector_Phoenix_MC/PhoenixContact_MC_1,5_8-G-3.81_1x08_P3.81mm_Horizontal","Connector_Phoenix_MC/PhoenixContact_MC_1,5_8-GF-3.5_1x08_P3.50mm_Horizontal_ThreadedFlange","Connector_Phoenix_MC/PhoenixContact_MC_1,5_8-GF-3.5_1x08_P3.50mm_Horizontal_ThreadedFlange_MountHole","Connector_Phoenix_MC/PhoenixContact_MC_1,5_8-GF-3.81_1x08_P3.81mm_Horizontal_ThreadedFlange","Connector_Phoenix_MC/PhoenixContact_MC_1,5_8-GF-3.81_1x08_P3.81mm_Horizontal_ThreadedFlange_MountHole","Connector_Phoenix_MC/PhoenixContact_MC_1,5_9-G-3.5_1x09_P3.50mm_Horizontal","Connector_Phoenix_MC/PhoenixContact_MC_1,5_9-G-3.81_1x09_P3.81mm_Horizontal","Connector_Phoenix_MC/PhoenixContact_MC_1,5_9-GF-3.5_1x09_P3.50mm_Horizontal_ThreadedFlange","Connector_Phoenix_MC/PhoenixContact_MC_1,5_9-GF-3.5_1x09_P3.50mm_Horizontal_ThreadedFlange_MountHole","Connector_Phoenix_MC/PhoenixContact_MC_1,5_9-GF-3.81_1x09_P3.81mm_Horizontal_ThreadedFlange","Connector_Phoenix_MC/PhoenixContact_MC_1,5_9-GF-3.81_1x09_P3.81mm_Horizontal_ThreadedFlange_MountHole","Connector_Phoenix_MC_HighVoltage/PhoenixContact_MCV_1,5_10-G-5.08_1x10_P5.08mm_Vertical","Connector_Phoenix_MC_HighVoltage/PhoenixContact_MCV_1,5_10-GF-5.08_1x10_P5.08mm_Vertical_ThreadedFlange","Connector_Phoenix_MC_HighVoltage/PhoenixContact_MCV_1,5_10-GF-5.08_1x10_P5.08mm_Vertical_ThreadedFlange_MountHole","Connector_Phoenix_MC_HighVoltage/PhoenixContact_MCV_1,5_11-G-5.08_1x11_P5.08mm_Vertical","Connector_Phoenix_MC_HighVoltage/PhoenixContact_MCV_1,5_11-GF-5.08_1x11_P5.08mm_Vertical_ThreadedFlange","Connector_Phoenix_MC_HighVoltage/PhoenixContact_MCV_1,5_11-GF-5.08_1x11_P5.08mm_Vertical_ThreadedFlange_MountHole","Connector_Phoenix_MC_HighVoltage/PhoenixContact_MCV_1,5_12-G-5.08_1x12_P5.08mm_Vertical","Connector_Phoenix_MC_HighVoltage/PhoenixContact_MCV_1,5_12-GF-5.08_1x12_P5.08mm_Vertical_ThreadedFlange","Connector_Phoenix_MC_HighVoltage/PhoenixContact_MCV_1,5_12-GF-5.08_1x12_P5.08mm_Vertical_ThreadedFlange_MountHole","Connector_Phoenix_MC_HighVoltage/PhoenixContact_MCV_1,5_2-G-5.08_1x02_P5.08mm_Vertical","Connector_Phoenix_MC_HighVoltage/PhoenixContact_MCV_1,5_2-GF-5.08_1x02_P5.08mm_Vertical_ThreadedFlange","Connector_Phoenix_MC_HighVoltage/PhoenixContact_MCV_1,5_2-GF-5.08_1x02_P5.08mm_Vertical_ThreadedFlange_MountHole","Connector_Phoenix_MC_HighVoltage/PhoenixContact_MCV_1,5_3-G-5.08_1x03_P5.08mm_Vertical","Connector_Phoenix_MC_HighVoltage/PhoenixContact_MCV_1,5_3-GF-5.08_1x03_P5.08mm_Vertical_ThreadedFlange","Connector_Phoenix_MC_HighVoltage/PhoenixContact_MCV_1,5_3-GF-5.08_1x03_P5.08mm_Vertical_ThreadedFlange_MountHole","Connector_Phoenix_MC_HighVoltage/PhoenixContact_MCV_1,5_4-G-5.08_1x04_P5.08mm_Vertical","Connector_Phoenix_MC_HighVoltage/PhoenixContact_MCV_1,5_4-GF-5.08_1x04_P5.08mm_Vertical_ThreadedFlange","Connector_Phoenix_MC_HighVoltage/PhoenixContact_MCV_1,5_4-GF-5.08_1x04_P5.08mm_Vertical_ThreadedFlange_MountHole","Connector_Phoenix_MC_HighVoltage/PhoenixContact_MCV_1,5_5-G-5.08_1x05_P5.08mm_Vertical","Connector_Phoenix_MC_HighVoltage/PhoenixContact_MCV_1,5_5-GF-5.08_1x05_P5.08mm_Vertical_ThreadedFlange","Connector_Phoenix_MC_HighVoltage/PhoenixContact_MCV_1,5_5-GF-5.08_1x05_P5.08mm_Vertical_ThreadedFlange_MountHole","Connector_Phoenix_MC_HighVoltage/PhoenixContact_MCV_1,5_6-G-5.08_1x06_P5.08mm_Vertical","Connector_Phoenix_MC_HighVoltage/PhoenixContact_MCV_1,5_6-GF-5.08_1x06_P5.08mm_Vertical_ThreadedFlange","Connector_Phoenix_MC_HighVoltage/PhoenixContact_MCV_1,5_6-GF-5.08_1x06_P5.08mm_Vertical_ThreadedFlange_MountHole","Connector_Phoenix_MC_HighVoltage/PhoenixContact_MCV_1,5_7-G-5.08_1x07_P5.08mm_Vertical","Connector_Phoenix_MC_HighVoltage/PhoenixContact_MCV_1,5_7-GF-5.08_1x07_P5.08mm_Vertical_ThreadedFlange","Connector_Phoenix_MC_HighVoltage/PhoenixContact_MCV_1,5_7-GF-5.08_1x07_P5.08mm_Vertical_ThreadedFlange_MountHole","Connector_Phoenix_MC_HighVoltage/PhoenixContact_MCV_1,5_8-G-5.08_1x08_P5.08mm_Vertical","Connector_Phoenix_MC_HighVoltage/PhoenixContact_MCV_1,5_8-GF-5.08_1x08_P5.08mm_Vertical_ThreadedFlange","Connector_Phoenix_MC_HighVoltage/PhoenixContact_MCV_1,5_8-GF-5.08_1x08_P5.08mm_Vertical_ThreadedFlange_MountHole","Connector_Phoenix_MC_HighVoltage/PhoenixContact_MCV_1,5_9-G-5.08_1x09_P5.08mm_Vertical","Connector_Phoenix_MC_HighVoltage/PhoenixContact_MCV_1,5_9-GF-5.08_1x09_P5.08mm_Vertical_ThreadedFlange","Connector_Phoenix_MC_HighVoltage/PhoenixContact_MCV_1,5_9-GF-5.08_1x09_P5.08mm_Vertical_ThreadedFlange_MountHole","Connector_Phoenix_MC_HighVoltage/PhoenixContact_MC_1,5_10-G-5.08_1x10_P5.08mm_Horizontal","Connector_Phoenix_MC_HighVoltage/PhoenixContact_MC_1,5_10-GF-5.08_1x10_P5.08mm_Horizontal_ThreadedFlange","Connector_Phoenix_MC_HighVoltage/PhoenixContact_MC_1,5_10-GF-5.08_1x10_P5.08mm_Horizontal_ThreadedFlange_MountHole","Connector_Phoenix_MC_HighVoltage/PhoenixContact_MC_1,5_11-G-5.08_1x11_P5.08mm_Horizontal","Connector_Phoenix_MC_HighVoltage/PhoenixContact_MC_1,5_11-GF-5.08_1x11_P5.08mm_Horizontal_ThreadedFlange","Connector_Phoenix_MC_HighVoltage/PhoenixContact_MC_1,5_11-GF-5.08_1x11_P5.08mm_Horizontal_ThreadedFlange_MountHole","Connector_Phoenix_MC_HighVoltage/PhoenixContact_MC_1,5_12-G-5.08_1x12_P5.08mm_Horizontal","Connector_Phoenix_MC_HighVoltage/PhoenixContact_MC_1,5_12-GF-5.08_1x12_P5.08mm_Horizontal_ThreadedFlange","Connector_Phoenix_MC_HighVoltage/PhoenixContact_MC_1,5_12-GF-5.08_1x12_P5.08mm_Horizontal_ThreadedFlange_MountHole","Connector_Phoenix_MC_HighVoltage/PhoenixContact_MC_1,5_2-G-5.08_1x02_P5.08mm_Horizontal","Connector_Phoenix_MC_HighVoltage/PhoenixContact_MC_1,5_2-GF-5.08_1x02_P5.08mm_Horizontal_ThreadedFlange","Connector_Phoenix_MC_HighVoltage/PhoenixContact_MC_1,5_2-GF-5.08_1x02_P5.08mm_Horizontal_ThreadedFlange_MountHole","Connector_Phoenix_MC_HighVoltage/PhoenixContact_MC_1,5_3-G-5.08_1x03_P5.08mm_Horizontal","Connector_Phoenix_MC_HighVoltage/PhoenixContact_MC_1,5_3-GF-5.08_1x03_P5.08mm_Horizontal_ThreadedFlange","Connector_Phoenix_MC_HighVoltage/PhoenixContact_MC_1,5_3-GF-5.08_1x03_P5.08mm_Horizontal_ThreadedFlange_MountHole","Connector_Phoenix_MC_HighVoltage/PhoenixContact_MC_1,5_4-G-5.08_1x04_P5.08mm_Horizontal","Connector_Phoenix_MC_HighVoltage/PhoenixContact_MC_1,5_4-GF-5.08_1x04_P5.08mm_Horizontal_ThreadedFlange","Connector_Phoenix_MC_HighVoltage/PhoenixContact_MC_1,5_4-GF-5.08_1x04_P5.08mm_Horizontal_ThreadedFlange_MountHole","Connector_Phoenix_MC_HighVoltage/PhoenixContact_MC_1,5_5-G-5.08_1x05_P5.08mm_Horizontal","Connector_Phoenix_MC_HighVoltage/PhoenixContact_MC_1,5_5-GF-5.08_1x05_P5.08mm_Horizontal_ThreadedFlange","Connector_Phoenix_MC_HighVoltage/PhoenixContact_MC_1,5_5-GF-5.08_1x05_P5.08mm_Horizontal_ThreadedFlange_MountHole","Connector_Phoenix_MC_HighVoltage/PhoenixContact_MC_1,5_6-G-5.08_1x06_P5.08mm_Horizontal","Connector_Phoenix_MC_HighVoltage/PhoenixContact_MC_1,5_6-GF-5.08_1x06_P5.08mm_Horizontal_ThreadedFlange","Connector_Phoenix_MC_HighVoltage/PhoenixContact_MC_1,5_6-GF-5.08_1x06_P5.08mm_Horizontal_ThreadedFlange_MountHole","Connector_Phoenix_MC_HighVoltage/PhoenixContact_MC_1,5_7-G-5.08_1x07_P5.08mm_Horizontal","Connector_Phoenix_MC_HighVoltage/PhoenixContact_MC_1,5_7-GF-5.08_1x07_P5.08mm_Horizontal_ThreadedFlange","Connector_Phoenix_MC_HighVoltage/PhoenixContact_MC_1,5_7-GF-5.08_1x07_P5.08mm_Horizontal_ThreadedFlange_MountHole","Connector_Phoenix_MC_HighVoltage/PhoenixContact_MC_1,5_8-G-5.08_1x08_P5.08mm_Horizontal","Connector_Phoenix_MC_HighVoltage/PhoenixContact_MC_1,5_8-GF-5.08_1x08_P5.08mm_Horizontal_ThreadedFlange","Connector_Phoenix_MC_HighVoltage/PhoenixContact_MC_1,5_8-GF-5.08_1x08_P5.08mm_Horizontal_ThreadedFlange_MountHole","Connector_Phoenix_MC_HighVoltage/PhoenixContact_MC_1,5_9-G-5.08_1x09_P5.08mm_Horizontal","Connector_Phoenix_MC_HighVoltage/PhoenixContact_MC_1,5_9-GF-5.08_1x09_P5.08mm_Horizontal_ThreadedFlange","Connector_Phoenix_MC_HighVoltage/PhoenixContact_MC_1,5_9-GF-5.08_1x09_P5.08mm_Horizontal_ThreadedFlange_MountHole","Connector_Phoenix_MSTB/PhoenixContact_MSTBA_2,5_10-G-5,08_1x10_P5.08mm_Horizontal","Connector_Phoenix_MSTB/PhoenixContact_MSTBA_2,5_10-G_1x10_P5.00mm_Horizontal","Connector_Phoenix_MSTB/PhoenixContact_MSTBA_2,5_11-G-5,08_1x11_P5.08mm_Horizontal","Connector_Phoenix_MSTB/PhoenixContact_MSTBA_2,5_11-G_1x11_P5.00mm_Horizontal","Connector_Phoenix_MSTB/PhoenixContact_MSTBA_2,5_12-G-5,08_1x12_P5.08mm_Horizontal","Connector_Phoenix_MSTB/PhoenixContact_MSTBA_2,5_12-G_1x12_P5.00mm_Horizontal","Connector_Phoenix_MSTB/PhoenixContact_MSTBA_2,5_13-G-5,08_1x13_P5.08mm_Horizontal","Connector_Phoenix_MSTB/PhoenixContact_MSTBA_2,5_13-G_1x13_P5.00mm_Horizontal","Connector_Phoenix_MSTB/PhoenixContact_MSTBA_2,5_14-G-5,08_1x14_P5.08mm_Horizontal","Connector_Phoenix_MSTB/PhoenixContact_MSTBA_2,5_14-G_1x14_P5.00mm_Horizontal","Connector_Phoenix_MSTB/PhoenixContact_MSTBA_2,5_15-G-5,08_1x15_P5.08mm_Horizontal","Connector_Phoenix_MSTB/PhoenixContact_MSTBA_2,5_15-G_1x15_P5.00mm_Horizontal","Connector_Phoenix_MSTB/PhoenixContact_MSTBA_2,5_16-G-5,08_1x16_P5.08mm_Horizontal","Connector_Phoenix_MSTB/PhoenixContact_MSTBA_2,5_16-G_1x16_P5.00mm_Horizontal","Connector_Phoenix_MSTB/PhoenixContact_MSTBA_2,5_2-G-5,08_1x02_P5.08mm_Horizontal","Connector_Phoenix_MSTB/PhoenixContact_MSTBA_2,5_2-G_1x02_P5.00mm_Horizontal","Connector_Phoenix_MSTB/PhoenixContact_MSTBA_2,5_3-G-5,08_1x03_P5.08mm_Horizontal","Connector_Phoenix_MSTB/PhoenixContact_MSTBA_2,5_3-G_1x03_P5.00mm_Horizontal","Connector_Phoenix_MSTB/PhoenixContact_MSTBA_2,5_4-G-5,08_1x04_P5.08mm_Horizontal","Connector_Phoenix_MSTB/PhoenixContact_MSTBA_2,5_4-G_1x04_P5.00mm_Horizontal","Connector_Phoenix_MSTB/PhoenixContact_MSTBA_2,5_5-G-5,08_1x05_P5.08mm_Horizontal","Connector_Phoenix_MSTB/PhoenixContact_MSTBA_2,5_5-G_1x05_P5.00mm_Horizontal","Connector_Phoenix_MSTB/PhoenixContact_MSTBA_2,5_6-G-5,08_1x06_P5.08mm_Horizontal","Connector_Phoenix_MSTB/PhoenixContact_MSTBA_2,5_6-G_1x06_P5.00mm_Horizontal","Connector_Phoenix_MSTB/PhoenixContact_MSTBA_2,5_7-G-5,08_1x07_P5.08mm_Horizontal","Connector_Phoenix_MSTB/PhoenixContact_MSTBA_2,5_7-G_1x07_P5.00mm_Horizontal","Connector_Phoenix_MSTB/PhoenixContact_MSTBA_2,5_8-G-5,08_1x08_P5.08mm_Horizontal","Connector_Phoenix_MSTB/PhoenixContact_MSTBA_2,5_8-G_1x08_P5.00mm_Horizontal","Connector_Phoenix_MSTB/PhoenixContact_MSTBA_2,5_9-G-5,08_1x09_P5.08mm_Horizontal","Connector_Phoenix_MSTB/PhoenixContact_MSTBA_2,5_9-G_1x09_P5.00mm_Horizontal","Connector_Phoenix_MSTB/PhoenixContact_MSTBVA_2,5_10-G-5,08_1x10_P5.08mm_Vertical","Connector_Phoenix_MSTB/PhoenixContact_MSTBVA_2,5_10-G_1x10_P5.00mm_Vertical","Connector_Phoenix_MSTB/PhoenixContact_MSTBVA_2,5_11-G-5,08_1x11_P5.08mm_Vertical","Connector_Phoenix_MSTB/PhoenixContact_MSTBVA_2,5_11-G_1x11_P5.00mm_Vertical","Connector_Phoenix_MSTB/PhoenixContact_MSTBVA_2,5_12-G-5,08_1x12_P5.08mm_Vertical","Connector_Phoenix_MSTB/PhoenixContact_MSTBVA_2,5_12-G_1x12_P5.00mm_Vertical","Connector_Phoenix_MSTB/PhoenixContact_MSTBVA_2,5_13-G-5,08_1x13_P5.08mm_Vertical","Connector_Phoenix_MSTB/PhoenixContact_MSTBVA_2,5_13-G_1x13_P5.00mm_Vertical","Connector_Phoenix_MSTB/PhoenixContact_MSTBVA_2,5_14-G-5,08_1x14_P5.08mm_Vertical","Connector_Phoenix_MSTB/PhoenixContact_MSTBVA_2,5_14-G_1x14_P5.00mm_Vertical","Connector_Phoenix_MSTB/PhoenixContact_MSTBVA_2,5_15-G-5,08_1x15_P5.08mm_Vertical","Connector_Phoenix_MSTB/PhoenixContact_MSTBVA_2,5_15-G_1x15_P5.00mm_Vertical","Connector_Phoenix_MSTB/PhoenixContact_MSTBVA_2,5_16-G-5,08_1x16_P5.08mm_Vertical","Connector_Phoenix_MSTB/PhoenixContact_MSTBVA_2,5_16-G_1x16_P5.00mm_Vertical","Connector_Phoenix_MSTB/PhoenixContact_MSTBVA_2,5_2-G-5,08_1x02_P5.08mm_Vertical","Connector_Phoenix_MSTB/PhoenixContact_MSTBVA_2,5_2-G_1x02_P5.00mm_Vertical","Connector_Phoenix_MSTB/PhoenixContact_MSTBVA_2,5_3-G-5,08_1x03_P5.08mm_Vertical","Connector_Phoenix_MSTB/PhoenixContact_MSTBVA_2,5_3-G_1x03_P5.00mm_Vertical","Connector_Phoenix_MSTB/PhoenixContact_MSTBVA_2,5_4-G-5,08_1x04_P5.08mm_Vertical","Connector_Phoenix_MSTB/PhoenixContact_MSTBVA_2,5_4-G_1x04_P5.00mm_Vertical","Connector_Phoenix_MSTB/PhoenixContact_MSTBVA_2,5_5-G-5,08_1x05_P5.08mm_Vertical","Connector_Phoenix_MSTB/PhoenixContact_MSTBVA_2,5_5-G_1x05_P5.00mm_Vertical","Connector_Phoenix_MSTB/PhoenixContact_MSTBVA_2,5_6-G-5,08_1x06_P5.08mm_Vertical","Connector_Phoenix_MSTB/PhoenixContact_MSTBVA_2,5_6-G_1x06_P5.00mm_Vertical","Connector_Phoenix_MSTB/PhoenixContact_MSTBVA_2,5_7-G-5,08_1x07_P5.08mm_Vertical","Connector_Phoenix_MSTB/PhoenixContact_MSTBVA_2,5_7-G_1x07_P5.00mm_Vertical","Connector_Phoenix_MSTB/PhoenixContact_MSTBVA_2,5_8-G-5,08_1x08_P5.08mm_Vertical","Connector_Phoenix_MSTB/PhoenixContact_MSTBVA_2,5_8-G_1x08_P5.00mm_Vertical","Connector_Phoenix_MSTB/PhoenixContact_MSTBVA_2,5_9-G-5,08_1x09_P5.08mm_Vertical","Connector_Phoenix_MSTB/PhoenixContact_MSTBVA_2,5_9-G_1x09_P5.00mm_Vertical","Connector_Phoenix_MSTB/PhoenixContact_MSTBV_2,5_10-GF-5,08_1x10_P5.08mm_Vertical_ThreadedFlange","Connector_Phoenix_MSTB/PhoenixContact_MSTBV_2,5_10-GF-5,08_1x10_P5.08mm_Vertical_ThreadedFlange_MountHole","Connector_Phoenix_MSTB/PhoenixContact_MSTBV_2,5_10-GF_1x10_P5.00mm_Vertical_ThreadedFlange","Connector_Phoenix_MSTB/PhoenixContact_MSTBV_2,5_10-GF_1x10_P5.00mm_Vertical_ThreadedFlange_MountHole","Connector_Phoenix_MSTB/PhoenixContact_MSTBV_2,5_11-GF-5,08_1x11_P5.08mm_Vertical_ThreadedFlange","Connector_Phoenix_MSTB/PhoenixContact_MSTBV_2,5_11-GF-5,08_1x11_P5.08mm_Vertical_ThreadedFlange_MountHole","Connector_Phoenix_MSTB/PhoenixContact_MSTBV_2,5_11-GF_1x11_P5.00mm_Vertical_ThreadedFlange","Connector_Phoenix_MSTB/PhoenixContact_MSTBV_2,5_11-GF_1x11_P5.00mm_Vertical_ThreadedFlange_MountHole","Connector_Phoenix_MSTB/PhoenixContact_MSTBV_2,5_12-GF-5,08_1x12_P5.08mm_Vertical_ThreadedFlange","Connector_Phoenix_MSTB/PhoenixContact_MSTBV_2,5_12-GF-5,08_1x12_P5.08mm_Vertical_ThreadedFlange_MountHole","Connector_Phoenix_MSTB/PhoenixContact_MSTBV_2,5_12-GF_1x12_P5.00mm_Vertical_ThreadedFlange","Connector_Phoenix_MSTB/PhoenixContact_MSTBV_2,5_12-GF_1x12_P5.00mm_Vertical_ThreadedFlange_MountHole","Connector_Phoenix_MSTB/PhoenixContact_MSTBV_2,5_13-GF-5,08_1x13_P5.08mm_Vertical_ThreadedFlange","Connector_Phoenix_MSTB/PhoenixContact_MSTBV_2,5_13-GF-5,08_1x13_P5.08mm_Vertical_ThreadedFlange_MountHole","Connector_Phoenix_MSTB/PhoenixContact_MSTBV_2,5_13-GF_1x13_P5.00mm_Vertical_ThreadedFlange","Connector_Phoenix_MSTB/PhoenixContact_MSTBV_2,5_13-GF_1x13_P5.00mm_Vertical_ThreadedFlange_MountHole","Connector_Phoenix_MSTB/PhoenixContact_MSTBV_2,5_14-GF-5,08_1x14_P5.08mm_Vertical_ThreadedFlange","Connector_Phoenix_MSTB/PhoenixContact_MSTBV_2,5_14-GF-5,08_1x14_P5.08mm_Vertical_ThreadedFlange_MountHole","Connector_Phoenix_MSTB/PhoenixContact_MSTBV_2,5_14-GF_1x14_P5.00mm_Vertical_ThreadedFlange","Connector_Phoenix_MSTB/PhoenixContact_MSTBV_2,5_14-GF_1x14_P5.00mm_Vertical_ThreadedFlange_MountHole","Connector_Phoenix_MSTB/PhoenixContact_MSTBV_2,5_15-GF-5,08_1x15_P5.08mm_Vertical_ThreadedFlange","Connector_Phoenix_MSTB/PhoenixContact_MSTBV_2,5_15-GF-5,08_1x15_P5.08mm_Vertical_ThreadedFlange_MountHole","Connector_Phoenix_MSTB/PhoenixContact_MSTBV_2,5_15-GF_1x15_P5.00mm_Vertical_ThreadedFlange","Connector_Phoenix_MSTB/PhoenixContact_MSTBV_2,5_15-GF_1x15_P5.00mm_Vertical_ThreadedFlange_MountHole","Connector_Phoenix_MSTB/PhoenixContact_MSTBV_2,5_16-GF-5,08_1x16_P5.08mm_Vertical_ThreadedFlange","Connector_Phoenix_MSTB/PhoenixContact_MSTBV_2,5_16-GF-5,08_1x16_P5.08mm_Vertical_ThreadedFlange_MountHole","Connector_Phoenix_MSTB/PhoenixContact_MSTBV_2,5_16-GF_1x16_P5.00mm_Vertical_ThreadedFlange","Connector_Phoenix_MSTB/PhoenixContact_MSTBV_2,5_16-GF_1x16_P5.00mm_Vertical_ThreadedFlange_MountHole","Connector_Phoenix_MSTB/PhoenixContact_MSTBV_2,5_2-GF-5,08_1x02_P5.08mm_Vertical_ThreadedFlange","Connector_Phoenix_MSTB/PhoenixContact_MSTBV_2,5_2-GF-5,08_1x02_P5.08mm_Vertical_ThreadedFlange_MountHole","Connector_Phoenix_MSTB/PhoenixContact_MSTBV_2,5_2-GF_1x02_P5.00mm_Vertical_ThreadedFlange","Connector_Phoenix_MSTB/PhoenixContact_MSTBV_2,5_2-GF_1x02_P5.00mm_Vertical_ThreadedFlange_MountHole","Connector_Phoenix_MSTB/PhoenixContact_MSTBV_2,5_3-GF-5,08_1x03_P5.08mm_Vertical_ThreadedFlange","Connector_Phoenix_MSTB/PhoenixContact_MSTBV_2,5_3-GF-5,08_1x03_P5.08mm_Vertical_ThreadedFlange_MountHole","Connector_Phoenix_MSTB/PhoenixContact_MSTBV_2,5_3-GF_1x03_P5.00mm_Vertical_ThreadedFlange","Connector_Phoenix_MSTB/PhoenixContact_MSTBV_2,5_3-GF_1x03_P5.00mm_Vertical_ThreadedFlange_MountHole","Connector_Phoenix_MSTB/PhoenixContact_MSTBV_2,5_4-GF-5,08_1x04_P5.08mm_Vertical_ThreadedFlange","Connector_Phoenix_MSTB/PhoenixContact_MSTBV_2,5_4-GF-5,08_1x04_P5.08mm_Vertical_ThreadedFlange_MountHole","Connector_Phoenix_MSTB/PhoenixContact_MSTBV_2,5_4-GF_1x04_P5.00mm_Vertical_ThreadedFlange","Connector_Phoenix_MSTB/PhoenixContact_MSTBV_2,5_4-GF_1x04_P5.00mm_Vertical_ThreadedFlange_MountHole","Connector_Phoenix_MSTB/PhoenixContact_MSTBV_2,5_5-GF-5,08_1x05_P5.08mm_Vertical_ThreadedFlange","Connector_Phoenix_MSTB/PhoenixContact_MSTBV_2,5_5-GF-5,08_1x05_P5.08mm_Vertical_ThreadedFlange_MountHole","Connector_Phoenix_MSTB/PhoenixContact_MSTBV_2,5_5-GF_1x05_P5.00mm_Vertical_ThreadedFlange","Connector_Phoenix_MSTB/PhoenixContact_MSTBV_2,5_5-GF_1x05_P5.00mm_Vertical_ThreadedFlange_MountHole","Connector_Phoenix_MSTB/PhoenixContact_MSTBV_2,5_6-GF-5,08_1x06_P5.08mm_Vertical_ThreadedFlange","Connector_Phoenix_MSTB/PhoenixContact_MSTBV_2,5_6-GF-5,08_1x06_P5.08mm_Vertical_ThreadedFlange_MountHole","Connector_Phoenix_MSTB/PhoenixContact_MSTBV_2,5_6-GF_1x06_P5.00mm_Vertical_ThreadedFlange","Connector_Phoenix_MSTB/PhoenixContact_MSTBV_2,5_6-GF_1x06_P5.00mm_Vertical_ThreadedFlange_MountHole","Connector_Phoenix_MSTB/PhoenixContact_MSTBV_2,5_7-GF-5,08_1x07_P5.08mm_Vertical_ThreadedFlange","Connector_Phoenix_MSTB/PhoenixContact_MSTBV_2,5_7-GF-5,08_1x07_P5.08mm_Vertical_ThreadedFlange_MountHole","Connector_Phoenix_MSTB/PhoenixContact_MSTBV_2,5_7-GF_1x07_P5.00mm_Vertical_ThreadedFlange","Connector_Phoenix_MSTB/PhoenixContact_MSTBV_2,5_7-GF_1x07_P5.00mm_Vertical_ThreadedFlange_MountHole","Connector_Phoenix_MSTB/PhoenixContact_MSTBV_2,5_8-GF-5,08_1x08_P5.08mm_Vertical_ThreadedFlange","Connector_Phoenix_MSTB/PhoenixContact_MSTBV_2,5_8-GF-5,08_1x08_P5.08mm_Vertical_ThreadedFlange_MountHole","Connector_Phoenix_MSTB/PhoenixContact_MSTBV_2,5_8-GF_1x08_P5.00mm_Vertical_ThreadedFlange","Connector_Phoenix_MSTB/PhoenixContact_MSTBV_2,5_8-GF_1x08_P5.00mm_Vertical_ThreadedFlange_MountHole","Connector_Phoenix_MSTB/PhoenixContact_MSTBV_2,5_9-GF-5,08_1x09_P5.08mm_Vertical_ThreadedFlange","Connector_Phoenix_MSTB/PhoenixContact_MSTBV_2,5_9-GF-5,08_1x09_P5.08mm_Vertical_ThreadedFlange_MountHole","Connector_Phoenix_MSTB/PhoenixContact_MSTBV_2,5_9-GF_1x09_P5.00mm_Vertical_ThreadedFlange","Connector_Phoenix_MSTB/PhoenixContact_MSTBV_2,5_9-GF_1x09_P5.00mm_Vertical_ThreadedFlange_MountHole","Connector_Phoenix_MSTB/PhoenixContact_MSTB_2,5_10-GF-5,08_1x10_P5.08mm_Horizontal_ThreadedFlange","Connector_Phoenix_MSTB/PhoenixContact_MSTB_2,5_10-GF-5,08_1x10_P5.08mm_Horizontal_ThreadedFlange_MountHole","Connector_Phoenix_MSTB/PhoenixContact_MSTB_2,5_10-GF_1x10_P5.00mm_Horizontal_ThreadedFlange","Connector_Phoenix_MSTB/PhoenixContact_MSTB_2,5_10-GF_1x10_P5.00mm_Horizontal_ThreadedFlange_MountHole","Connector_Phoenix_MSTB/PhoenixContact_MSTB_2,5_11-GF-5,08_1x11_P5.08mm_Horizontal_ThreadedFlange","Connector_Phoenix_MSTB/PhoenixContact_MSTB_2,5_11-GF-5,08_1x11_P5.08mm_Horizontal_ThreadedFlange_MountHole","Connector_Phoenix_MSTB/PhoenixContact_MSTB_2,5_11-GF_1x11_P5.00mm_Horizontal_ThreadedFlange","Connector_Phoenix_MSTB/PhoenixContact_MSTB_2,5_11-GF_1x11_P5.00mm_Horizontal_ThreadedFlange_MountHole","Connector_Phoenix_MSTB/PhoenixContact_MSTB_2,5_12-GF-5,08_1x12_P5.08mm_Horizontal_ThreadedFlange","Connector_Phoenix_MSTB/PhoenixContact_MSTB_2,5_12-GF-5,08_1x12_P5.08mm_Horizontal_ThreadedFlange_MountHole","Connector_Phoenix_MSTB/PhoenixContact_MSTB_2,5_12-GF_1x12_P5.00mm_Horizontal_ThreadedFlange","Connector_Phoenix_MSTB/PhoenixContact_MSTB_2,5_12-GF_1x12_P5.00mm_Horizontal_ThreadedFlange_MountHole","Connector_Phoenix_MSTB/PhoenixContact_MSTB_2,5_13-GF-5,08_1x13_P5.08mm_Horizontal_ThreadedFlange","Connector_Phoenix_MSTB/PhoenixContact_MSTB_2,5_13-GF-5,08_1x13_P5.08mm_Horizontal_ThreadedFlange_MountHole","Connector_Phoenix_MSTB/PhoenixContact_MSTB_2,5_13-GF_1x13_P5.00mm_Horizontal_ThreadedFlange","Connector_Phoenix_MSTB/PhoenixContact_MSTB_2,5_13-GF_1x13_P5.00mm_Horizontal_ThreadedFlange_MountHole","Connector_Phoenix_MSTB/PhoenixContact_MSTB_2,5_14-GF-5,08_1x14_P5.08mm_Horizontal_ThreadedFlange","Connector_Phoenix_MSTB/PhoenixContact_MSTB_2,5_14-GF-5,08_1x14_P5.08mm_Horizontal_ThreadedFlange_MountHole","Connector_Phoenix_MSTB/PhoenixContact_MSTB_2,5_14-GF_1x14_P5.00mm_Horizontal_ThreadedFlange","Connector_Phoenix_MSTB/PhoenixContact_MSTB_2,5_14-GF_1x14_P5.00mm_Horizontal_ThreadedFlange_MountHole","Connector_Phoenix_MSTB/PhoenixContact_MSTB_2,5_15-GF-5,08_1x15_P5.08mm_Horizontal_ThreadedFlange","Connector_Phoenix_MSTB/PhoenixContact_MSTB_2,5_15-GF-5,08_1x15_P5.08mm_Horizontal_ThreadedFlange_MountHole","Connector_Phoenix_MSTB/PhoenixContact_MSTB_2,5_15-GF_1x15_P5.00mm_Horizontal_ThreadedFlange","Connector_Phoenix_MSTB/PhoenixContact_MSTB_2,5_15-GF_1x15_P5.00mm_Horizontal_ThreadedFlange_MountHole","Connector_Phoenix_MSTB/PhoenixContact_MSTB_2,5_16-GF-5,08_1x16_P5.08mm_Horizontal_ThreadedFlange","Connector_Phoenix_MSTB/PhoenixContact_MSTB_2,5_16-GF-5,08_1x16_P5.08mm_Horizontal_ThreadedFlange_MountHole","Connector_Phoenix_MSTB/PhoenixContact_MSTB_2,5_16-GF_1x16_P5.00mm_Horizontal_ThreadedFlange","Connector_Phoenix_MSTB/PhoenixContact_MSTB_2,5_16-GF_1x16_P5.00mm_Horizontal_ThreadedFlange_MountHole","Connector_Phoenix_MSTB/PhoenixContact_MSTB_2,5_2-GF-5,08_1x02_P5.08mm_Horizontal_ThreadedFlange","Connector_Phoenix_MSTB/PhoenixContact_MSTB_2,5_2-GF-5,08_1x02_P5.08mm_Horizontal_ThreadedFlange_MountHole","Connector_Phoenix_MSTB/PhoenixContact_MSTB_2,5_2-GF_1x02_P5.00mm_Horizontal_ThreadedFlange","Connector_Phoenix_MSTB/PhoenixContact_MSTB_2,5_2-GF_1x02_P5.00mm_Horizontal_ThreadedFlange_MountHole","Connector_Phoenix_MSTB/PhoenixContact_MSTB_2,5_3-GF-5,08_1x03_P5.08mm_Horizontal_ThreadedFlange","Connector_Phoenix_MSTB/PhoenixContact_MSTB_2,5_3-GF-5,08_1x03_P5.08mm_Horizontal_ThreadedFlange_MountHole","Connector_Phoenix_MSTB/PhoenixContact_MSTB_2,5_3-GF_1x03_P5.00mm_Horizontal_ThreadedFlange","Connector_Phoenix_MSTB/PhoenixContact_MSTB_2,5_3-GF_1x03_P5.00mm_Horizontal_ThreadedFlange_MountHole","Connector_Phoenix_MSTB/PhoenixContact_MSTB_2,5_4-GF-5,08_1x04_P5.08mm_Horizontal_ThreadedFlange","Connector_Phoenix_MSTB/PhoenixContact_MSTB_2,5_4-GF-5,08_1x04_P5.08mm_Horizontal_ThreadedFlange_MountHole","Connector_Phoenix_MSTB/PhoenixContact_MSTB_2,5_4-GF_1x04_P5.00mm_Horizontal_ThreadedFlange","Connector_Phoenix_MSTB/PhoenixContact_MSTB_2,5_4-GF_1x04_P5.00mm_Horizontal_ThreadedFlange_MountHole","Connector_Phoenix_MSTB/PhoenixContact_MSTB_2,5_5-GF-5,08_1x05_P5.08mm_Horizontal_ThreadedFlange","Connector_Phoenix_MSTB/PhoenixContact_MSTB_2,5_5-GF-5,08_1x05_P5.08mm_Horizontal_ThreadedFlange_MountHole","Connector_Phoenix_MSTB/PhoenixContact_MSTB_2,5_5-GF_1x05_P5.00mm_Horizontal_ThreadedFlange","Connector_Phoenix_MSTB/PhoenixContact_MSTB_2,5_5-GF_1x05_P5.00mm_Horizontal_ThreadedFlange_MountHole","Connector_Phoenix_MSTB/PhoenixContact_MSTB_2,5_6-GF-5,08_1x06_P5.08mm_Horizontal_ThreadedFlange","Connector_Phoenix_MSTB/PhoenixContact_MSTB_2,5_6-GF-5,08_1x06_P5.08mm_Horizontal_ThreadedFlange_MountHole","Connector_Phoenix_MSTB/PhoenixContact_MSTB_2,5_6-GF_1x06_P5.00mm_Horizontal_ThreadedFlange","Connector_Phoenix_MSTB/PhoenixContact_MSTB_2,5_6-GF_1x06_P5.00mm_Horizontal_ThreadedFlange_MountHole","Connector_Phoenix_MSTB/PhoenixContact_MSTB_2,5_7-GF-5,08_1x07_P5.08mm_Horizontal_ThreadedFlange","Connector_Phoenix_MSTB/PhoenixContact_MSTB_2,5_7-GF-5,08_1x07_P5.08mm_Horizontal_ThreadedFlange_MountHole","Connector_Phoenix_MSTB/PhoenixContact_MSTB_2,5_7-GF_1x07_P5.00mm_Horizontal_ThreadedFlange","Connector_Phoenix_MSTB/PhoenixContact_MSTB_2,5_7-GF_1x07_P5.00mm_Horizontal_ThreadedFlange_MountHole","Connector_Phoenix_MSTB/PhoenixContact_MSTB_2,5_8-GF-5,08_1x08_P5.08mm_Horizontal_ThreadedFlange","Connector_Phoenix_MSTB/PhoenixContact_MSTB_2,5_8-GF-5,08_1x08_P5.08mm_Horizontal_ThreadedFlange_MountHole","Connector_Phoenix_MSTB/PhoenixContact_MSTB_2,5_8-GF_1x08_P5.00mm_Horizontal_ThreadedFlange","Connector_Phoenix_MSTB/PhoenixContact_MSTB_2,5_8-GF_1x08_P5.00mm_Horizontal_ThreadedFlange_MountHole","Connector_Phoenix_MSTB/PhoenixContact_MSTB_2,5_9-GF-5,08_1x09_P5.08mm_Horizontal_ThreadedFlange","Connector_Phoenix_MSTB/PhoenixContact_MSTB_2,5_9-GF-5,08_1x09_P5.08mm_Horizontal_ThreadedFlange_MountHole","Connector_Phoenix_MSTB/PhoenixContact_MSTB_2,5_9-GF_1x09_P5.00mm_Horizontal_ThreadedFlange","Connector_Phoenix_MSTB/PhoenixContact_MSTB_2,5_9-GF_1x09_P5.00mm_Horizontal_ThreadedFlange_MountHole","Connector_Phoenix_SPT/PhoenixContact_SPT_1.5_10-H-3.5_1x10_P3.5mm_Horizontal","Connector_Phoenix_SPT/PhoenixContact_SPT_1.5_11-H-3.5_1x11_P3.5mm_Horizontal","Connector_Phoenix_SPT/PhoenixContact_SPT_1.5_12-H-3.5_1x12_P3.5mm_Horizontal","Connector_Phoenix_SPT/PhoenixContact_SPT_1.5_2-H-3.5_1x02_P3.5mm_Horizontal","Connector_Phoenix_SPT/PhoenixContact_SPT_1.5_3-H-3.5_1x03_P3.5mm_Horizontal","Connector_Phoenix_SPT/PhoenixContact_SPT_1.5_4-H-3.5_1x04_P3.5mm_Horizontal","Connector_Phoenix_SPT/PhoenixContact_SPT_1.5_5-H-3.5_1x05_P3.5mm_Horizontal","Connector_Phoenix_SPT/PhoenixContact_SPT_1.5_6-H-3.5_1x06_P3.5mm_Horizontal","Connector_Phoenix_SPT/PhoenixContact_SPT_1.5_7-H-3.5_1x07_P3.5mm_Horizontal","Connector_Phoenix_SPT/PhoenixContact_SPT_1.5_8-H-3.5_1x08_P3.5mm_Horizontal","Connector_Phoenix_SPT/PhoenixContact_SPT_1.5_9-H-3.5_1x09_P3.5mm_Horizontal","Connector_Phoenix_SPT/PhoenixContact_SPT_2.5_1-H-5.0_1x01_P5.0mm_Horizontal","Connector_Phoenix_SPT/PhoenixContact_SPT_2.5_10-H-5.0-EX_1x10_P5.0mm_Horizontal","Connector_Phoenix_SPT/PhoenixContact_SPT_2.5_10-H-5.0_1x10_P5.0mm_Horizontal","Connector_Phoenix_SPT/PhoenixContact_SPT_2.5_10-V-5.0-EX_1x10_P5.0mm_Vertical","Connector_Phoenix_SPT/PhoenixContact_SPT_2.5_11-H-5.0-EX_1x11_P5.0mm_Horizontal","Connector_Phoenix_SPT/PhoenixContact_SPT_2.5_11-H-5.0_1x11_P5.0mm_Horizontal","Connector_Phoenix_SPT/PhoenixContact_SPT_2.5_11-V-5.0-EX_1x11_P5.0mm_Vertical","Connector_Phoenix_SPT/PhoenixContact_SPT_2.5_12-H-5.0-EX_1x12_P5.0mm_Horizontal","Connector_Phoenix_SPT/PhoenixContact_SPT_2.5_12-H-5.0_1x12_P5.0mm_Horizontal","Connector_Phoenix_SPT/PhoenixContact_SPT_2.5_12-V-5.0-EX_1x12_P5.0mm_Vertical","Connector_Phoenix_SPT/PhoenixContact_SPT_2.5_2-H-5.0-EX_1x02_P5.0mm_Horizontal","Connector_Phoenix_SPT/PhoenixContact_SPT_2.5_2-H-5.0_1x02_P5.0mm_Horizontal","Connector_Phoenix_SPT/PhoenixContact_SPT_2.5_2-V-5.0-EX_1x02_P5.0mm_Vertical","Connector_Phoenix_SPT/PhoenixContact_SPT_2.5_3-H-5.0-EX_1x03_P5.0mm_Horizontal","Connector_Phoenix_SPT/PhoenixContact_SPT_2.5_3-H-5.0_1x03_P5.0mm_Horizontal","Connector_Phoenix_SPT/PhoenixContact_SPT_2.5_3-V-5.0-EX_1x03_P5.0mm_Vertical","Connector_Phoenix_SPT/PhoenixContact_SPT_2.5_4-H-5.0-EX_1x04_P5.0mm_Horizontal","Connector_Phoenix_SPT/PhoenixContact_SPT_2.5_4-H-5.0_1x04_P5.0mm_Horizontal","Connector_Phoenix_SPT/PhoenixContact_SPT_2.5_4-V-5.0-EX_1x04_P5.0mm_Vertical","Connector_Phoenix_SPT/PhoenixContact_SPT_2.5_5-H-5.0-EX_1x05_P5.0mm_Horizontal","Connector_Phoenix_SPT/PhoenixContact_SPT_2.5_5-H-5.0_1x05_P5.0mm_Horizontal","Connector_Phoenix_SPT/PhoenixContact_SPT_2.5_5-V-5.0-EX_1x05_P5.0mm_Vertical","Connector_Phoenix_SPT/PhoenixContact_SPT_2.5_6-H-5.0-EX_1x06_P5.0mm_Horizontal","Connector_Phoenix_SPT/PhoenixContact_SPT_2.5_6-H-5.0_1x06_P5.0mm_Horizontal","Connector_Phoenix_SPT/PhoenixContact_SPT_2.5_6-V-5.0-EX_1x06_P5.0mm_Vertical","Connector_Phoenix_SPT/PhoenixContact_SPT_2.5_7-H-5.0-EX_1x07_P5.0mm_Horizontal","Connector_Phoenix_SPT/PhoenixContact_SPT_2.5_7-H-5.0_1x07_P5.0mm_Horizontal","Connector_Phoenix_SPT/PhoenixContact_SPT_2.5_7-V-5.0-EX_1x07_P5.0mm_Vertical","Connector_Phoenix_SPT/PhoenixContact_SPT_2.5_8-H-5.0-EX_1x08_P5.0mm_Horizontal","Connector_Phoenix_SPT/PhoenixContact_SPT_2.5_8-H-5.0_1x08_P5.0mm_Horizontal","Connector_Phoenix_SPT/PhoenixContact_SPT_2.5_8-V-5.0-EX_1x08_P5.0mm_Vertical","Connector_Phoenix_SPT/PhoenixContact_SPT_2.5_9-H-5.0-EX_1x09_P5.0mm_Horizontal","Connector_Phoenix_SPT/PhoenixContact_SPT_2.5_9-H-5.0_1x09_P5.0mm_Horizontal","Connector_Phoenix_SPT/PhoenixContact_SPT_2.5_9-V-5.0-EX_1x09_P5.0mm_Vertical","Connector_Phoenix_SPT/PhoenixContact_SPT_5_1-H-7.5_1x01_P7.5mm_Horizontal","Connector_Phoenix_SPT/PhoenixContact_SPT_5_1-V-7.5_1x01_P7.5mm_Vertical","Connector_Phoenix_SPT/PhoenixContact_SPT_5_10-H-7.5-ZB_1x10_P7.5mm_Horizontal","Connector_Phoenix_SPT/PhoenixContact_SPT_5_10-V-7.5-ZB_1x10_P7.5mm_Vertical","Connector_Phoenix_SPT/PhoenixContact_SPT_5_11-H-7.5-ZB_1x11_P7.5mm_Horizontal","Connector_Phoenix_SPT/PhoenixContact_SPT_5_11-V-7.5-ZB_1x11_P7.5mm_Vertical","Connector_Phoenix_SPT/PhoenixContact_SPT_5_12-H-7.5-ZB_1x12_P7.5mm_Horizontal","Connector_Phoenix_SPT/PhoenixContact_SPT_5_12-V-7.5-ZB_1x12_P7.5mm_Vertical","Connector_Phoenix_SPT/PhoenixContact_SPT_5_2-H-7.5-ZB_1x02_P7.5mm_Horizontal","Connector_Phoenix_SPT/PhoenixContact_SPT_5_2-V-7.5_1x02_P7.5mm_Vertical","Connector_Phoenix_SPT/PhoenixContact_SPT_5_3-H-7.5-ZB_1x03_P7.5mm_Horizontal","Connector_Phoenix_SPT/PhoenixContact_SPT_5_3-H-7.5_1x03_P7.5mm_Horizontal","Connector_Phoenix_SPT/PhoenixContact_SPT_5_3-V-7.5-ZB_1x03_P7.5mm_Vertical","Connector_Phoenix_SPT/PhoenixContact_SPT_5_4-H-7.5-ZB_1x04_P7.5mm_Horizontal","Connector_Phoenix_SPT/PhoenixContact_SPT_5_5-H-7.5-ZB_1x05_P7.5mm_Horizontal","Connector_Phoenix_SPT/PhoenixContact_SPT_5_5-V-7.5-ZB_1x05_P7.5mm_Vertical","Connector_Phoenix_SPT/PhoenixContact_SPT_5_6-H-7.5-ZB_1x06_P7.5mm_Horizontal","Connector_Phoenix_SPT/PhoenixContact_SPT_5_6-V-7.5-ZB_1x06_P7.5mm_Vertical","Connector_Phoenix_SPT/PhoenixContact_SPT_5_7-H-7.5-ZB_1x07_P7.5mm_Horizontal","Connector_Phoenix_SPT/PhoenixContact_SPT_5_7-V-7.5-ZB_1x07_P7.5mm_Vertical","Connector_Phoenix_SPT/PhoenixContact_SPT_5_8-H-7.5-ZB_1x08_P7.5mm_Horizontal","Connector_Phoenix_SPT/PhoenixContact_SPT_5_8-V-7.5-ZB_1x08_P7.5mm_Vertical","Connector_Phoenix_SPT/PhoenixContact_SPT_5_9-H-7.5-ZB_1x09_P7.5mm_Horizontal","Connector_Phoenix_SPT/PhoenixContact_SPT_5_9-V-7.5-ZB_1x09_P7.5mm_Vertical","Connector_Pin/Pin_D0.7mm_L6.5mm_W1.8mm_FlatFork","Connector_Pin/Pin_D0.9mm_L10.0mm_W2.4mm_FlatFork","Connector_Pin/Pin_D1.0mm_L10.0mm","Connector_Pin/Pin_D1.0mm_L10.0mm_LooseFit","Connector_Pin/Pin_D1.1mm_L10.2mm_W3.5mm_Flat","Connector_Pin/Pin_D1.1mm_L8.5mm_W2.5mm_FlatFork","Connector_Pin/Pin_D1.2mm_L10.2mm_W2.9mm_FlatFork","Connector_Pin/Pin_D1.2mm_L11.3mm_W3.0mm_Flat","Connector_Pin/Pin_D1.3mm_L10.0mm_W3.5mm_Flat","Connector_Pin/Pin_D1.3mm_L11.0mm","Connector_Pin/Pin_D1.3mm_L11.0mm_LooseFit","Connector_Pin/Pin_D1.3mm_L11.3mm_W2.8mm_Flat","Connector_Pin/Pin_D1.4mm_L8.5mm_W2.8mm_FlatFork","Connector_PinHeader_1.00mm/PinHeader_1x01_P1.00mm_Horizontal","Connector_PinHeader_1.00mm/PinHeader_1x01_P1.00mm_Vertical","Connector_PinHeader_1.00mm/PinHeader_1x02_P1.00mm_Horizontal","Connector_PinHeader_1.00mm/PinHeader_1x02_P1.00mm_Vertical","Connector_PinHeader_1.00mm/PinHeader_1x02_P1.00mm_Vertical_SMD_Pin1Left","Connector_PinHeader_1.00mm/PinHeader_1x02_P1.00mm_Vertical_SMD_Pin1Right","Connector_PinHeader_1.00mm/PinHeader_1x03_P1.00mm_Horizontal","Connector_PinHeader_1.00mm/PinHeader_1x03_P1.00mm_Vertical","Connector_PinHeader_1.00mm/PinHeader_1x03_P1.00mm_Vertical_SMD_Pin1Left","Connector_PinHeader_1.00mm/PinHeader_1x03_P1.00mm_Vertical_SMD_Pin1Right","Connector_PinHeader_1.00mm/PinHeader_1x04_P1.00mm_Horizontal","Connector_PinHeader_1.00mm/PinHeader_1x04_P1.00mm_Vertical","Connector_PinHeader_1.00mm/PinHeader_1x04_P1.00mm_Vertical_SMD_Pin1Left","Connector_PinHeader_1.00mm/PinHeader_1x04_P1.00mm_Vertical_SMD_Pin1Right","Connector_PinHeader_1.00mm/PinHeader_1x05_P1.00mm_Horizontal","Connector_PinHeader_1.00mm/PinHeader_1x05_P1.00mm_Vertical","Connector_PinHeader_1.00mm/PinHeader_1x05_P1.00mm_Vertical_SMD_Pin1Left","Connector_PinHeader_1.00mm/PinHeader_1x05_P1.00mm_Vertical_SMD_Pin1Right","Connector_PinHeader_1.00mm/PinHeader_1x06_P1.00mm_Horizontal","Connector_PinHeader_1.00mm/PinHeader_1x06_P1.00mm_Vertical","Connector_PinHeader_1.00mm/PinHeader_1x06_P1.00mm_Vertical_SMD_Pin1Left","Connector_PinHeader_1.00mm/PinHeader_1x06_P1.00mm_Vertical_SMD_Pin1Right","Connector_PinHeader_1.00mm/PinHeader_1x07_P1.00mm_Horizontal","Connector_PinHeader_1.00mm/PinHeader_1x07_P1.00mm_Vertical","Connector_PinHeader_1.00mm/PinHeader_1x07_P1.00mm_Vertical_SMD_Pin1Left","Connector_PinHeader_1.00mm/PinHeader_1x07_P1.00mm_Vertical_SMD_Pin1Right","Connector_PinHeader_1.00mm/PinHeader_1x08_P1.00mm_Horizontal","Connector_PinHeader_1.00mm/PinHeader_1x08_P1.00mm_Vertical","Connector_PinHeader_1.00mm/PinHeader_1x08_P1.00mm_Vertical_SMD_Pin1Left","Connector_PinHeader_1.00mm/PinHeader_1x08_P1.00mm_Vertical_SMD_Pin1Right","Connector_PinHeader_1.00mm/PinHeader_1x09_P1.00mm_Horizontal","Connector_PinHeader_1.00mm/PinHeader_1x09_P1.00mm_Vertical","Connector_PinHeader_1.00mm/PinHeader_1x09_P1.00mm_Vertical_SMD_Pin1Left","Connector_PinHeader_1.00mm/PinHeader_1x09_P1.00mm_Vertical_SMD_Pin1Right","Connector_PinHeader_1.00mm/PinHeader_1x10_P1.00mm_Horizontal","Connector_PinHeader_1.00mm/PinHeader_1x10_P1.00mm_Vertical","Connector_PinHeader_1.00mm/PinHeader_1x10_P1.00mm_Vertical_SMD_Pin1Left","Connector_PinHeader_1.00mm/PinHeader_1x10_P1.00mm_Vertical_SMD_Pin1Right","Connector_PinHeader_1.00mm/PinHeader_1x11_P1.00mm_Horizontal","Connector_PinHeader_1.00mm/PinHeader_1x11_P1.00mm_Vertical","Connector_PinHeader_1.00mm/PinHeader_1x11_P1.00mm_Vertical_SMD_Pin1Left","Connector_PinHeader_1.00mm/PinHeader_1x11_P1.00mm_Vertical_SMD_Pin1Right","Connector_PinHeader_1.00mm/PinHeader_1x12_P1.00mm_Horizontal","Connector_PinHeader_1.00mm/PinHeader_1x12_P1.00mm_Vertical","Connector_PinHeader_1.00mm/PinHeader_1x12_P1.00mm_Vertical_SMD_Pin1Left","Connector_PinHeader_1.00mm/PinHeader_1x12_P1.00mm_Vertical_SMD_Pin1Right","Connector_PinHeader_1.00mm/PinHeader_1x13_P1.00mm_Horizontal","Connector_PinHeader_1.00mm/PinHeader_1x13_P1.00mm_Vertical","Connector_PinHeader_1.00mm/PinHeader_1x13_P1.00mm_Vertical_SMD_Pin1Left","Connector_PinHeader_1.00mm/PinHeader_1x13_P1.00mm_Vertical_SMD_Pin1Right","Connector_PinHeader_1.00mm/PinHeader_1x14_P1.00mm_Horizontal","Connector_PinHeader_1.00mm/PinHeader_1x14_P1.00mm_Vertical","Connector_PinHeader_1.00mm/PinHeader_1x14_P1.00mm_Vertical_SMD_Pin1Left","Connector_PinHeader_1.00mm/PinHeader_1x14_P1.00mm_Vertical_SMD_Pin1Right","Connector_PinHeader_1.00mm/PinHeader_1x15_P1.00mm_Horizontal","Connector_PinHeader_1.00mm/PinHeader_1x15_P1.00mm_Vertical","Connector_PinHeader_1.00mm/PinHeader_1x15_P1.00mm_Vertical_SMD_Pin1Left","Connector_PinHeader_1.00mm/PinHeader_1x15_P1.00mm_Vertical_SMD_Pin1Right","Connector_PinHeader_1.00mm/PinHeader_1x16_P1.00mm_Horizontal","Connector_PinHeader_1.00mm/PinHeader_1x16_P1.00mm_Vertical","Connector_PinHeader_1.00mm/PinHeader_1x16_P1.00mm_Vertical_SMD_Pin1Left","Connector_PinHeader_1.00mm/PinHeader_1x16_P1.00mm_Vertical_SMD_Pin1Right","Connector_PinHeader_1.00mm/PinHeader_1x17_P1.00mm_Horizontal","Connector_PinHeader_1.00mm/PinHeader_1x17_P1.00mm_Vertical","Connector_PinHeader_1.00mm/PinHeader_1x17_P1.00mm_Vertical_SMD_Pin1Left","Connector_PinHeader_1.00mm/PinHeader_1x17_P1.00mm_Vertical_SMD_Pin1Right","Connector_PinHeader_1.00mm/PinHeader_1x18_P1.00mm_Horizontal","Connector_PinHeader_1.00mm/PinHeader_1x18_P1.00mm_Vertical","Connector_PinHeader_1.00mm/PinHeader_1x18_P1.00mm_Vertical_SMD_Pin1Left","Connector_PinHeader_1.00mm/PinHeader_1x18_P1.00mm_Vertical_SMD_Pin1Right","Connector_PinHeader_1.00mm/PinHeader_1x19_P1.00mm_Horizontal","Connector_PinHeader_1.00mm/PinHeader_1x19_P1.00mm_Vertical","Connector_PinHeader_1.00mm/PinHeader_1x19_P1.00mm_Vertical_SMD_Pin1Left","Connector_PinHeader_1.00mm/PinHeader_1x19_P1.00mm_Vertical_SMD_Pin1Right","Connector_PinHeader_1.00mm/PinHeader_1x20_P1.00mm_Horizontal","Connector_PinHeader_1.00mm/PinHeader_1x20_P1.00mm_Vertical","Connector_PinHeader_1.00mm/PinHeader_1x20_P1.00mm_Vertical_SMD_Pin1Left","Connector_PinHeader_1.00mm/PinHeader_1x20_P1.00mm_Vertical_SMD_Pin1Right","Connector_PinHeader_1.00mm/PinHeader_1x21_P1.00mm_Horizontal","Connector_PinHeader_1.00mm/PinHeader_1x21_P1.00mm_Vertical","Connector_PinHeader_1.00mm/PinHeader_1x21_P1.00mm_Vertical_SMD_Pin1Left","Connector_PinHeader_1.00mm/PinHeader_1x21_P1.00mm_Vertical_SMD_Pin1Right","Connector_PinHeader_1.00mm/PinHeader_1x22_P1.00mm_Horizontal","Connector_PinHeader_1.00mm/PinHeader_1x22_P1.00mm_Vertical","Connector_PinHeader_1.00mm/PinHeader_1x22_P1.00mm_Vertical_SMD_Pin1Left","Connector_PinHeader_1.00mm/PinHeader_1x22_P1.00mm_Vertical_SMD_Pin1Right","Connector_PinHeader_1.00mm/PinHeader_1x23_P1.00mm_Horizontal","Connector_PinHeader_1.00mm/PinHeader_1x23_P1.00mm_Vertical","Connector_PinHeader_1.00mm/PinHeader_1x23_P1.00mm_Vertical_SMD_Pin1Left","Connector_PinHeader_1.00mm/PinHeader_1x23_P1.00mm_Vertical_SMD_Pin1Right","Connector_PinHeader_1.00mm/PinHeader_1x24_P1.00mm_Horizontal","Connector_PinHeader_1.00mm/PinHeader_1x24_P1.00mm_Vertical","Connector_PinHeader_1.00mm/PinHeader_1x24_P1.00mm_Vertical_SMD_Pin1Left","Connector_PinHeader_1.00mm/PinHeader_1x24_P1.00mm_Vertical_SMD_Pin1Right","Connector_PinHeader_1.00mm/PinHeader_1x25_P1.00mm_Horizontal","Connector_PinHeader_1.00mm/PinHeader_1x25_P1.00mm_Vertical","Connector_PinHeader_1.00mm/PinHeader_1x25_P1.00mm_Vertical_SMD_Pin1Left","Connector_PinHeader_1.00mm/PinHeader_1x25_P1.00mm_Vertical_SMD_Pin1Right","Connector_PinHeader_1.00mm/PinHeader_1x26_P1.00mm_Horizontal","Connector_PinHeader_1.00mm/PinHeader_1x26_P1.00mm_Vertical","Connector_PinHeader_1.00mm/PinHeader_1x26_P1.00mm_Vertical_SMD_Pin1Left","Connector_PinHeader_1.00mm/PinHeader_1x26_P1.00mm_Vertical_SMD_Pin1Right","Connector_PinHeader_1.00mm/PinHeader_1x27_P1.00mm_Horizontal","Connector_PinHeader_1.00mm/PinHeader_1x27_P1.00mm_Vertical","Connector_PinHeader_1.00mm/PinHeader_1x27_P1.00mm_Vertical_SMD_Pin1Left","Connector_PinHeader_1.00mm/PinHeader_1x27_P1.00mm_Vertical_SMD_Pin1Right","Connector_PinHeader_1.00mm/PinHeader_1x28_P1.00mm_Horizontal","Connector_PinHeader_1.00mm/PinHeader_1x28_P1.00mm_Vertical","Connector_PinHeader_1.00mm/PinHeader_1x28_P1.00mm_Vertical_SMD_Pin1Left","Connector_PinHeader_1.00mm/PinHeader_1x28_P1.00mm_Vertical_SMD_Pin1Right","Connector_PinHeader_1.00mm/PinHeader_1x29_P1.00mm_Horizontal","Connector_PinHeader_1.00mm/PinHeader_1x29_P1.00mm_Vertical","Connector_PinHeader_1.00mm/PinHeader_1x29_P1.00mm_Vertical_SMD_Pin1Left","Connector_PinHeader_1.00mm/PinHeader_1x29_P1.00mm_Vertical_SMD_Pin1Right","Connector_PinHeader_1.00mm/PinHeader_1x30_P1.00mm_Horizontal","Connector_PinHeader_1.00mm/PinHeader_1x30_P1.00mm_Vertical","Connector_PinHeader_1.00mm/PinHeader_1x30_P1.00mm_Vertical_SMD_Pin1Left","Connector_PinHeader_1.00mm/PinHeader_1x30_P1.00mm_Vertical_SMD_Pin1Right","Connector_PinHeader_1.00mm/PinHeader_1x31_P1.00mm_Horizontal","Connector_PinHeader_1.00mm/PinHeader_1x31_P1.00mm_Vertical","Connector_PinHeader_1.00mm/PinHeader_1x31_P1.00mm_Vertical_SMD_Pin1Left","Connector_PinHeader_1.00mm/PinHeader_1x31_P1.00mm_Vertical_SMD_Pin1Right","Connector_PinHeader_1.00mm/PinHeader_1x32_P1.00mm_Horizontal","Connector_PinHeader_1.00mm/PinHeader_1x32_P1.00mm_Vertical","Connector_PinHeader_1.00mm/PinHeader_1x32_P1.00mm_Vertical_SMD_Pin1Left","Connector_PinHeader_1.00mm/PinHeader_1x32_P1.00mm_Vertical_SMD_Pin1Right","Connector_PinHeader_1.00mm/PinHeader_1x33_P1.00mm_Horizontal","Connector_PinHeader_1.00mm/PinHeader_1x33_P1.00mm_Vertical","Connector_PinHeader_1.00mm/PinHeader_1x33_P1.00mm_Vertical_SMD_Pin1Left","Connector_PinHeader_1.00mm/PinHeader_1x33_P1.00mm_Vertical_SMD_Pin1Right","Connector_PinHeader_1.00mm/PinHeader_1x34_P1.00mm_Horizontal","Connector_PinHeader_1.00mm/PinHeader_1x34_P1.00mm_Vertical","Connector_PinHeader_1.00mm/PinHeader_1x34_P1.00mm_Vertical_SMD_Pin1Left","Connector_PinHeader_1.00mm/PinHeader_1x34_P1.00mm_Vertical_SMD_Pin1Right","Connector_PinHeader_1.00mm/PinHeader_1x35_P1.00mm_Horizontal","Connector_PinHeader_1.00mm/PinHeader_1x35_P1.00mm_Vertical","Connector_PinHeader_1.00mm/PinHeader_1x35_P1.00mm_Vertical_SMD_Pin1Left","Connector_PinHeader_1.00mm/PinHeader_1x35_P1.00mm_Vertical_SMD_Pin1Right","Connector_PinHeader_1.00mm/PinHeader_1x36_P1.00mm_Horizontal","Connector_PinHeader_1.00mm/PinHeader_1x36_P1.00mm_Vertical","Connector_PinHeader_1.00mm/PinHeader_1x36_P1.00mm_Vertical_SMD_Pin1Left","Connector_PinHeader_1.00mm/PinHeader_1x36_P1.00mm_Vertical_SMD_Pin1Right","Connector_PinHeader_1.00mm/PinHeader_1x37_P1.00mm_Horizontal","Connector_PinHeader_1.00mm/PinHeader_1x37_P1.00mm_Vertical","Connector_PinHeader_1.00mm/PinHeader_1x37_P1.00mm_Vertical_SMD_Pin1Left","Connector_PinHeader_1.00mm/PinHeader_1x37_P1.00mm_Vertical_SMD_Pin1Right","Connector_PinHeader_1.00mm/PinHeader_1x38_P1.00mm_Horizontal","Connector_PinHeader_1.00mm/PinHeader_1x38_P1.00mm_Vertical","Connector_PinHeader_1.00mm/PinHeader_1x38_P1.00mm_Vertical_SMD_Pin1Left","Connector_PinHeader_1.00mm/PinHeader_1x38_P1.00mm_Vertical_SMD_Pin1Right","Connector_PinHeader_1.00mm/PinHeader_1x39_P1.00mm_Horizontal","Connector_PinHeader_1.00mm/PinHeader_1x39_P1.00mm_Vertical","Connector_PinHeader_1.00mm/PinHeader_1x39_P1.00mm_Vertical_SMD_Pin1Left","Connector_PinHeader_1.00mm/PinHeader_1x39_P1.00mm_Vertical_SMD_Pin1Right","Connector_PinHeader_1.00mm/PinHeader_1x40_P1.00mm_Horizontal","Connector_PinHeader_1.00mm/PinHeader_1x40_P1.00mm_Vertical","Connector_PinHeader_1.00mm/PinHeader_1x40_P1.00mm_Vertical_SMD_Pin1Left","Connector_PinHeader_1.00mm/PinHeader_1x40_P1.00mm_Vertical_SMD_Pin1Right","Connector_PinHeader_1.00mm/PinHeader_2x01_P1.00mm_Horizontal","Connector_PinHeader_1.00mm/PinHeader_2x01_P1.00mm_Vertical","Connector_PinHeader_1.00mm/PinHeader_2x01_P1.00mm_Vertical_SMD","Connector_PinHeader_1.00mm/PinHeader_2x02_P1.00mm_Horizontal","Connector_PinHeader_1.00mm/PinHeader_2x02_P1.00mm_Vertical","Connector_PinHeader_1.00mm/PinHeader_2x02_P1.00mm_Vertical_SMD","Connector_PinHeader_1.00mm/PinHeader_2x03_P1.00mm_Horizontal","Connector_PinHeader_1.00mm/PinHeader_2x03_P1.00mm_Vertical","Connector_PinHeader_1.00mm/PinHeader_2x03_P1.00mm_Vertical_SMD","Connector_PinHeader_1.00mm/PinHeader_2x04_P1.00mm_Horizontal","Connector_PinHeader_1.00mm/PinHeader_2x04_P1.00mm_Vertical","Connector_PinHeader_1.00mm/PinHeader_2x04_P1.00mm_Vertical_SMD","Connector_PinHeader_1.00mm/PinHeader_2x05_P1.00mm_Horizontal","Connector_PinHeader_1.00mm/PinHeader_2x05_P1.00mm_Vertical","Connector_PinHeader_1.00mm/PinHeader_2x05_P1.00mm_Vertical_SMD","Connector_PinHeader_1.00mm/PinHeader_2x06_P1.00mm_Horizontal","Connector_PinHeader_1.00mm/PinHeader_2x06_P1.00mm_Vertical","Connector_PinHeader_1.00mm/PinHeader_2x06_P1.00mm_Vertical_SMD","Connector_PinHeader_1.00mm/PinHeader_2x07_P1.00mm_Horizontal","Connector_PinHeader_1.00mm/PinHeader_2x07_P1.00mm_Vertical","Connector_PinHeader_1.00mm/PinHeader_2x07_P1.00mm_Vertical_SMD","Connector_PinHeader_1.00mm/PinHeader_2x08_P1.00mm_Horizontal","Connector_PinHeader_1.00mm/PinHeader_2x08_P1.00mm_Vertical","Connector_PinHeader_1.00mm/PinHeader_2x08_P1.00mm_Vertical_SMD","Connector_PinHeader_1.00mm/PinHeader_2x09_P1.00mm_Horizontal","Connector_PinHeader_1.00mm/PinHeader_2x09_P1.00mm_Vertical","Connector_PinHeader_1.00mm/PinHeader_2x09_P1.00mm_Vertical_SMD","Connector_PinHeader_1.00mm/PinHeader_2x10_P1.00mm_Horizontal","Connector_PinHeader_1.00mm/PinHeader_2x10_P1.00mm_Vertical","Connector_PinHeader_1.00mm/PinHeader_2x10_P1.00mm_Vertical_SMD","Connector_PinHeader_1.00mm/PinHeader_2x11_P1.00mm_Horizontal","Connector_PinHeader_1.00mm/PinHeader_2x11_P1.00mm_Vertical","Connector_PinHeader_1.00mm/PinHeader_2x11_P1.00mm_Vertical_SMD","Connector_PinHeader_1.00mm/PinHeader_2x12_P1.00mm_Horizontal","Connector_PinHeader_1.00mm/PinHeader_2x12_P1.00mm_Vertical","Connector_PinHeader_1.00mm/PinHeader_2x12_P1.00mm_Vertical_SMD","Connector_PinHeader_1.00mm/PinHeader_2x13_P1.00mm_Horizontal","Connector_PinHeader_1.00mm/PinHeader_2x13_P1.00mm_Vertical","Connector_PinHeader_1.00mm/PinHeader_2x13_P1.00mm_Vertical_SMD","Connector_PinHeader_1.00mm/PinHeader_2x14_P1.00mm_Horizontal","Connector_PinHeader_1.00mm/PinHeader_2x14_P1.00mm_Vertical","Connector_PinHeader_1.00mm/PinHeader_2x14_P1.00mm_Vertical_SMD","Connector_PinHeader_1.00mm/PinHeader_2x15_P1.00mm_Horizontal","Connector_PinHeader_1.00mm/PinHeader_2x15_P1.00mm_Vertical","Connector_PinHeader_1.00mm/PinHeader_2x15_P1.00mm_Vertical_SMD","Connector_PinHeader_1.00mm/PinHeader_2x16_P1.00mm_Horizontal","Connector_PinHeader_1.00mm/PinHeader_2x16_P1.00mm_Vertical","Connector_PinHeader_1.00mm/PinHeader_2x16_P1.00mm_Vertical_SMD","Connector_PinHeader_1.00mm/PinHeader_2x17_P1.00mm_Horizontal","Connector_PinHeader_1.00mm/PinHeader_2x17_P1.00mm_Vertical","Connector_PinHeader_1.00mm/PinHeader_2x17_P1.00mm_Vertical_SMD","Connector_PinHeader_1.00mm/PinHeader_2x18_P1.00mm_Horizontal","Connector_PinHeader_1.00mm/PinHeader_2x18_P1.00mm_Vertical","Connector_PinHeader_1.00mm/PinHeader_2x18_P1.00mm_Vertical_SMD","Connector_PinHeader_1.00mm/PinHeader_2x19_P1.00mm_Horizontal","Connector_PinHeader_1.00mm/PinHeader_2x19_P1.00mm_Vertical","Connector_PinHeader_1.00mm/PinHeader_2x19_P1.00mm_Vertical_SMD","Connector_PinHeader_1.00mm/PinHeader_2x20_P1.00mm_Horizontal","Connector_PinHeader_1.00mm/PinHeader_2x20_P1.00mm_Vertical","Connector_PinHeader_1.00mm/PinHeader_2x20_P1.00mm_Vertical_SMD","Connector_PinHeader_1.00mm/PinHeader_2x21_P1.00mm_Horizontal","Connector_PinHeader_1.00mm/PinHeader_2x21_P1.00mm_Vertical","Connector_PinHeader_1.00mm/PinHeader_2x21_P1.00mm_Vertical_SMD","Connector_PinHeader_1.00mm/PinHeader_2x22_P1.00mm_Horizontal","Connector_PinHeader_1.00mm/PinHeader_2x22_P1.00mm_Vertical","Connector_PinHeader_1.00mm/PinHeader_2x22_P1.00mm_Vertical_SMD","Connector_PinHeader_1.00mm/PinHeader_2x23_P1.00mm_Horizontal","Connector_PinHeader_1.00mm/PinHeader_2x23_P1.00mm_Vertical","Connector_PinHeader_1.00mm/PinHeader_2x23_P1.00mm_Vertical_SMD","Connector_PinHeader_1.00mm/PinHeader_2x24_P1.00mm_Horizontal","Connector_PinHeader_1.00mm/PinHeader_2x24_P1.00mm_Vertical","Connector_PinHeader_1.00mm/PinHeader_2x24_P1.00mm_Vertical_SMD","Connector_PinHeader_1.00mm/PinHeader_2x25_P1.00mm_Horizontal","Connector_PinHeader_1.00mm/PinHeader_2x25_P1.00mm_Vertical","Connector_PinHeader_1.00mm/PinHeader_2x25_P1.00mm_Vertical_SMD","Connector_PinHeader_1.00mm/PinHeader_2x26_P1.00mm_Horizontal","Connector_PinHeader_1.00mm/PinHeader_2x26_P1.00mm_Vertical","Connector_PinHeader_1.00mm/PinHeader_2x26_P1.00mm_Vertical_SMD","Connector_PinHeader_1.00mm/PinHeader_2x27_P1.00mm_Horizontal","Connector_PinHeader_1.00mm/PinHeader_2x27_P1.00mm_Vertical","Connector_PinHeader_1.00mm/PinHeader_2x27_P1.00mm_Vertical_SMD","Connector_PinHeader_1.00mm/PinHeader_2x28_P1.00mm_Horizontal","Connector_PinHeader_1.00mm/PinHeader_2x28_P1.00mm_Vertical","Connector_PinHeader_1.00mm/PinHeader_2x28_P1.00mm_Vertical_SMD","Connector_PinHeader_1.00mm/PinHeader_2x29_P1.00mm_Horizontal","Connector_PinHeader_1.00mm/PinHeader_2x29_P1.00mm_Vertical","Connector_PinHeader_1.00mm/PinHeader_2x29_P1.00mm_Vertical_SMD","Connector_PinHeader_1.00mm/PinHeader_2x30_P1.00mm_Horizontal","Connector_PinHeader_1.00mm/PinHeader_2x30_P1.00mm_Vertical","Connector_PinHeader_1.00mm/PinHeader_2x30_P1.00mm_Vertical_SMD","Connector_PinHeader_1.00mm/PinHeader_2x31_P1.00mm_Horizontal","Connector_PinHeader_1.00mm/PinHeader_2x31_P1.00mm_Vertical","Connector_PinHeader_1.00mm/PinHeader_2x31_P1.00mm_Vertical_SMD","Connector_PinHeader_1.00mm/PinHeader_2x32_P1.00mm_Horizontal","Connector_PinHeader_1.00mm/PinHeader_2x32_P1.00mm_Vertical","Connector_PinHeader_1.00mm/PinHeader_2x32_P1.00mm_Vertical_SMD","Connector_PinHeader_1.00mm/PinHeader_2x33_P1.00mm_Horizontal","Connector_PinHeader_1.00mm/PinHeader_2x33_P1.00mm_Vertical","Connector_PinHeader_1.00mm/PinHeader_2x33_P1.00mm_Vertical_SMD","Connector_PinHeader_1.00mm/PinHeader_2x34_P1.00mm_Horizontal","Connector_PinHeader_1.00mm/PinHeader_2x34_P1.00mm_Vertical","Connector_PinHeader_1.00mm/PinHeader_2x34_P1.00mm_Vertical_SMD","Connector_PinHeader_1.00mm/PinHeader_2x35_P1.00mm_Horizontal","Connector_PinHeader_1.00mm/PinHeader_2x35_P1.00mm_Vertical","Connector_PinHeader_1.00mm/PinHeader_2x35_P1.00mm_Vertical_SMD","Connector_PinHeader_1.00mm/PinHeader_2x36_P1.00mm_Horizontal","Connector_PinHeader_1.00mm/PinHeader_2x36_P1.00mm_Vertical","Connector_PinHeader_1.00mm/PinHeader_2x36_P1.00mm_Vertical_SMD","Connector_PinHeader_1.00mm/PinHeader_2x37_P1.00mm_Horizontal","Connector_PinHeader_1.00mm/PinHeader_2x37_P1.00mm_Vertical","Connector_PinHeader_1.00mm/PinHeader_2x37_P1.00mm_Vertical_SMD","Connector_PinHeader_1.00mm/PinHeader_2x38_P1.00mm_Horizontal","Connector_PinHeader_1.00mm/PinHeader_2x38_P1.00mm_Vertical","Connector_PinHeader_1.00mm/PinHeader_2x38_P1.00mm_Vertical_SMD","Connector_PinHeader_1.00mm/PinHeader_2x39_P1.00mm_Horizontal","Connector_PinHeader_1.00mm/PinHeader_2x39_P1.00mm_Vertical","Connector_PinHeader_1.00mm/PinHeader_2x39_P1.00mm_Vertical_SMD","Connector_PinHeader_1.00mm/PinHeader_2x40_P1.00mm_Horizontal","Connector_PinHeader_1.00mm/PinHeader_2x40_P1.00mm_Vertical","Connector_PinHeader_1.00mm/PinHeader_2x40_P1.00mm_Vertical_SMD","Connector_PinHeader_1.27mm/PinHeader_1x01_P1.27mm_Horizontal","Connector_PinHeader_1.27mm/PinHeader_1x01_P1.27mm_Vertical","Connector_PinHeader_1.27mm/PinHeader_1x02_P1.27mm_Horizontal","Connector_PinHeader_1.27mm/PinHeader_1x02_P1.27mm_Vertical","Connector_PinHeader_1.27mm/PinHeader_1x02_P1.27mm_Vertical_SMD_Pin1Left","Connector_PinHeader_1.27mm/PinHeader_1x02_P1.27mm_Vertical_SMD_Pin1Right","Connector_PinHeader_1.27mm/PinHeader_1x03_P1.27mm_Horizontal","Connector_PinHeader_1.27mm/PinHeader_1x03_P1.27mm_Vertical","Connector_PinHeader_1.27mm/PinHeader_1x03_P1.27mm_Vertical_SMD_Pin1Left","Connector_PinHeader_1.27mm/PinHeader_1x03_P1.27mm_Vertical_SMD_Pin1Right","Connector_PinHeader_1.27mm/PinHeader_1x04_P1.27mm_Horizontal","Connector_PinHeader_1.27mm/PinHeader_1x04_P1.27mm_Vertical","Connector_PinHeader_1.27mm/PinHeader_1x04_P1.27mm_Vertical_SMD_Pin1Left","Connector_PinHeader_1.27mm/PinHeader_1x04_P1.27mm_Vertical_SMD_Pin1Right","Connector_PinHeader_1.27mm/PinHeader_1x05_P1.27mm_Horizontal","Connector_PinHeader_1.27mm/PinHeader_1x05_P1.27mm_Vertical","Connector_PinHeader_1.27mm/PinHeader_1x05_P1.27mm_Vertical_SMD_Pin1Left","Connector_PinHeader_1.27mm/PinHeader_1x05_P1.27mm_Vertical_SMD_Pin1Right","Connector_PinHeader_1.27mm/PinHeader_1x06_P1.27mm_Horizontal","Connector_PinHeader_1.27mm/PinHeader_1x06_P1.27mm_Vertical","Connector_PinHeader_1.27mm/PinHeader_1x06_P1.27mm_Vertical_SMD_Pin1Left","Connector_PinHeader_1.27mm/PinHeader_1x06_P1.27mm_Vertical_SMD_Pin1Right","Connector_PinHeader_1.27mm/PinHeader_1x07_P1.27mm_Horizontal","Connector_PinHeader_1.27mm/PinHeader_1x07_P1.27mm_Vertical","Connector_PinHeader_1.27mm/PinHeader_1x07_P1.27mm_Vertical_SMD_Pin1Left","Connector_PinHeader_1.27mm/PinHeader_1x07_P1.27mm_Vertical_SMD_Pin1Right","Connector_PinHeader_1.27mm/PinHeader_1x08_P1.27mm_Horizontal","Connector_PinHeader_1.27mm/PinHeader_1x08_P1.27mm_Vertical","Connector_PinHeader_1.27mm/PinHeader_1x08_P1.27mm_Vertical_SMD_Pin1Left","Connector_PinHeader_1.27mm/PinHeader_1x08_P1.27mm_Vertical_SMD_Pin1Right","Connector_PinHeader_1.27mm/PinHeader_1x09_P1.27mm_Horizontal","Connector_PinHeader_1.27mm/PinHeader_1x09_P1.27mm_Vertical","Connector_PinHeader_1.27mm/PinHeader_1x09_P1.27mm_Vertical_SMD_Pin1Left","Connector_PinHeader_1.27mm/PinHeader_1x09_P1.27mm_Vertical_SMD_Pin1Right","Connector_PinHeader_1.27mm/PinHeader_1x10_P1.27mm_Horizontal","Connector_PinHeader_1.27mm/PinHeader_1x10_P1.27mm_Vertical","Connector_PinHeader_1.27mm/PinHeader_1x10_P1.27mm_Vertical_SMD_Pin1Left","Connector_PinHeader_1.27mm/PinHeader_1x10_P1.27mm_Vertical_SMD_Pin1Right","Connector_PinHeader_1.27mm/PinHeader_1x11_P1.27mm_Horizontal","Connector_PinHeader_1.27mm/PinHeader_1x11_P1.27mm_Vertical","Connector_PinHeader_1.27mm/PinHeader_1x11_P1.27mm_Vertical_SMD_Pin1Left","Connector_PinHeader_1.27mm/PinHeader_1x11_P1.27mm_Vertical_SMD_Pin1Right","Connector_PinHeader_1.27mm/PinHeader_1x12_P1.27mm_Horizontal","Connector_PinHeader_1.27mm/PinHeader_1x12_P1.27mm_Vertical","Connector_PinHeader_1.27mm/PinHeader_1x12_P1.27mm_Vertical_SMD_Pin1Left","Connector_PinHeader_1.27mm/PinHeader_1x12_P1.27mm_Vertical_SMD_Pin1Right","Connector_PinHeader_1.27mm/PinHeader_1x13_P1.27mm_Horizontal","Connector_PinHeader_1.27mm/PinHeader_1x13_P1.27mm_Vertical","Connector_PinHeader_1.27mm/PinHeader_1x13_P1.27mm_Vertical_SMD_Pin1Left","Connector_PinHeader_1.27mm/PinHeader_1x13_P1.27mm_Vertical_SMD_Pin1Right","Connector_PinHeader_1.27mm/PinHeader_1x14_P1.27mm_Horizontal","Connector_PinHeader_1.27mm/PinHeader_1x14_P1.27mm_Vertical","Connector_PinHeader_1.27mm/PinHeader_1x14_P1.27mm_Vertical_SMD_Pin1Left","Connector_PinHeader_1.27mm/PinHeader_1x14_P1.27mm_Vertical_SMD_Pin1Right","Connector_PinHeader_1.27mm/PinHeader_1x15_P1.27mm_Horizontal","Connector_PinHeader_1.27mm/PinHeader_1x15_P1.27mm_Vertical","Connector_PinHeader_1.27mm/PinHeader_1x15_P1.27mm_Vertical_SMD_Pin1Left","Connector_PinHeader_1.27mm/PinHeader_1x15_P1.27mm_Vertical_SMD_Pin1Right","Connector_PinHeader_1.27mm/PinHeader_1x16_P1.27mm_Horizontal","Connector_PinHeader_1.27mm/PinHeader_1x16_P1.27mm_Vertical","Connector_PinHeader_1.27mm/PinHeader_1x16_P1.27mm_Vertical_SMD_Pin1Left","Connector_PinHeader_1.27mm/PinHeader_1x16_P1.27mm_Vertical_SMD_Pin1Right","Connector_PinHeader_1.27mm/PinHeader_1x17_P1.27mm_Horizontal","Connector_PinHeader_1.27mm/PinHeader_1x17_P1.27mm_Vertical","Connector_PinHeader_1.27mm/PinHeader_1x17_P1.27mm_Vertical_SMD_Pin1Left","Connector_PinHeader_1.27mm/PinHeader_1x17_P1.27mm_Vertical_SMD_Pin1Right","Connector_PinHeader_1.27mm/PinHeader_1x18_P1.27mm_Horizontal","Connector_PinHeader_1.27mm/PinHeader_1x18_P1.27mm_Vertical","Connector_PinHeader_1.27mm/PinHeader_1x18_P1.27mm_Vertical_SMD_Pin1Left","Connector_PinHeader_1.27mm/PinHeader_1x18_P1.27mm_Vertical_SMD_Pin1Right","Connector_PinHeader_1.27mm/PinHeader_1x19_P1.27mm_Horizontal","Connector_PinHeader_1.27mm/PinHeader_1x19_P1.27mm_Vertical","Connector_PinHeader_1.27mm/PinHeader_1x19_P1.27mm_Vertical_SMD_Pin1Left","Connector_PinHeader_1.27mm/PinHeader_1x19_P1.27mm_Vertical_SMD_Pin1Right","Connector_PinHeader_1.27mm/PinHeader_1x20_P1.27mm_Horizontal","Connector_PinHeader_1.27mm/PinHeader_1x20_P1.27mm_Vertical","Connector_PinHeader_1.27mm/PinHeader_1x20_P1.27mm_Vertical_SMD_Pin1Left","Connector_PinHeader_1.27mm/PinHeader_1x20_P1.27mm_Vertical_SMD_Pin1Right","Connector_PinHeader_1.27mm/PinHeader_1x21_P1.27mm_Horizontal","Connector_PinHeader_1.27mm/PinHeader_1x21_P1.27mm_Vertical","Connector_PinHeader_1.27mm/PinHeader_1x21_P1.27mm_Vertical_SMD_Pin1Left","Connector_PinHeader_1.27mm/PinHeader_1x21_P1.27mm_Vertical_SMD_Pin1Right","Connector_PinHeader_1.27mm/PinHeader_1x22_P1.27mm_Horizontal","Connector_PinHeader_1.27mm/PinHeader_1x22_P1.27mm_Vertical","Connector_PinHeader_1.27mm/PinHeader_1x22_P1.27mm_Vertical_SMD_Pin1Left","Connector_PinHeader_1.27mm/PinHeader_1x22_P1.27mm_Vertical_SMD_Pin1Right","Connector_PinHeader_1.27mm/PinHeader_1x23_P1.27mm_Horizontal","Connector_PinHeader_1.27mm/PinHeader_1x23_P1.27mm_Vertical","Connector_PinHeader_1.27mm/PinHeader_1x23_P1.27mm_Vertical_SMD_Pin1Left","Connector_PinHeader_1.27mm/PinHeader_1x23_P1.27mm_Vertical_SMD_Pin1Right","Connector_PinHeader_1.27mm/PinHeader_1x24_P1.27mm_Horizontal","Connector_PinHeader_1.27mm/PinHeader_1x24_P1.27mm_Vertical","Connector_PinHeader_1.27mm/PinHeader_1x24_P1.27mm_Vertical_SMD_Pin1Left","Connector_PinHeader_1.27mm/PinHeader_1x24_P1.27mm_Vertical_SMD_Pin1Right","Connector_PinHeader_1.27mm/PinHeader_1x25_P1.27mm_Horizontal","Connector_PinHeader_1.27mm/PinHeader_1x25_P1.27mm_Vertical","Connector_PinHeader_1.27mm/PinHeader_1x25_P1.27mm_Vertical_SMD_Pin1Left","Connector_PinHeader_1.27mm/PinHeader_1x25_P1.27mm_Vertical_SMD_Pin1Right","Connector_PinHeader_1.27mm/PinHeader_1x26_P1.27mm_Horizontal","Connector_PinHeader_1.27mm/PinHeader_1x26_P1.27mm_Vertical","Connector_PinHeader_1.27mm/PinHeader_1x26_P1.27mm_Vertical_SMD_Pin1Left","Connector_PinHeader_1.27mm/PinHeader_1x26_P1.27mm_Vertical_SMD_Pin1Right","Connector_PinHeader_1.27mm/PinHeader_1x27_P1.27mm_Horizontal","Connector_PinHeader_1.27mm/PinHeader_1x27_P1.27mm_Vertical","Connector_PinHeader_1.27mm/PinHeader_1x27_P1.27mm_Vertical_SMD_Pin1Left","Connector_PinHeader_1.27mm/PinHeader_1x27_P1.27mm_Vertical_SMD_Pin1Right","Connector_PinHeader_1.27mm/PinHeader_1x28_P1.27mm_Horizontal","Connector_PinHeader_1.27mm/PinHeader_1x28_P1.27mm_Vertical","Connector_PinHeader_1.27mm/PinHeader_1x28_P1.27mm_Vertical_SMD_Pin1Left","Connector_PinHeader_1.27mm/PinHeader_1x28_P1.27mm_Vertical_SMD_Pin1Right","Connector_PinHeader_1.27mm/PinHeader_1x29_P1.27mm_Horizontal","Connector_PinHeader_1.27mm/PinHeader_1x29_P1.27mm_Vertical","Connector_PinHeader_1.27mm/PinHeader_1x29_P1.27mm_Vertical_SMD_Pin1Left","Connector_PinHeader_1.27mm/PinHeader_1x29_P1.27mm_Vertical_SMD_Pin1Right","Connector_PinHeader_1.27mm/PinHeader_1x30_P1.27mm_Horizontal","Connector_PinHeader_1.27mm/PinHeader_1x30_P1.27mm_Vertical","Connector_PinHeader_1.27mm/PinHeader_1x30_P1.27mm_Vertical_SMD_Pin1Left","Connector_PinHeader_1.27mm/PinHeader_1x30_P1.27mm_Vertical_SMD_Pin1Right","Connector_PinHeader_1.27mm/PinHeader_1x31_P1.27mm_Horizontal","Connector_PinHeader_1.27mm/PinHeader_1x31_P1.27mm_Vertical","Connector_PinHeader_1.27mm/PinHeader_1x31_P1.27mm_Vertical_SMD_Pin1Left","Connector_PinHeader_1.27mm/PinHeader_1x31_P1.27mm_Vertical_SMD_Pin1Right","Connector_PinHeader_1.27mm/PinHeader_1x32_P1.27mm_Horizontal","Connector_PinHeader_1.27mm/PinHeader_1x32_P1.27mm_Vertical","Connector_PinHeader_1.27mm/PinHeader_1x32_P1.27mm_Vertical_SMD_Pin1Left","Connector_PinHeader_1.27mm/PinHeader_1x32_P1.27mm_Vertical_SMD_Pin1Right","Connector_PinHeader_1.27mm/PinHeader_1x33_P1.27mm_Horizontal","Connector_PinHeader_1.27mm/PinHeader_1x33_P1.27mm_Vertical","Connector_PinHeader_1.27mm/PinHeader_1x33_P1.27mm_Vertical_SMD_Pin1Left","Connector_PinHeader_1.27mm/PinHeader_1x33_P1.27mm_Vertical_SMD_Pin1Right","Connector_PinHeader_1.27mm/PinHeader_1x34_P1.27mm_Horizontal","Connector_PinHeader_1.27mm/PinHeader_1x34_P1.27mm_Vertical","Connector_PinHeader_1.27mm/PinHeader_1x34_P1.27mm_Vertical_SMD_Pin1Left","Connector_PinHeader_1.27mm/PinHeader_1x34_P1.27mm_Vertical_SMD_Pin1Right","Connector_PinHeader_1.27mm/PinHeader_1x35_P1.27mm_Horizontal","Connector_PinHeader_1.27mm/PinHeader_1x35_P1.27mm_Vertical","Connector_PinHeader_1.27mm/PinHeader_1x35_P1.27mm_Vertical_SMD_Pin1Left","Connector_PinHeader_1.27mm/PinHeader_1x35_P1.27mm_Vertical_SMD_Pin1Right","Connector_PinHeader_1.27mm/PinHeader_1x36_P1.27mm_Horizontal","Connector_PinHeader_1.27mm/PinHeader_1x36_P1.27mm_Vertical","Connector_PinHeader_1.27mm/PinHeader_1x36_P1.27mm_Vertical_SMD_Pin1Left","Connector_PinHeader_1.27mm/PinHeader_1x36_P1.27mm_Vertical_SMD_Pin1Right","Connector_PinHeader_1.27mm/PinHeader_1x37_P1.27mm_Horizontal","Connector_PinHeader_1.27mm/PinHeader_1x37_P1.27mm_Vertical","Connector_PinHeader_1.27mm/PinHeader_1x37_P1.27mm_Vertical_SMD_Pin1Left","Connector_PinHeader_1.27mm/PinHeader_1x37_P1.27mm_Vertical_SMD_Pin1Right","Connector_PinHeader_1.27mm/PinHeader_1x38_P1.27mm_Horizontal","Connector_PinHeader_1.27mm/PinHeader_1x38_P1.27mm_Vertical","Connector_PinHeader_1.27mm/PinHeader_1x38_P1.27mm_Vertical_SMD_Pin1Left","Connector_PinHeader_1.27mm/PinHeader_1x38_P1.27mm_Vertical_SMD_Pin1Right","Connector_PinHeader_1.27mm/PinHeader_1x39_P1.27mm_Horizontal","Connector_PinHeader_1.27mm/PinHeader_1x39_P1.27mm_Vertical","Connector_PinHeader_1.27mm/PinHeader_1x39_P1.27mm_Vertical_SMD_Pin1Left","Connector_PinHeader_1.27mm/PinHeader_1x39_P1.27mm_Vertical_SMD_Pin1Right","Connector_PinHeader_1.27mm/PinHeader_1x40_P1.27mm_Horizontal","Connector_PinHeader_1.27mm/PinHeader_1x40_P1.27mm_Vertical","Connector_PinHeader_1.27mm/PinHeader_1x40_P1.27mm_Vertical_SMD_Pin1Left","Connector_PinHeader_1.27mm/PinHeader_1x40_P1.27mm_Vertical_SMD_Pin1Right","Connector_PinHeader_1.27mm/PinHeader_2x01_P1.27mm_Horizontal","Connector_PinHeader_1.27mm/PinHeader_2x01_P1.27mm_Vertical","Connector_PinHeader_1.27mm/PinHeader_2x01_P1.27mm_Vertical_SMD","Connector_PinHeader_1.27mm/PinHeader_2x02_P1.27mm_Horizontal","Connector_PinHeader_1.27mm/PinHeader_2x02_P1.27mm_Vertical","Connector_PinHeader_1.27mm/PinHeader_2x02_P1.27mm_Vertical_SMD","Connector_PinHeader_1.27mm/PinHeader_2x03_P1.27mm_Horizontal","Connector_PinHeader_1.27mm/PinHeader_2x03_P1.27mm_Vertical","Connector_PinHeader_1.27mm/PinHeader_2x03_P1.27mm_Vertical_SMD","Connector_PinHeader_1.27mm/PinHeader_2x04_P1.27mm_Horizontal","Connector_PinHeader_1.27mm/PinHeader_2x04_P1.27mm_Vertical","Connector_PinHeader_1.27mm/PinHeader_2x04_P1.27mm_Vertical_SMD","Connector_PinHeader_1.27mm/PinHeader_2x05_P1.27mm_Horizontal","Connector_PinHeader_1.27mm/PinHeader_2x05_P1.27mm_Vertical","Connector_PinHeader_1.27mm/PinHeader_2x05_P1.27mm_Vertical_SMD","Connector_PinHeader_1.27mm/PinHeader_2x06_P1.27mm_Horizontal","Connector_PinHeader_1.27mm/PinHeader_2x06_P1.27mm_Vertical","Connector_PinHeader_1.27mm/PinHeader_2x06_P1.27mm_Vertical_SMD","Connector_PinHeader_1.27mm/PinHeader_2x07_P1.27mm_Horizontal","Connector_PinHeader_1.27mm/PinHeader_2x07_P1.27mm_Vertical","Connector_PinHeader_1.27mm/PinHeader_2x07_P1.27mm_Vertical_SMD","Connector_PinHeader_1.27mm/PinHeader_2x08_P1.27mm_Horizontal","Connector_PinHeader_1.27mm/PinHeader_2x08_P1.27mm_Vertical","Connector_PinHeader_1.27mm/PinHeader_2x08_P1.27mm_Vertical_SMD","Connector_PinHeader_1.27mm/PinHeader_2x09_P1.27mm_Horizontal","Connector_PinHeader_1.27mm/PinHeader_2x09_P1.27mm_Vertical","Connector_PinHeader_1.27mm/PinHeader_2x09_P1.27mm_Vertical_SMD","Connector_PinHeader_1.27mm/PinHeader_2x10_P1.27mm_Horizontal","Connector_PinHeader_1.27mm/PinHeader_2x10_P1.27mm_Vertical","Connector_PinHeader_1.27mm/PinHeader_2x10_P1.27mm_Vertical_SMD","Connector_PinHeader_1.27mm/PinHeader_2x11_P1.27mm_Horizontal","Connector_PinHeader_1.27mm/PinHeader_2x11_P1.27mm_Vertical","Connector_PinHeader_1.27mm/PinHeader_2x11_P1.27mm_Vertical_SMD","Connector_PinHeader_1.27mm/PinHeader_2x12_P1.27mm_Horizontal","Connector_PinHeader_1.27mm/PinHeader_2x12_P1.27mm_Vertical","Connector_PinHeader_1.27mm/PinHeader_2x12_P1.27mm_Vertical_SMD","Connector_PinHeader_1.27mm/PinHeader_2x13_P1.27mm_Horizontal","Connector_PinHeader_1.27mm/PinHeader_2x13_P1.27mm_Vertical","Connector_PinHeader_1.27mm/PinHeader_2x13_P1.27mm_Vertical_SMD","Connector_PinHeader_1.27mm/PinHeader_2x14_P1.27mm_Horizontal","Connector_PinHeader_1.27mm/PinHeader_2x14_P1.27mm_Vertical","Connector_PinHeader_1.27mm/PinHeader_2x14_P1.27mm_Vertical_SMD","Connector_PinHeader_1.27mm/PinHeader_2x15_P1.27mm_Horizontal","Connector_PinHeader_1.27mm/PinHeader_2x15_P1.27mm_Vertical","Connector_PinHeader_1.27mm/PinHeader_2x15_P1.27mm_Vertical_SMD","Connector_PinHeader_1.27mm/PinHeader_2x16_P1.27mm_Horizontal","Connector_PinHeader_1.27mm/PinHeader_2x16_P1.27mm_Vertical","Connector_PinHeader_1.27mm/PinHeader_2x16_P1.27mm_Vertical_SMD","Connector_PinHeader_1.27mm/PinHeader_2x17_P1.27mm_Horizontal","Connector_PinHeader_1.27mm/PinHeader_2x17_P1.27mm_Vertical","Connector_PinHeader_1.27mm/PinHeader_2x17_P1.27mm_Vertical_SMD","Connector_PinHeader_1.27mm/PinHeader_2x18_P1.27mm_Horizontal","Connector_PinHeader_1.27mm/PinHeader_2x18_P1.27mm_Vertical","Connector_PinHeader_1.27mm/PinHeader_2x18_P1.27mm_Vertical_SMD","Connector_PinHeader_1.27mm/PinHeader_2x19_P1.27mm_Horizontal","Connector_PinHeader_1.27mm/PinHeader_2x19_P1.27mm_Vertical","Connector_PinHeader_1.27mm/PinHeader_2x19_P1.27mm_Vertical_SMD","Connector_PinHeader_1.27mm/PinHeader_2x20_P1.27mm_Horizontal","Connector_PinHeader_1.27mm/PinHeader_2x20_P1.27mm_Vertical","Connector_PinHeader_1.27mm/PinHeader_2x20_P1.27mm_Vertical_SMD","Connector_PinHeader_1.27mm/PinHeader_2x21_P1.27mm_Horizontal","Connector_PinHeader_1.27mm/PinHeader_2x21_P1.27mm_Vertical","Connector_PinHeader_1.27mm/PinHeader_2x21_P1.27mm_Vertical_SMD","Connector_PinHeader_1.27mm/PinHeader_2x22_P1.27mm_Horizontal","Connector_PinHeader_1.27mm/PinHeader_2x22_P1.27mm_Vertical","Connector_PinHeader_1.27mm/PinHeader_2x22_P1.27mm_Vertical_SMD","Connector_PinHeader_1.27mm/PinHeader_2x23_P1.27mm_Horizontal","Connector_PinHeader_1.27mm/PinHeader_2x23_P1.27mm_Vertical","Connector_PinHeader_1.27mm/PinHeader_2x23_P1.27mm_Vertical_SMD","Connector_PinHeader_1.27mm/PinHeader_2x24_P1.27mm_Horizontal","Connector_PinHeader_1.27mm/PinHeader_2x24_P1.27mm_Vertical","Connector_PinHeader_1.27mm/PinHeader_2x24_P1.27mm_Vertical_SMD","Connector_PinHeader_1.27mm/PinHeader_2x25_P1.27mm_Horizontal","Connector_PinHeader_1.27mm/PinHeader_2x25_P1.27mm_Vertical","Connector_PinHeader_1.27mm/PinHeader_2x25_P1.27mm_Vertical_SMD","Connector_PinHeader_1.27mm/PinHeader_2x26_P1.27mm_Horizontal","Connector_PinHeader_1.27mm/PinHeader_2x26_P1.27mm_Vertical","Connector_PinHeader_1.27mm/PinHeader_2x26_P1.27mm_Vertical_SMD","Connector_PinHeader_1.27mm/PinHeader_2x27_P1.27mm_Horizontal","Connector_PinHeader_1.27mm/PinHeader_2x27_P1.27mm_Vertical","Connector_PinHeader_1.27mm/PinHeader_2x27_P1.27mm_Vertical_SMD","Connector_PinHeader_1.27mm/PinHeader_2x28_P1.27mm_Horizontal","Connector_PinHeader_1.27mm/PinHeader_2x28_P1.27mm_Vertical","Connector_PinHeader_1.27mm/PinHeader_2x28_P1.27mm_Vertical_SMD","Connector_PinHeader_1.27mm/PinHeader_2x29_P1.27mm_Horizontal","Connector_PinHeader_1.27mm/PinHeader_2x29_P1.27mm_Vertical","Connector_PinHeader_1.27mm/PinHeader_2x29_P1.27mm_Vertical_SMD","Connector_PinHeader_1.27mm/PinHeader_2x30_P1.27mm_Horizontal","Connector_PinHeader_1.27mm/PinHeader_2x30_P1.27mm_Vertical","Connector_PinHeader_1.27mm/PinHeader_2x30_P1.27mm_Vertical_SMD","Connector_PinHeader_1.27mm/PinHeader_2x31_P1.27mm_Horizontal","Connector_PinHeader_1.27mm/PinHeader_2x31_P1.27mm_Vertical","Connector_PinHeader_1.27mm/PinHeader_2x31_P1.27mm_Vertical_SMD","Connector_PinHeader_1.27mm/PinHeader_2x32_P1.27mm_Horizontal","Connector_PinHeader_1.27mm/PinHeader_2x32_P1.27mm_Vertical","Connector_PinHeader_1.27mm/PinHeader_2x32_P1.27mm_Vertical_SMD","Connector_PinHeader_1.27mm/PinHeader_2x33_P1.27mm_Horizontal","Connector_PinHeader_1.27mm/PinHeader_2x33_P1.27mm_Vertical","Connector_PinHeader_1.27mm/PinHeader_2x33_P1.27mm_Vertical_SMD","Connector_PinHeader_1.27mm/PinHeader_2x34_P1.27mm_Horizontal","Connector_PinHeader_1.27mm/PinHeader_2x34_P1.27mm_Vertical","Connector_PinHeader_1.27mm/PinHeader_2x34_P1.27mm_Vertical_SMD","Connector_PinHeader_1.27mm/PinHeader_2x35_P1.27mm_Horizontal","Connector_PinHeader_1.27mm/PinHeader_2x35_P1.27mm_Vertical","Connector_PinHeader_1.27mm/PinHeader_2x35_P1.27mm_Vertical_SMD","Connector_PinHeader_1.27mm/PinHeader_2x36_P1.27mm_Horizontal","Connector_PinHeader_1.27mm/PinHeader_2x36_P1.27mm_Vertical","Connector_PinHeader_1.27mm/PinHeader_2x36_P1.27mm_Vertical_SMD","Connector_PinHeader_1.27mm/PinHeader_2x37_P1.27mm_Horizontal","Connector_PinHeader_1.27mm/PinHeader_2x37_P1.27mm_Vertical","Connector_PinHeader_1.27mm/PinHeader_2x37_P1.27mm_Vertical_SMD","Connector_PinHeader_1.27mm/PinHeader_2x38_P1.27mm_Horizontal","Connector_PinHeader_1.27mm/PinHeader_2x38_P1.27mm_Vertical","Connector_PinHeader_1.27mm/PinHeader_2x38_P1.27mm_Vertical_SMD","Connector_PinHeader_1.27mm/PinHeader_2x39_P1.27mm_Horizontal","Connector_PinHeader_1.27mm/PinHeader_2x39_P1.27mm_Vertical","Connector_PinHeader_1.27mm/PinHeader_2x39_P1.27mm_Vertical_SMD","Connector_PinHeader_1.27mm/PinHeader_2x40_P1.27mm_Horizontal","Connector_PinHeader_1.27mm/PinHeader_2x40_P1.27mm_Vertical","Connector_PinHeader_1.27mm/PinHeader_2x40_P1.27mm_Vertical_SMD","Connector_PinHeader_2.00mm/PinHeader_1x01_P2.00mm_Horizontal","Connector_PinHeader_2.00mm/PinHeader_1x01_P2.00mm_Vertical","Connector_PinHeader_2.00mm/PinHeader_1x02_P2.00mm_Horizontal","Connector_PinHeader_2.00mm/PinHeader_1x02_P2.00mm_Vertical","Connector_PinHeader_2.00mm/PinHeader_1x02_P2.00mm_Vertical_SMD_Pin1Left","Connector_PinHeader_2.00mm/PinHeader_1x02_P2.00mm_Vertical_SMD_Pin1Right","Connector_PinHeader_2.00mm/PinHeader_1x03_P2.00mm_Horizontal","Connector_PinHeader_2.00mm/PinHeader_1x03_P2.00mm_Vertical","Connector_PinHeader_2.00mm/PinHeader_1x03_P2.00mm_Vertical_SMD_Pin1Left","Connector_PinHeader_2.00mm/PinHeader_1x03_P2.00mm_Vertical_SMD_Pin1Right","Connector_PinHeader_2.00mm/PinHeader_1x04_P2.00mm_Horizontal","Connector_PinHeader_2.00mm/PinHeader_1x04_P2.00mm_Vertical","Connector_PinHeader_2.00mm/PinHeader_1x04_P2.00mm_Vertical_SMD_Pin1Left","Connector_PinHeader_2.00mm/PinHeader_1x04_P2.00mm_Vertical_SMD_Pin1Right","Connector_PinHeader_2.00mm/PinHeader_1x05_P2.00mm_Horizontal","Connector_PinHeader_2.00mm/PinHeader_1x05_P2.00mm_Vertical","Connector_PinHeader_2.00mm/PinHeader_1x05_P2.00mm_Vertical_SMD_Pin1Left","Connector_PinHeader_2.00mm/PinHeader_1x05_P2.00mm_Vertical_SMD_Pin1Right","Connector_PinHeader_2.00mm/PinHeader_1x06_P2.00mm_Horizontal","Connector_PinHeader_2.00mm/PinHeader_1x06_P2.00mm_Vertical","Connector_PinHeader_2.00mm/PinHeader_1x06_P2.00mm_Vertical_SMD_Pin1Left","Connector_PinHeader_2.00mm/PinHeader_1x06_P2.00mm_Vertical_SMD_Pin1Right","Connector_PinHeader_2.00mm/PinHeader_1x07_P2.00mm_Horizontal","Connector_PinHeader_2.00mm/PinHeader_1x07_P2.00mm_Vertical","Connector_PinHeader_2.00mm/PinHeader_1x07_P2.00mm_Vertical_SMD_Pin1Left","Connector_PinHeader_2.00mm/PinHeader_1x07_P2.00mm_Vertical_SMD_Pin1Right","Connector_PinHeader_2.00mm/PinHeader_1x08_P2.00mm_Horizontal","Connector_PinHeader_2.00mm/PinHeader_1x08_P2.00mm_Vertical","Connector_PinHeader_2.00mm/PinHeader_1x08_P2.00mm_Vertical_SMD_Pin1Left","Connector_PinHeader_2.00mm/PinHeader_1x08_P2.00mm_Vertical_SMD_Pin1Right","Connector_PinHeader_2.00mm/PinHeader_1x09_P2.00mm_Horizontal","Connector_PinHeader_2.00mm/PinHeader_1x09_P2.00mm_Vertical","Connector_PinHeader_2.00mm/PinHeader_1x09_P2.00mm_Vertical_SMD_Pin1Left","Connector_PinHeader_2.00mm/PinHeader_1x09_P2.00mm_Vertical_SMD_Pin1Right","Connector_PinHeader_2.00mm/PinHeader_1x10_P2.00mm_Horizontal","Connector_PinHeader_2.00mm/PinHeader_1x10_P2.00mm_Vertical","Connector_PinHeader_2.00mm/PinHeader_1x10_P2.00mm_Vertical_SMD_Pin1Left","Connector_PinHeader_2.00mm/PinHeader_1x10_P2.00mm_Vertical_SMD_Pin1Right","Connector_PinHeader_2.00mm/PinHeader_1x11_P2.00mm_Horizontal","Connector_PinHeader_2.00mm/PinHeader_1x11_P2.00mm_Vertical","Connector_PinHeader_2.00mm/PinHeader_1x11_P2.00mm_Vertical_SMD_Pin1Left","Connector_PinHeader_2.00mm/PinHeader_1x11_P2.00mm_Vertical_SMD_Pin1Right","Connector_PinHeader_2.00mm/PinHeader_1x12_P2.00mm_Horizontal","Connector_PinHeader_2.00mm/PinHeader_1x12_P2.00mm_Vertical","Connector_PinHeader_2.00mm/PinHeader_1x12_P2.00mm_Vertical_SMD_Pin1Left","Connector_PinHeader_2.00mm/PinHeader_1x12_P2.00mm_Vertical_SMD_Pin1Right","Connector_PinHeader_2.00mm/PinHeader_1x13_P2.00mm_Horizontal","Connector_PinHeader_2.00mm/PinHeader_1x13_P2.00mm_Vertical","Connector_PinHeader_2.00mm/PinHeader_1x13_P2.00mm_Vertical_SMD_Pin1Left","Connector_PinHeader_2.00mm/PinHeader_1x13_P2.00mm_Vertical_SMD_Pin1Right","Connector_PinHeader_2.00mm/PinHeader_1x14_P2.00mm_Horizontal","Connector_PinHeader_2.00mm/PinHeader_1x14_P2.00mm_Vertical","Connector_PinHeader_2.00mm/PinHeader_1x14_P2.00mm_Vertical_SMD_Pin1Left","Connector_PinHeader_2.00mm/PinHeader_1x14_P2.00mm_Vertical_SMD_Pin1Right","Connector_PinHeader_2.00mm/PinHeader_1x15_P2.00mm_Horizontal","Connector_PinHeader_2.00mm/PinHeader_1x15_P2.00mm_Vertical","Connector_PinHeader_2.00mm/PinHeader_1x15_P2.00mm_Vertical_SMD_Pin1Left","Connector_PinHeader_2.00mm/PinHeader_1x15_P2.00mm_Vertical_SMD_Pin1Right","Connector_PinHeader_2.00mm/PinHeader_1x16_P2.00mm_Horizontal","Connector_PinHeader_2.00mm/PinHeader_1x16_P2.00mm_Vertical","Connector_PinHeader_2.00mm/PinHeader_1x16_P2.00mm_Vertical_SMD_Pin1Left","Connector_PinHeader_2.00mm/PinHeader_1x16_P2.00mm_Vertical_SMD_Pin1Right","Connector_PinHeader_2.00mm/PinHeader_1x17_P2.00mm_Horizontal","Connector_PinHeader_2.00mm/PinHeader_1x17_P2.00mm_Vertical","Connector_PinHeader_2.00mm/PinHeader_1x17_P2.00mm_Vertical_SMD_Pin1Left","Connector_PinHeader_2.00mm/PinHeader_1x17_P2.00mm_Vertical_SMD_Pin1Right","Connector_PinHeader_2.00mm/PinHeader_1x18_P2.00mm_Horizontal","Connector_PinHeader_2.00mm/PinHeader_1x18_P2.00mm_Vertical","Connector_PinHeader_2.00mm/PinHeader_1x18_P2.00mm_Vertical_SMD_Pin1Left","Connector_PinHeader_2.00mm/PinHeader_1x18_P2.00mm_Vertical_SMD_Pin1Right","Connector_PinHeader_2.00mm/PinHeader_1x19_P2.00mm_Horizontal","Connector_PinHeader_2.00mm/PinHeader_1x19_P2.00mm_Vertical","Connector_PinHeader_2.00mm/PinHeader_1x19_P2.00mm_Vertical_SMD_Pin1Left","Connector_PinHeader_2.00mm/PinHeader_1x19_P2.00mm_Vertical_SMD_Pin1Right","Connector_PinHeader_2.00mm/PinHeader_1x20_P2.00mm_Horizontal","Connector_PinHeader_2.00mm/PinHeader_1x20_P2.00mm_Vertical","Connector_PinHeader_2.00mm/PinHeader_1x20_P2.00mm_Vertical_SMD_Pin1Left","Connector_PinHeader_2.00mm/PinHeader_1x20_P2.00mm_Vertical_SMD_Pin1Right","Connector_PinHeader_2.00mm/PinHeader_1x21_P2.00mm_Horizontal","Connector_PinHeader_2.00mm/PinHeader_1x21_P2.00mm_Vertical","Connector_PinHeader_2.00mm/PinHeader_1x21_P2.00mm_Vertical_SMD_Pin1Left","Connector_PinHeader_2.00mm/PinHeader_1x21_P2.00mm_Vertical_SMD_Pin1Right","Connector_PinHeader_2.00mm/PinHeader_1x22_P2.00mm_Horizontal","Connector_PinHeader_2.00mm/PinHeader_1x22_P2.00mm_Vertical","Connector_PinHeader_2.00mm/PinHeader_1x22_P2.00mm_Vertical_SMD_Pin1Left","Connector_PinHeader_2.00mm/PinHeader_1x22_P2.00mm_Vertical_SMD_Pin1Right","Connector_PinHeader_2.00mm/PinHeader_1x23_P2.00mm_Horizontal","Connector_PinHeader_2.00mm/PinHeader_1x23_P2.00mm_Vertical","Connector_PinHeader_2.00mm/PinHeader_1x23_P2.00mm_Vertical_SMD_Pin1Left","Connector_PinHeader_2.00mm/PinHeader_1x23_P2.00mm_Vertical_SMD_Pin1Right","Connector_PinHeader_2.00mm/PinHeader_1x24_P2.00mm_Horizontal","Connector_PinHeader_2.00mm/PinHeader_1x24_P2.00mm_Vertical","Connector_PinHeader_2.00mm/PinHeader_1x24_P2.00mm_Vertical_SMD_Pin1Left","Connector_PinHeader_2.00mm/PinHeader_1x24_P2.00mm_Vertical_SMD_Pin1Right","Connector_PinHeader_2.00mm/PinHeader_1x25_P2.00mm_Horizontal","Connector_PinHeader_2.00mm/PinHeader_1x25_P2.00mm_Vertical","Connector_PinHeader_2.00mm/PinHeader_1x25_P2.00mm_Vertical_SMD_Pin1Left","Connector_PinHeader_2.00mm/PinHeader_1x25_P2.00mm_Vertical_SMD_Pin1Right","Connector_PinHeader_2.00mm/PinHeader_1x26_P2.00mm_Horizontal","Connector_PinHeader_2.00mm/PinHeader_1x26_P2.00mm_Vertical","Connector_PinHeader_2.00mm/PinHeader_1x26_P2.00mm_Vertical_SMD_Pin1Left","Connector_PinHeader_2.00mm/PinHeader_1x26_P2.00mm_Vertical_SMD_Pin1Right","Connector_PinHeader_2.00mm/PinHeader_1x27_P2.00mm_Horizontal","Connector_PinHeader_2.00mm/PinHeader_1x27_P2.00mm_Vertical","Connector_PinHeader_2.00mm/PinHeader_1x27_P2.00mm_Vertical_SMD_Pin1Left","Connector_PinHeader_2.00mm/PinHeader_1x27_P2.00mm_Vertical_SMD_Pin1Right","Connector_PinHeader_2.00mm/PinHeader_1x28_P2.00mm_Horizontal","Connector_PinHeader_2.00mm/PinHeader_1x28_P2.00mm_Vertical","Connector_PinHeader_2.00mm/PinHeader_1x28_P2.00mm_Vertical_SMD_Pin1Left","Connector_PinHeader_2.00mm/PinHeader_1x28_P2.00mm_Vertical_SMD_Pin1Right","Connector_PinHeader_2.00mm/PinHeader_1x29_P2.00mm_Horizontal","Connector_PinHeader_2.00mm/PinHeader_1x29_P2.00mm_Vertical","Connector_PinHeader_2.00mm/PinHeader_1x29_P2.00mm_Vertical_SMD_Pin1Left","Connector_PinHeader_2.00mm/PinHeader_1x29_P2.00mm_Vertical_SMD_Pin1Right","Connector_PinHeader_2.00mm/PinHeader_1x30_P2.00mm_Horizontal","Connector_PinHeader_2.00mm/PinHeader_1x30_P2.00mm_Vertical","Connector_PinHeader_2.00mm/PinHeader_1x30_P2.00mm_Vertical_SMD_Pin1Left","Connector_PinHeader_2.00mm/PinHeader_1x30_P2.00mm_Vertical_SMD_Pin1Right","Connector_PinHeader_2.00mm/PinHeader_1x31_P2.00mm_Horizontal","Connector_PinHeader_2.00mm/PinHeader_1x31_P2.00mm_Vertical","Connector_PinHeader_2.00mm/PinHeader_1x31_P2.00mm_Vertical_SMD_Pin1Left","Connector_PinHeader_2.00mm/PinHeader_1x31_P2.00mm_Vertical_SMD_Pin1Right","Connector_PinHeader_2.00mm/PinHeader_1x32_P2.00mm_Horizontal","Connector_PinHeader_2.00mm/PinHeader_1x32_P2.00mm_Vertical","Connector_PinHeader_2.00mm/PinHeader_1x32_P2.00mm_Vertical_SMD_Pin1Left","Connector_PinHeader_2.00mm/PinHeader_1x32_P2.00mm_Vertical_SMD_Pin1Right","Connector_PinHeader_2.00mm/PinHeader_1x33_P2.00mm_Horizontal","Connector_PinHeader_2.00mm/PinHeader_1x33_P2.00mm_Vertical","Connector_PinHeader_2.00mm/PinHeader_1x33_P2.00mm_Vertical_SMD_Pin1Left","Connector_PinHeader_2.00mm/PinHeader_1x33_P2.00mm_Vertical_SMD_Pin1Right","Connector_PinHeader_2.00mm/PinHeader_1x34_P2.00mm_Horizontal","Connector_PinHeader_2.00mm/PinHeader_1x34_P2.00mm_Vertical","Connector_PinHeader_2.00mm/PinHeader_1x34_P2.00mm_Vertical_SMD_Pin1Left","Connector_PinHeader_2.00mm/PinHeader_1x34_P2.00mm_Vertical_SMD_Pin1Right","Connector_PinHeader_2.00mm/PinHeader_1x35_P2.00mm_Horizontal","Connector_PinHeader_2.00mm/PinHeader_1x35_P2.00mm_Vertical","Connector_PinHeader_2.00mm/PinHeader_1x35_P2.00mm_Vertical_SMD_Pin1Left","Connector_PinHeader_2.00mm/PinHeader_1x35_P2.00mm_Vertical_SMD_Pin1Right","Connector_PinHeader_2.00mm/PinHeader_1x36_P2.00mm_Horizontal","Connector_PinHeader_2.00mm/PinHeader_1x36_P2.00mm_Vertical","Connector_PinHeader_2.00mm/PinHeader_1x36_P2.00mm_Vertical_SMD_Pin1Left","Connector_PinHeader_2.00mm/PinHeader_1x36_P2.00mm_Vertical_SMD_Pin1Right","Connector_PinHeader_2.00mm/PinHeader_1x37_P2.00mm_Horizontal","Connector_PinHeader_2.00mm/PinHeader_1x37_P2.00mm_Vertical","Connector_PinHeader_2.00mm/PinHeader_1x37_P2.00mm_Vertical_SMD_Pin1Left","Connector_PinHeader_2.00mm/PinHeader_1x37_P2.00mm_Vertical_SMD_Pin1Right","Connector_PinHeader_2.00mm/PinHeader_1x38_P2.00mm_Horizontal","Connector_PinHeader_2.00mm/PinHeader_1x38_P2.00mm_Vertical","Connector_PinHeader_2.00mm/PinHeader_1x38_P2.00mm_Vertical_SMD_Pin1Left","Connector_PinHeader_2.00mm/PinHeader_1x38_P2.00mm_Vertical_SMD_Pin1Right","Connector_PinHeader_2.00mm/PinHeader_1x39_P2.00mm_Horizontal","Connector_PinHeader_2.00mm/PinHeader_1x39_P2.00mm_Vertical","Connector_PinHeader_2.00mm/PinHeader_1x39_P2.00mm_Vertical_SMD_Pin1Left","Connector_PinHeader_2.00mm/PinHeader_1x39_P2.00mm_Vertical_SMD_Pin1Right","Connector_PinHeader_2.00mm/PinHeader_1x40_P2.00mm_Horizontal","Connector_PinHeader_2.00mm/PinHeader_1x40_P2.00mm_Vertical","Connector_PinHeader_2.00mm/PinHeader_1x40_P2.00mm_Vertical_SMD_Pin1Left","Connector_PinHeader_2.00mm/PinHeader_1x40_P2.00mm_Vertical_SMD_Pin1Right","Connector_PinHeader_2.00mm/PinHeader_2x01_P2.00mm_Horizontal","Connector_PinHeader_2.00mm/PinHeader_2x01_P2.00mm_Vertical","Connector_PinHeader_2.00mm/PinHeader_2x01_P2.00mm_Vertical_SMD","Connector_PinHeader_2.00mm/PinHeader_2x02_P2.00mm_Horizontal","Connector_PinHeader_2.00mm/PinHeader_2x02_P2.00mm_Vertical","Connector_PinHeader_2.00mm/PinHeader_2x02_P2.00mm_Vertical_SMD","Connector_PinHeader_2.00mm/PinHeader_2x03_P2.00mm_Horizontal","Connector_PinHeader_2.00mm/PinHeader_2x03_P2.00mm_Vertical","Connector_PinHeader_2.00mm/PinHeader_2x03_P2.00mm_Vertical_SMD","Connector_PinHeader_2.00mm/PinHeader_2x04_P2.00mm_Horizontal","Connector_PinHeader_2.00mm/PinHeader_2x04_P2.00mm_Vertical","Connector_PinHeader_2.00mm/PinHeader_2x04_P2.00mm_Vertical_SMD","Connector_PinHeader_2.00mm/PinHeader_2x05_P2.00mm_Horizontal","Connector_PinHeader_2.00mm/PinHeader_2x05_P2.00mm_Vertical","Connector_PinHeader_2.00mm/PinHeader_2x05_P2.00mm_Vertical_SMD","Connector_PinHeader_2.00mm/PinHeader_2x06_P2.00mm_Horizontal","Connector_PinHeader_2.00mm/PinHeader_2x06_P2.00mm_Vertical","Connector_PinHeader_2.00mm/PinHeader_2x06_P2.00mm_Vertical_SMD","Connector_PinHeader_2.00mm/PinHeader_2x07_P2.00mm_Horizontal","Connector_PinHeader_2.00mm/PinHeader_2x07_P2.00mm_Vertical","Connector_PinHeader_2.00mm/PinHeader_2x07_P2.00mm_Vertical_SMD","Connector_PinHeader_2.00mm/PinHeader_2x08_P2.00mm_Horizontal","Connector_PinHeader_2.00mm/PinHeader_2x08_P2.00mm_Vertical","Connector_PinHeader_2.00mm/PinHeader_2x08_P2.00mm_Vertical_SMD","Connector_PinHeader_2.00mm/PinHeader_2x09_P2.00mm_Horizontal","Connector_PinHeader_2.00mm/PinHeader_2x09_P2.00mm_Vertical","Connector_PinHeader_2.00mm/PinHeader_2x09_P2.00mm_Vertical_SMD","Connector_PinHeader_2.00mm/PinHeader_2x10_P2.00mm_Horizontal","Connector_PinHeader_2.00mm/PinHeader_2x10_P2.00mm_Vertical","Connector_PinHeader_2.00mm/PinHeader_2x10_P2.00mm_Vertical_SMD","Connector_PinHeader_2.00mm/PinHeader_2x11_P2.00mm_Horizontal","Connector_PinHeader_2.00mm/PinHeader_2x11_P2.00mm_Vertical","Connector_PinHeader_2.00mm/PinHeader_2x11_P2.00mm_Vertical_SMD","Connector_PinHeader_2.00mm/PinHeader_2x12_P2.00mm_Horizontal","Connector_PinHeader_2.00mm/PinHeader_2x12_P2.00mm_Vertical","Connector_PinHeader_2.00mm/PinHeader_2x12_P2.00mm_Vertical_SMD","Connector_PinHeader_2.00mm/PinHeader_2x13_P2.00mm_Horizontal","Connector_PinHeader_2.00mm/PinHeader_2x13_P2.00mm_Vertical","Connector_PinHeader_2.00mm/PinHeader_2x13_P2.00mm_Vertical_SMD","Connector_PinHeader_2.00mm/PinHeader_2x14_P2.00mm_Horizontal","Connector_PinHeader_2.00mm/PinHeader_2x14_P2.00mm_Vertical","Connector_PinHeader_2.00mm/PinHeader_2x14_P2.00mm_Vertical_SMD","Connector_PinHeader_2.00mm/PinHeader_2x15_P2.00mm_Horizontal","Connector_PinHeader_2.00mm/PinHeader_2x15_P2.00mm_Vertical","Connector_PinHeader_2.00mm/PinHeader_2x15_P2.00mm_Vertical_SMD","Connector_PinHeader_2.00mm/PinHeader_2x16_P2.00mm_Horizontal","Connector_PinHeader_2.00mm/PinHeader_2x16_P2.00mm_Vertical","Connector_PinHeader_2.00mm/PinHeader_2x16_P2.00mm_Vertical_SMD","Connector_PinHeader_2.00mm/PinHeader_2x17_P2.00mm_Horizontal","Connector_PinHeader_2.00mm/PinHeader_2x17_P2.00mm_Vertical","Connector_PinHeader_2.00mm/PinHeader_2x17_P2.00mm_Vertical_SMD","Connector_PinHeader_2.00mm/PinHeader_2x18_P2.00mm_Horizontal","Connector_PinHeader_2.00mm/PinHeader_2x18_P2.00mm_Vertical","Connector_PinHeader_2.00mm/PinHeader_2x18_P2.00mm_Vertical_SMD","Connector_PinHeader_2.00mm/PinHeader_2x19_P2.00mm_Horizontal","Connector_PinHeader_2.00mm/PinHeader_2x19_P2.00mm_Vertical","Connector_PinHeader_2.00mm/PinHeader_2x19_P2.00mm_Vertical_SMD","Connector_PinHeader_2.00mm/PinHeader_2x20_P2.00mm_Horizontal","Connector_PinHeader_2.00mm/PinHeader_2x20_P2.00mm_Vertical","Connector_PinHeader_2.00mm/PinHeader_2x20_P2.00mm_Vertical_SMD","Connector_PinHeader_2.00mm/PinHeader_2x21_P2.00mm_Horizontal","Connector_PinHeader_2.00mm/PinHeader_2x21_P2.00mm_Vertical","Connector_PinHeader_2.00mm/PinHeader_2x21_P2.00mm_Vertical_SMD","Connector_PinHeader_2.00mm/PinHeader_2x22_P2.00mm_Horizontal","Connector_PinHeader_2.00mm/PinHeader_2x22_P2.00mm_Vertical","Connector_PinHeader_2.00mm/PinHeader_2x22_P2.00mm_Vertical_SMD","Connector_PinHeader_2.00mm/PinHeader_2x23_P2.00mm_Horizontal","Connector_PinHeader_2.00mm/PinHeader_2x23_P2.00mm_Vertical","Connector_PinHeader_2.00mm/PinHeader_2x23_P2.00mm_Vertical_SMD","Connector_PinHeader_2.00mm/PinHeader_2x24_P2.00mm_Horizontal","Connector_PinHeader_2.00mm/PinHeader_2x24_P2.00mm_Vertical","Connector_PinHeader_2.00mm/PinHeader_2x24_P2.00mm_Vertical_SMD","Connector_PinHeader_2.00mm/PinHeader_2x25_P2.00mm_Horizontal","Connector_PinHeader_2.00mm/PinHeader_2x25_P2.00mm_Vertical","Connector_PinHeader_2.00mm/PinHeader_2x25_P2.00mm_Vertical_SMD","Connector_PinHeader_2.00mm/PinHeader_2x26_P2.00mm_Horizontal","Connector_PinHeader_2.00mm/PinHeader_2x26_P2.00mm_Vertical","Connector_PinHeader_2.00mm/PinHeader_2x26_P2.00mm_Vertical_SMD","Connector_PinHeader_2.00mm/PinHeader_2x27_P2.00mm_Horizontal","Connector_PinHeader_2.00mm/PinHeader_2x27_P2.00mm_Vertical","Connector_PinHeader_2.00mm/PinHeader_2x27_P2.00mm_Vertical_SMD","Connector_PinHeader_2.00mm/PinHeader_2x28_P2.00mm_Horizontal","Connector_PinHeader_2.00mm/PinHeader_2x28_P2.00mm_Vertical","Connector_PinHeader_2.00mm/PinHeader_2x28_P2.00mm_Vertical_SMD","Connector_PinHeader_2.00mm/PinHeader_2x29_P2.00mm_Horizontal","Connector_PinHeader_2.00mm/PinHeader_2x29_P2.00mm_Vertical","Connector_PinHeader_2.00mm/PinHeader_2x29_P2.00mm_Vertical_SMD","Connector_PinHeader_2.00mm/PinHeader_2x30_P2.00mm_Horizontal","Connector_PinHeader_2.00mm/PinHeader_2x30_P2.00mm_Vertical","Connector_PinHeader_2.00mm/PinHeader_2x30_P2.00mm_Vertical_SMD","Connector_PinHeader_2.00mm/PinHeader_2x31_P2.00mm_Horizontal","Connector_PinHeader_2.00mm/PinHeader_2x31_P2.00mm_Vertical","Connector_PinHeader_2.00mm/PinHeader_2x31_P2.00mm_Vertical_SMD","Connector_PinHeader_2.00mm/PinHeader_2x32_P2.00mm_Horizontal","Connector_PinHeader_2.00mm/PinHeader_2x32_P2.00mm_Vertical","Connector_PinHeader_2.00mm/PinHeader_2x32_P2.00mm_Vertical_SMD","Connector_PinHeader_2.00mm/PinHeader_2x33_P2.00mm_Horizontal","Connector_PinHeader_2.00mm/PinHeader_2x33_P2.00mm_Vertical","Connector_PinHeader_2.00mm/PinHeader_2x33_P2.00mm_Vertical_SMD","Connector_PinHeader_2.00mm/PinHeader_2x34_P2.00mm_Horizontal","Connector_PinHeader_2.00mm/PinHeader_2x34_P2.00mm_Vertical","Connector_PinHeader_2.00mm/PinHeader_2x34_P2.00mm_Vertical_SMD","Connector_PinHeader_2.00mm/PinHeader_2x35_P2.00mm_Horizontal","Connector_PinHeader_2.00mm/PinHeader_2x35_P2.00mm_Vertical","Connector_PinHeader_2.00mm/PinHeader_2x35_P2.00mm_Vertical_SMD","Connector_PinHeader_2.00mm/PinHeader_2x36_P2.00mm_Horizontal","Connector_PinHeader_2.00mm/PinHeader_2x36_P2.00mm_Vertical","Connector_PinHeader_2.00mm/PinHeader_2x36_P2.00mm_Vertical_SMD","Connector_PinHeader_2.00mm/PinHeader_2x37_P2.00mm_Horizontal","Connector_PinHeader_2.00mm/PinHeader_2x37_P2.00mm_Vertical","Connector_PinHeader_2.00mm/PinHeader_2x37_P2.00mm_Vertical_SMD","Connector_PinHeader_2.00mm/PinHeader_2x38_P2.00mm_Horizontal","Connector_PinHeader_2.00mm/PinHeader_2x38_P2.00mm_Vertical","Connector_PinHeader_2.00mm/PinHeader_2x38_P2.00mm_Vertical_SMD","Connector_PinHeader_2.00mm/PinHeader_2x39_P2.00mm_Horizontal","Connector_PinHeader_2.00mm/PinHeader_2x39_P2.00mm_Vertical","Connector_PinHeader_2.00mm/PinHeader_2x39_P2.00mm_Vertical_SMD","Connector_PinHeader_2.00mm/PinHeader_2x40_P2.00mm_Horizontal","Connector_PinHeader_2.00mm/PinHeader_2x40_P2.00mm_Vertical","Connector_PinHeader_2.00mm/PinHeader_2x40_P2.00mm_Vertical_SMD","Connector_PinHeader_2.54mm/PinHeader_1x01_P2.54mm_Horizontal","Connector_PinHeader_2.54mm/PinHeader_1x01_P2.54mm_Vertical","Connector_PinHeader_2.54mm/PinHeader_1x02_P2.54mm_Horizontal","Connector_PinHeader_2.54mm/PinHeader_1x02_P2.54mm_Vertical","Connector_PinHeader_2.54mm/PinHeader_1x02_P2.54mm_Vertical_SMD_Pin1Left","Connector_PinHeader_2.54mm/PinHeader_1x02_P2.54mm_Vertical_SMD_Pin1Right","Connector_PinHeader_2.54mm/PinHeader_1x03_P2.54mm_Horizontal","Connector_PinHeader_2.54mm/PinHeader_1x03_P2.54mm_Vertical","Connector_PinHeader_2.54mm/PinHeader_1x03_P2.54mm_Vertical_SMD_Pin1Left","Connector_PinHeader_2.54mm/PinHeader_1x03_P2.54mm_Vertical_SMD_Pin1Right","Connector_PinHeader_2.54mm/PinHeader_1x04_P2.54mm_Horizontal","Connector_PinHeader_2.54mm/PinHeader_1x04_P2.54mm_Vertical","Connector_PinHeader_2.54mm/PinHeader_1x04_P2.54mm_Vertical_SMD_Pin1Left","Connector_PinHeader_2.54mm/PinHeader_1x04_P2.54mm_Vertical_SMD_Pin1Right","Connector_PinHeader_2.54mm/PinHeader_1x05_P2.54mm_Horizontal","Connector_PinHeader_2.54mm/PinHeader_1x05_P2.54mm_Vertical","Connector_PinHeader_2.54mm/PinHeader_1x05_P2.54mm_Vertical_SMD_Pin1Left","Connector_PinHeader_2.54mm/PinHeader_1x05_P2.54mm_Vertical_SMD_Pin1Right","Connector_PinHeader_2.54mm/PinHeader_1x06_P2.54mm_Horizontal","Connector_PinHeader_2.54mm/PinHeader_1x06_P2.54mm_Vertical","Connector_PinHeader_2.54mm/PinHeader_1x06_P2.54mm_Vertical_SMD_Pin1Left","Connector_PinHeader_2.54mm/PinHeader_1x06_P2.54mm_Vertical_SMD_Pin1Right","Connector_PinHeader_2.54mm/PinHeader_1x07_P2.54mm_Horizontal","Connector_PinHeader_2.54mm/PinHeader_1x07_P2.54mm_Vertical","Connector_PinHeader_2.54mm/PinHeader_1x07_P2.54mm_Vertical_SMD_Pin1Left","Connector_PinHeader_2.54mm/PinHeader_1x07_P2.54mm_Vertical_SMD_Pin1Right","Connector_PinHeader_2.54mm/PinHeader_1x08_P2.54mm_Horizontal","Connector_PinHeader_2.54mm/PinHeader_1x08_P2.54mm_Vertical","Connector_PinHeader_2.54mm/PinHeader_1x08_P2.54mm_Vertical_SMD_Pin1Left","Connector_PinHeader_2.54mm/PinHeader_1x08_P2.54mm_Vertical_SMD_Pin1Right","Connector_PinHeader_2.54mm/PinHeader_1x09_P2.54mm_Horizontal","Connector_PinHeader_2.54mm/PinHeader_1x09_P2.54mm_Vertical","Connector_PinHeader_2.54mm/PinHeader_1x09_P2.54mm_Vertical_SMD_Pin1Left","Connector_PinHeader_2.54mm/PinHeader_1x09_P2.54mm_Vertical_SMD_Pin1Right","Connector_PinHeader_2.54mm/PinHeader_1x10_P2.54mm_Horizontal","Connector_PinHeader_2.54mm/PinHeader_1x10_P2.54mm_Vertical","Connector_PinHeader_2.54mm/PinHeader_1x10_P2.54mm_Vertical_SMD_Pin1Left","Connector_PinHeader_2.54mm/PinHeader_1x10_P2.54mm_Vertical_SMD_Pin1Right","Connector_PinHeader_2.54mm/PinHeader_1x11_P2.54mm_Horizontal","Connector_PinHeader_2.54mm/PinHeader_1x11_P2.54mm_Vertical","Connector_PinHeader_2.54mm/PinHeader_1x11_P2.54mm_Vertical_SMD_Pin1Left","Connector_PinHeader_2.54mm/PinHeader_1x11_P2.54mm_Vertical_SMD_Pin1Right","Connector_PinHeader_2.54mm/PinHeader_1x12_P2.54mm_Horizontal","Connector_PinHeader_2.54mm/PinHeader_1x12_P2.54mm_Vertical","Connector_PinHeader_2.54mm/PinHeader_1x12_P2.54mm_Vertical_SMD_Pin1Left","Connector_PinHeader_2.54mm/PinHeader_1x12_P2.54mm_Vertical_SMD_Pin1Right","Connector_PinHeader_2.54mm/PinHeader_1x13_P2.54mm_Horizontal","Connector_PinHeader_2.54mm/PinHeader_1x13_P2.54mm_Vertical","Connector_PinHeader_2.54mm/PinHeader_1x13_P2.54mm_Vertical_SMD_Pin1Left","Connector_PinHeader_2.54mm/PinHeader_1x13_P2.54mm_Vertical_SMD_Pin1Right","Connector_PinHeader_2.54mm/PinHeader_1x14_P2.54mm_Horizontal","Connector_PinHeader_2.54mm/PinHeader_1x14_P2.54mm_Vertical","Connector_PinHeader_2.54mm/PinHeader_1x14_P2.54mm_Vertical_SMD_Pin1Left","Connector_PinHeader_2.54mm/PinHeader_1x14_P2.54mm_Vertical_SMD_Pin1Right","Connector_PinHeader_2.54mm/PinHeader_1x15_P2.54mm_Horizontal","Connector_PinHeader_2.54mm/PinHeader_1x15_P2.54mm_Vertical","Connector_PinHeader_2.54mm/PinHeader_1x15_P2.54mm_Vertical_SMD_Pin1Left","Connector_PinHeader_2.54mm/PinHeader_1x15_P2.54mm_Vertical_SMD_Pin1Right","Connector_PinHeader_2.54mm/PinHeader_1x16_P2.54mm_Horizontal","Connector_PinHeader_2.54mm/PinHeader_1x16_P2.54mm_Vertical","Connector_PinHeader_2.54mm/PinHeader_1x16_P2.54mm_Vertical_SMD_Pin1Left","Connector_PinHeader_2.54mm/PinHeader_1x16_P2.54mm_Vertical_SMD_Pin1Right","Connector_PinHeader_2.54mm/PinHeader_1x17_P2.54mm_Horizontal","Connector_PinHeader_2.54mm/PinHeader_1x17_P2.54mm_Vertical","Connector_PinHeader_2.54mm/PinHeader_1x17_P2.54mm_Vertical_SMD_Pin1Left","Connector_PinHeader_2.54mm/PinHeader_1x17_P2.54mm_Vertical_SMD_Pin1Right","Connector_PinHeader_2.54mm/PinHeader_1x18_P2.54mm_Horizontal","Connector_PinHeader_2.54mm/PinHeader_1x18_P2.54mm_Vertical","Connector_PinHeader_2.54mm/PinHeader_1x18_P2.54mm_Vertical_SMD_Pin1Left","Connector_PinHeader_2.54mm/PinHeader_1x18_P2.54mm_Vertical_SMD_Pin1Right","Connector_PinHeader_2.54mm/PinHeader_1x19_P2.54mm_Horizontal","Connector_PinHeader_2.54mm/PinHeader_1x19_P2.54mm_Vertical","Connector_PinHeader_2.54mm/PinHeader_1x19_P2.54mm_Vertical_SMD_Pin1Left","Connector_PinHeader_2.54mm/PinHeader_1x19_P2.54mm_Vertical_SMD_Pin1Right","Connector_PinHeader_2.54mm/PinHeader_1x20_P2.54mm_Horizontal","Connector_PinHeader_2.54mm/PinHeader_1x20_P2.54mm_Vertical","Connector_PinHeader_2.54mm/PinHeader_1x20_P2.54mm_Vertical_SMD_Pin1Left","Connector_PinHeader_2.54mm/PinHeader_1x20_P2.54mm_Vertical_SMD_Pin1Right","Connector_PinHeader_2.54mm/PinHeader_1x21_P2.54mm_Horizontal","Connector_PinHeader_2.54mm/PinHeader_1x21_P2.54mm_Vertical","Connector_PinHeader_2.54mm/PinHeader_1x21_P2.54mm_Vertical_SMD_Pin1Left","Connector_PinHeader_2.54mm/PinHeader_1x21_P2.54mm_Vertical_SMD_Pin1Right","Connector_PinHeader_2.54mm/PinHeader_1x22_P2.54mm_Horizontal","Connector_PinHeader_2.54mm/PinHeader_1x22_P2.54mm_Vertical","Connector_PinHeader_2.54mm/PinHeader_1x22_P2.54mm_Vertical_SMD_Pin1Left","Connector_PinHeader_2.54mm/PinHeader_1x22_P2.54mm_Vertical_SMD_Pin1Right","Connector_PinHeader_2.54mm/PinHeader_1x23_P2.54mm_Horizontal","Connector_PinHeader_2.54mm/PinHeader_1x23_P2.54mm_Vertical","Connector_PinHeader_2.54mm/PinHeader_1x23_P2.54mm_Vertical_SMD_Pin1Left","Connector_PinHeader_2.54mm/PinHeader_1x23_P2.54mm_Vertical_SMD_Pin1Right","Connector_PinHeader_2.54mm/PinHeader_1x24_P2.54mm_Horizontal","Connector_PinHeader_2.54mm/PinHeader_1x24_P2.54mm_Vertical","Connector_PinHeader_2.54mm/PinHeader_1x24_P2.54mm_Vertical_SMD_Pin1Left","Connector_PinHeader_2.54mm/PinHeader_1x24_P2.54mm_Vertical_SMD_Pin1Right","Connector_PinHeader_2.54mm/PinHeader_1x25_P2.54mm_Horizontal","Connector_PinHeader_2.54mm/PinHeader_1x25_P2.54mm_Vertical","Connector_PinHeader_2.54mm/PinHeader_1x25_P2.54mm_Vertical_SMD_Pin1Left","Connector_PinHeader_2.54mm/PinHeader_1x25_P2.54mm_Vertical_SMD_Pin1Right","Connector_PinHeader_2.54mm/PinHeader_1x26_P2.54mm_Horizontal","Connector_PinHeader_2.54mm/PinHeader_1x26_P2.54mm_Vertical","Connector_PinHeader_2.54mm/PinHeader_1x26_P2.54mm_Vertical_SMD_Pin1Left","Connector_PinHeader_2.54mm/PinHeader_1x26_P2.54mm_Vertical_SMD_Pin1Right","Connector_PinHeader_2.54mm/PinHeader_1x27_P2.54mm_Horizontal","Connector_PinHeader_2.54mm/PinHeader_1x27_P2.54mm_Vertical","Connector_PinHeader_2.54mm/PinHeader_1x27_P2.54mm_Vertical_SMD_Pin1Left","Connector_PinHeader_2.54mm/PinHeader_1x27_P2.54mm_Vertical_SMD_Pin1Right","Connector_PinHeader_2.54mm/PinHeader_1x28_P2.54mm_Horizontal","Connector_PinHeader_2.54mm/PinHeader_1x28_P2.54mm_Vertical","Connector_PinHeader_2.54mm/PinHeader_1x28_P2.54mm_Vertical_SMD_Pin1Left","Connector_PinHeader_2.54mm/PinHeader_1x28_P2.54mm_Vertical_SMD_Pin1Right","Connector_PinHeader_2.54mm/PinHeader_1x29_P2.54mm_Horizontal","Connector_PinHeader_2.54mm/PinHeader_1x29_P2.54mm_Vertical","Connector_PinHeader_2.54mm/PinHeader_1x29_P2.54mm_Vertical_SMD_Pin1Left","Connector_PinHeader_2.54mm/PinHeader_1x29_P2.54mm_Vertical_SMD_Pin1Right","Connector_PinHeader_2.54mm/PinHeader_1x30_P2.54mm_Horizontal","Connector_PinHeader_2.54mm/PinHeader_1x30_P2.54mm_Vertical","Connector_PinHeader_2.54mm/PinHeader_1x30_P2.54mm_Vertical_SMD_Pin1Left","Connector_PinHeader_2.54mm/PinHeader_1x30_P2.54mm_Vertical_SMD_Pin1Right","Connector_PinHeader_2.54mm/PinHeader_1x31_P2.54mm_Horizontal","Connector_PinHeader_2.54mm/PinHeader_1x31_P2.54mm_Vertical","Connector_PinHeader_2.54mm/PinHeader_1x31_P2.54mm_Vertical_SMD_Pin1Left","Connector_PinHeader_2.54mm/PinHeader_1x31_P2.54mm_Vertical_SMD_Pin1Right","Connector_PinHeader_2.54mm/PinHeader_1x32_P2.54mm_Horizontal","Connector_PinHeader_2.54mm/PinHeader_1x32_P2.54mm_Vertical","Connector_PinHeader_2.54mm/PinHeader_1x32_P2.54mm_Vertical_SMD_Pin1Left","Connector_PinHeader_2.54mm/PinHeader_1x32_P2.54mm_Vertical_SMD_Pin1Right","Connector_PinHeader_2.54mm/PinHeader_1x33_P2.54mm_Horizontal","Connector_PinHeader_2.54mm/PinHeader_1x33_P2.54mm_Vertical","Connector_PinHeader_2.54mm/PinHeader_1x33_P2.54mm_Vertical_SMD_Pin1Left","Connector_PinHeader_2.54mm/PinHeader_1x33_P2.54mm_Vertical_SMD_Pin1Right","Connector_PinHeader_2.54mm/PinHeader_1x34_P2.54mm_Horizontal","Connector_PinHeader_2.54mm/PinHeader_1x34_P2.54mm_Vertical","Connector_PinHeader_2.54mm/PinHeader_1x34_P2.54mm_Vertical_SMD_Pin1Left","Connector_PinHeader_2.54mm/PinHeader_1x34_P2.54mm_Vertical_SMD_Pin1Right","Connector_PinHeader_2.54mm/PinHeader_1x35_P2.54mm_Horizontal","Connector_PinHeader_2.54mm/PinHeader_1x35_P2.54mm_Vertical","Connector_PinHeader_2.54mm/PinHeader_1x35_P2.54mm_Vertical_SMD_Pin1Left","Connector_PinHeader_2.54mm/PinHeader_1x35_P2.54mm_Vertical_SMD_Pin1Right","Connector_PinHeader_2.54mm/PinHeader_1x36_P2.54mm_Horizontal","Connector_PinHeader_2.54mm/PinHeader_1x36_P2.54mm_Vertical","Connector_PinHeader_2.54mm/PinHeader_1x36_P2.54mm_Vertical_SMD_Pin1Left","Connector_PinHeader_2.54mm/PinHeader_1x36_P2.54mm_Vertical_SMD_Pin1Right","Connector_PinHeader_2.54mm/PinHeader_1x37_P2.54mm_Horizontal","Connector_PinHeader_2.54mm/PinHeader_1x37_P2.54mm_Vertical","Connector_PinHeader_2.54mm/PinHeader_1x37_P2.54mm_Vertical_SMD_Pin1Left","Connector_PinHeader_2.54mm/PinHeader_1x37_P2.54mm_Vertical_SMD_Pin1Right","Connector_PinHeader_2.54mm/PinHeader_1x38_P2.54mm_Horizontal","Connector_PinHeader_2.54mm/PinHeader_1x38_P2.54mm_Vertical","Connector_PinHeader_2.54mm/PinHeader_1x38_P2.54mm_Vertical_SMD_Pin1Left","Connector_PinHeader_2.54mm/PinHeader_1x38_P2.54mm_Vertical_SMD_Pin1Right","Connector_PinHeader_2.54mm/PinHeader_1x39_P2.54mm_Horizontal","Connector_PinHeader_2.54mm/PinHeader_1x39_P2.54mm_Vertical","Connector_PinHeader_2.54mm/PinHeader_1x39_P2.54mm_Vertical_SMD_Pin1Left","Connector_PinHeader_2.54mm/PinHeader_1x39_P2.54mm_Vertical_SMD_Pin1Right","Connector_PinHeader_2.54mm/PinHeader_1x40_P2.54mm_Horizontal","Connector_PinHeader_2.54mm/PinHeader_1x40_P2.54mm_Vertical","Connector_PinHeader_2.54mm/PinHeader_1x40_P2.54mm_Vertical_SMD_Pin1Left","Connector_PinHeader_2.54mm/PinHeader_1x40_P2.54mm_Vertical_SMD_Pin1Right","Connector_PinHeader_2.54mm/PinHeader_2x01_P2.54mm_Horizontal","Connector_PinHeader_2.54mm/PinHeader_2x01_P2.54mm_Vertical","Connector_PinHeader_2.54mm/PinHeader_2x01_P2.54mm_Vertical_SMD","Connector_PinHeader_2.54mm/PinHeader_2x02_P2.54mm_Horizontal","Connector_PinHeader_2.54mm/PinHeader_2x02_P2.54mm_Vertical","Connector_PinHeader_2.54mm/PinHeader_2x02_P2.54mm_Vertical_SMD","Connector_PinHeader_2.54mm/PinHeader_2x03_P2.54mm_Horizontal","Connector_PinHeader_2.54mm/PinHeader_2x03_P2.54mm_Vertical","Connector_PinHeader_2.54mm/PinHeader_2x03_P2.54mm_Vertical_SMD","Connector_PinHeader_2.54mm/PinHeader_2x04_P2.54mm_Horizontal","Connector_PinHeader_2.54mm/PinHeader_2x04_P2.54mm_Vertical","Connector_PinHeader_2.54mm/PinHeader_2x04_P2.54mm_Vertical_SMD","Connector_PinHeader_2.54mm/PinHeader_2x05_P2.54mm_Horizontal","Connector_PinHeader_2.54mm/PinHeader_2x05_P2.54mm_Vertical","Connector_PinHeader_2.54mm/PinHeader_2x05_P2.54mm_Vertical_SMD","Connector_PinHeader_2.54mm/PinHeader_2x06_P2.54mm_Horizontal","Connector_PinHeader_2.54mm/PinHeader_2x06_P2.54mm_Vertical","Connector_PinHeader_2.54mm/PinHeader_2x06_P2.54mm_Vertical_SMD","Connector_PinHeader_2.54mm/PinHeader_2x07_P2.54mm_Horizontal","Connector_PinHeader_2.54mm/PinHeader_2x07_P2.54mm_Vertical","Connector_PinHeader_2.54mm/PinHeader_2x07_P2.54mm_Vertical_SMD","Connector_PinHeader_2.54mm/PinHeader_2x08_P2.54mm_Horizontal","Connector_PinHeader_2.54mm/PinHeader_2x08_P2.54mm_Vertical","Connector_PinHeader_2.54mm/PinHeader_2x08_P2.54mm_Vertical_SMD","Connector_PinHeader_2.54mm/PinHeader_2x09_P2.54mm_Horizontal","Connector_PinHeader_2.54mm/PinHeader_2x09_P2.54mm_Vertical","Connector_PinHeader_2.54mm/PinHeader_2x09_P2.54mm_Vertical_SMD","Connector_PinHeader_2.54mm/PinHeader_2x10_P2.54mm_Horizontal","Connector_PinHeader_2.54mm/PinHeader_2x10_P2.54mm_Vertical","Connector_PinHeader_2.54mm/PinHeader_2x10_P2.54mm_Vertical_SMD","Connector_PinHeader_2.54mm/PinHeader_2x11_P2.54mm_Horizontal","Connector_PinHeader_2.54mm/PinHeader_2x11_P2.54mm_Vertical","Connector_PinHeader_2.54mm/PinHeader_2x11_P2.54mm_Vertical_SMD","Connector_PinHeader_2.54mm/PinHeader_2x12_P2.54mm_Horizontal","Connector_PinHeader_2.54mm/PinHeader_2x12_P2.54mm_Vertical","Connector_PinHeader_2.54mm/PinHeader_2x12_P2.54mm_Vertical_SMD","Connector_PinHeader_2.54mm/PinHeader_2x13_P2.54mm_Horizontal","Connector_PinHeader_2.54mm/PinHeader_2x13_P2.54mm_Vertical","Connector_PinHeader_2.54mm/PinHeader_2x13_P2.54mm_Vertical_SMD","Connector_PinHeader_2.54mm/PinHeader_2x14_P2.54mm_Horizontal","Connector_PinHeader_2.54mm/PinHeader_2x14_P2.54mm_Vertical","Connector_PinHeader_2.54mm/PinHeader_2x14_P2.54mm_Vertical_SMD","Connector_PinHeader_2.54mm/PinHeader_2x15_P2.54mm_Horizontal","Connector_PinHeader_2.54mm/PinHeader_2x15_P2.54mm_Vertical","Connector_PinHeader_2.54mm/PinHeader_2x15_P2.54mm_Vertical_SMD","Connector_PinHeader_2.54mm/PinHeader_2x16_P2.54mm_Horizontal","Connector_PinHeader_2.54mm/PinHeader_2x16_P2.54mm_Vertical","Connector_PinHeader_2.54mm/PinHeader_2x16_P2.54mm_Vertical_SMD","Connector_PinHeader_2.54mm/PinHeader_2x17_P2.54mm_Horizontal","Connector_PinHeader_2.54mm/PinHeader_2x17_P2.54mm_Vertical","Connector_PinHeader_2.54mm/PinHeader_2x17_P2.54mm_Vertical_SMD","Connector_PinHeader_2.54mm/PinHeader_2x18_P2.54mm_Horizontal","Connector_PinHeader_2.54mm/PinHeader_2x18_P2.54mm_Vertical","Connector_PinHeader_2.54mm/PinHeader_2x18_P2.54mm_Vertical_SMD","Connector_PinHeader_2.54mm/PinHeader_2x19_P2.54mm_Horizontal","Connector_PinHeader_2.54mm/PinHeader_2x19_P2.54mm_Vertical","Connector_PinHeader_2.54mm/PinHeader_2x19_P2.54mm_Vertical_SMD","Connector_PinHeader_2.54mm/PinHeader_2x20_P2.54mm_Horizontal","Connector_PinHeader_2.54mm/PinHeader_2x20_P2.54mm_Vertical","Connector_PinHeader_2.54mm/PinHeader_2x20_P2.54mm_Vertical_SMD","Connector_PinHeader_2.54mm/PinHeader_2x21_P2.54mm_Horizontal","Connector_PinHeader_2.54mm/PinHeader_2x21_P2.54mm_Vertical","Connector_PinHeader_2.54mm/PinHeader_2x21_P2.54mm_Vertical_SMD","Connector_PinHeader_2.54mm/PinHeader_2x22_P2.54mm_Horizontal","Connector_PinHeader_2.54mm/PinHeader_2x22_P2.54mm_Vertical","Connector_PinHeader_2.54mm/PinHeader_2x22_P2.54mm_Vertical_SMD","Connector_PinHeader_2.54mm/PinHeader_2x23_P2.54mm_Horizontal","Connector_PinHeader_2.54mm/PinHeader_2x23_P2.54mm_Vertical","Connector_PinHeader_2.54mm/PinHeader_2x23_P2.54mm_Vertical_SMD","Connector_PinHeader_2.54mm/PinHeader_2x24_P2.54mm_Horizontal","Connector_PinHeader_2.54mm/PinHeader_2x24_P2.54mm_Vertical","Connector_PinHeader_2.54mm/PinHeader_2x24_P2.54mm_Vertical_SMD","Connector_PinHeader_2.54mm/PinHeader_2x25_P2.54mm_Horizontal","Connector_PinHeader_2.54mm/PinHeader_2x25_P2.54mm_Vertical","Connector_PinHeader_2.54mm/PinHeader_2x25_P2.54mm_Vertical_SMD","Connector_PinHeader_2.54mm/PinHeader_2x26_P2.54mm_Horizontal","Connector_PinHeader_2.54mm/PinHeader_2x26_P2.54mm_Vertical","Connector_PinHeader_2.54mm/PinHeader_2x26_P2.54mm_Vertical_SMD","Connector_PinHeader_2.54mm/PinHeader_2x27_P2.54mm_Horizontal","Connector_PinHeader_2.54mm/PinHeader_2x27_P2.54mm_Vertical","Connector_PinHeader_2.54mm/PinHeader_2x27_P2.54mm_Vertical_SMD","Connector_PinHeader_2.54mm/PinHeader_2x28_P2.54mm_Horizontal","Connector_PinHeader_2.54mm/PinHeader_2x28_P2.54mm_Vertical","Connector_PinHeader_2.54mm/PinHeader_2x28_P2.54mm_Vertical_SMD","Connector_PinHeader_2.54mm/PinHeader_2x29_P2.54mm_Horizontal","Connector_PinHeader_2.54mm/PinHeader_2x29_P2.54mm_Vertical","Connector_PinHeader_2.54mm/PinHeader_2x29_P2.54mm_Vertical_SMD","Connector_PinHeader_2.54mm/PinHeader_2x30_P2.54mm_Horizontal","Connector_PinHeader_2.54mm/PinHeader_2x30_P2.54mm_Vertical","Connector_PinHeader_2.54mm/PinHeader_2x30_P2.54mm_Vertical_SMD","Connector_PinHeader_2.54mm/PinHeader_2x31_P2.54mm_Horizontal","Connector_PinHeader_2.54mm/PinHeader_2x31_P2.54mm_Vertical","Connector_PinHeader_2.54mm/PinHeader_2x31_P2.54mm_Vertical_SMD","Connector_PinHeader_2.54mm/PinHeader_2x32_P2.54mm_Horizontal","Connector_PinHeader_2.54mm/PinHeader_2x32_P2.54mm_Vertical","Connector_PinHeader_2.54mm/PinHeader_2x32_P2.54mm_Vertical_SMD","Connector_PinHeader_2.54mm/PinHeader_2x33_P2.54mm_Horizontal","Connector_PinHeader_2.54mm/PinHeader_2x33_P2.54mm_Vertical","Connector_PinHeader_2.54mm/PinHeader_2x33_P2.54mm_Vertical_SMD","Connector_PinHeader_2.54mm/PinHeader_2x34_P2.54mm_Horizontal","Connector_PinHeader_2.54mm/PinHeader_2x34_P2.54mm_Vertical","Connector_PinHeader_2.54mm/PinHeader_2x34_P2.54mm_Vertical_SMD","Connector_PinHeader_2.54mm/PinHeader_2x35_P2.54mm_Horizontal","Connector_PinHeader_2.54mm/PinHeader_2x35_P2.54mm_Vertical","Connector_PinHeader_2.54mm/PinHeader_2x35_P2.54mm_Vertical_SMD","Connector_PinHeader_2.54mm/PinHeader_2x36_P2.54mm_Horizontal","Connector_PinHeader_2.54mm/PinHeader_2x36_P2.54mm_Vertical","Connector_PinHeader_2.54mm/PinHeader_2x36_P2.54mm_Vertical_SMD","Connector_PinHeader_2.54mm/PinHeader_2x37_P2.54mm_Horizontal","Connector_PinHeader_2.54mm/PinHeader_2x37_P2.54mm_Vertical","Connector_PinHeader_2.54mm/PinHeader_2x37_P2.54mm_Vertical_SMD","Connector_PinHeader_2.54mm/PinHeader_2x38_P2.54mm_Horizontal","Connector_PinHeader_2.54mm/PinHeader_2x38_P2.54mm_Vertical","Connector_PinHeader_2.54mm/PinHeader_2x38_P2.54mm_Vertical_SMD","Connector_PinHeader_2.54mm/PinHeader_2x39_P2.54mm_Horizontal","Connector_PinHeader_2.54mm/PinHeader_2x39_P2.54mm_Vertical","Connector_PinHeader_2.54mm/PinHeader_2x39_P2.54mm_Vertical_SMD","Connector_PinHeader_2.54mm/PinHeader_2x40_P2.54mm_Horizontal","Connector_PinHeader_2.54mm/PinHeader_2x40_P2.54mm_Vertical","Connector_PinHeader_2.54mm/PinHeader_2x40_P2.54mm_Vertical_SMD","Connector_PinSocket_1.00mm/PinSocket_1x02_P1.00mm_Vertical","Connector_PinSocket_1.00mm/PinSocket_1x02_P1.00mm_Vertical_SMD_Pin1Left","Connector_PinSocket_1.00mm/PinSocket_1x02_P1.00mm_Vertical_SMD_Pin1Right","Connector_PinSocket_1.00mm/PinSocket_1x03_P1.00mm_Vertical","Connector_PinSocket_1.00mm/PinSocket_1x03_P1.00mm_Vertical_SMD_Pin1Left","Connector_PinSocket_1.00mm/PinSocket_1x03_P1.00mm_Vertical_SMD_Pin1Right","Connector_PinSocket_1.00mm/PinSocket_1x04_P1.00mm_Vertical","Connector_PinSocket_1.00mm/PinSocket_1x04_P1.00mm_Vertical_SMD_Pin1Left","Connector_PinSocket_1.00mm/PinSocket_1x04_P1.00mm_Vertical_SMD_Pin1Right","Connector_PinSocket_1.00mm/PinSocket_1x05_P1.00mm_Vertical","Connector_PinSocket_1.00mm/PinSocket_1x05_P1.00mm_Vertical_SMD_Pin1Left","Connector_PinSocket_1.00mm/PinSocket_1x05_P1.00mm_Vertical_SMD_Pin1Right","Connector_PinSocket_1.00mm/PinSocket_1x06_P1.00mm_Vertical","Connector_PinSocket_1.00mm/PinSocket_1x06_P1.00mm_Vertical_SMD_Pin1Left","Connector_PinSocket_1.00mm/PinSocket_1x06_P1.00mm_Vertical_SMD_Pin1Right","Connector_PinSocket_1.00mm/PinSocket_1x07_P1.00mm_Vertical","Connector_PinSocket_1.00mm/PinSocket_1x07_P1.00mm_Vertical_SMD_Pin1Left","Connector_PinSocket_1.00mm/PinSocket_1x07_P1.00mm_Vertical_SMD_Pin1Right","Connector_PinSocket_1.00mm/PinSocket_1x08_P1.00mm_Vertical","Connector_PinSocket_1.00mm/PinSocket_1x08_P1.00mm_Vertical_SMD_Pin1Left","Connector_PinSocket_1.00mm/PinSocket_1x08_P1.00mm_Vertical_SMD_Pin1Right","Connector_PinSocket_1.00mm/PinSocket_1x09_P1.00mm_Vertical","Connector_PinSocket_1.00mm/PinSocket_1x09_P1.00mm_Vertical_SMD_Pin1Left","Connector_PinSocket_1.00mm/PinSocket_1x09_P1.00mm_Vertical_SMD_Pin1Right","Connector_PinSocket_1.00mm/PinSocket_1x10_P1.00mm_Vertical","Connector_PinSocket_1.00mm/PinSocket_1x10_P1.00mm_Vertical_SMD_Pin1Left","Connector_PinSocket_1.00mm/PinSocket_1x10_P1.00mm_Vertical_SMD_Pin1Right","Connector_PinSocket_1.00mm/PinSocket_1x11_P1.00mm_Vertical","Connector_PinSocket_1.00mm/PinSocket_1x11_P1.00mm_Vertical_SMD_Pin1Left","Connector_PinSocket_1.00mm/PinSocket_1x11_P1.00mm_Vertical_SMD_Pin1Right","Connector_PinSocket_1.00mm/PinSocket_1x12_P1.00mm_Vertical","Connector_PinSocket_1.00mm/PinSocket_1x12_P1.00mm_Vertical_SMD_Pin1Left","Connector_PinSocket_1.00mm/PinSocket_1x12_P1.00mm_Vertical_SMD_Pin1Right","Connector_PinSocket_1.00mm/PinSocket_1x13_P1.00mm_Vertical","Connector_PinSocket_1.00mm/PinSocket_1x13_P1.00mm_Vertical_SMD_Pin1Left","Connector_PinSocket_1.00mm/PinSocket_1x13_P1.00mm_Vertical_SMD_Pin1Right","Connector_PinSocket_1.00mm/PinSocket_1x14_P1.00mm_Vertical","Connector_PinSocket_1.00mm/PinSocket_1x14_P1.00mm_Vertical_SMD_Pin1Left","Connector_PinSocket_1.00mm/PinSocket_1x14_P1.00mm_Vertical_SMD_Pin1Right","Connector_PinSocket_1.00mm/PinSocket_1x15_P1.00mm_Vertical","Connector_PinSocket_1.00mm/PinSocket_1x15_P1.00mm_Vertical_SMD_Pin1Left","Connector_PinSocket_1.00mm/PinSocket_1x15_P1.00mm_Vertical_SMD_Pin1Right","Connector_PinSocket_1.00mm/PinSocket_1x16_P1.00mm_Vertical","Connector_PinSocket_1.00mm/PinSocket_1x16_P1.00mm_Vertical_SMD_Pin1Left","Connector_PinSocket_1.00mm/PinSocket_1x16_P1.00mm_Vertical_SMD_Pin1Right","Connector_PinSocket_1.00mm/PinSocket_1x17_P1.00mm_Vertical","Connector_PinSocket_1.00mm/PinSocket_1x17_P1.00mm_Vertical_SMD_Pin1Left","Connector_PinSocket_1.00mm/PinSocket_1x17_P1.00mm_Vertical_SMD_Pin1Right","Connector_PinSocket_1.00mm/PinSocket_1x18_P1.00mm_Vertical","Connector_PinSocket_1.00mm/PinSocket_1x18_P1.00mm_Vertical_SMD_Pin1Left","Connector_PinSocket_1.00mm/PinSocket_1x18_P1.00mm_Vertical_SMD_Pin1Right","Connector_PinSocket_1.00mm/PinSocket_1x19_P1.00mm_Vertical","Connector_PinSocket_1.00mm/PinSocket_1x19_P1.00mm_Vertical_SMD_Pin1Left","Connector_PinSocket_1.00mm/PinSocket_1x19_P1.00mm_Vertical_SMD_Pin1Right","Connector_PinSocket_1.00mm/PinSocket_1x20_P1.00mm_Vertical","Connector_PinSocket_1.00mm/PinSocket_1x20_P1.00mm_Vertical_SMD_Pin1Left","Connector_PinSocket_1.00mm/PinSocket_1x20_P1.00mm_Vertical_SMD_Pin1Right","Connector_PinSocket_1.00mm/PinSocket_1x21_P1.00mm_Vertical","Connector_PinSocket_1.00mm/PinSocket_1x21_P1.00mm_Vertical_SMD_Pin1Left","Connector_PinSocket_1.00mm/PinSocket_1x21_P1.00mm_Vertical_SMD_Pin1Right","Connector_PinSocket_1.00mm/PinSocket_1x22_P1.00mm_Vertical","Connector_PinSocket_1.00mm/PinSocket_1x22_P1.00mm_Vertical_SMD_Pin1Left","Connector_PinSocket_1.00mm/PinSocket_1x22_P1.00mm_Vertical_SMD_Pin1Right","Connector_PinSocket_1.00mm/PinSocket_1x23_P1.00mm_Vertical","Connector_PinSocket_1.00mm/PinSocket_1x23_P1.00mm_Vertical_SMD_Pin1Left","Connector_PinSocket_1.00mm/PinSocket_1x23_P1.00mm_Vertical_SMD_Pin1Right","Connector_PinSocket_1.00mm/PinSocket_1x24_P1.00mm_Vertical","Connector_PinSocket_1.00mm/PinSocket_1x24_P1.00mm_Vertical_SMD_Pin1Left","Connector_PinSocket_1.00mm/PinSocket_1x24_P1.00mm_Vertical_SMD_Pin1Right","Connector_PinSocket_1.00mm/PinSocket_1x25_P1.00mm_Vertical","Connector_PinSocket_1.00mm/PinSocket_1x25_P1.00mm_Vertical_SMD_Pin1Left","Connector_PinSocket_1.00mm/PinSocket_1x25_P1.00mm_Vertical_SMD_Pin1Right","Connector_PinSocket_1.00mm/PinSocket_1x26_P1.00mm_Vertical","Connector_PinSocket_1.00mm/PinSocket_1x26_P1.00mm_Vertical_SMD_Pin1Left","Connector_PinSocket_1.00mm/PinSocket_1x26_P1.00mm_Vertical_SMD_Pin1Right","Connector_PinSocket_1.00mm/PinSocket_1x27_P1.00mm_Vertical","Connector_PinSocket_1.00mm/PinSocket_1x27_P1.00mm_Vertical_SMD_Pin1Left","Connector_PinSocket_1.00mm/PinSocket_1x27_P1.00mm_Vertical_SMD_Pin1Right","Connector_PinSocket_1.00mm/PinSocket_1x28_P1.00mm_Vertical","Connector_PinSocket_1.00mm/PinSocket_1x28_P1.00mm_Vertical_SMD_Pin1Left","Connector_PinSocket_1.00mm/PinSocket_1x28_P1.00mm_Vertical_SMD_Pin1Right","Connector_PinSocket_1.00mm/PinSocket_1x29_P1.00mm_Vertical","Connector_PinSocket_1.00mm/PinSocket_1x29_P1.00mm_Vertical_SMD_Pin1Left","Connector_PinSocket_1.00mm/PinSocket_1x29_P1.00mm_Vertical_SMD_Pin1Right","Connector_PinSocket_1.00mm/PinSocket_1x30_P1.00mm_Vertical","Connector_PinSocket_1.00mm/PinSocket_1x30_P1.00mm_Vertical_SMD_Pin1Left","Connector_PinSocket_1.00mm/PinSocket_1x30_P1.00mm_Vertical_SMD_Pin1Right","Connector_PinSocket_1.00mm/PinSocket_1x31_P1.00mm_Vertical","Connector_PinSocket_1.00mm/PinSocket_1x31_P1.00mm_Vertical_SMD_Pin1Left","Connector_PinSocket_1.00mm/PinSocket_1x31_P1.00mm_Vertical_SMD_Pin1Right","Connector_PinSocket_1.00mm/PinSocket_1x32_P1.00mm_Vertical","Connector_PinSocket_1.00mm/PinSocket_1x32_P1.00mm_Vertical_SMD_Pin1Left","Connector_PinSocket_1.00mm/PinSocket_1x32_P1.00mm_Vertical_SMD_Pin1Right","Connector_PinSocket_1.00mm/PinSocket_1x33_P1.00mm_Vertical","Connector_PinSocket_1.00mm/PinSocket_1x33_P1.00mm_Vertical_SMD_Pin1Left","Connector_PinSocket_1.00mm/PinSocket_1x33_P1.00mm_Vertical_SMD_Pin1Right","Connector_PinSocket_1.00mm/PinSocket_1x34_P1.00mm_Vertical","Connector_PinSocket_1.00mm/PinSocket_1x34_P1.00mm_Vertical_SMD_Pin1Left","Connector_PinSocket_1.00mm/PinSocket_1x34_P1.00mm_Vertical_SMD_Pin1Right","Connector_PinSocket_1.00mm/PinSocket_1x35_P1.00mm_Vertical","Connector_PinSocket_1.00mm/PinSocket_1x35_P1.00mm_Vertical_SMD_Pin1Left","Connector_PinSocket_1.00mm/PinSocket_1x35_P1.00mm_Vertical_SMD_Pin1Right","Connector_PinSocket_1.00mm/PinSocket_1x36_P1.00mm_Vertical","Connector_PinSocket_1.00mm/PinSocket_1x36_P1.00mm_Vertical_SMD_Pin1Left","Connector_PinSocket_1.00mm/PinSocket_1x36_P1.00mm_Vertical_SMD_Pin1Right","Connector_PinSocket_1.00mm/PinSocket_1x37_P1.00mm_Vertical","Connector_PinSocket_1.00mm/PinSocket_1x37_P1.00mm_Vertical_SMD_Pin1Left","Connector_PinSocket_1.00mm/PinSocket_1x37_P1.00mm_Vertical_SMD_Pin1Right","Connector_PinSocket_1.00mm/PinSocket_1x38_P1.00mm_Vertical","Connector_PinSocket_1.00mm/PinSocket_1x38_P1.00mm_Vertical_SMD_Pin1Left","Connector_PinSocket_1.00mm/PinSocket_1x38_P1.00mm_Vertical_SMD_Pin1Right","Connector_PinSocket_1.00mm/PinSocket_1x39_P1.00mm_Vertical","Connector_PinSocket_1.00mm/PinSocket_1x39_P1.00mm_Vertical_SMD_Pin1Left","Connector_PinSocket_1.00mm/PinSocket_1x39_P1.00mm_Vertical_SMD_Pin1Right","Connector_PinSocket_1.00mm/PinSocket_1x40_P1.00mm_Vertical","Connector_PinSocket_1.00mm/PinSocket_1x40_P1.00mm_Vertical_SMD_Pin1Left","Connector_PinSocket_1.00mm/PinSocket_1x40_P1.00mm_Vertical_SMD_Pin1Right","Connector_PinSocket_1.00mm/PinSocket_2x02_P1.00mm_Vertical_SMD","Connector_PinSocket_1.00mm/PinSocket_2x03_P1.00mm_Vertical_SMD","Connector_PinSocket_1.00mm/PinSocket_2x04_P1.00mm_Vertical_SMD","Connector_PinSocket_1.00mm/PinSocket_2x05_P1.00mm_Vertical_SMD","Connector_PinSocket_1.00mm/PinSocket_2x06_P1.00mm_Vertical_SMD","Connector_PinSocket_1.00mm/PinSocket_2x07_P1.00mm_Vertical_SMD","Connector_PinSocket_1.00mm/PinSocket_2x08_P1.00mm_Vertical_SMD","Connector_PinSocket_1.00mm/PinSocket_2x09_P1.00mm_Vertical_SMD","Connector_PinSocket_1.00mm/PinSocket_2x10_P1.00mm_Vertical_SMD","Connector_PinSocket_1.00mm/PinSocket_2x11_P1.00mm_Vertical_SMD","Connector_PinSocket_1.00mm/PinSocket_2x12_P1.00mm_Vertical_SMD","Connector_PinSocket_1.00mm/PinSocket_2x13_P1.00mm_Vertical_SMD","Connector_PinSocket_1.00mm/PinSocket_2x14_P1.00mm_Vertical_SMD","Connector_PinSocket_1.00mm/PinSocket_2x15_P1.00mm_Vertical_SMD","Connector_PinSocket_1.00mm/PinSocket_2x16_P1.00mm_Vertical_SMD","Connector_PinSocket_1.00mm/PinSocket_2x17_P1.00mm_Vertical_SMD","Connector_PinSocket_1.00mm/PinSocket_2x18_P1.00mm_Vertical_SMD","Connector_PinSocket_1.00mm/PinSocket_2x19_P1.00mm_Vertical_SMD","Connector_PinSocket_1.00mm/PinSocket_2x20_P1.00mm_Vertical_SMD","Connector_PinSocket_1.00mm/PinSocket_2x21_P1.00mm_Vertical_SMD","Connector_PinSocket_1.00mm/PinSocket_2x22_P1.00mm_Vertical_SMD","Connector_PinSocket_1.00mm/PinSocket_2x23_P1.00mm_Vertical_SMD","Connector_PinSocket_1.00mm/PinSocket_2x24_P1.00mm_Vertical_SMD","Connector_PinSocket_1.00mm/PinSocket_2x25_P1.00mm_Vertical_SMD","Connector_PinSocket_1.00mm/PinSocket_2x26_P1.00mm_Vertical_SMD","Connector_PinSocket_1.00mm/PinSocket_2x27_P1.00mm_Vertical_SMD","Connector_PinSocket_1.00mm/PinSocket_2x28_P1.00mm_Vertical_SMD","Connector_PinSocket_1.00mm/PinSocket_2x29_P1.00mm_Vertical_SMD","Connector_PinSocket_1.00mm/PinSocket_2x30_P1.00mm_Vertical_SMD","Connector_PinSocket_1.00mm/PinSocket_2x31_P1.00mm_Vertical_SMD","Connector_PinSocket_1.00mm/PinSocket_2x32_P1.00mm_Vertical_SMD","Connector_PinSocket_1.00mm/PinSocket_2x33_P1.00mm_Vertical_SMD","Connector_PinSocket_1.00mm/PinSocket_2x34_P1.00mm_Vertical_SMD","Connector_PinSocket_1.00mm/PinSocket_2x35_P1.00mm_Vertical_SMD","Connector_PinSocket_1.00mm/PinSocket_2x36_P1.00mm_Vertical_SMD","Connector_PinSocket_1.00mm/PinSocket_2x37_P1.00mm_Vertical_SMD","Connector_PinSocket_1.00mm/PinSocket_2x38_P1.00mm_Vertical_SMD","Connector_PinSocket_1.00mm/PinSocket_2x39_P1.00mm_Vertical_SMD","Connector_PinSocket_1.00mm/PinSocket_2x40_P1.00mm_Vertical_SMD","Connector_PinSocket_1.27mm/PinSocket_1x01_P1.27mm_Vertical","Connector_PinSocket_1.27mm/PinSocket_1x02_P1.27mm_Vertical","Connector_PinSocket_1.27mm/PinSocket_1x02_P1.27mm_Vertical_SMD_Pin1Left","Connector_PinSocket_1.27mm/PinSocket_1x02_P1.27mm_Vertical_SMD_Pin1Right","Connector_PinSocket_1.27mm/PinSocket_1x03_P1.27mm_Vertical","Connector_PinSocket_1.27mm/PinSocket_1x03_P1.27mm_Vertical_SMD_Pin1Left","Connector_PinSocket_1.27mm/PinSocket_1x03_P1.27mm_Vertical_SMD_Pin1Right","Connector_PinSocket_1.27mm/PinSocket_1x04_P1.27mm_Vertical","Connector_PinSocket_1.27mm/PinSocket_1x04_P1.27mm_Vertical_SMD_Pin1Left","Connector_PinSocket_1.27mm/PinSocket_1x04_P1.27mm_Vertical_SMD_Pin1Right","Connector_PinSocket_1.27mm/PinSocket_1x05_P1.27mm_Vertical","Connector_PinSocket_1.27mm/PinSocket_1x05_P1.27mm_Vertical_SMD_Pin1Left","Connector_PinSocket_1.27mm/PinSocket_1x05_P1.27mm_Vertical_SMD_Pin1Right","Connector_PinSocket_1.27mm/PinSocket_1x06_P1.27mm_Vertical","Connector_PinSocket_1.27mm/PinSocket_1x06_P1.27mm_Vertical_SMD_Pin1Left","Connector_PinSocket_1.27mm/PinSocket_1x06_P1.27mm_Vertical_SMD_Pin1Right","Connector_PinSocket_1.27mm/PinSocket_1x07_P1.27mm_Vertical","Connector_PinSocket_1.27mm/PinSocket_1x07_P1.27mm_Vertical_SMD_Pin1Left","Connector_PinSocket_1.27mm/PinSocket_1x07_P1.27mm_Vertical_SMD_Pin1Right","Connector_PinSocket_1.27mm/PinSocket_1x08_P1.27mm_Vertical","Connector_PinSocket_1.27mm/PinSocket_1x08_P1.27mm_Vertical_SMD_Pin1Left","Connector_PinSocket_1.27mm/PinSocket_1x08_P1.27mm_Vertical_SMD_Pin1Right","Connector_PinSocket_1.27mm/PinSocket_1x09_P1.27mm_Vertical","Connector_PinSocket_1.27mm/PinSocket_1x09_P1.27mm_Vertical_SMD_Pin1Left","Connector_PinSocket_1.27mm/PinSocket_1x09_P1.27mm_Vertical_SMD_Pin1Right","Connector_PinSocket_1.27mm/PinSocket_1x10_P1.27mm_Vertical","Connector_PinSocket_1.27mm/PinSocket_1x10_P1.27mm_Vertical_SMD_Pin1Left","Connector_PinSocket_1.27mm/PinSocket_1x10_P1.27mm_Vertical_SMD_Pin1Right","Connector_PinSocket_1.27mm/PinSocket_1x11_P1.27mm_Vertical","Connector_PinSocket_1.27mm/PinSocket_1x11_P1.27mm_Vertical_SMD_Pin1Left","Connector_PinSocket_1.27mm/PinSocket_1x11_P1.27mm_Vertical_SMD_Pin1Right","Connector_PinSocket_1.27mm/PinSocket_1x12_P1.27mm_Vertical","Connector_PinSocket_1.27mm/PinSocket_1x12_P1.27mm_Vertical_SMD_Pin1Left","Connector_PinSocket_1.27mm/PinSocket_1x12_P1.27mm_Vertical_SMD_Pin1Right","Connector_PinSocket_1.27mm/PinSocket_1x13_P1.27mm_Vertical","Connector_PinSocket_1.27mm/PinSocket_1x13_P1.27mm_Vertical_SMD_Pin1Left","Connector_PinSocket_1.27mm/PinSocket_1x13_P1.27mm_Vertical_SMD_Pin1Right","Connector_PinSocket_1.27mm/PinSocket_1x14_P1.27mm_Vertical","Connector_PinSocket_1.27mm/PinSocket_1x14_P1.27mm_Vertical_SMD_Pin1Left","Connector_PinSocket_1.27mm/PinSocket_1x14_P1.27mm_Vertical_SMD_Pin1Right","Connector_PinSocket_1.27mm/PinSocket_1x15_P1.27mm_Vertical","Connector_PinSocket_1.27mm/PinSocket_1x15_P1.27mm_Vertical_SMD_Pin1Left","Connector_PinSocket_1.27mm/PinSocket_1x15_P1.27mm_Vertical_SMD_Pin1Right","Connector_PinSocket_1.27mm/PinSocket_1x16_P1.27mm_Vertical","Connector_PinSocket_1.27mm/PinSocket_1x16_P1.27mm_Vertical_SMD_Pin1Left","Connector_PinSocket_1.27mm/PinSocket_1x16_P1.27mm_Vertical_SMD_Pin1Right","Connector_PinSocket_1.27mm/PinSocket_1x17_P1.27mm_Vertical","Connector_PinSocket_1.27mm/PinSocket_1x17_P1.27mm_Vertical_SMD_Pin1Left","Connector_PinSocket_1.27mm/PinSocket_1x17_P1.27mm_Vertical_SMD_Pin1Right","Connector_PinSocket_1.27mm/PinSocket_1x18_P1.27mm_Vertical","Connector_PinSocket_1.27mm/PinSocket_1x18_P1.27mm_Vertical_SMD_Pin1Left","Connector_PinSocket_1.27mm/PinSocket_1x18_P1.27mm_Vertical_SMD_Pin1Right","Connector_PinSocket_1.27mm/PinSocket_1x19_P1.27mm_Vertical","Connector_PinSocket_1.27mm/PinSocket_1x19_P1.27mm_Vertical_SMD_Pin1Left","Connector_PinSocket_1.27mm/PinSocket_1x19_P1.27mm_Vertical_SMD_Pin1Right","Connector_PinSocket_1.27mm/PinSocket_1x20_P1.27mm_Vertical","Connector_PinSocket_1.27mm/PinSocket_1x20_P1.27mm_Vertical_SMD_Pin1Left","Connector_PinSocket_1.27mm/PinSocket_1x20_P1.27mm_Vertical_SMD_Pin1Right","Connector_PinSocket_1.27mm/PinSocket_1x21_P1.27mm_Vertical","Connector_PinSocket_1.27mm/PinSocket_1x21_P1.27mm_Vertical_SMD_Pin1Left","Connector_PinSocket_1.27mm/PinSocket_1x21_P1.27mm_Vertical_SMD_Pin1Right","Connector_PinSocket_1.27mm/PinSocket_1x22_P1.27mm_Vertical","Connector_PinSocket_1.27mm/PinSocket_1x22_P1.27mm_Vertical_SMD_Pin1Left","Connector_PinSocket_1.27mm/PinSocket_1x22_P1.27mm_Vertical_SMD_Pin1Right","Connector_PinSocket_1.27mm/PinSocket_1x23_P1.27mm_Vertical","Connector_PinSocket_1.27mm/PinSocket_1x23_P1.27mm_Vertical_SMD_Pin1Left","Connector_PinSocket_1.27mm/PinSocket_1x23_P1.27mm_Vertical_SMD_Pin1Right","Connector_PinSocket_1.27mm/PinSocket_1x24_P1.27mm_Vertical","Connector_PinSocket_1.27mm/PinSocket_1x24_P1.27mm_Vertical_SMD_Pin1Left","Connector_PinSocket_1.27mm/PinSocket_1x24_P1.27mm_Vertical_SMD_Pin1Right","Connector_PinSocket_1.27mm/PinSocket_1x25_P1.27mm_Vertical","Connector_PinSocket_1.27mm/PinSocket_1x25_P1.27mm_Vertical_SMD_Pin1Left","Connector_PinSocket_1.27mm/PinSocket_1x25_P1.27mm_Vertical_SMD_Pin1Right","Connector_PinSocket_1.27mm/PinSocket_1x26_P1.27mm_Vertical","Connector_PinSocket_1.27mm/PinSocket_1x26_P1.27mm_Vertical_SMD_Pin1Left","Connector_PinSocket_1.27mm/PinSocket_1x26_P1.27mm_Vertical_SMD_Pin1Right","Connector_PinSocket_1.27mm/PinSocket_1x27_P1.27mm_Vertical","Connector_PinSocket_1.27mm/PinSocket_1x27_P1.27mm_Vertical_SMD_Pin1Left","Connector_PinSocket_1.27mm/PinSocket_1x27_P1.27mm_Vertical_SMD_Pin1Right","Connector_PinSocket_1.27mm/PinSocket_1x28_P1.27mm_Vertical","Connector_PinSocket_1.27mm/PinSocket_1x28_P1.27mm_Vertical_SMD_Pin1Left","Connector_PinSocket_1.27mm/PinSocket_1x28_P1.27mm_Vertical_SMD_Pin1Right","Connector_PinSocket_1.27mm/PinSocket_1x29_P1.27mm_Vertical","Connector_PinSocket_1.27mm/PinSocket_1x29_P1.27mm_Vertical_SMD_Pin1Left","Connector_PinSocket_1.27mm/PinSocket_1x29_P1.27mm_Vertical_SMD_Pin1Right","Connector_PinSocket_1.27mm/PinSocket_1x30_P1.27mm_Vertical","Connector_PinSocket_1.27mm/PinSocket_1x30_P1.27mm_Vertical_SMD_Pin1Left","Connector_PinSocket_1.27mm/PinSocket_1x30_P1.27mm_Vertical_SMD_Pin1Right","Connector_PinSocket_1.27mm/PinSocket_1x31_P1.27mm_Vertical","Connector_PinSocket_1.27mm/PinSocket_1x31_P1.27mm_Vertical_SMD_Pin1Left","Connector_PinSocket_1.27mm/PinSocket_1x31_P1.27mm_Vertical_SMD_Pin1Right","Connector_PinSocket_1.27mm/PinSocket_1x32_P1.27mm_Vertical","Connector_PinSocket_1.27mm/PinSocket_1x32_P1.27mm_Vertical_SMD_Pin1Left","Connector_PinSocket_1.27mm/PinSocket_1x32_P1.27mm_Vertical_SMD_Pin1Right","Connector_PinSocket_1.27mm/PinSocket_1x33_P1.27mm_Vertical","Connector_PinSocket_1.27mm/PinSocket_1x33_P1.27mm_Vertical_SMD_Pin1Left","Connector_PinSocket_1.27mm/PinSocket_1x33_P1.27mm_Vertical_SMD_Pin1Right","Connector_PinSocket_1.27mm/PinSocket_1x34_P1.27mm_Vertical","Connector_PinSocket_1.27mm/PinSocket_1x34_P1.27mm_Vertical_SMD_Pin1Left","Connector_PinSocket_1.27mm/PinSocket_1x34_P1.27mm_Vertical_SMD_Pin1Right","Connector_PinSocket_1.27mm/PinSocket_1x35_P1.27mm_Vertical","Connector_PinSocket_1.27mm/PinSocket_1x35_P1.27mm_Vertical_SMD_Pin1Left","Connector_PinSocket_1.27mm/PinSocket_1x35_P1.27mm_Vertical_SMD_Pin1Right","Connector_PinSocket_1.27mm/PinSocket_1x36_P1.27mm_Vertical","Connector_PinSocket_1.27mm/PinSocket_1x36_P1.27mm_Vertical_SMD_Pin1Left","Connector_PinSocket_1.27mm/PinSocket_1x36_P1.27mm_Vertical_SMD_Pin1Right","Connector_PinSocket_1.27mm/PinSocket_1x37_P1.27mm_Vertical","Connector_PinSocket_1.27mm/PinSocket_1x37_P1.27mm_Vertical_SMD_Pin1Left","Connector_PinSocket_1.27mm/PinSocket_1x37_P1.27mm_Vertical_SMD_Pin1Right","Connector_PinSocket_1.27mm/PinSocket_1x38_P1.27mm_Vertical","Connector_PinSocket_1.27mm/PinSocket_1x38_P1.27mm_Vertical_SMD_Pin1Left","Connector_PinSocket_1.27mm/PinSocket_1x38_P1.27mm_Vertical_SMD_Pin1Right","Connector_PinSocket_1.27mm/PinSocket_1x39_P1.27mm_Vertical","Connector_PinSocket_1.27mm/PinSocket_1x39_P1.27mm_Vertical_SMD_Pin1Left","Connector_PinSocket_1.27mm/PinSocket_1x39_P1.27mm_Vertical_SMD_Pin1Right","Connector_PinSocket_1.27mm/PinSocket_1x40_P1.27mm_Vertical","Connector_PinSocket_1.27mm/PinSocket_1x40_P1.27mm_Vertical_SMD_Pin1Left","Connector_PinSocket_1.27mm/PinSocket_1x40_P1.27mm_Vertical_SMD_Pin1Right","Connector_PinSocket_1.27mm/PinSocket_2x01_P1.27mm_Vertical","Connector_PinSocket_1.27mm/PinSocket_2x01_P1.27mm_Vertical_SMD","Connector_PinSocket_1.27mm/PinSocket_2x02_P1.27mm_Vertical","Connector_PinSocket_1.27mm/PinSocket_2x02_P1.27mm_Vertical_SMD","Connector_PinSocket_1.27mm/PinSocket_2x03_P1.27mm_Horizontal","Connector_PinSocket_1.27mm/PinSocket_2x03_P1.27mm_Vertical","Connector_PinSocket_1.27mm/PinSocket_2x03_P1.27mm_Vertical_SMD","Connector_PinSocket_1.27mm/PinSocket_2x04_P1.27mm_Horizontal","Connector_PinSocket_1.27mm/PinSocket_2x04_P1.27mm_Vertical","Connector_PinSocket_1.27mm/PinSocket_2x04_P1.27mm_Vertical_SMD","Connector_PinSocket_1.27mm/PinSocket_2x05_P1.27mm_Horizontal","Connector_PinSocket_1.27mm/PinSocket_2x05_P1.27mm_Vertical","Connector_PinSocket_1.27mm/PinSocket_2x05_P1.27mm_Vertical_SMD","Connector_PinSocket_1.27mm/PinSocket_2x06_P1.27mm_Horizontal","Connector_PinSocket_1.27mm/PinSocket_2x06_P1.27mm_Vertical","Connector_PinSocket_1.27mm/PinSocket_2x06_P1.27mm_Vertical_SMD","Connector_PinSocket_1.27mm/PinSocket_2x07_P1.27mm_Horizontal","Connector_PinSocket_1.27mm/PinSocket_2x07_P1.27mm_Vertical","Connector_PinSocket_1.27mm/PinSocket_2x07_P1.27mm_Vertical_SMD","Connector_PinSocket_1.27mm/PinSocket_2x08_P1.27mm_Horizontal","Connector_PinSocket_1.27mm/PinSocket_2x08_P1.27mm_Vertical","Connector_PinSocket_1.27mm/PinSocket_2x08_P1.27mm_Vertical_SMD","Connector_PinSocket_1.27mm/PinSocket_2x09_P1.27mm_Horizontal","Connector_PinSocket_1.27mm/PinSocket_2x09_P1.27mm_Vertical","Connector_PinSocket_1.27mm/PinSocket_2x09_P1.27mm_Vertical_SMD","Connector_PinSocket_1.27mm/PinSocket_2x10_P1.27mm_Horizontal","Connector_PinSocket_1.27mm/PinSocket_2x10_P1.27mm_Vertical","Connector_PinSocket_1.27mm/PinSocket_2x10_P1.27mm_Vertical_SMD","Connector_PinSocket_1.27mm/PinSocket_2x11_P1.27mm_Horizontal","Connector_PinSocket_1.27mm/PinSocket_2x11_P1.27mm_Vertical","Connector_PinSocket_1.27mm/PinSocket_2x11_P1.27mm_Vertical_SMD","Connector_PinSocket_1.27mm/PinSocket_2x12_P1.27mm_Horizontal","Connector_PinSocket_1.27mm/PinSocket_2x12_P1.27mm_Vertical","Connector_PinSocket_1.27mm/PinSocket_2x12_P1.27mm_Vertical_SMD","Connector_PinSocket_1.27mm/PinSocket_2x13_P1.27mm_Horizontal","Connector_PinSocket_1.27mm/PinSocket_2x13_P1.27mm_Vertical","Connector_PinSocket_1.27mm/PinSocket_2x13_P1.27mm_Vertical_SMD","Connector_PinSocket_1.27mm/PinSocket_2x14_P1.27mm_Horizontal","Connector_PinSocket_1.27mm/PinSocket_2x14_P1.27mm_Vertical","Connector_PinSocket_1.27mm/PinSocket_2x14_P1.27mm_Vertical_SMD","Connector_PinSocket_1.27mm/PinSocket_2x15_P1.27mm_Horizontal","Connector_PinSocket_1.27mm/PinSocket_2x15_P1.27mm_Vertical","Connector_PinSocket_1.27mm/PinSocket_2x15_P1.27mm_Vertical_SMD","Connector_PinSocket_1.27mm/PinSocket_2x16_P1.27mm_Horizontal","Connector_PinSocket_1.27mm/PinSocket_2x16_P1.27mm_Vertical","Connector_PinSocket_1.27mm/PinSocket_2x16_P1.27mm_Vertical_SMD","Connector_PinSocket_1.27mm/PinSocket_2x17_P1.27mm_Horizontal","Connector_PinSocket_1.27mm/PinSocket_2x17_P1.27mm_Vertical","Connector_PinSocket_1.27mm/PinSocket_2x17_P1.27mm_Vertical_SMD","Connector_PinSocket_1.27mm/PinSocket_2x18_P1.27mm_Horizontal","Connector_PinSocket_1.27mm/PinSocket_2x18_P1.27mm_Vertical","Connector_PinSocket_1.27mm/PinSocket_2x18_P1.27mm_Vertical_SMD","Connector_PinSocket_1.27mm/PinSocket_2x19_P1.27mm_Horizontal","Connector_PinSocket_1.27mm/PinSocket_2x19_P1.27mm_Vertical","Connector_PinSocket_1.27mm/PinSocket_2x19_P1.27mm_Vertical_SMD","Connector_PinSocket_1.27mm/PinSocket_2x20_P1.27mm_Horizontal","Connector_PinSocket_1.27mm/PinSocket_2x20_P1.27mm_Vertical","Connector_PinSocket_1.27mm/PinSocket_2x20_P1.27mm_Vertical_SMD","Connector_PinSocket_1.27mm/PinSocket_2x21_P1.27mm_Horizontal","Connector_PinSocket_1.27mm/PinSocket_2x21_P1.27mm_Vertical","Connector_PinSocket_1.27mm/PinSocket_2x21_P1.27mm_Vertical_SMD","Connector_PinSocket_1.27mm/PinSocket_2x22_P1.27mm_Horizontal","Connector_PinSocket_1.27mm/PinSocket_2x22_P1.27mm_Vertical","Connector_PinSocket_1.27mm/PinSocket_2x22_P1.27mm_Vertical_SMD","Connector_PinSocket_1.27mm/PinSocket_2x23_P1.27mm_Horizontal","Connector_PinSocket_1.27mm/PinSocket_2x23_P1.27mm_Vertical","Connector_PinSocket_1.27mm/PinSocket_2x23_P1.27mm_Vertical_SMD","Connector_PinSocket_1.27mm/PinSocket_2x24_P1.27mm_Horizontal","Connector_PinSocket_1.27mm/PinSocket_2x24_P1.27mm_Vertical","Connector_PinSocket_1.27mm/PinSocket_2x24_P1.27mm_Vertical_SMD","Connector_PinSocket_1.27mm/PinSocket_2x25_P1.27mm_Horizontal","Connector_PinSocket_1.27mm/PinSocket_2x25_P1.27mm_Vertical","Connector_PinSocket_1.27mm/PinSocket_2x25_P1.27mm_Vertical_SMD","Connector_PinSocket_1.27mm/PinSocket_2x26_P1.27mm_Horizontal","Connector_PinSocket_1.27mm/PinSocket_2x26_P1.27mm_Vertical","Connector_PinSocket_1.27mm/PinSocket_2x26_P1.27mm_Vertical_SMD","Connector_PinSocket_1.27mm/PinSocket_2x27_P1.27mm_Horizontal","Connector_PinSocket_1.27mm/PinSocket_2x27_P1.27mm_Vertical","Connector_PinSocket_1.27mm/PinSocket_2x27_P1.27mm_Vertical_SMD","Connector_PinSocket_1.27mm/PinSocket_2x28_P1.27mm_Horizontal","Connector_PinSocket_1.27mm/PinSocket_2x28_P1.27mm_Vertical","Connector_PinSocket_1.27mm/PinSocket_2x28_P1.27mm_Vertical_SMD","Connector_PinSocket_1.27mm/PinSocket_2x29_P1.27mm_Horizontal","Connector_PinSocket_1.27mm/PinSocket_2x29_P1.27mm_Vertical","Connector_PinSocket_1.27mm/PinSocket_2x29_P1.27mm_Vertical_SMD","Connector_PinSocket_1.27mm/PinSocket_2x30_P1.27mm_Horizontal","Connector_PinSocket_1.27mm/PinSocket_2x30_P1.27mm_Vertical","Connector_PinSocket_1.27mm/PinSocket_2x30_P1.27mm_Vertical_SMD","Connector_PinSocket_1.27mm/PinSocket_2x31_P1.27mm_Horizontal","Connector_PinSocket_1.27mm/PinSocket_2x31_P1.27mm_Vertical","Connector_PinSocket_1.27mm/PinSocket_2x31_P1.27mm_Vertical_SMD","Connector_PinSocket_1.27mm/PinSocket_2x32_P1.27mm_Horizontal","Connector_PinSocket_1.27mm/PinSocket_2x32_P1.27mm_Vertical","Connector_PinSocket_1.27mm/PinSocket_2x32_P1.27mm_Vertical_SMD","Connector_PinSocket_1.27mm/PinSocket_2x33_P1.27mm_Horizontal","Connector_PinSocket_1.27mm/PinSocket_2x33_P1.27mm_Vertical","Connector_PinSocket_1.27mm/PinSocket_2x33_P1.27mm_Vertical_SMD","Connector_PinSocket_1.27mm/PinSocket_2x34_P1.27mm_Horizontal","Connector_PinSocket_1.27mm/PinSocket_2x34_P1.27mm_Vertical","Connector_PinSocket_1.27mm/PinSocket_2x34_P1.27mm_Vertical_SMD","Connector_PinSocket_1.27mm/PinSocket_2x35_P1.27mm_Horizontal","Connector_PinSocket_1.27mm/PinSocket_2x35_P1.27mm_Vertical","Connector_PinSocket_1.27mm/PinSocket_2x35_P1.27mm_Vertical_SMD","Connector_PinSocket_1.27mm/PinSocket_2x36_P1.27mm_Horizontal","Connector_PinSocket_1.27mm/PinSocket_2x36_P1.27mm_Vertical","Connector_PinSocket_1.27mm/PinSocket_2x36_P1.27mm_Vertical_SMD","Connector_PinSocket_1.27mm/PinSocket_2x37_P1.27mm_Horizontal","Connector_PinSocket_1.27mm/PinSocket_2x37_P1.27mm_Vertical","Connector_PinSocket_1.27mm/PinSocket_2x37_P1.27mm_Vertical_SMD","Connector_PinSocket_1.27mm/PinSocket_2x38_P1.27mm_Horizontal","Connector_PinSocket_1.27mm/PinSocket_2x38_P1.27mm_Vertical","Connector_PinSocket_1.27mm/PinSocket_2x38_P1.27mm_Vertical_SMD","Connector_PinSocket_1.27mm/PinSocket_2x39_P1.27mm_Horizontal","Connector_PinSocket_1.27mm/PinSocket_2x39_P1.27mm_Vertical","Connector_PinSocket_1.27mm/PinSocket_2x39_P1.27mm_Vertical_SMD","Connector_PinSocket_1.27mm/PinSocket_2x40_P1.27mm_Horizontal","Connector_PinSocket_1.27mm/PinSocket_2x40_P1.27mm_Vertical","Connector_PinSocket_1.27mm/PinSocket_2x40_P1.27mm_Vertical_SMD","Connector_PinSocket_1.27mm/PinSocket_2x41_P1.27mm_Horizontal","Connector_PinSocket_1.27mm/PinSocket_2x42_P1.27mm_Horizontal","Connector_PinSocket_1.27mm/PinSocket_2x43_P1.27mm_Horizontal","Connector_PinSocket_1.27mm/PinSocket_2x44_P1.27mm_Horizontal","Connector_PinSocket_1.27mm/PinSocket_2x45_P1.27mm_Horizontal","Connector_PinSocket_1.27mm/PinSocket_2x46_P1.27mm_Horizontal","Connector_PinSocket_1.27mm/PinSocket_2x47_P1.27mm_Horizontal","Connector_PinSocket_1.27mm/PinSocket_2x48_P1.27mm_Horizontal","Connector_PinSocket_1.27mm/PinSocket_2x49_P1.27mm_Horizontal","Connector_PinSocket_1.27mm/PinSocket_2x50_P1.27mm_Horizontal","Connector_PinSocket_2.00mm/PinSocket_1x01_P2.00mm_Horizontal","Connector_PinSocket_2.00mm/PinSocket_1x01_P2.00mm_Vertical","Connector_PinSocket_2.00mm/PinSocket_1x02_P2.00mm_Horizontal","Connector_PinSocket_2.00mm/PinSocket_1x02_P2.00mm_Vertical","Connector_PinSocket_2.00mm/PinSocket_1x02_P2.00mm_Vertical_SMD_Pin1Left","Connector_PinSocket_2.00mm/PinSocket_1x02_P2.00mm_Vertical_SMD_Pin1Right","Connector_PinSocket_2.00mm/PinSocket_1x03_P2.00mm_Horizontal","Connector_PinSocket_2.00mm/PinSocket_1x03_P2.00mm_Vertical","Connector_PinSocket_2.00mm/PinSocket_1x03_P2.00mm_Vertical_SMD_Pin1Left","Connector_PinSocket_2.00mm/PinSocket_1x03_P2.00mm_Vertical_SMD_Pin1Right","Connector_PinSocket_2.00mm/PinSocket_1x04_P2.00mm_Horizontal","Connector_PinSocket_2.00mm/PinSocket_1x04_P2.00mm_Vertical","Connector_PinSocket_2.00mm/PinSocket_1x04_P2.00mm_Vertical_SMD_Pin1Left","Connector_PinSocket_2.00mm/PinSocket_1x04_P2.00mm_Vertical_SMD_Pin1Right","Connector_PinSocket_2.00mm/PinSocket_1x05_P2.00mm_Horizontal","Connector_PinSocket_2.00mm/PinSocket_1x05_P2.00mm_Vertical","Connector_PinSocket_2.00mm/PinSocket_1x05_P2.00mm_Vertical_SMD_Pin1Left","Connector_PinSocket_2.00mm/PinSocket_1x05_P2.00mm_Vertical_SMD_Pin1Right","Connector_PinSocket_2.00mm/PinSocket_1x06_P2.00mm_Horizontal","Connector_PinSocket_2.00mm/PinSocket_1x06_P2.00mm_Vertical","Connector_PinSocket_2.00mm/PinSocket_1x06_P2.00mm_Vertical_SMD_Pin1Left","Connector_PinSocket_2.00mm/PinSocket_1x06_P2.00mm_Vertical_SMD_Pin1Right","Connector_PinSocket_2.00mm/PinSocket_1x07_P2.00mm_Horizontal","Connector_PinSocket_2.00mm/PinSocket_1x07_P2.00mm_Vertical","Connector_PinSocket_2.00mm/PinSocket_1x07_P2.00mm_Vertical_SMD_Pin1Left","Connector_PinSocket_2.00mm/PinSocket_1x07_P2.00mm_Vertical_SMD_Pin1Right","Connector_PinSocket_2.00mm/PinSocket_1x08_P2.00mm_Horizontal","Connector_PinSocket_2.00mm/PinSocket_1x08_P2.00mm_Vertical","Connector_PinSocket_2.00mm/PinSocket_1x08_P2.00mm_Vertical_SMD_Pin1Left","Connector_PinSocket_2.00mm/PinSocket_1x08_P2.00mm_Vertical_SMD_Pin1Right","Connector_PinSocket_2.00mm/PinSocket_1x09_P2.00mm_Horizontal","Connector_PinSocket_2.00mm/PinSocket_1x09_P2.00mm_Vertical","Connector_PinSocket_2.00mm/PinSocket_1x09_P2.00mm_Vertical_SMD_Pin1Left","Connector_PinSocket_2.00mm/PinSocket_1x09_P2.00mm_Vertical_SMD_Pin1Right","Connector_PinSocket_2.00mm/PinSocket_1x10_P2.00mm_Horizontal","Connector_PinSocket_2.00mm/PinSocket_1x10_P2.00mm_Vertical","Connector_PinSocket_2.00mm/PinSocket_1x10_P2.00mm_Vertical_SMD_Pin1Left","Connector_PinSocket_2.00mm/PinSocket_1x10_P2.00mm_Vertical_SMD_Pin1Right","Connector_PinSocket_2.00mm/PinSocket_1x11_P2.00mm_Horizontal","Connector_PinSocket_2.00mm/PinSocket_1x11_P2.00mm_Vertical","Connector_PinSocket_2.00mm/PinSocket_1x11_P2.00mm_Vertical_SMD_Pin1Left","Connector_PinSocket_2.00mm/PinSocket_1x11_P2.00mm_Vertical_SMD_Pin1Right","Connector_PinSocket_2.00mm/PinSocket_1x12_P2.00mm_Horizontal","Connector_PinSocket_2.00mm/PinSocket_1x12_P2.00mm_Vertical","Connector_PinSocket_2.00mm/PinSocket_1x12_P2.00mm_Vertical_SMD_Pin1Left","Connector_PinSocket_2.00mm/PinSocket_1x12_P2.00mm_Vertical_SMD_Pin1Right","Connector_PinSocket_2.00mm/PinSocket_1x13_P2.00mm_Horizontal","Connector_PinSocket_2.00mm/PinSocket_1x13_P2.00mm_Vertical","Connector_PinSocket_2.00mm/PinSocket_1x13_P2.00mm_Vertical_SMD_Pin1Left","Connector_PinSocket_2.00mm/PinSocket_1x13_P2.00mm_Vertical_SMD_Pin1Right","Connector_PinSocket_2.00mm/PinSocket_1x14_P2.00mm_Horizontal","Connector_PinSocket_2.00mm/PinSocket_1x14_P2.00mm_Vertical","Connector_PinSocket_2.00mm/PinSocket_1x14_P2.00mm_Vertical_SMD_Pin1Left","Connector_PinSocket_2.00mm/PinSocket_1x14_P2.00mm_Vertical_SMD_Pin1Right","Connector_PinSocket_2.00mm/PinSocket_1x15_P2.00mm_Horizontal","Connector_PinSocket_2.00mm/PinSocket_1x15_P2.00mm_Vertical","Connector_PinSocket_2.00mm/PinSocket_1x15_P2.00mm_Vertical_SMD_Pin1Left","Connector_PinSocket_2.00mm/PinSocket_1x15_P2.00mm_Vertical_SMD_Pin1Right","Connector_PinSocket_2.00mm/PinSocket_1x16_P2.00mm_Horizontal","Connector_PinSocket_2.00mm/PinSocket_1x16_P2.00mm_Vertical","Connector_PinSocket_2.00mm/PinSocket_1x16_P2.00mm_Vertical_SMD_Pin1Left","Connector_PinSocket_2.00mm/PinSocket_1x16_P2.00mm_Vertical_SMD_Pin1Right","Connector_PinSocket_2.00mm/PinSocket_1x17_P2.00mm_Horizontal","Connector_PinSocket_2.00mm/PinSocket_1x17_P2.00mm_Vertical","Connector_PinSocket_2.00mm/PinSocket_1x17_P2.00mm_Vertical_SMD_Pin1Left","Connector_PinSocket_2.00mm/PinSocket_1x17_P2.00mm_Vertical_SMD_Pin1Right","Connector_PinSocket_2.00mm/PinSocket_1x18_P2.00mm_Horizontal","Connector_PinSocket_2.00mm/PinSocket_1x18_P2.00mm_Vertical","Connector_PinSocket_2.00mm/PinSocket_1x18_P2.00mm_Vertical_SMD_Pin1Left","Connector_PinSocket_2.00mm/PinSocket_1x18_P2.00mm_Vertical_SMD_Pin1Right","Connector_PinSocket_2.00mm/PinSocket_1x19_P2.00mm_Horizontal","Connector_PinSocket_2.00mm/PinSocket_1x19_P2.00mm_Vertical","Connector_PinSocket_2.00mm/PinSocket_1x19_P2.00mm_Vertical_SMD_Pin1Left","Connector_PinSocket_2.00mm/PinSocket_1x19_P2.00mm_Vertical_SMD_Pin1Right","Connector_PinSocket_2.00mm/PinSocket_1x20_P2.00mm_Horizontal","Connector_PinSocket_2.00mm/PinSocket_1x20_P2.00mm_Vertical","Connector_PinSocket_2.00mm/PinSocket_1x20_P2.00mm_Vertical_SMD_Pin1Left","Connector_PinSocket_2.00mm/PinSocket_1x20_P2.00mm_Vertical_SMD_Pin1Right","Connector_PinSocket_2.00mm/PinSocket_1x21_P2.00mm_Horizontal","Connector_PinSocket_2.00mm/PinSocket_1x21_P2.00mm_Vertical","Connector_PinSocket_2.00mm/PinSocket_1x21_P2.00mm_Vertical_SMD_Pin1Left","Connector_PinSocket_2.00mm/PinSocket_1x21_P2.00mm_Vertical_SMD_Pin1Right","Connector_PinSocket_2.00mm/PinSocket_1x22_P2.00mm_Horizontal","Connector_PinSocket_2.00mm/PinSocket_1x22_P2.00mm_Vertical","Connector_PinSocket_2.00mm/PinSocket_1x22_P2.00mm_Vertical_SMD_Pin1Left","Connector_PinSocket_2.00mm/PinSocket_1x22_P2.00mm_Vertical_SMD_Pin1Right","Connector_PinSocket_2.00mm/PinSocket_1x23_P2.00mm_Horizontal","Connector_PinSocket_2.00mm/PinSocket_1x23_P2.00mm_Vertical","Connector_PinSocket_2.00mm/PinSocket_1x23_P2.00mm_Vertical_SMD_Pin1Left","Connector_PinSocket_2.00mm/PinSocket_1x23_P2.00mm_Vertical_SMD_Pin1Right","Connector_PinSocket_2.00mm/PinSocket_1x24_P2.00mm_Horizontal","Connector_PinSocket_2.00mm/PinSocket_1x24_P2.00mm_Vertical","Connector_PinSocket_2.00mm/PinSocket_1x24_P2.00mm_Vertical_SMD_Pin1Left","Connector_PinSocket_2.00mm/PinSocket_1x24_P2.00mm_Vertical_SMD_Pin1Right","Connector_PinSocket_2.00mm/PinSocket_1x25_P2.00mm_Horizontal","Connector_PinSocket_2.00mm/PinSocket_1x25_P2.00mm_Vertical","Connector_PinSocket_2.00mm/PinSocket_1x25_P2.00mm_Vertical_SMD_Pin1Left","Connector_PinSocket_2.00mm/PinSocket_1x25_P2.00mm_Vertical_SMD_Pin1Right","Connector_PinSocket_2.00mm/PinSocket_1x26_P2.00mm_Horizontal","Connector_PinSocket_2.00mm/PinSocket_1x26_P2.00mm_Vertical","Connector_PinSocket_2.00mm/PinSocket_1x26_P2.00mm_Vertical_SMD_Pin1Left","Connector_PinSocket_2.00mm/PinSocket_1x26_P2.00mm_Vertical_SMD_Pin1Right","Connector_PinSocket_2.00mm/PinSocket_1x27_P2.00mm_Horizontal","Connector_PinSocket_2.00mm/PinSocket_1x27_P2.00mm_Vertical","Connector_PinSocket_2.00mm/PinSocket_1x27_P2.00mm_Vertical_SMD_Pin1Left","Connector_PinSocket_2.00mm/PinSocket_1x27_P2.00mm_Vertical_SMD_Pin1Right","Connector_PinSocket_2.00mm/PinSocket_1x28_P2.00mm_Horizontal","Connector_PinSocket_2.00mm/PinSocket_1x28_P2.00mm_Vertical","Connector_PinSocket_2.00mm/PinSocket_1x28_P2.00mm_Vertical_SMD_Pin1Left","Connector_PinSocket_2.00mm/PinSocket_1x28_P2.00mm_Vertical_SMD_Pin1Right","Connector_PinSocket_2.00mm/PinSocket_1x29_P2.00mm_Horizontal","Connector_PinSocket_2.00mm/PinSocket_1x29_P2.00mm_Vertical","Connector_PinSocket_2.00mm/PinSocket_1x29_P2.00mm_Vertical_SMD_Pin1Left","Connector_PinSocket_2.00mm/PinSocket_1x29_P2.00mm_Vertical_SMD_Pin1Right","Connector_PinSocket_2.00mm/PinSocket_1x30_P2.00mm_Horizontal","Connector_PinSocket_2.00mm/PinSocket_1x30_P2.00mm_Vertical","Connector_PinSocket_2.00mm/PinSocket_1x30_P2.00mm_Vertical_SMD_Pin1Left","Connector_PinSocket_2.00mm/PinSocket_1x30_P2.00mm_Vertical_SMD_Pin1Right","Connector_PinSocket_2.00mm/PinSocket_1x31_P2.00mm_Horizontal","Connector_PinSocket_2.00mm/PinSocket_1x31_P2.00mm_Vertical","Connector_PinSocket_2.00mm/PinSocket_1x31_P2.00mm_Vertical_SMD_Pin1Left","Connector_PinSocket_2.00mm/PinSocket_1x31_P2.00mm_Vertical_SMD_Pin1Right","Connector_PinSocket_2.00mm/PinSocket_1x32_P2.00mm_Horizontal","Connector_PinSocket_2.00mm/PinSocket_1x32_P2.00mm_Vertical","Connector_PinSocket_2.00mm/PinSocket_1x32_P2.00mm_Vertical_SMD_Pin1Left","Connector_PinSocket_2.00mm/PinSocket_1x32_P2.00mm_Vertical_SMD_Pin1Right","Connector_PinSocket_2.00mm/PinSocket_1x33_P2.00mm_Horizontal","Connector_PinSocket_2.00mm/PinSocket_1x33_P2.00mm_Vertical","Connector_PinSocket_2.00mm/PinSocket_1x33_P2.00mm_Vertical_SMD_Pin1Left","Connector_PinSocket_2.00mm/PinSocket_1x33_P2.00mm_Vertical_SMD_Pin1Right","Connector_PinSocket_2.00mm/PinSocket_1x34_P2.00mm_Horizontal","Connector_PinSocket_2.00mm/PinSocket_1x34_P2.00mm_Vertical","Connector_PinSocket_2.00mm/PinSocket_1x34_P2.00mm_Vertical_SMD_Pin1Left","Connector_PinSocket_2.00mm/PinSocket_1x34_P2.00mm_Vertical_SMD_Pin1Right","Connector_PinSocket_2.00mm/PinSocket_1x35_P2.00mm_Horizontal","Connector_PinSocket_2.00mm/PinSocket_1x35_P2.00mm_Vertical","Connector_PinSocket_2.00mm/PinSocket_1x35_P2.00mm_Vertical_SMD_Pin1Left","Connector_PinSocket_2.00mm/PinSocket_1x35_P2.00mm_Vertical_SMD_Pin1Right","Connector_PinSocket_2.00mm/PinSocket_1x36_P2.00mm_Horizontal","Connector_PinSocket_2.00mm/PinSocket_1x36_P2.00mm_Vertical","Connector_PinSocket_2.00mm/PinSocket_1x36_P2.00mm_Vertical_SMD_Pin1Left","Connector_PinSocket_2.00mm/PinSocket_1x36_P2.00mm_Vertical_SMD_Pin1Right","Connector_PinSocket_2.00mm/PinSocket_1x37_P2.00mm_Horizontal","Connector_PinSocket_2.00mm/PinSocket_1x37_P2.00mm_Vertical","Connector_PinSocket_2.00mm/PinSocket_1x37_P2.00mm_Vertical_SMD_Pin1Left","Connector_PinSocket_2.00mm/PinSocket_1x37_P2.00mm_Vertical_SMD_Pin1Right","Connector_PinSocket_2.00mm/PinSocket_1x38_P2.00mm_Horizontal","Connector_PinSocket_2.00mm/PinSocket_1x38_P2.00mm_Vertical","Connector_PinSocket_2.00mm/PinSocket_1x38_P2.00mm_Vertical_SMD_Pin1Left","Connector_PinSocket_2.00mm/PinSocket_1x38_P2.00mm_Vertical_SMD_Pin1Right","Connector_PinSocket_2.00mm/PinSocket_1x39_P2.00mm_Horizontal","Connector_PinSocket_2.00mm/PinSocket_1x39_P2.00mm_Vertical","Connector_PinSocket_2.00mm/PinSocket_1x39_P2.00mm_Vertical_SMD_Pin1Left","Connector_PinSocket_2.00mm/PinSocket_1x39_P2.00mm_Vertical_SMD_Pin1Right","Connector_PinSocket_2.00mm/PinSocket_1x40_P2.00mm_Horizontal","Connector_PinSocket_2.00mm/PinSocket_1x40_P2.00mm_Vertical","Connector_PinSocket_2.00mm/PinSocket_1x40_P2.00mm_Vertical_SMD_Pin1Left","Connector_PinSocket_2.00mm/PinSocket_1x40_P2.00mm_Vertical_SMD_Pin1Right","Connector_PinSocket_2.00mm/PinSocket_2x01_P2.00mm_Horizontal","Connector_PinSocket_2.00mm/PinSocket_2x01_P2.00mm_Vertical","Connector_PinSocket_2.00mm/PinSocket_2x01_P2.00mm_Vertical_SMD","Connector_PinSocket_2.00mm/PinSocket_2x02_P2.00mm_Horizontal","Connector_PinSocket_2.00mm/PinSocket_2x02_P2.00mm_Vertical","Connector_PinSocket_2.00mm/PinSocket_2x02_P2.00mm_Vertical_SMD","Connector_PinSocket_2.00mm/PinSocket_2x03_P2.00mm_Horizontal","Connector_PinSocket_2.00mm/PinSocket_2x03_P2.00mm_Vertical","Connector_PinSocket_2.00mm/PinSocket_2x03_P2.00mm_Vertical_SMD","Connector_PinSocket_2.00mm/PinSocket_2x04_P2.00mm_Horizontal","Connector_PinSocket_2.00mm/PinSocket_2x04_P2.00mm_Vertical","Connector_PinSocket_2.00mm/PinSocket_2x04_P2.00mm_Vertical_SMD","Connector_PinSocket_2.00mm/PinSocket_2x05_P2.00mm_Horizontal","Connector_PinSocket_2.00mm/PinSocket_2x05_P2.00mm_Vertical","Connector_PinSocket_2.00mm/PinSocket_2x05_P2.00mm_Vertical_SMD","Connector_PinSocket_2.00mm/PinSocket_2x06_P2.00mm_Horizontal","Connector_PinSocket_2.00mm/PinSocket_2x06_P2.00mm_Vertical","Connector_PinSocket_2.00mm/PinSocket_2x06_P2.00mm_Vertical_SMD","Connector_PinSocket_2.00mm/PinSocket_2x07_P2.00mm_Horizontal","Connector_PinSocket_2.00mm/PinSocket_2x07_P2.00mm_Vertical","Connector_PinSocket_2.00mm/PinSocket_2x07_P2.00mm_Vertical_SMD","Connector_PinSocket_2.00mm/PinSocket_2x08_P2.00mm_Horizontal","Connector_PinSocket_2.00mm/PinSocket_2x08_P2.00mm_Vertical","Connector_PinSocket_2.00mm/PinSocket_2x08_P2.00mm_Vertical_SMD","Connector_PinSocket_2.00mm/PinSocket_2x09_P2.00mm_Horizontal","Connector_PinSocket_2.00mm/PinSocket_2x09_P2.00mm_Vertical","Connector_PinSocket_2.00mm/PinSocket_2x09_P2.00mm_Vertical_SMD","Connector_PinSocket_2.00mm/PinSocket_2x10_P2.00mm_Horizontal","Connector_PinSocket_2.00mm/PinSocket_2x10_P2.00mm_Vertical","Connector_PinSocket_2.00mm/PinSocket_2x10_P2.00mm_Vertical_SMD","Connector_PinSocket_2.00mm/PinSocket_2x11_P2.00mm_Horizontal","Connector_PinSocket_2.00mm/PinSocket_2x11_P2.00mm_Vertical","Connector_PinSocket_2.00mm/PinSocket_2x11_P2.00mm_Vertical_SMD","Connector_PinSocket_2.00mm/PinSocket_2x12_P2.00mm_Horizontal","Connector_PinSocket_2.00mm/PinSocket_2x12_P2.00mm_Vertical","Connector_PinSocket_2.00mm/PinSocket_2x12_P2.00mm_Vertical_SMD","Connector_PinSocket_2.00mm/PinSocket_2x13_P2.00mm_Horizontal","Connector_PinSocket_2.00mm/PinSocket_2x13_P2.00mm_Vertical","Connector_PinSocket_2.00mm/PinSocket_2x13_P2.00mm_Vertical_SMD","Connector_PinSocket_2.00mm/PinSocket_2x14_P2.00mm_Horizontal","Connector_PinSocket_2.00mm/PinSocket_2x14_P2.00mm_Vertical","Connector_PinSocket_2.00mm/PinSocket_2x14_P2.00mm_Vertical_SMD","Connector_PinSocket_2.00mm/PinSocket_2x15_P2.00mm_Horizontal","Connector_PinSocket_2.00mm/PinSocket_2x15_P2.00mm_Vertical","Connector_PinSocket_2.00mm/PinSocket_2x15_P2.00mm_Vertical_SMD","Connector_PinSocket_2.00mm/PinSocket_2x16_P2.00mm_Horizontal","Connector_PinSocket_2.00mm/PinSocket_2x16_P2.00mm_Vertical","Connector_PinSocket_2.00mm/PinSocket_2x16_P2.00mm_Vertical_SMD","Connector_PinSocket_2.00mm/PinSocket_2x17_P2.00mm_Horizontal","Connector_PinSocket_2.00mm/PinSocket_2x17_P2.00mm_Vertical","Connector_PinSocket_2.00mm/PinSocket_2x17_P2.00mm_Vertical_SMD","Connector_PinSocket_2.00mm/PinSocket_2x18_P2.00mm_Horizontal","Connector_PinSocket_2.00mm/PinSocket_2x18_P2.00mm_Vertical","Connector_PinSocket_2.00mm/PinSocket_2x18_P2.00mm_Vertical_SMD","Connector_PinSocket_2.00mm/PinSocket_2x19_P2.00mm_Horizontal","Connector_PinSocket_2.00mm/PinSocket_2x19_P2.00mm_Vertical","Connector_PinSocket_2.00mm/PinSocket_2x19_P2.00mm_Vertical_SMD","Connector_PinSocket_2.00mm/PinSocket_2x20_P2.00mm_Horizontal","Connector_PinSocket_2.00mm/PinSocket_2x20_P2.00mm_Vertical","Connector_PinSocket_2.00mm/PinSocket_2x20_P2.00mm_Vertical_SMD","Connector_PinSocket_2.00mm/PinSocket_2x21_P2.00mm_Horizontal","Connector_PinSocket_2.00mm/PinSocket_2x21_P2.00mm_Vertical","Connector_PinSocket_2.00mm/PinSocket_2x21_P2.00mm_Vertical_SMD","Connector_PinSocket_2.00mm/PinSocket_2x22_P2.00mm_Horizontal","Connector_PinSocket_2.00mm/PinSocket_2x22_P2.00mm_Vertical","Connector_PinSocket_2.00mm/PinSocket_2x22_P2.00mm_Vertical_SMD","Connector_PinSocket_2.00mm/PinSocket_2x23_P2.00mm_Horizontal","Connector_PinSocket_2.00mm/PinSocket_2x23_P2.00mm_Vertical","Connector_PinSocket_2.00mm/PinSocket_2x23_P2.00mm_Vertical_SMD","Connector_PinSocket_2.00mm/PinSocket_2x24_P2.00mm_Horizontal","Connector_PinSocket_2.00mm/PinSocket_2x24_P2.00mm_Vertical","Connector_PinSocket_2.00mm/PinSocket_2x24_P2.00mm_Vertical_SMD","Connector_PinSocket_2.00mm/PinSocket_2x25_P2.00mm_Horizontal","Connector_PinSocket_2.00mm/PinSocket_2x25_P2.00mm_Vertical","Connector_PinSocket_2.00mm/PinSocket_2x25_P2.00mm_Vertical_SMD","Connector_PinSocket_2.00mm/PinSocket_2x26_P2.00mm_Horizontal","Connector_PinSocket_2.00mm/PinSocket_2x26_P2.00mm_Vertical","Connector_PinSocket_2.00mm/PinSocket_2x26_P2.00mm_Vertical_SMD","Connector_PinSocket_2.00mm/PinSocket_2x27_P2.00mm_Horizontal","Connector_PinSocket_2.00mm/PinSocket_2x27_P2.00mm_Vertical","Connector_PinSocket_2.00mm/PinSocket_2x27_P2.00mm_Vertical_SMD","Connector_PinSocket_2.00mm/PinSocket_2x28_P2.00mm_Horizontal","Connector_PinSocket_2.00mm/PinSocket_2x28_P2.00mm_Vertical","Connector_PinSocket_2.00mm/PinSocket_2x28_P2.00mm_Vertical_SMD","Connector_PinSocket_2.00mm/PinSocket_2x29_P2.00mm_Horizontal","Connector_PinSocket_2.00mm/PinSocket_2x29_P2.00mm_Vertical","Connector_PinSocket_2.00mm/PinSocket_2x29_P2.00mm_Vertical_SMD","Connector_PinSocket_2.00mm/PinSocket_2x30_P2.00mm_Horizontal","Connector_PinSocket_2.00mm/PinSocket_2x30_P2.00mm_Vertical","Connector_PinSocket_2.00mm/PinSocket_2x30_P2.00mm_Vertical_SMD","Connector_PinSocket_2.00mm/PinSocket_2x31_P2.00mm_Horizontal","Connector_PinSocket_2.00mm/PinSocket_2x31_P2.00mm_Vertical","Connector_PinSocket_2.00mm/PinSocket_2x31_P2.00mm_Vertical_SMD","Connector_PinSocket_2.00mm/PinSocket_2x32_P2.00mm_Horizontal","Connector_PinSocket_2.00mm/PinSocket_2x32_P2.00mm_Vertical","Connector_PinSocket_2.00mm/PinSocket_2x32_P2.00mm_Vertical_SMD","Connector_PinSocket_2.00mm/PinSocket_2x33_P2.00mm_Horizontal","Connector_PinSocket_2.00mm/PinSocket_2x33_P2.00mm_Vertical","Connector_PinSocket_2.00mm/PinSocket_2x33_P2.00mm_Vertical_SMD","Connector_PinSocket_2.00mm/PinSocket_2x34_P2.00mm_Horizontal","Connector_PinSocket_2.00mm/PinSocket_2x34_P2.00mm_Vertical","Connector_PinSocket_2.00mm/PinSocket_2x34_P2.00mm_Vertical_SMD","Connector_PinSocket_2.00mm/PinSocket_2x35_P2.00mm_Horizontal","Connector_PinSocket_2.00mm/PinSocket_2x35_P2.00mm_Vertical","Connector_PinSocket_2.00mm/PinSocket_2x35_P2.00mm_Vertical_SMD","Connector_PinSocket_2.00mm/PinSocket_2x36_P2.00mm_Horizontal","Connector_PinSocket_2.00mm/PinSocket_2x36_P2.00mm_Vertical","Connector_PinSocket_2.00mm/PinSocket_2x36_P2.00mm_Vertical_SMD","Connector_PinSocket_2.00mm/PinSocket_2x37_P2.00mm_Horizontal","Connector_PinSocket_2.00mm/PinSocket_2x37_P2.00mm_Vertical","Connector_PinSocket_2.00mm/PinSocket_2x37_P2.00mm_Vertical_SMD","Connector_PinSocket_2.00mm/PinSocket_2x38_P2.00mm_Horizontal","Connector_PinSocket_2.00mm/PinSocket_2x38_P2.00mm_Vertical","Connector_PinSocket_2.00mm/PinSocket_2x38_P2.00mm_Vertical_SMD","Connector_PinSocket_2.00mm/PinSocket_2x39_P2.00mm_Horizontal","Connector_PinSocket_2.00mm/PinSocket_2x39_P2.00mm_Vertical","Connector_PinSocket_2.00mm/PinSocket_2x39_P2.00mm_Vertical_SMD","Connector_PinSocket_2.00mm/PinSocket_2x40_P2.00mm_Horizontal","Connector_PinSocket_2.00mm/PinSocket_2x40_P2.00mm_Vertical","Connector_PinSocket_2.00mm/PinSocket_2x40_P2.00mm_Vertical_SMD","Connector_PinSocket_2.54mm/PinSocket_1x01_P2.54mm_Horizontal","Connector_PinSocket_2.54mm/PinSocket_1x01_P2.54mm_Vertical","Connector_PinSocket_2.54mm/PinSocket_1x02_P2.54mm_Horizontal","Connector_PinSocket_2.54mm/PinSocket_1x02_P2.54mm_Vertical","Connector_PinSocket_2.54mm/PinSocket_1x02_P2.54mm_Vertical_SMD_Pin1Left","Connector_PinSocket_2.54mm/PinSocket_1x02_P2.54mm_Vertical_SMD_Pin1Right","Connector_PinSocket_2.54mm/PinSocket_1x03_P2.54mm_Horizontal","Connector_PinSocket_2.54mm/PinSocket_1x03_P2.54mm_Vertical","Connector_PinSocket_2.54mm/PinSocket_1x03_P2.54mm_Vertical_SMD_Pin1Left","Connector_PinSocket_2.54mm/PinSocket_1x03_P2.54mm_Vertical_SMD_Pin1Right","Connector_PinSocket_2.54mm/PinSocket_1x04_P2.54mm_Horizontal","Connector_PinSocket_2.54mm/PinSocket_1x04_P2.54mm_Vertical","Connector_PinSocket_2.54mm/PinSocket_1x04_P2.54mm_Vertical_SMD_Pin1Left","Connector_PinSocket_2.54mm/PinSocket_1x04_P2.54mm_Vertical_SMD_Pin1Right","Connector_PinSocket_2.54mm/PinSocket_1x05_P2.54mm_Horizontal","Connector_PinSocket_2.54mm/PinSocket_1x05_P2.54mm_Vertical","Connector_PinSocket_2.54mm/PinSocket_1x05_P2.54mm_Vertical_SMD_Pin1Left","Connector_PinSocket_2.54mm/PinSocket_1x05_P2.54mm_Vertical_SMD_Pin1Right","Connector_PinSocket_2.54mm/PinSocket_1x06_P2.54mm_Horizontal","Connector_PinSocket_2.54mm/PinSocket_1x06_P2.54mm_Vertical","Connector_PinSocket_2.54mm/PinSocket_1x06_P2.54mm_Vertical_SMD_Pin1Left","Connector_PinSocket_2.54mm/PinSocket_1x06_P2.54mm_Vertical_SMD_Pin1Right","Connector_PinSocket_2.54mm/PinSocket_1x07_P2.54mm_Horizontal","Connector_PinSocket_2.54mm/PinSocket_1x07_P2.54mm_Vertical","Connector_PinSocket_2.54mm/PinSocket_1x07_P2.54mm_Vertical_SMD_Pin1Left","Connector_PinSocket_2.54mm/PinSocket_1x07_P2.54mm_Vertical_SMD_Pin1Right","Connector_PinSocket_2.54mm/PinSocket_1x08_P2.54mm_Horizontal","Connector_PinSocket_2.54mm/PinSocket_1x08_P2.54mm_Vertical","Connector_PinSocket_2.54mm/PinSocket_1x08_P2.54mm_Vertical_SMD_Pin1Left","Connector_PinSocket_2.54mm/PinSocket_1x08_P2.54mm_Vertical_SMD_Pin1Right","Connector_PinSocket_2.54mm/PinSocket_1x09_P2.54mm_Horizontal","Connector_PinSocket_2.54mm/PinSocket_1x09_P2.54mm_Vertical","Connector_PinSocket_2.54mm/PinSocket_1x09_P2.54mm_Vertical_SMD_Pin1Left","Connector_PinSocket_2.54mm/PinSocket_1x09_P2.54mm_Vertical_SMD_Pin1Right","Connector_PinSocket_2.54mm/PinSocket_1x10_P2.54mm_Horizontal","Connector_PinSocket_2.54mm/PinSocket_1x10_P2.54mm_Vertical","Connector_PinSocket_2.54mm/PinSocket_1x10_P2.54mm_Vertical_SMD_Pin1Left","Connector_PinSocket_2.54mm/PinSocket_1x10_P2.54mm_Vertical_SMD_Pin1Right","Connector_PinSocket_2.54mm/PinSocket_1x11_P2.54mm_Horizontal","Connector_PinSocket_2.54mm/PinSocket_1x11_P2.54mm_Vertical","Connector_PinSocket_2.54mm/PinSocket_1x11_P2.54mm_Vertical_SMD_Pin1Left","Connector_PinSocket_2.54mm/PinSocket_1x11_P2.54mm_Vertical_SMD_Pin1Right","Connector_PinSocket_2.54mm/PinSocket_1x12_P2.54mm_Horizontal","Connector_PinSocket_2.54mm/PinSocket_1x12_P2.54mm_Vertical","Connector_PinSocket_2.54mm/PinSocket_1x12_P2.54mm_Vertical_SMD_Pin1Left","Connector_PinSocket_2.54mm/PinSocket_1x12_P2.54mm_Vertical_SMD_Pin1Right","Connector_PinSocket_2.54mm/PinSocket_1x13_P2.54mm_Horizontal","Connector_PinSocket_2.54mm/PinSocket_1x13_P2.54mm_Vertical","Connector_PinSocket_2.54mm/PinSocket_1x13_P2.54mm_Vertical_SMD_Pin1Left","Connector_PinSocket_2.54mm/PinSocket_1x13_P2.54mm_Vertical_SMD_Pin1Right","Connector_PinSocket_2.54mm/PinSocket_1x14_P2.54mm_Horizontal","Connector_PinSocket_2.54mm/PinSocket_1x14_P2.54mm_Vertical","Connector_PinSocket_2.54mm/PinSocket_1x14_P2.54mm_Vertical_SMD_Pin1Left","Connector_PinSocket_2.54mm/PinSocket_1x14_P2.54mm_Vertical_SMD_Pin1Right","Connector_PinSocket_2.54mm/PinSocket_1x15_P2.54mm_Horizontal","Connector_PinSocket_2.54mm/PinSocket_1x15_P2.54mm_Vertical","Connector_PinSocket_2.54mm/PinSocket_1x15_P2.54mm_Vertical_SMD_Pin1Left","Connector_PinSocket_2.54mm/PinSocket_1x15_P2.54mm_Vertical_SMD_Pin1Right","Connector_PinSocket_2.54mm/PinSocket_1x16_P2.54mm_Horizontal","Connector_PinSocket_2.54mm/PinSocket_1x16_P2.54mm_Vertical","Connector_PinSocket_2.54mm/PinSocket_1x16_P2.54mm_Vertical_SMD_Pin1Left","Connector_PinSocket_2.54mm/PinSocket_1x16_P2.54mm_Vertical_SMD_Pin1Right","Connector_PinSocket_2.54mm/PinSocket_1x17_P2.54mm_Horizontal","Connector_PinSocket_2.54mm/PinSocket_1x17_P2.54mm_Vertical","Connector_PinSocket_2.54mm/PinSocket_1x17_P2.54mm_Vertical_SMD_Pin1Left","Connector_PinSocket_2.54mm/PinSocket_1x17_P2.54mm_Vertical_SMD_Pin1Right","Connector_PinSocket_2.54mm/PinSocket_1x18_P2.54mm_Horizontal","Connector_PinSocket_2.54mm/PinSocket_1x18_P2.54mm_Vertical","Connector_PinSocket_2.54mm/PinSocket_1x18_P2.54mm_Vertical_SMD_Pin1Left","Connector_PinSocket_2.54mm/PinSocket_1x18_P2.54mm_Vertical_SMD_Pin1Right","Connector_PinSocket_2.54mm/PinSocket_1x19_P2.54mm_Horizontal","Connector_PinSocket_2.54mm/PinSocket_1x19_P2.54mm_Vertical","Connector_PinSocket_2.54mm/PinSocket_1x19_P2.54mm_Vertical_SMD_Pin1Left","Connector_PinSocket_2.54mm/PinSocket_1x19_P2.54mm_Vertical_SMD_Pin1Right","Connector_PinSocket_2.54mm/PinSocket_1x20_P2.54mm_Horizontal","Connector_PinSocket_2.54mm/PinSocket_1x20_P2.54mm_Vertical","Connector_PinSocket_2.54mm/PinSocket_1x20_P2.54mm_Vertical_SMD_Pin1Left","Connector_PinSocket_2.54mm/PinSocket_1x20_P2.54mm_Vertical_SMD_Pin1Right","Connector_PinSocket_2.54mm/PinSocket_1x21_P2.54mm_Horizontal","Connector_PinSocket_2.54mm/PinSocket_1x21_P2.54mm_Vertical","Connector_PinSocket_2.54mm/PinSocket_1x21_P2.54mm_Vertical_SMD_Pin1Left","Connector_PinSocket_2.54mm/PinSocket_1x21_P2.54mm_Vertical_SMD_Pin1Right","Connector_PinSocket_2.54mm/PinSocket_1x22_P2.54mm_Horizontal","Connector_PinSocket_2.54mm/PinSocket_1x22_P2.54mm_Vertical","Connector_PinSocket_2.54mm/PinSocket_1x22_P2.54mm_Vertical_SMD_Pin1Left","Connector_PinSocket_2.54mm/PinSocket_1x22_P2.54mm_Vertical_SMD_Pin1Right","Connector_PinSocket_2.54mm/PinSocket_1x23_P2.54mm_Horizontal","Connector_PinSocket_2.54mm/PinSocket_1x23_P2.54mm_Vertical","Connector_PinSocket_2.54mm/PinSocket_1x23_P2.54mm_Vertical_SMD_Pin1Left","Connector_PinSocket_2.54mm/PinSocket_1x23_P2.54mm_Vertical_SMD_Pin1Right","Connector_PinSocket_2.54mm/PinSocket_1x24_P2.54mm_Horizontal","Connector_PinSocket_2.54mm/PinSocket_1x24_P2.54mm_Vertical","Connector_PinSocket_2.54mm/PinSocket_1x24_P2.54mm_Vertical_SMD_Pin1Left","Connector_PinSocket_2.54mm/PinSocket_1x24_P2.54mm_Vertical_SMD_Pin1Right","Connector_PinSocket_2.54mm/PinSocket_1x25_P2.54mm_Horizontal","Connector_PinSocket_2.54mm/PinSocket_1x25_P2.54mm_Vertical","Connector_PinSocket_2.54mm/PinSocket_1x25_P2.54mm_Vertical_SMD_Pin1Left","Connector_PinSocket_2.54mm/PinSocket_1x25_P2.54mm_Vertical_SMD_Pin1Right","Connector_PinSocket_2.54mm/PinSocket_1x26_P2.54mm_Horizontal","Connector_PinSocket_2.54mm/PinSocket_1x26_P2.54mm_Vertical","Connector_PinSocket_2.54mm/PinSocket_1x26_P2.54mm_Vertical_SMD_Pin1Left","Connector_PinSocket_2.54mm/PinSocket_1x26_P2.54mm_Vertical_SMD_Pin1Right","Connector_PinSocket_2.54mm/PinSocket_1x27_P2.54mm_Horizontal","Connector_PinSocket_2.54mm/PinSocket_1x27_P2.54mm_Vertical","Connector_PinSocket_2.54mm/PinSocket_1x27_P2.54mm_Vertical_SMD_Pin1Left","Connector_PinSocket_2.54mm/PinSocket_1x27_P2.54mm_Vertical_SMD_Pin1Right","Connector_PinSocket_2.54mm/PinSocket_1x28_P2.54mm_Horizontal","Connector_PinSocket_2.54mm/PinSocket_1x28_P2.54mm_Vertical","Connector_PinSocket_2.54mm/PinSocket_1x28_P2.54mm_Vertical_SMD_Pin1Left","Connector_PinSocket_2.54mm/PinSocket_1x28_P2.54mm_Vertical_SMD_Pin1Right","Connector_PinSocket_2.54mm/PinSocket_1x29_P2.54mm_Horizontal","Connector_PinSocket_2.54mm/PinSocket_1x29_P2.54mm_Vertical","Connector_PinSocket_2.54mm/PinSocket_1x29_P2.54mm_Vertical_SMD_Pin1Left","Connector_PinSocket_2.54mm/PinSocket_1x29_P2.54mm_Vertical_SMD_Pin1Right","Connector_PinSocket_2.54mm/PinSocket_1x30_P2.54mm_Horizontal","Connector_PinSocket_2.54mm/PinSocket_1x30_P2.54mm_Vertical","Connector_PinSocket_2.54mm/PinSocket_1x30_P2.54mm_Vertical_SMD_Pin1Left","Connector_PinSocket_2.54mm/PinSocket_1x30_P2.54mm_Vertical_SMD_Pin1Right","Connector_PinSocket_2.54mm/PinSocket_1x31_P2.54mm_Horizontal","Connector_PinSocket_2.54mm/PinSocket_1x31_P2.54mm_Vertical","Connector_PinSocket_2.54mm/PinSocket_1x31_P2.54mm_Vertical_SMD_Pin1Left","Connector_PinSocket_2.54mm/PinSocket_1x31_P2.54mm_Vertical_SMD_Pin1Right","Connector_PinSocket_2.54mm/PinSocket_1x32_P2.54mm_Horizontal","Connector_PinSocket_2.54mm/PinSocket_1x32_P2.54mm_Vertical","Connector_PinSocket_2.54mm/PinSocket_1x32_P2.54mm_Vertical_SMD_Pin1Left","Connector_PinSocket_2.54mm/PinSocket_1x32_P2.54mm_Vertical_SMD_Pin1Right","Connector_PinSocket_2.54mm/PinSocket_1x33_P2.54mm_Horizontal","Connector_PinSocket_2.54mm/PinSocket_1x33_P2.54mm_Vertical","Connector_PinSocket_2.54mm/PinSocket_1x33_P2.54mm_Vertical_SMD_Pin1Left","Connector_PinSocket_2.54mm/PinSocket_1x33_P2.54mm_Vertical_SMD_Pin1Right","Connector_PinSocket_2.54mm/PinSocket_1x34_P2.54mm_Horizontal","Connector_PinSocket_2.54mm/PinSocket_1x34_P2.54mm_Vertical","Connector_PinSocket_2.54mm/PinSocket_1x34_P2.54mm_Vertical_SMD_Pin1Left","Connector_PinSocket_2.54mm/PinSocket_1x34_P2.54mm_Vertical_SMD_Pin1Right","Connector_PinSocket_2.54mm/PinSocket_1x35_P2.54mm_Horizontal","Connector_PinSocket_2.54mm/PinSocket_1x35_P2.54mm_Vertical","Connector_PinSocket_2.54mm/PinSocket_1x35_P2.54mm_Vertical_SMD_Pin1Left","Connector_PinSocket_2.54mm/PinSocket_1x35_P2.54mm_Vertical_SMD_Pin1Right","Connector_PinSocket_2.54mm/PinSocket_1x36_P2.54mm_Horizontal","Connector_PinSocket_2.54mm/PinSocket_1x36_P2.54mm_Vertical","Connector_PinSocket_2.54mm/PinSocket_1x36_P2.54mm_Vertical_SMD_Pin1Left","Connector_PinSocket_2.54mm/PinSocket_1x36_P2.54mm_Vertical_SMD_Pin1Right","Connector_PinSocket_2.54mm/PinSocket_1x37_P2.54mm_Horizontal","Connector_PinSocket_2.54mm/PinSocket_1x37_P2.54mm_Vertical","Connector_PinSocket_2.54mm/PinSocket_1x37_P2.54mm_Vertical_SMD_Pin1Left","Connector_PinSocket_2.54mm/PinSocket_1x37_P2.54mm_Vertical_SMD_Pin1Right","Connector_PinSocket_2.54mm/PinSocket_1x38_P2.54mm_Horizontal","Connector_PinSocket_2.54mm/PinSocket_1x38_P2.54mm_Vertical","Connector_PinSocket_2.54mm/PinSocket_1x38_P2.54mm_Vertical_SMD_Pin1Left","Connector_PinSocket_2.54mm/PinSocket_1x38_P2.54mm_Vertical_SMD_Pin1Right","Connector_PinSocket_2.54mm/PinSocket_1x39_P2.54mm_Horizontal","Connector_PinSocket_2.54mm/PinSocket_1x39_P2.54mm_Vertical","Connector_PinSocket_2.54mm/PinSocket_1x39_P2.54mm_Vertical_SMD_Pin1Left","Connector_PinSocket_2.54mm/PinSocket_1x39_P2.54mm_Vertical_SMD_Pin1Right","Connector_PinSocket_2.54mm/PinSocket_1x40_P2.54mm_Horizontal","Connector_PinSocket_2.54mm/PinSocket_1x40_P2.54mm_Vertical","Connector_PinSocket_2.54mm/PinSocket_1x40_P2.54mm_Vertical_SMD_Pin1Left","Connector_PinSocket_2.54mm/PinSocket_1x40_P2.54mm_Vertical_SMD_Pin1Right","Connector_PinSocket_2.54mm/PinSocket_2x01_P2.54mm_Horizontal","Connector_PinSocket_2.54mm/PinSocket_2x01_P2.54mm_Vertical","Connector_PinSocket_2.54mm/PinSocket_2x01_P2.54mm_Vertical_SMD","Connector_PinSocket_2.54mm/PinSocket_2x02_P2.54mm_Horizontal","Connector_PinSocket_2.54mm/PinSocket_2x02_P2.54mm_Vertical","Connector_PinSocket_2.54mm/PinSocket_2x02_P2.54mm_Vertical_SMD","Connector_PinSocket_2.54mm/PinSocket_2x03_P2.54mm_Horizontal","Connector_PinSocket_2.54mm/PinSocket_2x03_P2.54mm_Vertical","Connector_PinSocket_2.54mm/PinSocket_2x03_P2.54mm_Vertical_SMD","Connector_PinSocket_2.54mm/PinSocket_2x04_P2.54mm_Horizontal","Connector_PinSocket_2.54mm/PinSocket_2x04_P2.54mm_Vertical","Connector_PinSocket_2.54mm/PinSocket_2x04_P2.54mm_Vertical_SMD","Connector_PinSocket_2.54mm/PinSocket_2x05_P2.54mm_Horizontal","Connector_PinSocket_2.54mm/PinSocket_2x05_P2.54mm_Vertical","Connector_PinSocket_2.54mm/PinSocket_2x05_P2.54mm_Vertical_SMD","Connector_PinSocket_2.54mm/PinSocket_2x06_P2.54mm_Horizontal","Connector_PinSocket_2.54mm/PinSocket_2x06_P2.54mm_Vertical","Connector_PinSocket_2.54mm/PinSocket_2x06_P2.54mm_Vertical_SMD","Connector_PinSocket_2.54mm/PinSocket_2x07_P2.54mm_Horizontal","Connector_PinSocket_2.54mm/PinSocket_2x07_P2.54mm_Vertical","Connector_PinSocket_2.54mm/PinSocket_2x07_P2.54mm_Vertical_SMD","Connector_PinSocket_2.54mm/PinSocket_2x08_P2.54mm_Horizontal","Connector_PinSocket_2.54mm/PinSocket_2x08_P2.54mm_Vertical","Connector_PinSocket_2.54mm/PinSocket_2x08_P2.54mm_Vertical_SMD","Connector_PinSocket_2.54mm/PinSocket_2x09_P2.54mm_Horizontal","Connector_PinSocket_2.54mm/PinSocket_2x09_P2.54mm_Vertical","Connector_PinSocket_2.54mm/PinSocket_2x09_P2.54mm_Vertical_SMD","Connector_PinSocket_2.54mm/PinSocket_2x10_P2.54mm_Horizontal","Connector_PinSocket_2.54mm/PinSocket_2x10_P2.54mm_Vertical","Connector_PinSocket_2.54mm/PinSocket_2x10_P2.54mm_Vertical_SMD","Connector_PinSocket_2.54mm/PinSocket_2x11_P2.54mm_Horizontal","Connector_PinSocket_2.54mm/PinSocket_2x11_P2.54mm_Vertical","Connector_PinSocket_2.54mm/PinSocket_2x11_P2.54mm_Vertical_SMD","Connector_PinSocket_2.54mm/PinSocket_2x12_P2.54mm_Horizontal","Connector_PinSocket_2.54mm/PinSocket_2x12_P2.54mm_Vertical","Connector_PinSocket_2.54mm/PinSocket_2x12_P2.54mm_Vertical_SMD","Connector_PinSocket_2.54mm/PinSocket_2x13_P2.54mm_Horizontal","Connector_PinSocket_2.54mm/PinSocket_2x13_P2.54mm_Vertical","Connector_PinSocket_2.54mm/PinSocket_2x13_P2.54mm_Vertical_SMD","Connector_PinSocket_2.54mm/PinSocket_2x14_P2.54mm_Horizontal","Connector_PinSocket_2.54mm/PinSocket_2x14_P2.54mm_Vertical","Connector_PinSocket_2.54mm/PinSocket_2x14_P2.54mm_Vertical_SMD","Connector_PinSocket_2.54mm/PinSocket_2x15_P2.54mm_Horizontal","Connector_PinSocket_2.54mm/PinSocket_2x15_P2.54mm_Vertical","Connector_PinSocket_2.54mm/PinSocket_2x15_P2.54mm_Vertical_SMD","Connector_PinSocket_2.54mm/PinSocket_2x16_P2.54mm_Horizontal","Connector_PinSocket_2.54mm/PinSocket_2x16_P2.54mm_Vertical","Connector_PinSocket_2.54mm/PinSocket_2x16_P2.54mm_Vertical_SMD","Connector_PinSocket_2.54mm/PinSocket_2x17_P2.54mm_Horizontal","Connector_PinSocket_2.54mm/PinSocket_2x17_P2.54mm_Vertical","Connector_PinSocket_2.54mm/PinSocket_2x17_P2.54mm_Vertical_SMD","Connector_PinSocket_2.54mm/PinSocket_2x18_P2.54mm_Horizontal","Connector_PinSocket_2.54mm/PinSocket_2x18_P2.54mm_Vertical","Connector_PinSocket_2.54mm/PinSocket_2x18_P2.54mm_Vertical_SMD","Connector_PinSocket_2.54mm/PinSocket_2x19_P2.54mm_Horizontal","Connector_PinSocket_2.54mm/PinSocket_2x19_P2.54mm_Vertical","Connector_PinSocket_2.54mm/PinSocket_2x19_P2.54mm_Vertical_SMD","Connector_PinSocket_2.54mm/PinSocket_2x20_P2.54mm_Horizontal","Connector_PinSocket_2.54mm/PinSocket_2x20_P2.54mm_Vertical","Connector_PinSocket_2.54mm/PinSocket_2x20_P2.54mm_Vertical_SMD","Connector_PinSocket_2.54mm/PinSocket_2x21_P2.54mm_Horizontal","Connector_PinSocket_2.54mm/PinSocket_2x21_P2.54mm_Vertical","Connector_PinSocket_2.54mm/PinSocket_2x21_P2.54mm_Vertical_SMD","Connector_PinSocket_2.54mm/PinSocket_2x22_P2.54mm_Horizontal","Connector_PinSocket_2.54mm/PinSocket_2x22_P2.54mm_Vertical","Connector_PinSocket_2.54mm/PinSocket_2x22_P2.54mm_Vertical_SMD","Connector_PinSocket_2.54mm/PinSocket_2x23_P2.54mm_Horizontal","Connector_PinSocket_2.54mm/PinSocket_2x23_P2.54mm_Vertical","Connector_PinSocket_2.54mm/PinSocket_2x23_P2.54mm_Vertical_SMD","Connector_PinSocket_2.54mm/PinSocket_2x24_P2.54mm_Horizontal","Connector_PinSocket_2.54mm/PinSocket_2x24_P2.54mm_Vertical","Connector_PinSocket_2.54mm/PinSocket_2x24_P2.54mm_Vertical_SMD","Connector_PinSocket_2.54mm/PinSocket_2x25_P2.54mm_Horizontal","Connector_PinSocket_2.54mm/PinSocket_2x25_P2.54mm_Vertical","Connector_PinSocket_2.54mm/PinSocket_2x25_P2.54mm_Vertical_SMD","Connector_PinSocket_2.54mm/PinSocket_2x26_P2.54mm_Horizontal","Connector_PinSocket_2.54mm/PinSocket_2x26_P2.54mm_Vertical","Connector_PinSocket_2.54mm/PinSocket_2x26_P2.54mm_Vertical_SMD","Connector_PinSocket_2.54mm/PinSocket_2x27_P2.54mm_Horizontal","Connector_PinSocket_2.54mm/PinSocket_2x27_P2.54mm_Vertical","Connector_PinSocket_2.54mm/PinSocket_2x27_P2.54mm_Vertical_SMD","Connector_PinSocket_2.54mm/PinSocket_2x28_P2.54mm_Horizontal","Connector_PinSocket_2.54mm/PinSocket_2x28_P2.54mm_Vertical","Connector_PinSocket_2.54mm/PinSocket_2x28_P2.54mm_Vertical_SMD","Connector_PinSocket_2.54mm/PinSocket_2x29_P2.54mm_Horizontal","Connector_PinSocket_2.54mm/PinSocket_2x29_P2.54mm_Vertical","Connector_PinSocket_2.54mm/PinSocket_2x29_P2.54mm_Vertical_SMD","Connector_PinSocket_2.54mm/PinSocket_2x30_P2.54mm_Horizontal","Connector_PinSocket_2.54mm/PinSocket_2x30_P2.54mm_Vertical","Connector_PinSocket_2.54mm/PinSocket_2x30_P2.54mm_Vertical_SMD","Connector_PinSocket_2.54mm/PinSocket_2x31_P2.54mm_Horizontal","Connector_PinSocket_2.54mm/PinSocket_2x31_P2.54mm_Vertical","Connector_PinSocket_2.54mm/PinSocket_2x31_P2.54mm_Vertical_SMD","Connector_PinSocket_2.54mm/PinSocket_2x32_P2.54mm_Horizontal","Connector_PinSocket_2.54mm/PinSocket_2x32_P2.54mm_Vertical","Connector_PinSocket_2.54mm/PinSocket_2x32_P2.54mm_Vertical_SMD","Connector_PinSocket_2.54mm/PinSocket_2x33_P2.54mm_Horizontal","Connector_PinSocket_2.54mm/PinSocket_2x33_P2.54mm_Vertical","Connector_PinSocket_2.54mm/PinSocket_2x33_P2.54mm_Vertical_SMD","Connector_PinSocket_2.54mm/PinSocket_2x34_P2.54mm_Horizontal","Connector_PinSocket_2.54mm/PinSocket_2x34_P2.54mm_Vertical","Connector_PinSocket_2.54mm/PinSocket_2x34_P2.54mm_Vertical_SMD","Connector_PinSocket_2.54mm/PinSocket_2x35_P2.54mm_Horizontal","Connector_PinSocket_2.54mm/PinSocket_2x35_P2.54mm_Vertical","Connector_PinSocket_2.54mm/PinSocket_2x35_P2.54mm_Vertical_SMD","Connector_PinSocket_2.54mm/PinSocket_2x36_P2.54mm_Horizontal","Connector_PinSocket_2.54mm/PinSocket_2x36_P2.54mm_Vertical","Connector_PinSocket_2.54mm/PinSocket_2x36_P2.54mm_Vertical_SMD","Connector_PinSocket_2.54mm/PinSocket_2x37_P2.54mm_Horizontal","Connector_PinSocket_2.54mm/PinSocket_2x37_P2.54mm_Vertical","Connector_PinSocket_2.54mm/PinSocket_2x37_P2.54mm_Vertical_SMD","Connector_PinSocket_2.54mm/PinSocket_2x38_P2.54mm_Horizontal","Connector_PinSocket_2.54mm/PinSocket_2x38_P2.54mm_Vertical","Connector_PinSocket_2.54mm/PinSocket_2x38_P2.54mm_Vertical_SMD","Connector_PinSocket_2.54mm/PinSocket_2x39_P2.54mm_Horizontal","Connector_PinSocket_2.54mm/PinSocket_2x39_P2.54mm_Vertical","Connector_PinSocket_2.54mm/PinSocket_2x39_P2.54mm_Vertical_SMD","Connector_PinSocket_2.54mm/PinSocket_2x40_P2.54mm_Horizontal","Connector_PinSocket_2.54mm/PinSocket_2x40_P2.54mm_Vertical","Connector_PinSocket_2.54mm/PinSocket_2x40_P2.54mm_Vertical_SMD","Connector_RJ/RJ12_Amphenol_54601-x06_Horizontal","Connector_RJ/RJ14_Connfly_DS1133-S4_Horizontal","Connector_RJ/RJ25_Wayconn_MJEA-660X1_Horizontal","Connector_RJ/RJ45_Abracon_ARJP11A-MA_Horizontal","Connector_RJ/RJ45_Amphenol_54602-x08_Horizontal","Connector_RJ/RJ45_Amphenol_RJHSE5380-08","Connector_RJ/RJ45_Amphenol_RJHSE5380","Connector_RJ/RJ45_Amphenol_RJHSE538X-02","Connector_RJ/RJ45_Amphenol_RJHSE538X-04","Connector_RJ/RJ45_Amphenol_RJHSE538X","Connector_RJ/RJ45_Amphenol_RJMG1BD3B8K1ANR","Connector_RJ/RJ45_BEL_SS74301-00x_Vertical","Connector_RJ/RJ45_Bel_SI-60062-F","Connector_RJ/RJ45_Bel_V895-1001-AW_Vertical","Connector_RJ/RJ45_Cetus_J1B1211CCD_Horizontal","Connector_RJ/RJ45_Connfly_DS1128-09-S8xx-S_Horizontal","Connector_RJ/RJ45_HALO_HFJ11-x2450E-LxxRL_Horizontal","Connector_RJ/RJ45_HALO_HFJ11-x2450ERL_Horizontal","Connector_RJ/RJ45_HALO_HFJ11-x2450HRL_Horizontal","Connector_RJ/RJ45_Hanrun_HR911105A_Horizontal","Connector_RJ/RJ45_Kycon_G7LX-A88S7-BP-xx_Horizontal","Connector_RJ/RJ45_Molex_0855135013_Vertical","Connector_RJ/RJ45_Molex_9346520x_Horizontal","Connector_RJ/RJ45_Ninigi_GE","Connector_RJ/RJ45_OST_PJ012-8P8CX_Vertical","Connector_RJ/RJ45_Plug_Metz_AJP92A8813","Connector_RJ/RJ45_Pulse_JK00177NL_Horizontal","Connector_RJ/RJ45_Pulse_JK0654219NL_Horizontal","Connector_RJ/RJ45_Pulse_JXD6-0001NL_Horizontal","Connector_RJ/RJ45_RCH_RC01937","Connector_RJ/RJ45_UDE_RB1-125B8G1A","Connector_RJ/RJ45_Wuerth_74980111211_Horizontal","Connector_RJ/RJ45_Wuerth_7499010001A_Horizontal","Connector_RJ/RJ45_Wuerth_7499010121A_Horizontal","Connector_RJ/RJ45_Wuerth_7499010211A_Horizontal","Connector_RJ/RJ45_Wuerth_7499111446_Horizontal","Connector_RJ/RJ45_Wuerth_7499151120_Horizontal","Connector_RJ/RJ9_Evercom_5301-440xxx_Horizontal","Connector_SATA_SAS/SAS-mini_TEConnectivity_1888174_Vertical","Connector_SATA_SAS/SATA_Amphenol_10029364-001LF_Horizontal","Connector_Samtec/Samtec_FMC_ASP-134486-01_10x40_P1.27mm_Vertical","Connector_Samtec/Samtec_FMC_ASP-134602-01_10x40_P1.27mm_Vertical","Connector_Samtec/Samtec_FMC_ASP-134604-01_4x40_Vertical","Connector_Samtec/Samtec_LSHM-105-xx.x-x-DV-N_2x05_P0.50mm_Vertical","Connector_Samtec/Samtec_LSHM-105-xx.x-x-DV-S_2x05-1SH_P0.50mm_Vertical","Connector_Samtec/Samtec_LSHM-110-xx.x-x-DV-N_2x10_P0.50mm_Vertical","Connector_Samtec/Samtec_LSHM-110-xx.x-x-DV-S_2x10-1SH_P0.50mm_Vertical","Connector_Samtec/Samtec_LSHM-120-xx.x-x-DV-N_2x20_P0.50mm_Vertical","Connector_Samtec/Samtec_LSHM-120-xx.x-x-DV-S_2x20-1SH_P0.50mm_Vertical","Connector_Samtec/Samtec_LSHM-130-xx.x-x-DV-N_2x30_P0.50mm_Vertical","Connector_Samtec/Samtec_LSHM-130-xx.x-x-DV-S_2x30-1SH_P0.50mm_Vertical","Connector_Samtec/Samtec_LSHM-140-xx.x-x-DV-N_2x40_P0.50mm_Vertical","Connector_Samtec/Samtec_LSHM-140-xx.x-x-DV-S_2x40-1SH_P0.50mm_Vertical","Connector_Samtec/Samtec_LSHM-150-xx.x-x-DV-N_2x50_P0.50mm_Vertical","Connector_Samtec/Samtec_LSHM-150-xx.x-x-DV-S_2x50-1SH_P0.50mm_Vertical","Connector_Samtec/Samtec_SS4-10-3.00-x-D-K-xR_2x10_P0.4mm_Socket","Connector_Samtec/Samtec_SS4-10-3.50-x-D-K-xR_2x10_P0.4mm_Socket","Connector_Samtec/Samtec_SS4-15-3.00-x-D-K-xR_2x15_P0.4mm_Socket","Connector_Samtec/Samtec_SS4-15-3.50-x-D-K-xR_2x15_P0.4mm_Socket","Connector_Samtec/Samtec_SS4-20-3.00-x-D-K-xR_2x20_P0.4mm_Socket","Connector_Samtec/Samtec_SS4-20-3.50-x-D-K-xR_2x20_P0.4mm_Socket","Connector_Samtec/Samtec_SS4-30-3.00-x-D-K-xR_2x30_P0.4mm_Socket","Connector_Samtec/Samtec_SS4-30-3.50-x-D-K-xR_2x30_P0.4mm_Socket","Connector_Samtec/Samtec_SS4-40-3.00-x-D-K-xR_2x40_P0.4mm_Socket","Connector_Samtec/Samtec_SS4-40-3.50-x-D-K-xR_2x40_P0.4mm_Socket","Connector_Samtec/Samtec_SS4-50-3.00-x-D-K-xR_2x50_P0.4mm_Socket","Connector_Samtec/Samtec_SS4-50-3.50-x-D-K-xR_2x50_P0.4mm_Socket","Connector_Samtec_EdgeRate/Samtec_ERF8-005-XX.X-DV-L_2x05_P0.8mm_Socket_Latch","Connector_Samtec_EdgeRate/Samtec_ERF8-005-XX.X-DV_2x05_P0.8mm_Socket","Connector_Samtec_EdgeRate/Samtec_ERF8-010-XX.X-DV-L_2x10_P0.8mm_Socket_Latch","Connector_Samtec_EdgeRate/Samtec_ERF8-010-XX.X-DV_2x10_P0.8mm_Socket","Connector_Samtec_EdgeRate/Samtec_ERF8-011-XX.X-DV-L_2x11_P0.8mm_Socket_Latch","Connector_Samtec_EdgeRate/Samtec_ERF8-011-XX.X-DV_2x11_P0.8mm_Socket","Connector_Samtec_EdgeRate/Samtec_ERF8-013-XX.X-DV-L_2x13_P0.8mm_Socket_Latch","Connector_Samtec_EdgeRate/Samtec_ERF8-013-XX.X-DV_2x13_P0.8mm_Socket","Connector_Samtec_EdgeRate/Samtec_ERF8-020-XX.X-DV-L_2x20_P0.8mm_Socket_Latch","Connector_Samtec_EdgeRate/Samtec_ERF8-020-XX.X-DV_2x20_P0.8mm_Socket","Connector_Samtec_EdgeRate/Samtec_ERF8-025-XX.X-DV-L_2x25_P0.8mm_Socket_Latch","Connector_Samtec_EdgeRate/Samtec_ERF8-025-XX.X-DV_2x25_P0.8mm_Socket","Connector_Samtec_EdgeRate/Samtec_ERF8-030-XX.X-DV-L_2x30_P0.8mm_Socket_Latch","Connector_Samtec_EdgeRate/Samtec_ERF8-030-XX.X-DV_2x30_P0.8mm_Socket","Connector_Samtec_EdgeRate/Samtec_ERF8-035-XX.X-DV-L_2x35_P0.8mm_Socket_Latch","Connector_Samtec_EdgeRate/Samtec_ERF8-035-XX.X-DV_2x35_P0.8mm_Socket","Connector_Samtec_EdgeRate/Samtec_ERF8-040-XX.X-DV-L_2x40_P0.8mm_Socket_Latch","Connector_Samtec_EdgeRate/Samtec_ERF8-040-XX.X-DV_2x40_P0.8mm_Socket","Connector_Samtec_EdgeRate/Samtec_ERF8-049-XX.X-DV-L_2x49_P0.8mm_Socket_Latch","Connector_Samtec_EdgeRate/Samtec_ERF8-049-XX.X-DV_2x49_P0.8mm_Socket","Connector_Samtec_EdgeRate/Samtec_ERF8-050-XX.X-DV-L_2x50_P0.8mm_Socket_Latch","Connector_Samtec_EdgeRate/Samtec_ERF8-050-XX.X-DV_2x50_P0.8mm_Socket","Connector_Samtec_EdgeRate/Samtec_ERF8-060-XX.X-DV-L_2x60_P0.8mm_Socket_Latch","Connector_Samtec_EdgeRate/Samtec_ERF8-060-XX.X-DV_2x60_P0.8mm_Socket","Connector_Samtec_EdgeRate/Samtec_ERF8-070-XX.X-DV-L_2x70_P0.8mm_Socket_Latch","Connector_Samtec_EdgeRate/Samtec_ERF8-070-XX.X-DV_2x70_P0.8mm_Socket","Connector_Samtec_EdgeRate/Samtec_ERF8-075-XX.X-DV-L_2x75_P0.8mm_Socket_Latch","Connector_Samtec_EdgeRate/Samtec_ERF8-075-XX.X-DV_2x75_P0.8mm_Socket","Connector_Samtec_EdgeRate/Samtec_ERF8-100-XX.X-DV-L_2x100_P0.8mm_Socket_Latch","Connector_Samtec_EdgeRate/Samtec_ERF8-100-XX.X-DV_2x100_P0.8mm_Socket","Connector_Samtec_EdgeRate/Samtec_ERM8-005-XX.X-DV-L_2x05_P0.8mm_Terminal_Latch","Connector_Samtec_EdgeRate/Samtec_ERM8-005-XX.X-DV_2x05_P0.8mm_Terminal","Connector_Samtec_EdgeRate/Samtec_ERM8-010-XX.X-DV-L_2x10_P0.8mm_Terminal_Latch","Connector_Samtec_EdgeRate/Samtec_ERM8-010-XX.X-DV_2x10_P0.8mm_Terminal","Connector_Samtec_EdgeRate/Samtec_ERM8-011-XX.X-DV-L_2x11_P0.8mm_Terminal_Latch","Connector_Samtec_EdgeRate/Samtec_ERM8-011-XX.X-DV_2x11_P0.8mm_Terminal","Connector_Samtec_EdgeRate/Samtec_ERM8-013-XX.X-DV-L_2x13_P0.8mm_Terminal_Latch","Connector_Samtec_EdgeRate/Samtec_ERM8-013-XX.X-DV_2x13_P0.8mm_Terminal","Connector_Samtec_EdgeRate/Samtec_ERM8-020-XX.X-DV-L_2x20_P0.8mm_Terminal_Latch","Connector_Samtec_EdgeRate/Samtec_ERM8-020-XX.X-DV_2x20_P0.8mm_Terminal","Connector_Samtec_EdgeRate/Samtec_ERM8-025-XX.X-DV-L_2x25_P0.8mm_Terminal_Latch","Connector_Samtec_EdgeRate/Samtec_ERM8-025-XX.X-DV_2x25_P0.8mm_Terminal","Connector_Samtec_EdgeRate/Samtec_ERM8-030-XX.X-DV-L_2x30_P0.8mm_Terminal_Latch","Connector_Samtec_EdgeRate/Samtec_ERM8-030-XX.X-DV_2x30_P0.8mm_Terminal","Connector_Samtec_EdgeRate/Samtec_ERM8-035-XX.X-DV-L_2x35_P0.8mm_Terminal_Latch","Connector_Samtec_EdgeRate/Samtec_ERM8-035-XX.X-DV_2x35_P0.8mm_Terminal","Connector_Samtec_EdgeRate/Samtec_ERM8-040-XX.X-DV-L_2x40_P0.8mm_Terminal_Latch","Connector_Samtec_EdgeRate/Samtec_ERM8-040-XX.X-DV_2x40_P0.8mm_Terminal","Connector_Samtec_EdgeRate/Samtec_ERM8-049-XX.X-DV-L_2x49_P0.8mm_Terminal_Latch","Connector_Samtec_EdgeRate/Samtec_ERM8-049-XX.X-DV_2x49_P0.8mm_Terminal","Connector_Samtec_EdgeRate/Samtec_ERM8-050-XX.X-DV-L_2x50_P0.8mm_Terminal_Latch","Connector_Samtec_EdgeRate/Samtec_ERM8-050-XX.X-DV_2x50_P0.8mm_Terminal","Connector_Samtec_EdgeRate/Samtec_ERM8-060-XX.X-DV-L_2x60_P0.8mm_Terminal_Latch","Connector_Samtec_EdgeRate/Samtec_ERM8-060-XX.X-DV_2x60_P0.8mm_Terminal","Connector_Samtec_EdgeRate/Samtec_ERM8-070-XX.X-DV-L_2x70_P0.8mm_Terminal_Latch","Connector_Samtec_EdgeRate/Samtec_ERM8-070-XX.X-DV_2x70_P0.8mm_Terminal","Connector_Samtec_EdgeRate/Samtec_ERM8-075-XX.X-DV-L_2x75_P0.8mm_Terminal_Latch","Connector_Samtec_EdgeRate/Samtec_ERM8-075-XX.X-DV_2x75_P0.8mm_Terminal","Connector_Samtec_EdgeRate/Samtec_ERM8-100-XX.X-DV-L_2x100_P0.8mm_Terminal_Latch","Connector_Samtec_EdgeRate/Samtec_ERM8-100-XX.X-DV_2x100_P0.8mm_Terminal","Connector_Samtec_FSI/Samtec_FSI-105-03-X-D-AD_2x05_P1.0mm_Socket_AlignmentPin","Connector_Samtec_FSI/Samtec_FSI-105-03-X-D_2x05_P1.0mm_Socket","Connector_Samtec_FSI/Samtec_FSI-105-XX-X-D-AD_2x05_P1.0mm_Mate_AlignmentPin","Connector_Samtec_FSI/Samtec_FSI-105-XX-X-D-AD_2x05_P1.0mm_Socket_AlignmentPin","Connector_Samtec_FSI/Samtec_FSI-105-XX-X-D_2x05_P1.0mm_Mate","Connector_Samtec_FSI/Samtec_FSI-105-XX-X-D_2x05_P1.0mm_Socket","Connector_Samtec_FSI/Samtec_FSI-110-03-X-D-AD_2x10_P1.0mm_Socket_AlignmentPin","Connector_Samtec_FSI/Samtec_FSI-110-03-X-D-M-AD_2x10_P1.0mm_Socket_Threaded_AlignmentPin","Connector_Samtec_FSI/Samtec_FSI-110-03-X-D-M_2x10_P1.0mm_Socket_Threaded","Connector_Samtec_FSI/Samtec_FSI-110-03-X-D_2x10_P1.0mm_Socket","Connector_Samtec_FSI/Samtec_FSI-110-XX-X-D-AD_2x10_P1.0mm_Mate_AlignmentPin","Connector_Samtec_FSI/Samtec_FSI-110-XX-X-D-AD_2x10_P1.0mm_Socket_AlignmentPin","Connector_Samtec_FSI/Samtec_FSI-110-XX-X-D-M-AD_2x10_P1.0mm_Mate_Threaded_AlignmentPin","Connector_Samtec_FSI/Samtec_FSI-110-XX-X-D-M-AD_2x10_P1.0mm_Socket_Threaded_AlignmentPin","Connector_Samtec_FSI/Samtec_FSI-110-XX-X-D-M_2x10_P1.0mm_Mate_Threaded","Connector_Samtec_FSI/Samtec_FSI-110-XX-X-D-M_2x10_P1.0mm_Socket_Threaded","Connector_Samtec_FSI/Samtec_FSI-110-XX-X-D_2x10_P1.0mm_Mate","Connector_Samtec_FSI/Samtec_FSI-110-XX-X-D_2x10_P1.0mm_Socket","Connector_Samtec_FSI/Samtec_FSI-115-03-X-D-AD_2x15_P1.0mm_Socket_AlignmentPin","Connector_Samtec_FSI/Samtec_FSI-115-03-X-D_2x15_P1.0mm_Socket","Connector_Samtec_FSI/Samtec_FSI-115-XX-X-D-AD_2x15_P1.0mm_Mate_AlignmentPin","Connector_Samtec_FSI/Samtec_FSI-115-XX-X-D-AD_2x15_P1.0mm_Socket_AlignmentPin","Connector_Samtec_FSI/Samtec_FSI-115-XX-X-D_2x15_P1.0mm_Mate","Connector_Samtec_FSI/Samtec_FSI-115-XX-X-D_2x15_P1.0mm_Socket","Connector_Samtec_FSI/Samtec_FSI-120-03-X-D-AD_2x20_P1.0mm_Socket_AlignmentPin","Connector_Samtec_FSI/Samtec_FSI-120-03-X-D-M-AD_2x20_P1.0mm_Socket_Threaded_AlignmentPin","Connector_Samtec_FSI/Samtec_FSI-120-03-X-D-M_2x20_P1.0mm_Socket_Threaded","Connector_Samtec_FSI/Samtec_FSI-120-03-X-D_2x20_P1.0mm_Socket","Connector_Samtec_FSI/Samtec_FSI-120-XX-X-D-AD_2x20_P1.0mm_Mate_AlignmentPin","Connector_Samtec_FSI/Samtec_FSI-120-XX-X-D-AD_2x20_P1.0mm_Socket_AlignmentPin","Connector_Samtec_FSI/Samtec_FSI-120-XX-X-D-M-AD_2x20_P1.0mm_Mate_Threaded_AlignmentPin","Connector_Samtec_FSI/Samtec_FSI-120-XX-X-D-M-AD_2x20_P1.0mm_Socket_Threaded_AlignmentPin","Connector_Samtec_FSI/Samtec_FSI-120-XX-X-D-M_2x20_P1.0mm_Mate_Threaded","Connector_Samtec_FSI/Samtec_FSI-120-XX-X-D-M_2x20_P1.0mm_Socket_Threaded","Connector_Samtec_FSI/Samtec_FSI-120-XX-X-D_2x20_P1.0mm_Mate","Connector_Samtec_FSI/Samtec_FSI-120-XX-X-D_2x20_P1.0mm_Socket","Connector_Samtec_FSI/Samtec_FSI-125-03-X-D-AD_2x25_P1.0mm_Socket_AlignmentPin","Connector_Samtec_FSI/Samtec_FSI-125-03-X-D_2x25_P1.0mm_Socket","Connector_Samtec_FSI/Samtec_FSI-125-XX-X-D-AD_2x25_P1.0mm_Mate_AlignmentPin","Connector_Samtec_FSI/Samtec_FSI-125-XX-X-D-AD_2x25_P1.0mm_Socket_AlignmentPin","Connector_Samtec_FSI/Samtec_FSI-125-XX-X-D_2x25_P1.0mm_Mate","Connector_Samtec_FSI/Samtec_FSI-125-XX-X-D_2x25_P1.0mm_Socket","Connector_Samtec_FSI/Samtec_FSI-130-03-X-D-AD_2x30_P1.0mm_Socket_AlignmentPin","Connector_Samtec_FSI/Samtec_FSI-130-03-X-D-M-AD_2x30_P1.0mm_Socket_Threaded_AlignmentPin","Connector_Samtec_FSI/Samtec_FSI-130-03-X-D-M_2x30_P1.0mm_Socket_Threaded","Connector_Samtec_FSI/Samtec_FSI-130-03-X-D_2x30_P1.0mm_Socket","Connector_Samtec_FSI/Samtec_FSI-130-XX-X-D-AD_2x30_P1.0mm_Mate_AlignmentPin","Connector_Samtec_FSI/Samtec_FSI-130-XX-X-D-AD_2x30_P1.0mm_Socket_AlignmentPin","Connector_Samtec_FSI/Samtec_FSI-130-XX-X-D-M-AD_2x30_P1.0mm_Mate_Threaded_AlignmentPin","Connector_Samtec_FSI/Samtec_FSI-130-XX-X-D-M-AD_2x30_P1.0mm_Socket_Threaded_AlignmentPin","Connector_Samtec_FSI/Samtec_FSI-130-XX-X-D-M_2x30_P1.0mm_Mate_Threaded","Connector_Samtec_FSI/Samtec_FSI-130-XX-X-D-M_2x30_P1.0mm_Socket_Threaded","Connector_Samtec_FSI/Samtec_FSI-130-XX-X-D_2x30_P1.0mm_Mate","Connector_Samtec_FSI/Samtec_FSI-130-XX-X-D_2x30_P1.0mm_Socket","Connector_Samtec_FSI/Samtec_FSI-135-03-X-D-AD_2x35_P1.0mm_Socket_AlignmentPin","Connector_Samtec_FSI/Samtec_FSI-135-03-X-D_2x35_P1.0mm_Socket","Connector_Samtec_FSI/Samtec_FSI-135-XX-X-D-AD_2x35_P1.0mm_Mate_AlignmentPin","Connector_Samtec_FSI/Samtec_FSI-135-XX-X-D-AD_2x35_P1.0mm_Socket_AlignmentPin","Connector_Samtec_FSI/Samtec_FSI-135-XX-X-D_2x35_P1.0mm_Mate","Connector_Samtec_FSI/Samtec_FSI-135-XX-X-D_2x35_P1.0mm_Socket","Connector_Samtec_FSI/Samtec_FSI-140-03-X-D-AD_2x40_P1.0mm_Socket_AlignmentPin","Connector_Samtec_FSI/Samtec_FSI-140-03-X-D-M-AD_2x40_P1.0mm_Pol20_Socket_Threaded_AlignmentPin","Connector_Samtec_FSI/Samtec_FSI-140-03-X-D-M_2x40_P1.0mm_Pol20_Socket_Threaded","Connector_Samtec_FSI/Samtec_FSI-140-03-X-D_2x40_P1.0mm_Socket","Connector_Samtec_FSI/Samtec_FSI-140-XX-X-D-AD_2x40_P1.0mm_Mate_AlignmentPin","Connector_Samtec_FSI/Samtec_FSI-140-XX-X-D-AD_2x40_P1.0mm_Socket_AlignmentPin","Connector_Samtec_FSI/Samtec_FSI-140-XX-X-D-M-AD_2x40_P1.0mm_Pol20_Mate_Threaded_AlignmentPin","Connector_Samtec_FSI/Samtec_FSI-140-XX-X-D-M-AD_2x40_P1.0mm_Pol20_Socket_Threaded_AlignmentPin","Connector_Samtec_FSI/Samtec_FSI-140-XX-X-D-M_2x40_P1.0mm_Pol20_Mate_Threaded","Connector_Samtec_FSI/Samtec_FSI-140-XX-X-D-M_2x40_P1.0mm_Pol20_Socket_Threaded","Connector_Samtec_FSI/Samtec_FSI-140-XX-X-D_2x40_P1.0mm_Mate","Connector_Samtec_FSI/Samtec_FSI-140-XX-X-D_2x40_P1.0mm_Socket","Connector_Samtec_FSI/Samtec_FSI-145-03-X-D-AD_2x45_P1.0mm_Socket_AlignmentPin","Connector_Samtec_FSI/Samtec_FSI-145-03-X-D_2x45_P1.0mm_Socket","Connector_Samtec_FSI/Samtec_FSI-145-XX-X-D-AD_2x45_P1.0mm_Mate_AlignmentPin","Connector_Samtec_FSI/Samtec_FSI-145-XX-X-D-AD_2x45_P1.0mm_Socket_AlignmentPin","Connector_Samtec_FSI/Samtec_FSI-145-XX-X-D_2x45_P1.0mm_Mate","Connector_Samtec_FSI/Samtec_FSI-145-XX-X-D_2x45_P1.0mm_Socket","Connector_Samtec_FSI/Samtec_FSI-150-03-X-D-AD_2x50_P1.0mm_Socket_AlignmentPin","Connector_Samtec_FSI/Samtec_FSI-150-03-X-D-M-AD_2x50_P1.0mm_Pol25_Socket_Threaded_AlignmentPin","Connector_Samtec_FSI/Samtec_FSI-150-03-X-D-M_2x50_P1.0mm_Pol25_Socket_Threaded","Connector_Samtec_FSI/Samtec_FSI-150-03-X-D_2x50_P1.0mm_Socket","Connector_Samtec_FSI/Samtec_FSI-150-XX-X-D-AD_2x50_P1.0mm_Mate_AlignmentPin","Connector_Samtec_FSI/Samtec_FSI-150-XX-X-D-AD_2x50_P1.0mm_Socket_AlignmentPin","Connector_Samtec_FSI/Samtec_FSI-150-XX-X-D-M-AD_2x50_P1.0mm_Pol25_Mate_Threaded_AlignmentPin","Connector_Samtec_FSI/Samtec_FSI-150-XX-X-D-M-AD_2x50_P1.0mm_Pol25_Socket_Threaded_AlignmentPin","Connector_Samtec_FSI/Samtec_FSI-150-XX-X-D-M_2x50_P1.0mm_Pol25_Mate_Threaded","Connector_Samtec_FSI/Samtec_FSI-150-XX-X-D-M_2x50_P1.0mm_Pol25_Socket_Threaded","Connector_Samtec_FSI/Samtec_FSI-150-XX-X-D_2x50_P1.0mm_Mate","Connector_Samtec_FSI/Samtec_FSI-150-XX-X-D_2x50_P1.0mm_Socket","Connector_Samtec_HLE_SMD/Samtec_HLE-102-02-xxx-DV-BE-LC_2x02_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-102-02-xxx-DV-BE_2x02_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-102-02-xxx-DV-LC_2x02_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-102-02-xxx-DV_2x02_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-103-02-xxx-DV-BE-LC_2x03_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-103-02-xxx-DV-BE_2x03_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-103-02-xxx-DV-LC_2x03_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-103-02-xxx-DV_2x03_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-104-02-xxx-DV-A_2x04_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-104-02-xxx-DV-BE-A_2x04_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-104-02-xxx-DV-BE-LC_2x04_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-104-02-xxx-DV-BE_2x04_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-104-02-xxx-DV-LC_2x04_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-104-02-xxx-DV_2x04_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-105-02-xxx-DV-A_2x05_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-105-02-xxx-DV-BE-A_2x05_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-105-02-xxx-DV-BE-LC_2x05_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-105-02-xxx-DV-BE_2x05_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-105-02-xxx-DV-LC_2x05_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-105-02-xxx-DV_2x05_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-106-02-xxx-DV-A_2x06_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-106-02-xxx-DV-BE-A_2x06_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-106-02-xxx-DV-BE-LC_2x06_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-106-02-xxx-DV-BE_2x06_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-106-02-xxx-DV-LC_2x06_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-106-02-xxx-DV_2x06_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-107-02-xxx-DV-A_2x07_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-107-02-xxx-DV-BE-A_2x07_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-107-02-xxx-DV-BE-LC_2x07_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-107-02-xxx-DV-BE_2x07_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-107-02-xxx-DV-LC_2x07_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-107-02-xxx-DV_2x07_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-108-02-xxx-DV-A_2x08_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-108-02-xxx-DV-BE-A_2x08_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-108-02-xxx-DV-BE-LC_2x08_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-108-02-xxx-DV-BE_2x08_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-108-02-xxx-DV-LC_2x08_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-108-02-xxx-DV_2x08_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-109-02-xxx-DV-A_2x09_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-109-02-xxx-DV-BE-A_2x09_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-109-02-xxx-DV-BE-LC_2x09_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-109-02-xxx-DV-BE_2x09_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-109-02-xxx-DV-LC_2x09_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-109-02-xxx-DV_2x09_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-110-02-xxx-DV-A_2x10_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-110-02-xxx-DV-BE-A_2x10_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-110-02-xxx-DV-BE-LC_2x10_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-110-02-xxx-DV-BE_2x10_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-110-02-xxx-DV-LC_2x10_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-110-02-xxx-DV_2x10_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-111-02-xxx-DV-A_2x11_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-111-02-xxx-DV-BE-A_2x11_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-111-02-xxx-DV-BE-LC_2x11_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-111-02-xxx-DV-BE_2x11_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-111-02-xxx-DV-LC_2x11_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-111-02-xxx-DV_2x11_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-112-02-xxx-DV-A_2x12_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-112-02-xxx-DV-BE-A_2x12_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-112-02-xxx-DV-BE-LC_2x12_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-112-02-xxx-DV-BE_2x12_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-112-02-xxx-DV-LC_2x12_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-112-02-xxx-DV_2x12_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-113-02-xxx-DV-A_2x13_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-113-02-xxx-DV-BE-A_2x13_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-113-02-xxx-DV-BE-LC_2x13_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-113-02-xxx-DV-BE_2x13_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-113-02-xxx-DV-LC_2x13_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-113-02-xxx-DV_2x13_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-114-02-xxx-DV-A_2x14_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-114-02-xxx-DV-BE-A_2x14_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-114-02-xxx-DV-BE-LC_2x14_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-114-02-xxx-DV-BE_2x14_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-114-02-xxx-DV-LC_2x14_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-114-02-xxx-DV_2x14_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-115-02-xxx-DV-A_2x15_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-115-02-xxx-DV-BE-A_2x15_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-115-02-xxx-DV-BE-LC_2x15_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-115-02-xxx-DV-BE_2x15_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-115-02-xxx-DV-LC_2x15_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-115-02-xxx-DV_2x15_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-116-02-xxx-DV-A_2x16_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-116-02-xxx-DV-BE-A_2x16_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-116-02-xxx-DV-BE-LC_2x16_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-116-02-xxx-DV-BE_2x16_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-116-02-xxx-DV-LC_2x16_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-116-02-xxx-DV_2x16_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-117-02-xxx-DV-A_2x17_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-117-02-xxx-DV-BE-A_2x17_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-117-02-xxx-DV-BE-LC_2x17_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-117-02-xxx-DV-BE_2x17_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-117-02-xxx-DV-LC_2x17_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-117-02-xxx-DV_2x17_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-118-02-xxx-DV-A_2x18_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-118-02-xxx-DV-BE-A_2x18_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-118-02-xxx-DV-BE-LC_2x18_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-118-02-xxx-DV-BE_2x18_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-118-02-xxx-DV-LC_2x18_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-118-02-xxx-DV_2x18_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-119-02-xxx-DV-A_2x19_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-119-02-xxx-DV-BE-A_2x19_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-119-02-xxx-DV-BE-LC_2x19_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-119-02-xxx-DV-BE_2x19_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-119-02-xxx-DV-LC_2x19_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-119-02-xxx-DV_2x19_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-120-02-xxx-DV-A_2x20_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-120-02-xxx-DV-BE-A_2x20_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-120-02-xxx-DV-BE-LC_2x20_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-120-02-xxx-DV-BE_2x20_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-120-02-xxx-DV-LC_2x20_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-120-02-xxx-DV_2x20_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-121-02-xxx-DV-A_2x21_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-121-02-xxx-DV-BE-A_2x21_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-121-02-xxx-DV-BE-LC_2x21_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-121-02-xxx-DV-BE_2x21_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-121-02-xxx-DV-LC_2x21_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-121-02-xxx-DV_2x21_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-122-02-xxx-DV-A_2x22_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-122-02-xxx-DV-BE-A_2x22_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-122-02-xxx-DV-BE-LC_2x22_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-122-02-xxx-DV-BE_2x22_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-122-02-xxx-DV-LC_2x22_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-122-02-xxx-DV_2x22_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-123-02-xxx-DV-A_2x23_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-123-02-xxx-DV-BE-A_2x23_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-123-02-xxx-DV-BE-LC_2x23_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-123-02-xxx-DV-BE_2x23_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-123-02-xxx-DV-LC_2x23_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-123-02-xxx-DV_2x23_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-124-02-xxx-DV-A_2x24_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-124-02-xxx-DV-BE-A_2x24_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-124-02-xxx-DV-BE-LC_2x24_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-124-02-xxx-DV-BE_2x24_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-124-02-xxx-DV-LC_2x24_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-124-02-xxx-DV_2x24_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-125-02-xxx-DV-A_2x25_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-125-02-xxx-DV-BE-A_2x25_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-125-02-xxx-DV-BE-LC_2x25_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-125-02-xxx-DV-BE_2x25_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-125-02-xxx-DV-LC_2x25_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-125-02-xxx-DV_2x25_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-126-02-xxx-DV-A_2x26_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-126-02-xxx-DV-BE-A_2x26_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-126-02-xxx-DV-BE-LC_2x26_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-126-02-xxx-DV-BE_2x26_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-126-02-xxx-DV-LC_2x26_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-126-02-xxx-DV_2x26_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-127-02-xxx-DV-A_2x27_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-127-02-xxx-DV-BE-A_2x27_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-127-02-xxx-DV-BE-LC_2x27_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-127-02-xxx-DV-BE_2x27_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-127-02-xxx-DV-LC_2x27_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-127-02-xxx-DV_2x27_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-128-02-xxx-DV-A_2x28_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-128-02-xxx-DV-BE-A_2x28_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-128-02-xxx-DV-BE-LC_2x28_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-128-02-xxx-DV-BE_2x28_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-128-02-xxx-DV-LC_2x28_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-128-02-xxx-DV_2x28_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-129-02-xxx-DV-A_2x29_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-129-02-xxx-DV-BE-A_2x29_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-129-02-xxx-DV-BE-LC_2x29_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-129-02-xxx-DV-BE_2x29_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-129-02-xxx-DV-LC_2x29_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-129-02-xxx-DV_2x29_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-130-02-xxx-DV-A_2x30_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-130-02-xxx-DV-BE-A_2x30_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-130-02-xxx-DV-BE-LC_2x30_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-130-02-xxx-DV-BE_2x30_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-130-02-xxx-DV-LC_2x30_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-130-02-xxx-DV_2x30_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-131-02-xxx-DV-A_2x31_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-131-02-xxx-DV-BE-A_2x31_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-131-02-xxx-DV-BE-LC_2x31_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-131-02-xxx-DV-BE_2x31_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-131-02-xxx-DV-LC_2x31_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-131-02-xxx-DV_2x31_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-132-02-xxx-DV-A_2x32_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-132-02-xxx-DV-BE-A_2x32_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-132-02-xxx-DV-BE-LC_2x32_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-132-02-xxx-DV-BE_2x32_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-132-02-xxx-DV-LC_2x32_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-132-02-xxx-DV_2x32_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-133-02-xxx-DV-A_2x33_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-133-02-xxx-DV-BE-A_2x33_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-133-02-xxx-DV-BE-LC_2x33_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-133-02-xxx-DV-BE_2x33_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-133-02-xxx-DV-LC_2x33_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-133-02-xxx-DV_2x33_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-134-02-xxx-DV-A_2x34_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-134-02-xxx-DV-BE-A_2x34_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-134-02-xxx-DV-BE-LC_2x34_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-134-02-xxx-DV-BE_2x34_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-134-02-xxx-DV-LC_2x34_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-134-02-xxx-DV_2x34_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-135-02-xxx-DV-A_2x35_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-135-02-xxx-DV-BE-A_2x35_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-135-02-xxx-DV-BE-LC_2x35_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-135-02-xxx-DV-BE_2x35_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-135-02-xxx-DV-LC_2x35_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-135-02-xxx-DV_2x35_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-136-02-xxx-DV-A_2x36_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-136-02-xxx-DV-BE-A_2x36_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-136-02-xxx-DV-BE-LC_2x36_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-136-02-xxx-DV-BE_2x36_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-136-02-xxx-DV-LC_2x36_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-136-02-xxx-DV_2x36_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-137-02-xxx-DV-A_2x37_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-137-02-xxx-DV-BE-A_2x37_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-137-02-xxx-DV-BE-LC_2x37_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-137-02-xxx-DV-BE_2x37_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-137-02-xxx-DV-LC_2x37_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-137-02-xxx-DV_2x37_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-138-02-xxx-DV-A_2x38_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-138-02-xxx-DV-BE-A_2x38_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-138-02-xxx-DV-BE-LC_2x38_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-138-02-xxx-DV-BE_2x38_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-138-02-xxx-DV-LC_2x38_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-138-02-xxx-DV_2x38_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-139-02-xxx-DV-A_2x39_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-139-02-xxx-DV-BE-A_2x39_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-139-02-xxx-DV-BE-LC_2x39_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-139-02-xxx-DV-BE_2x39_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-139-02-xxx-DV-LC_2x39_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-139-02-xxx-DV_2x39_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-140-02-xxx-DV-A_2x40_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-140-02-xxx-DV-BE-A_2x40_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-140-02-xxx-DV-BE-LC_2x40_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-140-02-xxx-DV-BE_2x40_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-140-02-xxx-DV-LC_2x40_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-140-02-xxx-DV_2x40_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-141-02-xxx-DV-A_2x41_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-141-02-xxx-DV-BE-A_2x41_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-141-02-xxx-DV-BE-LC_2x41_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-141-02-xxx-DV-BE_2x41_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-141-02-xxx-DV-LC_2x41_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-141-02-xxx-DV_2x41_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-142-02-xxx-DV-A_2x42_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-142-02-xxx-DV-BE-A_2x42_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-142-02-xxx-DV-BE-LC_2x42_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-142-02-xxx-DV-BE_2x42_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-142-02-xxx-DV-LC_2x42_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-142-02-xxx-DV_2x42_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-143-02-xxx-DV-A_2x43_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-143-02-xxx-DV-BE-A_2x43_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-143-02-xxx-DV-BE-LC_2x43_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-143-02-xxx-DV-BE_2x43_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-143-02-xxx-DV-LC_2x43_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-143-02-xxx-DV_2x43_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-144-02-xxx-DV-A_2x44_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-144-02-xxx-DV-BE-A_2x44_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-144-02-xxx-DV-BE-LC_2x44_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-144-02-xxx-DV-BE_2x44_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-144-02-xxx-DV-LC_2x44_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-144-02-xxx-DV_2x44_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-145-02-xxx-DV-A_2x45_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-145-02-xxx-DV-BE-A_2x45_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-145-02-xxx-DV-BE-LC_2x45_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-145-02-xxx-DV-BE_2x45_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-145-02-xxx-DV-LC_2x45_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-145-02-xxx-DV_2x45_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-146-02-xxx-DV-A_2x46_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-146-02-xxx-DV-BE-A_2x46_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-146-02-xxx-DV-BE-LC_2x46_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-146-02-xxx-DV-BE_2x46_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-146-02-xxx-DV-LC_2x46_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-146-02-xxx-DV_2x46_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-147-02-xxx-DV-A_2x47_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-147-02-xxx-DV-BE-A_2x47_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-147-02-xxx-DV-BE-LC_2x47_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-147-02-xxx-DV-BE_2x47_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-147-02-xxx-DV-LC_2x47_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-147-02-xxx-DV_2x47_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-148-02-xxx-DV-A_2x48_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-148-02-xxx-DV-BE-A_2x48_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-148-02-xxx-DV-BE-LC_2x48_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-148-02-xxx-DV-BE_2x48_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-148-02-xxx-DV-LC_2x48_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-148-02-xxx-DV_2x48_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-149-02-xxx-DV-A_2x49_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-149-02-xxx-DV-BE-A_2x49_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-149-02-xxx-DV-BE-LC_2x49_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-149-02-xxx-DV-BE_2x49_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-149-02-xxx-DV-LC_2x49_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-149-02-xxx-DV_2x49_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-150-02-xxx-DV-A_2x50_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-150-02-xxx-DV-BE-A_2x50_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-150-02-xxx-DV-BE-LC_2x50_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-150-02-xxx-DV-BE_2x50_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-150-02-xxx-DV-LC_2x50_P2.54mm_Horizontal","Connector_Samtec_HLE_SMD/Samtec_HLE-150-02-xxx-DV_2x50_P2.54mm_Horizontal","Connector_Samtec_HLE_THT/Samtec_HLE-104-02-xx-DV-PE-LC_2x04_P2.54mm_Horizontal","Connector_Samtec_HLE_THT/Samtec_HLE-104-02-xx-DV-PE_2x04_P2.54mm_Horizontal","Connector_Samtec_HLE_THT/Samtec_HLE-104-02-xx-DV-TE_2x04_P2.54mm_Horizontal","Connector_Samtec_HLE_THT/Samtec_HLE-105-02-xx-DV-PE-LC_2x05_P2.54mm_Horizontal","Connector_Samtec_HLE_THT/Samtec_HLE-105-02-xx-DV-PE_2x05_P2.54mm_Horizontal","Connector_Samtec_HLE_THT/Samtec_HLE-105-02-xx-DV-TE_2x05_P2.54mm_Horizontal","Connector_Samtec_HLE_THT/Samtec_HLE-106-02-xx-DV-PE-LC_2x06_P2.54mm_Horizontal","Connector_Samtec_HLE_THT/Samtec_HLE-106-02-xx-DV-PE_2x06_P2.54mm_Horizontal","Connector_Samtec_HLE_THT/Samtec_HLE-106-02-xx-DV-TE_2x06_P2.54mm_Horizontal","Connector_Samtec_HLE_THT/Samtec_HLE-107-02-xx-DV-PE-LC_2x07_P2.54mm_Horizontal","Connector_Samtec_HLE_THT/Samtec_HLE-107-02-xx-DV-PE_2x07_P2.54mm_Horizontal","Connector_Samtec_HLE_THT/Samtec_HLE-107-02-xx-DV-TE_2x07_P2.54mm_Horizontal","Connector_Samtec_HLE_THT/Samtec_HLE-108-02-xx-DV-PE-LC_2x08_P2.54mm_Horizontal","Connector_Samtec_HLE_THT/Samtec_HLE-108-02-xx-DV-PE_2x08_P2.54mm_Horizontal","Connector_Samtec_HLE_THT/Samtec_HLE-108-02-xx-DV-TE_2x08_P2.54mm_Horizontal","Connector_Samtec_HLE_THT/Samtec_HLE-109-02-xx-DV-PE-LC_2x09_P2.54mm_Horizontal","Connector_Samtec_HLE_THT/Samtec_HLE-109-02-xx-DV-PE_2x09_P2.54mm_Horizontal","Connector_Samtec_HLE_THT/Samtec_HLE-109-02-xx-DV-TE_2x09_P2.54mm_Horizontal","Connector_Samtec_HLE_THT/Samtec_HLE-110-02-xx-DV-PE-LC_2x10_P2.54mm_Horizontal","Connector_Samtec_HLE_THT/Samtec_HLE-110-02-xx-DV-PE_2x10_P2.54mm_Horizontal","Connector_Samtec_HLE_THT/Samtec_HLE-110-02-xx-DV-TE_2x10_P2.54mm_Horizontal","Connector_Samtec_HLE_THT/Samtec_HLE-111-02-xx-DV-PE-LC_2x11_P2.54mm_Horizontal","Connector_Samtec_HLE_THT/Samtec_HLE-111-02-xx-DV-PE_2x11_P2.54mm_Horizontal","Connector_Samtec_HLE_THT/Samtec_HLE-111-02-xx-DV-TE_2x11_P2.54mm_Horizontal","Connector_Samtec_HLE_THT/Samtec_HLE-112-02-xx-DV-PE-LC_2x12_P2.54mm_Horizontal","Connector_Samtec_HLE_THT/Samtec_HLE-112-02-xx-DV-PE_2x12_P2.54mm_Horizontal","Connector_Samtec_HLE_THT/Samtec_HLE-112-02-xx-DV-TE_2x12_P2.54mm_Horizontal","Connector_Samtec_HLE_THT/Samtec_HLE-113-02-xx-DV-PE-LC_2x13_P2.54mm_Horizontal","Connector_Samtec_HLE_THT/Samtec_HLE-113-02-xx-DV-PE_2x13_P2.54mm_Horizontal","Connector_Samtec_HLE_THT/Samtec_HLE-113-02-xx-DV-TE_2x13_P2.54mm_Horizontal","Connector_Samtec_HLE_THT/Samtec_HLE-114-02-xx-DV-PE-LC_2x14_P2.54mm_Horizontal","Connector_Samtec_HLE_THT/Samtec_HLE-114-02-xx-DV-PE_2x14_P2.54mm_Horizontal","Connector_Samtec_HLE_THT/Samtec_HLE-114-02-xx-DV-TE_2x14_P2.54mm_Horizontal","Connector_Samtec_HLE_THT/Samtec_HLE-115-02-xx-DV-PE-LC_2x15_P2.54mm_Horizontal","Connector_Samtec_HLE_THT/Samtec_HLE-115-02-xx-DV-PE_2x15_P2.54mm_Horizontal","Connector_Samtec_HLE_THT/Samtec_HLE-115-02-xx-DV-TE_2x15_P2.54mm_Horizontal","Connector_Samtec_HLE_THT/Samtec_HLE-116-02-xx-DV-PE-LC_2x16_P2.54mm_Horizontal","Connector_Samtec_HLE_THT/Samtec_HLE-116-02-xx-DV-PE_2x16_P2.54mm_Horizontal","Connector_Samtec_HLE_THT/Samtec_HLE-116-02-xx-DV-TE_2x16_P2.54mm_Horizontal","Connector_Samtec_HLE_THT/Samtec_HLE-117-02-xx-DV-PE-LC_2x17_P2.54mm_Horizontal","Connector_Samtec_HLE_THT/Samtec_HLE-117-02-xx-DV-PE_2x17_P2.54mm_Horizontal","Connector_Samtec_HLE_THT/Samtec_HLE-117-02-xx-DV-TE_2x17_P2.54mm_Horizontal","Connector_Samtec_HLE_THT/Samtec_HLE-118-02-xx-DV-PE-LC_2x18_P2.54mm_Horizontal","Connector_Samtec_HLE_THT/Samtec_HLE-118-02-xx-DV-PE_2x18_P2.54mm_Horizontal","Connector_Samtec_HLE_THT/Samtec_HLE-118-02-xx-DV-TE_2x18_P2.54mm_Horizontal","Connector_Samtec_HLE_THT/Samtec_HLE-119-02-xx-DV-PE-LC_2x19_P2.54mm_Horizontal","Connector_Samtec_HLE_THT/Samtec_HLE-119-02-xx-DV-PE_2x19_P2.54mm_Horizontal","Connector_Samtec_HLE_THT/Samtec_HLE-119-02-xx-DV-TE_2x19_P2.54mm_Horizontal","Connector_Samtec_HLE_THT/Samtec_HLE-120-02-xx-DV-PE-LC_2x20_P2.54mm_Horizontal","Connector_Samtec_HLE_THT/Samtec_HLE-120-02-xx-DV-PE_2x20_P2.54mm_Horizontal","Connector_Samtec_HLE_THT/Samtec_HLE-120-02-xx-DV-TE_2x20_P2.54mm_Horizontal","Connector_Samtec_HLE_THT/Samtec_HLE-121-02-xx-DV-PE-LC_2x21_P2.54mm_Horizontal","Connector_Samtec_HLE_THT/Samtec_HLE-121-02-xx-DV-PE_2x21_P2.54mm_Horizontal","Connector_Samtec_HLE_THT/Samtec_HLE-121-02-xx-DV-TE_2x21_P2.54mm_Horizontal","Connector_Samtec_HLE_THT/Samtec_HLE-122-02-xx-DV-PE-LC_2x22_P2.54mm_Horizontal","Connector_Samtec_HLE_THT/Samtec_HLE-122-02-xx-DV-PE_2x22_P2.54mm_Horizontal","Connector_Samtec_HLE_THT/Samtec_HLE-122-02-xx-DV-TE_2x22_P2.54mm_Horizontal","Connector_Samtec_HLE_THT/Samtec_HLE-123-02-xx-DV-PE-LC_2x23_P2.54mm_Horizontal","Connector_Samtec_HLE_THT/Samtec_HLE-123-02-xx-DV-PE_2x23_P2.54mm_Horizontal","Connector_Samtec_HLE_THT/Samtec_HLE-123-02-xx-DV-TE_2x23_P2.54mm_Horizontal","Connector_Samtec_HLE_THT/Samtec_HLE-124-02-xx-DV-PE-LC_2x24_P2.54mm_Horizontal","Connector_Samtec_HLE_THT/Samtec_HLE-124-02-xx-DV-PE_2x24_P2.54mm_Horizontal","Connector_Samtec_HLE_THT/Samtec_HLE-124-02-xx-DV-TE_2x24_P2.54mm_Horizontal","Connector_Samtec_HLE_THT/Samtec_HLE-125-02-xx-DV-PE-LC_2x25_P2.54mm_Horizontal","Connector_Samtec_HLE_THT/Samtec_HLE-125-02-xx-DV-PE_2x25_P2.54mm_Horizontal","Connector_Samtec_HLE_THT/Samtec_HLE-125-02-xx-DV-TE_2x25_P2.54mm_Horizontal","Connector_Samtec_HLE_THT/Samtec_HLE-126-02-xx-DV-PE-LC_2x26_P2.54mm_Horizontal","Connector_Samtec_HLE_THT/Samtec_HLE-126-02-xx-DV-PE_2x26_P2.54mm_Horizontal","Connector_Samtec_HLE_THT/Samtec_HLE-126-02-xx-DV-TE_2x26_P2.54mm_Horizontal","Connector_Samtec_HLE_THT/Samtec_HLE-127-02-xx-DV-PE-LC_2x27_P2.54mm_Horizontal","Connector_Samtec_HLE_THT/Samtec_HLE-127-02-xx-DV-PE_2x27_P2.54mm_Horizontal","Connector_Samtec_HLE_THT/Samtec_HLE-127-02-xx-DV-TE_2x27_P2.54mm_Horizontal","Connector_Samtec_HLE_THT/Samtec_HLE-128-02-xx-DV-PE-LC_2x28_P2.54mm_Horizontal","Connector_Samtec_HLE_THT/Samtec_HLE-128-02-xx-DV-PE_2x28_P2.54mm_Horizontal","Connector_Samtec_HLE_THT/Samtec_HLE-128-02-xx-DV-TE_2x28_P2.54mm_Horizontal","Connector_Samtec_HLE_THT/Samtec_HLE-129-02-xx-DV-PE-LC_2x29_P2.54mm_Horizontal","Connector_Samtec_HLE_THT/Samtec_HLE-129-02-xx-DV-PE_2x29_P2.54mm_Horizontal","Connector_Samtec_HLE_THT/Samtec_HLE-129-02-xx-DV-TE_2x29_P2.54mm_Horizontal","Connector_Samtec_HLE_THT/Samtec_HLE-130-02-xx-DV-PE-LC_2x30_P2.54mm_Horizontal","Connector_Samtec_HLE_THT/Samtec_HLE-130-02-xx-DV-PE_2x30_P2.54mm_Horizontal","Connector_Samtec_HLE_THT/Samtec_HLE-130-02-xx-DV-TE_2x30_P2.54mm_Horizontal","Connector_Samtec_HLE_THT/Samtec_HLE-131-02-xx-DV-PE-LC_2x31_P2.54mm_Horizontal","Connector_Samtec_HLE_THT/Samtec_HLE-131-02-xx-DV-PE_2x31_P2.54mm_Horizontal","Connector_Samtec_HLE_THT/Samtec_HLE-131-02-xx-DV-TE_2x31_P2.54mm_Horizontal","Connector_Samtec_HLE_THT/Samtec_HLE-132-02-xx-DV-PE-LC_2x32_P2.54mm_Horizontal","Connector_Samtec_HLE_THT/Samtec_HLE-132-02-xx-DV-PE_2x32_P2.54mm_Horizontal","Connector_Samtec_HLE_THT/Samtec_HLE-132-02-xx-DV-TE_2x32_P2.54mm_Horizontal","Connector_Samtec_HLE_THT/Samtec_HLE-133-02-xx-DV-PE-LC_2x33_P2.54mm_Horizontal","Connector_Samtec_HLE_THT/Samtec_HLE-133-02-xx-DV-PE_2x33_P2.54mm_Horizontal","Connector_Samtec_HLE_THT/Samtec_HLE-133-02-xx-DV-TE_2x33_P2.54mm_Horizontal","Connector_Samtec_HLE_THT/Samtec_HLE-134-02-xx-DV-PE-LC_2x34_P2.54mm_Horizontal","Connector_Samtec_HLE_THT/Samtec_HLE-134-02-xx-DV-PE_2x34_P2.54mm_Horizontal","Connector_Samtec_HLE_THT/Samtec_HLE-134-02-xx-DV-TE_2x34_P2.54mm_Horizontal","Connector_Samtec_HLE_THT/Samtec_HLE-135-02-xx-DV-PE-LC_2x35_P2.54mm_Horizontal","Connector_Samtec_HLE_THT/Samtec_HLE-135-02-xx-DV-PE_2x35_P2.54mm_Horizontal","Connector_Samtec_HLE_THT/Samtec_HLE-135-02-xx-DV-TE_2x35_P2.54mm_Horizontal","Connector_Samtec_HLE_THT/Samtec_HLE-136-02-xx-DV-PE-LC_2x36_P2.54mm_Horizontal","Connector_Samtec_HLE_THT/Samtec_HLE-136-02-xx-DV-PE_2x36_P2.54mm_Horizontal","Connector_Samtec_HLE_THT/Samtec_HLE-136-02-xx-DV-TE_2x36_P2.54mm_Horizontal","Connector_Samtec_HLE_THT/Samtec_HLE-137-02-xx-DV-PE-LC_2x37_P2.54mm_Horizontal","Connector_Samtec_HLE_THT/Samtec_HLE-137-02-xx-DV-PE_2x37_P2.54mm_Horizontal","Connector_Samtec_HLE_THT/Samtec_HLE-137-02-xx-DV-TE_2x37_P2.54mm_Horizontal","Connector_Samtec_HLE_THT/Samtec_HLE-138-02-xx-DV-PE-LC_2x38_P2.54mm_Horizontal","Connector_Samtec_HLE_THT/Samtec_HLE-138-02-xx-DV-PE_2x38_P2.54mm_Horizontal","Connector_Samtec_HLE_THT/Samtec_HLE-138-02-xx-DV-TE_2x38_P2.54mm_Horizontal","Connector_Samtec_HLE_THT/Samtec_HLE-139-02-xx-DV-PE-LC_2x39_P2.54mm_Horizontal","Connector_Samtec_HLE_THT/Samtec_HLE-139-02-xx-DV-PE_2x39_P2.54mm_Horizontal","Connector_Samtec_HLE_THT/Samtec_HLE-139-02-xx-DV-TE_2x39_P2.54mm_Horizontal","Connector_Samtec_HLE_THT/Samtec_HLE-140-02-xx-DV-PE-LC_2x40_P2.54mm_Horizontal","Connector_Samtec_HLE_THT/Samtec_HLE-140-02-xx-DV-PE_2x40_P2.54mm_Horizontal","Connector_Samtec_HLE_THT/Samtec_HLE-140-02-xx-DV-TE_2x40_P2.54mm_Horizontal","Connector_Samtec_HLE_THT/Samtec_HLE-141-02-xx-DV-PE-LC_2x41_P2.54mm_Horizontal","Connector_Samtec_HLE_THT/Samtec_HLE-141-02-xx-DV-PE_2x41_P2.54mm_Horizontal","Connector_Samtec_HLE_THT/Samtec_HLE-141-02-xx-DV-TE_2x41_P2.54mm_Horizontal","Connector_Samtec_HLE_THT/Samtec_HLE-142-02-xx-DV-PE-LC_2x42_P2.54mm_Horizontal","Connector_Samtec_HLE_THT/Samtec_HLE-142-02-xx-DV-PE_2x42_P2.54mm_Horizontal","Connector_Samtec_HLE_THT/Samtec_HLE-142-02-xx-DV-TE_2x42_P2.54mm_Horizontal","Connector_Samtec_HLE_THT/Samtec_HLE-143-02-xx-DV-PE-LC_2x43_P2.54mm_Horizontal","Connector_Samtec_HLE_THT/Samtec_HLE-143-02-xx-DV-PE_2x43_P2.54mm_Horizontal","Connector_Samtec_HLE_THT/Samtec_HLE-143-02-xx-DV-TE_2x43_P2.54mm_Horizontal","Connector_Samtec_HLE_THT/Samtec_HLE-144-02-xx-DV-PE-LC_2x44_P2.54mm_Horizontal","Connector_Samtec_HLE_THT/Samtec_HLE-144-02-xx-DV-PE_2x44_P2.54mm_Horizontal","Connector_Samtec_HLE_THT/Samtec_HLE-144-02-xx-DV-TE_2x44_P2.54mm_Horizontal","Connector_Samtec_HLE_THT/Samtec_HLE-145-02-xx-DV-PE-LC_2x45_P2.54mm_Horizontal","Connector_Samtec_HLE_THT/Samtec_HLE-145-02-xx-DV-PE_2x45_P2.54mm_Horizontal","Connector_Samtec_HLE_THT/Samtec_HLE-145-02-xx-DV-TE_2x45_P2.54mm_Horizontal","Connector_Samtec_HLE_THT/Samtec_HLE-146-02-xx-DV-PE-LC_2x46_P2.54mm_Horizontal","Connector_Samtec_HLE_THT/Samtec_HLE-146-02-xx-DV-PE_2x46_P2.54mm_Horizontal","Connector_Samtec_HLE_THT/Samtec_HLE-146-02-xx-DV-TE_2x46_P2.54mm_Horizontal","Connector_Samtec_HLE_THT/Samtec_HLE-147-02-xx-DV-PE-LC_2x47_P2.54mm_Horizontal","Connector_Samtec_HLE_THT/Samtec_HLE-147-02-xx-DV-PE_2x47_P2.54mm_Horizontal","Connector_Samtec_HLE_THT/Samtec_HLE-147-02-xx-DV-TE_2x47_P2.54mm_Horizontal","Connector_Samtec_HLE_THT/Samtec_HLE-148-02-xx-DV-PE-LC_2x48_P2.54mm_Horizontal","Connector_Samtec_HLE_THT/Samtec_HLE-148-02-xx-DV-PE_2x48_P2.54mm_Horizontal","Connector_Samtec_HLE_THT/Samtec_HLE-148-02-xx-DV-TE_2x48_P2.54mm_Horizontal","Connector_Samtec_HLE_THT/Samtec_HLE-149-02-xx-DV-PE-LC_2x49_P2.54mm_Horizontal","Connector_Samtec_HLE_THT/Samtec_HLE-149-02-xx-DV-PE_2x49_P2.54mm_Horizontal","Connector_Samtec_HLE_THT/Samtec_HLE-149-02-xx-DV-TE_2x49_P2.54mm_Horizontal","Connector_Samtec_HLE_THT/Samtec_HLE-150-02-xx-DV-PE-LC_2x50_P2.54mm_Horizontal","Connector_Samtec_HLE_THT/Samtec_HLE-150-02-xx-DV-PE_2x50_P2.54mm_Horizontal","Connector_Samtec_HLE_THT/Samtec_HLE-150-02-xx-DV-TE_2x50_P2.54mm_Horizontal","Connector_Samtec_HPM_THT/Samtec_HPM-01-01-x-S_Straight_1x01_Pitch5.08mm","Connector_Samtec_HPM_THT/Samtec_HPM-01-05-x-S_Straight_1x01_Pitch5.08mm","Connector_Samtec_HPM_THT/Samtec_HPM-02-01-x-S_Straight_1x02_Pitch5.08mm","Connector_Samtec_HPM_THT/Samtec_HPM-02-05-x-S_Straight_1x02_Pitch5.08mm","Connector_Samtec_HPM_THT/Samtec_HPM-03-01-x-S_Straight_1x03_Pitch5.08mm","Connector_Samtec_HPM_THT/Samtec_HPM-03-05-x-S_Straight_1x03_Pitch5.08mm","Connector_Samtec_HPM_THT/Samtec_HPM-04-01-x-S_Straight_1x04_Pitch5.08mm","Connector_Samtec_HPM_THT/Samtec_HPM-04-05-x-S_Straight_1x04_Pitch5.08mm","Connector_Samtec_HPM_THT/Samtec_HPM-05-01-x-S_Straight_1x05_Pitch5.08mm","Connector_Samtec_HPM_THT/Samtec_HPM-05-05-x-S_Straight_1x05_Pitch5.08mm","Connector_Samtec_HPM_THT/Samtec_HPM-06-01-x-S_Straight_1x06_Pitch5.08mm","Connector_Samtec_HPM_THT/Samtec_HPM-06-05-x-S_Straight_1x06_Pitch5.08mm","Connector_Samtec_HPM_THT/Samtec_HPM-07-01-x-S_Straight_1x07_Pitch5.08mm","Connector_Samtec_HPM_THT/Samtec_HPM-07-05-x-S_Straight_1x07_Pitch5.08mm","Connector_Samtec_HPM_THT/Samtec_HPM-08-01-x-S_Straight_1x08_Pitch5.08mm","Connector_Samtec_HPM_THT/Samtec_HPM-08-05-x-S_Straight_1x08_Pitch5.08mm","Connector_Samtec_HPM_THT/Samtec_HPM-09-01-x-S_Straight_1x09_Pitch5.08mm","Connector_Samtec_HPM_THT/Samtec_HPM-09-05-x-S_Straight_1x09_Pitch5.08mm","Connector_Samtec_HPM_THT/Samtec_HPM-10-01-x-S_Straight_1x10_Pitch5.08mm","Connector_Samtec_HPM_THT/Samtec_HPM-10-05-x-S_Straight_1x10_Pitch5.08mm","Connector_Samtec_HPM_THT/Samtec_HPM-11-01-x-S_Straight_1x11_Pitch5.08mm","Connector_Samtec_HPM_THT/Samtec_HPM-11-05-x-S_Straight_1x11_Pitch5.08mm","Connector_Samtec_HPM_THT/Samtec_HPM-12-01-x-S_Straight_1x12_Pitch5.08mm","Connector_Samtec_HPM_THT/Samtec_HPM-12-05-x-S_Straight_1x12_Pitch5.08mm","Connector_Samtec_HPM_THT/Samtec_HPM-13-01-x-S_Straight_1x13_Pitch5.08mm","Connector_Samtec_HPM_THT/Samtec_HPM-13-05-x-S_Straight_1x13_Pitch5.08mm","Connector_Samtec_HPM_THT/Samtec_HPM-14-01-x-S_Straight_1x14_Pitch5.08mm","Connector_Samtec_HPM_THT/Samtec_HPM-14-05-x-S_Straight_1x14_Pitch5.08mm","Connector_Samtec_HPM_THT/Samtec_HPM-15-01-x-S_Straight_1x15_Pitch5.08mm","Connector_Samtec_HPM_THT/Samtec_HPM-15-05-x-S_Straight_1x15_Pitch5.08mm","Connector_Samtec_HPM_THT/Samtec_HPM-16-01-x-S_Straight_1x16_Pitch5.08mm","Connector_Samtec_HPM_THT/Samtec_HPM-16-05-x-S_Straight_1x16_Pitch5.08mm","Connector_Samtec_HPM_THT/Samtec_HPM-17-01-x-S_Straight_1x17_Pitch5.08mm","Connector_Samtec_HPM_THT/Samtec_HPM-17-05-x-S_Straight_1x17_Pitch5.08mm","Connector_Samtec_HPM_THT/Samtec_HPM-18-01-x-S_Straight_1x18_Pitch5.08mm","Connector_Samtec_HPM_THT/Samtec_HPM-18-05-x-S_Straight_1x18_Pitch5.08mm","Connector_Samtec_HPM_THT/Samtec_HPM-19-01-x-S_Straight_1x19_Pitch5.08mm","Connector_Samtec_HPM_THT/Samtec_HPM-19-05-x-S_Straight_1x19_Pitch5.08mm","Connector_Samtec_HSEC8/Samtec_HSEC8-109-01-X-DV-A-BL_2x09_P0.8mm_Pol04_Socket_WeldTabs_BoardLocks","Connector_Samtec_HSEC8/Samtec_HSEC8-109-01-X-DV-A-WT_2x09_P0.8mm_Pol04_Socket_WeldTabs","Connector_Samtec_HSEC8/Samtec_HSEC8-109-X-X-DV-BL_2x09_P0.8mm_Edge","Connector_Samtec_HSEC8/Samtec_HSEC8-109-X-X-DV_2x09_P0.8mm_Edge","Connector_Samtec_HSEC8/Samtec_HSEC8-109-X-X-DV_2x09_P0.8mm_Wing_Edge","Connector_Samtec_HSEC8/Samtec_HSEC8-110-01-X-DV-A-BL_2x10_P0.8mm_Socket_WeldTabs_BoardLocks","Connector_Samtec_HSEC8/Samtec_HSEC8-110-01-X-DV-A-WT_2x10_P0.8mm_Socket_WeldTabs","Connector_Samtec_HSEC8/Samtec_HSEC8-110-01-X-DV-A_2x10_P0.8mm_Socket_AlignmentPins","Connector_Samtec_HSEC8/Samtec_HSEC8-110-01-X-DV_2x10_P0.8mm_Socket","Connector_Samtec_HSEC8/Samtec_HSEC8-110-03-X-DV-A-WT_2x10_P0.8mm_Socket_WeldTabs","Connector_Samtec_HSEC8/Samtec_HSEC8-110-03-X-DV-A_2x10_P0.8mm_Socket_AlignmentPins","Connector_Samtec_HSEC8/Samtec_HSEC8-110-03-X-DV_2x10_P0.8mm_Socket","Connector_Samtec_HSEC8/Samtec_HSEC8-110-X-X-DV-BL_2x10_P0.8mm_Edge","Connector_Samtec_HSEC8/Samtec_HSEC8-110-X-X-DV_2x10_P0.8mm_Edge","Connector_Samtec_HSEC8/Samtec_HSEC8-110-X-X-DV_2x10_P0.8mm_Wing_Edge","Connector_Samtec_HSEC8/Samtec_HSEC8-1100-01-X-DV-A-BL_2x100_P0.8mm_Pol32_Socket_WeldTabs_BoardLocks","Connector_Samtec_HSEC8/Samtec_HSEC8-1100-01-X-DV-A-WT_2x100_P0.8mm_Pol32_Socket_WeldTabs","Connector_Samtec_HSEC8/Samtec_HSEC8-1100-01-X-DV-A_2x100_P0.8mm_Pol32_Socket_AlignmentPins","Connector_Samtec_HSEC8/Samtec_HSEC8-1100-01-X-DV_2x100_P0.8mm_Pol32_Socket","Connector_Samtec_HSEC8/Samtec_HSEC8-1100-03-X-DV-A-WT_2x100_P0.8mm_Pol32_Socket_WeldTabs","Connector_Samtec_HSEC8/Samtec_HSEC8-1100-03-X-DV-A_2x100_P0.8mm_Pol32_Socket_AlignmentPins","Connector_Samtec_HSEC8/Samtec_HSEC8-1100-03-X-DV_2x100_P0.8mm_Pol32_Socket","Connector_Samtec_HSEC8/Samtec_HSEC8-1100-X-X-DV-BL_2x100_P0.8mm_Edge","Connector_Samtec_HSEC8/Samtec_HSEC8-1100-X-X-DV_2x100_P0.8mm_Edge","Connector_Samtec_HSEC8/Samtec_HSEC8-1100-X-X-DV_2x100_P0.8mm_Wing_Edge","Connector_Samtec_HSEC8/Samtec_HSEC8-113-01-X-DV-A-BL_2x13_P0.8mm_Pol06_Socket_WeldTabs_BoardLocks","Connector_Samtec_HSEC8/Samtec_HSEC8-113-01-X-DV-A-WT_2x13_P0.8mm_Pol06_Socket_WeldTabs","Connector_Samtec_HSEC8/Samtec_HSEC8-113-01-X-DV-A_2x13_P0.8mm_Pol06_Socket_AlignmentPins","Connector_Samtec_HSEC8/Samtec_HSEC8-113-01-X-DV_2x13_P0.8mm_Pol06_Socket","Connector_Samtec_HSEC8/Samtec_HSEC8-113-X-X-DV-BL_2x13_P0.8mm_Edge","Connector_Samtec_HSEC8/Samtec_HSEC8-113-X-X-DV_2x13_P0.8mm_Edge","Connector_Samtec_HSEC8/Samtec_HSEC8-113-X-X-DV_2x13_P0.8mm_Wing_Edge","Connector_Samtec_HSEC8/Samtec_HSEC8-120-01-X-DV-A-BL_2x20_P0.8mm_Socket_WeldTabs_BoardLocks","Connector_Samtec_HSEC8/Samtec_HSEC8-120-01-X-DV-A-WT_2x20_P0.8mm_Socket_WeldTabs","Connector_Samtec_HSEC8/Samtec_HSEC8-120-01-X-DV-A_2x20_P0.8mm_Socket_AlignmentPins","Connector_Samtec_HSEC8/Samtec_HSEC8-120-01-X-DV_2x20_P0.8mm_Socket","Connector_Samtec_HSEC8/Samtec_HSEC8-120-03-X-DV-A-WT_2x20_P0.8mm_Socket_WeldTabs","Connector_Samtec_HSEC8/Samtec_HSEC8-120-03-X-DV-A_2x20_P0.8mm_Socket_AlignmentPins","Connector_Samtec_HSEC8/Samtec_HSEC8-120-03-X-DV_2x20_P0.8mm_Socket","Connector_Samtec_HSEC8/Samtec_HSEC8-120-X-X-DV-BL_2x20_P0.8mm_Edge","Connector_Samtec_HSEC8/Samtec_HSEC8-120-X-X-DV_2x20_P0.8mm_Edge","Connector_Samtec_HSEC8/Samtec_HSEC8-120-X-X-DV_2x20_P0.8mm_Wing_Edge","Connector_Samtec_HSEC8/Samtec_HSEC8-125-01-X-DV-A-BL_2x25_P0.8mm_Pol06_Socket_WeldTabs_BoardLocks","Connector_Samtec_HSEC8/Samtec_HSEC8-125-01-X-DV-A-WT_2x25_P0.8mm_Pol06_Socket_WeldTabs","Connector_Samtec_HSEC8/Samtec_HSEC8-125-01-X-DV-A_2x25_P0.8mm_Pol06_Socket_AlignmentPins","Connector_Samtec_HSEC8/Samtec_HSEC8-125-01-X-DV_2x25_P0.8mm_Pol06_Socket","Connector_Samtec_HSEC8/Samtec_HSEC8-125-X-X-DV-BL_2x25_P0.8mm_Edge","Connector_Samtec_HSEC8/Samtec_HSEC8-125-X-X-DV_2x25_P0.8mm_Edge","Connector_Samtec_HSEC8/Samtec_HSEC8-125-X-X-DV_2x25_P0.8mm_Wing_Edge","Connector_Samtec_HSEC8/Samtec_HSEC8-130-01-X-DV-A-BL_2x30_P0.8mm_Socket_WeldTabs_BoardLocks","Connector_Samtec_HSEC8/Samtec_HSEC8-130-01-X-DV-A-WT_2x30_P0.8mm_Socket_WeldTabs","Connector_Samtec_HSEC8/Samtec_HSEC8-130-01-X-DV-A_2x30_P0.8mm_Socket_AlignmentPins","Connector_Samtec_HSEC8/Samtec_HSEC8-130-01-X-DV_2x30_P0.8mm_Socket","Connector_Samtec_HSEC8/Samtec_HSEC8-130-03-X-DV-A-WT_2x30_P0.8mm_Socket_WeldTabs","Connector_Samtec_HSEC8/Samtec_HSEC8-130-03-X-DV-A_2x30_P0.8mm_Socket_AlignmentPins","Connector_Samtec_HSEC8/Samtec_HSEC8-130-03-X-DV_2x30_P0.8mm_Socket","Connector_Samtec_HSEC8/Samtec_HSEC8-130-X-X-DV-BL_2x30_P0.8mm_Edge","Connector_Samtec_HSEC8/Samtec_HSEC8-130-X-X-DV_2x30_P0.8mm_Edge","Connector_Samtec_HSEC8/Samtec_HSEC8-130-X-X-DV_2x30_P0.8mm_Wing_Edge","Connector_Samtec_HSEC8/Samtec_HSEC8-137-01-X-DV-A-BL_2x37_P0.8mm_Pol21_Socket_WeldTabs_BoardLocks","Connector_Samtec_HSEC8/Samtec_HSEC8-137-01-X-DV-A-WT_2x37_P0.8mm_Pol21_Socket_WeldTabs","Connector_Samtec_HSEC8/Samtec_HSEC8-137-01-X-DV-A_2x37_P0.8mm_Pol21_Socket_AlignmentPins","Connector_Samtec_HSEC8/Samtec_HSEC8-137-01-X-DV_2x37_P0.8mm_Pol21_Socket","Connector_Samtec_HSEC8/Samtec_HSEC8-137-X-X-DV-BL_2x37_P0.8mm_Edge","Connector_Samtec_HSEC8/Samtec_HSEC8-137-X-X-DV_2x37_P0.8mm_Edge","Connector_Samtec_HSEC8/Samtec_HSEC8-137-X-X-DV_2x37_P0.8mm_Wing_Edge","Connector_Samtec_HSEC8/Samtec_HSEC8-140-01-X-DV-A-BL_2x40_P0.8mm_Pol22_Socket_WeldTabs_BoardLocks","Connector_Samtec_HSEC8/Samtec_HSEC8-140-01-X-DV-A-WT_2x40_P0.8mm_Pol22_Socket_WeldTabs","Connector_Samtec_HSEC8/Samtec_HSEC8-140-01-X-DV-A_2x40_P0.8mm_Pol22_Socket_AlignmentPins","Connector_Samtec_HSEC8/Samtec_HSEC8-140-01-X-DV_2x40_P0.8mm_Pol22_Socket","Connector_Samtec_HSEC8/Samtec_HSEC8-140-03-X-DV-A-WT_2x40_P0.8mm_Pol22_Socket_WeldTabs","Connector_Samtec_HSEC8/Samtec_HSEC8-140-03-X-DV-A_2x40_P0.8mm_Pol22_Socket_AlignmentPins","Connector_Samtec_HSEC8/Samtec_HSEC8-140-03-X-DV_2x40_P0.8mm_Pol22_Socket","Connector_Samtec_HSEC8/Samtec_HSEC8-140-X-X-DV-BL_2x40_P0.8mm_Edge","Connector_Samtec_HSEC8/Samtec_HSEC8-140-X-X-DV_2x40_P0.8mm_Edge","Connector_Samtec_HSEC8/Samtec_HSEC8-140-X-X-DV_2x40_P0.8mm_Wing_Edge","Connector_Samtec_HSEC8/Samtec_HSEC8-149-01-X-DV-A-BL_2x49_P0.8mm_Pol27_Socket_WeldTabs_BoardLocks","Connector_Samtec_HSEC8/Samtec_HSEC8-149-01-X-DV-A-WT_2x49_P0.8mm_Pol27_Socket_WeldTabs","Connector_Samtec_HSEC8/Samtec_HSEC8-149-01-X-DV-A_2x49_P0.8mm_Pol27_Socket_AlignmentPins","Connector_Samtec_HSEC8/Samtec_HSEC8-149-01-X-DV_2x49_P0.8mm_Pol27_Socket","Connector_Samtec_HSEC8/Samtec_HSEC8-149-X-X-DV-BL_2x49_P0.8mm_Edge","Connector_Samtec_HSEC8/Samtec_HSEC8-149-X-X-DV_2x49_P0.8mm_Edge","Connector_Samtec_HSEC8/Samtec_HSEC8-149-X-X-DV_2x49_P0.8mm_Wing_Edge","Connector_Samtec_HSEC8/Samtec_HSEC8-150-01-X-DV-A-BL_2x50_P0.8mm_Pol27_Socket_WeldTabs_BoardLocks","Connector_Samtec_HSEC8/Samtec_HSEC8-150-01-X-DV-A-WT_2x50_P0.8mm_Pol27_Socket_WeldTabs","Connector_Samtec_HSEC8/Samtec_HSEC8-150-01-X-DV-A_2x50_P0.8mm_Pol27_Socket_AlignmentPins","Connector_Samtec_HSEC8/Samtec_HSEC8-150-01-X-DV_2x50_P0.8mm_Pol27_Socket","Connector_Samtec_HSEC8/Samtec_HSEC8-150-03-X-DV-A-WT_2x50_P0.8mm_Pol27_Socket_WeldTabs","Connector_Samtec_HSEC8/Samtec_HSEC8-150-03-X-DV-A_2x50_P0.8mm_Pol27_Socket_AlignmentPins","Connector_Samtec_HSEC8/Samtec_HSEC8-150-03-X-DV_2x50_P0.8mm_Pol27_Socket","Connector_Samtec_HSEC8/Samtec_HSEC8-150-X-X-DV-BL_2x50_P0.8mm_Edge","Connector_Samtec_HSEC8/Samtec_HSEC8-150-X-X-DV_2x50_P0.8mm_Edge","Connector_Samtec_HSEC8/Samtec_HSEC8-150-X-X-DV_2x50_P0.8mm_Wing_Edge","Connector_Samtec_HSEC8/Samtec_HSEC8-160-01-X-DV-A-BL_2x60_P0.8mm_Pol32_Socket_WeldTabs_BoardLocks","Connector_Samtec_HSEC8/Samtec_HSEC8-160-01-X-DV-A-WT_2x60_P0.8mm_Pol32_Socket_WeldTabs","Connector_Samtec_HSEC8/Samtec_HSEC8-160-01-X-DV-A_2x60_P0.8mm_Pol32_Socket_AlignmentPins","Connector_Samtec_HSEC8/Samtec_HSEC8-160-01-X-DV_2x60_P0.8mm_Pol32_Socket","Connector_Samtec_HSEC8/Samtec_HSEC8-160-03-X-DV-A-WT_2x60_P0.8mm_Pol32_Socket_WeldTabs","Connector_Samtec_HSEC8/Samtec_HSEC8-160-03-X-DV-A_2x60_P0.8mm_Pol32_Socket_AlignmentPins","Connector_Samtec_HSEC8/Samtec_HSEC8-160-03-X-DV_2x60_P0.8mm_Pol32_Socket","Connector_Samtec_HSEC8/Samtec_HSEC8-160-X-X-DV-BL_2x60_P0.8mm_Edge","Connector_Samtec_HSEC8/Samtec_HSEC8-160-X-X-DV_2x60_P0.8mm_Edge","Connector_Samtec_HSEC8/Samtec_HSEC8-160-X-X-DV_2x60_P0.8mm_Wing_Edge","Connector_Samtec_HSEC8/Samtec_HSEC8-170-01-X-DV-A-BL_2x70_P0.8mm_Pol32_Socket_WeldTabs_BoardLocks","Connector_Samtec_HSEC8/Samtec_HSEC8-170-01-X-DV-A-WT_2x70_P0.8mm_Pol32_Socket_WeldTabs","Connector_Samtec_HSEC8/Samtec_HSEC8-170-01-X-DV-A_2x70_P0.8mm_Pol32_Socket_AlignmentPins","Connector_Samtec_HSEC8/Samtec_HSEC8-170-01-X-DV_2x70_P0.8mm_Pol32_Socket","Connector_Samtec_HSEC8/Samtec_HSEC8-170-03-X-DV-A-WT_2x70_P0.8mm_Pol32_Socket_WeldTabs","Connector_Samtec_HSEC8/Samtec_HSEC8-170-03-X-DV-A_2x70_P0.8mm_Pol32_Socket_AlignmentPins","Connector_Samtec_HSEC8/Samtec_HSEC8-170-03-X-DV_2x70_P0.8mm_Pol32_Socket","Connector_Samtec_HSEC8/Samtec_HSEC8-170-X-X-DV-BL_2x70_P0.8mm_Edge","Connector_Samtec_HSEC8/Samtec_HSEC8-170-X-X-DV_2x70_P0.8mm_Edge","Connector_Samtec_HSEC8/Samtec_HSEC8-170-X-X-DV_2x70_P0.8mm_Wing_Edge","Connector_Samtec_HSEC8/Samtec_HSEC8-180-01-X-DV-A-BL_2x80_P0.8mm_Pol32_Socket_WeldTabs_BoardLocks","Connector_Samtec_HSEC8/Samtec_HSEC8-180-01-X-DV-A-WT_2x80_P0.8mm_Pol32_Socket_WeldTabs","Connector_Samtec_HSEC8/Samtec_HSEC8-180-01-X-DV-A_2x80_P0.8mm_Pol32_Socket_AlignmentPins","Connector_Samtec_HSEC8/Samtec_HSEC8-180-01-X-DV_2x80_P0.8mm_Pol32_Socket","Connector_Samtec_HSEC8/Samtec_HSEC8-180-03-X-DV-A-WT_2x80_P0.8mm_Pol32_Socket_WeldTabs","Connector_Samtec_HSEC8/Samtec_HSEC8-180-03-X-DV-A_2x80_P0.8mm_Pol32_Socket_AlignmentPins","Connector_Samtec_HSEC8/Samtec_HSEC8-180-03-X-DV_2x80_P0.8mm_Pol32_Socket","Connector_Samtec_HSEC8/Samtec_HSEC8-180-X-X-DV-BL_2x80_P0.8mm_Edge","Connector_Samtec_HSEC8/Samtec_HSEC8-180-X-X-DV_2x80_P0.8mm_Edge","Connector_Samtec_HSEC8/Samtec_HSEC8-180-X-X-DV_2x80_P0.8mm_Wing_Edge","Connector_Samtec_HSEC8/Samtec_HSEC8-190-01-X-DV-A-BL_2x90_P0.8mm_Pol32_Socket_WeldTabs_BoardLocks","Connector_Samtec_HSEC8/Samtec_HSEC8-190-01-X-DV-A-WT_2x90_P0.8mm_Pol32_Socket_WeldTabs","Connector_Samtec_HSEC8/Samtec_HSEC8-190-01-X-DV-A_2x90_P0.8mm_Pol32_Socket_AlignmentPins","Connector_Samtec_HSEC8/Samtec_HSEC8-190-01-X-DV_2x90_P0.8mm_Pol32_Socket","Connector_Samtec_HSEC8/Samtec_HSEC8-190-03-X-DV-A-WT_2x90_P0.8mm_Pol32_Socket_WeldTabs","Connector_Samtec_HSEC8/Samtec_HSEC8-190-03-X-DV-A_2x90_P0.8mm_Pol32_Socket_AlignmentPins","Connector_Samtec_HSEC8/Samtec_HSEC8-190-03-X-DV_2x90_P0.8mm_Pol32_Socket","Connector_Samtec_HSEC8/Samtec_HSEC8-190-X-X-DV-BL_2x90_P0.8mm_Edge","Connector_Samtec_HSEC8/Samtec_HSEC8-190-X-X-DV_2x90_P0.8mm_Edge","Connector_Samtec_HSEC8/Samtec_HSEC8-190-X-X-DV_2x90_P0.8mm_Wing_Edge","Connector_Samtec_LTMM/Samtec_LTMM-104-02-X-D-SM-LC_2x04_P2.0mm_Header_Vertical_LockingClip","Connector_Samtec_LTMM/Samtec_LTMM-104-02-X-D-SM_2x04_P2.0mm_Header_Vertical","Connector_Samtec_LTMM/Samtec_LTMM-105-02-X-D-SM-LC_2x05_P2.0mm_Header_Vertical_LockingClip","Connector_Samtec_LTMM/Samtec_LTMM-105-02-X-D-SM_2x05_P2.0mm_Header_Vertical","Connector_Samtec_LTMM/Samtec_LTMM-106-02-X-D-SM-LC_2x06_P2.0mm_Header_Vertical_LockingClip","Connector_Samtec_LTMM/Samtec_LTMM-106-02-X-D-SM_2x06_P2.0mm_Header_Vertical","Connector_Samtec_LTMM/Samtec_LTMM-107-02-X-D-SM-LC_2x07_P2.0mm_Header_Vertical_LockingClip","Connector_Samtec_LTMM/Samtec_LTMM-107-02-X-D-SM_2x07_P2.0mm_Header_Vertical","Connector_Samtec_LTMM/Samtec_LTMM-108-02-X-D-SM-LC_2x08_P2.0mm_Header_Vertical_LockingClip","Connector_Samtec_LTMM/Samtec_LTMM-108-02-X-D-SM_2x08_P2.0mm_Header_Vertical","Connector_Samtec_LTMM/Samtec_LTMM-110-02-X-D-SM-LC_2x10_P2.0mm_Header_Vertical_LockingClip","Connector_Samtec_LTMM/Samtec_LTMM-110-02-X-D-SM_2x10_P2.0mm_Header_Vertical","Connector_Samtec_LTMM/Samtec_LTMM-112-02-X-D-SM-LC_2x12_P2.0mm_Header_Vertical_LockingClip","Connector_Samtec_LTMM/Samtec_LTMM-112-02-X-D-SM_2x12_P2.0mm_Header_Vertical","Connector_Samtec_LTMM/Samtec_LTMM-113-02-X-D-SM-LC_2x13_P2.0mm_Header_Vertical_LockingClip","Connector_Samtec_LTMM/Samtec_LTMM-113-02-X-D-SM_2x13_P2.0mm_Header_Vertical","Connector_Samtec_LTMM/Samtec_LTMM-115-02-X-D-SM-LC_2x15_P2.0mm_Header_Vertical_LockingClip","Connector_Samtec_LTMM/Samtec_LTMM-115-02-X-D-SM_2x15_P2.0mm_Header_Vertical","Connector_Samtec_LTMM/Samtec_LTMM-117-02-X-D-SM-LC_2x17_P2.0mm_Header_Vertical_LockingClip","Connector_Samtec_LTMM/Samtec_LTMM-117-02-X-D-SM_2x17_P2.0mm_Header_Vertical","Connector_Samtec_LTMM/Samtec_LTMM-120-02-X-D-SM-LC_2x20_P2.0mm_Header_Vertical_LockingClip","Connector_Samtec_LTMM/Samtec_LTMM-120-02-X-D-SM_2x20_P2.0mm_Header_Vertical","Connector_Samtec_LTMM/Samtec_LTMM-122-02-X-D-SM-LC_2x22_P2.0mm_Header_Vertical_LockingClip","Connector_Samtec_LTMM/Samtec_LTMM-122-02-X-D-SM_2x22_P2.0mm_Header_Vertical","Connector_Samtec_LTMM/Samtec_LTMM-125-02-X-D-SM-LC_2x25_P2.0mm_Header_Vertical_LockingClip","Connector_Samtec_LTMM/Samtec_LTMM-125-02-X-D-SM_2x25_P2.0mm_Header_Vertical","Connector_Samtec_MicroMate/Samtec_T1M-02-X-S-RA_1x02-1MP_P1.0mm_Terminal_Horizontal","Connector_Samtec_MicroMate/Samtec_T1M-02-X-S-V_1x02-1MP_P1.0mm_Terminal_Vertical","Connector_Samtec_MicroMate/Samtec_T1M-02-X-SH-L_1x02-1MP_P1.0mm_Terminal_Horizontal_Latch","Connector_Samtec_MicroMate/Samtec_T1M-02-X-SV-L_1x02-1MP_P1.0mm_Terminal_Vertical_Latch","Connector_Samtec_MicroMate/Samtec_T1M-03-X-S-RA_1x03-1MP_P1.0mm_Terminal_Horizontal","Connector_Samtec_MicroMate/Samtec_T1M-03-X-S-V_1x03-1MP_P1.0mm_Terminal_Vertical","Connector_Samtec_MicroMate/Samtec_T1M-03-X-SH-L_1x03-1MP_P1.0mm_Terminal_Horizontal_Latch","Connector_Samtec_MicroMate/Samtec_T1M-03-X-SV-L_1x03-1MP_P1.0mm_Terminal_Vertical_Latch","Connector_Samtec_MicroMate/Samtec_T1M-04-X-S-RA_1x04-1MP_P1.0mm_Terminal_Horizontal","Connector_Samtec_MicroMate/Samtec_T1M-04-X-S-V_1x04-1MP_P1.0mm_Terminal_Vertical","Connector_Samtec_MicroMate/Samtec_T1M-04-X-SH-L_1x04-1MP_P1.0mm_Terminal_Horizontal_Latch","Connector_Samtec_MicroMate/Samtec_T1M-04-X-SV-L_1x04-1MP_P1.0mm_Terminal_Vertical_Latch","Connector_Samtec_MicroMate/Samtec_T1M-05-X-S-RA_1x05-1MP_P1.0mm_Terminal_Horizontal","Connector_Samtec_MicroMate/Samtec_T1M-05-X-S-V_1x05-1MP_P1.0mm_Terminal_Vertical","Connector_Samtec_MicroMate/Samtec_T1M-05-X-SH-L_1x05-1MP_P1.0mm_Terminal_Horizontal_Latch","Connector_Samtec_MicroMate/Samtec_T1M-05-X-SV-L_1x05-1MP_P1.0mm_Terminal_Vertical_Latch","Connector_Samtec_MicroMate/Samtec_T1M-06-X-S-RA_1x06-1MP_P1.0mm_Terminal_Horizontal","Connector_Samtec_MicroMate/Samtec_T1M-06-X-S-V_1x06-1MP_P1.0mm_Terminal_Vertical","Connector_Samtec_MicroMate/Samtec_T1M-06-X-SH-L_1x06-1MP_P1.0mm_Terminal_Horizontal_Latch","Connector_Samtec_MicroMate/Samtec_T1M-06-X-SV-L_1x06-1MP_P1.0mm_Terminal_Vertical_Latch","Connector_Samtec_MicroMate/Samtec_T1M-07-X-S-RA_1x07-1MP_P1.0mm_Terminal_Horizontal","Connector_Samtec_MicroMate/Samtec_T1M-07-X-S-V_1x07-1MP_P1.0mm_Terminal_Vertical","Connector_Samtec_MicroMate/Samtec_T1M-07-X-SH-L_1x07-1MP_P1.0mm_Terminal_Horizontal_Latch","Connector_Samtec_MicroMate/Samtec_T1M-07-X-SV-L_1x07-1MP_P1.0mm_Terminal_Vertical_Latch","Connector_Samtec_MicroMate/Samtec_T1M-08-X-S-RA_1x08-1MP_P1.0mm_Terminal_Horizontal","Connector_Samtec_MicroMate/Samtec_T1M-08-X-S-V_1x08-1MP_P1.0mm_Terminal_Vertical","Connector_Samtec_MicroMate/Samtec_T1M-08-X-SH-L_1x08-1MP_P1.0mm_Terminal_Horizontal_Latch","Connector_Samtec_MicroMate/Samtec_T1M-08-X-SV-L_1x08-1MP_P1.0mm_Terminal_Vertical_Latch","Connector_Samtec_MicroMate/Samtec_T1M-09-X-S-RA_1x09-1MP_P1.0mm_Terminal_Horizontal","Connector_Samtec_MicroMate/Samtec_T1M-09-X-S-V_1x09-1MP_P1.0mm_Terminal_Vertical","Connector_Samtec_MicroMate/Samtec_T1M-09-X-SH-L_1x09-1MP_P1.0mm_Terminal_Horizontal_Latch","Connector_Samtec_MicroMate/Samtec_T1M-09-X-SV-L_1x09-1MP_P1.0mm_Terminal_Vertical_Latch","Connector_Samtec_MicroMate/Samtec_T1M-10-X-S-RA_1x10-1MP_P1.0mm_Terminal_Horizontal","Connector_Samtec_MicroMate/Samtec_T1M-10-X-S-V_1x10-1MP_P1.0mm_Terminal_Vertical","Connector_Samtec_MicroMate/Samtec_T1M-10-X-SH-L_1x10-1MP_P1.0mm_Terminal_Horizontal_Latch","Connector_Samtec_MicroMate/Samtec_T1M-10-X-SV-L_1x10-1MP_P1.0mm_Terminal_Vertical_Latch","Connector_Samtec_MicroMate/Samtec_T1M-11-X-S-RA_1x11-1MP_P1.0mm_Terminal_Horizontal","Connector_Samtec_MicroMate/Samtec_T1M-11-X-S-V_1x11-1MP_P1.0mm_Terminal_Vertical","Connector_Samtec_MicroMate/Samtec_T1M-11-X-SH-L_1x11-1MP_P1.0mm_Terminal_Horizontal_Latch","Connector_Samtec_MicroMate/Samtec_T1M-11-X-SV-L_1x11-1MP_P1.0mm_Terminal_Vertical_Latch","Connector_Samtec_MicroMate/Samtec_T1M-12-X-S-RA_1x12-1MP_P1.0mm_Terminal_Horizontal","Connector_Samtec_MicroMate/Samtec_T1M-12-X-S-V_1x12-1MP_P1.0mm_Terminal_Vertical","Connector_Samtec_MicroMate/Samtec_T1M-12-X-SH-L_1x12-1MP_P1.0mm_Terminal_Horizontal_Latch","Connector_Samtec_MicroMate/Samtec_T1M-12-X-SV-L_1x12-1MP_P1.0mm_Terminal_Vertical_Latch","Connector_Samtec_MicroMate/Samtec_T1M-13-X-S-RA_1x13-1MP_P1.0mm_Terminal_Horizontal","Connector_Samtec_MicroMate/Samtec_T1M-13-X-S-V_1x13-1MP_P1.0mm_Terminal_Vertical","Connector_Samtec_MicroMate/Samtec_T1M-13-X-SH-L_1x13-1MP_P1.0mm_Terminal_Horizontal_Latch","Connector_Samtec_MicroMate/Samtec_T1M-13-X-SV-L_1x13-1MP_P1.0mm_Terminal_Vertical_Latch","Connector_Samtec_MicroMate/Samtec_T1M-14-X-S-RA_1x14-1MP_P1.0mm_Terminal_Horizontal","Connector_Samtec_MicroMate/Samtec_T1M-14-X-S-V_1x14-1MP_P1.0mm_Terminal_Vertical","Connector_Samtec_MicroMate/Samtec_T1M-14-X-SH-L_1x14-1MP_P1.0mm_Terminal_Horizontal_Latch","Connector_Samtec_MicroMate/Samtec_T1M-14-X-SV-L_1x14-1MP_P1.0mm_Terminal_Vertical_Latch","Connector_Samtec_MicroMate/Samtec_T1M-15-X-S-RA_1x15-1MP_P1.0mm_Terminal_Horizontal","Connector_Samtec_MicroMate/Samtec_T1M-15-X-S-V_1x15-1MP_P1.0mm_Terminal_Vertical","Connector_Samtec_MicroMate/Samtec_T1M-15-X-SH-L_1x15-1MP_P1.0mm_Terminal_Horizontal_Latch","Connector_Samtec_MicroMate/Samtec_T1M-15-X-SV-L_1x15-1MP_P1.0mm_Terminal_Vertical_Latch","Connector_Samtec_MicroMate/Samtec_T1M-16-X-S-RA_1x16-1MP_P1.0mm_Terminal_Horizontal","Connector_Samtec_MicroMate/Samtec_T1M-16-X-S-V_1x16-1MP_P1.0mm_Terminal_Vertical","Connector_Samtec_MicroMate/Samtec_T1M-16-X-SH-L_1x16-1MP_P1.0mm_Terminal_Horizontal_Latch","Connector_Samtec_MicroMate/Samtec_T1M-16-X-SV-L_1x16-1MP_P1.0mm_Terminal_Vertical_Latch","Connector_Samtec_MicroMate/Samtec_T1M-17-X-S-RA_1x17-1MP_P1.0mm_Terminal_Horizontal","Connector_Samtec_MicroMate/Samtec_T1M-17-X-S-V_1x17-1MP_P1.0mm_Terminal_Vertical","Connector_Samtec_MicroMate/Samtec_T1M-17-X-SH-L_1x17-1MP_P1.0mm_Terminal_Horizontal_Latch","Connector_Samtec_MicroMate/Samtec_T1M-17-X-SV-L_1x17-1MP_P1.0mm_Terminal_Vertical_Latch","Connector_Samtec_MicroMate/Samtec_T1M-18-X-S-RA_1x18-1MP_P1.0mm_Terminal_Horizontal","Connector_Samtec_MicroMate/Samtec_T1M-18-X-S-V_1x18-1MP_P1.0mm_Terminal_Vertical","Connector_Samtec_MicroMate/Samtec_T1M-18-X-SH-L_1x18-1MP_P1.0mm_Terminal_Horizontal_Latch","Connector_Samtec_MicroMate/Samtec_T1M-18-X-SV-L_1x18-1MP_P1.0mm_Terminal_Vertical_Latch","Connector_Samtec_MicroMate/Samtec_T1M-19-X-S-RA_1x19-1MP_P1.0mm_Terminal_Horizontal","Connector_Samtec_MicroMate/Samtec_T1M-19-X-S-V_1x19-1MP_P1.0mm_Terminal_Vertical","Connector_Samtec_MicroMate/Samtec_T1M-19-X-SH-L_1x19-1MP_P1.0mm_Terminal_Horizontal_Latch","Connector_Samtec_MicroMate/Samtec_T1M-19-X-SV-L_1x19-1MP_P1.0mm_Terminal_Vertical_Latch","Connector_Samtec_MicroMate/Samtec_T1M-20-X-S-RA_1x20-1MP_P1.0mm_Terminal_Horizontal","Connector_Samtec_MicroMate/Samtec_T1M-20-X-S-V_1x20-1MP_P1.0mm_Terminal_Vertical","Connector_Samtec_MicroMate/Samtec_T1M-20-X-SH-L_1x20-1MP_P1.0mm_Terminal_Horizontal_Latch","Connector_Samtec_MicroMate/Samtec_T1M-20-X-SV-L_1x20-1MP_P1.0mm_Terminal_Vertical_Latch","Connector_Samtec_MicroPower/Samtec_UMPS-02-XX.X-X-V-S-W_1x02-1MP_P2.0mm_Socket_WeldTab","Connector_Samtec_MicroPower/Samtec_UMPS-02-XX.X-X-V-S_1x02_P2.0mm_Socket","Connector_Samtec_MicroPower/Samtec_UMPS-03-XX.X-X-V-S-W_1x03-1MP_P2.0mm_Socket_WeldTab","Connector_Samtec_MicroPower/Samtec_UMPS-03-XX.X-X-V-S_1x03_P2.0mm_Socket","Connector_Samtec_MicroPower/Samtec_UMPS-04-XX.X-X-V-S-W_1x04-1MP_P2.0mm_Socket_WeldTab","Connector_Samtec_MicroPower/Samtec_UMPS-04-XX.X-X-V-S_1x04_P2.0mm_Socket","Connector_Samtec_MicroPower/Samtec_UMPS-05-XX.X-X-V-S-W_1x05-1MP_P2.0mm_Socket_WeldTab","Connector_Samtec_MicroPower/Samtec_UMPS-05-XX.X-X-V-S_1x05_P2.0mm_Socket","Connector_Samtec_MicroPower/Samtec_UMPS-06-XX.X-X-V-S-W_1x06-1MP_P2.0mm_Socket_WeldTab","Connector_Samtec_MicroPower/Samtec_UMPS-06-XX.X-X-V-S_1x06_P2.0mm_Socket","Connector_Samtec_MicroPower/Samtec_UMPS-07-XX.X-X-V-S-W_1x07-1MP_P2.0mm_Socket_WeldTab","Connector_Samtec_MicroPower/Samtec_UMPS-07-XX.X-X-V-S_1x07_P2.0mm_Socket","Connector_Samtec_MicroPower/Samtec_UMPS-08-XX.X-X-V-S-W_1x08-1MP_P2.0mm_Socket_WeldTab","Connector_Samtec_MicroPower/Samtec_UMPS-08-XX.X-X-V-S_1x08_P2.0mm_Socket","Connector_Samtec_MicroPower/Samtec_UMPS-09-XX.X-X-V-S-W_1x09-1MP_P2.0mm_Socket_WeldTab","Connector_Samtec_MicroPower/Samtec_UMPS-09-XX.X-X-V-S_1x09_P2.0mm_Socket","Connector_Samtec_MicroPower/Samtec_UMPS-10-XX.X-X-V-S-W_1x10-1MP_P2.0mm_Socket_WeldTab","Connector_Samtec_MicroPower/Samtec_UMPS-10-XX.X-X-V-S_1x10_P2.0mm_Socket","Connector_Samtec_MicroPower/Samtec_UMPT-02-XX.X-X-V-S-W_1x02-1MP_P2.0mm_Terminal_WeldTab","Connector_Samtec_MicroPower/Samtec_UMPT-02-XX.X-X-V-S_1x02_P2.0mm_Terminal","Connector_Samtec_MicroPower/Samtec_UMPT-03-XX.X-X-V-S-W_1x03-1MP_P2.0mm_Terminal_WeldTab","Connector_Samtec_MicroPower/Samtec_UMPT-03-XX.X-X-V-S_1x03_P2.0mm_Terminal","Connector_Samtec_MicroPower/Samtec_UMPT-04-XX.X-X-V-S-W_1x04-1MP_P2.0mm_Terminal_WeldTab","Connector_Samtec_MicroPower/Samtec_UMPT-04-XX.X-X-V-S_1x04_P2.0mm_Terminal","Connector_Samtec_MicroPower/Samtec_UMPT-05-XX.X-X-V-S-W_1x05-1MP_P2.0mm_Terminal_WeldTab","Connector_Samtec_MicroPower/Samtec_UMPT-05-XX.X-X-V-S_1x05_P2.0mm_Terminal","Connector_Samtec_MicroPower/Samtec_UMPT-06-XX.X-X-V-S-W_1x06-1MP_P2.0mm_Terminal_WeldTab","Connector_Samtec_MicroPower/Samtec_UMPT-06-XX.X-X-V-S_1x06_P2.0mm_Terminal","Connector_Samtec_MicroPower/Samtec_UMPT-07-XX.X-X-V-S-W_1x07-1MP_P2.0mm_Terminal_WeldTab","Connector_Samtec_MicroPower/Samtec_UMPT-07-XX.X-X-V-S_1x07_P2.0mm_Terminal","Connector_Samtec_MicroPower/Samtec_UMPT-08-XX.X-X-V-S-W_1x08-1MP_P2.0mm_Terminal_WeldTab","Connector_Samtec_MicroPower/Samtec_UMPT-08-XX.X-X-V-S_1x08_P2.0mm_Terminal","Connector_Samtec_MicroPower/Samtec_UMPT-09-XX.X-X-V-S-W_1x09-1MP_P2.0mm_Terminal_WeldTab","Connector_Samtec_MicroPower/Samtec_UMPT-09-XX.X-X-V-S_1x09_P2.0mm_Terminal","Connector_Samtec_MicroPower/Samtec_UMPT-10-XX.X-X-V-S-W_1x10-1MP_P2.0mm_Terminal_WeldTab","Connector_Samtec_MicroPower/Samtec_UMPT-10-XX.X-X-V-S_1x10_P2.0mm_Terminal","Connector_Stocko/Stocko_MKS_1651-6-0-202_1x2_P2.50mm_Vertical","Connector_Stocko/Stocko_MKS_1652-6-0-202_1x2_P2.50mm_Vertical","Connector_Stocko/Stocko_MKS_1653-6-0-303_1x3_P2.50mm_Vertical","Connector_Stocko/Stocko_MKS_1654-6-0-404_1x4_P2.50mm_Vertical","Connector_Stocko/Stocko_MKS_1655-6-0-505_1x5_P2.50mm_Vertical","Connector_Stocko/Stocko_MKS_1656-6-0-606_1x6_P2.50mm_Vertical","Connector_Stocko/Stocko_MKS_1657-6-0-707_1x7_P2.50mm_Vertical","Connector_Stocko/Stocko_MKS_1658-6-0-808_1x8_P2.50mm_Vertical","Connector_Stocko/Stocko_MKS_1659-6-0-909_1x9_P2.50mm_Vertical","Connector_Stocko/Stocko_MKS_1660-6-0-1010_1x10_P2.50mm_Vertical","Connector_Stocko/Stocko_MKS_1661-6-0-1111_1x11_P2.50mm_Vertical","Connector_Stocko/Stocko_MKS_1662-6-0-1212_1x12_P2.50mm_Vertical","Connector_Stocko/Stocko_MKS_1663-6-0-1313_1x13_P2.50mm_Vertical","Connector_Stocko/Stocko_MKS_1664-6-0-1414_1x14_P2.50mm_Vertical","Connector_Stocko/Stocko_MKS_1665-6-0-1515_1x15_P2.50mm_Vertical","Connector_Stocko/Stocko_MKS_1666-6-0-1616_1x16_P2.50mm_Vertical","Connector_Stocko/Stocko_MKS_1667-6-0-1717_1x17_P2.50mm_Vertical","Connector_Stocko/Stocko_MKS_1668-6-0-1818_1x18_P2.50mm_Vertical","Connector_Stocko/Stocko_MKS_1669-6-0-1919_1x19_P2.50mm_Vertical","Connector_Stocko/Stocko_MKS_1670-6-0-2020_1x20_P2.50mm_Vertical","Connector_TE-Connectivity/TE_1-826576-3_1x13_P3.96mm_Vertical","Connector_TE-Connectivity/TE_1-826576-5_1x15_P3.96mm_Vertical","Connector_TE-Connectivity/TE_1-826576-6_1x16_P3.96mm_Vertical","Connector_TE-Connectivity/TE_1-826576-7_1x17_P3.96mm_Vertical","Connector_TE-Connectivity/TE_1-826576-8_1x18_P3.96mm_Vertical","Connector_TE-Connectivity/TE_2-826576-0_1x20_P3.96mm_Vertical","Connector_TE-Connectivity/TE_2834006-1_1x01_P4.0mm_Horizontal","Connector_TE-Connectivity/TE_2834006-2_1x02_P4.0mm_Horizontal","Connector_TE-Connectivity/TE_2834006-3_1x03_P4.0mm_Horizontal","Connector_TE-Connectivity/TE_2834006-4_1x04_P4.0mm_Horizontal","Connector_TE-Connectivity/TE_2834006-5_1x05_P4.0mm_Horizontal","Connector_TE-Connectivity/TE_3-826576-6_1x36_P3.96mm_Vertical","Connector_TE-Connectivity/TE_440054-2_1x02_P2.00mm_Vertical","Connector_TE-Connectivity/TE_440055-2_1x02_P2.00mm_Horizontal","Connector_TE-Connectivity/TE_5767171-1_2x19_P0.635mm_Vertical","Connector_TE-Connectivity/TE_826576-2_1x02_P3.96mm_Vertical","Connector_TE-Connectivity/TE_826576-3_1x03_P3.96mm_Vertical","Connector_TE-Connectivity/TE_826576-5_1x05_P3.96mm_Vertical","Connector_TE-Connectivity/TE_826576-6_1x06_P3.96mm_Vertical","Connector_TE-Connectivity/TE_826576-7_1x07_P3.96mm_Vertical","Connector_TE-Connectivity/TE_826576-8_1x08_P3.96mm_Vertical","Connector_TE-Connectivity/TE_826576-9_1x09_P3.96mm_Vertical","Connector_TE-Connectivity/TE_AMPSEAL_1-776087-x_3Rows_23_P0.4mm_Horizontal","Connector_TE-Connectivity/TE_MATE-N-LOK_1-770182-x_3x03_P4.14mm_Vertical","Connector_TE-Connectivity/TE_MATE-N-LOK_1-770186-x_3x04_P4.14mm_Vertical","Connector_TE-Connectivity/TE_MATE-N-LOK_1-770190-x_3x05_P4.14mm_Vertical","Connector_TE-Connectivity/TE_MATE-N-LOK_1-770621-x_2x06_P4.14mm_Vertical","Connector_TE-Connectivity/TE_MATE-N-LOK_1-770858-x_2x05_P4.14mm_Vertical","Connector_TE-Connectivity/TE_MATE-N-LOK_1-770866-x_1x02_P4.14mm_Vertical","Connector_TE-Connectivity/TE_MATE-N-LOK_1-770870-x_1x03_P4.14mm_Vertical","Connector_TE-Connectivity/TE_MATE-N-LOK_1-770874-x_2x02_P4.14mm_Vertical","Connector_TE-Connectivity/TE_MATE-N-LOK_1-770875-x_2x03_P4.14mm_Vertical","Connector_TE-Connectivity/TE_MATE-N-LOK_1-770966-x_1x02_P4.14mm_Horizontal","Connector_TE-Connectivity/TE_MATE-N-LOK_1-770967-x_1x03_P4.14mm_Horizontal","Connector_TE-Connectivity/TE_MATE-N-LOK_1-770968-x_2x02_P4.14mm_Horizontal","Connector_TE-Connectivity/TE_MATE-N-LOK_1-770969-x_2x03_P4.14mm_Horizontal","Connector_TE-Connectivity/TE_MATE-N-LOK_1-770970-x_2x04_P4.14mm_Horizontal","Connector_TE-Connectivity/TE_MATE-N-LOK_1-770971-x_2x05_P4.14mm_Horizontal","Connector_TE-Connectivity/TE_MATE-N-LOK_1-770972-x_2x06_P4.14mm_Horizontal","Connector_TE-Connectivity/TE_MATE-N-LOK_1-770973-x_2x07_P4.14mm_Horizontal","Connector_TE-Connectivity/TE_MATE-N-LOK_1-770974-x_2x08_P4.14mm_Horizontal","Connector_TE-Connectivity/TE_MATE-N-LOK_1-794067-x_2x07_P4.14mm_Vertical","Connector_TE-Connectivity/TE_MATE-N-LOK_1-794068-x_2x08_P4.14mm_Vertical","Connector_TE-Connectivity/TE_MATE-N-LOK_1-794069-x_2x09_P4.14mm_Vertical","Connector_TE-Connectivity/TE_MATE-N-LOK_1-794070-x_2x10_P4.14mm_Vertical","Connector_TE-Connectivity/TE_MATE-N-LOK_1-794071-x_2x11_P4.14mm_Vertical","Connector_TE-Connectivity/TE_MATE-N-LOK_1-794072-x_2x12_P4.14mm_Vertical","Connector_TE-Connectivity/TE_MATE-N-LOK_1-794073-x_2x04_P4.14mm_Vertical","Connector_TE-Connectivity/TE_MATE-N-LOK_1-794105-x_2x09_P4.14mm_Horizontal","Connector_TE-Connectivity/TE_MATE-N-LOK_1-794106-x_2x10_P4.14mm_Horizontal","Connector_TE-Connectivity/TE_MATE-N-LOK_1-794107-x_2x11_P4.14mm_Horizontal","Connector_TE-Connectivity/TE_MATE-N-LOK_1-794108-x_2x12_P4.14mm_Horizontal","Connector_TE-Connectivity/TE_MATE-N-LOK_1-794374-x_1x01_P4.14mm_Horizontal","Connector_TE-Connectivity/TE_MATE-N-LOK_350211-1_1x04_P5.08mm_Vertical","Connector_TE-Connectivity/TE_Micro-MaTch_1-215079-0_2x05_P1.27mm_Vertical","Connector_TE-Connectivity/TE_Micro-MaTch_1-215079-2_2x06_P1.27mm_Vertical","Connector_TE-Connectivity/TE_Micro-MaTch_1-215079-4_2x07_P1.27mm_Vertical","Connector_TE-Connectivity/TE_Micro-MaTch_1-215079-6_2x08_P1.27mm_Vertical","Connector_TE-Connectivity/TE_Micro-MaTch_1-215079-8_2x09_P1.27mm_Vertical","Connector_TE-Connectivity/TE_Micro-MaTch_2-215079-0_2x10_P1.27mm_Vertical","Connector_TE-Connectivity/TE_Micro-MaTch_215079-4_2x02_P1.27mm_Vertical","Connector_TE-Connectivity/TE_Micro-MaTch_215079-6_2x03_P1.27mm_Vertical","Connector_TE-Connectivity/TE_Micro-MaTch_215079-8_2x04_P1.27mm_Vertical","Connector_TE-Connectivity/TE_T4041037031-000_M8_03_Socket_Straight","Connector_TE-Connectivity/TE_T4041037041-000_M8_04_Socket_Straight","Connector_USB/USB3_A_Molex_48393-001","Connector_USB/USB3_A_Molex_48406-0001_Horizontal_Stacked","Connector_USB/USB3_A_Plug_Wuerth_692112030100_Horizontal","Connector_USB/USB3_A_Receptacle_Wuerth_692122030100","Connector_USB/USB3_Micro-B_Connfly_DS1104-01","Connector_USB/USB_A_CNCTech_1001-011-01101_Horizontal","Connector_USB/USB_A_CUI_UJ2-ADH-TH_Horizontal_Stacked","Connector_USB/USB_A_Connfly_DS1095","Connector_USB/USB_A_Connfly_DS1098_Horizontal","Connector_USB/USB_A_Kycon_KUSBX-AS1N-B_Horizontal","Connector_USB/USB_A_Molex_105057_Vertical","Connector_USB/USB_A_Molex_48037-2200_Horizontal","Connector_USB/USB_A_Molex_67643_Horizontal","Connector_USB/USB_A_Receptacle_GCT_USB1046","Connector_USB/USB_A_Receptacle_XKB_U231-091N-4BLRA00-S","Connector_USB/USB_A_Stewart_SS-52100-001_Horizontal","Connector_USB/USB_A_TE_292303-7_Horizontal","Connector_USB/USB_A_Wuerth_614004134726_Horizontal","Connector_USB/USB_A_Wuerth_61400826021_Horizontal_Stacked","Connector_USB/USB_B_Amphenol_MUSB-D511_Vertical_Rugged","Connector_USB/USB_B_Lumberg_2411_02_Horizontal","Connector_USB/USB_B_OST_USB-B1HSxx_Horizontal","Connector_USB/USB_B_TE_5787834_Vertical","Connector_USB/USB_C_Plug_JAE_DX07P024AJ1","Connector_USB/USB_C_Plug_Molex_105444","Connector_USB/USB_C_Plug_ShenzhenJingTuoJin_918-118A2021Y40002_Vertical","Connector_USB/USB_C_Receptacle_Amphenol_12401548E4-2A","Connector_USB/USB_C_Receptacle_Amphenol_12401548E4-2A_CircularHoles","Connector_USB/USB_C_Receptacle_Amphenol_12401610E4-2A","Connector_USB/USB_C_Receptacle_Amphenol_12401610E4-2A_CircularHoles","Connector_USB/USB_C_Receptacle_Amphenol_12401948E412A","Connector_USB/USB_C_Receptacle_Amphenol_124019772112A","Connector_USB/USB_C_Receptacle_CNCTech_C-ARA1-AK51X","Connector_USB/USB_C_Receptacle_G-Switch_GT-USB-7010ASV","Connector_USB/USB_C_Receptacle_G-Switch_GT-USB-7025","Connector_USB/USB_C_Receptacle_G-Switch_GT-USB-7051x","Connector_USB/USB_C_Receptacle_GCT_USB4085","Connector_USB/USB_C_Receptacle_GCT_USB4105-xx-A_16P_TopMnt_Horizontal","Connector_USB/USB_C_Receptacle_GCT_USB4110","Connector_USB/USB_C_Receptacle_GCT_USB4115-03-C","Connector_USB/USB_C_Receptacle_GCT_USB4125-xx-x-0190_6P_TopMnt_Horizontal","Connector_USB/USB_C_Receptacle_GCT_USB4125-xx-x_6P_TopMnt_Horizontal","Connector_USB/USB_C_Receptacle_GCT_USB4135-GF-A_6P_TopMnt_Horizontal","Connector_USB/USB_C_Receptacle_HCTL_HC-TYPE-C-16P-01A","Connector_USB/USB_C_Receptacle_HRO_TYPE-C-31-M-12","Connector_USB/USB_C_Receptacle_HRO_TYPE-C-31-M-17","Connector_USB/USB_C_Receptacle_JAE_DX07S016JA1R1500","Connector_USB/USB_C_Receptacle_JAE_DX07S024WJ1R350","Connector_USB/USB_C_Receptacle_JAE_DX07S024WJ3R400","Connector_USB/USB_C_Receptacle_Molex_105450-0101","Connector_USB/USB_C_Receptacle_Palconn_UTC16-G","Connector_USB/USB_C_Receptacle_XKB_U262-16XN-4BVC11","Connector_USB/USB_Micro-AB_Molex_47590-0001","Connector_USB/USB_Micro-B_Amphenol_10103594-0001LF_Horizontal","Connector_USB/USB_Micro-B_Amphenol_10104110_Horizontal","Connector_USB/USB_Micro-B_Amphenol_10118193-0001LF_Horizontal","Connector_USB/USB_Micro-B_Amphenol_10118193-0002LF_Horizontal","Connector_USB/USB_Micro-B_Amphenol_10118194-0001LF_Horizontal","Connector_USB/USB_Micro-B_Amphenol_10118194_Horizontal","Connector_USB/USB_Micro-B_GCT_USB3076-30-A","Connector_USB/USB_Micro-B_Molex-105017-0001","Connector_USB/USB_Micro-B_Molex-105133-0001","Connector_USB/USB_Micro-B_Molex-105133-0031","Connector_USB/USB_Micro-B_Molex_47346-0001","Connector_USB/USB_Micro-B_Technik_TWP-4002D-H3","Connector_USB/USB_Micro-B_Wuerth_614105150721_Vertical","Connector_USB/USB_Micro-B_Wuerth_614105150721_Vertical_CircularHoles","Connector_USB/USB_Micro-B_Wuerth_629105150521","Connector_USB/USB_Micro-B_Wuerth_629105150521_CircularHoles","Connector_USB/USB_Micro-B_XKB_U254-051T-4BH83-F1S","Connector_USB/USB_Mini-B_AdamTech_MUSB-B5-S-VT-TSMT-1_SMD_Vertical","Connector_USB/USB_Mini-B_Lumberg_2486_01_Horizontal","Connector_USB/USB_Mini-B_Tensility_54-00023_Vertical","Connector_USB/USB_Mini-B_Tensility_54-00023_Vertical_CircularHoles","Connector_USB/USB_Mini-B_Wuerth_65100516121_Horizontal","Connector_Video/DVI-D_Molex_74320-4004_Horizontal","Connector_Video/DVI-I_Molex_74320-1004_Horizontal","Connector_Video/HDMI_A_Amphenol_10029449-x01xLF_Horizontal","Connector_Video/HDMI_A_Contact_Technology_19APL2_Horizontal","Connector_Video/HDMI_A_Kycon_KDMIX-SL1-NS-WS-B15_VerticalRightAngle","Connector_Video/HDMI_A_Molex_208658-1001_Horizontal","Connector_Video/HDMI_Micro-D_Molex_46765-0xxx","Connector_Video/HDMI_Micro-D_Molex_46765-1xxx","Connector_Video/HDMI_Micro-D_Molex_46765-2xxx","Connector_Wago/Wago_734-132_1x02_P3.50mm_Vertical","Connector_Wago/Wago_734-133_1x03_P3.50mm_Vertical","Connector_Wago/Wago_734-134_1x04_P3.50mm_Vertical","Connector_Wago/Wago_734-135_1x05_P3.50mm_Vertical","Connector_Wago/Wago_734-136_1x06_P3.50mm_Vertical","Connector_Wago/Wago_734-137_1x07_P3.50mm_Vertical","Connector_Wago/Wago_734-138_1x08_P3.50mm_Vertical","Connector_Wago/Wago_734-139_1x09_P3.50mm_Vertical","Connector_Wago/Wago_734-140_1x10_P3.50mm_Vertical","Connector_Wago/Wago_734-141_1x11_P3.50mm_Vertical","Connector_Wago/Wago_734-142_1x12_P3.50mm_Vertical","Connector_Wago/Wago_734-143_1x13_P3.50mm_Vertical","Connector_Wago/Wago_734-144_1x14_P3.50mm_Vertical","Connector_Wago/Wago_734-146_1x16_P3.50mm_Vertical","Connector_Wago/Wago_734-148_1x18_P3.50mm_Vertical","Connector_Wago/Wago_734-150_1x20_P3.50mm_Vertical","Connector_Wago/Wago_734-154_1x24_P3.50mm_Vertical","Connector_Wago/Wago_734-162_1x02_P3.50mm_Horizontal","Connector_Wago/Wago_734-163_1x03_P3.50mm_Horizontal","Connector_Wago/Wago_734-164_1x04_P3.50mm_Horizontal","Connector_Wago/Wago_734-165_1x05_P3.50mm_Horizontal","Connector_Wago/Wago_734-166_1x06_P3.50mm_Horizontal","Connector_Wago/Wago_734-167_1x07_P3.50mm_Horizontal","Connector_Wago/Wago_734-168_1x08_P3.50mm_Horizontal","Connector_Wago/Wago_734-169_1x09_P3.50mm_Horizontal","Connector_Wago/Wago_734-170_1x10_P3.50mm_Horizontal","Connector_Wago/Wago_734-171_1x11_P3.50mm_Horizontal","Connector_Wago/Wago_734-172_1x12_P3.50mm_Horizontal","Connector_Wago/Wago_734-173_1x13_P3.50mm_Horizontal","Connector_Wago/Wago_734-174_1x14_P3.50mm_Horizontal","Connector_Wago/Wago_734-176_1x16_P3.50mm_Horizontal","Connector_Wago/Wago_734-178_1x18_P3.50mm_Horizontal","Connector_Wago/Wago_734-180_1x20_P3.50mm_Horizontal","Connector_Wago/Wago_734-184_1x24_P3.50mm_Horizontal","Connector_Wire/SolderWire-0.127sqmm_1x01_D0.48mm_OD1mm","Connector_Wire/SolderWire-0.127sqmm_1x01_D0.48mm_OD1mm_Relief","Connector_Wire/SolderWire-0.127sqmm_1x01_D0.48mm_OD1mm_Relief2x","Connector_Wire/SolderWire-0.127sqmm_1x02_P3.7mm_D0.48mm_OD1mm","Connector_Wire/SolderWire-0.127sqmm_1x02_P3.7mm_D0.48mm_OD1mm_Relief","Connector_Wire/SolderWire-0.127sqmm_1x02_P3.7mm_D0.48mm_OD1mm_Relief2x","Connector_Wire/SolderWire-0.127sqmm_1x03_P3.7mm_D0.48mm_OD1mm","Connector_Wire/SolderWire-0.127sqmm_1x03_P3.7mm_D0.48mm_OD1mm_Relief","Connector_Wire/SolderWire-0.127sqmm_1x03_P3.7mm_D0.48mm_OD1mm_Relief2x","Connector_Wire/SolderWire-0.127sqmm_1x04_P3.7mm_D0.48mm_OD1mm","Connector_Wire/SolderWire-0.127sqmm_1x04_P3.7mm_D0.48mm_OD1mm_Relief","Connector_Wire/SolderWire-0.127sqmm_1x04_P3.7mm_D0.48mm_OD1mm_Relief2x","Connector_Wire/SolderWire-0.127sqmm_1x05_P3.7mm_D0.48mm_OD1mm","Connector_Wire/SolderWire-0.127sqmm_1x05_P3.7mm_D0.48mm_OD1mm_Relief","Connector_Wire/SolderWire-0.127sqmm_1x05_P3.7mm_D0.48mm_OD1mm_Relief2x","Connector_Wire/SolderWire-0.127sqmm_1x06_P3.7mm_D0.48mm_OD1mm","Connector_Wire/SolderWire-0.127sqmm_1x06_P3.7mm_D0.48mm_OD1mm_Relief","Connector_Wire/SolderWire-0.127sqmm_1x06_P3.7mm_D0.48mm_OD1mm_Relief2x","Connector_Wire/SolderWire-0.15sqmm_1x01_D0.5mm_OD1.5mm","Connector_Wire/SolderWire-0.15sqmm_1x01_D0.5mm_OD1.5mm_Relief","Connector_Wire/SolderWire-0.15sqmm_1x01_D0.5mm_OD1.5mm_Relief2x","Connector_Wire/SolderWire-0.15sqmm_1x02_P4mm_D0.5mm_OD1.5mm","Connector_Wire/SolderWire-0.15sqmm_1x02_P4mm_D0.5mm_OD1.5mm_Relief","Connector_Wire/SolderWire-0.15sqmm_1x02_P4mm_D0.5mm_OD1.5mm_Relief2x","Connector_Wire/SolderWire-0.15sqmm_1x03_P4mm_D0.5mm_OD1.5mm","Connector_Wire/SolderWire-0.15sqmm_1x03_P4mm_D0.5mm_OD1.5mm_Relief","Connector_Wire/SolderWire-0.15sqmm_1x03_P4mm_D0.5mm_OD1.5mm_Relief2x","Connector_Wire/SolderWire-0.15sqmm_1x04_P4mm_D0.5mm_OD1.5mm","Connector_Wire/SolderWire-0.15sqmm_1x04_P4mm_D0.5mm_OD1.5mm_Relief","Connector_Wire/SolderWire-0.15sqmm_1x04_P4mm_D0.5mm_OD1.5mm_Relief2x","Connector_Wire/SolderWire-0.15sqmm_1x05_P4mm_D0.5mm_OD1.5mm","Connector_Wire/SolderWire-0.15sqmm_1x05_P4mm_D0.5mm_OD1.5mm_Relief","Connector_Wire/SolderWire-0.15sqmm_1x05_P4mm_D0.5mm_OD1.5mm_Relief2x","Connector_Wire/SolderWire-0.15sqmm_1x06_P4mm_D0.5mm_OD1.5mm","Connector_Wire/SolderWire-0.15sqmm_1x06_P4mm_D0.5mm_OD1.5mm_Relief","Connector_Wire/SolderWire-0.15sqmm_1x06_P4mm_D0.5mm_OD1.5mm_Relief2x","Connector_Wire/SolderWire-0.1sqmm_1x01_D0.4mm_OD1mm","Connector_Wire/SolderWire-0.1sqmm_1x01_D0.4mm_OD1mm_Relief","Connector_Wire/SolderWire-0.1sqmm_1x01_D0.4mm_OD1mm_Relief2x","Connector_Wire/SolderWire-0.1sqmm_1x02_P3.6mm_D0.4mm_OD1mm","Connector_Wire/SolderWire-0.1sqmm_1x02_P3.6mm_D0.4mm_OD1mm_Relief","Connector_Wire/SolderWire-0.1sqmm_1x02_P3.6mm_D0.4mm_OD1mm_Relief2x","Connector_Wire/SolderWire-0.1sqmm_1x03_P3.6mm_D0.4mm_OD1mm","Connector_Wire/SolderWire-0.1sqmm_1x03_P3.6mm_D0.4mm_OD1mm_Relief","Connector_Wire/SolderWire-0.1sqmm_1x03_P3.6mm_D0.4mm_OD1mm_Relief2x","Connector_Wire/SolderWire-0.1sqmm_1x04_P3.6mm_D0.4mm_OD1mm","Connector_Wire/SolderWire-0.1sqmm_1x04_P3.6mm_D0.4mm_OD1mm_Relief","Connector_Wire/SolderWire-0.1sqmm_1x04_P3.6mm_D0.4mm_OD1mm_Relief2x","Connector_Wire/SolderWire-0.1sqmm_1x05_P3.6mm_D0.4mm_OD1mm","Connector_Wire/SolderWire-0.1sqmm_1x05_P3.6mm_D0.4mm_OD1mm_Relief","Connector_Wire/SolderWire-0.1sqmm_1x05_P3.6mm_D0.4mm_OD1mm_Relief2x","Connector_Wire/SolderWire-0.1sqmm_1x06_P3.6mm_D0.4mm_OD1mm","Connector_Wire/SolderWire-0.1sqmm_1x06_P3.6mm_D0.4mm_OD1mm_Relief","Connector_Wire/SolderWire-0.1sqmm_1x06_P3.6mm_D0.4mm_OD1mm_Relief2x","Connector_Wire/SolderWire-0.25sqmm_1x01_D0.65mm_OD1.7mm","Connector_Wire/SolderWire-0.25sqmm_1x01_D0.65mm_OD1.7mm_Relief","Connector_Wire/SolderWire-0.25sqmm_1x01_D0.65mm_OD1.7mm_Relief2x","Connector_Wire/SolderWire-0.25sqmm_1x01_D0.65mm_OD2mm","Connector_Wire/SolderWire-0.25sqmm_1x01_D0.65mm_OD2mm_Relief","Connector_Wire/SolderWire-0.25sqmm_1x01_D0.65mm_OD2mm_Relief2x","Connector_Wire/SolderWire-0.25sqmm_1x02_P4.2mm_D0.65mm_OD1.7mm","Connector_Wire/SolderWire-0.25sqmm_1x02_P4.2mm_D0.65mm_OD1.7mm_Relief","Connector_Wire/SolderWire-0.25sqmm_1x02_P4.2mm_D0.65mm_OD1.7mm_Relief2x","Connector_Wire/SolderWire-0.25sqmm_1x02_P4.5mm_D0.65mm_OD2mm","Connector_Wire/SolderWire-0.25sqmm_1x02_P4.5mm_D0.65mm_OD2mm_Relief","Connector_Wire/SolderWire-0.25sqmm_1x02_P4.5mm_D0.65mm_OD2mm_Relief2x","Connector_Wire/SolderWire-0.25sqmm_1x03_P4.2mm_D0.65mm_OD1.7mm","Connector_Wire/SolderWire-0.25sqmm_1x03_P4.2mm_D0.65mm_OD1.7mm_Relief","Connector_Wire/SolderWire-0.25sqmm_1x03_P4.2mm_D0.65mm_OD1.7mm_Relief2x","Connector_Wire/SolderWire-0.25sqmm_1x03_P4.5mm_D0.65mm_OD2mm","Connector_Wire/SolderWire-0.25sqmm_1x03_P4.5mm_D0.65mm_OD2mm_Relief","Connector_Wire/SolderWire-0.25sqmm_1x03_P4.5mm_D0.65mm_OD2mm_Relief2x","Connector_Wire/SolderWire-0.25sqmm_1x04_P4.2mm_D0.65mm_OD1.7mm","Connector_Wire/SolderWire-0.25sqmm_1x04_P4.2mm_D0.65mm_OD1.7mm_Relief","Connector_Wire/SolderWire-0.25sqmm_1x04_P4.2mm_D0.65mm_OD1.7mm_Relief2x","Connector_Wire/SolderWire-0.25sqmm_1x04_P4.5mm_D0.65mm_OD2mm","Connector_Wire/SolderWire-0.25sqmm_1x04_P4.5mm_D0.65mm_OD2mm_Relief","Connector_Wire/SolderWire-0.25sqmm_1x04_P4.5mm_D0.65mm_OD2mm_Relief2x","Connector_Wire/SolderWire-0.25sqmm_1x05_P4.2mm_D0.65mm_OD1.7mm","Connector_Wire/SolderWire-0.25sqmm_1x05_P4.2mm_D0.65mm_OD1.7mm_Relief","Connector_Wire/SolderWire-0.25sqmm_1x05_P4.2mm_D0.65mm_OD1.7mm_Relief2x","Connector_Wire/SolderWire-0.25sqmm_1x05_P4.5mm_D0.65mm_OD2mm","Connector_Wire/SolderWire-0.25sqmm_1x05_P4.5mm_D0.65mm_OD2mm_Relief","Connector_Wire/SolderWire-0.25sqmm_1x05_P4.5mm_D0.65mm_OD2mm_Relief2x","Connector_Wire/SolderWire-0.25sqmm_1x06_P4.2mm_D0.65mm_OD1.7mm","Connector_Wire/SolderWire-0.25sqmm_1x06_P4.2mm_D0.65mm_OD1.7mm_Relief","Connector_Wire/SolderWire-0.25sqmm_1x06_P4.2mm_D0.65mm_OD1.7mm_Relief2x","Connector_Wire/SolderWire-0.25sqmm_1x06_P4.5mm_D0.65mm_OD2mm","Connector_Wire/SolderWire-0.25sqmm_1x06_P4.5mm_D0.65mm_OD2mm_Relief","Connector_Wire/SolderWire-0.25sqmm_1x06_P4.5mm_D0.65mm_OD2mm_Relief2x","Connector_Wire/SolderWire-0.5sqmm_1x01_D0.9mm_OD2.1mm","Connector_Wire/SolderWire-0.5sqmm_1x01_D0.9mm_OD2.1mm_Relief","Connector_Wire/SolderWire-0.5sqmm_1x01_D0.9mm_OD2.1mm_Relief2x","Connector_Wire/SolderWire-0.5sqmm_1x01_D0.9mm_OD2.3mm","Connector_Wire/SolderWire-0.5sqmm_1x01_D0.9mm_OD2.3mm_Relief","Connector_Wire/SolderWire-0.5sqmm_1x01_D0.9mm_OD2.3mm_Relief2x","Connector_Wire/SolderWire-0.5sqmm_1x02_P4.6mm_D0.9mm_OD2.1mm","Connector_Wire/SolderWire-0.5sqmm_1x02_P4.6mm_D0.9mm_OD2.1mm_Relief","Connector_Wire/SolderWire-0.5sqmm_1x02_P4.6mm_D0.9mm_OD2.1mm_Relief2x","Connector_Wire/SolderWire-0.5sqmm_1x02_P4.8mm_D0.9mm_OD2.3mm","Connector_Wire/SolderWire-0.5sqmm_1x02_P4.8mm_D0.9mm_OD2.3mm_Relief","Connector_Wire/SolderWire-0.5sqmm_1x02_P4.8mm_D0.9mm_OD2.3mm_Relief2x","Connector_Wire/SolderWire-0.5sqmm_1x03_P4.6mm_D0.9mm_OD2.1mm","Connector_Wire/SolderWire-0.5sqmm_1x03_P4.6mm_D0.9mm_OD2.1mm_Relief","Connector_Wire/SolderWire-0.5sqmm_1x03_P4.6mm_D0.9mm_OD2.1mm_Relief2x","Connector_Wire/SolderWire-0.5sqmm_1x03_P4.8mm_D0.9mm_OD2.3mm","Connector_Wire/SolderWire-0.5sqmm_1x03_P4.8mm_D0.9mm_OD2.3mm_Relief","Connector_Wire/SolderWire-0.5sqmm_1x03_P4.8mm_D0.9mm_OD2.3mm_Relief2x","Connector_Wire/SolderWire-0.5sqmm_1x04_P4.6mm_D0.9mm_OD2.1mm","Connector_Wire/SolderWire-0.5sqmm_1x04_P4.6mm_D0.9mm_OD2.1mm_Relief","Connector_Wire/SolderWire-0.5sqmm_1x04_P4.6mm_D0.9mm_OD2.1mm_Relief2x","Connector_Wire/SolderWire-0.5sqmm_1x04_P4.8mm_D0.9mm_OD2.3mm","Connector_Wire/SolderWire-0.5sqmm_1x04_P4.8mm_D0.9mm_OD2.3mm_Relief","Connector_Wire/SolderWire-0.5sqmm_1x04_P4.8mm_D0.9mm_OD2.3mm_Relief2x","Connector_Wire/SolderWire-0.5sqmm_1x05_P4.6mm_D0.9mm_OD2.1mm","Connector_Wire/SolderWire-0.5sqmm_1x05_P4.6mm_D0.9mm_OD2.1mm_Relief","Connector_Wire/SolderWire-0.5sqmm_1x05_P4.6mm_D0.9mm_OD2.1mm_Relief2x","Connector_Wire/SolderWire-0.5sqmm_1x05_P4.8mm_D0.9mm_OD2.3mm","Connector_Wire/SolderWire-0.5sqmm_1x05_P4.8mm_D0.9mm_OD2.3mm_Relief","Connector_Wire/SolderWire-0.5sqmm_1x05_P4.8mm_D0.9mm_OD2.3mm_Relief2x","Connector_Wire/SolderWire-0.5sqmm_1x06_P4.6mm_D0.9mm_OD2.1mm","Connector_Wire/SolderWire-0.5sqmm_1x06_P4.6mm_D0.9mm_OD2.1mm_Relief","Connector_Wire/SolderWire-0.5sqmm_1x06_P4.6mm_D0.9mm_OD2.1mm_Relief2x","Connector_Wire/SolderWire-0.5sqmm_1x06_P4.8mm_D0.9mm_OD2.3mm","Connector_Wire/SolderWire-0.5sqmm_1x06_P4.8mm_D0.9mm_OD2.3mm_Relief","Connector_Wire/SolderWire-0.5sqmm_1x06_P4.8mm_D0.9mm_OD2.3mm_Relief2x","Connector_Wire/SolderWire-0.75sqmm_1x01_D1.25mm_OD2.3mm","Connector_Wire/SolderWire-0.75sqmm_1x01_D1.25mm_OD2.3mm_Relief","Connector_Wire/SolderWire-0.75sqmm_1x01_D1.25mm_OD2.3mm_Relief2x","Connector_Wire/SolderWire-0.75sqmm_1x01_D1.25mm_OD3.5mm","Connector_Wire/SolderWire-0.75sqmm_1x01_D1.25mm_OD3.5mm_Relief","Connector_Wire/SolderWire-0.75sqmm_1x01_D1.25mm_OD3.5mm_Relief2x","Connector_Wire/SolderWire-0.75sqmm_1x02_P4.8mm_D1.25mm_OD2.3mm","Connector_Wire/SolderWire-0.75sqmm_1x02_P4.8mm_D1.25mm_OD2.3mm_Relief","Connector_Wire/SolderWire-0.75sqmm_1x02_P4.8mm_D1.25mm_OD2.3mm_Relief2x","Connector_Wire/SolderWire-0.75sqmm_1x02_P7mm_D1.25mm_OD3.5mm","Connector_Wire/SolderWire-0.75sqmm_1x02_P7mm_D1.25mm_OD3.5mm_Relief","Connector_Wire/SolderWire-0.75sqmm_1x02_P7mm_D1.25mm_OD3.5mm_Relief2x","Connector_Wire/SolderWire-0.75sqmm_1x03_P4.8mm_D1.25mm_OD2.3mm","Connector_Wire/SolderWire-0.75sqmm_1x03_P4.8mm_D1.25mm_OD2.3mm_Relief","Connector_Wire/SolderWire-0.75sqmm_1x03_P4.8mm_D1.25mm_OD2.3mm_Relief2x","Connector_Wire/SolderWire-0.75sqmm_1x03_P7mm_D1.25mm_OD3.5mm","Connector_Wire/SolderWire-0.75sqmm_1x03_P7mm_D1.25mm_OD3.5mm_Relief","Connector_Wire/SolderWire-0.75sqmm_1x03_P7mm_D1.25mm_OD3.5mm_Relief2x","Connector_Wire/SolderWire-0.75sqmm_1x04_P4.8mm_D1.25mm_OD2.3mm","Connector_Wire/SolderWire-0.75sqmm_1x04_P4.8mm_D1.25mm_OD2.3mm_Relief","Connector_Wire/SolderWire-0.75sqmm_1x04_P4.8mm_D1.25mm_OD2.3mm_Relief2x","Connector_Wire/SolderWire-0.75sqmm_1x04_P7mm_D1.25mm_OD3.5mm","Connector_Wire/SolderWire-0.75sqmm_1x04_P7mm_D1.25mm_OD3.5mm_Relief","Connector_Wire/SolderWire-0.75sqmm_1x04_P7mm_D1.25mm_OD3.5mm_Relief2x","Connector_Wire/SolderWire-0.75sqmm_1x05_P4.8mm_D1.25mm_OD2.3mm","Connector_Wire/SolderWire-0.75sqmm_1x05_P4.8mm_D1.25mm_OD2.3mm_Relief","Connector_Wire/SolderWire-0.75sqmm_1x05_P4.8mm_D1.25mm_OD2.3mm_Relief2x","Connector_Wire/SolderWire-0.75sqmm_1x05_P7mm_D1.25mm_OD3.5mm","Connector_Wire/SolderWire-0.75sqmm_1x05_P7mm_D1.25mm_OD3.5mm_Relief","Connector_Wire/SolderWire-0.75sqmm_1x05_P7mm_D1.25mm_OD3.5mm_Relief2x","Connector_Wire/SolderWire-0.75sqmm_1x06_P4.8mm_D1.25mm_OD2.3mm","Connector_Wire/SolderWire-0.75sqmm_1x06_P4.8mm_D1.25mm_OD2.3mm_Relief","Connector_Wire/SolderWire-0.75sqmm_1x06_P4.8mm_D1.25mm_OD2.3mm_Relief2x","Connector_Wire/SolderWire-0.75sqmm_1x06_P7mm_D1.25mm_OD3.5mm","Connector_Wire/SolderWire-0.75sqmm_1x06_P7mm_D1.25mm_OD3.5mm_Relief","Connector_Wire/SolderWire-0.75sqmm_1x06_P7mm_D1.25mm_OD3.5mm_Relief2x","Connector_Wire/SolderWire-1.5sqmm_1x01_D1.7mm_OD3.9mm","Connector_Wire/SolderWire-1.5sqmm_1x01_D1.7mm_OD3.9mm_Relief","Connector_Wire/SolderWire-1.5sqmm_1x01_D1.7mm_OD3.9mm_Relief2x","Connector_Wire/SolderWire-1.5sqmm_1x01_D1.7mm_OD3mm","Connector_Wire/SolderWire-1.5sqmm_1x01_D1.7mm_OD3mm_Relief","Connector_Wire/SolderWire-1.5sqmm_1x01_D1.7mm_OD3mm_Relief2x","Connector_Wire/SolderWire-1.5sqmm_1x02_P6mm_D1.7mm_OD3mm","Connector_Wire/SolderWire-1.5sqmm_1x02_P6mm_D1.7mm_OD3mm_Relief","Connector_Wire/SolderWire-1.5sqmm_1x02_P6mm_D1.7mm_OD3mm_Relief2x","Connector_Wire/SolderWire-1.5sqmm_1x02_P7.8mm_D1.7mm_OD3.9mm","Connector_Wire/SolderWire-1.5sqmm_1x02_P7.8mm_D1.7mm_OD3.9mm_Relief","Connector_Wire/SolderWire-1.5sqmm_1x02_P7.8mm_D1.7mm_OD3.9mm_Relief2x","Connector_Wire/SolderWire-1.5sqmm_1x03_P6mm_D1.7mm_OD3mm","Connector_Wire/SolderWire-1.5sqmm_1x03_P6mm_D1.7mm_OD3mm_Relief","Connector_Wire/SolderWire-1.5sqmm_1x03_P6mm_D1.7mm_OD3mm_Relief2x","Connector_Wire/SolderWire-1.5sqmm_1x03_P7.8mm_D1.7mm_OD3.9mm","Connector_Wire/SolderWire-1.5sqmm_1x03_P7.8mm_D1.7mm_OD3.9mm_Relief","Connector_Wire/SolderWire-1.5sqmm_1x03_P7.8mm_D1.7mm_OD3.9mm_Relief2x","Connector_Wire/SolderWire-1.5sqmm_1x04_P6mm_D1.7mm_OD3mm","Connector_Wire/SolderWire-1.5sqmm_1x04_P6mm_D1.7mm_OD3mm_Relief","Connector_Wire/SolderWire-1.5sqmm_1x04_P6mm_D1.7mm_OD3mm_Relief2x","Connector_Wire/SolderWire-1.5sqmm_1x04_P7.8mm_D1.7mm_OD3.9mm","Connector_Wire/SolderWire-1.5sqmm_1x04_P7.8mm_D1.7mm_OD3.9mm_Relief","Connector_Wire/SolderWire-1.5sqmm_1x04_P7.8mm_D1.7mm_OD3.9mm_Relief2x","Connector_Wire/SolderWire-1.5sqmm_1x05_P6mm_D1.7mm_OD3mm","Connector_Wire/SolderWire-1.5sqmm_1x05_P6mm_D1.7mm_OD3mm_Relief","Connector_Wire/SolderWire-1.5sqmm_1x05_P6mm_D1.7mm_OD3mm_Relief2x","Connector_Wire/SolderWire-1.5sqmm_1x05_P7.8mm_D1.7mm_OD3.9mm","Connector_Wire/SolderWire-1.5sqmm_1x05_P7.8mm_D1.7mm_OD3.9mm_Relief","Connector_Wire/SolderWire-1.5sqmm_1x05_P7.8mm_D1.7mm_OD3.9mm_Relief2x","Connector_Wire/SolderWire-1.5sqmm_1x06_P6mm_D1.7mm_OD3mm","Connector_Wire/SolderWire-1.5sqmm_1x06_P6mm_D1.7mm_OD3mm_Relief","Connector_Wire/SolderWire-1.5sqmm_1x06_P6mm_D1.7mm_OD3mm_Relief2x","Connector_Wire/SolderWire-1.5sqmm_1x06_P7.8mm_D1.7mm_OD3.9mm","Connector_Wire/SolderWire-1.5sqmm_1x06_P7.8mm_D1.7mm_OD3.9mm_Relief","Connector_Wire/SolderWire-1.5sqmm_1x06_P7.8mm_D1.7mm_OD3.9mm_Relief2x","Connector_Wire/SolderWire-1sqmm_1x01_D1.4mm_OD2.7mm","Connector_Wire/SolderWire-1sqmm_1x01_D1.4mm_OD2.7mm_Relief","Connector_Wire/SolderWire-1sqmm_1x01_D1.4mm_OD2.7mm_Relief2x","Connector_Wire/SolderWire-1sqmm_1x01_D1.4mm_OD3.9mm","Connector_Wire/SolderWire-1sqmm_1x01_D1.4mm_OD3.9mm_Relief","Connector_Wire/SolderWire-1sqmm_1x01_D1.4mm_OD3.9mm_Relief2x","Connector_Wire/SolderWire-1sqmm_1x02_P5.4mm_D1.4mm_OD2.7mm","Connector_Wire/SolderWire-1sqmm_1x02_P5.4mm_D1.4mm_OD2.7mm_Relief","Connector_Wire/SolderWire-1sqmm_1x02_P5.4mm_D1.4mm_OD2.7mm_Relief2x","Connector_Wire/SolderWire-1sqmm_1x02_P7.8mm_D1.4mm_OD3.9mm","Connector_Wire/SolderWire-1sqmm_1x02_P7.8mm_D1.4mm_OD3.9mm_Relief","Connector_Wire/SolderWire-1sqmm_1x02_P7.8mm_D1.4mm_OD3.9mm_Relief2x","Connector_Wire/SolderWire-1sqmm_1x03_P5.4mm_D1.4mm_OD2.7mm","Connector_Wire/SolderWire-1sqmm_1x03_P5.4mm_D1.4mm_OD2.7mm_Relief","Connector_Wire/SolderWire-1sqmm_1x03_P5.4mm_D1.4mm_OD2.7mm_Relief2x","Connector_Wire/SolderWire-1sqmm_1x03_P7.8mm_D1.4mm_OD3.9mm","Connector_Wire/SolderWire-1sqmm_1x03_P7.8mm_D1.4mm_OD3.9mm_Relief","Connector_Wire/SolderWire-1sqmm_1x03_P7.8mm_D1.4mm_OD3.9mm_Relief2x","Connector_Wire/SolderWire-1sqmm_1x04_P5.4mm_D1.4mm_OD2.7mm","Connector_Wire/SolderWire-1sqmm_1x04_P5.4mm_D1.4mm_OD2.7mm_Relief","Connector_Wire/SolderWire-1sqmm_1x04_P5.4mm_D1.4mm_OD2.7mm_Relief2x","Connector_Wire/SolderWire-1sqmm_1x04_P7.8mm_D1.4mm_OD3.9mm","Connector_Wire/SolderWire-1sqmm_1x04_P7.8mm_D1.4mm_OD3.9mm_Relief","Connector_Wire/SolderWire-1sqmm_1x04_P7.8mm_D1.4mm_OD3.9mm_Relief2x","Connector_Wire/SolderWire-1sqmm_1x05_P5.4mm_D1.4mm_OD2.7mm","Connector_Wire/SolderWire-1sqmm_1x05_P5.4mm_D1.4mm_OD2.7mm_Relief","Connector_Wire/SolderWire-1sqmm_1x05_P5.4mm_D1.4mm_OD2.7mm_Relief2x","Connector_Wire/SolderWire-1sqmm_1x05_P7.8mm_D1.4mm_OD3.9mm","Connector_Wire/SolderWire-1sqmm_1x05_P7.8mm_D1.4mm_OD3.9mm_Relief","Connector_Wire/SolderWire-1sqmm_1x05_P7.8mm_D1.4mm_OD3.9mm_Relief2x","Connector_Wire/SolderWire-1sqmm_1x06_P5.4mm_D1.4mm_OD2.7mm","Connector_Wire/SolderWire-1sqmm_1x06_P5.4mm_D1.4mm_OD2.7mm_Relief","Connector_Wire/SolderWire-1sqmm_1x06_P5.4mm_D1.4mm_OD2.7mm_Relief2x","Connector_Wire/SolderWire-1sqmm_1x06_P7.8mm_D1.4mm_OD3.9mm","Connector_Wire/SolderWire-1sqmm_1x06_P7.8mm_D1.4mm_OD3.9mm_Relief","Connector_Wire/SolderWire-1sqmm_1x06_P7.8mm_D1.4mm_OD3.9mm_Relief2x","Connector_Wire/SolderWire-2.5sqmm_1x01_D2.4mm_OD3.6mm","Connector_Wire/SolderWire-2.5sqmm_1x01_D2.4mm_OD3.6mm_Relief","Connector_Wire/SolderWire-2.5sqmm_1x01_D2.4mm_OD3.6mm_Relief2x","Connector_Wire/SolderWire-2.5sqmm_1x01_D2.4mm_OD4.4mm","Connector_Wire/SolderWire-2.5sqmm_1x01_D2.4mm_OD4.4mm_Relief","Connector_Wire/SolderWire-2.5sqmm_1x01_D2.4mm_OD4.4mm_Relief2x","Connector_Wire/SolderWire-2.5sqmm_1x02_P7.2mm_D2.4mm_OD3.6mm","Connector_Wire/SolderWire-2.5sqmm_1x02_P7.2mm_D2.4mm_OD3.6mm_Relief","Connector_Wire/SolderWire-2.5sqmm_1x02_P7.2mm_D2.4mm_OD3.6mm_Relief2x","Connector_Wire/SolderWire-2.5sqmm_1x02_P8.8mm_D2.4mm_OD4.4mm","Connector_Wire/SolderWire-2.5sqmm_1x02_P8.8mm_D2.4mm_OD4.4mm_Relief","Connector_Wire/SolderWire-2.5sqmm_1x02_P8.8mm_D2.4mm_OD4.4mm_Relief2x","Connector_Wire/SolderWire-2.5sqmm_1x03_P7.2mm_D2.4mm_OD3.6mm","Connector_Wire/SolderWire-2.5sqmm_1x03_P7.2mm_D2.4mm_OD3.6mm_Relief","Connector_Wire/SolderWire-2.5sqmm_1x03_P7.2mm_D2.4mm_OD3.6mm_Relief2x","Connector_Wire/SolderWire-2.5sqmm_1x03_P8.8mm_D2.4mm_OD4.4mm","Connector_Wire/SolderWire-2.5sqmm_1x03_P8.8mm_D2.4mm_OD4.4mm_Relief","Connector_Wire/SolderWire-2.5sqmm_1x03_P8.8mm_D2.4mm_OD4.4mm_Relief2x","Connector_Wire/SolderWire-2.5sqmm_1x04_P7.2mm_D2.4mm_OD3.6mm","Connector_Wire/SolderWire-2.5sqmm_1x04_P7.2mm_D2.4mm_OD3.6mm_Relief","Connector_Wire/SolderWire-2.5sqmm_1x04_P7.2mm_D2.4mm_OD3.6mm_Relief2x","Connector_Wire/SolderWire-2.5sqmm_1x04_P8.8mm_D2.4mm_OD4.4mm","Connector_Wire/SolderWire-2.5sqmm_1x04_P8.8mm_D2.4mm_OD4.4mm_Relief","Connector_Wire/SolderWire-2.5sqmm_1x04_P8.8mm_D2.4mm_OD4.4mm_Relief2x","Connector_Wire/SolderWire-2.5sqmm_1x05_P7.2mm_D2.4mm_OD3.6mm","Connector_Wire/SolderWire-2.5sqmm_1x05_P7.2mm_D2.4mm_OD3.6mm_Relief","Connector_Wire/SolderWire-2.5sqmm_1x05_P7.2mm_D2.4mm_OD3.6mm_Relief2x","Connector_Wire/SolderWire-2.5sqmm_1x05_P8.8mm_D2.4mm_OD4.4mm","Connector_Wire/SolderWire-2.5sqmm_1x05_P8.8mm_D2.4mm_OD4.4mm_Relief","Connector_Wire/SolderWire-2.5sqmm_1x05_P8.8mm_D2.4mm_OD4.4mm_Relief2x","Connector_Wire/SolderWire-2.5sqmm_1x06_P7.2mm_D2.4mm_OD3.6mm","Connector_Wire/SolderWire-2.5sqmm_1x06_P7.2mm_D2.4mm_OD3.6mm_Relief","Connector_Wire/SolderWire-2.5sqmm_1x06_P7.2mm_D2.4mm_OD3.6mm_Relief2x","Connector_Wire/SolderWire-2.5sqmm_1x06_P8.8mm_D2.4mm_OD4.4mm","Connector_Wire/SolderWire-2.5sqmm_1x06_P8.8mm_D2.4mm_OD4.4mm_Relief","Connector_Wire/SolderWire-2.5sqmm_1x06_P8.8mm_D2.4mm_OD4.4mm_Relief2x","Connector_Wire/SolderWire-2sqmm_1x01_D2mm_OD3.9mm","Connector_Wire/SolderWire-2sqmm_1x01_D2mm_OD3.9mm_Relief","Connector_Wire/SolderWire-2sqmm_1x01_D2mm_OD3.9mm_Relief2x","Connector_Wire/SolderWire-2sqmm_1x02_P7.8mm_D2mm_OD3.9mm","Connector_Wire/SolderWire-2sqmm_1x02_P7.8mm_D2mm_OD3.9mm_Relief","Connector_Wire/SolderWire-2sqmm_1x02_P7.8mm_D2mm_OD3.9mm_Relief2x","Connector_Wire/SolderWire-2sqmm_1x03_P7.8mm_D2mm_OD3.9mm","Connector_Wire/SolderWire-2sqmm_1x03_P7.8mm_D2mm_OD3.9mm_Relief","Connector_Wire/SolderWire-2sqmm_1x03_P7.8mm_D2mm_OD3.9mm_Relief2x","Connector_Wire/SolderWire-2sqmm_1x04_P7.8mm_D2mm_OD3.9mm","Connector_Wire/SolderWire-2sqmm_1x04_P7.8mm_D2mm_OD3.9mm_Relief","Connector_Wire/SolderWire-2sqmm_1x04_P7.8mm_D2mm_OD3.9mm_Relief2x","Connector_Wire/SolderWire-2sqmm_1x05_P7.8mm_D2mm_OD3.9mm","Connector_Wire/SolderWire-2sqmm_1x05_P7.8mm_D2mm_OD3.9mm_Relief","Connector_Wire/SolderWire-2sqmm_1x05_P7.8mm_D2mm_OD3.9mm_Relief2x","Connector_Wire/SolderWire-2sqmm_1x06_P7.8mm_D2mm_OD3.9mm","Connector_Wire/SolderWire-2sqmm_1x06_P7.8mm_D2mm_OD3.9mm_Relief","Connector_Wire/SolderWire-2sqmm_1x06_P7.8mm_D2mm_OD3.9mm_Relief2x","Connector_Wire/SolderWire-4sqmm_1x01_D3mm_OD6mm","Connector_Wire/SolderWire-4sqmm_1x01_D3mm_OD6mm_Relief","Connector_Wire/SolderWire-4sqmm_1x01_D3mm_OD6mm_Relief2x","Connector_Wire/SolderWire-4sqmm_1x02_P12mm_D3mm_OD6mm","Connector_Wire/SolderWire-4sqmm_1x02_P12mm_D3mm_OD6mm_Relief","Connector_Wire/SolderWire-4sqmm_1x02_P12mm_D3mm_OD6mm_Relief2x","Connector_Wire/SolderWire-4sqmm_1x03_P12mm_D3mm_OD6mm","Connector_Wire/SolderWire-4sqmm_1x03_P12mm_D3mm_OD6mm_Relief","Connector_Wire/SolderWire-4sqmm_1x03_P12mm_D3mm_OD6mm_Relief2x","Connector_Wire/SolderWire-4sqmm_1x04_P12mm_D3mm_OD6mm","Connector_Wire/SolderWire-4sqmm_1x04_P12mm_D3mm_OD6mm_Relief","Connector_Wire/SolderWire-4sqmm_1x04_P12mm_D3mm_OD6mm_Relief2x","Connector_Wire/SolderWire-4sqmm_1x05_P12mm_D3mm_OD6mm","Connector_Wire/SolderWire-4sqmm_1x05_P12mm_D3mm_OD6mm_Relief","Connector_Wire/SolderWire-4sqmm_1x05_P12mm_D3mm_OD6mm_Relief2x","Connector_Wire/SolderWire-4sqmm_1x06_P12mm_D3mm_OD6mm","Connector_Wire/SolderWire-4sqmm_1x06_P12mm_D3mm_OD6mm_Relief","Connector_Wire/SolderWire-4sqmm_1x06_P12mm_D3mm_OD6mm_Relief2x","Connector_Wire/SolderWire-6sqmm_1x01_D3.5mm_OD7mm","Connector_Wire/SolderWire-6sqmm_1x01_D3.5mm_OD7mm_Relief","Connector_Wire/SolderWire-6sqmm_1x01_D3.5mm_OD7mm_Relief2x","Connector_Wire/SolderWire-6sqmm_1x02_P14mm_D3.5mm_OD7mm","Connector_Wire/SolderWire-6sqmm_1x02_P14mm_D3.5mm_OD7mm_Relief","Connector_Wire/SolderWire-6sqmm_1x02_P14mm_D3.5mm_OD7mm_Relief2x","Connector_Wire/SolderWire-6sqmm_1x03_P14mm_D3.5mm_OD7mm","Connector_Wire/SolderWire-6sqmm_1x03_P14mm_D3.5mm_OD7mm_Relief","Connector_Wire/SolderWire-6sqmm_1x03_P14mm_D3.5mm_OD7mm_Relief2x","Connector_Wire/SolderWire-6sqmm_1x04_P14mm_D3.5mm_OD7mm","Connector_Wire/SolderWire-6sqmm_1x04_P14mm_D3.5mm_OD7mm_Relief","Connector_Wire/SolderWire-6sqmm_1x04_P14mm_D3.5mm_OD7mm_Relief2x","Connector_Wire/SolderWire-6sqmm_1x05_P14mm_D3.5mm_OD7mm","Connector_Wire/SolderWire-6sqmm_1x05_P14mm_D3.5mm_OD7mm_Relief","Connector_Wire/SolderWire-6sqmm_1x05_P14mm_D3.5mm_OD7mm_Relief2x","Connector_Wire/SolderWire-6sqmm_1x06_P14mm_D3.5mm_OD7mm","Connector_Wire/SolderWire-6sqmm_1x06_P14mm_D3.5mm_OD7mm_Relief","Connector_Wire/SolderWire-6sqmm_1x06_P14mm_D3.5mm_OD7mm_Relief2x","Connector_Wire/SolderWirePad_1x01_SMD_1.5x3mm","Connector_Wire/SolderWirePad_1x01_SMD_1x2mm","Connector_Wire/SolderWirePad_1x01_SMD_2x4mm","Connector_Wire/SolderWirePad_1x01_SMD_3x6mm","Connector_Wire/SolderWirePad_1x01_SMD_4x8mm","Connector_Wire/SolderWirePad_1x01_SMD_5x10mm","Connector_Wuerth/Wuerth_WR-PHD_610004243021_SMD_2x02_P2.54mm_Vertical","Connector_Wuerth/Wuerth_WR-PHD_610006243021_SMD_2x03_P2.54mm_Vertical","Connector_Wuerth/Wuerth_WR-PHD_610008243021_SMD_2x04_P2.54mm_Vertical","Connector_Wuerth/Wuerth_WR-PHD_610010243021_SMD_2x05_P2.54mm_Vertical","Connector_Wuerth/Wuerth_WR-PHD_610012243021_SMD_2x06_P2.54mm_Vertical","Connector_Wuerth/Wuerth_WR-PHD_610016243021_SMD_2x08_P2.54mm_Vertical","Connector_Wuerth/Wuerth_WR-PHD_610018243021_SMD_2x09_P2.54mm_Vertical","Connector_Wuerth/Wuerth_WR-PHD_610020243021_SMD_2x10_P2.54mm_Vertical","Connector_Wuerth/Wuerth_WR-PHD_610022243021_SMD_2x11_P2.54mm_Vertical","Connector_Wuerth/Wuerth_WR-PHD_610024243021_SMD_2x12_P2.54mm_Vertical","Connector_Wuerth/Wuerth_WR-PHD_610026243021_SMD_2x13_P2.54mm_Vertical","Connector_Wuerth/Wuerth_WR-PHD_610032243021_SMD_2x16_P2.54mm_Vertical","Connector_Wuerth/Wuerth_WR-PHD_610034243021_SMD_2x17_P2.54mm_Vertical","Connector_Wuerth/Wuerth_WR-PHD_613004216921_Large_2x02_P2.54mm_Vertical","Connector_Wuerth/Wuerth_WR-PHD_61300425721_Standard_2x02_P2.54mm_Vertical","Connector_Wuerth/Wuerth_WR-PHD_613006216921_Large_2x03_P2.54mm_Vertical","Connector_Wuerth/Wuerth_WR-PHD_61300625721_Standard_2x03_P2.54mm_Vertical","Connector_Wuerth/Wuerth_WR-PHD_613008216921_Large_2x04_P2.54mm_Vertical","Connector_Wuerth/Wuerth_WR-PHD_61300825721_Standard_2x04_P2.54mm_Vertical","Connector_Wuerth/Wuerth_WR-PHD_613010216921_Large_2x05_P2.54mm_Vertical","Connector_Wuerth/Wuerth_WR-PHD_61301025721_Standard_2x05_P2.54mm_Vertical","Connector_Wuerth/Wuerth_WR-PHD_613012216921_Large_2x06_P2.54mm_Vertical","Connector_Wuerth/Wuerth_WR-PHD_61301225721_Standard_2x06_P2.54mm_Vertical","Connector_Wuerth/Wuerth_WR-PHD_613016216921_Large_2x08_P2.54mm_Vertical","Connector_Wuerth/Wuerth_WR-PHD_61301625721_Standard_2x08_P2.54mm_Vertical","Connector_Wuerth/Wuerth_WR-PHD_613018216921_Large_2x09_P2.54mm_Vertical","Connector_Wuerth/Wuerth_WR-PHD_613020216921_Large_2x10_P2.54mm_Vertical","Connector_Wuerth/Wuerth_WR-PHD_61302025721_Standard_2x10_P2.54mm_Vertical","Connector_Wuerth/Wuerth_WR-PHD_613022216921_Large_2x11_P2.54mm_Vertical","Connector_Wuerth/Wuerth_WR-PHD_613024216921_Large_2x12_P2.54mm_Vertical","Connector_Wuerth/Wuerth_WR-PHD_61302425721_Standard_2x12_P2.54mm_Vertical","Connector_Wuerth/Wuerth_WR-PHD_613026216921_Large_2x13_P2.54mm_Vertical","Connector_Wuerth/Wuerth_WR-PHD_61302625721_Standard_2x13_P2.54mm_Vertical","Connector_Wuerth/Wuerth_WR-PHD_613032216921_Large_2x16_P2.54mm_Vertical","Connector_Wuerth/Wuerth_WR-PHD_61303225721_Standard_2x16_P2.54mm_Vertical","Connector_Wuerth/Wuerth_WR-PHD_613034216921_Large_2x17_P2.54mm_Vertical","Connector_Wuerth/Wuerth_WR-PHD_61303425721_Standard_2x17_P2.54mm_Vertical","Connector_Wuerth/Wuerth_WR-WTB_64800211622_1x02_P1.50mm_Vertical","Connector_Wuerth/Wuerth_WR-WTB_64800311622_1x03_P1.50mm_Vertical","Connector_Wuerth/Wuerth_WR-WTB_64800411622_1x04_P1.50mm_Vertical","Connector_Wuerth/Wuerth_WR-WTB_64800511622_1x05_P1.50mm_Vertical","Connector_Wuerth/Wuerth_WR-WTB_64800611622_1x06_P1.50mm_Vertical","Connector_Wuerth/Wuerth_WR-WTB_64800711622_1x07_P1.50mm_Vertical","Connector_Wuerth/Wuerth_WR-WTB_64800811622_1x08_P1.50mm_Vertical","Connector_Wuerth/Wuerth_WR-WTB_64800911622_1x09_P1.50mm_Vertical","Connector_Wuerth/Wuerth_WR-WTB_64801011622_1x10_P1.50mm_Vertical","Connector_Zhaoxing/Zhaoxing_VH_ZX-VH3.96-10PLT_1x10-1MP_P3.96mm_Vertical","Connector_Zhaoxing/Zhaoxing_VH_ZX-VH3.96-2PLT_1x02-1MP_P3.96mm_Vertical","Connector_Zhaoxing/Zhaoxing_VH_ZX-VH3.96-3PLT_1x03-1MP_P3.96mm_Vertical","Connector_Zhaoxing/Zhaoxing_VH_ZX-VH3.96-4PLT_1x04-1MP_P3.96mm_Vertical","Connector_Zhaoxing/Zhaoxing_VH_ZX-VH3.96-5PLT_1x05-1MP_P3.96mm_Vertical","Connector_Zhaoxing/Zhaoxing_VH_ZX-VH3.96-6PLT_1x06-1MP_P3.96mm_Vertical","Connector_Zhaoxing/Zhaoxing_VH_ZX-VH3.96-7PLT_1x07-1MP_P3.96mm_Vertical","Connector_Zhaoxing/Zhaoxing_VH_ZX-VH3.96-8PLT_1x08-1MP_P3.96mm_Vertical","Connector_Zhaoxing/Zhaoxing_VH_ZX-VH3.96-9PLT_1x09-1MP_P3.96mm_Vertical","Converter_ACDC/Converter_ACDC_CUI_PBO-3-Sxx_THT_Vertical","Converter_ACDC/Converter_ACDC_Hahn_HS-400xx_THT","Converter_ACDC/Converter_ACDC_Hi-Link_HLK-10Mxx","Converter_ACDC/Converter_ACDC_Hi-Link_HLK-12MxxA","Converter_ACDC/Converter_ACDC_Hi-Link_HLK-20Mxx","Converter_ACDC/Converter_ACDC_Hi-Link_HLK-2Mxx","Converter_ACDC/Converter_ACDC_Hi-Link_HLK-30Mxx","Converter_ACDC/Converter_ACDC_Hi-Link_HLK-5Mxx","Converter_ACDC/Converter_ACDC_Hi-Link_HLK-PMxx","Converter_ACDC/Converter_ACDC_MeanWell_IRM-02-xx_SMD","Converter_ACDC/Converter_ACDC_MeanWell_IRM-02-xx_THT","Converter_ACDC/Converter_ACDC_MeanWell_IRM-03-xx_SMD","Converter_ACDC/Converter_ACDC_MeanWell_IRM-03-xx_THT","Converter_ACDC/Converter_ACDC_MeanWell_IRM-05-xx_THT","Converter_ACDC/Converter_ACDC_MeanWell_IRM-10-xx_THT","Converter_ACDC/Converter_ACDC_MeanWell_IRM-20-xx_THT","Converter_ACDC/Converter_ACDC_MeanWell_IRM-60-xx_THT","Converter_ACDC/Converter_ACDC_MeanWell_MFM-10-xx_THT","Converter_ACDC/Converter_ACDC_MeanWell_MFM-15-xx_THT","Converter_ACDC/Converter_ACDC_Murata_BAC05SxxDC_THT","Converter_ACDC/Converter_ACDC_RECOM_RAC01-xxSGB_THT","Converter_ACDC/Converter_ACDC_RECOM_RAC04-xxSGx_THT","Converter_ACDC/Converter_ACDC_RECOM_RAC05-xxSK_THT","Converter_ACDC/Converter_ACDC_Recom_RAC20-xxDK_THT","Converter_ACDC/Converter_ACDC_Recom_RAC20-xxSK_THT","Converter_ACDC/Converter_ACDC_TRACO_TMF_051xx_THT","Converter_ACDC/Converter_ACDC_TRACO_TMF_101xx_THT","Converter_ACDC/Converter_ACDC_TRACO_TMF_201xx_THT","Converter_ACDC/Converter_ACDC_TRACO_TMF_301xx_THT","Converter_ACDC/Converter_ACDC_TRACO_TMG_071xx_THT","Converter_ACDC/Converter_ACDC_TRACO_TMG_151xx_THT","Converter_ACDC/Converter_ACDC_TRACO_TMLM-04_THT","Converter_ACDC/Converter_ACDC_TRACO_TMLM-05_THT","Converter_ACDC/Converter_ACDC_TRACO_TMLM-10-20_THT","Converter_ACDC/Converter_ACDC_TRACO_TMPW10_1xx_THT","Converter_ACDC/Converter_ACDC_TRACO_TMPW25_1xx_THT","Converter_ACDC/Converter_ACDC_TRACO_TMPW5-1xx_THT","Converter_ACDC/Converter_ACDC_TRACO_TPP-15-1xx-D_THT","Converter_ACDC/Converter_ACDC_Vigortronix_VTX-214-010-1xx_THT","Converter_ACDC/Converter_ACDC_Vigortronix_VTX-214-010-2xx_THT","Converter_ACDC/Converter_ACDC_Vigortronix_VTX-214-015-1xx_THT","Converter_ACDC/Converter_ACDC_ZETTLER_ZPI03Sxx00WC_THT","Converter_DCDC/Converter_DCDC_Artesyn_ATA_SMD","Converter_DCDC/Converter_DCDC_Bothhand_CFUDxxxx_THT","Converter_DCDC/Converter_DCDC_Bothhand_CFUSxxxxEH_THT","Converter_DCDC/Converter_DCDC_Bothhand_CFUSxxxx_THT","Converter_DCDC/Converter_DCDC_Cincon_EC5BExx_Dual_THT","Converter_DCDC/Converter_DCDC_Cincon_EC5BExx_Single_THT","Converter_DCDC/Converter_DCDC_Cincon_EC6Cxx_Dual-Triple_THT","Converter_DCDC/Converter_DCDC_Cincon_EC6Cxx_Single_THT","Converter_DCDC/Converter_DCDC_Cyntec_MUN12AD01-SH","Converter_DCDC/Converter_DCDC_Cyntec_MUN12AD03-SH","Converter_DCDC/Converter_DCDC_Hamamatsu_C11204-1_THT","Converter_DCDC/Converter_DCDC_MeanWell_NID30_THT","Converter_DCDC/Converter_DCDC_MeanWell_NID60_THT","Converter_DCDC/Converter_DCDC_MeanWell_NSD10_THT","Converter_DCDC/Converter_DCDC_Murata_CRE1xxxxxx3C_THT","Converter_DCDC/Converter_DCDC_Murata_CRE1xxxxxxDC_THT","Converter_DCDC/Converter_DCDC_Murata_CRE1xxxxxxSC_THT","Converter_DCDC/Converter_DCDC_Murata_MEE1SxxxxSC_THT","Converter_DCDC/Converter_DCDC_Murata_MEE3SxxxxSC_THT","Converter_DCDC/Converter_DCDC_Murata_MGJ2DxxxxxxSC_THT","Converter_DCDC/Converter_DCDC_Murata_MGJ3","Converter_DCDC/Converter_DCDC_Murata_MYRxP","Converter_DCDC/Converter_DCDC_Murata_NCS1SxxxxSC_THT","Converter_DCDC/Converter_DCDC_Murata_NMAxxxxDC_THT","Converter_DCDC/Converter_DCDC_Murata_NMAxxxxSC_THT","Converter_DCDC/Converter_DCDC_Murata_NXExSxxxxMC_SMD","Converter_DCDC/Converter_DCDC_Murata_OKI-78SR_Horizontal","Converter_DCDC/Converter_DCDC_Murata_OKI-78SR_Vertical","Converter_DCDC/Converter_DCDC_RECOM_R-78B-2.0_THT","Converter_DCDC/Converter_DCDC_RECOM_R-78E-0.5_THT","Converter_DCDC/Converter_DCDC_RECOM_R-78HB-0.5L_THT","Converter_DCDC/Converter_DCDC_RECOM_R-78HB-0.5_THT","Converter_DCDC/Converter_DCDC_RECOM_R-78S-0.1_THT","Converter_DCDC/Converter_DCDC_RECOM_R5xxxDA_THT","Converter_DCDC/Converter_DCDC_RECOM_R5xxxPA_THT","Converter_DCDC/Converter_DCDC_RECOM_RCD-24_THT","Converter_DCDC/Converter_DCDC_RECOM_RPA60-xxxxSFW","Converter_DCDC/Converter_DCDC_RECOM_RPMx.x-x.0","Converter_DCDC/Converter_DCDC_Silvertel_Ag54xx","Converter_DCDC/Converter_DCDC_Silvertel_Ag5810","Converter_DCDC/Converter_DCDC_Silvertel_Ag99xxLP_THT","Converter_DCDC/Converter_DCDC_TRACO_TBA1-xxxxE_Dual_THT","Converter_DCDC/Converter_DCDC_TRACO_TBA1-xxxxE_Single_THT","Converter_DCDC/Converter_DCDC_TRACO_TBA1-xxxx_THT","Converter_DCDC/Converter_DCDC_TRACO_TBA2-xxxx_Dual_THT","Converter_DCDC/Converter_DCDC_TRACO_TBA2-xxxx_Single_THT","Converter_DCDC/Converter_DCDC_TRACO_TDN_5-xxxxWISM_SMD","Converter_DCDC/Converter_DCDC_TRACO_TDN_5-xxxxWI_THT","Converter_DCDC/Converter_DCDC_TRACO_TDU1-xxxx_THT","Converter_DCDC/Converter_DCDC_TRACO_TEA1-xxxxE_THT","Converter_DCDC/Converter_DCDC_TRACO_TEA1-xxxxHI_THT","Converter_DCDC/Converter_DCDC_TRACO_TEA1-xxxx_THT","Converter_DCDC/Converter_DCDC_TRACO_TEC2-12xxWI_24xxWI_48xxWI_THT","Converter_DCDC/Converter_DCDC_TRACO_TEC3-24xxUI_THT","Converter_DCDC/Converter_DCDC_TRACO_TEL12-xxxx_THT","Converter_DCDC/Converter_DCDC_TRACO_TEN10-110xxWIRH_THT","Converter_DCDC/Converter_DCDC_TRACO_TEN10-xxxx_Dual_THT","Converter_DCDC/Converter_DCDC_TRACO_TEN10-xxxx_Single_THT","Converter_DCDC/Converter_DCDC_TRACO_TEN10-xxxx_THT","Converter_DCDC/Converter_DCDC_TRACO_TEN20-110xxWIRH_THT","Converter_DCDC/Converter_DCDC_TRACO_TEN20-xxxx-N4_THT","Converter_DCDC/Converter_DCDC_TRACO_TEN20-xxxx_THT","Converter_DCDC/Converter_DCDC_TRACO_TEN30-xxxxUIR_THT","Converter_DCDC/Converter_DCDC_TRACO_TEN40-110xxWIRH_THT","Converter_DCDC/Converter_DCDC_TRACO_TEP150-721xUIR_THT","Converter_DCDC/Converter_DCDC_TRACO_TES1-051x_121x_241x_Single_SMD","Converter_DCDC/Converter_DCDC_TRACO_TES1-052x_122x_242x_Dual_SMD","Converter_DCDC/Converter_DCDC_TRACO_THB10-xxxx_Dual_THT","Converter_DCDC/Converter_DCDC_TRACO_THB10-xxxx_Single_THT","Converter_DCDC/Converter_DCDC_TRACO_THD_15-xxxxWIN_THT","Converter_DCDC/Converter_DCDC_TRACO_THL30-xxxxWI_THT","Converter_DCDC/Converter_DCDC_TRACO_THL40-xxxxWI_THT","Converter_DCDC/Converter_DCDC_TRACO_THN10-xxxxUIR_THT","Converter_DCDC/Converter_DCDC_TRACO_THN30-xxxx_THT","Converter_DCDC/Converter_DCDC_TRACO_THR40-72xxWI_THT","Converter_DCDC/Converter_DCDC_TRACO_TMA-05xxD_12xxD_Dual_THT","Converter_DCDC/Converter_DCDC_TRACO_TMA-05xxS_12xxS_Single_THT","Converter_DCDC/Converter_DCDC_TRACO_TMA-15xxD_24xxD_Dual_THT","Converter_DCDC/Converter_DCDC_TRACO_TMA-15xxS_24xxS_Single_THT","Converter_DCDC/Converter_DCDC_TRACO_TME_03xxS_05xxS_12xxS_Single_THT","Converter_DCDC/Converter_DCDC_TRACO_TME_24xxS_Single_THT","Converter_DCDC/Converter_DCDC_TRACO_TMR-1-xxxx_Dual_THT","Converter_DCDC/Converter_DCDC_TRACO_TMR-1-xxxx_Single_THT","Converter_DCDC/Converter_DCDC_TRACO_TMR-1SM_SMD","Converter_DCDC/Converter_DCDC_TRACO_TMR10-24xxWIR_48xxWIR_72xxWIR_THT","Converter_DCDC/Converter_DCDC_TRACO_TMR2-xxxxWI_THT","Converter_DCDC/Converter_DCDC_TRACO_TMR4-xxxxWI_THT","Converter_DCDC/Converter_DCDC_TRACO_TMU3-05xx_12xx_THT","Converter_DCDC/Converter_DCDC_TRACO_TMU3-24xx_THT","Converter_DCDC/Converter_DCDC_TRACO_TMV-051xD_121xD_Dual_THT","Converter_DCDC/Converter_DCDC_TRACO_TMV-051xS_121xS_Single_THT","Converter_DCDC/Converter_DCDC_TRACO_TMV-241xD_Dual_THT","Converter_DCDC/Converter_DCDC_TRACO_TMV-241xS_Single_THT","Converter_DCDC/Converter_DCDC_TRACO_TOS06-05SIL_THT","Converter_DCDC/Converter_DCDC_TRACO_TOS06-12SIL_THT","Converter_DCDC/Converter_DCDC_TRACO_TRA3-xxxx_THT","Converter_DCDC/Converter_DCDC_TRACO_TRI1-xxxxSM_SMD","Converter_DCDC/Converter_DCDC_TRACO_TRI1-xxxx_THT","Converter_DCDC/Converter_DCDC_TRACO_TRI10_Dual_THT","Converter_DCDC/Converter_DCDC_TRACO_TRI10_Single_THT","Converter_DCDC/Converter_DCDC_TRACO_TRN3-xx1x_Single_THT","Converter_DCDC/Converter_DCDC_TRACO_TRN3-xx2x_Dual_THT","Converter_DCDC/Converter_DCDC_TRACO_TSR-1_THT","Converter_DCDC/Converter_DCDC_TRACO_TSR0.5-24xxSM_241xxSM_SMD","Converter_DCDC/Converter_DCDC_TRACO_TSR0.5-24xx_TSR0.5-24xxx_THT","Converter_DCDC/Converter_DCDC_TRACO_TSR0.6-48xxWI_TSR0.6-48xxxWI_THT","Converter_DCDC/Converter_DCDC_TRACO_TSR1-xxxxE_THT","Converter_DCDC/Converter_DCDC_TRACO_TSR1.5-24xxE_24120E_THT","Converter_DCDC/Converter_DCDC_TRACO_TSR2-24xxN_TSR2-24xxxN_THT","Converter_DCDC/Converter_DCDC_TRACO_TSR2-xxxx_THT","Converter_DCDC/Converter_DCDC_XP_POWER-IA48xxD_THT","Converter_DCDC/Converter_DCDC_XP_POWER-IA48xxS_THT","Converter_DCDC/Converter_DCDC_XP_POWER-IAxxxxD_THT","Converter_DCDC/Converter_DCDC_XP_POWER-IAxxxxS_THT","Converter_DCDC/Converter_DCDC_XP_POWER-IHxxxxDH_THT","Converter_DCDC/Converter_DCDC_XP_POWER-IHxxxxD_THT","Converter_DCDC/Converter_DCDC_XP_POWER-IHxxxxSH_THT","Converter_DCDC/Converter_DCDC_XP_POWER-IHxxxxS_THT","Converter_DCDC/Converter_DCDC_XP_POWER-ISU02_SMD","Converter_DCDC/Converter_DCDC_XP_POWER-ITQxxxxS-H_THT","Converter_DCDC/Converter_DCDC_XP_POWER-ITXxxxxSA_THT","Converter_DCDC/Converter_DCDC_XP_POWER-ITxxxxxS_THT","Converter_DCDC/Converter_DCDC_XP_POWER_JTDxxxxxxx_THT","Converter_DCDC/Converter_DCDC_XP_POWER_JTExxxxDxx_THT","Converter_DCDC/Converter_DCDC_muRata_MEJ1DxxxxSC_THT","Converter_DCDC/Converter_DCDC_muRata_MEJ1SxxxxSC_THT","Crystal/Crystal_AT310_D3.0mm_L10.0mm_Horizontal","Crystal/Crystal_AT310_D3.0mm_L10.0mm_Horizontal_1EP_style1","Crystal/Crystal_AT310_D3.0mm_L10.0mm_Horizontal_1EP_style2","Crystal/Crystal_AT310_D3.0mm_L10.0mm_Vertical","Crystal/Crystal_C26-LF_D2.1mm_L6.5mm_Horizontal","Crystal/Crystal_C26-LF_D2.1mm_L6.5mm_Horizontal_1EP_style1","Crystal/Crystal_C26-LF_D2.1mm_L6.5mm_Horizontal_1EP_style2","Crystal/Crystal_C26-LF_D2.1mm_L6.5mm_Vertical","Crystal/Crystal_C38-LF_D3.0mm_L8.0mm_Horizontal","Crystal/Crystal_C38-LF_D3.0mm_L8.0mm_Horizontal_1EP_style1","Crystal/Crystal_C38-LF_D3.0mm_L8.0mm_Horizontal_1EP_style2","Crystal/Crystal_C38-LF_D3.0mm_L8.0mm_Vertical","Crystal/Crystal_DS10_D1.0mm_L4.3mm_Horizontal","Crystal/Crystal_DS10_D1.0mm_L4.3mm_Horizontal_1EP_style1","Crystal/Crystal_DS10_D1.0mm_L4.3mm_Horizontal_1EP_style2","Crystal/Crystal_DS10_D1.0mm_L4.3mm_Vertical","Crystal/Crystal_DS15_D1.5mm_L5.0mm_Horizontal","Crystal/Crystal_DS15_D1.5mm_L5.0mm_Horizontal_1EP_style1","Crystal/Crystal_DS15_D1.5mm_L5.0mm_Horizontal_1EP_style2","Crystal/Crystal_DS15_D1.5mm_L5.0mm_Vertical","Crystal/Crystal_DS26_D2.0mm_L6.0mm_Horizontal","Crystal/Crystal_DS26_D2.0mm_L6.0mm_Horizontal_1EP_style1","Crystal/Crystal_DS26_D2.0mm_L6.0mm_Horizontal_1EP_style2","Crystal/Crystal_DS26_D2.0mm_L6.0mm_Vertical","Crystal/Crystal_HC18-U_Horizontal","Crystal/Crystal_HC18-U_Horizontal_1EP_style1","Crystal/Crystal_HC18-U_Horizontal_1EP_style2","Crystal/Crystal_HC18-U_Vertical","Crystal/Crystal_HC33-U_Horizontal","Crystal/Crystal_HC33-U_Horizontal_1EP_style1","Crystal/Crystal_HC33-U_Horizontal_1EP_style2","Crystal/Crystal_HC33-U_Vertical","Crystal/Crystal_HC35-U","Crystal/Crystal_HC49-4H_Vertical","Crystal/Crystal_HC49-U-3Pin_Vertical","Crystal/Crystal_HC49-U_Horizontal","Crystal/Crystal_HC49-U_Horizontal_1EP_style1","Crystal/Crystal_HC49-U_Horizontal_1EP_style2","Crystal/Crystal_HC49-U_Vertical","Crystal/Crystal_HC50_Horizontal","Crystal/Crystal_HC50_Horizontal_1EP_style1","Crystal/Crystal_HC50_Horizontal_1EP_style2","Crystal/Crystal_HC50_Vertical","Crystal/Crystal_HC51-U_Vertical","Crystal/Crystal_HC51_Horizontal","Crystal/Crystal_HC51_Horizontal_1EP_style1","Crystal/Crystal_HC51_Horizontal_1EP_style2","Crystal/Crystal_HC52-6mm_Horizontal","Crystal/Crystal_HC52-6mm_Horizontal_1EP_style1","Crystal/Crystal_HC52-6mm_Horizontal_1EP_style2","Crystal/Crystal_HC52-6mm_Vertical","Crystal/Crystal_HC52-8mm_Horizontal","Crystal/Crystal_HC52-8mm_Horizontal_1EP_style1","Crystal/Crystal_HC52-8mm_Horizontal_1EP_style2","Crystal/Crystal_HC52-8mm_Vertical","Crystal/Crystal_HC52-U-3Pin_Vertical","Crystal/Crystal_HC52-U_Horizontal","Crystal/Crystal_HC52-U_Horizontal_1EP_style1","Crystal/Crystal_HC52-U_Horizontal_1EP_style2","Crystal/Crystal_HC52-U_Vertical","Crystal/Crystal_Round_D1.0mm_Vertical","Crystal/Crystal_Round_D1.5mm_Vertical","Crystal/Crystal_Round_D2.0mm_Vertical","Crystal/Crystal_Round_D3.0mm_Vertical","Crystal/Crystal_SMD_0603-2Pin_6.0x3.5mm","Crystal/Crystal_SMD_0603-2Pin_6.0x3.5mm_HandSoldering","Crystal/Crystal_SMD_0603-4Pin_6.0x3.5mm","Crystal/Crystal_SMD_0603-4Pin_6.0x3.5mm_HandSoldering","Crystal/Crystal_SMD_1210-4Pin_1.2x1.0mm","Crystal/Crystal_SMD_1210-4Pin_1.2x1.0mm_RotB","Crystal/Crystal_SMD_2012-2Pin_2.0x1.2mm","Crystal/Crystal_SMD_2012-2Pin_2.0x1.2mm_HandSoldering","Crystal/Crystal_SMD_2016-4Pin_2.0x1.6mm","Crystal/Crystal_SMD_2520-4Pin_2.5x2.0mm","Crystal/Crystal_SMD_3215-2Pin_3.2x1.5mm","Crystal/Crystal_SMD_3225-4Pin_3.2x2.5mm","Crystal/Crystal_SMD_3225-4Pin_3.2x2.5mm_HandSoldering","Crystal/Crystal_SMD_5032-2Pin_5.0x3.2mm","Crystal/Crystal_SMD_5032-2Pin_5.0x3.2mm_HandSoldering","Crystal/Crystal_SMD_5032-4Pin_5.0x3.2mm","Crystal/Crystal_SMD_7050-2Pin_7.0x5.0mm","Crystal/Crystal_SMD_7050-2Pin_7.0x5.0mm_HandSoldering","Crystal/Crystal_SMD_7050-4Pin_7.0x5.0mm","Crystal/Crystal_SMD_Abracon_ABM10-4Pin_2.5x2.0mm","Crystal/Crystal_SMD_Abracon_ABM3-2Pin_5.0x3.2mm","Crystal/Crystal_SMD_Abracon_ABM3-2Pin_5.0x3.2mm_HandSoldering","Crystal/Crystal_SMD_Abracon_ABM3B-4Pin_5.0x3.2mm","Crystal/Crystal_SMD_Abracon_ABM3C-4Pin_5.0x3.2mm","Crystal/Crystal_SMD_Abracon_ABM7-2Pin_6.0x3.5mm","Crystal/Crystal_SMD_Abracon_ABM8AIG-4Pin_3.2x2.5mm","Crystal/Crystal_SMD_Abracon_ABM8G-4Pin_3.2x2.5mm","Crystal/Crystal_SMD_Abracon_ABS25-4Pin_8.0x3.8mm","Crystal/Crystal_SMD_Citizen_CS325S-4Pin_3.2x2.5mm","Crystal/Crystal_SMD_ECS_CSM3X-2Pin_7.6x4.1mm","Crystal/Crystal_SMD_EuroQuartz_EQ161-2Pin_3.2x1.5mm","Crystal/Crystal_SMD_EuroQuartz_EQ161-2Pin_3.2x1.5mm_HandSoldering","Crystal/Crystal_SMD_EuroQuartz_MJ-4Pin_5.0x3.2mm","Crystal/Crystal_SMD_EuroQuartz_MJ-4Pin_5.0x3.2mm_HandSoldering","Crystal/Crystal_SMD_EuroQuartz_MQ-4Pin_7.0x5.0mm","Crystal/Crystal_SMD_EuroQuartz_MQ-4Pin_7.0x5.0mm_HandSoldering","Crystal/Crystal_SMD_EuroQuartz_MQ2-2Pin_7.0x5.0mm","Crystal/Crystal_SMD_EuroQuartz_MQ2-2Pin_7.0x5.0mm_HandSoldering","Crystal/Crystal_SMD_EuroQuartz_MT-4Pin_3.2x2.5mm","Crystal/Crystal_SMD_EuroQuartz_MT-4Pin_3.2x2.5mm_HandSoldering","Crystal/Crystal_SMD_EuroQuartz_X22-4Pin_2.5x2.0mm","Crystal/Crystal_SMD_EuroQuartz_X22-4Pin_2.5x2.0mm_HandSoldering","Crystal/Crystal_SMD_FOX_FE-2Pin_7.5x5.0mm","Crystal/Crystal_SMD_FOX_FE-2Pin_7.5x5.0mm_HandSoldering","Crystal/Crystal_SMD_FOX_FQ7050-2Pin_7.0x5.0mm","Crystal/Crystal_SMD_FOX_FQ7050-2Pin_7.0x5.0mm_HandSoldering","Crystal/Crystal_SMD_FOX_FQ7050-4Pin_7.0x5.0mm","Crystal/Crystal_SMD_FrontierElectronics_FM206","Crystal/Crystal_SMD_G8-2Pin_3.2x1.5mm","Crystal/Crystal_SMD_G8-2Pin_3.2x1.5mm_HandSoldering","Crystal/Crystal_SMD_HC49-SD","Crystal/Crystal_SMD_HC49-SD_HandSoldering","Crystal/Crystal_SMD_MicroCrystal_CC1V-T1A-2Pin_8.0x3.7mm","Crystal/Crystal_SMD_MicroCrystal_CC1V-T1A-2Pin_8.0x3.7mm_HandSoldering","Crystal/Crystal_SMD_MicroCrystal_CC4V-T1A-2Pin_5.0x1.9mm","Crystal/Crystal_SMD_MicroCrystal_CC4V-T1A-2Pin_5.0x1.9mm_HandSoldering","Crystal/Crystal_SMD_MicroCrystal_CC5V-T1A-2Pin_4.1x1.5mm","Crystal/Crystal_SMD_MicroCrystal_CC5V-T1A-2Pin_4.1x1.5mm_HandSoldering","Crystal/Crystal_SMD_MicroCrystal_CC7V-T1A-2Pin_3.2x1.5mm","Crystal/Crystal_SMD_MicroCrystal_CC7V-T1A-2Pin_3.2x1.5mm_HandSoldering","Crystal/Crystal_SMD_MicroCrystal_CC8V-T1A-2Pin_2.0x1.2mm","Crystal/Crystal_SMD_MicroCrystal_CC8V-T1A-2Pin_2.0x1.2mm_HandSoldering","Crystal/Crystal_SMD_MicroCrystal_CM9V-T1A-2Pin_1.6x1.0mm","Crystal/Crystal_SMD_MicroCrystal_CM9V-T1A-2Pin_1.6x1.0mm_HandSoldering","Crystal/Crystal_SMD_MicroCrystal_MS1V-T1K","Crystal/Crystal_SMD_MicroCrystal_MS3V-T1R","Crystal/Crystal_SMD_Qantek_QC5CB-2Pin_5x3.2mm","Crystal/Crystal_SMD_SeikoEpson_FA128-4Pin_2.0x1.6mm","Crystal/Crystal_SMD_SeikoEpson_FA238-4Pin_3.2x2.5mm","Crystal/Crystal_SMD_SeikoEpson_FA238-4Pin_3.2x2.5mm_HandSoldering","Crystal/Crystal_SMD_SeikoEpson_FA238V-4Pin_3.2x2.5mm","Crystal/Crystal_SMD_SeikoEpson_FA238V-4Pin_3.2x2.5mm_HandSoldering","Crystal/Crystal_SMD_SeikoEpson_MA406-4Pin_11.7x4.0mm","Crystal/Crystal_SMD_SeikoEpson_MA406-4Pin_11.7x4.0mm_HandSoldering","Crystal/Crystal_SMD_SeikoEpson_MA505-2Pin_12.7x5.1mm","Crystal/Crystal_SMD_SeikoEpson_MA505-2Pin_12.7x5.1mm_HandSoldering","Crystal/Crystal_SMD_SeikoEpson_MA506-4Pin_12.7x5.1mm","Crystal/Crystal_SMD_SeikoEpson_MA506-4Pin_12.7x5.1mm_HandSoldering","Crystal/Crystal_SMD_SeikoEpson_MC146-4Pin_6.7x1.5mm","Crystal/Crystal_SMD_SeikoEpson_MC146-4Pin_6.7x1.5mm_HandSoldering","Crystal/Crystal_SMD_SeikoEpson_MC156-4Pin_7.1x2.5mm","Crystal/Crystal_SMD_SeikoEpson_MC156-4Pin_7.1x2.5mm_HandSoldering","Crystal/Crystal_SMD_SeikoEpson_MC306-4Pin_8.0x3.2mm","Crystal/Crystal_SMD_SeikoEpson_MC306-4Pin_8.0x3.2mm_HandSoldering","Crystal/Crystal_SMD_SeikoEpson_MC405-2Pin_9.6x4.1mm","Crystal/Crystal_SMD_SeikoEpson_MC405-2Pin_9.6x4.1mm_HandSoldering","Crystal/Crystal_SMD_SeikoEpson_MC406-4Pin_9.6x4.1mm","Crystal/Crystal_SMD_SeikoEpson_MC406-4Pin_9.6x4.1mm_HandSoldering","Crystal/Crystal_SMD_SeikoEpson_TSX3225-4Pin_3.2x2.5mm","Crystal/Crystal_SMD_SeikoEpson_TSX3225-4Pin_3.2x2.5mm_HandSoldering","Crystal/Crystal_SMD_TXC_7A-2Pin_5x3.2mm","Crystal/Crystal_SMD_TXC_7M-4Pin_3.2x2.5mm","Crystal/Crystal_SMD_TXC_7M-4Pin_3.2x2.5mm_HandSoldering","Crystal/Crystal_SMD_TXC_9HT11-2Pin_2.0x1.2mm","Crystal/Crystal_SMD_TXC_9HT11-2Pin_2.0x1.2mm_HandSoldering","Crystal/Crystal_SMD_TXC_AX_8045-2Pin_8.0x4.5mm","Crystal/Crystal_SMD_WE_12SMX-4Pin_7.0x5.0mm","Crystal/Crystal_SMD_WE_CFPX-104-4Pin_5.0x3.2mm","Crystal/Crystal_SMD_WE_CFPX-180-4Pin_3.2x2.5mm","Crystal/Crystal_SMD_WE_CFPX-218-4Pin_2.5x2.0mm","Crystal/Crystal_SMD_WE_IQXC-240-4Pin_1.2x1.0mm","Crystal/Crystal_SMD_WE_IQXC-26-4Pin_1.6x1.2mm","Crystal/Crystal_SMD_WE_IQXC-42-4Pin_2.0x1.6mm","Crystal/Resonator-2Pin_W10.0mm_H5.0mm","Crystal/Resonator-2Pin_W6.0mm_H3.0mm","Crystal/Resonator-2Pin_W7.0mm_H2.5mm","Crystal/Resonator-2Pin_W8.0mm_H3.5mm","Crystal/Resonator-3Pin_W10.0mm_H5.0mm","Crystal/Resonator-3Pin_W6.0mm_H3.0mm","Crystal/Resonator-3Pin_W7.0mm_H2.5mm","Crystal/Resonator-3Pin_W8.0mm_H3.5mm","Crystal/Resonator_Murata_CSTLSxxxG-3Pin_W8.0mm_H3.0mm","Crystal/Resonator_Murata_CSTLSxxxX-3Pin_W5.5mm_H3.0mm","Crystal/Resonator_Murata_DSN6-3Pin_W7.0mm_H2.5mm","Crystal/Resonator_Murata_DSS6-3Pin_W7.0mm_H2.5mm","Crystal/Resonator_SMD-3Pin_7.2x3.0mm","Crystal/Resonator_SMD-3Pin_7.2x3.0mm_HandSoldering","Crystal/Resonator_SMD_Murata_CDSCB-2Pin_4.5x2.0mm","Crystal/Resonator_SMD_Murata_CDSCB-2Pin_4.5x2.0mm_HandSoldering","Crystal/Resonator_SMD_Murata_CSTCR_4.5x2x1.15mm","Crystal/Resonator_SMD_Murata_CSTxExxV-3Pin_3.0x1.1mm","Crystal/Resonator_SMD_Murata_CSTxExxV-3Pin_3.0x1.1mm_HandSoldering","Crystal/Resonator_SMD_Murata_SFECV-3Pin_6.9x2.9mm","Crystal/Resonator_SMD_Murata_SFECV-3Pin_6.9x2.9mm_HandSoldering","Crystal/Resonator_SMD_Murata_SFSKA-3Pin_7.9x3.8mm","Crystal/Resonator_SMD_Murata_SFSKA-3Pin_7.9x3.8mm_HandSoldering","Crystal/Resonator_SMD_Murata_TPSKA-3Pin_7.9x3.8mm","Crystal/Resonator_SMD_Murata_TPSKA-3Pin_7.9x3.8mm_HandSoldering","Diode_SMD/D_01005_0402Metric","Diode_SMD/D_01005_0402Metric_Pad0.57x0.30mm_HandSolder","Diode_SMD/D_0201_0603Metric","Diode_SMD/D_0201_0603Metric_Pad0.64x0.40mm_HandSolder","Diode_SMD/D_0402_1005Metric","Diode_SMD/D_0402_1005Metric_Pad0.77x0.64mm_HandSolder","Diode_SMD/D_0603_1608Metric","Diode_SMD/D_0603_1608Metric_Pad1.05x0.95mm_HandSolder","Diode_SMD/D_0805_2012Metric","Diode_SMD/D_0805_2012Metric_Pad1.15x1.40mm_HandSolder","Diode_SMD/D_1206_3216Metric","Diode_SMD/D_1206_3216Metric_Pad1.42x1.75mm_HandSolder","Diode_SMD/D_1210_3225Metric","Diode_SMD/D_1210_3225Metric_Pad1.42x2.65mm_HandSolder","Diode_SMD/D_1812_4532Metric","Diode_SMD/D_1812_4532Metric_Pad1.30x3.40mm_HandSolder","Diode_SMD/D_2010_5025Metric","Diode_SMD/D_2010_5025Metric_Pad1.52x2.65mm_HandSolder","Diode_SMD/D_2114_3652Metric","Diode_SMD/D_2114_3652Metric_Pad1.85x3.75mm_HandSolder","Diode_SMD/D_2512_6332Metric","Diode_SMD/D_2512_6332Metric_Pad1.52x3.35mm_HandSolder","Diode_SMD/D_3220_8050Metric","Diode_SMD/D_3220_8050Metric_Pad2.65x5.15mm_HandSolder","Diode_SMD/D_MELF-RM10_Universal_Handsoldering","Diode_SMD/D_MELF","Diode_SMD/D_MELF_Handsoldering","Diode_SMD/D_MicroMELF","Diode_SMD/D_MicroMELF_Handsoldering","Diode_SMD/D_MicroSMP_LargeAnode","Diode_SMD/D_MicroSMP_LargeCathode","Diode_SMD/D_MiniMELF","Diode_SMD/D_MiniMELF_Handsoldering","Diode_SMD/D_PowerDI-123","Diode_SMD/D_PowerDI-5","Diode_SMD/D_Powermite2_LargeAnode","Diode_SMD/D_Powermite2_LargeCathode","Diode_SMD/D_Powermite3","Diode_SMD/D_Powermite_LargeAnode","Diode_SMD/D_Powermite_LargeCathode","Diode_SMD/D_QFN_3.3x3.3mm_P0.65mm","Diode_SMD/D_SC-80","Diode_SMD/D_SC-80_HandSoldering","Diode_SMD/D_SMA-SMB_Universal_Handsoldering","Diode_SMD/D_SMA","Diode_SMD/D_SMA_Handsoldering","Diode_SMD/D_SMB-SMC_Universal_Handsoldering","Diode_SMD/D_SMB","Diode_SMD/D_SMB_Handsoldering","Diode_SMD/D_SMB_Modified","Diode_SMD/D_SMC-RM10_Universal_Handsoldering","Diode_SMD/D_SMC","Diode_SMD/D_SMC_Handsoldering","Diode_SMD/D_SMF","Diode_SMD/D_SMP_DO-220AA","Diode_SMD/D_SOD-110","Diode_SMD/D_SOD-123","Diode_SMD/D_SOD-123F","Diode_SMD/D_SOD-128","Diode_SMD/D_SOD-323","Diode_SMD/D_SOD-323F","Diode_SMD/D_SOD-323_HandSoldering","Diode_SMD/D_SOD-523","Diode_SMD/D_SOD-882","Diode_SMD/D_SOD-882D","Diode_SMD/D_SOD-923","Diode_SMD/D_TUMD2","Diode_SMD/Diode_Bridge_Bourns_CD-DF4xxS","Diode_SMD/Diode_Bridge_Diotec_ABS","Diode_SMD/Diode_Bridge_Diotec_MicroDil_3.0x3.0x1.8mm","Diode_SMD/Diode_Bridge_Diotec_SO-DIL-Slim","Diode_SMD/Diode_Bridge_OnSemi_SDIP-4L","Diode_SMD/Diode_Bridge_Vishay_DFS","Diode_SMD/Diode_Bridge_Vishay_DFSFlat","Diode_SMD/Diode_Bridge_Vishay_MBLS","Diode_SMD/Infineon_SG-WLL-2-3_0.58x0.28_P0.36mm","Diode_SMD/Littelfuse_PolyZen-LS","Diode_SMD/Nexperia_CFP3_SOD-123W","Diode_SMD/Nexperia_DSN0603-2_0.6x0.3mm_P0.4mm","Diode_SMD/Nexperia_DSN1608-2_1.6x0.8mm","Diode_SMD/ST_D_SMC","Diode_SMD/ST_QFN-2L_1.6x1.0mm","Diode_SMD/Vishay_SMPA","Diode_THT/D_5KPW_P12.70mm_Horizontal","Diode_THT/D_5KPW_P7.62mm_Vertical_AnodeUp","Diode_THT/D_5KPW_P7.62mm_Vertical_CathodeUp","Diode_THT/D_5KP_P10.16mm_Horizontal","Diode_THT/D_5KP_P12.70mm_Horizontal","Diode_THT/D_5KP_P7.62mm_Vertical_AnodeUp","Diode_THT/D_5KP_P7.62mm_Vertical_CathodeUp","Diode_THT/D_5W_P10.16mm_Horizontal","Diode_THT/D_5W_P12.70mm_Horizontal","Diode_THT/D_5W_P5.08mm_Vertical_AnodeUp","Diode_THT/D_5W_P5.08mm_Vertical_CathodeUp","Diode_THT/D_A-405_P10.16mm_Horizontal","Diode_THT/D_A-405_P12.70mm_Horizontal","Diode_THT/D_A-405_P2.54mm_Vertical_AnodeUp","Diode_THT/D_A-405_P2.54mm_Vertical_CathodeUp","Diode_THT/D_A-405_P5.08mm_Vertical_AnodeUp","Diode_THT/D_A-405_P5.08mm_Vertical_CathodeUp","Diode_THT/D_A-405_P7.62mm_Horizontal","Diode_THT/D_DO-15_P10.16mm_Horizontal","Diode_THT/D_DO-15_P12.70mm_Horizontal","Diode_THT/D_DO-15_P15.24mm_Horizontal","Diode_THT/D_DO-15_P2.54mm_Vertical_AnodeUp","Diode_THT/D_DO-15_P2.54mm_Vertical_CathodeUp","Diode_THT/D_DO-15_P3.81mm_Vertical_AnodeUp","Diode_THT/D_DO-15_P3.81mm_Vertical_CathodeUp","Diode_THT/D_DO-15_P5.08mm_Vertical_AnodeUp","Diode_THT/D_DO-15_P5.08mm_Vertical_CathodeUp","Diode_THT/D_DO-201AD_P12.70mm_Horizontal","Diode_THT/D_DO-201AD_P15.24mm_Horizontal","Diode_THT/D_DO-201AD_P3.81mm_Vertical_AnodeUp","Diode_THT/D_DO-201AD_P3.81mm_Vertical_CathodeUp","Diode_THT/D_DO-201AD_P5.08mm_Vertical_AnodeUp","Diode_THT/D_DO-201AD_P5.08mm_Vertical_CathodeUp","Diode_THT/D_DO-201AE_P12.70mm_Horizontal","Diode_THT/D_DO-201AE_P15.24mm_Horizontal","Diode_THT/D_DO-201AE_P3.81mm_Vertical_AnodeUp","Diode_THT/D_DO-201AE_P3.81mm_Vertical_CathodeUp","Diode_THT/D_DO-201AE_P5.08mm_Vertical_AnodeUp","Diode_THT/D_DO-201AE_P5.08mm_Vertical_CathodeUp","Diode_THT/D_DO-201_P12.70mm_Horizontal","Diode_THT/D_DO-201_P15.24mm_Horizontal","Diode_THT/D_DO-201_P3.81mm_Vertical_AnodeUp","Diode_THT/D_DO-201_P3.81mm_Vertical_CathodeUp","Diode_THT/D_DO-201_P5.08mm_Vertical_AnodeUp","Diode_THT/D_DO-201_P5.08mm_Vertical_CathodeUp","Diode_THT/D_DO-247_Horizontal_TabDown","Diode_THT/D_DO-247_Horizontal_TabUp","Diode_THT/D_DO-247_Vertical","Diode_THT/D_DO-27_P12.70mm_Horizontal","Diode_THT/D_DO-27_P15.24mm_Horizontal","Diode_THT/D_DO-27_P5.08mm_Vertical_AnodeUp","Diode_THT/D_DO-27_P5.08mm_Vertical_CathodeUp","Diode_THT/D_DO-34_SOD68_P10.16mm_Horizontal","Diode_THT/D_DO-34_SOD68_P12.70mm_Horizontal","Diode_THT/D_DO-34_SOD68_P2.54mm_Vertical_AnodeUp","Diode_THT/D_DO-34_SOD68_P2.54mm_Vertical_CathodeUp","Diode_THT/D_DO-34_SOD68_P5.08mm_Vertical_AnodeUp","Diode_THT/D_DO-34_SOD68_P5.08mm_Vertical_CathodeUp","Diode_THT/D_DO-34_SOD68_P7.62mm_Horizontal","Diode_THT/D_DO-35_SOD27_P10.16mm_Horizontal","Diode_THT/D_DO-35_SOD27_P12.70mm_Horizontal","Diode_THT/D_DO-35_SOD27_P2.54mm_Vertical_AnodeUp","Diode_THT/D_DO-35_SOD27_P2.54mm_Vertical_CathodeUp","Diode_THT/D_DO-35_SOD27_P3.81mm_Vertical_AnodeUp","Diode_THT/D_DO-35_SOD27_P3.81mm_Vertical_CathodeUp","Diode_THT/D_DO-35_SOD27_P5.08mm_Vertical_AnodeUp","Diode_THT/D_DO-35_SOD27_P5.08mm_Vertical_CathodeUp","Diode_THT/D_DO-35_SOD27_P7.62mm_Horizontal","Diode_THT/D_DO-41_SOD81_P10.16mm_Horizontal","Diode_THT/D_DO-41_SOD81_P12.70mm_Horizontal","Diode_THT/D_DO-41_SOD81_P2.54mm_Vertical_AnodeUp","Diode_THT/D_DO-41_SOD81_P2.54mm_Vertical_CathodeUp","Diode_THT/D_DO-41_SOD81_P3.81mm_Vertical_AnodeUp","Diode_THT/D_DO-41_SOD81_P3.81mm_Vertical_CathodeUp","Diode_THT/D_DO-41_SOD81_P5.08mm_Vertical_AnodeUp","Diode_THT/D_DO-41_SOD81_P5.08mm_Vertical_CathodeUp","Diode_THT/D_DO-41_SOD81_P7.62mm_Horizontal","Diode_THT/D_P600_R-6_P12.70mm_Horizontal","Diode_THT/D_P600_R-6_P20.00mm_Horizontal","Diode_THT/D_P600_R-6_P7.62mm_Vertical_AnodeUp","Diode_THT/D_P600_R-6_P7.62mm_Vertical_CathodeUp","Diode_THT/D_T-1_P10.16mm_Horizontal","Diode_THT/D_T-1_P12.70mm_Horizontal","Diode_THT/D_T-1_P2.54mm_Vertical_AnodeUp","Diode_THT/D_T-1_P2.54mm_Vertical_CathodeUp","Diode_THT/D_T-1_P5.08mm_Horizontal","Diode_THT/Diode_Bridge_15.1x15.1x6.3mm_P10.9mm","Diode_THT/Diode_Bridge_15.2x15.2x6.3mm_P10.9mm","Diode_THT/Diode_Bridge_15.7x15.7x6.3mm_P10.8mm","Diode_THT/Diode_Bridge_16.7x16.7x6.3mm_P10.8mm","Diode_THT/Diode_Bridge_19.0x19.0x6.8mm_P12.7mm","Diode_THT/Diode_Bridge_19.0x3.5x10.0mm_P5.0mm","Diode_THT/Diode_Bridge_28.6x28.6x7.3mm_P18.0mm_P11.6mm","Diode_THT/Diode_Bridge_32.0x5.6x17.0mm_P10.0mm_P7.5mm","Diode_THT/Diode_Bridge_Comchip_SCVB-L","Diode_THT/Diode_Bridge_DIGITRON_KBPC_T","Diode_THT/Diode_Bridge_DIP-4_W5.08mm_P2.54mm","Diode_THT/Diode_Bridge_DIP-4_W7.62mm_P5.08mm","Diode_THT/Diode_Bridge_GeneSiC_KBPC_T","Diode_THT/Diode_Bridge_GeneSiC_KBPC_W","Diode_THT/Diode_Bridge_IXYS_GUFP","Diode_THT/Diode_Bridge_Round_D8.9mm","Diode_THT/Diode_Bridge_Round_D9.0mm","Diode_THT/Diode_Bridge_Round_D9.8mm","Diode_THT/Diode_Bridge_Vishay_GBL","Diode_THT/Diode_Bridge_Vishay_GBU","Diode_THT/Diode_Bridge_Vishay_KBL","Diode_THT/Diode_Bridge_Vishay_KBPC1","Diode_THT/Diode_Bridge_Vishay_KBPC6","Diode_THT/Diode_Bridge_Vishay_KBPM","Diode_THT/Diode_Bridge_Vishay_KBU","Display/AG12864E","Display/Adafruit_SSD1306","Display/Adafruit_SSD1306_No_Mounting_Holes","Display/CR2013-MI2120","Display/DL1416","Display/EA-eDIP128B-XXX","Display/EA_DOGL128-6","Display/EA_DOGM128-6","Display/EA_DOGS104X-A","Display/EA_DOGXL160-7","Display/EA_DOGXL160-7_Backlight","Display/EA_T123X-I2C","Display/EA_eDIP160-XXX","Display/EA_eDIP240-XXX","Display/EA_eDIP320X-XXX","Display/EA_eDIPTFT32-XXX","Display/EA_eDIPTFT43-ATC","Display/EA_eDIPTFT43-XXX","Display/EA_eDIPTFT57-XXX","Display/EA_eDIPTFT70-ATC","Display/EA_eDIPTFT70-XXX","Display/ER-OLED0.42-1W_Folded","Display/ERM19264","Display/ER_OLEDM0.91_1x-I2C","Display/HDSM-441B_HDSM-443B","Display/HDSM-541B_HDSM-543B","Display/HDSP-4830","Display/HDSP-4832","Display/HDSP-4836","Display/HDSP-4840","Display/HDSP-4850","Display/HDSP-48xx","Display/HLCP-J100","Display/HY1602E","Display/LCD-016N002L","Display/LM16255","Display/NHD-0420H1Z","Display/NHD-C0220BiZ-FSRGB","Display/NHD-C0220BiZ","Display/NHD-C12832A1Z-FSRGB","Display/Noritake_CU20025-Ux1J","Display/OLED-128O064D","Display/RC1602A","Display/WC1602A","Display_7Segment/7SEGMENT-LED__HDSM531_HDSM533_SMD","Display_7Segment/7SegmentLED_LTS6760_LTS6780","Display_7Segment/AD-121F2","Display_7Segment/AFF_2x7SEG-DIGIT_10mm","Display_7Segment/CA56-12CGKWA","Display_7Segment/CA56-12EWA","Display_7Segment/CA56-12SEKWA","Display_7Segment/CA56-12SRWA","Display_7Segment/CA56-12SURKWA","Display_7Segment/CA56-12SYKWA","Display_7Segment/CC56-12GWA","Display_7Segment/CC56-12YWA","Display_7Segment/D1X8K","Display_7Segment/DA04-11CGKWA","Display_7Segment/DA04-11SEKWA","Display_7Segment/DA04-11SURKWA","Display_7Segment/DA04-11SYKWA","Display_7Segment/DA56-11CGKWA","Display_7Segment/DA56-11SEKWA","Display_7Segment/DA56-11SURKWA","Display_7Segment/DA56-11SYKWA","Display_7Segment/DE113-XX-XX","Display_7Segment/DE114-RS-20","Display_7Segment/DE119-XX-XX","Display_7Segment/DE122-XX-XX","Display_7Segment/DE152-XX-XX","Display_7Segment/DE170-XX-XX","Display_7Segment/ELD_426XXXX","Display_7Segment/HDSP-7401","Display_7Segment/HDSP-7507","Display_7Segment/HDSP-7801","Display_7Segment/HDSP-7807","Display_7Segment/HDSP-A151","Display_7Segment/HDSP-A401","Display_7Segment/KCSC02-105","Display_7Segment/KCSC02-106","Display_7Segment/KCSC02-107","Display_7Segment/KCSC02-123","Display_7Segment/KCSC02-136","Display_7Segment/LTC-4627Jx","Display_7Segment/MAN3410A","Display_7Segment/MAN3420A","Display_7Segment/MAN3610A","Display_7Segment/MAN3620A","Display_7Segment/MAN3630A","Display_7Segment/MAN3810A","Display_7Segment/MAN3820A","Display_7Segment/MAN71A","Display_7Segment/MAN72A","Display_7Segment/MAN73A","Display_7Segment/SA15-11xxx","Display_7Segment/SBC18-11SURKCGKWA","Display_7Segment/Sx39-1xxxxx","Ferrite_THT/LairdTech_28C0236-0JW-10","Fiducial/Fiducial_0.5mm_Mask1.5mm","Fiducial/Fiducial_0.5mm_Mask1mm","Fiducial/Fiducial_0.5mm_Mask2mm","Fiducial/Fiducial_0.75mm_Mask1.5mm","Fiducial/Fiducial_0.75mm_Mask2.25mm","Fiducial/Fiducial_1.5mm_Mask3mm","Fiducial/Fiducial_1.5mm_Mask4.5mm","Fiducial/Fiducial_1mm_Mask2mm","Fiducial/Fiducial_1mm_Mask3mm","Fiducial/Fiducial_Cross_1.5mm_Mask2mm","Filter/Filter_1109-5_1.1x0.9mm","Filter/Filter_1411-5_1.4x1.1mm","Filter/Filter_Bourns_SRF0905_6.0x9.2mm","Filter/Filter_FILTERCON_1FPxx","Filter/Filter_KEMET_PZB300_24.0x12.5mm_P10.0mm","Filter/Filter_Mini-Circuits_FV1206-1","Filter/Filter_Mini-Circuits_FV1206-4","Filter/Filter_Mini-Circuits_FV1206-5","Filter/Filter_Mini-Circuits_FV1206-6","Filter/Filter_Mini-Circuits_FV1206-7","Filter/Filter_Mini-Circuits_FV1206","Filter/Filter_Murata_BNX025","Filter/Filter_Murata_BNX025_ThermalVias","Filter/Filter_Murata_SFECF-6","Filter/Filter_Murata_SFECF-6_HandSoldering","Filter/Filter_SAW-6_3.8x3.8mm","Filter/Filter_SAW-8_3.8x3.8mm","Filter/Filter_SAW_Epcos_DCC6C_3x3mm","Filter/Filter_Schaffner_FN405","Filter/Filter_Schaffner_FN406","Fuse/FuseHolder_Blade_ATO_Littelfuse_FLR_178.6165","Fuse/Fuse_0402_1005Metric","Fuse/Fuse_0402_1005Metric_Pad0.77x0.64mm_HandSolder","Fuse/Fuse_0603_1608Metric","Fuse/Fuse_0603_1608Metric_Pad1.05x0.95mm_HandSolder","Fuse/Fuse_0805_2012Metric","Fuse/Fuse_0805_2012Metric_Pad1.15x1.40mm_HandSolder","Fuse/Fuse_1206_3216Metric","Fuse/Fuse_1206_3216Metric_Pad1.42x1.75mm_HandSolder","Fuse/Fuse_1210_3225Metric","Fuse/Fuse_1210_3225Metric_Pad1.42x2.65mm_HandSolder","Fuse/Fuse_1812_4532Metric","Fuse/Fuse_1812_4532Metric_Pad1.30x3.40mm_HandSolder","Fuse/Fuse_2010_5025Metric","Fuse/Fuse_2010_5025Metric_Pad1.52x2.65mm_HandSolder","Fuse/Fuse_2512_6332Metric","Fuse/Fuse_2512_6332Metric_Pad1.52x3.35mm_HandSolder","Fuse/Fuse_2920_7451Metric","Fuse/Fuse_2920_7451Metric_Pad2.10x5.45mm_HandSolder","Fuse/Fuse_BelFuse_0ZRE0005FF_L8.3mm_W3.8mm","Fuse/Fuse_BelFuse_0ZRE0008FF_L8.3mm_W3.8mm","Fuse/Fuse_BelFuse_0ZRE0012FF_L8.3mm_W3.8mm","Fuse/Fuse_BelFuse_0ZRE0016FF_L9.9mm_W3.8mm","Fuse/Fuse_BelFuse_0ZRE0025FF_L9.6mm_W3.8mm","Fuse/Fuse_BelFuse_0ZRE0033FF_L11.4mm_W3.8mm","Fuse/Fuse_BelFuse_0ZRE0040FF_L11.5mm_W3.8mm","Fuse/Fuse_BelFuse_0ZRE0055FF_L14.0mm_W4.1mm","Fuse/Fuse_BelFuse_0ZRE0075FF_L11.5mm_W4.8mm","Fuse/Fuse_BelFuse_0ZRE0100FF_L18.7mm_W5.1mm","Fuse/Fuse_BelFuse_0ZRE0125FF_L21.2mm_W5.3mm","Fuse/Fuse_BelFuse_0ZRE0150FF_L23.4mm_W5.3mm","Fuse/Fuse_BelFuse_0ZRE0200FF_L24.9mm_W6.1mm","Fuse/Fuse_Blade_ATO_directSolder","Fuse/Fuse_Blade_Mini_directSolder","Fuse/Fuse_Bourns_MF-RG1000","Fuse/Fuse_Bourns_MF-RG1100","Fuse/Fuse_Bourns_MF-RG300","Fuse/Fuse_Bourns_MF-RG400","Fuse/Fuse_Bourns_MF-RG500","Fuse/Fuse_Bourns_MF-RG600","Fuse/Fuse_Bourns_MF-RG650","Fuse/Fuse_Bourns_MF-RG700","Fuse/Fuse_Bourns_MF-RG800","Fuse/Fuse_Bourns_MF-RG900","Fuse/Fuse_Bourns_MF-RHT050","Fuse/Fuse_Bourns_MF-RHT070","Fuse/Fuse_Bourns_MF-RHT100","Fuse/Fuse_Bourns_MF-RHT1000","Fuse/Fuse_Bourns_MF-RHT1100","Fuse/Fuse_Bourns_MF-RHT1300","Fuse/Fuse_Bourns_MF-RHT200","Fuse/Fuse_Bourns_MF-RHT300","Fuse/Fuse_Bourns_MF-RHT400","Fuse/Fuse_Bourns_MF-RHT500","Fuse/Fuse_Bourns_MF-RHT550","Fuse/Fuse_Bourns_MF-RHT600","Fuse/Fuse_Bourns_MF-RHT650","Fuse/Fuse_Bourns_MF-RHT700","Fuse/Fuse_Bourns_MF-RHT750","Fuse/Fuse_Bourns_MF-RHT800","Fuse/Fuse_Bourns_MF-RHT900","Fuse/Fuse_Bourns_MF-SM_7.98x5.44mm","Fuse/Fuse_Bourns_MF-SM_9.5x6.71mm","Fuse/Fuse_Bourns_TBU-CA","Fuse/Fuse_Littelfuse-LVR100","Fuse/Fuse_Littelfuse-LVR125","Fuse/Fuse_Littelfuse-LVR200","Fuse/Fuse_Littelfuse-NANO2-451_453","Fuse/Fuse_Littelfuse-NANO2-462","Fuse/Fuse_Littelfuse-NANO2-885","Fuse/Fuse_Littelfuse_372_D8.50mm","Fuse/Fuse_Littelfuse_395Series","Fuse/Fuse_Schurter_UMT250","Fuse/Fuse_Schurter_UMZ250","Fuse/Fuse_SunFuse-6HP","Fuse/Fuseholder_Blade_ATO_Littelfuse_Pudenz_2_Pin","Fuse/Fuseholder_Blade_Mini_Keystone_3568","Fuse/Fuseholder_Clip-5x20mm_Bel_FC-203-22_Lateral_P17.80x5.00mm_D1.17mm_Horizontal","Fuse/Fuseholder_Clip-5x20mm_Eaton_1A5601-01_Inline_P20.80x6.76mm_D1.70mm_Horizontal","Fuse/Fuseholder_Clip-5x20mm_Keystone_3512P_Inline_P23.62x7.27mm_D1.02x2.41x1.02x1.57mm_Horizontal","Fuse/Fuseholder_Clip-5x20mm_Keystone_3512_Inline_P23.62x7.27mm_D1.02x1.57mm_Horizontal","Fuse/Fuseholder_Clip-5x20mm_Keystone_3517_Inline_P23.11x6.76mm_D1.70mm_Horizontal","Fuse/Fuseholder_Clip-5x20mm_Keystone_3518P_Inline_P23.11x6.76mm_D2.44x1.70mm_Horizontal","Fuse/Fuseholder_Clip-5x20mm_Littelfuse_100_Inline_P20.50x4.60mm_D1.30mm_Horizontal","Fuse/Fuseholder_Clip-5x20mm_Littelfuse_111_Inline_P20.00x5.00mm_D1.05mm_Horizontal","Fuse/Fuseholder_Clip-5x20mm_Littelfuse_111_Lateral_P18.80x5.00mm_D1.17mm_Horizontal","Fuse/Fuseholder_Clip-5x20mm_Littelfuse_445-030_Inline_P20.50x5.20mm_D1.30mm_Horizontal","Fuse/Fuseholder_Clip-5x20mm_Littelfuse_519_Inline_P20.60x5.00mm_D1.00mm_Horizontal","Fuse/Fuseholder_Clip-5x20mm_Littelfuse_520_Inline_P20.50x5.80mm_D1.30mm_Horizontal","Fuse/Fuseholder_Clip-5x20mm_Littelfuse_521_Lateral_P17.00x5.00mm_D1.30mm_Horizontal","Fuse/Fuseholder_Clip-5x20mm_Schurter_CQM_Inline_P20.60x5.00mm_D1.00mm_Horizontal","Fuse/Fuseholder_Clip-5x20mm_Schurter_OG_Lateral_P15.00x5.00mm_D1.3mm_Horizontal","Fuse/Fuseholder_Clip-6.3x32mm_Littelfuse_102071_Inline_P34.70x7.60mm_D2.00mm_Horizontal","Fuse/Fuseholder_Clip-6.3x32mm_Littelfuse_102_122_Inline_P34.21x7.62mm_D1.98mm_Horizontal","Fuse/Fuseholder_Clip-6.3x32mm_Littelfuse_102_Inline_P34.21x7.62mm_D2.54mm_Horizontal","Fuse/Fuseholder_Clip-6.3x32mm_Littelfuse_122_Inline_P34.21x7.62mm_D2.54mm_Horizontal","Fuse/Fuseholder_Cylinder-5x20mm_Bulgin_FX0456_Vertical_Closed","Fuse/Fuseholder_Cylinder-5x20mm_Bulgin_FX0457_Horizontal_Closed","Fuse/Fuseholder_Cylinder-5x20mm_EATON_H15-V-1_Vertical_Closed","Fuse/Fuseholder_Cylinder-5x20mm_EATON_HBV_Vertical_Closed","Fuse/Fuseholder_Cylinder-5x20mm_EATON_HBW_Vertical_Closed","Fuse/Fuseholder_Cylinder-5x20mm_Schurter_0031_8201_Horizontal_Open","Fuse/Fuseholder_Cylinder-5x20mm_Schurter_FAB_0031-355x_Horizontal_Closed","Fuse/Fuseholder_Cylinder-5x20mm_Schurter_FPG4_Vertical_Closed","Fuse/Fuseholder_Cylinder-5x20mm_Schurter_FUP_0031.2510_Horizontal_Closed","Fuse/Fuseholder_Cylinder-5x20mm_Schurter_OGN-SMD_Horizontal_Open","Fuse/Fuseholder_Cylinder-5x20mm_Stelvio-Kontek_PTF78_Horizontal_Open","Fuse/Fuseholder_Cylinder-5x20mm_Wuerth_696103101002-SMD_Horizontal_Open","Fuse/Fuseholder_Cylinder-6.3x32mm_Schurter_0031-8002_Horizontal_Open","Fuse/Fuseholder_Cylinder-6.3x32mm_Schurter_FUP_0031.2520_Horizontal_Closed","Fuse/Fuseholder_Keystone_3555-2","Fuse/Fuseholder_Littelfuse_100_series_5x20mm","Fuse/Fuseholder_Littelfuse_100_series_5x25mm","Fuse/Fuseholder_Littelfuse_100_series_5x30mm","Fuse/Fuseholder_Littelfuse_445_030_series_5x20mm","Fuse/Fuseholder_Littelfuse_445_030_series_5x25mm","Fuse/Fuseholder_Littelfuse_445_030_series_5x30mm","Fuse/Fuseholder_Littelfuse_Nano2_154x","Fuse/Fuseholder_Littelfuse_Nano2_157x","Fuse/Fuseholder_TR5_Littelfuse_No560_No460","Fuse/GDT_Bourns_2038","Fuse/GDT_Yageo_3RxxxxL-6","Fuse/GDT_Yageo_3RxxxxM-6","Heatsink/Heatsink_125x35x50mm_3xFixationM3","Heatsink/Heatsink_35x26mm_1xFixation3mm_Fischer-SK486-35","Heatsink/Heatsink_38x38mm_SpringFixation","Heatsink/Heatsink_62x40mm_2xFixation3mm","Heatsink/Heatsink_AAVID_573300D00010G_TO-263","Heatsink/Heatsink_AAVID_576802B03900G","Heatsink/Heatsink_AAVID_590302B03600G","Heatsink/Heatsink_AAVID_Extruded_531002B00000G_34.9x12.7mm_H25.4mm","Heatsink/Heatsink_AAVID_Extruded_531002B02100G_34.9x12.7mm_H25.4mm","Heatsink/Heatsink_AAVID_Extruded_531002B02500G_34.9x12.7mm_H25.4mm","Heatsink/Heatsink_AAVID_Extruded_531102B00000G_34.9x12.7mm_H38.1mm","Heatsink/Heatsink_AAVID_Extruded_531102B02100G_34.9x12.7mm_H38.1mm","Heatsink/Heatsink_AAVID_Extruded_531102B02500G_34.9x12.7mm_H38.1mm","Heatsink/Heatsink_AAVID_Extruded_531102V02500G_34.9x12.7mm_H38.1mm","Heatsink/Heatsink_AAVID_Extruded_531202B00000G_34.9x12.7mm_H50.8mm","Heatsink/Heatsink_AAVID_Extruded_531202B02100G_34.9x12.7mm_H50.8mm","Heatsink/Heatsink_AAVID_Extruded_531202B02500G_34.9x12.7mm_H50.8mm","Heatsink/Heatsink_AAVID_Extruded_531302B02500G_34.9x12.7mm_H63.5mm","Heatsink/Heatsink_AAVID_TV5G_TO220_Horizontal","Heatsink/Heatsink_Fischer_FK224xx2201_25x8.3mm","Heatsink/Heatsink_Fischer_FK24413D2PAK_26x13mm","Heatsink/Heatsink_Fischer_FK24413DPAK_23x13mm","Heatsink/Heatsink_Fischer_SK104-STC-STIC_35x13mm_2xDrill2.5mm","Heatsink/Heatsink_Fischer_SK104-STCB_35x13mm__2xDrill3.5mm_ScrewM3","Heatsink/Heatsink_Fischer_SK129-STS_42x25mm_2xDrill2.5mm","Heatsink/Heatsink_SheetType_50x7mm_2Fixations","Heatsink/Heatsink_Stonecold_HS-130_30x12mm_2xFixation2.5mm","Heatsink/Heatsink_Stonecold_HS-132_32x14mm_2xFixation1.5mm","Heatsink/Heatsink_Stonecold_HS-S01_13.21x6.35mm","Heatsink/Heatsink_Stonecold_HS-S02_13.21x9.53mm","Heatsink/Heatsink_Stonecold_HS-S03_13.21x12.7mm","Inductor_SMD/L_01005_0402Metric","Inductor_SMD/L_01005_0402Metric_Pad0.57x0.30mm_HandSolder","Inductor_SMD/L_0201_0603Metric","Inductor_SMD/L_0201_0603Metric_Pad0.64x0.40mm_HandSolder","Inductor_SMD/L_0402_1005Metric","Inductor_SMD/L_0402_1005Metric_Pad0.77x0.64mm_HandSolder","Inductor_SMD/L_0603_1608Metric","Inductor_SMD/L_0603_1608Metric_Pad1.05x0.95mm_HandSolder","Inductor_SMD/L_0805_2012Metric","Inductor_SMD/L_0805_2012Metric_Pad1.05x1.20mm_HandSolder","Inductor_SMD/L_10.4x10.4_H4.8","Inductor_SMD/L_1008_2520Metric","Inductor_SMD/L_1008_2520Metric_Pad1.43x2.20mm_HandSolder","Inductor_SMD/L_1206_3216Metric","Inductor_SMD/L_1206_3216Metric_Pad1.22x1.90mm_HandSolder","Inductor_SMD/L_1210_3225Metric","Inductor_SMD/L_1210_3225Metric_Pad1.42x2.65mm_HandSolder","Inductor_SMD/L_12x12mm_H4.5mm","Inductor_SMD/L_12x12mm_H6mm","Inductor_SMD/L_12x12mm_H8mm","Inductor_SMD/L_1806_4516Metric","Inductor_SMD/L_1806_4516Metric_Pad1.45x1.90mm_HandSolder","Inductor_SMD/L_1812_4532Metric","Inductor_SMD/L_1812_4532Metric_Pad1.30x3.40mm_HandSolder","Inductor_SMD/L_2010_5025Metric","Inductor_SMD/L_2010_5025Metric_Pad1.52x2.65mm_HandSolder","Inductor_SMD/L_2512_6332Metric","Inductor_SMD/L_2512_6332Metric_Pad1.52x3.35mm_HandSolder","Inductor_SMD/L_6.3x6.3_H3","Inductor_SMD/L_7.3x7.3_H3.5","Inductor_SMD/L_7.3x7.3_H4.5","Inductor_SMD/L_APV_ANR252010","Inductor_SMD/L_APV_ANR252012","Inductor_SMD/L_APV_ANR3010","Inductor_SMD/L_APV_ANR3012","Inductor_SMD/L_APV_ANR3015","Inductor_SMD/L_APV_ANR4010","Inductor_SMD/L_APV_ANR4012","Inductor_SMD/L_APV_ANR4018","Inductor_SMD/L_APV_ANR4020","Inductor_SMD/L_APV_ANR4026","Inductor_SMD/L_APV_ANR4030","Inductor_SMD/L_APV_ANR5012","Inductor_SMD/L_APV_ANR5020","Inductor_SMD/L_APV_ANR5040","Inductor_SMD/L_APV_ANR5045","Inductor_SMD/L_APV_ANR6020","Inductor_SMD/L_APV_ANR6028","Inductor_SMD/L_APV_ANR6045","Inductor_SMD/L_APV_ANR8040","Inductor_SMD/L_APV_ANR8065","Inductor_SMD/L_APV_APH0412","Inductor_SMD/L_APV_APH0420","Inductor_SMD/L_APV_APH0518","Inductor_SMD/L_APV_APH0530","Inductor_SMD/L_APV_APH0615","Inductor_SMD/L_APV_APH0618","Inductor_SMD/L_APV_APH0620","Inductor_SMD/L_APV_APH0624","Inductor_SMD/L_APV_APH0630","Inductor_SMD/L_APV_APH0640","Inductor_SMD/L_APV_APH0650","Inductor_SMD/L_APV_APH0840","Inductor_SMD/L_APV_APH0850","Inductor_SMD/L_APV_APH1030","Inductor_SMD/L_APV_APH1040","Inductor_SMD/L_APV_APH1050","Inductor_SMD/L_APV_APH1240","Inductor_SMD/L_APV_APH1250","Inductor_SMD/L_APV_APH1260","Inductor_SMD/L_APV_APH1265","Inductor_SMD/L_APV_APH1770","Inductor_SMD/L_APV_APH2213","Inductor_SMD/L_AVX_LMLP07A7","Inductor_SMD/L_Abracon_ASPI-0425","Inductor_SMD/L_Abracon_ASPI-0630LR","Inductor_SMD/L_Abracon_ASPI-3012S","Inductor_SMD/L_Abracon_ASPI-4030S","Inductor_SMD/L_Abracon_ASPIAIG-F4020","Inductor_SMD/L_Bourns-SRN1060","Inductor_SMD/L_Bourns-SRN4018","Inductor_SMD/L_Bourns-SRN6028","Inductor_SMD/L_Bourns-SRN8040_8x8.15mm","Inductor_SMD/L_Bourns-SRR1005","Inductor_SMD/L_Bourns-SRU1028_10.0x10.0mm","Inductor_SMD/L_Bourns-SRU8028_8.0x8.0mm","Inductor_SMD/L_Bourns-SRU8043","Inductor_SMD/L_Bourns_SDR0604","Inductor_SMD/L_Bourns_SDR1806","Inductor_SMD/L_Bourns_SRF1260","Inductor_SMD/L_Bourns_SRN6045TA","Inductor_SMD/L_Bourns_SRN8040TA","Inductor_SMD/L_Bourns_SRP1038C_10.0x10.0mm","Inductor_SMD/L_Bourns_SRP1050WA","Inductor_SMD/L_Bourns_SRP1245A","Inductor_SMD/L_Bourns_SRP1770TA_16.9x16.9mm","Inductor_SMD/L_Bourns_SRP2313AA","Inductor_SMD/L_Bourns_SRP5030T","Inductor_SMD/L_Bourns_SRP6060FA","Inductor_SMD/L_Bourns_SRP7028A_7.3x6.6mm","Inductor_SMD/L_Bourns_SRR1208_12.7x12.7mm","Inductor_SMD/L_Bourns_SRR1210A","Inductor_SMD/L_Bourns_SRR1260","Inductor_SMD/L_Bourns_SRU5016_5.2x5.2mm","Inductor_SMD/L_Cenker_CKCS201610","Inductor_SMD/L_Cenker_CKCS252010","Inductor_SMD/L_Cenker_CKCS252012","Inductor_SMD/L_Cenker_CKCS3012","Inductor_SMD/L_Cenker_CKCS3015","Inductor_SMD/L_Cenker_CKCS4018","Inductor_SMD/L_Cenker_CKCS4020","Inductor_SMD/L_Cenker_CKCS4030","Inductor_SMD/L_Cenker_CKCS5020","Inductor_SMD/L_Cenker_CKCS5040","Inductor_SMD/L_Cenker_CKCS6020","Inductor_SMD/L_Cenker_CKCS6028","Inductor_SMD/L_Cenker_CKCS6045","Inductor_SMD/L_Cenker_CKCS8040","Inductor_SMD/L_Cenker_CKCS8060","Inductor_SMD/L_Cenker_CKCS8080","Inductor_SMD/L_Changjiang_FNR252010S","Inductor_SMD/L_Changjiang_FNR252012S","Inductor_SMD/L_Changjiang_FNR3010S","Inductor_SMD/L_Changjiang_FNR3012S","Inductor_SMD/L_Changjiang_FNR3015S","Inductor_SMD/L_Changjiang_FNR3021S","Inductor_SMD/L_Changjiang_FNR4010S","Inductor_SMD/L_Changjiang_FNR4012S","Inductor_SMD/L_Changjiang_FNR4015S","Inductor_SMD/L_Changjiang_FNR4018S","Inductor_SMD/L_Changjiang_FNR4020S","Inductor_SMD/L_Changjiang_FNR4026S","Inductor_SMD/L_Changjiang_FNR4030S","Inductor_SMD/L_Changjiang_FNR5012S","Inductor_SMD/L_Changjiang_FNR5015S","Inductor_SMD/L_Changjiang_FNR5020S","Inductor_SMD/L_Changjiang_FNR5030S","Inductor_SMD/L_Changjiang_FNR5040S","Inductor_SMD/L_Changjiang_FNR5045S","Inductor_SMD/L_Changjiang_FNR6020S","Inductor_SMD/L_Changjiang_FNR6028S","Inductor_SMD/L_Changjiang_FNR6040S","Inductor_SMD/L_Changjiang_FNR6045S","Inductor_SMD/L_Changjiang_FNR8040S","Inductor_SMD/L_Changjiang_FNR8050S","Inductor_SMD/L_Changjiang_FNR8065S","Inductor_SMD/L_Changjiang_FTC100765D","Inductor_SMD/L_Changjiang_FTC121065S","Inductor_SMD/L_Changjiang_FTC141207S","Inductor_SMD/L_Changjiang_FTC141208S","Inductor_SMD/L_Changjiang_FTC141265S","Inductor_SMD/L_Changjiang_FTC160808S","Inductor_SMD/L_Changjiang_FTC160865S","Inductor_SMD/L_Changjiang_FTC201208S","Inductor_SMD/L_Changjiang_FTC201210S","Inductor_SMD/L_Changjiang_FTC201212S","Inductor_SMD/L_Changjiang_FTC201265S","Inductor_SMD/L_Changjiang_FTC201607S","Inductor_SMD/L_Changjiang_FTC201608S","Inductor_SMD/L_Changjiang_FTC201610D","Inductor_SMD/L_Changjiang_FTC201610S","Inductor_SMD/L_Changjiang_FTC201612S","Inductor_SMD/L_Changjiang_FTC201655S","Inductor_SMD/L_Changjiang_FTC201665S","Inductor_SMD/L_Changjiang_FTC252008S","Inductor_SMD/L_Changjiang_FTC252010S","Inductor_SMD/L_Changjiang_FTC252012S","Inductor_SMD/L_Changjiang_FTC252075S","Inductor_SMD/L_Changjiang_FTC303010D","Inductor_SMD/L_Changjiang_FTC303012D","Inductor_SMD/L_Changjiang_FTC303015D","Inductor_SMD/L_Changjiang_FTC303018D","Inductor_SMD/L_Changjiang_FTC303020D","Inductor_SMD/L_Changjiang_FTC322510S","Inductor_SMD/L_Changjiang_FTC322512S","Inductor_SMD/L_Changjiang_FTC322520S","Inductor_SMD/L_Changjiang_FTC404010S","Inductor_SMD/L_Changjiang_FTC404012S","Inductor_SMD/L_Changjiang_FTC404020S","Inductor_SMD/L_Changjiang_FTC404030S","Inductor_SMD/L_Changjiang_FXL0412","Inductor_SMD/L_Changjiang_FXL0420","Inductor_SMD/L_Changjiang_FXL0518","Inductor_SMD/L_Changjiang_FXL0530","Inductor_SMD/L_Changjiang_FXL0615","Inductor_SMD/L_Changjiang_FXL0618","Inductor_SMD/L_Changjiang_FXL0624","Inductor_SMD/L_Changjiang_FXL0630","Inductor_SMD/L_Changjiang_FXL0640","Inductor_SMD/L_Changjiang_FXL0650","Inductor_SMD/L_Changjiang_FXL0840","Inductor_SMD/L_Changjiang_FXL1030","Inductor_SMD/L_Changjiang_FXL1040","Inductor_SMD/L_Changjiang_FXL1050","Inductor_SMD/L_Changjiang_FXL1340","Inductor_SMD/L_Changjiang_FXL1350","Inductor_SMD/L_Changjiang_FXL1360","Inductor_SMD/L_Changjiang_FXL1365","Inductor_SMD/L_Changjiang_FXL1770","Inductor_SMD/L_Changjiang_FXL2213","Inductor_SMD/L_Chilisin_BMRA00040415","Inductor_SMD/L_Chilisin_BMRA00040420","Inductor_SMD/L_Chilisin_BMRA00050520","Inductor_SMD/L_Chilisin_BMRA00050530","Inductor_SMD/L_Chilisin_BMRB00050512","Inductor_SMD/L_Chilisin_BMRB00050518-B","Inductor_SMD/L_Chilisin_BMRB00050518","Inductor_SMD/L_Chilisin_BMRB00060612","Inductor_SMD/L_Chilisin_BMRB00060618","Inductor_SMD/L_Chilisin_BMRB00060624","Inductor_SMD/L_Chilisin_BMRB00060650","Inductor_SMD/L_Chilisin_BMRF00101040","Inductor_SMD/L_Chilisin_BMRF00131350","Inductor_SMD/L_Chilisin_BMRF00131360","Inductor_SMD/L_Chilisin_BMRF00171770","Inductor_SMD/L_Chilisin_BMRG00101030","Inductor_SMD/L_Chilisin_BMRG00131360","Inductor_SMD/L_Chilisin_BMRx00040412","Inductor_SMD/L_Chilisin_BMRx00050512-B","Inductor_SMD/L_Chilisin_BMRx00050515","Inductor_SMD/L_Chilisin_BMRx00060615","Inductor_SMD/L_Chilisin_BMRx00060630","Inductor_SMD/L_Chilisin_BWVS00322515","Inductor_SMD/L_Chilisin_BWVS00404012","Inductor_SMD/L_Chilisin_BWVS00404018","Inductor_SMD/L_Chilisin_BWVS00404026","Inductor_SMD/L_Chilisin_BWVS00505020","Inductor_SMD/L_Chilisin_BWVS00505030","Inductor_SMD/L_Chilisin_BWVS00505040","Inductor_SMD/L_Chilisin_BWVS00606020","Inductor_SMD/L_Chilisin_BWVS00606028","Inductor_SMD/L_Chilisin_BWVS00606045","Inductor_SMD/L_Chilisin_BWVS00808040","Inductor_SMD/L_Coilcraft_0403HQ_1008Metric","Inductor_SMD/L_Coilcraft_0604HQ_1610Metric","Inductor_SMD/L_Coilcraft_0805HQ_2012Metric","Inductor_SMD/L_Coilcraft_1008HQ_2520Metric","Inductor_SMD/L_Coilcraft_1008HQ_2520Metric_LowProfile","Inductor_SMD/L_Coilcraft_1515SQ-47N","Inductor_SMD/L_Coilcraft_1515SQ-68N","Inductor_SMD/L_Coilcraft_1515SQ-82N","Inductor_SMD/L_Coilcraft_2222SQ-111","Inductor_SMD/L_Coilcraft_2222SQ-131","Inductor_SMD/L_Coilcraft_2222SQ-161","Inductor_SMD/L_Coilcraft_2222SQ-181","Inductor_SMD/L_Coilcraft_2222SQ-221","Inductor_SMD/L_Coilcraft_2222SQ-271","Inductor_SMD/L_Coilcraft_2222SQ-301","Inductor_SMD/L_Coilcraft_2222SQ-90N","Inductor_SMD/L_Coilcraft_2929SQ-331","Inductor_SMD/L_Coilcraft_2929SQ-361","Inductor_SMD/L_Coilcraft_2929SQ-391","Inductor_SMD/L_Coilcraft_2929SQ-431","Inductor_SMD/L_Coilcraft_2929SQ-501","Inductor_SMD/L_Coilcraft_LPS3010","Inductor_SMD/L_Coilcraft_LPS3314","Inductor_SMD/L_Coilcraft_LPS4018","Inductor_SMD/L_Coilcraft_LPS4414","Inductor_SMD/L_Coilcraft_LPS5030","Inductor_SMD/L_Coilcraft_MOS6020-XXX","Inductor_SMD/L_Coilcraft_MSS1038-XXX","Inductor_SMD/L_Coilcraft_MSS1038T-XXX","Inductor_SMD/L_Coilcraft_MSS1048-XXX","Inductor_SMD/L_Coilcraft_MSS1048T-XXX","Inductor_SMD/L_Coilcraft_MSS1210-XXX","Inductor_SMD/L_Coilcraft_MSS1210H-XXX","Inductor_SMD/L_Coilcraft_MSS1246-XXX","Inductor_SMD/L_Coilcraft_MSS1246H-XXX","Inductor_SMD/L_Coilcraft_MSS1246T-XXX","Inductor_SMD/L_Coilcraft_MSS1260-XXX","Inductor_SMD/L_Coilcraft_MSS1260H-XXX","Inductor_SMD/L_Coilcraft_MSS1260T-XXX","Inductor_SMD/L_Coilcraft_MSS1278-XXX","Inductor_SMD/L_Coilcraft_MSS1278H-XXX","Inductor_SMD/L_Coilcraft_MSS1278T-XXX","Inductor_SMD/L_Coilcraft_MSS1514V-XXX","Inductor_SMD/L_Coilcraft_MSS1583-XXX","Inductor_SMD/L_Coilcraft_MSS1812T-XXX","Inductor_SMD/L_Coilcraft_MSS7348-XXX","Inductor_SMD/L_Coilcraft_XAL1010-XXX","Inductor_SMD/L_Coilcraft_XAL1030-XXX","Inductor_SMD/L_Coilcraft_XAL1060-XXX","Inductor_SMD/L_Coilcraft_XAL1350-XXX","Inductor_SMD/L_Coilcraft_XAL1510-103","Inductor_SMD/L_Coilcraft_XAL1510-153","Inductor_SMD/L_Coilcraft_XAL1510-223","Inductor_SMD/L_Coilcraft_XAL1510-333","Inductor_SMD/L_Coilcraft_XAL1510-472","Inductor_SMD/L_Coilcraft_XAL1510-682","Inductor_SMD/L_Coilcraft_XAL1510-822","Inductor_SMD/L_Coilcraft_XAL1513-153","Inductor_SMD/L_Coilcraft_XAL1580-102","Inductor_SMD/L_Coilcraft_XAL1580-132","Inductor_SMD/L_Coilcraft_XAL1580-182","Inductor_SMD/L_Coilcraft_XAL1580-202","Inductor_SMD/L_Coilcraft_XAL1580-302","Inductor_SMD/L_Coilcraft_XAL1580-401","Inductor_SMD/L_Coilcraft_XAL1580-452","Inductor_SMD/L_Coilcraft_XAL1580-532","Inductor_SMD/L_Coilcraft_XAL1580-612","Inductor_SMD/L_Coilcraft_XAL1580-741","Inductor_SMD/L_Coilcraft_XAL4020-XXX","Inductor_SMD/L_Coilcraft_XAL4030-XXX","Inductor_SMD/L_Coilcraft_XAL4040-XXX","Inductor_SMD/L_Coilcraft_XAL5020-XXX","Inductor_SMD/L_Coilcraft_XAL5030-XXX","Inductor_SMD/L_Coilcraft_XAL5050-XXX","Inductor_SMD/L_Coilcraft_XAL6020-XXX","Inductor_SMD/L_Coilcraft_XAL6030-XXX","Inductor_SMD/L_Coilcraft_XAL6060-XXX","Inductor_SMD/L_Coilcraft_XAL7020-102","Inductor_SMD/L_Coilcraft_XAL7020-122","Inductor_SMD/L_Coilcraft_XAL7020-151","Inductor_SMD/L_Coilcraft_XAL7020-152","Inductor_SMD/L_Coilcraft_XAL7020-222","Inductor_SMD/L_Coilcraft_XAL7020-271","Inductor_SMD/L_Coilcraft_XAL7020-331","Inductor_SMD/L_Coilcraft_XAL7020-471","Inductor_SMD/L_Coilcraft_XAL7020-681","Inductor_SMD/L_Coilcraft_XAL7030-102","Inductor_SMD/L_Coilcraft_XAL7030-103","Inductor_SMD/L_Coilcraft_XAL7030-152","Inductor_SMD/L_Coilcraft_XAL7030-161","Inductor_SMD/L_Coilcraft_XAL7030-222","Inductor_SMD/L_Coilcraft_XAL7030-272","Inductor_SMD/L_Coilcraft_XAL7030-301","Inductor_SMD/L_Coilcraft_XAL7030-332","Inductor_SMD/L_Coilcraft_XAL7030-472","Inductor_SMD/L_Coilcraft_XAL7030-562","Inductor_SMD/L_Coilcraft_XAL7030-601","Inductor_SMD/L_Coilcraft_XAL7030-682","Inductor_SMD/L_Coilcraft_XAL7030-822","Inductor_SMD/L_Coilcraft_XAL7050-XXX","Inductor_SMD/L_Coilcraft_XAL7070-XXX","Inductor_SMD/L_Coilcraft_XAL8050-223","Inductor_SMD/L_Coilcraft_XAL8080-XXX","Inductor_SMD/L_Coilcraft_XFL2010","Inductor_SMD/L_Coilcraft_XxL4020","Inductor_SMD/L_Coilcraft_XxL4030","Inductor_SMD/L_Coilcraft_XxL4040","Inductor_SMD/L_CommonModeChoke_Bourns_SRF1260","Inductor_SMD/L_CommonModeChoke_Coilank_ACM1210","Inductor_SMD/L_CommonModeChoke_Coilank_ACM1608","Inductor_SMD/L_CommonModeChoke_Coilank_ACM2012","Inductor_SMD/L_CommonModeChoke_Coilank_ACM2520","Inductor_SMD/L_CommonModeChoke_Coilank_ACM3216","Inductor_SMD/L_CommonModeChoke_Coilank_ACM3225","Inductor_SMD/L_CommonModeChoke_Coilank_ACM4532","Inductor_SMD/L_CommonModeChoke_Coilcraft_0603USB","Inductor_SMD/L_CommonModeChoke_Coilcraft_0805USB","Inductor_SMD/L_CommonModeChoke_Coilcraft_1812CAN","Inductor_SMD/L_CommonModeChoke_Murata_DLW5BTMxxxSQ2x_5x5mm","Inductor_SMD/L_CommonModeChoke_TDK_ACM2520-2P","Inductor_SMD/L_CommonModeChoke_TDK_ACM2520-3P","Inductor_SMD/L_CommonModeChoke_TDK_ACM7060","Inductor_SMD/L_CommonModeChoke_Wuerth_WE-SL5-HC","Inductor_SMD/L_CommonModeChoke_Wuerth_WE-SL5","Inductor_SMD/L_CommonModeChoke_XR_XRGM0905C","Inductor_SMD/L_CommonMode_Bourns_DR331","Inductor_SMD/L_CommonMode_Delevan_4222","Inductor_SMD/L_CommonMode_Wuerth_WE-SL2","Inductor_SMD/L_CommonMode_Wurth_WE-CNSW-1206","Inductor_SMD/L_Eaton_MCL2012V1","Inductor_SMD/L_Fastron_PISN","Inductor_SMD/L_Fastron_PISN_Handsoldering","Inductor_SMD/L_Fastron_PISR","Inductor_SMD/L_Fastron_PISR_Handsoldering","Inductor_SMD/L_Ferrocore_DLG-0302","Inductor_SMD/L_Ferrocore_DLG-0403","Inductor_SMD/L_Ferrocore_DLG-0504","Inductor_SMD/L_Ferrocore_DLG-0703","Inductor_SMD/L_Ferrocore_DLG-0705","Inductor_SMD/L_Ferrocore_DLG-1004","Inductor_SMD/L_Ferrocore_DLG-1005","Inductor_SMD/L_KOHERelec_MDA5030","Inductor_SMD/L_KOHERelec_MDA7030","Inductor_SMD/L_Murata_DEM3512C","Inductor_SMD/L_Murata_DEM3518C","Inductor_SMD/L_Murata_DFE201610P","Inductor_SMD/L_Murata_LQH2MCNxxxx02_2.0x1.6mm","Inductor_SMD/L_Murata_LQH55DN_5.7x5.0mm","Inductor_SMD/L_Neosid_Air-Coil_SML_1turn_HDM0131A","Inductor_SMD/L_Neosid_Air-Coil_SML_2turn_HAM0231A","Inductor_SMD/L_Neosid_Air-Coil_SML_2turn_HDM0231A","Inductor_SMD/L_Neosid_Air-Coil_SML_3turn_HAM0331A","Inductor_SMD/L_Neosid_Air-Coil_SML_3turn_HDM0331A","Inductor_SMD/L_Neosid_Air-Coil_SML_4turn_HAM0431A","Inductor_SMD/L_Neosid_Air-Coil_SML_4turn_HDM0431A","Inductor_SMD/L_Neosid_Air-Coil_SML_5turn_HAM0531A","Inductor_SMD/L_Neosid_Air-Coil_SML_5turn_HDM0531A","Inductor_SMD/L_Neosid_Air-Coil_SML_6-10turn_HAM0631A-HAM1031A","Inductor_SMD/L_Neosid_Air-Coil_SML_6-10turn_HDM0431A-HDM1031A","Inductor_SMD/L_Neosid_Air-Coil_SML_6turn_HAM0631A","Inductor_SMD/L_Neosid_MicroCoil_Ms36-L","Inductor_SMD/L_Neosid_Ms42","Inductor_SMD/L_Neosid_Ms50","Inductor_SMD/L_Neosid_Ms50T","Inductor_SMD/L_Neosid_Ms85","Inductor_SMD/L_Neosid_Ms85T","Inductor_SMD/L_Neosid_Ms95","Inductor_SMD/L_Neosid_Ms95T","Inductor_SMD/L_Neosid_Ms95a","Inductor_SMD/L_Neosid_SM-NE127","Inductor_SMD/L_Neosid_SM-NE127_HandSoldering","Inductor_SMD/L_Neosid_SM-NE150","Inductor_SMD/L_Neosid_SM-NE95H","Inductor_SMD/L_Neosid_SM-PIC0512H","Inductor_SMD/L_Neosid_SM-PIC0602H","Inductor_SMD/L_Neosid_SM-PIC0612H","Inductor_SMD/L_Neosid_SM-PIC1004H","Inductor_SMD/L_Neosid_SMS-ME3010","Inductor_SMD/L_Neosid_SMS-ME3015","Inductor_SMD/L_Neosid_SMs42","Inductor_SMD/L_Neosid_SMs50","Inductor_SMD/L_Neosid_SMs85","Inductor_SMD/L_Neosid_SMs95_SMs95p","Inductor_SMD/L_Panasonic_PCC-M0530M","Inductor_SMD/L_Panasonic_PCC-M0540M","Inductor_SMD/L_Panasonic_PCC-M0630M","Inductor_SMD/L_Panasonic_PCC-M0645M","Inductor_SMD/L_Panasonic_PCC-M0750M","Inductor_SMD/L_Panasonic_PCC-M0754M","Inductor_SMD/L_Panasonic_PCC-M0850M","Inductor_SMD/L_Panasonic_PCC-M0854M","Inductor_SMD/L_Panasonic_PCC-M1040ML","Inductor_SMD/L_Panasonic_PCC-M1050M","Inductor_SMD/L_Panasonic_PCC-M1050ML","Inductor_SMD/L_Panasonic_PCC-M1054M","Inductor_SMD/L_Panasonic_PCC-M1060ML","Inductor_SMD/L_Pulse_P059x","Inductor_SMD/L_Pulse_PA4320","Inductor_SMD/L_Pulse_PA4332","Inductor_SMD/L_Pulse_PA4334","Inductor_SMD/L_Pulse_PA4340","Inductor_SMD/L_Pulse_PA4341","Inductor_SMD/L_Pulse_PA4344","Inductor_SMD/L_Pulse_PA4349","Inductor_SMD/L_Pulse_PA5402","Inductor_SMD/L_SOREDE_SNR.1050_10x10x5mm","Inductor_SMD/L_SXN_SMDRI124","Inductor_SMD/L_SXN_SMDRI125","Inductor_SMD/L_SXN_SMDRI127","Inductor_SMD/L_SXN_SMDRI62","Inductor_SMD/L_SXN_SMDRI64","Inductor_SMD/L_SXN_SMDRI73","Inductor_SMD/L_SXN_SMDRI74","Inductor_SMD/L_SXN_SMMS1770","Inductor_SMD/L_Sagami_CER1242B","Inductor_SMD/L_Sagami_CER1257B","Inductor_SMD/L_Sagami_CER1277B","Inductor_SMD/L_Sagami_CWR1242C","Inductor_SMD/L_Sagami_CWR1257C","Inductor_SMD/L_Sagami_CWR1277C","Inductor_SMD/L_SigTra_SC3316F","Inductor_SMD/L_Sumida_CDMC6D28_7.25x6.5mm","Inductor_SMD/L_Sumida_CR75","Inductor_SMD/L_Sunlord_MWSA0402S","Inductor_SMD/L_Sunlord_MWSA0412S","Inductor_SMD/L_Sunlord_MWSA0503S","Inductor_SMD/L_Sunlord_MWSA0518S","Inductor_SMD/L_Sunlord_MWSA0602S","Inductor_SMD/L_Sunlord_MWSA0603S","Inductor_SMD/L_Sunlord_MWSA0604S","Inductor_SMD/L_Sunlord_MWSA0605S","Inductor_SMD/L_Sunlord_MWSA0615S","Inductor_SMD/L_Sunlord_MWSA0618S","Inductor_SMD/L_Sunlord_MWSA0624S","Inductor_SMD/L_Sunlord_MWSA0804S","Inductor_SMD/L_Sunlord_MWSA1003S","Inductor_SMD/L_Sunlord_MWSA1004S","Inductor_SMD/L_Sunlord_MWSA1005S","Inductor_SMD/L_Sunlord_MWSA1204S-100","Inductor_SMD/L_Sunlord_MWSA1204S-150","Inductor_SMD/L_Sunlord_MWSA1204S-1R0","Inductor_SMD/L_Sunlord_MWSA1204S-1R5","Inductor_SMD/L_Sunlord_MWSA1204S-220","Inductor_SMD/L_Sunlord_MWSA1204S-2R2","Inductor_SMD/L_Sunlord_MWSA1204S-3R3","Inductor_SMD/L_Sunlord_MWSA1204S-4R7","Inductor_SMD/L_Sunlord_MWSA1204S-6R8","Inductor_SMD/L_Sunlord_MWSA1204S-R22","Inductor_SMD/L_Sunlord_MWSA1204S-R47","Inductor_SMD/L_Sunlord_MWSA1204S-R68","Inductor_SMD/L_Sunlord_MWSA1204S-R82","Inductor_SMD/L_Sunlord_MWSA1205S-100","Inductor_SMD/L_Sunlord_MWSA1205S-150","Inductor_SMD/L_Sunlord_MWSA1205S-1R0","Inductor_SMD/L_Sunlord_MWSA1205S-1R5","Inductor_SMD/L_Sunlord_MWSA1205S-220","Inductor_SMD/L_Sunlord_MWSA1205S-2R2","Inductor_SMD/L_Sunlord_MWSA1205S-330","Inductor_SMD/L_Sunlord_MWSA1205S-3R3","Inductor_SMD/L_Sunlord_MWSA1205S-470","Inductor_SMD/L_Sunlord_MWSA1205S-4R7","Inductor_SMD/L_Sunlord_MWSA1205S-6R8","Inductor_SMD/L_Sunlord_MWSA1205S-R22","Inductor_SMD/L_Sunlord_MWSA1205S-R36","Inductor_SMD/L_Sunlord_MWSA1205S-R50","Inductor_SMD/L_Sunlord_MWSA1205S-R68","Inductor_SMD/L_Sunlord_MWSA1205S-R82","Inductor_SMD/L_Sunlord_MWSA1206S-100","Inductor_SMD/L_Sunlord_MWSA1206S-101","Inductor_SMD/L_Sunlord_MWSA1206S-120","Inductor_SMD/L_Sunlord_MWSA1206S-121","Inductor_SMD/L_Sunlord_MWSA1206S-150","Inductor_SMD/L_Sunlord_MWSA1206S-151","Inductor_SMD/L_Sunlord_MWSA1206S-180","Inductor_SMD/L_Sunlord_MWSA1206S-1R5","Inductor_SMD/L_Sunlord_MWSA1206S-220","Inductor_SMD/L_Sunlord_MWSA1206S-270","Inductor_SMD/L_Sunlord_MWSA1206S-2R2","Inductor_SMD/L_Sunlord_MWSA1206S-330","Inductor_SMD/L_Sunlord_MWSA1206S-3R3","Inductor_SMD/L_Sunlord_MWSA1206S-470","Inductor_SMD/L_Sunlord_MWSA1206S-4R7","Inductor_SMD/L_Sunlord_MWSA1206S-5R6","Inductor_SMD/L_Sunlord_MWSA1206S-680","Inductor_SMD/L_Sunlord_MWSA1206S-6R8","Inductor_SMD/L_Sunlord_MWSA1206S-8R2","Inductor_SMD/L_Sunlord_MWSA1206S-R68","Inductor_SMD/L_Sunlord_MWSA1265S","Inductor_SMD/L_Sunlord_MWSA1707S","Inductor_SMD/L_Sunlord_MWSA2213S","Inductor_SMD/L_Sunlord_SWPA252010S","Inductor_SMD/L_Sunlord_SWPA252012S","Inductor_SMD/L_Sunlord_SWPA3010S","Inductor_SMD/L_Sunlord_SWPA3012S","Inductor_SMD/L_Sunlord_SWPA3015S","Inductor_SMD/L_Sunlord_SWPA4010S","Inductor_SMD/L_Sunlord_SWPA4012S","Inductor_SMD/L_Sunlord_SWPA4018S","Inductor_SMD/L_Sunlord_SWPA4020S","Inductor_SMD/L_Sunlord_SWPA4026S","Inductor_SMD/L_Sunlord_SWPA4030S","Inductor_SMD/L_Sunlord_SWPA5012S","Inductor_SMD/L_Sunlord_SWPA5020S","Inductor_SMD/L_Sunlord_SWPA5040S","Inductor_SMD/L_Sunlord_SWPA6020S","Inductor_SMD/L_Sunlord_SWPA6028S","Inductor_SMD/L_Sunlord_SWPA6040S","Inductor_SMD/L_Sunlord_SWPA6045S","Inductor_SMD/L_Sunlord_SWPA8040S","Inductor_SMD/L_Sunlord_SWRB1204S","Inductor_SMD/L_Sunlord_SWRB1205S","Inductor_SMD/L_Sunlord_SWRB1207S","Inductor_SMD/L_TDK_MLZ1608","Inductor_SMD/L_TDK_MLZ2012_h0.85mm","Inductor_SMD/L_TDK_MLZ2012_h1.25mm","Inductor_SMD/L_TDK_NLV25_2.5x2.0mm","Inductor_SMD/L_TDK_NLV32_3.2x2.5mm","Inductor_SMD/L_TDK_SLF10145","Inductor_SMD/L_TDK_SLF10165","Inductor_SMD/L_TDK_SLF12555","Inductor_SMD/L_TDK_SLF12565","Inductor_SMD/L_TDK_SLF12575","Inductor_SMD/L_TDK_SLF6025","Inductor_SMD/L_TDK_SLF6028","Inductor_SMD/L_TDK_SLF6045","Inductor_SMD/L_TDK_SLF7032","Inductor_SMD/L_TDK_SLF7045","Inductor_SMD/L_TDK_SLF7055","Inductor_SMD/L_TDK_VLF10040","Inductor_SMD/L_TDK_VLP8040","Inductor_SMD/L_TDK_VLS6045EX_VLS6045AF","Inductor_SMD/L_TaiTech_TMPC1265_13.5x12.5mm","Inductor_SMD/L_Taiyo-Yuden_BK_Array_1206_3216Metric","Inductor_SMD/L_Taiyo-Yuden_MD-1616","Inductor_SMD/L_Taiyo-Yuden_MD-2020","Inductor_SMD/L_Taiyo-Yuden_MD-3030","Inductor_SMD/L_Taiyo-Yuden_MD-4040","Inductor_SMD/L_Taiyo-Yuden_MD-5050","Inductor_SMD/L_Taiyo-Yuden_NR-10050_9.8x10.0mm","Inductor_SMD/L_Taiyo-Yuden_NR-10050_9.8x10.0mm_HandSoldering","Inductor_SMD/L_Taiyo-Yuden_NR-20xx","Inductor_SMD/L_Taiyo-Yuden_NR-20xx_HandSoldering","Inductor_SMD/L_Taiyo-Yuden_NR-24xx","Inductor_SMD/L_Taiyo-Yuden_NR-24xx_HandSoldering","Inductor_SMD/L_Taiyo-Yuden_NR-30xx","Inductor_SMD/L_Taiyo-Yuden_NR-30xx_HandSoldering","Inductor_SMD/L_Taiyo-Yuden_NR-40xx","Inductor_SMD/L_Taiyo-Yuden_NR-40xx_HandSoldering","Inductor_SMD/L_Taiyo-Yuden_NR-50xx","Inductor_SMD/L_Taiyo-Yuden_NR-50xx_HandSoldering","Inductor_SMD/L_Taiyo-Yuden_NR-60xx","Inductor_SMD/L_Taiyo-Yuden_NR-60xx_HandSoldering","Inductor_SMD/L_Taiyo-Yuden_NR-80xx","Inductor_SMD/L_Taiyo-Yuden_NR-80xx_HandSoldering","Inductor_SMD/L_TechFuse_SL0420","Inductor_SMD/L_TechFuse_SL0520","Inductor_SMD/L_TechFuse_SL0530","Inductor_SMD/L_TechFuse_SL0620","Inductor_SMD/L_TechFuse_SL0624","Inductor_SMD/L_TechFuse_SL0630","Inductor_SMD/L_TechFuse_SL0650","Inductor_SMD/L_TechFuse_SL1040","Inductor_SMD/L_TechFuse_SL1050","Inductor_SMD/L_TechFuse_SL1250","Inductor_SMD/L_TechFuse_SL1265","Inductor_SMD/L_TracoPower_TCK-047_5.2x5.8mm","Inductor_SMD/L_TracoPower_TCK-141","Inductor_SMD/L_Vishay_IFSC-1515AH_4x4x1.8mm","Inductor_SMD/L_Vishay_IHLP-1212","Inductor_SMD/L_Vishay_IHLP-1616","Inductor_SMD/L_Vishay_IHLP-2020","Inductor_SMD/L_Vishay_IHLP-2525","Inductor_SMD/L_Vishay_IHLP-3232","Inductor_SMD/L_Vishay_IHLP-4040","Inductor_SMD/L_Vishay_IHLP-5050","Inductor_SMD/L_Vishay_IHLP-6767","Inductor_SMD/L_Vishay_IHSM-3825","Inductor_SMD/L_Vishay_IHSM-4825","Inductor_SMD/L_Vishay_IHSM-5832","Inductor_SMD/L_Vishay_IHSM-7832","Inductor_SMD/L_Walsin_WLFM201209x","Inductor_SMD/L_Walsin_WLFM201609x","Inductor_SMD/L_Walsin_WLFM252009x","Inductor_SMD/L_Wuerth_HCF-2013","Inductor_SMD/L_Wuerth_HCF-2815","Inductor_SMD/L_Wuerth_HCF-2818","Inductor_SMD/L_Wuerth_HCI-1030","Inductor_SMD/L_Wuerth_HCI-1040","Inductor_SMD/L_Wuerth_HCI-1050","Inductor_SMD/L_Wuerth_HCI-1335","Inductor_SMD/L_Wuerth_HCI-1350","Inductor_SMD/L_Wuerth_HCI-1365","Inductor_SMD/L_Wuerth_HCI-1890","Inductor_SMD/L_Wuerth_HCI-2212","Inductor_SMD/L_Wuerth_HCI-5040","Inductor_SMD/L_Wuerth_HCI-7030","Inductor_SMD/L_Wuerth_HCI-7040","Inductor_SMD/L_Wuerth_HCI-7050","Inductor_SMD/L_Wuerth_HCM-1050","Inductor_SMD/L_Wuerth_HCM-1052","Inductor_SMD/L_Wuerth_HCM-1070","Inductor_SMD/L_Wuerth_HCM-1078","Inductor_SMD/L_Wuerth_HCM-1190","Inductor_SMD/L_Wuerth_HCM-1240","Inductor_SMD/L_Wuerth_HCM-1350","Inductor_SMD/L_Wuerth_HCM-1390","Inductor_SMD/L_Wuerth_HCM-7050","Inductor_SMD/L_Wuerth_HCM-7070","Inductor_SMD/L_Wuerth_LQFS-3818","Inductor_SMD/L_Wuerth_LQFS-4818","Inductor_SMD/L_Wuerth_LQFS-4828","Inductor_SMD/L_Wuerth_MAPI-1610","Inductor_SMD/L_Wuerth_MAPI-2010","Inductor_SMD/L_Wuerth_MAPI-2506","Inductor_SMD/L_Wuerth_MAPI-2508","Inductor_SMD/L_Wuerth_MAPI-2510","Inductor_SMD/L_Wuerth_MAPI-2512","Inductor_SMD/L_Wuerth_MAPI-3010","Inductor_SMD/L_Wuerth_MAPI-3012","Inductor_SMD/L_Wuerth_MAPI-3015","Inductor_SMD/L_Wuerth_MAPI-3020","Inductor_SMD/L_Wuerth_MAPI-4020","Inductor_SMD/L_Wuerth_MAPI-4030","Inductor_SMD/L_Wuerth_MAPI-5020","Inductor_SMD/L_Wuerth_MAPI-5030","Inductor_SMD/L_Wuerth_PMCI-160808","Inductor_SMD/L_Wuerth_PMCI-201210","Inductor_SMD/L_Wuerth_PMCI-201610","Inductor_SMD/L_Wuerth_PMCI-252010","Inductor_SMD/L_Wuerth_PMCI-252012","Inductor_SMD/L_Wuerth_PMCI-322510","Inductor_SMD/L_Wuerth_PMCI-322512","Inductor_SMD/L_Wuerth_PMCI-322515","Inductor_SMD/L_Wuerth_PMFI-201610","Inductor_SMD/L_Wuerth_PMFI-201610_PMCI-compatible","Inductor_SMD/L_Wuerth_PMFI-252012","Inductor_SMD/L_Wuerth_PMFI-252012_PMCI-compatible","Inductor_SMD/L_Wuerth_PMFI-322512","Inductor_SMD/L_Wuerth_PMFI-322512_PMCI-compatible","Inductor_SMD/L_Wuerth_PMFI-353220","Inductor_SMD/L_Wuerth_WE-DD-Typ-L-Typ-XL-Typ-XXL","Inductor_SMD/L_Wuerth_WE-DD-Typ-M-Typ-S","Inductor_SMD/L_Wuerth_WE-GF-1210","Inductor_SMD/L_Wuerth_WE-PD-Typ-7345","Inductor_SMD/L_Wuerth_WE-PD-Typ-LS","Inductor_SMD/L_Wuerth_WE-PD-Typ-LS_Handsoldering","Inductor_SMD/L_Wuerth_WE-PD-Typ-M-Typ-S","Inductor_SMD/L_Wuerth_WE-PD-Typ-M-Typ-S_Handsoldering","Inductor_SMD/L_Wuerth_WE-PD2-Typ-L","Inductor_SMD/L_Wuerth_WE-PD2-Typ-MS","Inductor_SMD/L_Wuerth_WE-PD2-Typ-XL","Inductor_SMD/L_Wuerth_WE-PD4-Typ-X","Inductor_SMD/L_Wuerth_WE-PDF","Inductor_SMD/L_Wuerth_WE-PDF_Handsoldering","Inductor_SMD/L_Wuerth_WE-TPC-3816","Inductor_SMD/L_Wuerth_XHMI-6060","Inductor_SMD/L_Wuerth_XHMI-8080","Inductor_SMD/L_Wurth_WE-CAIR-5910","Inductor_SMD_Wurth/L_Wurth_WE-LQSH-2010","Inductor_SMD_Wurth/L_Wurth_WE-LQSH-2512","Inductor_SMD_Wurth/L_Wurth_WE-LQSH-3012","Inductor_SMD_Wurth/L_Wurth_WE-LQSH-4020","Inductor_THT/Choke_EPCOS_B82722A","Inductor_THT/Choke_Schaffner_RN102-04-14.0x14.0mm","Inductor_THT/Choke_Schaffner_RN112-04-17.7x17.1mm","Inductor_THT/Choke_Schaffner_RN114-04-22.5x21.5mm","Inductor_THT/Choke_Schaffner_RN116-04-22.5x21.5mm","Inductor_THT/Choke_Schaffner_RN122-04-28.0x27.0mm","Inductor_THT/Choke_Schaffner_RN142-04-33.1x32.5mm","Inductor_THT/Choke_Schaffner_RN143-04-33.1x32.5mm","Inductor_THT/Choke_Schaffner_RN152-04-43.0x41.8mm","Inductor_THT/Choke_Schaffner_RN202-04-8.8x18.2mm","Inductor_THT/Choke_Schaffner_RN204-04-9.0x14.0mm","Inductor_THT/Choke_Schaffner_RN212-04-12.5x18.0mm","Inductor_THT/Choke_Schaffner_RN214-04-15.5x23.0mm","Inductor_THT/Choke_Schaffner_RN216-04-15.5x23.0mm","Inductor_THT/Choke_Schaffner_RN218-04-12.5x18.0mm","Inductor_THT/Choke_Schaffner_RN222-04-18.0x31.0mm","Inductor_THT/Choke_Schaffner_RN232-04-18.0x31.0mm","Inductor_THT/Choke_Schaffner_RN242-04-18.0x31.0mm","Inductor_THT/L_Axial_L11.0mm_D4.5mm_P15.24mm_Horizontal_Fastron_MECC","Inductor_THT/L_Axial_L11.0mm_D4.5mm_P5.08mm_Vertical_Fastron_MECC","Inductor_THT/L_Axial_L11.0mm_D4.5mm_P7.62mm_Vertical_Fastron_MECC","Inductor_THT/L_Axial_L12.0mm_D5.0mm_P15.24mm_Horizontal_Fastron_MISC","Inductor_THT/L_Axial_L12.0mm_D5.0mm_P5.08mm_Vertical_Fastron_MISC","Inductor_THT/L_Axial_L12.0mm_D5.0mm_P7.62mm_Vertical_Fastron_MISC","Inductor_THT/L_Axial_L12.8mm_D5.8mm_P20.32mm_Horizontal_Fastron_HBCC","Inductor_THT/L_Axial_L12.8mm_D5.8mm_P25.40mm_Horizontal_Fastron_HBCC","Inductor_THT/L_Axial_L12.8mm_D5.8mm_P5.08mm_Vertical_Fastron_HBCC","Inductor_THT/L_Axial_L12.8mm_D5.8mm_P7.62mm_Vertical_Fastron_HBCC","Inductor_THT/L_Axial_L13.0mm_D4.5mm_P15.24mm_Horizontal_Fastron_HCCC","Inductor_THT/L_Axial_L13.0mm_D4.5mm_P5.08mm_Vertical_Fastron_HCCC","Inductor_THT/L_Axial_L13.0mm_D4.5mm_P7.62mm_Vertical_Fastron_HCCC","Inductor_THT/L_Axial_L14.0mm_D4.5mm_P15.24mm_Horizontal_Fastron_LACC","Inductor_THT/L_Axial_L14.0mm_D4.5mm_P5.08mm_Vertical_Fastron_LACC","Inductor_THT/L_Axial_L14.0mm_D4.5mm_P7.62mm_Vertical_Fastron_LACC","Inductor_THT/L_Axial_L14.5mm_D5.8mm_P20.32mm_Horizontal_Fastron_HBCC","Inductor_THT/L_Axial_L14.5mm_D5.8mm_P25.40mm_Horizontal_Fastron_HBCC","Inductor_THT/L_Axial_L14.5mm_D5.8mm_P5.08mm_Vertical_Fastron_HBCC","Inductor_THT/L_Axial_L14.5mm_D5.8mm_P7.62mm_Vertical_Fastron_HBCC","Inductor_THT/L_Axial_L16.0mm_D6.3mm_P20.32mm_Horizontal_Fastron_VHBCC","Inductor_THT/L_Axial_L16.0mm_D6.3mm_P25.40mm_Horizontal_Fastron_VHBCC","Inductor_THT/L_Axial_L16.0mm_D6.3mm_P5.08mm_Vertical_Fastron_VHBCC","Inductor_THT/L_Axial_L16.0mm_D6.3mm_P7.62mm_Vertical_Fastron_VHBCC","Inductor_THT/L_Axial_L16.0mm_D7.5mm_P20.32mm_Horizontal_Fastron_XHBCC","Inductor_THT/L_Axial_L16.0mm_D7.5mm_P25.40mm_Horizontal_Fastron_XHBCC","Inductor_THT/L_Axial_L16.0mm_D7.5mm_P5.08mm_Vertical_Fastron_XHBCC","Inductor_THT/L_Axial_L16.0mm_D7.5mm_P7.62mm_Vertical_Fastron_XHBCC","Inductor_THT/L_Axial_L16.0mm_D9.5mm_P20.32mm_Horizontal_Vishay_IM-10-37","Inductor_THT/L_Axial_L16.0mm_D9.5mm_P5.08mm_Vertical_Vishay_IM-10-37","Inductor_THT/L_Axial_L17.5mm_D12.0mm_P20.32mm_Horizontal_Vishay_IM-10-46","Inductor_THT/L_Axial_L17.5mm_D12.0mm_P7.62mm_Vertical_Vishay_IM-10-46","Inductor_THT/L_Axial_L20.0mm_D8.0mm_P25.40mm_Horizontal","Inductor_THT/L_Axial_L20.0mm_D8.0mm_P5.08mm_Vertical","Inductor_THT/L_Axial_L20.0mm_D8.0mm_P7.62mm_Vertical","Inductor_THT/L_Axial_L20.3mm_D12.1mm_P28.50mm_Horizontal_Vishay_IHA-101","Inductor_THT/L_Axial_L20.3mm_D12.1mm_P7.62mm_Vertical_Vishay_IHA-101","Inductor_THT/L_Axial_L20.3mm_D12.7mm_P25.40mm_Horizontal_Vishay_IHA-201","Inductor_THT/L_Axial_L20.3mm_D12.7mm_P7.62mm_Vertical_Vishay_IHA-201","Inductor_THT/L_Axial_L23.4mm_D12.7mm_P32.00mm_Horizontal_Vishay_IHA-203","Inductor_THT/L_Axial_L23.4mm_D12.7mm_P7.62mm_Vertical_Vishay_IHA-203","Inductor_THT/L_Axial_L24.0mm_D7.1mm_P30.48mm_Horizontal_Vishay_IM-10-28","Inductor_THT/L_Axial_L24.0mm_D7.1mm_P5.08mm_Vertical_Vishay_IM-10-28","Inductor_THT/L_Axial_L24.0mm_D7.5mm_P27.94mm_Horizontal_Fastron_MESC","Inductor_THT/L_Axial_L24.0mm_D7.5mm_P5.08mm_Vertical_Fastron_MESC","Inductor_THT/L_Axial_L24.0mm_D7.5mm_P7.62mm_Vertical_Fastron_MESC","Inductor_THT/L_Axial_L26.0mm_D10.0mm_P30.48mm_Horizontal_Fastron_77A","Inductor_THT/L_Axial_L26.0mm_D10.0mm_P5.08mm_Vertical_Fastron_77A","Inductor_THT/L_Axial_L26.0mm_D10.0mm_P7.62mm_Vertical_Fastron_77A","Inductor_THT/L_Axial_L26.0mm_D11.0mm_P30.48mm_Horizontal_Fastron_77A","Inductor_THT/L_Axial_L26.0mm_D11.0mm_P5.08mm_Vertical_Fastron_77A","Inductor_THT/L_Axial_L26.0mm_D11.0mm_P7.62mm_Vertical_Fastron_77A","Inductor_THT/L_Axial_L26.0mm_D9.0mm_P30.48mm_Horizontal_Fastron_77A","Inductor_THT/L_Axial_L26.0mm_D9.0mm_P5.08mm_Vertical_Fastron_77A","Inductor_THT/L_Axial_L26.0mm_D9.0mm_P7.62mm_Vertical_Fastron_77A","Inductor_THT/L_Axial_L26.7mm_D12.1mm_P35.00mm_Horizontal_Vishay_IHA-103","Inductor_THT/L_Axial_L26.7mm_D12.1mm_P7.62mm_Vertical_Vishay_IHA-103","Inductor_THT/L_Axial_L26.7mm_D14.0mm_P35.00mm_Horizontal_Vishay_IHA-104","Inductor_THT/L_Axial_L26.7mm_D14.0mm_P7.62mm_Vertical_Vishay_IHA-104","Inductor_THT/L_Axial_L29.9mm_D14.0mm_P38.00mm_Horizontal_Vishay_IHA-105","Inductor_THT/L_Axial_L29.9mm_D14.0mm_P7.62mm_Vertical_Vishay_IHA-105","Inductor_THT/L_Axial_L30.0mm_D8.0mm_P35.56mm_Horizontal_Fastron_77A","Inductor_THT/L_Axial_L30.0mm_D8.0mm_P5.08mm_Vertical_Fastron_77A","Inductor_THT/L_Axial_L30.0mm_D8.0mm_P7.62mm_Vertical_Fastron_77A","Inductor_THT/L_Axial_L5.0mm_D3.6mm_P10.00mm_Horizontal_Murata_BL01RN1A2A2","Inductor_THT/L_Axial_L5.3mm_D2.2mm_P10.16mm_Horizontal_Vishay_IM-1","Inductor_THT/L_Axial_L5.3mm_D2.2mm_P2.54mm_Vertical_Vishay_IM-1","Inductor_THT/L_Axial_L5.3mm_D2.2mm_P7.62mm_Horizontal_Vishay_IM-1","Inductor_THT/L_Axial_L6.6mm_D2.7mm_P10.16mm_Horizontal_Vishay_IM-2","Inductor_THT/L_Axial_L6.6mm_D2.7mm_P2.54mm_Vertical_Vishay_IM-2","Inductor_THT/L_Axial_L7.0mm_D3.3mm_P10.16mm_Horizontal_Fastron_MICC","Inductor_THT/L_Axial_L7.0mm_D3.3mm_P12.70mm_Horizontal_Fastron_MICC","Inductor_THT/L_Axial_L7.0mm_D3.3mm_P2.54mm_Vertical_Fastron_MICC","Inductor_THT/L_Axial_L7.0mm_D3.3mm_P5.08mm_Vertical_Fastron_MICC","Inductor_THT/L_Axial_L9.5mm_D4.0mm_P12.70mm_Horizontal_Fastron_SMCC","Inductor_THT/L_Axial_L9.5mm_D4.0mm_P15.24mm_Horizontal_Fastron_SMCC","Inductor_THT/L_Axial_L9.5mm_D4.0mm_P2.54mm_Vertical_Fastron_SMCC","Inductor_THT/L_Axial_L9.5mm_D4.0mm_P5.08mm_Vertical_Fastron_SMCC","Inductor_THT/L_CommonMode_PulseElectronics_PH9455x105NL_1","Inductor_THT/L_CommonMode_PulseElectronics_PH9455x155NL_1","Inductor_THT/L_CommonMode_PulseElectronics_PH9455x205NL_1","Inductor_THT/L_CommonMode_PulseElectronics_PH9455x405NL_1","Inductor_THT/L_CommonMode_PulseElectronics_PH9455x705NL_1","Inductor_THT/L_CommonMode_PulseElectronics_PH9455xxx6NL_2","Inductor_THT/L_CommonMode_TDK_B82746S4143A040","Inductor_THT/L_CommonMode_TDK_B82746S6702A040","Inductor_THT/L_CommonMode_TDK_B82747E6163A040","Inductor_THT/L_CommonMode_TDK_B82747E6203A040","Inductor_THT/L_CommonMode_TDK_B82747E6253A040","Inductor_THT/L_CommonMode_TDK_B82747E6353A040","Inductor_THT/L_CommonMode_TDK_B82767S4123N030","Inductor_THT/L_CommonMode_TDK_B82767S4193N030","Inductor_THT/L_CommonMode_TDK_B82767S4263N030","Inductor_THT/L_CommonMode_Toroid_Vertical_L13.0mm_W7.5mm_Px6.00mm_Py5.00mm_PRODTech_PDMCAT1065","Inductor_THT/L_CommonMode_Toroid_Vertical_L19.3mm_W10.8mm_Px6.35mm_Py15.24mm_Bourns_8100","Inductor_THT/L_CommonMode_Toroid_Vertical_L21.0mm_W10.0mm_Px5.08mm_Py12.70mm_Murata_5100","Inductor_THT/L_CommonMode_Toroid_Vertical_L22.0mm_W12.0mm_Px9.00mm_Py8.00mm_PRODTech_PDMCAT18107-102ML","Inductor_THT/L_CommonMode_Toroid_Vertical_L22.0mm_W12.0mm_Px9.00mm_Py8.00mm_PRODTech_PDMCAT18107-103ML","Inductor_THT/L_CommonMode_Toroid_Vertical_L22.0mm_W12.0mm_Px9.00mm_Py8.00mm_PRODTech_PDMCAT18107-202ML","Inductor_THT/L_CommonMode_Toroid_Vertical_L22.0mm_W12.0mm_Px9.00mm_Py8.00mm_PRODTech_PDMCAT18107-203ML","Inductor_THT/L_CommonMode_Toroid_Vertical_L22.0mm_W12.0mm_Px9.00mm_Py8.00mm_PRODTech_PDMCAT18107-502ML","Inductor_THT/L_CommonMode_Toroid_Vertical_L24.0mm_W16.3mm_Px10.16mm_Py20.32mm_Murata_5200","Inductor_THT/L_CommonMode_Toroid_Vertical_L30.5mm_W15.2mm_Px10.16mm_Py20.32mm_Bourns_8100","Inductor_THT/L_CommonMode_Toroid_Vertical_L34.3mm_W20.3mm_Px15.24mm_Py22.86mm_Bourns_8100","Inductor_THT/L_CommonMode_Toroid_Vertical_L36.8mm_W20.3mm_Px15.24mm_Py22.86mm_Bourns_8100","Inductor_THT/L_CommonMode_Toroid_Vertical_L38.1mm_W20.3mm_Px15.24mm_Py22.86mm_Bourns_8100","Inductor_THT/L_CommonMode_Toroid_Vertical_L39.4mm_W20.3mm_Px15.24mm_Py22.86mm_Bourns_8100","Inductor_THT/L_CommonMode_Toroid_Vertical_L41.9mm_W20.3mm_Px15.24mm_Py22.86mm_Bourns_8100","Inductor_THT/L_CommonMode_Toroid_Vertical_L43.2mm_W22.9mm_Px17.78mm_Py30.48mm_Bourns_8100","Inductor_THT/L_CommonMode_VAC_T60405-S6123-X140","Inductor_THT/L_CommonMode_VAC_T60405-S6123-X240","Inductor_THT/L_CommonMode_VAC_T60405-S6123-X402","Inductor_THT/L_CommonMode_Wuerth_WE-CMB-L","Inductor_THT/L_CommonMode_Wuerth_WE-CMB-M","Inductor_THT/L_CommonMode_Wuerth_WE-CMB-S","Inductor_THT/L_CommonMode_Wuerth_WE-CMB-XL","Inductor_THT/L_CommonMode_Wuerth_WE-CMB-XS","Inductor_THT/L_CommonMode_Wuerth_WE-CMB-XXL","Inductor_THT/L_Mount_Lodestone_VTM120","Inductor_THT/L_Mount_Lodestone_VTM160","Inductor_THT/L_Mount_Lodestone_VTM254","Inductor_THT/L_Mount_Lodestone_VTM280","Inductor_THT/L_Mount_Lodestone_VTM950-6","Inductor_THT/L_Radial_D10.0mm_P5.00mm_Fastron_07M","Inductor_THT/L_Radial_D10.0mm_P5.00mm_Fastron_07P","Inductor_THT/L_Radial_D10.0mm_P5.00mm_Neosid_SD12_style3","Inductor_THT/L_Radial_D10.0mm_P5.00mm_Neosid_SD12k_style3","Inductor_THT/L_Radial_D10.5mm_P4.00x5.00mm_Murata_1200RS","Inductor_THT/L_Radial_D10.5mm_P5.00mm_Abacron_AISR-01","Inductor_THT/L_Radial_D12.0mm_P10.00mm_Neosid_SD12_style1","Inductor_THT/L_Radial_D12.0mm_P10.00mm_Neosid_SD12k_style1","Inductor_THT/L_Radial_D12.0mm_P5.00mm_Fastron_11P","Inductor_THT/L_Radial_D12.0mm_P5.00mm_Neosid_SD12_style2","Inductor_THT/L_Radial_D12.0mm_P5.00mm_Neosid_SD12k_style2","Inductor_THT/L_Radial_D12.0mm_P6.00mm_Murata_1900R","Inductor_THT/L_Radial_D12.5mm_P7.00mm_Fastron_09HCP","Inductor_THT/L_Radial_D12.5mm_P9.00mm_Fastron_09HCP","Inductor_THT/L_Radial_D13.5mm_P7.00mm_Fastron_09HCP","Inductor_THT/L_Radial_D14.2mm_P10.00mm_Neosid_SD14","Inductor_THT/L_Radial_D16.0mm_P10.00mm_Panasonic_15E-L","Inductor_THT/L_Radial_D16.8mm_P11.43mm_Vishay_IHB-1","Inductor_THT/L_Radial_D16.8mm_P12.07mm_Vishay_IHB-1","Inductor_THT/L_Radial_D16.8mm_P12.70mm_Vishay_IHB-1","Inductor_THT/L_Radial_D18.0mm_P10.00mm","Inductor_THT/L_Radial_D21.0mm_P14.61mm_Vishay_IHB-2","Inductor_THT/L_Radial_D21.0mm_P15.00mm_Vishay_IHB-2","Inductor_THT/L_Radial_D21.0mm_P15.24mm_Vishay_IHB-2","Inductor_THT/L_Radial_D21.0mm_P15.75mm_Vishay_IHB-2","Inductor_THT/L_Radial_D21.0mm_P19.00mm","Inductor_THT/L_Radial_D24.0mm_P24.00mm","Inductor_THT/L_Radial_D24.4mm_P22.90mm_Murata_1400series","Inductor_THT/L_Radial_D24.4mm_P23.10mm_Murata_1400series","Inductor_THT/L_Radial_D24.4mm_P23.40mm_Murata_1400series","Inductor_THT/L_Radial_D24.4mm_P23.70mm_Murata_1400series","Inductor_THT/L_Radial_D24.4mm_P23.90mm_Murata_1400series","Inductor_THT/L_Radial_D27.9mm_P18.29mm_Vishay_IHB-3","Inductor_THT/L_Radial_D27.9mm_P19.05mm_Vishay_IHB-3","Inductor_THT/L_Radial_D27.9mm_P20.07mm_Vishay_IHB-3","Inductor_THT/L_Radial_D28.0mm_P29.20mm","Inductor_THT/L_Radial_D29.8mm_P28.30mm_Murata_1400series","Inductor_THT/L_Radial_D29.8mm_P28.50mm_Murata_1400series","Inductor_THT/L_Radial_D29.8mm_P28.80mm_Murata_1400series","Inductor_THT/L_Radial_D29.8mm_P29.00mm_Murata_1400series","Inductor_THT/L_Radial_D29.8mm_P29.30mm_Murata_1400series","Inductor_THT/L_Radial_D40.6mm_P26.16mm_Vishay_IHB-5","Inductor_THT/L_Radial_D40.6mm_P27.18mm_Vishay_IHB-4","Inductor_THT/L_Radial_D40.6mm_P27.94mm_Vishay_IHB-4","Inductor_THT/L_Radial_D40.6mm_P27.94mm_Vishay_IHB-5","Inductor_THT/L_Radial_D40.6mm_P28.70mm_Vishay_IHB-5","Inductor_THT/L_Radial_D50.8mm_P33.27mm_Vishay_IHB-6","Inductor_THT/L_Radial_D50.8mm_P34.29mm_Vishay_IHB-6","Inductor_THT/L_Radial_D50.8mm_P35.81mm_Vishay_IHB-6","Inductor_THT/L_Radial_D50.8mm_P36.32mm_Vishay_IHB-6","Inductor_THT/L_Radial_D50.8mm_P38.86mm_Vishay_IHB-6","Inductor_THT/L_Radial_D6.0mm_P4.00mm","Inductor_THT/L_Radial_D7.0mm_P3.00mm","Inductor_THT/L_Radial_D7.2mm_P3.00mm_Murata_1700","Inductor_THT/L_Radial_D7.5mm_P3.50mm_Fastron_07P","Inductor_THT/L_Radial_D7.5mm_P5.00mm_Fastron_07P","Inductor_THT/L_Radial_D7.8mm_P5.00mm_Fastron_07HCP","Inductor_THT/L_Radial_D8.7mm_P5.00mm_Fastron_07HCP","Inductor_THT/L_Radial_D9.5mm_P5.00mm_Fastron_07HVP","Inductor_THT/L_Radial_L10.2mm_W10.2mm_Px7.62mm_Py7.62mm_Pulse_LP-30","Inductor_THT/L_Radial_L11.5mm_W11.5mm_Px6.00mm_Py6.00mm_Neosid_NE-CPB-11EN_Drill1.3mm","Inductor_THT/L_Radial_L11.5mm_W11.5mm_Px6.00mm_Py6.00mm_Neosid_NE-CPB-11EN_Drill1.5mm","Inductor_THT/L_Radial_L11.5mm_W11.5mm_Px6.00mm_Py6.00mm_Neosid_NE-CPB-11EN_Drill1.7mm","Inductor_THT/L_Radial_L11.5mm_W11.5mm_Px6.00mm_Py6.00mm_Neosid_NE-CPB-11EN_Drill1.8mm","Inductor_THT/L_Radial_L12.6mm_W12.6mm_Px9.52mm_Py9.52mm_Pulse_LP-37","Inductor_THT/L_Radial_L16.1mm_W16.1mm_Px7.62mm_Py12.70mm_Pulse_LP-44","Inductor_THT/L_Radial_L7.5mm_W4.6mm_P5.00mm_Neosid_SD75","Inductor_THT/L_Radial_L8.0mm_W8.0mm_P5.00mm_Neosid_NE-CPB-07E","Inductor_THT/L_Radial_L8.0mm_W8.0mm_P5.00mm_Neosid_SD8","Inductor_THT/L_Radial_L9.1mm_W9.1mm_Px6.35mm_Py6.35mm_Pulse_LP-25","Inductor_THT/L_SELF1408","Inductor_THT/L_SELF1418","Inductor_THT/L_Toroid_Horizontal_D11.2mm_P17.00mm_Diameter12-5mm_Amidon-T44","Inductor_THT/L_Toroid_Horizontal_D12.7mm_P20.00mm_Diameter14-5mm_Amidon-T50","Inductor_THT/L_Toroid_Horizontal_D16.8mm_P14.70mm_Vishay_TJ3","Inductor_THT/L_Toroid_Horizontal_D16.8mm_P14.70mm_Vishay_TJ3_BigPads","Inductor_THT/L_Toroid_Horizontal_D17.3mm_P15.24mm_Bourns_2000","Inductor_THT/L_Toroid_Horizontal_D21.8mm_P19.10mm_Bourns_2100","Inductor_THT/L_Toroid_Horizontal_D21.8mm_P19.60mm_Bourns_2100","Inductor_THT/L_Toroid_Horizontal_D22.4mm_P19.80mm_Vishay_TJ4","Inductor_THT/L_Toroid_Horizontal_D24.1mm_P21.80mm_Bourns_2200","Inductor_THT/L_Toroid_Horizontal_D24.1mm_P23.10mm_Bourns_2200","Inductor_THT/L_Toroid_Horizontal_D25.4mm_P22.90mm_Vishay_TJ5","Inductor_THT/L_Toroid_Horizontal_D25.4mm_P22.90mm_Vishay_TJ5_BigPads","Inductor_THT/L_Toroid_Horizontal_D26.0mm_P5.08mm","Inductor_THT/L_Toroid_Horizontal_D28.0mm_P25.10mm_Bourns_2200","Inductor_THT/L_Toroid_Horizontal_D28.0mm_P26.67mm_Bourns_2200","Inductor_THT/L_Toroid_Horizontal_D3.2mm_P6.40mm_Diameter3-5mm_Amidon-T12","Inductor_THT/L_Toroid_Horizontal_D32.5mm_P28.90mm_Bourns_2300","Inductor_THT/L_Toroid_Horizontal_D32.5mm_P30.00mm_Bourns_2300","Inductor_THT/L_Toroid_Horizontal_D35.1mm_P31.00mm_Vishay_TJ6","Inductor_THT/L_Toroid_Horizontal_D4.1mm_P8.00mm_Diameter4-5mm_Amidon-T16","Inductor_THT/L_Toroid_Horizontal_D40.0mm_P48.26mm","Inductor_THT/L_Toroid_Horizontal_D41.9mm_P37.60mm_Vishay_TJ7","Inductor_THT/L_Toroid_Horizontal_D49.3mm_P44.60mm_Vishay_TJ8","Inductor_THT/L_Toroid_Horizontal_D5.1mm_P9.00mm_Diameter6-5mm_Amidon-T20","Inductor_THT/L_Toroid_Horizontal_D6.5mm_P10.00mm_Diameter7-5mm_Amidon-T25","Inductor_THT/L_Toroid_Horizontal_D69.1mm_P63.20mm_Vishay_TJ9","Inductor_THT/L_Toroid_Horizontal_D7.8mm_P13.00mm_Diameter9-5mm_Amidon-T30","Inductor_THT/L_Toroid_Horizontal_D9.5mm_P15.00mm_Diameter10-5mm_Amidon-T37","Inductor_THT/L_Toroid_Vertical_L10.0mm_W5.0mm_P5.08mm","Inductor_THT/L_Toroid_Vertical_L13.0mm_W6.5mm_P5.60mm","Inductor_THT/L_Toroid_Vertical_L14.0mm_W5.6mm_P5.30mm_Bourns_5700","Inductor_THT/L_Toroid_Vertical_L14.0mm_W6.3mm_P4.57mm_Pulse_A","Inductor_THT/L_Toroid_Vertical_L14.7mm_W8.6mm_P5.58mm_Pulse_KM-1","Inductor_THT/L_Toroid_Vertical_L16.0mm_W8.0mm_P7.62mm","Inductor_THT/L_Toroid_Vertical_L16.3mm_W7.1mm_P7.11mm_Pulse_H","Inductor_THT/L_Toroid_Vertical_L16.4mm_W7.6mm_P6.60mm_Vishay_TJ3","Inductor_THT/L_Toroid_Vertical_L16.5mm_W11.4mm_P7.62mm_Pulse_KM-2","Inductor_THT/L_Toroid_Vertical_L16.8mm_W9.2mm_P7.10mm_Vishay_TJ3","Inductor_THT/L_Toroid_Vertical_L16.8mm_W9.2mm_P7.10mm_Vishay_TJ3_BigPads","Inductor_THT/L_Toroid_Vertical_L17.8mm_W8.1mm_P7.62mm_Bourns_5700","Inductor_THT/L_Toroid_Vertical_L17.8mm_W9.7mm_P7.11mm_Pulse_B","Inductor_THT/L_Toroid_Vertical_L19.1mm_W8.1mm_P7.10mm_Bourns_5700","Inductor_THT/L_Toroid_Vertical_L21.6mm_W11.4mm_P7.62mm_Pulse_KM-3","Inductor_THT/L_Toroid_Vertical_L21.6mm_W8.4mm_P8.38mm_Pulse_G","Inductor_THT/L_Toroid_Vertical_L21.6mm_W9.1mm_P8.40mm_Bourns_5700","Inductor_THT/L_Toroid_Vertical_L21.6mm_W9.5mm_P7.11mm_Pulse_C","Inductor_THT/L_Toroid_Vertical_L22.4mm_W10.2mm_P7.90mm_Vishay_TJ4","Inductor_THT/L_Toroid_Vertical_L24.6mm_W15.5mm_P11.44mm_Pulse_KM-4","Inductor_THT/L_Toroid_Vertical_L25.4mm_W14.7mm_P12.20mm_Vishay_TJ5","Inductor_THT/L_Toroid_Vertical_L25.4mm_W14.7mm_P12.20mm_Vishay_TJ5_BigPads","Inductor_THT/L_Toroid_Vertical_L26.7mm_W14.0mm_P10.16mm_Pulse_D","Inductor_THT/L_Toroid_Vertical_L28.6mm_W14.3mm_P11.43mm_Bourns_5700","Inductor_THT/L_Toroid_Vertical_L31.8mm_W15.9mm_P13.50mm_Bourns_5700","Inductor_THT/L_Toroid_Vertical_L33.0mm_W17.8mm_P12.70mm_Pulse_KM-5","Inductor_THT/L_Toroid_Vertical_L35.1mm_W21.1mm_P18.50mm_Vishay_TJ6","Inductor_THT/L_Toroid_Vertical_L35.6mm_W17.8mm_P12.70mm_Pulse_E","Inductor_THT/L_Toroid_Vertical_L41.9mm_W17.8mm_P12.70mm_Pulse_F","Inductor_THT/L_Toroid_Vertical_L41.9mm_W19.1mm_P15.80mm_Vishay_TJ7","Inductor_THT/L_Toroid_Vertical_L46.0mm_W19.1mm_P21.80mm_Bourns_5700","Inductor_THT/L_Toroid_Vertical_L48.8mm_W25.4mm_P20.80mm_Vishay_TJ8","Inductor_THT/L_Toroid_Vertical_L54.0mm_W23.8mm_P20.10mm_Bourns_5700","Inductor_THT/L_Toroid_Vertical_L67.6mm_W36.1mm_P31.80mm_Vishay_TJ9","Inductor_THT_Wurth/L_Wurth_WE-HCFT-2012_LeadDiameter1.2mm","Inductor_THT_Wurth/L_Wurth_WE-HCFT-2012_LeadDiameter1.5mm","Inductor_THT_Wurth/L_Wurth_WE-HCFT-2504","Inductor_THT_Wurth/L_Wurth_WE-HCFT-3521","Inductor_THT_Wurth/L_Wurth_WE-HCFT-3533_LeadDiameter1.8mm","Inductor_THT_Wurth/L_Wurth_WE-HCFT-3533_LeadDiameter2.0mm","Inductor_THT_Wurth/L_Wurth_WE-HCFT-3540_LeadDiameter0.8mm","Inductor_THT_Wurth/L_Wurth_WE-HCFT-3540_LeadDiameter1.3mm","Inductor_THT_Wurth/L_Wurth_WE-HCFT-3540_LeadDiameter1.5mm","Inductor_THT_Wurth/L_Wurth_WE-HCFT-3540_LeadDiameter2.0mm","Jumper/Jumper_Harwin_S1621_P10.9mm","Jumper/SolderJumper-2_P1.3mm_Bridged2Bar_Pad1.0x1.5mm","Jumper/SolderJumper-2_P1.3mm_Bridged2Bar_RoundedPad1.0x1.5mm","Jumper/SolderJumper-2_P1.3mm_Bridged_Pad1.0x1.5mm","Jumper/SolderJumper-2_P1.3mm_Bridged_RoundedPad1.0x1.5mm","Jumper/SolderJumper-2_P1.3mm_Open_Pad1.0x1.5mm","Jumper/SolderJumper-2_P1.3mm_Open_RoundedPad1.0x1.5mm","Jumper/SolderJumper-2_P1.3mm_Open_TrianglePad1.0x1.5mm","Jumper/SolderJumper-3_P1.3mm_Bridged123_Pad1.0x1.5mm","Jumper/SolderJumper-3_P1.3mm_Bridged123_Pad1.0x1.5mm_NumberLabels","Jumper/SolderJumper-3_P1.3mm_Bridged123_RoundedPad1.0x1.5mm","Jumper/SolderJumper-3_P1.3mm_Bridged123_RoundedPad1.0x1.5mm_NumberLabels","Jumper/SolderJumper-3_P1.3mm_Bridged12_Pad1.0x1.5mm","Jumper/SolderJumper-3_P1.3mm_Bridged12_Pad1.0x1.5mm_NumberLabels","Jumper/SolderJumper-3_P1.3mm_Bridged12_RoundedPad1.0x1.5mm","Jumper/SolderJumper-3_P1.3mm_Bridged12_RoundedPad1.0x1.5mm_NumberLabels","Jumper/SolderJumper-3_P1.3mm_Bridged2Bar123_Pad1.0x1.5mm","Jumper/SolderJumper-3_P1.3mm_Bridged2Bar123_Pad1.0x1.5mm_NumberLabels","Jumper/SolderJumper-3_P1.3mm_Bridged2Bar123_RoundedPad1.0x1.5mm","Jumper/SolderJumper-3_P1.3mm_Bridged2Bar123_RoundedPad1.0x1.5mm_NumberLabels","Jumper/SolderJumper-3_P1.3mm_Bridged2Bar12_Pad1.0x1.5mm","Jumper/SolderJumper-3_P1.3mm_Bridged2Bar12_Pad1.0x1.5mm_NumberLabels","Jumper/SolderJumper-3_P1.3mm_Bridged2Bar12_RoundedPad1.0x1.5mm","Jumper/SolderJumper-3_P1.3mm_Bridged2Bar12_RoundedPad1.0x1.5mm_NumberLabels","Jumper/SolderJumper-3_P1.3mm_Open_Pad1.0x1.5mm","Jumper/SolderJumper-3_P1.3mm_Open_Pad1.0x1.5mm_NumberLabels","Jumper/SolderJumper-3_P1.3mm_Open_RoundedPad1.0x1.5mm","Jumper/SolderJumper-3_P1.3mm_Open_RoundedPad1.0x1.5mm_NumberLabels","Jumper/SolderJumper-3_P2.0mm_Open_TrianglePad1.0x1.5mm","Jumper/SolderJumper-3_P2.0mm_Open_TrianglePad1.0x1.5mm_NumberLabels","LED_SMD/LED-APA102-2020","LED_SMD/LED-L1T2_LUMILEDS","LED_SMD/LED_01005_0402Metric","LED_SMD/LED_01005_0402Metric_Pad0.57x0.30mm_HandSolder","LED_SMD/LED_0201_0603Metric","LED_SMD/LED_0201_0603Metric_Pad0.64x0.40mm_HandSolder","LED_SMD/LED_0402_1005Metric","LED_SMD/LED_0402_1005Metric_Pad0.77x0.64mm_HandSolder","LED_SMD/LED_0603_1608Metric","LED_SMD/LED_0603_1608Metric_Pad1.05x0.95mm_HandSolder","LED_SMD/LED_0805_2012Metric","LED_SMD/LED_0805_2012Metric_Pad1.15x1.40mm_HandSolder","LED_SMD/LED_1206_3216Metric","LED_SMD/LED_1206_3216Metric_Pad1.42x1.75mm_HandSolder","LED_SMD/LED_1206_3216Metric_ReverseMount_Hole1.8x2.4mm","LED_SMD/LED_1210_3225Metric","LED_SMD/LED_1210_3225Metric_Pad1.42x2.65mm_HandSolder","LED_SMD/LED_1812_4532Metric","LED_SMD/LED_1812_4532Metric_Pad1.30x3.40mm_HandSolder","LED_SMD/LED_1W_3W_R8","LED_SMD/LED_2010_5025Metric","LED_SMD/LED_2010_5025Metric_Pad1.52x2.65mm_HandSolder","LED_SMD/LED_2512_6332Metric","LED_SMD/LED_2512_6332Metric_Pad1.52x3.35mm_HandSolder","LED_SMD/LED_ASMB-KTF0-0A306","LED_SMD/LED_Avago_PLCC4_3.2x2.8mm_CW","LED_SMD/LED_Avago_PLCC6_3x2.8mm","LED_SMD/LED_CSP_Samsung_LH181B_2.36x2.36mm","LED_SMD/LED_Cree-PLCC4_2x2mm_CW","LED_SMD/LED_Cree-PLCC4_3.2x2.8mm_CCW","LED_SMD/LED_Cree-PLCC4_5x5mm_CW","LED_SMD/LED_Cree-PLCC6_4.7x1.5mm","LED_SMD/LED_Cree-XB","LED_SMD/LED_Cree-XH","LED_SMD/LED_Cree-XHP35","LED_SMD/LED_Cree-XHP50_12V_HighDensity","LED_SMD/LED_Cree-XHP50_12V_HighIntensity","LED_SMD/LED_Cree-XHP50_3V_HighDensity","LED_SMD/LED_Cree-XHP50_3V_HighIntensity","LED_SMD/LED_Cree-XHP50_6V_HighDensity","LED_SMD/LED_Cree-XHP50_6V_HighIntensity","LED_SMD/LED_Cree-XHP70_12V","LED_SMD/LED_Cree-XHP70_6V","LED_SMD/LED_Cree-XP-G","LED_SMD/LED_Cree-XP","LED_SMD/LED_Cree-XQ","LED_SMD/LED_Cree-XQ_HandSoldering","LED_SMD/LED_Dialight_591","LED_SMD/LED_Everlight-SMD3528_3.5x2.8mm_67-21ST","LED_SMD/LED_Foshan-NTD3528_3.5x2.8mm","LED_SMD/LED_Inolux_IN-P55TATRGB_PLCC6_5.0x5.5mm_P1.8mm","LED_SMD/LED_Inolux_IN-PI554FCH_PLCC4_5.0x5.0mm_P3.2mm","LED_SMD/LED_Kingbright_AAA3528ESGCT","LED_SMD/LED_Kingbright_APA1606_1.6x0.6mm_Horizontal","LED_SMD/LED_Kingbright_APDA3020VBCD","LED_SMD/LED_Kingbright_APFA3010_3x1.5mm_Horizontal","LED_SMD/LED_Kingbright_APHBM2012_2x1.25mm","LED_SMD/LED_Kingbright_KPA-3010_3x2x1mm","LED_SMD/LED_Kingbright_KPBD-3224","LED_SMD/LED_LiteOn_LTST-C19HE1WT","LED_SMD/LED_LiteOn_LTST-C235KGKRKT","LED_SMD/LED_LiteOn_LTST-C295K_1.6x0.8mm","LED_SMD/LED_LiteOn_LTST-E563C_PLCC4_5.0x5.0mm_P3.2mm","LED_SMD/LED_LiteOn_LTST-E563C_PLCC4_5.0x5.0mm_P3.2mm_HandSoldering","LED_SMD/LED_LiteOn_LTST-S326","LED_SMD/LED_Lumex_SML-LX0303SIUPGUSB","LED_SMD/LED_Lumex_SML-LX0404SIUPGUSB","LED_SMD/LED_Luminus_MP-3030-1100_3.0x3.0mm","LED_SMD/LED_OPSCO_SK6812_PLCC4_5.0x5.0mm_P3.1mm","LED_SMD/LED_Osram_Lx_P47F_D2mm_ReverseMount","LED_SMD/LED_PLCC-2_3.4x3.0mm_AK","LED_SMD/LED_PLCC-2_3.4x3.0mm_KA","LED_SMD/LED_PLCC-2_3x2mm_AK","LED_SMD/LED_PLCC-2_3x2mm_KA","LED_SMD/LED_PLCC_2835","LED_SMD/LED_PLCC_2835_Handsoldering","LED_SMD/LED_RGB_1210","LED_SMD/LED_RGB_5050-6","LED_SMD/LED_RGB_Cree-PLCC-6_6x5mm_P2.1mm","LED_SMD/LED_RGB_Everlight_EASV3015RGBA0_Horizontal","LED_SMD/LED_RGB_Getian_GT-P6PRGB4303","LED_SMD/LED_RGB_Lumex_SML-LXT0805SIUGUBW","LED_SMD/LED_RGB_PLCC-6","LED_SMD/LED_RGB_Wuerth-PLCC4_3.2x2.8mm_150141M173100","LED_SMD/LED_RGB_Wuerth_150080M153000","LED_SMD/LED_ROHM_SMLVN6","LED_SMD/LED_SK6805_PLCC4_2.4x2.7mm_P1.3mm","LED_SMD/LED_SK6812MINI-E_3.2x2.8mm_P1.5mm_ReverseMount","LED_SMD/LED_SK6812MINI_PLCC4_3.5x3.5mm_P1.75mm","LED_SMD/LED_SK6812_EC15_1.5x1.5mm","LED_SMD/LED_SK6812_PLCC4_5.0x5.0mm_P3.2mm","LED_SMD/LED_WS2812B-2020_PLCC4_2.0x2.0mm","LED_SMD/LED_WS2812B-Mini_PLCC4_3.5x3.5mm","LED_SMD/LED_WS2812B_PLCC4_5.0x5.0mm_P3.2mm","LED_SMD/LED_WS2812_PLCC6_5.0x5.0mm_P1.6mm","LED_SMD/LED_Wurth_150044M155260","LED_SMD/LED_Yuji_5730","LED_SMD/LED_miniPLCC_2315","LED_SMD/LED_miniPLCC_2315_Handsoldering","LED_THT/LED_BL-FL7680RGB","LED_THT/LED_D1.8mm_W1.8mm_H2.4mm_Horizontal_O1.27mm_Z1.6mm","LED_THT/LED_D1.8mm_W1.8mm_H2.4mm_Horizontal_O1.27mm_Z4.9mm","LED_THT/LED_D1.8mm_W1.8mm_H2.4mm_Horizontal_O1.27mm_Z8.2mm","LED_THT/LED_D1.8mm_W1.8mm_H2.4mm_Horizontal_O3.81mm_Z1.6mm","LED_THT/LED_D1.8mm_W1.8mm_H2.4mm_Horizontal_O3.81mm_Z4.9mm","LED_THT/LED_D1.8mm_W1.8mm_H2.4mm_Horizontal_O3.81mm_Z8.2mm","LED_THT/LED_D1.8mm_W1.8mm_H2.4mm_Horizontal_O6.35mm_Z1.6mm","LED_THT/LED_D1.8mm_W1.8mm_H2.4mm_Horizontal_O6.35mm_Z4.9mm","LED_THT/LED_D1.8mm_W1.8mm_H2.4mm_Horizontal_O6.35mm_Z8.2mm","LED_THT/LED_D1.8mm_W3.3mm_H2.4mm","LED_THT/LED_D10.0mm-3","LED_THT/LED_D10.0mm","LED_THT/LED_D2.0mm_W4.0mm_H2.8mm_FlatTop","LED_THT/LED_D2.0mm_W4.8mm_H2.5mm_FlatTop","LED_THT/LED_D20.0mm","LED_THT/LED_D3.0mm-3","LED_THT/LED_D3.0mm","LED_THT/LED_D3.0mm_Clear","LED_THT/LED_D3.0mm_FlatTop","LED_THT/LED_D3.0mm_Horizontal_O1.27mm_Z10.0mm","LED_THT/LED_D3.0mm_Horizontal_O1.27mm_Z2.0mm","LED_THT/LED_D3.0mm_Horizontal_O1.27mm_Z2.0mm_Clear","LED_THT/LED_D3.0mm_Horizontal_O1.27mm_Z2.0mm_IRBlack","LED_THT/LED_D3.0mm_Horizontal_O1.27mm_Z2.0mm_IRGrey","LED_THT/LED_D3.0mm_Horizontal_O1.27mm_Z6.0mm","LED_THT/LED_D3.0mm_Horizontal_O3.81mm_Z10.0mm","LED_THT/LED_D3.0mm_Horizontal_O3.81mm_Z2.0mm","LED_THT/LED_D3.0mm_Horizontal_O3.81mm_Z6.0mm","LED_THT/LED_D3.0mm_Horizontal_O6.35mm_Z10.0mm","LED_THT/LED_D3.0mm_Horizontal_O6.35mm_Z2.0mm","LED_THT/LED_D3.0mm_Horizontal_O6.35mm_Z6.0mm","LED_THT/LED_D3.0mm_IRBlack","LED_THT/LED_D3.0mm_IRGrey","LED_THT/LED_D4.0mm","LED_THT/LED_D5.0mm-3","LED_THT/LED_D5.0mm-3_Horizontal_O3.81mm_Z3.0mm","LED_THT/LED_D5.0mm-4_RGB","LED_THT/LED_D5.0mm-4_RGB_Staggered_Pins","LED_THT/LED_D5.0mm-4_RGB_Wide_Pins","LED_THT/LED_D5.0mm","LED_THT/LED_D5.0mm_Clear","LED_THT/LED_D5.0mm_FlatTop","LED_THT/LED_D5.0mm_Horizontal_O1.27mm_Z15.0mm","LED_THT/LED_D5.0mm_Horizontal_O1.27mm_Z3.0mm","LED_THT/LED_D5.0mm_Horizontal_O1.27mm_Z3.0mm_Clear","LED_THT/LED_D5.0mm_Horizontal_O1.27mm_Z3.0mm_IRBlack","LED_THT/LED_D5.0mm_Horizontal_O1.27mm_Z3.0mm_IRGrey","LED_THT/LED_D5.0mm_Horizontal_O1.27mm_Z9.0mm","LED_THT/LED_D5.0mm_Horizontal_O3.81mm_Z15.0mm","LED_THT/LED_D5.0mm_Horizontal_O3.81mm_Z3.0mm","LED_THT/LED_D5.0mm_Horizontal_O3.81mm_Z9.0mm","LED_THT/LED_D5.0mm_Horizontal_O6.35mm_Z15.0mm","LED_THT/LED_D5.0mm_Horizontal_O6.35mm_Z3.0mm","LED_THT/LED_D5.0mm_Horizontal_O6.35mm_Z9.0mm","LED_THT/LED_D5.0mm_IRBlack","LED_THT/LED_D5.0mm_IRGrey","LED_THT/LED_D8.0mm-3","LED_THT/LED_D8.0mm","LED_THT/LED_Oval_W5.2mm_H3.8mm","LED_THT/LED_Rectangular_W3.0mm_H2.0mm","LED_THT/LED_Rectangular_W3.9mm_H1.8mm","LED_THT/LED_Rectangular_W3.9mm_H1.9mm","LED_THT/LED_Rectangular_W5.0mm_H2.0mm-3Pins","LED_THT/LED_Rectangular_W5.0mm_H2.0mm","LED_THT/LED_Rectangular_W5.0mm_H2.0mm_Horizontal_O1.27mm_Z1.0mm","LED_THT/LED_Rectangular_W5.0mm_H2.0mm_Horizontal_O1.27mm_Z3.0mm","LED_THT/LED_Rectangular_W5.0mm_H2.0mm_Horizontal_O1.27mm_Z5.0mm","LED_THT/LED_Rectangular_W5.0mm_H2.0mm_Horizontal_O3.81mm_Z1.0mm","LED_THT/LED_Rectangular_W5.0mm_H2.0mm_Horizontal_O3.81mm_Z3.0mm","LED_THT/LED_Rectangular_W5.0mm_H2.0mm_Horizontal_O3.81mm_Z5.0mm","LED_THT/LED_Rectangular_W5.0mm_H2.0mm_Horizontal_O6.35mm_Z1.0mm","LED_THT/LED_Rectangular_W5.0mm_H2.0mm_Horizontal_O6.35mm_Z3.0mm","LED_THT/LED_Rectangular_W5.0mm_H2.0mm_Horizontal_O6.35mm_Z5.0mm","LED_THT/LED_Rectangular_W5.0mm_H5.0mm","LED_THT/LED_Rectangular_W7.62mm_H4.55mm_P5.08mm_R3","LED_THT/LED_SideEmitter_Rectangular_W4.5mm_H1.6mm","LED_THT/LED_VCCLite_5381H1_6.35x6.35mm","LED_THT/LED_VCCLite_5381H3_6.35x6.35mm","LED_THT/LED_VCCLite_5381H5_6.35x6.35mm","LED_THT/LED_VCCLite_5381H7_6.35x6.35mm","Module/A20_OLINUXINO_LIME2","Module/Adafruit_Feather","Module/Adafruit_Feather_32u4_FONA","Module/Adafruit_Feather_32u4_FONA_WithMountingHoles","Module/Adafruit_Feather_32u4_RFM","Module/Adafruit_Feather_32u4_RFM_WithMountingHoles","Module/Adafruit_Feather_M0_RFM","Module/Adafruit_Feather_M0_RFM_WithMountingHoles","Module/Adafruit_Feather_M0_Wifi","Module/Adafruit_Feather_M0_Wifi_WithMountingHoles","Module/Adafruit_Feather_WICED","Module/Adafruit_Feather_WICED_WithMountingHoles","Module/Adafruit_Feather_WithMountingHoles","Module/Adafruit_HUZZAH_ESP8266_breakout","Module/Adafruit_HUZZAH_ESP8266_breakout_WithMountingHoles","Module/Arduino_Nano","Module/Arduino_Nano_WithMountingHoles","Module/Arduino_UNO_R2","Module/Arduino_UNO_R2_WithMountingHoles","Module/Arduino_UNO_R3","Module/Arduino_UNO_R3_WithMountingHoles","Module/BeagleBoard_PocketBeagle","Module/Carambola2","Module/Electrosmith_Daisy_Seed","Module/Flipper_Zero_Angled","Module/Flipper_Zero_Straight","Module/Google_Coral_SMT_TPU_Module","Module/Maple_Mini","Module/Olimex_MOD-WIFI-ESP8266-DEV","Module/Onion_Omega2+","Module/Onion_Omega2S","Module/Pololu_Breakout-16_15.2x20.3mm","Module/RaspberryPi_Pico_Common_SMD","Module/RaspberryPi_Pico_Common_THT","Module/RaspberryPi_Pico_Common_Unspecified","Module/RaspberryPi_Pico_SMD","Module/RaspberryPi_Pico_SMD_HandSolder","Module/RaspberryPi_Pico_W_SMD","Module/RaspberryPi_Pico_W_SMD_HandSolder","Module/Raspberry_Pi_Zero_Socketed_THT_FaceDown_MountingHoles","Module/ST_Morpho_Connector_144_STLink","Module/ST_Morpho_Connector_144_STLink_MountingHoles","Module/Sipeed-M1","Module/Sipeed-M1W","Module/Texas_EUK_R-PDSS-T7_THT","Module/Texas_EUS_R-PDSS-T5_THT","Module/Texas_EUW_R-PDSS-T7_THT","Motors/Vybronics_VZ30C1T8219732L","MountingEquipment/DINRailAdapter_3xM3_PhoenixContact_1201578","MountingHole/MountingHole_2.1mm","MountingHole/MountingHole_2.2mm_M2","MountingHole/MountingHole_2.2mm_M2_DIN965","MountingHole/MountingHole_2.2mm_M2_DIN965_Pad","MountingHole/MountingHole_2.2mm_M2_DIN965_Pad_TopBottom","MountingHole/MountingHole_2.2mm_M2_DIN965_Pad_TopOnly","MountingHole/MountingHole_2.2mm_M2_ISO14580","MountingHole/MountingHole_2.2mm_M2_ISO14580_Pad","MountingHole/MountingHole_2.2mm_M2_ISO14580_Pad_TopBottom","MountingHole/MountingHole_2.2mm_M2_ISO14580_Pad_TopOnly","MountingHole/MountingHole_2.2mm_M2_ISO7380","MountingHole/MountingHole_2.2mm_M2_ISO7380_Pad","MountingHole/MountingHole_2.2mm_M2_ISO7380_Pad_TopBottom","MountingHole/MountingHole_2.2mm_M2_ISO7380_Pad_TopOnly","MountingHole/MountingHole_2.2mm_M2_Pad","MountingHole/MountingHole_2.2mm_M2_Pad_TopBottom","MountingHole/MountingHole_2.2mm_M2_Pad_TopOnly","MountingHole/MountingHole_2.2mm_M2_Pad_Via","MountingHole/MountingHole_2.5mm","MountingHole/MountingHole_2.5mm_Pad","MountingHole/MountingHole_2.5mm_Pad_TopBottom","MountingHole/MountingHole_2.5mm_Pad_TopOnly","MountingHole/MountingHole_2.5mm_Pad_Via","MountingHole/MountingHole_2.7mm","MountingHole/MountingHole_2.7mm_M2.5","MountingHole/MountingHole_2.7mm_M2.5_DIN965","MountingHole/MountingHole_2.7mm_M2.5_DIN965_Pad","MountingHole/MountingHole_2.7mm_M2.5_DIN965_Pad_TopBottom","MountingHole/MountingHole_2.7mm_M2.5_DIN965_Pad_TopOnly","MountingHole/MountingHole_2.7mm_M2.5_ISO14580","MountingHole/MountingHole_2.7mm_M2.5_ISO14580_Pad","MountingHole/MountingHole_2.7mm_M2.5_ISO14580_Pad_TopBottom","MountingHole/MountingHole_2.7mm_M2.5_ISO14580_Pad_TopOnly","MountingHole/MountingHole_2.7mm_M2.5_ISO7380","MountingHole/MountingHole_2.7mm_M2.5_ISO7380_Pad","MountingHole/MountingHole_2.7mm_M2.5_ISO7380_Pad_TopBottom","MountingHole/MountingHole_2.7mm_M2.5_ISO7380_Pad_TopOnly","MountingHole/MountingHole_2.7mm_M2.5_Pad","MountingHole/MountingHole_2.7mm_M2.5_Pad_TopBottom","MountingHole/MountingHole_2.7mm_M2.5_Pad_TopOnly","MountingHole/MountingHole_2.7mm_M2.5_Pad_Via","MountingHole/MountingHole_2.7mm_Pad","MountingHole/MountingHole_2.7mm_Pad_TopBottom","MountingHole/MountingHole_2.7mm_Pad_TopOnly","MountingHole/MountingHole_2.7mm_Pad_Via","MountingHole/MountingHole_2mm","MountingHole/MountingHole_3.2mm_M3","MountingHole/MountingHole_3.2mm_M3_DIN965","MountingHole/MountingHole_3.2mm_M3_DIN965_Pad","MountingHole/MountingHole_3.2mm_M3_DIN965_Pad_TopBottom","MountingHole/MountingHole_3.2mm_M3_DIN965_Pad_TopOnly","MountingHole/MountingHole_3.2mm_M3_ISO14580","MountingHole/MountingHole_3.2mm_M3_ISO14580_Pad","MountingHole/MountingHole_3.2mm_M3_ISO14580_Pad_TopBottom","MountingHole/MountingHole_3.2mm_M3_ISO14580_Pad_TopOnly","MountingHole/MountingHole_3.2mm_M3_ISO7380","MountingHole/MountingHole_3.2mm_M3_ISO7380_Pad","MountingHole/MountingHole_3.2mm_M3_ISO7380_Pad_TopBottom","MountingHole/MountingHole_3.2mm_M3_ISO7380_Pad_TopOnly","MountingHole/MountingHole_3.2mm_M3_Pad","MountingHole/MountingHole_3.2mm_M3_Pad_TopBottom","MountingHole/MountingHole_3.2mm_M3_Pad_TopOnly","MountingHole/MountingHole_3.2mm_M3_Pad_Via","MountingHole/MountingHole_3.5mm","MountingHole/MountingHole_3.5mm_Pad","MountingHole/MountingHole_3.5mm_Pad_TopBottom","MountingHole/MountingHole_3.5mm_Pad_TopOnly","MountingHole/MountingHole_3.5mm_Pad_Via","MountingHole/MountingHole_3.7mm","MountingHole/MountingHole_3.7mm_Pad","MountingHole/MountingHole_3.7mm_Pad_TopBottom","MountingHole/MountingHole_3.7mm_Pad_TopOnly","MountingHole/MountingHole_3.7mm_Pad_Via","MountingHole/MountingHole_3mm","MountingHole/MountingHole_3mm_Pad","MountingHole/MountingHole_3mm_Pad_TopBottom","MountingHole/MountingHole_3mm_Pad_TopOnly","MountingHole/MountingHole_3mm_Pad_Via","MountingHole/MountingHole_4.3mm_M4","MountingHole/MountingHole_4.3mm_M4_DIN965","MountingHole/MountingHole_4.3mm_M4_DIN965_Pad","MountingHole/MountingHole_4.3mm_M4_DIN965_Pad_TopBottom","MountingHole/MountingHole_4.3mm_M4_DIN965_Pad_TopOnly","MountingHole/MountingHole_4.3mm_M4_ISO14580","MountingHole/MountingHole_4.3mm_M4_ISO14580_Pad","MountingHole/MountingHole_4.3mm_M4_ISO14580_Pad_TopBottom","MountingHole/MountingHole_4.3mm_M4_ISO14580_Pad_TopOnly","MountingHole/MountingHole_4.3mm_M4_ISO7380","MountingHole/MountingHole_4.3mm_M4_ISO7380_Pad","MountingHole/MountingHole_4.3mm_M4_ISO7380_Pad_TopBottom","MountingHole/MountingHole_4.3mm_M4_ISO7380_Pad_TopOnly","MountingHole/MountingHole_4.3mm_M4_Pad","MountingHole/MountingHole_4.3mm_M4_Pad_TopBottom","MountingHole/MountingHole_4.3mm_M4_Pad_TopOnly","MountingHole/MountingHole_4.3mm_M4_Pad_Via","MountingHole/MountingHole_4.3x6.2mm_M4_Pad","MountingHole/MountingHole_4.3x6.2mm_M4_Pad_Via","MountingHole/MountingHole_4.5mm","MountingHole/MountingHole_4.5mm_Pad","MountingHole/MountingHole_4.5mm_Pad_TopBottom","MountingHole/MountingHole_4.5mm_Pad_TopOnly","MountingHole/MountingHole_4.5mm_Pad_Via","MountingHole/MountingHole_4mm","MountingHole/MountingHole_4mm_Pad","MountingHole/MountingHole_4mm_Pad_TopBottom","MountingHole/MountingHole_4mm_Pad_TopOnly","MountingHole/MountingHole_4mm_Pad_Via","MountingHole/MountingHole_5.3mm_M5","MountingHole/MountingHole_5.3mm_M5_DIN965","MountingHole/MountingHole_5.3mm_M5_DIN965_Pad","MountingHole/MountingHole_5.3mm_M5_DIN965_Pad_TopBottom","MountingHole/MountingHole_5.3mm_M5_DIN965_Pad_TopOnly","MountingHole/MountingHole_5.3mm_M5_ISO14580","MountingHole/MountingHole_5.3mm_M5_ISO14580_Pad","MountingHole/MountingHole_5.3mm_M5_ISO14580_Pad_TopBottom","MountingHole/MountingHole_5.3mm_M5_ISO14580_Pad_TopOnly","MountingHole/MountingHole_5.3mm_M5_ISO7380","MountingHole/MountingHole_5.3mm_M5_ISO7380_Pad","MountingHole/MountingHole_5.3mm_M5_ISO7380_Pad_TopBottom","MountingHole/MountingHole_5.3mm_M5_ISO7380_Pad_TopOnly","MountingHole/MountingHole_5.3mm_M5_Pad","MountingHole/MountingHole_5.3mm_M5_Pad_TopBottom","MountingHole/MountingHole_5.3mm_M5_Pad_TopOnly","MountingHole/MountingHole_5.3mm_M5_Pad_Via","MountingHole/MountingHole_5.5mm","MountingHole/MountingHole_5.5mm_Pad","MountingHole/MountingHole_5.5mm_Pad_TopBottom","MountingHole/MountingHole_5.5mm_Pad_TopOnly","MountingHole/MountingHole_5.5mm_Pad_Via","MountingHole/MountingHole_5mm","MountingHole/MountingHole_5mm_Pad","MountingHole/MountingHole_5mm_Pad_TopBottom","MountingHole/MountingHole_5mm_Pad_TopOnly","MountingHole/MountingHole_5mm_Pad_Via","MountingHole/MountingHole_6.4mm_M6","MountingHole/MountingHole_6.4mm_M6_DIN965","MountingHole/MountingHole_6.4mm_M6_DIN965_Pad","MountingHole/MountingHole_6.4mm_M6_DIN965_Pad_TopBottom","MountingHole/MountingHole_6.4mm_M6_DIN965_Pad_TopOnly","MountingHole/MountingHole_6.4mm_M6_ISO14580","MountingHole/MountingHole_6.4mm_M6_ISO14580_Pad","MountingHole/MountingHole_6.4mm_M6_ISO14580_Pad_TopBottom","MountingHole/MountingHole_6.4mm_M6_ISO14580_Pad_TopOnly","MountingHole/MountingHole_6.4mm_M6_ISO7380","MountingHole/MountingHole_6.4mm_M6_ISO7380_Pad","MountingHole/MountingHole_6.4mm_M6_ISO7380_Pad_TopBottom","MountingHole/MountingHole_6.4mm_M6_ISO7380_Pad_TopOnly","MountingHole/MountingHole_6.4mm_M6_Pad","MountingHole/MountingHole_6.4mm_M6_Pad_TopBottom","MountingHole/MountingHole_6.4mm_M6_Pad_TopOnly","MountingHole/MountingHole_6.4mm_M6_Pad_Via","MountingHole/MountingHole_6.5mm","MountingHole/MountingHole_6.5mm_Pad","MountingHole/MountingHole_6.5mm_Pad_TopBottom","MountingHole/MountingHole_6.5mm_Pad_TopOnly","MountingHole/MountingHole_6.5mm_Pad_Via","MountingHole/MountingHole_6mm","MountingHole/MountingHole_6mm_Pad","MountingHole/MountingHole_6mm_Pad_TopBottom","MountingHole/MountingHole_6mm_Pad_TopOnly","MountingHole/MountingHole_6mm_Pad_Via","MountingHole/MountingHole_8.4mm_M8","MountingHole/MountingHole_8.4mm_M8_Pad","MountingHole/MountingHole_8.4mm_M8_Pad_TopBottom","MountingHole/MountingHole_8.4mm_M8_Pad_TopOnly","MountingHole/MountingHole_8.4mm_M8_Pad_Via","MountingHole/ToolingHole_1.152mm","Mounting_Wuerth/Mounting_Wuerth_WA-SMSE-ExternalM3_H10mm_9771100360","Mounting_Wuerth/Mounting_Wuerth_WA-SMSE-ExternalM3_H11mm_9771110360","Mounting_Wuerth/Mounting_Wuerth_WA-SMSE-ExternalM3_H12mm_9771120360","Mounting_Wuerth/Mounting_Wuerth_WA-SMSE-ExternalM3_H13mm_9771130360","Mounting_Wuerth/Mounting_Wuerth_WA-SMSE-ExternalM3_H14mm_9771140360","Mounting_Wuerth/Mounting_Wuerth_WA-SMSE-ExternalM3_H15mm_9771150360","Mounting_Wuerth/Mounting_Wuerth_WA-SMSE-ExternalM3_H5mm_9771050360","Mounting_Wuerth/Mounting_Wuerth_WA-SMSE-ExternalM3_H6mm_9771060360","Mounting_Wuerth/Mounting_Wuerth_WA-SMSE-ExternalM3_H7mm_9771070360","Mounting_Wuerth/Mounting_Wuerth_WA-SMSE-ExternalM3_H8mm_9771080360","Mounting_Wuerth/Mounting_Wuerth_WA-SMSE-ExternalM3_H9mm_9771090360","Mounting_Wuerth/Mounting_Wuerth_WA-SMSI-M1.6_H0.5mm_9774005633","Mounting_Wuerth/Mounting_Wuerth_WA-SMSI-M1.6_H1.5mm_9774015633","Mounting_Wuerth/Mounting_Wuerth_WA-SMSI-M1.6_H1mm_9774010633","Mounting_Wuerth/Mounting_Wuerth_WA-SMSI-M1.6_H2.5mm_9774025633","Mounting_Wuerth/Mounting_Wuerth_WA-SMSI-M1.6_H2.5mm_ThreadDepth1.5mm_97730256332","Mounting_Wuerth/Mounting_Wuerth_WA-SMSI-M1.6_H2.5mm_ThreadDepth1.5mm_NoNPTH_97730256330","Mounting_Wuerth/Mounting_Wuerth_WA-SMSI-M1.6_H2mm_9774020633","Mounting_Wuerth/Mounting_Wuerth_WA-SMSI-M1.6_H3.5mm_ThreadDepth2mm_97730356332","Mounting_Wuerth/Mounting_Wuerth_WA-SMSI-M1.6_H3.5mm_ThreadDepth2mm_97730356334","Mounting_Wuerth/Mounting_Wuerth_WA-SMSI-M1.6_H3.5mm_ThreadDepth2mm_NoNPTH_97730356330","Mounting_Wuerth/Mounting_Wuerth_WA-SMSI-M1.6_H3mm_9774030633","Mounting_Wuerth/Mounting_Wuerth_WA-SMSI-M1.6_H3mm_ThreadDepth1.8mm_97730306332","Mounting_Wuerth/Mounting_Wuerth_WA-SMSI-M1.6_H3mm_ThreadDepth1.8mm_NoNPTH_97730306330","Mounting_Wuerth/Mounting_Wuerth_WA-SMSI-M1.6_H4.5mm_ThreadDepth2mm_97730456332","Mounting_Wuerth/Mounting_Wuerth_WA-SMSI-M1.6_H4.5mm_ThreadDepth2mm_97730456334","Mounting_Wuerth/Mounting_Wuerth_WA-SMSI-M1.6_H4.5mm_ThreadDepth2mm_NoNPTH_97730456330","Mounting_Wuerth/Mounting_Wuerth_WA-SMSI-M1.6_H4mm_ThreadDepth2mm_97730406332","Mounting_Wuerth/Mounting_Wuerth_WA-SMSI-M1.6_H4mm_ThreadDepth2mm_97730406334","Mounting_Wuerth/Mounting_Wuerth_WA-SMSI-M1.6_H4mm_ThreadDepth2mm_NoNPTH_97730406330","Mounting_Wuerth/Mounting_Wuerth_WA-SMSI-M1.6_H5mm_ThreadDepth2mm_97730506332","Mounting_Wuerth/Mounting_Wuerth_WA-SMSI-M1.6_H5mm_ThreadDepth2mm_97730506334","Mounting_Wuerth/Mounting_Wuerth_WA-SMSI-M1.6_H5mm_ThreadDepth2mm_NoNPTH_97730506330","Mounting_Wuerth/Mounting_Wuerth_WA-SMSI-M1.6_H6mm_ThreadDepth2mm_97730606332","Mounting_Wuerth/Mounting_Wuerth_WA-SMSI-M1.6_H6mm_ThreadDepth2mm_97730606334","Mounting_Wuerth/Mounting_Wuerth_WA-SMSI-M1.6_H6mm_ThreadDepth2mm_NoNPTH_97730606330","Mounting_Wuerth/Mounting_Wuerth_WA-SMSI-M2.5_H0.5mm_9774005151","Mounting_Wuerth/Mounting_Wuerth_WA-SMSI-M2.5_H1.5mm_9774015151","Mounting_Wuerth/Mounting_Wuerth_WA-SMSI-M2.5_H10mm_9774100151","Mounting_Wuerth/Mounting_Wuerth_WA-SMSI-M2.5_H1mm_9774010151","Mounting_Wuerth/Mounting_Wuerth_WA-SMSI-M2.5_H2.5mm_9774025151","Mounting_Wuerth/Mounting_Wuerth_WA-SMSI-M2.5_H2.7mm_9774027151","Mounting_Wuerth/Mounting_Wuerth_WA-SMSI-M2.5_H2mm_9774020151","Mounting_Wuerth/Mounting_Wuerth_WA-SMSI-M2.5_H3.5mm_9774035151","Mounting_Wuerth/Mounting_Wuerth_WA-SMSI-M2.5_H3mm_9774030151","Mounting_Wuerth/Mounting_Wuerth_WA-SMSI-M2.5_H4.5mm_9774045151","Mounting_Wuerth/Mounting_Wuerth_WA-SMSI-M2.5_H4mm_9774040151","Mounting_Wuerth/Mounting_Wuerth_WA-SMSI-M2.5_H5.5mm_9774055151","Mounting_Wuerth/Mounting_Wuerth_WA-SMSI-M2.5_H5mm_9774050151","Mounting_Wuerth/Mounting_Wuerth_WA-SMSI-M2.5_H6.5mm_9774065151","Mounting_Wuerth/Mounting_Wuerth_WA-SMSI-M2.5_H6mm_9774060151","Mounting_Wuerth/Mounting_Wuerth_WA-SMSI-M2.5_H7.5mm_9774075151","Mounting_Wuerth/Mounting_Wuerth_WA-SMSI-M2.5_H7mm_9774070151","Mounting_Wuerth/Mounting_Wuerth_WA-SMSI-M2.5_H8.5mm_9774085151","Mounting_Wuerth/Mounting_Wuerth_WA-SMSI-M2.5_H8mm_9774080151","Mounting_Wuerth/Mounting_Wuerth_WA-SMSI-M2.5_H9.5mm_9774095151","Mounting_Wuerth/Mounting_Wuerth_WA-SMSI-M2.5_H9mm_9774090151","Mounting_Wuerth/Mounting_Wuerth_WA-SMSI-M2_H0.5mm_9774005243","Mounting_Wuerth/Mounting_Wuerth_WA-SMSI-M2_H1.5mm_9774015243","Mounting_Wuerth/Mounting_Wuerth_WA-SMSI-M2_H1mm_9774010243","Mounting_Wuerth/Mounting_Wuerth_WA-SMSI-M2_H2.5mm_9774025243","Mounting_Wuerth/Mounting_Wuerth_WA-SMSI-M2_H2mm_9774020243","Mounting_Wuerth/Mounting_Wuerth_WA-SMSI-M2_H3.5mm_9774035243","Mounting_Wuerth/Mounting_Wuerth_WA-SMSI-M2_H3mm_9774030243","Mounting_Wuerth/Mounting_Wuerth_WA-SMSI-M2_H4.5mm_9774045243","Mounting_Wuerth/Mounting_Wuerth_WA-SMSI-M2_H4mm_9774040243","Mounting_Wuerth/Mounting_Wuerth_WA-SMSI-M2_H5mm_9774050243","Mounting_Wuerth/Mounting_Wuerth_WA-SMSI-M2_H6mm_9774060243","Mounting_Wuerth/Mounting_Wuerth_WA-SMSI-M2_H7mm_9774070243","Mounting_Wuerth/Mounting_Wuerth_WA-SMSI-M2_H8mm_9774080243","Mounting_Wuerth/Mounting_Wuerth_WA-SMSI-M3_H0.5mm_9774005360","Mounting_Wuerth/Mounting_Wuerth_WA-SMSI-M3_H1.5mm_9774015360","Mounting_Wuerth/Mounting_Wuerth_WA-SMSI-M3_H10mm_9774100360","Mounting_Wuerth/Mounting_Wuerth_WA-SMSI-M3_H11mm_9774110360","Mounting_Wuerth/Mounting_Wuerth_WA-SMSI-M3_H12mm_9774120360","Mounting_Wuerth/Mounting_Wuerth_WA-SMSI-M3_H13mm_9774130360","Mounting_Wuerth/Mounting_Wuerth_WA-SMSI-M3_H14mm_9774140360","Mounting_Wuerth/Mounting_Wuerth_WA-SMSI-M3_H15mm_9774150360","Mounting_Wuerth/Mounting_Wuerth_WA-SMSI-M3_H16mm_9774160360","Mounting_Wuerth/Mounting_Wuerth_WA-SMSI-M3_H1mm_9774010360","Mounting_Wuerth/Mounting_Wuerth_WA-SMSI-M3_H2.5mm_9774025360","Mounting_Wuerth/Mounting_Wuerth_WA-SMSI-M3_H2mm_9774020360","Mounting_Wuerth/Mounting_Wuerth_WA-SMSI-M3_H3mm_9774030360","Mounting_Wuerth/Mounting_Wuerth_WA-SMSI-M3_H4mm_9774040360","Mounting_Wuerth/Mounting_Wuerth_WA-SMSI-M3_H5mm_9774050360","Mounting_Wuerth/Mounting_Wuerth_WA-SMSI-M3_H6mm_9774060360","Mounting_Wuerth/Mounting_Wuerth_WA-SMSI-M3_H7mm_9774070360","Mounting_Wuerth/Mounting_Wuerth_WA-SMSI-M3_H8mm_9774080360","Mounting_Wuerth/Mounting_Wuerth_WA-SMSI-M3_H9mm_9774090360","Mounting_Wuerth/Mounting_Wuerth_WA-SMSI-M4_H10mm_9774100482","Mounting_Wuerth/Mounting_Wuerth_WA-SMSI-M4_H1mm_9774010482","Mounting_Wuerth/Mounting_Wuerth_WA-SMSI-M4_H2mm_9774020482","Mounting_Wuerth/Mounting_Wuerth_WA-SMSI-M4_H3mm_9774030482","Mounting_Wuerth/Mounting_Wuerth_WA-SMSI-M4_H4mm_9774040482","Mounting_Wuerth/Mounting_Wuerth_WA-SMSI-M4_H5mm_9774050482","Mounting_Wuerth/Mounting_Wuerth_WA-SMSI-M4_H6mm_9774060482","Mounting_Wuerth/Mounting_Wuerth_WA-SMSI-M4_H7mm_9774070482","Mounting_Wuerth/Mounting_Wuerth_WA-SMSI-M4_H8mm_9774080482","Mounting_Wuerth/Mounting_Wuerth_WA-SMSI-M4_H9mm_9774090482","Mounting_Wuerth/Mounting_Wuerth_WA-SMSR-3.2mm_H10.6mm_ReverseMount_9775106960","Mounting_Wuerth/Mounting_Wuerth_WA-SMSR-3.2mm_H11.6mm_ReverseMount_9775116960","Mounting_Wuerth/Mounting_Wuerth_WA-SMSR-3.2mm_H2.6mm_ReverseMount_9775026960","Mounting_Wuerth/Mounting_Wuerth_WA-SMSR-3.2mm_H3.1mm_ReverseMount_9775031960","Mounting_Wuerth/Mounting_Wuerth_WA-SMSR-3.2mm_H3.6mm_ReverseMount_9775036960","Mounting_Wuerth/Mounting_Wuerth_WA-SMSR-3.2mm_H4.1mm_ReverseMount_9775041960","Mounting_Wuerth/Mounting_Wuerth_WA-SMSR-3.2mm_H4.6mm_ReverseMount_9775046960","Mounting_Wuerth/Mounting_Wuerth_WA-SMSR-3.2mm_H5.1mm_ReverseMount_9775051960","Mounting_Wuerth/Mounting_Wuerth_WA-SMSR-3.2mm_H5.6mm_ReverseMount_9775056960","Mounting_Wuerth/Mounting_Wuerth_WA-SMSR-3.2mm_H6.6mm_ReverseMount_9775066960","Mounting_Wuerth/Mounting_Wuerth_WA-SMSR-3.2mm_H7.6mm_ReverseMount_9775076960","Mounting_Wuerth/Mounting_Wuerth_WA-SMSR-3.2mm_H8.6mm_ReverseMount_9775086960","Mounting_Wuerth/Mounting_Wuerth_WA-SMSR-3.2mm_H9.6mm_ReverseMount_9775096960","Mounting_Wuerth/Mounting_Wuerth_WA-SMSR-M3_H10.6mm_ReverseMount_9775106360","Mounting_Wuerth/Mounting_Wuerth_WA-SMSR-M3_H11.6mm_ReverseMount_9775116360","Mounting_Wuerth/Mounting_Wuerth_WA-SMSR-M3_H2.6mm_ReverseMount_9775026360","Mounting_Wuerth/Mounting_Wuerth_WA-SMSR-M3_H3.1mm_ReverseMount_9775031360","Mounting_Wuerth/Mounting_Wuerth_WA-SMSR-M3_H3.6mm_ReverseMount_9775036360","Mounting_Wuerth/Mounting_Wuerth_WA-SMSR-M3_H4.1mm_ReverseMount_9775041360","Mounting_Wuerth/Mounting_Wuerth_WA-SMSR-M3_H4.6mm_ReverseMount_9775046360","Mounting_Wuerth/Mounting_Wuerth_WA-SMSR-M3_H5.1mm_ReverseMount_9775051360","Mounting_Wuerth/Mounting_Wuerth_WA-SMSR-M3_H5.6mm_ReverseMount_9775056360","Mounting_Wuerth/Mounting_Wuerth_WA-SMSR-M3_H6.6mm_ReverseMount_9775066360","Mounting_Wuerth/Mounting_Wuerth_WA-SMSR-M3_H7.6mm_ReverseMount_9775076360","Mounting_Wuerth/Mounting_Wuerth_WA-SMSR-M3_H8.6mm_ReverseMount_9775086360","Mounting_Wuerth/Mounting_Wuerth_WA-SMSR-M3_H9.6mm_ReverseMount_9775096360","Mounting_Wuerth/Mounting_Wuerth_WA-SMSSR-3.3mm_H10mm_SnapRivet_9776100960","Mounting_Wuerth/Mounting_Wuerth_WA-SMSSR-3.3mm_H2.5mm_SnapRivet_9776025960","Mounting_Wuerth/Mounting_Wuerth_WA-SMSSR-3.3mm_H2mm_SnapRivet_9776020960","Mounting_Wuerth/Mounting_Wuerth_WA-SMSSR-3.3mm_H3mm_SnapRivet_9776030960","Mounting_Wuerth/Mounting_Wuerth_WA-SMSSR-3.3mm_H4mm_SnapRivet_9776040960","Mounting_Wuerth/Mounting_Wuerth_WA-SMSSR-3.3mm_H5mm_SnapRivet_9776050960","Mounting_Wuerth/Mounting_Wuerth_WA-SMSSR-3.3mm_H6mm_SnapRivet_9776060960","Mounting_Wuerth/Mounting_Wuerth_WA-SMSSR-3.3mm_H7mm_SnapRivet_9776070960","Mounting_Wuerth/Mounting_Wuerth_WA-SMSSR-3.3mm_H8mm_SnapRivet_9776080960","Mounting_Wuerth/Mounting_Wuerth_WA-SMSSR-3.3mm_H9mm_SnapRivet_9776090960","Mounting_Wuerth/Mounting_Wuerth_WA-SMST-2.25mm_H1.5mm_9774015943","Mounting_Wuerth/Mounting_Wuerth_WA-SMST-2.25mm_H1mm_9774010943","Mounting_Wuerth/Mounting_Wuerth_WA-SMST-2.25mm_H2.5mm_9774025943","Mounting_Wuerth/Mounting_Wuerth_WA-SMST-2.25mm_H2mm_9774020943","Mounting_Wuerth/Mounting_Wuerth_WA-SMST-2.25mm_H3.5mm_9774035943","Mounting_Wuerth/Mounting_Wuerth_WA-SMST-2.25mm_H3mm_9774030943","Mounting_Wuerth/Mounting_Wuerth_WA-SMST-2.25mm_H4.5mm_9774045943","Mounting_Wuerth/Mounting_Wuerth_WA-SMST-2.25mm_H4mm_9774040943","Mounting_Wuerth/Mounting_Wuerth_WA-SMST-2.25mm_H5mm_9774050943","Mounting_Wuerth/Mounting_Wuerth_WA-SMST-2.25mm_H6mm_9774060943","Mounting_Wuerth/Mounting_Wuerth_WA-SMST-2.25mm_H7mm_9774070943","Mounting_Wuerth/Mounting_Wuerth_WA-SMST-2.25mm_H8mm_9774080943","Mounting_Wuerth/Mounting_Wuerth_WA-SMST-2.7mm_H1.5mm_9774015951","Mounting_Wuerth/Mounting_Wuerth_WA-SMST-2.7mm_H10mm_9774100951","Mounting_Wuerth/Mounting_Wuerth_WA-SMST-2.7mm_H1mm_9774010951","Mounting_Wuerth/Mounting_Wuerth_WA-SMST-2.7mm_H2.5mm_9774025951","Mounting_Wuerth/Mounting_Wuerth_WA-SMST-2.7mm_H2mm_9774020951","Mounting_Wuerth/Mounting_Wuerth_WA-SMST-2.7mm_H3mm_9774030951","Mounting_Wuerth/Mounting_Wuerth_WA-SMST-2.7mm_H4mm_9774040951","Mounting_Wuerth/Mounting_Wuerth_WA-SMST-2.7mm_H5.5mm_9774055951","Mounting_Wuerth/Mounting_Wuerth_WA-SMST-2.7mm_H5mm_9774050951","Mounting_Wuerth/Mounting_Wuerth_WA-SMST-2.7mm_H6.5mm_9774065951","Mounting_Wuerth/Mounting_Wuerth_WA-SMST-2.7mm_H6mm_9774060951","Mounting_Wuerth/Mounting_Wuerth_WA-SMST-2.7mm_H7mm_9774070951","Mounting_Wuerth/Mounting_Wuerth_WA-SMST-2.7mm_H8mm_9774080951","Mounting_Wuerth/Mounting_Wuerth_WA-SMST-2.7mm_H9mm_9774090951","Mounting_Wuerth/Mounting_Wuerth_WA-SMST-3.3mm_H1.5mm_9774015960","Mounting_Wuerth/Mounting_Wuerth_WA-SMST-3.3mm_H10mm_9774100960","Mounting_Wuerth/Mounting_Wuerth_WA-SMST-3.3mm_H11mm_9774110960","Mounting_Wuerth/Mounting_Wuerth_WA-SMST-3.3mm_H12mm_9774120960","Mounting_Wuerth/Mounting_Wuerth_WA-SMST-3.3mm_H13mm_9774130960","Mounting_Wuerth/Mounting_Wuerth_WA-SMST-3.3mm_H14mm_9774140960","Mounting_Wuerth/Mounting_Wuerth_WA-SMST-3.3mm_H15mm_9774150960","Mounting_Wuerth/Mounting_Wuerth_WA-SMST-3.3mm_H16mm_9774160960","Mounting_Wuerth/Mounting_Wuerth_WA-SMST-3.3mm_H1mm_9774010960","Mounting_Wuerth/Mounting_Wuerth_WA-SMST-3.3mm_H2.5mm_9774025960","Mounting_Wuerth/Mounting_Wuerth_WA-SMST-3.3mm_H2mm_9774020960","Mounting_Wuerth/Mounting_Wuerth_WA-SMST-3.3mm_H3mm_9774030960","Mounting_Wuerth/Mounting_Wuerth_WA-SMST-3.3mm_H4mm_9774040960","Mounting_Wuerth/Mounting_Wuerth_WA-SMST-3.3mm_H5mm_9774050960","Mounting_Wuerth/Mounting_Wuerth_WA-SMST-3.3mm_H6mm_9774060960","Mounting_Wuerth/Mounting_Wuerth_WA-SMST-3.3mm_H7mm_9774070960","Mounting_Wuerth/Mounting_Wuerth_WA-SMST-3.3mm_H8mm_9774080960","Mounting_Wuerth/Mounting_Wuerth_WA-SMST-3.3mm_H9mm_9774090960","Mounting_Wuerth/Mounting_Wuerth_WA-SMST-4.5mm_H10mm_9774100982","Mounting_Wuerth/Mounting_Wuerth_WA-SMST-4.5mm_H1mm_9774010982","Mounting_Wuerth/Mounting_Wuerth_WA-SMST-4.5mm_H2mm_9774020982","Mounting_Wuerth/Mounting_Wuerth_WA-SMST-4.5mm_H3mm_9774030982","Mounting_Wuerth/Mounting_Wuerth_WA-SMST-4.5mm_H4mm_9774040982","Mounting_Wuerth/Mounting_Wuerth_WA-SMST-4.5mm_H5mm_9774050982","Mounting_Wuerth/Mounting_Wuerth_WA-SMST-4.5mm_H6mm_9774060982","Mounting_Wuerth/Mounting_Wuerth_WA-SMST-4.5mm_H7mm_9774070982","Mounting_Wuerth/Mounting_Wuerth_WA-SMST-4.5mm_H8mm_9774080982","Mounting_Wuerth/Mounting_Wuerth_WA-SMST-4.5mm_H9mm_9774090982","Mounting_Wuerth/Mounting_Wuerth_WP-SMRA-D3.3mm_L7mm_7466300_Horizontal","Mounting_Wuerth/Mounting_Wuerth_WP-SMRA-M3_L7mm_7466303_Horizontal","NetTie/NetTie-2_SMD_Pad0.5mm","NetTie/NetTie-2_SMD_Pad2.0mm","NetTie/NetTie-2_THT_Pad0.3mm","NetTie/NetTie-2_THT_Pad1.0mm","NetTie/NetTie-3_SMD_Pad0.5mm","NetTie/NetTie-3_SMD_Pad2.0mm","NetTie/NetTie-3_THT_Pad0.3mm","NetTie/NetTie-3_THT_Pad1.0mm","NetTie/NetTie-4_SMD_Pad0.5mm","NetTie/NetTie-4_SMD_Pad2.0mm","NetTie/NetTie-4_THT_Pad0.3mm","NetTie/NetTie-4_THT_Pad1.0mm","OptoDevice/ADNS-9800","OptoDevice/AGILENT_HFBR-152x","OptoDevice/AGILENT_HFBR-252x","OptoDevice/AMS_TSL2550_SMD","OptoDevice/AMS_TSL25911FN","OptoDevice/Broadcom_AFBR-16xxZ_Horizontal","OptoDevice/Broadcom_AFBR-16xxZ_Tilted","OptoDevice/Broadcom_AFBR-16xxZ_Vertical","OptoDevice/Broadcom_APDS-9160-003","OptoDevice/Broadcom_APDS-9301","OptoDevice/Broadcom_DFN-6_2x2mm_P0.65mm","OptoDevice/Broadcom_LGA-8_2x2mm_P0.53mm","OptoDevice/Broadcom_LGA-8_2x2mm_P0.5mm","OptoDevice/Everlight_IRM-H6xxT","OptoDevice/Everlight_ITR1201SR10AR","OptoDevice/Everlight_ITR8307","OptoDevice/Everlight_ITR8307F43","OptoDevice/Everlight_ITR8307_Reverse","OptoDevice/Everlight_ITR9608-F","OptoDevice/Finder_34.81","OptoDevice/Hamamatsu_C12880","OptoDevice/Hamamatsu_S13360-30CS","OptoDevice/Hamamatsu_S14160-6050HS","OptoDevice/Kingbright_KPS-3227","OptoDevice/Kingbright_KPS-5130","OptoDevice/Kingbright_KRC011_Horizontal","OptoDevice/Kingbright_KRC011_Vertical","OptoDevice/Kodenshi_LG206D","OptoDevice/Kodenshi_LG206L","OptoDevice/Kodenshi_SG105","OptoDevice/Kodenshi_SG105F","OptoDevice/Kodenshi_SG105_Reverse","OptoDevice/LaserDiode_TO18-D5.6-3","OptoDevice/LaserDiode_TO3.3-D3.3-3","OptoDevice/LaserDiode_TO38ICut-3","OptoDevice/LaserDiode_TO5-D9-3","OptoDevice/LaserDiode_TO56-3","OptoDevice/Lightpipe_Bivar_RLP1-400-650","OptoDevice/Lightpipe_Bivar_SLP3-150-100-F","OptoDevice/Lightpipe_Bivar_SLP3-150-100-R","OptoDevice/Lightpipe_Bivar_SLP3-150-150-F","OptoDevice/Lightpipe_Bivar_SLP3-150-150-R","OptoDevice/Lightpipe_Bivar_SLP3-150-200-R","OptoDevice/Lightpipe_Bivar_SLP3-150-250-F","OptoDevice/Lightpipe_Bivar_SLP3-150-250-R","OptoDevice/Lightpipe_Bivar_SLP3-150-300-F","OptoDevice/Lightpipe_Bivar_SLP3-150-300-R","OptoDevice/Lightpipe_Bivar_SLP3-150-450-R","OptoDevice/Lightpipe_Dialight_515-1064F","OptoDevice/Lightpipe_LPF-C012303S","OptoDevice/Lightpipe_LPF-C013301S","OptoDevice/Lightpipe_Mentor_1275.x00x","OptoDevice/Lightpipe_Mentor_1276.1004","OptoDevice/Lightpipe_Mentor_1276.2004","OptoDevice/Lite-On_LTR-303ALS-01","OptoDevice/Luna_NSL-32","OptoDevice/Maxim_OLGA-14_3.3x5.6mm_P0.8mm","OptoDevice/ONSemi_QSE15x","OptoDevice/OnSemi_CASE100AQ","OptoDevice/OnSemi_CASE100CY","OptoDevice/Osram_BP104-SMD","OptoDevice/Osram_BPW34S-SMD","OptoDevice/Osram_BPW82","OptoDevice/Osram_DIL2_4.3x4.65mm_P5.08mm","OptoDevice/Osram_LPT80A","OptoDevice/Osram_SFH205","OptoDevice/Osram_SFH2201","OptoDevice/Osram_SFH225","OptoDevice/Osram_SFH2430","OptoDevice/Osram_SFH2440","OptoDevice/Osram_SFH3710","OptoDevice/Osram_SFH9x0x","OptoDevice/Osram_SMD-SmartDIL","OptoDevice/Panasonic_APV-AQY_SSOP-4_4.45x2.65mm_P1.27mm","OptoDevice/PerkinElmer_VTL5C","OptoDevice/PerkinElmer_VTL5Cx2","OptoDevice/R_LDR_10x8.5mm_P7.6mm_Vertical","OptoDevice/R_LDR_11x9.4mm_P8.2mm_Vertical","OptoDevice/R_LDR_12x10.8mm_P9.0mm_Vertical","OptoDevice/R_LDR_4.9x4.2mm_P2.54mm_Vertical","OptoDevice/R_LDR_5.0x4.1mm_P3mm_Vertical","OptoDevice/R_LDR_5.1x4.3mm_P3.4mm_Vertical","OptoDevice/R_LDR_5.2x5.2mm_P3.5mm_Horizontal","OptoDevice/R_LDR_7x6mm_P5.1mm_Vertical","OptoDevice/R_LDR_D13.8mm_P9.0mm_Vertical","OptoDevice/R_LDR_D20mm_P17.5mm_Vertical","OptoDevice/R_LDR_D6.4mm_P3.4mm_Vertical","OptoDevice/Renesas_DFN-6_1.5x1.6mm_P0.5mm","OptoDevice/Rohm_RPR-0720","OptoDevice/ST_VL53L0X","OptoDevice/Sharp_GP2S700HCP","OptoDevice/Sharp_GP2Y0A41SK0F","OptoDevice/Sharp_IS471F","OptoDevice/Sharp_IS485","OptoDevice/Siemens_SFH900","OptoDevice/Toshiba_TORX170_TORX173_TORX193_TORX194","OptoDevice/Toshiba_TOTX170_TOTX173_TOTX193_TOTX194","OptoDevice/Vishay_CAST-3Pin","OptoDevice/Vishay_CNY70","OptoDevice/Vishay_MINICAST-3Pin","OptoDevice/Vishay_MINIMOLD-3Pin","OptoDevice/Vishay_MOLD-3Pin","OptoDevice/Vishay_TCRT5000","Oscillator/Oscillator_DIP-14","Oscillator/Oscillator_DIP-14_LargePads","Oscillator/Oscillator_DIP-8","Oscillator/Oscillator_DIP-8_LargePads","Oscillator/Oscillator_OCXO_Morion_MV267","Oscillator/Oscillator_OCXO_Morion_MV317","Oscillator/Oscillator_SMD_Abracon_ABLNO","Oscillator/Oscillator_SMD_Abracon_ASCO-4Pin_1.6x1.2mm","Oscillator/Oscillator_SMD_Abracon_ASDMB-4Pin_2.5x2.0mm","Oscillator/Oscillator_SMD_Abracon_ASE-4Pin_3.2x2.5mm","Oscillator/Oscillator_SMD_Abracon_ASE-4Pin_3.2x2.5mm_HandSoldering","Oscillator/Oscillator_SMD_Abracon_ASV-4Pin_7.0x5.1mm","Oscillator/Oscillator_SMD_Abracon_ASV-4Pin_7.0x5.1mm_HandSoldering","Oscillator/Oscillator_SMD_Diodes_FN-4Pin_7.0x5.0mm","Oscillator/Oscillator_SMD_ECS_2520MV-xxx-xx-4Pin_2.5x2.0mm","Oscillator/Oscillator_SMD_EuroQuartz_XO32-4Pin_3.2x2.5mm","Oscillator/Oscillator_SMD_EuroQuartz_XO32-4Pin_3.2x2.5mm_RotB","Oscillator/Oscillator_SMD_EuroQuartz_XO32-4Pin_3.2x2.5mm_RotB_HandSoldering","Oscillator/Oscillator_SMD_EuroQuartz_XO53-4Pin_5.0x3.2mm","Oscillator/Oscillator_SMD_EuroQuartz_XO53-4Pin_5.0x3.2mm_HandSoldering","Oscillator/Oscillator_SMD_EuroQuartz_XO91-4Pin_7.0x5.0mm","Oscillator/Oscillator_SMD_EuroQuartz_XO91-4Pin_7.0x5.0mm_HandSoldering","Oscillator/Oscillator_SMD_Fordahl_DFAS1-6Pin_14.8x9.1mm","Oscillator/Oscillator_SMD_Fordahl_DFAS11-4Pin_7.0x5.0mm","Oscillator/Oscillator_SMD_Fordahl_DFAS11-4Pin_7.0x5.0mm_HandSoldering","Oscillator/Oscillator_SMD_Fordahl_DFAS15-4Pin_5.0x3.2mm","Oscillator/Oscillator_SMD_Fordahl_DFAS15-4Pin_5.0x3.2mm_HandSoldering","Oscillator/Oscillator_SMD_Fordahl_DFAS2-4Pin_7.3x5.1mm","Oscillator/Oscillator_SMD_Fordahl_DFAS2-4Pin_7.3x5.1mm_HandSoldering","Oscillator/Oscillator_SMD_Fordahl_DFAS3-4Pin_9.1x7.2mm","Oscillator/Oscillator_SMD_Fordahl_DFAS3-4Pin_9.1x7.2mm_HandSoldering","Oscillator/Oscillator_SMD_Fordahl_DFAS7-4Pin_19.9x12.9mm","Oscillator/Oscillator_SMD_Fordahl_DFAS7-4Pin_19.9x12.9mm_HandSoldering","Oscillator/Oscillator_SMD_Fox_FT5H_5.0x3.2mm","Oscillator/Oscillator_SMD_IDT_JS6-6_5.0x3.2mm_P1.27mm","Oscillator/Oscillator_SMD_IDT_JU6-6_7.0x5.0mm_P2.54mm","Oscillator/Oscillator_SMD_IQD_IQXO70-4Pin_7.5x5.0mm","Oscillator/Oscillator_SMD_IQD_IQXO70-4Pin_7.5x5.0mm_HandSoldering","Oscillator/Oscillator_SMD_Kyocera_2520-6Pin_2.5x2.0mm","Oscillator/Oscillator_SMD_Kyocera_KC2520Z-4Pin_2.5x2.0mm","Oscillator/Oscillator_SMD_OCXO_ConnorWinfield_OH300","Oscillator/Oscillator_SMD_SI570_SI571_HandSoldering","Oscillator/Oscillator_SMD_SI570_SI571_Standard","Oscillator/Oscillator_SMD_SeikoEpson_SG210-4Pin_2.5x2.0mm","Oscillator/Oscillator_SMD_SeikoEpson_SG210-4Pin_2.5x2.0mm_HandSoldering","Oscillator/Oscillator_SMD_SeikoEpson_SG3030CM","Oscillator/Oscillator_SMD_SeikoEpson_SG8002CA-4Pin_7.0x5.0mm","Oscillator/Oscillator_SMD_SeikoEpson_SG8002CA-4Pin_7.0x5.0mm_HandSoldering","Oscillator/Oscillator_SMD_SeikoEpson_SG8002CE-4Pin_3.2x2.5mm","Oscillator/Oscillator_SMD_SeikoEpson_SG8002CE-4Pin_3.2x2.5mm_HandSoldering","Oscillator/Oscillator_SMD_SeikoEpson_SG8002JA-4Pin_14.0x8.7mm","Oscillator/Oscillator_SMD_SeikoEpson_SG8002JA-4Pin_14.0x8.7mm_HandSoldering","Oscillator/Oscillator_SMD_SeikoEpson_SG8002JC-4Pin_10.5x5.0mm","Oscillator/Oscillator_SMD_SeikoEpson_SG8002JC-4Pin_10.5x5.0mm_HandSoldering","Oscillator/Oscillator_SMD_SeikoEpson_SG8002LB-4Pin_5.0x3.2mm","Oscillator/Oscillator_SMD_SeikoEpson_SG8002LB-4Pin_5.0x3.2mm_HandSoldering","Oscillator/Oscillator_SMD_SeikoEpson_TG2520SMN-xxx-xxxxxx-4Pin_2.5x2.0mm","Oscillator/Oscillator_SMD_SiT_PQFN-4Pin_2.0x1.6mm","Oscillator/Oscillator_SMD_SiT_PQFN-4Pin_2.5x2.0mm","Oscillator/Oscillator_SMD_SiT_PQFN-4Pin_3.2x2.5mm","Oscillator/Oscillator_SMD_SiT_PQFN-4Pin_5.0x3.2mm","Oscillator/Oscillator_SMD_SiT_PQFN-4Pin_7.0x5.0mm","Oscillator/Oscillator_SMD_SiTime_PQFD-6L_3.2x2.5mm","Oscillator/Oscillator_SMD_SiTime_SiT9121-6Pin_3.2x2.5mm","Oscillator/Oscillator_SMD_Silicon_Labs_LGA-6_2.5x3.2mm_P1.25mm","Oscillator/Oscillator_SMD_TCXO_G158","Oscillator/Oscillator_SMD_TXC_7C-4Pin_5.0x3.2mm","Oscillator/Oscillator_SMD_TXC_7C-4Pin_5.0x3.2mm_HandSoldering","Oscillator/Oscillator_SeikoEpson_SG-8002DB","Oscillator/Oscillator_SeikoEpson_SG-8002DC","Package_BGA/Alliance_TFBGA-36_6x8mm_Layout6x8_P0.75mm","Package_BGA/Alliance_TFBGA-54_8x8mm_Layout9x9_P0.8mm","Package_BGA/Analog_BGA-165_11.9x16mm_Layout11x15_P1.0mm","Package_BGA/Analog_BGA-209_9.5x16mm_Layout11x19_P0.8mm","Package_BGA/Analog_BGA-28_4x6.25mm_Layout4x7_P0.8mm","Package_BGA/Analog_BGA-49_6.25x6.25mm_Layout7x7_P0.8mm","Package_BGA/Analog_BGA-77_9x15mm_Layout7x11_P1.27mm","Package_BGA/BGA-100_11.0x11.0mm_Layout10x10_P1.0mm_Ball0.5mm_Pad0.4mm_NSMD","Package_BGA/BGA-100_12x18mm_Layout10x17_P1mm","Package_BGA/BGA-100_14x18mm_Layout10x17_P1mm","Package_BGA/BGA-100_6.0x6.0mm_Layout11x11_P0.5mm_Ball0.3mm_Pad0.25mm_NSMD","Package_BGA/BGA-1023_33.0x33.0mm_Layout32x32_P1.0mm","Package_BGA/BGA-1156_35.0x35.0mm_Layout34x34_P1.0mm","Package_BGA/BGA-121_9.0x9.0mm_Layout11x11_P0.8mm_Ball0.4mm_Pad0.35mm_NSMD","Package_BGA/BGA-1295_37.5x37.5mm_Layout36x36_P1.0mm","Package_BGA/BGA-132_12x18mm_Layout11x17_P1.0mm","Package_BGA/BGA-132_12x18mm_Layout11x17_P1mm","Package_BGA/BGA-144_13.0x13.0mm_Layout12x12_P1.0mm","Package_BGA/BGA-144_7.0x7.0mm_Layout13x13_P0.5mm_Ball0.3mm_Pad0.25mm_NSMD","Package_BGA/BGA-152_14x18mm_Layout13x17_P0.5mm","Package_BGA/BGA-152_14x18mm_Layout13x17_P1mm","Package_BGA/BGA-153_8.0x8.0mm_Layout15x15_P0.5mm_Ball0.3mm_Pad0.25mm_NSMD","Package_BGA/BGA-169_11.0x11.0mm_Layout13x13_P0.8mm_Ball0.5mm_Pad0.4mm_NSMD","Package_BGA/BGA-16_1.92x1.92mm_Layout4x4_P0.5mm","Package_BGA/BGA-196_15x15mm_Layout14x14_P1.0mm","Package_BGA/BGA-200_10x14.5mm_Layout12x22_P0.8x0.65mm","Package_BGA/BGA-24_6x8mm_Layout5x5_P1.0mm","Package_BGA/BGA-24_8x8mm_Layout5x5_P1.0mm","Package_BGA/BGA-256_11.0x11.0mm_Layout20x20_P0.5mm_Ball0.3mm_Pad0.25mm_NSMD","Package_BGA/BGA-256_14.0x14.0mm_Layout16x16_P0.8mm_Ball0.45mm_Pad0.32mm_NSMD","Package_BGA/BGA-256_17.0x17.0mm_Layout16x16_P1.0mm_Ball0.5mm_Pad0.4mm_NSMD","Package_BGA/BGA-25_6.35x6.35mm_Layout5x5_P1.27mm","Package_BGA/BGA-324_15.0x15.0mm_Layout18x18_P0.8mm_Ball0.5mm_Pad0.4mm_NSMD","Package_BGA/BGA-324_15x15mm_Layout18x18_P0.8mm","Package_BGA/BGA-324_19.0x19.0mm_Layout18x18_P1.0mm_Ball0.5mm_Pad0.4mm_NSMD","Package_BGA/BGA-352_35.0x35.0mm_Layout26x26_P1.27mm","Package_BGA/BGA-36_3.396x3.466mm_Layout6x6_P0.4mm_Ball0.25mm_Pad0.2mm_NSMD","Package_BGA/BGA-400_21.0x21.0mm_Layout20x20_P1.0mm","Package_BGA/BGA-484_23.0x23.0mm_Layout22x22_P1.0mm","Package_BGA/BGA-48_8.0x9.0mm_Layout6x8_P0.8mm","Package_BGA/BGA-529_19x19mm_Layout23x23_P0.8mm","Package_BGA/BGA-624_21x21mm_Layout25x25_P0.8mm","Package_BGA/BGA-625_21.0x21.0mm_Layout25x25_P0.8mm","Package_BGA/BGA-63_9x11mm_Layout10x12_P0.8mm","Package_BGA/BGA-64_9.0x9.0mm_Layout10x10_P0.8mm","Package_BGA/BGA-672_27.0x27.0mm_Layout26x26_P1.0mm_Ball0.6mm_Pad0.5mm_NSMD","Package_BGA/BGA-676_27.0x27.0mm_Layout26x26_P1.0mm_Ball0.6mm_Pad0.5mm_NSMD","Package_BGA/BGA-68_5.0x5.0mm_Layout9x9_P0.5mm_Ball0.3mm_Pad0.25mm_NSMD","Package_BGA/BGA-81_4.496x4.377mm_Layout9x9_P0.4mm_Ball0.25mm_Pad0.2mm_NSMD","Package_BGA/BGA-90_8.0x13.0mm_Layout2x3x15_P0.8mm","Package_BGA/BGA-96_9.0x13.0mm_Layout2x3x16_P0.8mm","Package_BGA/BGA-9_1.6x1.6mm_Layout3x3_P0.5mm","Package_BGA/EPC_BGA-4_0.9x0.9mm_Layout2x2_P0.45mm","Package_BGA/FB-BGA-484_23.0x23.0mm_Layout22x22_P1.0mm","Package_BGA/FBGA-78_7.5x10.5mm_Layout9x13_P0.8mm","Package_BGA/FBGA-78_7.5x10.6mm_Layout9x13_P0.8mm","Package_BGA/FBGA-78_7.5x11mm_Layout2x3x13_P0.8mm","Package_BGA/FBGA-78_8x10.5mm_Layout9x13_P0.8mm","Package_BGA/FBGA-78_9x10.5mm_Layout9x13_P0.8mm","Package_BGA/FBGA-78_9x10.6mm_Layout9x13_P0.8mm","Package_BGA/FBGA-96_7.5x13.5mm_Layout9x16_P0.8mm","Package_BGA/FBGA-96_7.5x13mm_Layout9x16_P0.8mm","Package_BGA/FBGA-96_8x13mm_Layout9x16_P0.8mm","Package_BGA/FBGA-96_8x14mm_Layout9x16_P0.8mm","Package_BGA/FBGA-96_9x13mm_Layout9x16_P0.8mm","Package_BGA/FBGA-96_9x14mm_Layout9x16_P0.8mm","Package_BGA/FCPBGA-780_23x23mm_Layout28x28_P0.8mm","Package_BGA/Fujitsu_WLP-15_2.28x3.092mm_Layout3x5_P0.4mm","Package_BGA/Infineon_LFBGA-292_17x17mm_Layout20x20_P0.8mm","Package_BGA/Infineon_TFBGA-48_6x10mm_Layout6x8_P0.75mm","Package_BGA/LFBGA-100_10x10mm_Layout10x10_P0.8mm","Package_BGA/LFBGA-144_10x10mm_Layout12x12_P0.8mm","Package_BGA/LFBGA-153_11.5x13mm_Layout14x14_P0.5mm","Package_BGA/LFBGA-169_12x16mm_Layout14x28_P0.5mm","Package_BGA/LFBGA-169_12x18mm_Layout14x28_P0.5mm","Package_BGA/LFBGA-169_14x18mm_Layout14x28_P0.5mm","Package_BGA/LFBGA-289_14x14mm_Layout17x17_P0.8mm","Package_BGA/LFBGA-400_16x16mm_Layout20x20_P0.8mm","Package_BGA/LFBGA-484_18x18mm_Layout22x22_P0.8mm","Package_BGA/Lattice_caBGA-381_17x17mm_Layout20x20_P0.8mm","Package_BGA/Lattice_caBGA-381_17x17mm_Layout20x20_P0.8mm_SMD","Package_BGA/Lattice_caBGA-756_27x27mm_Layout32x32_P0.8mm","Package_BGA/Lattice_iCE40_csBGA-132_8x8mm_Layout14x14_P0.5mm","Package_BGA/Linear_BGA-133_15.0x15.0mm_Layout12x12_P1.27mm","Package_BGA/MAPBGA-272_9x9mm_Layout17x17_P0.5mm","Package_BGA/MAPBGA-289_14x14mm_Layout17x17_P0.8mm","Package_BGA/Maxim_WLP-12","Package_BGA/Maxim_WLP-12_2.008x1.608mm_Layout4x3_P0.4mm","Package_BGA/Maxim_WLP-9_1.595x1.415_Layout3x3_P0.4mm_Ball0.27mm_Pad0.25mm_NSMD","Package_BGA/Microchip_FCG1152_BGA-1152_35x35mm_Layout34x34_P1.0mm","Package_BGA/Microchip_FCSG325_BGA-325_11x11mm_Layout21x21_P0.5mm","Package_BGA/Microchip_FCSG536_BGA-536_16x16mm_Layout30x30_P0.5mm","Package_BGA/Microchip_FCVG484_BGA-484_19x19mm_Layout22x22_P0.8mm","Package_BGA/Microchip_FCVG784_BGA-784_23x23mm_Layout28x28_P0.8mm","Package_BGA/Microchip_TFBGA-196_11x11mm_Layout14x14_P0.75mm_SMD","Package_BGA/Micron_FBGA-78_7.5x10.6mm_Layout9x13_P0.8mm","Package_BGA/Micron_FBGA-78_8x10.5mm_Layout9x13_P0.8mm","Package_BGA/Micron_FBGA-78_9x10.5mm_Layout9x13_P0.8mm","Package_BGA/Micron_FBGA-96_7.5x13.5mm_Layout9x16_P0.8mm","Package_BGA/Micron_FBGA-96_8x14mm_Layout9x16_P0.8mm","Package_BGA/Micron_FBGA-96_9x14mm_Layout9x16_P0.8mm","Package_BGA/NXP_SOT1982-1_VFBGA-98_7x7mm_Layout13x13_P0.5mm","Package_BGA/NXP_SOT2162-1_VFBGA-59_4x4mm_Layout9x9_P0.4mm","Package_BGA/NXP_TFBGA-50_5x5mm_Layout9x9_P0.5mm","Package_BGA/NXP_VFBGA-42_2.6x3mm_Layout6x7_P0.4mm","Package_BGA/ST_LFBGA-354_16x16mm_Layout19x19_P0.8mm","Package_BGA/ST_LFBGA-448_18x18mm_Layout22x22_P0.8mm","Package_BGA/ST_TFBGA-169_7x7mm_Layout13x13_P0.5mm","Package_BGA/ST_TFBGA-225_13x13mm_Layout15x15_P0.8mm","Package_BGA/ST_TFBGA-257_10x10mm_Layout19x19_P0.5mmP0.65mm","Package_BGA/ST_TFBGA-320_11x11mm_Layout21x21_P0.5mm","Package_BGA/ST_TFBGA-361_12x12mm_Layout23x23_P0.5mmP0.65mm","Package_BGA/ST_TFBGA-436_18x18mm_Layout22x22_P0.8mm","Package_BGA/ST_UFBGA-121_6x6mm_Layout11x11_P0.5mm","Package_BGA/ST_UFBGA-129_7x7mm_Layout13x13_P0.5mm","Package_BGA/ST_UFBGA-59_5x5mm_Layout8x8_P0.5mm","Package_BGA/ST_UFBGA-73_5x5mm_Layout9x9_P0.5mm","Package_BGA/ST_UFBGA-81_5x5mm_Layout9x9_P0.5mm","Package_BGA/ST_VFBGA-361_10x10mm_Layout19x19_P0.5mm","Package_BGA/ST_VFBGA-424_14x14mm_Layout27x27_P0.5mmP0.5x0.5mm_Stagger","Package_BGA/ST_uTFBGA-36_3.6x3.6mm_Layout6x6_P0.5mm","Package_BGA/TFBGA-100_5.5x5.5mm_Layout10x10_P0.5mm","Package_BGA/TFBGA-100_8x8mm_Layout10x10_P0.8mm","Package_BGA/TFBGA-100_9.0x9.0mm_Layout10x10_P0.8mm","Package_BGA/TFBGA-121_10x10mm_Layout11x11_P0.8mm","Package_BGA/TFBGA-169_9x9mm_Layout13x13_P0.65mm","Package_BGA/TFBGA-216_13x13mm_Layout15x15_P0.8mm","Package_BGA/TFBGA-225_10x10mm_Layout15x15_P0.65mm","Package_BGA/TFBGA-256_13x13mm_Layout16x16_P0.8mm","Package_BGA/TFBGA-265_14x14mm_Layout17x17_P0.8mm","Package_BGA/TFBGA-289_9x9mm_Layout17x17_P0.5mm","Package_BGA/TFBGA-324_12x12mm_Layout18x18_P0.65mm","Package_BGA/TFBGA-361_13x13mm_Layout19x19_P0.65mm","Package_BGA/TFBGA-48_6x10mm_Layout6x8_P0.75mm","Package_BGA/TFBGA-49_3x3mm_Layout7x7_P0.4mm","Package_BGA/TFBGA-576_16x16mm_Layout24x24_P0.65mm","Package_BGA/TFBGA-644_19x19mm_Layout28x28_P0.65mm","Package_BGA/TFBGA-64_5x5mm_Layout8x8_P0.5mm","Package_BGA/TFBGA-81_5x5mm_Layout9x9_P0.5mm","Package_BGA/Texas_BGA-289_15x15mm_Layout17x17_P0.8mm","Package_BGA/Texas_DSBGA-10_1.36x1.86mm_Layout3x4_P0.5mm","Package_BGA/Texas_DSBGA-12_1.36x1.86mm_Layout3x4_P0.5mm","Package_BGA/Texas_DSBGA-12_2.11x1.61mm_Layout4x3_P0.5mm","Package_BGA/Texas_DSBGA-16_2.39x2.39mm_Layout4x4_P0.5mm","Package_BGA/Texas_DSBGA-28_1.9x3mm_Layout4x7_P0.4mm","Package_BGA/Texas_DSBGA-49_3.33x3.488mm_Layout7x7_P0.4mm","Package_BGA/Texas_DSBGA-5_0.822x1.116mm_Layout2x1x2_P0.4mm","Package_BGA/Texas_DSBGA-5_0.8875x1.3875mm_Layout2x3_P0.5mm","Package_BGA/Texas_DSBGA-5_1.5855x1.6365mm_Layout3x2_P0.5mm","Package_BGA/Texas_DSBGA-64_3.415x3.535mm_Layout8x8_P0.4mm","Package_BGA/Texas_DSBGA-6_0.704x1.054mm_Layout2x3_P0.35mm","Package_BGA/Texas_DSBGA-6_0.757x1.01mm_Layout2x3_P0.35mm","Package_BGA/Texas_DSBGA-6_0.76x1.16mm_Layout2x3_P0.4mm","Package_BGA/Texas_DSBGA-6_0.855x1.255mm_Layout2x3_P0.4mm_LevelB","Package_BGA/Texas_DSBGA-6_0.855x1.255mm_Layout2x3_P0.4mm_LevelC","Package_BGA/Texas_DSBGA-6_0.95x1.488mm_Layout2x3_P0.4mm","Package_BGA/Texas_DSBGA-6_0.9x1.4mm_Layout2x3_P0.5mm","Package_BGA/Texas_DSBGA-8_0.705x1.468mm_Layout2x4_P0.4mm","Package_BGA/Texas_DSBGA-8_0.9x1.9mm_Layout2x4_P0.5mm","Package_BGA/Texas_DSBGA-8_1.43x1.41mm_Layout3x3_P0.5mm","Package_BGA/Texas_DSBGA-8_1.5195x1.5195mm_Layout3x3_P0.5mm","Package_BGA/Texas_DSBGA-9_1.4715x1.4715mm_Layout3x3_P0.5mm","Package_BGA/Texas_DSBGA-9_1.62x1.58mm_Layout3x3_P0.5mm","Package_BGA/Texas_MicroStar_Junior_BGA-113_7x7mm_Layout12x12_P0.5mm","Package_BGA/Texas_MicroStar_Junior_BGA-12_2.0x2.5mm_Layout4x3_P0.5mm","Package_BGA/Texas_MicroStar_Junior_BGA-80_5.0x5.0mm_Layout9x9_P0.5mm","Package_BGA/Texas_PicoStar_BGA-4_0.758x0.758mm_Layout2x2_P0.4mm","Package_BGA/Texas_YFP0020_DSBGA-20_1.588x1.988mm_Layout4x5_P0.4mm","Package_BGA/UCBGA-36_2.5x2.5mm_Layout6x6_P0.4mm","Package_BGA/UCBGA-49_3x3mm_Layout7x7_P0.4mm","Package_BGA/UCBGA-81_4x4mm_Layout9x9_P0.4mm","Package_BGA/UFBGA-100_7x7mm_Layout12x12_P0.5mm","Package_BGA/UFBGA-132_7x7mm_Layout12x12_P0.5mm","Package_BGA/UFBGA-132_7x7mm_P0.5mm","Package_BGA/UFBGA-144_10x10mm_Layout12x12_P0.8mm","Package_BGA/UFBGA-144_7x7mm_Layout12x12_P0.5mm","Package_BGA/UFBGA-15_3.0x3.0mm_Layout4x4_P0.65mm","Package_BGA/UFBGA-169_7x7mm_Layout13x13_P0.5mm","Package_BGA/UFBGA-201_10x10mm_Layout15x15_P0.65mm","Package_BGA/UFBGA-32_4.0x4.0mm_Layout6x6_P0.5mm","Package_BGA/UFBGA-64_5x5mm_Layout8x8_P0.5mm","Package_BGA/VFBGA-100_7.0x7.0mm_Layout10x10_P0.65mm","Package_BGA/VFBGA-49_5.0x5.0mm_Layout7x7_P0.65mm","Package_BGA/VFBGA-86_6x6mm_Layout10x10_P0.55mm","Package_BGA/WLP-4_0.728x0.728mm_Layout2x2_P0.35mm","Package_BGA/WLP-4_0.83x0.83mm_P0.4mm","Package_BGA/WLP-4_0.86x0.86mm_P0.4mm","Package_BGA/WLP-9_1.468x1.448mm_Layout3x3_P0.4mm","Package_BGA/XBGA-121_10x10mm_Layout11x11_P0.8mm","Package_BGA/XFBGA-121_8x8mm_Layout11x11_P0.65mm","Package_BGA/XFBGA-36_3.5x3.5mm_Layout6x6_P0.5mm","Package_BGA/XFBGA-64_5.0x5.0mm_Layout8x8_P0.5mm","Package_BGA/Xilinx_CLG225","Package_BGA/Xilinx_CLG400","Package_BGA/Xilinx_CLG484_CLG485","Package_BGA/Xilinx_CPG236","Package_BGA/Xilinx_CPG238","Package_BGA/Xilinx_CPGA196","Package_BGA/Xilinx_CSG324","Package_BGA/Xilinx_CSG325","Package_BGA/Xilinx_CSGA225","Package_BGA/Xilinx_CSGA324","Package_BGA/Xilinx_FBG484","Package_BGA/Xilinx_FBG676","Package_BGA/Xilinx_FBG900","Package_BGA/Xilinx_FFG1156","Package_BGA/Xilinx_FFG1157_FFG1158","Package_BGA/Xilinx_FFG1761","Package_BGA/Xilinx_FFG1926_FFG1927_FFG1928_FFG1930","Package_BGA/Xilinx_FFG676","Package_BGA/Xilinx_FFG900_FFG901","Package_BGA/Xilinx_FFV1761","Package_BGA/Xilinx_FGG484","Package_BGA/Xilinx_FGG676","Package_BGA/Xilinx_FGGA484","Package_BGA/Xilinx_FGGA676","Package_BGA/Xilinx_FHG1761","Package_BGA/Xilinx_FLG1925_FLG1926_FLG1928_FLG1930","Package_BGA/Xilinx_FTG256","Package_BGA/Xilinx_FTGB196","Package_BGA/Xilinx_RB484","Package_BGA/Xilinx_RB676","Package_BGA/Xilinx_RF1156","Package_BGA/Xilinx_RF1157_RF1158","Package_BGA/Xilinx_RF1761","Package_BGA/Xilinx_RF1930","Package_BGA/Xilinx_RF676","Package_BGA/Xilinx_RF900","Package_BGA/Xilinx_RFG676","Package_BGA/Xilinx_RS484","Package_BGA/Xilinx_SBG484","Package_BGA/Xilinx_SBG485","Package_BGA/csBGA-64_5x5mm_Layout8x8_P0.5mm","Package_BGA/ucBGA-64_4x4mm_Layout8x8_P0.4mm","Package_CSP/Analog_LFCSP-16-1EP_4x4mm_P0.65mm_EP2.1x2.1mm","Package_CSP/Analog_LFCSP-16-1EP_4x4mm_P0.65mm_EP2.1x2.1mm_ThermalVias","Package_CSP/Analog_LFCSP-16-1EP_4x4mm_P0.65mm_EP2.35x2.35mm","Package_CSP/Analog_LFCSP-16-1EP_4x4mm_P0.65mm_EP2.35x2.35mm_ThermalVias","Package_CSP/Analog_LFCSP-8-1EP_3x3mm_P0.5mm_EP1.53x1.85mm","Package_CSP/Analog_LFCSP-UQ-10_1.3x1.6mm_P0.4mm","Package_CSP/Anpec_WLCSP-20_1.76x2.03mm_Layout4x5_P0.4mm","Package_CSP/Dialog_WLCSP-34_4.54x1.66mm_Layout17x4_P0.25x0.34mm","Package_CSP/DiodesInc_GEA20_WLCSP-20_1.7x2.1mm_Layout4x5_P0.4mm","Package_CSP/Efinix_WLCSP-64_3.5353x3.3753mm_Layout8x8_P0.4mm","Package_CSP/Efinix_WLCSP-80_4.4567x3.5569mm_Layout10x8_P0.4mm","Package_CSP/LFCSP-10_2x2mm_P0.5mm","Package_CSP/LFCSP-16-1EP_3x3mm_P0.5mm_EP1.3x1.3mm","Package_CSP/LFCSP-16-1EP_3x3mm_P0.5mm_EP1.3x1.3mm_ThermalVias","Package_CSP/LFCSP-16-1EP_3x3mm_P0.5mm_EP1.5x1.5mm","Package_CSP/LFCSP-16-1EP_3x3mm_P0.5mm_EP1.6x1.6mm","Package_CSP/LFCSP-16-1EP_3x3mm_P0.5mm_EP1.6x1.6mm_ThermalVias","Package_CSP/LFCSP-16-1EP_3x3mm_P0.5mm_EP1.7x1.7mm","Package_CSP/LFCSP-16-1EP_3x3mm_P0.5mm_EP1.7x1.7mm_ThermalVias","Package_CSP/LFCSP-16-1EP_3x3mm_P0.5mm_EP1.854x1.854mm","Package_CSP/LFCSP-16-1EP_4x4mm_P0.65mm_EP2.1x2.1mm","Package_CSP/LFCSP-16-1EP_4x4mm_P0.65mm_EP2.4x2.4mm","Package_CSP/LFCSP-16-1EP_4x4mm_P0.65mm_EP2.4x2.4mm_ThermalVias","Package_CSP/LFCSP-16-1EP_4x4mm_P0.65mm_EP2.6x2.6mm","Package_CSP/LFCSP-16-1EP_4x4mm_P0.65mm_EP2.6x2.6mm_ThermalVias","Package_CSP/LFCSP-16_3x3mm_P0.5mm","Package_CSP/LFCSP-20-1EP_4x4mm_P0.5mm_EP2.1x2.1mm","Package_CSP/LFCSP-20-1EP_4x4mm_P0.5mm_EP2.1x2.1mm_ThermalVias","Package_CSP/LFCSP-20-1EP_4x4mm_P0.5mm_EP2.5x2.5mm","Package_CSP/LFCSP-20-1EP_4x4mm_P0.5mm_EP2.5x2.5mm_ThermalVias","Package_CSP/LFCSP-20-1EP_4x4mm_P0.5mm_EP2.6x2.6mm","Package_CSP/LFCSP-20-1EP_4x4mm_P0.5mm_EP2.6x2.6mm_ThermalVias","Package_CSP/LFCSP-24-1EP_4x4mm_P0.5mm_EP0.5x0.5mm","Package_CSP/LFCSP-24-1EP_4x4mm_P0.5mm_EP2.3x2.3mm","Package_CSP/LFCSP-24-1EP_4x4mm_P0.5mm_EP2.3x2.3mm_ThermalVias","Package_CSP/LFCSP-24-1EP_4x4mm_P0.5mm_EP2.5x2.5mm","Package_CSP/LFCSP-24-1EP_4x4mm_P0.5mm_EP2.5x2.5mm_ThermalVias","Package_CSP/LFCSP-28-1EP_5x5mm_P0.5mm_EP3.14x3.14mm","Package_CSP/LFCSP-28-1EP_5x5mm_P0.5mm_EP3.14x3.14mm_ThermalVias","Package_CSP/LFCSP-32-1EP_5x5mm_P0.5mm_EP3.1x3.1mm","Package_CSP/LFCSP-32-1EP_5x5mm_P0.5mm_EP3.1x3.1mm_ThermalVias","Package_CSP/LFCSP-32-1EP_5x5mm_P0.5mm_EP3.25x3.25mm","Package_CSP/LFCSP-32-1EP_5x5mm_P0.5mm_EP3.5x3.5mm","Package_CSP/LFCSP-32-1EP_5x5mm_P0.5mm_EP3.5x3.5mm_ThermalVias","Package_CSP/LFCSP-32-1EP_5x5mm_P0.5mm_EP3.6x3.6mm","Package_CSP/LFCSP-32-1EP_5x5mm_P0.5mm_EP3.6x3.6mm_ThermalVias","Package_CSP/LFCSP-40-1EP_6x6mm_P0.5mm_EP3.9x3.9mm","Package_CSP/LFCSP-40-1EP_6x6mm_P0.5mm_EP3.9x3.9mm_ThermalVias","Package_CSP/LFCSP-40-1EP_6x6mm_P0.5mm_EP4.65x4.65mm","Package_CSP/LFCSP-40-1EP_6x6mm_P0.5mm_EP4.65x4.65mm_ThermalVias","Package_CSP/LFCSP-40-1EP_6x6mm_P0.5mm_EP4.6x4.6mm","Package_CSP/LFCSP-40-1EP_6x6mm_P0.5mm_EP4.6x4.6mm_ThermalVias","Package_CSP/LFCSP-48-1EP_7x7mm_P0.5mm_EP4.1x4.1mm","Package_CSP/LFCSP-48-1EP_7x7mm_P0.5mm_EP4.1x4.1mm_ThermalVias","Package_CSP/LFCSP-56-1EP_8x8mm_P0.5mm_EP6.6x6.6mm","Package_CSP/LFCSP-56-1EP_8x8mm_P0.5mm_EP6.6x6.6mm_ThermalVias","Package_CSP/LFCSP-6-1EP_2x2mm_P0.65mm_EP1x1.6mm","Package_CSP/LFCSP-64-1EP_9x9mm_P0.5mm_EP5.21x5.21mm","Package_CSP/LFCSP-64-1EP_9x9mm_P0.5mm_EP5.21x5.21mm_ThermalVias","Package_CSP/LFCSP-72-1EP_10x10mm_P0.5mm_EP5.3x5.3mm","Package_CSP/LFCSP-72-1EP_10x10mm_P0.5mm_EP5.3x5.3mm_ThermalVias","Package_CSP/LFCSP-72-1EP_10x10mm_P0.5mm_EP6.15x6.15mm","Package_CSP/LFCSP-8-1EP_3x2mm_P0.5mm_EP1.6x1.65mm","Package_CSP/LFCSP-8-1EP_3x3mm_P0.5mm_EP1.45x1.74mm","Package_CSP/LFCSP-8-1EP_3x3mm_P0.5mm_EP1.6x2.34mm","Package_CSP/LFCSP-8-1EP_3x3mm_P0.5mm_EP1.6x2.34mm_ThermalVias","Package_CSP/LFCSP-8_2x2mm_P0.5mm","Package_CSP/LFCSP-VQ-24-1EP_4x4mm_P0.5mm_EP2.642x2.642mm","Package_CSP/LFCSP-VQ-48-1EP_7x7mm_P0.5mm","Package_CSP/LFCSP-WD-10-1EP_3x3mm_P0.5mm_EP1.64x2.38mm","Package_CSP/LFCSP-WD-10-1EP_3x3mm_P0.5mm_EP1.64x2.38mm_ThermalVias","Package_CSP/LFCSP-WD-8-1EP_3x3mm_P0.65mm_EP1.6x2.44mm","Package_CSP/LFCSP-WD-8-1EP_3x3mm_P0.65mm_EP1.6x2.44mm_ThermalVias","Package_CSP/Macronix_WLCSP-12_2.02x2.09mm_Layout4x4_P0.5mm","Package_CSP/Maxim_WLCSP-35_2.998x2.168mm_Layout7x5_P0.4mm","Package_CSP/NXP_SOT1444-5_WLCSP-49_3.44x3.44mm_Layout7x7_P0.4mm","Package_CSP/NXP_SOT1450-2_WLCSP-100_5.07x5.07mm_Layout10x10_P0.5mm","Package_CSP/Nexperia_WLCSP-15_2.37x1.17mm_Layout6x3_P0.4mmP0.8mm","Package_CSP/OnSemi_ODCSP36_BGA-36_6.13x6.13mm_Layout6x6_P1.0mm","Package_CSP/OnSemi_ODCSP36_BGA-36_6.13x6.13mm_Layout6x6_P1.0mm_ManualAssembly","Package_CSP/OnSemi_ODCSP8_BGA-8_3.16x3.16mm_Layout3x3_P1.26mm","Package_CSP/OnSemi_ODCSP8_BGA-8_3.16x3.16mm_Layout3x3_P1.26mm_ManualAssembly","Package_CSP/ST_WLCSP-100_4.437x4.456mm_Layout10x10_P0.4mm","Package_CSP/ST_WLCSP-100_4.4x4.38mm_Layout10x10_P0.4mm_Offcenter","Package_CSP/ST_WLCSP-100_Die422","Package_CSP/ST_WLCSP-100_Die446","Package_CSP/ST_WLCSP-100_Die452","Package_CSP/ST_WLCSP-100_Die461","Package_CSP/ST_WLCSP-101_3.86x3.79mm_Layout11x19_P0.35mm_Stagger","Package_CSP/ST_WLCSP-104_Die437","Package_CSP/ST_WLCSP-115_3.73x4.15mm_Layout11x21_P0.35mm_Stagger","Package_CSP/ST_WLCSP-115_4.63x4.15mm_Layout21x11_P0.4mm_Stagger","Package_CSP/ST_WLCSP-12_1.7x1.42mm_Layout4x6_P0.35mm_Stagger","Package_CSP/ST_WLCSP-132_4.57x4.37mm_Layout12x11_P0.35mm","Package_CSP/ST_WLCSP-143_Die419","Package_CSP/ST_WLCSP-143_Die449","Package_CSP/ST_WLCSP-144_Die470","Package_CSP/ST_WLCSP-150_5.38x5.47mm_Layout13x23_P0.4mm_Stagger","Package_CSP/ST_WLCSP-156_4.96x4.64mm_Layout13x12_P0.35mm","Package_CSP/ST_WLCSP-168_Die434","Package_CSP/ST_WLCSP-180_Die451","Package_CSP/ST_WLCSP-18_1.86x2.14mm_Layout7x5_P0.4mm_Stagger","Package_CSP/ST_WLCSP-19_1.643x2.492mm_Layout4x11_P0.35mm_Stagger","Package_CSP/ST_WLCSP-208_5.38x5.47mm_Layout26x16_P0.35mm_Stagger","Package_CSP/ST_WLCSP-208_5.8x5.6mm_Layout26x16_P0.35mm_Stagger","Package_CSP/ST_WLCSP-20_1.94x2.4mm_Layout4x5_P0.4mm","Package_CSP/ST_WLCSP-25_2.33x2.24mm_Layout5x5_P0.4mm","Package_CSP/ST_WLCSP-25_2.3x2.48mm_Layout5x5_P0.4mm","Package_CSP/ST_WLCSP-25_Die425","Package_CSP/ST_WLCSP-25_Die444","Package_CSP/ST_WLCSP-25_Die457","Package_CSP/ST_WLCSP-27_2.34x2.55mm_Layout9x6_P0.4mm_Stagger","Package_CSP/ST_WLCSP-36_2.58x3.07mm_Layout6x6_P0.4mm","Package_CSP/ST_WLCSP-36_2.652x2.592mm_Layout7x12_P0.4mm_Stagger_Offcenter","Package_CSP/ST_WLCSP-36_2.83x2.99mm_Layout7x13_P0.4mm_Stagger_Offcenter","Package_CSP/ST_WLCSP-36_Die417","Package_CSP/ST_WLCSP-36_Die440","Package_CSP/ST_WLCSP-36_Die445","Package_CSP/ST_WLCSP-36_Die458","Package_CSP/ST_WLCSP-39_2.76x2.78mm_Layout11x7_P0.4mm_Stagger","Package_CSP/ST_WLCSP-41_2.98x2.76mm_Layout13x7_P0.4mm_Stagger","Package_CSP/ST_WLCSP-42_2.93x2.82mm_Layout12x7_P0.4mm_Stagger","Package_CSP/ST_WLCSP-49_3.14x3.14mm_Layout7x7_P0.4mm_Offcenter","Package_CSP/ST_WLCSP-49_3.15x3.13mm_Layout7x7_P0.4mm","Package_CSP/ST_WLCSP-49_3.3x3.38mm_Layout7x7_P0.4mm_Offcenter","Package_CSP/ST_WLCSP-49_Die423","Package_CSP/ST_WLCSP-49_Die431","Package_CSP/ST_WLCSP-49_Die433","Package_CSP/ST_WLCSP-49_Die435","Package_CSP/ST_WLCSP-49_Die438","Package_CSP/ST_WLCSP-49_Die439","Package_CSP/ST_WLCSP-49_Die447","Package_CSP/ST_WLCSP-49_Die448","Package_CSP/ST_WLCSP-52_3.09x3.15mm_Layout13x8_P0.4mm_Stagger","Package_CSP/ST_WLCSP-56_3.38x3.38mm_Layout14x8_P0.4mm_Stagger","Package_CSP/ST_WLCSP-63_Die427","Package_CSP/ST_WLCSP-64_3.56x3.52mm_Layout8x8_P0.4mm","Package_CSP/ST_WLCSP-64_Die414","Package_CSP/ST_WLCSP-64_Die427","Package_CSP/ST_WLCSP-64_Die435","Package_CSP/ST_WLCSP-64_Die436","Package_CSP/ST_WLCSP-64_Die441","Package_CSP/ST_WLCSP-64_Die442","Package_CSP/ST_WLCSP-64_Die462","Package_CSP/ST_WLCSP-66_Die411","Package_CSP/ST_WLCSP-66_Die432","Package_CSP/ST_WLCSP-72_3.38x3.38mm_Layout16x9_P0.35mm_Stagger","Package_CSP/ST_WLCSP-72_Die415","Package_CSP/ST_WLCSP-80_3.5x3.27mm_Layout10x16_P0.35mm_Stagger_Offcenter","Package_CSP/ST_WLCSP-81_4.02x4.27mm_Layout9x9_P0.4mm","Package_CSP/ST_WLCSP-81_4.36x4.07mm_Layout9x9_P0.4mm","Package_CSP/ST_WLCSP-81_Die415","Package_CSP/ST_WLCSP-81_Die421","Package_CSP/ST_WLCSP-81_Die463","Package_CSP/ST_WLCSP-90_4.2x3.95mm_Layout18x10_P0.4mm_Stagger","Package_CSP/ST_WLCSP-90_Die413","Package_CSP/ST_WLCSP-99_4.42x3.77mm_Layout11x9_P0.35mm","Package_CSP/WLCSP-12_1.403x1.555mm_Layout6x4_P0.4mm_Stagger","Package_CSP/WLCSP-12_1.56x1.56mm_P0.4mm","Package_CSP/WLCSP-16_1.409x1.409mm_Layout4x4_P0.35mm","Package_CSP/WLCSP-16_2.225x2.17mm_Layout4x4_P0.5mm","Package_CSP/WLCSP-16_4x4_B2.17x2.32mm_P0.5mm","Package_CSP/WLCSP-20_1.934x2.434mm_Layout4x5_P0.4mm","Package_CSP/WLCSP-20_1.994x1.609mm_Layout5x4_P0.4mm","Package_CSP/WLCSP-20_1.994x1.94mm_Layout4x5_P0.4mm","Package_CSP/WLCSP-36_2.374x2.459mm_Layout6x6_P0.35mm","Package_CSP/WLCSP-36_2.82x2.67mm_Layout6x6_P0.4mm","Package_CSP/WLCSP-4_0.64x0.64mm_Layout2x2_P0.35mm","Package_CSP/WLCSP-4_0.89x0.89mm_Layout2x2_P0.5mm","Package_CSP/WLCSP-56_3.170x3.444mm_Layout7x8_P0.4mm","Package_CSP/WLCSP-6_1.46x1.1mm_Layout3x2_P0.4mm","Package_CSP/WLCSP-6_1.4x1.0mm_P0.4mm","Package_CSP/WLCSP-81_4.41x3.76mm_P0.4mm","Package_CSP/WLCSP-8_1.551x2.284mm_Layout2x4_P0.5mm","Package_CSP/WLCSP-8_1.58x1.63x0.35mm_Layout3x5_P0.35x0.4mm_Ball0.25mm_Pad0.25mm_NSMD","Package_CSP/WLCSP-9_1.21x1.22mm_Layout3x3_P0.4mm","Package_CSP/Xilinx_CSG48_7.0x7.0mm_Layout7x7_P0.8mm","Package_CSP/pSemi_CSP-16_1.64x2.04mm_P0.4mm","Package_CSP/pSemi_CSP-16_1.64x2.04mm_P0.4mm_Pad0.18mm","Package_DFN_QFN/AMS_QFN-4-1EP_2x2mm_P0.95mm_EP0.7x1.6mm","Package_DFN_QFN/AO_AOZ666xDI_DFN-8-1EP_3x3mm_P0.65mm_EP1.25x2.7mm","Package_DFN_QFN/AO_DFN-8-1EP_5.55x5.2mm_P1.27mm_EP4.12x4.6mm","Package_DFN_QFN/Analog_QFN-28-36-2EP_5x6mm_P0.5mm","Package_DFN_QFN/ArtInChip_QFN-100-1EP_12x12mm_P0.4mm_EP7.4x7.4mm","Package_DFN_QFN/ArtInChip_QFN-100-1EP_12x12mm_P0.4mm_EP7.4x7.4mm_ThermalVias","Package_DFN_QFN/ArtInChip_QFN-68-1EP_7x7mm_P0.35mm_EP5.49x5.49mm","Package_DFN_QFN/ArtInChip_QFN-68-1EP_7x7mm_P0.35mm_EP5.49x5.49mm_ThermalVias","Package_DFN_QFN/ArtInChip_QFN-88-1EP_10x10mm_P0.4mm_EP6.74x6.74mm","Package_DFN_QFN/ArtInChip_QFN-88-1EP_10x10mm_P0.4mm_EP6.74x6.74mm_ThermalVias","Package_DFN_QFN/CDFN-4_2.5x3.2mm_P2.1mm","Package_DFN_QFN/CDFN-4_2x2.5mm_P1.65mm","Package_DFN_QFN/CDFN-4_3.2x5mm_P2.54mm","Package_DFN_QFN/Cypress_QFN-56-1EP_8x8mm_P0.5mm_EP6.22x6.22mm_ThermalVias","Package_DFN_QFN/DFN-10-1EP_2.6x2.6mm_P0.5mm_EP1.3x2.2mm","Package_DFN_QFN/DFN-10-1EP_2.6x2.6mm_P0.5mm_EP1.3x2.2mm_ThermalVias","Package_DFN_QFN/DFN-10-1EP_2x3mm_P0.5mm_EP0.64x2.4mm","Package_DFN_QFN/DFN-10-1EP_3x3mm_P0.5mm_EP1.55x2.48mm","Package_DFN_QFN/DFN-10-1EP_3x3mm_P0.5mm_EP1.58x2.35mm","Package_DFN_QFN/DFN-10-1EP_3x3mm_P0.5mm_EP1.58x2.35mm_ThermalVias","Package_DFN_QFN/DFN-10-1EP_3x3mm_P0.5mm_EP1.646x3.1mm","Package_DFN_QFN/DFN-10-1EP_3x3mm_P0.5mm_EP1.646x3.1mm_ThermalVias","Package_DFN_QFN/DFN-10-1EP_3x3mm_P0.5mm_EP1.65x2.38mm","Package_DFN_QFN/DFN-10-1EP_3x3mm_P0.5mm_EP1.65x2.38mm_ThermalVias","Package_DFN_QFN/DFN-10-1EP_3x3mm_P0.5mm_EP1.75x2.7mm","Package_DFN_QFN/DFN-10-1EP_3x3mm_P0.5mm_EP1.7x2.5mm","Package_DFN_QFN/DFN-10_2x2mm_P0.4mm","Package_DFN_QFN/DFN-12-1EP_2x3mm_P0.45mm_EP0.64x2.4mm","Package_DFN_QFN/DFN-12-1EP_3x3mm_P0.45mm_EP1.65x2.38mm","Package_DFN_QFN/DFN-12-1EP_3x3mm_P0.45mm_EP1.65x2.38mm_ThermalVias","Package_DFN_QFN/DFN-12-1EP_3x3mm_P0.5mm_EP1.6x2.5mm","Package_DFN_QFN/DFN-12-1EP_3x3mm_P0.5mm_EP1.6x2.5mm_ThermalVias","Package_DFN_QFN/DFN-12-1EP_3x3mm_P0.5mm_EP2.05x2.86mm","Package_DFN_QFN/DFN-12-1EP_3x4mm_P0.5mm_EP1.7x3.3mm","Package_DFN_QFN/DFN-12-1EP_4x4mm_P0.5mm_EP2.66x3.38mm","Package_DFN_QFN/DFN-12-1EP_4x4mm_P0.65mm_EP2.64x3.54mm","Package_DFN_QFN/DFN-14-1EP_3x3mm_P0.4mm_EP1.78x2.35mm","Package_DFN_QFN/DFN-14-1EP_3x4.5mm_P0.65mm_EP1.65x4.25mm","Package_DFN_QFN/DFN-14-1EP_3x4.5mm_P0.65mm_EP1.65x4.25mm_ThermalVias","Package_DFN_QFN/DFN-14-1EP_3x4mm_P0.5mm_EP1.7x3.3mm","Package_DFN_QFN/DFN-14_1.35x3.5mm_P0.5mm","Package_DFN_QFN/DFN-16-1EP_3x4mm_P0.45mm_EP1.7x3.3mm","Package_DFN_QFN/DFN-16-1EP_3x5mm_P0.5mm_EP1.66x4.4mm","Package_DFN_QFN/DFN-16-1EP_4x5mm_P0.5mm_EP2.44x4.34mm","Package_DFN_QFN/DFN-16-1EP_5x5mm_P0.5mm_EP3.46x4mm","Package_DFN_QFN/DFN-18-1EP_3x5mm_P0.5mm_EP1.66x4.4mm","Package_DFN_QFN/DFN-18-1EP_4x5mm_P0.5mm_EP2.44x4.34mm","Package_DFN_QFN/DFN-20-1EP_5x6mm_P0.5mm_EP3.24x4.24mm","Package_DFN_QFN/DFN-22-1EP_5x6mm_P0.5mm_EP3.14x4.3mm","Package_DFN_QFN/DFN-24-1EP_4x7mm_P0.5mm_EP2.64x6.44mm","Package_DFN_QFN/DFN-32-1EP_4x7mm_P0.4mm_EP2.64x6.44mm","Package_DFN_QFN/DFN-44-1EP_5x8.9mm_P0.4mm_EP3.7x8.4mm","Package_DFN_QFN/DFN-4_5x7mm_P5.08mm","Package_DFN_QFN/DFN-6-1EP_1.2x1.2mm_P0.4mm_EP0.3x0.94mm_PullBack","Package_DFN_QFN/DFN-6-1EP_2x1.6mm_P0.5mm_EP1.15x1.3mm","Package_DFN_QFN/DFN-6-1EP_2x1.8mm_P0.5mm_EP1.2x1.6mm","Package_DFN_QFN/DFN-6-1EP_2x2mm_P0.5mm_EP0.61x1.42mm","Package_DFN_QFN/DFN-6-1EP_2x2mm_P0.5mm_EP0.6x1.37mm","Package_DFN_QFN/DFN-6-1EP_2x2mm_P0.5mm_EP0.7x1.6mm","Package_DFN_QFN/DFN-6-1EP_2x2mm_P0.65mm_EP1.01x1.7mm","Package_DFN_QFN/DFN-6-1EP_2x2mm_P0.65mm_EP1x1.6mm","Package_DFN_QFN/DFN-6-1EP_3x2mm_P0.5mm_EP1.65x1.35mm","Package_DFN_QFN/DFN-6-1EP_3x3mm_P0.95mm_EP1.7x2.6mm","Package_DFN_QFN/DFN-6-1EP_3x3mm_P1mm_EP1.5x2.4mm","Package_DFN_QFN/DFN-6_1.3x1.2mm_P0.4mm","Package_DFN_QFN/DFN-6_1.6x1.3mm_P0.4mm","Package_DFN_QFN/DFN-8-1EP_1.5x1.5mm_P0.4mm_EP0.7x1.2mm","Package_DFN_QFN/DFN-8-1EP_2x2mm_P0.45mm_EP0.64x1.37mm","Package_DFN_QFN/DFN-8-1EP_2x2mm_P0.5mm_EP0.6x1.2mm","Package_DFN_QFN/DFN-8-1EP_2x2mm_P0.5mm_EP0.86x1.55mm","Package_DFN_QFN/DFN-8-1EP_2x2mm_P0.5mm_EP0.8x1.6mm","Package_DFN_QFN/DFN-8-1EP_2x2mm_P0.5mm_EP0.9x1.3mm","Package_DFN_QFN/DFN-8-1EP_2x2mm_P0.5mm_EP0.9x1.5mm","Package_DFN_QFN/DFN-8-1EP_2x2mm_P0.5mm_EP0.9x1.6mm","Package_DFN_QFN/DFN-8-1EP_2x2mm_P0.5mm_EP0.9x1.7mm","Package_DFN_QFN/DFN-8-1EP_2x2mm_P0.5mm_EP1.05x1.75mm","Package_DFN_QFN/DFN-8-1EP_2x3mm_P0.5mm_EP0.61x2.2mm","Package_DFN_QFN/DFN-8-1EP_3x2mm_P0.45mm_EP1.66x1.36mm","Package_DFN_QFN/DFN-8-1EP_3x2mm_P0.5mm_EP1.36x1.46mm","Package_DFN_QFN/DFN-8-1EP_3x2mm_P0.5mm_EP1.3x1.5mm","Package_DFN_QFN/DFN-8-1EP_3x2mm_P0.5mm_EP1.75x1.45mm","Package_DFN_QFN/DFN-8-1EP_3x2mm_P0.5mm_EP1.7x1.4mm","Package_DFN_QFN/DFN-8-1EP_3x2mm_P0.5mm_EP1.7x1.6mm","Package_DFN_QFN/DFN-8-1EP_3x3mm_P0.5mm_EP1.65x2.38mm","Package_DFN_QFN/DFN-8-1EP_3x3mm_P0.5mm_EP1.65x2.38mm_ThermalVias","Package_DFN_QFN/DFN-8-1EP_3x3mm_P0.5mm_EP1.66x2.38mm","Package_DFN_QFN/DFN-8-1EP_3x3mm_P0.5mm_EP1.7x2.4mm","Package_DFN_QFN/DFN-8-1EP_3x3mm_P0.65mm_EP1.2x2.15mm","Package_DFN_QFN/DFN-8-1EP_3x3mm_P0.65mm_EP1.2x2.15mm_ThermalVias","Package_DFN_QFN/DFN-8-1EP_3x3mm_P0.65mm_EP1.55x2.4mm","Package_DFN_QFN/DFN-8-1EP_3x3mm_P0.65mm_EP1.5x2.25mm","Package_DFN_QFN/DFN-8-1EP_3x3mm_P0.65mm_EP1.6x2.56mm","Package_DFN_QFN/DFN-8-1EP_3x3mm_P0.65mm_EP1.6x2.56mm_ThermalVias","Package_DFN_QFN/DFN-8-1EP_3x3mm_P0.65mm_EP1.7x2.05mm","Package_DFN_QFN/DFN-8-1EP_4x4mm_P0.8mm_EP2.39x2.21mm","Package_DFN_QFN/DFN-8-1EP_4x4mm_P0.8mm_EP2.3x3.24mm","Package_DFN_QFN/DFN-8-1EP_4x4mm_P0.8mm_EP2.5x3.6mm","Package_DFN_QFN/DFN-8-1EP_6x5mm_P1.27mm_EP2x2mm","Package_DFN_QFN/DFN-8-1EP_6x5mm_P1.27mm_EP4x4mm","Package_DFN_QFN/DFN-8_2x2mm_P0.5mm","Package_DFN_QFN/DFN-S-8-1EP_6x5mm_P1.27mm","Package_DFN_QFN/DHVQFN-14-1EP_2.5x3mm_P0.5mm_EP1x1.5mm","Package_DFN_QFN/DHVQFN-14-1EP_2.5x3mm_P0.5mm_EP1x1.5mm_ThermalVias","Package_DFN_QFN/DHVQFN-16-1EP_2.5x3.5mm_P0.5mm_EP1x2mm","Package_DFN_QFN/DHVQFN-20-1EP_2.5x4.5mm_P0.5mm_EP1x3mm","Package_DFN_QFN/DHWQFN-14-1EP_2.5x3mm_P0.5mm_EP1x1.5mm","Package_DFN_QFN/DHWQFN-14-1EP_2.5x3mm_P0.5mm_EP1x1.5mm_ThermalVias","Package_DFN_QFN/Diodes_DFN1006-3","Package_DFN_QFN/Diodes_UDFN-10_1x2.5mm_P0.5mm","Package_DFN_QFN/Diodes_UDFN2020-6_Type-F","Package_DFN_QFN/Diodes_UDFN3810-9_TYPE_B","Package_DFN_QFN/Diodes_ZL32_TQFN-32-1EP_3x6mm_P0.4mm_EP1.25x3.5mm","Package_DFN_QFN/EPC_QFN-13-3EP_3.5x5mm_P0.5mm","Package_DFN_QFN/HVQFN-16-1EP_3x3mm_P0.5mm_EP1.5x1.5mm","Package_DFN_QFN/HVQFN-24-1EP_4x4mm_P0.5mm_EP2.1x2.1mm","Package_DFN_QFN/HVQFN-24-1EP_4x4mm_P0.5mm_EP2.5x2.5mm","Package_DFN_QFN/HVQFN-24-1EP_4x4mm_P0.5mm_EP2.5x2.5mm_ThermalVias","Package_DFN_QFN/HVQFN-24-1EP_4x4mm_P0.5mm_EP2.6x2.6mm","Package_DFN_QFN/HVQFN-24-1EP_4x4mm_P0.5mm_EP2.6x2.6mm_ThermalVias","Package_DFN_QFN/HVQFN-32-1EP_5x5mm_P0.5mm_EP3.1x3.1mm","Package_DFN_QFN/HVQFN-32-1EP_5x5mm_P0.5mm_EP3.1x3.1mm_ThermalVias","Package_DFN_QFN/HVQFN-36-1EP_6x6mm_P0.5mm_EP3.9x3.9mm","Package_DFN_QFN/HVQFN-36-1EP_6x6mm_P0.5mm_EP3.9x3.9mm_ThermalVias","Package_DFN_QFN/HVQFN-40-1EP_6x6mm_P0.5mm_EP4.1x4.1mm","Package_DFN_QFN/HVQFN-40-1EP_6x6mm_P0.5mm_EP4.1x4.1mm_ThermalVias","Package_DFN_QFN/HXQFN-16-1EP_3x3mm_P0.5mm_EP1.85x1.85mm","Package_DFN_QFN/HXQFN-16-1EP_3x3mm_P0.5mm_EP1.85x1.85mm_ThermalVias","Package_DFN_QFN/IDT_QFN-12-1EP_2x2mm_P0.5mm_EP1.1x1.1mm","Package_DFN_QFN/IDT_QFN-12-1EP_2x2mm_P0.5mm_EP1.1x1.1mm_ThermalVias","Package_DFN_QFN/Infineon_MLPQ-16-14-1EP_4x4mm_P0.5mm","Package_DFN_QFN/Infineon_MLPQ-40-32-1EP_7x7mm_P0.5mm","Package_DFN_QFN/Infineon_MLPQ-48-1EP_7x7mm_P0.5mm_EP5.15x5.15mm","Package_DFN_QFN/Infineon_MLPQ-48-1EP_7x7mm_P0.5mm_EP5.55x5.55mm","Package_DFN_QFN/Infineon_PQFN-22-15-4EP_6x5mm_P0.65mm","Package_DFN_QFN/Infineon_PQFN-44-31-5EP_7x7mm_P0.5mm","Package_DFN_QFN/LQFN-10-1EP_2x2mm_P0.5mm_EP0.7x0.7mm","Package_DFN_QFN/LQFN-12-1EP_2x2mm_P0.5mm_EP0.7x0.7mm","Package_DFN_QFN/LQFN-16-1EP_3x3mm_P0.5mm_EP1.7x1.7mm","Package_DFN_QFN/Linear_DE14MA","Package_DFN_QFN/Linear_UGK52_QFN-46-52","Package_DFN_QFN/MLF-20-1EP_4x4mm_P0.5mm_EP2.6x2.6mm","Package_DFN_QFN/MLF-20-1EP_4x4mm_P0.5mm_EP2.6x2.6mm_ThermalVias","Package_DFN_QFN/MLF-6-1EP_1.6x1.6mm_P0.5mm_EP0.5x1.26mm","Package_DFN_QFN/MLF-8-1EP_3x3mm_P0.65mm_EP1.55x2.3mm","Package_DFN_QFN/MLF-8-1EP_3x3mm_P0.65mm_EP1.55x2.3mm_ThermalVias","Package_DFN_QFN/MLPQ-16-1EP_4x4mm_P0.65mm_EP2.8x2.8mm","Package_DFN_QFN/MPS_QFN-12_2x2mm_P0.4mm","Package_DFN_QFN/MPS_QFN-16_3x3mm_P0.5mm","Package_DFN_QFN/Maxim_FC2QFN-14_2.5x2.5mm_P0.5mm","Package_DFN_QFN/Maxim_TDFN-10-1EP_3x3mm_P0.5mm_EP1.58x2.35mm","Package_DFN_QFN/Maxim_TDFN-12-1EP_3x3mm_P0.5mm_EP1.7x2.5mm","Package_DFN_QFN/Maxim_TDFN-12-1EP_3x3mm_P0.5mm_EP1.7x2.5mm_ThermalVias","Package_DFN_QFN/Maxim_TDFN-6-1EP_3x3mm_P0.95mm_EP1.5x2.3mm","Package_DFN_QFN/Maxim_WSON-8-1EP_3x2mm_P0.5mm_EP1.75x1.63mm","Package_DFN_QFN/Micrel_MLF-8-1EP_2x2mm_P0.5mm_EP0.6x1.2mm","Package_DFN_QFN/Micrel_MLF-8-1EP_2x2mm_P0.5mm_EP0.6x1.2mm_ThermalVias","Package_DFN_QFN/Micrel_MLF-8-1EP_2x2mm_P0.5mm_EP0.8x1.3mm_ThermalVias","Package_DFN_QFN/Microchip_8E-16","Package_DFN_QFN/Microchip_DRQFN-44-1EP_5x5mm_P0.7mm_EP2.65x2.65mm","Package_DFN_QFN/Microchip_DRQFN-44-1EP_5x5mm_P0.7mm_EP2.65x2.65mm_ThermalVias","Package_DFN_QFN/Microchip_DRQFN-64-1EP_7x7mm_P0.65mm_EP4.1x4.1mm","Package_DFN_QFN/Microchip_DRQFN-64-1EP_7x7mm_P0.65mm_EP4.1x4.1mm_ThermalVias","Package_DFN_QFN/Microsemi_QFN-40-32-2EP_6x8mm_P0.5mm","Package_DFN_QFN/Mini-Circuits_DL805","Package_DFN_QFN/Mini-Circuits_FG873-4_3x3mm","Package_DFN_QFN/NXP_LQFN-48-1EP_7x7mm_P0.5mm_EP3.5x3.5mm_16xMask0.45x0.45","Package_DFN_QFN/NXP_LQFN-48-1EP_7x7mm_P0.5mm_EP3.5x3.5mm_16xMask0.45x0.45_ThermalVias","Package_DFN_QFN/NXP_VQFN-16-1EP_4x4mm_P0.65mm_EP2.1x2.1mm","Package_DFN_QFN/Nordic_AQFN-73-1EP_7x7mm_P0.5mm","Package_DFN_QFN/Nordic_AQFN-94-1EP_7x7mm_P0.4mm","Package_DFN_QFN/OnSemi_DFN-14-1EP_4x4mm_P0.5mm_EP2.7x3.4mm","Package_DFN_QFN/OnSemi_DFN-8_2x2mm_P0.5mm","Package_DFN_QFN/OnSemi_SIP-38-6EP-9x7mm_P0.65mm_EP1.2x1.2mm","Package_DFN_QFN/OnSemi_UDFN-16-1EP_1.35x3.3mm_P0.4mm_EP0.4x2.8mm","Package_DFN_QFN/OnSemi_UDFN-8_1.2x1.8mm_P0.4mm","Package_DFN_QFN/OnSemi_VCT-28_3.5x3.5mm_P0.4mm","Package_DFN_QFN/OnSemi_XDFN-10_1.35x2.2mm_P0.4mm","Package_DFN_QFN/OnSemi_XDFN4-1EP_1.0x1.0mm_EP0.52x0.52mm","Package_DFN_QFN/PQFN-8-EP_6x5mm_P1.27mm_Generic","Package_DFN_QFN/Panasonic_HQFN-16-1EP_4x4mm_P0.65mm_EP2.9x2.9mm","Package_DFN_QFN/Panasonic_HSON-8_8x8mm_P2.00mm","Package_DFN_QFN/QFN-12-1EP_3x3mm_P0.51mm_EP1.45x1.45mm","Package_DFN_QFN/QFN-12-1EP_3x3mm_P0.5mm_EP1.45x1.45mm","Package_DFN_QFN/QFN-12-1EP_3x3mm_P0.5mm_EP1.45x1.45mm_ThermalVias","Package_DFN_QFN/QFN-12-1EP_3x3mm_P0.5mm_EP1.65x1.65mm","Package_DFN_QFN/QFN-12-1EP_3x3mm_P0.5mm_EP1.65x1.65mm_ThermalVias","Package_DFN_QFN/QFN-12-1EP_3x3mm_P0.5mm_EP1.6x1.6mm","Package_DFN_QFN/QFN-12-1EP_3x3mm_P0.5mm_EP1.6x1.6mm_ThermalVias","Package_DFN_QFN/QFN-16-1EP_1.8x2.6mm_P0.4mm_EP0.7x1.5mm","Package_DFN_QFN/QFN-16-1EP_1.8x2.6mm_P0.4mm_EP0.7x1.5mm_ThermalVias","Package_DFN_QFN/QFN-16-1EP_3x3mm_P0.5mm_EP1.45x1.45mm","Package_DFN_QFN/QFN-16-1EP_3x3mm_P0.5mm_EP1.45x1.45mm_ThermalVias","Package_DFN_QFN/QFN-16-1EP_3x3mm_P0.5mm_EP1.675x1.675mm","Package_DFN_QFN/QFN-16-1EP_3x3mm_P0.5mm_EP1.75x1.75mm","Package_DFN_QFN/QFN-16-1EP_3x3mm_P0.5mm_EP1.75x1.75mm_ThermalVias","Package_DFN_QFN/QFN-16-1EP_3x3mm_P0.5mm_EP1.7x1.7mm","Package_DFN_QFN/QFN-16-1EP_3x3mm_P0.5mm_EP1.7x1.7mm_ThermalVias","Package_DFN_QFN/QFN-16-1EP_3x3mm_P0.5mm_EP1.9x1.9mm","Package_DFN_QFN/QFN-16-1EP_3x3mm_P0.5mm_EP1.9x1.9mm_ThermalVias","Package_DFN_QFN/QFN-16-1EP_4x4mm_P0.5mm_EP2.45x2.45mm","Package_DFN_QFN/QFN-16-1EP_4x4mm_P0.5mm_EP2.45x2.45mm_ThermalVias","Package_DFN_QFN/QFN-16-1EP_4x4mm_P0.65mm_EP2.15x2.15mm","Package_DFN_QFN/QFN-16-1EP_4x4mm_P0.65mm_EP2.15x2.15mm_ThermalVias","Package_DFN_QFN/QFN-16-1EP_4x4mm_P0.65mm_EP2.1x2.1mm","Package_DFN_QFN/QFN-16-1EP_4x4mm_P0.65mm_EP2.1x2.1mm_ThermalVias","Package_DFN_QFN/QFN-16-1EP_4x4mm_P0.65mm_EP2.5x2.5mm","Package_DFN_QFN/QFN-16-1EP_4x4mm_P0.65mm_EP2.5x2.5mm_ThermalVias","Package_DFN_QFN/QFN-16-1EP_4x4mm_P0.65mm_EP2.7x2.7mm","Package_DFN_QFN/QFN-16-1EP_4x4mm_P0.65mm_EP2.7x2.7mm_PullBack","Package_DFN_QFN/QFN-16-1EP_4x4mm_P0.65mm_EP2.7x2.7mm_PullBack_ThermalVias","Package_DFN_QFN/QFN-16-1EP_4x4mm_P0.65mm_EP2.7x2.7mm_ThermalVias","Package_DFN_QFN/QFN-16-1EP_5x5mm_P0.8mm_EP2.7x2.7mm","Package_DFN_QFN/QFN-16-1EP_5x5mm_P0.8mm_EP2.7x2.7mm_ThermalVias","Package_DFN_QFN/QFN-20-1EP_3.5x3.5mm_P0.5mm_EP2x2mm","Package_DFN_QFN/QFN-20-1EP_3.5x3.5mm_P0.5mm_EP2x2mm_ThermalVias","Package_DFN_QFN/QFN-20-1EP_3x3mm_P0.45mm_EP1.6x1.6mm","Package_DFN_QFN/QFN-20-1EP_3x3mm_P0.45mm_EP1.6x1.6mm_ThermalVias","Package_DFN_QFN/QFN-20-1EP_3x3mm_P0.4mm_EP1.65x1.65mm","Package_DFN_QFN/QFN-20-1EP_3x3mm_P0.4mm_EP1.65x1.65mm_ThermalVias","Package_DFN_QFN/QFN-20-1EP_3x4mm_P0.5mm_EP1.65x2.65mm","Package_DFN_QFN/QFN-20-1EP_3x4mm_P0.5mm_EP1.65x2.65mm_ThermalVias","Package_DFN_QFN/QFN-20-1EP_4x4mm_P0.5mm_EP2.5x2.5mm","Package_DFN_QFN/QFN-20-1EP_4x4mm_P0.5mm_EP2.5x2.5mm_ThermalVias","Package_DFN_QFN/QFN-20-1EP_4x4mm_P0.5mm_EP2.6x2.6mm","Package_DFN_QFN/QFN-20-1EP_4x4mm_P0.5mm_EP2.6x2.6mm_ThermalVias","Package_DFN_QFN/QFN-20-1EP_4x4mm_P0.5mm_EP2.7x2.7mm","Package_DFN_QFN/QFN-20-1EP_4x4mm_P0.5mm_EP2.7x2.7mm_ThermalVias","Package_DFN_QFN/QFN-20-1EP_4x5mm_P0.5mm_EP2.65x3.65mm","Package_DFN_QFN/QFN-20-1EP_4x5mm_P0.5mm_EP2.65x3.65mm_ThermalVias","Package_DFN_QFN/QFN-20-1EP_5x5mm_P0.65mm_EP3.35x3.35mm","Package_DFN_QFN/QFN-20-1EP_5x5mm_P0.65mm_EP3.35x3.35mm_ThermalVias","Package_DFN_QFN/QFN-24-1EP_3x3mm_P0.4mm_EP1.75x1.6mm","Package_DFN_QFN/QFN-24-1EP_3x3mm_P0.4mm_EP1.75x1.6mm_ThermalVias","Package_DFN_QFN/QFN-24-1EP_3x4mm_P0.4mm_EP1.65x2.65mm","Package_DFN_QFN/QFN-24-1EP_3x4mm_P0.4mm_EP1.65x2.65mm_ThermalVias","Package_DFN_QFN/QFN-24-1EP_4x4mm_P0.5mm_EP2.15x2.15mm","Package_DFN_QFN/QFN-24-1EP_4x4mm_P0.5mm_EP2.15x2.15mm_ThermalVias","Package_DFN_QFN/QFN-24-1EP_4x4mm_P0.5mm_EP2.5x2.5mm","Package_DFN_QFN/QFN-24-1EP_4x4mm_P0.5mm_EP2.65x2.65mm","Package_DFN_QFN/QFN-24-1EP_4x4mm_P0.5mm_EP2.65x2.65mm_ThermalVias","Package_DFN_QFN/QFN-24-1EP_4x4mm_P0.5mm_EP2.6x2.6mm","Package_DFN_QFN/QFN-24-1EP_4x4mm_P0.5mm_EP2.6x2.6mm_ThermalVias","Package_DFN_QFN/QFN-24-1EP_4x4mm_P0.5mm_EP2.75x2.75mm","Package_DFN_QFN/QFN-24-1EP_4x4mm_P0.5mm_EP2.75x2.75mm_ThermalVias","Package_DFN_QFN/QFN-24-1EP_4x4mm_P0.5mm_EP2.7x2.6mm","Package_DFN_QFN/QFN-24-1EP_4x4mm_P0.5mm_EP2.7x2.6mm_ThermalVias","Package_DFN_QFN/QFN-24-1EP_4x4mm_P0.5mm_EP2.7x2.7mm","Package_DFN_QFN/QFN-24-1EP_4x4mm_P0.5mm_EP2.7x2.7mm_ThermalVias","Package_DFN_QFN/QFN-24-1EP_4x4mm_P0.5mm_EP2.8x2.8mm","Package_DFN_QFN/QFN-24-1EP_4x4mm_P0.5mm_EP2.8x2.8mm_ThermalVias","Package_DFN_QFN/QFN-24-1EP_4x5mm_P0.5mm_EP2.65x3.65mm","Package_DFN_QFN/QFN-24-1EP_4x5mm_P0.5mm_EP2.65x3.65mm_ThermalVias","Package_DFN_QFN/QFN-24-1EP_5x5mm_P0.65mm_EP3.25x3.25mm","Package_DFN_QFN/QFN-24-1EP_5x5mm_P0.65mm_EP3.25x3.25mm_ThermalVias","Package_DFN_QFN/QFN-24-1EP_5x5mm_P0.65mm_EP3.2x3.2mm","Package_DFN_QFN/QFN-24-1EP_5x5mm_P0.65mm_EP3.2x3.2mm_ThermalVias","Package_DFN_QFN/QFN-24-1EP_5x5mm_P0.65mm_EP3.4x3.4mm","Package_DFN_QFN/QFN-24-1EP_5x5mm_P0.65mm_EP3.4x3.4mm_ThermalVias","Package_DFN_QFN/QFN-24-1EP_5x5mm_P0.65mm_EP3.6x3.6mm","Package_DFN_QFN/QFN-24-1EP_5x5mm_P0.65mm_EP3.6x3.6mm_ThermalVias","Package_DFN_QFN/QFN-28-1EP_3x6mm_P0.5mm_EP1.7x4.75mm","Package_DFN_QFN/QFN-28-1EP_3x6mm_P0.5mm_EP1.7x4.75mm_ThermalVias","Package_DFN_QFN/QFN-28-1EP_4x4mm_P0.45mm_EP2.4x2.4mm","Package_DFN_QFN/QFN-28-1EP_4x4mm_P0.45mm_EP2.4x2.4mm_ThermalVias","Package_DFN_QFN/QFN-28-1EP_4x4mm_P0.45mm_EP2.6x2.6mm","Package_DFN_QFN/QFN-28-1EP_4x4mm_P0.4mm_EP2.3x2.3mm","Package_DFN_QFN/QFN-28-1EP_4x4mm_P0.4mm_EP2.3x2.3mm_ThermalVias","Package_DFN_QFN/QFN-28-1EP_4x4mm_P0.4mm_EP2.4x2.4mm","Package_DFN_QFN/QFN-28-1EP_4x4mm_P0.4mm_EP2.4x2.4mm_ThermalVias","Package_DFN_QFN/QFN-28-1EP_4x5mm_P0.5mm_EP2.65x3.65mm","Package_DFN_QFN/QFN-28-1EP_4x5mm_P0.5mm_EP2.65x3.65mm_ThermalVias","Package_DFN_QFN/QFN-28-1EP_5x5mm_P0.5mm_EP2.7x2.7mm","Package_DFN_QFN/QFN-28-1EP_5x5mm_P0.5mm_EP2.7x2.7mm_ThermalVias","Package_DFN_QFN/QFN-28-1EP_5x5mm_P0.5mm_EP3.1x3.1mm","Package_DFN_QFN/QFN-28-1EP_5x5mm_P0.5mm_EP3.1x3.1mm_ThermalVias","Package_DFN_QFN/QFN-28-1EP_5x5mm_P0.5mm_EP3.25x3.25mm","Package_DFN_QFN/QFN-28-1EP_5x5mm_P0.5mm_EP3.25x3.25mm_ThermalVias","Package_DFN_QFN/QFN-28-1EP_5x5mm_P0.5mm_EP3.35x3.35mm","Package_DFN_QFN/QFN-28-1EP_5x5mm_P0.5mm_EP3.35x3.35mm_ThermalVias","Package_DFN_QFN/QFN-28-1EP_5x5mm_P0.5mm_EP3.75x3.75mm","Package_DFN_QFN/QFN-28-1EP_5x5mm_P0.5mm_EP3.75x3.75mm_ThermalVias","Package_DFN_QFN/QFN-28-1EP_5x6mm_P0.5mm_EP3.65x4.65mm","Package_DFN_QFN/QFN-28-1EP_5x6mm_P0.5mm_EP3.65x4.65mm_ThermalVias","Package_DFN_QFN/QFN-28-1EP_6x6mm_P0.65mm_EP4.25x4.25mm","Package_DFN_QFN/QFN-28-1EP_6x6mm_P0.65mm_EP4.25x4.25mm_ThermalVias","Package_DFN_QFN/QFN-28-1EP_6x6mm_P0.65mm_EP4.8x4.8mm","Package_DFN_QFN/QFN-28-1EP_6x6mm_P0.65mm_EP4.8x4.8mm_ThermalVias","Package_DFN_QFN/QFN-28_4x4mm_P0.5mm","Package_DFN_QFN/QFN-32-1EP_4x4mm_P0.4mm_EP2.65x2.65mm","Package_DFN_QFN/QFN-32-1EP_4x4mm_P0.4mm_EP2.65x2.65mm_ThermalVias","Package_DFN_QFN/QFN-32-1EP_4x4mm_P0.4mm_EP2.9x2.9mm","Package_DFN_QFN/QFN-32-1EP_4x4mm_P0.4mm_EP2.9x2.9mm_ThermalVias","Package_DFN_QFN/QFN-32-1EP_5x5mm_P0.5mm_EP3.1x3.1mm","Package_DFN_QFN/QFN-32-1EP_5x5mm_P0.5mm_EP3.1x3.1mm_ThermalVias","Package_DFN_QFN/QFN-32-1EP_5x5mm_P0.5mm_EP3.3x3.3mm","Package_DFN_QFN/QFN-32-1EP_5x5mm_P0.5mm_EP3.3x3.3mm_ThermalVias","Package_DFN_QFN/QFN-32-1EP_5x5mm_P0.5mm_EP3.45x3.45mm","Package_DFN_QFN/QFN-32-1EP_5x5mm_P0.5mm_EP3.45x3.45mm_ThermalVias","Package_DFN_QFN/QFN-32-1EP_5x5mm_P0.5mm_EP3.65x3.65mm","Package_DFN_QFN/QFN-32-1EP_5x5mm_P0.5mm_EP3.65x3.65mm_ThermalVias","Package_DFN_QFN/QFN-32-1EP_5x5mm_P0.5mm_EP3.6x3.6mm","Package_DFN_QFN/QFN-32-1EP_5x5mm_P0.5mm_EP3.6x3.6mm_ThermalVias","Package_DFN_QFN/QFN-32-1EP_5x5mm_P0.5mm_EP3.7x3.7mm","Package_DFN_QFN/QFN-32-1EP_5x5mm_P0.5mm_EP3.7x3.7mm_ThermalVias","Package_DFN_QFN/QFN-32-1EP_7x7mm_P0.65mm_EP4.65x4.65mm","Package_DFN_QFN/QFN-32-1EP_7x7mm_P0.65mm_EP4.65x4.65mm_ThermalVias","Package_DFN_QFN/QFN-32-1EP_7x7mm_P0.65mm_EP4.7x4.7mm","Package_DFN_QFN/QFN-32-1EP_7x7mm_P0.65mm_EP4.7x4.7mm_ThermalVias","Package_DFN_QFN/QFN-32-1EP_7x7mm_P0.65mm_EP5.4x5.4mm","Package_DFN_QFN/QFN-32-1EP_7x7mm_P0.65mm_EP5.4x5.4mm_ThermalVias","Package_DFN_QFN/QFN-36-1EP_5x6mm_P0.5mm_EP3.6x4.1mm","Package_DFN_QFN/QFN-36-1EP_5x6mm_P0.5mm_EP3.6x4.1mm_ThermalVias","Package_DFN_QFN/QFN-36-1EP_5x6mm_P0.5mm_EP3.6x4.6mm","Package_DFN_QFN/QFN-36-1EP_5x6mm_P0.5mm_EP3.6x4.6mm_ThermalVias","Package_DFN_QFN/QFN-36-1EP_6x6mm_P0.5mm_EP3.7x3.7mm","Package_DFN_QFN/QFN-36-1EP_6x6mm_P0.5mm_EP3.7x3.7mm_ThermalVias","Package_DFN_QFN/QFN-36-1EP_6x6mm_P0.5mm_EP4.1x4.1mm","Package_DFN_QFN/QFN-36-1EP_6x6mm_P0.5mm_EP4.1x4.1mm_ThermalVias","Package_DFN_QFN/QFN-38-1EP_4x6mm_P0.4mm_EP2.65x4.65mm","Package_DFN_QFN/QFN-38-1EP_4x6mm_P0.4mm_EP2.65x4.65mm_ThermalVias","Package_DFN_QFN/QFN-40-1EP_5x5mm_P0.4mm_EP3.6x3.6mm","Package_DFN_QFN/QFN-40-1EP_5x5mm_P0.4mm_EP3.6x3.6mm_ThermalVias","Package_DFN_QFN/QFN-40-1EP_5x5mm_P0.4mm_EP3.8x3.8mm","Package_DFN_QFN/QFN-40-1EP_5x5mm_P0.4mm_EP3.8x3.8mm_ThermalVias","Package_DFN_QFN/QFN-40-1EP_6x6mm_P0.5mm_EP4.6x4.6mm","Package_DFN_QFN/QFN-40-1EP_6x6mm_P0.5mm_EP4.6x4.6mm_ThermalVias","Package_DFN_QFN/QFN-42-1EP_5x6mm_P0.4mm_EP3.7x4.7mm","Package_DFN_QFN/QFN-42-1EP_5x6mm_P0.4mm_EP3.7x4.7mm_ThermalVias","Package_DFN_QFN/QFN-44-1EP_7x7mm_P0.5mm_EP5.15x5.15mm","Package_DFN_QFN/QFN-44-1EP_7x7mm_P0.5mm_EP5.15x5.15mm_ThermalVias","Package_DFN_QFN/QFN-44-1EP_7x7mm_P0.5mm_EP5.2x5.2mm","Package_DFN_QFN/QFN-44-1EP_7x7mm_P0.5mm_EP5.2x5.2mm_ThermalVias","Package_DFN_QFN/QFN-44-1EP_8x8mm_P0.65mm_EP6.45x6.45mm","Package_DFN_QFN/QFN-44-1EP_8x8mm_P0.65mm_EP6.45x6.45mm_ThermalVias","Package_DFN_QFN/QFN-44-1EP_9x9mm_P0.65mm_EP7.5x7.5mm","Package_DFN_QFN/QFN-44-1EP_9x9mm_P0.65mm_EP7.5x7.5mm_ThermalVias","Package_DFN_QFN/QFN-48-1EP_5x5mm_P0.35mm_EP3.7x3.7mm","Package_DFN_QFN/QFN-48-1EP_5x5mm_P0.35mm_EP3.7x3.7mm_ThermalVias","Package_DFN_QFN/QFN-48-1EP_6x6mm_P0.4mm_EP4.2x4.2mm","Package_DFN_QFN/QFN-48-1EP_6x6mm_P0.4mm_EP4.2x4.2mm_ThermalVias","Package_DFN_QFN/QFN-48-1EP_6x6mm_P0.4mm_EP4.3x4.3mm","Package_DFN_QFN/QFN-48-1EP_6x6mm_P0.4mm_EP4.3x4.3mm_ThermalVias","Package_DFN_QFN/QFN-48-1EP_6x6mm_P0.4mm_EP4.4x4.4mm","Package_DFN_QFN/QFN-48-1EP_6x6mm_P0.4mm_EP4.4x4.4mm_ThermalVias","Package_DFN_QFN/QFN-48-1EP_6x6mm_P0.4mm_EP4.66x4.66mm","Package_DFN_QFN/QFN-48-1EP_6x6mm_P0.4mm_EP4.66x4.66mm_ThermalVias","Package_DFN_QFN/QFN-48-1EP_6x6mm_P0.4mm_EP4.6x4.6mm","Package_DFN_QFN/QFN-48-1EP_6x6mm_P0.4mm_EP4.6x4.6mm_ThermalVias","Package_DFN_QFN/QFN-48-1EP_7x7mm_P0.5mm_EP3.5x3.5mm","Package_DFN_QFN/QFN-48-1EP_7x7mm_P0.5mm_EP3.5x3.5mm_ThermalVias","Package_DFN_QFN/QFN-48-1EP_7x7mm_P0.5mm_EP5.15x5.15mm","Package_DFN_QFN/QFN-48-1EP_7x7mm_P0.5mm_EP5.15x5.15mm_ThermalVias","Package_DFN_QFN/QFN-48-1EP_7x7mm_P0.5mm_EP5.1x5.1mm","Package_DFN_QFN/QFN-48-1EP_7x7mm_P0.5mm_EP5.1x5.1mm_ThermalVias","Package_DFN_QFN/QFN-48-1EP_7x7mm_P0.5mm_EP5.3x5.3mm","Package_DFN_QFN/QFN-48-1EP_7x7mm_P0.5mm_EP5.3x5.3mm_ThermalVias","Package_DFN_QFN/QFN-48-1EP_7x7mm_P0.5mm_EP5.45x5.45mm","Package_DFN_QFN/QFN-48-1EP_7x7mm_P0.5mm_EP5.45x5.45mm_ThermalVias","Package_DFN_QFN/QFN-48-1EP_7x7mm_P0.5mm_EP5.6x5.6mm","Package_DFN_QFN/QFN-48-1EP_7x7mm_P0.5mm_EP5.6x5.6mm_ThermalVias","Package_DFN_QFN/QFN-48-1EP_7x7mm_P0.5mm_EP5.7x5.7mm","Package_DFN_QFN/QFN-48-1EP_7x7mm_P0.5mm_EP5.7x5.7mm_ThermalVias","Package_DFN_QFN/QFN-48-1EP_8x8mm_P0.5mm_EP6.2x6.2mm","Package_DFN_QFN/QFN-48-1EP_8x8mm_P0.5mm_EP6.2x6.2mm_ThermalVias","Package_DFN_QFN/QFN-52-1EP_7x8mm_P0.5mm_EP5.41x6.45mm","Package_DFN_QFN/QFN-52-1EP_7x8mm_P0.5mm_EP5.41x6.45mm_ThermalVias","Package_DFN_QFN/QFN-56-1EP_7x7mm_P0.4mm_EP3.2x3.2mm","Package_DFN_QFN/QFN-56-1EP_7x7mm_P0.4mm_EP3.2x3.2mm_ThermalVias","Package_DFN_QFN/QFN-56-1EP_7x7mm_P0.4mm_EP4x4mm","Package_DFN_QFN/QFN-56-1EP_7x7mm_P0.4mm_EP4x4mm_ThermalVias","Package_DFN_QFN/QFN-56-1EP_7x7mm_P0.4mm_EP5.6x5.6mm","Package_DFN_QFN/QFN-56-1EP_7x7mm_P0.4mm_EP5.6x5.6mm_ThermalVias","Package_DFN_QFN/QFN-56-1EP_8x8mm_P0.5mm_EP4.3x4.3mm","Package_DFN_QFN/QFN-56-1EP_8x8mm_P0.5mm_EP4.3x4.3mm_ThermalVias","Package_DFN_QFN/QFN-56-1EP_8x8mm_P0.5mm_EP4.5x5.2mm","Package_DFN_QFN/QFN-56-1EP_8x8mm_P0.5mm_EP4.5x5.2mm_ThermalVias","Package_DFN_QFN/QFN-56-1EP_8x8mm_P0.5mm_EP4.5x5.2mm_ThermalVias_TopTented","Package_DFN_QFN/QFN-56-1EP_8x8mm_P0.5mm_EP5.6x5.6mm","Package_DFN_QFN/QFN-56-1EP_8x8mm_P0.5mm_EP5.6x5.6mm_ThermalVias","Package_DFN_QFN/QFN-56-1EP_8x8mm_P0.5mm_EP5.9x5.9mm","Package_DFN_QFN/QFN-56-1EP_8x8mm_P0.5mm_EP5.9x5.9mm_ThermalVias","Package_DFN_QFN/QFN-56-1EP_8x8mm_P0.5mm_EP6.1x6.1mm","Package_DFN_QFN/QFN-56-1EP_8x8mm_P0.5mm_EP6.1x6.1mm_ThermalVias","Package_DFN_QFN/QFN-60-1EP_7x7mm_P0.4mm_EP3.4x3.4mm","Package_DFN_QFN/QFN-60-1EP_7x7mm_P0.4mm_EP3.4x3.4mm_ThermalVias","Package_DFN_QFN/QFN-64-1EP_8x8mm_P0.4mm_EP6.5x6.5mm","Package_DFN_QFN/QFN-64-1EP_8x8mm_P0.4mm_EP6.5x6.5mm_ThermalVias","Package_DFN_QFN/QFN-64-1EP_9x9mm_P0.5mm_EP3.4x3.4mm","Package_DFN_QFN/QFN-64-1EP_9x9mm_P0.5mm_EP3.4x3.4mm_ThermalVias","Package_DFN_QFN/QFN-64-1EP_9x9mm_P0.5mm_EP3.8x3.8mm","Package_DFN_QFN/QFN-64-1EP_9x9mm_P0.5mm_EP3.8x3.8mm_ThermalVias","Package_DFN_QFN/QFN-64-1EP_9x9mm_P0.5mm_EP4.1x4.1mm","Package_DFN_QFN/QFN-64-1EP_9x9mm_P0.5mm_EP4.1x4.1mm_ThermalVias","Package_DFN_QFN/QFN-64-1EP_9x9mm_P0.5mm_EP4.35x4.35mm","Package_DFN_QFN/QFN-64-1EP_9x9mm_P0.5mm_EP4.35x4.35mm_ThermalVias","Package_DFN_QFN/QFN-64-1EP_9x9mm_P0.5mm_EP4.7x4.7mm","Package_DFN_QFN/QFN-64-1EP_9x9mm_P0.5mm_EP4.7x4.7mm_ThermalVias","Package_DFN_QFN/QFN-64-1EP_9x9mm_P0.5mm_EP5.2x5.2mm","Package_DFN_QFN/QFN-64-1EP_9x9mm_P0.5mm_EP5.2x5.2mm_ThermalVias","Package_DFN_QFN/QFN-64-1EP_9x9mm_P0.5mm_EP5.45x5.45mm","Package_DFN_QFN/QFN-64-1EP_9x9mm_P0.5mm_EP5.45x5.45mm_ThermalVias","Package_DFN_QFN/QFN-64-1EP_9x9mm_P0.5mm_EP5.4x5.4mm","Package_DFN_QFN/QFN-64-1EP_9x9mm_P0.5mm_EP5.4x5.4mm_ThermalVias","Package_DFN_QFN/QFN-64-1EP_9x9mm_P0.5mm_EP5.7x5.7mm","Package_DFN_QFN/QFN-64-1EP_9x9mm_P0.5mm_EP5.7x5.7mm_ThermalVias","Package_DFN_QFN/QFN-64-1EP_9x9mm_P0.5mm_EP6x6mm","Package_DFN_QFN/QFN-64-1EP_9x9mm_P0.5mm_EP6x6mm_ThermalVias","Package_DFN_QFN/QFN-64-1EP_9x9mm_P0.5mm_EP7.15x7.15mm","Package_DFN_QFN/QFN-64-1EP_9x9mm_P0.5mm_EP7.15x7.15mm_ThermalVias","Package_DFN_QFN/QFN-64-1EP_9x9mm_P0.5mm_EP7.25x7.25mm","Package_DFN_QFN/QFN-64-1EP_9x9mm_P0.5mm_EP7.35x7.35mm","Package_DFN_QFN/QFN-64-1EP_9x9mm_P0.5mm_EP7.3x7.3mm","Package_DFN_QFN/QFN-64-1EP_9x9mm_P0.5mm_EP7.3x7.3mm_ThermalVias","Package_DFN_QFN/QFN-64-1EP_9x9mm_P0.5mm_EP7.5x7.5mm","Package_DFN_QFN/QFN-64-1EP_9x9mm_P0.5mm_EP7.5x7.5mm_ThermalVias","Package_DFN_QFN/QFN-64-1EP_9x9mm_P0.5mm_EP7.65x7.65mm","Package_DFN_QFN/QFN-64-1EP_9x9mm_P0.5mm_EP7.65x7.65mm_ThermalVias","Package_DFN_QFN/QFN-68-1EP_8x8mm_P0.4mm_EP5.2x5.2mm","Package_DFN_QFN/QFN-68-1EP_8x8mm_P0.4mm_EP5.2x5.2mm_ThermalVias","Package_DFN_QFN/QFN-68-1EP_8x8mm_P0.4mm_EP6.4x6.4mm","Package_DFN_QFN/QFN-68-1EP_8x8mm_P0.4mm_EP6.4x6.4mm_ThermalVias","Package_DFN_QFN/QFN-72-1EP_10x10mm_P0.5mm_EP6x6mm","Package_DFN_QFN/QFN-72-1EP_10x10mm_P0.5mm_EP6x6mm_ThermalVias","Package_DFN_QFN/QFN-76-1EP_9x9mm_P0.4mm_EP3.8x3.8mm","Package_DFN_QFN/QFN-76-1EP_9x9mm_P0.4mm_EP3.8x3.8mm_ThermalVias","Package_DFN_QFN/QFN-76-1EP_9x9mm_P0.4mm_EP5.81x6.31mm","Package_DFN_QFN/QFN-76-1EP_9x9mm_P0.4mm_EP5.81x6.31mm_ThermalVias","Package_DFN_QFN/QFN-8-1EP_6x5mm_P1.27mm_EP3.4x4.2mm","Package_DFN_QFN/QFN-80-1EP_10x10mm_P0.4mm_EP3.4x3.4mm","Package_DFN_QFN/QFN-80-1EP_10x10mm_P0.4mm_EP3.4x3.4mm_ThermalVias","Package_DFN_QFN/Qorvo_DFN-8-1EP_2x2mm_P0.5mm","Package_DFN_QFN/Qorvo_TQFN66-48-1EP_6x6mm_P0.4mm_EP4.2x4.2mm","Package_DFN_QFN/Qorvo_TQFN66-48-1EP_6x6mm_P0.4mm_EP4.2x4.2mm_ThermalVias","Package_DFN_QFN/ROHM_DFN0604-3","Package_DFN_QFN/Renesas_UQFN-16_2x2mm_P0.4mm","Package_DFN_QFN/Renesas_UQFN-20_2x3mm_P0.4mm_LayoutBorder4x6y","Package_DFN_QFN/ST_DFN-10-1EP_3x3mm_P0.5mm_EP0.62x0.98mm","Package_DFN_QFN/ST_DFN-10-1EP_3x3mm_P0.5mm_EP0.62x0.98mm_ThermalVias","Package_DFN_QFN/ST_UFDFPN-12-1EP_3x3mm_P0.5mm_EP1.4x2.55mm","Package_DFN_QFN/ST_UFQFPN-20_3x3mm_P0.5mm","Package_DFN_QFN/ST_UQFN-6L_1.5x1.7mm_P0.5mm","Package_DFN_QFN/SiliconLabs_QFN-20-1EP_3x3mm_P0.5mm_EP1.8x1.8mm","Package_DFN_QFN/SiliconLabs_QFN-20-1EP_3x3mm_P0.5mm_EP1.8x1.8mm_ThermalVias","Package_DFN_QFN/TDFN-10-1EP_2x3mm_P0.5mm_EP0.9x2mm","Package_DFN_QFN/TDFN-10-1EP_2x3mm_P0.5mm_EP0.9x2mm_ThermalVias","Package_DFN_QFN/TDFN-12-1EP_3x3mm_P0.4mm_EP1.7x2.45mm","Package_DFN_QFN/TDFN-12-1EP_3x3mm_P0.4mm_EP1.7x2.45mm_ThermalVias","Package_DFN_QFN/TDFN-12_2x3mm_P0.5mm","Package_DFN_QFN/TDFN-14-1EP_3x3mm_P0.4mm_EP1.78x2.35mm","Package_DFN_QFN/TDFN-14-1EP_3x3mm_P0.4mm_EP1.78x2.35mm_ThermalVias","Package_DFN_QFN/TDFN-6-1EP_1.2x1.2mm_P0.4mm_EP0.3x0.94mm","Package_DFN_QFN/TDFN-6-1EP_2.5x2.5mm_P0.65mm_EP1.3x2mm","Package_DFN_QFN/TDFN-6-1EP_2.5x2.5mm_P0.65mm_EP1.3x2mm_ThermalVias","Package_DFN_QFN/TDFN-8-1EP_2x2mm_P0.5mm_EP0.8x1.2mm","Package_DFN_QFN/TDFN-8-1EP_3x2mm_P0.5mm_EP1.3x1.4mm","Package_DFN_QFN/TDFN-8-1EP_3x2mm_P0.5mm_EP1.4x1.4mm","Package_DFN_QFN/TDFN-8-1EP_3x2mm_P0.5mm_EP1.80x1.65mm","Package_DFN_QFN/TDFN-8-1EP_3x2mm_P0.5mm_EP1.80x1.65mm_ThermalVias","Package_DFN_QFN/TDFN-8_1.4x1.6mm_P0.4mm","Package_DFN_QFN/TQFN-16-1EP_3x3mm_P0.5mm_EP1.23x1.23mm","Package_DFN_QFN/TQFN-16-1EP_3x3mm_P0.5mm_EP1.23x1.23mm_ThermalVias","Package_DFN_QFN/TQFN-16-1EP_3x3mm_P0.5mm_EP1.6x1.6mm","Package_DFN_QFN/TQFN-16-1EP_4x4mm_P0.65mm_EP2.1x2.1mm","Package_DFN_QFN/TQFN-16-1EP_4x4mm_P0.65mm_EP2.1x2.1mm_ThermalVias","Package_DFN_QFN/TQFN-16-1EP_5x5mm_P0.8mm_EP2.29x2.29mm","Package_DFN_QFN/TQFN-16-1EP_5x5mm_P0.8mm_EP2.29x2.29mm_ThermalVias","Package_DFN_QFN/TQFN-16-1EP_5x5mm_P0.8mm_EP3.1x3.1mm","Package_DFN_QFN/TQFN-16-1EP_5x5mm_P0.8mm_EP3.1x3.1mm_ThermalVias","Package_DFN_QFN/TQFN-20-1EP_4x4mm_P0.5mm_EP2.1x2.1mm","Package_DFN_QFN/TQFN-20-1EP_4x4mm_P0.5mm_EP2.1x2.1mm_ThermalVias","Package_DFN_QFN/TQFN-20-1EP_4x4mm_P0.5mm_EP2.9x2.9mm","Package_DFN_QFN/TQFN-20-1EP_4x4mm_P0.5mm_EP2.9x2.9mm_ThermalVias","Package_DFN_QFN/TQFN-20-1EP_5x5mm_P0.65mm_EP3.1x3.1mm","Package_DFN_QFN/TQFN-20-1EP_5x5mm_P0.65mm_EP3.1x3.1mm_ThermalVias","Package_DFN_QFN/TQFN-20-1EP_5x5mm_P0.65mm_EP3.25x3.25mm","Package_DFN_QFN/TQFN-20-1EP_5x5mm_P0.65mm_EP3.25x3.25mm_ThermalVias","Package_DFN_QFN/TQFN-24-1EP_4x4mm_P0.5mm_EP2.1x2.1mm","Package_DFN_QFN/TQFN-24-1EP_4x4mm_P0.5mm_EP2.1x2.1mm_ThermalVias","Package_DFN_QFN/TQFN-24-1EP_4x4mm_P0.5mm_EP2.6x2.6mm","Package_DFN_QFN/TQFN-24-1EP_4x4mm_P0.5mm_EP2.6x2.6mm_ThermalVias","Package_DFN_QFN/TQFN-24-1EP_4x4mm_P0.5mm_EP2.8x2.8mm_PullBack","Package_DFN_QFN/TQFN-24-1EP_4x4mm_P0.5mm_EP2.8x2.8mm_PullBack_ThermalVias","Package_DFN_QFN/TQFN-28-1EP_5x5mm_P0.5mm_EP2.7x2.7mm","Package_DFN_QFN/TQFN-28-1EP_5x5mm_P0.5mm_EP2.7x2.7mm_ThermalVias","Package_DFN_QFN/TQFN-28-1EP_5x5mm_P0.5mm_EP3.25x3.25mm","Package_DFN_QFN/TQFN-28-1EP_5x5mm_P0.5mm_EP3.25x3.25mm_ThermalVias","Package_DFN_QFN/TQFN-32-1EP_5x5mm_P0.5mm_EP2.1x2.1mm","Package_DFN_QFN/TQFN-32-1EP_5x5mm_P0.5mm_EP2.1x2.1mm_ThermalVias","Package_DFN_QFN/TQFN-32-1EP_5x5mm_P0.5mm_EP3.1x3.1mm","Package_DFN_QFN/TQFN-32-1EP_5x5mm_P0.5mm_EP3.1x3.1mm_ThermalVias","Package_DFN_QFN/TQFN-32-1EP_5x5mm_P0.5mm_EP3.4x3.4mm","Package_DFN_QFN/TQFN-32-1EP_5x5mm_P0.5mm_EP3.4x3.4mm_ThermalVias","Package_DFN_QFN/TQFN-40-1EP_5x5mm_P0.4mm_EP3.5x3.5mm","Package_DFN_QFN/TQFN-40-1EP_5x5mm_P0.4mm_EP3.5x3.5mm_ThermalVias","Package_DFN_QFN/TQFN-44-1EP_7x7mm_P0.5mm_EP4.7x4.7mm","Package_DFN_QFN/TQFN-44-1EP_7x7mm_P0.5mm_EP4.7x4.7mm_ThermalVias","Package_DFN_QFN/TQFN-48-1EP_7x7mm_P0.5mm_EP5.1x5.1mm","Package_DFN_QFN/TQFN-48-1EP_7x7mm_P0.5mm_EP5.1x5.1mm_ThermalVias","Package_DFN_QFN/Texas_B3QFN-14-1EP_5x5.5mm_P0.65mm","Package_DFN_QFN/Texas_B3QFN-14-1EP_5x5.5mm_P0.65mm_ThermalVia","Package_DFN_QFN/Texas_DLH0010A_WSON-10-1EP_2.2x2mm_P0.4mm_EP0.9x1.5mm","Package_DFN_QFN/Texas_DLH0010A_WSON-10-1EP_2.2x2mm_P0.4mm_EP0.9x1.5mm_ThermalVias","Package_DFN_QFN/Texas_DRB0008A","Package_DFN_QFN/Texas_DSQ0010A_WSON-10-1EP_2x2mm_P0.4mm_EP0.9x1.5mm","Package_DFN_QFN/Texas_DSQ0010A_WSON-10-1EP_2x2mm_P0.4mm_EP0.9x1.5mm_ThermalVias","Package_DFN_QFN/Texas_MOF0009A","Package_DFN_QFN/Texas_PicoStar_DFN-3_0.69x0.60mm","Package_DFN_QFN/Texas_QFN-41_10x16mm","Package_DFN_QFN/Texas_R-PUQFN-N10","Package_DFN_QFN/Texas_R-PUQFN-N12","Package_DFN_QFN/Texas_RDX0007A_QFN-FCMOD-7-3.3x4mm-P0.5mm_4EP","Package_DFN_QFN/Texas_REE0036A_WQFN-36-1EP_4x5mm_P0.4mm_EP2.7x3.7mm","Package_DFN_QFN/Texas_REE0036A_WQFN-36-1EP_4x5mm_P0.4mm_EP2.7x3.7mm_ThermalVias","Package_DFN_QFN/Texas_REF0038A_WQFN-38-2EP_6x4mm_P0.4","Package_DFN_QFN/Texas_RGC0064B_VQFN-64-1EP_9x9mm_P0.5mm_EP4.25x4.25mm","Package_DFN_QFN/Texas_RGC0064B_VQFN-64-1EP_9x9mm_P0.5mm_EP4.25x4.25mm_ThermalVias","Package_DFN_QFN/Texas_RGE0024C_VQFN-24-1EP_4x4mm_P0.5mm_EP2.1x2.1mm","Package_DFN_QFN/Texas_RGE0024C_VQFN-24-1EP_4x4mm_P0.5mm_EP2.1x2.1mm_ThermalVias","Package_DFN_QFN/Texas_RGE0024H_VQFN-24-1EP_4x4mm_P0.5mm_EP2.7x2.7mm","Package_DFN_QFN/Texas_RGE0024H_VQFN-24-1EP_4x4mm_P0.5mm_EP2.7x2.7mm_ThermalVias","Package_DFN_QFN/Texas_RGP0020D_VQFN-20-1EP_4x4mm_P0.5mm_EP2.7x2.7mm","Package_DFN_QFN/Texas_RGP0020D_VQFN-20-1EP_4x4mm_P0.5mm_EP2.7x2.7mm_ThermalVias","Package_DFN_QFN/Texas_RGP0020H_VQFN-20-1EP_4x4mm_P0.5mm_EP2.4x2.4mm","Package_DFN_QFN/Texas_RGP0020H_VQFN-20-1EP_4x4mm_P0.5mm_EP2.4x2.4mm_ThermalVias","Package_DFN_QFN/Texas_RGV0016A_VQFN-16-1EP_4x4mm_P0.65mm_EP2.1x2.1mm","Package_DFN_QFN/Texas_RGV0016A_VQFN-16-1EP_4x4mm_P0.65mm_EP2.1x2.1mm_ThermalVias","Package_DFN_QFN/Texas_RGW0020A_VQFN-20-1EP_5x5mm_P0.65mm_EP3.15x3.15mm","Package_DFN_QFN/Texas_RGW0020A_VQFN-20-1EP_5x5mm_P0.65mm_EP3.15x3.15mm_ThermalVias","Package_DFN_QFN/Texas_RGY_R-PVQFN-N16_EP2.05x2.55mm","Package_DFN_QFN/Texas_RGY_R-PVQFN-N16_EP2.05x2.55mm_ThermalVias","Package_DFN_QFN/Texas_RGY_R-PVQFN-N20_EP2.05x3.05mm","Package_DFN_QFN/Texas_RGY_R-PVQFN-N20_EP2.05x3.05mm_ThermalVias","Package_DFN_QFN/Texas_RGY_R-PVQFN-N24_EP2.05x3.1mm","Package_DFN_QFN/Texas_RGY_R-PVQFN-N24_EP2.05x3.1mm_ThermalVias","Package_DFN_QFN/Texas_RGZ0048A_VQFN-48-1EP_7x7mm_P0.5mm_EP5.15x5.15mm","Package_DFN_QFN/Texas_RGZ0048A_VQFN-48-1EP_7x7mm_P0.5mm_EP5.15x5.15mm_ThermalVias","Package_DFN_QFN/Texas_RHA0040B_VQFN-40-1EP_6x6mm_P0.5mm_EP4.15x4.15mm","Package_DFN_QFN/Texas_RHA0040B_VQFN-40-1EP_6x6mm_P0.5mm_EP4.15x4.15mm_ThermalVias","Package_DFN_QFN/Texas_RHA0040D_VQFN-40-1EP_6x6mm_P0.5mm_EP2.9x2.9mm","Package_DFN_QFN/Texas_RHA0040D_VQFN-40-1EP_6x6mm_P0.5mm_EP2.9x2.9mm_ThermalVias","Package_DFN_QFN/Texas_RHA0040E_VQFN-40-1EP_6x6mm_P0.5mm_EP3.52x2.62mm","Package_DFN_QFN/Texas_RHA0040E_VQFN-40-1EP_6x6mm_P0.5mm_EP3.52x2.62mm_ThermalVias","Package_DFN_QFN/Texas_RHA_VQFN-40-1EP_6x6mm_P0.5mm_EP4.6x4.6mm","Package_DFN_QFN/Texas_RHA_VQFN-40-1EP_6x6mm_P0.5mm_EP4.6x4.6mm_ThermalVias","Package_DFN_QFN/Texas_RHB0032E_VQFN-32-1EP_5x5mm_P0.5mm_EP3.45x3.45mm","Package_DFN_QFN/Texas_RHB0032E_VQFN-32-1EP_5x5mm_P0.5mm_EP3.45x3.45mm_ThermalVias","Package_DFN_QFN/Texas_RHB0032M_VQFN-32-1EP_5x5mm_P0.5mm_EP2.1x2.1mm","Package_DFN_QFN/Texas_RHB0032M_VQFN-32-1EP_5x5mm_P0.5mm_EP2.1x2.1mm_ThermalVias","Package_DFN_QFN/Texas_RHF0024A_VQFN-24-1EP_4x5mm_P0.5mm_EP2.65x3.65mm","Package_DFN_QFN/Texas_RHF0024A_VQFN-24-1EP_4x5mm_P0.5mm_EP2.65x3.65mm_ThermalVias","Package_DFN_QFN/Texas_RHH0036C_VQFN-36-1EP_6x6mm_P0.5mm_EP4.4x4.4mm","Package_DFN_QFN/Texas_RHH0036C_VQFN-36-1EP_6x6mm_P0.5mm_EP4.4x4.4mm_ThermalVias","Package_DFN_QFN/Texas_RJE0020A_VQFN-20-1EP_3x3mm_P0.45mm_EP0.675x0.76mm","Package_DFN_QFN/Texas_RJE0020A_VQFN-20-1EP_3x3mm_P0.45mm_EP0.675x0.76mm_ThermalVias","Package_DFN_QFN/Texas_RMG0012A_WQFN-12_1.8x1.8mm_P0.4mm","Package_DFN_QFN/Texas_RMQ0024A_WQFN-24-1EP_3x3mm_P0.4mm_EP1.9x1.9mm","Package_DFN_QFN/Texas_RMQ0024A_WQFN-24-1EP_3x3mm_P0.4mm_EP1.9x1.9mm_ThermalVias","Package_DFN_QFN/Texas_RNH0030A_WQFN-30-1EP_2.5x4.5mm_P0.4mm_EP1.2x3.2mm","Package_DFN_QFN/Texas_RNH0030A_WQFN-30-1EP_2.5x4.5mm_P0.4mm_EP1.2x3.2mm_ThermalVias","Package_DFN_QFN/Texas_RNN0018A","Package_DFN_QFN/Texas_RNP0030B_WQFN-30-1EP_4x6mm_P0.5mm_EP1.8x4.5mm","Package_DFN_QFN/Texas_RNP0030B_WQFN-30-1EP_4x6mm_P0.5mm_EP1.8x4.5mm_ThermalVias","Package_DFN_QFN/Texas_RNQ0040A_WQFN-40-1EP_6x4mm_P0.4mm_EP4.7x2.7mm","Package_DFN_QFN/Texas_RNQ0040A_WQFN-40-1EP_6x4mm_P0.4mm_EP4.7x2.7mm_ThermalVias","Package_DFN_QFN/Texas_RNX0012C_VQFN-14-11-1EP_2x3mm_P0.5mm_EP0.25x1.825mm","Package_DFN_QFN/Texas_RPU0010A_VQFN-HR-10_2x2mm_P0.5mm","Package_DFN_QFN/Texas_RQM0029A_VQFN-29_4x4mm_P0.4mm","Package_DFN_QFN/Texas_RRW0024A_WQFN-24-1EP_3x3mm_P0.4mm_EP1.9x1.9mm","Package_DFN_QFN/Texas_RRW0024A_WQFN-24-1EP_3x3mm_P0.4mm_EP1.9x1.9mm_ThermalVias","Package_DFN_QFN/Texas_RSA_VQFN-16-1EP_4x4mm_P0.65mm_EP2.7x2.7mm","Package_DFN_QFN/Texas_RSA_VQFN-16-1EP_4x4mm_P0.65mm_EP2.7x2.7mm_ThermalVias","Package_DFN_QFN/Texas_RSN_WQFN-32-1EP_4x4mm_P0.4mm_EP2.8x2.8mm","Package_DFN_QFN/Texas_RSN_WQFN-32-1EP_4x4mm_P0.4mm_EP2.8x2.8mm_ThermalVias","Package_DFN_QFN/Texas_RSW0010A_UQFN-10_1.4x1.8mm_P0.4mm","Package_DFN_QFN/Texas_RTE0016D_WQFN-16-1EP_3x3mm_P0.5mm_EP0.8x0.8mm","Package_DFN_QFN/Texas_RTE0016D_WQFN-16-1EP_3x3mm_P0.5mm_EP0.8x0.8mm_ThermalVias","Package_DFN_QFN/Texas_RTE_WQFN-16-1EP_3x3mm_P0.5mm_EP1.2x0.8mm","Package_DFN_QFN/Texas_RTE_WQFN-16-1EP_3x3mm_P0.5mm_EP1.2x0.8mm_ThermalVias","Package_DFN_QFN/Texas_RTW_WQFN-24-1EP_4x4mm_P0.5mm_EP2.7x2.7mm","Package_DFN_QFN/Texas_RTW_WQFN-24-1EP_4x4mm_P0.5mm_EP2.7x2.7mm_ThermalVias","Package_DFN_QFN/Texas_RTY_WQFN-16-1EP_4x4mm_P0.65mm_EP2.1x2.1mm","Package_DFN_QFN/Texas_RTY_WQFN-16-1EP_4x4mm_P0.65mm_EP2.1x2.1mm_ThermalVias","Package_DFN_QFN/Texas_RUK0020B_WQFN-20-1EP_3x3mm_P0.4mm_EP1.7x1.7mm","Package_DFN_QFN/Texas_RUK0020B_WQFN-20-1EP_3x3mm_P0.4mm_EP1.7x1.7mm_ThermalVias","Package_DFN_QFN/Texas_RUM0016A_WQFN-16-1EP_4x4mm_P0.65mm_EP2.6x2.6mm","Package_DFN_QFN/Texas_RUM0016A_WQFN-16-1EP_4x4mm_P0.65mm_EP2.6x2.6mm_ThermalVias","Package_DFN_QFN/Texas_RUM0016E_WQFN-16-1EP_4x4mm_P0.65mm_EP2.5x2.5mm","Package_DFN_QFN/Texas_RUM0016E_WQFN-16-1EP_4x4mm_P0.65mm_EP2.5x2.5mm_ThermalVias","Package_DFN_QFN/Texas_RUN0010A_WQFN-10_2x2mm_P0.5mm","Package_DFN_QFN/Texas_RVA_VQFN-16-1EP_3.5x3.5mm_P0.5mm_EP2.14x2.14mm","Package_DFN_QFN/Texas_RVA_VQFN-16-1EP_3.5x3.5mm_P0.5mm_EP2.14x2.14mm_ThermalVias","Package_DFN_QFN/Texas_RVC0020A_WQFN-20-1EP_3x4mm_P0.5mm_EP1.6x2.6mm","Package_DFN_QFN/Texas_RVC0020A_WQFN-20-1EP_3x4mm_P0.5mm_EP1.6x2.6mm_ThermalVias","Package_DFN_QFN/Texas_RVE0028A_VQFN-28-1EP_3.5x4.5mm_P0.4mm_EP2.1x3.1mm","Package_DFN_QFN/Texas_RVE0028A_VQFN-28-1EP_3.5x4.5mm_P0.4mm_EP2.1x3.1mm_ThermalVias","Package_DFN_QFN/Texas_RWH0032A","Package_DFN_QFN/Texas_RWH0032A_ThermalVias","Package_DFN_QFN/Texas_RWU0007A_VQFN-7_2x2mm_P0.5mm","Package_DFN_QFN/Texas_S-PDSO-N10_EP1.2x2mm","Package_DFN_QFN/Texas_S-PDSO-N10_EP1.2x2mm_ThermalVias","Package_DFN_QFN/Texas_S-PVQFN-N14","Package_DFN_QFN/Texas_S-PVQFN-N14_ThermalVias","Package_DFN_QFN/Texas_S-PWQFN-N100_EP5.5x5.5mm","Package_DFN_QFN/Texas_S-PWQFN-N100_EP5.5x5.5mm_ThermalVias","Package_DFN_QFN/Texas_S-PWQFN-N20","Package_DFN_QFN/Texas_S-PX2QFN-14","Package_DFN_QFN/Texas_UQFN-10_1.5x2mm_P0.5mm","Package_DFN_QFN/Texas_UQFN-8_1.5x1.5mm_P0.5mm","Package_DFN_QFN/Texas_VQFN-HR-12_2x2.5mm_P0.5mm","Package_DFN_QFN/Texas_VQFN-HR-12_2x2.5mm_P0.5mm_ThermalVias","Package_DFN_QFN/Texas_VQFN-HR-20_3x2.5mm_P0.5mm_RQQ0011A","Package_DFN_QFN/Texas_VQFN-RHL-20","Package_DFN_QFN/Texas_VQFN-RHL-20_ThermalVias","Package_DFN_QFN/Texas_VQFN-RNR0011A-11","Package_DFN_QFN/Texas_WQFN-MR-100_3x3-DapStencil","Package_DFN_QFN/Texas_WQFN-MR-100_ThermalVias_3x3-DapStencil","Package_DFN_QFN/Texas_X2QFN-12_1.6x1.6mm_P0.4mm","Package_DFN_QFN/Texas_X2QFN-RUE-12_1.4x2mm_P0.4mm","Package_DFN_QFN/UDC-QFN-20-4EP_3x4mm_P0.5mm_EP0.41x0.25mm","Package_DFN_QFN/UDFN-10_1.35x2.6mm_P0.5mm","Package_DFN_QFN/UDFN-4-1EP_1x1mm_P0.65mm_EP0.48x0.48mm","Package_DFN_QFN/UDFN-9_1.0x3.8mm_P0.5mm","Package_DFN_QFN/UFQFPN-32-1EP_5x5mm_P0.5mm_EP3.5x3.5mm","Package_DFN_QFN/UFQFPN-32-1EP_5x5mm_P0.5mm_EP3.5x3.5mm_ThermalVias","Package_DFN_QFN/UQFN-10_1.3x1.8mm_P0.4mm","Package_DFN_QFN/UQFN-10_1.4x1.8mm_P0.4mm","Package_DFN_QFN/UQFN-10_1.6x2.1mm_P0.5mm","Package_DFN_QFN/UQFN-12-1EP_2x2mm_P0.4mm_EP1.1x1.1mm","Package_DFN_QFN/UQFN-16-1EP_3x3mm_P0.5mm_EP1.75x1.75mm","Package_DFN_QFN/UQFN-16-1EP_4x4mm_P0.65mm_EP2.6x2.6mm","Package_DFN_QFN/UQFN-16-1EP_4x4mm_P0.65mm_EP2.6x2.6mm_ThermalVias","Package_DFN_QFN/UQFN-16-1EP_4x4mm_P0.65mm_EP2.7x2.7mm","Package_DFN_QFN/UQFN-16_1.8x2.6mm_P0.4mm","Package_DFN_QFN/UQFN-20-1EP_3x3mm_P0.4mm_EP1.7x1.7mm","Package_DFN_QFN/UQFN-20-1EP_3x3mm_P0.4mm_EP1.7x1.7mm_ThermalVias","Package_DFN_QFN/UQFN-20-1EP_3x3mm_P0.4mm_EP1.85x1.85mm","Package_DFN_QFN/UQFN-20-1EP_3x3mm_P0.4mm_EP1.85x1.85mm_ThermalVias","Package_DFN_QFN/UQFN-20-1EP_4x4mm_P0.5mm_EP2.8x2.8mm","Package_DFN_QFN/UQFN-20-1EP_4x4mm_P0.5mm_EP2.8x2.8mm_ThermalVias","Package_DFN_QFN/UQFN-20_3x3mm_P0.4mm","Package_DFN_QFN/UQFN-28-1EP_4x4mm_P0.4mm_EP2.35x2.35mm","Package_DFN_QFN/UQFN-28-1EP_4x4mm_P0.4mm_EP2.35x2.35mm_ThermalVias","Package_DFN_QFN/UQFN-32_5x5mm_P0.5mm","Package_DFN_QFN/UQFN-40-1EP_5x5mm_P0.4mm_EP3.8x3.8mm","Package_DFN_QFN/UQFN-40-1EP_5x5mm_P0.4mm_EP3.8x3.8mm_ThermalVias","Package_DFN_QFN/UQFN-48-1EP_6x6mm_P0.4mm_EP4.45x4.45mm","Package_DFN_QFN/UQFN-48-1EP_6x6mm_P0.4mm_EP4.45x4.45mm_ThermalVias","Package_DFN_QFN/UQFN-48-1EP_6x6mm_P0.4mm_EP4.62x4.62mm","Package_DFN_QFN/UQFN-48-1EP_6x6mm_P0.4mm_EP4.62x4.62mm_ThermalVias","Package_DFN_QFN/VDFN-8-1EP_2x2mm_P0.5mm_EP0.9x1.7mm","Package_DFN_QFN/VQFN-100-1EP_12x12mm_P0.4mm_EP8x8mm","Package_DFN_QFN/VQFN-100-1EP_12x12mm_P0.4mm_EP8x8mm_ThermalVias","Package_DFN_QFN/VQFN-12-1EP_4x4mm_P0.8mm_EP2.1x2.1mm","Package_DFN_QFN/VQFN-12-1EP_4x4mm_P0.8mm_EP2.1x2.1mm_ThermalVias","Package_DFN_QFN/VQFN-16-1EP_3x3mm_P0.5mm_EP1.1x1.1mm","Package_DFN_QFN/VQFN-16-1EP_3x3mm_P0.5mm_EP1.1x1.1mm_ThermalVias","Package_DFN_QFN/VQFN-16-1EP_3x3mm_P0.5mm_EP1.45x1.45mm","Package_DFN_QFN/VQFN-16-1EP_3x3mm_P0.5mm_EP1.45x1.45mm_ThermalVias","Package_DFN_QFN/VQFN-16-1EP_3x3mm_P0.5mm_EP1.68x1.68mm","Package_DFN_QFN/VQFN-16-1EP_3x3mm_P0.5mm_EP1.68x1.68mm_ThermalVias","Package_DFN_QFN/VQFN-16-1EP_3x3mm_P0.5mm_EP1.6x1.6mm","Package_DFN_QFN/VQFN-16-1EP_3x3mm_P0.5mm_EP1.6x1.6mm_ThermalVias","Package_DFN_QFN/VQFN-16-1EP_3x3mm_P0.5mm_EP1.8x1.8mm","Package_DFN_QFN/VQFN-16-1EP_3x3mm_P0.5mm_EP1.8x1.8mm_ThermalVias","Package_DFN_QFN/VQFN-20-1EP_3x3mm_P0.45mm_EP1.55x1.55mm","Package_DFN_QFN/VQFN-20-1EP_3x3mm_P0.45mm_EP1.55x1.55mm_ThermalVias","Package_DFN_QFN/VQFN-20-1EP_3x3mm_P0.4mm_EP1.7x1.7mm","Package_DFN_QFN/VQFN-20-1EP_3x3mm_P0.4mm_EP1.7x1.7mm_ThermalVias","Package_DFN_QFN/VQFN-24-1EP_4x4mm_P0.5mm_EP2.45x2.45mm","Package_DFN_QFN/VQFN-24-1EP_4x4mm_P0.5mm_EP2.45x2.45mm_ThermalVias","Package_DFN_QFN/VQFN-24-1EP_4x4mm_P0.5mm_EP2.5x2.5mm","Package_DFN_QFN/VQFN-24-1EP_4x4mm_P0.5mm_EP2.5x2.5mm_ThermalVias","Package_DFN_QFN/VQFN-28-1EP_4x4mm_P0.45mm_EP2.4x2.4mm","Package_DFN_QFN/VQFN-28-1EP_4x4mm_P0.45mm_EP2.4x2.4mm_ThermalVias","Package_DFN_QFN/VQFN-28-1EP_4x5mm_P0.5mm_EP2.55x3.55mm","Package_DFN_QFN/VQFN-28-1EP_4x5mm_P0.5mm_EP2.55x3.55mm_ThermalVias","Package_DFN_QFN/VQFN-28-1EP_5x5mm_P0.5mm_EP3.25x3.25mm","Package_DFN_QFN/VQFN-28-1EP_5x5mm_P0.5mm_EP3.25x3.25mm_ThermalVias","Package_DFN_QFN/VQFN-28-1EP_5x5mm_P0.5mm_EP3.7x3.7mm","Package_DFN_QFN/VQFN-28-1EP_5x5mm_P0.5mm_EP3.7x3.7mm_ThermalVias","Package_DFN_QFN/VQFN-32-1EP_4x4mm_P0.4mm_EP2.8x2.8mm","Package_DFN_QFN/VQFN-32-1EP_4x4mm_P0.4mm_EP2.8x2.8mm_ThermalVias","Package_DFN_QFN/VQFN-32-1EP_5x5mm_P0.5mm_EP3.15x3.15mm","Package_DFN_QFN/VQFN-32-1EP_5x5mm_P0.5mm_EP3.15x3.15mm_ThermalVias","Package_DFN_QFN/VQFN-32-1EP_5x5mm_P0.5mm_EP3.1x3.1mm","Package_DFN_QFN/VQFN-32-1EP_5x5mm_P0.5mm_EP3.1x3.1mm_ThermalVias","Package_DFN_QFN/VQFN-32-1EP_5x5mm_P0.5mm_EP3.5x3.5mm","Package_DFN_QFN/VQFN-32-1EP_5x5mm_P0.5mm_EP3.5x3.5mm_ThermalVias","Package_DFN_QFN/VQFN-40-1EP_5x5mm_P0.4mm_EP3.3x3.3mm","Package_DFN_QFN/VQFN-40-1EP_5x5mm_P0.4mm_EP3.3x3.3mm_ThermalVias","Package_DFN_QFN/VQFN-40-1EP_5x5mm_P0.4mm_EP3.5x3.5mm","Package_DFN_QFN/VQFN-40-1EP_5x5mm_P0.4mm_EP3.5x3.5mm_ThermalVias","Package_DFN_QFN/VQFN-40-1EP_5x5mm_P0.4mm_EP3.6x3.6mm","Package_DFN_QFN/VQFN-40-1EP_5x5mm_P0.4mm_EP3.6x3.6mm_ThermalVias","Package_DFN_QFN/VQFN-40-1EP_5x5mm_P0.4mm_EP3.7x3.7mm","Package_DFN_QFN/VQFN-40-1EP_5x5mm_P0.4mm_EP3.7x3.7mm_ThermalVias","Package_DFN_QFN/VQFN-40-1EP_6x6mm_P0.5mm_EP3.5x3.5mm","Package_DFN_QFN/VQFN-40-1EP_6x6mm_P0.5mm_EP3.5x3.5mm_ThermalVias","Package_DFN_QFN/VQFN-46-1EP_5x6mm_P0.4mm_EP2.8x3.8mm","Package_DFN_QFN/VQFN-46-1EP_5x6mm_P0.4mm_EP2.8x3.8mm_ThermalVias","Package_DFN_QFN/VQFN-48-1EP_6x6mm_P0.4mm_EP4.1x4.1mm","Package_DFN_QFN/VQFN-48-1EP_6x6mm_P0.4mm_EP4.1x4.1mm_ThermalVias","Package_DFN_QFN/VQFN-48-1EP_7x7mm_P0.5mm_EP2.6x2.6mm","Package_DFN_QFN/VQFN-48-1EP_7x7mm_P0.5mm_EP2.6x2.6mm_ThermalVias","Package_DFN_QFN/VQFN-48-1EP_7x7mm_P0.5mm_EP4.1x4.1mm","Package_DFN_QFN/VQFN-48-1EP_7x7mm_P0.5mm_EP4.1x4.1mm_ThermalVias","Package_DFN_QFN/VQFN-48-1EP_7x7mm_P0.5mm_EP4.2x4.2mm","Package_DFN_QFN/VQFN-48-1EP_7x7mm_P0.5mm_EP4.2x4.2mm_ThermalVias","Package_DFN_QFN/VQFN-48-1EP_7x7mm_P0.5mm_EP5.15x5.15mm","Package_DFN_QFN/VQFN-48-1EP_7x7mm_P0.5mm_EP5.15x5.15mm_ThermalVias","Package_DFN_QFN/VQFN-56-1EP_8x8mm_P0.5mm_EP5.1x4.96mm","Package_DFN_QFN/VQFN-56-1EP_8x8mm_P0.5mm_EP5.1x4.96mm_ThermalVias","Package_DFN_QFN/VQFN-56-1EP_8x8mm_P0.5mm_EP5.5x5.06mm","Package_DFN_QFN/VQFN-56-1EP_8x8mm_P0.5mm_EP5.5x5.06mm_ThermalVias","Package_DFN_QFN/VQFN-64-1EP_9x9mm_P0.5mm_EP5.4x5.4mm","Package_DFN_QFN/VQFN-64-1EP_9x9mm_P0.5mm_EP5.4x5.4mm_ThermalVias","Package_DFN_QFN/VQFN-64-1EP_9x9mm_P0.5mm_EP7.15x7.15mm","Package_DFN_QFN/VQFN-64-1EP_9x9mm_P0.5mm_EP7.15x7.15mm_ThermalVias","Package_DFN_QFN/VQFN-68-1EP_8x8mm_P0.4mm_EP4.3x4.3mm","Package_DFN_QFN/Vishay_PowerPAK_MLP44-24L","Package_DFN_QFN/Vishay_PowerPAK_MLP44-24L_ThermalVias","Package_DFN_QFN/Vishay_PowerPAK_MLP55-27L","Package_DFN_QFN/Vishay_PowerPAK_MLP55-27L_R","Package_DFN_QFN/Vishay_PowerPAK_MLP55-27L_R_ThermalVias","Package_DFN_QFN/Vishay_PowerPAK_MLP55-27L_ThermalVias","Package_DFN_QFN/W-PDFN-8-1EP_6x5mm_P1.27mm_EP3x3mm","Package_DFN_QFN/WCH_QFN-16-1EP_3x3mm_P0.5mm_EP1.8x1.8mm","Package_DFN_QFN/WDFN-10-1EP_3x3mm_P0.5mm_EP1.8x2.5mm","Package_DFN_QFN/WDFN-10-1EP_3x3mm_P0.5mm_EP1.8x2.5mm_ThermalVias","Package_DFN_QFN/WDFN-12-1EP_3x3mm_P0.45mm_EP1.7x2.5mm","Package_DFN_QFN/WDFN-6-2EP_4.0x2.6mm_P0.65mm","Package_DFN_QFN/WDFN-8-1EP_2x2.2mm_P0.5mm_EP0.80x0.54","Package_DFN_QFN/WDFN-8-1EP_2x2mm_P0.5mm_EP0.8x1.2mm","Package_DFN_QFN/WDFN-8-1EP_3x2mm_P0.5mm_EP1.3x1.4mm","Package_DFN_QFN/WDFN-8-1EP_4x3mm_P0.65mm_EP2.4x1.8mm","Package_DFN_QFN/WDFN-8-1EP_4x3mm_P0.65mm_EP2.4x1.8mm_ThermalVias","Package_DFN_QFN/WDFN-8-1EP_6x5mm_P1.27mm_EP3.4x4mm","Package_DFN_QFN/WDFN-8-1EP_8x6mm_P1.27mm_EP6x4.8mm","Package_DFN_QFN/WDFN-8-1EP_8x6mm_P1.27mm_EP6x4.8mm_ThermalVias","Package_DFN_QFN/WDFN-8_2x2mm_P0.5mm","Package_DFN_QFN/WFDFPN-8-1EP_3x2mm_P0.5mm_EP1.25x1.35mm","Package_DFN_QFN/WQFN-14-1EP_2.5x2.5mm_P0.5mm_EP1.45x1.45mm","Package_DFN_QFN/WQFN-14-1EP_2.5x2.5mm_P0.5mm_EP1.45x1.45mm_ThermalVias","Package_DFN_QFN/WQFN-16-1EP_3x3mm_P0.5mm_EP1.68x1.68mm","Package_DFN_QFN/WQFN-16-1EP_3x3mm_P0.5mm_EP1.68x1.68mm_ThermalVias","Package_DFN_QFN/WQFN-16-1EP_3x3mm_P0.5mm_EP1.6x1.6mm","Package_DFN_QFN/WQFN-16-1EP_3x3mm_P0.5mm_EP1.6x1.6mm_ThermalVias","Package_DFN_QFN/WQFN-16-1EP_3x3mm_P0.5mm_EP1.75x1.75mm","Package_DFN_QFN/WQFN-16-1EP_3x3mm_P0.5mm_EP1.75x1.75mm_ThermalVias","Package_DFN_QFN/WQFN-16-1EP_4x4mm_P0.5mm_EP2.6x2.6mm","Package_DFN_QFN/WQFN-16-1EP_4x4mm_P0.5mm_EP2.6x2.6mm_ThermalVias","Package_DFN_QFN/WQFN-20-1EP_2.5x4.5mm_P0.5mm_EP1x2.9mm","Package_DFN_QFN/WQFN-20-1EP_3x3mm_P0.4mm_EP1.7x1.7mm","Package_DFN_QFN/WQFN-20-1EP_3x3mm_P0.4mm_EP1.7x1.7mm_ThermalVias","Package_DFN_QFN/WQFN-20-1EP_4x4mm_P0.5mm_EP2.7x2.7mm","Package_DFN_QFN/WQFN-20-1EP_4x4mm_P0.5mm_EP2.7x2.7mm_ThermalVias","Package_DFN_QFN/WQFN-24-1EP_4x4mm_P0.5mm_EP2.45x2.45mm","Package_DFN_QFN/WQFN-24-1EP_4x4mm_P0.5mm_EP2.45x2.45mm_ThermalVias","Package_DFN_QFN/WQFN-24-1EP_4x4mm_P0.5mm_EP2.6x2.6mm","Package_DFN_QFN/WQFN-24-1EP_4x4mm_P0.5mm_EP2.6x2.6mm_ThermalVias","Package_DFN_QFN/WQFN-28-1EP_4x4mm_P0.4mm_EP2.7x2.7mm","Package_DFN_QFN/WQFN-28-1EP_4x4mm_P0.4mm_EP2.7x2.7mm_ThermalVias","Package_DFN_QFN/WQFN-32-1EP_5x5mm_P0.5mm_EP3.1x3.1mm","Package_DFN_QFN/WQFN-38-1EP_5x7mm_P0.5mm_EP2.7x4.7mm","Package_DFN_QFN/WQFN-38-1EP_5x7mm_P0.5mm_EP2.7x4.7mm_ThermalVias","Package_DFN_QFN/WQFN-38-1EP_5x7mm_P0.5mm_EP3.15x5.15mm","Package_DFN_QFN/WQFN-38-1EP_5x7mm_P0.5mm_EP3.15x5.15mm_ThermalVias","Package_DFN_QFN/WQFN-38-1EP_5x7mm_P0.5mm_EP3.65x5.65mm","Package_DFN_QFN/WQFN-38-1EP_5x7mm_P0.5mm_EP3.65x5.65mm_ThermalVias","Package_DFN_QFN/WQFN-42-1EP_3.5x9mm_P0.5mm_EP2.05x7.55mm","Package_DFN_QFN/WQFN-42-1EP_3.5x9mm_P0.5mm_EP2.05x7.55mm_ThermalVias","Package_DIP/CERDIP-14_W7.62mm_SideBrazed","Package_DIP/CERDIP-14_W7.62mm_SideBrazed_LongPads","Package_DIP/CERDIP-14_W7.62mm_SideBrazed_LongPads_Socket","Package_DIP/CERDIP-14_W7.62mm_SideBrazed_Socket","Package_DIP/CERDIP-16_W7.62mm_SideBrazed","Package_DIP/CERDIP-16_W7.62mm_SideBrazed_LongPads","Package_DIP/CERDIP-16_W7.62mm_SideBrazed_LongPads_Socket","Package_DIP/CERDIP-16_W7.62mm_SideBrazed_Socket","Package_DIP/CERDIP-18_W7.62mm_SideBrazed","Package_DIP/CERDIP-18_W7.62mm_SideBrazed_LongPads","Package_DIP/CERDIP-18_W7.62mm_SideBrazed_LongPads_Socket","Package_DIP/CERDIP-18_W7.62mm_SideBrazed_Socket","Package_DIP/CERDIP-20_W7.62mm_SideBrazed","Package_DIP/CERDIP-20_W7.62mm_SideBrazed_LongPads","Package_DIP/CERDIP-20_W7.62mm_SideBrazed_LongPads_Socket","Package_DIP/CERDIP-20_W7.62mm_SideBrazed_Socket","Package_DIP/CERDIP-22_W7.62mm_SideBrazed","Package_DIP/CERDIP-22_W7.62mm_SideBrazed_LongPads","Package_DIP/CERDIP-22_W7.62mm_SideBrazed_LongPads_Socket","Package_DIP/CERDIP-22_W7.62mm_SideBrazed_Socket","Package_DIP/CERDIP-24_W7.62mm_SideBrazed","Package_DIP/CERDIP-24_W7.62mm_SideBrazed_LongPads","Package_DIP/CERDIP-24_W7.62mm_SideBrazed_LongPads_Socket","Package_DIP/CERDIP-24_W7.62mm_SideBrazed_Socket","Package_DIP/CERDIP-28_W7.62mm_SideBrazed","Package_DIP/CERDIP-28_W7.62mm_SideBrazed_LongPads","Package_DIP/CERDIP-28_W7.62mm_SideBrazed_LongPads_Socket","Package_DIP/CERDIP-28_W7.62mm_SideBrazed_Socket","Package_DIP/CERDIP-8_W7.62mm_SideBrazed","Package_DIP/CERDIP-8_W7.62mm_SideBrazed_LongPads","Package_DIP/CERDIP-8_W7.62mm_SideBrazed_LongPads_Socket","Package_DIP/CERDIP-8_W7.62mm_SideBrazed_Socket","Package_DIP/DIP-10_W10.16mm","Package_DIP/DIP-10_W10.16mm_LongPads","Package_DIP/DIP-10_W7.62mm","Package_DIP/DIP-10_W7.62mm_LongPads","Package_DIP/DIP-10_W7.62mm_SMDSocket_SmallPads","Package_DIP/DIP-10_W7.62mm_Socket","Package_DIP/DIP-10_W7.62mm_Socket_LongPads","Package_DIP/DIP-10_W8.89mm_SMDSocket_LongPads","Package_DIP/DIP-12_W10.16mm","Package_DIP/DIP-12_W10.16mm_LongPads","Package_DIP/DIP-12_W7.62mm","Package_DIP/DIP-12_W7.62mm_LongPads","Package_DIP/DIP-12_W7.62mm_SMDSocket_SmallPads","Package_DIP/DIP-12_W7.62mm_Socket","Package_DIP/DIP-12_W7.62mm_Socket_LongPads","Package_DIP/DIP-12_W8.89mm_SMDSocket_LongPads","Package_DIP/DIP-14_W10.16mm","Package_DIP/DIP-14_W10.16mm_LongPads","Package_DIP/DIP-14_W7.62mm","Package_DIP/DIP-14_W7.62mm_LongPads","Package_DIP/DIP-14_W7.62mm_SMDSocket_SmallPads","Package_DIP/DIP-14_W7.62mm_Socket","Package_DIP/DIP-14_W7.62mm_Socket_LongPads","Package_DIP/DIP-14_W8.89mm_SMDSocket_LongPads","Package_DIP/DIP-16_W10.16mm","Package_DIP/DIP-16_W10.16mm_LongPads","Package_DIP/DIP-16_W7.62mm","Package_DIP/DIP-16_W7.62mm_LongPads","Package_DIP/DIP-16_W7.62mm_SMDSocket_SmallPads","Package_DIP/DIP-16_W7.62mm_Socket","Package_DIP/DIP-16_W7.62mm_Socket_LongPads","Package_DIP/DIP-16_W8.89mm_SMDSocket_LongPads","Package_DIP/DIP-18_W7.62mm","Package_DIP/DIP-18_W7.62mm_LongPads","Package_DIP/DIP-18_W7.62mm_SMDSocket_SmallPads","Package_DIP/DIP-18_W7.62mm_Socket","Package_DIP/DIP-18_W7.62mm_Socket_LongPads","Package_DIP/DIP-18_W8.89mm_SMDSocket_LongPads","Package_DIP/DIP-20_W7.62mm","Package_DIP/DIP-20_W7.62mm_LongPads","Package_DIP/DIP-20_W7.62mm_SMDSocket_SmallPads","Package_DIP/DIP-20_W7.62mm_Socket","Package_DIP/DIP-20_W7.62mm_Socket_LongPads","Package_DIP/DIP-20_W8.89mm_SMDSocket_LongPads","Package_DIP/DIP-22_W10.16mm","Package_DIP/DIP-22_W10.16mm_LongPads","Package_DIP/DIP-22_W10.16mm_SMDSocket_SmallPads","Package_DIP/DIP-22_W10.16mm_Socket","Package_DIP/DIP-22_W10.16mm_Socket_LongPads","Package_DIP/DIP-22_W11.43mm_SMDSocket_LongPads","Package_DIP/DIP-22_W7.62mm","Package_DIP/DIP-22_W7.62mm_LongPads","Package_DIP/DIP-22_W7.62mm_SMDSocket_SmallPads","Package_DIP/DIP-22_W7.62mm_Socket","Package_DIP/DIP-22_W7.62mm_Socket_LongPads","Package_DIP/DIP-22_W8.89mm_SMDSocket_LongPads","Package_DIP/DIP-24_18.0mmx34.29mm_W15.24mm","Package_DIP/DIP-24_18.0mmx34.29mm_W15.24mm_LongPads","Package_DIP/DIP-24_18.0mmx34.29mm_W15.24mm_SMDSocket_SmallPads","Package_DIP/DIP-24_18.0mmx34.29mm_W15.24mm_Socket","Package_DIP/DIP-24_18.0mmx34.29mm_W15.24mm_Socket_LongPads","Package_DIP/DIP-24_W10.16mm","Package_DIP/DIP-24_W10.16mm_LongPads","Package_DIP/DIP-24_W10.16mm_SMDSocket_SmallPads","Package_DIP/DIP-24_W10.16mm_Socket","Package_DIP/DIP-24_W10.16mm_Socket_LongPads","Package_DIP/DIP-24_W11.43mm_SMDSocket_LongPads","Package_DIP/DIP-24_W15.24mm","Package_DIP/DIP-24_W15.24mm_LongPads","Package_DIP/DIP-24_W15.24mm_SMDSocket_SmallPads","Package_DIP/DIP-24_W15.24mm_Socket","Package_DIP/DIP-24_W15.24mm_Socket_LongPads","Package_DIP/DIP-24_W16.51mm_SMDSocket_LongPads","Package_DIP/DIP-24_W7.62mm","Package_DIP/DIP-24_W7.62mm_LongPads","Package_DIP/DIP-24_W7.62mm_SMDSocket_SmallPads","Package_DIP/DIP-24_W7.62mm_Socket","Package_DIP/DIP-24_W7.62mm_Socket_LongPads","Package_DIP/DIP-24_W8.89mm_SMDSocket_LongPads","Package_DIP/DIP-26_W15.24mm","Package_DIP/DIP-26_W15.24mm_LongPads","Package_DIP/DIP-26_W15.24mm_SMDSocket_SmallPads","Package_DIP/DIP-26_W15.24mm_Socket","Package_DIP/DIP-26_W15.24mm_Socket_LongPads","Package_DIP/DIP-26_W16.51mm_SMDSocket_LongPads","Package_DIP/DIP-28_W15.24mm","Package_DIP/DIP-28_W15.24mm_LongPads","Package_DIP/DIP-28_W15.24mm_SMDSocket_SmallPads","Package_DIP/DIP-28_W15.24mm_Socket","Package_DIP/DIP-28_W15.24mm_Socket_LongPads","Package_DIP/DIP-28_W16.51mm_SMDSocket_LongPads","Package_DIP/DIP-28_W7.62mm","Package_DIP/DIP-28_W7.62mm_LongPads","Package_DIP/DIP-28_W7.62mm_SMDSocket_SmallPads","Package_DIP/DIP-28_W7.62mm_Socket","Package_DIP/DIP-28_W7.62mm_Socket_LongPads","Package_DIP/DIP-28_W8.89mm_SMDSocket_LongPads","Package_DIP/DIP-32_W15.24mm","Package_DIP/DIP-32_W15.24mm_LongPads","Package_DIP/DIP-32_W15.24mm_SMDSocket_SmallPads","Package_DIP/DIP-32_W15.24mm_Socket","Package_DIP/DIP-32_W15.24mm_Socket_LongPads","Package_DIP/DIP-32_W16.51mm_SMDSocket_LongPads","Package_DIP/DIP-32_W7.62mm","Package_DIP/DIP-40_W15.24mm","Package_DIP/DIP-40_W15.24mm_LongPads","Package_DIP/DIP-40_W15.24mm_SMDSocket_SmallPads","Package_DIP/DIP-40_W15.24mm_Socket","Package_DIP/DIP-40_W15.24mm_Socket_LongPads","Package_DIP/DIP-40_W16.51mm_SMDSocket_LongPads","Package_DIP/DIP-40_W25.4mm","Package_DIP/DIP-40_W25.4mm_LongPads","Package_DIP/DIP-40_W25.4mm_SMDSocket_SmallPads","Package_DIP/DIP-40_W25.4mm_Socket","Package_DIP/DIP-40_W25.4mm_Socket_LongPads","Package_DIP/DIP-40_W26.67mm_SMDSocket_LongPads","Package_DIP/DIP-42_W15.24mm","Package_DIP/DIP-42_W15.24mm_LongPads","Package_DIP/DIP-42_W15.24mm_SMDSocket_SmallPads","Package_DIP/DIP-42_W15.24mm_Socket","Package_DIP/DIP-42_W15.24mm_Socket_LongPads","Package_DIP/DIP-42_W16.51mm_SMDSocket_LongPads","Package_DIP/DIP-48_W15.24mm","Package_DIP/DIP-48_W15.24mm_LongPads","Package_DIP/DIP-48_W15.24mm_SMDSocket_SmallPads","Package_DIP/DIP-48_W15.24mm_Socket","Package_DIP/DIP-48_W15.24mm_Socket_LongPads","Package_DIP/DIP-48_W16.51mm_SMDSocket_LongPads","Package_DIP/DIP-4_W10.16mm","Package_DIP/DIP-4_W10.16mm_LongPads","Package_DIP/DIP-4_W7.62mm","Package_DIP/DIP-4_W7.62mm_LongPads","Package_DIP/DIP-4_W7.62mm_SMDSocket_SmallPads","Package_DIP/DIP-4_W7.62mm_Socket","Package_DIP/DIP-4_W7.62mm_Socket_LongPads","Package_DIP/DIP-4_W8.89mm_SMDSocket_LongPads","Package_DIP/DIP-5-6_W10.16mm","Package_DIP/DIP-5-6_W10.16mm_LongPads","Package_DIP/DIP-5-6_W7.62mm","Package_DIP/DIP-5-6_W7.62mm_LongPads","Package_DIP/DIP-5-6_W7.62mm_SMDSocket_SmallPads","Package_DIP/DIP-5-6_W7.62mm_Socket","Package_DIP/DIP-5-6_W7.62mm_Socket_LongPads","Package_DIP/DIP-5-6_W8.89mm_SMDSocket_LongPads","Package_DIP/DIP-64_W15.24mm","Package_DIP/DIP-64_W15.24mm_LongPads","Package_DIP/DIP-64_W15.24mm_SMDSocket_SmallPads","Package_DIP/DIP-64_W15.24mm_Socket","Package_DIP/DIP-64_W15.24mm_Socket_LongPads","Package_DIP/DIP-64_W16.51mm_SMDSocket_LongPads","Package_DIP/DIP-64_W22.86mm","Package_DIP/DIP-64_W22.86mm_LongPads","Package_DIP/DIP-64_W22.86mm_SMDSocket_SmallPads","Package_DIP/DIP-64_W22.86mm_Socket","Package_DIP/DIP-64_W22.86mm_Socket_LongPads","Package_DIP/DIP-64_W24.13mm_SMDSocket_LongPads","Package_DIP/DIP-64_W25.4mm","Package_DIP/DIP-64_W25.4mm_LongPads","Package_DIP/DIP-64_W25.4mm_SMDSocket_SmallPads","Package_DIP/DIP-64_W25.4mm_Socket","Package_DIP/DIP-64_W25.4mm_Socket_LongPads","Package_DIP/DIP-64_W26.67mm_SMDSocket_LongPads","Package_DIP/DIP-6_W10.16mm","Package_DIP/DIP-6_W10.16mm_LongPads","Package_DIP/DIP-6_W7.62mm","Package_DIP/DIP-6_W7.62mm_LongPads","Package_DIP/DIP-6_W7.62mm_SMDSocket_SmallPads","Package_DIP/DIP-6_W7.62mm_Socket","Package_DIP/DIP-6_W7.62mm_Socket_LongPads","Package_DIP/DIP-6_W8.89mm_SMDSocket_LongPads","Package_DIP/DIP-8-16_W7.62mm","Package_DIP/DIP-8-16_W7.62mm_Socket","Package_DIP/DIP-8-16_W7.62mm_Socket_LongPads","Package_DIP/DIP-8-N6_W7.62mm","Package_DIP/DIP-8-N7_W7.62mm","Package_DIP/DIP-8_W10.16mm","Package_DIP/DIP-8_W10.16mm_LongPads","Package_DIP/DIP-8_W7.62mm","Package_DIP/DIP-8_W7.62mm_LongPads","Package_DIP/DIP-8_W7.62mm_SMDSocket_SmallPads","Package_DIP/DIP-8_W7.62mm_Socket","Package_DIP/DIP-8_W7.62mm_Socket_LongPads","Package_DIP/DIP-8_W8.89mm_SMDSocket_LongPads","Package_DIP/Fairchild_LSOP-8","Package_DIP/IXYS_Flatpak-8_6.3x9.7mm_P2.54mm","Package_DIP/IXYS_SMD-8_6.3x9.7mm_P2.54mm","Package_DIP/PowerIntegrations_PDIP-8B","Package_DIP/PowerIntegrations_PDIP-8C","Package_DIP/PowerIntegrations_SDIP-10C","Package_DIP/PowerIntegrations_SMD-8","Package_DIP/PowerIntegrations_SMD-8B","Package_DIP/PowerIntegrations_SMD-8C","Package_DIP/PowerIntegrations_eDIP-12B","Package_DIP/SMDIP-10_W11.48mm","Package_DIP/SMDIP-10_W7.62mm","Package_DIP/SMDIP-10_W9.53mm","Package_DIP/SMDIP-10_W9.53mm_Clearance8mm","Package_DIP/SMDIP-12_W11.48mm","Package_DIP/SMDIP-12_W7.62mm","Package_DIP/SMDIP-12_W9.53mm","Package_DIP/SMDIP-12_W9.53mm_Clearance8mm","Package_DIP/SMDIP-14_W11.48mm","Package_DIP/SMDIP-14_W7.62mm","Package_DIP/SMDIP-14_W9.53mm","Package_DIP/SMDIP-14_W9.53mm_Clearance8mm","Package_DIP/SMDIP-16_W11.48mm","Package_DIP/SMDIP-16_W7.62mm","Package_DIP/SMDIP-16_W9.53mm","Package_DIP/SMDIP-16_W9.53mm_Clearance8mm","Package_DIP/SMDIP-18_W11.48mm","Package_DIP/SMDIP-18_W7.62mm","Package_DIP/SMDIP-18_W9.53mm","Package_DIP/SMDIP-18_W9.53mm_Clearance8mm","Package_DIP/SMDIP-20_W11.48mm","Package_DIP/SMDIP-20_W7.62mm","Package_DIP/SMDIP-20_W9.53mm","Package_DIP/SMDIP-20_W9.53mm_Clearance8mm","Package_DIP/SMDIP-22_W11.48mm","Package_DIP/SMDIP-22_W7.62mm","Package_DIP/SMDIP-22_W9.53mm","Package_DIP/SMDIP-22_W9.53mm_Clearance8mm","Package_DIP/SMDIP-24_W11.48mm","Package_DIP/SMDIP-24_W15.24mm","Package_DIP/SMDIP-24_W7.62mm","Package_DIP/SMDIP-24_W9.53mm","Package_DIP/SMDIP-28_W15.24mm","Package_DIP/SMDIP-32_W11.48mm","Package_DIP/SMDIP-32_W15.24mm","Package_DIP/SMDIP-32_W7.62mm","Package_DIP/SMDIP-32_W9.53mm","Package_DIP/SMDIP-40_W15.24mm","Package_DIP/SMDIP-40_W25.24mm","Package_DIP/SMDIP-42_W15.24mm","Package_DIP/SMDIP-48_W15.24mm","Package_DIP/SMDIP-4_W11.48mm","Package_DIP/SMDIP-4_W7.62mm","Package_DIP/SMDIP-4_W9.53mm","Package_DIP/SMDIP-4_W9.53mm_Clearance8mm","Package_DIP/SMDIP-64_W15.24mm","Package_DIP/SMDIP-6_W11.48mm","Package_DIP/SMDIP-6_W7.62mm","Package_DIP/SMDIP-6_W9.53mm","Package_DIP/SMDIP-6_W9.53mm_Clearance8mm","Package_DIP/SMDIP-8_W11.48mm","Package_DIP/SMDIP-8_W7.62mm","Package_DIP/SMDIP-8_W9.53mm","Package_DIP/SMDIP-8_W9.53mm_Clearance8mm","Package_DIP/Toshiba_11-7A9","Package_DIP/Vishay_HVM-DIP-3_W7.62mm","Package_DirectFET/DirectFET_L4","Package_DirectFET/DirectFET_L6","Package_DirectFET/DirectFET_L8","Package_DirectFET/DirectFET_LA","Package_DirectFET/DirectFET_M2","Package_DirectFET/DirectFET_M4","Package_DirectFET/DirectFET_MA","Package_DirectFET/DirectFET_MB","Package_DirectFET/DirectFET_MC","Package_DirectFET/DirectFET_MD","Package_DirectFET/DirectFET_ME","Package_DirectFET/DirectFET_MF","Package_DirectFET/DirectFET_MN","Package_DirectFET/DirectFET_MP","Package_DirectFET/DirectFET_MQ","Package_DirectFET/DirectFET_MT","Package_DirectFET/DirectFET_MU","Package_DirectFET/DirectFET_MX","Package_DirectFET/DirectFET_MZ","Package_DirectFET/DirectFET_S1","Package_DirectFET/DirectFET_S2","Package_DirectFET/DirectFET_S3C","Package_DirectFET/DirectFET_SA","Package_DirectFET/DirectFET_SB","Package_DirectFET/DirectFET_SC","Package_DirectFET/DirectFET_SH","Package_DirectFET/DirectFET_SJ","Package_DirectFET/DirectFET_SQ","Package_DirectFET/DirectFET_ST","Package_LCC/Analog_LCC-8_5x5mm_P1.27mm","Package_LCC/MO047AD_PLCC-52_19.1x19.1mm_P1.27mm","Package_LCC/PLCC-20","Package_LCC/PLCC-20_9.0x9.0mm_P1.27mm","Package_LCC/PLCC-20_SMD-Socket","Package_LCC/PLCC-20_THT-Socket","Package_LCC/PLCC-28","Package_LCC/PLCC-28_SMD-Socket","Package_LCC/PLCC-28_THT-Socket","Package_LCC/PLCC-32_11.4x14.0mm_P1.27mm","Package_LCC/PLCC-32_THT-Socket","Package_LCC/PLCC-44","Package_LCC/PLCC-44_16.6x16.6mm_P1.27mm","Package_LCC/PLCC-44_SMD-Socket","Package_LCC/PLCC-44_THT-Socket","Package_LCC/PLCC-52","Package_LCC/PLCC-52_SMD-Socket","Package_LCC/PLCC-52_THT-Socket","Package_LCC/PLCC-68","Package_LCC/PLCC-68_24.2x24.2mm_P1.27mm","Package_LCC/PLCC-68_SMD-Socket","Package_LCC/PLCC-68_THT-Socket","Package_LCC/PLCC-84","Package_LCC/PLCC-84_29.3x29.3mm_P1.27mm","Package_LCC/PLCC-84_SMD-Socket","Package_LCC/PLCC-84_THT-Socket","Package_LGA/AMS_LGA-10-1EP_2.7x4mm_P0.6mm","Package_LGA/AMS_LGA-20_4.7x4.5mm_P0.65mm","Package_LGA/AMS_OLGA-8_2x3.1mm_P0.8mm","Package_LGA/Bosch_LGA-14_3x2.5mm_P0.5mm","Package_LGA/Bosch_LGA-16_4.5x3mm_P0.5mm_LayoutBorder7x1y_ClockwisePinNumbering","Package_LGA/Bosch_LGA-8_2.5x2.5mm_P0.65mm_ClockwisePinNumbering","Package_LGA/Bosch_LGA-8_2x2.5mm_P0.65mm_ClockwisePinNumbering","Package_LGA/Bosch_LGA-8_3x3mm_P0.8mm_ClockwisePinNumbering","Package_LGA/Infineon_PG-TSNP-6-10_0.7x1.1mm_0.7x1.1mm_P0.4mm","Package_LGA/Kionix_LGA-12_2x2mm_P0.5mm_LayoutBorder2x4y","Package_LGA/LGA-12_2x2mm_P0.5mm","Package_LGA/LGA-14_2x2mm_P0.35mm_LayoutBorder3x4y","Package_LGA/LGA-14_3x2.5mm_P0.5mm_LayoutBorder3x4y","Package_LGA/LGA-14_3x5mm_P0.8mm_LayoutBorder1x6y","Package_LGA/LGA-16_3x3mm_P0.5mm","Package_LGA/LGA-16_3x3mm_P0.5mm_LayoutBorder3x5y","Package_LGA/LGA-16_4x4mm_P0.65mm_LayoutBorder4x4y","Package_LGA/LGA-24L_3x3.5mm_P0.43mm","Package_LGA/LGA-28_5.2x3.8mm_P0.5mm","Package_LGA/LGA-8_3x5mm_P1.25mm","Package_LGA/LGA-8_8x6.2mm_P1.27mm","Package_LGA/LGA-8_8x6mm_P1.27mm","Package_LGA/Linear_LGA-133_15.0x15.0mm_Layout12x12_P1.27mm","Package_LGA/MPS_LGA-18-10EP_12x12mm_P3.3mm","Package_LGA/NXP_LGA-8_3x5mm_P1.25mm_H1.1mm","Package_LGA/NXP_LGA-8_3x5mm_P1.25mm_H1.2mm","Package_LGA/NXP_USON-8_1x1.35mm_P0.35mm","Package_LGA/Nordic_nRF9151-LAxx_LGA-80-33EP_12.1x11.1mm_P0.5mm","Package_LGA/Nordic_nRF9160-SIxx_LGA-102-59EP_16.0x10.5mm_P0.5mm","Package_LGA/Rohm_MLGA010V020A_LGA-10_2x2mm_P0.45mm_LayoutBorder2x3y","Package_LGA/ST_CCLGA-7L_2.8x2.8mm_P1.15mm_H1.95mm","Package_LGA/ST_HLGA-10_2.5x2.5mm_P0.6mm_LayoutBorder3x2y","Package_LGA/ST_HLGA-10_2x2mm_P0.5mm_LayoutBorder3x2y","Package_LGA/Texas_SIL0008C_MicroSiP-8-1EP_2.8x3mm_P0.65mm_EP1.1x1.9mm","Package_LGA/Texas_SIL0008C_MicroSiP-8-1EP_2.8x3mm_P0.65mm_EP1.1x1.9mm_ThermalVias","Package_LGA/Texas_SIL0008D_MicroSiP-8-1EP_2.8x3mm_P0.65mm_EP1.1x1.9mm","Package_LGA/Texas_SIL0008D_MicroSiP-8-1EP_2.8x3mm_P0.65mm_EP1.1x1.9mm_ThermalVias","Package_LGA/Texas_SIL0010A_MicroSiP-10-1EP_3.8x3mm_P0.6mm_EP0.7x2.9mm","Package_LGA/Texas_SIL0010A_MicroSiP-10-1EP_3.8x3mm_P0.6mm_EP0.7x2.9mm_ThermalVias","Package_LGA/VLGA-4_2x2.5mm_P1.65mm","Package_LGA/ublox_LGA-53_4.5x4.5mm_Layout9x9_P0.5mm","Package_QFP/EQFP-144-1EP_20x20mm_P0.5mm_EP4x4mm","Package_QFP/EQFP-144-1EP_20x20mm_P0.5mm_EP4x4mm_ThermalVias","Package_QFP/EQFP-144-1EP_20x20mm_P0.5mm_EP5x5mm","Package_QFP/EQFP-144-1EP_20x20mm_P0.5mm_EP5x5mm_ThermalVias","Package_QFP/EQFP-144-1EP_20x20mm_P0.5mm_EP6.61x5.615mm","Package_QFP/EQFP-144-1EP_20x20mm_P0.5mm_EP6.61x5.615mm_ThermalVias","Package_QFP/EQFP-144-1EP_20x20mm_P0.5mm_EP7.2x6.35mm","Package_QFP/EQFP-144-1EP_20x20mm_P0.5mm_EP7.2x6.35mm_ThermalVias","Package_QFP/EQFP-144-1EP_20x20mm_P0.5mm_EP8.93x8.7mm","Package_QFP/EQFP-144-1EP_20x20mm_P0.5mm_EP8.93x8.7mm_ThermalVias","Package_QFP/Hitachi_FP80B_PQFP-80_14x20mm_P0.8mm","Package_QFP/LQFP-100-1EP_14x14mm_P0.5mm_EP6.9x6.9mm","Package_QFP/LQFP-100-1EP_14x14mm_P0.5mm_EP6.9x6.9mm_ThermalVias","Package_QFP/LQFP-100_14x14mm_P0.5mm","Package_QFP/LQFP-128_14x14mm_P0.4mm","Package_QFP/LQFP-128_14x20mm_P0.5mm","Package_QFP/LQFP-144-1EP_20x20mm_P0.5mm_EP6.5x6.5mm","Package_QFP/LQFP-144-1EP_20x20mm_P0.5mm_EP6.5x6.5mm_ThermalVias","Package_QFP/LQFP-144_20x20mm_P0.5mm","Package_QFP/LQFP-160_24x24mm_P0.5mm","Package_QFP/LQFP-176-1EP_24x24mm_P0.5mm_EP6.6x6.6mm","Package_QFP/LQFP-176-1EP_24x24mm_P0.5mm_EP6.6x6.6mm_ThermalVias","Package_QFP/LQFP-176_20x20mm_P0.4mm","Package_QFP/LQFP-176_24x24mm_P0.5mm","Package_QFP/LQFP-208_28x28mm_P0.5mm","Package_QFP/LQFP-216_24x24mm_P0.4mm","Package_QFP/LQFP-32_5x5mm_P0.5mm","Package_QFP/LQFP-32_7x7mm_P0.8mm","Package_QFP/LQFP-36_7x7mm_P0.65mm","Package_QFP/LQFP-44_10x10mm_P0.8mm","Package_QFP/LQFP-48-1EP_7x7mm_P0.5mm_EP3.6x3.6mm","Package_QFP/LQFP-48-1EP_7x7mm_P0.5mm_EP3.6x3.6mm_ThermalVias","Package_QFP/LQFP-48_7x7mm_P0.5mm","Package_QFP/LQFP-52-1EP_10x10mm_P0.65mm_EP4.8x4.8mm","Package_QFP/LQFP-52-1EP_10x10mm_P0.65mm_EP4.8x4.8mm_ThermalVias","Package_QFP/LQFP-52_10x10mm_P0.65mm","Package_QFP/LQFP-52_14x14mm_P1mm","Package_QFP/LQFP-64-1EP_10x10mm_P0.5mm_EP5x5mm","Package_QFP/LQFP-64-1EP_10x10mm_P0.5mm_EP5x5mm_ThermalVias","Package_QFP/LQFP-64-1EP_10x10mm_P0.5mm_EP6.5x6.5mm","Package_QFP/LQFP-64-1EP_10x10mm_P0.5mm_EP6.5x6.5mm_ThermalVias","Package_QFP/LQFP-64_10x10mm_P0.5mm","Package_QFP/LQFP-64_14x14mm_P0.8mm","Package_QFP/LQFP-64_7x7mm_P0.4mm","Package_QFP/LQFP-80_10x10mm_P0.4mm","Package_QFP/LQFP-80_12x12mm_P0.5mm","Package_QFP/LQFP-80_14x14mm_P0.65mm","Package_QFP/MO112AC1_PQFP-52_10x10mm_P0.65mm","Package_QFP/Microchip_PQFP-44_10x10mm_P0.8mm","Package_QFP/PQFP-100_14x20mm_P0.65mm","Package_QFP/PQFP-112_20x20mm_P0.65mm","Package_QFP/PQFP-128_28x28mm_P0.8mm","Package_QFP/PQFP-132_24x24mm_P0.635mm","Package_QFP/PQFP-132_24x24mm_P0.635mm_i386","Package_QFP/PQFP-144_28x28mm_P0.65mm","Package_QFP/PQFP-160_28x28mm_P0.65mm","Package_QFP/PQFP-168_28x28mm_P0.65mm","Package_QFP/PQFP-208_28x28mm_P0.5mm","Package_QFP/PQFP-240_32.1x32.1mm_P0.5mm","Package_QFP/PQFP-256_28x28mm_P0.4mm","Package_QFP/PQFP-44_10x10mm_P0.8mm","Package_QFP/PQFP-64_14x14mm_P0.8mm","Package_QFP/PQFP-80_14x14mm_P0.65mm","Package_QFP/PQFP-80_14x20mm_P0.8mm","Package_QFP/TQFP-100-1EP_14x14mm_P0.5mm_EP5x5mm","Package_QFP/TQFP-100-1EP_14x14mm_P0.5mm_EP5x5mm_ThermalVias","Package_QFP/TQFP-100_12x12mm_P0.4mm","Package_QFP/TQFP-100_14x14mm_P0.5mm","Package_QFP/TQFP-120_14x14mm_P0.4mm","Package_QFP/TQFP-128_14x14mm_P0.4mm","Package_QFP/TQFP-144_16x16mm_P0.4mm","Package_QFP/TQFP-144_20x20mm_P0.5mm","Package_QFP/TQFP-176_20x20mm_P0.4mm","Package_QFP/TQFP-176_24x24mm_P0.5mm","Package_QFP/TQFP-32_5x5mm_P0.5mm","Package_QFP/TQFP-32_7x7mm_P0.8mm","Package_QFP/TQFP-44-1EP_10x10mm_P0.8mm_EP4.5x4.5mm","Package_QFP/TQFP-44-1EP_10x10mm_P0.8mm_EP4.5x4.5mm_ThermalVias","Package_QFP/TQFP-44_10x10mm_P0.8mm","Package_QFP/TQFP-48-1EP_7x7mm_P0.5mm_EP3.5x3.5mm","Package_QFP/TQFP-48-1EP_7x7mm_P0.5mm_EP3.5x3.5mm_ThermalVias","Package_QFP/TQFP-48-1EP_7x7mm_P0.5mm_EP4.11x4.11mm","Package_QFP/TQFP-48-1EP_7x7mm_P0.5mm_EP5x5mm","Package_QFP/TQFP-48-1EP_7x7mm_P0.5mm_EP5x5mm_ThermalVias","Package_QFP/TQFP-48_7x7mm_P0.5mm","Package_QFP/TQFP-52-1EP_10x10mm_P0.65mm_EP6.5x6.5mm","Package_QFP/TQFP-52-1EP_10x10mm_P0.65mm_EP6.5x6.5mm_ThermalVias","Package_QFP/TQFP-64-1EP_10x10mm_P0.5mm_EP5.305x5.305mm","Package_QFP/TQFP-64-1EP_10x10mm_P0.5mm_EP5.305x5.305mm_ThermalVias","Package_QFP/TQFP-64_10x10mm_P0.5mm","Package_QFP/TQFP-64_14x14mm_P0.8mm","Package_QFP/TQFP-64_7x7mm_P0.4mm","Package_QFP/TQFP-80-1EP_14x14mm_P0.65mm_EP9.5x9.5mm","Package_QFP/TQFP-80-1EP_14x14mm_P0.65mm_EP9.5x9.5mm_ThermalVias","Package_QFP/TQFP-80_12x12mm_P0.5mm","Package_QFP/TQFP-80_14x14mm_P0.65mm","Package_QFP/Texas_PHP0048E_HTQFP-48-1EP_7x7mm_P0.5mm_EP6.5x6.5mm_Mask3.62x3.62mm","Package_QFP/Texas_PHP0048E_HTQFP-48-1EP_7x7mm_P0.5mm_EP6.5x6.5mm_Mask3.62x3.62mm_ThermalVias","Package_QFP/Texas_TQFP-64-1EP_10x10mm_P0.5mm_EP8x8mm_Mask4.44x4.44mm","Package_QFP/Texas_TQFP-64-1EP_10x10mm_P0.5mm_EP8x8mm_Mask4.44x4.44mm_ThermalVias","Package_QFP/Texas_TQFP-64-1EP_10x10mm_P0.5mm_EP8x8mm_Mask5x5mm","Package_QFP/Texas_TQFP-64-1EP_10x10mm_P0.5mm_EP8x8mm_Mask5x5mm_ThermalVias","Package_SIP/PowerIntegrations_eSIP-7C","Package_SIP/PowerIntegrations_eSIP-7F","Package_SIP/SIP-8_19x3mm_P2.54mm","Package_SIP/SIP-9_21.54x3mm_P2.54mm","Package_SIP/SIP-9_22.3x3mm_P2.54mm","Package_SIP/SIP3_11.6x8.5mm","Package_SIP/SIP4_Sharp-SSR_P7.62mm_Angled","Package_SIP/SIP4_Sharp-SSR_P7.62mm_Angled_NoHole","Package_SIP/SIP4_Sharp-SSR_P7.62mm_Straight","Package_SIP/SIP9_Housing","Package_SIP/SIP9_Housing_BigPads","Package_SIP/SLA704XM","Package_SIP/STK672-040-E","Package_SIP/STK672-080-E","Package_SIP/Sanyo_STK4xx-15_59.2x8.0mm_P2.54mm","Package_SIP/Sanyo_STK4xx-15_78.0x8.0mm_P2.54mm","Package_SO/Analog_MSOP-12-16-1EP_3x4.039mm_P0.5mm_EP1.651x2.845mm","Package_SO/Analog_MSOP-12-16-1EP_3x4.039mm_P0.5mm_EP1.651x2.845mm_ThermalVias","Package_SO/Analog_MSOP-12-16_3x4.039mm_P0.5mm","Package_SO/Diodes_PSOP-8","Package_SO/Diodes_SO-8EP","Package_SO/ETSSOP-20-1EP_4.4x6.5mm_P0.65mm_EP3x4.2mm","Package_SO/HSOP-20-1EP_11.0x15.9mm_P1.27mm_SlugDown","Package_SO/HSOP-20-1EP_11.0x15.9mm_P1.27mm_SlugDown_ThermalVias","Package_SO/HSOP-20-1EP_11.0x15.9mm_P1.27mm_SlugUp","Package_SO/HSOP-32-1EP_7.5x11mm_P0.65mm_EP4.7x4.7mm","Package_SO/HSOP-36-1EP_11.0x15.9mm_P0.65mm_SlugDown","Package_SO/HSOP-36-1EP_11.0x15.9mm_P0.65mm_SlugDown_ThermalVias","Package_SO/HSOP-36-1EP_11.0x15.9mm_P0.65mm_SlugUp","Package_SO/HSOP-54-1EP_7.5x17.9mm_P0.65mm_EP4.6x4.6mm","Package_SO/HSOP-8-1EP_3.9x4.9mm_P1.27mm_EP2.3x2.3mm","Package_SO/HSOP-8-1EP_3.9x4.9mm_P1.27mm_EP2.3x2.3mm_ThermalVias","Package_SO/HSOP-8-1EP_3.9x4.9mm_P1.27mm_EP2.41x3.1mm","Package_SO/HSOP-8-1EP_3.9x4.9mm_P1.27mm_EP2.41x3.1mm_ThermalVias","Package_SO/HTSOP-8-1EP_3.9x4.9mm_P1.27mm_EP2.4x3.2mm","Package_SO/HTSOP-8-1EP_3.9x4.9mm_P1.27mm_EP2.4x3.2mm_ThermalVias","Package_SO/HTSSOP-16-1EP_4.4x5mm_P0.65mm_EP3.4x5mm","Package_SO/HTSSOP-16-1EP_4.4x5mm_P0.65mm_EP3.4x5mm_Mask2.46x2.31mm","Package_SO/HTSSOP-16-1EP_4.4x5mm_P0.65mm_EP3.4x5mm_Mask2.46x2.31mm_ThermalVias","Package_SO/HTSSOP-16-1EP_4.4x5mm_P0.65mm_EP3.4x5mm_Mask2.66x2.46mm","Package_SO/HTSSOP-16-1EP_4.4x5mm_P0.65mm_EP3.4x5mm_Mask2.66x2.46mm_ThermalVias","Package_SO/HTSSOP-16-1EP_4.4x5mm_P0.65mm_EP3.4x5mm_Mask3x3mm_ThermalVias","Package_SO/HTSSOP-16-1EP_4.4x5mm_P0.65mm_EP3x3mm","Package_SO/HTSSOP-20-1EP_4.4x6.5mm_P0.65mm_EP2.74x3.86mm","Package_SO/HTSSOP-20-1EP_4.4x6.5mm_P0.65mm_EP2.85x4mm","Package_SO/HTSSOP-20-1EP_4.4x6.5mm_P0.65mm_EP3.4x6.5mm","Package_SO/HTSSOP-20-1EP_4.4x6.5mm_P0.65mm_EP3.4x6.5mm_Mask2.4x3.7mm","Package_SO/HTSSOP-20-1EP_4.4x6.5mm_P0.65mm_EP3.4x6.5mm_Mask2.75x3.43mm","Package_SO/HTSSOP-20-1EP_4.4x6.5mm_P0.65mm_EP3.4x6.5mm_Mask2.75x3.43mm_ThermalVias","Package_SO/HTSSOP-20-1EP_4.4x6.5mm_P0.65mm_EP3.4x6.5mm_Mask2.96x2.96mm","Package_SO/HTSSOP-20-1EP_4.4x6.5mm_P0.65mm_EP3.4x6.5mm_Mask2.96x2.96mm_ThermalVias","Package_SO/HTSSOP-20-1EP_4.4x6.5mm_P0.65mm_EP3.4x6.5mm_ThermalVias","Package_SO/HTSSOP-24-1EP_4.4x7.8mm_P0.65mm_EP3.2x5mm","Package_SO/HTSSOP-24-1EP_4.4x7.8mm_P0.65mm_EP3.4x7.8mm_Mask2.44x3.42mm","Package_SO/HTSSOP-24-1EP_4.4x7.8mm_P0.65mm_EP3.4x7.8mm_Mask2.44x3.42mm_ThermalVias","Package_SO/HTSSOP-24-1EP_4.4x7.8mm_P0.65mm_EP3.4x7.8mm_Mask2.4x2.98mm","Package_SO/HTSSOP-24-1EP_4.4x7.8mm_P0.65mm_EP3.4x7.8mm_Mask2.4x2.98mm_ThermalVias","Package_SO/HTSSOP-24-1EP_4.4x7.8mm_P0.65mm_EP3.4x7.8mm_Mask2.4x4.68mm","Package_SO/HTSSOP-24-1EP_4.4x7.8mm_P0.65mm_EP3.4x7.8mm_Mask2.4x4.68mm_ThermalVias","Package_SO/HTSSOP-28-1EP_4.4x9.7mm_P0.65mm_EP2.75x6.2mm","Package_SO/HTSSOP-28-1EP_4.4x9.7mm_P0.65mm_EP2.75x6.2mm_ThermalVias","Package_SO/HTSSOP-28-1EP_4.4x9.7mm_P0.65mm_EP2.85x5.4mm","Package_SO/HTSSOP-28-1EP_4.4x9.7mm_P0.65mm_EP2.85x5.4mm_ThermalVias","Package_SO/HTSSOP-28-1EP_4.4x9.7mm_P0.65mm_EP3.4x9.5mm","Package_SO/HTSSOP-28-1EP_4.4x9.7mm_P0.65mm_EP3.4x9.5mm_Mask2.4x6.17mm","Package_SO/HTSSOP-28-1EP_4.4x9.7mm_P0.65mm_EP3.4x9.5mm_Mask2.4x6.17mm_ThermalVias","Package_SO/HTSSOP-28-1EP_4.4x9.7mm_P0.65mm_EP3.4x9.5mm_ThermalVias","Package_SO/HTSSOP-32-1EP_6.1x11mm_P0.65mm_EP5.2x11mm_Mask4.11x4.36mm","Package_SO/HTSSOP-32-1EP_6.1x11mm_P0.65mm_EP5.2x11mm_Mask4.11x4.36mm_ThermalVias","Package_SO/HTSSOP-38-1EP_4.4x9.7mm_P0.5mm_EP1.5x3.3mm","Package_SO/HTSSOP-38-1EP_4.4x9.7mm_P0.5mm_EP1.5x3.3mm_ThermalVias","Package_SO/HTSSOP-38-1EP_4.4x9.7mm_P0.5mm_EP2.74x4.75mm","Package_SO/HTSSOP-38-1EP_4.4x9.7mm_P0.5mm_EP2.74x4.75mm_ThermalVias","Package_SO/HTSSOP-38-1EP_4.4x9.7mm_P0.5mm_EP3.05x6.65mm","Package_SO/HTSSOP-38-1EP_4.4x9.7mm_P0.5mm_EP3.05x6.65mm_ThermalVias","Package_SO/HTSSOP-38-1EP_6.1x12.5mm_P0.65mm_EP5.2x12.5mm_Mask3.39x6.35mm","Package_SO/HTSSOP-38-1EP_6.1x12.5mm_P0.65mm_EP5.2x12.5mm_Mask3.39x6.35mm_ThermalVias","Package_SO/HTSSOP-44-1EP_6.1x14mm_P0.635mm_EP5.2x14mm_Mask4.31x8.26mm","Package_SO/HTSSOP-44-1EP_6.1x14mm_P0.635mm_EP5.2x14mm_Mask4.31x8.26mm_ThermalVias","Package_SO/HTSSOP-44_6.1x14mm_P0.635mm_TopEP4.14x7.01mm","Package_SO/HTSSOP-56-1EP_6.1x14mm_P0.5mm_EP3.61x6.35mm","Package_SO/HVSSOP-10-1EP_3x3mm_P0.5mm_EP1.83x1.89mm","Package_SO/HVSSOP-10-1EP_3x3mm_P0.5mm_EP1.83x1.89mm_ThermalVias","Package_SO/HVSSOP-8-1EP_3x3mm_P0.65mm_EP1.57x1.89mm","Package_SO/HVSSOP-8-1EP_3x3mm_P0.65mm_EP1.57x1.89mm_ThermalVias","Package_SO/Infineon_PG-DSO-12-11","Package_SO/Infineon_PG-DSO-12-11_ThermalVias","Package_SO/Infineon_PG-DSO-12-9","Package_SO/Infineon_PG-DSO-12-9_ThermalVias","Package_SO/Infineon_PG-DSO-20-30","Package_SO/Infineon_PG-DSO-20-30_ThermalVias","Package_SO/Infineon_PG-DSO-20-32","Package_SO/Infineon_PG-DSO-20-85","Package_SO/Infineon_PG-DSO-20-85_ThermalVias","Package_SO/Infineon_PG-DSO-20-87","Package_SO/Infineon_PG-DSO-20-U03_7.5x12.8mm","Package_SO/Infineon_PG-DSO-8-24_4x5mm","Package_SO/Infineon_PG-DSO-8-27_3.9x4.9mm_EP2.65x3mm","Package_SO/Infineon_PG-DSO-8-27_3.9x4.9mm_EP2.65x3mm_ThermalVias","Package_SO/Infineon_PG-DSO-8-43","Package_SO/Infineon_PG-DSO-8-59_7.5x6.3mm","Package_SO/Infineon_PG-TSDSO-14-22","Package_SO/Infineon_SOIC-20W_7.6x12.8mm_P1.27mm","Package_SO/JEITA_SOIC-16_3.9x9.9mm_P1.27mm","Package_SO/JEITA_SOIC-8_3.9x4.9mm_P1.27mm","Package_SO/Linear_HTSSOP-31-38-1EP_4.4x9.7mm_P0.5mm_EP2.74x4.75mm","Package_SO/Linear_HTSSOP-31-38-1EP_4.4x9.7mm_P0.5mm_EP2.74x4.75mm_ThermalVias","Package_SO/MSOP-10-1EP_3x3mm_P0.5mm_EP1.68x1.88mm","Package_SO/MSOP-10-1EP_3x3mm_P0.5mm_EP1.68x1.88mm_ThermalVias","Package_SO/MSOP-10-1EP_3x3mm_P0.5mm_EP1.73x1.98mm","Package_SO/MSOP-10-1EP_3x3mm_P0.5mm_EP1.73x1.98mm_ThermalVias","Package_SO/MSOP-10-1EP_3x3mm_P0.5mm_EP2.2x3.1mm_Mask1.83x1.89mm","Package_SO/MSOP-10-1EP_3x3mm_P0.5mm_EP2.2x3.1mm_Mask1.83x1.89mm_ThermalVias","Package_SO/MSOP-10_3x3mm_P0.5mm","Package_SO/MSOP-12-1EP_3x4.039mm_P0.65mm_EP1.651x2.845mm","Package_SO/MSOP-12-1EP_3x4.039mm_P0.65mm_EP1.651x2.845mm_ThermalVias","Package_SO/MSOP-12_3x4.039mm_P0.65mm","Package_SO/MSOP-16-1EP_3x4.039mm_P0.5mm_EP1.651x2.845mm","Package_SO/MSOP-16-1EP_3x4.039mm_P0.5mm_EP1.651x2.845mm_ThermalVias","Package_SO/MSOP-16_3x4.039mm_P0.5mm","Package_SO/MSOP-8-1EP_3x3mm_P0.65mm_EP1.5x1.8mm","Package_SO/MSOP-8-1EP_3x3mm_P0.65mm_EP1.5x1.8mm_ThermalVias","Package_SO/MSOP-8-1EP_3x3mm_P0.65mm_EP1.68x1.88mm","Package_SO/MSOP-8-1EP_3x3mm_P0.65mm_EP1.68x1.88mm_ThermalVias","Package_SO/MSOP-8-1EP_3x3mm_P0.65mm_EP1.73x1.85mm","Package_SO/MSOP-8-1EP_3x3mm_P0.65mm_EP1.73x1.85mm_ThermalVias","Package_SO/MSOP-8-1EP_3x3mm_P0.65mm_EP1.95x2.15mm","Package_SO/MSOP-8-1EP_3x3mm_P0.65mm_EP1.95x2.15mm_ThermalVias","Package_SO/MSOP-8-1EP_3x3mm_P0.65mm_EP2.5x3mm_Mask1.73x2.36mm","Package_SO/MSOP-8-1EP_3x3mm_P0.65mm_EP2.5x3mm_Mask1.73x2.36mm_ThermalVias","Package_SO/MSOP-8_3x3mm_P0.65mm","Package_SO/NXP_HTSSOP-28-1EP_4.4x9.7mm_P0.65mm_EP2.2x3.4mm","Package_SO/NXP_HTSSOP-28-1EP_4.4x9.7mm_P0.65mm_EP2.2x3.4mm_ThermalVias","Package_SO/ONSemi_SO-8FL_488AA","Package_SO/OnSemi_751EP_SOIC-4_3.9x4.725mm_P2.54mm","Package_SO/OnSemi_Micro8","Package_SO/PSOP-44_16.9x27.17mm_P1.27mm","Package_SO/PowerIntegrations_SO-8","Package_SO/PowerIntegrations_SO-8B","Package_SO/PowerIntegrations_SO-8C","Package_SO/PowerIntegrations_eSOP-12B","Package_SO/PowerPAK_SO-8L_Single","Package_SO/PowerPAK_SO-8_Dual","Package_SO/PowerPAK_SO-8_Single","Package_SO/PowerSSO-16-1EP_3.9x4.9mm_P0.5mm_EP2.5x3.61mm","Package_SO/PowerSSO-16-1EP_3.9x4.9mm_P0.5mm_EP2.5x3.61mm_ThermalVias","Package_SO/QSOP-16_3.9x4.9mm_P0.635mm","Package_SO/QSOP-20_3.9x8.7mm_P0.635mm","Package_SO/QSOP-24_3.9x8.7mm_P0.635mm","Package_SO/QSOP-28_3.9x9.9mm_P0.635mm","Package_SO/Renesas_SOP-32_11.4x20.75mm_P1.27mm","Package_SO/SO-14_3.9x8.65mm_P1.27mm","Package_SO/SO-14_5.3x10.2mm_P1.27mm","Package_SO/SO-16_3.9x9.9mm_P1.27mm","Package_SO/SO-16_5.3x10.2mm_P1.27mm","Package_SO/SO-20-1EP_7.52x12.825mm_P1.27mm_EP6.045x12.09mm_Mask3.56x4.47mm","Package_SO/SO-20-1EP_7.52x12.825mm_P1.27mm_EP6.045x12.09mm_Mask3.56x4.47mm_ThermalVias","Package_SO/SO-20_12.8x7.5mm_P1.27mm","Package_SO/SO-20_5.3x12.6mm_P1.27mm","Package_SO/SO-24_5.3x15mm_P1.27mm","Package_SO/SO-4_4.4x2.3mm_P1.27mm","Package_SO/SO-4_4.4x3.6mm_P2.54mm","Package_SO/SO-4_4.4x3.9mm_P2.54mm","Package_SO/SO-4_4.4x4.3mm_P2.54mm","Package_SO/SO-4_7.6x3.6mm_P2.54mm","Package_SO/SO-5-6_4.55x3.7mm_P1.27mm","Package_SO/SO-6L_10x3.84mm_P1.27mm","Package_SO/SO-6_4.4x3.6mm_P1.27mm","Package_SO/SO-8_3.9x4.9mm_P1.27mm","Package_SO/SOIC-10_3.9x4.9mm_P1mm","Package_SO/SOIC-14-16_3.9x9.9mm_P1.27mm","Package_SO/SOIC-14W_7.5x9mm_P1.27mm","Package_SO/SOIC-14_3.9x8.7mm_P1.27mm","Package_SO/SOIC-16W-12_7.5x10.3mm_P1.27mm","Package_SO/SOIC-16W_5.3x10.2mm_P1.27mm","Package_SO/SOIC-16W_7.5x10.3mm_P1.27mm","Package_SO/SOIC-16W_7.5x12.8mm_P1.27mm","Package_SO/SOIC-16_3.9x9.9mm_P1.27mm","Package_SO/SOIC-16_4.55x10.3mm_P1.27mm","Package_SO/SOIC-18W_7.5x11.6mm_P1.27mm","Package_SO/SOIC-20W_7.5x12.8mm_P1.27mm","Package_SO/SOIC-20W_7.5x15.4mm_P1.27mm","Package_SO/SOIC-24W_7.5x15.4mm_P1.27mm","Package_SO/SOIC-28W_7.5x17.9mm_P1.27mm","Package_SO/SOIC-28W_7.5x18.7mm_P1.27mm","Package_SO/SOIC-32_7.518x20.777mm_P1.27mm","Package_SO/SOIC-4_4.55x2.6mm_P1.27mm","Package_SO/SOIC-4_4.55x3.7mm_P2.54mm","Package_SO/SOIC-5-6_4.4x3.6mm_P1.27mm","Package_SO/SOIC-8-1EP_3.9x4.9mm_P1.27mm_EP2.29x3mm","Package_SO/SOIC-8-1EP_3.9x4.9mm_P1.27mm_EP2.29x3mm_ThermalVias","Package_SO/SOIC-8-1EP_3.9x4.9mm_P1.27mm_EP2.41x3.3mm","Package_SO/SOIC-8-1EP_3.9x4.9mm_P1.27mm_EP2.41x3.3mm_ThermalVias","Package_SO/SOIC-8-1EP_3.9x4.9mm_P1.27mm_EP2.41x3.81mm","Package_SO/SOIC-8-1EP_3.9x4.9mm_P1.27mm_EP2.41x3.81mm_ThermalVias","Package_SO/SOIC-8-1EP_3.9x4.9mm_P1.27mm_EP2.514x3.2mm","Package_SO/SOIC-8-1EP_3.9x4.9mm_P1.27mm_EP2.514x3.2mm_ThermalVias","Package_SO/SOIC-8-1EP_3.9x4.9mm_P1.27mm_EP2.62x3.51mm","Package_SO/SOIC-8-1EP_3.9x4.9mm_P1.27mm_EP2.62x3.51mm_ThermalVias","Package_SO/SOIC-8-1EP_3.9x4.9mm_P1.27mm_EP2.71x3.7mm","Package_SO/SOIC-8-1EP_3.9x4.9mm_P1.27mm_EP2.71x3.7mm_ThermalVias","Package_SO/SOIC-8-1EP_3.9x4.9mm_P1.27mm_EP2.95x4.9mm_Mask2.34x2.34mm","Package_SO/SOIC-8-1EP_3.9x4.9mm_P1.27mm_EP2.95x4.9mm_Mask2.34x2.34mm_ThermalVias","Package_SO/SOIC-8-1EP_3.9x4.9mm_P1.27mm_EP2.95x4.9mm_Mask2.71x3.4mm","Package_SO/SOIC-8-1EP_3.9x4.9mm_P1.27mm_EP2.95x4.9mm_Mask2.71x3.4mm_ThermalVias","Package_SO/SOIC-8-N7_3.9x4.9mm_P1.27mm","Package_SO/SOIC-8_3.81x9.347mm_P2.54mm","Package_SO/SOIC-8_3.9x4.9mm_P1.27mm","Package_SO/SOIC-8_5.3x5.3mm_P1.27mm","Package_SO/SOIC-8_5.3x6.2mm_P1.27mm","Package_SO/SOIC-8_7.5x5.85mm_P1.27mm","Package_SO/SOJ-24_7.62x15.875mm_P1.27mm","Package_SO/SOJ-28_10.16x18.415mm_P1.27mm","Package_SO/SOJ-28_7.62x18.415mm_P1.27mm","Package_SO/SOJ-32_10.16x20.955mm_P1.27mm","Package_SO/SOJ-32_7.62x20.955mm_P1.27mm","Package_SO/SOJ-36_10.16x23.495mm_P1.27mm","Package_SO/SOJ-44_10.16x28.575mm_P1.27mm","Package_SO/SOP-16_4.4x10.4mm_P1.27mm","Package_SO/SOP-16_4.55x10.3mm_P1.27mm","Package_SO/SOP-18_7.495x11.515mm_P1.27mm","Package_SO/SOP-18_7x12.5mm_P1.27mm","Package_SO/SOP-20_7.5x12.8mm_P1.27mm","Package_SO/SOP-24_7.5x15.4mm_P1.27mm","Package_SO/SOP-28_8.4x18.16mm_P1.27mm","Package_SO/SOP-32_11.305x20.495mm_P1.27mm","Package_SO/SOP-44_12.6x28.5mm_P1.27mm","Package_SO/SOP-44_13.3x28.2mm_P1.27mm","Package_SO/SOP-4_3.8x4.1mm_P2.54mm","Package_SO/SOP-4_4.4x2.6mm_P1.27mm","Package_SO/SOP-4_7.5x4.1mm_P2.54mm","Package_SO/SOP-8-1EP_4.57x4.57mm_P1.27mm_EP4.57x4.45mm","Package_SO/SOP-8-1EP_4.57x4.57mm_P1.27mm_EP4.57x4.45mm_ThermalVias","Package_SO/SOP-8_3.76x4.96mm_P1.27mm","Package_SO/SOP-8_6.605x9.655mm_P2.54mm","Package_SO/SOP-8_6.62x9.15mm_P2.54mm","Package_SO/SSO-4_6.7x5.1mm_P2.54mm_Clearance8mm","Package_SO/SSO-6_6.8x4.6mm_P1.27mm_Clearance7mm","Package_SO/SSO-6_6.8x4.6mm_P1.27mm_Clearance8mm","Package_SO/SSO-7-8_6.4x9.78mm_P2.54mm","Package_SO/SSO-8-7_6.4x9.7mm_P2.54mm","Package_SO/SSO-8_13.6x6.3mm_P1.27mm_Clearance14.2mm","Package_SO/SSO-8_6.7x9.8mm_P2.54mm_Clearance8mm","Package_SO/SSO-8_6.8x5.9mm_P1.27mm_Clearance7mm","Package_SO/SSO-8_6.8x5.9mm_P1.27mm_Clearance8mm","Package_SO/SSO-8_9.6x6.3mm_P1.27mm_Clearance10.5mm","Package_SO/SSOP-10-1EP_3.9x4.9mm_P1mm_EP2.1x3.3mm","Package_SO/SSOP-10-1EP_3.9x4.9mm_P1mm_EP2.1x3.3mm_ThermalVias","Package_SO/SSOP-10_3.9x4.9mm_P1.00mm","Package_SO/SSOP-14_5.3x6.2mm_P0.65mm","Package_SO/SSOP-16_3.9x4.9mm_P0.635mm","Package_SO/SSOP-16_4.4x5.2mm_P0.65mm","Package_SO/SSOP-16_5.3x6.2mm_P0.65mm","Package_SO/SSOP-18_4.4x6.5mm_P0.65mm","Package_SO/SSOP-20_3.9x8.7mm_P0.635mm","Package_SO/SSOP-20_4.4x6.5mm_P0.65mm","Package_SO/SSOP-20_5.3x7.2mm_P0.65mm","Package_SO/SSOP-24_3.9x8.7mm_P0.635mm","Package_SO/SSOP-24_5.3x8.2mm_P0.65mm","Package_SO/SSOP-28_3.9x9.9mm_P0.635mm","Package_SO/SSOP-28_5.3x10.2mm_P0.65mm","Package_SO/SSOP-40_8.8x17.5mm_P0.8mm","Package_SO/SSOP-44_5.3x12.8mm_P0.5mm","Package_SO/SSOP-48_5.3x12.8mm_P0.5mm","Package_SO/SSOP-48_7.5x15.9mm_P0.635mm","Package_SO/SSOP-4_4.4x2.6mm_P1.27mm","Package_SO/SSOP-56_7.5x18.5mm_P0.635mm","Package_SO/SSOP-8_2.95x2.8mm_P0.65mm","Package_SO/SSOP-8_3.95x5.21x3.27mm_P1.27mm","Package_SO/SSOP-8_3.9x5.05mm_P1.27mm","Package_SO/SSOP-8_5.3x3mm_P0.65mm","Package_SO/STC_SOP-16_3.9x9.9mm_P1.27mm","Package_SO/ST_MultiPowerSO-30","Package_SO/ST_PowerSSO-24_SlugDown","Package_SO/ST_PowerSSO-24_SlugDown_ThermalVias","Package_SO/ST_PowerSSO-24_SlugUp","Package_SO/ST_PowerSSO-36_SlugDown","Package_SO/ST_PowerSSO-36_SlugDown_ThermalVias","Package_SO/ST_PowerSSO-36_SlugUp","Package_SO/TI_SO-PowerPAD-8","Package_SO/TI_SO-PowerPAD-8_ThermalVias","Package_SO/TSOP-5_1.65x3.05mm_P0.95mm","Package_SO/TSOP-6_1.65x3.05mm_P0.95mm","Package_SO/TSOP-I-24_12.4x6mm_P0.5mm","Package_SO/TSOP-I-24_14.4x6mm_P0.5mm","Package_SO/TSOP-I-24_16.4x6mm_P0.5mm","Package_SO/TSOP-I-24_18.4x6mm_P0.5mm","Package_SO/TSOP-I-28_11.8x8mm_P0.55mm","Package_SO/TSOP-I-32_11.8x8mm_P0.5mm","Package_SO/TSOP-I-32_12.4x8mm_P0.5mm","Package_SO/TSOP-I-32_14.4x8mm_P0.5mm","Package_SO/TSOP-I-32_16.4x8mm_P0.5mm","Package_SO/TSOP-I-32_18.4x8mm_P0.5mm","Package_SO/TSOP-I-32_18.4x8mm_P0.5mm_Reverse","Package_SO/TSOP-I-40_12.4x10mm_P0.5mm","Package_SO/TSOP-I-40_14.4x10mm_P0.5mm","Package_SO/TSOP-I-40_16.4x10mm_P0.5mm","Package_SO/TSOP-I-40_18.4x10mm_P0.5mm","Package_SO/TSOP-I-48_12.4x12mm_P0.5mm","Package_SO/TSOP-I-48_14.4x12mm_P0.5mm","Package_SO/TSOP-I-48_16.4x12mm_P0.5mm","Package_SO/TSOP-I-48_18.4x12mm_P0.5mm","Package_SO/TSOP-I-56_14.4x14mm_P0.5mm","Package_SO/TSOP-I-56_16.4x14mm_P0.5mm","Package_SO/TSOP-I-56_18.4x14mm_P0.5mm","Package_SO/TSOP-II-32_21.0x10.2mm_P1.27mm","Package_SO/TSOP-II-40-44_10.16x18.37mm_P0.8mm","Package_SO/TSOP-II-44_10.16x18.41mm_P0.8mm","Package_SO/TSOP-II-54_22.2x10.16mm_P0.8mm","Package_SO/TSSOP-100_6.1x20.8mm_P0.4mm","Package_SO/TSSOP-10_3x3mm_P0.5mm","Package_SO/TSSOP-14-1EP_4.4x5mm_P0.65mm","Package_SO/TSSOP-14_4.4x3.6mm_P0.4mm","Package_SO/TSSOP-14_4.4x5mm_P0.65mm","Package_SO/TSSOP-16-1EP_4.4x5mm_P0.65mm","Package_SO/TSSOP-16-1EP_4.4x5mm_P0.65mm_EP3x3mm","Package_SO/TSSOP-16-1EP_4.4x5mm_P0.65mm_EP3x3mm_ThermalVias","Package_SO/TSSOP-16_4.4x3.6mm_P0.4mm","Package_SO/TSSOP-16_4.4x5mm_P0.65mm","Package_SO/TSSOP-20-1EP_4.4x6.5mm_P0.65mm_EP2.15x3.35mm","Package_SO/TSSOP-20_4.4x5mm_P0.4mm","Package_SO/TSSOP-20_4.4x5mm_P0.5mm","Package_SO/TSSOP-20_4.4x6.5mm_P0.65mm","Package_SO/TSSOP-24_4.4x5mm_P0.4mm","Package_SO/TSSOP-24_4.4x6.5mm_P0.5mm","Package_SO/TSSOP-24_4.4x7.8mm_P0.65mm","Package_SO/TSSOP-24_6.1x7.8mm_P0.65mm","Package_SO/TSSOP-28-1EP_4.4x9.7mm_P0.65mm_EP2.74x4.75mm","Package_SO/TSSOP-28-1EP_4.4x9.7mm_P0.65mm_EP2.74x4.75mm_ThermalVias","Package_SO/TSSOP-28-1EP_4.4x9.7mm_P0.65mm_EP2.85x6.7mm","Package_SO/TSSOP-28-1EP_4.4x9.7mm_P0.65mm_EP3.05x7.56mm","Package_SO/TSSOP-28-1EP_4.4x9.7mm_P0.65mm_EP3.05x7.56mm_ThermalVias","Package_SO/TSSOP-28-1EP_4.4x9.7mm_P0.65mm_EP3.4x9.7mm_Mask3.1x4.05mm","Package_SO/TSSOP-28-1EP_4.4x9.7mm_P0.65mm_EP3.4x9.7mm_Mask3.1x4.05mm_ThermalVias","Package_SO/TSSOP-28_4.4x7.8mm_P0.5mm","Package_SO/TSSOP-28_4.4x9.7mm_P0.65mm","Package_SO/TSSOP-28_6.1x7.8mm_P0.5mm","Package_SO/TSSOP-28_6.1x9.7mm_P0.65mm","Package_SO/TSSOP-28_8x9.7mm_P0.65mm","Package_SO/TSSOP-30_4.4x7.8mm_P0.5mm","Package_SO/TSSOP-30_6.1x9.7mm_P0.65mm","Package_SO/TSSOP-32_4.4x6.5mm_P0.4mm","Package_SO/TSSOP-32_6.1x11mm_P0.65mm","Package_SO/TSSOP-32_8x11mm_P0.65mm","Package_SO/TSSOP-36_4.4x7.8mm_P0.4mm","Package_SO/TSSOP-36_4.4x9.7mm_P0.5mm","Package_SO/TSSOP-36_6.1x12.5mm_P0.65mm","Package_SO/TSSOP-36_6.1x7.8mm_P0.4mm","Package_SO/TSSOP-36_6.1x9.7mm_P0.5mm","Package_SO/TSSOP-36_8x12.5mm_P0.65mm","Package_SO/TSSOP-36_8x9.7mm_P0.5mm","Package_SO/TSSOP-38_4.4x9.7mm_P0.5mm","Package_SO/TSSOP-38_6.1x12.5mm_P0.65mm","Package_SO/TSSOP-40_6.1x11mm_P0.5mm","Package_SO/TSSOP-40_6.1x14mm_P0.65mm","Package_SO/TSSOP-40_8x11mm_P0.5mm","Package_SO/TSSOP-40_8x14mm_P0.65mm","Package_SO/TSSOP-44_4.4x11.2mm_P0.5mm","Package_SO/TSSOP-44_4.4x11mm_P0.5mm","Package_SO/TSSOP-44_6.1x11mm_P0.5mm","Package_SO/TSSOP-48_4.4x9.7mm_P0.4mm","Package_SO/TSSOP-48_6.1x12.5mm_P0.5mm","Package_SO/TSSOP-48_6.1x9.7mm_P0.4mm","Package_SO/TSSOP-48_8x12.5mm_P0.5mm","Package_SO/TSSOP-48_8x9.7mm_P0.4mm","Package_SO/TSSOP-4_4.4x5mm_P4mm","Package_SO/TSSOP-50_4.4x12.5mm_P0.5mm","Package_SO/TSSOP-52_6.1x11mm_P0.4mm","Package_SO/TSSOP-52_8x11mm_P0.4mm","Package_SO/TSSOP-56_4.4x11.3mm_P0.4mm","Package_SO/TSSOP-56_6.1x12.5mm_P0.4mm","Package_SO/TSSOP-56_6.1x14mm_P0.5mm","Package_SO/TSSOP-56_8x12.5mm_P0.4mm","Package_SO/TSSOP-56_8x14mm_P0.5mm","Package_SO/TSSOP-60_8x12.5mm_P0.4mm","Package_SO/TSSOP-64_6.1x14mm_P0.4mm","Package_SO/TSSOP-64_6.1x17mm_P0.5mm","Package_SO/TSSOP-64_8x14mm_P0.4mm","Package_SO/TSSOP-68_8x14mm_P0.4mm","Package_SO/TSSOP-80_6.1x17mm_P0.4mm","Package_SO/TSSOP-8_3x3mm_P0.65mm","Package_SO/TSSOP-8_4.4x3mm_P0.65mm","Package_SO/Texas_DAD0032A_HTSSOP-32_6.1x11mm_P0.65mm_TopEP3.71x3.81mm","Package_SO/Texas_DGN0008B_VSSOP-8-1EP_3x3mm_P0.65mm_EP2x3mm_Mask1.88x1.98mm","Package_SO/Texas_DGN0008B_VSSOP-8-1EP_3x3mm_P0.65mm_EP2x3mm_Mask1.88x1.98mm_ThermalVias","Package_SO/Texas_DGN0008D_VSSOP-8-1EP_3x3mm_P0.65mm_EP2x2.94mm_Mask1.57x1.89mm","Package_SO/Texas_DGN0008D_VSSOP-8-1EP_3x3mm_P0.65mm_EP2x2.94mm_Mask1.57x1.89mm_ThermalVias","Package_SO/Texas_DGN0008G_VSSOP-8-1EP_3x3mm_P0.65mm_EP2x2.94mm_Mask1.846x2.15mm","Package_SO/Texas_DGN0008G_VSSOP-8-1EP_3x3mm_P0.65mm_EP2x2.94mm_Mask1.846x2.15mm_ThermalVias","Package_SO/Texas_DGS0020A_TSSOP-20_3x5.1mm_P0.5mm","Package_SO/Texas_DKD0036A_HSSOP-36_11x15.9mm_P0.65mm_TopEP5.85x12.65mm","Package_SO/Texas_DYY0016A_TSOT-23-16_2x4.2mm_P0.5mm","Package_SO/Texas_HSOP-8-1EP_3.9x4.9mm_P1.27mm","Package_SO/Texas_HSOP-8-1EP_3.9x4.9mm_P1.27mm_ThermalVias","Package_SO/Texas_HTSOP-8-1EP_3.9x4.9mm_P1.27mm_EP2.95x4.9mm_Mask2.4x3.1mm_ThermalVias","Package_SO/Texas_HTSSOP-14-1EP_4.4x5mm_P0.65mm_EP3.4x5mm_Mask3.155x3.255mm","Package_SO/Texas_HTSSOP-14-1EP_4.4x5mm_P0.65mm_EP3.4x5mm_Mask3.155x3.255mm_ThermalVias","Package_SO/Texas_PW0020A_TSSOP-20_4.4x6.5mm_P0.65mm","Package_SO/Texas_PWP0020A","Package_SO/Texas_PWP0028V_TSSOP-28-1EP_4.4x9.7mm_P0.65mm_EP3.4x9.7mm_Mask2.94x5.62mm","Package_SO/Texas_PWP0028V_TSSOP-28-1EP_4.4x9.7mm_P0.65mm_EP3.4x9.7mm_Mask2.94x5.62mm_ThermalVias","Package_SO/Texas_R-PDSO-G8_EP2.95x4.9mm_Mask2.4x3.1mm","Package_SO/Texas_R-PDSO-G8_EP2.95x4.9mm_Mask2.4x3.1mm_ThermalVias","Package_SO/Texas_S-PDSO-G8_3x3mm_P0.65mm","Package_SO/Toshiba_SOIC-4-6_4.4x3.6mm_P1.27mm","Package_SO/Toshiba_SOIC-5-6_4.4x3.6mm_P1.27mm","Package_SO/VSO-40_7.6x15.4mm_P0.762mm","Package_SO/VSO-56_11.1x21.5mm_P0.75mm","Package_SO/VSSOP-8_2.3x2mm_P0.5mm","Package_SO/VSSOP-8_3x3mm_P0.65mm","Package_SO/Vishay_PowerPAK_1212-8_Dual","Package_SO/Vishay_PowerPAK_1212-8_Single","Package_SO/Zetex_SM8","Package_SON/Diodes_PowerDI3333-8","Package_SON/Diodes_PowerDI3333-8_UXC_3.3x3.3mm_P0.65mm","Package_SON/EPSON_CE-USON-10_USON-10_3.2x2.5mm_P0.7mm","Package_SON/Fairchild_DualPower33-6_3x3mm","Package_SON/Fairchild_MicroPak-6_1.0x1.45mm_P0.5mm","Package_SON/Fairchild_MicroPak2-6_1.0x1.0mm_P0.35mm","Package_SON/HUSON-3-1EP_2x2mm_P1.3mm_EP1.1x1.6mm","Package_SON/HVSON-8-1EP_3x3mm_P0.65mm_EP1.6x2.4mm","Package_SON/HVSON-8-1EP_4x4mm_P0.8mm_EP2.2x3.1mm","Package_SON/Infineon_PG-LSON-8-1","Package_SON/Infineon_PG-TDSON-8_6.15x5.15mm","Package_SON/Infineon_PG-TISON-8-2","Package_SON/Infineon_PG-TISON-8-3","Package_SON/Infineon_PG-TISON-8-4","Package_SON/Infineon_PG-TISON-8-5","Package_SON/MPS_USON-6_1.2x1.6mm_P0.5mm","Package_SON/MPS_VSON-6_1x1.5mm_P0.5mm","Package_SON/MicroCrystal_C7_SON-8_1.5x3.2mm_P0.9mm","Package_SON/Microchip_USON-10-1EP_3x3mm_P0.5mm_EP1.8x2.5mm","Package_SON/Microchip_USON-10-1EP_3x3mm_P0.5mm_EP1.8x2.5mm_ThermalVias","Package_SON/NXP_XSON-16","Package_SON/Nexperia_HUSON-12_USON-12-1EP_1.35x2.5mm_P0.4mm_EP0.4x2mm","Package_SON/Nexperia_HUSON-16_USON-16-1EP_1.35x3.3mm_P0.4mm_EP0.4x2.8mm","Package_SON/Nexperia_HUSON-8_USON-8-1EP_1.35x1.7mm_P0.4mm_EP0.4x1.2mm","Package_SON/ROHM_VML0806","Package_SON/RTC_SMD_MicroCrystal_C3_2.5x3.7mm","Package_SON/SON-8-1EP_3x2mm_P0.5mm_EP1.4x1.6mm","Package_SON/ST_PowerFLAT-6L_5x6mm_P1.27mm","Package_SON/ST_PowerFLAT_HV-5_8x8mm","Package_SON/ST_PowerFLAT_HV-8_5x6mm","Package_SON/Texas_DPY0002A_0.6x1mm_P0.65mm","Package_SON/Texas_DQK","Package_SON/Texas_DQX002A","Package_SON/Texas_DRC0010J","Package_SON/Texas_DRC0010J_ThermalVias","Package_SON/Texas_DRX_WSON-10_2.5x2.5mm_P0.5mm","Package_SON/Texas_DSC0010J","Package_SON/Texas_DSC0010J_ThermalVias","Package_SON/Texas_DSG0008A_WSON-8-1EP_2x2mm_P0.5mm_EP0.9x1.6mm","Package_SON/Texas_DSG0008A_WSON-8-1EP_2x2mm_P0.5mm_EP0.9x1.6mm_ThermalVias","Package_SON/Texas_PWSON-N6","Package_SON/Texas_R-PUSON-N14","Package_SON/Texas_R-PUSON-N8_USON-8-1EP_1.6x2.1mm_P0.5mm_EP0.4x1.7mm","Package_SON/Texas_R-PWSON-N12_EP0.4x2mm","Package_SON/Texas_S-PDSO-N12","Package_SON/Texas_S-PVSON-N10","Package_SON/Texas_S-PVSON-N10_ThermalVias","Package_SON/Texas_S-PVSON-N8","Package_SON/Texas_S-PVSON-N8_ThermalVias","Package_SON/Texas_S-PWSON-N10","Package_SON/Texas_S-PWSON-N10_ThermalVias","Package_SON/Texas_S-PWSON-N8_EP1.2x2mm","Package_SON/Texas_S-PWSON-N8_EP1.2x2mm_ThermalVias","Package_SON/Texas_USON-6_1x1.45mm_P0.5mm_SMD","Package_SON/Texas_VSON-HR-8_1.5x2mm_P0.5mm","Package_SON/Texas_X2SON-4-1EP_1.1x1.4mm_P0.5mm_EP0.8x0.6mm","Package_SON/Texas_X2SON-4-1EP_1.1x1.4mm_P0.5mm_EP0.8x0.6mm_ThermalVias","Package_SON/Texas_X2SON-4_1x1mm_P0.65mm","Package_SON/Texas_X2SON-5_0.8x0.8mm_P0.48mm","Package_SON/Texas_X2SON-5_0.8x0.8mm_P0.48mm_RoutingVia","Package_SON/USON-10_2.5x1.0mm_P0.5mm","Package_SON/USON-20_2x4mm_P0.4mm","Package_SON/VSON-10-1EP_3x3mm_P0.5mm_EP1.2x2mm","Package_SON/VSON-10-1EP_3x3mm_P0.5mm_EP1.2x2mm_ThermalVias","Package_SON/VSON-10-1EP_3x3mm_P0.5mm_EP1.65x2.4mm","Package_SON/VSON-10-1EP_3x3mm_P0.5mm_EP1.65x2.4mm_ThermalVias","Package_SON/VSON-14-1EP_3x4.45mm_P0.65mm_EP1.6x4.2mm","Package_SON/VSON-14-1EP_3x4.45mm_P0.65mm_EP1.6x4.2mm_ThermalVias","Package_SON/VSON-8-1EP_3x3mm_P0.65mm_EP1.65x2.4mm","Package_SON/VSON-8-1EP_3x3mm_P0.65mm_EP1.65x2.4mm_ThermalVias","Package_SON/VSON-8-1EP_3x3mm_P0.65mm_EP1.6x2.4mm","Package_SON/VSON-8_1.5x2mm_P0.5mm","Package_SON/VSON-8_3.3x3.3mm_P0.65mm_NexFET","Package_SON/VSONP-8-1EP_5x6_P1.27mm","Package_SON/WSON-10-1EP_2.5x2.5mm_P0.5mm_EP1.2x2mm","Package_SON/WSON-10-1EP_2.5x2.5mm_P0.5mm_EP1.2x2mm_ThermalVias","Package_SON/WSON-10-1EP_2x3mm_P0.5mm_EP0.84x2.4mm","Package_SON/WSON-10-1EP_2x3mm_P0.5mm_EP0.84x2.4mm_ThermalVias","Package_SON/WSON-10-1EP_4x3mm_P0.5mm_EP2.2x2mm","Package_SON/WSON-10-1EP_4x4mm_P0.8mm_EP2.6x3mm","Package_SON/WSON-10-1EP_4x4mm_P0.8mm_EP2.6x3mm_ThermalVias","Package_SON/WSON-12-1EP_3x2mm_P0.5mm_EP1x2.65","Package_SON/WSON-12-1EP_3x2mm_P0.5mm_EP1x2.65_ThermalVias","Package_SON/WSON-12-1EP_3x3mm_P0.5mm_EP1.5x2.5mm","Package_SON/WSON-12-1EP_3x3mm_P0.5mm_EP1.5x2.5mm_ThermalVias","Package_SON/WSON-12-1EP_4x4mm_P0.5mm_EP2.6x3mm","Package_SON/WSON-12-1EP_4x4mm_P0.5mm_EP2.6x3mm_ThermalVias","Package_SON/WSON-14-1EP_4.0x4.0mm_P0.5mm_EP2.6x2.6mm","Package_SON/WSON-16_3.3x1.35_P0.4mm","Package_SON/WSON-6-1EP_2x2mm_P0.65mm_EP1x1.6mm","Package_SON/WSON-6-1EP_2x2mm_P0.65mm_EP1x1.6mm_ThermalVias","Package_SON/WSON-6-1EP_3x3mm_P0.95mm","Package_SON/WSON-6_1.5x1.5mm_P0.5mm","Package_SON/WSON-8-1EP_2x2mm_P0.5mm_EP0.9x1.6mm","Package_SON/WSON-8-1EP_2x2mm_P0.5mm_EP0.9x1.6mm_ThermalVias","Package_SON/WSON-8-1EP_3x2.5mm_P0.5mm_EP1.2x1.5mm_PullBack","Package_SON/WSON-8-1EP_3x2.5mm_P0.5mm_EP1.2x1.5mm_PullBack_ThermalVias","Package_SON/WSON-8-1EP_3x3mm_P0.5mm_EP1.2x2mm","Package_SON/WSON-8-1EP_3x3mm_P0.5mm_EP1.2x2mm_ThermalVias","Package_SON/WSON-8-1EP_3x3mm_P0.5mm_EP1.45x2.4mm","Package_SON/WSON-8-1EP_3x3mm_P0.5mm_EP1.45x2.4mm_ThermalVias","Package_SON/WSON-8-1EP_3x3mm_P0.5mm_EP1.6x2.0mm","Package_SON/WSON-8-1EP_4x4mm_P0.8mm_EP1.98x3mm","Package_SON/WSON-8-1EP_4x4mm_P0.8mm_EP1.98x3mm_ThermalVias","Package_SON/WSON-8-1EP_4x4mm_P0.8mm_EP2.2x3mm","Package_SON/WSON-8-1EP_4x4mm_P0.8mm_EP2.2x3mm_ThermalVias","Package_SON/WSON-8-1EP_4x4mm_P0.8mm_EP2.6x3mm","Package_SON/WSON-8-1EP_4x4mm_P0.8mm_EP2.6x3mm_ThermalVias","Package_SON/WSON-8-1EP_6x5mm_P1.27mm_EP3.4x4.3mm","Package_SON/WSON-8-1EP_6x5mm_P1.27mm_EP3.4x4mm","Package_SON/WSON-8-1EP_8x6mm_P1.27mm_EP3.4x4.3mm","Package_SON/Winbond_USON-8-1EP_3x2mm_P0.5mm_EP0.2x1.6mm","Package_SON/Winbond_USON-8-2EP_3x4mm_P0.8mm_EP0.2x0.8mm","Package_SON/X2SON-8_1.4x1mm_P0.35mm","Package_SO_J-Lead/TSOC-6_3.76x3.94mm_P1.27mm","Package_TO_SOT_SMD/ATPAK-2","Package_TO_SOT_SMD/Analog_KS-4","Package_TO_SOT_SMD/Diodes_SOT-553","Package_TO_SOT_SMD/HVSOF5","Package_TO_SOT_SMD/HVSOF6","Package_TO_SOT_SMD/Infineon_PG-HDSOP-10-1","Package_TO_SOT_SMD/Infineon_PG-HSOF-8-1","Package_TO_SOT_SMD/Infineon_PG-HSOF-8-1_ThermalVias","Package_TO_SOT_SMD/Infineon_PG-HSOF-8-2","Package_TO_SOT_SMD/Infineon_PG-HSOF-8-2_ThermalVias","Package_TO_SOT_SMD/Infineon_PG-HSOF-8-2_ThermalVias2","Package_TO_SOT_SMD/Infineon_PG-HSOF-8-3","Package_TO_SOT_SMD/Infineon_PG-HSOF-8-3_ThermalVias","Package_TO_SOT_SMD/Infineon_PG-TO-220-7Lead_TabPin8","Package_TO_SOT_SMD/Infineon_PG-TSFP-3-1","Package_TO_SOT_SMD/LFPAK33","Package_TO_SOT_SMD/LFPAK56","Package_TO_SOT_SMD/LFPAK88","Package_TO_SOT_SMD/Nexperia_CFP15_SOT-1289","Package_TO_SOT_SMD/OnSemi_ECH8","Package_TO_SOT_SMD/PQFN_8x8","Package_TO_SOT_SMD/PowerMacro_M234_NoHole","Package_TO_SOT_SMD/PowerMacro_M234_WithHole","Package_TO_SOT_SMD/ROHM_SOT-457_ClockwisePinNumbering","Package_TO_SOT_SMD/Rohm_HRP7","Package_TO_SOT_SMD/SC-59","Package_TO_SOT_SMD/SC-59_Handsoldering","Package_TO_SOT_SMD/SC-70-8","Package_TO_SOT_SMD/SC-74-6_1.55x2.9mm_P0.95mm","Package_TO_SOT_SMD/SC-74A-5_1.55x2.9mm_P0.95mm","Package_TO_SOT_SMD/SC-82AA","Package_TO_SOT_SMD/SC-82AA_Handsoldering","Package_TO_SOT_SMD/SC-82AB","Package_TO_SOT_SMD/SC-82AB_Handsoldering","Package_TO_SOT_SMD/SOT-1123","Package_TO_SOT_SMD/SOT-1333-1","Package_TO_SOT_SMD/SOT-1334-1","Package_TO_SOT_SMD/SOT-143","Package_TO_SOT_SMD/SOT-143R","Package_TO_SOT_SMD/SOT-143R_Handsoldering","Package_TO_SOT_SMD/SOT-143_Handsoldering","Package_TO_SOT_SMD/SOT-223-3_TabPin2","Package_TO_SOT_SMD/SOT-223-5","Package_TO_SOT_SMD/SOT-223-6","Package_TO_SOT_SMD/SOT-223-6_TabPin3","Package_TO_SOT_SMD/SOT-223-8","Package_TO_SOT_SMD/SOT-223","Package_TO_SOT_SMD/SOT-23-3","Package_TO_SOT_SMD/SOT-23-5","Package_TO_SOT_SMD/SOT-23-5_HandSoldering","Package_TO_SOT_SMD/SOT-23-6","Package_TO_SOT_SMD/SOT-23-6_Handsoldering","Package_TO_SOT_SMD/SOT-23-8","Package_TO_SOT_SMD/SOT-23-8_Handsoldering","Package_TO_SOT_SMD/SOT-23","Package_TO_SOT_SMD/SOT-23W","Package_TO_SOT_SMD/SOT-23W_Handsoldering","Package_TO_SOT_SMD/SOT-23_Handsoldering","Package_TO_SOT_SMD/SOT-323_SC-70","Package_TO_SOT_SMD/SOT-343_SC-70-4","Package_TO_SOT_SMD/SOT-353_SC-70-5","Package_TO_SOT_SMD/SOT-363_SC-70-6","Package_TO_SOT_SMD/SOT-383F","Package_TO_SOT_SMD/SOT-383FL","Package_TO_SOT_SMD/SOT-416","Package_TO_SOT_SMD/SOT-457T","Package_TO_SOT_SMD/SOT-523","Package_TO_SOT_SMD/SOT-543","Package_TO_SOT_SMD/SOT-553","Package_TO_SOT_SMD/SOT-563","Package_TO_SOT_SMD/SOT-583-8","Package_TO_SOT_SMD/SOT-665","Package_TO_SOT_SMD/SOT-666","Package_TO_SOT_SMD/SOT-723","Package_TO_SOT_SMD/SOT-883","Package_TO_SOT_SMD/SOT-886","Package_TO_SOT_SMD/SOT-89-3","Package_TO_SOT_SMD/SOT-89-3_Handsoldering","Package_TO_SOT_SMD/SOT-89-5","Package_TO_SOT_SMD/SOT-89-5_Handsoldering","Package_TO_SOT_SMD/SOT-963","Package_TO_SOT_SMD/SuperSOT-3","Package_TO_SOT_SMD/SuperSOT-6","Package_TO_SOT_SMD/SuperSOT-8","Package_TO_SOT_SMD/TDSON-8-1","Package_TO_SOT_SMD/TO-252-2","Package_TO_SOT_SMD/TO-252-2_TabPin1","Package_TO_SOT_SMD/TO-252-3_TabPin2","Package_TO_SOT_SMD/TO-252-3_TabPin4","Package_TO_SOT_SMD/TO-252-4","Package_TO_SOT_SMD/TO-252-5_TabPin3","Package_TO_SOT_SMD/TO-252-5_TabPin6","Package_TO_SOT_SMD/TO-263-2","Package_TO_SOT_SMD/TO-263-2_TabPin1","Package_TO_SOT_SMD/TO-263-3_TabPin2","Package_TO_SOT_SMD/TO-263-3_TabPin4","Package_TO_SOT_SMD/TO-263-4","Package_TO_SOT_SMD/TO-263-5_TabPin3","Package_TO_SOT_SMD/TO-263-5_TabPin6","Package_TO_SOT_SMD/TO-263-6","Package_TO_SOT_SMD/TO-263-7_TabPin4","Package_TO_SOT_SMD/TO-263-7_TabPin8","Package_TO_SOT_SMD/TO-263-9_TabPin10","Package_TO_SOT_SMD/TO-263-9_TabPin5","Package_TO_SOT_SMD/TO-268-2","Package_TO_SOT_SMD/TO-269AA","Package_TO_SOT_SMD/TO-277A","Package_TO_SOT_SMD/TO-277B","Package_TO_SOT_SMD/TO-50-3_LongPad-NoHole_Housing","Package_TO_SOT_SMD/TO-50-3_LongPad-WithHole_Housing","Package_TO_SOT_SMD/TO-50-3_ShortPad-NoHole_Housing","Package_TO_SOT_SMD/TO-50-3_ShortPad-WithHole_Housing","Package_TO_SOT_SMD/TO-50-4_LongPad-NoHole_Housing","Package_TO_SOT_SMD/TO-50-4_LongPad-WithHole_Housing","Package_TO_SOT_SMD/TO-50-4_ShortPad-NoHole_Housing","Package_TO_SOT_SMD/TO-50-4_ShortPad-WithHole_Housing","Package_TO_SOT_SMD/TSOT-23-5","Package_TO_SOT_SMD/TSOT-23-5_HandSoldering","Package_TO_SOT_SMD/TSOT-23-6","Package_TO_SOT_SMD/TSOT-23-6_HandSoldering","Package_TO_SOT_SMD/TSOT-23-8","Package_TO_SOT_SMD/TSOT-23-8_HandSoldering","Package_TO_SOT_SMD/TSOT-23","Package_TO_SOT_SMD/TSOT-23_HandSoldering","Package_TO_SOT_SMD/Texas_DDF0008A_SOT-8_1.6x2.9mm_P0.65mm","Package_TO_SOT_SMD/Texas_DRT-3","Package_TO_SOT_SMD/Texas_NDQ","Package_TO_SOT_SMD/Texas_NDW-7_TabPin4","Package_TO_SOT_SMD/Texas_NDW-7_TabPin8","Package_TO_SOT_SMD/Texas_NDY0011A","Package_TO_SOT_SMD/Texas_R-PDSO-G5_DCK-5","Package_TO_SOT_SMD/Texas_R-PDSO-G6","Package_TO_SOT_SMD/Texas_R-PDSO-N5_DRL-5","Package_TO_SOT_SMD/Texas_R-PDSO-N6_DRL-6","Package_TO_SOT_SMD/VSOF5","Package_TO_SOT_SMD/Vishay_PowerPAK_SC70-6L_Dual","Package_TO_SOT_SMD/Vishay_PowerPAK_SC70-6L_Single","Package_TO_SOT_THT/Analog_TO-46-4_ThermalShield","Package_TO_SOT_THT/Fairchild_TO-220F-6L","Package_TO_SOT_THT/Heraeus_TO-92-2","Package_TO_SOT_THT/NEC_Molded_7x4x9mm","Package_TO_SOT_THT/PowerIntegrations_TO-220-7C","Package_TO_SOT_THT/SIPAK-1EP_Horizontal_TabDown","Package_TO_SOT_THT/SIPAK_Vertical","Package_TO_SOT_THT/SOD-70_P2.54mm","Package_TO_SOT_THT/SOD-70_P5.08mm","Package_TO_SOT_THT/SOT-227","Package_TO_SOT_THT/TO-100-10","Package_TO_SOT_THT/TO-100-10_Window","Package_TO_SOT_THT/TO-11-2","Package_TO_SOT_THT/TO-11-2_Window","Package_TO_SOT_THT/TO-11-3","Package_TO_SOT_THT/TO-11-3_Window","Package_TO_SOT_THT/TO-12-4","Package_TO_SOT_THT/TO-12-4_Window","Package_TO_SOT_THT/TO-126-2_Horizontal_TabDown","Package_TO_SOT_THT/TO-126-2_Horizontal_TabUp","Package_TO_SOT_THT/TO-126-2_Vertical","Package_TO_SOT_THT/TO-126-3_Horizontal_TabDown","Package_TO_SOT_THT/TO-126-3_Horizontal_TabUp","Package_TO_SOT_THT/TO-126-3_Vertical","Package_TO_SOT_THT/TO-17-4","Package_TO_SOT_THT/TO-17-4_Window","Package_TO_SOT_THT/TO-18-2","Package_TO_SOT_THT/TO-18-2_Lens","Package_TO_SOT_THT/TO-18-2_Window","Package_TO_SOT_THT/TO-18-3","Package_TO_SOT_THT/TO-18-3_Lens","Package_TO_SOT_THT/TO-18-3_Window","Package_TO_SOT_THT/TO-18-4","Package_TO_SOT_THT/TO-18-4_Lens","Package_TO_SOT_THT/TO-18-4_Window","Package_TO_SOT_THT/TO-218-2_Horizontal_TabDown","Package_TO_SOT_THT/TO-218-2_Horizontal_TabUp","Package_TO_SOT_THT/TO-218-2_Vertical","Package_TO_SOT_THT/TO-218-3_Horizontal_TabDown","Package_TO_SOT_THT/TO-218-3_Horizontal_TabUp","Package_TO_SOT_THT/TO-218-3_Vertical","Package_TO_SOT_THT/TO-220-11_P3.4x2.54mm_StaggerEven_Lead5.84mm_TabDown","Package_TO_SOT_THT/TO-220-11_P3.4x2.54mm_StaggerOdd_Lead5.84mm_TabDown","Package_TO_SOT_THT/TO-220-11_P3.4x5.08mm_StaggerEven_Lead4.58mm_Vertical","Package_TO_SOT_THT/TO-220-11_P3.4x5.08mm_StaggerOdd_Lead4.58mm_Vertical","Package_TO_SOT_THT/TO-220-11_P3.4x5.08mm_StaggerOdd_Lead8.45mm_TabDown","Package_TO_SOT_THT/TO-220-15_P2.54x2.54mm_StaggerEven_Lead5.84mm_TabDown","Package_TO_SOT_THT/TO-220-15_P2.54x2.54mm_StaggerOdd_Lead5.84mm_TabDown","Package_TO_SOT_THT/TO-220-15_P2.54x5.08mm_StaggerEven_Lead4.58mm_Vertical","Package_TO_SOT_THT/TO-220-15_P2.54x5.08mm_StaggerOdd_Lead4.58mm_Vertical","Package_TO_SOT_THT/TO-220-2_Horizontal_TabDown","Package_TO_SOT_THT/TO-220-2_Horizontal_TabUp","Package_TO_SOT_THT/TO-220-2_Vertical","Package_TO_SOT_THT/TO-220-3_Horizontal_TabDown","Package_TO_SOT_THT/TO-220-3_Horizontal_TabUp","Package_TO_SOT_THT/TO-220-3_Vertical","Package_TO_SOT_THT/TO-220-4_Horizontal_TabDown","Package_TO_SOT_THT/TO-220-4_Horizontal_TabUp","Package_TO_SOT_THT/TO-220-4_P5.08x3.7mm_StaggerEven_Lead3.8mm_Vertical","Package_TO_SOT_THT/TO-220-4_P5.08x3.7mm_StaggerOdd_Lead3.8mm_Vertical","Package_TO_SOT_THT/TO-220-4_P5.08x3.8mm_StaggerEven_Lead5.85mm_TabDown","Package_TO_SOT_THT/TO-220-4_P5.08x3.8mm_StaggerOdd_Lead5.85mm_TabDown","Package_TO_SOT_THT/TO-220-4_Vertical","Package_TO_SOT_THT/TO-220-5_Horizontal_TabDown","Package_TO_SOT_THT/TO-220-5_Horizontal_TabUp","Package_TO_SOT_THT/TO-220-5_P3.4x3.7mm_StaggerEven_Lead3.8mm_Vertical","Package_TO_SOT_THT/TO-220-5_P3.4x3.7mm_StaggerOdd_Lead3.8mm_Vertical","Package_TO_SOT_THT/TO-220-5_P3.4x3.8mm_StaggerEven_Lead7.13mm_TabDown","Package_TO_SOT_THT/TO-220-5_P3.4x3.8mm_StaggerOdd_Lead7.13mm_TabDown","Package_TO_SOT_THT/TO-220-5_Vertical","Package_TO_SOT_THT/TO-220-7_P2.54x3.7mm_StaggerEven_Lead3.8mm_Vertical","Package_TO_SOT_THT/TO-220-7_P2.54x3.7mm_StaggerOdd_Lead3.8mm_Vertical","Package_TO_SOT_THT/TO-220-7_P2.54x3.8mm_StaggerEven_Lead5.85mm_TabDown","Package_TO_SOT_THT/TO-220-7_P2.54x3.8mm_StaggerOdd_Lead5.85mm_TabDown","Package_TO_SOT_THT/TO-220-7_P2.54x5.08mm_StaggerOdd_Lead3.08mm_Vertical","Package_TO_SOT_THT/TO-220-7_P2.54x5.1mm_StaggerOdd_Lead8.025mm_TabDown","Package_TO_SOT_THT/TO-220-8_Vertical","Package_TO_SOT_THT/TO-220-9_P1.93x5.08mm_StaggerOdd_Lead3.378mm_Vertical","Package_TO_SOT_THT/TO-220-9_P1.94x3.7mm_StaggerEven_Lead3.8mm_Vertical","Package_TO_SOT_THT/TO-220-9_P1.94x3.7mm_StaggerOdd_Lead3.8mm_Vertical","Package_TO_SOT_THT/TO-220-9_P1.94x3.8mm_StaggerEven_Lead5.85mm_TabDown","Package_TO_SOT_THT/TO-220-9_P1.94x3.8mm_StaggerOdd_Lead5.85mm_TabDown","Package_TO_SOT_THT/TO-220F-11_P3.4x5.08mm_StaggerEven_Lead5.08mm_Vertical","Package_TO_SOT_THT/TO-220F-11_P3.4x5.08mm_StaggerOdd_Lead5.08mm_Vertical","Package_TO_SOT_THT/TO-220F-15_P2.54x5.08mm_StaggerEven_Lead5.08mm_Vertical","Package_TO_SOT_THT/TO-220F-15_P2.54x5.08mm_StaggerOdd_Lead5.08mm_Vertical","Package_TO_SOT_THT/TO-220F-2_Horizontal_TabDown","Package_TO_SOT_THT/TO-220F-2_Horizontal_TabUp","Package_TO_SOT_THT/TO-220F-2_Vertical","Package_TO_SOT_THT/TO-220F-3_Horizontal_TabDown","Package_TO_SOT_THT/TO-220F-3_Horizontal_TabUp","Package_TO_SOT_THT/TO-220F-3_Vertical","Package_TO_SOT_THT/TO-220F-4_Horizontal_TabDown","Package_TO_SOT_THT/TO-220F-4_Horizontal_TabUp","Package_TO_SOT_THT/TO-220F-4_P5.08x2.05mm_StaggerEven_Lead1.85mm_Vertical","Package_TO_SOT_THT/TO-220F-4_P5.08x2.05mm_StaggerOdd_Lead1.85mm_Vertical","Package_TO_SOT_THT/TO-220F-4_P5.08x3.7mm_StaggerEven_Lead3.5mm_Vertical","Package_TO_SOT_THT/TO-220F-4_P5.08x3.7mm_StaggerOdd_Lead3.5mm_Vertical","Package_TO_SOT_THT/TO-220F-4_Vertical","Package_TO_SOT_THT/TO-220F-5_Horizontal_TabDown","Package_TO_SOT_THT/TO-220F-5_Horizontal_TabUp","Package_TO_SOT_THT/TO-220F-5_P3.4x2.06mm_StaggerEven_Lead1.86mm_Vertical","Package_TO_SOT_THT/TO-220F-5_P3.4x2.06mm_StaggerOdd_Lead1.86mm_Vertical","Package_TO_SOT_THT/TO-220F-5_P3.4x3.7mm_StaggerEven_Lead3.5mm_Vertical","Package_TO_SOT_THT/TO-220F-5_P3.4x3.7mm_StaggerOdd_Lead3.5mm_Vertical","Package_TO_SOT_THT/TO-220F-5_Vertical","Package_TO_SOT_THT/TO-220F-7_P2.54x3.7mm_StaggerEven_Lead3.5mm_Vertical","Package_TO_SOT_THT/TO-220F-7_P2.54x3.7mm_StaggerOdd_Lead3.5mm_Vertical","Package_TO_SOT_THT/TO-220F-9_P1.8x3.7mm_StaggerEven_Lead3.5mm_Vertical","Package_TO_SOT_THT/TO-220F-9_P1.8x3.7mm_StaggerOdd_Lead3.5mm_Vertical","Package_TO_SOT_THT/TO-247-2_Horizontal_TabDown","Package_TO_SOT_THT/TO-247-2_Horizontal_TabUp","Package_TO_SOT_THT/TO-247-2_Vertical","Package_TO_SOT_THT/TO-247-3_Horizontal_TabDown","Package_TO_SOT_THT/TO-247-3_Horizontal_TabUp","Package_TO_SOT_THT/TO-247-3_Vertical","Package_TO_SOT_THT/TO-247-4_Horizontal_TabDown","Package_TO_SOT_THT/TO-247-4_Horizontal_TabUp","Package_TO_SOT_THT/TO-247-4_Vertical","Package_TO_SOT_THT/TO-247-5_Horizontal_TabDown","Package_TO_SOT_THT/TO-247-5_Horizontal_TabUp","Package_TO_SOT_THT/TO-247-5_Vertical","Package_TO_SOT_THT/TO-251-2-1EP_Horizontal_TabDown","Package_TO_SOT_THT/TO-251-2_Vertical","Package_TO_SOT_THT/TO-251-3-1EP_Horizontal_TabDown","Package_TO_SOT_THT/TO-251-3_Vertical","Package_TO_SOT_THT/TO-262-3-1EP_Horizontal_TabDown","Package_TO_SOT_THT/TO-262-3_Vertical","Package_TO_SOT_THT/TO-262-5-1EP_Horizontal_TabDown","Package_TO_SOT_THT/TO-262-5_Vertical","Package_TO_SOT_THT/TO-264-2_Horizontal_TabDown","Package_TO_SOT_THT/TO-264-2_Horizontal_TabUp","Package_TO_SOT_THT/TO-264-2_Vertical","Package_TO_SOT_THT/TO-264-3_Horizontal_TabDown","Package_TO_SOT_THT/TO-264-3_Horizontal_TabUp","Package_TO_SOT_THT/TO-264-3_Vertical","Package_TO_SOT_THT/TO-264-5_Horizontal_TabDown","Package_TO_SOT_THT/TO-264-5_Horizontal_TabUp","Package_TO_SOT_THT/TO-264-5_Vertical","Package_TO_SOT_THT/TO-3","Package_TO_SOT_THT/TO-33-4","Package_TO_SOT_THT/TO-33-4_Window","Package_TO_SOT_THT/TO-38-2","Package_TO_SOT_THT/TO-38-2_Window","Package_TO_SOT_THT/TO-38-3","Package_TO_SOT_THT/TO-38-3_Window","Package_TO_SOT_THT/TO-39-10","Package_TO_SOT_THT/TO-39-10_Window","Package_TO_SOT_THT/TO-39-2","Package_TO_SOT_THT/TO-39-2_Window","Package_TO_SOT_THT/TO-39-3","Package_TO_SOT_THT/TO-39-3_Window","Package_TO_SOT_THT/TO-39-4","Package_TO_SOT_THT/TO-39-4_Window","Package_TO_SOT_THT/TO-39-6","Package_TO_SOT_THT/TO-39-6_Window","Package_TO_SOT_THT/TO-39-8","Package_TO_SOT_THT/TO-39-8_Window","Package_TO_SOT_THT/TO-3P-3_Horizontal_TabDown","Package_TO_SOT_THT/TO-3P-3_Horizontal_TabUp","Package_TO_SOT_THT/TO-3P-3_Vertical","Package_TO_SOT_THT/TO-3PB-3_Horizontal_TabDown","Package_TO_SOT_THT/TO-3PB-3_Horizontal_TabUp","Package_TO_SOT_THT/TO-3PB-3_Vertical","Package_TO_SOT_THT/TO-46-2","Package_TO_SOT_THT/TO-46-2_Pin2Center","Package_TO_SOT_THT/TO-46-2_Pin2Center_Window","Package_TO_SOT_THT/TO-46-2_Window","Package_TO_SOT_THT/TO-46-3","Package_TO_SOT_THT/TO-46-3_Pin2Center","Package_TO_SOT_THT/TO-46-3_Pin2Center_Window","Package_TO_SOT_THT/TO-46-3_Window","Package_TO_SOT_THT/TO-46-4","Package_TO_SOT_THT/TO-46-4_Window","Package_TO_SOT_THT/TO-5-10","Package_TO_SOT_THT/TO-5-10_Window","Package_TO_SOT_THT/TO-5-2","Package_TO_SOT_THT/TO-5-2_Window","Package_TO_SOT_THT/TO-5-3","Package_TO_SOT_THT/TO-5-3_Window","Package_TO_SOT_THT/TO-5-4","Package_TO_SOT_THT/TO-5-4_Window","Package_TO_SOT_THT/TO-5-6","Package_TO_SOT_THT/TO-5-6_Window","Package_TO_SOT_THT/TO-5-8","Package_TO_SOT_THT/TO-5-8_PD5.08","Package_TO_SOT_THT/TO-5-8_PD5.08_Window","Package_TO_SOT_THT/TO-5-8_Window","Package_TO_SOT_THT/TO-52-2","Package_TO_SOT_THT/TO-52-2_Window","Package_TO_SOT_THT/TO-52-3","Package_TO_SOT_THT/TO-52-3_Window","Package_TO_SOT_THT/TO-72-4","Package_TO_SOT_THT/TO-72-4_Window","Package_TO_SOT_THT/TO-75-6","Package_TO_SOT_THT/TO-75-6_Window","Package_TO_SOT_THT/TO-78-10","Package_TO_SOT_THT/TO-78-10_Window","Package_TO_SOT_THT/TO-78-6","Package_TO_SOT_THT/TO-78-6_Window","Package_TO_SOT_THT/TO-78-8","Package_TO_SOT_THT/TO-78-8_Window","Package_TO_SOT_THT/TO-8-2","Package_TO_SOT_THT/TO-8-2_Window","Package_TO_SOT_THT/TO-8-3","Package_TO_SOT_THT/TO-8-3_Window","Package_TO_SOT_THT/TO-92-2","Package_TO_SOT_THT/TO-92-2_Horizontal1","Package_TO_SOT_THT/TO-92-2_Horizontal2","Package_TO_SOT_THT/TO-92-2_W4.0mm_Horizontal_FlatSideDown","Package_TO_SOT_THT/TO-92-2_W4.0mm_Horizontal_FlatSideUp","Package_TO_SOT_THT/TO-92-2_Wide","Package_TO_SOT_THT/TO-92","Package_TO_SOT_THT/TO-92Flat","Package_TO_SOT_THT/TO-92L","Package_TO_SOT_THT/TO-92L_HandSolder","Package_TO_SOT_THT/TO-92L_Inline","Package_TO_SOT_THT/TO-92L_Inline_Wide","Package_TO_SOT_THT/TO-92L_Wide","Package_TO_SOT_THT/TO-92Mini-2","Package_TO_SOT_THT/TO-92S","Package_TO_SOT_THT/TO-92_HandSolder","Package_TO_SOT_THT/TO-92_Horizontal1","Package_TO_SOT_THT/TO-92_Horizontal2","Package_TO_SOT_THT/TO-92_Inline","Package_TO_SOT_THT/TO-92_Inline_Horizontal1","Package_TO_SOT_THT/TO-92_Inline_Horizontal2","Package_TO_SOT_THT/TO-92_Inline_W4.0mm_Horizontal_FlatSideDown","Package_TO_SOT_THT/TO-92_Inline_W4.0mm_Horizontal_FlatSideUp","Package_TO_SOT_THT/TO-92_Inline_Wide","Package_TO_SOT_THT/TO-92_W4.0mm_StaggerEven_Horizontal_FlatSideDown","Package_TO_SOT_THT/TO-92_W4.0mm_StaggerEven_Horizontal_FlatSideUp","Package_TO_SOT_THT/TO-92_Wide","Package_TO_SOT_THT/TO-99-6","Package_TO_SOT_THT/TO-99-6_Window","Package_TO_SOT_THT/TO-99-8","Package_TO_SOT_THT/TO-99-8_Window","Panelization/BreakLine_11h_D0.5mm_P0.85mm","Panelization/BreakLine_1h_D0.5mm_P0.85mm","Panelization/BreakLine_2h_D0.5mm_P0.85mm","Panelization/BreakLine_2h_D0.5mm_P1.7mm","Panelization/BreakLine_3h_D0.5mm_P0.85mm","Panelization/BreakLine_3h_D0.5mm_P1.7mm","Panelization/BreakLine_5h_D0.5mm_P0.85mm","Panelization/BreakLine_7h_D0.5mm_P0.85mm","Panelization/BreakLine_9h_D0.5mm_P0.85mm","Panelization/MouseBite-Part_2.0x2.0mm_0h","Panelization/MouseBite-Part_2.0x2.0mm_inset_D0.5mm_P0.85mm_4h_Trace","Panelization/MouseBite-Part_2.0x2.0mm_inset_D0.5mm_P0.85mm_5h","Panelization/MouseBite-Part_2.0x2.0mm_outset_D0.5mm_P0.85mm_2h_Trace","Panelization/MouseBite-Part_2.0x2.0mm_outset_D0.5mm_P0.85mm_3h","Panelization/MouseBite-Part_2.0x4.5mm_0h","Panelization/MouseBite-Part_2.0x4.5mm_inset_D0.5mm_P0.85mm_5h_Trace","Panelization/MouseBite-Part_2.0x4.5mm_inset_D0.5mm_P0.85mm_7h","Panelization/MouseBite-Part_2.0x4.5mm_outset_D0.5mm_P0.85mm_5h_Trace","Panelization/MouseBite-Part_2.0x4.5mm_outset_D0.5mm_P0.85mm_7h","Panelization/MouseBite-Slot-Jumper_01005","Panelization/MouseBite-Slot-Jumper_0201","Panelization/MouseBite-Slot_2.0x2.0mm_inset_D0.5mm_P0.85mm_4h_Trace","Panelization/MouseBite-Slot_2.0x2.0mm_inset_D0.5mm_P0.85mm_5h","Panelization/MouseBite-Slot_2.0x2.0mm_outset_D0.5mm_P0.85mm_2h_Trace","Panelization/MouseBite-Slot_2.0x2.0mm_outset_D0.5mm_P0.85mm_3h","Panelization/MouseBite-Slot_2.0x4.5mm_inset_D0.5mm_P0.85mm_5h_Trace","Panelization/MouseBite-Slot_2.0x4.5mm_inset_D0.5mm_P0.85mm_7h","Panelization/MouseBite-Slot_2.0x4.5mm_outset_D0.5mm_P0.85mm_5h_Trace","Panelization/MouseBite-Slot_2.0x4.5mm_outset_D0.5mm_P0.85mm_7h","Panelization/MouseBite-Slot_2.54x2.54mm_on-edge_D0.5mm_P0.85mm_4h_Trace","Panelization/MouseBite-Slot_2.54x5.08mm_on-edge_D0.5mm_P0.85mm_5h_Trace","Potentiometer_SMD/Potentiometer_ACP_CA14-VSMD_Vertical","Potentiometer_SMD/Potentiometer_ACP_CA14-VSMD_Vertical_Hole","Potentiometer_SMD/Potentiometer_ACP_CA6-VSMD_Vertical","Potentiometer_SMD/Potentiometer_ACP_CA6-VSMD_Vertical_Hole","Potentiometer_SMD/Potentiometer_ACP_CA9-VSMD_Vertical","Potentiometer_SMD/Potentiometer_ACP_CA9-VSMD_Vertical_Hole","Potentiometer_SMD/Potentiometer_Bourns_3214G_Horizontal","Potentiometer_SMD/Potentiometer_Bourns_3214J_Horizontal","Potentiometer_SMD/Potentiometer_Bourns_3214W_Vertical","Potentiometer_SMD/Potentiometer_Bourns_3214X_Vertical","Potentiometer_SMD/Potentiometer_Bourns_3224G_Horizontal","Potentiometer_SMD/Potentiometer_Bourns_3224J_Horizontal","Potentiometer_SMD/Potentiometer_Bourns_3224W_Vertical","Potentiometer_SMD/Potentiometer_Bourns_3224X_Vertical","Potentiometer_SMD/Potentiometer_Bourns_3269P_Horizontal","Potentiometer_SMD/Potentiometer_Bourns_3269W_Vertical","Potentiometer_SMD/Potentiometer_Bourns_3269X_Horizontal","Potentiometer_SMD/Potentiometer_Bourns_3314G_Vertical","Potentiometer_SMD/Potentiometer_Bourns_3314J_Vertical","Potentiometer_SMD/Potentiometer_Bourns_3314R-1_Vertical_Hole","Potentiometer_SMD/Potentiometer_Bourns_3314R-GM5_Vertical_Hole","Potentiometer_SMD/Potentiometer_Bourns_3314S_Horizontal","Potentiometer_SMD/Potentiometer_Bourns_PRS11S_Vertical","Potentiometer_SMD/Potentiometer_Bourns_TC33X_Vertical","Potentiometer_SMD/Potentiometer_Vishay_TS53YJ_Vertical","Potentiometer_SMD/Potentiometer_Vishay_TS53YL_Vertical","Potentiometer_THT/Potentiometer_ACP_CA14-H2,5_Horizontal","Potentiometer_THT/Potentiometer_ACP_CA14-H4_Horizontal","Potentiometer_THT/Potentiometer_ACP_CA14-H5_Horizontal","Potentiometer_THT/Potentiometer_ACP_CA14V-15_Vertical","Potentiometer_THT/Potentiometer_ACP_CA14V-15_Vertical_Hole","Potentiometer_THT/Potentiometer_ACP_CA6-H2,5_Horizontal","Potentiometer_THT/Potentiometer_ACP_CA9-H2,5_Horizontal","Potentiometer_THT/Potentiometer_ACP_CA9-H3,8_Horizontal","Potentiometer_THT/Potentiometer_ACP_CA9-H5_Horizontal","Potentiometer_THT/Potentiometer_ACP_CA9-V10_Vertical","Potentiometer_THT/Potentiometer_ACP_CA9-V10_Vertical_Hole","Potentiometer_THT/Potentiometer_Alpha_RD901F-40-00D_Single_Vertical","Potentiometer_THT/Potentiometer_Alpha_RD901F-40-00D_Single_Vertical_CircularHoles","Potentiometer_THT/Potentiometer_Alpha_RD902F-40-00D_Dual_Vertical","Potentiometer_THT/Potentiometer_Alpha_RD902F-40-00D_Dual_Vertical_CircularHoles","Potentiometer_THT/Potentiometer_Alps_RK097_Dual_Horizontal","Potentiometer_THT/Potentiometer_Alps_RK097_Dual_Horizontal_Switch","Potentiometer_THT/Potentiometer_Alps_RK097_Single_Horizontal","Potentiometer_THT/Potentiometer_Alps_RK097_Single_Horizontal_Switch","Potentiometer_THT/Potentiometer_Alps_RK09K_Single_Horizontal","Potentiometer_THT/Potentiometer_Alps_RK09K_Single_Vertical","Potentiometer_THT/Potentiometer_Alps_RK09L_Double_Horizontal","Potentiometer_THT/Potentiometer_Alps_RK09L_Double_Vertical","Potentiometer_THT/Potentiometer_Alps_RK09L_Single_Horizontal","Potentiometer_THT/Potentiometer_Alps_RK09L_Single_Vertical","Potentiometer_THT/Potentiometer_Alps_RK09Y11_Single_Horizontal","Potentiometer_THT/Potentiometer_Alps_RK163_Dual_Horizontal","Potentiometer_THT/Potentiometer_Alps_RK163_Single_Horizontal","Potentiometer_THT/Potentiometer_Bourns_20P_Horizontal","Potentiometer_THT/Potentiometer_Bourns_3005_Horizontal","Potentiometer_THT/Potentiometer_Bourns_3006P_Horizontal","Potentiometer_THT/Potentiometer_Bourns_3006W_Horizontal","Potentiometer_THT/Potentiometer_Bourns_3006Y_Horizontal","Potentiometer_THT/Potentiometer_Bourns_3009P_Horizontal","Potentiometer_THT/Potentiometer_Bourns_3009Y_Horizontal","Potentiometer_THT/Potentiometer_Bourns_3266P_Horizontal","Potentiometer_THT/Potentiometer_Bourns_3266W_Vertical","Potentiometer_THT/Potentiometer_Bourns_3266X_Horizontal","Potentiometer_THT/Potentiometer_Bourns_3266Y_Vertical","Potentiometer_THT/Potentiometer_Bourns_3266Z_Horizontal","Potentiometer_THT/Potentiometer_Bourns_3296P_Horizontal","Potentiometer_THT/Potentiometer_Bourns_3296W_Vertical","Potentiometer_THT/Potentiometer_Bourns_3296X_Horizontal","Potentiometer_THT/Potentiometer_Bourns_3296Y_Vertical","Potentiometer_THT/Potentiometer_Bourns_3296Z_Horizontal","Potentiometer_THT/Potentiometer_Bourns_3299P_Horizontal","Potentiometer_THT/Potentiometer_Bourns_3299W_Vertical","Potentiometer_THT/Potentiometer_Bourns_3299X_Horizontal","Potentiometer_THT/Potentiometer_Bourns_3299Y_Vertical","Potentiometer_THT/Potentiometer_Bourns_3299Z_Horizontal","Potentiometer_THT/Potentiometer_Bourns_3339H_Vertical","Potentiometer_THT/Potentiometer_Bourns_3339P_Vertical","Potentiometer_THT/Potentiometer_Bourns_3339P_Vertical_HandSoldering","Potentiometer_THT/Potentiometer_Bourns_3339S_Horizontal","Potentiometer_THT/Potentiometer_Bourns_3339W_Horizontal","Potentiometer_THT/Potentiometer_Bourns_3386C_Horizontal","Potentiometer_THT/Potentiometer_Bourns_3386F_Vertical","Potentiometer_THT/Potentiometer_Bourns_3386H_Horizontal","Potentiometer_THT/Potentiometer_Bourns_3386P_Vertical","Potentiometer_THT/Potentiometer_Bourns_3386W_Horizontal","Potentiometer_THT/Potentiometer_Bourns_3386X_Horizontal","Potentiometer_THT/Potentiometer_Bourns_PTA1543_Single_Slide","Potentiometer_THT/Potentiometer_Bourns_PTA2043_Single_Slide","Potentiometer_THT/Potentiometer_Bourns_PTA3043_Single_Slide","Potentiometer_THT/Potentiometer_Bourns_PTA4543_Single_Slide","Potentiometer_THT/Potentiometer_Bourns_PTA6043_Single_Slide","Potentiometer_THT/Potentiometer_Bourns_PTV09A-1_Single_Vertical","Potentiometer_THT/Potentiometer_Bourns_PTV09A-2_Single_Horizontal","Potentiometer_THT/Potentiometer_Bourns_PTV112-4_Dual_Vertical","Potentiometer_THT/Potentiometer_Omeg_PC16BU_Horizontal","Potentiometer_THT/Potentiometer_Omeg_PC16BU_Vertical","Potentiometer_THT/Potentiometer_Piher_PC-16_Dual_Horizontal","Potentiometer_THT/Potentiometer_Piher_PC-16_Single_Horizontal","Potentiometer_THT/Potentiometer_Piher_PC-16_Single_Vertical","Potentiometer_THT/Potentiometer_Piher_PC-16_Triple_Horizontal","Potentiometer_THT/Potentiometer_Piher_PT-10-H01_Horizontal","Potentiometer_THT/Potentiometer_Piher_PT-10-H05_Horizontal","Potentiometer_THT/Potentiometer_Piher_PT-10-V05_Vertical","Potentiometer_THT/Potentiometer_Piher_PT-10-V10_Vertical","Potentiometer_THT/Potentiometer_Piher_PT-10-V10_Vertical_Hole","Potentiometer_THT/Potentiometer_Piher_PT-15-H01_Horizontal","Potentiometer_THT/Potentiometer_Piher_PT-15-H05_Horizontal","Potentiometer_THT/Potentiometer_Piher_PT-15-H06_Horizontal","Potentiometer_THT/Potentiometer_Piher_PT-15-H25_Horizontal","Potentiometer_THT/Potentiometer_Piher_PT-15-V02_Vertical","Potentiometer_THT/Potentiometer_Piher_PT-15-V02_Vertical_Hole","Potentiometer_THT/Potentiometer_Piher_PT-15-V15_Vertical","Potentiometer_THT/Potentiometer_Piher_PT-15-V15_Vertical_Hole","Potentiometer_THT/Potentiometer_Piher_PT-6-H_Horizontal","Potentiometer_THT/Potentiometer_Piher_PT-6-V_Vertical","Potentiometer_THT/Potentiometer_Piher_PT-6-V_Vertical_Hole","Potentiometer_THT/Potentiometer_Piher_T-16H_Double_Horizontal","Potentiometer_THT/Potentiometer_Piher_T-16H_Single_Horizontal","Potentiometer_THT/Potentiometer_Piher_T-16L_Single_Vertical_Hole","Potentiometer_THT/Potentiometer_Runtron_RM-063_Horizontal","Potentiometer_THT/Potentiometer_Runtron_RM-065_Vertical","Potentiometer_THT/Potentiometer_TT_P0915N","Potentiometer_THT/Potentiometer_Vishay_148-149_Dual_Horizontal","Potentiometer_THT/Potentiometer_Vishay_148-149_Single_Horizontal","Potentiometer_THT/Potentiometer_Vishay_148-149_Single_Vertical","Potentiometer_THT/Potentiometer_Vishay_148E-149E_Dual_Horizontal","Potentiometer_THT/Potentiometer_Vishay_148E-149E_Single_Horizontal","Potentiometer_THT/Potentiometer_Vishay_248BH-249BH_Single_Horizontal","Potentiometer_THT/Potentiometer_Vishay_248GJ-249GJ_Single_Horizontal","Potentiometer_THT/Potentiometer_Vishay_248GJ-249GJ_Single_Vertical","Potentiometer_THT/Potentiometer_Vishay_43_Horizontal","Potentiometer_THT/Potentiometer_Vishay_T7-YA_Single_Vertical","Potentiometer_THT/Potentiometer_Vishay_T73XW_Horizontal","Potentiometer_THT/Potentiometer_Vishay_T73XX_Horizontal","Potentiometer_THT/Potentiometer_Vishay_T73YP_Vertical","Potentiometer_THT/Potentiometer_Vishay_T93XA_Horizontal","Potentiometer_THT/Potentiometer_Vishay_T93YA_Vertical","RF/Skyworks_SKY13575_639LF","RF/Skyworks_SKY65404-31","RF_Antenna/AVX_M620720","RF_Antenna/Abracon_APAES868R8060C16-T","RF_Antenna/Abracon_PRO-OB-440","RF_Antenna/Abracon_PRO-OB-471","RF_Antenna/Antenova_SR4G013_GPS","RF_Antenna/Astrocast_AST50127-00","RF_Antenna/Coilcraft_MA5532-AE_RFID","RF_Antenna/Johanson_2450AT18x100","RF_Antenna/Johanson_2450AT18x100_2400-2500Mhz","RF_Antenna/Johanson_2450AT43F0100","RF_Antenna/Johanson_2450AT43F0100_2400-2500Mhz","RF_Antenna/Molex_47948-0001_2.4Ghz","RF_Antenna/NiceRF_SW868-TH13_868Mhz","RF_Antenna/Pulse_W3000","RF_Antenna/Pulse_W3011","RF_Antenna/Texas_SWRA117D_2.4GHz_Left","RF_Antenna/Texas_SWRA117D_2.4GHz_Right","RF_Antenna/Texas_SWRA416_868MHz_915MHz","RF_Converter/Anaren_0805_2012Metric-6","RF_Converter/Balun_Johanson_0896BM15A0001","RF_Converter/Balun_Johanson_0900FM15K0039","RF_Converter/Balun_Johanson_0900PC15J0013","RF_Converter/Balun_Johanson_1.6x0.8mm","RF_Converter/Balun_Johanson_5400BL15B050E","RF_Converter/RF_Attenuator_Susumu_PAT1220","RF_GPS/Linx_RXM-GPS","RF_GPS/OriginGPS_ORG1510","RF_GPS/Quectel_L70-R","RF_GPS/Quectel_L76","RF_GPS/Quectel_L80-R","RF_GPS/Quectel_L96","RF_GPS/SIM28ML","RF_GPS/Sierra_XA11X0","RF_GPS/Sierra_XM11X0","RF_GPS/ublox_LEA","RF_GPS/ublox_MAX","RF_GPS/ublox_NEO","RF_GPS/ublox_SAM-M8Q","RF_GPS/ublox_SAM-M8Q_HandSolder","RF_GPS/ublox_ZED","RF_GPS/ublox_ZOE_M8","RF_GSM/Quectel_BC66","RF_GSM/Quectel_BC95","RF_GSM/Quectel_BG95","RF_GSM/Quectel_BG96","RF_GSM/Quectel_M95","RF_GSM/SIMCom_SIM800C","RF_GSM/SIMCom_SIM900","RF_GSM/Telit_SE150A4","RF_GSM/Telit_xL865","RF_GSM/ublox_LENA-R8_LGA-100","RF_GSM/ublox_SARA_LGA-96","RF_Mini-Circuits/Mini-Circuits_BK377","RF_Mini-Circuits/Mini-Circuits_BK377_LandPatternPL-005","RF_Mini-Circuits/Mini-Circuits_CD541_H2.08mm","RF_Mini-Circuits/Mini-Circuits_CD542_H2.84mm","RF_Mini-Circuits/Mini-Circuits_CD542_LandPatternPL-052","RF_Mini-Circuits/Mini-Circuits_CD542_LandPatternPL-094","RF_Mini-Circuits/Mini-Circuits_CD636_H4.11mm","RF_Mini-Circuits/Mini-Circuits_CD636_LandPatternPL-035","RF_Mini-Circuits/Mini-Circuits_CD637_H5.23mm","RF_Mini-Circuits/Mini-Circuits_CK605","RF_Mini-Circuits/Mini-Circuits_CK605_LandPatternPL-012","RF_Mini-Circuits/Mini-Circuits_DB1627","RF_Mini-Circuits/Mini-Circuits_GP1212","RF_Mini-Circuits/Mini-Circuits_GP1212_LandPatternPL-176","RF_Mini-Circuits/Mini-Circuits_GP731","RF_Mini-Circuits/Mini-Circuits_GP731_LandPatternPL-176","RF_Mini-Circuits/Mini-Circuits_HF1139","RF_Mini-Circuits/Mini-Circuits_HF1139_LandPatternPL-230","RF_Mini-Circuits/Mini-Circuits_HQ1157","RF_Mini-Circuits/Mini-Circuits_HZ1198","RF_Mini-Circuits/Mini-Circuits_HZ1198_LandPatternPL-247","RF_Mini-Circuits/Mini-Circuits_MMM168","RF_Mini-Circuits/Mini-Circuits_MMM168_LandPatternPL-225","RF_Mini-Circuits/Mini-Circuits_QQQ130_ClockwisePinNumbering","RF_Mini-Circuits/Mini-Circuits_QQQ130_LandPattern_PL-236_ClockwisePinNumbering","RF_Mini-Circuits/Mini-Circuits_TT1224_ClockwisePinNumbering","RF_Mini-Circuits/Mini-Circuits_TT1224_LandPatternPL-258_ClockwisePinNumbering","RF_Mini-Circuits/Mini-Circuits_TTT167","RF_Mini-Circuits/Mini-Circuits_TTT167_LandPatternPL-079","RF_Mini-Circuits/Mini-Circuits_YY161","RF_Mini-Circuits/Mini-Circuits_YY161_LandPatternPL-049","RF_Module/Ai-Thinker-Ra-01-LoRa","RF_Module/Astrocast_AST50147-00","RF_Module/Atmel_ATSAMR21G18-MR210UA_NoRFPads","RF_Module/BLE112-A","RF_Module/BM78SPPS5xC2","RF_Module/CMWX1ZZABZ","RF_Module/CYBLE-21Pin-10x10mm","RF_Module/DWM1000","RF_Module/DecaWave_DWM1001","RF_Module/Digi_XBee_SMT","RF_Module/E18-MS1-PCB","RF_Module/E73-2G4M04S","RF_Module/ESP-01","RF_Module/ESP-07","RF_Module/ESP-12E","RF_Module/ESP-WROOM-02","RF_Module/ESP32-C3-DevKitM-1","RF_Module/ESP32-C3-WROOM-02","RF_Module/ESP32-C3-WROOM-02U","RF_Module/ESP32-C6-MINI-1","RF_Module/ESP32-S2-MINI-1","RF_Module/ESP32-S2-MINI-1U","RF_Module/ESP32-S2-WROVER","RF_Module/ESP32-S3-WROOM-1","RF_Module/ESP32-S3-WROOM-1U","RF_Module/ESP32-S3-WROOM-2","RF_Module/ESP32-WROOM-32","RF_Module/ESP32-WROOM-32D","RF_Module/ESP32-WROOM-32E","RF_Module/ESP32-WROOM-32U","RF_Module/ESP32-WROOM-32UE","RF_Module/Garmin_M8-35_9.8x14.0mm_Layout6x6_P1.5mm","RF_Module/HOPERF_RFM69HW","RF_Module/HOPERF_RFM9XW_SMD","RF_Module/HOPERF_RFM9XW_THT","RF_Module/Heltec_HT-CT62","RF_Module/IQRF_TRx2DA_KON-SIM-01","RF_Module/IQRF_TRx2D_KON-SIM-01","RF_Module/Jadak_Thingmagic_M6e-Nano","RF_Module/Laird_BL652","RF_Module/Laird_BL653","RF_Module/MCU_Seeed_ESP32C3","RF_Module/MOD-nRF8001","RF_Module/Microchip_BM83","RF_Module/Microchip_RN4871","RF_Module/Modtronix_inAir9","RF_Module/MonoWireless_TWE-L-WX","RF_Module/NINA-B111","RF_Module/Particle_P1","RF_Module/RAK3172","RF_Module/RAK4200","RF_Module/RAK811","RF_Module/RFDigital_RFD77101","RF_Module/RMC20452T","RF_Module/RN2483","RF_Module/RN42","RF_Module/RN42N","RF_Module/Raytac_MDBT42Q","RF_Module/Raytac_MDBT50Q","RF_Module/ST-SiP-LGA-86-11x7.3mm","RF_Module/ST_SPBTLE","RF_Module/TD1205","RF_Module/TD1208","RF_Module/Taiyo-Yuden_EYSGJNZWY","RF_Module/WEMOS_C3_mini","RF_Module/WEMOS_D1_mini_light","RF_Module/ZETA-433-SO_SMD","RF_Module/ZETA-433-SO_THT","RF_Module/nRF24L01_Breakout","RF_Shielding/Laird_Technologies_97-2002_25.40x25.40mm","RF_Shielding/Laird_Technologies_97-2003_12.70x13.37mm","RF_Shielding/Laird_Technologies_BMI-S-101_13.66x12.70mm","RF_Shielding/Laird_Technologies_BMI-S-102_16.50x16.50mm","RF_Shielding/Laird_Technologies_BMI-S-103_26.21x26.21mm","RF_Shielding/Laird_Technologies_BMI-S-104_32.00x32.00mm","RF_Shielding/Laird_Technologies_BMI-S-105_38.10x25.40mm","RF_Shielding/Laird_Technologies_BMI-S-106_36.83x33.68mm","RF_Shielding/Laird_Technologies_BMI-S-107_44.37x44.37mm","RF_Shielding/Laird_Technologies_BMI-S-201-F_13.66x12.70mm","RF_Shielding/Laird_Technologies_BMI-S-202-F_16.50x16.50mm","RF_Shielding/Laird_Technologies_BMI-S-203-F_26.21x26.21mm","RF_Shielding/Laird_Technologies_BMI-S-204-F_32.00x32.00mm","RF_Shielding/Laird_Technologies_BMI-S-205-F_38.10x25.40mm","RF_Shielding/Laird_Technologies_BMI-S-206-F_36.83x33.68mm","RF_Shielding/Laird_Technologies_BMI-S-207-F_44.37x44.37mm","RF_Shielding/Laird_Technologies_BMI-S-208-F_39.60x39.60mm","RF_Shielding/Laird_Technologies_BMI-S-209-F_29.36x18.50mm","RF_Shielding/Laird_Technologies_BMI-S-210-F_44.00x30.50mm","RF_Shielding/Laird_Technologies_BMI-S-230-F_50.8x38.1mm","RF_Shielding/Wuerth_36103205_20x20mm","RF_Shielding/Wuerth_36103255_25x25mm","RF_Shielding/Wuerth_36103305_30x30mm","RF_Shielding/Wuerth_36103505_50x50mm","RF_Shielding/Wuerth_36103605_60x60mm","RF_Shielding/Wuerth_36503205_20x20mm","RF_Shielding/Wuerth_36503255_25x25mm","RF_Shielding/Wuerth_36503305_30x30mm","RF_Shielding/Wuerth_36503505_50x50mm","RF_Shielding/Wuerth_36503605_60x60mm","RF_WiFi/USR-C322","Relay_SMD/Relay_2P2T_10x6mm_TE_IMxxG","Relay_SMD/Relay_DPDT_AXICOM_IMSeries_JLeg","Relay_SMD/Relay_DPDT_FRT5_SMD","Relay_SMD/Relay_DPDT_Kemet_EE2_NU","Relay_SMD/Relay_DPDT_Kemet_EE2_NUH","Relay_SMD/Relay_DPDT_Kemet_EE2_NUH_DoubleCoil","Relay_SMD/Relay_DPDT_Kemet_EE2_NUX_DoubleCoil","Relay_SMD/Relay_DPDT_Kemet_EE2_NUX_NKX","Relay_SMD/Relay_DPDT_Kemet_EE2_NU_DoubleCoil","Relay_SMD/Relay_DPDT_Omron_G6H-2F","Relay_SMD/Relay_DPDT_Omron_G6K-2F-Y","Relay_SMD/Relay_DPDT_Omron_G6K-2F","Relay_SMD/Relay_DPDT_Omron_G6K-2G-Y","Relay_SMD/Relay_DPDT_Omron_G6K-2G","Relay_SMD/Relay_DPDT_Omron_G6S-2F","Relay_SMD/Relay_DPDT_Omron_G6S-2G","Relay_SMD/Relay_DPDT_Omron_G6SK-2F","Relay_SMD/Relay_DPDT_Omron_G6SK-2G","Relay_SMD/Relay_Fujitsu_FTR-B3S","Relay_SMD/Relay_SPDT_AXICOM_HF3Series_50ohms_Pitch1.27mm","Relay_SMD/Relay_SPDT_AXICOM_HF3Series_75ohms_Pitch1.27mm","Relay_THT/Relay_1-Form-A_Schrack-RYII_RM5mm","Relay_THT/Relay_1-Form-B_Schrack-RYII_RM5mm","Relay_THT/Relay_1-Form-C_Schrack-RYII_RM3.2mm","Relay_THT/Relay_3PST_COTO_3650","Relay_THT/Relay_3PST_COTO_3660","Relay_THT/Relay_DPDT_AXICOM_IMSeries_Pitch3.2mm","Relay_THT/Relay_DPDT_AXICOM_IMSeries_Pitch5.08mm","Relay_THT/Relay_DPDT_FRT5","Relay_THT/Relay_DPDT_Finder_30.22","Relay_THT/Relay_DPDT_Finder_40.52","Relay_THT/Relay_DPDT_Finder_40.62","Relay_THT/Relay_DPDT_Fujitsu_FTR-F1C","Relay_THT/Relay_DPDT_Hongfa_HF115F-2Z-x4","Relay_THT/Relay_DPDT_Kemet_EC2_NJ","Relay_THT/Relay_DPDT_Kemet_EC2_NJ_DoubleCoil","Relay_THT/Relay_DPDT_Kemet_EC2_NU","Relay_THT/Relay_DPDT_Kemet_EC2_NU_DoubleCoil","Relay_THT/Relay_DPDT_Omron_G2RL-2","Relay_THT/Relay_DPDT_Omron_G5V-2","Relay_THT/Relay_DPDT_Omron_G6A","Relay_THT/Relay_DPDT_Omron_G6AK","Relay_THT/Relay_DPDT_Omron_G6H-2","Relay_THT/Relay_DPDT_Omron_G6K-2P-Y","Relay_THT/Relay_DPDT_Omron_G6K-2P","Relay_THT/Relay_DPDT_Omron_G6S-2","Relay_THT/Relay_DPDT_Omron_G6SK-2","Relay_THT/Relay_DPDT_Panasonic_JW2","Relay_THT/Relay_DPDT_Schrack-RT2-FormC-Dual-Coil_RM5mm","Relay_THT/Relay_DPDT_Schrack-RT2-FormC_RM5mm","Relay_THT/Relay_DPST_COTO_3602","Relay_THT/Relay_DPST_Fujitsu_FTR-F1A","Relay_THT/Relay_DPST_Omron_G2RL-2A","Relay_THT/Relay_DPST_Schrack-RT2-FormA_RM5mm","Relay_THT/Relay_NCR_HHG1D-1","Relay_THT/Relay_SPDT_CUI_SR5","Relay_THT/Relay_SPDT_Finder_32.21-x000","Relay_THT/Relay_SPDT_Finder_34.51_Horizontal","Relay_THT/Relay_SPDT_Finder_34.51_Vertical","Relay_THT/Relay_SPDT_Finder_36.11","Relay_THT/Relay_SPDT_Finder_40.11","Relay_THT/Relay_SPDT_Finder_40.31","Relay_THT/Relay_SPDT_Finder_40.41","Relay_THT/Relay_SPDT_Finder_40.51","Relay_THT/Relay_SPDT_Finder_40.61","Relay_THT/Relay_SPDT_Fujitsu_FTR-LYCA005x_FormC_Vertical","Relay_THT/Relay_SPDT_HJR-4102","Relay_THT/Relay_SPDT_Hongfa_HF3F-L-xx-1ZL1T","Relay_THT/Relay_SPDT_Hongfa_HF3F-L-xx-1ZL2T-R","Relay_THT/Relay_SPDT_Hongfa_HF3F-L-xx-1ZL2T","Relay_THT/Relay_SPDT_Hongfa_JQC-3FF_0XX-1Z","Relay_THT/Relay_SPDT_HsinDa_Y14","Relay_THT/Relay_SPDT_Omron-G5LE-1","Relay_THT/Relay_SPDT_Omron-G5Q-1","Relay_THT/Relay_SPDT_Omron_G2RL-1-E","Relay_THT/Relay_SPDT_Omron_G2RL-1","Relay_THT/Relay_SPDT_Omron_G5V-1","Relay_THT/Relay_SPDT_Omron_G6E","Relay_THT/Relay_SPDT_Omron_G6EK","Relay_THT/Relay_SPDT_Panasonic_DR-L","Relay_THT/Relay_SPDT_Panasonic_DR-L2","Relay_THT/Relay_SPDT_Panasonic_DR","Relay_THT/Relay_SPDT_Panasonic_JW1_FormC","Relay_THT/Relay_SPDT_PotterBrumfield_T9AP5D52_12V30A","Relay_THT/Relay_SPDT_RAYEX-L90","Relay_THT/Relay_SPDT_RAYEX-L90S","Relay_THT/Relay_SPDT_SANYOU_SRD_Series_Form_C","Relay_THT/Relay_SPDT_Schrack-RP-II-1-16A-FormC_RM5mm","Relay_THT/Relay_SPDT_Schrack-RP-II-1-FormC_RM3.5mm","Relay_THT/Relay_SPDT_Schrack-RP-II-1-FormC_RM5mm","Relay_THT/Relay_SPDT_Schrack-RT1-16A-FormC_RM5mm","Relay_THT/Relay_SPDT_Schrack-RT1-FormC_RM3.5mm","Relay_THT/Relay_SPDT_Schrack-RT1-FormC_RM5mm","Relay_THT/Relay_SPDT_StandexMeder_SIL_Form1C","Relay_THT/Relay_SPST-NO_Fujitsu_FTR-LYAA005x_FormA_Vertical","Relay_THT/Relay_SPST_Finder_32.21-x300","Relay_THT/Relay_SPST_Hongfa_HF3F-L-xx-1HL1T","Relay_THT/Relay_SPST_Hongfa_HF3F-L-xx-1HL2T-R","Relay_THT/Relay_SPST_Hongfa_HF3F-L-xx-1HL2T","Relay_THT/Relay_SPST_Hongfa_JQC-3FF_0XX-1H","Relay_THT/Relay_SPST_Omron-G5Q-1A","Relay_THT/Relay_SPST_Omron_G2RL-1A-E","Relay_THT/Relay_SPST_Omron_G2RL-1A","Relay_THT/Relay_SPST_Omron_G5NB","Relay_THT/Relay_SPST_Omron_G5PZ","Relay_THT/Relay_SPST_Panasonic_ADW11","Relay_THT/Relay_SPST_Panasonic_ALFG_FormA","Relay_THT/Relay_SPST_Panasonic_ALFG_FormA_CircularHoles","Relay_THT/Relay_SPST_Panasonic_JW1_FormA","Relay_THT/Relay_SPST_PotterBrumfield_T9AP1D52_12V30A","Relay_THT/Relay_SPST_RAYEX-L90A","Relay_THT/Relay_SPST_RAYEX-L90AS","Relay_THT/Relay_SPST_RAYEX-L90B","Relay_THT/Relay_SPST_RAYEX-L90BS","Relay_THT/Relay_SPST_SANYOU_SRD_Series_Form_A","Relay_THT/Relay_SPST_SANYOU_SRD_Series_Form_B","Relay_THT/Relay_SPST_Schrack-RP-II-1-16A-FormA_RM5mm","Relay_THT/Relay_SPST_Schrack-RP-II-1-FormA_RM3.5mm","Relay_THT/Relay_SPST_Schrack-RP-II-1-FormA_RM5mm","Relay_THT/Relay_SPST_Schrack-RP3SL-1coil_RM5mm","Relay_THT/Relay_SPST_Schrack-RP3SL_RM5mm","Relay_THT/Relay_SPST_Schrack-RT1-16A-FormA_RM5mm","Relay_THT/Relay_SPST_Schrack-RT1-FormA_RM3.5mm","Relay_THT/Relay_SPST_Schrack-RT1-FormA_RM5mm","Relay_THT/Relay_SPST_StandexMeder_MS_Form1AB","Relay_THT/Relay_SPST_StandexMeder_SIL_Form1A","Relay_THT/Relay_SPST_StandexMeder_SIL_Form1B","Relay_THT/Relay_SPST_TE_PCH-1xxx2M","Relay_THT/Relay_SPST_TE_PCN-1xxD3MHZ","Relay_THT/Relay_SPST_Zettler-AZSR131","Relay_THT/Relay_Socket_3PDT_Omron_PLE11-0","Relay_THT/Relay_Socket_4PDT_Omron_PY14-02","Relay_THT/Relay_Socket_DPDT_Finder_96.12","Relay_THT/Relay_Socket_DPDT_Omron_PLE08-0","Relay_THT/Relay_StandexMeder_DIP_HighProfile","Relay_THT/Relay_StandexMeder_DIP_LowProfile","Relay_THT/Relay_StandexMeder_UMS","Relay_THT/Relay_Tyco_V23072_Sealed","Resistor_SMD/R_01005_0402Metric","Resistor_SMD/R_01005_0402Metric_Pad0.57x0.30mm_HandSolder","Resistor_SMD/R_0201_0603Metric","Resistor_SMD/R_0201_0603Metric_Pad0.64x0.40mm_HandSolder","Resistor_SMD/R_0402_1005Metric","Resistor_SMD/R_0402_1005Metric_Pad0.72x0.64mm_HandSolder","Resistor_SMD/R_0508_1220Metric","Resistor_SMD/R_0508_1220Metric_Pad1.12x2.15mm_HandSolder","Resistor_SMD/R_0603_1608Metric","Resistor_SMD/R_0603_1608Metric_Pad0.98x0.95mm_HandSolder","Resistor_SMD/R_0612_1632Metric","Resistor_SMD/R_0612_1632Metric_Pad1.18x3.40mm_HandSolder","Resistor_SMD/R_0805_2012Metric","Resistor_SMD/R_0805_2012Metric_Pad1.20x1.40mm_HandSolder","Resistor_SMD/R_0815_2038Metric","Resistor_SMD/R_0815_2038Metric_Pad1.20x4.05mm_HandSolder","Resistor_SMD/R_1020_2550Metric","Resistor_SMD/R_1020_2550Metric_Pad1.33x5.20mm_HandSolder","Resistor_SMD/R_1206_3216Metric","Resistor_SMD/R_1206_3216Metric_Pad1.30x1.75mm_HandSolder","Resistor_SMD/R_1210_3225Metric","Resistor_SMD/R_1210_3225Metric_Pad1.30x2.65mm_HandSolder","Resistor_SMD/R_1218_3246Metric","Resistor_SMD/R_1218_3246Metric_Pad1.22x4.75mm_HandSolder","Resistor_SMD/R_1225_3264Metric","Resistor_SMD/R_1225_3264Metric_Pad1.47x6.45mm_HandSolder","Resistor_SMD/R_1812_4532Metric","Resistor_SMD/R_1812_4532Metric_Pad1.30x3.40mm_HandSolder","Resistor_SMD/R_2010_5025Metric","Resistor_SMD/R_2010_5025Metric_Pad1.40x2.65mm_HandSolder","Resistor_SMD/R_2512_6332Metric","Resistor_SMD/R_2512_6332Metric_Pad1.40x3.35mm_HandSolder","Resistor_SMD/R_2816_7142Metric","Resistor_SMD/R_2816_7142Metric_Pad3.20x4.45mm_HandSolder","Resistor_SMD/R_4020_10251Metric","Resistor_SMD/R_4020_10251Metric_Pad1.65x5.30mm_HandSolder","Resistor_SMD/R_Array_Concave_2x0603","Resistor_SMD/R_Array_Concave_4x0402","Resistor_SMD/R_Array_Concave_4x0603","Resistor_SMD/R_Array_Convex_2x0402","Resistor_SMD/R_Array_Convex_2x0603","Resistor_SMD/R_Array_Convex_2x0606","Resistor_SMD/R_Array_Convex_2x1206","Resistor_SMD/R_Array_Convex_4x0402","Resistor_SMD/R_Array_Convex_4x0603","Resistor_SMD/R_Array_Convex_4x0612","Resistor_SMD/R_Array_Convex_4x1206","Resistor_SMD/R_Array_Convex_5x0603","Resistor_SMD/R_Array_Convex_5x1206","Resistor_SMD/R_Array_Convex_8x0602","Resistor_SMD/R_Cat16-2","Resistor_SMD/R_Cat16-4","Resistor_SMD/R_Cat16-8","Resistor_SMD/R_MELF_MMB-0207","Resistor_SMD/R_MicroMELF_MMU-0102","Resistor_SMD/R_MiniMELF_MMA-0204","Resistor_SMD/R_Shunt_Isabellenhuette_BVR4026","Resistor_SMD/R_Shunt_Ohmite_LVK12","Resistor_SMD/R_Shunt_Ohmite_LVK20","Resistor_SMD/R_Shunt_Ohmite_LVK24","Resistor_SMD/R_Shunt_Ohmite_LVK25","Resistor_SMD/R_Shunt_Vishay_WSK2512_6332Metric_T1.19mm","Resistor_SMD/R_Shunt_Vishay_WSK2512_6332Metric_T2.21mm","Resistor_SMD/R_Shunt_Vishay_WSK2512_6332Metric_T2.66mm","Resistor_SMD/R_Shunt_Vishay_WSKW0612","Resistor_SMD/R_Shunt_Vishay_WSR2_WSR3","Resistor_SMD/R_Shunt_Vishay_WSR2_WSR3_KelvinConnection","Resistor_THT/R_Array_SIP10","Resistor_THT/R_Array_SIP11","Resistor_THT/R_Array_SIP12","Resistor_THT/R_Array_SIP13","Resistor_THT/R_Array_SIP14","Resistor_THT/R_Array_SIP4","Resistor_THT/R_Array_SIP5","Resistor_THT/R_Array_SIP6","Resistor_THT/R_Array_SIP7","Resistor_THT/R_Array_SIP8","Resistor_THT/R_Array_SIP9","Resistor_THT/R_Axial_DIN0204_L3.6mm_D1.6mm_P1.90mm_Vertical","Resistor_THT/R_Axial_DIN0204_L3.6mm_D1.6mm_P2.54mm_Vertical","Resistor_THT/R_Axial_DIN0204_L3.6mm_D1.6mm_P5.08mm_Horizontal","Resistor_THT/R_Axial_DIN0204_L3.6mm_D1.6mm_P5.08mm_Vertical","Resistor_THT/R_Axial_DIN0204_L3.6mm_D1.6mm_P7.62mm_Horizontal","Resistor_THT/R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal","Resistor_THT/R_Axial_DIN0207_L6.3mm_D2.5mm_P15.24mm_Horizontal","Resistor_THT/R_Axial_DIN0207_L6.3mm_D2.5mm_P2.54mm_Vertical","Resistor_THT/R_Axial_DIN0207_L6.3mm_D2.5mm_P5.08mm_Vertical","Resistor_THT/R_Axial_DIN0207_L6.3mm_D2.5mm_P7.62mm_Horizontal","Resistor_THT/R_Axial_DIN0309_L9.0mm_D3.2mm_P12.70mm_Horizontal","Resistor_THT/R_Axial_DIN0309_L9.0mm_D3.2mm_P15.24mm_Horizontal","Resistor_THT/R_Axial_DIN0309_L9.0mm_D3.2mm_P2.54mm_Vertical","Resistor_THT/R_Axial_DIN0309_L9.0mm_D3.2mm_P20.32mm_Horizontal","Resistor_THT/R_Axial_DIN0309_L9.0mm_D3.2mm_P25.40mm_Horizontal","Resistor_THT/R_Axial_DIN0309_L9.0mm_D3.2mm_P5.08mm_Vertical","Resistor_THT/R_Axial_DIN0411_L9.9mm_D3.6mm_P12.70mm_Horizontal","Resistor_THT/R_Axial_DIN0411_L9.9mm_D3.6mm_P15.24mm_Horizontal","Resistor_THT/R_Axial_DIN0411_L9.9mm_D3.6mm_P20.32mm_Horizontal","Resistor_THT/R_Axial_DIN0411_L9.9mm_D3.6mm_P25.40mm_Horizontal","Resistor_THT/R_Axial_DIN0411_L9.9mm_D3.6mm_P5.08mm_Vertical","Resistor_THT/R_Axial_DIN0411_L9.9mm_D3.6mm_P7.62mm_Vertical","Resistor_THT/R_Axial_DIN0414_L11.9mm_D4.5mm_P15.24mm_Horizontal","Resistor_THT/R_Axial_DIN0414_L11.9mm_D4.5mm_P20.32mm_Horizontal","Resistor_THT/R_Axial_DIN0414_L11.9mm_D4.5mm_P25.40mm_Horizontal","Resistor_THT/R_Axial_DIN0414_L11.9mm_D4.5mm_P5.08mm_Vertical","Resistor_THT/R_Axial_DIN0414_L11.9mm_D4.5mm_P7.62mm_Vertical","Resistor_THT/R_Axial_DIN0516_L15.5mm_D5.0mm_P20.32mm_Horizontal","Resistor_THT/R_Axial_DIN0516_L15.5mm_D5.0mm_P25.40mm_Horizontal","Resistor_THT/R_Axial_DIN0516_L15.5mm_D5.0mm_P30.48mm_Horizontal","Resistor_THT/R_Axial_DIN0516_L15.5mm_D5.0mm_P5.08mm_Vertical","Resistor_THT/R_Axial_DIN0516_L15.5mm_D5.0mm_P7.62mm_Vertical","Resistor_THT/R_Axial_DIN0614_L14.3mm_D5.7mm_P15.24mm_Horizontal","Resistor_THT/R_Axial_DIN0614_L14.3mm_D5.7mm_P20.32mm_Horizontal","Resistor_THT/R_Axial_DIN0614_L14.3mm_D5.7mm_P25.40mm_Horizontal","Resistor_THT/R_Axial_DIN0614_L14.3mm_D5.7mm_P5.08mm_Vertical","Resistor_THT/R_Axial_DIN0614_L14.3mm_D5.7mm_P7.62mm_Vertical","Resistor_THT/R_Axial_DIN0617_L17.0mm_D6.0mm_P20.32mm_Horizontal","Resistor_THT/R_Axial_DIN0617_L17.0mm_D6.0mm_P25.40mm_Horizontal","Resistor_THT/R_Axial_DIN0617_L17.0mm_D6.0mm_P30.48mm_Horizontal","Resistor_THT/R_Axial_DIN0617_L17.0mm_D6.0mm_P5.08mm_Vertical","Resistor_THT/R_Axial_DIN0617_L17.0mm_D6.0mm_P7.62mm_Vertical","Resistor_THT/R_Axial_DIN0918_L18.0mm_D9.0mm_P22.86mm_Horizontal","Resistor_THT/R_Axial_DIN0918_L18.0mm_D9.0mm_P25.40mm_Horizontal","Resistor_THT/R_Axial_DIN0918_L18.0mm_D9.0mm_P30.48mm_Horizontal","Resistor_THT/R_Axial_DIN0918_L18.0mm_D9.0mm_P7.62mm_Vertical","Resistor_THT/R_Axial_DIN0922_L20.0mm_D9.0mm_P25.40mm_Horizontal","Resistor_THT/R_Axial_DIN0922_L20.0mm_D9.0mm_P30.48mm_Horizontal","Resistor_THT/R_Axial_DIN0922_L20.0mm_D9.0mm_P7.62mm_Vertical","Resistor_THT/R_Axial_Power_L20.0mm_W6.4mm_P22.40mm","Resistor_THT/R_Axial_Power_L20.0mm_W6.4mm_P25.40mm","Resistor_THT/R_Axial_Power_L20.0mm_W6.4mm_P30.48mm","Resistor_THT/R_Axial_Power_L20.0mm_W6.4mm_P5.08mm_Vertical","Resistor_THT/R_Axial_Power_L20.0mm_W6.4mm_P7.62mm_Vertical","Resistor_THT/R_Axial_Power_L25.0mm_W6.4mm_P27.94mm","Resistor_THT/R_Axial_Power_L25.0mm_W6.4mm_P30.48mm","Resistor_THT/R_Axial_Power_L25.0mm_W9.0mm_P10.16mm_Vertical","Resistor_THT/R_Axial_Power_L25.0mm_W9.0mm_P27.94mm","Resistor_THT/R_Axial_Power_L25.0mm_W9.0mm_P30.48mm","Resistor_THT/R_Axial_Power_L25.0mm_W9.0mm_P7.62mm_Vertical","Resistor_THT/R_Axial_Power_L38.0mm_W6.4mm_P40.64mm","Resistor_THT/R_Axial_Power_L38.0mm_W6.4mm_P45.72mm","Resistor_THT/R_Axial_Power_L38.0mm_W9.0mm_P40.64mm","Resistor_THT/R_Axial_Power_L38.0mm_W9.0mm_P45.72mm","Resistor_THT/R_Axial_Power_L48.0mm_W12.5mm_P10.16mm_Vertical","Resistor_THT/R_Axial_Power_L48.0mm_W12.5mm_P55.88mm","Resistor_THT/R_Axial_Power_L48.0mm_W12.5mm_P60.96mm","Resistor_THT/R_Axial_Power_L48.0mm_W12.5mm_P7.62mm_Vertical","Resistor_THT/R_Axial_Power_L50.0mm_W9.0mm_P55.88mm","Resistor_THT/R_Axial_Power_L50.0mm_W9.0mm_P60.96mm","Resistor_THT/R_Axial_Power_L60.0mm_W14.0mm_P10.16mm_Vertical","Resistor_THT/R_Axial_Power_L60.0mm_W14.0mm_P66.04mm","Resistor_THT/R_Axial_Power_L60.0mm_W14.0mm_P71.12mm","Resistor_THT/R_Axial_Power_L75.0mm_W9.0mm_P81.28mm","Resistor_THT/R_Axial_Power_L75.0mm_W9.0mm_P86.36mm","Resistor_THT/R_Axial_Shunt_L22.2mm_W8.0mm_PS14.30mm_P25.40mm","Resistor_THT/R_Axial_Shunt_L22.2mm_W9.5mm_PS14.30mm_P25.40mm","Resistor_THT/R_Axial_Shunt_L35.3mm_W9.5mm_PS25.40mm_P38.10mm","Resistor_THT/R_Axial_Shunt_L47.6mm_W12.7mm_PS34.93mm_P50.80mm","Resistor_THT/R_Axial_Shunt_L47.6mm_W9.5mm_PS34.93mm_P50.80mm","Resistor_THT/R_Bare_Metal_Element_L12.4mm_W4.8mm_P11.40mm","Resistor_THT/R_Bare_Metal_Element_L16.3mm_W4.8mm_P15.30mm","Resistor_THT/R_Bare_Metal_Element_L21.3mm_W4.8mm_P20.30mm","Resistor_THT/R_Box_L13.0mm_W4.0mm_P9.00mm","Resistor_THT/R_Box_L14.0mm_W5.0mm_P9.00mm","Resistor_THT/R_Box_L26.0mm_W5.0mm_P20.00mm","Resistor_THT/R_Box_L8.4mm_W2.5mm_P5.08mm","Resistor_THT/R_Radial_Power_L11.0mm_W7.0mm_P5.00mm","Resistor_THT/R_Radial_Power_L12.0mm_W8.0mm_P5.00mm","Resistor_THT/R_Radial_Power_L13.0mm_W9.0mm_P5.00mm","Resistor_THT/R_Radial_Power_L16.1mm_W9.0mm_P7.37mm","Resistor_THT/R_Radial_Power_L7.0mm_W8.0mm_Px2.40mm_Py2.30mm","Resistor_THT/R_Radial_Power_L9.0mm_W10.0mm_Px2.70mm_Py2.30mm","Rotary_Encoder/RotaryEncoder_Alps_EC11E-Switch_Vertical_H20mm","Rotary_Encoder/RotaryEncoder_Alps_EC11E-Switch_Vertical_H20mm_CircularMountingHoles","Rotary_Encoder/RotaryEncoder_Alps_EC11E-Switch_Vertical_H20mm_MountingHoles","Rotary_Encoder/RotaryEncoder_Alps_EC11E_Vertical_H20mm","Rotary_Encoder/RotaryEncoder_Alps_EC11E_Vertical_H20mm_CircularMountingHoles","Rotary_Encoder/RotaryEncoder_Alps_EC12E-Switch_Vertical_H20mm","Rotary_Encoder/RotaryEncoder_Alps_EC12E-Switch_Vertical_H20mm_CircularMountingHoles","Rotary_Encoder/RotaryEncoder_Alps_EC12E_Vertical_H20mm","Rotary_Encoder/RotaryEncoder_Alps_EC12E_Vertical_H20mm_CircularMountingHoles","Rotary_Encoder/RotaryEncoder_Bourns_Horizontal_PEC09-2xxxF-Nxxxx","Rotary_Encoder/RotaryEncoder_Bourns_Horizontal_PEC09-2xxxF-Sxxxx","Rotary_Encoder/RotaryEncoder_Bourns_Horizontal_PEC12R-2x17F-Nxxxx","Rotary_Encoder/RotaryEncoder_Bourns_Horizontal_PEC12R-2x17F-Sxxxx","Rotary_Encoder/RotaryEncoder_Bourns_Horizontal_PEL12D-2x16F-Sxxxx","Rotary_Encoder/RotaryEncoder_Bourns_Horizontal_PEL12D-2x18F-Sxxxx","Rotary_Encoder/RotaryEncoder_Bourns_Horizontal_PEL12D-2x21F-Sxxxx","Rotary_Encoder/RotaryEncoder_Bourns_Horizontal_PEL12D-2x25S-Sxxxx","Rotary_Encoder/RotaryEncoder_Bourns_Horizontal_PEL12D-2x26F-Sxxxx","Rotary_Encoder/RotaryEncoder_Bourns_Horizontal_PEL12D-2x31F-Sxxxx","Rotary_Encoder/RotaryEncoder_Bourns_Vertical_PEC12R-3x17F-Nxxxx","Rotary_Encoder/RotaryEncoder_Bourns_Vertical_PEC12R-3x17F-Sxxxx","Rotary_Encoder/RotaryEncoder_Bourns_Vertical_PEL12D-4x25S-Sxxxx","Rotary_Encoder/RotaryEncoder_Bourns_Vertical_PEL12D-4xxxF-Sxxxx","Sensor/ASAIR_AM2302_P2.54mm_Lead2.75mm_TabDown","Sensor/ASAIR_AM2302_P2.54mm_Vertical","Sensor/Aosong_DHT11_5.5x12.0_P2.54mm","Sensor/Avago_APDS-9960","Sensor/LuminOX_LOX-O2","Sensor/MQ-6","Sensor/Rohm_RPR-0521RS","Sensor/SHT1x","Sensor/SPEC_110-xxx_SMD-10Pin_20x20mm_P4.0mm","Sensor/Senseair_S8_Down","Sensor/Senseair_S8_Up","Sensor/Sensirion_SCD4x-1EP_10.1x10.1mm_P1.25mm_EP4.8x4.8mm","Sensor/Sensortech_MiCS_5x7mm_P1.25mm","Sensor/TGS-5141","Sensor/Winson_GM-402B_5x5mm_P1.27mm","Sensor_Audio/CUI_CMC-4013-SMT","Sensor_Audio/Infineon_PG-LLGA-5-1","Sensor_Audio/Infineon_PG-LLGA-5-2","Sensor_Audio/InvenSense_ICS-43434-6_3.5x2.65mm","Sensor_Audio/Knowles_LGA-5_3.5x2.65mm","Sensor_Audio/Knowles_LGA-6_4.72x3.76mm","Sensor_Audio/Knowles_SPH0645LM4H-6_3.5x2.65mm","Sensor_Audio/POM-2244P-C3310-2-R","Sensor_Audio/ST_HLGA-6_3.76x4.72mm_P1.65mm","Sensor_Current/AKM_CQ_7","Sensor_Current/AKM_CQ_7S","Sensor_Current/AKM_CQ_VSOP-24_5.6x7.9mm_P0.65mm","Sensor_Current/AKM_CZ_SSOP-10_6.5x8.1mm_P0.95mm","Sensor_Current/Allegro_CB_PFF","Sensor_Current/Allegro_CB_PSF","Sensor_Current/Allegro_CB_PSS","Sensor_Current/Allegro_PSOF-7_4.8x6.4mm_P1.60mm","Sensor_Current/Allegro_QFN-12-10-1EP_3x3mm_P0.5mm","Sensor_Current/Allegro_QSOP-24_3.9x8.7mm_P0.635mm","Sensor_Current/Allegro_SIP-4","Sensor_Current/Diodes_SIP-3_4.1x1.5mm_P1.27mm","Sensor_Current/Diodes_SIP-3_4.1x1.5mm_P2.65mm","Sensor_Current/Honeywell_CSLW","Sensor_Current/LEM_CKSR","Sensor_Current/LEM_HO40-NP","Sensor_Current/LEM_HO8-NP","Sensor_Current/LEM_HO8-NSM","Sensor_Current/LEM_HTFS","Sensor_Current/LEM_HX02-P","Sensor_Current/LEM_HX03-P-SP2","Sensor_Current/LEM_HX04-P","Sensor_Current/LEM_HX05-NP","Sensor_Current/LEM_HX05-P-SP2","Sensor_Current/LEM_HX06-P","Sensor_Current/LEM_HX10-NP","Sensor_Current/LEM_HX10-P-SP2","Sensor_Current/LEM_HX15-NP","Sensor_Current/LEM_HX15-P-SP2","Sensor_Current/LEM_HX20-P-SP2","Sensor_Current/LEM_HX25-P-SP2","Sensor_Current/LEM_HX50-P-SP2","Sensor_Current/LEM_LA25-NP","Sensor_Current/LEM_LA25-P","Sensor_Current/LEM_LTSR-NP","Sensor_Distance/AMS_OLGA12","Sensor_Distance/ST_VL53L1x","Sensor_Humidity/Sensirion_DFN-4-1EP_2x2mm_P1mm_EP0.7x1.6mm","Sensor_Humidity/Sensirion_DFN-4_1.5x1.5mm_P0.8mm_SHT4x_NoCentralPad","Sensor_Humidity/Sensirion_DFN-8-1EP_2.5x2.5mm_P0.5mm_EP1.1x1.7mm","Sensor_Humidity/Texas_S-PWSON-N6-HDC2080","Sensor_Motion/Analog_LGA-16_3.25x3mm_P0.5mm_LayoutBorder3x5y","Sensor_Motion/InvenSense_QFN-24_3x3mm_P0.4mm","Sensor_Motion/InvenSense_QFN-24_3x3mm_P0.4mm_NoMask","Sensor_Motion/InvenSense_QFN-24_4x4mm_P0.5mm","Sensor_Motion/InvenSense_QFN-24_4x4mm_P0.5mm_NoMask","Sensor_Pressure/CFSensor_XGZP6859D_7x7mm","Sensor_Pressure/CFSensor_XGZP6897x","Sensor_Pressure/CFSensor_XGZP6899x","Sensor_Pressure/Freescale_98ARH99066A","Sensor_Pressure/Freescale_98ARH99089A","Sensor_Pressure/Honeywell_40PCxxxG1A","Sensor_Pressure/Honeywell_ABPDAN","Sensor_Pressure/TE_MS5525DSO-DBxxxyS","Sensor_Pressure/TE_MS5837-xxBA","Sensor_Voltage/LEM_LV25-P","Socket/3M_Textool_240-1288-00-0602J_2x20_P2.54mm","Socket/DIP_Socket-14_W4.3mm_W5.08mm_W7.62mm_W10.16mm_W10.9mm_3M_214-3339-00-0602J","Socket/DIP_Socket-16_W4.3mm_W5.08mm_W7.62mm_W10.16mm_W10.9mm_3M_216-3340-00-0602J","Socket/DIP_Socket-18_W4.3mm_W5.08mm_W7.62mm_W10.16mm_W10.9mm_3M_218-3341-00-0602J","Socket/DIP_Socket-20_W4.3mm_W5.08mm_W7.62mm_W10.16mm_W10.9mm_3M_220-3342-00-0602J","Socket/DIP_Socket-22_W6.9mm_W7.62mm_W10.16mm_W12.7mm_W13.5mm_3M_222-3343-00-0602J","Socket/DIP_Socket-24_W11.9mm_W12.7mm_W15.24mm_W17.78mm_W18.5mm_3M_224-1275-00-0602J","Socket/DIP_Socket-24_W4.3mm_W5.08mm_W7.62mm_W10.16mm_W10.9mm_3M_224-5248-00-0602J","Socket/DIP_Socket-28_W11.9mm_W12.7mm_W15.24mm_W17.78mm_W18.5mm_3M_228-1277-00-0602J","Socket/DIP_Socket-28_W6.9mm_W7.62mm_W10.16mm_W12.7mm_W13.5mm_3M_228-4817-00-0602J","Socket/DIP_Socket-32_W11.9mm_W12.7mm_W15.24mm_W17.78mm_W18.5mm_3M_232-1285-00-0602J","Socket/DIP_Socket-40_W11.9mm_W12.7mm_W15.24mm_W17.78mm_W18.5mm_3M_240-1280-00-0602J","Socket/DIP_Socket-40_W22.1mm_W22.86mm_W25.4mm_W27.94mm_W28.7mm_3M_240-3639-00-0602J","Socket/DIP_Socket-42_W11.9mm_W12.7mm_W15.24mm_W17.78mm_W18.5mm_3M_242-1281-00-0602J","Socket/Wells_648-0482211SA01","Symbol/CE-Logo_11.2x8mm_SilkScreen","Symbol/CE-Logo_16.8x12mm_SilkScreen","Symbol/CE-Logo_28x20mm_SilkScreen","Symbol/CE-Logo_42x30mm_SilkScreen","Symbol/CE-Logo_56.1x40mm_SilkScreen","Symbol/CE-Logo_8.5x6mm_SilkScreen","Symbol/ESD-Logo_13.2x12mm_SilkScreen","Symbol/ESD-Logo_22x20mm_SilkScreen","Symbol/ESD-Logo_33x30mm_SilkScreen","Symbol/ESD-Logo_44.1x40mm_SilkScreen","Symbol/ESD-Logo_6.6x6mm_SilkScreen","Symbol/ESD-Logo_8.9x8mm_SilkScreen","Symbol/EasterEgg_EWG1308-2013_ClassA","Symbol/FCC-Logo_14.6x12mm_SilkScreen","Symbol/FCC-Logo_24.2x20mm_SilkScreen","Symbol/FCC-Logo_36.3x30mm_SilkScreen","Symbol/FCC-Logo_48.3x40mm_SilkScreen","Symbol/FCC-Logo_7.3x6mm_SilkScreen","Symbol/FCC-Logo_9.6x8mm_SilkScreen","Symbol/KiCad-Logo2_12mm_Copper","Symbol/KiCad-Logo2_12mm_SilkScreen","Symbol/KiCad-Logo2_20mm_Copper","Symbol/KiCad-Logo2_20mm_SilkScreen","Symbol/KiCad-Logo2_30mm_Copper","Symbol/KiCad-Logo2_30mm_SilkScreen","Symbol/KiCad-Logo2_40mm_Copper","Symbol/KiCad-Logo2_40mm_SilkScreen","Symbol/KiCad-Logo2_5mm_Copper","Symbol/KiCad-Logo2_5mm_SilkScreen","Symbol/KiCad-Logo2_6mm_Copper","Symbol/KiCad-Logo2_6mm_SilkScreen","Symbol/KiCad-Logo2_8mm_Copper","Symbol/KiCad-Logo2_8mm_SilkScreen","Symbol/KiCad-Logo_12mm_Copper","Symbol/KiCad-Logo_12mm_SilkScreen","Symbol/KiCad-Logo_20mm_Copper","Symbol/KiCad-Logo_20mm_SilkScreen","Symbol/KiCad-Logo_30mm_Copper","Symbol/KiCad-Logo_30mm_SilkScreen","Symbol/KiCad-Logo_40mm_Copper","Symbol/KiCad-Logo_40mm_SilkScreen","Symbol/KiCad-Logo_5mm_Copper","Symbol/KiCad-Logo_5mm_SilkScreen","Symbol/KiCad-Logo_6mm_Copper","Symbol/KiCad-Logo_6mm_SilkScreen","Symbol/KiCad-Logo_8mm_Copper","Symbol/KiCad-Logo_8mm_SilkScreen","Symbol/LayerMarker_10_14x2.54mm_TextH1mm_P1.27mm_AlNum","Symbol/LayerMarker_10_14x2.54mm_TextH1mm_P1.27mm_AlNum_BottomMirrored","Symbol/LayerMarker_10_14x2.54mm_TextH1mm_P1.27mm_AlNum_LowerMirrored","Symbol/LayerMarker_10_14x2.54mm_TextH1mm_P1.27mm_Named","Symbol/LayerMarker_10_14x2.54mm_TextH1mm_P1.27mm_Named_BottomMirrored","Symbol/LayerMarker_10_14x2.54mm_TextH1mm_P1.27mm_Named_LowerMirrored","Symbol/LayerMarker_12_16.5x2.54mm_TextH1mm_P1.27mm_AlNum","Symbol/LayerMarker_12_16.5x2.54mm_TextH1mm_P1.27mm_AlNum_BottomMirrored","Symbol/LayerMarker_12_16.5x2.54mm_TextH1mm_P1.27mm_AlNum_LowerMirrored","Symbol/LayerMarker_14_19.1x2.54mm_TextH1mm_P1.27mm_AlNum","Symbol/LayerMarker_14_19.1x2.54mm_TextH1mm_P1.27mm_AlNum_BottomMirrored","Symbol/LayerMarker_14_19.1x2.54mm_TextH1mm_P1.27mm_AlNum_LowerMirrored","Symbol/LayerMarker_16_21.6x2.54mm_TextH1mm_P1.27mm_AlNum","Symbol/LayerMarker_16_21.6x2.54mm_TextH1mm_P1.27mm_AlNum_BottomMirrored","Symbol/LayerMarker_16_21.6x2.54mm_TextH1mm_P1.27mm_AlNum_LowerMirrored","Symbol/LayerMarker_18_24.1x2.54mm_TextH1mm_P1.27mm_AlNum","Symbol/LayerMarker_18_24.1x2.54mm_TextH1mm_P1.27mm_AlNum_BottomMirrored","Symbol/LayerMarker_18_24.1x2.54mm_TextH1mm_P1.27mm_AlNum_LowerMirrored","Symbol/LayerMarker_20_26.7x2.54mm_TextH1mm_P1.27mm_AlNum","Symbol/LayerMarker_20_26.7x2.54mm_TextH1mm_P1.27mm_AlNum_BottomMirrored","Symbol/LayerMarker_20_26.7x2.54mm_TextH1mm_P1.27mm_AlNum_LowerMirrored","Symbol/LayerMarker_22_29.2x2.54mm_TextH1mm_P1.27mm_AlNum","Symbol/LayerMarker_22_29.2x2.54mm_TextH1mm_P1.27mm_AlNum_BottomMirrored","Symbol/LayerMarker_22_29.2x2.54mm_TextH1mm_P1.27mm_AlNum_LowerMirrored","Symbol/LayerMarker_24_31.8x2.54mm_TextH1mm_P1.27mm_AlNum","Symbol/LayerMarker_24_31.8x2.54mm_TextH1mm_P1.27mm_AlNum_BottomMirrored","Symbol/LayerMarker_24_31.8x2.54mm_TextH1mm_P1.27mm_AlNum_LowerMirrored","Symbol/LayerMarker_26_34.3x2.54mm_TextH1mm_P1.27mm_AlNum","Symbol/LayerMarker_26_34.3x2.54mm_TextH1mm_P1.27mm_AlNum_BottomMirrored","Symbol/LayerMarker_26_34.3x2.54mm_TextH1mm_P1.27mm_AlNum_LowerMirrored","Symbol/LayerMarker_28_36.8x2.54mm_TextH1mm_P1.27mm_AlNum","Symbol/LayerMarker_28_36.8x2.54mm_TextH1mm_P1.27mm_AlNum_BottomMirrored","Symbol/LayerMarker_28_36.8x2.54mm_TextH1mm_P1.27mm_AlNum_LowerMirrored","Symbol/LayerMarker_2_3.81x2.54mm_TextH1mm_P1.27mm","Symbol/LayerMarker_2_3.81x2.54mm_TextH1mm_P1.27mm_BottomMirrored","Symbol/LayerMarker_2_3.81x2.54mm_TextH1mm_P1.27mm_Named","Symbol/LayerMarker_2_3.81x2.54mm_TextH1mm_P1.27mm_Named_BottomMirrored","Symbol/LayerMarker_30_39.4x2.54mm_TextH1mm_P1.27mm_AlNum","Symbol/LayerMarker_30_39.4x2.54mm_TextH1mm_P1.27mm_AlNum_BottomMirrored","Symbol/LayerMarker_30_39.4x2.54mm_TextH1mm_P1.27mm_AlNum_LowerMirrored","Symbol/LayerMarker_32_41.9x2.54mm_TextH1mm_P1.27mm_AlNum","Symbol/LayerMarker_32_41.9x2.54mm_TextH1mm_P1.27mm_AlNum_BottomMirrored","Symbol/LayerMarker_32_41.9x2.54mm_TextH1mm_P1.27mm_AlNum_LowerMirrored","Symbol/LayerMarker_4_6.35x2.54mm_TextH1mm_P1.27mm","Symbol/LayerMarker_4_6.35x2.54mm_TextH1mm_P1.27mm_BottomMirrored","Symbol/LayerMarker_4_6.35x2.54mm_TextH1mm_P1.27mm_LowerMirrored","Symbol/LayerMarker_4_6.35x2.54mm_TextH1mm_P1.27mm_Named","Symbol/LayerMarker_4_6.35x2.54mm_TextH1mm_P1.27mm_Named_BottomMirrored","Symbol/LayerMarker_4_6.35x2.54mm_TextH1mm_P1.27mm_Named_LowerMirrored","Symbol/LayerMarker_6_8.89x2.54mm_TextH1mm_P1.27mm","Symbol/LayerMarker_6_8.89x2.54mm_TextH1mm_P1.27mm_BottomMirrored","Symbol/LayerMarker_6_8.89x2.54mm_TextH1mm_P1.27mm_LowerMirrored","Symbol/LayerMarker_6_8.89x2.54mm_TextH1mm_P1.27mm_Named","Symbol/LayerMarker_6_8.89x2.54mm_TextH1mm_P1.27mm_Named_BottomMirrored","Symbol/LayerMarker_6_8.89x2.54mm_TextH1mm_P1.27mm_Named_LowerMirrored","Symbol/LayerMarker_8_11.4x2.54mm_TextH1mm_P1.27mm","Symbol/LayerMarker_8_11.4x2.54mm_TextH1mm_P1.27mm_BottomMirrored","Symbol/LayerMarker_8_11.4x2.54mm_TextH1mm_P1.27mm_LowerMirrored","Symbol/LayerMarker_8_11.4x2.54mm_TextH1mm_P1.27mm_Named","Symbol/LayerMarker_8_11.4x2.54mm_TextH1mm_P1.27mm_Named_BottomMirrored","Symbol/LayerMarker_8_11.4x2.54mm_TextH1mm_P1.27mm_Named_LowerMirrored","Symbol/OSHW-Logo2_14.6x12mm_Copper","Symbol/OSHW-Logo2_14.6x12mm_SilkScreen","Symbol/OSHW-Logo2_24.3x20mm_Copper","Symbol/OSHW-Logo2_24.3x20mm_SilkScreen","Symbol/OSHW-Logo2_36.5x30mm_Copper","Symbol/OSHW-Logo2_36.5x30mm_SilkScreen","Symbol/OSHW-Logo2_48.7x40mm_Copper","Symbol/OSHW-Logo2_48.7x40mm_SilkScreen","Symbol/OSHW-Logo2_7.3x6mm_Copper","Symbol/OSHW-Logo2_7.3x6mm_SilkScreen","Symbol/OSHW-Logo2_9.8x8mm_Copper","Symbol/OSHW-Logo2_9.8x8mm_SilkScreen","Symbol/OSHW-Logo_11.4x12mm_Copper","Symbol/OSHW-Logo_11.4x12mm_SilkScreen","Symbol/OSHW-Logo_19x20mm_Copper","Symbol/OSHW-Logo_19x20mm_SilkScreen","Symbol/OSHW-Logo_28.5x30mm_Copper","Symbol/OSHW-Logo_28.5x30mm_SilkScreen","Symbol/OSHW-Logo_38.1x40mm_Copper","Symbol/OSHW-Logo_38.1x40mm_SilkScreen","Symbol/OSHW-Logo_5.7x6mm_Copper","Symbol/OSHW-Logo_5.7x6mm_SilkScreen","Symbol/OSHW-Logo_7.5x8mm_Copper","Symbol/OSHW-Logo_7.5x8mm_SilkScreen","Symbol/OSHW-Symbol_13.4x12mm_Copper","Symbol/OSHW-Symbol_13.4x12mm_SilkScreen","Symbol/OSHW-Symbol_22.3x20mm_Copper","Symbol/OSHW-Symbol_22.3x20mm_SilkScreen","Symbol/OSHW-Symbol_33.5x30mm_Copper","Symbol/OSHW-Symbol_33.5x30mm_SilkScreen","Symbol/OSHW-Symbol_44.5x40mm_Copper","Symbol/OSHW-Symbol_44.5x40mm_SilkScreen","Symbol/OSHW-Symbol_6.7x6mm_Copper","Symbol/OSHW-Symbol_6.7x6mm_SilkScreen","Symbol/OSHW-Symbol_8.9x8mm_Copper","Symbol/OSHW-Symbol_8.9x8mm_SilkScreen","Symbol/Polarity_Center_Negative_12mm_SilkScreen","Symbol/Polarity_Center_Negative_20mm_SilkScreen","Symbol/Polarity_Center_Negative_30mm_SilkScreen","Symbol/Polarity_Center_Negative_40mm_SilkScreen","Symbol/Polarity_Center_Negative_6mm_SilkScreen","Symbol/Polarity_Center_Negative_8mm_SilkScreen","Symbol/Polarity_Center_Positive_12mm_SilkScreen","Symbol/Polarity_Center_Positive_20mm_SilkScreen","Symbol/Polarity_Center_Positive_30mm_SilkScreen","Symbol/Polarity_Center_Positive_40mm_SilkScreen","Symbol/Polarity_Center_Positive_6mm_SilkScreen","Symbol/Polarity_Center_Positive_8mm_SilkScreen","Symbol/RoHS-Logo_12mm_SilkScreen","Symbol/RoHS-Logo_20mm_SilkScreen","Symbol/RoHS-Logo_30mm_SilkScreen","Symbol/RoHS-Logo_40mm_SilkScreen","Symbol/RoHS-Logo_6mm_SilkScreen","Symbol/RoHS-Logo_8mm_SilkScreen","Symbol/Screw_Generic_2.0x3.0mm_SilkScreen","Symbol/Smolhaj_Scale_0.1","Symbol/Symbol_Attention_Triangle_17x15mm_Copper","Symbol/Symbol_Attention_Triangle_8x7mm_Copper","Symbol/Symbol_Barrel_Polarity","Symbol/Symbol_CC-Attribution_CopperTop_Big","Symbol/Symbol_CC-Attribution_CopperTop_Small","Symbol/Symbol_CC-Noncommercial_CopperTop_Big","Symbol/Symbol_CC-Noncommercial_CopperTop_Small","Symbol/Symbol_CC-PublicDomain_CopperTop_Big","Symbol/Symbol_CC-PublicDomain_CopperTop_Small","Symbol/Symbol_CC-PublicDomain_SilkScreenTop_Big","Symbol/Symbol_CC-ShareAlike_CopperTop_Big","Symbol/Symbol_CC-ShareAlike_CopperTop_Small","Symbol/Symbol_CreativeCommonsPublicDomain_CopperTop_Small","Symbol/Symbol_CreativeCommonsPublicDomain_SilkScreenTop_Small","Symbol/Symbol_CreativeCommons_CopperTop_Type1_Big","Symbol/Symbol_CreativeCommons_CopperTop_Type2_Big","Symbol/Symbol_CreativeCommons_CopperTop_Type2_Small","Symbol/Symbol_CreativeCommons_SilkScreenTop_Type2_Big","Symbol/Symbol_Danger_18x16mm_Copper","Symbol/Symbol_Danger_8x8mm_Copper","Symbol/Symbol_ESD-Logo-Text_CopperTop","Symbol/Symbol_ESD-Logo_CopperTop","Symbol/Symbol_GNU-GPL_CopperTop_Big","Symbol/Symbol_GNU-GPL_CopperTop_Small","Symbol/Symbol_GNU-Logo_CopperTop","Symbol/Symbol_GNU-Logo_SilkscreenTop","Symbol/Symbol_HighVoltage_NoTriangle_2x5mm_Copper","Symbol/Symbol_HighVoltage_NoTriangle_6x15mm_Copper","Symbol/Symbol_HighVoltage_Triangle_17x15mm_Copper","Symbol/Symbol_HighVoltage_Triangle_6x6mm_Copper","Symbol/Symbol_HighVoltage_Triangle_8x7mm_Copper","Symbol/UKCA-Logo_12x12mm_SilkScreen","Symbol/UKCA-Logo_20x20mm_SilkScreen","Symbol/UKCA-Logo_30x30mm_SilkScreen","Symbol/UKCA-Logo_40x40mm_SilkScreen","Symbol/UKCA-Logo_6x6mm_SilkScreen","Symbol/UKCA-Logo_8x8mm_SilkScreen","Symbol/WEEE-Logo_14x20mm_SilkScreen","Symbol/WEEE-Logo_21x30mm_SilkScreen","Symbol/WEEE-Logo_28.1x40mm_SilkScreen","Symbol/WEEE-Logo_4.2x6mm_SilkScreen","Symbol/WEEE-Logo_5.6x8mm_SilkScreen","Symbol/WEEE-Logo_8.4x12mm_SilkScreen","TerminalBlock/TerminalBlock_MaiXu_MX126-5.0-02P_1x02_P5.00mm","TerminalBlock/TerminalBlock_MaiXu_MX126-5.0-03P_1x03_P5.00mm","TerminalBlock/TerminalBlock_MaiXu_MX126-5.0-04P_1x04_P5.00mm","TerminalBlock/TerminalBlock_MaiXu_MX126-5.0-05P_1x05_P5.00mm","TerminalBlock/TerminalBlock_MaiXu_MX126-5.0-06P_1x06_P5.00mm","TerminalBlock/TerminalBlock_MaiXu_MX126-5.0-07P_1x07_P5.00mm","TerminalBlock/TerminalBlock_MaiXu_MX126-5.0-08P_1x08_P5.00mm","TerminalBlock/TerminalBlock_MaiXu_MX126-5.0-09P_1x09_P5.00mm","TerminalBlock/TerminalBlock_MaiXu_MX126-5.0-10P_1x10_P5.00mm","TerminalBlock/TerminalBlock_MaiXu_MX126-5.0-11P_1x11_P5.00mm","TerminalBlock/TerminalBlock_MaiXu_MX126-5.0-12P_1x12_P5.00mm","TerminalBlock/TerminalBlock_MaiXu_MX126-5.0-13P_1x13_P5.00mm","TerminalBlock/TerminalBlock_MaiXu_MX126-5.0-14P_1x14_P5.00mm","TerminalBlock/TerminalBlock_MaiXu_MX126-5.0-15P_1x15_P5.00mm","TerminalBlock/TerminalBlock_MaiXu_MX126-5.0-16P_1x16_P5.00mm","TerminalBlock/TerminalBlock_MaiXu_MX126-5.0-17P_1x17_P5.00mm","TerminalBlock/TerminalBlock_MaiXu_MX126-5.0-18P_1x18_P5.00mm","TerminalBlock/TerminalBlock_MaiXu_MX126-5.0-19P_1x19_P5.00mm","TerminalBlock/TerminalBlock_MaiXu_MX126-5.0-20P_1x20_P5.00mm","TerminalBlock/TerminalBlock_MaiXu_MX126-5.0-21P_1x21_P5.00mm","TerminalBlock/TerminalBlock_MaiXu_MX126-5.0-22P_1x22_P5.00mm","TerminalBlock/TerminalBlock_MaiXu_MX126-5.0-23P_1x23_P5.00mm","TerminalBlock/TerminalBlock_MaiXu_MX126-5.0-24P_1x24_P5.00mm","TerminalBlock/TerminalBlock_Xinya_XY308-2.54-10P_1x10_P2.54mm_Horizontal","TerminalBlock/TerminalBlock_Xinya_XY308-2.54-11P_1x11_P2.54mm_Horizontal","TerminalBlock/TerminalBlock_Xinya_XY308-2.54-12P_1x12_P2.54mm_Horizontal","TerminalBlock/TerminalBlock_Xinya_XY308-2.54-13P_1x13_P2.54mm_Horizontal","TerminalBlock/TerminalBlock_Xinya_XY308-2.54-14P_1x14_P2.54mm_Horizontal","TerminalBlock/TerminalBlock_Xinya_XY308-2.54-15P_1x15_P2.54mm_Horizontal","TerminalBlock/TerminalBlock_Xinya_XY308-2.54-16P_1x16_P2.54mm_Horizontal","TerminalBlock/TerminalBlock_Xinya_XY308-2.54-17P_1x17_P2.54mm_Horizontal","TerminalBlock/TerminalBlock_Xinya_XY308-2.54-18P_1x18_P2.54mm_Horizontal","TerminalBlock/TerminalBlock_Xinya_XY308-2.54-19P_1x19_P2.54mm_Horizontal","TerminalBlock/TerminalBlock_Xinya_XY308-2.54-20P_1x20_P2.54mm_Horizontal","TerminalBlock/TerminalBlock_Xinya_XY308-2.54-21P_1x21_P2.54mm_Horizontal","TerminalBlock/TerminalBlock_Xinya_XY308-2.54-22P_1x22_P2.54mm_Horizontal","TerminalBlock/TerminalBlock_Xinya_XY308-2.54-23P_1x23_P2.54mm_Horizontal","TerminalBlock/TerminalBlock_Xinya_XY308-2.54-2P_1x02_P2.54mm_Horizontal","TerminalBlock/TerminalBlock_Xinya_XY308-2.54-3P_1x03_P2.54mm_Horizontal","TerminalBlock/TerminalBlock_Xinya_XY308-2.54-4P_1x04_P2.54mm_Horizontal","TerminalBlock/TerminalBlock_Xinya_XY308-2.54-5P_1x05_P2.54mm_Horizontal","TerminalBlock/TerminalBlock_Xinya_XY308-2.54-6P_1x06_P2.54mm_Horizontal","TerminalBlock/TerminalBlock_Xinya_XY308-2.54-7P_1x07_P2.54mm_Horizontal","TerminalBlock/TerminalBlock_Xinya_XY308-2.54-8P_1x08_P2.54mm_Horizontal","TerminalBlock/TerminalBlock_Xinya_XY308-2.54-9P_1x09_P2.54mm_Horizontal","TerminalBlock_4Ucon/TerminalBlock_4Ucon_1x02_P3.50mm_Horizontal","TerminalBlock_4Ucon/TerminalBlock_4Ucon_1x02_P3.50mm_Vertical","TerminalBlock_4Ucon/TerminalBlock_4Ucon_1x03_P3.50mm_Horizontal","TerminalBlock_4Ucon/TerminalBlock_4Ucon_1x03_P3.50mm_Vertical","TerminalBlock_4Ucon/TerminalBlock_4Ucon_1x04_P3.50mm_Horizontal","TerminalBlock_4Ucon/TerminalBlock_4Ucon_1x04_P3.50mm_Vertical","TerminalBlock_4Ucon/TerminalBlock_4Ucon_1x05_P3.50mm_Horizontal","TerminalBlock_4Ucon/TerminalBlock_4Ucon_1x05_P3.50mm_Vertical","TerminalBlock_4Ucon/TerminalBlock_4Ucon_1x06_P3.50mm_Horizontal","TerminalBlock_4Ucon/TerminalBlock_4Ucon_1x06_P3.50mm_Vertical","TerminalBlock_4Ucon/TerminalBlock_4Ucon_1x07_P3.50mm_Horizontal","TerminalBlock_4Ucon/TerminalBlock_4Ucon_1x07_P3.50mm_Vertical","TerminalBlock_4Ucon/TerminalBlock_4Ucon_1x08_P3.50mm_Horizontal","TerminalBlock_4Ucon/TerminalBlock_4Ucon_1x08_P3.50mm_Vertical","TerminalBlock_4Ucon/TerminalBlock_4Ucon_1x09_P3.50mm_Horizontal","TerminalBlock_4Ucon/TerminalBlock_4Ucon_1x09_P3.50mm_Vertical","TerminalBlock_4Ucon/TerminalBlock_4Ucon_1x10_P3.50mm_Horizontal","TerminalBlock_4Ucon/TerminalBlock_4Ucon_1x10_P3.50mm_Vertical","TerminalBlock_4Ucon/TerminalBlock_4Ucon_1x11_P3.50mm_Horizontal","TerminalBlock_4Ucon/TerminalBlock_4Ucon_1x11_P3.50mm_Vertical","TerminalBlock_4Ucon/TerminalBlock_4Ucon_1x12_P3.50mm_Horizontal","TerminalBlock_4Ucon/TerminalBlock_4Ucon_1x12_P3.50mm_Vertical","TerminalBlock_4Ucon/TerminalBlock_4Ucon_1x13_P3.50mm_Horizontal","TerminalBlock_4Ucon/TerminalBlock_4Ucon_1x13_P3.50mm_Vertical","TerminalBlock_4Ucon/TerminalBlock_4Ucon_1x14_P3.50mm_Horizontal","TerminalBlock_4Ucon/TerminalBlock_4Ucon_1x14_P3.50mm_Vertical","TerminalBlock_4Ucon/TerminalBlock_4Ucon_1x15_P3.50mm_Horizontal","TerminalBlock_4Ucon/TerminalBlock_4Ucon_1x15_P3.50mm_Vertical","TerminalBlock_Altech/Altech_AK100_1x02_P5.00mm","TerminalBlock_Altech/Altech_AK100_1x03_P5.00mm","TerminalBlock_Altech/Altech_AK100_1x04_P5.00mm","TerminalBlock_Altech/Altech_AK100_1x05_P5.00mm","TerminalBlock_Altech/Altech_AK100_1x06_P5.00mm","TerminalBlock_Altech/Altech_AK100_1x07_P5.00mm","TerminalBlock_Altech/Altech_AK100_1x08_P5.00mm","TerminalBlock_Altech/Altech_AK100_1x09_P5.00mm","TerminalBlock_Altech/Altech_AK100_1x10_P5.00mm","TerminalBlock_Altech/Altech_AK100_1x11_P5.00mm","TerminalBlock_Altech/Altech_AK100_1x12_P5.00mm","TerminalBlock_Altech/Altech_AK100_1x13_P5.00mm","TerminalBlock_Altech/Altech_AK100_1x14_P5.00mm","TerminalBlock_Altech/Altech_AK100_1x15_P5.00mm","TerminalBlock_Altech/Altech_AK100_1x16_P5.00mm","TerminalBlock_Altech/Altech_AK100_1x17_P5.00mm","TerminalBlock_Altech/Altech_AK100_1x18_P5.00mm","TerminalBlock_Altech/Altech_AK100_1x19_P5.00mm","TerminalBlock_Altech/Altech_AK100_1x20_P5.00mm","TerminalBlock_Altech/Altech_AK100_1x21_P5.00mm","TerminalBlock_Altech/Altech_AK100_1x22_P5.00mm","TerminalBlock_Altech/Altech_AK100_1x23_P5.00mm","TerminalBlock_Altech/Altech_AK100_1x24_P5.00mm","TerminalBlock_Altech/Altech_AK300_1x02_P5.00mm_45-Degree","TerminalBlock_Altech/Altech_AK300_1x03_P5.00mm_45-Degree","TerminalBlock_Altech/Altech_AK300_1x04_P5.00mm_45-Degree","TerminalBlock_Altech/Altech_AK300_1x05_P5.00mm_45-Degree","TerminalBlock_Altech/Altech_AK300_1x06_P5.00mm_45-Degree","TerminalBlock_Altech/Altech_AK300_1x07_P5.00mm_45-Degree","TerminalBlock_Altech/Altech_AK300_1x08_P5.00mm_45-Degree","TerminalBlock_Altech/Altech_AK300_1x09_P5.00mm_45-Degree","TerminalBlock_Altech/Altech_AK300_1x10_P5.00mm_45-Degree","TerminalBlock_Altech/Altech_AK300_1x11_P5.00mm_45-Degree","TerminalBlock_Altech/Altech_AK300_1x12_P5.00mm_45-Degree","TerminalBlock_Altech/Altech_AK300_1x13_P5.00mm_45-Degree","TerminalBlock_Altech/Altech_AK300_1x14_P5.00mm_45-Degree","TerminalBlock_Altech/Altech_AK300_1x15_P5.00mm_45-Degree","TerminalBlock_Altech/Altech_AK300_1x16_P5.00mm_45-Degree","TerminalBlock_Altech/Altech_AK300_1x17_P5.00mm_45-Degree","TerminalBlock_Altech/Altech_AK300_1x18_P5.00mm_45-Degree","TerminalBlock_Altech/Altech_AK300_1x19_P5.00mm_45-Degree","TerminalBlock_Altech/Altech_AK300_1x20_P5.00mm_45-Degree","TerminalBlock_Altech/Altech_AK300_1x21_P5.00mm_45-Degree","TerminalBlock_Altech/Altech_AK300_1x22_P5.00mm_45-Degree","TerminalBlock_Altech/Altech_AK300_1x23_P5.00mm_45-Degree","TerminalBlock_Altech/Altech_AK300_1x24_P5.00mm_45-Degree","TerminalBlock_CUI/TerminalBlock_CUI_TB007-508-02_1x02_P5.08mm_Horizontal","TerminalBlock_CUI/TerminalBlock_CUI_TB007-508-03_1x03_P5.08mm_Horizontal","TerminalBlock_CUI/TerminalBlock_CUI_TB007-508-04_1x04_P5.08mm_Horizontal","TerminalBlock_CUI/TerminalBlock_CUI_TB007-508-05_1x05_P5.08mm_Horizontal","TerminalBlock_CUI/TerminalBlock_CUI_TB007-508-06_1x06_P5.08mm_Horizontal","TerminalBlock_CUI/TerminalBlock_CUI_TB007-508-07_1x07_P5.08mm_Horizontal","TerminalBlock_CUI/TerminalBlock_CUI_TB007-508-08_1x08_P5.08mm_Horizontal","TerminalBlock_CUI/TerminalBlock_CUI_TB007-508-09_1x09_P5.08mm_Horizontal","TerminalBlock_CUI/TerminalBlock_CUI_TB007-508-10_1x10_P5.08mm_Horizontal","TerminalBlock_CUI/TerminalBlock_CUI_TB007-508-11_1x11_P5.08mm_Horizontal","TerminalBlock_CUI/TerminalBlock_CUI_TB007-508-12_1x12_P5.08mm_Horizontal","TerminalBlock_CUI/TerminalBlock_CUI_TB007-508-13_1x13_P5.08mm_Horizontal","TerminalBlock_CUI/TerminalBlock_CUI_TB007-508-14_1x14_P5.08mm_Horizontal","TerminalBlock_CUI/TerminalBlock_CUI_TB007-508-15_1x15_P5.08mm_Horizontal","TerminalBlock_CUI/TerminalBlock_CUI_TB007-508-16_1x16_P5.08mm_Horizontal","TerminalBlock_CUI/TerminalBlock_CUI_TB007-508-17_1x17_P5.08mm_Horizontal","TerminalBlock_CUI/TerminalBlock_CUI_TB007-508-18_1x18_P5.08mm_Horizontal","TerminalBlock_CUI/TerminalBlock_CUI_TB007-508-19_1x19_P5.08mm_Horizontal","TerminalBlock_CUI/TerminalBlock_CUI_TB007-508-20_1x20_P5.08mm_Horizontal","TerminalBlock_CUI/TerminalBlock_CUI_TB007-508-21_1x21_P5.08mm_Horizontal","TerminalBlock_CUI/TerminalBlock_CUI_TB007-508-22_1x22_P5.08mm_Horizontal","TerminalBlock_CUI/TerminalBlock_CUI_TB007-508-23_1x23_P5.08mm_Horizontal","TerminalBlock_CUI/TerminalBlock_CUI_TB007-508-24_1x24_P5.08mm_Horizontal","TerminalBlock_Degson/Degson_DG246-3.81-03P","TerminalBlock_Degson/TerminalBlock_Degson_DG250-3.5-01P_1x01_P3.50mm_45Degree","TerminalBlock_Degson/TerminalBlock_Degson_DG250-3.5-02P_1x02_P3.50mm_45Degree","TerminalBlock_Degson/TerminalBlock_Degson_DG250-3.5-03P_1x03_P3.50mm_45Degree","TerminalBlock_Degson/TerminalBlock_Degson_DG250-3.5-04P_1x04_P3.50mm_45Degree","TerminalBlock_Degson/TerminalBlock_Degson_DG250-3.5-05P_1x05_P3.50mm_45Degree","TerminalBlock_Degson/TerminalBlock_Degson_DG250-3.5-06P_1x06_P3.50mm_45Degree","TerminalBlock_Degson/TerminalBlock_Degson_DG250-3.5-07P_1x07_P3.50mm_45Degree","TerminalBlock_Degson/TerminalBlock_Degson_DG250-3.5-08P_1x08_P3.50mm_45Degree","TerminalBlock_Degson/TerminalBlock_Degson_DG250-3.5-09P_1x09_P3.50mm_45Degree","TerminalBlock_Degson/TerminalBlock_Degson_DG250-3.5-10P_1x10_P3.50mm_45Degree","TerminalBlock_Degson/TerminalBlock_Degson_DG250-3.5-11P_1x11_P3.50mm_45Degree","TerminalBlock_Degson/TerminalBlock_Degson_DG250-3.5-12P_1x12_P3.50mm_45Degree","TerminalBlock_Degson/TerminalBlock_Degson_DG250-3.5-14P_1x14_P3.50mm_45Degree","TerminalBlock_Degson/TerminalBlock_Degson_DG250-3.5-15P_1x15_P3.50mm_45Degree","TerminalBlock_Degson/TerminalBlock_Degson_DG250-3.5-16P_1x16_P3.50mm_45Degree","TerminalBlock_Degson/TerminalBlock_Degson_DG250-3.5-18P_1x18_P3.50mm_45Degree","TerminalBlock_Degson/TerminalBlock_Degson_DG250-3.5-19P_1x19_P3.50mm_45Degree","TerminalBlock_Degson/TerminalBlock_Degson_DG250-3.5-20P_1x20_P3.50mm_45Degree","TerminalBlock_Degson/TerminalBlock_Degson_DG250-3.5-24P_1x24_P3.50mm_45Degree","TerminalBlock_Degson/TerminalBlock_Degson_DG250-3.5-44P_1x44_P3.50mm_45Degree","TerminalBlock_Degson/TerminalBlock_Degson_DG250-3.5-45P_1x45_P3.50mm_45Degree","TerminalBlock_Dinkle/TerminalBlock_Dinkle_DT-55-B01X-02_P10.00mm","TerminalBlock_Dinkle/TerminalBlock_Dinkle_DT-55-B01X-03_P10.00mm","TerminalBlock_Dinkle/TerminalBlock_Dinkle_DT-55-B01X-04_P10.00mm","TerminalBlock_Dinkle/TerminalBlock_Dinkle_DT-55-B01X-05_P10.00mm","TerminalBlock_Dinkle/TerminalBlock_Dinkle_DT-55-B01X-06_P10.00mm","TerminalBlock_Dinkle/TerminalBlock_Dinkle_DT-55-B01X-07_P10.00mm","TerminalBlock_Dinkle/TerminalBlock_Dinkle_DT-55-B01X-08_P10.00mm","TerminalBlock_Dinkle/TerminalBlock_Dinkle_DT-55-B01X-09_P10.00mm","TerminalBlock_Dinkle/TerminalBlock_Dinkle_DT-55-B01X-10_P10.00mm","TerminalBlock_Dinkle/TerminalBlock_Dinkle_DT-55-B01X-11_P10.00mm","TerminalBlock_Dinkle/TerminalBlock_Dinkle_DT-55-B01X-12_P10.00mm","TerminalBlock_Dinkle/TerminalBlock_Dinkle_DT-55-B01X-13_P10.00mm","TerminalBlock_Dinkle/TerminalBlock_Dinkle_DT-55-B01X-14_P10.00mm","TerminalBlock_Dinkle/TerminalBlock_Dinkle_DT-55-B01X-15_P10.00mm","TerminalBlock_Dinkle/TerminalBlock_Dinkle_DT-55-B01X-16_P10.00mm","TerminalBlock_Dinkle/TerminalBlock_Dinkle_DT-55-B01X-17_P10.00mm","TerminalBlock_Dinkle/TerminalBlock_Dinkle_DT-55-B01X-18_P10.00mm","TerminalBlock_Dinkle/TerminalBlock_Dinkle_DT-55-B01X-19_P10.00mm","TerminalBlock_Dinkle/TerminalBlock_Dinkle_DT-55-B01X-20_P10.00mm","TerminalBlock_Dinkle/TerminalBlock_Dinkle_DT-55-B01X-21_P10.00mm","TerminalBlock_Dinkle/TerminalBlock_Dinkle_DT-55-B01X-22_P10.00mm","TerminalBlock_Dinkle/TerminalBlock_Dinkle_DT-55-B01X-23_P10.00mm","TerminalBlock_Dinkle/TerminalBlock_Dinkle_DT-55-B01X-24_P10.00mm","TerminalBlock_Dinkle/TerminalBlock_Dinkle_DT-55-B01X-25_P10.00mm","TerminalBlock_Dinkle/TerminalBlock_Dinkle_DT-55-B01X-26_P10.00mm","TerminalBlock_Dinkle/TerminalBlock_Dinkle_DT-55-B01X-27_P10.00mm","TerminalBlock_Dinkle/TerminalBlock_Dinkle_DT-55-B01X-28_P10.00mm","TerminalBlock_Dinkle/TerminalBlock_Dinkle_DT-55-B01X-29_P10.00mm","TerminalBlock_Dinkle/TerminalBlock_Dinkle_DT-55-B01X-30_P10.00mm","TerminalBlock_MetzConnect/TerminalBlock_MetzConnect_360271_1x01_Horizontal_ScrewM3.0_Boxed","TerminalBlock_MetzConnect/TerminalBlock_MetzConnect_360272_1x01_Horizontal_ScrewM2.6","TerminalBlock_MetzConnect/TerminalBlock_MetzConnect_360273_1x01_Horizontal_ScrewM2.6_WireProtection","TerminalBlock_MetzConnect/TerminalBlock_MetzConnect_360291_1x01_Horizontal_ScrewM3.0_Boxed","TerminalBlock_MetzConnect/TerminalBlock_MetzConnect_360322_1x01_Horizontal_ScrewM3.0_WireProtection","TerminalBlock_MetzConnect/TerminalBlock_MetzConnect_360381_1x01_Horizontal_ScrewM3.0","TerminalBlock_MetzConnect/TerminalBlock_MetzConnect_360410_1x01_Horizontal_ScrewM3.0","TerminalBlock_MetzConnect/TerminalBlock_MetzConnect_360425_1x01_Horizontal_ScrewM4.0_Boxed","TerminalBlock_MetzConnect/TerminalBlock_MetzConnect_Type011_RT05502HBLC_1x02_P5.00mm_Horizontal","TerminalBlock_MetzConnect/TerminalBlock_MetzConnect_Type011_RT05503HBLC_1x03_P5.00mm_Horizontal","TerminalBlock_MetzConnect/TerminalBlock_MetzConnect_Type011_RT05504HBLC_1x04_P5.00mm_Horizontal","TerminalBlock_MetzConnect/TerminalBlock_MetzConnect_Type011_RT05505HBLC_1x05_P5.00mm_Horizontal","TerminalBlock_MetzConnect/TerminalBlock_MetzConnect_Type011_RT05506HBLC_1x06_P5.00mm_Horizontal","TerminalBlock_MetzConnect/TerminalBlock_MetzConnect_Type055_RT01502HDWU_1x02_P5.00mm_Horizontal","TerminalBlock_MetzConnect/TerminalBlock_MetzConnect_Type055_RT01503HDWU_1x03_P5.00mm_Horizontal","TerminalBlock_MetzConnect/TerminalBlock_MetzConnect_Type055_RT01504HDWU_1x04_P5.00mm_Horizontal","TerminalBlock_MetzConnect/TerminalBlock_MetzConnect_Type059_RT06302HBWC_1x02_P3.50mm_Horizontal","TerminalBlock_MetzConnect/TerminalBlock_MetzConnect_Type059_RT06303HBWC_1x03_P3.50mm_Horizontal","TerminalBlock_MetzConnect/TerminalBlock_MetzConnect_Type059_RT06304HBWC_1x04_P3.50mm_Horizontal","TerminalBlock_MetzConnect/TerminalBlock_MetzConnect_Type059_RT06305HBWC_1x05_P3.50mm_Horizontal","TerminalBlock_MetzConnect/TerminalBlock_MetzConnect_Type059_RT06306HBWC_1x06_P3.50mm_Horizontal","TerminalBlock_MetzConnect/TerminalBlock_MetzConnect_Type067_RT01902HDWC_1x02_P10.00mm_Horizontal","TerminalBlock_MetzConnect/TerminalBlock_MetzConnect_Type067_RT01903HDWC_1x03_P10.00mm_Horizontal","TerminalBlock_MetzConnect/TerminalBlock_MetzConnect_Type067_RT01904HDWC_1x04_P10.00mm_Horizontal","TerminalBlock_MetzConnect/TerminalBlock_MetzConnect_Type067_RT01905HDWC_1x05_P10.00mm_Horizontal","TerminalBlock_MetzConnect/TerminalBlock_MetzConnect_Type073_RT02602HBLU_1x02_P5.08mm_Horizontal","TerminalBlock_MetzConnect/TerminalBlock_MetzConnect_Type073_RT02603HBLU_1x03_P5.08mm_Horizontal","TerminalBlock_MetzConnect/TerminalBlock_MetzConnect_Type086_RT03402HBLC_1x02_P3.81mm_Horizontal","TerminalBlock_MetzConnect/TerminalBlock_MetzConnect_Type086_RT03403HBLC_1x03_P3.81mm_Horizontal","TerminalBlock_MetzConnect/TerminalBlock_MetzConnect_Type086_RT03404HBLC_1x04_P3.81mm_Horizontal","TerminalBlock_MetzConnect/TerminalBlock_MetzConnect_Type086_RT03405HBLC_1x05_P3.81mm_Horizontal","TerminalBlock_MetzConnect/TerminalBlock_MetzConnect_Type086_RT03406HBLC_1x06_P3.81mm_Horizontal","TerminalBlock_MetzConnect/TerminalBlock_MetzConnect_Type094_RT03502HBLU_1x02_P5.00mm_Horizontal","TerminalBlock_MetzConnect/TerminalBlock_MetzConnect_Type094_RT03503HBLU_1x03_P5.00mm_Horizontal","TerminalBlock_MetzConnect/TerminalBlock_MetzConnect_Type094_RT03504HBLU_1x04_P5.00mm_Horizontal","TerminalBlock_MetzConnect/TerminalBlock_MetzConnect_Type094_RT03505HBLU_1x05_P5.00mm_Horizontal","TerminalBlock_MetzConnect/TerminalBlock_MetzConnect_Type094_RT03506HBLU_1x06_P5.00mm_Horizontal","TerminalBlock_MetzConnect/TerminalBlock_MetzConnect_Type101_RT01602HBWC_1x02_P5.08mm_Horizontal","TerminalBlock_MetzConnect/TerminalBlock_MetzConnect_Type101_RT01603HBWC_1x03_P5.08mm_Horizontal","TerminalBlock_MetzConnect/TerminalBlock_MetzConnect_Type101_RT01604HBWC_1x04_P5.08mm_Horizontal","TerminalBlock_MetzConnect/TerminalBlock_MetzConnect_Type101_RT01605HBWC_1x05_P5.08mm_Horizontal","TerminalBlock_MetzConnect/TerminalBlock_MetzConnect_Type101_RT01606HBWC_1x06_P5.08mm_Horizontal","TerminalBlock_MetzConnect/TerminalBlock_MetzConnect_Type171_RT13702HBWC_1x02_P7.50mm_Horizontal","TerminalBlock_MetzConnect/TerminalBlock_MetzConnect_Type171_RT13703HBWC_1x03_P7.50mm_Horizontal","TerminalBlock_MetzConnect/TerminalBlock_MetzConnect_Type171_RT13704HBWC_1x04_P7.50mm_Horizontal","TerminalBlock_MetzConnect/TerminalBlock_MetzConnect_Type171_RT13705HBWC_1x05_P7.50mm_Horizontal","TerminalBlock_MetzConnect/TerminalBlock_MetzConnect_Type171_RT13706HBWC_1x06_P7.50mm_Horizontal","TerminalBlock_MetzConnect/TerminalBlock_MetzConnect_Type175_RT02702HBLC_1x02_P7.50mm_Horizontal","TerminalBlock_MetzConnect/TerminalBlock_MetzConnect_Type175_RT02703HBLC_1x03_P7.50mm_Horizontal","TerminalBlock_MetzConnect/TerminalBlock_MetzConnect_Type175_RT02704HBLC_1x04_P7.50mm_Horizontal","TerminalBlock_MetzConnect/TerminalBlock_MetzConnect_Type175_RT02705HBLC_1x05_P7.50mm_Horizontal","TerminalBlock_MetzConnect/TerminalBlock_MetzConnect_Type175_RT02706HBLC_1x06_P7.50mm_Horizontal","TerminalBlock_MetzConnect/TerminalBlock_MetzConnect_Type205_RT04502UBLC_1x02_P5.00mm_45Degree","TerminalBlock_MetzConnect/TerminalBlock_MetzConnect_Type205_RT04503UBLC_1x03_P5.00mm_45Degree","TerminalBlock_MetzConnect/TerminalBlock_MetzConnect_Type205_RT04504UBLC_1x04_P5.00mm_45Degree","TerminalBlock_MetzConnect/TerminalBlock_MetzConnect_Type205_RT04505UBLC_1x05_P5.00mm_45Degree","TerminalBlock_MetzConnect/TerminalBlock_MetzConnect_Type205_RT04506UBLC_1x06_P5.00mm_45Degree","TerminalBlock_MetzConnect/TerminalBlock_MetzConnect_Type701_RT11L02HGLU_1x02_P6.35mm_Horizontal","TerminalBlock_MetzConnect/TerminalBlock_MetzConnect_Type701_RT11L03HGLU_1x03_P6.35mm_Horizontal","TerminalBlock_MetzConnect/TerminalBlock_MetzConnect_Type703_RT10N02HGLU_1x02_P9.52mm_Horizontal","TerminalBlock_MetzConnect/TerminalBlock_MetzConnect_Type703_RT10N03HGLU_1x03_P9.52mm_Horizontal","TerminalBlock_Ningbo-Kagnex/TerminalBlock_Ningbo-Kagnex_HB9500M_1x02_P9.5mm","TerminalBlock_Ningbo-Kagnex/TerminalBlock_Ningbo-Kagnex_HB9500M_1x03_P9.5mm","TerminalBlock_Ningbo-Kagnex/TerminalBlock_Ningbo-Kagnex_HB9500M_1x04_P9.5mm","TerminalBlock_Ningbo-Kagnex/TerminalBlock_Ningbo-Kagnex_HB9500M_1x05_P9.5mm","TerminalBlock_Ningbo-Kagnex/TerminalBlock_Ningbo-Kagnex_HB9500M_1x06_P9.5mm","TerminalBlock_Ningbo-Kagnex/TerminalBlock_Ningbo-Kagnex_HB9500M_1x07_P9.5mm","TerminalBlock_Ningbo-Kagnex/TerminalBlock_Ningbo-Kagnex_HB9500M_1x08_P9.5mm","TerminalBlock_Ningbo-Kagnex/TerminalBlock_Ningbo-Kagnex_HB9500M_1x09_P9.5mm","TerminalBlock_Ningbo-Kagnex/TerminalBlock_Ningbo-Kagnex_HB9500M_1x10_P9.5mm","TerminalBlock_Ningbo-Kagnex/TerminalBlock_Ningbo-Kagnex_HB9500M_1x11_P9.5mm","TerminalBlock_Ningbo-Kagnex/TerminalBlock_Ningbo-Kagnex_HB9500M_1x12_P9.5mm","TerminalBlock_Ningbo-Kagnex/TerminalBlock_Ningbo-Kagnex_HB9500_1x02_P9.5mm","TerminalBlock_Ningbo-Kagnex/TerminalBlock_Ningbo-Kagnex_HB9500_1x03_P9.5mm","TerminalBlock_Ningbo-Kagnex/TerminalBlock_Ningbo-Kagnex_HB9500_1x04_P9.5mm","TerminalBlock_Ningbo-Kagnex/TerminalBlock_Ningbo-Kagnex_HB9500_1x05_P9.5mm","TerminalBlock_Ningbo-Kagnex/TerminalBlock_Ningbo-Kagnex_HB9500_1x06_P9.5mm","TerminalBlock_Ningbo-Kagnex/TerminalBlock_Ningbo-Kagnex_HB9500_1x07_P9.5mm","TerminalBlock_Ningbo-Kagnex/TerminalBlock_Ningbo-Kagnex_HB9500_1x08_P9.5mm","TerminalBlock_Ningbo-Kagnex/TerminalBlock_Ningbo-Kagnex_HB9500_1x09_P9.5mm","TerminalBlock_Ningbo-Kagnex/TerminalBlock_Ningbo-Kagnex_HB9500_1x10_P9.5mm","TerminalBlock_Ningbo-Kagnex/TerminalBlock_Ningbo-Kagnex_HB9500_1x11_P9.5mm","TerminalBlock_Ningbo-Kagnex/TerminalBlock_Ningbo-Kagnex_HB9500_1x12_P9.5mm","TerminalBlock_Philmore/TerminalBlock_Philmore_TB132_1x02_P5.00mm_Horizontal","TerminalBlock_Philmore/TerminalBlock_Philmore_TB133_1x03_P5.00mm_Horizontal","TerminalBlock_Phoenix/TerminalBlock_Phoenix_MKDS-1,5-10-5.08_1x10_P5.08mm_Horizontal","TerminalBlock_Phoenix/TerminalBlock_Phoenix_MKDS-1,5-10_1x10_P5.00mm_Horizontal","TerminalBlock_Phoenix/TerminalBlock_Phoenix_MKDS-1,5-11-5.08_1x11_P5.08mm_Horizontal","TerminalBlock_Phoenix/TerminalBlock_Phoenix_MKDS-1,5-11_1x11_P5.00mm_Horizontal","TerminalBlock_Phoenix/TerminalBlock_Phoenix_MKDS-1,5-12-5.08_1x12_P5.08mm_Horizontal","TerminalBlock_Phoenix/TerminalBlock_Phoenix_MKDS-1,5-12_1x12_P5.00mm_Horizontal","TerminalBlock_Phoenix/TerminalBlock_Phoenix_MKDS-1,5-13-5.08_1x13_P5.08mm_Horizontal","TerminalBlock_Phoenix/TerminalBlock_Phoenix_MKDS-1,5-13_1x13_P5.00mm_Horizontal","TerminalBlock_Phoenix/TerminalBlock_Phoenix_MKDS-1,5-14-5.08_1x14_P5.08mm_Horizontal","TerminalBlock_Phoenix/TerminalBlock_Phoenix_MKDS-1,5-14_1x14_P5.00mm_Horizontal","TerminalBlock_Phoenix/TerminalBlock_Phoenix_MKDS-1,5-15-5.08_1x15_P5.08mm_Horizontal","TerminalBlock_Phoenix/TerminalBlock_Phoenix_MKDS-1,5-15_1x15_P5.00mm_Horizontal","TerminalBlock_Phoenix/TerminalBlock_Phoenix_MKDS-1,5-16-5.08_1x16_P5.08mm_Horizontal","TerminalBlock_Phoenix/TerminalBlock_Phoenix_MKDS-1,5-16_1x16_P5.00mm_Horizontal","TerminalBlock_Phoenix/TerminalBlock_Phoenix_MKDS-1,5-2-5.08_1x02_P5.08mm_Horizontal","TerminalBlock_Phoenix/TerminalBlock_Phoenix_MKDS-1,5-2_1x02_P5.00mm_Horizontal","TerminalBlock_Phoenix/TerminalBlock_Phoenix_MKDS-1,5-3-5.08_1x03_P5.08mm_Horizontal","TerminalBlock_Phoenix/TerminalBlock_Phoenix_MKDS-1,5-3_1x03_P5.00mm_Horizontal","TerminalBlock_Phoenix/TerminalBlock_Phoenix_MKDS-1,5-4-5.08_1x04_P5.08mm_Horizontal","TerminalBlock_Phoenix/TerminalBlock_Phoenix_MKDS-1,5-4_1x04_P5.00mm_Horizontal","TerminalBlock_Phoenix/TerminalBlock_Phoenix_MKDS-1,5-5-5.08_1x05_P5.08mm_Horizontal","TerminalBlock_Phoenix/TerminalBlock_Phoenix_MKDS-1,5-5_1x05_P5.00mm_Horizontal","TerminalBlock_Phoenix/TerminalBlock_Phoenix_MKDS-1,5-6-5.08_1x06_P5.08mm_Horizontal","TerminalBlock_Phoenix/TerminalBlock_Phoenix_MKDS-1,5-6_1x06_P5.00mm_Horizontal","TerminalBlock_Phoenix/TerminalBlock_Phoenix_MKDS-1,5-7-5.08_1x07_P5.08mm_Horizontal","TerminalBlock_Phoenix/TerminalBlock_Phoenix_MKDS-1,5-7_1x07_P5.00mm_Horizontal","TerminalBlock_Phoenix/TerminalBlock_Phoenix_MKDS-1,5-8-5.08_1x08_P5.08mm_Horizontal","TerminalBlock_Phoenix/TerminalBlock_Phoenix_MKDS-1,5-8_1x08_P5.00mm_Horizontal","TerminalBlock_Phoenix/TerminalBlock_Phoenix_MKDS-1,5-9-5.08_1x09_P5.08mm_Horizontal","TerminalBlock_Phoenix/TerminalBlock_Phoenix_MKDS-1,5-9_1x09_P5.00mm_Horizontal","TerminalBlock_Phoenix/TerminalBlock_Phoenix_MKDS-1-10-3.81_1x10_P3.81mm_Horizontal","TerminalBlock_Phoenix/TerminalBlock_Phoenix_MKDS-1-11-3.81_1x11_P3.81mm_Horizontal","TerminalBlock_Phoenix/TerminalBlock_Phoenix_MKDS-1-12-3.81_1x12_P3.81mm_Horizontal","TerminalBlock_Phoenix/TerminalBlock_Phoenix_MKDS-1-13-3.81_1x13_P3.81mm_Horizontal","TerminalBlock_Phoenix/TerminalBlock_Phoenix_MKDS-1-2-3.81_1x02_P3.81mm_Horizontal","TerminalBlock_Phoenix/TerminalBlock_Phoenix_MKDS-1-3-3.81_1x03_P3.81mm_Horizontal","TerminalBlock_Phoenix/TerminalBlock_Phoenix_MKDS-1-4-3.81_1x04_P3.81mm_Horizontal","TerminalBlock_Phoenix/TerminalBlock_Phoenix_MKDS-1-5-3.81_1x05_P3.81mm_Horizontal","TerminalBlock_Phoenix/TerminalBlock_Phoenix_MKDS-1-6-3.81_1x06_P3.81mm_Horizontal","TerminalBlock_Phoenix/TerminalBlock_Phoenix_MKDS-1-7-3.81_1x07_P3.81mm_Horizontal","TerminalBlock_Phoenix/TerminalBlock_Phoenix_MKDS-1-8-3.81_1x08_P3.81mm_Horizontal","TerminalBlock_Phoenix/TerminalBlock_Phoenix_MKDS-1-9-3.81_1x09_P3.81mm_Horizontal","TerminalBlock_Phoenix/TerminalBlock_Phoenix_MKDS-3-10-5.08_1x10_P5.08mm_Horizontal","TerminalBlock_Phoenix/TerminalBlock_Phoenix_MKDS-3-11-5.08_1x11_P5.08mm_Horizontal","TerminalBlock_Phoenix/TerminalBlock_Phoenix_MKDS-3-12-5.08_1x12_P5.08mm_Horizontal","TerminalBlock_Phoenix/TerminalBlock_Phoenix_MKDS-3-13-5.08_1x13_P5.08mm_Horizontal","TerminalBlock_Phoenix/TerminalBlock_Phoenix_MKDS-3-14-5.08_1x14_P5.08mm_Horizontal","TerminalBlock_Phoenix/TerminalBlock_Phoenix_MKDS-3-15-5.08_1x15_P5.08mm_Horizontal","TerminalBlock_Phoenix/TerminalBlock_Phoenix_MKDS-3-16-5.08_1x16_P5.08mm_Horizontal","TerminalBlock_Phoenix/TerminalBlock_Phoenix_MKDS-3-2-5.08_1x02_P5.08mm_Horizontal","TerminalBlock_Phoenix/TerminalBlock_Phoenix_MKDS-3-3-5.08_1x03_P5.08mm_Horizontal","TerminalBlock_Phoenix/TerminalBlock_Phoenix_MKDS-3-4-5.08_1x04_P5.08mm_Horizontal","TerminalBlock_Phoenix/TerminalBlock_Phoenix_MKDS-3-5-5.08_1x05_P5.08mm_Horizontal","TerminalBlock_Phoenix/TerminalBlock_Phoenix_MKDS-3-6-5.08_1x06_P5.08mm_Horizontal","TerminalBlock_Phoenix/TerminalBlock_Phoenix_MKDS-3-7-5.08_1x07_P5.08mm_Horizontal","TerminalBlock_Phoenix/TerminalBlock_Phoenix_MKDS-3-8-5.08_1x08_P5.08mm_Horizontal","TerminalBlock_Phoenix/TerminalBlock_Phoenix_MKDS-3-9-5.08_1x09_P5.08mm_Horizontal","TerminalBlock_Phoenix/TerminalBlock_Phoenix_MPT-0,5-10-2.54_1x10_P2.54mm_Horizontal","TerminalBlock_Phoenix/TerminalBlock_Phoenix_MPT-0,5-11-2.54_1x11_P2.54mm_Horizontal","TerminalBlock_Phoenix/TerminalBlock_Phoenix_MPT-0,5-12-2.54_1x12_P2.54mm_Horizontal","TerminalBlock_Phoenix/TerminalBlock_Phoenix_MPT-0,5-2-2.54_1x02_P2.54mm_Horizontal","TerminalBlock_Phoenix/TerminalBlock_Phoenix_MPT-0,5-3-2.54_1x03_P2.54mm_Horizontal","TerminalBlock_Phoenix/TerminalBlock_Phoenix_MPT-0,5-4-2.54_1x04_P2.54mm_Horizontal","TerminalBlock_Phoenix/TerminalBlock_Phoenix_MPT-0,5-5-2.54_1x05_P2.54mm_Horizontal","TerminalBlock_Phoenix/TerminalBlock_Phoenix_MPT-0,5-6-2.54_1x06_P2.54mm_Horizontal","TerminalBlock_Phoenix/TerminalBlock_Phoenix_MPT-0,5-7-2.54_1x07_P2.54mm_Horizontal","TerminalBlock_Phoenix/TerminalBlock_Phoenix_MPT-0,5-8-2.54_1x08_P2.54mm_Horizontal","TerminalBlock_Phoenix/TerminalBlock_Phoenix_MPT-0,5-9-2.54_1x09_P2.54mm_Horizontal","TerminalBlock_Phoenix/TerminalBlock_Phoenix_PT-1,5-10-3.5-H_1x10_P3.50mm_Horizontal","TerminalBlock_Phoenix/TerminalBlock_Phoenix_PT-1,5-10-5.0-H_1x10_P5.00mm_Horizontal","TerminalBlock_Phoenix/TerminalBlock_Phoenix_PT-1,5-11-3.5-H_1x11_P3.50mm_Horizontal","TerminalBlock_Phoenix/TerminalBlock_Phoenix_PT-1,5-11-5.0-H_1x11_P5.00mm_Horizontal","TerminalBlock_Phoenix/TerminalBlock_Phoenix_PT-1,5-12-3.5-H_1x12_P3.50mm_Horizontal","TerminalBlock_Phoenix/TerminalBlock_Phoenix_PT-1,5-12-5.0-H_1x12_P5.00mm_Horizontal","TerminalBlock_Phoenix/TerminalBlock_Phoenix_PT-1,5-13-3.5-H_1x13_P3.50mm_Horizontal","TerminalBlock_Phoenix/TerminalBlock_Phoenix_PT-1,5-13-5.0-H_1x13_P5.00mm_Horizontal","TerminalBlock_Phoenix/TerminalBlock_Phoenix_PT-1,5-14-3.5-H_1x14_P3.50mm_Horizontal","TerminalBlock_Phoenix/TerminalBlock_Phoenix_PT-1,5-14-5.0-H_1x14_P5.00mm_Horizontal","TerminalBlock_Phoenix/TerminalBlock_Phoenix_PT-1,5-15-3.5-H_1x15_P3.50mm_Horizontal","TerminalBlock_Phoenix/TerminalBlock_Phoenix_PT-1,5-15-5.0-H_1x15_P5.00mm_Horizontal","TerminalBlock_Phoenix/TerminalBlock_Phoenix_PT-1,5-16-3.5-H_1x16_P3.50mm_Horizontal","TerminalBlock_Phoenix/TerminalBlock_Phoenix_PT-1,5-16-5.0-H_1x16_P5.00mm_Horizontal","TerminalBlock_Phoenix/TerminalBlock_Phoenix_PT-1,5-2-3.5-H_1x02_P3.50mm_Horizontal","TerminalBlock_Phoenix/TerminalBlock_Phoenix_PT-1,5-2-5.0-H_1x02_P5.00mm_Horizontal","TerminalBlock_Phoenix/TerminalBlock_Phoenix_PT-1,5-3-3.5-H_1x03_P3.50mm_Horizontal","TerminalBlock_Phoenix/TerminalBlock_Phoenix_PT-1,5-3-5.0-H_1x03_P5.00mm_Horizontal","TerminalBlock_Phoenix/TerminalBlock_Phoenix_PT-1,5-4-3.5-H_1x04_P3.50mm_Horizontal","TerminalBlock_Phoenix/TerminalBlock_Phoenix_PT-1,5-4-5.0-H_1x04_P5.00mm_Horizontal","TerminalBlock_Phoenix/TerminalBlock_Phoenix_PT-1,5-5-3.5-H_1x05_P3.50mm_Horizontal","TerminalBlock_Phoenix/TerminalBlock_Phoenix_PT-1,5-5-5.0-H_1x05_P5.00mm_Horizontal","TerminalBlock_Phoenix/TerminalBlock_Phoenix_PT-1,5-6-3.5-H_1x06_P3.50mm_Horizontal","TerminalBlock_Phoenix/TerminalBlock_Phoenix_PT-1,5-6-5.0-H_1x06_P5.00mm_Horizontal","TerminalBlock_Phoenix/TerminalBlock_Phoenix_PT-1,5-7-3.5-H_1x07_P3.50mm_Horizontal","TerminalBlock_Phoenix/TerminalBlock_Phoenix_PT-1,5-7-5.0-H_1x07_P5.00mm_Horizontal","TerminalBlock_Phoenix/TerminalBlock_Phoenix_PT-1,5-8-3.5-H_1x08_P3.50mm_Horizontal","TerminalBlock_Phoenix/TerminalBlock_Phoenix_PT-1,5-8-5.0-H_1x08_P5.00mm_Horizontal","TerminalBlock_Phoenix/TerminalBlock_Phoenix_PT-1,5-9-3.5-H_1x09_P3.50mm_Horizontal","TerminalBlock_Phoenix/TerminalBlock_Phoenix_PT-1,5-9-5.0-H_1x09_P5.00mm_Horizontal","TerminalBlock_Phoenix/TerminalBlock_Phoenix_PTSM-0,5-2-2,5-V-SMD_1x02-1MP_P2.50mm_Vertical","TerminalBlock_Phoenix/TerminalBlock_Phoenix_PTSM-0,5-2-2.5-H-THR_1x02_P2.50mm_Horizontal","TerminalBlock_Phoenix/TerminalBlock_Phoenix_PTSM-0,5-2-2.5-V-THR_1x02_P2.50mm_Vertical","TerminalBlock_Phoenix/TerminalBlock_Phoenix_PTSM-0,5-2-HV-2.5-SMD_1x02-1MP_P2.50mm_Vertical","TerminalBlock_Phoenix/TerminalBlock_Phoenix_PTSM-0,5-3-2,5-V-SMD_1x03-1MP_P2.50mm_Vertical","TerminalBlock_Phoenix/TerminalBlock_Phoenix_PTSM-0,5-3-2.5-H-THR_1x03_P2.50mm_Horizontal","TerminalBlock_Phoenix/TerminalBlock_Phoenix_PTSM-0,5-3-2.5-V-THR_1x03_P2.50mm_Vertical","TerminalBlock_Phoenix/TerminalBlock_Phoenix_PTSM-0,5-3-HV-2.5-SMD_1x03-1MP_P2.50mm_Vertical","TerminalBlock_Phoenix/TerminalBlock_Phoenix_PTSM-0,5-4-2,5-V-SMD_1x04-1MP_P2.50mm_Vertical","TerminalBlock_Phoenix/TerminalBlock_Phoenix_PTSM-0,5-4-2.5-H-THR_1x04_P2.50mm_Horizontal","TerminalBlock_Phoenix/TerminalBlock_Phoenix_PTSM-0,5-4-2.5-V-THR_1x04_P2.50mm_Vertical","TerminalBlock_Phoenix/TerminalBlock_Phoenix_PTSM-0,5-4-HV-2.5-SMD_1x04-1MP_P2.50mm_Vertical","TerminalBlock_Phoenix/TerminalBlock_Phoenix_PTSM-0,5-5-2,5-V-SMD_1x05-1MP_P2.50mm_Vertical","TerminalBlock_Phoenix/TerminalBlock_Phoenix_PTSM-0,5-5-2.5-H-THR_1x05_P2.50mm_Horizontal","TerminalBlock_Phoenix/TerminalBlock_Phoenix_PTSM-0,5-5-2.5-V-THR_1x05_P2.50mm_Vertical","TerminalBlock_Phoenix/TerminalBlock_Phoenix_PTSM-0,5-5-HV-2.5-SMD_1x05-1MP_P2.50mm_Vertical","TerminalBlock_Phoenix/TerminalBlock_Phoenix_PTSM-0,5-6-2,5-V-SMD_1x06-1MP_P2.50mm_Vertical","TerminalBlock_Phoenix/TerminalBlock_Phoenix_PTSM-0,5-6-2.5-H-THR_1x06_P2.50mm_Horizontal","TerminalBlock_Phoenix/TerminalBlock_Phoenix_PTSM-0,5-6-2.5-V-THR_1x06_P2.50mm_Vertical","TerminalBlock_Phoenix/TerminalBlock_Phoenix_PTSM-0,5-6-HV-2.5-SMD_1x06-1MP_P2.50mm_Vertical","TerminalBlock_Phoenix/TerminalBlock_Phoenix_PTSM-0,5-7-2,5-V-SMD_1x07-1MP_P2.50mm_Vertical","TerminalBlock_Phoenix/TerminalBlock_Phoenix_PTSM-0,5-7-2.5-H-THR_1x07_P2.50mm_Horizontal","TerminalBlock_Phoenix/TerminalBlock_Phoenix_PTSM-0,5-7-2.5-V-THR_1x07_P2.50mm_Vertical","TerminalBlock_Phoenix/TerminalBlock_Phoenix_PTSM-0,5-7-HV-2.5-SMD_1x07-1MP_P2.50mm_Vertical","TerminalBlock_Phoenix/TerminalBlock_Phoenix_PTSM-0,5-8-2,5-V-SMD_1x08-1MP_P2.50mm_Vertical","TerminalBlock_Phoenix/TerminalBlock_Phoenix_PTSM-0,5-8-2.5-H-THR_1x08_P2.50mm_Horizontal","TerminalBlock_Phoenix/TerminalBlock_Phoenix_PTSM-0,5-8-2.5-V-THR_1x08_P2.50mm_Vertical","TerminalBlock_Phoenix/TerminalBlock_Phoenix_PTSM-0,5-8-HV-2.5-SMD_1x08-1MP_P2.50mm_Vertical","TerminalBlock_RND/TerminalBlock_RND_205-00001_1x02_P5.00mm_Horizontal","TerminalBlock_RND/TerminalBlock_RND_205-00002_1x03_P5.00mm_Horizontal","TerminalBlock_RND/TerminalBlock_RND_205-00003_1x04_P5.00mm_Horizontal","TerminalBlock_RND/TerminalBlock_RND_205-00004_1x05_P5.00mm_Horizontal","TerminalBlock_RND/TerminalBlock_RND_205-00005_1x06_P5.00mm_Horizontal","TerminalBlock_RND/TerminalBlock_RND_205-00006_1x07_P5.00mm_Horizontal","TerminalBlock_RND/TerminalBlock_RND_205-00007_1x08_P5.00mm_Horizontal","TerminalBlock_RND/TerminalBlock_RND_205-00008_1x09_P5.00mm_Horizontal","TerminalBlock_RND/TerminalBlock_RND_205-00009_1x10_P5.00mm_Horizontal","TerminalBlock_RND/TerminalBlock_RND_205-00010_1x11_P5.00mm_Horizontal","TerminalBlock_RND/TerminalBlock_RND_205-00011_1x12_P5.00mm_Horizontal","TerminalBlock_RND/TerminalBlock_RND_205-00012_1x02_P5.00mm_Horizontal","TerminalBlock_RND/TerminalBlock_RND_205-00013_1x03_P5.00mm_Horizontal","TerminalBlock_RND/TerminalBlock_RND_205-00014_1x04_P5.00mm_Horizontal","TerminalBlock_RND/TerminalBlock_RND_205-00015_1x05_P5.00mm_Horizontal","TerminalBlock_RND/TerminalBlock_RND_205-00016_1x06_P5.00mm_Horizontal","TerminalBlock_RND/TerminalBlock_RND_205-00017_1x07_P5.00mm_Horizontal","TerminalBlock_RND/TerminalBlock_RND_205-00018_1x08_P5.00mm_Horizontal","TerminalBlock_RND/TerminalBlock_RND_205-00019_1x09_P5.00mm_Horizontal","TerminalBlock_RND/TerminalBlock_RND_205-00020_1x10_P5.00mm_Horizontal","TerminalBlock_RND/TerminalBlock_RND_205-00021_1x11_P5.00mm_Horizontal","TerminalBlock_RND/TerminalBlock_RND_205-00022_1x12_P5.00mm_Horizontal","TerminalBlock_RND/TerminalBlock_RND_205-00023_1x02_P10.00mm_Horizontal","TerminalBlock_RND/TerminalBlock_RND_205-00024_1x03_P10.00mm_Horizontal","TerminalBlock_RND/TerminalBlock_RND_205-00025_1x04_P10.00mm_Horizontal","TerminalBlock_RND/TerminalBlock_RND_205-00026_1x05_P10.00mm_Horizontal","TerminalBlock_RND/TerminalBlock_RND_205-00027_1x06_P10.00mm_Horizontal","TerminalBlock_RND/TerminalBlock_RND_205-00028_1x07_P10.00mm_Horizontal","TerminalBlock_RND/TerminalBlock_RND_205-00029_1x08_P10.00mm_Horizontal","TerminalBlock_RND/TerminalBlock_RND_205-00030_1x09_P10.00mm_Horizontal","TerminalBlock_RND/TerminalBlock_RND_205-00031_1x10_P10.00mm_Horizontal","TerminalBlock_RND/TerminalBlock_RND_205-00032_1x11_P10.00mm_Horizontal","TerminalBlock_RND/TerminalBlock_RND_205-00033_1x12_P10.00mm_Horizontal","TerminalBlock_RND/TerminalBlock_RND_205-00045_1x02_P5.00mm_Horizontal","TerminalBlock_RND/TerminalBlock_RND_205-00046_1x03_P5.00mm_Horizontal","TerminalBlock_RND/TerminalBlock_RND_205-00047_1x04_P5.00mm_Horizontal","TerminalBlock_RND/TerminalBlock_RND_205-00048_1x05_P5.00mm_Horizontal","TerminalBlock_RND/TerminalBlock_RND_205-00049_1x06_P5.00mm_Horizontal","TerminalBlock_RND/TerminalBlock_RND_205-00050_1x07_P5.00mm_Horizontal","TerminalBlock_RND/TerminalBlock_RND_205-00051_1x08_P5.00mm_Horizontal","TerminalBlock_RND/TerminalBlock_RND_205-00052_1x09_P5.00mm_Horizontal","TerminalBlock_RND/TerminalBlock_RND_205-00053_1x10_P5.00mm_Horizontal","TerminalBlock_RND/TerminalBlock_RND_205-00054_1x11_P5.00mm_Horizontal","TerminalBlock_RND/TerminalBlock_RND_205-00055_1x12_P5.00mm_Horizontal","TerminalBlock_RND/TerminalBlock_RND_205-00056_1x02_P5.00mm_45Degree","TerminalBlock_RND/TerminalBlock_RND_205-00057_1x03_P5.00mm_45Degree","TerminalBlock_RND/TerminalBlock_RND_205-00058_1x04_P5.00mm_45Degree","TerminalBlock_RND/TerminalBlock_RND_205-00059_1x05_P5.00mm_45Degree","TerminalBlock_RND/TerminalBlock_RND_205-00060_1x06_P5.00mm_45Degree","TerminalBlock_RND/TerminalBlock_RND_205-00061_1x07_P5.00mm_45Degree","TerminalBlock_RND/TerminalBlock_RND_205-00062_1x08_P5.00mm_45Degree","TerminalBlock_RND/TerminalBlock_RND_205-00063_1x09_P5.00mm_45Degree","TerminalBlock_RND/TerminalBlock_RND_205-00064_1x10_P5.00mm_45Degree","TerminalBlock_RND/TerminalBlock_RND_205-00065_1x11_P5.00mm_45Degree","TerminalBlock_RND/TerminalBlock_RND_205-00066_1x12_P5.00mm_45Degree","TerminalBlock_RND/TerminalBlock_RND_205-00067_1x02_P7.50mm_Horizontal","TerminalBlock_RND/TerminalBlock_RND_205-00068_1x03_P7.50mm_Horizontal","TerminalBlock_RND/TerminalBlock_RND_205-00069_1x04_P7.50mm_Horizontal","TerminalBlock_RND/TerminalBlock_RND_205-00070_1x05_P7.50mm_Horizontal","TerminalBlock_RND/TerminalBlock_RND_205-00071_1x06_P7.50mm_Horizontal","TerminalBlock_RND/TerminalBlock_RND_205-00072_1x07_P7.50mm_Horizontal","TerminalBlock_RND/TerminalBlock_RND_205-00073_1x08_P7.50mm_Horizontal","TerminalBlock_RND/TerminalBlock_RND_205-00074_1x09_P7.50mm_Horizontal","TerminalBlock_RND/TerminalBlock_RND_205-00075_1x10_P7.50mm_Horizontal","TerminalBlock_RND/TerminalBlock_RND_205-00076_1x11_P7.50mm_Horizontal","TerminalBlock_RND/TerminalBlock_RND_205-00077_1x12_P7.50mm_Horizontal","TerminalBlock_RND/TerminalBlock_RND_205-00078_1x02_P10.00mm_Horizontal","TerminalBlock_RND/TerminalBlock_RND_205-00079_1x03_P10.00mm_Horizontal","TerminalBlock_RND/TerminalBlock_RND_205-00080_1x04_P10.00mm_Horizontal","TerminalBlock_RND/TerminalBlock_RND_205-00081_1x05_P10.00mm_Horizontal","TerminalBlock_RND/TerminalBlock_RND_205-00082_1x06_P10.00mm_Horizontal","TerminalBlock_RND/TerminalBlock_RND_205-00083_1x07_P10.00mm_Horizontal","TerminalBlock_RND/TerminalBlock_RND_205-00084_1x08_P10.00mm_Horizontal","TerminalBlock_RND/TerminalBlock_RND_205-00085_1x09_P10.00mm_Horizontal","TerminalBlock_RND/TerminalBlock_RND_205-00086_1x10_P10.00mm_Horizontal","TerminalBlock_RND/TerminalBlock_RND_205-00087_1x11_P10.00mm_Horizontal","TerminalBlock_RND/TerminalBlock_RND_205-00088_1x12_P10.00mm_Horizontal","TerminalBlock_RND/TerminalBlock_RND_205-00232_1x02_P5.08mm_Horizontal","TerminalBlock_RND/TerminalBlock_RND_205-00233_1x03_P5.08mm_Horizontal","TerminalBlock_RND/TerminalBlock_RND_205-00234_1x04_P5.08mm_Horizontal","TerminalBlock_RND/TerminalBlock_RND_205-00235_1x05_P5.08mm_Horizontal","TerminalBlock_RND/TerminalBlock_RND_205-00236_1x06_P5.08mm_Horizontal","TerminalBlock_RND/TerminalBlock_RND_205-00237_1x07_P5.08mm_Horizontal","TerminalBlock_RND/TerminalBlock_RND_205-00238_1x08_P5.08mm_Horizontal","TerminalBlock_RND/TerminalBlock_RND_205-00239_1x09_P5.08mm_Horizontal","TerminalBlock_RND/TerminalBlock_RND_205-00240_1x10_P5.08mm_Horizontal","TerminalBlock_RND/TerminalBlock_RND_205-00241_1x02_P10.16mm_Horizontal","TerminalBlock_RND/TerminalBlock_RND_205-00241_1x11_P5.08mm_Horizontal","TerminalBlock_RND/TerminalBlock_RND_205-00242_1x03_P10.16mm_Horizontal","TerminalBlock_RND/TerminalBlock_RND_205-00242_1x12_P5.08mm_Horizontal","TerminalBlock_RND/TerminalBlock_RND_205-00243_1x04_P10.16mm_Horizontal","TerminalBlock_RND/TerminalBlock_RND_205-00244_1x05_P10.16mm_Horizontal","TerminalBlock_RND/TerminalBlock_RND_205-00245_1x06_P10.16mm_Horizontal","TerminalBlock_RND/TerminalBlock_RND_205-00246_1x07_P10.16mm_Horizontal","TerminalBlock_RND/TerminalBlock_RND_205-00247_1x08_P10.16mm_Horizontal","TerminalBlock_RND/TerminalBlock_RND_205-00248_1x09_P10.16mm_Horizontal","TerminalBlock_RND/TerminalBlock_RND_205-00249_1x10_P10.16mm_Horizontal","TerminalBlock_RND/TerminalBlock_RND_205-00250_1x11_P10.16mm_Horizontal","TerminalBlock_RND/TerminalBlock_RND_205-00251_1x12_P10.16mm_Horizontal","TerminalBlock_RND/TerminalBlock_RND_205-00276_1x02_P5.00mm_Vertical","TerminalBlock_RND/TerminalBlock_RND_205-00277_1x03_P5.00mm_Vertical","TerminalBlock_RND/TerminalBlock_RND_205-00278_1x04_P5.00mm_Vertical","TerminalBlock_RND/TerminalBlock_RND_205-00279_1x05_P5.00mm_Vertical","TerminalBlock_RND/TerminalBlock_RND_205-00280_1x06_P5.00mm_Vertical","TerminalBlock_RND/TerminalBlock_RND_205-00281_1x07_P5.00mm_Vertical","TerminalBlock_RND/TerminalBlock_RND_205-00282_1x08_P5.00mm_Vertical","TerminalBlock_RND/TerminalBlock_RND_205-00283_1x09_P5.00mm_Vertical","TerminalBlock_RND/TerminalBlock_RND_205-00284_1x10_P5.00mm_Vertical","TerminalBlock_RND/TerminalBlock_RND_205-00285_1x11_P5.00mm_Vertical","TerminalBlock_RND/TerminalBlock_RND_205-00286_1x12_P5.00mm_Vertical","TerminalBlock_RND/TerminalBlock_RND_205-00287_1x02_P5.08mm_Horizontal","TerminalBlock_RND/TerminalBlock_RND_205-00288_1x03_P5.08mm_Horizontal","TerminalBlock_RND/TerminalBlock_RND_205-00289_1x04_P5.08mm_Horizontal","TerminalBlock_RND/TerminalBlock_RND_205-00290_1x05_P5.08mm_Horizontal","TerminalBlock_RND/TerminalBlock_RND_205-00291_1x06_P5.08mm_Horizontal","TerminalBlock_RND/TerminalBlock_RND_205-00292_1x07_P5.08mm_Horizontal","TerminalBlock_RND/TerminalBlock_RND_205-00293_1x08_P5.08mm_Horizontal","TerminalBlock_RND/TerminalBlock_RND_205-00294_1x09_P5.08mm_Horizontal","TerminalBlock_RND/TerminalBlock_RND_205-00295_1x10_P5.08mm_Horizontal","TerminalBlock_RND/TerminalBlock_RND_205-00296_1x11_P5.08mm_Horizontal","TerminalBlock_RND/TerminalBlock_RND_205-00297_1x12_P5.08mm_Horizontal","TerminalBlock_RND/TerminalBlock_RND_205-00298_1x02_P10.00mm_Horizontal","TerminalBlock_RND/TerminalBlock_RND_205-00299_1x03_P10.00mm_Horizontal","TerminalBlock_RND/TerminalBlock_RND_205-00300_1x04_P10.00mm_Horizontal","TerminalBlock_RND/TerminalBlock_RND_205-00301_1x05_P10.00mm_Horizontal","TerminalBlock_RND/TerminalBlock_RND_205-00302_1x06_P10.00mm_Horizontal","TerminalBlock_RND/TerminalBlock_RND_205-00303_1x07_P10.00mm_Horizontal","TerminalBlock_RND/TerminalBlock_RND_205-00304_1x08_P10.00mm_Horizontal","TerminalBlock_RND/TerminalBlock_RND_205-00305_1x09_P10.00mm_Horizontal","TerminalBlock_RND/TerminalBlock_RND_205-00306_1x10_P10.00mm_Horizontal","TerminalBlock_RND/TerminalBlock_RND_205-00307_1x11_P10.00mm_Horizontal","TerminalBlock_RND/TerminalBlock_RND_205-00308_1x12_P10.00mm_Horizontal","TerminalBlock_TE-Connectivity/TerminalBlock_TE_1-282834-0_1x10_P2.54mm_Horizontal","TerminalBlock_TE-Connectivity/TerminalBlock_TE_1-282834-1_1x11_P2.54mm_Horizontal","TerminalBlock_TE-Connectivity/TerminalBlock_TE_1-282834-2_1x12_P2.54mm_Horizontal","TerminalBlock_TE-Connectivity/TerminalBlock_TE_282834-2_1x02_P2.54mm_Horizontal","TerminalBlock_TE-Connectivity/TerminalBlock_TE_282834-3_1x03_P2.54mm_Horizontal","TerminalBlock_TE-Connectivity/TerminalBlock_TE_282834-4_1x04_P2.54mm_Horizontal","TerminalBlock_TE-Connectivity/TerminalBlock_TE_282834-5_1x05_P2.54mm_Horizontal","TerminalBlock_TE-Connectivity/TerminalBlock_TE_282834-6_1x06_P2.54mm_Horizontal","TerminalBlock_TE-Connectivity/TerminalBlock_TE_282834-7_1x07_P2.54mm_Horizontal","TerminalBlock_TE-Connectivity/TerminalBlock_TE_282834-8_1x08_P2.54mm_Horizontal","TerminalBlock_TE-Connectivity/TerminalBlock_TE_282834-9_1x09_P2.54mm_Horizontal","TerminalBlock_WAGO/TerminalBlock_WAGO_233-502_2x02_P2.54mm","TerminalBlock_WAGO/TerminalBlock_WAGO_233-503_2x03_P2.54mm","TerminalBlock_WAGO/TerminalBlock_WAGO_233-504_2x04_P2.54mm","TerminalBlock_WAGO/TerminalBlock_WAGO_233-505_2x05_P2.54mm","TerminalBlock_WAGO/TerminalBlock_WAGO_233-506_2x06_P2.54mm","TerminalBlock_WAGO/TerminalBlock_WAGO_233-507_2x07_P2.54mm","TerminalBlock_WAGO/TerminalBlock_WAGO_233-508_2x08_P2.54mm","TerminalBlock_WAGO/TerminalBlock_WAGO_233-509_2x09_P2.54mm","TerminalBlock_WAGO/TerminalBlock_WAGO_233-510_2x10_P2.54mm","TerminalBlock_WAGO/TerminalBlock_WAGO_233-512_2x12_P2.54mm","TerminalBlock_WAGO/TerminalBlock_WAGO_236-101_1x01_P5.00mm_45Degree","TerminalBlock_WAGO/TerminalBlock_WAGO_236-102_1x02_P5.00mm_45Degree","TerminalBlock_WAGO/TerminalBlock_WAGO_236-103_1x03_P5.00mm_45Degree","TerminalBlock_WAGO/TerminalBlock_WAGO_236-104_1x04_P5.00mm_45Degree","TerminalBlock_WAGO/TerminalBlock_WAGO_236-105_1x05_P5.00mm_45Degree","TerminalBlock_WAGO/TerminalBlock_WAGO_236-106_1x06_P5.00mm_45Degree","TerminalBlock_WAGO/TerminalBlock_WAGO_236-107_1x07_P5.00mm_45Degree","TerminalBlock_WAGO/TerminalBlock_WAGO_236-108_1x08_P5.00mm_45Degree","TerminalBlock_WAGO/TerminalBlock_WAGO_236-109_1x09_P5.00mm_45Degree","TerminalBlock_WAGO/TerminalBlock_WAGO_236-110_1x10_P5.00mm_45Degree","TerminalBlock_WAGO/TerminalBlock_WAGO_236-111_1x11_P5.00mm_45Degree","TerminalBlock_WAGO/TerminalBlock_WAGO_236-112_1x12_P5.00mm_45Degree","TerminalBlock_WAGO/TerminalBlock_WAGO_236-113_1x13_P5.00mm_45Degree","TerminalBlock_WAGO/TerminalBlock_WAGO_236-114_1x14_P5.00mm_45Degree","TerminalBlock_WAGO/TerminalBlock_WAGO_236-115_1x15_P5.00mm_45Degree","TerminalBlock_WAGO/TerminalBlock_WAGO_236-116_1x16_P5.00mm_45Degree","TerminalBlock_WAGO/TerminalBlock_WAGO_236-124_1x24_P5.00mm_45Degree","TerminalBlock_WAGO/TerminalBlock_WAGO_236-136_1x36_P5.00mm_45Degree","TerminalBlock_WAGO/TerminalBlock_WAGO_236-148_1x48_P5.00mm_45Degree","TerminalBlock_WAGO/TerminalBlock_WAGO_236-201_1x01_P7.50mm_45Degree","TerminalBlock_WAGO/TerminalBlock_WAGO_236-202_1x02_P7.50mm_45Degree","TerminalBlock_WAGO/TerminalBlock_WAGO_236-203_1x03_P7.50mm_45Degree","TerminalBlock_WAGO/TerminalBlock_WAGO_236-204_1x04_P7.50mm_45Degree","TerminalBlock_WAGO/TerminalBlock_WAGO_236-205_1x05_P7.50mm_45Degree","TerminalBlock_WAGO/TerminalBlock_WAGO_236-206_1x06_P7.50mm_45Degree","TerminalBlock_WAGO/TerminalBlock_WAGO_236-207_1x07_P7.50mm_45Degree","TerminalBlock_WAGO/TerminalBlock_WAGO_236-208_1x08_P7.50mm_45Degree","TerminalBlock_WAGO/TerminalBlock_WAGO_236-209_1x09_P7.50mm_45Degree","TerminalBlock_WAGO/TerminalBlock_WAGO_236-210_1x10_P7.50mm_45Degree","TerminalBlock_WAGO/TerminalBlock_WAGO_236-211_1x11_P7.50mm_45Degree","TerminalBlock_WAGO/TerminalBlock_WAGO_236-212_1x12_P7.50mm_45Degree","TerminalBlock_WAGO/TerminalBlock_WAGO_236-213_1x13_P7.50mm_45Degree","TerminalBlock_WAGO/TerminalBlock_WAGO_236-214_1x14_P7.50mm_45Degree","TerminalBlock_WAGO/TerminalBlock_WAGO_236-215_1x15_P7.50mm_45Degree","TerminalBlock_WAGO/TerminalBlock_WAGO_236-216_1x16_P7.50mm_45Degree","TerminalBlock_WAGO/TerminalBlock_WAGO_236-224_1x24_P7.50mm_45Degree","TerminalBlock_WAGO/TerminalBlock_WAGO_236-301_1x01_P10.00mm_45Degree","TerminalBlock_WAGO/TerminalBlock_WAGO_236-302_1x02_P10.00mm_45Degree","TerminalBlock_WAGO/TerminalBlock_WAGO_236-303_1x03_P10.00mm_45Degree","TerminalBlock_WAGO/TerminalBlock_WAGO_236-304_1x04_P10.00mm_45Degree","TerminalBlock_WAGO/TerminalBlock_WAGO_236-305_1x05_P10.00mm_45Degree","TerminalBlock_WAGO/TerminalBlock_WAGO_236-306_1x06_P10.00mm_45Degree","TerminalBlock_WAGO/TerminalBlock_WAGO_236-307_1x07_P10.00mm_45Degree","TerminalBlock_WAGO/TerminalBlock_WAGO_236-308_1x08_P10.00mm_45Degree","TerminalBlock_WAGO/TerminalBlock_WAGO_236-309_1x09_P10.00mm_45Degree","TerminalBlock_WAGO/TerminalBlock_WAGO_236-310_1x10_P10.00mm_45Degree","TerminalBlock_WAGO/TerminalBlock_WAGO_236-311_1x11_P10.00mm_45Degree","TerminalBlock_WAGO/TerminalBlock_WAGO_236-312_1x12_P10.00mm_45Degree","TerminalBlock_WAGO/TerminalBlock_WAGO_236-313_1x13_P10.00mm_45Degree","TerminalBlock_WAGO/TerminalBlock_WAGO_236-314_1x14_P10.00mm_45Degree","TerminalBlock_WAGO/TerminalBlock_WAGO_236-315_1x15_P10.00mm_45Degree","TerminalBlock_WAGO/TerminalBlock_WAGO_236-316_1x16_P10.00mm_45Degree","TerminalBlock_WAGO/TerminalBlock_WAGO_236-324_1x24_P10.00mm_45Degree","TerminalBlock_WAGO/TerminalBlock_WAGO_236-401_1x01_P5.00mm_45Degree","TerminalBlock_WAGO/TerminalBlock_WAGO_236-402_1x02_P5.00mm_45Degree","TerminalBlock_WAGO/TerminalBlock_WAGO_236-403_1x03_P5.00mm_45Degree","TerminalBlock_WAGO/TerminalBlock_WAGO_236-404_1x04_P5.00mm_45Degree","TerminalBlock_WAGO/TerminalBlock_WAGO_236-405_1x05_P5.00mm_45Degree","TerminalBlock_WAGO/TerminalBlock_WAGO_236-406_1x06_P5.00mm_45Degree","TerminalBlock_WAGO/TerminalBlock_WAGO_236-407_1x07_P5.00mm_45Degree","TerminalBlock_WAGO/TerminalBlock_WAGO_236-408_1x08_P5.00mm_45Degree","TerminalBlock_WAGO/TerminalBlock_WAGO_236-409_1x09_P5.00mm_45Degree","TerminalBlock_WAGO/TerminalBlock_WAGO_236-410_1x10_P5.00mm_45Degree","TerminalBlock_WAGO/TerminalBlock_WAGO_236-411_1x11_P5.00mm_45Degree","TerminalBlock_WAGO/TerminalBlock_WAGO_236-412_1x12_P5.00mm_45Degree","TerminalBlock_WAGO/TerminalBlock_WAGO_236-413_1x13_P5.00mm_45Degree","TerminalBlock_WAGO/TerminalBlock_WAGO_236-414_1x14_P5.00mm_45Degree","TerminalBlock_WAGO/TerminalBlock_WAGO_236-415_1x15_P5.00mm_45Degree","TerminalBlock_WAGO/TerminalBlock_WAGO_236-416_1x16_P5.00mm_45Degree","TerminalBlock_WAGO/TerminalBlock_WAGO_236-424_1x24_P5.00mm_45Degree","TerminalBlock_WAGO/TerminalBlock_WAGO_236-436_1x36_P5.00mm_45Degree","TerminalBlock_WAGO/TerminalBlock_WAGO_236-448_1x48_P5.00mm_45Degree","TerminalBlock_WAGO/TerminalBlock_WAGO_236-501_1x01_P7.50mm_45Degree","TerminalBlock_WAGO/TerminalBlock_WAGO_236-502_1x02_P7.50mm_45Degree","TerminalBlock_WAGO/TerminalBlock_WAGO_236-503_1x03_P7.50mm_45Degree","TerminalBlock_WAGO/TerminalBlock_WAGO_236-504_1x04_P7.50mm_45Degree","TerminalBlock_WAGO/TerminalBlock_WAGO_236-505_1x05_P7.50mm_45Degree","TerminalBlock_WAGO/TerminalBlock_WAGO_236-506_1x06_P7.50mm_45Degree","TerminalBlock_WAGO/TerminalBlock_WAGO_236-507_1x07_P7.50mm_45Degree","TerminalBlock_WAGO/TerminalBlock_WAGO_236-508_1x08_P7.50mm_45Degree","TerminalBlock_WAGO/TerminalBlock_WAGO_236-509_1x09_P7.50mm_45Degree","TerminalBlock_WAGO/TerminalBlock_WAGO_236-510_1x10_P7.50mm_45Degree","TerminalBlock_WAGO/TerminalBlock_WAGO_236-511_1x11_P7.50mm_45Degree","TerminalBlock_WAGO/TerminalBlock_WAGO_236-512_1x12_P7.50mm_45Degree","TerminalBlock_WAGO/TerminalBlock_WAGO_236-513_1x13_P7.50mm_45Degree","TerminalBlock_WAGO/TerminalBlock_WAGO_236-514_1x14_P7.50mm_45Degree","TerminalBlock_WAGO/TerminalBlock_WAGO_236-515_1x15_P7.50mm_45Degree","TerminalBlock_WAGO/TerminalBlock_WAGO_236-516_1x16_P7.50mm_45Degree","TerminalBlock_WAGO/TerminalBlock_WAGO_236-524_1x24_P7.50mm_45Degree","TerminalBlock_WAGO/TerminalBlock_WAGO_236-601_1x01_P10.00mm_45Degree","TerminalBlock_WAGO/TerminalBlock_WAGO_236-602_1x02_P10.00mm_45Degree","TerminalBlock_WAGO/TerminalBlock_WAGO_236-603_1x03_P10.00mm_45Degree","TerminalBlock_WAGO/TerminalBlock_WAGO_236-604_1x04_P10.00mm_45Degree","TerminalBlock_WAGO/TerminalBlock_WAGO_236-605_1x05_P10.00mm_45Degree","TerminalBlock_WAGO/TerminalBlock_WAGO_236-606_1x06_P10.00mm_45Degree","TerminalBlock_WAGO/TerminalBlock_WAGO_236-607_1x07_P10.00mm_45Degree","TerminalBlock_WAGO/TerminalBlock_WAGO_236-608_1x08_P10.00mm_45Degree","TerminalBlock_WAGO/TerminalBlock_WAGO_236-609_1x09_P10.00mm_45Degree","TerminalBlock_WAGO/TerminalBlock_WAGO_236-610_1x10_P10.00mm_45Degree","TerminalBlock_WAGO/TerminalBlock_WAGO_236-611_1x11_P10.00mm_45Degree","TerminalBlock_WAGO/TerminalBlock_WAGO_236-612_1x12_P10.00mm_45Degree","TerminalBlock_WAGO/TerminalBlock_WAGO_236-613_1x13_P10.00mm_45Degree","TerminalBlock_WAGO/TerminalBlock_WAGO_236-614_1x14_P10.00mm_45Degree","TerminalBlock_WAGO/TerminalBlock_WAGO_236-615_1x15_P10.00mm_45Degree","TerminalBlock_WAGO/TerminalBlock_WAGO_236-616_1x16_P10.00mm_45Degree","TerminalBlock_WAGO/TerminalBlock_WAGO_236-624_1x24_P10.00mm_45Degree","TerminalBlock_WAGO/TerminalBlock_WAGO_2601-1102_1x02_P3.50mm_Horizontal","TerminalBlock_WAGO/TerminalBlock_WAGO_2601-1103_1x03_P3.50mm_Horizontal","TerminalBlock_WAGO/TerminalBlock_WAGO_2601-1104_1x04_P3.50mm_Horizontal","TerminalBlock_WAGO/TerminalBlock_WAGO_2601-1105_1x05_P3.50mm_Horizontal","TerminalBlock_WAGO/TerminalBlock_WAGO_2601-1106_1x06_P3.50mm_Horizontal","TerminalBlock_WAGO/TerminalBlock_WAGO_2601-1108_1x08_P3.50mm_Horizontal","TerminalBlock_WAGO/TerminalBlock_WAGO_2601-1109_1x09_P3.50mm_Horizontal","TerminalBlock_WAGO/TerminalBlock_WAGO_2601-1110_1x10_P3.50mm_Horizontal","TerminalBlock_WAGO/TerminalBlock_WAGO_2601-1111_1x11_P3.50mm_Horizontal","TerminalBlock_WAGO/TerminalBlock_WAGO_2601-1112_1x12_P3.50mm_Horizontal","TerminalBlock_WAGO/TerminalBlock_WAGO_2601-3102_1x02_P3.50mm_Vertical","TerminalBlock_WAGO/TerminalBlock_WAGO_2601-3103_1x03_P3.50mm_Vertical","TerminalBlock_WAGO/TerminalBlock_WAGO_2601-3104_1x04_P3.50mm_Vertical","TerminalBlock_WAGO/TerminalBlock_WAGO_2601-3105_1x05_P3.50mm_Vertical","TerminalBlock_WAGO/TerminalBlock_WAGO_2601-3106_1x06_P3.50mm_Vertical","TerminalBlock_WAGO/TerminalBlock_WAGO_2601-3107_1x07_P3.50mm_Vertical","TerminalBlock_WAGO/TerminalBlock_WAGO_2601-3108_1x08_P3.50mm_Vertical","TerminalBlock_WAGO/TerminalBlock_WAGO_2601-3109_1x09_P3.50mm_Vertical","TerminalBlock_WAGO/TerminalBlock_WAGO_2601-3110_1x10_P3.50mm_Vertical","TerminalBlock_WAGO/TerminalBlock_WAGO_2601-3111_1x11_P3.50mm_Vertical","TerminalBlock_WAGO/TerminalBlock_WAGO_2601-3112_1x12_P3.50mm_Vertical","TerminalBlock_WAGO/TerminalBlock_WAGO_2601-3114_1x14_P3.50mm_Vertical","TerminalBlock_WAGO/TerminalBlock_WAGO_2601-3124_1x24_P3.50mm_Vertical","TerminalBlock_WAGO/TerminalBlock_WAGO_804-101_1x01_P5.00mm_45Degree","TerminalBlock_WAGO/TerminalBlock_WAGO_804-102_1x02_P5.00mm_45Degree","TerminalBlock_WAGO/TerminalBlock_WAGO_804-103_1x03_P5.00mm_45Degree","TerminalBlock_WAGO/TerminalBlock_WAGO_804-104_1x04_P5.00mm_45Degree","TerminalBlock_WAGO/TerminalBlock_WAGO_804-105_1x05_P5.00mm_45Degree","TerminalBlock_WAGO/TerminalBlock_WAGO_804-106_1x06_P5.00mm_45Degree","TerminalBlock_WAGO/TerminalBlock_WAGO_804-107_1x07_P5.00mm_45Degree","TerminalBlock_WAGO/TerminalBlock_WAGO_804-108_1x08_P5.00mm_45Degree","TerminalBlock_WAGO/TerminalBlock_WAGO_804-109_1x09_P5.00mm_45Degree","TerminalBlock_WAGO/TerminalBlock_WAGO_804-110_1x10_P5.00mm_45Degree","TerminalBlock_WAGO/TerminalBlock_WAGO_804-111_1x11_P5.00mm_45Degree","TerminalBlock_WAGO/TerminalBlock_WAGO_804-112_1x12_P5.00mm_45Degree","TerminalBlock_WAGO/TerminalBlock_WAGO_804-113_1x13_P5.00mm_45Degree","TerminalBlock_WAGO/TerminalBlock_WAGO_804-114_1x14_P5.00mm_45Degree","TerminalBlock_WAGO/TerminalBlock_WAGO_804-115_1x15_P5.00mm_45Degree","TerminalBlock_WAGO/TerminalBlock_WAGO_804-116_1x16_P5.00mm_45Degree","TerminalBlock_WAGO/TerminalBlock_WAGO_804-124_1x24_P5.00mm_45Degree","TerminalBlock_WAGO/TerminalBlock_WAGO_804-301_1x01_P7.50mm_45Degree","TerminalBlock_WAGO/TerminalBlock_WAGO_804-302_1x02_P7.50mm_45Degree","TerminalBlock_WAGO/TerminalBlock_WAGO_804-303_1x03_P7.50mm_45Degree","TerminalBlock_WAGO/TerminalBlock_WAGO_804-304_1x04_P7.50mm_45Degree","TerminalBlock_WAGO/TerminalBlock_WAGO_804-305_1x05_P7.50mm_45Degree","TerminalBlock_WAGO/TerminalBlock_WAGO_804-306_1x06_P7.50mm_45Degree","TerminalBlock_WAGO/TerminalBlock_WAGO_804-307_1x07_P7.50mm_45Degree","TerminalBlock_WAGO/TerminalBlock_WAGO_804-308_1x08_P7.50mm_45Degree","TerminalBlock_WAGO/TerminalBlock_WAGO_804-309_1x09_P7.50mm_45Degree","TerminalBlock_WAGO/TerminalBlock_WAGO_804-310_1x10_P7.50mm_45Degree","TerminalBlock_WAGO/TerminalBlock_WAGO_804-311_1x11_P7.50mm_45Degree","TerminalBlock_WAGO/TerminalBlock_WAGO_804-312_1x12_P7.50mm_45Degree","TerminalBlock_WAGO/TerminalBlock_WAGO_804-316_1x16_P7.50mm_45Degree","TerminalBlock_WAGO/TerminalBlock_WAGO_804-324_1x24_P7.50mm_45Degree","TerminalBlock_Wuerth/Wuerth_691311400102_P7.62mm","TerminalBlock_Wuerth/Wuerth_REDCUBE-THR_WP-THRBU_74650073_THR","TerminalBlock_Wuerth/Wuerth_REDCUBE-THR_WP-THRBU_74650074_THR","TerminalBlock_Wuerth/Wuerth_REDCUBE-THR_WP-THRBU_74650094_THR","TerminalBlock_Wuerth/Wuerth_REDCUBE-THR_WP-THRBU_74650173_THR","TerminalBlock_Wuerth/Wuerth_REDCUBE-THR_WP-THRBU_74650174_THR","TerminalBlock_Wuerth/Wuerth_REDCUBE-THR_WP-THRBU_74650194_THR","TerminalBlock_Wuerth/Wuerth_REDCUBE-THR_WP-THRBU_74650195_THR","TerminalBlock_Wuerth/Wuerth_REDCUBE-THR_WP-THRBU_74655095_THR","TerminalBlock_Wuerth/Wuerth_REDCUBE-THR_WP-THRSH_74651173_THR","TerminalBlock_Wuerth/Wuerth_REDCUBE-THR_WP-THRSH_74651174_THR","TerminalBlock_Wuerth/Wuerth_REDCUBE-THR_WP-THRSH_74651175_THR","TerminalBlock_Wuerth/Wuerth_REDCUBE-THR_WP-THRSH_74651194_THR","TerminalBlock_Wuerth/Wuerth_REDCUBE-THR_WP-THRSH_74651195_THR","TestPoint/TestPoint_2Pads_Pitch2.54mm_Drill0.8mm","TestPoint/TestPoint_2Pads_Pitch5.08mm_Drill1.3mm","TestPoint/TestPoint_Bridge_Pitch2.0mm_Drill0.7mm","TestPoint/TestPoint_Bridge_Pitch2.54mm_Drill0.7mm","TestPoint/TestPoint_Bridge_Pitch2.54mm_Drill1.0mm","TestPoint/TestPoint_Bridge_Pitch2.54mm_Drill1.3mm","TestPoint/TestPoint_Bridge_Pitch3.81mm_Drill1.3mm","TestPoint/TestPoint_Bridge_Pitch5.08mm_Drill0.7mm","TestPoint/TestPoint_Bridge_Pitch5.08mm_Drill1.3mm","TestPoint/TestPoint_Bridge_Pitch6.35mm_Drill1.3mm","TestPoint/TestPoint_Bridge_Pitch7.62mm_Drill1.3mm","TestPoint/TestPoint_Keystone_5000-5004_Miniature","TestPoint/TestPoint_Keystone_5005-5009_Compact","TestPoint/TestPoint_Keystone_5010-5014_Multipurpose","TestPoint/TestPoint_Keystone_5015_Micro_Mini","TestPoint/TestPoint_Keystone_5019_Miniature","TestPoint/TestPoint_Loop_D1.80mm_Drill1.0mm_Beaded","TestPoint/TestPoint_Loop_D2.50mm_Drill1.0mm","TestPoint/TestPoint_Loop_D2.50mm_Drill1.0mm_LowProfile","TestPoint/TestPoint_Loop_D2.50mm_Drill1.85mm","TestPoint/TestPoint_Loop_D2.54mm_Drill1.5mm_Beaded","TestPoint/TestPoint_Loop_D2.60mm_Drill0.9mm_Beaded","TestPoint/TestPoint_Loop_D2.60mm_Drill1.4mm_Beaded","TestPoint/TestPoint_Loop_D2.60mm_Drill1.6mm_Beaded","TestPoint/TestPoint_Loop_D3.50mm_Drill0.9mm_Beaded","TestPoint/TestPoint_Loop_D3.50mm_Drill1.4mm_Beaded","TestPoint/TestPoint_Loop_D3.80mm_Drill2.0mm","TestPoint/TestPoint_Loop_D3.80mm_Drill2.5mm","TestPoint/TestPoint_Loop_D3.80mm_Drill2.8mm","TestPoint/TestPoint_Pad_1.0x1.0mm","TestPoint/TestPoint_Pad_1.5x1.5mm","TestPoint/TestPoint_Pad_2.0x2.0mm","TestPoint/TestPoint_Pad_2.5x2.5mm","TestPoint/TestPoint_Pad_3.0x3.0mm","TestPoint/TestPoint_Pad_4.0x4.0mm","TestPoint/TestPoint_Pad_D1.0mm","TestPoint/TestPoint_Pad_D1.5mm","TestPoint/TestPoint_Pad_D2.0mm","TestPoint/TestPoint_Pad_D2.5mm","TestPoint/TestPoint_Pad_D3.0mm","TestPoint/TestPoint_Pad_D4.0mm","TestPoint/TestPoint_Plated_Hole_D2.0mm","TestPoint/TestPoint_Plated_Hole_D3.0mm","TestPoint/TestPoint_Plated_Hole_D4.0mm","TestPoint/TestPoint_Plated_Hole_D5.0mm","TestPoint/TestPoint_THTPad_1.0x1.0mm_Drill0.5mm","TestPoint/TestPoint_THTPad_1.5x1.5mm_Drill0.7mm","TestPoint/TestPoint_THTPad_2.0x2.0mm_Drill1.0mm","TestPoint/TestPoint_THTPad_2.5x2.5mm_Drill1.2mm","TestPoint/TestPoint_THTPad_3.0x3.0mm_Drill1.5mm","TestPoint/TestPoint_THTPad_4.0x4.0mm_Drill2.0mm","TestPoint/TestPoint_THTPad_D1.0mm_Drill0.5mm","TestPoint/TestPoint_THTPad_D1.5mm_Drill0.7mm","TestPoint/TestPoint_THTPad_D2.0mm_Drill1.0mm","TestPoint/TestPoint_THTPad_D2.5mm_Drill1.2mm","TestPoint/TestPoint_THTPad_D3.0mm_Drill1.5mm","TestPoint/TestPoint_THTPad_D4.0mm_Drill2.0mm","Transformer_SMD/Pulse_P0926NL","Transformer_SMD/Pulse_PA1323NL","Transformer_SMD/Pulse_PA2001NL","Transformer_SMD/Pulse_PA2002NL-PA2008NL-PA2009NL","Transformer_SMD/Pulse_PA2004NL","Transformer_SMD/Pulse_PA2005NL","Transformer_SMD/Pulse_PA2006NL","Transformer_SMD/Pulse_PA2007NL","Transformer_SMD/Pulse_PA2777NL","Transformer_SMD/Pulse_PA3493NL","Transformer_SMD/Transformer_Coilcraft_CST1","Transformer_SMD/Transformer_Coilcraft_CST2","Transformer_SMD/Transformer_Coilcraft_CST2010","Transformer_SMD/Transformer_CurrentSense_8.4x7.2mm","Transformer_SMD/Transformer_ED8_4-Lead_10.5x8mm_P5mm","Transformer_SMD/Transformer_Ethernet_Bel_S558-5999-T7-F","Transformer_SMD/Transformer_Ethernet_Bourns_PT61017PEL","Transformer_SMD/Transformer_Ethernet_Bourns_PT61020EL","Transformer_SMD/Transformer_Ethernet_Bourns_SM13126PEL","Transformer_SMD/Transformer_Ethernet_CNDtek_H1102N","Transformer_SMD/Transformer_Ethernet_HALO_TG111-MSC13","Transformer_SMD/Transformer_Ethernet_Halo_N2_SO-16_7.11x12.7mm","Transformer_SMD/Transformer_Ethernet_Halo_N5_SO-16_7.11x12.7mm","Transformer_SMD/Transformer_Ethernet_Halo_N6_SO-16_7.11x14.73mm","Transformer_SMD/Transformer_Ethernet_Wuerth_749013011A","Transformer_SMD/Transformer_Ethernet_YDS_30F-51NL_SO-24_7.1x15.1mm","Transformer_SMD/Transformer_MACOM_SM-22","Transformer_SMD/Transformer_MiniCircuits_AT224-1A","Transformer_SMD/Transformer_Murata_78250JC","Transformer_SMD/Transformer_NF_ETAL_P2781","Transformer_SMD/Transformer_NF_ETAL_P2781_HandSoldering","Transformer_SMD/Transformer_NF_ETAL_P3000","Transformer_SMD/Transformer_NF_ETAL_P3000_HandSoldering","Transformer_SMD/Transformer_NF_ETAL_P3181","Transformer_SMD/Transformer_NF_ETAL_P3181_HandSoldering","Transformer_SMD/Transformer_NF_ETAL_P3188","Transformer_SMD/Transformer_NF_ETAL_P3188_HandSoldering","Transformer_SMD/Transformer_NF_ETAL_P3191","Transformer_SMD/Transformer_NF_ETAL_P3191_HandSoldering","Transformer_SMD/Transformer_Pulse_H1100NL","Transformer_SMD/Transformer_Wuerth_750315371","Transformer_SMD/Transformer_Wurth_WE-AGDT-EP7","Transformer_THT/Autotransformer_Toroid_1Tap_Horizontal_D10.5mm_Amidon-T37","Transformer_THT/Autotransformer_Toroid_1Tap_Horizontal_D12.5mm_Amidon-T44","Transformer_THT/Autotransformer_Toroid_1Tap_Horizontal_D14.0mm_Amidon-T50","Transformer_THT/Autotransformer_Toroid_1Tap_Horizontal_D9.0mm_Amidon-T30","Transformer_THT/Autotransformer_ZS1052-AC","Transformer_THT/Transformer_37x44","Transformer_THT/Transformer_Breve_TEZ-22x24","Transformer_THT/Transformer_Breve_TEZ-28x33","Transformer_THT/Transformer_Breve_TEZ-35x42","Transformer_THT/Transformer_Breve_TEZ-38x45","Transformer_THT/Transformer_Breve_TEZ-44x52","Transformer_THT/Transformer_Breve_TEZ-47x57","Transformer_THT/Transformer_CHK_EI30-2VA_1xSec","Transformer_THT/Transformer_CHK_EI30-2VA_2xSec","Transformer_THT/Transformer_CHK_EI30-2VA_Neutral","Transformer_THT/Transformer_CHK_EI38-3VA_1xSec","Transformer_THT/Transformer_CHK_EI38-3VA_2xSec","Transformer_THT/Transformer_CHK_EI38-3VA_Neutral","Transformer_THT/Transformer_CHK_EI42-5VA_1xSec","Transformer_THT/Transformer_CHK_EI42-5VA_2xSec","Transformer_THT/Transformer_CHK_EI42-5VA_Neutral","Transformer_THT/Transformer_CHK_EI48-10VA_1xSec","Transformer_THT/Transformer_CHK_EI48-10VA_2xSec","Transformer_THT/Transformer_CHK_EI48-10VA_Neutral","Transformer_THT/Transformer_CHK_EI48-8VA_1xSec","Transformer_THT/Transformer_CHK_EI48-8VA_2xSec","Transformer_THT/Transformer_CHK_EI48-8VA_Neutral","Transformer_THT/Transformer_CHK_EI54-12VA_1xSec","Transformer_THT/Transformer_CHK_EI54-12VA_2xSec","Transformer_THT/Transformer_CHK_EI54-12VA_Neutral","Transformer_THT/Transformer_CHK_EI54-16VA_1xSec","Transformer_THT/Transformer_CHK_EI54-16VA_2xSec","Transformer_THT/Transformer_CHK_EI54-16VA_Neutral","Transformer_THT/Transformer_CHK_UI30-4VA_Flat","Transformer_THT/Transformer_CHK_UI39-10VA_Flat","Transformer_THT/Transformer_Coilcraft_Q4434-B_Rhombus-T1311","Transformer_THT/Transformer_EPCOS_B66359A1013T_Horizontal","Transformer_THT/Transformer_EPCOS_B66359J1014T_Vertical","Transformer_THT/Transformer_Microphone_Lundahl_LL1538","Transformer_THT/Transformer_Microphone_Lundahl_LL1587","Transformer_THT/Transformer_Myrra_74040_Horizontal","Transformer_THT/Transformer_Myrra_EF20_7408x","Transformer_THT/Transformer_Myrra_EI30-5_44000_Horizontal","Transformer_THT/Transformer_NF_ETAL_1-1_P1200","Transformer_THT/Transformer_NF_ETAL_P1165","Transformer_THT/Transformer_NF_ETAL_P3324","Transformer_THT/Transformer_NF_ETAL_P3356","Transformer_THT/Transformer_Toroid_Horizontal_D10.5mm_Amidon-T37","Transformer_THT/Transformer_Toroid_Horizontal_D12.5mm_Amidon-T44","Transformer_THT/Transformer_Toroid_Horizontal_D14.0mm_Amidon-T50","Transformer_THT/Transformer_Toroid_Horizontal_D18.0mm","Transformer_THT/Transformer_Toroid_Horizontal_D9.0mm_Amidon-T30","Transformer_THT/Transformer_Toroid_Tapped_Horizontal_D10.5mm_Amidon-T37","Transformer_THT/Transformer_Toroid_Tapped_Horizontal_D12.5mm_Amidon-T44","Transformer_THT/Transformer_Toroid_Tapped_Horizontal_D14.0mm_Amidon-T50","Transformer_THT/Transformer_Toroid_Tapped_Horizontal_D9.0mm_Amidon-T30","Transformer_THT/Transformer_Triad_VPP16-310","Transformer_THT/Transformer_Wuerth_750343373","Transformer_THT/Transformer_Wuerth_760871131","Transformer_THT/Transformer_Zeming_ZMCT103C","Transformer_THT/Transformer_Zeming_ZMPT101K","Transistor_Power/GaN_Systems_GaNPX-3_5x6.6mm_Drain2.93x0.6mm","Transistor_Power/GaN_Systems_GaNPX-3_5x6.6mm_Drain3.76x0.6mm","Transistor_Power/GaN_Systems_GaNPX-4_7x8.4mm","Transistor_Power_Module/Infineon_AG-ECONO2","Transistor_Power_Module/Infineon_AG-ECONO3","Transistor_Power_Module/Infineon_AG-ECONO3B","Transistor_Power_Module/Infineon_EasyPACK-1B","Transistor_Power_Module/Infineon_EasyPACK-1B_PressFIT","Transistor_Power_Module/Infineon_EasyPIM-1B","Transistor_Power_Module/Infineon_EasyPIM-2B","Transistor_Power_Module/Littelfuse_Package_H_XBN2MM","Transistor_Power_Module/Littelfuse_Package_H_XN2MM","Transistor_Power_Module/Littelfuse_Package_W_XBN2MM","Transistor_Power_Module/Littelfuse_Package_W_XN2MM","Transistor_Power_Module/ST_ACEPACK-2-CIB","Transistor_Power_Module/ST_ACEPACK-2-CIB_PressFIT","Transistor_Power_Module/ST_SDIP-25L","Valve/Valve_ECC-83-1","Valve/Valve_ECC-83-2","Valve/Valve_EURO","Valve/Valve_Glimm","Valve/Valve_Mini_G","Valve/Valve_Mini_P","Valve/Valve_Mini_Pentode_Linear","Valve/Valve_Noval_G","Valve/Valve_Noval_P","Valve/Valve_Octal","Varistor/RV_Disc_D12mm_W3.9mm_P7.5mm","Varistor/RV_Disc_D12mm_W4.2mm_P7.5mm","Varistor/RV_Disc_D12mm_W4.3mm_P7.5mm","Varistor/RV_Disc_D12mm_W4.4mm_P7.5mm","Varistor/RV_Disc_D12mm_W4.5mm_P7.5mm","Varistor/RV_Disc_D12mm_W4.6mm_P7.5mm","Varistor/RV_Disc_D12mm_W4.7mm_P7.5mm","Varistor/RV_Disc_D12mm_W4.8mm_P7.5mm","Varistor/RV_Disc_D12mm_W4mm_P7.5mm","Varistor/RV_Disc_D12mm_W5.1mm_P7.5mm","Varistor/RV_Disc_D12mm_W5.4mm_P7.5mm","Varistor/RV_Disc_D12mm_W5.8mm_P7.5mm","Varistor/RV_Disc_D12mm_W5mm_P7.5mm","Varistor/RV_Disc_D12mm_W6.1mm_P7.5mm","Varistor/RV_Disc_D12mm_W6.2mm_P7.5mm","Varistor/RV_Disc_D12mm_W6.3mm_P7.5mm","Varistor/RV_Disc_D12mm_W6.7mm_P7.5mm","Varistor/RV_Disc_D12mm_W7.1mm_P7.5mm","Varistor/RV_Disc_D12mm_W7.5mm_P7.5mm","Varistor/RV_Disc_D12mm_W7.9mm_P7.5mm","Varistor/RV_Disc_D15.5mm_W11mm_P7.5mm","Varistor/RV_Disc_D15.5mm_W3.9mm_P7.5mm","Varistor/RV_Disc_D15.5mm_W4.2mm_P7.5mm","Varistor/RV_Disc_D15.5mm_W4.3mm_P7.5mm","Varistor/RV_Disc_D15.5mm_W4.4mm_P7.5mm","Varistor/RV_Disc_D15.5mm_W4.5mm_P7.5mm","Varistor/RV_Disc_D15.5mm_W4.6mm_P7.5mm","Varistor/RV_Disc_D15.5mm_W4.7mm_P7.5mm","Varistor/RV_Disc_D15.5mm_W4.8mm_P7.5mm","Varistor/RV_Disc_D15.5mm_W4.9mm_P7.5mm","Varistor/RV_Disc_D15.5mm_W4mm_P7.5mm","Varistor/RV_Disc_D15.5mm_W5.2mm_P7.5mm","Varistor/RV_Disc_D15.5mm_W5.4mm_P7.5mm","Varistor/RV_Disc_D15.5mm_W5.9mm_P7.5mm","Varistor/RV_Disc_D15.5mm_W5mm_P7.5mm","Varistor/RV_Disc_D15.5mm_W6.1mm_P7.5mm","Varistor/RV_Disc_D15.5mm_W6.3mm_P7.5mm","Varistor/RV_Disc_D15.5mm_W6.4mm_P7.5mm","Varistor/RV_Disc_D15.5mm_W6.8mm_P7.5mm","Varistor/RV_Disc_D15.5mm_W7.2mm_P7.5mm","Varistor/RV_Disc_D15.5mm_W7.5mm_P7.5mm","Varistor/RV_Disc_D15.5mm_W8mm_P7.5mm","Varistor/RV_Disc_D16.5mm_W6.7mm_P7.5mm","Varistor/RV_Disc_D21.5mm_W11.4mm_P10mm","Varistor/RV_Disc_D21.5mm_W4.3mm_P10mm","Varistor/RV_Disc_D21.5mm_W4.4mm_P10mm","Varistor/RV_Disc_D21.5mm_W4.5mm_P10mm","Varistor/RV_Disc_D21.5mm_W4.6mm_P10mm","Varistor/RV_Disc_D21.5mm_W4.7mm_P10mm","Varistor/RV_Disc_D21.5mm_W4.8mm_P10mm","Varistor/RV_Disc_D21.5mm_W4.9mm_P10mm","Varistor/RV_Disc_D21.5mm_W5.1mm_P10mm","Varistor/RV_Disc_D21.5mm_W5.3mm_P10mm","Varistor/RV_Disc_D21.5mm_W5.4mm_P10mm","Varistor/RV_Disc_D21.5mm_W5.6mm_P10mm","Varistor/RV_Disc_D21.5mm_W5.8mm_P10mm","Varistor/RV_Disc_D21.5mm_W5mm_P10mm","Varistor/RV_Disc_D21.5mm_W6.1mm_P7.5mm","Varistor/RV_Disc_D21.5mm_W6.3mm_P10mm","Varistor/RV_Disc_D21.5mm_W6.5mm_P10mm","Varistor/RV_Disc_D21.5mm_W6.7mm_P10mm","Varistor/RV_Disc_D21.5mm_W6.8mm_P10mm","Varistor/RV_Disc_D21.5mm_W7.1mm_P10mm","Varistor/RV_Disc_D21.5mm_W7.5mm_P10mm","Varistor/RV_Disc_D21.5mm_W7.9mm_P10mm","Varistor/RV_Disc_D21.5mm_W8.4mm_P10mm","Varistor/RV_Disc_D7mm_W3.4mm_P5mm","Varistor/RV_Disc_D7mm_W3.5mm_P5mm","Varistor/RV_Disc_D7mm_W3.6mm_P5mm","Varistor/RV_Disc_D7mm_W3.7mm_P5mm","Varistor/RV_Disc_D7mm_W3.8mm_P5mm","Varistor/RV_Disc_D7mm_W3.9mm_P5mm","Varistor/RV_Disc_D7mm_W4.2mm_P5mm","Varistor/RV_Disc_D7mm_W4.3mm_P5mm","Varistor/RV_Disc_D7mm_W4.5mm_P5mm","Varistor/RV_Disc_D7mm_W4.8mm_P5mm","Varistor/RV_Disc_D7mm_W4.9mm_P5mm","Varistor/RV_Disc_D7mm_W4mm_P5mm","Varistor/RV_Disc_D7mm_W5.1mm_P5mm","Varistor/RV_Disc_D7mm_W5.4mm_P5mm","Varistor/RV_Disc_D7mm_W5.5mm_P5mm","Varistor/RV_Disc_D7mm_W5.7mm_P5mm","Varistor/RV_Disc_D9mm_W3.3mm_P5mm","Varistor/RV_Disc_D9mm_W3.4mm_P5mm","Varistor/RV_Disc_D9mm_W3.5mm_P5mm","Varistor/RV_Disc_D9mm_W3.6mm_P5mm","Varistor/RV_Disc_D9mm_W3.7mm_P5mm","Varistor/RV_Disc_D9mm_W3.8mm_P5mm","Varistor/RV_Disc_D9mm_W3.9mm_P5mm","Varistor/RV_Disc_D9mm_W4.1mm_P5mm","Varistor/RV_Disc_D9mm_W4.2mm_P5mm","Varistor/RV_Disc_D9mm_W4.4mm_P5mm","Varistor/RV_Disc_D9mm_W4.5mm_P5mm","Varistor/RV_Disc_D9mm_W4.8mm_P5mm","Varistor/RV_Disc_D9mm_W4mm_P5mm","Varistor/RV_Disc_D9mm_W5.2mm_P5mm","Varistor/RV_Disc_D9mm_W5.4mm_P5mm","Varistor/RV_Disc_D9mm_W5.5mm_P5mm","Varistor/RV_Disc_D9mm_W5.7mm_P5mm","Varistor/RV_Disc_D9mm_W6.1mm_P5mm","Varistor/RV_Rect_V25S440P_L26.5mm_W8.2mm_P12.7mm","Varistor/Varistor_Panasonic_VF"];var Bmo=Object.fromEntries(Mmo.map((e)=>[e,`kicad:${e}`]));var q7=Zt(["vertical","horizontal","pos_top","pos_bottom","pos_left","pos_right","neg_top","neg_bottom","neg_left","neg_right"]).describe("horizontal means pins go 1->2 rightward and vertical means pins go 1->2 downward (generally, positive on top)");cn(!0);var wmo=at({pins:Qt(kn([He(),Z()])),direction:kn([Be("top-to-bottom"),Be("left-to-right"),Be("bottom-to-top"),Be("right-to-left")])}),Tmo=Qt(kn([He(),Z()])),yme=(e)=>kn([wmo,Tmo]).transform((t)=>Array.isArray(t)?{pins:t,direction:e}:t),bme=at({leftSize:He().optional().describe("@deprecated, use leftPinCount"),topSize:He().optional().describe("@deprecated, use topPinCount"),rightSize:He().optional().describe("@deprecated, use rightPinCount"),bottomSize:He().optional().describe("@deprecated, use bottomPinCount"),leftPinCount:He().optional(),rightPinCount:He().optional(),topPinCount:He().optional(),bottomPinCount:He().optional(),leftSide:yme("top-to-bottom").optional(),rightSide:yme("top-to-bottom").optional(),topSide:yme("left-to-right").optional(),bottomSide:yme("left-to-right").optional()}),Pme=bme;cn(!0);var X$=Fa(at({marginLeft:ze.optional(),marginRight:ze.optional(),marginTop:ze.optional(),marginBottom:ze.optional(),leftMargin:ze.optional(),rightMargin:ze.optional(),topMargin:ze.optional(),bottomMargin:ze.optional()}));cn(!0);var Fm=Z().regex(/^[A-Za-z0-9_]+$/),vme=Zt(["xs","sm","default","md"]).or(ze.pipe(He().finite())).describe("distance between pin1 and pin2 of the schematic symbol"),Dmo=Zt(["input","output","bidirectional","tri_state","passive","free","unspecified","power_in","power_out","open_collector","open_emitter","no_connect"]),Nmo=Zt(["line","inverted","clock","inverted_clock","input_low","clock_low","output_low","falling_edge_clock","nonlogic"]),Rmo=at({electricalType:Dmo.optional(),graphicStyle:Nmo.optional(),pinLength:Bn.optional(),nameTextSize:Bn.optional(),numberTextSize:Bn.optional()});cn(!0);var Qmo=dc((e)=>typeof e==="function"),oE=Zt(["top_left","top_center","top_right","center_left","center","center_right","bottom_left","bottom_center","bottom_right"]),K$=at({edit_event_id:Z(),in_progress:Ue().optional(),created_at:He()});cn(!0);var kmo=K$.extend({pcb_edit_event_type:Be("edit_component_location").describe("deprecated"),edit_event_type:Be("edit_pcb_component_location"),pcb_component_id:Z(),original_center:at({x:He(),y:He()}),new_center:at({x:He(),y:He()})});cn(!0);var Lmo=K$.extend({pcb_edit_event_type:Be("edit_trace_hint").describe("deprecated"),edit_event_type:Be("edit_pcb_trace_hint").optional(),pcb_port_id:Z(),pcb_trace_hint_id:Z().optional(),route:Qt(at({x:He(),y:He(),via:Ue().optional()}))});cn(!0);var Fmo=K$.extend({edit_event_type:Be("edit_schematic_component_location"),schematic_component_id:Z(),original_center:at({x:He(),y:He()}),new_center:at({x:He(),y:He()})});cn(!0);var K7r=K$.extend({edit_event_type:Be("edit_pcb_group_location"),pcb_group_id:Z(),original_center:at({x:He(),y:He()}),new_center:at({x:He(),y:He()})});cn(!0);var q7r=K$.extend({edit_event_type:Be("edit_schematic_group_location"),schematic_group_id:Z(),original_center:at({x:He(),y:He()}),new_center:at({x:He(),y:He()})});cn(!0);var $7r=kn([kmo,Lmo,Fmo]);cn(!0);var Hmo=at({selector:Z(),relative_to:Z().optional().default("group_center").describe("Can be a selector or 'group_center'"),center:ko});cn(!0);var Omo=at({pcb_port_selector:Z(),offsets:Qt(M_)});cn(!0);var zmo=at({selector:Z(),relative_to:Z().optional().default("group_center").describe("Can be a selector or 'group_center'"),center:ko});cn(!0);var Gmo=at({pcb_placements:Qt(Hmo).optional(),manual_trace_hints:Qt(Omo).optional(),schematic_placements:Qt(zmo).optional()});cn(!0);var HQ=Z().or(Qt(Z()).readonly()).or(Qt(Z())),px=(e)=>Fa(Zt(e),HQ),G$=at({layoutMode:Zt(["grid","flex","match-adapt","relative","none"]).optional(),position:Zt(["absolute","relative"]).optional(),grid:Ue().optional(),gridCols:He().or(Z()).optional(),gridRows:He().or(Z()).optional(),gridTemplateRows:Z().optional(),gridTemplateColumns:Z().optional(),gridTemplate:Z().optional(),gridGap:He().or(Z()).optional(),gridRowGap:He().or(Z()).optional(),gridColumnGap:He().or(Z()).optional(),flex:Ue().or(Z()).optional(),flexDirection:Zt(["row","column"]).optional(),alignItems:Zt(["start","center","end","stretch"]).optional(),justifyContent:Zt(["start","center","end","stretch","space-between","space-around","space-evenly"]).optional(),flexRow:Ue().optional(),flexColumn:Ue().optional(),gap:He().or(Z()).optional(),pack:Ue().optional().describe("Pack the contents of this group using a packing strategy"),packOrderStrategy:Zt(["largest_to_smallest","first_to_last","highest_to_lowest_pin_count"]).optional(),packPlacementStrategy:Zt(["shortest_connection_along_outline"]).optional(),padding:fe.optional(),paddingLeft:fe.optional(),paddingRight:fe.optional(),paddingTop:fe.optional(),paddingBottom:fe.optional(),paddingX:fe.optional(),paddingY:fe.optional(),width:fe.optional(),height:fe.optional(),matchAdapt:Ue().optional(),matchAdaptTemplate:_h().optional()});cn(!0);var M1t=at({strokeWidth:fe.optional(),dashed:Ue().optional(),solid:Ue().optional()}),Ymo=dc((e)=>typeof e==="string"),ayt=at({minTraceWidth:fe.optional(),minViaHoleEdgeToViaHoleEdgeClearance:fe.optional(),minViaEdgeToPadEdgeClearance:fe.optional(),minPlatedHoleDrillEdgeToDrillEdgeClearance:fe.optional(),minTraceToPadEdgeClearance:fe.optional(),minTraceToHoleEdgeClearance:fe.refine((e)=>Number.isFinite(e)&&e>=0,{message:"minTraceToHoleEdgeClearance must be finite and non-negative"}).optional(),minPadEdgeToPadEdgeClearance:fe.optional(),minBoardEdgeClearance:fe.optional(),minViaHoleDiameter:fe.optional(),minViaPadDiameter:fe.optional()}),cyt=at({serverUrl:Au.optional(),inputFormat:Zt(["simplified","circuit-json"]).optional(),serverMode:Zt(["job","solve-endpoint"]).optional(),serverCacheEnabled:Ue().optional(),cache:dc((e)=>!0).optional(),traceClearance:fe.optional(),availableJumperTypes:Qt(Zt(["1206x4","0603"])).optional(),allowViaInPad:Ue().optional().describe("Allows the autorouter to place vias inside connected pads. Omitted or false keeps via-in-pad routing disabled."),groupMode:Zt(["sequential_trace","subcircuit","sequential-trace"]).optional(),algorithmFn:dc((e)=>typeof e==="function"||e===void 0).optional(),implicitBreakoutPointSolverFn:dc((e)=>typeof e==="function"||e===void 0).optional(),preset:Zt(["sequential_trace","subcircuit","default","auto","auto_local","auto_cloud","auto_jumper","tscircuit_beta","krt","freerouting","simplify","laser_prefab","single_layer_fanout","fanout","dogbone","bus_lanes","single_layer_routing","auto-jumper","sequential-trace","auto-local","auto-cloud"]).transform((e)=>e==="single_layer_routing"?"bus_lanes":e).optional(),local:Ue().optional()}),Vmo=kn([Be("sequential_trace"),Be("subcircuit"),Be("default"),Be("auto"),Be("auto_local"),Be("auto_cloud"),Be("auto_jumper"),Be("tscircuit_beta"),Be("krt"),Be("freerouting"),Be("simplify"),Be("laser_prefab"),Be("single_layer_fanout"),Be("fanout"),Be("dogbone"),Be("bus_lanes"),Be("single_layer_routing").transform(()=>"bus_lanes"),Be("auto-jumper"),Be("sequential-trace"),Be("auto-local"),Be("auto-cloud")]),Umo=Z(),Eme=kn([cyt,Vmo,Umo]),Wmo=Zt(["1x","1.5x","2x","5x","10x","100x"]),lyt=Zt(["none","basic","conservative"]),Xmo=Zt(["beta_pipeline1","beta_pipeline3","beta_pipeline4","beta_pipeline5","beta_pipeline7","beta_pipeline9","latest"]),Kmo=dc((e)=>typeof e==="string").transform((e)=>{let t=Xmo.safeParse(e);if(t.success)return t.data;return console.warn(`Unknown autorouterVersion "${e}", falling back to "latest".`),"latest"}),C8e=Sme.extend({name:Z().optional(),children:_h().optional(),schTitle:Z().optional(),schSheetName:Z().optional().describe('This group will be drawn as part of this sheet e.g. "Main"'),key:_h().optional(),showAsSchematicBox:Ue().optional(),connections:Fa(Z(),HQ.optional()).optional(),schPinArrangement:Pme.optional(),schPinSpacing:fe.optional(),schPinStyle:X$.optional(),...G$.shape,grid:G$.shape.grid.describe("@deprecated use pcbGrid"),flex:G$.shape.flex.describe("@deprecated use pcbFlex"),pcbGrid:Ue().optional(),pcbGridCols:He().or(Z()).optional(),pcbGridRows:He().or(Z()).optional(),pcbGridTemplateRows:Z().optional(),pcbGridTemplateColumns:Z().optional(),pcbGridTemplate:Z().optional(),pcbGridGap:He().or(Z()).optional(),pcbGridRowGap:He().or(Z()).optional(),pcbGridColumnGap:He().or(Z()).optional(),pcbFlex:Ue().or(Z()).optional(),pcbFlexGap:He().or(Z()).optional(),pcbFlexDirection:Zt(["row","column"]).optional(),pcbAlignItems:Zt(["start","center","end","stretch"]).optional(),pcbJustifyContent:Zt(["start","center","end","stretch","space-between","space-around","space-evenly"]).optional(),pcbFlexRow:Ue().optional(),pcbFlexColumn:Ue().optional(),pcbGap:He().or(Z()).optional(),pcbPack:Ue().optional(),pcbPackGap:He().or(Z()).optional(),schGrid:Ue().optional(),schGridCols:He().or(Z()).optional(),schGridRows:He().or(Z()).optional(),schGridTemplateRows:Z().optional(),schGridTemplateColumns:Z().optional(),schGridTemplate:Z().optional(),schGridGap:He().or(Z()).optional(),schGridRowGap:He().or(Z()).optional(),schGridColumnGap:He().or(Z()).optional(),schFlex:Ue().or(Z()).optional(),schFlexGap:He().or(Z()).optional(),schFlexDirection:Zt(["row","column"]).optional(),schAlignItems:Zt(["start","center","end","stretch"]).optional(),schJustifyContent:Zt(["start","center","end","stretch","space-between","space-around","space-evenly"]).optional(),schFlexRow:Ue().optional(),schFlexColumn:Ue().optional(),schGap:He().or(Z()).optional(),schPack:Ue().optional(),schMatchAdapt:Ue().optional(),pcbWidth:fe.optional(),pcbHeight:fe.optional(),minTraceWidth:fe.optional(),nominalTraceWidth:fe.optional(),schWidth:fe.optional(),schHeight:fe.optional(),pcbLayout:G$.optional(),schLayout:G$.optional(),cellBorder:M1t.nullable().optional(),border:M1t.nullable().optional(),schPadding:fe.optional(),schPaddingLeft:fe.optional(),schPaddingRight:fe.optional(),schPaddingTop:fe.optional(),schPaddingBottom:fe.optional(),pcbPadding:fe.optional(),pcbPaddingLeft:fe.optional(),pcbPaddingRight:fe.optional(),pcbPaddingTop:fe.optional(),pcbPaddingBottom:fe.optional(),pcbAnchorAlignment:Ymo.optional()}),dyt=dc((e)=>("findPart"in e)),Mme=C8e.extend({manualEdits:Gmo.optional(),schAutoLayoutEnabled:Ue().optional(),schTraceAutoLabelEnabled:Ue().optional(),schMaxTraceDistance:ze.optional(),routingDisabled:Ue().optional(),placementDrcChecksDisabled:Ue().optional(),bomDisabled:Ue().optional(),defaultTraceWidth:fe.optional(),...ayt.shape,nominalTraceWidth:fe.optional(),partsEngine:dyt.optional(),_subcircuitCachingEnabled:Ue().optional(),pcbRouteCache:dc((e)=>!0).optional(),autorouter:Eme.optional(),preflightRoutingCheckPolicy:lyt.optional(),autorouterEffortLevel:Wmo.optional(),autorouterVersion:Kmo.optional(),square:Ue().optional(),emptyArea:Z().optional(),filledArea:Z().optional(),width:ze.optional(),height:ze.optional(),outline:Qt(Zf).optional(),outlineOffsetX:ze.optional(),outlineOffsetY:ze.optional(),circuitJson:Qt(_h()).optional(),exposedNets:Qt(Z()).optional(),exposeNets:Ue().optional()}),jmo=Mme.extend({subcircuit:Be(!0)}),uyt=nl("subcircuit",[C8e.extend({subcircuit:Be(!1).optional()}),jmo]);cn(!0);cn(!0);cn(!0);cn(!0);cn(!0);var dY=dc((e)=>typeof e==="string"),qmo=at({...Zf.shape,isCastellatedHole:Ue().optional(),holeDiameter:Bn.optional(),padDiameter:Bn.optional(),connectsTo:Z().or(Qt(Z())).optional()}).superRefine((e,t)=>{if(e.isCastellatedHole){if(e.holeDiameter===void 0)t.addIssue({code:jt.custom,path:["holeDiameter"],message:"holeDiameter is required for a castellated hole"});if(e.padDiameter===void 0)t.addIssue({code:jt.custom,path:["padDiameter"],message:"padDiameter is required for a castellated hole"});return}if(e.holeDiameter!==void 0||e.padDiameter!==void 0||e.connectsTo!==void 0)t.addIssue({code:jt.custom,path:["isCastellatedHole"],message:"isCastellatedHole must be true when castellated hole props are provided"})}),I8e=Mme.omit({connections:!0}).extend({mountedTo:Z().trim().min(1).optional().describe('e.g. "NEMA17.backface".'),mountGap:Bn.pipe(He().nonnegative().finite()).optional().describe('Clearance from the mounting face, e.g. "6mm".'),mountRotationAnchor:cmo.optional().describe('e.g. "J_USB" or "rightedge".'),mountRotation:amo.optional().describe('e.g. "calc(NEMA17.wireside-90degcw)".'),mountOrientation:lmo.optional().describe('e.g. "top_layer_toward_mount_face".'),fabricatorPreset:Zt(["jlcpcb_economy","jlcpcb_standard","jlcpcb_economy_20260912","jlcpcb_standard_20260912"]).optional().describe("Fabricator preset, preserved as supplied. Omitted leaves the preset unset."),material:Zt(["fr4","fr1","flex"]).default("fr4"),layers:kn([Be(1),Be(2),Be(4),Be(6),Be(8),Be(10)]).default(2),allowBlindAndBuriedVias:Ue().default(!1).describe("Whether the autorouter may generate blind and buried vias. Defaults to false, which restricts newly generated vias to the full board stack."),routeRemaining:Ue().optional().describe("Whether to route remaining unrouted connections after explicit routing phases. Boolean values are preserved; omitted leaves the setting unset. No aliases or prop conflicts are introduced, and existing boards require no migration."),defaultViaTenting:kn([Ue(),Zt(["both_sides","top_and_bottom_tented","top_tented","bottom_tented","exposed"])]).transform((e)=>{if(e===!0||e==="both_sides")return"top_and_bottom_tented";if(e===!1)return"exposed";return e}).optional(),borderRadius:Bn.optional(),thickness:Bn.optional(),boardAnchorPosition:Zf.optional(),anchorAlignment:oE.optional(),boardAnchorAlignment:oE.optional().describe("Prefer using anchorAlignment when possible"),outline:Qt(qmo).optional(),title:Z().optional(),solderMaskColor:dY.optional(),topSolderMaskColor:dY.optional(),bottomSolderMaskColor:dY.optional(),silkscreenColor:dY.optional(),topSilkscreenColor:dY.optional(),bottomSilkscreenColor:dY.optional(),doubleSidedAssembly:Ue().optional().default(!1),isViaInPadAllowed:Ue().optional().describe("Allows intentional via-in-pad designs to pass DRC. Omitted or false keeps via-in-pad disallowed."),automaticPoursEnabled:Ue().default(!1).describe("Whether implicit copper pours should be generated automatically. Defaults to false."),enableViaStitching:Ue().default(!1).describe("Whether to stitch copper pours on the same net across layers with vias. Defaults to false."),viaStitchPitch:Bn.pipe(He().positive().finite()).optional().describe("Positive center-to-center stitching via spacing in millimeters or a unit string, parsed to millimeters. Omitted uses the solver default. Does not enable stitching by itself."),schematicDisabled:Ue().optional()});cn(!0);cn(!0);var xme=Bn.pipe(He().finite()),hyt=at({name:Z().optional(),x1:xme,y1:xme,x2:xme,y2:xme,bendAngle:Ui.pipe(He().finite()),bendRadius:Bn.pipe(He().finite().positive()),tearReliefRadius:Bn.pipe(He().finite().positive()).optional(),bendSide:Zt(["left","right"])}).refine(({x1:e,y1:t,x2:n,y2:o})=>e!==n||t!==o,{message:"Bend centerline endpoints must be distinct",path:["x2"]});cn(!0);var B1t=Bn.pipe(He().finite()),c8e=Bn.pipe(He().finite().positive()),l8e=us.omit({layer:!0}).extend({name:Z().optional(),layer:Zt(["top","bottom"])}),myt=nl("shape",[l8e.extend({shape:Be("rect"),width:c8e,height:c8e,radius:Sg().optional(),points:Sg().optional()}),l8e.extend({shape:Be("circle"),radius:c8e,width:Sg().optional(),height:Sg().optional(),points:Sg().optional()}),l8e.extend({shape:Be("polygon"),points:Qt(at({x:B1t,y:B1t})).min(3).refine((e)=>{let t=e.reduce((n,o,i)=>{let r=e[(i+1)%e.length];return n+o.x*r.y-r.x*o.y},0);return Number.isFinite(t)&&t!==0},"Solder-mask opening must enclose a nonzero area"),width:Sg().optional(),height:Sg().optional(),radius:Sg().optional()})]),p8e=Bn.pipe(He().finite().positive()),w1t=Bn.pipe(He().finite()),T1t=us.omit({layer:!0}).extend({name:Z().optional(),layer:Zt(["top","bottom"]),material:Zt(["fr4","polyimide","stainless_steel","aluminum"]),thickness:p8e,adhesiveThickness:Bn.pipe(He().finite().nonnegative()).optional()}),pyt=nl("shape",[T1t.extend({shape:Be("rect"),width:p8e,height:p8e,outline:Sg().optional()}),T1t.extend({shape:Be("polygon"),outline:Qt(at({x:w1t,y:w1t})).min(3).refine((e)=>{let t=e.reduce((n,o,i)=>{let r=e[(i+1)%e.length];return n+o.x*r.y-r.x*o.y},0);return Number.isFinite(t)&&t!==0},"Stiffener outline must enclose a nonzero area"),width:Sg().optional(),height:Sg().optional()})]),b8e=C8e.omit({width:!0,height:!0,layoutMode:!0,children:!0}).extend({width:Bn.optional(),height:Bn.optional(),children:_h().optional(),anchorAlignment:oE.optional(),noSolderMask:Ue().optional(),panelizationMethod:Zt(["tab-routing","outline_routing","none"]).optional(),boardGap:Bn.optional(),layoutMode:Zt(["grid","pack","none"]).optional(),row:He().optional(),col:He().optional(),cellWidth:Bn.optional(),cellHeight:Bn.optional(),tabWidth:Bn.optional(),tabLength:Bn.optional(),mouseBites:Ue().optional(),edgePadding:Bn.optional(),edgePaddingLeft:Bn.optional(),edgePaddingRight:Bn.optional(),edgePaddingTop:Bn.optional(),edgePaddingBottom:Bn.optional(),_subcircuitCachingEnabled:Ue().optional()});cn(!0);var Ayt=b8e;cn(!0);var Cme=Bn.refine(Number.isFinite,"Coordinate must be finite"),d8e=Bn.refine((e)=>Number.isFinite(e)&&e>0,"Distance must be positive and finite"),Jmo=nl("route_type",[at({route_type:Be("wire"),x:Cme,y:Cme,width:d8e,width_interpolation_mode:Zt(["linear","quadratic"]).optional().describe("Interpolate width from this point to the next wire point."),layer:bo}),at({route_type:Be("via"),x:Cme,y:Cme,from_layer:bo,to_layer:bo,via_diameter:d8e.optional(),via_hole_diameter:d8e.optional()})]),j$=at({connection:Z().min(1),route:Qt(Jmo).min(2).superRefine((e,t)=>{let n=e[0],o=n?.route_type==="via"?n.from_layer:n?.layer;for(let[i,r]of e.entries()){if(r.route_type==="wire"&&r.width_interpolation_mode){let s=e[i+1];if(s?.route_type!=="wire"||s.layer!==r.layer||s.x===r.x&&s.y===r.y)t.addIssue({code:"custom",path:[i,"width_interpolation_mode"],message:"Width interpolation requires a distinct next wire point on the same layer"})}if((r.route_type==="wire"?r.layer:r.from_layer)!==o)t.addIssue({code:"custom",message:"A fanout trace path must use vias for layer changes"});if(r.route_type==="via")o=r.to_layer}})}),Y$=Bn.refine((e)=>e>=0,{message:"Fanout boundary padding cannot be negative"}),$mo=kn([Y$,at({top:Y$.optional(),right:Y$.optional(),bottom:Y$.optional(),left:Y$.optional()})]);cn(!0);var S8e=["topside_left","topside_center","topside_right","rightside_top","rightside_center","rightside_bottom","bottomside_right","bottomside_center","bottomside_left","leftside_bottom","leftside_center","leftside_top","center"],D1t=Zt(S8e),Zmo=kn([oE,D1t,at({direction:kn([oE,D1t])})]),_yt=at({busFanoutDirections:Fa(Zmo).optional(),fanoutBoundaryPadding:$mo.optional(),fanoutRoutingLayers:Qt(bo).min(1).optional(),fanoutPourNetMap:Fa(bo,kn([Z(),Qt(Z()).min(1)])).optional()});cn(!0);var epo=Bn.refine((e)=>e>=0,{message:"Fanout margin cannot be negative"}),gyt=Mme.extend({autorouter:Eme.default("fanout"),pcbTracePaths:Qt(j$).optional(),padding:Bn.optional(),paddingLeft:Bn.optional(),paddingRight:Bn.optional(),paddingTop:Bn.optional(),paddingBottom:Bn.optional(),fanoutMargin:epo.optional(),..._yt.shape});cn(!0);var tpo=Z().or(Qt(Z()).readonly()).or(Qt(Z())),yyt=Qt(Fm).readonly().or(Qt(Fm)),npo=dc().pipe(Fa(Z(),tpo)),opo=dc((e)=>!!e&&typeof e==="object"&&("type"in e)&&("props"in e)),ipo=dc((e)=>fyt.isValidElement(e)&&e.type==="internalcircuit"),P8e=Fa(Fm,Fm.or(Qt(Fm).readonly()).or(Qt(Fm)));cn(!0);var rpo=at({manufacturerPartNumber:Z().optional(),supplierPartNumber:Fa(Dv,Qt(Z())).optional()}),Dg=_u.extend({manufacturerPartNumber:Z().optional(),pinLabels:P8e.optional(),showPinAliases:Ue().optional(),pcbPinLabels:Fa(Z(),Z()).optional(),internallyConnectedPins:Qt(Qt(kn([Z(),He()]))).optional(),externallyConnectedPins:Qt(Qt(Z())).optional(),schPinArrangement:bme.optional(),schPortArrangement:bme.optional(),pinCompatibleVariants:Qt(rpo).optional(),schPinStyle:X$.optional(),schPinSpacing:ze.optional(),schWidth:ze.optional(),schHeight:ze.optional(),noSchematicRepresentation:Ue().optional(),schShowInternalCircuit:Ue().optional().default(!1),noConnect:yyt.optional(),connections:npo.optional(),spiceModel:opo.optional(),internalCircuit:ipo.optional()});cn(!0);var xyt=Dg;cn(!0);var v8e=_u.extend({manufacturerPartNumber:Z().optional(),pinLabels:Fa(He().or(Fm),Fm.or(Qt(Fm))).optional(),schPinStyle:X$.optional(),schPinSpacing:ze.optional(),schWidth:ze.optional(),schHeight:ze.optional(),schDirection:Zt(["left","right"]).optional(),schPinArrangement:Pme.optional(),schPortArrangement:bme.optional(),pcbPinLabels:Fa(Z(),Z()).optional(),pinCount:kn([Be(2),Be(3)]).optional(),internallyConnectedPins:Qt(Qt(kn([Z(),He()]))).optional(),connections:dc().pipe(Fa(Z(),HQ)).optional()});cn(!0);var Cyt=v8e.extend({bridgedPins:Qt(Qt(Z())).optional(),bridged:Ue().optional()});cn(!0);var spo=Zt(["usb_c","m2","jst_sh","jst_gh","jst_zh","jst_ph","jst_xh","jst_vh"]),Iyt=Dg.extend({standard:spo.optional(),pinCount:He().int().positive().optional()});cn(!0);var byt=_u.extend({standard:Zt(["TSC0001_36P_XALT_2025_11","0805","0603","1206"]).optional(),pinLabels:Fa(He().or(Fm),Fm.or(Qt(Fm))).optional(),internallyConnectedPins:Qt(Qt(kn([Z(),He()]))).optional()});cn(!0);var Syt=_u.extend({currentRating:kn([He(),Z()]),voltageRating:kn([He(),Z()]).optional(),schShowRatings:Ue().optional(),schOrientation:q7.optional(),connections:Fa(Z(),kn([Z(),Qt(Z()).readonly(),Qt(Z())])).optional()}),apo="0.04in",cpo="0.1in",lpo=(e)=>{if(!e||typeof e!=="object")return e;let t={...e};if(t.shape!==void 0)return t;if(t.padOutline!==void 0)return t.shape="hole_with_polygon_pad",t;if(t.rectPadWidth!==void 0||t.rectPadHeight!==void 0){if(t.holeDiameter!==void 0)return t.shape="circular_hole_with_rect_pad",t;return t.shape="pill_hole_with_rect_pad",t}if(t.outerDiameter!==void 0||t.holeDiameter!==void 0||t.padDiameter!==void 0)return t.shape="circle",t;if(t.outerWidth!==void 0||t.outerHeight!==void 0)return t.shape=t.rectPad===!0?"pill":"oval",t;return t.shape="circle",t.holeDiameter=apo,t.outerDiameter=cpo,t},Ime=dc().transform((e)=>{if(e===void 0)return;return ze.parse(e)}),dpo=nl("shape",[us.omit({pcbRotation:!0,layer:!0}).extend({name:Z().optional(),connectsTo:Z().or(Qt(Z())).optional(),shape:Be("circle"),holeDiameter:ze,outerDiameter:ze,padDiameter:ze.optional().describe("Diameter of the copper pad"),portHints:_I.optional(),solderMaskMargin:ze.optional(),coveredWithSolderMask:Ue().optional()}),us.omit({layer:!0}).extend({name:Z().optional(),connectsTo:Z().or(Qt(Z())).optional(),shape:Be("oval"),outerWidth:ze,outerHeight:ze,holeWidth:Ime,holeHeight:Ime,innerWidth:ze.optional().describe("DEPRECATED use holeWidth"),innerHeight:ze.optional().describe("DEPRECATED use holeHeight"),portHints:_I.optional(),solderMaskMargin:ze.optional(),coveredWithSolderMask:Ue().optional()}),us.omit({layer:!0}).extend({name:Z().optional(),connectsTo:Z().or(Qt(Z())).optional(),shape:Be("pill"),rectPad:Ue().optional(),outerWidth:ze,outerHeight:ze,holeWidth:Ime,holeHeight:Ime,innerWidth:ze.optional().describe("DEPRECATED use holeWidth"),innerHeight:ze.optional().describe("DEPRECATED use holeHeight"),portHints:_I.optional(),holeOffsetX:ze.optional(),holeOffsetY:ze.optional(),solderMaskMargin:ze.optional(),coveredWithSolderMask:Ue().optional()}),us.omit({layer:!0}).extend({name:Z().optional(),connectsTo:Z().or(Qt(Z())).optional(),shape:Be("circular_hole_with_rect_pad"),holeDiameter:ze,rectPadWidth:ze,rectPadHeight:ze,rectBorderRadius:ze.optional(),holeShape:Be("circle").optional(),padShape:Be("rect").optional(),portHints:_I.optional(),holeOffsetX:ze.optional(),holeOffsetY:ze.optional(),solderMaskMargin:ze.optional(),coveredWithSolderMask:Ue().optional()}),us.omit({layer:!0}).extend({name:Z().optional(),connectsTo:Z().or(Qt(Z())).optional(),shape:Be("pill_hole_with_rect_pad"),holeShape:Be("pill").optional(),padShape:Be("rect").optional(),holeWidth:ze,holeHeight:ze,rectPadWidth:ze,rectPadHeight:ze,rectBorderRadius:ze.optional(),portHints:_I.optional(),holeOffsetX:ze.optional(),holeOffsetY:ze.optional(),solderMaskMargin:ze.optional(),coveredWithSolderMask:Ue().optional()}),us.omit({pcbRotation:!0,layer:!0}).extend({name:Z().optional(),connectsTo:Z().or(Qt(Z())).optional(),shape:Be("hole_with_polygon_pad"),holeShape:Zt(["circle","oval","pill","rotated_pill"]),holeDiameter:ze.optional(),holeWidth:ze.optional(),holeHeight:ze.optional(),padOutline:Qt(Zf),holeOffsetX:ze,holeOffsetY:ze,portHints:_I.optional(),solderMaskMargin:ze.optional(),coveredWithSolderMask:Ue().optional()})]).transform((e)=>{if("innerWidth"in e&&e.innerWidth!==void 0)e.holeWidth??=e.innerWidth;if("innerHeight"in e&&e.innerHeight!==void 0)e.holeHeight??=e.innerHeight;return e}),Pyt=Tq(lpo,dpo);cn(!0);var upo=["pin1","pin2","pos","neg"],hpo=new Set(["01005","0201","0402","0504","0603","0805","1206","1210","1812","2010","2512"]),mpo=(e)=>{if(typeof e!=="string")return e;if(!hpo.has(e))return e;return`res${e}`},ppo=f8e.optional().transform(mpo),vyt=_u.extend({footprint:ppo,resistance:ay,tolerance:kn([Z(),He()]).transform((e)=>{if(typeof e==="string"){if(e.endsWith("%"))return parseFloat(e.slice(0,-1))/100;return parseFloat(e)}return e}).pipe(He().min(0,"Tolerance must be non-negative").max(1,"Tolerance cannot be greater than 100%")).optional(),pullupFor:Z().optional(),pullupTo:Z().optional(),pulldownFor:Z().optional(),pulldownTo:Z().optional(),schOrientation:q7.optional(),schSize:vme.optional(),connections:px(upo).optional()}),Eyt=syt;cn(!0);var Apo=["pin1","pin2","pin3"],Myt=_u.extend({maxResistance:ay,pinVariant:Zt(["two_pin","three_pin"]).optional(),connections:px(Apo).optional()});cn(!0);var _po=["pin1","left","pin2","right","pin3","pin4"],Byt=_u.extend({frequency:s0,loadCapacitance:Q5,maxTraceLength:ze.optional(),manufacturerPartNumber:Z().optional(),pinVariant:Zt(["two_pin","four_pin"]).optional(),schOrientation:q7.optional(),connections:px(_po).optional()});cn(!0);var wyt=_u.extend({frequency:s0,loadCapacitance:Q5,pinVariant:Zt(["no_ground","ground_pin","two_ground_pins"]).optional()});cn(!0);var F8r=I8e.extend({leftPinCount:He().optional(),rightPinCount:He().optional(),topPinCount:He().optional(),bottomPinCount:He().optional(),leftPins:Qt(Z()).optional(),rightPins:Qt(Z()).optional(),topPins:Qt(Z()).optional(),bottomPins:Qt(Z()).optional(),pinPitch:ze.optional(),innerHoles:Ue().optional()});cn(!0);var gpo=["pin1","pin2","pos","neg","anode","cathode"],Tyt=_u.extend({capacitance:Q5,maxVoltageRating:xl.optional(),schShowRatings:Ue().optional().default(!1),polarized:Ue().optional().default(!1),decouplingFor:Z().optional(),decouplingTo:Z().optional(),bypassFor:Z().optional(),bypassTo:Z().optional(),maxDecouplingTraceLength:ze.optional(),schOrientation:q7.optional(),schSize:vme.optional(),connections:px(gpo).optional()}),Dyt=W$;cn(!0);var Nyt=at({name:Z(),connectsTo:Z().or(Qt(Z())).optional(),routingPhaseIndex:He().nullable().optional(),highlightColor:Z().optional(),isPowerNet:Ue().optional(),isGroundNet:Ue().optional(),nominalTraceWidth:ze.optional()});cn(!0);var Bme=_u.extend({soldermaskPullback:Bn.optional(),padDiameter:Bn});cn(!0);var V8r=at({name:Z().optional(),pcbOnly:Ue().optional(),schOnly:Ue().optional()});cn(!0);var fpo=at({pcb:Be(!0).optional(),xDist:Bn,left:Z(),right:Z(),edgeToEdge:Be(!0).optional(),centerToCenter:Be(!0).optional()});cn(!0);var ypo=at({pcb:Be(!0).optional(),yDist:Bn,top:Z(),bottom:Z(),edgeToEdge:Be(!0).optional(),centerToCenter:Be(!0).optional()});cn(!0);var xpo=at({pcb:Be(!0).optional(),sameY:Be(!0).optional(),for:Qt(Z())});cn(!0);var Cpo=at({pcb:Be(!0).optional(),sameX:Be(!0).optional(),for:Qt(Z())});cn(!0);var Ryt=kn([fpo,ypo,xpo,Cpo]);cn(!0);var Ipo=us.omit({layer:!0,pcbRotation:!0}).extend({name:Z().optional(),shape:Be("rect"),width:Bn,height:Bn});cn(!0);var bpo=us.omit({layer:!0,pcbRotation:!0}).extend({name:Z().optional(),shape:Be("circle"),radius:Bn});cn(!0);var Spo=us.omit({layer:!0,pcbRotation:!0}).extend({name:Z().optional(),shape:Be("polygon"),points:Qt(Zf)});cn(!0);var Qyt=nl("shape",[Ipo,bpo,Spo]),kyt=at({name:Z().optional(),checkFn:Qmo});cn(!0);var Ppo=us.omit({pcbRotation:!0}).extend({name:Z().optional(),shape:Be("rect"),width:Bn,height:Bn,rectBorderRadius:Bn.optional(),cornerRadius:Bn.optional(),portHints:_I.optional(),coveredWithSolderMask:Ue().optional(),solderMaskMargin:Bn.optional(),solderMaskMarginLeft:Bn.optional(),solderMaskMarginRight:Bn.optional(),solderMaskMarginTop:Bn.optional(),solderMaskMarginBottom:Bn.optional(),noSolderPaste:Ue().optional(),solderPasteMargin:Bn.optional()});cn(!0);var vpo=us.omit({pcbRotation:!0}).extend({name:Z().optional(),shape:Be("rotated_rect"),width:Bn,height:Bn,ccwRotation:He(),cornerRadius:Bn.optional(),portHints:_I.optional(),coveredWithSolderMask:Ue().optional(),solderMaskMargin:Bn.optional(),solderMaskMarginLeft:Bn.optional(),solderMaskMarginRight:Bn.optional(),solderMaskMarginTop:Bn.optional(),solderMaskMarginBottom:Bn.optional(),noSolderPaste:Ue().optional(),solderPasteMargin:Bn.optional()});cn(!0);var Epo=us.omit({pcbRotation:!0}).extend({name:Z().optional(),shape:Be("circle"),radius:Bn,portHints:_I.optional(),coveredWithSolderMask:Ue().optional(),solderMaskMargin:Bn.optional(),noSolderPaste:Ue().optional(),solderPasteMargin:Bn.optional()});cn(!0);var Mpo=us.omit({pcbRotation:!0}).extend({name:Z().optional(),shape:Be("pill"),width:Bn,height:Bn,radius:Bn,portHints:_I.optional(),coveredWithSolderMask:Ue().optional(),solderMaskMargin:Bn.optional(),noSolderPaste:Ue().optional(),solderPasteMargin:Bn.optional()});cn(!0);var Bpo=us.omit({pcbRotation:!0}).extend({name:Z().optional(),shape:Be("rotated_pill"),width:Bn,height:Bn,radius:Bn,ccwRotation:He(),portHints:_I.optional(),coveredWithSolderMask:Ue().optional(),solderMaskMargin:Bn.optional(),noSolderPaste:Ue().optional(),solderPasteMargin:Bn.optional()});cn(!0);var wpo=us.omit({pcbRotation:!0}).extend({name:Z().optional(),shape:Be("polygon"),points:Qt(Zf),portHints:_I.optional(),coveredWithSolderMask:Ue().optional(),solderMaskMargin:Bn.optional(),noSolderPaste:Ue().optional(),solderPasteMargin:Bn.optional()});cn(!0);var Lyt=nl("shape",[Epo,Ppo,vpo,Mpo,Bpo,wpo]);cn(!0);var Tpo=us.omit({pcbRotation:!0}).extend({shape:Be("rect"),width:Bn,height:Bn});cn(!0);var Dpo=us.omit({pcbRotation:!0}).extend({shape:Be("circle"),radius:Bn});cn(!0);var Fyt=kn([Dpo,Tpo]);cn(!0);var Npo=us.extend({name:Z().optional(),shape:Be("circle").optional(),diameter:Bn.optional(),radius:Bn.optional(),solderMaskMargin:Bn.optional(),coveredWithSolderMask:Ue().optional()}).transform((e)=>({...e,diameter:e.diameter??2*e.radius,radius:e.radius??e.diameter/2})),Rpo=us.extend({name:Z().optional(),shape:Be("pill"),width:Bn,height:Bn,solderMaskMargin:Bn.optional(),coveredWithSolderMask:Ue().optional()}),Qpo=us.extend({name:Z().optional(),shape:Be("oval"),width:Bn,height:Bn,solderMaskMargin:Bn.optional(),coveredWithSolderMask:Ue().optional()}),kpo=us.extend({name:Z().optional(),shape:Be("rect"),width:Bn,height:Bn,solderMaskMargin:Bn.optional(),coveredWithSolderMask:Ue().optional()}),Hyt=kn([Npo,Rpo,Qpo,kpo]);cn(!0);var Lpo=["2.4ghz_quarter_wave_monopole","2.4ghz_meandered_monopole","2.4ghz_inverted_f","2.4ghz_meandered_inverted_f","2.4ghz_folded_dipole"],Fpo=Zt(Lpo),Hpo=["2.4ghz","5ghz","6ghz","dual_band_2.4ghz_5ghz","tri_band_2.4ghz_5ghz_6ghz"],Opo=Zt(Hpo),Oyt=_u.extend({antennaShape:Fpo.optional(),frequencyBand:Opo.optional(),pcbPath:m8e.optional()});cn(!0);var V$=kn([Z(),dc((e)=>typeof e==="object"&&e!==null&&("getPortSelector"in e)&&typeof e.getPortSelector==="function")]),u8e=at({key:Z().optional(),name:Z().optional(),displayName:Z().optional(),thickness:ze.optional(),width:ze.optional().describe("Alias for trace thickness"),schematicRouteHints:Qt(Zf).optional(),pcbRouteHints:Qt(M_).optional(),pcbTeardrops:Ue().optional().describe("Enable PCB trace teardrops."),pcbTeardropStart:Ue().optional().describe("Teardrop at the start (from) of trace"),pcbTeardropEnd:Ue().optional().describe("Teardrop at the end (to) of trace"),pcbPathRelativeTo:Z().optional(),pcbPath:m8e.optional(),pcbPaths:Qt(m8e).optional(),routingPhaseIndex:He().nullable().optional(),pcbStraightLine:Ue().optional().describe("Draw a straight pcb trace between the connected points"),schDisplayLabel:Z().optional(),schStroke:Z().optional(),highlightColor:Z().optional(),maxLength:ze.optional(),maxViaCount:He().int().nonnegative().optional().describe("Maximum number of vias allowed in the PCB trace route"),connectsTo:Z().or(Qt(Z())).optional()}),zyt=kn([u8e.extend({path:Qt(V$)}),u8e.extend({from:V$,to:V$}),u8e.extend({start:V$,end:V$})]),E8e=ze.pipe(He().nonnegative().finite()),hY=kn([E8e,at({reference:Be("longest_manhattan"),of:Qt(Z().min(1)).min(1).optional(),offset:ze.pipe(He().finite()).optional()}).strict()]);cn(!0);function Gyt(e,t){if(Boolean(e.targetLength!==void 0)!==Boolean(e.lengthTolerance!==void 0))t.addIssue({code:jt.custom,path:["lengthTolerance"],message:"targetLength and lengthTolerance must be supplied together"});if(e.lengthMatchTo!==void 0&&e.maxLengthSkew===void 0)t.addIssue({code:jt.custom,path:["maxLengthSkew"],message:"lengthMatchTo requires an explicit maxLengthSkew"});let n=(s)=>typeof s==="number"?{basis:"absolute",amount:s}:{basis:JSON.stringify([s.reference,s.of?[...s.of].sort():null]),amount:s.offset??0},o=e.minLength===void 0?void 0:n(e.minLength),i=e.maxLength===void 0?void 0:n(e.maxLength),r=e.targetLength===void 0?void 0:n(e.targetLength);if(o&&i&&o.basis===i.basis&&o.amount>i.amount)t.addIssue({code:jt.custom,path:["maxLength"],message:"maxLength cannot be below minLength for the same reference"});if(r&&o&&r.basis===o.basis&&r.amount+(e.lengthTolerance??0)<o.amount||r&&i&&r.basis===i.basis&&r.amount-(e.lengthTolerance??0)>i.amount)t.addIssue({code:jt.custom,path:["targetLength"],message:"targetLength tolerance window does not intersect the declared length bounds"})}var Yyt=kn([Z().min(1),Qt(Z().min(1)).min(1)]),zpo=Z().regex(/^\s*(?:\d+(?:\.\d*)?|\.\d+)(?:[eE][+-]?\d+)?\s*w\s*$/i).transform((e)=>({widthMultiplier:Number(e.trim().replace(/w$/i,""))})).pipe(at({widthMultiplier:He().positive().finite()})),Gpo=ze.pipe(He().positive().finite()),A8e=kn([zpo,Gpo]);cn(!0);var U$=kn([He(),Z().refine((e)=>!/(?:±|\+\/-)/.test(e),"Use a scalar impedance for explicit bounds")]).pipe(ay).pipe(He().positive().finite()),N1t=/^([+-]?(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?)\s*(.*?)$/i,Ypo=Z().regex(/(?:±|\+\/-)/).transform((e,t)=>{let n=e.trim().split(/\s*(?:±|\+\/-)\s*/),o=n.length===2?n[0].match(N1t):null,i=n.length===2?n[1].match(N1t):null;if(!o||!i)return t.addIssue({code:jt.custom,message:"Use a nominal impedance ± an absolute ohm tolerance"}),yce;let r=/^(?:[yzafpnumkKMGTPEZYµμ])?(?:ohms?|Ω)$/i;if(o[2]&&!r.test(o[2])||i[2]&&!r.test(i[2]))return t.addIssue({code:jt.custom,message:"Use an absolute ohm tolerance, not a percentage or another unit"}),yce;let s=ay.safeParse(`${o[1]}${o[2]||i[2]||"ohm"}`),a=ay.safeParse(`${i[1]}${i[2]||o[2]||"ohm"}`);if(!s.success||!a.success||!Number.isFinite(s.data)||!Number.isFinite(a.data)||s.data<=0||a.data<0)return t.addIssue({code:jt.custom,message:"Nominal impedance must be positive and tolerance nonnegative, in ohms"}),yce;return{nominal:s.data,min:s.data-a.data,max:s.data+a.data}}).pipe(at({nominal:He().positive().finite(),min:He().positive().finite(),max:He().positive().finite()})),Vpo=U$,Vyt=kn([Ypo,Vpo]);cn(!0);function Uyt(e,t,n,o,i){if(t!==void 0&&n!==void 0&&t>n)o.addIssue({code:jt.custom,path:[`${i}Max`],message:"Maximum impedance cannot be below minimum impedance"});if(typeof e==="object"){for(let[r,s,a]of[["Min",t,e.min],["Max",n,e.max]])if(s!==void 0&&Math.abs(s-a)>0.000000001*Math.max(1,Math.abs(a)))o.addIssue({code:jt.custom,path:[`${i}${r}`],message:"Explicit impedance bound conflicts with the target tolerance"})}else if(e!==void 0&&(t!==void 0&&e<t||n!==void 0&&e>n))o.addIssue({code:jt.custom,path:[i],message:"Target impedance must lie within its declared bounds"})}var Wyt=at({name:Z().optional(),lengthMatchTo:Yyt.optional(),minLength:hY.optional(),maxLength:hY.optional(),targetLength:hY.optional(),lengthTolerance:E8e.optional(),pcbTraceSpacing:A8e.optional(),pcbSpacingToOtherSignals:A8e.optional(),connections:Qt(Z()).min(1),routingPhaseIndex:He().nullable().optional(),maxLengthSkew:ze.pipe(He().min(0).finite()).optional(),targetImpedance:Vyt.optional(),targetImpedanceMin:U$.optional(),targetImpedanceMax:U$.optional(),pcbTraceWidth:ze.pipe(He().positive().finite()).optional(),pcbAllowedLayers:Qt(bo).min(1).optional(),preferredLayer:bo.optional(),preferredLayers:Qt(bo).min(1).optional()}).superRefine((e,t)=>{Gyt(e,t),Uyt(e.targetImpedance,e.targetImpedanceMin,e.targetImpedanceMax,t,"targetImpedance")}).transform(({targetImpedance:e,...t})=>{if(e===void 0)return t;if(typeof e==="number")return{...t,targetImpedance:e};return{...t,targetImpedance:e.nominal,targetImpedanceMin:e.min,targetImpedanceMax:e.max}});cn(!0);var Xyt=at({name:Z().optional(),lengthMatchTo:Yyt.optional(),minLength:hY.optional(),maxLength:hY.optional(),targetLength:hY.optional(),lengthTolerance:E8e.optional(),pcbSpacingToOtherSignals:A8e.optional(),positiveConnection:Z(),negativeConnection:Z(),maxLengthSkew:ze.pipe(He().min(0).finite()).optional(),targetDifferentialImpedance:Vyt.optional(),targetDifferentialImpedanceMin:U$.optional(),targetDifferentialImpedanceMax:U$.optional(),pcbTraceGap:ze.pipe(He().positive().finite()).optional(),maxUncoupledLength:ze.pipe(He().min(0).finite()).optional()}).superRefine((e,t)=>{Gyt(e,t),Uyt(e.targetDifferentialImpedance,e.targetDifferentialImpedanceMin,e.targetDifferentialImpedanceMax,t,"targetDifferentialImpedance")}).transform(({targetDifferentialImpedance:e,...t})=>{if(e===void 0)return t;if(typeof e==="number")return{...t,targetDifferentialImpedance:e};return{...t,targetDifferentialImpedance:e.nominal,targetDifferentialImpedanceMin:e.min,targetDifferentialImpedanceMax:e.max}});cn(!0);var R1t=Zt(["from_left","from_right","from_top","from_bottom","from_above","from_below","from_x_neg","from_x_pos","from_y_pos","from_y_neg","from_z_pos","from_z_neg","from_front","from_back"]);cn(!0);var Kyt=at({children:_h().optional(),name:Z().optional(),originalLayer:bo.default("top").optional(),circuitJson:Qt(_h()).optional(),src:f8e.describe("Can be a footprint or kicad string").optional(),insertionDirection:R1t.optional().describe("Direction a cable or mating part is attached from, named for the side of the footprint it approaches from, in its unrotated orientation."),cutoutApertureDirection:R1t.optional().describe("Direction the part's enclosure opening faces, in its unrotated orientation. Distinct from insertionDirection: a side-actuated switch is installed from above and actuated from the side. Falls back to insertionDirection when absent.")});cn(!0);var jyt=at({originalFacingDirection:Zt(["up","down","left","right"]).default("right").optional(),width:Bn.optional(),height:Bn.optional(),fit:Zt(["fill","contain","stretch"]).optional(),viewbox:at({minX:Bn,maxX:Bn,minY:Bn,maxY:Bn}).refine((e)=>e.maxX>e.minX,{message:"viewbox maxX must exceed minX",path:["maxX"]}).refine((e)=>e.maxY>e.minY,{message:"viewbox maxY must exceed minY",path:["maxY"]}).optional(),name:Z().optional()});cn(!0);var Upo=He().or(Z().endsWith("mAh")).transform((e)=>{if(typeof e==="string"){let t=e.replace("mAh",""),n=Number.parseFloat(t);if(Number.isNaN(n))throw Error("Invalid capacity");return n}return e}).describe("Battery capacity in mAh"),Wpo=W$,qyt=_u.extend({capacity:Upo.optional(),voltage:xl.optional(),standard:Zt(["AA","AAA","9V","CR2032","18650","C"]).optional(),schOrientation:q7.optional(),connections:px(Wpo).optional()});cn(!0);var Jyt=Mme.extend({mpn:Dg.shape.mpn,mfn:Dg.shape.mfn,manufacturerPartNumber:Dg.shape.manufacturerPartNumber,pinLabels:Dg.shape.pinLabels,showPinAliases:Dg.shape.showPinAliases,pcbPinLabels:Dg.shape.pcbPinLabels,schPortArrangement:Dg.shape.schPortArrangement,pinCompatibleVariants:Dg.shape.pinCompatibleVariants,noSchematicRepresentation:Dg.shape.noSchematicRepresentation,internallyConnectedPins:Dg.shape.internallyConnectedPins,externallyConnectedPins:Dg.shape.externallyConnectedPins,boardToBoardDistance:Bn.optional(),mountOrientation:Zt(["faceDown","faceUp"]).optional()});cn(!0);var Xpo=Zt(["vertical","horizontal"]).describe("vertical means pins go 1->2 downward and horizontal means pins go 1->2 rightward");cn(!0);var $yt=_u.extend({pinCount:He(),pitch:ze.optional(),schFacingDirection:Zt(["up","down","left","right"]).optional(),gender:Zt(["male","female"]).optional().default("male"),showSilkscreenPinLabels:Ue().optional(),pcbPinLabels:Fa(Z(),Z()).optional(),doubleRow:Ue().optional(),rightAngle:Ue().optional(),pcbOrientation:Xpo.optional(),holeDiameter:ze.optional(),platedDiameter:ze.optional(),pinLabels:Fa(Z(),Fm).or(Qt(Fm)).optional(),connections:dc().pipe(Fa(Z(),HQ)).optional(),facingDirection:Zt(["left","right"]).optional(),schPinArrangement:Pme.optional(),schPinStyle:X$.optional(),schPinSpacing:ze.optional(),schWidth:ze.optional(),schHeight:ze.optional(),connectsFromAbove:Ue().optional(),connectsFromBelow:Ue().optional()}).superRefine((e,t)=>{if(e.connectsFromAbove&&e.connectsFromBelow)t.addIssue({code:jt.custom,message:"connectsFromAbove and connectsFromBelow are opposites; set at most one"})}).transform((e)=>{let t=e.layer??(e.connectsFromBelow?"bottom":e.connectsFromAbove?"top":void 0);return t===void 0?e:{...e,layer:t}});cn(!0);var CTr=at({net:Z().optional(),connection:Z().optional(),schX:Bn.optional(),schY:Bn.optional(),schRotation:Ui.optional(),anchorSide:Zt(["left","top","right","bottom"]).optional()});cn(!0);var Zyt=at({net:Z().optional(),connection:Z().optional(),connectsTo:Z().or(Qt(Z())).optional(),inline:Ue().optional(),schX:Bn.optional(),schY:Bn.optional(),schRotation:Ui.optional(),anchorSide:Zt(["left","top","right","bottom"]).optional()});cn(!0);var e2t=Dg.extend({});cn(!0);cn(!0);var t2t=dc((e)=>typeof e==="string"),n2t=at({method:Zt(["trap","gear"]).optional(),reltol:kn([He(),Z()]).optional(),abstol:kn([He(),Z()]).optional(),vntol:kn([He(),Z()]).optional()}),wme={name:Z().optional(),spiceEngine:t2t.optional(),spiceOptions:n2t.optional(),graphIndependentAxes:Ue().optional(),children:dc().optional()},o2t=at({name:Z().optional(),simulationType:Be("spice_transient_analysis").default("spice_transient_analysis"),duration:Ha.optional(),startTime:Ha.optional(),timePerStep:Ha.optional(),spiceEngine:t2t.optional(),spiceOptions:n2t.optional(),graphIndependentAxes:Ue().optional()});cn(!0);var Q1t=Ha.refine((e)=>e>0,"Time must be positive"),i2t=at({...wme,duration:Q1t.default("10ms"),startTime:Ha.default("0ms"),timePerStep:Q1t.default("0.01ms")}).superRefine((e,t)=>{if(e.startTime<0||e.startTime>e.duration)t.addIssue({code:jt.custom,path:["startTime"],message:"startTime must be between zero and duration"})});cn(!0);var r2t=at({...wme});cn(!0);var h8e=kn([xl,Pg]),s2t=at({...wme,sweepSource:Z().min(1),sweepStart:h8e,sweepStop:h8e,sweepStep:h8e.refine((e)=>e!==0,"sweepStep must be nonzero")}).superRefine((e,t)=>{if(Math.sign(e.sweepStop-e.sweepStart)!==Math.sign(e.sweepStep))t.addIssue({code:jt.custom,path:["sweepStep"],message:"sweepStep must move from sweepStart toward sweepStop"})});cn(!0);var a2t=at({...wme,sweepType:Zt(["linear","decade","octave"]),startFrequency:s0.refine((e)=>e>0,"startFrequency must be positive"),stopFrequency:s0.refine((e)=>e>0,"stopFrequency must be positive"),samplesPerInterval:He().int().positive().optional(),sampleCount:He().int().positive().optional()}).superRefine((e,t)=>{if(e.stopFrequency<=e.startFrequency)t.addIssue({code:jt.custom,path:["stopFrequency"],message:"stopFrequency must be greater than startFrequency"});if(e.sweepType==="linear"){if(e.sampleCount===void 0)t.addIssue({code:jt.custom,path:["sampleCount"],message:"sampleCount is required for a linear AC sweep"});if(e.samplesPerInterval!==void 0)t.addIssue({code:jt.custom,path:["samplesPerInterval"],message:"samplesPerInterval is only valid for decade or octave sweeps"});return}if(e.samplesPerInterval===void 0)t.addIssue({code:jt.custom,path:["samplesPerInterval"],message:"samplesPerInterval is required for decade or octave sweeps"});if(e.sampleCount!==void 0)t.addIssue({code:jt.custom,path:["sampleCount"],message:"sampleCount is only valid for a linear sweep"})});cn(!0);var uY=Z().trim().min(1,"Provide a nonempty selector"),Kpo="[+-]?(?:\\d+(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+)?",jpo={"":1,y:0.000000000000000000000001,z:0.000000000000000000001,a:0.000000000000000001,f:0.000000000000001,p:0.000000000001,n:0.000000001,u:0.000001,µ:0.000001,μ:0.000001,m:0.001,k:1000,M:1e6,G:1e9,T:1000000000000,P:1000000000000000,E:1000000000000000000,Z:1000000000000000000000,Y:1000000000000000000000000};function c2t(e,t,n){let o=new RegExp(`^(${Kpo})\\s*(?:([yzafpnumkMGTPEZYµμ]?)(?:${e}))?$`);return kn([He(),Z().trim().regex(o,`Use ${t} or a unit string, e.g. ${n}`)]).transform((i)=>{if(typeof i==="number")return i;let r=o.exec(i);return Number(r[1])*jpo[r[2]??""]}).pipe(He().finite().positive(`${t} must be greater than zero`))}var qpo=c2t("A","peak amperes","5mA"),k1t=c2t("ohms?|Ohms?|Ω","real ohms","100ohm"),l2t=at({name:Z().trim().min(1).optional(),source:uY,load:uY,ground:uY,current:qpo,returnSource:uY,returnSink:uY,sourceImpedance:k1t,loadImpedance:k1t,trace:uY.optional(),returnSourceLayer:bo.optional(),returnSinkLayer:bo.optional()}).strict();cn(!0);var d2t=at({name:Z().trim().min(1).optional(),children:dc().optional()}).strict();cn(!0);var Jpo=ay.pipe(He()),$po=Q5.pipe(He()),Zpo=hz.pipe(He()),eAo=xl.pipe(He()),tAo=Pg.pipe(He()),q$=(e)=>({name:Z().optional(),values:Qt(e).min(1).optional(),start:e.optional(),stop:e.optional(),step:e.optional()}),nAo=at({...q$(Jpo),parameterType:Be("resistance"),resistorRef:Z().min(1)}).strict(),oAo=at({...q$($po),parameterType:Be("capacitance"),capacitorRef:Z().min(1)}).strict(),iAo=at({...q$(Zpo),parameterType:Be("inductance"),inductorRef:Z().min(1)}).strict(),rAo=at({...q$(eAo),parameterType:Be("voltage"),net:Z().min(1)}).strict(),sAo=at({...q$(tAo),parameterType:Be("current"),currentSourceRef:Z().min(1)}).strict(),aAo=(e,t)=>{let n=e.values!==void 0,o=[e.start,e.stop,e.step].filter((r)=>r!==void 0).length,i=o>0;if(n===i){t.addIssue({code:jt.custom,message:"Provide either values or start/stop/step"});return}if(o!==0&&o!==3){t.addIssue({code:jt.custom,message:"start, stop, and step must be provided together"});return}if(e.step===0)t.addIssue({code:jt.custom,path:["step"],message:"step must be nonzero"});if(e.start!==void 0&&e.stop!==void 0&&e.step!==void 0&&Math.sign(e.stop-e.start)!==Math.sign(e.step))t.addIssue({code:jt.custom,path:["step"],message:"step must move from start toward stop"})},u2t=nl("parameterType",[nAo,oAo,iAo,rAo,sAo]).superRefine(aAo);cn(!0);cn(!0);cn(!0);cn(!0);cn(!0);cn(!0);var h2t=at({key:_h().optional(),name:Z().optional(),autorouter:Eme.optional(),algorithmFn:cyt.shape.algorithmFn,preflightRoutingCheckPolicy:lyt.optional(),phaseIndex:He().optional(),pcbTracePaths:Qt(j$).optional(),...ayt.shape,region:at({shape:Be("rect").optional(),minX:He(),maxX:He(),minY:He(),maxY:He()}).optional(),connection:Z().optional(),connections:Qt(Z()).optional(),reroute:Ue().optional(),..._yt.shape}).superRefine((e,t)=>{let n=e.autorouter==="simplify"||typeof e.autorouter==="object"&&e.autorouter?.preset==="simplify";if(n&&e.reroute!==!0)console.warn('The "simplify" autorouter preset should only be used with reroute=true');if(e.reroute!==void 0&&!(n&&e.reroute===!0)&&e.region===void 0&&e.connection===void 0&&e.connections===void 0)t.addIssue({code:jt.custom,message:"region, connection, or connections is required when reroute is provided",path:["region"]})});cn(!0);var m2t=at({source:Z(),spicePinMapping:Fa(Z(),Z()).optional()});cn(!0);var cAo=["pin1","pin2","pin3","emitter","collector","base","gate","source","drain"],p2t=_u.extend({type:Zt(["npn","pnp","bjt","jfet","mosfet","igbt"]),connections:px(cAo).optional()});cn(!0);var lAo=["pin1","drain","pin2","source","pin3","gate"],A2t=_u.extend({channelType:Zt(["n","p"]),mosfetMode:Zt(["enhancement","depletion"]),symbolDrainSide:Zt(["left","right","top","bottom"]).optional(),symbolSourceSide:Zt(["left","right","top","bottom"]).optional(),symbolGateSide:Zt(["left","right","top","bottom"]).optional(),connections:px(lAo).optional()});cn(!0);var dAo=["inverting_input","non_inverting_input","output","positive_supply","negative_supply"],_2t=_u.extend({connections:px(dAo).optional()});cn(!0);var uAo=syt,g2t=_u.extend({inductance:hz,maxCurrentRating:kn([Z(),He()]).optional(),schOrientation:q7.optional(),connections:px(uAo).optional()});cn(!0);var UTr=at({children:dc().optional()});cn(!0);var M8e=W$,hAo=Zt(["anode","cathode","pin1","pin2","pos","neg"]),mAo=Z().or(Qt(Z()).readonly()).or(Qt(Z())),pAo=Fa(hAo,mAo),f2t=Fa(Zt(M8e),Fm.or(Qt(Fm).readonly()).or(Qt(Fm))),AAo=Zt(["standard","schottky","zener","avalanche","photo","tvs"]),y2t=_u.extend({connections:pAo.optional(),variant:AAo.optional().default("standard"),standard:Ue().optional(),schottky:Ue().optional(),zener:Ue().optional(),avalanche:Ue().optional(),photo:Ue().optional(),tvs:Ue().optional(),schOrientation:q7.optional(),schSize:vme.optional(),pinLabels:f2t.optional()}).superRefine((e,t)=>{if([e.standard,e.schottky,e.zener,e.avalanche,e.photo,e.tvs].filter(Boolean).length>1)return t.addIssue({code:jt.custom,message:"Exactly one diode variant must be enabled",path:[]}),Ur}).transform((e)=>{let t={...e,standard:!1,schottky:!1,zener:!1,avalanche:!1,photo:!1,tvs:!1};if(e.standard)t.standard=!0;else if(e.schottky)t.schottky=!0;else if(e.zener)t.zener=!0;else if(e.photo)t.photo=!0;else if(e.tvs)t.tvs=!0;else switch(e.variant){case"standard":t.standard=!0;break;case"schottky":t.schottky=!0;break;case"zener":t.zener=!0;break;case"avalanche":t.avalanche=!0;break;case"photo":t.photo=!0;break;case"tvs":t.tvs=!0;break;default:t.standard=!0}return t});cn(!0);var _Ao=Fa(Zt(["1","2"]),Fm.or(Qt(Fm).readonly()).or(Qt(Fm))).transform((e)=>({...e["1"]===void 0?{}:{pin1:e["1"]},...e["2"]===void 0?{}:{pin2:e["2"]}})),x2t=_u.extend({color:Z().optional(),wavelength:Z().optional(),schDisplayValue:Z().optional(),schOrientation:q7.optional(),schSize:vme.optional(),pinLabels:f2t.or(_Ao).optional(),connections:px(W$).optional(),laser:Ue().optional()}),C2t=W$,I2t=_u.extend({type:Zt(["spst","spdt","dpst","dpdt"]).optional(),isNormallyClosed:Ue().optional().default(!1),spst:Ue().optional(),spdt:Ue().optional(),dpst:Ue().optional(),dpdt:Ue().optional(),pinLabels:P8e.optional(),noConnect:yyt.optional(),simSwitchFrequency:s0.optional(),simCloseAt:Ha.optional(),simOpenAt:Ha.optional(),simStartClosed:Ue().optional(),simStartOpen:Ue().optional(),connections:dc().pipe(Fa(Z(),HQ)).optional()}).transform((e)=>{let t={...e};if(t.dpdt)t.type="dpdt";else if(t.spst)t.type="spst";else if(t.spdt)t.type="spdt";else if(t.dpst)t.type="dpst";switch(t.type){case"spdt":t.spdt=!0;break;case"spst":t.spst=!0;break;case"dpst":t.dpst=!0;break;case"dpdt":t.dpdt=!0;break}return t});cn(!0);var b2t=us.extend({text:Z(),anchorAlignment:Zt(["center","top_left","top_right","bottom_left","bottom_right"]).default("center"),font:Zt(["tscircuit2024"]).optional(),fontSize:fe.optional(),color:Z().optional()});cn(!0);var S2t=us.omit({pcbRotation:!0}).extend({width:ze,height:ze,strokeWidth:ze.optional(),isFilled:Ue().optional(),hasStroke:Ue().optional(),isStrokeDashed:Ue().optional(),color:Z().optional(),cornerRadius:ze.optional()}),P2t=us.omit({pcbLeftEdgeX:!0,pcbRightEdgeX:!0,pcbTopEdgeY:!0,pcbBottomEdgeY:!0,pcbX:!0,pcbY:!0,pcbOffsetX:!0,pcbOffsetY:!0,pcbRotation:!0}).extend({route:Qt(M_),strokeWidth:fe.optional(),color:Z().optional(),isFilled:Ue().optional(),hasStroke:Ue().optional()}),L1t=kn([Z(),Zf]),v2t=us.omit({pcbLeftEdgeX:!0,pcbRightEdgeX:!0,pcbTopEdgeY:!0,pcbBottomEdgeY:!0,pcbX:!0,pcbY:!0,pcbOffsetX:!0,pcbOffsetY:!0,pcbRotation:!0}).extend({from:L1t,to:L1t,text:Z().optional(),offset:ze.optional(),offsetDirection:at({x:He().finite(),y:He().finite()}).optional(),font:Zt(["tscircuit2024"]).optional(),fontSize:fe.optional(),color:Z().optional(),arrowSize:ze.optional(),units:Zt(["in","mm"]).optional(),outerEdgeToEdge:Be(!0).optional(),centerToCenter:Be(!0).optional(),innerEdgeToEdge:Be(!0).optional()});cn(!0);var sDr=at({layer:Z().optional(),thickness:ze.optional(),route:Qt(M_)}),Tme=Sme.extend({name:Z().optional(),fromLayer:bo.optional(),toLayer:bo.optional(),holeDiameter:ze.optional(),outerDiameter:ze.optional(),layers:Qt(bo).optional(),connectsTo:Z().or(Qt(Z())).optional(),netIsAssignable:Ue().optional(),tented:kn([Ue(),Zt(["both_sides","top_and_bottom_tented","top_tented","bottom_tented","exposed"])]).transform((e)=>{if(e===!0||e==="both_sides")return"top_and_bottom_tented";if(e===!1)return"exposed";return e}).optional()});cn(!0);var gAo=at({pin1:HQ}).strict(),E2t=_u.extend({connections:gAo.optional(),footprintVariant:Zt(["pad","through_hole"]).optional(),padShape:Zt(["rect","circle"]).optional().default("circle"),padDiameter:ze.optional(),holeDiameter:ze.optional(),width:ze.optional(),height:ze.optional()}).refine((e)=>e.footprintVariant!=="through_hole"||e.holeDiameter!==void 0,{message:"holeDiameter is required for through_hole testpoints"});cn(!0);var M2t=us.omit({pcbRotation:!0,layer:!0}).extend({connection:Z()});cn(!0);var B2t=kn([us.omit({pcbRotation:!0}).extend({shape:Be("circle"),radius:ze,layers:Qt(bo).optional(),warningOnly:Ue().optional(),allowTraces:Ue().optional(),allowPlacements:Ue().optional(),excludeRefs:Qt(Z()).optional().describe('Component selectors excluded from the keepout, such as ".ANT1"')}),us.extend({shape:Be("rect"),width:ze,height:ze,layers:Qt(bo).optional(),warningOnly:Ue().optional(),allowTraces:Ue().optional(),allowPlacements:Ue().optional(),excludeRefs:Qt(Z()).optional().describe('Component selectors excluded from the keepout, such as ".ANT1"')})]),w2t=us.extend({width:ze,height:ze,strokeWidth:ze.optional(),isFilled:Ue().optional(),hasStroke:Ue().optional(),isStrokeDashed:Ue().optional(),color:Z().optional()}),T2t=us.omit({pcbLeftEdgeX:!0,pcbRightEdgeX:!0,pcbTopEdgeY:!0,pcbBottomEdgeY:!0,pcbX:!0,pcbY:!0,pcbOffsetX:!0,pcbOffsetY:!0,pcbRotation:!0}).extend({outline:Qt(Zf),strokeWidth:fe.optional(),isClosed:Ue().optional(),isStrokeDashed:Ue().optional(),color:Z().optional()}),D2t=us.omit({pcbRotation:!0}).extend({radius:ze}),xDr=us.omit({pcbRotation:!0}).extend({width:ze,height:ze,radius:ze}),N2t=at({name:Z().optional(),layer:bo,connectsTo:Z(),crosshatch:Ue().optional(),crosshatchPitch:Bn.pipe(He().finite().positive()).optional(),crosshatchWidth:Bn.pipe(He().finite().positive()).optional(),unbroken:Ue().optional().describe("Reserves the pour region during autorouting so unrelated traces do not split it. Vias may still cross the region using antipads."),padMargin:Bn.optional(),traceMargin:Bn.optional(),clearance:Bn.optional(),boardEdgeMargin:Bn.optional(),cutoutMargin:Bn.optional(),useThermalReliefs:Ue().optional(),outline:Qt(Zf).optional(),coveredWithSolderMask:Ue().optional().default(!0)}).superRefine((e,t)=>{if(e.crosshatch&&(e.crosshatchWidth??0.25)>=(e.crosshatchPitch??1))t.addIssue({code:jt.custom,path:["crosshatchWidth"],message:"crosshatchWidth must be less than crosshatchPitch"})});cn(!0);var R2t=at({originalLayer:bo.default("top").optional(),children:_h().optional()});cn(!0);var Q2t=at({pcbX:Lm.optional(),pcbY:Lm.optional(),pcbLeftEdgeX:Lm.optional(),pcbRightEdgeX:Lm.optional(),pcbTopEdgeY:Lm.optional(),pcbBottomEdgeY:Lm.optional(),pcbOffsetX:Bn.optional(),pcbOffsetY:Bn.optional(),pcbZ:Bn.optional()}),fAo=mx.extend({modelUrl:Au,stepUrl:Au.optional()}),yAo=fAo.merge(Q2t);cn(!0);var xAo=mx.extend({model:Z().trim().min(1).optional(),modelUrl:Au.optional()}).merge(Q2t).refine((e)=>e.model===void 0!==(e.modelUrl===void 0),{message:"Provide exactly one of model or modelUrl",path:["model"]}).transform(({model:e,...t})=>({...t,modelUrl:e===void 0?t.modelUrl:/^https?:\/\//i.test(e)?e:`https://modelcdn.tscircuit.com/jscad_models/${encodeURIComponent(e)}.glb`})).pipe(yAo);cn(!0);var k2t=kn([Dnt(),Au,xAo]),L2t=_u.extend({voltage:xl}),CAo=["pin1","pin2","pos","neg"],IAo=kn([Z(),He()]).transform((e)=>{if(typeof e==="string"){if(e.endsWith("%"))return parseFloat(e.slice(0,-1))/100;return parseFloat(e)}return e}).pipe(He().min(0,"Duty cycle must be non-negative").max(1,"Duty cycle cannot be greater than 100%")),F2t=_u.extend({voltage:xl.optional(),frequency:s0.optional(),peakToPeakVoltage:xl.optional(),waveShape:Zt(["sinewave","square","triangle","sawtooth"]).optional(),phase:Ui.optional(),dutyCycle:IAo.optional(),pulseDelay:Ha.optional(),riseTime:Ha.optional(),fallTime:Ha.optional(),pulseWidth:Ha.optional(),period:Ha.optional(),acMagnitude:xl.optional(),acPhase:Ui.optional(),connections:px(CAo).optional()});cn(!0);var bAo=["pin1","pin2","pos","neg"],SAo=kn([Z(),He()]).transform((e)=>{if(typeof e==="string"){if(e.endsWith("%"))return parseFloat(e.slice(0,-1))/100;return parseFloat(e)}return e}).pipe(He().min(0,"Duty cycle must be non-negative").max(1,"Duty cycle cannot be greater than 100%")),H2t=_u.extend({current:Pg.optional(),frequency:s0.optional(),peakToPeakCurrent:Pg.optional(),waveShape:Zt(["sinewave","square","triangle","sawtooth"]).optional(),phase:Ui.optional(),dutyCycle:SAo.optional(),acMagnitude:Pg.optional(),acPhase:Ui.optional(),connections:px(bAo).optional()});cn(!0);var O2t=_u.omit({name:!0}).extend({name:Z().optional(),connectsTo:Z(),referenceTo:Z().optional(),color:Z().optional(),graphDisplayName:Z().optional(),graphCenter:He().optional(),graphVerticalOffset:He().or(Z()).optional(),graphVoltagePerDiv:He().or(Z()).optional()});cn(!0);var PAo=["pin1","pin2","pos","neg"],vAo=(e)=>e.pos!==void 0&&e.neg!==void 0||e.pin1!==void 0&&e.pin2!==void 0,z2t=_u.extend({connections:px(PAo).refine(vAo,"Ammeter connections must include either pos/neg or pin1/pin2"),color:Z().optional(),graphDisplayName:Z().optional(),graphCenter:He().optional(),graphVerticalOffset:He().or(Z()).optional(),graphCurrentPerDiv:He().or(Z()).optional()});cn(!0);var G2t=at({center:ko,radius:ze,startAngleDegrees:Ui,endAngleDegrees:Ui,direction:Zt(["clockwise","counterclockwise"]).default("counterclockwise"),strokeWidth:ze.optional(),color:Z().optional(),isDashed:Ue().optional().default(!1)});cn(!0);var kDr=at({children:_h().optional()});cn(!0);var Y2t=at({name:Z().optional(),chipRef:Z().optional(),pinLabels:P8e.optional(),schPinArrangement:Pme.optional(),schPinStyle:X$.optional(),schX:ze.optional(),schY:ze.optional(),schSectionName:Z().optional(),schSheetName:Z().optional(),width:ze.optional(),height:ze.optional(),overlay:Qt(Z()).optional(),padding:ze.optional(),paddingLeft:ze.optional(),paddingRight:ze.optional(),paddingTop:ze.optional(),paddingBottom:ze.optional(),title:Z().optional(),titleAlignment:oE.default("top_left"),titleColor:Z().optional(),titleFontSize:ze.optional(),titleInside:Ue().default(!1),strokeStyle:Zt(["solid","dashed"]).default("solid")}).refine((e)=>e.width!==void 0&&e.height!==void 0||Array.isArray(e.overlay)&&e.overlay.length>0,{message:"Must provide either both `width` and `height`, or a non-empty `overlay` array."}).refine((e)=>!(e.width!==void 0&&e.height!==void 0&&Array.isArray(e.overlay)&&e.overlay.length>0),{message:"Cannot provide both `width`/`height` and `overlay` at the same time."});cn(!0);var EAo=dc().pipe(Fa(Z(),HQ)).refine((e)=>Object.keys(e).length>0,{message:"connections must map at least one schematic symbol port"}),V2t=at({name:Z().min(1),displayName:Z().optional(),chipRef:Z().min(1).optional(),symbolName:Z().min(1),connections:EAo.optional(),schX:Bn.optional(),schY:Bn.optional(),schRotation:Ui.optional(),schSectionName:Z().optional(),schSheetName:Z().optional()});cn(!0);var U2t=at({center:ko,radius:ze,strokeWidth:ze.optional(),color:Z().optional(),isFilled:Ue().optional().default(!1),fillColor:Z().optional(),isDashed:Ue().optional().default(!1)});cn(!0);var W2t=at({schX:ze.optional(),schY:ze.optional(),width:ze,height:ze,rotation:Ui.default(0),strokeWidth:ze.optional(),color:Z().optional(),isFilled:Ue().optional().default(!1),fillColor:Z().optional(),isDashed:Ue().optional().default(!1)});cn(!0);var X2t=at({x1:ze,y1:ze,x2:ze,y2:ze,strokeWidth:ze.optional(),color:Z().optional(),isDashed:Ue().optional().default(!1),dashLength:ze.optional(),dashGap:ze.optional()});cn(!0);var MAo=Zt(["center","left","right","top","bottom"]),K2t=at({schX:ze.optional(),schY:ze.optional(),text:Z(),fontSize:He().default(1),anchor:kn([MAo.describe("legacy"),oE]).default("center"),color:Z().default("#000000"),schRotation:Ui.default(0)});cn(!0);var j2t=at({points:Qt(ko).optional(),svgPath:Z().optional(),strokeWidth:ze.optional(),strokeColor:Z().optional(),dashLength:ze.optional(),dashGap:ze.optional(),isFilled:Ue().optional().default(!1),fillColor:Z().optional()});cn(!0);var q2t=at({schX:ze.optional(),schY:ze.optional(),children:_h().optional(),cellPadding:ze.optional(),borderWidth:ze.optional(),anchor:oE.optional(),fontSize:ze.optional()});cn(!0);var J2t=at({children:_h().optional(),height:ze.optional()});cn(!0);var $2t=at({children:Z().optional(),horizontalAlign:Zt(["left","center","right"]).optional(),verticalAlign:Zt(["top","middle","bottom"]).optional(),fontSize:ze.optional(),rowSpan:He().optional(),colSpan:He().optional(),width:ze.optional(),text:Z().optional()});cn(!0);var Z2t=at({displayName:Z().optional(),name:Z(),sectionTitleFontSize:ze.optional()});cn(!0);var ext=at({name:Z().optional(),displayName:Z().optional(),sheetIndex:He().optional(),sheetSize:Zt(["A4","ANSI_B"]).default("A4"),sheetWidth:ze.pipe(He().positive()).optional(),sheetHeight:ze.pipe(He().positive()).optional(),children:_h().optional()});cn(!0);var BAo=Au.refine((e)=>e.trim().length>0,{message:"imageUrl cannot be empty"}),F1t=(e)=>Bn.refine((t)=>Number.isFinite(t)&&t>0,{message:`${e} must be a positive finite distance`}),txt=at({imageUrl:BAo.optional(),svgContent:Z().refine((e)=>e.trim().length>0,{message:"svgContent cannot be empty"}).optional(),width:F1t("width").optional(),height:F1t("height").optional()}).superRefine(({imageUrl:e,svgContent:t},n)=>{if(e===void 0&&t===void 0)n.addIssue({code:jt.custom,message:"At least one of imageUrl or svgContent is required"})});cn(!0);var nxt=us.extend({text:Z(),anchorAlignment:oE.default("center"),font:Zt(["tscircuit2024"]).optional(),fontSize:fe.optional(),layers:Qt(bo).optional(),knockout:Ue().optional(),mirrored:Ue().optional()}),oxt=us.extend({text:Z(),anchorAlignment:oE.default("center"),font:Zt(["tscircuit2024"]).optional(),fontSize:fe.optional(),isKnockout:Ue().optional(),knockoutPadding:fe.optional(),knockoutPaddingLeft:fe.optional(),knockoutPaddingRight:fe.optional(),knockoutPaddingTop:fe.optional(),knockoutPaddingBottom:fe.optional(),layers:Qt(bo).optional()}),ixt=us.omit({pcbLeftEdgeX:!0,pcbRightEdgeX:!0,pcbTopEdgeY:!0,pcbBottomEdgeY:!0,pcbX:!0,pcbY:!0,pcbOffsetX:!0,pcbOffsetY:!0,pcbRotation:!0}).extend({route:Qt(M_),strokeWidth:fe.optional()}),rxt=us.omit({pcbX:!0,pcbY:!0,pcbOffsetX:!0,pcbOffsetY:!0,pcbRotation:!0}).extend({strokeWidth:ze,x1:ze,y1:ze,x2:ze,y2:ze}),sxt=us.omit({pcbRotation:!0}).extend({filled:Ue().default(!0).optional(),stroke:Zt(["dashed","solid","none"]).optional(),strokeWidth:ze.optional(),width:ze,height:ze,cornerRadius:ze.optional()}),axt=us.omit({pcbRotation:!0}).extend({isFilled:Ue().optional(),isOutline:Ue().optional(),strokeWidth:ze.optional(),radius:ze}),cxt=us.omit({layer:!0,pcbStyle:!0,pcbSx:!0}).extend({imageUrl:Au,width:Bn,height:Bn,layer:a0.optional()});cn(!0);var H1t=at({x:ze,y:ze,via:Ue().optional(),toLayer:bo.optional()}),lxt=at({for:Z().optional().describe("Selector for the port you're targeting, not required if you're inside a trace"),order:He().optional(),offset:M_.or(H1t).optional(),offsets:Qt(M_).or(Qt(H1t)).optional(),traceWidth:He().optional()}),dxt=Sme.extend({name:Z().optional(),pinNumber:He().optional(),schStemLength:He().optional(),schPinLabelFontSize:Zt(["default","sm"]).or(ze.refine((e)=>Number.isFinite(e)&&e>0,{message:"Schematic pin-label font size must be positive and finite"})).optional(),aliases:Qt(Z()).optional(),layer:Z().optional(),layers:Qt(Z()).optional(),schX:He().optional(),schY:He().optional(),direction:U0o.optional(),connectsTo:Z().or(Qt(Z())).optional(),kicadPinMetadata:Rmo.optional(),hasInversionCircle:Ue().optional()}),uxt=us.extend({text:Z(),anchorAlignment:Zt(["center","top_left","top_right","bottom_left","bottom_right"]).default("center"),font:Zt(["tscircuit2024"]).optional(),fontSize:fe.optional(),color:Z().optional()});cn(!0);var hxt=us.omit({pcbRotation:!0}).extend({width:ze,height:ze,strokeWidth:ze.optional(),isFilled:Ue().optional(),hasStroke:Ue().optional(),isStrokeDashed:Ue().optional(),color:Z().optional(),cornerRadius:ze.optional()});cn(!0);var mxt=us.omit({pcbLeftEdgeX:!0,pcbRightEdgeX:!0,pcbTopEdgeY:!0,pcbBottomEdgeY:!0,pcbX:!0,pcbY:!0,pcbOffsetX:!0,pcbOffsetY:!0,pcbRotation:!0}).extend({route:Qt(M_),strokeWidth:fe.optional(),color:Z().optional()});cn(!0);var pxt=us.omit({pcbLeftEdgeX:!0,pcbRightEdgeX:!0,pcbTopEdgeY:!0,pcbBottomEdgeY:!0,pcbX:!0,pcbY:!0,pcbOffsetX:!0,pcbOffsetY:!0,pcbRotation:!0}).extend({x1:ze,y1:ze,x2:ze,y2:ze,strokeWidth:ze.optional(),color:Z().optional(),isDashed:Ue().optional()});cn(!0);var O1t=kn([Z(),Zf]),Axt=us.omit({pcbLeftEdgeX:!0,pcbRightEdgeX:!0,pcbTopEdgeY:!0,pcbBottomEdgeY:!0,pcbX:!0,pcbY:!0,pcbOffsetX:!0,pcbOffsetY:!0,pcbRotation:!0}).extend({from:O1t,to:O1t,text:Z().optional(),offset:ze.optional(),offsetDirection:at({x:He().finite(),y:He().finite()}).optional(),font:Zt(["tscircuit2024"]).optional(),fontSize:fe.optional(),color:Z().optional(),arrowSize:ze.optional(),units:Zt(["in","mm"]).optional(),outerEdgeToEdge:Be(!0).optional(),centerToCenter:Be(!0).optional(),innerEdgeToEdge:Be(!0).optional()});cn(!0);var _xt=Qt(_h()).describe("Circuit JSON"),_8e=at({footprintCircuitJson:Qt(_h()),cadModel:FQ.optional()}),z1t=n7().args(Z()).returns(o7(_8e)).or(n7().args(Z(),at({resolvedPcbStyle:x8e.optional()}).optional()).returns(o7(_8e))).describe("A function that takes a path and returns Circuit JSON"),wAo=at({loadFromUrl:n7().args(Z()).returns(o7(_8e)).describe("A function that takes a footprint file URL and returns Circuit JSON")}),TAo=at({engineVersionString:Z().optional(),simulationResultCircuitJson:_xt}),DAo=at({simulate:n7().args(Z()).returns(o7(TAo)).describe("A function that takes a SPICE string and returns a simulation result")}),NAo=dc((e)=>typeof e==="string"),G1t=at({run:n7().args().returns(o7(ive())).describe("Run the autorouter"),getOutputSimpleRouteJson:n7().args().returns(o7(_h())).describe("Get the resulting SimpleRouteJson")}),RAo=at({createAutorouter:n7().args(_h(),_h().optional()).returns(kn([G1t,o7(G1t)])).describe("Create an autorouter instance")}),QAo=dc((e)=>typeof e==="function").describe("A fetch-like function to use for platform requests"),kAo=dc((e)=>typeof e==="object"&&e!==null&&("getItem"in e)&&typeof e.getItem==="function"&&("setItem"in e)&&typeof e.setItem==="function"),LAo=dc((e)=>typeof e==="object"&&e!==null&&("runDrcChecks"in e)&&typeof e.runDrcChecks==="function"),FAo=at({partsEngine:dyt.optional(),checkAvailability:Ue().describe("Opt in to networked JLCPCB availability checks during rendering. Disabled by default; enabling adds non-deterministic diagnostics.").optional(),fabricatorEngine:LAo.optional(),autorouter:Eme.optional(),autorouterMap:Fa(Z(),RAo).optional(),allowLegacyAutorouters:Ue().optional(),registryApiUrl:Au.optional(),cloudAutorouterUrl:Au.optional(),jscdnBaseUrl:Au.optional(),projectName:Z().optional(),projectBaseUrl:Au.optional(),version:Z().optional(),url:Au.optional(),printBoardInformationToSilkscreen:Ue().optional(),includeBoardFiles:Qt(Z()).describe('The board files to automatically build with "tsci build", defaults to ["**/*.circuit.tsx"]. Can be an array of files or globs').optional(),snapshotsDir:Z().describe('The directory where snapshots are stored for "tsci snapshot", defaults to "tests/__snapshots__"').optional(),defaultSpiceEngine:NAo.optional(),unitPreference:Zt(["mm","in","mil"]).optional(),localCacheEngine:kAo.optional(),useCloudAutorouter:Ue().optional(),enablePartOrientationAnalysis:Ue().optional(),pcbPackSolverTimeoutMs:He().finite().positive().optional(),pcbDisabled:Ue().optional(),routingDisabled:Ue().optional(),schematicDisabled:Ue().optional(),partsEngineDisabled:Ue().optional(),analogSimulationDisabled:Ue().optional(),drcChecksDisabled:Ue().optional(),netlistDrcChecksDisabled:Ue().optional(),routingDrcChecksDisabled:Ue().optional(),placementDrcChecksDisabled:Ue().optional(),pinSpecificationDrcChecksDisabled:Ue().optional(),spiceEngineMap:Fa(Z(),DAo).optional(),footprintLibraryMap:Fa(Z(),kn([z1t,Fa(Z(),kn([_xt,z1t]))])).optional(),footprintFileParserMap:Fa(Z(),wAo).optional(),resolveProjectStaticFileImportUrl:n7().args(Z()).returns(o7(Z())).describe("A function that returns a string URL for static files for the project").optional(),platformFetch:QAo.optional()});cn(!0);var HAo=FAo,kNr=HAo.pick({projectName:!0,projectBaseUrl:!0,version:!0,url:!0,printBoardInformationToSilkscreen:!0,includeBoardFiles:!0,snapshotsDir:!0,defaultSpiceEngine:!0,pcbDisabled:!0,schematicDisabled:!0,analogSimulationDisabled:!0});cn(!0);Gt();We();var Z$=new Set,B8e=!1;function eS(e,t,n=2){let o=t&&t.length,i=o?t[0]*n:e.length;if(Z$.size)Z$.clear();let r=xxt(e,0,i,n,!0),s=[];if(!r||r.next===r.prev)return s;let a=0,c=0,l=0;if(o)r=VAo(e,t,r,n);if(e.length>80*n){a=e[0],c=e[1];let d=a,u=c;for(let h=n;h<i;h+=n){let A=e[h],m=e[h+1];if(A<a)a=A;if(m<c)c=m;if(A>d)d=A;if(m>u)u=m}l=Math.max(d-a,u-c),l=l!==0?32767/l:0}return w8e(r,s,a,c,l),s}function xxt(e,t,n,o,i){let r=null;if(i===o_o(e,t,n,o)>0)for(let s=t;s<n;s+=o)r=yxt(s/o|0,e[s],e[s+1],r);else for(let s=n-o;s>=t;s-=o)r=yxt(s/o|0,e[s],e[s+1],r);if(r&&eZ(r,r.next))nZ(r),r=r.next;return r}function zQ(e,t=e){let n=t===e,o=e,i;do if(i=!1,o!==o.next&&(Z$.size===0||!Z$.has(o))&&(eZ(o,o.next)||Hm(o.prev,o,o.next)===0)){if(n||o===t)t=o.prev;B8e=!0,nZ(o),o=o.prev,i=!0}else if(n||o!==t)o=o.next,i=!n;while(i||o!==t);return t}function w8e(e,t,n,o,i){if(i)JAo(e,n,o,i);let r=e,s=!1;while(e.prev!==e.next){let a=e.prev,c=e.next;if(Hm(a,e,c)<0&&(i?zAo(e,n,o,i):OAo(e))){t.push(a.i,e.i,c.i),nZ(e),e=c,r=c;continue}if(e=c,e===r){if(B8e=!1,e=zQ(e),B8e){r=e;continue}if(!s){e=GAo(e,t),r=e,s=!0;continue}YAo(e,t,n,o,i);break}}}function OAo(e){let t=e.prev,n=e,o=e.next,i=t.x,r=n.x,s=o.x,a=t.y,c=n.y,l=o.y,d=Math.min(i,r,s),u=Math.min(a,c,l),h=Math.max(i,r,s),A=Math.max(a,c,l),m=o.next;while(m!==t){if(m.x>=d&&m.x<=h&&m.y>=u&&m.y<=A&&!(i===m.x&&a===m.y)&&Qme(i,a,r,c,s,l,m.x,m.y)&&Hm(m.prev,m,m.next)>=0)return!1;m=m.next}return!0}function zAo(e,t,n,o){let i=e.prev,r=e,s=e.next,a=i.x,c=r.x,l=s.x,d=i.y,u=r.y,h=s.y,A=Math.min(a,c,l),m=Math.min(d,u,h),p=Math.max(a,c,l),g=Math.max(d,u,h),_=R8e(A,m,t,n,o),f=R8e(p,g,t,n,o),y=e.prevZ;while(y&&y.z>=_){if(y.x>=A&&y.x<=p&&y.y>=m&&y.y<=g&&y!==s&&!(a===y.x&&d===y.y)&&Qme(a,d,c,u,l,h,y.x,y.y)&&Hm(y.prev,y,y.next)>=0)return!1;y=y.prevZ}let x=e.nextZ;while(x&&x.z<=f){if(x.x>=A&&x.x<=p&&x.y>=m&&x.y<=g&&x!==s&&!(a===x.x&&d===x.y)&&Qme(a,d,c,u,l,h,x.x,x.y)&&Hm(x.prev,x,x.next)>=0)return!1;x=x.nextZ}return!0}function GAo(e,t){let n=e,o=!1;do{let i=n.prev,r=n.next.next;if(bxt(i,n,n.next,r,!1)&&tZ(i,r)&&tZ(r,i))t.push(i.i,n.i,r.i),nZ(n),nZ(n.next),n=e=r,o=!0;n=n.next}while(n!==e);return o?zQ(n):n}function YAo(e,t,n,o,i){let r=e;do{let s=r.next.next;while(s!==r.prev){if(r.i!==s.i&&e_o(r,s)){let a=Sxt(r,s);r=zQ(r,r.next),a=zQ(a,a.next),w8e(r,t,n,o,i),w8e(a,t,n,o,i);return}s=s.next}r=r.next}while(r!==e)}var T8e=!1;function VAo(e,t,n,o){let i=[];for(let r=0,s=t.length;r<s;r++){let a=t[r]*o,c=r<s-1?t[r+1]*o:e.length,l=xxt(e,a,c,o,!1);if(l===l.next)Z$.add(l);i.push(ZAo(l))}i.sort(UAo),XAo(e.length/o,t.length),Ixt(n,n),T8e=!0;for(let r=0;r<i.length;r++)n=WAo(i[r],n);return T8e=!1,zQ(n)}function UAo(e,t){return e.x-t.x||e.y-t.y||(e.next.y-e.y)/(e.next.x-e.x)-(t.next.y-t.y)/(t.next.x-t.x)}function WAo(e,t){let n=jAo(e,t);if(!n)return t;let o=Sxt(n,e),i=o.next;return Ixt(n,i.next),zQ(o,o.next),zQ(n,n.next)}var Cxt=16,A0=new Float64Array(0),Rme=0,D8e=[],N8e=[];function XAo(e,t){let n=Math.ceil((e+2*t)/Cxt)+t+2;if(A0.length<n*4)A0=new Float64Array(n*4);Rme=0}function Ixt(e,t){let n=e;do{let o=Rme++;D8e[o]=n;let i=n.x,r=n.y,s=n.x,a=n.y,c=0;do{let d=n.next;if(n.z=o,d.x<i)i=d.x;if(d.x>s)s=d.x;if(d.y<r)r=d.y;if(d.y>a)a=d.y;n=d}while(++c<Cxt&&n!==t);N8e[o]=n;let l=o*4;A0[l]=i,A0[l+1]=r,A0[l+2]=s,A0[l+3]=a}while(n!==t)}function KAo(e,t){let n=e.z*4;if(t.x<A0[n])A0[n]=t.x;if(t.y<A0[n+1])A0[n+1]=t.y;if(t.x>A0[n+2])A0[n+2]=t.x;if(t.y>A0[n+3])A0[n+3]=t.y}function gxt(e){let t=N8e[e];while(t.prev.next!==t)t=t.next;return N8e[e]=t,t}function fxt(e){let t=D8e[e];while(t.prev.next!==t)t=t.next;return D8e[e]=t,t}function jAo(e,t){let n=t,{x:o,y:i}=e,r=-1/0,s;if(eZ(e,n))return n;for(let h=0,A=0;h<Rme;h++,A+=4){if(i<A0[A+1]||i>A0[A+3]||A0[A]>o||A0[A+2]<=r)continue;let m=gxt(h);n=fxt(h);do{if(n.prev.next===n){if(eZ(e,n.next))return n.next;else if(i<=n.y&&i>=n.next.y&&n.next.y!==n.y){let p=n.x+(i-n.y)*(n.next.x-n.x)/(n.next.y-n.y);if(p<=o&&p>r){if(r=p,s=n.x<n.next.x?n:n.next,p===o)return s}}}n=n.next}while(n!==m)}if(!s)return null;let a=s.x,c=s.y,l=Math.min(i,c),d=Math.max(i,c),u=1/0;for(let h=0,A=0;h<Rme;h++,A+=4){if(A0[A+2]<a||A0[A]>o||A0[A+3]<l||A0[A+1]>d)continue;let m=gxt(h);n=fxt(h);do{if(n.prev.next===n&&o>=n.x&&n.x>=a&&o!==n.x&&Qme(i<c?o:r,i,a,c,i<c?r:o,i,n.x,n.y)){let p=Math.abs(i-n.y)/(o-n.x);if((tZ(n,e)||n.y===i&&n.next.y===i&&n.next.x>o)&&(p<u||p===u&&(n.x>s.x||n.x===s.x&&qAo(s,n))))s=n,u=p}n=n.next}while(n!==m)}return s}function qAo(e,t){return Hm(e.prev,e,t.prev)<0&&Hm(t.next,e,e.next)<0}var Ax=[],mY=[],OQ=new Uint32Array(0),J$=new Uint32Array(0),$$=new Uint32Array(256);function JAo(e,t,n,o){let i=e,r=0;do i.z=R8e(i.x,i.y,t,n,o),Ax[r++]=i,i=i.next;while(i!==e);$Ao(r);let s=null;for(let a=0;a<r;a++){let c=Ax[a];if(c.prevZ=s,s)s.nextZ=c;s=c}s.nextZ=null,Ax.fill(null,0,r),mY.fill(null,0,r)}function $Ao(e){if(e<=32){for(let t=1;t<e;t++){let n=Ax[t],o=n.z,i=t-1;while(i>=0&&Ax[i].z>o)Ax[i+1]=Ax[i],i--;Ax[i+1]=n}return}if(OQ.length<e)OQ=new Uint32Array(e),J$=new Uint32Array(e),mY=Array(e);for(let t=0;t<e;t++)OQ[t]=Ax[t].z;Dme(e,Ax,OQ,mY,J$,0),Dme(e,mY,J$,Ax,OQ,8),Dme(e,Ax,OQ,mY,J$,16),Dme(e,mY,J$,Ax,OQ,24)}function Dme(e,t,n,o,i,r){$$.fill(0);for(let a=0;a<e;a++)$$[n[a]>>>r&255]++;let s=0;for(let a=0;a<256;a++){let c=$$[a];$$[a]=s,s+=c}for(let a=0;a<e;a++){let c=n[a],l=$$[c>>>r&255]++;o[l]=t[a],i[l]=c}}function R8e(e,t,n,o,i){return e=(e-n)*i|0,t=(t-o)*i|0,e=(e|e<<8)&16711935,e=(e|e<<4)&252645135,e=(e|e<<2)&858993459,e=(e|e<<1)&1431655765,t=(t|t<<8)&16711935,t=(t|t<<4)&252645135,t=(t|t<<2)&858993459,t=(t|t<<1)&1431655765,e|t<<1}function ZAo(e){let t=e,n=e;do{if(t.x<n.x||t.x===n.x&&t.y<n.y)n=t;t=t.next}while(t!==e);return n}function Qme(e,t,n,o,i,r,s,a){return(i-s)*(t-a)>=(e-s)*(r-a)&&(e-s)*(o-a)>=(n-s)*(t-a)&&(n-s)*(r-a)>=(i-s)*(o-a)}function e_o(e,t){let n=eZ(e,t)&&Hm(e.prev,e,e.next)>0&&Hm(t.prev,t,t.next)>0;return e.next.i!==t.i&&(n||tZ(e,t)&&tZ(t,e)&&(Hm(e.prev,e,t.prev)!==0||Hm(e,t.prev,t)!==0))&&!t_o(e,t)&&(n||n_o(e,t))}function Hm(e,t,n){return(t.y-e.y)*(n.x-t.x)-(t.x-e.x)*(n.y-t.y)}function eZ(e,t){return e.x===t.x&&e.y===t.y}function bxt(e,t,n,o,i=!0){let r=Hm(e,t,n),s=Hm(e,t,o),a=Hm(n,o,e),c=Hm(n,o,t);if((r>0&&s<0||r<0&&s>0)&&(a>0&&c<0||a<0&&c>0))return!0;if(!i)return!1;if(r===0&&Nme(e,n,t))return!0;if(s===0&&Nme(e,o,t))return!0;if(a===0&&Nme(n,e,o))return!0;if(c===0&&Nme(n,t,o))return!0;return!1}function Nme(e,t,n){return t.x<=Math.max(e.x,n.x)&&t.x>=Math.min(e.x,n.x)&&t.y<=Math.max(e.y,n.y)&&t.y>=Math.min(e.y,n.y)}function t_o(e,t){let n=Math.min(e.x,t.x),o=Math.max(e.x,t.x),i=Math.min(e.y,t.y),r=Math.max(e.y,t.y),s=e;do{let a=s.next;if(s.x>o&&a.x>o||s.x<n&&a.x<n||s.y>r&&a.y>r||s.y<i&&a.y<i){s=a;continue}if(s.i!==e.i&&a.i!==e.i&&s.i!==t.i&&a.i!==t.i&&bxt(s,a,e,t))return!0;s=a}while(s!==e);return!1}function tZ(e,t){return Hm(e.prev,e,e.next)<0?Hm(e,t,e.next)>=0&&Hm(e,e.prev,t)>=0:Hm(e,t,e.prev)<0||Hm(e,e.next,t)<0}function n_o(e,t){let n=e,o=!1,i=(e.x+t.x)/2,r=(e.y+t.y)/2;do{let s=n.next;if(n.y>r!==s.y>r&&i<(s.x-n.x)*(r-n.y)/(s.y-n.y)+n.x)o=!o;n=s}while(n!==e);return o}function Sxt(e,t){let n=Q8e(e.i,e.x,e.y),o=Q8e(t.i,t.x,t.y),i=e.next,r=t.prev;return e.next=t,t.prev=e,n.next=i,i.prev=n,o.next=n,n.prev=o,r.next=o,o.prev=r,o}function yxt(e,t,n,o){let i=Q8e(e,t,n);if(!o)i.prev=i,i.next=i;else i.next=o.next,i.prev=o,o.next.prev=i,o.next=i;return i}function nZ(e){if(e.next.prev=e.prev,e.prev.next=e.next,e.prevZ)e.prevZ.nextZ=e.nextZ;if(e.nextZ)e.nextZ.prevZ=e.prevZ;if(T8e)KAo(e.prev,e.next)}function Q8e(e,t,n){return{i:e,x:t,y:n,prev:null,next:null,z:0,prevZ:null,nextZ:null}}function o_o(e,t,n,o){let i=0;for(let r=t,s=n-o;r<n;r+=o)i+=(e[s]-e[r])*(e[r+1]+e[s+1]),s=r;return i}Gt();Gt();We();We();We();We();var Pxt={in:25.4,inch:25.4,mil:0.0254,mm:1,m:1000,cm:10,ft:304.8,feet:304.8},yr=(e)=>{let t=typeof e==="number"?"mm":e.replace(/^[^a-zA-Z]+/g,"").toLowerCase();if(!t)t="mm";let n=typeof e==="number"?e:Number.parseFloat(e.split(t)[0]);if(t in Pxt)return n*Pxt[t];throw Error(`Unsupported unit: ${t}`)};var cl=yr;Gt();We();Gt();We();Gt();Gt();We();Gt();We();Gt();We();Gt();We();Gt();We();Gt();We();Gt();We();Gt();We();Gt();We();We();Gt();Gt();We();Gt();We();Gt();Gt();Gt();We();We();Gt();We();Gt();We();Gt();We();Gt();We();We();Gt();We();Gt();We();Gt();We();Gt();We();Gt();We();We();Gt();Gt();We();We();Gt();Gt();We();Gt();We();Gt();We();Gt();We();Gt();We();Gt();We();Gt();We();Gt();We();Gt();We();Gt();We();We();Gt();We();Gt();We();Gt();We();Gt();We();Gt();We();Gt();We();Gt();We();Gt();We();Gt();We();Gt();We();Gt();We();Gt();We();Gt();We();We();Gt();We();Gt();We();Gt();We();Gt();We();Gt();We();Gt();We();Gt();We();Gt();We();We();We();Gt();We();We();Gt();We();Gt();We();Gt();We();Gt();We();Gt();We();Gt();We();Gt();Gt();We();Gt();We();We();Gt();We();Gt();We();Gt();We();We();Gt();We();We();Gt();Gt();We();Gt();We();Gt();We();Gt();We();We();Gt();We();Gt();We();We();We();Gt();We();We();Gt();We();Gt();We();Gt();We();var i_o=Object.defineProperty,r_o=(e,t)=>{for(var n in t)i_o(e,n,{get:t[n],enumerable:!0})},r6={};r_o(r6,{axial:()=>afo,bga:()=>tgo,breakoutheaders:()=>Sfo,cap:()=>b_o,crystal:()=>P_o,d2pak:()=>jxt,dfn:()=>Hgo,diode:()=>I_o,dip:()=>h_o,do219ad:()=>zgo,dpak:()=>Kxt,electrolytic:()=>S2o,fpc:()=>E2o,hc49:()=>Efo,headermodule:()=>Vgo,jst:()=>Hyo,lcc:()=>Cxo,led:()=>v_o,led2835:()=>M_o,led5050:()=>w_o,lga:()=>Ifo,lqfp:()=>xfo,m2host:()=>cxo,melf:()=>X1o,micromelf:()=>J1o,minimelf:()=>H1o,mlp:()=>Ago,mountedpcbmodule:()=>dxo,ms012:()=>jgo,ms013:()=>Jgo,msop:()=>jyo,pad:()=>Mfo,pinrow:()=>lCt,platedhole:()=>q2o,potentiometer:()=>C2o,pushbutton:()=>pfo,qfn:()=>hgo,qfp:()=>pgo,quad:()=>t8,radial:()=>dfo,res:()=>J_o,rj45:()=>hfo,sma:()=>tyo,smb:()=>lyo,smbf:()=>B2o,smc:()=>myo,smdpads:()=>O2o,smdpinheader:()=>K2o,smdpushbutton:()=>G2o,smdslideswitch:()=>W2o,smf:()=>ryo,smtpad:()=>F2o,sod110:()=>zyo,sod123:()=>ofo,sod123f:()=>h1o,sod123fl:()=>_1o,sod123w:()=>Vfo,sod128:()=>S1o,sod323:()=>Kfo,sod323f:()=>c1o,sod323fl:()=>t2o,sod323he:()=>$fo,sod323w:()=>Jyo,sod523:()=>Rfo,sod723:()=>x1o,sod80:()=>Ofo,sod882:()=>i1o,sod882d:()=>Y1o,sod923:()=>e1o,soic:()=>ogo,solderjumper:()=>h2o,son:()=>r2o,sop8:()=>Ffo,sot:()=>$2o,sot143:()=>txo,sot223:()=>gyo,sot23:()=>Tgo,sot23w:()=>vyo,sot25:()=>Qgo,sot323:()=>R2o,sot343:()=>ixo,sot363:()=>Sgo,sot457:()=>A2o,sot563:()=>Xgo,sot723:()=>Zgo,sot886:()=>Ego,sot89:()=>R1o,sot963:()=>f2o,ssop:()=>fgo,stampboard:()=>_fo,stampreceiver:()=>yfo,to220:()=>mCt,to220f:()=>L1o,to252:()=>__o,to263:()=>g_o,to92:()=>Dfo,to92l:()=>pxo,to92s:()=>Dyo,tqfp:()=>mgo,tssop:()=>Cgo,usba:()=>fxo,usbcmidmount:()=>_xo,usbmicro:()=>xxo,vson:()=>a2o,vssop:()=>Wyo,wson:()=>u2o});var Oo=(e,t,n)=>({type:"pcb_silkscreen_text",pcb_silkscreen_text_id:"silkscreen_text_1",font:"tscircuit2024",font_size:n,pcb_component_id:"pcb_component_1",text:"{REF}",layer:"top",anchor_position:{x:e,y:t},anchor_alignment:"center"}),pY=Z().or(Qt(_h())).transform((e)=>{if(Array.isArray(e))return e;if(e.startsWith("(")&&e.endsWith(")"))e=e.slice(1,-1);return e.split(",").map((t)=>{let n=Number(t);return isNaN(n)?t:n})}).pipe(Qt(Z().or(He()))),s_o=Zt(["leftside","rightside"]),a_o=Zt(["topside","bottomside"]),c_o=Zt(["left","right"]),l_o=Zt(["top","bottom"]),Wxt=pY.pipe(kn([t7([s_o,l_o]),t7([a_o,c_o])])),Do=at({norefdes:Ue().optional().describe("disable reference designator label"),invert:Ue().optional().describe("install the part backwards: for a pin header, the LONG pins pass through the board instead of the short ones. It does not change which side of the board the part is on — that is the component's `layer`"),faceup:Ue().optional().describe("DEPRECATED, and a no-op for through-hole parts. It meant 'the male pin header should face upwards, out of the top layer', which is what a correctly mounted header does by default; its other effect was to delete the pins below the board, leaving a through-hole part that cannot be soldered into its own plated holes. Use `layer` for which side of the board a part is on, and `invert` to install it backwards"),nosilkscreen:Ue().optional().describe("omit all silkscreen elements from the footprint"),rounded:fe.refine((e)=>e>=0,{message:"rounded radius must be non-negative"}).optional().describe("corner radius applied to all rectangular copper pads"),pin1location:Wxt.optional().describe("rotate the footprint to place pin 1 on a requested side"),cathodepin:Tv.number().pipe(kn([Be(1),Be(2)])).optional().describe("identify which diode pad is the cathode"),anodepin:Tv.number().pipe(kn([Be(1),Be(2)])).optional().describe("identify which diode pad is the anode")}),xr=(e,t,n,o,i)=>({pcb_plated_hole_id:"",type:"pcb_plated_hole",shape:"circle",x:t,y:n,hole_diameter:yr(o),outer_diameter:yr(i),pcb_port_id:"",layers:["top","bottom"],port_hints:[e.toString()]}),e1=(e)=>{let{pn:t,x:n,y:o,holeDiameter:i,rectPadWidth:r,rectPadHeight:s,holeOffsetX:a=0,holeOffsetY:c=0,rectBorderRadius:l}=e;return{pcb_plated_hole_id:"",type:"pcb_plated_hole",shape:"circular_hole_with_rect_pad",x:n,y:o,hole_diameter:yr(i),hole_shape:"circle",pad_shape:"rect",rect_pad_width:yr(r),rect_pad_height:yr(s),...l!==void 0&&{rect_border_radius:l},pcb_port_id:"",layers:["top","bottom"],port_hints:[t.toString()],hole_offset_x:a,hole_offset_y:c}},Xme=Array.from({length:9},(e,t)=>Math.cos(t/8*Math.PI-Math.PI)).map((e)=>({x:e,y:-Math.sqrt(1-e**2)})),t1=(e)=>{if(e.length<2)throw Error("Rect union outline requires at least two bounds");for(let l of e)if(l.minX>=l.maxX||l.minY>=l.maxY)throw Error("Each rectangle bound must have min < max on both axes");for(let l=1;l<e.length;l++){let d=e[l-1],u=e[l];if(u.minX<d.minX||u.maxX>d.maxX||u.minY>d.minY||u.maxY<d.maxY)throw Error("Bounds must be ordered outer-to-inner with tighter X and larger Y span")}let t=()=>{let l=[],d=e.length-1;l.push({x:e[d].minX,y:e[d].maxY});while(d>0){let u=e[d],h=e[d-1];l.push({x:u.minX,y:h.maxY}),l.push({x:h.minX,y:h.maxY}),d-=1}return l},n=()=>{let l=[],d=e.length-1;l.push({x:e[d].maxX,y:e[d].maxY});while(d>0){let u=e[d],h=e[d-1];l.push({x:u.maxX,y:h.maxY}),l.push({x:h.maxX,y:h.maxY}),d-=1}return l},o=()=>{let l=[],d=e.length-1;l.push({x:e[d].maxX,y:e[d].minY});while(d>0){let u=e[d],h=e[d-1];l.push({x:u.maxX,y:h.minY}),l.push({x:h.maxX,y:h.minY}),d-=1}return l},i=()=>{let l=[],d=e.length-1;l.push({x:e[d].minX,y:e[d].minY});while(d>0){let u=e[d],h=e[d-1];l.push({x:u.minX,y:h.minY}),l.push({x:h.minX,y:h.minY}),d-=1}return l},r=t(),s=n(),a=o(),c=i();return[...r.reverse(),...s,...a.reverse(),...c]};function Z7(e){if(typeof e==="string"){if(e.trim().toLowerCase().endsWith("mil"))return parseFloat(e)*0.0254;return parseFloat(e)}return Number(e)}var kme=kn([Z(),He()]).transform((e)=>Z7(e)),d_o=(e)=>Do.extend({fn:Z(),num_pins:He().optional().default(6),wide:Ue().optional(),narrow:Ue().optional(),w:kme.optional(),p:kme.default(e.p??"2.54mm"),id:kme.optional(),od:kme.optional(),nosquareplating:Ue().optional().default(!1).describe("do not use rectangular pad for pin 1")}).transform((t)=>{if(!t.id&&!t.od)if(Math.abs(t.p-1.27)<0.01)t.id=Z7("0.55mm"),t.od=Z7("0.95mm");else t.id=Z7("0.8mm"),t.od=Z7("1.6mm");else if(!t.id)t.id=t.od*0.6666666666666666;else if(!t.od)t.od=t.id*1.5;if(!t.w)if(t.wide)t.w=Z7("600mil");else if(t.narrow)t.w=Z7("300mil");else t.w=Z7(e.w??"300mil");return t}),u_o=d_o({}),vxt=(e,t,n,o,i)=>{let r=e/2,s=t<=r,a=r-1,c=o,l=c*a;if(s)return{x:-n/2,y:l/2-(t-1)*c};return{x:n/2,y:-l/2+(t-r-1)*c}},h_o=(e)=>{let t=u_o.parse(e),n=[];for(let _=0;_<t.num_pins;_++){let{x:f,y}=vxt(t.num_pins,_+1,t.w,t.p??2.54,t.nosquareplating);if(_===0&&!t.nosquareplating){n.push(e1({pn:_+1,x:f,y,holeDiameter:t.id??"0.8mm",rectPadWidth:t.od??"1mm",rectPadHeight:t.od??"1mm"}));continue}n.push(xr(_+1,f,y,t.id??"0.8mm",t.od??"1mm"))}let o=(t.num_pins/2-1)*t.p+t.od,r=t.w-t.od-1,s=(t.num_pins/2-1)*t.p+t.od+0.4,a={layer:"top",pcb_component_id:"",pcb_silkscreen_path_id:"silkscreen_path_1",route:[{x:-r/2,y:-s/2},{x:-r/2,y:s/2},...Xme.map(({x:_,y:f})=>({x:_*r/6,y:f*r/6+s/2})),{x:r/2,y:s/2},{x:r/2,y:-s/2},{x:-r/2,y:-s/2}],type:"pcb_silkscreen_path",stroke_width:0.1},c=[];for(let _=0;_<t.num_pins;_++){let f=_+1,y=f<=t.num_pins/2,x=vxt(t.num_pins,f,t.w,t.p??2.54,t.nosquareplating),C=0.6,I=y?x.x-t.od/2-0.6:x.x+t.od/2+0.6,b=0.3;c.push({type:"pcb_fabrication_note_text",pcb_fabrication_note_text_id:`pin_${f}`,layer:"top",pcb_component_id:`pin_${f}`,text:`{pin${f}}`,anchor_position:{x:I,y:x.y+0.15},font_size:0.3,font:"tscircuit2024",anchor_alignment:y?"top_right":"top_left"})}let l=Oo(0,s/2+0.5,0.4),d=t.w+t.od,u=o,h=d/2+0.25,A=h,m=u/2+0.72,p=m,g={type:"pcb_courtyard_outline",pcb_courtyard_outline_id:"",pcb_component_id:"",outline:t1([{minX:-h,maxX:h,minY:-p,maxY:p},{minX:-A,maxX:A,minY:-m,maxY:m}]),layer:"top"};return{circuitJson:[...n,a,l,...c,g],parameters:t}},no=(e,t,n,o,i,r)=>({type:"pcb_smtpad",x:t,y:n,width:o,height:i,layer:"top",shape:"rect",...r!==void 0&&{corner_radius:r},pcb_smtpad_id:"",port_hints:Array.isArray(e)?e.map((s)=>s.toString()):[e.toString()]}),ns=(e,t={})=>({type:"pcb_silkscreen_path",layer:t.layer||"top",pcb_component_id:t.pcb_component_id||"",pcb_silkscreen_path_id:t.pcb_silkscreen_path_id||"",route:e,stroke_width:t.stroke_width||0.1}),m_o=Do.extend({fn:Z(),num_pins:kn([Be(3),Be(6)]).default(3),p:fe.default("2.29mm").describe("pitch between adjacent lead positions"),pw:fe.default("1.6mm").describe("lead pad width along the pin column"),pl:fe.default("3mm").describe("lead pad length toward the package"),tabw:fe.default("6.2mm").describe("large tab pad width"),tabh:fe.default("5.8mm").describe("large tab pad height"),span:fe.default("6.85mm").describe("center-to-center distance from the leads to the tab"),w:fe.default("6.6mm").describe("package body width"),h:fe.default("6.5mm").describe("package body height"),string:Z().optional()}),p_o={p:"2.54mm",pw:"1.5mm",pl:"3.5mm",tabw:"8.38mm",tabh:"10.7mm",span:"10.21mm",w:"10.1mm",h:"10.1mm"},A_o=(e)=>{if(e.num_pins===3||e.num_pins===6)return e.num_pins;let t=e.string?.match(/^(?:d2pak|to252|to263)_(\d+)/i),n=Number.parseInt(t?.[1]??"3",10);if(n===5||n===6)return 6;return 3},Xxt=(e,t)=>{let n=m_o.parse({...t,...e,num_pins:A_o(e)}),{num_pins:o,p:i,pw:r,pl:s,tabw:a,tabh:c,span:l,w:d,h:u}=n,h=o===3?2:5,A=-l/2,m=l/2,p=[];for(let T=0;T<h;T++){let Q=o===3?T*2+1:T+1,N=o===3?(1-T*2)*i:((h-1)/2-T)*i;p.push(no(Q,A,N,s,r))}p.push(no(o===3?2:6,m,0,a,c));let g=-d/2,_=d/2,f=Math.min(A-s/2,m-a/2),y=Math.max(A+s/2,m+a/2),x=(o===3?i:(h-1)/2*i)+r/2,C=Math.max(x,c/2),I=Math.max(C,u/2)+0.2,b=[ns([{x:g,y:I},{x:_,y:I}]),ns([{x:g,y:-I},{x:_,y:-I}]),ns([{x:A-0.3,y:I+0.15},{x:A,y:I+0.45},{x:A+0.3,y:I+0.15}])],P=Math.min(f,g)-0.25,E=Math.max(y,_)+0.25,B=Math.max(C,u/2)+0.25,w={type:"pcb_courtyard_rect",pcb_courtyard_rect_id:"",pcb_component_id:"",center:{x:(P+E)/2,y:0},width:E-P,height:B*2,layer:"top"};return{circuitJson:[...p,...b,Oo(0,B+0.55,0.5),w],parameters:n}},Kxt=(e)=>Xxt(e),jxt=(e)=>Xxt(e,p_o),__o=Kxt,g_o=jxt,qxt=[{imperial:"01005",metric:"0402",p_mm_min:0.5,pw_mm_min:0.4,ph_mm_min:0.3,w_mm_min:0.58,h_mm_min:0.21,courtyard_width_mm:1.2,courtyard_height_mm:0.6},{imperial:"0504",metric:"1310",p_mm_min:1.1,pw_mm_min:0.65,ph_mm_min:1.3,w_mm_min:0.58,h_mm_min:0.21},{imperial:"1812",metric:"4532",p_mm_min:4.275,pw_mm_min:1.125,ph_mm_min:3.4,w_mm_min:5.4,h_mm_min:3.4,courtyard_width_mm:5.9,courtyard_height_mm:3.9,rounded_pads:!0,nonpolarizedSilkscreen:{line_half_length_mm:1.386252,line_y_mm:1.71,stroke_width_mm:0.12}},{imperial:"0201",metric:"0603",p_mm_min:0.66,pw_mm_min:0.46,ph_mm_min:0.4,w_mm_min:0.9,h_mm_min:0.3,courtyard_width_mm:1.4,courtyard_height_mm:0.7,rounded_pads:!0},{imperial:"0402",metric:"1005",p_mm_min:1.02,pw_mm_min:0.54,ph_mm_min:0.64,w_mm_min:1.56,h_mm_min:0.64,courtyard_width_mm:1.86,courtyard_height_mm:0.94,rounded_pads:!0,nonpolarizedSilkscreen:{line_half_length_mm:0.153641,line_y_mm:0.38,stroke_width_mm:0.12}},{imperial:"0603",metric:"1608",p_mm_min:1.65,pw_mm_min:0.8,ph_mm_min:0.95,w_mm_min:2.45,h_mm_min:0.95,courtyard_width_mm:2.96,courtyard_height_mm:1.46,rounded_pads:!0,nonpolarizedSilkscreen:{line_half_length_mm:0.237258,line_y_mm:0.5225,stroke_width_mm:0.12}},{imperial:"0805",metric:"2012",p_mm_min:1.825,pw_mm_min:1.025,ph_mm_min:1.4,w_mm_min:2.8499999999999996,h_mm_min:1.4,courtyard_width_mm:3.36,courtyard_height_mm:1.9,rounded_pads:!0,nonpolarizedSilkscreen:{line_half_length_mm:0.227064,line_y_mm:0.735,stroke_width_mm:0.12}},{imperial:"1206",metric:"3216",p_mm_min:2.925,pw_mm_min:1.125,ph_mm_min:1.75,w_mm_min:4.05,h_mm_min:1.75,courtyard_width_mm:4.56,courtyard_height_mm:2.26,rounded_pads:!0,nonpolarizedSilkscreen:{line_half_length_mm:0.727064,line_y_mm:0.91,stroke_width_mm:0.12}},{imperial:"1210",metric:"3225",p_mm_min:2.925,pw_mm_min:1.125,ph_mm_min:2.65,w_mm_min:4.05,h_mm_min:2.65,courtyard_width_mm:4.56,courtyard_height_mm:3.16,rounded_pads:!0,nonpolarizedSilkscreen:{line_half_length_mm:0.723737,line_y_mm:1.355,stroke_width_mm:0.12}},{imperial:"2010",metric:"5025",p_mm_min:4.625,pw_mm_min:1.225,ph_mm_min:2.65,w_mm_min:5.85,h_mm_min:2.65,courtyard_width_mm:6.36,courtyard_height_mm:3.16,rounded_pads:!0,nonpolarizedSilkscreen:{line_half_length_mm:1.527064,line_y_mm:1.36,stroke_width_mm:0.12}},{imperial:"2512",metric:"6332",p_mm_min:5.925,pw_mm_min:1.225,ph_mm_min:3.35,w_mm_min:7.15,h_mm_min:3.35,courtyard_width_mm:7.66,courtyard_height_mm:3.86,rounded_pads:!0,nonpolarizedSilkscreen:{line_half_length_mm:2.177064,line_y_mm:1.71,stroke_width_mm:0.12}}],f_o=Object.fromEntries(qxt.map((e)=>[e.metric,e])),y_o=Object.fromEntries(qxt.map((e)=>[e.imperial,e])),Ext=(e,t)=>({type:"pcb_courtyard_rect",pcb_courtyard_rect_id:"",pcb_component_id:"",center:{x:0,y:0},width:e,height:t,layer:"top"}),ZNr=Do.extend({fn:Z().optional(),string:Z().optional(),tht:Ue(),p:fe.optional(),pw:fe.optional(),ph:fe.optional(),metric:ze.optional(),imperial:ze.optional(),w:fe.optional(),h:fe.optional(),cyw:fe.optional().describe("courtyard width"),cyh:fe.optional().describe("courtyard height"),nonpolarized:Ue().optional(),textbottom:Ue().optional(),roundedPads:Ue().optional()}),Kme=(e)=>{let{fn:t,tht:n,p:o,pw:i,ph:r,metric:s,imperial:a,w:c,h:l,cyw:d,cyh:u,nonpolarized:h,textbottom:A,roundedPads:m,string:p}=e;if(typeof c==="string")c=cl(c);if(typeof l==="string")l=cl(l);if(typeof d==="string")d=cl(d);if(typeof u==="string")u=cl(u);if(typeof o==="string")o=cl(o);if(typeof i==="string")i=cl(i);if(typeof r==="string")r=cl(r);if(l!==void 0&&c!==void 0&&l>c)throw Error("height cannot be greater than width (rotated footprint not yet implemented)");let g;if(s)g=f_o[s];if(a)g=y_o[a];if(g)c=g.w_mm_min,l=g.h_mm_min,o=g.p_mm_min,i=g.pw_mm_min,r=g.ph_mm_min;if(o===void 0||i===void 0||r===void 0)throw Error("Could not determine required pad dimensions (p, pw, ph)");let _=[],f=t==="res"&&(h===!0||typeof p!=="string"||/^res(?:\d{4}|\d{5})(?:_|$)/i.test(p))?g?.nonpolarizedSilkscreen:void 0;if(f?.stroke_width_mm){let{line_half_length_mm:P=0,line_y_mm:E=0,stroke_width_mm:B}=f;_=[{type:"pcb_silkscreen_path",layer:"top",pcb_component_id:"",route:[{x:-P,y:E},{x:P,y:E}],stroke_width:B,pcb_silkscreen_path_id:""},{type:"pcb_silkscreen_path",layer:"top",pcb_component_id:"",route:[{x:-P,y:-E},{x:P,y:-E}],stroke_width:B,pcb_silkscreen_path_id:""}]}else _=[{type:"pcb_silkscreen_path",layer:"top",pcb_component_id:"",route:[{x:o/2,y:r/2+0.4},{x:-o/2-i/2-0.2,y:r/2+0.4},{x:-o/2-i/2-0.2,y:-r/2-0.4},{x:o/2,y:-r/2-0.4}],stroke_width:0.1,pcb_silkscreen_path_id:""}];let y=A?-r/2-0.9:r/2+0.9,x=Oo(0,y,0.2),C=g?.courtyard_width_mm&&g.courtyard_height_mm?Ext(g.courtyard_width_mm,g.courtyard_height_mm):d!==void 0&&u!==void 0?Ext(d,u):null,b=m??g?.rounded_pads??!1?Math.min(0.125,Math.min(i,r)/8):void 0;if(n)return[xr(1,-o/2,0,i,i*1/0.8),xr(2,o/2,0,i,i*1/0.8),..._,x,...C?[C]:[]];return[no(["1","left"],-o/2,0,i,r,b),no(["2","right"],o/2,0,i,r,b),..._,x,...C?[C]:[]]},x_o=(e)=>{let{POSITIVE_INFINITY:t,NEGATIVE_INFINITY:n,POSITIVE_INFINITY:o,NEGATIVE_INFINITY:i}=Number;for(let r of e){if(r.type==="pcb_smtpad")t=Math.min(t,r.x-r.width/2),n=Math.max(n,r.x+r.width/2),o=Math.min(o,r.y-r.height/2),i=Math.max(i,r.y+r.height/2);if(r.type==="pcb_plated_hole")t=Math.min(t,r.x-r.outer_diameter/2),n=Math.max(n,r.x+r.outer_diameter/2),o=Math.min(o,r.y-r.outer_diameter/2),i=Math.max(i,r.y+r.outer_diameter/2)}if(!Number.isFinite(t)||!Number.isFinite(n)||!Number.isFinite(o)||!Number.isFinite(i))throw Error("Could not determine diode copper bounds");return{minX:t,maxX:n,minY:o,maxY:i}},Y8e=(e,t={})=>jme(x_o(e),t),C_o=({anodePin:e,cathodePin:t})=>{if(e!==void 0&&e!==1&&e!==2)throw Error("Diode anode pin must be 1 or 2");if(t!==void 0&&t!==1&&t!==2)throw Error("Diode cathode pin must be 1 or 2");if(e!==void 0&&t!==void 0){if(e===t)throw Error("Diode anode and cathode cannot use the same pin");return t}if(t!==void 0)return t;if(e===1)return 2;if(e===2)return 1;return},yh=(e)=>{let t=e.p??e.pad_spacing;if(t===void 0||e.pl===void 0||e.pw===void 0)throw Error("Diode fabrication note requires p or pad_spacing, pl, and pw");let n=fe.parse(t),o=fe.parse(e.pl),i=fe.parse(e.pw);return jme({minX:-n/2-o/2,maxX:n/2+o/2,minY:-i/2,maxY:i/2},{anodePin:e.anodepin,cathodePin:e.cathodepin})},jme=(e,t={})=>{let n=[],o=e.maxX-e.minX,i=e.maxY-e.minY,r=(e.minX+e.maxX)/2,s=(e.minY+e.maxY)/2,c=C_o(t)===1?(I)=>2*r-I:(I)=>I,l=i*0.28,d=l*2,u=o*0.2,h=1.25,A=Math.min(u,d*1.25),m=r-A/2,p=r+A/2,g=A*0.18,_=m+g,f=p-g,y=Math.max(Math.min(o,i)*0.035,0.01),x=Math.max(Math.min(o,i)*0.25,0.1),C=(I)=>t.idSuffix?`${I}_${t.idSuffix}`:I;return n.push({type:"pcb_fabrication_note_path",pcb_fabrication_note_path_id:C("diode_fabrication_note_anode_leg"),pcb_component_id:"",layer:"top",stroke_width:y,route:[{x:c(m),y:s},{x:c(_),y:s}]},{type:"pcb_fabrication_note_path",pcb_fabrication_note_path_id:C("diode_fabrication_note_triangle"),pcb_component_id:"",layer:"top",stroke_width:y,route:[{x:c(_),y:s+l},{x:c(f),y:s},{x:c(_),y:s-l},{x:c(_),y:s+l}]},{type:"pcb_fabrication_note_path",pcb_fabrication_note_path_id:C("diode_fabrication_note_cathode"),pcb_component_id:"",layer:"top",stroke_width:y,route:[{x:c(f),y:s+l},{x:c(f),y:s-l}]},{type:"pcb_fabrication_note_path",pcb_fabrication_note_path_id:C("diode_fabrication_note_cathode_leg"),pcb_component_id:"",layer:"top",stroke_width:y,route:[{x:c(f),y:s},{x:c(p),y:s}]},{type:"pcb_fabrication_note_text",pcb_fabrication_note_text_id:C("diode_fabrication_note_positive"),pcb_component_id:"",layer:"top",font:"tscircuit2024",font_size:x,text:"+",anchor_position:{x:c(e.minX+o*0.125),y:s},anchor_alignment:"center"},{type:"pcb_fabrication_note_text",pcb_fabrication_note_text_id:C("diode_fabrication_note_negative"),pcb_component_id:"",layer:"top",font:"tscircuit2024",font_size:x,text:"-",anchor_position:{x:c(e.maxX-o*0.125),y:s},anchor_alignment:"center"}),n},I_o=(e)=>{let t=Kme({...e,roundedPads:!0}),{anodepin:n,cathodepin:o}=Do.parse(e);return{circuitJson:t.concat(Y8e(t,{anodePin:n,cathodePin:o})),parameters:e}},b_o=(e)=>({circuitJson:Kme(e),parameters:e}),S_o=Do.extend({fn:Be("crystal"),num_pins:Be(4).default(4),px:fe.default("2.2mm").describe("horizontal pad center pitch"),py:fe.default("1.7mm").describe("vertical pad center pitch"),pw:fe.default("1.4mm").describe("pad width"),ph:fe.default("1.2mm").describe("pad height")}),P_o=(e)=>{let t=S_o.parse(e),{px:n,py:o,pw:i,ph:r}=t,s=[no(1,-n/2,-o/2,i,r),no(2,n/2,-o/2,i,r),no(3,n/2,o/2,i,r),no(4,-n/2,o/2,i,r)],a=(n+i)/2+0.2,c=(o+r)/2+0.2,l=ns([{x:-a,y:-c},{x:a,y:-c},{x:a,y:c},{x:-a,y:c},{x:-a,y:-c}]),d=Oo(0,c+0.6,0.5),u={type:"pcb_courtyard_rect",pcb_courtyard_rect_id:"",pcb_component_id:"",center:{x:0,y:0},width:n+i+0.5,height:o+r+0.5,layer:"top"};return{circuitJson:[...s,l,d,u],parameters:t}},v_o=(e)=>{let t=Kme(e),{anodepin:n,cathodepin:o}=Do.parse(e);return{circuitJson:t.concat(Y8e(t,{anodePin:n,cathodePin:o})).map((r)=>{if(r.type!=="pcb_silkscreen_path")return r;return{...r,route:r.route.map((s)=>({...s,x:-s.x}))}}),parameters:e}},E_o=Do.extend({fn:Be("led2835"),num_pins:Be(2).default(2),p1w:fe.default("2.2mm").describe("pin 1 (anode) pad width"),p2w:fe.default("1.25mm").describe("pin 2 (cathode) pad width"),ph:fe.default("2.2mm").describe("pad height"),p1x:fe.default("-0.9mm").describe("pin 1 pad center x"),p2x:fe.default("1.375mm").describe("pin 2 pad center x"),w:fe.default("3.5mm").describe("package body width"),h:fe.default("2.8mm").describe("package body height")}),M_o=(e)=>{let t=E_o.parse(e),{p1w:n,p2w:o,ph:i,p1x:r,p2x:s,w:a,h:c}=t,l=[no(1,r,0,n,i),no(2,s,0,o,i)],d=a/2+0.45,u=c/2+0.2,h=[ns([{x:s-o/2,y:-u},{x:-d,y:-u},{x:-d,y:u},{x:s-o/2,y:u}])],A=Oo(0,u+0.8,0.5),m={type:"pcb_courtyard_rect",pcb_courtyard_rect_id:"",pcb_component_id:"",center:{x:(r-n/2+s+o/2)/2,y:0},width:s+o/2-(r-n/2)+0.5,height:Math.max(c,i)+0.5,layer:"top"},p=jme({minX:Math.min(r-n/2,s-o/2),maxX:Math.max(r+n/2,s+o/2),minY:-i/2,maxY:i/2},{anodePin:t.anodepin,cathodePin:t.cathodepin});return{circuitJson:[...l,...h,A,m,...p],parameters:t}},B_o=Do.extend({fn:Be("led5050"),num_pins:Be(6).default(6),p:fe.default("1.7mm").describe("pin pitch along each column"),rowspan:fe.default("4.8mm").describe("distance between pad columns"),pl:fe.default("2mm").describe("pad length across the package edge"),pw:fe.default("1.1mm").describe("pad width along the pin column"),w:fe.default("5mm").describe("package body width"),h:fe.default("5mm").describe("package body height")}),w_o=(e)=>{let t=B_o.parse(e),{p:n,rowspan:o,pl:i,pw:r,w:s,h:a}=t,c=[];for(let g=0;g<3;g++)c.push(no(g+1,-o/2,n-g*n,i,r)),c.push(no(6-g,o/2,n-g*n,i,r));let l=s/2,d=a/2+0.2,u=[ns([{x:-l,y:d},{x:l,y:d}]),ns([{x:-l,y:-d},{x:l,y:-d}]),ns([{x:-o/2-i/2-0.4,y:n+r/2},{x:-o/2-i/2-0.4,y:n-r/2}])],h=Oo(0,d+0.8,0.5),A={type:"pcb_courtyard_rect",pcb_courtyard_rect_id:"",pcb_component_id:"",center:{x:0,y:0},width:o+i+0.5,height:Math.max(a,2*n+r)+0.5,layer:"top"},p=[{color:"green",y:n},{color:"red",y:0},{color:"blue",y:-n}].flatMap(({color:g,y:_})=>jme({minX:-o/2-i/2,maxX:o/2+i/2,minY:_-r/2,maxY:_+r/2},{idSuffix:g}));return{circuitJson:[...c,...u,h,A,...p],parameters:t}},AY=(e)=>{let{padSpacing:t,padWidth:n,padHeight:o,padPitch:i,numRows:r,textbottom:s,courtyardOutline:a}=e,c=[],l=(r-1)*(i/2);for(let B=0;B<r;B++)c.push(l-B*i);let d=[];c.forEach((B,w)=>{d.push(no(w+1,-t/2,B,n,o))}),c.slice().reverse().forEach((B,w)=>{d.push(no(w+r+1,t/2,B,n,o))});let u=Math.max(...c)+o/2+0.4,h=Math.min(...c)-o/2-0.4,A=-t/2-n/2-0.4,m=t/2+n/2+0.4,p={type:"pcb_silkscreen_path",layer:"top",pcb_component_id:"",route:[{x:m*0.5,y:u},{x:A*0.5,y:u}],stroke_width:0.12,pcb_silkscreen_path_id:"silkscreen_top"},g={type:"pcb_silkscreen_path",layer:"top",pcb_component_id:"",route:[{x:m*0.5,y:h},{x:A*0.5,y:h}],stroke_width:0.12,pcb_silkscreen_path_id:"silkscreen_bottom"},_=-t/2,f=Math.max(...c),y=0.2,x=_-n/2-0.1,C=f+o/2+0.1,I={type:"pcb_silkscreen_path",layer:"top",pcb_component_id:"",pcb_silkscreen_path_id:"pin1_marker",route:[{x,y:C},{x:x-y,y:C},{x,y:C+y},{x,y:C}],stroke_width:0.1},b=s?h-0.9:u+0.9,P=Oo(0,b,0.2),E=a?{type:"pcb_courtyard_outline",pcb_courtyard_outline_id:"",pcb_component_id:"",layer:"top",outline:a}:null;return[...d,p,g,I,P,...E?[E]:[]]},T_o=Do.extend({pw:fe.default("0.5mm"),ph:fe.default("0.4mm"),p:fe.default("0.7mm"),textbottom:Ue().optional(),convex:Ue().optional(),concave:Ue().optional()}),D_o=1,N_o=(e)=>{let t=T_o.parse(e);if(t.concave===!0)return[];let n=cl(t.pw),o=cl(t.ph),i=cl(t.p);return AY({padSpacing:D_o,padWidth:n,padHeight:o,padPitch:i,numRows:2,textbottom:t.textbottom,convex:t.convex,concave:t.concave,courtyardOutline:[{x:-1,y:0.95},{x:-1,y:-0.95},{x:1,y:-0.95},{x:1,y:0.95}]})},R_o=Do.extend({pw:fe.default("0.5mm"),ph:fe.default("0.32mm"),p:fe.default("0.5mm"),textbottom:Ue().optional(),convex:Ue().optional(),concave:Ue().optional()}),Q_o=1,k_o=(e)=>{let t=R_o.parse(e),n=cl(t.pw),o=cl(t.ph),i=cl(t.p);return AY({padSpacing:Q_o,padWidth:n,padHeight:o,padPitch:i,numRows:4,textbottom:t.textbottom,convex:t.convex,concave:t.concave,courtyardOutline:[{x:-1,y:1.25},{x:-1,y:-1.25},{x:1,y:-1.25},{x:1,y:1.25}]})},L_o=Do.extend({pw:fe.default("0.9mm"),ph:fe.default("0.4mm"),p:fe.default("0.8mm"),textbottom:Ue().optional(),convex:Ue().optional(),concave:Ue().optional()}),F_o=1.7,H_o=(e)=>{let t=L_o.parse(e),n=cl(t.pw),o=cl(t.ph),i=cl(t.p);return AY({padSpacing:F_o,padWidth:n,padHeight:o,padPitch:i,numRows:2,textbottom:t.textbottom,convex:t.convex,concave:t.concave,courtyardOutline:[{x:-1.55,y:1.05},{x:-1.55,y:-1.05},{x:1.55,y:-1.05},{x:1.55,y:1.05}]})},O_o=Do.extend({pw:fe.default("0.9mm"),ph:fe.default("0.4mm"),p:fe.default("0.8mm"),textbottom:Ue().optional(),convex:Ue().optional(),concave:Ue().optional()}),z_o=1.7,G_o=(e)=>{let t=O_o.parse(e),n=cl(t.pw),o=cl(t.ph),i=cl(t.p);return AY({padSpacing:z_o,padWidth:n,padHeight:o,padPitch:i,numRows:4,textbottom:t.textbottom,convex:t.convex,concave:t.concave,courtyardOutline:[{x:-1.55,y:1.88},{x:-1.55,y:-1.87},{x:1.55,y:-1.87},{x:1.55,y:1.88}]})},Y_o=Do.extend({pw:fe.default("0.7mm"),ph:fe.default("0.64mm"),p:fe.default("0.94mm"),textbottom:Ue().optional(),convex:Ue().optional(),concave:Ue().optional()}),V_o=1.4,U_o=(e)=>{let t=Y_o.parse(e),n=cl(t.pw),o=cl(t.ph),i=cl(t.p);return AY({padSpacing:V_o,padWidth:n,padHeight:o,padPitch:i,numRows:2,textbottom:t.textbottom,convex:t.convex,concave:t.concave,courtyardOutline:[{x:-1.3,y:1.05},{x:-1.3,y:-1.05},{x:1.3,y:-1.05},{x:1.3,y:1.05}]})},W_o=Do.extend({pw:fe.default("0.9mm"),ph:fe.default("0.9mm"),p:fe.default("1.34mm"),textbottom:Ue().optional(),convex:Ue().optional(),concave:Ue().optional()}),X_o=3,K_o=(e)=>{let t=W_o.parse(e),n=cl(t.pw),o=cl(t.ph),i=cl(t.p);return AY({padSpacing:X_o,padWidth:n,padHeight:o,padPitch:i,numRows:4,textbottom:t.textbottom,convex:t.convex,concave:t.concave,courtyardOutline:[{x:-2.21,y:2.85},{x:-2.21,y:-2.85},{x:2.2,y:-2.85},{x:2.2,y:2.85}]})},j_o=(e)=>{let t=e.array??e.x;if(typeof t==="number")return Number.isNaN(t)?void 0:t;if(typeof t==="string"){let n=Number.parseInt(t,10);return Number.isNaN(n)?void 0:n}if(typeof e.imperial==="string"){let o=e.imperial.match(/x(2|4)$/)?.[1];if(o)return Number.parseInt(o,10)}return},q_o=(e)=>{if(!e)return;return(typeof e==="number"?`${e}`:e).split(/[_x]/)[0]},J_o=(e)=>{let t=j_o(e),n=q_o(e.imperial);if(t===2&&n==="0402")return{circuitJson:N_o(e),parameters:e};if(t===4&&n==="0402")return{circuitJson:k_o(e),parameters:e};if(t===2&&n==="0603")return{circuitJson:H_o(e),parameters:e};if(t===4&&n==="0603")return{circuitJson:G_o(e),parameters:e};if(t===2&&n==="0606")return{circuitJson:U_o(e),parameters:e};if(t===4&&n==="1206")return{circuitJson:K_o(e),parameters:e};return{circuitJson:Kme(e),parameters:e}},Vme=(e,{x:t,y:n,radius:o})=>({type:"pcb_smtpad",x:t,y:n,radius:o,layer:"top",shape:"circle",pcb_smtpad_id:"",port_hints:Array.isArray(e)?e.map((i)=>i.toString()):[e.toString()]}),$_o="ABCDEFGHIJKLMNOPQRSTUVWXYZ",fy=Z().transform((e)=>{let[t,n]=e.split(/[x ]/);return{x:fe.parse(t??""),y:fe.parse(n??"")}}).pipe(at({x:He(),y:He()})),Jxt="ABCDEFGHJKLMNPRTUVWY",$xt=(e,t=Jxt)=>{let n=e+1,o="";while(n>0)n--,o=t[n%t.length]+o,n=Math.floor(n/t.length);return o},Z_o=Zt(["rowmajor","columnmajor","ballcoords"]),ego=Do.extend({fn:Z(),num_pins:He().optional().default(64),grid:fy.optional(),p:ze.default("0.8mm"),w:fe.optional(),h:fe.optional(),ball:fe.optional().describe("ball diameter"),pad:fe.optional().describe("pad width/height"),circularpads:Ue().optional().default(!0).describe("use circular pads"),tlorigin:Ue().optional(),blorigin:Ue().optional(),trorigin:Ue().optional(),brorigin:Ue().optional(),pinnumbering:Tq((e)=>typeof e==="string"?e.trim().replace(/^\(([^()]*)\)$/,"$1"):e,Z_o).optional().describe("rowmajor or columnmajor numeric IDs, or ball-coordinate IDs"),missing:pY.default([])}).transform((e,t)=>{let n="tl";if(e.blorigin)n="bl";if(e.trorigin)n="tr";if(e.brorigin)n="br";if(!e.grid){let r=Math.ceil(Math.sqrt(e.num_pins));e.grid={x:r,y:r}}let o=Array.from({length:e.grid.y},(r,s)=>$xt(s,e.pinnumbering?Jxt:$_o));if(e.missing)e.missing=e.missing.map((r)=>{if(typeof r==="number")return r;if(r==="center")return"center";if(r==="topleft")return"topleft";let s=r.match(/^([A-Z]+)(\d+)$/);if(!s)return r;let a=o.indexOf(s[1]),c=Number.parseInt(s[2])-1;if(a<0||c<0||c>=e.grid.x)t.addIssue({code:jt.custom,path:["missing"],message:`Missing ball ${r} is outside the BGA grid or row alphabet`});return a*e.grid.x+c+1});return{...e,origin:n,rowLabels:o}}),tgo=(e)=>{let t=ego.parse(e),{num_pins:n,grid:o,p:i,w:r,h:s,ball:a,pad:c,missing:l}=t;a??=0.5905511811023622*i,c??=t.ball===void 0?i*0.5:a*0.8;let d=[],u=(l??[]).filter((U)=>typeof U==="number"),h=o.x*o.y-n;if(l.length===0&&h>0){if(Math.sqrt(h)%1===0)l.push("center");else if(h===1)l.push("topleft")}if(l?.includes("center")){let U=Math.floor(Math.sqrt(h)),X=Math.floor((o.x-U)/2),V=Math.floor((o.y-U)/2);for(let W=V;W<V+U;W++)for(let j=X;j<X+U;j++)u.push(W*o.x+j+1)}if(l?.includes("topleft"))u.push(1);let A=new Set(u),m=Array.from({length:o.x*o.y},(U,X)=>X+1).filter((U)=>!A.has(U));if(t.pinnumbering==="columnmajor"){let U=(X)=>(X-1)%o.x*o.y+Math.floor((X-1)/o.x);m.sort((X,V)=>U(X)-U(V))}let p=new Map(m.map((U,X)=>[U,X+1]));for(let U=0;U<o.y;U++)for(let X=0;X<o.x;X++){let V=(X-(o.x-1)/2)*i,W=(U-(o.y-1)/2)*i,j=X,q=U;switch(t.origin){case"bl":j=X,q=o.y-1-U;break;case"br":j=o.x-1-X,q=o.y-1-U;break;case"tr":j=o.x-1-X,q=U;break;case"tl":default:break}let ne=p.get(q*o.x+j+1);if(ne===void 0)continue;let ce=`${t.rowLabels[q]}${j+1}`,oe=t.pinnumbering==="ballcoords"?[ce]:[ne,ce];d.push(t.circularpads?Vme(oe,{x:V,y:W,radius:c/2}):no(oe,V,W,c,c))}let g=Oo(0,o.y*i/2,0.2),_=i/6,f,y=o.x*i/2,x=o.y*i/2;switch(t.origin){case"bl":f=[{x:-y,y:-x},{x:-y,y:-x-_},{x:-y-_,y:-x},{x:-y,y:-x}];break;case"br":f=[{x:y,y:-x},{x:y,y:-x-_},{x:y+_,y:-x},{x:y,y:-x}];break;case"tr":f=[{x:y,y:x},{x:y,y:x+_},{x:y+_,y:x},{x:y,y:x}];break;case"tl":default:f=[{x:-y,y:x},{x:-y,y:x+_},{x:-y-_,y:x},{x:-y,y:x}];break}if(t.pinnumbering)f=f.map(({x:U,y:X})=>({x:U,y:-X}));let C={type:"pcb_silkscreen_path",layer:"top",pcb_component_id:"",pcb_silkscreen_path_id:"pin1_marker",route:f,stroke_width:0.05},I=(o.x-1)*i+c,b=(o.y-1)*i+c,P=r??I,E=s??b,B=Math.max(I/2,P/2),w=Math.max(b/2,E/2),T=1.715,Q=1.765,N=B+T,F=N,H=w+Q,z=H,Y={type:"pcb_courtyard_outline",pcb_courtyard_outline_id:"",pcb_component_id:"",outline:t1([{minX:-N,maxX:N,minY:-z,maxY:z},{minX:-F,maxX:F,minY:-H,maxY:H}]),layer:"top"};return{circuitJson:[...d,g,C,Y],parameters:t}},e8=(e,t,n,o,i)=>({type:"pcb_smtpad",x:t,y:n,width:o,height:i,radius:Math.min(o,i)/2,layer:"top",shape:"pill",pcb_smtpad_id:"",port_hints:Array.isArray(e)?e.map((r)=>r.toString()):[e.toString()]}),_Y={thermalpadcenteroffsetx:fe.optional().default(0),thermalpadcenteroffsety:fe.optional().default(0)},s6=(e,t)=>no(["thermalpad"],t.x,t.y,e.x,e.y),VQ=(e)=>Do.extend({fn:Z(),num_pins:He().optional().default(8),w:fe.default(fe.parse(e.w??"5.3mm")),p:fe.default(fe.parse(e.p??"1.27mm")),pw:fe.default(fe.parse(e.pw??"0.6mm")),pl:fe.default(fe.parse(e.pl??"1.0mm")),legsoutside:Ue().optional().default(e.legsoutside??!1),pillpads:Ue().optional().default(e.pillpads??!1),thermalpad:fy.optional(),..._Y,silkscreen_stroke_width:He().optional().default(0.1)}).transform((t)=>{if(!t.pw&&!t.pl)t.pw=fe.parse("0.6mm"),t.pl=fe.parse("1.0mm");else if(!t.pw)t.pw=t.pl*0.6;else if(!t.pl)t.pl=t.pw*1.6666666666666667;return t}),ngo=VQ({}),V8e=(e)=>{if(e.widthincludeslegs!==void 0)e.legsoutside=!e.widthincludeslegs;let{num_pins:t,pn:n,w:o,p:i,pl:r,legsoutside:s}=e,a=t/2,c=n<=a,l=a-1,d=i,u=d*l,h=s?r/2:-r/2;if(c)return{x:-o/2-h,y:u/2-(n-1)*d};return{x:o/2+h,y:-u/2+(n-a-1)*d}},ogo=(e)=>{let t=ngo.parse(e);return{circuitJson:oZ(t),parameters:t}},oZ=(e)=>{let t=[],n=Math.min(e.pl,e.pw)/8,o=0,i=0;for(let _=0;_<e.num_pins;_++){let{x:f,y}=V8e({num_pins:e.num_pins,pn:_+1,w:e.w,p:e.p,pl:e.pl,legsoutside:e.legsoutside});if(o=Math.max(o,Math.abs(f)+e.pl/2),i=Math.max(i,Math.abs(y)+e.pw/2),e.pillpads)t.push(e8(_+1,f,y,e.pl,e.pw));else t.push(no(_+1,f,y,e.pl,e.pw,n))}if(e.thermalpad)t.push(s6(e.thermalpad,{x:e.thermalpadcenteroffsetx,y:e.thermalpadcenteroffsety}));let r=Math.min(1,e.p/2),s=e.w-(e.legsoutside?0:e.pl*2)-0.2,a=(e.num_pins/2-1)*e.p+e.pw+r,c=Oo(0,a/2+0.4,a/12),l={type:"pcb_silkscreen_path",layer:"top",pcb_component_id:"",pcb_silkscreen_path_id:"silkscreen_path_1",stroke_width:e.silkscreen_stroke_width??0.1,route:[{x:-s/2,y:-a/2},{x:-s/2,y:a/2},...Xme.map(({x:_,y:f})=>({x:_*s/6,y:f*s/6+a/2})),{x:s/2,y:a/2},{x:s/2,y:-a/2},{x:-s/2,y:-a/2}]},d=e.w/2,u=a/2,h=Math.max(o,d)+0.25,A=Math.min(i,u)+0.25,m=Math.min(o,d)+0.25,p=Math.max(i,u)+0.25,g={type:"pcb_courtyard_outline",pcb_courtyard_outline_id:"",pcb_component_id:"",layer:"top",outline:t1([{minX:-h,maxX:h,minY:-A,maxY:A},{minX:-m,maxX:m,minY:-p,maxY:p}])};return[...t,l,c,g]},Zxt=({num_pins:e,sidePinCounts:t,cw:n,ccw:o,startingpin:i})=>{let r=[],s=t.left,a=s+1,c=t.left+t.bottom,l=c+1,d=t.left+t.bottom+t.right,u=d+1,h=1,A={};for(let m of i??[])A[m]=!0;if(!A.leftside&&!A.topside&&!A.rightside&&!A.bottomside)A.leftside=!0;if(!A.bottompin&&!A.leftpin&&!A.rightpin&&!A.toppin){if(A.leftside)A.toppin=!0;else if(A.topside)A.rightpin=!0;else if(A.rightside)A.bottompin=!0;else if(A.bottomside)A.leftpin=!0}if(A.leftside&&A.toppin)h=1;else if(A.leftside&&A.bottompin)h=s;else if(A.bottomside&&A.leftpin)h=a;else if(A.bottomside&&A.rightpin)h=c;else if(A.rightside&&A.bottompin)h=l;else if(A.rightside&&A.toppin)h=d;else if(A.topside&&A.rightpin)h=u;else if(A.topside&&A.leftpin)h=e;r.push(-1);for(let m=0;m<e;m++)if(r[h]=m+1,o||!n){if(h++,h>e)h=1}else if(h--,h<1)h=e;return r},Mxt=(e,t,n,o)=>{if(t!==void 0&&o!==void 0&&t!==o)throw Error(`Conflicting ${e} (${t}) and ${n} (${o})`);return o??t},eCt=(e)=>{let t=Mxt("lrpins",e.lrpins,"leftrightpins",e.leftrightpins),n=Mxt("tbpins",e.tbpins,"topbottompins",e.topbottompins),o=e.num_pins/4,i={left:e.leftpins??t??o,top:e.toppins??n??o,right:e.rightpins??t??o,bottom:e.bottompins??n??o};if([e.leftpins,e.toppins,e.rightpins,e.bottompins,e.lrpins,e.leftrightpins,e.tbpins,e.topbottompins].some((s)=>s!==void 0)){let s=Object.entries(i),a=s.find(([,l])=>!Number.isInteger(l)||l<1);if(a)throw Error(`Quad ${a[0]} pin count must be a positive integer, got ${a[1]}`);let c=s.reduce((l,[,d])=>l+d,0);if(c!==e.num_pins)throw Error(`Quad side pin counts left=${i.left}, top=${i.top}, right=${i.right}, bottom=${i.bottom} require ${c} pins, got ${e.num_pins}`)}return i},Ume=Zt(["leftside","topside","rightside","bottomside","toppin","bottompin","leftpin","rightpin"]),J7=Tv.number().int().positive().optional(),qme=Do.extend({fn:Z(),cc:Ue().default(!0).optional(),ccw:Ue().default(!0).optional(),startingpin:Z().or(Qt(Ume)).transform((e)=>typeof e==="string"?e.slice(1,-1).split(","):e).pipe(Qt(Ume)).optional(),num_pins:He().optional().default(64),leftpins:J7,toppins:J7,rightpins:J7,bottompins:J7,lrpins:J7,leftrightpins:J7,tbpins:J7,topbottompins:J7,w:fe.optional(),h:fe.optional(),p:fe.default(fe.parse("0.5mm")),px:fe.optional().describe("top and bottom side pad pitch"),py:fe.optional().describe("left and right side pad pitch"),pw:fe.optional(),pl:fe.optional(),lrpw:fe.optional().describe("alias for leftrightpadwidth"),lrpl:fe.optional().describe("alias for leftrightpadlength"),leftrightpadwidth:fe.optional().describe("left and right side pad width"),leftrightpadlength:fe.optional().describe("left and right side pad length"),thermalpad:kn([Be(!0),fy]).optional(),..._Y,pillpads:Ue().optional().default(!1),legsoutside:Ue().default(!1)}),Jme=(e)=>{if(e.lrpw!==void 0&&e.leftrightpadwidth!==void 0&&e.lrpw!==e.leftrightpadwidth)throw Error(`Conflicting lrpw (${e.lrpw}) and leftrightpadwidth (${e.leftrightpadwidth})`);if(e.lrpl!==void 0&&e.leftrightpadlength!==void 0&&e.lrpl!==e.leftrightpadlength)throw Error(`Conflicting lrpl (${e.lrpl}) and leftrightpadlength (${e.leftrightpadlength})`);if(e.leftrightpadwidth=e.leftrightpadwidth??e.lrpw,e.leftrightpadlength=e.leftrightpadlength??e.lrpl,e.w&&!e.h)e.h=e.w;else if(!e.w&&e.h)e.w=e.h;let t=eCt(e),n=Math.max(t.top,t.bottom),o=Math.max(t.left,t.right),i=e.px??e.p,r=e.py??e.p;if(!e.p&&!e.pw&&!e.pl&&e.w){let s=n+4;e.p=e.w/s}if(!e.p&&e.w&&e.h&&e.pw&&e.pl){let s=(e.w-e.pl*2)/Math.max(n-1,1),a=(e.h-e.pl*2)/Math.max(o-1,1);e.p=(s+a)/2}if(!e.w&&!e.h&&e.p)e.w=i*(n+4),e.h=r*(o+4);if(e.p&&!e.pw&&!e.pl)e.pw=e.p/2,e.pl=e.p/2;else if(!e.pw)e.pw=e.pl*0.6;else if(!e.pl)e.pl=e.pw*1.6666666666666667;return e},tCt=qme.transform(Jme),igo=["left","bottom","right","top"],rgo=(e)=>{let{sidePinCounts:t,pn:n,w:o,h:i,p:r,px:s,py:a,pl:c,leftRightPadLength:l,legsoutside:d}=e,u=[t.left,t.bottom,t.right,t.top],h=0,A=n-1;while(h<u.length-1&&A>=u[h])A-=u[h],h+=1;let m=u[h],p=igo[h],g=p==="left"||p==="right"?a??r:s??r,_=p==="left"||p==="right"?l??c:c,f=g*(m-1),y=g*(m-1),x=d?_/2:-_/2;switch(p){case"left":return{x:-o/2-x+0.1,y:y/2-A*g,o:"vert"};case"bottom":return{x:-f/2+A*g,y:-i/2-x+0.1,o:"horz"};case"right":return{x:o/2+x-0.1,y:-y/2+A*g,o:"vert"};case"top":return{x:f/2-A*g,y:i/2+x-0.1,o:"horz"};default:throw Error("Invalid pin number")}},t8=(e)=>{let t=tCt.parse(e),n=t.leftrightpadwidth??t.lrpw??t.pw,o=t.leftrightpadlength??t.lrpl??t.pl,i=eCt(t),r=[],s=0,a=0,c=Zxt({...t,sidePinCounts:i}),l=Math.max(i.left,i.right),d=Math.max(i.top,i.bottom),u=i.left,h=u+1,A=i.left+i.bottom,m=A+1,p=i.left+i.bottom+i.right,g=p+1,_=t.num_pins;for(let N=0;N<t.num_pins;N++){let{x:F,y:H,o:z}=rgo({sidePinCounts:i,pin_count:t.num_pins,pn:N+1,w:t.w,h:t.h,p:t.p??0.5,px:t.px,py:t.py,pl:t.pl,leftRightPadLength:o,legsoutside:t.legsoutside}),Y=z==="vert",U=Y?n:t.pw,X=Y?o:t.pl;if(z==="vert")[U,X]=[X,U];let V=Math.min(U,X)/8,W=c[N+1];s=Math.max(s,Math.abs(F)+U/2),a=Math.max(a,Math.abs(H)+X/2),r.push(t.pillpads?e8(W,F,H,U,X):no(W,F,H,U,X,V))}if(t.thermalpad){let N={x:t.thermalpadcenteroffsetx,y:t.thermalpadcenteroffsety};if(typeof t.thermalpad==="boolean"){let F=(t.px??t.p)*(d-1)+t.pw,H=(t.py??t.p)*(l-1)+n;s=Math.max(s,Math.abs(N.x)+F/2),a=Math.max(a,Math.abs(N.y)+H/2),r.push(s6({x:F,y:H},N))}else s=Math.max(s,Math.abs(N.x)+t.thermalpad.x/2),a=Math.max(a,Math.abs(N.y)+t.thermalpad.y/2),r.push(s6(t.thermalpad,N))}let f=[];for(let[N,F,H]of[["top-left",-1,1],["bottom-left",-1,-1],["bottom-right",1,-1],["top-right",1,1]]){let z=t.w/2*F,Y=t.h/2*H,U="none",X=z,V=Y,W=t.pw*2;if(c[1]===1&&N==="top-left")U="in1";else if(c[_]===1&&N==="top-left")U="in2";else if(c[g]===1&&N==="top-right")U="in2";else if(c[p]===1&&N==="top-right")U="in1";else if(c[u]===1&&N==="bottom-left")U="in1";else if(c[h]===1&&N==="bottom-left")U="in2";else if(c[A]===1&&N==="bottom-right")U="in1";else if(c[m]===1&&N==="bottom-right")U="in2";let j=U==="in1"?1:-1;if(t.legsoutside){let q=U==="in1"?t.pl/2:t.pw/2,ne=U==="in1"?t.pw/2:t.pl/2;X+=q*F*j,V-=ne*H*j}if(U==="none"||t.legsoutside)f.push({layer:"top",pcb_component_id:"",pcb_silkscreen_path_id:`pcb_silkscreen_path_${N}`,route:[{x:z-W*F,y:Y},{x:z,y:Y},{x:z,y:Y-W*H}],type:"pcb_silkscreen_path",stroke_width:0.1});if((U==="in1"||U==="in2")&&!t.legsoutside)f.push({layer:"top",pcb_component_id:"",pcb_silkscreen_path_id:`pcb_silkscreen_path_${N}_1`,route:[{x:z-W*F,y:Y},{x:z-W*F/2,y:Y}],type:"pcb_silkscreen_path",stroke_width:0},{layer:"top",pcb_component_id:"",pcb_silkscreen_path_id:`pcb_silkscreen_path_${N}_2`,route:[{x:z,y:Y-W*H/2},{x:z,y:Y-W*H}],type:"pcb_silkscreen_path",stroke_width:0.1});if(U==="in1"||U==="in2")f.push({layer:"top",pcb_component_id:"",pcb_silkscreen_path_id:`pcb_silkscreen_path_${N}_3`,route:[{x:X-0.2*-F,y:V+0.2*j},{x:X,y:V},{x:X+0.2*j*-F,y:V+0.2},{x:X-0.2*-F,y:V+0.2*j}],type:"pcb_silkscreen_path",stroke_width:0.1})}let y=Oo(0,t.h/2+(t.legsoutside?t.pl*1.2:0.5),0.3),x=(N)=>Math.ceil(N/0.05)*0.05,C=(d-1)*(t.px??t.p)+t.pw,I=(l-1)*(t.py??t.p)+n,b=C/2+0.25,P=I/2+0.25,E=t.w/2+0.25,B=t.h/2+0.25,w=Math.max(E,x(s+0.25)),T=Math.max(B,x(a+0.25)),Q={type:"pcb_courtyard_outline",pcb_courtyard_outline_id:"",pcb_component_id:"",layer:"top",outline:t1([{minX:-w,maxX:w,minY:-P,maxY:P},{minX:-E,maxX:E,minY:-B,maxY:B},{minX:-b,maxX:b,minY:-T,maxY:T}])};return{circuitJson:[...r,...f,y,Q],parameters:t}},sgo=fy.refine(({x:e,y:t})=>Number.isInteger(e)&&Number.isInteger(t)&&e>0&&t>0,"thermal via grid dimensions must be positive integers"),k8e=fe.refine((e)=>e>0,{message:"thermal via dimensions must be positive"}),nCt=at({thermalvias:kn([Be(!0),sgo]).optional(),thermalviapitch:k8e.optional(),thermalviaid:k8e.optional().describe("thermal via inner (hole) diameter"),thermalviaod:k8e.optional().describe("thermal via outer diameter")}),Lme={grid:{x:4,y:4},pitch:fe.parse("1mm"),holeDiameter:fe.parse("0.3048mm"),outerDiameter:fe.parse("0.6096mm")},ago=(e,t)=>{if(!e.thermalvias)return[];let n=e.thermalvias===!0?Lme.grid:e.thermalvias,o=e.thermalviapitch??Lme.pitch,i=e.thermalviaid??Lme.holeDiameter,r=e.thermalviaod??Lme.outerDiameter;if(r<i)throw Error("thermalviaod must be greater than or equal to thermalviaid");let s=(n.x-1)*o+r,a=(n.y-1)*o+r;if(s>t.width||a>t.height)throw Error("thermal via grid must fit inside thermalpad");return Array.from({length:n.x*n.y},(c,l)=>{let d=l%n.x,u=Math.floor(l/n.x);return{pcb_via_id:"",type:"pcb_via",x:t.x+(d-(n.x-1)/2)*o,y:t.y+(u-(n.y-1)/2)*o,hole_diameter:i,outer_diameter:r,layers:["top","bottom"]}})},oCt=(e,t)=>{if(!t.thermalvias)return e;let n=e.find((o)=>o.type==="pcb_smtpad"&&o.port_hints.includes("thermalpad"));if(!n)throw Error("thermalvias requires a thermalpad");return[...e,...ago(t,n)]},Bxt=fe.refine((e)=>Number.isFinite(e)&&e>0,"QFN dimensions must be positive finite lengths"),L8e=at({x:He(),y:He()}),cgo=qme.extend(nCt.shape).extend({fn:Be("qfn"),rows:Tv.number().pipe(kn([Be(1),Be(2)])).default(1),grid:fy.or(L8e).refine(({x:e,y:t})=>Number.isInteger(e)&&Number.isInteger(t)&&e>0&&t>0,"QFN grid must contain positive integer side counts").optional().describe("outer row sites: top/bottom by left/right"),thermalpad:kn([Be(!0),fy,L8e]).optional(),thermalvias:kn([Be(!0),fy,L8e]).refine((e)=>e===!0||e===void 0||Number.isInteger(e.x)&&Number.isInteger(e.y)&&e.x>0&&e.y>0,"thermal via grid dimensions must be positive integers").optional(),rowgap:Bxt.optional().describe("center gap between outer and inner rows"),rowspan:Bxt.optional().describe("opposing outer-row center span, on both axes"),staggered:Ue().default(!1).describe("shift the inner rows left and down by half their pitch"),circularpads:Ue().default(!1).describe("circular lands with diameter pw"),pinnumbering:Tq((e)=>typeof e==="string"?e.replace(/^\(([^()]*)\)$/,"$1"):e,Be("ballcoords")).optional(),missing:pY.default([]).describe("omit nominal pin numbers or package-coordinate sites")}).transform((e)=>{let t=Math.min(e.px??e.p,e.py??e.p,e.rowgap??e.p)/2,n=e.pw??(e.rows===2?t:0.25),o=e.pl??(e.circularpads?n:e.rows===2?t:0.875);if(e.circularpads&&(e.pillpads||o!==n))throw Error("Circular QFN pads require equal pl/pw and no pillpads");if(e.circularpads){if(e.leftrightpadwidth!==void 0||e.leftrightpadlength!==void 0||e.lrpw!==void 0||e.lrpl!==void 0)throw Error("Circular QFN pads use one diameter and no left/right pad overrides");for(let c of[e.p,e.px,e.py,n,o,e.w,e.h])if(c!==void 0&&(!Number.isFinite(c)||c<=0))throw Error("QFN dimensions must be positive finite lengths")}if(e.rows===1){if(e.staggered||e.rowgap!==void 0||e.rowspan!==void 0)throw Error("QFN rowgap, rowspan, and staggered require rows2");let c=e.grid?{leftpins:e.grid.y,rightpins:e.grid.y,toppins:e.grid.x,bottompins:e.grid.x}:{};for(let l of["leftpins","rightpins","toppins","bottompins"])if(e[l]!==void 0&&c[l]!==void 0&&e[l]!==c[l])throw Error("QFN grid conflicts with explicit side counts");return Jme({...e,...c,pl:o,pw:n})}if(e.cc===!1||e.ccw===!1||e.startingpin||e.leftrightpadwidth!==void 0||e.leftrightpadlength!==void 0||e.lrpw!==void 0||e.lrpl!==void 0)throw Error("Two-row QFN uses counterclockwise grid numbering and uniform pad sizes");for(let c of["leftpins","rightpins","toppins","bottompins","lrpins","leftrightpins","tbpins","topbottompins"])if(e[c]!==void 0)throw Error("Two-row QFN uses grid instead of explicit side counts");let i=(e.num_pins+8)/8,r=e.grid??{x:i,y:i};if(!Number.isInteger(r.x)||!Number.isInteger(r.y)||r.x<3||r.y<3||4*(r.x+r.y)-8!==e.num_pins)throw Error("Two-row QFN grid requires 4*(x+y)-8 nominal sites");let s=e.w??e.h??(r.x+2)*(e.px??e.p),a=e.h??e.w??(r.y+2)*(e.py??e.p);for(let c of[e.p,e.px??e.p,e.py??e.p,n,o,s,a])if(!Number.isFinite(c)||c<=0)throw Error("QFN dimensions must be positive finite lengths");return{...e,grid:r,w:s,h:a,pl:o,pw:n,rowgap:e.rowgap??e.p}}),lgo=(e)=>{let t=e.grid,n=[],o=e.rowspan??e.w-e.pl-0.2,i=e.rowspan??e.h-e.pl-0.2;for(let r of[0,1]){let s=t.x-2*r,a=t.y-2*r,c=o/2-r*e.rowgap,l=i/2-r*e.rowgap;if(c<=0||l<=0)throw Error("QFN rowgap leaves no inner-row span");let d=e.px??e.p,u=e.py??e.p,h=r&&e.staggered?-d/2:0,A=r&&e.staggered?-u/2:0,m=(_)=>r?4+2*_-(e.staggered?1:0):_===t.x-1?2*t.x-1:2+2*_,p=(_)=>r?2+2*_+(e.staggered?1:0):_===0?1:2*_,g=(_,f,y,x,C)=>{n.push({x:_,y:f,label:`${$xt(y)}${x}`,vertical:C,number:n.length+1})};for(let _=0;_<a;_++)g(-c,((a-1)/2-_)*u+A,p(_),r+1,!0);for(let _=0;_<s;_++)g((_-(s-1)/2)*d+h,-l,2*t.y-1-r,m(_),!1);for(let _=a-1;_>=0;_--)g(c,((a-1)/2-_)*u+A,p(_),2*t.x-r,!0);for(let _=s-1;_>=0;_--)g((_-(s-1)/2)*d+h,l,r,m(_),!1)}return n},wxt=(e,t)=>{let n=new Set;for(let o of t.missing){let i=typeof o==="number"?e.find((r)=>r.number===o):e.find((r)=>r.label===o);if(!i)throw Error(`QFN missing site ${o} is outside the nominal package`);if(n.has(i.number))throw Error("QFN missing sites must not contain duplicates");n.add(i.number)}return e.filter((o)=>!n.has(o.number))},dgo=(e,t)=>{if(t.pinnumbering==="ballcoords")return[e.label];return[e.number]},ugo=(e,t)=>{let n=e.map((o)=>{if(o.shape!=="circle"&&o.shape!=="rect"&&o.shape!=="pill")throw Error("Unsupported QFN pad shape");return{pad:o,x:o.x,y:o.y,rx:o.shape==="circle"?o.radius:o.width/2,ry:o.shape==="circle"?o.radius:o.height/2}});for(let[o,i]of n.entries()){if(i.rx<=0||i.ry<=0||Math.abs(i.x)+i.rx>t.w/2+0.0000000001||Math.abs(i.y)+i.ry>t.h/2+0.0000000001)throw Error("QFN copper must fit inside the package body");for(let r of n.slice(o+1)){let s=Math.abs(i.x-r.x),a=Math.abs(i.y-r.y),c;if(i.pad.shape==="circle"&&r.pad.shape==="circle")c=Math.hypot(s,a)<=i.rx+r.rx+0.0000000001;else if(i.pad.shape==="circle"||r.pad.shape==="circle"){let l=i.pad.shape==="circle"?i:r,d=i.pad.shape==="circle"?r:i;c=Math.hypot(Math.max(s-d.rx,0),Math.max(a-d.ry,0))<=l.rx+0.0000000001}else c=s<=i.rx+r.rx+0.0000000001&&a<=i.ry+r.ry+0.0000000001;if(c)throw Error(`QFN copper for ${i.pad.port_hints?.[0]} and ${r.pad.port_hints?.[0]} overlaps`)}}},hgo=(e)=>{let t=cgo.parse({...e,legsoutside:!1}),n;if(t.rows===1){let o=typeof t.thermalpad==="object"?`${t.thermalpad.x}x${t.thermalpad.y}mm`:t.thermalpad,i=t8({...e,...t,thermalpad:o}),r=i.circuitJson.filter((l)=>l.type==="pcb_smtpad"&&(l.shape==="rect"||l.shape==="pill")&&!l.port_hints?.includes("thermalpad"));if(t.pinnumbering||t.missing.some((l)=>typeof l==="string"))throw Error("QFN package-coordinate numbering requires rows2");let s=r.map((l)=>({number:Number(l.port_hints?.[0]),label:l.port_hints[0],x:l.x,y:l.y,vertical:!1})),a=wxt(s,t),c=new Set(a.map((l)=>l.number));if(n=i.circuitJson.filter((l)=>l.type!=="pcb_smtpad"||l.port_hints?.includes("thermalpad")||c.has(Number(l.port_hints?.[0]))),t.circularpads)n=n.map((l)=>l.type==="pcb_smtpad"&&l.shape==="rect"&&!l.port_hints?.includes("thermalpad")?Vme(l.port_hints??[],{x:l.x,y:l.y,radius:t.pw/2}):l)}else{let i=wxt(lgo(t),t).map((a)=>{let c=dgo(a,t);if(t.circularpads)return Vme(c,{x:a.x,y:a.y,radius:t.pw/2});return(t.pillpads?e8:no)(c,a.x,a.y,a.vertical?t.pl:t.pw,a.vertical?t.pw:t.pl)});if(t.thermalpad){let a=t.thermalpad===!0?{x:(t.rowspan??t.w-t.pl-0.2)-2*t.rowgap-2*t.pl,y:(t.rowspan??t.h-t.pl-0.2)-2*t.rowgap-2*t.pl}:t.thermalpad,c=s6(a,{x:t.thermalpadcenteroffsetx,y:t.thermalpadcenteroffsety});if(t.pinnumbering==="ballcoords")c.port_hints=["EP","thermalpad"];i.push(c)}ugo(i,t);let r={leftpins:t.grid.y,rightpins:t.grid.y,toppins:t.grid.x,bottompins:t.grid.x},s=t8({fn:"qfn",num_pins:2*(t.grid.x+t.grid.y),...r,w:t.w,h:t.h,p:t.p,px:t.px,py:t.py,pw:t.pw,pl:t.pl}).circuitJson.filter((a)=>a.type!=="pcb_smtpad");n=[...i,...s]}return{circuitJson:oCt(n,t),parameters:t}},mgo=(e)=>{if(e.legsoutside=!0,!e.p)switch(e.num_pins){case 32:e.p=0.8;break;case 44:case 48:e.p=0.5;break;case 64:case 80:case 100:e.p=0.5;break;case 144:e.p=0.5;break}if(!e.pl)switch(e.num_pins){case 32:case 44:case 48:case 64:case 80:case 100:e.pl=1.475;break;case 144:e.pl=1.6;break}if(!e.pw)switch(e.num_pins){case 32:e.pw=0.55;break;case 44:case 48:case 64:case 80:case 100:e.pw=0.3;break;case 144:e.pw=0.25;break}return t8(e)},pgo=(e)=>{e.legsoutside=!0;let t=tCt.parse(e);if(!e.p)switch(e.num_pins){case 44:case 64:e.p=0.8;break;case 52:if(e.w===14)e.p=1;else e.p=0.65;break;case 208:e.p=0.5;break}if(!e.pl)switch(e.num_pins){case 44:case 52:case 64:e.pl=2.25;break;case 208:e.pl=1.65;break;default:e.pl=t.pl*4;break}if(!e.pw)switch(e.num_pins){case 44:case 64:e.pw=0.5;break;case 52:if(e.w===14)e.pw=0.45;else e.pw=0.55;break;case 208:e.pw=0.3;break;default:e.pw=t.pw;break}return t8(e)},ORr=qme.extend({}).transform(Jme),Ago=(e)=>{if(e.legsoutside=!1,e.thermalpad===void 0)e.thermalpad=!0;return t8(e)},_go=Do.extend({fn:Z(),bodywidth:fe.refine((e)=>Number.isFinite(e)&&e>0,{message:"bodywidth must be a positive finite length"}).optional().describe("physical body X size before footprint rotation, independent of copper"),bodyheight:fe.refine((e)=>Number.isFinite(e)&&e>0,{message:"bodyheight must be a positive finite length"}).optional().describe("physical body Y size before footprint rotation, independent of copper"),bodythickness:fe.refine((e)=>Number.isFinite(e)&&e>0,{message:"bodythickness must be a positive finite length"}).optional().describe("physical body Z size, excluding board standoff; metadata for 3D consumers"),num_pins:He().optional().default(8),w:fe.default(fe.parse("3.9mm")),p:fe.default(fe.parse("1.27mm")),pw:fe.optional(),pl:fe.optional(),legsoutside:Ue().optional().default(!1),thermalpad:fy.optional(),..._Y,silkscreen_stroke_width:He().optional().default(0.1)}).transform((e)=>{if(e.pw==null&&e.pl==null)e.pw=fe.parse("0.51mm"),e.pl=fe.parse("1.1mm");else if(e.pw==null)e.pw=e.pl*0.4636363636363636;else if(e.pl==null)e.pl=e.pw*2.1568627450980395;return e}),ggo=(e)=>{let{num_pins:t,pn:n,w:o,p:i}=e,r=t/2,s=n<=r,a=r-1,c=i,l=c*a,d=o+fe.parse("0.2mm"),u=(s?-1:1)*(d/2);if(s)return{x:u,y:l/2-(n-1)*c};return{x:u,y:-l/2+(n-r-1)*c}},fgo=(e)=>{let t=_go.parse(e),n=[],o=Math.min(t.pl,t.pw)/8;for(let _=0;_<t.num_pins;_++){let{x:f,y}=ggo({num_pins:t.num_pins,pn:_+1,w:t.w,p:t.p,pl:t.pl,legsoutside:t.legsoutside});n.push(no(_+1,f,y,t.pl,t.pw,o))}if(t.thermalpad)n.push(s6(t.thermalpad,{x:t.thermalpadcenteroffsetx,y:t.thermalpadcenteroffsety}));let i=Math.min(1,t.p/2),r=t.w-(t.legsoutside?0:t.pl)-0.2,s=(t.num_pins/2-1)*t.p+t.pw+i,a=Oo(0,s/2+0.4,s/12),c={type:"pcb_silkscreen_path",layer:"top",pcb_component_id:"",pcb_silkscreen_path_id:"silkscreen_path_1",stroke_width:t.silkscreen_stroke_width??0.1,route:[{x:-r/2,y:-s/2},{x:-r/2,y:s/2},...Xme.map(({x:_,y:f})=>({x:_*r/6,y:f*r/6+s/2})),{x:r/2,y:s/2},{x:r/2,y:-s/2},{x:-r/2,y:-s/2}]},l=(t.num_pins/2-1)*t.p+t.pw,d=t.legsoutside?t.w/2+t.pl:(t.w+0.2)/2+t.pl/2,u=l/2,h=d+0.25,A=h,m=u+0.445,p=m,g={type:"pcb_courtyard_outline",pcb_courtyard_outline_id:"",pcb_component_id:"",outline:t1([{minX:-h,maxX:h,minY:-p,maxY:p},{minX:-A,maxX:A,minY:-m,maxY:m}]),layer:"top"};if(t.bodywidth!==void 0||t.bodyheight!==void 0){let _=t.bodywidth===void 0?h:t.bodywidth/2+0.25,f=t.bodyheight===void 0?m:t.bodyheight/2+0.25;for(let y of n){if(y.type!=="pcb_smtpad"||y.shape!=="rect")continue;_=Math.max(_,Math.abs(y.x)+y.width/2+0.25),f=Math.max(f,Math.abs(y.y)+y.height/2+0.25)}g.outline=[{x:-_,y:-f},{x:_,y:-f},{x:_,y:f},{x:-_,y:f},{x:-_,y:-f}]}return{circuitJson:[...n,c,a,g],parameters:t}},ygo=Do.extend({fn:Z(),num_pins:He().optional().default(8),w:fe.default(fe.parse("3.0mm")),p:fe.default(fe.parse("0.5mm")),pw:fe.default(fe.parse("0.30mm")),pl:fe.default(fe.parse("1.45mm")),legsoutside:Ue().optional().default(!0),thermalpad:fy.optional(),..._Y,silkscreen_stroke_width:He().optional().default(0.1)}),xgo=(e)=>{let{num_pins:t,pn:n,w:o,p:i,pl:r,legsoutside:s}=e,a=t/2,c=n<=a,l=a-1,d=i*l,u=s?r/2:-r/2;if(c)return{x:-o/2-u,y:d/2-(n-1)*i};return{x:o/2+u,y:-d/2+(n-a-1)*i}},Cgo=(e)=>{let t={...e},n=t.p,o=typeof n==="string"||typeof n==="number"?fe.parse(n):void 0,i=o!=null&&o<=fe.parse("0.5mm"),r=ygo.parse(t),s=[],a=r.rounded??Math.min(r.pl,r.pw)/8,c=i?r.w-fe.parse("0.15mm"):r.w;for(let C=0;C<r.num_pins;C++){let{x:I,y:b}=xgo({num_pins:r.num_pins,pn:C+1,w:c,p:r.p,pl:r.pl,legsoutside:r.legsoutside});s.push(no(C+1,I,b,r.pl,r.pw,a))}if(r.thermalpad)s.push(s6(r.thermalpad,{x:r.thermalpadcenteroffsetx,y:r.thermalpadcenteroffsety}));let l=Math.min(1,r.p/2),d=r.w-(r.legsoutside?0:r.pl*2)-0.2,u=(r.num_pins/2-1)*r.p+r.pw+l,h=Oo(0,u/2+0.4,u/12),A={type:"pcb_silkscreen_path",layer:"top",pcb_component_id:"",pcb_silkscreen_path_id:"silkscreen_path_1",stroke_width:r.silkscreen_stroke_width??0.1,route:[{x:-d/2,y:-u/2},{x:-d/2,y:u/2},...Xme.map(({x:C,y:I})=>({x:C*d/6,y:I*d/6+u/2})),{x:d/2,y:u/2},{x:d/2,y:-u/2},{x:-d/2,y:-u/2}]},m=(r.num_pins/2-1)*r.p+r.pw,p=r.w/2+(r.legsoutside?r.pl:0),g=r.w/2+0.25,_=p+0.18,f=m/2+0.25,y=f+0.35,x={type:"pcb_courtyard_outline",pcb_courtyard_outline_id:"",pcb_component_id:"",layer:"top",outline:t1([{minX:-_,maxX:_,minY:-f,maxY:f},{minX:-g,maxX:g,minY:-y,maxY:y}])};return{circuitJson:[...s,A,h,x],parameters:r}},Igo=[{x:-1.45,y:0.93},{x:-0.73,y:0.93},{x:-0.73,y:1.1},{x:0.73,y:1.1},{x:0.73,y:0.93},{x:1.45,y:0.93},{x:1.45,y:-0.93},{x:0.73,y:-0.93},{x:0.73,y:-1.1},{x:-0.73,y:-1.1},{x:-0.73,y:-0.93},{x:-1.45,y:-0.93}],bgo=Do.extend({fn:Z(),num_pins:Be(6).default(6),w:Z().default("3.1mm"),h:Z().default("2.0mm"),p:Z().default("0.65mm"),pl:Z().default("1.03mm"),pw:Z().default("0.35mm"),string:Z().optional()}),Sgo=(e)=>{let t=bgo.parse({...e,fn:"sot363"}),n=fe.parse(t.w),o=fe.parse(t.h),i=fe.parse(t.p),r=fe.parse(t.pl),s=fe.parse(t.pw),a=Math.min(r,s)/8,c=[];for(let p=0;p<6;p++){let{x:g,y:_}=Txt(p+1,n,i,r);c.push(no(p+1,g,_,r,s,a))}let l={type:"pcb_silkscreen_path",layer:"top",pcb_component_id:"",route:[{x:-n/4,y:o/2+0.1},{x:n/4,y:o/2+0.1}],stroke_width:0.05,pcb_silkscreen_path_id:""},d={type:"pcb_silkscreen_path",layer:"top",pcb_component_id:"",route:[{x:-n/4,y:-o/2-0.1},{x:n/4,y:-o/2-0.1}],stroke_width:0.05,pcb_silkscreen_path_id:""},u=Txt(1,n,i,r),h={type:"pcb_silkscreen_path",layer:"top",pcb_component_id:"pin_marker_1",route:[{x:u.x-r/2-0.3,y:u.y},{x:u.x-r/2-0.45,y:u.y+0.15},{x:u.x-r/2-0.45,y:u.y-0.15},{x:u.x-r/2-0.3,y:u.y}],stroke_width:0.05,pcb_silkscreen_path_id:"pin_marker_1"},A=Oo(0,o/2+0.4,0.25),m={type:"pcb_courtyard_outline",pcb_courtyard_outline_id:"",pcb_component_id:"",outline:Igo,layer:"top"};return{circuitJson:[...c,l,d,A,h,m],parameters:t}},Txt=(e,t,n,o)=>{let i=t/2-o/2;if(e<=3)return{x:-0.84,y:n-(e-1)*n};return{x:0.84,y:-n+(e-4)*n}},Pgo=[{x:-0.75,y:1},{x:-0.75,y:-1},{x:0.75,y:-1},{x:0.75,y:1}],vgo=Do.extend({fn:Z(),num_pins:Be(6).default(6),w:Z().default("1.01mm"),h:Z().default("1.45mm"),p:Z().default("0.5mm"),pl:Z().default("0.33mm"),pw:Z().default("0.27mm"),string:Z().optional()}),Ego=(e)=>{let t=vgo.parse({...e,fn:"sot886"}),n=fe.parse(t.w),o=fe.parse(t.h),i=fe.parse(t.p),r=fe.parse(t.pl),s=fe.parse(t.pw),a=Math.min(r,s)/8,c=[];for(let p=0;p<6;p++){let{x:g,y:_}=Dxt(p+1,n,i,r);c.push(no(p+1,g,_,r,s,a))}let l={type:"pcb_silkscreen_path",layer:"top",pcb_component_id:"",route:[{x:-n/2,y:o/2},{x:n/2,y:o/2}],stroke_width:0.05,pcb_silkscreen_path_id:""},d={type:"pcb_silkscreen_path",layer:"top",pcb_component_id:"",route:[{x:-n/2,y:-o/2},{x:n/2,y:-o/2}],stroke_width:0.05,pcb_silkscreen_path_id:""},u=Dxt(1,n,i,r),h={type:"pcb_silkscreen_path",layer:"top",pcb_component_id:"pin_marker_1",route:[{x:u.x-r/2-0.3,y:u.y},{x:u.x-r/2-0.45,y:u.y+0.15},{x:u.x-r/2-0.45,y:u.y-0.15},{x:u.x-r/2-0.3,y:u.y}],stroke_width:0.05,pcb_silkscreen_path_id:"pin_marker_1"},A=Oo(0,o/2+0.4,0.25),m={type:"pcb_courtyard_outline",pcb_courtyard_outline_id:"",pcb_component_id:"",outline:Pgo,layer:"top"};return{circuitJson:[...c,l,d,A,h,m],parameters:t}},Dxt=(e,t,n,o)=>{let i=t/2-o/2;if(e<=3)return{x:-i,y:n-(e-1)*n};return{x:i,y:-n+(e-4)*n}},Mgo=[{x:-2.05,y:1.5},{x:-1.05,y:1.5},{x:-1.05,y:1.7},{x:1.05,y:1.7},{x:1.05,y:0.55},{x:2.05,y:0.55},{x:2.05,y:-0.55},{x:1.05,y:-0.55},{x:1.05,y:-1.7},{x:-1.05,y:-1.7},{x:-1.05,y:-1.5},{x:-2.05,y:-1.5},{x:-2.05,y:-0.39},{x:-1.05,y:-0.39},{x:-1.05,y:0.39},{x:-2.05,y:0.39}],Bgo=[{x:-2.05,y:1.5},{x:-1.05,y:1.5},{x:-1.05,y:1.7},{x:1.05,y:1.7},{x:1.05,y:1.5},{x:2.05,y:1.5},{x:2.05,y:0.39},{x:1.05,y:0.39},{x:1.05,y:-0.39},{x:2.05,y:-0.39},{x:2.05,y:-1.5},{x:1.05,y:-1.5},{x:1.05,y:-1.7},{x:-1.05,y:-1.7},{x:-1.05,y:-1.5},{x:-2.05,y:-1.5}],iCt=Do.extend({fn:Z(),num_pins:He().default(3),w:Z().default("2.275mm"),h:Z().default("2.74mm"),pl:Z().default("1.325mm"),pw:Z().default("0.6mm"),p:Z().default("0.95mm"),string:Z().optional()}),wgo=VQ({p:"0.95mm",w:"1.6mm",legsoutside:!0}),Tgo=(e)=>{let t=e.string?.match(/^sot23_(\d+)/),n=t?Number.parseInt(t[1],10):3;if(n===6||n===8){let i=wgo.parse({...e,num_pins:n});return{circuitJson:oZ(i),parameters:i}}let o=iCt.parse({...e,num_pins:n});if(o.num_pins===3)return{circuitJson:Ngo(o),parameters:o};if(o.num_pins===5)return{circuitJson:rCt(o),parameters:o};throw Error("Invalid number of pins")},Dgo=(e)=>{let{pn:t,w:n,h:o,pl:i,p:r}=e;if(t===1)return{x:-n/2,y:r};if(t===2)return{x:-n/2,y:-r};return{x:n/2,y:0}},Ngo=(e)=>{let t=[],n=Number.parseFloat(e.w),o=Number.parseFloat(e.h),i=Number.parseFloat(e.pl),r=Number.parseFloat(e.pw),s=Number.parseFloat(e.p),a=e.rounded??Math.min(i,r)/8;for(let d=0;d<e.num_pins;d++){let{x:u,y:h}=Dgo({num_pins:e.num_pins,pn:d+1,w:n,h:o,pl:i,p:s});t.push(no(d+1,u,h,i,r,a))}let c=Oo(0,Number.parseInt(e.h),0.3),l={type:"pcb_courtyard_outline",pcb_courtyard_outline_id:"",pcb_component_id:"",outline:Mgo,layer:"top"};return[...t,c,l]},Nxt=(e)=>{let{w:t,p:n,h:o,pn:i}=e;if(i===1)return{x:-t/2,y:n};if(i===2)return{x:-t/2,y:0};if(i===3)return{x:-t/2,y:-n};if(i===4)return{x:t/2,y:-n};if(i===5)return{x:t/2,y:n};throw Error("Invalid pin number")},rCt=(e)=>{let t=[],n=Number.parseFloat(e.w),o=Number.parseFloat(e.h),i=Number.parseFloat(e.p),r=Number.parseFloat(e.pl),s=Number.parseFloat(e.pw),a=e.rounded??Math.min(r,s)/8;for(let f=1;f<=e.num_pins;f++){let{x:y,y:x}=Nxt({w:n,h:o,p:i,pn:f});t.push(no(f,y,x,r,s,a))}let c=(e.num_pins+1)/2*i,l=o,d={layer:"top",pcb_component_id:"",pcb_silkscreen_path_id:"silkscreen_path_1",route:[{x:-c/3,y:l/2+i/1.3},{x:c/3,y:l/2+i/1.3}],type:"pcb_silkscreen_path",stroke_width:0.05},u={layer:"top",pcb_component_id:"",pcb_silkscreen_path_id:"silkscreen_path_2",route:[{x:-c/3,y:-l/2-i/1.3},{x:c/3,y:-l/2-i/1.3}],type:"pcb_silkscreen_path",stroke_width:0.05},h=Oo(0,l+0.3,0.3),A=Nxt({w:n,h:o,p:i,pn:1});A.x=A.x-s*1.5;let m=0.3,p=0.4,g={type:"pcb_silkscreen_path",layer:"top",pcb_component_id:"",pcb_silkscreen_path_id:"pin1_indicator",route:[{x:A.x+m/2,y:A.y},{x:A.x-m/2,y:A.y+p/2},{x:A.x-m/2,y:A.y-p/2},{x:A.x+m/2,y:A.y}],stroke_width:0.05},_={type:"pcb_courtyard_outline",pcb_courtyard_outline_id:"",pcb_component_id:"",outline:Bgo,layer:"top"};return[...t,h,d,u,g,_]},Rgo=iCt.extend({}),Qgo=(e)=>{let t=Rgo.parse({...e,num_pins:5});return{circuitJson:rCt(t),parameters:t}},kgo=[{name:"top-left",dx:-1,dy:1},{name:"top-right",dx:1,dy:1},{name:"bottom-left",dx:-1,dy:-1},{name:"bottom-right",dx:1,dy:-1}],U8e=(e,t)=>({type:"pcb_smtpad",points:t,layer:"top",shape:"polygon",pcb_smtpad_id:"",port_hints:Array.isArray(e)?e.map((n)=>n.toString()):[e.toString()]}),GQ=fe.refine((e)=>e>0,{message:"DFN mechanical dimension must be positive"}),Fme=fe.refine((e)=>e>=0,{message:"DFN mechanical dimension must be non-negative"}),Lgo=at({bodywidth:GQ.optional(),bodylength:GQ.optional(),bodythickness:GQ.optional(),standoff:Fme.optional(),terminalinset:Fme.optional(),terminallength:GQ.optional(),terminalwidth:GQ.optional(),terminalpitch:GQ.optional(),terminalthickness:GQ.optional(),pin1terminalchamfer:Fme.optional(),pin1markwidth:Fme.optional()}),Fgo=VQ({}).and(nCt).and(Lgo),Hgo=(e)=>{let t=Ue().optional().parse(e.cornerpads),n=e.cornerpadcutlength===void 0?void 0:fe.parse(e.cornerpadcutlength),o=pY.parse(e.missing??[]);if(o.some((E)=>typeof E!=="number"))throw Error("DFN missing positions must be pad numbers");let i=[...new Set(o)];if(i.length!==o.length)throw Error("DFN missing positions must not contain duplicates");let r={...Fgo.parse(e),cornerpads:t,cornerpadcutlength:n,missing:i};if(r.bodythickness!==void 0&&r.standoff!==void 0&&r.standoff>=r.bodythickness)throw Error("DFN standoff must be less than bodythickness");if(r.terminalthickness!==void 0&&r.bodythickness!==void 0&&r.terminalthickness>r.bodythickness)throw Error("DFN terminalthickness must not exceed bodythickness");if(r.pin1markwidth!==void 0&&r.bodywidth!==void 0&&r.pin1markwidth>=r.bodywidth/2)throw Error("DFN pin1markwidth must be less than half bodywidth");let s=r.num_pins;if(i.some((E)=>E<1||E>s))throw Error("DFN missing position is outside the nominal pad range");if(t){if(s!==4||i.length>0||r.pillpads)throw Error("DFN corner pads require four nominal pads with none missing");if(n===void 0||n<=0||n>Math.min(r.pl,r.pw))throw Error("DFN corner pads require a valid cornerpadcutlength")}let a=new Set(i),c=[],l=Math.min(r.pl,r.pw)/8,d=0,u=1;for(let E=1;E<=s;E+=1){if(a.has(E))continue;let{x:B,y:w}=V8e({num_pins:s,pn:E,w:r.w,p:r.p??1.27,pl:r.pl,widthincludeslegs:!0});if(d=Math.max(d,Math.abs(w)+r.pw/2),t){let T=Math.sign(B),Q=Math.sign(w),N=B-T*r.pl/2,F=w-Q*r.pw/2,H=B+T*r.pl/2,z=w+Q*r.pw/2;c.push(U8e(u,[{x:N,y:F+Q*n},{x:N,y:z},{x:H,y:z},{x:H,y:F},{x:N+T*n,y:F}]))}else c.push((r.pillpads?e8:no)(u,B,w,r.pl??"1mm",r.pw??"0.6mm",l));u+=1}if(r.thermalpad)c.push(s6(r.thermalpad,{x:r.thermalpadcenteroffsetx,y:r.thermalpadcenteroffsety}));let h=Math.min(1,r.p/2),A=r.w+h,m=d*2+h,p=[];for(let E of kgo){let{dx:B,dy:w}=E;p.push({layer:"top",pcb_component_id:"",pcb_silkscreen_path_id:"",route:[{x:B*A/2-B*r.p,y:w*m/2},{x:B*A/2,y:w*m/2},{x:B*A/2,y:w*m/2-w*r.p}],type:"pcb_silkscreen_path",stroke_width:0.1})}let g=r.p/4,_=-A/2-g/2,f=m/2-r.p/2;p.push({layer:"top",pcb_component_id:"",pcb_silkscreen_path_id:"",type:"pcb_silkscreen_path",route:[{x:_,y:f},{x:_-g,y:f+g},{x:_-g,y:f-g},{x:_,y:f}],stroke_width:0.1});let y=Oo(0,m/2+0.4,m/12),x=(E)=>Math.ceil(E/0.05)*0.05,C=x(r.w/2+0.25),I=x(d+0.45),b={type:"pcb_courtyard_rect",pcb_courtyard_rect_id:"",pcb_component_id:"",center:{x:0,y:0},width:C*2,height:I*2,layer:"top"},P=[...c,y,...p,b];return{circuitJson:oCt(P,r),parameters:r}};var gy=fe.refine((e)=>e>0,{message:"dimension must be positive"}),F8e=fe.refine((e)=>e>=0,{message:"dimension must be non-negative"}),Rxt=Tv.number().pipe(kn([Be(1),Be(2)])),sCt=(e,t)=>Do.extend({[e]:Be(!0).optional(),fn:Be(e),string:Z().optional(),origin:Z().optional(),num_pins:Be(2).default(2),p:gy.default(fe.parse(t.p)).describe("pad center-to-center pitch"),pw:gy.default(fe.parse(t.pw)).describe("pad size along the package length"),ph:gy.default(fe.parse(t.ph)).describe("pad size along the package width"),cyw:gy.optional().describe("courtyard width"),cyh:gy.optional().describe("courtyard height"),bodylength:gy.default(fe.parse(t.bodylength)),bodywidth:gy.default(fe.parse(t.bodywidth)),bodyheight:gy.default(fe.parse(t.bodyheight)),leadspan:gy.default(fe.parse(t.leadspan)),cathodelength:gy.default(fe.parse(t.cathodelength)),cathodewidth:gy.default(fe.parse(t.cathodewidth)),anodelength:gy.default(fe.parse(t.anodelength)),anodewidth:gy.default(fe.parse(t.anodewidth)),terminalthickness:gy.default(fe.parse(t.terminalthickness)),standoff:F8e.default(fe.parse(t.standoff)),taperinset:F8e.default(fe.parse(t.taperinset)),markingwidth:F8e.default(fe.parse(t.markingwidth)),cathodepin:Rxt.default(1),anodepin:Rxt.default(2)}).strict().superRefine((n,o)=>{if(n.cathodepin===n.anodepin)o.addIssue({code:jt.custom,message:"anode and cathode must use different pins",path:["cathodepin"]});if(n.bodyheight<=n.standoff)o.addIssue({code:jt.custom,message:"bodyheight must be greater than standoff",path:["bodyheight"]});if(n.terminalthickness>=n.bodyheight)o.addIssue({code:jt.custom,message:"terminalthickness must be less than bodyheight",path:["terminalthickness"]});if(n.standoff>=n.terminalthickness)o.addIssue({code:jt.custom,message:"standoff must be less than terminalthickness",path:["standoff"]});if(n.leadspan<n.bodylength)o.addIssue({code:jt.custom,message:"leadspan must be at least bodylength",path:["leadspan"]});if(n.taperinset*2>=Math.min(n.bodylength,n.bodywidth))o.addIssue({code:jt.custom,message:"taperinset is too large for the body dimensions",path:["taperinset"]});if(n.markingwidth>n.bodylength)o.addIssue({code:jt.custom,message:"markingwidth must not exceed bodylength",path:["markingwidth"]});let i=(n.leadspan-n.bodylength)/2;if(n.cathodelength<=i||n.anodelength<=i||n.cathodelength+n.anodelength>=n.leadspan||n.cathodewidth>n.bodywidth||n.anodewidth>n.bodywidth)o.addIssue({code:jt.custom,message:"terminal dimensions are incompatible with the package body",path:["leadspan"]});if(n.markingwidth*2>=n.bodylength-n.taperinset*2)o.addIssue({code:jt.custom,message:"markingwidth is too large for the tapered body",path:["markingwidth"]})}).transform((n)=>{let{[e]:o,string:i,...r}=n;return r}),aCt=(e)=>{let t=[no(1,-e.p/2,0,e.pw,e.ph),no(2,e.p/2,0,e.pw,e.ph)],n=e.bodylength/2,o=e.bodywidth/2,i=[o,-o].map((l,d)=>({type:"pcb_silkscreen_path",pcb_silkscreen_path_id:`flat_lead_body_${d}`,pcb_component_id:"",layer:"top",stroke_width:0.1,route:[{x:-n,y:l},{x:n,y:l}]})),r=e.p/2+e.pw/2,s=e.cyw??Math.max(r,n)*2+0.5,a=e.cyh??Math.max(e.ph/2,o)*2+0.5,c={type:"pcb_courtyard_rect",pcb_courtyard_rect_id:"",pcb_component_id:"",center:{x:0,y:0},width:s,height:a,layer:"top"};return[...t,...Y8e(t,{cathodePin:e.cathodepin,anodePin:e.anodepin}),...i,Oo(0,a/2+0.4,0.3),c]},Ogo=sCt("do219ad",{p:"1.84mm",pw:"1.35mm",ph:"0.95mm",bodylength:"2.2mm",bodywidth:"1.3mm",bodyheight:"0.68mm",leadspan:"2.5mm",cathodelength:"1.3mm",cathodewidth:"0.88mm",anodelength:"0.65mm",anodewidth:"0.65mm",terminalthickness:"0.195mm",standoff:"0.11mm",taperinset:"0.05mm",markingwidth:"0.23mm"}),zgo=(e)=>{let t=Ogo.parse(e);return{circuitJson:aCt(t),parameters:t}};function cCt({pinlabeltextalignleft:e,pinlabeltextalignright:t,pinlabelorthogonal:n}){let o="top";if(n)o="left";else o="top";if(e)if(n)o="bottom";else o="right";if(t)if(n)o="top";else o="left";return o}var YQ=({fs:e,pn:t,anchor_x:n,anchor_y:o,textalign:i="center",anchorplacement:r,orthogonal:s=!1,verticallyinverted:a=!1,layer:c="top"})=>{let l=0;if(s&&a)l=270;else if(a)l=180;else if(s)l=90;else l=0;let d="center";if(i!=="center"){if(d=i==="left"?a?"center_right":"center_left":a?"center_left":"center_right",r){let h={top:{x:0,y:1},bottom:{x:0,y:-1},left:{x:-1,y:0},right:{x:1,y:0}}[r],A=l*Math.PI/180,m={x:Math.cos(A),y:Math.sin(A)},p=h.x*m.x+h.y*m.y;if(Math.abs(p)>0.5)d=p>0?"center_left":"center_right"}}if(c==="bottom"){if(d==="center_left")d="center_right";else if(d==="center_right")d="center_left"}return{type:"pcb_silkscreen_text",pcb_silkscreen_text_id:"silkscreen_text_1",font:"tscircuit2024",font_size:e,pcb_component_id:"pcb_component_1",text:`{PIN${t}}`,layer:c,anchor_position:{x:n,y:o},anchor_alignment:d,ccw_rotation:l}},Ggo=Zt(["rowmajor","columnmajor"]),Ygo=Do.extend({fn:Z(),num_pins:He().optional().default(6),rows:kn([Z(),He()]).transform((e)=>Number(e)).optional().default(1).describe("number of rows"),cols:kn([Z(),He()]).transform((e)=>Number(e)).optional().describe("number of nominal columns in a sparse grid"),pinnumbering:Tq((e)=>typeof e==="string"?e.trim().replace(/^\(([^()]*)\)$/,"$1"):e,Ggo).optional().describe("rowmajor or columnmajor grid numbering; omitted preserves the existing traversal"),p:fe.default("0.1in").describe("pitch"),py:fe.optional().describe("vertical row pitch"),id:fe.default("1.0mm").describe("inner diameter"),od:fe.default("1.5mm").describe("outer diameter"),missing:pY.default([]).describe("row-major nominal grid positions to omit"),male:Ue().optional().describe("for male pin headers"),female:Ue().optional().describe("for female pin headers"),smd:Ue().optional().describe("surface mount device"),surfacemount:Ue().optional().describe("surface mount device (verbose)"),rightangle:Ue().optional().describe("right angle"),pw:fe.optional().default("1.0mm").describe("pad width for SMD"),pl:fe.optional().default("2.0mm").describe("pad length for SMD"),cyw:fe.pipe(He().finite().positive()).optional().describe("explicit courtyard width"),cyh:fe.pipe(He().finite().positive()).optional().describe("explicit courtyard height"),pinlabeltextalignleft:Ue().optional().default(!1),pinlabeltextaligncenter:Ue().optional().default(!1),pinlabeltextalignright:Ue().optional().default(!1),pinlabelverticallyinverted:Ue().optional().default(!1),pinlabelorthogonal:Ue().optional().default(!1),nosquareplating:Ue().optional().default(!1).describe("do not use rectangular pad for pin 1"),nopinlabels:Ue().optional().default(!1).describe("omit silkscreen pin labels"),doublesidedpinlabel:Ue().optional().default(!1).describe("add silkscreen pins in top and bottom layers"),bottomsidepinlabel:Ue().optional().default(!1).describe("place the silkscreen reference text on the bottom layer instead of top"),silkscreenborder:Ue().optional().default(!1).describe("add a rectangular silkscreen border around the pin row"),silkscreenlabel:Z().transform((e)=>e.startsWith("(")&&e.endsWith(")")?e.slice(1,-1):e).optional().describe("replace the reference designator with a custom silkscreen label")}).transform((e)=>{let t=cCt(e);return{...e,pinlabelAnchorSide:t,male:e.male??!e.female,female:e.female??!1,smd:e.smd??e.surfacemount??!1,rightangle:e.rightangle??!1}}).superRefine((e,t)=>{if(e.male&&e.female)t.addIssue({code:jt.custom,message:"'male' and 'female' cannot both be true; it should be male or female.",path:["male","female"]});if(e.cols!==void 0&&(!Number.isInteger(e.cols)||e.cols<1))t.addIssue({code:jt.custom,message:"'cols' must be a positive integer",path:["cols"]});if(e.missing.some((n)=>typeof n!=="number"))t.addIssue({code:jt.custom,message:"'missing' positions must be pad numbers",path:["missing"]})}),lCt=(e)=>{let t=Ygo.parse(e),{p:n,py:o,id:i,od:r,rows:s,cols:a,pinnumbering:c,num_pins:l,missing:d,pinlabelAnchorSide:u,pinlabelverticallyinverted:h,pinlabelorthogonal:A,pinlabeltextalignleft:m,pinlabeltextalignright:p,nopinlabels:g,doublesidedpinlabel:_,bottomsidepinlabel:f,silkscreenborder:y,silkscreenlabel:x}=t,C="center";if(m)C="left";else if(p)C="right";let I=[],b={center:null},P=d,E=new Set(P);if(E.size!==P.length)throw Error("Pinrow missing positions must not contain duplicates");let B=l+P.length,w=a??Math.ceil(B/s),T=w*s,Q=a!==void 0||P.length>0||c!==void 0;if(Q&&T!==B)throw Error(`Pinrow grid has ${T} positions, but ${B} are required for ${l} pins and ${P.length} missing positions`);if(P.some((_e)=>!Number.isInteger(_e)||_e<1||_e>T))throw Error("Pinrow missing position is outside the nominal grid");let N=o??n,F=(s-1)*N,H=F/2,z=-N,Y=({xoff:_e,yoff:Pe,od:Ee,anchorSide:Te,smd:be,pw:me,pl:ye})=>{let Ce=0,ve=0;if(be){let De=Ee/5;switch(Te){case"right":Ce=me/2+De;break;case"top":ve=ye/2+De;break;case"bottom":ve=-(ye/2+De);break;case"left":Ce=-(me/2+De);break}}else{let De=Ee/2+0.6;switch(Te){case"right":Ce=De;break;case"top":ve=De;break;case"bottom":ve=-De;break;case"left":Ce=-De;break}}return{anchor_x:_e+Ce,anchor_y:Pe+ve}},U=(_e,Pe,Ee)=>{if(_e===1)b.center={x:Pe,y:Ee};if(t.smd)I.push(no(_e,Pe,Ee,t.pw,t.pl));else if(_e===1&&!t.nosquareplating)I.push(e1({pn:_e,x:Pe,y:Ee,holeDiameter:i,rectPadWidth:r,rectPadHeight:r}));else I.push(xr(_e,Pe,Ee,i,r));let{anchor_x:Te,anchor_y:be}=Y({xoff:Pe,yoff:Ee,od:r,anchorSide:u,smd:t.smd,pw:t.pw,pl:t.pl});if(!g){if(!f)I.push(YQ({fs:r/5,pn:_e,anchor_x:Te,anchor_y:be,anchorplacement:u,textalign:C,orthogonal:A,verticallyinverted:h,layer:"top"}));else I.push(YQ({fs:r/5,pn:_e,anchor_x:Te,anchor_y:be,anchorplacement:u,textalign:C,orthogonal:A,verticallyinverted:h,layer:"bottom"}));if(_)I.push(YQ({fs:r/5,pn:_e,anchor_x:Te,anchor_y:be,anchorplacement:u,textalign:C,orthogonal:A,verticallyinverted:h,layer:"bottom"}))}},X=new Set;if(Q){let _e=-((w-1)/2)*n,Pe=1;for(let Ee=0;Ee<T;Ee++){let Te=c==="columnmajor"?Ee%s:Math.floor(Ee/w),be=c==="columnmajor"?Math.floor(Ee/s):Ee%w,me=Te*w+be+1;if(E.has(me))continue;let ye=_e+be*n,Ce=H+Te*z,ve=`${ye},${Ce}`;if(X.has(ve))throw Error(`Overlap at ${ve}`);X.add(ve),U(Pe++,ye,Ce)}}else if(s===1){let _e=-((l-1)/2)*n;for(let Pe=0;Pe<l;Pe++){let Ee=Pe+1,Te=_e+Pe*n,be=`${Te},0`;if(X.has(be))throw Error(`Overlap at ${be}`);X.add(be),U(Ee,Te,0)}}else if(s>2&&w>2){let Pe=-((w-1)/2)*n,Ee=1;for(let Te=0;Te<s&&Ee<=l;Te++)for(let be=0;be<w&&Ee<=l;be++){let me=Pe+be*n,ye=H+Te*z,Ce=`${me},${ye}`;if(X.has(Ce))throw Error(`Overlap at ${Ce}`);X.add(Ce),U(Ee++,me,ye)}}else{let Pe=-((w-1)/2)*n,Ee=1,Te=0,be=s-1,me=0,ye=w-1;while(Ee<=l&&Te<=be&&me<=ye){for(let Ce=Te;Ce<=be&&Ee<=l;Ce++){let ve=Pe+me*n,De=H+Ce*z,Ze=`${ve},${De}`;if(X.has(Ze))throw Error(`Overlap at ${Ze}`);X.add(Ze),U(Ee++,ve,De)}me++;for(let Ce=me;Ce<=ye&&Ee<=l;Ce++){let ve=Pe+Ce*n,De=H+be*z,Ze=`${ve},${De}`;if(X.has(Ze))throw Error(`Overlap at ${Ze}`);X.add(Ze),U(Ee++,ve,De)}if(be--,me<=ye){for(let Ce=be;Ce>=Te&&Ee<=l;Ce--){let ve=Pe+ye*n,De=H+Ce*z,Ze=`${ve},${De}`;if(X.has(Ze))throw Error(`Overlap at ${Ze}`);X.add(Ze),U(Ee++,ve,De)}ye--}if(Te<=be){for(let Ce=ye;Ce>=me&&Ee<=l;Ce--){let ve=Pe+Ce*n,De=H+Te*z,Ze=`${ve},${De}`;if(X.has(Ze))throw Error(`Overlap at ${Ze}`);X.add(Ze),U(Ee++,ve,De)}Te++}}if(Ee-1<l)throw Error(`Missing pins: assigned ${Ee-1}, expected ${l}`)}let V=t.smd?t.pw/2:r/2,W=t.smd?t.pl/2:r/2,j=(w-1)*n,q=j/2+n/2+1,ne=Math.max(F/2+W+1,n/2+1),ce=y?ns([{x:-q,y:-ne},{x:q,y:-ne},{x:q,y:ne},{x:-q,y:ne},{x:-q,y:-ne}]):null,oe=(()=>{let _e=b.center;if(t.fn!=="headermodule"||!_e)return null;let Pe=Math.max(0.3,Math.min(0.6,n/4)),Ee=0.15;if(u==="top"||u==="bottom"){let Ce=Math.sign(_e.x)||(u==="top"?-1:1),ve=_e.x+Ce*(V+Ee),De=ve+Ce*Pe;return ns([{x:ve,y:_e.y},{x:De,y:_e.y-Pe},{x:De,y:_e.y+Pe},{x:ve,y:_e.y}],{pcb_component_id:"pin_marker_1",pcb_silkscreen_path_id:"pin_marker_1"})}let be=Math.sign(_e.y)||1,me=_e.y+be*(W+Ee),ye=me+be*Pe;return ns([{x:_e.x,y:me},{x:_e.x-Pe,y:ye},{x:_e.x+Pe,y:ye},{x:_e.x,y:me}],{pcb_component_id:"pin_marker_1",pcb_silkscreen_path_id:"pin_marker_1"})})(),ie=x?{type:"pcb_silkscreen_text",pcb_silkscreen_text_id:"silkscreen_text_1",font:"tscircuit2024",font_size:0.8,pcb_component_id:"pcb_component_1",text:x,layer:"top",anchor_position:{x:0,y:0},anchor_alignment:"center"}:Oo(0,F/2+n,0.5),J=j/2+V,ee=F/2+W,se=j/2+n/2,le=F/2+n/2,he=Math.max(J+0.25,se+0.5),ue=Math.max(ee+0.25,le+0.5),Ae={type:"pcb_courtyard_rect",pcb_courtyard_rect_id:"",pcb_component_id:"",center:{x:0,y:0},width:t.cyw??2*he,height:t.cyh??2*ue,layer:"top"};return{circuitJson:[...I,...ce?[ce]:[],...oe?[oe]:[],ie,Ae],parameters:t}},Vgo=(e)=>lCt({...e,fn:"headermodule"}),Ugo=[{x:-1.2,y:0.83},{x:-0.75,y:0.83},{x:-0.75,y:0.95},{x:0.75,y:0.95},{x:0.75,y:0.83},{x:1.2,y:0.83},{x:1.2,y:-0.83},{x:0.75,y:-0.83},{x:0.75,y:-0.95},{x:-0.75,y:-0.95},{x:-0.75,y:-0.83},{x:-1.2,y:-0.83}],Wgo=Do.extend({fn:Z(),num_pins:Be(6).default(6),w:Z().default("2.1mm"),h:Z().default("2.45mm"),p:Z().default("0.5mm"),pl:Z().default("0.675mm"),pw:Z().default("0.35mm"),string:Z().optional()}),Xgo=(e)=>{let t=Wgo.parse({...e,fn:"sot563"}),n=fe.parse(t.w),o=fe.parse(t.h),i=fe.parse(t.p),r=fe.parse(t.pl),s=fe.parse(t.pw),a=Math.min(r,s)/8,c=[];for(let p=0;p<6;p++){let{x:g,y:_}=Qxt(p+1,n,i,r);c.push(no(p+1,g,_,r,s,a))}let l={type:"pcb_silkscreen_path",layer:"top",pcb_component_id:"",route:[{x:-n/2,y:o/2},{x:n/2,y:o/2}],stroke_width:0.05,pcb_silkscreen_path_id:""},d={type:"pcb_silkscreen_path",layer:"top",pcb_component_id:"",route:[{x:-n/2,y:-o/2},{x:n/2,y:-o/2}],stroke_width:0.05,pcb_silkscreen_path_id:""},u=Qxt(1,n,i,r),h={type:"pcb_silkscreen_path",layer:"top",pcb_component_id:"pin_marker_1",route:[{x:u.x-r/2-0.3,y:u.y},{x:u.x-r/2-0.45,y:u.y+0.15},{x:u.x-r/2-0.45,y:u.y-0.15},{x:u.x-r/2-0.3,y:u.y}],stroke_width:0.05,pcb_silkscreen_path_id:"pin_marker_1"},A=Oo(0,o/2+0.4,0.25),m={type:"pcb_courtyard_outline",pcb_courtyard_outline_id:"",pcb_component_id:"",outline:Ugo,layer:"top"};return{circuitJson:[...c,l,d,A,h,m],parameters:t}},Qxt=(e,t,n,o)=>{let i=t/2-o/2;if(e<=3)return{x:-i,y:n-(e-1)*n};return{x:i,y:-n+(e-4)*n}},Kgo=VQ({p:"1.27mm",w:"3.9mm",legsoutside:!0}),jgo=(e)=>{let t=Kgo.parse({...e,num_pins:8});return{circuitJson:oZ(t),parameters:t}},qgo=VQ({p:"1.27mm",w:"7.5mm",legsoutside:!0}),Jgo=(e)=>{let t=qgo.parse({...e,num_pins:16});return{circuitJson:oZ(t),parameters:t}},$go=Do.extend({fn:Z(),num_pins:Be(3).default(3),w:Z().default("1.2mm"),h:Z().default("1.2mm"),pw:Z().default("0.40mm"),pl:Z().default("0.45mm"),p:Z().default("0.575mm")}),Zgo=(e)=>{let t=$go.parse(e),n=tfo(t),o=Oo(0,fe.parse(t.h),0.2),i=1.8,r=1.8,s={type:"pcb_courtyard_outline",pcb_courtyard_outline_id:"",pcb_component_id:"",outline:[{x:-0.9,y:0.9},{x:0.9,y:0.9},{x:0.9,y:-0.9},{x:-0.9,y:-0.9}],layer:"top"};return{circuitJson:[...n,o,s],parameters:t}},efo=(e)=>{let{pn:t,w:n,h:o,pl:i,p:r}=e;if(t===1)return{x:r,y:0};if(t===2)return{x:-r,y:-0.4};return{x:-r,y:0.4}},tfo=(e)=>{let t=[],n=Number.parseFloat(e.w),o=Number.parseFloat(e.h),i=Number.parseFloat(e.pl),r=Number.parseFloat(e.pw),s=Number.parseFloat(e.p),a=Math.min(i,r)/8;for(let c=0;c<3;c++){let{x:l,y:d}=efo({num_pins:e.num_pins,pn:c+1,w:n,h:o,pl:i,p:s});t.push(no(c+1,l,d,i,r,a))}return t},nfo=Do.extend({fn:Z(),num_pins:Be(2).default(2),w:Z().default("2.36mm"),h:Z().default("1.22mm"),pl:Z().default("0.9mm"),pw:Z().default("1.2mm"),p:Z().default("3.30mm")}),ofo=(e)=>{let t=nfo.parse(e),n=fe.parse(t.h),o=Oo(0,n/4+0.4,0.3),i=4.7,r=2.3,s={type:"pcb_courtyard_rect",pcb_courtyard_rect_id:"",pcb_component_id:"",center:{x:0,y:0},width:4.7,height:2.3,layer:"top"};return{circuitJson:rfo(t).concat(...yh(t),o,s),parameters:t}},ifo=(e)=>{let{pn:t,p:n}=e;if(t===1)return{x:-n/2,y:0};else return{x:n/2,y:0}},rfo=(e)=>{let t=[];for(let n=1;n<=e.num_pins;n++){let{x:o,y:i}=ifo({pn:n,p:fe.parse(e.p)});t.push(no(n,o,i,fe.parse(e.pl),fe.parse(e.pw),0.1125))}return t},sfo=Do.extend({fn:Z(),p:fe.optional().default("2.54mm"),id:fe.optional().default("0.7mm"),od:fe.optional().default("1.4mm")}),afo=(e)=>{let t=sfo.parse(e),{p:n,id:o,od:i}=t,r=[xr(1,-n/2,0,o,i),xr(2,n/2,0,o,i)],s={type:"pcb_silkscreen_path",layer:"top",pcb_component_id:"",route:[{x:-n/2+i+o/2,y:0},{x:n/2-i-o/2,y:0}],stroke_width:0.1,pcb_silkscreen_path_id:""},a=Oo(0,1.5,0.5),c=-n/2,l=n/2,d=i/2,u=i/2,h=c-d-0.35,A=l+d+0.26,m=u+0.35,p=h,g=A,_=m,f={type:"pcb_courtyard_outline",pcb_courtyard_outline_id:"",pcb_component_id:"",outline:t1([{minX:h,maxX:A,minY:-_,maxY:_},{minX:p,maxX:g,minY:-m,maxY:m}]),layer:"top"};return{circuitJson:[...r,s,a,f],parameters:t}},cfo=(e,t,n,o,i,r=0.1)=>{let s=[],a=[],c=Math.max(1,Math.ceil(Math.PI*n/r)),l=Math.PI/c;for(let d=0;d<=c;d++){let u=d*l,h=e+Math.cos(u)*n,A=t+Math.sin(u)*n;if(h<e-o&&A>=t-i/2&&A<=t+i/2)continue;s.push({x:h,y:A})}for(let d=0;d<=c;d++){let u=Math.PI+d*l,h=e+Math.cos(u)*n,A=t+Math.sin(u)*n;if(h<e-o&&A>=t-i/2&&A<=t+i/2)continue;a.push({x:h,y:A})}return{topArc:s,bottomArc:a}},lfo=Do.extend({fn:Z(),p:fe.optional().default("5mm"),id:fe.optional().default("0.8mm"),od:fe.optional().default("1.6mm"),ceramic:Ue().optional(),electrolytic:Ue().optional(),polarized:Ue().optional()}),dfo=(e)=>{let t=lfo.parse(e),{p:n,id:o,od:i}=t;if(o===0.8&&i===1.6)t.id=n===5?0.8:n*0.25,t.od=n===5?1.6:n*0.5;let r=[xr(1,-n/2,0,t.id,t.od),xr(2,n/2,0,t.id,t.od)],s=n+0.1,{topArc:a,bottomArc:c}=cfo(0,0,s,t.od/2,t.od),l=0.02*n,d={type:"pcb_silkscreen_path",layer:"top",pcb_component_id:"",route:a,stroke_width:l,pcb_silkscreen_path_id:""},u={type:"pcb_silkscreen_path",layer:"top",pcb_component_id:"",route:c,stroke_width:l,pcb_silkscreen_path_id:""},h={type:"pcb_silkscreen_path",layer:"top",pcb_component_id:"",route:[{x:0,y:s},{x:0,y:-s}],stroke_width:l,pcb_silkscreen_path_id:""},A=0.1*n,m=-(n+A+0.04*n),p=s-A-0.08*n,g={type:"pcb_silkscreen_path",layer:"top",pcb_component_id:"",route:[{x:m-A,y:p},{x:m+A,y:p}],stroke_width:l,pcb_silkscreen_path_id:""},_={type:"pcb_silkscreen_path",layer:"top",pcb_component_id:"",route:[{x:m,y:p-A},{x:m,y:p+A}],stroke_width:l,pcb_silkscreen_path_id:""},f=Oo(0,s+0.12*n,0.1*n),y=[...r,d,u,h,f];if(t.electrolytic===!0||t.polarized===!0)y.push(g,_);let C=n+0.25,I={type:"pcb_courtyard_circle",pcb_courtyard_circle_id:"",pcb_component_id:"",center:{x:0,y:0},radius:C,layer:"top"};return y.push(I),{circuitJson:y,parameters:t}},ufo=Do.extend({fn:Be("rj45"),num_pins:kn([Be(10),Be(14)]).default(10),ledpins:Ue().default(!1).describe("add the four through-hole LED connections as pins 9 through 12"),firstpinleft:Ue().default(!1).describe("mirror the eight signal pins so pin 1 is on the left"),firstpintop:Ue().default(!1).describe("mirror the eight signal pins so pin 1 is in the top row"),p:fe.default("1.02mm").describe("horizontal signal-pin pitch"),py:fe.default("1.78mm").describe("signal-row pitch"),id:fe.default("0.9144mm").describe("signal and LED hole diameter"),od:fe.default("1.524mm").describe("signal and LED outer diameter"),shieldx:fe.default("8.13mm").describe("shield-pin x offset from the footprint center"),shieldy:fe.default("0.13mm").describe("signed shield-pin y offset from the signal-row center"),shieldid:fe.default("1.8mm").describe("shield-pin hole diameter"),shieldod:fe.default("2.5mm").describe("shield-pin outer diameter"),holex:fe.default("6.35mm").describe("locator-hole x offset from the footprint center"),holey:fe.default("-3.43mm").describe("signed locator-hole y offset from the signal-row center"),holed:fe.default("3.25mm").describe("locator-hole diameter"),ledx:fe.default("4.57mm").describe("inner LED-pin x offset from the footprint center"),ledp:fe.default("2.29mm").describe("pitch within each LED-pin pair"),ledy:fe.default("5.7mm").describe("signed LED-pin y offset from the signal-row center"),w:fe.default("16.26mm").describe("connector body width"),h:fe.default("15.88mm").describe("connector body height"),bodyy:fe.default("-0.96mm").describe("signed connector body center y offset")}),hfo=(e)=>{let t=e.ledpins===!0||e.num_pins===14,n=ufo.parse({...e,ledpins:t,num_pins:t?14:10}),{ledpins:o,firstpinleft:i,firstpintop:r,p:s,py:a,id:c,od:l,shieldx:d,shieldy:u,shieldid:h,shieldod:A,holex:m,holey:p,holed:g,ledx:_,ledp:f,ledy:y,w:x,h:C,bodyy:I}=n,b=(he)=>Number(he.toFixed(12)),P=Array.from({length:8},(he,ue)=>{let Ae=ue+1,_e=(3.5-ue)*s,Pe=ue%2===0?-a/2:a/2,Ee=b(i?-_e:_e),Te=b(r?-Pe:Pe);return xr(Ae,Ee,Te,c,l)}),E=o?[xr(9,b(-_-f),y,c,l),xr(10,-_,y,c,l),xr(11,_,y,c,l),xr(12,b(_+f),y,c,l)]:[],B=o?14:9,w=o?13:10,T=i!==r,Q=T?w:B,N=T?B:w,F=[xr(Q,-d,u,h,A),xr(N,d,u,h,A)],H=[-m,m].map((he)=>({type:"pcb_hole",pcb_hole_id:"",pcb_component_id:"",hole_shape:"circle",hole_diameter:g,x:he,y:p})),z=-x/2,Y=x/2,U=I-C/2,X=I+C/2,V=A/2+0.2,W=[[U,Math.min(X,u-V)],[Math.max(U,u+V),X]].filter(([he,ue])=>ue-he>0.01),j=[ns([{x:z,y:U},{x:Y,y:U}]),ns([{x:z,y:X},{x:Y,y:X}]),...W.flatMap(([he,ue])=>[ns([{x:z,y:he},{x:z,y:ue}]),ns([{x:Y,y:he},{x:Y,y:ue}])])],q=Math.min(-d-A/2,-m-g/2,o?-_-f-l/2:0),ne=-q,ce=Math.min(u-A/2,p-g/2,-a/2-l/2,o?y-l/2:Number.POSITIVE_INFINITY),oe=Math.max(u+A/2,p+g/2,a/2+l/2,o?y+l/2:Number.NEGATIVE_INFINITY),ie=Math.min(z,q)-0.25,J=Math.max(Y,ne)+0.25,ee=Math.min(U,ce)-0.25,se=Math.max(X,oe)+0.25,le={type:"pcb_courtyard_rect",pcb_courtyard_rect_id:"",pcb_component_id:"",center:{x:(ie+J)/2,y:(ee+se)/2},width:J-ie,height:se-ee,layer:"top"};return{circuitJson:[...H,...P,...E,...F,...j,Oo(0,se+0.55,0.5),le],parameters:n}},mfo=Do.extend({fn:Be("pushbutton"),w:fe.default(4.5),h:fe.default(6.5),id:fe.default(1),od:fe.default(1.2)}),pfo=(e)=>{let t=mfo.parse(e),{w:n,h:o,id:i}=t,r=[xr(1,-n/2,o/2,i,i*1.5),xr(2,-n/2,-o/2,i,i*1.5),xr(3,n/2,-o/2,i,i*1.5),xr(4,n/2,o/2,i,i*1.5)],s=[ns([{x:-n/2,y:-o/2},{x:-n/2,y:o/2}]),ns([{x:n/2,y:-o/2},{x:n/2,y:o/2}]),ns([{x:-n/2,y:0},{x:-n/5,y:0},{x:n/5*1/Math.sqrt(2),y:o/8}]),ns([{x:n/2,y:0},{x:n/5,y:0}])],a=Oo(0,o/2+0.4,0.5),c=i*1.5/2,l=n,d=o,u=l/2+c,h=d/2+c,A=u+0.5,m=h+0.5,p={type:"pcb_courtyard_rect",pcb_courtyard_rect_id:"",pcb_component_id:"",center:{x:0,y:0},width:2*A,height:2*m,layer:"top"};return{circuitJson:[...r,...s,a,p],parameters:t}},dCt=Do.extend({fn:Z(),w:fe.default("22.58mm"),h:fe.optional(),left:fe.optional().default(20),right:fe.optional().default(20),top:fe.optional().default(2),bottom:fe.optional().default(2),p:fe.default(fe.parse("2.54mm")),pw:fe.default(fe.parse("1.6mm")),pl:fe.default(fe.parse("2.4mm")),innerhole:Ue().default(!1),innerholeedgedistance:fe.default(fe.parse("1.61mm")),silkscreenlabels:Ue().default(!1),silkscreenlabelmargin:fe.default(fe.parse("0.1mm"))}),Afo=(e)=>{let t=dCt.parse(e);if(t.left&&t.right)return Math.max(t.left,t.right)*t.p;if(t.left)return t.left*t.p;if(t.right)return t.right*t.p;return 51},Hme=(e,t,n)=>{let o=[],i=1,r=0.6;if(n==="right")o=[{x:e+i/2,y:t},{x:e-i/2,y:t+r/2},{x:e-i/2,y:t-r/2},{x:e+i/2,y:t}];if(n==="left")o=[{x:e-i/2,y:t},{x:e+i/2,y:t+r/2},{x:e+i/2,y:t-r/2},{x:e-i/2,y:t}];if(n==="top")o=[{x:e,y:t+i/2},{x:e-r/2,y:t-i/2},{x:e+r/2,y:t-i/2},{x:e,y:t+i/2}];if(n==="bottom")o=[{x:e,y:t-i/2},{x:e-r/2,y:t+i/2},{x:e+r/2,y:t+i/2},{x:e,y:t-i/2}];return o},_fo=(e)=>{let t=dCt.parse(e),n=t.h??Afo(t),o=[],i=[],r=[],s=[],a=1,c=a,l=t.left+t.right+(t.bottom??0)+(t.top??0),u=`pin${l}`.length*0.7/2;if(t.right){let p=-((t.right-1)/2)*t.p;for(let g=0;g<t.right;g++){if(g===0&&!t.left&&!t.bottom&&!t.silkscreenlabels)s=Hme(t.w/2-t.pl*1.4,p+g*t.p,"right");if(o.push(no(g+1+t.left+(t.bottom??0),t.w/2-t.pl/2,p+g*t.p,t.pl,t.pw)),t.silkscreenlabels){let _=g+1+t.left+(t.bottom??0),f=`pin${_}`;r.push({type:"pcb_silkscreen_text",pcb_silkscreen_text_id:`pin_${_}`,pcb_component_id:"1",layer:"top",anchor_position:{x:t.w/2-t.pl-(u+t.silkscreenlabelmargin),y:p+g*t.p},text:f,font_size:0.7,font:"tscircuit2024",anchor_alignment:"center"})}if(t.innerhole)i.push(xr(g+1+t.left+(t.bottom??0)+l,t.w/2,p+g*t.p,a,c)),i.push(xr(g+1+t.left+(t.bottom??0)+l*2,t.w/2-t.innerholeedgedistance,p+g*t.p,a,c))}}if(t.left){let p=(t.left-1)/2*t.p;for(let g=0;g<t.left;g++){if(g===0&&!t.silkscreenlabels)s=Hme(-t.w/2+t.pl*1.4,p-g*t.p,"left");if(o.push(no(g+1,-t.w/2+t.pl/2,p-g*t.p,t.pl,t.pw)),t.silkscreenlabels){let _=g+1,f=`pin${_}`;r.push({type:"pcb_silkscreen_text",pcb_silkscreen_text_id:`pin_${_}`,pcb_component_id:"1",layer:"top",anchor_position:{x:-t.w/2+t.pl+(u+t.silkscreenlabelmargin),y:p-g*t.p},text:f,font_size:0.7,font:"tscircuit2024",anchor_alignment:"center"})}if(t.innerhole)i.push(xr(g+1+l,-t.w/2,p-g*t.p,a,c)),i.push(xr(g+1+l*2,-t.w/2+t.innerholeedgedistance,p-g*t.p,a,c))}}if(t.top){let p=(t.top-1)/2*t.p;for(let g=0;g<t.top;g++){if(g===0&&!t.left&&!t.bottom&&!t.right&&!t.silkscreenlabels)s=Hme(p-g*t.p,n/2-t.pl*1.4,"top");if(o.push(no(g+1+t.left+t.right+(t.bottom??0),p-g*t.p,n/2-t.pl/2,t.pw,t.pl)),t.silkscreenlabels){let _=g+1+t.left+t.right+(t.bottom??0),f=`pin${_}`;r.push({type:"pcb_silkscreen_text",pcb_silkscreen_text_id:`pin_${_}`,pcb_component_id:"1",layer:"top",anchor_position:{x:p-g*t.p,y:n/2-t.pl-(u+t.silkscreenlabelmargin)},text:f,font_size:0.7,font:"tscircuit2024",anchor_alignment:"center",ccw_rotation:270})}if(t.innerhole)i.push(xr(g+1+t.left+t.right+(t.bottom??0)+l,p-g*t.p,n/2,a,c)),i.push(xr(g+1+t.left+t.right+(t.bottom??0)+l*2,p-g*t.p,n/2-t.innerholeedgedistance,a,c))}}if(t.bottom){let p=-((t.bottom-1)/2)*t.p;for(let g=0;g<t.bottom;g++){if(g===0&&!t.left&&!t.silkscreenlabels)s=Hme(p+g*t.p,-n/2+t.pl*1.4,"bottom");if(o.push(no(g+1+t.left,p+g*t.p,-n/2+t.pl/2,t.pw,t.pl)),t.silkscreenlabels){let _=g+1+t.left,f=`pin${_}`;r.push({type:"pcb_silkscreen_text",pcb_silkscreen_text_id:`pin_${_}`,pcb_component_id:"1",layer:"top",anchor_position:{x:p+g*t.p,y:-n/2+t.pl+(u+t.silkscreenlabelmargin)},text:f,font_size:0.7,font:"tscircuit2024",anchor_alignment:"center",ccw_rotation:90})}if(t.innerhole)i.push(xr(g+1+t.left+l,p+g*t.p,-n/2,a,c)),i.push(xr(g+1+t.left+l*2,p+g*t.p,-n/2+t.innerholeedgedistance,a,c))}}let h={type:"pcb_silkscreen_path",pcb_silkscreen_path_id:"pcb_silkscreen_triangle_1",pcb_component_id:"2",route:s,stroke_width:0.1,layer:"top"},A={type:"pcb_silkscreen_path",pcb_silkscreen_path_id:"pcb_silkscreen_path_1",pcb_component_id:"1",route:[{x:-t.w/2,y:n/2},{x:t.w/2,y:n/2},{x:t.w/2,y:-n/2},{x:-t.w/2,y:-n/2},{x:-t.w/2,y:n/2}],stroke_width:0.1,layer:"top"},m=Oo(0,n/1.8,n/25);return{circuitJson:[...o,...i,...r,A,...t.silkscreenlabels?[]:[h],m],parameters:t}},uCt=Do.extend({fn:Z(),w:fe.default("22.58mm"),h:fe.optional(),left:fe.optional().default(20),right:fe.optional().default(20),top:fe.optional().default(2),bottom:fe.optional().default(2),p:fe.default(fe.parse("2.54mm")),pw:fe.default(fe.parse("1.6mm")),pl:fe.default(fe.parse("3.2mm")),innerhole:Ue().default(!1),innerholeedgedistance:fe.default(fe.parse("1.61mm"))}),gfo=(e)=>{let t=uCt.parse(e);if(t.left&&t.right)return Math.max(t.left,t.right)*t.p;if(t.left)return t.left*t.p;if(t.right)return t.right*t.p;return 51},ffo=(e,t,n,o=1,i=0.6)=>{let r=o/2,s=i/2;return{left:[{x:e+r,y:t},{x:e-r,y:t+s},{x:e-r,y:t-s},{x:e+r,y:t}],right:[{x:e-r,y:t},{x:e+r,y:t+s},{x:e+r,y:t-s},{x:e-r,y:t}],top:[{x:e,y:t-r},{x:e-s,y:t+r},{x:e+s,y:t+r},{x:e,y:t-r}],bottom:[{x:e,y:t+r},{x:e-s,y:t-r},{x:e+s,y:t-r},{x:e,y:t+r}]}[n]},yfo=(e)=>{let t=uCt.parse(e),n=t.h??gfo(t),o=[],i=[],r=[],s=1,a=1.2,c=t.left+t.right+(t.bottom??0)+(t.top??0),l=[],d=1;if(t.left){let m=(t.left-1)/2*t.p;for(let p=0;p<t.left;p++){if(p===0)l=ffo(-t.w/2-t.pl/2,m-p*t.p,"left");o.push(no(d,-t.w/2+t.pl/2,m-p*t.p,t.pl,t.pw)),i.push({type:"pcb_silkscreen_text",pcb_silkscreen_text_id:`pin_${d}`,pcb_component_id:"1",layer:"top",anchor_position:{x:-t.w/2+t.pl/2-4.5,y:m-p*t.p},text:`pin${d}`,font_size:0.7,font:"tscircuit2024",anchor_alignment:"center"}),d++,t.innerhole&&r.push(xr(d+c,-t.w/2+t.innerholeedgedistance,m-p*t.p,1,1.2))}}if(t.bottom){let m=(t.bottom-1)/2*t.p;for(let p=t.bottom-1;p>=0;p--)o.push(no(d,m-p*t.p,-n/2+t.pl/2,t.pw,t.pl)),i.push({type:"pcb_silkscreen_text",pcb_silkscreen_text_id:`pin_${d}`,pcb_component_id:"1",layer:"top",anchor_position:{x:m-p*t.p,y:-n/2+t.pl/2-3.2},text:`pin${d}`,font_size:0.7,font:"tscircuit2024",anchor_alignment:"center"}),d++,t.innerhole&&r.push(xr(d+c,m-p*t.p,-n/2+t.innerholeedgedistance,1,1.2))}if(t.right){let m=-((t.right-1)/2)*t.p;for(let p=0;p<t.right;p++)o.push(no(d,t.w/2-t.pl/2,m+p*t.p,t.pl,t.pw)),i.push({type:"pcb_silkscreen_text",pcb_silkscreen_text_id:`pin_${d}`,pcb_component_id:"1",layer:"top",anchor_position:{x:t.w/2-t.pl/2+3.7,y:m+p*t.p},text:`pin${d}`,font_size:0.7,font:"tscircuit2024",anchor_alignment:"center"}),d++,t.innerhole&&r.push(xr(d+c,t.w/2-t.innerholeedgedistance,m+p*t.p,1,1.2))}if(t.top){let m=-((t.top-1)/2)*t.p;for(let p=t.top-1;p>=0;p--)o.push(no(d,m+p*t.p,n/2-t.pl/2,t.pw,t.pl)),i.push({type:"pcb_silkscreen_text",pcb_silkscreen_text_id:`pin_${d}`,pcb_component_id:"1",layer:"top",anchor_position:{x:m+p*t.p,y:n/2-t.pl/2+3.2},text:`pin${d}`,font_size:0.7,font:"tscircuit2024",anchor_alignment:"center"}),d++,t.innerhole&&r.push(xr(d+c,m+p*t.p,n/2-t.innerholeedgedistance,1,1.2))}let u={type:"pcb_silkscreen_path",pcb_silkscreen_path_id:"1",pcb_component_id:"1",layer:"top",route:l,stroke_width:0.1},h={type:"pcb_silkscreen_path",pcb_silkscreen_path_id:"pcb_silkscreen_path_1",pcb_component_id:"1",route:[{x:-t.w/2-t.pl/3,y:n/2+t.pl/3},{x:t.w/2+t.pl/3,y:n/2+t.pl/3},{x:t.w/2+t.pl/3,y:-n/2-t.pl/3},{x:-t.w/2-t.pl/3,y:-n/2-t.pl/3},{x:-t.w/2-t.pl/3,y:n/2+t.pl/3}],stroke_width:0.1,layer:"top"},A=Oo(0,n/1.8,n/25);return{circuitJson:[...r,...o,...i,h,u,A],parameters:t}},xfo=(e)=>{if(e.legsoutside=!0,!e.pl)e.pl=1.5;if(!e.pw)e.pw=0.3;return t8(e)},Ome=fe.refine((e)=>Number.isFinite(e)&&e>0,{message:"pitch must be a positive finite length"}),Cfo=Do.extend({fn:Z(),bodywidth:fe.refine((e)=>Number.isFinite(e)&&e>0,{message:"bodywidth must be a positive finite length"}).optional().describe("physical body X size before footprint rotation, independent of copper"),bodyheight:fe.refine((e)=>Number.isFinite(e)&&e>0,{message:"bodyheight must be a positive finite length"}).optional().describe("physical body Y size before footprint rotation, independent of copper"),bodythickness:fe.refine((e)=>Number.isFinite(e)&&e>0,{message:"bodythickness must be a positive finite length"}).optional().describe("physical body Z size, excluding board standoff; metadata for 3D consumers"),num_pins:He().int().positive().optional().default(14),grid:fy.optional(),p:fe.default(fe.parse("0.5mm")),px:Ome.optional().describe("top and bottom row pitch"),py:Ome.optional().describe("left and right row pitch"),lrendpitch:Ome.optional().describe("first and last gaps on left and right rows"),tbendpitch:Ome.optional().describe("first and last gaps on top and bottom rows"),cw:Ue().optional(),ccw:Ue().optional(),startingpin:Z().or(Qt(Ume)).transform((e)=>typeof e==="string"?e.slice(1,-1).split(","):e).pipe(Qt(Ume)).optional(),w:fe.optional(),h:fe.optional(),pw:fe.default(fe.parse("0.28mm")),pl:fe.default(fe.parse("0.7mm")),pillpads:Ue().optional().default(!1)}),Ifo=(e)=>{let t=Cfo.parse(e),n=t.num_pins/2;if(!Number.isInteger(n))throw Error("LGA footprints require an even number of perimeter pads");let o=t.grid??{x:Math.ceil(n/2),y:Math.floor(n/2)};if(!Number.isInteger(o.x)||!Number.isInteger(o.y)||o.x<0||o.y<0||o.x+o.y<=0||2*(o.x+o.y)!==t.num_pins)throw Error(`LGA grid ${o.x}x${o.y} requires ${2*(o.x+o.y)} pads, got ${t.num_pins}`);if(t.cw&&t.ccw)throw Error("Choose either cw or ccw numbering");for(let[P,E,B]of[[o.x,t.lrendpitch,"left/right"],[o.y,t.tbendpitch,"top/bottom"]])if(E!==void 0&&P<3)throw Error(`${B} end pitch requires at least three pads per row`);let i=(P,E,B)=>B===void 0?(P-1)*E:2*B+(P-3)*E,r=t.w??i(o.y,t.px??t.p,t.tbendpitch)+2*t.pl,s=t.h??i(o.x,t.py??t.p,t.lrendpitch)+2*t.pl,a={left:o.x,right:o.x,top:o.y,bottom:o.y};for(let P of["left","right","top","bottom"])if(t.startingpin?.includes(`${P}side`)&&a[P]===0)throw Error(`Starting side ${P} has no pads`);let c=Zxt({...t,sidePinCounts:a}),l=(P,E,B,w)=>{if(w===void 0)return((P-1)/2-E)*B;return(2*w+(P-3)*B)/2-(E===0?0:w+(E-1)*B+(E===P-1?w-B:0))},d=(r-t.pl)/2,u=(s-t.pl)/2,h=[],A=(P,E,B,w,T)=>{h.push(t.pillpads?e8(c[P],E,B,w,T):no(c[P],E,B,w,T))},m=1;for(let P=0;P<o.x;P+=1)A(m++,-d,l(o.x,P,t.py??t.p,t.lrendpitch),t.pl,t.pw);for(let P=0;P<o.y;P+=1)A(m++,-l(o.y,P,t.px??t.p,t.tbendpitch)||0,-u,t.pw,t.pl);for(let P=0;P<o.x;P+=1)A(m++,d,-l(o.x,P,t.py??t.p,t.lrendpitch)||0,t.pl,t.pw);for(let P=0;P<o.y;P+=1)A(m++,l(o.y,P,t.px??t.p,t.tbendpitch),u,t.pw,t.pl);let p=Math.max(t.pw,0.15),g=h.find((P)=>P.type==="pcb_smtpad"&&(P.shape==="rect"||P.shape==="pill")&&Boolean(P.port_hints?.includes("1"))),_=g.x>0?1:-1,f=g.y<0?-1:1,y={type:"pcb_silkscreen_path",layer:"top",pcb_component_id:"",pcb_silkscreen_path_id:"pin1_marker",stroke_width:0.1,route:[{x:_*r/2,y:f*(s/2-p)},{x:_*r/2,y:f*s/2},{x:_*(r/2-p),y:f*s/2}]},x=0.25,C=r/2+x,I=s/2+x;if(t.bodywidth!==void 0||t.bodyheight!==void 0){C=Math.max(r,t.bodywidth??r)/2+x,I=Math.max(s,t.bodyheight??s)/2+x;for(let P of h){if(P.type!=="pcb_smtpad"||P.shape!=="rect"&&P.shape!=="pill")continue;C=Math.max(C,Math.abs(P.x)+P.width/2+x),I=Math.max(I,Math.abs(P.y)+P.height/2+x)}}let b={type:"pcb_courtyard_outline",pcb_courtyard_outline_id:"",pcb_component_id:"",layer:"top",outline:[{x:-C,y:-I},{x:C,y:-I},{x:C,y:I},{x:-C,y:I},{x:-C,y:-I}]};return{circuitJson:[...h,y,Oo(0,s/2+0.5,0.3),b],parameters:{...t,grid:o,w:r,h:s}}},hCt=Do.extend({fn:Z(),w:fe.default("10mm"),h:fe.optional(),left:fe.optional().default(20),right:fe.optional().default(20),top:fe.optional().default(0),bottom:fe.optional().default(0),p:fe.default(fe.parse("2.54mm")),id:fe.optional().default(fe.parse("1mm")),od:fe.optional().default(fe.parse("1.5mm"))}),bfo=(e)=>{let t=hCt.parse(e);if(t.left&&t.right)return Math.max(t.left,t.right)*t.p;if(t.left)return t.left*t.p;if(t.right)return t.right*t.p;return 51},zme=(e,t,n,o=1,i=0.6)=>{let r=o/2,s=i/2;return{left:[{x:e+r,y:t},{x:e-r,y:t+s},{x:e-r,y:t-s},{x:e+r,y:t}],right:[{x:e-r,y:t},{x:e+r,y:t+s},{x:e+r,y:t-s},{x:e-r,y:t}],top:[{x:e,y:t-r},{x:e-s,y:t+r},{x:e+s,y:t+r},{x:e,y:t-r}],bottom:[{x:e,y:t+r},{x:e-s,y:t-r},{x:e+s,y:t-r},{x:e,y:t+r}]}[n]},Sfo=(e)=>{let t=hCt.parse(e),n=t.h??bfo(t),o=[],{id:i,od:r}=t,s=[];if(t.right){let d=-((t.right-1)/2)*t.p;for(let u=0;u<t.right;u++){if(u===0&&!t.left&&!t.bottom)s=zme(t.w/2+r*1.4,d+u*t.p,"right");o.push(xr(u+1+t.left+(t.bottom??0),t.w/2,d+u*t.p,i,r))}}if(t.left){let d=-((t.left-1)/2)*t.p;for(let u=0;u<t.left;u++){if(u===t.left-1)s=zme(-t.w/2-r*1.4,d+u*t.p,"left");o.push(xr(u+1,-t.w/2,d+u*t.p,i,r))}}if(t.top){let d=-((t.top-1)/2)*t.p;for(let u=0;u<t.top;u++){if(u===t.top-1&&!t.left&&!t.bottom&&!t.right)s=zme(d+u*t.p,n/2+r*1.4,"top");o.push(xr(u+1+t.right+(t.bottom??0)+t.left,d+u*t.p,n/2,i,r))}}if(t.bottom){let d=-((t.bottom-1)/2)*t.p;for(let u=0;u<t.bottom;u++){if(u===0&&!t.left)s=zme(d+u*t.p,-n/2-r*1.4,"bottom");o.push(xr(u+1+t.left,d+u*t.p,-n/2,i,r))}}let a={type:"pcb_silkscreen_path",pcb_silkscreen_path_id:"1",pcb_component_id:"1",layer:"top",route:s,stroke_width:0.1},c={type:"pcb_silkscreen_path",pcb_silkscreen_path_id:"pcb_silkscreen_path_1",pcb_component_id:"1",route:[{x:-t.w/2-r,y:n/2+r},{x:t.w/2+r,y:n/2+r},{x:t.w/2+r,y:-n/2-r},{x:-t.w/2-r,y:-n/2-r},{x:-t.w/2-r,y:n/2+r}],stroke_width:0.1,layer:"top"},l=Oo(0,n/1.7,n/25);return{circuitJson:[...o,c,l,a],parameters:t}},Pfo=(e)=>{let{centerX:t,centerY:n,straightHalfLength:o,radius:i,arcSegmentCount:r=9,orientation:s="horizontal"}=e;if(o<0)throw Error("Capsule straightHalfLength must be non-negative");if(i<=0)throw Error("Capsule radius must be positive");if(r<2)throw Error("Capsule arcSegmentCount must be at least 2");if(s==="horizontal"){let u=t-o,h=t+o,A=Array.from({length:r+1},(p,g)=>{let _=Math.PI/2-g*Math.PI/r;return{x:h+Math.cos(_)*i,y:n+Math.sin(_)*i}}),m=Array.from({length:r+1},(p,g)=>{let _=-Math.PI/2+g*Math.PI/r;return{x:u-Math.cos(_)*i,y:n+Math.sin(_)*i}});return[{x:u,y:n+i},{x:h,y:n+i},...A.slice(1,-1),{x:h,y:n-i},{x:u,y:n-i},...m.slice(1,-1)]}let a=n-o,c=n+o,l=Array.from({length:r+1},(u,h)=>{let A=Math.PI-h*Math.PI/r;return{x:t+Math.cos(A)*i,y:c+Math.sin(A)*i}}),d=Array.from({length:r+1},(u,h)=>{let A=h*Math.PI/r;return{x:t+Math.cos(A)*i,y:a-Math.sin(A)*i}});return[{x:t-i,y:a},{x:t-i,y:c},...l.slice(1,-1),{x:t+i,y:c},{x:t+i,y:a},...d.slice(1,-1)]},kxt=(e,t,n,o)=>Array.from({length:25},(i,r)=>{let s=r/24*Math.PI-Math.PI/2;return{x:e+(o==="right"?1:-1)*Math.cos(s)*n,y:t+Math.sin(s)*n}}),vfo=Do.extend({fn:Z(),p:fe.optional().default("4.88mm"),id:fe.optional().default("0.8mm"),od:fe.optional().default("1.5mm"),w:fe.optional().default("5.6mm"),h:fe.optional().default("3.5mm")}),Efo=(e)=>{let t=vfo.parse(e),{p:n,id:o,od:i,w:r,h:s}=t,a=s/2,c=[xr(1,-n/2,0,o,i),xr(2,n/2,0,o,i)],l=kxt(-r/2,0,a,"left"),d=kxt(r/2,0,a,"right"),u={type:"pcb_silkscreen_path",layer:"top",pcb_component_id:"",route:[...l,...l.slice(1).reverse(),{x:-r/2,y:-s/2},{x:r/2,y:-s/2},...d,{x:r/2,y:s/2},{x:-r/2,y:s/2}],stroke_width:0.1,pcb_silkscreen_path_id:""},h=Oo(0,n/4,0.5),m=n/2+i/2,p=Math.max(s/2+0.25,r/2+0.03),g={type:"pcb_courtyard_outline",pcb_courtyard_outline_id:"",pcb_component_id:"",outline:Pfo({centerX:0,centerY:0,straightHalfLength:m,radius:p,arcSegmentCount:9}),layer:"top"};return{circuitJson:[...c,u,h,g],parameters:t}},BQr=Do.extend({w:fe,h:fe}),Mfo=(e)=>{let{w:t,h:n}=e,o=yr(t),i=yr(n);return{circuitJson:[no(1,0,0,o,i),Oo(0,i/2+0.5,0.2)],parameters:e}},rE=(e,t,n,o,i,r)=>({pcb_plated_hole_id:"",type:"pcb_plated_hole",shape:"pill",x:t,y:n,outer_width:yr(i),outer_height:yr(r),hole_width:yr(o),hole_height:yr(o),pcb_port_id:"",layers:["top","bottom"],port_hints:[e.toString()],ccw_rotation:0}),Bfo=[{x:-2.5,y:4.75},{x:-2.5,y:-0.25},{x:2.5,y:-0.25},{x:2.5,y:4.75}],wfo=Do.extend({fn:Z(),num_pins:kn([Be(3),Be(2)]).default(3),p:Z().default("1.27mm"),id:Z().default("0.72mm"),od:Z().default("0.95mm"),w:Z().default("4.5mm"),h:Z().default("4.5mm"),inline:Ue().default(!1),string:Z().optional()}),Tfo=(e,t,n)=>Array.from({length:25},(o,i)=>{let r=i/24*Math.PI;return{x:e+Math.cos(r)*n,y:t+Math.sin(r)*n}}),Dfo=(e)=>{let t=e.string?.match(/^to92_(\d+)/),n=t?Number.parseInt(t[1],10):3,o=wfo.parse({...e,num_pins:n}),{p:i,id:r,od:s,w:a,h:c,inline:l}=o,d=Number.parseFloat(c)/2,u=Number.parseFloat(i),h=Number.parseFloat(r),A=Number.parseFloat(s),m=A,p=A*1.4285714285714286,g=[];if(o.num_pins===3)if(l)g=[e1({pn:1,x:-u,y:d-u,holeDiameter:h,rectPadWidth:A,rectPadHeight:p}),rE(2,0,d-u,h,m,p),rE(3,u,d-u,h,m,p)];else g=[e1({pn:1,x:-u,y:d-u,holeDiameter:h,rectPadWidth:A,rectPadHeight:A}),xr(2,0,d,h,A),xr(3,u,d-u,h,A)];else if(o.num_pins===2)g=[e1({pn:1,x:-u,y:d-u,holeDiameter:h,rectPadWidth:m,rectPadHeight:p}),rE(2,u,d-u,h,m,p)];else throw Error("Invalid number of pins for TO-92");let _=Number.parseFloat(a)/2,f=Tfo(0,d,_),y={type:"pcb_silkscreen_path",layer:"top",pcb_component_id:"",route:[...f,{x:-_,y:0},{x:_,y:0},f[0]],stroke_width:0.1,pcb_silkscreen_path_id:""},x=Oo(0,d+1,0.5),C={type:"pcb_courtyard_outline",pcb_courtyard_outline_id:"",pcb_component_id:"",outline:Bfo,layer:"top"};return{circuitJson:[...g,y,x,C],parameters:o}},Nfo=Do.extend({fn:Z(),num_pins:Be(2).default(2),w:Z().default("2.15mm"),h:Z().default("0.7mm"),pl:Z().default("0.6mm"),pw:Z().default("0.7mm"),p:Z().default("1.4mm")}),Rfo=(e)=>{let t=Nfo.parse(e),n=Oo(0,fe.parse(t.h),0.3),o={type:"pcb_silkscreen_path",layer:"top",pcb_component_id:"",route:[{x:fe.parse(t.p)/2,y:fe.parse(t.h)/2+0.2},{x:-fe.parse(t.w)/2-0.2,y:fe.parse(t.h)/2+0.2},{x:-fe.parse(t.w)/2-0.2,y:-fe.parse(t.h)/2-0.2},{x:fe.parse(t.p)/2,y:-fe.parse(t.h)/2-0.2}],stroke_width:0.1,pcb_silkscreen_path_id:""},i=2.5,r=1.4,s={type:"pcb_courtyard_rect",pcb_courtyard_rect_id:"",pcb_component_id:"",center:{x:0,y:0},width:2.5,height:1.4,layer:"top"};return{circuitJson:kfo(t).concat(...yh(t),o,n,s),parameters:t}},Qfo=(e)=>{let{pn:t,p:n}=e;if(t===1)return{x:-n/2,y:0};else return{x:n/2,y:0}},kfo=(e)=>{let t=[],n=fe.parse(e.p),o=fe.parse(e.pl),i=fe.parse(e.pw),r=0.075;for(let s=1;s<=e.num_pins;s++){let{x:a,y:c}=Qfo({pn:s,p:n});t.push(no(s,a,c,o,i,0.075))}return t},Lfo=VQ({w:"7.05mm",p:"1.27mm",pw:"0.65mm",pl:"1.975mm"}),Ffo=(e)=>{let t=Lfo.parse(e),n=[],o=Math.min(t.pl,t.pw)/8;for(let A=0;A<t.num_pins;A++){let{x:m,y:p}=V8e({num_pins:t.num_pins,pn:A+1,w:t.w,p:t.p??1.27,pl:t.pl,widthincludeslegs:!0});n.push(no(A+1,m,p,t.pl,t.pw,o))}let i=(t.num_pins/2-1)*t.p+t.pw,r=Oo(0,i/2+1,i/12),s={layer:"top",pcb_component_id:"",pcb_silkscreen_path_id:"",type:"pcb_silkscreen_path",route:[{x:-t.w/3,y:i/2+0.4},{x:t.w/3,y:i/2+0.4}],stroke_width:0.1},a=(t.num_pins/2-1)*t.p+t.pw,c=t.w/2-1.395,l=t.w/2+0.255,d=a/2+0.25,u=a/2+0.5,h={type:"pcb_courtyard_outline",pcb_courtyard_outline_id:"",pcb_component_id:"",layer:"top",outline:t1([{minX:-l,maxX:l,minY:-d,maxY:d},{minX:-c,maxX:c,minY:-u,maxY:u}])};return{circuitJson:[...n,r,s,h],parameters:t}},Hfo=Do.extend({fn:Z(),num_pins:Be(2).default(2),w:Z().default("5.0mm"),h:Z().default("2.30mm"),pl:Z().default("1.25mm"),pw:Z().default("2mm"),p:Z().default("3.75mm")}),Ofo=(e)=>{let t=Hfo.parse(e),n=Oo(0,fe.parse(t.h)/2+1,0.3),o={type:"pcb_silkscreen_path",layer:"top",pcb_component_id:"",route:[{x:fe.parse(t.p)/2+0.5,y:fe.parse(t.h)/2+0.5},{x:-fe.parse(t.w)/2-0.5,y:fe.parse(t.h)/2+0.5},{x:-fe.parse(t.w)/2-0.5,y:-fe.parse(t.h)/2-0.5},{x:fe.parse(t.p)/2+0.5,y:-fe.parse(t.h)/2-0.5}],stroke_width:0.1,pcb_silkscreen_path_id:""},i=5.1,r=2.8,s={type:"pcb_courtyard_rect",pcb_courtyard_rect_id:"",pcb_component_id:"",center:{x:0,y:0},width:5.1,height:2.8,layer:"top"};return{circuitJson:Gfo(t).concat(...yh(t),o,n,s),parameters:t}},zfo=(e)=>{let{pn:t,p:n}=e;return t===1?{x:-n/2,y:0}:{x:n/2,y:0}},Gfo=(e)=>{let t=[];for(let n=1;n<=e.num_pins;n++){let{x:o,y:i}=zfo({pn:n,p:fe.parse(e.p)});t.push(no(n,o,i,fe.parse(e.pl),fe.parse(e.pw)))}return t},Yfo=Do.extend({fn:Z(),num_pins:Be(2).default(2),w:Z().default("4.4mm"),h:Z().default("1.7mm"),pl:Z().default("1.2mm"),pw:Z().default("1.2mm"),p:Z().default("2.8mm")}),Vfo=(e)=>{let t=Yfo.parse(e),n=Oo(0,fe.parse(t.h)-0.5,0.3),o={type:"pcb_silkscreen_path",layer:"top",pcb_component_id:"",route:[{x:fe.parse(t.p)/2,y:fe.parse(t.h)/2},{x:-fe.parse(t.w)/2-0.2,y:fe.parse(t.h)/2},{x:-fe.parse(t.w)/2-0.2,y:-fe.parse(t.h)/2},{x:fe.parse(t.p)/2,y:-fe.parse(t.h)/2}],stroke_width:0.1,pcb_silkscreen_path_id:""},i=4.5,r=2.2,s={type:"pcb_courtyard_rect",pcb_courtyard_rect_id:"",pcb_component_id:"",center:{x:0,y:0},width:4.5,height:2.2,layer:"top"};return{circuitJson:Wfo(t).concat(...yh(t),o,n,s),parameters:t}},Ufo=(e)=>{let{pn:t,p:n}=e;if(t===1)return{x:-n/2,y:0};return{x:n/2,y:0}},Wfo=(e)=>{let t=[];for(let n=1;n<=e.num_pins;n++){let{x:o,y:i}=Ufo({pn:n,p:fe.parse(e.p)});t.push(no(n,o,i,fe.parse(e.pl),fe.parse(e.pw)))}return t},Xfo=Do.extend({fn:Z(),num_pins:Be(2).default(2),w:Z().default("3.30mm"),h:Z().default("1.80mm"),pl:Z().default("0.60mm"),pw:Z().default("0.45mm"),p:Z().default("2.1mm")}),Kfo=(e)=>{let t=Xfo.parse(e),n=Oo(0,fe.parse(t.h)-0.5,0.3),o={type:"pcb_silkscreen_path",layer:"top",pcb_component_id:"",route:[{x:fe.parse(t.p)/2,y:fe.parse(t.h)/2},{x:-fe.parse(t.w)/2,y:fe.parse(t.h)/2},{x:-fe.parse(t.w)/2,y:-fe.parse(t.h)/2},{x:fe.parse(t.p)/2,y:-fe.parse(t.h)/2}],stroke_width:0.1,pcb_silkscreen_path_id:""},i=3.2,r=1.9,s={type:"pcb_courtyard_rect",pcb_courtyard_rect_id:"",pcb_component_id:"",center:{x:0,y:0},width:3.2,height:1.9,layer:"top"};return{circuitJson:qfo(t).concat(...yh(t),o,n,s),parameters:t}},jfo=(e)=>{let{pn:t,p:n}=e;if(t===1)return{x:-n/2,y:0};return{x:n/2,y:0}},qfo=(e)=>{let t=[],n=fe.parse(e.p),o=fe.parse(e.pl),i=fe.parse(e.pw),r=0.05625;for(let s=1;s<=e.num_pins;s++){let{x:a,y:c}=jfo({pn:s,p:n});t.push(no(s,a,c,o,i,0.05625))}return t},Jfo=sCt("sod323he",{p:"2.1001mm",pw:"0.8mm",ph:"1.1mm",bodylength:"2mm",bodywidth:"1.4mm",bodyheight:"0.6mm",leadspan:"2.5mm",cathodelength:"0.55mm",cathodewidth:"0.8mm",anodelength:"0.55mm",anodewidth:"0.8mm",terminalthickness:"0.17mm",standoff:"0.05mm",taperinset:"0.15mm",markingwidth:"0.2mm"}),$fo=(e)=>{let t=Jfo.parse(e);return{circuitJson:aCt(t),parameters:t}},Zfo=Do.extend({fn:Z(),num_pins:Be(2).default(2),w:Z().default("1.4mm"),h:Z().default("0.9mm"),pl:Z().default("0.36mm"),pw:Z().default("0.25mm"),p:Z().default("0.85mm")}),e1o=(e)=>{let t=Zfo.parse(e),n=fe.parse(t.w),o=fe.parse(t.h),i=fe.parse(t.pl),r=fe.parse(t.pw),s=fe.parse(t.p),a=Oo(0,o,0.3),c={type:"pcb_silkscreen_path",layer:"top",pcb_component_id:"",route:[{x:s/2+0.15,y:o/2},{x:-n/2-0.15,y:o/2},{x:-n/2-0.15,y:-o/2},{x:s/2+0.15,y:-o/2}],stroke_width:0.1,pcb_silkscreen_path_id:""},l=s+i,d=r,u=n/2,h=o/2,A=l/2,m=d/2,p=Math.max(u,A),g=Math.max(h,m),_=Math.min(u,A),f=Math.min(h,m),y=p+0.05,x=_-0.055,C=g,I=f+0.155,b={type:"pcb_courtyard_outline",pcb_courtyard_outline_id:"",pcb_component_id:"",outline:t1([{minX:-y,maxX:y,minY:-I,maxY:I},{minX:-x,maxX:x,minY:-C,maxY:C}]),layer:"top"};return{circuitJson:n1o(t).concat(...yh(t),c,a,b),parameters:t}},t1o=(e)=>{let{pn:t,p:n}=e;if(t===1)return{x:-n/2,y:0};else return{x:n/2,y:0}},n1o=(e)=>{let t=[],n=fe.parse(e.p),o=fe.parse(e.pl),i=fe.parse(e.pw),r=0.03125;for(let s=1;s<=e.num_pins;s++){let{x:a,y:c}=t1o({pn:s,p:n});t.push(no(s,a,c,o,i,0.03125))}return t},o1o=Do.extend({fn:Z(),num_pins:Be(2).default(2),w:Z().default("1.3mm"),h:Z().default("0.9mm"),pl:Z().default("0.4mm"),pw:Z().default("0.7mm"),p:Z().default("0.7mm")}),i1o=(e)=>{let t=o1o.parse(e),n=Oo(0,fe.parse(t.h)+0.1,0.3),o={type:"pcb_silkscreen_path",layer:"top",pcb_component_id:"",route:[{x:fe.parse(t.p)/2+0.2,y:fe.parse(t.h)/2+0.2},{x:-fe.parse(t.w)/2-0.2,y:fe.parse(t.h)/2+0.2},{x:-fe.parse(t.w)/2-0.2,y:-fe.parse(t.h)/2-0.2},{x:fe.parse(t.p)/2+0.2,y:-fe.parse(t.h)/2-0.2}],stroke_width:0.1,pcb_silkscreen_path_id:""},i=1.6,r=1.2,s={type:"pcb_courtyard_rect",pcb_courtyard_rect_id:"",pcb_component_id:"",center:{x:0,y:0},width:1.6,height:1.2,layer:"top"};return{circuitJson:s1o(t).concat(...yh(t),o,n,s),parameters:t}},r1o=(e)=>{let{pn:t,p:n}=e;if(t===1)return{x:-n/2,y:0};else return{x:n/2,y:0}},s1o=(e)=>{let t=[];for(let n=1;n<=e.num_pins;n++){let{x:o,y:i}=r1o({pn:n,p:fe.parse(e.p)});t.push(no(n,o,i,fe.parse(e.pl),fe.parse(e.pw),0.025))}return t},a1o=Do.extend({fn:Z(),num_pins:Be(2).default(2),w:Z().default("3.05mm"),h:Z().default("1.4mm"),pl:Z().default("0.5mm"),pw:Z().default("0.5mm"),pad_spacing:Z().default("2.2mm")}),c1o=(e)=>{let t=a1o.parse(e),n=Oo(0,fe.parse(t.h),0.3),o={type:"pcb_silkscreen_path",layer:"top",pcb_component_id:"",route:[{x:fe.parse(t.pad_spacing)/2,y:fe.parse(t.h)/2},{x:-fe.parse(t.w)/2-0.2,y:fe.parse(t.h)/2},{x:-fe.parse(t.w)/2-0.2,y:-fe.parse(t.h)/2},{x:fe.parse(t.pad_spacing)/2,y:-fe.parse(t.h)/2}],stroke_width:0.1,pcb_silkscreen_path_id:""},i=3.2,r=1.9,s={type:"pcb_courtyard_rect",pcb_courtyard_rect_id:"",pcb_component_id:"",center:{x:0,y:0},width:3.2,height:1.9,layer:"top"};return{circuitJson:d1o(t).concat(...yh(t),o,n,s),parameters:t}},l1o=(e)=>{let{pn:t,pad_spacing:n}=e;if(t===1)return{x:-n/2,y:0};else return{x:n/2,y:0}},d1o=(e)=>{let t=[];for(let n=1;n<=e.num_pins;n++){let{x:o,y:i}=l1o({pn:n,pad_spacing:fe.parse(e.pad_spacing)});t.push(no(n,o,i,fe.parse(e.pl),fe.parse(e.pw),0.0625))}return t},u1o=Do.extend({fn:Z(),num_pins:Be(2).default(2),w:Z().default("4.4mm"),h:Z().default("2.1mm"),pl:Z().default("1.10mm"),pw:Z().default("1.10mm"),p:Z().default("2.8mm")}),h1o=(e)=>{let t=u1o.parse(e),n=Oo(0,fe.parse(t.h),0.3),o={type:"pcb_silkscreen_path",layer:"top",pcb_component_id:"",route:[{x:fe.parse(t.p)/2,y:fe.parse(t.h)/2},{x:-fe.parse(t.w)/2-0.2,y:fe.parse(t.h)/2},{x:-fe.parse(t.w)/2-0.2,y:-fe.parse(t.h)/2},{x:fe.parse(t.p)/2,y:-fe.parse(t.h)/2}],stroke_width:0.1,pcb_silkscreen_path_id:""},i=4.4,r=2.3,s={type:"pcb_courtyard_rect",pcb_courtyard_rect_id:"",pcb_component_id:"",center:{x:0,y:0},width:4.4,height:2.3,layer:"top"};return{circuitJson:p1o(t).concat(...yh(t),o,n,s),parameters:t}},m1o=(e)=>{let{pn:t,p:n}=e;if(t===1)return{x:-n/2,y:0};else return{x:n/2,y:0}},p1o=(e)=>{let t=[],n=fe.parse(e.p),o=fe.parse(e.pl),i=fe.parse(e.pw),r=0.125;for(let s=1;s<=e.num_pins;s++){let{x:a,y:c}=m1o({pn:s,p:n});t.push(no(s,a,c,o,i,0.125))}return t},A1o=Do.extend({fn:Z(),num_pins:Be(2).default(2),w:Z().default("4.4mm"),h:Z().default("2.1mm"),pl:Z().default("0.91mm"),pw:Z().default("1.22mm"),p:Z().default("3.146mm")}),_1o=(e)=>{let t=A1o.parse(e),n=Oo(0,fe.parse(t.h),0.3),o={type:"pcb_silkscreen_path",layer:"top",pcb_component_id:"",route:[{x:fe.parse(t.p)/2,y:fe.parse(t.h)/2},{x:-fe.parse(t.w)/2-0.2,y:fe.parse(t.h)/2},{x:-fe.parse(t.w)/2-0.2,y:-fe.parse(t.h)/2},{x:fe.parse(t.p)/2,y:-fe.parse(t.h)/2}],stroke_width:0.1,pcb_silkscreen_path_id:""},i=4.9,r=2.7,s={type:"pcb_courtyard_rect",pcb_courtyard_rect_id:"",pcb_component_id:"",center:{x:0,y:0},width:4.9,height:2.7,layer:"top"};return{circuitJson:f1o(t).concat(...yh(t),o,n,s),parameters:t}},g1o=(e)=>{let{pn:t,p:n}=e;if(t===1)return{x:-n/2,y:0};else return{x:n/2,y:0}},f1o=(e)=>{let t=[];for(let n=1;n<=e.num_pins;n++){let{x:o,y:i}=g1o({pn:n,p:fe.parse(e.p)});t.push(no(n,o,i,fe.parse(e.pl),fe.parse(e.pw)))}return t},y1o=Do.extend({fn:Z(),num_pins:Be(2).default(2),w:Z().default("1.80mm"),h:Z().default("1.00mm"),pl:Z().default("0.66mm"),pw:Z().default("0.5mm"),p:Z().default("0.8mm")}),x1o=(e)=>{let t=y1o.parse(e),n=Oo(0,fe.parse(t.h),0.3),o={type:"pcb_silkscreen_path",layer:"top",pcb_component_id:"",route:[{x:fe.parse(t.p)/2,y:fe.parse(t.h)/2},{x:-fe.parse(t.w)/2-0.1,y:fe.parse(t.h)/2},{x:-fe.parse(t.w)/2-0.1,y:-fe.parse(t.h)/2},{x:fe.parse(t.p)/2,y:-fe.parse(t.h)/2}],stroke_width:0.1,pcb_silkscreen_path_id:""},i=2.3,r=1.5,s={type:"pcb_courtyard_rect",pcb_courtyard_rect_id:"",pcb_component_id:"",center:{x:0,y:0},width:2.3,height:1.5,layer:"top"};return{circuitJson:I1o(t).concat(...yh(t),o,n,s),parameters:t}},C1o=(e)=>{let{pn:t,p:n}=e;if(t===1)return{x:-n/2,y:0};else return{x:n/2,y:0}},I1o=(e)=>{let t=[];for(let n=1;n<=e.num_pins;n++){let{x:o,y:i}=C1o({pn:n,p:fe.parse(e.p)});t.push(no(n,o,i,fe.parse(e.pl),fe.parse(e.pw)))}return t},b1o=Do.extend({fn:Z(),num_pins:Be(2).default(2),w:Z().default("6.2mm"),h:Z().default("3.4mm"),pl:Z().default("1.4mm"),pw:Z().default("2.1mm"),p:Z().default("4.4mm")}),S1o=(e)=>{let t=b1o.parse(e),n=Oo(0,fe.parse(t.h)/2+0.4,0.3),o={type:"pcb_silkscreen_path",layer:"top",pcb_component_id:"",route:[{x:fe.parse(t.p)/2,y:fe.parse(t.h)/2},{x:-fe.parse(t.w)/2-0.2,y:fe.parse(t.h)/2},{x:-fe.parse(t.w)/2-0.2,y:-fe.parse(t.h)/2},{x:fe.parse(t.p)/2,y:-fe.parse(t.h)/2}],stroke_width:0.1,pcb_silkscreen_path_id:""},i=6.3,r=3,s={type:"pcb_courtyard_rect",pcb_courtyard_rect_id:"",pcb_component_id:"",center:{x:0,y:0},width:6.3,height:3,layer:"top"};return{circuitJson:v1o(t).concat(...yh(t),o,n,s),parameters:t}},P1o=(e)=>{let{pn:t,p:n}=e;if(t===1)return{x:-n/2,y:0};else return{x:n/2,y:0}},v1o=(e)=>{let t=[];for(let n=1;n<=e.num_pins;n++){let{x:o,y:i}=P1o({pn:n,p:fe.parse(e.p)});t.push(no(n,o,i,fe.parse(e.pl),fe.parse(e.pw),0.125))}return t},E1o=[{x:-2.85,y:-2.5},{x:-2.85,y:2.5},{x:2.25,y:2.5},{x:2.25,y:-2.5}],M1o=[{x:-2.85,y:-2.5},{x:-2.85,y:2.5},{x:2.85,y:2.5},{x:2.85,y:-2.5}],B1o=[{x:0.9,y:0.5},{x:2.6,y:0.5},{x:2.6,y:-0.5},{x:0.9,y:-0.5},{x:0.4,y:-1},{x:-0.4,y:-1},{x:-0.9,y:-0.5},{x:-2.6,y:-0.5},{x:-2.6,y:0.5},{x:-0.9,y:0.5},{x:-0.4,y:1},{x:0.4,y:1}],w1o=[{x:2,y:-0.8665},{x:-1.125,y:-0.8665},{x:-1.125,y:-0.45},{x:-2.6,y:-0.45},{x:-2.6,y:0.45},{x:-1.125,y:0.45},{x:-1.125,y:0.8665},{x:2,y:0.8665}],T1o=Do.extend({fn:Z(),num_pins:kn([Be(3),Be(5)]).default(3),w:Z().default("4.20mm"),h:Z().default("4.80mm"),pl:Z().default("1.3mm"),pw:Z().default("0.9mm"),p:Z().default("1.5mm"),string:Z().optional()}),D1o=(e)=>{let t=Number.parseFloat(e.p),n=Number.parseFloat(e.pw),o=Number.parseFloat(e.w),i=Number.parseFloat(e.pl),r=Math.min(i,n)/8,s=-o/2+0.15,a=o/2-1,c=Number.parseFloat(e.h)/2,l=[no(1,s,t,i,n,r),U8e(2,w1o),no(3,s,-t,i,n,r)],d=Oo(0,c+0.5,0.3),u={layer:"top",pcb_component_id:"",pcb_silkscreen_path_id:"silkscreen_path_1",route:[{x:-a,y:c},{x:a,y:c},{x:a,y:c/2+0.5}],type:"pcb_silkscreen_path",stroke_width:0.1},h={layer:"top",pcb_component_id:"",pcb_silkscreen_path_id:"silkscreen_path_2",route:[{x:-a,y:-c},{x:a,y:-c},{x:a,y:-c/2-0.5}],type:"pcb_silkscreen_path",stroke_width:0.1},A={type:"pcb_courtyard_outline",pcb_courtyard_outline_id:"",pcb_component_id:"",outline:E1o,layer:"top"};return[...l,u,h,d,A]},N1o=(e)=>{let t=Math.min(1.5,0.7)/8,n=[no(1,-1.85,-1.5,1.5,0.7,t),no(2,-1.85,1.5,1.5,0.7,t),U8e(3,B1o),no(4,1.85,-1.5,1.5,0.7,t),no(5,1.85,1.5,1.5,0.7,t)],o=Number.parseFloat(e.w)/2-1,i=Number.parseFloat(e.h)/2,r=Oo(0,i+0.5,0.3),s={layer:"top",pcb_component_id:"",pcb_silkscreen_path_id:"silkscreen_path_1",route:[{x:-o,y:i},{x:o,y:i}],type:"pcb_silkscreen_path",stroke_width:0.1},a={layer:"top",pcb_component_id:"",pcb_silkscreen_path_id:"silkscreen_path_2",route:[{x:-o,y:-i},{x:o,y:-i}],type:"pcb_silkscreen_path",stroke_width:0.1},c={type:"pcb_courtyard_outline",pcb_courtyard_outline_id:"",pcb_component_id:"",outline:M1o,layer:"top"};return[...n,s,a,r,c]},R1o=(e)=>{let t=e.string?.match(/^sot89_(\d+)/),n=t?Number.parseInt(t[1],10):3,o=T1o.parse({...e,num_pins:n});if(o.num_pins===3)return{circuitJson:D1o(o),parameters:o};if(o.num_pins===5)return{circuitJson:N1o(o),parameters:o};throw Error("Invalid number of pins for SOT89")},Q1o=Do.extend({fn:Z(),p:fe.optional().default("5.0mm"),id:fe.optional().default("1.0mm"),od:fe.optional().default("1.9mm"),w:fe.optional().default("13mm"),h:fe.optional().default("7mm"),num_pins:He().optional(),string:Z().optional()}),mCt=(e)=>{let t=Q1o.parse(e),{id:n,od:o,w:i,h:r,string:s}=t,a=t.num_pins??Number.parseInt(s?.match(/^to220(?:_|-)(\d+)/i)?.[1]??"3"),c=-1,l=i/2,d=r/2,u=2.5,h=i*0.4,A=Math.max(2.5,h/(a-1)),m=Array.from({length:a},(F,H)=>{let z=a%2===0?(H-a/2+0.5)*A:(H-Math.floor(a/2))*A;return xr(H+1,z,-1,n,o)}),p={type:"pcb_silkscreen_path",layer:"top",pcb_component_id:"",route:[{x:-l,y:-d},{x:l,y:-d},{x:l,y:d},{x:-l,y:d},{x:-l,y:-d}],stroke_width:0.1,pcb_silkscreen_path_id:""},g=-d+2*r/3,_={type:"pcb_silkscreen_path",layer:"top",pcb_component_id:"",route:[{x:-l,y:g},{x:l,y:g}],stroke_width:0.1,pcb_silkscreen_path_id:""},f=[{type:"pcb_silkscreen_path",layer:"top",pcb_component_id:"",route:[{x:-i/6,y:g},{x:-i/6,y:d}],stroke_width:0.1,pcb_silkscreen_path_id:""},{type:"pcb_silkscreen_path",layer:"top",pcb_component_id:"",route:[{x:i/6,y:g},{x:i/6,y:d}],stroke_width:0.1,pcb_silkscreen_path_id:""}],y=Oo(0,r/2+0.6,0.5),x=Math.max(...m.map((F)=>Math.abs(F.x)))+o/2,C=-1+o/2,I=-1-o/2,b=Math.max(x+0.25,l-o*0.59),P=d-o*0.63,E=I-(o/2+0.01),B=-b,w=b,T=Math.min(E,I-0.25),Q=Math.max(P,C+0.25),N={type:"pcb_courtyard_rect",pcb_courtyard_rect_id:"",pcb_component_id:"",center:{x:(B+w)/2,y:(T+Q)/2},width:w-B,height:Q-T,layer:"top"};return{circuitJson:[...m,p,_,...f,y,N],parameters:{...t,p:A}}},H8e=2.54,k1o=Do.extend({fn:Z(),id:fe.optional().default("1.2mm"),od:fe.optional().default("1.905mm"),ph:fe.optional().default("2mm"),w:fe.optional().default("13mm"),h:fe.optional().default("7mm"),num_pins:He().optional(),string:Z().optional()}),L1o=(e)=>{let t=k1o.parse(e),n=t.num_pins??Number.parseInt(t.string?.match(/^to220f(?:_|-)(\d+)/i)?.[1]??"3"),o=mCt({...t,fn:"to220",string:t.string?.replace(/^to220f/i,"to220"),num_pins:n}),i=-1,r=Array.from({length:n},(a,c)=>{let l=n%2===0?(c-n/2+0.5)*H8e:(c-Math.floor(n/2))*H8e;if(c===0)return e1({pn:1,x:l,y:-1,holeDiameter:t.id,rectPadWidth:t.od,rectPadHeight:t.ph});return rE(c+1,l,-1,yr(t.id),yr(t.od),yr(t.ph))}),s=o.circuitJson.filter((a)=>a.type!=="pcb_plated_hole");return{circuitJson:[...r,...s],parameters:{...t,p:H8e,num_pins:n}}},F1o=Do.extend({fn:Z(),num_pins:Be(2).default(2),w:Z().default("5.40mm"),h:Z().default("2.30mm"),pl:Z().default("1.30mm"),pw:Z().default("1.70mm"),p:Z().default("3.5mm")}),H1o=(e)=>{let t=F1o.parse(e),n=Oo(0,fe.parse(t.h)/2+0.4,0.3),o={type:"pcb_silkscreen_path",layer:"top",pcb_component_id:"",route:[{x:fe.parse(t.p)/2,y:fe.parse(t.h)/2},{x:-fe.parse(t.w)/2,y:fe.parse(t.h)/2},{x:-fe.parse(t.w)/2,y:-fe.parse(t.h)/2},{x:fe.parse(t.p)/2,y:-fe.parse(t.h)/2}],stroke_width:0.1,pcb_silkscreen_path_id:""},i=5.3,r=2.2,s={type:"pcb_courtyard_rect",pcb_courtyard_rect_id:"",pcb_component_id:"",center:{x:0,y:0},width:5.3,height:2.2,layer:"top"};return{circuitJson:z1o(t).concat(...yh(t),o,n,s),parameters:t}},O1o=(e)=>{let{pn:t,p:n}=e;return t===1?{x:-n/2,y:0}:{x:n/2,y:0}},z1o=(e)=>{let t=[];for(let n=1;n<=e.num_pins;n++){let{x:o,y:i}=O1o({pn:n,p:fe.parse(e.p)});t.push(no(n,o,i,fe.parse(e.pl),fe.parse(e.pw),0.125))}return t},G1o=Do.extend({fn:Z(),num_pins:Be(2).default(2),w:Z().default("1.90mm"),h:Z().default("1.33mm"),pl:Z().default("0.5mm"),pw:Z().default("0.7mm"),p:Z().default("0.8mm")}),Y1o=(e)=>{let t=G1o.parse(e),n=Oo(0,fe.parse(t.h)+0.1,0.3),o={type:"pcb_silkscreen_path",layer:"top",pcb_component_id:"",route:[{x:fe.parse(t.p)/2+0.1,y:fe.parse(t.h)/2},{x:-fe.parse(t.w)/2,y:fe.parse(t.h)/2},{x:-fe.parse(t.w)/2,y:-fe.parse(t.h)/2},{x:fe.parse(t.p)/2+0.1,y:-fe.parse(t.h)/2}],stroke_width:0.1,pcb_silkscreen_path_id:""},i=1.8,r=1.2,s={type:"pcb_courtyard_rect",pcb_courtyard_rect_id:"",pcb_component_id:"",center:{x:0,y:0},width:1.8,height:1.2,layer:"top"};return{circuitJson:U1o(t).concat(...yh(t),o,n,s),parameters:t}};var V1o=(e)=>{let{pn:t,p:n}=e;if(t===1)return{x:-n/2,y:0};else return{x:n/2,y:0}},U1o=(e)=>{let t=[];for(let n=1;n<=e.num_pins;n++){let{x:o,y:i}=V1o({pn:n,p:fe.parse(e.p)});t.push(no(n,o,i,fe.parse(e.pl),fe.parse(e.pw),0.0625))}return t},W1o=Do.extend({fn:Z(),num_pins:Be(2).default(2),w:Z().default("7.0mm"),h:Z().default("3.35mm"),pl:Z().default("1.50mm"),pw:Z().default("2.70mm"),p:Z().default("4.8mm")}),X1o=(e)=>{let t=W1o.parse(e),n=Oo(0,fe.parse(t.h),0.3),o={type:"pcb_silkscreen_path",layer:"top",pcb_component_id:"",route:[{x:fe.parse(t.p)/2,y:fe.parse(t.h)/2},{x:-fe.parse(t.w)/2,y:fe.parse(t.h)/2},{x:-fe.parse(t.w)/2,y:-fe.parse(t.h)/2},{x:fe.parse(t.p)/2,y:-fe.parse(t.h)/2}],stroke_width:0.1,pcb_silkscreen_path_id:""},i=6.8,r=3.2,s={type:"pcb_courtyard_rect",pcb_courtyard_rect_id:"",pcb_component_id:"",center:{x:0,y:0},width:6.8,height:3.2,layer:"top"};return{circuitJson:j1o(t).concat(...yh(t),o,n,s),parameters:t}},K1o=(e)=>{let{pn:t,p:n}=e;if(t===1)return{x:-n/2,y:0};else return{x:n/2,y:0}},j1o=(e)=>{let t=[];for(let n=1;n<=e.num_pins;n++){let{x:o,y:i}=K1o({pn:n,p:fe.parse(e.p)});t.push(no(n,o,i,fe.parse(e.pl),fe.parse(e.pw),0.125))}return t},q1o=Do.extend({fn:Z(),num_pins:Be(2).default(2),w:Z().default("3.0mm"),h:Z().default("1.80mm"),pl:Z().default("0.80mm"),pw:Z().default("1.20mm"),p:Z().default("1.6mm")}),J1o=(e)=>{let t=q1o.parse(e),n=Oo(0,fe.parse(t.h),0.3),o={type:"pcb_silkscreen_path",layer:"top",pcb_component_id:"",route:[{x:fe.parse(t.p)/2,y:fe.parse(t.h)/2},{x:-fe.parse(t.w)/2-0.1,y:fe.parse(t.h)/2},{x:-fe.parse(t.w)/2-0.1,y:-fe.parse(t.h)/2},{x:fe.parse(t.p)/2,y:-fe.parse(t.h)/2}],stroke_width:0.1,pcb_silkscreen_path_id:""},i=2.9,r=1.7,s={type:"pcb_courtyard_rect",pcb_courtyard_rect_id:"",pcb_component_id:"",center:{x:0,y:0},width:2.9,height:1.7,layer:"top"};return{circuitJson:Z1o(t).concat(...yh(t),o,n,s),parameters:t}},$1o=(e)=>{let{pn:t,p:n}=e;if(t===1)return{x:-n/2,y:0};else return{x:n/2,y:0}},Z1o=(e)=>{let t=[];for(let n=1;n<=e.num_pins;n++){let{x:o,y:i}=$1o({pn:n,p:fe.parse(e.p)});t.push(no(n,o,i,fe.parse(e.pl),fe.parse(e.pw),0.1))}return t},eyo=Do.extend({fn:Z(),num_pins:Be(2).default(2),w:Z().default("7.10mm"),h:Z().default("3.40mm"),pl:Z().default("2.50mm"),pw:Z().default("1.80mm"),p:Z().default("4.00mm")}),tyo=(e)=>{let t=eyo.parse(e),n=Oo(0,fe.parse(t.h)/2+0.5,0.3),o={type:"pcb_silkscreen_path",layer:"top",pcb_component_id:"",route:[{x:fe.parse(t.p)/2,y:fe.parse(t.h)/2},{x:-fe.parse(t.w)/2-0.5,y:fe.parse(t.h)/2},{x:-fe.parse(t.w)/2-0.5,y:-fe.parse(t.h)/2},{x:fe.parse(t.p)/2,y:-fe.parse(t.h)/2}],stroke_width:0.1,pcb_silkscreen_path_id:""},i=7,r=3.5,s={type:"pcb_courtyard_rect",pcb_courtyard_rect_id:"",pcb_component_id:"",center:{x:0,y:0},width:7,height:3.5,layer:"top"};return{circuitJson:oyo(t).concat(...yh(t),o,n,s),parameters:t}},nyo=(e)=>{let{pn:t,p:n}=e;if(t===1)return{x:-n/2,y:0};return{x:n/2,y:0}},oyo=(e)=>{let t=[];for(let n=1;n<=e.num_pins;n++){let{x:o,y:i}=nyo({pn:n,p:fe.parse(e.p)});t.push(no(n,o,i,fe.parse(e.pl),fe.parse(e.pw),0.125))}return t},iyo=Do.extend({fn:Z(),num_pins:Be(2).default(2),w:Z().default("4.80mm"),h:Z().default("2.10mm"),pl:Z().default("1.30mm"),pw:Z().default("1.40mm"),p:Z().default("2.9mm")}),ryo=(e)=>{let t=iyo.parse(e),n=Oo(0,fe.parse(t.h)-0.5,0.3),o={type:"pcb_silkscreen_path",layer:"top",pcb_component_id:"",route:[{x:fe.parse(t.p)/2,y:fe.parse(t.h)/2},{x:-fe.parse(t.w)/2,y:fe.parse(t.h)/2},{x:-fe.parse(t.w)/2,y:-fe.parse(t.h)/2},{x:fe.parse(t.p)/2,y:-fe.parse(t.h)/2}],stroke_width:0.1,pcb_silkscreen_path_id:""},i=4.7,r=2.3,s={type:"pcb_courtyard_rect",pcb_courtyard_rect_id:"",pcb_component_id:"",center:{x:0,y:0},width:4.7,height:2.3,layer:"top"};return{circuitJson:ayo(t).concat(...yh(t),o,n,s),parameters:t}},syo=(e)=>{let{pn:t,p:n}=e;if(t===1)return{x:-n/2,y:0};else return{x:n/2,y:0}},ayo=(e)=>{let t=[];for(let n=1;n<=e.num_pins;n++){let{x:o,y:i}=syo({pn:n,p:fe.parse(e.p)});t.push(no(n,o,i,fe.parse(e.pl),fe.parse(e.pw),0.125))}return t},cyo=Do.extend({fn:Z(),num_pins:Be(2).default(2),w:Z().default("7.30mm"),h:Z().default("4.40mm"),pl:Z().default("2.50mm"),pw:Z().default("2.30mm"),p:Z().default("4.30mm")}),lyo=(e)=>{let t=cyo.parse(e),n=Oo(0,fe.parse(t.h)/2+0.5,0.3),o={type:"pcb_silkscreen_path",layer:"top",pcb_component_id:"",route:[{x:fe.parse(t.p)/2,y:fe.parse(t.h)/2},{x:-fe.parse(t.w)/2-0.1,y:fe.parse(t.h)/2},{x:-fe.parse(t.w)/2-0.1,y:-fe.parse(t.h)/2},{x:fe.parse(t.p)/2,y:-fe.parse(t.h)/2}],stroke_width:0.1,pcb_silkscreen_path_id:""},i=7.3,r=4.5,s={type:"pcb_courtyard_rect",pcb_courtyard_rect_id:"",pcb_component_id:"",center:{x:0,y:0},width:7.3,height:4.5,layer:"top"};return{circuitJson:uyo(t).concat(...yh(t),o,n,s),parameters:t}},dyo=(e)=>{let{pn:t,p:n}=e;if(t===1)return{x:-n/2,y:0};else return{x:n/2,y:0}},uyo=(e)=>{let t=[];for(let n=1;n<=e.num_pins;n++){let{x:o,y:i}=dyo({pn:n,p:fe.parse(e.p)});t.push(no(n,o,i,fe.parse(e.pl),fe.parse(e.pw),0.125))}return t},hyo=Do.extend({fn:Z(),num_pins:Be(2).default(2),w:Z().default("10.70mm"),h:Z().default("6.60mm"),pl:Z().default("2.50mm"),pw:Z().default("3.30mm"),p:Z().default("6.80mm")}),myo=(e)=>{let t=hyo.parse(e),n=Oo(0,3,0.3),o={type:"pcb_silkscreen_path",layer:"top",pcb_component_id:"",route:[{x:fe.parse(t.p)/2,y:fe.parse(t.h)/2-0.8},{x:-fe.parse(t.w)/2-0.8,y:fe.parse(t.h)/2-0.8},{x:-fe.parse(t.w)/2-0.8,y:-fe.parse(t.h)/2+0.8},{x:fe.parse(t.p)/2,y:-fe.parse(t.h)/2+0.8}],stroke_width:0.1,pcb_silkscreen_path_id:""},i=9.8,r=6.7,s={type:"pcb_courtyard_rect",pcb_courtyard_rect_id:"",pcb_component_id:"",center:{x:0,y:0},width:9.8,height:6.7,layer:"top"};return{circuitJson:Ayo(t).concat(...yh(t),o,n,s),parameters:t}},pyo=(e)=>{let{pn:t,p:n}=e;if(t===1)return{x:-n/2,y:0};return{x:n/2,y:0}},Ayo=(e)=>{let t=[];for(let n=1;n<=e.num_pins;n++){let{x:o,y:i}=pyo({pn:n,p:fe.parse(e.p)});t.push(no(n,o,i,fe.parse(e.pl),fe.parse(e.pw),0.125))}return t},_yo=Do.extend({fn:Z(),num_pins:He().default(4),w:Z().default("8.50mm"),h:Z().default("6.90mm"),pl:Z().default("2mm"),pw:Z().default("1.5mm"),p:Z().default("2.30mm"),tabpl:Z().optional(),tabpw:Z().default("3.8mm"),taboffset:Z().default("0mm"),string:Z().optional()}),gyo=(e)=>{let t=e.string?.match(/^sot223_(\d+)/),n=t?Number.parseInt(t[1],10):4;if(n===8){let i=xyo.parse({...e,num_pins:n});return{circuitJson:oZ(i),parameters:i}}let o=_yo.parse({...e,num_pins:n});if(o.num_pins===4)return{circuitJson:yyo(o),parameters:o};if(o.num_pins===5)return{circuitJson:Iyo(o),parameters:o};if(o.num_pins===6)return{circuitJson:Syo(o),parameters:o};throw Error("Invalid number of pins")},fyo=(e)=>{let{pn:t,w:n,h:o,pl:i,p:r,taboffset:s}=e;if(t===1)return{x:-n/2+1.1,y:r};if(t===2)return{x:-n/2+1.1,y:0};if(t===3)return{x:-n/2+1.1,y:-r};return{x:n/2-1.1+s,y:0}},yyo=(e)=>{let t=[],n=0,o=0,i=Number.parseFloat(e.w),r=Number.parseFloat(e.h),s=Number.parseFloat(e.pl),a=Number.parseFloat(e.p),c=Number.parseFloat(e.pw),l=Number.parseFloat(e.tabpl??e.pl),d=Number.parseFloat(e.tabpw),u=Number.parseFloat(e.taboffset);for(let I=0;I<e.num_pins;I++){let{x:b,y:P}=fyo({num_pins:e.num_pins,pn:I+1,w:i,h:r,pl:s,p:a,taboffset:u}),E=I===3?d:c,B=I===3?l:s,w=Math.min(B,E)/8;n=Math.max(n,Math.abs(b)+B/2),o=Math.max(o,Math.abs(P)+E/2),t.push(no(I+1,b,P,B,E,w))}let h=Oo(0,0,0.3),A=i/2-2.4,m=r/2,p={layer:"top",pcb_component_id:"",pcb_silkscreen_path_id:"silkscreen_path_1",route:[{x:-A,y:m},{x:A,y:m},{x:A,y:m/2+0.5}],type:"pcb_silkscreen_path",stroke_width:0.1},g={layer:"top",pcb_component_id:"",pcb_silkscreen_path_id:"silkscreen_path_2",route:[{x:-A,y:-m},{x:A,y:-m},{x:A,y:-m/2-0.5}],type:"pcb_silkscreen_path",stroke_width:0.1},_=i/2,f=r/2,y=Math.max(n+0.25,_+0.15),x=Math.max(o+0.25,f+0.15),C={type:"pcb_courtyard_rect",pcb_courtyard_rect_id:"",pcb_component_id:"",center:{x:0,y:0},width:2*y,height:2*x,layer:"top"};return[...t,p,g,h,C]},xyo=VQ({p:"0.90mm",w:"2.8mm",legsoutside:!0}),Cyo=(e)=>{let{p:t,h:n,pn:o,w:i}=e;if(o===1)return{x:-i/2+1.2,y:t/2+t};if(o===2)return{x:-i/2+1.2,y:t/2};if(o===3)return{x:-i/2+1.2,y:-t/2};if(o===4)return{x:-i/2+1.2,y:-t/2-t};if(o===5)return{x:i/2-1,y:0};throw Error("Invalid pin number")},Iyo=(e)=>{let t=[],n=0,o=0,i=Number.parseFloat(e.w),r=Number.parseFloat(e.h);for(let g=1;g<=e.num_pins;g++){let{x:_,y:f}=Cyo({h:r,p:1.5,pn:g,w:i}),y=Number.parseFloat(e.pw),x=Number.parseFloat(e.pl);if(g===5)y=3.4,x=1.8;else y=1,x=2.2;let C=Math.min(x,y)/8;n=Math.max(n,Math.abs(_)+x/2),o=Math.max(o,Math.abs(f)+y/2),t.push(no(g,_,f,x,y,C))}let s=i/2-2.4,a=r/2,c={layer:"top",pcb_component_id:"",pcb_silkscreen_path_id:"silkscreen_path_1",route:[{x:-s,y:a},{x:s,y:a},{x:s,y:a/2+0.5}],type:"pcb_silkscreen_path",stroke_width:0.1},l={layer:"top",pcb_component_id:"",pcb_silkscreen_path_id:"silkscreen_path_2",route:[{x:-s,y:-a},{x:s,y:-a},{x:s,y:-a/2-0.5}],type:"pcb_silkscreen_path",stroke_width:0.1},d=Oo(0,0,0.3),u=i/2,h=r/2,A=Math.max(n+0.25,u+0.15),m=Math.max(o+0.25,h+0.15),p={type:"pcb_courtyard_rect",pcb_courtyard_rect_id:"",pcb_component_id:"",center:{x:0,y:0},width:2*A,height:2*m,layer:"top"};return[...t,c,l,d,p]},byo=(e)=>{let{p:t,h:n,pn:o,w:i}=e;if(o===1)return{x:-i/2+1.2,y:2*t};if(o===2)return{x:-i/2+1.2,y:t};if(o===3)return{x:-i/2+1.2,y:0};if(o===4)return{x:-i/2+1.2,y:-t};if(o===5)return{x:-i/2+1.2,y:-2*t};if(o===6)return{x:i/2-1.175,y:0};throw Error("Invalid pin number")},Syo=(e)=>{let t=[],n=0,o=0,i=Number.parseFloat(e.h),r=8.7;for(let g=1;g<=e.num_pins;g++){let{x:_,y:f}=byo({h:i,p:1.3,pn:g,w:r}),y=Number.parseFloat(e.pw),x=Number.parseFloat(e.pl);if(g===6)y=3.4,x=2.15;else y=0.6,x=2.2;let C=Math.min(x,y)/8;n=Math.max(n,Math.abs(_)+x/2),o=Math.max(o,Math.abs(f)+y/2),t.push(no(g,_,f,x,y,C))}let s=Number.parseFloat(e.w)/2-2.4,a=i/2,c={layer:"top",pcb_component_id:"",pcb_silkscreen_path_id:"silkscreen_path_1",route:[{x:-s,y:a},{x:s,y:a},{x:s,y:a/2+0.5}],type:"pcb_silkscreen_path",stroke_width:0.1},l={layer:"top",pcb_component_id:"",pcb_silkscreen_path_id:"silkscreen_path_2",route:[{x:-s,y:-a},{x:s,y:-a},{x:s,y:-a/2-0.5}],type:"pcb_silkscreen_path",stroke_width:0.1},d=Oo(0,0,0.3),u=Number.parseFloat(e.w)/2,h=i/2,A=Math.max(n+0.25,u+0.15),m=Math.max(o+0.25,h+0.15),p={type:"pcb_courtyard_rect",pcb_courtyard_rect_id:"",pcb_component_id:"",center:{x:0,y:0},width:2*A,height:2*m,layer:"top"};return[...t,c,l,d,p]},Pyo=Do.extend({fn:Z(),num_pins:He().default(3),w:Z().default("3.40mm"),h:Z().default("3.30mm"),pl:Z().default("1mm"),pw:Z().default("0.7mm"),p:Z().default("1.2mm"),string:Z().optional()}),vyo=(e)=>{let t=e.string?.match(/^sot23w_(\d+)/),n=t?Number.parseInt(t[1],3):3,o=Pyo.parse({...e,num_pins:n});if(o.num_pins===3)return{circuitJson:Myo(o),parameters:o};throw Error("Invalid number of pins")},Eyo=(e)=>{let{pn:t,w:n,h:o,pl:i,p:r}=e;if(t===1)return{x:-r,y:0.95};if(t===2)return{x:-r,y:-0.95};return{x:r,y:0}},Myo=(e)=>{let t=[],n=Number.parseFloat(e.w),o=Number.parseFloat(e.h),i=Number.parseFloat(e.pl),r=Number.parseFloat(e.pw),s=Number.parseFloat(e.p),a=Math.min(i,r)/8;for(let y=0;y<e.num_pins;y++){let{x,y:C}=Eyo({num_pins:e.num_pins,pn:y+1,w:n,h:o,pl:i,p:s});t.push(no(y+1,x,C,i,r,a))}let c=Oo(0,Number.parseInt(e.h)/2+1,0.3),l=n/2-1,d=o/2,u={layer:"top",pcb_component_id:"",pcb_silkscreen_path_id:"silkscreen_path_1",route:[{x:-l,y:d},{x:l+0.3,y:d},{x:l+0.3,y:d/2}],type:"pcb_silkscreen_path",stroke_width:0.1},h={layer:"top",pcb_component_id:"",pcb_silkscreen_path_id:"silkscreen_path_2",route:[{x:-l,y:-d},{x:l+0.3,y:-d},{x:l+0.3,y:-d/2}],type:"pcb_silkscreen_path",stroke_width:0.1},A=s+i/2,m=0.95+r/2,p=o/2,g=A+0.25,_=Math.max(m+0.25,p+0.09),f={type:"pcb_courtyard_rect",pcb_courtyard_rect_id:"",pcb_component_id:"",center:{x:0,y:0},width:2*g,height:2*_,layer:"top"};return[...t,u,h,c,f]},Byo=Do.extend({fn:Z(),num_pins:kn([Be(3),Be(2)]).default(3),p:Z().default("1.27mm"),id:Z().default("0.72mm"),od:Z().default("0.95mm"),w:Z().default("2.5mm"),h:Z().default("4.2mm"),string:Z().optional()}),wyo=(e)=>{let{p:t,id:n,od:o,w:i,h:r}=e,s=Number.parseFloat(r)/2,a=Number.parseFloat(t);return[xr(1,-a,s-a,n,o),xr(2,0,s-a,n,o),xr(3,a,s-a,n,o)]},Tyo=(e)=>{let{p:t,id:n,od:o,h:i}=e,r=Number.parseFloat(i)/2,s=Number.parseFloat(t),a=Number.parseFloat(n),c=Number.parseFloat(o),l=c*1.4285714285714286;return[e1({pn:1,x:-s,y:r-s,holeDiameter:a,rectPadWidth:c,rectPadHeight:l}),rE(2,s,r-s,a,c,l)]},Dyo=(e)=>{let t=e.string?.match(/^to92s_(\d+)/),n=t?Number.parseInt(t[1],10):3,o=Byo.parse({...e,num_pins:n}),i=[];if(o.num_pins===3)i=wyo(o);else if(o.num_pins===2)i=Tyo(o);else throw Error("Invalid number of pins for TO-92");let r=Number.parseFloat(o.h)/2,s=Number.parseFloat(o.p),a={type:"pcb_silkscreen_path",layer:"top",pcb_component_id:"",route:[{x:-r,y:r-s},{x:-1.9,y:0},{x:1.9,y:0},{x:r,y:r-s},{x:1.5,y:Number.parseFloat(o.h)/2+0.5},{x:-1.5,y:Number.parseFloat(o.h)/2+0.5},{x:-r,y:r-s}],stroke_width:0.1,pcb_silkscreen_path_id:""},c=Oo(0,r+1,0.5),l=Number.parseFloat(o.od),d=r-s,u=-s-l/2,h=s+l/2,A=d-l/2,m=d+l/2,p=-r,g=r,_=0,f=r+0.5,y=Math.min(u,p)-0.25,x=Math.max(h,g)+0.25,C=Math.min(A,_)-0.25,I=Math.max(m,f)+0.25,b={type:"pcb_courtyard_rect",pcb_courtyard_rect_id:"",pcb_component_id:"",center:{x:(y+x)/2,y:(C+I)/2},width:x-y,height:I-C,layer:"top"};return{circuitJson:[...i,a,c,b],parameters:o}},Nyo=Do.extend({fn:Z(),p:fe.optional(),id:fe.optional(),pw:fe.optional(),pl:fe.optional(),w:fe.optional(),h:fe.optional(),mpx:fe.optional().describe("center-to-center distance between the SMD mounting pads"),mpy:fe.optional().describe("mounting-pad row distance from the signal-pad row"),mpw:fe.optional().describe("SMD mounting pad width"),mpl:fe.optional().describe("SMD mounting pad length"),mounttop:Ue().optional().describe("place SMD mounting pads above the signal-pad row"),smd:Ue().optional().describe("Generic surface-mount JST-style connector with one signal row and two mounting pads."),sh:Ue().optional().describe('JST SH (Surface-mount) connector family. SH stands for "Super High-density".'),ph:Ue().optional().describe('JST PH (Through-hole) connector family. PH stands for "Pin Header".'),zh:Ue().optional().describe("JST ZH (Through-hole) connector family. 1.5mm pitch wire-to-board."),xh:Ue().optional().describe("JST XH (Through-hole) connector family. 2.5mm pitch wire-to-board."),string:Z().optional()}),Ryo=()=>({minX:Number.POSITIVE_INFINITY,maxX:Number.NEGATIVE_INFINITY,minY:Number.POSITIVE_INFINITY,maxY:Number.NEGATIVE_INFINITY}),$7=({bounds:e,centerX:t,centerY:n,width:o,height:i})=>{let r=o/2,s=i/2;e.minX=Math.min(e.minX,t-r),e.maxX=Math.max(e.maxX,t+r),e.minY=Math.min(e.minY,n-s),e.maxY=Math.max(e.maxY,n+s)},Qyo={ph:{p:fe.parse("2mm"),id:fe.parse("0.75mm"),pw:fe.parse("1.20mm"),pl:fe.parse("1.75mm"),h:fe.parse("5mm")},sh:{p:fe.parse("1mm"),pw:fe.parse("0.6mm"),pl:fe.parse("1.55mm"),w:fe.parse("5.8mm"),h:fe.parse("7.8mm")},smd:{p:fe.parse("2mm"),id:0,pw:fe.parse("1mm"),pl:fe.parse("3mm"),mpw:fe.parse("1.8mm"),mpl:fe.parse("3mm"),mpy:fe.parse("2.5mm"),w:fe.parse("8mm"),h:fe.parse("5mm")},zh:{p:fe.parse("1.5mm"),id:fe.parse("0.73mm"),pw:fe.parse("1.03mm"),pl:fe.parse("1.73mm"),w:fe.parse("3mm"),h:fe.parse("3.5mm")},xh:{p:fe.parse("2.5mm"),pw:fe.parse("1.7mm")}};function kyo(e){if(e.smd)return"smd";if(e.sh)return"sh";if(e.ph)return"ph";if(e.zh)return"zh";if(e.xh)return"xh";return"ph"}function Lyo({variant:e,numPins:t,p:n,id:o,pw:i,pl:r,mpx:s,mpy:a,mpw:c,mpl:l,mounttop:d}){let u=[],h=Ryo(),A=0;if(e==="smd"){let m=-((t-1)/2)*n;for(let g=0;g<t;g++){let _=m+g*n;u.push(no(g+1,_,0,i,r)),$7({bounds:h,centerX:_,centerY:0,width:i,height:r})}let p=a===0?0:(d?1:-1)*a;for(let[g,_]of[-s/2,s/2].entries())u.push(no(t+g+1,_,p,c,l)),$7({bounds:h,centerX:_,centerY:p,width:c,height:l});A=Math.max(r/2,l/2)}else if(e==="ph"){let m=-((t-1)/2)*n;for(let p=0;p<t;p++){let g=m+p*n;if(p===0)u.push(e1({pn:p+1,x:g,y:0,holeDiameter:o,rectPadWidth:i,rectPadHeight:r,rectBorderRadius:0.1249998}));else u.push(rE(p+1,g,0,o,i,r));$7({bounds:h,centerX:g,centerY:0,width:i,height:r}),A=Math.max(A,r/2)}}else if(e==="zh"){let m=-((t-1)/2)*n;for(let p=0;p<t;p++){let g=m+p*n;if(p===0)u.push(e1({pn:p+1,x:g,y:0,holeDiameter:o,rectPadWidth:i,rectPadHeight:r,rectBorderRadius:0.12499977}));else u.push(rE(p+1,g,0,o,i,r));$7({bounds:h,centerX:g,centerY:0,width:i,height:r}),A=Math.max(A,r/2)}}else if(e==="xh"){let m=-((t-1)/2)*n;for(let p=0;p<t;p++){let g=m+p*n;if(p===0)u.push(e1({pn:p+1,x:g,y:0,holeDiameter:o,rectPadWidth:i,rectPadHeight:r,rectBorderRadius:0.12500015}));else u.push(rE(p+1,g,0,o,i,r));$7({bounds:h,centerX:g,centerY:0,width:i,height:r}),A=Math.max(A,r/2)}}else{let m=-((t-1)/2)*n;for(let g=0;g<t;g++){let _=m+g*n;u.push(no(g+1,_,-1.325,i,r)),$7({bounds:h,centerX:_,centerY:-1.325,width:i,height:r}),A=Math.max(A,r/2)}let p=(t-1)/2*n+1.3;u.push(no(t+1,-p,1.22,1.2,1.8)),u.push(no(t+2,p,1.22,1.2,1.8)),$7({bounds:h,centerX:-p,centerY:1.22,width:1.2,height:1.8}),$7({bounds:h,centerX:p,centerY:1.22,width:1.2,height:1.8}),A=Math.max(A,0.9)}return{pads:u,padBounds:h,maxPadHalfY:A}}function Fyo({variant:e,w:t,h:n,numPins:o,p:i}){let r=(s)=>({type:"pcb_silkscreen_path",layer:"top",pcb_component_id:"",route:s,stroke_width:0.1,pcb_silkscreen_path_id:""});if(e==="smd")return[r([{x:-t/2,y:-n/2},{x:t/2,y:-n/2},{x:t/2,y:n/2},{x:-t/2,y:n/2},{x:-t/2,y:-n/2}])];else if(e==="ph"){let s=n/2+0.5,a=s-n;return[r([{x:-t/2,y:s},{x:t/2,y:s},{x:t/2,y:a},{x:-t/2,y:a},{x:-t/2,y:s}])]}else if(e==="zh"&&o&&i){let s=(o-1)*i,a=-s/2-1.5,c=s/2+1.5,l=-n/2,d=n/2;return[r([{x:a,y:l},{x:c,y:l},{x:c,y:d},{x:a,y:d},{x:a,y:l}])]}else if(e==="xh"&&o&&i){let s=-((o-1)/2)*i,a=Array.from({length:o},(y,x)=>s+x*i),c=a[0],l=a[o-1],d=(c+l)/2,u=-2.75,h=-3.51,A=2.46,m=2.75,p=1.5,g=0.2,_=(y,x,C,I)=>r([{x:y,y:x},{x:C,y:x},{x:C,y:I},{x:y,y:I},{x:y,y:x}]),f=[];if(f.push(_(c-2.56,2.46,l+2.56,-3.51)),f.push(r([{x:c-1.6,y:2.75},{x:c-2.85,y:2.75},{x:c-2.85,y:1.5}])),f.push(r([{x:c-2.55,y:0.2},{x:c-1.8,y:0.2},{x:c-1.8,y:-2.75},{x:d,y:-2.75}])),f.push(r([{x:l+2.55,y:0.2},{x:l+1.8,y:0.2},{x:l+1.8,y:-2.75},{x:d,y:-2.75}])),f.push(_(c-2.55,2.45,c-0.75,1.7)),l-0.75>c+0.75)f.push(_(c+0.75,2.45,l-0.75,1.7));return f.push(_(l+0.75,2.45,l+2.55,1.7)),f}else return[]}var Hyo=(e)=>{let t=Nyo.parse(e),n=kyo(t),o=Qyo[n],i,r=e.num_pins;if(typeof r==="number")i=r;let s=typeof e.string==="string"?e.string:"",a=s.match(/(?:^|_)jst(\d+)(?:_|$)/),c=s.match(/(?:^|_)zh(\d+)(?:_|$)/);if(a&&a[1]){let ee=Number.parseInt(a[1],10);if(!Number.isNaN(ee))i=ee}if(c&&c[1]){let ee=Number.parseInt(c[1],10);if(!Number.isNaN(ee))i=ee}if(typeof i!=="number")throw Error(`JST requires an explicit pin count (e.g. jst6_sh or .jst(6))${t.string?`, from string "${t.string}"`:""}`);let l=t.p??o.p,d=t.id??(n==="xh"?i===2?1:0.95:o.id),u=t.pw??o.pw,h=t.pl??(n==="xh"?i===2?2:1.95:o.pl),A=(i-1)*l+4,m=n==="xh"?(i-1)*l+5.12:n==="ph"?A:o.w,p=t.w??m,g=t.h??(n==="xh"?5.97:o.h),_=t.mpx??(i-1)*l+3.4,f=t.mpy??o.mpy??0,y=t.mpw??o.mpw??0,x=t.mpl??o.mpl??0,C=t.mounttop??!1,I=Lyo({variant:n,numPins:i,p:l,id:d,pw:u,pl:h,mpx:_,mpy:f,mpw:y,mpl:x,mounttop:C}),{pads:b,padBounds:P,maxPadHalfY:E}=I,B=n==="smd"?Math.max(p,2*Math.max(Math.abs(P.minX),Math.abs(P.maxX))+0.4):p,w=n==="smd"?Math.max(g,2*Math.max(Math.abs(P.minY),Math.abs(P.maxY))+0.4):g,T=Fyo({variant:n,w:B,h:w,numPins:i,p:l}),Q=Oo(0,w/2+1,0.5),N=T.flatMap((ee)=>ee.route),F=N.map((ee)=>ee.x),H=N.map((ee)=>ee.y),z=F.length>0&&H.length>0,Y=z?Math.min(P.minX,Math.min(...F)):P.minX,U=z?Math.max(P.maxX,Math.max(...F)):P.maxX,X=z?Math.min(P.minY,Math.min(...H)):P.minY,V=z?Math.max(P.maxY,Math.max(...H)):P.maxY,W=0.5,j=0.05,q=E+0.085,ne=Y-W,ce=U+W,oe=X-q,ie=V+j,J=n==="ph"?{type:"pcb_courtyard_rect",pcb_courtyard_rect_id:"",pcb_component_id:"",center:{x:0,y:-0.55},width:(i-1)*l+4.9,height:5.5,layer:"top"}:n==="xh"?{type:"pcb_courtyard_rect",pcb_courtyard_rect_id:"",pcb_component_id:"",center:{x:0,y:-0.525},width:(i-1)*l+5.9,height:6.75,layer:"top"}:{type:"pcb_courtyard_rect",pcb_courtyard_rect_id:"",pcb_component_id:"",center:{x:(ne+ce)/2,y:(oe+ie)/2},width:ce-ne,height:ie-oe,layer:"top"};return{circuitJson:[...b,...T,Q,J],parameters:{...t,p:l,id:d,pw:u,pl:h,w:p,h:g,num_pins:i,sh:n==="sh",ph:n==="ph",smd:n==="smd",zh:n==="zh",xh:n==="xh",...n==="smd"?{mpx:_,mpy:f,mpw:y,mpl:x,mounttop:C}:{}}}},Oyo=Do.extend({fn:Z(),num_pins:Be(2).default(2),w:Z().default("3.30mm"),h:Z().default("1.70mm"),pl:Z().default("0.80mm"),pw:Z().default("1mm"),p:Z().default("1.90mm")}),zyo=(e)=>{let t=Oyo.parse(e),n=Oo(0,fe.parse(t.h)/2+0.5,0.3),o={type:"pcb_silkscreen_path",layer:"top",pcb_component_id:"",route:[{x:fe.parse(t.p)/2,y:fe.parse(t.h)/2},{x:-fe.parse(t.w)/2,y:fe.parse(t.h)/2},{x:-fe.parse(t.w)/2,y:-fe.parse(t.h)/2},{x:fe.parse(t.p)/2,y:-fe.parse(t.h)/2}],stroke_width:0.1,pcb_silkscreen_path_id:""},i=3.2,r=2,s={type:"pcb_courtyard_rect",pcb_courtyard_rect_id:"",pcb_component_id:"",center:{x:0,y:0},width:3.2,height:2,layer:"top"};return{circuitJson:Yyo(t).concat(...yh(t),o,n,s),parameters:t}},Gyo=(e)=>{let{pn:t,p:n}=e;if(t===1)return{x:-n/2,y:0};return{x:n/2,y:0}},Yyo=(e)=>{let t=[];for(let n=1;n<=e.num_pins;n++){let{x:o,y:i}=Gyo({pn:n,p:fe.parse(e.p)});t.push(no(n,o,i,fe.parse(e.pl),fe.parse(e.pw),0.1))}return t},Vyo=(e)=>{switch(e){case 8:return{w:"3.06mm",h:"3.14mm",p:"0.65mm",pl:"1.6mm",pw:"0.5mm"};case 10:return{w:"3.10mm",h:"3.33mm",p:"0.5mm",pl:"1.45mm",pw:"0.3mm"};default:return{w:"3.06mm",h:"3.14mm",p:"0.65mm",pl:"1.6mm",pw:"0.5mm"}}},Uyo=Do.extend({fn:Z(),num_pins:kn([Be(8),Be(10)]).default(8),w:Z().optional(),h:Z().optional(),p:Z().optional(),pl:Z().optional(),pw:Z().optional(),thermalpad:fy.optional(),..._Y,string:Z().optional()}),Wyo=(e)=>{let t=Uyo.parse(e),n=Vyo(t.num_pins),o=fe.parse(t.w||n.w),i=fe.parse(t.h||n.h),r=fe.parse(t.p||n.p),s=fe.parse(t.pl||n.pl),a=fe.parse(t.pw||n.pw),c=Math.min(s,a)/8,l=[],d=t.num_pins/2;for(let E=0;E<t.num_pins;E++){let{x:B,y:w}=Lxt(t.num_pins,E+1,o,r),T=E<d?E+1:t.num_pins-(E-d);l.push(no(T,B,w,s,a,c))}if(t.thermalpad)l.push(s6(t.thermalpad,{x:t.thermalpadcenteroffsetx,y:t.thermalpadcenteroffsety}));let u=o,h=i,A={type:"pcb_silkscreen_path",layer:"top",pcb_component_id:"",route:[{x:-u/2,y:h/2},{x:u/2,y:h/2}],stroke_width:0.05,pcb_silkscreen_path_id:""},m={type:"pcb_silkscreen_path",layer:"top",pcb_component_id:"",route:[{x:-u/2,y:-h/2},{x:u/2,y:-h/2}],stroke_width:0.05,pcb_silkscreen_path_id:""},p=Lxt(t.num_pins,1,u,r),g={x:p.x-0.8,y:p.y},_={type:"pcb_silkscreen_path",layer:"top",pcb_component_id:"pin_marker_1",route:[{x:g.x-0.4,y:g.y},{x:g.x-0.7,y:g.y+0.3},{x:g.x-0.7,y:g.y-0.3},{x:g.x-0.4,y:g.y}],stroke_width:0.05,pcb_silkscreen_path_id:"pin_marker_1"},f=Oo(0,h/2+0.5,0.3),y=(t.num_pins/2-1)*r+a,x=o/2+0.25,C=x+1.43,I=y/2+0.255,b=i/2+0.25,P={type:"pcb_courtyard_outline",pcb_courtyard_outline_id:"",pcb_component_id:"",layer:"top",outline:t1([{minX:-C,maxX:C,minY:-I,maxY:I},{minX:-x,maxX:x,minY:-b,maxY:b}])};return{circuitJson:[...l,A,m,f,_,P],parameters:t}},Lxt=(e,t,n,o)=>{let i=e/2,r=(t-1)%i,s=t<=i?-1:1,a=(i-1)/2-r;return{x:s*2.11,y:a*o}},Xyo=(e)=>{switch(e){case 10:return{w:"3.10mm",h:"3.32mm",p:"0.5mm",pl:"1.63mm",pw:"0.33mm"};case 12:return{w:"3mm",h:"4mm",p:"0.65mm",pl:"0.88mm",pw:"0.4mm"};case 16:return{w:"3.10mm",h:"4mm",p:"0.5mm",pl:"0.88mm",pw:"0.3mm"};default:return{w:"3.10mm",h:"3.32mm",p:"0.65mm",pl:"1.63mm",pw:"0.4mm"}}},Kyo=Do.extend({fn:Z(),num_pins:kn([Be(8),Be(10),Be(12),Be(16)]).default(8),w:Z().optional(),h:Z().optional(),p:Z().optional(),pl:Z().optional(),pw:Z().optional(),thermalpad:fy.optional(),..._Y,string:Z().optional()}),Fxt=(e,t,n,o,i)=>{let r=e/2,s=(t-1)%r,a=t<=r?-1:1,c=(r-1)/2-s,l=fe.parse("0.2mm");return{x:a*(n/2+i/2-l),y:c*o}},jyo=(e)=>{let t=Kyo.parse(e),n=Xyo(t.num_pins),o=fe.parse(t.w||n.w),i=fe.parse(t.h||n.h),r=fe.parse(t.p||n.p),s=fe.parse(t.pl||n.pl),a=fe.parse(t.pw||n.pw),c=Math.min(s,a)/8,l=[];for(let P=0;P<t.num_pins;P++){let{x:E,y:B}=Fxt(t.num_pins,P+1,o,r,s);l.push(no(P+1,E,B,s,a,c))}if(t.thermalpad)l.push(s6(t.thermalpad,{x:t.thermalpadcenteroffsetx,y:t.thermalpadcenteroffsety}));let d=o,u=i,h={type:"pcb_silkscreen_path",layer:"top",pcb_component_id:"",route:[{x:-d/2,y:u/2},{x:d/2,y:u/2}],stroke_width:0.05,pcb_silkscreen_path_id:""},A={type:"pcb_silkscreen_path",layer:"top",pcb_component_id:"",route:[{x:-d/2,y:-u/2},{x:d/2,y:-u/2}],stroke_width:0.05,pcb_silkscreen_path_id:""},m=Fxt(t.num_pins,1,d,r,s),p={x:m.x-0.8,y:m.y},g={type:"pcb_silkscreen_path",layer:"top",pcb_component_id:"pin_marker_1",route:[{x:p.x-0.4,y:p.y},{x:p.x-0.7,y:p.y+0.3},{x:p.x-0.7,y:p.y-0.3},{x:p.x-0.4,y:p.y}],stroke_width:0.05,pcb_silkscreen_path_id:"pin_marker_1"},_=Oo(0,u/2+0.5,0.3),f=(t.num_pins/2-1)*r+a,y=o/2+0.25,x=y+1.43,C=f/2+0.255,I=i/2+0.25,b={type:"pcb_courtyard_outline",pcb_courtyard_outline_id:"",pcb_component_id:"",layer:"top",outline:t1([{minX:-x,maxX:x,minY:-C,maxY:C},{minX:-y,maxX:y,minY:-I,maxY:I}])};return{circuitJson:[...l,h,A,_,g,b],parameters:t}},qyo=Do.extend({fn:Z(),num_pins:Be(2).default(2),w:Z().default("3.8mm"),h:Z().default("1.65mm"),pl:Z().default("1.2mm"),pw:Z().default("1.2mm"),pad_spacing:Z().default("2.6mm")}),Jyo=(e)=>{let t=qyo.parse(e),n=Oo(0,fe.parse(t.h),0.3),o={type:"pcb_silkscreen_path",layer:"top",pcb_component_id:"",route:[{x:fe.parse(t.pad_spacing)/2,y:fe.parse(t.h)/2},{x:-fe.parse(t.w)/2-0.2,y:fe.parse(t.h)/2},{x:-fe.parse(t.w)/2-0.2,y:-fe.parse(t.h)/2},{x:fe.parse(t.pad_spacing)/2,y:-fe.parse(t.h)/2}],stroke_width:0.1,pcb_silkscreen_path_id:""},i=4.3,r=2.15,s={type:"pcb_courtyard_rect",pcb_courtyard_rect_id:"",pcb_component_id:"",center:{x:0,y:0},width:4.3,height:2.15,layer:"top"};return{circuitJson:Zyo(t).concat(...yh(t),o,n,s),parameters:t}},$yo=(e)=>{let{pn:t,pad_spacing:n}=e;if(t===1)return{x:-n/2,y:0};else return{x:n/2,y:0}},Zyo=(e)=>{let t=[];for(let n=1;n<=e.num_pins;n++){let{x:o,y:i}=$yo({pn:n,pad_spacing:fe.parse(e.pad_spacing)});t.push(no(n,o,i,fe.parse(e.pl),fe.parse(e.pw)))}return t},e2o=Do.extend({fn:Z(),num_pins:Be(2).default(2),w:Z().default("3.20mm"),h:Z().default("1.65mm"),pl:Z().default("0.8mm"),pw:Z().default("0.9mm"),pad_spacing:Z().default("2.1mm")}),t2o=(e)=>{let t=e2o.parse(e),n=Oo(0,fe.parse(t.h),0.3),o={type:"pcb_silkscreen_path",layer:"top",pcb_component_id:"",route:[{x:fe.parse(t.pad_spacing)/2,y:fe.parse(t.h)/2},{x:-fe.parse(t.w)/2-0.2,y:fe.parse(t.h)/2},{x:-fe.parse(t.w)/2-0.2,y:-fe.parse(t.h)/2},{x:fe.parse(t.pad_spacing)/2,y:-fe.parse(t.h)/2}],stroke_width:0.1,pcb_silkscreen_path_id:""},i=3.7,r=2.15,s={type:"pcb_courtyard_rect",pcb_courtyard_rect_id:"",pcb_component_id:"",center:{x:0,y:0},width:3.7,height:2.15,layer:"top"};return{circuitJson:o2o(t).concat(...yh(t),o,n,s),parameters:t}},n2o=(e)=>{let{pn:t,pad_spacing:n}=e;if(t===1)return{x:-n/2,y:0};else return{x:n/2,y:0}},o2o=(e)=>{let t=[];for(let n=1;n<=e.num_pins;n++){let{x:o,y:i}=n2o({pn:n,pad_spacing:fe.parse(e.pad_spacing)});t.push(no(n,o,i,fe.parse(e.pl),fe.parse(e.pw)))}return t},i2o=Do.extend({fn:Z(),num_pins:kn([Be(6),Be(8)]).default(8),w:Z().default("3mm"),h:Z().default("3mm"),p:Z().default("0.5mm"),pl:Z().default("0.52mm"),pw:Z().default("0.35mm"),epw:Z().default("1.40mm"),eph:Z().default("1.60mm"),string:Z().optional(),ep:Ue().default(!1)}),r2o=(e)=>{if(e.string&&e.string.includes("_ep"))e.ep=!0;let t=e.string?.match(/^son_(\d+)/),n=t?Number.parseInt(t[1],10):e.num_pins||8,o=i2o.parse({...e,num_pins:n}),i=fe.parse(o.w),r=fe.parse(o.h),s=fe.parse(o.p),a=fe.parse(o.pl),c=fe.parse(o.pw),l=fe.parse(o.epw),d=fe.parse(o.eph),u=Math.min(a,c)/8,h=[];for(let Q=0;Q<o.num_pins;Q++){let{x:N,y:F}=O8e(o.num_pins,Q+1,i,s);h.push(no(Q+1,N,F,a,c,u))}if(o.ep)h.push(no(o.num_pins+1,0,0,l,d));let A=i,m=r,p={type:"pcb_silkscreen_path",layer:"top",pcb_component_id:"",route:[{x:-A/2,y:m/2},{x:A/2,y:m/2}],stroke_width:0.05,pcb_silkscreen_path_id:""},g={type:"pcb_silkscreen_path",layer:"top",pcb_component_id:"",route:[{x:-A/2,y:-m/2},{x:A/2,y:-m/2}],stroke_width:0.05,pcb_silkscreen_path_id:""},_=O8e(o.num_pins,1,A,s),f={x:_.x-0.4,y:_.y},y={type:"pcb_silkscreen_path",layer:"top",pcb_component_id:"pin_marker_1",route:[{x:f.x-0.4,y:f.y},{x:f.x-0.7,y:f.y+0.3},{x:f.x-0.7,y:f.y-0.3},{x:f.x-0.4,y:f.y}],stroke_width:0.05,pcb_silkscreen_path_id:"pin_marker_1"},x=Oo(0,m/2+0.5,0.3),C=Math.abs(O8e(o.num_pins,1,i,s).x),I=(o.num_pins/2-1)*s+c,b=C*2+a,P=i/2+0.25,E=b/2+0.25,B=I/2+0.25,w=r/2+0.25,T={type:"pcb_courtyard_outline",pcb_courtyard_outline_id:"",pcb_component_id:"",layer:"top",outline:t1([{minX:-E,maxX:E,minY:-B,maxY:B},{minX:-P,maxX:P,minY:-w,maxY:w}])};return{circuitJson:[...h,p,g,x,y,T],parameters:o}},O8e=(e,t,n,o)=>{let i=e/2,r=(t-1)%i,s=t<=i?-1:1,a=(i-1)/2-r;return{x:s*fe.parse("1.4mm"),y:a*o}},s2o=Do.extend({fn:Z(),num_pins:He().optional().default(8),p:ze.describe("pitch (distance between center of each pin)"),w:fe.describe("width between vertical rows of pins"),grid:fy.describe("width and height of the border of the footprint"),ep:fy.default("0x0mm").describe("width and height of the central exposed thermal pad"),epx:fe.default("0mm").describe("x offset of the center of the central exposed thermal pad"),pinw:fe.describe("width of the pin pads"),pinh:fe.describe("height of the pin pads")}),a2o=(e)=>{let t=s2o.parse(e),{num_pins:n,p:o,w:i,grid:r,ep:s,epx:a,pinw:c,pinh:l}=t;if(n%2!==0)throw Error("invalid number of pins");let d=[],u=Math.min(c,l)/8;for(let P=0;P<n;P++){let{pinX:E,pinY:B}=c2o({pinCount:n,pinIndex:P,width:i,pitch:o});d.push(no(P+1,E,B,c,l,u))}if(s.x>0&&s.y>0)d.push(no(t.num_pins+1,a,0,s.x,s.y));let h=l2o(r),A=Oo(0,r.y/2+o,r.y/6),m=(n/2-1)*o+l,p=i+c,g=r.x/2+0.25,_=p/2+0.25,f=m/2+0.25,y=m/2+0.45+Math.max(0,0.8-o),x=Math.min(r.y/2+0.25,y),C=Math.max(0,0.37-Math.max(0,_-g-0.38)*1.4),I=Math.max(f,x-C),b={type:"pcb_courtyard_outline",pcb_courtyard_outline_id:"",pcb_component_id:"",layer:"top",outline:t1([{minX:-_,maxX:_,minY:-I,maxY:I},{minX:-g,maxX:g,minY:-x,maxY:x}])};return{circuitJson:[...d,...h,A,b],parameters:t}},c2o=(e)=>{let t=0,n=0,o=(e.pinCount/2-1)*e.pitch/2,i=e.pinCount/2;if(e.pinIndex+1<=i)t=e.pitch*e.pinIndex-o,n=0-e.width/2;else t=e.pitch*(e.pinCount-e.pinIndex-1)-o,n=e.width/2;return{pinX:n,pinY:t}},l2o=(e)=>{let n=e.y/30;return[{layer:"top",pcb_component_id:"",pcb_silkscreen_path_id:"",type:"pcb_silkscreen_path",route:[{x:-e.x/2-0.1,y:e.y/2+0.1-n},{x:-e.x/2-0.1,y:e.y/2+0.1},{x:e.x/2+0.1,y:e.y/2+0.1},{x:e.x/2+0.1,y:e.y/2+0.1-n}],stroke_width:e.y/30},{layer:"top",pcb_component_id:"",pcb_silkscreen_path_id:"",type:"pcb_silkscreen_path",route:[{x:-e.x/2-0.1,y:-e.y/2-0.1+n},{x:-e.x/2-0.1,y:-e.y/2-0.1},{x:e.x/2+0.1,y:-e.y/2-0.1},{x:e.x/2+0.1,y:-e.y/2-0.1+n}],stroke_width:e.y/30}]},d2o=Do.extend({fn:Be("wson"),num_pins:Be(8).default(8),p:fe.default("0.5mm").describe("pin pitch"),rowspan:fe.default("3.015mm").describe("distance between pad rows"),pl:fe.default("0.6mm").describe("pad length across the package edge"),pw:fe.default("0.28mm").describe("pad width along the pin row"),ep:Ue().default(!0).describe("include the exposed pad"),epw:fe.default("1.7mm").describe("exposed pad width"),eph:fe.default("0.3mm").describe("exposed pad height"),w:fe.default("2mm").describe("package body width"),h:fe.default("3mm").describe("package body height")}),u2o=(e)=>{let t=d2o.parse(e),{p:n,rowspan:o,pl:i,pw:r,ep:s,epw:a,eph:c,w:l,h:d}=t,u=[],h=-3*n/2;for(let f=0;f<4;f+=1){let y=h+f*n;u.push(no(f+1,y,-o/2,r,i)),u.push(no(8-f,y,o/2,r,i))}if(s)u.push(no(9,0,0,a,c));let A=[ns([{x:-l/2,y:-d/2},{x:-l/2,y:d/2}]),ns([{x:l/2,y:-d/2},{x:l/2,y:d/2}])],m=Oo(0,Math.max(d/2,(o+i)/2)+0.6,0.5),p=Math.max(3*n+r,s?a:0),g=Math.max(o+i,s?c:0),_={type:"pcb_courtyard_rect",pcb_courtyard_rect_id:"",pcb_component_id:"",center:{x:0,y:0},width:Math.max(l,p)+0.5,height:Math.max(d,g)+0.5,layer:"top"};return{circuitJson:[...u,...A,m,_],parameters:t}},h2o=(e)=>{let{num_pins:t,bridged:n,p:o=2.54,pw:i=1.5,ph:r=1.5}=e,s=fe.parse(o),a=fe.parse(i),c=fe.parse(r),l=Math.min(c/4,0.5),d=[];for(let B=0;B<t;B++)d.push(no(B+1,B*s,0,a,c));let u=[];if(n){let B=n.split("").map(Number);if(B.length>1)for(let w=0;w<B.length-1;w++){let T=B[w],Q=B[w+1];if(typeof T==="number"&&typeof Q==="number"&&!isNaN(T)&&!isNaN(Q)){let N=(T-1)*s,F=(Q-1)*s,H=Math.sign(F-N),z=N+H*(a/2),Y=F-H*(a/2);u.push({type:"pcb_trace",pcb_trace_id:"",route:[{start_pcb_port_id:`{PIN${T}}`,x:z,y:0,width:l,layer:"top",route_type:"wire"},{end_pcb_port_id:`{PIN${Q}}`,x:Y,y:0,width:l,layer:"top",route_type:"wire"}]})}}}let h=(t-1)*s+a+0.7,A=c+1,m=(t-1)*s/2,p=0,g={type:"pcb_silkscreen_path",layer:"top",pcb_component_id:"",pcb_silkscreen_path_id:"outline",route:[{x:m-h/2,y:p-A/2},{x:m+h/2,y:p-A/2},{x:m+h/2,y:p+A/2},{x:m-h/2,y:p+A/2},{x:m-h/2,y:p-A/2}],stroke_width:0.15},_=0.6,f=p+A/2+_,y=Oo(m,f,0.4),x=(t-1)*s,C=x/2+a/2,I=c/2,b=C+0.5,P=I+0.5,E={type:"pcb_courtyard_rect",pcb_courtyard_rect_id:"",pcb_component_id:"",center:{x:x/2,y:0},width:2*b,height:2*P,layer:"top"};return{circuitJson:[...d,...u,g,y,E],parameters:e}},pCt={fn:Be("sot457"),num_pins:Be(6).default(6),pillh:Z().default("0.45mm"),pillw:Z().default("1.45mm"),pl:Z(),pw:Z(),p:Z(),wave:Ue().optional(),reflow:Ue().optional()},m2o=Do.extend({...pCt,h:Z().default("2.5mm"),w:Z().default("2.7mm"),pl:Z().default("0.8mm"),pw:Z().default("0.55mm"),p:Z().default("0.95mm")}),p2o=Do.extend({...pCt,h:Z().default("3mm"),w:Z().default("4mm"),pillr:Z().default("0.225mm"),pl:Z().default("1.45mm"),pw:Z().default("1.5mm"),p:Z().default("1.475mm")}).transform((e)=>({...e,wave:e.wave??(e.reflow===void 0?!0:!e.reflow),reflow:e.reflow??(e.wave===void 0?!1:!e.wave)})),i6=(e)=>Number.parseFloat(e.replace("mm","")),Hxt=({pitch:e,width:t,pinNumber:n})=>{let r={1:{x:-t/2-0.1,y:e},2:{x:-t/2-0.1,y:0},3:{x:-t/2-0.1,y:-e},4:{x:t/2+0.1,y:-e},5:{x:t/2+0.1,y:0},6:{x:t/2+0.1,y:e}}[n];if(!r)throw Error(`Invalid pin number: ${n}`);return r},Oxt=(e)=>{let t=[],n=i6(e.p),o=i6(e.pl),i=i6(e.pw),r=i6(e.w),s=i6(e.h),a=Math.min(o,i)/8;if(e.wave){let g={1:({padWidth:_,padHeight:f})=>no(1,-n,n,f,_,a),2:({padWidth:_,padHeight:f})=>no(2,-n,-n,f,_,a),3:({padWidth:_,padHeight:f})=>e8(3,-n,0,i6(e.pillw),i6(e.pillh)),4:({padWidth:_,padHeight:f})=>e8(4,n,0,i6(e.pillw),i6(e.pillh)),5:({padWidth:_,padHeight:f})=>no(5,n,n,f,_,a),6:({padWidth:_,padHeight:f})=>no(6,n,-n,f,_,a)};for(let _=1;_<=e.num_pins;_++){let f=g[_];if(f)t.push(f({padWidth:o,padHeight:i}))}}else for(let g=1;g<=e.num_pins;g++){let{x:_,y:f}=Hxt({pitch:n,width:r,pinNumber:g});t.push(no(g,_,f,o,i,a))}let c={type:"pcb_silkscreen_path",layer:"top",pcb_component_id:"",pcb_silkscreen_path_id:"silkscreen_path_1",route:[{x:-r/3,y:s/2+n/1.3},{x:r/3,y:s/2+n/1.3}],stroke_width:0.05},l={type:"pcb_silkscreen_path",layer:"top",pcb_component_id:"",pcb_silkscreen_path_id:"silkscreen_path_2",route:[{x:-r/3,y:-s/2-n/1.3},{x:r/3,y:-s/2-n/1.3}],stroke_width:0.05},d=Oo(0,s+0.5,0.3),u=Hxt({pitch:n,width:r,pinNumber:1}),h=e.wave?1:0.5,A=e.wave?0.7:0.3;u.x-=e.wave?i:i*1.7;let m={type:"pcb_silkscreen_path",layer:"top",pcb_component_id:"",pcb_silkscreen_path_id:"pin1_indicator",route:[{x:u.x+h/2,y:u.y},{x:u.x-h/2,y:u.y+A/2},{x:u.x-h/2,y:u.y-A/2},{x:u.x+h/2,y:u.y}],stroke_width:0.05},p;if(e.wave){let g=2*n,_=2*n,f=g/2+i/2,y=_/2+o/2,x=f+0.25,C=y+0.25;p={type:"pcb_courtyard_rect",pcb_courtyard_rect_id:"",pcb_component_id:"",center:{x:0,y:0},width:2*x,height:2*C,layer:"top"}}else{let _=r/2+0.1+o/2,f=n+i/2,y=r/2,x=s/2,C=_+0.25,I=y+0.08,b=f+0.25,P=Math.max(x+0.45,b);p={type:"pcb_courtyard_outline",pcb_courtyard_outline_id:"",pcb_component_id:"",outline:t1([{minX:-C,maxX:C,minY:-b,maxY:b},{minX:-I,maxX:I,minY:-P,maxY:P}]),layer:"top"}}return[d,c,l,m,...t,p]},A2o=(e)=>{if(e.wave){let n=p2o.parse({...e,fn:"sot457"});return{circuitJson:Oxt(n),parameters:n}}let t=m2o.parse(e);return{circuitJson:Oxt(t),parameters:t}},_2o=[{x:-0.8,y:0.75},{x:0.8,y:0.75},{x:0.8,y:-0.75},{x:-0.8,y:-0.75}],g2o=Do.extend({fn:Z(),num_pins:Be(6).default(6),w:Z().default("1.1mm"),h:Z().default("1.45mm"),p:Z().default("0.35mm"),pl:Z().default("0.2mm"),pw:Z().default("0.2mm"),string:Z().optional()}),f2o=(e)=>{let t=g2o.parse({...e,fn:"sot963"}),n=fe.parse(t.w),o=fe.parse(t.h),i=fe.parse(t.p),r=fe.parse(t.pl),s=fe.parse(t.pw),a=Math.min(r,s)/8,c=[];for(let p=0;p<6;p++){let{x:g,y:_}=zxt(p+1,n,i,r);c.push(no(p+1,g,_,r,s,a))}let l={type:"pcb_silkscreen_path",layer:"top",pcb_component_id:"",route:[{x:-n/2,y:o/2},{x:n/2,y:o/2}],stroke_width:0.05,pcb_silkscreen_path_id:""},d={type:"pcb_silkscreen_path",layer:"top",pcb_component_id:"",route:[{x:-n/2,y:-o/2},{x:n/2,y:-o/2}],stroke_width:0.05,pcb_silkscreen_path_id:""},u=zxt(1,n,i,r),h={type:"pcb_silkscreen_path",layer:"top",pcb_component_id:"pin_marker_1",route:[{x:u.x-r/2-0.3,y:u.y},{x:u.x-r/2-0.45,y:u.y+0.15},{x:u.x-r/2-0.45,y:u.y-0.15},{x:u.x-r/2-0.3,y:u.y}],stroke_width:0.05,pcb_silkscreen_path_id:"pin_marker_1"},A=Oo(0,o/2+0.4,0.25),m={type:"pcb_courtyard_outline",pcb_courtyard_outline_id:"",pcb_component_id:"",outline:_2o,layer:"top"};return{circuitJson:[...c,l,d,A,h,m],parameters:t}},zxt=(e,t,n,o)=>{let i=t/2-o/2;if(e<=3)return{x:-i,y:n-(e-1)*n};return{x:i,y:-n+(e-4)*n}},y2o=Do.extend({fn:Z(),num_pins:kn([Be(3),Be(2)]).default(3),p:Z().default("5mm"),id:Z().default("1.25mm"),od:Z().default("2.35mm"),ca:Z().default("14mm").describe("Caliper axis (width or diameter of the potentiometer body or adjustment knob)"),w:Z().default("5.35mm"),h:Z().default("4mm"),string:Z().optional()}),x2o=(e)=>{let{p:t,id:n,od:o,h:i}=e,r=Number.parseFloat(i),s=Number.parseFloat(t);return[xr(1,0,s,n,o),xr(2,r,0,n,o),xr(3,0,-s,n,o)]},C2o=(e)=>{let t=e.string?.match(/^potentiometer_(\d+)/),n=t?Number.parseInt(t[1],10):3,o=y2o.parse({...e,num_pins:n}),i=[];if(o.num_pins===3)i=x2o(o);let r=Number.parseFloat(o.ca)/2+0.15,s=Number.parseFloat(o.w),a=Number.parseFloat(o.od)/2+0.35,c={type:"pcb_silkscreen_path",layer:"top",pcb_component_id:"",route:[{x:0,y:r-1.75},{x:0,y:r},{x:s,y:r},{x:s,y:a}],stroke_width:0.1,pcb_silkscreen_path_id:""},l={type:"pcb_silkscreen_path",layer:"top",pcb_component_id:"",route:[{x:s,y:-a},{x:s,y:-r},{x:0,y:-r},{x:0,y:-r+1.75}],stroke_width:0.1,pcb_silkscreen_path_id:""},d=Number.parseFloat(o.w)/2,u=Oo(d,r+1,0.5),h=Number.parseFloat(o.od)/2,A=Number.parseFloat(o.h),m=Number.parseFloat(o.ca)/2,p=-(h+0.25),g=A+h+0.25,_=m+0.25,f={type:"pcb_courtyard_rect",pcb_courtyard_rect_id:"",pcb_component_id:"",center:{x:(p+g)/2,y:0},width:g-p,height:2*_,layer:"top"};return{circuitJson:[...i,c,l,u,f],parameters:o}},I2o=Do.extend({fn:Z(),p:fe.optional().default("7.5mm"),id:fe.optional().default("1mm"),od:fe.optional().default("2mm"),d:fe.optional().default("10.5mm")}),b2o=(e,t,n,o,i)=>{let r=[],s=[];for(let a=0;a<=50;a++){let c=a/50*Math.PI,l=e+Math.cos(c)*n,d=t+Math.sin(c)*n;if(l<e-o&&d>=t-i/2&&d<=t+i/2)continue;r.push({x:l,y:d})}for(let a=0;a<=50;a++){let c=Math.PI+a/50*Math.PI,l=e+Math.cos(c)*n,d=t+Math.sin(c)*n;if(l<e-o&&d>=t-i/2&&d<=t+i/2)continue;s.push({x:l,y:d})}return{topArc:r,bottomArc:s}},S2o=(e)=>{let t=I2o.parse(e),{p:n,id:o,od:i,d:r}=t,s=[e1({pn:1,x:-n/2,y:0,holeDiameter:o,rectPadWidth:i,rectPadHeight:i}),xr(2,n/2,0,o,i)],{topArc:a,bottomArc:c}=b2o(0,0,r/2+0.1,i/2,i),l={type:"pcb_silkscreen_path",layer:"top",pcb_component_id:"",route:a,stroke_width:0.1,pcb_silkscreen_path_id:""},d={type:"pcb_silkscreen_path",layer:"top",pcb_component_id:"",route:c,stroke_width:0.1,pcb_silkscreen_path_id:""},u={type:"pcb_silkscreen_path",layer:"top",pcb_component_id:"",route:[{x:0,y:r/2+0.1},{x:0,y:-(r/2+0.1)}],stroke_width:0.1,pcb_silkscreen_path_id:""},h=-(r/2+0.5),A=i/2+1.5,m=0.5,p={type:"pcb_silkscreen_path",layer:"top",pcb_component_id:"",route:[{x:h-0.5,y:A},{x:h+0.5,y:A}],stroke_width:0.1,pcb_silkscreen_path_id:""},g={type:"pcb_silkscreen_path",layer:"top",pcb_component_id:"",route:[{x:h,y:A-0.5},{x:h,y:A+0.5}],stroke_width:0.1,pcb_silkscreen_path_id:""},_=Oo(0,r/2+1,0.5),f=r/2,y=n/2+i/2,x=0.25,C=Math.max(f,y)+0.25,I={type:"pcb_courtyard_circle",pcb_courtyard_circle_id:"",pcb_component_id:"",center:{x:0,y:0},radius:C,layer:"top"};return{circuitJson:[...s,l,d,u,p,g,_,I],parameters:t}},P2o=Do.extend({fn:Be("fpc"),num_pins:Tv.number().int().min(2),p:fe.default("0.5mm").describe("contact pad pitch"),pw:fe.default("0.3mm").describe("contact pad width"),pl:fe.default("1.25mm").describe("contact pad length"),staggered:Ue().default(!1).describe("alternate contacts between two rows"),reverse:Ue().default(!1).describe("place pin 1 on the upper row when staggered"),py:fe.default("2.4mm").describe("staggered row center pitch"),toppl:fe.optional().describe("upper-row contact pad length"),bottompl:fe.optional().describe("lower-row contact pad length"),mpx:fe.optional().describe("mounting pad center pitch"),mpy:fe.optional().describe("mounting pad row distance from the contact-row center"),mounttop:Ue().default(!1).describe("place the mounting pads above the contact-row center"),mpw:fe.default("2mm").describe("mounting pad width"),mpl:fe.default("2.5mm").describe("mounting pad length")}),z8e=(...e)=>no(...e),v2o=(e)=>({maxX:Math.max(...e.map((t)=>t.x+t.width/2)),maxY:Math.max(...e.map((t)=>t.y+t.height/2)),minX:Math.min(...e.map((t)=>t.x-t.width/2)),minY:Math.min(...e.map((t)=>t.y-t.height/2))}),E2o=(e)=>{let t=P2o.parse(e),{num_pins:n,p:o,pw:i,pl:r,staggered:s,reverse:a,py:c,toppl:l,bottompl:d,mounttop:u,mpw:h,mpl:A}=t,m=(n-1)*o,p=t.mpx??m+(s?3.5:3.38),g=t.mpy??(s?0:2.575),_=g===0?0:(u?1:-1)*g,f=-m/2,y=Array.from({length:n},(H,z)=>{let Y=s&&z%2===1!==a,U=s?Y?c/2:-c/2:0,X=Y?l??r:d??r;return z8e(z+1,f+z*o,U,i,X)}),x=[z8e(n+1,p/2,_,h,A),z8e(n+2,-p/2,_,h,A)],C=[...y,...x],I=v2o(C),b=Math.min(m/2+i/2,p/2-h/2),P=I.maxY+0.2,E=I.minY-0.2,B=y[0],w=B.x-B.width/2-0.2,T=B.y,Q=[ns([{x:-b,y:P},{x:b,y:P}]),ns([{x:-b,y:E},{x:b,y:E}]),ns([{x:w-0.25,y:T-0.25},{x:w,y:T},{x:w-0.25,y:T+0.25}])],N=Oo(0,P+0.7,0.5),F={type:"pcb_courtyard_rect",pcb_courtyard_rect_id:"",pcb_component_id:"",center:{x:(I.minX+I.maxX)/2,y:(I.minY+I.maxY)/2},width:I.maxX-I.minX+0.5,height:I.maxY-I.minY+0.5,layer:"top"};return{circuitJson:[...C,...Q,N,F],parameters:{...t,mpx:p,mpy:g,toppl:l??r,bottompl:d??r}}},M2o=Do.extend({fn:Z(),num_pins:Be(2).default(2),w:Z().default("6.5mm"),h:Z().default("3mm"),pl:Z().default("1.75mm"),pw:Z().default("2.40mm"),p:Z().default("4.75mm")}),B2o=(e)=>{let t=M2o.parse(e),n=Oo(0,fe.parse(t.h)-0.5,0.3),o={type:"pcb_silkscreen_path",layer:"top",pcb_component_id:"",route:[{x:fe.parse(t.p)/2,y:fe.parse(t.h)/2},{x:-fe.parse(t.w)/2-0.3,y:fe.parse(t.h)/2},{x:-fe.parse(t.w)/2-0.3,y:-fe.parse(t.h)/2},{x:fe.parse(t.p)/2,y:-fe.parse(t.h)/2}],stroke_width:0.1,pcb_silkscreen_path_id:""},i=7,r=3.5,s={type:"pcb_courtyard_rect",pcb_courtyard_rect_id:"",pcb_component_id:"",center:{x:0,y:0},width:7,height:3.5,layer:"top"};return{circuitJson:T2o(t).concat(...yh(t),o,n,s),parameters:t}},w2o=(e)=>{let{pn:t,p:n}=e;if(t===1)return{x:-n/2,y:0};return{x:n/2,y:0}},T2o=(e)=>{let t=[],n=fe.parse(e.p),o=fe.parse(e.pl),i=fe.parse(e.pw),r=0.125;for(let s=1;s<=e.num_pins;s++){let{x:a,y:c}=w2o({pn:s,p:n});t.push(no(s,a,c,o,i,0.125))}return t},D2o=[{x:-1.45,y:0.98},{x:-0.73,y:0.98},{x:-0.73,y:1.1},{x:0.73,y:1.1},{x:0.73,y:0.33},{x:1.45,y:0.33},{x:1.45,y:-0.33},{x:0.73,y:-0.33},{x:0.73,y:-1.1},{x:-0.73,y:-1.1},{x:-0.73,y:-0.98},{x:-1.45,y:-0.98},{x:-1.45,y:-0.32},{x:-0.73,y:-0.32},{x:-0.73,y:0.32},{x:-1.45,y:0.32}],N2o=Do.extend({fn:Z(),num_pins:He().default(3),w:Z().default("2.45mm"),h:Z().default("2.40mm"),pl:Z().default("0.92mm"),pw:Z().default("0.45mm"),p:Z().default("0.891mm"),string:Z().optional()}),R2o=(e)=>{let t=e.string?.match(/^sot323_(\d+)/),n=t?Number.parseInt(t[1],3):3,o=N2o.parse({...e,num_pins:n});if(o.num_pins===3)return{circuitJson:k2o(o),parameters:o};throw Error("Invalid number of pins")},Q2o=(e)=>{let{pn:t,w:n,h:o,pl:i,p:r}=e;if(t===1)return{x:-r,y:0.65};if(t===2)return{x:-r,y:-0.65};return{x:r,y:0}},k2o=(e)=>{let t=[],n=Number.parseFloat(e.w),o=Number.parseFloat(e.h),i=Number.parseFloat(e.pl),r=Number.parseFloat(e.pw),s=Number.parseFloat(e.p),a=Math.min(i,r)/8;for(let m=0;m<e.num_pins;m++){let{x:p,y:g}=Q2o({num_pins:e.num_pins,pn:m+1,w:n,h:o,pl:i,p:s});t.push(no(m+1,p,g,i,r,a))}let c=Oo(0,Number.parseInt(e.h)/2+1,0.3),l=n/2-i,d=o/2,u={layer:"top",pcb_component_id:"",pcb_silkscreen_path_id:"silkscreen_path_1",route:[{x:-l,y:d+0.3},{x:l,y:d+0.3},{x:l,y:d/2}],type:"pcb_silkscreen_path",stroke_width:0.1},h={layer:"top",pcb_component_id:"",pcb_silkscreen_path_id:"silkscreen_path_2",route:[{x:-l,y:-d-0.3},{x:l,y:-d-0.3},{x:l,y:-d/2}],type:"pcb_silkscreen_path",stroke_width:0.1},A={type:"pcb_courtyard_outline",pcb_courtyard_outline_id:"",pcb_component_id:"",outline:D2o,layer:"top"};return[...t,u,h,c,A]},L2o=Do.extend({fn:Z(),circle:Ue().optional(),rect:Ue().optional(),square:Ue().optional(),pill:Ue().optional(),d:fe.optional(),pd:fe.optional(),diameter:fe.optional(),r:fe.optional(),pr:fe.optional(),radius:fe.optional(),w:fe.optional(),pw:fe.optional(),width:fe.optional(),h:fe.optional(),ph:fe.optional(),height:fe.optional(),s:fe.optional(),size:fe.optional(),string:Z().optional()}).transform((e)=>{let t="rect";if(e.circle)t="circle";if(e.square)t="square";if(e.rect)t="rect";if(e.pill)t="pill";let n,o,i;if(t==="circle")if(e.r!==void 0)n=yr(e.r);else if(e.pr!==void 0)n=yr(e.pr);else if(e.radius!==void 0)n=yr(e.radius);else if(e.d!==void 0)n=yr(e.d)/2;else if(e.pd!==void 0)n=yr(e.pd)/2;else if(e.diameter!==void 0)n=yr(e.diameter)/2;else n=yr("1mm")/2;else{if(e.w!==void 0)o=yr(e.w);else if(e.pw!==void 0)o=yr(e.pw);else if(e.width!==void 0)o=yr(e.width);else if(e.s!==void 0)o=yr(e.s);else if(e.size!==void 0)o=yr(e.size);else o=yr("1mm");if(e.h!==void 0)i=yr(e.h);else if(e.ph!==void 0)i=yr(e.ph);else if(e.height!==void 0)i=yr(e.height);else if(t==="square")i=o;else if(t==="rect")i=o;else i=yr("1mm")}return{fn:e.fn,shape:t,radius:n,width:o,height:i}}),F2o=(e)=>{let t=L2o.parse(e),{shape:n,radius:o,width:i,height:r}=t,s,a;if(n==="circle")s=Vme(1,{x:0,y:0,radius:o}),a=o+0.5;else if(n==="pill")s=e8(1,0,0,i,r),a=Math.max(i,r)/2+0.5;else s=no(1,0,0,i,r),a=r/2+0.5;return{circuitJson:[s,Oo(0,a,0.2)],parameters:t}},H2o=Do.extend({fn:Be("smdpads"),num_pins:He().int().positive().default(3),p:fe.default("1mm").describe("pad center pitch"),pw:fe.default("1mm").describe("outer pad width"),ph:fe.default("1mm").describe("pad height"),cyw:fe.optional().describe("courtyard width"),cyh:fe.optional().describe("courtyard height"),centerpadwidth:fe.optional().describe("center pad width")}).superRefine((e,t)=>{if(e.centerpadwidth!==void 0&&e.num_pins%2===0)t.addIssue({code:jt.custom,message:"'centerpadwidth' requires an odd number of SMD pads",path:["centerpadwidth"]})}),O2o=(e)=>{let t=H2o.parse(e),{num_pins:n,p:o,pw:i,ph:r,cyw:s,cyh:a,centerpadwidth:c}=t,l=Math.ceil(n/2),d=-((n-1)*o)/2,u=Array.from({length:n},(_,f)=>{let y=f+1,x=c!==void 0&&y===l?c:i;return no(y,d+f*o,0,x,r)}),h=(n-1)*o/2+i/2,A=c?c/2:0,m=Math.max(h,A),p=s!==void 0&&a!==void 0?{width:s,height:a}:{width:m*2+0.5,height:r+0.5},g={type:"pcb_courtyard_rect",pcb_courtyard_rect_id:"",pcb_component_id:"",center:{x:0,y:0},width:p.width,height:p.height,layer:"top"};return{circuitJson:[...u,Oo(0,r/2+0.8,0.4),g],parameters:t}},z2o=Do.extend({fn:Be("smdpushbutton"),num_pins:Be(4).default(4),px:fe.default("4.2mm").describe("horizontal pad center pitch"),py:fe.default("2.15mm").describe("vertical pad center pitch"),pw:fe.default("1.05mm").describe("pad width"),ph:fe.default("0.7mm").describe("pad height")}),G2o=(e)=>{let t=z2o.parse(e),{px:n,py:o,pw:i,ph:r}=t,s=[no(1,-n/2,o/2,i,r),no(2,n/2,o/2,i,r),no(3,-n/2,-o/2,i,r),no(4,n/2,-o/2,i,r)],a=Math.max(n/2-i/2-0.15,0.2),c=o/2+r/2+0.1,l=Math.max(o/2-r/2-0.15,0.2),d=[ns([{x:-a,y:c},{x:a,y:c}]),ns([{x:-a,y:-c},{x:a,y:-c}]),ns([{x:-n/2,y:-l},{x:-n/2,y:l}]),ns([{x:n/2,y:-l},{x:n/2,y:l}])],u=Oo(0,c+0.6,0.5),h={type:"pcb_courtyard_rect",pcb_courtyard_rect_id:"",pcb_component_id:"",center:{x:0,y:0},width:n+i+0.5,height:o+r+0.5,layer:"top"};return{circuitJson:[...s,...d,u,h],parameters:t}},Y2o=(e)=>({x:(e.minX+e.maxX)/2,y:(e.minY+e.maxY)/2}),V2o=(e)=>{if(e.length===0)return null;let t=e[0].x,n=e[0].y,o=e[0].x,i=e[0].y;for(let r=1;r<e.length;r++){let s=e[r];if(s.x<t)t=s.x;if(s.y<n)n=s.y;if(s.x>o)o=s.x;if(s.y>i)i=s.y}return{minX:t,minY:n,maxX:o,maxY:i}},U2o=Do.extend({fn:Be("smdslideswitch"),num_pins:Be(7).default(7),signalcols:Tv.number().int().min(3).default(3),missing:pY.default([]),p:fe.default("1mm").describe("signal-pad column pitch"),pw:fe.default("0.7mm").describe("signal-pad width"),pl:fe.default("1.5mm").describe("signal-pad length"),mounty:fe.default("-1.8mm").describe("Y position of the mounting-pad row center"),mpx:fe.default("5.5mm").describe("horizontal center-to-center mounting-pad distance"),mpy:fe.default("2.2mm").describe("vertical center-to-center mounting-pad distance"),mpw:fe.default("1mm").describe("mounting-pad width"),mpl:fe.default("0.8mm").describe("mounting-pad length"),holex:fe.default("1.5mm").describe("alignment-hole X distance from the footprint center"),holey:fe.optional().describe("alignment-hole Y position; defaults to mounty"),holed:fe.default("0.9mm").describe("alignment-hole diameter"),noholes:Ue().optional().default(!1)}),W2o=(e)=>{let t=U2o.parse(e),{num_pins:n,signalcols:o,missing:i,p:r,pw:s,pl:a,mounty:c,mpx:l,mpy:d,mpw:u,mpl:h,holex:A,holed:m,noholes:p}=t,g=t.holey??c,_=i.find((W)=>typeof W!=="number"||!Number.isInteger(W)||W<1||W>o);if(_!==void 0)throw Error(`Invalid missing signal column "${_}" for signalcols${o}`);let f=new Set(i.filter((W)=>typeof W==="number")),y=o-f.size;if(y+4!==n)throw Error(`smdslideswitch${n} needs ${n-4} signal pads, but signalcols${o}_missing(${[...f].join(",")}) creates ${y}`);let x=(W)=>Number(W.toFixed(12)),C=[],I=-((o-1)*r)/2,b=1;for(let W=1;W<=o;W++){if(f.has(W))continue;C.push(no(b,x(I+(W-1)*r),0,s,a)),b++}let P=c+d/2,E=c-d/2,B=[{x:x(-l/2),y:x(P)},{x:x(l/2),y:x(P)},{x:x(-l/2),y:x(E)},{x:x(l/2),y:x(E)}];for(let W of B)C.push(no(b,W.x,W.y,u,h)),b++;let w=p?[]:[-A,A].map((W)=>({type:"pcb_hole",pcb_hole_id:"",pcb_component_id:"",hole_shape:"circle",hole_diameter:m,x:W,y:g})),T=Math.max(l/2-u/2-0.2,r),Q=-a/2-0.2,N=E+h/2+0.2,F=[ns([{x:-T,y:Q},{x:T,y:Q}]),ns([{x:-T,y:N},{x:T,y:N}]),ns([{x:-T,y:N},{x:-T,y:Q}]),ns([{x:T,y:N},{x:T,y:Q}])],H=I+(o-1)*r,z=V2o([{x:I-s/2,y:-a/2},{x:H+s/2,y:a/2},{x:-l/2-u/2,y:E-h/2},{x:l/2+u/2,y:P+h/2},...!p?[{x:-A-m/2,y:g-m/2},{x:A+m/2,y:g+m/2}]:[]]);if(!z)throw Error("Could not determine SMD slide-switch bounds");let Y=0.25,U=Y2o(z),X={type:"pcb_courtyard_rect",pcb_courtyard_rect_id:"",pcb_component_id:"",center:U,width:z.maxX-z.minX+Y*2,height:z.maxY-z.minY+Y*2,layer:"top"},V=Oo(U.x,z.maxY+0.6,0.5);return{circuitJson:[...C,...w,...F,V,X],parameters:t}},X2o=Do.extend({fn:Be("smdpinheader"),num_pins:He().int().positive().default(6),p:fe.default("2.54mm").describe("contact pitch"),py:fe.default("3.31mm").describe("center-to-center distance between alternating pad rows"),pw:fe.default("1mm").describe("pad width"),ph:fe.default("2.51mm").describe("pad height"),bh:fe.default("2.5mm").describe("plastic body height"),male:Be(!0).default(!0),female:Be(!1).default(!1),smd:Be(!0).default(!0)}),K2o=(e)=>{let t=X2o.parse(e),{num_pins:n,p:o,py:i,pw:r,ph:s,bh:a}=t,c=-((n-1)*o)/2,l=Array.from({length:n},(C,I)=>no(I+1,c+I*o,I%2===0?i/2:-i/2,r,s)),d=n*o/2,u=a/2,h=Math.min(0.5,a/4),A=(C,I,b=-d)=>{let P=r/2+0.2,E=[],B=b;for(let w=I;w<n;w+=2){let T=c+w*o,Q=T-P;if(Q>B)E.push(ns([{x:B,y:C},{x:Q,y:C}]));B=T+P}if(B<d)E.push(ns([{x:B,y:C},{x:d,y:C}]));return E},m=[...A(u,0,-d+h),...A(-u,1),ns([{x:d,y:-u},{x:d,y:u}]),ns([{x:-d,y:-u},{x:-d,y:u-h},{x:-d+h,y:u}])],p=(n-1)*o/2+r/2,g=i/2+s/2,_=Math.max(d,p)+0.25,f=Math.max(u,g)+0.25,y={type:"pcb_courtyard_rect",pcb_courtyard_rect_id:"",pcb_component_id:"",center:{x:0,y:0},width:2*_,height:2*f,layer:"top"},x=Oo(0,f+0.6,0.5);return{circuitJson:[...l,...m,x,y],parameters:t}},j2o=Do.extend({fn:Z(),d:fe.optional(),hd:fe.optional(),r:fe.optional(),hr:fe.optional(),pd:fe.optional(),pr:fe.optional(),squarepad:Ue().optional().default(!1)}).transform((e)=>{let t;if(e.d!==void 0)t=yr(e.d);else if(e.hd!==void 0)t=yr(e.hd);else if(e.r!==void 0)t=yr(e.r)*2;else if(e.hr!==void 0)t=yr(e.hr)*2;else t=yr("1mm");let n;if(e.pd!==void 0)n=yr(e.pd);else if(e.pr!==void 0)n=yr(e.pr)*2;else n=t*1.5;return{fn:e.fn,d:t,pd:n,squarepad:e.squarepad??!1}}),q2o=(e)=>{let t=j2o.parse(e),{d:n,pd:o,squarepad:i}=t;return{circuitJson:[i?e1({pn:1,x:0,y:0,holeDiameter:n,rectPadWidth:o,rectPadHeight:o}):xr(1,0,0,n,o),Oo(0,o/2+0.5,0.2)],parameters:t}},J2o=Do.extend({fn:Z(),num_pins:Be(6).default(6),h:Z().default("1.3mm"),pl:Z().default("1.325mm"),pw:Z().default("0.6mm"),p:Z().default("0.95mm")}),$2o=(e)=>{let t=J2o.parse(e);return{circuitJson:Z2o(t),parameters:t}},Gxt=(e)=>{let{p:t,h:n,pn:o}=e;if(o===1)return{x:-n/2-0.4875,y:t};if(o===2)return{x:-n/2-0.4875,y:0};if(o===3)return{x:-n/2-0.4875,y:-t};if(o===4)return{x:n/2+0.4875,y:-t};if(o===5)return{x:n/2+0.4875,y:0};if(o===6)return{x:n/2+0.4875,y:t};throw Error("Invalid pin number")},Z2o=(e)=>{let t=[],n=Number.parseFloat(e.h),o=Number.parseFloat(e.p),i=Number.parseFloat(e.pl),r=Number.parseFloat(e.pw),s=Math.min(i,r)/8;for(let P=1;P<=e.num_pins;P++){let{x:E,y:B}=Gxt({h:n,p:o,pn:P});t.push(no(P,E,B,i,r,s))}let a=e.num_pins/2*o,c=n,l={layer:"top",pcb_component_id:"",pcb_silkscreen_path_id:"silkscreen_path_1",route:[{x:-a/3,y:c/2+Number.parseFloat(e.p)/1.3},{x:a/3,y:c/2+o/1.3}],type:"pcb_silkscreen_path",stroke_width:0.05},d={layer:"top",pcb_component_id:"",pcb_silkscreen_path_id:"silkscreen_path_2",route:[{x:-a/3,y:-c/2-o/1.3},{x:a/3,y:-c/2-o/1.3}],type:"pcb_silkscreen_path",stroke_width:0.05},u=Oo(0,c+0.3,0.3),h=Gxt({h:n,p:o,pn:1});h.x=h.x-r*1.5;let A=0.7,m=0.3,p={type:"pcb_silkscreen_path",layer:"top",pcb_component_id:"",pcb_silkscreen_path_id:"pin1_indicator",route:[{x:h.x+A/2-0.2,y:h.y},{x:h.x-A/2,y:h.y+m/2},{x:h.x-A/2,y:h.y-m/2},{x:h.x+A/2-0.2,y:h.y}],stroke_width:0.05},g=n/2+0.4875,_=o*2+r,f=g+i/2,y=n/2+0.4,x=f+0.25,C=_/2+0.25,I=C+0.2,b={type:"pcb_courtyard_outline",pcb_courtyard_outline_id:"",pcb_component_id:"",layer:"top",outline:t1([{minX:-x,maxX:x,minY:-C,maxY:C},{minX:-y,maxX:y,minY:-I,maxY:I}])};return[...t,u,l,d,p,b]},exo=Do.extend({fn:Be("sot143"),num_pins:Be(4).default(4),p:fe.default("2.382774mm"),px:fe.default("1.89992mm"),pw:fe.default("0.8382mm"),ph:fe.default("0.8382mm"),pin1padwidth:fe.default("1.1938mm"),pin1centeroffsetx:fe.default("0.199898mm"),w:fe.default("3mm"),h:fe.default("2.9mm")}),txo=(e)=>{let t=exo.parse(e),{p:n,px:o,pw:i,ph:r,pin1padwidth:s,pin1centeroffsetx:a,w:c,h:l}=t,d=o/2,u=n/2,h=[no(1,-d+a,-u,s,r),no(2,d,-u,i,r),no(3,d,u,i,r),no(4,-d,u,i,r)],A=c/2,m=l/2,p=[ns([{x:-A,y:-m/2},{x:-A,y:m/2}]),ns([{x:A,y:m/2},{x:A,y:-m/2}])],g=o+Math.max(s,i),_=n+r,f={type:"pcb_courtyard_rect",pcb_courtyard_rect_id:"",pcb_component_id:"",center:{x:0,y:0},width:Math.max(c,g)+0.5,height:Math.max(l,_)+0.5,layer:"top"};return{circuitJson:[...h,...p,Oo(0,Math.max(m,_/2)+0.8,0.4),f],parameters:t}},nxo=[{x:-1.703,y:0.98},{x:-0.983,y:0.98},{x:-0.983,y:1.1},{x:0.477,y:1.1},{x:0.477,y:0.98},{x:1.197,y:0.98},{x:1.197,y:-0.98},{x:0.477,y:-0.98},{x:0.477,y:-1.1},{x:-0.983,y:-1.1},{x:-0.983,y:-0.98},{x:-1.703,y:-0.98}],oxo=Do.extend({fn:Z(),num_pins:He().default(4),w:Z().default("3.2mm"),h:Z().default("2.6mm"),pl:Z().default("1.05mm"),pw:Z().default("0.45mm"),p:Z().default("0.55mm"),string:Z().optional()}),ixo=(e)=>{let t=e.string?.match(/^sot343_(\d+)/),n=t?Number.parseInt(t[1],4):4,o=oxo.parse({...e,num_pins:n});if(o.num_pins===4)return{circuitJson:sxo(o),parameters:o};throw Error("Invalid number of pins")},rxo=(e)=>{let{pn:t,p:n}=e;if(t===1)return{x:-n*1.92,y:-0.65};if(t===2)return{x:-n*1.92,y:0.65};if(t===3)return{x:n,y:0.65};if(t===4)return{x:n,y:-0.65};return{x:0,y:0}},sxo=(e)=>{let t=[],n=Number.parseFloat(e.w),o=Number.parseFloat(e.h),i=Number.parseFloat(e.pl),r=Number.parseFloat(e.pw),s=Number.parseFloat(e.p),a=Math.min(i,r)/8,c=1/0,l=-1/0,d=1/0,u=-1/0;for(let C=0;C<e.num_pins;C++){let{x:I,y:b}=rxo({num_pins:e.num_pins,pn:C+1,w:n,h:o,pl:i,p:s});if(t.push(no(C+1,I,b,i,r,a)),I<c)c=I;if(I>l)l=I;if(b<d)d=b;if(b>u)u=b}let h=(c+l)/2,A=u-d,m=o*0.3,p=A/2+m,g=n*0.8;if(o<=2.6)g/=2;let _=Oo(h,p+0.5,0.3),f={layer:"top",pcb_component_id:"",pcb_silkscreen_path_id:"silkscreen_path_top",route:[{x:h-g/2,y:p},{x:h+g/2,y:p}],type:"pcb_silkscreen_path",stroke_width:0.1},y={layer:"top",pcb_component_id:"",pcb_silkscreen_path_id:"silkscreen_path_bottom",route:[{x:h-g/2,y:-p},{x:h+g/2,y:-p}],type:"pcb_silkscreen_path",stroke_width:0.1},x={type:"pcb_courtyard_outline",pcb_courtyard_outline_id:"",pcb_component_id:"",outline:nxo,layer:"top"};return[...t,f,y,_,x]},axo=Do.extend({fn:Z()}),cxo=(e)=>{let t=axo.parse(e),n=[],o=0.35,i=1.5,r=0.5,s=0.25,a=0.5,c=75,l=-18.5;for(let P=0;P<75;P++){let E=P+1;if(E>=24&&E<=31)continue;let B=-18.5-P*0.25,w=E%2===0,T=1.5+(w?0.25:0),N=0.5-T/2,F=no(E,N,B,T,0.35);F.layer=w?"bottom":"top",n.push(F)}let d=1.1683999999999999,u=3.4798,h=6.6293999999999995,A={type:"pcb_cutout",pcb_cutout_id:"",shape:"rect",center:{x:-u/2+0.75,y:-18.5-h},width:u,height:d},m={x:-0.5,y:-18.5},p={type:"pcb_silkscreen_path",layer:"top",pcb_component_id:"pin_marker_1",route:[{x:m.x-0.4,y:m.y},{x:m.x-0.7,y:m.y+0.3},{x:m.x-0.7,y:m.y-0.3},{x:m.x-0.4,y:m.y}],stroke_width:0.05,pcb_silkscreen_path_id:"pin_marker_1"},g=1/0,_=-1/0,f=1/0,y=-1/0,x=(P,E,B=0,w=0)=>{g=Math.min(g,P-B/2),_=Math.max(_,P+B/2),f=Math.min(f,E-w/2),y=Math.max(y,E+w/2)};for(let P of n){let E=P;x(E.x,E.y,E.width,E.height)}x(A.center.x,A.center.y,A.width,A.height);for(let P of p.route)x(P.x,P.y);let C=(g+_)/2,I=(f+y)/2,b=(P)=>{if(typeof P.x==="number")P.x-=C;if(typeof P.y==="number")P.y-=I;if(P.center)P.center.x-=C,P.center.y-=I;if(Array.isArray(P.route))P.route=P.route.map((E)=>({x:E.x-C,y:E.y-I}))};for(let P of n)b(P);return b(A),b(p),{circuitJson:[...n,A,p],parameters:t}};var lxo=Do.extend({fn:Z(),numPins:He().optional().default(0),rows:kn([Z(),He()]).transform((e)=>Number(e)).optional().default(1).describe("number of rows"),p:fe.default("2.54mm").describe("pitch"),id:fe.default("1.0mm").describe("inner diameter"),od:fe.default("1.5mm").describe("outer diameter"),male:Ue().optional().describe("the module uses male headers"),nopin:Ue().optional().default(!1).describe("omit pins rendering"),female:Ue().optional().describe("the module uses female headers"),smd:Ue().optional().describe("surface mount device"),pinlabeltextalignleft:Ue().optional().default(!1),pinlabeltextaligncenter:Ue().optional().default(!1),pinlabeltextalignright:Ue().optional().default(!1),pinlabelverticallyinverted:Ue().optional().default(!1),pinlabelorthogonal:Ue().optional().default(!1),nopinlabels:Ue().optional().default(!1).describe("omit silkscreen pin labels"),doublesidedpinlabel:Ue().optional().default(!1).describe("add silkscreen pins in top and bottom layers"),bottomsidepinlabel:Ue().optional().default(!1).describe("place the silkscreen reference text on the bottom layer instead of top"),pinRowSide:Zt(["left","right","top","bottom"]).optional().default("left"),pinrowleft:Ue().optional().default(!1),pinrowright:Ue().optional().default(!1),pinrowtop:Ue().optional().default(!1),pinrowbottom:Ue().optional().default(!1),pinrowleftpins:kn([Z(),He()]).transform((e)=>Number(e)).optional(),pinrowrightpins:kn([Z(),He()]).transform((e)=>Number(e)).optional(),pinrowtoppins:kn([Z(),He()]).transform((e)=>Number(e)).optional(),pinrowbottompins:kn([Z(),He()]).transform((e)=>Number(e)).optional(),width:fe.optional(),height:fe.optional(),pinRowHoleEdgeToEdgeDist:fe.default("2mm"),holes:kn([Z(),Qt(Z())]).optional().transform((e)=>{if(!e)return e;if(Array.isArray(e))return e;if(e.startsWith("(")&&e.endsWith(")"))return e.slice(1,-1).split(",").map((t)=>t.trim());return[e]}),holeXDist:fe.optional(),holeYDist:fe.optional(),holeInset:fe.default("1mm"),pinrow:kn([Z(),He()]).optional(),usbposition:Zt(["left","right","top","bottom"]).optional().default("left"),usbleft:Ue().optional().default(!1),usbtop:Ue().optional().default(!1),usbright:Ue().optional().default(!1),usbbottom:Ue().optional().default(!1),usbtype:Zt(["micro","c"]).optional(),usbmicro:Ue().optional().default(!1),usbc:Ue().optional().default(!1),screen:Ue().optional().default(!1).describe("add silkscreen outline for screen/display area"),screenwidth:fe.optional(),screenheight:fe.optional(),screencenteroffsetx:fe.optional(),screencenteroffsety:fe.optional()}).transform((e)=>{let t=cCt(e),n=e.pinRowSide;if(e.pinrowleft)n="left";if(e.pinrowright)n="right";if(e.pinrowtop)n="top";if(e.pinrowbottom)n="bottom";let o=e.usbposition;if(e.usbleft)o="left";if(e.usbtop)o="top";if(e.usbright)o="right";if(e.usbbottom)o="bottom";let i=e.usbtype;if(e.usbmicro)i="micro";if(e.usbc)i="c";if(e.pinrow!==void 0)e.numPins=Number(e.pinrow);let r={left:e.pinrowleftpins,right:e.pinrowrightpins,top:e.pinrowtoppins,bottom:e.pinrowbottompins},s=Object.values(r).some((x)=>x!==void 0&&x>0),a=(r.left??0)>0&&(r.right??0)>0,c=(r.top??0)>0&&(r.bottom??0)>0;if(s){if((r.left??0)>0)n="left";else if((r.right??0)>0)n="right";else if((r.top??0)>0)n="top";else if((r.bottom??0)>0)n="bottom";e.numPins=(r.left??0)+(r.right??0)+(r.top??0)+(r.bottom??0)}let l=Math.ceil(e.numPins/e.rows),d=Math.max(r.left??0,r.right??0),u=Math.max(r.top??0,r.bottom??0),h,A;if(s){let x=a?e.p:0,C=c?e.p:0;h=(u>0?(u-1)*e.p:0)+2*e.pinRowHoleEdgeToEdgeDist+x,A=(d>0?(d-1)*e.p:0)+2*e.pinRowHoleEdgeToEdgeDist+C}else if(n==="left"||n==="right")h=(e.rows-1)*e.p+2*e.pinRowHoleEdgeToEdgeDist,A=(l-1)*e.p+2*e.pinRowHoleEdgeToEdgeDist;else A=(e.rows-1)*e.p+2*e.pinRowHoleEdgeToEdgeDist,h=(l-1)*e.p+2*e.pinRowHoleEdgeToEdgeDist;if(e.numPins===0)h=10,A=10;let m=e.width??h,p=e.height??A,g=e.screenwidth??m*0.95,_=e.screenheight??p*0.95,f=e.screencenteroffsetx??0,y=e.screencenteroffsety??0;return{...e,pinlabelAnchorSide:t,pinRowSide:n,usbposition:o,usbtype:i,male:e.male??!e.female,female:e.female??!1,width:m,height:p,screenwidth:g,screenheight:_,screencenteroffsetx:f,screencenteroffsety:y,pinrowleftpins:r.left,pinrowrightpins:r.right,pinrowtoppins:r.top,pinrowbottompins:r.bottom}}).superRefine((e,t)=>{if(e.male&&e.female)t.addIssue({code:jt.custom,message:"'male' and 'female' cannot both be true; it should be male or female.",path:["male","female"]})}),dxo=(e)=>{let t=lxo.parse(e),{p:n,id:o,od:i,rows:r,numPins:s,pinlabelAnchorSide:a,pinlabelverticallyinverted:c,pinlabelorthogonal:l,pinlabeltextalignleft:d,pinlabeltextalignright:u,nopinlabels:h,doublesidedpinlabel:A,bottomsidepinlabel:m,pinRowSide:p,width:g,height:_,pinRowHoleEdgeToEdgeDist:f,holes:y,holeXDist:x,holeYDist:C,holeInset:I,pinrowleftpins:b,pinrowrightpins:P,pinrowtoppins:E,pinrowbottompins:B,usbposition:w,usbtype:T,screen:Q,screenwidth:N,screenheight:F,screencenteroffsetx:H,screencenteroffsety:z}=t,Y="center";if(d)Y="left";else if(u)Y="right";let U=[],X={left:b,right:P,top:E,bottom:B},V=Object.values(X).some((q)=>q!==void 0&&q>0),W=(q,ne,ce,oe)=>{if(t.smd)U.push(no(q,ne,ce,t.od,t.od));else if(q===1)U.push(e1({pn:q,x:ne,y:ce,holeDiameter:o,rectPadWidth:i,rectPadHeight:i}));else U.push(xr(q,ne,ce,o,i));if(!h){let ie=ne+(oe==="left"?-i:oe==="right"?i:0),J=ce+(oe==="top"?i:oe==="bottom"?-i:0);if(!m)U.push(YQ({fs:i/5,pn:q,anchor_x:ie,anchor_y:J,anchorplacement:oe,textalign:Y,orthogonal:l,verticallyinverted:c,layer:"top"}));if(A||m)U.push(YQ({fs:i/5,pn:q,anchor_x:ie,anchor_y:J,anchorplacement:oe,textalign:Y,orthogonal:l,verticallyinverted:c,layer:"bottom"}))}};if(V){let q=n,ne=1,ce=X.left??0,oe=X.right??0,ie=X.top??0,J=X.bottom??0,ee=(se,le)=>{if(le<=0)return;if(se==="left"||se==="right"){let he=se==="left"?-g/2+f:g/2-f,ue=(le-1)/2*q;for(let Ae=0;Ae<le;Ae++)W(ne,he,ue-Ae*q,se),ne++}else{let he=se==="top"?_/2-f:-_/2+f,ue=-((le-1)/2)*q;for(let Ae=0;Ae<le;Ae++)W(ne,ue+Ae*q,he,se),ne++}};ee("left",ce),ee("right",oe),ee("top",ie),ee("bottom",J)}else{let q=n,ne=0,ce=0,oe=0,ie=0,J=0,ee=0,se=Math.ceil(s/r);if(p==="left"||p==="right")ne=p==="left"?-g/2+f:g/2-f,ce=(se-1)/2*q,oe=0,ie=-q,J=p==="left"?q:-q,ee=0;else ne=-(se-1)/2*q,ce=p==="top"?_/2-f:-_/2+f,oe=q,ie=0,J=0,ee=p==="top"?-q:q;let le=1;for(let he=0;he<r&&le<=s;he++)for(let ue=0;ue<se&&le<=s;ue++){let Ae=ne+ue*oe+he*J,_e=ce+ue*ie+he*ee;if(t.smd)U.push(no(le,Ae,_e,t.od,t.od));else if(le===1)U.push(e1({pn:le,x:Ae,y:_e,holeDiameter:o,rectPadWidth:i,rectPadHeight:i}));else U.push(xr(le,Ae,_e,o,i));if(!h){let Pe=Ae+(p==="left"?-i:p==="right"?i:0),Ee=_e+(p==="top"?i:p==="bottom"?-i:0);if(!m)U.push(YQ({fs:i/5,pn:le,anchor_x:Pe,anchor_y:Ee,anchorplacement:a,textalign:Y,orthogonal:l,verticallyinverted:c,layer:"top"}));if(A||m)U.push(YQ({fs:i/5,pn:le,anchor_x:Pe,anchor_y:Ee,anchorplacement:a,textalign:Y,orthogonal:l,verticallyinverted:c,layer:"bottom"}))}le++}}if(y)for(let q of y){let ne=0,ce=0;if(q==="topleft")ne=-g/2+I,ce=_/2-I;else if(q==="topright")ne=g/2-I,ce=_/2-I;else if(q==="bottomleft")ne=-g/2+I,ce=-_/2+I;else if(q==="bottomright")ne=g/2-I,ce=-_/2+I;else if(q==="center")ne=0,ce=0;if(x!==void 0)ne+=x;if(C!==void 0)ce+=C;U.push(xr(s+y.indexOf(q)+1,ne,ce,o,i))}if(!t.nosilkscreen){let q=[{x:-g/2,y:-_/2},{x:g/2,y:-_/2},{x:g/2,y:_/2},{x:-g/2,y:_/2},{x:-g/2,y:-_/2}];U.push(ns(q,{stroke_width:0.1,layer:"top"}))}let j=Oo(0,_/2+1,0.5);if(U.push(j),w&&T){let q,ne;if(T==="c")q=8,ne=3;else if(T==="micro")q=6,ne=2;else return{circuitJson:U,parameters:t};let ce;if(w==="left")ce=[{x:-g/2,y:-q/2},{x:-g/2+ne,y:-q/2},{x:-g/2+ne,y:q/2},{x:-g/2,y:q/2},{x:-g/2,y:-q/2}];else if(w==="right")ce=[{x:g/2-ne,y:-q/2},{x:g/2,y:-q/2},{x:g/2,y:q/2},{x:g/2-ne,y:q/2},{x:g/2-ne,y:-q/2}];else if(w==="top")ce=[{x:-q/2,y:_/2-ne},{x:q/2,y:_/2-ne},{x:q/2,y:_/2},{x:-q/2,y:_/2},{x:-q/2,y:_/2-ne}];else if(w==="bottom")ce=[{x:-q/2,y:-_/2},{x:q/2,y:-_/2},{x:q/2,y:-_/2+ne},{x:-q/2,y:-_/2+ne},{x:-q/2,y:-_/2}];else return{circuitJson:U,parameters:t};U.push(ns(ce,{stroke_width:0.1,layer:"top"}))}if(Q){let q=N/2,ne=F/2,ce=H,oe=z,ie=[{x:-q+ce,y:-ne+oe},{x:q+ce,y:-ne+oe},{x:q+ce,y:ne+oe},{x:-q+ce,y:ne+oe},{x:-q+ce,y:-ne+oe}];U.push(ns(ie,{stroke_width:0.05,layer:"top"}))}return{circuitJson:U,parameters:t}},uxo=[{x:-1.45,y:2.75},{x:-1.45,y:-1.85},{x:4.05,y:-1.85},{x:4.05,y:2.75}],hxo=[{x:-1.55,y:2.75},{x:-1.55,y:-1.85},{x:3.95,y:-1.85},{x:3.95,y:2.75}],mxo=Do.extend({fn:Z(),num_pins:He().default(3),inline:Ue().default(!1),p:Z().default("1.27mm"),id:Z().default("0.75mm"),od:Z().default("1.3mm"),w:Z().default("4.8mm"),h:Z().default("4.0mm")}),pxo=(e)=>{let t=mxo.parse(e),n=Number.parseFloat(t.p),o=Number.parseFloat(t.w),i=Number.parseFloat(t.h),r=t.inline?1.05:Number.parseFloat(t.od),s=t.inline?1.5:r,a=[e1({pn:1,x:0,y:0,holeDiameter:t.id,rectPadWidth:r,rectPadHeight:s}),t.inline?rE(2,n,0,Number.parseFloat(t.id),r,s):xr(2,n,n,t.id,r),t.inline?rE(3,n*2,0,Number.parseFloat(t.id),r,s):xr(3,n*2,0,t.id,r)],c=o/2,l=t.inline?n-0.09:n,d=0.2,u=0.2+c-i,h=Array.from({length:32},(g,_)=>{let f=Math.PI*_/31;return{x:l+c*Math.cos(f),y:0.2+c*Math.sin(f)}}),A={type:"pcb_silkscreen_path",layer:"top",pcb_component_id:"",pcb_silkscreen_path_id:"",stroke_width:0.12,route:[...h,{x:l-c,y:u},{x:l+c,y:u},h[0]]},m=Oo(l,0.2+c+1,0.5),p={type:"pcb_courtyard_outline",pcb_courtyard_outline_id:"",pcb_component_id:"",outline:t.inline?hxo:uxo,layer:"top"};return{circuitJson:[...a,A,m,p],parameters:t}},Axo=Do.extend({fn:Be("usbcmidmount"),num_pins:Be(16).default(16),pinstart:Tv.number().int().positive().default(1),split:Ue().default(!1).describe("emit all 16 contact lands"),reverse:Ue().default(!1).describe("number contact lands right-to-left"),noholes:Ue().default(!1).describe("omit the two locator holes"),rowy:fe.default("2.125mm").describe("contact pad row y position"),ph:fe.default("1.1mm").describe("contact pad height"),pw:fe.default("0.3mm").describe("signal contact pad width"),powerpw:fe.default("0.55mm").describe("merged power pad width"),powerx:fe.default("3.2mm").describe("outer merged power pad x"),shellx:fe.default("4.325mm").describe("shell tab x position"),topy:fe.default("1.575mm").describe("upper shell tab y position"),bottomy:fe.default("2.625mm").describe("lower shell tab negative y magnitude"),tophw:fe.default("0.6mm").describe("upper shell slot width"),tophh:fe.default("1.5mm").describe("upper shell slot height"),topring:fe.default("0.25mm").describe("upper shell annular ring"),bottomhw:fe.default("0.6mm").describe("lower shell slot width"),bottomhh:fe.default("1.2mm").describe("lower shell slot height"),bottomring:fe.default("0.3mm").describe("lower shell annular ring"),holex:fe.default("2.89mm").describe("locator hole x position"),holey:fe.default("1.055mm").describe("locator hole y position"),holed:fe.default("0.7mm").describe("locator hole diameter"),bodybottom:fe.default("5.225mm").describe("connector body negative y extent")}),Gme=({pin:e,x:t,y:n,holeWidth:o,holeHeight:i,outerWidth:r,outerHeight:s})=>({type:"pcb_plated_hole",shape:"pill",pcb_plated_hole_id:"",pcb_component_id:"",pcb_port_id:"",x:t,y:n,hole_width:o,hole_height:i,outer_width:r,outer_height:s,ccw_rotation:0,layers:["top","bottom"],port_hints:[e.toString()]}),_xo=(e)=>{let t=Axo.parse(e),{pinstart:n,split:o,reverse:i,noholes:r,rowy:s,ph:a,pw:c,powerpw:l,powerx:d,shellx:u,topy:h,bottomy:A,tophw:m,tophh:p,topring:g,bottomhw:_,bottomhh:f,bottomring:y,holex:x,holey:C,holed:I,bodybottom:b}=t,P=r?[]:[-x,x].map((oe)=>({type:"pcb_hole",pcb_hole_id:"",pcb_component_id:"",hole_shape:"circle",hole_diameter:I,x:oe,y:C})),E=[Gme({pin:n,x:-u,y:h,holeWidth:m,holeHeight:p,outerWidth:m+2*g,outerHeight:p+2*g}),Gme({pin:n+1,x:u,y:h,holeWidth:m,holeHeight:p,outerWidth:m+2*g,outerHeight:p+2*g}),Gme({pin:n+2,x:-u,y:-A,holeWidth:_,holeHeight:f,outerWidth:_+2*y,outerHeight:f+2*y}),Gme({pin:n+3,x:u,y:-A,holeWidth:_,holeHeight:f,outerWidth:_+2*y,outerHeight:f+2*y})],B=Number((d-0.8).toFixed(12)),w=[-d,-B,-1.75,-1.25,-0.75,-0.25,0.25,0.75,1.25,1.75,B,d],Q=o?[-3.35,-3.05,-2.55,-2.25,-1.75,-1.25,-0.75,-0.25,0.25,0.75,1.25,1.75,2.25,2.55,3.05,3.35]:w,N=i?Q.slice().reverse():Q,F=o?N.map(()=>c):N.map((oe,ie)=>ie<2||ie>=N.length-2?l:c),H=N.map((oe,ie)=>no(n+4+ie,oe,s,F[ie],a)),z=Math.min(u-Math.max(m,_)/2-0.2,4.5),Y=[ns([{x:-z,y:-A+f/2+y+0.2},{x:-z,y:h-p/2-g-0.2}]),ns([{x:z,y:-A+f/2+y+0.2},{x:z,y:h-p/2-g-0.2}]),ns([{x:-z,y:-b},{x:z,y:-b}])],U=Math.max(s+a/2,h+p/2+g),X=Math.min(-b,-A-f/2-y),V=-u-Math.max(m+2*g,_+2*y)/2-0.25,W=-V,j=U+0.25,q=X-0.25,ne=Oo(0,j+0.75,0.5),ce={type:"pcb_courtyard_rect",pcb_courtyard_rect_id:"",pcb_component_id:"",center:{x:0,y:(j+q)/2},width:W-V,height:j-q,layer:"top"};return{circuitJson:[...P,...E,...H,...Y,ne,ce],parameters:t}},iE=fe.refine((e)=>Number.isFinite(e)&&e>0,"dimension must be finite and positive"),gxo=Do.extend({fn:Be("usba"),num_pins:Be(4).default(4),tht:Be(!0).default(!0),smd:Be(!1).default(!1),pinstart:Tv.number().int().positive().default(1),reverse:Ue().default(!1),p:iE.default("2.5mm").describe("pitch within each outer contact pair"),centerp:iE.default("2mm").describe("pitch between the two inner contacts"),id:iE.default("0.92mm").describe("electrical contact drill diameter"),ring:iE.default("0.3mm").describe("electrical contact annular ring"),shieldspan:iE.default("13.14mm").describe("shell mounting-hole center span"),shieldy:fe.refine(Number.isFinite,"dimension must be finite").default("-2.71mm").describe("signed shell row offset from the contact row"),shieldid:iE.default("2.3mm").describe("shell mounting-hole drill diameter"),shieldring:iE.default("0.3mm").describe("shell mounting-hole annular ring"),w:iE.default("13.1mm").describe("body width"),h:iE.default("13.85mm").describe("body length toward mating edge"),bodybottom:iE.default("12.99mm").describe("mating-edge distance from contact row")}).superRefine((e,t)=>{if(e.id+2*e.ring>=Math.min(e.p,e.centerp))t.addIssue({code:jt.custom,path:["ring"],message:"contact lands must remain separate"});if(e.shieldid+2*e.shieldring>=e.shieldspan)t.addIssue({code:jt.custom,path:["shieldring"],message:"shell mounting lands must remain separate"});if(e.bodybottom>e.h)t.addIssue({code:jt.custom,path:["bodybottom"],message:"mating edge offset must fit within body length"})}),fxo=(e)=>{let t=gxo.parse(e),{pinstart:n,reverse:o,p:i,centerp:r,id:s,ring:a,shieldspan:c,shieldy:l,shieldid:d,shieldring:u,w:h,h:A,bodybottom:m}=t,p=(F)=>Number(F.toFixed(12)),g=p(s+2*a),_=p(d+2*u),f=r/2,y=f+i,C=[-y,-f,f,y].map((F,H)=>xr(n+H,p(o?-F:F),0,s,g)),I=[xr(n+4,-c/2,l,d,_),xr(n+5,c/2,l,d,_)],b=p(A-m),P=_/2+0.2,E=[[-m,Math.min(b,l-P)],[Math.max(-m,l+P),b]].filter(([F,H])=>H>F),B=[ns([{x:-h/2,y:-m},{x:h/2,y:-m}]),ns([{x:-h/2,y:b},{x:h/2,y:b}]),...E.flatMap(([F,H])=>[-h/2,h/2].map((z)=>ns([{x:z,y:F},{x:z,y:H}])))],w=Math.max(h/2,y+g/2,c/2+_/2),T=Math.max(b,g/2,l+_/2)+0.25,Q=Math.min(-m,-g/2,l-_/2)-0.25,N={type:"pcb_courtyard_rect",pcb_courtyard_rect_id:"",pcb_component_id:"",center:{x:0,y:p((T+Q)/2)},width:p(2*(w+0.25)),height:p(T-Q),layer:"top"};return{circuitJson:[...C,...I,...B,Oo(0,T+0.55,0.5),N],parameters:t}},NA=fe.refine((e)=>Number.isFinite(e)&&e>0,"dimension must be finite and positive"),Yxt=fe.refine(Number.isFinite,"dimension must be finite"),yxo=Do.extend({fn:Be("usbmicro"),num_pins:Be(5).default(5),frontflange:Be(!0).default(!0),noflange:Be(!1).default(!1),pinstart:Tv.number().int().positive().default(1),reverse:Ue().default(!1),p:NA.default("0.65mm").describe("electrical contact pitch"),pw:NA.default("0.4mm").describe("electrical contact pad width"),ph:NA.default("1.35mm").describe("electrical contact pad height"),rowy:Yxt.default("2.675mm").describe("contact row from front slots"),rearspan:NA.default("5mm").describe("rear shell slot center span"),reary:Yxt.default("2.7mm").describe("rear shell row from front slots"),rearhw:NA.default("0.85mm").describe("rear shell slot width"),rearhh:NA.default("0.55mm").describe("rear shell slot height"),rearring:NA.default("0.2mm").describe("rear shell annular ring"),frontspan:NA.default("7mm").describe("front shell slot center span"),fronthw:NA.default("0.5mm").describe("front shell slot width"),fronthh:NA.default("1.15mm").describe("front shell slot height"),frontpw:NA.default("1mm").describe("centered front shell land width"),frontph:NA.default("1.55mm").describe("centered front shell land height"),tabspan:NA.default("2mm").describe("inner shell SMT tab center span"),tabpw:NA.default("1.5mm").describe("inner shell SMT tab pad width"),tabph:NA.default("1.55mm").describe("inner shell SMT tab pad height"),w:NA.default("8mm").describe("body width including front flange"),bodytop:NA.default("2.7mm").describe("body extent behind front slots"),bodybottom:NA.default("2.3mm").describe("body extent toward mating edge")}).superRefine((e,t)=>{for(let[n,o,i]of[[e.pw>=e.p,"pw","contact pads must be narrower than pitch"],[e.frontpw<=e.fronthw,"frontpw","front land must surround slot width"],[e.frontph<=e.fronthh,"frontph","front land must surround slot height"],[e.tabpw>=e.tabspan,"tabpw","inner shell pads must remain separate"]])if(n)t.addIssue({code:jt.custom,path:[o],message:i})}),xxo=(e)=>{let t=yxo.parse(e),{pinstart:n,reverse:o,p:i,pw:r,ph:s,rowy:a,rearspan:c,reary:l,rearhw:d,rearhh:u,rearring:h,frontspan:A,fronthw:m,fronthh:p,frontpw:g,frontph:_,tabspan:f,tabpw:y,tabph:x,w:C,bodytop:I,bodybottom:b}=t,P=(X)=>Number(X.toFixed(12)),E=Array.from({length:5},(X,V)=>no(n+V,P((o?2-V:V-2)*i),a,r,s)),B=(X,V,W,j,q,ne,ce)=>({type:"pcb_plated_hole",shape:"pill",pcb_plated_hole_id:"",pcb_component_id:"",pcb_port_id:"",x:V,y:W,hole_width:j,hole_height:q,outer_width:P(ne),outer_height:P(ce),ccw_rotation:0,layers:["top","bottom"],port_hints:[String(X)]}),w=[B(n+5,-c/2,l,d,u,d+2*h,u+2*h),B(n+6,c/2,l,d,u,d+2*h,u+2*h),B(n+7,-A/2,0,m,p,g,_),B(n+8,A/2,0,m,p,g,_)],T=[no(n+9,-f/2,0,y,x),no(n+10,f/2,0,y,x)],Q=Math.max(_,x)/2+0.2,N=[[-b,Math.min(I,-Q)],[Math.max(-b,Q),I]].filter(([X,V])=>V>X),F=[ns([{x:-C/2,y:-b},{x:C/2,y:-b}]),...N.flatMap(([X,V])=>[-C/2,C/2].map((W)=>ns([{x:W,y:X},{x:W,y:V}])))],H=Math.max(C/2,2*i+r/2,c/2+d/2+h,A/2+g/2,f/2+y/2),z=Math.max(I,a+s/2,l+u/2+h,_/2,x/2)+0.25,Y=Math.min(-b,a-s/2,l-u/2-h,-_/2,-x/2)-0.25,U={type:"pcb_courtyard_rect",pcb_courtyard_rect_id:"",pcb_component_id:"",center:{x:0,y:P((z+Y)/2)},width:P(2*(H+0.25)),height:P(z-Y),layer:"top"};return{circuitJson:[...E,...w,...T,...F,Oo(0,z+0.55,0.5),U],parameters:t}},wLr=qme.extend({}).transform(Jme),Cxo=(e)=>{if(e.legsoutside=!1,!e.pl)e.pl=1;if(!e.pw)e.pw=0.6;return t8(e)},Ixo=(e,t)=>{let n=e.filter((o)=>o.type==="pcb_silkscreen_text");if(n.length===0)return e;for(let o of n)if(t.norefdes)o.text="";return e},bxo=(e,t)=>{if(!t.nosilkscreen)return e;return e.filter((n)=>n.type!=="pcb_silkscreen_path"&&n.type!=="pcb_silkscreen_text")},Sxo=(e,t)=>{if(!t)return e;let n=e.filter((d)=>d.type==="pcb_smtpad"||d.type==="pcb_plated_hole");if(n.length===0)return e;let{POSITIVE_INFINITY:o,NEGATIVE_INFINITY:i,POSITIVE_INFINITY:r,NEGATIVE_INFINITY:s}=Number,a=(d,u,h=0,A=0)=>{let m=d-h/2,p=d+h/2,g=u-A/2,_=u+A/2;o=Math.min(o,m),i=Math.max(i,p),r=Math.min(r,g),s=Math.max(s,_)};for(let d of n)if(d.type==="pcb_smtpad"){if(d.shape==="polygon"){for(let A of d.points)a(A.x,A.y);continue}let u=d.shape==="circle"?d.radius*2:d.width,h=d.shape==="circle"?d.radius*2:d.height;if(d.shape==="rotated_rect"){let A=d.ccw_rotation*Math.PI/180,m=Math.abs(Math.cos(A)),p=Math.abs(Math.sin(A));[u,h]=[u*m+h*p,u*p+h*m]}a(d.x,d.y,u,h)}else if(d.type==="pcb_plated_hole"){let u=d.outer_diameter??d.hole_diameter;a(d.x,d.y,u,u)}let c=0,l=0;switch(t){case"center":c=(o+i)/2,l=(r+s)/2;break;case"bottomleft":c=o,l=r;break;case"bottomcenter":case"centerbottom":c=(o+i)/2,l=r;break;case"topcenter":case"centertop":c=(o+i)/2,l=s;break;case"leftcenter":case"centerleft":c=o,l=(r+s)/2;break;case"rightcenter":case"centerright":c=i,l=(r+s)/2;break;case"pin1":{let d=n.find((u)=>u.port_hints?.[0]==="1")||n[0];c=d.x,l=d.y;break}}if(c===0&&l===0)return e;for(let d of e){if(typeof d.x==="number")d.x-=c;if(typeof d.y==="number")d.y-=l;if(d.center&&typeof d.center.x==="number")d.center.x-=c,d.center.y-=l;for(let u of["points","outline","route"]){if(!Array.isArray(d[u]))continue;for(let h of d[u])h.x-=c,h.y-=l}if((d.type==="pcb_silkscreen_text"||d.type==="pcb_fabrication_note_text")&&d.anchor_position)d.anchor_position.x-=c,d.anchor_position.y-=l}return e},Pxo=[0,90,180,270],Wme=(e,t)=>{switch(t){case 90:return{x:-e.y,y:e.x};case 180:return{x:-e.x,y:-e.y};case 270:return{x:e.y,y:-e.x};default:return{...e}}},Vxt=(e)=>{if(typeof e.x==="number"&&typeof e.y==="number")return{x:e.x,y:e.y};if(Array.isArray(e.points)&&e.points.length>0){let t=e.points.map((o)=>o.x),n=e.points.map((o)=>o.y);return{x:(Math.min(...t)+Math.max(...t))/2,y:(Math.min(...n)+Math.max(...n))/2}}return null},vxo=(e)=>e.port_hints?.some((t)=>/^(?:pin)?1$/i.test(String(t))),Exo=(e,t,[n,o])=>{let i=e.map((_)=>_.x),r=e.map((_)=>_.y),s=Math.min(...i),a=Math.max(...i),c=Math.min(...r),l=Math.max(...r),d=(s+a)/2,u=(c+l)/2,h=a-s,A=l-c,m=Math.max(h,A,1)*0.000001,p=n==="leftside"&&Math.abs(t.x-s)<=m||n==="rightside"&&Math.abs(t.x-a)<=m||n==="topside"&&Math.abs(t.y-l)<=m||n==="bottomside"&&Math.abs(t.y-c)<=m,g=o==="left"&&(h<=m||t.x<d-m)||o==="right"&&(h<=m||t.x>d+m)||o==="top"&&(A<=m||t.y>u+m)||o==="bottom"&&(A<=m||t.y<u-m);return p&&g},G8e=(e,t)=>{if(!e||typeof e!=="object"||typeof e.x!=="number"||typeof e.y!=="number")return;let n=Wme(e,t);e.x=n.x,e.y=n.y},Yme=(e)=>(e%360+360)%360,Mxo=(e,t)=>{switch(e.shape){case"rect":return{...e,shape:"rotated_rect",ccw_rotation:Yme(t)};case"pill":return{...e,shape:"rotated_pill",ccw_rotation:Yme(t)};case"rotated_rect":case"rotated_pill":return{...e,ccw_rotation:Yme(e.ccw_rotation+t)};default:return e}},Bxo=(e,t)=>{if(t===0)return e;return e.map((n)=>{let o=structuredClone(n);if(typeof o.x==="number"&&typeof o.y==="number"){let i=Wme(o,t);o.x=i.x,o.y=i.y}G8e(o.center,t),G8e(o.anchor_position,t);for(let i of["route","outline","points"]){if(!Array.isArray(o[i]))continue;for(let r of o[i])G8e(r,t)}if(o.type==="pcb_smtpad")return Mxo(o,t);if(o.type==="pcb_plated_hole"||o.type==="pcb_silkscreen_text"||o.type==="pcb_fabrication_note_text")o.ccw_rotation=Yme(Number(o.ccw_rotation??0)+t);if((t===90||t===270)&&(o.type==="pcb_courtyard_rect"||o.type==="pcb_silkscreen_rect"||o.type==="pcb_fabrication_note_rect"||o.type==="pcb_cutout"&&o.shape==="rect"))[o.width,o.height]=[o.height,o.width];return o})},wxo=(e,t)=>{if(!t)return e;let n=e.filter((a)=>a.type==="pcb_smtpad"||a.type==="pcb_plated_hole"),o=n.find(vxo),i=n.map(Vxt).filter((a)=>a!==null),r=o?Vxt(o):null;if(!o||!r||i.length===0)throw Error(`pin1location(${t.join(",")}) requires a footprint with a pad whose port_hints contain "1" or "pin1"`);let s=Pxo.find((a)=>{let c=i.map((d)=>Wme(d,a)),l=Wme(r,a);return Exo(c,l,t)});if(s===void 0)throw Error(`pin1location(${t.join(",")}) cannot be reached with a rotation; the requested location may be the mirrored orientation of this footprint`);return Bxo(e,s)},Uxt=(e,t,n)=>Math.min(e,t/2,n/2),Txo=(e,t)=>{if(t===void 0)return e;let n=yr(t);if(!Number.isFinite(n)||n<0)throw Error(`rounded radius must be a non-negative length, got "${t}"`);for(let o of e){if(o.type==="pcb_smtpad"&&(o.shape==="rect"||o.shape==="rotated_rect"))o.corner_radius=Uxt(n,o.width,o.height);if(o.type==="pcb_plated_hole"&&"rect_pad_width"in o&&"rect_pad_height"in o)o.rect_border_radius=Uxt(n,o.rect_pad_width,o.rect_pad_height)}return e};function Dxo(e){return e!==null&&e!==void 0}var Nxo=(e)=>e.trim().replace(/^do-219ad(?=_|$)/i,"do219ad").replace(/^sod-323he(?=_|$)/i,"sod323he").replace(/^pinheader(?=[\d_]|$)/i,"pinrow").replace(/^d2pak(\d+)(?=_|$)/i,"d2pak_$1").replace(/^to-252(?:-(\d+))?(?=_|$)/i,(t,n)=>n?`to252_${n}`:"to252").replace(/^to-263(?:-(\d+))?(?=_|$)/i,(t,n)=>n?`to263_${n}`:"to263").replace(/^sot-23(?:-(\d+))?(?=_|$)/i,(t,n)=>n?`sot23_${n}`:"sot23").replace(/^sot23-(\d+)(?=_|$)/i,"sot23_$1").replace(/^sot-223-(\d+)(?=_|$)/i,"sot223_$1").replace(/^to-220f-(\d+)(?=_|$)/i,"to220f_$1").replace(/^jst_(ph|sh|zh|xh)_(\d+)(?=_|$)/i,"jst$2_$1"),Rxo=(e)=>e.replace(/([+-]?(?:\d+(?:\.\d*)?|\.\d+))\s*(?:um|µm)(?=$|[x,() ])/gi,(t)=>`${Number(fe.parse(t).toPrecision(12))}mm`),Qxo=(e)=>{let t=$me(),n=Nxo(e),i=n.replace(/^((?:\d{4}|\d{5}))(?=$|_|x)/,"res$1").replace(/^zh(\d+)(?=$|_)/,"jst$1_zh").split(/_(?!metric)/).map((r)=>{let s=r.match(/^(pin1location)(\(.*\))$/i);if(s)return{fn:s[1].toLowerCase(),v:s[2]};let a=r.match(/((?:(?:p\d+|pin1)[a-zA-Z]+(?=[\(\d\.\+\-\?]))|[a-zA-Z]+)([\(\d\.\+\-\?].*)?/);if(!a)return null;let[,c,l]=a;if(!c)return null;let d=c.toLowerCase();if(l?.includes("?"))return null;return{fn:d,v:l}}).filter(Dxo);for(let{fn:r,v:s}of i)t=t[r](s);return t.setString(n),t},kxo=()=>Object.keys(r6);var $me=()=>{let e=new Proxy({},{get:(t,n)=>{if(n==="soup"||n==="circuitJson"){if("fn"in t&&r6[t.fn])return()=>{let{circuitJson:o}=r6[t.fn](t),i=bxo(o,t),r=Ixo(i,t),s=wxo(r,t.pin1location?Wxt.parse(t.pin1location):void 0),a=Txo(s,t.rounded);return Sxo(a,t.origin)};if(!r6[t.fn])throw Error(`Invalid footprint function, got "${t.fn}"${t.string?`, from string "${t.string}"`:""}`);return()=>{throw Error(`No function found for footprinter, make sure to specify .dip, .lr, .p, etc. Got "${n}"`)}}if(n==="json"){if(!r6[t.fn])throw Error(`Invalid footprint function, got "${t.fn}"${t.string?`, from string "${t.string}"`:""}`);return()=>r6[t.fn](t).parameters}if(n==="getFootprintNames")return()=>Object.keys(r6);if(n==="params")return()=>t;if(n==="setString")return(o)=>(t.string=o,e);return(...o)=>{let i=o[0],r=typeof i==="string"?Rxo(i):i;if(Object.keys(t).length===0)if(`${n}${i}`in r6)t[`${n}${i}`]=!0,t.fn=`${n}${i}`;else if(t[n]=!0,t.fn=n,n==="res"||n==="cap"||n==="led"||n==="diode"){if(i)if(typeof i==="string"&&i.includes("_metric"))t.metric=i.split("_metric")[0];else t.imperial=i}else t.num_pins=Number.isNaN(Number.parseFloat(i))?void 0:Number.parseFloat(i);else if(!i&&["w","h","p"].includes(n));else t[n]=n==="pin1location"&&o.length>1?o:r??!0;return e}}});return e};$me.string=Qxo;$me.getFootprintNames=kxo;var bl=$me;Gt();var kon=Rt(l0(),1);Gt();var ECt=Rt(l0(),1),wCt=Rt(l0(),1),DCt=Rt(l0(),1);Gt();pn();cEe();var W8e=(e,t={})=>{let n=e._internal_store;if(!n){n={counts:{}},e._internal_store=n;for(let i of e){let r=i.type,s=i[`${r}_id`];if(!s)continue;let a=Number.parseInt(s.split("_").pop());if(!Number.isNaN(a))n.counts[r]=Math.max(n.counts[r]??0,a)}}return new Proxy({},{get:(i,r)=>{if(r==="toArray")return()=>e;return{get:(s)=>e.find((a)=>a.type===r&&a[`${r}_id`]===s),getUsing:(s)=>{let a=Object.keys(s);if(a.length!==1)throw Error("getUsing requires exactly one key, e.g. { pcb_component_id }");let c=a[0],l=c.replace("_id",""),d=e.find((u)=>u.type===l&&u[c]===s[c]);if(!d)return null;return e.find((u)=>u.type===r&&u[`${r}_id`]===d[`${r}_id`])},getWhere:(s)=>{let a=Object.keys(s);return e.find((c)=>c.type===r&&a.every((l)=>c[l]===s[l]))},list:(s)=>{let a=!s?[]:Object.keys(s);return e.filter((c)=>c.type===r&&a.every((l)=>c[l]===s[l]))},insert:(s)=>{n.counts[r]??=-1,n.counts[r]++;let a=n.counts[r],c={type:r,[`${r}_id`]:`${r}_${a}`,...s};if(t.validateInserts)(c7[r]??a7).parse(c);return e.push(c),c},delete:(s)=>{let a=e.find((c)=>c[`${r}_id`]===s);if(!a)return;e.splice(e.indexOf(a),1)},update:(s,a)=>{let c=e.find((l)=>l.type===r&&l[`${r}_id`]===s);if(!c)return;return Object.assign(c,a),c},select:(s)=>{if(r==="source_component")return e.find((a)=>a.type==="source_component"&&a.name===s.replace(/\./g,""));else if(r==="pcb_port"||r==="source_port"||r==="schematic_port"){let[a,c]=s.replace(/\./g,"").split(/[\s\>]+/),l=e.find((u)=>u.type==="source_component"&&u.name===a);if(!l)return null;let d=e.find((u)=>u.type==="source_port"&&u.source_component_id===l.source_component_id&&(u.name===c||(u.port_hints??[]).includes(c)));if(!d)return null;if(r==="source_port")return d;if(r==="pcb_port")return e.find((u)=>u.type==="pcb_port"&&u.source_port_id===d.source_port_id);else if(r==="schematic_port")return e.find((u)=>u.type==="schematic_port"&&u.source_port_id===d.source_port_id)}}}}})};W8e.unparsed=W8e;var ACt=W8e;qa();var Vxo=Rt(gCt(),1);qa();qa();var fCt="useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict";var yCt=(e=21)=>{let t="",n=crypto.getRandomValues(new Uint8Array(e|=0));while(e--)t+=fCt[n[e]&63];return t};qa();var WQ=(e,t)=>Math.abs(e.x-t.x)+Math.abs(e.y-t.y),xCt=(e,t)=>{let n=t.x-e.x,o=t.y-e.y;if(Math.abs(n)>Math.abs(o))return{dx:Math.sign(n),dy:0};else return{dx:0,dy:Math.sign(o)}},PCt=(e,t,n)=>Math.abs(e.x-t.x)*Math.abs(n.dx)+Math.abs(e.y-t.y)*Math.abs(n.dy),vCt=(e,t=0.1)=>`${Math.round(e.x/t)},${Math.round(e.y/t)}`,CCt=(e,t)=>Math.abs(e-t)<0.0001,MCt=(e,t,{viaDiameter:n=0.5}={})=>{let o=[];for(let i=0;i<e.length-1;i++){let[r,s]=[e[i],e[i+1]],a=i-1>=0?e[i-1]:null,c=CCt(r.y,s.y),l=CCt(r.x,s.x);if(!c&&!l)throw Error(`getObstaclesFromTrace currently only supports horizontal and vertical traces (not diagonals) Conflicting trace: ${t}, start: (${r.x}, ${r.y}), end: (${s.x}, ${s.y})`);let d={type:"rect",layers:[r.layer],center:{x:(r.x+s.x)/2,y:(r.y+s.y)/2},width:c?Math.abs(r.x-s.x):0.1,height:l?Math.abs(r.y-s.y):0.1,connectedTo:[t]};if(o.push(d),a&&a.layer===r.layer&&r.layer!==s.layer){let u={type:"rect",layers:[r.layer,s.layer],center:{x:r.x,y:r.y},connectedTo:[t],width:n,height:n};o.push(u)}}return o},BCt=class{obstacles;GRID_STEP=0.1;constructor(e){this.obstacles=e.map((t)=>({...t,left:t.center.x-t.width/2,right:t.center.x+t.width/2,top:t.center.y+t.height/2,bottom:t.center.y-t.height/2}))}getObstacleAt(e,t,n){n??=this.GRID_STEP;for(let o of this.obstacles){let i=o.width/2+n,r=o.height/2+n;if(e>=o.center.x-i&&e<=o.center.x+i&&t>=o.center.y-r&&t<=o.center.y+r)return o}return null}isObstacleAt(e,t,n){return this.getObstacleAt(e,t,n)!==null}getDirectionDistancesToNearestObstacle(e,t){let{GRID_STEP:n}=this,o={left:1/0,top:1/0,bottom:1/0,right:1/0};for(let i of this.obstacles)if(i.type==="rect"){let r=i.center.x-i.width/2-n,s=i.center.x+i.width/2+n,a=i.center.y+i.height/2+n,c=i.center.y-i.height/2-n;if(t>=c&&t<=a&&e>r)o.left=Math.min(o.left,e-s);if(t>=c&&t<=a&&e<s)o.right=Math.min(o.right,r-e);if(e>=r&&e<=s&&t<a)o.top=Math.min(o.top,c-t);if(e>=r&&e<=s&&t>c)o.bottom=Math.min(o.bottom,t-a)}return o}getOrthoDirectionCollisionInfo(e,t,{margin:n=0}={}){let{x:o,y:i}=e,{dx:r,dy:s}=t,a=1/0,c=null;for(let l of this.obstacles){let d=l.left-n,u=l.right+n,h=l.top+n,A=l.bottom-n,m=null;if(r===1&&s===0){if(i>A&&i<h&&o<l.left)m=l.left-o}else if(r===-1&&s===0){if(i>A&&i<h&&o>l.right)m=o-l.right}else if(r===0&&s===1){if(o>d&&o<u&&i<l.bottom)m=l.bottom-i}else if(r===0&&s===-1){if(o>d&&o<u&&i>l.top)m=i-l.top}if(m!==null&&m<a)a=m,c=l}return{dx:r,dy:s,wallDistance:a,obstacle:c}}getObstaclesOverlappingRegion(e){let t=[];for(let n of this.obstacles){let{left:o,right:i,top:r,bottom:s}=n;if(o<=e.maxX&&i>=e.minX&&r<=e.maxY&&s>=e.minY)t.push(n)}return t}};function Lxo(e){if(e.length<4)return e;let t=[{...e[0]}],n=e[0].layer;for(let o=1;o<e.length;o++){let i={start:e[o-1],end:e[o]},r=e[o].route_type==="via"||e[o-1].route_type==="via";if(e[o].layer!==n||r){t.push({...e[o]}),n=e[o].layer;continue}let s=!1,a=null,c=-1;for(let d=0;d<t.length-1;d++){let u={start:t[d],end:t[d+1]};if(u.start.layer!==i.start.layer)continue;if(u.start.layer===i.start.layer){let h=Fxo(u,i);if(h){s=!0,a={...h,layer:n},c=d;break}}}if(s&&a)t.splice(c+1),t.push(a);let l=t[t.length-1];if(l.x!==e[o].x||l.y!==e[o].y)t.push(e[o])}return t}function Fxo(e,t){if(e.start.x===e.end.x&&t.start.x===t.end.x||e.start.y===e.end.y&&t.start.y===t.end.y)return null;let n;if(e.start.x===e.end.x){let o=e.start.x,i=t.start.y;n={...e.start,x:o,y:i}}else{let o=t.start.x,i=e.start.y;n={...e.start,x:o,y:i}}if(ICt(n,e)&&ICt(n,t))return n;return null}function ICt(e,t){return e.x>=Math.min(t.start.x,t.end.x)&&e.x<=Math.max(t.start.x,t.end.x)&&e.y>=Math.min(t.start.y,t.end.y)&&e.y<=Math.max(t.start.y,t.end.y)}function Hxo(e){let t=[e[0]];for(let n=1;n<e.length-1;n++){let[o,i,r]=[e[n-1],e[n],e[n+1]];if(t.push(i),i.route_type!=="wire"||o.route_type!=="wire"||r.route_type!=="wire")continue;if(o.layer===i.layer&&i.layer!==r.layer)t.push({route_type:"via",from_layer:i.layer,to_layer:r.layer,x:i.x,y:i.y})}return t.push(e[e.length-1]),t}var zLr=wCt.default("autorouter:shortenPathWithShortcuts");function Oxo(e,t){if(e.length<=2)return e;let n=[e[0]];for(let o=1;o<e.length;o++){let i={start:n[n.length-1],end:e[o]},r=-1,s=i.start.x===i.end.x,a=i.start.y===i.end.y;for(let c=o+1;c<e.length;c++){if(c<=r)continue;let l={start:e[c],end:e[c+1]};if(!l.end)continue;let d=l.start.x===l.end.x,u=l.start.y===l.end.y,h=s&&d,A=a&&u;if(A&&h)continue;if(!(h||A))continue;let p=!1,g=Math.min(i.start.x,i.end.x),_=Math.max(i.start.x,i.end.x),f=Math.min(l.start.x,l.end.x),y=Math.max(l.start.x,l.end.x),x=Math.min(i.start.y,i.end.y),C=Math.max(i.start.y,i.end.y),I=Math.min(l.start.y,l.end.y),b=Math.max(l.start.y,l.end.y);if(A)p=g<=y&&_>=f;else if(h)p=x<=b&&C>=I;if(!p)continue;let P=[],E=n[n.length-1],B=e[c+2];if(!B)continue;if(A&&f<_&&B.x===f)P.push({x:f,y:i.start.y,layer:i.start.layer});if(A&&y>g&&B.x===y)P.push({x:y,y:i.start.y,layer:i.start.layer});if(h&&I<C&&B.y===I)P.push({x:i.start.x,y:I,layer:i.start.layer});if(h&&b>x&&B.y===b)P.push({x:i.start.x,y:b,layer:i.start.layer});let w=null;for(let T of P){if(t(E,T)||t(B,T))continue;w=T;break}if(!w)continue;n.push(w),o=c+1,r=c+1;break}if(r===-1)n.push(e[o])}if(n[n.length-1]!==e[e.length-1])n.push(e[e.length-1]);return n}var UQ=ECt.default("autorouting-dataset:astar"),TCt=class{openSet=[];closedSet=new Set;debug=!1;debugSolutions;debugMessage=null;debugTraceCount=0;input;obstacles;allObstacles;startNode;goalPoint;GRID_STEP;OBSTACLE_MARGIN;MAX_ITERATIONS;isRemovePathLoopsEnabled;isShortenPathWithShortcutsEnabled;GREEDY_MULTIPLIER=1.1;iterations=-1;constructor(e){if(this.input=e.input,this.allObstacles=e.input.obstacles,this.startNode=e.startNode,this.goalPoint=e.goalPoint?{l:0,...e.goalPoint}:void 0,this.GRID_STEP=e.GRID_STEP??0.1,this.OBSTACLE_MARGIN=e.OBSTACLE_MARGIN??0.15,this.MAX_ITERATIONS=e.MAX_ITERATIONS??100,this.debug=e.debug??UQ.enabled,this.isRemovePathLoopsEnabled=e.isRemovePathLoopsEnabled??!1,this.isShortenPathWithShortcutsEnabled=e.isShortenPathWithShortcutsEnabled??!1,this.debug)UQ.enabled=!0;if(UQ.enabled)this.debugSolutions={},this.debugMessage=""}getNeighbors(e){return[]}isSameNode(e,t){return WQ(e,t)<this.GRID_STEP}computeG(e,t){return e.g+WQ(e,t)}computeH(e){return WQ(e,this.goalPoint)}getNodeName(e){return vCt(e,this.GRID_STEP)}solveOneStep(){this.iterations+=1;let{openSet:e,closedSet:t,GRID_STEP:n,goalPoint:o}=this;e.sort((a,c)=>a.f-c.f);let i=e.shift();if(this.computeH(i)<=n*2)return{solved:!0,current:i,newNeighbors:[]};this.closedSet.add(this.getNodeName(i));let s=[];for(let a of this.getNeighbors(i)){if(t.has(this.getNodeName(a)))continue;let c=this.computeG(i,a),l=this.openSet.find((d)=>this.isSameNode(d,a));if(!l||c<l.g){let d=this.computeH(a),u=c+d*this.GREEDY_MULTIPLIER,h={...a,g:c,h:d,f:u,obstacleHit:a.obstacleHit??void 0,manDistFromParent:WQ(i,a),nodesInPath:i.nodesInPath+1,parent:i,enterMarginCost:a.enterMarginCost,travelMarginCostFactor:a.travelMarginCostFactor};e.push(h),s.push(h)}}if(UQ.enabled)e.sort((a,c)=>a.f-c.f),this.drawDebugSolution({current:i,newNeighbors:s});return{solved:!1,current:i,newNeighbors:s}}getStartNode(e){return{x:e.pointsToConnect[0].x,y:e.pointsToConnect[0].y,manDistFromParent:0,f:0,g:0,h:0,nodesInPath:0,parent:null}}layerToIndex(e){return 0}indexToLayer(e){return"top"}preprocessConnectionBeforeSolving(e){return e}solveConnection(e){if(e.pointsToConnect.length>2)throw Error("GeneralizedAstarAutorouter doesn't currently support 2+ points in a connection");e=this.preprocessConnectionBeforeSolving(e);let{pointsToConnect:t}=e;this.iterations=0,this.closedSet=new Set,this.startNode=this.getStartNode(e),this.goalPoint={...t[t.length-1],l:this.layerToIndex(t[t.length-1].layer)},this.openSet=[this.startNode];while(this.iterations<this.MAX_ITERATIONS){let{solved:n,current:o}=this.solveOneStep();if(n){let i=[],r=o;while(r){let s=r.l;i.unshift({x:r.x,y:r.y,layer:s!==void 0?this.indexToLayer(s):t[0].layer}),r=r.parent}if(UQ.enabled)this.debugMessage+=`t${this.debugTraceCount}: ${this.iterations} iterations
`;if(this.isRemovePathLoopsEnabled)i=Lxo(i);if(this.isShortenPathWithShortcutsEnabled)i=Oxo(i,(s,a)=>{if(s.x===a.x&&s.y===a.y)return!1;let c=this.obstacles.getOrthoDirectionCollisionInfo({x:s.x,y:s.y,l:this.layerToIndex(s.layer)??0},{dx:Math.sign(a.x-s.x),dy:Math.sign(a.y-s.y),dl:0},{margin:0.05}),l=Math.sqrt((s.x-a.x)**2+(s.y-a.y)**2);return c.wallDistance<l});return{solved:!0,route:i,connectionName:e.name}}if(this.openSet.length===0)break}if(UQ.enabled)this.debugMessage+=`t${this.debugTraceCount}: ${this.iterations} iterations (failed)
`;return{solved:!1,connectionName:e.name}}createObstacleList({dominantLayer:e,connection:t,obstaclesFromTraces:n}){return new BCt(this.allObstacles.filter((o)=>!o.connectedTo.includes(t.name)).filter((o)=>o.layers.includes(e)).concat(n??[]))}postprocessConnectionSolveResult(e,t){return t}solve(){let e=[],t=[];this.debugTraceCount=0;for(let n of this.input.connections){let o=n.pointsToConnect[0].layer??"top";this.debugTraceCount+=1,this.obstacles=this.createObstacleList({dominantLayer:o,connection:n,obstaclesFromTraces:t});let i=this.solveConnection(n);if(i=this.postprocessConnectionSolveResult(n,i),e.push(i),UQ.enabled)this.drawDebugTraceObstacles(t);if(i.solved)t.push(...MCt(i.route.map((r)=>({x:r.x,y:r.y,layer:r.layer??o})),n.name))}return e}solveAndMapToTraces(){return this.solve().flatMap((t)=>{if(!t.solved)return[];return[{type:"pcb_trace",pcb_trace_id:`pcb_trace_for_${t.connectionName}`,route:Hxo(t.route.map((n)=>({route_type:"wire",x:n.x,y:n.y,width:this.input.minTraceWidth,layer:n.layer})))}]})}getDebugGroup(){let e=`t${this.debugTraceCount}_iter[${this.iterations-1}]`;if(this.iterations<30)return e;if(this.iterations<100&&this.iterations%10===0)return e;if(this.iterations<1000&&this.iterations%100===0)return e;if(!this.debugSolutions)return e;return null}drawDebugTraceObstacles(e){let{debugTraceCount:t,debugSolutions:n}=this;for(let o in n)if(o.startsWith(`t${t}_`))n[o].push(...e.map((i,r)=>({type:"pcb_smtpad",pcb_component_id:"",layer:i.layers[0],width:i.width,shape:"rect",x:i.center.x,y:i.center.y,pcb_smtpad_id:`trace_obstacle_${r}`,height:i.height})))}drawDebugSolution({current:e,newNeighbors:t}){let n=this.getDebugGroup();if(!n)return;let{openSet:o,debugTraceCount:i,debugSolutions:r}=this;r[n]??=[];let s=r[n];s.push({type:"pcb_fabrication_note_text",pcb_fabrication_note_text_id:`debug_note_${e.x}_${e.y}`,font:"tscircuit2024",font_size:0.25,text:"X"+(e.l!==void 0?e.l:""),pcb_component_id:"",layer:"top",anchor_position:{x:e.x,y:e.y},anchor_alignment:"center"});for(let a=0;a<o.length;a++){let c=o[a];s.push({type:"pcb_fabrication_note_path",pcb_component_id:"",pcb_fabrication_note_path_id:`note_path_${c.x}_${c.y}`,layer:"top",route:[[0,0.05],[0.05,0],[0,-0.05],[-0.05,0],[0,0.05]].map(([l,d])=>({x:c.x+l,y:c.y+d})),stroke_width:0.01}),s.push({type:"pcb_fabrication_note_text",pcb_fabrication_note_text_id:`debug_note_${c.x}_${c.y}`,font:"tscircuit2024",font_size:0.03,text:a.toString(),pcb_component_id:"",layer:"top",anchor_position:{x:c.x,y:c.y},anchor_alignment:"center"})}if(e.parent){let a=[],c=e;while(c)a.unshift(c),c=c.parent;s.push({type:"pcb_fabrication_note_path",pcb_component_id:"",pcb_fabrication_note_path_id:`note_path_${e.x}_${e.y}`,layer:"top",route:a,stroke_width:0.01})}}},zxo=DCt.default("autorouting-dataset:infinite-grid-ijump-astar:get-distance-to-overcome-obstacle");function X8e({node:e,travelDir:t,wallDir:n,obstacle:o,obstacles:i,obstaclesInRow:r=0,OBSTACLE_MARGIN:s=0.15,SHOULD_DETECT_CONJOINED_OBSTACLES:a=!1,MAX_CONJOINED_OBSTACLES:c=20}){let l;if(t.dx===0)if(t.dy>0)l=o.center.y+o.height/2-e.y;else l=e.y-(o.center.y-o.height/2);else if(t.dx>0)l=o.center.x+o.width/2-e.x;else l=e.x-(o.center.x-o.width/2);if(l+=s,a&&r<c){let d=i.getObstacleAt(e.x+t.dx*l+n.dx*(n.wallDistance+0.001),e.y+t.dy*l+n.dy*(n.wallDistance+0.001));if(d===o)return l;if(d&&d.type==="rect"){let u=t.dy===0,h=u?o.height:o.width;if((u?d.height:d.width)>h)return zxo("next obstacle on path is bigger, not trying to overcome it"),l;let m=X8e({node:{x:e.x+t.dx*l,y:e.y+t.dy*l},travelDir:t,wallDir:n,obstacle:d,obstacles:i,obstaclesInRow:r+1,SHOULD_DETECT_CONJOINED_OBSTACLES:a,MAX_CONJOINED_OBSTACLES:c,OBSTACLE_MARGIN:s});l+=m}}return l}var Gxo=class extends TCt{MAX_ITERATIONS=200;getNeighbors(e){let t=this.obstacles,n=this.goalPoint,o;if(!e.parent)o=xCt(e,n);else o=xCt(e.parent,e);let i=[{dx:0,dy:1},{dx:1,dy:0},{dx:0,dy:-1},{dx:-1,dy:0}].filter((s)=>{if(s.dx===o.dx*-1&&s.dy===o.dy*-1)return!1;else if(s.dx===o.dx&&s.dy===o.dy&&e.parent?.obstacleHit)return!1;return!0}).map((s)=>t.getOrthoDirectionCollisionInfo(e,s,{margin:this.OBSTACLE_MARGIN})).filter((s)=>s.wallDistance>=this.OBSTACLE_MARGIN),r=[];for(let s of i){let a=null;if(e?.obstacleHit)a=X8e({node:e,travelDir:s,wallDir:{...o,wallDistance:this.OBSTACLE_MARGIN},obstacle:e.obstacleHit,obstacles:t,OBSTACLE_MARGIN:this.OBSTACLE_MARGIN,SHOULD_DETECT_CONJOINED_OBSTACLES:!0});let c=PCt(e,n,s),l=(s.dx===0||Math.sign(n.x-e.x)===s.dx)&&(s.dy===0||Math.sign(n.y-e.y)===s.dy);if(c<s.wallDistance&&c>0&&l)r.push({...s,travelDistance:c});else if(a!==null&&a<s.wallDistance)r.push({...s,travelDistance:a});else if(s.wallDistance!==1/0)r.push({...s,travelDistance:s.wallDistance-this.OBSTACLE_MARGIN})}return r.filter((s)=>!t.isObstacleAt(e.x+s.dx*s.travelDistance,e.y+s.dy*s.travelDistance)).map((s)=>({x:e.x+s.dx*s.travelDistance,y:e.y+s.dy*s.travelDistance,obstacleHit:s.obstacle}))}};function Yxo(e,t=4){let{center:n,width:o,height:i,rotation:r}=e,s=[],a=r*Math.PI/180,c=Math.cos(a),l=Math.sin(a),d=(r%360+360)%360;if(i<=o?d>=45&&d<135||d>=225&&d<315:d>=135&&d<225||d>=315||d<45){let h=o/t;for(let A=0;A<t;A++){let m=(A-t/2+0.5)*h,p=-m*c,g=-m*l,_=h*1.1,f=Math.abs(i*c)+Math.abs(h*l);s.push({center:{x:n.x+p,y:n.y+g},width:_,height:f})}}else{let h=i/t;for(let A=0;A<t;A++){let m=(A-t/2+0.5)*h,p=-m*l,g=m*c,_=Math.abs(o*c)+Math.abs(h*l),f=h*1.1;s.push({center:{x:n.x+p,y:n.y+g},width:_,height:f})}}return s}var Zme=["top","inner1","inner2","bottom"],NCt=(e,t)=>{let n=(i)=>t?i.concat(i.map((r)=>t?.getNetConnectedToId(r)).filter(Boolean)):i,o=[];for(let i of e)if(i.type==="pcb_smtpad"){if(i.shape==="circle")o.push({type:"oval",layers:[i.layer],center:{x:i.x,y:i.y},width:i.radius*2,height:i.radius*2,connectedTo:n([i.pcb_smtpad_id])});else if(i.shape==="rect")o.push({type:"rect",layers:[i.layer],center:{x:i.x,y:i.y},width:i.width,height:i.height,connectedTo:n([i.pcb_smtpad_id])});else if(i.shape==="rotated_rect"){let r={center:{x:i.x,y:i.y},width:i.width,height:i.height,rotation:i.ccw_rotation},s=Yxo(r);for(let a of s)o.push({type:"rect",layers:[i.layer],center:a.center,width:a.width,height:a.height,connectedTo:n([i.pcb_smtpad_id])})}}else if(i.type==="pcb_keepout"){if(i.shape==="circle")o.push({type:"oval",layers:i.layers,center:{x:i.center.x,y:i.center.y},width:i.radius*2,height:i.radius*2,connectedTo:[]});else if(i.shape==="rect")o.push({type:"rect",layers:i.layers,center:{x:i.center.x,y:i.center.y},width:i.width,height:i.height,connectedTo:[]})}else if(i.type==="pcb_hole"){if(i.hole_shape==="oval")o.push({type:"oval",center:{x:i.x,y:i.y},width:i.hole_width,height:i.hole_height,connectedTo:[]});else if(i.hole_shape==="square")o.push({type:"rect",layers:Zme,center:{x:i.x,y:i.y},width:i.hole_diameter,height:i.hole_diameter,connectedTo:[]});else if(i.hole_shape==="round"||i.hole_shape==="circle")o.push({type:"rect",layers:Zme,center:{x:i.x,y:i.y},width:i.hole_diameter,height:i.hole_diameter,connectedTo:[]})}else if(i.type==="pcb_plated_hole"){if(i.shape==="circle")o.push({type:"oval",layers:Zme,center:{x:i.x,y:i.y},width:i.outer_diameter,height:i.outer_diameter,connectedTo:n([i.pcb_plated_hole_id])});else if(i.shape==="oval"||i.shape==="pill")o.push({type:"oval",layers:Zme,center:{x:i.x,y:i.y},width:i.outer_width,height:i.outer_height,connectedTo:n([i.pcb_plated_hole_id])})}else if(i.type==="pcb_trace"){let r=MCt(i.route.map((s)=>({x:s.x,y:s.y,layer:"layer"in s?s.layer:s.from_layer})),i.source_trace_id);o.push(...r)}else if(i.type==="pcb_via")o.push({type:"rect",layers:i.layers,center:{x:i.x,y:i.y},connectedTo:[],width:i.outer_diameter,height:i.outer_diameter});return o};function bCt(e){let{pcbConnMap:t,goalElementId:n}=e;if(!n.startsWith("pcb_port_"))throw Error(`Currently alternative goal boxes must have a goal id with prefix "pcb_port_" (got ${n})`);let o=t.getAllTracesConnectedToPort(n);return NCt(o).map((i)=>({...i,connectedTo:[n]}))}var RCt=(e)=>{let{connection:t,pcbConnMap:n}=e;if(t.pointsToConnect.length!==2)throw Error(`Connection must have exactly 2 points for alternative goal boxes (got ${t.pointsToConnect.length})`);let[o,i]=t.pointsToConnect;if(!o.pcb_port_id||!i.pcb_port_id)throw Error(`Connection points must have pcb_port_id for alternative goal box calculation (got ${o.pcb_port_id} and ${i.pcb_port_id})`);let r=bCt({goalElementId:o.pcb_port_id,pcbConnMap:n}).concat([{center:o,width:0.01,height:0.01,connectedTo:[o.pcb_port_id],layers:[o.layer],type:"rect"}]),s=bCt({goalElementId:i.pcb_port_id,pcbConnMap:n}).concat([{center:i,width:0.01,height:0.01,connectedTo:[i.pcb_port_id],layers:[i.layer],type:"rect"}]);if(r.length<=1&&s.length<=1)return{...t,startPoint:o,endPoint:i,goalBoxes:[]};let a=N0e(r,s),c,l,d;if(r.length>=s.length)c={...i,...a.pointB},l={...o,...a.pointA},d=r;else c={...o,...a.pointA},l={...i,...a.pointB},d=s;return{startPoint:c,endPoint:l,goalBoxes:d,name:t.name,pointsToConnect:[c,l]}},Uxo=(e,t={})=>{let n={minTraceWidth:0.1};n.layerCount=t.layerCount??1,n.obstacles=NCt(e,t.connMap),n.connections=[];for(let i of e)if(i.type==="source_trace"){if(e.some((a)=>a.type==="pcb_trace"&&a.source_trace_id===i.source_trace_id))continue;let s={name:i.source_trace_id,pointsToConnect:i.connected_source_port_ids.map((a)=>{let c=ACt(e).pcb_port.getWhere({source_port_id:a});if(!c)throw Error(`Could not find pcb_port for source_port_id "${a}"`);return{x:c.x,y:c.y,layer:c.layers?.[0]??"top",pcb_port_id:c.pcb_port_id}})};if(t.optimizeWithGoalBoxes){let a=new vz(e);s=RCt({connection:s,pcbConnMap:a})}n.connections.push(s),Wxo(n.obstacles,s.pointsToConnect,s.name)}let o={minX:1/0,maxX:-1/0,minY:1/0,maxY:-1/0};for(let i of n.obstacles)o.minX=Math.min(o.minX,i.center.x-i.width/2),o.maxX=Math.max(o.maxX,i.center.x+i.width/2),o.minY=Math.min(o.minY,i.center.y-i.height/2),o.maxY=Math.max(o.maxY,i.center.y+i.height/2);for(let i of n.connections)for(let r of i.pointsToConnect)o.minX=Math.min(o.minX,r.x),o.maxX=Math.max(o.maxX,r.x),o.minY=Math.min(o.minY,r.y),o.maxY=Math.max(o.maxY,r.y);return n.bounds=o,n},Wxo=(e,t,n)=>{for(let o of t)for(let i of e)if(Xxo(o,i))i.connectedTo.push(n)};function Xxo(e,t){let n=t.width/2,o=t.height/2;if(t.type==="rect")return e.x>=t.center.x-n&&e.x<=t.center.x+n&&e.y>=t.center.y-o&&e.y<=t.center.y+o;else if(t.type==="oval"){let i=(e.x-t.center.x)/n,r=(e.y-t.center.y)/o;return i*i+r*r<=1}return!1}function SCt(e,t){let n=t.x>e.x?1:t.x<e.x?-1:0,o=t.y>e.y?1:t.y<e.y?-1:0,i=t.l>e.l?1:t.l<e.l?-1:0;return{dx:n,dy:o,dl:i}}var K8e={1:["top"],2:["top","bottom"],4:["top","inner1","inner2","bottom"]},Kxo=(e)=>K8e[e];function QCt(e,t){let o=K8e[e].indexOf(t);if(o===-1)throw Error(`Invalid layer for getLayerIndex (for layerCount === ${e}): "${t}"`);return o}function jxo(e,t){let o=K8e[e][t];if(!o)throw Error(`Invalid index for indexToLayer (for layerCount === ${e}): "${t}"`);return o}var qxo=class extends BCt{obstacles;GRID_STEP=0.1;layerCount;constructor(e,t){super([]);this.layerCount=e;let n=Kxo(e);this.obstacles=t.flatMap((o)=>o.layers.filter((i)=>n.includes(i)).map((i)=>({...o,left:o.center.x-o.width/2,right:o.center.x+o.width/2,top:o.center.y+o.height/2,bottom:o.center.y-o.height/2,l:QCt(e,i)})))}getObstacleAt(e,t,n,o){o??=this.GRID_STEP;for(let i of this.obstacles){if(i.l!==n)continue;let r=i.width/2+o,s=i.height/2+o;if(e>=i.center.x-r&&e<=i.center.x+r&&t>=i.center.y-s&&t<=i.center.y+s)return i}return null}isObstacleAt(e,t,n,o){return this.getObstacleAt(e,t,n,o)!==null}getDirectionDistancesToNearestObstacle3d(e,t,n){let{GRID_STEP:o}=this,i={left:1/0,top:1/0,bottom:1/0,right:1/0};for(let r of this.obstacles){if(r.l!==n)continue;if(r.type==="rect"){let s=r.center.x-r.width/2-o,a=r.center.x+r.width/2+o,c=r.center.y+r.height/2+o,l=r.center.y-r.height/2-o;if(t>=l&&t<=c&&e>s)i.left=Math.min(i.left,e-a);if(t>=l&&t<=c&&e<a)i.right=Math.min(i.right,s-e);if(e>=s&&e<=a&&t<c)i.top=Math.min(i.top,l-t);if(e>=s&&e<=a&&t>l)i.bottom=Math.min(i.bottom,t-c)}}return i}getOrthoDirectionCollisionInfo(e,t,{margin:n=0}={}){let{x:o,y:i,l:r}=e,{dx:s,dy:a,dl:c}=t,l=1/0,d=null;if(c!==0){let u=r+c;if(this.isObstacleAt(o,i,u,n))l=1,d=this.getObstacleAt(o,i,u,n);else l=1;return{dx:s,dy:a,dl:c,wallDistance:l,obstacle:d}}else{for(let u of this.obstacles){if(u.l!==r)continue;let h=u.left-n,A=u.right+n,m=u.top+n,p=u.bottom-n,g=null;if(s===1&&a===0){if(i>p&&i<m&&o<u.left)g=u.left-o}else if(s===-1&&a===0){if(i>p&&i<m&&o>u.right)g=o-u.right}else if(s===0&&a===1){if(o>h&&o<A&&i<u.bottom)g=u.bottom-i}else if(s===0&&a===-1){if(o>h&&o<A&&i>u.top)g=i-u.top}if(g!==null&&g<l)l=g,d=u}return{dx:s,dy:a,dl:0,wallDistance:l,obstacle:d}}}getObstaclesOverlappingRegion(e){let t=[];for(let n of this.obstacles){if(n.l!==e.l)continue;let{left:o,right:i,top:r,bottom:s}=n;if(o<=e.maxX&&i>=e.minX&&r>=e.minY&&s<=e.maxY)t.push(n)}return t}},epe=class extends TCt{MAX_ITERATIONS=500;VIA_COST=4;VIA_DIAMETER=0.5;allowLayerChange=!0;layerCount;obstacles;optimizeWithGoalBoxes;connMap;pcbConnMap;GOAL_RUSH_FACTOR=1.1;defaultGoalViaMargin=0.5;marginsWithCosts;get largestMargin(){return this.marginsWithCosts[0].margin}constructor(e){super(e);this.layerCount=e.input.layerCount??2,this.MAX_ITERATIONS=e.MAX_ITERATIONS??this.MAX_ITERATIONS,this.VIA_COST=e.VIA_COST??this.VIA_COST,this.connMap=e.connMap,this.pcbConnMap=e.pcbConnMap??new vz,this.optimizeWithGoalBoxes=e.optimizeWithGoalBoxes??!1,this.obstacles=null,this.marginsWithCosts=e.marginsWithCosts??[{margin:1,enterCost:0,travelCostFactor:1},{margin:this.OBSTACLE_MARGIN,enterCost:10,travelCostFactor:2}]}preprocessConnectionBeforeSolving(e){if(!this.optimizeWithGoalBoxes)return e;return RCt({connection:e,pcbConnMap:this.pcbConnMap})}postprocessConnectionSolveResult(e,t){if(!t.solved)return t;if(this.optimizeWithGoalBoxes){let n=t.route.map((o)=>({x:o.x,y:o.y,route_type:"wire",layer:o.layer,width:this.input.minTraceWidth}));n[0].start_pcb_port_id=e.pointsToConnect[0].pcb_port_id,n[n.length-1].end_pcb_port_id=e.pointsToConnect[1].pcb_port_id,this.pcbConnMap.addTrace({type:"pcb_trace",pcb_trace_id:`postprocess_trace_${yCt(8)}`,route:n})}return t}createObstacleList({dominantLayer:e,connection:t,obstaclesFromTraces:n}){let o=this.connMap?this.connMap.getNetConnectedToId(t.name):t.name;if(!o)throw Error(`The connection.name "${t.name}" wasn't present in the full connectivity map`);return new qxo(this.layerCount,this.allObstacles.filter((i)=>!i.connectedTo.includes(o)).concat(n??[]))}computeG(e,t){let n=e.g+WQ(e,t)*(e.travelMarginCostFactor??1)+(t.enterMarginCost??0);if(t.l??e.l!==-1??-1)n+=this.VIA_COST;return n}computeH(e){let t=Math.abs(e.x-this.goalPoint.x),n=Math.abs(e.y-this.goalPoint.y),o=Math.abs(e.l-this.goalPoint.l);return(t+n)**this.GOAL_RUSH_FACTOR+o*this.VIA_COST}getStartNode(e){return{...super.getStartNode(e),l:this.layerToIndex(e.pointsToConnect[0].layer)}}layerToIndex(e){return QCt(this.layerCount,e)}indexToLayer(e){return jxo(this.layerCount,e)}getNodeName(e){return`${vCt(e,this.GRID_STEP)}-${e.l??0}`}hasSpaceForVia(e,t){return e.every((n)=>this.obstacles.getObstaclesOverlappingRegion({minX:t.x-this.VIA_DIAMETER/2-this.OBSTACLE_MARGIN,minY:t.y-this.VIA_DIAMETER/2-this.OBSTACLE_MARGIN,maxX:t.x+this.VIA_DIAMETER/2+this.OBSTACLE_MARGIN,maxY:t.y+this.VIA_DIAMETER/2+this.OBSTACLE_MARGIN,l:n}).length===0)}getNeighborsSurroundingGoal(e){let t=this.obstacles,n=this.goalPoint,o=[],i=[{dx:1,dy:0,dl:0},{dx:-1,dy:0,dl:0},{dx:0,dy:1,dl:0},{dx:0,dy:-1,dl:0}],r=this.VIA_DIAMETER+this.OBSTACLE_MARGIN+this.defaultGoalViaMargin;for(let s of i){let a={x:e.x+s.dx*r,y:e.y+s.dy*r,l:e.l+s.dl,obstacleHit:null};if(!this.hasSpaceForVia([e.l,n.l],a))continue;o.push(a)}return o}getNeighbors(e){let t=this.obstacles,n=this.goalPoint,o=WQ(e,n);if(o<=this.OBSTACLE_MARGIN)return this.getNeighborsSurroundingGoal(e);let i;if(!e.parent)i=SCt(e,n);else i=SCt(e.parent,e);let r=[{dx:0,dy:1,dl:0},{dx:1,dy:0,dl:0},{dx:0,dy:-1,dl:0},{dx:-1,dy:0,dl:0}],s=o>this.VIA_DIAMETER+this.OBSTACLE_MARGIN,a=WQ(e,this.startNode)>this.VIA_DIAMETER+this.OBSTACLE_MARGIN;if(this.allowLayerChange&&s&&a){if(e.l<this.layerCount-1)r.push({dx:0,dy:0,dl:1});if(e.l>0)r.push({dx:0,dy:0,dl:-1})}let c=r.filter((d)=>{if(d.dx===i.dx*-1&&d.dy===i.dy*-1&&d.dl===i.dl*-1)return!1;else if(d.dx===i.dx&&d.dy===i.dy&&d.dl===i.dl&&e.parent?.obstacleHit)return!1;return!0}).map((d)=>t.getOrthoDirectionCollisionInfo(e,d,{margin:this.OBSTACLE_MARGIN})).filter((d)=>!(d.wallDistance<this.OBSTACLE_MARGIN)),l=[];for(let d of c){let u=d.dx===0&&d.dy===0&&d.dl===1,h=d.dx===0&&d.dy===0&&d.dl===-1;if(u||h){if(![e.l,e.l+d.dl].every((_)=>t.getObstaclesOverlappingRegion({minX:e.x-this.VIA_DIAMETER/2-this.OBSTACLE_MARGIN,minY:e.y-this.VIA_DIAMETER/2-this.OBSTACLE_MARGIN,maxX:e.x+this.VIA_DIAMETER/2+this.OBSTACLE_MARGIN,maxY:e.y+this.VIA_DIAMETER/2+this.OBSTACLE_MARGIN,l:_}).length===0))continue}if(u){if(e.l<this.layerCount-1)l.push({...d,travelDistance:0,enterMarginCost:0,travelMarginCostFactor:1});continue}if(h){if(e.l>0)l.push({...d,travelDistance:0,enterMarginCost:0,travelMarginCostFactor:1});continue}let A=null;if(e?.obstacleHit)A=X8e({node:e,travelDir:d,wallDir:{...i,wallDistance:this.OBSTACLE_MARGIN},obstacle:e.obstacleHit,obstacles:t,OBSTACLE_MARGIN:this.OBSTACLE_MARGIN,SHOULD_DETECT_CONJOINED_OBSTACLES:!0});let m=PCt(e,n,d),p=(d.dx===0||Math.sign(n.x-e.x)===d.dx)&&(d.dy===0||Math.sign(n.y-e.y)===d.dy);if(m<d.wallDistance&&m>0&&p){let g=e.l===n.l,_=0;if(!g&&Math.abs(m-o)<this.GRID_STEP)_=this.VIA_DIAMETER+this.OBSTACLE_MARGIN+this.defaultGoalViaMargin;l.push({...d,travelDistance:m-_,enterMarginCost:0,travelMarginCostFactor:1})}else if(A!==null&&A<d.wallDistance){for(let{margin:g,enterCost:_,travelCostFactor:f}of this.marginsWithCosts)if(A-this.OBSTACLE_MARGIN+g*2<d.wallDistance)l.push({...d,travelDistance:A-this.OBSTACLE_MARGIN+g,enterMarginCost:_,travelMarginCostFactor:f});if(d.wallDistance===1/0)l.push({...d,travelDistance:m,enterMarginCost:0,travelMarginCostFactor:1});else if(d.wallDistance>this.largestMargin){for(let{margin:g,enterCost:_,travelCostFactor:f}of this.marginsWithCosts)if(d.wallDistance>this.largestMargin+g)l.push({...d,travelDistance:d.wallDistance-g,enterMarginCost:_,travelMarginCostFactor:f})}}else if(d.wallDistance!==1/0){for(let{margin:g,enterCost:_,travelCostFactor:f}of this.marginsWithCosts)if(d.wallDistance>g)l.push({...d,travelDistance:d.wallDistance-g,enterMarginCost:_,travelMarginCostFactor:f})}}return l.map((d)=>({x:e.x+d.dx*d.travelDistance,y:e.y+d.dy*d.travelDistance,l:e.l+d.dl,obstacleHit:d.obstacle,travelMarginCostFactor:d.travelMarginCostFactor,enterMarginCost:d.enterMarginCost}))}};function kCt(e){let t=Uxo(e),n=new Gxo({input:t});return{solution:n.solveAndMapToTraces(),debugSolutions:n.debugSolutions,debugMessage:n.debugMessage}}Gt();qa();var ape={};sce(ape,{DocumentPosition:()=>gI,append:()=>xCo,appendChild:()=>yCo,compareDocumentPosition:()=>cIt,existsOne:()=>sIt,filter:()=>gY,find:()=>rIt,findAll:()=>SCo,findOne:()=>ipe,findOneChild:()=>bCo,getAttributeValue:()=>mCo,getChildren:()=>oIt,getElementById:()=>MCo,getElements:()=>ECo,getElementsByClassName:()=>BCo,getElementsByTagName:()=>XQ,getElementsByTagType:()=>wCo,getFeed:()=>NCo,getInnerHTML:()=>uCo,getName:()=>ACo,getOuterHTML:()=>nIt,getParent:()=>iIt,getSiblings:()=>hCo,getText:()=>ope,hasAttrib:()=>pCo,hasChildren:()=>Ng,innerText:()=>Z8e,isCDATA:()=>rZ,isComment:()=>tpe,isDocument:()=>XCt,isTag:()=>R_,isText:()=>a6,nextElementSibling:()=>_Co,prepend:()=>ICo,prependChild:()=>CCo,prevElementSibling:()=>gCo,removeElement:()=>aZ,removeSubsets:()=>TCo,replaceElement:()=>fCo,testElement:()=>vCo,textContent:()=>sZ,uniqueSort:()=>DCo});var nm;(function(e){e.Root="root",e.Text="text",e.Directive="directive",e.Comment="comment",e.Script="script",e.Style="style",e.Tag="tag",e.CDATA="cdata",e.Doctype="doctype"})(nm||(nm={}));function LCt(e){return e.type===nm.Tag||e.type===nm.Script||e.type===nm.Style}var FCt=nm.Root,HCt=nm.Text,OCt=nm.Directive,zCt=nm.Comment,GCt=nm.Script,YCt=nm.Style,VCt=nm.Tag,UCt=nm.CDATA,WCt=nm.Doctype;function R_(e){return LCt(e)}function rZ(e){return e.type===nm.CDATA}function a6(e){return e.type===nm.Text}function tpe(e){return e.type===nm.Comment}function XCt(e){return e.type===nm.Root}function Ng(e){return Object.prototype.hasOwnProperty.call(e,"children")}var KCt=/["&'<>$\x80-\uFFFF]/g,jCt=new Map([[34,"""],[38,"&"],[39,"'"],[60,"<"],[62,">"]]),$xo=String.prototype.codePointAt!=null?(e,t)=>e.codePointAt(t):(e,t)=>(e.charCodeAt(t)&64512)===55296?(e.charCodeAt(t)-55296)*1024+e.charCodeAt(t+1)-56320+65536:e.charCodeAt(t);function npe(e){let t="",n=0,o;while((o=KCt.exec(e))!==null){let i=o.index,r=e.charCodeAt(i),s=jCt.get(r);if(s!==void 0)t+=e.substring(n,i)+s,n=i+1;else t+=`${e.substring(n,i)}&#x${$xo(e,i).toString(16)};`,n=KCt.lastIndex+=Number((r&64512)===55296)}return t+e.substr(n)}function j8e(e,t){return function(o){let i,r=0,s="";while(i=e.exec(o)){if(r!==i.index)s+=o.substring(r,i.index);s+=t.get(i[0].charCodeAt(0)),r=i.index+1}return s+o.substring(r)}}var Zxo=j8e(/[&<>'"]/g,jCt),q8e=j8e(/["&\u00A0]/g,new Map([[34,"""],[38,"&"],[160," "]])),J8e=j8e(/[&<>\u00A0]/g,new Map([[38,"&"],[60,"<"],[62,">"],[160," "]]));var qCt;(function(e){e[e.XML=0]="XML",e[e.HTML=1]="HTML"})(qCt||(qCt={}));var JCt;(function(e){e[e.UTF8=0]="UTF8",e[e.ASCII=1]="ASCII",e[e.Extensive=2]="Extensive",e[e.Attribute=3]="Attribute",e[e.Text=4]="Text"})(JCt||(JCt={}));var $Ct=new Map(["altGlyph","altGlyphDef","altGlyphItem","animateColor","animateMotion","animateTransform","clipPath","feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feDistantLight","feDropShadow","feFlood","feFuncA","feFuncB","feFuncG","feFuncR","feGaussianBlur","feImage","feMerge","feMergeNode","feMorphology","feOffset","fePointLight","feSpecularLighting","feSpotLight","feTile","feTurbulence","foreignObject","glyphRef","linearGradient","radialGradient","textPath"].map((e)=>[e.toLowerCase(),e])),ZCt=new Map(["definitionURL","attributeName","attributeType","baseFrequency","baseProfile","calcMode","clipPathUnits","diffuseConstant","edgeMode","filterUnits","glyphRef","gradientTransform","gradientUnits","kernelMatrix","kernelUnitLength","keyPoints","keySplines","keyTimes","lengthAdjust","limitingConeAngle","markerHeight","markerUnits","markerWidth","maskContentUnits","maskUnits","numOctaves","pathLength","patternContentUnits","patternTransform","patternUnits","pointsAtX","pointsAtY","pointsAtZ","preserveAlpha","preserveAspectRatio","primitiveUnits","refX","refY","repeatCount","repeatDur","requiredExtensions","requiredFeatures","specularConstant","specularExponent","spreadMethod","startOffset","stdDeviation","stitchTiles","surfaceScale","systemLanguage","tableValues","targetX","targetY","textLength","viewBox","viewTarget","xChannelSelector","yChannelSelector","zoomAndPan"].map((e)=>[e.toLowerCase(),e]));var eCo=new Set(["style","script","xmp","iframe","noembed","noframes","plaintext","noscript"]);function tCo(e){return e.replace(/"/g,""")}function nCo(e,t){var n;if(!e)return;let o=((n=t.encodeEntities)!==null&&n!==void 0?n:t.decodeEntities)===!1?tCo:t.xmlMode||t.encodeEntities!=="utf8"?npe:q8e;return Object.keys(e).map((i)=>{var r,s;let a=(r=e[i])!==null&&r!==void 0?r:"";if(t.xmlMode==="foreign")i=(s=ZCt.get(i))!==null&&s!==void 0?s:i;if(!t.emptyAttrs&&!t.xmlMode&&a==="")return i;return`${i}="${o(a)}"`}).join(" ")}var eIt=new Set(["area","base","basefont","br","col","command","embed","frame","hr","img","input","isindex","keygen","link","meta","param","source","track","wbr"]);function $8e(e,t={}){let n="length"in e?e:[e],o="";for(let i=0;i<n.length;i++)o+=oCo(n[i],t);return o}var tIt=$8e;function oCo(e,t){switch(e.type){case FCt:return $8e(e.children,t);case WCt:case OCt:return aCo(e);case zCt:return dCo(e);case UCt:return lCo(e);case GCt:case YCt:case VCt:return sCo(e,t);case HCt:return cCo(e,t)}}var iCo=new Set(["mi","mo","mn","ms","mtext","annotation-xml","foreignObject","desc","title"]),rCo=new Set(["svg","math"]);function sCo(e,t){var n;if(t.xmlMode==="foreign"){if(e.name=(n=$Ct.get(e.name))!==null&&n!==void 0?n:e.name,e.parent&&iCo.has(e.parent.name))t={...t,xmlMode:!1}}if(!t.xmlMode&&rCo.has(e.name))t={...t,xmlMode:"foreign"};let o=`<${e.name}`,i=nCo(e.attribs,t);if(i)o+=` ${i}`;if(e.children.length===0&&(t.xmlMode?t.selfClosingTags!==!1:t.selfClosingTags&&eIt.has(e.name))){if(!t.xmlMode)o+=" ";o+="/>"}else{if(o+=">",e.children.length>0)o+=$8e(e.children,t);if(t.xmlMode||!eIt.has(e.name))o+=`</${e.name}>`}return o}function aCo(e){return`<${e.data}>`}function cCo(e,t){var n;let o=e.data||"";if(((n=t.encodeEntities)!==null&&n!==void 0?n:t.decodeEntities)!==!1&&!(!t.xmlMode&&e.parent&&eCo.has(e.parent.name)))o=t.xmlMode||t.encodeEntities!=="utf8"?npe(o):J8e(o);return o}function lCo(e){return`<![CDATA[${e.children[0].data}]]>`}function dCo(e){return`<!--${e.data}-->`}function nIt(e,t){return tIt(e,t)}function uCo(e,t){return Ng(e)?e.children.map((n)=>nIt(n,t)).join(""):""}function ope(e){if(Array.isArray(e))return e.map(ope).join("");if(R_(e))return e.name==="br"?`
`:ope(e.children);if(rZ(e))return ope(e.children);if(a6(e))return e.data;return""}function sZ(e){if(Array.isArray(e))return e.map(sZ).join("");if(Ng(e)&&!tpe(e))return sZ(e.children);if(a6(e))return e.data;return""}function Z8e(e){if(Array.isArray(e))return e.map(Z8e).join("");if(Ng(e)&&(e.type===nm.Tag||rZ(e)))return Z8e(e.children);if(a6(e))return e.data;return""}function oIt(e){return Ng(e)?e.children:[]}function iIt(e){return e.parent||null}function hCo(e){let t=iIt(e);if(t!=null)return oIt(t);let n=[e],{prev:o,next:i}=e;while(o!=null)n.unshift(o),{prev:o}=o;while(i!=null)n.push(i),{next:i}=i;return n}function mCo(e,t){var n;return(n=e.attribs)===null||n===void 0?void 0:n[t]}function pCo(e,t){return e.attribs!=null&&Object.prototype.hasOwnProperty.call(e.attribs,t)&&e.attribs[t]!=null}function ACo(e){return e.name}function _Co(e){let{next:t}=e;while(t!==null&&!R_(t))({next:t}=t);return t}function gCo(e){let{prev:t}=e;while(t!==null&&!R_(t))({prev:t}=t);return t}function aZ(e){if(e.prev)e.prev.next=e.next;if(e.next)e.next.prev=e.prev;if(e.parent){let t=e.parent.children,n=t.lastIndexOf(e);if(n>=0)t.splice(n,1)}e.next=null,e.prev=null,e.parent=null}function fCo(e,t){let n=t.prev=e.prev;if(n)n.next=t;let o=t.next=e.next;if(o)o.prev=t;let i=t.parent=e.parent;if(i){let r=i.children;r[r.lastIndexOf(e)]=t,e.parent=null}}function yCo(e,t){if(aZ(t),t.next=null,t.parent=e,e.children.push(t)>1){let n=e.children[e.children.length-2];n.next=t,t.prev=n}else t.prev=null}function xCo(e,t){aZ(t);let{parent:n}=e,o=e.next;if(t.next=o,t.prev=e,e.next=t,t.parent=n,o){if(o.prev=t,n){let i=n.children;i.splice(i.lastIndexOf(o),0,t)}}else if(n)n.children.push(t)}function CCo(e,t){if(aZ(t),t.parent=e,t.prev=null,e.children.unshift(t)!==1){let n=e.children[1];n.prev=t,t.next=n}else t.next=null}function ICo(e,t){aZ(t);let{parent:n}=e;if(n){let o=n.children;o.splice(o.indexOf(e),0,t)}if(e.prev)e.prev.next=t;t.parent=n,t.prev=e.prev,t.next=e,e.prev=t}function gY(e,t,n=!0,o=1/0){return rIt(e,Array.isArray(t)?t:[t],n,o)}function rIt(e,t,n,o){let i=[],r=[Array.isArray(t)?t:[t]],s=[0];for(;;){if(s[0]>=r[0].length){if(s.length===1)return i;r.shift(),s.shift();continue}let a=r[0][s[0]++];if(e(a)){if(i.push(a),--o<=0)return i}if(n&&Ng(a)&&a.children.length>0)s.unshift(0),r.unshift(a.children)}}function bCo(e,t){return t.find(e)}function ipe(e,t,n=!0){let o=Array.isArray(t)?t:[t];for(let i=0;i<o.length;i++){let r=o[i];if(R_(r)&&e(r))return r;if(n&&Ng(r)&&r.children.length>0){let s=ipe(e,r.children,!0);if(s)return s}}return null}function sIt(e,t){return(Array.isArray(t)?t:[t]).some((n)=>R_(n)&&e(n)||Ng(n)&&sIt(e,n.children))}function SCo(e,t){let n=[],o=[Array.isArray(t)?t:[t]],i=[0];for(;;){if(i[0]>=o[0].length){if(o.length===1)return n;o.shift(),i.shift();continue}let r=o[0][i[0]++];if(R_(r)&&e(r))n.push(r);if(Ng(r)&&r.children.length>0)i.unshift(0),o.unshift(r.children)}}var rpe={tag_name(e){if(typeof e==="function")return(t)=>R_(t)&&e(t.name);else if(e==="*")return R_;return(t)=>R_(t)&&t.name===e},tag_type(e){if(typeof e==="function")return(t)=>e(t.type);return(t)=>t.type===e},tag_contains(e){if(typeof e==="function")return(t)=>a6(t)&&e(t.data);return(t)=>a6(t)&&t.data===e}};function eTe(e,t){if(typeof t==="function")return(n)=>R_(n)&&t(n.attribs[e]);return(n)=>R_(n)&&n.attribs[e]===t}function PCo(e,t){return(n)=>e(n)||t(n)}function aIt(e){let t=Object.keys(e).map((n)=>{let o=e[n];return Object.prototype.hasOwnProperty.call(rpe,n)?rpe[n](o):eTe(n,o)});return t.length===0?null:t.reduce(PCo)}function vCo(e,t){let n=aIt(e);return n?n(t):!0}function ECo(e,t,n,o=1/0){let i=aIt(e);return i?gY(i,t,n,o):[]}function MCo(e,t,n=!0){if(!Array.isArray(t))t=[t];return ipe(eTe("id",e),t,n)}function XQ(e,t,n=!0,o=1/0){return gY(rpe.tag_name(e),t,n,o)}function BCo(e,t,n=!0,o=1/0){return gY(eTe("class",e),t,n,o)}function wCo(e,t,n=!0,o=1/0){return gY(rpe.tag_type(e),t,n,o)}function TCo(e){let t=e.length;while(--t>=0){let n=e[t];if(t>0&&e.lastIndexOf(n,t-1)>=0){e.splice(t,1);continue}for(let o=n.parent;o;o=o.parent)if(e.includes(o)){e.splice(t,1);break}}return e}var gI;(function(e){e[e.DISCONNECTED=1]="DISCONNECTED",e[e.PRECEDING=2]="PRECEDING",e[e.FOLLOWING=4]="FOLLOWING",e[e.CONTAINS=8]="CONTAINS",e[e.CONTAINED_BY=16]="CONTAINED_BY"})(gI||(gI={}));function cIt(e,t){let n=[],o=[];if(e===t)return 0;let i=Ng(e)?e:e.parent;while(i)n.unshift(i),i=i.parent;i=Ng(t)?t:t.parent;while(i)o.unshift(i),i=i.parent;let r=Math.min(n.length,o.length),s=0;while(s<r&&n[s]===o[s])s++;if(s===0)return gI.DISCONNECTED;let a=n[s-1],c=a.children,l=n[s],d=o[s];if(c.indexOf(l)>c.indexOf(d)){if(a===t)return gI.FOLLOWING|gI.CONTAINED_BY;return gI.FOLLOWING}if(a===e)return gI.PRECEDING|gI.CONTAINS;return gI.PRECEDING}function DCo(e){return e=e.filter((t,n,o)=>!o.includes(t,n+1)),e.sort((t,n)=>{let o=cIt(t,n);if(o&gI.PRECEDING)return-1;else if(o&gI.FOLLOWING)return 1;return 0}),e}function NCo(e){let t=spe(FCo,e);return!t?null:t.name==="feed"?RCo(t):QCo(t)}function RCo(e){var t;let n=e.children,o={type:"atom",items:XQ("entry",n).map((s)=>{var a;let{children:c}=s,l={media:lIt(c)};yy(l,"id","id",c),yy(l,"title","title",c);let d=(a=spe("link",c))===null||a===void 0?void 0:a.attribs.href;if(d)l.link=d;let u=n8("summary",c)||n8("content",c);if(u)l.description=u;let h=n8("updated",c);if(h)l.pubDate=new Date(h);return l})};yy(o,"id","id",n),yy(o,"title","title",n);let i=(t=spe("link",n))===null||t===void 0?void 0:t.attribs.href;if(i)o.link=i;yy(o,"description","subtitle",n);let r=n8("updated",n);if(r)o.updated=new Date(r);return yy(o,"author","email",n,!0),o}function QCo(e){var t,n;let o=(n=(t=spe("channel",e.children))===null||t===void 0?void 0:t.children)!==null&&n!==void 0?n:[],i={type:e.name.substr(0,3),id:"",items:XQ("item",e.children).map((s)=>{let{children:a}=s,c={media:lIt(a)};yy(c,"id","guid",a),yy(c,"title","title",a),yy(c,"link","link",a),yy(c,"description","description",a);let l=n8("pubDate",a)||n8("dc:date",a);if(l)c.pubDate=new Date(l);return c})};yy(i,"title","title",o),yy(i,"link","link",o),yy(i,"description","description",o);let r=n8("lastBuildDate",o);if(r)i.updated=new Date(r);return yy(i,"author","managingEditor",o,!0),i}var kCo=["url","type","lang"],LCo=["fileSize","bitrate","framerate","samplingrate","channels","duration","height","width"];function lIt(e){return XQ("media:content",e).map((t)=>{let{attribs:n}=t,o={medium:n.medium,isDefault:!!n.isDefault};for(let i of kCo)if(n[i])o[i]=n[i];for(let i of LCo)if(n[i])o[i]=parseInt(n[i],10);if(n.expression)o.expression=n.expression;return o})}function spe(e,t){return XQ(e,t,!0,1)[0]}function n8(e,t,n=!1){return sZ(XQ(e,t,n,1)).trim()}function yy(e,t,n,o,i=!1){let r=n8(n,o,i);if(r)e[t]=r}function FCo(e){return e==="rss"||e==="feed"||e==="rdf:RDF"}var mTe=Rt(KQ(),1);var zr;(function(e){e.Attribute="attribute",e.Pseudo="pseudo",e.PseudoElement="pseudo-element",e.Tag="tag",e.Universal="universal",e.Adjacent="adjacent",e.Child="child",e.Descendant="descendant",e.Parent="parent",e.Sibling="sibling",e.ColumnCombinator="column-combinator"})(zr||(zr={}));var om;(function(e){e.Any="any",e.Element="element",e.End="end",e.Equals="equals",e.Exists="exists",e.Hyphen="hyphen",e.Not="not",e.Start="start"})(om||(om={}));var uIt=/^[^\\#]?(?:\\(?:[\da-f]{1,6}\s?|.)|[\w\-\u00b0-\uFFFF])+/,HCo=/\\([\da-f]{1,6}\s?|(\s)|.)/gi,OCo=new Map([[126,om.Element],[94,om.Start],[36,om.End],[42,om.Any],[33,om.Not],[124,om.Hyphen]]),zCo=new Set(["has","not","matches","is","where","host","host-context"]);function mIt(e){switch(e.type){case zr.Adjacent:case zr.Child:case zr.Descendant:case zr.Parent:case zr.Sibling:case zr.ColumnCombinator:return!0;default:return!1}}var GCo=new Set(["contains","icontains"]);function YCo(e,t,n){let o=parseInt(t,16)-65536;return o!==o||n?t:o<0?String.fromCharCode(o+65536):String.fromCharCode(o>>10|55296,o&1023|56320)}function cZ(e){return e.replace(HCo,YCo)}function tTe(e){return e===39||e===34}function hIt(e){return e===32||e===9||e===10||e===12||e===13}function lZ(e){let t=[],n=pIt(t,`${e}`,0);if(n<e.length)throw Error(`Unmatched selector: ${e.slice(n)}`);return t}function pIt(e,t,n){let o=[];function i(h){let A=t.slice(n+h).match(uIt);if(!A)throw Error(`Expected name, found ${t.slice(n)}`);let[m]=A;return n+=h+m.length,cZ(m)}function r(h){n+=h;while(n<t.length&&hIt(t.charCodeAt(n)))n++}function s(){n+=1;let h=n,A=1;for(;A>0&&n<t.length;n++)if(t.charCodeAt(n)===40&&!a(n))A++;else if(t.charCodeAt(n)===41&&!a(n))A--;if(A)throw Error("Parenthesis not matched");return cZ(t.slice(h,n-1))}function a(h){let A=0;while(t.charCodeAt(--h)===92)A++;return(A&1)===1}function c(){if(o.length>0&&mIt(o[o.length-1]))throw Error("Did not expect successive traversals.")}function l(h){if(o.length>0&&o[o.length-1].type===zr.Descendant){o[o.length-1].type=h;return}c(),o.push({type:h})}function d(h,A){o.push({type:zr.Attribute,name:h,action:A,value:i(1),namespace:null,ignoreCase:"quirks"})}function u(){if(o.length&&o[o.length-1].type===zr.Descendant)o.pop();if(o.length===0)throw Error("Empty sub-selector");e.push(o)}if(r(0),t.length===n)return n;e:while(n<t.length){let h=t.charCodeAt(n);switch(h){case 32:case 9:case 10:case 12:case 13:{if(o.length===0||o[0].type!==zr.Descendant)c(),o.push({type:zr.Descendant});r(1);break}case 62:{l(zr.Child),r(1);break}case 60:{l(zr.Parent),r(1);break}case 126:{l(zr.Sibling),r(1);break}case 43:{l(zr.Adjacent),r(1);break}case 46:{d("class",om.Element);break}case 35:{d("id",om.Equals);break}case 91:{r(1);let A,m=null;if(t.charCodeAt(n)===124)A=i(1);else if(t.startsWith("*|",n))m="*",A=i(2);else if(A=i(0),t.charCodeAt(n)===124&&t.charCodeAt(n+1)!==61)m=A,A=i(1);r(0);let p=om.Exists,g=OCo.get(t.charCodeAt(n));if(g){if(p=g,t.charCodeAt(n+1)!==61)throw Error("Expected `=`");r(2)}else if(t.charCodeAt(n)===61)p=om.Equals,r(1);let _="",f=null;if(p!=="exists"){if(tTe(t.charCodeAt(n))){let C=t.charCodeAt(n),I=n+1;while(I<t.length&&(t.charCodeAt(I)!==C||a(I)))I+=1;if(t.charCodeAt(I)!==C)throw Error("Attribute value didn't end");_=cZ(t.slice(n+1,I)),n=I+1}else{let C=n;while(n<t.length&&(!hIt(t.charCodeAt(n))&&t.charCodeAt(n)!==93||a(n)))n+=1;_=cZ(t.slice(C,n))}r(0);let x=t.charCodeAt(n)|32;if(x===115)f=!1,r(1);else if(x===105)f=!0,r(1)}if(t.charCodeAt(n)!==93)throw Error("Attribute selector didn't terminate");n+=1;let y={type:zr.Attribute,name:A,action:p,value:_,namespace:m,ignoreCase:f};o.push(y);break}case 58:{if(t.charCodeAt(n+1)===58){o.push({type:zr.PseudoElement,name:i(2).toLowerCase(),data:t.charCodeAt(n)===40?s():null});continue}let A=i(1).toLowerCase(),m=null;if(t.charCodeAt(n)===40)if(zCo.has(A)){if(tTe(t.charCodeAt(n+1)))throw Error(`Pseudo-selector ${A} cannot be quoted`);if(m=[],n=pIt(m,t,n+1),t.charCodeAt(n)!==41)throw Error(`Missing closing parenthesis in :${A} (${t})`);n+=1}else{if(m=s(),GCo.has(A)){let p=m.charCodeAt(0);if(p===m.charCodeAt(m.length-1)&&tTe(p))m=m.slice(1,-1)}m=cZ(m)}o.push({type:zr.Pseudo,name:A,data:m});break}case 44:{u(),o=[],r(1);break}default:{if(t.startsWith("/*",n)){let p=t.indexOf("*/",n+2);if(p<0)throw Error("Comment was not terminated");if(n=p+2,o.length===0)r(0);break}let A=null,m;if(h===42)n+=1,m="*";else if(h===124){if(m="",t.charCodeAt(n+1)===124){l(zr.ColumnCombinator),r(2);break}}else if(uIt.test(t.slice(n)))m=i(0);else break e;if(t.charCodeAt(n)===124&&t.charCodeAt(n+1)!==124)if(A=m,t.charCodeAt(n+1)===42)m="*",n+=2;else m=i(1);o.push(m==="*"?{type:zr.Universal,namespace:A}:{type:zr.Tag,name:m,namespace:A})}}}return u(),n}var c6=Rt(KQ(),1);var AIt=new Map([[zr.Universal,50],[zr.Tag,30],[zr.Attribute,1],[zr.Pseudo,0]]);function dZ(e){return!AIt.has(e.type)}var VCo=new Map([[om.Exists,10],[om.Equals,8],[om.Not,7],[om.Start,6],[om.End,6],[om.Any,5]]);function nTe(e){let t=e.map(_It);for(let n=1;n<e.length;n++){let o=t[n];if(o<0)continue;for(let i=n-1;i>=0&&o<t[i];i--){let r=e[i+1];e[i+1]=e[i],e[i]=r,t[i+1]=t[i],t[i]=o}}}function _It(e){var t,n;let o=(t=AIt.get(e.type))!==null&&t!==void 0?t:-1;if(e.type===zr.Attribute){if(o=(n=VCo.get(e.action))!==null&&n!==void 0?n:4,e.action===om.Equals&&e.name==="id")o=9;if(e.ignoreCase)o>>=1}else if(e.type===zr.Pseudo)if(!e.data)o=3;else if(e.name==="has"||e.name==="contains")o=0;else if(Array.isArray(e.data)){if(o=Math.min(...e.data.map((i)=>Math.min(...i.map(_It)))),o<0)o=0}else o=2;return o}var uZ=Rt(KQ(),1),UCo=/[-[\]{}()*+?.,\\^$|#\s]/g;function gIt(e){return e.replace(UCo,"\\$&")}var WCo=new Set(["accept","accept-charset","align","alink","axis","bgcolor","charset","checked","clear","codetype","color","compact","declare","defer","dir","direction","disabled","enctype","face","frame","hreflang","http-equiv","lang","language","link","media","method","multiple","nohref","noresize","noshade","nowrap","readonly","rel","rev","rules","scope","scrolling","selected","shape","target","text","type","valign","valuetype","vlink"]);function jQ(e,t){return typeof e.ignoreCase==="boolean"?e.ignoreCase:e.ignoreCase==="quirks"?!!t.quirksMode:!t.xmlMode&&WCo.has(e.name)}var fIt={equals(e,t,n){let{adapter:o}=n,{name:i}=t,{value:r}=t;if(jQ(t,n))return r=r.toLowerCase(),(s)=>{let a=o.getAttributeValue(s,i);return a!=null&&a.length===r.length&&a.toLowerCase()===r&&e(s)};return(s)=>o.getAttributeValue(s,i)===r&&e(s)},hyphen(e,t,n){let{adapter:o}=n,{name:i}=t,{value:r}=t,s=r.length;if(jQ(t,n))return r=r.toLowerCase(),function(c){let l=o.getAttributeValue(c,i);return l!=null&&(l.length===s||l.charAt(s)==="-")&&l.substr(0,s).toLowerCase()===r&&e(c)};return function(c){let l=o.getAttributeValue(c,i);return l!=null&&(l.length===s||l.charAt(s)==="-")&&l.substr(0,s)===r&&e(c)}},element(e,t,n){let{adapter:o}=n,{name:i,value:r}=t;if(/\s/.test(r))return uZ.default.falseFunc;let s=new RegExp(`(?:^|\\s)${gIt(r)}(?:$|\\s)`,jQ(t,n)?"i":"");return function(c){let l=o.getAttributeValue(c,i);return l!=null&&l.length>=r.length&&s.test(l)&&e(c)}},exists(e,{name:t},{adapter:n}){return(o)=>n.hasAttrib(o,t)&&e(o)},start(e,t,n){let{adapter:o}=n,{name:i}=t,{value:r}=t,s=r.length;if(s===0)return uZ.default.falseFunc;if(jQ(t,n))return r=r.toLowerCase(),(a)=>{let c=o.getAttributeValue(a,i);return c!=null&&c.length>=s&&c.substr(0,s).toLowerCase()===r&&e(a)};return(a)=>{var c;return!!((c=o.getAttributeValue(a,i))===null||c===void 0?void 0:c.startsWith(r))&&e(a)}},end(e,t,n){let{adapter:o}=n,{name:i}=t,{value:r}=t,s=-r.length;if(s===0)return uZ.default.falseFunc;if(jQ(t,n))return r=r.toLowerCase(),(a)=>{var c;return((c=o.getAttributeValue(a,i))===null||c===void 0?void 0:c.substr(s).toLowerCase())===r&&e(a)};return(a)=>{var c;return!!((c=o.getAttributeValue(a,i))===null||c===void 0?void 0:c.endsWith(r))&&e(a)}},any(e,t,n){let{adapter:o}=n,{name:i,value:r}=t;if(r==="")return uZ.default.falseFunc;if(jQ(t,n)){let s=new RegExp(gIt(r),"i");return function(c){let l=o.getAttributeValue(c,i);return l!=null&&l.length>=r.length&&s.test(l)&&e(c)}}return(s)=>{var a;return!!((a=o.getAttributeValue(s,i))===null||a===void 0?void 0:a.includes(r))&&e(s)}},not(e,t,n){let{adapter:o}=n,{name:i}=t,{value:r}=t;if(r==="")return(s)=>!!o.getAttributeValue(s,i)&&e(s);else if(jQ(t,n))return r=r.toLowerCase(),(s)=>{let a=o.getAttributeValue(s,i);return(a==null||a.length!==r.length||a.toLowerCase()!==r)&&e(s)};return(s)=>o.getAttributeValue(s,i)!==r&&e(s)}};var XCo=new Set([9,10,12,13,32]);function yIt(e){if(e=e.trim().toLowerCase(),e==="even")return[2,0];else if(e==="odd")return[2,1];let t=0,n=0,o=r(),i=s();if(t<e.length&&e.charAt(t)==="n")if(t++,n=o*(i!==null&&i!==void 0?i:1),a(),t<e.length)o=r(),a(),i=s();else o=i=0;if(i===null||t<e.length)throw Error(`n-th rule couldn't be parsed ('${e}')`);return[n,o*i];function r(){if(e.charAt(t)==="-")return t++,-1;if(e.charAt(t)==="+")t++;return 1}function s(){let c=t,l=0;while(t<e.length&&e.charCodeAt(t)>=48&&e.charCodeAt(t)<=57)l=l*10+(e.charCodeAt(t)-48),t++;return t===c?null:l}function a(){while(t<e.length&&XCo.has(e.charCodeAt(t)))t++}}var oTe=Rt(KQ(),1);function xIt(e){let t=e[0],n=e[1]-1;if(n<0&&t<=0)return oTe.default.falseFunc;if(t===-1)return(r)=>r<=n;if(t===0)return(r)=>r===n;if(t===1)return n<0?oTe.default.trueFunc:(r)=>r>=n;let o=Math.abs(t),i=(n%o+o)%o;return t>1?(r)=>r>=n&&r%o===i:(r)=>r<=n&&r%o===i}function fY(e){return xIt(yIt(e))}var xy=Rt(KQ(),1);function cpe(e,t){return(n)=>{let o=t.getParent(n);return o!=null&&t.isTag(o)&&e(n)}}var hZ={contains(e,t,{adapter:n}){return function(i){return e(i)&&n.getText(i).includes(t)}},icontains(e,t,{adapter:n}){let o=t.toLowerCase();return function(r){return e(r)&&n.getText(r).toLowerCase().includes(o)}},"nth-child"(e,t,{adapter:n,equals:o}){let i=fY(t);if(i===xy.default.falseFunc)return xy.default.falseFunc;if(i===xy.default.trueFunc)return cpe(e,n);return function(s){let a=n.getSiblings(s),c=0;for(let l=0;l<a.length;l++){if(o(s,a[l]))break;if(n.isTag(a[l]))c++}return i(c)&&e(s)}},"nth-last-child"(e,t,{adapter:n,equals:o}){let i=fY(t);if(i===xy.default.falseFunc)return xy.default.falseFunc;if(i===xy.default.trueFunc)return cpe(e,n);return function(s){let a=n.getSiblings(s),c=0;for(let l=a.length-1;l>=0;l--){if(o(s,a[l]))break;if(n.isTag(a[l]))c++}return i(c)&&e(s)}},"nth-of-type"(e,t,{adapter:n,equals:o}){let i=fY(t);if(i===xy.default.falseFunc)return xy.default.falseFunc;if(i===xy.default.trueFunc)return cpe(e,n);return function(s){let a=n.getSiblings(s),c=0;for(let l=0;l<a.length;l++){let d=a[l];if(o(s,d))break;if(n.isTag(d)&&n.getName(d)===n.getName(s))c++}return i(c)&&e(s)}},"nth-last-of-type"(e,t,{adapter:n,equals:o}){let i=fY(t);if(i===xy.default.falseFunc)return xy.default.falseFunc;if(i===xy.default.trueFunc)return cpe(e,n);return function(s){let a=n.getSiblings(s),c=0;for(let l=a.length-1;l>=0;l--){let d=a[l];if(o(s,d))break;if(n.isTag(d)&&n.getName(d)===n.getName(s))c++}return i(c)&&e(s)}},root(e,t,{adapter:n}){return(o)=>{let i=n.getParent(o);return(i==null||!n.isTag(i))&&e(o)}},scope(e,t,n,o){let{equals:i}=n;if(!o||o.length===0)return hZ.root(e,t,n);if(o.length===1)return(r)=>i(o[0],r)&&e(r);return(r)=>o.includes(r)&&e(r)},hover:iTe("isHovered"),visited:iTe("isVisited"),active:iTe("isActive")};function iTe(e){return function(n,o,{adapter:i}){let r=i[e];if(typeof r!=="function")return xy.default.falseFunc;return function(a){return r(a)&&n(a)}}}var lpe={empty(e,{adapter:t}){return!t.getChildren(e).some((n)=>t.isTag(n)||t.getText(n)!=="")},"first-child"(e,{adapter:t,equals:n}){if(t.prevElementSibling)return t.prevElementSibling(e)==null;let o=t.getSiblings(e).find((i)=>t.isTag(i));return o!=null&&n(e,o)},"last-child"(e,{adapter:t,equals:n}){let o=t.getSiblings(e);for(let i=o.length-1;i>=0;i--){if(n(e,o[i]))return!0;if(t.isTag(o[i]))break}return!1},"first-of-type"(e,{adapter:t,equals:n}){let o=t.getSiblings(e),i=t.getName(e);for(let r=0;r<o.length;r++){let s=o[r];if(n(e,s))return!0;if(t.isTag(s)&&t.getName(s)===i)break}return!1},"last-of-type"(e,{adapter:t,equals:n}){let o=t.getSiblings(e),i=t.getName(e);for(let r=o.length-1;r>=0;r--){let s=o[r];if(n(e,s))return!0;if(t.isTag(s)&&t.getName(s)===i)break}return!1},"only-of-type"(e,{adapter:t,equals:n}){let o=t.getName(e);return t.getSiblings(e).every((i)=>n(e,i)||!t.isTag(i)||t.getName(i)!==o)},"only-child"(e,{adapter:t,equals:n}){return t.getSiblings(e).every((o)=>n(e,o)||!t.isTag(o))}};function rTe(e,t,n,o){if(n===null){if(e.length>o)throw Error(`Pseudo-class :${t} requires an argument`)}else if(e.length===o)throw Error(`Pseudo-class :${t} doesn't have any arguments`)}var sTe={"any-link":":is(a, area, link)[href]",link:":any-link:not(:visited)",disabled:`:is(
:is(button, input, select, textarea, optgroup, option)[disabled],
optgroup[disabled] > option,
fieldset[disabled]:not(fieldset[disabled] legend:first-of-type *)
)`,enabled:":not(:disabled)",checked:":is(:is(input[type=radio], input[type=checkbox])[checked], option:selected)",required:":is(input, select, textarea)[required]",optional:":is(input, select, textarea):not([required])",selected:"option:is([selected], select:not([multiple]):not(:has(> option[selected])) > :first-of-type)",checkbox:"[type=checkbox]",file:"[type=file]",password:"[type=password]",radio:"[type=radio]",reset:"[type=reset]",image:"[type=image]",submit:"[type=submit]",parent:":not(:empty)",header:":is(h1, h2, h3, h4, h5, h6)",button:":is(button, input[type=button])",input:":is(input, textarea, select, button)",text:"input:is(:not([type!='']), [type=text])"};var fI=Rt(KQ(),1);var lTe={};function dTe(e,t){if(e===fI.default.falseFunc)return fI.default.falseFunc;return(n)=>t.isTag(n)&&e(n)}function uTe(e,t){let n=t.getSiblings(e);if(n.length<=1)return[];let o=n.indexOf(e);if(o<0||o===n.length-1)return[];return n.slice(o+1).filter(t.isTag)}function cTe(e){return{xmlMode:!!e.xmlMode,lowerCaseAttributeNames:!!e.lowerCaseAttributeNames,lowerCaseTags:!!e.lowerCaseTags,quirksMode:!!e.quirksMode,cacheResults:!!e.cacheResults,pseudos:e.pseudos,adapter:e.adapter,equals:e.equals}}var aTe=(e,t,n,o,i)=>{let r=i(t,cTe(n),o);return r===fI.default.trueFunc?e:r===fI.default.falseFunc?fI.default.falseFunc:(s)=>r(s)&&e(s)},dpe={is:aTe,matches:aTe,where:aTe,not(e,t,n,o,i){let r=i(t,cTe(n),o);return r===fI.default.falseFunc?e:r===fI.default.trueFunc?fI.default.falseFunc:(s)=>!r(s)&&e(s)},has(e,t,n,o,i){let{adapter:r}=n,s=cTe(n);s.relativeSelector=!0;let a=t.some((d)=>d.some(dZ))?[lTe]:void 0,c=i(t,s,a);if(c===fI.default.falseFunc)return fI.default.falseFunc;let l=dTe(c,r);if(a&&c!==fI.default.trueFunc){let{shouldTestNextSiblings:d=!1}=c;return(u)=>{if(!e(u))return!1;a[0]=u;let h=r.getChildren(u),A=d?[...h,...uTe(u,r)]:h;return r.existsOne(l,A)}}return(d)=>e(d)&&r.existsOne(l,r.getChildren(d))}};function CIt(e,t,n,o,i){var r;let{name:s,data:a}=t;if(Array.isArray(a)){if(!(s in dpe))throw Error(`Unknown pseudo-class :${s}(${a})`);return dpe[s](e,a,n,o,i)}let c=(r=n.pseudos)===null||r===void 0?void 0:r[s],l=typeof c==="string"?c:sTe[s];if(typeof l==="string"){if(a!=null)throw Error(`Pseudo ${s} doesn't have any arguments`);let d=lZ(l);return dpe.is(e,d,n,o,i)}if(typeof c==="function")return rTe(c,s,a,1),(d)=>c(d,a)&&e(d);if(s in hZ)return hZ[s](e,a,n,o);if(s in lpe){let d=lpe[s];return rTe(d,s,a,2),(u)=>d(u,n,a)&&e(u)}throw Error(`Unknown pseudo-class :${s}`)}function hTe(e,t){let n=t.getParent(e);if(n&&t.isTag(n))return n;return null}function IIt(e,t,n,o,i){let{adapter:r,equals:s}=n;switch(t.type){case zr.PseudoElement:throw Error("Pseudo-elements are not supported by css-select");case zr.ColumnCombinator:throw Error("Column combinators are not yet supported by css-select");case zr.Attribute:{if(t.namespace!=null)throw Error("Namespaced attributes are not yet supported by css-select");if(!n.xmlMode||n.lowerCaseAttributeNames)t.name=t.name.toLowerCase();return fIt[t.action](e,t,n)}case zr.Pseudo:return CIt(e,t,n,o,i);case zr.Tag:{if(t.namespace!=null)throw Error("Namespaced tag names are not yet supported by css-select");let{name:a}=t;if(!n.xmlMode||n.lowerCaseTags)a=a.toLowerCase();return function(l){return r.getName(l)===a&&e(l)}}case zr.Descendant:{if(n.cacheResults===!1||typeof WeakSet>"u")return function(l){let d=l;while(d=hTe(d,r))if(e(d))return!0;return!1};let a=new WeakSet;return function(l){let d=l;while(d=hTe(d,r))if(!a.has(d)){if(r.isTag(d)&&e(d))return!0;a.add(d)}return!1}}case"_flexibleDescendant":return function(c){let l=c;do if(e(l))return!0;while(l=hTe(l,r));return!1};case zr.Parent:return function(c){return r.getChildren(c).some((l)=>r.isTag(l)&&e(l))};case zr.Child:return function(c){let l=r.getParent(c);return l!=null&&r.isTag(l)&&e(l)};case zr.Sibling:return function(c){let l=r.getSiblings(c);for(let d=0;d<l.length;d++){let u=l[d];if(s(c,u))break;if(r.isTag(u)&&e(u))return!0}return!1};case zr.Adjacent:{if(r.prevElementSibling)return function(c){let l=r.prevElementSibling(c);return l!=null&&e(l)};return function(c){let l=r.getSiblings(c),d;for(let u=0;u<l.length;u++){let h=l[u];if(s(c,h))break;if(r.isTag(h))d=h}return!!d&&e(d)}}case zr.Universal:{if(t.namespace!=null&&t.namespace!=="*")throw Error("Namespaced universal selectors are not yet supported by css-select");return e}}}function bIt(e,t,n){let o=upe(e,t,n);return dTe(o,t.adapter)}function upe(e,t,n){let o=typeof e==="string"?lZ(e):e;return hpe(o,t,n)}function SIt(e){return e.type===zr.Pseudo&&(e.name==="scope"||Array.isArray(e.data)&&e.data.some((t)=>t.some(SIt)))}var KCo={type:zr.Descendant},jCo={type:"_flexibleDescendant"},qCo={type:zr.Pseudo,name:"scope",data:null};function JCo(e,{adapter:t},n){let o=!!(n===null||n===void 0?void 0:n.every((i)=>{let r=t.isTag(i)&&t.getParent(i);return i===lTe||r&&t.isTag(r)}));for(let i of e){if(i.length>0&&dZ(i[0])&&i[0].type!==zr.Descendant);else if(o&&!i.some(SIt))i.unshift(KCo);else continue;i.unshift(qCo)}}function hpe(e,t,n){var o;e.forEach(nTe),n=(o=t.context)!==null&&o!==void 0?o:n;let i=Array.isArray(n),r=n&&(Array.isArray(n)?n:[n]);if(t.relativeSelector!==!1)JCo(e,t,r);else if(e.some((c)=>c.length>0&&dZ(c[0])))throw Error("Relative selectors are not allowed when the `relativeSelector` option is disabled");let s=!1,a=e.map((c)=>{if(c.length>=2){let[l,d]=c;if(l.type!==zr.Pseudo||l.name!=="scope");else if(i&&d.type===zr.Descendant)c[1]=jCo;else if(d.type===zr.Adjacent||d.type===zr.Sibling)s=!0}return $Co(c,t,r)}).reduce(ZCo,c6.default.falseFunc);return a.shouldTestNextSiblings=s,a}function $Co(e,t,n){var o;return e.reduce((i,r)=>i===c6.default.falseFunc?c6.default.falseFunc:IIt(i,r,t,n,hpe),(o=t.rootFunc)!==null&&o!==void 0?o:c6.default.trueFunc)}function ZCo(e,t){if(t===c6.default.falseFunc||e===c6.default.trueFunc)return e;if(e===c6.default.falseFunc||t===c6.default.trueFunc)return t;return function(o){return e(o)||t(o)}}var PIt=(e,t)=>e===t,eIo={adapter:ape,equals:PIt};function vIt(e){var t,n,o,i;let r=e!==null&&e!==void 0?e:eIo;return(t=r.adapter)!==null&&t!==void 0||(r.adapter=ape),(n=r.equals)!==null&&n!==void 0||(r.equals=(i=(o=r.adapter)===null||o===void 0?void 0:o.equals)!==null&&i!==void 0?i:PIt),r}function pTe(e){return function(n,o,i){let r=vIt(o);return e(n,r,i)}}var bHr=pTe(bIt),SHr=pTe(upe),PHr=pTe(hpe);function EIt(e){return function(n,o,i){let r=vIt(i);if(typeof n!=="function")n=upe(n,r,o);let s=tIo(o,r.adapter,n.shouldTestNextSiblings);return e(n,s,r)}}function tIo(e,t,n=!1){if(n)e=nIo(e,t);return Array.isArray(e)?t.removeSubsets(e):t.getChildren(e)}function nIo(e,t){let n=Array.isArray(e)?e.slice(0):[e],o=n.length;for(let i=0;i<o;i++){let r=uTe(n[i],t);n.push(...r)}return n}var qQ=EIt((e,t,n)=>e===mTe.default.falseFunc||!t||t.length===0?[]:n.adapter.findAll(e,t)),yY=EIt((e,t,n)=>e===mTe.default.falseFunc||!t||t.length===0?null:n.adapter.findOne(e,t));var W$r=Rt(l0(),1),Fon=Rt(l0(),1);Gt();pn();wp();pn();We();u0();u0();var MIt={name:"@tscircuit/capacity-autorouter",main:"./dist/index.js",version:"0.0.993",type:"module",repository:{type:"git",url:"https://github.com/tscircuit/tscircuit-autorouter"},files:["dist"],scripts:{prepublishOnly:"bun run build && bun scripts/check-published-autorouter-version.ts",start:"cosmos",build:"tsup ./lib/index.ts --minify terser --external @tscircuit/core --external circuit-to-svg --format esm --dts --sourcemap",bench:"bun test tests/spatial-index-bench.test.ts",format:"biome format --write .","format:check":"biome format .","vercel-build":"NODE_OPTIONS=--max-old-space-size=6144 cosmos-export","run-sample":"bun scripts/run-sample.ts","repomix:lib":"repomix --ignore 'testing/**,**/TwoRouteHighDensitySolver/**,**/RouteStitchingSolver/**,solvers/CapacitySegmentPointOptimizer/CapacitySegmentPointOptimizer.ts' lib","bug-report":"bun run scripts/download-bug-report.ts","bug-report-with-test":"bun run scripts/create-bug-report-test.ts"},devDependencies:{"@biomejs/biome":"^1.9.4","@radix-ui/react-icons":"^1.3.2","@radix-ui/react-menubar":"^1.1.14","@react-hook/resize-observer":"^2.0.2","@resvg/resvg-js":"^2.6.2","@tsci/seveibar.dataset-srj13":"git+https://github.com/tscircuit/dataset-srj13.git#56db70039aeb28a76540fe951b5a96be60f9e949","@tsci/dataset-srj23-partially-routed-subcircuits":"git+https://github.com/tscircuit/dataset-srj23-partially-routed-subcircuits.git#53fc559","@tsci/tscircuit.dataset-srj16-bga-breakouts":"git+https://github.com/tscircuit/dataset-srj16-bga-breakouts.git#e8b2e70e1f50a0dba3ad977e140766f53b9b75fb","@tsci/tscircuit.dataset-srj19-bga-passive-overlays":"git+https://github.com/tscircuit/dataset-srj19.git#5104d03ed72a9090d76ea1f42ae9f4bc439f7534","@tsci/tscircuit.dataset-srj20-partial-bga-breakouts":"git+https://github.com/tscircuit/dataset-srj20.git#9384fb8f45fb479b97178ddfa42fc74c69afbbec","@tsci/0hmX.multi-component-dataset-srj01":"git+https://github.com/tscircuit/multi-component-dataset-srj01.git#abf9d17c966d466b56ac21b735c6bb6f4518919d","@tsci/tscircuit.dataset-srj12-bus-routing":"git+https://github.com/tscircuit/dataset-srj12-bus-routing.git#ba82f86a7d1288566b7144eb8661ad2549c5f328","@tscircuit/autorouting-dataset-01":"git+https://github.com/tscircuit/autorouting-dataset-01.git#b97f5052a2359ab2da3f186765c6a5e839535efb","@tscircuit/checks":"^0.0.259","@tscircuit/circuit-json-util":"^0.0.114","@tscircuit/core":"0.0.337","@tscircuit/curvy-trace-solver":"^0.0.10","@tscircuit/dataset-srj05":"git+https://github.com/tscircuit/dataset-srj05.git#9a49c126a89c083dc4d2b72cd17184735f637762","@tscircuit/dataset-srj24":"git+https://github.com/tscircuit/dataset-srj24.git#6340ee442bc36cc5a0fd3c9b84070548ed5f416a","@tscircuit/dataset-srj27-power-traces":"git+https://github.com/tscircuit/dataset-srj27-power-traces.git#eb24d36","@tscircuit/dataset-srj28-partially-prerouted":"git+https://github.com/tscircuit/dataset-srj28-partially-prerouted.git#5b1673544b6ade4480612539ba6574ad414fddc0","@tscircuit/dataset-srj29-ddr3-bga-pairs":"git+https://github.com/ShiboSoftwareDev/dataset-srj29-ddr3-bga-pairs.git#585c3abd4c6ce4be52bbc430b1d5e6dcc9b4ea30","@tscircuit/dataset-srj33-drc-failures":"git+https://github.com/tscircuit/dataset-srj33-drc-failures.git#f566b62be0f83395d9ab63ddc068f9d645b68b16","@tscircuit/fanout-solver":"^0.0.29","@tscircuit/fanout-for-pipeline9-fixtures":"npm:@tscircuit/fanout-solver@0.0.66","@tscircuit/fixed-via-hypergraph-solver":"https://codeload.github.com/tscircuit/fixed-via-hypergraph-solver/tar.gz/bed37a6201b5dd07c9cc68b828917ecc20d6d049","@tscircuit/hypergraph":"^0.0.71","@tscircuit/jumper-topology-generator":"^0.0.4","@tscircuit/krt-wasm":"^0.1.0","@tscircuit/length-matching-solver":"git+https://github.com/tscircuit/length-matching-solver.git#6a85c3ac7cc90f593b177790a988df8b26ece1e7","@tscircuit/math-utils":"^0.0.36","@tscircuit/power-trace-expander":"git+https://github.com/tscircuit/power-trace-expander.git#ab0071efa0be5d5a9cdaf60a6729512ee47c6645","@tscircuit/rectdiff":"git+https://github.com/tscircuit/rectdiff.git#d3a8b095035f4e7d03cdb19f2fdb7a554c6c008a","@tscircuit/repair04":"https://codeload.github.com/tscircuit/repair04/tar.gz/81d4585d335ea1958a1c6569e4064c58cba44bad","@tscircuit/solver-utils":"^0.0.16","@tscircuit/trace-simplification-solver":"github:tscircuit/trace-simplification-solver#404f2ab10bac05bccf9b11e6b30bdd16d0694b07","@types/bun":"^1.2.23","@types/fast-json-stable-stringify":"^2.1.2","@types/object-hash":"^3.0.6","@types/rbush":"^4.0.0","@types/react":"^19.0.8","@types/react-dom":"^19.0.3","@vercel/node":"^5.1.7","@vitejs/plugin-react":"^4.3.4","bun-match-svg":"^0.0.14","circuit-json-to-connectivity-map":"^0.0.34","circuit-json":"^0.0.525","circuit-to-svg":"^0.0.220",clsx:"^2.1.1","dataset-srj11-45-degree":"git+https://github.com/tscircuit/dataset-srj11-45-degree.git#c49dd43c38f85fa2777c7d67393df413ca8d5a75","dataset-srj18":"git+https://github.com/tscircuit/dataset-srj18.git#100e8957ce789b5b288e14c476dc83f4efc5214b",flatbush:"^4.4.0","format-si-unit":"0.0.12","graphics-debug":"0.0.99","high-density-dataset-z04":"git+https://github.com/tscircuit/high-density-dataset-z04.git#b9128ed52f5a50102b6526319be1d4ec33dca2c2","kicad-to-circuit-json":"0.0.77",kleur:"^4.1.5","looks-same":"9","pcb-poly-hyper-graph":"https://codeload.github.com/tscircuit/pcb-poly-hyper-graph/tar.gz/80db1463c4a47506eeda15b2c14d59679de900f8",rbush:"^4.0.1",react:"18","react-for-pipeline9-fixtures":"npm:react@19.2.8","react-cosmos":"^6.2.3","react-cosmos-plugin-vite":"^6.2.0","react-dom":"18","react-konva":"18",recharts:"^2.15.1","tailwind-merge":"^3.2.0",terser:"^5.43.1","tiny-hypergraph":"git+https://github.com/tscircuit/tiny-hypergraph.git#e5e1d34f6df3f9b364dc420b17ec5c97cd487fa0","tiny-hypergraph-poly":"git+https://github.com/tscircuit/tiny-hypergraph.git#7b93b4c",tsup:"^8.3.6","tscircuit-for-pipeline9-fixtures":"npm:tscircuit@0.0.2467",typescript:"^5.9.3","use-mouse-matrix-transform":"^1.3.0",vite:"^6.0.11","vite-tsconfig-paths":"^5.1.4","zdwiel-dataset":"git+https://github.com/dwiel/tscircuit-benchmark.git#be36518b5bf51755dae92c230061ab3cf4e3e063","high-density-repair01":"git+https://github.com/tscircuit/high-density-repair01.git#27b3392c38ed4474b0557c73640b261155e28c27","high-density-repair02":"https://codeload.github.com/tscircuit/high-density-repair02/tar.gz/1981ac8d3547772cb4b0267f26c7a0c2fd4dea09","high-density-repair03":"https://codeload.github.com/tscircuit/high-density-repair03/tar.gz/79c9b022a678b1f0289059962bf49f253310a5dc","@tscircuit/high-density-a01":"git+https://github.com/tscircuit/high-density-a01.git#44005d6b9dde7d93a3d3a4815b4e7c8c52b59d34","@tscircuit/high-density-a13":"git+https://github.com/tscircuit/high-density-a01.git#c6812cebd44b09f29f2fee929837b313b822f2ae","@tscircuit/high-density-b01":"git+https://github.com/tscircuit/high-density-b01.git#e651cab6c314e7aab6df31fd6067277436f67148"},dependencies:{"fast-json-stable-stringify":"^2.1.0","object-hash":"^3.0.0","stack-svgs":"^0.0.1","@tscircuit/pcb-trace-linter":"github:tscircuit/pcb-trace-linter#4c035f9d40ffb03ba547a08975b5e64b20371123"}};wp();pn();Gt();pn();pn();Gt();qa();qa();mle();Gt();pn();pn();We();Gt();var SZr=Rt(lo(),1),oin=Rt(wIt(),1),Y2e=Rt(_Te(),1);Gt();pn();pn();pn();pn();pn();pn();Gt();pn();pn();pn();pn();pn();pn();Gt();pn();We();Gt();We();Gt();pn();pn();pn();pn();var rIo=Object.keys({a:1,b:0,c:0,d:1,e:0,f:0,m11:1,m12:0,m13:0,m14:0,m21:0,m22:1,m23:0,m24:0,m31:0,m32:0,m33:1,m34:0,m41:0,m42:0,m43:0,m44:1,is2D:!0,isIdentity:!0}),DIt=(e)=>(e instanceof Float64Array||e instanceof Float32Array||Array.isArray(e)&&e.every((t)=>typeof t==="number"))&&[6,16].some((t)=>e.length===t),NIt=(e)=>typeof DOMMatrix<"u"&&e instanceof DOMMatrix||e instanceof Rg||typeof e==="object"&&rIo.every((t)=>e&&(t in e)),ppe=(e,t)=>{if(!DIt(e))throw TypeError(`CSSMatrix: "${Array.from(e).join(",")}" must be an array with 6/16 numbers.`);if(e.length===16){let[c,l,d,u,h,A,m,p,g,_,f,y,x,C,I,b]=e;return pZ(t??new Rg,c,l,d,u,h,A,m,p,g,_,f,y,x,C,I,b)}let[n,o,i,r,s,a]=e;return pZ(t??new Rg,n,o,0,0,i,r,0,0,0,0,1,0,s,a,0,1)},pZ=(e,t,n,o,i,r,s,a,c,l,d,u,h,A,m,p,g)=>(e.m11=t,e.a=t,e.m21=r,e.c=r,e.m31=l,e.m41=A,e.e=A,e.m12=n,e.b=n,e.m22=s,e.d=s,e.m32=d,e.m42=m,e.f=m,e.m13=o,e.m23=a,e.m33=u,e.m43=p,e.m14=i,e.m24=c,e.m34=h,e.m44=g,e),gTe=(e,t,n,o,i,r,s,a,c,l,d,u,h,A,m,p)=>pZ(new Rg,e,t,n,o,i,r,s,a,c,l,d,u,h,A,m,p),mpe=(e,t)=>{if(NIt(e))return pZ(t??new Rg,e.m11,e.m12,e.m13,e.m14,e.m21,e.m22,e.m23,e.m24,e.m31,e.m32,e.m33,e.m34,e.m41,e.m42,e.m43,e.m44);throw TypeError(`CSSMatrix: "${JSON.stringify(e)}" is not a DOMMatrix / CSSMatrix / JSON compatible object.`)},fTe=(e)=>{if(typeof e!=="string")throw TypeError(`CSSMatrix: "${JSON.stringify(e)}" is not a string.`);let t=String(e).replace(/\s/g,""),n=new Rg,o=`CSSMatrix: invalid transform string "${e}"`,i=/([\w-]+)\(([^)]*)\)/g,r=0,s;while(s=i.exec(t)){let a=s[1],c=s[2];if(r+=s[0].length,!c)throw TypeError(o);let l=c.split(",").map((g)=>g.includes("rad")?parseFloat(g)*(180/Math.PI):parseFloat(g)),[d,u,h,A]=l,m=[d,u,h],p=[d,u,h,A];if(a==="perspective"&&d&&[u,h].every((g)=>g===void 0))n.m34=-1/d;else if(a.includes("matrix")&&[6,16].includes(l.length)&&l.every((g)=>!Number.isNaN(+g))){let g=l.map((_)=>Math.abs(_)<0.000001?0:_);n.multiplySelf(ppe(g))}else if(a==="translate3d"&&m.every((g)=>!Number.isNaN(+g)))n.translateSelf(d,u,h);else if(a==="translate"&&d&&h===void 0)n.translateSelf(d,u||0,0);else if(a==="rotate3d"&&p.every((g)=>!Number.isNaN(+g))&&A)n.rotateAxisAngleSelf(d,u,h,A);else if(a==="rotate"&&d&&[u,h].every((g)=>g===void 0))n.rotateSelf(0,0,d);else if(a==="scale3d"&&m.every((g)=>!Number.isNaN(+g))&&m.some((g)=>g!==1))n.scaleSelf(d,u,h);else if(a==="scale"&&!Number.isNaN(d)&&(d!==1||u!==1)&&h===void 0){let g=Number.isNaN(+u)?d:u;n.scaleSelf(d,g,1)}else if(a==="skew"&&(d||!Number.isNaN(d)&&u)&&h===void 0)n.skewSelf(d,u||0);else if(["translate","rotate","scale","skew"].some((g)=>a.includes(g))&&/[XYZ]/.test(a)&&d&&[u,h].every((g)=>g===void 0))if(a==="skewX"||a==="skewY")n[a==="skewX"?"skewXSelf":"skewYSelf"](d);else{let g=a.replace(/[XYZ]/,""),_=a.replace(g,""),f=["X","Y","Z"].indexOf(_),y=g==="scale"?1:0,x=g+"Self",C=[f===0?d:y,f===1?d:y,f===2?d:y];n[x](...C)}else throw TypeError(o)}if(r!==t.length)throw TypeError(o);return n},sIo=(e,t)=>{if(t)return[e.a,e.b,e.c,e.d,e.e,e.f];return[e.m11,e.m12,e.m13,e.m14,e.m21,e.m22,e.m23,e.m24,e.m31,e.m32,e.m33,e.m34,e.m41,e.m42,e.m43,e.m44]},aIo=(e,t,n)=>{let o=new Rg;return o.m41=e,o.e=e,o.m42=t,o.f=t,o.m43=n,o},yTe=(e,t,n)=>{let o=new Rg,i=Math.PI/180,r=e*i,s=t*i,a=n*i,c=Math.cos(r),l=-Math.sin(r),d=Math.cos(s),u=-Math.sin(s),h=Math.cos(a),A=-Math.sin(a),m=d*h,p=-d*A;o.m11=m,o.a=m,o.m12=p,o.b=p,o.m13=u;let g=l*u*h+c*A;o.m21=g,o.c=g;let _=c*h-l*u*A;return o.m22=_,o.d=_,o.m23=-l*d,o.m31=l*A-c*u*h,o.m32=l*h+c*u*A,o.m33=c*d,o},xTe=(e=0,t=0,n=0,o=0)=>{let i=new Rg,r=Math.sqrt(e*e+t*t+n*n);if(r===0)return i;let s=e/r,a=t/r,c=n/r,l=o*(Math.PI/360),d=Math.sin(l),u=Math.cos(l),h=d*d,A=s*s,m=a*a,p=c*c,g=1-2*(m+p)*h;i.m11=g,i.a=g;let _=2*(s*a*h+c*d*u);i.m12=_,i.b=_,i.m13=2*(s*c*h-a*d*u);let f=2*(a*s*h-c*d*u);i.m21=f,i.c=f;let y=1-2*(p+A)*h;return i.m22=y,i.d=y,i.m23=2*(a*c*h+s*d*u),i.m31=2*(c*s*h+a*d*u),i.m32=2*(c*a*h-s*d*u),i.m33=1-2*(A+m)*h,i},cIo=(e,t,n)=>{let o=new Rg;return o.m11=e,o.a=e,o.m22=t,o.d=t,o.m33=n,o},CTe=(e,t)=>{let n=new Rg;if(e){let o=e*Math.PI/180,i=Math.tan(o);n.m21=i,n.c=i}if(t){let o=t*Math.PI/180,i=Math.tan(o);n.m12=i,n.b=i}return n},lIo=(e)=>CTe(e,0),dIo=(e)=>CTe(0,e),RIt=(e,t,n)=>{let o=t.m11*e.m11+t.m12*e.m21+t.m13*e.m31+t.m14*e.m41,i=t.m11*e.m12+t.m12*e.m22+t.m13*e.m32+t.m14*e.m42,r=t.m11*e.m13+t.m12*e.m23+t.m13*e.m33+t.m14*e.m43,s=t.m11*e.m14+t.m12*e.m24+t.m13*e.m34+t.m14*e.m44,a=t.m21*e.m11+t.m22*e.m21+t.m23*e.m31+t.m24*e.m41,c=t.m21*e.m12+t.m22*e.m22+t.m23*e.m32+t.m24*e.m42,l=t.m21*e.m13+t.m22*e.m23+t.m23*e.m33+t.m24*e.m43,d=t.m21*e.m14+t.m22*e.m24+t.m23*e.m34+t.m24*e.m44,u=t.m31*e.m11+t.m32*e.m21+t.m33*e.m31+t.m34*e.m41,h=t.m31*e.m12+t.m32*e.m22+t.m33*e.m32+t.m34*e.m42,A=t.m31*e.m13+t.m32*e.m23+t.m33*e.m33+t.m34*e.m43,m=t.m31*e.m14+t.m32*e.m24+t.m33*e.m34+t.m34*e.m44,p=t.m41*e.m11+t.m42*e.m21+t.m43*e.m31+t.m44*e.m41,g=t.m41*e.m12+t.m42*e.m22+t.m43*e.m32+t.m44*e.m42,_=t.m41*e.m13+t.m42*e.m23+t.m43*e.m33+t.m44*e.m43,f=t.m41*e.m14+t.m42*e.m24+t.m43*e.m34+t.m44*e.m44;return n.m11=o,n.a=o,n.m21=a,n.c=a,n.m31=u,n.m41=p,n.e=p,n.m12=i,n.b=i,n.m22=c,n.d=c,n.m32=h,n.m42=g,n.f=g,n.m13=r,n.m23=l,n.m33=A,n.m43=_,n.m14=s,n.m24=d,n.m34=m,n.m44=f,n},TIt=(e,t)=>RIt(e,t,new Rg),Rg=class{static Translate=aIo;static Rotate=yTe;static RotateAxisAngle=xTe;static Scale=cIo;static SkewX=lIo;static SkewY=dIo;static Skew=CTe;static Multiply=TIt;static fromArray=ppe;static fromMatrix=mpe;static fromString=fTe;static toArray=sIo;static isCompatibleArray=DIt;static isCompatibleObject=NIt;constructor(e){if(e){if(typeof e==="string"&&e.length&&e!=="none")return fTe(e);if(Array.isArray(e)||e instanceof Float64Array||e instanceof Float32Array)return ppe(e);if(typeof e==="object")return mpe(e)}return this.a=1,this.b=0,this.c=0,this.d=1,this.e=0,this.f=0,this.m11=1,this.m12=0,this.m13=0,this.m14=0,this.m21=0,this.m22=1,this.m23=0,this.m24=0,this.m31=0,this.m32=0,this.m33=1,this.m34=0,this.m41=0,this.m42=0,this.m43=0,this.m44=1,this}get isIdentity(){return this.m11===1&&this.m12===0&&this.m13===0&&this.m14===0&&this.m21===0&&this.m22===1&&this.m23===0&&this.m24===0&&this.m31===0&&this.m32===0&&this.m33===1&&this.m34===0&&this.m41===0&&this.m42===0&&this.m43===0&&this.m44===1}get is2D(){return this.m31===0&&this.m32===0&&this.m33===1&&this.m34===0&&this.m43===0&&this.m44===1}setMatrixValue(e){if(typeof e==="string"&&e.length&&e!=="none"){let t=fTe(e);return pZ(this,t.m11,t.m12,t.m13,t.m14,t.m21,t.m22,t.m23,t.m24,t.m31,t.m32,t.m33,t.m34,t.m41,t.m42,t.m43,t.m44)}if(Array.isArray(e)||e instanceof Float64Array||e instanceof Float32Array)return ppe(e,this);if(typeof e==="object")return mpe(e,this);return this}toFloat32Array(e){return e?new Float32Array([this.a,this.b,this.c,this.d,this.e,this.f]):new Float32Array([this.m11,this.m12,this.m13,this.m14,this.m21,this.m22,this.m23,this.m24,this.m31,this.m32,this.m33,this.m34,this.m41,this.m42,this.m43,this.m44])}toFloat64Array(e){return e?new Float64Array([this.a,this.b,this.c,this.d,this.e,this.f]):new Float64Array([this.m11,this.m12,this.m13,this.m14,this.m21,this.m22,this.m23,this.m24,this.m31,this.m32,this.m33,this.m34,this.m41,this.m42,this.m43,this.m44])}toString(){let{is2D:e}=this,t=this.toFloat64Array(e).join(", ");return`${e?"matrix":"matrix3d"}(${t})`}toJSON(){let{is2D:e,isIdentity:t}=this;return{a:this.a,b:this.b,c:this.c,d:this.d,e:this.e,f:this.f,m11:this.m11,m12:this.m12,m13:this.m13,m14:this.m14,m21:this.m21,m22:this.m22,m23:this.m23,m24:this.m24,m31:this.m31,m32:this.m32,m33:this.m33,m34:this.m34,m41:this.m41,m42:this.m42,m43:this.m43,m44:this.m44,is2D:e,isIdentity:t}}multiply(e){return TIt(this,e)}translate(e,t,n){let o=t??0,i=n??0,{m11:r,m12:s,m13:a,m14:c,m21:l,m22:d,m23:u,m24:h,m31:A,m32:m,m33:p,m34:g,m41:_,m42:f,m43:y,m44:x}=this,C=e*r+o*l+i*A+_,I=e*s+o*d+i*m+f,b=e*a+o*u+i*p+y,P=e*c+o*h+i*g+x;return gTe(r,s,a,c,l,d,u,h,A,m,p,g,C,I,b,P)}scale(e,t,n){let o=t??e,i=n??1,{m41:r,m42:s,m43:a,m44:c}=this;return gTe(this.m11*e,this.m12*e,this.m13*e,this.m14*e,this.m21*o,this.m22*o,this.m23*o,this.m24*o,this.m31*i,this.m32*i,this.m33*i,this.m34*i,r,s,a,c)}rotate(e,t,n){let o=e,i=t||0,r=n||0;if(typeof e==="number"&&typeof t>"u"&&typeof n>"u")r=o,o=0,i=0;return this.multiply(yTe(o,i,r))}rotateAxisAngle(e=0,t=0,n=0,o=0){if([e,t,n,o].some((i)=>!Number.isFinite(i)))throw TypeError("CSSMatrix: expecting 4 values");if(Math.sqrt(e*e+t*t+n*n)===0)return mpe(this);return this.multiply(xTe(e,t,n,o))}skewX(e){return this.skew(e,0)}skewY(e){return this.skew(0,e)}skew(e,t){let n=e?Math.tan(e*Math.PI/180):0,o=t?Math.tan(t*Math.PI/180):0,{m11:i,m12:r,m13:s,m14:a,m21:c,m22:l,m23:d,m24:u}=this;return gTe(i+o*c,r+o*l,s+o*d,a+o*u,n*i+c,n*r+l,n*s+d,n*a+u,this.m31,this.m32,this.m33,this.m34,this.m41,this.m42,this.m43,this.m44)}multiplySelf(e){return RIt(this,e,this),this}translateSelf(e,t,n){let o=t??0,i=n??0,{m11:r,m12:s,m13:a,m14:c,m21:l,m22:d,m23:u,m24:h,m31:A,m32:m,m33:p,m34:g,m41:_,m42:f,m43:y,m44:x}=this,C=e*r+o*l+i*A+_,I=e*s+o*d+i*m+f,b=e*a+o*u+i*p+y,P=e*c+o*h+i*g+x;return this.m41=C,this.e=C,this.m42=I,this.f=I,this.m43=b,this.m44=P,this}scaleSelf(e,t,n){let o=t??e,i=n??1;return this.m11*=e,this.a*=e,this.m12*=e,this.b*=e,this.m13*=e,this.m14*=e,this.m21*=o,this.c*=o,this.m22*=o,this.d*=o,this.m23*=o,this.m24*=o,this.m31*=i,this.m32*=i,this.m33*=i,this.m34*=i,this}rotateSelf(e,t,n){let o=e,i=t||0,r=n||0;if(typeof e==="number"&&typeof t>"u"&&typeof n>"u")r=o,o=0,i=0;return this.multiplySelf(yTe(o,i,r))}rotateAxisAngleSelf(e=0,t=0,n=0,o=0){if([e,t,n,o].some((i)=>!Number.isFinite(i)))throw TypeError("CSSMatrix: expecting 4 values");if(Math.sqrt(e*e+t*t+n*n)===0)return this;return this.multiplySelf(xTe(e,t,n,o))}skewXSelf(e){return this.skewSelf(e,0)}skewYSelf(e){return this.skewSelf(0,e)}skewSelf(e,t){let n=e?Math.tan(e*Math.PI/180):0,o=t?Math.tan(t*Math.PI/180):0,{m11:i,m12:r,m13:s,m14:a,m21:c,m22:l,m23:d,m24:u}=this,h=i+o*c,A=r+o*l,m=s+o*d,p=a+o*u,g=n*i+c,_=n*r+l,f=n*s+d,y=n*a+u;return this.m11=h,this.a=h,this.m12=A,this.b=A,this.m13=m,this.m14=p,this.m21=g,this.c=g,this.m22=_,this.d=_,this.m23=f,this.m24=y,this}transformPoint(e){let t=this.m11*e.x+this.m21*e.y+this.m31*e.z+this.m41*e.w,n=this.m12*e.x+this.m22*e.y+this.m32*e.z+this.m42*e.w,o=this.m13*e.x+this.m23*e.y+this.m33*e.z+this.m43*e.w,i=this.m14*e.x+this.m24*e.y+this.m34*e.z+this.m44*e.w;return typeof DOMPoint<"u"&&e instanceof DOMPoint?new DOMPoint(t,n,o,i):{x:t,y:n,z:o,w:i}}};/*!
* SVGPathCommander v2.3.3 (http://thednp.github.io/svg-path-commander)
* Copyright 2026 © thednp
* Licensed under MIT (https://github.com/thednp/svg-path-commander/blob/master/LICENSE)
*/var uIo="2.3.3",sE=([e,t],[n,o],i)=>[e+(n-e)*i,t+(o-t)*i],Spe=(e,t)=>Math.sqrt((e[0]-t[0])*(e[0]-t[0])+(e[1]-t[1])*(e[1]-t[1])),bY=(e,t,n,o)=>Spe([e,t],[n,o]),Ape=(e,t,n,o,i)=>{let r={x:e,y:t};if(typeof i==="number"){let s=Spe([e,t],[n,o]);if(i<=0)r={x:e,y:t};else if(i>=s)r={x:n,y:o};else{let[a,c]=sE([e,t],[n,o],i/s);r={x:a,y:c}}}return r},ITe=(e,t,n,o)=>{let{min:i,max:r}=Math;return[i(e,n),i(t,o),r(e,n),r(t,o)]},hIo={getLineBBox:ITe,getLineLength:bY,getPointAtLineLength:Ape},gZ=[-0.06405689286260563,0.06405689286260563,-0.1911188674736163,0.1911188674736163,-0.3150426796961634,0.3150426796961634,-0.4337935076260451,0.4337935076260451,-0.5454214713888396,0.5454214713888396,-0.6480936519369755,0.6480936519369755,-0.7401241915785544,0.7401241915785544,-0.820001985973903,0.820001985973903,-0.8864155270044011,0.8864155270044011,-0.9382745520027328,0.9382745520027328,-0.9747285559713095,0.9747285559713095,-0.9951872199970213,0.9951872199970213],QTe=[0.12793819534675216,0.12793819534675216,0.1258374563468283,0.1258374563468283,0.12167047292780339,0.12167047292780339,0.1155056680537256,0.1155056680537256,0.10744427011596563,0.10744427011596563,0.09761865210411388,0.09761865210411388,0.08619016153195327,0.08619016153195327,0.0733464814110803,0.0733464814110803,0.05929858491543678,0.05929858491543678,0.04427743881741981,0.04427743881741981,0.028531388628933663,0.028531388628933663,0.0123412297999872,0.0123412297999872],Ppe=(e)=>{let t=[];for(let n=e,o=n.length,i=o-1;o>1;o-=1,i-=1){let r=[];for(let s=0;s<i;s+=1)r.push({x:i*(n[s+1].x-n[s].x),y:i*(n[s+1].y-n[s].y),t:0});t.push(r),n=r}return t},vpe=(e,t)=>{if(t===0)return e[0].t=0,e[0];let n=e.length-1;if(t===1)return e[n].t=1,e[n];let o=1-t,i=e;if(n===0)return e[0].t=t,e[0];if(n===1)return{x:o*i[0].x+t*i[1].x,y:o*i[0].y+t*i[1].y,t};let r=o*o,s=t*t,a=0,c=0,l=0,d=0;if(n===2)i=[i[0],i[1],i[2],{x:0,y:0}],a=r,c=o*t*2,l=s;else if(n===3)a=r*o,c=r*t*3,l=o*s*3,d=t*s;return{x:a*i[0].x+c*i[1].x+l*i[2].x+d*i[3].x,y:a*i[0].y+c*i[1].y+l*i[2].y+d*i[3].y,t}},VIt=(e,t)=>{let n=e(t),o=n.x*n.x+n.y*n.y;return Math.sqrt(o)},UIt=(e)=>Epe(e,1),Epe=(e,t)=>{let n=t/2,o=gZ.length,i=0;for(let r=0,s;r<o;r++)s=n*gZ[r]+n,i+=QTe[r]*VIt(e,s);return n*i},Mpe=(e)=>{let t=[];for(let n=0,o=e.length,i=2;n<o;n+=i)t.push({x:e[n],y:e[n+1]});return t},mIo=(e,t)=>{let n=Ppe(Mpe(e));return Epe((o)=>vpe(n[0],o),t)},kTe=(e,t)=>{let n=Ppe(Mpe(e)),o=(s)=>vpe(n[0],s),i=0,r=1;for(let s=0;s<25;s+=1){let a=(i+r)/2;if(Epe(o,a)<t)i=a;else r=a}return(i+r)/2},CZ=(e)=>{let t=Mpe(e),n=Ppe(t);return UIt((o)=>vpe(n[0],o))},pIo=0.00000001,_pe=([e,t,n])=>{let o=Math.min(e,n),i=Math.max(e,n);if(t>=e?n>=t:n<=t)return[o,i];let r=(e*n-t*t)/(e-2*t+n);return r<o?[r,i]:[o,r]},bTe=([e,t,n,o])=>{let i=e-3*t+3*n-o;if(Math.abs(i)<0.00000001){if(e===o&&e===t)return[e,o];return _pe([e,-0.5*e+1.5*t,e-3*t+3*n])}let r=-e*n+e*o-t*n-t*o+t*t+n*n;if(r<=0)return[Math.min(e,o),Math.max(e,o)];let s=Math.sqrt(r),a=Math.min(e,o),c=Math.max(e,o),l=e-2*t+n;for(let d=(l+s)/i,u=1;u<=2;d=(l-s)/i,u++)if(d>0&&d<1){let h=e*(1-d)*(1-d)*(1-d)+t*3*(1-d)*(1-d)*d+n*3*(1-d)*d*d+o*d*d*d;if(h<a)a=h;if(h>c)c=h}return[a,c]},AIo={bezierLength:UIt,bezierLengthAtT:Epe,calculateBezier:VIt,CBEZIER_MINMAX_EPSILON:pIo,computeBezier:vpe,Cvalues:QTe,deriveBezier:Ppe,getBezierLength:CZ,getBezierLengthAtT:mIo,getBezierPoints:Mpe,getTAtBezierLength:kTe,minmaxC:bTe,minmaxQ:_pe,Tvalues:gZ},gpe=(e,t,n)=>{let o=n<0?-1:1,i=Math.abs(n),r=Math.PI/2,s=0,a=i,c=0;while(a>0){let l=Math.min(r,a),d=l/2,u=0;for(let h=0,A=gZ.length;h<A;h+=1){let m=c+d*gZ[h]+d;u+=QTe[h]*Math.sqrt((e*Math.sin(m))**2+(t*Math.cos(m))**2)}s+=d*u,c+=l,a-=l}return o*s},fpe=(e,t,n,o)=>gpe(e,t,o)-gpe(e,t,n),_Io=(e,t,n)=>Math.abs(gpe(e,t,n)),$Q=(e,t,n,o,i,r)=>{let{sin:s,cos:a}=Math,c=a(i),l=s(i),d=n*a(r),u=o*s(r);return[e+c*d-l*u,t+l*d+c*u]},STe=(e,t)=>{let{x:n,y:o}=e,{x:i,y:r}=t,s=n*i+o*r,a=Math.sqrt((n**2+o**2)*(i**2+r**2));return(n*r-o*i<0?-1:1)*Math.acos(s/a)},Bpe=(e,t,n,o,i,r,s,a,c)=>{let{abs:l,sin:d,cos:u,sqrt:h,PI:A}=Math,m=l(n),p=l(o),g=(i%360+360)%360*(A/180);if(e===a&&t===c)return{rx:m,ry:p,startAngle:0,endAngle:0,center:{x:a,y:c}};if(m===0||p===0)return{rx:m,ry:p,startAngle:0,endAngle:0,center:{x:(a+e)/2,y:(c+t)/2}};let _=(e-a)/2,f=(t-c)/2,y={x:u(g)*_+d(g)*f,y:-d(g)*_+u(g)*f},x=y.x**2/m**2+y.y**2/p**2;if(x>1)m*=h(x),p*=h(x);let C=(m**2*p**2-m**2*y.y**2-p**2*y.x**2)/(m**2*y.y**2+p**2*y.x**2);C=C<0?0:C;let I=(r!==s?1:-1)*h(C),b={x:I*(m*y.y/p),y:I*(-(p*y.x)/m)},P={x:u(g)*b.x-d(g)*b.y+(e+a)/2,y:d(g)*b.x+u(g)*b.y+(t+c)/2},E={x:(y.x-b.x)/m,y:(y.y-b.y)/p},B=STe({x:1,y:0},E),w={x:(-y.x-b.x)/m,y:(-y.y-b.y)/p},T=STe(E,w);if(!s&&T>0)T-=2*A;else if(s&&T<0)T+=2*A;return T%=2*A,{center:P,startAngle:B,endAngle:B+T,rx:m,ry:p}},LTe=(e,t,n,o,i,r,s,a,c)=>{let{rx:l,ry:d,startAngle:u,endAngle:h}=Bpe(e,t,n,o,i,r,s,a,c);return Math.abs(fpe(l,d,u,h))},WIt=(e,t,n,o,i,r,s,a,c,l)=>{let d={x:e,y:t},{center:u,rx:h,ry:A,startAngle:m,endAngle:p}=Bpe(e,t,n,o,i,r,s,a,c);if(typeof l==="number"){let g=p-m,_=Math.abs(fpe(h,A,m,p));if(l<=0)d={x:e,y:t};else if(l>=_)d={x:a,y:c};else{if(e===a&&t===c)return{x:a,y:c};if(h===0||A===0)return Ape(e,t,a,c,l);let{PI:f,cos:y,sin:x}=Math,C=(i%360+360)%360*(f/180),I=0,b=1;for(let w=0;w<25;w+=1){let T=(I+b)/2;if(Math.abs(fpe(h,A,m,m+g*T))<l)I=T;else b=T}let P=m+g*((I+b)/2),E=h*y(P),B=A*x(P);d={x:y(C)*E-x(C)*B+u.x,y:x(C)*E+y(C)*B+u.y}}}return d},XIt=(e,t,n,o,i,r,s,a,c)=>{let{center:l,rx:d,ry:u,startAngle:h,endAngle:A}=Bpe(e,t,n,o,i,r,s,a,c),m=A-h,{min:p,max:g,tan:_,atan2:f,PI:y}=Math,{x,y:C}=l,I=i*y/180,b=_(I),P=f(-u*b,d),E=P,B=P+y,w=f(u,d*b),T=w+y,Q=[a],N=[c],F=p(e,a),H=g(e,a),z=p(t,c),Y=g(t,c),U=A-m*0.00001,X=$Q(x,C,d,u,I,U),V=A-m*0.99999,W=$Q(x,C,d,u,I,V);if(X[0]>H||W[0]>H){let j=$Q(x,C,d,u,I,E);Q.push(j[0]),N.push(j[1])}if(X[0]<F||W[0]<F){let j=$Q(x,C,d,u,I,B);Q.push(j[0]),N.push(j[1])}if(X[1]<z||W[1]<z){let j=$Q(x,C,d,u,I,T);Q.push(j[0]),N.push(j[1])}if(X[1]>Y||W[1]>Y){let j=$Q(x,C,d,u,I,w);Q.push(j[0]),N.push(j[1])}return F=p.apply([],Q),z=p.apply([],N),H=g.apply([],Q),Y=g.apply([],N),[F,z,H,Y]},gIo={angleBetween:STe,arcLength:_Io,arcLengthAtAngle:gpe,arcLengthBetween:fpe,arcPoint:$Q,getArcBBox:XIt,getArcLength:LTe,getArcProps:Bpe,getPointAtArcLength:WIt},KIt=([e,t,n,o,i,r,s,a],c)=>{let l=1-c;return{x:l**3*e+3*l**2*c*n+3*l*c**2*i+c**3*s,y:l**3*t+3*l**2*c*o+3*l*c**2*r+c**3*a}},ek=(e,t,n,o,i,r,s,a)=>CZ([e,t,n,o,i,r,s,a]),ype=(e,t,n,o,i,r,s,a,c)=>{let l=typeof c==="number",d={x:e,y:t};if(l){let u=[e,t,n,o,i,r,s,a],h=CZ(u);if(c<=0);else if(c>=h)d={x:s,y:a};else{let A=kTe(u,c);d=KIt(u,A)}}return d},fZ=(e,t,n,o,i,r,s,a)=>{let c=bTe([e,n,i,s]),l=bTe([t,o,r,a]);return[c[0],l[0],c[1],l[1]]},fIo={getCubicBBox:fZ,getCubicLength:ek,getPointAtCubicLength:ype,getPointAtCubicSegmentLength:KIt},jIt=([e,t,n,o,i,r],s)=>{let a=1-s;return{x:a**2*e+2*a*s*n+s**2*i,y:a**2*t+2*a*s*o+s**2*r}},xpe=(e,t,n,o,i,r)=>CZ([e,t,n,o,i,r]),qIt=(e,t,n,o,i,r,s)=>{let a=typeof s==="number",c={x:e,y:t};if(a){let l=[e,t,n,o,i,r],d=CZ(l);if(s<=0);else if(s>=d)c={x:i,y:r};else{let u=kTe(l,s);c=jIt(l,u)}}return c},PTe=(e,t,n,o,i,r)=>{let s=_pe([e,n,i]),a=_pe([t,o,r]);return[s[0],a[0],s[1],a[1]]},yIo={getPointAtQuadLength:qIt,getPointAtQuadSegmentLength:jIt,getQuadBBox:PTe,getQuadLength:xpe},SY=(e)=>{let t=e.length,n=-1,o,i=e[t-1],r=0;while(++n<t)o=i,i=e[n],r+=o[1]*i[0]-o[0]*i[1];return r/2},xIo=(e)=>e.reduce((t,n,o)=>{if(o)return t+Spe(e[o-1],n);return 0},0),CIo=(e)=>{if(e.length===0)return[0,0];let t=0,n=0;for(let[i,r]of e)t+=i,n+=r;let o=e.length;return[t/o,n/o]},IIo={polygonArea:SY,polygonLength:xIo,polygonCentroid:CIo},AZ=(e,t,n)=>{let{sin:o,cos:i}=Math;return{x:e*i(n)-t*o(n),y:e*o(n)+t*i(n)}},Cd=(e,t)=>{let n=t>=1?10**t:1;return t>0?Math.round(e*n)/n:Math.round(e)},r8={origin:[0,0,0],round:4},CY={a:7,c:6,h:1,l:2,m:2,r:4,q:4,s:4,t:2,v:1,z:0},vTe=(e)=>{let t=e.pathValue[e.segmentStart],n=t.toLowerCase(),{data:o}=e,i=0;while(o.length-i>=CY[n]){if(n==="m"&&o.length-i>2){let r=[,,,];r[0]=t,r[1]=o[i],r[2]=o[i+1],e.segments.push(r),i+=2,n="l",t=t==="m"?"l":"L"}else{let r=CY[n],s=Array(r+1);s[0]=t;for(let a=0;a<r;a+=1)s[a+1]=o[i+a];e.segments.push(s),i+=r}if(!CY[n])break}},Lp="SVGPathCommanderError",JIt=(e)=>{let{index:t,pathValue:n}=e,o=n.charCodeAt(t);if(o===48){e.param=0,e.index+=1;return}if(o===49){e.param=1,e.index+=1;return}e.err=`${Lp}: invalid Arc flag "${n[t]}", expecting 0 or 1 at index ${t}`},o8=(e)=>e>=48&&e<=57,i8="Invalid path value",$It=(e)=>{let{max:t,pathValue:n,index:o}=e,i=o,r=!1,s=!1,a=!1,c=!1,l;if(i>=t){e.err=`${Lp}: ${i8} at index ${i}, "pathValue" is missing param`;return}if(l=n.charCodeAt(i),l===43||l===45)i+=1,l=n.charCodeAt(i);if(!o8(l)&&l!==46){e.err=`${Lp}: ${i8} at index ${i}, "${n[i]}" is not a number`;return}if(l!==46){if(r=l===48,i+=1,l=n.charCodeAt(i),r&&i<t){if(l&&o8(l)){e.err=`${Lp}: ${i8} at index ${o}, "${n[o]}" illegal number`;return}}while(i<t&&o8(n.charCodeAt(i)))i+=1,s=!0;l=n.charCodeAt(i)}if(l===46){c=!0,i+=1;while(o8(n.charCodeAt(i)))i+=1,a=!0;l=n.charCodeAt(i)}if(l===101||l===69){if(c&&!s&&!a){e.err=`${Lp}: ${i8} at index ${i}, "${n[i]}" invalid float exponent`;return}if(i+=1,l=n.charCodeAt(i),l===43||l===45)i+=1;if(i<t&&o8(n.charCodeAt(i)))while(i<t&&o8(n.charCodeAt(i)))i+=1;else{e.err=`${Lp}: ${i8} at index ${i}, "${n[i]}" invalid integer exponent`;return}}e.index=i,e.param=bIo(n,o,i)},bIo=(e,t,n)=>{let o=t,i=1,r=0,s=0,a=0,c=!1,l=1,d=0,u=e.charCodeAt(o);if(u===43)o+=1;else if(u===45)i=-1,o+=1;for(;o<n;o+=1){let A=e.charCodeAt(o);if(A===46)c=!0;else if(A===101||A===69){o+=1;let m=e.charCodeAt(o);if(m===43)o+=1;else if(m===45)l=-1,o+=1;for(;o<n;o+=1)d=d*10+(e.charCodeAt(o)-48)}else{let m=A-48;if(m!==0||r!==0)a+=1;if(r=r*10+m,c)s+=1}}if(a>15||a===0)return+e.slice(t,n);let h=l*d-s;if(h>22||h<-22)return+e.slice(t,n);if(h>=0)return i*r*10**h;return i*r/10**-h},ZIt=(e)=>[5760,6158,8192,8193,8194,8195,8196,8197,8198,8199,8200,8201,8202,8239,8287,12288,65279,10,13,8232,8233,32,9,11,12,160].includes(e),IY=(e)=>{let{pathValue:t,max:n}=e;while(e.index<n&&ZIt(t.charCodeAt(e.index)))e.index+=1},ebt=(e)=>{switch(e|32){case 109:case 122:case 108:case 104:case 118:case 99:case 115:case 113:case 116:case 97:return!0;default:return!1}},tbt=(e)=>o8(e)||e===43||e===45||e===46,nbt=(e)=>(e|32)===97,obt=(e)=>{switch(e|32){case 109:case 77:return!0;default:return!1}},FTe=(e)=>{let{max:t,pathValue:n,index:o,segments:i}=e,r=n.charCodeAt(o),s=CY[n[o].toLowerCase()];if(e.segmentStart=o,!ebt(r)){e.err=`${Lp}: ${i8} "${n[o]}" is not a path command at index ${o}`;return}let a=i[i.length-1];if(!obt(r)&&a?.[0]?.toLocaleLowerCase()==="z"){e.err=`${Lp}: ${i8} "${n[o]}" is not a MoveTo path command at index ${o}`;return}if(e.index+=1,IY(e),e.data=[],!s){vTe(e);return}for(;;){for(let c=s;c>0;c-=1){if(nbt(r)&&(c===3||c===4))JIt(e);else $It(e);if(e.err.length)return;if(e.data.push(e.param),IY(e),e.index<t&&n.charCodeAt(e.index)===44)e.index+=1,IY(e)}if(e.index>=e.max)break;if(!tbt(n.charCodeAt(e.index)))break}vTe(e)},HTe=class{constructor(e){this.segments=[],this.pathValue=e,this.max=e.length,this.index=0,this.param=0,this.segmentStart=0,this.data=[],this.err=""}},Cy=(e)=>{if(typeof e!=="string")return e.slice(0);let t=new HTe(e);IY(t);while(t.index<t.max&&!t.err.length)FTe(t);if(!t.err.length){if(t.segments.length)t.segments[0][0]="M"}else throw TypeError(t.err);return t.segments},IZ=(e,t,n,o)=>{let[i]=e,r=i.toUpperCase();if(t===0||r===i)return e;if(r==="A")return[r,e[1],e[2],e[3],e[4],e[5],e[6]+n,e[7]+o];else if(r==="V")return[r,e[1]+o];else if(r==="H")return[r,e[1]+n];else if(r==="L")return[r,e[1]+n,e[2]+o];else if(r==="C")return[r,e[1]+n,e[2]+o,e[3]+n,e[4]+o,e[5]+n,e[6]+o];else{let s=[],a=e.length;for(let c=1;c<a;c+=1)s.push(e[c]+(c%2?n:o));return[r].concat(s)}},n1=(e,t)=>{let n=0,o=0,i=0,r=0,s=0;while(s<e.length){let a=e[s],[c]=a,l=c.charCodeAt(0),d=l>=97,u=d?String.fromCharCode(l-32):c,h=t(a,s,n,o);if(h===!1)break;if(u==="Z")n=i,o=r;else if(u==="H")n=a[1]+(d?n:0);else if(u==="V")o=a[1]+(d?o:0);else{let A=a.length;if(n=a[A-2]+(d?n:0),o=a[A-1]+(d?o:0),u==="M")i=n,r=o}if(h)e[s]=h;s+=1}return e},Cpe=(e)=>{let t=Cy(e);return n1(t,IZ)},OTe=(e,t,n,o)=>{let[i]=e,r=i.toLowerCase();if(t===0||i===r)return e;if(r==="a")return[r,e[1],e[2],e[3],e[4],e[5],e[6]-n,e[7]-o];else if(r==="v")return[r,e[1]-o];else if(r==="h")return[r,e[1]-n];else if(r==="l")return[r,e[1]-n,e[2]-o];else{let s=[],a=e.length;for(let c=1;c<a;c+=1)s.push(e[c]-(c%2?n:o));return[r].concat(s)}},QIt=(e)=>{let t=Cy(e);return n1(t,OTe)},bZ=(e,t,n,o,i,r,s,a,c,l)=>{let d=e,u=t,h=n,A=o,m=a,p=c,g=Math.PI*120/180,_=Math.PI/180*(+i||0),f=[],y,x,C,I,b;if(!l){y=AZ(d,u,-_),d=y.x,u=y.y,y=AZ(m,p,-_),m=y.x,p=y.y;let V=(d-m)/2,W=(u-p)/2,j=V*V/(h*h)+W*W/(A*A);if(j>1)j=Math.sqrt(j),h*=j,A*=j;let q=h*h,ne=A*A,ce=(r===s?-1:1)*Math.sqrt(Math.abs((q*ne-q*W*W-ne*V*V)/(q*W*W+ne*V*V)));if(I=ce*h*W/A+(d+m)/2,b=ce*-A*V/h+(u+p)/2,x=Math.asin(((u-b)/A*1e9>>0)/1e9),C=Math.asin(((p-b)/A*1e9>>0)/1e9),x=d<I?Math.PI-x:x,C=m<I?Math.PI-C:C,x<0)x=Math.PI*2+x;if(C<0)C=Math.PI*2+C;if(s&&x>C)x-=Math.PI*2;if(!s&&C>x)C-=Math.PI*2}else[x,C,I,b]=l;let P=C-x;if(Math.abs(P)>g){let V=C,W=m,j=p;C=x+g*(s&&C>x?1:-1),m=I+h*Math.cos(C),p=b+A*Math.sin(C),f=bZ(m,p,h,A,i,0,s,W,j,[C,V,I,b])}P=C-x;let E=Math.cos(x),B=Math.sin(x),w=Math.cos(C),T=Math.sin(C),Q=Math.tan(P/4),N=1.3333333333333333*h*Q,F=1.3333333333333333*A*Q,H=[d,u],z=[d+N*B,u-F*E],Y=[m+N*T,p-F*w],U=[m,p];if(z[0]=2*H[0]-z[0],z[1]=2*H[1]-z[1],l)return[z[0],z[1],Y[0],Y[1],U[0],U[1]].concat(f);f=[z[0],z[1],Y[0],Y[1],U[0],U[1]].concat(f);let X=[];for(let V=0,W=f.length;V<W;V+=1)X[V]=V%2?AZ(f[V-1],f[V],_).y:AZ(f[V],f[V+1],_).x;return X},ibt=(e,t,n,o,i,r)=>[0.3333333333333333*e+0.6666666666666666*n,0.3333333333333333*t+0.6666666666666666*o,0.3333333333333333*i+0.6666666666666666*n,0.3333333333333333*r+0.6666666666666666*o,i,r],ETe=(e,t,n,o)=>{let i=sE([e,t],[n,o],0.3333333333333333),r=sE([e,t],[n,o],0.6666666666666666);return[i[0],i[1],r[0],r[1],n,o]},rbt=(e,t)=>{let n=e[0],o=e.slice(1).map(Number),[i,r]=o,{x1:s,y1:a}=t;if(!"TQ".includes(n))t.qx=null,t.qy=null;if(n==="M")return t.mx=i,t.my=r,t.x=i,t.y=r,e;else if(n==="A")return["C"].concat(bZ(s,a,o[0],o[1],o[2],o[3],o[4],o[5],o[6]));else if(n==="Q")return t.qx=i,t.qy=r,["C"].concat(ibt(s,a,o[0],o[1],o[2],o[3]));else if(n==="L")return["C"].concat(ETe(s,a,i,r));else if(n==="Z")return["C"].concat(ETe(s,a,t.mx,t.my));return e},wpe=(e,t)=>{let[n]=e,o=n.toUpperCase(),i=n!==o,{x1:r,y1:s,x2:a,y2:c,x:l,y:d}=t,u=e.slice(1),h=u.map((A,m)=>A+(i?m%2?d:l:0));if(!"TQ".includes(o))t.qx=null,t.qy=null;if(o==="A")return h=u.slice(0,-2).concat(u[5]+(i?l:0),u[6]+(i?d:0)),["A"].concat(h);else if(o==="H")return["L",e[1]+(i?l:0),s];else if(o==="V")return["L",r,e[1]+(i?d:0)];else if(o==="L")return["L",e[1]+(i?l:0),e[2]+(i?d:0)];else if(o==="M")return["M",e[1]+(i?l:0),e[2]+(i?d:0)];else if(o==="C")return["C"].concat(h);else if(o==="S"){let A=r*2-a,m=s*2-c;return t.x1=A,t.y1=m,["C",A,m].concat(h)}else if(o==="T"){let A=t.qx!=null?r*2-t.qx:r,m=t.qy!=null?s*2-t.qy:s;return t.qx=A,t.qy=m,["Q",A,m].concat(h)}else if(o==="Q"){let[A,m]=h;return t.qx=A,t.qy=m,["Q"].concat(h)}else if(o==="Z")return["Z"];return e},Tpe={mx:0,my:0,x1:0,y1:0,x2:0,y2:0,x:0,y:0,qx:null,qy:null},s8=(e)=>{let t={...Tpe},n=Cy(e);return n1(n,(o,i,r,s)=>{t.x=r,t.y=s;let a=wpe(o,t);if(a[0]==="M")t.mx=a[1],t.my=a[2];let c=rbt(a,t);if(c[0]==="C"&&c.length>7)n.splice(i+1,0,["C"].concat(c.slice(7))),c=c.slice(0,7);let l=c.length;return t.x1=+c[l-2],t.y1=+c[l-1],t.x2=+c[l-4]||t.x1,t.y2=+c[l-3]||t.y1,c})},MTe=(e,t)=>{let n=e.length,{round:o}=r8,i=e[0],r="";o=t==="off"?t:typeof t==="number"&&t>=0?t:typeof o==="number"&&o>=0?o:"off";let s=o==="off"?0:10**o;for(let a=0;a<n;a+=1){i=e[a];let c=i[0],l=i.length;if(r+=c,o==="off"){for(let d=1;d<l;d+=1)if(r+=i[d],d!==l-1)r+=" "}else for(let d=1;d<l;d+=1)if(r+=Math.round(i[d]*s)/s,d!==l-1)r+=" "}return r},BTe=(e)=>{if(!e)return{x:0,y:0,width:0,height:0,x2:0,y2:0,cx:0,cy:0,cz:0};let t=Cy(e),n="M",o=0,i=0,{max:r,min:s}=Math,a=1/0,c=1/0,l=-1/0,d=-1/0,u=0,h=0,A=0,m=0,p=0,g=0,_=0,f=0,y=null,x=null;n1(t,(b,P,E,B)=>{[n]=b;let w=n.charCodeAt(0),T=w>=97,Q=T?String.fromCharCode(w-32):n,N=T?IZ(b,P,E,B):b,F=Q==="V"?["L",E,N[1]]:Q==="H"?["L",N[1],B]:N;if([n]=F,Q!=="T"&&Q!=="Q")y=null,x=null;if(n==="M")[,o,i]=F,u=o,h=i,A=o,m=i;else if(n==="L")[u,h,A,m]=ITe(E,B,F[1],F[2]);else if(n==="A")[u,h,A,m]=XIt(E,B,F[1],F[2],F[3],F[4],F[5],F[6],F[7]);else if(n==="S"){let H=p*2-_,z=g*2-f;[u,h,A,m]=fZ(E,B,H,z,F[1],F[2],F[3],F[4])}else if(n==="C")[u,h,A,m]=fZ(E,B,F[1],F[2],F[3],F[4],F[5],F[6]);else if(n==="T")y=y===null?E:p*2-y,x=x===null?B:g*2-x,[u,h,A,m]=PTe(E,B,y,x,F[1],F[2]);else if(n==="Q")y=F[1],x=F[2],[u,h,A,m]=PTe(E,B,F[1],F[2],F[3],F[4]);else if(n==="Z")[u,h,A,m]=ITe(E,B,o,i);if(a=s(u,a),c=s(h,c),l=r(A,l),d=r(m,d),n==="Z")p=o,g=i;else{let H=F.length;p=F[H-2],g=F[H-1]}if(n==="C")_=F[3],f=F[4];else if(n==="S")_=F[1],f=F[2];else _=p,f=g});let C=l-a,I=d-c;return{width:C,height:I,x:a,y:c,x2:l,y2:d,cx:a+C/2,cy:c+I/2,cz:Math.max(C,I)+Math.min(C,I)/2}},l6=(e)=>{let t=Cy(e),n=0,o=0,i=0,r=0,s=null,a=null,c="M",l=0,d=0,u=0;return n1(t,(h,A,m,p)=>{[c]=h;let g=c.toUpperCase(),_=g!==c?IZ(h,A,m,p):h.slice(0),f=g==="V"?["L",m,_[1]]:g==="H"?["L",_[1],p]:_;if([c]=f,!"TQ".includes(g))s=null,a=null;if(c==="M")[,l,d]=f;else if(c==="L")u+=bY(m,p,f[1],f[2]);else if(c==="A")u+=LTe(m,p,f[1],f[2],f[3],f[4],f[5],f[6],f[7]);else if(c==="S"){let y=n*2-i,x=o*2-r;u+=ek(m,p,y,x,f[1],f[2],f[3],f[4])}else if(c==="C")u+=ek(m,p,f[1],f[2],f[3],f[4],f[5],f[6]);else if(c==="T")s=s===null?m:n*2-s,a=a===null?p:o*2-a,u+=xpe(m,p,s,a,f[1],f[2]);else if(c==="Q")s=f[1],a=f[2],u+=xpe(m,p,f[1],f[2],f[3],f[4]);else if(c==="Z")u+=bY(m,p,l,d);[n,o]=c==="Z"?[l,d]:f.slice(-2),[i,r]=c==="C"?[f[3],f[4]]:c==="S"?[f[1],f[2]]:[n,o]}),u},zTe=0.00001,nS=(e)=>{let t=Cy(e),n={...Tpe};return n1(t,(o,i,r,s)=>{n.x=r,n.y=s;let a=wpe(o,n),c=a.length;return n.x1=+a[c-2],n.y1=+a[c-1],n.x2=+a[c-4]||n.x1,n.y2=+a[c-3]||n.y1,a})},_Z=(e,t)=>{let n=nS(e),o=!1,i=[],[r,s]=n[0].slice(1),a=typeof t==="number",c={x:r,y:s},l=0,d=c,u=0;if(!a||t<0.00001)return c;return n1(n,(h,A,m,p)=>{let g=h[0];if(o=g==="M",i=!o?[m,p].concat(h.slice(1)):i,o)[,r,s]=h,c={x:r,y:s},l=0;else if(g==="L")c=Ape(i[0],i[1],i[2],i[3],t-u),l=bY(i[0],i[1],i[2],i[3]);else if(g==="A")c=WIt(i[0],i[1],i[2],i[3],i[4],i[5],i[6],i[7],i[8],t-u),l=LTe(i[0],i[1],i[2],i[3],i[4],i[5],i[6],i[7],i[8]);else if(g==="C")c=ype(i[0],i[1],i[2],i[3],i[4],i[5],i[6],i[7],t-u),l=ek(i[0],i[1],i[2],i[3],i[4],i[5],i[6],i[7]);else if(g==="Q")c=qIt(i[0],i[1],i[2],i[3],i[4],i[5],t-u),l=xpe(i[0],i[1],i[2],i[3],i[4],i[5]);else if(g==="Z")i=[m,p,r,s],c=Ape(i[0],i[1],i[2],i[3],t-u),l=bY(i[0],i[1],i[2],i[3]);if(u<t)d=c;else return!1;u+=l}),d},GTe=(e,t)=>{let n=Cy(e),o=n.slice(0),i=l6(o),r=o.length-1,s=0,a=0,c=n[0];if(r<=0||!t||!Number.isFinite(t))return{segment:c,index:0,length:a,lengthAtSegment:s};if(t>=i)return o=n.slice(0,-1),s=l6(o),a=i-s,c=n[r],{segment:c,index:r,length:a,lengthAtSegment:s};let l=[];while(r>0)c=o[r],o=o.slice(0,-1),s=l6(o),a=i-s,i=s,l.push({segment:c,index:r,length:a,lengthAtSegment:s}),r-=1;return l.find(({lengthAtSegment:d})=>d<=t)},Dpe=(e,t)=>{let n=Cy(e),o=nS(n),i=l6(o),r=(y)=>{let x=y.x-t.x,C=y.y-t.y;return x*x+C*C},s=8,a,c={x:0,y:0},l=0,d=0,u=1/0;for(let y=0;y<=i;y+=s)if(a=_Z(o,y),l=r(a),l<u)c=a,d=y,u=l;s/=2;let h,A,m=0,p=0,g=0,_=0;while(s>0.000001){if(m=d-s,h=_Z(o,m),g=r(h),p=d+s,A=_Z(o,p),_=r(A),m>=0&&g<u)c=h,d=m,u=g;else if(p<=i&&_<u)c=A,d=p,u=_;else s/=2;if(s<0.00001)break}let f=GTe(n,d);return{closest:c,distance:Math.sqrt(u),segment:f}},SIo=(e,t)=>Dpe(e,t).closest,PIo=(e,t,n,o,i,r,s,a)=>3*((a-t)*(n+i)-(s-e)*(o+r)+o*(e-i)-n*(t-r)+a*(i+e/3)-s*(r+t/3))/20,sbt=(e)=>{let t=0,n=0,o=0;return s8(e).map((i)=>{switch(i[0]){case"M":return[,t,n]=i,0;default:return o=PIo(t,n,i[1],i[2],i[3],i[4],i[5],i[6]),[t,n]=i.slice(-2),o}}).reduce((i,r)=>i+r,0)},vIo=(e)=>sbt(s8(e))>=0,EIo=(e,t)=>GTe(e,t).segment,MIo=(e,t)=>Dpe(e,t).segment,SZ=(e)=>Array.isArray(e)&&e.every((t)=>{let n=t[0].toLowerCase();return CY[n]===t.length-1&&"achlmqstvz".includes(n)&&t.slice(1).every(Number.isFinite)})&&e.length>0,abt=(e)=>SZ(e)&&e.every(([t])=>t===t.toUpperCase()),Npe=(e)=>abt(e)&&e.every(([t])=>"ACLMQZ".includes(t)),yZ=(e)=>Npe(e)&&e.every(([t])=>"MLVHZ".includes(t)),BIo=(e)=>Npe(e)&&e.every(([t])=>"MC".includes(t)),wIo=(e,t)=>{let{distance:n}=Dpe(e,t);return Math.abs(n)<zTe},TIo=(e)=>SZ(e)&&e.slice(1).every(([t])=>t===t.toLowerCase()),cbt=(e)=>{if(typeof e!=="string"||!e.length)return!1;let t=new HTe(e);IY(t);while(t.index<t.max&&!t.err.length)FTe(t);return!t.err.length&&"mM".includes(t.segments[0][0])};function PY(e){let t=[],[n,o]=[0,0];return n1(e,(i)=>{let r=i[0];if(r==="M")[n,o]=[i[1],i[2]],t.push([n,o]);else if(r==="L")t.push([i[1],i[2]]);else if(r==="C")t.push([i[5],i[6]]);else if(r==="A")t.push([i[6],i[7]]);else if(r==="Z")t.push([n,o]);else throw TypeError(`${Lp}: path command "${r}" is not supported`)}),t}var xZ={line:["x1","y1","x2","y2"],circle:["cx","cy","r"],ellipse:["cx","cy","rx","ry"],rect:["width","height","x","y","rx","ry"],polygon:["points"],polyline:["points"],glyph:["d"]},lbt=(e)=>e!==void 0&&e!==null&&typeof e==="object"&&e.nodeType===1,DIo=(e)=>{let{x1:t,y1:n,x2:o,y2:i}=e;return[t,n,o,i]=[t,n,o,i].map((r)=>+r),[["M",t,n],["L",o,i]]},NIo=(e)=>{let t=[],n=(e.points||"").trim().split(/[\s|,]/).map((i)=>+i),o=0;while(o<n.length)t.push([o?"L":"M",n[o],n[o+1]]),o+=2;return e.type==="polygon"?[...t,["z"]]:t},RIo=(e)=>{let{cx:t,cy:n,r:o}=e;return[t,n,o]=[t,n,o].map((i)=>+i),[["M",t-o,n],["a",o,o,0,1,0,2*o,0],["a",o,o,0,1,0,-2*o,0]]},QIo=(e)=>{let{cx:t,cy:n}=e,o=e.rx||0,i=e.ry||o;return[t,n,o,i]=[t,n,o,i].map((r)=>+r),[["M",t-o,n],["a",o,i,0,1,0,2*o,0],["a",o,i,0,1,0,-2*o,0]]},kIo=(e)=>{let t=+e.x||0,n=+e.y||0,o=+e.width,i=+e.height,r=+(e.rx||0),s=+(e.ry||r);if(r||s){if(r*2>o)r-=(r*2-o)/2;if(s*2>i)s-=(s*2-i)/2;return[["M",t+r,n],["h",o-r*2],["s",r,0,r,s],["v",i-s*2],["s",0,s,-r,s],["h",-o+r*2],["s",-r,0,-r,-s],["v",-i+s*2],["s",0,-s,r,-s]]}return[["M",t,n],["h",o],["v",i],["H",t],["Z"]]},dbt=(e)=>{let t=Object.keys(xZ),n=lbt(e),o=n?e.tagName:null;if(o&&[...t,"path"].every((c)=>o!==c))throw TypeError(`${Lp}: "${o}" is not SVGElement`);let i=n?o:e.type,r=xZ[i],s={type:i};if(n)r.forEach((c)=>{s[c]=e.getAttribute(c)});else Object.assign(s,e);let a=[];if(i==="circle")a=RIo(s);else if(i==="ellipse")a=QIo(s);else if(["polyline","polygon"].includes(i))a=NIo(s);else if(i==="rect")a=kIo(s);else if(i==="line")a=DIo(s);else if(["glyph","path"].includes(i))a=Cy(n?e.getAttribute("d")||"":e.d||"");if(SZ(a)&&a.length)return a;return!1},LIo=(e,t,n)=>{let o=n||document,i=Object.keys(xZ),r=lbt(e),s=r?e.tagName:null;if(s==="path")throw TypeError(`${Lp}: "${s}" is already SVGPathElement`);if(s&&i.every((m)=>s!==m))throw TypeError(`${Lp}: "${s}" is not SVGElement`);let a=o.createElementNS("http://www.w3.org/2000/svg","path"),c=r?s:e.type,l=xZ[c],d={type:c},u=r8.round,h=dbt(e),A=h&&h.length?MTe(h,u):"";if(r){l.forEach((m)=>{d[m]=e.getAttribute(m)});for(let m=0;m<e.attributes.length;m++){let p=e.attributes[m];if(p&&!l.includes(p.name))a.setAttribute(p.name,p.value)}}else Object.assign(d,e),Object.keys(d).forEach((m)=>{if(!l.includes(m)&&m!=="type")a.setAttribute(m.replace(/[A-Z]/g,(p)=>`-${p.toLowerCase()}`),d[m])});if(cbt(A)){if(a.setAttribute("d",A),t&&r)e.before(a,e),e.remove();return a}return!1},wTe=(e)=>{if(typeof e==="string"){let t=e.match(/[Mm]/g);return t?t.length>1:!1}if(SZ(e)){let t=0;for(let n of e)if(n[0].toUpperCase()==="M"){if(t++,t>1)return!0}return!1}throw TypeError(Lp+": expected string or PathArray")};function vY(e){return Npe(e)&&e.every(([t])=>"MLVH".includes(t))}var YTe=(e)=>e[e.length-1][0].toUpperCase()==="Z",ubt=(e,t,n,o)=>{let[i]=e,{round:r}=r8,s=typeof r==="number"?r:4,a=t.slice(1),{x1:c,y1:l,x2:d,y2:u,x:h,y:A}=n,[m,p]=a.slice(-2),g=e;if(!"TQ".includes(i))n.qx=null,n.qy=null;if(i==="L"){if(Cd(h,s)===Cd(m,s))return["V",p];else if(Cd(A,s)===Cd(p,s))return["H",m]}else if(i==="C"){let[_,f]=a;if(n.x1=_,n.y1=f,"CS".includes(o)&&(Cd(_,s)===Cd(c*2-d,s)&&Cd(f,s)===Cd(l*2-u,s)||Cd(c,s)===Cd(d*2-h,s)&&Cd(l,s)===Cd(u*2-A,s)))return["S",a[2],a[3],a[4],a[5]]}else if(i==="Q"){let[_,f]=a;if(n.qx=_,n.qy=f,"QT".includes(o)&&Cd(_,s)===Cd(c*2-d,s)&&Cd(f,s)===Cd(l*2-u,s))return["T",a[2],a[3]]}return g},Ipe=(e,t)=>{let n=e.slice(1).map((o)=>Cd(o,t));return[e[0]].concat(n)},kIt=(e,t)=>{let n=Cpe(e),o=typeof t==="number"&&t>=0?t:2,i={...Tpe},r=[],s="M",a="Z";return n1(n,(c,l,d,u)=>{i.x=d,i.y=u;let h=wpe(c,i),A=c;if(s=c[0],r[l]=s,l){a=r[l-1];let p=ubt(c,h,i,a),g=Ipe(p,o),_=g.join(""),f=OTe(p,l,d,u),y=Ipe(f,o),x=y.join("");A=_.length<x.length?g:y}let m=h.length;return i.x1=+h[m-2],i.y1=+h[m-1],i.x2=+h[m-4]||i.x1,i.y2=+h[m-3]||i.y1,A})},ZQ=(e)=>{let t=Cpe(e),n=nS(t),o=t.length,i=t[o-1][0]==="Z",r=n1(t,(s,a)=>{let c=n[a],l=a&&t[a-1],d=l&&l[0],u=t[a+1],h=u&&u[0],A=s[0],[m,p]=n[a?a-1:o-1].slice(-2),g=s;switch(A){case"M":g=i?["Z"]:[A,m,p];break;case"A":g=[A,s[1],s[2],s[3],s[4],s[5]===1?0:1,m,p];break;case"C":if(u&&h==="S")g=["S",s[1],s[2],m,p];else g=[A,s[3],s[4],s[1],s[2],m,p];break;case"S":if(d&&"CS".includes(d)&&(!u||h!=="S"))g=["C",c[3],c[4],c[1],c[2],m,p];else g=[A,c[1],c[2],m,p];break;case"Q":if(u&&h==="T")g=["T",m,p];else g=[A,s[1],s[2],m,p];break;case"T":if(d&&"QT".includes(d)&&(!u||h!=="T"))g=["Q",c[1],c[2],m,p];else g=[A,m,p];break;case"Z":g=["M",m,p];break;case"H":g=[A,m];break;case"V":g=[A,p];break;default:g=[A].concat(s.slice(1,-2),m,p)}return g});return i?r.reverse():[r[0]].concat(r.slice(1).reverse())},bpe=(e)=>{let t=[],n=Cy(e),o=[],i=-1,r=0,s=0,a=0,c=0;return n1(n,(l,d,u,h)=>{let A=l[0],m=A.toUpperCase(),p=A===A.toLowerCase(),g=l.slice(1);if(m==="M")i+=1,[r,s]=g,r+=p?u:0,s+=p?h:0,a=r,c=s,o=[p?[m,a,c]:l];else{if(m==="Z")r=a,s=c;else if(m==="H")[,r]=l,r+=p?u:0;else if(m==="V")[,s]=l,s+=p?h:0;else[r,s]=l.slice(-2),r+=p?u:0,s+=p?h:0;o.push(l)}t[i]=o}),t},hbt=(e)=>{let t=new Rg,{origin:n}=e,[o,i]=n,{translate:r}=e,{rotate:s}=e,{skew:a}=e,{scale:c}=e;if(Array.isArray(r)&&r.length>=2&&r.every((l)=>!Number.isNaN(+l))&&r.some((l)=>l!==0))t=t.translate(...r);else if(typeof r==="number"&&!Number.isNaN(r))t=t.translate(r);if(s||a||c){if(t=t.translate(o,i),Array.isArray(s)&&s.length>=2&&s.every((l)=>!Number.isNaN(+l))&&s.some((l)=>l!==0))t=t.rotate(...s);else if(typeof s==="number"&&!Number.isNaN(s))t=t.rotate(s);if(Array.isArray(a)&&a.length===2&&a.every((l)=>!Number.isNaN(+l))&&a.some((l)=>l!==0))t=a[0]?t.skewX(a[0]):t,t=a[1]?t.skewY(a[1]):t;else if(typeof a==="number"&&!Number.isNaN(a))t=t.skewX(a);if(Array.isArray(c)&&c.length>=2&&c.every((l)=>!Number.isNaN(+l))&&c.some((l)=>l!==1))t=t.scale(...c);else if(typeof c==="number"&&!Number.isNaN(c))t=t.scale(c);t=t.translate(-o,-i)}return t},FIo=(e,t)=>{if(e.is2D)return[e.a*t[0]+e.c*t[1]+e.e*t[3],e.b*t[0]+e.d*t[1]+e.f*t[3],0,1];let n=Rg.Translate(t[0],t[1],t[2]);return[,,,n.m44]=t,n=e.multiply(n),[n.m41,n.m42,n.m43,n.m44]},TTe=(e,t,n)=>{let[o,i,r]=n,[s,a,c]=FIo(e,[t[0],t[1],0,1]),l=s-o,d=a-i,u=c-r;return[l*(Math.abs(r)/Math.abs(u)||1)+o,d*(Math.abs(r)/Math.abs(u)||1)+i]},HIo=(e,t,n,o,i,r,s,a,c)=>{let l=[],d=0,u=0,h=0,A=0,m=0,p=0,g=0,_=0;for(let f=0,y=e.length;f<y;f+=1){let x=e[f],C=x[0],I=C.charCodeAt(0),b=I>=97,P=b?String.fromCharCode(I-32):C,E=f===0&&b?C:P;if(P==="Z"){l.push(["Z"]),m=g,p=_;continue}if(P==="V"){let B=x[1]+(b?p:0);if(h=t*m+o*B+r-a+a,A=n*m+i*B+s-c+c,d!==h&&u!==A)l.push(["L",h,A]);else if(u===A)l.push(["H",h]);else if(d===h)l.push(["V",A]);else l.push(["L",m,B]);p=B,d=h,u=A;continue}if(P==="H"){let B=x[1]+(b?m:0);if(h=t*B+o*p+r-a+a,A=n*B+i*p+s-c+c,d!==h&&u!==A)l.push(["L",h,A]);else if(u===A)l.push(["H",h]);else if(d===h)l.push(["V",A]);else l.push(["L",B,p]);m=B,d=h,u=A;continue}if(P==="A"){let B=x[6]+(b?m:0),w=x[7]+(b?p:0),T=bZ(m,p,x[1],x[2],x[3],x[4],x[5],B,w),Q=T.length,N=0;if(Q>0)do{let F=["C"],H=N+6;for(let z=N;z<H;z+=2)h=t*T[z]+o*T[z+1]+r-a+a,A=n*T[z]+i*T[z+1]+s-c+c,F.push(h,A);l.push(F),N=H}while(N<Q);else l.push(["C"]);if(Q>0)m=T[Q-2],p=T[Q-1];else m=B,p=w;d=h,u=A;continue}if(P==="L"){let B=x[1]+(b?m:0),w=x[2]+(b?p:0);if(h=t*B+o*w+r-a+a,A=n*B+i*w+s-c+c,d!==h&&u!==A)l.push(["L",h,A]);else if(u===A)l.push(["H",h]);else if(d===h)l.push(["V",A]);else l.push(["L",B,w]);m=B,p=w,d=h,u=A;continue}{let B=[E],w=x.length;for(let T=1;T<w;T+=2){let Q=x[T]+(b?m:0),N=x[T+1]+(b?p:0);h=t*Q+o*N+r-a+a,A=n*Q+i*N+s-c+c,B.push(h,A)}if(l.push(B),m=x[w-2]+(b?m:0),p=x[w-1]+(b?p:0),P==="M")g=m,_=p;d=h,u=A}}return l},LIt=(e,t)=>{let n=Cy(e),o=t&&Object.keys(t);if(!t||o&&!o.length)return n.slice(0);if(!t.origin)Object.assign(t,{origin:r8.origin});let i=t.origin,r=hbt(t);if(r.isIdentity)return n.slice(0);if(r.is2D)return HIo(n,r.a,r.b,r.c,r.d,r.e,r.f,i[0],i[1]);let s=0,a=0,c=0,l=0,d=0,u=0;return n1(n,(h,A,m,p)=>{let[g]=h,_=g.toUpperCase(),f=_!==g?IZ(h,A,m,p):h.slice(0),y=_==="A"?["C"].concat(bZ(m,p,f[1],f[2],f[3],f[4],f[5],f[6],f[7])):_==="V"?["L",m,f[1]]:_==="H"?["L",f[1],p]:f;if(y[0]==="C"&&y.length>7){let x=y.slice(0,7);n.splice(A+1,0,["C"].concat(y.slice(7))),y=x}if(y[0]==="L"){if([c,l]=TTe(r,[y[1],y[2]],i),s!==c&&a!==l)y=["L",c,l];else if(a===l)y=["H",c];else if(s===c)y=["V",l]}else for(d=1,u=y.length;d<u;d+=2)[c,l]=TTe(r,[+y[d],+y[d+1]],i),y[d]=c,y[d+1]=l;return s=c,a=l,y})},OIo=(e)=>{let t=e.slice(1).map((n,o,i)=>!o?e[0].slice(1).concat(n.slice(1)):i[o-1].slice(-2).concat(n.slice(1))).map((n)=>n.map((o,i)=>n[n.length-i-2*(1-i%2)])).reverse();return[["M"].concat(t[0].slice(0,2))].concat(t.map((n)=>["C"].concat(n.slice(2))))},DTe=(e,t)=>{let{round:n}=r8;if(n=t==="off"?t:typeof t==="number"&&t>=0?t:typeof n==="number"&&n>=0?n:"off",n==="off")return e.slice(0);return n1(e,(o)=>Ipe(o,n))},NTe=(e)=>{let t=Cy(e);if(YTe(t)){let n=nS(t),o=t.length,i=o-2,[r,s]=n[0].slice(1),[a,c]=n[i].slice(-2);if(r===a&&s===c)t.splice(o-1,1)}};function mbt(e,t,n,o,i,r,s,a,c){let[l,d]=sE([e,t],[n,o],c),[u,h]=sE([n,o],[i,r],c),[A,m]=sE([i,r],[s,a],c),[p,g]=sE([l,d],[u,h],c),[_,f]=sE([u,h],[A,m],c),[y,x]=sE([p,g],[_,f],c);return[[e,t,l,d,p,g,y,x],[y,x,_,f,A,m,s,a]]}var FIt=(e)=>{let t=nS(e);if(!yZ(t)&&!vY(t))throw TypeError(`${Lp}: pathValue is not a polyline/polygon`);if(!YTe(t))return t;let n=[t[0]],[o,i]=t[0].slice(1);for(let r=1;r<t.length;r++){let s=t[r];if(s[0].toUpperCase()==="Z")n.push(["L",o,i]);else n.push(s)}return n};function zIo(e,t,n,o,i){if(i<=1)return[[e,t,n,o]];let r=[],s=n-e,a=o-t,c=e,l=t,d=0;while(d<i){let u=1/(i-d),h=e+u*s,A=t+u*a;r.push([c,l,h,A]),c=h,l=A,d++}return r}function pbt(e,t){if(t<=1)throw TypeError(`${Lp}: target must be >= 2`);let n=l6(e);if(n===0)return Array(e.length).fill(1);let o=n/t,i=vY(e),r=[1],s=[0];n1(e,(l,d,u,h)=>{if(d>0){let[A,m]=l.slice(-2),p=i?bY(u,h,A,m):ek(u,h,l[1],l[2],l[3],l[4],l[5],l[6]);s.push(p),r.push(1)}});let a=1;for(let l=1;l<s.length;l++){let d=s[l],u=d>o?Math.round(d/o):1;r[l]=u,a+=u}let c=t-a;if(c!==0){let l=[];for(let u=1;u<s.length;u++)if(s[u]>0)l.push([u,s[u]]);let d=l.length;if(c<0){l.sort((u,h)=>u[1]-h[1]);for(let u=0;u<d;u++){let h=l[u][0];if(r[h]>1&&l[u][1]>0)r[h]--,c++;if(c===0)break;else if(u===d-1)u=0}}else if(c>0){l.sort((u,h)=>h[1]-u[1]);for(let u=0;u<d;u++){let h=l[u][0];if(l[u][1]>0)r[h]++,c--;if(c===0)break;else if(u===d-1)u=0}}}return r}function HIt(e,t){if(e.length<2||t<=1)return e;let n=pbt(e,t),o=0,i=[e[0]],r=e.length,s=e[0][1],a=e[0][2];for(let c=1;c<r;c++){let[l,d]=e[c].slice(1),u=n[c];if(u>=1){let h=zIo(s,a,l,d,u);for(let A of h)i.push(["L",A[2],A[3]]),o++}s=l,a=d}if(i.length!==t)console.warn(`${Lp}: requested ${t} segments, got ${i.length}. Adjusted on last segment.`);return i}function GIo(e,t,n,o,i,r,s,a,c){if(c<=1)return[[e,t,n,o,i,r,s,a]];let l=[],d=e,u=t,h=n,A=o,m=i,p=r,g=s,_=a,f=0;while(f<c){let y=1/(c-f),[x,C]=mbt(d,u,h,A,m,p,g,_,y);l.push(x),[d,u,h,A,m,p,g,_]=C,f++}return l}function OIt(e,t){if(e.length<2||t<=1)return e;let n=pbt(e,t),o=0,i=[e[0]],r=e.length,s=e[0][1],a=e[0][2];for(let c=1;c<r;c++){let l=e[c],[d,u]=l.slice(-2),h=n[c];if(h>=1){let A=GIo(s,a,l[1],l[2],l[3],l[4],l[5],l[6],h);for(let m of A)i.push(["C",m[2],m[3],m[4],m[5],m[6],m[7]]),o++}s=d,a=u}if(i.length!==t)console.warn(`${Lp}: requested ${t} segments, got ${i.length}.`);return i}function YIo(e){let t=e.length,n=t-1,o,i=[];for(let r=0;r<t;r++){o=[];for(let s=0;s<t;s++){let a=r+s,c;if(s===0||e[a]&&e[a][0]==="M"){c=e[a],o.push(["M",...c.slice(-2)]);continue}if(a>=t)a-=n;o.push(e[a])}i.push(o)}return i}function VIo(e,t,n){let o=n||YIo(e);if(e.length!==t.length)throw TypeError(Lp+": paths must have the same number of segments after equalization");let i=0,r=1/0;for(let s=0;s<o.length;s++){let a=o[s],c=a.length,l=0;for(let d=0;d<c;d++){let u=a[d],h=t[d],A=u.slice(-2),m=h.slice(-2),p=A[0]-m[0],g=A[1]-m[1];l+=p*p+g*g}if(l<r)r=l,i=s}return o[i]}var UIo={mode:"auto",sampleSize:10,roundValues:4,reverse:!0,close:!1,target:void 0},RTe=(e,t,n={})=>{let{close:o,mode:i,reverse:r,roundValues:s,target:a}=Object.assign(UIo,n),c=nS(e),l=nS(t);NTe(c),NTe(l);let d=(yZ(c)||vY(c))&&(yZ(l)||vY(l));if(d&&i==="auto")c=FIt(c),l=FIt(l);else d=!1,c=s8(c),l=s8(l);let u=SY(PY(c)),h=SY(PY(l));if(r!==!1&&Math.sign(u)!==Math.sign(h))l=ZQ(l);let A=c.length,m=l.length,p=Math.max(A,m),g=p;if(typeof a!=="number"){let y=(l6(c)+l6(l))/2,x=y/Math.max(A,m),C=Math.max(p,Math.round(y/Math.max(x,1)));g=Math.min(C,Math.max(A,m)*3)}else if(a>=p)g=a;else console.warn('equalizeSegments "target" option: '+a+", expected >= "+p);let _=c,f=l;if(d)_=HIt(c,g),f=HIt(l,g);else _=OIt(c,g),f=OIt(l,g);if(f=VIo(f,_),typeof s==="number"&&s!==4)_=DTe(_,s),f=DTe(f,s);if(o)_.push(["Z"]),f.push(["Z"]);return[_,f]},tS=(e,[t,n])=>{let[o,i,r,s]=e;return t>=o&&t<=r&&n>=i&&n<=s},VTe=(e,t)=>{let[n,o,i,r]=e,[s,a,c,l]=t;return tS(t,[n,o])||tS(t,[i,o])||tS(t,[n,r])||tS(t,[i,r])||tS(e,[s,a])||tS(e,[c,a])||tS(e,[s,l])||tS(e,[c,l])||(n<c&&n>s||s<i&&s>n)&&(o<l&&o>a||a<r&&a>o)},zIt=([e,t])=>[["M",e,t],["L",e+0.001,t],["L",e+0.001,t+0.001],["L",e,t+0.001],["L",e,t],["Z"]];function WIo(e,t){let n=e.bbox,o=[];for(let r=0;r<t.length;r++){let{bbox:s,size:a}=t[r],c=n.cx-s.cx,l=n.cy-s.cy,d=Math.sqrt(c*c+l*l),u=Math.abs(e.size-a)/Math.max(e.size,a,0.000001),h=tS([n.x,n.y,n.x2,n.y2],[s.cx,s.cy])||tS([s.x,s.y,s.x2,s.y2],[n.cx,n.cy]),A=VTe([n.x,n.y,n.x2,n.y2],[s.x,s.y,s.x2,s.y2]);o.push({index:r,hasOverlap:h,boxIntersect:A,sizeDifference:u,centeredDistance:d})}let i=o.filter((r)=>r.hasOverlap&&r.boxIntersect);if(i.length>0){let r=i[0];for(let s=1;s<i.length;s++)if(i[s].centeredDistance<r.centeredDistance)r=i[s];return t.splice(r.index,1)[0]}return null}function GIt(e,t){let n=[];e.sort((o,i)=>i.size-o.size),t.sort((o,i)=>i.size-o.size);while(e.length>0){let o=e.shift(),i=WIo(o,t);if(i)n.push([o.path,i.path]);else{let r=[o.bbox.cx,o.bbox.cy];n.push([o.path,zIt(r)])}}while(t.length>0){let o=t.shift(),i=[o.bbox.cx,o.bbox.cy];n.push([zIt(i),o.path])}return n}var YIt=(e)=>{let t=[],n=[];for(let o of e){let i=SY(PY(o)),r=BTe(o),s={isPoly:yZ(o)||vY(o),size:r.width*r.height,path:o,signedArea:i,area:Math.abs(i),bbox:r};if(i>0)t.push(s);else n.push(s)}return{outers:t,inners:n}},XIo={mode:"auto",roundValues:4,close:!1,sampleSize:10},KIo=(e,t,n={})=>{let o=Object.assign(XIo,n),i=nS(e),r=nS(t),s=wTe(i),a=wTe(r);if(!s&&!a)return RTe(i,r,o);let c=SY(PY(i)),l=SY(PY(r)),d=i,u=r;if(Math.sign(c)<0)d=ZQ(d);if(Math.sign(l)<0)u=ZQ(u);let h=bpe(d),A=bpe(u),{outers:m,inners:p}=YIt(h),{outers:g,inners:_}=YIt(A),f=GIt(m,g),y=GIt(p,_),x=[];for(let[C,I]of[...f,...y]){let[b,P]=RTe(C,I,{...o,reverse:!1});x.push([b,P])}return[x.map((C)=>C[0]).flat(),x.map((C)=>C[1]).flat()]},jIo=(e,t,n,o,i,r,s,a)=>{if(Math.max(e,n)<Math.min(i,s)||Math.min(e,n)>Math.max(i,s)||Math.max(t,o)<Math.min(r,a)||Math.min(t,o)>Math.max(r,a))return;let c=(e*o-t*n)*(i-s)-(e-n)*(i*a-r*s),l=(e*o-t*n)*(r-a)-(t-o)*(i*a-r*s),d=(e-n)*(r-a)-(t-o)*(i-s);if(!d)return;let u=c/d,h=l/d,A=Cd(u,2),m=Cd(h,2);if(A<Cd(Math.min(e,n),2)||A>Cd(Math.max(e,n),2)||A<Cd(Math.min(i,s),2)||A>Cd(Math.max(i,s),2)||m<Cd(Math.min(t,o),2)||m>Cd(Math.max(t,o),2)||m<Cd(Math.min(r,a),2)||m>Cd(Math.max(r,a),2))return;return{x:u,y:h}},qIo=(e,t,n)=>{let o=fZ(...e),i=fZ(...t),{justCount:r,epsilon:s}=Object.assign({justCount:!0,epsilon:zTe},n);if(!VTe(o,i))return r?0:[];let a=ek(...e),c=ek(...t),l=Math.max(a/5>>0,1),d=Math.max(c/5>>0,1),u=[],h=[],A={},m=r?0:[];for(let p=0;p<l+1;p++){let g=ype(...e,p/l*a);u.push({x:g.x,y:g.y,t:p/l})}for(let p=0;p<d+1;p++){let g=ype(...t,p/d*c);h.push({x:g.x,y:g.y,t:p/d})}for(let p=0;p<l;p++)for(let g=0;g<d;g++){let _=1+s,f=u[p],y=u[p+1],x=h[g],C=h[g+1],I=Math.abs(y.x-f.x)<0.001?"y":"x",b=Math.abs(C.x-x.x)<0.001?"y":"x",P=jIo(f.x,f.y,y.x,y.y,x.x,x.y,C.x,C.y);if(P){if(A[P.x.toFixed(4)]==P.y.toFixed(4))continue;A[P.x.toFixed(4)]=P.y.toFixed(4);let E=f.t+Math.abs((P[I]-f[I])/(y[I]-f[I]))*(y.t-f.t),B=x.t+Math.abs((P[b]-x[b])/(C[b]-x[b]))*(C.t-x.t);if(E>=0&&E<=_&&B>=0&&B<=_)if(r)m++;else m.push({x:P.x,y:P.y,t1:Math.min(E,1),t2:Math.min(B,1)})}}return m},JIo=(e,t,n=!0)=>{let o=s8(e),i=s8(t),r=0,s=0,a=0,c=0,l=0,d=0,u=0,h=0,A=[r,s,r,s,l,d,l,d],m=[a,c,a,c,u,h,u,h],p=0,g=[],_=o.length,f=i.length;for(let y=0;y<_;y++){let x=o[y];if(x[0]=="M")r=x[1],s=x[2],l=r,d=s;else{if(x[0]=="C")A=[r,s,x[1],x[2],x[3],x[4],x[5],x[6]],r=A[6],s=A[7];else A=[r,s,r,s,l,d,l,d],r=l,s=d;for(let C=0;C<f;C++){let I=i[C];if(I[0]=="M")a=I[1],c=I[2],u=a,h=c;else if(I[0]=="C")m=[a,c,I[1],I[2],I[3],I[4],I[5],I[6]],a=m[6],c=m[7];let b=qIo(A,m,{justCount:n});if(n)p+=b;else g.push(...b)}}}return n?p:g},$Io=class{constructor(e,t){let n=t||{},o=typeof e>"u";if(o||!e.length)throw TypeError(`${Lp}: "pathValue" is ${o?"undefined":"empty"}`);this.segments=Cy(e);let{round:i,origin:r}=n,s;if(Number.isInteger(i)||i==="off")s=i;else s=r8.round;let a=r8.origin;if(Array.isArray(r)&&r.length>=2){let[c,l,d]=r.map(Number);a=[!Number.isNaN(c)?c:0,!Number.isNaN(l)?l:0,!Number.isNaN(d)?d:0]}return this.round=s,this.origin=a,this}get bbox(){return BTe(this.segments)}get length(){return l6(this.segments)}getBBox(){return this.bbox}getTotalLength(){return this.length}getPointAtLength(e){return _Z(this.segments,e)}toAbsolute(){let{segments:e}=this;return this.segments=Cpe(e),this}toRelative(){let{segments:e}=this;return this.segments=QIt(e),this}toCurve(){let{segments:e}=this;return this.segments=s8(e),this}reverse(e){let{segments:t}=this,n=bpe(t),o=n.length>1?n:!1,i=o?o.map((s,a)=>{if(e)return a?ZQ(s):s.slice(0);return ZQ(s)}):t.slice(0),r=[];if(o)r=i.flat(1);else r=e?t:ZQ(t);return this.segments=r.slice(0),this}normalize(){let{segments:e}=this;return this.segments=nS(e),this}optimize(){let{segments:e}=this,t=this.round==="off"?2:this.round;return this.segments=kIt(e,t),this}transform(e){if(!e||typeof e!=="object"||typeof e==="object"&&!["translate","rotate","skew","scale"].some((a)=>(a in e)))return this;let{segments:t,origin:[n,o,i]}=this,r={};for(let[a,c]of Object.entries(e))if(a==="skew"&&Array.isArray(c))r[a]=c.map(Number);else if((a==="rotate"||a==="translate"||a==="origin"||a==="scale")&&Array.isArray(c))r[a]=c.map(Number);else if(a!=="origin"&&typeof Number(c)==="number")r[a]=Number(c);let{origin:s}=r;if(Array.isArray(s)&&s.length>=2){let[a,c,l]=s.map(Number);r.origin=[!Number.isNaN(a)?a:n,!Number.isNaN(c)?c:o,l||i]}else r.origin=[n,o,i];return this.segments=LIt(t,r),this}flipX(){let{cx:e,cy:t}=this.bbox;return this.transform({rotate:[0,180,0],origin:[e,t,0]}),this}flipY(){let{cx:e,cy:t}=this.bbox;return this.transform({rotate:[180,0,0],origin:[e,t,0]}),this}toString(){return MTe(this.segments,this.round)}dispose(){Object.keys(this).forEach((e)=>delete this[e])}static options=r8;static CSSMatrix=Rg;static arcTools=gIo;static bezierTools=AIo;static cubicTools=fIo;static lineTools=hIo;static polygonTools=IIo;static quadTools=yIo;static pathToAbsolute=Cpe;static pathToRelative=QIt;static pathToCurve=s8;static pathToString=MTe;static distanceSquareRoot=Spe;static midPoint=sE;static rotateVector=AZ;static roundTo=Cd;static parsePathString=Cy;static finalizeSegment=vTe;static invalidPathValue=i8;static isArcCommand=nbt;static isDigit=o8;static isDigitStart=tbt;static isMoveCommand=obt;static isPathCommand=ebt;static isSpace=ZIt;static paramsCount=CY;static paramsParser=Tpe;static PathParser=HTe;static scanFlag=JIt;static scanParam=$It;static scanSegment=FTe;static skipSpaces=IY;static distanceEpsilon=zTe;static fixPath=NTe;static getClosestPoint=SIo;static getDrawDirection=vIo;static getPathArea=sbt;static getPathBBox=BTe;static getPointAtLength=_Z;static getPropertiesAtLength=GTe;static getPropertiesAtPoint=Dpe;static getSegmentAtLength=EIo;static getSegmentOfPoint=MIo;static getTotalLength=l6;static isAbsoluteArray=abt;static isCurveArray=BIo;static isPolygonArray=yZ;static isNormalizedArray=Npe;static isPathArray=SZ;static isPointInStroke=wIo;static isRelativeArray=TIo;static isValidPath=cbt;static samplePolygon=PY;static shapeParams=xZ;static shapeToPath=LIo;static shapeToPathArray=dbt;static absolutizeSegment=IZ;static arcToCubic=bZ;static getSVGMatrix=hbt;static iterate=n1;static lineToCubic=ETe;static normalizePath=nS;static normalizeSegment=wpe;static optimizePath=kIt;static projection2d=TTe;static quadToCubic=ibt;static relativizeSegment=OTe;static reverseCurve=OIo;static reversePath=ZQ;static roundPath=DTe;static roundSegment=Ipe;static segmentToCubic=rbt;static shortenSegment=ubt;static splitPath=bpe;static equalizePaths=KIo;static equalizeSegments=RTe;static splitCubicSegment=mbt;static transformPath=LIt;static isPointInsideBBox=tS;static pathsIntersection=JIo;static boundingBoxIntersect=VTe;static isMultiPath=wTe;static isClosedPath=YTe;static isPolylineArray=vY;static version=uIo};var EY=$Io;pn();pn();pn();pn();pn();pn();pn();Gt();pn();u0();pn();pn();pn();pn();Gt();wp();pn();We();var jI=Rt(lo(),1);var S0=Rt(cE(),1),Nin=Rt(uDe(),1);Gt();pn();We();Gt();pn();var LW=Rt(cE(),1);function c8(){return new hDe}class hDe{index={};array=[];size(){return this.array.length}empty(){return this.array.length===0}itemAt(e){return this.array[e]}contains(e){return this.index[e.id()]!==void 0}find(e){let t=this.index[e.id()];return t===void 0?void 0:this.array[t]}setDefault(e,t){let n=this.index[e.id()];if(n===void 0){let o=new kpe(e,t());return this.index[e.id()]=this.array.length,this.array.push(o),o}else return this.array[n]}insert(e,t){let n=new kpe(e,t),o=this.index[e.id()];if(o===void 0)this.index[e.id()]=this.array.length,this.array.push(n);else this.array[o]=n;return n}erase(e){let t=this.index[e.id()];if(t===void 0)return;this.index[e.id()]=void 0;let n=this.array[t],o=this.array.pop();if(n!==o)this.array[t]=o,this.index[o.first.id()]=t;return n}copy(){let e=new hDe;for(let t=0;t<this.array.length;t++){let n=this.array[t].copy();e.array[t]=n,e.index[n.first.id()]=t}return e}}class kpe{first;second;constructor(e,t){this.first=e,this.second=t}copy(){return new kpe(this.first,this.second)}}class l8{constructor(e=""){this._name=e}id(){return this._id}name(){return this._name}setName(e){this._name=e}context(){return this._context}setContext(e){this._context=e}value(){return this._value}setValue(e){this._value=e}plus(e){return new Id(this,e)}minus(e){return new Id(this,typeof e==="number"?-e:[-1,e])}multiply(e){return new Id([e,this])}divide(e){return new Id([1/e,this])}toJSON(){return{name:this._name,value:this._value}}toString(){return this._context+"["+this._name+":"+this._value+"]"}_name;_value=0;_context=null;_id=ZBo++}var ZBo=0;class Id{constructor(){let e=e9o(arguments);this._terms=e.terms,this._constant=e.constant}terms(){return this._terms}constant(){return this._constant}value(){let e=this._constant;for(let t=0,n=this._terms.size();t<n;t++){let o=this._terms.itemAt(t);e+=o.first.value()*o.second}return e}plus(e){return new Id(this,e)}minus(e){return new Id(this,typeof e==="number"?-e:[-1,e])}multiply(e){return new Id([e,this])}divide(e){return new Id([1/e,this])}isConstant(){return this._terms.size()==0}toString(){let e=this._terms.array.map(function(t){return t.second+"*"+t.first.toString()}).join(" + ");if(!this.isConstant()&&this._constant!==0)e+=" + ";return e+=this._constant,e}_terms;_constant}function e9o(e){let t=0,n=()=>0,o=c8();for(let i=0,r=e.length;i<r;++i){let s=e[i];if(typeof s==="number")t+=s;else if(s instanceof l8)o.setDefault(s,n).second+=1;else if(s instanceof Id){t+=s.constant();let a=s.terms();for(let c=0,l=a.size();c<l;c++){let d=a.itemAt(c);o.setDefault(d.first,n).second+=d.second}}else if(s instanceof Array){if(s.length!==2)throw Error("array must have length 2");let a=s[0],c=s[1];if(typeof a!=="number")throw Error("array item 0 must be a number");if(c instanceof l8)o.setDefault(c,n).second+=a;else if(c instanceof Id){t+=c.constant()*a;let l=c.terms();for(let d=0,u=l.size();d<u;d++){let h=l.itemAt(d);o.setDefault(h.first,n).second+=h.second*a}}else throw Error("array item 1 must be a variable or expression")}else throw Error("invalid Expression argument: "+s)}return{terms:o,constant:t}}class Yl{static create(e,t,n,o=1){let i=0;return i+=Math.max(0,Math.min(1000,e*o))*1e6,i+=Math.max(0,Math.min(1000,t*o))*1000,i+=Math.max(0,Math.min(1000,n*o)),i}static required=Yl.create(1000,1000,1000);static strong=Yl.create(1,0,0);static medium=Yl.create(0,1,0);static weak=Yl.create(0,0,1);static clip(e){return Math.max(0,Math.min(Yl.required,e))}}var _0;(function(e){e[e.Le=0]="Le",e[e.Ge=1]="Ge",e[e.Eq=2]="Eq"})(_0||(_0={}));class RA{constructor(e,t,n,o=Yl.required){if(this._operator=t,this._strength=Yl.clip(o),n===void 0&&e instanceof Id)this._expression=e;else this._expression=e.minus(n)}id(){return this._id}expression(){return this._expression}op(){return this._operator}strength(){return this._strength}toString(){return this._expression.toString()+" "+["<=",">=","="][this._operator]+" 0 ("+this._strength.toString()+")"}_expression;_operator;_strength;_id=t9o++}var t9o=0;class vZ{maxIterations=1000;constructor(){}createConstraint(e,t,n,o=Yl.required){let i=new RA(e,t,n,o);return this.addConstraint(i),i}addConstraint(e){if(this._cnMap.find(e)!==void 0)throw Error("duplicate constraint");let n=this._createRow(e),{row:o,tag:i}=n,r=this._chooseSubject(o,i);if(r.type()===qc.Invalid&&o.allDummies())if(!Lpe(o.constant()))throw Error("unsatisfiable constraint");else r=i.marker;if(r.type()===qc.Invalid){if(!this._addWithArtificialVariable(o))throw Error("unsatisfiable constraint")}else o.solveFor(r),this._substitute(r,o),this._rowMap.insert(r,o);this._cnMap.insert(e,i),this._optimize(this._objective)}removeConstraint(e){let t=this._cnMap.erase(e);if(t===void 0)throw Error("unknown constraint");this._removeConstraintEffects(e,t.second);let n=t.second.marker,o=this._rowMap.erase(n);if(o===void 0){let i=this._getMarkerLeavingSymbol(n);if(i.type()===qc.Invalid)throw Error("failed to find leaving row");o=this._rowMap.erase(i),o.second.solveForEx(i,n),this._substitute(n,o.second)}this._optimize(this._objective)}hasConstraint(e){return this._cnMap.contains(e)}getConstraints(){return this._cnMap.array.map(({first:e})=>e)}addEditVariable(e,t){if(this._editMap.find(e)!==void 0)throw Error("duplicate edit variable");if(t=Yl.clip(t),t===Yl.required)throw Error("bad required strength");let o=new Id(e),i=new RA(o,_0.Eq,void 0,t);this.addConstraint(i);let s={tag:this._cnMap.find(i).second,constraint:i,constant:0};this._editMap.insert(e,s)}removeEditVariable(e){let t=this._editMap.erase(e);if(t===void 0)throw Error("unknown edit variable");this.removeConstraint(t.second.constraint)}hasEditVariable(e){return this._editMap.contains(e)}suggestValue(e,t){let n=this._editMap.find(e);if(n===void 0)throw Error("unknown edit variable");let o=this._rowMap,i=n.second,r=t-i.constant;i.constant=t;let s=i.tag.marker,a=o.find(s);if(a!==void 0){if(a.second.add(-r)<0)this._infeasibleRows.push(s);this._dualOptimize();return}let c=i.tag.other;if(a=o.find(c),a!==void 0){if(a.second.add(r)<0)this._infeasibleRows.push(c);this._dualOptimize();return}for(let l=0,d=o.size();l<d;++l){let u=o.itemAt(l),h=u.second,A=h.coefficientFor(s);if(A!==0&&h.add(r*A)<0&&u.first.type()!==qc.External)this._infeasibleRows.push(u.first)}this._dualOptimize()}updateVariables(){let e=this._varMap,t=this._rowMap;for(let n=0,o=e.size();n<o;++n){let i=e.itemAt(n),r=t.find(i.second);if(r!==void 0)i.first.setValue(r.second.constant());else i.first.setValue(0)}}_getVarSymbol(e){let t=()=>this._makeSymbol(qc.External);return this._varMap.setDefault(e,t).second}_createRow(e){let t=e.expression(),n=new Fpe(t.constant()),o=t.terms();for(let a=0,c=o.size();a<c;++a){let l=o.itemAt(a);if(!Lpe(l.second)){let d=this._getVarSymbol(l.first),u=this._rowMap.find(d);if(u!==void 0)n.insertRow(u.second,l.second);else n.insertSymbol(d,l.second)}}let i=this._objective,r=e.strength(),s={marker:d8,other:d8};switch(e.op()){case _0.Le:case _0.Ge:{let a=e.op()===_0.Le?1:-1,c=this._makeSymbol(qc.Slack);if(s.marker=c,n.insertSymbol(c,a),r<Yl.required){let l=this._makeSymbol(qc.Error);s.other=l,n.insertSymbol(l,-a),i.insertSymbol(l,r)}break}case _0.Eq:{if(r<Yl.required){let a=this._makeSymbol(qc.Error),c=this._makeSymbol(qc.Error);s.marker=a,s.other=c,n.insertSymbol(a,-1),n.insertSymbol(c,1),i.insertSymbol(a,r),i.insertSymbol(c,r)}else{let a=this._makeSymbol(qc.Dummy);s.marker=a,n.insertSymbol(a)}break}}if(n.constant()<0)n.reverseSign();return{row:n,tag:s}}_chooseSubject(e,t){let n=e.cells();for(let i=0,r=n.size();i<r;++i){let s=n.itemAt(i);if(s.first.type()===qc.External)return s.first}let o=t.marker.type();if(o===qc.Slack||o===qc.Error){if(e.coefficientFor(t.marker)<0)return t.marker}if(o=t.other.type(),o===qc.Slack||o===qc.Error){if(e.coefficientFor(t.other)<0)return t.other}return d8}_addWithArtificialVariable(e){let t=this._makeSymbol(qc.Slack);this._rowMap.insert(t,e.copy()),this._artificial=e.copy(),this._optimize(this._artificial);let n=Lpe(this._artificial.constant());this._artificial=null;let o=this._rowMap.erase(t);if(o!==void 0){let r=o.second;if(r.isConstant())return n;let s=this._anyPivotableSymbol(r);if(s.type()===qc.Invalid)return!1;r.solveForEx(t,s),this._substitute(s,r),this._rowMap.insert(s,r)}let i=this._rowMap;for(let r=0,s=i.size();r<s;++r)i.itemAt(r).second.removeSymbol(t);return this._objective.removeSymbol(t),n}_substitute(e,t){let n=this._rowMap;for(let o=0,i=n.size();o<i;++o){let r=n.itemAt(o);if(r.second.substitute(e,t),r.second.constant()<0&&r.first.type()!==qc.External)this._infeasibleRows.push(r.first)}if(this._objective.substitute(e,t),this._artificial)this._artificial.substitute(e,t)}_optimize(e){let t=0;while(t<this.maxIterations){let n=this._getEnteringSymbol(e);if(n.type()===qc.Invalid)return;let o=this._getLeavingSymbol(n);if(o.type()===qc.Invalid)throw Error("the objective is unbounded");let i=this._rowMap.erase(o).second;i.solveForEx(o,n),this._substitute(n,i),this._rowMap.insert(n,i),t++}throw Error("solver iterations exceeded")}_dualOptimize(){let e=this._rowMap,t=this._infeasibleRows;while(t.length!==0){let n=t.pop(),o=e.find(n);if(o!==void 0&&o.second.constant()<0){let i=this._getDualEnteringSymbol(o.second);if(i.type()===qc.Invalid)throw Error("dual optimize failed");let r=o.second;e.erase(n),r.solveForEx(n,i),this._substitute(i,r),e.insert(i,r)}}}_getEnteringSymbol(e){let t=e.cells();for(let n=0,o=t.size();n<o;++n){let i=t.itemAt(n),r=i.first;if(i.second<0&&r.type()!==qc.Dummy)return r}return d8}_getDualEnteringSymbol(e){let t=Number.MAX_VALUE,n=d8,o=e.cells();for(let i=0,r=o.size();i<r;++i){let s=o.itemAt(i),{first:a,second:c}=s;if(c>0&&a.type()!==qc.Dummy){let d=this._objective.coefficientFor(a)/c;if(d<t)t=d,n=a}}return n}_getLeavingSymbol(e){let t=Number.MAX_VALUE,n=d8,o=this._rowMap;for(let i=0,r=o.size();i<r;++i){let s=o.itemAt(i),a=s.first;if(a.type()!==qc.External){let c=s.second,l=c.coefficientFor(e);if(l<0){let d=-c.constant()/l;if(d<t)t=d,n=a}}}return n}_getMarkerLeavingSymbol(e){let t=Number.MAX_VALUE,n=t,o=t,i=d8,r=i,s=i,a=i,c=this._rowMap;for(let l=0,d=c.size();l<d;++l){let u=c.itemAt(l),h=u.second,A=h.coefficientFor(e);if(A===0)continue;let m=u.first;if(m.type()===qc.External)a=m;else if(A<0){let p=-h.constant()/A;if(p<n)n=p,r=m}else{let p=h.constant()/A;if(p<o)o=p,s=m}}if(r!==i)return r;if(s!==i)return s;return a}_removeConstraintEffects(e,t){if(t.marker.type()===qc.Error)this._removeMarkerEffects(t.marker,e.strength());if(t.other.type()===qc.Error)this._removeMarkerEffects(t.other,e.strength())}_removeMarkerEffects(e,t){let n=this._rowMap.find(e);if(n!==void 0)this._objective.insertRow(n.second,-t);else this._objective.insertSymbol(e,-t)}_anyPivotableSymbol(e){let t=e.cells();for(let n=0,o=t.size();n<o;++n){let i=t.itemAt(n),r=i.first.type();if(r===qc.Slack||r===qc.Error)return i.first}return d8}_makeSymbol(e){return new mDe(e,this._idTick++)}_cnMap=n9o();_rowMap=o9o();_varMap=i9o();_editMap=r9o();_infeasibleRows=[];_objective=new Fpe;_artificial=null;_idTick=0}function Lpe(e){let t=0.00000001;return e<0?-e<t:e<t}function n9o(){return c8()}function o9o(){return c8()}function i9o(){return c8()}function r9o(){return c8()}var qc;(function(e){e[e.Invalid=0]="Invalid",e[e.External=1]="External",e[e.Slack=2]="Slack",e[e.Error=3]="Error",e[e.Dummy=4]="Dummy"})(qc||(qc={}));class mDe{constructor(e,t){this._id=t,this._type=e}id(){return this._id}type(){return this._type}_id;_type}var d8=new mDe(qc.Invalid,-1);class Fpe{constructor(e=0){this._constant=e}cells(){return this._cellMap}constant(){return this._constant}isConstant(){return this._cellMap.empty()}allDummies(){let e=this._cellMap;for(let t=0,n=e.size();t<n;++t)if(e.itemAt(t).first.type()!==qc.Dummy)return!1;return!0}copy(){let e=new Fpe(this._constant);return e._cellMap=this._cellMap.copy(),e}add(e){return this._constant+=e}insertSymbol(e,t=1){let n=this._cellMap.setDefault(e,()=>0);if(Lpe(n.second+=t))this._cellMap.erase(e)}insertRow(e,t=1){this._constant+=e._constant*t;let n=e._cellMap;for(let o=0,i=n.size();o<i;++o){let r=n.itemAt(o);this.insertSymbol(r.first,r.second*t)}}removeSymbol(e){this._cellMap.erase(e)}reverseSign(){this._constant=-this._constant;let e=this._cellMap;for(let t=0,n=e.size();t<n;++t){let o=e.itemAt(t);o.second=-o.second}}solveFor(e){let t=this._cellMap,o=-1/t.erase(e).second;this._constant*=o;for(let i=0,r=t.size();i<r;++i)t.itemAt(i).second*=o}solveForEx(e,t){this.insertSymbol(e,-1),this.solveFor(t)}coefficientFor(e){let t=this._cellMap.find(e);return t!==void 0?t.second:0}substitute(e,t){let n=this._cellMap.erase(e);if(n!==void 0)this.insertRow(t,n.second)}_cellMap=c8();_constant}var Lin=Rt(l0(),1);Yo();Yo();Gt();Gt();Gt();var Yin=Rt(l0(),1),GYe=Rt(lo(),1),Uin=Rt(lo(),1);Gt();Yo();Gt();pn();Yo();vp();wp();pn();Yo();pn();Gt();var NSt=()=>({minX:Number.POSITIVE_INFINITY,maxX:Number.NEGATIVE_INFINITY,minY:Number.POSITIVE_INFINITY,maxY:Number.NEGATIVE_INFINITY}),ok=(e,t,n)=>{e.minX=Math.min(e.minX,t),e.maxX=Math.max(e.maxX,t),e.minY=Math.min(e.minY,n),e.maxY=Math.max(e.maxY,n)},nk=(e,t,n,o,i)=>{ok(e,t-o/2,n-i/2),ok(e,t+o/2,n+i/2)},RSt=(e)=>Number.isFinite(e.minX)&&Number.isFinite(e.maxX)&&Number.isFinite(e.minY)&&Number.isFinite(e.maxY),s9o=(e)=>e.find((t)=>t.type==="pcb_component"),a9o=(e,t)=>{if(!t)return[];return e.filter((n)=>("pcb_component_id"in n)&&n.pcb_component_id===t)},c9o=(e)=>{switch(e){case"from_left":case"from_x_neg":return"left";case"from_right":case"from_x_pos":return"right";case"from_top":case"from_y_pos":case"from_front":return"top";case"from_bottom":case"from_y_neg":case"from_back":return"bottom";case"from_above":case"from_z_pos":return"above";case"from_below":case"from_z_neg":return"below";default:return}},l9o=(e)=>{if(!("insertion_direction"in e))return;return typeof e.insertion_direction==="string"?e.insertion_direction:void 0},d9o=(e,t)=>{let n=NSt();for(let o of e){if(o.type==="pcb_smtpad"){if("points"in o)for(let i of o.points)ok(n,i.x,i.y);else if("x"in o&&"y"in o&&"width"in o&&"height"in o)nk(n,o.x,o.y,o.width,o.height);else if("x"in o&&"y"in o&&"radius"in o)nk(n,o.x,o.y,o.radius*2,o.radius*2);continue}if(o.type==="pcb_plated_hole"){if("outer_width"in o&&"outer_height"in o)nk(n,o.x,o.y,o.outer_width,o.outer_height);else if("outer_diameter"in o)nk(n,o.x,o.y,o.outer_diameter,o.outer_diameter);continue}if(o.type==="pcb_hole"){if("hole_diameter"in o)nk(n,o.x,o.y,o.hole_diameter,o.hole_diameter);else if("hole_width"in o&&"hole_height"in o)nk(n,o.x,o.y,o.hole_width,o.hole_height);continue}if(o.type==="pcb_silkscreen_path"){for(let i of o.route)ok(n,i.x,i.y);continue}if(o.type==="pcb_component")nk(n,o.center.x,o.center.y,o.width,o.height)}return RSt(n)?n:t},u9o=(e,t)=>{let n=NSt();for(let o of e){if(o.type==="pcb_smtpad"){if("x"in o&&"y"in o)ok(n,o.x,o.y);if("points"in o)for(let i of o.points)ok(n,i.x,i.y)}if(o.type==="pcb_plated_hole"&&o.pcb_port_id)ok(n,o.x,o.y)}return RSt(n)?n:t},QSt=(e)=>{let t=s9o(e);if(!t)return{x:0,y:0,side:"bottom"};let n={minX:t.center.x-t.width/2,maxX:t.center.x+t.width/2,minY:t.center.y-t.height/2,maxY:t.center.y+t.height/2},o=a9o(e,t.pcb_component_id),i=d9o(o,n),r=u9o(o,n),s={left:r.minX-i.minX,right:i.maxX-r.maxX,top:i.maxY-r.maxY,bottom:r.minY-i.minY},a=Object.entries(s).sort((m,p)=>p[1]-m[1])[0]?.[0]??"bottom",c=c9o(l9o(t))??a,l=i.maxX-i.minX,d=i.maxY-i.minY,u=Math.max(0.4,Math.min(l,d)*0.08),h=(i.minX+i.maxX)/2,A=(i.minY+i.maxY)/2;if(c==="above"||c==="below")return{x:h,y:A,side:c,pcbComponentId:t.pcb_component_id};if(c==="top")return{x:h,y:i.maxY+u,side:c,pcbComponentId:t.pcb_component_id};if(c==="left")return{x:i.minX-u,y:A,side:c,pcbComponentId:t.pcb_component_id};if(c==="right")return{x:i.maxX+u,y:A,side:c,pcbComponentId:t.pcb_component_id};return{x:h,y:i.minY-u,side:"bottom",pcbComponentId:t.pcb_component_id}};Gt();wp();wp();pn();pn();pn();var s9t=Rt(Hpe(),1);var POt=Rt(Hpe(),1),MOt=Rt(Hpe(),1),{create:h9o,defineProperty:xRe,getOwnPropertyDescriptor:m9o,getOwnPropertyNames:TBt,getPrototypeOf:p9o}=Object,A9o=Object.prototype.hasOwnProperty,am=(e,t)=>function(){return t||(0,e[TBt(e)[0]])((t={exports:{}}).exports,t),t.exports},Vge=(e,t)=>{for(var n in t)xRe(e,n,{get:t[n],enumerable:!0})},CRe=(e,t,n)=>(n=e!=null?h9o(p9o(e)):{},((o,i,r,s)=>{if(i&&typeof i=="object"||typeof i=="function")for(let a of TBt(i))A9o.call(o,a)||a===r||xRe(o,a,{get:()=>i[a],enumerable:!(s=m9o(i,a))||s.enumerable});return o})(!t&&e&&e.__esModule?n:xRe(n,"default",{value:e,enumerable:!0}),e)),_9o=am({"node_modules/is-buffer/index.js"(e,t){function n(o){return!!o.constructor&&typeof o.constructor.isBuffer=="function"&&o.constructor.isBuffer(o)}t.exports=function(o){return o!=null&&(n(o)||function(i){return typeof i.readFloatLE=="function"&&typeof i.slice=="function"&&n(i.slice(0,0))}(o)||!!o._isBuffer)}}}),g9o=am({"node_modules/kind-of/index.js"(e,t){var n=_9o(),o=Object.prototype.toString;t.exports=function(i){if(i===void 0)return"undefined";if(i===null)return"null";if(i===!0||i===!1||i instanceof Boolean)return"boolean";if(typeof i=="string"||i instanceof String)return"string";if(typeof i=="number"||i instanceof Number)return"number";if(typeof i=="function"||i instanceof Function)return"function";if(Array.isArray!==void 0&&Array.isArray(i))return"array";if(i instanceof RegExp)return"regexp";if(i instanceof Date)return"date";var r=o.call(i);return r==="[object RegExp]"?"regexp":r==="[object Date]"?"date":r==="[object Arguments]"?"arguments":r==="[object Error]"?"error":n(i)?"buffer":r==="[object Set]"?"set":r==="[object WeakSet]"?"weakset":r==="[object Map]"?"map":r==="[object WeakMap]"?"weakmap":r==="[object Symbol]"?"symbol":r==="[object Int8Array]"?"int8array":r==="[object Uint8Array]"?"uint8array":r==="[object Uint8ClampedArray]"?"uint8clampedarray":r==="[object Int16Array]"?"int16array":r==="[object Uint16Array]"?"uint16array":r==="[object Int32Array]"?"int32array":r==="[object Uint32Array]"?"uint32array":r==="[object Float32Array]"?"float32array":r==="[object Float64Array]"?"float64array":"object"}}}),f9o=am({"node_modules/rename-keys/index.js"(e,t){(function(){function n(o,i){if(typeof i!="function")return o;var r={};for(var s in o)Object.prototype.hasOwnProperty.call(o,s)&&(r[i(s,o[s])||s]=o[s]);return r}t!==void 0&&t.exports?t.exports=n:typeof define=="function"&&define.amd?define([],function(){return n}):window.rename=n})()}}),y9o=am({"node_modules/deep-rename-keys/index.js"(e,t){var n=g9o(),o=f9o();t.exports=function i(r,s){var a=n(r);if(a!=="object"&&a!=="array")throw Error("expected an object");var c=[];for(var l in a==="object"&&(r=o(r,s),c={}),r)if(r.hasOwnProperty(l)){var d=r[l];n(d)==="object"||n(d)==="array"?c[l]=i(d,s):c[l]=d}return c}}}),x9o=am({"node_modules/xml-reader/node_modules/eventemitter3/index.js"(e,t){var n=Object.prototype.hasOwnProperty,o="~";function i(){}function r(a,c,l){this.fn=a,this.context=c,this.once=l||!1}function s(){this._events=new i,this._eventsCount=0}Object.create&&(i.prototype=Object.create(null),new i().__proto__||(o=!1)),s.prototype.eventNames=function(){var a,c,l=[];if(this._eventsCount===0)return l;for(c in a=this._events)n.call(a,c)&&l.push(o?c.slice(1):c);return Object.getOwnPropertySymbols?l.concat(Object.getOwnPropertySymbols(a)):l},s.prototype.listeners=function(a,c){var l=o?o+a:a,d=this._events[l];if(c)return!!d;if(!d)return[];if(d.fn)return[d.fn];for(var u=0,h=d.length,A=Array(h);u<h;u++)A[u]=d[u].fn;return A},s.prototype.emit=function(a,c,l,d,u,h){var A=o?o+a:a;if(!this._events[A])return!1;var m,p,g=this._events[A],_=arguments.length;if(g.fn){switch(g.once&&this.removeListener(a,g.fn,void 0,!0),_){case 1:return g.fn.call(g.context),!0;case 2:return g.fn.call(g.context,c),!0;case 3:return g.fn.call(g.context,c,l),!0;case 4:return g.fn.call(g.context,c,l,d),!0;case 5:return g.fn.call(g.context,c,l,d,u),!0;case 6:return g.fn.call(g.context,c,l,d,u,h),!0}for(p=1,m=Array(_-1);p<_;p++)m[p-1]=arguments[p];g.fn.apply(g.context,m)}else{var f,y=g.length;for(p=0;p<y;p++)switch(g[p].once&&this.removeListener(a,g[p].fn,void 0,!0),_){case 1:g[p].fn.call(g[p].context);break;case 2:g[p].fn.call(g[p].context,c);break;case 3:g[p].fn.call(g[p].context,c,l);break;case 4:g[p].fn.call(g[p].context,c,l,d);break;default:if(!m)for(f=1,m=Array(_-1);f<_;f++)m[f-1]=arguments[f];g[p].fn.apply(g[p].context,m)}}return!0},s.prototype.on=function(a,c,l){var d=new r(c,l||this),u=o?o+a:a;return this._events[u]?this._events[u].fn?this._events[u]=[this._events[u],d]:this._events[u].push(d):(this._events[u]=d,this._eventsCount++),this},s.prototype.once=function(a,c,l){var d=new r(c,l||this,!0),u=o?o+a:a;return this._events[u]?this._events[u].fn?this._events[u]=[this._events[u],d]:this._events[u].push(d):(this._events[u]=d,this._eventsCount++),this},s.prototype.removeListener=function(a,c,l,d){var u=o?o+a:a;if(!this._events[u])return this;if(!c)return--this._eventsCount===0?this._events=new i:delete this._events[u],this;var h=this._events[u];if(h.fn)h.fn!==c||d&&!h.once||l&&h.context!==l||(--this._eventsCount===0?this._events=new i:delete this._events[u]);else{for(var A=0,m=[],p=h.length;A<p;A++)(h[A].fn!==c||d&&!h[A].once||l&&h[A].context!==l)&&m.push(h[A]);m.length?this._events[u]=m.length===1?m[0]:m:--this._eventsCount===0?this._events=new i:delete this._events[u]}return this},s.prototype.removeAllListeners=function(a){var c;return a?(c=o?o+a:a,this._events[c]&&(--this._eventsCount===0?this._events=new i:delete this._events[c])):(this._events=new i,this._eventsCount=0),this},s.prototype.off=s.prototype.removeListener,s.prototype.addListener=s.prototype.on,s.prototype.setMaxListeners=function(){return this},s.prefixed=o,s.EventEmitter=s,t!==void 0&&(t.exports=s)}}),C9o=am({"node_modules/xml-lexer/node_modules/eventemitter3/index.js"(e,t){var n=Object.prototype.hasOwnProperty,o="~";function i(){}function r(a,c,l){this.fn=a,this.context=c,this.once=l||!1}function s(){this._events=new i,this._eventsCount=0}Object.create&&(i.prototype=Object.create(null),new i().__proto__||(o=!1)),s.prototype.eventNames=function(){var a,c,l=[];if(this._eventsCount===0)return l;for(c in a=this._events)n.call(a,c)&&l.push(o?c.slice(1):c);return Object.getOwnPropertySymbols?l.concat(Object.getOwnPropertySymbols(a)):l},s.prototype.listeners=function(a,c){var l=o?o+a:a,d=this._events[l];if(c)return!!d;if(!d)return[];if(d.fn)return[d.fn];for(var u=0,h=d.length,A=Array(h);u<h;u++)A[u]=d[u].fn;return A},s.prototype.emit=function(a,c,l,d,u,h){var A=o?o+a:a;if(!this._events[A])return!1;var m,p,g=this._events[A],_=arguments.length;if(g.fn){switch(g.once&&this.removeListener(a,g.fn,void 0,!0),_){case 1:return g.fn.call(g.context),!0;case 2:return g.fn.call(g.context,c),!0;case 3:return g.fn.call(g.context,c,l),!0;case 4:return g.fn.call(g.context,c,l,d),!0;case 5:return g.fn.call(g.context,c,l,d,u),!0;case 6:return g.fn.call(g.context,c,l,d,u,h),!0}for(p=1,m=Array(_-1);p<_;p++)m[p-1]=arguments[p];g.fn.apply(g.context,m)}else{var f,y=g.length;for(p=0;p<y;p++)switch(g[p].once&&this.removeListener(a,g[p].fn,void 0,!0),_){case 1:g[p].fn.call(g[p].context);break;case 2:g[p].fn.call(g[p].context,c);break;case 3:g[p].fn.call(g[p].context,c,l);break;case 4:g[p].fn.call(g[p].context,c,l,d);break;default:if(!m)for(f=1,m=Array(_-1);f<_;f++)m[f-1]=arguments[f];g[p].fn.apply(g[p].context,m)}}return!0},s.prototype.on=function(a,c,l){var d=new r(c,l||this),u=o?o+a:a;return this._events[u]?this._events[u].fn?this._events[u]=[this._events[u],d]:this._events[u].push(d):(this._events[u]=d,this._eventsCount++),this},s.prototype.once=function(a,c,l){var d=new r(c,l||this,!0),u=o?o+a:a;return this._events[u]?this._events[u].fn?this._events[u]=[this._events[u],d]:this._events[u].push(d):(this._events[u]=d,this._eventsCount++),this},s.prototype.removeListener=function(a,c,l,d){var u=o?o+a:a;if(!this._events[u])return this;if(!c)return--this._eventsCount===0?this._events=new i:delete this._events[u],this;var h=this._events[u];if(h.fn)h.fn!==c||d&&!h.once||l&&h.context!==l||(--this._eventsCount===0?this._events=new i:delete this._events[u]);else{for(var A=0,m=[],p=h.length;A<p;A++)(h[A].fn!==c||d&&!h[A].once||l&&h[A].context!==l)&&m.push(h[A]);m.length?this._events[u]=m.length===1?m[0]:m:--this._eventsCount===0?this._events=new i:delete this._events[u]}return this},s.prototype.removeAllListeners=function(a){var c;return a?(c=o?o+a:a,this._events[c]&&(--this._eventsCount===0?this._events=new i:delete this._events[c])):(this._events=new i,this._eventsCount=0),this},s.prototype.off=s.prototype.removeListener,s.prototype.addListener=s.prototype.on,s.prototype.setMaxListeners=function(){return this},s.prefixed=o,s.EventEmitter=s,t!==void 0&&(t.exports=s)}}),I9o=am({"node_modules/xml-lexer/dist/lexer.js"(e,t){function n(l,d,u){return d in l?Object.defineProperty(l,d,{value:u,enumerable:!0,configurable:!0,writable:!0}):l[d]=u,l}var o=C9o(),i=function(){},r={data:"state-data",cdata:"state-cdata",tagBegin:"state-tag-begin",tagName:"state-tag-name",tagEnd:"state-tag-end",attributeNameStart:"state-attribute-name-start",attributeName:"state-attribute-name",attributeNameEnd:"state-attribute-name-end",attributeValueBegin:"state-attribute-value-begin",attributeValue:"state-attribute-value"},s={lt:"action-lt",gt:"action-gt",space:"action-space",equal:"action-equal",quote:"action-quote",slash:"action-slash",char:"action-char",error:"action-error"},a={text:"text",openTag:"open-tag",closeTag:"close-tag",attributeName:"attribute-name",attributeValue:"attribute-value"},c={" ":s.space,"\t":s.space,"\n":s.space,"\r":s.space,"<":s.lt,">":s.gt,'"':s.quote,"'":s.quote,"=":s.equal,"/":s.slash};t.exports={State:r,Action:s,Type:a,create:function(l){var d,u,h,A,m,p,g,_,f,y;l=Object.assign({debug:!1},l);var x=new o,C=r.data,I="",b="",P="",E="",B="",w="",T=function(N,F){if(b[0]!=="?"&&b[0]!=="!"){var H={type:N,value:F};l.debug&&console.log("emit:",H),x.emit("data",H)}};x.stateMachine=(n(y={},r.data,(n(d={},s.lt,function(){I.trim()&&T(a.text,I),b="",B=!1,C=r.tagBegin}),n(d,s.char,function(N){I+=N}),d)),n(y,r.cdata,n({},s.char,function(N){(I+=N).substr(-3)==="]]>"&&(T(a.text,I.slice(0,-3)),I="",C=r.data)})),n(y,r.tagBegin,(n(u={},s.space,i),n(u,s.char,function(N){b=N,C=r.tagName}),n(u,s.slash,function(){b="",B=!0}),u)),n(y,r.tagName,(n(h={},s.space,function(){B?C=r.tagEnd:(C=r.attributeNameStart,T(a.openTag,b))}),n(h,s.gt,function(){T(B?a.closeTag:a.openTag,b),I="",C=r.data}),n(h,s.slash,function(){C=r.tagEnd,T(a.openTag,b)}),n(h,s.char,function(N){(b+=N)==="![CDATA["&&(C=r.cdata,I="",b="")}),h)),n(y,r.tagEnd,(n(A={},s.gt,function(){T(a.closeTag,b),I="",C=r.data}),n(A,s.char,i),A)),n(y,r.attributeNameStart,(n(m={},s.char,function(N){P=N,C=r.attributeName}),n(m,s.gt,function(){I="",C=r.data}),n(m,s.space,i),n(m,s.slash,function(){B=!0,C=r.tagEnd}),m)),n(y,r.attributeName,(n(p={},s.space,function(){C=r.attributeNameEnd}),n(p,s.equal,function(){T(a.attributeName,P),C=r.attributeValueBegin}),n(p,s.gt,function(){E="",T(a.attributeName,P),T(a.attributeValue,E),I="",C=r.data}),n(p,s.slash,function(){B=!0,E="",T(a.attributeName,P),T(a.attributeValue,E),C=r.tagEnd}),n(p,s.char,function(N){P+=N}),p)),n(y,r.attributeNameEnd,(n(g={},s.space,i),n(g,s.equal,function(){T(a.attributeName,P),C=r.attributeValueBegin}),n(g,s.gt,function(){E="",T(a.attributeName,P),T(a.attributeValue,E),I="",C=r.data}),n(g,s.char,function(N){E="",T(a.attributeName,P),T(a.attributeValue,E),P=N,C=r.attributeName}),g)),n(y,r.attributeValueBegin,(n(_={},s.space,i),n(_,s.quote,function(N){w=N,E="",C=r.attributeValue}),n(_,s.gt,function(){T(a.attributeValue,E=""),I="",C=r.data}),n(_,s.char,function(N){w="",E=N,C=r.attributeValue}),_)),n(y,r.attributeValue,(n(f={},s.space,function(N){w?E+=N:(T(a.attributeValue,E),C=r.attributeNameStart)}),n(f,s.quote,function(N){w===N?(T(a.attributeValue,E),C=r.attributeNameStart):E+=N}),n(f,s.gt,function(N){w?E+=N:(T(a.attributeValue,E),I="",C=r.data)}),n(f,s.slash,function(N){w?E+=N:(T(a.attributeValue,E),B=!0,C=r.tagEnd)}),n(f,s.char,function(N){E+=N}),f)),y);var Q=function(N){l.debug&&console.log(C,N);var F=x.stateMachine[C],H=F[function(z){return c[z]||s.char}(N)]||F[s.error]||F[s.char];H(N)};return x.write=function(N){for(var F=N.length,H=0;H<F;H++)Q(N[H])},x}}}}),b9o=am({"node_modules/xml-reader/dist/reader.js"(e,t){var n=x9o(),o=I9o(),i=o.Type,r={element:"element",text:"text"},s=function(c){return Object.assign({name:"",type:r.element,value:"",parent:null,attributes:{},children:[]},c)},a=function(c){c=Object.assign({stream:!1,parentNodes:!0,doneEvent:"done",tagPrefix:"tag:",emitTopLevelOnly:!1,debug:!1},c);var l=void 0,d=void 0,u=void 0,h=void 0,A=new n,m=function(p){switch(p.type){case i.openTag:if(u===null)(u=d).name=p.value;else{var g=s({name:p.value,parent:u});u.children.push(g),u=g}break;case i.closeTag:var _=u.parent;if(c.parentNodes||(u.parent=null),u.name!==p.value)break;c.stream&&_===d&&(d.children=[],u.parent=null),c.emitTopLevelOnly&&_!==d||(A.emit(c.tagPrefix+u.name,u),A.emit("tag",u.name,u)),u===d&&(l.removeAllListeners("data"),A.emit(c.doneEvent,u),d=null),u=_;break;case i.text:u&&u.children.push(s({type:r.text,value:p.value,parent:c.parentNodes?u:null}));break;case i.attributeName:h=p.value,u.attributes[h]="";break;case i.attributeValue:u.attributes[h]=p.value}};return A.reset=function(){(l=o.create({debug:c.debug})).on("data",m),d=s(),u=null,h="",A.parse=l.write},A.reset(),A};t.exports={parseSync:function(c,l){l=Object.assign({},l,{stream:!1,tagPrefix:":"});var d=a(l),u=void 0;return d.on("done",function(h){u=h}),d.parse(c),u},create:a,NodeType:r}}}),Uge=am({"node_modules/binary-search-bounds/search-bounds.js"(e,t){function n(c,l,d,u,h){for(var A=h+1;u<=h;){var m=u+h>>>1,p=c[m];(d!==void 0?d(p,l):p-l)>=0?(A=m,h=m-1):u=m+1}return A}function o(c,l,d,u,h){for(var A=h+1;u<=h;){var m=u+h>>>1,p=c[m];(d!==void 0?d(p,l):p-l)>0?(A=m,h=m-1):u=m+1}return A}function i(c,l,d,u,h){for(var A=u-1;u<=h;){var m=u+h>>>1,p=c[m];(d!==void 0?d(p,l):p-l)<0?(A=m,u=m+1):h=m-1}return A}function r(c,l,d,u,h){for(var A=u-1;u<=h;){var m=u+h>>>1,p=c[m];(d!==void 0?d(p,l):p-l)<=0?(A=m,u=m+1):h=m-1}return A}function s(c,l,d,u,h){for(;u<=h;){var A=u+h>>>1,m=c[A],p=d!==void 0?d(m,l):m-l;if(p===0)return A;p<=0?u=A+1:h=A-1}return-1}function a(c,l,d,u,h,A){return typeof d=="function"?A(c,l,d,u===void 0?0:0|u,h===void 0?c.length-1:0|h):A(c,l,void 0,d===void 0?0:0|d,u===void 0?c.length-1:0|u)}t.exports={ge:function(c,l,d,u,h){return a(c,l,d,u,h,n)},gt:function(c,l,d,u,h){return a(c,l,d,u,h,o)},lt:function(c,l,d,u,h){return a(c,l,d,u,h,i)},le:function(c,l,d,u,h){return a(c,l,d,u,h,r)},eq:function(c,l,d,u,h){return a(c,l,d,u,h,s)}}}}),Nke=am({"node_modules/two-product/two-product.js"(e,t){t.exports=function(o,i,r){var s=o*i,a=n*o,c=a-(a-o),l=o-c,d=n*i,u=d-(d-i),h=i-u,A=l*h-(s-c*u-l*u-c*h);if(r)return r[0]=A,r[1]=s,r;return[A,s]};var n=+(Math.pow(2,27)+1)}}),DBt=am({"node_modules/robust-sum/robust-sum.js"(e,t){t.exports=function(n,o){var i=0|n.length,r=0|o.length;if(i===1&&r===1)return function(P,E){var B=P+E,w=B-P,T=B-w,Q=E-w,N=P-T,F=N+Q;if(F)return[F,B];return[B]}(n[0],o[0]);var s,a,c=Array(i+r),l=0,d=0,u=0,h=Math.abs,A=n[d],m=h(A),p=o[u],g=h(p);m<g?(a=A,(d+=1)<i&&(m=h(A=n[d]))):(a=p,(u+=1)<r&&(g=h(p=o[u]))),d<i&&m<g||u>=r?(s=A,(d+=1)<i&&(m=h(A=n[d]))):(s=p,(u+=1)<r&&(g=h(p=o[u])));var _,f,y=s+a,x=y-s,C=a-x,I=C,b=y;for(;d<i&&u<r;)m<g?(s=A,(d+=1)<i&&(m=h(A=n[d]))):(s=p,(u+=1)<r&&(g=h(p=o[u]))),(C=(a=I)-(x=(y=s+a)-s))&&(c[l++]=C),I=b-((_=b+y)-(f=_-b))+(y-f),b=_;for(;d<i;)(C=(a=I)-(x=(y=(s=A)+a)-s))&&(c[l++]=C),I=b-((_=b+y)-(f=_-b))+(y-f),b=_,(d+=1)<i&&(A=n[d]);for(;u<r;)(C=(a=I)-(x=(y=(s=p)+a)-s))&&(c[l++]=C),I=b-((_=b+y)-(f=_-b))+(y-f),b=_,(u+=1)<r&&(p=o[u]);return I&&(c[l++]=I),b&&(c[l++]=b),l||(c[l++]=0),c.length=l,c}}}),S9o=am({"node_modules/two-sum/two-sum.js"(e,t){t.exports=function(n,o,i){var r=n+o,s=r-n,a=o-s,c=n-(r-s);if(i)return i[0]=c+a,i[1]=r,i;return[c+a,r]}}}),NBt=am({"node_modules/robust-scale/robust-scale.js"(e,t){var n=Nke(),o=S9o();t.exports=function(i,r){var s=i.length;if(s===1){var a=n(i[0],r);return a[0]?a:[a[1]]}var c=Array(2*s),l=[0.1,0.1],d=[0.1,0.1],u=0;n(i[0],r,l),l[0]&&(c[u++]=l[0]);for(var h=1;h<s;++h){n(i[h],r,d);var A=l[1];o(A,d[0],l),l[0]&&(c[u++]=l[0]);var m=d[1],p=l[1],g=m+p,_=p-(g-m);l[1]=g,_&&(c[u++]=_)}return l[1]&&(c[u++]=l[1]),u===0&&(c[u++]=0),c.length=u,c}}}),RBt=am({"node_modules/robust-subtract/robust-diff.js"(e,t){t.exports=function(n,o){var i=0|n.length,r=0|o.length;if(i===1&&r===1)return function(P,E){var B=P+E,w=B-P,T=B-w,Q=E-w,N=P-T,F=N+Q;if(F)return[F,B];return[B]}(n[0],-o[0]);var s,a,c=Array(i+r),l=0,d=0,u=0,h=Math.abs,A=n[d],m=h(A),p=-o[u],g=h(p);m<g?(a=A,(d+=1)<i&&(m=h(A=n[d]))):(a=p,(u+=1)<r&&(g=h(p=-o[u]))),d<i&&m<g||u>=r?(s=A,(d+=1)<i&&(m=h(A=n[d]))):(s=p,(u+=1)<r&&(g=h(p=-o[u])));var _,f,y=s+a,x=y-s,C=a-x,I=C,b=y;for(;d<i&&u<r;)m<g?(s=A,(d+=1)<i&&(m=h(A=n[d]))):(s=p,(u+=1)<r&&(g=h(p=-o[u]))),(C=(a=I)-(x=(y=s+a)-s))&&(c[l++]=C),I=b-((_=b+y)-(f=_-b))+(y-f),b=_;for(;d<i;)(C=(a=I)-(x=(y=(s=A)+a)-s))&&(c[l++]=C),I=b-((_=b+y)-(f=_-b))+(y-f),b=_,(d+=1)<i&&(A=n[d]);for(;u<r;)(C=(a=I)-(x=(y=(s=p)+a)-s))&&(c[l++]=C),I=b-((_=b+y)-(f=_-b))+(y-f),b=_,(u+=1)<r&&(p=-o[u]);return I&&(c[l++]=I),b&&(c[l++]=b),l||(c[l++]=0),c.length=l,c}}}),P9o=am({"node_modules/robust-orientation/orientation.js"(e,t){var n=Nke(),o=DBt(),i=NBt(),r=RBt();function s(p,g,_,f){return function(y,x,C){var I=p(p(g(x[1],C[0]),g(-C[1],x[0])),p(g(y[1],x[0]),g(-x[1],y[0]))),b=p(g(y[1],C[0]),g(-C[1],y[0])),P=f(I,b);return P[P.length-1]}}function a(p,g,_,f){return function(y,x,C,I){var b=p(p(_(p(g(C[1],I[0]),g(-I[1],C[0])),x[2]),p(_(p(g(x[1],I[0]),g(-I[1],x[0])),-C[2]),_(p(g(x[1],C[0]),g(-C[1],x[0])),I[2]))),p(_(p(g(x[1],I[0]),g(-I[1],x[0])),y[2]),p(_(p(g(y[1],I[0]),g(-I[1],y[0])),-x[2]),_(p(g(y[1],x[0]),g(-x[1],y[0])),I[2])))),P=p(p(_(p(g(C[1],I[0]),g(-I[1],C[0])),y[2]),p(_(p(g(y[1],I[0]),g(-I[1],y[0])),-C[2]),_(p(g(y[1],C[0]),g(-C[1],y[0])),I[2]))),p(_(p(g(x[1],C[0]),g(-C[1],x[0])),y[2]),p(_(p(g(y[1],C[0]),g(-C[1],y[0])),-x[2]),_(p(g(y[1],x[0]),g(-x[1],y[0])),C[2])))),E=f(b,P);return E[E.length-1]}}function c(p,g,_,f){return function(y,x,C,I,b){var P=p(p(p(_(p(_(p(g(I[1],b[0]),g(-b[1],I[0])),C[2]),p(_(p(g(C[1],b[0]),g(-b[1],C[0])),-I[2]),_(p(g(C[1],I[0]),g(-I[1],C[0])),b[2]))),x[3]),p(_(p(_(p(g(I[1],b[0]),g(-b[1],I[0])),x[2]),p(_(p(g(x[1],b[0]),g(-b[1],x[0])),-I[2]),_(p(g(x[1],I[0]),g(-I[1],x[0])),b[2]))),-C[3]),_(p(_(p(g(C[1],b[0]),g(-b[1],C[0])),x[2]),p(_(p(g(x[1],b[0]),g(-b[1],x[0])),-C[2]),_(p(g(x[1],C[0]),g(-C[1],x[0])),b[2]))),I[3]))),p(_(p(_(p(g(C[1],I[0]),g(-I[1],C[0])),x[2]),p(_(p(g(x[1],I[0]),g(-I[1],x[0])),-C[2]),_(p(g(x[1],C[0]),g(-C[1],x[0])),I[2]))),-b[3]),p(_(p(_(p(g(I[1],b[0]),g(-b[1],I[0])),x[2]),p(_(p(g(x[1],b[0]),g(-b[1],x[0])),-I[2]),_(p(g(x[1],I[0]),g(-I[1],x[0])),b[2]))),y[3]),_(p(_(p(g(I[1],b[0]),g(-b[1],I[0])),y[2]),p(_(p(g(y[1],b[0]),g(-b[1],y[0])),-I[2]),_(p(g(y[1],I[0]),g(-I[1],y[0])),b[2]))),-x[3])))),p(p(_(p(_(p(g(x[1],b[0]),g(-b[1],x[0])),y[2]),p(_(p(g(y[1],b[0]),g(-b[1],y[0])),-x[2]),_(p(g(y[1],x[0]),g(-x[1],y[0])),b[2]))),I[3]),p(_(p(_(p(g(x[1],I[0]),g(-I[1],x[0])),y[2]),p(_(p(g(y[1],I[0]),g(-I[1],y[0])),-x[2]),_(p(g(y[1],x[0]),g(-x[1],y[0])),I[2]))),-b[3]),_(p(_(p(g(C[1],I[0]),g(-I[1],C[0])),x[2]),p(_(p(g(x[1],I[0]),g(-I[1],x[0])),-C[2]),_(p(g(x[1],C[0]),g(-C[1],x[0])),I[2]))),y[3]))),p(_(p(_(p(g(C[1],I[0]),g(-I[1],C[0])),y[2]),p(_(p(g(y[1],I[0]),g(-I[1],y[0])),-C[2]),_(p(g(y[1],C[0]),g(-C[1],y[0])),I[2]))),-x[3]),p(_(p(_(p(g(x[1],I[0]),g(-I[1],x[0])),y[2]),p(_(p(g(y[1],I[0]),g(-I[1],y[0])),-x[2]),_(p(g(y[1],x[0]),g(-x[1],y[0])),I[2]))),C[3]),_(p(_(p(g(x[1],C[0]),g(-C[1],x[0])),y[2]),p(_(p(g(y[1],C[0]),g(-C[1],y[0])),-x[2]),_(p(g(y[1],x[0]),g(-x[1],y[0])),C[2]))),-I[3]))))),E=p(p(p(_(p(_(p(g(I[1],b[0]),g(-b[1],I[0])),C[2]),p(_(p(g(C[1],b[0]),g(-b[1],C[0])),-I[2]),_(p(g(C[1],I[0]),g(-I[1],C[0])),b[2]))),y[3]),_(p(_(p(g(I[1],b[0]),g(-b[1],I[0])),y[2]),p(_(p(g(y[1],b[0]),g(-b[1],y[0])),-I[2]),_(p(g(y[1],I[0]),g(-I[1],y[0])),b[2]))),-C[3])),p(_(p(_(p(g(C[1],b[0]),g(-b[1],C[0])),y[2]),p(_(p(g(y[1],b[0]),g(-b[1],y[0])),-C[2]),_(p(g(y[1],C[0]),g(-C[1],y[0])),b[2]))),I[3]),_(p(_(p(g(C[1],I[0]),g(-I[1],C[0])),y[2]),p(_(p(g(y[1],I[0]),g(-I[1],y[0])),-C[2]),_(p(g(y[1],C[0]),g(-C[1],y[0])),I[2]))),-b[3]))),p(p(_(p(_(p(g(C[1],b[0]),g(-b[1],C[0])),x[2]),p(_(p(g(x[1],b[0]),g(-b[1],x[0])),-C[2]),_(p(g(x[1],C[0]),g(-C[1],x[0])),b[2]))),y[3]),_(p(_(p(g(C[1],b[0]),g(-b[1],C[0])),y[2]),p(_(p(g(y[1],b[0]),g(-b[1],y[0])),-C[2]),_(p(g(y[1],C[0]),g(-C[1],y[0])),b[2]))),-x[3])),p(_(p(_(p(g(x[1],b[0]),g(-b[1],x[0])),y[2]),p(_(p(g(y[1],b[0]),g(-b[1],y[0])),-x[2]),_(p(g(y[1],x[0]),g(-x[1],y[0])),b[2]))),C[3]),_(p(_(p(g(x[1],C[0]),g(-C[1],x[0])),y[2]),p(_(p(g(y[1],C[0]),g(-C[1],y[0])),-x[2]),_(p(g(y[1],x[0]),g(-x[1],y[0])),C[2]))),-b[3])))),B=f(P,E);return B[B.length-1]}}function l(p){return(p===3?s:p===4?a:c)(o,n,i,r)}var d=l(3),u=l(4),h=[function(){return 0},function(){return 0},function(p,g){return g[0]-p[0]},function(p,g,_){var f,y=(p[1]-_[1])*(g[0]-_[0]),x=(p[0]-_[0])*(g[1]-_[1]),C=y-x;if(y>0){if(x<=0)return C;f=y+x}else{if(!(y<0))return C;if(x>=0)return C;f=-(y+x)}var I=0.00000000000000033306690738754716*f;return C>=I||C<=-I?C:d(p,g,_)},function(p,g,_,f){var y=p[0]-f[0],x=g[0]-f[0],C=_[0]-f[0],I=p[1]-f[1],b=g[1]-f[1],P=_[1]-f[1],E=p[2]-f[2],B=g[2]-f[2],w=_[2]-f[2],T=x*P,Q=C*b,N=C*I,F=y*P,H=y*b,z=x*I,Y=E*(T-Q)+B*(N-F)+w*(H-z),U=0.0000000000000007771561172376103*((Math.abs(T)+Math.abs(Q))*Math.abs(E)+(Math.abs(N)+Math.abs(F))*Math.abs(B)+(Math.abs(H)+Math.abs(z))*Math.abs(w));return Y>U||-Y>U?Y:u(p,g,_,f)}];function A(p){var g=h[p.length];return g||(g=h[p.length]=l(p.length)),g.apply(void 0,p)}function m(p,g,_,f,y,x,C){return function(I,b,P,E,B){switch(arguments.length){case 0:case 1:return 0;case 2:return f(I,b);case 3:return y(I,b,P);case 4:return x(I,b,P,E);case 5:return C(I,b,P,E,B)}for(var w=Array(arguments.length),T=0;T<arguments.length;++T)w[T]=arguments[T];return p(w)}}(function(){for(;h.length<=5;)h.push(l(h.length));t.exports=m.apply(void 0,[A].concat(h));for(var p=0;p<=5;++p)t.exports[p]=h[p]})()}}),v9o=am({"node_modules/cdt2d/lib/monotone.js"(e,t){var n=Uge(),o=P9o()[3];function i(h,A,m,p,g){this.a=h,this.b=A,this.idx=m,this.lowerIds=p,this.upperIds=g}function r(h,A,m,p){this.a=h,this.b=A,this.type=m,this.idx=p}function s(h,A){var m=h.a[0]-A.a[0]||h.a[1]-A.a[1]||h.type-A.type;return m||(h.type!==0&&(m=o(h.a,h.b,A.b))?m:h.idx-A.idx)}function a(h,A){return o(h.a,h.b,A)}function c(h,A,m,p,g){for(var _=n.lt(A,p,a),f=n.gt(A,p,a),y=_;y<f;++y){for(var x=A[y],C=x.lowerIds,I=C.length;I>1&&o(m[C[I-2]],m[C[I-1]],p)>0;)h.push([C[I-1],C[I-2],g]),I-=1;C.length=I,C.push(g);var b=x.upperIds;for(I=b.length;I>1&&o(m[b[I-2]],m[b[I-1]],p)<0;)h.push([b[I-2],b[I-1],g]),I-=1;b.length=I,b.push(g)}}function l(h,A){var m;return(m=h.a[0]<A.a[0]?o(h.a,h.b,A.a):o(A.b,A.a,h.a))?m:(m=A.b[0]<h.b[0]?o(h.a,h.b,A.b):o(A.b,A.a,h.b))||h.idx-A.idx}function d(h,A,m){var p=n.le(h,m,l),g=h[p],_=g.upperIds,f=_[_.length-1];g.upperIds=[f],h.splice(p+1,0,new i(m.a,m.b,m.idx,[f],_))}function u(h,A,m){var p=m.a;m.a=m.b,m.b=p;var g=n.eq(h,m,l),_=h[g];h[g-1].upperIds=_.upperIds,h.splice(g,1)}t.exports=function(h,A){for(var m=h.length,p=A.length,g=[],_=0;_<m;++_)g.push(new r(h[_],null,0,_));for(_=0;_<p;++_){var f=A[_],y=h[f[0]],x=h[f[1]];y[0]<x[0]?g.push(new r(y,x,2,_),new r(x,y,1,_)):y[0]>x[0]&&g.push(new r(x,y,2,_),new r(y,x,1,_))}g.sort(s);for(var C=g[0].a[0]-(1+Math.abs(g[0].a[0]))*Math.pow(2,-52),I=[new i([C,1],[C,0],-1,[],[],[],[])],b=[],P=(_=0,g.length);_<P;++_){var E=g[_],B=E.type;B===0?c(b,I,h,E.a,E.idx):B===2?d(I,h,E):u(I,h,E)}return b}}}),E9o=am({"node_modules/cdt2d/lib/triangulation.js"(e,t){var n=Uge();function o(s,a){this.stars=s,this.edges=a}t.exports=function(s,a){for(var c=Array(s),l=0;l<s;++l)c[l]=[];return new o(c,a)};var i=o.prototype;function r(s,a,c){for(var l=1,d=s.length;l<d;l+=2)if(s[l-1]===a&&s[l]===c)return s[l-1]=s[d-2],s[l]=s[d-1],void(s.length=d-2)}i.isConstraint=function(){var s=[0,0];function a(c,l){return c[0]-l[0]||c[1]-l[1]}return function(c,l){return s[0]=Math.min(c,l),s[1]=Math.max(c,l),n.eq(this.edges,s,a)>=0}}(),i.removeTriangle=function(s,a,c){var l=this.stars;r(l[s],a,c),r(l[a],c,s),r(l[c],s,a)},i.addTriangle=function(s,a,c){var l=this.stars;l[s].push(a,c),l[a].push(c,s),l[c].push(s,a)},i.opposite=function(s,a){for(var c=this.stars[a],l=1,d=c.length;l<d;l+=2)if(c[l]===s)return c[l-1];return-1},i.flip=function(s,a){var c=this.opposite(s,a),l=this.opposite(a,s);this.removeTriangle(s,a,c),this.removeTriangle(a,s,l),this.addTriangle(s,l,c),this.addTriangle(a,c,l)},i.edges=function(){for(var s=this.stars,a=[],c=0,l=s.length;c<l;++c)for(var d=s[c],u=0,h=d.length;u<h;u+=2)a.push([d[u],d[u+1]]);return a},i.cells=function(){for(var s=this.stars,a=[],c=0,l=s.length;c<l;++c)for(var d=s[c],u=0,h=d.length;u<h;u+=2){var A=d[u],m=d[u+1];c<Math.min(A,m)&&a.push([c,A,m])}return a}}}),M9o=am({"node_modules/robust-in-sphere/in-sphere.js"(e,t){var n=Nke(),o=DBt(),i=RBt(),r=NBt();function s(m){return(m===3?a:m===4?c:m===5?l:d)(o,i,n,r)}function a(m,p,g,_){return function(f,y,x){var C=g(f[0],f[0]),I=_(C,y[0]),b=_(C,x[0]),P=g(y[0],y[0]),E=_(P,f[0]),B=_(P,x[0]),w=g(x[0],x[0]),T=_(w,f[0]),Q=_(w,y[0]),N=m(p(Q,B),p(E,I)),F=p(T,b),H=p(N,F);return H[H.length-1]}}function c(m,p,g,_){return function(f,y,x,C){var I=m(g(f[0],f[0]),g(f[1],f[1])),b=_(I,y[0]),P=_(I,x[0]),E=_(I,C[0]),B=m(g(y[0],y[0]),g(y[1],y[1])),w=_(B,f[0]),T=_(B,x[0]),Q=_(B,C[0]),N=m(g(x[0],x[0]),g(x[1],x[1])),F=_(N,f[0]),H=_(N,y[0]),z=_(N,C[0]),Y=m(g(C[0],C[0]),g(C[1],C[1])),U=_(Y,f[0]),X=_(Y,y[0]),V=_(Y,x[0]),W=m(m(_(p(V,z),y[1]),m(_(p(X,Q),-x[1]),_(p(H,T),C[1]))),m(_(p(X,Q),f[1]),m(_(p(U,E),-y[1]),_(p(w,b),C[1])))),j=m(m(_(p(V,z),f[1]),m(_(p(U,E),-x[1]),_(p(F,P),C[1]))),m(_(p(H,T),f[1]),m(_(p(F,P),-y[1]),_(p(w,b),x[1])))),q=p(W,j);return q[q.length-1]}}function l(m,p,g,_){return function(f,y,x,C,I){var b=m(g(f[0],f[0]),m(g(f[1],f[1]),g(f[2],f[2]))),P=_(b,y[0]),E=_(b,x[0]),B=_(b,C[0]),w=_(b,I[0]),T=m(g(y[0],y[0]),m(g(y[1],y[1]),g(y[2],y[2]))),Q=_(T,f[0]),N=_(T,x[0]),F=_(T,C[0]),H=_(T,I[0]),z=m(g(x[0],x[0]),m(g(x[1],x[1]),g(x[2],x[2]))),Y=_(z,f[0]),U=_(z,y[0]),X=_(z,C[0]),V=_(z,I[0]),W=m(g(C[0],C[0]),m(g(C[1],C[1]),g(C[2],C[2]))),j=_(W,f[0]),q=_(W,y[0]),ne=_(W,x[0]),ce=_(W,I[0]),oe=m(g(I[0],I[0]),m(g(I[1],I[1]),g(I[2],I[2]))),ie=_(oe,f[0]),J=_(oe,y[0]),ee=_(oe,x[0]),se=_(oe,C[0]),le=m(m(m(_(m(_(p(se,ce),x[1]),m(_(p(ee,V),-C[1]),_(p(ne,X),I[1]))),y[2]),m(_(m(_(p(se,ce),y[1]),m(_(p(J,H),-C[1]),_(p(q,F),I[1]))),-x[2]),_(m(_(p(ee,V),y[1]),m(_(p(J,H),-x[1]),_(p(U,N),I[1]))),C[2]))),m(_(m(_(p(ne,X),y[1]),m(_(p(q,F),-x[1]),_(p(U,N),C[1]))),-I[2]),m(_(m(_(p(se,ce),y[1]),m(_(p(J,H),-C[1]),_(p(q,F),I[1]))),f[2]),_(m(_(p(se,ce),f[1]),m(_(p(ie,w),-C[1]),_(p(j,B),I[1]))),-y[2])))),m(m(_(m(_(p(J,H),f[1]),m(_(p(ie,w),-y[1]),_(p(Q,P),I[1]))),C[2]),m(_(m(_(p(q,F),f[1]),m(_(p(j,B),-y[1]),_(p(Q,P),C[1]))),-I[2]),_(m(_(p(ne,X),y[1]),m(_(p(q,F),-x[1]),_(p(U,N),C[1]))),f[2]))),m(_(m(_(p(ne,X),f[1]),m(_(p(j,B),-x[1]),_(p(Y,E),C[1]))),-y[2]),m(_(m(_(p(q,F),f[1]),m(_(p(j,B),-y[1]),_(p(Q,P),C[1]))),x[2]),_(m(_(p(U,N),f[1]),m(_(p(Y,E),-y[1]),_(p(Q,P),x[1]))),-C[2]))))),he=m(m(m(_(m(_(p(se,ce),x[1]),m(_(p(ee,V),-C[1]),_(p(ne,X),I[1]))),f[2]),_(m(_(p(se,ce),f[1]),m(_(p(ie,w),-C[1]),_(p(j,B),I[1]))),-x[2])),m(_(m(_(p(ee,V),f[1]),m(_(p(ie,w),-x[1]),_(p(Y,E),I[1]))),C[2]),_(m(_(p(ne,X),f[1]),m(_(p(j,B),-x[1]),_(p(Y,E),C[1]))),-I[2]))),m(m(_(m(_(p(ee,V),y[1]),m(_(p(J,H),-x[1]),_(p(U,N),I[1]))),f[2]),_(m(_(p(ee,V),f[1]),m(_(p(ie,w),-x[1]),_(p(Y,E),I[1]))),-y[2])),m(_(m(_(p(J,H),f[1]),m(_(p(ie,w),-y[1]),_(p(Q,P),I[1]))),x[2]),_(m(_(p(U,N),f[1]),m(_(p(Y,E),-y[1]),_(p(Q,P),x[1]))),-I[2])))),ue=p(le,he);return ue[ue.length-1]}}function d(m,p,g,_){return function(f,y,x,C,I,b){var P=m(m(g(f[0],f[0]),g(f[1],f[1])),m(g(f[2],f[2]),g(f[3],f[3]))),E=_(P,y[0]),B=_(P,x[0]),w=_(P,C[0]),T=_(P,I[0]),Q=_(P,b[0]),N=m(m(g(y[0],y[0]),g(y[1],y[1])),m(g(y[2],y[2]),g(y[3],y[3]))),F=_(N,f[0]),H=_(N,x[0]),z=_(N,C[0]),Y=_(N,I[0]),U=_(N,b[0]),X=m(m(g(x[0],x[0]),g(x[1],x[1])),m(g(x[2],x[2]),g(x[3],x[3]))),V=_(X,f[0]),W=_(X,y[0]),j=_(X,C[0]),q=_(X,I[0]),ne=_(X,b[0]),ce=m(m(g(C[0],C[0]),g(C[1],C[1])),m(g(C[2],C[2]),g(C[3],C[3]))),oe=_(ce,f[0]),ie=_(ce,y[0]),J=_(ce,x[0]),ee=_(ce,I[0]),se=_(ce,b[0]),le=m(m(g(I[0],I[0]),g(I[1],I[1])),m(g(I[2],I[2]),g(I[3],I[3]))),he=_(le,f[0]),ue=_(le,y[0]),Ae=_(le,x[0]),_e=_(le,C[0]),Pe=_(le,b[0]),Ee=m(m(g(b[0],b[0]),g(b[1],b[1])),m(g(b[2],b[2]),g(b[3],b[3]))),Te=_(Ee,f[0]),be=_(Ee,y[0]),me=_(Ee,x[0]),ye=_(Ee,C[0]),Ce=_(Ee,I[0]),ve=m(m(m(_(m(m(_(m(_(p(Ce,Pe),C[1]),m(_(p(ye,se),-I[1]),_(p(_e,ee),b[1]))),x[2]),_(m(_(p(Ce,Pe),x[1]),m(_(p(me,ne),-I[1]),_(p(Ae,q),b[1]))),-C[2])),m(_(m(_(p(ye,se),x[1]),m(_(p(me,ne),-C[1]),_(p(J,j),b[1]))),I[2]),_(m(_(p(_e,ee),x[1]),m(_(p(Ae,q),-C[1]),_(p(J,j),I[1]))),-b[2]))),y[3]),m(_(m(m(_(m(_(p(Ce,Pe),C[1]),m(_(p(ye,se),-I[1]),_(p(_e,ee),b[1]))),y[2]),_(m(_(p(Ce,Pe),y[1]),m(_(p(be,U),-I[1]),_(p(ue,Y),b[1]))),-C[2])),m(_(m(_(p(ye,se),y[1]),m(_(p(be,U),-C[1]),_(p(ie,z),b[1]))),I[2]),_(m(_(p(_e,ee),y[1]),m(_(p(ue,Y),-C[1]),_(p(ie,z),I[1]))),-b[2]))),-x[3]),_(m(m(_(m(_(p(Ce,Pe),x[1]),m(_(p(me,ne),-I[1]),_(p(Ae,q),b[1]))),y[2]),_(m(_(p(Ce,Pe),y[1]),m(_(p(be,U),-I[1]),_(p(ue,Y),b[1]))),-x[2])),m(_(m(_(p(me,ne),y[1]),m(_(p(be,U),-x[1]),_(p(W,H),b[1]))),I[2]),_(m(_(p(Ae,q),y[1]),m(_(p(ue,Y),-x[1]),_(p(W,H),I[1]))),-b[2]))),C[3]))),m(m(_(m(m(_(m(_(p(ye,se),x[1]),m(_(p(me,ne),-C[1]),_(p(J,j),b[1]))),y[2]),_(m(_(p(ye,se),y[1]),m(_(p(be,U),-C[1]),_(p(ie,z),b[1]))),-x[2])),m(_(m(_(p(me,ne),y[1]),m(_(p(be,U),-x[1]),_(p(W,H),b[1]))),C[2]),_(m(_(p(J,j),y[1]),m(_(p(ie,z),-x[1]),_(p(W,H),C[1]))),-b[2]))),-I[3]),_(m(m(_(m(_(p(_e,ee),x[1]),m(_(p(Ae,q),-C[1]),_(p(J,j),I[1]))),y[2]),_(m(_(p(_e,ee),y[1]),m(_(p(ue,Y),-C[1]),_(p(ie,z),I[1]))),-x[2])),m(_(m(_(p(Ae,q),y[1]),m(_(p(ue,Y),-x[1]),_(p(W,H),I[1]))),C[2]),_(m(_(p(J,j),y[1]),m(_(p(ie,z),-x[1]),_(p(W,H),C[1]))),-I[2]))),b[3])),m(_(m(m(_(m(_(p(Ce,Pe),C[1]),m(_(p(ye,se),-I[1]),_(p(_e,ee),b[1]))),y[2]),_(m(_(p(Ce,Pe),y[1]),m(_(p(be,U),-I[1]),_(p(ue,Y),b[1]))),-C[2])),m(_(m(_(p(ye,se),y[1]),m(_(p(be,U),-C[1]),_(p(ie,z),b[1]))),I[2]),_(m(_(p(_e,ee),y[1]),m(_(p(ue,Y),-C[1]),_(p(ie,z),I[1]))),-b[2]))),f[3]),_(m(m(_(m(_(p(Ce,Pe),C[1]),m(_(p(ye,se),-I[1]),_(p(_e,ee),b[1]))),f[2]),_(m(_(p(Ce,Pe),f[1]),m(_(p(Te,Q),-I[1]),_(p(he,T),b[1]))),-C[2])),m(_(m(_(p(ye,se),f[1]),m(_(p(Te,Q),-C[1]),_(p(oe,w),b[1]))),I[2]),_(m(_(p(_e,ee),f[1]),m(_(p(he,T),-C[1]),_(p(oe,w),I[1]))),-b[2]))),-y[3])))),m(m(m(_(m(m(_(m(_(p(Ce,Pe),y[1]),m(_(p(be,U),-I[1]),_(p(ue,Y),b[1]))),f[2]),_(m(_(p(Ce,Pe),f[1]),m(_(p(Te,Q),-I[1]),_(p(he,T),b[1]))),-y[2])),m(_(m(_(p(be,U),f[1]),m(_(p(Te,Q),-y[1]),_(p(F,E),b[1]))),I[2]),_(m(_(p(ue,Y),f[1]),m(_(p(he,T),-y[1]),_(p(F,E),I[1]))),-b[2]))),C[3]),_(m(m(_(m(_(p(ye,se),y[1]),m(_(p(be,U),-C[1]),_(p(ie,z),b[1]))),f[2]),_(m(_(p(ye,se),f[1]),m(_(p(Te,Q),-C[1]),_(p(oe,w),b[1]))),-y[2])),m(_(m(_(p(be,U),f[1]),m(_(p(Te,Q),-y[1]),_(p(F,E),b[1]))),C[2]),_(m(_(p(ie,z),f[1]),m(_(p(oe,w),-y[1]),_(p(F,E),C[1]))),-b[2]))),-I[3])),m(_(m(m(_(m(_(p(_e,ee),y[1]),m(_(p(ue,Y),-C[1]),_(p(ie,z),I[1]))),f[2]),_(m(_(p(_e,ee),f[1]),m(_(p(he,T),-C[1]),_(p(oe,w),I[1]))),-y[2])),m(_(m(_(p(ue,Y),f[1]),m(_(p(he,T),-y[1]),_(p(F,E),I[1]))),C[2]),_(m(_(p(ie,z),f[1]),m(_(p(oe,w),-y[1]),_(p(F,E),C[1]))),-I[2]))),b[3]),_(m(m(_(m(_(p(ye,se),x[1]),m(_(p(me,ne),-C[1]),_(p(J,j),b[1]))),y[2]),_(m(_(p(ye,se),y[1]),m(_(p(be,U),-C[1]),_(p(ie,z),b[1]))),-x[2])),m(_(m(_(p(me,ne),y[1]),m(_(p(be,U),-x[1]),_(p(W,H),b[1]))),C[2]),_(m(_(p(J,j),y[1]),m(_(p(ie,z),-x[1]),_(p(W,H),C[1]))),-b[2]))),f[3]))),m(m(_(m(m(_(m(_(p(ye,se),x[1]),m(_(p(me,ne),-C[1]),_(p(J,j),b[1]))),f[2]),_(m(_(p(ye,se),f[1]),m(_(p(Te,Q),-C[1]),_(p(oe,w),b[1]))),-x[2])),m(_(m(_(p(me,ne),f[1]),m(_(p(Te,Q),-x[1]),_(p(V,B),b[1]))),C[2]),_(m(_(p(J,j),f[1]),m(_(p(oe,w),-x[1]),_(p(V,B),C[1]))),-b[2]))),-y[3]),_(m(m(_(m(_(p(ye,se),y[1]),m(_(p(be,U),-C[1]),_(p(ie,z),b[1]))),f[2]),_(m(_(p(ye,se),f[1]),m(_(p(Te,Q),-C[1]),_(p(oe,w),b[1]))),-y[2])),m(_(m(_(p(be,U),f[1]),m(_(p(Te,Q),-y[1]),_(p(F,E),b[1]))),C[2]),_(m(_(p(ie,z),f[1]),m(_(p(oe,w),-y[1]),_(p(F,E),C[1]))),-b[2]))),x[3])),m(_(m(m(_(m(_(p(me,ne),y[1]),m(_(p(be,U),-x[1]),_(p(W,H),b[1]))),f[2]),_(m(_(p(me,ne),f[1]),m(_(p(Te,Q),-x[1]),_(p(V,B),b[1]))),-y[2])),m(_(m(_(p(be,U),f[1]),m(_(p(Te,Q),-y[1]),_(p(F,E),b[1]))),x[2]),_(m(_(p(W,H),f[1]),m(_(p(V,B),-y[1]),_(p(F,E),x[1]))),-b[2]))),-C[3]),_(m(m(_(m(_(p(J,j),y[1]),m(_(p(ie,z),-x[1]),_(p(W,H),C[1]))),f[2]),_(m(_(p(J,j),f[1]),m(_(p(oe,w),-x[1]),_(p(V,B),C[1]))),-y[2])),m(_(m(_(p(ie,z),f[1]),m(_(p(oe,w),-y[1]),_(p(F,E),C[1]))),x[2]),_(m(_(p(W,H),f[1]),m(_(p(V,B),-y[1]),_(p(F,E),x[1]))),-C[2]))),b[3]))))),De=m(m(m(_(m(m(_(m(_(p(Ce,Pe),C[1]),m(_(p(ye,se),-I[1]),_(p(_e,ee),b[1]))),x[2]),_(m(_(p(Ce,Pe),x[1]),m(_(p(me,ne),-I[1]),_(p(Ae,q),b[1]))),-C[2])),m(_(m(_(p(ye,se),x[1]),m(_(p(me,ne),-C[1]),_(p(J,j),b[1]))),I[2]),_(m(_(p(_e,ee),x[1]),m(_(p(Ae,q),-C[1]),_(p(J,j),I[1]))),-b[2]))),f[3]),m(_(m(m(_(m(_(p(Ce,Pe),C[1]),m(_(p(ye,se),-I[1]),_(p(_e,ee),b[1]))),f[2]),_(m(_(p(Ce,Pe),f[1]),m(_(p(Te,Q),-I[1]),_(p(he,T),b[1]))),-C[2])),m(_(m(_(p(ye,se),f[1]),m(_(p(Te,Q),-C[1]),_(p(oe,w),b[1]))),I[2]),_(m(_(p(_e,ee),f[1]),m(_(p(he,T),-C[1]),_(p(oe,w),I[1]))),-b[2]))),-x[3]),_(m(m(_(m(_(p(Ce,Pe),x[1]),m(_(p(me,ne),-I[1]),_(p(Ae,q),b[1]))),f[2]),_(m(_(p(Ce,Pe),f[1]),m(_(p(Te,Q),-I[1]),_(p(he,T),b[1]))),-x[2])),m(_(m(_(p(me,ne),f[1]),m(_(p(Te,Q),-x[1]),_(p(V,B),b[1]))),I[2]),_(m(_(p(Ae,q),f[1]),m(_(p(he,T),-x[1]),_(p(V,B),I[1]))),-b[2]))),C[3]))),m(m(_(m(m(_(m(_(p(ye,se),x[1]),m(_(p(me,ne),-C[1]),_(p(J,j),b[1]))),f[2]),_(m(_(p(ye,se),f[1]),m(_(p(Te,Q),-C[1]),_(p(oe,w),b[1]))),-x[2])),m(_(m(_(p(me,ne),f[1]),m(_(p(Te,Q),-x[1]),_(p(V,B),b[1]))),C[2]),_(m(_(p(J,j),f[1]),m(_(p(oe,w),-x[1]),_(p(V,B),C[1]))),-b[2]))),-I[3]),_(m(m(_(m(_(p(_e,ee),x[1]),m(_(p(Ae,q),-C[1]),_(p(J,j),I[1]))),f[2]),_(m(_(p(_e,ee),f[1]),m(_(p(he,T),-C[1]),_(p(oe,w),I[1]))),-x[2])),m(_(m(_(p(Ae,q),f[1]),m(_(p(he,T),-x[1]),_(p(V,B),I[1]))),C[2]),_(m(_(p(J,j),f[1]),m(_(p(oe,w),-x[1]),_(p(V,B),C[1]))),-I[2]))),b[3])),m(_(m(m(_(m(_(p(Ce,Pe),x[1]),m(_(p(me,ne),-I[1]),_(p(Ae,q),b[1]))),y[2]),_(m(_(p(Ce,Pe),y[1]),m(_(p(be,U),-I[1]),_(p(ue,Y),b[1]))),-x[2])),m(_(m(_(p(me,ne),y[1]),m(_(p(be,U),-x[1]),_(p(W,H),b[1]))),I[2]),_(m(_(p(Ae,q),y[1]),m(_(p(ue,Y),-x[1]),_(p(W,H),I[1]))),-b[2]))),f[3]),_(m(m(_(m(_(p(Ce,Pe),x[1]),m(_(p(me,ne),-I[1]),_(p(Ae,q),b[1]))),f[2]),_(m(_(p(Ce,Pe),f[1]),m(_(p(Te,Q),-I[1]),_(p(he,T),b[1]))),-x[2])),m(_(m(_(p(me,ne),f[1]),m(_(p(Te,Q),-x[1]),_(p(V,B),b[1]))),I[2]),_(m(_(p(Ae,q),f[1]),m(_(p(he,T),-x[1]),_(p(V,B),I[1]))),-b[2]))),-y[3])))),m(m(m(_(m(m(_(m(_(p(Ce,Pe),y[1]),m(_(p(be,U),-I[1]),_(p(ue,Y),b[1]))),f[2]),_(m(_(p(Ce,Pe),f[1]),m(_(p(Te,Q),-I[1]),_(p(he,T),b[1]))),-y[2])),m(_(m(_(p(be,U),f[1]),m(_(p(Te,Q),-y[1]),_(p(F,E),b[1]))),I[2]),_(m(_(p(ue,Y),f[1]),m(_(p(he,T),-y[1]),_(p(F,E),I[1]))),-b[2]))),x[3]),_(m(m(_(m(_(p(me,ne),y[1]),m(_(p(be,U),-x[1]),_(p(W,H),b[1]))),f[2]),_(m(_(p(me,ne),f[1]),m(_(p(Te,Q),-x[1]),_(p(V,B),b[1]))),-y[2])),m(_(m(_(p(be,U),f[1]),m(_(p(Te,Q),-y[1]),_(p(F,E),b[1]))),x[2]),_(m(_(p(W,H),f[1]),m(_(p(V,B),-y[1]),_(p(F,E),x[1]))),-b[2]))),-I[3])),m(_(m(m(_(m(_(p(Ae,q),y[1]),m(_(p(ue,Y),-x[1]),_(p(W,H),I[1]))),f[2]),_(m(_(p(Ae,q),f[1]),m(_(p(he,T),-x[1]),_(p(V,B),I[1]))),-y[2])),m(_(m(_(p(ue,Y),f[1]),m(_(p(he,T),-y[1]),_(p(F,E),I[1]))),x[2]),_(m(_(p(W,H),f[1]),m(_(p(V,B),-y[1]),_(p(F,E),x[1]))),-I[2]))),b[3]),_(m(m(_(m(_(p(_e,ee),x[1]),m(_(p(Ae,q),-C[1]),_(p(J,j),I[1]))),y[2]),_(m(_(p(_e,ee),y[1]),m(_(p(ue,Y),-C[1]),_(p(ie,z),I[1]))),-x[2])),m(_(m(_(p(Ae,q),y[1]),m(_(p(ue,Y),-x[1]),_(p(W,H),I[1]))),C[2]),_(m(_(p(J,j),y[1]),m(_(p(ie,z),-x[1]),_(p(W,H),C[1]))),-I[2]))),f[3]))),m(m(_(m(m(_(m(_(p(_e,ee),x[1]),m(_(p(Ae,q),-C[1]),_(p(J,j),I[1]))),f[2]),_(m(_(p(_e,ee),f[1]),m(_(p(he,T),-C[1]),_(p(oe,w),I[1]))),-x[2])),m(_(m(_(p(Ae,q),f[1]),m(_(p(he,T),-x[1]),_(p(V,B),I[1]))),C[2]),_(m(_(p(J,j),f[1]),m(_(p(oe,w),-x[1]),_(p(V,B),C[1]))),-I[2]))),-y[3]),_(m(m(_(m(_(p(_e,ee),y[1]),m(_(p(ue,Y),-C[1]),_(p(ie,z),I[1]))),f[2]),_(m(_(p(_e,ee),f[1]),m(_(p(he,T),-C[1]),_(p(oe,w),I[1]))),-y[2])),m(_(m(_(p(ue,Y),f[1]),m(_(p(he,T),-y[1]),_(p(F,E),I[1]))),C[2]),_(m(_(p(ie,z),f[1]),m(_(p(oe,w),-y[1]),_(p(F,E),C[1]))),-I[2]))),x[3])),m(_(m(m(_(m(_(p(Ae,q),y[1]),m(_(p(ue,Y),-x[1]),_(p(W,H),I[1]))),f[2]),_(m(_(p(Ae,q),f[1]),m(_(p(he,T),-x[1]),_(p(V,B),I[1]))),-y[2])),m(_(m(_(p(ue,Y),f[1]),m(_(p(he,T),-y[1]),_(p(F,E),I[1]))),x[2]),_(m(_(p(W,H),f[1]),m(_(p(V,B),-y[1]),_(p(F,E),x[1]))),-I[2]))),-C[3]),_(m(m(_(m(_(p(J,j),y[1]),m(_(p(ie,z),-x[1]),_(p(W,H),C[1]))),f[2]),_(m(_(p(J,j),f[1]),m(_(p(oe,w),-x[1]),_(p(V,B),C[1]))),-y[2])),m(_(m(_(p(ie,z),f[1]),m(_(p(oe,w),-y[1]),_(p(F,E),C[1]))),x[2]),_(m(_(p(W,H),f[1]),m(_(p(V,B),-y[1]),_(p(F,E),x[1]))),-C[2]))),I[3]))))),Ze=p(ve,De);return Ze[Ze.length-1]}}var u=[function(){return 0},function(){return 0},function(){return 0}];function h(m){var p=u[m.length];return p||(p=u[m.length]=s(m.length)),p.apply(void 0,m)}function A(m,p,g,_,f,y,x,C){return function(I,b,P,E,B,w){switch(arguments.length){case 0:case 1:return 0;case 2:return _(I,b);case 3:return f(I,b,P);case 4:return y(I,b,P,E);case 5:return x(I,b,P,E,B);case 6:return C(I,b,P,E,B,w)}for(var T=Array(arguments.length),Q=0;Q<arguments.length;++Q)T[Q]=arguments[Q];return m(T)}}(function(){for(;u.length<=6;)u.push(s(u.length));t.exports=A.apply(void 0,[h].concat(u));for(var m=0;m<=6;++m)t.exports[m]=u[m]})()}}),B9o=am({"node_modules/cdt2d/lib/delaunay.js"(e,t){var n=M9o()[4];Uge();function o(i,r,s,a,c,l){var d=r.opposite(a,c);if(!(d<0)){if(c<a){var u=a;a=c,c=u,u=l,l=d,d=u}r.isConstraint(a,c)||n(i[a],i[c],i[l],i[d])<0&&s.push(a,c)}}t.exports=function(i,r){for(var s=[],a=i.length,c=r.stars,l=0;l<a;++l)for(var d=c[l],u=1;u<d.length;u+=2)if(!((p=d[u])<l)&&!r.isConstraint(l,p)){for(var h=d[u-1],A=-1,m=1;m<d.length;m+=2)if(d[m-1]===p){A=d[m];break}A<0||n(i[l],i[p],i[h],i[A])<0&&s.push(l,p)}for(;s.length>0;){for(var p=s.pop(),g=(h=-1,A=-1,d=c[l=s.pop()],1);g<d.length;g+=2){var _=d[g-1],f=d[g];_===p?A=f:f===p&&(h=_)}h<0||A<0||(n(i[l],i[p],i[h],i[A])>=0||(r.flip(l,p),o(i,r,s,h,l,A),o(i,r,s,l,A,h),o(i,r,s,A,p,h),o(i,r,s,p,h,A)))}}}}),w9o=am({"node_modules/cdt2d/lib/filter.js"(e,t){var n=Uge();function o(r,s,a,c,l,d,u){this.cells=r,this.neighbor=s,this.flags=c,this.constraint=a,this.active=l,this.next=d,this.boundary=u}function i(r,s){return r[0]-s[0]||r[1]-s[1]||r[2]-s[2]}t.exports=function(r,s,a){var c=function(C,I){for(var b=C.cells(),P=b.length,E=0;E<P;++E){var B=(X=b[E])[0],w=X[1],T=X[2];w<T?w<B&&(X[0]=w,X[1]=T,X[2]=B):T<B&&(X[0]=T,X[1]=B,X[2]=w)}b.sort(i);var Q=Array(P);for(E=0;E<Q.length;++E)Q[E]=0;var N=[],F=[],H=Array(3*P),z=Array(3*P),Y=null;I&&(Y=[]);var U=new o(b,H,z,Q,N,F,Y);for(E=0;E<P;++E)for(var X=b[E],V=0;V<3;++V){B=X[V],w=X[(V+1)%3];var W=H[3*E+V]=U.locate(w,B,C.opposite(w,B)),j=z[3*E+V]=C.isConstraint(B,w);W<0&&(j?F.push(E):(N.push(E),Q[E]=1),I&&Y.push([w,B,-1]))}return U}(r,a);if(s===0)return a?c.cells.concat(c.boundary):c.cells;var l=1,{active:d,next:u,flags:h,cells:A,constraint:m,neighbor:p}=c;for(;d.length>0||u.length>0;){for(;d.length>0;){var g=d.pop();if(h[g]!==-l){h[g]=l,A[g];for(var _=0;_<3;++_){var f=p[3*g+_];f>=0&&h[f]===0&&(m[3*g+_]?u.push(f):(d.push(f),h[f]=l))}}}var y=u;u=d,d=y,u.length=0,l=-l}var x=function(C,I,b){for(var P=0,E=0;E<C.length;++E)I[E]===b&&(C[P++]=C[E]);return C.length=P,C}(A,h,s);if(a)return x.concat(c.boundary);return x},o.prototype.locate=function(){var r=[0,0,0];return function(s,a,c){var l=s,d=a,u=c;return a<c?a<s&&(l=a,d=c,u=s):c<s&&(l=c,d=s,u=a),l<0?-1:(r[0]=l,r[1]=d,r[2]=u,n.eq(this.cells,r,i))}}()}}),T9o=am({"node_modules/cdt2d/cdt2d.js"(e,t){var n=v9o(),o=E9o(),i=B9o(),r=w9o();function s(l){return[Math.min(l[0],l[1]),Math.max(l[0],l[1])]}function a(l,d){return l[0]-d[0]||l[1]-d[1]}function c(l,d,u){return d in l?l[d]:u}t.exports=function(l,d,u){Array.isArray(d)?(u=u||{},d=d||[]):(u=d||{},d=[]);var h=!!c(u,"delaunay",!0),A=!!c(u,"interior",!0),m=!!c(u,"exterior",!0),p=!!c(u,"infinity",!1);if(!A&&!m||l.length===0)return[];var g=n(l,d);if(h||A!==m||p){for(var _=o(l.length,function(x){return x.map(s).sort(a)}(d)),f=0;f<g.length;++f){var y=g[f];_.addTriangle(y[0],y[1],y[2])}return h&&i(l,_),m?A?p?r(_,0,p):_.cells():r(_,1,p):r(_,-1)}return g}}});function C6(e,t){return Array.isArray(t)?[e.a*t[0]+e.c*t[1]+e.e,e.b*t[0]+e.d*t[1]+e.f]:{x:e.a*t.x+e.c*t.y+e.e,y:e.b*t.x+e.d*t.y+e.f}}function QBt(e,t){return t.map((n)=>C6(e,n))}function kBt(e){let{a:t,b:n,c:o,d:i,e:r,f:s}=e,a=t*i-n*o;return{a:i/a,b:n/-a,c:o/-a,d:t/a,e:(i*r-o*s)/-a,f:(n*r-t*s)/a}}function FSt(e){return e===void 0}function Yk(e,t=0){return{a:1,c:0,e,b:0,d:1,f:t}}function Rke(...e){let t=(n,o)=>({a:n.a*o.a+n.c*o.b,c:n.a*o.c+n.c*o.d,e:n.a*o.e+n.c*o.f+n.e,b:n.b*o.a+n.d*o.b,d:n.b*o.c+n.d*o.d,f:n.b*o.e+n.d*o.f+n.f});switch((e=Array.isArray(e[0])?e[0]:e).length){case 0:throw Error("no matrices provided");case 1:return e[0];case 2:return t(e[0],e[1]);default:{let[n,o,...i]=e;return Rke(t(n,o),...i)}}}function Qke(...e){return Rke(...e)}var{cos:D9o,sin:N9o,PI:R9o}=Math;function LBt(e,t,n){let o=D9o(e),i=N9o(e),r={a:o,c:-i,e:0,b:i,d:o,f:0};return FSt(t)||FSt(n)?r:Rke([Yk(t,n),r,Yk(-t,-n)])}function FBt(e,t=void 0,n=void 0){return LBt(e*R9o/180,t,n)}var{tan:Gzr}=Math,Q9o=(CRe(y9o()),CRe(b9o()),(()=>{let e=new Uint8Array(4);new Uint32Array(e.buffer)[0]=1,e[0]})(),globalThis.Int8Array,globalThis.Uint8Array,globalThis.Int16Array,globalThis.Uint16Array,globalThis.Int32Array,globalThis.Uint32Array,globalThis.BigUint64Array,globalThis.BigInt64Array,globalThis.Float32Array,globalThis.Float64Array,[]);for(let e=0;e<256;e++){let t=e;for(let n=0;n<8;n++)1&t?t=3988292384^t>>>1:t>>>=1;Q9o[e]=t}var k9o=new Uint16Array([255]),L9o=(new Uint8Array(k9o.buffer)[0],new Uint16Array([255]));new Uint8Array(L9o.buffer)[0],new Uint8Array(0),Uint8Array.of(137,80,78,71,13,10,26,10),new TextDecoder("latin1");function Ty(){return Ty=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var o in n)({}).hasOwnProperty.call(n,o)&&(e[o]=n[o])}return e},Ty.apply(null,arguments)}function D_e(e,t){return(D_e=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(n,o){return n.__proto__=o,n})(e,t)}function HBt(e){return(HBt=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)})(e)}function OBt(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(t){}return(OBt=function(){return!!e})()}function IRe(e){var t=typeof Map=="function"?new Map:void 0;return IRe=function(n){if(n===null||!function(i){try{return Function.toString.call(i).indexOf("[native code]")!==-1}catch(r){return typeof i=="function"}}(n))return n;if(typeof n!="function")throw TypeError("Super expression must either be null or a function");if(t!==void 0){if(t.has(n))return t.get(n);t.set(n,o)}function o(){return function(i,r,s){if(OBt())return Reflect.construct.apply(null,arguments);var a=[null];a.push.apply(a,r);var c=new(i.bind.apply(i,a));return s&&D_e(c,s.prototype),c}(n,arguments,HBt(this).constructor)}return o.prototype=Object.create(n.prototype,{constructor:{value:o,enumerable:!1,writable:!0,configurable:!0}}),D_e(o,n)},IRe(e)}var F9o={1:`Passed invalid arguments to hsl, please pass multiple numbers e.g. hsl(360, 0.75, 0.4) or an object e.g. rgb({ hue: 255, saturation: 0.4, lightness: 0.75 }).
`,2:`Passed invalid arguments to hsla, please pass multiple numbers e.g. hsla(360, 0.75, 0.4, 0.7) or an object e.g. rgb({ hue: 255, saturation: 0.4, lightness: 0.75, alpha: 0.7 }).
`,3:`Passed an incorrect argument to a color function, please pass a string representation of a color.
`,4:`Couldn't generate valid rgb string from %s, it returned %s.
`,5:`Couldn't parse the color string. Please provide the color as a string in hex, rgb, rgba, hsl or hsla notation.
`,6:`Passed invalid arguments to rgb, please pass multiple numbers e.g. rgb(255, 205, 100) or an object e.g. rgb({ red: 255, green: 205, blue: 100 }).
`,7:`Passed invalid arguments to rgba, please pass multiple numbers e.g. rgb(255, 205, 100, 0.75) or an object e.g. rgb({ red: 255, green: 205, blue: 100, alpha: 0.75 }).
`,8:`Passed invalid argument to toColorString, please pass a RgbColor, RgbaColor, HslColor or HslaColor object.
`,9:`Please provide a number of steps to the modularScale helper.
`,10:`Please pass a number or one of the predefined scales to the modularScale helper as the ratio.
`,11:`Invalid value passed as base to modularScale, expected number or em string but got "%s"
`,12:`Expected a string ending in "px" or a number passed as the first argument to %s(), got "%s" instead.
`,13:`Expected a string ending in "px" or a number passed as the second argument to %s(), got "%s" instead.
`,14:`Passed invalid pixel value ("%s") to %s(), please pass a value like "12px" or 12.
`,15:`Passed invalid base value ("%s") to %s(), please pass a value like "12px" or 12.
`,16:`You must provide a template to this method.
`,17:`You passed an unsupported selector state to this method.
`,18:`minScreen and maxScreen must be provided as stringified numbers with the same units.
`,19:`fromSize and toSize must be provided as stringified numbers with the same units.
`,20:`expects either an array of objects or a single object with the properties prop, fromSize, and toSize.
`,21:"expects the objects in the first argument array to have the properties `prop`, `fromSize`, and `toSize`.\n\n",22:"expects the first argument object to have the properties `prop`, `fromSize`, and `toSize`.\n\n",23:`fontFace expects a name of a font-family.
`,24:`fontFace expects either the path to the font file(s) or a name of a local copy.
`,25:`fontFace expects localFonts to be an array.
`,26:`fontFace expects fileFormats to be an array.
`,27:`radialGradient requries at least 2 color-stops to properly render.
`,28:`Please supply a filename to retinaImage() as the first argument.
`,29:`Passed invalid argument to triangle, please pass correct pointingDirection e.g. 'right'.
`,30:"Passed an invalid value to `height` or `width`. Please provide a pixel based unit.\n\n",31:`The animation shorthand only takes 8 arguments. See the specification for more information: http://mdn.io/animation
`,32:`To pass multiple animations please supply them in arrays, e.g. animation(['rotate', '2s'], ['move', '1s'])
To pass a single animation please supply them in simple values, e.g. animation('rotate', '2s')
`,33:`The animation shorthand arrays can only have 8 elements. See the specification for more information: http://mdn.io/animation
`,34:`borderRadius expects a radius value as a string or number as the second argument.
`,35:`borderRadius expects one of "top", "bottom", "left" or "right" as the first argument.
`,36:`Property must be a string value.
`,37:`Syntax Error at %s.
`,38:`Formula contains a function that needs parentheses at %s.
`,39:`Formula is missing closing parenthesis at %s.
`,40:`Formula has too many closing parentheses at %s.
`,41:`All values in a formula must have the same unit or be unitless.
`,42:`Please provide a number of steps to the modularScale helper.
`,43:`Please pass a number or one of the predefined scales to the modularScale helper as the ratio.
`,44:`Invalid value passed as base to modularScale, expected number or em/rem string but got %s.
`,45:`Passed invalid argument to hslToColorString, please pass a HslColor or HslaColor object.
`,46:`Passed invalid argument to rgbToColorString, please pass a RgbColor or RgbaColor object.
`,47:`minScreen and maxScreen must be provided as stringified numbers with the same units.
`,48:`fromSize and toSize must be provided as stringified numbers with the same units.
`,49:`Expects either an array of objects or a single object with the properties prop, fromSize, and toSize.
`,50:`Expects the objects in the first argument array to have the properties prop, fromSize, and toSize.
`,51:`Expects the first argument object to have the properties prop, fromSize, and toSize.
`,52:`fontFace expects either the path to the font file(s) or a name of a local copy.
`,53:`fontFace expects localFonts to be an array.
`,54:`fontFace expects fileFormats to be an array.
`,55:`fontFace expects a name of a font-family.
`,56:`linearGradient requries at least 2 color-stops to properly render.
`,57:`radialGradient requries at least 2 color-stops to properly render.
`,58:`Please supply a filename to retinaImage() as the first argument.
`,59:`Passed invalid argument to triangle, please pass correct pointingDirection e.g. 'right'.
`,60:"Passed an invalid value to `height` or `width`. Please provide a pixel based unit.\n\n",61:`Property must be a string value.
`,62:`borderRadius expects a radius value as a string or number as the second argument.
`,63:`borderRadius expects one of "top", "bottom", "left" or "right" as the first argument.
`,64:`The animation shorthand only takes 8 arguments. See the specification for more information: http://mdn.io/animation.
`,65:`To pass multiple animations please supply them in arrays, e.g. animation(['rotate', '2s'], ['move', '1s'])\\nTo pass a single animation please supply them in simple values, e.g. animation('rotate', '2s').
`,66:`The animation shorthand arrays can only have 8 elements. See the specification for more information: http://mdn.io/animation.
`,67:`You must provide a template to this method.
`,68:`You passed an unsupported selector state to this method.
`,69:`Expected a string ending in "px" or a number passed as the first argument to %s(), got %s instead.
`,70:`Expected a string ending in "px" or a number passed as the second argument to %s(), got %s instead.
`,71:`Passed invalid pixel value %s to %s(), please pass a value like "12px" or 12.
`,72:`Passed invalid base value %s to %s(), please pass a value like "12px" or 12.
`,73:`Please provide a valid CSS variable.
`,74:`CSS variable not found and no default was provided.
`,75:`important requires a valid style object, got a %s instead.
`,76:`fromSize and toSize must be provided as stringified numbers with the same units as minScreen and maxScreen.
`,77:`remToPx expects a value in "rem" but you provided it in "%s".
`,78:`base must be set in "px" or "%" but you set it in "%s".
`};function H9o(){for(var e=arguments.length,t=Array(e),n=0;n<e;n++)t[n]=arguments[n];var o,i=t[0],r=[];for(o=1;o<t.length;o+=1)r.push(t[o]);return r.forEach(function(s){i=i.replace(/%[a-z]/,s)}),i}var My=function(e){var t,n;function o(i){var r;for(var s=arguments.length,a=Array(s>1?s-1:0),c=1;c<s;c++)a[c-1]=arguments[c];return r=e.call(this,H9o.apply(void 0,[F9o[i]].concat(a)))||this,function(l){if(l===void 0)throw ReferenceError("this hasn't been initialised - super() hasn't been called");return l}(r)}return n=e,(t=o).prototype=Object.create(n.prototype),t.prototype.constructor=t,D_e(t,n),o}(IRe(Error));function HSt(e,t){return e.substr(-t.length)===t}var O9o=/^([+-]?(?:\d+|\d*\.\d+))([a-z]*|%)$/;function OSt(e){return typeof e!="string"?e:e.match(O9o)?parseFloat(e):e}var zSt=function(e){return function(t,n){n===void 0&&(n="16px");var o=t,i=n;if(typeof t=="string"){if(!HSt(t,"px"))throw new My(69,e,t);o=OSt(t)}if(typeof n=="string"){if(!HSt(n,"px"))throw new My(70,e,n);i=OSt(n)}if(typeof o=="string")throw new My(71,t,e);if(typeof i=="string")throw new My(72,n,e);return""+o/i+e}};zSt("em"),zSt("rem");function pDe(e){return Math.round(255*e)}function z9o(e,t,n){return pDe(e)+","+pDe(t)+","+pDe(n)}function Wee(e,t,n,o){if(o===void 0&&(o=z9o),t===0)return o(n,n,n);var i=(e%360+360)%360/60,r=(1-Math.abs(2*n-1))*t,s=r*(1-Math.abs(i%2-1)),a=0,c=0,l=0;i>=0&&i<1?(a=r,c=s):i>=1&&i<2?(a=s,c=r):i>=2&&i<3?(c=r,l=s):i>=3&&i<4?(c=s,l=r):i>=4&&i<5?(a=s,l=r):i>=5&&i<6&&(a=r,l=s);var d=n-r/2;return o(a+d,c+d,l+d)}var GSt={aliceblue:"f0f8ff",antiquewhite:"faebd7",aqua:"00ffff",aquamarine:"7fffd4",azure:"f0ffff",beige:"f5f5dc",bisque:"ffe4c4",black:"000",blanchedalmond:"ffebcd",blue:"0000ff",blueviolet:"8a2be2",brown:"a52a2a",burlywood:"deb887",cadetblue:"5f9ea0",chartreuse:"7fff00",chocolate:"d2691e",coral:"ff7f50",cornflowerblue:"6495ed",cornsilk:"fff8dc",crimson:"dc143c",cyan:"00ffff",darkblue:"00008b",darkcyan:"008b8b",darkgoldenrod:"b8860b",darkgray:"a9a9a9",darkgreen:"006400",darkgrey:"a9a9a9",darkkhaki:"bdb76b",darkmagenta:"8b008b",darkolivegreen:"556b2f",darkorange:"ff8c00",darkorchid:"9932cc",darkred:"8b0000",darksalmon:"e9967a",darkseagreen:"8fbc8f",darkslateblue:"483d8b",darkslategray:"2f4f4f",darkslategrey:"2f4f4f",darkturquoise:"00ced1",darkviolet:"9400d3",deeppink:"ff1493",deepskyblue:"00bfff",dimgray:"696969",dimgrey:"696969",dodgerblue:"1e90ff",firebrick:"b22222",floralwhite:"fffaf0",forestgreen:"228b22",fuchsia:"ff00ff",gainsboro:"dcdcdc",ghostwhite:"f8f8ff",gold:"ffd700",goldenrod:"daa520",gray:"808080",green:"008000",greenyellow:"adff2f",grey:"808080",honeydew:"f0fff0",hotpink:"ff69b4",indianred:"cd5c5c",indigo:"4b0082",ivory:"fffff0",khaki:"f0e68c",lavender:"e6e6fa",lavenderblush:"fff0f5",lawngreen:"7cfc00",lemonchiffon:"fffacd",lightblue:"add8e6",lightcoral:"f08080",lightcyan:"e0ffff",lightgoldenrodyellow:"fafad2",lightgray:"d3d3d3",lightgreen:"90ee90",lightgrey:"d3d3d3",lightpink:"ffb6c1",lightsalmon:"ffa07a",lightseagreen:"20b2aa",lightskyblue:"87cefa",lightslategray:"789",lightslategrey:"789",lightsteelblue:"b0c4de",lightyellow:"ffffe0",lime:"0f0",limegreen:"32cd32",linen:"faf0e6",magenta:"f0f",maroon:"800000",mediumaquamarine:"66cdaa",mediumblue:"0000cd",mediumorchid:"ba55d3",mediumpurple:"9370db",mediumseagreen:"3cb371",mediumslateblue:"7b68ee",mediumspringgreen:"00fa9a",mediumturquoise:"48d1cc",mediumvioletred:"c71585",midnightblue:"191970",mintcream:"f5fffa",mistyrose:"ffe4e1",moccasin:"ffe4b5",navajowhite:"ffdead",navy:"000080",oldlace:"fdf5e6",olive:"808000",olivedrab:"6b8e23",orange:"ffa500",orangered:"ff4500",orchid:"da70d6",palegoldenrod:"eee8aa",palegreen:"98fb98",paleturquoise:"afeeee",palevioletred:"db7093",papayawhip:"ffefd5",peachpuff:"ffdab9",peru:"cd853f",pink:"ffc0cb",plum:"dda0dd",powderblue:"b0e0e6",purple:"800080",rebeccapurple:"639",red:"f00",rosybrown:"bc8f8f",royalblue:"4169e1",saddlebrown:"8b4513",salmon:"fa8072",sandybrown:"f4a460",seagreen:"2e8b57",seashell:"fff5ee",sienna:"a0522d",silver:"c0c0c0",skyblue:"87ceeb",slateblue:"6a5acd",slategray:"708090",slategrey:"708090",snow:"fffafa",springgreen:"00ff7f",steelblue:"4682b4",tan:"d2b48c",teal:"008080",thistle:"d8bfd8",tomato:"ff6347",turquoise:"40e0d0",violet:"ee82ee",wheat:"f5deb3",white:"fff",whitesmoke:"f5f5f5",yellow:"ff0",yellowgreen:"9acd32"},G9o=/^#[a-fA-F0-9]{6}$/,Y9o=/^#[a-fA-F0-9]{8}$/,V9o=/^#[a-fA-F0-9]{3}$/,U9o=/^#[a-fA-F0-9]{4}$/,ADe=/^rgb\(\s*(\d{1,3})\s*(?:,)?\s*(\d{1,3})\s*(?:,)?\s*(\d{1,3})\s*\)$/i,W9o=/^rgb(?:a)?\(\s*(\d{1,3})\s*(?:,)?\s*(\d{1,3})\s*(?:,)?\s*(\d{1,3})\s*(?:,|\/)\s*([-+]?\d*[.]?\d+[%]?)\s*\)$/i,X9o=/^hsl\(\s*(\d{0,3}[.]?[0-9]+(?:deg)?)\s*(?:,)?\s*(\d{1,3}[.]?[0-9]?)%\s*(?:,)?\s*(\d{1,3}[.]?[0-9]?)%\s*\)$/i,K9o=/^hsl(?:a)?\(\s*(\d{0,3}[.]?[0-9]+(?:deg)?)\s*(?:,)?\s*(\d{1,3}[.]?[0-9]?)%\s*(?:,)?\s*(\d{1,3}[.]?[0-9]?)%\s*(?:,|\/)\s*([-+]?\d*[.]?\d+[%]?)\s*\)$/i;function Vk(e){if(typeof e!="string")throw new My(3);var t=function(h){if(typeof h!="string")return h;var A=h.toLowerCase();return GSt[A]?"#"+GSt[A]:h}(e);if(t.match(G9o))return{red:parseInt(""+t[1]+t[2],16),green:parseInt(""+t[3]+t[4],16),blue:parseInt(""+t[5]+t[6],16)};if(t.match(Y9o)){var n=parseFloat((parseInt(""+t[7]+t[8],16)/255).toFixed(2));return{red:parseInt(""+t[1]+t[2],16),green:parseInt(""+t[3]+t[4],16),blue:parseInt(""+t[5]+t[6],16),alpha:n}}if(t.match(V9o))return{red:parseInt(""+t[1]+t[1],16),green:parseInt(""+t[2]+t[2],16),blue:parseInt(""+t[3]+t[3],16)};if(t.match(U9o)){var o=parseFloat((parseInt(""+t[4]+t[4],16)/255).toFixed(2));return{red:parseInt(""+t[1]+t[1],16),green:parseInt(""+t[2]+t[2],16),blue:parseInt(""+t[3]+t[3],16),alpha:o}}var i=ADe.exec(t);if(i)return{red:parseInt(""+i[1],10),green:parseInt(""+i[2],10),blue:parseInt(""+i[3],10)};var r=W9o.exec(t.substring(0,50));if(r)return{red:parseInt(""+r[1],10),green:parseInt(""+r[2],10),blue:parseInt(""+r[3],10),alpha:parseFloat(""+r[4])>1?parseFloat(""+r[4])/100:parseFloat(""+r[4])};var s=X9o.exec(t);if(s){var a="rgb("+Wee(parseInt(""+s[1],10),parseInt(""+s[2],10)/100,parseInt(""+s[3],10)/100)+")",c=ADe.exec(a);if(!c)throw new My(4,t,a);return{red:parseInt(""+c[1],10),green:parseInt(""+c[2],10),blue:parseInt(""+c[3],10)}}var l=K9o.exec(t.substring(0,50));if(l){var d="rgb("+Wee(parseInt(""+l[1],10),parseInt(""+l[2],10)/100,parseInt(""+l[3],10)/100)+")",u=ADe.exec(d);if(!u)throw new My(4,t,d);return{red:parseInt(""+u[1],10),green:parseInt(""+u[2],10),blue:parseInt(""+u[3],10),alpha:parseFloat(""+l[4])>1?parseFloat(""+l[4])/100:parseFloat(""+l[4])}}throw new My(5)}function oT(e){return function(t){var n,o=t.red/255,i=t.green/255,r=t.blue/255,s=Math.max(o,i,r),a=Math.min(o,i,r),c=(s+a)/2;if(s===a)return t.alpha!==void 0?{hue:0,saturation:0,lightness:c,alpha:t.alpha}:{hue:0,saturation:0,lightness:c};var l=s-a,d=c>0.5?l/(2-s-a):l/(s+a);switch(s){case o:n=(i-r)/l+(i<r?6:0);break;case i:n=(r-o)/l+2;break;default:n=(o-i)/l+4}return n*=60,t.alpha!==void 0?{hue:n,saturation:d,lightness:c,alpha:t.alpha}:{hue:n,saturation:d,lightness:c}}(Vk(e))}var bRe=function(e){return e.length===7&&e[1]===e[2]&&e[3]===e[4]&&e[5]===e[6]?"#"+e[1]+e[3]+e[5]:e};function dk(e){var t=e.toString(16);return t.length===1?"0"+t:t}function _De(e){return dk(Math.round(255*e))}function j9o(e,t,n){return bRe("#"+_De(e)+_De(t)+_De(n))}function Ope(e,t,n){return Wee(e,t,n,j9o)}function SRe(e,t,n){if(typeof e=="number"&&typeof t=="number"&&typeof n=="number")return bRe("#"+dk(e)+dk(t)+dk(n));if(typeof e=="object"&&t===void 0&&n===void 0)return bRe("#"+dk(e.red)+dk(e.green)+dk(e.blue));throw new My(6)}function Wge(e,t,n,o){if(typeof e=="string"&&typeof t=="number"){var i=Vk(e);return"rgba("+i.red+","+i.green+","+i.blue+","+t+")"}if(typeof e=="number"&&typeof t=="number"&&typeof n=="number"&&typeof o=="number")return o>=1?SRe(e,t,n):"rgba("+e+","+t+","+n+","+o+")";if(typeof e=="object"&&t===void 0&&n===void 0&&o===void 0)return e.alpha>=1?SRe(e.red,e.green,e.blue):"rgba("+e.red+","+e.green+","+e.blue+","+e.alpha+")";throw new My(7)}function iT(e){if(typeof e!="object")throw new My(8);if(function(t){return typeof t.red=="number"&&typeof t.green=="number"&&typeof t.blue=="number"&&typeof t.alpha=="number"}(e))return Wge(e);if(function(t){return typeof t.red=="number"&&typeof t.green=="number"&&typeof t.blue=="number"&&(typeof t.alpha!="number"||t.alpha===void 0)}(e))return SRe(e);if(function(t){return typeof t.hue=="number"&&typeof t.saturation=="number"&&typeof t.lightness=="number"&&typeof t.alpha=="number"}(e))return function(t,n,o,i){if(typeof t=="number"&&typeof n=="number"&&typeof o=="number"&&typeof i=="number")return i>=1?Ope(t,n,o):"rgba("+Wee(t,n,o)+","+i+")";if(typeof t=="object"&&n===void 0&&o===void 0&&i===void 0)return t.alpha>=1?Ope(t.hue,t.saturation,t.lightness):"rgba("+Wee(t.hue,t.saturation,t.lightness)+","+t.alpha+")";throw new My(2)}(e);if(function(t){return typeof t.hue=="number"&&typeof t.saturation=="number"&&typeof t.lightness=="number"&&(typeof t.alpha!="number"||t.alpha===void 0)}(e))return function(t,n,o){if(typeof t=="number"&&typeof n=="number"&&typeof o=="number")return Ope(t,n,o);if(typeof t=="object"&&n===void 0&&o===void 0)return Ope(t.hue,t.saturation,t.lightness);throw new My(1)}(e);throw new My(8)}function zBt(e,t,n){return function(){var o=n.concat(Array.prototype.slice.call(arguments));return o.length>=t?e.apply(this,o):zBt(e,t,o)}}function Mx(e){return zBt(e,e.length,[])}Mx(function(e,t){if(t==="transparent")return t;var n=oT(t);return iT(Ty({},n,{hue:n.hue+parseFloat(e)}))});function IU(e,t,n){return Math.max(e,Math.min(t,n))}Mx(function(e,t){if(t==="transparent")return t;var n=oT(t);return iT(Ty({},n,{lightness:IU(0,1,n.lightness-parseFloat(e))}))});Mx(function(e,t){if(t==="transparent")return t;var n=oT(t);return iT(Ty({},n,{saturation:IU(0,1,n.saturation-parseFloat(e))}))});Mx(function(e,t){if(t==="transparent")return t;var n=oT(t);return iT(Ty({},n,{lightness:IU(0,1,n.lightness+parseFloat(e))}))});var GBt=Mx(function(e,t,n){if(t==="transparent")return n;if(n==="transparent")return t;if(e===0)return n;var o=Vk(t),i=Ty({},o,{alpha:typeof o.alpha=="number"?o.alpha:1}),r=Vk(n),s=Ty({},r,{alpha:typeof r.alpha=="number"?r.alpha:1}),a=i.alpha-s.alpha,c=2*parseFloat(e)-1,l=((c*a===-1?c:c+a)/(1+c*a)+1)/2,d=1-l;return Wge({red:Math.floor(i.red*l+s.red*d),green:Math.floor(i.green*l+s.green*d),blue:Math.floor(i.blue*l+s.blue*d),alpha:i.alpha*parseFloat(e)+s.alpha*(1-parseFloat(e))})});Mx(function(e,t){if(t==="transparent")return t;var n=Vk(t);return Wge(Ty({},n,{alpha:IU(0,1,(100*(typeof n.alpha=="number"?n.alpha:1)+100*parseFloat(e))/100)}))});Mx(function(e,t){if(t==="transparent")return t;var n=oT(t);return iT(Ty({},n,{saturation:IU(0,1,n.saturation+parseFloat(e))}))});Mx(function(e,t){return t==="transparent"?t:iT(Ty({},oT(t),{hue:parseFloat(e)}))});Mx(function(e,t){return t==="transparent"?t:iT(Ty({},oT(t),{lightness:parseFloat(e)}))});Mx(function(e,t){return t==="transparent"?t:iT(Ty({},oT(t),{saturation:parseFloat(e)}))});Mx(function(e,t){return t==="transparent"?t:GBt(parseFloat(e),"rgb(0, 0, 0)",t)});Mx(function(e,t){return t==="transparent"?t:GBt(parseFloat(e),"rgb(255, 255, 255)",t)});var rV=Mx(function(e,t){if(t==="transparent")return t;var n=Vk(t);return Wge(Ty({},n,{alpha:IU(0,1,+(100*(typeof n.alpha=="number"?n.alpha:1)-100*parseFloat(e)).toFixed(2)/100)}))}),YSt={0:"M0.301025 0.257813 L0.206593 0.283385 L0.122042 0.361307 L0.075923 0.474441 L0.064942 0.642221 L0.091296 0.78289 L0.159376 0.899463 L0.257104 0.961214 L0.344948 0.961214 L0.442678 0.899463 L0.510757 0.78289 L0.537111 0.642221 L0.526131 0.474441 L0.480012 0.361307 L0.39546 0.283385 L0.301025 0.257813",1:"M0.220426 0.40845 L0.381626 0.270996 L0.381626 0.948966",2:"M0.110409 0.39212 L0.125621 0.342293 L0.170571 0.295823 L0.244237 0.26431 L0.291518 0.257813 L0.373319 0.263799 L0.434683 0.290705 L0.468239 0.331966 L0.480292 0.379913 L0.479492 0.411806 L0.465088 0.465192 L0.402571 0.568988 L0.245134 0.766438 L0.07959 0.948045 L0.522462 0.948045",3:"M0.081606 0.345073 L0.119154 0.315633 L0.178996 0.284091 L0.255265 0.257813 L0.349133 0.263062 L0.43127 0.289348 L0.48994 0.336662 L0.525141 0.394491 L0.513407 0.457577 L0.466472 0.504892 L0.384334 0.541692 L0.290464 0.56272 L0.20833 0.573235 L0.290464 0.583749 L0.384334 0.610035 L0.466472 0.652092 L0.519274 0.709922 L0.531007 0.773007 L0.50754 0.841351 L0.454738 0.899179 L0.3726 0.946494 L0.310412 0.961214 L0.209503 0.959111 L0.127367 0.946494 L0.071046 0.929671",4:"M0.418494 0.270996 L0.048828 0.724199 L0.553224 0.724199 M0.414181 0.578167 L0.414181 0.94897",5:"M0.074951 0.270996 L0.074951 0.614701 L0.267655 0.5695 L0.405247 0.586502 L0.460002 0.617189 L0.498028 0.660731 L0.527101 0.779401 L0.513352 0.841049 L0.477274 0.889568 L0.406378 0.93463 L0.324445 0.958337 L0.247399 0.962139 L0.182516 0.949767 L0.130068 0.925508 L0.074951 0.875607 M0.074951 0.270996 L0.527101 0.270996",6:"M0.428549 0.257813 L0.341433 0.285053 L0.26073 0.312099 L0.192188 0.360182 L0.138902 0.410969 L0.098219 0.500422 L0.070249 0.584267 L0.067264 0.670716 L0.065164 0.756863 L0.087163 0.820973 L0.108168 0.861042 L0.157916 0.913131 L0.210981 0.948192 L0.29279 0.961214 L0.384548 0.956206 L0.456409 0.924151 L0.507262 0.881077 L0.5349 0.821975 L0.537111 0.771889 L0.521634 0.718798 L0.498418 0.67372 L0.463042 0.636657 L0.414398 0.613617 L0.34696 0.598591 L0.28284 0.595587 L0.215403 0.605604 L0.145756 0.641665 L0.109274 0.678729 L0.064942 0.724006",7:"M0.071534 0.270996 L0.530519 0.270996 L0.495935 0.291702 L0.477752 0.305407 L0.435186 0.346112 L0.412067 0.374136 L0.388565 0.40796 L0.365315 0.448098 L0.342943 0.495062 L0.322081 0.549366 L0.303364 0.611524 L0.287416 0.68205 L0.270077 0.80465 L0.26253 0.94897",8:"M0.286761 0.257813 L0.210684 0.27162 L0.1414 0.305622 L0.092494 0.382125 L0.111513 0.450128 L0.16857 0.502193 L0.228345 0.539382 L0.377781 0.594635 L0.470161 0.645637 L0.52586 0.706203 L0.538087 0.792269 L0.506841 0.87621 L0.438915 0.927212 L0.339743 0.961214 L0.263666 0.959089 L0.174004 0.929337 L0.102003 0.881523 L0.063965 0.811395 L0.066682 0.741266 L0.102003 0.671139 L0.180797 0.608448 L0.259591 0.580822 L0.358762 0.548945 L0.456576 0.49688 L0.486463 0.446941 L0.487822 0.362999 L0.453859 0.302434 L0.384574 0.265245 L0.286761 0.257813",9:"M0.511026 0.437812 L0.491026 0.347812 L0.451026 0.297812 L0.391026 0.267812 L0.311026 0.257813 L0.231026 0.267812 L0.161026 0.297812 L0.111026 0.347812 L0.091026 0.417812 L0.111026 0.487812 L0.161026 0.537812 L0.231026 0.567812 L0.311026 0.577812 L0.391026 0.557812 L0.451026 0.517812 L0.491026 0.477812 L0.511026 0.437812 M0.510026 0.438812 L0.434026 0.636812 L0.381026 0.777812 L0.337026 0.879812 L0.301026 0.957812","!":"M0.301026 0.270996 L0.301026 0.749566 M0.251466 0.94897 L0.350587 0.94897",'"':"M0.16504 0.270996 L0.16504 0.523022 M0.437013 0.270996 L0.437013 0.523022","#":"M0.20958 0.282227 L0.146515 0.949754 M0.461844 0.282227 L0.398779 0.949754 M0.032999 0.526969 L0.600587 0.452796 M0.001465 0.82366 L0.569055 0.749486",$:"M0.307121 0.240234 L0.307121 1.083502 M0.490031 0.415915 L0.404676 0.328075 L0.23396 0.310507 L0.136407 0.398347 L0.099828 0.521324 L0.124213 0.591596 L0.197379 0.644299 L0.429061 0.697003 L0.502224 0.749708 L0.526613 0.837547 L0.477836 0.960526 L0.355897 1.013228 L0.197379 0.99566 L0.112021 0.942957 L0.07544 0.837547","'":"M0.301026 0.270996 L0.301026 0.523022","(":"M0.413087 0.241211 L0.372337 0.28347 L0.331589 0.334184 L0.290838 0.393349 L0.25009 0.460965 L0.219528 0.528584 L0.199153 0.5962 L0.188966 0.655364 L0.199153 0.714529 L0.219528 0.782146 L0.25009 0.849764 L0.290838 0.91738 L0.331589 0.976544 L0.372337 1.027258 L0.413087 1.069491",")":"M0.188966 0.241211 L0.229716 0.28347 L0.270466 0.334184 L0.311213 0.393349 L0.351964 0.460965 L0.382526 0.528584 L0.4029 0.5962 L0.413087 0.655364 L0.4029 0.714529 L0.382526 0.782146 L0.351964 0.849764 L0.311213 0.91738 L0.270466 0.976544 L0.229716 1.027258 L0.188966 1.069491","*":"M0.301026 0.458702 L0.301026 0.681942 M0.301026 0.458702 L0.520997 0.536834 M0.301026 0.458702 L0.439954 0.257813 M0.301026 0.458702 L0.162098 0.257813 M0.301026 0.458702 L0.081055 0.536834","+":"M0.042969 0.66845 L0.559083 0.66845 M0.301023 0.428223 L0.301023 0.908661",",":"M0.38672 0.852051 L0.215333 1.030661 L0.301025 1.119971","-":"M0.173829 0.686035 L0.428224 0.686035",".":"M0.362549 0.851074 L0.239503 0.851074","/":"M0.062501 1.035249 L0.539551 0.270996","<":"M0.559083 0.441895 L0.042969 0.66939 L0.042969 0.66939 L0.559083 0.896902","=":"M0.042969 0.545898 L0.559083 0.545898 M0.042969 0.80837 L0.559083 0.80837",">":"M0.042969 0.441895 L0.559083 0.66939 L0.559083 0.66939 L0.042969 0.896902",A:"M0.018067 0.94897 L0.290179 0.270996 L0.583986 0.94897 M0.155303 0.684521 L0.433548 0.684521",B:"M0.063965 0.94897 L0.063965 0.278953 L0.209356 0.270996 L0.342486 0.294394 L0.432179 0.37292 L0.418224 0.48773 L0.312686 0.549166 L0.084728 0.575531 L0.306377 0.589434 L0.468877 0.647456 L0.538087 0.736658 L0.5324 0.85202 L0.501247 0.902983 L0.42355 0.944398 L0.063965 0.94897",C:"M0.529054 0.419847 L0.498425 0.345196 L0.442238 0.292341 L0.33583 0.257813 L0.257199 0.268357 L0.187906 0.303748 L0.120243 0.385432 L0.072998 0.599844 L0.110073 0.815385 L0.165381 0.902183 L0.222883 0.942801 L0.334904 0.961214 L0.43253 0.937679 L0.504816 0.868999 L0.529054 0.772065",D:"M0.064454 0.94897 L0.071838 0.285078 L0.171217 0.270996 L0.247348 0.272633 L0.37101 0.306078 L0.462461 0.378304 L0.514748 0.475555 L0.535591 0.576392 L0.537599 0.652313 L0.528065 0.717381 L0.508562 0.772419 L0.445948 0.855695 L0.362356 0.90871 L0.225203 0.945862 L0.064454 0.94897",E:"M0.080078 0.270996 L0.080078 0.94897 M0.080078 0.270996 L0.521974 0.270996 M0.080078 0.609981 L0.389405 0.609981 M0.080078 0.94897 L0.521974 0.94897",F:"M0.086426 0.270996 L0.086426 0.94897 M0.091304 0.275607 L0.515626 0.275607 M0.091304 0.607677 L0.447344 0.607677",G:"M0.498034 0.284943 L0.374621 0.257813 L0.244219 0.268648 L0.160577 0.311997 L0.094556 0.398116 L0.056397 0.58404 L0.076752 0.785532 L0.120865 0.858197 L0.188947 0.916734 L0.271008 0.953591 L0.357069 0.961214 L0.43715 0.932047 L0.501262 0.858539 L0.545656 0.648611 L0.329595 0.648131",H:"M0.066895 0.270996 L0.066895 0.94897 M0.066895 0.595658 L0.530009 0.595658 M0.535157 0.270996 L0.535157 0.94897",I:"M0.301026 0.270996 L0.301026 0.94897",J:"M0.506839 0.270996 L0.507814 0.782193 L0.498468 0.846168 L0.480733 0.880789 L0.455864 0.90832 L0.426095 0.929408 L0.360746 0.954812 L0.302508 0.962139 L0.223573 0.953638 L0.16538 0.930312 L0.137072 0.907715 L0.116428 0.880312 L0.102822 0.848819 L0.095633 0.813947 L0.094239 0.776413",K:"M0.035401 0.270996 L0.035401 0.94897 M0.502258 0.316194 L0.035401 0.687823 M0.212484 0.582361 L0.566652 0.933903",L:"M0.07544 0.270996 L0.07544 0.94897 L0.526613 0.94897",M:"M0.042481 0.94897 L0.042481 0.270996 L0.301027 0.712492 L0.559571 0.270996 L0.559571 0.94897",N:"M0.067871 0.94897 L0.067871 0.270996 L0.534181 0.94897 L0.525031 0.270996",O:"M0.287293 0.961214 L0.19843 0.933567 L0.1172 0.849451 L0.057129 0.563945 L0.114348 0.350255 L0.18455 0.289392 L0.306101 0.257813 L0.42054 0.29572 L0.487543 0.365003 L0.544923 0.625294 L0.516366 0.789624 L0.465476 0.884596 L0.375084 0.949287 L0.287293 0.961214",P:"M0.070557 0.94897 L0.070557 0.28379 L0.20704 0.270996 L0.329134 0.278993 L0.408525 0.300514 L0.444022 0.317908 L0.500637 0.368929 L0.525796 0.423728 L0.531496 0.50384 L0.508934 0.554205 L0.473724 0.582043 L0.417577 0.604365 L0.336375 0.620372 L0.226014 0.629268 L0.082368 0.630258",Q:"M0.282435 1.050813 L0.195447 1.019646 L0.115933 0.924817 L0.057129 0.602943 L0.113139 0.362034 L0.18186 0.293418 L0.300844 0.257813 L0.412868 0.300553 L0.478457 0.37866 L0.534625 0.672103 L0.506671 0.857367 L0.456855 0.964437 L0.368371 1.037368 L0.282435 1.050813 M0.341225 0.815559 L0.544923 1.070653",R:"M0.034912 0.944112 L0.034912 0.288556 L0.227127 0.270996 L0.362038 0.276867 L0.443423 0.294907 L0.477644 0.309614 L0.505809 0.328757 L0.526616 0.352817 L0.544963 0.418061 L0.543241 0.475921 L0.524463 0.517817 L0.49076 0.546518 L0.444265 0.564799 L0.355195 0.578739 L0.047653 0.589627 M0.303054 0.617306 L0.56714 0.94897",S:"M0.483037 0.364333 L0.407613 0.267477 L0.22883 0.257813 L0.128623 0.327565 L0.087712 0.455539 L0.104656 0.518727 L0.168054 0.573307 L0.41928 0.617318 L0.503796 0.669342 L0.535157 0.759324 L0.493846 0.900055 L0.367668 0.961214 L0.205436 0.956661 L0.116711 0.907038 L0.066895 0.790334",T:"M0.022949 0.270996 L0.579103 0.270996 M0.309284 0.270996 L0.309284 0.94897",U:"M0.072022 0.270996 L0.07308 0.648875 L0.080372 0.75167 L0.099024 0.827813 L0.134786 0.885729 L0.181571 0.924023 L0.251464 0.95168 L0.339655 0.962139 L0.401553 0.951668 L0.45232 0.924086 L0.482701 0.891771 L0.495745 0.870529 L0.515699 0.81637 L0.525014 0.744626 L0.530031 0.272017",V:"M0.027832 0.270996 L0.320083 0.94897 L0.57422 0.270996",W:"M0 0.270996 L0.079799 0.940377 L0.285198 0.472884 L0.505255 0.94897 L0.602052 0.270996",X:"M0.009034 0.270996 L0.586805 0.94897 M0.593019 0.270996 L0.015246 0.94897",Y:"M0.018067 0.270996 L0.293132 0.574135 M0.583986 0.271959 L0.294954 0.57606 L0.305277 0.94897",Z:"M0.053711 0.270996 L0.548341 0.270996 L0.053711 0.94897 L0.548341 0.94897","[":"M0.404542 0.240234 L0.197511 0.240234 L0.197511 1.069424 L0.404542 1.069424","\\":"M0.062501 0.270996 L0.539551 1.035249","]":"M0.19751 0.240234 L0.404542 0.240234 L0.404542 1.069424 L0.19751 1.069424","^":"M0.035156 0.523931 L0.301024 0.270996 L0.566896 0.523931",_:"M0 1.160601 L0.602052 1.160601",a:"M0.527101 0.439941 L0.527101 0.973965 M0.527101 0.553824 L0.451366 0.477535 L0.376759 0.439941 L0.263722 0.439941 L0.187989 0.477535 L0.112255 0.553824 L0.074951 0.66881 L0.074951 0.745099 L0.112255 0.85898 L0.187989 0.93527 L0.263722 0.973965 L0.376759 0.973965 L0.451366 0.93527 L0.527101 0.85898",b:"M0.07666 0.240234 L0.07666 0.959985 M0.07666 0.582737 L0.151822 0.514237 L0.225865 0.480483 L0.338045 0.480483 L0.413211 0.514237 L0.488374 0.582737 L0.525392 0.685983 L0.525392 0.754485 L0.488374 0.856739 L0.413211 0.92524 L0.338045 0.959985 L0.225865 0.959985 L0.151822 0.92524 L0.07666 0.856739",c:"M0.512452 0.553823 L0.441624 0.477535 L0.371854 0.439941 L0.26614 0.439941 L0.195312 0.477535 L0.124486 0.553823 L0.0896 0.668808 L0.0896 0.745099 L0.124486 0.858979 L0.195312 0.93527 L0.26614 0.973965 L0.371854 0.973965 L0.441624 0.93527 L0.512452 0.858979",d:"M0.525392 0.240234 L0.525392 0.959985 M0.525392 0.582737 L0.450232 0.514237 L0.376189 0.480483 L0.264006 0.480483 L0.188844 0.514237 L0.11368 0.582737 L0.076661 0.685983 L0.076661 0.754485 L0.11368 0.856739 L0.188844 0.92524 L0.264006 0.959985 L0.376189 0.959985 L0.450232 0.92524 L0.525392 0.856739",e:"M0.059571 0.668808 L0.542482 0.668808 M0.542482 0.592521 L0.502641 0.516231 L0.461594 0.477535 L0.381914 0.439941 L0.261186 0.439941 L0.180299 0.477535 L0.099412 0.553823 L0.059571 0.668808 L0.059571 0.745099 L0.099412 0.858979 L0.180299 0.93527 L0.261186 0.973965 L0.381914 0.973965 L0.461594 0.93527 L0.542482 0.858979",f:"M0.512941 0.240234 L0.406984 0.240234 L0.301026 0.274346 L0.248047 0.374731 L0.248047 0.946817 M0.089112 0.476088 L0.459965 0.476088",g:"M0.525392 0.439941 L0.525392 0.989395 L0.488373 1.091918 L0.45023 1.126757 L0.376189 1.160601 L0.264004 1.160601 L0.188844 1.126757 L0.113681 1.058075 L0.076661 0.954555 M0.525392 0.542467 L0.45023 0.473786 L0.376189 0.439941 L0.264004 0.439941 L0.188844 0.473786 L0.113681 0.542467 L0.076661 0.645988 L0.076661 0.714669 L0.113681 0.817193 L0.188844 0.885875 L0.264004 0.920713 L0.376189 0.920713 L0.45023 0.885875 L0.525392 0.817193",h:"M0.092041 0.240234 L0.092041 0.946817 M0.092041 0.61058 L0.205937 0.509225 L0.282214 0.476086 L0.396109 0.476086 L0.47187 0.509225 L0.510011 0.61058 L0.510011 0.946817",i:"M0.261026 0.240234 L0.341026 0.240234 M0.300978 0.476089 L0.300978 0.946817",j:"M0.3853 0.240234 L0.447023 0.240234 M0.416159 0.465708 L0.416159 1.011689 L0.383887 1.108586 L0.252832 1.140264 L0.15503 1.108586",k:"M0.065186 0.240234 L0.065186 0.946817 M0.493824 0.476086 L0.065186 0.812323 M0.236758 0.677829 L0.536867 0.946817",l:"M0.301026 0.234863 L0.301026 0.946441",m:"M0.050538 0.439941 L0.050538 0.960796 M0.050538 0.588758 L0.114405 0.476607 L0.157178 0.439941 L0.236864 0.439941 L0.279637 0.476607 L0.32241 0.588758 L0.32241 0.960796 M0.32241 0.588758 L0.386281 0.476607 L0.428467 0.439941 L0.50874 0.439941 L0.551515 0.476607 L0.551515 0.960796",n:"M0.092041 0.439941 L0.092041 0.960796 M0.092041 0.588758 L0.205936 0.476607 L0.282216 0.439941 L0.396113 0.439941 L0.471871 0.476607 L0.510011 0.588758 L0.510011 0.960796",o:"M0.247175 0.439941 L0.175178 0.477535 L0.103186 0.553823 L0.066895 0.668808 L0.066895 0.745099 L0.103186 0.858979 L0.175178 0.93527 L0.247175 0.973965 L0.354874 0.973965 L0.426872 0.93527 L0.498866 0.858979 L0.535157 0.745099 L0.535157 0.668808 L0.498866 0.553823 L0.426872 0.477535 L0.354874 0.439941 L0.247175 0.439941",p:"M0.076904 0.439941 L0.076904 1.154244 M0.076904 0.541563 L0.151986 0.473487 L0.225944 0.439941 L0.338005 0.439941 L0.413087 0.473487 L0.488166 0.541563 L0.525148 0.644169 L0.525148 0.712246 L0.488166 0.813866 L0.413087 0.881942 L0.338005 0.916471 L0.225944 0.916471 L0.151986 0.881942 L0.076904 0.813866",q:"M0.525148 0.441895 L0.525148 1.156195 M0.525148 0.5435 L0.450067 0.47544 L0.376106 0.441895 L0.264042 0.441895 L0.188966 0.47544 L0.113885 0.5435 L0.076905 0.646108 L0.076905 0.714187 L0.113885 0.815809 L0.188966 0.883886 L0.264042 0.918418 L0.376106 0.918418 L0.450067 0.883886 L0.525148 0.815809",r:"M0.107422 0.439941 L0.107422 0.960796 M0.107422 0.663164 L0.155824 0.551014 L0.252626 0.476607 L0.349428 0.439941 L0.49463 0.439941",s:"M0.475556 0.477535 L0.400757 0.439941 L0.276092 0.439941 L0.176361 0.477535 L0.101563 0.553823 L0.101563 0.630112 L0.176361 0.668808 L0.301024 0.668808 L0.425688 0.745099 L0.50049 0.821387 L0.50049 0.897677 L0.425688 0.93527 L0.325956 0.973965 L0.201295 0.973965 L0.126496 0.93527 L0.101563 0.858979",t:"M0.246032 0.297852 L0.246032 0.826549 L0.301023 0.919323 L0.411011 0.950848 L0.520997 0.950848 M0.081055 0.515799 L0.466004 0.515799",u:"M0.092041 0.454102 L0.092041 0.826134 L0.13018 0.937211 L0.205936 0.974954 L0.319832 0.974954 L0.396113 0.937211 L0.510011 0.826134 M0.510011 0.454102 L0.510011 0.974954",v:"M0.048828 0.453125 L0.301026 0.961719 M0.553224 0.453125 L0.301026 0.961719",w:"M0 0.453125 L0.150512 0.961719 M0.301024 0.453125 L0.150512 0.961719 M0.301024 0.453125 L0.451539 0.961719 M0.602052 0.453125 L0.451539 0.961719",x:"M0.03711 0.453125 L0.564943 0.961719 M0.564943 0.453125 L0.03711 0.961719",y:"M0.084618 0.453125 L0.320232 0.921476 M0.55713 0.453125 L0.320232 0.921476 L0.242119 1.055289 L0.163369 1.122196 L0.084618 1.155166 L0.044922 1.155166",z:"M0.505373 0.452148 L0.09668 0.961651 M0.09668 0.452148 L0.505373 0.452148 M0.09668 0.961651 L0.505373 0.961651"},VSt={};for(let e in YSt){VSt[e]=[];let t=YSt[e].split("M").slice(1).map((n)=>n.split("L").map((o)=>o.trim().split(" ").map(parseFloat)));for(let n of t)for(let o=0;o<n.length-1;o++)VSt[e].push({x1:n[o][0],y1:1-n[o][1],x2:n[o+1][0],y2:1-n[o+1][1]})}var Sk=(e,t)=>({...e,rects:[...e.rects??[],...t.rects??[]],points:[...e.points??[],...t.points??[]],lines:[...e.lines??[],...t.lines??[]],infiniteLines:[...e.infiniteLines??[],...t.infiniteLines??[]],polygons:[...e.polygons??[],...t.polygons??[]],circles:[...e.circles??[],...t.circles??[]],arrows:[...e.arrows??[],...t.arrows??[]],texts:[...e.texts??[],...t.texts??[]]});function gDe(e,t){if(e.points)for(let n of e.points)n.step=t;if(e.lines)for(let n of e.lines)n.step=t;if(e.infiniteLines)for(let n of e.infiniteLines)n.step=t;if(e.polygons)for(let n of e.polygons)n.step=t;if(e.rects)for(let n of e.rects)n.step=t;if(e.circles)for(let n of e.circles)n.step=t;if(e.texts)for(let n of e.texts)n.step=t;if(e.arrows)for(let n of e.arrows)n.step=t;return e}var Js=class{MAX_ITERATIONS=1e5;solved=!1;failed=!1;iterations=0;progress=0;error=null;activeSubSolver;failedSubSolvers;timeToSolve;stats={};_setupDone=!1;getSolverName(){return this.constructor.name}setup(){this._setupDone||(this._setup(),this._setupDone=!0)}_setup(){}step(){if(this._setupDone||this.setup(),!this.solved&&!this.failed){this.iterations++;try{this._step()}catch(e){throw this.error=`${this.getSolverName()} error: ${e}`,this.failed=!0,e}!this.solved&&this.iterations>=this.MAX_ITERATIONS&&this.tryFinalAcceptance(),!this.solved&&this.iterations>=this.MAX_ITERATIONS&&(this.error=`${this.getSolverName()} ran out of iterations`,this.failed=!0),"computeProgress"in this&&(this.progress=this.computeProgress())}}_step(){}getConstructorParams(){throw Error("getConstructorParams not implemented")}getOutput(){return null}solve(){let e=Date.now();for(;!this.solved&&!this.failed;)this.step();let t=Date.now();this.timeToSolve=t-e}visualize(){return{lines:[],points:[],rects:[],circles:[]}}tryFinalAcceptance(){}preview(){return{lines:[],points:[],rects:[],circles:[]}}};function bh(e,t,n,o={}){return{solverName:e,solverClass:t,getConstructorParams:n,onSolved:o.onSolved}}var KE=class extends Js{startTimeOfStage={};endTimeOfStage={};timeSpentOnStage={};firstIterationOfStage={};currentPipelineStageIndex=0;inputProblem;pipelineOutputs={};constructor(e){super(),this.inputProblem=e,this.MAX_ITERATIONS=1e6}_step(){let e=this.pipelineDef[this.currentPipelineStageIndex];if(!e)return void(this.solved=!0);if(this.activeSubSolver){if(this.activeSubSolver.step(),this.activeSubSolver.solved){this.endTimeOfStage[e.solverName]=performance.now(),this.timeSpentOnStage[e.solverName]=this.endTimeOfStage[e.solverName]-this.startTimeOfStage[e.solverName];let n=this.activeSubSolver.getOutput();n!==null&&(this.pipelineOutputs[e.solverName]=n),e.onSolved?.(this),this.activeSubSolver=null,this.currentPipelineStageIndex++}else this.activeSubSolver.failed&&(this.error=this.activeSubSolver?.error,this.failed=!0,this.activeSubSolver=null);return}let t=e.getConstructorParams(this);this.activeSubSolver=new e.solverClass(...t),this[e.solverName]=this.activeSubSolver,this.timeSpentOnStage[e.solverName]=0,this.startTimeOfStage[e.solverName]=performance.now(),this.firstIterationOfStage[e.solverName]=this.iterations}solveUntilStage(e){for(;this.getCurrentStageName().toLowerCase()!==e.toLowerCase()&&(this.step(),!this.failed&&!this.solved););}getCurrentStageName(){return this.pipelineDef[this.currentPipelineStageIndex]?.solverName??"none"}getStageProgress(){let e=this.pipelineDef.length;if(e===0)return 1;let t=this.activeSubSolver?.progress??0;return(this.currentPipelineStageIndex+t)/e}getStageStats(){let e={};for(let t of this.pipelineDef){let n=this.timeSpentOnStage[t.solverName]||0,o=this.firstIterationOfStage[t.solverName]||0,i=this.iterations,r=t.solverName===this.getCurrentStageName()?i-o:0,s=this.currentPipelineStageIndex>this.pipelineDef.findIndex((a)=>a.solverName===t.solverName);e[t.solverName]={timeSpent:n,iterations:r,completed:s}}return e}initialVisualize(){return null}finalVisualize(){return null}visualize(){if(!this.solved&&this.activeSubSolver)return this.activeSubSolver.visualize();let e=0,t=this.initialVisualize();t&&(gDe(t,0),e=1);let n=null;this.solved&&(n=this.finalVisualize());let o=[t].filter(Boolean).concat(this.pipelineDef.map((i,r)=>{let s=this[i.solverName],a=s?.visualize();return a?(gDe(a,r+e),a):null}).filter(Boolean));return o.length===0?{points:[],rects:[],lines:[],circles:[],texts:[]}:(this.solved&&n&&(gDe(n,o.length+e+1),o.push(n)),o.length===1?o[0]:{points:o.flatMap((i)=>i.points||[]),rects:o.flatMap((i)=>i.rects||[]),lines:o.flatMap((i)=>i.lines||[]),circles:o.flatMap((i)=>i.circles||[]),texts:o.flatMap((i)=>i.texts||[])})}preview(){return this.activeSubSolver?this.activeSubSolver.preview():super.preview()}computeProgress(){return this.getStageProgress()}getStageOutput(e){return this.pipelineOutputs[e]}getAllOutputs(){return{...this.pipelineOutputs}}hasStageOutput(e){return e in this.pipelineOutputs}getSolver(e){return this[e]}},q9o=class{constructor(e=1/0,t=Float64Array,n=Uint32Array){let o=e!==1/0;this.ids=o?new n(e):[],this.values=o?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 o=n-1>>1,i=this.values[o];if(t>=i)break;this.ids[n]=this.ids[o],this.values[n]=i,n=o}this.ids[n]=e,this.values[n]=t}pop(){if(this.length===0)return;let e=this.ids,t=this.values,n=e[0],o=--this.length;if(o>0){let i=e[o],r=t[o],s=0,a=o>>1;for(;s<a;){let c=1+(s<<1),l=c+1,d=c+(+(l<o)&+(t[l]<t[c]));if(t[d]>=r)break;e[s]=e[d],t[s]=t[d],s=d}e[s]=i,t[s]=r}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)}},USt=[Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array],Vm=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[o,i]=new Uint8Array(t,n+0,2);if(o!==251)throw Error("Data does not appear to be in a Flatbush format.");let r=i>>4;if(r!==3)throw Error(`Got v${r} data when expected v3.`);let s=USt[15&i];if(!s)throw Error("Unrecognized array type.");let[a]=new Uint16Array(t,n+2,1),[c]=new Uint32Array(t,n+4,1);return new e(c,a,s,void 0,t,n)}constructor(t,n=16,o=Float64Array,i=ArrayBuffer,r,s=0){if(t===void 0)throw Error("Missing required argument: numItems.");if(isNaN(t)||t<=0)throw Error(`Unexpected numItems value: ${t}.`);this.numItems=+t,this.nodeSize=Math.min(Math.max(+n,2),65535),this.byteOffset=s;let a=t,c=a;this._levelBounds=[4*a];do a=Math.ceil(a/this.nodeSize),c+=a,this._levelBounds.push(4*c);while(a!==1);this.ArrayType=o,this.IndexArrayType=c<16384?Uint16Array:Uint32Array;let l=USt.indexOf(o),d=4*c*o.BYTES_PER_ELEMENT;if(l<0)throw Error(`Unexpected typed array class: ${o}.`);let u=o,h=this.IndexArrayType;if(r)this.data=r,this._boxes=new u(r,s+8,4*c),this._indices=new h(r,s+8+d,c),this._pos=4*c,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 A=this.data=new i(8+d+c*this.IndexArrayType.BYTES_PER_ELEMENT);this._boxes=new u(A,8,4*c),this._indices=new h(A,8+d,c),this._pos=0,this.minX=1/0,this.minY=1/0,this.maxX=-1/0,this.maxY=-1/0,new Uint8Array(A,0,2).set([251,48+l]),new Uint16Array(A,2,1)[0]=n,new Uint32Array(A,4,1)[0]=t}this._queue=new q9o}add(t,n,o=t,i=n){let r=this._pos,s=r>>2,a=this._boxes;return this._indices[s]=s,a[r]=t,a[r+1]=n,a[r+2]=o,a[r+3]=i,this._pos=r+4,t<this.minX&&(this.minX=t),n<this.minY&&(this.minY=n),o>this.maxX&&(this.maxX=o),i>this.maxY&&(this.maxY=i),s}finish(){if(this._pos>>2!==this.numItems)throw Error(`Added ${this._pos>>2} items when expected ${this.numItems}.`);let t=this._boxes;if(this.numItems<=this.nodeSize)return t[this._pos++]=this.minX,t[this._pos++]=this.minY,t[this._pos++]=this.maxX,void(t[this._pos++]=this.maxY);let{numItems:n,minX:o,minY:i,nodeSize:r,_indices:s,_levelBounds:a}=this,c=this.maxX-o||1,l=this.maxY-i||1,d=new Int32Array(n),u=65535/c,h=65535/l;for(let m=0,p=0;m<n;m++){let g=t[p++],_=t[p++],f=u*((g+t[p++])/2-o)|0,y=h*((_+t[p++])/2-i)|0;d[m]=Z9o(f,y)}(function(m,p,g,_,f,y){let x=[_,f];for(;x.length;){let C=x.pop()||0,I=x.pop()||0;if(C-I<=y&&Math.floor(I/y)>=Math.floor(C/y))continue;let b=m[I],P=m[I+C>>1],E=m[C],B=b>P!=b>E?b:P<b!=P<E?P:E,w=I-1,T=C+1;for(;;){do w++;while(m[w]<B);do T--;while(m[T]>B);if(w>=T)break;$9o(m,p,g,w,T)}x.push(I,T,T+1,C)}})(d,t,s,0,n-1,r);let A=4*n;for(let m=0,p=0;m<a.length-1;m++){let g=a[m];for(;p<g;){let _=p,f=t[p++],y=t[p++],x=t[p++],C=t[p++];for(let I=1;I<r&&p<g;I++)f=Math.min(f,t[p++]),y=Math.min(y,t[p++]),x=Math.max(x,t[p++]),C=Math.max(C,t[p++]);s[A>>2]=_,t[A++]=f,t[A++]=y,t[A++]=x,t[A++]=C}}this._pos=A}search(t,n,o,i,r){if(this._pos!==this._boxes.length)throw Error("Data not yet indexed - call index.finish().");let{_boxes:s,_levelBounds:a,_indices:c,nodeSize:l}=this,d=4*this.numItems,u=s.length-4,h=a.length-1,A=[],m=[],p=!1;for(;u!==void 0;){let g=Math.min(u+4*l,a[h]),_=u>=d;if(p)this._collectContained(u,g,h,d,m,r);else for(let f=u;f<g;f+=4){let y=s[f];if(o<y)continue;let x=s[f+1];if(i<x)continue;let C=s[f+2];if(t>C)continue;let I=s[f+3];if(n>I)continue;let b=0|c[f>>2];if(_){let P=+(t<=y&&n<=x&&o>=C&&i>=I);A.push(b|P,h-1)}else(r===void 0||r(b,y,x,C,I))&&m.push(b)}h=A.pop(),u=A.pop(),u!==void 0&&(p=!(1&~u),u&=-2)}return m}_collectContained(t,n,o,i,r,s){let a=this._boxes,c=this._indices,l=t;for(let u=o;u>0;u--)l=c[l>>2];let d=Math.min(l+(n-t)*this.nodeSize**o,i);if(s===void 0)for(;l<d;l+=4)r.push(0|c[l>>2]);else for(;l<d;l+=4){let u=0|c[l>>2];s(u,a[l],a[l+1],a[l+2],a[l+3])&&r.push(u)}}neighbors(t,n,o=1/0,i=1/0,r){if(this._pos!==this._boxes.length)throw Error("Data not yet indexed - call index.finish().");let{_boxes:s,_levelBounds:a,_indices:c,_queue:l,nodeSize:d}=this,u=4*this.numItems,h=4*d,A=[],m=o===1,p=i*i;for(l.push(s.length-4<<1,0);l.length;){let g=l.ids[0];if(1&g){if(l.pop(),A.push(g>>1),A.length===o)break;continue}l.pop();let _=g>>1,f=_<u,y=Math.min(_+h,J9o(_,a));for(let x=_;x<y;x+=4){let C=s[x],I=s[x+1],b=s[x+2],P=s[x+3],E=Math.max(Math.max(C-t,t-b),0),B=Math.max(Math.max(I-n,n-P),0),w=E*E+B*B;if(w>p)continue;let T=0|c[x>>2];f?(r===void 0||r(T))&&(l.push(T<<1|1,w),m&&w<p&&(p=w)):l.push(T<<1,w)}}return l.clear(),A}};function J9o(e,t){let n=0,o=t.length-1;for(;n<o;){let i=n+o>>1;t[i]>e?o=i:n=i+1}return t[n]}function $9o(e,t,n,o,i){let r=e[o];e[o]=e[i],e[i]=r;let s=4*o,a=4*i,c=t[s],l=t[s+1],d=t[s+2],u=t[s+3];t[s]=t[a],t[s+1]=t[a+1],t[s+2]=t[a+2],t[s+3]=t[a+3],t[a]=c,t[a+1]=l,t[a+2]=d,t[a+3]=u;let h=n[o];n[o]=n[i],n[i]=h}function Z9o(e,t){let n=e^t,o=65535^n,i=65535^(e|t),r=e&(65535^t),s=n|o>>1,a=n>>1^n,c=i^i>>1^o&r>>1,l=r^n&i>>1^r>>1;return n=s&s>>2^a&a>>2,o=s&a>>2^a&(s^a)>>2,i=c^s&c>>2^a&l>>2,r=l^a&c>>2^(s^a)&l>>2,s=n&n>>4^o&o>>4,a=n&o>>4^o&(n^o)>>4,c=i^n&i>>4^o&r>>4,l=r^o&i>>4^(n^o)&r>>4,i=c^s&c>>8^a&l>>8,r=l^a&c>>8^(s^a)&l>>8,i^=i>>1,r^=r>>1,n=e^t,o=r|65535^(n|i),n=16711935&(n|n<<8),n=252645135&(n|n<<4),n=858993459&(n|n<<2),n=1431655765&(n|n<<1),o=16711935&(o|o<<8),o=252645135&(o|o<<4),o=858993459&(o|o<<2),o=1431655765&(o|o<<1),((o<<1|n)>>>0)-2147483648}var rS=0.0001,ZZ=[{facingDirection:"x-",dx:-1,dy:0,startX:-0.5,startY:0.5,endX:-0.5,endY:-0.5},{facingDirection:"x+",dx:1,dy:0,startX:0.5,startY:0.5,endX:0.5,endY:-0.5},{facingDirection:"y-",dx:0,dy:-1,startX:-0.5,startY:-0.5,endX:0.5,endY:-0.5},{facingDirection:"y+",dx:0,dy:1,startX:0.5,startY:0.5,endX:-0.5,endY:0.5}],WSt={"x-":ZZ.find((e)=>e.facingDirection==="x-"),"x+":ZZ.find((e)=>e.facingDirection==="x+"),"y-":ZZ.find((e)=>e.facingDirection==="y-"),"y+":ZZ.find((e)=>e.facingDirection==="y+")},ewo={"x-":{x:-1,y:0},"x+":{x:1,y:0},"y-":{x:0,y:-1},"y+":{x:0,y:1}},fDe=(e,t)=>{let{dir:n,amt:o}=t,i=ewo[n];return e.map((r)=>({x:r.x+i.x*o,y:r.y+i.y*o}))},eee=0.0001;function XSt(e){let t=[];for(let n of e)for(let o of ZZ){let i={x:n.center.x+n.width*o.startX,y:n.center.y+n.height*o.startY},r={x:n.center.x+n.width*o.endX,y:n.center.y+n.height*o.endY};i.x>r.x&&([i,r]=[r,i]),Math.abs(i.x-r.x)<eee&&i.y>r.y&&([i,r]=[r,i]);for(let s of n.availableZ)t.push({parent:n,start:i,end:r,facingDirection:o.facingDirection,z:s})}return t}var two=class extends Js{constructor(e){super(),this.input=e;let t=this.input.targetMeshNodes??this.input.allMeshNodes,n=new Set(t.map((i)=>i.capacityMeshNodeId)),o=this.input.allMeshNodes.filter((i)=>!n.has(i.capacityMeshNodeId));this.unprocessedEdges=XSt(t),this.allEdges=[...this.unprocessedEdges,...XSt(o)],this.edgeSpatialIndex=new Vm(this.allEdges.length);for(let i of this.allEdges)this.edgeSpatialIndex.add(i.start.x,i.start.y,i.end.x,i.end.y);this.edgeSpatialIndex.finish()}input;allEdges;unprocessedEdges=[];segmentsWithAdjacentEmptySpace=[];edgeSpatialIndex;lastCandidateEdge=null;lastOverlappingEdges=null;lastUncoveredSegments=null;_step(){if(this.unprocessedEdges.length===0)return this.solved=!0,this.lastCandidateEdge=null,this.lastOverlappingEdges=null,void(this.lastUncoveredSegments=null);let e=this.unprocessedEdges.shift();this.lastCandidateEdge=e;let t=this.edgeSpatialIndex.search(e.start.x-eee,e.start.y-eee,e.end.x+eee,e.end.y+eee).map((o)=>this.allEdges[o]).filter((o)=>o.z===e.z);this.lastOverlappingEdges=t;let n=function(o,i){let r=Math.abs(o.start.y-o.end.y)<rS,s=Math.abs(o.start.x-o.end.x)<rS;if(!r&&!s)return[];let a=r?"x":"y",c=r?"y":"x",l=o.start[c],d=o.start[a],u=o.end[a],h=Math.min(d,u),A=Math.max(d,u),m=(y)=>Math.max(h,Math.min(A,y)),p=[];for(let y of i){if(y===o)continue;let x=Math.abs(y.start.y-y.end.y)<rS,C=Math.abs(y.start.x-y.end.x)<rS;if(a==="x"&&!x)continue;if(a==="y"&&!C)continue;if(Math.abs(y.start[c]-l)>rS)continue;let I=Math.min(y.start[a],y.end[a]),b=Math.max(y.start[a],y.end[a]),P=m(I),E=m(b);E-P>rS&&p.push({s:P,e:E})}if(p.length===0)return[{...o,start:{...o.start},end:{...o.end}}];p.sort((y,x)=>y.s-x.s);let g=[];for(let y of p){let x=g[g.length-1];!x||y.s>x.e+rS?g.push({...y}):x.e=Math.max(x.e,y.e)}let _=[],f=h;for(let y of g)if(y.s>f+rS&&_.push({s:f,e:y.s}),f=Math.max(f,y.e),f>=A-rS)break;return A>f+rS&&_.push({s:f,e:A}),_.length===0?[]:_.filter((y)=>y.e-y.s>rS).map((y)=>{let x=a==="x"?{x:y.s,y:l}:{x:l,y:y.s},C=a==="x"?{x:y.e,y:l}:{x:l,y:y.e};return{parent:o.parent,facingDirection:o.facingDirection,start:x,end:C,z:o.z}})}(e,t);this.lastUncoveredSegments=n,this.segmentsWithAdjacentEmptySpace.push(...n)}getOutput(){return{segmentsWithAdjacentEmptySpace:this.segmentsWithAdjacentEmptySpace}}visualize(){let e={title:"FindSegmentsWithAdjacentEmptySpace",coordinateSystem:"cartesian",rects:[],points:[],lines:[],circles:[],infiniteLines:[],polygons:[],arrows:[],texts:[]};for(let t of this.input.allMeshNodes)e.rects.push({center:t.center,width:t.width,height:t.height,stroke:"rgba(0, 0, 0, 0.1)"});for(let t of this.unprocessedEdges)e.lines.push({points:fDe([t.start,t.end],{dir:t.facingDirection,amt:-0.1}),strokeColor:"rgba(0, 0, 255, 0.5)",strokeDash:"5 5"});for(let t of this.segmentsWithAdjacentEmptySpace)e.lines.push({points:[t.start,t.end],strokeColor:"rgba(0,255,0, 0.5)"});if(this.lastCandidateEdge&&e.lines.push({points:[this.lastCandidateEdge.start,this.lastCandidateEdge.end],strokeColor:"blue"}),this.lastOverlappingEdges)for(let t of this.lastOverlappingEdges)e.lines.push({points:fDe([t.start,t.end],{dir:t.facingDirection,amt:0.05}),strokeColor:"red",strokeDash:"2 2"});if(this.lastUncoveredSegments)for(let t of this.lastUncoveredSegments)e.lines.push({points:fDe([t.start,t.end],{dir:t.facingDirection,amt:-0.05}),strokeColor:"green",strokeDash:"2 2"});return e}};function YBt(e,t,n=0,o=e.length-1,i=nwo){for(;o>n;){if(o-n>600){let c=o-n+1,l=t-n+1,d=Math.log(c),u=0.5*Math.exp(2*d/3),h=0.5*Math.sqrt(d*u*(c-u)/c)*(l-c/2<0?-1:1);YBt(e,t,Math.max(n,Math.floor(t-l*u/c+h)),Math.min(o,Math.floor(t+(c-l)*u/c+h)),i)}let r=e[t],s=n,a=o;for(EZ(e,n,t),i(e[o],r)>0&&EZ(e,n,o);s<a;){for(EZ(e,s,a),s++,a--;i(e[s],r)<0;)s++;for(;i(e[a],r)>0;)a--}i(e[n],r)===0?EZ(e,n,a):(a++,EZ(e,a,o)),a<=t&&(n=a+1),t<=a&&(o=a-1)}}function EZ(e,t,n){let o=e[t];e[t]=e[n],e[n]=o}function nwo(e,t){return e<t?-1:e>t?1:0}var lL=class{constructor(e=9){this._maxEntries=Math.max(4,e),this._minEntries=Math.max(2,Math.ceil(0.4*this._maxEntries)),this.clear()}all(){return this._all(this.data,[])}search(e){let t=this.data,n=[];if(!Gpe(e,t))return n;let o=this.toBBox,i=[];for(;t;){for(let r=0;r<t.children.length;r++){let s=t.children[r],a=t.leaf?o(s):s;Gpe(e,a)&&(t.leaf?n.push(s):xDe(e,a)?this._all(s,n):i.push(s))}t=i.pop()}return n}collides(e){let t=this.data;if(!Gpe(e,t))return!1;let n=[];for(;t;){for(let o=0;o<t.children.length;o++){let i=t.children[o],r=t.leaf?this.toBBox(i):i;if(Gpe(e,r)){if(t.leaf||xDe(e,r))return!0;n.push(i)}}t=n.pop()}return!1}load(e){if(!e||!e.length)return this;if(e.length<this._minEntries){for(let n=0;n<e.length;n++)this.insert(e[n]);return this}let t=this._build(e.slice(),0,e.length-1,0);if(this.data.children.length)if(this.data.height===t.height)this._splitRoot(this.data,t);else{if(this.data.height<t.height){let n=this.data;this.data=t,t=n}this._insert(t,this.data.height-t.height-1,!0)}else this.data=t;return this}insert(e){return e&&this._insert(e,this.data.height-1),this}clear(){return this.data=jY([]),this}remove(e,t){if(!e)return this;let n=this.data,o=this.toBBox(e),i=[],r=[],s,a,c;for(;n||i.length;){if(n||(n=i.pop(),a=i[i.length-1],s=r.pop(),c=!0),n.leaf){let l=owo(e,n.children,t);if(l!==-1)return n.children.splice(l,1),i.push(n),this._condense(i),this}c||n.leaf||!xDe(n,o)?a?(s++,n=a.children[s],c=!1):n=null:(i.push(n),r.push(s),s=0,a=n,n=n.children[0])}return this}toBBox(e){return e}compareMinX(e,t){return e.minX-t.minX}compareMinY(e,t){return e.minY-t.minY}toJSON(){return this.data}fromJSON(e){return this.data=e,this}_all(e,t){let n=[];for(;e;)e.leaf?t.push(...e.children):n.push(...e.children),e=n.pop();return t}_build(e,t,n,o){let i=n-t+1,r,s=this._maxEntries;if(i<=s)return r=jY(e.slice(t,n+1)),BY(r,this.toBBox),r;o||(o=Math.ceil(Math.log(i)/Math.log(s)),s=Math.ceil(i/Math.pow(s,o-1))),r=jY([]),r.leaf=!1,r.height=o;let a=Math.ceil(i/s),c=a*Math.ceil(Math.sqrt(s));KSt(e,t,n,c,this.compareMinX);for(let l=t;l<=n;l+=c){let d=Math.min(l+c-1,n);KSt(e,l,d,a,this.compareMinY);for(let u=l;u<=d;u+=a){let h=Math.min(u+a-1,d);r.children.push(this._build(e,u,h,o-1))}}return BY(r,this.toBBox),r}_chooseSubtree(e,t,n,o){for(;o.push(t),!t.leaf&&o.length-1!==n;){let i,r=1/0,s=1/0;for(let a=0;a<t.children.length;a++){let c=t.children[a],l=yDe(c),d=swo(e,c)-l;d<s?(s=d,r=l<r?l:r,i=c):d===s&&l<r&&(r=l,i=c)}t=i||t.children[0]}return t}_insert(e,t,n){let o=n?e:this.toBBox(e),i=[],r=this._chooseSubtree(o,this.data,t,i);for(r.children.push(e),nee(r,o);t>=0&&i[t].children.length>this._maxEntries;)this._split(i,t),t--;this._adjustParentBBoxes(o,i,t)}_split(e,t){let n=e[t],o=n.children.length,i=this._minEntries;this._chooseSplitAxis(n,i,o);let r=this._chooseSplitIndex(n,i,o),s=jY(n.children.splice(r,n.children.length-r));s.height=n.height,s.leaf=n.leaf,BY(n,this.toBBox),BY(s,this.toBBox),t?e[t-1].children.push(s):this._splitRoot(n,s)}_splitRoot(e,t){this.data=jY([e,t]),this.data.height=e.height+1,this.data.leaf=!1,BY(this.data,this.toBBox)}_chooseSplitIndex(e,t,n){let o,i=1/0,r=1/0;for(let s=t;s<=n-t;s++){let a=tee(e,0,s,this.toBBox),c=tee(e,s,n,this.toBBox),l=awo(a,c),d=yDe(a)+yDe(c);l<i?(i=l,o=s,r=d<r?d:r):l===i&&d<r&&(r=d,o=s)}return o||n-t}_chooseSplitAxis(e,t,n){let o=e.leaf?this.compareMinX:iwo,i=e.leaf?this.compareMinY:rwo;this._allDistMargin(e,t,n,o)<this._allDistMargin(e,t,n,i)&&e.children.sort(o)}_allDistMargin(e,t,n,o){e.children.sort(o);let i=this.toBBox,r=tee(e,0,t,i),s=tee(e,n-t,n,i),a=zpe(r)+zpe(s);for(let c=t;c<n-t;c++){let l=e.children[c];nee(r,e.leaf?i(l):l),a+=zpe(r)}for(let c=n-t-1;c>=t;c--){let l=e.children[c];nee(s,e.leaf?i(l):l),a+=zpe(s)}return a}_adjustParentBBoxes(e,t,n){for(let o=n;o>=0;o--)nee(t[o],e)}_condense(e){for(let t,n=e.length-1;n>=0;n--)e[n].children.length===0?n>0?(t=e[n-1].children,t.splice(t.indexOf(e[n]),1)):this.clear():BY(e[n],this.toBBox)}};function owo(e,t,n){if(!n)return t.indexOf(e);for(let o=0;o<t.length;o++)if(n(e,t[o]))return o;return-1}function BY(e,t){tee(e,0,e.children.length,t,e)}function tee(e,t,n,o,i){i||(i=jY(null)),i.minX=1/0,i.minY=1/0,i.maxX=-1/0,i.maxY=-1/0;for(let r=t;r<n;r++){let s=e.children[r];nee(i,e.leaf?o(s):s)}return i}function nee(e,t){return e.minX=Math.min(e.minX,t.minX),e.minY=Math.min(e.minY,t.minY),e.maxX=Math.max(e.maxX,t.maxX),e.maxY=Math.max(e.maxY,t.maxY),e}function iwo(e,t){return e.minX-t.minX}function rwo(e,t){return e.minY-t.minY}function yDe(e){return(e.maxX-e.minX)*(e.maxY-e.minY)}function zpe(e){return e.maxX-e.minX+(e.maxY-e.minY)}function swo(e,t){return(Math.max(t.maxX,e.maxX)-Math.min(t.minX,e.minX))*(Math.max(t.maxY,e.maxY)-Math.min(t.minY,e.minY))}function awo(e,t){let n=Math.max(e.minX,t.minX),o=Math.max(e.minY,t.minY),i=Math.min(e.maxX,t.maxX),r=Math.min(e.maxY,t.maxY);return Math.max(0,i-n)*Math.max(0,r-o)}function xDe(e,t){return e.minX<=t.minX&&e.minY<=t.minY&&t.maxX<=e.maxX&&t.maxY<=e.maxY}function Gpe(e,t){return t.minX<=e.maxX&&t.minY<=e.maxY&&t.maxX>=e.minX&&t.maxY>=e.minY}function jY(e){return{children:e,height:1,leaf:!0,minX:1/0,minY:1/0,maxX:-1/0,maxY:-1/0}}function KSt(e,t,n,o,i){let r=[t,n];for(;r.length;){if((n=r.pop())-(t=r.pop())<=o)continue;let s=t+Math.ceil((n-t)/o/2)*o;YBt(e,s,t,n,i),r.push(t,s,s,n)}}var jSt=(e)=>({minX:Math.min(...e.map((t)=>t.x)),minY:Math.min(...e.map((t)=>t.y)),maxX:Math.max(...e.map((t)=>t.x)),maxY:Math.max(...e.map((t)=>t.y))});function fu(e,t,n,o){let i=Ype(e,t,n),r=Ype(e,t,o),s=Ype(n,o,e),a=Ype(n,o,t);return i!==r&&s!==a||(!(i!==0||!Vpe(e,n,t))||(!(r!==0||!Vpe(e,o,t))||(!(s!==0||!Vpe(n,e,o))||!(a!==0||!Vpe(n,t,o)))))}function Ype(e,t,n){let o=(t.y-e.y)*(n.x-t.x)-(t.x-e.x)*(n.y-t.y);return o===0?0:o>0?1:2}function Vpe(e,t,n){return t.x<=Math.max(e.x,n.x)&&t.x>=Math.min(e.x,n.x)&&t.y<=Math.max(e.y,n.y)&&t.y>=Math.min(e.y,n.y)}function Da(e,t,n){let o=(n.x-t.x)**2+(n.y-t.y)**2;if(o===0)return bn(e,t);let i=((e.x-t.x)*(n.x-t.x)+(e.y-t.y)*(n.y-t.y))/o;return i=Math.max(0,Math.min(1,i)),bn(e,{x:t.x+i*(n.x-t.x),y:t.y+i*(n.y-t.y)})}function bn(e,t){let n=e.x-t.x,o=e.y-t.y;return Math.sqrt(n*n+o*o)}function T6(e,t,n,o){let i=t.x-e.x,r=t.y-e.y,s=o.x-n.x,a=o.y-n.y,c=e.x-n.x,l=e.y-n.y,d=i*a-r*s;if(Math.abs(d)<0.0000000001)return null;let u=(l*s-c*a)/d,h=(i*l-r*c)/d,A=0.000000001;if(u>=-0.000000001&&u<=1+A&&h>=-0.000000001&&h<=1+A)return{x:e.x+u*i,y:e.y+u*r};return null}var VBt=(e)=>{if("minX"in e)return e;let t=e.width/2,n=e.height/2;return{minX:e.center.x-t,minY:e.center.y-n,maxX:e.center.x+t,maxY:e.center.y+n}},kke=(e)=>[{x:e.minX,y:e.minY},{x:e.maxX,y:e.minY},{x:e.maxX,y:e.maxY},{x:e.minX,y:e.maxY}],UBt=(e)=>{let t=[];for(let n=0;n<e.length;n++){let o=e[n],i=e[(n+1)%e.length];t.push([o,i])}return t},cwo=(e,t,n)=>{let o=(e.y-t.y)*(n.x-t.x)-(e.x-t.x)*(n.y-t.y);if(Math.abs(o)>0.000000001)return!1;let i=(e.x-t.x)*(n.x-t.x)+(e.y-t.y)*(n.y-t.y);if(i<0)return!1;let r=(n.x-t.x)**2+(n.y-t.y)**2;return r!==0&&!(i>r)},N_e=(e,t)=>e.x>=t.minX&&e.x<=t.maxX&&e.y>=t.minY&&e.y<=t.maxY,Xee=(e,t)=>{if(t.length<3)return!1;let n=UBt(t);for(let[i,r]of n)if(cwo(e,i,r))return!0;let o=!1;for(let i=0,r=t.length-1;i<t.length;r=i++){let s=t[i].x,a=t[i].y,c=t[r].x,l=t[r].y;a>e.y!=l>e.y&&e.x<(c-s)*(e.y-a)/(l-a)+s&&(o=!o)}return o},WBt=(e,t)=>{let n=kke(e),o=[[n[0],n[1]],[n[1],n[2]],[n[2],n[3]],[n[3],n[0]]],i=UBt(t);for(let[r,s]of i)for(let[a,c]of o)if(fu(r,s,a,c))return!0;return!1},R_e=(e,t)=>((n,o)=>!(o.length<3)&&(!!o.some((i)=>N_e(i,n))||(!!kke(n).some((i)=>Xee(i,o))||WBt(n,o))))(VBt(e),t),XBt=(e,t)=>((n,o)=>!(o.length<3)&&(!!kke(n).every((i)=>Xee(i,o))&&!WBt(n,o)))(VBt(e),t);function mr(e){let t=e.width/2,n=e.height/2;return{minX:e.center.x-t,maxX:e.center.x+t,minY:e.center.y-n,maxY:e.center.y+n}}function L_(e,t,n){return Math.max(t,Math.min(n,e))}function Um(e,t,n,o){if(e.x===t.x&&e.y===t.y)return Da(e,n,o);if(n.x===o.x&&n.y===o.y)return Da(n,e,t);if(fu(e,t,n,o))return 0;let i=[Da(e,n,o),Da(t,n,o),Da(n,e,t),Da(o,e,t)];return Math.min(...i)}function dL(e,t,n){let o={x:n.minX,y:n.minY},i={x:n.maxX,y:n.minY},r={x:n.minX,y:n.maxY},s={x:n.maxX,y:n.maxY};if(fu(e,t,o,i)||fu(e,t,i,s)||fu(e,t,s,r)||fu(e,t,r,o))return 0;if(e.x>=n.minX&&e.x<=n.maxX&&e.y>=n.minY&&e.y<=n.maxY&&t.x>=n.minX&&t.x<=n.maxX&&t.y>=n.minY&&t.y<=n.maxY)return 0;let a=[Da(o,e,t),Da(i,e,t),Da(r,e,t),Da(s,e,t)];if(e.x>=n.minX&&e.x<=n.maxX&&e.y>=n.minY&&e.y<=n.maxY)return 0;if(t.x>=n.minX&&t.x<=n.maxX&&t.y>=n.minY&&t.y<=n.maxY)return 0;if(e.x<n.minX||e.x>n.maxX||e.y<n.minY||e.y>n.maxY){let c=L_(e.x,n.minX,n.maxX),l=L_(e.y,n.minY,n.maxY);a.push(bn(e,{x:c,y:l}))}if(t.x<n.minX||t.x>n.maxX||t.y<n.minY||t.y>n.maxY){let c=L_(t.x,n.minX,n.maxX),l=L_(t.y,n.minY,n.maxY);a.push(bn(t,{x:c,y:l}))}return Math.min(...a)}function HE(e,t,n){let o=n.width/2,i=n.height/2;return dL(e,t,{minX:n.center.x-o,maxX:n.center.x+o,minY:n.center.y-i,maxY:n.center.y+i})}function q8(e,t,n){let o={x:n.x,y:n.y};if(e.x===t.x&&e.y===t.y)return Math.max(0,bn(e,o)-n.radius);let i=t.x-e.x,r=t.y-e.y,s=o.x-e.x,a=o.y-e.y,c=i*i+r*r,l=Math.max(0,Math.min(1,(i*s+r*a)/c)),d=bn({x:e.x+l*i,y:e.y+l*r},o);return Math.max(0,d-n.radius)}function im(e,t,n){let o=n.x-t.x,i=n.y-t.y,r=o*o+i*i;if(r===0)return{x:t.x,y:t.y};let s=((e.x-t.x)*o+(e.y-t.y)*i)/r;return s=Math.max(0,Math.min(1,s)),{x:t.x+s*o,y:t.y+s*i}}var PRe=(e,t)=>{let n=t.x-e.x,o=t.y-e.y,i=Math.sqrt(n**2+o**2);return{x:n/i,y:o/i}};function jE(e,t){let n=t.width/2,o=t.height/2,i=t.center.x-n,r=t.center.x+n,s=t.center.y-o,a=t.center.y+o;if(e.x>=i&&e.x<=r&&e.y>=s&&e.y<=a)return 0;return bn(e,{x:L_(e.x,i,r),y:L_(e.y,s,a)})}function KBt(e,t){if(e.x>=t.minX&&e.x<=t.maxX&&e.y>=t.minY&&e.y<=t.maxY)return 0;return bn(e,{x:L_(e.x,t.minX,t.maxX),y:L_(e.y,t.minY,t.maxY)})}function Uk(e,t){return{x:(e.x+t.x)/2,y:(e.y+t.y)/2}}function xE(e,t){let n=e.x-t.x,o=e.y-t.y;return n*n+o*o}var D6=(e,t)=>!(e.maxX<t.minX||t.maxX<e.minX||e.maxY<t.minY||t.maxY<e.minY),Gd=(e)=>{let{center:t,width:n,height:o}=e,i=n/2,r=o/2;return{minX:t.x-i,maxX:t.x+i,minY:t.y-r,maxY:t.y+r}},Lke=(e)=>{if(e.length===0)return null;let t=e[0].x,n=e[0].y,o=e[0].x,i=e[0].y;for(let r=1;r<e.length;r++){let s=e[r];s.x<t&&(t=s.x),s.y<n&&(n=s.y),s.x>o&&(o=s.x),s.y>i&&(i=s.y)}return{minX:t,minY:n,maxX:o,maxY:i}},xI=0.0001,lwo=class extends Js{constructor(e){super(),this.input=e,this.input.bounds&&((t)=>{let{minX:n,maxX:o,minY:i,maxY:r}=t;if(![n,o,i,r].every(Number.isFinite))throw Error(`ExpandEdgesToEmptySpaceSolver bounds must be finite, got ${JSON.stringify(t)}`);if(n>o||i>r)throw Error(`ExpandEdgesToEmptySpaceSolver bounds must satisfy minX <= maxX and minY <= maxY, got ${JSON.stringify(t)}`)})(this.input.bounds),this.unprocessedSegments=[...this.input.segmentsWithAdjacentEmptySpace],this.rectSpatialIndex=new lL,this.rectSpatialIndex.load(this.input.boardVoid?.boardVoidRects.map((t,n)=>({capacityMeshNodeId:`void-rect-${n}`,center:{x:t.x+t.width/2,y:t.y+t.height/2},width:t.width,height:t.height,availableZ:Array.from({length:this.input.boardVoid?.layerCount||0},(o,i)=>i),layer:"void",minX:t.x,minY:t.y,maxX:t.x+t.width,maxY:t.y+t.height}))||[]),this.rectSpatialIndex.load(this.input.inputMeshNodes.map((t)=>({...t,minX:t.center.x-t.width/2,minY:t.center.y-t.height/2,maxX:t.center.x+t.width/2,maxY:t.center.y+t.height/2})))}input;unprocessedSegments=[];expandedSegments=[];lastSegment=null;lastSearchBounds=null;lastCollidingNodes=null;lastSearchCorner1=null;lastSearchCorner2=null;lastExpandedSegment=null;rectSpatialIndex;_step(){if(this.unprocessedSegments.length===0)return void(this.solved=!0);let e=this.unprocessedSegments.shift();this.lastSegment=e;let t=this.input.bounds,n=e;if(t){let C=((I,b)=>{let P={...I.start},E={...I.end};if(WSt[I.facingDirection].dx!==0){if(P.x<b.minX||P.x>b.maxX)return null;P.y=Math.max(b.minY,Math.min(b.maxY,P.y)),E.y=Math.max(b.minY,Math.min(b.maxY,E.y))}else{if(P.y<b.minY||P.y>b.maxY)return null;P.x=Math.max(b.minX,Math.min(b.maxX,P.x)),E.x=Math.max(b.minX,Math.min(b.maxX,E.x))}return{...I,start:P,end:E}})(e,t);if(!C)return;n=C,this.lastSegment=C}let{dx:o,dy:i}=WSt[n.facingDirection],r=n.end.x-n.start.x,s=n.end.y-n.start.y,a=Math.sqrt(r**2+s**2);if(a<xI)return;let c=r/a,l=s/a,d=t?((C,I)=>{switch(C.facingDirection){case"x+":return I.maxX-C.start.x;case"x-":return C.start.x-I.minX;case"y+":return I.maxY-C.start.y;case"y-":return C.start.y-I.minY}})(n,t):1/0;if(d<xI)return;let u={x:n.start.x+o*xI+c*xI*10,y:n.start.y+i*xI+l*xI*10},h={x:n.end.x+o*xI-c*xI*10,y:n.end.y+i*xI-l*xI*10};this.lastSearchCorner1=u,this.lastSearchCorner2=h;let A=[];for(let C=1;t||C<1000;C*=4){let I=Math.min(C,d),b=jSt([u,h,{x:u.x+o*I,y:u.y+i*I},{x:h.x+o*I,y:h.y+i*I}]);if(this.lastSearchBounds=b,A=this.rectSpatialIndex.search(b).filter((P)=>P.availableZ.includes(n.z)).filter((P)=>P.capacityMeshNodeId!==n.parent.capacityMeshNodeId),A.length>0)break;if(C>=d)break}if(A.length===0&&!t)return;this.lastCollidingNodes=A;let m=d;for(let C of A){let I=HE(n.start,n.end,C);I<m&&(m=I)}let p=m,g=jSt([n.start,n.end,{x:n.start.x+o*p,y:n.start.y+i*p},{x:n.end.x+o*p,y:n.end.y+i*p}]),_={x:(g.minX+g.maxX)/2,y:(g.minY+g.maxY)/2},f=g.maxX-g.minX,y=g.maxY-g.minY,x={segment:n,newNode:{capacityMeshNodeId:`new-${n.parent.capacityMeshNodeId}-${this.expandedSegments.length}`,center:_,width:f,height:y,availableZ:[n.z],layer:n.parent.layer}};this.lastExpandedSegment=x,f<xI||y<xI||(this.expandedSegments.push(x),this.rectSpatialIndex.insert({...x.newNode,...g}))}getOutput(){return{expandedSegments:this.expandedSegments}}visualize(){let e={title:"ExpandEdgesToEmptySpace",coordinateSystem:"cartesian",rects:[],points:[],lines:[],circles:[],infiniteLines:[],polygons:[],arrows:[],texts:[]};for(let t of this.input.inputMeshNodes)e.rects.push({center:t.center,width:t.width,height:t.height,stroke:"rgba(0, 0, 0, 0.1)",layer:`z${t.availableZ.join(",")}`,label:[`node ${t.capacityMeshNodeId}`,`z:${t.availableZ.join(",")}`].join(`
`)});for(let{newNode:t}of this.expandedSegments)e.rects.push({center:t.center,width:t.width,height:t.height,fill:"green",label:`expandedSegment (z=${t.availableZ.join(",")})`,layer:`z${t.availableZ.join(",")}`});if(this.lastSegment&&e.lines.push({points:[this.lastSegment.start,this.lastSegment.end],strokeColor:"rgba(0, 0, 255, 0.5)"}),this.lastSearchBounds&&e.rects.push({center:{x:(this.lastSearchBounds.minX+this.lastSearchBounds.maxX)/2,y:(this.lastSearchBounds.minY+this.lastSearchBounds.maxY)/2},width:this.lastSearchBounds.maxX-this.lastSearchBounds.minX,height:this.lastSearchBounds.maxY-this.lastSearchBounds.minY,fill:"rgba(0, 0, 255, 0.25)"}),this.lastSearchCorner1&&this.lastSearchCorner2&&(e.points.push({x:this.lastSearchCorner1.x,y:this.lastSearchCorner1.y,color:"rgba(0, 0, 255, 0.5)",label:["searchCorner1",`z=${this.lastSegment?.z}`].join(`
`)}),e.points.push({x:this.lastSearchCorner2.x,y:this.lastSearchCorner2.y,color:"rgba(0, 0, 255, 0.5)",label:["searchCorner2",`z=${this.lastSegment?.z}`].join(`
`)})),this.lastExpandedSegment&&e.rects.push({center:this.lastExpandedSegment.newNode.center,width:this.lastExpandedSegment.newNode.width,height:this.lastExpandedSegment.newNode.height,fill:"purple",label:`expandedSegment (z=${this.lastExpandedSegment.segment.z})`}),this.lastCollidingNodes)for(let t of this.lastCollidingNodes)e.rects.push({center:t.center,width:t.width,height:t.height,fill:"rgba(255, 0, 0, 0.5)"});return e}},dwo=class extends KE{findSegmentsWithAdjacentEmptySpaceSolver;expandEdgesToEmptySpaceSolver;outputNodes=[];passExpandedCounts=[];currentPassNodes=[];currentTargetNodes=[];currentPassIndex=0;expandedNodeIds=new Set;maxGapFillPasses=1;pipelineDef=[bh("findSegmentsWithAdjacentEmptySpaceSolver",two,(e)=>[{allMeshNodes:e.currentPassNodes,targetMeshNodes:e.currentTargetNodes}],{onSolved:()=>{}}),bh("expandEdgesToEmptySpaceSolver",lwo,(e)=>[{inputMeshNodes:e.currentPassNodes,segmentsWithAdjacentEmptySpace:e.findSegmentsWithAdjacentEmptySpaceSolver.getOutput().segmentsWithAdjacentEmptySpace,boardVoid:e.inputProblem.boardVoid,bounds:e.inputProblem.bounds}],{onSolved:(e)=>{e.completePass()}})];_setup(){this.outputNodes=[...this.inputProblem.meshNodes],this.currentPassNodes=[...this.inputProblem.meshNodes],this.currentTargetNodes=[...this.inputProblem.meshNodes],this.passExpandedCounts=[],this.currentPassIndex=0,this.expandedNodeIds.clear();let e=this.inputProblem.maxGapFillPasses;this.maxGapFillPasses=Number.isFinite(e)?Math.max(1,Math.floor(e)):1}completePass(){let e=(this.expandEdgesToEmptySpaceSolver?.getOutput().expandedSegments??[]).map((t)=>t.newNode);for(let t of e)this.expandedNodeIds.add(t.capacityMeshNodeId);this.passExpandedCounts.push(e.length),this.currentPassNodes=[...this.currentPassNodes,...e],this.currentTargetNodes=e,this.outputNodes=this.currentPassNodes,e.length===0||this.currentPassIndex+1>=this.maxGapFillPasses||(this.currentPassIndex+=1,this.currentPipelineStageIndex=-1)}getOutput(){return{outputNodes:this.outputNodes.length?this.outputNodes:this.inputProblem.meshNodes}}initialVisualize(){let e={title:"GapFillSolverPipeline - Initial",coordinateSystem:"cartesian",rects:[],points:[],lines:[],circles:[],infiniteLines:[],polygons:[],arrows:[],texts:[]};for(let t of this.inputProblem.meshNodes)e.rects.push({center:t.center,width:t.width,height:t.height,stroke:"rgba(0, 0, 0, 0.3)",fill:"rgba(100, 100, 100, 0.1)",layer:`z${t.availableZ.join(",")}`,label:[`node ${t.capacityMeshNodeId}`,`z:${t.availableZ.join(",")}`].join(`
`)});return e}finalVisualize(){let e={title:"GapFillSolverPipeline - Final",coordinateSystem:"cartesian",rects:[],points:[],lines:[],circles:[],infiniteLines:[],polygons:[],arrows:[],texts:[]},{outputNodes:t}=this.getOutput();for(let n of t){let o=this.expandedNodeIds.has(n.capacityMeshNodeId);e.rects.push({center:n.center,width:n.width,height:n.height,stroke:o?"rgba(0, 128, 0, 0.8)":"rgba(0, 0, 0, 0.3)",fill:o?"rgba(0, 200, 0, 0.3)":"rgba(100, 100, 100, 0.1)",layer:`z${n.availableZ.join(",")}`,label:[`${o?"[expanded] ":""}node ${n.capacityMeshNodeId}`,`z:${n.availableZ.join(",")}`].join(`
`)})}return e}};function qSt(e){let t=e.toLowerCase();if(t==="top")return-1e6;if(t==="bottom")return 1e6;let n=/^inner(\d+)$/i.exec(t);return n?parseInt(n[1],10)||0:100+t.charCodeAt(0)}function Fke(e){let t=function(l){return Array.from(new Set(l)).sort((d,u)=>{let h=qSt(d),A=qSt(u);return h!==A?h-A:d.localeCompare(u)})}((e.obstacles??[]).flatMap((l)=>l.layers??[])),n=Math.max(1,e.layerCount||t.length||1),o=Array.from({length:n},(l,d)=>d===0?"top":d===n-1?"bottom":`inner${d}`),i=[],r=new Set,s=(l)=>{let d=l.toLowerCase();r.has(d)||(r.add(d),i.push(l))};o.forEach(s),t.forEach(s);let a=i.slice(0,n),c=new Map;return a.forEach((l,d)=>c.set(l.toLowerCase(),d)),i.slice(a.length).forEach((l)=>{let d=l.toLowerCase();c.set(d,((u)=>{if(a.length<=1)return 0;if(u==="top")return 0;if(u==="bottom")return a.length-1;let h=/^inner(\d+)$/i.exec(u);if(h){if(a.length<=2)return a.length-1;let A=parseInt(h[1],10),m=a.length-2;return Math.min(m,Math.max(1,Number.isFinite(A)?A:1))}return 0})(d))}),{layerNames:a,zIndexByName:c}}function Hke(e,t){if(e.zLayers?.length)return Array.from(new Set(e.zLayers)).sort((o,i)=>o-i);let n=(e.layers??[]).map((o)=>t.get(o.toLowerCase())).filter((o)=>typeof o=="number");return Array.from(new Set(n)).sort((o,i)=>o-i)}function Oke(e){let{width:t,height:n}=e;return typeof t!="number"||typeof n!="number"?null:{x:e.center.x-t/2,y:e.center.y-n/2,width:t,height:n}}var Q_e=(e)=>{let t=[{fill:"#dbeafe",stroke:"#3b82f6"},{fill:"#fef3c7",stroke:"#f59e0b"},{fill:"#d1fae5",stroke:"#10b981"},{fill:"#e9d5ff",stroke:"#a855f7"},{fill:"#fed7aa",stroke:"#f97316"},{fill:"#fecaca",stroke:"#ef4444"}];return t[Math.min(...e)%t.length]},Jo=0.000000001,JSt=(e,t)=>e>t+Jo,jBt=(e,t)=>e>t-Jo,$St=(e,t)=>e<t-Jo,qBt=(e,t)=>e<t+Jo;function N8(e,t){return!(e.x+e.width<=t.x+Jo||t.x+t.width<=e.x+Jo||e.y+e.height<=t.y+Jo||t.y+t.height<=e.y+Jo)}function Mee(e,t){let n=t.x,o=t.x+t.width,i=t.y,r=t.y+t.height;if(e.x>=n&&e.x<=o&&e.y>=i&&e.y<=r)return Math.min(e.x-n,o-e.x,e.y-i,r-e.y);let s=e.x<n?n-e.x:e.x>o?e.x-o:0,a=e.y<i?i-e.y:e.y>r?e.y-r:0;return s===0?a:a===0?s:Math.hypot(s,a)}function ZSt(e,t){let n=Math.max(e[0],t[0]),o=Math.min(e[1],t[1]);return o>n+Jo?[n,o]:null}function JBt(e,t){if(!N8(e,t))return[e];let n=ZSt([e.x,e.x+e.width],[t.x,t.x+t.width]),o=ZSt([e.y,e.y+e.height],[t.y,t.y+t.height]);if(!n||!o)return[e];let[i,r]=n,[s,a]=o,c=[];i>e.x+Jo&&c.push({x:e.x,y:e.y,width:i-e.x,height:e.height}),e.x+e.width>r+Jo&&c.push({x:r,y:e.y,width:e.x+e.width-r,height:e.height});let l=Math.max(0,r-i);return l>Jo&&s>e.y+Jo&&c.push({x:i,y:e.y,width:l,height:s-e.y}),l>Jo&&e.y+e.height>a+Jo&&c.push({x:i,y:a,width:l,height:e.y+e.height-a}),c.filter((d)=>d.width>Jo&&d.height>Jo)}var zke=(e,t)=>!t||t<=0?e:{x:e.x-t,y:e.y-t,width:e.width+2*t,height:e.height+2*t},u8=(e)=>({x:e.center.x-e.width/2,y:e.center.y-e.height/2,width:e.width,height:e.height}),ePt=(e)=>e.width*e.height,CDe=(e)=>({...e,center:{...e.center},availableZ:[...e.availableZ]}),tPt=(e,t,n)=>({...e,capacityMeshNodeId:n,center:{x:t.x+t.width/2,y:t.y+t.height/2},width:t.width,height:t.height,availableZ:[...e.availableZ],layer:`z${e.availableZ.join(",")}`}),MZ=(e)=>!e._containsObstacle&&!e._containsTarget,nPt=(e,t)=>e.availableZ.length===1&&e.availableZ[0]===t,uwo=(e,t)=>Math.abs(e.x-t.x)<=Jo&&Math.abs(e.y-t.y)<=Jo&&Math.abs(e.width-t.width)<=Jo&&Math.abs(e.height-t.height)<=Jo,$Bt=(e,t)=>{let n=[e];for(let o of t){if(n.length===0)return n;let i=[];for(let r of n)i.push(...JBt(r,o));n=i}return n},oPt=(e,t)=>$Bt(e,t).length===0,hwo=class extends Js{constructor(e){super(),this.input=e}input;outputNodes=[];promotedNodeIds=new Set;residualNodeIds=new Set;_setup(){this.outputNodes=this.input.meshNodes.map(CDe),this.promotedNodeIds.clear(),this.residualNodeIds.clear()}_step(){this.outputNodes=this.processOuterLayerContainmentMerges(),this.solved=!0}processOuterLayerContainmentMerges(){let e=this.input.simpleRouteJson,t=Math.max(1,e.layerCount||1);if(t<3)return this.input.meshNodes.map(CDe);let n=t-1,o=Math.max(e.minViaDiameter??0,e.minTraceWidth||0),i=this.input.meshNodes.map(CDe),r=this.buildObstaclesByLayer(t);if(!r.slice(1,-1).some((p)=>p.some((g)=>g.obstacle.isCopperPour)))return i;let s=i.filter((p)=>MZ(p)&&(nPt(p,0)||nPt(p,n))),a=i.filter((p)=>!MZ(p)),c=a.filter((p)=>p.availableZ.includes(0)||p.availableZ.includes(n)).map(u8),l=new Map;l.set(0,i.filter((p)=>MZ(p)&&p.availableZ.includes(0))),l.set(n,i.filter((p)=>MZ(p)&&p.availableZ.includes(n)));let d=[],u=[],h=s.filter((p)=>p.width+Jo>=o&&p.height+Jo>=o).sort((p,g)=>ePt(u8(g))-ePt(u8(p)));for(let p of h){let g=p.availableZ[0],_=g===0?n:0,f=u8(p);if(c.some((I)=>N8(I,f)))continue;let y=(l.get(_)??[]).filter((I)=>N8(f,u8(I))),x=y[0]?.availableZ;if(!x)continue;if(u.some((I)=>N8(f,I)))continue;if(!this.isTransitCompatibleAcrossIntermediateLayers({rect:f,fromZ:g,toZ:_,obstaclesByLayer:r}))continue;if(!oPt(f,y.map(u8)))continue;let C=y.every((I)=>I.availableZ.length===x.length&&I.availableZ.every((b)=>x.includes(b)))?[{rect:f,availableZ:x}]:y.map((I)=>{let b=u8(I),P=Math.max(f.x,b.x),E=Math.max(f.y,b.y);return{rect:{x:P,y:E,width:Math.min(f.x+f.width,b.x+b.width)-P,height:Math.min(f.y+f.height,b.y+b.height)-E},availableZ:I.availableZ}});for(let[I,b]of C.entries()){if(b.rect.width+Jo<o||b.rect.height+Jo<o)continue;let P=[...new Set([g,...b.availableZ])].sort((B,w)=>B-w),E=I===0?p.capacityMeshNodeId:`${p.capacityMeshNodeId}-outer-support-${I}`;d.push(tPt({...p,availableZ:P},b.rect,E)),u.push(b.rect),this.promotedNodeIds.add(E)}}if(d.length===0)return i;let A=0,m=[];for(let p of i.filter(MZ)){let g=u8(p);if(p.availableZ.filter((f)=>f===0||f===n).length===0){m.push(p);continue}let _=$Bt(g,u);if(_.length===1&&uwo(_[0],g))m.push(p);else for(let f of _){let y=tPt(p,f,`${p.capacityMeshNodeId}-outer-merge-${A++}`);m.push(y),this.residualNodeIds.add(y.capacityMeshNodeId)}}return[...a,...d,...m]}buildObstaclesByLayer(e){let t=Array.from({length:e},()=>[]);for(let n of this.input.simpleRouteJson.obstacles??[]){let o=Oke(n);if(!o)continue;let i=zke(o,this.input.obstacleClearance??0),r=Hke(n,this.input.zIndexByName);for(let s of r)s<0||s>=e||t[s].push({obstacle:n,rect:i})}return t}isTransitCompatibleAcrossIntermediateLayers(e){let{rect:t,fromZ:n,toZ:o,obstaclesByLayer:i}=e,r=Math.min(n,o),s=Math.max(n,o);if(s-r<2)return!1;let a=!1;for(let c=r+1;c<s;c++){let l=(i[c]??[]).filter((d)=>N8(d.rect,t));if(l.length===0)continue;if(l.some((d)=>!d.obstacle.isCopperPour))return!1;if(!oPt(t,l.map((d)=>d.rect)))return!1;a=!0}return a}getOutput(){return{outputNodes:this.outputNodes}}visualize(){return{title:"OuterLayerContainmentMergeSolver",coordinateSystem:"cartesian",rects:this.outputNodes.map((e)=>{let t=Q_e(e.availableZ),n=this.promotedNodeIds.has(e.capacityMeshNodeId),o=this.residualNodeIds.has(e.capacityMeshNodeId);return{center:e.center,width:e.width,height:e.height,stroke:n?"rgba(22, 163, 74, 0.95)":o?"rgba(37, 99, 235, 0.95)":t.stroke,fill:e._containsObstacle?"rgba(239, 68, 68, 0.35)":n?"rgba(34, 197, 94, 0.28)":o?"rgba(59, 130, 246, 0.18)":t.fill,layer:`z${e.availableZ.join(",")}`,label:[`node ${e.capacityMeshNodeId}`,`z:${e.availableZ.join(",")}`].join(`
`)}}),points:[],lines:[],texts:[]}}},Upe=0.000000001,mwo=(e)=>Math.abs(e.rect.x+e.rect.width/2-e.startX)<Upe&&Math.abs(e.rect.y+e.rect.height/2-e.startY)<Upe&&Math.abs(e.rect.width-e.initialW)<Upe&&Math.abs(e.rect.height-e.initialH)<Upe,pwo=({rect:e,bounds:t})=>({x:e.x,y:e.y,width:t.x+t.width-e.x,height:e.height}),Awo=({rect:e,bounds:t})=>({x:e.x,y:e.y,width:e.width,height:t.y+t.height-e.y}),_wo=({rect:e,bounds:t})=>({x:t.x,y:e.y,width:e.x-t.x,height:e.height}),gwo=({rect:e,bounds:t})=>({x:e.x,y:t.y,width:e.width,height:e.y-t.y}),Wpe=(e,t=0.000001)=>Math.round(e/t)*t,fwo=(e)=>({x:Wpe(e.x),y:Wpe(e.y),width:Wpe(e.width),height:Wpe(e.height)});function ywo(e){let{r:t,bounds:n,blockers:o,maxAspect:i}=e,r=n.x+n.width-t.x;for(let a of o)if(t.y+t.height>a.y+Jo&&a.y+a.height>t.y+Jo){if(jBt(a.x,t.x+t.width))r=Math.min(r,a.x-t.x);else if(a.x+a.width>t.x+t.width-Jo&&a.x<t.x+t.width+Jo)return 0}let s=Math.max(0,r-t.width);if(s<=0)return 0;if(i!=null){let{width:a,height:c}=t;a>=c&&(s=Math.min(s,i*c-a))}return Math.max(0,s)}function xwo(e){let{r:t,bounds:n,blockers:o,maxAspect:i}=e,r=n.y+n.height-t.y;for(let a of o)if(t.x+t.width>a.x+Jo&&a.x+a.width>t.x+Jo){if(jBt(a.y,t.y+t.height))r=Math.min(r,a.y-t.y);else if(a.y+a.height>t.y+t.height-Jo&&a.y<t.y+t.height+Jo)return 0}let s=Math.max(0,r-t.height);if(s<=0)return 0;if(i!=null){let{width:a,height:c}=t;c>=a&&(s=Math.min(s,i*a-c))}return Math.max(0,s)}function Cwo(e){let{r:t,bounds:n,blockers:o,maxAspect:i}=e,r=n.x;for(let a of o)if(t.y+t.height>a.y+Jo&&a.y+a.height>t.y+Jo){if(qBt(a.x+a.width,t.x))r=Math.max(r,a.x+a.width);else if(a.x<t.x+Jo&&a.x+a.width>t.x-Jo)return 0}let s=Math.max(0,t.x-r);if(s<=0)return 0;if(i!=null){let{width:a,height:c}=t;a>=c&&(s=Math.min(s,i*c-a))}return Math.max(0,s)}function Iwo(e){let{r:t,bounds:n,blockers:o,maxAspect:i}=e,r=n.y;for(let a of o)if(t.x+t.width>a.x+Jo&&a.x+a.width>t.x+Jo){if(qBt(a.y+a.height,t.y))r=Math.max(r,a.y+a.height);else if(a.y<t.y+Jo&&a.y+a.height>t.y-Jo)return 0}let s=Math.max(0,t.y-r);if(s<=0)return 0;if(i!=null){let{width:a,height:c}=t;c>=a&&(s=Math.min(s,i*a-c))}return Math.max(0,s)}var iPt=(e)=>{let{rect:t,seen:n,blockers:o}=e;n.has(t)||(n.add(t),o.push(t))};function ZBt(e){let{startX:t,startY:n,gridSize:o,bounds:i,obsticalIndexByLayer:r,placedIndexByLayer:s,initialCellRatio:a,maxAspectRatio:c,minReq:l}=e,d=Math.max(0.000000001,o*a),u=Math.max(d,l.width),h=Math.max(d,l.height),A=[],m=new Set,p=s.length,g=[],_=(C)=>{let I=((b)=>{let{bounds:P,rect:E}=b,B=Math.max(P.x,E.x),w=Math.max(P.y,E.y),T=Math.min(P.x+P.width,E.x+E.width),Q=Math.min(P.y+P.height,E.y+E.height);return T<=B+Jo||Q<=w+Jo?null:{minX:B,minY:w,maxX:T,maxY:Q}})({bounds:i,rect:C});if(I){for(let b of g)if(b.minX<=I.minX&&b.minY<=I.minY&&b.maxX>=I.maxX&&b.maxY>=I.maxY)return;for(let b of e.zLayers){let P=r[b];if(P)for(let B of P.search(I))iPt({rect:B,seen:m,blockers:A});let E=s[b];if(E)for(let B of E.search(I))B.zLayers.length>=p&&(mwo({rect:B,startX:t,startY:n,initialW:u,initialH:h})||iPt({rect:B,seen:m,blockers:A}))}for(let b=g.length-1;b>=0;b--){let P=g[b];I.minX<=P.minX&&I.minY<=P.minY&&I.maxX>=P.maxX&&I.maxY>=P.maxY&&g.splice(b,1)}g.push(I)}},f=[{ox:0,oy:0},{ox:-u,oy:0},{ox:0,oy:-h},{ox:-u,oy:-h},{ox:-u/2,oy:-h/2}],y=null,x=0;e:for(let C of f){let I={x:t+C.ox,y:n+C.oy,width:u,height:h};if(_(I),$St(I.x,i.x)||$St(I.y,i.y)||JSt(I.x+I.width,i.x+i.width)||JSt(I.y+I.height,i.y+i.height))continue;for(let w of A)if(N8(I,w))continue e;let b=0.000001,P=1000,E=!0,B=0;for(;E&&B<P;){B++,E=!1;let w={bounds:i,blockers:A,maxAspect:c};_(pwo({rect:I,bounds:i}));let T=ywo({...w,r:I});T>b&&(I={...I,width:I.width+T},_(I),E=!0),_(Awo({rect:I,bounds:i}));let Q=xwo({...w,r:I});Q>b&&(I={...I,height:I.height+Q},_(I),E=!0),_(_wo({rect:I,bounds:i}));let N=Cwo({...w,r:I});N>b&&(I={x:I.x-N,y:I.y,width:I.width+N,height:I.height},_(I),E=!0),_(gwo({rect:I,bounds:i}));let F=Iwo({...w,r:I});F>b&&(I={x:I.x,y:I.y-F,width:I.width,height:I.height+F},_(I),E=!0)}if(I.width+Jo>=l.width&&I.height+Jo>=l.height){let w=I.width*I.height;w>x&&(y=fwo(I),x=w)}}return y}function bwo(e){let t=Math.max(e.width,e.height);return[t/8,t/16,t/32]}function vRe(e){let t={minX:e.point.x,minY:e.point.y,maxX:e.point.x,maxY:e.point.y};for(let n=0;n<e.layerCount;n++){let o=e.obstacleIndexByLayer[n],i=!!o&&o.collides(t),r=e.placedIndexByLayer[n],s=!!r&&r.collides(t);if(!i&&!s)return!1}return!0}function ERe(e){let{x:t,y:n,z:o,layerCount:i,minSpan:r,maxSpan:s,obstacleIndexByLayer:a,additionalBlockersByLayer:c}=e,l=(A)=>{let m={minX:t,minY:n,maxX:t,maxY:n},p=a[A];if(p&&p.collides(m))return!1;return!(c?.[A]??[]).some((g)=>{return(f={x:t,y:n}).x>=(_=g).x-Jo&&f.x<=_.x+_.width+Jo&&f.y>=_.y-Jo&&f.y<=_.y+_.height+Jo;var _,f})},d=o,u=o;for(;d-1>=0&&l(d-1);)d--;for(;u+1<i&&l(u+1);)u++;if(typeof s=="number"){let A=((m,p,g)=>Math.max(p,Math.min(g,m)))(s,1,i);for(;u-d+1>A;)o-d>u-o?d++:u--}let h=[];for(let A=d;A<=u;A++)h.push(A);return h.length>=r?h:[]}var Swo=(e,t=0.000001)=>Math.round(e/t)*t,Ix=(e,t=0.000001)=>Math.round(e/t)*t,Pwo=(e)=>("minX"in e)?{x:e.minX,y:e.minY,width:e.maxX-e.minX,height:e.maxY-e.minY}:e;function vwo(e){let{segment:t,coveringIntervals:n,hasReversedIntervals:o,minSegmentLength:i}=e,r=Ix(t.lineStart),s=Ix(t.lineEnd),a=Ix(t.clipStart),c=Ix(t.clipEnd),l=[];if(o||a>c)l=n.filter((A)=>A.sourceIndex!==t.sourceIndex).map((A)=>{let m=Math.max(a,A.start),p=Math.min(c,A.end);return{start:Math.min(m,p),end:Math.max(m,p)}}).filter((A)=>A.end>A.start+Jo).sort((A,m)=>A.start-m.start);else{let A=1/0,m=-1/0;for(let p of n){if(p.sourceIndex===t.sourceIndex)continue;let g=Math.max(a,p.start),_=Math.min(c,p.end);_<g?p.end<a?A=Math.min(A,_):m=Math.max(m,g):_>g+Jo&&l.push({start:g,end:_})}a>A+Jo&&l.unshift({start:A,end:a}),m>c+Jo&&l.push({start:c,end:m})}if(l.length===0)return[{start:r,end:s,center:(r+s)/2}];let d=[],u=l[0].start,h=l[0].end;u>r+Jo&&u-r>=i&&d.push({start:r,end:u,center:(r+u)/2});for(let A=1;A<l.length;A++){let m=l[A];m.start<=h+Jo?h=Math.max(h,m.end):(m.start-h>=i&&d.push({start:h,end:m.start,center:(h+m.start)/2}),h=m.end)}return h<s-Jo&&s-h>=i&&d.push({start:h,end:s,center:(h+s)/2}),d}function Ewo(e){let{bounds:t,minSize:n,layerCount:o,obstacleIndexByLayer:i,placedIndexByLayer:r,hardPlacedByLayer:s}=e,a=[],c=Math.max(0.15*n,3*Jo),l=0,d=new Map,u=Array.from({length:o},(p,g)=>[...i[g]?.all()??[],...s[g]??[]].map(Pwo)),h=u.map((p)=>{if(p.length===0)return null;let g=new Vm(p.length);for(let _ of p){let f=_.x+_.width,y=_.y+_.height;g.add(Math.min(_.x,f),Math.min(_.y,y),Math.max(_.x,f),Math.max(_.y,y))}return g.finish(),g});function A(p){let g=Ix(p.x),_=Ix(p.y),{z:f}=p,y=g,x=_;if(y<t.x+Jo||x<t.y+Jo||y>t.x+t.width-Jo||x>t.y+t.height-Jo)return;let C=((b)=>`${b.z}|${b.x.toFixed(6)}|${b.y.toFixed(6)}`)({x:y,y:x,z:f}),I=d.get(C);I&&(I.order<p.order||I.order===p.order&&I.pointOrder<=p.pointOrder)||function(b){return vRe({layerCount:o,obstacleIndexByLayer:i,placedIndexByLayer:r,point:b})}({x:y,y:x})||d.set(C,{x:y,y:x,z:f,order:p.order,pointOrder:p.pointOrder})}for(let p=0;p<o;p++){let g=(u[p]??[]).map((B)=>({x:Ix(B.x),y:Ix(B.y),width:Ix(B.width),height:Ix(B.height)})),_=g.length>0?new Vm(g.length):null;if(_){for(let B of g)_.add(B.x,B.y,B.x+B.width,B.y+B.height);_.finish()}let f=new Map,y=new Map,x=(B)=>{let w=B.vertical?f:y,T=w.get(B.coordinate);T?T.push(B.edgeOrdinal):w.set(B.coordinate,[B.edgeOrdinal])},C=l,I=0,b=[{x:t.x+c,y:t.y+c},{x:t.x+t.width-c,y:t.y+c},{x:t.x+c,y:t.y+t.height-c},{x:t.x+t.width-c,y:t.y+t.height-c}];for(let B of b)A({...B,z:p,order:C+I++,pointOrder:0});let P=I;for(let B of[t.y+c,t.y+t.height-c])x({vertical:!1,coordinate:B,edgeOrdinal:I++});for(let B of[t.x+c,t.x+t.width-c])x({vertical:!0,coordinate:B,edgeOrdinal:I++});let E=I;for(let B=0;B<g.length;B++){let w=g[B];for(let T of[w.x-c,w.x+w.width+c]){let Q=I++;T>t.x+Jo&&T<t.x+t.width-Jo&&x({vertical:!0,coordinate:T,edgeOrdinal:Q})}for(let T of[w.y-c,w.y+w.height+c]){let Q=I++;T>t.y+Jo&&T<t.y+t.height-Jo&&x({vertical:!1,coordinate:T,edgeOrdinal:Q})}}l=C+I;for(let B of[!0,!1]){let w=B?f:y;for(let[T,Q]of w){let N=_?B?_.search(T,-1/0,T,1/0):_.search(-1/0,T,1/0,T):[],F=[],H=!1;for(let z of N){let Y=g[z];if(B?Y.x>T||Y.x+Y.width<T:Y.y>T||Y.y+Y.height<T)continue;let U=Ix(B?Y.y:Y.x),X=Ix(B?Y.y+Y.height:Y.x+Y.width);F.push({start:U,end:X,sourceIndex:z}),X<U&&(H=!0)}F.sort((z,Y)=>z.start-Y.start);for(let z of Q){let Y=z<E,U=z-E,X=Y?void 0:Math.floor(U/4),V=Y?t:g[X],W=Y?z===P||z===P+2:U%4==0||U%4==2,j=B?V.x:V.y,q=B?V.width:V.height,ne=Y?W?j+c:j+q-c:W?j-c:j+q+c,ce=B?V.y:V.x,oe=B?V.y+V.height:V.x+V.width,ie=vwo({segment:{lineStart:Y?ce+c:ce,lineEnd:Y?oe-c:oe,clipStart:ce,clipEnd:oe,sourceIndex:X},coveringIntervals:F,hasReversedIntervals:H,minSegmentLength:0.5*n}),J=0;for(let ee of ie){let se=(he)=>A({...B?{x:ne,y:he,z:p}:{x:he,y:ne,z:p},order:C+z,pointOrder:J++}),le=ee.end-ee.start;if(Y){if(le<n)continue;se(ee.center),le>1.5*n&&(se(ee.start+0.4*n),se(ee.end-0.4*n))}else se(ee.center)}}}}}let m=[...d.values()].sort((p,g)=>p.order-g.order||p.pointOrder-g.pointOrder);for(let{x:p,y:g,z:_}of m){let f=u[_]??[],y=Mee({x:p,y:g},t),x=h[_];if(x){let b=x.neighbors(p,g,1)[0];y=Math.min(y,Mee({x:p,y:g},f[b]));let P=x.search(p-y,g-y,p+y,g+y);for(let E of P)y=Math.min(y,Mee({x:p,y:g},f[E]))}let C=Ix(y),I=ERe({x:p,y:g,z:_,layerCount:o,minSpan:1,maxSpan:void 0,obstacleIndexByLayer:i,additionalBlockersByLayer:s});a.push({x:p,y:g,z:_,distance:C,zSpanLen:I.length,isEdgeSeed:!0})}return a.sort((p,g)=>g.zSpanLen-p.zSpanLen||g.distance-p.distance||p.z-g.z||p.x-g.x||p.y-g.y),a}var SV=(e,t)=>({...e,minX:e.x,minY:e.y,maxX:e.x+e.width,maxY:e.y+e.height,zLayers:t.zLayers});function e9t(e,t){let n=e.placed[t],{rect:o,zLayers:i}=n,r=e.layerCount,s=[],a=[];for(let l=0;l<e.placed.length;l++){if(l===t)continue;let d=e.placed[l];if(d.zLayers.length>=r)continue;if(!N8(d.rect,o))continue;let u=d.zLayers.filter((g)=>i.includes(g));if(u.length===0)continue;let h=JBt(d.rect,o);s.push(l);let A=d.zLayers.filter((g)=>!i.includes(g));A.length>0&&a.push({rect:d.rect,zLayers:A});let m=Math.min(e.options.minSingle.width,e.options.minMulti.width),p=Math.min(e.options.minSingle.height,e.options.minMulti.height);for(let g of h)g.width+Jo>=m&&g.height+Jo>=p&&a.push({rect:g,zLayers:u.slice()})}let c=(l,d)=>l.minX===d.minX&&l.minY===d.minY&&l.maxX===d.maxX&&l.maxY===d.maxY;s.sort((l,d)=>d-l).forEach((l)=>{let d=e.placed.splice(l,1)[0];if(e.placedIndexByLayer)for(let u of d.zLayers){let h=e.placedIndexByLayer[u];h&&h.remove(SV(d.rect,{zLayers:d.zLayers}),c)}});for(let l of a){e.placed.push(l);for(let d of l.zLayers)if(e.placedIndexByLayer){let u=e.placedIndexByLayer[d];u&&u.insert(SV(l.rect,{zLayers:l.zLayers.slice()}))}}}var Mwo=class extends Js{constructor(e){super(),this.input=e}input;srj;layerNames;layerCount;bounds;options;boardVoidRects;gridIndex;candidates;placed;placedIndexByLayer;hardPlacedByLayer;expansionIndex;edgeAnalysisDone;totalSeedsThisGrid;consumedSeedsThisGrid;_setup(){let e=this.input.simpleRouteJson,t=this.input.gridOptions??{},n=this.input.layerNames&&this.input.zIndexByName,{layerNames:o,zIndexByName:i}=n?{layerNames:this.input.layerNames,zIndexByName:this.input.zIndexByName}:Fke({obstacles:e.obstacles,layerCount:e.layerCount}),r=Math.max(1,o.length,e.layerCount||1),s={x:e.bounds.minX,y:e.bounds.minY,width:e.bounds.maxX-e.bounds.minX,height:e.bounds.maxY-e.bounds.minY},a=Math.max(0.01,e.minTraceWidth||0.15),c={...{gridSizes:[],initialCellRatio:0.2,maxAspectRatio:3,minSingle:{width:2*a,height:2*a},minMulti:{width:4*a,height:4*a,minLayers:Math.min(2,Math.max(1,e.layerCount||1))},preferMultiLayer:!0,maxMultiLayerSpan:void 0},...t,gridSizes:t.gridSizes??bwo(s)};this.srj=e,this.layerNames=o,this.layerCount=r,this.bounds=s,this.options=c,this.boardVoidRects=this.input.boardVoidRects,this.gridIndex=0,this.candidates=[],this.placed=[],this.placedIndexByLayer=Array.from({length:r},()=>new lL),this.hardPlacedByLayer=Array.from({length:r},()=>[]),this.expansionIndex=0,this.edgeAnalysisDone=!1,this.totalSeedsThisGrid=0,this.consumedSeedsThisGrid=0,this.stats={gridIndex:this.gridIndex}}_step(){this._stepGrid(),this.stats.gridIndex=this.gridIndex,this.stats.placed=this.placed.length}_stepGrid(){let{gridSizes:e,initialCellRatio:t,maxAspectRatio:n,minSingle:o,minMulti:i,preferMultiLayer:r,maxMultiLayerSpan:s}=this.options,a=e[this.gridIndex];if(this.candidates.length===0&&this.consumedSeedsThisGrid===0&&(this.candidates=function(h){let{bounds:A,gridSize:m,layerCount:p,obstacleIndexByLayer:g,placedIndexByLayer:_,hardPlacedByLayer:f}=h,y=new Map,x=Array.from({length:p},(I,b)=>[...g[b]?.all()??[],...f[b]??[]]);for(let I=A.x;I<A.x+A.width;I+=m)for(let b=A.y;b<A.y+A.height;b+=m){if(Math.abs(I-A.x)<Jo||Math.abs(b-A.y)<Jo||I>A.x+A.width-m-Jo||b>A.y+A.height-m-Jo)continue;if(vRe({layerCount:p,obstacleIndexByLayer:g,placedIndexByLayer:_,point:{x:I,y:b}}))continue;let P=[],E=0;for(let z=0;z<p;z++){let Y=ERe({x:I,y:b,z,layerCount:p,minSpan:1,maxSpan:void 0,obstacleIndexByLayer:g,additionalBlockersByLayer:f});Y.length>P.length&&(P=Y,E=z)}let B=P.length?P[Math.floor(P.length/2)]:E,w=x[B]??[],T=Mee({x:I,y:b},A);for(let z of w)T=Math.min(T,Mee({x:I,y:b},z));let Q=Swo(T),N=`${I.toFixed(6)}|${b.toFixed(6)}`,F={x:I,y:b,z:B,distance:Q,zSpanLen:P.length},H=y.get(N);(!H||F.zSpanLen>(H.zSpanLen??0)||F.zSpanLen===H.zSpanLen&&F.distance>H.distance)&&y.set(N,F)}let C=Array.from(y.values());return C.sort((I,b)=>b.zSpanLen-I.zSpanLen||b.distance-I.distance||I.z-b.z||I.x-b.x||I.y-b.y),C}({bounds:this.bounds,gridSize:a,layerCount:this.layerCount,hardPlacedByLayer:this.hardPlacedByLayer,obstacleIndexByLayer:this.input.obstacleIndexByLayer,placedIndexByLayer:this.placedIndexByLayer}),this.totalSeedsThisGrid=this.candidates.length,this.consumedSeedsThisGrid=0),this.consumedSeedsThisGrid>=this.candidates.length){if(this.gridIndex+1<e.length)return this.gridIndex+=1,this.candidates=[],this.totalSeedsThisGrid=0,void(this.consumedSeedsThisGrid=0);if(!this.edgeAnalysisDone){let h=Math.min(o.width,o.height);return this.candidates=Ewo({bounds:this.bounds,minSize:h,layerCount:this.layerCount,obstacleIndexByLayer:this.input.obstacleIndexByLayer,placedIndexByLayer:this.placedIndexByLayer,hardPlacedByLayer:this.hardPlacedByLayer}),this.edgeAnalysisDone=!0,this.totalSeedsThisGrid=this.candidates.length,void(this.consumedSeedsThisGrid=0)}return this.candidates=[],this.solved=!0,void(this.expansionIndex=0)}let c=this.candidates[this.consumedSeedsThisGrid++];if(vRe({layerCount:this.layerCount,obstacleIndexByLayer:this.input.obstacleIndexByLayer,placedIndexByLayer:this.placedIndexByLayer,point:{x:c.x,y:c.y}}))return;let l=ERe({x:c.x,y:c.y,z:c.z,layerCount:this.layerCount,minSpan:i.minLayers,maxSpan:s,obstacleIndexByLayer:this.input.obstacleIndexByLayer,additionalBlockersByLayer:this.hardPlacedByLayer}),d=[];l.length>=i.minLayers&&d.push({kind:"multi",layers:l,minReq:{width:i.width,height:i.height}}),d.push({kind:"single",layers:[c.z],minReq:{width:o.width,height:o.height}});let u=r?d:d.reverse();for(let h of u){let A=ZBt({startX:c.x,startY:c.y,gridSize:a,bounds:this.bounds,obsticalIndexByLayer:this.input.obstacleIndexByLayer,placedIndexByLayer:this.placedIndexByLayer,initialCellRatio:t,maxAspectRatio:n,minReq:h.minReq,zLayers:h.layers});if(!A)continue;let m={rect:A,zLayers:[...h.layers]},p=this.placed.push(m)-1;for(let g of h.layers){let _=this.placedIndexByLayer[g];_&&_.insert(SV(A,{zLayers:m.zLayers}))}if(e9t({layerCount:this.layerCount,placed:this.placed,options:this.options,placedIndexByLayer:this.placedIndexByLayer},p),m.zLayers.length>=this.layerCount)for(let g of m.zLayers)this.hardPlacedByLayer[g].push(m.rect);return}}computeProgress(){if(this.solved)return 1;let e=this.options.gridSizes.length,t=this.gridIndex/(e+1),n=Math.max(1,this.totalSeedsThisGrid),o=n?this.consumedSeedsThisGrid/n:1;return Math.min(0.999,t+o*(1/(e+1)))}getOutput(){return{layerNames:this.layerNames,layerCount:this.layerCount,bounds:this.bounds,options:this.options,boardVoidRects:this.boardVoidRects,gridIndex:this.gridIndex,candidates:this.candidates,placed:this.placed,expansionIndex:this.expansionIndex,edgeAnalysisDone:this.edgeAnalysisDone,totalSeedsThisGrid:this.totalSeedsThisGrid,consumedSeedsThisGrid:this.consumedSeedsThisGrid,obstacles:this.srj.obstacles,obstacleClearance:this.input.obstacleClearance}}visualize(){let e=[],t=[],n=[],o=this.srj??this.input.simpleRouteJson,i=o.bounds.minX,r=o.bounds.maxX,s=o.bounds.minY,a=o.bounds.maxY;o.outline&&o.outline.length>1?n.push({points:[...o.outline,o.outline[0]],strokeColor:"#111827",strokeWidth:0.01,label:"outline"}):e.push({center:{x:(i+r)/2,y:(s+a)/2},width:r-i,height:a-s,fill:"none",stroke:"#111827",label:"board"});for(let c of o.obstacles??[])c.type!=="rect"&&c.type!=="oval"||e.push({center:{x:c.center.x,y:c.center.y},width:c.width,height:c.height,fill:"#fee2e2",stroke:"#ef4444",layer:"obstacle",label:"obstacle"});if(this.boardVoidRects){let c=null;if(o.outline&&o.outline.length>0){let l=o.outline.map((A)=>A.x),d=o.outline.map((A)=>A.y),u=Math.min(...l),h=Math.min(...d);c={x:u,y:h,width:Math.max(...l)-u,height:Math.max(...d)-h}}for(let l of this.boardVoidRects)c&&!N8(l,c)||e.push({center:{x:l.x+l.width/2,y:l.y+l.height/2},width:l.width,height:l.height,fill:"rgba(0, 0, 0, 0.5)",stroke:"none",label:"void"})}if(this.candidates?.length)for(let c of this.candidates)t.push({x:c.x,y:c.y,label:`z:${c.z}`});if(this.placed?.length)for(let c of this.placed){let l=Q_e(c.zLayers);e.push({center:{x:c.rect.x+c.rect.width/2,y:c.rect.y+c.rect.height/2},width:c.rect.width,height:c.rect.height,fill:l.fill,stroke:l.stroke,layer:`z${c.zLayers.join(",")}`,label:`free
z:${c.zLayers.join(",")}`})}return{title:"RectDiff Grid",coordinateSystem:"cartesian",rects:e,points:t,lines:n}}},Bwo=(e,t)=>e.minX===t.minX&&e.minY===t.minY&&e.maxX===t.maxX&&e.maxY===t.maxY,wwo=class extends Js{constructor(e){super(),this.input=e}input;placedIndexByLayer=[];_meshNodes=[];_setup(){this.stats={gridIndex:this.input.gridIndex},this.placedIndexByLayer=Array.from({length:this.input.layerCount},()=>new lL);for(let e of this.input.placed)for(let t of e.zLayers){let n=this.placedIndexByLayer[t];n&&n.insert(SV(e.rect,{zLayers:e.zLayers}))}}_step(){this.solved||(this._stepExpansion(),this.stats.gridIndex=this.input.gridIndex,this.stats.placed=this.input.placed.length,this.input.expansionIndex>=this.input.placed.length&&this.finalizeIfNeeded())}_stepExpansion(){if(this.input.expansionIndex>=this.input.placed.length)return;let e=this.input.expansionIndex,t=this.input.placed[e],n=this.input.options.gridSizes[this.input.options.gridSizes.length-1],o=t.rect,i=ZBt({startX:t.rect.x+t.rect.width/2,startY:t.rect.y+t.rect.height/2,gridSize:n,bounds:this.input.bounds,obsticalIndexByLayer:this.input.obstacleIndexByLayer,placedIndexByLayer:this.placedIndexByLayer,initialCellRatio:0,maxAspectRatio:null,minReq:{width:t.rect.width,height:t.rect.height},zLayers:t.zLayers});if(i){this.input.placed[e]={rect:i,zLayers:t.zLayers};for(let r of t.zLayers){let s=this.placedIndexByLayer[r];s&&(s.remove(SV(o,{zLayers:t.zLayers}),Bwo),s.insert(SV(i,{zLayers:t.zLayers})))}e9t({layerCount:this.input.layerCount,placed:this.input.placed,options:this.input.options,placedIndexByLayer:this.placedIndexByLayer},e)}this.input.expansionIndex+=1}finalizeIfNeeded(){if(this.solved)return;let e=function(t){let n=t.placed.map((o)=>({minX:o.rect.x,minY:o.rect.y,maxX:o.rect.x+o.rect.width,maxY:o.rect.y+o.rect.height,zLayers:[...o.zLayers].sort((i,r)=>i-r)}));for(let o of t.obstacles??[]){let i=Oke(o);if(!i)continue;let r=t.obstacleClearance?{x:i.x-t.obstacleClearance,y:i.y-t.obstacleClearance,width:i.width+2*t.obstacleClearance,height:i.height+2*t.obstacleClearance}:i,s=o.zLayers?.length&&o.zLayers.length>0?o.zLayers:Hke(o,t.zIndexByName);n.push({minX:r.x,minY:r.y,maxX:r.x+r.width,maxY:r.y+r.height,zLayers:[...new Set(s)].sort((a,c)=>a-c),isObstacle:!0,connectedTo:[...o.connectedTo]})}return n}({placed:this.input.placed,obstacles:this.input.obstacles,zIndexByName:this.input.zIndexByName,boardVoidRects:this.input.boardVoidRects,obstacleClearance:this.input.obstacleClearance});this._meshNodes=function(t){let n=0,o=[];for(let i of t){let r=Math.max(0,i.maxX-i.minX),s=Math.max(0,i.maxY-i.minY);r<=0||s<=0||i.zLayers.length===0||o.push({capacityMeshNodeId:"cmn_"+n++,center:{x:(i.minX+i.maxX)/2,y:(i.minY+i.maxY)/2},width:r,height:s,layer:"top",availableZ:i.zLayers.slice(),_containsObstacle:i.isObstacle,_containsTarget:i.isObstacle,...i.connectedTo?.length?{_connectedTo:[...i.connectedTo]}:{}})}return o}(e),this.solved=!0}computeProgress(){if(this.solved)return 1;let e=this.input.options.gridSizes.length,t=e/(e+1),n=Math.max(1,this.input.placed.length),o=n?this.input.expansionIndex/n:1;return Math.min(0.999,t+o*(1/(e+1)))}getOutput(){if(this.solved)return{meshNodes:this._meshNodes};return{meshNodes:this.input.placed.map((e,t)=>({capacityMeshNodeId:`expand-preview-${t}`,center:{x:e.rect.x+e.rect.width/2,y:e.rect.y+e.rect.height/2},width:e.rect.width,height:e.rect.height,availableZ:e.zLayers.slice(),layer:`z${e.zLayers.join(",")}`}))}}visualize(){let e=[];for(let t of this.input.placed??[])e.push({center:{x:t.rect.x+t.rect.width/2,y:t.rect.y+t.rect.height/2},width:t.rect.width,height:t.rect.height,stroke:"rgba(37, 99, 235, 0.9)",fill:"rgba(191, 219, 254, 0.5)",layer:`z${t.zLayers.join(",")}`,label:`expanded
z:${t.zLayers.join(",")}`});return{title:"RectDiff Expansion",coordinateSystem:"cartesian",rects:e,points:[],lines:[]}}},Two=class extends KE{rectDiffSeedingSolver;rectDiffExpansionSolver;obstacleIndexByLayer;layerNames;zIndexByName;constructor(e){super(e);let{obstacleIndexByLayer:t,layerNames:n,zIndexByName:o}=((i)=>{let{srj:r,boardVoidRects:s,obstacleClearance:a}=i,{layerNames:c,zIndexByName:l}=Fke({obstacles:r.obstacles,layerCount:r.layerCount}),d=Math.max(1,c.length,r.layerCount||1),u=(r.bounds.minX,r.bounds.minY,r.bounds.maxX,r.bounds.minX,r.bounds.maxY,r.bounds.minY,Array.from({length:d},()=>new lL)),h=(A,m)=>{let p={...A,minX:A.x,minY:A.y,maxX:A.x+A.width,maxY:A.y+A.height,zLayers:[m]};u[m]?.insert(p)};if(r.outline&&r.outline.length>2)for(let A of s??[])for(let m=0;m<d;m++)h(A,m);for(let A of r.obstacles??[]){let m=Oke(A);if(!m)continue;let p=zke(m,a??0),g=Hke(A,l),_=g.filter((f)=>f<0||f>=d);if(_.length)throw Error(`RectDiff: obstacle uses z-layer indices ${_.join(",")} outside 0-${d-1}`);A.zLayers&&A.zLayers.length!==0||!g.length||(A.zLayers=g);for(let f of g)h(p,f)}return{obstacleIndexByLayer:u,layerNames:c,zIndexByName:l}})({srj:{bounds:e.bounds,obstacles:e.obstacles,connections:e.connections,outline:e.outline?.outline,layerCount:e.layerCount,minTraceWidth:e.minTraceWidth},boardVoidRects:e.boardVoidRects,obstacleClearance:e.obstacleClearance});this.obstacleIndexByLayer=t,this.layerNames=e.layerNames??n,this.zIndexByName=e.zIndexByName??o}pipelineDef=[bh("rectDiffSeedingSolver",Mwo,(e)=>[{simpleRouteJson:{bounds:e.inputProblem.bounds,obstacles:e.inputProblem.obstacles,connections:e.inputProblem.connections,outline:e.inputProblem.outline?.outline,layerCount:e.inputProblem.layerCount,minTraceWidth:e.inputProblem.minTraceWidth},gridOptions:e.inputProblem.gridOptions,obstacleIndexByLayer:e.obstacleIndexByLayer,boardVoidRects:e.inputProblem.boardVoidRects,layerNames:e.layerNames,zIndexByName:e.zIndexByName,obstacleClearance:e.inputProblem.obstacleClearance}]),bh("rectDiffExpansionSolver",wwo,(e)=>{let t=e.rectDiffSeedingSolver?.getOutput();if(!t)throw Error("RectDiffSeedingSolver did not produce output");return[{layerNames:t.layerNames??[],boardVoidRects:e.inputProblem.boardVoidRects??[],layerCount:e.inputProblem.layerCount,bounds:t.bounds,candidates:t.candidates,consumedSeedsThisGrid:t.placed.length,totalSeedsThisGrid:t.candidates.length,placed:t.placed,edgeAnalysisDone:t.edgeAnalysisDone,gridIndex:t.gridIndex,expansionIndex:t.expansionIndex,obstacleIndexByLayer:e.obstacleIndexByLayer,options:t.options,zIndexByName:e.zIndexByName,layerNamesCanonical:e.layerNames,obstacles:e.inputProblem.obstacles,obstacleClearance:e.inputProblem.obstacleClearance}]})];getConstructorParams(){return[this.inputProblem]}getOutput(){if(this.rectDiffExpansionSolver)return this.rectDiffExpansionSolver.getOutput();if(this.rectDiffSeedingSolver)return{meshNodes:this.rectDiffSeedingSolver.getOutput().placed.map((e,t)=>({capacityMeshNodeId:`grid-${t}`,center:{x:e.rect.x+e.rect.width/2,y:e.rect.y+e.rect.height/2},width:e.rect.width,height:e.rect.height,availableZ:e.zLayers,layer:`z${e.zLayers.join(",")}`}))};return{meshNodes:[]}}visualize(){return this.rectDiffExpansionSolver?this.rectDiffExpansionSolver.visualize():this.rectDiffSeedingSolver?this.rectDiffSeedingSolver.visualize():{title:"RectDiff Grid Pipeline",coordinateSystem:"cartesian",rects:[],points:[],lines:[]}}},rPt=(e)=>{let{srj:t,clearance:n}=e,o=n??0;if(o<=0)return{title:"Obstacle Clearance",coordinateSystem:"cartesian",rects:[]};let i=[];for(let r of t.obstacles??[]){if(r.type!=="rect"&&r.type!=="oval")continue;let s={x:r.center.x-r.width/2-o,y:r.center.y-r.height/2-o,width:r.width+2*o,height:r.height+2*o};i.push({center:{x:s.x+s.width/2,y:s.y+s.height/2},width:s.width,height:s.height,stroke:"rgba(202, 138, 4, 0.9)",fill:"rgba(234, 179, 8, 0.15)",layer:"obstacle-clearance",label:`clearance
z:${(r.zLayers??[]).join(",")||"all"}`})}return{title:"Obstacle Clearance",coordinateSystem:"cartesian",rects:i}};function Dwo(e,t,n={}){if(!t||t.length<3)return[];let o=t.length>120,i=o?function(A,m){let p=(f)=>Math.round(f/m)*m,g=new Set,_=[];for(let f of A){let y=p(f.x),x=p(f.y),C=`${y},${x}`;g.has(C)||(g.add(C),_.push({x:y,y:x}))}return _}(t,Math.max(e.width,e.height)/120):t,r=new Set([e.x,e.x+e.width]),s=new Set([e.y,e.y+e.height]);for(let A of i)r.add(A.x),s.add(A.y);(function({polygon:A,xs:m,ys:p,minGridSize:g}){let _=[],f=0;for(let x=0;x<A.length;x++){let C=A[x],I=A[(x+1)%A.length],b=Math.abs(I.x-C.x),P=Math.abs(I.y-C.y);if(b<=Jo||P<=Jo)continue;let E=Math.max(b,P);_.push({start:C,end:I,span:E}),f+=E}if(_.length===0)return;let y=Math.max(g,f/256);for(let{start:x,end:C,span:I}of _){let b=Math.max(1,Math.ceil(I/y));for(let P=1;P<b;P++){let E=P/b;m.add(x.x+(C.x-x.x)*E),p.add(x.y+(C.y-x.y)*E)}}})({polygon:i,xs:r,ys:s,minGridSize:Math.max(Jo,n.minGridSize??Math.max(e.width,e.height)/256)});let a=Array.from(r).sort((A,m)=>A-m),c=Array.from(s).sort((A,m)=>A-m),l=[];for(let A=0;A<a.length-1;A++)for(let m=0;m<c.length-1;m++){let p=a[A],g=a[A+1],_=c[m],f=c[m+1],y=(p+g)/2,x=(_+f)/2;if(y>=e.x&&y<=e.x+e.width&&x>=e.y&&x<=e.y+e.height)(o?[{x:y,y:x}]:[{x:y,y:x},{x:p,y:_},{x:g,y:_},{x:p,y:f},{x:g,y:f}]).every((C)=>Xee(C,t))||l.push({x:p,y:_,width:g-p,height:f-_})}let d=[];l.sort((A,m)=>Math.abs(A.y-m.y)>Jo?A.y-m.y:A.x-m.x);let u=null;for(let A of l){if(!u){u=A;continue}let m=Math.abs(u.y-A.y)<Jo,p=Math.abs(u.height-A.height)<Jo,g=Math.abs(u.x+u.width-A.x)<Jo;m&&p&&g?u.width+=A.width:(d.push(u),u=A)}u&&d.push(u),d.sort((A,m)=>Math.abs(A.x-m.x)>Jo?A.x-m.x:A.y-m.y);let h=[];u=null;for(let A of d){if(!u){u=A;continue}let m=Math.abs(u.x-A.x)<Jo,p=Math.abs(u.width-A.width)<Jo,g=Math.abs(u.y+u.height-A.y)<Jo;m&&p&&g?u.height+=A.height:(h.push(u),u=A)}return u&&h.push(u),h}var bU=class extends KE{rectDiffGridSolverPipeline;gapFillSolver;outerLayerContainmentMergeSolver;boardVoidRects;zIndexByName;layerNames;pipelineDef=[bh("rectDiffGridSolverPipeline",Two,(e)=>[{bounds:e.inputProblem.simpleRouteJson.bounds,obstacles:e.inputProblem.simpleRouteJson.obstacles,connections:e.inputProblem.simpleRouteJson.connections,outline:e.inputProblem.simpleRouteJson.outline?{outline:e.inputProblem.simpleRouteJson.outline}:void 0,layerCount:e.inputProblem.simpleRouteJson.layerCount,gridOptions:e.inputProblem.gridOptions,boardVoidRects:e.boardVoidRects,layerNames:e.layerNames,zIndexByName:e.zIndexByName,minTraceWidth:e.inputProblem.simpleRouteJson.minTraceWidth,obstacleClearance:e.inputProblem.obstacleClearance}]),bh("gapFillSolver",dwo,(e)=>[{meshNodes:e.rectDiffGridSolverPipeline?.getOutput().meshNodes??[],bounds:e.inputProblem.simpleRouteJson.bounds,boardVoid:{boardVoidRects:e.boardVoidRects||[],layerCount:e.inputProblem.simpleRouteJson.layerCount||0},maxGapFillPasses:e.inputProblem.maxGapFillPasses}]),bh("outerLayerContainmentMergeSolver",hwo,(e)=>[{meshNodes:e.gapFillSolver?.getOutput().outputNodes??e.rectDiffGridSolverPipeline?.getOutput().meshNodes??[],simpleRouteJson:e.inputProblem.simpleRouteJson,zIndexByName:e.zIndexByName??new Map,obstacleClearance:e.inputProblem.obstacleClearance}])];_setup(){let{zIndexByName:e,layerNames:t}=Fke({obstacles:this.inputProblem.simpleRouteJson.obstacles,layerCount:this.inputProblem.simpleRouteJson.layerCount});if(this.zIndexByName=e,this.layerNames=t,this.inputProblem.simpleRouteJson.outline){let n=Math.max(0,this.inputProblem.simpleRouteJson.minBoardEdgeClearance??0);this.boardVoidRects=Dwo({x:this.inputProblem.simpleRouteJson.bounds.minX-n,y:this.inputProblem.simpleRouteJson.bounds.minY-n,width:this.inputProblem.simpleRouteJson.bounds.maxX-this.inputProblem.simpleRouteJson.bounds.minX+2*n,height:this.inputProblem.simpleRouteJson.bounds.maxY-this.inputProblem.simpleRouteJson.bounds.minY+2*n},this.inputProblem.simpleRouteJson.outline??[],{minGridSize:this.inputProblem.simpleRouteJson.minTraceWidth}).map((o)=>zke(o,n))}}getConstructorParams(){return[this.inputProblem]}getOutput(){let e=this.outerLayerContainmentMergeSolver?.getOutput();if(e)return{meshNodes:e.outputNodes};let t=this.gapFillSolver?.getOutput();return t?{meshNodes:t.outputNodes}:this.rectDiffGridSolverPipeline?this.rectDiffGridSolverPipeline.getOutput():{meshNodes:[]}}initialVisualize(){let e=function(o,i="RectDiff"){let r=[],s=[],a=o.bounds.minX,c=o.bounds.maxX,l=o.bounds.minY,d=o.bounds.maxY;o.outline&&o.outline.length>1?s.push({points:[...o.outline,o.outline[0]],strokeColor:"#111827",strokeWidth:0.01,label:"outline"}):r.push({center:{x:(a+c)/2,y:(l+d)/2},width:c-a,height:d-l,fill:"none",stroke:"#111827",label:"board"});for(let u of o.obstacles??[])if(u.type==="rect"||u.type==="oval"){let h=(u.zLayers??[]).join(",")||"all";r.push({center:{x:u.center.x,y:u.center.y},width:u.width,height:u.height,fill:"#fee2e2",stroke:"#ef4444",layer:"obstacle",label:`obstacle
z:${h}`})}return{title:i,coordinateSystem:"cartesian",rects:r,points:[],lines:s}}(this.inputProblem.simpleRouteJson,"RectDiffPipeline - Initial"),t=rPt({srj:this.inputProblem.simpleRouteJson,clearance:this.inputProblem.obstacleClearance}),n={title:"Initial Nodes",coordinateSystem:"cartesian",rects:(this.rectDiffGridSolverPipeline?.getOutput().meshNodes??[]).map((o)=>({center:o.center,width:o.width,height:o.height,stroke:"rgba(0, 0, 0, 0.3)",fill:"rgba(100, 100, 100, 0.1)",layer:`z${o.availableZ.join(",")}`,label:[`node ${o.capacityMeshNodeId}`,`z:${o.availableZ.join(",")}`].join(`
`)}))};return Sk(Sk(e,t),n)}finalVisualize(){return(({srj:e,meshNodes:t,obstacleClearance:n})=>{let o=(({srj:s})=>({title:"SimpleRoute Outline",coordinateSystem:"cartesian",lines:s.outline&&s.outline.length>1?[{points:[...s.outline,s.outline[0]],strokeColor:"#111827",strokeWidth:0.1,label:"outline"}]:[{points:[{x:s.bounds.minX,y:s.bounds.minY},{x:s.bounds.maxX,y:s.bounds.minY},{x:s.bounds.maxX,y:s.bounds.maxY},{x:s.bounds.minX,y:s.bounds.maxY},{x:s.bounds.minX,y:s.bounds.minY}],strokeColor:"#111827",strokeWidth:0.1,label:"bounds"}]}))({srj:e}),i=rPt({srj:e,clearance:n}),r=t.map((s)=>({center:s.center,width:s.width,height:s.height,stroke:Q_e(s.availableZ).stroke,fill:s._containsObstacle?"#fca5a5":Q_e(s.availableZ).fill,layer:`z${s.availableZ.join(",")}`,label:`node ${s.capacityMeshNodeId}
z:${s.availableZ.join(",")}`}));return Sk(Sk({title:"RectDiffPipeline - Final",coordinateSystem:"cartesian",rects:r,lines:[],points:[],texts:[]},o),i)})({srj:this.inputProblem.simpleRouteJson,meshNodes:this.getOutput().meshNodes,obstacleClearance:this.inputProblem.obstacleClearance})}},Nwo=class{cacheHitsByPrefix={};cacheMissesByPrefix={};isSyncCache=!0;cacheHits=0;cacheMisses=0;cache=new Map;getCachedSolutionSync(e){let t=this.cache.get(e);if(t!==void 0){this.cacheHits++;let n=e.split(":")[0];return this.cacheHitsByPrefix[n]=(this.cacheHitsByPrefix[n]||0)+1,structuredClone(t)}{this.cacheMisses++;let n=e.split(":")[0];return void(this.cacheMissesByPrefix[n]=(this.cacheMissesByPrefix[n]||0)+1)}}async getCachedSolution(e){return this.getCachedSolutionSync(e)}setCachedSolutionSync(e,t){this.cache.set(e,structuredClone(t))}async setCachedSolution(e,t){this.setCachedSolutionSync(e,t)}clearCache(){this.cache.clear(),this.cacheHits=0,this.cacheMisses=0,this.cacheHitsByPrefix={},this.cacheMissesByPrefix={}}getAllCacheKeys(){return Array.from(this.cache.keys())}},IDe="tscircuit_autorouter_cache_",Rwo=class{isSyncCache=!0;cacheHits=0;cacheMisses=0;cacheHitsByPrefix={};cacheMissesByPrefix={};constructor(){}getKey(e){return`${IDe}${e}`}getCachedSolutionSync(e){if(typeof localStorage>"u")return;let t=this.getKey(e);try{let n=localStorage.getItem(t);if(n!==null){let o=JSON.parse(n);this.cacheHits++;let i=e.split(":")[0];return this.cacheHitsByPrefix[i]=(this.cacheHitsByPrefix[i]||0)+1,o}{this.cacheMisses++;let o=e.split(":")[0];return void(this.cacheMissesByPrefix[o]=(this.cacheMissesByPrefix[o]||0)+1)}}catch(n){console.error(`Error getting cached solution sync for ${t}:`,n),this.cacheMisses++;let o=e.split(":")[0];return void(this.cacheMissesByPrefix[o]=(this.cacheMissesByPrefix[o]||0)+1)}}async getCachedSolution(e){return this.getCachedSolutionSync(e)}setCachedSolutionSync(e,t){if(typeof localStorage>"u")return;let n=this.getKey(e);try{let o=JSON.stringify(t);localStorage.setItem(n,o)}catch(o){console.error(`Error setting cached solution sync for ${n}:`,o),o instanceof DOMException&&(o.name==="QuotaExceededError"||o.name==="NS_ERROR_DOM_QUOTA_REACHED")&&console.warn(`LocalStorage quota exceeded. Failed to cache solution for ${n}. Consider clearing the cache.`)}}async setCachedSolution(e,t){this.setCachedSolutionSync(e,t)}clearCache(){if(typeof localStorage<"u")try{let e=[];for(let t=0;t<localStorage.length;t++){let n=localStorage.key(t);n?.startsWith(IDe)&&e.push(n)}e.forEach((t)=>localStorage.removeItem(t)),console.log(`Cleared ${e.length} items from LocalStorage cache.`)}catch(e){console.error("Error clearing LocalStorage cache:",e)}finally{this.cacheHits=0,this.cacheMisses=0,this.cacheHitsByPrefix={},this.cacheMissesByPrefix={}}}getAllCacheKeys(){let e=[];for(let t=0;t<1e4;t++){let n=localStorage.key(t);if(!n)break;n.includes(IDe)&&e.push(n)}return e}};function Qwo(){return globalThis.TSCIRCUIT_AUTOROUTER_LOCAL_STORAGE_CACHE||Xge(),globalThis.TSCIRCUIT_AUTOROUTER_LOCAL_STORAGE_CACHE}function CS(){return globalThis.TSCIRCUIT_AUTOROUTER_IN_MEMORY_CACHE||Xge(),globalThis.TSCIRCUIT_AUTOROUTER_IN_MEMORY_CACHE}function Xge(){globalThis.TSCIRCUIT_AUTOROUTER_LOCAL_STORAGE_CACHE??=new Rwo,globalThis.TSCIRCUIT_AUTOROUTER_IN_MEMORY_CACHE??=new Nwo}function Kee(e){let t={minX:e.center.x-e.width/2,maxX:e.center.x+e.width/2,minY:e.center.y-e.height/2,maxY:e.center.y+e.height/2};for(let n of e.portPoints)n.x<t.minX&&(t.minX=n.x),n.x>t.maxX&&(t.maxX=n.x),n.y<t.minY&&(t.minY=n.y),n.y>t.maxY&&(t.maxY=n.y);return t}var t9t=(e,t)=>e<=t?[e,t]:[t,e],MRe=(e)=>`${e[0]}|${e[1]}`,kwo=({portPointId:e,currentNodeId:t,inputNodes:n,connectionNodeIdsByPortPointId:o})=>{let i=e?o?.get(e):void 0;if(e&&!o)for(let a of n){let c=a.portPoints.find((l)=>l.portPointId===e);if(c?.connectionNodeIds){i=c.connectionNodeIds;break}}if(!i||i.length!==2)return[t,t];let[r,s]=i;return r&&s?t9t(r,s):[t,t]},BRe=0.000001,h8=(e,t)=>Math.abs(e-t)<=BRe,Lwo=({nodeAId:e,nodeBId:t,nodeBounds:n})=>{if(e===t)return null;let o=n.get(e),i=n.get(t);if(!o||!i)return null;let r=t9t(e,t),s=MRe(r);if(h8(o.maxX,i.minX)||h8(i.maxX,o.minX)){let a=Math.max(o.minY,i.minY),c=Math.min(o.maxY,i.maxY),l=c-a;if(l>BRe){let d=h8(o.maxX,i.minX)?o.maxX:o.minX;return{ownerNodeIds:r,ownerPairKey:s,orientation:"vertical",x1:d,y1:a,x2:d,y2:c,center:{x:d,y:(a+c)/2},length:l,nodeSideByOwnerId:h8(o.maxX,i.minX)?{[e]:"right",[t]:"left"}:{[e]:"left",[t]:"right"}}}}if(h8(o.maxY,i.minY)||h8(i.maxY,o.minY)){let a=Math.max(o.minX,i.minX),c=Math.min(o.maxX,i.maxX),l=c-a;if(l>BRe){let d=h8(o.maxY,i.minY)?o.maxY:o.minY;return{ownerNodeIds:r,ownerPairKey:s,orientation:"horizontal",x1:a,y1:d,x2:c,y2:d,center:{x:(a+c)/2,y:d},length:l,nodeSideByOwnerId:h8(o.maxY,i.minY)?{[e]:"top",[t]:"bottom"}:{[e]:"bottom",[t]:"top"}}}}return null},Fwo=({portPoint:e,ownerNodeIds:t,inputNodes:n})=>{for(let o of t){let i=n.find((s)=>s.capacityMeshNodeId===o);if(i?._containsTarget)return!0;if(i?.portPoints.find((s)=>s.portPointId===e.portPointId)?.connectionNodeIds?.some((s)=>n.find((a)=>a.capacityMeshNodeId===s)?._containsTarget))return!0}return!1},Wi=(e,t)=>e==="top"?0:e==="bottom"?t-1:parseInt(e.slice(5));function Lte(e,t){return[...new Set(e)].filter((n)=>Number.isInteger(n)&&n>=0&&n<t).sort((n,o)=>n-o)}function Fte(e,t){return Lte(e.map((n)=>Wi(n,t)),t)}var wY=0.000001,sPt=({sharedEdge:e,obstacles:t,z:n,layerCount:o})=>{for(let i of t){let r=i.zLayers??(o===void 0?void 0:i.layers.map((d)=>Wi(d,o)));if(n!==void 0&&r&&!r.includes(n))continue;let s=i.center.x-i.width/2,a=i.center.x+i.width/2,c=i.center.y-i.height/2,l=i.center.y+i.height/2;if(e.orientation!=="vertical"){if(Math.abs(e.y1-c)<wY||Math.abs(e.y1-l)<wY){let d=Math.max(e.x1,s);if(Math.min(e.x2,a)-d>wY)return!0}}else if(Math.abs(e.x1-s)<wY||Math.abs(e.x1-a)<wY){let d=Math.max(e.y1,c);if(Math.min(e.y2,l)-d>wY)return!0}}return!1},Hte=class extends Js{constructor(e){super(),this.input=e;for(let o of e.nodeWithPortPoints)this.mapOfNodeIdToBounds.set(o.capacityMeshNodeId,e.useLayerAwareGeometry?{minX:o.center.x-o.width/2,maxX:o.center.x+o.width/2,minY:o.center.y-o.height/2,maxY:o.center.y+o.height/2}:Kee(o));let t=new Map,n=((o)=>{let i=new Map;for(let r of o){let s=new Set;for(let a of r.portPoints){let c=a.portPointId;c&&!s.has(c)&&(s.add(c),!i.has(c)&&a.connectionNodeIds&&i.set(c,a.connectionNodeIds))}}return i})(e.inputNodesWithPortPoints);for(let o of e.nodeWithPortPoints)for(let i of o.portPoints){if(!i.portPointId)continue;let r=kwo({portPointId:i.portPointId,currentNodeId:o.capacityMeshNodeId,inputNodes:e.inputNodesWithPortPoints,connectionNodeIdsByPortPointId:n}),s=MRe(r),a=this.mapOfOwnerPairToPortPoints.get(s)??[];a.some((c)=>c.portPointId&&c.portPointId===i.portPointId)||a.push({...i,ownerNodeIds:r,ownerPairKey:s}),this.mapOfOwnerPairToPortPoints.set(s,a),t.set(s,r)}this.mapOfOwnerPairToSharedEdge=(({ownerPairs:o,nodeBounds:i})=>{let r=new Map;for(let s of o){let[a,c]=s;if(a===c)continue;let l=Lwo({nodeAId:a,nodeBId:c,nodeBounds:i});l&&r.set(MRe(s),l)}return r})({ownerPairs:Array.from(t.values()),nodeBounds:this.mapOfNodeIdToBounds}),this.ownerPairsToProcess=Array.from(this.mapOfOwnerPairToSharedEdge.keys()),this.ownerPairsToProcess.sort((o,i)=>{let r=this.mapOfOwnerPairToSharedEdge.get(o),s=this.mapOfOwnerPairToSharedEdge.get(i);return r.center.x-s.center.x||r.center.y-s.center.y})}input;getSolverName(){return"UniformPortDistributionSolver"}mapOfNodeIdToBounds=new Map;mapOfOwnerPairToPortPoints=new Map;mapOfOwnerPairToSharedEdge=new Map;ownerPairsToProcess=[];currentOwnerPairBeingProcessed=null;redistributedNodes=[];step(){if(this.ownerPairsToProcess.length===0)return this.rebuildNodes(),void(this.solved=!0);this.currentOwnerPairBeingProcessed=this.ownerPairsToProcess.shift();let e=this.currentOwnerPairBeingProcessed,t=this.mapOfOwnerPairToSharedEdge.get(e);if(!t)return;let n=this.mapOfOwnerPairToPortPoints.get(e)??[],o=sPt({sharedEdge:t,obstacles:this.input.obstacles});if(!this.input.useLayerAwareGeometry&&o)return;let i=new Map;for(let a of n)i.set(a.z,(i.get(a.z)??0)+1);let r=[];for(let a of n)this.input.preserveSolitaryPorts&&o&&i.get(a.z)===1||sPt({sharedEdge:t,obstacles:this.input.obstacles,z:this.input.useLayerAwareGeometry?a.z:void 0,layerCount:this.input.layerCount})||Fwo({portPoint:a,ownerNodeIds:a.ownerNodeIds,inputNodes:this.input.inputNodesWithPortPoints})||r.push(a);let s=(({sharedEdge:a,portPoints:c})=>{if(c.length===0)return[];let l=new Map;for(let h of c){let A=h.z??0,m=l.get(A)??[];m.push(h),l.set(A,m)}let d=[],u=Array.from(l.keys()).sort((h,A)=>h-A);for(let h of u){let A=l.get(h),m=A.length;A.sort((p,g)=>a.orientation==="horizontal"?p.x-g.x:p.y-g.y);for(let p=0;p<m;p++){let g=(2*p+1)/(2*m),_=a.orientation==="horizontal"?a.x1+a.length*g:a.x1,f=a.orientation==="horizontal"?a.y1:a.y1+a.length*g;d.push({...A[p],x:_,y:f})}}return d})({sharedEdge:t,portPoints:r});this.mapOfOwnerPairToPortPoints.set(e,s)}rebuildNodes(){let e=new Map;for(let n of this.mapOfOwnerPairToPortPoints.values())for(let o of n)o.portPointId&&e.set(o.portPointId,{x:o.x,y:o.y});let t=(n)=>{if(n.portPointId&&e.has(n.portPointId)){let o=e.get(n.portPointId);return{...n,x:o.x,y:o.y}}return n};this.redistributedNodes=this.input.nodeWithPortPoints.map((n)=>({...n,portPoints:n.portPoints.map(t),portPointsInPairs:n.portPointsInPairs?.map(([o,i])=>[t(o),t(i)])}))}getOutput=()=>this.redistributedNodes;visualize(){return(({obstacles:e,nodeWithPortPoints:t,mapOfOwnerPairToPortPoints:n,mapOfOwnerPairToSharedEdge:o,ownerPairsToProcess:i,currentOwnerPairBeingProcessed:r,mapOfNodeIdToBounds:s})=>{let a=e.filter((m)=>!m.isCopperPour).map((m)=>({...m,fill:"#ec000070"})),c=[],l=[],d=new Map,u=new Map,h=new Map,A=(m)=>m.portPointId?d.get(m.portPointId)??{x:m.x,y:m.y}:{x:m.x,y:m.y};for(let m of t)for(let p of m.portPoints)p.portPointId&&(d.set(p.portPointId,{x:p.x,y:p.y}),u.set(p.portPointId,p.z??0));for(let m of n.values())for(let p of m)p.portPointId&&(d.set(p.portPointId,{x:p.x,y:p.y}),u.set(p.portPointId,p.z??0),h.set(p.portPointId,`${p.ownerNodeIds[0]}&${p.ownerNodeIds[1]}`));t.forEach((m)=>{let p=s.get(m.capacityMeshNodeId);if(p){let g=(p.minX+p.maxX)/2,_=(p.minY+p.maxY)/2,f=p.maxX-p.minX,y=p.maxY-p.minY;a.push({center:{x:g,y:_},width:f,height:y,fill:"#00000030",label:`${m.capacityMeshNodeId}`})}m.portPoints.forEach((g)=>{if(!g.portPointId)return;let _=d.get(g.portPointId),f=u.get(g.portPointId)??0,y=h.get(g.portPointId)??`${m.capacityMeshNodeId}&${m.capacityMeshNodeId}`;c.push({x:_.x,y:_.y,label:`z:${f}
o:${y}`}),m.portPointsInPairs?.length||m.portPoints.forEach((x)=>{if(x.portPointId&&g!==x&&g.connectionName===x.connectionName){let C=d.get(x.portPointId);l.push({points:[_,C],strokeColor:"#fff822c9"})}})}),m.portPointsInPairs?.forEach(([g,_])=>{l.push({points:[A(g),A(_)],strokeColor:"#fff822c9"})})});for(let m of i){let p=o.get(m);p&&l.push({points:[{x:p.x1,y:p.y1},{x:p.x2,y:p.y2}],strokeColor:"orange",strokeWidth:0.01})}if(r){let m=o.get(r);m&&(l.push({points:[{x:m.x1,y:m.y1},{x:m.x2,y:m.y2}],strokeColor:"red",strokeWidth:0.03}),c.push({x:m.center.x,y:m.center.y,label:m.ownerPairKey}))}for(let m of o.values())l.push({points:[{x:m.x1,y:m.y1},{x:m.x2,y:m.y2}],strokeColor:"#33b5ff80",strokeWidth:0.006});return{rects:a,lines:l,points:c}})({obstacles:this.input.obstacles,nodeWithPortPoints:this.input.nodeWithPortPoints,mapOfOwnerPairToPortPoints:this.mapOfOwnerPairToPortPoints,mapOfOwnerPairToSharedEdge:this.mapOfOwnerPairToSharedEdge,ownerPairsToProcess:this.ownerPairsToProcess,currentOwnerPairBeingProcessed:this.currentOwnerPairBeingProcessed,mapOfNodeIdToBounds:this.mapOfNodeIdToBounds})}},N6=(e,t,n)=>e.connectedTo.some((o)=>o===t.connectionName||o===t.rootConnectionName||(n?.areIdsConnected(t.connectionName,o)??!1)||t.rootConnectionName!==void 0&&(n?.areIdsConnected(t.rootConnectionName,o)??!1));function Pk(e){return!("layers"in e)&&typeof e.layer=="string"}function k_(e){return Dy(e)[0]}function Dy(e){if(function(t){return!("layer"in t)&&Array.isArray(t.layers)}(e))return e.layers;if(Pk(e))return[e.layer];throw Error("Connection point must specify either layer or layers, never both")}var nd=(e,t)=>{if(e===1&&t===1)return"inner1";if(e<0||e>=t)throw Error(`Invalid z "${e}" for layer count: ${t}`);return e===0?"top":e===t-1?"bottom":`inner${e}`},bDe=(e,t)=>!!e&&!!t&&Math.abs(e.x-t.x)<=0.000000000001&&Math.abs(e.y-t.y)<=0.000000000001,Xpe=(e,t)=>jE(e,t)<=0.000001,Hwo=(e,t,n,o)=>t.toNextSegmentType==="through_obstacle"||(o.connectedMultilayerObstacles?o.connectedMultilayerObstacles.some((i)=>Xpe(t,i)&&Xpe(n,i)):o.obstacles?.some((i)=>((r)=>(r.__zLayers?.length??r.layers?.length??0)>1)(i)&&Xpe(t,i)&&Xpe(n,i)&&N6(i,e,o.connMap))??!1),aPt=({endpoint:e,endpointLayer:t,connectionPoints:n,tolerance:o})=>{let i;for(let r of n){if(!Pk(r)||!r.terminalVia)continue;if(r.layer!==t)continue;let s=bn(r,e);s>o||(!i||s<i.distance)&&(i={point:r,distance:s})}return i?.point},Ex=(e,t,n={})=>{let o=[];if(e.route.length===0)return o;let i=[],r=e.route[0].z;for(let a=0;a<e.route.length;a++){let c=e.route[a];if(c.z!==r){let l=i[i.length-1],d=nd(r,t);for(let h of i)o.push({route_type:"wire",x:h.x,y:h.y,width:h.traceThickness??e.traceThickness,layer:d});let u=nd(c.z,t);if(l&&Hwo(e,l,c,n))o.push({route_type:"through_obstacle",start:{x:l.x,y:l.y},end:{x:c.x,y:c.y},from_layer:d,to_layer:u,width:l.traceThickness??e.traceThickness,...l.toNextSegmentCircuitJsonMetadata?{circuitJsonMetadata:l.toNextSegmentCircuitJsonMetadata}:{}});else e.vias.some((h)=>Math.abs(h.x-c.x)<0.001&&Math.abs(h.y-c.y)<0.001)&&o.push({route_type:"via",x:c.x,y:c.y,from_layer:d,to_layer:u,via_diameter:e.viaDiameter,...n.defaultViaHoleDiameter!==void 0?{via_hole_diameter:n.defaultViaHoleDiameter}:{}});i=[c],r=c.z}else bDe(i[i.length-1],c)||i.push(c)}let s=nd(r,t);for(let a of i)o.push({route_type:"wire",x:a.x,y:a.y,width:a.traceThickness??e.traceThickness,layer:s});if(e.jumpers&&e.jumpers.length>0){let a=nd(e.route[0]?.z??0,t);for(let c of e.jumpers)o.push({route_type:"jumper",start:c.start,end:c.end,footprint:c.footprint,layer:a})}return(({route:a,hdRoute:c,layerCount:l,connectionPoints:d=[],tolerance:u=0.25,defaultViaHoleDiameter:h})=>{if(a.length===0||c.route.length===0||!d.length)return a;if(!d.some((w)=>Pk(w)&&w.terminalVia))return a;let A=a.filter((w)=>w.route_type!=="jumper"),m=a.filter((w)=>w.route_type==="jumper");if(A.length===0)return a;let p=c.route[0],g=c.route[c.route.length-1],_=nd(p.z,l),f=nd(g.z,l),y=aPt({endpoint:p,endpointLayer:_,connectionPoints:d,tolerance:u}),x=aPt({endpoint:g,endpointLayer:f,connectionPoints:d,tolerance:u}),C=[],I=[],b=A[0],P=A[A.length-1],E=p.traceThickness??c.traceThickness,B=g.traceThickness??c.traceThickness;return y?.terminalVia&&(C.push({route_type:"via",x:y.x,y:y.y,from_layer:y.layer,to_layer:y.terminalVia.toLayer,via_diameter:y.terminalVia.viaDiameter??c.viaDiameter,...h!==void 0?{via_hole_diameter:h}:{}}),b?.route_type==="wire"&&b.layer===y.layer&&bDe(b,y)||C.push({route_type:"wire",x:y.x,y:y.y,width:E,layer:y.layer})),x?.terminalVia&&(P?.route_type==="wire"&&P.layer===x.layer&&bDe(P,x)||I.push({route_type:"wire",x:x.x,y:x.y,width:B,layer:x.layer}),I.push({route_type:"via",x:x.x,y:x.y,from_layer:x.layer,to_layer:x.terminalVia.toLayer,via_diameter:x.terminalVia.viaDiameter??c.viaDiameter,...h!==void 0?{via_hole_diameter:h}:{}})),[...C,...A,...I,...m]})({route:o,hdRoute:e,layerCount:t,connectionPoints:n.connectionPoints,tolerance:n.terminalViaAttachTolerance,defaultViaHoleDiameter:n.defaultViaHoleDiameter})},cPt=["blue","orange","purple","cyan","magenta","yellowgreen","darkgoldenrod","deeppink"],HA=(e,t)=>{let n={};for(let o=0;o<e.connections.length;o++){let i=e.connections[o],r=t?.getNetConnectedToId(i.name);r&&!n[r]&&(n[r]=`hsl(${300*o/e.connections.length}, 100%, 50%)`),n[i.name]=(r?n[r]:null)??`hsl(${340*o/e.connections.length}, 100%, 50%)`}return n},Cr=(e,t)=>{try{return rV(t,e)}catch(n){return console.error(n),e}},jee=(e,t=1)=>{if(!e)return"rgba(0, 0, 0, 0.5)";let n=300*e.split("").reduce((o,i)=>o+i.charCodeAt(0),0)/e.length%360;return t<1?`hsla(${n}, 100%, 50%, ${t})`:`hsl(${n}, 100%, 50%)`},lPt=(e)=>{let t=new Set;return e.filter((n)=>!t.has(n)&&(t.add(n),!0))},BZ=(e,t,n)=>{if(!t)return;let o=e.get(t);o?o.includes(n)||o.push(n):e.set(t,[n])},O6=(e)=>{let t=new Map;for(let n of e.connections){let o=n.__rootConnectionNames??[n.name];for(let i of o){BZ(t,n.name,i),BZ(t,i,i),BZ(t,n.__netConnectionName,i);for(let r of n.pointsToConnect)BZ(t,r.pointId,i),BZ(t,r.pcb_port_id,i)}}return(n)=>((o,i=[])=>{let r=lPt(i).join(", ");return o.layers.map((s)=>r?`${s}
${r}`:s).join(`
`)})(n,((o,i)=>lPt([...o.connectedTo.flatMap((r)=>i.get(r)??[]),...(o.offBoardConnectsTo??[]).flatMap((r)=>i.get(r)??[])]))(n,t))},oee=(e,t)=>`z${Fte(e,t).join(",")}`,z6=(e,t)=>oee(Dy(e),t),n9t=(e,t)=>e.__zLayers&&e.__zLayers.length>0?Lte(e.__zLayers,t):Fte(e.layers,t),OE=(e,t)=>`z${n9t(e,t).join(",")}`,dPt=(...e)=>e.find((t)=>typeof t=="number"&&Number.isFinite(t)),y0=(e)=>{let t=dPt(e.min_via_hole_diameter,e.minViaHoleDiameter),n=dPt(e.min_via_pad_diameter,e.minViaPadDiameter,e.minViaDiameter),o=Math.max(n??e.minViaDiameter??0.3,t??0);return{padDiameter:o,holeDiameter:t??0.5*o}},Wk={"0603":{length:1.65,width:0.95,padLength:0.8,padWidth:0.95},1206:{length:3.2,width:1.6,padLength:0.6,padWidth:1.6},"1206x4_pair":{length:2.7,width:0.5,padLength:0.8,padWidth:0.5}},uPt={top:"red",bottom:"blue",inner1:"green",inner2:"yellow",inner3:"orange",inner4:"purple",inner5:"cyan",inner6:"magenta",inner7:"lime",inner8:"brown"};function hPt(e){if(Object.hasOwn(uPt,e))return uPt[e];let t=/^inner([1-9]\d*)$/.exec(e);if(t)return`hsl(${137*Number(t[1])%360}, 70%, 45%)`;throw Error(`No visualization color for layer "${e}"`)}var p1=(e,t={})=>{let n=[],o=[],i=[],r=[],s=HA(e),a=t.traceColorMode??"layer",c=e.layerCount,l=y0(e),d=O6(e);if(e.connections)for(let u of e.connections)for(let h of u.pointsToConnect){let A=Dy(h),m=u.__rootConnectionNames??[u.name];i.push({x:h.x,y:h.y,color:s[u.name],layer:z6(h,c),label:[u.name,m.join(", "),A.join(",")].join(`
`)})}if(e.traces)for(let u of e.traces){let h=e.minTraceWidth,A=u.route.filter((g)=>g.route_type==="jumper"),m=(g,_)=>{for(let y of A){let x=Math.abs(g.x-y.start.x)<0.01&&Math.abs(g.y-y.start.y)<0.01&&Math.abs(_.x-y.end.x)<0.01&&Math.abs(_.y-y.end.y)<0.01,C=Math.abs(g.x-y.end.x)<0.01&&Math.abs(g.y-y.end.y)<0.01&&Math.abs(_.x-y.start.x)<0.01&&Math.abs(_.y-y.start.y)<0.01;if(x||C)return!0}return!1};for(let g of u.route)if(g.route_type==="via"){let _=Wi(g.from_layer,c),f=Wi(g.to_layer,c),y=(g.via_diameter??l.padDiameter)/2,x=Array.from({length:Math.abs(f-_)+1},(C,I)=>Math.min(_,f)+I);o.push({center:{x:g.x,y:g.y},radius:y,fill:a==="net"?s[u.connection_name]:"blue",stroke:"none",layer:`z${x.join(",")}`})}else if(g.route_type==="through_obstacle"){let _=s[u.connection_name]??"purple";n.push({points:[g.start,g.end],strokeColor:Cr(_,0.35),strokeWidth:g.width,strokeDash:[0.1,0.1],layer:oee([g.from_layer,g.to_layer],c),label:`${u.connection_name} through_obstacle`})}let p;for(let g=0;g<u.route.length-1;g++){let _=u.route[g],f=u.route[g+1];if(_.route_type==="jumper"){p=void 0;let y=s[u.connection_name]??"rgba(255, 165, 0, 0.8)",x=_.footprint,C=Wk[x==="1206x4_pair"?"1206x4_pair":"0603"]??Wk["0603"],I=_.end.x-_.start.x,b=_.end.y-_.start.y,P=Math.abs(I)>Math.abs(b),E=P?C.padLength:C.padWidth,B=P?C.padWidth:C.padLength;r.push({center:_.start,width:E,height:B,fill:Cr(y,0.5),stroke:"rgba(0, 0, 0, 0.5)",layer:oee([_.layer],c)}),r.push({center:_.end,width:E,height:B,fill:Cr(y,0.5),stroke:"rgba(0, 0, 0, 0.5)",layer:oee([_.layer],c)}),n.push({points:[_.start,_.end],strokeColor:"rgba(100, 100, 100, 0.8)",strokeWidth:0.3*C.padWidth,layer:oee([_.layer],c)})}else if(_.route_type==="wire"&&f.route_type==="wire"&&f.layer===_.layer){if(m({x:_.x,y:_.y},{x:f.x,y:f.y})){p=void 0;continue}h=_.width;let y=_.layer==="top",x=a==="net"?s[u.connection_name]:hPt(_.layer),C=`z${Wi(_.layer,c)}`;if(p&&p.layer===C&&p.strokeWidth===h){p.points.push({x:f.x,y:f.y});continue}p={points:[{x:_.x,y:_.y},{x:f.x,y:f.y}],layer:C,strokeWidth:h,strokeColor:y?x:Cr(x,0.5),...a==="net"?{label:u.connection_name}:{},...y?{}:{strokeDash:[0.2,0.2]}},n.push(p)}else p=void 0}}for(let u of e.obstacles){if(u.isCopperPour)continue;let h=n9t(u,c);if(h.length===0)throw Error(`Cannot visualize obstacle "${u.obstacleId??"unknown"}" without a valid layer: layers=${u.layers.join(",")}, __zLayers=${u.__zLayers?.join(",")??"unset"}, layerCount=${c}`);let A=hPt((h.length===1?nd(h[0],c):null)==="bottom"?"bottom":"top"),m=0.5**h.length;r.push({center:u.center,width:u.width,height:u.height,ccwRotationDegrees:u.ccwRotationDegrees,fill:Cr(A,m),layer:OE(u,c),label:d(u)})}if(e.jumpers)for(let u of e.jumpers)for(let h of u.pads)r.push({center:h.center,width:h.width,height:h.height,ccwRotationDegrees:h.ccwRotationDegrees,fill:"rgba(255, 165, 0, 0.3)",stroke:"rgba(255, 165, 0, 0.8)",layer:OE(h,c)});return{rects:r,circles:o,lines:n,points:i}};function Owo([e,t],[n,o],{lineThickness:i=0}={}){if(i===0)return mPt(e,t,n,o);return function(s,a,c,l){if(s.x===a.x&&s.y===a.y)return TY(s,c,l);if(c.x===l.x&&c.y===l.y)return TY(c,s,a);if(mPt(s,a,c,l))return 0;let d=[TY(s,c,l),TY(a,c,l),TY(c,s,a),TY(l,s,a)];return Math.min(...d)}(e,t,n,o)<=i}function mPt(e,t,n,o){let i=Kpe(e,t,n),r=Kpe(e,t,o),s=Kpe(n,o,e),a=Kpe(n,o,t);return i!==r&&s!==a||(!(i!==0||!jpe(e,n,t))||(!(r!==0||!jpe(e,o,t))||(!(s!==0||!jpe(n,e,o))||!(a!==0||!jpe(n,t,o)))))}function Kpe(e,t,n){let o=(t.y-e.y)*(n.x-t.x)-(t.x-e.x)*(n.y-t.y);return o===0?0:o>0?1:2}function jpe(e,t,n){return t.x<=Math.max(e.x,n.x)&&t.x>=Math.min(e.x,n.x)&&t.y<=Math.max(e.y,n.y)&&t.y>=Math.min(e.y,n.y)}function TY(e,t,n){let o=(n.x-t.x)**2+(n.y-t.y)**2;if(o===0)return pPt(e,t);let i=((e.x-t.x)*(n.x-t.x)+(e.y-t.y)*(n.y-t.y))/o;return i=Math.max(0,Math.min(1,i)),pPt(e,{x:t.x+i*(n.x-t.x),y:t.y+i*(n.y-t.y)})}function pPt(e,t){let n=e.x-t.x,o=e.y-t.y;return Math.sqrt(n*n+o*o)}function Gke(e){let t=new Map,n=0;function o(i){for(let[,s]of t)if(s.has(i))return s;let r=new Set;return t.set("connectivity_net"+n++,r),r}for(let i of e){let r=null;for(let s of i){if(r){if(!r.has(s)){let a=o(s);if(a!==r){for(let c of a)r.add(c);t.delete(Array.from(t.entries()).find(([,c])=>c===a)[0])}}}else r=o(s);r.add(s)}}return Object.fromEntries(Array.from(t.entries()).map(([i,r])=>[i,Array.from(r)]))}var Xk=class{netMap;idToNetMap;constructor(e){this.netMap=e,this.idToNetMap={};for(let[t,n]of Object.entries(e))for(let o of n)this.idToNetMap[o]=t}addConnections(e){for(let t of e){let n=new Set;for(let i of t){let r=this.idToNetMap[i];r&&n.add(r)}let o;if(n.size===0)o=`connectivity_net${Object.keys(this.netMap).length}`,this.netMap[o]=[];else if(n.size===1)o=n.values().next().value??`connectivity_net${Object.keys(this.netMap).length}`;else{o=n.values().next().value??`connectivity_net${Object.keys(this.netMap).length}`;for(let i of n)if(i!==o){this.netMap[o].push(...this.netMap[i]),this.netMap[i]=this.netMap[o];for(let r of this.netMap[o])this.idToNetMap[r]=o}}for(let i of t)this.netMap[o].includes(i)||this.netMap[o].push(i),this.idToNetMap[i]=o}}getIdsConnectedToNet(e){return this.netMap[e]||[]}getNetConnectedToId(e){return this.idToNetMap[e]}areIdsConnected(e,t){if(e===t)return!0;let n=this.getNetConnectedToId(e);if(!n)return!1;let o=this.getNetConnectedToId(t);return!!o&&(n===o||o===e||o===e)}areAllIdsConnected(e){let t=this.getNetConnectedToId(e[0]);for(let n of e){let o=this.getNetConnectedToId(n);if(o===void 0)return!1;if(o!==t)return!1}return!0}},uL=(e)=>{let t=[];for(let o of e)if(o.type==="source_trace")t.push([o.source_trace_id,...o.connected_source_port_ids??[],...o.connected_source_net_ids??[]].filter(Boolean));else if(o.type==="pcb_port"){let{pcb_port_id:i,source_port_id:r}=o;r&&i&&t.push([r,i])}else if(o.type==="pcb_smtpad"){let{pcb_smtpad_id:i,pcb_port_id:r}=o;r&&i&&t.push([i,r])}else if(o.type==="pcb_plated_hole"){let{pcb_plated_hole_id:i,pcb_port_id:r}=o;r&&i&&t.push([i,r])}else if(o.type==="pcb_trace"){let{pcb_trace_id:i,source_trace_id:r}=o,s=Array.isArray(o.route)?o.route.filter((a)=>a&&a.route_type==="wire"):[];if(r&&i&&t.push([i,r]),Array.isArray(s)){let a=s.find((l)=>l?.start_pcb_port_id)?.start_pcb_port_id,c=s.find((l)=>l?.end_pcb_port_id)?.end_pcb_port_id;a&&i&&t.push([a,i]),i&&c&&t.push([i,c])}}else if(o.type==="pcb_via"){let{pcb_via_id:i,pcb_trace_id:r,source_trace_id:s,source_net_id:a}=o,c=[...o.pcb_port_ids??[],r,s,a].filter((l)=>Boolean(l));i&&c.length>0&&t.push([i,...c])}else if(o.type==="source_component"&&o.internally_connected_source_port_ids)for(let i of o.internally_connected_source_port_ids)t.push(i);let n=Gke(t);return new Xk(n)},zwo=class{circuitJson;traceIdToElm;portIdToElm;connMap;constructor(e){this.circuitJson=e||[],this.traceIdToElm=new Map,this.portIdToElm=new Map,e?(this._buildTraceMap(),this._buildPortMap(),this.connMap=this._buildTraceConnectivityMap()):this.connMap=new Xk({})}_buildPortMap(){for(let e of this.circuitJson)e.type==="pcb_port"&&this.portIdToElm.set(e.pcb_port_id,e)}_buildTraceMap(){for(let e of this.circuitJson)e.type==="pcb_trace"&&this.traceIdToElm.set(e.pcb_trace_id,e)}_buildTraceConnectivityMap(){let e=[],t=Array.from(this.traceIdToElm.keys());for(let n=0;n<t.length;n++)for(let o=n+1;o<t.length;o++){let i=this.traceIdToElm.get(t[n]),r=this.traceIdToElm.get(t[o]);this._arePcbTracesConnected(i,r)&&e.push([t[n],t[o]])}for(let n of this.portIdToElm.values())for(let o of this.traceIdToElm.values())for(let i of o.route)i.route_type==="wire"&&(i.start_pcb_port_id===n.pcb_port_id?e.push([n.pcb_port_id,o.pcb_trace_id]):i.end_pcb_port_id===n.pcb_port_id&&e.push([o.pcb_trace_id,n.pcb_port_id]));return new Xk(Gke(e))}addTrace(e){this.traceIdToElm.set(e.pcb_trace_id,e);let t=[];for(let n of e.route)n.route_type==="wire"&&(n.start_pcb_port_id&&t.push([n.start_pcb_port_id,e.pcb_trace_id]),n.end_pcb_port_id&&t.push([n.end_pcb_port_id,e.pcb_trace_id]));this.connMap.addConnections(t)}_arePcbTracesConnected(e,t){for(let n=0;n<e.route.length-1;n++){let o=e.route[n],i=e.route[n+1];if(o.route_type!=="wire")continue;if(i.route_type!=="wire")continue;if(o.layer!==i.layer)continue;let r=Math.min(o.x,i.x),s=Math.min(o.y,i.y),a=Math.max(o.x,i.x),c=Math.max(o.y,i.y),l=Number.isFinite(r)&&Number.isFinite(s)&&Number.isFinite(a)&&Number.isFinite(c);for(let d=0;d<t.route.length-1;d++){let u=t.route[d],h=t.route[d+1];if(u.route_type!=="wire")continue;if(h.route_type!=="wire")continue;if(u.layer!==h.layer)continue;if(o.layer!==u.layer)continue;let A=(o.width+u.width)/2,m=Math.max(0,A)+0.000000001;if(l&&Number.isFinite(u.x)&&Number.isFinite(u.y)&&Number.isFinite(h.x)&&Number.isFinite(h.y)&&Number.isFinite(A)&&(Math.min(u.x,h.x)>a+m||Math.max(u.x,h.x)<r-m||Math.min(u.y,h.y)>c+m||Math.max(u.y,h.y)<s-m))continue;if(Owo([o,i],[u,h],{lineThickness:A}))return!0}}return!1}areTracesConnected(e,t){return this.connMap.areIdsConnected(e,t)}getAllTracesConnectedToTrace(e){let t=this.connMap.getNetConnectedToId(e);return t?this.connMap.getIdsConnectedToNet(t).filter((n)=>this.traceIdToElm.has(n)).map((n)=>this.traceIdToElm.get(n)):[]}getAllTracesConnectedToPort(e){let t=this.connMap.getNetConnectedToId(e);return t?this.connMap.getIdsConnectedToNet(t).filter((n)=>this.traceIdToElm.has(n)).map((n)=>this.traceIdToElm.get(n)):[]}},APt=(e)=>`${Math.round(100*e.x)},${Math.round(100*e.y)}`,x0=(e)=>{let t=new Xk({});for(let n of e.connections){for(let o of n.__rootConnectionNames??[])t.addConnections([[n.name,o]]);n.__netConnectionName&&t.addConnections([[n.name,n.__netConnectionName]]);for(let o of n.pointsToConnect)t.addConnections([[n.name,`${APt(o)}:${Dy(o).map((i)=>Wi(i,e.layerCount)).sort().join("-")}`]]),"pcb_port_id"in o&&o.pcb_port_id&&t.addConnections([[n.name,o.pcb_port_id]]),o.pointId&&t.addConnections([[n.name,o.pointId]])}for(let n of e.obstacles){let o=n.offBoardConnectsTo??[],i=Array.from(new Set([n.obstacleId,...n.connectedTo,...o,`${APt(n.center)}:${n.layers.map((r)=>Wi(r,e.layerCount)).sort().join("-")}`].filter(Boolean)));i.length>0&&t.addConnections([i])}for(let n of e.traces??[]){let o=Array.from(new Set([n.pcb_trace_id,n.connection_name,...n.connectsTo??[]].filter(Boolean)));o.length>0&&t.addConnections([o])}return t},rT=(e)=>{let t=new Xk({});for(let n of e.connections){let o=n.externallyConnectedPointIds??[];t.addConnections(o)}for(let n of e.traces??[]){let o=n.connectsTo??[];o.length!==0&&t.addConnections([[n.pcb_trace_id,...o]])}return t},Oi=class{MAX_ITERATIONS=1000;solved=!1;failed=!1;iterations=0;progress=0;error=null;activeSubSolver;failedSubSolvers;timeToSolve;stats={};pendingEffects;cacheHit;cacheKey;cacheToSolveSpaceTransform;getSolverName(){return this.constructor.name}step(){if(!this.solved&&!this.failed){this.iterations++;try{this._step()}catch(e){throw this.error=`${this.getSolverName()} error: ${e}`,console.error(this.error),this.failed=!0,e}!this.solved&&this.iterations>this.MAX_ITERATIONS&&this.tryFinalAcceptance(),!this.solved&&this.iterations>this.MAX_ITERATIONS&&(this.error=`${this.getSolverName()} ran out of iterations (MAX_ITERATIONS=${this.MAX_ITERATIONS})`,this.failed=!0),"computeProgress"in this&&(this.progress=this.computeProgress())}}_step(){}getConstructorParams(){throw Error("getConstructorParams not implemented")}solve(){let e=Date.now();for(;!this.solved&&!this.failed;)this.step();let t=Date.now();this.timeToSolve=t-e}visualize(){return{lines:[],points:[],rects:[],circles:[]}}tryFinalAcceptance(){}preview(){return{lines:[],points:[],rects:[],circles:[]}}};function GV(e){let t=new Map;for(let n of e)for(let o of n.nodeIds)t.set(o,[...t.get(o)??[],n]);return t}var hL=class extends Oi{getSolverName(){return"AvailableSegmentPointSolver"}nodes;edges;traceWidth;obstacleMargin;minPortSpacing;nodeMap;nodeEdgeMap;sharedEdgeSegments=[];edgeSegmentMap=new Map;portPointMap=new Map;colorMap;shouldReturnCrampedPortPoints;constructor({nodes:e,edges:t,traceWidth:n,obstacleMargin:o,colorMap:i,shouldReturnCrampedPortPoints:r}){super(),this.nodes=e,this.edges=t,this.traceWidth=n,this.obstacleMargin=o??0.15,this.shouldReturnCrampedPortPoints=r,this.minPortSpacing=this.traceWidth+this.obstacleMargin,this.colorMap=i??{},this.nodeMap=new Map(e.map((s)=>[s.capacityMeshNodeId,s])),this.nodeEdgeMap=GV(t),this.MAX_ITERATIONS=1}_step(){this.computeAllSharedEdgeSegments(),this.solved=!0}computeAllSharedEdgeSegments(){for(let e of this.edges){let[t,n]=e.nodeIds,o=this.nodeMap.get(t),i=this.nodeMap.get(n);if(!o||!i)continue;let r=this.computeSharedEdgeSegment(e,o,i);if(r){this.sharedEdgeSegments.push(r),this.edgeSegmentMap.set(e.capacityMeshEdgeId,r);for(let s of r.portPoints)this.portPointMap.set(s.segmentPortPointId,s)}}}computeSharedEdgeSegment(e,t,n){let o=this.findOverlappingSegment(t,n);if(!o)return null;let i=t.availableZ.filter((_)=>n.availableZ.includes(_));if(i.length===0)return null;let r=Math.sqrt((o.end.x-o.start.x)**2+(o.end.y-o.start.y)**2),s=Boolean(t._isNarrowQfpPadGap||n._isNarrowQfpPadGap),a=3*this.minPortSpacing/4,c=Math.max(0,r-2*a);if(c<=0&&!t._containsTarget&&!n._containsTarget){if(!this.shouldReturnCrampedPortPoints)return null;let _=[];for(let f of i)_.push({segmentPortPointId:`${e.capacityMeshEdgeId}_pp0_z${f}_cramped`,x:(o.start.x+o.end.x)/2,y:(o.start.y+o.end.y)/2,availableZ:[f],nodeIds:[t.capacityMeshNodeId,n.capacityMeshNodeId],edgeId:e.capacityMeshEdgeId,connectionName:null,distToCentermostPortOnZ:0,cramped:!0});return{edgeId:e.capacityMeshEdgeId,nodeIds:[t.capacityMeshNodeId,n.capacityMeshNodeId],start:o.start,end:o.end,availableZ:i,portPoints:_}}let l=Math.max(1,Math.floor(c/this.minPortSpacing)+1);if(t._offBoardConnectionId||n._offBoardConnectionId){if(t._offBoardConnectionId&&!n._offBoardConnectionId){if(this.shouldSkipOffBoardPortPoint(t,n))return null}else if(n._offBoardConnectionId&&!t._offBoardConnectionId&&this.shouldSkipOffBoardPortPoint(n,t))return null;l=1}let d=[],u=o.end.x-o.start.x,h=o.end.y-o.start.y,A=(o.start.x+o.end.x)/2,m=(o.start.y+o.end.y)/2;l>5&&(l=5+Math.floor(l/4));let p=[];for(let _=0;_<l;_++){let f;f=r===0||l===1?0.5:(a+c*_/(l-1))/r;let y=o.start.x+u*f,x=o.start.y+h*f,C=Math.sqrt((y-A)**2+(x-m)**2);p.push({x:y,y:x,distToCenter:C})}let g=p.reduce((_,f)=>f.distToCenter<_.distToCenter?f:_);for(let _=0;_<l;_++){let{x:f,y}=p[_],x=Math.sqrt((f-g.x)**2+(y-g.y)**2);for(let C of i){let I={segmentPortPointId:`${e.capacityMeshEdgeId}_pp${_}_z${C}`,x:f,y,availableZ:[C],nodeIds:[t.capacityMeshNodeId,n.capacityMeshNodeId],edgeId:e.capacityMeshEdgeId,connectionName:null,distToCentermostPortOnZ:x,cramped:s};d.push(I)}}return{edgeId:e.capacityMeshEdgeId,nodeIds:[t.capacityMeshNodeId,n.capacityMeshNodeId],start:o.start,end:o.end,availableZ:i,portPoints:d}}shouldSkipOffBoardPortPoint(e,t){let n=this.nodeEdgeMap.get(t.capacityMeshNodeId)??[];for(let o of n){let i=o.nodeIds[0]===t.capacityMeshNodeId?o.nodeIds[1]:o.nodeIds[0];if(i===e.capacityMeshNodeId)continue;let r=this.nodeMap.get(i);if(r?._offBoardConnectionId!==e._offBoardConnectionId)continue;if(this.nodes.filter((a)=>a._offBoardConnectionId===e._offBoardConnectionId).length!==2)continue;let s={x:(e.center.x+r.center.x)/2,y:(e.center.y+r.center.y)/2};if(s.x>=t.center.x-t.width/2&&s.x<=t.center.x+t.width/2&&s.y>=t.center.y-t.height/2&&s.y<=t.center.y+t.height/2)return!0}return!1}findOverlappingSegment(e,t){let n={start:Math.max(e.center.x-e.width/2,t.center.x-t.width/2),end:Math.min(e.center.x+e.width/2,t.center.x+t.width/2)},o={start:Math.max(e.center.y-e.height/2,t.center.y-t.height/2),end:Math.min(e.center.y+e.height/2,t.center.y+t.height/2)},i=n.end-n.start,r=o.end-o.start;if(i<-0.0001||r<-0.0001)return null;if(i<r){let s=(n.start+n.end)/2;return{start:{x:s,y:o.start},end:{x:s,y:o.end}}}{let s=(o.start+o.end)/2;return{start:{x:n.start,y:s},end:{x:n.end,y:s}}}}getAvailablePortPointsBetweenNodes(e,t){let n=this.edges.find((i)=>i.nodeIds[0]===e&&i.nodeIds[1]===t||i.nodeIds[0]===t&&i.nodeIds[1]===e);if(!n)return[];let o=this.edgeSegmentMap.get(n.capacityMeshEdgeId);return o?o.portPoints.filter((i)=>i.connectionName===null):[]}getPortPointsForEdge(e,t){let n=this.edges.find((i)=>i.nodeIds[0]===e&&i.nodeIds[1]===t||i.nodeIds[0]===t&&i.nodeIds[1]===e);if(!n)return[];return this.edgeSegmentMap.get(n.capacityMeshEdgeId)?.portPoints??[]}assignPortPoint(e,t,n){let o=this.portPointMap.get(e);return!!o&&(o.connectionName===null&&(o.connectionName=t,o.rootConnectionName=n,!0))}releasePortPoint(e){let t=this.portPointMap.get(e);return!!t&&(t.connectionName=null,t.rootConnectionName=void 0,!0)}getAvailablePortCountForEdge(e,t){return this.getAvailablePortPointsBetweenNodes(e,t).length}getOutput(){return this.sharedEdgeSegments}visualize(){let e={lines:[],points:[],rects:[],circles:[]};for(let t of this.sharedEdgeSegments){e.lines.push({points:[t.start,t.end],strokeColor:"rgba(100, 100, 100, 0.5)"});for(let n of t.portPoints){let o=n.connectionName?this.colorMap[n.connectionName]??"blue":"rgba(0, 200, 0, 0.7)";n.cramped?e.rects.push({center:{x:n.x,y:n.y},width:0.1,height:0.1,fill:o,layer:`z${n.availableZ.join(",")}`,label:`cramped ${n.segmentPortPointId}`}):e.circles.push({center:{x:n.x,y:n.y},radius:this.traceWidth/2,fill:o,layer:`z${n.availableZ.join(",")}`,label:[n.segmentPortPointId,n.connectionName,n.availableZ.join(","),`cd: ${n.distToCentermostPortOnZ}`,`connects: ${n.nodeIds.join(",")}`].filter(Boolean).join(`
`)})}}return e}};function Kge(e,t){let n=e.center.x-e.width/2,o=e.center.x+e.width/2,i=e.center.y-e.height/2,r=e.center.y+e.height/2,s=t.center.x-t.width/2,a=t.center.x+t.width/2,c=t.center.y-t.height/2,l=t.center.y+t.height/2,u=(Math.abs(o-s)<0.001||Math.abs(n-a)<0.001)&&Math.min(r,l)-Math.max(i,c)>=0.001,h=(Math.abs(r-c)<0.001||Math.abs(i-l)<0.001)&&Math.min(o,a)-Math.max(n,s)>=0.001;return u||h}var Gwo=class extends Oi{constructor(e){super(),this.nodes=e,this.edges=[]}nodes;getSolverName(){return"CapacityMeshEdgeSolver"}edges;nodeMap;getNextCapacityMeshEdgeId(){return`ce${this.edges.length}`}_step(){this.edges=[];for(let e=0;e<this.nodes.length;e++)for(let t=e+1;t<this.nodes.length;t++)!(this.nodes[e]._strawNode&&this.nodes[t]._strawNode&&this.nodes[e]._strawParentCapacityMeshNodeId===this.nodes[t]._strawParentCapacityMeshNodeId)&&Kge(this.nodes[e],this.nodes[t])&&this.doNodesHaveSharedLayer(this.nodes[e],this.nodes[t])&&this.edges.push({capacityMeshEdgeId:this.getNextCapacityMeshEdgeId(),nodeIds:[this.nodes[e].capacityMeshNodeId,this.nodes[t].capacityMeshNodeId]});this.handleTargetNodes(),this.solved=!0}handleTargetNodes(){let e=this.nodes.filter((n)=>n._containsTarget),t=new Map(this.nodes.map((n)=>[n.capacityMeshNodeId,n]));for(let n=0;n<e.length;n++)for(let o=n+1;o<e.length;o++){let i=e[n],r=e[o];this.doNodesHaveSharedLayer(i,r)&&(this.doNodesTouchOrOverlap(i,r)&&(this.hasEdgeBetween(i,r)||this.edges.push({capacityMeshEdgeId:this.getNextCapacityMeshEdgeId(),nodeIds:[i.capacityMeshNodeId,r.capacityMeshNodeId]})))}for(let n of e){if(!n._containsObstacle||!n._targetConnectionName)continue;if(!this.edges.some((o)=>{if(!o.nodeIds.includes(n.capacityMeshNodeId))return!1;let i=o.nodeIds[0]===n.capacityMeshNodeId?o.nodeIds[1]:o.nodeIds[0],r=t.get(i);return!!r&&(!r._containsObstacle&&!r._containsTarget&&this.doNodesHaveSharedLayer(n,r))}))throw Error(`Target obstacle region "${n.capacityMeshNodeId}" for connection "${n._targetConnectionName}" has no bordering routing edge`)}}doNodesHaveSharedLayer(e,t){return e.availableZ.some((n)=>t.availableZ.includes(n))}hasEdgeBetween(e,t){return this.edges.some((n)=>n.nodeIds.includes(e.capacityMeshNodeId)&&n.nodeIds.includes(t.capacityMeshNodeId))}doNodesTouchOrOverlap(e,t){let o=e.center.x-e.width/2,i=e.center.x+e.width/2,r=e.center.y-e.height/2,s=e.center.y+e.height/2,a=t.center.x-t.width/2,c=t.center.x+t.width/2,l=t.center.y-t.height/2,d=t.center.y+t.height/2;return o<=c+0.001&&i+0.001>=a&&r<=d+0.001&&s+0.001>=l}visualize(){let e=new Map;for(let n of this.edges)for(let o of n.nodeIds)e.set(o,1+(e.get(o)??0));let t={lines:[],points:[],rects:this.nodes.map((n)=>{let o=Math.min(...n.availableZ);return{width:Math.max(n.width-2,0.8*n.width),height:Math.max(n.height-2,0.8*n.height),center:{x:n.center.x+o*n.width*0.05,y:n.center.y-o*n.width*0.05},fill:n._containsObstacle?"rgba(255,0,0,0.1)":{"0,1":"rgba(0,0,0,0.1)",0:"rgba(0,200,200, 0.1)",1:"rgba(0,0,200, 0.1)"}[n.availableZ.join(",")]??"rgba(0,200,200,0.1)",label:[n.capacityMeshNodeId,`availableZ: ${n.availableZ.join(",")}`,`target? ${n._containsTarget??!1}`,`obs? ${n._containsObstacle??!1}`,`conn: ${e.get(n.capacityMeshNodeId)??0}`].join(`
`),layer:`z${n.availableZ.join(",")}`}}),circles:[]};if(!this.nodeMap){this.nodeMap=new Map;for(let n of this.nodes)this.nodeMap.set(n.capacityMeshNodeId,n)}for(let n of this.edges){let o=this.nodeMap.get(n.nodeIds[0]),i=this.nodeMap.get(n.nodeIds[1]);if(o?.center&&i?.center){let r=Math.min(...o.availableZ),s=Math.min(...i.availableZ),a={x:o.center.x+r*o.width*0.05,y:o.center.y-r*o.width*0.05},c={x:i.center.x+s*i.width*0.05,y:i.center.y-s*i.width*0.05},l=Array.from(new Set([...o.availableZ,...i.availableZ])).sort();t.lines.push({layer:`z${l.join(",")}`,points:[a,c],strokeDash:o.availableZ.join(",")===i.availableZ.join(",")?void 0:"10 5"})}}return t}},Yke=class{constructor(e){this.nodes=e,this.buckets=new Map;for(let t of e){let n=t.center.x-t.width/2,o=t.center.y-t.height/2,i=t.center.x+t.width/2,r=t.center.y+t.height/2,s=Math.floor(n/this.CELL_SIZE),a=Math.floor(i/this.CELL_SIZE),c=Math.floor(o/this.CELL_SIZE),l=Math.floor(r/this.CELL_SIZE);for(let d=s;d<=a;d++)for(let u=c;u<=l;u++){let h=`${d}x${u}`,A=this.buckets.get(h);A?A.push(t):this.buckets.set(h,[t])}}}nodes;buckets;CELL_SIZE=0.4;getBucketKey(e,t){return`${Math.floor(e/this.CELL_SIZE)}x${Math.floor(t/this.CELL_SIZE)}`}getNodesInArea(e,t,n,o){let i=[],r=new Set,s=e-n/2,a=t-o/2,c=e+n/2,l=t+o/2,d=Math.floor(s/this.CELL_SIZE),u=Math.floor(c/this.CELL_SIZE),h=Math.floor(a/this.CELL_SIZE),A=Math.floor(l/this.CELL_SIZE);for(let m=d;m<=u;m++)for(let p=h;p<=A;p++){let g=`${m}x${p}`,_=this.buckets.get(g)||[];for(let f of _)r.has(f.capacityMeshNodeId)||(r.add(f.capacityMeshNodeId),i.push(f))}return i}},sT=class extends Gwo{constructor(e){super(e),this.nodes=e,this.MAX_ITERATIONS=1e7,this.nodeTree=new Yke(this.nodes),this.currentNodeIndex=0,this.edgeSet=new Set}nodes;getSolverName(){return"CapacityMeshEdgeSolver2_NodeTreeOptimization"}nodeTree;currentNodeIndex;edgeSet;_step(){if(this.currentNodeIndex>=this.nodes.length)return this.handleTargetNodes(),void(this.solved=!0);let e=this.nodes[this.currentNodeIndex],t=this.nodeTree.getNodesInArea(e.center.x,e.center.y,2*e.width,2*e.height);for(let n of t){if(!Kge(e,n))continue;let o=e._strawNode&&n._strawNode&&e._strawParentCapacityMeshNodeId===n._strawParentCapacityMeshNodeId;e.capacityMeshNodeId===n.capacityMeshNodeId||o||!this.doNodesHaveSharedLayer(e,n)||this.edgeSet.has(`${e.capacityMeshNodeId}-${n.capacityMeshNodeId}`)||(this.edgeSet.add(`${e.capacityMeshNodeId}-${n.capacityMeshNodeId}`),this.edgeSet.add(`${n.capacityMeshNodeId}-${e.capacityMeshNodeId}`),this.edges.push({capacityMeshEdgeId:this.getNextCapacityMeshEdgeId(),nodeIds:[e.capacityMeshNodeId,n.capacityMeshNodeId]}))}this.currentNodeIndex++}},Lc=(...e)=>{let t={points:[],lines:[],circles:[],rects:[],polygons:[],infiniteLines:[],arrows:[],texts:[]};return e.forEach((n,o)=>{n&&(n.lines&&(t.lines=[...t.lines||[],...n.lines.map((i)=>({...i,step:o}))]),n.points&&(t.points=[...t.points||[],...n.points.map((i)=>({...i,step:o}))]),n.circles&&(t.circles=[...t.circles||[],...n.circles.map((i)=>({...i,step:o}))]),n.rects&&(t.rects=[...t.rects||[],...n.rects.map((i)=>({...i,step:o}))]),n.polygons&&(t.polygons=[...t.polygons||[],...n.polygons.map((i)=>({...i,step:o}))]),n.infiniteLines&&(t.infiniteLines=[...t.infiniteLines||[],...n.infiniteLines.map((i)=>({...i,step:o}))]),n.arrows&&(t.arrows=[...t.arrows||[],...n.arrows.map((i)=>({...i,step:o}))]),n.texts&&(t.texts=[...t.texts||[],...n.texts.map((i)=>({...i,step:o}))]))}),t};function jge(e,t,n){let o=[],i=null;for(let r=0;r<e.length;r++){let s=e[r];i?i.z===s.z?i.points.push({x:s.x,y:s.y}):(o.push(i),i={points:[{x:s.x,y:s.y}],z:s.z,connectionName:t,color:n}):i={points:[{x:s.x,y:s.y}],z:s.z,connectionName:t,color:n},r===e.length-1&&i&&o.push(i)}return o}function CE(e,t){return{x:e.a*t.x+e.b*t.y+e.c,y:e.d*t.x+e.e*t.y+e.f}}var wRe=(e,t,n)=>{let[o,i]=e;if(o===i)return;let r=((s,a)=>{let c=s.portPointId??`${s.connectionName}:${s.x}:${s.y}:${s.z}`,l=a.portPointId??`${a.connectionName}:${a.x}:${a.y}:${a.z}`;return c<l?`${c}|${l}`:`${l}|${c}`})(o,i);t.has(r)||(t.add(r),n.push(e))},_Pt=(e,t,n)=>{for(let o=0;o<e.length-1;o++)wRe([e[o],e[o+1]],t,n)},o9t=(e)=>{let t=[],n=new Set,o=((s)=>{let a=new Map;for(let c of s)c.portPointId&&a.set(c.portPointId,c);return a})(e);for(let s of e){if(s.prevPortPointId){let a=o.get(s.prevPortPointId);a&&a.connectionName===s.connectionName&&wRe([a,s],n,t)}if(s.nextPortPointId){let a=o.get(s.nextPortPointId);a&&a.connectionName===s.connectionName&&wRe([s,a],n,t)}}if(t.length===0)return _Pt(e,n,t),t;let i=((s)=>{let a=new Set;for(let[c,l]of s)c.portPointId&&a.add(c.portPointId),l.portPointId&&a.add(l.portPointId);return a})(t),r=e.filter((s)=>!s.portPointId||!i.has(s.portPointId));return _Pt(r,n,t),t};function qpe(e,t,n){return Math.max(t,Math.min(n,e))}function i9t(e){let t=e.planeSize*e.layers,n=e.connectionCount,o=Math.sqrt(n),i=Math.max(1,e.maxIterations),r=qpe(Math.round(t*(8+1.2*o)),150000,12000000),s=qpe(Math.round(r*e.effort),150000,12000000),a=qpe(Math.round(0.2*i),150000,2000000);return{maxIterationsIters:Math.max(1,Math.min(i,Math.max(a,s))),baseSearchBudgetIters:qpe(Math.round(t*(10+0.8*o)*e.effort),50000,4000000)}}function SDe(e,t){for(let n=e;n;n=n.prev)if(n.id===t)return!0;return!1}var Ywo=class{f=[];seq=[];id=[];n=0;push(e,t,n){let o=this.n++;for(this.f[o]=e,this.seq[o]=t,this.id[o]=n;o>0;){let i=o-1>>1;if(this.less(i,o))break;this.swap(o,i),o=i}}pop(){let e=this.id[0];return this.n--,this.n>0&&(this.f[0]=this.f[this.n],this.seq[0]=this.seq[this.n],this.id[0]=this.id[this.n],this.siftDown(0)),e}get size(){return this.n}clear(){this.n=0}siftDown(e){for(;;){let t=2*e+1,n=t+1;if(t>=this.n)return;let o=t;if(n<this.n&&!this.less(t,n)&&(o=n),this.less(e,o))return;this.swap(e,o),e=o}}less(e,t){let n=this.f[e],o=this.f[t];return n!==o?n<o:this.seq[e]<this.seq[t]}swap(e,t){let n=this.f[e];this.f[e]=this.f[t],this.f[t]=n;let o=this.seq[e];this.seq[e]=this.seq[t],this.seq[t]=o;let i=this.id[e];this.id[e]=this.id[t],this.id[t]=i}},Vwo=[-1,-1,-1,0,0,1,1,1],Uwo=[-1,0,1,-1,1,-1,0,1],Jpe=class extends Js{getSolverName(){return"HighDensitySolverA01"}nodeWithPortPoints;cellSizeMm;viaDiameter;MAX_RIPS;maxCellCount;traceThickness;traceMargin;viaMinDistFromBorder;showPenaltyMap;showUsedCellMap;effort;stepMultiplier;hyperParameters;initialPenaltyFn;useExactViaTraceClearance=!1;ripHistoryCostMultiplier=0;rows;cols;layers;gridOrigin;gridToBoundsTransform;availableZ;zToLayer;layerToZ;connNameToId;connIdToName;connIdToRootNet;overlapFriendlyRootNets;planeSize;usedCellsFlat;portOwnerFlat;usedDiagFlat;penalty2d;visitedStamp;sharedCrossRootPortCells;stamp=0;viaOccupantScanOffsetsDr;viaOccupantScanOffsetsDc;viaOccupantScanOffsetsLen;viaOwnersByCell;viaCenterIndicesByConn;viaTraceClearanceMm;outputCellStepX;outputCellStepY;minViaRow;maxViaRow;minViaCol;maxViaCol;usedIndicesByConn;usedDiagIndicesByConn;unsolvedSegs;solvedRoutes;activeConnSeg=null;activeConnId=-1;crossLayerSearch=!1;nodePool;heap;seqCounter=0;_viaOccs=[];viaOccupantsByCell=new Map;ripCount;totalRipEvents=0;searchIterations=0;consecutiveSkips=0;penaltyCap;baseSearchBudgetIters;_moveCost=0;_moveRipped=null;get unsolvedConnections(){return this.unsolvedSegs}get solvedConnectionsMap(){return this.solvedRoutes}get activeConnection(){if(!this.activeConnSeg)return null;let e=this.activeConnSeg;return{connectionName:this.connIdToName[e.connId]??"",start:{row:e.startRow,col:e.startCol,z:e.startZ,x:0,y:0},end:{row:e.endRow,col:e.endCol,z:e.endZ,x:0,y:0}}}get openSet(){return{length:this.heap?.size??0}}get gridStats(){return{cells:this.planeSize||0,layers:this.layers||0,states:(this.planeSize||0)*(this.layers||0)}}constructor(e){super(),this.nodeWithPortPoints=e.nodeWithPortPoints,this.cellSizeMm=e.cellSizeMm,this.viaDiameter=e.viaDiameter,this.maxCellCount=e.maxCellCount,this.traceThickness=e.traceThickness??0.1,this.traceMargin=e.traceMargin??0.15,this.viaMinDistFromBorder=e.viaMinDistFromBorder??0.15,this.showPenaltyMap=e.showPenaltyMap??!1,this.showUsedCellMap=e.showUsedCellMap??!1,this.effort=e.effort??1,this.stepMultiplier=Math.max(1,Math.floor(e.stepMultiplier??1)),this.hyperParameters={shuffleSeed:0,ripCost:10,ripTracePenalty:0.5,ripViaPenalty:0.75,viaBaseCost:0.1,greedyMultiplier:1.5,...e.hyperParameters},this.MAX_ITERATIONS=1e8,this.MAX_RIPS=200,this.initialPenaltyFn=e.initialPenaltyFn}getConstructorParams(){return[{nodeWithPortPoints:this.nodeWithPortPoints,cellSizeMm:this.cellSizeMm,viaDiameter:this.viaDiameter,maxCellCount:this.maxCellCount,stepMultiplier:this.stepMultiplier,traceThickness:this.traceThickness,traceMargin:this.traceMargin,viaMinDistFromBorder:this.viaMinDistFromBorder,showPenaltyMap:this.showPenaltyMap,showUsedCellMap:this.showUsedCellMap,effort:this.effort,hyperParameters:this.hyperParameters,initialPenaltyFn:this.initialPenaltyFn}]}_setup(){let{nodeWithPortPoints:e,cellSizeMm:t}=this,{width:n,height:o,center:i}=e;this.availableZ=e.availableZ??[...new Set(e.portPoints.map((d)=>d.z))].sort((d,u)=>d-u),this.rows=Math.floor(o/t),this.cols=Math.floor(n/t),this.layers=this.availableZ.length,this.planeSize=this.rows*this.cols;let r=this.layers*this.planeSize;if(this.maxCellCount!==void 0&&r>this.maxCellCount)return this.error=`Cell count ${r} exceeds maxCellCount ${this.maxCellCount}`,void(this.failed=!0);let s=this.layers*Math.max(0,this.rows-1)*Math.max(0,this.cols-1)*2;this.zToLayer=new Map,this.layerToZ=new Map;for(let d=0;d<this.availableZ.length;d++){let u=this.availableZ[d];this.zToLayer.set(u,d),this.layerToZ.set(d,u)}if(this.gridOrigin={x:i.x-n/2,y:i.y-o/2},this.gridToBoundsTransform=function(d){let{originX:u,originY:h,rows:A,cols:m,cellSizeMm:p,width:g,height:_}=d,f,y,x,C;return m>1?(f=g/((m-1)*p),y=u*(1-f)-0.5*p*f):(f=1,y=u+g/2-(u+0.5*p)),A>1?(x=_/((A-1)*p),C=h*(1-x)-0.5*p*x):(x=1,C=h+_/2-(h+0.5*p)),{a:f,b:0,c:y,d:0,e:x,f:C}}({originX:this.gridOrigin.x,originY:this.gridOrigin.y,rows:this.rows,cols:this.cols,cellSizeMm:t,width:n,height:o}),this.outputCellStepX=this.cols>1?n/(this.cols-1):n,this.outputCellStepY=this.rows>1?o/(this.rows-1):o,this.connNameToId=new Map,this.connIdToName=[],this.connIdToRootNet=[],this.overlapFriendlyRootNets=new Set,this.penalty2d=new Float64Array(this.planeSize),this.initialPenaltyFn)for(let d=0;d<this.rows;d++){let u=d*this.cols;for(let h=0;h<this.cols;h++){let A=this.gridOrigin.x+(h+0.5)*t,m=this.gridOrigin.y+(d+0.5)*t,p=(h+0.5)/this.cols,g=(d+0.5)/this.rows;this.penalty2d[u+h]=this.initialPenaltyFn({x:A,y:m,px:p,py:g,row:d,col:h})}}this.usedCellsFlat=new Int32Array(r).fill(-1),this.portOwnerFlat=new Int32Array(r).fill(-1),this.usedDiagFlat=new Int32Array(s).fill(-1),this.visitedStamp=new Uint32Array(r),this.stamp=0;let a=function(d){let u=d.radiusMm/d.cellSizeMm,h=Math.round(u),A=Math.abs(u-h)<=0.000000001?h:Math.ceil(u),m=A*A,p=[],g=[];for(let _=-A;_<=A;_++)for(let f=-A;f<=A;f++)_*_+f*f<=m&&(p.push(_),g.push(f));return{rowOffsets:new Int32Array(p),columnOffsets:new Int32Array(g),length:p.length}}({radiusMm:this.viaDiameter/2,cellSizeMm:t});if(this.viaOccupantScanOffsetsLen=a.length,this.viaOccupantScanOffsetsDr=a.rowOffsets,this.viaOccupantScanOffsetsDc=a.columnOffsets,this.viaOwnersByCell=new Map,this.viaCenterIndicesByConn=[],this.viaTraceClearanceMm=this.viaDiameter/2+this.traceThickness/2,this.viaMinDistFromBorder>0){let d=Math.ceil(this.viaMinDistFromBorder/t);this.minViaRow=d,this.maxViaRow=this.rows-1-d,this.minViaCol=d,this.maxViaCol=this.cols-1-d}else this.minViaRow=0,this.maxViaRow=this.rows-1,this.minViaCol=0,this.maxViaCol=this.cols-1;this.unsolvedSegs=this.buildConnectionSegs(),this.sharedCrossRootPortCells=new Set;let c=new Map;for(let d of this.nodeWithPortPoints.portPoints){let u=this.connNameToId.get(d.connectionName);if(u===void 0)continue;let h=this.pointToCell(d),A=(h.z*this.rows+h.row)*this.cols+h.col,m=this.connIdToRootNet[u],p=c.get(A);p===void 0?c.set(A,m):p!==m&&this.sharedCrossRootPortCells.add(A);let g=this.portOwnerFlat[A];this.portOwnerFlat[A]=g===-1||g===u?u:-2}this.solvedRoutes=new Map,this.usedIndicesByConn=[],this.usedDiagIndicesByConn=[],this.ripCount=[],this.consecutiveSkips=0,this.penaltyCap=0.5*this.hyperParameters.ripCost,this.shuffleConnections();let l=i9t({planeSize:this.planeSize,layers:this.layers,connectionCount:this.unsolvedSegs.length,effort:this.effort,maxIterations:this.MAX_ITERATIONS});this.baseSearchBudgetIters=l.baseSearchBudgetIters,this.MAX_ITERATIONS=l.maxIterationsIters,this.activeConnSeg=null,this.activeConnId=-1,this.nodePool=[],this.heap=new Ywo,this.seqCounter=0}_step(){for(let e=0;e<this.stepMultiplier;e++){if(this.solved||this.failed)return;this.stepOnce()}}stepOnce(){if(!this.activeConnSeg){if(this.unsolvedSegs.length===0)return void(this.solved=!0);let y=this.unsolvedSegs.shift();this.activeConnSeg=y,this.activeConnId=y.connId,this.crossLayerSearch=y.startZ!==y.endZ,this.viaOccupantsByCell.clear(),this.nodePool=[],this.heap.clear(),this.seqCounter=0,this.searchIterations=0,this.nextStamp();let x=this.computeH(y.startZ,y.startRow,y.startCol,y.endZ,y.endRow,y.endCol)*this.hyperParameters.greedyMultiplier;return this.nodePool.push({z:y.startZ,row:y.startRow,col:y.startCol,g:0,f:x,parentIdx:-1,ripped:null}),void this.heap.push(x,this.seqCounter++,0)}this.searchIterations++;let e=this.ripCount[this.activeConnId]??0,t=Math.round(this.baseSearchBudgetIters*(1+0.25*Math.min(e,10)));if(this.searchIterations>t){let y=this.penalty2d;for(let x=0;x<y.length;x++)y[x]=0.9*y[x];return this.unsolvedSegs.push(this.activeConnSeg),this.activeConnSeg=null,this.activeConnId=-1,this.heap.clear(),this.nodePool=[],this.consecutiveSkips++,void(this.consecutiveSkips>=3*this.unsolvedSegs.length&&(this.error=`Convergence failure: ${this.unsolvedSegs.length} connections stuck`,this.failed=!0))}if(this.heap.size===0)return this.error=`No path found for ${this.connIdToName[this.activeConnId]}`,void(this.failed=!0);let n=this.heap.pop(),o=this.nodePool[n],{z:i,row:r,col:s,g:a,ripped:c}=o,l=(i*this.rows+r)*this.cols+s;if(this.visitedStamp[l]===this.stamp)return;this.visitedStamp[l]=this.stamp;let d=this.activeConnSeg;if(i===d.endZ&&r===d.endRow&&s===d.endCol)return this.finalizeRoute(n),this.activeConnSeg=null,void(this.activeConnId=-1);let{endZ:u,endRow:h,endCol:A}=d,m=this.activeConnId,p=this.rows,g=this.cols,_=(this.cellSizeMm,this.visitedStamp),f=this.stamp;for(let y=0;y<8;y++){let x=r+Vwo[y],C=s+Uwo[y];if(x<0||x>=p||C<0||C>=g)continue;if(_[(i*p+x)*g+C]===f)continue;if(this.computeMoveCostAndRips(m,i,r,s,i,x,C,c),this._moveCost<0)continue;let I=a+this._moveCost,b=I+this.computeH(i,x,C,u,h,A)*this.hyperParameters.greedyMultiplier,P=this.nodePool.length;this.nodePool.push({z:i,row:x,col:C,g:I,f:b,parentIdx:n,ripped:this._moveRipped}),this.heap.push(b,this.seqCounter++,P)}if(r>=this.minViaRow&&r<=this.maxViaRow&&s>=this.minViaCol&&s<=this.maxViaCol)for(let y=0;y<this.layers;y++){if(y===i)continue;if(_[(y*p+r)*g+s]===f)continue;if(this.computeMoveCostAndRips(m,i,r,s,y,r,s,c),this._moveCost<0)continue;let x=a+this._moveCost,C=x+this.computeH(y,r,s,u,h,A)*this.hyperParameters.greedyMultiplier,I=this.nodePool.length;this.nodePool.push({z:y,row:r,col:s,g:x,f:C,parentIdx:n,ripped:this._moveRipped}),this.heap.push(C,this.seqCounter++,I)}}getRipCost(e){return this.hyperParameters.ripCost*(1+this.ripHistoryCostMultiplier*(this.ripCount[e]??0))}computeMoveCostAndRips(e,t,n,o,i,r,s,a){let c=0,l=a,d=this.cols;if(t!==i){c+=this.hyperParameters.viaBaseCost,c+=Math.min(this.penalty2d[r*d+s],this.penaltyCap);let u=(i*this.rows+r)*d+s,h=this.portOwnerFlat[u],A=this.connIdToRootNet[h]===this.connIdToRootNet[e]&&this.overlapFriendlyRootNets.has(this.connIdToRootNet[e]),m=this.activeConnSeg,p=!!m&&i===m.endZ&&r===m.endRow&&s===m.endCol;if(h>=0&&h!==e&&!A&&!p)return this._moveCost=-1,void(this._moveRipped=l);this.fillViaOccupants(r,s,e);let g=this._viaOccs;for(let _=0;_<g.length;_++){let f=g[_];SDe(l,f)||(c+=this.getRipCost(f),l={id:f,prev:l}),c+=this.hyperParameters.ripViaPenalty}}else{let u=n>r?n-r:r-n,h=o>s?o-s:s-o;c+=(u+h>1?Math.SQRT2:1)*this.cellSizeMm,c+=Math.min(this.penalty2d[r*d+s],this.penaltyCap);let A=(i*this.rows+r)*d+s,m=this.portOwnerFlat[A],p=this.connIdToRootNet[m]===this.connIdToRootNet[e]&&this.overlapFriendlyRootNets.has(this.connIdToRootNet[e]),g=this.activeConnSeg,_=!!g&&i===g.endZ&&r===g.endRow&&s===g.endCol;if(m>=0&&m!==e&&!p&&!_)return this._moveCost=-1,void(this._moveRipped=l);let f=this.usedCellsFlat[A],y=this.connIdToRootNet[f]===this.connIdToRootNet[e]&&this.overlapFriendlyRootNets.has(this.connIdToRootNet[e]);if(f===-1||f===e||y||(SDe(l,f)||(c+=this.getRipCost(f),l={id:f,prev:l}),c+=this.hyperParameters.ripTracePenalty),this.viaOwnersByCell.size>0){this.fillTraceSegmentViaOccupants(n,o,r,s,e);let x=this._viaOccs;for(let C=0;C<x.length;C++){let I=x[C];SDe(l,I)||(c+=this.getRipCost(I),l={id:I,prev:l}),c+=this.hyperParameters.ripViaPenalty}}if(u===1&&h===1){let x=n<r?n:r,C=o<s?o:s,I=1^(n<r&&o<s||n>r&&o>s?0:1),b=this.cols-1,P=2*((i*(this.rows-1)+x)*b+C),E=this.usedDiagFlat[P+I],B=this.connIdToRootNet[E]===this.connIdToRootNet[e]&&this.overlapFriendlyRootNets.has(this.connIdToRootNet[e]);if(E!==-1&&E!==e&&!B)return this._moveCost=-1,void(this._moveRipped=l)}}this._moveCost=c,this._moveRipped=l}fillViaOccupants(e,t,n){let o=this._viaOccs;o.length=0;let i=e*this.cols+t,r=this.viaOccupantsByCell.get(i);if(r){for(let h of r)o.push(h);return}let s=this.rows,a=this.cols,c=this.viaOccupantScanOffsetsDr,l=this.viaOccupantScanOffsetsDc,d=this.viaOccupantScanOffsetsLen,u=this.usedCellsFlat;for(let h=0;h<this.layers;h++){let A=h*this.planeSize;for(let m=0;m<d;m++){let p=e+c[m],g=t+l[m];if(p<0||g<0||p>=s||g>=a)continue;let _=u[A+p*a+g];if(_===-1||_===n)continue;if(this.connIdToRootNet[_]===this.connIdToRootNet[n]&&this.overlapFriendlyRootNets.has(this.connIdToRootNet[n]))continue;let f=!1;for(let y=0;y<o.length;y++)if(o[y]===_){f=!0;break}f||o.push(_)}}this.viaOccupantsByCell.set(i,o.slice())}fillTraceSegmentViaOccupants(e,t,n,o,i){let r=this._viaOccs;r.length=0;let s=Math.min(e,n),a=Math.max(e,n),c=Math.min(t,o),l=Math.max(t,o),d=this.viaTraceClearanceMm/this.outputCellStepY,u=this.viaTraceClearanceMm/this.outputCellStepX,h=(o-t)*this.outputCellStepX,A=(n-e)*this.outputCellStepY,m=h*h+A*A,p=this.viaTraceClearanceMm*this.viaTraceClearanceMm;for(let[g,_]of this.viaOwnersByCell){let f=Math.floor(g/this.cols),y=g-f*this.cols;if(f<s-d||f>a+d||y<c-u||y>l+u)continue;let x=(y-t)*this.outputCellStepX,C=(f-e)*this.outputCellStepY,I=m===0?0:Math.max(0,Math.min(1,(x*h+C*A)/m)),b=x-h*I,P=C-A*I;if(!(b*b+P*P>=p))for(let E of _){if(E===i)continue;this.connIdToRootNet[E]===this.connIdToRootNet[i]&&this.overlapFriendlyRootNets.has(this.connIdToRootNet[i])||(r.includes(E)||r.push(E))}}}shouldSkipFixedPortHalo(e,t){let n=this.portOwnerFlat[e];if(n===t)return!1;if(n===-2)return!0;if(n<0)return!1;return!(this.connIdToRootNet[n]===this.connIdToRootNet[t]&&this.overlapFriendlyRootNets.has(this.connIdToRootNet[t]))}nextStamp(){this.stamp=this.stamp+1>>>0,this.stamp===0&&(this.visitedStamp.fill(0),this.stamp=1)}computeH(e,t,n,o,i,r){let s=Math.abs(t-i)+Math.abs(n-r);if(e===o)return s*this.cellSizeMm;if(!this.crossLayerSearch)return s*this.cellSizeMm+this.hyperParameters.viaBaseCost;let a=Math.max(this.minViaRow,Math.min(this.maxViaRow,t)),c=Math.max(this.minViaCol,Math.min(this.maxViaCol,n)),l=Math.max(this.minViaRow,Math.min(this.maxViaRow,i)),d=Math.max(this.minViaCol,Math.min(this.maxViaCol,r)),u=Math.abs(t-a)+Math.abs(n-c)+Math.abs(a-i)+Math.abs(c-r),h=Math.abs(t-l)+Math.abs(n-d)+Math.abs(l-i)+Math.abs(d-r);return Math.max(Math.min(u,h),s)*this.cellSizeMm+this.hyperParameters.viaBaseCost}internConn(e,t){let n=this.connNameToId.get(e);if(n!==void 0)return n;let o=this.connIdToName.length;var i;return this.connIdToName.push(e),this.connIdToRootNet.push((i=e,t??i.replace(/_mst\d+$/,""))),this.connNameToId.set(e,o),o}buildConnectionSegs(){let e=new Map;for(let o of this.nodeWithPortPoints.portPoints){let i=o.connectionName;e.has(i)||e.set(i,{points:[],rootConnectionName:o.rootConnectionName}),e.get(i).points.push(o)}let t=[],n=new Set;for(let[o,i]of e){let r=i.points,s=o9t(r);if(s.length===0)continue;let a=this.internConn(o,i.rootConnectionName);for(let[c,l]of s){let d=this.pointToCell(c),u=this.pointToCell(l),h=`${d.z}:${d.row}:${d.col}`,A=`${u.z}:${u.row}:${u.col}`,m=h<A?`${h}|${A}`:`${A}|${h}`,p=i.rootConnectionName??o,g=`${p}|${m}`;n.has(g)?this.overlapFriendlyRootNets.add(p):(n.add(g),t.push({connId:a,startZ:d.z,startRow:d.row,startCol:d.col,startPoint:c,endZ:u.z,endRow:u.row,endCol:u.col,endPoint:l}))}}return t}pointToCell(e){let t=Math.max(0,Math.min(this.cols-1,Math.round((e.x-this.gridOrigin.x)/this.cellSizeMm-0.5))),n=Math.max(0,Math.min(this.rows-1,Math.round((e.y-this.gridOrigin.y)/this.cellSizeMm-0.5)));return{z:this.zToLayer.get(e.z)??0,row:n,col:t}}shuffleConnections(){let e=this.unsolvedSegs,t=this.hyperParameters.shuffleSeed,n=()=>(t=1664525*t+1013904223&4294967295,(t>>>0)/4294967295);for(let o=e.length-1;o>0;o--){let i=Math.floor(n()*(o+1)),r=e[o];e[o]=e[i],e[i]=r}}finalizeRoute(e){this.consecutiveSkips=Math.max(0,this.consecutiveSkips-1);let t=[],n=e;for(;n>=0;){let I=this.nodePool[n];t.push({z:I.z,row:I.row,col:I.col}),n=I.parentIdx}for(t.reverse();t.length>1;){let I=t[0],b=(I.z*this.rows+I.row)*this.cols+I.col;if(!this.sharedCrossRootPortCells.has(b))break;t.shift()}for(;t.length>1;){let I=t[t.length-1],b=(I.z*this.rows+I.row)*this.cols+I.col;if(!this.sharedCrossRootPortCells.has(b))break;t.pop()}let o=[];for(let I=1;I<t.length;I++)t[I].z!==t[I-1].z&&o.push({row:t[I].row,col:t[I].col});let i=t[0],r=t[t.length-1],s=this.activeConnId,a=[];for(let I=this.nodePool[e].ripped;I;I=I.prev)a.push(I.id);for(let I=0;I<a.length;I++)if(this.ripTrace(a[I]),this.failed)return;let c=Math.ceil(this.traceMargin/this.cellSizeMm),l=[],d=this.rows,u=this.cols,h=this.usedCellsFlat;for(let I=0;I<t.length;I++){let b=t[I];for(let P=-c;P<=c;P++)for(let E=-c;E<=c;E++){let B=b.row+P,w=b.col+E;if(B<0||B>=d||w<0||w>=u)continue;let T=(b.z*d+B)*u+w;if((B!==b.row||w!==b.col)&&this.shouldSkipFixedPortHalo(T,s))continue;let Q=h[T],N=this.connIdToRootNet[Q]===this.connIdToRootNet[s]&&this.overlapFriendlyRootNets.has(this.connIdToRootNet[s]);(Q===-1||Q===s||N)&&(h[T]=s,l.push(T))}}let A=[],m=this.viaOccupantScanOffsetsDr,p=this.viaOccupantScanOffsetsDc,g=this.viaOccupantScanOffsetsLen;for(let I=0;I<o.length;I++){let b=o[I];for(let P=0;P<this.layers;P++){let E=P*this.planeSize;for(let B=0;B<g;B++){let w=b.row+m[B],T=b.col+p[B];if(w<0||w>=d||T<0||T>=u)continue;let Q=E+w*u+T;if((w!==b.row||T!==b.col)&&this.shouldSkipFixedPortHalo(Q,s))continue;let N=h[Q],F=this.connIdToRootNet[N]===this.connIdToRootNet[s]&&this.overlapFriendlyRootNets.has(this.connIdToRootNet[s]);if(N!==-1&&N!==s&&!F){let H=!1;for(let z=0;z<A.length;z++)if(A[z]===N){H=!0;break}H||A.push(N)}h[Q]=s,l.push(Q)}}}let _=[],f=this.cols-1;for(let I=1;I<t.length;I++){let b=t[I-1],P=t[I];if(b.z!==P.z)continue;let E=b.row>P.row?b.row-P.row:P.row-b.row,B=b.col>P.col?b.col-P.col:P.col-b.col;if(E!==1||B!==1)continue;let w=b.row<P.row?b.row:P.row,T=b.col<P.col?b.col:P.col,Q=b.row<P.row&&b.col<P.col||b.row>P.row&&b.col>P.col?0:1,N=1^Q,F=2*((b.z*(this.rows-1)+w)*f+T),H=F+N,z=this.usedDiagFlat[H],Y=this.connIdToRootNet[z]===this.connIdToRootNet[s]&&this.overlapFriendlyRootNets.has(this.connIdToRootNet[s]);if(z!==-1&&z!==s&&!Y)continue;let U=F+Q;this.usedDiagFlat[U]=s,_.push(U)}for(;this.usedIndicesByConn.length<=s;)this.usedIndicesByConn.push([]);let y=this.usedIndicesByConn[s]??[];for(y.push(...l),this.usedIndicesByConn[s]=y;this.usedDiagIndicesByConn.length<=s;)this.usedDiagIndicesByConn.push([]);let x=this.usedDiagIndicesByConn[s]??[];x.push(..._),this.usedDiagIndicesByConn[s]=x;let C=this.solvedRoutes.get(s)??[];if(C.push({connId:s,startZ:i.z,startRow:i.row,startCol:i.col,startPoint:this.activeConnSeg.startPoint,endZ:r.z,endRow:r.row,endCol:r.col,endPoint:this.activeConnSeg.endPoint,cells:t,viaCells:o}),this.solvedRoutes.set(s,C),this.useExactViaTraceClearance){for(;this.viaCenterIndicesByConn.length<=s;)this.viaCenterIndicesByConn.push([]);let I=this.viaCenterIndicesByConn[s]??[];for(let b of o){let P=b.row*this.cols+b.col,E=this.viaOwnersByCell.get(P)??new Set;E.has(s)||(E.add(s),I.push(P)),this.viaOwnersByCell.set(P,E)}this.viaCenterIndicesByConn[s]=I}for(let I=0;I<A.length;I++)if(this.ripTrace(A[I]),this.failed)return;if(a.length>0||A.length>0){let I=this.penalty2d,b=this.penaltyCap;if(this.totalRipEvents>50)for(let P=0;P<I.length;P++)I[P]=0.99*I[P];else for(let P=0;P<I.length;P++)I[P]>b&&(I[P]=0.5*I[P])}}ripTrace(e){for(;this.ripCount.length<=e;)this.ripCount.push(0);if(this.ripCount[e]++,this.totalRipEvents++,this.totalRipEvents>=this.MAX_RIPS)return this.error=`Convergence failure: exceeded MAX_RIPS ${this.MAX_RIPS}`,void(this.failed=!0);let t=this.solvedRoutes.get(e)??[];if(t.length>0){let r=this.cols;for(let s of t){for(let a=0;a<s.cells.length;a++){let c=s.cells[a],l=c.row*r+c.col;this.penalty2d[l]=this.penalty2d[l]+this.hyperParameters.ripTracePenalty}for(let a=0;a<s.viaCells.length;a++){let c=s.viaCells[a],l=c.row*r+c.col;this.penalty2d[l]=this.penalty2d[l]+this.hyperParameters.ripViaPenalty}}}let n=this.usedIndicesByConn[e];if(n){let r=this.usedCellsFlat;for(let s=0;s<n.length;s++){let a=n[s];r[a]===e&&(r[a]=-1)}this.usedIndicesByConn[e]=[]}let o=this.usedDiagIndicesByConn[e];if(o){let r=this.usedDiagFlat;for(let s=0;s<o.length;s++){let a=o[s];r[a]===e&&(r[a]=-1)}this.usedDiagIndicesByConn[e]=[]}let i=this.viaCenterIndicesByConn[e];if(i){for(let r of i){let s=this.viaOwnersByCell.get(r);s&&(s.delete(e),s.size===0&&this.viaOwnersByCell.delete(r))}this.viaCenterIndicesByConn[e]=[]}if(t.length>0){this.solvedRoutes.delete(e);for(let r of t)this.unsolvedSegs.push({connId:e,startZ:r.startZ,startRow:r.startRow,startCol:r.startCol,startPoint:r.startPoint,endZ:r.endZ,endRow:r.endRow,endCol:r.endCol,endPoint:r.endPoint})}}visualize(){let e=["red","blue","orange","green"],t=[],n=[],o=[],i=[],{width:r,height:s,center:a}=this.nodeWithPortPoints;i.push({center:{x:a.x,y:a.y},width:r,height:s,stroke:"gray"});let c=this.gridToBoundsTransform;if(this.showPenaltyMap&&this.penalty2d){let u=0;for(let h=0;h<this.penalty2d.length;h++)this.penalty2d[h]>u&&(u=this.penalty2d[h]);if(u>0)for(let h=0;h<this.rows;h++)for(let A=0;A<this.cols;A++){let m=this.penalty2d[h*this.cols+A];if(m<=0)continue;let p=Math.min(0.6,m/u*0.6),g=CE(c,{x:this.gridOrigin.x+(A+0.5)*this.cellSizeMm,y:this.gridOrigin.y+(h+0.5)*this.cellSizeMm});i.push({center:g,width:this.cellSizeMm*c.a,height:this.cellSizeMm*c.e,fill:`rgba(255,165,0,${p.toFixed(3)})`})}}if(this.showUsedCellMap&&this.usedCellsFlat)for(let u=0;u<this.layers;u++)for(let h=0;h<this.rows;h++)for(let A=0;A<this.cols;A++){if(this.usedCellsFlat[(u*this.rows+h)*this.cols+A]===-1)continue;let m=CE(c,{x:this.gridOrigin.x+(A+0.5)*this.cellSizeMm,y:this.gridOrigin.y+(h+0.5)*this.cellSizeMm});i.push({center:m,width:this.cellSizeMm*c.a,height:this.cellSizeMm*c.e,fill:"rgba(0,0,255,0.5)"})}for(let u of this.nodeWithPortPoints.portPoints)t.push({x:u.x,y:u.y,color:e[u.z]??"gray",label:u.connectionName});let l=["rgba(255,0,0,0.75)","rgba(0,0,255,0.75)","rgba(255,165,0,0.75)","rgba(0,128,0,0.75)"],d=this.getOutput();for(let u of d){if(u.route.length<2)continue;let h=0;for(let A=1;A<u.route.length;A++){let m=u.route[A-1];u.route[A].z!==m.z&&(A-h>=2&&n.push({points:u.route.slice(h,A).map((p)=>({x:p.x,y:p.y})),strokeColor:l[m.z]??"rgba(128,128,128,0.75)",strokeWidth:this.traceThickness}),h=A)}if(u.route.length-h>=2){let A=u.route[h].z;n.push({points:u.route.slice(h).map((m)=>({x:m.x,y:m.y})),strokeColor:l[A]??"rgba(128,128,128,0.75)",strokeWidth:this.traceThickness})}}for(let u of d)for(let h of u.vias)o.push({center:{x:h.x,y:h.y},radius:this.viaDiameter/2,fill:"rgba(0,0,0,0.3)",stroke:"black"});if(this.activeConnSeg&&this.visitedStamp){let u=this.stamp;for(let h=0;h<this.layers;h++)for(let A=0;A<this.rows;A++)for(let m=0;m<this.cols;m++){if(this.visitedStamp[(h*this.rows+A)*this.cols+m]!==u)continue;let p=CE(c,{x:this.gridOrigin.x+(m+0.5)*this.cellSizeMm,y:this.gridOrigin.y+(A+0.5)*this.cellSizeMm});t.push({x:p.x,y:p.y,color:"rgba(0,0,255,0.2)"})}}return{points:t,lines:n,circles:o,rects:i,coordinateSystem:"cartesian",title:`HighDensityA01 [${this.solvedRoutes?.size??0} solved, ${this.unsolvedSegs?.length??0} remaining]`}}getOutput(){let e=this.gridToBoundsTransform,t=[];for(let[n,o]of this.solvedRoutes??[]){let i=this.connIdToName[n];for(let r of o){let s=r.cells.map((a)=>{let c=this.gridOrigin.x+(a.col+0.5)*this.cellSizeMm,l=this.gridOrigin.y+(a.row+0.5)*this.cellSizeMm,d=CE(e,{x:c,y:l});return{x:d.x,y:d.y,z:this.layerToZ.get(a.z)??a.z}});s.length>0&&(s[0]={...r.startPoint},s.length>1&&(s[s.length-1]={...r.endPoint})),t.push({connectionName:i,rootConnectionName:this.connIdToRootNet[n],regionId:this.nodeWithPortPoints.capacityMeshNodeId,traceThickness:this.traceThickness,viaDiameter:this.viaDiameter,route:s,vias:r.viaCells.map((a)=>{let c=this.gridOrigin.x+(a.col+0.5)*this.cellSizeMm,l=this.gridOrigin.y+(a.row+0.5)*this.cellSizeMm;return CE(e,{x:c,y:l})})})}}return t}},PDe=["left","top","right","bottom","middle"],Wwo=class{f=new Float64Array(1024);seq=new Uint32Array(1024);id=new Int32Array(1024);n=0;push(e,t,n){this.ensureCapacity(this.n+1);let o=this.n++;for(this.f[o]=e,this.seq[o]=t,this.id[o]=n;o>0;){let i=o-1>>1;if(this.less(i,o))break;this.swap(o,i),o=i}}pop(){let e=this.id[0];return this.n--,this.n>0&&(this.f[0]=this.f[this.n],this.seq[0]=this.seq[this.n],this.id[0]=this.id[this.n],this.siftDown(0)),e}get size(){return this.n}clear(){this.n=0}ensureCapacity(e){if(e<=this.f.length)return;let t=this.f.length;for(;t<e;)t*=2;let n=new Float64Array(t);n.set(this.f),this.f=n;let o=new Uint32Array(t);o.set(this.seq),this.seq=o;let i=new Int32Array(t);i.set(this.id),this.id=i}siftDown(e){for(;;){let t=2*e+1,n=t+1;if(t>=this.n)return;let o=t;if(n<this.n&&!this.less(t,n)&&(o=n),this.less(e,o))return;this.swap(e,o),e=o}}less(e,t){let n=this.f[e],o=this.f[t];return n!==o?n<o:this.seq[e]<this.seq[t]}swap(e,t){let n=this.f[e];this.f[e]=this.f[t],this.f[t]=n;let o=this.seq[e];this.seq[e]=this.seq[t],this.seq[t]=o;let i=this.id[e];this.id[e]=this.id[t],this.id[t]=i}},Xwo=class{z=new Int32Array(1024);cellId=new Int32Array(1024);g=new Float64Array(1024);parent=new Int32Array(1024);ripHead=new Int32Array(1024).fill(-1);ripCount=new Int32Array(1024);length=0;clear(){this.length=0}push(e,t,n,o,i,r){this.ensureCapacity(this.length+1);let s=this.length++;return this.z[s]=e,this.cellId[s]=t,this.g[s]=n,this.parent[s]=o,this.ripHead[s]=i,this.ripCount[s]=r,s}ensureCapacity(e){if(e<=this.z.length)return;let t=this.z.length;for(;t<e;)t*=2;let n=new Int32Array(t);n.set(this.z),this.z=n;let o=new Int32Array(t);o.set(this.cellId),this.cellId=o;let i=new Float64Array(t);i.set(this.g),this.g=i;let r=new Int32Array(t);r.set(this.parent),this.parent=r;let s=new Int32Array(t);s.fill(-1),s.set(this.ripHead.subarray(0,this.length)),this.ripHead=s;let a=new Int32Array(t);a.set(this.ripCount.subarray(0,this.length)),this.ripCount=a}},Kwo=class{connId=new Int32Array(1024);prev=new Int32Array(1024).fill(-1);length=0;clear(){this.length=0}append(e,t){this.ensureCapacity(this.length+1);let n=this.length++;return this.connId[n]=t,this.prev[n]=e,n}contains(e,t){for(let n=e;n>=0;n=this.prev[n])if(this.connId[n]===t)return!0;return!1}collect(e,t){t.length=0;for(let n=e;n>=0;n=this.prev[n])t.push(this.connId[n])}ensureCapacity(e){if(e<=this.connId.length)return;let t=this.connId.length;for(;t<e;)t*=2;let n=new Int32Array(t);n.set(this.connId),this.connId=n;let o=new Int32Array(t);o.fill(-1),o.set(this.prev.subarray(0,this.length)),this.prev=o}};function AE(e,t,n){return Math.max(t,Math.min(n,e))}function $pe(e,t){for(let n=0;n<e.length;n++)if(e[n]===t)return;e.push(t)}function gPt(e,t){for(let n=0;n<e.length;n++)if(e[n].cellId===t.cellId)return;e.push(t)}function vDe(e,t,n,o,i,r,s){let a=e-AE(e,o,r),c=t-AE(t,i,s);return a*a+c*c<=n*n}var fPt,Zpe=class extends Js{getSolverName(){return"HighDensitySolverA03"}nodeWithPortPoints;highResolutionCellSize;highResolutionCellThickness;lowResolutionCellSize;viaDiameter;MAX_RIPS;maxCellCount;traceThickness;traceMargin;viaMinDistFromBorder;showPenaltyMap;showUsedCellMap;effort;enableDiagonalMoves;stepMultiplier;hyperParameters;initialPenaltyFn;boundsMinX;boundsMaxX;boundsMinY;boundsMaxY;gridToBoundsTransform;availableZ;zToLayer;layerToZ;layers;fineRows;fineCols;lowScale;bandRows;bandCols;regions;planeSize;cellCenterX;cellCenterY;cellMinX;cellMinY;cellMaxX;cellMaxY;cellWidth;cellHeight;cellRegion;cellRow;cellCol;viaAllowed;neighborOffset;neighborIds;neighborCosts;usedCellsFlat;sharedCellsFlat;portOwnerFlat;penalty2d;ripStateBuckets;visitedStamp;bestGStamp;bestGValue;visitedFlatStamp;sharedCrossRootPortFlat;stamp=0;connNameToId;connIdToName;connIdToRootNet;overlapFriendlyRootNets;usedIndicesByConn;unsolvedSegs;solvedRoutes;activeConnSeg=null;activeConnId=-1;nodePool;heap;ripChain;seqCounter=0;_viaOccs=[];viaOccupantsByCell=new Map;_cellOccs=[];_rippedIds=[];ripCount;totalRipEvents=0;searchIterations=0;consecutiveSkips=0;penaltyCap;baseSearchBudgetIters;_moveCost=0;_moveRippedHead=-1;_moveRipCount=0;traceKeepoutRadius;viaKeepoutRadius;get unsolvedConnections(){return this.unsolvedSegs}get solvedConnectionsMap(){let e=new Map;for(let t=0;t<this.solvedRoutes.length;t++){let n=this.getSolvedRoutesForConn(t);n.length>0&&e.set(t,n)}return e}get activeConnection(){if(!this.activeConnSeg)return null;let e=this.activeConnSeg.startCellId,t=this.activeConnSeg.endCellId;return{connectionName:this.connIdToName[this.activeConnSeg.connId]??"",start:{cellId:e,region:PDe[this.cellRegion[e]],row:this.cellRow[e],col:this.cellCol[e],x:this.cellCenterX[e],y:this.cellCenterY[e],z:this.activeConnSeg.startZ},end:{cellId:t,region:PDe[this.cellRegion[t]],row:this.cellRow[t],col:this.cellCol[t],x:this.cellCenterX[t],y:this.cellCenterY[t],z:this.activeConnSeg.endZ}}}get openSet(){return{length:this.heap?.size??0}}get gridStats(){return{cells:this.planeSize||0,layers:this.layers||0,states:(this.planeSize||0)*(this.layers||0),ripStateBuckets:this.ripStateBuckets||0,neighborEdges:this.neighborIds?.length??0,regionCounts:this.regions?Object.fromEntries(this.regions.map((e)=>[e.name,e.rows*e.cols])):{}}}constructor(e){super(),this.nodeWithPortPoints=e.nodeWithPortPoints,this.highResolutionCellSize=e.highResolutionCellSize??0.1,this.highResolutionCellThickness=Math.max(1,Math.floor(e.highResolutionCellThickness??8)),this.lowResolutionCellSize=e.lowResolutionCellSize??0.4,this.viaDiameter=e.viaDiameter,this.maxCellCount=e.maxCellCount,this.traceThickness=e.traceThickness??0.1,this.traceMargin=e.traceMargin??0.15,this.viaMinDistFromBorder=e.viaMinDistFromBorder??0.15,this.showPenaltyMap=e.showPenaltyMap??!1,this.showUsedCellMap=e.showUsedCellMap??!1,this.effort=e.effort??1,this.enableDiagonalMoves=e.enableDiagonalMoves??!1,this.stepMultiplier=Math.max(1,Math.floor(e.stepMultiplier??1)),this.hyperParameters={shuffleSeed:0,ripCost:8,ripTracePenalty:0.5,ripViaPenalty:0.75,viaBaseCost:0.1,greedyMultiplier:1.5,...e.hyperParameters},this.MAX_ITERATIONS=1e8,this.MAX_RIPS=200,this.initialPenaltyFn=e.initialPenaltyFn}getConstructorParams(){return[{nodeWithPortPoints:this.nodeWithPortPoints,highResolutionCellSize:this.highResolutionCellSize,highResolutionCellThickness:this.highResolutionCellThickness,lowResolutionCellSize:this.lowResolutionCellSize,viaDiameter:this.viaDiameter,maxCellCount:this.maxCellCount,stepMultiplier:this.stepMultiplier,traceThickness:this.traceThickness,traceMargin:this.traceMargin,viaMinDistFromBorder:this.viaMinDistFromBorder,showPenaltyMap:this.showPenaltyMap,showUsedCellMap:this.showUsedCellMap,effort:this.effort,enableDiagonalMoves:this.enableDiagonalMoves,hyperParameters:this.hyperParameters,initialPenaltyFn:this.initialPenaltyFn}]}_setup(){let{nodeWithPortPoints:e}=this,{width:t,height:n,center:o}=e,i=this.lowResolutionCellSize/this.highResolutionCellSize,r=Math.round(i);if(!Number.isFinite(i)||i<=0||Math.abs(i-r)>0.000000001)return this.error="lowResolutionCellSize must be a positive integer multiple of highResolutionCellSize",void(this.failed=!0);this.lowScale=Math.max(1,r),this.availableZ=e.availableZ??[...new Set(e.portPoints.map((h)=>h.z))].sort((h,A)=>h-A),this.layers=this.availableZ.length,this.zToLayer=new Map,this.layerToZ=new Map;for(let h=0;h<this.availableZ.length;h++){let A=this.availableZ[h];this.zToLayer.set(A,h),this.layerToZ.set(h,A)}this.boundsMinX=o.x-t/2,this.boundsMaxX=o.x+t/2,this.boundsMinY=o.y-n/2,this.boundsMaxY=o.y+n/2,this.traceKeepoutRadius=this.traceMargin+this.traceThickness/2,this.viaKeepoutRadius=this.viaDiameter/2+this.traceKeepoutRadius,this.buildFiveRegionGrid(t,n),this.gridToBoundsTransform=this.computeGridToBoundsTransform();let s=this.layers*this.planeSize;if(this.maxCellCount!==void 0&&s>this.maxCellCount)return this.error=`Cell count ${s} exceeds maxCellCount ${this.maxCellCount}`,void(this.failed=!0);this.connNameToId=new Map,this.connIdToName=[],this.connIdToRootNet=[],this.overlapFriendlyRootNets=new Set,this.unsolvedSegs=this.buildConnectionSegs(),this.penalty2d=new Float64Array(this.planeSize);let a=t>0?1/t:0,c=n>0?1/n:0;for(let h=0;h<this.planeSize;h++){let A=0;this.initialPenaltyFn&&(A+=this.initialPenaltyFn({x:this.cellCenterX[h],y:this.cellCenterY[h],px:(this.cellCenterX[h]-this.boundsMinX)*a,py:(this.cellCenterY[h]-this.boundsMinY)*c,cellId:h,region:PDe[this.cellRegion[h]],row:this.cellRow[h],col:this.cellCol[h]})),this.penalty2d[h]=A}this.usedCellsFlat=new Int32Array(s).fill(-1),this.sharedCellsFlat=Array.from({length:s},()=>{}),this.portOwnerFlat=new Int32Array(s).fill(-1),this.sharedCrossRootPortFlat=new Uint8Array(s),this.ripStateBuckets=1;let l=s;this.visitedStamp=new Uint32Array(l),this.bestGStamp=new Uint32Array(l),this.bestGValue=new Float64Array(l),this.visitedFlatStamp=new Uint32Array(s),this.stamp=0;let d=new Map;for(let h of this.nodeWithPortPoints.portPoints){let A=this.connNameToId.get(h.connectionName);if(A===void 0)continue;let m=this.pointToCell(h),p=m.z*this.planeSize+m.cellId,g=this.connIdToRootNet[A],_=d.get(p);_===void 0?d.set(p,g):_!==g&&(this.sharedCrossRootPortFlat[p]=1);let f=this.portOwnerFlat[p];this.portOwnerFlat[p]=f===-1||f===A?A:-2}this.solvedRoutes=[],this.usedIndicesByConn=[],this.ripCount=[],this.consecutiveSkips=0,this.penaltyCap=0.5*this.hyperParameters.ripCost,this.shuffleConnections();let u=i9t({planeSize:this.planeSize,layers:this.layers,connectionCount:this.unsolvedSegs.length,effort:this.effort,maxIterations:this.MAX_ITERATIONS});this.baseSearchBudgetIters=u.baseSearchBudgetIters,this.MAX_ITERATIONS=u.maxIterationsIters,this.activeConnSeg=null,this.activeConnId=-1,this.nodePool=new Xwo,this.heap=new Wwo,this.ripChain=new Kwo,this.seqCounter=0}_step(){for(let e=0;e<this.stepMultiplier;e++){if(this.solved||this.failed)return;this.stepOnce()}}buildFiveRegionGrid(e,t){this.fineCols=Math.max(1,Math.ceil(e/this.highResolutionCellSize)),this.fineRows=Math.max(1,Math.ceil(t/this.highResolutionCellSize)),this.bandCols=Math.min(this.highResolutionCellThickness,Math.floor(this.fineCols/2)),this.bandRows=Math.min(this.highResolutionCellThickness,Math.floor(this.fineRows/2));let n=Math.max(0,this.fineCols-2*this.bandCols),o=Math.max(0,this.fineRows-2*this.bandRows),i=n,r=n;this.regions=[{id:0,name:"left",fineOriginRow:0,fineOriginCol:0,fineRows:this.fineRows,fineCols:this.bandCols,cellScale:1,rows:this.fineRows,cols:this.bandCols,offset:0},{id:1,name:"top",fineOriginRow:0,fineOriginCol:this.bandCols,fineRows:this.bandRows,fineCols:i,cellScale:1,rows:this.bandRows,cols:i,offset:0},{id:2,name:"right",fineOriginRow:0,fineOriginCol:this.fineCols-this.bandCols,fineRows:this.fineRows,fineCols:this.bandCols,cellScale:1,rows:this.fineRows,cols:this.bandCols,offset:0},{id:3,name:"bottom",fineOriginRow:this.fineRows-this.bandRows,fineOriginCol:this.bandCols,fineRows:this.bandRows,fineCols:r,cellScale:1,rows:this.bandRows,cols:r,offset:0},{id:4,name:"middle",fineOriginRow:this.bandRows,fineOriginCol:this.bandCols,fineRows:o,fineCols:n,cellScale:this.lowScale,rows:o>0?Math.ceil(o/this.lowScale):0,cols:n>0?Math.ceil(n/this.lowScale):0,offset:0}];let s=0;for(let x=0;x<this.regions.length;x++)this.regions[x].offset=s,s+=this.regions[x].rows*this.regions[x].cols;this.planeSize=s,this.cellCenterX=new Float64Array(this.planeSize),this.cellCenterY=new Float64Array(this.planeSize),this.cellMinX=new Float64Array(this.planeSize),this.cellMinY=new Float64Array(this.planeSize),this.cellMaxX=new Float64Array(this.planeSize),this.cellMaxY=new Float64Array(this.planeSize),this.cellWidth=new Float64Array(this.planeSize),this.cellHeight=new Float64Array(this.planeSize),this.cellRegion=new Uint8Array(this.planeSize),this.cellRow=new Int32Array(this.planeSize),this.cellCol=new Int32Array(this.planeSize),this.viaAllowed=new Uint8Array(this.planeSize);for(let x=0;x<this.regions.length;x++){let C=this.regions[x];for(let I=0;I<C.rows;I++){let b=C.fineOriginRow+I*C.cellScale,P=Math.min(C.fineOriginRow+C.fineRows,b+C.cellScale),E=this.boundsMinY+b*this.highResolutionCellSize,B=Math.min(this.boundsMaxY,this.boundsMinY+P*this.highResolutionCellSize);for(let w=0;w<C.cols;w++){let T=C.fineOriginCol+w*C.cellScale,Q=Math.min(C.fineOriginCol+C.fineCols,T+C.cellScale),N=this.boundsMinX+T*this.highResolutionCellSize,F=Math.min(this.boundsMaxX,this.boundsMinX+Q*this.highResolutionCellSize),H=this.cellIdFor(C.id,I,w);this.cellCenterX[H]=(N+F)/2,this.cellCenterY[H]=(E+B)/2,this.cellMinX[H]=N,this.cellMinY[H]=E,this.cellMaxX[H]=F,this.cellMaxY[H]=B,this.cellWidth[H]=F-N,this.cellHeight[H]=B-E,this.cellRegion[H]=C.id,this.cellRow[H]=I,this.cellCol[H]=w;let z=Math.min(this.cellCenterX[H]-this.boundsMinX,this.boundsMaxX-this.cellCenterX[H],this.cellCenterY[H]-this.boundsMinY,this.boundsMaxY-this.cellCenterY[H]);this.viaAllowed[H]=z>=this.viaMinDistFromBorder?1:0}}}let a=Array.from({length:this.planeSize},()=>[]),c=(x,C)=>{if(x===C||x<0||C<0)return;let I=this.cellCenterX[x]-this.cellCenterX[C],b=this.cellCenterY[x]-this.cellCenterY[C],P=Math.hypot(I,b);gPt(a[x],{cellId:C,cost:P}),gPt(a[C],{cellId:x,cost:P})};for(let x=0;x<this.regions.length;x++){let C=this.regions[x];for(let I=0;I<C.rows;I++)for(let b=0;b<C.cols;b++){let P=this.cellIdFor(C.id,I,b);I+1<C.rows&&c(P,this.cellIdFor(C.id,I+1,b)),b+1<C.cols&&c(P,this.cellIdFor(C.id,I,b+1)),this.enableDiagonalMoves&&I+1<C.rows&&(b+1<C.cols&&c(P,this.cellIdFor(C.id,I+1,b+1)),b>0&&c(P,this.cellIdFor(C.id,I+1,b-1)))}}let l=this.regions[0],d=this.regions[1],u=this.regions[2],h=this.regions[3],A=this.regions[4],m=l.rows>0&&l.cols>0,p=d.rows>0&&d.cols>0,g=u.rows>0&&u.cols>0,_=h.rows>0&&h.cols>0,f=A.rows>0&&A.cols>0;if(m&&p)for(let x=0;x<this.bandRows;x++)c(this.cellIdFor(0,x,l.cols-1),this.cellIdFor(1,x,0));if(p&&g)for(let x=0;x<this.bandRows;x++)c(this.cellIdFor(1,x,d.cols-1),this.cellIdFor(2,x,0));if(m&&_)for(let x=this.fineRows-this.bandRows;x<this.fineRows;x++)c(this.cellIdFor(0,x,l.cols-1),this.cellIdFor(3,x-(this.fineRows-this.bandRows),0));if(_&&g)for(let x=this.fineRows-this.bandRows;x<this.fineRows;x++)c(this.cellIdFor(3,x-(this.fineRows-this.bandRows),h.cols-1),this.cellIdFor(2,x,0));if(m&&f)for(let x=this.bandRows;x<this.fineRows-this.bandRows;x++)c(this.cellIdFor(0,x,l.cols-1),this.cellIdFor(4,Math.floor((x-this.bandRows)/this.lowScale),0));if(g&&f)for(let x=this.bandRows;x<this.fineRows-this.bandRows;x++)c(this.cellIdFor(4,Math.floor((x-this.bandRows)/this.lowScale),A.cols-1),this.cellIdFor(2,x,0));if(p&&f)for(let x=this.bandCols;x<this.fineCols-this.bandCols;x++)c(this.cellIdFor(1,d.rows-1,x-this.bandCols),this.cellIdFor(4,0,Math.floor((x-this.bandCols)/this.lowScale)));if(_&&f)for(let x=this.bandCols;x<this.fineCols-this.bandCols;x++)c(this.cellIdFor(4,A.rows-1,Math.floor((x-this.bandCols)/this.lowScale)),this.cellIdFor(3,0,x-this.bandCols));if(!f&&!p&&!_&&m&&g)for(let x=0;x<Math.min(l.rows,u.rows);x++)c(this.cellIdFor(0,x,l.cols-1),this.cellIdFor(2,x,0));if(!f&&!m&&!g&&p&&_)for(let x=0;x<Math.min(d.cols,h.cols);x++)c(this.cellIdFor(1,d.rows-1,x),this.cellIdFor(3,0,x));let y=this.flattenNeighborLists(a);this.neighborOffset=y.offset,this.neighborIds=y.ids,this.neighborCosts=y.costs}cellIdFor(e,t,n){let o=this.regions[e];return o.offset+t*o.cols+n}stepOnce(){if(!this.activeConnSeg){if(this.unsolvedSegs.length===0)return void(this.solved=!0);let f=this.unsolvedSegs.shift();this.activeConnSeg=f,this.activeConnId=f.connId,this.viaOccupantsByCell.clear(),this.nodePool.clear(),this.ripChain.clear(),this.heap.clear(),this.seqCounter=0,this.searchIterations=0,this.nextStamp();let y=this.computeH(f.startZ,f.startCellId,f.endZ,f.endCellId)*this.hyperParameters.greedyMultiplier,x=this.nodePool.push(f.startZ,f.startCellId,0,-1,-1,0),C=f.startZ*this.planeSize+f.startCellId,I=this.getSearchStateIdx(C,0);return this.bestGStamp[I]=this.stamp,this.bestGValue[I]=0,void this.heap.push(y,this.seqCounter++,x)}this.searchIterations++;let e=this.ripCount[this.activeConnId]??0,t=Math.round(this.baseSearchBudgetIters*(1+0.25*Math.min(e,10)));if(this.searchIterations>t){let f=this.penalty2d;for(let y=0;y<f.length;y++)f[y]=0.9*f[y];return this.unsolvedSegs.push(this.activeConnSeg),this.activeConnSeg=null,this.activeConnId=-1,this.heap.clear(),this.nodePool.clear(),this.consecutiveSkips++,void(this.consecutiveSkips>=Math.max(3,3*this.unsolvedSegs.length)&&(this.error=`Convergence failure: ${this.unsolvedSegs.length} connections stuck`,this.failed=!0))}if(this.heap.size===0)return this.error=`No path found for ${this.connIdToName[this.activeConnId]}`,void(this.failed=!0);let n=this.heap.pop(),o=this.nodePool.z[n],i=this.nodePool.cellId[n],r=this.nodePool.g[n],s=this.nodePool.ripHead[n],a=this.nodePool.ripCount[n],c=o*this.planeSize+i,l=this.getSearchStateIdx(c,a);if(this.visitedStamp[l]===this.stamp)return;this.visitedStamp[l]=this.stamp,this.visitedFlatStamp[c]=this.stamp;let d=this.activeConnSeg;if(o===d.endZ&&i===d.endCellId)return this.finalizeRoute(n),this.activeConnSeg=null,void(this.activeConnId=-1);let u=this.visitedStamp,h=this.stamp,A=this.activeConnId,{endZ:m,endCellId:p}=d,g=this.neighborOffset[i],_=this.neighborOffset[i+1];for(let f=g;f<_;f++){let y=this.neighborIds[f],x=o*this.planeSize+y;if(this.computeMoveCostAndRips(A,o,y,!1,s,a,this.neighborCosts[f]),this._moveCost<0)continue;let C=this.getSearchStateIdx(x,this._moveRipCount);if(u[C]===h)continue;let I=r+this._moveCost;if(this.bestGStamp[C]===h&&I>=this.bestGValue[C])continue;this.bestGStamp[C]=h,this.bestGValue[C]=I;let b=I+this.computeH(o,y,m,p)*this.hyperParameters.greedyMultiplier,P=this.nodePool.push(o,y,I,n,this._moveRippedHead,this._moveRipCount);this.heap.push(b,this.seqCounter++,P)}if(this.viaAllowed[i])for(let f=0;f<this.layers;f++){if(f===o)continue;let y=f*this.planeSize+i;if(this.computeMoveCostAndRips(A,f,i,!0,s,a,0),this._moveCost<0)continue;let x=this.getSearchStateIdx(y,this._moveRipCount);if(u[x]===h)continue;let C=r+this._moveCost;if(this.bestGStamp[x]===h&&C>=this.bestGValue[x])continue;this.bestGStamp[x]=h,this.bestGValue[x]=C;let I=C+this.computeH(f,i,m,p)*this.hyperParameters.greedyMultiplier,b=this.nodePool.push(f,i,C,n,this._moveRippedHead,this._moveRipCount);this.heap.push(I,this.seqCounter++,b)}}computeMoveCostAndRips(e,t,n,o,i,r,s){let a=0,c=i,l=r,d=t*this.planeSize+n;if(o){a+=this.hyperParameters.viaBaseCost,a+=Math.min(this.penalty2d[n],this.penaltyCap);let u=this.portOwnerFlat[d],h=this.allowSharedUse(e,u),A=this.activeConnSeg,m=!!A&&t===A.endZ&&n===A.endCellId;if(u>=0&&u!==e&&!h&&!m)return this._moveCost=-1,void(this._moveRippedHead=c);this.fillViaOccupants(n,e);let p=this._viaOccs;for(let g=0;g<p.length;g++){let _=p[g];this.ripChain.contains(c,_)||(a+=this.hyperParameters.ripCost,c=this.ripChain.append(c,_),l++),a+=this.hyperParameters.ripViaPenalty}}else{a+=s,a+=Math.min(this.penalty2d[n],this.penaltyCap);let u=this.portOwnerFlat[d],h=this.allowSharedUse(e,u),A=this.activeConnSeg,m=!!A&&t===A.endZ&&n===A.endCellId;if(u>=0&&u!==e&&!h&&!m)return this._moveCost=-1,void(this._moveRippedHead=c);this.fillTraceOccupants(d,e,this._cellOccs);for(let p=0;p<this._cellOccs.length;p++){let g=this._cellOccs[p];this.ripChain.contains(c,g)||(a+=this.hyperParameters.ripCost,c=this.ripChain.append(c,g),l++),a+=this.hyperParameters.ripTracePenalty}}this._moveCost=a,this._moveRippedHead=c,this._moveRipCount=l}fillViaOccupants(e,t){let n=this._viaOccs;n.length=0;let o=this.viaOccupantsByCell.get(e);if(o){for(let s of o)n.push(s);return}let i=this.cellCenterX[e],r=this.cellCenterY[e];this.forEachCellNearCircle(i,r,this.viaKeepoutRadius,(s)=>{if(vDe(i,r,this.viaKeepoutRadius,this.cellMinX[s],this.cellMinY[s],this.cellMaxX[s],this.cellMaxY[s]))for(let a=0;a<this.layers;a++)this.pushFlatOccupants(a*this.planeSize+s,t,n)}),this.viaOccupantsByCell.set(e,n.slice())}fillTraceOccupants(e,t,n){n.length=0,this.pushFlatOccupants(e,t,n)}pushFlatOccupants(e,t,n){let o=this.usedCellsFlat[e];o===-1||o===t||this.allowSharedUse(t,o)||$pe(n,o);let i=this.sharedCellsFlat[e];if(i)for(let r=0;r<i.length;r++){let s=i[r];s!==t&&(this.allowSharedUse(t,s)||$pe(n,s))}}addSharedOccupant(e,t){if(this.usedCellsFlat[e]===t)return;let n=this.sharedCellsFlat[e];n||(n=[],this.sharedCellsFlat[e]=n),$pe(n,t)}replaceOccupants(e,t){this.usedCellsFlat[e]=t,this.sharedCellsFlat[e]=void 0}removeOccupant(e,t){let n=this.sharedCellsFlat[e];if(this.usedCellsFlat[e]===t)return void(n&&n.length>0?(this.usedCellsFlat[e]=n.pop(),n.length===0&&(this.sharedCellsFlat[e]=void 0)):this.usedCellsFlat[e]=-1);if(!n)return;let o=n.indexOf(t);o!==-1&&(n.splice(o,1),n.length===0&&(this.sharedCellsFlat[e]=void 0))}allowSharedUse(e,t){if(t<0)return!1;return this.connIdToRootNet[t]===this.connIdToRootNet[e]}shouldSkipFixedPortHalo(e,t){let n=this.portOwnerFlat[e];return n!==t&&(n===-2||!(n<0)&&!this.allowSharedUse(t,n))}nextStamp(){this.stamp=this.stamp+1>>>0,this.stamp===0&&(this.visitedStamp.fill(0),this.bestGStamp.fill(0),this.visitedFlatStamp.fill(0),this.stamp=1)}getSearchStateIdx(e,t){return e}computeH(e,t,n,o){let i=Math.hypot(this.cellCenterX[t]-this.cellCenterX[o],this.cellCenterY[t]-this.cellCenterY[o]);return e===n?i:i+this.hyperParameters.viaBaseCost}internConn(e,t){let n=this.connNameToId.get(e);if(n!==void 0)return n;let o=this.connIdToName.length;var i;return this.connIdToName.push(e),this.connIdToRootNet.push((i=e,t??i.replace(/_mst\d+$/,""))),this.connNameToId.set(e,o),o}buildConnectionSegs(){let e=new Map;for(let o of this.nodeWithPortPoints.portPoints){let i=o.connectionName;e.has(i)||e.set(i,{points:[],rootConnectionName:o.rootConnectionName}),e.get(i).points.push(o)}let t=[],n=new Set;for(let[o,i]of e){let r=i.points,s=o9t(r);if(s.length===0)continue;let a=this.internConn(o,i.rootConnectionName);for(let[c,l]of s){let d=this.pointToCell(c),u=this.pointToCell(l),h=`${d.z}:${d.cellId}`,A=`${u.z}:${u.cellId}`,m=h<A?`${h}|${A}`:`${A}|${h}`,p=i.rootConnectionName??o,g=`${p}|${m}`;n.has(g)?this.overlapFriendlyRootNets.add(p):(n.add(g),t.push({connId:a,startZ:d.z,startCellId:d.cellId,startPoint:c,endZ:u.z,endCellId:u.cellId,endPoint:l}))}}return t}pointToCell(e){let t=AE(Math.floor((e.x-this.boundsMinX)/this.highResolutionCellSize),0,this.fineCols-1),n=AE(Math.floor((e.y-this.boundsMinY)/this.highResolutionCellSize),0,this.fineRows-1),o=4;t<this.bandCols?o=0:t>=this.fineCols-this.bandCols?o=2:n<this.bandRows?o=1:n>=this.fineRows-this.bandRows&&(o=3);let i=this.regions[o],r=n-i.fineOriginRow,s=t-i.fineOriginCol,a=AE(Math.floor(r/i.cellScale),0,Math.max(0,i.rows-1)),c=AE(Math.floor(s/i.cellScale),0,Math.max(0,i.cols-1));return{z:this.zToLayer.get(e.z)??0,cellId:this.cellIdFor(o,a,c)}}shuffleConnections(){let e=this.unsolvedSegs,t=this.hyperParameters.shuffleSeed>>>0,n=()=>(t=Math.imul(t,1664525)+1013904223>>>0,t/4294967295);for(let o=e.length-1;o>0;o--){let i=Math.floor(n()*(o+1)),r=e[o];e[o]=e[i],e[i]=r}}finalizeRoute(e){this.consecutiveSkips=Math.max(0,this.consecutiveSkips-1);let t=[],n=e;for(;n>=0;){let l=this.nodePool.z[n],d=this.nodePool.cellId[n];t.push(l*this.planeSize+d),n=this.nodePool.parent[n]}for(t.reverse();t.length>1&&this.sharedCrossRootPortFlat[t[0]];)t.shift();for(;t.length>1&&this.sharedCrossRootPortFlat[t[t.length-1]];)t.pop();let o=this.extractViaCellIds(t),i=this.activeConnId;this.ripChain.collect(this.nodePool.ripHead[e],this._rippedIds);for(let l=0;l<this._rippedIds.length;l++)if(this.ripTrace(this._rippedIds[l]),this.failed)return;let r=[];for(let l=0;l<t.length;l++){let d=t[l],u=Math.floor(d/this.planeSize),h=d-u*this.planeSize;this.markTraceFootprint(i,u,h,r)}let s=[];for(let l=0;l<o.length;l++)this.markViaFootprint(i,o[l],r,s);for(;this.usedIndicesByConn.length<=i;)this.usedIndicesByConn.push(void 0);let a=this.usedIndicesByConn[i]??[];for(a.push(...r),this.usedIndicesByConn[i]=a;this.solvedRoutes.length<=i;)this.solvedRoutes.push(void 0);let c=this.solvedRoutes[i]??[];c.push({connId:i,states:Int32Array.from(t),viaCellIds:Int32Array.from(o),startPoint:this.activeConnSeg.startPoint,endPoint:this.activeConnSeg.endPoint}),this.solvedRoutes[i]=c;for(let l=0;l<s.length;l++)if(this.ripTrace(s[l]),this.failed)return;if(this._rippedIds.length>0||s.length>0){let l=this.penalty2d,d=this.penaltyCap;if(this.totalRipEvents>50)for(let u=0;u<l.length;u++)l[u]=0.99*l[u];else for(let u=0;u<l.length;u++)l[u]>d&&(l[u]=0.5*l[u])}}extractViaCellIds(e){let t=[];for(let n=1;n<e.length;n++){let o=e[n-1],i=e[n],r=Math.floor(o/this.planeSize),s=Math.floor(i/this.planeSize);r!==s&&t.push(i-s*this.planeSize)}return t}markTraceFootprint(e,t,n,o){let i=this.cellCenterX[n],r=this.cellCenterY[n];this.forEachCellNearCircle(i,r,this.traceKeepoutRadius,(s)=>{if(!vDe(i,r,this.traceKeepoutRadius,this.cellMinX[s],this.cellMinY[s],this.cellMaxX[s],this.cellMaxY[s]))return;let a=t*this.planeSize+s;if(s!==n&&this.shouldSkipFixedPortHalo(a,e))return;let c=this.usedCellsFlat[a],l=this.allowSharedUse(e,c);(c===-1||c===e||l)&&(c!==-1&&c!==e?this.addSharedOccupant(a,e):this.usedCellsFlat[a]=e,o.push(a))})}markViaFootprint(e,t,n,o){let i=this.cellCenterX[t],r=this.cellCenterY[t];this.forEachCellNearCircle(i,r,this.viaKeepoutRadius,(s)=>{if(vDe(i,r,this.viaKeepoutRadius,this.cellMinX[s],this.cellMinY[s],this.cellMaxX[s],this.cellMaxY[s]))for(let a=0;a<this.layers;a++){let c=a*this.planeSize+s;if(s!==t&&this.shouldSkipFixedPortHalo(c,e))continue;if(this.fillTraceOccupants(c,e,this._cellOccs),this._cellOccs.length>0){for(let d=0;d<this._cellOccs.length;d++)$pe(o,this._cellOccs[d]);this.replaceOccupants(c,e),n.push(c);continue}let l=this.usedCellsFlat[c];l!==-1&&l!==e?this.addSharedOccupant(c,e):this.usedCellsFlat[c]=e,n.push(c)}})}forEachCellNearCircle(e,t,n,o){let i=AE(Math.floor((e-n-this.boundsMinX)/this.highResolutionCellSize),0,this.fineCols-1),r=AE(Math.floor((e+n-this.boundsMinX)/this.highResolutionCellSize),0,this.fineCols-1),s=AE(Math.floor((t-n-this.boundsMinY)/this.highResolutionCellSize),0,this.fineRows-1),a=AE(Math.floor((t+n-this.boundsMinY)/this.highResolutionCellSize),0,this.fineRows-1);for(let c=0;c<this.regions.length;c++){let l=this.regions[c];if(l.rows===0||l.cols===0)continue;let d=Math.max(s,l.fineOriginRow),u=Math.min(a,l.fineOriginRow+l.fineRows-1),h=Math.max(i,l.fineOriginCol),A=Math.min(r,l.fineOriginCol+l.fineCols-1);if(d>u)continue;if(h>A)continue;let m=Math.floor((d-l.fineOriginRow)/l.cellScale),p=Math.floor((u-l.fineOriginRow)/l.cellScale),g=Math.floor((h-l.fineOriginCol)/l.cellScale),_=Math.floor((A-l.fineOriginCol)/l.cellScale);for(let f=m;f<=p;f++)for(let y=g;y<=_;y++)o(this.cellIdFor(l.id,f,y))}}ripTrace(e){for(;this.ripCount.length<=e;)this.ripCount.push(0);if(this.ripCount[e]++,this.totalRipEvents++,this.totalRipEvents>=this.MAX_RIPS)return this.error=`Convergence failure: exceeded MAX_RIPS ${this.MAX_RIPS}`,void(this.failed=!0);let t=this.getSolvedRoutesForConn(e);if(t.length>0)for(let o of t){for(let i=0;i<o.states.length;i++){let r=o.states[i]%this.planeSize;this.penalty2d[r]=this.penalty2d[r]+this.hyperParameters.ripTracePenalty}for(let i=0;i<o.viaCellIds.length;i++){let r=o.viaCellIds[i];this.penalty2d[r]=this.penalty2d[r]+this.hyperParameters.ripViaPenalty}}let n=this.usedIndicesByConn[e];if(n){for(let o=0;o<n.length;o++)this.removeOccupant(n[o],e);this.usedIndicesByConn[e]=void 0}if(t.length>0){this.solvedRoutes[e]=void 0;for(let o of t){let i=o.states[0],r=o.states[o.states.length-1],s=Math.floor(i/this.planeSize),a=Math.floor(r/this.planeSize);this.unsolvedSegs.push({connId:e,startZ:s,startCellId:i-s*this.planeSize,startPoint:o.startPoint,endZ:a,endCellId:r-a*this.planeSize,endPoint:o.endPoint})}}}flattenNeighborLists(e){let t=new Int32Array(e.length+1),n=0;for(let s=0;s<e.length;s++)t[s]=n,n+=e[s].length;t[e.length]=n;let o=new Int32Array(n),i=new Float32Array(n),r=0;for(let s=0;s<e.length;s++){let a=e[s];for(let c=0;c<a.length;c++){let l=a[c];o[r]=l.cellId,i[r]=l.cost,r++}}return{offset:t,ids:o,costs:i}}visualize(){let e=["red","blue","orange","green"],t=this.gridToBoundsTransform,n=[],o=[],i=[],r=[];if(r.push({center:{x:this.nodeWithPortPoints.center.x,y:this.nodeWithPortPoints.center.y},width:this.nodeWithPortPoints.width,height:this.nodeWithPortPoints.height,stroke:"gray"}),this.showPenaltyMap&&this.penalty2d){let c=0;for(let l=0;l<this.penalty2d.length;l++)this.penalty2d[l]>c&&(c=this.penalty2d[l]);if(c>0)for(let l=0;l<this.planeSize;l++){let d=this.penalty2d[l];if(d<=0)continue;let u=CE(t,{x:this.cellCenterX[l],y:this.cellCenterY[l]}),h=Math.min(0.6,d/c*0.6);r.push({center:u,width:this.cellWidth[l]*t.a,height:this.cellHeight[l]*t.e,fill:`rgba(255,165,0,${h.toFixed(3)})`})}}if(this.showUsedCellMap&&this.usedCellsFlat)for(let c=0;c<this.layers;c++){let l=c*this.planeSize;for(let d=0;d<this.planeSize;d++){if(this.usedCellsFlat[l+d]===-1)continue;let u=CE(t,{x:this.cellCenterX[d],y:this.cellCenterY[d]});r.push({center:u,width:this.cellWidth[d]*t.a,height:this.cellHeight[d]*t.e,fill:"rgba(0,0,255,0.5)"})}}for(let c of this.nodeWithPortPoints.portPoints)n.push({x:c.x,y:c.y,color:e[c.z]??"gray",label:c.connectionName});let s=["rgba(255,0,0,0.75)","rgba(0,0,255,0.75)","rgba(255,165,0,0.75)","rgba(0,128,0,0.75)"],a=this.getOutput();for(let c of a){if(c.route.length<2)continue;let l=0;for(let d=1;d<c.route.length;d++){let u=c.route[d-1];c.route[d].z!==u.z&&(d-l>=2&&o.push({points:c.route.slice(l,d).map((h)=>({x:h.x,y:h.y})),strokeColor:s[u.z]??"rgba(128,128,128,0.75)",strokeWidth:this.traceThickness}),l=d)}if(c.route.length-l>=2){let d=c.route[l].z;o.push({points:c.route.slice(l).map((u)=>({x:u.x,y:u.y})),strokeColor:s[d]??"rgba(128,128,128,0.75)",strokeWidth:this.traceThickness})}}for(let c of a)for(let l of c.vias)i.push({center:{x:l.x,y:l.y},radius:this.viaDiameter/2,fill:"rgba(0,0,0,0.3)",stroke:"black"});if(this.activeConnSeg&&this.visitedFlatStamp){let c=this.stamp;for(let l=0;l<this.layers;l++){let d=l*this.planeSize;for(let u=0;u<this.planeSize;u++){if(this.visitedFlatStamp[d+u]!==c)continue;let h=CE(t,{x:this.cellCenterX[u],y:this.cellCenterY[u]});n.push({x:h.x,y:h.y,color:"rgba(0,0,255,0.2)"})}}}return{points:n,lines:o,circles:i,rects:r,coordinateSystem:"cartesian",title:`${this.getSolverName()} [${this.getSolvedRouteCount()} solved, ${this.unsolvedSegs?.length??0} remaining]`}}getOutput(){let e=this.gridToBoundsTransform,t=[];for(let n=0;n<this.solvedRoutes.length;n++){let o=this.getSolvedRoutesForConn(n);if(o.length===0)continue;let i=this.connIdToName[n];for(let r of o){let s=Array.from(r.states,(a)=>{let c=Math.floor(a/this.planeSize),l=a-c*this.planeSize,d=CE(e,{x:this.cellCenterX[l],y:this.cellCenterY[l]});return{x:d.x,y:d.y,z:this.layerToZ.get(c)??c}});s.length===1?(s[0]={...r.startPoint},s.push({...r.endPoint})):s.length>1&&(s[0]={...r.startPoint},s[s.length-1]={...r.endPoint}),t.push({connectionName:i,rootConnectionName:this.connIdToRootNet[n],regionId:this.nodeWithPortPoints.capacityMeshNodeId,traceThickness:this.traceThickness,viaDiameter:this.viaDiameter,route:s,vias:Array.from(r.viaCellIds,(a)=>CE(e,{x:this.cellCenterX[a],y:this.cellCenterY[a]}))})}}return t}getSolvedRoutesForConn(e){let t=this.solvedRoutes[e];return t?Array.isArray(t)?t:[t]:[]}getSolvedRouteCount(){let e=0;for(let t=0;t<this.solvedRoutes.length;t++)e+=this.getSolvedRoutesForConn(t).length;return e}computeGridToBoundsTransform(){let e=1/0,t=-1/0,n=1/0,o=-1/0;for(let d=0;d<this.planeSize;d++){let u=this.cellCenterX[d],h=this.cellCenterY[d];u<e&&(e=u),u>t&&(t=u),h<n&&(n=h),h>o&&(o=h)}let i=t-e,r=o-n,s=this.boundsMaxX-this.boundsMinX,a=this.boundsMaxY-this.boundsMinY,c=i>0?s/i:1,l=r>0?a/r:1;return{a:c,b:0,c:i>0?this.boundsMinX-c*e:(this.boundsMinX+this.boundsMaxX)/2-e,d:0,e:l,f:r>0?this.boundsMinY-l*n:(this.boundsMinY+this.boundsMaxY)/2-n}}},jwo=class{begin;run;copyParents;constructor(e,t,n,o,i){let r=e*t,s=r*n,a=new Float64Array(s),c=new Int32Array(s),l=new Uint32Array(s),d=new Int32Array(s),u=new Uint8Array(s),h,A,m,p,g,_,f,y,x=0,C=0,I=0,b=1024,P=new Float64Array(b),E=new Int32Array(b),B=new Uint32Array(b);for(let H=0;H<s;H++){let z=H%r,Y=z%e,U=Math.floor(z/e),X=Math.floor(H/r);d[H]=z,u[H]=Number(Y>0)|Number(Y+1<e)<<1|Number(U>0)<<2|Number(U+1<t)<<3|X%2<<4}function w(H,z){let Y=I++;for(;Y>0;){let U=Y-1>>1;if(P[U]<=z)break;P[Y]=P[U],E[Y]=E[U],B[Y]=B[U],Y=U}P[Y]=z,E[Y]=H,l[H]=l[H]+1>>>0,B[Y]=l[H]}let T=0,Q=0;function N(){T=E[0],Q=B[0];let H=--I;if(!H)return;let z=E[H],Y=B[H],U=P[H],X=0;for(;2*X+1<I;){let V=2*X+1;if(V+1<I&&P[V+1]<P[V]&&V++,U<=P[V])break;P[X]=P[V],E[X]=E[V],B[X]=B[V],X=V}P[X]=U,E[X]=z,B[X]=Y}function F(H,z,Y,U,X,V){let W=V+z;if(W>=a[H])return;if(m[H]&&H!==x)return;if(Y&&p[U])return;let j=Y?A[U]:h[H],q=Y?_[U]:g[H],ne=W+C*j+q;ne>=a[H]||(a[H]=ne,c[H]=X,w(H,ne+f[H]))}this.begin=(H,z,Y,U)=>{({traceCost:h,viaCost:A,fixed:m,fixedVia:p,history:g,viaHistory:_,viaAllowed:y}=H),f=H.heuristicCost,x=Y,C=U,I=0,a.fill(1/0),c.fill(-1),l.fill(0),a[z]=0,w(z,f[z])},this.run=(H,z)=>{let Y=0,U=0;for(;U<H;){if(Y>=z)return{status:3,expansions:Y};if(!I)return{status:2,expansions:Y};if(I+4+n>b){b*=2;let ce=new Float64Array(b),oe=new Int32Array(b),ie=new Uint32Array(b);ce.set(P),oe.set(E),ie.set(B),P=ce,E=oe,B=ie;continue}N(),U++;let X=T;if(Q!==l[X])continue;let V=a[X];if(Y++,X===x)return{status:1,expansions:Y};let W=d[X],j=u[X],q=o*(16&j?1.05:1),ne=i*(16&j?1:1.05);if(1&j&&F(X-1,q,!1,0,X,V),2&j&&F(X+1,q,!1,0,X,V),4&j&&F(X-e,ne,!1,0,X,V),8&j&&F(X+e,ne,!1,0,X,V),y[W])for(let ce=0;ce<n;ce++){let oe=ce*r+W;oe!==X&&F(oe,0.8,!0,W,X,V)}}return{status:0,expansions:Y}},this.copyParents=(H)=>H.set(c)}},qwo=class{exports;offsets=[];states;heapCapacity=1024;constructor(e,t,n,o,i){fPt??=new WebAssembly.Module(Uint8Array.from(atob("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"),(c)=>c.charCodeAt(0))),this.exports=new WebAssembly.Instance(fPt).exports;let r=e*t;this.states=r*n;let s=Number(this.exports.__heap_base.value),a=s;s+=56;for(let c of[2*this.states,2*r,this.states,r,8*this.states,8*r,8*this.states,r,8*this.states,4*this.states,4*this.states,4*this.states,4*this.states,16*this.heapCapacity])s=8*Math.ceil(s/8),this.offsets.push(s),s+=c;this.ensureMemory(s),new Int32Array(this.exports.memory.buffer,a,14).set(this.offsets),this.exports.configure(e,t,n,o,i,a,this.heapCapacity)}ensureMemory(e){let t=this.exports.memory;e>t.buffer.byteLength&&t.grow(Math.ceil((e-t.buffer.byteLength)/65536))}begin(e,t,n,o){let i=new Uint8Array(this.exports.memory.buffer),r=[e.traceCost,e.viaCost,e.fixed,e.fixedVia,e.history,e.viaHistory,e.heuristicCost,e.viaAllowed];for(let s=0;s<r.length;s++){let a=r[s];i.set(new Uint8Array(a.buffer,a.byteOffset,a.byteLength),this.offsets[s])}this.exports.begin_search(t,n,o)}run(e,t){let n=0,o=0,i=Math.ceil(e);for(;i>0;)if(o=this.exports.run(Math.min(i,1e6),Math.min(Math.ceil(t-n),2147483647)),i-=this.exports.get_pops(),n+=this.exports.get_expansions(),o===4)this.heapCapacity*=2,this.ensureMemory(this.offsets[13]+16*this.heapCapacity),this.exports.set_heap_capacity(this.heapCapacity);else if(o!==0)break;return{status:o,expansions:n}}copyParents(e){e.set(new Int32Array(this.exports.memory.buffer,this.offsets[9],this.states))}},TRe=(e,t,n)=>{let[o,i]=e;if(o===i)return;let r=((s,a)=>{let c=s.portPointId??`${s.connectionName}:${s.x}:${s.y}:${s.z}`,l=a.portPointId??`${a.connectionName}:${a.x}:${a.y}:${a.z}`;return c<l?`${c}|${l}`:`${l}|${c}`})(o,i);t.has(r)||(t.add(r),n.push(e))},yPt=(e,t,n)=>{for(let o=0;o<e.length-1;o++)TRe([e[o],e[o+1]],t,n)},Jwo=(e)=>{let t=[],n=new Set,o=((s)=>{let a=new Map;for(let c of s)c.portPointId&&a.set(c.portPointId,c);return a})(e);for(let s of e){if(s.prevPortPointId){let a=o.get(s.prevPortPointId);a&&a.connectionName===s.connectionName&&TRe([a,s],n,t)}if(s.nextPortPointId){let a=o.get(s.nextPortPointId);a&&a.connectionName===s.connectionName&&TRe([s,a],n,t)}}if(t.length===0)return yPt(e,n,t),t;let i=((s)=>{let a=new Set;for(let[c,l]of s)c.portPointId&&a.add(c.portPointId),l.portPointId&&a.add(l.portPointId);return a})(t),r=e.filter((s)=>!s.portPointId||!i.has(s.portPointId));return yPt(r,n,t),t},iee=0.000000001,eAe=0.01,wZ=0.000001;function tAe(e,t,n){return(t.x-e.x)*(n.y-e.y)-(t.y-e.y)*(n.x-e.x)}function r9t(e,t,n,o){let i=tAe(n,o,e),r=tAe(n,o,t),s=tAe(e,t,n),a=tAe(e,t,o);if((i>iee&&r<-0.000000001||i<-0.000000001&&r>iee)&&(s>iee&&a<-0.000000001||s<-0.000000001&&a>iee)){let c=i/(i-r);return{x:e.x+c*(t.x-e.x),y:e.y+c*(t.y-e.y)}}return null}function $wo(e,t){let n=[];for(let o=0;o<e.route.length-1;o++){let i=e.route[o],r=e.route[o+1];i.z===t&&r.z===t&&n.push([{x:i.x,y:i.y},{x:r.x,y:r.y}])}return n}function Zwo(e,t){return e.route.filter((n)=>n.z===t).map((n)=>({x:n.x,y:n.y}))}function DRe(e,t){return Math.hypot(e.x-t.x,e.y-t.y)}function Vke(e,t,n=0.01){return Math.abs(e.x-t.x)<n&&Math.abs(e.y-t.y)<n}function xPt(e,t,n){let o=new Set,i=[e.route[0],e.route[e.route.length-1]];for(let r of i)r&&r.z===t&&r.portPointId&&Vke(r,n)&&o.add(r.portPointId);return o}function NRe(e,t,n,o){let i=xPt(e,n,o);if(i.size===0)return!1;let r=xPt(t,n,o);if(r.size===0)return!1;for(let s of i)if(r.has(s))return!0;return!1}function e7o(e,t,n,o){let i=[t.a,t.b],r=[o.a,o.b];for(let s of i)for(let a of r)if(Vke(s,a)&&NRe(e,n,t.z,s))return!0;return!1}function sV(e,t,n){let o=n.x-t.x,i=n.y-t.y,r=o*o+i*i;if(r<=iee)return DRe(e,t);let s=e.x-t.x,a=e.y-t.y,c=Math.max(0,Math.min(1,(s*o+a*i)/r)),l=t.x+o*c,d=t.y+i*c;return Math.hypot(e.x-l,e.y-d)}function t7o(e,t,n,o){return r9t(e,t,n,o)?0:Math.min(sV(e,n,o),sV(t,n,o),sV(n,e,t),sV(o,e,t))}function CPt(e){return e.rootConnectionName??e.connectionName.replace(/_mst\d+$/,"")}function TZ(e,t){e.push(t)}function n7o(e){let t=function(o){let i=[],r=new Set;for(let s of o)for(let a of s.route)r.add(a.z);for(let s of r){let a=o.map((c)=>({points:Zwo(c,s),segments:$wo(c,s),root:CPt(c)}));for(let c=0;c<o.length;c++){let l=o[c],{points:d,segments:u,root:h}=a[c];for(let A=c+1;A<o.length;A++){let m=o[A],{points:p,segments:g,root:_}=a[A];if(h===_)continue;let f=new Set;for(let y of d)for(let x of p)if(Vke(y,x)){if(NRe(l,m,s,y))continue;let C=`${y.x.toFixed(2)},${y.y.toFixed(2)}`;if(f.has(C))continue;f.add(C),i.push({trace1:l.connectionName,trace2:m.connectionName,z:s,point:y,type:"shared_point"})}for(let[y,x]of u)for(let[C,I]of g){let b=r9t(y,x,C,I);b&&i.push({trace1:l.connectionName,trace2:m.connectionName,z:s,point:b,type:"crossing",seg1:[y,x],seg2:[C,I]})}}}}return i}(e).map((o)=>({trace1:o.trace1,trace2:o.trace2,type:o.type,z:o.z,point:o.point,seg1:o.seg1,seg2:o.seg2,distance:0,requiredDistance:0})),n=e.map((o)=>{let i=function(c){let l=[];for(let d=0;d<c.route.length-1;d++){let u=c.route[d],h=c.route[d+1];u.z===h.z&&l.push({minX:Math.min(u.x,h.x),maxX:Math.max(u.x,h.x),minY:Math.min(u.y,h.y),maxY:Math.max(u.y,h.y),z:u.z,a:{x:u.x,y:u.y},b:{x:h.x,y:h.y}})}return l}(o),r=new Set,s=new Map,a=new Map;for(let c of o.route){r.add(c.z);let l=s.get(c.z)??[];l.push({x:c.x,y:c.y}),s.set(c.z,l)}for(let c of i){let l=a.get(c.z)??[];l.push(c),a.set(c.z,l)}return{route:o,rootNet:CPt(o),pointsByLayer:s,segmentsByLayer:a,segments:i,vias:o.vias.map((c)=>({x:c.x,y:c.y})),traceRadius:o.traceThickness/2,viaRadius:o.viaDiameter/2,zLayers:r}});for(let o=0;o<n.length;o++){let i=n[o];for(let r=o+1;r<n.length;r++){let s=n[r];if(i.rootNet===s.rootNet)continue;let a=new Set([...i.zLayers.values(),...s.zLayers.values()]);for(let l of a){let d=i.segmentsByLayer.get(l)??[],u=s.segmentsByLayer.get(l)??[],h=i.pointsByLayer.get(l)??[],A=s.pointsByLayer.get(l)??[],m=i.traceRadius+s.traceRadius;for(let p of d)for(let g of u){if(p.minX-g.maxX>=m||g.minX-p.maxX>=m||p.minY-g.maxY>=m||g.minY-p.maxY>=m)continue;let _=t7o(p.a,p.b,g.a,g.b);_+wZ>=m||(_<=eAe&&e7o(i.route,p,s.route,g)||TZ(t,{trace1:i.route.connectionName,trace2:s.route.connectionName,type:_<=eAe?"shared_point":"trace_clearance",z:l,distance:_,requiredDistance:m,seg1:[p.a,p.b],seg2:[g.a,g.b]}))}for(let p of h)for(let g of A){if(Math.abs(p.x-g.x)>=m||Math.abs(p.y-g.y)>=m)continue;let _=DRe(p,g);_+wZ>=m||(_<=eAe&&NRe(i.route,s.route,l,p)||TZ(t,{trace1:i.route.connectionName,trace2:s.route.connectionName,type:_<=eAe?"shared_point":"trace_clearance",z:l,distance:_,requiredDistance:m,point:p,point2:g}))}}let c=i.viaRadius+s.viaRadius;for(let l of i.vias)for(let d of s.vias){if(Math.abs(l.x-d.x)>=c||Math.abs(l.y-d.y)>=c)continue;let u=DRe(l,d);u+wZ>=c||TZ(t,{trace1:i.route.connectionName,trace2:s.route.connectionName,type:"via_via_clearance",z:null,distance:u,requiredDistance:c,point:l,point2:d})}for(let l of i.vias){let d=i.viaRadius+s.traceRadius;for(let u of s.segments){if(l.x-u.maxX>=d||u.minX-l.x>=d||l.y-u.maxY>=d||u.minY-l.y>=d)continue;let h=sV(l,u.a,u.b);h+wZ>=d||TZ(t,{trace1:i.route.connectionName,trace2:s.route.connectionName,type:"via_trace_clearance",z:u.z,distance:h,requiredDistance:d,point:l,seg2:[u.a,u.b]})}}for(let l of s.vias){let d=s.viaRadius+i.traceRadius;for(let u of i.segments){if(l.x-u.maxX>=d||u.minX-l.x>=d||l.y-u.maxY>=d||u.minY-l.y>=d)continue;let h=sV(l,u.a,u.b);h+wZ>=d||TZ(t,{trace1:i.route.connectionName,trace2:s.route.connectionName,type:"via_trace_clearance",z:u.z,distance:h,requiredDistance:d,point:l,seg1:[u.a,u.b]})}}}}return t}var mE=class extends Js{nodeWithPortPoints;props;traceThickness;traceMargin;viaDiameter;hyperParameters;phase="routing";round=0;routingIterations=0;routedCount=0;conflictCount=0;rerouteCount=0;bestConflictCount=1/0;broadNegotiations=0;stagnantRounds=0;violations=[];connections=[];activeConnectionIndex=-1;rows=0;cols=0;plane=0;layers=[];pitchX=0;pitchY=0;left=0;bottom=0;routes=new Map;pairCache=new WeakMap;queue=[];traceCost;viaCost;fixed;fixedVia;history;viaHistory;parent;searchKernel;heuristicCost;heuristicCache=new Map;viaAllowed;goal=0;presentCost=0.5;randomState=1;constructor(e){super(),this.props=e,this.nodeWithPortPoints=e.nodeWithPortPoints,this.traceThickness=e.traceThickness??0.1,this.traceMargin=e.traceMargin??0.1,this.viaDiameter=e.viaDiameter??0.3,this.hyperParameters={shuffleSeed:0,greedyMultiplier:1.1,...e.hyperParameters};for(let t of[e.cellSizeMm??0.1,this.traceThickness,this.viaDiameter,e.stepMultiplier??1000,e.maxRounds??200,e.maxSearchIterations??50000000,this.hyperParameters.greedyMultiplier])if(!Number.isFinite(t)||t<=0)throw Error("A13 dimensions and search limits must be positive and finite");if(!Number.isFinite(this.traceMargin)||this.traceMargin<0)throw Error("traceMargin must be nonnegative");this.MAX_ITERATIONS=1e8}getSolverName(){return"HighDensitySolverA13"}getConstructorParams(){return[{...this.props}]}_setup(){let e=this.nodeWithPortPoints;if(e.width<=0||e.height<=0)throw Error("Node dimensions must be positive");this.cols=Math.ceil(e.width/(this.props.cellSizeMm??0.1))+1,this.rows=Math.ceil(e.height/(this.props.cellSizeMm??0.1))+1,this.pitchX=e.width/(this.cols-1),this.pitchY=e.height/(this.rows-1),this.left=e.center.x-e.width/2,this.bottom=e.center.y-e.height/2,this.layers=e.availableZ??[...new Set(e.portPoints.map((r)=>r.z))].sort((r,s)=>r-s),this.plane=this.rows*this.cols;let t=this.plane*this.layers.length;if(t>2000000)throw Error("A13 grid exceeds two million states");this.traceCost=new Uint16Array(t),this.viaCost=new Uint16Array(this.plane),this.fixed=new Uint8Array(t),this.fixedVia=new Uint8Array(this.plane),this.history=new Float64Array(t),this.viaHistory=new Float64Array(this.plane),this.heuristicCost=new Float64Array(t),this.viaAllowed=new Uint8Array(this.plane);let n=Math.max(this.viaDiameter/2,this.props.viaMinDistFromBorder??this.viaDiameter/2);for(let r=0;r<this.plane;r++){let s=this.point(r);s.x-this.left>=n&&this.left+e.width-s.x>=n&&s.y-this.bottom>=n&&this.bottom+e.height-s.y>=n&&(this.viaAllowed[r]=1)}this.parent=new Int32Array(t);let o=this.props.searchBackend==="wasm"?qwo:jwo;this.searchKernel=new o(this.cols,this.rows,this.layers.length,this.pitchX,this.pitchY);let i=new Map;for(let r of e.portPoints){if(!this.layers.includes(r.z))throw Error("Port is on an unavailable layer");let s=i.get(r.connectionName)??[];s.push(r),i.set(r.connectionName,s)}for(let r of i.values())for(let[s,a]of Jwo(r))this.connections.push({start:s,end:a,root:s.rootConnectionName??s.connectionName.replace(/_mst\d+$/,"")});this.randomState=this.hyperParameters.shuffleSeed+1>>>0,this.queue=this.shuffle(this.connections.map((r,s)=>s))}shuffle(e){for(let t=e.length-1;t>0;t--){this.randomState=Math.imul(this.randomState,1664525)+1013904223>>>0;let n=this.randomState%(t+1);[e[t],e[n]]=[e[n],e[t]]}return e}index(e){let t=Math.max(0,Math.min(this.cols-1,Math.round((e.x-this.left)/this.pitchX))),n=Math.max(0,Math.min(this.rows-1,Math.round((e.y-this.bottom)/this.pitchY)));return this.layers.indexOf(e.z)*this.plane+n*this.cols+t}point(e){let t=e%this.plane;return{x:this.left+t%this.cols*this.pitchX,y:this.bottom+Math.floor(t/this.cols)*this.pitchY,z:this.layers[Math.floor(e/this.plane)]}}capsule(e,t,n,o){let i=Math.max(0,Math.floor((Math.min(e.x,t.x)-n-this.left)/this.pitchX)),r=Math.min(this.cols-1,Math.ceil((Math.max(e.x,t.x)+n-this.left)/this.pitchX)),s=Math.max(0,Math.floor((Math.min(e.y,t.y)-n-this.bottom)/this.pitchY)),a=Math.min(this.rows-1,Math.ceil((Math.max(e.y,t.y)+n-this.bottom)/this.pitchY)),c=t.x-e.x,l=t.y-e.y,d=c*c+l*l;for(let u=s;u<=a;u++)for(let h=i;h<=r;h++){let A=this.left+h*this.pitchX,m=this.bottom+u*this.pitchY,p=d?Math.max(0,Math.min(1,((A-e.x)*c+(m-e.y)*l)/d)):0;(A-e.x-p*c)**2+(m-e.y-p*l)**2<n*n-0.000000000001&&o(u*this.cols+h)}}prepareSearch(e){this.activeConnectionIndex=e;let t=this.connections[e];this.traceCost.fill(0),this.viaCost.fill(0),this.fixed.fill(0),this.fixedVia.fill(0);for(let[r,s]of this.routes)if(this.connections[r].root!==t.root){for(let a of s.traceFootprint)this.traceCost[a]++;for(let a of s.viaFootprint)this.viaCost[a]++}for(let r of this.connections)if(r.root!==t.root)for(let s of[r.start,r.end])this.capsule(s,s,this.traceThickness+this.traceMargin,(a)=>{this.fixed[this.layers.indexOf(s.z)*this.plane+a]=1}),this.capsule(s,s,(this.traceThickness+this.viaDiameter)/2+this.traceMargin,(a)=>{this.fixedVia[a]=1});let n=this.index(t.start);this.goal=this.index(t.end);let o=this.point(this.goal),i=this.heuristicCache.get(this.goal);if(i)this.heuristicCost=i;else{this.heuristicCost=new Float64Array(this.parent.length);for(let s=0;s<this.layers.length;s++)for(let a=0;a<this.rows;a++){let c=Math.abs(this.bottom+a*this.pitchY-o.y);for(let l=0;l<this.cols;l++)this.heuristicCost[s*this.plane+a*this.cols+l]=(Math.abs(this.left+l*this.pitchX-o.x)+c+(this.layers[s]===o.z?0:0.8))*this.hyperParameters.greedyMultiplier}let r=Math.floor(8388608/this.heuristicCost.byteLength);r>0&&(this.heuristicCache.size>=r&&this.heuristicCache.delete(this.heuristicCache.keys().next().value),this.heuristicCache.set(this.goal,this.heuristicCost))}this.searchKernel.begin({traceCost:this.traceCost,viaCost:this.viaCost,fixed:this.fixed,fixedVia:this.fixedVia,history:this.history,viaHistory:this.viaHistory,heuristicCost:this.heuristicCost,viaAllowed:this.viaAllowed},n,this.goal,this.presentCost)}_step(){if(this.phase==="negotiating")return void this.negotiate();if(this.activeConnectionIndex<0){let n=this.queue.shift();if(n===void 0)return void(this.phase="negotiating");this.prepareSearch(n)}let{status:e,expansions:t}=this.searchKernel.run(this.props.stepMultiplier??1000,(this.props.maxSearchIterations??50000000)-this.routingIterations);this.routingIterations+=t,e===1?(this.searchKernel.copyParents(this.parent),this.commit(this.goal)):e===2?(this.failed=!0,this.error=`No path between fixed terminals of ${this.connections[this.activeConnectionIndex].start.connectionName}`):e===3&&(this.failed=!0,this.error="A13 exhausted its search budget")}commit(e){let t=this.activeConnectionIndex,n=this.connections[t],o=[];for(let h=e;h!==-1;h=this.parent[h])o.push(h);o.reverse();let i=[{...n.start},...o.map((h)=>this.point(h)),{...n.end}],r=[];for(let h of i){let A=r.at(-1),m=r.at(-2);A&&A.x===h.x&&A.y===h.y&&A.z===h.z||(m&&A&&m.z===h.z&&A.z===h.z&&(A.x-m.x)*(h.y-A.y)===(A.y-m.y)*(h.x-A.x)&&r.pop(),r.push(h))}r[0]={...n.start},r[r.length-1]={...n.end};let s=[],a=[];for(let h=1;h<o.length;h++)if(Math.floor(o[h]/this.plane)!==Math.floor(o[h-1]/this.plane)){let A=this.point(o[h]);s.push({x:A.x,y:A.y}),a.push(o[h]%this.plane)}let c={connectionName:n.start.connectionName,rootConnectionName:n.root,regionId:this.nodeWithPortPoints.capacityMeshNodeId,traceThickness:this.traceThickness,viaDiameter:this.viaDiameter,route:r,vias:s},l=new Set,d=new Set,u=new Set;for(let h=1;h<r.length;h++){let A=r[h-1],m=r[h];A.z===m.z&&(this.capsule(A,m,0.00001,(p)=>u.add(this.layers.indexOf(A.z)*this.plane+p)),this.capsule(A,m,this.traceThickness+this.traceMargin,(p)=>l.add(this.layers.indexOf(A.z)*this.plane+p)),this.capsule(A,m,(this.traceThickness+this.viaDiameter)/2+this.traceMargin,(p)=>d.add(p)))}for(let h of s)this.capsule(h,h,(this.viaDiameter+this.traceThickness)/2+this.traceMargin,(A)=>{for(let m=0;m<this.layers.length;m++)l.add(m*this.plane+A)}),this.capsule(h,h,this.viaDiameter+this.traceMargin,(A)=>d.add(A));this.routes.has(t)&&this.rerouteCount++,this.routes.set(t,{output:c,clearanceOutput:{...c,traceThickness:c.traceThickness+this.traceMargin,viaDiameter:c.viaDiameter+this.traceMargin},traceFootprint:[...l],traceFootprintSet:l,viaFootprint:[...d],viaFootprintSet:d,cells:[...u],viaCells:a}),this.routedCount=this.routes.size,this.activeConnectionIndex=-1}getPair(e,t){let n=this.pairCache.get(e);n||(n=new WeakMap,this.pairCache.set(e,n));let o=n.get(t);return o||(o={cells:[...e.cells.filter((i)=>t.traceFootprintSet.has(i)),...t.cells.filter((i)=>e.traceFootprintSet.has(i))],vias:[...e.viaCells.filter((i)=>t.viaFootprintSet.has(i)),...t.viaCells.filter((i)=>e.viaFootprintSet.has(i))],violations:n7o([e.clearanceOutput,t.clearanceOutput])},n.set(t,o)),o}negotiate(){this.round++;let e=new Set,t=new Set,n=new Set;for(let[s,a]of this.routes)for(let[c,l]of this.routes){if(c<=s||this.connections[s].root===this.connections[c].root)continue;let d=this.getPair(a,l);if(d.cells.length||d.vias.length){e.add(s),e.add(c);for(let u of d.cells)t.add(u);for(let u of d.vias)n.add(u)}}let o=[...this.routes.entries()].sort(([s],[a])=>s-a),i=new Map;for(let[,s]of o)for(let a of s.output.route)i.has(a.z)||i.set(a.z,[]);let r=[];for(let s=0;s<o.length;s++)for(let a=s+1;a<o.length;a++){let[c,l]=o[s],[d,u]=o[a];if(this.connections[c].root!==this.connections[d].root)for(let h of this.getPair(l,u).violations)h.requiredDistance===0?i.get(h.z).push(h):r.push(h)}this.violations=[...i.values()].flat().concat(r);for(let s of this.violations){for(let a=0;a<this.connections.length;a++)[s.trace1,s.trace2].includes(this.connections[a].start.connectionName)&&e.add(a);for(let a of[s.point,s.point2])if(a){let c=this.index({...a,z:this.layers[0]})%this.plane;n.add(c),s.z!==null&&t.add(this.layers.indexOf(s.z)*this.plane+c)}}if(this.conflictCount=e.size,this.stagnantRounds=this.conflictCount<this.bestConflictCount?0:this.stagnantRounds+1,this.bestConflictCount=Math.min(this.bestConflictCount,this.conflictCount),this.stats={round:this.round,conflictedRoutes:this.conflictCount,geometryViolations:this.violations.length,reroutes:this.rerouteCount,searchExpansions:this.routingIterations},!this.violations.length&&this.routes.size===this.connections.length)return this.solved=!0,this.stats.conflictedRoutes=0,this.conflictCount=0,this.bestConflictCount=0,void(this.phase="complete");if(this.round>=(this.props.maxRounds??200))return this.failed=!0,void(this.error=`Negotiation exhausted ${this.round} rounds (${this.conflictCount} conflicted routes)`);for(let s of t)this.history[s]+=0.15;for(let s of n)this.viaHistory[s]+=0.15;this.presentCost=Math.min(20,1.08*this.presentCost),this.stagnantRounds>=8?(this.queue=this.shuffle(this.connections.map((s,a)=>a)),this.presentCost=Math.max(0.5,this.presentCost/2),this.stagnantRounds=0,this.broadNegotiations++):this.queue=this.shuffle([...e]),this.phase="routing"}getOutput(){return[...this.routes.entries()].sort(([e],[t])=>e-t).map(([,e])=>e.output)}visualize(){let e=this.nodeWithPortPoints,t={title:`A13 negotiated congestion · round ${this.round} · ${this.conflictCount} conflicted routes`,rects:[{center:e.center,width:e.width,height:e.height,stroke:"#475569",fill:"transparent"}],points:e.portPoints.map((n)=>({...n,color:n.z===0?"red":"blue",layer:`z${n.z}`,label:n.connectionName})),lines:[],circles:[]};for(let n of this.getOutput()){for(let o=1;o<n.route.length;o++){let i=n.route[o-1],r=n.route[o];i.z===r.z&&t.lines.push({points:[i,r],strokeColor:i.z===0?"#ef4444":"#3b82f6",strokeWidth:this.traceThickness,layer:`z${i.z}`})}for(let o of n.vias)t.circles.push({center:o,radius:this.viaDiameter/2,fill:"#cbd5e1",stroke:"#334155",layer:`z${this.layers.join(",")}`})}for(let n of this.violations.slice(0,50))n.point&&t.circles.push({center:n.point,radius:0.2,stroke:"#f59e0b",fill:"transparent"});return t}},EDe=(e)=>({minX:Math.min(e[0].x,e[1].x),maxX:Math.max(e[0].x,e[1].x),minY:Math.min(e[0].y,e[1].y),maxY:Math.max(e[0].y,e[1].y)});function f_e(e,t){let n=e.x-t.x,o=e.y-t.y;return n*n+o*o}function aV(e,t,n){let o=f_e(t,n);if(o===0)return f_e(e,t);let i=((e.x-t.x)*(n.x-t.x)+(e.y-t.y)*(n.y-t.y))/o;return i=Math.max(0,Math.min(1,i)),f_e(e,{x:t.x+i*(n.x-t.x),y:t.y+i*(n.y-t.y)})}function o7o(e,t,n,o){if(fu(e,t,n,o))return 0;let i={x:e.x,y:e.y},r={x:t.x,y:t.y},s={x:n.x,y:n.y},a={x:o.x,y:o.y};return Math.min(aV(i,s,a),aV(r,s,a),aV(s,i,r),aV(a,i,r))}var k_e=class{segmentBuckets;viaBuckets;CELL_SIZE;maximumCopperRadius=0;constructor(e,t=1){this.segmentBuckets=new Map,this.viaBuckets=new Map,this.CELL_SIZE=t;for(let n of e)if(n&&n.connectionName){if(this.maximumCopperRadius=Math.max(this.maximumCopperRadius,n.traceThickness/2,n.viaDiameter/2),n.route&&n.route.length>=2)for(let o=0;o<n.route.length-1;o++){let i=n.route[o],r=n.route[o+1];if(i.x===r.x&&i.y===r.y)continue;if(i.insideJumperPad&&r.insideJumperPad)continue;let s=[i,r],a=EDe(s),c={segmentId:`${n.connectionName}-seg-${o}`,segment:s,parentRoute:n},l=Math.floor(a.minX/this.CELL_SIZE),d=Math.floor((a.maxX+0.000000001)/this.CELL_SIZE),u=Math.floor(a.minY/this.CELL_SIZE),h=Math.floor((a.maxY+0.000000001)/this.CELL_SIZE);for(let A=l;A<=d;A++)for(let m=u;m<=h;m++){let p=`${A}x${m}`,g=this.segmentBuckets.get(p);g||(g=[],this.segmentBuckets.set(p,g)),g.push(c)}}if(n.vias&&n.vias.length>0)for(let o=0;o<n.vias.length;o++){let i=n.vias[o];if(i==null)continue;let r={viaId:`${n.connectionName}-via-${o}`,x:i.x,y:i.y,parentRoute:n},s=`${Math.floor(i.x/this.CELL_SIZE)}x${Math.floor(i.y/this.CELL_SIZE)}`,a=this.viaBuckets.get(s);a||(a=[],this.viaBuckets.set(s,a)),a.push(r)}}else console.warn("Skipping route with missing data:",n)}getConflictingRoutesForSegment(e,t,n){let o=EDe([e,t]),i=n+this.maximumCopperRadius,r=o.minX-i,s=o.minY-i,a=o.maxX+i,c=o.maxY+i,l=Math.floor(r/this.CELL_SIZE),d=Math.floor((a+0.000000001)/this.CELL_SIZE),u=Math.floor(s/this.CELL_SIZE),h=Math.floor((c+0.000000001)/this.CELL_SIZE),A=new Map,m=new Set,p=new Set,g={x:e.x,y:e.y},_={x:t.x,y:t.y};for(let y=l;y<=d;y++)for(let x=u;x<=h;x++){let C=`${y}x${x}`,I=this.segmentBuckets.get(C);if(I)for(let P of I){if(m.has(P.segmentId))continue;m.add(P.segmentId);let E=P.parentRoute,[B,w]=P.segment;if(e.z!==t.z||B.z!==w.z||B.z!==e.z)continue;let T=n+E.traceThickness/2,Q=T*T,N=o7o(e,t,B,w);if(N<Q){let F=E.connectionName,H=A.get(F);(!H||N<H.minDistSq)&&A.set(F,{route:E,minDistSq:N})}}let b=this.viaBuckets.get(C);if(b)for(let P of b){if(p.has(P.viaId))continue;p.add(P.viaId);let E=P.parentRoute,B={x:P.x,y:P.y},w=n+E.viaDiameter/2,T=w*w,Q=aV(B,g,_);if(Q<T){let N=E.connectionName,F=A.get(N);(!F||Q<F.minDistSq)&&A.set(N,{route:E,minDistSq:Q})}}}let f=[];for(let y of A.values())f.push({conflictingRoute:y.route,distance:Math.sqrt(y.minDistSq)});return f}removeRoute(e){for(let[t,n]of this.segmentBuckets){let o=n.filter((i)=>i.parentRoute.connectionName!==e);o.length===0?this.segmentBuckets.delete(t):o.length!==n.length&&this.segmentBuckets.set(t,o)}for(let[t,n]of this.viaBuckets){let o=n.filter((i)=>i.parentRoute.connectionName!==e);o.length===0?this.viaBuckets.delete(t):o.length!==n.length&&this.viaBuckets.set(t,o)}}addRoute(e){if(!e||!e.connectionName)return void console.warn("Skipping route with missing data:",e);if(this.maximumCopperRadius=Math.max(this.maximumCopperRadius,e.traceThickness/2,e.viaDiameter/2),e.route&&e.route.length>=2)for(let t=0;t<e.route.length-1;t++){let n=e.route[t],o=e.route[t+1];if(n.x===o.x&&n.y===o.y)continue;if(n.insideJumperPad&&o.insideJumperPad)continue;let i=[n,o],r=EDe(i),s={segmentId:`${e.connectionName}-seg-${t}`,segment:i,parentRoute:e},a=Math.floor(r.minX/this.CELL_SIZE),c=Math.floor((r.maxX+0.000000001)/this.CELL_SIZE),l=Math.floor(r.minY/this.CELL_SIZE),d=Math.floor((r.maxY+0.000000001)/this.CELL_SIZE);for(let u=a;u<=c;u++)for(let h=l;h<=d;h++){let A=`${u}x${h}`,m=this.segmentBuckets.get(A);m||(m=[],this.segmentBuckets.set(A,m)),m.push(s)}}if(e.vias&&e.vias.length>0)for(let t=0;t<e.vias.length;t++){let n=e.vias[t];if(n==null)continue;let o={viaId:`${e.connectionName}-via-${t}`,x:n.x,y:n.y,parentRoute:e},i=`${Math.floor(n.x/this.CELL_SIZE)}x${Math.floor(n.y/this.CELL_SIZE)}`,r=this.viaBuckets.get(i);r||(r=[],this.viaBuckets.set(i,r)),r.push(o)}}getConflictingRoutesNearPoint(e,t){let n=t+this.maximumCopperRadius,o=e.x-n,i=e.y-n,r=e.x+n,s=e.y+n,a=Math.floor(o/this.CELL_SIZE),c=Math.floor((r+0.000000001)/this.CELL_SIZE),l=Math.floor(i/this.CELL_SIZE),d=Math.floor((s+0.000000001)/this.CELL_SIZE),u=new Map,h=new Set,A=new Set;for(let p=a;p<=c;p++)for(let g=l;g<=d;g++){let _=`${p}x${g}`,f=this.segmentBuckets.get(_);if(f)for(let x of f){if(h.has(x.segmentId))continue;h.add(x.segmentId);let C=x.segment[0],I=x.segment[1];if(C.z!==I.z||C.z!==e.z)continue;let b=x.parentRoute,P={x:x.segment[0].x,y:x.segment[0].y},E={x:x.segment[1].x,y:x.segment[1].y},B=t+b.traceThickness/2,w=B*B,T=aV(e,P,E);if(T<w){let Q=b.connectionName,N=u.get(Q);(!N||T<N.minDistSq)&&u.set(Q,{route:b,minDistSq:T})}}let y=this.viaBuckets.get(_);if(y)for(let x of y){if(A.has(x.viaId))continue;A.add(x.viaId);let C=x.parentRoute,I={x:x.x,y:x.y},b=t+C.viaDiameter/2,P=b*b,E=f_e(e,I);if(E<P){let B=C.connectionName,w=u.get(B);(!w||E<w.minDistSq)&&u.set(B,{route:C,minDistSq:E})}}}let m=[];for(let p of u.values())m.push({conflictingRoute:p.route,distance:Math.sqrt(p.minDistSq)});return m}};function Uke(e){let t=e;for(let i=0;i<10;i++)t=16807*t%2147483647;let n=t;t=(69069*e+1)%2147483647;for(let i=0;i<10;i++)t=48271*t%2147483647;let o=t;return()=>{let i=n;n=o,i^=i<<23,i^=i>>>17,i^=o,i^=o>>>26,o=i;let r=(n+o)/4294967296;return r-Math.floor(r)}}var i7o={1:[[0]],2:[[0,1],[1,0]],3:[[0,1,2],[2,0,1],[1,0,2],[0,2,1],[1,2,0],[2,1,0]],4:[[0,1,2,3],[2,0,1,3],[1,3,2,0],[3,0,1,2],[0,2,1,3],[2,1,3,0],[3,0,2,1],[1,2,0,3],[3,1,0,2],[0,3,2,1],[2,3,0,1],[2,3,1,0],[1,2,3,0],[3,1,2,0],[0,1,3,2],[0,2,3,1],[0,3,1,2],[1,0,2,3],[1,0,3,2],[1,3,0,2],[2,0,3,1],[2,1,0,3],[3,2,0,1],[3,2,1,0]]};function NI(e,t){if(t===0)return e;if(e.length===0)return e;if(e.length<=4){let i=i7o[e.length];return i[t%i.length].map((r)=>e[r])}let n=Uke(t),o=e.slice();for(let i=0;i<o.length;i++){let r=Math.floor(n()*o.length),s=Math.floor(n()*(i+1));[o[r],o[s]]=[o[s],o[r]]}return o}var r7o=class{heap=[];constructor(e){this.heap=[];for(let t of e)this.enqueue(t)}dequeue(){if(this.heap.length===0)return null;let e=this.heap[0];return this.heap[0]=this.heap[this.heap.length-1],this.heap.pop(),this.heapifyDown(),e}peek(){return this.heap.length===0?null:this.heap[0]}enqueue(e){this.heap.push(e),this.heapifyUp()}heapifyUp(){let e=this.heap.length-1,t=this.heap[e];for(;e>0;){let n=Math.floor((e-1)/2),o=this.heap[n];if(o.f<=t.f)break;this.heap[e]=o,e=n}this.heap[e]=t}heapifyDown(){let e=0,t=this.heap.length,n=this.heap[e];if(n){for(;;){let o=2*e+1;if(o>=t)break;let i=o+1,r=o;if(i<t&&this.heap[i].f<this.heap[o].f&&(r=i),n.f<this.heap[r].f)break;this.heap[e]=this.heap[r],e=r}this.heap[e]=n}}getTopN(e){return[...this.heap].sort((t,n)=>t.f-n.f).slice(0,e)}},DY=(e,t,n=[])=>[e,t?`rootConnectionName: ${t}`:void 0,...n].filter(Boolean).join(`
`),s7o=class extends Oi{getSolverName(){return"SingleHighDensityRouteSolver"}obstacleRoutes;bounds;boundsSize;boundsCenter;A;B;straightLineDistance;viaDiameter;traceThickness;obstacleMargin;layerCount;availableZ;minCellSize=0.05;cellStep=0.05;GREEDY_MULTIPLER=1.1;numRoutes;VIA_PENALTY_FACTOR=0.3;CELL_SIZE_FACTOR;NEARBY_SEGMENT_CLEARANCE;exploredNodes;viasInPathByNode=new WeakMap;gridMinXIndex;gridMinYIndex;gridWidth;gridHeight;candidates;connectionName;rootConnectionName;regionId;solvedPath=null;futureConnections;hyperParameters;connMap;obstacleSegments=[];obstacleSegmentIndex=null;obstacleSegmentsByLayer=new Map;obstacleSegmentIndexByLayer=new Map;obstacleVias=[];obstacleViaIndex=null;freePlanarObstaclePoints=new Map;cachedPlanarTraceProximity;cachedPlanarViaProximity;debug_exploredNodesOrdered;debug_nodesTooCloseToObstacle;debug_nodePathToParentIntersectsObstacle;debugEnabled;initialNodeGridOffset;constructor(e){super(),this.bounds=e.bounds,this.connMap=e.connMap,this.hyperParameters=e.hyperParameters??{},this.CELL_SIZE_FACTOR=this.hyperParameters.CELL_SIZE_FACTOR??1,this.boundsSize={width:this.bounds.maxX-this.bounds.minX,height:this.bounds.maxY-this.bounds.minY},this.boundsCenter={x:(this.bounds.minX+this.bounds.maxX)/2,y:(this.bounds.minY+this.bounds.maxY)/2},this.connectionName=e.connectionName,this.rootConnectionName=e.rootConnectionName,this.regionId=e.regionId,this.obstacleRoutes=e.obstacleRoutes,this.A=e.A,this.B=e.B,this.viaDiameter=e.viaDiameter??0.3,this.traceThickness=e.traceThickness??0.15,this.obstacleMargin=e.obstacleMargin??0.15,this.layerCount=e.layerCount??2,this.availableZ=e.availableZ&&e.availableZ.length>0?[...new Set(e.availableZ)].sort((u,h)=>u-h):Array.from({length:this.layerCount},(u,h)=>h),this.exploredNodes=new Set,this.straightLineDistance=bn(this.A,this.B),this.futureConnections=e.futureConnections??[],this.NEARBY_SEGMENT_CLEARANCE=e.nearbySegmentClearance??0.15,this.debugEnabled=e.captureSearchDebug??!0,this.MAX_ITERATIONS=1e4,this.debug_exploredNodesOrdered=[],this.debug_nodesTooCloseToObstacle=new Set,this.debug_nodePathToParentIntersectsObstacle=new Set,this.numRoutes=this.obstacleRoutes.length+this.futureConnections.length,this.buildObstacleIndexes();let t=Math.ceil(5*(this.numRoutes+1)),n=this.boundsSize.width/this.cellStep,o=this.boundsSize.height/this.cellStep;for(;n*o>t**2&&!(2*this.cellStep>e.minDistBetweenEnteringPoints);)this.cellStep*=2,n=this.boundsSize.width/this.cellStep,o=this.boundsSize.height/this.cellStep;this.cellStep*=this.CELL_SIZE_FACTOR,this.gridMinXIndex=Math.round(this.bounds.minX/this.cellStep)-1,this.gridMinYIndex=Math.round(this.bounds.minY/this.cellStep)-1;let i=Math.round(this.bounds.maxX/this.cellStep)+1,r=Math.round(this.bounds.maxY/this.cellStep)+1;this.gridWidth=i-this.gridMinXIndex+1,this.gridHeight=r-this.gridMinYIndex+1;let s=Math.abs(this.A.x-this.bounds.minX)<0.001&&Math.abs(this.B.x-this.bounds.minX)<0.001||Math.abs(this.A.x-this.bounds.maxX)<0.001&&Math.abs(this.B.x-this.bounds.maxX)<0.001||Math.abs(this.A.y-this.bounds.minY)<0.001&&Math.abs(this.B.y-this.bounds.minY)<0.001||Math.abs(this.A.y-this.bounds.maxY)<0.001&&Math.abs(this.B.y-this.bounds.maxY)<0.001;this.futureConnections&&this.futureConnections.length===0&&this.obstacleRoutes.length===0&&!s&&this.handleSimpleCases();let a={x:Math.round(e.A.x/(this.cellStep/2))*(this.cellStep/2),y:Math.round(e.A.y/(this.cellStep/2))*(this.cellStep/2)};this.initialNodeGridOffset={x:a.x-Math.round(e.A.x/this.cellStep)*this.cellStep,y:a.y-Math.round(e.A.y/this.cellStep)*this.cellStep};let c={...e.A,z:e.A.z??0,g:0,h:0,f:0,parent:null},l={...e.A,...a,z:e.A.z??0,g:0,h:0,f:0,parent:c},d=(Math.abs(l.x-e.A.x)>0.000000001||Math.abs(l.y-e.A.y)>0.000000001)&&(this.isNodeTooCloseToObstacle(l)||this.isNodeTooCloseToEdge(l,!1)||this.doesPathToParentIntersectObstacle(l));this.candidates=new r7o([d?c:l])}handleSimpleCases(){this.solved=!0;let{A:e,B:t}=this,n=e.z===t.z?[e,t]:[e,{...this.boundsCenter,z:this.A.z},{...this.boundsCenter,z:t.z},t];this.solvedPath={connectionName:this.connectionName,rootConnectionName:this.rootConnectionName,regionId:this.regionId,route:n,traceThickness:this.traceThickness,viaDiameter:this.viaDiameter,vias:this.A.z===this.B.z?[]:[this.boundsCenter]}}get viaPenaltyDistance(){return this.cellStep+this.straightLineDistance*this.VIA_PENALTY_FACTOR}isNodeTooCloseToObstacle(e,t,n,o){if(t??=this.obstacleMargin,n&&e.parent){let d=this.getViasInNodePath(e.parent);for(let u of d)if(bn(e,u)<this.viaDiameter/2+t)return!0}let i=this.traceThickness+t,r=this.viaDiameter/2+this.traceThickness/2+t,s=!n&&this.gridWidth!==void 0&&(!o||o.pointQueryProximity===i)&&(this.obstacleViaIndex!==null||this.obstacleSegmentIndexByLayer.has(e.z))?o?.pointKey??this.getNodeKey(e):void 0;if(s!==void 0){this.cachedPlanarTraceProximity===i&&this.cachedPlanarViaProximity===r||(this.freePlanarObstaclePoints.clear(),this.cachedPlanarTraceProximity=i,this.cachedPlanarViaProximity=r);let d=this.freePlanarObstaclePoints.get(s);if(d&&d.x===e.x&&d.y===e.y&&d.z===e.z)return!1}let a=o?.segments??(n?this.obstacleSegments:this.obstacleSegmentsByLayer.get(e.z)),c=o?.segmentIds??(n?this.obstacleSegmentIndex:this.obstacleSegmentIndexByLayer.get(e.z))?.search(e.x-i,e.y-i,e.x+i,e.y+i)??[],l=o?.segmentBounds;if(a)for(let d of c){let u=a[d];if(u&&!u.connectedToCurrentConnection&&((n||u.z===e.z)&&!(l&&(l.maxX<u.minX||l.maxY<u.minY||l.minX>u.maxX||l.minY>u.maxY)||o&&(e.x+i<u.minX||e.y+i<u.minY||e.x-i>u.maxX||e.y-i>u.maxY)||!(Math.sqrt(ree(e,u.A,u.deltaX,u.deltaY,u.lengthSquared))<i))))return!0}if(this.obstacleViaIndex){let d=this.obstacleViaIndex.search(e.x-r,e.y-r,e.x+r,e.y+r);for(let u of d){let h=this.obstacleVias[u];if(h&&bn(e,h)<r)return!0}}return s!==void 0&&this.freePlanarObstaclePoints.set(s,{x:e.x,y:e.y,z:e.z}),!1}isNodeTooCloseToEdge(e,t){let n=t?this.viaDiameter/2+this.obstacleMargin/2:this.obstacleMargin/2,o=e.x<this.bounds.minX+n||e.x>this.bounds.maxX-n||e.y<this.bounds.minY+n||e.y>this.bounds.maxY-n;return!(o&&!t&&(bn(e,this.B)<2*n||bn(e,this.A)<2*n))&&o}doesPathToParentIntersectObstacle(e,t){let n=e.parent;if(!n)return!1;let o=t?.segments??this.obstacleSegmentsByLayer.get(e.z);if(!o)return!1;let i=e.z===n.z&&this.obstacleSegments.length>0?this.NEARBY_SEGMENT_CLEARANCE:0,r=Math.min(e.x,n.x),s=Math.max(e.x,n.x),a=Math.min(e.y,n.y),c=Math.max(e.y,n.y),l=t?.segmentIds??this.obstacleSegmentIndexByLayer.get(e.z)?.search(r-i,a-i,s+i,c+i)??[],d=t?.segmentBounds,u=n.x-e.x,h=n.y-e.y,A=u**2+h**2;for(let m of l){let p=o[m];if(p&&!p.connectedToCurrentConnection&&(p.z===e.z&&!(d&&(d.maxX<p.minX||d.maxY<p.minY||d.minX>p.maxX||d.minY>p.maxY)||t&&(s+i<p.minX||c+i<p.minY||r-i>p.maxX||a-i>p.maxY)))){if(fu(e,n,p.A,p.B))return!0;if(i>0&&c7o(e,n,u,h,A,p)<i)return!0}}return!1}getPlanarObstacleQuery(e,t,n){let o=e.parent;if(!o)return;let i=t?void 0:this.obstacleSegmentIndexByLayer.get(e.z),r=t?.segments??this.obstacleSegmentsByLayer.get(e.z);if(!r||!t&&!i)return;let s=this.traceThickness+this.obstacleMargin,a=e.z===o.z&&this.obstacleSegments.length>0?this.NEARBY_SEGMENT_CLEARANCE:0,c=Math.min(e.x-s,o.x-a),l=Math.min(e.y-s,o.y-a),d=Math.max(e.x+s,o.x+a),u=Math.max(e.y+s,o.y+a);if(t){let h=t.segmentBounds??={minX:c,minY:l,maxX:d,maxY:u};return h.minX=c,h.minY=l,h.maxX=d,h.maxY=u,t.pointQueryProximity=s,t.pointKey=n,t}return{segments:r,segmentIds:i.search(c,l,d,u),pointQueryProximity:s,pointKey:n}}getPlanarNeighborObstacleQuery(e){let t=this.obstacleSegmentIndexByLayer.get(e.z),n=this.obstacleSegmentsByLayer.get(e.z);if(!t||!n)return;let o=this.traceThickness+this.obstacleMargin,i=this.obstacleSegments.length>0?this.NEARBY_SEGMENT_CLEARANCE:0,{minX:r,minY:s,maxX:a,maxY:c}=this.bounds,l=NY(e.x-this.cellStep,r,a),d=NY(e.y-this.cellStep,s,c),u=NY(e.x+this.cellStep,r,a),h=NY(e.y+this.cellStep,s,c);return{segments:n,segmentIds:t.search(Math.min(l-o,e.x-i),Math.min(d-o,e.y-i),Math.max(u+o,e.x+i),Math.max(h+o,e.y+i))}}buildObstacleIndexes(){if(this.freePlanarObstaclePoints.clear(),this.obstacleRoutes.length===0)return this.obstacleSegmentIndex=null,this.obstacleSegmentsByLayer.clear(),this.obstacleSegmentIndexByLayer.clear(),void(this.obstacleViaIndex=null);let e=[],t=[];for(let n of this.obstacleRoutes){let o=this.connMap?.areIdsConnected?.(this.connectionName,n.connectionName)??!1;for(let i of a7o(n)){let r=i.B.x-i.A.x,s=i.B.y-i.A.y;e.push({...i,deltaX:r,deltaY:s,lengthSquared:r**2+s**2,minX:Math.min(i.A.x,i.B.x),minY:Math.min(i.A.y,i.B.y),maxX:Math.max(i.A.x,i.B.x),maxY:Math.max(i.A.y,i.B.y),connectedToCurrentConnection:o})}for(let i of n.vias)t.push(i)}if(this.obstacleSegments=e,this.obstacleVias=t,this.obstacleSegmentsByLayer.clear(),this.obstacleSegmentIndexByLayer.clear(),e.length>0){let n=new Vm(e.length);for(let o of e)n.add(o.minX,o.minY,o.maxX,o.maxY);n.finish(),this.obstacleSegmentIndex=n;for(let o of e){if(o.connectedToCurrentConnection)continue;let i=this.obstacleSegmentsByLayer.get(o.z);i?i.push(o):this.obstacleSegmentsByLayer.set(o.z,[o])}for(let[o,i]of this.obstacleSegmentsByLayer){let r=new Vm(i.length);for(let s of i)r.add(s.minX,s.minY,s.maxX,s.maxY);r.finish(),this.obstacleSegmentIndexByLayer.set(o,r)}}else this.obstacleSegmentIndex=null;if(t.length>0){let n=new Vm(t.length);for(let o of t)n.add(o.x,o.y,o.x,o.y);n.finish(),this.obstacleViaIndex=n}else this.obstacleViaIndex=null}computeH(e){return bn(e,this.B)+(e.z!==this.B.z?this.viaPenaltyDistance:0)}computeG(e){return(e.parent?.g??0)+(e.z===e.parent?.z?0:this.viaPenaltyDistance)+bn(e,e.parent)}computeF(e,t){return e+t*this.GREEDY_MULTIPLER}setNodeCosts(e){e.g=this.computeG(e),e.h=this.computeH(e),e.f=this.computeF(e.g,e.h)}getNodeKey(e){let t=Math.round(e.x/this.cellStep)-this.gridMinXIndex,n=Math.round(e.y/this.cellStep)-this.gridMinYIndex;return(e.z*this.gridHeight+n)*this.gridWidth+t}getNeighbors(e){let t=[],n,o=!1,{maxX:i,minX:r,maxY:s,minY:a}=this.bounds;for(let c=-1;c<=1;c++)for(let l=-1;l<=1;l++){if(c===0&&l===0)continue;let d={x:NY(e.x+c*this.cellStep,r,i),y:NY(e.y+l*this.cellStep,a,s),z:e.z,g:e.g,h:e.h,f:e.f,parent:e},u=this.getNodeKey(d);if(this.exploredNodes.has(u))continue;o||(n=this.getPlanarNeighborObstacleQuery(e),o=!0);let h=this.getPlanarObstacleQuery(d,n,u);this.isNodeTooCloseToObstacle(d,void 0,!1,h)?(this.debugEnabled&&this.debug_nodesTooCloseToObstacle.add(u),this.exploredNodes.add(u)):this.isNodeTooCloseToEdge(d,!1)?this.exploredNodes.add(u):this.doesPathToParentIntersectObstacle(d,h)?(this.debugEnabled&&this.debug_nodePathToParentIntersectsObstacle.add(u),this.exploredNodes.add(u)):(this.setNodeCosts(d),t.push(d))}for(let c of this.availableZ){if(c===e.z)continue;let l={x:e.x,y:e.y,z:c,g:e.g,h:e.h,f:e.f,parent:e};this.exploredNodes.has(this.getNodeKey(l))||this.isNodeTooCloseToObstacle(l,this.viaDiameter/2+this.obstacleMargin/2,!0)||this.isNodeTooCloseToEdge(l,!0)||(this.setNodeCosts(l),t.push(l))}return t}getNodePath(e){let t=[];for(;e;)t.push(e),e=e.parent;return t}getViasInNodePath(e){let t=this.viasInPathByNode.get(e);if(t)return t;let n=e.parent,o=n?this.getViasInNodePath(n):[],i=n&&e.z!==n.z?[{x:e.x,y:e.y},...o]:o;return this.viasInPathByNode.set(e,i),i}setSolvedPath(e){let t=this.getNodePath(e);t.reverse();let n=[];for(let o=0;o<t.length-1;o++)t[o].z!==t[o+1].z&&n.push({x:t[o].x,y:t[o].y});this.solvedPath={connectionName:this.connectionName,rootConnectionName:this.rootConnectionName,regionId:this.regionId,traceThickness:this.traceThickness,viaDiameter:this.viaDiameter,route:t.map((o)=>({x:o.x,y:o.y,z:o.z})).concat([this.B]),vias:n}}computeProgress(e,t,n){if(t===void 0||n===void 0)return Number.NaN;n||(t+=this.viaPenaltyDistance);let o=1-t/this.straightLineDistance;return Math.max(this.progress||0,2/Math.PI*Math.atan(0.112*o/(1-o)))}_step(){let e=this.candidates.dequeue(),t=e?this.getNodeKey(e):void 0;for(;e&&t&&this.exploredNodes.has(t);)e=this.candidates.dequeue(),t=e?this.getNodeKey(e):void 0;if(!e||!t)return this.failed=!0,void(this.error="Ran out of candidate nodes to explore");this.exploredNodes.add(t),this.debugEnabled&&this.debug_exploredNodesOrdered.push({key:t,x:Math.round(e.x/this.cellStep)*this.cellStep+this.initialNodeGridOffset.x,y:Math.round(e.y/this.cellStep)*this.cellStep+this.initialNodeGridOffset.y,z:e.z});let n=bn(e,this.B);this.progress=this.computeProgress(e,n,e.z===this.B.z),n<=this.cellStep*Math.SQRT2&&e.z===this.B.z&&!this.doesPathToParentIntersectObstacle({...e,parent:e,x:this.B.x,y:this.B.y})&&(this.solved=!0,this.setSolvedPath(e));let o=this.getNeighbors(e);for(let i of o)this.candidates.enqueue(i)}visualize(){let e={lines:[],points:[],rects:[],circles:[]};e.points.push({x:this.A.x,y:this.A.y,label:DY(this.connectionName,this.rootConnectionName,["Input A",`z: ${this.A.z}`]),color:"orange"}),e.points.push({x:this.B.x,y:this.B.y,label:DY(this.connectionName,this.rootConnectionName,["Input B",`z: ${this.B.z}`]),color:"orange"}),e.lines.push({points:[this.A,this.B],strokeColor:"rgba(255, 0, 0, 0.5)",label:DY(this.connectionName,this.rootConnectionName,["Direct Input Connection"])});for(let t=0;t<this.obstacleRoutes.length;t++){let n=this.obstacleRoutes[t];for(let o=0;o<n.route.length-1;o++){let i=n.route[o].z;e.lines.push({points:[n.route[o],n.route[o+1]],strokeColor:i===0?"rgba(255, 0, 0, 0.75)":"rgba(255, 128, 0, 0.25)",strokeWidth:n.traceThickness,label:DY(n.connectionName,n.rootConnectionName,["Obstacle Route"]),layer:`obstacle${t.toString()}`})}}for(let t=0;t<this.debug_exploredNodesOrdered.length;t++){let{key:n,x:o,y:i,z:r}=this.debug_exploredNodesOrdered[t];this.debug_nodesTooCloseToObstacle.has(n)||(this.debug_nodePathToParentIntersectsObstacle.has(n)||e.rects.push({center:{x:o+r*this.cellStep/20,y:i+r*this.cellStep/20},fill:r===0?`rgba(255,0,255,${0.3-t/this.debug_exploredNodesOrdered.length*0.2})`:`rgba(0,0,255,${0.3-t/this.debug_exploredNodesOrdered.length*0.2})`,width:0.9*this.cellStep,height:0.9*this.cellStep,label:`Explored (z=${r})`}))}if(this.candidates.peek()){let t=this.candidates.peek();e.rects.push({center:{x:t.x+t.z*this.cellStep/20,y:t.y+t.z*this.cellStep/20},fill:"rgba(0, 255, 0, 0.8)",width:0.9*this.cellStep,height:0.9*this.cellStep,label:`Next (z=${t.z})`})}for(let t of this.obstacleRoutes)for(let n of t.vias)e.circles.push({center:{x:n.x,y:n.y},radius:this.viaDiameter/2,fill:"rgba(255, 0, 0, 0.5)",label:"Via"});if(this.solvedPath){e.lines.push({points:this.solvedPath.route,strokeColor:"green",label:DY(this.solvedPath.connectionName,this.solvedPath.rootConnectionName,["Solved Route"])});for(let t of this.solvedPath.vias)e.circles.push({center:t,radius:this.viaDiameter/2,fill:"green",label:DY(this.solvedPath.connectionName,this.solvedPath.rootConnectionName,["Via"])})}return e}};function a7o(e){let t=[];for(let n=0;n<e.route.length-1;n++)e.route[n].z===e.route[n+1].z&&t.push({z:e.route[n].z,A:e.route[n],B:e.route[n+1]});return t}function NY(e,t,n){return Math.max(t,Math.min(e,n))}function c7o(e,t,n,o,i,r){return Math.sqrt(Math.min(ree(e,r.A,r.deltaX,r.deltaY,r.lengthSquared),ree(t,r.A,r.deltaX,r.deltaY,r.lengthSquared),ree(r.A,e,n,o,i),ree(r.B,e,n,o,i)))}function ree(e,t,n,o,i){if(i===0){let d=e.x-t.x,u=e.y-t.y;return d*d+u*u}let r=Math.max(0,Math.min(1,((e.x-t.x)*n+(e.y-t.y)*o)/i)),s=t.x+r*n,a=t.y+r*o,c=e.x-s,l=e.y-a;return c*c+l*l}var IPt=class extends s7o{FUTURE_CONNECTION_PROX_TRACE_PENALTY_FACTOR=2;FUTURE_CONNECTION_PROX_VIA_PENALTY_FACTOR=1;FUTURE_CONNECTION_PROXIMITY_VD=10;MISALIGNED_DIST_PENALTY_FACTOR=5;VIA_PENALTY_FACTOR_2=1;FLIP_TRACE_ALIGNMENT_DIRECTION=!1;FUTURE_CONNECTION_VIA_TRACE_CLEARANCE=0.1;futureConnectionPoints;futureConnectionSegmentsCache=null;closestFuturePointCacheCoordinates=new Float64Array(1024);closestFuturePointCacheIndices=new Int32Array(256).fill(-2);cachedFutureConnectionPoints;cachedFutureConnectionPointCount=0;constructor(e){super({...e,nearbySegmentClearance:e.nearbySegmentClearance??(e.traceThickness??0.15)/2+(e.obstacleMargin??0.15)});for(let o in e.hyperParameters)this[o]=e.hyperParameters[o];let t=this.boundsSize.width/this.viaDiameter,n=Math.max(1,this.numRoutes);this.VIA_PENALTY_FACTOR=t/n*0.3*this.VIA_PENALTY_FACTOR_2,this.futureConnectionPoints=this.futureConnections.flatMap((o)=>o.points)}getClosestFutureConnectionPoint(e){this.cachedFutureConnectionPoints===this.futureConnectionPoints&&this.cachedFutureConnectionPointCount===this.futureConnectionPoints.length||(this.closestFuturePointCacheIndices.fill(-2),this.cachedFutureConnectionPoints=this.futureConnectionPoints,this.cachedFutureConnectionPointCount=this.futureConnectionPoints.length);let t=this.getNodeKey(e),n=Number.isSafeInteger(t)?Math.abs(t%256):-1,o=4*n,i=this.viaPenaltyDistance,r=this.closestFuturePointCacheIndices[n];if(n>=0&&r>=-1&&this.closestFuturePointCacheCoordinates[o]===e.x&&this.closestFuturePointCacheCoordinates[o+1]===e.y&&this.closestFuturePointCacheCoordinates[o+2]===e.z&&this.closestFuturePointCacheCoordinates[o+3]===i)return r===-1?null:this.futureConnectionPoints[r];let s=1/0,a=null,c=-1,l=0;for(let d of this.futureConnectionPoints){let u=bn(e,d)+(e.z!==d.z?this.viaPenaltyDistance:0);u<s&&(s=u,a=d,c=l),l++}return n>=0&&(this.closestFuturePointCacheCoordinates[o]=e.x,this.closestFuturePointCacheCoordinates[o+1]=e.y,this.closestFuturePointCacheCoordinates[o+2]=e.z,this.closestFuturePointCacheCoordinates[o+3]=i,this.closestFuturePointCacheIndices[n]=c),a}getFutureConnectionSegments(){if(this.futureConnectionSegmentsCache)return this.futureConnectionSegmentsCache;let e=[];for(let t of this.futureConnections){if(t.connectionName===this.connectionName||(this.connMap?.areIdsConnected?.(this.connectionName,t.connectionName)??!1))continue;let[n,...o]=t.points;if(n)for(let i of o)Math.abs(n.x-i.x)<0.000000001&&Math.abs(n.y-i.y)<0.000000001||e.push({connectionName:t.connectionName,start:n,end:i})}return this.futureConnectionSegmentsCache=e,e}isViaTooCloseToFutureConnectionTrace(e){let t=this.viaDiameter/2+this.traceThickness/2+this.FUTURE_CONNECTION_VIA_TRACE_CLEARANCE;for(let n of this.getFutureConnectionSegments())if(Da(e,n.start,n.end)<t)return!0;return!1}isNodeTooCloseToObstacle(e,t,n,o){return!!super.isNodeTooCloseToObstacle(e,t,n,o)||!(!n||!this.isViaTooCloseToFutureConnectionTrace(e))}diminishCloseToGoal(e){let t=bn(e,this.B);return 1-Math.exp(-t/this.straightLineDistance*5)}getFutureConnectionPenalty(e,t){let n=0,o=this.getClosestFutureConnectionPoint(e),i=bn(e,this.B);if(o){let r=bn(e,o);if(i<=r)return 0;let s=r/(this.viaDiameter*this.FUTURE_CONNECTION_PROXIMITY_VD);n=(t?this.straightLineDistance*this.FUTURE_CONNECTION_PROX_VIA_PENALTY_FACTOR:this.straightLineDistance*this.FUTURE_CONNECTION_PROX_TRACE_PENALTY_FACTOR)*Math.exp(5*-s)}return n}computeH(e){let t=bn(e,this.B)**1.6;return this.straightLineDistance,t+(e.z!==this.B.z?this.viaPenaltyDistance:0)+this.getFutureConnectionPenalty(e,e.z!==e.parent?.z)}computeG(e){let t=Math.abs(e.x-e.parent.x),n=Math.abs(e.y-e.parent.y),o=Math.sqrt(t**2+n**2),i=e.z%2==0,r=this.FLIP_TRACE_ALIGNMENT_DIRECTION?i?t:n:i?n:t;return(e.parent?.g??0)+(e.z===e.parent?.z?0:this.viaPenaltyDistance)+o+r*this.MISALIGNED_DIST_PENALTY_FACTOR+this.getFutureConnectionPenalty(e,e.z!==e.parent?.z)}setNodeCosts(e){let t=Math.abs(e.x-e.parent.x),n=Math.abs(e.y-e.parent.y),o=Math.sqrt(t**2+n**2),i=e.z%2==0,r=this.FLIP_TRACE_ALIGNMENT_DIRECTION?i?t:n:i?n:t,s=(e.parent?.g??0)+(e.z===e.parent?.z?0:this.viaPenaltyDistance)+o+r*this.MISALIGNED_DIST_PENALTY_FACTOR,a=bn(e,this.B)**1.6+(e.z!==this.B.z?this.viaPenaltyDistance:0),c=this.getFutureConnectionPenalty(e,e.z!==e.parent?.z);e.g=s+c,e.h=a+c,e.f=this.computeF(e.g,e.h)}},l7o=(e)=>{let t=1/0,n=e.portPoints;for(let o=0;o<n.length;o++)for(let i=o+1;i<n.length;i++){let r=n[o],s=n[i];if(r.z!==s.z)continue;if(r.rootConnectionName&&r.rootConnectionName===s.rootConnectionName)continue;let a=Math.sqrt((r.x-s.x)**2+(r.y-s.y)**2);t=Math.min(t,a)}return t===1/0?0:t},a9t=(e)=>{let t=new Map,n=new Map,o=new Map;for(let{connectionName:i,rootConnectionName:r,x:s,y:a,z:c}of e.portPoints){r&&n.set(i,r);let l=t.get(i),d=o.get(i);l&&d||(l=[],d=new Set,t.set(i,l),o.set(i,d));let u=c??0,h=`${s.toFixed(6)},${a.toFixed(6)},${u}`;d.has(h)||(d.add(h),l.push({x:s,y:a,z:u}))}return{connectionPointsByName:t,rootConnectionNameByConnectionName:n,minDistBetweenEnteringPoints:l7o(e)}},MDe=(e,t,n=[])=>[e,t?`rootConnectionName: ${t}`:void 0,...n].filter(Boolean).join(`
`),d7o=(e)=>`${e.x.toFixed(6)},${e.y.toFixed(6)},${e.z}`,qge=class extends Oi{getSolverName(){return"IntraNodeRouteSolver"}nodeWithPortPoints;colorMap;unsolvedConnections;originalConnectionPointsByName;rootConnectionNameByConnectionName;totalConnections;solvedRoutes;failedSubSolvers;hyperParameters;minDistBetweenEnteringPoints;viaDiameter;traceWidth;obstacleMargin;captureSearchDebug;rerouteAttemptsByConnection;POSTROUTE_VIA_TRACE_CLEARANCE=0.1;MAX_POSTROUTE_REPAIR_ATTEMPTS=2;activeSubSolver=null;connMap;get failedSolvers(){return this.failedSubSolvers}get activeSolver(){return this.activeSubSolver}constructor(e){let{nodeWithPortPoints:t,colorMap:n}=e;super(),this.nodeWithPortPoints=t,this.colorMap=n??{},this.solvedRoutes=[],this.hyperParameters=e.hyperParameters??{},this.failedSubSolvers=[],this.connMap=e.connMap,this.viaDiameter=e.viaDiameter??0.3,this.traceWidth=e.traceWidth??0.15,this.obstacleMargin=e.obstacleMargin??0.15,this.captureSearchDebug=e.captureSearchDebug??!0;let o=e.precomputedIntraNodeRouteParams??a9t(t);this.rootConnectionNameByConnectionName=new Map(o.rootConnectionNameByConnectionName),this.originalConnectionPointsByName=new Map(Array.from(o.connectionPointsByName.entries()).map(([i,r])=>[i,r.map((s)=>({...s}))])),this.unsolvedConnections=Array.from(this.originalConnectionPointsByName.entries().map(([i,r])=>({connectionName:i,rootConnectionName:this.rootConnectionNameByConnectionName.get(i),points:[...r]}))),this.rerouteAttemptsByConnection=new Map,this.hyperParameters.SHUFFLE_SEED&&(this.unsolvedConnections=NI(this.unsolvedConnections,this.hyperParameters.SHUFFLE_SEED??0),this.unsolvedConnections=this.unsolvedConnections.map(({points:i,...r},s)=>({...r,points:NI(i,7117*s+(this.hyperParameters.SHUFFLE_SEED??0))}))),this.totalConnections=this.unsolvedConnections.length,this.MAX_ITERATIONS=1000*this.totalConnections**1.5,this.minDistBetweenEnteringPoints=o.minDistBetweenEnteringPoints}computeProgress(){return(this.solvedRoutes.length+(this.activeSubSolver?.progress||0))/this.totalConnections}getSingleRouteSolverOpts(e){let{connectionName:t,rootConnectionName:n,points:o}=e;return{connectionName:t,rootConnectionName:n,regionId:this.nodeWithPortPoints.capacityMeshNodeId,minDistBetweenEnteringPoints:this.minDistBetweenEnteringPoints,bounds:Kee(this.nodeWithPortPoints),A:{x:o[0].x,y:o[0].y,z:o[0].z},B:{x:o[o.length-1].x,y:o[o.length-1].y,z:o[o.length-1].z},obstacleRoutes:this.connMap?this.solvedRoutes.filter((i)=>!this.connMap.areIdsConnected(i.connectionName,t)):this.solvedRoutes,futureConnections:this.unsolvedConnections,layerCount:this.nodeWithPortPoints.portPoints.reduce((i,r)=>Math.max(i,(r.z??0)+1),2),availableZ:this.nodeWithPortPoints.availableZ&&this.nodeWithPortPoints.availableZ.length>0?this.nodeWithPortPoints.availableZ:[...new Set(this.nodeWithPortPoints.portPoints.map((i)=>i.z??0))].sort((i,r)=>i-r),hyperParameters:this.hyperParameters,connMap:this.connMap,viaDiameter:this.viaDiameter,traceThickness:this.traceWidth,obstacleMargin:this.obstacleMargin,captureSearchDebug:this.captureSearchDebug}}trySolveSamePointLayerChange(e){let t=this.getSingleRouteSolverOpts(e),n=new IPt(t),{A:o,B:i}=t,r={x:o.x,y:o.y};if(!u7o(n,r,o,i))return!1;let s=[{x:o.x,y:o.y,z:o.z},{...r,z:o.z},{...r,z:i.z},{x:i.x,y:i.y,z:i.z}].filter((a,c,l)=>c===0||Math.abs(a.x-l[c-1].x)>0.000001||Math.abs(a.y-l[c-1].y)>0.000001||a.z!==l[c-1].z);return this.solvedRoutes.push({connectionName:e.connectionName,rootConnectionName:e.rootConnectionName,regionId:this.nodeWithPortPoints.capacityMeshNodeId,traceThickness:this.traceWidth,viaDiameter:this.viaDiameter,route:s,vias:[{x:r.x,y:r.y}]}),!0}queueExtraBranchesForMultiPointConnection(e){let[t,...n]=((o)=>{let i=new Set,r=[];for(let s of o){let a=d7o(s);i.has(a)||(i.add(a),r.push(s))}return r})(e.points);if(!t||n.length<=1)return!1;for(let o of n)this.unsolvedConnections.push({connectionName:e.connectionName,rootConnectionName:e.rootConnectionName,points:[t,o]});return!0}getAvailableZLayers(){return this.nodeWithPortPoints.availableZ&&this.nodeWithPortPoints.availableZ.length>0?[...new Set(this.nodeWithPortPoints.availableZ)].sort((e,t)=>e-t):[...new Set(this.nodeWithPortPoints.portPoints.map((e)=>e.z??0))].sort((e,t)=>e-t)}getFirstSolvedViaTraceConflict(){if(this.solvedRoutes.length<2)return null;let e=new k_e(this.solvedRoutes),t=this.getAvailableZLayers();for(let n of this.solvedRoutes){let o=n.viaDiameter/2+this.POSTROUTE_VIA_TRACE_CLEARANCE;for(let i of n.vias)for(let r of t){let s=e.getConflictingRoutesNearPoint({x:i.x,y:i.y,z:r},o).filter(({conflictingRoute:a})=>a.connectionName!==n.connectionName&&!this.connMap?.areIdsConnected(n.connectionName,a.connectionName));if(s.length>0)return{route:n,via:i,conflictingRoute:s[0].conflictingRoute}}}return null}queueConnectionForPostrouteRepair(e){let t=this.originalConnectionPointsByName.get(e);return!(!t||t.length<2)&&(this.solvedRoutes=this.solvedRoutes.filter((n)=>n.connectionName!==e),this.unsolvedConnections.push({connectionName:e,rootConnectionName:this.rootConnectionNameByConnectionName.get(e),points:t.map((n)=>({...n}))}),this.rerouteAttemptsByConnection.set(e,(this.rerouteAttemptsByConnection.get(e)??0)+1),!0)}_step(){if(this.activeSubSolver){if(this.activeSubSolver.step(),this.progress=this.computeProgress(),this.activeSubSolver.solved)this.solvedRoutes.push(this.activeSubSolver.solvedPath),this.activeSubSolver=null;else if(this.activeSubSolver.failed){let t=this.activeSubSolver;this.activeSubSolver=null,this.error=t.error,this.captureSearchDebug&&this.failedSubSolvers.push(t),this.failed=!0}return}let e=this.unsolvedConnections.pop();if(this.progress=this.computeProgress(),!e){let t=this.getFirstSolvedViaTraceConflict();if(t){if((this.rerouteAttemptsByConnection.get(t.route.connectionName)??0)>=this.MAX_POSTROUTE_REPAIR_ATTEMPTS)return this.error=["Post-route via/trace clearance repair exceeded retry budget",`route: ${t.route.connectionName}`,`conflicts with: ${t.conflictingRoute.connectionName}`,`via: (${t.via.x.toFixed(3)}, ${t.via.y.toFixed(3)})`].join(`
`),void(this.failed=!0);if(this.queueConnectionForPostrouteRepair(t.route.connectionName))return void(this.progress=this.computeProgress())}return void(this.solved=this.failedSubSolvers.length===0)}if(e.points.length!==1&&!(e.points.length>2&&this.queueExtraBranchesForMultiPointConnection(e))){if(e.points.length===2){let[t,n]=e.points,o=Math.abs(t.x-n.x)<0.000001,i=Math.abs(t.y-n.y)<0.000001;if(o&&i&&t.z===n.z)return;if(o&&i&&t.z!==n.z&&this.trySolveSamePointLayerChange(e))return}this.activeSubSolver=new IPt(this.getSingleRouteSolverOpts(e))}}visualize(){let e={lines:[],points:[],rects:[],circles:[]};for(let s of this.nodeWithPortPoints.portPoints)e.points.push({x:s.x,y:s.y,label:MDe(s.connectionName,s.rootConnectionName,[`layer: ${s.z}`]),color:this.colorMap[s.connectionName]??"blue"});for(let s=0;s<this.solvedRoutes.length;s++){let a=this.solvedRoutes[s];if(a.route.length>0){let c=this.colorMap[a.connectionName]??"blue",l=a.rootConnectionName??this.rootConnectionNameByConnectionName.get(a.connectionName);for(let d=0;d<a.route.length-1;d++){let u=a.route[d],h=a.route[d+1];e.lines.push({points:[u,h],label:MDe(a.connectionName,l,[`layer: ${u.z}`]),strokeColor:u.z===0?Cr(c,0.2):Cr(c,0.8),layer:`route-layer-${u.z}`,step:s,strokeWidth:a.traceThickness})}for(let d of a.vias)e.circles.push({center:{x:d.x,y:d.y},radius:a.viaDiameter/2,fill:Cr(c,0.5),layer:"via",step:s,label:MDe(a.connectionName,l,["via"])})}}let t=Kee(this.nodeWithPortPoints),{minX:n,minY:o,maxX:i,maxY:r}=t;return e.lines.push({points:[{x:n,y:o},{x:i,y:o},{x:i,y:r},{x:n,y:r},{x:n,y:o}],strokeColor:"rgba(255, 0, 0, 0.25)",strokeDash:"4 4",layer:"border"}),e}},u7o=(e,t,n,o)=>{let i={x:t.x,y:t.y,z:n.z,parent:{x:n.x,y:n.y,z:n.z,g:0,h:0,f:0,parent:null},g:0,h:0,f:0};return!e.isNodeTooCloseToObstacle(i,e.viaDiameter/2+e.obstacleMargin/2,!0)&&!e.isNodeTooCloseToEdge(i,!0)},CI=(e)=>Math.round(200*e)/200,bPt=(e)=>typeof structuredClone=="function"?structuredClone(e):JSON.parse(JSON.stringify(e));Xge();var Wke=class extends qge{getSolverName(){return"CachedIntraNodeRouteSolver"}cacheProvider;cacheHit=!1;hasAttemptedToUseCache=!1;initialUnsolvedConnections;constructor(e){super(e),this.cacheProvider=e.cacheProvider===void 0?CS():e.cacheProvider,this.initialUnsolvedConnections=this.unsolvedConnections.map((t)=>({...t,points:t.points.map((n)=>({...n}))})),(this.solved||this.failed)&&this.cacheProvider&&!this.cacheHit&&this.saveToCacheSync()}_step(){if(!this.hasAttemptedToUseCache&&this.cacheProvider&&this.attemptToUseCacheSync())return;let e=this.solved,t=this.failed;super._step(),!this.cacheProvider||this.cacheHit||!this.solved&&!this.failed||e||t||this.saveToCacheSync()}computeCacheKeyAndTransform(){let e=this.nodeWithPortPoints.center,t=this.initialUnsolvedConnections.map(({connectionName:l,rootConnectionName:d,points:u})=>({connectionName:l,rootConnectionName:d,points:u.map((h)=>({connectionName:l,x:CI(h.x-e.x),y:CI(h.y-e.y),z:h.z??0}))})),n=[...this.nodeWithPortPoints.portPoints].sort((l,d)=>l.connectionName!==d.connectionName?l.connectionName.localeCompare(d.connectionName):(l.portPointId??"")!==(d.portPointId??"")?(l.portPointId??"").localeCompare(d.portPointId??""):l.x!==d.x?l.x-d.x:l.y!==d.y?l.y-d.y:(l.z??0)-(d.z??0)).map((l)=>({connectionName:l.connectionName,rootConnectionName:l.rootConnectionName,portPointId:l.portPointId,prevPortPointId:l.prevPortPointId,nextPortPointId:l.nextPortPointId,x:CI(l.x-e.x),y:CI(l.y-e.y),z:l.z??0})),o=Object.fromEntries(Object.entries(this.hyperParameters??{}).filter(([,l])=>l!==void 0).sort(([l],[d])=>l.localeCompare(d))),i=this.connMap?this.initialUnsolvedConnections.map(({connectionName:l})=>({connectionName:l,connectedIds:[...new Set(this.connMap.getIdsConnectedToNet(l)??[])].sort()})):void 0,r={cacheSchemaVersion:6,node:{width:CI(this.nodeWithPortPoints.width),height:CI(this.nodeWithPortPoints.height),center:{x:CI(this.nodeWithPortPoints.center.x),y:CI(this.nodeWithPortPoints.center.y)},availableZ:this.nodeWithPortPoints.availableZ?[...this.nodeWithPortPoints.availableZ].sort():void 0,portPoints:n},normalizedConnections:t,normalizedHyperParameters:o,minDistBetweenEnteringPoints:CI(this.minDistBetweenEnteringPoints),traceWidth:CI(this.traceWidth),viaDiameter:CI(this.viaDiameter),obstacleMargin:CI(this.obstacleMargin),normalizedConnMap:i},s=JSON.stringify(r,(l,d)=>typeof d!="number"||Number.isFinite(d)?typeof d=="string"&&(d==="u:"||d.startsWith("n:")||d.startsWith("s:"))?`s:${d}`:d===void 0?"u:":d:`n:${d.toString()}`),a=`intranode-solver:${s9t.default(s)}`,c={};return this.cacheKey=a,this.cacheToSolveSpaceTransform=c,{cacheKey:a,cacheToSolveSpaceTransform:c}}applyCachedSolution(e){e.success?(this.solvedRoutes=bPt(e.solvedRoutes),this.solved=!0,this.failed=!1):(this.solvedRoutes=[],this.failedSubSolvers=[],this.solved=!1,this.failed=!0,this.error=e.error??this.error),this.unsolvedConnections=[],this.activeSubSolver=null,this.cacheHit=!0,this.progress=1}attemptToUseCacheSync(){if(this.hasAttemptedToUseCache=!0,!this.cacheProvider?.isSyncCache)return!1;if(!this.cacheKey)try{this.computeCacheKeyAndTransform()}catch(e){return console.error("Error computing cache key:",e),!1}if(!this.cacheKey)return console.error("Failed to compute cache key."),!1;try{let e=this.cacheProvider.getCachedSolutionSync(this.cacheKey);if(e!=null)return this.applyCachedSolution(e),!0}catch(e){console.error("Error attempting to use cache:",e)}return!1}saveToCacheSync(){if(!this.cacheProvider?.isSyncCache)return;if(!this.cacheKey)try{this.computeCacheKeyAndTransform()}catch(t){return void console.error("Error computing cache key during save:",t)}if(!this.cacheKey)return void console.error("Failed to compute cache key before saving.");let e=this.failed?{success:!1,error:this.error??void 0}:{success:!0,solvedRoutes:bPt(this.solvedRoutes)};try{this.cacheProvider.setCachedSolutionSync(this.cacheKey,e)}catch(t){console.error("Error saving solution to cache:",t)}}},c9t=(e,t)=>{let n={};return e.portPoints.forEach((o,i)=>{n[o.connectionName]=`hsl(${360*i/e.portPoints.length}, 100%, 50%)`}),n},h7o=class extends Oi{getSolverName(){return"ViaPossibilitiesSolver2"}bounds;maxViaCount;portPairMap;colorMap;nodeWidth;availableZ;hyperParameters;VIA_INTERSECTION_BUFFER_DISTANCE=0.05;PLACEHOLDER_WALL_BUFFER_DISTANCE=0.1;NEW_HEAD_WALL_BUFFER_DISTANCE=0.05;viaDiameter;unprocessedConnections;completedPaths=new Map;placeholderPaths=new Map;currentHead;currentConnectionName;currentPath;currentViaCount;constructor({nodeWithPortPoints:e,colorMap:t,hyperParameters:n,viaDiameter:o}){super(),this.MAX_ITERATIONS=1e5,this.colorMap=t??c9t(e),this.maxViaCount=5,this.bounds=Kee(e),this.nodeWidth=this.bounds.maxX-this.bounds.minX,this.portPairMap=((r)=>{let s=new Map;return r.portPoints.forEach((a)=>{s.has(a.connectionName)?s.get(a.connectionName).end=a:s.set(a.connectionName,{start:a,end:null,connectionName:a.connectionName})}),s})(e),this.stats.solutionsFound=0,this.availableZ=e.availableZ??[0,1],this.hyperParameters=n??{SHUFFLE_SEED:0},this.viaDiameter=o??0.3,this.unprocessedConnections=Array.from(this.portPairMap.keys()).sort(),n?.SHUFFLE_SEED&&(this.unprocessedConnections=NI(this.unprocessedConnections,n.SHUFFLE_SEED));for(let[r,{start:s,end:a}]of this.portPairMap.entries())if(s.z===a.z){let c=Math.abs(s.x-a.x)<0.000000001,l=Math.abs(s.y-a.y)<0.000000001;c||l?this.placeholderPaths.set(r,[s,this._padByPlaceholderWallBuffer(s),this._padByPlaceholderWallBuffer(a),a]):this.placeholderPaths.set(r,[s,a])}else{let c=(s.x+a.x)/2,l=(s.y+a.y)/2,d=this._padByPlaceholderWallBuffer({x:c,y:l,z:s.z}),u=this._padByPlaceholderWallBuffer({x:c,y:l,z:a.z});this.placeholderPaths.set(r,[s,this._padByPlaceholderWallBuffer(s),d,u,this._padByPlaceholderWallBuffer(a),a])}this.currentConnectionName=this.unprocessedConnections.pop();let i=this.portPairMap.get(this.currentConnectionName).start;this.currentHead=this._padByNewHeadWallBuffer(i),this.currentPath=[i,this.currentHead],this.currentViaCount=0,this.placeholderPaths.delete(this.currentConnectionName)}_padByNewHeadWallBuffer(e){return{x:L_(e.x,this.bounds.minX+this.NEW_HEAD_WALL_BUFFER_DISTANCE,this.bounds.maxX-this.NEW_HEAD_WALL_BUFFER_DISTANCE),y:L_(e.y,this.bounds.minY+this.NEW_HEAD_WALL_BUFFER_DISTANCE,this.bounds.maxY-this.NEW_HEAD_WALL_BUFFER_DISTANCE),z:e.z}}_padByPlaceholderWallBuffer(e){return{x:L_(e.x,this.bounds.minX+this.PLACEHOLDER_WALL_BUFFER_DISTANCE,this.bounds.maxX-this.PLACEHOLDER_WALL_BUFFER_DISTANCE),y:L_(e.y,this.bounds.minY+this.PLACEHOLDER_WALL_BUFFER_DISTANCE,this.bounds.maxY-this.PLACEHOLDER_WALL_BUFFER_DISTANCE),z:e.z}}_step(){if(this.solved)return;let e=this.portPairMap.get(this.currentConnectionName).end,t=[this.currentHead,e],n=null,o=null,i=(s)=>{for(let a of s.values())for(let c=0;c<a.length-1;c++){let l=[a[c],a[c+1]];if(l[0].x===l[1].x&&l[0].y===l[1].y)continue;if(l[0].z!==this.currentHead.z)continue;let d=T6(t[0],t[1],l[0],l[1]);if(d){let u=bn(this.currentHead,d);if(u<0.000001)continue;(!n||u<n.dist)&&(n={point:d,dist:u},o=l[0].z)}}};i(this.completedPaths),i(this.placeholderPaths);let r=this.currentHead.z!==e.z;if((n||r)&&(this.currentViaCount++,this.currentViaCount>=this.maxViaCount))return this.failed=!0,void(this.error=`Exceeded max via count of ${this.maxViaCount}`);if(n){let s,a=n.dist;if(a<=this.VIA_INTERSECTION_BUFFER_DISTANCE+0.000001)s=Uk(this.currentHead,n.point);else{let u=n.point,h=u.x-this.currentHead.x,A=u.y-this.currentHead.y,m=(a-this.VIA_INTERSECTION_BUFFER_DISTANCE)/a;s={x:this.currentHead.x+h*m,y:this.currentHead.y+A*m}}let c=this.availableZ.find((u)=>u!==o);if(c===void 0)return this.error="Could not determine next Z level for via placement!",void(this.failed=!0);let l={...s,z:this.currentHead.z},d={...s,z:c};this.currentPath.push(l,d),this.currentHead=d}else if(r){let s,a=bn(this.currentHead,e);if(a<this.VIA_INTERSECTION_BUFFER_DISTANCE)s=Uk(this.currentHead,e);else{let u=e.x-this.currentHead.x,h=e.y-this.currentHead.y,A=(a-this.VIA_INTERSECTION_BUFFER_DISTANCE)/a;s={x:this.currentHead.x+u*A,y:this.currentHead.y+h*A}}let c=e.z,l={...s,z:this.currentHead.z},d={...s,z:c};this.currentPath.push(l,d),this.currentHead=d}else if(this.currentPath.push(e),this.completedPaths.set(this.currentConnectionName,this.currentPath),this.unprocessedConnections.length===0)this.solved=!0,this.stats.solutionsFound=1;else{this.currentConnectionName=this.unprocessedConnections.pop();let{start:s}=this.portPairMap.get(this.currentConnectionName);this.currentHead=this._padByNewHeadWallBuffer(s),this.currentPath=[s,this.currentHead],this.currentViaCount=0,this.placeholderPaths.delete(this.currentConnectionName)}}visualize(){let e={points:[],lines:[],circles:[],rects:[],title:"Via Possibilities Solver State",coordinateSystem:"cartesian"},t=this.colorMap;e.lines.push({points:[{x:this.bounds.minX,y:this.bounds.minY},{x:this.bounds.maxX,y:this.bounds.minY},{x:this.bounds.maxX,y:this.bounds.maxY},{x:this.bounds.minX,y:this.bounds.maxY},{x:this.bounds.minX,y:this.bounds.minY}],strokeColor:"gray",strokeWidth:0.01});for(let[o,{start:i,end:r}]of this.portPairMap.entries()){let s=this.colorMap[o]??"black";e.points.push({x:i.x,y:i.y,color:s,label:`Port: ${o} Start (z${i.z})`}),e.points.push({x:r.x,y:r.y,color:s,label:`Port: ${o} End (z${r.z})`})}let n=(o,i)=>{for(let[r,s]of o.entries()){let a=t[r]??"black";for(let c=0;c<s.length-1;c++){let l=s[c],d=s[c+1];l.x===d.x&&l.y===d.y&&l.z!==d.z?e.circles.push({center:{x:l.x,y:l.y},radius:this.viaDiameter/2,fill:Cr(a,0.5),label:`${i}: ${r} Via (z${l.z}->z${d.z})`}):e.lines.push({points:[l,d],strokeColor:Cr(a,0.5),strokeDash:l.z===0?void 0:[0.1,0.1],strokeWidth:0.1,label:`${i}: ${r} (z${l.z})`})}}};if(n(this.placeholderPaths,"Placeholder"),n(this.completedPaths,"Completed"),this.currentPath&&this.currentPath.length>0){let o=t[this.currentConnectionName]??"orange";for(let i=0;i<this.currentPath.length-1;i++){let r=this.currentPath[i],s=this.currentPath[i+1];r.x===s.x&&r.y===s.y&&r.z!==s.z?e.circles.push({center:{x:r.x,y:r.y},radius:this.viaDiameter/2,fill:Cr(o,0.5),label:`Current: ${this.currentConnectionName} Via (z${r.z}->z${s.z})`}):e.lines.push({points:[r,s],strokeColor:Cr(o,0.5),strokeWidth:0.15,strokeDash:"2,2",label:`Current: ${this.currentConnectionName} (z${r.z})`})}e.points.push({x:this.currentHead.x,y:this.currentHead.y,color:"green",label:`Current Head: ${this.currentConnectionName} (z${this.currentHead.z})`})}return e}},nAe=(e)=>Math.round(1e4*e),l9t=(e)=>{let t=0,n=[],o=[];for(let r of e.portPoints){if(n.some((a)=>a.connectionName===r.connectionName))continue;if(o.some((a)=>a.connectionName===r.connectionName))continue;let s={connectionName:r.connectionName,z:r.z,points:[{x:nAe(r.x),y:nAe(r.y),z:r.z}]};for(let a of e.portPoints)r.connectionName===a.connectionName&&(r.x===a.x&&r.y===a.y||s.points.push({x:nAe(a.x),y:nAe(a.y),z:a.z}));s.points.some((a)=>a.z!==s.z)?o.push(s):n.push(s)}n=n.filter((r)=>r.points.length>1);for(let r=0;r<n.length;r++)for(let s=r+1;s<n.length;s++){let a=n[r],c=n[s];a.z===c.z&&fu(a.points[0],a.points[1],c.points[0],c.points[1])&&t++}let i=0;for(let r=0;r<o.length;r++)for(let s=r+1;s<o.length;s++){let a=o[r],c=o[s];fu(a.points[0],a.points[1],c.points[0],c.points[1])&&i++}return{numSameLayerCrossings:t,numEntryExitLayerChanges:o.length,numTransitionPairCrossings:i}},m7o=(e)=>{let{start:t,end:n,segmentsPerPolyline:o,viaPositions:i,viaCount:r,availableZ:s}=e,a=function(A,m){let p=Array(A).fill(0);if(m===0)return p;if(m===A)return p.fill(1);if(m<=A/2){let g=Math.floor(A/m),_=Math.floor((A-(g*(m-1)+1))/2);for(let f=0;f<m;f++)p[_+f*g]=1}else{let g=A-m,_=Math.floor(A/g),f=Math.floor((A-(_*(g-1)+1))/2);p.fill(1);for(let y=0;y<g;y++)p[f+y*_]=0}return p}(o,r),c=a.map(()=>null),l=0,d=t.z1,u=s.indexOf(t.z1);for(let A=0;A<a.length;A++)if(a[A]===1){let m=s[(u+l+1)%s.length];c[A]={...i[l],z1:d,z2:m},d=m,l++}let h=t;for(let A=0;A<c.length;A++){if(c[A]){h=c[A];continue}let m=n,p=c.length;for(let y=A+1;y<c.length;y++)if(c[y]){m=c[y],p=y;break}let g=p-A,_=m.x-h.x,f=m.y-h.y;for(let y=1/(g+1),x=0;A+x!==p;y+=1/(g+1),x++)c[A+x]={x:h.x+_*y,y:h.y+f*y,z1:h.z2,z2:h.z2}}return c},YV=0.000000001;function L_e(e,t){return Math.abs(e-t)<YV}function BDe(e){return`${Math.round(e.x/YV)}:${Math.round(e.y/YV)}`}function wDe(e,t,n,o){return e*o-t*n}function p7o(e,t,n,o){let i={x:t.x-e.x,y:t.y-e.y},r={x:o.x-n.x,y:o.y-n.y},s=wDe(i.x,i.y,r.x,r.y),a={x:n.x-e.x,y:n.y-e.y};if(L_e(s,0))return null;let c=wDe(a.x,a.y,r.x,r.y)/s,l=wDe(a.x,a.y,i.x,i.y)/s;return c>=-0.000000001&&c<=1+YV&&l>=-0.000000001&&l<=1+YV?{x:e.x+c*i.x,y:e.y+c*i.y}:null}function SPt(e,t,n){return L_e(Math.hypot(e.x-t.x,e.y-t.y)+Math.hypot(e.x-n.x,e.y-n.y),Math.hypot(t.x-n.x,t.y-n.y))}function A7o(e,t){let n=[],o=new Map;for(let p of e){let g=[p.start,...p.mPoints,p.end];for(let f=0;f<g.length-1;f++){let y=g[f],x=g[f+1],C=y.z2;if(n.push({start:{x:y.x,y:y.y},end:{x:x.x,y:x.y},connectionName:p.connectionName,layer:C}),y.z1!==y.z2){let I=BDe(y);o.has(I)||o.set(I,{point:y,connectionName:p.connectionName})}}let _=g[g.length-1];if(_.z1!==_.z2){let f=BDe(_);o.has(f)||o.set(f,{point:_,connectionName:p.connectionName})}}let i=[{start:{x:t.minX,y:t.minY},end:{x:t.maxX,y:t.minY},connectionName:null,layer:0},{start:{x:t.maxX,y:t.minY},end:{x:t.maxX,y:t.maxY},connectionName:null,layer:0},{start:{x:t.maxX,y:t.maxY},end:{x:t.minX,y:t.maxY},connectionName:null,layer:0},{start:{x:t.minX,y:t.maxY},end:{x:t.minX,y:t.minY},connectionName:null,layer:0}];n.push(...i);let r=new Map,s=0;function a(p,g){let _=BDe(p),f=r.get(_);if(!f){let y=o.has(_);f={id:s++,x:p.x,y:p.y,isVia:y,connectionNames:new Set,outgoingEdges:[]},r.set(_,f),y&&o.get(_)&&f.connectionNames.add(o.get(_).connectionName)}return g&&f.connectionNames.add(g),f}for(let p of n)a(p.start,p.connectionName),a(p.end,p.connectionName);let c=new Map;for(let p of n)c.set(p,[]);for(let p=0;p<n.length;p++)for(let g=p+1;g<n.length;g++){if(n[p].layer!==n[g].layer)continue;let _=p7o(n[p].start,n[p].end,n[g].start,n[g].end);_&&(a(_),SPt(_,n[p].start,n[p].end)&&c.get(n[p]).push(_),SPt(_,n[g].start,n[g].end)&&c.get(n[g]).push(_))}let l=[],d=0;for(let p of n){let g=[p.start,...c.get(p),p.end];g.sort((f,y)=>{let x=p.end.x-p.start.x,C=p.end.y-p.start.y;return Math.abs(x)>Math.abs(C)?(f.x-p.start.x)/x-(y.x-p.start.x)/x:Math.abs(C)<YV?0:(f.y-p.start.y)/C-(y.y-p.start.y)/C});let _=[];if(g.length>0){_.push(g[0]);for(let f=1;f<g.length;f++)L_e(g[f].x,g[f-1].x)&&L_e(g[f].y,g[f-1].y)||_.push(g[f])}for(let f=0;f<_.length-1;f++){let y=_[f],x=_[f+1],C=a(y,p.connectionName),I=a(x,p.connectionName);if(C===I)continue;let b={id:d++,origin:C,twin:null,next:null,face:null,connectionName:p.connectionName,layer:p.layer,visited:!1},P={id:d++,origin:I,twin:b,next:null,face:null,connectionName:p.connectionName,layer:p.layer,visited:!1};b.twin=P,l.push(b,P),C.outgoingEdges.push(b),I.outgoingEdges.push(P)}}for(let p of r.values()){p.outgoingEdges.sort((_,f)=>{let y=_.twin.origin,x=f.twin.origin;return Math.atan2(y.y-p.y,y.x-p.x)-Math.atan2(x.y-p.y,x.x-p.x)});let g=p.outgoingEdges.length;for(let _=0;_<g;_++){let f=p.outgoingEdges[_],y=p.outgoingEdges[(_-1+g)%g];f.twin&&(f.twin.next=y)}}let u=[],h=0,A=null,m=-1/0;for(let p of l){if(p.visited)continue;let g={id:h++,outerComponent:p,innerComponents:[],isOuterFace:!1};u.push(g);let _=p,f=[],y=[],x=new Set,C=0;do{if(!_||_.visited){console.warn("Face traversal encountered visited edge or null, breaking loop.",g.id),f.length=0;break}_.visited=!0,_.face=g,f.push(_),y.push(_.origin),_.connectionName!==null&&x.add(_.connectionName);let I=_.origin,b=_.twin.origin;C+=I.x*b.y-b.x*I.y,_=_.next}while(_!==p&&_!==null);if(_===p){if(C=0.5*Math.abs(C),C>m&&(m=C,A&&(A.isOuterFace=!1),A=g,g.isOuterFace=!0),!g.isOuterFace&&f.length>0){if([...x].filter((I)=>I!==null).length>1){let I=!1;for(let b of y)if(b.isVia){I=!0;break}if(!I)return!0}}}else console.warn(`Face ${g.id} did not close properly.`),u.pop(),h--}return!1}var d9t=(e)=>{if(e.length===0)return[[]];let t=[];for(let n=0;n<e.length;n++){let o=e[n],i=[...e.slice(0,n),...e.slice(n+1)],r=d9t(i);for(let s of r)t.push([o,...s])}return t},RRe=0.000000001;function F_e(e,t,n=0.000000001){return Math.abs(e-t)<n}function TDe(e,t,n,o){return e*o-t*n}function _7o(e,t,n,o){let i={x:t.x-e.x,y:t.y-e.y},r={x:o.x-n.x,y:o.y-n.y},s=TDe(i.x,i.y,r.x,r.y);if(F_e(s,0))return null;let a={x:n.x-e.x,y:n.y-e.y},c=TDe(a.x,a.y,r.x,r.y)/s,l=TDe(a.x,a.y,i.x,i.y)/s;return c<-0.000000001||c>1+RRe||l<-0.000000001||l>1+RRe?null:{x:e.x+c*i.x,y:e.y+c*i.y}}function g7o(e){let t=0;for(let n=0,o=e.length;n<o;++n){let i=(n+1)%o;t+=e[n].x*e[i].y-e[i].x*e[n].y}return 0.5*t}function f7o(e){let t=0,n=0,o=0;for(let i=0,r=e.length;i<r;++i){let s=(i+1)%r,a=e[i].x*e[s].y-e[s].x*e[i].y;t+=a,n+=(e[i].x+e[s].x)*a,o+=(e[i].y+e[s].y)*a}return t*=0.5,F_e(t,0)?null:(n/=6*t,o/=6*t,{x:n,y:o})}var y7o=class{x;y;out;connectionNames;constructor(e,t){this.x=e,this.y=t,this.out=[],this.connectionNames=new Set}},PPt=class{orig;dest;twin;next;visited;constructor(e,t){this.orig=e,this.dest=t,this.twin=null,this.next=null,this.visited=!1}};function x7o(e,t){let n=[...t,{start:{x:e.minX,y:e.minY},end:{x:e.maxX,y:e.minY}},{start:{x:e.maxX,y:e.minY},end:{x:e.maxX,y:e.maxY}},{start:{x:e.maxX,y:e.maxY},end:{x:e.minX,y:e.maxY}},{start:{x:e.minX,y:e.maxY},end:{x:e.minX,y:e.minY}}],o=n.map(()=>[]);for(let u=0;u<n.length;++u){let h=n[u];o[u].push(h.start,h.end)}for(let u=0;u<n.length;++u)for(let h=u+1;h<n.length;++h){let A=_7o(n[u].start,n[u].end,n[h].start,n[h].end);A&&(o[u].push(A),o[h].push(A))}let i=new Map,r=[];function s(u){let h=function(A,m=0.000000001){return`${Math.round(A.x/m)}:${Math.round(A.y/m)}`}(u);if(!i.has(h)){let A=r.length;return i.set(h,A),r.push(new y7o(u.x,u.y)),A}return i.get(h)}let a=[];for(let u=0;u<n.length;++u){let h=n[u],A=o[u].slice();A.sort((m,p)=>{let g=h.end.x-h.start.x,_=h.end.y-h.start.y;return(F_e(Math.abs(g),0)?(m.y-h.start.y)/_:(m.x-h.start.x)/g)-(F_e(Math.abs(g),0)?(p.y-h.start.y)/_:(p.x-h.start.x)/g)});for(let m=0;m<A.length-1;++m){let p=A[m],g=A[m+1],_=s(p),f=s(g);_!==f&&(a.push([_,f]),h.connectionName&&(r[_].connectionNames.add(h.connectionName),r[f].connectionNames.add(h.connectionName)))}}let c=[];for(let[u,h]of a){let A=new PPt(u,h),m=new PPt(h,u);A.twin=c.length+1,m.twin=c.length;let p=c.length;c.push(A,m),r[u].out.push(p),r[h].out.push(p+1)}for(let u=0;u<r.length;++u){let h=r[u];h.out.sort((m,p)=>{let g=c[m],_=c[p],f=r[g.dest],y=r[_.dest];return Math.atan2(f.y-h.y,f.x-h.x)-Math.atan2(y.y-h.y,y.x-h.x)});let A=h.out.length;for(let m=0;m<A;++m){let p=h.out[m],g=h.out[(m-1+A)%A],_=c[p];_.twin!==null&&(c[_.twin].next=g)}}let l=[],d=[];for(let u=0;u<c.length;++u){if(c[u].visited)continue;let h=u,A=[],m=[];do{if(h===null)break;let p=c[h];p.visited=!0,A.push(r[p.orig]),m.push(h),h=p.next}while(h!==null&&h!==u&&!c[h].visited);if(A.length<3)continue;if(g7o(A)>RRe){let p=f7o(A);p&&(l.push(p),d.push({vertices:A.map((g)=>({x:g.x,y:g.y,connectionNames:g.connectionNames.size>0?g.connectionNames:void 0})),centroid:p}))}}return{centroids:l,faces:d,allVertices:r}}function C7o(e,t){if(e>t)throw Error("oneCount cannot be greater than length");if(e<0||t<0)throw Error("oneCount and length must be non-negative");let n=[];return function o(i,r,s){s!==t?(i[s]=0,o(i,r,s+1),r>0&&(i[s]=1,o(i,r-1,s+1))):r===0&&n.push([...i])}(Array(t).fill(0),e,0),n}var u9t=class extends Oi{getSolverName(){return"MultiHeadPolyLineIntraNodeSolver"}nodeWithPortPoints;colorMap;hyperParameters;connMap;candidates;bounds;solvedRoutes=[];unsolvedConnections=[];SEGMENTS_PER_POLYLINE;cellSize;MAX_CANDIDATES=50000;viaDiameter=0.3;obstacleMargin=0.1;traceWidth=0.15;availableZ=[];uniqueConnections=0;BOUNDARY_PADDING;lastCandidate=null;maxViaCount;minViaCount;phase="setup";progress=0;constructor(e){super(),this.MAX_ITERATIONS=1e4,this.nodeWithPortPoints=e.nodeWithPortPoints,this.colorMap=e.colorMap??c9t(e.nodeWithPortPoints),this.hyperParameters=e.hyperParameters??{},this.SEGMENTS_PER_POLYLINE=e.hyperParameters?.SEGMENTS_PER_POLYLINE??3,this.BOUNDARY_PADDING=e.hyperParameters?.BOUNDARY_PADDING??0.05,this.connMap=e.connMap,this.viaDiameter=e.viaDiameter??this.viaDiameter,this.cellSize=this.nodeWithPortPoints.width/1024,this.candidates=[],this.availableZ=this.nodeWithPortPoints.availableZ??[0,1],this.bounds={minX:this.nodeWithPortPoints.center.x-this.nodeWithPortPoints.width/2,maxX:this.nodeWithPortPoints.center.x+this.nodeWithPortPoints.width/2,minY:this.nodeWithPortPoints.center.y-this.nodeWithPortPoints.height/2,maxY:this.nodeWithPortPoints.center.y+this.nodeWithPortPoints.height/2};let t=this.nodeWithPortPoints.width*this.nodeWithPortPoints.height,n=(this.viaDiameter+2*this.obstacleMargin+this.traceWidth/2)**2,o=new Set(this.nodeWithPortPoints.portPoints.map((s)=>s.connectionName)).size;this.uniqueConnections=o;let{numSameLayerCrossings:i,numEntryExitLayerChanges:r}=l9t(this.nodeWithPortPoints);if(this.minViaCount=2*i+r,this.maxViaCount=Math.min(Math.floor(t/n),Math.ceil(1.5*o)),this.minViaCount>this.SEGMENTS_PER_POLYLINE*(o/2))return this.failed=!0,void(this.error=`Not possible to solve problem with given SEGMENTS_PER_POLYLINE (${this.SEGMENTS_PER_POLYLINE}), atleast ${this.minViaCount} vias are required`);this.maxViaCount>this.SEGMENTS_PER_POLYLINE&&(this.maxViaCount=this.SEGMENTS_PER_POLYLINE),this.maxViaCount<this.minViaCount&&(this.maxViaCount=this.minViaCount)}computeMinGapBtwPolyLines(e){let t=[],n=[],o=[];for(let i=0;i<e.length;i++){let r=e[i],s=[r.start,...r.mPoints,r.end],a=new Map(this.availableZ.map((c)=>[c,[]]));for(let c=0;c<s.length-1;c++){let l=[s[c],s[c+1]],d=l[0].z2;a.has(d)||a.set(d,[]),a.get(d).push(l)}n.push(a),o.push(s.filter((c)=>c.z1!==c.z2))}for(let i=0;i<e.length;i++){let r=n[i],s=o[i];for(let a=i+1;a<e.length;a++){if(this.connMap?.areIdsConnected(e[i].connectionName,e[a].connectionName))continue;let c=n[a],l=o[a],d=1;for(let u of this.availableZ){let h=r.get(u)??[],A=c.get(u)??[];for(let m of h)for(let p of A)d=Math.min(d,Um(m[0],m[1],p[0],p[1])-this.traceWidth);for(let m of s)for(let p of A)d=Math.min(d,Da(m,p[0],p[1])-this.traceWidth/2-this.viaDiameter/2);for(let m of l)for(let p of h)d=Math.min(d,Da(m,p[0],p[1])-this.traceWidth/2-this.viaDiameter/2);for(let m of s)for(let p of l)d=Math.min(d,bn(m,p)-this.viaDiameter)}t.push(d)}}return t}insertCandidate(e){let t=0,n=this.candidates.length-1;for(;t<=n;){let o=Math.floor((t+n)/2);this.candidates[o].f<e.f?t=o+1:n=o-1}this.candidates.splice(t,0,e)}setupInitialPolyLines(){let e=new Map;this.nodeWithPortPoints.portPoints.forEach((r)=>{e.has(r.connectionName)?e.get(r.connectionName).end={...r,z1:r.z??0,z2:r.z??0}:e.set(r.connectionName,{start:{...r,z1:r.z??0,z2:r.z??0},end:null})});for(let[r,s]of e.entries())s.end===null&&e.delete(r);if(e.size===0)return this.failed=!0,void(this.error="No port pairs found, can't solve");let t=Array.from(e.entries()),n=((r,s,a,c)=>{let l=[];for(let[,u]of r){let h=u.start.z1!==u.end.z1,A=[];for(let m=0;m<=s;m++){let p=m%2!=0;h&&p?A.push(m):h||p||A.push(m)}l.push(A)}if(l.length===0)return[[]];let d=((u)=>{if(!u||u.length===0)return[[]];let h=[[]];for(let A of u){let m=[];for(let p of h)for(let g of A)m.push([...p,g]);h=m}return h})(l).filter((u)=>{for(let h=0;h<u.length;h++)if(u.reduce((A,m)=>A+m,0)<c)return!1;return!0});return d=d.filter((u)=>{for(let h=0;h<r.length;h++){let[,A]=r[h];if(A.start.z1!==A.start.z2&&u[h]===0)return!1}return!0}),d=d.filter((u)=>{for(let h=0;h<r.length;h++){let[,A]=r[h];if(r[h][1].start.z1===r[h][1].start.z2)for(let m=h+1;m<r.length;m++){if(r[m][1].start.z1!==r[m][1].start.z2)continue;let[,p]=r[m];if(A.start.z1===A.end.z1&&p.start.z1===p.end.z1&&A.start.z1===p.start.z1&&fu(A.start,A.end,p.start,p.end)&&u[h]+u[m]<2)return!1}}return!0}),d=d.filter((u)=>!(u.reduce((h,A)=>h+A,0)>a)),d})(t,this.SEGMENTS_PER_POLYLINE,this.maxViaCount,this.minViaCount),o=((r)=>{let{bounds:s,portPairsEntries:a,viaCountVariants:c}=r,{centroids:l}=x7o(s,a.map(([u,h])=>h)),d=[];for(let u of c){let h=u.reduce((p,g)=>p+g,0),A=l;if(l.length<h){A=[];let p=Math.ceil(Math.sqrt(h)),g=p;for(let _=0;_<p;_++)for(let f=0;f<g;f++)A.push({x:s.minX+(f+1)/(g+1)*(s.maxX-s.minX),y:s.minY+(_+1)/(p+1)*(s.maxY-s.minY)})}let m=C7o(h,A.length);for(let p of m){let g=[];for(let _=0;_<p.length;_++)p[_]===1&&g.push(A[_]);d.push({viaPositions:g,viaCountVariant:u})}}return d})({portPairsEntries:t,viaCountVariants:n,bounds:this.bounds}),i=[];for(let{viaCountVariant:r,viaPositions:s}of o){let a=d9t(s);for(let c of a)i.push({viaCountVariant:r,viaPositions:c})}for(let{viaPositions:r,viaCountVariant:s}of i){let a=[],c=0;for(let h=0;h<t.length;h++){let[A,m]=t[h],p=s[h],g=r.slice(c,c+p),_=m7o({start:m.start,end:m.end,segmentsPerPolyline:this.SEGMENTS_PER_POLYLINE,viaPositions:g,viaCount:p,availableZ:this.availableZ});c+=p,a.push({connectionName:A,start:m.start,end:m.end,mPoints:_})}if(A7o(a,this.bounds))continue;let l=this.computeMinGapBtwPolyLines(a),d=this.computeH({minGaps:l,forces:[]}),u={polyLines:a,g:0,h:d,f:d,viaCount:s.reduce((h,A)=>h+A,0),minGaps:l};if(this.checkIfSolved(u))return void(this.candidates=[u]);if(this.candidates.push(u),this.candidates.length>this.MAX_CANDIDATES)return}this.candidates.sort((r,s)=>r.f-s.f)}computeG(e,t){return t.g+0.000005+0.000005*t.viaCount*100}computeH(e){let t=0;for(let n of e.forces??[])for(let o of n)for(let i of o.values())t+=i.fx*i.fx+i.fy*i.fy;return t}getNeighbors(e){let{polyLines:t}=e,n=t.length,s=Array.from({length:n},(A,m)=>Array.from({length:t[m].mPoints.length},()=>new Map)),a=(A,m,p,g,_)=>{if(m>0&&m<t[A].mPoints.length+1){let f=m-1,y=s[A][f],x=y.get(p)||{fx:0,fy:0};y.set(p,{fx:x.fx+g,fy:x.fy+_})}};for(let A=0;A<n;A++)for(let m=A+1;m<n;m++){let p=t[A],g=t[m],_=[p.start,...p.mPoints,p.end],f=[g.start,...g.mPoints,g.end],y=[],x=[];for(let b=0;b<_.length-1;b++)y.push({p1:_[b],p2:_[b+1],layer:_[b].z2,p1Idx:b,p2Idx:b+1});_.forEach((b,P)=>{b.z1!==b.z2&&x.push({point:b,layers:[b.z1,b.z2],index:P})});let C=[],I=[];for(let b=0;b<f.length-1;b++)C.push({p1:f[b],p2:f[b+1],layer:f[b].z2,p1Idx:b,p2Idx:b+1});f.forEach((b,P)=>{b.z1!==b.z2&&I.push({point:b,layers:[b.z1,b.z2],index:P})});for(let b of y)for(let P of C)if(b.layer===P.layer){if(Um(b.p1,b.p2,P.p1,P.p2)<0.000001)continue;let E={x:(b.p1.x+b.p2.x)/2,y:(b.p1.y+b.p2.y)/2},B={x:(P.p1.x+P.p2.x)/2,y:(P.p1.y+P.p2.y)/2},w=E.x-B.x,T=E.y-B.y,Q=w*w+T*T;if(Q>0.000001){let N=Math.sqrt(Q),F=(Math.exp(-6*N),`seg:${m}:${P.p1Idx}:${P.p2Idx}`),H=`seg:${A}:${b.p1Idx}:${b.p2Idx}`,z=(Y,U,X,V,W,j,q)=>{let ne=im(Y,X.p1,X.p2),ce=Y.x-ne.x,oe=Y.y-ne.y,ie=ce*ce+oe*oe;if(ie<=0.000001)return;let J=Math.sqrt(ie),ee=0.02*Math.exp(-6*J),se=ce/J*ee,le=oe/J*ee;a(V,U,j,se,le),a(W,X.p1Idx,q,-se/2,-le/2),a(W,X.p2Idx,q,-se/2,-le/2)};z(b.p1,b.p1Idx,P,A,m,F,H),z(b.p2,b.p2Idx,P,A,m,F,H),z(P.p1,P.p1Idx,b,m,A,H,F),z(P.p2,P.p2Idx,b,m,A,H,F)}}for(let b of x)for(let P of C)if(b.layers.includes(P.layer)){let E=im(b.point,P.p1,P.p2),B=b.point.x-E.x,w=b.point.y-E.y,T=B*B+w*w;if(T>0.000001){let Q=Math.sqrt(T),N=2,F=Q;Q<this.viaDiameter/2?(N*=4,F=Math.max(0.000001,Q)):F=Math.max(0.000001,Q-this.viaDiameter/2);let H=N*0.02*Math.exp(-6*F),z=B/Q*H,Y=w/Q*H,U=`seg:${m}:${P.p1Idx}:${P.p2Idx}`;a(A,b.index,U,z,Y);let X=`via:${A}:${b.index}`;a(m,P.p1Idx,X,-z/2,-Y/2),a(m,P.p2Idx,X,-z/2,-Y/2)}}for(let b of I)for(let P of y)if(b.layers.includes(P.layer)){let E=im(b.point,P.p1,P.p2),B=b.point.x-E.x,w=b.point.y-E.y,T=B*B+w*w;if(T>0.000001){let Q=Math.sqrt(T),N=2,F=Q;Q<this.viaDiameter/2?(N*=4,F=Math.max(0.000001,Q)):F=Math.max(0.000001,Q-this.viaDiameter/2);let H=N*0.02*Math.exp(-6*F),z=B/Q*H,Y=w/Q*H,U=`seg:${A}:${P.p1Idx}:${P.p2Idx}`;a(m,b.index,U,z,Y);let X=`via:${m}:${b.index}`;a(A,P.p1Idx,X,-z/2,-Y/2),a(A,P.p2Idx,X,-z/2,-Y/2)}}for(let b of x)for(let P of I)if(b.layers.filter((E)=>P.layers.includes(E)).length>0){let E=b.point.x-P.point.x,B=b.point.y-P.point.y,w=E*E+B*B;if(w>0.000001){let T=Math.sqrt(w),Q=2,N=T;T<this.viaDiameter?(Q*=4,N=Math.max(0.000001,T)):N=Math.max(0.000001,T-this.viaDiameter);let F=Q*0.02*Math.exp(-6*N),H=E/T*F,z=B/T*F,Y=`via:${m}:${P.index}`,U=`via:${A}:${b.index}`;a(A,b.index,Y,H,z),a(m,P.index,U,-H,-z)}}}for(let A=0;A<n;A++){let m=t[A],p=[m.start,...m.mPoints,m.end],g=[];if(p.forEach((_,f)=>{_.z1!==_.z2&&g.push({point:_,layers:[_.z1,_.z2],index:f})}),!(g.length<2))for(let _=0;_<g.length;_++)for(let f=_+1;f<g.length;f++){let y=g[_],x=g[f],C=y.point.x-x.point.x,I=y.point.y-x.point.y,b=C*C+I*I;if(b>0.000001){let P=Math.sqrt(b),E=2,B=P;P<this.viaDiameter?(E*=4,B=Math.max(0.000001,P)):B=Math.max(0.000001,P-this.viaDiameter);let w=E*0.02*Math.exp(-6*B),T=C/P*w,Q=I/P*w,N=`via:${A}:${x.index}`,F=`via:${A}:${y.index}`;a(A,y.index,N,T,Q),a(A,x.index,F,-T,-Q)}}}let c=t.map((A)=>({...A,mPoints:A.mPoints.map((m)=>({...m}))})),l=!1;for(let A=0;A<n;A++)for(let m=0;m<c[A].mPoints.length;m++){let p=c[A].mPoints[m],g=s[A][m],_={fx:0,fy:0};for(let C of g.values())_.fx+=C.fx,_.fy+=C.fy;let f=p.z1!==p.z2,y=p.x+_.fx,x=p.y+_.fy;if(f){let C=this.viaDiameter/2,I=0,b=0,P=this.viaDiameter/2+this.BOUNDARY_PADDING,E=this.bounds.minX+P,B=this.bounds.maxX-P,w=this.bounds.minY+P,T=this.bounds.maxY-P,Q=E+C-p.x,N=p.x-(B-C),F=w+C-p.y,H=p.y-(T-C);Q>0?I=0.008*(Math.exp(Q/(2*this.obstacleMargin))-1):N>0&&(I=-0.008*(Math.exp(N/(2*this.obstacleMargin))-1)),F>0?b=0.008*(Math.exp(F/(2*this.obstacleMargin))-1):H>0&&(b=-0.008*(Math.exp(H/(2*this.obstacleMargin))-1)),_.fx+=I,_.fy+=b,y=p.x+_.fx,x=p.y+_.fy}else{let C=this.traceWidth/2+this.BOUNDARY_PADDING;y=Math.max(this.bounds.minX+C,Math.min(this.bounds.maxX-C,y)),x=Math.max(this.bounds.minY+C,Math.min(this.bounds.maxY-C,x))}Math.abs(_.fx)<0.000001&&Math.abs(_.fy)<0.000001||(Math.abs(p.x-y)>0.000001||Math.abs(p.y-x)>0.000001)&&(p.x=y,p.y=x,l=!0)}if(!l)return[];let d=this.computeMinGapBtwPolyLines(c),u=this.computeG(c,e),h=this.computeH({minGaps:d,forces:s});return[{polyLines:c,g:u,h,f:Math.round(5*u)/5+h,minGaps:d,forces:s,viaCount:e.viaCount}]}checkIfSolved(e){let t=e.minGaps.every((o)=>o>=this.obstacleMargin),n=e.polyLines.every((o)=>o.mPoints.every((i)=>{let r=(i.z1!==i.z2?this.viaDiameter/2:this.traceWidth/2)+this.BOUNDARY_PADDING;return((s,a,c=0)=>s.x>=a.minX+c&&s.x<=a.maxX-c&&s.y>=a.minY+c&&s.y<=a.maxY-c)(i,this.bounds,r)}));return t&&n}tryFinalAcceptance(){let e=this.hyperParameters?.MINIMUM_FINAL_ACCEPTANCE_GAP??void 0;if(e===void 0||this.lastCandidate===null||this.lastCandidate.minGaps.length===0)return;return Math.min(...this.lastCandidate.minGaps)>=e?(this.solved=!0,void this._setSolvedRoutes()):void 0}_step(){if(this.phase==="setup")return this.setupInitialPolyLines(),void(this.phase="solving");let e=this.candidates.shift();if(!e){if(this.tryFinalAcceptance(),this.solved)return;return this.failed=!0,void(this.error="No candidates left")}if(this.lastCandidate=e,this.checkIfSolved(e))return this.solved=!0,void this._setSolvedRoutes();if(!e)return void(this.failed=!0);let t=this.getNeighbors(e);for(let n of t)this.insertCandidate(n)}visualize(){let e={points:[],lines:[],rects:[],circles:[],coordinateSystem:"cartesian",title:"MultiHeadPolyLineIntraNodeSolver Visualization"};e.lines.push({points:[{x:this.bounds.minX,y:this.bounds.minY},{x:this.bounds.maxX,y:this.bounds.minY},{x:this.bounds.maxX,y:this.bounds.maxY},{x:this.bounds.minX,y:this.bounds.maxY},{x:this.bounds.minX,y:this.bounds.minY}],strokeColor:"gray"});let t=this.lastCandidate??this.candidates[0];if(t?.hasClosedSameLayerFace){let n=0.1*(this.bounds.maxX-this.bounds.minX),o=0.1*(this.bounds.maxY-this.bounds.minY);e.rects.push({center:{x:this.bounds.maxX+0.6*n,y:this.bounds.maxY+0.6*o},width:n,height:o,fill:"red",label:"HAS CLOSED FACE"})}for(let n of this.nodeWithPortPoints.portPoints)e.points.push({x:n.x,y:n.y,label:`${n.connectionName} (Port z=${n.z??0})`,color:this.colorMap[n.connectionName]??"blue"});return t&&t.polyLines.forEach((n,o)=>{let i=this.colorMap[n.connectionName]??"purple",r=[n.start,...n.mPoints,n.end];for(let s=0;s<r.length-1;s++){let a=r[s],c=r[s+1],l=a.z2,d=l===0,u=d?i:Cr(i,0.5);e.lines.push({points:[a,c],strokeColor:u,strokeWidth:this.traceWidth,strokeDash:d?void 0:[0.15,0.15],label:`${n.connectionName} segment (z=${l})`})}r.forEach((s,a)=>{let c=s.z1!==s.z2,l=s.z1,d=a>0&&a<r.length-1,u="",h="";if(d){let A=a-1,m=t.forces?.[o]?.[A];if(m&&m.size>0){let p={fx:0,fy:0};m.forEach((g,_)=>{if(p.fx+=g.fx,p.fy+=g.fy,Math.abs(g.fx)>0.000001||Math.abs(g.fy)>0.000001){let f=_.split(":"),y=f[0],x=parseInt(f[1],10),C=t.polyLines[x],I=this.colorMap[C.connectionName]??"gray",P={x:s.x+g.fx*20,y:s.y+g.fy*20},E=C.connectionName;if(y==="via")E+=` Via ${parseInt(f[2],10)}`;else if(y==="seg")E+=` Seg ${parseInt(f[2],10)}-${parseInt(f[3],10)}`;e.lines.push({points:[s,P],strokeColor:I,strokeWidth:0.02,strokeDash:"2,2",label:`Force by ${E} on ${n.connectionName} mPoint ${A}`})}}),(Math.abs(p.fx)>0.000001||Math.abs(p.fy)>0.000001)&&(h=`
Net Force: (${p.fx.toFixed(3)}, ${p.fy.toFixed(3)})`)}}if(c)u=`Via (${n.connectionName} z=${s.z1} -> z=${s.z2})${h}`,e.circles.push({center:s,radius:this.viaDiameter/2,fill:Cr(i,0.5),label:u});else if(d){let A=l===0?i:Cr(i,0.5);u=`mPoint (${n.connectionName} z=${l})${h}`,e.circles.push({center:s,radius:this.cellSize/8,fill:A,label:u})}})}),e}_setSolvedRoutes(){if(!this.solved||!this.lastCandidate)return[];let e=[];for(let t of this.lastCandidate.polyLines){let n=[],o=[],i=[t.start,...t.mPoints,t.end];for(let r=0;r<i.length;r++){let s=i[r];n.push({x:s.x,y:s.y,z:s.z1}),s.z1!==s.z2&&(o.push({x:s.x,y:s.y}),n.push({x:s.x,y:s.y,z:s.z2}))}e.push({connectionName:t.connectionName,regionId:this.nodeWithPortPoints.capacityMeshNodeId,traceThickness:this.traceWidth,viaDiameter:this.viaDiameter,route:n,vias:o})}this.solvedRoutes=e}},Xke=class extends u9t{forceWorkspace={netForces:[],geometry:[]};prepareForceWorkspace(e){let{netForces:t,geometry:n}=this.forceWorkspace;t.length=e.length,n.length=e.length;for(let o=0;o<e.length;o++){let i=e[o],r=t[o];r||(r=[],t[o]=r),r.length=i.mPoints.length;for(let u=0;u<r.length;u++){let h=r[u];h?(h.fx=0,h.fy=0):r[u]={fx:0,fy:0}}let s=n[o];s||(s={segments:[],vias:[]},n[o]=s);let{segments:a,vias:c}=s,l=i.mPoints.length+1;a.length=l;let d=0;for(let u=0;u<=l;u++){let h=u===0?i.start:u===l?i.end:i.mPoints[u-1];if(u<l){let A=u+1===l?i.end:i.mPoints[u],m=A.x-h.x,p=A.y-h.y,g=a[u];g?(g.p1=h,g.p2=A,g.deltaX=m,g.deltaY=p,g.lengthSquared=m*m+p*p,g.layer=h.z2,g.p1Idx=u,g.p2Idx=u+1,g.p1Force=r[u-1],g.p2Force=r[u],g.lastTargetLine=-1,g.lastEndpointIndex=-1,g.lastFx=0,g.lastFy=0,g.lastForceActive=!1):(g={p1:h,p2:A,deltaX:m,deltaY:p,lengthSquared:m*m+p*p,layer:h.z2,p1Idx:u,p2Idx:u+1,p1Force:r[u-1],p2Force:r[u],lastTargetLine:-1,lastEndpointIndex:-1,lastFx:0,lastFy:0,lastForceActive:!1},a[u]=g)}if(h.z1!==h.z2){let A=c[d];A?(A.point=h,A.layers[0]=h.z1,A.layers[1]=h.z2,A.index=u,A.force=r[u-1]):(A={point:h,layers:[h.z1,h.z2],index:u,force:r[u-1]},c[d]=A),d++}}c.length=d}return this.forceWorkspace}getSolverName(){return"MultiHeadPolyLineIntraNodeSolver2"}computeG(e,t){return t.g+0.000005+0.000005*t.viaCount*100}computeH(e){let{minGaps:t}=e,n=0;for(let o of t)o<0&&(n+=this.obstacleMargin),o<this.obstacleMargin&&(n+=this.obstacleMargin-o);return 0.011*n}_step(){if(this.phase==="setup")return this.setupInitialPolyLines(),void(this.phase="solving");let e=this.candidates.shift();if(!e){if(this.tryFinalAcceptance(),this.solved)return;return void(this.failed=!0)}if(this.lastCandidate=e,this.checkIfSolved(e))return this.solved=!0,void this._setSolvedRoutes();let t=!1,n=0,o=e.magForceApplied===void 0?1:10;for(let i=0;i<o;i++){let r=this.applyForcesToPolyLines(e.polyLines);if(n+=r.magForceApplied,t=r.lastStepMoved,!r.lastStepMoved)break}if(e.magForceApplied=n,e.minGaps=this.computeMinGapBtwPolyLines(e.polyLines),this.checkIfSolved(e))return this.solved=!0,void this._setSolvedRoutes();e.g=this.computeG(e.polyLines,e),e.h=this.computeH(e),e.f=e.g+e.h,t&&this.insertCandidate(e)}applyForcesToPolyLines(e){let t=0,n=e.length,o=0.02,i=0.008,r=0.000001,{netForces:s,geometry:a}=this.prepareForceWorkspace(e),c=(d,u,h,A,m)=>{let p,g;if(h.lastTargetLine===A&&h.lastEndpointIndex===u){if(!h.lastForceActive)return;p=h.lastFx,g=h.lastFy}else{let _=h.p1.x,f=h.p1.y;if(h.lengthSquared!==0){let P=Math.max(0,Math.min(1,((d.x-h.p1.x)*h.deltaX+(d.y-h.p1.y)*h.deltaY)/h.lengthSquared));_+=P*h.deltaX,f+=P*h.deltaY}let y=d.x-_,x=d.y-f,C=y*y+x*x;if(h.lastTargetLine=A,h.lastEndpointIndex=u,C<=r)return void(h.lastForceActive=!1);let I=Math.sqrt(C),b=0.02*Math.exp(-6*I);p=y/I*b,g=x/I*b,h.lastFx=p,h.lastFy=g,h.lastForceActive=!0}m&&(m.fx+=p,m.fy+=g),h.p1Force&&(h.p1Force.fx+=-p/2,h.p1Force.fy+=-g/2),h.p2Force&&(h.p2Force.fx+=-p/2,h.p2Force.fy+=-g/2)};for(let d=0;d<n;d++)for(let u=d+1;u<n;u++){let{segments:h,vias:A}=a[d],{segments:m,vias:p}=a[u];for(let g of h)for(let _ of m)g.layer===_.layer&&(c(g.p1,g.p1Idx,_,d,g.p1Force),c(g.p2,g.p2Idx,_,d,g.p2Force),c(_.p1,_.p1Idx,g,u,_.p1Force),c(_.p2,_.p2Idx,g,u,_.p2Force));for(let g of A)for(let _ of m)if(g.layers.includes(_.layer)){let f=im(g.point,_.p1,_.p2),y=g.point.x-f.x,x=g.point.y-f.y,C=y*y+x*x;if(C>r){let I=Math.sqrt(C),b=2,P=I;I<this.viaDiameter/2?(b*=4,P=Math.max(r,I)):P=Math.max(r,I-this.viaDiameter/2);let E=b*o*Math.exp(-6*P),B=y/I*E,w=x/I*E;g.force&&(g.force.fx+=B,g.force.fy+=w),_.p1Force&&(_.p1Force.fx+=-B/2,_.p1Force.fy+=-w/2),_.p2Force&&(_.p2Force.fx+=-B/2,_.p2Force.fy+=-w/2)}}for(let g of p)for(let _ of h)if(g.layers.includes(_.layer)){let f=im(g.point,_.p1,_.p2),y=g.point.x-f.x,x=g.point.y-f.y,C=y*y+x*x;if(C>r){let I=Math.sqrt(C),b=2,P=I;I<this.viaDiameter/2?(b*=4,P=Math.max(r,I)):P=Math.max(r,I-this.viaDiameter/2);let E=b*o*Math.exp(-6*P),B=y/I*E,w=x/I*E;g.force&&(g.force.fx+=B,g.force.fy+=w),_.p1Force&&(_.p1Force.fx+=-B/2,_.p1Force.fy+=-w/2),_.p2Force&&(_.p2Force.fx+=-B/2,_.p2Force.fy+=-w/2)}}for(let g of A)for(let _ of p)if(g.layers.filter((f)=>_.layers.includes(f)).length>0){let f=g.point.x-_.point.x,y=g.point.y-_.point.y,x=f*f+y*y;if(x>r){let C=Math.sqrt(x),I=2,b=C;C<this.viaDiameter?(I*=4,b=Math.max(r,C)):b=Math.max(r,C-this.viaDiameter);let P=I*o*Math.exp(-6*b),E=f/C*P,B=y/C*P;g.force&&(g.force.fx+=E,g.force.fy+=B),_.force&&(_.force.fx+=-E,_.force.fy+=-B)}}}for(let d=0;d<n;d++){let{vias:u}=a[d];if(!(u.length<2))for(let h=0;h<u.length;h++)for(let A=h+1;A<u.length;A++){let m=u[h],p=u[A],g=m.point.x-p.point.x,_=m.point.y-p.point.y,f=g*g+_*_;if(f>r){let y=Math.sqrt(f),x=2,C=y;y<this.viaDiameter?(x*=4,C=Math.max(r,y)):C=Math.max(r,y-this.viaDiameter);let I=x*o*Math.exp(-6*C),b=g/y*I,P=_/y*I;m.force&&(m.force.fx+=b,m.force.fy+=P),p.force&&(p.force.fx+=-b,p.force.fy+=-P)}}}let l=!1;for(let d=0;d<n;d++)for(let u=0;u<e[d].mPoints.length;u++){let h=e[d].mPoints[u],A=s[d][u],m=h.z1!==h.z2,{fx:p,fy:g}=A,_=h.x+p,f=h.y+g;if(m){let y=this.viaDiameter/2,x=0,C=0,I=this.viaDiameter/2+this.BOUNDARY_PADDING,b=this.bounds.minX+I,P=this.bounds.maxX-I,E=this.bounds.minY+I,B=this.bounds.maxY-I,w=b+y-h.x,T=h.x-(P-y),Q=E+y-h.y,N=h.y-(B-y);w>0?x=i*(Math.exp(w/(2*this.obstacleMargin))-1):T>0&&(x=-0.008*(Math.exp(T/(2*this.obstacleMargin))-1)),Q>0?C=i*(Math.exp(Q/(2*this.obstacleMargin))-1):N>0&&(C=-0.008*(Math.exp(N/(2*this.obstacleMargin))-1)),p+=x,g+=C,_=h.x+p,f=h.y+g}else{let y=this.traceWidth/2+this.BOUNDARY_PADDING;_=Math.max(this.bounds.minX+y,Math.min(this.bounds.maxX-y,_)),f=Math.max(this.bounds.minY+y,Math.min(this.bounds.maxY-y,f))}if(Math.abs(p)<r&&Math.abs(g)<r)continue;t+=Math.sqrt(p*p+g*g),(Math.abs(h.x-_)>r||Math.abs(h.y-f)>r)&&(h.x=_,h.y=f,l=!0)}return{lastStepMoved:l,magForceApplied:t}}},vPt=(e)=>e.flatMap((t)=>`${t.connectionName}-${t.mPoints.map((n)=>`${n.x.toFixed(2)},${n.y.toFixed(2)},${n.z1},${n.z2}`)}`).sort().join("|"),h9t=class extends Xke{getSolverName(){return"MultiHeadPolyLineIntraNodeSolver3"}constructor(e){super(e),this.MAX_ITERATIONS=1000}createInitialCandidateFromSeed(e,t){let n=new h7o({nodeWithPortPoints:this.nodeWithPortPoints,colorMap:this.colorMap,hyperParameters:{SHUFFLE_SEED:e},viaDiameter:this.viaDiameter});if(n.solve(),n.failed||!n.solved)return this.failed=!0,this.error=`ViaPossibilitiesSolver2 failed with: ${n.error}`,null;let o=[],i=0;for(let[c,l]of n.completedPaths.entries()){if(l.length<2){console.warn(`Skipping connection "${c}" due to insufficient points (${l.length}) in ViaPossibilitiesSolver2 path.`);continue}let d=l[0],u=l[l.length-1],h=l.slice(1,-1),A=[],m=0,p=d.z;for(let f=0;f<h.length;f++){let y=h[f],x=f+1<h.length?h[f+1]:u,C=p,I=f+1<h.length&&y.x===x.x&&y.y===x.y&&y.z!==x.z?x.z:y.z;A.push({x:y.x,y:y.y,z1:C,z2:I}),C!==I?(m++,f++,p=I):p=y.z}i+=m;let g=this.SEGMENTS_PER_POLYLINE,_=A.length+1;for(;_<g;){let f=-1,y=-1,x=null,C=null,I=[{...d,z1:d.z,z2:d.z,connectionName:c},...A,{...u,z1:u.z,z2:u.z,connectionName:c}];for(let w=0;w<I.length-1;w++){let T=I[w],Q=I[w+1];if(T.x===Q.x&&T.y===Q.y)continue;let N=bn(T,Q);N>f&&(f=N,y=w,x=T,C=Q)}if(y===-1||!x||!C){console.warn(`Could not find longest segment for ${c} while trying to reach ${g} segments.`);break}let b=(x.x+C.x)/2,P=(x.y+C.y)/2,E=x.z2,B={x:b,y:P,z1:E,z2:E};A.splice(y,0,B),_++}o.push({connectionName:c,start:{...d,z1:d.z,z2:d.z},end:{...u,z1:u.z,z2:u.z},mPoints:A})}if(o.length===0)return this.failed=!0,this.error="No valid polylines generated from ViaPossibilitiesSolver2.",console.error(this.error),null;if(t?.has(vPt(o)))return null;let r=this.computeMinGapBtwPolyLines(o),s=this.computeH({minGaps:r,forces:[]}),a={polyLines:o,g:0,h:s,f:0+s,viaCount:i,minGaps:r};return a.g=this.computeG(o,a),a.f=a.g+a.h,a}setupInitialPolyLines(){this.candidates=[];let e=Math.min(2000,function(o){if(!Number.isInteger(o)||o<0)throw RangeError("n must be a non-negative integer");let i=1;for(let r=2;r<=o;r++)i*=r;return i}(this.uniqueConnections)),t=new Set,n=this.createInitialCandidateFromSeed===I7o&&this.computeMinGapBtwPolyLines===b7o&&this.computeH===S7o&&this.computeG===P7o;for(let o=0;o<e;o++){let i=n?this.createInitialCandidateFromSeed(o,t):this.createInitialCandidateFromSeed(o);if(!i)continue;let r=vPt(i.polyLines);t.has(r)||(t.add(r),this.candidates.push(i))}this.candidates.sort((o,i)=>o.f-i.f)}},I7o=h9t.prototype.createInitialCandidateFromSeed,b7o=u9t.prototype.computeMinGapBtwPolyLines,S7o=Xke.prototype.computeH,P7o=Xke.prototype.computeG,EPt=(e)=>e.portPointId??`${e.connectionName}:${e.x}:${e.y}:${e.z}`,QRe=(e,t)=>{let[n,o]=e;if(n===o)return!1;let i=((r)=>{let[s,a]=r,c=EPt(s),l=EPt(a);return c<l?`${c}|${l}`:`${l}|${c}`})(e);return!t.seenPairKeys.has(i)&&(t.seenPairKeys.add(i),t.pairs.push(e),!0)},MPt=(e,t)=>{for(let n=0;n<e.length-1;n++)QRe([e[n],e[n+1]],t)},qee=(e)=>{let t=[],n=new Set,o=new Map(e.filter((a)=>typeof a.portPointId=="string").map((a)=>[a.portPointId,a])),i={pairs:t,seenPairKeys:n};for(let a of e){if(a.prevPortPointId){let c=o.get(a.prevPortPointId);c&&c.connectionName===a.connectionName&&QRe([c,a],i)}if(a.nextPortPointId){let c=o.get(a.nextPortPointId);c&&c.connectionName===a.connectionName&&QRe([a,c],i)}}if(t.length===0)return MPt(e,i),t;let r=new Set(t.flatMap(([a,c])=>[a.portPointId,c.portPointId]).filter(Boolean)),s=e.filter((a)=>!a.portPointId||!r.has(a.portPointId));return MPt(s,i),t},PE=0.000001,BPt=0.02,DZ=(e)=>`${e.x.toFixed(6)},${e.y.toFixed(6)}`,vk=(e,t)=>Math.abs(e.x-t.x)<PE&&Math.abs(e.y-t.y)<PE,wPt=(e)=>({minX:e.center.x-e.width/2,maxX:e.center.x+e.width/2,minY:e.center.y-e.height/2,maxY:e.center.y+e.height/2}),v7o=(e,t)=>e.x>=t.minX-PE&&e.x<=t.maxX+PE&&e.y>=t.minY-PE&&e.y<=t.maxY+PE,E7o=(e,t,n)=>{for(let o of n)if(!vk(o,e)&&!vk(o,t)&&Da(o,e,t)<0.0001)return!0;return!1},M7o=(e,t,n)=>{for(let o of n)if(!(vk(e,o.A)||vk(e,o.B)||vk(t,o.A)||vk(t,o.B))&&fu(e,t,o.A,o.B))return!0;return!1},B7o=(e,t)=>{let n=[];for(let o of e){let i=o.rootConnectionName??o.connectionName;if(i!==t)for(let r=0;r<o.route.length-1;r++){let s=o.route[r],a=o.route[r+1];s.z===a.z&&n.push({A:{x:s.x,y:s.y},B:{x:a.x,y:a.y},rootConnectionName:i})}}return n},w7o=(e,t)=>e.portPoints.filter((n)=>(n.rootConnectionName??n.connectionName)!==t).map((n)=>({x:n.x,y:n.y}));function*m9t(e,t=e.length){if(t<=1)yield e.slice();else for(let n=0;n<t;n++)[e[n],e[t-1]]=[e[t-1],e[n]],yield*m9t(e,t-1),[e[n],e[t-1]]=[e[t-1],e[n]]}var T7o=({A:e,B:t,bounds:n,obstacleSegments:o,foreignPorts:i})=>{let r=[{x:e.x,y:e.y},{x:t.x,y:t.y},{x:(n.minX+n.maxX)/2,y:(n.minY+n.maxY)/2},{x:n.minX,y:n.minY},{x:n.maxX,y:n.minY},{x:n.maxX,y:n.maxY},{x:n.minX,y:n.maxY}],s=[...o.flatMap((g)=>[g.A,g.B]),...i,{x:e.x,y:e.y},{x:t.x,y:t.y}];for(let g of s)for(let _ of[-0.02,0,BPt])for(let f of[-0.02,0,BPt]){let y={x:g.x+_,y:g.y+f};v7o(y,n)&&r.push(y)}let a=((g)=>{let _=new Set,f=[];for(let y of g){let x=DZ(y);_.has(x)||(_.add(x),f.push(y))}return f})(r),c=DZ(e),l=DZ(t),d=new Map(a.map((g)=>[DZ(g),g])),u=new Map,h=new Map,A=new Set;for(let g of a){let _=DZ(g);u.set(_,_===c?0:1/0),h.set(_,null),A.add(_)}for(;A.size>0;){let g=null,_=1/0;for(let y of A){let x=u.get(y)??1/0;(x<_-PE||Math.abs(x-_)<=PE&&(g===null||y<g))&&(_=x,g=y)}if(!g||_===1/0)break;if(A.delete(g),g===l)break;let f=d.get(g);for(let y of A){let x=d.get(y);if(vk(f,x))continue;if(M7o(f,x,o))continue;if(E7o(f,x,i))continue;let C=_+bn(f,x),I=u.get(y)??1/0,b=h.get(y);(C<I-PE||Math.abs(C-I)<=PE&&(b==null||g<b))&&(u.set(y,C),h.set(y,g))}}if((u.get(l)??1/0)===1/0)return null;let m=[],p=l;for(;p;)m.push(d.get(p)),p=h.get(p)??null;return m.reverse(),m.map((g)=>({x:g.x,y:g.y,z:e.z}))},TPt=class extends Oi{getSolverName(){return"SingleLayerNoDifferentRootIntersectionsIntraNodeSolver"}nodeWithPortPoints;traceWidth;viaDiameter;solvedRoutes=[];constructor(e){super(),this.nodeWithPortPoints=e.nodeWithPortPoints,this.traceWidth=e.traceWidth??0.15,this.viaDiameter=e.viaDiameter??0.3,this.MAX_ITERATIONS=1}static isApplicable(e){if(((i)=>i.availableZ?.length?[...new Set(i.availableZ)].sort((r,s)=>r-s):[...new Set(i.portPoints.map((r)=>r.z??0))].sort((r,s)=>r-s))(e).length!==1)return!1;if(e.portPoints.length>12)return!1;let n=wPt(e);if(e.portPoints.some((i)=>((r,s)=>Math.abs(r.y-s.minY)<0.001?"top":Math.abs(r.x-s.maxX)<0.001?"right":Math.abs(r.y-s.maxY)<0.001?"bottom":Math.abs(r.x-s.minX)<0.001?"left":null)(i,n)===null))return!1;let o=new Map;for(let i of e.portPoints)o.set(i.connectionName,(o.get(i.connectionName)??0)+1);return[...o.values()].some((i)=>i>2)}buildTaskGroups(){let e=new Map;for(let t of this.nodeWithPortPoints.portPoints){let n=e.get(t.connectionName)??[];n.push(t),e.set(t.connectionName,n)}return e}trySolveNode(){let e=wPt(this.nodeWithPortPoints),t=this.buildTaskGroups(),n=Array.from(t.entries()).flatMap(([i,r])=>qee(r).map(([s,a])=>({connectionName:i,rootConnectionName:s.rootConnectionName??a.rootConnectionName??i,A:s,B:a}))),o=n.length<=6?m9t(n.slice()):[n];for(let i of o){let r=[],s=!1;for(let a of i){let c=B7o(r,a.rootConnectionName),l=w7o(this.nodeWithPortPoints,a.rootConnectionName),d=T7o({A:a.A,B:a.B,bounds:e,obstacleSegments:c,foreignPorts:l});if(!d||d.length<2){s=!0;break}r.push({connectionName:a.connectionName,rootConnectionName:a.rootConnectionName,regionId:this.nodeWithPortPoints.capacityMeshNodeId,traceThickness:this.traceWidth,viaDiameter:this.viaDiameter,route:d,vias:[]})}if(!s)return r}return null}_step(){let e=this.trySolveNode();if(!e)return this.failed=!0,void(this.error="Failed to find a single-layer route set without different-root intersections");this.solvedRoutes=e,this.stats={routeCount:e.length,distinctRoots:new Set(e.map((t)=>t.rootConnectionName??t.connectionName)).size},this.solved=!0}visualize(){return{lines:this.solvedRoutes.map((e)=>({points:e.route,strokeColor:"cyan",strokeWidth:e.traceThickness,label:`${e.connectionName}
root: ${e.rootConnectionName??e.connectionName}`})),points:this.nodeWithPortPoints.portPoints.map((e)=>({x:e.x,y:e.y,color:"blue",label:`${e.connectionName}
root: ${e.rootConnectionName??e.connectionName}`})),rects:[],circles:[]}}},DPt=(e)=>e.min<=e.max?L_(e.value,e.min,e.max):e.value,D7o=class extends Oi{getSolverName(){return"SingleTransitionIntraNodeSolver"}nodeWithPortPoints;routes;viaDiameter;traceThickness;obstacleMargin;solvedRoutes=[];bounds;constructor(e){if(super(),this.nodeWithPortPoints=e.nodeWithPortPoints,this.viaDiameter=e?.viaDiameter??0.3,this.traceThickness=e?.traceThickness??0.15,this.obstacleMargin=e?.obstacleMargin??0.1,this.routes=this.extractRoutesFromNode(),this.bounds=this.calculateBounds(),this.routes.length!==1)return this.failed=!0,void(this.error=`Expected 1 route, but got ${this.routes.length}`);let t=this.routes[0];if(t.A.z===void 0||t.B.z===void 0)return this.failed=!0,void(this.error="Route points should have predefined z values");if(t.A.z===t.B.z)return this.failed=!0,void(this.error="Only one route provided, but it has no transition");let n=this.viaDiameter/2+this.obstacleMargin,o={x:DPt({value:(t.A.x+t.B.x)/2,min:this.bounds.minX+n,max:this.bounds.maxX-n}),y:DPt({value:(t.A.y+t.B.y)/2,min:this.bounds.minY+n,max:this.bounds.maxY-n})};this.solvedRoutes.push(this.createTransitionRoute({start:t.A,end:t.B,via:o,connectionName:t.connectionName})),this.solved=!0}extractRoutesFromNode(){let e=[],t=this.nodeWithPortPoints.portPoints,n=new Map;for(let o of t){let{connectionName:i}=o;n.has(i)||n.set(i,[]),n.get(i).push(o)}for(let[o,i]of n.entries())for(let[r,s]of qee(i))e.push({A:{...r},B:{...s},connectionName:o});return e}calculateBounds(){return{minX:this.nodeWithPortPoints.center.x-this.nodeWithPortPoints.width/2,maxX:this.nodeWithPortPoints.center.x+this.nodeWithPortPoints.width/2,minY:this.nodeWithPortPoints.center.y-this.nodeWithPortPoints.height/2,maxY:this.nodeWithPortPoints.center.y+this.nodeWithPortPoints.height/2}}createTransitionRoute(e){let{start:t,end:n,via:o,connectionName:i}=e,r=[{x:t.x,y:t.y,z:t.z},{x:o.x,y:o.y,z:t.z},{x:o.x,y:o.y,z:n.z},{x:n.x,y:n.y,z:n.z}];return{connectionName:i,regionId:this.nodeWithPortPoints.capacityMeshNodeId,route:r,traceThickness:this.traceThickness,viaDiameter:this.viaDiameter,vias:[o]}}_step(){this.solved=!0}visualize(){let e={lines:[],points:[],rects:[],circles:[]};if(e.rects.push({center:{x:(this.bounds.minX+this.bounds.maxX)/2,y:(this.bounds.minY+this.bounds.maxY)/2},width:this.bounds.maxX-this.bounds.minX,height:this.bounds.maxY-this.bounds.minY,stroke:"rgba(0, 0, 0, 0.5)",fill:"rgba(240, 240, 240, 0.1)",label:"PCB Bounds"}),this.routes.length>0)for(let t of this.routes)e.points.push({x:t.A.x,y:t.A.y,label:`${t.connectionName} start (z=${t.A.z})`,color:"orange"}),e.points.push({x:t.B.x,y:t.B.y,label:`${t.connectionName} end (z=${t.B.z})`,color:"orange"}),e.lines.push({points:[t.A,t.B],strokeColor:"rgba(255, 0, 0, 0.5)",label:`${t.connectionName} direct`});for(let t=0;t<this.solvedRoutes.length;t++){let n=this.solvedRoutes[t];for(let i=0;i<n.route.length-1;i++){let r=n.route[i],s=n.route[i+1];e.lines.push({points:[r,s],strokeColor:"rgba(0, 255, 0, 0.75)",strokeDash:r.z!==n.route[0].z?[0.2,0.2]:void 0,strokeWidth:n.traceThickness,label:`${n.connectionName} z=${r.z}`})}for(let i of n.vias)e.circles.push({center:i,radius:this.viaDiameter/2,fill:"rgba(0, 0, 255, 0.8)",stroke:"black",label:"Solved Via"}),e.circles.push({center:i,radius:this.viaDiameter/2+this.obstacleMargin,fill:"rgba(0, 0, 255, 0.3)",stroke:"black",label:"Via Margin"})}return e}},SU=(e,t=2)=>{let n=Array.from({length:t},(o,i)=>i);return e.map((o)=>{let i=Lte(o.__zLayers??(o.layers?Fte(o.layers,t):void 0)??n,t);return{...o,__zLayers:i.length>0?i:n}})},NPt=0.000001,RPt=(e)=>{let{point:t,obstacle:n}=e,o=n.width/2+NPt,i=n.height/2+NPt;return Math.abs(t.x-n.center.x)<=o&&Math.abs(t.y-n.center.y)<=i},N7o=class e extends Oi{getSolverName(){return"SingleTransitionThroughObstacleIntraNodeSolver"}nodeWithPortPoints;routes;obstacles;viaDiameter;traceThickness;connMap;solvedRoutes=[];constructor(t){if(super(),this.nodeWithPortPoints=t.nodeWithPortPoints,this.obstacles=SU(t.obstacles??[],t.layerCount??2),this.connMap=t.connMap,this.viaDiameter=t.viaDiameter??0.3,this.traceThickness=t.traceThickness??0.15,this.routes=this.extractRoutesFromNode(),this.routes.length===0)return this.failed=!0,void(this.error="Expected at least 1 route");if(this.routes.some((o)=>o.A.z===void 0||o.B.z===void 0))return this.failed=!0,void(this.error="Route points should have predefined z values");if(!this.routes.some((o)=>o.A.z!==o.B.z))return this.failed=!0,void(this.error="No route transitions through an obstacle");let n=this.routes.map((o)=>this.getContainingThroughObstacle(o));if(n.some((o)=>!o))return this.failed=!0,void(this.error="No same-net multilayer obstacle contains every route");this.solvedRoutes.push(...this.routes.map((o,i)=>({connectionName:o.connectionName,rootConnectionName:o.rootConnectionName,regionId:this.nodeWithPortPoints.capacityMeshNodeId,route:[{x:o.A.x,y:o.A.y,z:o.A.z,...o.A.z!==o.B.z?{toNextSegmentType:"through_obstacle",...n[i].circuitJsonMetadata?{toNextSegmentCircuitJsonMetadata:n[i].circuitJsonMetadata}:{}}:{}},{x:o.B.x,y:o.B.y,z:o.B.z}],traceThickness:this.traceThickness,viaDiameter:this.viaDiameter,vias:[]}))),this.solved=!0}static isApplicable(t){return new e(t).solved}extractRoutesFromNode(){let t=[],n=new Map;for(let o of this.nodeWithPortPoints.portPoints){let{connectionName:i}=o;n.has(i)||n.set(i,[]),n.get(i).push(o)}for(let[o,i]of n.entries())for(let[r,s]of qee(i))t.push({A:{...r},B:{...s},connectionName:o,rootConnectionName:r.rootConnectionName??s.rootConnectionName});return t}getContainingThroughObstacle(t){let n=t.A.z,o=t.B.z;return n===void 0||o===void 0?null:this.obstacles.find((i)=>{return!(i.__zLayers.length<2)&&(!(!i.__zLayers.includes(n)||!i.__zLayers.includes(o))&&(!!(r={obstacle:i,connectionName:t.connectionName,connMap:this.connMap}).obstacle.connectedTo.some((s)=>s===r.connectionName||(r.connMap?.areIdsConnected(r.connectionName,s)??!1))&&(RPt({point:t.A,obstacle:i})&&RPt({point:t.B,obstacle:i}))));var r})??null}_step(){this.solved=!0}visualize(){let t={lines:[],points:[],rects:[],circles:[]};for(let n of this.obstacles)t.rects.push({center:n.center,width:n.width,height:n.height,fill:"rgba(128, 0, 128, 0.2)",stroke:"rgba(128, 0, 128, 0.6)",label:`through obstacle candidate
z: ${n.__zLayers.join(",")}`});for(let n of this.solvedRoutes){t.lines.push({points:n.route,strokeColor:"rgba(0, 180, 0, 0.8)",strokeDash:"4, 3",strokeWidth:n.traceThickness,label:`${n.connectionName} through_obstacle`});for(let o of n.route)t.points.push({x:o.x,y:o.y,color:"green",label:`${n.connectionName}
z: ${o.z}`})}return t}},II=0.000001,QPt=({value:e,min:t,max:n})=>e>=t&&e<=n,oAe=({value:e,target:t,epsilon:n})=>Math.abs(e-t)<=n,p9t=({point:e,bounds:t,epsilon:n=0.000001})=>{if(![e.x,e.y,t.minX,t.maxX,t.minY,t.maxY].every((u)=>(({value:h})=>Number.isFinite(h))({value:u})))return"outside";if(e.x<t.minX-n||e.x>t.maxX+n||e.y<t.minY-n||e.y>t.maxY+n)return"outside";let o=oAe({value:e.x,target:t.minX,epsilon:n}),i=oAe({value:e.x,target:t.maxX,epsilon:n}),r=oAe({value:e.y,target:t.minY,epsilon:n}),s=oAe({value:e.y,target:t.maxY,epsilon:n}),a=o||i,c=r||s;if(a&&c)return"on-boundary";let l=QPt({value:e.y,min:t.minY,max:t.maxY}),d=QPt({value:e.x,min:t.minX,max:t.maxX});return a&&l||c&&d?"on-boundary":"inside"};function R7o(e,t,n,o,i){let r={x:(e.x+t.x+n.x)/3,y:(e.y+t.y+n.y)/3},s=(f,y)=>Math.sqrt((y.x-f.x)**2+(y.y-f.y)**2),a=(f)=>{let y=s(f,e),x=s(f,t),C=s(f,n),I=f.x>=i.minX&&f.x<=i.maxX&&f.y>=i.minY&&f.y<=i.maxY;return y>=o&&x>=o&&C>=o&&I};if(a(r))return r;let c=(f,y,x)=>{let C=f.x-y.x,I=f.y-y.y,b=Math.sqrt(C*C+I*I);return b<0.0000000001?{x:y.x+x,y:y.y}:{x:y.x+C/b*x,y:y.y+I/b*x}},l=(f,y,x)=>{let C=y.x-f.x,I=y.y-f.y,b=Math.sqrt(C*C+I*I);if(b>2*x-0.0000000001||b<0.0000000001)return[];let P=b*b/(2*b),E=Math.sqrt(Math.max(0,x*x-P*P)),B=f.x+C*P/b,w=f.y+I*P/b,T={x:B+E*I/b,y:w-E*C/b},Q={x:B-E*I/b,y:w+E*C/b},N=[],F=0.000001;return Math.abs(s(T,f)-x)<F&&Math.abs(s(T,y)-x)<F&&N.push(T),Math.abs(s(Q,f)-x)<F&&Math.abs(s(Q,y)-x)<F&&N.push(Q),N},d=[c(r,e,o),c(r,t,o),c(r,n,o),...l(e,t,o),...l(t,n,o),...l(n,e,o)],u=d.filter(a);if(u.length>0){let f=u.filter((y)=>!((x)=>Math.abs(x.x-i.minX)<0.000001||Math.abs(x.x-i.maxX)<0.000001||Math.abs(x.y-i.minY)<0.000001||Math.abs(x.y-i.maxY)<0.000001)(y));if(f.length>0)return f.sort((y,x)=>s(y,r)-s(x,r)),f[0]}let h=null,A=1/0;for(let f=i.minX+1;f<i.maxX;f+=5)for(let y=i.minY+1;y<i.maxY;y+=5){let x={x:f,y};if(a(x)){let C=s(x,r);C<A&&(A=C,h=x)}}if(h!==null)return h;let m=[];for(let f=0;f<=100;f++){let y=f/100;m.push({x:i.minX+y*(i.maxX-i.minX),y:i.minY}),m.push({x:i.maxX,y:i.minY+y*(i.maxY-i.minY)}),m.push({x:i.maxX-y*(i.maxX-i.minX),y:i.maxY}),m.push({x:i.minX,y:i.maxY-y*(i.maxY-i.minY)})}let p=m.filter(a);if(p.length>0)return p.sort((f,y)=>s(f,r)-s(y,r)),p[0];let g=1/0,_={x:i.minX,y:i.minY};for(let f of[...d,...m])if(f.x>=i.minX&&f.x<=i.maxX&&f.y>=i.minY&&f.y<=i.maxY){let y=Math.max(0,o-s(f,e))+Math.max(0,o-s(f,t))+Math.max(0,o-s(f,n));y<g&&(g=y,_=f)}return _}function ik(e,t,n){let o=kPt(t,e,n.center,n.radius),i=kPt(e,t,n.center,n.radius),r=m8(o,t),s=m8(e,i),c;if(r>0.000001&&s>0.000001){c={x:(o.x+i.x)/2,y:(o.y+i.y)/2};let l=m8(o,c),d=m8(i,c);if(Math.abs(l-d)>0.5*Math.min(l,d)){let h=m8(e,o),A=m8(t,i),m=h+A;if(m>0.000001){let p=A/m,g=h/m;c={x:o.x*p+i.x*g,y:o.y*p+i.y*g}}}let u=m8(c,n.center);if(u<1.05*n.radius){let h={x:(c.x-n.center.x)/u,y:(c.y-n.center.y)/u};c={x:n.center.x+h.x*n.radius*1.2,y:n.center.y+h.y*n.radius*1.2}}}else{let l={x:(e.x+t.x)/2,y:(e.y+t.y)/2},d=m8(l,n.center);if(d<1.1*n.radius){let u={x:(l.x-n.center.x)/d,y:(l.y-n.center.y)/d};c={x:n.center.x+u.x*n.radius*1.2,y:n.center.y+u.y*n.radius*1.2}}else c=l}return{B:o,D:i,E:c}}function kPt(e,t,n,o){let i=[n.x-e.x,n.y-e.y],r=Math.sqrt(i[0]*i[0]+i[1]*i[1]);if(r<=o){if(r<0.00000001){let g=[t.x-e.x,t.y-e.y],_=Math.sqrt(g[0]*g[0]+g[1]*g[1]);return _<0.00000001?{x:n.x+o,y:n.y}:{x:n.x+g[0]/_*o,y:n.y+g[1]/_*o}}let p=[i[0]/r,i[1]/r];return{x:n.x-p[0]*o,y:n.y-p[1]*o}}let s=[t.x-e.x,t.y-e.y],a=Math.sqrt(r*r-o*o),c=[i[0]/r,i[1]/r],l=[-c[1],c[0]],d=[c[1],-c[0]],u=s[0]*l[0]+s[1]*l[1]>s[0]*d[0]+s[1]*d[1]?l:d,h=o/r,A=a/r,m=[c[0]*A+u[0]*h,c[1]*A+u[1]*h];return{x:e.x+a*m[0],y:e.y+a*m[1]}}function m8(e,t){let n=t.x-e.x,o=t.y-e.y;return Math.sqrt(n*n+o*o)}var Lg=0.000000001;function LPt(e,t,n,o="cw"){let i=Bee(e,n),r=Bee(t,n);return Math.abs(r-i)<Lg?{left:0,top:0,right:0,bottom:0}:function(s,a,c,l){let d=c.maxX-c.minX,u=c.maxY-c.minY;if(d<Lg&&u<Lg)return{left:0,top:0,right:0,bottom:0};let h=2*(d+u);if(h<Lg)return{left:0,top:0,right:0,bottom:0};let A=d/h*(2*Math.PI),m=(d+u)/h*(2*Math.PI),p=(d+d+u)/h*(2*Math.PI),g=2*Math.PI,_=[{name:"top",start:0,end:A,length:d},{name:"right",start:A,end:m,length:u},{name:"bottom",start:m,end:p,length:d},{name:"left",start:p,end:g,length:u}],f={left:0,top:0,right:0,bottom:0},y=(x,C,I,b,P)=>{let E=C>2*Math.PI-Lg?2*Math.PI:C;if(E<=x+Lg)return 0;if(P){let B=Math.max(x,I),w=Math.min(E,2*Math.PI),T=Math.max(0,w-B),Q=Math.max(x,0),N=Math.min(E,b);return T+Math.max(0,N-Q)}{let B=Math.max(x,I),w=Math.min(E,b);return Math.max(0,w-B)}};for(let x of _){let C=x.end-x.start;if(C<Lg||x.length<Lg)continue;let I=0;if(l==="cw"){let b=s>a+Lg;I=y(x.start,x.end,s,a,b)}else{let b=a>s+Lg;I=y(x.start,x.end,a,s,b)}if(I>Lg){let b=I/C;f[x.name]+=Math.max(0,Number.isFinite(b)?b:0)}}for(let x in f)f[x]=Math.max(0,Math.min(1,f[x]));return f}(i,r,n,o)}function Bee(e,t){let n=t.maxX-t.minX,o=t.maxY-t.minY;if(n<Lg&&o<Lg)return 0;let i=2*(n+o);if(i<Lg)return 0;let r=0;if(Math.abs(e.y-t.maxY)<=II&&e.x>=t.minX-II&&e.x<=t.maxX+II)r=Math.max(0,Math.min(n,e.x-t.minX));else if(Math.abs(e.x-t.maxX)<=II&&e.y>=t.minY-II&&e.y<=t.maxY+II)r=n+Math.max(0,Math.min(o,t.maxY-e.y));else if(Math.abs(e.y-t.minY)<=II&&e.x>=t.minX-II&&e.x<=t.maxX+II)r=n+o+Math.max(0,Math.min(n,t.maxX-e.x));else{if(!(Math.abs(e.x-t.minX)<=II&&e.y>=t.minY-II&&e.y<=t.maxY+II))throw Error(`Point (${e.x}, ${e.y}) does not lie on the boundary defined by ${JSON.stringify(t)}`);r=n+o+n+Math.max(0,Math.min(o,e.y-t.minY))}return r=Math.max(0,Math.min(i,r)),i>Lg?r/i*(2*Math.PI):0}function Q7o(e,t,n,o){return function({angleA:i,angleB:r,angleC:s}){let a=Math.cos(i),c=Math.sin(i),l=Math.cos(r),d=Math.sin(r),u=Math.cos(s);return(l-a)*(Math.sin(s)-c)-(d-c)*(u-a)<0?"ccw":"cw"}({angleA:Bee(e,o),angleB:Bee(t,o),angleC:Bee(n,o)})}var k7o=class extends Oi{getSolverName(){return"SingleTransitionCrossingRouteSolver"}nodeWithPortPoints;routes;viaDiameter;traceThickness;obstacleMargin;layerCount=2;debugViaPositions;solvedRoutes=[];bounds;constructor(e){if(super(),this.nodeWithPortPoints=e.nodeWithPortPoints,this.viaDiameter=e?.viaDiameter??0.3,this.traceThickness=e?.traceThickness??0.15,this.obstacleMargin=e?.obstacleMargin??0.1,this.layerCount=e?.layerCount??2,this.debugViaPositions=[],this.routes=this.extractRoutesFromNode(),this.bounds=this.calculateBounds(),this.routes.length!==2)return this.failed=!0,void(this.error=`Expected 2 routes, but got ${this.routes.length}`);let t=this.routes.flatMap((s)=>[s.A,s.B]).map((s)=>this.getPortPointBoundsPosition(s));if(t.includes("outside"))return this.failed=!0,void(this.error="Invalid route input: SingleTransitionCrossingRouteSolver received port point(s) outside node bounds");if(t.includes("inside"))return void(this.failed=!0);this.routes=this.routes.map((s)=>({...s,A:this.snapPortPointToBounds(s.A),B:this.snapPortPointToBounds(s.B)}));let[n,o]=this.routes,i=n.A.z!==n.B.z,r=o.A.z!==o.B.z;return i&&r||!i&&!r?(this.failed=!0,void(this.error="Exactly one route must have a layer transition")):void 0}extractRoutesFromNode(){let e=[],t=this.nodeWithPortPoints.portPoints,n=new Map;for(let o of t){let{connectionName:i}=o;n.has(i)||n.set(i,[]),n.get(i)?.push(o)}for(let[o,i]of n.entries())i.length===2&&e.push({A:{...i[0],z:i[0].z??0},B:{...i[1],z:i[1].z??0},connectionName:o});return e}calculateBounds(){return{minX:this.nodeWithPortPoints.center.x-this.nodeWithPortPoints.width/2,maxX:this.nodeWithPortPoints.center.x+this.nodeWithPortPoints.width/2,minY:this.nodeWithPortPoints.center.y-this.nodeWithPortPoints.height/2,maxY:this.nodeWithPortPoints.center.y+this.nodeWithPortPoints.height/2}}getPortPointBoundsPosition(e){return p9t({point:e,bounds:this.bounds})}snapPortPointToBounds(e){let t=L_(e.x,this.bounds.minX,this.bounds.maxX),n=L_(e.y,this.bounds.minY,this.bounds.maxY);return[{distance:Math.abs(e.y-this.bounds.maxY),point:{...e,x:t,y:this.bounds.maxY}},{distance:Math.abs(e.x-this.bounds.maxX),point:{...e,x:this.bounds.maxX,y:n}},{distance:Math.abs(e.y-this.bounds.minY),point:{...e,x:t,y:this.bounds.minY}},{distance:Math.abs(e.x-this.bounds.minX),point:{...e,x:this.bounds.minX,y:n}}].reduce((o,i)=>i.distance<o.distance?i:o).point}doRoutesCross(e,t){return fu(e.A,e.B,t.A,t.B)}calculateViaPosition(e,t){let n=t.A.z,o=e.A.z!==n?e.A:e.B,i=2*this.obstacleMargin+this.viaDiameter/2+this.traceThickness,r=this.obstacleMargin+this.viaDiameter/2,s=t.A,a=o,c=t.B,l=Q7o(s,a,c,this.bounds),d=function(h,A,m,p,g){let _=LPt(h,A,p,g),f=LPt(A,m,p,g),y={left:Math.min(1,_.left+f.left),top:Math.min(1,_.top+f.top),right:Math.min(1,_.right+f.right),bottom:Math.min(1,_.bottom+f.bottom)};for(let x in y)Math.abs(y[x])<Lg&&(y[x]=0);return y}(s,a,c,this.bounds,l),u={minX:this.bounds.minX+(d.left>0.5?i:r),minY:this.bounds.minY+(d.bottom>0.5?i:r),maxX:this.bounds.maxX-(d.right>0.5?i:r),maxY:this.bounds.maxY-(d.top>0.5?i:r)};return u.maxY<u.minY&&(u.minY=(u.minY+u.maxY)/2,u.maxY=u.minY),u.maxX<u.minX&&(u.minX=(u.minX+u.maxX)/2,u.maxX=u.minX),R7o(s,a,c,i,u)}createTransitionRoute(e,t,n,o){let i=[{x:e.x,y:e.y,z:e.z??0},{x:n.x,y:n.y,z:e.z??0},{x:n.x,y:n.y,z:t.z??0},{x:t.x,y:t.y,z:t.z??0}];return{connectionName:o,regionId:this.nodeWithPortPoints.capacityMeshNodeId,route:i,traceThickness:this.traceThickness,viaDiameter:this.viaDiameter,vias:[n]}}createFlatRoute(e,t,n,o,i,r){o.z,e.z;let s=this.viaDiameter/2+this.traceThickness/2+this.obstacleMargin,a=((g,_,f,y)=>{let x=f.x-g.x,C=f.y-g.y;return((I,b)=>({x:(I.x+b.x)/2,y:(I.y+b.y)/2}))({x:g.x+x*_,y:g.y+C*_},{x:f.x-x*y,y:f.y-C*y})})(n,this.viaDiameter,o.z!==e.z?o:i,this.traceThickness),c={center:{x:n.x,y:n.y},radius:s},l=ik(e,a,c).E,d=ik(a,t,c).E,u=ik(e,l,c).E,h=ik(l,a,c).E,A=ik(a,d,c).E,m=ik(d,t,c).E,p=ik(h,A,c).E;return{connectionName:r,regionId:this.nodeWithPortPoints.capacityMeshNodeId,route:[{x:e.x,y:e.y,z:e.z??0},{x:u.x,y:u.y,z:e.z??0},{x:l.x,y:l.y,z:e.z??0},{x:h.x,y:h.y,z:e.z??0},{x:p.x,y:p.y,z:e.z??0},{x:A.x,y:A.y,z:e.z??0},{x:d.x,y:d.y,z:e.z??0},{x:m.x,y:m.y,z:e.z??0},{x:t.x,y:t.y,z:t.z??0}],traceThickness:this.traceThickness,viaDiameter:this.viaDiameter,vias:[]}}trySolve(){let[e,t]=this.routes,n=e.A.z!==e.B.z,o=n?e:t,i=n?t:e,r=this.calculateViaPosition(o,i);if(!r)return!1;this.debugViaPositions.push({via:r});let s=this.createTransitionRoute(o.A,o.B,r,o.connectionName),a=this.createFlatRoute(i.A,i.B,r,o.A,o.B,i.connectionName);return this.solvedRoutes.push(s,a),!0}_step(){if(!this.doRoutesCross(this.routes[0],this.routes[1]))return this.failed=!0,void(this.error="Can only solve routes that have a single transition crossing");this.trySolve()?this.solved=!0:(this.failed=!0,this.error="Failed to find a valid via position and route path")}visualize(){let e={lines:[],points:[],rects:[],circles:[]};e.rects.push({center:{x:(this.bounds.minX+this.bounds.maxX)/2,y:(this.bounds.minY+this.bounds.maxY)/2},width:this.bounds.maxX-this.bounds.minX,height:this.bounds.maxY-this.bounds.minY,stroke:"rgba(0, 0, 0, 0.5)",fill:"rgba(240, 240, 240, 0.1)",label:"PCB Bounds"});for(let t of this.routes)e.points.push({x:t.A.x,y:t.A.y,label:`${t.connectionName} start (z=${t.A.z})`,color:"orange"}),e.points.push({x:t.B.x,y:t.B.y,label:`${t.connectionName} end (z=${t.B.z})`,color:"orange"}),e.lines.push({points:[t.A,t.B],strokeColor:"rgba(255, 0, 0, 0.5)",label:`${t.connectionName} direct`});for(let t=0;t<this.debugViaPositions.length;t++){let{via:n}=this.debugViaPositions[t];e.circles.push({center:n,radius:this.viaDiameter/2,fill:"rgba(255, 165, 0, 0.7)",stroke:"rgba(0, 0, 0, 0.5)",label:`Computed Via (attempt ${t+1})`});let o=this.viaDiameter/2+this.obstacleMargin;e.circles.push({center:n,radius:o,stroke:"rgba(255, 165, 0, 0.7)",fill:"rgba(0, 0, 0, 0)",label:"Safety Margin"})}for(let t=0;t<this.solvedRoutes.length;t++){let n=this.solvedRoutes[t],o=t%2==0?"rgba(0, 255, 0, 0.75)":"rgba(255, 0, 255, 0.75)";for(let i=0;i<n.route.length-1;i++){let r=n.route[i],s=n.route[i+1];e.lines.push({points:[r,s],strokeColor:o,strokeDash:r.z!==n.route[0].z?[0.2,0.2]:void 0,strokeWidth:n.traceThickness,label:`${n.connectionName} z=${r.z}`})}for(let i of n.vias)e.circles.push({center:i,radius:this.viaDiameter/2,fill:"rgba(0, 0, 255, 0.8)",stroke:"black",label:"Solved Via"}),e.circles.push({center:i,radius:this.viaDiameter/2+this.obstacleMargin,fill:"rgba(0, 0, 255, 0.3)",stroke:"black",label:"Via Margin"})}return e}getSolvedRoutes(){return this.solvedRoutes}};function L7o({A:e,B:t,C:n,D:o,E:i,F:r,radius:s,margin:a,subdivisions:c=0}){let l=(b,P)=>({x:(b.x+P.x)/2,y:(b.y+P.y)/2}),d=(b,P,E)=>{let B=P.x-b.x,w=P.y-b.y,T=Math.sqrt(B*B+w*w),Q=B/T,N=w/T,F=-N,H=Q;return{midpoint:{x:(b.x+P.x)/2,y:(b.y+P.y)/2},A_Opp:{x:b.x-Q*E,y:b.y-N*E},A_Right:{x:b.x+F*E,y:b.y+H*E},A_Left:{x:b.x-F*E,y:b.y-H*E},B_Opp:{x:P.x+Q*E,y:P.y+N*E},B_Right:{x:P.x+F*E,y:P.y+H*E},B_Left:{x:P.x-F*E,y:P.y-H*E}}},u=(b,P)=>{let E=bn(b,P.start),B=bn(b,P.end),w=bn(P.start,P.end);return Math.abs(E+B-w)<0.0001},h=(b,P)=>{let{start:E,end:B}=b,{start:w,end:T}=P;if(u(E,P)||u(B,P)||u(w,b)||u(T,b))return!0;let Q=B.x-E.x,N=B.y-E.y,F=T.x-w.x,H=T.y-w.y,z=Q*H-N*F;if(Math.abs(z)<0.0001)return!1;let Y=w.x-E.x,U=w.y-E.y,X=(Y*H-U*F)/z,V=(Y*N-U*Q)/z;return X>0&&X<1&&V>0&&V<1},A=(b,P)=>{let E=[];for(let w=0;w<b.length-1;w++)E.push({start:b[w],end:b[w+1]});let B=[];for(let w=0;w<P.length-1;w++)B.push({start:P[w],end:P[w+1]});for(let w of E)for(let T of B)if(h(w,T))return!0;return!1},m=(b)=>{let P=0;for(let E=1;E<b.length;E++){let B=b[E].x-b[E-1].x,w=b[E].y-b[E-1].y;P+=Math.sqrt(B*B+w*w)}return P},p=(b,P)=>{let{start:E,end:B}=b,w=B.x-E.x,T=B.y-E.y,Q=w*w+T*T;if(Q===0)return{...E,t:0};let N=Math.max(0,Math.min(1,((P.x-E.x)*w+(P.y-E.y)*T)/Q));return{x:E.x+N*w,y:E.y+N*T,t:N}},g=(b,P,E)=>{let B=p(b,P);if(bn(B,P)>=E)return B;let w=B.x-P.x,T=B.y-P.y,Q=Math.sqrt(w*w+T*T);if(Q===0){let N=b.end.x-b.start.x,F=b.end.y-b.start.y,H=Math.sqrt(N*N+F*F);return{x:P.x+E*N/H,y:P.y+E*F/H,t:B.t,isSpecial:!0,specialType:P===e?"A":"B"}}return{x:P.x+E*w/Q,y:P.y+E*T/Q,t:B.t,isSpecial:!0,specialType:P===e?"A":"B"}},_=d(e,t,s),f=d(e,t,s+a),y=(b,P,E,B,w)=>{let T=b.points;if(T.length<2)return T;let Q=E+B,N=[T[0]];for(let F=0;F<T.length-1;F++){let H={start:T[F],end:T[F+1]};if(Da(P,H.start,H.end)<Q){let z=p(H,P),Y=z.x-P.x,U=z.y-P.y,X=Math.sqrt(Y*Y+U*U),V=null;if(X>0.000001)V={x:P.x+Q*Y/X,y:P.y+Q*U/X};else{let W=H.end.x-H.start.x,j=H.end.y-H.start.y,q=Math.sqrt(W*W+j*j);q>0.000001&&(V={x:P.x+Q*W/q,y:P.y+Q*j/q})}V&&bn(H.start,V)>s/10&&N.push(V)}bn(N[N.length-1],H.end)>s/10&&N.push(H.end)}if(N.length>1){let F=[N[0]];for(let H=1;H<N.length;H++)bn(F[F.length-1],N[H])>s/10&&F.push(N[H]);return F}return N},x=(()=>{let b=[[n,_.B_Left,_.B_Opp,_.B_Right,l(_.midpoint,l(_.B_Right,_.A_Right)),l(_.midpoint,l(_.A_Left,_.B_Left)),_.A_Left,_.A_Opp,_.A_Right,o],[n,_.B_Right,_.B_Opp,_.B_Left,l(_.midpoint,l(_.A_Left,_.B_Left)),l(_.midpoint,l(_.A_Right,_.B_Right)),_.A_Right,_.A_Opp,_.A_Left,o],[o,_.B_Left,_.B_Opp,_.B_Right,l(_.midpoint,l(_.A_Right,_.B_Right)),l(_.midpoint,l(_.A_Left,_.B_Left)),_.A_Left,_.A_Opp,_.A_Right,n],[o,_.B_Right,_.B_Opp,_.B_Left,l(_.midpoint,l(_.A_Left,_.B_Left)),l(_.midpoint,l(_.A_Right,_.B_Right)),_.A_Right,_.A_Opp,_.A_Left,n]],P=[];for(let U=0;U<b.length;U++){let X=b[U],V={start:X[0],end:X[1]},W={start:X[X.length-2],end:X[X.length-1]},j={start:X[3],end:X[4]};h(V,W)||h(V,j)||h(W,j)||P.push({index:U+1,path:X,length:m(X)})}if(P.length===0)return{index:0,path:[]};let E=P.sort((U,X)=>U.length-X.length)[0],B=[...E.path],w=B[0],T=bn(w,B[2]),Q=bn(w,B[3]),N=T<Q?2:3;(T<bn(w,B[1])||Q<bn(w,B[1]))&&B.splice(1,N-1);let F=B[B.length-1],H=bn(F,B[B.length-3]),z=bn(F,B[B.length-4]),Y=H<z?B.length-3:B.length-4;return(H<bn(F,B[B.length-2])||z<bn(F,B[B.length-2]))&&B.splice(Y+1,B.length-Y-2),{index:E.index,path:B,startsAt:B[0]===n?"C":"D",goesTo:B[B.length-1]===n?"C":"D"}})(),C=c>0?((b,P)=>{if(b.length<2)return b;let E=[b[0]];for(let B=0;B<b.length-1;B++){let w={start:b[B],end:b[B+1]},T={x:(w.start.x+w.end.x)/2,y:(w.start.y+w.end.y)/2},Q=bn(T,e),N=bn(T,t);if((Q<=s||N<=s)&&Math.abs(Q-N)>0.0001){let F=p(w,e),H=p(w,t),z=bn(F,e),Y=bn(H,t)<s,U=z<s?g(w,e,s):null,X=Y?g(w,t,s):null,V=[];if(bn(w.start,w.end)>s/2&&P>0)for(let W=1;W<=P;W++){let j=W/(P+1),q={x:w.start.x+j*(w.end.x-w.start.x),y:w.start.y+j*(w.end.y-w.start.y),t:j,isSpecial:!1},ne=bn(q,e),ce=bn(q,t);ne<s||ce<s||(U&&Math.abs(q.t-U.t)<0.1||X&&Math.abs(q.t-X.t)<0.1||V.push(q))}if(U&&V.push(U),X&&V.push(X),V.sort((W,j)=>W.t-j.t),V.length>1){let W=[V[0]];for(let j=1;j<V.length;j++){let q=W[W.length-1],ne=V[j];bn(q,ne)>s/10&&W.push(ne)}V=W}V.forEach((W)=>E.push(W))}E.push(b[B+1])}if(E.length>1){let B=[E[0]];for(let w=1;w<E.length;w++){let T=B[B.length-1],Q=E[w];bn(T,Q)>s/10&&B.push(Q)}return B}return E})(x.path,c):x.path,I=(()=>{if(x.path.length===0)return null;let b=(()=>{let T=l(_.A_Right,_.B_Right),Q=l(_.B_Left,_.A_Left);return[{startsAt:"E",goesTo:"B",points:[i,t]},{startsAt:"E",goesTo:"A",points:[i,e]},{startsAt:"F",goesTo:"B",points:[r,t]},{startsAt:"F",goesTo:"A",points:[r,e]},{startsAt:"E",goesTo:"B",points:[i,T,t]},{startsAt:"E",goesTo:"A",points:[i,T,e]},{startsAt:"F",goesTo:"B",points:[r,T,t]},{startsAt:"F",goesTo:"A",points:[r,T,e]},{startsAt:"E",goesTo:"B",points:[i,Q,t]},{startsAt:"E",goesTo:"A",points:[i,Q,e]},{startsAt:"F",goesTo:"B",points:[r,Q,t]},{startsAt:"F",goesTo:"A",points:[r,Q,e]},{startsAt:"E",goesTo:"B",points:[i,f.A_Right,T,t]},{startsAt:"F",goesTo:"B",points:[r,f.B_Right,T,t]},{startsAt:"E",goesTo:"A",points:[i,f.B_Left,Q,e]},{startsAt:"F",goesTo:"A",points:[r,f.A_Left,Q,e]},{startsAt:"E",goesTo:"B",points:[i,f.A_Left,Q,t]},{startsAt:"E",goesTo:"A",points:[i,f.B_Right,T,e]},{startsAt:"E",goesTo:"B",points:[i,f.A_Opp,f.A_Right,T,t]},{startsAt:"E",goesTo:"A",points:[i,f.B_Opp,f.B_Left,Q,e]},{startsAt:"F",goesTo:"B",points:[r,f.A_Opp,f.A_Left,Q,t]},{startsAt:"F",goesTo:"A",points:[r,f.B_Opp,f.B_Right,T,e]},{startsAt:"F",goesTo:"A",points:[r,f.B_Opp,f.B_Left,Q,e]},{startsAt:"E",goesTo:"B",points:[i,f.A_Opp,f.A_Left,Q,t]},{startsAt:"E",goesTo:"A",points:[i,f.B_Opp,f.B_Right,T,e]},{startsAt:"E",goesTo:"B",points:[i,f.A_Left,f.A_Opp,f.A_Right,T,t]},{startsAt:"E",goesTo:"A",points:[i,f.B_Right,f.B_Opp,f.B_Left,Q,e]},{startsAt:"F",goesTo:"B",points:[r,f.A_Right,f.A_Opp,f.A_Left,Q,t]},{startsAt:"F",goesTo:"A",points:[r,f.B_Left,f.B_Opp,f.B_Right,T,e]},{startsAt:"F",goesTo:"A",points:[r,f.B_Right,f.B_Opp,f.B_Left,Q,e]},{startsAt:"E",goesTo:"B",points:[i,f.A_Right,f.A_Opp,f.A_Left,Q,t]},{startsAt:"E",goesTo:"A",points:[i,f.B_Left,f.B_Opp,f.B_Right,T,e]}].map((N,F)=>({...N,index:F}))})(),P=b.filter((T)=>T.startsAt==="E"),E=b.filter((T)=>T.startsAt==="F"),B=[],w=[];for(let T of P)if(!A(T.points,x.path)){B.push(T);break}for(let T of E)if(!A(T.points,x.path)){w.push(T);break}return B.length===0||w.length===0?null:{line1:B[0],line2:w[0]}})();if(I){let b=I.line1.goesTo==="A"?t:e,P=I.line2.goesTo==="A"?t:e,E=y(I.line1,b,s,a),B=y(I.line2,P,s,a);I={line1:{...I.line1,points:E},line2:{...I.line2,points:B}}}return{jPair:I,optimalPath:{startsAt:x.startsAt,goesTo:x.goesTo,points:C}}}var F7o=class extends Oi{getSolverName(){return"TwoCrossingRoutesHighDensitySolver"}nodeWithPortPoints;routes;viaDiameter;traceThickness;obstacleMargin;layerCount=2;debugViaPositions;escapeLayer=1;solvedRoutes=[];bounds;constructor(e){if(super(),this.nodeWithPortPoints=e.nodeWithPortPoints,this.viaDiameter=e?.viaDiameter??0.3,this.traceThickness=e?.traceThickness??0.15,this.obstacleMargin=e?.obstacleMargin??0.1,this.layerCount=e?.layerCount??2,this.debugViaPositions=[],this.routes=this.extractRoutesFromNode(),this.bounds=this.calculateBounds(),this.routes.length!==2)return this.failed=!0,void(this.error=`Expected 2 routes, but got ${this.routes.length}`);let[t,n]=this.routes;if(t.startPort.z!==t.endPort.z)return this.failed=!0,void(this.error="Route A must start and end on the same layer");if(n.startPort.z!==n.endPort.z)return this.failed=!0,void(this.error="Route B must start and end on the same layer");if(t.startPort.z!==n.startPort.z)return this.failed=!0,void(this.error="Both routes must be on the same layer");t.startPort.z===0?this.escapeLayer=1:this.escapeLayer=0}extractRoutesFromNode(){let e=[],t=this.nodeWithPortPoints.portPoints,n=new Map;for(let o of t){let{connectionName:i}=o;n.has(i)||n.set(i,[]),n.get(i)?.push(o)}for(let[o,i]of n.entries())i.length===2&&e.push({startPort:{...i[0],z:i[0].z??0},endPort:{...i[1],z:i[1].z??0},connectionName:o});return e}calculateBounds(){return{minX:this.nodeWithPortPoints.center.x-this.nodeWithPortPoints.width/2,maxX:this.nodeWithPortPoints.center.x+this.nodeWithPortPoints.width/2,minY:this.nodeWithPortPoints.center.y-this.nodeWithPortPoints.height/2,maxY:this.nodeWithPortPoints.center.y+this.nodeWithPortPoints.height/2}}doRoutesCross(e,t){return fu(e.startPort,e.endPort,t.startPort,t.endPort)}calculateViaPositions(e,t){let n=this.bounds.maxX-this.bounds.minX,o=this.bounds.maxY-this.bounds.minY,i=this.bounds.minX,r=this.bounds.minY,s={width:n-2*this.obstacleMargin-this.viaDiameter,height:o-2*this.obstacleMargin-this.viaDiameter,x:i+this.obstacleMargin+this.viaDiameter/2,y:r+this.obstacleMargin+this.viaDiameter/2},a=this.viaDiameter+this.obstacleMargin,{startPort:c,endPort:l}=t,d=[{x:s.x,y:s.y},{x:s.x+s.width,y:s.y},{x:s.x+s.width,y:s.y+s.height},{x:s.x,y:s.y+s.height}],u=(y,x)=>bn(y,x),h=[];d.forEach((y,x)=>{u(y,c)>=a&&u(y,l)>=a&&h.push({...y,type:"corner",index:x})});let A=[{p1:d[0],p2:d[1]},{p1:d[1],p2:d[2]},{p1:d[2],p2:d[3]},{p1:d[3],p2:d[0]}];if([c,l].forEach((y,x)=>{A.forEach((C,I)=>{((b,P)=>{let{x:E,y:B,r:w}=b,T=P.p1.x,Q=P.p1.y,N=P.p2.x,F=P.p2.y;if(Math.abs(N-T)<0.001){let ce=T,oe=w*w-(ce-E)**2;if(oe<0)return[];if(Math.abs(oe)<0.001){let se=B;return se>=Math.min(Q,F)&&se<=Math.max(Q,F)?[{x:ce,y:se}]:[]}let ie=B+Math.sqrt(oe),J=B-Math.sqrt(oe),ee=[];return ie>=Math.min(Q,F)&&ie<=Math.max(Q,F)&&ee.push({x:ce,y:ie}),J>=Math.min(Q,F)&&J<=Math.max(Q,F)&&ee.push({x:ce,y:J}),ee}let H=(F-Q)/(N-T),z=Q-H*T,Y=1+H*H,U=2*(H*z-H*B-E),X=U*U-4*Y*(E*E+(z-B)*(z-B)-w*w);if(X<0)return[];if(Math.abs(X)<0.001){let ce=-U/(2*Y),oe=H*ce+z;return ce>=Math.min(T,N)&&ce<=Math.max(T,N)&&oe>=Math.min(Q,F)&&oe<=Math.max(Q,F)?[{x:ce,y:oe}]:[]}let V=(-U+Math.sqrt(X))/(2*Y),W=(-U-Math.sqrt(X))/(2*Y),j=H*V+z,q=H*W+z,ne=[];return V>=Math.min(T,N)&&V<=Math.max(T,N)&&j>=Math.min(Q,F)&&j<=Math.max(Q,F)&&ne.push({x:V,y:j}),W>=Math.min(T,N)&&W<=Math.max(T,N)&&q>=Math.min(Q,F)&&q<=Math.max(Q,F)&&ne.push({x:W,y:q}),ne})({...y,r:a},C).forEach((b)=>{u(b,x===0?l:c)>=a&&h.push({...b,type:"intersection",circle:x,edge:I})})})}),h.length<2){let y=0.8*a;if(d.forEach((x,C)=>{u(x,c)>=y&&u(x,l)>=y&&!h.some((I)=>I.x===x.x&&I.y===x.y)&&h.push({...x,type:"relaxed_corner",index:C})}),h.length<2){let x=[...d].sort((C,I)=>{let b=Math.min(u(C,c),u(C,l));return Math.min(u(I,c),u(I,l))-b});for(let C of x)if(!h.some((I)=>I.x===C.x&&I.y===C.y)&&(h.push({...C,type:"forced_corner"}),h.length>=2))break}}if(h.length<2)return null;let m=0,p=[h[0],h[h.length>1?1:0]];for(let y=0;y<h.length;y++)for(let x=y+1;x<h.length;x++){let C=u(h[y],h[x]);C>m&&(m=C,p=[h[y],h[x]])}let g={x:p[0].x,y:p[0].y},_={x:p[1].x,y:p[1].y},f=bn(g,e.startPort);return bn(_,e.startPort)<f&&([g,_]=[_,g]),{via1:g,via2:_}}trySolveAOverB(e,t,n=!1){let o=n?this.calculateViaPositions(e,t):this.calculateViaPositions(t,e);if(!o)return!1;this.debugViaPositions.push(o);let{via1:i,via2:r}=this.pushViasFromEndpoints(this.moveViasAsCloseAsPossible(o));this.debugViaPositions.push({via1:i,via2:r});let{jPair:s,optimalPath:a}=L7o({A:i,B:r,C:e.startPort,D:e.endPort,E:t.startPort,F:t.endPort,radius:this.viaDiameter/2+this.obstacleMargin+this.traceThickness/2*1.5,margin:2*this.obstacleMargin+this.traceThickness/2*1.5,subdivisions:1});if(!s)return!1;let c={connectionName:e.connectionName,regionId:this.nodeWithPortPoints.capacityMeshNodeId,route:a.points.map((d)=>({x:d.x,y:d.y,z:e.startPort.z??0})),traceThickness:this.traceThickness,viaDiameter:this.viaDiameter,vias:[]};s.line2.points.reverse();let l={connectionName:t.connectionName,regionId:this.nodeWithPortPoints.capacityMeshNodeId,route:[...s.line1.points.map((d)=>({x:d.x,y:d.y,z:t.startPort.z??0})),{...s.line1.points[s.line1.points.length-1],z:this.escapeLayer},{...s.line2.points[0],z:this.escapeLayer},...s.line2.points.map((d)=>({x:d.x,y:d.y,z:t.startPort.z??0}))],traceThickness:this.traceThickness,viaDiameter:this.viaDiameter,vias:[i,r]};return this.solvedRoutes.push(c,l),!0}pushViasFromEndpoints(e){let t={...e.via1},n={...e.via2},o=[this.routes[0].startPort,this.routes[0].endPort,this.routes[1].startPort,this.routes[1].endPort],i=this.getMinDistanceBetweenViaCenters(),r=this.viaDiameter/2+2*this.traceThickness+2*this.obstacleMargin;for(let a=0;a<10;a++){let c=!1,l=!1,d=0.9**a;for(let h of o){let A=bn(t,h);if(A<r){let p=(r-A)*d,g=t.x-h.x,_=t.y-h.y,f=Math.sqrt(g*g+_*_);f>0.000001&&(t.x+=g/f*p,t.y+=_/f*p,c=!0)}let m=bn(n,h);if(m<r){let p=(r-m)*d,g=n.x-h.x,_=n.y-h.y,f=Math.sqrt(g*g+_*_);f>0.000001&&(n.x+=g/f*p,n.y+=_/f*p,l=!0)}}let u=bn(t,n);if(u<i){let h=(i-u)/2,A=n.x-t.x,m=n.y-t.y,p=Math.sqrt(A*A+m*m);p>0.000001?(t.x-=A/p*h,t.y-=m/p*h,n.x+=A/p*h,n.y+=m/p*h,c=!0,l=!0):(t.x-=h,n.x+=h,c=!0,l=!0)}if(!c&&!l)break}let s=bn(t,n);if(s<i){let a=(i-s)/2,c=n.x-t.x,l=n.y-t.y,d=Math.sqrt(c*c+l*l);d>0.000001?(t.x-=c/d*a,t.y-=l/d*a,n.x+=c/d*a,n.y+=l/d*a):(t.x-=a,n.x+=a)}return{via1:t,via2:n}}getMinDistanceBetweenViaCenters(){return this.viaDiameter+this.traceThickness+2*this.obstacleMargin}moveViasAsCloseAsPossible(e){let{via1:t,via2:n}=e,o=this.getMinDistanceBetweenViaCenters(),i=bn(t,n);if(i<=o)return e;let r=n.x-t.x,s=n.y-t.y,a=Math.sqrt(r*r+s*s),c=r/a,l=s/a,d=(t.x,n.x,t.y,n.y,(i-o)/2);return{via1:{x:t.x+c*d,y:t.y+l*d},via2:{x:n.x-c*d,y:n.y-l*d}}}handleRoutesDontCross(){let[e,t]=this.routes,n={connectionName:e.connectionName,regionId:this.nodeWithPortPoints.capacityMeshNodeId,route:[{x:e.startPort.x,y:e.startPort.y,z:e.startPort.z??0},{x:e.endPort.x,y:e.endPort.y,z:e.endPort.z??0}],traceThickness:this.traceThickness,viaDiameter:this.viaDiameter,vias:[]},o={connectionName:t.connectionName,regionId:this.nodeWithPortPoints.capacityMeshNodeId,route:[{x:t.startPort.x,y:t.startPort.y,z:t.startPort.z??0},{x:t.endPort.x,y:t.endPort.y,z:t.endPort.z??0}],traceThickness:this.traceThickness,viaDiameter:this.viaDiameter,vias:[]};this.solvedRoutes.push(n,o),this.solved=!0}_step(){if(this.routes.length!==2)return void(this.failed=!0);let[e,t]=this.routes;this.doRoutesCross(e,t)?this.trySolveAOverB(e,t)||this.trySolveAOverB(t,e)||this.trySolveAOverB(e,t,!0)||this.trySolveAOverB(t,e,!0)?this.solved=!0:(this.failed=!0,this.error="All crossover strategies failed"):this.handleRoutesDontCross()}visualize(){let e={lines:[],points:[],rects:[],circles:[]};e.rects.push({center:{x:(this.bounds.minX+this.bounds.maxX)/2,y:(this.bounds.minY+this.bounds.maxY)/2},width:this.bounds.maxX-this.bounds.minX,height:this.bounds.maxY-this.bounds.minY,stroke:"rgba(0, 0, 0, 0.5)",fill:"rgba(240, 240, 240, 0.1)"});for(let[t,n]of[["Route A",this.routes[0]],["Route B",this.routes[1]]])e.points.push({x:n.startPort.x,y:n.startPort.y,label:`${t}
${n.connectionName} start`,color:"orange"}),e.points.push({x:n.endPort.x,y:n.endPort.y,label:`${t}
${n.connectionName} end`,color:"orange"}),e.lines.push({points:[n.startPort,n.endPort],strokeColor:"rgba(255, 0, 0, 0.5)",label:`${t}
${n.connectionName} direct`});for(let t=0;t<this.debugViaPositions.length;t++){let{via1:n,via2:o}=this.debugViaPositions[t],i=["rgba(255, 165, 0, 0.3)","rgba(128, 0, 128, 0.3)"],r=i[t%i.length];e.circles.push({center:n,radius:this.viaDiameter/2,fill:r,stroke:"rgba(0, 0, 0, 0.3)",label:`Computed Via A (attempt ${t+1})`}),e.circles.push({center:o,radius:this.viaDiameter/2,fill:r,stroke:"rgba(0, 0, 0, 0.3)",label:`Computed Via B (attempt ${t+1})`});let s=this.viaDiameter/2+this.obstacleMargin;e.circles.push({center:n,radius:s,stroke:r,fill:"rgba(0, 0, 0, 0)",label:`Debug Via 1 Safety Margin (attempt ${t+1})`}),e.circles.push({center:o,radius:s,stroke:r,fill:"rgba(0, 0, 0, 0)",label:`Debug Via 2 Safety Margin (attempt ${t+1})`}),e.lines.push({points:[this.routes[t%2].startPort,n,o,this.routes[t%2].endPort],strokeColor:`${r.substring(0,r.lastIndexOf(","))}, 0.3)`,strokeDash:[5,5],label:`Potential Route (attempt ${t+1})`})}for(let t=0;t<this.solvedRoutes.length;t++){let n=this.solvedRoutes[t],o=t%2==0?"rgba(0, 255, 0, 0.75)":"rgba(255, 0, 255, 0.75)";for(let i=0;i<n.route.length-1;i++){let r=n.route[i],s=n.route[i+1];e.lines.push({points:[r,s],strokeColor:o,strokeDash:r.z===1?[0.2,0.2]:void 0,strokeWidth:n.traceThickness,label:`${n.connectionName} z=${r.z}`}),r._label&&e.points.push({x:r.x,y:r.y,label:r._label})}for(let i of n.vias)e.circles.push({center:i,radius:this.viaDiameter/2,fill:"rgba(0, 0, 255, 0.8)",stroke:"black",label:"Solved Via"}),e.circles.push({center:i,radius:this.viaDiameter/2+this.obstacleMargin,fill:"rgba(0, 0, 255, 0.3)",stroke:"black",label:"Solved Via Margin"})}return e}getSolvedRoutes(){return this.solvedRoutes}},Jge=class extends Oi{getSolverName(){return"HyperParameterSupervisorSolver"}GREEDY_MULTIPLIER=1.2;MIN_SUBSTEPS=1;supervisedSolvers;winningSolver;getHyperParameterDefs(){throw Error("Not implemented")}getCombinationDefs(){return null}getHyperParameterCombinations(e){e||(e=this.getHyperParameterDefs());let t=[];if(e.length===0)return[{}];let[n,...o]=e,i=this.getHyperParameterCombinations(o);return n.possibleValues.forEach((r)=>{i.forEach((s)=>{t.push({...s,...r})})}),t}initializeSolvers(){let e=this.getHyperParameterDefs(),t=this.getCombinationDefs()??[e.map((n)=>n.name)];this.supervisedSolvers=[];for(let n of t){let o=this.getHyperParameterCombinations(e.filter((i)=>n.includes(i.name)));for(let i of o){let r=this.generateSolver(i),s=this.computeG(r);this.supervisedSolvers.push({hyperParameters:i,solver:r,h:0,g:s,f:s})}}}generateSolver(e){throw Error("Not implemented")}computeG(e){return e.iterations/e.MAX_ITERATIONS}computeH(e){return 1-(e.progress||0)}computeF(e,t){return e+t*this.GREEDY_MULTIPLIER}getSupervisedSolverWithBestFitness(){let e=1/0,t=null;for(let n of this.supervisedSolvers??[]){if(n.solver.solved)return n;if(n.solver.failed)continue;let o=n.f;o<e&&(e=o,t=n)}return t}getFailureMessage(){return`All solvers failed in hyper solver. Example failures: ${this.supervisedSolvers?.sort((e,t)=>t.f-e.f)?.slice(0,5).map((e)=>e.solver.error).join(", ")}`}_step(){this.supervisedSolvers||this.initializeSolvers();let e=this.getSupervisedSolverWithBestFitness();if(!e)return this.failed=!0,void(this.error=this.getFailureMessage());for(let t=0;t<this.MIN_SUBSTEPS;t++)e.solver.step();this.activeSubSolver=e.solver,e.g=this.computeG(e.solver),e.h=this.computeH(e.solver),e.f=this.computeF(e.g,e.h),e.solver.solved&&(this.solved=!0,this.winningSolver=e.solver,this.onSolve?.(e))}onSolve(e){}visualize(){let e=this.getSupervisedSolverWithBestFitness(),t={lines:[],circles:[],points:[],rects:[]};return e&&(t=e.solver.visualize()),t}};function Kk(e,t,n){let o=t.z!==n.z&&e.allowBlindAndBuriedVias!==!0;return{minZ:o?0:Math.min(t.z,n.z),maxZ:o?e.layerCount-1:Math.max(t.z,n.z)}}var H7o=class{values=[];positions;constructor(e){if(e===void 0)this.positions=new Map;else{if(!Number.isSafeInteger(e)||e<=0)throw Error("repair04: dense path queue requires a positive grid size");let t=new Int32Array(e);this.positions={get:(n)=>t[n]===0?void 0:t[n]-1,set:(n,o)=>{t[n]=o+1},delete:(n)=>{t[n]=0}}}}get length(){return this.values.length}push(e){let t=this.positions.get(e.id);if(t===void 0)t=this.values.length,this.values.push(e);else if(e.priority>this.values[t].priority)throw Error("repair04: queued path priorities may only decrease");for(;t>0;){let n=Math.floor((t-1)/2),o=this.values[n];if(o.priority<=e.priority)break;this.values[t]=o,this.positions.set(o.id,t),t=n}this.values[t]=e,this.positions.set(e.id,t)}pop(){let e=this.values[0];if(!e)throw Error("repair04: cannot pop an empty path queue");let t=this.values.pop();if(this.positions.delete(e.id),this.values.length){let n=0;for(;2*n+1<this.values.length;){let o=2*n+1;o+1<this.values.length&&this.values[o+1].priority<this.values[o].priority&&o++;let i=this.values[o];if(i.priority>=t.priority)break;this.values[n]=i,this.positions.set(i.id,n),n=o}this.values[n]=t,this.positions.set(t.id,n)}return e}},Kke=(e,t)=>{let n=[];for(let o=0;o<e.route.length;o+=1){let i=e.route[o];if(i.route_type!=="via"){n.push(structuredClone(i));continue}let r=n[n.length-1],s=e.route[o+1],a=r?.route_type==="wire"?r.width:s?.route_type==="wire"?s.width:t,c=s?.route_type==="wire"?s.width:a;r?.route_type==="wire"&&r.x===i.x&&r.y===i.y&&r.layer===i.from_layer||n.push({route_type:"wire",x:i.x,y:i.y,layer:i.from_layer,width:a}),n.push(structuredClone(i)),s?.route_type==="wire"&&s.x===i.x&&s.y===i.y&&s.layer===i.to_layer||n.push({route_type:"wire",x:i.x,y:i.y,layer:i.to_layer,width:c})}return{...structuredClone(e),route:n}};function jke(e,t,n){return Math.max(n?0:t,e.defaultObstacleMargin??0,e.minViaEdgeToPadEdgeClearance??0)}var ii=0.00000001,a1=(e,t,n=0)=>e.x>=t.minX+n-ii&&e.x<=t.maxX-n+ii&&e.y>=t.minY+n-ii&&e.y<=t.maxY-n+ii,M6=(e,t,n)=>{let o=0,i=1;for(let[r,s,a,c]of[[e.x,t.x-e.x,n.minX,n.maxX],[e.y,t.y-e.y,n.minY,n.maxY]]){if(r===void 0||s===void 0||a===void 0||c===void 0)throw Error("Invalid segment clipping axis");if(Math.abs(s)<=ii){if(r<a-ii||r>c+ii)return;continue}let l=(a-r)/s,d=(c-r)/s;if(o=Math.max(o,Math.min(l,d)),i=Math.min(i,Math.max(l,d)),i<o-ii)return}return[Math.max(0,o),Math.min(1,i)]},PV=(e,t,n)=>{if(n<=ii)return structuredClone(e);if(n>=0.99999999)return structuredClone(t);let o={...structuredClone(e),x:e.x+(t.x-e.x)*n,y:e.y+(t.y-e.y)*n};return delete o.pcb_port_id,o},TI=(e,t)=>Math.abs(e.x-t.x)<=ii&&Math.abs(e.y-t.y)<=ii&&e.z===t.z,Qc=(e)=>Array.isArray(e)?`[${e.map(Qc).join(",")}]`:e!==null&&typeof e=="object"?`{${Object.keys(e).filter((t)=>e[t]!==void 0).sort().map((t)=>`${JSON.stringify(t)}:${Qc(e[t])}`).join(",")}}`:JSON.stringify(e)??"undefined",kRe=(e,t,n)=>{if(e.route.length===1)return structuredClone(e.route);let o=(r)=>{let s=Math.min(Math.floor(r),e.route.length-2);return PV(e.route[s],e.route[s+1],r-s)},i=[o(t)];for(let r=Math.floor(t)+1;r<n-ii;r+=1)i.push(structuredClone(e.route[r]));return n>t+ii&&i.push(o(n)),i},A9t=(e,t,n)=>{let o=kRe(e,t,n),i=Object.fromEntries(Object.entries(e).filter(([s])=>s!=="route"&&s!=="vias")),r=e.vias.filter((s)=>o.some((a)=>Math.hypot(a.x-s.x,a.y-s.y)<=ii));return Qc({metadata:i,points:o,vias:r})},H_e={};Vge(H_e,{all_layers:()=>uwt,any_circuit_element:()=>O8t,any_soup_element:()=>K_e,any_source_component:()=>nwt,asset:()=>D9t,base_circuit_json_error:()=>Sl,battery_capacity:()=>T9t,brep_shape:()=>Xwt,cadModelDefaultDirectionMap:()=>STo,cad_component:()=>v8t,cad_model_axis_directions:()=>P8t,cad_model_formats:()=>bTo,capacitance:()=>$ke,circuit_json_footprint_load_error:()=>e8t,current:()=>KV,distance:()=>Ln,duration_ms:()=>zte,experiment_type:()=>N8t,external_footprint_load_error:()=>Z7t,frequency:()=>mL,getZodPrefixedIdWithDefault:()=>oo,inductance:()=>B9t,kicadAt:()=>Zge,kicadEffects:()=>N9t,kicadFont:()=>eLe,kicadFootprintAttributes:()=>Q9t,kicadFootprintMetadata:()=>F9t,kicadFootprintModel:()=>L9t,kicadFootprintPad:()=>k9t,kicadFootprintProperties:()=>R9t,kicadProperty:()=>see,kicadSymbolEffects:()=>z9t,kicadSymbolMetadata:()=>Y9t,kicadSymbolPinNames:()=>O9t,kicadSymbolPinNumbers:()=>H9t,kicadSymbolProperties:()=>G9t,kicadSymbolProperty:()=>S8,layer_ref:()=>Ya,layer_string:()=>zRe,length:()=>$o,manufacturing_drc_properties:()=>qwt,ms:()=>Jk,ninePointAnchor:()=>G6,pcbRenderLayer:()=>q8o,pcb_autorouting_error:()=>n8t,pcb_board:()=>I7t,pcb_breakout_point:()=>s8t,pcb_component:()=>Jwt,pcb_component_invalid_layer_error:()=>_8t,pcb_component_not_on_board_edge_error:()=>A8t,pcb_component_outside_board_error:()=>p8t,pcb_connector_not_in_accessible_orientation_warning:()=>i8t,pcb_copper_pour:()=>m8t,pcb_copper_pour_brep:()=>u8t,pcb_copper_pour_polygon:()=>h8t,pcb_copper_pour_rect:()=>d8t,pcb_copper_text:()=>w7t,pcb_courtyard_circle:()=>S8t,pcb_courtyard_outline:()=>I8t,pcb_courtyard_overlap_error:()=>U7t,pcb_courtyard_polygon:()=>b8t,pcb_courtyard_rect:()=>C8t,pcb_cutout:()=>J7t,pcb_cutout_circle:()=>K7t,pcb_cutout_path:()=>q7t,pcb_cutout_polygon:()=>j7t,pcb_cutout_rect:()=>X7t,pcb_fabrication_note_dimension:()=>F7t,pcb_fabrication_note_path:()=>k7t,pcb_fabrication_note_rect:()=>L7t,pcb_fabrication_note_text:()=>Q7t,pcb_footprint_overlap_error:()=>V7t,pcb_ground_plane:()=>a8t,pcb_ground_plane_region:()=>c8t,pcb_group:()=>t8t,pcb_hole:()=>i7t,pcb_hole_circle_or_square_shape:()=>oTo,pcb_hole_circle_shape:()=>tTo,pcb_hole_oval_shape:()=>iTo,pcb_hole_pill_shape:()=>rTo,pcb_hole_rect_shape:()=>nTo,pcb_hole_rotated_pill_shape:()=>sTo,pcb_keepout:()=>W7t,pcb_manual_edit_conflict_warning:()=>o8t,pcb_missing_footprint_error:()=>$7t,pcb_net:()=>x7t,pcb_note_dimension:()=>Y7t,pcb_note_line:()=>G7t,pcb_note_path:()=>z7t,pcb_note_rect:()=>O7t,pcb_note_text:()=>H7t,pcb_pad_pad_clearance_error:()=>y8t,pcb_pad_trace_clearance_error:()=>x8t,pcb_panel:()=>b7t,pcb_panelization_placement_error:()=>P7t,pcb_placement_error:()=>S7t,pcb_plated_hole:()=>r7t,pcb_port:()=>s7t,pcb_port_not_connected_error:()=>y7t,pcb_port_not_matched_error:()=>f7t,pcb_route_hint:()=>Kwt,pcb_route_hints:()=>eTo,pcb_silkscreen_circle:()=>D7t,pcb_silkscreen_line:()=>E7t,pcb_silkscreen_oval:()=>N7t,pcb_silkscreen_path:()=>M7t,pcb_silkscreen_pill:()=>R7t,pcb_silkscreen_rect:()=>T7t,pcb_silkscreen_text:()=>B7t,pcb_smtpad:()=>c7t,pcb_smtpad_pill:()=>a7t,pcb_solder_paste:()=>l7t,pcb_text:()=>d7t,pcb_thermal_spoke:()=>l8t,pcb_trace:()=>p7t,pcb_trace_error:()=>_7t,pcb_trace_hint:()=>v7t,pcb_trace_missing_error:()=>g7t,pcb_trace_route_point:()=>m7t,pcb_trace_route_point_via:()=>h7t,pcb_trace_route_point_wire:()=>u7t,pcb_trace_warning:()=>A7t,pcb_via:()=>C7t,pcb_via_clearance_error:()=>g8t,pcb_via_trace_clearance_error:()=>f8t,point:()=>Li,point3:()=>I6,point_with_bulge:()=>Wwt,port_arrangement:()=>bwt,position:()=>K8o,position3:()=>j8o,resistance:()=>$ge,ring:()=>GRe,rotation:()=>rm,route_hint_point:()=>jwt,schematic_arc:()=>Bwt,schematic_box:()=>fwt,schematic_circle:()=>Mwt,schematic_component:()=>Swt,schematic_component_port_arrangement_by_sides:()=>Iwt,schematic_component_port_arrangement_by_size:()=>Cwt,schematic_debug_line:()=>Lwt,schematic_debug_object:()=>Hwt,schematic_debug_object_base:()=>tfe,schematic_debug_point:()=>Fwt,schematic_debug_rect:()=>kwt,schematic_error:()=>Rwt,schematic_group:()=>Gwt,schematic_layout_error:()=>Qwt,schematic_line:()=>vwt,schematic_manual_edit_conflict_warning:()=>zwt,schematic_net_label:()=>Nwt,schematic_path:()=>ywt,schematic_pin_styles:()=>xwt,schematic_port:()=>Dwt,schematic_rect:()=>Ewt,schematic_sheet:()=>Uwt,schematic_symbol:()=>Pwt,schematic_table:()=>Ywt,schematic_table_cell:()=>Vwt,schematic_text:()=>Twt,schematic_trace:()=>wwt,schematic_voltage_probe:()=>Owt,simulation_ac_current_source:()=>T8t,simulation_ac_voltage_source:()=>M8t,simulation_current_source:()=>D8t,simulation_dc_current_source:()=>w8t,simulation_dc_voltage_source:()=>E8t,simulation_experiment:()=>R8t,simulation_op_amp:()=>H8t,simulation_switch:()=>k8t,simulation_transient_voltage_graph:()=>Q8t,simulation_unknown_experiment_error:()=>F8t,simulation_voltage_probe:()=>L8t,simulation_voltage_source:()=>B8t,size:()=>Zke,source_ambiguous_port_reference:()=>lwt,source_board:()=>cwt,source_component_base:()=>Vd,source_component_internal_connection:()=>iwt,source_component_pins_underspecified_warning:()=>Awt,source_failed_to_create_component_error:()=>J9t,source_group:()=>swt,source_i2c_misconfigured_error:()=>SLe,source_interconnect:()=>ewt,source_invalid_component_property_error:()=>xLe,source_manually_placed_via:()=>hwt,source_missing_manufacturer_part_number_warning:()=>bLe,source_missing_property_error:()=>q9t,source_net:()=>awt,source_no_ground_pin_defined_warning:()=>pwt,source_no_power_pin_defined_warning:()=>mwt,source_pcb_ground_plane:()=>dwt,source_pin_attributes:()=>X9t,source_pin_missing_trace_warning:()=>ILe,source_pin_must_be_connected_error:()=>_wt,source_port:()=>owt,source_project_metadata:()=>yLe,source_property_ignored_warning:()=>$9t,source_simple_battery:()=>aLe,source_simple_capacitor:()=>nLe,source_simple_chip:()=>rLe,source_simple_connector:()=>j9t,source_simple_crystal:()=>K9t,source_simple_current_source:()=>W9t,source_simple_diode:()=>efe,source_simple_fiducial:()=>V9t,source_simple_ground:()=>U9t,source_simple_inductor:()=>cLe,source_simple_led:()=>iLe,source_simple_mosfet:()=>_Le,source_simple_op_amp:()=>gLe,source_simple_pin_header:()=>uLe,source_simple_pinout:()=>hLe,source_simple_potentiometer:()=>dLe,source_simple_power_source:()=>sLe,source_simple_push_button:()=>lLe,source_simple_resistor:()=>oLe,source_simple_resonator:()=>mLe,source_simple_switch:()=>fLe,source_simple_test_point:()=>ALe,source_simple_transistor:()=>pLe,source_simple_voltage_probe:()=>Z9t,source_simple_voltage_source:()=>twt,source_trace:()=>rwt,source_trace_not_connected_error:()=>CLe,supplier_footprint_mismatch_warning:()=>r8t,supplier_name:()=>tLe,time:()=>X8o,timestamp:()=>w9t,unknown_error_finding_part:()=>gwt,visible_layer:()=>F_,voltage:()=>R6,wave_shape:()=>vLe});var kc,Iy,DDe,v={};Vge(v,{BRAND:()=>l8o,DIRTY:()=>G_e,EMPTY_PATH:()=>G7o,INVALID:()=>qr,NEVER:()=>W8o,OK:()=>A1,ParseStatus:()=>Ny,Schema:()=>Sa,ZodAny:()=>WV,ZodArray:()=>qk,ZodBigInt:()=>Zee,ZodBoolean:()=>ete,ZodBranded:()=>qke,ZodCatch:()=>dte,ZodDate:()=>tte,ZodDefault:()=>lte,ZodDiscriminatedUnion:()=>x9t,ZodEffects:()=>hS,ZodEnum:()=>Ote,ZodError:()=>pS,ZodFirstPartyTypeKind:()=>is,ZodFunction:()=>I9t,ZodIntersection:()=>rte,ZodIssueCode:()=>No,ZodLazy:()=>ste,ZodLiteral:()=>ate,ZodMap:()=>U_e,ZodNaN:()=>X_e,ZodNativeEnum:()=>cte,ZodNever:()=>B6,ZodNull:()=>ote,ZodNullable:()=>$8,ZodNumber:()=>$ee,ZodObject:()=>DI,ZodOptional:()=>RE,ZodParsedType:()=>Ri,ZodPipeline:()=>Jke,ZodPromise:()=>XV,ZodReadonly:()=>ute,ZodRecord:()=>C9t,ZodSchema:()=>Sa,ZodSet:()=>W_e,ZodString:()=>UV,ZodSymbol:()=>Y_e,ZodTransformer:()=>hS,ZodTuple:()=>J8,ZodType:()=>Sa,ZodUndefined:()=>nte,ZodUnion:()=>ite,ZodUnknown:()=>kk,ZodVoid:()=>V_e,addIssueToContext:()=>_i,any:()=>f8o,array:()=>I8o,bigint:()=>m8o,boolean:()=>E9t,coerce:()=>U8o,custom:()=>S9t,date:()=>p8o,datetimeRegex:()=>y9t,defaultErrorMap:()=>VV,discriminatedUnion:()=>v8o,effect:()=>zPt,enum:()=>Q8o,function:()=>D8o,getErrorMap:()=>O_e,getParsedType:()=>g6,instanceof:()=>u8o,intersection:()=>E8o,isAborted:()=>LRe,isAsync:()=>Jee,isDirty:()=>FRe,isValid:()=>jk,late:()=>d8o,lazy:()=>N8o,literal:()=>R8o,makeIssue:()=>z_e,map:()=>w8o,nan:()=>h8o,nativeEnum:()=>k8o,never:()=>x8o,null:()=>g8o,nullable:()=>H8o,number:()=>v9t,object:()=>b8o,objectUtil:()=>DDe,oboolean:()=>V8o,onumber:()=>Y8o,optional:()=>F8o,ostring:()=>G8o,pipeline:()=>z8o,preprocess:()=>O8o,promise:()=>L8o,quotelessJson:()=>O7o,record:()=>B8o,set:()=>T8o,setErrorMap:()=>z7o,strictObject:()=>S8o,string:()=>P9t,symbol:()=>A8o,transformer:()=>zPt,tuple:()=>M8o,undefined:()=>_8o,union:()=>P8o,unknown:()=>y8o,util:()=>kc,void:()=>C8o}),(Iy=kc||(kc={})).assertEqual=(e)=>{},Iy.assertIs=function(e){},Iy.assertNever=function(e){throw Error()},Iy.arrayToEnum=(e)=>{let t={};for(let n of e)t[n]=n;return t},Iy.getValidEnumValues=(e)=>{let t=Iy.objectKeys(e).filter((o)=>typeof e[e[o]]!="number"),n={};for(let o of t)n[o]=e[o];return Iy.objectValues(n)},Iy.objectValues=(e)=>Iy.objectKeys(e).map(function(t){return e[t]}),Iy.objectKeys=typeof Object.keys=="function"?(e)=>Object.keys(e):(e)=>{let t=[];for(let n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.push(n);return t},Iy.find=(e,t)=>{for(let n of e)if(t(n))return n},Iy.isInteger=typeof Number.isInteger=="function"?(e)=>Number.isInteger(e):(e)=>typeof e=="number"&&Number.isFinite(e)&&Math.floor(e)===e,Iy.joinValues=function(e,t=" | "){return e.map((n)=>typeof n=="string"?`'${n}'`:n).join(t)},Iy.jsonStringifyReplacer=(e,t)=>typeof t=="bigint"?t.toString():t,(DDe||(DDe={})).mergeShapes=(e,t)=>({...e,...t});var Ri=kc.arrayToEnum(["string","nan","number","integer","float","boolean","date","bigint","symbol","function","undefined","null","array","object","unknown","promise","void","never","map","set"]),g6=(e)=>{switch(typeof e){case"undefined":return Ri.undefined;case"string":return Ri.string;case"number":return Number.isNaN(e)?Ri.nan:Ri.number;case"boolean":return Ri.boolean;case"function":return Ri.function;case"bigint":return Ri.bigint;case"symbol":return Ri.symbol;case"object":return Array.isArray(e)?Ri.array:e===null?Ri.null:e.then&&typeof e.then=="function"&&e.catch&&typeof e.catch=="function"?Ri.promise:typeof Map<"u"&&e instanceof Map?Ri.map:typeof Set<"u"&&e instanceof Set?Ri.set:typeof Date<"u"&&e instanceof Date?Ri.date:Ri.object;default:return Ri.unknown}},No=kc.arrayToEnum(["invalid_type","invalid_literal","custom","invalid_union","invalid_union_discriminator","invalid_enum_value","unrecognized_keys","invalid_arguments","invalid_return_type","invalid_date","invalid_string","too_small","too_big","invalid_intersection_types","not_multiple_of","not_finite"]),O7o=(e)=>JSON.stringify(e,null,2).replace(/"([^"]+)":/g,"$1:"),pS=class e extends Error{get errors(){return this.issues}constructor(t){super(),this.issues=[],this.addIssue=(o)=>{this.issues=[...this.issues,o]},this.addIssues=(o=[])=>{this.issues=[...this.issues,...o]};let n=new.target.prototype;Object.setPrototypeOf?Object.setPrototypeOf(this,n):this.__proto__=n,this.name="ZodError",this.issues=t}format(t){let n=t||function(r){return r.message},o={_errors:[]},i=(r)=>{for(let s of r.issues)if(s.code==="invalid_union")s.unionErrors.map(i);else if(s.code==="invalid_return_type")i(s.returnTypeError);else if(s.code==="invalid_arguments")i(s.argumentsError);else if(s.path.length===0)o._errors.push(n(s));else{let a=o,c=0;for(;c<s.path.length;){let l=s.path[c];c===s.path.length-1?(a[l]=a[l]||{_errors:[]},a[l]._errors.push(n(s))):a[l]=a[l]||{_errors:[]},a=a[l],c++}}};return i(this),o}static assert(t){if(!(t instanceof e))throw Error(`Not a ZodError: ${t}`)}toString(){return this.message}get message(){return JSON.stringify(this.issues,kc.jsonStringifyReplacer,2)}get isEmpty(){return this.issues.length===0}flatten(t=(n)=>n.message){let n={},o=[];for(let i of this.issues)if(i.path.length>0){let r=i.path[0];n[r]=n[r]||[],n[r].push(t(i))}else o.push(t(i));return{formErrors:o,fieldErrors:n}}get formErrors(){return this.flatten()}};pS.create=(e)=>new pS(e);var VV=(e,t)=>{let n;switch(e.code){case No.invalid_type:n=e.received===Ri.undefined?"Required":`Expected ${e.expected}, received ${e.received}`;break;case No.invalid_literal:n=`Invalid literal value, expected ${JSON.stringify(e.expected,kc.jsonStringifyReplacer)}`;break;case No.unrecognized_keys:n=`Unrecognized key(s) in object: ${kc.joinValues(e.keys,", ")}`;break;case No.invalid_union:n="Invalid input";break;case No.invalid_union_discriminator:n=`Invalid discriminator value. Expected ${kc.joinValues(e.options)}`;break;case No.invalid_enum_value:n=`Invalid enum value. Expected ${kc.joinValues(e.options)}, received '${e.received}'`;break;case No.invalid_arguments:n="Invalid function arguments";break;case No.invalid_return_type:n="Invalid function return type";break;case No.invalid_date:n="Invalid date";break;case No.invalid_string:typeof e.validation=="object"?"includes"in e.validation?(n=`Invalid input: must include "${e.validation.includes}"`,typeof e.validation.position=="number"&&(n=`${n} at one or more positions greater than or equal to ${e.validation.position}`)):("startsWith"in e.validation)?n=`Invalid input: must start with "${e.validation.startsWith}"`:("endsWith"in e.validation)?n=`Invalid input: must end with "${e.validation.endsWith}"`:kc.assertNever(e.validation):n=e.validation!=="regex"?`Invalid ${e.validation}`:"Invalid";break;case No.too_small:n=e.type==="array"?`Array must contain ${e.exact?"exactly":e.inclusive?"at least":"more than"} ${e.minimum} element(s)`:e.type==="string"?`String must contain ${e.exact?"exactly":e.inclusive?"at least":"over"} ${e.minimum} character(s)`:e.type==="number"||e.type==="bigint"?`Number must be ${e.exact?"exactly equal to ":e.inclusive?"greater than or equal to ":"greater than "}${e.minimum}`:e.type==="date"?`Date must be ${e.exact?"exactly equal to ":e.inclusive?"greater than or equal to ":"greater than "}${new Date(Number(e.minimum))}`:"Invalid input";break;case No.too_big:n=e.type==="array"?`Array must contain ${e.exact?"exactly":e.inclusive?"at most":"less than"} ${e.maximum} element(s)`:e.type==="string"?`String must contain ${e.exact?"exactly":e.inclusive?"at most":"under"} ${e.maximum} character(s)`:e.type==="number"?`Number must be ${e.exact?"exactly":e.inclusive?"less than or equal to":"less than"} ${e.maximum}`:e.type==="bigint"?`BigInt must be ${e.exact?"exactly":e.inclusive?"less than or equal to":"less than"} ${e.maximum}`:e.type==="date"?`Date must be ${e.exact?"exactly":e.inclusive?"smaller than or equal to":"smaller than"} ${new Date(Number(e.maximum))}`:"Invalid input";break;case No.custom:n="Invalid input";break;case No.invalid_intersection_types:n="Intersection results could not be merged";break;case No.not_multiple_of:n=`Number must be a multiple of ${e.multipleOf}`;break;case No.not_finite:n="Number must be finite";break;default:n=t.defaultError,kc.assertNever(e)}return{message:n}},_9t=VV;function z7o(e){_9t=e}function O_e(){return _9t}var z_e=(e)=>{let{data:t,path:n,errorMaps:o,issueData:i}=e,r=[...n,...i.path||[]],s={...i,path:r};if(i.message!==void 0)return{...i,path:r,message:i.message};let a="",c=o.filter((l)=>!!l).slice().reverse();for(let l of c)a=l(s,{data:t,defaultError:a}).message;return{...i,path:r,message:a}},G7o=[];function _i(e,t){let n=O_e(),o=z_e({issueData:t,data:e.data,path:e.path,errorMaps:[e.common.contextualErrorMap,e.schemaErrorMap,n,n===VV?void 0:VV].filter((i)=>!!i)});e.common.issues.push(o)}var sr,FPt,Ny=class e{constructor(){this.value="valid"}dirty(){this.value==="valid"&&(this.value="dirty")}abort(){this.value!=="aborted"&&(this.value="aborted")}static mergeArray(t,n){let o=[];for(let i of n){if(i.status==="aborted")return qr;i.status==="dirty"&&t.dirty(),o.push(i.value)}return{status:t.value,value:o}}static async mergeObjectAsync(t,n){let o=[];for(let i of n){let r=await i.key,s=await i.value;o.push({key:r,value:s})}return e.mergeObjectSync(t,o)}static mergeObjectSync(t,n){let o={};for(let i of n){let{key:r,value:s}=i;if(r.status==="aborted")return qr;if(s.status==="aborted")return qr;r.status==="dirty"&&t.dirty(),s.status==="dirty"&&t.dirty(),r.value==="__proto__"||s.value===void 0&&!i.alwaysSet||(o[r.value]=s.value)}return{status:t.value,value:o}}},qr=Object.freeze({status:"aborted"}),G_e=(e)=>({status:"dirty",value:e}),A1=(e)=>({status:"valid",value:e}),LRe=(e)=>e.status==="aborted",FRe=(e)=>e.status==="dirty",jk=(e)=>e.status==="valid",Jee=(e)=>typeof Promise<"u"&&e instanceof Promise;(FPt=sr||(sr={})).errToObj=(e)=>typeof e=="string"?{message:e}:e||{},FPt.toString=(e)=>typeof e=="string"?e:e?.message;var zE=class{constructor(e,t,n,o){this._cachedPath=[],this.parent=e,this.data=t,this._path=n,this._key=o}get path(){return this._cachedPath.length||(Array.isArray(this._key)?this._cachedPath.push(...this._path,...this._key):this._cachedPath.push(...this._path,this._key)),this._cachedPath}},HPt=(e,t)=>{if(jk(t))return{success:!0,data:t.value};if(!e.common.issues.length)throw Error("Validation failed but no issues detected.");return{success:!1,get error(){if(this._error)return this._error;let n=new pS(e.common.issues);return this._error=n,this._error}}};function la(e){if(!e)return{};let{errorMap:t,invalid_type_error:n,required_error:o,description:i}=e;if(t&&(n||o))throw Error(`Can't use "invalid_type_error" or "required_error" in conjunction with custom error map.`);if(t)return{errorMap:t,description:i};return{errorMap:(r,s)=>{let{message:a}=e;return r.code==="invalid_enum_value"?{message:a??s.defaultError}:s.data===void 0?{message:a??o??s.defaultError}:r.code!=="invalid_type"?{message:s.defaultError}:{message:a??n??s.defaultError}},description:i}}var NDe,Sa=class{get description(){return this._def.description}_getType(e){return g6(e.data)}_getOrReturnCtx(e,t){return t||{common:e.parent.common,data:e.data,parsedType:g6(e.data),schemaErrorMap:this._def.errorMap,path:e.path,parent:e.parent}}_processInputParams(e){return{status:new Ny,ctx:{common:e.parent.common,data:e.data,parsedType:g6(e.data),schemaErrorMap:this._def.errorMap,path:e.path,parent:e.parent}}}_parseSync(e){let t=this._parse(e);if(Jee(t))throw Error("Synchronous parse encountered promise.");return t}_parseAsync(e){let t=this._parse(e);return Promise.resolve(t)}parse(e,t){let n=this.safeParse(e,t);if(n.success)return n.data;throw n.error}safeParse(e,t){let n={common:{issues:[],async:t?.async??!1,contextualErrorMap:t?.errorMap},path:t?.path||[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:g6(e)},o=this._parseSync({data:e,path:n.path,parent:n});return HPt(n,o)}"~validate"(e){let t={common:{issues:[],async:!!this["~standard"].async},path:[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:g6(e)};if(!this["~standard"].async)try{let n=this._parseSync({data:e,path:[],parent:t});return jk(n)?{value:n.value}:{issues:t.common.issues}}catch(n){n?.message?.toLowerCase()?.includes("encountered")&&(this["~standard"].async=!0),t.common={issues:[],async:!0}}return this._parseAsync({data:e,path:[],parent:t}).then((n)=>jk(n)?{value:n.value}:{issues:t.common.issues})}async parseAsync(e,t){let n=await this.safeParseAsync(e,t);if(n.success)return n.data;throw n.error}async safeParseAsync(e,t){let n={common:{issues:[],contextualErrorMap:t?.errorMap,async:!0},path:t?.path||[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:g6(e)},o=this._parse({data:e,path:n.path,parent:n}),i=await(Jee(o)?o:Promise.resolve(o));return HPt(n,i)}refine(e,t){let n=(o)=>typeof t=="string"||t===void 0?{message:t}:typeof t=="function"?t(o):t;return this._refinement((o,i)=>{let r=e(o),s=()=>i.addIssue({code:No.custom,...n(o)});return typeof Promise<"u"&&r instanceof Promise?r.then((a)=>!!a||(s(),!1)):!!r||(s(),!1)})}refinement(e,t){return this._refinement((n,o)=>!!e(n)||(o.addIssue(typeof t=="function"?t(n,o):t),!1))}_refinement(e){return new hS({schema:this,typeName:is.ZodEffects,effect:{type:"refinement",refinement:e}})}superRefine(e){return this._refinement(e)}constructor(e){this.spa=this.safeParseAsync,this._def=e,this.parse=this.parse.bind(this),this.safeParse=this.safeParse.bind(this),this.parseAsync=this.parseAsync.bind(this),this.safeParseAsync=this.safeParseAsync.bind(this),this.spa=this.spa.bind(this),this.refine=this.refine.bind(this),this.refinement=this.refinement.bind(this),this.superRefine=this.superRefine.bind(this),this.optional=this.optional.bind(this),this.nullable=this.nullable.bind(this),this.nullish=this.nullish.bind(this),this.array=this.array.bind(this),this.promise=this.promise.bind(this),this.or=this.or.bind(this),this.and=this.and.bind(this),this.transform=this.transform.bind(this),this.brand=this.brand.bind(this),this.default=this.default.bind(this),this.catch=this.catch.bind(this),this.describe=this.describe.bind(this),this.pipe=this.pipe.bind(this),this.readonly=this.readonly.bind(this),this.isNullable=this.isNullable.bind(this),this.isOptional=this.isOptional.bind(this),this["~standard"]={version:1,vendor:"zod",validate:(t)=>this["~validate"](t)}}optional(){return RE.create(this,this._def)}nullable(){return $8.create(this,this._def)}nullish(){return this.nullable().optional()}array(){return qk.create(this)}promise(){return XV.create(this,this._def)}or(e){return ite.create([this,e],this._def)}and(e){return rte.create(this,e,this._def)}transform(e){return new hS({...la(this._def),schema:this,typeName:is.ZodEffects,effect:{type:"transform",transform:e}})}default(e){let t=typeof e=="function"?e:()=>e;return new lte({...la(this._def),innerType:this,defaultValue:t,typeName:is.ZodDefault})}brand(){return new qke({typeName:is.ZodBranded,type:this,...la(this._def)})}catch(e){let t=typeof e=="function"?e:()=>e;return new dte({...la(this._def),innerType:this,catchValue:t,typeName:is.ZodCatch})}describe(e){return new this.constructor({...this._def,description:e})}pipe(e){return Jke.create(this,e)}readonly(){return ute.create(this)}isOptional(){return this.safeParse(void 0).success}isNullable(){return this.safeParse(null).success}},Y7o=/^c[^\s-]{8,}$/i,V7o=/^[0-9a-z]+$/,U7o=/^[0-9A-HJKMNP-TV-Z]{26}$/i,W7o=/^[0-9a-fA-F]{8}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{12}$/i,X7o=/^[a-z0-9_-]{21}$/i,K7o=/^[A-Za-z0-9-_]+\.[A-Za-z0-9-_]+\.[A-Za-z0-9-_]*$/,j7o=/^[-+]?P(?!$)(?:(?:[-+]?\d+Y)|(?:[-+]?\d+[.,]\d+Y$))?(?:(?:[-+]?\d+M)|(?:[-+]?\d+[.,]\d+M$))?(?:(?:[-+]?\d+W)|(?:[-+]?\d+[.,]\d+W$))?(?:(?:[-+]?\d+D)|(?:[-+]?\d+[.,]\d+D$))?(?:T(?=[\d+-])(?:(?:[-+]?\d+H)|(?:[-+]?\d+[.,]\d+H$))?(?:(?:[-+]?\d+M)|(?:[-+]?\d+[.,]\d+M$))?(?:[-+]?\d+(?:[.,]\d+)?S)?)??$/,q7o=/^(?!\.)(?!.*\.\.)([A-Z0-9_'+\-\.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9\-]*\.)+[A-Z]{2,}$/i,J7o=/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/,$7o=/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\/(3[0-2]|[12]?[0-9])$/,Z7o=/^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$/,e8o=/^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/,t8o=/^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/,n8o=/^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/,g9t="((\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-((0[13578]|1[02])-(0[1-9]|[12]\\d|3[01])|(0[469]|11)-(0[1-9]|[12]\\d|30)|(02)-(0[1-9]|1\\d|2[0-8])))",o8o=new RegExp(`^${g9t}$`);function f9t(e){let t="[0-5]\\d";return e.precision?t=`${t}\\.\\d{${e.precision}}`:e.precision==null&&(t=`${t}(\\.\\d+)?`),`([01]\\d|2[0-3]):[0-5]\\d(:${t})${e.precision?"+":"?"}`}function i8o(e){return new RegExp(`^${f9t(e)}$`)}function y9t(e){let t=`${g9t}T${f9t(e)}`,n=[];return n.push(e.local?"Z?":"Z"),e.offset&&n.push("([+-]\\d{2}:?\\d{2})"),t=`${t}(${n.join("|")})`,new RegExp(`^${t}$`)}function r8o(e,t){return!(t!=="v4"&&t||!J7o.test(e))||!(t!=="v6"&&t||!Z7o.test(e))}function s8o(e,t){if(!K7o.test(e))return!1;try{let[n]=e.split(".");if(!n)return!1;let o=n.replace(/-/g,"+").replace(/_/g,"/").padEnd(n.length+(4-n.length%4)%4,"="),i=JSON.parse(atob(o));return typeof i=="object"&&i!==null&&((!("typ"in i)||i?.typ==="JWT")&&(!!i.alg&&(!t||i.alg===t)))}catch{return!1}}function a8o(e,t){return!(t!=="v4"&&t||!$7o.test(e))||!(t!=="v6"&&t||!e8o.test(e))}var UV=class e extends Sa{_parse(t){if(this._def.coerce&&(t.data=String(t.data)),this._getType(t)!==Ri.string){let i=this._getOrReturnCtx(t);return _i(i,{code:No.invalid_type,expected:Ri.string,received:i.parsedType}),qr}let n=new Ny,o;for(let i of this._def.checks)if(i.kind==="min")t.data.length<i.value&&(o=this._getOrReturnCtx(t,o),_i(o,{code:No.too_small,minimum:i.value,type:"string",inclusive:!0,exact:!1,message:i.message}),n.dirty());else if(i.kind==="max")t.data.length>i.value&&(o=this._getOrReturnCtx(t,o),_i(o,{code:No.too_big,maximum:i.value,type:"string",inclusive:!0,exact:!1,message:i.message}),n.dirty());else if(i.kind==="length"){let r=t.data.length>i.value,s=t.data.length<i.value;(r||s)&&(o=this._getOrReturnCtx(t,o),r?_i(o,{code:No.too_big,maximum:i.value,type:"string",inclusive:!0,exact:!0,message:i.message}):s&&_i(o,{code:No.too_small,minimum:i.value,type:"string",inclusive:!0,exact:!0,message:i.message}),n.dirty())}else if(i.kind==="email")q7o.test(t.data)||(o=this._getOrReturnCtx(t,o),_i(o,{validation:"email",code:No.invalid_string,message:i.message}),n.dirty());else if(i.kind==="emoji")NDe||(NDe=new RegExp("^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$","u")),NDe.test(t.data)||(o=this._getOrReturnCtx(t,o),_i(o,{validation:"emoji",code:No.invalid_string,message:i.message}),n.dirty());else if(i.kind==="uuid")W7o.test(t.data)||(o=this._getOrReturnCtx(t,o),_i(o,{validation:"uuid",code:No.invalid_string,message:i.message}),n.dirty());else if(i.kind==="nanoid")X7o.test(t.data)||(o=this._getOrReturnCtx(t,o),_i(o,{validation:"nanoid",code:No.invalid_string,message:i.message}),n.dirty());else if(i.kind==="cuid")Y7o.test(t.data)||(o=this._getOrReturnCtx(t,o),_i(o,{validation:"cuid",code:No.invalid_string,message:i.message}),n.dirty());else if(i.kind==="cuid2")V7o.test(t.data)||(o=this._getOrReturnCtx(t,o),_i(o,{validation:"cuid2",code:No.invalid_string,message:i.message}),n.dirty());else if(i.kind==="ulid")U7o.test(t.data)||(o=this._getOrReturnCtx(t,o),_i(o,{validation:"ulid",code:No.invalid_string,message:i.message}),n.dirty());else if(i.kind==="url")try{new URL(t.data)}catch{o=this._getOrReturnCtx(t,o),_i(o,{validation:"url",code:No.invalid_string,message:i.message}),n.dirty()}else if(i.kind==="regex")i.regex.lastIndex=0,i.regex.test(t.data)||(o=this._getOrReturnCtx(t,o),_i(o,{validation:"regex",code:No.invalid_string,message:i.message}),n.dirty());else if(i.kind==="trim")t.data=t.data.trim();else if(i.kind==="includes")t.data.includes(i.value,i.position)||(o=this._getOrReturnCtx(t,o),_i(o,{code:No.invalid_string,validation:{includes:i.value,position:i.position},message:i.message}),n.dirty());else if(i.kind==="toLowerCase")t.data=t.data.toLowerCase();else if(i.kind==="toUpperCase")t.data=t.data.toUpperCase();else if(i.kind==="startsWith")t.data.startsWith(i.value)||(o=this._getOrReturnCtx(t,o),_i(o,{code:No.invalid_string,validation:{startsWith:i.value},message:i.message}),n.dirty());else if(i.kind==="endsWith")t.data.endsWith(i.value)||(o=this._getOrReturnCtx(t,o),_i(o,{code:No.invalid_string,validation:{endsWith:i.value},message:i.message}),n.dirty());else if(i.kind==="datetime")y9t(i).test(t.data)||(o=this._getOrReturnCtx(t,o),_i(o,{code:No.invalid_string,validation:"datetime",message:i.message}),n.dirty());else if(i.kind==="date")o8o.test(t.data)||(o=this._getOrReturnCtx(t,o),_i(o,{code:No.invalid_string,validation:"date",message:i.message}),n.dirty());else if(i.kind==="time")i8o(i).test(t.data)||(o=this._getOrReturnCtx(t,o),_i(o,{code:No.invalid_string,validation:"time",message:i.message}),n.dirty());else i.kind==="duration"?j7o.test(t.data)||(o=this._getOrReturnCtx(t,o),_i(o,{validation:"duration",code:No.invalid_string,message:i.message}),n.dirty()):i.kind==="ip"?r8o(t.data,i.version)||(o=this._getOrReturnCtx(t,o),_i(o,{validation:"ip",code:No.invalid_string,message:i.message}),n.dirty()):i.kind==="jwt"?s8o(t.data,i.alg)||(o=this._getOrReturnCtx(t,o),_i(o,{validation:"jwt",code:No.invalid_string,message:i.message}),n.dirty()):i.kind==="cidr"?a8o(t.data,i.version)||(o=this._getOrReturnCtx(t,o),_i(o,{validation:"cidr",code:No.invalid_string,message:i.message}),n.dirty()):i.kind==="base64"?t8o.test(t.data)||(o=this._getOrReturnCtx(t,o),_i(o,{validation:"base64",code:No.invalid_string,message:i.message}),n.dirty()):i.kind==="base64url"?n8o.test(t.data)||(o=this._getOrReturnCtx(t,o),_i(o,{validation:"base64url",code:No.invalid_string,message:i.message}),n.dirty()):kc.assertNever(i);return{status:n.value,value:t.data}}_regex(t,n,o){return this.refinement((i)=>t.test(i),{validation:n,code:No.invalid_string,...sr.errToObj(o)})}_addCheck(t){return new e({...this._def,checks:[...this._def.checks,t]})}email(t){return this._addCheck({kind:"email",...sr.errToObj(t)})}url(t){return this._addCheck({kind:"url",...sr.errToObj(t)})}emoji(t){return this._addCheck({kind:"emoji",...sr.errToObj(t)})}uuid(t){return this._addCheck({kind:"uuid",...sr.errToObj(t)})}nanoid(t){return this._addCheck({kind:"nanoid",...sr.errToObj(t)})}cuid(t){return this._addCheck({kind:"cuid",...sr.errToObj(t)})}cuid2(t){return this._addCheck({kind:"cuid2",...sr.errToObj(t)})}ulid(t){return this._addCheck({kind:"ulid",...sr.errToObj(t)})}base64(t){return this._addCheck({kind:"base64",...sr.errToObj(t)})}base64url(t){return this._addCheck({kind:"base64url",...sr.errToObj(t)})}jwt(t){return this._addCheck({kind:"jwt",...sr.errToObj(t)})}ip(t){return this._addCheck({kind:"ip",...sr.errToObj(t)})}cidr(t){return this._addCheck({kind:"cidr",...sr.errToObj(t)})}datetime(t){return typeof t=="string"?this._addCheck({kind:"datetime",precision:null,offset:!1,local:!1,message:t}):this._addCheck({kind:"datetime",precision:t?.precision===void 0?null:t?.precision,offset:t?.offset??!1,local:t?.local??!1,...sr.errToObj(t?.message)})}date(t){return this._addCheck({kind:"date",message:t})}time(t){return typeof t=="string"?this._addCheck({kind:"time",precision:null,message:t}):this._addCheck({kind:"time",precision:t?.precision===void 0?null:t?.precision,...sr.errToObj(t?.message)})}duration(t){return this._addCheck({kind:"duration",...sr.errToObj(t)})}regex(t,n){return this._addCheck({kind:"regex",regex:t,...sr.errToObj(n)})}includes(t,n){return this._addCheck({kind:"includes",value:t,position:n?.position,...sr.errToObj(n?.message)})}startsWith(t,n){return this._addCheck({kind:"startsWith",value:t,...sr.errToObj(n)})}endsWith(t,n){return this._addCheck({kind:"endsWith",value:t,...sr.errToObj(n)})}min(t,n){return this._addCheck({kind:"min",value:t,...sr.errToObj(n)})}max(t,n){return this._addCheck({kind:"max",value:t,...sr.errToObj(n)})}length(t,n){return this._addCheck({kind:"length",value:t,...sr.errToObj(n)})}nonempty(t){return this.min(1,sr.errToObj(t))}trim(){return new e({...this._def,checks:[...this._def.checks,{kind:"trim"}]})}toLowerCase(){return new e({...this._def,checks:[...this._def.checks,{kind:"toLowerCase"}]})}toUpperCase(){return new e({...this._def,checks:[...this._def.checks,{kind:"toUpperCase"}]})}get isDatetime(){return!!this._def.checks.find((t)=>t.kind==="datetime")}get isDate(){return!!this._def.checks.find((t)=>t.kind==="date")}get isTime(){return!!this._def.checks.find((t)=>t.kind==="time")}get isDuration(){return!!this._def.checks.find((t)=>t.kind==="duration")}get isEmail(){return!!this._def.checks.find((t)=>t.kind==="email")}get isURL(){return!!this._def.checks.find((t)=>t.kind==="url")}get isEmoji(){return!!this._def.checks.find((t)=>t.kind==="emoji")}get isUUID(){return!!this._def.checks.find((t)=>t.kind==="uuid")}get isNANOID(){return!!this._def.checks.find((t)=>t.kind==="nanoid")}get isCUID(){return!!this._def.checks.find((t)=>t.kind==="cuid")}get isCUID2(){return!!this._def.checks.find((t)=>t.kind==="cuid2")}get isULID(){return!!this._def.checks.find((t)=>t.kind==="ulid")}get isIP(){return!!this._def.checks.find((t)=>t.kind==="ip")}get isCIDR(){return!!this._def.checks.find((t)=>t.kind==="cidr")}get isBase64(){return!!this._def.checks.find((t)=>t.kind==="base64")}get isBase64url(){return!!this._def.checks.find((t)=>t.kind==="base64url")}get minLength(){let t=null;for(let n of this._def.checks)n.kind==="min"&&(t===null||n.value>t)&&(t=n.value);return t}get maxLength(){let t=null;for(let n of this._def.checks)n.kind==="max"&&(t===null||n.value<t)&&(t=n.value);return t}};function c8o(e,t){let n=(e.toString().split(".")[1]||"").length,o=(t.toString().split(".")[1]||"").length,i=n>o?n:o;return Number.parseInt(e.toFixed(i).replace(".",""))%Number.parseInt(t.toFixed(i).replace(".",""))/10**i}UV.create=(e)=>new UV({checks:[],typeName:is.ZodString,coerce:e?.coerce??!1,...la(e)});var $ee=class e extends Sa{constructor(){super(...arguments),this.min=this.gte,this.max=this.lte,this.step=this.multipleOf}_parse(t){if(this._def.coerce&&(t.data=Number(t.data)),this._getType(t)!==Ri.number){let i=this._getOrReturnCtx(t);return _i(i,{code:No.invalid_type,expected:Ri.number,received:i.parsedType}),qr}let n,o=new Ny;for(let i of this._def.checks)if(i.kind==="int")kc.isInteger(t.data)||(n=this._getOrReturnCtx(t,n),_i(n,{code:No.invalid_type,expected:"integer",received:"float",message:i.message}),o.dirty());else if(i.kind==="min")(i.inclusive?t.data<i.value:t.data<=i.value)&&(n=this._getOrReturnCtx(t,n),_i(n,{code:No.too_small,minimum:i.value,type:"number",inclusive:i.inclusive,exact:!1,message:i.message}),o.dirty());else if(i.kind==="max")(i.inclusive?t.data>i.value:t.data>=i.value)&&(n=this._getOrReturnCtx(t,n),_i(n,{code:No.too_big,maximum:i.value,type:"number",inclusive:i.inclusive,exact:!1,message:i.message}),o.dirty());else i.kind==="multipleOf"?c8o(t.data,i.value)!==0&&(n=this._getOrReturnCtx(t,n),_i(n,{code:No.not_multiple_of,multipleOf:i.value,message:i.message}),o.dirty()):i.kind==="finite"?Number.isFinite(t.data)||(n=this._getOrReturnCtx(t,n),_i(n,{code:No.not_finite,message:i.message}),o.dirty()):kc.assertNever(i);return{status:o.value,value:t.data}}gte(t,n){return this.setLimit("min",t,!0,sr.toString(n))}gt(t,n){return this.setLimit("min",t,!1,sr.toString(n))}lte(t,n){return this.setLimit("max",t,!0,sr.toString(n))}lt(t,n){return this.setLimit("max",t,!1,sr.toString(n))}setLimit(t,n,o,i){return new e({...this._def,checks:[...this._def.checks,{kind:t,value:n,inclusive:o,message:sr.toString(i)}]})}_addCheck(t){return new e({...this._def,checks:[...this._def.checks,t]})}int(t){return this._addCheck({kind:"int",message:sr.toString(t)})}positive(t){return this._addCheck({kind:"min",value:0,inclusive:!1,message:sr.toString(t)})}negative(t){return this._addCheck({kind:"max",value:0,inclusive:!1,message:sr.toString(t)})}nonpositive(t){return this._addCheck({kind:"max",value:0,inclusive:!0,message:sr.toString(t)})}nonnegative(t){return this._addCheck({kind:"min",value:0,inclusive:!0,message:sr.toString(t)})}multipleOf(t,n){return this._addCheck({kind:"multipleOf",value:t,message:sr.toString(n)})}finite(t){return this._addCheck({kind:"finite",message:sr.toString(t)})}safe(t){return this._addCheck({kind:"min",inclusive:!0,value:Number.MIN_SAFE_INTEGER,message:sr.toString(t)})._addCheck({kind:"max",inclusive:!0,value:Number.MAX_SAFE_INTEGER,message:sr.toString(t)})}get minValue(){let t=null;for(let n of this._def.checks)n.kind==="min"&&(t===null||n.value>t)&&(t=n.value);return t}get maxValue(){let t=null;for(let n of this._def.checks)n.kind==="max"&&(t===null||n.value<t)&&(t=n.value);return t}get isInt(){return!!this._def.checks.find((t)=>t.kind==="int"||t.kind==="multipleOf"&&kc.isInteger(t.value))}get isFinite(){let t=null,n=null;for(let o of this._def.checks){if(o.kind==="finite"||o.kind==="int"||o.kind==="multipleOf")return!0;o.kind==="min"?(n===null||o.value>n)&&(n=o.value):o.kind==="max"&&(t===null||o.value<t)&&(t=o.value)}return Number.isFinite(n)&&Number.isFinite(t)}};$ee.create=(e)=>new $ee({checks:[],typeName:is.ZodNumber,coerce:e?.coerce||!1,...la(e)});var Zee=class e extends Sa{constructor(){super(...arguments),this.min=this.gte,this.max=this.lte}_parse(t){if(this._def.coerce)try{t.data=BigInt(t.data)}catch{return this._getInvalidInput(t)}if(this._getType(t)!==Ri.bigint)return this._getInvalidInput(t);let n,o=new Ny;for(let i of this._def.checks)if(i.kind==="min")(i.inclusive?t.data<i.value:t.data<=i.value)&&(n=this._getOrReturnCtx(t,n),_i(n,{code:No.too_small,type:"bigint",minimum:i.value,inclusive:i.inclusive,message:i.message}),o.dirty());else if(i.kind==="max")(i.inclusive?t.data>i.value:t.data>=i.value)&&(n=this._getOrReturnCtx(t,n),_i(n,{code:No.too_big,type:"bigint",maximum:i.value,inclusive:i.inclusive,message:i.message}),o.dirty());else i.kind==="multipleOf"?t.data%i.value!==BigInt(0)&&(n=this._getOrReturnCtx(t,n),_i(n,{code:No.not_multiple_of,multipleOf:i.value,message:i.message}),o.dirty()):kc.assertNever(i);return{status:o.value,value:t.data}}_getInvalidInput(t){let n=this._getOrReturnCtx(t);return _i(n,{code:No.invalid_type,expected:Ri.bigint,received:n.parsedType}),qr}gte(t,n){return this.setLimit("min",t,!0,sr.toString(n))}gt(t,n){return this.setLimit("min",t,!1,sr.toString(n))}lte(t,n){return this.setLimit("max",t,!0,sr.toString(n))}lt(t,n){return this.setLimit("max",t,!1,sr.toString(n))}setLimit(t,n,o,i){return new e({...this._def,checks:[...this._def.checks,{kind:t,value:n,inclusive:o,message:sr.toString(i)}]})}_addCheck(t){return new e({...this._def,checks:[...this._def.checks,t]})}positive(t){return this._addCheck({kind:"min",value:BigInt(0),inclusive:!1,message:sr.toString(t)})}negative(t){return this._addCheck({kind:"max",value:BigInt(0),inclusive:!1,message:sr.toString(t)})}nonpositive(t){return this._addCheck({kind:"max",value:BigInt(0),inclusive:!0,message:sr.toString(t)})}nonnegative(t){return this._addCheck({kind:"min",value:BigInt(0),inclusive:!0,message:sr.toString(t)})}multipleOf(t,n){return this._addCheck({kind:"multipleOf",value:t,message:sr.toString(n)})}get minValue(){let t=null;for(let n of this._def.checks)n.kind==="min"&&(t===null||n.value>t)&&(t=n.value);return t}get maxValue(){let t=null;for(let n of this._def.checks)n.kind==="max"&&(t===null||n.value<t)&&(t=n.value);return t}};Zee.create=(e)=>new Zee({checks:[],typeName:is.ZodBigInt,coerce:e?.coerce??!1,...la(e)});var ete=class extends Sa{_parse(e){if(this._def.coerce&&(e.data=Boolean(e.data)),this._getType(e)!==Ri.boolean){let t=this._getOrReturnCtx(e);return _i(t,{code:No.invalid_type,expected:Ri.boolean,received:t.parsedType}),qr}return A1(e.data)}};ete.create=(e)=>new ete({typeName:is.ZodBoolean,coerce:e?.coerce||!1,...la(e)});var tte=class e extends Sa{_parse(t){if(this._def.coerce&&(t.data=new Date(t.data)),this._getType(t)!==Ri.date){let i=this._getOrReturnCtx(t);return _i(i,{code:No.invalid_type,expected:Ri.date,received:i.parsedType}),qr}if(Number.isNaN(t.data.getTime()))return _i(this._getOrReturnCtx(t),{code:No.invalid_date}),qr;let n=new Ny,o;for(let i of this._def.checks)i.kind==="min"?t.data.getTime()<i.value&&(o=this._getOrReturnCtx(t,o),_i(o,{code:No.too_small,message:i.message,inclusive:!0,exact:!1,minimum:i.value,type:"date"}),n.dirty()):i.kind==="max"?t.data.getTime()>i.value&&(o=this._getOrReturnCtx(t,o),_i(o,{code:No.too_big,message:i.message,inclusive:!0,exact:!1,maximum:i.value,type:"date"}),n.dirty()):kc.assertNever(i);return{status:n.value,value:new Date(t.data.getTime())}}_addCheck(t){return new e({...this._def,checks:[...this._def.checks,t]})}min(t,n){return this._addCheck({kind:"min",value:t.getTime(),message:sr.toString(n)})}max(t,n){return this._addCheck({kind:"max",value:t.getTime(),message:sr.toString(n)})}get minDate(){let t=null;for(let n of this._def.checks)n.kind==="min"&&(t===null||n.value>t)&&(t=n.value);return t!=null?new Date(t):null}get maxDate(){let t=null;for(let n of this._def.checks)n.kind==="max"&&(t===null||n.value<t)&&(t=n.value);return t!=null?new Date(t):null}};tte.create=(e)=>new tte({checks:[],coerce:e?.coerce||!1,typeName:is.ZodDate,...la(e)});var Y_e=class extends Sa{_parse(e){if(this._getType(e)!==Ri.symbol){let t=this._getOrReturnCtx(e);return _i(t,{code:No.invalid_type,expected:Ri.symbol,received:t.parsedType}),qr}return A1(e.data)}};Y_e.create=(e)=>new Y_e({typeName:is.ZodSymbol,...la(e)});var nte=class extends Sa{_parse(e){if(this._getType(e)!==Ri.undefined){let t=this._getOrReturnCtx(e);return _i(t,{code:No.invalid_type,expected:Ri.undefined,received:t.parsedType}),qr}return A1(e.data)}};nte.create=(e)=>new nte({typeName:is.ZodUndefined,...la(e)});var ote=class extends Sa{_parse(e){if(this._getType(e)!==Ri.null){let t=this._getOrReturnCtx(e);return _i(t,{code:No.invalid_type,expected:Ri.null,received:t.parsedType}),qr}return A1(e.data)}};ote.create=(e)=>new ote({typeName:is.ZodNull,...la(e)});var WV=class extends Sa{constructor(){super(...arguments),this._any=!0}_parse(e){return A1(e.data)}};WV.create=(e)=>new WV({typeName:is.ZodAny,...la(e)});var kk=class extends Sa{constructor(){super(...arguments),this._unknown=!0}_parse(e){return A1(e.data)}};kk.create=(e)=>new kk({typeName:is.ZodUnknown,...la(e)});var B6=class extends Sa{_parse(e){let t=this._getOrReturnCtx(e);return _i(t,{code:No.invalid_type,expected:Ri.never,received:t.parsedType}),qr}};B6.create=(e)=>new B6({typeName:is.ZodNever,...la(e)});var V_e=class extends Sa{_parse(e){if(this._getType(e)!==Ri.undefined){let t=this._getOrReturnCtx(e);return _i(t,{code:No.invalid_type,expected:Ri.void,received:t.parsedType}),qr}return A1(e.data)}};V_e.create=(e)=>new V_e({typeName:is.ZodVoid,...la(e)});var qk=class e extends Sa{_parse(t){let{ctx:n,status:o}=this._processInputParams(t),i=this._def;if(n.parsedType!==Ri.array)return _i(n,{code:No.invalid_type,expected:Ri.array,received:n.parsedType}),qr;if(i.exactLength!==null){let s=n.data.length>i.exactLength.value,a=n.data.length<i.exactLength.value;(s||a)&&(_i(n,{code:s?No.too_big:No.too_small,minimum:a?i.exactLength.value:void 0,maximum:s?i.exactLength.value:void 0,type:"array",inclusive:!0,exact:!0,message:i.exactLength.message}),o.dirty())}if(i.minLength!==null&&n.data.length<i.minLength.value&&(_i(n,{code:No.too_small,minimum:i.minLength.value,type:"array",inclusive:!0,exact:!1,message:i.minLength.message}),o.dirty()),i.maxLength!==null&&n.data.length>i.maxLength.value&&(_i(n,{code:No.too_big,maximum:i.maxLength.value,type:"array",inclusive:!0,exact:!1,message:i.maxLength.message}),o.dirty()),n.common.async)return Promise.all([...n.data].map((s,a)=>i.type._parseAsync(new zE(n,s,n.path,a)))).then((s)=>Ny.mergeArray(o,s));let r=[...n.data].map((s,a)=>i.type._parseSync(new zE(n,s,n.path,a)));return Ny.mergeArray(o,r)}get element(){return this._def.type}min(t,n){return new e({...this._def,minLength:{value:t,message:sr.toString(n)}})}max(t,n){return new e({...this._def,maxLength:{value:t,message:sr.toString(n)}})}length(t,n){return new e({...this._def,exactLength:{value:t,message:sr.toString(n)}})}nonempty(t){return this.min(1,t)}};function qY(e){if(e instanceof DI){let t={};for(let n in e.shape){let o=e.shape[n];t[n]=RE.create(qY(o))}return new DI({...e._def,shape:()=>t})}return e instanceof qk?new qk({...e._def,type:qY(e.element)}):e instanceof RE?RE.create(qY(e.unwrap())):e instanceof $8?$8.create(qY(e.unwrap())):e instanceof J8?J8.create(e.items.map((t)=>qY(t))):e}qk.create=(e,t)=>new qk({type:e,minLength:null,maxLength:null,exactLength:null,typeName:is.ZodArray,...la(t)});var DI=class e extends Sa{constructor(){super(...arguments),this._cached=null,this.nonstrict=this.passthrough,this.augment=this.extend}_getCached(){if(this._cached!==null)return this._cached;let t=this._def.shape(),n=kc.objectKeys(t);return this._cached={shape:t,keys:n},this._cached}_parse(t){if(this._getType(t)!==Ri.object){let c=this._getOrReturnCtx(t);return _i(c,{code:No.invalid_type,expected:Ri.object,received:c.parsedType}),qr}let{status:n,ctx:o}=this._processInputParams(t),{shape:i,keys:r}=this._getCached(),s=[];if(!(this._def.catchall instanceof B6&&this._def.unknownKeys==="strip"))for(let c in o.data)r.includes(c)||s.push(c);let a=[];for(let c of r){let l=i[c],d=o.data[c];a.push({key:{status:"valid",value:c},value:l._parse(new zE(o,d,o.path,c)),alwaysSet:c in o.data})}if(this._def.catchall instanceof B6){let c=this._def.unknownKeys;if(c==="passthrough")for(let l of s)a.push({key:{status:"valid",value:l},value:{status:"valid",value:o.data[l]}});else if(c==="strict")s.length>0&&(_i(o,{code:No.unrecognized_keys,keys:s}),n.dirty());else if(c!=="strip")throw Error("Internal ZodObject error: invalid unknownKeys value.")}else{let c=this._def.catchall;for(let l of s){let d=o.data[l];a.push({key:{status:"valid",value:l},value:c._parse(new zE(o,d,o.path,l)),alwaysSet:l in o.data})}}return o.common.async?Promise.resolve().then(async()=>{let c=[];for(let l of a){let d=await l.key,u=await l.value;c.push({key:d,value:u,alwaysSet:l.alwaysSet})}return c}).then((c)=>Ny.mergeObjectSync(n,c)):Ny.mergeObjectSync(n,a)}get shape(){return this._def.shape()}strict(t){return sr.errToObj,new e({...this._def,unknownKeys:"strict",...t!==void 0?{errorMap:(n,o)=>{let i=this._def.errorMap?.(n,o).message??o.defaultError;return n.code==="unrecognized_keys"?{message:sr.errToObj(t).message??i}:{message:i}}}:{}})}strip(){return new e({...this._def,unknownKeys:"strip"})}passthrough(){return new e({...this._def,unknownKeys:"passthrough"})}extend(t){return new e({...this._def,shape:()=>({...this._def.shape(),...t})})}merge(t){return new e({unknownKeys:t._def.unknownKeys,catchall:t._def.catchall,shape:()=>({...this._def.shape(),...t._def.shape()}),typeName:is.ZodObject})}setKey(t,n){return this.augment({[t]:n})}catchall(t){return new e({...this._def,catchall:t})}pick(t){let n={};for(let o of kc.objectKeys(t))t[o]&&this.shape[o]&&(n[o]=this.shape[o]);return new e({...this._def,shape:()=>n})}omit(t){let n={};for(let o of kc.objectKeys(this.shape))t[o]||(n[o]=this.shape[o]);return new e({...this._def,shape:()=>n})}deepPartial(){return qY(this)}partial(t){let n={};for(let o of kc.objectKeys(this.shape)){let i=this.shape[o];t&&!t[o]?n[o]=i:n[o]=i.optional()}return new e({...this._def,shape:()=>n})}required(t){let n={};for(let o of kc.objectKeys(this.shape))if(t&&!t[o])n[o]=this.shape[o];else{let i=this.shape[o];for(;i instanceof RE;)i=i._def.innerType;n[o]=i}return new e({...this._def,shape:()=>n})}keyof(){return b9t(kc.objectKeys(this.shape))}};DI.create=(e,t)=>new DI({shape:()=>e,unknownKeys:"strip",catchall:B6.create(),typeName:is.ZodObject,...la(t)}),DI.strictCreate=(e,t)=>new DI({shape:()=>e,unknownKeys:"strict",catchall:B6.create(),typeName:is.ZodObject,...la(t)}),DI.lazycreate=(e,t)=>new DI({shape:e,unknownKeys:"strip",catchall:B6.create(),typeName:is.ZodObject,...la(t)});var ite=class extends Sa{_parse(e){let{ctx:t}=this._processInputParams(e),n=this._def.options;if(t.common.async)return Promise.all(n.map(async(o)=>{let i={...t,common:{...t.common,issues:[]},parent:null};return{result:await o._parseAsync({data:t.data,path:t.path,parent:i}),ctx:i}})).then(function(o){for(let r of o)if(r.result.status==="valid")return r.result;for(let r of o)if(r.result.status==="dirty")return t.common.issues.push(...r.ctx.common.issues),r.result;let i=o.map((r)=>new pS(r.ctx.common.issues));return _i(t,{code:No.invalid_union,unionErrors:i}),qr});{let o,i=[];for(let s of n){let a={...t,common:{...t.common,issues:[]},parent:null},c=s._parseSync({data:t.data,path:t.path,parent:a});if(c.status==="valid")return c;c.status!=="dirty"||o||(o={result:c,ctx:a}),a.common.issues.length&&i.push(a.common.issues)}if(o)return t.common.issues.push(...o.ctx.common.issues),o.result;let r=i.map((s)=>new pS(s));return _i(t,{code:No.invalid_union,unionErrors:r}),qr}}get options(){return this._def.options}};ite.create=(e,t)=>new ite({options:e,typeName:is.ZodUnion,...la(t)});var b8=(e)=>e instanceof ste?b8(e.schema):e instanceof hS?b8(e.innerType()):e instanceof ate?[e.value]:e instanceof Ote?e.options:e instanceof cte?kc.objectValues(e.enum):e instanceof lte?b8(e._def.innerType):e instanceof nte?[void 0]:e instanceof ote?[null]:e instanceof RE?[void 0,...b8(e.unwrap())]:e instanceof $8?[null,...b8(e.unwrap())]:e instanceof qke||e instanceof ute?b8(e.unwrap()):e instanceof dte?b8(e._def.innerType):[],x9t=class e extends Sa{_parse(t){let{ctx:n}=this._processInputParams(t);if(n.parsedType!==Ri.object)return _i(n,{code:No.invalid_type,expected:Ri.object,received:n.parsedType}),qr;let o=this.discriminator,i=n.data[o],r=this.optionsMap.get(i);return r?n.common.async?r._parseAsync({data:n.data,path:n.path,parent:n}):r._parseSync({data:n.data,path:n.path,parent:n}):(_i(n,{code:No.invalid_union_discriminator,options:Array.from(this.optionsMap.keys()),path:[o]}),qr)}get discriminator(){return this._def.discriminator}get options(){return this._def.options}get optionsMap(){return this._def.optionsMap}static create(t,n,o){let i=new Map;for(let r of n){let s=b8(r.shape[t]);if(!s.length)throw Error(`A discriminator value for key \`${t}\` could not be extracted from all schema options`);for(let a of s){if(i.has(a))throw Error(`Discriminator property ${String(t)} has duplicate value ${String(a)}`);i.set(a,r)}}return new e({typeName:is.ZodDiscriminatedUnion,discriminator:t,options:n,optionsMap:i,...la(o)})}};function HRe(e,t){let n=g6(e),o=g6(t);if(e===t)return{valid:!0,data:e};if(n===Ri.object&&o===Ri.object){let i=kc.objectKeys(t),r=kc.objectKeys(e).filter((a)=>i.indexOf(a)!==-1),s={...e,...t};for(let a of r){let c=HRe(e[a],t[a]);if(!c.valid)return{valid:!1};s[a]=c.data}return{valid:!0,data:s}}if(n===Ri.array&&o===Ri.array){if(e.length!==t.length)return{valid:!1};let i=[];for(let r=0;r<e.length;r++){let s=HRe(e[r],t[r]);if(!s.valid)return{valid:!1};i.push(s.data)}return{valid:!0,data:i}}return n===Ri.date&&o===Ri.date&&+e===+t?{valid:!0,data:e}:{valid:!1}}var rte=class extends Sa{_parse(e){let{status:t,ctx:n}=this._processInputParams(e),o=(i,r)=>{if(LRe(i)||LRe(r))return qr;let s=HRe(i.value,r.value);return s.valid?((FRe(i)||FRe(r))&&t.dirty(),{status:t.value,value:s.data}):(_i(n,{code:No.invalid_intersection_types}),qr)};return n.common.async?Promise.all([this._def.left._parseAsync({data:n.data,path:n.path,parent:n}),this._def.right._parseAsync({data:n.data,path:n.path,parent:n})]).then(([i,r])=>o(i,r)):o(this._def.left._parseSync({data:n.data,path:n.path,parent:n}),this._def.right._parseSync({data:n.data,path:n.path,parent:n}))}};rte.create=(e,t,n)=>new rte({left:e,right:t,typeName:is.ZodIntersection,...la(n)});var J8=class e extends Sa{_parse(t){let{status:n,ctx:o}=this._processInputParams(t);if(o.parsedType!==Ri.array)return _i(o,{code:No.invalid_type,expected:Ri.array,received:o.parsedType}),qr;if(o.data.length<this._def.items.length)return _i(o,{code:No.too_small,minimum:this._def.items.length,inclusive:!0,exact:!1,type:"array"}),qr;!this._def.rest&&o.data.length>this._def.items.length&&(_i(o,{code:No.too_big,maximum:this._def.items.length,inclusive:!0,exact:!1,type:"array"}),n.dirty());let i=[...o.data].map((r,s)=>{let a=this._def.items[s]||this._def.rest;return a?a._parse(new zE(o,r,o.path,s)):null}).filter((r)=>!!r);return o.common.async?Promise.all(i).then((r)=>Ny.mergeArray(n,r)):Ny.mergeArray(n,i)}get items(){return this._def.items}rest(t){return new e({...this._def,rest:t})}};J8.create=(e,t)=>{if(!Array.isArray(e))throw Error("You must pass an array of schemas to z.tuple([ ... ])");return new J8({items:e,typeName:is.ZodTuple,rest:null,...la(t)})};var C9t=class e extends Sa{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse(t){let{status:n,ctx:o}=this._processInputParams(t);if(o.parsedType!==Ri.object)return _i(o,{code:No.invalid_type,expected:Ri.object,received:o.parsedType}),qr;let i=[],r=this._def.keyType,s=this._def.valueType;for(let a in o.data)i.push({key:r._parse(new zE(o,a,o.path,a)),value:s._parse(new zE(o,o.data[a],o.path,a)),alwaysSet:a in o.data});return o.common.async?Ny.mergeObjectAsync(n,i):Ny.mergeObjectSync(n,i)}get element(){return this._def.valueType}static create(t,n,o){return new e(n instanceof Sa?{keyType:t,valueType:n,typeName:is.ZodRecord,...la(o)}:{keyType:UV.create(),valueType:t,typeName:is.ZodRecord,...la(n)})}},U_e=class extends Sa{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse(e){let{status:t,ctx:n}=this._processInputParams(e);if(n.parsedType!==Ri.map)return _i(n,{code:No.invalid_type,expected:Ri.map,received:n.parsedType}),qr;let o=this._def.keyType,i=this._def.valueType,r=[...n.data.entries()].map(([s,a],c)=>({key:o._parse(new zE(n,s,n.path,[c,"key"])),value:i._parse(new zE(n,a,n.path,[c,"value"]))}));if(n.common.async){let s=new Map;return Promise.resolve().then(async()=>{for(let a of r){let c=await a.key,l=await a.value;if(c.status==="aborted"||l.status==="aborted")return qr;c.status!=="dirty"&&l.status!=="dirty"||t.dirty(),s.set(c.value,l.value)}return{status:t.value,value:s}})}{let s=new Map;for(let a of r){let{key:c,value:l}=a;if(c.status==="aborted"||l.status==="aborted")return qr;c.status!=="dirty"&&l.status!=="dirty"||t.dirty(),s.set(c.value,l.value)}return{status:t.value,value:s}}}};U_e.create=(e,t,n)=>new U_e({valueType:t,keyType:e,typeName:is.ZodMap,...la(n)});var W_e=class e extends Sa{_parse(t){let{status:n,ctx:o}=this._processInputParams(t);if(o.parsedType!==Ri.set)return _i(o,{code:No.invalid_type,expected:Ri.set,received:o.parsedType}),qr;let i=this._def;i.minSize!==null&&o.data.size<i.minSize.value&&(_i(o,{code:No.too_small,minimum:i.minSize.value,type:"set",inclusive:!0,exact:!1,message:i.minSize.message}),n.dirty()),i.maxSize!==null&&o.data.size>i.maxSize.value&&(_i(o,{code:No.too_big,maximum:i.maxSize.value,type:"set",inclusive:!0,exact:!1,message:i.maxSize.message}),n.dirty());let r=this._def.valueType;function s(c){let l=new Set;for(let d of c){if(d.status==="aborted")return qr;d.status==="dirty"&&n.dirty(),l.add(d.value)}return{status:n.value,value:l}}let a=[...o.data.values()].map((c,l)=>r._parse(new zE(o,c,o.path,l)));return o.common.async?Promise.all(a).then((c)=>s(c)):s(a)}min(t,n){return new e({...this._def,minSize:{value:t,message:sr.toString(n)}})}max(t,n){return new e({...this._def,maxSize:{value:t,message:sr.toString(n)}})}size(t,n){return this.min(t,n).max(t,n)}nonempty(t){return this.min(1,t)}};W_e.create=(e,t)=>new W_e({valueType:e,minSize:null,maxSize:null,typeName:is.ZodSet,...la(t)});var I9t=class e extends Sa{constructor(){super(...arguments),this.validate=this.implement}_parse(t){let{ctx:n}=this._processInputParams(t);if(n.parsedType!==Ri.function)return _i(n,{code:No.invalid_type,expected:Ri.function,received:n.parsedType}),qr;function o(a,c){return z_e({data:a,path:n.path,errorMaps:[n.common.contextualErrorMap,n.schemaErrorMap,O_e(),VV].filter((l)=>!!l),issueData:{code:No.invalid_arguments,argumentsError:c}})}function i(a,c){return z_e({data:a,path:n.path,errorMaps:[n.common.contextualErrorMap,n.schemaErrorMap,O_e(),VV].filter((l)=>!!l),issueData:{code:No.invalid_return_type,returnTypeError:c}})}let r={errorMap:n.common.contextualErrorMap},s=n.data;if(this._def.returns instanceof XV){let a=this;return A1(async function(...c){let l=new pS([]),d=await a._def.args.parseAsync(c,r).catch((h)=>{throw l.addIssue(o(c,h)),l}),u=await Reflect.apply(s,this,d);return await a._def.returns._def.type.parseAsync(u,r).catch((h)=>{throw l.addIssue(i(u,h)),l})})}{let a=this;return A1(function(...c){let l=a._def.args.safeParse(c,r);if(!l.success)throw new pS([o(c,l.error)]);let d=Reflect.apply(s,this,l.data),u=a._def.returns.safeParse(d,r);if(!u.success)throw new pS([i(d,u.error)]);return u.data})}}parameters(){return this._def.args}returnType(){return this._def.returns}args(...t){return new e({...this._def,args:J8.create(t).rest(kk.create())})}returns(t){return new e({...this._def,returns:t})}implement(t){return this.parse(t)}strictImplement(t){return this.parse(t)}static create(t,n,o){return new e({args:t||J8.create([]).rest(kk.create()),returns:n||kk.create(),typeName:is.ZodFunction,...la(o)})}},ste=class extends Sa{get schema(){return this._def.getter()}_parse(e){let{ctx:t}=this._processInputParams(e);return this._def.getter()._parse({data:t.data,path:t.path,parent:t})}};ste.create=(e,t)=>new ste({getter:e,typeName:is.ZodLazy,...la(t)});var ate=class extends Sa{_parse(e){if(e.data!==this._def.value){let t=this._getOrReturnCtx(e);return _i(t,{received:t.data,code:No.invalid_literal,expected:this._def.value}),qr}return{status:"valid",value:e.data}}get value(){return this._def.value}};function b9t(e,t){return new Ote({values:e,typeName:is.ZodEnum,...la(t)})}ate.create=(e,t)=>new ate({value:e,typeName:is.ZodLiteral,...la(t)});var Ote=class e extends Sa{_parse(t){if(typeof t.data!="string"){let n=this._getOrReturnCtx(t),o=this._def.values;return _i(n,{expected:kc.joinValues(o),received:n.parsedType,code:No.invalid_type}),qr}if(this._cache||(this._cache=new Set(this._def.values)),!this._cache.has(t.data)){let n=this._getOrReturnCtx(t),o=this._def.values;return _i(n,{received:n.data,code:No.invalid_enum_value,options:o}),qr}return A1(t.data)}get options(){return this._def.values}get enum(){let t={};for(let n of this._def.values)t[n]=n;return t}get Values(){let t={};for(let n of this._def.values)t[n]=n;return t}get Enum(){let t={};for(let n of this._def.values)t[n]=n;return t}extract(t,n=this._def){return e.create(t,{...this._def,...n})}exclude(t,n=this._def){return e.create(this.options.filter((o)=>!t.includes(o)),{...this._def,...n})}};Ote.create=b9t;var cte=class extends Sa{_parse(e){let t=kc.getValidEnumValues(this._def.values),n=this._getOrReturnCtx(e);if(n.parsedType!==Ri.string&&n.parsedType!==Ri.number){let o=kc.objectValues(t);return _i(n,{expected:kc.joinValues(o),received:n.parsedType,code:No.invalid_type}),qr}if(this._cache||(this._cache=new Set(kc.getValidEnumValues(this._def.values))),!this._cache.has(e.data)){let o=kc.objectValues(t);return _i(n,{received:n.data,code:No.invalid_enum_value,options:o}),qr}return A1(e.data)}get enum(){return this._def.values}};cte.create=(e,t)=>new cte({values:e,typeName:is.ZodNativeEnum,...la(t)});var XV=class extends Sa{unwrap(){return this._def.type}_parse(e){let{ctx:t}=this._processInputParams(e);if(t.parsedType!==Ri.promise&&t.common.async===!1)return _i(t,{code:No.invalid_type,expected:Ri.promise,received:t.parsedType}),qr;let n=t.parsedType===Ri.promise?t.data:Promise.resolve(t.data);return A1(n.then((o)=>this._def.type.parseAsync(o,{path:t.path,errorMap:t.common.contextualErrorMap})))}};XV.create=(e,t)=>new XV({type:e,typeName:is.ZodPromise,...la(t)});var hS=class extends Sa{innerType(){return this._def.schema}sourceType(){return this._def.schema._def.typeName===is.ZodEffects?this._def.schema.sourceType():this._def.schema}_parse(e){let{status:t,ctx:n}=this._processInputParams(e),o=this._def.effect||null,i={addIssue:(r)=>{_i(n,r),r.fatal?t.abort():t.dirty()},get path(){return n.path}};if(i.addIssue=i.addIssue.bind(i),o.type==="preprocess"){let r=o.transform(n.data,i);if(n.common.async)return Promise.resolve(r).then(async(s)=>{if(t.value==="aborted")return qr;let a=await this._def.schema._parseAsync({data:s,path:n.path,parent:n});return a.status==="aborted"?qr:a.status==="dirty"||t.value==="dirty"?G_e(a.value):a});{if(t.value==="aborted")return qr;let s=this._def.schema._parseSync({data:r,path:n.path,parent:n});return s.status==="aborted"?qr:s.status==="dirty"||t.value==="dirty"?G_e(s.value):s}}if(o.type==="refinement"){let r=(s)=>{let a=o.refinement(s,i);if(n.common.async)return Promise.resolve(a);if(a instanceof Promise)throw Error("Async refinement encountered during synchronous parse operation. Use .parseAsync instead.");return s};if(n.common.async===!1){let s=this._def.schema._parseSync({data:n.data,path:n.path,parent:n});return s.status==="aborted"?qr:(s.status==="dirty"&&t.dirty(),r(s.value),{status:t.value,value:s.value})}return this._def.schema._parseAsync({data:n.data,path:n.path,parent:n}).then((s)=>s.status==="aborted"?qr:(s.status==="dirty"&&t.dirty(),r(s.value).then(()=>({status:t.value,value:s.value}))))}if(o.type==="transform"){if(n.common.async===!1){let r=this._def.schema._parseSync({data:n.data,path:n.path,parent:n});if(!jk(r))return qr;let s=o.transform(r.value,i);if(s instanceof Promise)throw Error("Asynchronous transform encountered during synchronous parse operation. Use .parseAsync instead.");return{status:t.value,value:s}}return this._def.schema._parseAsync({data:n.data,path:n.path,parent:n}).then((r)=>jk(r)?Promise.resolve(o.transform(r.value,i)).then((s)=>({status:t.value,value:s})):qr)}kc.assertNever(o)}};hS.create=(e,t,n)=>new hS({schema:e,typeName:is.ZodEffects,effect:t,...la(n)}),hS.createWithPreprocess=(e,t,n)=>new hS({schema:t,effect:{type:"preprocess",transform:e},typeName:is.ZodEffects,...la(n)});var RE=class extends Sa{_parse(e){return this._getType(e)===Ri.undefined?A1(void 0):this._def.innerType._parse(e)}unwrap(){return this._def.innerType}};RE.create=(e,t)=>new RE({innerType:e,typeName:is.ZodOptional,...la(t)});var $8=class extends Sa{_parse(e){return this._getType(e)===Ri.null?A1(null):this._def.innerType._parse(e)}unwrap(){return this._def.innerType}};$8.create=(e,t)=>new $8({innerType:e,typeName:is.ZodNullable,...la(t)});var lte=class extends Sa{_parse(e){let{ctx:t}=this._processInputParams(e),n=t.data;return t.parsedType===Ri.undefined&&(n=this._def.defaultValue()),this._def.innerType._parse({data:n,path:t.path,parent:t})}removeDefault(){return this._def.innerType}};lte.create=(e,t)=>new lte({innerType:e,typeName:is.ZodDefault,defaultValue:typeof t.default=="function"?t.default:()=>t.default,...la(t)});var dte=class extends Sa{_parse(e){let{ctx:t}=this._processInputParams(e),n={...t,common:{...t.common,issues:[]}},o=this._def.innerType._parse({data:n.data,path:n.path,parent:{...n}});return Jee(o)?o.then((i)=>({status:"valid",value:i.status==="valid"?i.value:this._def.catchValue({get error(){return new pS(n.common.issues)},input:n.data})})):{status:"valid",value:o.status==="valid"?o.value:this._def.catchValue({get error(){return new pS(n.common.issues)},input:n.data})}}removeCatch(){return this._def.innerType}};dte.create=(e,t)=>new dte({innerType:e,typeName:is.ZodCatch,catchValue:typeof t.catch=="function"?t.catch:()=>t.catch,...la(t)});var X_e=class extends Sa{_parse(e){if(this._getType(e)!==Ri.nan){let t=this._getOrReturnCtx(e);return _i(t,{code:No.invalid_type,expected:Ri.nan,received:t.parsedType}),qr}return{status:"valid",value:e.data}}};X_e.create=(e)=>new X_e({typeName:is.ZodNaN,...la(e)});var l8o=Symbol("zod_brand"),qke=class extends Sa{_parse(e){let{ctx:t}=this._processInputParams(e),n=t.data;return this._def.type._parse({data:n,path:t.path,parent:t})}unwrap(){return this._def.type}},Jke=class e extends Sa{_parse(t){let{status:n,ctx:o}=this._processInputParams(t);if(o.common.async)return(async()=>{let i=await this._def.in._parseAsync({data:o.data,path:o.path,parent:o});return i.status==="aborted"?qr:i.status==="dirty"?(n.dirty(),G_e(i.value)):this._def.out._parseAsync({data:i.value,path:o.path,parent:o})})();{let i=this._def.in._parseSync({data:o.data,path:o.path,parent:o});return i.status==="aborted"?qr:i.status==="dirty"?(n.dirty(),{status:"dirty",value:i.value}):this._def.out._parseSync({data:i.value,path:o.path,parent:o})}}static create(t,n){return new e({in:t,out:n,typeName:is.ZodPipeline})}},ute=class extends Sa{_parse(e){let t=this._def.innerType._parse(e),n=(o)=>(jk(o)&&(o.value=Object.freeze(o.value)),o);return Jee(t)?t.then((o)=>n(o)):n(t)}unwrap(){return this._def.innerType}};function OPt(e,t){let n=typeof e=="function"?e(t):typeof e=="string"?{message:e}:e;return typeof n=="string"?{message:n}:n}function S9t(e,t={},n){return e?WV.create().superRefine((o,i)=>{let r=e(o);if(r instanceof Promise)return r.then((s)=>{if(!s){let a=OPt(t,o),c=a.fatal??n??!0;i.addIssue({code:"custom",...a,fatal:c})}});if(!r){let s=OPt(t,o),a=s.fatal??n??!0;i.addIssue({code:"custom",...s,fatal:a})}}):WV.create()}ute.create=(e,t)=>new ute({innerType:e,typeName:is.ZodReadonly,...la(t)});var is,uc,d8o={object:DI.lazycreate};(uc=is||(is={})).ZodString="ZodString",uc.ZodNumber="ZodNumber",uc.ZodNaN="ZodNaN",uc.ZodBigInt="ZodBigInt",uc.ZodBoolean="ZodBoolean",uc.ZodDate="ZodDate",uc.ZodSymbol="ZodSymbol",uc.ZodUndefined="ZodUndefined",uc.ZodNull="ZodNull",uc.ZodAny="ZodAny",uc.ZodUnknown="ZodUnknown",uc.ZodNever="ZodNever",uc.ZodVoid="ZodVoid",uc.ZodArray="ZodArray",uc.ZodObject="ZodObject",uc.ZodUnion="ZodUnion",uc.ZodDiscriminatedUnion="ZodDiscriminatedUnion",uc.ZodIntersection="ZodIntersection",uc.ZodTuple="ZodTuple",uc.ZodRecord="ZodRecord",uc.ZodMap="ZodMap",uc.ZodSet="ZodSet",uc.ZodFunction="ZodFunction",uc.ZodLazy="ZodLazy",uc.ZodLiteral="ZodLiteral",uc.ZodEnum="ZodEnum",uc.ZodEffects="ZodEffects",uc.ZodNativeEnum="ZodNativeEnum",uc.ZodOptional="ZodOptional",uc.ZodNullable="ZodNullable",uc.ZodDefault="ZodDefault",uc.ZodCatch="ZodCatch",uc.ZodPromise="ZodPromise",uc.ZodBranded="ZodBranded",uc.ZodPipeline="ZodPipeline",uc.ZodReadonly="ZodReadonly";var u8o=(e,t={message:`Input not instance of ${e.name}`})=>S9t((n)=>n instanceof e,t),P9t=UV.create,v9t=$ee.create,h8o=X_e.create,m8o=Zee.create,E9t=ete.create,p8o=tte.create,A8o=Y_e.create,_8o=nte.create,g8o=ote.create,f8o=WV.create,y8o=kk.create,x8o=B6.create,C8o=V_e.create,I8o=qk.create,{create:b8o,strictCreate:S8o}=DI,P8o=ite.create,v8o=x9t.create,E8o=rte.create,M8o=J8.create,B8o=C9t.create,w8o=U_e.create,T8o=W_e.create,D8o=I9t.create,N8o=ste.create,R8o=ate.create,Q8o=Ote.create,k8o=cte.create,L8o=XV.create,zPt=hS.create,F8o=RE.create,H8o=$8.create,O8o=hS.createWithPreprocess,z8o=Jke.create,G8o=()=>P9t().optional(),Y8o=()=>v9t().optional(),V8o=()=>E9t().optional(),U8o={string:(e)=>UV.create({...e,coerce:!0}),number:(e)=>$ee.create({...e,coerce:!0}),boolean:(e)=>ete.create({...e,coerce:!0}),bigint:(e)=>Zee.create({...e,coerce:!0}),date:(e)=>tte.create({...e,coerce:!0})},W8o=qr,M9t={Hz:{baseUnit:"Hz",variants:{MHz:1e6,kHz:1000,Hz:1}},g:{baseUnit:"g",variants:{kg:1000,g:1}},"Ω":{baseUnit:"Ω",variants:{"mΩ":0.001,"Ω":1,"kΩ":1000,"KΩ":1000,kohm:1000,"MΩ":1e6,"GΩ":1e9,"TΩ":1000000000000}},V:{baseUnit:"V",variants:{mV:0.001,V:1,kV:1000,KV:1000,MV:1e6,GV:1e9,TV:1000000000000}},A:{baseUnit:"A",variants:{"µA":0.000001,mA:0.001,ma:0.001,A:1,kA:1000,MA:1e6}},F:{baseUnit:"F",variants:{pF:0.000000000001,nF:0.000000001,"µF":0.000001,uF:0.000001,mF:0.001,F:1}},ml:{baseUnit:"ml",variants:{ml:1,mL:1,l:1000,L:1000}},deg:{baseUnit:"deg",variants:{rad:180/Math.PI}},ms:{baseUnit:"ms",variants:{fs:0.000000000001,ps:0.000000001,ns:0.000001,us:0.001,"µs":0.001,ms:1,s:1000}},mm:{baseUnit:"mm",variants:{nm:0.000001,"µm":0.001,um:0.001,mm:1,cm:10,dm:100,m:1000,km:1e6,in:25.4,ft:304.8,IN:25.4,FT:304.8,yd:914.4,mi:1609344,mil:0.0254}}},ORe=new Set;for(let[e,t]of Object.entries(M9t)){ORe.add(e);for(let n of Object.keys(t.variants))ORe.add(n)}var GPt={tera:1000000000000,T:1000000000000,giga:1e9,G:1e9,mega:1e6,M:1e6,kilo:1000,k:1000,deci:0.1,d:0.1,centi:0.01,c:0.01,milli:0.001,m:0.001,micro:0.000001,u:0.000001,"µ":0.000001,nano:0.000000001,n:0.000000001,pico:0.000000000001,p:0.000000000001};function AS(e){if(e==null)return{parsedUnit:null,unitOfValue:null,value:null};if(typeof e=="string"&&e.match(/^-?[\d\.]+$/))return{value:Number.parseFloat(e),parsedUnit:null,unitOfValue:null};if(typeof e=="number")return{value:e,parsedUnit:null,unitOfValue:null};if(typeof e=="object"&&"x"in e&&"y"in e){let{parsedUnit:a,unitOfValue:c}=AS(e.x),l=AS(e.x),d=AS(e.y);return l.value===null||d.value===null?{parsedUnit:null,unitOfValue:null,value:null}:{parsedUnit:a,unitOfValue:c,value:{x:l.value,y:d.value}}}let t=e.toString().split("").reverse().join(""),n=t.match(/[^\d\s]+/)?.[0];if(!n)throw Error(`Could not determine unit: "${e}"`);let o=n.split("").reverse().join(""),i=e.slice(0,-o.length);if(o in GPt&&!ORe.has(o)){let a=GPt[o];return{parsedUnit:null,unitOfValue:null,value:Number.parseFloat(i)*a}}let{baseUnit:r,conversionFactor:s}=function(a){for(let[c,l]of Object.entries(M9t))if(a in l.variants)return{baseUnit:l.baseUnit,conversionFactor:l.variants[a]};return{baseUnit:a,conversionFactor:1}}(o);return{parsedUnit:o,unitOfValue:r,value:s*Number.parseFloat(i)}}var $ge=v.string().or(v.number()).transform((e)=>AS(e).value),$ke=v.string().or(v.number()).transform((e)=>AS(e).value).transform((e)=>Number.parseFloat(e.toPrecision(12))),B9t=v.string().or(v.number()).transform((e)=>AS(e).value),R6=v.string().or(v.number()).transform((e)=>AS(e).value),$o=v.string().or(v.number()).transform((e)=>AS(e).value),mL=v.string().or(v.number()).transform((e)=>AS(e).value),Ln=$o,KV=v.string().or(v.number()).transform((e)=>AS(e).value),zte=v.string().or(v.number()).transform((e)=>AS(e).value),X8o=zte,Jk=zte,w9t=v.string().datetime(),rm=v.string().or(v.number()).transform((e)=>typeof e=="number"?e:e.endsWith("deg")?Number.parseFloat(e.split("deg")[0]):e.endsWith("rad")?180*Number.parseFloat(e.split("rad")[0])/Math.PI:Number.parseFloat(e)),T9t=v.number().or(v.string().endsWith("mAh")).transform((e)=>{if(typeof e=="string"){let t=e.replace("mAh",""),n=Number.parseFloat(t);if(Number.isNaN(n))throw Error("Invalid capacity");return n}return e}).describe("Battery capacity in mAh"),Li=v.object({x:Ln,y:Ln}),K8o=Li,I6=v.object({x:Ln,y:Ln,z:Ln}),j8o=I6,Zke=v.object({width:v.number(),height:v.number()}),oo=(e)=>v.string().optional().default(()=>`${e}_${((t)=>Array.from({length:t},()=>"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"[Math.floor(62*Math.random())]).join(""))(10)}`),G6=v.enum(["top_left","top_center","top_right","center_left","center","center_right","bottom_left","bottom_center","bottom_right"]),q8o=v.enum(["top_silkscreen","bottom_silkscreen","top_copper","bottom_copper","top_soldermask","bottom_soldermask","top_fabrication_note","bottom_fabrication_note","top_user_note","bottom_user_note","top_courtyard","bottom_courtyard","inner1_copper","inner2_copper","inner3_copper","inner4_copper","inner5_copper","inner6_copper","edge_cuts","drill"]),D9t=v.object({project_relative_path:v.string(),url:v.string(),mimetype:v.string()}),Zge=Li.extend({rotation:rm.optional()}),eLe=v.object({size:Li.optional(),thickness:Ln.optional()}),N9t=v.object({font:eLe.optional()}),see=v.object({value:v.string(),at:Zge.optional(),layer:v.string().optional(),uuid:v.string().optional(),hide:v.boolean().optional(),effects:N9t.optional()}),R9t=v.object({Reference:see.optional(),Value:see.optional(),Datasheet:see.optional(),Description:see.optional()}),Q9t=v.object({through_hole:v.boolean().optional(),smd:v.boolean().optional(),exclude_from_pos_files:v.boolean().optional(),exclude_from_bom:v.boolean().optional()}),k9t=v.object({name:v.string(),type:v.string(),shape:v.string().optional(),at:Zge.optional(),size:Li.optional(),drill:Ln.optional(),layers:v.array(v.string()).optional(),removeUnusedLayers:v.boolean().optional(),uuid:v.string().optional()}),L9t=v.object({path:v.string(),offset:I6.optional(),scale:I6.optional(),rotate:I6.optional()}),F9t=v.object({footprintName:v.string().optional(),version:v.union([v.number(),v.string()]).optional(),generator:v.string().optional(),generatorVersion:v.union([v.number(),v.string()]).optional(),layer:v.string().optional(),properties:R9t.optional(),attributes:Q9t.optional(),pads:v.array(k9t).optional(),embeddedFonts:v.boolean().optional(),model:L9t.optional()}),H9t=v.object({hide:v.boolean().optional()}),O9t=v.object({offset:Ln.optional(),hide:v.boolean().optional()}),z9t=v.object({font:eLe.optional(),justify:v.union([v.string(),v.array(v.string())]).optional(),hide:v.boolean().optional()}),S8=v.object({value:v.string(),id:v.union([v.number(),v.string()]).optional(),at:Zge.optional(),effects:z9t.optional()}),G9t=v.object({Reference:S8.optional(),Value:S8.optional(),Footprint:S8.optional(),Datasheet:S8.optional(),Description:S8.optional(),ki_keywords:S8.optional(),ki_fp_filters:S8.optional()}),Y9t=v.object({symbolName:v.string().optional(),extends:v.string().optional(),pinNumbers:H9t.optional(),pinNames:O9t.optional(),excludeFromSim:v.boolean().optional(),inBom:v.boolean().optional(),onBoard:v.boolean().optional(),properties:G9t.optional(),embeddedFonts:v.boolean().optional()}),Sl=v.object({error_type:v.string(),message:v.string(),is_fatal:v.boolean().optional()}),tLe=v.enum(["jlcpcb","macrofab","pcbway","digikey","mouser","lcsc"]),Vd=v.object({type:v.literal("source_component"),ftype:v.string().optional(),source_component_id:v.string(),name:v.string(),manufacturer_part_number:v.string().optional(),supplier_part_numbers:v.record(tLe,v.array(v.string())).optional(),display_value:v.string().optional(),display_name:v.string().optional(),are_pins_interchangeable:v.boolean().optional(),internally_connected_source_port_ids:v.array(v.array(v.string())).optional(),source_group_id:v.string().optional(),subcircuit_id:v.string().optional()}),nLe=Vd.extend({ftype:v.literal("simple_capacitor"),capacitance:$ke,max_voltage_rating:R6.optional(),display_capacitance:v.string().optional(),max_decoupling_trace_length:Ln.optional()}),oLe=Vd.extend({ftype:v.literal("simple_resistor"),resistance:$ge,display_resistance:v.string().optional()}),efe=Vd.extend({ftype:v.literal("simple_diode")}),V9t=Vd.extend({ftype:v.literal("simple_fiducial")}),iLe=efe.extend({ftype:v.literal("simple_led"),color:v.string().optional(),wavelength:v.string().optional()}),U9t=Vd.extend({ftype:v.literal("simple_ground")}),rLe=Vd.extend({ftype:v.literal("simple_chip")}),sLe=Vd.extend({ftype:v.literal("simple_power_source"),voltage:R6}),W9t=Vd.extend({ftype:v.literal("simple_current_source"),current:KV,frequency:mL.optional(),peak_to_peak_current:KV.optional(),wave_shape:v.enum(["sine","square","triangle","sawtooth","dc"]).optional().default("dc"),phase:v.number().optional(),duty_cycle:v.number().min(0).max(1).optional()}),X9t=v.object({must_be_connected:v.boolean().optional(),provides_power:v.boolean().optional(),requires_power:v.boolean().optional(),provides_ground:v.boolean().optional(),requires_ground:v.boolean().optional(),provides_voltage:v.union([v.string(),v.number()]).optional(),requires_voltage:v.union([v.string(),v.number()]).optional(),do_not_connect:v.boolean().optional(),include_in_board_pinout:v.boolean().optional(),can_use_internal_pullup:v.boolean().optional(),is_using_internal_pullup:v.boolean().optional(),needs_external_pullup:v.boolean().optional(),can_use_internal_pulldown:v.boolean().optional(),is_using_internal_pulldown:v.boolean().optional(),needs_external_pulldown:v.boolean().optional(),can_use_open_drain:v.boolean().optional(),is_using_open_drain:v.boolean().optional(),can_use_push_pull:v.boolean().optional(),is_using_push_pull:v.boolean().optional(),should_have_decoupling_capacitor:v.boolean().optional(),recommended_decoupling_capacitor_capacitance:v.union([v.string(),v.number()]).optional(),is_configured_for_i2c_sda:v.boolean().optional(),is_configured_for_i2c_scl:v.boolean().optional(),is_configured_for_spi_mosi:v.boolean().optional(),is_configured_for_spi_miso:v.boolean().optional(),is_configured_for_spi_sck:v.boolean().optional(),is_configured_for_spi_cs:v.boolean().optional(),is_configured_for_uart_tx:v.boolean().optional(),is_configured_for_uart_rx:v.boolean().optional(),supports_i2c_sda:v.boolean().optional(),supports_i2c_scl:v.boolean().optional(),supports_spi_mosi:v.boolean().optional(),supports_spi_miso:v.boolean().optional(),supports_spi_sck:v.boolean().optional(),supports_spi_cs:v.boolean().optional(),supports_uart_tx:v.boolean().optional(),supports_uart_rx:v.boolean().optional()}),J8o=Vd.extend({ftype:v.literal("simple_fuse"),current_rating_amps:v.number().describe("Nominal current in amps the fuse is rated for"),voltage_rating_volts:v.number().describe("Voltage rating in volts, e.g. ±5V would be 5")}),aLe=Vd.extend({ftype:v.literal("simple_battery"),capacity:T9t}),cLe=Vd.extend({ftype:v.literal("simple_inductor"),inductance:B9t,display_inductance:v.string().optional(),max_current_rating:v.number().optional()}),lLe=Vd.extend({ftype:v.literal("simple_push_button")}),dLe=Vd.extend({ftype:v.literal("simple_potentiometer"),max_resistance:$ge,display_max_resistance:v.string().optional()}),K9t=Vd.extend({ftype:v.literal("simple_crystal"),frequency:v.number().describe("Frequency in Hz"),load_capacitance:v.number().optional().describe("Load capacitance in pF"),pin_variant:v.enum(["two_pin","four_pin"]).optional()}),uLe=Vd.extend({ftype:v.literal("simple_pin_header"),pin_count:v.number(),gender:v.enum(["male","female"]).optional().default("male")}),j9t=Vd.extend({ftype:v.literal("simple_connector"),standard:v.enum(["usb_c","m2"]).optional()}),hLe=Vd.extend({ftype:v.literal("simple_pinout")}),mLe=Vd.extend({ftype:v.literal("simple_resonator"),load_capacitance:$ke,equivalent_series_resistance:$ge.optional(),frequency:mL}),pLe=Vd.extend({ftype:v.literal("simple_transistor"),transistor_type:v.enum(["npn","pnp"])}),ALe=Vd.extend({ftype:v.literal("simple_test_point"),footprint_variant:v.enum(["pad","through_hole"]).optional(),pad_shape:v.enum(["rect","circle"]).optional(),pad_diameter:v.union([v.number(),v.string()]).optional(),hole_diameter:v.union([v.number(),v.string()]).optional(),width:v.union([v.number(),v.string()]).optional(),height:v.union([v.number(),v.string()]).optional()}),_Le=Vd.extend({ftype:v.literal("simple_mosfet"),channel_type:v.enum(["n","p"]),mosfet_mode:v.enum(["enhancement","depletion"])}),gLe=Vd.extend({ftype:v.literal("simple_op_amp")}),fLe=Vd.extend({ftype:v.literal("simple_switch")}),yLe=v.object({type:v.literal("source_project_metadata"),name:v.string().optional(),software_used_string:v.string().optional(),project_url:v.string().optional(),created_at:w9t.optional()}),q9t=Sl.extend({type:v.literal("source_missing_property_error"),source_missing_property_error_id:oo("source_missing_property_error"),source_component_id:v.string(),property_name:v.string(),subcircuit_id:v.string().optional(),error_type:v.literal("source_missing_property_error").default("source_missing_property_error")}).describe("The source code is missing a property"),J9t=Sl.extend({type:v.literal("source_failed_to_create_component_error"),source_failed_to_create_component_error_id:oo("source_failed_to_create_component_error"),error_type:v.literal("source_failed_to_create_component_error").default("source_failed_to_create_component_error"),component_name:v.string().optional(),subcircuit_id:v.string().optional(),parent_source_component_id:v.string().optional(),pcb_center:v.object({x:v.number().optional(),y:v.number().optional()}).optional(),schematic_center:v.object({x:v.number().optional(),y:v.number().optional()}).optional()}).describe("Error emitted when a component fails to be constructed"),xLe=Sl.extend({type:v.literal("source_invalid_component_property_error"),source_invalid_component_property_error_id:oo("source_invalid_component_property_error"),source_component_id:v.string(),property_name:v.string(),property_value:v.unknown().optional(),expected_format:v.string().optional(),subcircuit_id:v.string().optional(),error_type:v.literal("source_invalid_component_property_error").default("source_invalid_component_property_error")}).describe("The source component property is invalid"),CLe=Sl.extend({type:v.literal("source_trace_not_connected_error"),source_trace_not_connected_error_id:oo("source_trace_not_connected_error"),error_type:v.literal("source_trace_not_connected_error").default("source_trace_not_connected_error"),subcircuit_id:v.string().optional(),source_group_id:v.string().optional(),source_trace_id:v.string().optional(),connected_source_port_ids:v.array(v.string()).optional(),selectors_not_found:v.array(v.string()).optional()}).describe("Occurs when a source trace selector does not match any ports"),$9t=v.object({type:v.literal("source_property_ignored_warning"),source_property_ignored_warning_id:oo("source_property_ignored_warning"),source_component_id:v.string(),property_name:v.string(),subcircuit_id:v.string().optional(),error_type:v.literal("source_property_ignored_warning").default("source_property_ignored_warning"),message:v.string()}).describe("The source property was ignored"),ILe=v.object({type:v.literal("source_pin_missing_trace_warning"),source_pin_missing_trace_warning_id:oo("source_pin_missing_trace_warning"),warning_type:v.literal("source_pin_missing_trace_warning").default("source_pin_missing_trace_warning"),message:v.string(),source_component_id:v.string(),source_port_id:v.string(),subcircuit_id:v.string().optional()}).describe("Warning emitted when a source component pin is missing a trace connection"),bLe=v.object({type:v.literal("source_missing_manufacturer_part_number_warning"),source_missing_manufacturer_part_number_warning_id:oo("source_missing_manufacturer_part_number_warning"),warning_type:v.literal("source_missing_manufacturer_part_number_warning").default("source_missing_manufacturer_part_number_warning"),message:v.string(),source_component_id:v.string(),standard:v.string(),subcircuit_id:v.string().optional()}).describe("Warning emitted when a standard connector is missing manufacturer part number"),Z9t=Vd.extend({ftype:v.literal("simple_voltage_probe")}),ewt=Vd.extend({ftype:v.literal("interconnect")}),SLe=Sl.extend({type:v.literal("source_i2c_misconfigured_error"),source_i2c_misconfigured_error_id:oo("source_i2c_misconfigured_error"),error_type:v.literal("source_i2c_misconfigured_error").default("source_i2c_misconfigured_error"),source_port_ids:v.array(v.string())}).describe("Error emitted when incompatible I2C pins (e.g. SDA and SCL) are connected to the same net"),twt=Vd.extend({ftype:v.literal("simple_voltage_source"),voltage:R6,frequency:mL.optional(),peak_to_peak_voltage:R6.optional(),wave_shape:v.enum(["sinewave","square","triangle","sawtooth"]).optional(),phase:rm.optional(),duty_cycle:v.number().optional().describe("Duty cycle as a fraction (0 to 1)")}),nwt=v.union([oLe,nLe,efe,V9t,iLe,U9t,rLe,sLe,W9t,aLe,cLe,lLe,dLe,K9t,uLe,j9t,hLe,mLe,fLe,pLe,ALe,_Le,gLe,J8o,Z9t,ewt,twt,yLe,q9t,xLe,J9t,CLe,$9t,ILe,bLe,SLe]),owt=v.object({type:v.literal("source_port"),pin_number:v.number().optional(),port_hints:v.array(v.string()).optional(),name:v.string(),source_port_id:v.string(),source_component_id:v.string().optional(),source_group_id:v.string().optional(),most_frequently_referenced_by_name:v.string().optional(),subcircuit_id:v.string().optional(),subcircuit_connectivity_map_key:v.string().optional()}).merge(X9t),iwt=v.object({type:v.literal("source_component_internal_connection"),source_component_internal_connection_id:v.string(),source_component_id:v.string(),source_port_ids:v.array(v.string()),subcircuit_id:v.string().optional()}),rwt=v.object({type:v.literal("source_trace"),source_trace_id:v.string(),connected_source_port_ids:v.array(v.string()),connected_source_net_ids:v.array(v.string()),subcircuit_id:v.string().optional(),subcircuit_connectivity_map_key:v.string().optional(),max_length:v.number().optional(),min_trace_thickness:v.number().optional(),display_name:v.string().optional()}),swt=v.object({type:v.literal("source_group"),source_group_id:v.string(),subcircuit_id:v.string().optional(),parent_subcircuit_id:v.string().optional(),parent_source_group_id:v.string().optional(),is_subcircuit:v.boolean().optional(),show_as_schematic_box:v.boolean().optional(),name:v.string().optional(),was_automatically_named:v.boolean().optional()}),awt=v.object({type:v.literal("source_net"),source_net_id:v.string(),name:v.string(),member_source_group_ids:v.array(v.string()),is_power:v.boolean().optional(),is_ground:v.boolean().optional(),is_digital_signal:v.boolean().optional(),is_analog_signal:v.boolean().optional(),is_positive_voltage_source:v.boolean().optional(),trace_width:v.number().optional(),subcircuit_id:v.string().optional(),subcircuit_connectivity_map_key:v.string().optional()}),cwt=v.object({type:v.literal("source_board"),source_board_id:v.string(),source_group_id:v.string(),title:v.string().optional()}).describe("Defines a board in the source domain"),lwt=Sl.extend({type:v.literal("source_ambiguous_port_reference"),source_ambiguous_port_reference_id:oo("source_ambiguous_port_reference"),error_type:v.literal("source_ambiguous_port_reference").default("source_ambiguous_port_reference"),source_port_id:v.string().optional(),source_component_id:v.string().optional()}).describe("Error emitted when a port hint matches multiple non-overlapping pads, making the port reference ambiguous"),dwt=v.object({type:v.literal("source_pcb_ground_plane"),source_pcb_ground_plane_id:v.string(),source_group_id:v.string(),source_net_id:v.string(),subcircuit_id:v.string().optional()}).describe("Defines a ground plane in the source domain"),uwt=["top","bottom","inner1","inner2","inner3","inner4","inner5","inner6"],zRe=v.enum(uwt),Ya=zRe.or(v.object({name:zRe})).transform((e)=>typeof e=="string"?e:e.name),F_=v.enum(["top","bottom"]),hwt=v.object({type:v.literal("source_manually_placed_via"),source_manually_placed_via_id:v.string(),source_group_id:v.string(),source_net_id:v.string(),subcircuit_id:v.string().optional(),source_trace_id:v.string().optional()}).describe("Defines a via that is manually placed in the source domain"),mwt=v.object({type:v.literal("source_no_power_pin_defined_warning"),source_no_power_pin_defined_warning_id:oo("source_no_power_pin_defined_warning"),warning_type:v.literal("source_no_power_pin_defined_warning").default("source_no_power_pin_defined_warning"),message:v.string(),source_component_id:v.string(),source_port_ids:v.array(v.string()),subcircuit_id:v.string().optional()}).describe("Warning emitted when a chip has no source ports with requires_power=true"),pwt=v.object({type:v.literal("source_no_ground_pin_defined_warning"),source_no_ground_pin_defined_warning_id:oo("source_no_ground_pin_defined_warning"),warning_type:v.literal("source_no_ground_pin_defined_warning").default("source_no_ground_pin_defined_warning"),message:v.string(),source_component_id:v.string(),source_port_ids:v.array(v.string()),subcircuit_id:v.string().optional()}).describe("Warning emitted when a chip has no source ports marked as ground pins"),Awt=v.object({type:v.literal("source_component_pins_underspecified_warning"),source_component_pins_underspecified_warning_id:oo("source_component_pins_underspecified_warning"),warning_type:v.literal("source_component_pins_underspecified_warning").default("source_component_pins_underspecified_warning"),message:v.string(),source_component_id:v.string(),source_port_ids:v.array(v.string()),subcircuit_id:v.string().optional()}).describe("Warning emitted when all ports on a source component are underspecified"),_wt=Sl.extend({type:v.literal("source_pin_must_be_connected_error"),source_pin_must_be_connected_error_id:oo("source_pin_must_be_connected_error"),error_type:v.literal("source_pin_must_be_connected_error").default("source_pin_must_be_connected_error"),source_component_id:v.string(),source_port_id:v.string(),subcircuit_id:v.string().optional()}).describe("Error emitted when a pin with mustBeConnected attribute is not connected to any trace"),gwt=Sl.extend({type:v.literal("unknown_error_finding_part"),unknown_error_finding_part_id:oo("unknown_error_finding_part"),error_type:v.literal("unknown_error_finding_part").default("unknown_error_finding_part"),source_component_id:v.string().optional(),subcircuit_id:v.string().optional()}).describe("Error emitted when an unexpected error occurs while finding a part"),fwt=v.object({type:v.literal("schematic_box"),schematic_component_id:v.string().optional(),schematic_symbol_id:v.string().optional(),width:Ln,height:Ln,is_dashed:v.boolean().default(!1),x:Ln,y:Ln,subcircuit_id:v.string().optional()}).describe("Draws a box on the schematic"),ywt=v.object({type:v.literal("schematic_path"),schematic_path_id:oo("schematic_path"),schematic_component_id:v.string().optional(),schematic_symbol_id:v.string().optional(),fill_color:v.string().optional(),is_filled:v.boolean().optional(),stroke_width:Ln.nullable().optional(),stroke_color:v.string().optional(),points:v.array(Li),subcircuit_id:v.string().optional()}),xwt=v.record(v.object({left_margin:$o.optional(),right_margin:$o.optional(),top_margin:$o.optional(),bottom_margin:$o.optional()})),Cwt=v.object({left_size:v.number(),right_size:v.number(),top_size:v.number().optional(),bottom_size:v.number().optional()}),Iwt=v.object({left_side:v.object({pins:v.array(v.number()),direction:v.enum(["top-to-bottom","bottom-to-top"]).optional()}).optional(),right_side:v.object({pins:v.array(v.number()),direction:v.enum(["top-to-bottom","bottom-to-top"]).optional()}).optional(),top_side:v.object({pins:v.array(v.number()),direction:v.enum(["left-to-right","right-to-left"]).optional()}).optional(),bottom_side:v.object({pins:v.array(v.number()),direction:v.enum(["left-to-right","right-to-left"]).optional()}).optional()}),bwt=v.union([Cwt,Iwt]),Swt=v.object({type:v.literal("schematic_component"),size:Zke,center:Li,source_component_id:v.string().optional(),schematic_component_id:v.string(),schematic_symbol_id:v.string().optional(),pin_spacing:$o.optional(),pin_styles:xwt.optional(),box_width:$o.optional(),symbol_name:v.string().optional(),port_arrangement:bwt.optional(),port_labels:v.record(v.string()).optional(),symbol_display_value:v.string().optional(),subcircuit_id:v.string().optional(),schematic_group_id:v.string().optional(),is_schematic_group:v.boolean().optional(),source_group_id:v.string().optional(),is_box_with_pins:v.boolean().optional().default(!0)}),$8o=v.object({kicad_symbol:Y9t.optional()}).catchall(v.unknown()),Pwt=v.object({type:v.literal("schematic_symbol"),schematic_symbol_id:v.string(),name:v.string().optional(),metadata:$8o.optional()}).describe("Defines a named schematic symbol that can be referenced by components."),vwt=v.object({type:v.literal("schematic_line"),schematic_line_id:oo("schematic_line"),schematic_component_id:v.string().optional(),schematic_symbol_id:v.string().optional(),x1:Ln,y1:Ln,x2:Ln,y2:Ln,stroke_width:Ln.nullable().optional(),color:v.string().default("#000000"),is_dashed:v.boolean().default(!1),subcircuit_id:v.string().optional()}).describe("Draws a styled line on the schematic"),Ewt=v.object({type:v.literal("schematic_rect"),schematic_rect_id:oo("schematic_rect"),schematic_component_id:v.string().optional(),schematic_symbol_id:v.string().optional(),center:Li,width:Ln,height:Ln,rotation:rm.default(0),stroke_width:Ln.nullable().optional(),color:v.string().default("#000000"),is_filled:v.boolean().default(!1),fill_color:v.string().optional(),is_dashed:v.boolean().default(!1),subcircuit_id:v.string().optional()}).describe("Draws a styled rectangle on the schematic"),Mwt=v.object({type:v.literal("schematic_circle"),schematic_circle_id:oo("schematic_circle"),schematic_component_id:v.string().optional(),schematic_symbol_id:v.string().optional(),center:Li,radius:Ln,stroke_width:Ln.nullable().optional(),color:v.string().default("#000000"),is_filled:v.boolean().default(!1),fill_color:v.string().optional(),is_dashed:v.boolean().default(!1),subcircuit_id:v.string().optional()}).describe("Draws a styled circle on the schematic"),Bwt=v.object({type:v.literal("schematic_arc"),schematic_arc_id:oo("schematic_arc"),schematic_component_id:v.string().optional(),schematic_symbol_id:v.string().optional(),center:Li,radius:Ln,start_angle_degrees:rm,end_angle_degrees:rm,direction:v.enum(["clockwise","counterclockwise"]).default("counterclockwise"),stroke_width:Ln.nullable().optional(),color:v.string().default("#000000"),is_dashed:v.boolean().default(!1),subcircuit_id:v.string().optional()}).describe("Draws a styled arc on the schematic"),wwt=v.object({type:v.literal("schematic_trace"),schematic_trace_id:v.string(),source_trace_id:v.string().optional(),junctions:v.array(v.object({x:v.number(),y:v.number()})),edges:v.array(v.object({from:v.object({x:v.number(),y:v.number()}),to:v.object({x:v.number(),y:v.number()}),is_crossing:v.boolean().optional(),from_schematic_port_id:v.string().optional(),to_schematic_port_id:v.string().optional()})),subcircuit_id:v.string().optional(),subcircuit_connectivity_map_key:v.string().optional()}),Z8o=v.enum(["center","left","right","top","bottom"]),Twt=v.object({type:v.literal("schematic_text"),schematic_component_id:v.string().optional(),schematic_symbol_id:v.string().optional(),schematic_text_id:v.string(),text:v.string(),font_size:v.number().default(0.18),position:v.object({x:Ln,y:Ln}),rotation:v.number().default(0),anchor:v.union([Z8o.describe("legacy"),G6]).default("center"),color:v.string().default("#000000"),subcircuit_id:v.string().optional()}),Dwt=v.object({type:v.literal("schematic_port"),schematic_port_id:v.string(),source_port_id:v.string(),schematic_component_id:v.string().optional(),center:Li,facing_direction:v.enum(["up","down","left","right"]).optional(),distance_from_component_edge:v.number().optional(),side_of_component:v.enum(["top","bottom","left","right"]).optional(),true_ccw_index:v.number().optional(),pin_number:v.number().optional(),display_pin_label:v.string().optional(),subcircuit_id:v.string().optional(),is_connected:v.boolean().optional(),has_input_arrow:v.boolean().optional(),has_output_arrow:v.boolean().optional(),is_drawn_with_inversion_circle:v.boolean().optional()}).describe("Defines a port on a schematic component"),Nwt=v.object({type:v.literal("schematic_net_label"),schematic_net_label_id:oo("schematic_net_label"),schematic_trace_id:v.string().optional(),source_trace_id:v.string().optional(),source_net_id:v.string(),center:Li,anchor_position:Li.optional(),anchor_side:v.enum(["top","bottom","left","right"]),text:v.string(),symbol_name:v.string().optional(),is_movable:v.boolean().optional(),subcircuit_id:v.string().optional()}),Rwt=Sl.extend({type:v.literal("schematic_error"),schematic_error_id:v.string(),error_type:v.literal("schematic_port_not_found").default("schematic_port_not_found"),subcircuit_id:v.string().optional()}).describe("Defines a schematic error on the schematic"),Qwt=Sl.extend({type:v.literal("schematic_layout_error"),schematic_layout_error_id:oo("schematic_layout_error"),error_type:v.literal("schematic_layout_error").default("schematic_layout_error"),source_group_id:v.string(),schematic_group_id:v.string(),subcircuit_id:v.string().optional()}).describe("Error emitted when schematic layout fails for a group"),tfe=v.object({type:v.literal("schematic_debug_object"),label:v.string().optional(),subcircuit_id:v.string().optional()}),kwt=tfe.extend({shape:v.literal("rect"),center:Li,size:Zke}),Lwt=tfe.extend({shape:v.literal("line"),start:Li,end:Li}),Fwt=tfe.extend({shape:v.literal("point"),center:Li}),Hwt=v.discriminatedUnion("shape",[kwt,Lwt,Fwt]),Owt=v.object({type:v.literal("schematic_voltage_probe"),schematic_voltage_probe_id:v.string(),source_component_id:v.string().optional(),name:v.string().optional(),position:Li,schematic_trace_id:v.string(),voltage:R6.optional(),subcircuit_id:v.string().optional(),color:v.string().optional(),label_alignment:G6.optional()}).describe("Defines a voltage probe measurement point on a schematic trace"),zwt=v.object({type:v.literal("schematic_manual_edit_conflict_warning"),schematic_manual_edit_conflict_warning_id:oo("schematic_manual_edit_conflict_warning"),warning_type:v.literal("schematic_manual_edit_conflict_warning").default("schematic_manual_edit_conflict_warning"),message:v.string(),schematic_component_id:v.string(),schematic_group_id:v.string().optional(),subcircuit_id:v.string().optional(),source_component_id:v.string()}).describe("Warning emitted when a component has both manual placement and explicit schX/schY coordinates"),Gwt=v.object({type:v.literal("schematic_group"),schematic_group_id:oo("schematic_group"),source_group_id:v.string(),is_subcircuit:v.boolean().optional(),subcircuit_id:v.string().optional(),width:$o,height:$o,center:Li,schematic_component_ids:v.array(v.string()),show_as_schematic_box:v.boolean().optional(),name:v.string().optional(),description:v.string().optional()}).describe("Defines a group of components on the schematic"),Ywt=v.object({type:v.literal("schematic_table"),schematic_table_id:oo("schematic_table"),anchor_position:Li,column_widths:v.array(Ln),row_heights:v.array(Ln),cell_padding:Ln.optional(),border_width:Ln.optional(),subcircuit_id:v.string().optional(),schematic_component_id:v.string().optional(),anchor:G6.optional()}).describe("Defines a table on the schematic"),Vwt=v.object({type:v.literal("schematic_table_cell"),schematic_table_cell_id:oo("schematic_table_cell"),schematic_table_id:v.string(),start_row_index:v.number(),end_row_index:v.number(),start_column_index:v.number(),end_column_index:v.number(),text:v.string().optional(),center:Li,width:Ln,height:Ln,horizontal_align:v.enum(["left","center","right"]).optional(),vertical_align:v.enum(["top","middle","bottom"]).optional(),font_size:Ln.optional(),subcircuit_id:v.string().optional()}).describe("Defines a cell within a schematic_table"),Uwt=v.object({type:v.literal("schematic_sheet"),schematic_sheet_id:oo("schematic_sheet"),name:v.string().optional(),subcircuit_id:v.string().optional()}).describe("Defines a schematic sheet or page that components can be placed on"),Wwt=v.object({x:Ln,y:Ln,bulge:v.number().optional()}),GRe=v.object({vertices:v.array(Wwt)}),Xwt=v.object({outer_ring:GRe,inner_rings:v.array(GRe).default([])}),Kwt=v.object({x:Ln,y:Ln,via:v.boolean().optional(),via_to_layer:Ya.optional()}),eTo=v.array(Kwt),jwt=v.object({x:Ln,y:Ln,via:v.boolean().optional(),to_layer:Ya.optional(),trace_width:Ln.optional()}),qwt=v.object({min_trace_width:$o.optional(),min_board_edge_clearance:$o.optional(),min_via_hole_edge_to_via_hole_edge_clearance:$o.optional(),min_plated_hole_drill_edge_to_drill_edge_clearance:$o.optional(),min_trace_to_pad_edge_clearance:$o.optional(),min_pad_edge_to_pad_edge_clearance:$o.optional(),min_same_net_trace_edge_to_trace_edge_clearance:$o.optional(),min_different_net_trace_edge_to_trace_edge_clearance:$o.optional(),min_via_hole_diameter:$o.optional(),min_via_pad_diameter:$o.optional()}),Jwt=v.object({type:v.literal("pcb_component"),pcb_component_id:oo("pcb_component"),source_component_id:v.string(),center:Li,layer:Ya,rotation:rm,display_offset_x:v.string().optional().describe("How to display the x offset for this part, usually corresponding with how the user specified it"),display_offset_y:v.string().optional().describe("How to display the y offset for this part, usually corresponding with how the user specified it"),width:$o,height:$o,do_not_place:v.boolean().optional(),is_allowed_to_be_off_board:v.boolean().optional(),subcircuit_id:v.string().optional(),pcb_group_id:v.string().optional(),position_mode:v.enum(["packed","relative_to_group_anchor","relative_to_another_component","none"]).optional(),anchor_position:Li.optional(),anchor_alignment:G6.optional(),positioned_relative_to_pcb_group_id:v.string().optional(),positioned_relative_to_pcb_board_id:v.string().optional(),cable_insertion_center:Li.optional(),insertion_direction:v.enum(["from_above","from_left","from_right","from_front","from_back"]).optional(),metadata:v.object({kicad_footprint:F9t.optional()}).optional(),obstructs_within_bounds:v.boolean().default(!0).describe("Does this component take up all the space within its bounds on a layer. This is generally true except for when separated pin headers are being represented by a single component (in which case, chips can be placed between the pin headers) or for tall modules where chips fit underneath")}).describe("Defines a component on the PCB"),$wt=v.object({type:v.literal("pcb_hole"),pcb_hole_id:oo("pcb_hole"),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),pcb_component_id:v.string().optional(),hole_shape:v.literal("circle"),hole_diameter:v.number(),x:Ln,y:Ln,is_covered_with_solder_mask:v.boolean().optional(),soldermask_margin:v.number().optional()}),tTo=$wt.describe("Defines a circular hole on the PCB"),Zwt=v.object({type:v.literal("pcb_hole"),pcb_hole_id:oo("pcb_hole"),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),pcb_component_id:v.string().optional(),hole_shape:v.literal("rect"),hole_width:v.number(),hole_height:v.number(),x:Ln,y:Ln,is_covered_with_solder_mask:v.boolean().optional(),soldermask_margin:v.number().optional()}),nTo=Zwt.describe("Defines a rectangular (square-capable) hole on the PCB. Use equal width/height for square."),e7t=v.object({type:v.literal("pcb_hole"),pcb_hole_id:oo("pcb_hole"),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),pcb_component_id:v.string().optional(),hole_shape:v.enum(["circle","square"]),hole_diameter:v.number(),x:Ln,y:Ln,is_covered_with_solder_mask:v.boolean().optional(),soldermask_margin:v.number().optional()}),oTo=e7t.describe("Defines a circular or square hole on the PCB"),t7t=v.object({type:v.literal("pcb_hole"),pcb_hole_id:oo("pcb_hole"),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),pcb_component_id:v.string().optional(),hole_shape:v.literal("oval"),hole_width:v.number(),hole_height:v.number(),x:Ln,y:Ln,is_covered_with_solder_mask:v.boolean().optional(),soldermask_margin:v.number().optional()}),iTo=t7t.describe("Defines an oval hole on the PCB"),n7t=v.object({type:v.literal("pcb_hole"),pcb_hole_id:oo("pcb_hole"),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),pcb_component_id:v.string().optional(),hole_shape:v.literal("pill"),hole_width:v.number(),hole_height:v.number(),x:Ln,y:Ln,is_covered_with_solder_mask:v.boolean().optional(),soldermask_margin:v.number().optional()}),rTo=n7t.describe("Defines a pill-shaped hole on the PCB"),o7t=v.object({type:v.literal("pcb_hole"),pcb_hole_id:oo("pcb_hole"),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),pcb_component_id:v.string().optional(),hole_shape:v.literal("rotated_pill"),hole_width:v.number(),hole_height:v.number(),x:Ln,y:Ln,ccw_rotation:rm,is_covered_with_solder_mask:v.boolean().optional(),soldermask_margin:v.number().optional()}),sTo=o7t.describe("Defines a rotated pill-shaped hole on the PCB"),i7t=e7t.or(t7t).or(n7t).or(o7t).or($wt).or(Zwt),aTo=v.object({type:v.literal("pcb_plated_hole"),shape:v.literal("circle"),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),outer_diameter:v.number(),hole_diameter:v.number(),is_covered_with_solder_mask:v.boolean().optional(),x:Ln,y:Ln,layers:v.array(Ya),port_hints:v.array(v.string()).optional(),pcb_component_id:v.string().optional(),pcb_port_id:v.string().optional(),pcb_plated_hole_id:oo("pcb_plated_hole"),soldermask_margin:v.number().optional()}),cTo=v.object({type:v.literal("pcb_plated_hole"),shape:v.enum(["oval","pill"]),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),outer_width:v.number(),outer_height:v.number(),hole_width:v.number(),hole_height:v.number(),is_covered_with_solder_mask:v.boolean().optional(),x:Ln,y:Ln,ccw_rotation:rm,layers:v.array(Ya),port_hints:v.array(v.string()).optional(),pcb_component_id:v.string().optional(),pcb_port_id:v.string().optional(),pcb_plated_hole_id:oo("pcb_plated_hole"),soldermask_margin:v.number().optional()}),lTo=v.object({type:v.literal("pcb_plated_hole"),shape:v.literal("circular_hole_with_rect_pad"),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),hole_shape:v.literal("circle"),pad_shape:v.literal("rect"),hole_diameter:v.number(),rect_pad_width:v.number(),rect_pad_height:v.number(),rect_border_radius:v.number().optional(),hole_offset_x:Ln.default(0),hole_offset_y:Ln.default(0),is_covered_with_solder_mask:v.boolean().optional(),x:Ln,y:Ln,layers:v.array(Ya),port_hints:v.array(v.string()).optional(),pcb_component_id:v.string().optional(),pcb_port_id:v.string().optional(),pcb_plated_hole_id:oo("pcb_plated_hole"),soldermask_margin:v.number().optional(),rect_ccw_rotation:rm.optional()}),dTo=v.object({type:v.literal("pcb_plated_hole"),shape:v.literal("pill_hole_with_rect_pad"),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),hole_shape:v.literal("pill"),pad_shape:v.literal("rect"),hole_width:v.number(),hole_height:v.number(),rect_pad_width:v.number(),rect_pad_height:v.number(),rect_border_radius:v.number().optional(),hole_offset_x:Ln.default(0),hole_offset_y:Ln.default(0),is_covered_with_solder_mask:v.boolean().optional(),x:Ln,y:Ln,layers:v.array(Ya),port_hints:v.array(v.string()).optional(),pcb_component_id:v.string().optional(),pcb_port_id:v.string().optional(),pcb_plated_hole_id:oo("pcb_plated_hole"),soldermask_margin:v.number().optional()}),uTo=v.object({type:v.literal("pcb_plated_hole"),shape:v.literal("rotated_pill_hole_with_rect_pad"),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),hole_shape:v.literal("rotated_pill"),pad_shape:v.literal("rect"),hole_width:v.number(),hole_height:v.number(),hole_ccw_rotation:rm,rect_pad_width:v.number(),rect_pad_height:v.number(),rect_border_radius:v.number().optional(),rect_ccw_rotation:rm,hole_offset_x:Ln.default(0),hole_offset_y:Ln.default(0),is_covered_with_solder_mask:v.boolean().optional(),x:Ln,y:Ln,layers:v.array(Ya),port_hints:v.array(v.string()).optional(),pcb_component_id:v.string().optional(),pcb_port_id:v.string().optional(),pcb_plated_hole_id:oo("pcb_plated_hole"),soldermask_margin:v.number().optional()}),hTo=v.object({type:v.literal("pcb_plated_hole"),shape:v.literal("hole_with_polygon_pad"),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),hole_shape:v.enum(["circle","oval","pill","rotated_pill"]),hole_diameter:v.number().optional(),hole_width:v.number().optional(),hole_height:v.number().optional(),pad_outline:v.array(v.object({x:Ln,y:Ln})).min(3),hole_offset_x:Ln.default(0),hole_offset_y:Ln.default(0),is_covered_with_solder_mask:v.boolean().optional(),x:Ln,y:Ln,layers:v.array(Ya),port_hints:v.array(v.string()).optional(),pcb_component_id:v.string().optional(),pcb_port_id:v.string().optional(),pcb_plated_hole_id:oo("pcb_plated_hole"),soldermask_margin:v.number().optional(),ccw_rotation:rm.optional()}),r7t=v.union([aTo,cTo,lTo,dTo,uTo,hTo]),s7t=v.object({type:v.literal("pcb_port"),pcb_port_id:oo("pcb_port"),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),source_port_id:v.string(),pcb_component_id:v.string().optional(),x:Ln,y:Ln,layers:v.array(Ya),is_board_pinout:v.boolean().optional()}).describe("Defines a port on the PCB"),mTo=v.object({type:v.literal("pcb_smtpad"),shape:v.literal("circle"),pcb_smtpad_id:oo("pcb_smtpad"),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),x:Ln,y:Ln,radius:v.number(),layer:Ya,port_hints:v.array(v.string()).optional(),pcb_component_id:v.string().optional(),pcb_port_id:v.string().optional(),is_covered_with_solder_mask:v.boolean().optional(),soldermask_margin:v.number().optional()}),pTo=v.object({type:v.literal("pcb_smtpad"),shape:v.literal("rect"),pcb_smtpad_id:oo("pcb_smtpad"),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),x:Ln,y:Ln,width:v.number(),height:v.number(),rect_border_radius:v.number().optional(),corner_radius:v.number().optional(),layer:Ya,port_hints:v.array(v.string()).optional(),pcb_component_id:v.string().optional(),pcb_port_id:v.string().optional(),is_covered_with_solder_mask:v.boolean().optional(),soldermask_margin:v.number().optional(),soldermask_margin_left:v.number().optional(),soldermask_margin_top:v.number().optional(),soldermask_margin_right:v.number().optional(),soldermask_margin_bottom:v.number().optional()}),ATo=v.object({type:v.literal("pcb_smtpad"),shape:v.literal("rotated_rect"),pcb_smtpad_id:oo("pcb_smtpad"),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),x:Ln,y:Ln,width:v.number(),height:v.number(),rect_border_radius:v.number().optional(),corner_radius:v.number().optional(),ccw_rotation:rm,layer:Ya,port_hints:v.array(v.string()).optional(),pcb_component_id:v.string().optional(),pcb_port_id:v.string().optional(),is_covered_with_solder_mask:v.boolean().optional(),soldermask_margin:v.number().optional(),soldermask_margin_left:v.number().optional(),soldermask_margin_top:v.number().optional(),soldermask_margin_right:v.number().optional(),soldermask_margin_bottom:v.number().optional()}),a7t=v.object({type:v.literal("pcb_smtpad"),shape:v.literal("pill"),pcb_smtpad_id:oo("pcb_smtpad"),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),x:Ln,y:Ln,width:v.number(),height:v.number(),radius:v.number(),layer:Ya,port_hints:v.array(v.string()).optional(),pcb_component_id:v.string().optional(),pcb_port_id:v.string().optional(),is_covered_with_solder_mask:v.boolean().optional(),soldermask_margin:v.number().optional()}),_To=v.object({type:v.literal("pcb_smtpad"),shape:v.literal("rotated_pill"),pcb_smtpad_id:oo("pcb_smtpad"),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),x:Ln,y:Ln,width:v.number(),height:v.number(),radius:v.number(),ccw_rotation:rm,layer:Ya,port_hints:v.array(v.string()).optional(),pcb_component_id:v.string().optional(),pcb_port_id:v.string().optional(),is_covered_with_solder_mask:v.boolean().optional(),soldermask_margin:v.number().optional()}),gTo=v.object({type:v.literal("pcb_smtpad"),shape:v.literal("polygon"),pcb_smtpad_id:oo("pcb_smtpad"),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),points:v.array(Li),layer:Ya,port_hints:v.array(v.string()).optional(),pcb_component_id:v.string().optional(),pcb_port_id:v.string().optional(),is_covered_with_solder_mask:v.boolean().optional(),soldermask_margin:v.number().optional()}),c7t=v.discriminatedUnion("shape",[mTo,pTo,ATo,_To,a7t,gTo]).describe("Defines an SMT pad on the PCB"),fTo=v.object({type:v.literal("pcb_solder_paste"),shape:v.literal("circle"),pcb_solder_paste_id:oo("pcb_solder_paste"),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),x:Ln,y:Ln,radius:v.number(),layer:Ya,pcb_component_id:v.string().optional(),pcb_smtpad_id:v.string().optional()}),yTo=v.object({type:v.literal("pcb_solder_paste"),shape:v.literal("rect"),pcb_solder_paste_id:oo("pcb_solder_paste"),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),x:Ln,y:Ln,width:v.number(),height:v.number(),layer:Ya,pcb_component_id:v.string().optional(),pcb_smtpad_id:v.string().optional()}),xTo=v.object({type:v.literal("pcb_solder_paste"),shape:v.literal("pill"),pcb_solder_paste_id:oo("pcb_solder_paste"),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),x:Ln,y:Ln,width:v.number(),height:v.number(),radius:v.number(),layer:Ya,pcb_component_id:v.string().optional(),pcb_smtpad_id:v.string().optional()}),CTo=v.object({type:v.literal("pcb_solder_paste"),shape:v.literal("rotated_rect"),pcb_solder_paste_id:oo("pcb_solder_paste"),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),x:Ln,y:Ln,width:v.number(),height:v.number(),ccw_rotation:Ln,layer:Ya,pcb_component_id:v.string().optional(),pcb_smtpad_id:v.string().optional()}),ITo=v.object({type:v.literal("pcb_solder_paste"),shape:v.literal("oval"),pcb_solder_paste_id:oo("pcb_solder_paste"),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),x:Ln,y:Ln,width:v.number(),height:v.number(),layer:Ya,pcb_component_id:v.string().optional(),pcb_smtpad_id:v.string().optional()}),l7t=v.union([fTo,yTo,xTo,CTo,ITo]).describe("Defines solderpaste on the PCB"),d7t=v.object({type:v.literal("pcb_text"),pcb_text_id:oo("pcb_text"),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),text:v.string(),center:Li,layer:Ya,width:$o,height:$o,lines:v.number(),align:v.enum(["bottom-left"])}).describe("Defines text on the PCB"),u7t=v.object({route_type:v.literal("wire"),x:Ln,y:Ln,width:Ln,copper_pour_id:v.string().optional(),is_inside_copper_pour:v.boolean().optional(),start_pcb_port_id:v.string().optional(),end_pcb_port_id:v.string().optional(),layer:Ya}),h7t=v.object({route_type:v.literal("via"),x:Ln,y:Ln,copper_pour_id:v.string().optional(),is_inside_copper_pour:v.boolean().optional(),hole_diameter:Ln.optional(),outer_diameter:Ln.optional(),from_layer:Ya,to_layer:Ya}),m7t=v.union([u7t,h7t]),p7t=v.object({type:v.literal("pcb_trace"),source_trace_id:v.string().optional(),pcb_component_id:v.string().optional(),pcb_trace_id:oo("pcb_trace"),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),route_thickness_mode:v.enum(["constant","interpolated"]).default("constant").optional(),route_order_index:v.number().optional(),should_round_corners:v.boolean().optional(),trace_length:v.number().optional(),highlight_color:v.string().optional(),route:v.array(m7t)}).describe("Defines a trace on the PCB"),A7t=v.object({type:v.literal("pcb_trace_warning"),pcb_trace_warning_id:oo("pcb_trace_warning"),warning_type:v.literal("pcb_trace_warning").default("pcb_trace_warning"),message:v.string(),center:Li.optional(),pcb_trace_id:v.string(),source_trace_id:v.string(),pcb_component_ids:v.array(v.string()),pcb_port_ids:v.array(v.string()),subcircuit_id:v.string().optional()}).describe("Defines a trace warning on the PCB"),_7t=Sl.extend({type:v.literal("pcb_trace_error"),pcb_trace_error_id:oo("pcb_trace_error"),error_type:v.literal("pcb_trace_error").default("pcb_trace_error"),center:Li.optional(),pcb_trace_id:v.string(),source_trace_id:v.string(),pcb_component_ids:v.array(v.string()),pcb_port_ids:v.array(v.string()),subcircuit_id:v.string().optional()}).describe("Defines a trace error on the PCB"),g7t=Sl.extend({type:v.literal("pcb_trace_missing_error"),pcb_trace_missing_error_id:oo("pcb_trace_missing_error"),error_type:v.literal("pcb_trace_missing_error").default("pcb_trace_missing_error"),center:Li.optional(),source_trace_id:v.string(),pcb_component_ids:v.array(v.string()),pcb_port_ids:v.array(v.string()),subcircuit_id:v.string().optional()}).describe("Defines an error when a source trace has no corresponding PCB trace"),f7t=Sl.extend({type:v.literal("pcb_port_not_matched_error"),pcb_error_id:oo("pcb_error"),error_type:v.literal("pcb_port_not_matched_error").default("pcb_port_not_matched_error"),pcb_component_ids:v.array(v.string()),subcircuit_id:v.string().optional()}).describe("Defines a trace error on the PCB where a port is not matched"),y7t=Sl.extend({type:v.literal("pcb_port_not_connected_error"),pcb_port_not_connected_error_id:oo("pcb_port_not_connected_error"),error_type:v.literal("pcb_port_not_connected_error").default("pcb_port_not_connected_error"),pcb_port_ids:v.array(v.string()),pcb_component_ids:v.array(v.string()),subcircuit_id:v.string().optional()}).describe("Defines an error when a pcb port is not connected to any trace"),x7t=v.object({type:v.literal("pcb_net"),pcb_net_id:oo("pcb_net"),source_net_id:v.string().optional(),highlight_color:v.string().optional()}).describe("Defines a net on the PCB"),C7t=v.object({type:v.literal("pcb_via"),pcb_via_id:oo("pcb_via"),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),subcircuit_connectivity_map_key:v.string().optional(),x:Ln,y:Ln,outer_diameter:Ln.default("0.6mm"),hole_diameter:Ln.default("0.25mm"),from_layer:Ya.optional(),to_layer:Ya.optional(),layers:v.array(Ya),pcb_trace_id:v.string().optional(),net_is_assignable:v.boolean().optional(),net_assigned:v.boolean().optional(),is_tented:v.boolean().optional()}).describe("Defines a via on the PCB"),I7t=v.object({type:v.literal("pcb_board"),pcb_board_id:oo("pcb_board"),pcb_panel_id:v.string().optional(),carrier_pcb_board_id:v.string().optional(),is_subcircuit:v.boolean().optional(),subcircuit_id:v.string().optional(),is_mounted_to_carrier_board:v.boolean().optional(),width:$o.optional(),height:$o.optional(),center:Li,display_offset_x:v.string().optional().describe("How to display the x offset for this board, usually corresponding with how the user specified it"),display_offset_y:v.string().optional().describe("How to display the y offset for this board, usually corresponding with how the user specified it"),thickness:$o.optional().default(1.4),num_layers:v.number().optional().default(4),outline:v.array(Li).optional(),shape:v.enum(["rect","polygon"]).optional(),material:v.enum(["fr4","fr1"]).default("fr4"),anchor_position:Li.optional(),anchor_alignment:G6.optional(),position_mode:v.enum(["relative_to_panel_anchor","none"]).optional()}).merge(qwt).describe("Defines the board outline of the PCB"),b7t=v.object({type:v.literal("pcb_panel"),pcb_panel_id:oo("pcb_panel"),width:$o,height:$o,center:Li,thickness:$o.optional().default(1.4),covered_with_solder_mask:v.boolean().optional().default(!0)}).describe("Defines a PCB panel that can contain multiple boards"),S7t=Sl.extend({type:v.literal("pcb_placement_error"),pcb_placement_error_id:oo("pcb_placement_error"),error_type:v.literal("pcb_placement_error").default("pcb_placement_error"),subcircuit_id:v.string().optional()}).describe("Defines a placement error on the PCB"),P7t=Sl.extend({type:v.literal("pcb_panelization_placement_error"),pcb_panelization_placement_error_id:oo("pcb_panelization_placement_error"),error_type:v.literal("pcb_panelization_placement_error").default("pcb_panelization_placement_error"),pcb_panel_id:v.string().optional(),pcb_board_id:v.string().optional(),subcircuit_id:v.string().optional()}).describe("Defines a panelization placement error on the PCB"),v7t=v.object({type:v.literal("pcb_trace_hint"),pcb_trace_hint_id:oo("pcb_trace_hint"),pcb_port_id:v.string(),pcb_component_id:v.string(),route:v.array(jwt),subcircuit_id:v.string().optional()}).describe("A hint that can be used during generation of a PCB trace"),E7t=v.object({type:v.literal("pcb_silkscreen_line"),pcb_silkscreen_line_id:oo("pcb_silkscreen_line"),pcb_component_id:v.string(),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),stroke_width:Ln.default("0.1mm"),x1:Ln,y1:Ln,x2:Ln,y2:Ln,layer:F_}).describe("Defines a silkscreen line on the PCB"),M7t=v.object({type:v.literal("pcb_silkscreen_path"),pcb_silkscreen_path_id:oo("pcb_silkscreen_path"),pcb_component_id:v.string(),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),layer:F_,route:v.array(Li),stroke_width:$o}).describe("Defines a silkscreen path on the PCB"),B7t=v.object({type:v.literal("pcb_silkscreen_text"),pcb_silkscreen_text_id:oo("pcb_silkscreen_text"),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),font:v.literal("tscircuit2024").default("tscircuit2024"),font_size:Ln.default("0.2mm"),pcb_component_id:v.string(),text:v.string(),is_knockout:v.boolean().default(!1).optional(),knockout_padding:v.object({left:$o,top:$o,bottom:$o,right:$o}).default({left:"0.2mm",top:"0.2mm",bottom:"0.2mm",right:"0.2mm"}).optional(),ccw_rotation:v.number().optional(),layer:Ya,is_mirrored:v.boolean().default(!1).optional(),anchor_position:Li.default({x:0,y:0}),anchor_alignment:G6.default("center")}).describe("Defines silkscreen text on the PCB"),w7t=v.object({type:v.literal("pcb_copper_text"),pcb_copper_text_id:oo("pcb_copper_text"),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),font:v.literal("tscircuit2024").default("tscircuit2024"),font_size:Ln.default("0.2mm"),pcb_component_id:v.string(),text:v.string(),is_knockout:v.boolean().default(!1).optional(),knockout_padding:v.object({left:$o,top:$o,bottom:$o,right:$o}).default({left:"0.2mm",top:"0.2mm",bottom:"0.2mm",right:"0.2mm"}).optional(),ccw_rotation:v.number().optional(),layer:Ya,is_mirrored:v.boolean().default(!1).optional(),anchor_position:Li.default({x:0,y:0}),anchor_alignment:G6.default("center")}).describe("Defines copper text on the PCB"),T7t=v.object({type:v.literal("pcb_silkscreen_rect"),pcb_silkscreen_rect_id:oo("pcb_silkscreen_rect"),pcb_component_id:v.string(),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),center:Li,width:$o,height:$o,layer:Ya,stroke_width:$o.default("1mm"),corner_radius:$o.optional(),is_filled:v.boolean().default(!0).optional(),has_stroke:v.boolean().optional(),is_stroke_dashed:v.boolean().optional(),ccw_rotation:v.number().optional()}).describe("Defines a silkscreen rect on the PCB"),D7t=v.object({type:v.literal("pcb_silkscreen_circle"),pcb_silkscreen_circle_id:oo("pcb_silkscreen_circle"),pcb_component_id:v.string(),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),center:Li,radius:$o,layer:F_,stroke_width:$o.default("1mm"),is_filled:v.boolean().optional()}).describe("Defines a silkscreen circle on the PCB"),N7t=v.object({type:v.literal("pcb_silkscreen_oval"),pcb_silkscreen_oval_id:oo("pcb_silkscreen_oval"),pcb_component_id:v.string(),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),center:Li,radius_x:Ln,radius_y:Ln,layer:F_,ccw_rotation:rm.optional()}).describe("Defines a silkscreen oval on the PCB"),R7t=v.object({type:v.literal("pcb_silkscreen_pill"),pcb_silkscreen_pill_id:oo("pcb_silkscreen_pill"),pcb_component_id:v.string(),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),center:Li,width:$o,height:$o,layer:Ya,ccw_rotation:v.number().optional()}).describe("Defines a silkscreen pill on the PCB"),Q7t=v.object({type:v.literal("pcb_fabrication_note_text"),pcb_fabrication_note_text_id:oo("pcb_fabrication_note_text"),subcircuit_id:v.string().optional(),pcb_group_id:v.string().optional(),font:v.literal("tscircuit2024").default("tscircuit2024"),font_size:Ln.default("1mm"),pcb_component_id:v.string(),text:v.string(),layer:F_,anchor_position:Li.default({x:0,y:0}),anchor_alignment:v.enum(["center","top_left","top_right","bottom_left","bottom_right"]).default("center"),color:v.string().optional()}).describe("Defines a fabrication note in text on the PCB, useful for leaving notes for assemblers or fabricators"),k7t=v.object({type:v.literal("pcb_fabrication_note_path"),pcb_fabrication_note_path_id:oo("pcb_fabrication_note_path"),pcb_component_id:v.string(),subcircuit_id:v.string().optional(),layer:Ya,route:v.array(Li),stroke_width:$o,color:v.string().optional()}).describe("Defines a fabrication path on the PCB for fabricators or assemblers"),L7t=v.object({type:v.literal("pcb_fabrication_note_rect"),pcb_fabrication_note_rect_id:oo("pcb_fabrication_note_rect"),pcb_component_id:v.string(),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),center:Li,width:$o,height:$o,layer:F_,stroke_width:$o.default("0.1mm"),corner_radius:$o.optional(),is_filled:v.boolean().optional(),has_stroke:v.boolean().optional(),is_stroke_dashed:v.boolean().optional(),color:v.string().optional()}).describe("Defines a fabrication note rectangle on the PCB"),F7t=v.object({type:v.literal("pcb_fabrication_note_dimension"),pcb_fabrication_note_dimension_id:oo("pcb_fabrication_note_dimension"),pcb_component_id:v.string(),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),layer:F_,from:Li,to:Li,text:v.string().optional(),text_ccw_rotation:v.number().optional(),offset:$o.optional(),offset_distance:$o.optional(),offset_direction:v.object({x:v.number(),y:v.number()}).optional(),font:v.literal("tscircuit2024").default("tscircuit2024"),font_size:$o.default("1mm"),color:v.string().optional(),arrow_size:$o.default("1mm")}).describe("Defines a measurement annotation within PCB fabrication notes"),H7t=v.object({type:v.literal("pcb_note_text"),pcb_note_text_id:oo("pcb_note_text"),pcb_component_id:v.string().optional(),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),name:v.string().optional(),font:v.literal("tscircuit2024").default("tscircuit2024"),font_size:Ln.default("1mm"),text:v.string().optional(),anchor_position:Li.default({x:0,y:0}),anchor_alignment:v.enum(["center","top_left","top_right","bottom_left","bottom_right"]).default("center"),layer:F_.default("top"),is_mirrored_from_top_view:v.boolean().optional(),color:v.string().optional()}).describe("Defines a documentation note in text on the PCB"),O7t=v.object({type:v.literal("pcb_note_rect"),pcb_note_rect_id:oo("pcb_note_rect"),pcb_component_id:v.string().optional(),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),name:v.string().optional(),text:v.string().optional(),center:Li,width:$o,height:$o,layer:F_.default("top"),stroke_width:$o.default("0.1mm"),corner_radius:$o.optional(),is_filled:v.boolean().optional(),has_stroke:v.boolean().optional(),is_stroke_dashed:v.boolean().optional(),color:v.string().optional()}).describe("Defines a rectangular documentation note on the PCB"),z7t=v.object({type:v.literal("pcb_note_path"),pcb_note_path_id:oo("pcb_note_path"),pcb_component_id:v.string().optional(),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),name:v.string().optional(),text:v.string().optional(),route:v.array(Li),layer:F_.default("top"),stroke_width:$o.default("0.1mm"),color:v.string().optional()}).describe("Defines a polyline documentation note on the PCB"),G7t=v.object({type:v.literal("pcb_note_line"),pcb_note_line_id:oo("pcb_note_line"),pcb_component_id:v.string().optional(),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),name:v.string().optional(),text:v.string().optional(),x1:Ln,y1:Ln,x2:Ln,y2:Ln,layer:F_.default("top"),stroke_width:Ln.default("0.1mm"),color:v.string().optional(),is_dashed:v.boolean().optional()}).describe("Defines a straight documentation note line on the PCB"),Y7t=v.object({type:v.literal("pcb_note_dimension"),pcb_note_dimension_id:oo("pcb_note_dimension"),pcb_component_id:v.string().optional(),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),name:v.string().optional(),from:Li,to:Li,text:v.string().optional(),text_ccw_rotation:v.number().optional(),offset_distance:$o.optional(),offset_direction:v.object({x:v.number(),y:v.number()}).optional(),font:v.literal("tscircuit2024").default("tscircuit2024"),font_size:$o.default("1mm"),layer:F_.default("top"),color:v.string().optional(),arrow_size:$o.default("1mm")}).describe("Defines a measurement annotation within PCB documentation notes"),V7t=Sl.extend({type:v.literal("pcb_footprint_overlap_error"),pcb_error_id:oo("pcb_error"),error_type:v.literal("pcb_footprint_overlap_error").default("pcb_footprint_overlap_error"),pcb_smtpad_ids:v.array(v.string()).optional(),pcb_plated_hole_ids:v.array(v.string()).optional(),pcb_hole_ids:v.array(v.string()).optional(),pcb_keepout_ids:v.array(v.string()).optional()}).describe("Error emitted when a pcb footprint overlaps with another element"),U7t=Sl.extend({type:v.literal("pcb_courtyard_overlap_error"),pcb_error_id:oo("pcb_error"),error_type:v.literal("pcb_courtyard_overlap_error").default("pcb_courtyard_overlap_error"),pcb_component_ids:v.tuple([v.string(),v.string()])}).describe("Error emitted when the courtyard (CrtYd) of one PCB component overlaps with the courtyard of another"),W7t=v.object({type:v.literal("pcb_keepout"),shape:v.literal("rect"),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),center:Li,width:Ln,height:Ln,pcb_keepout_id:v.string(),layers:v.array(v.string()),description:v.string().optional()}).or(v.object({type:v.literal("pcb_keepout"),shape:v.literal("circle"),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),center:Li,radius:Ln,pcb_keepout_id:v.string(),layers:v.array(v.string()),description:v.string().optional()})),nfe=v.object({type:v.literal("pcb_cutout"),pcb_cutout_id:oo("pcb_cutout"),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),pcb_board_id:v.string().optional(),pcb_panel_id:v.string().optional()}),X7t=nfe.extend({shape:v.literal("rect"),center:Li,width:$o,height:$o,rotation:rm.optional(),corner_radius:$o.optional()}),K7t=nfe.extend({shape:v.literal("circle"),center:Li,radius:$o}),j7t=nfe.extend({shape:v.literal("polygon"),points:v.array(Li)}),q7t=nfe.extend({shape:v.literal("path"),route:v.array(Li),slot_width:$o,slot_length:$o.optional(),space_between_slots:$o.optional(),slot_corner_radius:$o.optional()}),J7t=v.discriminatedUnion("shape",[X7t,K7t,j7t,q7t]).describe("Defines a cutout on the PCB, removing board material."),$7t=Sl.extend({type:v.literal("pcb_missing_footprint_error"),pcb_missing_footprint_error_id:oo("pcb_missing_footprint_error"),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),error_type:v.literal("pcb_missing_footprint_error").default("pcb_missing_footprint_error"),source_component_id:v.string()}).describe("Defines a missing footprint error on the PCB"),Z7t=Sl.extend({type:v.literal("external_footprint_load_error"),external_footprint_load_error_id:oo("external_footprint_load_error"),pcb_component_id:v.string(),source_component_id:v.string(),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),footprinter_string:v.string().optional(),error_type:v.literal("external_footprint_load_error").default("external_footprint_load_error")}).describe("Defines an error when an external footprint fails to load"),e8t=Sl.extend({type:v.literal("circuit_json_footprint_load_error"),circuit_json_footprint_load_error_id:oo("circuit_json_footprint_load_error"),pcb_component_id:v.string(),source_component_id:v.string(),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),error_type:v.literal("circuit_json_footprint_load_error").default("circuit_json_footprint_load_error"),circuit_json:v.array(v.any()).optional()}).describe("Defines an error when a circuit JSON footprint fails to load"),t8t=v.object({type:v.literal("pcb_group"),pcb_group_id:oo("pcb_group"),source_group_id:v.string(),is_subcircuit:v.boolean().optional(),subcircuit_id:v.string().optional(),width:$o.optional(),height:$o.optional(),center:Li,display_offset_x:v.string().optional().describe("How to display the x offset for this group, usually corresponding with how the user specified it"),display_offset_y:v.string().optional().describe("How to display the y offset for this group, usually corresponding with how the user specified it"),outline:v.array(Li).optional(),anchor_position:Li.optional(),anchor_alignment:G6.default("center"),position_mode:v.enum(["packed","relative_to_group_anchor","none"]).optional(),positioned_relative_to_pcb_group_id:v.string().optional(),positioned_relative_to_pcb_board_id:v.string().optional(),pcb_component_ids:v.array(v.string()),child_layout_mode:v.enum(["packed","none"]).optional(),name:v.string().optional(),description:v.string().optional(),layout_mode:v.string().optional(),autorouter_configuration:v.object({trace_clearance:$o}).optional(),autorouter_used_string:v.string().optional()}).describe("Defines a group of components on the PCB"),n8t=Sl.extend({type:v.literal("pcb_autorouting_error"),pcb_error_id:oo("pcb_autorouting_error"),error_type:v.literal("pcb_autorouting_error").default("pcb_autorouting_error"),subcircuit_id:v.string().optional()}).describe("The autorouting has failed to route a portion of the board"),o8t=v.object({type:v.literal("pcb_manual_edit_conflict_warning"),pcb_manual_edit_conflict_warning_id:oo("pcb_manual_edit_conflict_warning"),warning_type:v.literal("pcb_manual_edit_conflict_warning").default("pcb_manual_edit_conflict_warning"),message:v.string(),pcb_component_id:v.string(),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),source_component_id:v.string()}).describe("Warning emitted when a component has both manual placement and explicit pcbX/pcbY coordinates"),YPt=v.enum(["x-","x+","y+","y-"]),i8t=v.object({type:v.literal("pcb_connector_not_in_accessible_orientation_warning"),pcb_connector_not_in_accessible_orientation_warning_id:oo("pcb_connector_not_in_accessible_orientation_warning"),warning_type:v.literal("pcb_connector_not_in_accessible_orientation_warning").default("pcb_connector_not_in_accessible_orientation_warning"),message:v.string(),pcb_component_id:v.string(),source_component_id:v.string().optional(),pcb_board_id:v.string().optional(),facing_direction:YPt,recommended_facing_direction:YPt,subcircuit_id:v.string().optional()}).describe("Warning emitted when a connector PCB component is facing inward toward the board and should be reoriented to an outward-facing direction"),r8t=v.object({type:v.literal("supplier_footprint_mismatch_warning"),supplier_footprint_mismatch_warning_id:oo("supplier_footprint_mismatch_warning"),warning_type:v.literal("supplier_footprint_mismatch_warning").default("supplier_footprint_mismatch_warning"),message:v.string(),source_component_id:v.string(),pcb_component_id:v.string().optional(),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),supplier_name:tLe.optional(),supplier_part_number:v.string().optional(),supplier_footprint_url:v.string().optional(),footprint_copper_intersection_over_union:v.number()}).describe("Warning emitted when a supplier part footprint does not match the expected footprint"),s8t=v.object({type:v.literal("pcb_breakout_point"),pcb_breakout_point_id:oo("pcb_breakout_point"),pcb_group_id:v.string(),subcircuit_id:v.string().optional(),source_trace_id:v.string().optional(),source_port_id:v.string().optional(),source_net_id:v.string().optional(),x:Ln,y:Ln}).describe("Defines a routing target within a pcb_group for a source_trace or source_net"),a8t=v.object({type:v.literal("pcb_ground_plane"),pcb_ground_plane_id:oo("pcb_ground_plane"),source_pcb_ground_plane_id:v.string(),source_net_id:v.string(),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional()}).describe("Defines a ground plane on the PCB"),c8t=v.object({type:v.literal("pcb_ground_plane_region"),pcb_ground_plane_region_id:oo("pcb_ground_plane_region"),pcb_ground_plane_id:v.string(),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),layer:Ya,points:v.array(Li)}).describe("Defines a polygon region of a ground plane"),l8t=v.object({type:v.literal("pcb_thermal_spoke"),pcb_thermal_spoke_id:oo("pcb_thermal_spoke"),pcb_ground_plane_id:v.string(),shape:v.string(),spoke_count:v.number(),spoke_thickness:Ln,spoke_inner_diameter:Ln,spoke_outer_diameter:Ln,pcb_plated_hole_id:v.string().optional(),subcircuit_id:v.string().optional()}).describe("Pattern for connecting a ground plane to a plated hole"),PLe=v.object({type:v.literal("pcb_copper_pour"),pcb_copper_pour_id:oo("pcb_copper_pour"),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),layer:Ya,source_net_id:v.string().optional(),covered_with_solder_mask:v.boolean().optional().default(!0)}),d8t=PLe.extend({shape:v.literal("rect"),center:Li,width:$o,height:$o,rotation:rm.optional()}),u8t=PLe.extend({shape:v.literal("brep"),brep_shape:Xwt}),h8t=PLe.extend({shape:v.literal("polygon"),points:v.array(Li)}),m8t=v.discriminatedUnion("shape",[d8t,u8t,h8t]).describe("Defines a copper pour on the PCB."),p8t=Sl.extend({type:v.literal("pcb_component_outside_board_error"),pcb_component_outside_board_error_id:oo("pcb_component_outside_board_error"),error_type:v.literal("pcb_component_outside_board_error").default("pcb_component_outside_board_error"),pcb_component_id:v.string(),pcb_board_id:v.string(),component_center:Li,component_bounds:v.object({min_x:v.number(),max_x:v.number(),min_y:v.number(),max_y:v.number()}),subcircuit_id:v.string().optional(),source_component_id:v.string().optional()}).describe("Error emitted when a PCB component is placed outside the board boundaries"),A8t=Sl.extend({type:v.literal("pcb_component_not_on_board_edge_error"),pcb_component_not_on_board_edge_error_id:oo("pcb_component_not_on_board_edge_error"),error_type:v.literal("pcb_component_not_on_board_edge_error").default("pcb_component_not_on_board_edge_error"),pcb_component_id:v.string(),pcb_board_id:v.string(),component_center:Li,pad_to_nearest_board_edge_distance:v.number(),source_component_id:v.string().optional(),subcircuit_id:v.string().optional()}).describe("Error emitted when a component that must be placed on the board edge is centered away from the edge"),_8t=Sl.extend({type:v.literal("pcb_component_invalid_layer_error"),pcb_component_invalid_layer_error_id:oo("pcb_component_invalid_layer_error"),error_type:v.literal("pcb_component_invalid_layer_error").default("pcb_component_invalid_layer_error"),pcb_component_id:v.string().optional(),source_component_id:v.string(),layer:Ya,subcircuit_id:v.string().optional()}).describe("Error emitted when a component is placed on an invalid layer (components can only be on 'top' or 'bottom' layers)"),g8t=Sl.extend({type:v.literal("pcb_via_clearance_error"),pcb_error_id:oo("pcb_error"),error_type:v.literal("pcb_via_clearance_error").default("pcb_via_clearance_error"),pcb_via_ids:v.array(v.string()).min(2),minimum_clearance:Ln.optional(),actual_clearance:Ln.optional(),pcb_center:v.object({x:v.number().optional(),y:v.number().optional()}).optional(),subcircuit_id:v.string().optional()}).describe("Error emitted when vias are closer than the allowed clearance"),f8t=Sl.extend({type:v.literal("pcb_via_trace_clearance_error"),pcb_via_trace_clearance_error_id:oo("pcb_via_trace_clearance_error"),error_type:v.literal("pcb_via_trace_clearance_error").default("pcb_via_trace_clearance_error"),pcb_via_id:v.string(),pcb_trace_id:v.string(),minimum_clearance:Ln.optional(),actual_clearance:Ln.optional(),center:v.object({x:v.number().optional(),y:v.number().optional()}).optional(),subcircuit_id:v.string().optional()}).describe("Error emitted when a via and trace are closer than the allowed clearance"),y8t=Sl.extend({type:v.literal("pcb_pad_pad_clearance_error"),pcb_pad_pad_clearance_error_id:oo("pcb_pad_pad_clearance_error"),error_type:v.literal("pcb_pad_pad_clearance_error").default("pcb_pad_pad_clearance_error"),pcb_pad_ids:v.array(v.string()).min(2),minimum_clearance:Ln.optional(),actual_clearance:Ln.optional(),center:v.object({x:v.number().optional(),y:v.number().optional()}).optional(),subcircuit_id:v.string().optional()}).describe("Error emitted when pads are closer than the allowed clearance"),x8t=Sl.extend({type:v.literal("pcb_pad_trace_clearance_error"),pcb_pad_trace_clearance_error_id:oo("pcb_pad_trace_clearance_error"),error_type:v.literal("pcb_pad_trace_clearance_error").default("pcb_pad_trace_clearance_error"),pcb_pad_id:v.string(),pcb_trace_id:v.string(),minimum_clearance:Ln.optional(),actual_clearance:Ln.optional(),center:v.object({x:v.number().optional(),y:v.number().optional()}).optional(),subcircuit_id:v.string().optional()}).describe("Error emitted when a pad and trace are closer than allowed clearance"),C8t=v.object({type:v.literal("pcb_courtyard_rect"),pcb_courtyard_rect_id:oo("pcb_courtyard_rect"),pcb_component_id:v.string(),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),center:Li,width:$o,height:$o,layer:F_,ccw_rotation:rm.optional(),color:v.string().optional()}).describe("Defines a courtyard rectangle on the PCB"),I8t=v.object({type:v.literal("pcb_courtyard_outline"),pcb_courtyard_outline_id:oo("pcb_courtyard_outline"),pcb_component_id:v.string(),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),layer:F_,outline:v.array(Li).min(2)}).describe("Defines a courtyard outline on the PCB"),b8t=v.object({type:v.literal("pcb_courtyard_polygon"),pcb_courtyard_polygon_id:oo("pcb_courtyard_polygon"),pcb_component_id:v.string(),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),layer:F_,points:v.array(Li).min(3),color:v.string().optional()}).describe("Defines a courtyard polygon on the PCB"),S8t=v.object({type:v.literal("pcb_courtyard_circle"),pcb_courtyard_circle_id:oo("pcb_courtyard_circle"),pcb_component_id:v.string(),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),center:Li,radius:$o,layer:F_,color:v.string().optional()}).describe("Defines a courtyard circle on the PCB"),bTo=["obj","stl","3mf","gltf","glb","step","wrl"],P8t=["x+","x-","y+","y-","z+","z-"],STo={obj:"z+",stl:"z+","3mf":"z+",gltf:"y+",glb:"y+",step:"z+",wrl:"y+"},v8t=v.object({type:v.literal("cad_component"),cad_component_id:v.string(),pcb_component_id:v.string(),source_component_id:v.string(),position:I6,rotation:I6.optional(),size:I6.optional(),layer:Ya.optional(),subcircuit_id:v.string().optional(),footprinter_string:v.string().optional(),model_obj_url:v.string().optional(),model_stl_url:v.string().optional(),model_3mf_url:v.string().optional(),model_gltf_url:v.string().optional(),model_glb_url:v.string().optional(),model_step_url:v.string().optional(),model_wrl_url:v.string().optional(),model_asset:D9t.optional(),model_unit_to_mm_scale_factor:v.number().optional(),model_board_normal_direction:v.enum(P8t).optional().describe(`The direction in the model's coordinate space that is considered "up" or "coming out of the board surface"`),model_origin_position:I6.optional(),model_origin_alignment:v.enum(["unknown","center","center_of_component_on_board_surface","bottom_center_of_component"]).optional(),model_object_fit:v.enum(["contain_within_bounds","fill_bounds"]).optional().default("contain_within_bounds"),model_jscad:v.any().optional(),show_as_translucent_model:v.boolean().optional(),anchor_alignment:v.enum(["center","center_of_component_on_board_surface"]).optional().default("center")}).describe("Defines a component on the PCB"),vLe=v.enum(["sinewave","square","triangle","sawtooth"]),PTo=v.union([v.string(),v.number()]).transform((e)=>typeof e=="string"?e.endsWith("%")?parseFloat(e.slice(0,-1))/100:parseFloat(e):e).pipe(v.number().min(0,"Duty cycle must be non-negative").max(1,"Duty cycle cannot be greater than 100%")),E8t=v.object({type:v.literal("simulation_voltage_source"),simulation_voltage_source_id:oo("simulation_voltage_source"),is_dc_source:v.literal(!0).optional().default(!0),positive_source_port_id:v.string().optional(),negative_source_port_id:v.string().optional(),positive_source_net_id:v.string().optional(),negative_source_net_id:v.string().optional(),voltage:R6}).describe("Defines a DC voltage source for simulation"),M8t=v.object({type:v.literal("simulation_voltage_source"),simulation_voltage_source_id:oo("simulation_voltage_source"),is_dc_source:v.literal(!1),terminal1_source_port_id:v.string().optional(),terminal2_source_port_id:v.string().optional(),terminal1_source_net_id:v.string().optional(),terminal2_source_net_id:v.string().optional(),voltage:R6.optional(),frequency:mL.optional(),peak_to_peak_voltage:R6.optional(),wave_shape:vLe.optional(),phase:rm.optional(),duty_cycle:PTo.optional()}).describe("Defines an AC voltage source for simulation"),B8t=v.union([E8t,M8t]).describe("Defines a voltage source for simulation"),vTo=v.union([v.string(),v.number()]).transform((e)=>typeof e=="string"?e.endsWith("%")?parseFloat(e.slice(0,-1))/100:parseFloat(e):e).pipe(v.number().min(0,"Duty cycle must be non-negative").max(1,"Duty cycle cannot be greater than 100%")),w8t=v.object({type:v.literal("simulation_current_source"),simulation_current_source_id:oo("simulation_current_source"),is_dc_source:v.literal(!0).optional().default(!0),positive_source_port_id:v.string().optional(),negative_source_port_id:v.string().optional(),positive_source_net_id:v.string().optional(),negative_source_net_id:v.string().optional(),current:KV}).describe("Defines a DC current source for simulation"),T8t=v.object({type:v.literal("simulation_current_source"),simulation_current_source_id:oo("simulation_current_source"),is_dc_source:v.literal(!1),terminal1_source_port_id:v.string().optional(),terminal2_source_port_id:v.string().optional(),terminal1_source_net_id:v.string().optional(),terminal2_source_net_id:v.string().optional(),current:KV.optional(),frequency:mL.optional(),peak_to_peak_current:KV.optional(),wave_shape:vLe.optional(),phase:rm.optional(),duty_cycle:vTo.optional()}).describe("Defines an AC current source for simulation"),D8t=v.union([w8t,T8t]).describe("Defines a current source for simulation"),N8t=v.union([v.literal("spice_dc_sweep"),v.literal("spice_dc_operating_point"),v.literal("spice_transient_analysis"),v.literal("spice_ac_analysis")]),R8t=v.object({type:v.literal("simulation_experiment"),simulation_experiment_id:oo("simulation_experiment"),name:v.string(),experiment_type:N8t,time_per_step:zte.optional(),start_time_ms:Jk.optional(),end_time_ms:Jk.optional()}).describe("Defines a simulation experiment configuration"),Q8t=v.object({type:v.literal("simulation_transient_voltage_graph"),simulation_transient_voltage_graph_id:oo("simulation_transient_voltage_graph"),simulation_experiment_id:v.string(),timestamps_ms:v.array(v.number()).optional(),voltage_levels:v.array(v.number()),source_component_id:v.string().optional(),subcircuit_connectivity_map_key:v.string().optional(),time_per_step:zte,start_time_ms:Jk,end_time_ms:Jk,name:v.string().optional(),color:v.string().optional()}).describe("Stores voltage measurements over time for a simulation"),k8t=v.object({type:v.literal("simulation_switch"),simulation_switch_id:oo("simulation_switch"),source_component_id:v.string().optional(),closes_at:Jk.optional(),opens_at:Jk.optional(),starts_closed:v.boolean().optional(),switching_frequency:mL.optional()}).describe("Defines a switch for simulation timing control"),L8t=v.object({type:v.literal("simulation_voltage_probe"),simulation_voltage_probe_id:oo("simulation_voltage_probe"),source_component_id:v.string().optional(),name:v.string().optional(),signal_input_source_port_id:v.string().optional(),signal_input_source_net_id:v.string().optional(),reference_input_source_port_id:v.string().optional(),reference_input_source_net_id:v.string().optional(),subcircuit_id:v.string().optional(),color:v.string().optional()}).describe("Defines a voltage probe for simulation. If a reference input is not provided, it measures against ground. If a reference input is provided, it measures the differential voltage between two points.").superRefine((e,t)=>{if(e.reference_input_source_port_id||e.reference_input_source_net_id){let n=!!e.signal_input_source_port_id||!!e.reference_input_source_port_id,o=!!e.signal_input_source_net_id||!!e.reference_input_source_net_id;n&&o?t.addIssue({code:v.ZodIssueCode.custom,message:"Cannot mix port and net connections in a differential probe."}):n?e.signal_input_source_port_id&&e.reference_input_source_port_id||t.addIssue({code:v.ZodIssueCode.custom,message:"Differential port probe requires both signal_input_source_port_id and reference_input_source_port_id."}):o&&(e.signal_input_source_net_id&&e.reference_input_source_net_id||t.addIssue({code:v.ZodIssueCode.custom,message:"Differential net probe requires both signal_input_source_net_id and reference_input_source_net_id."}))}else!!e.signal_input_source_port_id==!!e.signal_input_source_net_id&&t.addIssue({code:v.ZodIssueCode.custom,message:"A voltage probe must have exactly one of signal_input_source_port_id or signal_input_source_net_id."})}),F8t=Sl.extend({type:v.literal("simulation_unknown_experiment_error"),simulation_unknown_experiment_error_id:oo("simulation_unknown_experiment_error"),error_type:v.literal("simulation_unknown_experiment_error").default("simulation_unknown_experiment_error"),simulation_experiment_id:v.string().optional(),subcircuit_id:v.string().optional()}).describe("An unknown error occurred during the simulation experiment."),H8t=v.object({type:v.literal("simulation_op_amp"),simulation_op_amp_id:oo("simulation_op_amp"),source_component_id:v.string().optional(),inverting_input_source_port_id:v.string(),non_inverting_input_source_port_id:v.string(),output_source_port_id:v.string(),positive_supply_source_port_id:v.string(),negative_supply_source_port_id:v.string()}).describe("Defines a simple ideal operational amplifier for simulation"),O8t=v.union([rwt,owt,iwt,nwt,awt,swt,rLe,nLe,efe,iLe,oLe,sLe,aLe,cLe,uLe,hLe,mLe,fLe,pLe,ALe,_Le,gLe,dLe,lLe,dwt,hwt,cwt,yLe,xLe,CLe,ILe,bLe,mwt,pwt,Awt,_wt,gwt,SLe,lwt,Jwt,i7t,$7t,Z7t,e8t,o8t,i8t,r8t,r7t,W7t,s7t,x7t,d7t,p7t,A7t,C7t,c7t,l7t,I7t,b7t,t8t,v7t,E7t,M7t,B7t,R7t,w7t,T7t,D7t,N7t,_7t,g7t,S7t,P7t,f7t,y7t,g8t,f8t,y8t,x8t,k7t,Q7t,L7t,F7t,H7t,O7t,z7t,G7t,Y7t,n8t,V7t,U7t,s8t,J7t,a8t,c8t,l8t,m8t,p8t,A8t,_8t,C8t,I8t,b8t,S8t,fwt,Twt,vwt,Ewt,Mwt,Bwt,Swt,Pwt,Dwt,wwt,ywt,Rwt,Qwt,Nwt,Hwt,Owt,zwt,Gwt,Uwt,Ywt,Vwt,v8t,B8t,D8t,R8t,Q8t,k8t,L8t,F8t,H8t]),K_e=O8t;function VPt(e,t,n){if(!t||!n)return;let o=e.get(t);o||(o=new Set,e.set(t,o)),o.add(n);let i=e.get(n);i||(i=new Set,e.set(n,i)),i.add(t)}var YRe=(e,t={})=>{let n=e,o=n._internal_store;if(!o){o={counts:{},editCount:0},n._internal_store=o;for(let r of n){let s=r.type,a=r[`${s}_id`];if(!a)continue;let c=Number.parseInt(a.split("_").pop());Number.isNaN(c)||(o.counts[s]=Math.max(o.counts[s]??0,c))}}let i=new Proxy({},{get:(r,s)=>{if(s==="toArray")return()=>(n.editCount=o.editCount,n);if(s==="editCount")return o.editCount;if(s==="subtree")return(c)=>YRe(function(l,d){if(!d.subcircuit_id&&!d.source_group_id)return[...l];let u=d;if(d.subcircuit_id){let g=new Set([d.subcircuit_id]),_=new Map,f=new Map;for(let x of l)if(x.type==="source_group"){let{source_group_id:C,subcircuit_id:I}=x;I&&f.set(C,I);let b=x.parent_source_group_id;b&&(_.has(b)||_.set(b,[]),_.get(b).push(C))}let y;for(let[x,C]of f)if(C===d.subcircuit_id){y=x;break}if(y){let x=(C)=>{let I=_.get(C)||[];for(let b of I){let P=f.get(b);P&&g.add(P),x(b)}};x(y),u={...d,subcircuit_ids:Array.from(g)}}}let h=new Map;for(let g of l){let _=g[`${g.type}_id`];typeof _=="string"&&h.set(_,g)}let A=new Map;for(let g of l){let _=Object.entries(g);for(let[f,y]of _)if(f!=="parent_source_group_id"){if(f.endsWith("_id")&&typeof y=="string")VPt(A,g,h.get(y));else if(f.endsWith("_ids")&&Array.isArray(y))for(let x of y)typeof x=="string"&&VPt(A,g,h.get(x))}}let m=[],p=new Set;for(let g of l){let _=!1;(u.subcircuit_id&&("subcircuit_id"in g)&&g.subcircuit_id===u.subcircuit_id||u.subcircuit_ids&&("subcircuit_id"in g)&&g.subcircuit_id&&u.subcircuit_ids.includes(g.subcircuit_id)||u.source_group_id&&("source_group_id"in g)&&g.source_group_id===u.source_group_id||u.source_group_id&&("member_source_group_ids"in g)&&Array.isArray(g.member_source_group_ids)&&g.member_source_group_ids.includes(u.source_group_id))&&(_=!0),_&&(m.push(g),p.add(g))}for(;m.length>0;){let g=m.shift(),_=A.get(g);if(_)for(let f of _)p.has(f)||(p.add(f),m.push(f))}return l.filter((g)=>p.has(g))}(n,c),t);if(s==="insert")return(c)=>{let l=c.type;if(!l)throw Error("insert requires an element with a type");o.counts[l]??=-1,o.counts[l]++;let d=o.counts[l],u={...c,type:l,[`${l}_id`]:`${l}_${d}`};if(t.validateInserts)(H_e[l]??K_e).parse(u);return n.push(u),o.editCount++,u};if(s==="insertAll")return(c)=>c.map((l)=>i.insert(l));let a=s;return{get:(c)=>n.find((l)=>l.type===a&&l[`${a}_id`]===c),getUsing:(c)=>{let l=Object.keys(c);if(l.length!==1)throw Error("getUsing requires exactly one key, e.g. { pcb_component_id }");let d=l[0],u=d.replace("_id",""),h=n.find((A)=>A.type===u&&A[d]===c[d]);return h?n.find((A)=>A.type===a&&A[`${a}_id`]===h[`${a}_id`]):null},getWhere:(c)=>{let l=Object.keys(c);return n.find((d)=>d.type===a&&l.every((u)=>d[u]===c[u]))},list:(c)=>{let l=c?Object.keys(c):[];return n.filter((d)=>d.type===a&&l.every((u)=>d[u]===c[u]))},insert:(c)=>{o.counts[a]??=-1,o.counts[a]++;let l=o.counts[a],d={type:a,[`${a}_id`]:`${a}_${l}`,...c};if(t.validateInserts)(H_e[a]??K_e).parse(d);return n.push(d),o.editCount++,d},delete:(c)=>{let l=n.find((d)=>d[`${a}_id`]===c);l&&(n.splice(n.indexOf(l),1),o.editCount++)},update:(c,l)=>{let d=n.find((u)=>u.type===a&&u[`${a}_id`]===c);return d?(Object.assign(d,l),o.editCount++,d):null},select:(c)=>{if(a==="source_component")return n.find((l)=>l.type==="source_component"&&l.name===c.replace(/\./g,""));if(a==="pcb_port"||a==="source_port"||a==="schematic_port"){let[l,d]=c.replace(/\./g,"").split(/[\s\>]+/),u=n.find((A)=>A.type==="source_component"&&A.name===l);if(!u)return null;let h=n.find((A)=>A.type==="source_port"&&A.source_component_id===u.source_component_id&&(A.name===d||(A.port_hints??[]).includes(d)));if(!h)return null;if(a==="source_port")return h;if(a==="pcb_port")return n.find((A)=>A.type==="pcb_port"&&A.source_port_id===h.source_port_id);if(a==="schematic_port")return n.find((A)=>A.type==="schematic_port"&&A.source_port_id===h.source_port_id)}}}}});return i};function RDe(e){let t=e.type;return`${t}:${e[`${t}_id`]}`}YRe.unparsed=YRe;var UPt=(e,t={})=>{let n=e._internal_store_indexed;if(!n){n={counts:{},editCount:0,indexes:{}};for(let r of e){let s=r.type,a=r[`${s}_id`];if(!a)continue;let c=Number.parseInt(a.split("_").pop()||"");Number.isNaN(c)||(n.counts[s]=Math.max(n.counts[s]??0,c))}let o=t.indexConfig||{},i=n.indexes;if(o.byId&&(i.byId=new Map),o.byType&&(i.byType=new Map),o.byRelation&&(i.byRelation=new Map),o.bySubcircuit&&(i.bySubcircuit=new Map),o.byCustomField&&o.byCustomField.length>0){i.byCustomField=new Map;for(let r of o.byCustomField)i.byCustomField.set(r,new Map)}for(let r of e){if(o.byId){let s=RDe(r);i.byId.set(s,r)}if(o.byType){let s=i.byType.get(r.type)||[];s.push(r),i.byType.set(r.type,s)}if(o.byRelation){let s=Object.entries(r);for(let[a,c]of s)if(a.endsWith("_id")&&a!==`${r.type}_id`&&typeof c=="string"){let l=i.byRelation.get(a)||new Map,d=l.get(c)||[];d.push(r),l.set(c,d),i.byRelation.set(a,l)}}if(o.bySubcircuit&&"subcircuit_id"in r){let s=r.subcircuit_id;if(s&&typeof s=="string"){let a=i.bySubcircuit.get(s)||[];a.push(r),i.bySubcircuit.set(s,a)}}if(o.byCustomField&&i.byCustomField){for(let s of o.byCustomField)if(s in r){let a=r[s];if(a!==void 0&&(typeof a=="string"||typeof a=="number")){let c=String(a),l=i.byCustomField.get(s),d=l.get(c)||[];d.push(r),l.set(c,d)}}}}e._internal_store_indexed=n}return new Proxy({},{get:(o,i)=>{if(i==="toArray")return()=>(e.editCount=n.editCount,e);if(i==="editCount")return n.editCount;let r=i;return{get:(s)=>{let a=t.indexConfig||{};if(a.byId&&n.indexes.byId)return n.indexes.byId.get(`${r}:${s}`)||null;if(a.byType&&n.indexes.byType)return(n.indexes.byType.get(r)||[]).find((c)=>c[`${r}_id`]===s)||null;return e.find((c)=>c.type===r&&c[`${r}_id`]===s)||null},getUsing:(s)=>{let a=t.indexConfig||{},c=Object.keys(s);if(c.length!==1)throw Error("getUsing requires exactly one key, e.g. { pcb_component_id }");let l=c[0],d=l.replace("_id","");if(a.byRelation&&n.indexes.byRelation){let h=n.indexes.byRelation.get(l);if(h){let A=(h.get(s[l])||[]).find((p)=>p.type===d);if(!A)return null;let m=A[`${r}_id`];if(a.byId&&n.indexes.byId)return n.indexes.byId.get(`${r}:${m}`)||null;if(a.byType&&n.indexes.byType)return(n.indexes.byType.get(r)||[]).find((p)=>p[`${r}_id`]===m)||null;return e.find((p)=>p.type===r&&p[`${r}_id`]===m)||null}}let u=e.find((h)=>h.type===d&&h[l]===s[l]);return u&&e.find((h)=>h.type===r&&h[`${r}_id`]===u[`${r}_id`])||null},getWhere:(s)=>{let a=t.indexConfig||{},c=Object.keys(s);if(c.length===1&&a.byCustomField&&n.indexes.byCustomField){let l=c[0],d=n.indexes.byCustomField.get(l);if(d){let u=String(s[l]);return(d.get(u)||[]).find((h)=>h.type===r)||null}}if("subcircuit_id"in s&&a.bySubcircuit&&n.indexes.bySubcircuit){let l=s.subcircuit_id;return(n.indexes.bySubcircuit.get(l)||[]).find((d)=>d.type===r&&c.every((u)=>d[u]===s[u]))||null}if(a.byType&&n.indexes.byType)return(n.indexes.byType.get(r)||[]).find((l)=>c.every((d)=>l[d]===s[d]))||null;return e.find((l)=>l.type===r&&c.every((d)=>l[d]===s[d]))||null},list:(s)=>{let a=t.indexConfig||{},c=s?Object.keys(s):[];if(c.length===0&&a.byType&&n.indexes.byType)return n.indexes.byType.get(r)||[];if(c.length===1&&c[0]==="subcircuit_id"&&a.bySubcircuit&&n.indexes.bySubcircuit){let d=s.subcircuit_id;return(n.indexes.bySubcircuit.get(d)||[]).filter((u)=>u.type===r)}let l;return l=a.byType&&n.indexes.byType?n.indexes.byType.get(r)||[]:e.filter((d)=>d.type===r),c.length>0?l.filter((d)=>c.every((u)=>d[u]===s[u])):l},insert:(s)=>{n.counts[r]??=-1,n.counts[r]++;let a=n.counts[r],c={type:r,[`${r}_id`]:`${r}_${a}`,...s};if(t.validateInserts)(H_e[r]??K_e).parse(c);e.push(c),n.editCount++;let l=t.indexConfig||{};if(l.byId&&n.indexes.byId){let d=RDe(c);n.indexes.byId.set(d,c)}if(l.byType&&n.indexes.byType){let d=n.indexes.byType.get(r)||[];d.push(c),n.indexes.byType.set(r,d)}if(l.byRelation&&n.indexes.byRelation){let d=Object.entries(c);for(let[u,h]of d)if(u.endsWith("_id")&&u!==`${c.type}_id`&&typeof h=="string"){let A=n.indexes.byRelation.get(u)||new Map,m=A.get(h)||[];m.push(c),A.set(h,m),n.indexes.byRelation.set(u,A)}}if(l.bySubcircuit&&n.indexes.bySubcircuit&&"subcircuit_id"in c){let d=c.subcircuit_id;if(d&&typeof d=="string"){let u=n.indexes.bySubcircuit.get(d)||[];u.push(c),n.indexes.bySubcircuit.set(d,u)}}if(l.byCustomField&&n.indexes.byCustomField){for(let d of l.byCustomField)if(d in c){let u=c[d];if(u!==void 0&&(typeof u=="string"||typeof u=="number")){let h=String(u),A=n.indexes.byCustomField.get(d),m=A.get(h)||[];m.push(c),A.set(h,m)}}}return c},delete:(s)=>{let a=t.indexConfig||{},c;if(a.byId&&n.indexes.byId)c=n.indexes.byId.get(`${r}:${s}`);else if(a.byType&&n.indexes.byType)c=(n.indexes.byType.get(r)||[]).find((u)=>u[`${r}_id`]===s);else c=e.find((d)=>d[`${r}_id`]===s);if(!c)return;let l=e.indexOf(c);if(l>=0&&(e.splice(l,1),n.editCount++),a.byId&&n.indexes.byId){let d=RDe(c);n.indexes.byId.delete(d)}if(a.byType&&n.indexes.byType){let d=(n.indexes.byType.get(r)||[]).filter((u)=>u[`${r}_id`]!==s);n.indexes.byType.set(r,d)}if(a.byRelation&&n.indexes.byRelation)for(let[d,u]of n.indexes.byRelation.entries())for(let[h,A]of u.entries()){let m=A.filter((p)=>p!==c);m.length===0?u.delete(h):u.set(h,m)}if(a.bySubcircuit&&n.indexes.bySubcircuit&&"subcircuit_id"in c){let d=c.subcircuit_id;if(d){let u=(n.indexes.bySubcircuit.get(d)||[]).filter((h)=>h!==c);u.length===0?n.indexes.bySubcircuit.delete(d):n.indexes.bySubcircuit.set(d,u)}}if(a.byCustomField&&n.indexes.byCustomField)for(let d of n.indexes.byCustomField.values())for(let[u,h]of d.entries()){let A=h.filter((m)=>m!==c);A.length===0?d.delete(u):d.set(u,A)}},update:(s,a)=>{let c=t.indexConfig||{},l;if(c.byId&&n.indexes.byId)l=n.indexes.byId.get(`${r}:${s}`);else if(c.byType&&n.indexes.byType)l=(n.indexes.byType.get(r)||[]).find((u)=>u[`${r}_id`]===s);else l=e.find((d)=>d.type===r&&d[`${r}_id`]===s);if(!l)return null;if(c.byRelation&&n.indexes.byRelation){let d=Object.entries(l);for(let[u,h]of d)if(u.endsWith("_id")&&u!==`${l.type}_id`&&typeof h=="string"&&u in a&&a[u]!==h){let A=n.indexes.byRelation.get(u);if(A){let m=(A.get(h)||[]).filter((p)=>p!==l);m.length===0?A.delete(h):A.set(h,m)}}}if(c.bySubcircuit&&n.indexes.bySubcircuit&&"subcircuit_id"in l&&"subcircuit_id"in a){let d=l.subcircuit_id;if(d!==a.subcircuit_id){let u=(n.indexes.bySubcircuit.get(d)||[]).filter((h)=>h!==l);u.length===0?n.indexes.bySubcircuit.delete(d):n.indexes.bySubcircuit.set(d,u)}}if(c.byCustomField&&n.indexes.byCustomField){for(let d of c.byCustomField)if(d in l&&d in a&&l[d]!==a[d]){let u=n.indexes.byCustomField.get(d);if(u){let h=String(l[d]),A=(u.get(h)||[]).filter((m)=>m!==l);A.length===0?u.delete(h):u.set(h,A)}}}if(Object.assign(l,a),n.editCount++,c.byRelation&&n.indexes.byRelation){let d=Object.entries(l);for(let[u,h]of d)if(u.endsWith("_id")&&u!==`${l.type}_id`&&typeof h=="string"&&u in a){let A=n.indexes.byRelation.get(u)||new Map,m=A.get(h)||[];m.includes(l)||(m.push(l),A.set(h,m),n.indexes.byRelation.set(u,A))}}if(c.bySubcircuit&&n.indexes.bySubcircuit&&"subcircuit_id"in l&&"subcircuit_id"in a){let d=l.subcircuit_id;if(d&&typeof d=="string"){let u=n.indexes.bySubcircuit.get(d)||[];u.includes(l)||(u.push(l),n.indexes.bySubcircuit.set(d,u))}}if(c.byCustomField&&n.indexes.byCustomField){for(let d of c.byCustomField)if(d in l&&d in a){let u=l[d];if(u!==void 0&&(typeof u=="string"||typeof u=="number")){let h=String(u),A=n.indexes.byCustomField.get(d),m=A.get(h)||[];m.includes(l)||(m.push(l),A.set(h,m))}}}return l},select:(s)=>{if(r==="source_component")return e.find((a)=>a.type==="source_component"&&a.name===s.replace(/\./g,""))||null;if(r==="pcb_port"||r==="source_port"||r==="schematic_port"){let[a,c]=s.replace(/\./g,"").split(/[\s\>]+/),l=e.find((u)=>u.type==="source_component"&&u.name===a);if(!l)return null;let d=e.find((u)=>u.type==="source_port"&&u.source_component_id===l.source_component_id&&(u.name===c||(u.port_hints??[]).includes(c)));if(!d)return null;if(r==="source_port")return d;if(r==="pcb_port")return e.find((u)=>u.type==="pcb_port"&&u.source_port_id===d.source_port_id)||null;if(r==="schematic_port")return e.find((u)=>u.type==="schematic_port"&&u.source_port_id===d.source_port_id)||null}return null}}}})};UPt.unparsed=UPt;var z8t=!0,vV={CCW:-1,CW:1,NOT_ORIENTABLE:0},ETo=2*Math.PI,j_e=Object.freeze({__proto__:null,BOUNDARY:2,CCW:z8t,CONTAINS:3,CW:!1,END_VERTEX:2,INSIDE:1,INTERLACE:4,NOT_VERTEX:0,ORIENTATION:vV,OUTSIDE:0,OVERLAP_OPPOSITE:2,OVERLAP_SAME:1,PIx2:ETo,START_VERTEX:1}),GE=0.000001;function G8t(e){GE=e}function Y8t(){return GE}function VRe(e){return e<GE&&e>-GE}function $k(e,t){return e-t<GE&&e-t>-GE}function V8t(e,t){return e-t>GE}function U8t(e,t){return e-t<-GE}var Qe={Utils:Object.freeze({__proto__:null,DECIMALS:3,EQ:$k,EQ_0:VRe,GE:function(e,t){return e-t>-GE},GT:V8t,LE:function(e,t){return e-t<GE},LT:U8t,getTolerance:Y8t,setTolerance:G8t}),Errors:void 0,Matrix:void 0,Planar_set:void 0,Point:void 0,Vector:void 0,Line:void 0,Circle:void 0,Segment:void 0,Arc:void 0,Box:void 0,Edge:void 0,Face:void 0,Ray:void 0,Ray_shooting:void 0,Multiline:void 0,Polygon:void 0,Distance:void 0,Inversion:void 0};for(let e in j_e)Qe[e]=j_e[e];Object.defineProperty(Qe,"DP_TOL",{get:function(){return Y8t()},set:function(e){G8t(e)}});var Wu=class{static get ILLEGAL_PARAMETERS(){return ReferenceError("Illegal Parameters")}static get ZERO_DIVISION(){return Error("Zero division")}static get UNRESOLVED_BOUNDARY_CONFLICT(){return Error("Unresolved boundary conflict in boolean operation")}static get INFINITE_LOOP(){return Error("Infinite loop")}static get CANNOT_COMPLETE_BOOLEAN_OPERATION(){return Error("Cannot complete boolean operation")}static get CANNOT_INVOKE_ABSTRACT_METHOD(){return Error("Abstract method cannot be invoked")}static get OPERATION_IS_NOT_SUPPORTED(){return Error("Operation is not supported")}static get UNSUPPORTED_SHAPE_TYPE(){return Error("Unsupported shape type")}};Qe.Errors=Wu;var ELe=class{constructor(e,t){this.first=e,this.last=t||this.first}[Symbol.iterator](){let e;return{next:()=>(e=e?e.next:this.first,{value:e,done:e===void 0})}}get size(){let e=0;for(let t of this)e++;return e}toArray(e=void 0,t=void 0){let n=[],o=e||this.first,i=t||this.last,r=o;if(r===void 0)return n;do n.push(r),r=r.next;while(r!==i.next);return n}append(e){return this.isEmpty()?this.first=e:(e.prev=this.last,this.last.next=e),this.last=e,this.last.next=void 0,this.first.prev=void 0,this}insert(e,t){if(this.isEmpty())this.first=e,this.last=e;else if(t==null)e.next=this.first,this.first.prev=e,this.first=e;else{let n=t.next;t.next=e,n&&(n.prev=e),e.prev=t,e.next=n,this.last===t&&(this.last=e)}return this.last.next=void 0,this.first.prev=void 0,this}remove(e){return e===this.first&&e===this.last?(this.first=void 0,this.last=void 0):(e.prev&&(e.prev.next=e.next),e.next&&(e.next.prev=e.prev),e===this.first&&(this.first=e.next),e===this.last&&(this.last=e.prev)),this}isEmpty(){return this.first===void 0}static testInfiniteLoop(e){let t=e,n=e;do{if(t!=e&&t===n)throw Wu.INFINITE_LOOP;t=t.next,n=n.next.next}while(t!=e)}},WPt={stroke:"black"},MTo=class{constructor(e=WPt){for(let t in e)this[t]=e[t];this.stroke=e.stroke??WPt.stroke}toAttributesString(){return Object.keys(this).reduce((e,t)=>e+(this[t]!==void 0?this.toAttrString(t,this[t]):""),"")}toAttrString(e,t){let n=e==="className"?"class":this.convertCamelToKebabCase(e);return t===null?`${n} `:`${n}="${t.toString()}" `}convertCamelToKebabCase(e){return e.match(/[A-Z]{2,}(?=[A-Z][a-z]+[0-9]*|\b)|[A-Z]?[a-z]+[0-9]*|[A-Z]|[0-9]+/g).join("-").toLowerCase()}};function pL(e){return new MTo(e).toAttributesString()}function PU(e,t){let n=[],[o,i,r]=e.standard,[s,a,c]=t.standard,l=o*a-i*s,d=r*a-i*c,u=o*c-r*s;if(!Qe.Utils.EQ_0(l)){let h,A;i===0?(h=r/o,A=u/l):a===0?(h=c/s,A=u/l):o===0?(h=d/l,A=r/i):s===0?(h=d/l,A=c/a):(h=d/l,A=u/l),n.push(new Qe.Point(h,A))}return n}function AL(e,t){let n=[],o=t.pc.projectionOn(e),i=t.pc.distanceTo(o)[0];if(Qe.Utils.EQ(i,t.r))n.push(o);else if(Qe.Utils.LT(i,t.r)){let r,s,a=Math.sqrt(t.r*t.r-i*i);r=e.norm.rotate90CCW().multiply(a),s=o.translate(r),n.push(s),r=e.norm.rotate90CW().multiply(a),s=o.translate(r),n.push(s)}return n}function jV(e,t){let n=[];for(let o of t.toSegments()){let i=Gte(o,e);for(let r of i)Z8t(r,n)||n.push(r)}return n}function ofe(e,t){let n=[];if(jV(e,t.box).length===0)return n;let o=AL(e,new Qe.Circle(t.pc,t.r));for(let i of o)i.on(t)&&n.push(i);return n}function Gte(e,t){let n=[];return e.ps.on(t)&&n.push(e.ps),e.pe.on(t)&&!e.isZeroLength()&&n.push(e.pe),n.length>0||e.isZeroLength()||e.ps.leftTo(t)&&e.pe.leftTo(t)||!e.ps.leftTo(t)&&!e.pe.leftTo(t)?n:PU(new Qe.Line(e.ps,e.pe),t)}function q_e(e,t){let n=[];if(e.isZeroLength())return e.ps.on(t)&&n.push(e.ps),n;if(t.isZeroLength())return t.ps.on(e)&&n.push(t.ps),n;let o=new Qe.Line(e.ps,e.pe),i=new Qe.Line(t.ps,t.pe);if(o.incidentTo(i))e.ps.on(t)&&n.push(e.ps),e.pe.on(t)&&n.push(e.pe),!t.ps.on(e)||t.ps.equalTo(e.ps)||t.ps.equalTo(e.pe)||n.push(t.ps),!t.pe.on(e)||t.pe.equalTo(e.ps)||t.pe.equalTo(e.pe)||n.push(t.pe);else if(o.parallelTo(i)){let r=new Qe.Vector(e.ps,e.pe),s=new Qe.Vector(t.ps,t.pe),a=new Qe.Vector(e.ps,t.ps),c=r.cross(s);if(!Qe.Utils.EQ_0(c)){let l=a.cross(s)/c,d=a.cross(r)/c;Qe.Utils.GE(l,0)&&Qe.Utils.LE(l,1)&&Qe.Utils.GE(d,0)&&Qe.Utils.LE(d,1)&&n.push(XPt(e.ps.translate(r.multiply(l)),e,t))}}else{let r=PU(o,i);r.length>0&&KPt(r[0],e)&&KPt(r[0],t)&&n.push(XPt(r[0],e,t))}return n}function XPt(e,t,n){for(let o of[t.ps,t.pe,n.ps,n.pe])if(e.equalTo(o))return o;return e}function KPt(e,t){let n=t.box;return Qe.Utils.LE(e.x,n.xmax)&&Qe.Utils.GE(e.x,n.xmin)&&Qe.Utils.LE(e.y,n.ymax)&&Qe.Utils.GE(e.y,n.ymin)}function J_e(e,t){let n=[];if(e.isZeroLength()){let[i,r]=e.ps.distanceTo(t.pc);return Qe.Utils.EQ(i,t.r)&&n.push(e.ps),n}let o=AL(new Qe.Line(e.ps,e.pe),t);for(let i of o)i.on(e)&&n.push(i);return n}function qV(e,t){let n=[];if(e.isZeroLength())return e.ps.on(t)&&n.push(e.ps),n;let o=AL(new Qe.Line(e.ps,e.pe),new Qe.Circle(t.pc,t.r));for(let i of o)i.on(e)&&i.on(t)&&n.push(i);return n}function W8t(e,t){let n=[],o=new Qe.Vector(e.pc,t.pc),i=e.r,r=t.r;if(Qe.Utils.EQ_0(i)||Qe.Utils.EQ_0(r))return n;if(Qe.Utils.EQ_0(o.x)&&Qe.Utils.EQ_0(o.y)&&Qe.Utils.EQ(i,r))return n.push(e.pc.translate(-i,0)),n;let s,a=e.pc.distanceTo(t.pc)[0];if(Qe.Utils.GT(a,i+r))return n;if(Qe.Utils.LT(a,Math.abs(i-r)))return n;if(o.x/=a,o.y/=a,Qe.Utils.EQ(a,i+r)||Qe.Utils.EQ(a,Math.abs(i-r)))return s=e.pc.translate(i*o.x,i*o.y),n.push(s),n;let c=i*i/(2*a)-r*r/(2*a)+a/2,l=e.pc.translate(c*o.x,c*o.y),d=Math.sqrt(i*i-c*c);return s=l.translate(o.rotate90CCW().multiply(d)),n.push(s),s=l.translate(o.rotate90CW().multiply(d)),n.push(s),n}function X8t(e,t){let n=[];if(e.pc.equalTo(t.pc)&&Qe.Utils.EQ(e.r,t.r)){let s;return s=e.start,s.on(t)&&n.push(s),s=e.end,s.on(t)&&n.push(s),s=t.start,s.on(e)&&n.push(s),s=t.end,s.on(e)&&n.push(s),n}let o=new Qe.Circle(e.pc,e.r),i=new Qe.Circle(t.pc,t.r),r=o.intersect(i);for(let s of r)s.on(e)&&s.on(t)&&n.push(s);return n}function MLe(e,t){let n=[];if(t.pc.equalTo(e.pc)&&Qe.Utils.EQ(t.r,e.r))return n.push(e.start),n.push(e.end),n;let o=W8t(t,new Qe.Circle(e.pc,e.r));for(let i of o)i.on(e)&&n.push(i);return n}function K8t(e,t){return e.isSegment?q_e(e.shape,t):qV(t,e.shape)}function j8t(e,t){return e.isSegment?qV(e.shape,t):X8t(e.shape,t)}function q8t(e,t){return e.isSegment?Gte(e.shape,t):ofe(t,e.shape)}function BTo(e,t){return e.isSegment?J_e(e.shape,t):MLe(e.shape,t)}function BLe(e,t){let n=[];for(let o of t.edges)for(let i of K8t(o,e))n.push(i);return n}function wLe(e,t){let n=[];for(let o of t.edges)for(let i of j8t(o,e))n.push(i);return n}function Yte(e,t){let n=[];if(t.isEmpty())return n;for(let o of t.edges)for(let i of q8t(o,e))Z8t(i,n)||n.push(i);return e.sortPoints(n)}function J8t(e,t){let n=[];if(t.isEmpty())return n;for(let o of t.edges)for(let i of BTo(o,e))n.push(i);return n}function $8t(e,t){return e.isSegment?K8t(t,e.shape):e.isArc?j8t(t,e.shape):e.isLine?q8t(t,e.shape):e.isRay?(n=t,o=e.shape,n.isSegment?TLe(o,n.shape):DLe(o,n.shape)):[];var n,o}function jPt(e,t){let n=[];if(t.isEmpty()||e.shape.box.not_intersect(t.box))return n;let o=t.edges.search(e.shape.box);for(let i of o)n=[...n,...$8t(e,i)];return n}function Z8t(e,t){return t.some((n)=>n.equalTo(e))}function O8(e){return new Qe.Line(e.start,e.norm)}function TLe(e,t){return Gte(t,O8(e)).filter((n)=>e.contains(n))}function DLe(e,t){return ofe(O8(e),t).filter((n)=>e.contains(n))}function eTt(e,t){return AL(O8(e),t).filter((n)=>e.contains(n))}function tTt(e,t){return PU(O8(e),t).filter((n)=>e.contains(n))}function nTt(e,t){return Yte(O8(e),t).filter((n)=>e.contains(n))}function oTt(e,t){if(e.intersect&&e.intersect instanceof Function)return e.intersect(t);throw Wu.UNSUPPORTED_SHAPE_TYPE}function vU(e,t){let n=[];for(let o of t)n=[...n,...oTt(e,o.shape)];return n}var Lk=class e extends ELe{constructor(...t){if(super(),this.isInfinite=!1,t.length===1&&t[0]instanceof Array&&t[0].length>0){let n=t[0],o=n.length,i=(s)=>s instanceof Qe.Segment||s instanceof Qe.Arc||s instanceof Qe.Ray,r=(s)=>s instanceof Qe.Segment||s instanceof Qe.Arc;if(!(o===1&&((s)=>s instanceof Qe.Segment||s instanceof Qe.Arc||s instanceof Qe.Ray||s instanceof Qe.Line)(n[0])||o>1&&i(n[0])&&i(n[o-1])&&n.slice(1,o-1).every(r)))throw Qe.Errors.ILLEGAL_PARAMETERS;this.isInfinite=n.some((s)=>s instanceof Qe.Ray||s instanceof Qe.Line);for(let s of n){let a=new Qe.Edge(s);this.append(a)}this.setArcLength()}}get edges(){return[...this]}get box(){return this.edges.reduce((t,n)=>t.merge(n.box),new Qe.Box)}get vertices(){let t=this.edges.map((n)=>n.start);return t.push(this.last.end),t}get length(){if(this.isEmpty())return 0;if(this.isInfinite)return Number.POSITIVE_INFINITY;let t=0;for(let n of this)t+=n.length;return t}clone(){return new e(this.toShapes())}setArcLength(){for(let t of this)this.setOneEdgeArcLength(t)}setOneEdgeArcLength(t){t===this.first?t.arc_length=0:t.arc_length=t.prev.arc_length+t.prev.length}pointAtLength(t){if(t>this.length||t<0)return null;if(this.isInfinite)return null;let n=null;for(let o of this)if(t>=o.arc_length&&(o===this.last||t<o.next.arc_length)){n=o.pointAtLength(t-o.arc_length);break}return n}addVertex(t,n){let o=n.shape.split(t);if(o[0]===null)return n.prev;if(o[1]===null)return n;let i=new Qe.Edge(o[0]),r=n.prev;return this.insert(i,r),n.shape=o[1],i}getChain(t,n){let o=[];for(let i=t;i!==n.next;i=i.next)o.push(i);return o}split(t){for(let n of t){let o=this.findEdgeByPoint(n);this.addVertex(n,o)}return this}findEdgeByPoint(t){let n;for(let o of this)if(o.shape.contains(t)){n=o;break}return n}distanceTo(t){if(t instanceof Qe.Point){let[n,o]=Qe.Distance.shape2multiline(t,this);return[n,o.reverse()]}if(t instanceof Qe.Line){let[n,o]=Qe.Distance.shape2multiline(t,this);return[n,o.reverse()]}if(t instanceof Qe.Circle){let[n,o]=Qe.Distance.shape2multiline(t,this);return[n,o.reverse()]}if(t instanceof Qe.Segment){let[n,o]=Qe.Distance.shape2multiline(t,this);return[n,o.reverse()]}if(t instanceof Qe.Arc){let[n,o]=Qe.Distance.shape2multiline(t,this);return[n,o.reverse()]}if(t instanceof Qe.Box){let[n,o]=Qe.Distance.shape2multiline(new Qe.Polygon(t),this);return[n,o.reverse()]}if(t instanceof Qe.Multiline)return Qe.Distance.multiline2multiline(this,t);throw Qe.Errors.UNSUPPORTED_SHAPE_TYPE}intersect(t){return t instanceof Qe.Multiline?function(n,o){let i=[];for(let r of n)for(let s of o)i=[...i,...oTt(r.shape,s.shape)];return i}(this,t):vU(t,this)}contains(t){if(t instanceof Qe.Point)return this.edges.some((n)=>n.shape.contains(t));throw Qe.Errors.UNSUPPORTED_SHAPE_TYPE}translate(t){return new e(this.edges.map((n)=>n.shape.translate(t)))}rotate(t=0,n=new Qe.Point){return new e(this.edges.map((o)=>o.shape.rotate(t,n)))}transform(t=new Qe.Matrix){return new e(this.edges.map((n)=>n.shape.transform(t)))}toShapes(){return this.edges.map((t)=>t.shape.clone())}toJSON(){return this.edges.map((t)=>t.toJSON())}svgPoints(){return this.vertices.map((t)=>`${t.x},${t.y}`).join(" ")}dpath(){let t=`M${this.first.start.x},${this.first.start.y}`;for(let n of this)t+=n.svg();return t}svg(t={}){let n=`
<path ${pL({fill:"none",...t})} d="`;n+=`
M${this.first.start.x},${this.first.start.y}`;for(let o of this)n+=o.svg();return n+=`" >
</path>`,n}};Qe.Multiline=Lk;function JV(e,t,n){let o=n.length,i=e.shape.split(t);if(i.length===0)return;let r=0;r=i[0]===null?0:i[1]===null?e.shape.length:i[0].length;let s,a=0;$k(r,0)&&(a|=1),$k(r,e.shape.length)&&(a|=2),s=r===1/0?i[0].coord(t):2&a&&e.next&&e.next.arc_length===0?0:e.arc_length+r,n.push({id:o,pt:t,arc_length:s,edge_before:e,edge_after:void 0,face:e.face,is_vertex:a})}function hte(e){e.int_points1_sorted=E8(e.int_points1),e.int_points2_sorted=E8(e.int_points2)}function E8(e){let t=new Map,n=0;for(let o of e)t.has(o.face)||(t.set(o.face,n),n++);for(let o of e)o.faceId=t.get(o.face);return e.slice().sort(wTo)}function wTo(e,t){return e.faceId<t.faceId?-1:e.faceId>t.faceId?1:e.arc_length<t.arc_length?-1:e.arc_length>t.arc_length?1:0}function NLe(e){if(e.int_points1.length<2)return;let t,n,o,i,r=!1;for(let s=0;s<e.int_points1_sorted.length;s++)if(e.int_points1_sorted[s].id!==-1){t=e.int_points1_sorted[s],n=e.int_points2[t.id];for(let a=s+1;a<e.int_points1_sorted.length&&(o=e.int_points1_sorted[a],$k(o.arc_length,t.arc_length));a++)o.id!==-1&&(i=e.int_points2[o.id],i.id!==-1&&o.edge_before===t.edge_before&&o.edge_after===t.edge_after&&i.edge_before===n.edge_before&&i.edge_after===n.edge_after&&(o.id=-1,i.id=-1,r=!0))}n=e.int_points2_sorted[0],t=e.int_points1[n.id];for(let s=1;s<e.int_points2_sorted.length;s++){let a=e.int_points2_sorted[s];if(a.id===-1)continue;if(n.id===-1||!$k(a.arc_length,n.arc_length)){n=a,t=e.int_points1[n.id];continue}let c=e.int_points1[a.id];c.edge_before===t.edge_before&&c.edge_after===t.edge_after&&a.edge_before===n.edge_before&&a.edge_after===n.edge_after&&(c.id=-1,a.id=-1,r=!0)}r&&(e.int_points1=e.int_points1.filter((s)=>s.id>=0),e.int_points2=e.int_points2.filter((s)=>s.id>=0),e.int_points1.forEach((s,a)=>s.id=a),e.int_points2.forEach((s,a)=>s.id=a))}function URe(e){for(let t of e)t.edge_before&&(t.edge_before.bvStart=void 0,t.edge_before.bvEnd=void 0,t.edge_before.bv=void 0,t.edge_before.overlap=void 0),t.edge_after&&(t.edge_after.bvStart=void 0,t.edge_after.bvEnd=void 0,t.edge_after.bv=void 0,t.edge_after.overlap=void 0);for(let t of e)t.edge_before&&(t.edge_before.bvEnd=2),t.edge_after&&(t.edge_after.bvStart=2)}function WRe(e,t){for(let n of e)n.edge_before&&n.edge_before.setInclusion(t),n.edge_after&&n.edge_after.setInclusion(t)}function $V(e,t,n){let o,i,r=1;if(e.length===1)return 1;o=e[t];for(let s=t+1;s<e.length&&o.face===n&&(i=e[s],i.pt.equalTo(o.pt)&&i.edge_before===o.edge_before&&i.edge_after===o.edge_after);s++)r++;return r}function ZV(e,t){if(t){for(let n of t){let o=n.edge_before;if(n.is_vertex=0,o.shape.start&&o.shape.start.equalTo(n.pt)&&(n.is_vertex|=1),o.shape.end&&o.shape.end.equalTo(n.pt)&&(n.is_vertex|=2),1&n.is_vertex){n.edge_before=o.prev,o.prev&&(n.is_vertex=2);continue}if(2&n.is_vertex)continue;let i=e.addVertex(n.pt,o);n.edge_before=i}for(let n of t)n.edge_before?n.edge_after=n.edge_before.next:e instanceof Lk&&1&n.is_vertex&&(n.edge_after=e.first)}}function qPt(e,t,n){let o=e.edge_before,i=t.edge_after,r=n.length;o.next=n[0],n[0].prev=o,n[r-1].next=i,i.prev=n[r-1]}Qe.multiline=(...e)=>new Qe.Multiline(...e);var{INSIDE:vE,OUTSIDE:EE,BOUNDARY:kA,OVERLAP_SAME:TTo,OVERLAP_OPPOSITE:DTo}=j_e,{NOT_VERTEX:Yzr,START_VERTEX:JPt,END_VERTEX:$Pt}=j_e;function XRe(e,t){let n=t.clone().reverse(),[o,i]=Vte(e,n,3,!0);return o}function iTt(e,t){let[n,o]=Vte(e,t,2,!0);return n}function rTt(e,t){let[n,o]=Vte(e,t,2,!1),i=[];for(let s of n.faces)i=[...i,...[...s.edges].map((a)=>a.shape)];let r=[];for(let s of o.faces)r=[...r,...[...s.edges].map((a)=>a.shape)];return[i,r]}function KRe(e,t){let[n,o]=Vte(e,t,3,!1),i=[];for(let r of n.faces)i=[...i,...[...r.edges].map((s)=>s.shape)];return i}function sTt(e,t){let n=e.clone(),o=t.clone(),i=aTt(n,o);return hte(i),ZV(n,i.int_points1_sorted),ZV(o,i.int_points2_sorted),NLe(i),hte(i),[i.int_points1_sorted.map((r)=>r.pt),i.int_points2_sorted.map((r)=>r.pt)]}function NTo(e,t,n,o){let i=ZPt(e,n.int_points1),r=ZPt(t,n.int_points2);for(evt(i,t),evt(r,e),URe(n.int_points1),URe(n.int_points2),WRe(n.int_points1,t),WRe(n.int_points2,e);RTo(e,t,n.int_points1,n.int_points1_sorted,n.int_points2,n););(function(s){let a,c,l,d=s.int_points1.length;for(let u=0;u<d;u++){let h=s.int_points1_sorted[u];h.face!==a&&(c=u,a=h.face);let A,m=u,p=$V(s.int_points1_sorted,u,a);A=m+p<d&&s.int_points1_sorted[m+p].face===a?m+p:c;let g=$V(s.int_points1_sorted,A,a);l=null;for(let b=A;b<A+g;b++){let P=s.int_points1_sorted[b];if(P.face===a&&s.int_points2[P.id].face===s.int_points2[h.id].face){l=P;break}}if(l===null)continue;let _=h.edge_after,f=l.edge_before;if(_.bv!==2||f.bv!==2)continue;if(_!==f)continue;let y=s.int_points2[h.id],x=s.int_points2[l.id],C=y.edge_after,I=x.edge_before;C.bv===2&&I.bv===2&&C===I||(y=s.int_points2[l.id],x=s.int_points2[h.id],C=y.edge_after,I=x.edge_before),C.bv===2&&I.bv===2&&C===I&&_.setOverlap(C)}})(n),jRe(e,o,n.int_points1_sorted,!0),jRe(t,o,n.int_points2_sorted,!1),tvt(e,i,o,!0),tvt(t,r,o,!1)}function Vte(e,t,n,o){let i=e.clone(),r=t.clone(),s=aTt(i,r);return hte(s),ZV(i,s.int_points1_sorted),ZV(r,s.int_points2_sorted),NLe(s),hte(s),NTo(i,r,s,n),o&&function(a,c,l){(function(d,u,h,A){for(let m of u.faces){for(let p of m)d.edges.add(p);A.find((p)=>p.face===m)===void 0&&d.addFace(m.first,m.last)}})(a,c,0,l.int_points2),function(d,u,h){if(h.int_points1.length!==0)for(let A=0;A<h.int_points1.length;A++){let m=h.int_points1[A],p=h.int_points2[A];if(m.edge_before!==void 0&&m.edge_after===void 0&&p.edge_before===void 0&&p.edge_after!==void 0&&(m.edge_before.next=p.edge_after,p.edge_after.prev=m.edge_before,m.edge_after=p.edge_after,p.edge_before=m.edge_before),p.edge_before!==void 0&&p.edge_after===void 0&&m.edge_before===void 0&&m.edge_after!==void 0&&(p.edge_before.next=m.edge_after,m.edge_after.prev=p.edge_before,p.edge_after=m.edge_after,m.edge_before=p.edge_before),m.edge_before!==void 0&&m.edge_after===void 0)for(let g of h.int_points1_sorted)g!==m&&g.edge_before===void 0&&g.edge_after!==void 0&&g.pt.equalTo(m.pt)&&(m.edge_before.next=g.edge_after,g.edge_after.prev=m.edge_before,m.edge_after=g.edge_after,g.edge_before=m.edge_before);if(p.edge_before!==void 0&&p.edge_after===void 0)for(let g of h.int_points2_sorted)g!==p&&g.edge_before===void 0&&g.edge_after!==void 0&&g.pt.equalTo(p.pt)&&(p.edge_before.next=g.edge_after,g.edge_after.prev=p.edge_before,p.edge_after=g.edge_after,g.edge_before=p.edge_before)}}(0,0,l),qRe(a,l.int_points1),qRe(c,l.int_points2),JRe(a,l.int_points1,l.int_points2),JRe(a,l.int_points2,l.int_points1),nvt(a),nvt(c)}(i,r,s),[i,r]}function aTt(e,t){let n={int_points1:[],int_points2:[]};for(let o of e.edges){let i=t.edges.search(o.box);for(let r of i){let s=o.shape.intersect(r.shape);for(let a of s)JV(o,a,n.int_points1),JV(r,a,n.int_points2)}}return n}function ZPt(e,t){let n=[];for(let o of e.faces)t.find((i)=>i.face===o)||n.push(o);return n}function evt(e,t){for(let n of e)n.first.bv=n.first.bvStart=n.first.bvEnd=void 0,n.first.setInclusion(t)}function RTo(e,t,n,o,i,r){let s,a,c,l=o.length,d=!1;for(let u=0;u<l;u++){let h=o[u];h.face!==s&&(a=u,s=h.face);let A,m=u,p=$V(o,u,s);A=m+p<l&&o[m+p].face===s?m+p:a;let g=$V(o,A,s);c=null;for(let y=A;y<A+g;y++){let x=o[y];if(x.face===s&&i[x.id].face===i[h.id].face){c=x;break}}if(c===null)continue;let _=h.edge_after,f=c.edge_before;if(_.bv!==kA||f.bv==kA)if(_.bv==kA||f.bv!==kA){if(_.bv===kA&&f.bv===kA&&_!=f||_.bv===vE&&f.bv===EE||_.bv===EE&&f.bv===vE){let y=_.next;for(;y!=f;)y.bvStart=void 0,y.bvEnd=void 0,y.bv=void 0,y.setInclusion(t),y=y.next}if(_.bv===kA&&f.bv===kA&&_!=f){let y,x=_.next;for(;x!=f;){if(x.bv!=kA){if(y===void 0)y=x.bv;else if(x.bv!=y)throw Wu.UNRESOLVED_BOUNDARY_CONFLICT}x=x.next}y!=null&&(_.bv=y,f.bv=y);continue}if(_.bv===vE&&f.bv===EE||_.bv===EE&&f.bv===vE){let y=_;for(;y!=f;){if(y.bvStart===_.bv&&y.bvEnd===f.bv){let[x,C]=y.shape.distanceTo(t);if(x<10*Qe.DP_TOL){JV(y,C.ps,n);let I=n[n.length-1];if(I.is_vertex&JPt)I.edge_after=y,I.edge_before=y.prev,y.bvStart=kA,y.bv=void 0,y.setInclusion(t);else if(I.is_vertex&$Pt)I.edge_after=y.next,y.bvEnd=kA,y.bv=void 0,y.setInclusion(t);else{let E=t.addVertex(I.pt,y);I.edge_before=E,I.edge_after=E.next,E.setInclusion(t),E.next.bvStart=kA,E.next.bvEnd=void 0,E.next.bv=void 0,E.next.setInclusion(t)}let b=t.findEdgeByPoint(C.pe);JV(b,C.pe,i);let P=i[i.length-1];if(P.is_vertex&JPt)P.edge_after=b,P.edge_before=b.prev;else if(P.is_vertex&$Pt)P.edge_after=b.next;else{let E=i.find((w)=>w.edge_after===b),B=t.addVertex(P.pt,b);P.edge_before=B,P.edge_after=B.next,E&&(E.edge_after=B),B.bvStart=void 0,B.bvEnd=kA,B.bv=void 0,B.setInclusion(e),B.next.bvStart=kA,B.next.bvEnd=void 0,B.next.bv=void 0,B.next.setInclusion(e)}hte(r),d=!0;break}}y=y.next}if(d)break;throw Wu.UNRESOLVED_BOUNDARY_CONFLICT}}else f.bv=_.bv;else _.bv=f.bv}return d}function jRe(e,t,n,o){if(!n)return;let i,r,s,a;for(let c=0;c<n.length;c++){if(s=n[c],s.face!==i&&(r=c,i=s.face),i.isEmpty())continue;let l,d=c,u=$V(n,c,i);l=d+u<n.length&&n[d+u].face===s.face?d+u:r,a=n[l];let h=l,A=$V(n,h,i),m=s.edge_after,p=a.edge_before;if(m.bv===vE&&p.bv===vE&&t===1||m.bv===EE&&p.bv===EE&&t===2||(m.bv===EE||p.bv===EE)&&t===3&&!o||(m.bv===vE||p.bv===vE)&&t===3&&o||m.bv===kA&&p.bv===kA&&m.overlap&TTo&&o||m.bv===kA&&p.bv===kA&&m.overlap&DTo){e.removeChain(i,m,p);for(let g=d;g<d+u;g++)n[g].edge_after=void 0;for(let g=h;g<h+A;g++)n[g].edge_before=void 0}c+=u-1}}function qRe(e,t){for(let n of t)e.faces.delete(n.face),n.face=void 0,n.edge_before&&(n.edge_before.face=void 0),n.edge_after&&(n.edge_after.face=void 0)}function JRe(e,t,n){for(let o of t){if(o.edge_before===void 0||o.edge_after===void 0)continue;if(o.face)continue;if(o.edge_after.face||o.edge_before.face)continue;let{edge_after:i,edge_before:r}=o;try{ELe.testInfiniteLoop(i)}catch(a){throw Wu.CANNOT_COMPLETE_BOOLEAN_OPERATION}let s=e.addFace(i,r);for(let a of t)a.edge_before&&a.edge_after&&a.edge_before.face===s&&a.edge_after.face===s&&(a.face=s);for(let a of n)a.edge_before&&a.edge_after&&a.edge_before.face===s&&a.edge_after.face===s&&(a.face=s)}}function tvt(e,t,n,o){for(let i of t){let r=i.first.bv;(n===1&&r===vE||n===3&&r===vE&&o||n===3&&r===EE&&!o||n===2&&r===EE)&&e.deleteFace(i)}}function nvt(e){let t=[];for(let n of e.edges)n.face&&e.faces.has(n.face)||t.push(n);for(let n of t)e.edges.delete(n)}var $Re=Object.freeze({__proto__:null,BOOLEAN_INTERSECT:2,BOOLEAN_SUBTRACT:3,BOOLEAN_UNION:1,calculateIntersections:sTt,innerClip:rTt,intersect:iTt,outerClip:KRe,removeNotRelevantChains:jRe,removeOldFaces:qRe,restoreFaces:JRe,subtract:XRe,unify:function(e,t){let[n,o]=Vte(e,t,1,!0);return n}}),QTo=RegExp("T.F..FFF.|T.F...F.."),kTo=RegExp("T........|.T.......|...T.....|....T...."),LTo=RegExp("FT.......|F..T.....|F...T...."),FTo=RegExp("T.F..F..."),HTo=RegExp("T.F..F...|.TF..F...|..FT.F...|..F.TF..."),cV=class{constructor(){this.m=[,,,,,,,,,].fill(void 0)}get I2I(){return this.m[0]}set I2I(e){this.m[0]=e}get I2B(){return this.m[1]}set I2B(e){this.m[1]=e}get I2E(){return this.m[2]}set I2E(e){this.m[2]=e}get B2I(){return this.m[3]}set B2I(e){this.m[3]=e}get B2B(){return this.m[4]}set B2B(e){this.m[4]=e}get B2E(){return this.m[5]}set B2E(e){this.m[5]=e}get E2I(){return this.m[6]}set E2I(e){this.m[6]=e}get E2B(){return this.m[7]}set E2B(e){this.m[7]=e}get E2E(){return this.m[8]}set E2E(e){this.m[8]=e}toString(){return this.m.map((e)=>e instanceof Array&&e.length>0?"T":e instanceof Array&&e.length===0?"F":"*").join("")}equal(){return QTo.test(this.toString())}intersect(){return kTo.test(this.toString())}touch(){return LTo.test(this.toString())}inside(){return FTo.test(this.toString())}covered(){return HTo.test(this.toString())}};function wee(e,t){let n,o=new Qe.Ray(t),i=new Qe.Line(o.pt,o.norm),r=new Qe.Box(o.box.xmin-Qe.DP_TOL,o.box.ymin-Qe.DP_TOL,o.box.xmax+Qe.DP_TOL,o.box.ymax+Qe.DP_TOL);if(e.box.not_intersect(r))return Qe.OUTSIDE;let s=e.edges.search(r);if(s.length===0)return Qe.OUTSIDE;for(let d of s)if(d.shape.contains(t))return Qe.BOUNDARY;let a=[...e.faces],c=[];for(let d of s)for(let u of o.intersect(d.shape)){if(u.equalTo(t))return Qe.BOUNDARY;c.push({pt:u,edge:d,face_index:a.indexOf(d.face)})}c.sort((d,u)=>U8t(d.pt.x,u.pt.x)?-1:V8t(d.pt.x,u.pt.x)?1:d.face_index<u.face_index?-1:d.face_index>u.face_index?1:d.edge.arc_length<u.edge.arc_length?-1:d.edge.arc_length>u.edge.arc_length?1:0);let l=0;for(let d=0;d<c.length;d++){let u=c[d];if(u.pt.equalTo(u.edge.shape.start)){if(d>0&&u.pt.equalTo(c[d-1].pt)&&u.face_index===c[d-1].face_index&&u.edge.prev===c[d-1].edge)continue;let h=u.edge.prev;for(;VRe(h.length);)h=h.prev;let A=h.shape.tangentInEnd(),m=u.pt.translate(A),p=u.edge.shape.tangentInStart(),g=u.pt.translate(p),_=m.leftTo(i),f=g.leftTo(i);(_&&!f||!_&&f)&&l++}else if(u.pt.equalTo(u.edge.shape.end)){if(d>0&&u.pt.equalTo(c[d-1].pt)&&u.face_index===c[d-1].face_index&&u.edge.next===c[d-1].edge)continue;let h=u.edge.next;for(;VRe(h.length);)h=h.next;let A=h.shape.tangentInStart(),m=u.pt.translate(A),p=u.edge.shape.tangentInEnd(),g=u.pt.translate(p),_=m.leftTo(i),f=g.leftTo(i);(_&&!f||!_&&f)&&l++}else if(u.edge.shape instanceof Qe.Segment)l++;else{let h=u.edge.shape.box;$k(u.pt.y,h.ymin)||$k(u.pt.y,h.ymax)||l++}}return n=l%2==1?1:0,n}function ovt(e,t){return EV(e,t).intersect()}function ivt(e,t){return EV(e,t).inside()}function cTt(e,t){return EV(e,t).covered()}function lTt(e,t){return cTt(t,e)}function EV(e,t){return e instanceof Qe.Line&&t instanceof Qe.Line?function(n,o){let i=new cV,r=PU(n,o);return r.length===0?n.contains(o.pt)&&o.contains(n.pt)?(i.I2I=[n],i.I2E=[],i.E2I=[]):(i.I2I=[],i.I2E=[n],i.E2I=[o]):(i.I2I=r,i.I2E=n.split(r),i.E2I=o.split(r)),i}(e,t):e instanceof Qe.Line&&t instanceof Qe.Circle?function(n,o){let i=new cV,r=AL(n,o);if(r.length===0)i.I2I=[],i.I2B=[],i.I2E=[n],i.E2I=[o];else if(r.length===1)i.I2I=[],i.I2B=r,i.I2E=n.split(r),i.E2I=[o];else{let s=new Lk([n]),a=n.sortPoints(r);s.split(a);let c=s.toShapes();i.I2I=[c[1]],i.I2B=a,i.I2E=[c[0],c[2]],i.E2I=new Qe.Polygon([o.toArc()]).cutWithLine(n)}return i}(e,t):e instanceof Qe.Line&&t instanceof Qe.Box?function(n,o){let i=new cV,r=jV(n,o);if(r.length===0)i.I2I=[],i.I2B=[],i.I2E=[n],i.E2I=[o];else if(r.length===1)i.I2I=[],i.I2B=r,i.I2E=n.split(r),i.E2I=[o];else{let s=new Lk([n]),a=n.sortPoints(r);s.split(a);let c=s.toShapes();o.toSegments().some((l)=>l.contains(r[0])&&l.contains(r[1]))?(i.I2I=[],i.I2B=[c[1]],i.I2E=[c[0],c[2]],i.E2I=[o]):(i.I2I=[c[1]],i.I2B=a,i.I2E=[c[0],c[2]],i.E2I=new Qe.Polygon(o.toSegments()).cutWithLine(n))}return i}(e,t):e instanceof Qe.Line&&t instanceof Qe.Polygon?function(n,o){let i=new cV,r=Yte(n,o),s=new Lk([n]),a=r.length>0?r.slice():n.sortPoints(r);return s.split(a),[...s].forEach((c)=>c.setInclusion(o)),i.I2I=[...s].filter((c)=>c.bv===Qe.INSIDE).map((c)=>c.shape),i.I2B=[...s].slice(1).map((c)=>c.bv===Qe.BOUNDARY?c.shape:c.shape.start),i.I2E=[...s].filter((c)=>c.bv===Qe.OUTSIDE).map((c)=>c.shape),i.E2I=o.cutWithLine(n),i}(e,t):(e instanceof Qe.Segment||e instanceof Qe.Arc)&&t instanceof Qe.Polygon?rvt(e,t):(e instanceof Qe.Segment||e instanceof Qe.Arc)&&(t instanceof Qe.Circle||t instanceof Qe.Box)?rvt(e,new Qe.Polygon(t)):e instanceof Qe.Polygon&&t instanceof Qe.Polygon?iAe(e,t):(e instanceof Qe.Circle||e instanceof Qe.Box)&&(t instanceof Qe.Circle||t instanceof Qe.Box)?iAe(new Qe.Polygon(e),new Qe.Polygon(t)):(e instanceof Qe.Circle||e instanceof Qe.Box)&&t instanceof Qe.Polygon?iAe(new Qe.Polygon(e),t):e instanceof Qe.Polygon&&(t instanceof Qe.Circle||t instanceof Qe.Box)?iAe(e,new Qe.Polygon(t)):void 0}function rvt(e,t){let n=new cV,o=function(s,a){return s instanceof Qe.Line?Yte(s,a):s instanceof Qe.Segment?BLe(s,a):s instanceof Qe.Arc?wLe(s,a):[]}(e,t),i=o.length>0?o.slice():e.sortPoints(o),r=new Lk([e]);r.split(i),[...r].forEach((s)=>s.setInclusion(t)),n.I2I=[...r].filter((s)=>s.bv===Qe.INSIDE).map((s)=>s.shape),n.I2B=[...r].slice(1).map((s)=>s.bv===Qe.BOUNDARY?s.shape:s.shape.start),n.I2E=[...r].filter((s)=>s.bv===Qe.OUTSIDE).map((s)=>s.shape),n.B2I=[],n.B2B=[],n.B2E=[];for(let s of[e.start,e.end])switch(wee(t,s)){case Qe.INSIDE:n.B2I.push(s);break;case Qe.BOUNDARY:n.B2B.push(s);break;case Qe.OUTSIDE:n.B2E.push(s)}return n}function iAe(e,t){let n=new cV,[o,i]=sTt(e,t),r=iTt(e,t),s=XRe(e,t),a=XRe(t,e),[c,l]=rTt(e,t),d=KRe(e,t),u=KRe(t,e);return n.I2I=r.isEmpty()?[]:[r],n.I2B=l,n.I2E=s.isEmpty()?[]:[s],n.B2I=c,n.B2B=o,n.B2E=d,n.E2I=a.isEmpty()?[]:[a],n.E2B=u,n}var OTo=Object.freeze({__proto__:null,contain:function(e,t){return ivt(t,e)},cover:lTt,covered:cTt,disjoint:function(e,t){return!ovt(e,t)},equal:function(e,t){return EV(e,t).equal()},inside:ivt,intersect:ovt,relate:EV,touch:function(e,t){return EV(e,t).touch()}}),z8=class e{constructor(t=1,n=0,o=0,i=1,r=0,s=0){this.a=t,this.b=n,this.c=o,this.d=i,this.tx=r,this.ty=s}fromMatrix3x3(t){let[n,o,i]=t[0],[r,s,a]=t[1];return new e(n,r,o,s,i,a)}toMatrix3x3(){return[[this.a,this.c,this.tx],[this.b,this.d,this.ty],[0,0,1]]}clone(){return new e(this.a,this.b,this.c,this.d,this.tx,this.ty)}transform(t){return[t[0]*this.a+t[1]*this.c+this.tx,t[0]*this.b+t[1]*this.d+this.ty]}multiply(t){return new e(this.a*t.a+this.c*t.b,this.b*t.a+this.d*t.b,this.a*t.c+this.c*t.d,this.b*t.c+this.d*t.d,this.a*t.tx+this.c*t.ty+this.tx,this.b*t.tx+this.d*t.ty+this.ty)}translate(...t){let n,o;if(t.length!=1||isNaN(t[0].x)||isNaN(t[0].y)){if(t.length!==2||typeof t[0]!="number"||typeof t[1]!="number")throw Wu.ILLEGAL_PARAMETERS;n=t[0],o=t[1]}else n=t[0].x,o=t[0].y;return this.multiply(new e(1,0,0,1,n,o))}rotate(t,n=0,o=0){let i=Math.cos(t),r=Math.sin(t);return this.translate(n,o).multiply(new e(i,r,-r,i,0,0)).translate(-n,-o)}scale(t,n){return this.multiply(new e(t,0,0,n,0,0))}equalTo(t){return!!Qe.Utils.EQ(this.tx,t.tx)&&(!!Qe.Utils.EQ(this.ty,t.ty)&&(!!Qe.Utils.EQ(this.a,t.a)&&(!!Qe.Utils.EQ(this.b,t.b)&&(!!Qe.Utils.EQ(this.c,t.c)&&!!Qe.Utils.EQ(this.d,t.d)))))}};Qe.Matrix=z8;Qe.matrix=(...e)=>new Qe.Matrix(...e);var zTo=class{constructor(e,t){this.low=e,this.high=t}get max(){return this.clone()}less_than(e){return this.low<e.low||this.low===e.low&&this.high<e.high}equal_to(e){return this.low===e.low&&this.high===e.high}intersect(e){return!this.not_intersect(e)}not_intersect(e){return this.high<e.low||e.high<this.low}merge(e){let t=this.low===void 0?e.low:this.low<e.low?this.low:e.low,n=this.high===void 0?e.high:this.high>e.high?this.high:e.high,o=this.clone();return o.low=t,o.high=n,o}output(){return[this.low,this.high]}comparable_less_than(e,t){return e<t}},GTo=class e extends zTo{clone(){return new e(this.low,this.high)}},p8=class{constructor(e,t,n=null,o=null,i=null,r=0){if(this.left=n,this.right=o,this.parent=i,this.color=r,this.item={key:void 0,values:[]},t!==void 0&&this.item.values.push(t),e!==void 0)if(Array.isArray(e)){let[s,a]=e;if(!Number.isNaN(s)&&!Number.isNaN(a)){let c=s,l=a;c>l&&([c,l]=[l,c]),this.item.key=new GTo(c,l)}}else this.item.key=e;this.max=this.item.key?this.item.key.max:void 0}isNil(){return this.item.key===void 0&&this.item.values.length===0&&this.left===null&&this.right===null&&this.color===0}requireKey(){if(!this.item.key)throw Error("Node key is undefined (nil/sentinel). Operation is not applicable.");return this.item.key}less_than(e){let t=this.requireKey(),n=e.requireKey();return t.less_than(n)}_value_equal(e){let t=this.item.values[0],n=e.item.values[0];return t&&n&&t.equal_to?t.equal_to(n):t===n}equal_to(e){let t=this.requireKey(),n=e.requireKey();return t.equal_to(n)}intersect(e){let t=this.requireKey(),n=e.requireKey();return t.intersect(n)}copy_data(e){this.item.key=e.item.key,this.item.values=e.item.values.slice()}update_max(){this.max=this.item.key?this.item.key.max:void 0,this.right&&this.right.max&&(this.max=this.max?this.max.merge(this.right.max):this.right.max),this.left&&this.left.max&&(this.max=this.max?this.max.merge(this.left.max):this.left.max)}not_intersect_left_subtree(e){if(!this.left)return!0;let t=this.left.max?this.left.max.high:this.left.item.key.high,n=this.requireKey(),o=e.requireKey();return n.comparable_less_than(t,o.low)}not_intersect_right_subtree(e){if(!this.right)return!0;let t=this.right.max?this.right.max.low:this.right.item.key.low,n=this.requireKey(),o=e.requireKey();return n.comparable_less_than(o.high,t)}},ZRe=class e{constructor(){this.root=null,this.nil_node=new p8}get size(){let t=0;return this.tree_walk(this.root,(n)=>t+=n.item.values.length),t}get keys(){let t=[];return this.tree_walk(this.root,(n)=>t.push(n.item.key.output())),t}get values(){let t=[];return this.tree_walk(this.root,(n)=>{for(let o of n.item.values)t.push(o)}),t}get items(){let t=[];return this.tree_walk(this.root,(n)=>{let o=n.item.key.output();for(let i of n.item.values)t.push({key:o,value:i})}),t}isEmpty(){return this.root==null||this.root===this.nil_node}clear(){this.root=null}insert(t,n=t){if(t===void 0)return;let o=this.tree_search(this.root,new p8(t));if(o)return o.item.values.push(n),o;let i=new p8(t,n,this.nil_node,this.nil_node,null,1);return this.tree_insert(i),this.recalc_max(i),i}exist(t,n=t){let o=this.tree_search(this.root,new p8(t));return!!o&&(arguments.length<2||n===t||o.item.values.some((i)=>i&&i.equal_to?i.equal_to(n):i===n))}remove(t,n=t){let o=this.tree_search(this.root,new p8(t));if(!o)return;if(arguments.length<2)return this.tree_delete(o),o;let i=o.item.values.findIndex((r)=>r&&r.equal_to?r.equal_to(n):r===n);return i>=0?(o.item.values.splice(i,1),o.item.values.length===0&&this.tree_delete(o),o):void 0}search(t,n=(o,i)=>o===i?i.output():o){let o=new p8(t),i=[];this.tree_search_interval(this.root,o,i);let r=[];for(let s of i)for(let a of s.item.values)r.push(n(a,s.item.key));return r}intersect_any(t){let n=new p8(t);return this.tree_find_any_interval(this.root,n)}forEach(t){this.tree_walk(this.root,(n)=>{for(let o of n.item.values)t(n.item.key,o)})}map(t){let n=new e;return this.tree_walk(this.root,(o)=>{for(let i of o.item.values)n.insert(o.item.key,t(i,o.item.key))}),n}*iterate(t,n=(o,i)=>o===i?i.output():o){let o=null;for(t?o=this.tree_search_nearest_forward(this.root,new p8(t)):this.root&&(o=this.local_minimum(this.root));o;){for(let i of o.item.values)yield n(i,o.item.key);o=this.tree_successor(o)}}recalc_max(t){let n=t;for(;n.parent!=null;)n.parent.update_max(),n=n.parent}tree_insert(t){let n=this.root,o=null;if(this.root==null||this.root===this.nil_node)this.root=t;else{for(;n!==this.nil_node;)o=n,n=t.less_than(n)?n.left:n.right;t.parent=o,t.less_than(o)?o.left=t:o.right=t}this.insert_fixup(t)}insert_fixup(t){let n,o;for(n=t;n!==this.root&&n.parent.color===1;)n.parent===n.parent.parent.left?(o=n.parent.parent.right,o.color===1?(n.parent.color=0,o.color=0,n.parent.parent.color=1,n=n.parent.parent):(n===n.parent.right&&(n=n.parent,this.rotate_left(n)),n.parent.color=0,n.parent.parent.color=1,this.rotate_right(n.parent.parent))):(o=n.parent.parent.left,o.color===1?(n.parent.color=0,o.color=0,n.parent.parent.color=1,n=n.parent.parent):(n===n.parent.left&&(n=n.parent,this.rotate_right(n)),n.parent.color=0,n.parent.parent.color=1,this.rotate_left(n.parent.parent)));this.root.color=0}tree_delete(t){let n,o;n=t.left===this.nil_node||t.right===this.nil_node?t:this.tree_successor(t),o=n.left!==this.nil_node?n.left:n.right,o.parent=n.parent,n===this.root?this.root=o:(n===n.parent.left?n.parent.left=o:n.parent.right=o,n.parent.update_max()),this.recalc_max(o),n!==t&&(t.copy_data(n),t.update_max(),this.recalc_max(t)),n.color===0&&this.delete_fixup(o)}delete_fixup(t){let n,o=t;for(;o!==this.root&&o.parent!=null&&o.color===0;)o===o.parent.left?(n=o.parent.right,n.color===1&&(n.color=0,o.parent.color=1,this.rotate_left(o.parent),n=o.parent.right),n.left.color===0&&n.right.color===0?(n.color=1,o=o.parent):(n.right.color===0&&(n.color=1,n.left.color=0,this.rotate_right(n),n=o.parent.right),n.color=o.parent.color,o.parent.color=0,n.right.color=0,this.rotate_left(o.parent),o=this.root)):(n=o.parent.left,n.color===1&&(n.color=0,o.parent.color=1,this.rotate_right(o.parent),n=o.parent.left),n.left.color===0&&n.right.color===0?(n.color=1,o=o.parent):(n.left.color===0&&(n.color=1,n.right.color=0,this.rotate_left(n),n=o.parent.left),n.color=o.parent.color,o.parent.color=0,n.left.color=0,this.rotate_right(o.parent),o=this.root));o.color=0}tree_search(t,n){if(t!=null&&t!==this.nil_node)return n.equal_to(t)?t:n.less_than(t)?this.tree_search(t.left,n):this.tree_search(t.right,n)}tree_search_nearest_forward(t,n){let o=null,i=t;for(;i&&i!==this.nil_node;)i.less_than(n)?i.intersect(n)?(o=i,i=i.left):i=i.right:(o&&!i.less_than(o)||(o=i),i=i.left);return o||null}tree_search_interval(t,n,o){t!=null&&t!==this.nil_node&&(t.left===this.nil_node||t.not_intersect_left_subtree(n)||this.tree_search_interval(t.left,n,o),t.intersect(n)&&o.push(t),t.right===this.nil_node||t.not_intersect_right_subtree(n)||this.tree_search_interval(t.right,n,o))}tree_find_any_interval(t,n){let o=!1;return t!=null&&t!==this.nil_node&&(t.left===this.nil_node||t.not_intersect_left_subtree(n)||(o=this.tree_find_any_interval(t.left,n)),o||(o=t.intersect(n)),o||t.right===this.nil_node||t.not_intersect_right_subtree(n)||(o=this.tree_find_any_interval(t.right,n))),o}local_minimum(t){let n=t;for(;n.left!=null&&n.left!==this.nil_node;)n=n.left;return n}local_maximum(t){let n=t;for(;n.right!=null&&n.right!==this.nil_node;)n=n.right;return n}tree_successor(t){let n,o,i;if(t.right!==this.nil_node)n=this.local_minimum(t.right);else{for(o=t,i=t.parent;i!=null&&i.right===o;)o=i,i=i.parent;n=i}return n}rotate_left(t){let n=t.right;t.right=n.left,n.left!==this.nil_node&&(n.left.parent=t),n.parent=t.parent,t===this.root?this.root=n:t===t.parent.left?t.parent.left=n:t.parent.right=n,n.left=t,t.parent=n,t!==null&&t!==this.nil_node&&t.update_max(),n!=null&&n!==this.nil_node&&n.update_max()}rotate_right(t){let n=t.left;t.left=n.right,n.right!==this.nil_node&&(n.right.parent=t),n.parent=t.parent,t===this.root?this.root=n:t===t.parent.left?t.parent.left=n:t.parent.right=n,n.right=t,t.parent=n,t!==null&&t!==this.nil_node&&t.update_max(),n!=null&&n!==this.nil_node&&n.update_max()}tree_walk(t,n){t!=null&&t!==this.nil_node&&(this.tree_walk(t.left,n),n(t),this.tree_walk(t.right,n))}testRedBlackProperty(){let t=!0;return this.tree_walk(this.root,function(n){n.color===1&&(n.left.color===0&&n.right.color===0||(t=!1))}),t}testBlackHeightProperty(t){let n=0,o=0,i=0;if(t.color===0&&n++,o=t.left!==this.nil_node?this.testBlackHeightProperty(t.left):1,i=t.right!==this.nil_node?this.testBlackHeightProperty(t.right):1,o!==i)throw Error("Red-black height property violated");return n+=o,n}},YTo=class extends Set{constructor(e){super(e),this.index=new ZRe,this.forEach((t)=>this.index.insert(t))}add(e){let t=this.size,{key:n,value:o}=e,i=n||e.box,r=o||e;return super.add(r),this.size>t&&this.index.insert(i,r),this}delete(e){let{key:t,value:n}=e,o=t||e.box,i=n||e,r=super.delete(i);return r&&this.index.remove(o,i),r}clear(){super.clear(),this.index=new ZRe}search(e){return this.index.search(e)}hit(e){let t=new Qe.Box(e.x-1,e.y-1,e.x+1,e.y+1);return this.index.search(t).filter((n)=>e.on(n))}svg(){return[...this].reduce((e,t)=>e+t.svg(),"")}};Qe.PlanarSet=YTo;var aT=class{get name(){throw Wu.CANNOT_INVOKE_ABSTRACT_METHOD}get box(){throw Wu.CANNOT_INVOKE_ABSTRACT_METHOD}clone(){throw Wu.CANNOT_INVOKE_ABSTRACT_METHOD}translate(...e){return this.transform(new z8().translate(...e))}rotate(e,t=new Qe.Point){return this.transform(new z8().rotate(e,t.x,t.y))}scale(e,t){return this.transform(new z8().scale(e,t))}transform(...e){throw Wu.CANNOT_INVOKE_ABSTRACT_METHOD}toJSON(){return Object.assign({},this,{name:this.name})}svg(e={}){throw Wu.CANNOT_INVOKE_ABSTRACT_METHOD}},Gh=class e extends aT{constructor(...t){if(super(),this.x=0,this.y=0,t.length!==0){if(t.length===1&&t[0]instanceof Array&&t[0].length===2){let n=t[0];if(typeof n[0]=="number"&&typeof n[1]=="number")return this.x=n[0],void(this.y=n[1])}if(t.length===1&&t[0]instanceof Object&&t[0].name==="point"){let{x:n,y:o}=t[0];return this.x=n,void(this.y=o)}if(t.length===2&&typeof t[0]=="number"&&typeof t[1]=="number")return this.x=t[0],void(this.y=t[1]);throw Wu.ILLEGAL_PARAMETERS}}get box(){return new Qe.Box(this.x,this.y,this.x,this.y)}clone(){return new Qe.Point(this.x,this.y)}get vertices(){return[this.clone()]}equalTo(t){return Qe.Utils.EQ(this.x,t.x)&&Qe.Utils.EQ(this.y,t.y)}lessThan(t){return!!Qe.Utils.LT(this.y,t.y)||!(!Qe.Utils.EQ(this.y,t.y)||!Qe.Utils.LT(this.x,t.x))}transform(t){return new Qe.Point(t.transform([this.x,this.y]))}projectionOn(t){if(this.equalTo(t.pt))return this.clone();let n=new Qe.Vector(this,t.pt);if(Qe.Utils.EQ_0(n.cross(t.norm)))return t.pt.clone();let o=n.dot(t.norm),i=t.norm.multiply(o);return this.translate(i)}leftTo(t){let n=new Qe.Vector(t.pt,this);return Qe.Utils.GT(n.dot(t.norm),0)}distanceTo(t){if(t instanceof e){let n=t.x-this.x,o=t.y-this.y;return[Math.sqrt(n*n+o*o),new Qe.Segment(this,t)]}return t instanceof Qe.Line?Qe.Distance.point2line(this,t):t instanceof Qe.Circle?Qe.Distance.point2circle(this,t):t instanceof Qe.Segment?Qe.Distance.point2segment(this,t):t instanceof Qe.Arc?Qe.Distance.point2arc(this,t):t instanceof Qe.Box?Qe.Distance.point2polygon(this,new Qe.Polygon(t)):t instanceof Qe.Polygon?Qe.Distance.point2polygon(this,t):t instanceof Qe.PlanarSet?Qe.Distance.shape2planarSet(this,t):t instanceof Qe.Multiline?Qe.Distance.shape2multiline(this,t):void 0}on(t){if(t instanceof Qe.Point)return this.equalTo(t);if(t.contains&&t.contains instanceof Function)return t.contains(this);throw Qe.Errors.UNSUPPORTED_SHAPE_TYPE}get name(){return"point"}svg(t={}){let n=t.r??3;return`
<circle cx="${this.x}" cy="${this.y}" r="${n}"
${pL({fill:"red",...t})} />`}};Qe.Point=Gh;var VTo=(...e)=>new Qe.Point(...e);Qe.point=VTo;var ife=class extends aT{constructor(...e){if(super(),this.x=0,this.y=0,e.length!==0){if(e.length===1&&e[0]instanceof Array&&e[0].length===2){let t=e[0];if(typeof t[0]=="number"&&typeof t[1]=="number")return this.x=t[0],void(this.y=t[1])}if(e.length===1&&e[0]instanceof Object&&e[0].name==="vector"){let{x:t,y:n}=e[0];return this.x=t,void(this.y=n)}if(e.length===1&&e[0]instanceof Object&&e[0].name==="segment"){let{start:t,end:n}=e[0];return this.x=n.x-t.x,void(this.y=n.y-t.y)}if(e.length===2){let t=e[0],n=e[1];if(typeof t=="number"&&typeof n=="number")return this.x=t,void(this.y=n);if(t instanceof Qe.Point&&n instanceof Qe.Point)return this.x=n.x-t.x,void(this.y=n.y-t.y)}throw Wu.ILLEGAL_PARAMETERS}}clone(){return new Qe.Vector(this.x,this.y)}get slope(){let e=Math.atan2(this.y,this.x);return e<0&&(e=2*Math.PI+e),e}get length(){return Math.sqrt(this.dot(this))}isZeroLength(){return Qe.Utils.EQ_0(this.length)}equalTo(e){return Qe.Utils.EQ(this.x,e.x)&&Qe.Utils.EQ(this.y,e.y)}multiply(e){return new Qe.Vector(e*this.x,e*this.y)}dot(e){return this.x*e.x+this.y*e.y}cross(e){return this.x*e.y-this.y*e.x}normalize(){if(this.isZeroLength())throw Wu.ZERO_DIVISION;return new Qe.Vector(this.x/this.length,this.y/this.length)}rotate(e,t=new Qe.Point){if(t.x===0&&t.y===0)return this.transform(new z8().rotate(e));throw Wu.OPERATION_IS_NOT_SUPPORTED}transform(e){return new Qe.Vector(e.transform([this.x,this.y]))}rotate90CCW(){return new Qe.Vector(-this.y,this.x)}rotate90CW(){return new Qe.Vector(this.y,-this.x)}invert(){return new Qe.Vector(-this.x,-this.y)}add(e){return new Qe.Vector(this.x+e.x,this.y+e.y)}subtract(e){return new Qe.Vector(this.x-e.x,this.y-e.y)}angleTo(e){let t=this.normalize(),n=e.normalize(),o=Math.atan2(t.cross(n),t.dot(n));return o<0&&(o+=2*Math.PI),o}projectionOn(e){let t=e.normalize(),n=this.dot(t);return t.multiply(n)}get name(){return"vector"}};Qe.Vector=ife;var dTt=(...e)=>new Qe.Vector(...e);Qe.vector=dTt;var YE=class e extends aT{constructor(...t){if(super(),this.ps=new Qe.Point,this.pe=new Qe.Point,t.length!==0){if(t.length===1&&t[0]instanceof Array&&t[0].length===4){let n=t[0];return this.ps=new Qe.Point(n[0],n[1]),void(this.pe=new Qe.Point(n[2],n[3]))}if(t.length===1&&t[0]instanceof Object&&t[0].name==="segment"){let{ps:n,pe:o}=t[0];return this.ps=new Qe.Point(n.x,n.y),void(this.pe=new Qe.Point(o.x,o.y))}if(!(t.length===1&&t[0]instanceof Qe.Point)){if(t.length===2&&t[0]instanceof Qe.Point&&t[1]instanceof Qe.Point)return this.ps=t[0].clone(),void(this.pe=t[1].clone());if(t.length===4)return this.ps=new Qe.Point(t[0],t[1]),void(this.pe=new Qe.Point(t[2],t[3]));throw Wu.ILLEGAL_PARAMETERS}this.ps=t[0].clone()}}clone(){return new Qe.Segment(this.start,this.end)}get start(){return this.ps}get end(){return this.pe}get vertices(){return[this.ps.clone(),this.pe.clone()]}get length(){return this.start.distanceTo(this.end)[0]}get slope(){return new Qe.Vector(this.start,this.end).slope}get box(){return new Qe.Box(Math.min(this.start.x,this.end.x),Math.min(this.start.y,this.end.y),Math.max(this.start.x,this.end.x),Math.max(this.start.y,this.end.y))}equalTo(t){return this.ps.equalTo(t.ps)&&this.pe.equalTo(t.pe)}contains(t){return Qe.Utils.EQ_0(this.distanceToPoint(t))}intersect(t){return t instanceof Qe.Point?this.contains(t)?[t]:[]:t instanceof Qe.Line?Gte(this,t):t instanceof Qe.Ray?TLe(t,this):t instanceof Qe.Segment?q_e(this,t):t instanceof Qe.Circle?J_e(this,t):t instanceof Qe.Box?function(n,o){let i=[];for(let r of o.toSegments()){let s=q_e(r,n);for(let a of s)i.push(a)}return i}(this,t):t instanceof Qe.Arc?qV(this,t):t instanceof Qe.Polygon?BLe(this,t):t instanceof Qe.Multiline?vU(this,t):void 0}distanceTo(t){if(t instanceof Qe.Point){let[n,o]=Qe.Distance.point2segment(t,this);return o=o.reverse(),[n,o]}if(t instanceof Qe.Circle){let[n,o]=Qe.Distance.segment2circle(this,t);return[n,o]}if(t instanceof Qe.Line){let[n,o]=Qe.Distance.segment2line(this,t);return[n,o]}if(t instanceof Qe.Segment){let[n,o]=Qe.Distance.segment2segment(this,t);return[n,o]}if(t instanceof Qe.Arc){let[n,o]=Qe.Distance.segment2arc(this,t);return[n,o]}if(t instanceof Qe.Box){let[n,o]=Qe.Distance.shape2polygon(this,new Qe.Polygon(t));return[n,o]}if(t instanceof Qe.Polygon){let[n,o]=Qe.Distance.shape2polygon(this,t);return[n,o]}if(t instanceof Qe.PlanarSet){let[n,o]=Qe.Distance.shape2planarSet(this,t);return[n,o]}if(t instanceof Qe.Multiline)return Qe.Distance.shape2multiline(this,t)}tangentInStart(){return new Qe.Vector(this.start,this.end).normalize()}tangentInEnd(){return new Qe.Vector(this.end,this.start).normalize()}reverse(){return new e(this.end,this.start)}split(t){return this.start.equalTo(t)?[null,this.clone()]:this.end.equalTo(t)?[this.clone(),null]:[new Qe.Segment(this.start,t),new Qe.Segment(t,this.end)]}middle(){return new Qe.Point((this.start.x+this.end.x)/2,(this.start.y+this.end.y)/2)}pointAtLength(t){if(t>this.length||t<0)return null;if(t==0)return this.start;if(t==this.length)return this.end;let n=t/this.length;return new Qe.Point((this.end.x-this.start.x)*n+this.start.x,(this.end.y-this.start.y)*n+this.start.y)}distanceToPoint(t){let[n,...o]=Qe.Distance.point2segment(t,this);return n}definiteIntegral(t=0){return(this.end.x-this.start.x)*(this.start.y-t+(this.end.y-t))/2}transform(t=new Qe.Matrix){return new e(this.ps.transform(t),this.pe.transform(t))}isZeroLength(){return this.ps.equalTo(this.pe)}sortPoints(t){return new Qe.Line(this.start,this.end).sortPoints(t)}get name(){return"segment"}svg(t={}){return`
<line x1="${this.start.x}" y1="${this.start.y}" x2="${this.end.x}" y2="${this.end.y}" ${pL(t)} />`}};Qe.Segment=YE;var UTo=(...e)=>new Qe.Segment(...e);Qe.segment=UTo;var{vector:NZ}=Qe;Qe.Line=class e extends aT{constructor(...t){if(super(),this.pt=new Qe.Point,this.norm=new Qe.Vector(0,1),t.length!==0){if(t.length===1&&t[0]instanceof Object&&t[0].name==="line"){let{pt:n,norm:o}=t[0];return this.pt=new Qe.Point(n),void(this.norm=new Qe.Vector(o))}if(t.length===2){let n=t[0],o=t[1];if(n instanceof Qe.Point&&o instanceof Qe.Point)return this.pt=n,this.norm=e.points2norm(n,o),void(this.norm.dot(NZ(this.pt.x,this.pt.y))>=0&&this.norm.invert());if(n instanceof Qe.Point&&o instanceof Qe.Vector){if(Qe.Utils.EQ_0(o.x)&&Qe.Utils.EQ_0(o.y))throw Wu.ILLEGAL_PARAMETERS;return this.pt=n.clone(),this.norm=o.clone(),this.norm=this.norm.normalize(),void(this.norm.dot(NZ(this.pt.x,this.pt.y))>=0&&this.norm.invert())}if(n instanceof Qe.Vector&&o instanceof Qe.Point){if(Qe.Utils.EQ_0(n.x)&&Qe.Utils.EQ_0(n.y))throw Wu.ILLEGAL_PARAMETERS;return this.pt=o.clone(),this.norm=n.clone(),this.norm=this.norm.normalize(),void(this.norm.dot(NZ(this.pt.x,this.pt.y))>=0&&this.norm.invert())}}throw Wu.ILLEGAL_PARAMETERS}}clone(){return new Qe.Line(this.pt,this.norm)}get start(){}get end(){}get length(){return Number.POSITIVE_INFINITY}get box(){return new Qe.Box(Number.NEGATIVE_INFINITY,Number.NEGATIVE_INFINITY,Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY)}get middle(){}get slope(){return new Qe.Vector(this.norm.y,-this.norm.x).slope}get standard(){return[this.norm.x,this.norm.y,this.norm.dot(NZ(this.pt.x,this.pt.y))]}parallelTo(t){return Qe.Utils.EQ_0(this.norm.cross(t.norm))}incidentTo(t){return this.parallelTo(t)&&this.pt.on(t)}contains(t){if(this.pt.equalTo(t))return!0;let n=new Qe.Vector(this.pt,t);return Qe.Utils.EQ_0(this.norm.dot(n))}coord(t){return NZ(t.x,t.y).cross(this.norm)}intersect(t){return t instanceof Qe.Point?this.contains(t)?[t]:[]:t instanceof Qe.Line?PU(this,t):t instanceof Qe.Ray?tTt(t,this):t instanceof Qe.Circle?AL(this,t):t instanceof Qe.Box?jV(this,t):t instanceof Qe.Segment?Gte(t,this):t instanceof Qe.Arc?ofe(this,t):t instanceof Qe.Polygon?Yte(this,t):t instanceof Qe.Multiline?vU(this,t):void 0}distanceTo(t){if(t instanceof Qe.Point){let[n,o]=Qe.Distance.point2line(t,this);return o=o.reverse(),[n,o]}if(t instanceof Qe.Circle){let[n,o]=Qe.Distance.circle2line(t,this);return o=o.reverse(),[n,o]}if(t instanceof Qe.Segment){let[n,o]=Qe.Distance.segment2line(t,this);return[n,o.reverse()]}if(t instanceof Qe.Arc){let[n,o]=Qe.Distance.arc2line(t,this);return[n,o.reverse()]}if(t instanceof Qe.Box){let[n,o]=Qe.Distance.shape2polygon(this,new Qe.Polygon(t));return[n,o]}if(t instanceof Qe.Polygon){let[n,o]=Qe.Distance.shape2polygon(this,t);return[n,o]}}split(t){if(t instanceof Qe.Point)return[new Qe.Ray(t,this.norm),new Qe.Ray(t,this.norm)];{let n=new Qe.Multiline([this]),o=this.sortPoints(t);return n.split(o),n.toShapes()}}rotate(t,n=new Qe.Point){return new Qe.Line(this.pt.rotate(t,n),this.norm.rotate(t))}transform(t){return new Qe.Line(this.pt.transform(t),this.norm.clone())}sortPoints(t){return t.slice().sort((n,o)=>this.coord(n)<this.coord(o)?-1:this.coord(n)>this.coord(o)?1:0)}get name(){return"line"}svg(t,n={}){let o=jV(this,t);if(o.length===0)return"";let i=o[0],r=o.length===2?o[1]:o.find((s)=>!s.equalTo(i));return r===void 0&&(r=i),new Qe.Segment(i,r).svg(n)}static points2norm(t,n){if(t.equalTo(n))throw Wu.ILLEGAL_PARAMETERS;return new Qe.Vector(t,n).normalize().rotate90CCW()}};var WTo=(...e)=>new Qe.Line(...e);Qe.line=WTo;var RLe=class extends aT{constructor(...e){if(super(),this.pc=new Qe.Point,this.r=1,e.length===1&&e[0]instanceof Object&&e[0].name==="circle"){let{pc:t,r:n}=e[0];this.pc=new Qe.Point(t),this.r=n}else{let[t,n]=[...e];t&&t instanceof Qe.Point&&(this.pc=t.clone()),n!==void 0&&(this.r=n)}}clone(){return new Qe.Circle(this.pc.clone(),this.r)}get center(){return this.pc}get box(){return new Qe.Box(this.pc.x-this.r,this.pc.y-this.r,this.pc.x+this.r,this.pc.y+this.r)}contains(e){return e instanceof Qe.Point?Qe.Utils.LE(e.distanceTo(this.center)[0],this.r):e instanceof Qe.Segment?Qe.Utils.LE(e.start.distanceTo(this.center)[0],this.r)&&Qe.Utils.LE(e.end.distanceTo(this.center)[0],this.r):e instanceof Qe.Arc?this.intersect(e).length===0&&Qe.Utils.LE(e.start.distanceTo(this.center)[0],this.r)&&Qe.Utils.LE(e.end.distanceTo(this.center)[0],this.r):e instanceof Qe.Circle?this.intersect(e).length===0&&Qe.Utils.LE(e.r,this.r)&&Qe.Utils.LE(e.center.distanceTo(this.center)[0],this.r):void 0}toArc(e=!0){return new Qe.Arc(this.center,this.r,Math.PI,-Math.PI,e)}scale(e,t){if(e!==t)throw Wu.OPERATION_IS_NOT_SUPPORTED;if(this.pc.x!==0||this.pc.y!==0)throw Wu.OPERATION_IS_NOT_SUPPORTED;return new Qe.Circle(this.pc,this.r*e)}transform(e=new Qe.Matrix){return new Qe.Circle(this.pc.transform(e),this.r)}intersect(e){return e instanceof Qe.Point?this.contains(e)?[e]:[]:e instanceof Qe.Line?AL(e,this):e instanceof Qe.Ray?eTt(e,this):e instanceof Qe.Segment?J_e(e,this):e instanceof Qe.Circle?W8t(e,this):e instanceof Qe.Box?function(t,n){let o=[];for(let i of n.toSegments()){let r=J_e(i,t);for(let s of r)o.push(s)}return o}(this,e):e instanceof Qe.Arc?MLe(e,this):e instanceof Qe.Polygon?J8t(this,e):e instanceof Qe.Multiline?vU(this,e):void 0}distanceTo(e){if(e instanceof Qe.Point){let[t,n]=Qe.Distance.point2circle(e,this);return n=n.reverse(),[t,n]}if(e instanceof Qe.Circle){let[t,n]=Qe.Distance.circle2circle(this,e);return[t,n]}if(e instanceof Qe.Line){let[t,n]=Qe.Distance.circle2line(this,e);return[t,n]}if(e instanceof Qe.Segment){let[t,n]=Qe.Distance.segment2circle(e,this);return n=n.reverse(),[t,n]}if(e instanceof Qe.Arc){let[t,n]=Qe.Distance.arc2circle(e,this);return n=n.reverse(),[t,n]}if(e instanceof Qe.Box){let[t,n]=Qe.Distance.shape2polygon(this,new Qe.Polygon(e));return[t,n]}if(e instanceof Qe.Polygon){let[t,n]=Qe.Distance.shape2polygon(this,e);return[t,n]}if(e instanceof Qe.PlanarSet){let[t,n]=Qe.Distance.shape2planarSet(this,e);return[t,n]}if(e instanceof Qe.Multiline){let[t,n]=Qe.Distance.shape2multiline(this,e);return[t,n]}}get name(){return"circle"}svg(e={}){return`
<circle cx="${this.pc.x}" cy="${this.pc.y}" r="${this.r}"
${pL({fill:"none",...e})} />`}};Qe.Circle=RLe;Qe.circle=(...e)=>new Qe.Circle(...e);var RI=class extends aT{constructor(...e){if(super(),this.pc=new Qe.Point,this.r=1,this.startAngle=0,this.endAngle=2*Math.PI,this.counterClockwise=!0,e.length!==0)if(e.length===1&&e[0]instanceof Object&&e[0].name==="arc"){let{pc:t,r:n,startAngle:o,endAngle:i,counterClockwise:r}=e[0];this.pc=new Qe.Point(t.x,t.y),this.r=n,this.startAngle=o,this.endAngle=i,this.counterClockwise=r}else{let[t,n,o,i,r]=[...e];t&&t instanceof Qe.Point&&(this.pc=t.clone()),n!==void 0&&(this.r=n),o!==void 0&&(this.startAngle=o),i!==void 0&&(this.endAngle=i),r!==void 0&&(this.counterClockwise=r)}}clone(){return new Qe.Arc(this.pc.clone(),this.r,this.startAngle,this.endAngle,this.counterClockwise)}get sweep(){let e=this.startAngle,t=this.endAngle;if(Qe.Utils.EQ(Math.abs(e-t),Qe.PIx2))return Qe.PIx2;Math.abs(e)>Qe.PIx2&&(e-=Math.trunc(e/Qe.PIx2)*Qe.PIx2),e<0&&(e+=Qe.PIx2),Math.abs(t)>Qe.PIx2&&(t-=Math.trunc(t/Qe.PIx2)*Qe.PIx2),t<0&&(t+=Qe.PIx2);let n=this.counterClockwise?t-e:e-t;return n<0&&(n+=Qe.PIx2),n}get start(){return new Qe.Point(this.pc.x+this.r,this.pc.y).rotate(this.startAngle,this.pc)}get end(){return new Qe.Point(this.pc.x+this.r,this.pc.y).rotate(this.endAngle,this.pc)}get center(){return this.pc.clone()}get vertices(){return[this.start.clone(),this.end.clone()]}get length(){return Math.abs(this.sweep*this.r)}get box(){let e=this.breakToFunctional().reduce((t,n)=>t.merge(n.start.box),new Qe.Box);return e=e.merge(this.end.box),e}contains(e){if(!Qe.Utils.EQ(this.pc.distanceTo(e)[0],this.r))return!1;if(e.equalTo(this.start))return!0;let t=new Qe.Vector(this.pc,e).slope,n=new Qe.Arc(this.pc,this.r,this.startAngle,t,this.counterClockwise);return Qe.Utils.LE(n.length,this.length)}split(e){if(this.start.equalTo(e))return[null,this.clone()];if(this.end.equalTo(e))return[this.clone(),null];let t=new Qe.Vector(this.pc,e).slope;return[new Qe.Arc(this.pc,this.r,this.startAngle,t,this.counterClockwise),new Qe.Arc(this.pc,this.r,t,this.endAngle,this.counterClockwise)]}middle(){let e=this.counterClockwise?this.startAngle+this.sweep/2:this.startAngle-this.sweep/2;return new Qe.Arc(this.pc,this.r,this.startAngle,e,this.counterClockwise).end}pointAtLength(e){if(e>this.length||e<0)return null;if(e===0)return this.start;if(e===this.length)return this.end;let t=e/this.length,n=this.counterClockwise?this.startAngle+this.sweep*t:this.startAngle-this.sweep*t;return new Qe.Arc(this.pc,this.r,this.startAngle,n,this.counterClockwise).end}chordHeight(){return(1-Math.cos(Math.abs(this.sweep/2)))*this.r}intersect(e){return e instanceof Qe.Point?this.contains(e)?[e]:[]:e instanceof Qe.Line?ofe(e,this):e instanceof Qe.Ray?DLe(e,this):e instanceof Qe.Circle?MLe(this,e):e instanceof Qe.Segment?qV(e,this):e instanceof Qe.Box?function(t,n){let o=[];for(let i of n.toSegments()){let r=qV(i,t);for(let s of r)o.push(s)}return o}(this,e):e instanceof Qe.Arc?X8t(this,e):e instanceof Qe.Polygon?wLe(this,e):e instanceof Qe.Multiline?vU(this,e):void 0}distanceTo(e){if(e instanceof Qe.Point){let[t,n]=Qe.Distance.point2arc(e,this);return n=n.reverse(),[t,n]}if(e instanceof Qe.Circle){let[t,n]=Qe.Distance.arc2circle(this,e);return[t,n]}if(e instanceof Qe.Line){let[t,n]=Qe.Distance.arc2line(this,e);return[t,n]}if(e instanceof Qe.Segment){let[t,n]=Qe.Distance.segment2arc(e,this);return n=n.reverse(),[t,n]}if(e instanceof Qe.Arc){let[t,n]=Qe.Distance.arc2arc(this,e);return[t,n]}if(e instanceof Qe.Box){let[t,n]=Qe.Distance.shape2polygon(this,new Qe.Polygon(e));return[t,n]}if(e instanceof Qe.Polygon){let[t,n]=Qe.Distance.shape2polygon(this,e);return[t,n]}if(e instanceof Qe.PlanarSet){let[t,n]=Qe.Distance.shape2planarSet(this,e);return[t,n]}if(e instanceof Qe.Multiline)return Qe.Distance.shape2multiline(this,e)}breakToFunctional(){let e=[],t=[0,Math.PI/2,Math.PI,3*Math.PI/2],n=this.startAngle,o=this.endAngle;Qe.Utils.EQ(Math.abs(n-o),Qe.PIx2)&&(o=n),Math.abs(n)>Qe.PIx2&&(n-=Math.trunc(n/Qe.PIx2)*Qe.PIx2),n<0&&(n+=Qe.PIx2),Math.abs(o)>Qe.PIx2&&(o-=Math.trunc(o/Qe.PIx2)*Qe.PIx2),o<0&&(o+=Qe.PIx2);let i,r,s,a=n;this.counterClockwise?(r=Math.ceil(n/(Math.PI/2))%4,s=1):(r=Math.floor(n/(Math.PI/2))%4,s=-1);for(let c=0,l=r;c<4;c++,l=(l+s+4)%4){if(i=t[l],i===a)continue;let d=this.counterClockwise?i-n:n-i;if(d<0&&(d+=Qe.PIx2),d>this.sweep)break;e.push(new Qe.Arc(this.pc,this.r,a,i,this.counterClockwise)),a=i}return e.length===0?(e.push(this),e):(i=o,a!==i&&e.push(new Qe.Arc(this.pc,this.r,a,i,this.counterClockwise)),e)}tangentInStart(){let e=new Qe.Vector(this.pc,this.start),t=this.counterClockwise?Math.PI/2:-Math.PI/2;return e.rotate(t).normalize()}tangentInEnd(){let e=new Qe.Vector(this.pc,this.end),t=this.counterClockwise?-Math.PI/2:Math.PI/2;return e.rotate(t).normalize()}reverse(){return new Qe.Arc(this.pc,this.r,this.endAngle,this.startAngle,!this.counterClockwise)}transform(e=new Qe.Matrix){let t=this.start.transform(e),n=this.end.transform(e),o=this.pc.transform(e),i=this.counterClockwise;return e.a*e.d<0&&(i=!i),Qe.Arc.arcSE(o,t,n,i)}static arcSE(e,t,n,o){let{vector:i}=Qe,r=i(e,t).slope,s=i(e,n).slope;Qe.Utils.EQ(r,s)&&(s+=2*Math.PI,o=!0);let a=i(e,t).length;return new Qe.Arc(e,a,r,s,o)}definiteIntegral(e=0){return this.breakToFunctional().reduce((t,n)=>t+n.circularSegmentDefiniteIntegral(e),0)}circularSegmentDefiniteIntegral(e){let t=new Qe.Segment(this.start,this.end).definiteIntegral(e),n=Qe.Utils.EQ(this.sweep,Qe.PIx2)?0:this.circularSegmentArea();return this.counterClockwise?t-n:t+n}circularSegmentArea(){return 0.5*this.r*this.r*(this.sweep-Math.sin(this.sweep))}sortPoints(e){let{vector:t}=Qe;return e.slice().sort((n,o)=>{let i=t(this.pc,n).slope,r=t(this.pc,o).slope;return i<r?-1:i>r?1:0})}get name(){return"arc"}svg(e={}){let t=this.sweep<=Math.PI?"0":"1",n=this.counterClockwise?"1":"0";if(Qe.Utils.EQ(this.sweep,2*Math.PI))return new Qe.Circle(this.pc,this.r).svg(e);return`
<path d="M${this.start.x},${this.start.y}
A${this.r},${this.r} 0 ${t},${n} ${this.end.x},${this.end.y}"
${pL({fill:"none",...e})} />`}};Qe.Arc=RI;Qe.arc=(...e)=>new Qe.Arc(...e);var QLe=class e extends aT{constructor(t=void 0,n=void 0,o=void 0,i=void 0){super(),this.xmin=t,this.ymin=n,this.xmax=o,this.ymax=i}clone(){return new e(this.xmin,this.ymin,this.xmax,this.ymax)}get low(){return new Qe.Point(this.xmin,this.ymin)}get high(){return new Qe.Point(this.xmax,this.ymax)}get max(){return this.clone()}get center(){return new Qe.Point((this.xmin+this.xmax)/2,(this.ymin+this.ymax)/2)}get width(){return Math.abs(this.xmax-this.xmin)}get height(){return Math.abs(this.ymax-this.ymin)}get box(){return this.clone()}not_intersect(t){return this.xmax<t.xmin||this.xmin>t.xmax||this.ymax<t.ymin||this.ymin>t.ymax}intersect(t){return!this.not_intersect(t)}merge(t){return new e(this.xmin===void 0?t.xmin:Math.min(this.xmin,t.xmin),this.ymin===void 0?t.ymin:Math.min(this.ymin,t.ymin),this.xmax===void 0?t.xmax:Math.max(this.xmax,t.xmax),this.ymax===void 0?t.ymax:Math.max(this.ymax,t.ymax))}less_than(t){return!!this.low.lessThan(t.low)||!(!this.low.equalTo(t.low)||!this.high.lessThan(t.high))}equal_to(t){return this.low.equalTo(t.low)&&this.high.equalTo(t.high)}output(){return this.clone()}comparable_less_than(t,n){return t.lessThan(n)}set(t,n,o,i){this.xmin=t,this.ymin=n,this.xmax=o,this.ymax=i}extend(t){return t<=0?this.clone():new e(this.xmin-t,this.ymin-t,this.xmax+t,this.ymax+t)}toPoints(){return[new Qe.Point(this.xmin,this.ymin),new Qe.Point(this.xmax,this.ymin),new Qe.Point(this.xmax,this.ymax),new Qe.Point(this.xmin,this.ymax)]}toSegments(){let t=this.toPoints();return[new Qe.Segment(t[0],t[1]),new Qe.Segment(t[1],t[2]),new Qe.Segment(t[2],t[3]),new Qe.Segment(t[3],t[0])]}rotate(t,n=new Qe.Point){throw Wu.OPERATION_IS_NOT_SUPPORTED}transform(t=new Qe.Matrix){return this.toPoints().map((n)=>n.transform(t)).reduce((n,o)=>n.merge(o.box),new e)}contains(t){return t instanceof Qe.Point?t.x>=this.xmin&&t.x<=this.xmax&&t.y>=this.ymin&&t.y<=this.ymax:t instanceof Qe.Segment?t.vertices.every((n)=>this.contains(n)):t instanceof Qe.Box?t.toSegments().every((n)=>this.contains(n)):t instanceof Qe.Circle?this.contains(t.box):t instanceof Qe.Arc?t.vertices.every((n)=>this.contains(n))&&this.toSegments().every((n)=>qV(n,t).length===0):!(t instanceof Qe.Line||t instanceof Qe.Ray)&&(t instanceof Qe.Multiline?t.toShapes().every((n)=>this.contains(n)):t instanceof Qe.Polygon?this.contains(t.box):void 0)}distanceTo(t){let n=this.toSegments().map((i)=>i.distanceTo(t)),o=[Number.MAX_SAFE_INTEGER,null];return n.forEach((i)=>{i[0]<o[0]&&(o=i)}),o}get name(){return"box"}svg(t={}){let n=this.xmax-this.xmin,o=this.ymax-this.ymin;return`
<rect x="${this.xmin}" y="${this.ymin}" width="${n}" height="${o}"
${pL({fill:"none",...t})} />`}};Qe.Box=QLe;Qe.box=(...e)=>new Qe.Box(...e);Qe.Edge=class{constructor(e){this.shape=e,this.next=void 0,this.prev=void 0,this.face=void 0,this.arc_length=0,this.bvStart=void 0,this.bvEnd=void 0,this.bv=void 0,this.overlap=void 0}get start(){return this.shape.start}get end(){return this.shape.end}get length(){return this.shape.length}get box(){return this.shape.box}get isSegment(){return this.shape instanceof Qe.Segment}get isArc(){return this.shape instanceof Qe.Arc}get isLine(){return this.shape instanceof Qe.Line}get isRay(){return this.shape instanceof Qe.Ray}middle(){return this.shape.middle()}pointAtLength(e){return this.shape.pointAtLength(e)}contains(e){return this.shape.contains(e)}setInclusion(e){if(this.bv!==void 0)return this.bv;if(this.shape instanceof Qe.Line||this.shape instanceof Qe.Ray)return this.bv=Qe.OUTSIDE,this.bv;if(this.bvStart===void 0&&(this.bvStart=wee(e,this.start)),this.bvEnd===void 0&&(this.bvEnd=wee(e,this.end)),this.bvStart===Qe.OUTSIDE||this.bvEnd==Qe.OUTSIDE)this.bv=Qe.OUTSIDE;else if(this.bvStart===Qe.INSIDE||this.bvEnd==Qe.INSIDE)this.bv=Qe.INSIDE;else{let t=wee(e,this.middle());this.bv=t}return this.bv}setOverlap(e){let t,n=this.shape,o=e.shape;n instanceof Qe.Segment&&o instanceof Qe.Segment?n.start.equalTo(o.start)&&n.end.equalTo(o.end)?t=Qe.OVERLAP_SAME:n.start.equalTo(o.end)&&n.end.equalTo(o.start)&&(t=Qe.OVERLAP_OPPOSITE):(n instanceof Qe.Arc&&o instanceof Qe.Arc||n instanceof Qe.Segment&&o instanceof Qe.Arc||n instanceof Qe.Arc&&o instanceof Qe.Segment)&&(n.start.equalTo(o.start)&&n.end.equalTo(o.end)&&n.middle().equalTo(o.middle())?t=Qe.OVERLAP_SAME:n.start.equalTo(o.end)&&n.end.equalTo(o.start)&&n.middle().equalTo(o.middle())&&(t=Qe.OVERLAP_OPPOSITE)),this.overlap===void 0&&(this.overlap=t),e.overlap===void 0&&(e.overlap=t)}svg(){if(this.shape instanceof Qe.Segment)return` L${this.shape.end.x},${this.shape.end.y}`;if(this.shape instanceof Qe.Arc){let e,t=this.shape,n=t.counterClockwise?"1":"0";if(Qe.Utils.EQ(t.sweep,2*Math.PI)){let o=t.counterClockwise?1:-1,i=new Qe.Arc(t.pc,t.r,t.startAngle,t.startAngle+o*Math.PI,t.counterClockwise),r=new Qe.Arc(t.pc,t.r,t.startAngle+o*Math.PI,t.endAngle,t.counterClockwise);return e="0",` A${i.r},${i.r} 0 ${e},${n} ${i.end.x},${i.end.y}
A${r.r},${r.r} 0 ${e},${n} ${r.end.x},${r.end.y}`}return e=t.sweep<=Math.PI?"0":"1",` A${t.r},${t.r} 0 ${e},${n} ${t.end.x},${t.end.y}`}}toJSON(){return this.shape.toJSON()}};var XTo=class extends ELe{constructor(e,t){super(e,t),this.setCircularLinks()}setCircularLinks(){this.isEmpty()||(this.last.next=this.first,this.first.prev=this.last)}[Symbol.iterator](){let e;return{next:()=>{let t=e||this.first,n=!this.first||!!e&&e===this.first;return e=t?t.next:void 0,{value:t,done:n}}}}append(e){return super.append(e),this.setCircularLinks(),this}insert(e,t){return super.insert(e,t),this.setCircularLinks(),this}remove(e){return super.remove(e),this}};Qe.Face=class e extends XTo{constructor(t,...n){if(super(),this._box=void 0,this._orientation=void 0,n.length!==0){if(n.length===1){if(n[0]instanceof Array){let o=n[0];if(o.length===0)return;if(o.every((i)=>i instanceof Qe.Point)){let i=e.points2segments(o);this.shapes2face(t.edges,i)}else if(o.every((i)=>i instanceof Array&&i.length===2)){let i=o.map((s)=>new Qe.Point(s[0],s[1])),r=e.points2segments(i);this.shapes2face(t.edges,r)}else if(o.every((i)=>i instanceof Qe.Segment||i instanceof Qe.Arc))this.shapes2face(t.edges,o);else if(o.every((i)=>i.name==="segment"||i.name==="arc")){let i=[];for(let r of o){let s;s=r.name==="segment"?new Qe.Segment(r):new Qe.Arc(r),i.push(s)}this.shapes2face(t.edges,i)}}else if(n[0]instanceof e){let o=n[0];this.first=o.first,this.last=o.last;for(let i of o)t.edges.add(i)}else if(n[0]instanceof Qe.Circle)this.shapes2face(t.edges,[n[0].toArc(z8t)]);else if(n[0]instanceof Qe.Box){let o=n[0];this.shapes2face(t.edges,[new Qe.Segment(new Qe.Point(o.xmin,o.ymin),new Qe.Point(o.xmax,o.ymin)),new Qe.Segment(new Qe.Point(o.xmax,o.ymin),new Qe.Point(o.xmax,o.ymax)),new Qe.Segment(new Qe.Point(o.xmax,o.ymax),new Qe.Point(o.xmin,o.ymax)),new Qe.Segment(new Qe.Point(o.xmin,o.ymax),new Qe.Point(o.xmin,o.ymin))])}}n.length===2&&n[0]instanceof Qe.Edge&&n[1]instanceof Qe.Edge&&(this.first=n[0],this.last=n[1],this.last.next=this.first,this.first.prev=this.last,this.setArcLength())}}get edges(){return this.toArray()}get vertices(){return this.edges.map((t)=>t.shape.start.clone())}get shapes(){return this.edges.map((t)=>t.shape.clone())}get box(){if(this._box===void 0){let t=new Qe.Box;for(let n of this)t=t.merge(n.box);this._box=t}return this._box}get perimeter(){return this.last.arc_length+this.last.length}pointAtLength(t){if(t>this.perimeter||t<0)return null;let n=null;for(let o of this)if(t>=o.arc_length&&(o===this.last||t<o.next.arc_length)){n=o.pointAtLength(t-o.arc_length);break}return n}static points2segments(t){let n=[];for(let o=0;o<t.length;o++)t[o].equalTo(t[(o+1)%t.length])||n.push(new Qe.Segment(t[o],t[(o+1)%t.length]));return n}shapes2face(t,n){for(let o of n){let i=new Qe.Edge(o);this.append(i),t.add(i)}}append(t){return super.append(t),this.setOneEdgeArcLength(t),t.face=this,this}insert(t,n){return super.insert(t,n),this.setOneEdgeArcLength(t),t.face=this,this}remove(t){return super.remove(t),this.setArcLength(),this}merge_with_next_edge(t){return t.shape.end.x=t.next.shape.end.x,t.shape.end.y=t.next.shape.end.y,this.remove(t.next),this}reverse(){let t=[],n=this.last;do n.shape=n.shape.reverse(),t.push(n),n=n.prev;while(n!==this.last);this.first=void 0,this.last=void 0;for(let o of t)this.first===void 0?(o.prev=o,o.next=o,this.first=o,this.last=o):(o.prev=this.last,this.last.next=o,this.last=o,this.last.next=this.first,this.first.prev=this.last),this.setOneEdgeArcLength(o);this._orientation!==void 0&&(this._orientation=void 0,this._orientation=this.orientation())}setArcLength(){for(let t of this)this.setOneEdgeArcLength(t),t.face=this}setOneEdgeArcLength(t){t===this.first?t.arc_length=0:t.arc_length=t.prev.arc_length+t.prev.length}area(){return Math.abs(this.signedArea())}signedArea(){let t=0,n=this.box.ymin;for(let o of this)t+=o.shape.definiteIntegral(n);return t}orientation(){if(this._orientation===void 0){let t=this.signedArea();Qe.Utils.EQ_0(t)?this._orientation=vV.NOT_ORIENTABLE:Qe.Utils.LT(t,0)?this._orientation=vV.CCW:this._orientation=vV.CW}return this._orientation}isSimple(t){return e.getSelfIntersections(this,t,!0).length===0}static getSelfIntersections(t,n,o=!1){let i=[];for(let r of t){let s=n.search(r.box);for(let a of s){if(r===a)continue;if(a.face!==t)continue;if(r.shape instanceof Qe.Segment&&a.shape instanceof Qe.Segment&&(r.next===a||r.prev===a))continue;let c=r.shape.intersect(a.shape);for(let l of c)if((!l.equalTo(r.start)||!l.equalTo(a.end)||a!==r.prev)&&(!l.equalTo(r.end)||!l.equalTo(a.start)||a!==r.next)&&(i.push(l),o))break;if(i.length>0&&o)break}if(i.length>0&&o)break}return i}findEdgeByPoint(t){let n;for(let o of this)if(!t.equalTo(o.shape.start)&&(t.equalTo(o.shape.end)||o.shape.contains(t))){n=o;break}return n}toPolygon(){return new Qe.Polygon(this.shapes)}toJSON(){return this.edges.map((t)=>t.toJSON())}svg(){let t=`M${this.first.start.x},${this.first.start.y}`;for(let n of this)t+=n.svg();return t+=" z",t}};Qe.Ray=class e extends aT{constructor(...t){if(super(),this.pt=new Qe.Point,this.norm=new Qe.Vector(0,1),t.length!==0&&(t.length>=1&&t[0]instanceof Qe.Point&&(this.pt=t[0].clone()),t.length!==1)){if(!(t.length===2&&t[1]instanceof Qe.Vector))throw Wu.ILLEGAL_PARAMETERS;this.norm=t[1].clone()}}clone(){return new e(this.pt,this.norm)}get slope(){return new Qe.Vector(this.norm.y,-this.norm.x).slope}get box(){let t=this.slope;return new Qe.Box(t>Math.PI/2&&t<3*Math.PI/2?Number.NEGATIVE_INFINITY:this.pt.x,t>=0&&t<=Math.PI?this.pt.y:Number.NEGATIVE_INFINITY,t>=Math.PI/2&&t<=3*Math.PI/2?this.pt.x:Number.POSITIVE_INFINITY,t>=Math.PI&&t<=2*Math.PI||t===0?this.pt.y:Number.POSITIVE_INFINITY)}get start(){return this.pt}get end(){}get length(){return Number.POSITIVE_INFINITY}contains(t){if(this.pt.equalTo(t))return!0;let n=new Qe.Vector(this.pt,t);return Qe.Utils.EQ_0(this.norm.dot(n))&&Qe.Utils.GE(n.cross(this.norm),0)}coord(t){return dTt(t.x,t.y).cross(this.norm)}split(t){return this.contains(t)?this.pt.equalTo(t)?[this]:[new Qe.Segment(this.pt,t),new Qe.Ray(t,this.norm)]:[]}intersect(t){return t instanceof Qe.Point?this.contains(t)?[t]:[]:t instanceof Qe.Segment?TLe(this,t):t instanceof Qe.Arc?DLe(this,t):t instanceof Qe.Line?tTt(this,t):t instanceof Qe.Ray?(o=t,PU(O8(n=this),O8(o)).filter((s)=>n.contains(s)).filter((s)=>o.contains(s))):t instanceof Qe.Circle?eTt(this,t):t instanceof Qe.Box?(r=t,jV(O8(i=this),r).filter((s)=>i.contains(s))):t instanceof Qe.Polygon?nTt(this,t):t instanceof Qe.Multiline?vU(this,t):void 0;var n,o,i,r}rotate(t,n=new Qe.Point){return new Qe.Ray(this.pt.rotate(t,n),this.norm.rotate(t))}transform(t){return new Qe.Ray(this.pt.transform(t),this.norm.clone())}get name(){return"ray"}svg(t,n={}){let o=jV(new Qe.Line(this.pt,this.norm),t);return o=o.filter((i)=>this.contains(i)),o.length===0||o.length===2?"":new Qe.Segment(this.pt,o[0]).svg(n)}};Qe.ray=(...e)=>new Qe.Ray(...e);var GI=class e{constructor(){this.faces=new Qe.PlanarSet,this.edges=new Qe.PlanarSet;let t=[...arguments];if(t.length===1&&(t[0]instanceof Array&&t[0].length>0||t[0]instanceof Qe.Circle||t[0]instanceof Qe.Box)){let n=t[0];if(t[0]instanceof Array&&t[0].every((o)=>o instanceof Array))if(n.every((o)=>o instanceof Array&&o.length===2&&typeof o[0]=="number"&&typeof o[1]=="number"))this.faces.add(new Qe.Face(this,n));else for(let o of n)if(o instanceof Array&&o[0]instanceof Array&&o[0].every((i)=>i instanceof Array&&i.length===2&&typeof i[0]=="number"&&typeof i[1]=="number"))for(let i of o)this.faces.add(new Qe.Face(this,i));else this.faces.add(new Qe.Face(this,o));else this.faces.add(new Qe.Face(this,n))}}get box(){return[...this.faces].reduce((t,n)=>t.merge(n.box),new Qe.Box)}get vertices(){return[...this.faces].flatMap((t)=>t.vertices)}clone(){let t=new e;for(let n of this.faces)t.addFace(n.shapes);return t}createFromArray(t){let n=new e;return t.forEach((o)=>[...o.faces].forEach((i)=>n.addFace(i.shapes))),n}isEmpty(){return this.edges.size===0||this.faces.size===0}isValid(){let t=!0;for(let n of this.faces)if(!n.isSimple(this.edges)){t=!1;break}return t}area(){let t=[...this.faces].reduce((n,o)=>n+o.signedArea(),0);return Math.abs(t)}addFace(...t){let n=new Qe.Face(this,...t);return this.faces.add(n),n}deleteFace(t){for(let n of t)this.edges.delete(n);return this.faces.delete(t)}recreateFaces(){this.faces.clear();for(let o of this.edges)o.face=null;let t,n=!0;for(;n;){n=!1;for(let o of this.edges)if(o.face===null){t=o,n=!0;break}if(n){let o=t;do o=o.next;while(o.next!==t);this.addFace(t,o)}}}removeChain(t,n,o){if(o.next!==n){for(let i=n;i!==o.next;i=i.next)if(t.remove(i),this.edges.delete(i),t.isEmpty()){this.deleteFace(t);break}}else this.deleteFace(t)}addVertex(t,n){let o=n.shape.split(t);if(o[0]===null)return n.prev;if(o[1]===null)return n;let i=new Qe.Edge(o[0]),r=n.prev;return n.face.insert(i,r),this.edges.delete(n),this.edges.add(i),n.shape=o[1],this.edges.add(n),i}removeEndVertex(t){let n=t.next;n!==t&&(t.face.merge_with_next_edge(t),this.edges.delete(n))}cut(t){let n=this.splitToIslands().flatMap((o)=>o._cutSingleIsland(t)).filter((o)=>o.isValid()&&o.isEmpty()===!1);return this.createFromArray(n)}_cutSingleIsland(t){let n=this.clone(),o=t.clone(),i,r,s={int_points1:[],int_points2:[],int_points1_sorted:[],int_points2_sorted:[]};for(let a of o.edges)for(let c of n.edges){let l=$8t(a,c);for(let d of l)JV(a,d,s.int_points1),JV(c,d,s.int_points2)}if(s.int_points1.length===0)return n;s.int_points1_sorted=E8(s.int_points1),s.int_points2_sorted=E8(s.int_points2),ZV(o,s.int_points1_sorted),ZV(n,s.int_points2_sorted),NLe(s),s.int_points1_sorted=E8(s.int_points1),s.int_points2_sorted=E8(s.int_points2),URe(s.int_points1),WRe(s.int_points1,n);for(let a of s.int_points1_sorted)a.edge_before&&a.edge_after&&a.edge_before.bv===a.edge_after.bv&&(s.int_points2[a.id]=-1,a.id=-1);if(s.int_points1=s.int_points1.filter((a)=>a.id>=0),s.int_points2=s.int_points2.filter((a)=>a.id>=0),s.int_points1.forEach((a,c)=>{a.id=c}),s.int_points2.forEach((a,c)=>{a.id=c}),s.int_points1.length===0)return n;s.int_points1_sorted=E8(s.int_points1),s.int_points2_sorted=E8(s.int_points2);for(let a=1;a<s.int_points1_sorted.length;a++)if(r=s.int_points1_sorted[a],i=s.int_points1_sorted[a-1],r.edge_before&&r.edge_before.bv===1){let c=i.edge_after,l=r.edge_before,d=o.getChain(c,l);qPt(s.int_points2[i.id],s.int_points2[r.id],d),d.forEach((u)=>n.edges.add(u)),d=d.reverse().map((u)=>new Qe.Edge(u.shape.reverse()));for(let u=0;u<d.length-1;u++)d[u].next=d[u+1],d[u+1].prev=d[u];qPt(s.int_points2[r.id],s.int_points2[i.id],d),d.forEach((u)=>n.edges.add(u))}return n.recreateFaces(),n}cutWithLine(t){let n=new Lk([t]);return this.cut(n)}findEdgeByPoint(t){let n;for(let o of this.faces)if(n=o.findEdgeByPoint(t),n!==void 0)break;return n}splitToIslands(){if(this.isEmpty())return[];let t=this.toArray();t.sort((i,r)=>r.area()-i.area());let n=[...t[0].faces][0].orientation(),o=t.filter((i)=>[...i.faces][0].orientation()===n);for(let i of t){let r=[...i.faces][0];if(r.orientation()!==n){for(let s of o)if(r.shapes.every((a)=>s.contains(a))){s.addFace(r.shapes);break}}}return o}rearrange(){if(this.faces.size<=1)return this.clone();let t=this.splitToIslands(),n=new e;return t.forEach((o)=>{o.faces.forEach((i)=>n.addFace(i.shapes))}),n}orientation(){return this.isEmpty()?vV.NOT_ORIENTABLE:[...this.faces][0].orientation()}isOuter(t){return t.orientation()===this.orientation()}isMultiPolygon(){let t=0;return this.faces.forEach((n)=>{this.isOuter(n)&&t++}),t>1}reverse(){for(let t of this.faces)t.reverse();return this}contains(t){if(t instanceof Qe.Point){let n=wee(this,t);return n===1||n===2}return lTt(this,t)}distanceTo(t){if(t instanceof Qe.Point){let[n,o]=Qe.Distance.point2polygon(t,this);return o=o.reverse(),[n,o]}if(t instanceof Qe.Circle||t instanceof Qe.Line||t instanceof Qe.Segment||t instanceof Qe.Arc){let[n,o]=Qe.Distance.shape2polygon(t,this);return o=o.reverse(),[n,o]}if(t instanceof Qe.Box)return this.distanceTo(new Qe.Polygon(t));if(t instanceof Qe.Polygon){let n,o,i=[Number.POSITIVE_INFINITY,new Qe.Segment];for(let r of this.edges){let s=i[0];[n,o]=Qe.Distance.shape2planarSet(r.shape,t.edges,s),Qe.Utils.LT(n,s)&&(i=[n,o])}return i}}intersect(t){return t instanceof Qe.Point?this.contains(t)?[t]:[]:t instanceof Qe.Line?Yte(t,this):t instanceof Qe.Ray?nTt(t,this):t instanceof Qe.Circle?J8t(t,this):t instanceof Qe.Segment?BLe(t,this):t instanceof Qe.Arc?wLe(t,this):t instanceof Qe.Polygon?function(n,o){let i=[];if(n.isEmpty()||o.isEmpty())return i;if(n.box.not_intersect(o.box))return i;for(let r of n.edges)i=[...i,...jPt(r,o)];return i}(t,this):t instanceof Qe.Multiline?function(n,o){let i=[];if(o.isEmpty()||n.size===0)return i;for(let r of n)i=[...i,...jPt(r,o)];return i}(t,this):void 0}translate(t){let n=new e;for(let o of this.faces)n.addFace(o.shapes.map((i)=>i.translate(t)));return n}rotate(t=0,n=new Qe.Point){let o=new e;for(let i of this.faces)o.addFace(i.shapes.map((r)=>r.rotate(t,n)));return o}scale(t,n){let o=new e;for(let i of this.faces)o.addFace(i.shapes.map((r)=>r.scale(t,n)));return o}transform(t=new Qe.Matrix){let n=new e;for(let o of this.faces)n.addFace(o.shapes.map((i)=>i.transform(t)));return n}toJSON(){return[...this.faces].map((t)=>t.toJSON())}toArray(){return[...this.faces].map((t)=>t.toPolygon())}dpath(){return[...this.faces].reduce((t,n)=>t+n.svg(),"")}svg(t={}){let n=`
<path ${pL({fillRule:"evenodd",fill:"lightcyan",...t})} d="`;for(let o of this.faces)n+=`
${o.svg()}`;return n+=`" >
</path>`,n}};Qe.Polygon=GI;Qe.polygon=(...e)=>new Qe.Polygon(...e);var{Circle:QDe,Line:svt,Point:avt,Vector:rAe,Utils:kDe}=Qe;Qe.Inversion=class e{constructor(t){this.circle=t}get inversion_circle(){return this.circle}static inversePoint(t,n){let o=new rAe(t.pc,n),i=t.r*t.r,r=o.dot(o);return kDe.EQ_0(r)?new avt(Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY):t.pc.translate(o.multiply(i/r))}static inverseCircle(t,n){let o=t.pc.distanceTo(n.pc)[0];if(kDe.EQ(o,n.r)){let i=t.r*t.r/(2*n.r),r=new rAe(t.pc,n.pc);r=r.normalize();let s=t.pc.translate(r.multiply(i));return new svt(s,r)}{let i=new rAe(t.pc,n.pc),r=t.r*t.r/(i.dot(i)-n.r*n.r),s=t.pc.translate(i.multiply(r)),a=Math.abs(r)*n.r;return new QDe(s,a)}}static inverseLine(t,n){let[o,i]=t.pc.distanceTo(n);if(kDe.EQ_0(o))return n.clone();{let r=t.r*t.r/(2*o),s=new rAe(t.pc,i.end);return s=s.multiply(r/o),new QDe(t.pc.translate(s),r)}}inverse(t){return t instanceof avt?e.inversePoint(this.circle,t):t instanceof QDe?e.inverseCircle(this.circle,t):t instanceof svt?e.inverseLine(this.circle,t):void 0}};Qe.inversion=(e)=>new Qe.Inversion(e);Qe.Distance=class e{static point2point(t,n){return t.distanceTo(n)}static point2line(t,n){let o=t.projectionOn(n);return[new Qe.Vector(t,o).length,new Qe.Segment(t,o)]}static point2circle(t,n){let[o,i]=t.distanceTo(n.center);if(Qe.Utils.EQ_0(o))return[n.r,new Qe.Segment(t,n.toArc().start)];{let r=Math.abs(o-n.r),s=new Qe.Vector(n.pc,t).normalize().multiply(n.r),a=n.pc.translate(s);return[r,new Qe.Segment(t,a)]}}static point2segment(t,n){if(n.start.equalTo(n.end))return e.point2point(t,n.start);let o,i,r=new Qe.Vector(n.start,n.end),s=new Qe.Vector(n.start,t),a=new Qe.Vector(n.end,t),c=r.dot(s),l=-r.dot(a);if(Qe.Utils.GE(c,0)&&Qe.Utils.GE(l,0)){let d=n.tangentInStart();return o=Math.abs(d.cross(s)),i=n.start.translate(d.multiply(d.dot(s))),[o,new Qe.Segment(t,i)]}return c<0?t.distanceTo(n.start):t.distanceTo(n.end)}static point2arc(t,n){let o,i,r=new Qe.Circle(n.pc,n.r),s=[];return[o,i]=e.point2circle(t,r),i.end.on(n)&&s.push(e.point2circle(t,r)),s.push(e.point2point(t,n.start)),s.push(e.point2point(t,n.end)),e.sort(s),s[0]}static point2edge(t,n){return n.shape instanceof Qe.Segment?e.point2segment(t,n.shape):e.point2arc(t,n.shape)}static segment2line(t,n){let o=t.intersect(n);if(o.length>0)return[0,new Qe.Segment(o[0],o[0])];let i=[];return i.push(e.point2line(t.start,n)),i.push(e.point2line(t.end,n)),e.sort(i),i[0]}static segment2segment(t,n){let o=q_e(t,n);if(o.length>0)return[0,new Qe.Segment(o[0],o[0])];let i,r,s=[];return[i,r]=e.point2segment(n.start,t),s.push([i,r.reverse()]),[i,r]=e.point2segment(n.end,t),s.push([i,r.reverse()]),s.push(e.point2segment(t.start,n)),s.push(e.point2segment(t.end,n)),e.sort(s),s[0]}static segment2circle(t,n){let o=t.intersect(n);if(o.length>0)return[0,new Qe.Segment(o[0],o[0])];let i=new Qe.Line(t.ps,t.pe),[r,s]=e.point2line(n.center,i);if(Qe.Utils.GE(r,n.r)&&s.end.on(t))return e.point2circle(s.end,n);{let[a,c]=e.point2circle(t.start,n),[l,d]=e.point2circle(t.end,n);return Qe.Utils.LT(a,l)?[a,c]:[l,d]}}static segment2arc(t,n){let o=t.intersect(n);if(o.length>0)return[0,new Qe.Segment(o[0],o[0])];let i=new Qe.Line(t.ps,t.pe),r=new Qe.Circle(n.pc,n.r),[s,a]=e.point2line(r.center,i);if(Qe.Utils.GE(s,r.r)&&a.end.on(t)){let[u,h]=e.point2circle(a.end,r);if(h.end.on(n))return[u,h]}let c,l,d=[];return d.push(e.point2arc(t.start,n)),d.push(e.point2arc(t.end,n)),[c,l]=e.point2segment(n.start,t),d.push([c,l.reverse()]),[c,l]=e.point2segment(n.end,t),d.push([c,l.reverse()]),e.sort(d),d[0]}static circle2circle(t,n){let o=t.intersect(n);if(o.length>0)return[0,new Qe.Segment(o[0],o[0])];if(t.center.equalTo(n.center)){let i=t.toArc(),r=n.toArc();return e.point2point(i.start,r.start)}{let i=new Qe.Line(t.center,n.center),r=i.intersect(t),s=i.intersect(n),a=[];return a.push(e.point2point(r[0],s[0])),a.push(e.point2point(r[0],s[1])),a.push(e.point2point(r[1],s[0])),a.push(e.point2point(r[1],s[1])),e.sort(a),a[0]}}static circle2line(t,n){let o=t.intersect(n);if(o.length>0)return[0,new Qe.Segment(o[0],o[0])];let[i,r]=e.point2line(t.center,n),[s,a]=e.point2circle(r.end,t);return a=a.reverse(),[s,a]}static arc2line(t,n){let o=n.intersect(t);if(o.length>0)return[0,new Qe.Segment(o[0],o[0])];let i=new Qe.Circle(t.center,t.r),[r,s]=e.point2line(i.center,n);if(!Qe.Utils.GE(r,i.r)){let a=[];return a.push(e.point2line(t.start,n)),a.push(e.point2line(t.end,n)),e.sort(a),a[0]}{let[a,c]=e.point2circle(s.end,i);if(c.end.on(t))return[a,c]}}static arc2circle(t,n){let o=t.intersect(n);if(o.length>0)return[0,new Qe.Segment(o[0],o[0])];let i=new Qe.Circle(t.center,t.r),[r,s]=e.circle2circle(i,n);if(s.start.on(t))return[r,s];{let a=[];return a.push(e.point2circle(t.start,n)),a.push(e.point2circle(t.end,n)),e.sort(a),a[0]}}static arc2arc(t,n){let o=t.intersect(n);if(o.length>0)return[0,new Qe.Segment(o[0],o[0])];let i=new Qe.Circle(t.center,t.r),r=new Qe.Circle(n.center,n.r),[s,a]=e.circle2circle(i,r);if(a.start.on(t)&&a.end.on(n))return[s,a];{let c,l,d=[];return[c,l]=e.point2arc(t.start,n),l.end.on(n)&&d.push([c,l]),[c,l]=e.point2arc(t.end,n),l.end.on(n)&&d.push([c,l]),[c,l]=e.point2arc(n.start,t),l.end.on(t)&&d.push([c,l.reverse()]),[c,l]=e.point2arc(n.end,t),l.end.on(t)&&d.push([c,l.reverse()]),[c,l]=e.point2point(t.start,n.start),d.push([c,l]),[c,l]=e.point2point(t.start,n.end),d.push([c,l]),[c,l]=e.point2point(t.end,n.start),d.push([c,l]),[c,l]=e.point2point(t.end,n.end),d.push([c,l]),e.sort(d),d[0]}}static point2polygon(t,n){let o=[Number.POSITIVE_INFINITY,new Qe.Segment];for(let i of n.edges){let[r,s]=e.point2edge(t,i);Qe.Utils.LT(r,o[0])&&(o=[r,s])}return o}static shape2polygon(t,n){let o=[Number.POSITIVE_INFINITY,new Qe.Segment];for(let i of n.edges){let[r,s]=t.distanceTo(i.shape);Qe.Utils.LT(r,o[0])&&(o=[r,s])}return o}static polygon2polygon(t,n){let o=[Number.POSITIVE_INFINITY,new Qe.Segment];for(let i of t.edges)for(let r of n.edges){let[s,a]=i.shape.distanceTo(r.shape);Qe.Utils.LT(s,o[0])&&(o=[s,a])}return o}static box2box_minmax(t,n){let o=Math.max(Math.max(t.xmin-n.xmax,0),Math.max(n.xmin-t.xmax,0)),i=Math.max(Math.max(t.ymin-n.ymax,0),Math.max(n.ymin-t.ymax,0)),r=o*o+i*i,s=t.merge(n),a=s.xmax-s.xmin,c=s.ymax-s.ymin;return[r,a*a+c*c]}static minmax_tree_process_level(t,n,o,i){let r,s;for(let c of n){[r,s]=e.box2box_minmax(t.box,c.item.key);for(let l of c.item.values)l instanceof Qe.Edge?i.insert([r,s],l.shape):i.insert([r,s],l);Qe.Utils.LT(s,o)&&(o=s)}if(n.length===0)return o;let a=[...n.map((c)=>c.left.isNil()?void 0:c.left).filter((c)=>c!==void 0),...n.map((c)=>c.right.isNil()?void 0:c.right).filter((c)=>c!==void 0)].filter((c)=>{let[l,d]=e.box2box_minmax(t.box,c.max);return Qe.Utils.LE(l,o)});return o=e.minmax_tree_process_level(t,a,o,i)}static minmax_tree(t,n,o){let i=new ZRe,r=[n.index.root],s=o<Number.POSITIVE_INFINITY?o*o:Number.POSITIVE_INFINITY;return s=e.minmax_tree_process_level(t,r,s,i),i}static minmax_tree_calc_distance(t,n,o){let i,r;if(n!=null&&!n.isNil()){if([i,r]=e.minmax_tree_calc_distance(t,n.left,o),r)return[i,r];if(Qe.Utils.LT(i[0],Math.sqrt(n.item.key.low)))return[i,!0];let[s,a]=e.distanceToArray(t,n.item.values);return Qe.Utils.LT(s,i[0])&&(i=[s,a]),[i,r]=e.minmax_tree_calc_distance(t,n.right,i),[i,r]}return[o,!1]}static shape2planarSet(t,n,o=Number.POSITIVE_INFINITY){let i=[o,new Qe.Segment],r=!1;if(n instanceof Qe.PlanarSet){let s=e.minmax_tree(t,n,o);[i,r]=e.minmax_tree_calc_distance(t,s.root,i)}return i}static sort(t){t.sort((n,o)=>Qe.Utils.LT(n[0],o[0])?-1:Qe.Utils.GT(n[0],o[0])?1:0)}static distance(t,n){return t.distanceTo(n)}static distanceToArray(t,n){let o=[Number.POSITIVE_INFINITY,new Qe.Segment];for(let i of n){let[r,s]=t.distanceTo(i);Qe.Utils.LT(r,o[0])&&(o=[r,s])}return o}static shape2multiline(t,n){let o=[Number.POSITIVE_INFINITY,new Qe.Segment];for(let i of n){let[r,s]=e.distance(t,i.shape);Qe.Utils.LT(r,o[0])&&(o=[r,s])}return o}static multiline2multiline(t,n){let o=[Number.POSITIVE_INFINITY,new Qe.Segment];for(let i of t)for(let r of n){let[s,a]=e.distance(i.shape,r.shape);Qe.Utils.LT(s,o[0])&&(o=[s,a])}return o}};var{Multiline:KTo,Point:uTt,Segment:jTo,Polygon:hTt}=Qe;function eQe(e){return new uTt(e.split(" ").map(Number))}function mTt(e){return e.split(", ").map(eQe)}function LDe(e){let t=mTt(e),n=[];for(let o=0;o<t.length-1;o++)n.push(new jTo(t[o],t[o+1]));return new KTo(n)}function cvt(e){let t=e.replace(/\(\(/,"").replace(/\)\)$/,"").split("), ("),n=new hTt,o;return t.forEach((i,r)=>{let s=i.split(", ").map((c)=>new uTt(c.split(" ").map(Number))),a=n.addFace(s);r===0?o=a.orientation():a.orientation()===o&&a.reverse()}),n}function qTo(e){if(e.startsWith("POLYGON"))return cvt(e.replace(/^POLYGON /,""));return function(t){let n=t.split(/\)\), \(\(/).map((i)=>"(("+i+"))").map(cvt),o=new hTt;return n.reduce((i,r)=>[...i,...r?.faces],[]).forEach((i)=>o.addFace([...i?.shapes])),o}(e.replace(/^MULTIPOLYGON \(\(\((.*)\)\)\)$/,"$1"))}function lvt(e){return e.split(`
`)?.every((t)=>t.includes("POINT"))}function dvt(e){return e.split(`
`)?.every((t)=>t.includes("LINESTRING"))}Qe.isWktString=function(e){return e.startsWith("POINT")||lvt(e)||e.startsWith("LINESTRING")||dvt(e)||e.startsWith("MULTILINESTRING")||e.startsWith("POLYGON")||e.startsWith("MULTIPOINT")||e.startsWith("MULTIPOLYGON")||e.startsWith("GEOMETRYCOLLECTION")},Qe.parseWKT=function e(t){if(t.startsWith("POINT"))return eQe(t.replace(/^POINT \(/,"").replace(/\)$/,""));if(t.startsWith("MULTIPOINT"))return mTt(t.replace(/^MULTIPOINT \(/,"").replace(/\)$/,""));if(t.startsWith("LINESTRING"))return LDe(t.replace(/^LINESTRING \(/,"").replace(/\)$/,""));if(t.startsWith("MULTILINESTRING"))return function(n){return n.replace(/\(\(/,"").replace(/\)\)$/,"").split("), (").map(LDe)}(t.replace(/^MULTILINESTRING /,""));if(t.startsWith("POLYGON")||t.startsWith("MULTIPOLYGON"))return qTo(t);if(t.startsWith("GEOMETRYCOLLECTION")){let n=/(?<type>POINT|LINESTRING|POLYGON|MULTIPOINT|MULTILINESTRING|MULTIPOLYGON) \((?:[^\(\)]|\([^\)]*\))*\)/g,o=t.match(n);return o[0].startsWith("GEOMETRYCOLLECTION")&&(o[0]=o[0].replace("GEOMETRYCOLLECTION (","")),o.map(e).map((i)=>i instanceof Array?i:[i]).reduce((i,r)=>[...i,...r],[])}return lvt(t)?function(n){return n.split(`
`).map((o)=>o.match(/\(([^)]+)\)/)[1]).map(eQe)}(t):dvt(t)?function(n){return n.split(`
`).map((o)=>o.match(/\(([^)]+)\)/)[1]).map(LDe).reduce((o,i)=>[...o,...i],[])}(t):[]},Qe.BooleanOperations=$Re,Qe.Relations=OTo;var uvt=[0,1,-1,2,-2,3,-3,4],Vzr=(uvt.flatMap((e)=>uvt.map((t)=>[e,t])).sort(([e,t],[n,o])=>Math.abs(e)+Math.abs(t)-Math.abs(n)-Math.abs(o)).length,[0.2,0.4,0.8,1.2].flatMap((e)=>[0.2,0.3,0.45,0.6].flatMap((t)=>[-1,1].map((n)=>({halfSpan:e,offset:t,directionSign:n})))).flatMap((e)=>[0,1].map((t)=>({kind:"segment",routeSide:t,...e}))));[1,-1].flatMap((e)=>[1,-1].flatMap((t)=>[!1,!0].flatMap((n)=>[0,1].map((o)=>({routeSide:o,normalDirectionSign:e,tangentDirectionSign:t,reverseEndpointOffsets:n}))))),[0,1].map((e)=>({kind:"displacementChain",routeSide:e})),[-1,1].flatMap((e)=>[0,1].map((t)=>({kind:"segment",routeSide:t,halfSpan:0.4,offset:1.2,directionSign:e}))),[-1,1].flatMap((e)=>[0,1].map((t)=>({kind:"span",routeSide:t,spanExpansion:3,offset:1.8,directionSign:e}))),[{dx:-2.4,dy:-0.4},{dx:-2.4,dy:0.4},{dx:2.4,dy:-0.4},{dx:2.4,dy:0.4},{dx:-0.4,dy:-2.4},{dx:-0.4,dy:2.4},{dx:0.4,dy:-2.4},{dx:0.4,dy:2.4}].flatMap((e)=>[0,1].map((t)=>({kind:"waypoint",routeSide:t,spanExpansion:2,...e}))),[{dx:-0.17,dy:0},{dx:0.17,dy:0},{dx:0,dy:-0.17},{dx:0,dy:0.17}].flatMap((e)=>[0,1].map((t)=>({kind:"waypoint",routeSide:t,spanExpansion:0,...e})));function rfe(e){if(e.isNonPlatedHole&&e.shape==="circle")return{type:"oval",a:{x:0,y:0},b:{x:0,y:0},radius:e.width/2};if(e.type==="rect")return{type:"rect",bounds:{minX:-e.width/2,maxX:e.width/2,minY:-e.height/2,maxY:e.height/2}};if(e.type!=="oval")throw Error("repair04 found an unsupported obstacle shape");let t=Math.abs(e.width-e.height)/2,n=e.width>=e.height?t:0,o=e.height>e.width?t:0;return{type:"oval",a:{x:-n,y:-o},b:{x:n,y:o},radius:Math.min(e.width,e.height)/2}}function eU(e,t,n){return n.type==="rect"?dL(e,t,n.bounds):Math.max(0,Um(e,t,n.a,n.b)-n.radius)}var sfe=(e,t)=>{let n=new Map,o=(r)=>{let s=n.get(r);if(s===void 0)return n.set(r,r),r;if(s===r)return r;let a=o(s);return n.set(r,a),a},i=(r)=>{let s=r.filter((c)=>typeof c=="string"&&c.length>0);if(s.length===0)return;let a=o(s[0]);for(let c of s)n.set(o(c),a)};for(let r of e.connections){let s=r;i([s.name,s.rootConnectionName,s.netConnectionName,s.__netConnectionName,...s.mergedConnectionNames??[],...s.__rootConnectionNames??[],...s.pointsToConnect.flatMap((a)=>[a.pointId,a.pcb_port_id])])}for(let r of e.obstacles)i(r.connectedTo);for(let r of t)i([r.connectionName,r.rootConnectionName]);for(let r of n.keys())n.set(r,o(r));return n},JTo=(e,t)=>{let n=e.__zLayers;if(n)return new Set(n);if(e.zLayers)return new Set(e.zLayers);let o=new Set;for(let i of e.layers){let r=i==="top"?0:i==="bottom"?t-1:/^inner\d+$/.test(i)?Number(i.slice(5)):-1;if(r<0||r>=t)throw Error(`repair04 obstacle has an unknown layer: ${i}`);o.add(r)}return o},$To=({srj:e,routes:t,traceClearance:n=0.1,viaClearance:o=0.1})=>{let i,r=new Map,s=[],a=!1;return(c)=>{let l=i??=sfe(e,t),d=new Map,u=a?s:function*(h){for(let A=0;A<e.obstacles.length;A++){if(r.has(A)){let F=r.get(A);F&&(yield F);continue}let m=e.obstacles[A],p=m.connectedTo.some((F)=>/^(pcb_smtpad_|pcb_plated_hole_|pcb_port_)/.test(F)),g=Math.abs((m.ccwRotationDegrees??0)%180)>0.00000001,_=m.type==="rect"&&m.layers.length>1&&Math.abs(m.width-m.height)<0.001;if(p&&!g&&!_){r.set(A,null);continue}if(![m.center.x,m.center.y,m.width,m.height,m.ccwRotationDegrees??0].every(Number.isFinite)||m.width<0||m.height<0)throw Error("repair04 fixed obstacle geometry must be finite and nonnegative");let f=JTo(m,e.layerCount),y=new Set(m.connectedTo.map((F)=>h.get(F)??F)),x=rfe(m),C=(m.ccwRotationDegrees??0)*Math.PI/180,I=Math.cos(C),b=Math.sin(C),P=Math.hypot(m.width,m.height)/2,E=(F)=>{let H=F.x-m.center.x,z=F.y-m.center.y;return{x:H*I+z*b,y:-H*b+z*I}},B=(F,H,z)=>Math.max(F.x,H.x)+z<m.center.x-P||Math.min(F.x,H.x)-z>m.center.x+P||Math.max(F.y,H.y)+z<m.center.y-P||Math.min(F.y,H.y)-z>m.center.y+P,w=m.obstacleId?.startsWith("repair04_board_edge_")===!0,T=w?0:m.isNonPlatedHole&&e.minTraceToHoleEdgeClearance!==void 0?e.minTraceToHoleEdgeClearance:Math.max(n,e.defaultObstacleMargin??0,e.minTraceToPadEdgeClearance??0),Q=w?0:Math.max(o,e.defaultObstacleMargin??0,e.minViaEdgeToPadEdgeClearance??0),N={obstacleIndex:A,obstacle:m,zLayers:f,obstacleNets:y,shape:x,toLocal:E,separated:B,wireGap:T,viaGap:Q};r.set(A,N),s.push(N),yield N}a=!0}(l);for(let{obstacleIndex:h,obstacle:A,zLayers:m,obstacleNets:p,shape:g,toLocal:_,separated:f,wireGap:y,viaGap:x}of u)for(let C=0;C<c.length;C+=1){let I=c[C];if(!(I.route.length<2)&&![I.connectionName,I.rootConnectionName].some((b)=>b!==void 0&&p.has(l.get(b)??b)))for(let b=1;b<I.route.length;b+=1){let P=I.route[b-1],E=I.route[b];if(P.toNextSegmentType==="through_obstacle")continue;if(P.z!==E.z){let Q=Kk(e,P,E);if(!Array.from(m).some((Y)=>Y>=Q.minZ&&Y<=Q.maxZ))continue;if(Math.abs(P.x-E.x)>0.00000001||Math.abs(P.y-E.y)>0.00000001)throw Error("repair04 found a non-colocated via transition");if(f(P,P,I.viaDiameter/2+x+0.00000001))continue;let N=_(P),F=eU(N,N,g),H=I.viaDiameter/2+x-F;if(H<=0.00000001)continue;let z=`fixed-obstacle:${C}:${h}:via`;(d.get(z)?.severity??-1/0)<H&&d.set(z,{key:z,center:{x:P.x,y:P.y},routeIndex:C,obstacleIndex:h,kind:"via",severity:H});continue}if(!m.has(P.z))continue;let B=Math.max(P.traceThickness??I.traceThickness,E.traceThickness??I.traceThickness)/2;if(f(P,E,B+y+0.00000001))continue;let w=B+y-eU(_(P),_(E),g);if(w<=0.00000001)continue;let T=`fixed-obstacle:${C}:${h}:wire`;(d.get(T)?.severity??-1/0)<w&&d.set(T,{key:T,center:im(A.center,P,E),routeIndex:C,obstacleIndex:h,kind:"wire",severity:w})}}return Array.from(d.values())}},Zk=(e)=>$To(e)(e.routes),hvt=(e,t)=>{let n=[];for(let o=1;o<e.route.length;o++){let i=e.route[o-1],r=e.route[o];if(i.z===r.z||i.toNextSegmentType==="through_obstacle")continue;if(i.x!==r.x||i.y!==r.y||![i.x,i.y,i.z,r.z,e.viaDiameter].every(Number.isFinite)||!Number.isInteger(i.z)||!Number.isInteger(r.z)||Math.min(i.z,r.z)<0||Math.max(i.z,r.z)>=t||e.viaDiameter<=0)throw Error("repair04 new-via guard requires valid colocated vias");let s=o-1,a=[i.z,r.z],c=Math.min(i.z,r.z),l=Math.max(i.z,r.z);for(;o+1<e.route.length&&e.route[o].toNextSegmentType!=="through_obstacle";){let d=e.route[o+1];if(d.x!==r.x||d.y!==r.y)break;if(!Number.isInteger(d.z)||d.z<0||d.z>=t)throw Error("repair04 new-via guard found an invalid layer span");d.z!==a.at(-1)&&a.push(d.z),c=Math.min(c,d.z),l=Math.max(l,d.z),o++}n.push({pointIndices:Array.from({length:o-s+1},(d,u)=>s+u),layerSequence:a,x:r.x,y:r.y,minZ:c,maxZ:l,diameter:e.viaDiameter,identity:JSON.stringify([r.x,r.y,c,l,e.viaDiameter])})}return n},kLe=(e)=>(({srj:t,viaClearance:n=0.1})=>{let o=new Map,i=new Map,r=[n,t.defaultObstacleMargin??0,t.minViaEdgeToPadEdgeClearance??0],s=Math.max(...r),a=jke(t,n,!0),c,l=[],d=(u)=>{let h=i.get(u.identity);if(h)return h;let A=[],m=Kk(t,{z:u.minZ},{z:u.maxZ});for(let p=0;p<t.obstacles.length;p++){let g=t.obstacles[p],_=o.get(p);if(!_){let E=g.__zLayers??g.zLayers??g.layers.map((B)=>B==="top"?0:B==="bottom"?t.layerCount-1:/^inner\d+$/.test(B)?Number(B.slice(5)):-1);if(E.some((B)=>!Number.isInteger(B)||B<0||B>=t.layerCount))throw Error("repair04 new-via guard found an unknown obstacle layer");_={zs:E},o.set(p,_)}if(!_.zs.some((E)=>E>=m.minZ&&E<=m.maxZ))continue;if(!_.geometry){if(![g.center.x,g.center.y,g.width,g.height,g.ccwRotationDegrees??0].every(Number.isFinite)||g.width<0||g.height<0)throw Error("repair04 new-via guard found invalid obstacle geometry");let E=(g.ccwRotationDegrees??0)*Math.PI/180;_.geometry={x:g.center.x,y:g.center.y,cosine:Math.cos(E),sine:Math.sin(E),extent:Math.hypot(g.width,g.height)/2,shape:rfe(g)}}let f=_.geometry,y=f.extent+u.diameter/2+s+0.00000001;if(Math.abs(u.x-f.x)>y||Math.abs(u.y-f.y)>y)continue;let x=u.x-f.x,C=u.y-f.y,I={x:x*f.cosine+C*f.sine,y:-x*f.sine+C*f.cosine},b=eU(I,I,f.shape),P=u.diameter/2+s-b;P<=0.00000001||A.push({obstacleIndex:p,severity:P})}return i.set(u.identity,A),A};return({previousRoutes:u,routes:h,includeExistingVias:A=[]})=>{if(u.length!==h.length)throw Error("repair04 new-via guard requires matching route ordering");if(r.some((p)=>!Number.isFinite(p)||p<0))throw Error("repair04 new-via guard requires nonnegative finite margins");let m=[];c&&l.length===h.length&&!l.some((p,g)=>p.connectionName!==h[g].connectionName||p.rootConnectionName!==h[g].rootConnectionName)||(c=sfe(t,h),l=h.map((p)=>({connectionName:p.connectionName,rootConnectionName:p.rootConnectionName})));for(let p=0;p<h.length;p++){let g=h[p],_=u[p],f=c.get(g.connectionName)??g.connectionName,y=(E)=>d(E).flatMap((B)=>{let w=t.obstacles[B.obstacleIndex].connectedTo.some((Q)=>(c.get(Q)??Q)===f),T=B.severity-(w?s-a:0);return T>0.00000001?[{obstacleIndex:B.obstacleIndex,severity:T}]:[]}),x=hvt(_,t.layerCount),C=g.connectionName===_.connectionName&&g.rootConnectionName===_.rootConnectionName,I=new Set(C?x.map((E)=>E.identity):[]),b=hvt(g,t.layerCount),P=C&&g.route.length===_.route.length&&g.route.every((E,B)=>{let w=_.route[B];return(!(B===0||B===g.route.length-1||E.pcb_port_id||E.insideJumperPad||E.toNextSegmentType)||E.x===w.x&&E.y===w.y)&&E.z===w.z&&E.pcb_port_id===w.pcb_port_id&&E.toNextSegmentType===w.toNextSegmentType&&E.insideJumperPad===w.insideJumperPad})&&b.length===x.length&&new Set(b.map((E)=>E.identity)).size===b.length&&b.every((E,B)=>{let w=x[B];return E.diameter===w.diameter&&E.pointIndices.length===w.pointIndices.length&&E.pointIndices.every((T,Q)=>T===w.pointIndices[Q])&&E.layerSequence.length===w.layerSequence.length&&E.layerSequence.every((T,Q)=>T===w.layerSequence[Q])&&!x.some((T,Q)=>Q!==B&&T.identity===E.identity)});for(let E=0;E<b.length;E++){let B=b[E];if(I.has(B.identity)&&!A.some((T)=>T.routeIndex===p&&T.viaIndex===E))continue;let w=P&&!A.some((T)=>T.routeIndex===p&&T.viaIndex===E)?new Map(y(x[E]).map((T)=>[T.obstacleIndex,T.severity])):void 0;for(let T of y(B)){let Q=w?.get(T.obstacleIndex);Q!==void 0&&T.severity<=Q+0.00000001||m.push({key:`new-via-pad:${p}:${T.obstacleIndex}:${E}`,routeIndex:p,obstacleIndex:T.obstacleIndex,center:{x:B.x,y:B.y},kind:"via",severity:T.severity})}}}return m}})(e)(e),mvt=(e,t,n)=>{if(n<=ii)return structuredClone(e);if(n>=0.99999999)return structuredClone(t);let o={...structuredClone(e),x:e.x+(t.x-e.x)*n,y:e.y+(t.y-e.y)*n};return delete o.start_pcb_port_id,delete o.end_pcb_port_id,o},ZTo=(e,t)=>{let n=e.end.x-e.start.x,o=e.end.y-e.start.y,i=t.end.x-t.start.x,r=t.end.y-t.start.y,s=t.start.x-e.start.x,a=t.start.y-e.start.y,c=n*r-o*i,l=(h,A)=>({x:h.start.x+(h.end.x-h.start.x)*A,y:h.start.y+(h.end.y-h.start.y)*A}),d=(h,A)=>{let m=A.end.x-A.start.x,p=A.end.y-A.start.y,g=m*m+p*p,_=g>0.00000000000000010000000000000001?Math.max(0,Math.min(1,((h.x-A.start.x)*m+(h.y-A.start.y)*p)/g)):0;return l(A,_)};if(Math.abs(c)>ii){let h=(s*r-a*i)/c,A=(s*o-a*n)/c;if(h>=0&&h<=1&&A>=0&&A<=1){let m=l(e,h);return[m,m]}}else{let h=n*n+o*o;if(h>0.00000000000000010000000000000001){let A=(s*n+a*o)/h,m=((t.end.x-e.start.x)*n+(t.end.y-e.start.y)*o)/h,p=Math.max(0,Math.min(A,m)),g=Math.min(1,Math.max(A,m));if(p<=g){let _=l(e,(p+g)/2);return[_,d(_,t)]}}}let u=[[e.start,d(e.start,t)],[e.end,d(e.end,t)],[d(t.start,e),t.start],[d(t.end,e),t.end]];return u.sort((h,A)=>Math.hypot(h[0].x-h[1].x,h[0].y-h[1].y)-Math.hypot(A[0].x-A[1].x,A[0].y-A[1].y)),u[0]},sAe=(e,t)=>{let n=e==="top"?0:e==="bottom"?t-1:/^inner\d+$/.test(e)?Number(e.slice(5)):-1;if(!Number.isInteger(n)||n<0||n>=t)throw Error(`repair04 preload has an unknown layer: ${e}`);return n},pTt=(e,t,n)=>{let o=((g,_)=>{let f=new Map,y=(C)=>{let I=f.get(C);if(I===void 0||I===C)return C;let b=y(I);return f.set(C,b),b},x=(C)=>{let I=C.filter((P)=>typeof P=="string"&&P.length>0);if(I.length===0)return;let b=y(I[0]);for(let P of I)f.set(y(P),b)};for(let C of g.connections){let I=C;x([I.name,I.rootConnectionName,I.netConnectionName,I.__netConnectionName,...I.mergedConnectionNames??[],...I.__rootConnectionNames??[]])}for(let C of _)x([C.connectionName,C.rootConnectionName]);for(let C of g.traces??[])x([C.connection_name,...C.connectsTo??[]]);return y})(e,t),i=t.map((g,_)=>_),r=(g)=>{let _=i[g];if(_===g)return g;let f=r(_);return i[g]=f,f},s=new Map,a=new Map;for(let g=0;g<e.obstacles.length;g+=1)for(let _ of e.obstacles[g].connectedTo){let f=a.get(_)??[];f.push(g),a.set(_,f)}for(let g=0;g<t.length;g+=1){let _=t[g];for(let f of[_.route[0],_.route.at(-1)]){if(!f)continue;let y=o(_.connectionName),x=[JSON.stringify([y,"point",f.x,f.y,f.z])],C=f.pcb_port_id?a.get(f.pcb_port_id)??[]:[];for(let I of C){let b=e.obstacles[I];if(!(b.zLayers??b.layers.map((T)=>sAe(T,e.layerCount))).includes(f.z))continue;let P=(b.ccwRotationDegrees??0)*Math.PI/180,E=f.x-b.center.x,B=f.y-b.center.y,w={x:E*Math.cos(P)+B*Math.sin(P),y:-E*Math.sin(P)+B*Math.cos(P)};eU(w,w,rfe(b))>ii||x.push(JSON.stringify([y,"pad",I]))}for(let I of x){let b=s.get(I);b===void 0?s.set(I,g):i[r(g)]=r(b)}}}let c=(g,_)=>!(!g.startsWith("route:")||!_.startsWith("route:"))&&r(Number(g.slice(6)))===r(Number(_.slice(6))),l=[],d=[],u=[],h=t.map(()=>({segmentTimes:new Map,viaPositions:[]})),A=(g)=>{if(a1(g,n)){u.push(g);for(let _=g.minZ;_<=g.maxZ;_+=1)l.push({x:g.x,y:g.y,z:_,radius:g.radius,net:g.net,source:g.source,...g.routeIndex!==void 0?{viaOwner:g.routeIndex}:{}})}};for(let g=0;g<t.length;g+=1){let _=t[g],f=o(_.connectionName),y=`route:${g}`;for(let x=0;x<_.route.length;x+=1){let C=_.route[x];if((x===0||x===_.route.length-1||C.pcb_port_id)&&a1(C,n)&&l.push({x:C.x,y:C.y,z:C.z,radius:(C.traceThickness??_.traceThickness)/2,net:f,source:y}),x===0)continue;let I=_.route[x-1];I.toNextSegmentType!=="through_obstacle"&&(I.z===C.z?d.push({start:I,end:C,z:C.z,radius:Math.max(I.traceThickness??_.traceThickness,C.traceThickness??_.traceThickness)/2,net:f,source:y,routeIndex:g,segmentIndex:x-1}):A({x:C.x,y:C.y,minZ:Math.min(I.z,C.z),maxZ:Math.max(I.z,C.z),radius:_.viaDiameter/2,net:f,source:y,routeIndex:g}))}}for(let g=0;g<(e.traces??[]).length;g+=1){let _=Kke(e.traces[g],e.minTraceWidth),f=o(_.connection_name),y=`fixed:${g}`;for(let x=0;x<_.route.length;x+=1){let C=_.route[x],I=_.route[x-1];if(C.route_type==="wire"){let b=sAe(C.layer,e.layerCount);(x===0||x===_.route.length-1||C.start_pcb_port_id||C.end_pcb_port_id)&&a1(C,n)&&l.push({x:C.x,y:C.y,z:b,radius:C.width/2,net:f,source:y}),I?.route_type==="wire"&&I.layer===C.layer&&d.push({start:I,end:C,z:b,radius:Math.max(I.width,C.width)/2,net:f,source:y})}else if(C.route_type==="via"){let b=sAe(C.from_layer,e.layerCount),P=sAe(C.to_layer,e.layerCount);A({x:C.x,y:C.y,minZ:Math.min(b,P),maxZ:Math.max(b,P),radius:(C.via_diameter??e.minViaDiameter??0.3)/2,net:f,source:y})}}}let m=new Map;for(let g of l){let _=JSON.stringify([g.net,g.z]),f=m.get(_)??[];f.push(g),m.set(_,f)}let p=(g,_)=>{if(g===void 0)return;let f=h[g].viaPositions;f.some((y)=>Math.hypot(y.x-_.x,y.y-_.y)<=ii)||f.push({x:_.x,y:_.y})};for(let g of d){if(!M6(g.start,g.end,n))continue;let _=g.end.x-g.start.x,f=g.end.y-g.start.y,y=_*_+f*f;if(!(y<=0.00000000000000010000000000000001))for(let x of m.get(JSON.stringify([g.net,g.z]))??[]){if(x.source===g.source||c(x.source,g.source))continue;let C=Math.max(0,Math.min(1,((x.x-g.start.x)*_+(x.y-g.start.y)*f)/y)),I={x:g.start.x+_*C,y:g.start.y+f*C};if(a1(I,n)&&!(Math.hypot(I.x-x.x,I.y-x.y)>g.radius+x.radius+ii)){if(g.routeIndex!==void 0&&g.segmentIndex!==void 0){let b=h[g.routeIndex].segmentTimes.get(g.segmentIndex)??[];b.some((P)=>Math.abs(P-C)<=ii)||b.push(C),h[g.routeIndex].segmentTimes.set(g.segmentIndex,b)}p(x.viaOwner,x)}}}for(let g of u)for(let _=g.minZ;_<=g.maxZ;_+=1)for(let f of m.get(JSON.stringify([g.net,_]))??[])f.source===g.source||c(f.source,g.source)||Math.hypot(g.x-f.x,g.y-f.y)>g.radius+f.radius+ii||(p(g.routeIndex,g),p(f.viaOwner,f));return((g,_,f,y)=>{let x=new Map,C=new Set,I=[],b=(P,E)=>{if(P.routeIndex===void 0||P.segmentIndex===void 0)return;let B=P.end.x-P.start.x,w=P.end.y-P.start.y,T=B*B+w*w;if(T<=0.00000000000000010000000000000001)return;let Q=Math.max(0,Math.min(1,((E.x-P.start.x)*B+(E.y-P.start.y)*w)/T)),N=f[P.routeIndex].segmentTimes.get(P.segmentIndex)??[];N.some((F)=>Math.abs(F-Q)<=ii)||N.push(Q),f[P.routeIndex].segmentTimes.set(P.segmentIndex,N)};for(let P of g){let E=M6(P.start,P.end,_);if(!E||E[1]-E[0]<=ii)continue;let B=(z)=>({x:P.start.x+(P.end.x-P.start.x)*z,y:P.start.y+(P.end.y-P.start.y)*z}),w={...P,start:B(E[0]),end:B(E[1])},T=I.length;I.push({original:P,clipped:w});let Q=Math.floor((Math.min(w.start.x,w.end.x)-w.radius)/2),N=Math.floor((Math.max(w.start.x,w.end.x)+w.radius)/2),F=Math.floor((Math.min(w.start.y,w.end.y)-w.radius)/2),H=Math.floor((Math.max(w.start.y,w.end.y)+w.radius)/2);for(let z=Q;z<=N;z+=1)for(let Y=F;Y<=H;Y+=1){let U=JSON.stringify([w.net,w.z,z,Y]),X=x.get(U)??[];for(let V of X){let W=I[V];if(W.original.source===P.source||y(W.original.source,P.source)||W.original.routeIndex===void 0&&P.routeIndex===void 0)continue;let j=`${V}:${T}`;if(C.has(j))continue;C.add(j);let[q,ne]=ZTo(w,W.clipped);Math.hypot(q.x-ne.x,q.y-ne.y)>w.radius+W.clipped.radius+ii||(b(P,q),b(W.original,ne))}X.push(T),x.set(U,X)}}})(d,n,h,c),h},pvt=(e,t)=>({minX:e.minX-t,maxX:e.maxX+t,minY:e.minY-t,maxY:e.maxY+t}),eDo=(e,t,n,o)=>{let i=[],r,s=e.route,a=(l)=>l===0||l===s.length-1||s[l]?.pcb_port_id!==void 0,c=()=>{r!==void 0&&r.points.length>0&&(r.locks[0]=!0,r.locks[r.points.length-1]=!0,i.push(r)),r=void 0};if(s.length===1&&s[0]&&a1(s[0],t))return[{points:structuredClone(s),locks:[!0],start:{segmentIndex:0,t:0},end:{segmentIndex:0,t:0}}];for(let l=0;l<s.length-1;l+=1){let d=s[l],u=s[l+1];if(!d||!u)throw Error("repair04 found a missing route point");if(![d.x,d.y,d.z,u.x,u.y,u.z].every(Number.isFinite))throw Error("repair04 route coordinates must be finite");if(d.z!==u.z&&!TI({x:d.x,y:d.y},{x:u.x,y:u.y})&&d.toNextSegmentType!=="through_obstacle")throw Error("repair04 requires colocated points at a via transition");let h=M6(d,u,t);if(!h){c();continue}let[A,m]=h;if(m-A<=ii&&!TI(d,u)){c();continue}let p=M6(d,u,n),g=[A,m],_=o.segmentTimes.get(l)??[];for(let x of _)x>=A-ii&&x<=m+ii&&g.push(Math.max(A,Math.min(m,x)));if(p&&d.z===u.z)for(let x of p)x>A+ii&&x<m-ii&&g.push(x);g.sort((x,C)=>x-C);let f=g.filter((x,C)=>C===0||Math.abs(x-g[C-1])>ii),y=PV(d,u,A);r&&!TI(r.points[r.points.length-1],y)&&c(),r||(r={points:[],locks:[],start:{segmentIndex:l,t:A},end:{segmentIndex:l,t:m}});for(let x of f){let C=PV(d,u,x),I=x<=ii?l:x>=0.99999999?l+1:void 0,b=!a1(C,n,0.00000004)||_.some((E)=>Math.abs(E-x)<=ii)||o.viaPositions.some((E)=>Math.hypot(E.x-C.x,E.y-C.y)<=ii)||I!==void 0&&a(I)||d.toNextSegmentType==="through_obstacle"||C.toNextSegmentType==="through_obstacle"||d.insideJumperPad===!0||u.insideJumperPad===!0||(e.jumpers??[]).some((E)=>TI(C,{...E.start,z:C.z})||TI(C,{...E.end,z:C.z})),P=r.points[r.points.length-1];P&&P.x===C.x&&P.y===C.y&&P.z===C.z?r.locks[r.locks.length-1]=r.locks[r.locks.length-1]||b:(r.points.push(C),r.locks.push(b))}r.end={segmentIndex:l,t:m},m<0.99999999&&c()}c();for(let l of i)for(let d=1;d<l.points.length;d+=1){let u=l.points[d-1],h=l.points[d];if(u.z!==h.z&&(l.locks[d-1]||l.locks[d])){let A=d-1,m=d;for(;A>0&&TI({x:l.points[A-1].x,y:l.points[A-1].y},{x:h.x,y:h.y});)A-=1;for(;m+1<l.points.length&&TI({x:l.points[m+1].x,y:l.points[m+1].y},{x:h.x,y:h.y});)m+=1;for(let p=A;p<=m;p+=1)l.locks[p]=!0}}return i},tDo=(e,t)=>{let n=e.bounds,o=e.outline&&e.outline.length>=3?e.outline:[{x:n.minX,y:n.minY},{x:n.maxX,y:n.minY},{x:n.maxX,y:n.maxY},{x:n.minX,y:n.maxY}],i=[];for(let r=0;r<o.length;r+=1){let s=o[r],a=o[(r+1)%o.length],c=M6(s,a,t);if(!c)continue;let l=a.x-s.x,d=a.y-s.y,u=Math.hypot(l,d);if(u<=ii)continue;let h=(c[0]+c[1])/2;i.push({obstacleId:`repair04_board_edge_${r}`,type:"rect",center:{x:s.x+l*h,y:s.y+d*h},width:u*(c[1]-c[0]),height:Math.max(2*(e.minBoardEdgeClearance??0),ii),ccwRotationDegrees:180*Math.atan2(d,l)/Math.PI,layers:Array.from({length:e.layerCount},(A,m)=>m===0?"top":m===e.layerCount-1?"bottom":`inner${m}`),zLayers:Array.from({length:e.layerCount},(A,m)=>m),connectedTo:[]})}return i},nDo=({srj:e,routes:t,bounds:n,boundaryMargin:o=0.5,clearanceHalo:i})=>{if(((f)=>{if(!Object.values(f).every(Number.isFinite))throw Error("repair04 bounds must contain finite coordinates");if(f.maxX-f.minX<9.99999999||f.maxY-f.minY<9.99999999)throw Error("repair04 requires bounds at least 10 mm by 10 mm")})(n),!Number.isFinite(o)||o<0||i!==void 0&&(!Number.isFinite(i)||i<0))throw Error("repair04 collar and halo must be finite and nonnegative");let r=Math.max(e.defaultObstacleMargin??0.2,e.minTraceToPadEdgeClearance??0,e.minTraceToHoleEdgeClearance??0,e.minViaEdgeToPadEdgeClearance??0),s=Math.max(e.minTraceWidth,e.minViaDiameter??0);for(let f of t){s=Math.max(s,f.traceThickness,f.viaDiameter);for(let y of f.route)s=Math.max(s,y.traceThickness??0)}for(let f of e.traces??[])for(let y of f.route)y.route_type==="wire"&&(s=Math.max(s,y.width)),y.route_type==="via"&&(s=Math.max(s,y.via_diameter??e.minViaDiameter??0.3));if(!Number.isFinite(s)||s<=0)throw Error("repair04 requires finite positive copper widths");let a=Math.max(o,s+r);if(2*a>=Math.min(n.maxX-n.minX,n.maxY-n.minY))throw Error("repair04 bounds are too small for their required copper safety collar");let c=pvt(n,Math.max(i??a,r+s)),l=pvt(n,-a),d=pTt(e,t,c),u=((f,y,x)=>{let C=[];for(let I of f){let b=Kke(I,x),P=[],E=[],B=()=>{E.length>0&&P.push(E),E=[]},w=(T)=>{Qc(E[E.length-1])!==Qc(T)&&E.push(structuredClone(T))};for(let T=0;T<b.route.length;T+=1){let Q=b.route[T],N=b.route[T-1];if(Q.route_type==="wire"&&N?.route_type==="wire"&&Q.layer===N.layer){let F=M6(N,Q,y);if(!F){B();continue}let H=mvt(N,Q,F[0]),z=mvt(N,Q,F[1]),Y=E[E.length-1];Y?.route_type==="wire"&&(Y.layer!==H.layer||Math.hypot(Y.x-H.x,Y.y-H.y)>ii)&&B(),w(H),w(z),F[1]<0.99999999&&B()}else if(Q.route_type==="via"){if(!a1(Q,y)){B();continue}if(N?.route_type!=="wire")throw Error("repair04 normalized preload via has no incoming wire");w(N),w(Q);let F=b.route[T+1];if(F?.route_type!=="wire")throw Error("repair04 normalized preload via has no outgoing wire");w(F)}else if(Q.route_type==="wire")a1(Q,y)&&w(Q);else if("start"in Q&&"end"in Q){let F=M6(Q.start,Q.end,y);if(!F){B();continue}let H=(z)=>({x:Q.start.x+(Q.end.x-Q.start.x)*z,y:Q.start.y+(Q.end.y-Q.start.y)*z});w({...structuredClone(Q),start:H(F[0]),end:H(F[1])}),F[1]<0.99999999&&B()}}B();for(let T=0;T<P.length;T+=1)C.push({...structuredClone(I),pcb_trace_id:P.length===1?I.pcb_trace_id:`${I.pcb_trace_id}__repair04_fixed_${T}`,route:P[T]})}return C})(e.traces??[],c,e.minTraceWidth),h=[],A=[],m=[];for(let f=0;f<t.length;f+=1){let y=t[f];for(let x of eDo(y,c,l,d[f])){let C={...structuredClone(Object.fromEntries(Object.entries(y).filter(([I])=>I!=="route"&&I!=="vias"&&I!=="jumpers"))),connectionName:y.connectionName,traceThickness:y.traceThickness,viaDiameter:y.viaDiameter,route:x.points,vias:y.vias.filter((I)=>x.points.some((b)=>Math.abs(b.x-I.x)<=ii&&Math.abs(b.y-I.y)<=ii)).map((I)=>structuredClone(I)),...y.jumpers!==void 0?{jumpers:y.jumpers.filter((I)=>M6(I.start,I.end,c)!==void 0).map((I)=>structuredClone(I))}:{}};h.push(C),A.push(x.locks),m.push({sourceRouteIndex:f,start:x.start,end:x.end,sourceGeometryKey:A9t(y,x.start.segmentIndex+x.start.t,x.end.segmentIndex+x.end.t),originalFragment:structuredClone(C)})}}let p=new Set([...h.flatMap((f)=>[f.connectionName,...f.rootConnectionName?[f.rootConnectionName]:[]]),...u.map((f)=>f.connection_name)]),g=e.connections.filter((f)=>p.has(f.name)||f.pointsToConnect.some((y)=>a1(y,c))).map((f)=>({...structuredClone(Object.fromEntries(Object.entries(f).filter(([y])=>y!=="pointsToConnect"))),name:f.name,pointsToConnect:f.pointsToConnect.filter((y)=>a1(y,c)).map((y)=>structuredClone(y))}));for(let f=0;f<h.length;f+=1){let y=h[f],x=g.find((C)=>C.name===y.connectionName);x||(x={name:y.connectionName,...y.rootConnectionName?{rootConnectionName:y.rootConnectionName}:{},pointsToConnect:[]},g.push(x));for(let[C,I]of[["start",y.route[0]],["end",y.route[y.route.length-1]]]){if(!I)continue;let b=I.z===0?"top":I.z===e.layerCount-1?"bottom":`inner${I.z}`;x.pointsToConnect.some((P)=>Math.abs(P.x-I.x)<=ii&&Math.abs(P.y-I.y)<=ii&&("layer"in P?P.layer===b:P.layers.includes(b)))||x.pointsToConnect.push({x:I.x,y:I.y,layer:b,pointId:`repair04_${f}_${C}`,...I.pcb_port_id?{pcb_port_id:I.pcb_port_id}:{}})}}return{srj:{...Object.fromEntries(Object.entries(e).filter(([f,y])=>f!=="sourceCircuitJson"&&f!=="sourceKicadPcb"&&(typeof y=="number"||typeof y=="boolean"||typeof y=="string"))),layerCount:e.layerCount,minTraceWidth:e.minTraceWidth,bounds:structuredClone(c),obstacles:[...e.obstacles.filter((f)=>((y,x)=>{let C=(y.ccwRotationDegrees??0)*Math.PI/180,I=(Math.abs(y.width*Math.cos(C))+Math.abs(y.height*Math.sin(C)))/2,b=(Math.abs(y.width*Math.sin(C))+Math.abs(y.height*Math.cos(C)))/2;return y.center.x+I>=x.minX&&y.center.x-I<=x.maxX&&y.center.y+b>=x.minY&&y.center.y-b<=x.maxY})(f,c)).map((f)=>structuredClone(f)),...tDo(e,c)],connections:g,...e.traces!==void 0?{traces:u}:{},...e.allowJumpers!==void 0?{allowJumpers:e.allowJumpers}:{},...e.availableJumperTypes?{availableJumperTypes:structuredClone(e.availableJumperTypes)}:{}},routes:h,bounds:structuredClone(n),contextBounds:c,mutableBounds:l,boundaryMargin:a,lockedPointIndices:A,routeMappings:m}},Avt=(e)=>Qc(Object.fromEntries(Object.entries(e).filter(([t])=>t!=="route"&&t!=="vias"))),_vt=(e,t)=>{let n=[];for(let o=1;o<e.route.length;o+=1){let i=e.route[o-1],r=e.route[o],s=M6(i,r,t),a=s?[...s[0]>ii?[[0,s[0]]]:[],...s[1]<0.99999999?[[s[1],1]]:[]]:[[0,1]];s&&!a1(PV(i,r,0.5),t,0.00000004)&&a.length===0&&a.push([0,1]);for(let[c,l]of a)n.push(Qc([PV(i,r,c),PV(i,r,l)]))}return n},oDo=(e,t,n,o,i,r)=>{if(Avt(e)!==Avt(t))throw Error("repair04 merge rejected changed net, width, jumper, or route metadata");if(n.length!==e.route.length)throw Error("repair04 merge received an invalid lock mask");if(t.route.length===0)throw Error("repair04 merge rejected an empty replacement route");if(Qc(e.route[0])!==Qc(t.route[0])||Qc(e.route[e.route.length-1])!==Qc(t.route[t.route.length-1]))throw Error("repair04 merge rejected a moved fragment endpoint");let s=0;for(let a=0;a<e.route.length;a+=1){if(!n[a])continue;let c=Qc(e.route[a]);for(;s<t.route.length&&Qc(t.route[s])!==c;)s+=1;if(s===t.route.length)throw Error("repair04 merge rejected a moved or removed locked point");s+=1}if(Qc(_vt(e,o))!==Qc(_vt(t,o)))throw Error("repair04 merge rejected modified geometry in the fixed boundary collar");for(let a=1;a<e.route.length;a+=1){let c=e.route[a-1],l=e.route[a];if(!(c.toNextSegmentType==="through_obstacle"||c.insideJumperPad===!0||l.insideJumperPad===!0||(e.jumpers??[]).some((u)=>TI(c,{...u.start,z:c.z})&&TI(l,{...u.end,z:l.z})||TI(c,{...u.end,z:c.z})&&TI(l,{...u.start,z:l.z}))))continue;let d=Qc([c,l]);if(!t.route.some((u,h)=>h+1<t.route.length&&Qc([u,t.route[h+1]])===d))throw Error("repair04 merge rejected a changed atomic jumper or through-obstacle span")}for(let a of t.route){if(![a.x,a.y,a.z].every(Number.isFinite)||!Number.isInteger(a.z)||a.z<0||a.z>=r||!a1(a,i))throw Error("repair04 merge rejected invalid or out-of-region geometry");if((a.pcb_port_id!==void 0||a.insideJumperPad===!0||a.toNextSegmentCircuitJsonMetadata!==void 0)&&!e.route.some((c)=>Qc(c)===Qc(a)))throw Error("repair04 merge rejected invented or moved terminal/circuit metadata");if(a.traceThickness!==void 0&&(!Number.isFinite(a.traceThickness)||a.traceThickness<=0||a.traceThickness>Math.max(e.traceThickness,...e.route.map((c)=>c.traceThickness??0))+ii))throw Error("repair04 merge rejected increased per-point copper width")}for(let a=1;a<t.route.length;a+=1){let c=t.route[a-1],l=t.route[a];if(c.toNextSegmentType==="through_obstacle"&&!e.route.some((d,u)=>u+1<e.route.length&&Qc([d,e.route[u+1]])===Qc([c,l])))throw Error("repair04 merge rejected an invented through-obstacle span");if(c.z!==l.z&&c.toNextSegmentType!=="through_obstacle"&&(Math.abs(c.x-l.x)>ii||Math.abs(c.y-l.y)>ii||!t.vias.some((d)=>Math.abs(d.x-c.x)<=ii&&Math.abs(d.y-c.y)<=ii)))throw Error("repair04 merge rejected a disconnected or missing via")}for(let a of t.vias){if(!(Number.isFinite(a.x)&&Number.isFinite(a.y)&&a1(a,i)&&t.route.some((c)=>Math.abs(c.x-a.x)<=ii&&Math.abs(c.y-a.y)<=ii)))throw Error("repair04 merge rejected an invalid via position");if(!a1(a,o,0.00000004)&&!e.vias.some((c)=>Qc(c)===Qc(a)))throw Error("repair04 merge rejected a new via in the boundary collar")}for(let a of e.vias)if(!a1(a,o,0.00000004)&&!t.vias.some((c)=>Qc(c)===Qc(a)))throw Error("repair04 merge rejected a changed via in the boundary collar")},FDe=(e,t)=>{for(let n of t){let o=e[e.length-1];o&&TI(o,n)&&Qc(o)===Qc(n)||e.push(structuredClone(n))}},iDo=(e,t,n)=>{let o=new Set(t.route.map(Qc)),i=new Set(n.flatMap((s)=>s.originalFragment.route.map(Qc)).filter((s)=>!o.has(s))),r=[];for(let s of e)for(r.push(s);r.length>=3;){let a=r[r.length-3],c=r[r.length-2],l=r[r.length-1];if(!i.has(Qc(c)))break;if(a.z!==c.z||c.z!==l.z&&a.toNextSegmentType!=="through_obstacle")break;if(a.toNextSegmentType!==c.toNextSegmentType||a.insideJumperPad!==c.insideJumperPad||a.traceThickness!==c.traceThickness||Qc(a.toNextSegmentCircuitJsonMetadata)!==Qc(c.toNextSegmentCircuitJsonMetadata))break;let d=l.x-a.x,u=l.y-a.y,h=d*d+u*u;if(h<=0.00000000000000010000000000000001)break;let A=(c.x-a.x)*u-(c.y-a.y)*d,m=((c.x-a.x)*d+(c.y-a.y)*u)/h;if(Math.abs(A)>ii*Math.sqrt(h)||m<0||m>1)break;r.splice(r.length-2,1)}return r},aAe=(e)=>{if(!Number.isInteger(e.segmentIndex)||e.segmentIndex<0||!Number.isFinite(e.t)||e.t<0||e.t>1)throw Error("repair04 merge received invalid fragment provenance");return e.segmentIndex+e.t},ATt=(e,t)=>{let n=Math.max(Math.abs(e),Math.abs(t));if(n===0||n===Number.POSITIVE_INFINITY)return n;let o=e/n,i=t/n;return n*Math.sqrt(o*o+i*i)};function gvt(e,t,n){return e.minX-n-ii>t.maxX||e.maxX+n+ii<t.minX||e.minY-n-ii>t.maxY||e.maxY+n+ii<t.minY}var rDo=class extends Js{input;stats;phase="initialize";cursor=0;barrierCount=0;output;prepareObstacle;prepareRoute;prepareTrace;indexBarrier;seedSearch;searchBatch;constructor(e){super(),this.input=e,this.stats=e.stats??{nodesPopped:0,completionReason:"no-path"},this.MAX_ITERATIONS=Math.ceil((e.maxNodes??30000)/128)+Math.ceil(e.srj.obstacles.length/128)+Math.ceil(e.routes.length/32)+Math.ceil((e.srj.traces?.length??0)/32)+e.srj.obstacles.length*e.srj.layerCount+e.routes.reduce((t,n)=>t+n.route.length,0)+(e.srj.traces??[]).reduce((t,n)=>t+n.route.length,0)+32}finish(e){this.output=e,this.phase="finished",this.solved=!0,this.progress=1,this.prepareObstacle=void 0,this.prepareRoute=void 0,this.prepareTrace=void 0,this.indexBarrier=void 0,this.seedSearch=void 0,this.searchBatch=void 0}_step(){if(this.phase==="initialize")return void this.initialize();if(this.phase==="seed")return void this.seedSearch();if(this.phase==="search")return this.searchBatch(),void(this.solved||(this.progress=Math.min(0.99,this.stats.nodesPopped/(this.input.maxNodes??30000))));let e=this.cursor;if(this.phase==="obstacles"){let t=this.input.srj.obstacles;for(;this.cursor<Math.min(e+128,t.length);this.cursor++)this.prepareObstacle(t[this.cursor]);return void(this.cursor===t.length&&(this.phase="routes",this.cursor=0))}if(this.phase!=="routes"){if(this.phase==="traces"){let t=this.input.srj.traces??[];for(;this.cursor<Math.min(e+32,t.length);this.cursor++)this.prepareTrace(t[this.cursor]);return void(this.cursor===t.length&&(this.phase="index",this.cursor=0))}if(this.phase!=="index")throw Error("repair04: clearance path stepped after completion");for(;this.cursor<Math.min(e+128,this.barrierCount);this.cursor++)this.indexBarrier(this.cursor);this.cursor===this.barrierCount&&(this.phase="seed")}else{for(;this.cursor<Math.min(e+32,this.input.routes.length);this.cursor++)this.prepareRoute(this.input.routes[this.cursor]);this.cursor===this.input.routes.length&&(this.phase="traces",this.cursor=0)}}initialize(){let e=this.input,{srj:t,routes:n,routeIndex:o,start:i,end:r,bounds:s,traceThickness:a}=e,c=e.heuristicWeight??1;if(!Number.isFinite(c)||c<1)throw Error("repair04: heuristic weight must be finite and at least one");let l=(Q,N)=>{let F=e.getAdditionalEdgeCost?.(Q,N)??0;if(Number.isNaN(F)||F<0)throw Error("repair04: additional edge costs must be nonnegative");return F};if(e.maxNodes!==void 0&&(!Number.isSafeInteger(e.maxNodes)||e.maxNodes<1))throw Error("repair04: maxNodes must be a positive safe integer");if(this.stats&&(this.stats.nodesPopped=0,this.stats.completionReason="no-path"),e.allowLayerChanges===!1&&i.z!==r.z)return void this.finish(null);let d=n[o],u=e.viaHoleDiameter??d.viaDiameter;if(!Number.isFinite(u)||u<=0||u>d.viaDiameter)throw Error("repair04: via hole diameter must be positive and fit the copper");let h=u+e.viaClearance,A=(Q,N)=>{for(let F=N;F;F=F.previous)if((Q.x!==F.x||Q.y!==F.y)&&Math.hypot(Q.x-F.x,Q.y-F.y)+ii<h)return!1;return!0},m=(Q)=>{let N;for(let F=1;F<Q.length;F++){let H=Q[F-1],z=Q[F];if(H.z!==z.z&&H.toNextSegmentType!=="through_obstacle"){if(!A(H,N))return!1;H.x===N?.x&&H.y===N?.y||(N={x:H.x,y:H.y,previous:N})}}return!0},p=new Map,g=(Q)=>{let N=p.get(Q);if(N===void 0||N===Q)return Q;let F=g(N);return p.set(Q,F),F},_=(Q)=>{let N=Q.filter((H)=>Boolean(H));if(!N.length)return;let F=g(N[0]);for(let H of N)p.set(g(H),F)};for(let Q of t.connections){let N=Q;_([N.name,N.rootConnectionName,N.netConnectionName,N.__netConnectionName,...N.mergedConnectionNames??[],...N.__rootConnectionNames??[],...N.pointsToConnect.flatMap((F)=>[F.pcb_port_id,F.pointId])])}for(let Q of t.obstacles)_(Q.connectedTo);for(let Q of n)_([Q.connectionName,Q.rootConnectionName]);let f=g(d.connectionName),y=(Q)=>Q==="top"?0:Q==="bottom"?t.layerCount-1:Number(Q.slice(5)),x=[s.minX,s.maxX,s.minY,s.maxY,i.x,i.y,r.x,r.y,a,d.viaDiameter,e.traceClearance,e.viaClearance,t.defaultObstacleMargin??0,t.minTraceToPadEdgeClearance??0,t.minTraceToHoleEdgeClearance??0,t.minViaEdgeToPadEdgeClearance??0].every((Q)=>Number.isFinite(Q)&&Math.abs(Q)<=1e4),C=[],I=(Q,N,F,H,z=!1,Y=!1,U=!1)=>{let X=H?Math.hypot(H.width,H.height)/2:F,V=H?Math.cos(H.rotation):1,W=H?Math.sin(H.rotation):0,j={minX:Math.min(Q.x,N.x)-X,maxX:Math.max(Q.x,N.x)+X,minY:Math.min(Q.y,N.y)-X,maxY:Math.max(Q.y,N.y)+X},q=H&&x?((ne,ce,oe,ie,J,ee)=>{if(ne.x!==ce.x||ne.y!==ce.y||!Number.isFinite(oe.rotation)||oe.width<=0||oe.height<=0||![ne.x,ne.y,oe.width,oe.height,ee.minX,ee.maxX,ee.minY,ee.maxY].every((Pe)=>Number.isFinite(Pe)&&Math.abs(Pe)<=1e4))return ee;let se=ie*ie+J*J;if(!Number.isFinite(se)||Math.abs(se-1)>0.000000000001)return ee;let le=oe.width/2,he=oe.height/2,ue=(Math.abs(ie)*le+Math.abs(J)*he)/se+0.00000001,Ae=(Math.abs(J)*le+Math.abs(ie)*he)/se+0.00000001,_e={minX:ne.x-ue,maxX:ne.x+ue,minY:ne.y-Ae,maxY:ne.y+Ae};return _e.minX<ee.minX||_e.maxX>ee.maxX||_e.minY<ee.minY||_e.maxY>ee.maxY?ee:_e})(Q,N,H,V,W,j):j;C.push({a:Q,b:N,radius:F,rect:H,viaOnly:z,pad:Y,isNonPlatedHole:U,rectCos:V,rectSin:W,rectBounds:H?{minX:-H.width/2,maxX:H.width/2,minY:-H.height/2,maxY:H.height/2}:void 0,visitedQuery:0,...q,...Kk(t,Q,N)})};this.prepareObstacle=(Q)=>{let N=Q.connectedTo.some((z)=>g(z)===f),F=Q.__zLayers??Q.zLayers??Q.layers.map(y),H=Q.isNonPlatedHole&&Q.shape==="circle"||Q.type==="oval"&&Q.width===Q.height&&Q.ccwRotationDegrees===void 0&&F.length>1;for(let z of F){let Y={...Q.center,z};I(Y,Y,H?Q.width/2:0,H?void 0:{width:Q.width,height:Q.height,rotation:(Q.ccwRotationDegrees??0)*Math.PI/180},N,H,Q.isNonPlatedHole)}this.barrierCount=C.length},this.prepareRoute=(Q)=>{if(g(Q.connectionName)!==f){for(let N=1;N<Q.route.length;N++){let F=Q.route[N-1],H=Q.route[N];F.toNextSegmentType!=="through_obstacle"&&I(F,H,F.z!==H.z?Q.viaDiameter/2:Math.max(F.traceThickness??Q.traceThickness,H.traceThickness??Q.traceThickness)/2)}this.barrierCount=C.length}},this.prepareTrace=(Q)=>{if(g(Q.connection_name)===f)return;let N=Kke(Q,t.minTraceWidth);for(let F=1;F<N.route.length;F++){let H=N.route[F-1],z=N.route[F];H.route_type==="wire"&&z.route_type==="wire"&&H.layer===z.layer&&I({x:H.x,y:H.y,z:y(H.layer)},{x:z.x,y:z.y,z:y(z.layer)},Math.max(H.width,z.width)/2),z.route_type==="via"&&I({x:z.x,y:z.y,z:y(z.from_layer)},{x:z.x,y:z.y,z:y(z.to_layer)},(z.via_diameter??d.viaDiameter)/2)}this.barrierCount=C.length};let b=new Map,P=Math.max(d.viaDiameter,a)/2+Math.max(e.traceClearance,e.viaClearance,t.defaultObstacleMargin??0,t.minTraceToPadEdgeClearance??0,t.minTraceToHoleEdgeClearance??0,t.minViaEdgeToPadEdgeClearance??0)+0.00001;this.indexBarrier=(Q)=>{let N=C[Q];for(let F=Math.floor(Math.max(N.minX,s.minX-P));F<=Math.floor(Math.min(N.maxX,s.maxX+P));F++){let H=b.get(F);for(let z=Math.floor(Math.max(N.minY,s.minY-P));z<=Math.floor(Math.min(N.maxY,s.maxY+P));z++){H||(H=new Map,b.set(F,H));let Y=H.get(z);Y?Y.push(N):H.set(z,[N])}}};let E=0,B={x:0,y:0},w={x:0,y:0},T=(Q,N)=>{let F=Q.z!==N.z,H=F?d.viaDiameter/2:a/2,z=Math.max(F?e.viaClearance:e.traceClearance,t.defaultObstacleMargin??0,F?t.minViaEdgeToPadEdgeClearance??0:t.minTraceToPadEdgeClearance??0),Y=H+Math.max(z,t.minTraceToHoleEdgeClearance??0)+0.00001,U=++E,X=Math.min(Q.x,N.x),V=Math.max(Q.x,N.x),W=Math.min(Q.y,N.y),j=Math.max(Q.y,N.y),{minZ:q,maxZ:ne}=Kk(t,Q,N);for(let ce=Math.floor(X-Y);ce<=Math.floor(V+Y);ce++){let oe=b.get(ce);if(oe)for(let ie=Math.floor(W-Y);ie<=Math.floor(j+Y);ie++){let J=oe.get(ie);if(J)for(let ee of J){if(ee.viaOnly&&!F)continue;if(ee.visitedQuery===U)continue;if(ee.visitedQuery=U,ee.maxZ<q||ee.minZ>ne)continue;let se=H+(ee.isNonPlatedHole&&!F&&t.minTraceToHoleEdgeClearance!==void 0?t.minTraceToHoleEdgeClearance:ee.viaOnly?jke(t,e.viaClearance,!0):ee.rect||ee.pad?z:F&&ee.minZ!==ee.maxZ?e.viaClearance:e.traceClearance);if(V+se<ee.minX||X-se>ee.maxX||j+se<ee.minY||W-se>ee.maxY)continue;let le;if(ee.rect?(B.x=(Q.x-ee.a.x)*ee.rectCos+(Q.y-ee.a.y)*ee.rectSin,B.y=-(Q.x-ee.a.x)*ee.rectSin+(Q.y-ee.a.y)*ee.rectCos,w.x=(N.x-ee.a.x)*ee.rectCos+(N.y-ee.a.y)*ee.rectSin,w.y=-(N.x-ee.a.x)*ee.rectSin+(N.y-ee.a.y)*ee.rectCos,le=dL(B,w,ee.rectBounds)):le=Um(Q,N,ee.a,ee.b)-ee.radius,le+ii<se)return!1}}}return!0};this.seedSearch=()=>{if(!T(i,i)||!T(r,r))return void this.finish(null);if(e.existingPath){let Ee=e.existingPath,Te=Ee[0],be=Ee.at(-1);if(!Te||!be||Te.x!==i.x||Te.y!==i.y||Te.z!==i.z||be.x!==r.x||be.y!==r.y||be.z!==r.z)throw Error("repair04: existing clearance path must match its anchors");if(Ee.some((me,ye)=>{let Ce=Ee[ye-1];return Boolean(Ce&&Ce.z!==me.z&&(Ce.x!==me.x||Ce.y!==me.y))}))throw Error("repair04: existing clearance path has a non-colocated layer transition");if(m(Ee)&&(e.allowLayerChanges!==!1||Ee.every((me)=>me.z===i.z))&&Ee.slice(1).every((me,ye)=>T(Ee[ye],me)&&l(Ee[ye],me)===0))return this.stats&&(this.stats.completionReason="found"),void this.finish(Ee.map((me)=>({...me})))}let Q=e.gridSize??0.1;if(!Number.isFinite(Q)||Q<=0)throw Error("repair04: clearance grid size must be positive and finite");let N=Math.floor((s.maxX-s.minX)/Q),F=Math.floor((s.maxY-s.minY)/Q),H=(Ee)=>({x:s.minX+(Ee%N+0.5)*Q,y:s.minY+(Math.floor(Ee/N)%F+0.5)*Q,z:Math.floor(Ee/(N*F)),traceThickness:a}),z=(Ee,Te,be)=>(be*F+Te)*N+Ee,Y=(Ee)=>Math.hypot(Ee.x-r.x,Ee.y-r.y)+(Ee.z===r.z?0:1),U=N*F*t.layerCount,X=N>0&&F>0&&Number.isSafeInteger(t.layerCount)&&Number.isSafeInteger(U)&&U>0&&U<=1e6&&Number.isInteger(i.z)&&i.z>=0&&i.z<t.layerCount,V=new H7o(X?U:void 0),W=X?new Float64Array(U).fill(1/0):void 0,j=X?new Int32Array(U):void 0,q=new Map,ne=new Map,ce=new Map,oe=(ee=i,z(Math.max(0,Math.min(N-1,Math.floor((ee.x-s.minX)/Q))),Math.max(0,Math.min(F-1,Math.floor((ee.y-s.minY)/Q))),ee.z)),ie=oe%N,J=Math.floor(oe/N)%F;var ee;for(let Ee=-2;Ee<=2;Ee++)for(let Te=-2;Te<=2;Te++){let be=ie+Ee,me=J+Te;if(be<0||be>=N||me<0||me>=F)continue;let ye=z(be,me,i.z),Ce=H(ye);if(!T(i,Ce))continue;let ve=Math.hypot(Ce.x-i.x,Ce.y-i.y)+l(i,Ce);Number.isFinite(ve)&&(W?W[ye]=ve:q.set(ye,ve),j?j[ye]=-1:ne.set(ye,-1),V.push({id:ye,cost:ve,priority:ve+c*Y(Ce)}))}let se=N*F*t.layerCount,le=N>0&&F>0&&Number.isSafeInteger(t.layerCount)&&Number.isSafeInteger(se)&&se>0&&Number.isSafeInteger(se*se-1)&&Number.isInteger(i.z)&&i.z>=0&&i.z<t.layerCount,he=X&&c>1?new Uint8Array(U):void 0,ue=!X&&c>1?new Set:void 0,Ae=new Map,_e=new Map,Pe=0;this.searchBatch=()=>{let Ee=Math.min(Pe+128,e.maxNodes??30000);for(;V.length&&Pe<Ee;){let Te=V.pop();if(Pe++,this.stats&&(this.stats.nodesPopped=Pe),Te.cost!==(W?W[Te.id]:q.get(Te.id)))continue;he?he[Te.id]=1:ue?.add(Te.id);let be=H(Te.id),me=ce.get(Te.id);if(be.z===r.z&&Math.hypot(be.x-r.x,be.y-r.y)<3*Q&&T(be,r)&&Number.isFinite(l(be,r))){let De=[r];for(let it=Te.id;it!==-1;it=j?j[it]:ne.get(it))De.push(H(it));De.push(i);let Ze=De.reverse(),st=[i],et=[0];for(let it=1;e.getAdditionalEdgeCost&&it<Ze.length;it++){let gt=Ze[it-1],wt=Ze[it];et.push(et[it-1]+(gt.z===wt.z?Math.hypot(gt.x-wt.x,gt.y-wt.y):1)+l(gt,wt))}let lt=0;for(let it=1;it<Ze.length;){let gt=it;if(Ze[it].z===st.at(-1).z)for(let wt=it+1;wt<Ze.length&&Ze[wt].z===Ze[it].z;wt++)T(st.at(-1),Ze[wt])&&(!e.getAdditionalEdgeCost||Math.hypot(Ze[wt].x-Ze[lt].x,Ze[wt].y-Ze[lt].y)+l(Ze[lt],Ze[wt])<=et[wt]-et[lt]+ii)&&(gt=wt);st.push(Ze[gt]),lt=gt,it=gt+1}if(!m(st))throw Error("repair04: search generated conflicting drill sites");return this.stats&&(this.stats.completionReason="found"),void this.finish(st)}let ye=Te.id%N,Ce=Math.floor(Te.id/N)%F,ve=[];for(let De=-1;De<=1;De++)for(let Ze=-1;Ze<=1;Ze++)De===0&&Ze===0||ye+De<0||ye+De>=N||Ce+Ze<0||Ce+Ze>=F||ve.push(z(ye+De,Ce+Ze,be.z));if(e.allowLayerChanges!==!1&&A(be,me))for(let De=0;De<t.layerCount;De++)De!==be.z&&ve.push(z(ye,Ce,De));for(let De of ve){if(he?he[De]===1:ue?.has(De))continue;let Ze=H(De),st=Te.cost+(be.z===Ze.z?Math.hypot(be.x-Ze.x,be.y-Ze.y):1),et=W?W[De]:q.get(De)??1/0;if(st>=et)continue;let lt=Math.min(Te.id,De),it=Math.max(Te.id,De),gt=le?lt*se+it:`${lt},${it}`,wt=le&&be.z!==Ze.z&&t.allowBlindAndBuriedVias!==!0?Te.id%(N*F):void 0,Dt=wt===void 0?Ae.get(gt):_e.get(wt);if(Dt===void 0&&(Dt=T(be,Ze),wt===void 0?Ae.set(gt,Dt):_e.set(wt,Dt)),!Dt)continue;let vt=st+l(be,Ze);vt>=et||(be.z===Ze.z||be.x===me?.x&&be.y===me?.y?me?ce.set(De,me):ce.delete(De):ce.set(De,{x:be.x,y:be.y,previous:me}),W?W[De]=vt:q.set(De,vt),j?j[De]=Te.id:ne.set(De,Te.id),V.push({id:De,cost:vt,priority:vt+c*Y(Ze)}))}}V.length&&Pe<(e.maxNodes??30000)||(this.stats.completionReason=V.length?"node-limit":"no-path",this.finish(null))},this.phase="search"},this.phase="obstacles"}getOutput(){if(!this.solved||this.failed||this.output===void 0)throw Error("repair04: clearance path output requested before completion");return this.output}getResult(){return this.getOutput()}};function HDe(e,t){let n=[];for(let o=1;o<t.length;o++){let i=t[o-1],r=t[o];if(i.z!==r.z&&i.toNextSegmentType!=="through_obstacle"){if(i.x!==r.x||i.y!==r.y)throw Error("repair04: negotiated via endpoints must coincide");n.some((s)=>s.x===r.x&&s.y===r.y)||n.push({x:r.x,y:r.y})}}return{...e,route:t,vias:n}}var sDo=class extends Js{input;phase="initialize";routeCursor=0;copperCursor=0;spanCount=0;output;pathSolver;prepareRoute;finishSetup;selectSpan;prepareCopper;startPath;applyPath;updateWorkStats;constructor(e){super(),this.input=e,this.stats={pathSearchNodes:0,pathSearchCalls:0,unresolvedSpanCount:0},this.MAX_ITERATIONS=Math.ceil(e.maxPathSearchNodes/128)+e.maxPathSearchCalls*(e.routes.reduce((t,n)=>t+n.route.length,0)+e.srj.obstacles.length*e.srj.layerCount+128)+e.routes.length+32}_step(){if(this.phase!=="initialize"){if(this.phase==="spans"){let e=Math.min(this.routeCursor+32,this.input.routes.length);for(;this.routeCursor<e;this.routeCursor++)this.prepareRoute(this.routeCursor);return void(this.routeCursor===this.input.routes.length&&(this.phase="setup"))}if(this.phase!=="setup"){if(this.phase==="select")return this.selectSpan(),void this.updateWorkStats();if(this.phase==="coppers"){let e=Math.min(this.copperCursor+32,this.spanCount);for(;this.copperCursor<e;this.copperCursor++)this.prepareCopper(this.copperCursor);return void(this.copperCursor===this.spanCount&&(this.phase="start-path"))}if(this.phase!=="start-path"){if(this.phase==="path"){let e=this.pathSolver;if(!e)throw Error("repair04: negotiated search child is missing");return e.step(),e.failed?(this.failed=!0,this.error=e.error):e.solved&&(this.activeSubSolver=null,this.phase="apply-path"),void this.updateWorkStats()}if(this.phase==="apply-path"){let e=this.pathSolver;if(!e)throw Error("repair04: completed negotiated search child is missing");return this.applyPath(e.getOutput()),this.applyPath=void 0,void this.updateWorkStats()}throw Error("repair04: negotiated clearance stepped after completion")}this.startPath()}else this.finishSetup()}else this.initialize()}initialize(){let e=this.input;for(let i of[e.maxPathSearchNodes,e.maxPathSearchCalls])if(!Number.isSafeInteger(i)||i<0)throw Error("repair04: negotiated work budgets must be nonnegative integers");if(e.maxPathSearchNodesPerCall!==void 0&&(!Number.isSafeInteger(e.maxPathSearchNodesPerCall)||e.maxPathSearchNodesPerCall<1))throw Error("repair04: per-path work budget must be a positive integer");if(e.pathHeuristicWeight!==void 0&&(!Number.isFinite(e.pathHeuristicWeight)||e.pathHeuristicWeight<1))throw Error("repair04: heuristic weight must be finite and at least one");if(e.pathGridSizeScale!==void 0&&(!Number.isFinite(e.pathGridSizeScale)||e.pathGridSizeScale<=0))throw Error("repair04: path grid scale must be positive and finite");if(e.viaHoleDiameter!==void 0&&(!Number.isFinite(e.viaHoleDiameter)||e.viaHoleDiameter<=0||e.routes.some((i)=>e.viaHoleDiameter>i.viaDiameter)))throw Error("repair04: via hole diameter must be positive and fit the copper");let t=(i)=>i.x>=e.bounds.minX-ii&&i.x<=e.bounds.maxX+ii&&i.y>=e.bounds.minY-ii&&i.y<=e.bounds.maxY+ii,n=[],o=e.routes.map(()=>[]);this.prepareRoute=(i)=>{let r=e.routes[i],s=r.route,a=s.flatMap((c,l)=>{let d=s[l-1],u=s[l+1],h=c.traceThickness??r.traceThickness,A=d&&(d.traceThickness??r.traceThickness)!==h||u&&(u.traceThickness??r.traceThickness)!==h,m=d&&d.z!==c.z&&(!e.allowLayerChanges||e.isLocked(i,l)||e.isLocked(i,l-1))||u&&u.z!==c.z&&(!e.allowLayerChanges||e.isLocked(i,l)||e.isLocked(i,l+1));return l===0||l===s.length-1||e.isLocked(i,l)||c.pcb_port_id||c.toNextSegmentType||c.insideJumperPad||A||m?[l]:[]});for(let c=1;c<a.length;c++){let l=s.slice(a[c-1],a[c]+1),d=l[0].traceThickness??r.traceThickness,u=l.slice(1).every((m,p)=>{let g=l[p],_=(g.x+m.x)/2,f=(g.y+m.y)/2;return _>e.bounds.minX+0.00000004&&_<e.bounds.maxX-0.00000004&&f>e.bounds.minY+0.00000004&&f<e.bounds.maxY-0.00000004}),h=l.slice(1).every((m,p)=>{let g=l[p],_=a[c-1]+p;return g.z===m.z||!e.isLocked(i,_)&&!e.isLocked(i,_+1)}),A=l.every(t)&&u&&h&&!r.jumpers?.length&&l.every((m)=>!m.toNextSegmentType&&!m.insideJumperPad&&(m.traceThickness??r.traceThickness)===d)&&(e.allowLayerChanges||l.every((m)=>m.z===l[0].z));o[i].push(n.length),n.push({routeIndex:i,mutable:Boolean(A),route:HDe({...r,traceThickness:d},l)})}},this.finishSetup=()=>{let i=n.map((f)=>f.route),r=n.filter((f)=>!f.mutable).map((f)=>f.route),s=sfe(e.srj,e.routes),a=(f)=>s.get(f.connectionName)??f.connectionName,c=new Set;for(let f of n)for(let y of[f.route.route[0],f.route.route.at(-1)]){let x=y.traceThickness??f.route.traceThickness,C=`${a(f.route)}|${y.x}|${y.y}|${y.z}|${x}`;if(c.has(C))continue;c.add(C);let I={x:y.x,y:y.y,z:y.z};r.push({...f.route,traceThickness:x,route:[I,I],vias:[]})}let l=n.map(({route:f})=>{let y=0;for(let x=1;x<f.route.length;x++){let C=f.route[x-1],I=f.route[x];y+=C.z===I.z?Math.hypot(C.x-I.x,C.y-I.y):1}return y}),d=new Set,u=new Set(e.dirtyRouteIndices),h=[],A=new Set,m=(f)=>{A.has(f)||d.has(f)||!n[f].mutable||(A.add(f),h.push(f))};n.forEach((f,y)=>{u.has(f.routeIndex)&&m(y)});let p=0,g=0,_=0;this.spanCount=n.length,this.updateWorkStats=()=>{this.stats={pathSearchNodes:p+(this.pathSolver?.stats.nodesPopped??0),pathSearchCalls:g,unresolvedSpanCount:A.size+d.size},this.progress=this.solved?1:Math.min(0.99,Math.max(this.stats.pathSearchNodes/Math.max(1,e.maxPathSearchNodes),g/Math.max(1,e.maxPathSearchCalls)))},this.selectSpan=()=>{if(!(_<h.length&&p<e.maxPathSearchNodes&&g<e.maxPathSearchCalls))return this.output={routes:e.routes.map((I,b)=>{if(!o[b].length)return I;return HDe(I,o[b].flatMap((P,E)=>E===0?i[P].route:i[P].route.slice(1)))}),pathSearchNodes:p,pathSearchCalls:g,unresolvedSpanCount:A.size+d.size},this.solved=!0,void(this.phase="finished");let f=h[_++];A.delete(f);let y=i[f],x=a(y),C=[];this.copperCursor=0,this.prepareCopper=(I)=>{if(I===f)return;let b=i[I],P=a(b);for(let E=1;E<b.route.length;E++){let B=b.route[E-1],w=b.route[E];if(B.toNextSegmentType==="through_obstacle")continue;let T=!n[I].mutable||d.has(I);if(B.z===w.z&&(P===x||T))continue;let Q=(B.z!==w.z?b.viaDiameter:Math.max(B.traceThickness??b.traceThickness,w.traceThickness??b.traceThickness))/2,N={a:B,b:w,radius:Q,minX:Math.min(B.x,w.x),maxX:Math.max(B.x,w.x),minY:Math.min(B.y,w.y),maxY:Math.max(B.y,w.y),...Kk(e.srj,B,w),spanIndex:I,owner:P,index:C.length,cellX:Math.floor(Math.min(B.x,w.x)-Q),cellY:Math.floor(Math.min(B.y,w.y)-Q),immutable:T};C.push(N)}},this.startPath=()=>{let I=(N)=>{if(!N.length)return;let F=new Vm(N.length);for(let H of N)F.add(H.minX-H.radius-ii,H.minY-H.radius-ii,H.maxX+H.radius+ii,H.maxY+H.radius+ii);return F.finish(),{index:F,copper:N}},b=I(C),P=new Map;for(let N=0;N<e.srj.layerCount;N++)P.set(N,I(C.filter((F)=>F.minZ<=N&&F.maxZ>=N)));let E=(N,F)=>{let H=N.z!==F.z,z=Math.min(N.x,F.x),Y=Math.max(N.x,F.x),U=Math.min(N.y,F.y),X=Math.max(N.y,F.y),V=(H?y.viaDiameter:y.traceThickness)/2+Math.max(e.traceClearance,e.viaClearance),W=[],j=Kk(e.srj,N,F),q=H?b:P.get(N.z),ne=q?.index.search(z-V-ii,U-V-ii,Y+V+ii,X+V+ii)??[];for(let ie of ne){let J=q.copper[ie],ee=H&&J.minZ!==J.maxZ,se=J.minZ<=j.maxZ&&J.maxZ>=j.minZ;if(!se&&!ee)continue;if(J.immutable&&!ee)continue;if(J.owner===x&&(!ee||N.x===J.a.x&&N.y===J.a.y))continue;let le=(H?y.viaDiameter:y.traceThickness)/2+(ee?e.viaClearance:e.traceClearance)+J.radius,he=(e.viaHoleDiameter??y.viaDiameter)/2+(e.viaHoleDiameter??2*J.radius)/2+e.viaClearance,ue=ee?se&&J.owner!==x?Math.max(le,he):he:le;if(z-ue-ii>J.maxX||Y+ue+ii<J.minX||U-ue-ii>J.maxY||X+ue+ii<J.minY)continue;let Ae=Um(N,F,J.a,J.b);Ae<ue-ii&&W.push({copper:J,ratio:(ue-Ae)/(ue*ue)})}let ce=Math.floor(z-V),oe=Math.floor(U-V);return W.sort((ie,J)=>{let ee=Math.max(ce,ie.copper.cellX)-Math.max(ce,J.copper.cellX);if(ee!==0)return ee;return Math.max(oe,ie.copper.cellY)-Math.max(oe,J.copper.cellY)||ie.copper.index-J.copper.index}),W},B=(N,F)=>{let H=(N.x+F.x)/2,z=(N.y+F.y)/2;if(H<=e.bounds.minX+0.00000004||H>=e.bounds.maxX-0.00000004||z<=e.bounds.minY+0.00000004||z>=e.bounds.maxY-0.00000004)return 1/0;let Y=new Map;for(let{copper:X,ratio:V}of E(N,F)){if(X.owner===x||X.immutable)return 1/0;Y.set(X.owner,Math.max(Y.get(X.owner)??0,V*l[X.spanIndex]))}let U=0;for(let X of Y.values())U+=X;return(N.z===F.z?Math.hypot(N.x-F.x,N.y-F.y):1)*U},w=new Map,T={nodesPopped:0,completionReason:"no-path"},Q=new rDo({srj:e.srj,routes:[...r,y],routeIndex:r.length,start:y.route[0],end:y.route.at(-1),bounds:e.bounds,traceThickness:y.traceThickness,traceClearance:e.traceClearance,viaClearance:e.viaClearance,gridSize:Math.min(0.1,y.traceThickness*(e.pathGridSizeScale??1)/2),allowLayerChanges:e.allowLayerChanges,maxNodes:Math.min(e.maxPathSearchNodesPerCall??e.maxPathSearchNodes,e.maxPathSearchNodes-p),heuristicWeight:e.pathHeuristicWeight,stats:T,getAdditionalEdgeCost:(N,F)=>{if(N.z===F.z||e.srj.allowBlindAndBuriedVias===!0||N.x!==F.x||N.y!==F.y)return B(N,F);let H=w.get(N.x),z=H?.get(N.y);if(z!==void 0)return z;let Y=B(N,F);return H||(H=new Map,w.set(N.x,H)),H.set(N.y,Y),Y},existingPath:y.route,viaHoleDiameter:e.viaHoleDiameter});this.pathSolver=Q,this.activeSubSolver=Q,this.MAX_ITERATIONS=Math.max(this.MAX_ITERATIONS,this.iterations+Q.MAX_ITERATIONS+3),this.phase="path",this.applyPath=(N)=>{if(g++,p+=T.nodesPopped,e.onSearch?.(T),!N)return d.add(f),r.push(y),this.phase="select",void(this.pathSolver=void 0);i[f]=HDe(y,N);let F=new Set;for(let H=1;H<N.length;H++)for(let{copper:z}of E(N[H-1],N[H]))F.add(z.spanIndex);for(let H of[...F].sort((z,Y)=>z-Y))l[H]++,m(H);F.size&&(l[f]++,m(f)),this.phase="select",this.pathSolver=void 0}},this.phase="coppers"},this.phase="select",this.updateWorkStats()},this.phase="spans"}getOutput(){if(!this.solved||this.failed||!this.output)throw Error("repair04: negotiated clearance output requested before completion");return this.output}getResult(){return this.getOutput()}},ODe=256,lE=0.25;function zDe(e,t,n,o){let i=t.x-e.x,r=t.y-e.y,s=o.x-n.x,a=o.y-n.y,c=e.x-n.x,l=e.y-n.y,d=i*i+r*r,u=i*s+r*a,h=s*s+a*a,A=i*c+r*l,m=s*c+a*l,p=d*h-u*u,g=p>0.000000000000001?Math.max(0,Math.min(1,(u*m-h*A)/p)):0;h<0.000000000000001&&(g=d>0.000000000000001?Math.max(0,Math.min(1,-A/d)):0);let _=h>0.000000000000001?(u*g+m)/h:0;_<0?(_=0,g=d>0.000000000000001?Math.max(0,Math.min(1,-A/d)):0):_>1&&(_=1,g=d>0.000000000000001?Math.max(0,Math.min(1,(u-A)/d)):0);let f=e.x+g*i-n.x-_*s,y=e.y+g*r-n.y-_*a;return{s:g,t:_,x:f,y,distance:ATt(f,y)}}function aDo(e,t){let n={x:0,y:0,depth:1/0};for(let o=0;o<t.length;o++){let i=t[o],r=t[(o+1)%t.length],s=r.x-i.x,a=r.y-i.y,c=ATt(s,a),l=a/c,d=-s/c,u=-((e.x-i.x)*l+(e.y-i.y)*d);if(u<0)return null;u<n.depth&&(n={x:l,y:d,depth:u})}return n}var cDo=class extends Js{input;phase="geometry";routes=[];nets=new Map;vertices=new Map;segments=[];pairs=[];padContacts=[];viaPadConstraints=new Map;traceClearance=0.1;viaClearance=0.1;pairOuterIndex=0;pairInnerIndex=1;obstacleIndex=0;sweepIndex=0;sweepPairIndex=0;sweepPadIndex=0;preparedPairCount=0;projectedConstraintCount=0;constructor(e){super(),this.input=e,this.MAX_ITERATIONS=1024}prepareGeometry(){let e=this.input,t=structuredClone(e.routes),n=sfe(e.srj,t),o=e.traceClearance??0.1,i=e.viaClearance??0.1,r={minX:e.bounds.minX+e.boundaryMargin,maxX:e.bounds.maxX-e.boundaryMargin,minY:e.bounds.minY+e.boundaryMargin,maxY:e.bounds.maxY-e.boundaryMargin},s=pTt(e.srj,t,e.bounds),a=new Map,c=t.map((h,A)=>h.route.map((m,p)=>{let g=`${n.get(h.connectionName)}:${m.x}:${m.y}`,_=a.get(g);return _||(_={x:m.x,y:m.y,original:{x:m.x,y:m.y},locked:!1,radius:0,revision:0,bounds:r,points:[]},a.set(g,_)),_.points.push(m),_.locked||=Boolean(e.lockedPointIndices[A][p]||s[A].segmentTimes.has(p)||s[A].segmentTimes.has(p-1)||s[A].viaPositions.some((f)=>Math.hypot(f.x-m.x,f.y-m.y)<=ii)||p===0||p===h.route.length-1||m.pcb_port_id||m.insideJumperPad||m.toNextSegmentType||m.x<=r.minX||m.x>=r.maxX||m.y<=r.minY||m.y>=r.maxY),_})),l=[];for(let h=0;h<t.length;h++){let A=t[h];for(let m=1;m<A.route.length;m++){let p=A.route[m-1],g=A.route[m];if(p.toNextSegmentType||p.insideJumperPad||g.insideJumperPad)continue;let _=c[h][m-1],f=c[h][m],y=p.z!==g.z;y&&e.allowViaMovement!==!0&&(_.locked=f.locked=!0),l.push({a:_,b:f,initialBounds:{minX:Math.min(_.x,f.x),maxX:Math.max(_.x,f.x),minY:Math.min(_.y,f.y),maxY:Math.max(_.y,f.y)},...Kk(e.srj,p,g),radius:y?A.viaDiameter/2:Math.max(p.traceThickness??A.traceThickness,g.traceThickness??A.traceThickness)/2,net:n.get(A.connectionName),routeIndex:h,via:y})}}for(let h of l)h.a.radius=Math.max(h.a.radius,h.radius),h.b.radius=Math.max(h.b.radius,h.radius);if(e.boardEdgeClearance!==void 0){let h=e.srj.bounds;for(let A of a.values()){let m=A.radius+e.boardEdgeClearance;A.bounds={minX:Math.max(r.minX,Math.min(A.original.x,h.minX+m)),maxX:Math.min(r.maxX,Math.max(A.original.x,h.maxX-m)),minY:Math.max(r.minY,Math.min(A.original.y,h.minY+m)),maxY:Math.min(r.maxY,Math.max(A.original.y,h.maxY-m))}}}this.routes=t,this.nets=n,this.vertices=a,this.segments=l,this.traceClearance=o,this.viaClearance=i;let d=l.length*(l.length-1)/2,u=l.length*e.srj.obstacles.length;this.MAX_ITERATIONS=this.iterations+Math.ceil(d/4096)+Math.ceil(e.srj.obstacles.length/16)+ODe*Math.max(1,Math.ceil((d+u)/4096))+4,this.phase="pairs"}preparePairs(){let e=0;for(;e<4096&&this.pairOuterIndex<this.segments.length;){if(this.pairInnerIndex>=this.segments.length){this.pairOuterIndex++,this.pairInnerIndex=this.pairOuterIndex+1;continue}let t=this.segments[this.pairOuterIndex],n=this.segments[this.pairInnerIndex++];if(e++,this.preparedPairCount++,t.net===n.net||t.maxZ<n.minZ||n.maxZ<t.minZ)continue;let o=t.radius+n.radius+Math.max(this.traceClearance,this.viaClearance)+2*Math.SQRT2*lE;gvt(t.initialBounds,n.initialBounds,o)||Um(t.a,t.b,n.a,n.b)<=o&&this.pairs.push({a:t,b:n,revisions:[-1,-1,-1,-1],contact:null})}this.pairOuterIndex>=this.segments.length&&(this.phase="obstacles"),this.stats={...this.stats,preparedPairCount:this.preparedPairCount,pairCount:this.pairs.length,lastPreparedPairBatchCount:e}}prepareObstacles(){let{input:e,nets:t,segments:n,traceClearance:o,viaClearance:i,padContacts:r,viaPadConstraints:s}=this,a=0;for(;a<16&&this.obstacleIndex<e.srj.obstacles.length;){let c=e.srj.obstacles[this.obstacleIndex++];a++;let l=(c.ccwRotationDegrees??0)*Math.PI/180,d=Math.cos(l),u=Math.sin(l),h=new Set(c.connectedTo.map((g)=>t.get(g)??g)),A=c.__zLayers??c.zLayers??c.layers.map((g)=>g==="top"?0:g==="bottom"?e.srj.layerCount-1:Number(g.slice(5))),m=[[-1,-1],[1,-1],[1,1],[-1,1]].map(([g,_])=>({x:c.center.x+d*g*c.width/2-u*_*c.height/2,y:c.center.y+u*g*c.width/2+d*_*c.height/2})),p={minX:Math.min(...m.map((g)=>g.x)),maxX:Math.max(...m.map((g)=>g.x)),minY:Math.min(...m.map((g)=>g.y)),maxY:Math.max(...m.map((g)=>g.y))};for(let g of n){if(!g.via&&h.has(g.net)||!A.some((y)=>y>=g.minZ&&y<=g.maxZ))continue;let _=g.radius+Math.max(o,i,e.srj.defaultObstacleMargin??0,e.srj.minTraceToPadEdgeClearance??0,e.srj.minTraceToHoleEdgeClearance??0,e.srj.minViaEdgeToPadEdgeClearance??0)+Math.SQRT2*lE;if(gvt(g.initialBounds,p,_))continue;if(Math.min(...m.map((y,x)=>Um(g.a,g.b,y,m[(x+1)%4])))>_)continue;let f=g.radius+(g.via?jke(e.srj,i,h.has(g.net)):c.isNonPlatedHole&&e.srj.minTraceToHoleEdgeClearance!==void 0?e.srj.minTraceToHoleEdgeClearance:Math.max(o,e.srj.defaultObstacleMargin??0,e.srj.minTraceToPadEdgeClearance??0));if(r.push({segment:g,corners:m,required:f,revisions:[-1,-1],contact:null}),g.via){let y={center:c.center,cosine:d,sine:u,shape:rfe(c),clearance:f},x=g.a.original.x-c.center.x,C=g.a.original.y-c.center.y,I={x:x*d+C*u,y:-x*u+C*d};y.clearance=Math.min(y.clearance,eU(I,I,y.shape));for(let b of new Set([g.a,g.b])){let P=s.get(b);P?P.push(y):s.set(b,[y])}}}}this.stats={...this.stats,preparedObstacleCount:this.obstacleIndex,padContactCount:this.padContacts.length,lastPreparedObstacleBatchCount:a},this.obstacleIndex===e.srj.obstacles.length&&(this.MAX_ITERATIONS=this.iterations+ODe*Math.max(1,Math.ceil((this.pairs.length+this.padContacts.length)/4096))+2,this.phase="sweeps")}project(e,t,n,o,i){let r=this.viaPadConstraints,s=new Map;for(let[l,d]of e)l.locked||s.set(l,(s.get(l)??0)+d);let a=[...s.values()].reduce((l,d)=>l+d*d,0);if(a<0.000000000000001)return;let c=Math.min(0.05,0.7*o)/a;for(let[l,d]of s){let u=Math.max(l.bounds.minX,l.original.x-lE,Math.min(l.bounds.maxX,l.original.x+lE,l.x+t*c*d)),h=Math.max(l.bounds.minY,l.original.y-lE,Math.min(l.bounds.maxY,l.original.y+lE,l.y+n*c*d)),A=r.get(l);if(A?.some((m)=>this.getViaPadDistance({x:u,y:h},m)<m.clearance)){if(!i)continue;let m=this.constrainViaDisplacement(l,{x:u,y:h},A);u=m.x,h=m.y}A?.some((m)=>this.getViaPadDistance({x:u,y:h},m)<m.clearance)||(l.x===u&&l.y===h||l.revision++,l.x=u,l.y=h)}}getViaPadDistance(e,t){let n=e.x-t.center.x,o=e.y-t.center.y,i={x:n*t.cosine+o*t.sine,y:-n*t.sine+o*t.cosine};return eU(i,i,t.shape)}constrainViaDisplacement(e,t,n){let o=t.x-e.x,i=t.y-e.y,r=[];for(let c of n){if(this.getViaPadDistance(t,c)>=c.clearance)continue;let l=e.x-c.center.x,d=e.y-c.center.y,u={x:l*c.cosine+d*c.sine,y:-l*c.sine+d*c.cosine},h;if(c.shape.type==="rect"){let g=c.shape.bounds;h={x:Math.max(g.minX,Math.min(g.maxX,u.x)),y:Math.max(g.minY,Math.min(g.maxY,u.y))}}else{let{a:g,b:_}=c.shape,f=_.x-g.x,y=_.y-g.y,x=f*f+y*y,C=x>0?Math.max(0,Math.min(1,((u.x-g.x)*f+(u.y-g.y)*y)/x)):0;h={x:g.x+C*f,y:g.y+C*y}}let A=u.x-h.x,m=u.y-h.y,p={x:A*c.cosine-m*c.sine,y:A*c.sine+m*c.cosine};p.x*p.x+p.y*p.y>0.00000000000000000001&&r.push(p)}let s={x:0,y:0},a=o*o+i*i;for(let c of r){let l=o*c.x+i*c.y,d=c.x*c.x+c.y*c.y,u=this.shortenDisplacement(e,{x:o-c.x*l/d,y:i-c.y*l/d});if(r.some((A)=>u.x*A.x+u.y*A.y<-0.000000000000001))continue;let h=(u.x-o)**2+(u.y-i)**2;h<a&&(s=u,a=h)}return this.compensateTangentRounding(e,s,n,r)}shortenDisplacement(e,t){let n=Math.max(e.bounds.minX,e.original.x-lE),o=Math.min(e.bounds.maxX,e.original.x+lE),i=Math.max(e.bounds.minY,e.original.y-lE),r=Math.min(e.bounds.maxY,e.original.y+lE),s=1;return t.x>0&&(s=Math.min(s,(o-e.x)/t.x)),t.x<0&&(s=Math.min(s,(n-e.x)/t.x)),t.y>0&&(s=Math.min(s,(r-e.y)/t.y)),t.y<0&&(s=Math.min(s,(i-e.y)/t.y)),{x:Math.max(n,Math.min(o,e.x+t.x*s))-e.x,y:Math.max(i,Math.min(r,e.y+t.y*s))-e.y}}compensateTangentRounding(e,t,n,o){let i={x:e.x+t.x,y:e.y+t.y},r=n.reduce((A,m)=>Math.max(A,Math.abs(m.center.x),Math.abs(m.center.y),m.clearance),Math.max(1,Math.abs(e.x),Math.abs(e.y),Math.abs(i.x),Math.abs(i.y))),s=32*Number.EPSILON*r,a=n.map((A)=>this.getViaPadDistance(i,A));if(a.every((A,m)=>A>=n[m].clearance)||a.some((A,m)=>A<n[m].clearance-s))return i;let c=o.map((A)=>{let m=Math.hypot(A.x,A.y);return{x:A.x/m,y:A.y/m}}),l={x:0,y:0};for(let A of c)for(let m of[A,{x:-A.y,y:A.x},{x:A.y,y:-A.x}])c.some((p)=>m.x*p.x+m.y*p.y<-0.000000000000001)||(l.x+=m.x,l.y+=m.y);let d=Math.hypot(l.x,l.y);if(d<0.000000000000001)return i;let u=this.shortenDisplacement(e,{x:t.x+l.x*s/d,y:t.y+l.y*s/d}),h={x:e.x+u.x,y:e.y+u.y};return n.every((A)=>this.getViaPadDistance(h,A)>=A.clearance)?h:i}projectPair(e){let{a:t,b:n,revisions:o}=e;t.a.revision===o[0]&&t.b.revision===o[1]&&n.a.revision===o[2]&&n.b.revision===o[3]||(e.contact=zDe(t.a,t.b,n.a,n.b),o[0]=t.a.revision,o[1]=t.b.revision,o[2]=n.a.revision,o[3]=n.b.revision);let i=e.contact,r=t.radius+n.radius+(t.via&&n.via?this.viaClearance:this.traceClearance);i.distance>=r||i.distance<0.0000000001||this.project([[t.a,1-i.s],[t.b,i.s],[n.a,i.t-1],[n.b,-i.t]],i.x/i.distance,i.y/i.distance,r-i.distance,t.via&&n.via)}projectPad(e){let{segment:t,corners:n,required:o}=e,i=t.a===t.b?1:2;for(let s=0;s<i;s++){let a=s===0?t.a:t.b,c=aDo(a,n);c&&this.project([[a,1]],c.x,c.y,o+c.depth,!1)}if(t.a.revision!==e.revisions[0]||t.b.revision!==e.revisions[1]){let s=zDe(t.a,t.b,n[0],n[1]);for(let a=1;a<n.length;a++){let c=zDe(t.a,t.b,n[a],n[(a+1)%n.length]);s=s.distance<c.distance?s:c}e.contact=s,e.revisions[0]=t.a.revision,e.revisions[1]=t.b.revision}let r=e.contact;r.distance<0.0000000001||r.distance>=o||this.project([[t.a,1-r.s],[t.b,r.s]],r.x/r.distance,r.y/r.distance,o-r.distance,!1)}stepSweep(){let e=0;for(;e<4096&&this.sweepPairIndex<this.pairs.length;)this.projectPair(this.pairs[this.sweepPairIndex++]),e++;for(;e<4096&&this.sweepPairIndex===this.pairs.length&&this.sweepPadIndex<this.padContacts.length;)this.projectPad(this.padContacts[this.sweepPadIndex++]),e++;this.projectedConstraintCount+=e,this.sweepPairIndex===this.pairs.length&&this.sweepPadIndex===this.padContacts.length&&(this.sweepIndex++,this.sweepPairIndex=0,this.sweepPadIndex=0,this.sweepIndex===ODe&&(this.phase="finalize")),this.progress=this.sweepIndex/257,this.stats={...this.stats,sweepCount:this.sweepIndex,projectedConstraintCount:this.projectedConstraintCount,lastProjectedConstraintBatchCount:e}}finalizeRoutes(){let{vertices:e,routes:t}=this;for(let n of e.values())for(let o of n.points)o.x=n.x,o.y=n.y;for(let n of t){n.vias=[];for(let o=1;o<n.route.length;o++){let i=n.route[o-1],r=n.route[o];i.z===r.z||i.toNextSegmentType==="through_obstacle"||n.vias.some((s)=>s.x===r.x&&s.y===r.y)||n.vias.push({x:r.x,y:r.y})}}this.solved=!0,this.progress=1}_step(){switch(this.phase){case"geometry":return this.prepareGeometry();case"pairs":return this.preparePairs();case"obstacles":return this.prepareObstacles();case"sweeps":return this.stepSweep();case"finalize":return this.finalizeRoutes()}}getOutput(){if(!this.solved||this.failed)throw Error("Trace clearance projection is not complete");return this.routes}getResult(){return this.getOutput()}},$_e={};Vge($_e,{all_layers:()=>QE,any_circuit_element:()=>UQt,any_soup_element:()=>ege,any_source_component:()=>qTt,asset:()=>Ute,base_circuit_json_error:()=>Ua,battery_capacity:()=>xTt,brep_shape:()=>pFe,cadModelDefaultDirectionMap:()=>XDo,cad_cable:()=>cQt,cad_collision_error:()=>aQt,cad_component:()=>sQt,cad_model_axis_directions:()=>rQt,cad_model_formats:()=>WDo,cad_reference_surface:()=>dQt,capacitance:()=>LLe,circle_shape:()=>FLe,circuit_json_footprint_load_error:()=>wRt,current:()=>G8,distance:()=>xn,duration_ms:()=>EU,experiment_type:()=>gQt,external_footprint_load_error:()=>BRt,frequency:()=>_L,getRotationBetweenPcbPin1Locations:()=>xDo,getSimulationReturnCurrentGridJsonSchema:()=>JDo,getZodPrefixedIdWithDefault:()=>gn,inductance:()=>fTt,insertionDirectionToCanonical:()=>$Dt,insertionDirectionToVector:()=>fDo,insertion_direction:()=>ZDt,kicadAt:()=>dfe,kicadEffects:()=>CTt,kicadFont:()=>OLe,kicadFootprintAttributes:()=>bTt,kicadFootprintMetadata:()=>vTt,kicadFootprintModel:()=>PTt,kicadFootprintPad:()=>STt,kicadFootprintProperties:()=>ITt,kicadProperty:()=>aee,kicadSymbolEffects:()=>BTt,kicadSymbolMetadata:()=>TTt,kicadSymbolPinNames:()=>MTt,kicadSymbolPinNumbers:()=>ETt,kicadSymbolProperties:()=>wTt,kicadSymbolProperty:()=>P8,layer_ref:()=>Er,layer_string:()=>oQe,length:()=>Lo,manufacturing_drc_properties:()=>nNt,ms:()=>Hp,ninePointAnchor:()=>Y6,parseAndConvertSiUnit:()=>LI,pcbRenderLayer:()=>ADo,pcb_autorouting_error:()=>DRt,pcb_bend:()=>GNt,pcb_board:()=>zNt,pcb_breakout_point:()=>HRt,pcb_bus_length_skew_error:()=>wNt,pcb_bus_routing_constraint_error:()=>NNt,pcb_bus_routing_constraint_warning:()=>RNt,pcb_component:()=>oNt,pcb_component_invalid_layer_error:()=>jRt,pcb_component_missing_courtyard_warning:()=>kRt,pcb_component_not_on_board_edge_error:()=>KRt,pcb_component_outside_board_error:()=>XRt,pcb_connector_not_in_accessible_orientation_warning:()=>QRt,pcb_copper_pour:()=>WRt,pcb_copper_pour_brep:()=>VRt,pcb_copper_pour_polygon:()=>URt,pcb_copper_pour_rect:()=>YRt,pcb_copper_text:()=>nRt,pcb_courtyard_circle:()=>oQt,pcb_courtyard_outline:()=>tQt,pcb_courtyard_overlap_error:()=>yRt,pcb_courtyard_pill:()=>iQt,pcb_courtyard_polygon:()=>nQt,pcb_courtyard_rect:()=>eQt,pcb_cutout:()=>ERt,pcb_cutout_circle:()=>SRt,pcb_cutout_path:()=>vRt,pcb_cutout_polygon:()=>PRt,pcb_cutout_rect:()=>bRt,pcb_debug_line:()=>rNt,pcb_debug_object:()=>aNt,pcb_debug_object_base:()=>mfe,pcb_debug_point:()=>sNt,pcb_debug_rect:()=>iNt,pcb_fabrication_note_dimension:()=>hRt,pcb_fabrication_note_path:()=>dRt,pcb_fabrication_note_rect:()=>uRt,pcb_fabrication_note_text:()=>lRt,pcb_fabricator_extra_charge_warning:()=>FRt,pcb_footprint_overlap_error:()=>fRt,pcb_ground_plane:()=>ORt,pcb_ground_plane_region:()=>zRt,pcb_group:()=>TRt,pcb_hole:()=>pNt,pcb_hole_circle_or_square_shape:()=>SDo,pcb_hole_circle_shape:()=>IDo,pcb_hole_oval_shape:()=>PDo,pcb_hole_pill_shape:()=>vDo,pcb_hole_rect_shape:()=>bDo,pcb_hole_rotated_pill_shape:()=>EDo,pcb_keepout:()=>CRt,pcb_keepout_outline:()=>xRt,pcb_keepout_overlap_warning:()=>IRt,pcb_manual_edit_conflict_warning:()=>RRt,pcb_missing_footprint_error:()=>MRt,pcb_net:()=>HNt,pcb_note_dimension:()=>gRt,pcb_note_line:()=>_Rt,pcb_note_path:()=>ARt,pcb_note_rect:()=>pRt,pcb_note_text:()=>mRt,pcb_packing_error:()=>qNt,pcb_pad_pad_clearance_error:()=>$Rt,pcb_pad_trace_clearance_error:()=>ZRt,pcb_panel:()=>KNt,pcb_panelization_placement_error:()=>JNt,pcb_pin1_location:()=>rQe,pcb_placement_error:()=>jNt,pcb_plated_hole:()=>ANt,pcb_port:()=>_Nt,pcb_port_not_connected_error:()=>FNt,pcb_port_not_matched_error:()=>LNt,pcb_preflight_routing_error:()=>NRt,pcb_route_hint:()=>eNt,pcb_route_hints:()=>CDo,pcb_silkscreen_circle:()=>iRt,pcb_silkscreen_graphic:()=>aRt,pcb_silkscreen_graphic_brep:()=>sRt,pcb_silkscreen_line:()=>ZNt,pcb_silkscreen_oval:()=>rRt,pcb_silkscreen_path:()=>eRt,pcb_silkscreen_pill:()=>cRt,pcb_silkscreen_rect:()=>oRt,pcb_silkscreen_text:()=>tRt,pcb_smtpad:()=>fNt,pcb_smtpad_pill:()=>gNt,pcb_solder_paste:()=>yNt,pcb_soldermask_opening:()=>xNt,pcb_stiffener:()=>XNt,pcb_stiffener_polygon:()=>WNt,pcb_stiffener_rect:()=>UNt,pcb_text:()=>CNt,pcb_thermal_spoke:()=>GRt,pcb_trace:()=>vNt,pcb_trace_error:()=>QNt,pcb_trace_hint:()=>$Nt,pcb_trace_missing_error:()=>kNt,pcb_trace_route_point:()=>PNt,pcb_trace_route_point_through_pad:()=>SNt,pcb_trace_route_point_via:()=>bNt,pcb_trace_route_point_wire:()=>INt,pcb_trace_style_warning:()=>MNt,pcb_trace_too_long_error:()=>BNt,pcb_trace_too_long_warning:()=>TNt,pcb_trace_too_many_vias_warning:()=>DNt,pcb_trace_warning:()=>ENt,pcb_via:()=>ONt,pcb_via_clearance_error:()=>qRt,pcb_via_trace_clearance_error:()=>JRt,point:()=>Ko,point3:()=>QI,point_with_bulge:()=>JDt,polygon_shape:()=>mte,port_arrangement:()=>CDt,position:()=>hDo,position3:()=>mDo,rect_shape:()=>lfe,resistance:()=>afe,ring:()=>iQe,rotated_rect_shape:()=>HLe,rotation:()=>od,route_hint_point:()=>tNt,schematic_arc:()=>EDt,schematic_box:()=>_Dt,schematic_circle:()=>vDt,schematic_component:()=>IDt,schematic_component_overlap_warning:()=>ODt,schematic_component_port_arrangement_by_sides:()=>xDt,schematic_component_port_arrangement_by_size:()=>yDt,schematic_component_styling_warning:()=>zDt,schematic_debug_line:()=>QDt,schematic_debug_object:()=>LDt,schematic_debug_object_base:()=>hfe,schematic_debug_point:()=>kDt,schematic_debug_rect:()=>RDt,schematic_element_outside_sheet_warning:()=>YDt,schematic_error:()=>DDt,schematic_graphic:()=>VDt,schematic_group:()=>UDt,schematic_layout_error:()=>NDt,schematic_line:()=>SDt,schematic_manual_edit_conflict_warning:()=>HDt,schematic_missing_sheet_warning:()=>qDt,schematic_net_label:()=>TDt,schematic_path:()=>gDt,schematic_pin_styles:()=>fDt,schematic_port:()=>wDt,schematic_rect:()=>PDt,schematic_sheet:()=>jDt,schematic_sheet_size:()=>KDt,schematic_sheet_styling_warning:()=>GDt,schematic_symbol:()=>bDt,schematic_table:()=>WDt,schematic_table_cell:()=>XDt,schematic_text:()=>BDt,schematic_text_part:()=>mFe,schematic_trace:()=>MDt,schematic_voltage_probe:()=>FDt,simulation_ac_current_source:()=>AQt,simulation_ac_sweep_current_graph:()=>DQt,simulation_ac_sweep_voltage_graph:()=>TQt,simulation_ac_voltage_source:()=>hQt,simulation_complex_sample:()=>fFe,simulation_current_probe:()=>SQt,simulation_current_source:()=>_Qt,simulation_dc_current_source:()=>pQt,simulation_dc_operating_point_current:()=>MQt,simulation_dc_operating_point_voltage:()=>EQt,simulation_dc_sweep_current_graph:()=>wQt,simulation_dc_sweep_unit:()=>Afe,simulation_dc_sweep_voltage_graph:()=>BQt,simulation_dc_voltage_source:()=>uQt,simulation_experiment:()=>yQt,simulation_op_amp:()=>NQt,simulation_oscilloscope_trace:()=>QQt,simulation_parameter_sweep:()=>vQt,simulation_parameter_sweep_coordinate:()=>V6,simulation_parameter_type:()=>qDo,simulation_parameter_unit:()=>gFe,simulation_pcb_return_current_field:()=>zQt,simulation_pcb_return_current_heatmap:()=>YQt,simulation_pcb_return_current_marker:()=>VQt,simulation_pcb_return_current_result:()=>LQt,simulation_return_current_contact:()=>aQe,simulation_return_current_excitation:()=>kQt,simulation_return_current_field_asset:()=>HQt,simulation_return_current_grid_json:()=>GQt,simulation_return_current_image_asset:()=>OQt,simulation_spice_subcircuit:()=>RQt,simulation_switch:()=>IQt,simulation_terminal_port:()=>cQe,simulation_transient_current_graph:()=>CQt,simulation_transient_voltage_graph:()=>xQt,simulation_unknown_experiment_error:()=>PQt,simulation_voltage_probe:()=>bQt,simulation_voltage_source:()=>mQt,size:()=>cfe,source_ambiguous_port_reference:()=>oDt,source_board:()=>nDt,source_bus:()=>pDt,source_component_availability_warning:()=>dFe,source_component_base:()=>Pl,source_component_internal_connection:()=>$Tt,source_component_misconfigured_error:()=>hFe,source_component_pins_underspecified_warning:()=>lDt,source_confusing_net_name_warning:()=>mDt,source_failed_to_create_component_error:()=>UTt,source_group:()=>eDt,source_i2c_misconfigured_error:()=>uFe,source_interconnect:()=>KTt,source_invalid_component_property_error:()=>rFe,source_manually_placed_via:()=>rDt,source_missing_manufacturer_part_number_warning:()=>cFe,source_missing_property_error:()=>VTt,source_motor:()=>kTt,source_net:()=>tDt,source_no_ground_pin_defined_warning:()=>cDt,source_no_power_pin_defined_warning:()=>aDt,source_part_not_found_warning:()=>hDt,source_pcb_ground_plane:()=>iDt,source_pin_attributes:()=>OTt,source_pin_missing_trace_warning:()=>aFe,source_pin_must_be_connected_error:()=>dDt,source_port:()=>JTt,source_printed_part:()=>RTt,source_project_metadata:()=>iFe,source_property_ignored_warning:()=>WTt,source_refdes_convention_warning:()=>lFe,source_runtime_error:()=>ADt,source_simple_ammeter:()=>HTt,source_simple_battery:()=>WLe,source_simple_capacitor:()=>zLe,source_simple_chip:()=>VLe,source_simple_connector:()=>YTt,source_simple_connector_standards:()=>GTt,source_simple_crystal:()=>zTt,source_simple_current_source:()=>LTt,source_simple_diode:()=>ufe,source_simple_fiducial:()=>DTt,source_simple_fuse:()=>FTt,source_simple_ground:()=>NTt,source_simple_inductor:()=>XLe,source_simple_led:()=>YLe,source_simple_mosfet:()=>tFe,source_simple_op_amp:()=>nFe,source_simple_pin_header:()=>qLe,source_simple_pinout:()=>JLe,source_simple_potentiometer:()=>jLe,source_simple_power_source:()=>ULe,source_simple_push_button:()=>KLe,source_simple_resistor:()=>GLe,source_simple_resonator:()=>$Le,source_simple_switch:()=>oFe,source_simple_test_point:()=>eFe,source_simple_transistor:()=>ZLe,source_simple_voltage_probe:()=>XTt,source_simple_voltage_source:()=>jTt,source_subassembly:()=>QTt,source_trace:()=>ZTt,source_trace_not_connected_error:()=>sFe,source_unnamed_trace_warning:()=>sDt,spice_simulation_options:()=>fQt,standard_shape:()=>pDo,supplier_footprint_mismatch_warning:()=>LRt,supplier_name:()=>MU,time:()=>uDo,timestamp:()=>yTt,unknown_error_finding_part:()=>uDt,visible_layer:()=>Wm,voltage:()=>FI,wave_shape:()=>_Fe});var Z_e=(e)=>{let t=Math.round(1000*e)/1000;return`${Number(t.toFixed(3))}mm`},_Tt=new Map([["T",1000000000000],["G",1e9],["M",1e6],["K",1000],["k",1000],["",1],["m",0.001],["µ",0.000001],["μ",0.000001],["u",0.000001],["n",0.000000001],["p",0.000000000001],["f",0.000000000000001]]),lDo=[..._Tt.keys()];function fvt(e){return _Tt.get(e)}var gTt={Hz:{baseUnit:"Hz",variants:{MHz:1e6,kHz:1000,Hz:1}},g:{baseUnit:"g",variants:{kg:1000,g:1}},"Ω":{baseUnit:"Ω",variants:{"mΩ":0.001,mohm:0.001,mOhm:0.001,milliohm:0.001,"Ω":1,ohm:1,Ohm:1,"kΩ":1000,"KΩ":1000,kohm:1000,kOhm:1000,KOhm:1000,Kohm:1000,"MΩ":1e6,Mohm:1e6,MOhm:1e6,megohm:1e6,Megohm:1e6,"GΩ":1e9,Gohm:1e9,GOhm:1e9,"TΩ":1000000000000,Tohm:1000000000000,TOhm:1000000000000}},V:{baseUnit:"V",variants:{mV:0.001,V:1,kV:1000,KV:1000,MV:1e6,GV:1e9,TV:1000000000000}},A:{baseUnit:"A",variants:{"µA":0.000001,"μA":0.000001,mA:0.001,ma:0.001,A:1,kA:1000,MA:1e6}},F:{baseUnit:"F",variants:{pF:0.000000000001,nF:0.000000001,"µF":0.000001,"μF":0.000001,uF:0.000001,mF:0.001,F:1,kF:1000,KF:1000,MF:1e6}},H:{baseUnit:"H",variants:{pH:0.000000000001,nH:0.000000001,"µH":0.000001,"μH":0.000001,uH:0.000001,mH:0.001,H:1,kH:1000,KH:1000,MH:1e6}},ml:{baseUnit:"ml",variants:{ml:1,mL:1,l:1000,L:1000}},deg:{baseUnit:"deg",variants:{rad:180/Math.PI}},ms:{baseUnit:"ms",variants:{fs:0.000000000001,ps:0.000000001,ns:0.000001,us:0.001,"µs":0.001,"μs":0.001,ms:1,s:1000}},mm:{baseUnit:"mm",variants:{nm:0.000001,"µm":0.001,"μm":0.001,um:0.001,mm:1,cm:10,dm:100,m:1000,km:1e6,in:25.4,ft:304.8,IN:25.4,FT:304.8,yd:914.4,mi:1609344,mil:0.0254}}},tQe=new Set;for(let[e,t]of Object.entries(gTt)){tQe.add(e);for(let n of Object.keys(t.variants))tQe.add(n)}function LI(e,t){if(e==null)return{parsedUnit:null,unitOfValue:null,value:null};if(typeof e=="string"&&e.match(/^-?[\d.]+$/))return{value:Number.parseFloat(e),parsedUnit:null,unitOfValue:null};if(typeof e=="number")return{value:e,parsedUnit:null,unitOfValue:null};if(typeof e=="object"&&"x"in e&&"y"in e){let l=LI(e.x,t),d=LI(e.x,t),u=LI(e.y,t);return d.value===null||u.value===null?{parsedUnit:null,unitOfValue:null,value:null}:{parsedUnit:l.parsedUnit,unitOfValue:l.unitOfValue,value:{x:d.value,y:u.value}}}let n=e.toString().split("").reverse().join(""),o=n.match(/[^\d\s]+/)?.[0];if(!o)throw Error(`Could not determine unit: "${e}"`);let i=o.split("").reverse().join(""),r=e.slice(0,-i.length),s=fvt(i);if(t&&s!=null)return{parsedUnit:null,unitOfValue:t,value:Number.parseFloat(r)*s};if(s!=null&&!tQe.has(i))return{parsedUnit:null,unitOfValue:null,value:Number.parseFloat(r)*s};let{baseUnit:a,conversionFactor:c}=function(l){for(let d of Object.values(gTt)){if(l in d.variants)return{baseUnit:d.baseUnit,conversionFactor:d.variants[l]};for(let[u,h]of Object.entries(d.variants)){if(!l.endsWith(u))continue;let A=fvt(l.slice(0,-u.length));if(A!=null)return{baseUnit:d.baseUnit,conversionFactor:A*h}}}return{baseUnit:l,conversionFactor:1}}(i);return{parsedUnit:i,unitOfValue:a,value:c*Number.parseFloat(r)}}var dDo=lDo.filter((e)=>e!=="").sort((e,t)=>t.length-e.length).map((e)=>e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")).join("|"),afe=(new RegExp(`^([+-]?(?:\\d+(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+)?)(?:(${dDo}))?$`),v.string().or(v.number()).transform((e)=>LI(e,"Ω").value)),LLe=v.string().or(v.number()).transform((e)=>LI(e,"F").value).transform((e)=>Number.parseFloat(e.toPrecision(12))),fTt=v.string().or(v.number()).transform((e)=>LI(e,"H").value),FI=v.string().or(v.number()).transform((e)=>LI(e,"V").value),Lo=v.string().or(v.number()).transform((e)=>LI(e).value),_L=v.string().or(v.number()).transform((e)=>LI(e,"Hz").value),xn=Lo,G8=v.string().or(v.number()).transform((e)=>LI(e,"A").value),EU=v.string().or(v.number()).transform((e)=>LI(e).value),uDo=EU,Hp=EU,yTt=v.string().datetime(),od=v.string().or(v.number()).transform((e)=>typeof e=="number"?e:e.endsWith("deg")?Number.parseFloat(e.split("deg")[0]):e.endsWith("rad")?180*Number.parseFloat(e.split("rad")[0])/Math.PI:Number.parseFloat(e)),xTt=v.number().or(v.string().endsWith("mAh")).transform((e)=>{if(typeof e=="string"){let t=e.replace("mAh",""),n=Number.parseFloat(t);if(Number.isNaN(n))throw Error("Invalid capacity");return n}return e}).describe("Battery capacity in mAh"),Ko=v.object({x:xn,y:xn}),hDo=Ko,QI=v.object({x:xn,y:xn,z:xn}),mDo=QI,cfe=v.object({width:v.number(),height:v.number()}),tU=xn.pipe(v.number().finite()),nQe=xn.pipe(v.number().finite().positive()),FLe=v.object({shape:v.literal("circle"),x:tU,y:tU,radius:nQe}).strict(),lfe=v.object({shape:v.literal("rect"),x:tU,y:tU,width:nQe,height:nQe}).strict(),HLe=lfe.extend({shape:v.literal("rotated_rect"),ccw_rotation:od.pipe(v.number().finite())}),mte=v.object({shape:v.literal("polygon"),points:v.array(Ko.extend({x:tU,y:tU})).min(3).refine((e)=>{let t=e.reduce((n,o,i)=>{let r=e[(i+1)%e.length];return n+o.x*r.y-r.x*o.y},0);return Number.isFinite(t)&&t!==0},"Polygon boundary must enclose a nonzero area")}).strict(),pDo=v.discriminatedUnion("shape",[FLe,lfe,HLe,mte]),gn=(e)=>v.string().optional().default(()=>`${e}_${((t)=>Array.from({length:t},()=>"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"[Math.floor(62*Math.random())]).join(""))(10)}`),Y6=v.enum(["top_left","top_center","top_right","center_left","center","center_right","bottom_left","bottom_center","bottom_right"]),ADo=v.enum(["top_silkscreen","bottom_silkscreen","top_copper","bottom_copper","top_soldermask","bottom_soldermask","top_fabrication_note","bottom_fabrication_note","top_user_note","bottom_user_note","top_courtyard","bottom_courtyard","inner1_copper","inner2_copper","inner3_copper","inner4_copper","inner5_copper","inner6_copper","inner7_copper","inner8_copper","edge_cuts","drill"]),Ute=v.object({project_relative_path:v.string(),url:v.string(),mimetype:v.string()}),dfe=Ko.extend({rotation:od.optional()}),OLe=v.object({size:Ko.optional(),thickness:xn.optional()}),CTt=v.object({font:OLe.optional()}),aee=v.object({value:v.string(),at:dfe.optional(),layer:v.string().optional(),uuid:v.string().optional(),hide:v.boolean().optional(),effects:CTt.optional()}),ITt=v.object({Reference:aee.optional(),Value:aee.optional(),Datasheet:aee.optional(),Description:aee.optional()}),bTt=v.object({through_hole:v.boolean().optional(),smd:v.boolean().optional(),exclude_from_pos_files:v.boolean().optional(),exclude_from_bom:v.boolean().optional()}),STt=v.object({name:v.string(),type:v.string(),shape:v.string().optional(),at:dfe.optional(),size:Ko.optional(),drill:xn.optional(),layers:v.array(v.string()).optional(),removeUnusedLayers:v.boolean().optional(),uuid:v.string().optional()}),PTt=v.object({path:v.string(),offset:QI.optional(),scale:QI.optional(),rotate:QI.optional()}),vTt=v.object({footprintName:v.string().optional(),version:v.union([v.number(),v.string()]).optional(),generator:v.string().optional(),generatorVersion:v.union([v.number(),v.string()]).optional(),layer:v.string().optional(),properties:ITt.optional(),attributes:bTt.optional(),pads:v.array(STt).optional(),embeddedFonts:v.boolean().optional(),model:PTt.optional()}),ETt=v.object({hide:v.boolean().optional()}),MTt=v.object({offset:xn.optional(),hide:v.boolean().optional()}),BTt=v.object({font:OLe.optional(),justify:v.union([v.string(),v.array(v.string())]).optional(),hide:v.boolean().optional()}),P8=v.object({value:v.string(),id:v.union([v.number(),v.string()]).optional(),at:dfe.optional(),effects:BTt.optional()}),wTt=v.object({Reference:P8.optional(),Value:P8.optional(),Footprint:P8.optional(),Datasheet:P8.optional(),Description:P8.optional(),ki_keywords:P8.optional(),ki_fp_filters:P8.optional()}),TTt=v.object({symbolName:v.string().optional(),extends:v.string().optional(),pinNumbers:ETt.optional(),pinNames:MTt.optional(),excludeFromSim:v.boolean().optional(),inBom:v.boolean().optional(),onBoard:v.boolean().optional(),properties:wTt.optional(),embeddedFonts:v.boolean().optional()}),Ua=v.object({error_type:v.string(),message:v.string(),is_fatal:v.boolean().optional()}),MU=v.enum(["jlcpcb","macrofab","pcbway","digikey","mouser","lcsc"]),Pl=v.object({type:v.literal("source_component"),ftype:v.string().optional(),source_component_id:v.string(),name:v.string(),manufacturer_part_number:v.string().optional(),supplier_part_numbers:v.record(MU,v.array(v.string())).optional(),display_value:v.string().optional(),display_name:v.string().optional(),are_pins_interchangeable:v.boolean().optional(),internally_connected_source_port_ids:v.array(v.array(v.string())).optional(),source_group_id:v.string().optional(),subcircuit_id:v.string().optional()}),zLe=Pl.extend({ftype:v.literal("simple_capacitor"),capacitance:LLe,max_voltage_rating:FI.optional(),display_capacitance:v.string().optional(),max_decoupling_trace_length:xn.optional()}),GLe=Pl.extend({ftype:v.literal("simple_resistor"),resistance:afe,display_resistance:v.string().optional()}),ufe=Pl.extend({ftype:v.literal("simple_diode")}),DTt=Pl.extend({ftype:v.literal("simple_fiducial")}),YLe=ufe.extend({ftype:v.literal("simple_led"),color:v.string().optional(),wavelength:v.string().optional()}),NTt=Pl.extend({ftype:v.literal("simple_ground")}),VLe=Pl.extend({ftype:v.literal("simple_chip")}),RTt=Pl.extend({ftype:v.literal("printedpart"),material:v.enum(["pla","petg","nylon"]).optional(),color:v.string().trim().min(1).optional()}),QTt=Pl.extend({ftype:v.literal("subassembly")}),kTt=Pl.extend({ftype:v.literal("motor")}),ULe=Pl.extend({ftype:v.literal("simple_power_source"),voltage:FI}),LTt=Pl.extend({ftype:v.literal("simple_current_source"),current:G8,frequency:_L.optional(),peak_to_peak_current:G8.optional(),wave_shape:v.enum(["sine","square","triangle","sawtooth","dc"]).optional().default("dc"),phase:v.number().optional(),duty_cycle:v.number().min(0).max(1).optional()}),FTt=Pl.extend({ftype:v.literal("simple_fuse"),current_rating_amps:v.number().describe("Nominal current in amps the fuse is rated for"),voltage_rating_volts:v.number().describe("Voltage rating in volts, e.g. ±5V would be 5")}),HTt=Pl.extend({ftype:v.literal("simple_ammeter")}),yvt=v.union([v.number(),v.string().trim().regex(/^[+-]?(?:\d+(?:\.\d*)?|\.\d+)(?:[eE][+-]?\d+)?\s*(?:[fpnumkKMGTµμ]?V?|V)?$/,"Expected a scalar voltage, optionally with SI units")]).pipe(FI).pipe(v.number().finite()),OTt=v.object({is_input:v.boolean().optional(),is_output:v.boolean().optional(),is_bidirectional:v.boolean().optional(),is_passive:v.boolean().optional(),can_use_tri_state:v.boolean().optional(),is_using_tri_state:v.boolean().optional(),can_use_open_collector:v.boolean().optional(),is_using_open_collector:v.boolean().optional(),can_use_open_emitter:v.boolean().optional(),is_using_open_emitter:v.boolean().optional(),is_gpio:v.boolean().optional(),highlight_color:v.string().optional(),must_be_connected:v.boolean().optional(),provides_power:v.boolean().optional(),requires_power:v.boolean().optional(),provides_ground:v.boolean().optional(),requires_ground:v.boolean().optional(),provides_voltage:yvt.optional(),requires_voltage:yvt.optional(),required_voltage_tolerance:v.number().finite().min(0).max(1).optional(),do_not_connect:v.boolean().optional(),include_in_board_pinout:v.boolean().optional(),can_use_internal_pullup:v.boolean().optional(),is_using_internal_pullup:v.boolean().optional(),needs_external_pullup:v.boolean().optional(),can_use_internal_pulldown:v.boolean().optional(),is_using_internal_pulldown:v.boolean().optional(),needs_external_pulldown:v.boolean().optional(),can_use_open_drain:v.boolean().optional(),is_using_open_drain:v.boolean().optional(),can_use_push_pull:v.boolean().optional(),is_using_push_pull:v.boolean().optional(),should_have_decoupling_capacitor:v.boolean().optional(),recommended_decoupling_capacitor_capacitance:v.union([v.string(),v.number()]).optional(),is_configured_for_i2c_sda:v.boolean().optional(),is_configured_for_i2c_scl:v.boolean().optional(),is_configured_for_spi_mosi:v.boolean().optional(),is_configured_for_spi_miso:v.boolean().optional(),is_configured_for_spi_sck:v.boolean().optional(),is_configured_for_spi_cs:v.boolean().optional(),is_configured_for_uart_tx:v.boolean().optional(),is_configured_for_uart_rx:v.boolean().optional(),supports_i2c_sda:v.boolean().optional(),supports_i2c_scl:v.boolean().optional(),supports_spi_mosi:v.boolean().optional(),supports_spi_miso:v.boolean().optional(),supports_spi_sck:v.boolean().optional(),supports_spi_cs:v.boolean().optional(),supports_uart_tx:v.boolean().optional(),supports_uart_rx:v.boolean().optional()}),WLe=Pl.extend({ftype:v.literal("simple_battery"),capacity:xTt}),XLe=Pl.extend({ftype:v.literal("simple_inductor"),inductance:fTt,display_inductance:v.string().optional(),max_current_rating:v.number().optional()}),KLe=Pl.extend({ftype:v.literal("simple_push_button")}),jLe=Pl.extend({ftype:v.literal("simple_potentiometer"),max_resistance:afe,display_max_resistance:v.string().optional()}),zTt=Pl.extend({ftype:v.literal("simple_crystal"),frequency:v.number().describe("Frequency in Hz"),load_capacitance:v.number().optional().describe("Load capacitance in pF"),pin_variant:v.enum(["two_pin","four_pin"]).optional()}),qLe=Pl.extend({ftype:v.literal("simple_pin_header"),pin_count:v.number(),gender:v.enum(["male","female"]).optional().default("male")}),GTt=["usb_c","m2","jst_sh","jst_gh","jst_zh","jst_ph","jst_xh","jst_vh"],YTt=Pl.extend({ftype:v.literal("simple_connector"),standard:v.enum(GTt).optional(),pin_count:v.number().int().positive().optional()}),JLe=Pl.extend({ftype:v.literal("simple_pinout")}),$Le=Pl.extend({ftype:v.literal("simple_resonator"),load_capacitance:LLe,equivalent_series_resistance:afe.optional(),frequency:_L}),ZLe=Pl.extend({ftype:v.literal("simple_transistor"),transistor_type:v.enum(["npn","pnp"])}),eFe=Pl.extend({ftype:v.literal("simple_test_point"),footprint_variant:v.enum(["pad","through_hole"]).optional(),pad_shape:v.enum(["rect","circle"]).optional(),pad_diameter:v.union([v.number(),v.string()]).optional(),hole_diameter:v.union([v.number(),v.string()]).optional(),width:v.union([v.number(),v.string()]).optional(),height:v.union([v.number(),v.string()]).optional()}),tFe=Pl.extend({ftype:v.literal("simple_mosfet"),channel_type:v.enum(["n","p"]),mosfet_mode:v.enum(["enhancement","depletion"])}),nFe=Pl.extend({ftype:v.literal("simple_op_amp")}),oFe=Pl.extend({ftype:v.literal("simple_switch")}),iFe=v.object({type:v.literal("source_project_metadata"),name:v.string().optional(),software_used_string:v.string().optional(),project_url:v.string().optional(),source_filesystem_md5_hash:v.string().optional(),created_at:yTt.optional()}),VTt=Ua.extend({type:v.literal("source_missing_property_error"),source_missing_property_error_id:gn("source_missing_property_error"),source_component_id:v.string(),property_name:v.string(),subcircuit_id:v.string().optional(),error_type:v.literal("source_missing_property_error").default("source_missing_property_error")}).describe("The source code is missing a property"),UTt=Ua.extend({type:v.literal("source_failed_to_create_component_error"),source_failed_to_create_component_error_id:gn("source_failed_to_create_component_error"),error_type:v.literal("source_failed_to_create_component_error").default("source_failed_to_create_component_error"),component_name:v.string().optional(),subcircuit_id:v.string().optional(),parent_source_component_id:v.string().optional(),pcb_center:v.object({x:v.number().optional(),y:v.number().optional()}).optional(),schematic_center:v.object({x:v.number().optional(),y:v.number().optional()}).optional()}).describe("Error emitted when a component fails to be constructed"),rFe=Ua.extend({type:v.literal("source_invalid_component_property_error"),source_invalid_component_property_error_id:gn("source_invalid_component_property_error"),source_component_id:v.string(),property_name:v.string(),property_value:v.unknown().optional(),expected_format:v.string().optional(),subcircuit_id:v.string().optional(),error_type:v.literal("source_invalid_component_property_error").default("source_invalid_component_property_error")}).describe("The source component property is invalid"),sFe=Ua.extend({type:v.literal("source_trace_not_connected_error"),source_trace_not_connected_error_id:gn("source_trace_not_connected_error"),error_type:v.literal("source_trace_not_connected_error").default("source_trace_not_connected_error"),subcircuit_id:v.string().optional(),source_group_id:v.string().optional(),source_trace_id:v.string().optional(),connected_source_port_ids:v.array(v.string()).optional(),selectors_not_found:v.array(v.string()).optional()}).describe("Occurs when a source trace selector does not match any ports"),WTt=v.object({type:v.literal("source_property_ignored_warning"),source_property_ignored_warning_id:gn("source_property_ignored_warning"),source_component_id:v.string(),property_name:v.string(),subcircuit_id:v.string().optional(),error_type:v.literal("source_property_ignored_warning").default("source_property_ignored_warning"),message:v.string()}).describe("The source property was ignored"),aFe=v.object({type:v.literal("source_pin_missing_trace_warning"),source_pin_missing_trace_warning_id:gn("source_pin_missing_trace_warning"),warning_type:v.literal("source_pin_missing_trace_warning").default("source_pin_missing_trace_warning"),message:v.string(),source_component_id:v.string(),source_port_id:v.string(),subcircuit_id:v.string().optional()}).describe("Warning emitted when a source component pin is missing a trace connection"),cFe=v.object({type:v.literal("source_missing_manufacturer_part_number_warning"),source_missing_manufacturer_part_number_warning_id:gn("source_missing_manufacturer_part_number_warning"),warning_type:v.literal("source_missing_manufacturer_part_number_warning").default("source_missing_manufacturer_part_number_warning"),message:v.string(),source_component_id:v.string(),standard:v.string().optional(),subcircuit_id:v.string().optional()}).describe("Warning emitted when a source component is missing its manufacturer part number"),lFe=v.object({type:v.literal("source_refdes_convention_warning"),source_refdes_convention_warning_id:gn("source_refdes_convention_warning"),warning_type:v.literal("source_refdes_convention_warning").default("source_refdes_convention_warning"),message:v.string(),source_component_id:v.string(),refdes:v.string(),source_component_ftype:v.string(),expected_prefixes:v.array(v.string()),actual_prefix:v.string().optional(),subcircuit_id:v.string().optional()}).describe("Warning emitted when a source component reference designator does not match the component type convention"),dFe=v.object({type:v.literal("source_component_availability_warning"),source_component_availability_warning_id:gn("source_component_availability_warning"),warning_type:v.literal("source_component_availability_warning").default("source_component_availability_warning"),message:v.string(),source_component_id:v.string(),subcircuit_id:v.string().optional(),supplier_name:MU,supplier_part_numbers:v.array(v.string()).nonempty()}).describe("Warning emitted when no supplier alternative can be confirmed in stock. Availability may be unknown or change over time."),XTt=Pl.extend({ftype:v.literal("simple_voltage_probe")}),KTt=Pl.extend({ftype:v.literal("interconnect")}),uFe=Ua.extend({type:v.literal("source_i2c_misconfigured_error"),source_i2c_misconfigured_error_id:gn("source_i2c_misconfigured_error"),error_type:v.literal("source_i2c_misconfigured_error").default("source_i2c_misconfigured_error"),source_port_ids:v.array(v.string())}).describe("Error emitted when incompatible I2C pins (e.g. SDA and SCL) are connected to the same net"),hFe=Ua.extend({type:v.literal("source_component_misconfigured_error"),source_component_misconfigured_error_id:gn("source_component_misconfigured_error"),error_type:v.literal("source_component_misconfigured_error").default("source_component_misconfigured_error"),source_component_ids:v.array(v.string()),source_port_ids:v.array(v.string()).optional()}).describe("Error emitted when one or more source components have an invalid or conflicting configuration"),jTt=Pl.extend({ftype:v.literal("simple_voltage_source"),voltage:FI,frequency:_L.optional(),peak_to_peak_voltage:FI.optional(),wave_shape:v.enum(["sinewave","square","triangle","sawtooth"]).optional(),phase:od.optional(),duty_cycle:v.number().optional().describe("Duty cycle as a fraction (0 to 1)"),pulse_delay:Hp.optional(),rise_time:Hp.optional(),fall_time:Hp.optional(),pulse_width:Hp.optional(),period:Hp.optional()}),qTt=v.union([GLe,zLe,ufe,DTt,YLe,NTt,VLe,RTt,QTt,kTt,ULe,LTt,HTt,WLe,XLe,KLe,jLe,zTt,qLe,YTt,JLe,$Le,oFe,ZLe,eFe,tFe,nFe,FTt,XTt,KTt,jTt,iFe,VTt,rFe,UTt,sFe,WTt,aFe,cFe,lFe,dFe,uFe,hFe]),JTt=v.object({type:v.literal("source_port"),pin_number:v.number().optional(),port_hints:v.array(v.string()).optional(),name:v.string(),source_port_id:v.string(),source_component_id:v.string().optional(),source_group_id:v.string().optional(),most_frequently_referenced_by_name:v.string().optional(),subcircuit_id:v.string().optional(),subcircuit_connectivity_map_key:v.string().optional()}).merge(OTt),$Tt=v.object({type:v.literal("source_component_internal_connection"),source_component_internal_connection_id:v.string(),source_component_id:v.string(),source_port_ids:v.array(v.string()),subcircuit_id:v.string().optional()}),ZTt=v.object({type:v.literal("source_trace"),source_trace_id:v.string(),connected_source_port_ids:v.array(v.string()),connected_source_net_ids:v.array(v.string()),subcircuit_id:v.string().optional(),subcircuit_connectivity_map_key:v.string().optional(),max_length:v.number().optional(),max_via_count:v.number().int().nonnegative().optional(),name:v.string().optional(),min_trace_thickness:v.number().optional(),display_name:v.string().optional()}),eDt=v.object({type:v.literal("source_group"),source_group_id:v.string(),subcircuit_id:v.string().optional(),parent_subcircuit_id:v.string().optional(),parent_source_group_id:v.string().optional(),is_subcircuit:v.boolean().optional(),show_as_schematic_box:v.boolean().optional(),name:v.string().optional(),was_automatically_named:v.boolean().optional()}),tDt=v.object({type:v.literal("source_net"),source_net_id:v.string(),name:v.string(),member_source_group_ids:v.array(v.string()),is_power:v.boolean().optional(),is_ground:v.boolean().optional(),is_digital_signal:v.boolean().optional(),is_analog_signal:v.boolean().optional(),is_positive_voltage_source:v.boolean().optional(),trace_width:v.number().optional(),subcircuit_id:v.string().optional(),subcircuit_connectivity_map_key:v.string().optional()}),nDt=v.object({type:v.literal("source_board"),source_board_id:v.string(),source_group_id:v.string(),title:v.string().optional()}).describe("Defines a board in the source domain"),oDt=Ua.extend({type:v.literal("source_ambiguous_port_reference"),source_ambiguous_port_reference_id:gn("source_ambiguous_port_reference"),error_type:v.literal("source_ambiguous_port_reference").default("source_ambiguous_port_reference"),source_port_id:v.string().optional(),source_component_id:v.string().optional()}).describe("Error emitted when a port hint matches multiple non-overlapping pads, making the port reference ambiguous"),iDt=v.object({type:v.literal("source_pcb_ground_plane"),source_pcb_ground_plane_id:v.string(),source_group_id:v.string(),source_net_id:v.string(),subcircuit_id:v.string().optional()}).describe("Defines a ground plane in the source domain"),QE=["top","bottom","inner1","inner2","inner3","inner4","inner5","inner6","inner7","inner8"],oQe=v.enum(QE),Er=oQe.or(v.object({name:oQe})).transform((e)=>typeof e=="string"?e:e.name),Wm=v.enum(["top","bottom"]),rDt=v.object({type:v.literal("source_manually_placed_via"),source_manually_placed_via_id:v.string(),source_group_id:v.string(),source_net_id:v.string().min(1).optional(),subcircuit_id:v.string().optional(),source_trace_id:v.string().optional()}).describe("Defines a via that is manually placed in the source domain"),sDt=v.object({type:v.literal("source_unnamed_trace_warning"),source_unnamed_trace_warning_id:gn("source_unnamed_trace_warning"),warning_type:v.literal("source_unnamed_trace_warning").default("source_unnamed_trace_warning"),message:v.string(),source_trace_id:v.string(),subcircuit_id:v.string().optional()}).describe("Warning emitted when a source trace is missing a name"),aDt=v.object({type:v.literal("source_no_power_pin_defined_warning"),source_no_power_pin_defined_warning_id:gn("source_no_power_pin_defined_warning"),warning_type:v.literal("source_no_power_pin_defined_warning").default("source_no_power_pin_defined_warning"),message:v.string(),source_component_id:v.string(),source_port_ids:v.array(v.string()),subcircuit_id:v.string().optional()}).describe("Warning emitted when a chip has no source ports with requires_power=true"),cDt=v.object({type:v.literal("source_no_ground_pin_defined_warning"),source_no_ground_pin_defined_warning_id:gn("source_no_ground_pin_defined_warning"),warning_type:v.literal("source_no_ground_pin_defined_warning").default("source_no_ground_pin_defined_warning"),message:v.string(),source_component_id:v.string(),source_port_ids:v.array(v.string()),subcircuit_id:v.string().optional()}).describe("Warning emitted when a chip has no source ports marked as ground pins"),lDt=v.object({type:v.literal("source_component_pins_underspecified_warning"),source_component_pins_underspecified_warning_id:gn("source_component_pins_underspecified_warning"),warning_type:v.literal("source_component_pins_underspecified_warning").default("source_component_pins_underspecified_warning"),message:v.string(),source_component_id:v.string(),source_port_ids:v.array(v.string()),subcircuit_id:v.string().optional()}).describe("Warning emitted when all ports on a source component are underspecified"),dDt=Ua.extend({type:v.literal("source_pin_must_be_connected_error"),source_pin_must_be_connected_error_id:gn("source_pin_must_be_connected_error"),error_type:v.literal("source_pin_must_be_connected_error").default("source_pin_must_be_connected_error"),source_component_id:v.string(),source_port_id:v.string(),subcircuit_id:v.string().optional()}).describe("Error emitted when a pin with mustBeConnected attribute is not connected to any trace"),uDt=Ua.extend({type:v.literal("unknown_error_finding_part"),unknown_error_finding_part_id:gn("unknown_error_finding_part"),error_type:v.literal("unknown_error_finding_part").default("unknown_error_finding_part"),source_component_id:v.string().optional(),subcircuit_id:v.string().optional()}).describe("Error emitted when an unexpected error occurs while finding a part"),hDt=v.object({type:v.literal("source_part_not_found_warning"),source_part_not_found_warning_id:gn("source_part_not_found_warning"),warning_type:v.literal("source_part_not_found_warning").default("source_part_not_found_warning"),message:v.string(),source_component_id:v.string().optional(),subcircuit_id:v.string().optional(),supplier_name:MU.optional(),manufacturer_part_number:v.string().optional(),supplier_part_number:v.string().optional(),part_name:v.string().optional()}).describe("Warning emitted when a requested part can not be found"),mDt=v.object({type:v.literal("source_confusing_net_name_warning"),source_confusing_net_name_warning_id:gn("source_confusing_net_name_warning"),warning_type:v.literal("source_confusing_net_name_warning").default("source_confusing_net_name_warning"),message:v.string(),source_net_ids:v.array(v.string()).min(2),net_name:v.string(),subcircuit_id:v.string().optional()}).describe("Warning emitted when electrically disconnected source nets share a name"),GDe=v.union([v.number().nonnegative().finite(),v.object({reference:v.literal("longest_manhattan"),source_trace_ids:v.array(v.string()).min(1).optional(),offset:v.number().finite().optional()})]),xvt=v.union([v.number().positive().finite(),v.object({width_multiplier:v.number().positive().finite()})]),pDt=v.object({type:v.literal("source_bus"),source_bus_id:v.string(),name:v.string().optional(),source_trace_ids:v.array(v.string()).min(1),max_length_skew:v.number().nonnegative().finite().optional(),target_impedance:v.number().positive().finite().optional(),target_differential_impedance:v.number().positive().finite().optional(),differential_pair:v.object({positive_source_trace_id:v.string(),negative_source_trace_id:v.string(),trace_gap:v.number().positive().finite().optional(),max_uncoupled_length:v.number().nonnegative().finite().optional()}).optional(),length_match_source_trace_ids:v.array(v.string()).min(1).optional(),min_length:GDe.optional(),max_length:GDe.optional(),target_length:GDe.optional(),length_tolerance:v.number().nonnegative().finite().optional(),pcb_trace_spacing:xvt.optional(),pcb_spacing_to_other_signals:xvt.optional(),target_impedance_min:v.number().positive().finite().optional(),target_impedance_max:v.number().positive().finite().optional(),target_differential_impedance_min:v.number().positive().finite().optional(),target_differential_impedance_max:v.number().positive().finite().optional(),subcircuit_id:v.string().optional()}),ADt=Ua.pick({message:!0,error_type:!0}).extend({type:v.literal("source_runtime_error"),source_runtime_error_id:gn("source_runtime_error"),error_type:v.literal("source_runtime_error").default("source_runtime_error"),phase_name:v.string().optional()}).describe("An unexpected runtime failure while generating or validating a circuit"),_Dt=v.object({type:v.literal("schematic_box"),schematic_sheet_id:v.string().optional(),schematic_component_id:v.string().optional(),schematic_symbol_id:v.string().optional(),width:xn,height:xn,is_dashed:v.boolean().default(!1),x:xn,y:xn,subcircuit_id:v.string().optional()}).describe("Draws a box on the schematic"),gDt=v.object({type:v.literal("schematic_path"),schematic_path_id:gn("schematic_path"),schematic_sheet_id:v.string().optional(),schematic_component_id:v.string().optional(),schematic_symbol_id:v.string().optional(),fill_color:v.string().optional(),is_filled:v.boolean().optional(),is_dashed:v.boolean().default(!1),stroke_width:xn.nullable().optional(),stroke_color:v.string().optional(),dash_length:xn.optional(),dash_gap:xn.optional(),points:v.array(Ko),subcircuit_id:v.string().optional()}),fDt=v.record(v.object({left_margin:Lo.optional(),right_margin:Lo.optional(),top_margin:Lo.optional(),bottom_margin:Lo.optional()})),yDt=v.object({left_size:v.number(),right_size:v.number(),top_size:v.number().optional(),bottom_size:v.number().optional()}),xDt=v.object({left_side:v.object({pins:v.array(v.number()),direction:v.enum(["top-to-bottom","bottom-to-top"]).optional()}).optional(),right_side:v.object({pins:v.array(v.number()),direction:v.enum(["top-to-bottom","bottom-to-top"]).optional()}).optional(),top_side:v.object({pins:v.array(v.number()),direction:v.enum(["left-to-right","right-to-left"]).optional()}).optional(),bottom_side:v.object({pins:v.array(v.number()),direction:v.enum(["left-to-right","right-to-left"]).optional()}).optional()}),CDt=v.union([yDt,xDt]),IDt=v.object({type:v.literal("schematic_component"),size:cfe,center:Ko,source_component_id:v.string().optional(),schematic_component_id:v.string(),schematic_sheet_id:v.string().optional(),schematic_symbol_id:v.string().optional(),pin_spacing:Lo.optional(),pin_styles:fDt.optional(),box_width:Lo.optional(),symbol_name:v.string().optional(),port_arrangement:CDt.optional(),port_labels:v.record(v.string()).optional(),symbol_display_value:v.string().optional(),subcircuit_id:v.string().optional(),schematic_group_id:v.string().optional(),is_schematic_group:v.boolean().optional(),source_group_id:v.string().optional(),is_box_with_pins:v.boolean().optional().default(!0)}),_Do=v.object({kicad_symbol:TTt.optional()}).catchall(v.unknown()),bDt=v.object({type:v.literal("schematic_symbol"),schematic_symbol_id:v.string(),name:v.string().optional(),metadata:_Do.optional()}).describe("Defines a named schematic symbol that can be referenced by components."),SDt=v.object({type:v.literal("schematic_line"),schematic_line_id:gn("schematic_line"),schematic_sheet_id:v.string().optional(),schematic_component_id:v.string().optional(),schematic_symbol_id:v.string().optional(),x1:xn,y1:xn,x2:xn,y2:xn,stroke_width:xn.nullable().optional(),color:v.string().default("#000000"),is_dashed:v.boolean().default(!1),dash_length:xn.optional(),dash_gap:xn.optional(),subcircuit_id:v.string().optional()}).describe("Draws a styled line on the schematic"),PDt=v.object({type:v.literal("schematic_rect"),schematic_rect_id:gn("schematic_rect"),schematic_sheet_id:v.string().optional(),schematic_component_id:v.string().optional(),schematic_symbol_id:v.string().optional(),center:Ko,width:xn,height:xn,rotation:od.default(0),stroke_width:xn.nullable().optional(),color:v.string().default("#000000"),is_filled:v.boolean().default(!1),fill_color:v.string().optional(),is_dashed:v.boolean().default(!1),subcircuit_id:v.string().optional()}).describe("Draws a styled rectangle on the schematic"),vDt=v.object({type:v.literal("schematic_circle"),schematic_circle_id:gn("schematic_circle"),schematic_sheet_id:v.string().optional(),schematic_component_id:v.string().optional(),schematic_symbol_id:v.string().optional(),center:Ko,radius:xn,stroke_width:xn.nullable().optional(),color:v.string().default("#000000"),is_filled:v.boolean().default(!1),fill_color:v.string().optional(),is_dashed:v.boolean().default(!1),subcircuit_id:v.string().optional()}).describe("Draws a styled circle on the schematic"),EDt=v.object({type:v.literal("schematic_arc"),schematic_arc_id:gn("schematic_arc"),schematic_sheet_id:v.string().optional(),schematic_component_id:v.string().optional(),schematic_symbol_id:v.string().optional(),center:Ko,radius:xn,start_angle_degrees:od,end_angle_degrees:od,direction:v.enum(["clockwise","counterclockwise"]).default("counterclockwise"),stroke_width:xn.nullable().optional(),color:v.string().default("#000000"),is_dashed:v.boolean().default(!1),subcircuit_id:v.string().optional()}).describe("Draws a styled arc on the schematic"),MDt=v.object({type:v.literal("schematic_trace"),schematic_trace_id:v.string(),schematic_sheet_id:v.string().optional(),source_trace_id:v.string().optional(),junctions:v.array(v.object({x:v.number(),y:v.number()})),edges:v.array(v.object({from:v.object({x:v.number(),y:v.number()}),to:v.object({x:v.number(),y:v.number()}),is_crossing:v.boolean().optional(),from_schematic_port_id:v.string().optional(),to_schematic_port_id:v.string().optional()})),subcircuit_id:v.string().optional(),subcircuit_connectivity_map_key:v.string().optional()}),gDo=v.enum(["center","left","right","top","bottom"]),mFe=v.object({text:v.string(),is_overlined:v.boolean().optional()}),BDt=v.object({type:v.literal("schematic_text"),schematic_sheet_id:v.string().optional(),schematic_component_id:v.string().optional(),schematic_symbol_id:v.string().optional(),schematic_text_id:v.string(),source_trace_id:v.string().optional(),text:v.string(),text_parts:v.array(mFe).min(1).optional(),display_superscript:v.string().optional(),font_size:v.number().default(0.18),position:v.object({x:xn,y:xn}),rotation:v.number().default(0),anchor:v.union([gDo.describe("legacy"),Y6]).default("center"),color:v.string().default("#000000"),subcircuit_id:v.string().optional()}),wDt=v.object({type:v.literal("schematic_port"),schematic_port_id:v.string(),source_port_id:v.string(),schematic_sheet_id:v.string().optional(),schematic_component_id:v.string().optional(),center:Ko,facing_direction:v.enum(["up","down","left","right"]).optional(),distance_from_component_edge:v.number().optional(),side_of_component:v.enum(["top","bottom","left","right"]).optional(),true_ccw_index:v.number().optional(),pin_number:v.number().optional(),display_pin_label:v.string().optional(),display_pin_label_text_parts:v.array(mFe).min(1).optional(),display_pin_label_font_size:v.number().positive().finite().optional(),subcircuit_id:v.string().optional(),is_connected:v.boolean().optional(),is_internal_circuit_port:v.boolean().optional(),is_overlapping_internal_circuit_port:v.boolean().optional(),has_input_arrow:v.boolean().optional(),has_output_arrow:v.boolean().optional(),is_drawn_with_inversion_circle:v.boolean().optional()}).describe("Defines a port on a schematic component"),TDt=v.object({type:v.literal("schematic_net_label"),schematic_net_label_id:gn("schematic_net_label"),schematic_sheet_id:v.string().optional(),schematic_trace_id:v.string().optional(),source_trace_id:v.string().optional(),source_net_id:v.string(),center:Ko,anchor_position:Ko.optional(),anchor_side:v.enum(["top","bottom","left","right"]),text:v.string(),display_superscript:v.string().optional(),symbol_name:v.string().optional(),is_movable:v.boolean().optional(),subcircuit_id:v.string().optional()}),DDt=Ua.extend({type:v.literal("schematic_error"),schematic_error_id:v.string(),error_type:v.literal("schematic_port_not_found").default("schematic_port_not_found"),subcircuit_id:v.string().optional()}).describe("Defines a schematic error on the schematic"),NDt=Ua.extend({type:v.literal("schematic_layout_error"),schematic_layout_error_id:gn("schematic_layout_error"),error_type:v.literal("schematic_layout_error").default("schematic_layout_error"),source_group_id:v.string(),schematic_group_id:v.string(),subcircuit_id:v.string().optional()}).describe("Error emitted when schematic layout fails for a group"),hfe=v.object({type:v.literal("schematic_debug_object"),label:v.string().optional(),subcircuit_id:v.string().optional()}),RDt=hfe.extend({shape:v.literal("rect"),center:Ko,size:cfe}),QDt=hfe.extend({shape:v.literal("line"),start:Ko,end:Ko}),kDt=hfe.extend({shape:v.literal("point"),center:Ko}),LDt=v.discriminatedUnion("shape",[RDt,QDt,kDt]),FDt=v.object({type:v.literal("schematic_voltage_probe"),schematic_voltage_probe_id:v.string(),schematic_sheet_id:v.string().optional(),source_component_id:v.string().optional(),name:v.string().optional(),position:Ko,schematic_trace_id:v.string(),voltage:FI.optional(),subcircuit_id:v.string().optional(),color:v.string().optional(),label_alignment:Y6.optional()}).describe("Defines a voltage probe measurement point on a schematic trace"),HDt=v.object({type:v.literal("schematic_manual_edit_conflict_warning"),schematic_manual_edit_conflict_warning_id:gn("schematic_manual_edit_conflict_warning"),warning_type:v.literal("schematic_manual_edit_conflict_warning").default("schematic_manual_edit_conflict_warning"),message:v.string(),schematic_component_id:v.string(),schematic_group_id:v.string().optional(),subcircuit_id:v.string().optional(),source_component_id:v.string()}).describe("Warning emitted when a component has both manual placement and explicit schX/schY coordinates"),ODt=v.object({type:v.literal("schematic_component_overlap_warning"),schematic_component_overlap_warning_id:gn("schematic_component_overlap_warning"),warning_type:v.literal("schematic_component_overlap_warning").default("schematic_component_overlap_warning"),message:v.string(),schematic_component_ids:v.tuple([v.string(),v.string()]),schematic_sheet_id:v.string().optional()}).describe("Warning emitted when the rendered bounds of two schematic components overlap"),zDt=v.object({type:v.literal("schematic_component_styling_warning"),schematic_component_styling_warning_id:gn("schematic_component_styling_warning"),warning_type:v.literal("schematic_component_styling_warning").default("schematic_component_styling_warning"),message:v.string(),schematic_component_id:v.string(),styling_issue_type:v.string(),schematic_port_ids:v.array(v.string()).optional(),source_component_id:v.string().optional(),schematic_sheet_id:v.string().optional(),subcircuit_id:v.string().optional()}).describe("Warning emitted when a schematic component has a visual styling issue"),GDt=v.object({type:v.literal("schematic_sheet_styling_warning"),schematic_sheet_styling_warning_id:gn("schematic_sheet_styling_warning"),warning_type:v.literal("schematic_sheet_styling_warning").default("schematic_sheet_styling_warning"),message:v.string(),schematic_sheet_id:v.string(),styling_issue_type:v.literal("non_default_sheet_size"),subcircuit_id:v.string().optional()}).describe("Style warning emitted when a schematic sheet uses a non-default size"),YDt=v.object({type:v.literal("schematic_element_outside_sheet_warning"),schematic_element_outside_sheet_warning_id:gn("schematic_element_outside_sheet_warning"),warning_type:v.literal("schematic_element_outside_sheet_warning").default("schematic_element_outside_sheet_warning"),message:v.string(),schematic_sheet_id:v.string(),schematic_element_type:v.enum(["schematic_component","schematic_net_label","schematic_trace"]),schematic_element_id:v.string()}).describe("Warning emitted when a schematic component, net label, or trace extends outside its schematic sheet"),Cvt=xn.pipe(v.number().positive().finite()),VDt=v.object({type:v.literal("schematic_graphic"),schematic_graphic_id:gn("schematic_graphic"),schematic_sheet_id:v.string().optional(),asset:Ute.optional(),svg_content:v.string().optional(),width:Cvt.optional(),height:Cvt.optional()}).describe("References a graphic asset or inline SVG content with optional centered layout bounds on a schematic sheet").superRefine(({asset:e,svg_content:t},n)=>{e===void 0&&t===void 0&&n.addIssue({code:v.ZodIssueCode.custom,message:"At least one of asset or svg_content is required"})}),UDt=v.object({type:v.literal("schematic_group"),schematic_group_id:gn("schematic_group"),schematic_sheet_id:v.string().optional(),source_group_id:v.string(),is_subcircuit:v.boolean().optional(),subcircuit_id:v.string().optional(),width:Lo,height:Lo,center:Ko,schematic_component_ids:v.array(v.string()),show_as_schematic_box:v.boolean().optional(),name:v.string().optional(),description:v.string().optional()}).describe("Defines a group of components on the schematic"),WDt=v.object({type:v.literal("schematic_table"),schematic_table_id:gn("schematic_table"),schematic_sheet_id:v.string().optional(),anchor_position:Ko,column_widths:v.array(xn),row_heights:v.array(xn),cell_padding:xn.optional(),border_width:xn.optional(),subcircuit_id:v.string().optional(),schematic_component_id:v.string().optional(),anchor:Y6.optional()}).describe("Defines a table on the schematic"),XDt=v.object({type:v.literal("schematic_table_cell"),schematic_table_cell_id:gn("schematic_table_cell"),schematic_sheet_id:v.string().optional(),schematic_table_id:v.string(),start_row_index:v.number(),end_row_index:v.number(),start_column_index:v.number(),end_column_index:v.number(),text:v.string().optional(),center:Ko,width:xn,height:xn,horizontal_align:v.enum(["left","center","right"]).optional(),vertical_align:v.enum(["top","middle","bottom"]).optional(),font_size:xn.optional(),subcircuit_id:v.string().optional()}).describe("Defines a cell within a schematic_table"),KDt=v.enum(["a4","ansi_b"]),jDt=v.object({type:v.literal("schematic_sheet"),schematic_sheet_id:gn("schematic_sheet"),name:v.string().optional(),sheet_index:v.number().optional(),sheet_size:KDt.optional(),sheet_width:v.number().positive().optional(),sheet_height:v.number().positive().optional(),subcircuit_id:v.string().optional(),outline_color:v.string().optional()}).describe("Defines a schematic sheet or page that components can be placed on"),qDt=v.object({type:v.literal("schematic_missing_sheet_warning"),schematic_missing_sheet_warning_id:gn("schematic_missing_sheet_warning"),warning_type:v.literal("schematic_missing_sheet_warning").default("schematic_missing_sheet_warning"),message:v.string()}).describe("Circuit-wide warning emitted when a schematic has no schematic sheet. Display as a banner without attaching it to a component or drawing a target outline or leader line."),JDt=v.object({x:xn,y:xn,bulge:v.number().optional()}),iQe=v.object({vertices:v.array(JDt)}),pFe=v.object({outer_ring:iQe,inner_rings:v.array(iQe).default([])}),$Dt={from_left:"from_left",from_right:"from_right",from_top:"from_top",from_bottom:"from_bottom",from_above:"from_above",from_below:"from_below",from_x_neg:"from_left",from_x_pos:"from_right",from_y_pos:"from_top",from_y_neg:"from_bottom",from_z_pos:"from_above",from_z_neg:"from_below",from_front:"from_top",from_back:"from_bottom"},fDo={from_left:{x:-1,y:0,z:0},from_right:{x:1,y:0,z:0},from_top:{x:0,y:1,z:0},from_bottom:{x:0,y:-1,z:0},from_above:{x:0,y:0,z:1},from_below:{x:0,y:0,z:-1}},ZDt=v.enum(["from_left","from_right","from_top","from_bottom","from_above","from_below","from_x_neg","from_x_pos","from_y_pos","from_y_neg","from_z_pos","from_z_neg","from_front","from_back"]).transform((e)=>$Dt[e]).describe('The side exposing the receptacle where the cable or mating part is attached, following the 2D PCB diagram convention, not a 3D viewport frame. In project coordinate space, "from_top" is +Y, "from_bottom" -Y, "from_left" -X, "from_right" +X, "from_above" +Z and "from_below" -Z. A receptacle on the +Y edge is "from_top" even though the plug moves in -Y as it seats. Cartesian spellings such as "from_y_pos" are accepted and normalized to the named values, as are the deprecated "from_front" (now "from_top") and "from_back" (now "from_bottom").'),rQe=v.enum(["leftside_top","leftside_bottom","rightside_top","rightside_bottom","topside_left","topside_right","bottomside_left","bottomside_right"]),yDo=[["leftside_top","bottomside_left","rightside_bottom","topside_right"],["leftside_bottom","bottomside_right","rightside_top","topside_left"]],xDo=(e,t)=>{for(let n of yDo){let o=n.indexOf(e),i=n.indexOf(t);if(o!==-1&&i!==-1)return(i-o+n.length)%n.length*90}return null},eNt=v.object({x:xn,y:xn,via:v.boolean().optional(),via_to_layer:Er.optional()}),CDo=v.array(eNt),tNt=v.object({x:xn,y:xn,via:v.boolean().optional(),to_layer:Er.optional(),trace_width:xn.optional()}),nNt=v.object({min_trace_width:Lo.optional(),min_board_edge_clearance:Lo.optional(),min_via_hole_edge_to_via_hole_edge_clearance:Lo.optional(),min_plated_hole_drill_edge_to_drill_edge_clearance:Lo.optional(),min_trace_to_pad_edge_clearance:Lo.optional(),min_trace_to_hole_edge_clearance:Lo.optional().describe("Minimum distance from a trace copper edge to a non-plated hole edge, in mm. No default is applied when omitted."),min_pad_edge_to_pad_edge_clearance:Lo.optional(),min_same_net_trace_edge_to_trace_edge_clearance:Lo.optional(),min_different_net_trace_edge_to_trace_edge_clearance:Lo.optional(),min_via_edge_to_pad_edge_clearance:Lo.optional(),min_via_hole_diameter:Lo.optional(),min_via_pad_diameter:Lo.optional()}),oNt=v.object({type:v.literal("pcb_component"),pcb_component_id:gn("pcb_component"),source_component_id:v.string(),center:Ko,layer:Er,rotation:od,display_offset_x:v.string().optional().describe("How to display the x offset for this part, usually corresponding with how the user specified it"),display_offset_y:v.string().optional().describe("How to display the y offset for this part, usually corresponding with how the user specified it"),width:Lo,height:Lo,do_not_place:v.boolean().optional(),is_allowed_to_be_off_board:v.boolean().optional(),subcircuit_id:v.string().optional(),pcb_group_id:v.string().optional(),position_mode:v.enum(["packed","relative_to_group_anchor","relative_to_another_component","none"]).optional(),anchor_position:Ko.optional(),anchor_alignment:Y6.optional(),positioned_relative_to_pcb_group_id:v.string().optional(),positioned_relative_to_pcb_board_id:v.string().optional(),cable_insertion_center:Ko.optional(),insertion_direction:ZDt.optional(),pin1_location:rQe.optional().describe("Location of pin 1 on the unrotated, top-view component footprint"),supplier_pin1_location_map:v.record(MU,rQe).optional().describe("Pin 1 location for each supplier's unrotated, top-view footprint"),metadata:v.object({kicad_footprint:vTt.optional()}).optional(),obstructs_within_bounds:v.boolean().default(!0).describe("Does this component take up all the space within its bounds on a layer. This is generally true except for when separated pin headers are being represented by a single component (in which case, chips can be placed between the pin headers) or for tall modules where chips fit underneath")}).describe("Defines a component on the PCB"),mfe=v.object({type:v.literal("pcb_debug_object"),pcb_debug_object_id:gn("pcb_debug_object"),label:v.string().optional(),subcircuit_id:v.string().optional()}),iNt=mfe.extend({shape:v.literal("rect"),center:Ko,size:cfe}),rNt=mfe.extend({shape:v.literal("line"),start:Ko,end:Ko}),sNt=mfe.extend({shape:v.literal("point"),center:Ko}),aNt=v.discriminatedUnion("shape",[iNt,rNt,sNt]),cNt=v.object({type:v.literal("pcb_hole"),pcb_hole_id:gn("pcb_hole"),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),pcb_component_id:v.string().optional(),hole_shape:v.literal("circle"),hole_diameter:v.number(),x:xn,y:xn,is_covered_with_solder_mask:v.boolean().optional(),soldermask_margin:v.number().optional()}),IDo=cNt.describe("Defines a circular hole on the PCB"),lNt=v.object({type:v.literal("pcb_hole"),pcb_hole_id:gn("pcb_hole"),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),pcb_component_id:v.string().optional(),hole_shape:v.literal("rect"),hole_width:v.number(),hole_height:v.number(),x:xn,y:xn,is_covered_with_solder_mask:v.boolean().optional(),soldermask_margin:v.number().optional()}),bDo=lNt.describe("Defines a rectangular (square-capable) hole on the PCB. Use equal width/height for square."),dNt=v.object({type:v.literal("pcb_hole"),pcb_hole_id:gn("pcb_hole"),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),pcb_component_id:v.string().optional(),hole_shape:v.enum(["circle","square"]),hole_diameter:v.number(),x:xn,y:xn,is_covered_with_solder_mask:v.boolean().optional(),soldermask_margin:v.number().optional()}),SDo=dNt.describe("Defines a circular or square hole on the PCB"),uNt=v.object({type:v.literal("pcb_hole"),pcb_hole_id:gn("pcb_hole"),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),pcb_component_id:v.string().optional(),hole_shape:v.literal("oval"),hole_width:v.number(),hole_height:v.number(),x:xn,y:xn,is_covered_with_solder_mask:v.boolean().optional(),soldermask_margin:v.number().optional()}),PDo=uNt.describe("Defines an oval hole on the PCB"),hNt=v.object({type:v.literal("pcb_hole"),pcb_hole_id:gn("pcb_hole"),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),pcb_component_id:v.string().optional(),hole_shape:v.literal("pill"),hole_width:v.number(),hole_height:v.number(),x:xn,y:xn,is_covered_with_solder_mask:v.boolean().optional(),soldermask_margin:v.number().optional()}),vDo=hNt.describe("Defines a pill-shaped hole on the PCB"),mNt=v.object({type:v.literal("pcb_hole"),pcb_hole_id:gn("pcb_hole"),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),pcb_component_id:v.string().optional(),hole_shape:v.literal("rotated_pill"),hole_width:v.number(),hole_height:v.number(),x:xn,y:xn,ccw_rotation:od,is_covered_with_solder_mask:v.boolean().optional(),soldermask_margin:v.number().optional()}),EDo=mNt.describe("Defines a rotated pill-shaped hole on the PCB"),pNt=dNt.or(uNt).or(hNt).or(mNt).or(cNt).or(lNt),MDo=v.object({type:v.literal("pcb_plated_hole"),shape:v.literal("circle"),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),outer_diameter:v.number(),hole_diameter:v.number(),is_covered_with_solder_mask:v.boolean().optional(),x:xn,y:xn,layers:v.array(Er),port_hints:v.array(v.string()).optional(),pcb_component_id:v.string().optional(),pcb_port_id:v.string().optional(),pcb_plated_hole_id:gn("pcb_plated_hole"),soldermask_margin:v.number().optional()}),BDo=v.object({type:v.literal("pcb_plated_hole"),shape:v.enum(["oval","pill"]),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),outer_width:v.number(),outer_height:v.number(),hole_width:v.number(),hole_height:v.number(),is_covered_with_solder_mask:v.boolean().optional(),x:xn,y:xn,ccw_rotation:od,layers:v.array(Er),port_hints:v.array(v.string()).optional(),pcb_component_id:v.string().optional(),pcb_port_id:v.string().optional(),pcb_plated_hole_id:gn("pcb_plated_hole"),soldermask_margin:v.number().optional()}),wDo=v.object({type:v.literal("pcb_plated_hole"),shape:v.literal("circular_hole_with_rect_pad"),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),hole_shape:v.literal("circle"),pad_shape:v.literal("rect"),hole_diameter:v.number(),rect_pad_width:v.number(),rect_pad_height:v.number(),rect_border_radius:v.number().optional(),hole_offset_x:xn.default(0),hole_offset_y:xn.default(0),is_covered_with_solder_mask:v.boolean().optional(),x:xn,y:xn,layers:v.array(Er),port_hints:v.array(v.string()).optional(),pcb_component_id:v.string().optional(),pcb_port_id:v.string().optional(),pcb_plated_hole_id:gn("pcb_plated_hole"),soldermask_margin:v.number().optional(),rect_ccw_rotation:od.optional()}),TDo=v.object({type:v.literal("pcb_plated_hole"),shape:v.literal("pill_hole_with_rect_pad"),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),hole_shape:v.literal("pill"),pad_shape:v.literal("rect"),hole_width:v.number(),hole_height:v.number(),rect_pad_width:v.number(),rect_pad_height:v.number(),rect_border_radius:v.number().optional(),hole_offset_x:xn.default(0),hole_offset_y:xn.default(0),is_covered_with_solder_mask:v.boolean().optional(),x:xn,y:xn,layers:v.array(Er),port_hints:v.array(v.string()).optional(),pcb_component_id:v.string().optional(),pcb_port_id:v.string().optional(),pcb_plated_hole_id:gn("pcb_plated_hole"),soldermask_margin:v.number().optional()}),DDo=v.object({type:v.literal("pcb_plated_hole"),shape:v.literal("rotated_pill_hole_with_rect_pad"),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),hole_shape:v.literal("rotated_pill"),pad_shape:v.literal("rect"),hole_width:v.number(),hole_height:v.number(),hole_ccw_rotation:od,rect_pad_width:v.number(),rect_pad_height:v.number(),rect_border_radius:v.number().optional(),rect_ccw_rotation:od,hole_offset_x:xn.default(0),hole_offset_y:xn.default(0),is_covered_with_solder_mask:v.boolean().optional(),x:xn,y:xn,layers:v.array(Er),port_hints:v.array(v.string()).optional(),pcb_component_id:v.string().optional(),pcb_port_id:v.string().optional(),pcb_plated_hole_id:gn("pcb_plated_hole"),soldermask_margin:v.number().optional()}),NDo=v.object({type:v.literal("pcb_plated_hole"),shape:v.literal("hole_with_polygon_pad"),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),hole_shape:v.enum(["circle","oval","pill","rotated_pill"]),hole_diameter:v.number().optional(),hole_width:v.number().optional(),hole_height:v.number().optional(),pad_outline:v.array(v.object({x:xn,y:xn})).min(3),hole_offset_x:xn.default(0),hole_offset_y:xn.default(0),is_covered_with_solder_mask:v.boolean().optional(),x:xn,y:xn,layers:v.array(Er),port_hints:v.array(v.string()).optional(),pcb_component_id:v.string().optional(),pcb_port_id:v.string().optional(),pcb_plated_hole_id:gn("pcb_plated_hole"),soldermask_margin:v.number().optional(),ccw_rotation:od.optional()}),ANt=v.union([MDo,BDo,wDo,TDo,DDo,NDo]),_Nt=v.object({type:v.literal("pcb_port"),pcb_port_id:gn("pcb_port"),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),source_port_id:v.string(),pcb_component_id:v.string().optional(),x:xn,y:xn,layers:v.array(Er),is_board_pinout:v.boolean().optional()}).describe("Defines a port on the PCB"),RDo=v.object({type:v.literal("pcb_smtpad"),shape:v.literal("circle"),pcb_smtpad_id:gn("pcb_smtpad"),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),x:xn,y:xn,radius:v.number(),layer:Er,port_hints:v.array(v.string()).optional(),pcb_component_id:v.string().optional(),pcb_port_id:v.string().optional(),is_covered_with_solder_mask:v.boolean().optional(),soldermask_margin:v.number().optional(),solderpaste_margin:v.number().optional()}),QDo=v.object({type:v.literal("pcb_smtpad"),shape:v.literal("rect"),pcb_smtpad_id:gn("pcb_smtpad"),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),x:xn,y:xn,width:v.number(),height:v.number(),rect_border_radius:v.number().optional(),corner_radius:v.number().optional(),layer:Er,port_hints:v.array(v.string()).optional(),pcb_component_id:v.string().optional(),pcb_port_id:v.string().optional(),is_covered_with_solder_mask:v.boolean().optional(),soldermask_margin:v.number().optional(),soldermask_margin_left:v.number().optional(),soldermask_margin_top:v.number().optional(),soldermask_margin_right:v.number().optional(),soldermask_margin_bottom:v.number().optional(),solderpaste_margin:v.number().optional()}),kDo=v.object({type:v.literal("pcb_smtpad"),shape:v.literal("rotated_rect"),pcb_smtpad_id:gn("pcb_smtpad"),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),x:xn,y:xn,width:v.number(),height:v.number(),rect_border_radius:v.number().optional(),corner_radius:v.number().optional(),ccw_rotation:od,layer:Er,port_hints:v.array(v.string()).optional(),pcb_component_id:v.string().optional(),pcb_port_id:v.string().optional(),is_covered_with_solder_mask:v.boolean().optional(),soldermask_margin:v.number().optional(),soldermask_margin_left:v.number().optional(),soldermask_margin_top:v.number().optional(),soldermask_margin_right:v.number().optional(),soldermask_margin_bottom:v.number().optional(),solderpaste_margin:v.number().optional()}),gNt=v.object({type:v.literal("pcb_smtpad"),shape:v.literal("pill"),pcb_smtpad_id:gn("pcb_smtpad"),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),x:xn,y:xn,width:v.number(),height:v.number(),radius:v.number(),layer:Er,port_hints:v.array(v.string()).optional(),pcb_component_id:v.string().optional(),pcb_port_id:v.string().optional(),is_covered_with_solder_mask:v.boolean().optional(),soldermask_margin:v.number().optional(),solderpaste_margin:v.number().optional()}),LDo=v.object({type:v.literal("pcb_smtpad"),shape:v.literal("rotated_pill"),pcb_smtpad_id:gn("pcb_smtpad"),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),x:xn,y:xn,width:v.number(),height:v.number(),radius:v.number(),ccw_rotation:od,layer:Er,port_hints:v.array(v.string()).optional(),pcb_component_id:v.string().optional(),pcb_port_id:v.string().optional(),is_covered_with_solder_mask:v.boolean().optional(),soldermask_margin:v.number().optional(),solderpaste_margin:v.number().optional()}),FDo=v.object({type:v.literal("pcb_smtpad"),shape:v.literal("polygon"),pcb_smtpad_id:gn("pcb_smtpad"),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),points:v.array(Ko),layer:Er,port_hints:v.array(v.string()).optional(),pcb_component_id:v.string().optional(),pcb_port_id:v.string().optional(),is_covered_with_solder_mask:v.boolean().optional(),soldermask_margin:v.number().optional(),solderpaste_margin:v.number().optional()}),fNt=v.discriminatedUnion("shape",[RDo,QDo,kDo,LDo,gNt,FDo]).describe("Defines an SMT pad on the PCB"),HDo=v.object({type:v.literal("pcb_solder_paste"),shape:v.literal("circle"),pcb_solder_paste_id:gn("pcb_solder_paste"),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),x:xn,y:xn,radius:v.number(),layer:Er,pcb_component_id:v.string().optional(),pcb_smtpad_id:v.string().optional()}),ODo=v.object({type:v.literal("pcb_solder_paste"),shape:v.literal("rect"),pcb_solder_paste_id:gn("pcb_solder_paste"),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),x:xn,y:xn,width:v.number(),height:v.number(),layer:Er,pcb_component_id:v.string().optional(),pcb_smtpad_id:v.string().optional()}),zDo=v.object({type:v.literal("pcb_solder_paste"),shape:v.literal("pill"),pcb_solder_paste_id:gn("pcb_solder_paste"),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),x:xn,y:xn,width:v.number(),height:v.number(),radius:v.number(),layer:Er,pcb_component_id:v.string().optional(),pcb_smtpad_id:v.string().optional()}),GDo=v.object({type:v.literal("pcb_solder_paste"),shape:v.literal("rotated_rect"),pcb_solder_paste_id:gn("pcb_solder_paste"),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),x:xn,y:xn,width:v.number(),height:v.number(),ccw_rotation:xn,layer:Er,pcb_component_id:v.string().optional(),pcb_smtpad_id:v.string().optional()}),YDo=v.object({type:v.literal("pcb_solder_paste"),shape:v.literal("rotated_pill"),pcb_solder_paste_id:gn("pcb_solder_paste"),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),x:xn,y:xn,width:v.number(),height:v.number(),radius:v.number(),ccw_rotation:od,layer:Er,pcb_component_id:v.string().optional(),pcb_smtpad_id:v.string().optional()}),VDo=v.object({type:v.literal("pcb_solder_paste"),shape:v.literal("oval"),pcb_solder_paste_id:gn("pcb_solder_paste"),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),x:xn,y:xn,width:v.number(),height:v.number(),layer:Er,pcb_component_id:v.string().optional(),pcb_smtpad_id:v.string().optional()}),UDo=mte.extend({type:v.literal("pcb_solder_paste"),pcb_solder_paste_id:gn("pcb_solder_paste"),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),holes:v.array(mte.shape.points).optional(),layer:Er,pcb_component_id:v.string().optional(),pcb_smtpad_id:v.string().optional()}),yNt=v.union([HDo,ODo,zDo,GDo,YDo,VDo,UDo]).describe("Defines solderpaste on the PCB"),cAe=v.object({type:v.literal("pcb_soldermask_opening"),pcb_soldermask_opening_id:gn("pcb_soldermask_opening"),layer:Er.pipe(Wm),pcb_component_id:v.string().optional(),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional()}),xNt=v.discriminatedUnion("shape",[FLe.extend(cAe.shape),lfe.extend(cAe.shape),HLe.extend(cAe.shape),mte.extend(cAe.shape)]).describe("An explicit opening in top or bottom solder mask or flex coverlay, independent of pads. Removes mask without adding copper or solder paste."),CNt=v.object({type:v.literal("pcb_text"),pcb_text_id:gn("pcb_text"),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),text:v.string(),center:Ko,layer:Er,width:Lo,height:Lo,lines:v.number(),align:v.enum(["bottom-left"])}).describe("Defines text on the PCB"),Ivt=xn.pipe(v.number().finite().positive()),INt=v.object({route_type:v.literal("wire"),x:xn,y:xn,width:xn,start_width:Ivt.optional(),end_width:Ivt.optional(),width_interpolation_mode:v.enum(["linear","quadratic"]).optional(),copper_pour_id:v.string().optional(),is_inside_copper_pour:v.boolean().optional(),start_pcb_port_id:v.string().optional(),end_pcb_port_id:v.string().optional(),layer:Er}).superRefine((e,t)=>{let n=[e.start_width,e.end_width,e.width_interpolation_mode].filter((o)=>o!==void 0).length;n!==0&&(n!==3&&t.addIssue({code:v.ZodIssueCode.custom,message:"Wire taper requires start_width, end_width and width_interpolation_mode together"}),e.width!==e.start_width&&t.addIssue({code:v.ZodIssueCode.custom,path:["start_width"],message:"start_width must equal width"}),Number.isFinite(e.x)&&Number.isFinite(e.y)||t.addIssue({code:v.ZodIssueCode.custom,message:"Tapered wire coordinates must be finite"}))}),bNt=v.object({route_type:v.literal("via"),x:xn,y:xn,copper_pour_id:v.string().optional(),is_inside_copper_pour:v.boolean().optional(),hole_diameter:xn.optional(),outer_diameter:xn.optional(),tented_on_top:v.boolean().optional(),tented_on_bottom:v.boolean().optional(),from_layer:Er,to_layer:Er}),SNt=v.object({route_type:v.literal("through_pad"),start:Ko,end:Ko,width:xn,start_layer:Er,end_layer:Er,pcb_smtpad_id:v.string().optional(),pcb_plated_hole_id:v.string().optional()}),PNt=v.union([INt,bNt,SNt]),vNt=v.object({type:v.literal("pcb_trace"),source_trace_id:v.string().optional(),pcb_component_id:v.string().optional(),pcb_trace_id:gn("pcb_trace"),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),route_thickness_mode:v.enum(["constant","interpolated"]).default("constant").optional(),route_order_index:v.number().optional(),should_round_corners:v.boolean().optional(),trace_length:v.number().optional(),is_antenna_trace:v.boolean().optional(),highlight_color:v.string().optional(),route:v.array(PNt).superRefine((e,t)=>{for(let[n,o]of e.entries()){if(o.route_type!=="wire"||o.width_interpolation_mode===void 0)continue;let i=e[n+1],r=i?.route_type==="through_pad"?i.start:i,s=i?.route_type==="wire"?i.layer:i?.route_type==="via"?i.from_layer:i?.start_layer,a=r?Math.hypot(r.x-o.x,r.y-o.y):NaN;(!Number.isFinite(a)||a<=0||s!==o.layer)&&t.addIssue({code:v.ZodIssueCode.custom,path:[n],message:"Tapered wire must lead to a distinct finite next point on the same layer"})}})}).describe("Defines a trace on the PCB"),ENt=v.object({type:v.literal("pcb_trace_warning"),pcb_trace_warning_id:gn("pcb_trace_warning"),warning_type:v.literal("pcb_trace_warning").default("pcb_trace_warning"),message:v.string(),center:Ko.optional(),pcb_trace_id:v.string(),source_trace_id:v.string(),pcb_component_ids:v.array(v.string()),pcb_port_ids:v.array(v.string()),subcircuit_id:v.string().optional()}).describe("Defines a trace warning on the PCB"),MNt=v.object({type:v.literal("pcb_trace_style_warning"),pcb_trace_style_warning_id:gn("pcb_trace_style_warning"),warning_type:v.literal("pcb_trace_style_warning").default("pcb_trace_style_warning"),message:v.string(),styling_issue_type:v.literal("long_segment_at_odd_angle"),pcb_trace_id:v.string(),source_trace_id:v.string().optional(),subcircuit_id:v.string().optional(),layer:Er,start_route_index:v.number().int().nonnegative(),end_route_index:v.number().int().nonnegative(),segment_start:Ko,segment_end:Ko,center:Ko,segment_length:xn,minimum_segment_length:xn,angle_degrees:v.number().min(0).lt(360),nearest_allowed_angle_degrees:v.number().min(0).lt(360).multipleOf(45),angle_deviation_degrees:v.number().min(0).max(22.5),angle_tolerance_degrees:v.number().min(0).lt(22.5)}).describe("Warning for a long PCB trace segment whose direction deviates from a multiple of 45 degrees"),BNt=v.object({type:v.literal("pcb_trace_too_long_error"),pcb_trace_too_long_error_id:gn("pcb_trace_too_long_error"),error_type:v.literal("pcb_trace_too_long_error").default("pcb_trace_too_long_error"),message:v.string(),pcb_trace_id:v.string(),source_net_id:v.string().optional(),source_trace_id:v.string().optional(),actual_trace_length:xn,maximum_trace_length:xn,subcircuit_id:v.string().optional()}).describe("Error emitted when a PCB trace is longer than its maximum allowed length"),wNt=Ua.extend({type:v.literal("pcb_bus_length_skew_error"),pcb_bus_length_skew_error_id:gn("pcb_bus_length_skew_error"),error_type:v.literal("pcb_bus_length_skew_error").default("pcb_bus_length_skew_error"),source_bus_id:v.string(),source_trace_ids:v.array(v.string()),pcb_trace_ids:v.array(v.string()),actual_length_skew:v.number().nonnegative().finite(),maximum_length_skew:v.number().nonnegative().finite(),subcircuit_id:v.string().optional()}),TNt=v.object({type:v.literal("pcb_trace_too_long_warning"),pcb_trace_too_long_warning_id:gn("pcb_trace_too_long_warning"),warning_type:v.literal("pcb_trace_too_long_warning").default("pcb_trace_too_long_warning"),message:v.string(),pcb_trace_id:v.string(),source_net_id:v.string().optional(),source_trace_id:v.string().optional(),actual_trace_length:xn,maximum_trace_length:xn,subcircuit_id:v.string().optional()}).describe("Warning emitted when a PCB trace is longer than its maximum allowed length"),DNt=v.object({type:v.literal("pcb_trace_too_many_vias_warning"),pcb_trace_too_many_vias_warning_id:gn("pcb_trace_too_many_vias_warning"),warning_type:v.literal("pcb_trace_too_many_vias_warning").default("pcb_trace_too_many_vias_warning"),message:v.string(),pcb_trace_id:v.string(),source_net_id:v.string().optional(),source_trace_id:v.string().optional(),actual_via_count:v.number().int().nonnegative(),maximum_via_count:v.number().int().nonnegative(),subcircuit_id:v.string().optional()}).describe("Warning emitted when a PCB trace has more vias than its maximum allowed count"),rk=Ua.extend({type:v.literal("pcb_bus_routing_constraint_error"),pcb_bus_routing_constraint_error_id:gn("pcb_bus_routing_constraint_error"),error_type:v.literal("pcb_bus_routing_constraint_error").default("pcb_bus_routing_constraint_error"),source_bus_id:v.string(),source_trace_ids:v.array(v.string()).min(1),pcb_trace_ids:v.array(v.string()),subcircuit_id:v.string().optional()}),NNt=v.discriminatedUnion("routing_rule",[rk.extend({routing_rule:v.literal("length_skew"),actual_length_skew:v.number().nonnegative().finite(),maximum_length_skew:v.number().nonnegative().finite()}),rk.extend({routing_rule:v.literal("min_length"),actual_trace_length:v.number().nonnegative().finite(),minimum_trace_length:v.number().finite()}),rk.extend({routing_rule:v.literal("max_length"),actual_trace_length:v.number().nonnegative().finite(),maximum_trace_length:v.number().finite()}),rk.extend({routing_rule:v.literal("target_length"),actual_trace_length:v.number().nonnegative().finite(),target_trace_length:v.number().finite(),length_tolerance:v.number().nonnegative().finite()}),rk.extend({routing_rule:v.literal("pcb_trace_spacing"),other_pcb_trace_id:v.string(),other_source_trace_id:v.string().optional(),actual_centerline_spacing:v.number().nonnegative().finite(),minimum_centerline_spacing:v.number().positive().finite()}),rk.extend({routing_rule:v.literal("pcb_spacing_to_other_signals"),other_pcb_trace_id:v.string(),other_source_trace_id:v.string().optional(),actual_centerline_spacing:v.number().nonnegative().finite(),minimum_centerline_spacing:v.number().positive().finite()}),rk.extend({routing_rule:v.literal("impedance_target"),target_impedance:v.number().positive().finite(),minimum_impedance:v.number().positive().finite().optional(),maximum_impedance:v.number().positive().finite().optional()})]).superRefine((e,t)=>{e.routing_rule==="impedance_target"&&(e.minimum_impedance===void 0&&e.maximum_impedance===void 0&&t.addIssue({code:v.ZodIssueCode.custom,path:["minimum_impedance"],message:"Provide an impedance bound"}),e.minimum_impedance!==void 0&&e.maximum_impedance!==void 0&&e.minimum_impedance>e.maximum_impedance&&t.addIssue({code:v.ZodIssueCode.custom,path:["maximum_impedance"],message:"Impedance bounds must be ordered"}))}).describe("A declared bus or differential-pair routing constraint is violated."),RZ=v.object({type:v.literal("pcb_bus_routing_constraint_warning"),pcb_bus_routing_constraint_warning_id:gn("pcb_bus_routing_constraint_warning"),warning_type:v.literal("pcb_bus_routing_constraint_warning").default("pcb_bus_routing_constraint_warning"),source_bus_id:v.string(),source_trace_ids:v.array(v.string()).min(1),pcb_trace_ids:v.array(v.string()),message:v.string(),subcircuit_id:v.string().optional()}).describe("A declared bus or pair constraint could not be verified; this is not a pass."),RNt=v.discriminatedUnion("routing_rule",[RZ.extend({routing_rule:v.literal("route_geometry")}),RZ.extend({routing_rule:v.literal("reference_geometry")}),RZ.extend({routing_rule:v.literal("spacing_geometry")}),RZ.extend({routing_rule:v.literal("target_length")}),RZ.extend({routing_rule:v.literal("physical_impedance")})]),QNt=Ua.extend({type:v.literal("pcb_trace_error"),pcb_trace_error_id:gn("pcb_trace_error"),error_type:v.literal("pcb_trace_error").default("pcb_trace_error"),center:Ko.optional(),pcb_trace_id:v.string(),source_trace_id:v.string(),pcb_component_ids:v.array(v.string()),pcb_port_ids:v.array(v.string()),subcircuit_id:v.string().optional()}).describe("Defines a trace error on the PCB"),kNt=Ua.extend({type:v.literal("pcb_trace_missing_error"),pcb_trace_missing_error_id:gn("pcb_trace_missing_error"),error_type:v.literal("pcb_trace_missing_error").default("pcb_trace_missing_error"),center:Ko.optional(),source_trace_id:v.string(),pcb_component_ids:v.array(v.string()),pcb_port_ids:v.array(v.string()),subcircuit_id:v.string().optional()}).describe("Defines an error when a source trace has no corresponding PCB trace"),LNt=Ua.extend({type:v.literal("pcb_port_not_matched_error"),pcb_error_id:gn("pcb_error"),error_type:v.literal("pcb_port_not_matched_error").default("pcb_port_not_matched_error"),pcb_component_ids:v.array(v.string()),subcircuit_id:v.string().optional()}).describe("Defines a trace error on the PCB where a port is not matched"),FNt=Ua.extend({type:v.literal("pcb_port_not_connected_error"),pcb_port_not_connected_error_id:gn("pcb_port_not_connected_error"),error_type:v.literal("pcb_port_not_connected_error").default("pcb_port_not_connected_error"),pcb_port_ids:v.array(v.string()),pcb_component_ids:v.array(v.string()),subcircuit_id:v.string().optional()}).describe("Defines an error when a pcb port is not connected to any trace"),HNt=v.object({type:v.literal("pcb_net"),pcb_net_id:gn("pcb_net"),source_net_id:v.string().optional(),highlight_color:v.string().optional()}).describe("Defines a net on the PCB"),ONt=v.object({type:v.literal("pcb_via"),pcb_via_id:gn("pcb_via"),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),subcircuit_connectivity_map_key:v.string().optional(),x:xn,y:xn,outer_diameter:xn.default("0.6mm"),hole_diameter:xn.default("0.25mm"),topmost_drill_layer:Er.optional(),bottommost_drill_layer:Er.optional(),through_hole:v.boolean().optional(),from_layer:Er.optional(),to_layer:Er.optional(),layers:v.array(Er),pcb_port_ids:v.array(v.string()).optional(),pcb_trace_id:v.string().optional(),source_trace_id:v.string().optional(),source_net_id:v.string().min(1).optional(),net_is_assignable:v.boolean().optional(),net_assigned:v.boolean().optional(),is_tented:v.boolean().optional(),tented_on_top:v.boolean().optional(),tented_on_bottom:v.boolean().optional()}).transform(({is_tented:e,...t})=>(e!==void 0&&(t.tented_on_top??=e,t.tented_on_bottom??=e),t)).describe("Defines a via on the PCB"),zNt=v.object({type:v.literal("pcb_board"),pcb_board_id:gn("pcb_board"),pcb_panel_id:v.string().optional(),carrier_pcb_board_id:v.string().optional(),is_subcircuit:v.boolean().optional(),subcircuit_id:v.string().optional(),is_mounted_to_carrier_board:v.boolean().optional(),is_via_in_pad_allowed:v.boolean().optional(),default_via_tented_on_top:v.boolean().optional(),default_via_tented_on_bottom:v.boolean().optional(),default_via_plugged:v.boolean().optional(),width:Lo.optional(),height:Lo.optional(),center:Ko,display_offset_x:v.string().optional().describe("How to display the x offset for this board, usually corresponding with how the user specified it"),display_offset_y:v.string().optional().describe("How to display the y offset for this board, usually corresponding with how the user specified it"),thickness:Lo.optional().default(1.4),num_layers:v.number().optional().default(4),allow_blind_and_buried_vias:v.boolean().optional().describe("Whether autorouters may generate blind and buried vias. False restricts newly generated vias to the full board stack."),outline:v.array(Ko).optional(),shape:v.enum(["rect","polygon"]).optional(),material:v.enum(["fr4","fr1","flex"]).default("fr4"),solder_mask_color:v.string().optional(),silkscreen_color:v.string().optional(),anchor_position:Ko.optional(),anchor_alignment:Y6.optional(),position_mode:v.enum(["relative_to_panel_anchor","none"]).optional()}).merge(nNt).describe("Defines the board outline of the PCB"),bvt=Ko.extend({x:Lo.pipe(v.number().finite()),y:Lo.pipe(v.number().finite())}),GNt=v.object({type:v.literal("pcb_bend"),pcb_bend_id:gn("pcb_bend"),pcb_board_id:v.string(),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),name:v.string().optional(),start:bvt,end:bvt,bend_angle:od.pipe(v.number().finite()),bend_radius:Lo.pipe(v.number().finite().positive()),bend_side:v.enum(["left","right"])}).refine(({start:e,end:t})=>e.x!==t.x||e.y!==t.y,{message:"Bend centerline endpoints must be distinct",path:["end"]}).describe("Defines a finite-radius bend on a flat PCB for runtime CAD folding"),sQe=Lo.pipe(v.number().finite().positive()),YNt=Ko.extend({x:Lo.pipe(v.number().finite()),y:Lo.pipe(v.number().finite())}),VNt=v.object({type:v.literal("pcb_stiffener"),pcb_stiffener_id:gn("pcb_stiffener"),pcb_board_id:v.string(),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),name:v.string().optional(),layer:v.enum(["top","bottom"]),material:v.enum(["fr4","polyimide","stainless_steel","aluminum"]),thickness:sQe,adhesive_thickness:Lo.pipe(v.number().finite().nonnegative()).optional()}),UNt=VNt.extend({shape:v.literal("rect"),center:YNt,rotation:od.pipe(v.number().finite()).optional(),width:sQe,height:sQe,outline:v.never().optional()}),WNt=VNt.extend({shape:v.literal("polygon"),outline:v.array(YNt).min(3).refine((e)=>{let t=e.reduce((n,o,i)=>{let r=e[(i+1)%e.length];return n+o.x*r.y-r.x*o.y},0);return Number.isFinite(t)&&t!==0},"Stiffener outline must enclose a nonzero area"),center:v.never().optional(),rotation:v.never().optional(),width:v.never().optional(),height:v.never().optional()}),XNt=v.discriminatedUnion("shape",[UNt,WNt]).describe("Defines bonded mechanical PCB reinforcement without adding copper layers"),KNt=v.object({type:v.literal("pcb_panel"),pcb_panel_id:gn("pcb_panel"),width:Lo,height:Lo,center:Ko,thickness:Lo.optional().default(1.4),covered_with_solder_mask:v.boolean().optional().default(!0)}).describe("Defines a PCB panel that can contain multiple boards"),jNt=Ua.extend({type:v.literal("pcb_placement_error"),pcb_placement_error_id:gn("pcb_placement_error"),error_type:v.literal("pcb_placement_error").default("pcb_placement_error"),subcircuit_id:v.string().optional()}).describe("Defines a placement error on the PCB"),qNt=Ua.extend({type:v.literal("pcb_packing_error"),pcb_packing_error_id:gn("pcb_packing_error"),error_type:v.literal("pcb_packing_error").default("pcb_packing_error"),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional()}).describe("Defines a failure to pack PCB components within layout bounds"),JNt=Ua.extend({type:v.literal("pcb_panelization_placement_error"),pcb_panelization_placement_error_id:gn("pcb_panelization_placement_error"),error_type:v.literal("pcb_panelization_placement_error").default("pcb_panelization_placement_error"),pcb_panel_id:v.string().optional(),pcb_board_id:v.string().optional(),subcircuit_id:v.string().optional()}).describe("Defines a panelization placement error on the PCB"),$Nt=v.object({type:v.literal("pcb_trace_hint"),pcb_trace_hint_id:gn("pcb_trace_hint"),pcb_port_id:v.string(),pcb_component_id:v.string(),route:v.array(tNt),subcircuit_id:v.string().optional()}).describe("A hint that can be used during generation of a PCB trace"),ZNt=v.object({type:v.literal("pcb_silkscreen_line"),pcb_silkscreen_line_id:gn("pcb_silkscreen_line"),pcb_component_id:v.string(),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),stroke_width:xn.default("0.1mm"),x1:xn,y1:xn,x2:xn,y2:xn,layer:Wm}).describe("Defines a silkscreen line on the PCB"),eRt=v.object({type:v.literal("pcb_silkscreen_path"),pcb_silkscreen_path_id:gn("pcb_silkscreen_path"),pcb_component_id:v.string(),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),layer:Wm,route:v.array(Ko),stroke_width:Lo}).describe("Defines a silkscreen path on the PCB"),tRt=v.object({type:v.literal("pcb_silkscreen_text"),pcb_silkscreen_text_id:gn("pcb_silkscreen_text"),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),font:v.literal("tscircuit2024").default("tscircuit2024"),font_size:xn.default("0.2mm"),pcb_component_id:v.string(),text:v.string(),is_knockout:v.boolean().default(!1).optional(),knockout_padding:v.object({left:Lo,top:Lo,bottom:Lo,right:Lo}).default({left:"0.2mm",top:"0.2mm",bottom:"0.2mm",right:"0.2mm"}).optional(),ccw_rotation:v.number().optional(),layer:Er,is_mirrored:v.boolean().default(!1).optional(),anchor_position:Ko.default({x:0,y:0}),anchor_alignment:Y6.default("center")}).describe("Defines silkscreen text on the PCB"),nRt=v.object({type:v.literal("pcb_copper_text"),pcb_copper_text_id:gn("pcb_copper_text"),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),font:v.literal("tscircuit2024").default("tscircuit2024"),font_size:xn.default("0.2mm"),pcb_component_id:v.string(),text:v.string(),is_knockout:v.boolean().default(!1).optional(),knockout_padding:v.object({left:Lo,top:Lo,bottom:Lo,right:Lo}).default({left:"0.2mm",top:"0.2mm",bottom:"0.2mm",right:"0.2mm"}).optional(),ccw_rotation:v.number().optional(),layer:Er,is_mirrored:v.boolean().default(!1).optional(),anchor_position:Ko.default({x:0,y:0}),anchor_alignment:Y6.default("center")}).describe("Defines copper text on the PCB"),oRt=v.object({type:v.literal("pcb_silkscreen_rect"),pcb_silkscreen_rect_id:gn("pcb_silkscreen_rect"),pcb_component_id:v.string(),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),center:Ko,width:Lo,height:Lo,layer:Er,stroke_width:Lo.default("1mm"),corner_radius:Lo.optional(),is_filled:v.boolean().default(!0).optional(),has_stroke:v.boolean().optional(),is_stroke_dashed:v.boolean().optional(),ccw_rotation:v.number().optional()}).describe("Defines a silkscreen rect on the PCB"),iRt=v.object({type:v.literal("pcb_silkscreen_circle"),pcb_silkscreen_circle_id:gn("pcb_silkscreen_circle"),pcb_component_id:v.string(),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),center:Ko,radius:Lo,layer:Wm,stroke_width:Lo.default("1mm"),is_filled:v.boolean().optional()}).describe("Defines a silkscreen circle on the PCB"),rRt=v.object({type:v.literal("pcb_silkscreen_oval"),pcb_silkscreen_oval_id:gn("pcb_silkscreen_oval"),pcb_component_id:v.string(),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),center:Ko,radius_x:xn,radius_y:xn,layer:Wm,ccw_rotation:od.optional()}).describe("Defines a silkscreen oval on the PCB"),sRt=v.object({type:v.literal("pcb_silkscreen_graphic"),pcb_silkscreen_graphic_id:gn("pcb_silkscreen_graphic"),pcb_component_id:v.string(),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),layer:Wm,image_asset:Ute.optional()}).extend({shape:v.literal("brep"),brep_shape:pFe}).describe("Defines a BRep silkscreen graphic on the PCB"),aRt=v.discriminatedUnion("shape",[sRt]).describe("Defines a silkscreen graphic on the PCB"),cRt=v.object({type:v.literal("pcb_silkscreen_pill"),pcb_silkscreen_pill_id:gn("pcb_silkscreen_pill"),pcb_component_id:v.string(),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),center:Ko,width:Lo,height:Lo,layer:Er,ccw_rotation:v.number().optional()}).describe("Defines a silkscreen pill on the PCB"),lRt=v.object({type:v.literal("pcb_fabrication_note_text"),pcb_fabrication_note_text_id:gn("pcb_fabrication_note_text"),subcircuit_id:v.string().optional(),pcb_group_id:v.string().optional(),font:v.literal("tscircuit2024").default("tscircuit2024"),font_size:xn.default("1mm"),pcb_component_id:v.string(),text:v.string(),ccw_rotation:v.number().optional(),layer:Wm,anchor_position:Ko.default({x:0,y:0}),anchor_alignment:v.enum(["center","top_left","top_right","bottom_left","bottom_right"]).default("center"),color:v.string().optional()}).describe("Defines a fabrication note in text on the PCB, useful for leaving notes for assemblers or fabricators"),dRt=v.object({type:v.literal("pcb_fabrication_note_path"),pcb_fabrication_note_path_id:gn("pcb_fabrication_note_path"),pcb_component_id:v.string(),subcircuit_id:v.string().optional(),layer:Er,route:v.array(Ko),stroke_width:Lo,color:v.string().optional(),is_filled:v.boolean().optional(),has_stroke:v.boolean().optional()}).describe("Defines a fabrication path on the PCB for fabricators or assemblers"),uRt=v.object({type:v.literal("pcb_fabrication_note_rect"),pcb_fabrication_note_rect_id:gn("pcb_fabrication_note_rect"),pcb_component_id:v.string(),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),center:Ko,width:Lo,height:Lo,layer:Wm,stroke_width:Lo.default("0.1mm"),corner_radius:Lo.optional(),is_filled:v.boolean().optional(),has_stroke:v.boolean().optional(),is_stroke_dashed:v.boolean().optional(),color:v.string().optional()}).describe("Defines a fabrication note rectangle on the PCB"),hRt=v.object({type:v.literal("pcb_fabrication_note_dimension"),pcb_fabrication_note_dimension_id:gn("pcb_fabrication_note_dimension"),pcb_component_id:v.string(),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),layer:Wm,from:Ko,to:Ko,text:v.string().optional(),text_ccw_rotation:v.number().optional(),offset:Lo.optional(),offset_distance:Lo.optional(),offset_direction:v.object({x:v.number(),y:v.number()}).optional(),font:v.literal("tscircuit2024").default("tscircuit2024"),font_size:Lo.default("1mm"),color:v.string().optional(),arrow_size:Lo.default("1mm")}).describe("Defines a measurement annotation within PCB fabrication notes"),mRt=v.object({type:v.literal("pcb_note_text"),pcb_note_text_id:gn("pcb_note_text"),pcb_component_id:v.string().optional(),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),name:v.string().optional(),font:v.literal("tscircuit2024").default("tscircuit2024"),font_size:xn.default("1mm"),text:v.string().optional(),anchor_position:Ko.default({x:0,y:0}),anchor_alignment:v.enum(["center","top_left","top_right","bottom_left","bottom_right"]).default("center"),layer:Wm.default("top"),is_mirrored_from_top_view:v.boolean().optional(),color:v.string().optional()}).describe("Defines a documentation note in text on the PCB"),pRt=v.object({type:v.literal("pcb_note_rect"),pcb_note_rect_id:gn("pcb_note_rect"),pcb_component_id:v.string().optional(),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),name:v.string().optional(),text:v.string().optional(),center:Ko,width:Lo,height:Lo,layer:Wm.default("top"),stroke_width:Lo.default("0.1mm"),corner_radius:Lo.optional(),is_filled:v.boolean().optional(),has_stroke:v.boolean().optional(),is_stroke_dashed:v.boolean().optional(),color:v.string().optional()}).describe("Defines a rectangular documentation note on the PCB"),ARt=v.object({type:v.literal("pcb_note_path"),pcb_note_path_id:gn("pcb_note_path"),pcb_component_id:v.string().optional(),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),name:v.string().optional(),text:v.string().optional(),route:v.array(Ko),layer:Wm.default("top"),stroke_width:Lo.default("0.1mm"),color:v.string().optional()}).describe("Defines a polyline documentation note on the PCB"),_Rt=v.object({type:v.literal("pcb_note_line"),pcb_note_line_id:gn("pcb_note_line"),pcb_component_id:v.string().optional(),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),name:v.string().optional(),text:v.string().optional(),x1:xn,y1:xn,x2:xn,y2:xn,layer:Wm.default("top"),stroke_width:xn.default("0.1mm"),color:v.string().optional(),is_dashed:v.boolean().optional()}).describe("Defines a straight documentation note line on the PCB"),gRt=v.object({type:v.literal("pcb_note_dimension"),pcb_note_dimension_id:gn("pcb_note_dimension"),pcb_component_id:v.string().optional(),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),name:v.string().optional(),from:Ko,to:Ko,text:v.string().optional(),text_ccw_rotation:v.number().optional(),offset_distance:Lo.optional(),offset_direction:v.object({x:v.number(),y:v.number()}).optional(),font:v.literal("tscircuit2024").default("tscircuit2024"),font_size:Lo.default("1mm"),layer:Wm.default("top"),color:v.string().optional(),arrow_size:Lo.default("1mm")}).describe("Defines a measurement annotation within PCB documentation notes"),fRt=Ua.extend({type:v.literal("pcb_footprint_overlap_error"),pcb_error_id:gn("pcb_error"),error_type:v.literal("pcb_footprint_overlap_error").default("pcb_footprint_overlap_error"),pcb_smtpad_ids:v.array(v.string()).optional(),pcb_plated_hole_ids:v.array(v.string()).optional(),pcb_hole_ids:v.array(v.string()).optional(),pcb_keepout_ids:v.array(v.string()).optional()}).describe("Error emitted when a pcb footprint overlaps with another element"),yRt=Ua.extend({type:v.literal("pcb_courtyard_overlap_error"),pcb_error_id:gn("pcb_error"),error_type:v.literal("pcb_courtyard_overlap_error").default("pcb_courtyard_overlap_error"),pcb_component_ids:v.tuple([v.string(),v.string()])}).describe("Error emitted when the courtyard (CrtYd) of one PCB component overlaps with the courtyard of another"),xRt=v.object({type:v.literal("pcb_keepout"),shape:v.literal("outline"),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),outline:v.array(Ko).min(2),stroke_width:Lo,pcb_keepout_id:v.string(),layers:v.array(v.string()),description:v.string().optional(),excluded_pcb_component_ids:v.array(v.string()).optional(),warning_only:v.boolean().optional(),allow_traces:v.boolean().optional(),allow_placements:v.boolean().optional()}),CRt=v.object({type:v.literal("pcb_keepout"),shape:v.literal("rect"),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),center:Ko,width:xn,height:xn,pcb_keepout_id:v.string(),layers:v.array(v.string()),description:v.string().optional(),excluded_pcb_component_ids:v.array(v.string()).optional(),warning_only:v.boolean().optional(),allow_traces:v.boolean().optional(),allow_placements:v.boolean().optional()}).or(v.object({type:v.literal("pcb_keepout"),shape:v.literal("circle"),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),center:Ko,radius:xn,pcb_keepout_id:v.string(),layers:v.array(v.string()),description:v.string().optional(),excluded_pcb_component_ids:v.array(v.string()).optional(),warning_only:v.boolean().optional(),allow_traces:v.boolean().optional(),allow_placements:v.boolean().optional()})).or(xRt),IRt=v.object({type:v.literal("pcb_keepout_overlap_warning"),pcb_keepout_overlap_warning_id:gn("pcb_keepout_overlap_warning"),warning_type:v.literal("pcb_keepout_overlap_warning").default("pcb_keepout_overlap_warning"),message:v.string(),pcb_keepout_id:v.string(),pcb_component_ids:v.array(v.string()).optional(),pcb_trace_ids:v.array(v.string()).optional(),pcb_smtpad_ids:v.array(v.string()).optional(),pcb_plated_hole_ids:v.array(v.string()).optional(),pcb_via_ids:v.array(v.string()).optional(),center:Ko.optional(),subcircuit_id:v.string().optional()}).describe("Warning emitted when copper overlaps a PCB keepout with warning_only enabled"),pfe=v.object({type:v.literal("pcb_cutout"),pcb_cutout_id:gn("pcb_cutout"),pcb_component_id:v.string().optional(),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),pcb_board_id:v.string().optional(),pcb_panel_id:v.string().optional()}),bRt=pfe.extend({shape:v.literal("rect"),center:Ko,width:Lo,height:Lo,rotation:od.optional(),corner_radius:Lo.optional()}),SRt=pfe.extend({shape:v.literal("circle"),center:Ko,radius:Lo}),PRt=pfe.extend({shape:v.literal("polygon"),points:v.array(Ko)}),vRt=pfe.extend({shape:v.literal("path"),route:v.array(Ko),slot_width:Lo,slot_length:Lo.optional(),space_between_slots:Lo.optional(),slot_corner_radius:Lo.optional()}),ERt=v.discriminatedUnion("shape",[bRt,SRt,PRt,vRt]).describe("Defines a cutout on the PCB, removing board material."),MRt=Ua.extend({type:v.literal("pcb_missing_footprint_error"),pcb_missing_footprint_error_id:gn("pcb_missing_footprint_error"),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),error_type:v.literal("pcb_missing_footprint_error").default("pcb_missing_footprint_error"),source_component_id:v.string()}).describe("Defines a missing footprint error on the PCB"),BRt=Ua.extend({type:v.literal("external_footprint_load_error"),external_footprint_load_error_id:gn("external_footprint_load_error"),pcb_component_id:v.string(),source_component_id:v.string(),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),footprinter_string:v.string().optional(),error_type:v.literal("external_footprint_load_error").default("external_footprint_load_error")}).describe("Defines an error when an external footprint fails to load"),wRt=Ua.extend({type:v.literal("circuit_json_footprint_load_error"),circuit_json_footprint_load_error_id:gn("circuit_json_footprint_load_error"),pcb_component_id:v.string(),source_component_id:v.string(),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),error_type:v.literal("circuit_json_footprint_load_error").default("circuit_json_footprint_load_error"),circuit_json:v.array(v.any()).optional()}).describe("Defines an error when a circuit JSON footprint fails to load"),TRt=v.object({type:v.literal("pcb_group"),pcb_group_id:gn("pcb_group"),source_group_id:v.string(),is_subcircuit:v.boolean().optional(),subcircuit_id:v.string().optional(),width:Lo.optional(),height:Lo.optional(),center:Ko,display_offset_x:v.string().optional().describe("How to display the x offset for this group, usually corresponding with how the user specified it"),display_offset_y:v.string().optional().describe("How to display the y offset for this group, usually corresponding with how the user specified it"),outline:v.array(Ko).optional(),anchor_position:Ko.optional(),anchor_alignment:Y6.default("center"),position_mode:v.enum(["packed","relative_to_group_anchor","none"]).optional(),positioned_relative_to_pcb_group_id:v.string().optional(),positioned_relative_to_pcb_board_id:v.string().optional(),pcb_component_ids:v.array(v.string()),child_layout_mode:v.enum(["packed","none"]).optional(),name:v.string().optional(),description:v.string().optional(),layout_mode:v.string().optional(),autorouter_configuration:v.object({trace_clearance:Lo}).optional(),autorouter_used_string:v.string().optional()}).describe("Defines a group of components on the PCB"),DRt=Ua.extend({type:v.literal("pcb_autorouting_error"),pcb_error_id:gn("pcb_autorouting_error"),error_type:v.literal("pcb_autorouting_error").default("pcb_autorouting_error"),subcircuit_id:v.string().optional()}).describe("The autorouting has failed to route a portion of the board"),NRt=Ua.extend({type:v.literal("pcb_preflight_routing_error"),pcb_preflight_routing_error_id:gn("pcb_preflight_routing_error"),error_type:v.literal("pcb_preflight_routing_error").default("pcb_preflight_routing_error"),error_code:v.string(),subcircuit_id:v.string().optional(),pcb_group_id:v.string().optional(),routing_phase_index:v.number().int().optional(),phase_name:v.string().optional(),source_trace_ids:v.array(v.string()).optional(),pcb_component_ids:v.array(v.string()).optional(),pcb_port_ids:v.array(v.string()).optional(),related_error_ids:v.array(v.string()).optional(),measurements:v.record(v.number().finite()).optional()}),RRt=v.object({type:v.literal("pcb_manual_edit_conflict_warning"),pcb_manual_edit_conflict_warning_id:gn("pcb_manual_edit_conflict_warning"),warning_type:v.literal("pcb_manual_edit_conflict_warning").default("pcb_manual_edit_conflict_warning"),message:v.string(),pcb_component_id:v.string(),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),source_component_id:v.string()}).describe("Warning emitted when a component has both manual placement and explicit pcbX/pcbY coordinates"),Svt=v.enum(["x-","x+","y+","y-"]),QRt=v.object({type:v.literal("pcb_connector_not_in_accessible_orientation_warning"),pcb_connector_not_in_accessible_orientation_warning_id:gn("pcb_connector_not_in_accessible_orientation_warning"),warning_type:v.literal("pcb_connector_not_in_accessible_orientation_warning").default("pcb_connector_not_in_accessible_orientation_warning"),message:v.string(),pcb_component_id:v.string(),source_component_id:v.string().optional(),pcb_board_id:v.string().optional(),facing_direction:Svt,recommended_facing_direction:Svt,subcircuit_id:v.string().optional()}).describe("Warning emitted when a connector PCB component is facing inward toward the board and should be reoriented to an outward-facing direction"),kRt=v.object({type:v.literal("pcb_component_missing_courtyard_warning"),pcb_component_missing_courtyard_warning_id:gn("pcb_component_missing_courtyard_warning"),warning_type:v.literal("pcb_component_missing_courtyard_warning").default("pcb_component_missing_courtyard_warning"),message:v.string(),pcb_component_id:v.string(),source_component_id:v.string().optional(),subcircuit_id:v.string().optional()}).describe("Warning emitted when a PCB component has no courtyard geometry"),LRt=v.object({type:v.literal("supplier_footprint_mismatch_warning"),supplier_footprint_mismatch_warning_id:gn("supplier_footprint_mismatch_warning"),warning_type:v.literal("supplier_footprint_mismatch_warning").default("supplier_footprint_mismatch_warning"),message:v.string(),source_component_id:v.string(),pcb_component_id:v.string().optional(),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),supplier_name:MU.optional(),supplier_part_number:v.string().optional(),supplier_footprint_url:v.string().optional(),footprint_copper_intersection_over_union:v.number()}).describe("Warning emitted when a supplier part footprint does not match the expected footprint"),FRt=v.object({type:v.literal("pcb_fabricator_extra_charge_warning"),pcb_fabricator_extra_charge_warning_id:gn("pcb_fabricator_extra_charge_warning"),warning_type:v.literal("pcb_fabricator_extra_charge_warning").default("pcb_fabricator_extra_charge_warning"),message:v.string(),fabricator_preset:v.string(),pcb_board_id:v.string().optional(),pcb_via_ids:v.array(v.string()).optional(),subcircuit_id:v.string().optional()}).describe("Warning that a design feature incurs an extra charge for the selected fabricator preset, such as via hole diameters below 0.3 mm with JLCPCB economy or standard presets."),HRt=v.object({type:v.literal("pcb_breakout_point"),pcb_breakout_point_id:gn("pcb_breakout_point"),pcb_group_id:v.string(),subcircuit_id:v.string().optional(),source_trace_id:v.string().optional(),source_port_id:v.string().optional(),source_net_id:v.string().optional(),layer:Er.optional(),x:xn,y:xn}).describe("Defines a routing target within a pcb_group for a source_trace or source_net"),ORt=v.object({type:v.literal("pcb_ground_plane"),pcb_ground_plane_id:gn("pcb_ground_plane"),source_pcb_ground_plane_id:v.string(),source_net_id:v.string(),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional()}).describe("Defines a ground plane on the PCB"),zRt=v.object({type:v.literal("pcb_ground_plane_region"),pcb_ground_plane_region_id:gn("pcb_ground_plane_region"),pcb_ground_plane_id:v.string(),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),layer:Er,points:v.array(Ko)}).describe("Defines a polygon region of a ground plane"),GRt=v.object({type:v.literal("pcb_thermal_spoke"),pcb_thermal_spoke_id:gn("pcb_thermal_spoke"),pcb_ground_plane_id:v.string(),shape:v.string(),spoke_count:v.number(),spoke_thickness:xn,spoke_inner_diameter:xn,spoke_outer_diameter:xn,pcb_plated_hole_id:v.string().optional(),subcircuit_id:v.string().optional()}).describe("Pattern for connecting a ground plane to a plated hole"),AFe=v.object({type:v.literal("pcb_copper_pour"),pcb_copper_pour_id:gn("pcb_copper_pour"),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),layer:Er,source_net_id:v.string().optional(),covered_with_solder_mask:v.boolean().optional().default(!0)}),YRt=AFe.extend({shape:v.literal("rect"),center:Ko,width:Lo,height:Lo,rotation:od.optional()}),VRt=AFe.extend({shape:v.literal("brep"),brep_shape:pFe}),URt=AFe.extend({shape:v.literal("polygon"),points:v.array(Ko)}),WRt=v.discriminatedUnion("shape",[YRt,VRt,URt]).describe("Defines a copper pour on the PCB."),XRt=Ua.extend({type:v.literal("pcb_component_outside_board_error"),pcb_component_outside_board_error_id:gn("pcb_component_outside_board_error"),error_type:v.literal("pcb_component_outside_board_error").default("pcb_component_outside_board_error"),pcb_component_id:v.string(),pcb_board_id:v.string(),component_center:Ko,component_bounds:v.object({min_x:v.number(),max_x:v.number(),min_y:v.number(),max_y:v.number()}),subcircuit_id:v.string().optional(),source_component_id:v.string().optional()}).describe("Error emitted when a PCB component is placed outside the board boundaries"),KRt=Ua.extend({type:v.literal("pcb_component_not_on_board_edge_error"),pcb_component_not_on_board_edge_error_id:gn("pcb_component_not_on_board_edge_error"),error_type:v.literal("pcb_component_not_on_board_edge_error").default("pcb_component_not_on_board_edge_error"),pcb_component_id:v.string(),pcb_board_id:v.string(),component_center:Ko,pad_to_nearest_board_edge_distance:v.number(),source_component_id:v.string().optional(),subcircuit_id:v.string().optional()}).describe("Error emitted when a component that must be placed on the board edge is centered away from the edge"),jRt=Ua.extend({type:v.literal("pcb_component_invalid_layer_error"),pcb_component_invalid_layer_error_id:gn("pcb_component_invalid_layer_error"),error_type:v.literal("pcb_component_invalid_layer_error").default("pcb_component_invalid_layer_error"),pcb_component_id:v.string().optional(),source_component_id:v.string(),layer:Er,subcircuit_id:v.string().optional()}).describe("Error emitted when a component is placed on an invalid layer (components can only be on 'top' or 'bottom' layers)"),qRt=Ua.extend({type:v.literal("pcb_via_clearance_error"),pcb_error_id:gn("pcb_error"),error_type:v.literal("pcb_via_clearance_error").default("pcb_via_clearance_error"),pcb_via_ids:v.array(v.string()).min(2),minimum_clearance:xn.optional(),actual_clearance:xn.optional(),pcb_center:v.object({x:v.number().optional(),y:v.number().optional()}).optional(),subcircuit_id:v.string().optional()}).describe("Error emitted when vias are closer than the allowed clearance"),JRt=Ua.extend({type:v.literal("pcb_via_trace_clearance_error"),pcb_via_trace_clearance_error_id:gn("pcb_via_trace_clearance_error"),error_type:v.literal("pcb_via_trace_clearance_error").default("pcb_via_trace_clearance_error"),pcb_via_id:v.string(),pcb_trace_id:v.string(),minimum_clearance:xn.optional(),actual_clearance:xn.optional(),center:v.object({x:v.number().optional(),y:v.number().optional()}).optional(),subcircuit_id:v.string().optional()}).describe("Error emitted when a via and trace are closer than the allowed clearance"),$Rt=Ua.extend({type:v.literal("pcb_pad_pad_clearance_error"),pcb_pad_pad_clearance_error_id:gn("pcb_pad_pad_clearance_error"),error_type:v.literal("pcb_pad_pad_clearance_error").default("pcb_pad_pad_clearance_error"),pcb_pad_ids:v.array(v.string()).min(2),minimum_clearance:xn.optional(),actual_clearance:xn.optional(),center:v.object({x:v.number().optional(),y:v.number().optional()}).optional(),subcircuit_id:v.string().optional()}).describe("Error emitted when pads are closer than the allowed clearance"),ZRt=Ua.extend({type:v.literal("pcb_pad_trace_clearance_error"),pcb_pad_trace_clearance_error_id:gn("pcb_pad_trace_clearance_error"),error_type:v.literal("pcb_pad_trace_clearance_error").default("pcb_pad_trace_clearance_error"),pcb_pad_id:v.string(),pcb_trace_id:v.string(),minimum_clearance:xn.optional(),actual_clearance:xn.optional(),center:v.object({x:v.number().optional(),y:v.number().optional()}).optional(),subcircuit_id:v.string().optional()}).describe("Error emitted when a pad and trace are closer than allowed clearance"),eQt=v.object({type:v.literal("pcb_courtyard_rect"),pcb_courtyard_rect_id:gn("pcb_courtyard_rect"),pcb_component_id:v.string(),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),center:Ko,width:Lo,height:Lo,layer:Wm,ccw_rotation:od.optional(),color:v.string().optional()}).describe("Defines a courtyard rectangle on the PCB"),tQt=v.object({type:v.literal("pcb_courtyard_outline"),pcb_courtyard_outline_id:gn("pcb_courtyard_outline"),pcb_component_id:v.string(),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),layer:Wm,outline:v.array(Ko).min(2)}).describe("Defines a courtyard outline on the PCB"),nQt=v.object({type:v.literal("pcb_courtyard_polygon"),pcb_courtyard_polygon_id:gn("pcb_courtyard_polygon"),pcb_component_id:v.string(),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),layer:Wm,points:v.array(Ko).min(3),color:v.string().optional()}).describe("Defines a courtyard polygon on the PCB"),oQt=v.object({type:v.literal("pcb_courtyard_circle"),pcb_courtyard_circle_id:gn("pcb_courtyard_circle"),pcb_component_id:v.string(),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),center:Ko,radius:Lo,layer:Wm,color:v.string().optional()}).describe("Defines a courtyard circle on the PCB"),iQt=v.object({type:v.literal("pcb_courtyard_pill"),pcb_courtyard_pill_id:gn("pcb_courtyard_pill"),pcb_component_id:v.string(),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),center:Ko,width:Lo,height:Lo,radius:Lo,layer:Wm,color:v.string().optional()}).describe("Defines a courtyard pill on the PCB"),WDo=["obj","stl","3mf","gltf","glb","step","wrl"],rQt=["x+","x-","y+","y-","z+","z-"],XDo={obj:"z+",stl:"z+","3mf":"z+",gltf:"y+",glb:"y+",step:"z+",wrl:"y+"},sQt=v.object({type:v.literal("cad_component"),cad_component_id:v.string(),pcb_component_id:v.string().optional().describe("Optional PCB component reference; omit for CAD geometry without a PCB component"),source_component_id:v.string(),position:QI,rotation:QI.optional(),is_on_folded_board:v.boolean().optional().describe("True when position and rotation describe the assembled folded board pose. False or omitted means the flat board pose. PCB records remain flat; pcb_component_id identifies the flat mount and owning board for reversible transforms."),size:QI.optional(),layer:Er.optional(),subcircuit_id:v.string().optional(),footprinter_string:v.string().optional(),model_obj_url:v.string().optional(),model_stl_url:v.string().optional(),model_3mf_url:v.string().optional(),model_gltf_url:v.string().optional(),model_glb_url:v.string().optional(),model_step_url:v.string().optional(),model_wrl_url:v.string().optional(),model_asset:Ute.optional(),model_unit_to_mm_scale_factor:v.number().optional(),model_board_normal_direction:v.enum(rQt).optional().describe(`The direction in the model's coordinate space that is considered "up" or "coming out of the board surface"`),model_origin_position:QI.optional(),model_origin_alignment:v.enum(["unknown","center","center_of_component_on_board_surface","bottom_center_of_component"]).optional(),model_object_fit:v.enum(["contain_within_bounds","fill_bounds"]).optional().default("contain_within_bounds"),model_jscad:v.any().optional(),color:v.string().trim().min(1).optional().describe("Explicit color override for CAD geometry, including authored JSCAD material colors. Omit to preserve model materials."),show_as_translucent_model:v.boolean().optional(),show_as_bounding_box:v.boolean().optional(),show_hidden_edges:v.boolean().optional(),anchor_alignment:v.enum(["center","center_of_component_on_board_surface"]).optional().default("center")}).describe("Defines CAD geometry, optionally associated with a PCB component"),aQt=Ua.extend({type:v.literal("cad_collision_error"),cad_collision_error_id:gn("cad_collision_error"),error_type:v.literal("cad_collision_error").default("cad_collision_error"),cad_component_ids:v.array(v.string()).min(1),pcb_component_ids:v.array(v.string()).optional(),source_component_ids:v.array(v.string()).min(1),intersection_area_mm2:v.number().finite().nonnegative(),threshold_area_mm2:v.number().finite().nonnegative()}).describe("An aperture-bearing part intersects the finished enclosure. The intersection_area_mm2 is the union silhouette area of the solid intersection projected along the aperture face normal, in the right-handed Circuit JSON world frame (+X right, +Y top, +Z above). It is an area in square millimetres, not intersection volume or surface area. This indicates possible aperture misplacement, insufficient size/depth, or body clearance problems; it does not prove which cause applies."),Pvt=QI.refine((e)=>[e.x,e.y,e.z].every(Number.isFinite),"Connector pin 1 positions must be finite").describe("Resolved pin 1 position at the connector mating face, in right-handed circuit world, millimeters: +X right, +Y top, +Z above. An absolute point, not a direction. Computed by the circuit producer from endpoint geometry. Together with the endpoint path tangent, fixes connector roll and identifies its pin 1 side; renderers must not infer it from footprints."),cQt=v.object({type:v.literal("cad_cable"),cad_cable_id:v.string(),name:v.string().min(1),from_source_component_id:v.string(),to_source_component_id:v.string(),from_connector_pin1_position:Pvt.optional(),to_connector_pin1_position:Pvt.optional(),cableprinter_string:v.string().min(1).describe('Physical cable definition, e.g. "usb_c" or "jst_ph_pins6". Independent of the route.'),path:v.array(QI).min(2).refine((e)=>e.every((t,n)=>[t.x,t.y,t.z].every(Number.isFinite)&&(n===0||Math.hypot(t.x-e[n-1].x,t.y-e[n-1].y,t.z-e[n-1].z)>0.00000001)),"Cable paths require finite, distinct consecutive points").describe("Resolved cable centerline points in right-handed circuit world, millimeters: +X right, +Y top, +Z above. First/last samples are connector wire exits; their tangents point into/out of the cable. Includes routing/slack; renderers must not recompute the path.")}).describe("A physical assembly cable with a resolved 3D route. Several cables are independent cad_cable records, each with its own endpoints, definition and path. Does not imply electrical pin mapping."),lQt=0.000001,vvt=v.object({x:v.number().finite(),y:v.number().finite(),z:v.number().finite()}).refine((e)=>Math.abs(Math.hypot(e.x,e.y,e.z)-1)<=lQt,"Reference surface directions must be unit vectors"),Evt=xn.pipe(v.number().finite().positive()),dQt=v.object({type:v.literal("cad_reference_surface"),cad_reference_surface_id:v.string().min(1),source_component_id:v.string().min(1).describe("Owning assembly part's source component ID. The part may have no CAD geometry."),name:v.string().trim().min(1).describe("Reference name, unique within the owning part, e.g. shade in STEM.shade."),shape:v.literal("rect"),center:QI.refine((e)=>[e.x,e.y,e.z].every(Number.isFinite),"Reference surface centers must be finite").describe("Resolved surface center in right-handed circuit-world XYZ, millimeters: +X right, +Y top, +Z above. An absolute point after assembly placement."),normal:vvt.describe("Outward unit normal in circuit-world XYZ. Dimensionless direction; transform with the part's rotation, without translation."),x_axis:vvt.describe("In-plane unit X direction in circuit-world XYZ, perpendicular to normal. The second tangent is normal cross x_axis, giving a right-handed frame."),width:Evt.optional().describe("Rectangular extent along x_axis in millimeters. Supply together with height. Omission leaves the surface's display size unspecified."),height:Evt.optional().describe("Rectangular extent along normal cross x_axis in millimeters. Supply together with width."),subcircuit_id:v.string().optional()}).superRefine((e,t)=>{e.width===void 0!=(e.height===void 0)&&t.addIssue({code:v.ZodIssueCode.custom,path:["width"],message:"Provide width and height together"});let{normal:n,x_axis:o}=e;Math.abs(n.x*o.x+n.y*o.y+n.z*o.z)>lQt&&t.addIssue({code:v.ZodIssueCode.custom,path:["x_axis"],message:"x_axis must be perpendicular to normal"})}).describe("A named assembly mounting surface with a resolved world-space frame. Reference geometry for optional visualization; does not add solid material or electrical connectivity. The producer resolves part placement independently of CAD-model offsets; renderers consume the world frame without reapplying the owning model's transform."),_Fe=v.enum(["sinewave","square","triangle","sawtooth"]),KDo=v.union([v.string(),v.number()]).transform((e)=>typeof e=="string"?e.endsWith("%")?parseFloat(e.slice(0,-1))/100:parseFloat(e):e).pipe(v.number().min(0,"Duty cycle must be non-negative").max(1,"Duty cycle cannot be greater than 100%")),uQt=v.object({type:v.literal("simulation_voltage_source"),simulation_voltage_source_id:gn("simulation_voltage_source"),is_dc_source:v.literal(!0).optional().default(!0),positive_source_port_id:v.string().optional(),negative_source_port_id:v.string().optional(),positive_source_net_id:v.string().optional(),negative_source_net_id:v.string().optional(),voltage:FI,ac_magnitude:FI.optional(),ac_phase:od.optional()}).describe("Defines a DC voltage source for simulation"),hQt=v.object({type:v.literal("simulation_voltage_source"),simulation_voltage_source_id:gn("simulation_voltage_source"),is_dc_source:v.literal(!1),terminal1_source_port_id:v.string().optional(),terminal2_source_port_id:v.string().optional(),terminal1_source_net_id:v.string().optional(),terminal2_source_net_id:v.string().optional(),voltage:FI.optional(),frequency:_L.optional(),peak_to_peak_voltage:FI.optional(),wave_shape:_Fe.optional(),phase:od.optional(),duty_cycle:KDo.optional(),pulse_delay:Hp.optional(),rise_time:Hp.optional(),fall_time:Hp.optional(),pulse_width:Hp.optional(),period:Hp.optional(),ac_magnitude:FI.optional(),ac_phase:od.optional()}).describe("Defines an AC voltage source for simulation"),mQt=v.union([uQt,hQt]).describe("Defines a voltage source for simulation"),jDo=v.union([v.string(),v.number()]).transform((e)=>typeof e=="string"?e.endsWith("%")?parseFloat(e.slice(0,-1))/100:parseFloat(e):e).pipe(v.number().min(0,"Duty cycle must be non-negative").max(1,"Duty cycle cannot be greater than 100%")),pQt=v.object({type:v.literal("simulation_current_source"),simulation_current_source_id:gn("simulation_current_source"),is_dc_source:v.literal(!0).optional().default(!0),positive_source_port_id:v.string().optional(),negative_source_port_id:v.string().optional(),positive_source_net_id:v.string().optional(),negative_source_net_id:v.string().optional(),current:G8,ac_magnitude:G8.optional(),ac_phase:od.optional()}).describe("Defines a DC current source for simulation"),AQt=v.object({type:v.literal("simulation_current_source"),simulation_current_source_id:gn("simulation_current_source"),is_dc_source:v.literal(!1),terminal1_source_port_id:v.string().optional(),terminal2_source_port_id:v.string().optional(),terminal1_source_net_id:v.string().optional(),terminal2_source_net_id:v.string().optional(),current:G8.optional(),frequency:_L.optional(),peak_to_peak_current:G8.optional(),wave_shape:_Fe.optional(),phase:od.optional(),duty_cycle:jDo.optional(),ac_magnitude:G8.optional(),ac_phase:od.optional()}).describe("Defines an AC current source for simulation"),_Qt=v.union([pQt,AQt]).describe("Defines a current source for simulation"),Afe=v.custom((e)=>e==="V"||e==="A"),gFe=v.custom((e)=>e==="Ω"||e==="F"||e==="H"||e==="V"||e==="A"),gQt=v.union([v.literal("spice_dc_sweep"),v.literal("spice_dc_operating_point"),v.literal("spice_transient_analysis"),v.literal("spice_ac_analysis"),v.literal("pcb_return_current")]),fQt=v.object({method:v.enum(["trap","gear"]).optional(),reltol:v.union([v.number(),v.string()]).optional(),abstol:v.union([v.number(),v.string()]).optional(),vntol:v.union([v.number(),v.string()]).optional()}).describe("SPICE solver options for a simulation experiment"),yQt=v.object({type:v.literal("simulation_experiment"),simulation_experiment_id:gn("simulation_experiment"),name:v.string(),experiment_type:gQt,time_per_step:EU.optional(),start_time_ms:Hp.optional(),end_time_ms:Hp.optional(),spice_options:fQt.optional(),dc_sweep_voltage_source_id:v.string().optional(),dc_sweep_current_source_id:v.string().optional(),dc_sweep_start:v.number().optional(),dc_sweep_stop:v.number().optional(),dc_sweep_step:v.number().refine((e)=>e!==0).optional(),dc_sweep_unit:Afe.optional(),ac_sweep_type:v.enum(["linear","decade","octave"]).optional(),ac_samples_per_interval:v.number().int().positive().optional(),ac_sample_count:v.number().int().positive().optional(),ac_start_frequency_hz:v.number().positive().optional(),ac_stop_frequency_hz:v.number().positive().optional()}).superRefine((e,t)=>{if(e.experiment_type==="spice_dc_sweep"){let n=["dc_sweep_start","dc_sweep_stop","dc_sweep_step","dc_sweep_unit"];for(let o of n)e[o]===void 0&&t.addIssue({code:v.ZodIssueCode.custom,path:[o],message:`${o} is required for a DC sweep`});e.dc_sweep_voltage_source_id!==void 0===(e.dc_sweep_current_source_id!==void 0)&&t.addIssue({code:v.ZodIssueCode.custom,path:["dc_sweep_voltage_source_id"],message:"Exactly one DC sweep voltage or current source ID is required"})}e.experiment_type==="spice_ac_analysis"&&(e.ac_sweep_type===void 0&&t.addIssue({code:v.ZodIssueCode.custom,path:["ac_sweep_type"],message:"ac_sweep_type is required for an AC analysis"}),e.ac_start_frequency_hz===void 0&&t.addIssue({code:v.ZodIssueCode.custom,path:["ac_start_frequency_hz"],message:"ac_start_frequency_hz is required for an AC analysis"}),e.ac_stop_frequency_hz===void 0&&t.addIssue({code:v.ZodIssueCode.custom,path:["ac_stop_frequency_hz"],message:"ac_stop_frequency_hz is required for an AC analysis"}),e.ac_sweep_type==="linear"&&e.ac_sample_count===void 0&&t.addIssue({code:v.ZodIssueCode.custom,path:["ac_sample_count"],message:"ac_sample_count is required for a linear AC analysis"}),e.ac_sweep_type!=="decade"&&e.ac_sweep_type!=="octave"||e.ac_samples_per_interval!==void 0||t.addIssue({code:v.ZodIssueCode.custom,path:["ac_samples_per_interval"],message:"ac_samples_per_interval is required for decade and octave AC analyses"}))}).describe("Defines a simulation experiment configuration"),V6=v.object({simulation_parameter_sweep_id:v.string(),sweep_index:v.number().int().nonnegative(),parameter_value:v.number(),parameter_unit:gFe}),xQt=v.object({type:v.literal("simulation_transient_voltage_graph"),simulation_transient_voltage_graph_id:gn("simulation_transient_voltage_graph"),simulation_experiment_id:v.string(),simulation_parameter_sweep_coordinate:V6.optional(),timestamps_ms:v.array(v.number()).optional(),voltage_levels:v.array(v.number()),source_component_id:v.string().optional(),subcircuit_connectivity_map_key:v.string().optional(),time_per_step:EU,start_time_ms:Hp,end_time_ms:Hp,name:v.string().optional(),color:v.string().optional()}).describe("Stores voltage measurements over time for a simulation"),CQt=v.object({type:v.literal("simulation_transient_current_graph"),simulation_transient_current_graph_id:gn("simulation_transient_current_graph"),simulation_experiment_id:v.string(),simulation_parameter_sweep_coordinate:V6.optional(),timestamps_ms:v.array(v.number()).optional(),current_levels:v.array(v.number()),source_component_id:v.string().optional(),subcircuit_connectivity_map_key:v.string().optional(),time_per_step:EU,start_time_ms:Hp,end_time_ms:Hp,name:v.string().optional(),color:v.string().optional()}).describe("Stores current measurements over time for a simulation"),IQt=v.object({type:v.literal("simulation_switch"),simulation_switch_id:gn("simulation_switch"),source_component_id:v.string().optional(),closes_at:Hp.optional(),opens_at:Hp.optional(),starts_closed:v.boolean().optional(),switching_frequency:_L.optional()}).describe("Defines a switch for simulation timing control"),bQt=v.object({type:v.literal("simulation_voltage_probe"),simulation_voltage_probe_id:gn("simulation_voltage_probe"),source_component_id:v.string().optional(),name:v.string().optional(),signal_input_source_port_id:v.string().optional(),signal_input_source_net_id:v.string().optional(),reference_input_source_port_id:v.string().optional(),reference_input_source_net_id:v.string().optional(),subcircuit_id:v.string().optional(),color:v.string().optional()}).describe("Defines a voltage probe for simulation. If a reference input is not provided, it measures against ground. If a reference input is provided, it measures the differential voltage between two points.").superRefine((e,t)=>{if(e.reference_input_source_port_id||e.reference_input_source_net_id){let n=!!e.signal_input_source_port_id||!!e.reference_input_source_port_id,o=!!e.signal_input_source_net_id||!!e.reference_input_source_net_id;n&&o?t.addIssue({code:v.ZodIssueCode.custom,message:"Cannot mix port and net connections in a differential probe."}):n?e.signal_input_source_port_id&&e.reference_input_source_port_id||t.addIssue({code:v.ZodIssueCode.custom,message:"Differential port probe requires both signal_input_source_port_id and reference_input_source_port_id."}):o&&(e.signal_input_source_net_id&&e.reference_input_source_net_id||t.addIssue({code:v.ZodIssueCode.custom,message:"Differential net probe requires both signal_input_source_net_id and reference_input_source_net_id."}))}else!!e.signal_input_source_port_id==!!e.signal_input_source_net_id&&t.addIssue({code:v.ZodIssueCode.custom,message:"A voltage probe must have exactly one of signal_input_source_port_id or signal_input_source_net_id."})}),SQt=v.object({type:v.literal("simulation_current_probe"),simulation_current_probe_id:gn("simulation_current_probe"),source_component_id:v.string().optional(),name:v.string().optional(),positive_source_port_id:v.string().optional(),negative_source_port_id:v.string().optional(),positive_source_net_id:v.string().optional(),negative_source_net_id:v.string().optional(),subcircuit_id:v.string().optional(),color:v.string().optional()}).describe("Defines a current probe for simulation. It measures current flowing from the positive endpoint to the negative endpoint.").superRefine((e,t)=>{let n=!!e.positive_source_port_id,o=!!e.negative_source_port_id,i=!!e.positive_source_net_id,r=!!e.negative_source_net_id,s=n||o,a=i||r;s&&a?t.addIssue({code:v.ZodIssueCode.custom,message:"Cannot mix port and net connections in a current probe."}):s?n&&o||t.addIssue({code:v.ZodIssueCode.custom,message:"Current probe using source ports requires both positive_source_port_id and negative_source_port_id."}):a?i&&r||t.addIssue({code:v.ZodIssueCode.custom,message:"Current probe using source nets requires both positive_source_net_id and negative_source_net_id."}):t.addIssue({code:v.ZodIssueCode.custom,message:"A current probe must have either positive/negative source port ids or positive/negative source net ids."})}),PQt=Ua.extend({type:v.literal("simulation_unknown_experiment_error"),simulation_unknown_experiment_error_id:gn("simulation_unknown_experiment_error"),error_type:v.literal("simulation_unknown_experiment_error").default("simulation_unknown_experiment_error"),simulation_experiment_id:v.string().optional(),subcircuit_id:v.string().optional()}).describe("An unknown error occurred during the simulation experiment."),qDo=v.enum(["resistance","capacitance","inductance","voltage","current"]),QZ=v.object({type:v.literal("simulation_parameter_sweep"),simulation_parameter_sweep_id:gn("simulation_parameter_sweep"),simulation_experiment_id:v.string(),name:v.string().optional(),parameter_values:v.array(v.number()).min(1),parameter_unit:gFe}),vQt=v.discriminatedUnion("parameter_type",[QZ.extend({parameter_type:v.literal("resistance"),resistor_source_component_id:v.string()}),QZ.extend({parameter_type:v.literal("capacitance"),capacitor_source_component_id:v.string()}),QZ.extend({parameter_type:v.literal("inductance"),inductor_source_component_id:v.string()}),QZ.extend({parameter_type:v.literal("voltage"),source_net_id:v.string()}),QZ.extend({parameter_type:v.literal("current"),current_source_component_id:v.string()})]).describe("Repeats a simulation experiment over component parameter values"),EQt=v.object({type:v.literal("simulation_dc_operating_point_voltage"),simulation_dc_operating_point_voltage_id:gn("simulation_dc_operating_point_voltage"),simulation_experiment_id:v.string(),simulation_parameter_sweep_coordinate:V6.optional(),simulation_voltage_probe_id:v.string(),voltage:v.number(),name:v.string().optional(),color:v.string().optional()}),MQt=v.object({type:v.literal("simulation_dc_operating_point_current"),simulation_dc_operating_point_current_id:gn("simulation_dc_operating_point_current"),simulation_experiment_id:v.string(),simulation_parameter_sweep_coordinate:V6.optional(),simulation_current_probe_id:v.string(),current:v.number(),name:v.string().optional(),color:v.string().optional()}),BQt=v.object({type:v.literal("simulation_dc_sweep_voltage_graph"),simulation_dc_sweep_voltage_graph_id:gn("simulation_dc_sweep_voltage_graph"),simulation_experiment_id:v.string(),simulation_parameter_sweep_coordinate:V6.optional(),simulation_voltage_probe_id:v.string(),sweep_values:v.array(v.number()),sweep_unit:Afe,voltage_levels:v.array(v.number()),name:v.string().optional(),color:v.string().optional()}).refine((e)=>e.sweep_values.length===e.voltage_levels.length,{message:"sweep_values and voltage_levels must have the same length"}),wQt=v.object({type:v.literal("simulation_dc_sweep_current_graph"),simulation_dc_sweep_current_graph_id:gn("simulation_dc_sweep_current_graph"),simulation_experiment_id:v.string(),simulation_parameter_sweep_coordinate:V6.optional(),simulation_current_probe_id:v.string(),sweep_values:v.array(v.number()),sweep_unit:Afe,current_levels:v.array(v.number()),name:v.string().optional(),color:v.string().optional()}).refine((e)=>e.sweep_values.length===e.current_levels.length,{message:"sweep_values and current_levels must have the same length"}),fFe=v.object({re:v.number(),im:v.number()}),TQt=v.object({type:v.literal("simulation_ac_sweep_voltage_graph"),simulation_ac_sweep_voltage_graph_id:gn("simulation_ac_sweep_voltage_graph"),simulation_experiment_id:v.string(),simulation_parameter_sweep_coordinate:V6.optional(),simulation_voltage_probe_id:v.string(),frequencies_hz:v.array(v.number()),complex_voltages:v.array(fFe),name:v.string().optional(),color:v.string().optional()}).refine((e)=>e.frequencies_hz.length===e.complex_voltages.length,{message:"frequencies_hz and complex_voltages must have the same length"}),DQt=v.object({type:v.literal("simulation_ac_sweep_current_graph"),simulation_ac_sweep_current_graph_id:gn("simulation_ac_sweep_current_graph"),simulation_experiment_id:v.string(),simulation_parameter_sweep_coordinate:V6.optional(),simulation_current_probe_id:v.string(),frequencies_hz:v.array(v.number()),complex_currents:v.array(fFe),name:v.string().optional(),color:v.string().optional()}).refine((e)=>e.frequencies_hz.length===e.complex_currents.length,{message:"frequencies_hz and complex_currents must have the same length"}),NQt=v.object({type:v.literal("simulation_op_amp"),simulation_op_amp_id:gn("simulation_op_amp"),source_component_id:v.string().optional(),inverting_input_source_port_id:v.string(),non_inverting_input_source_port_id:v.string(),output_source_port_id:v.string(),positive_supply_source_port_id:v.string(),negative_supply_source_port_id:v.string()}).describe("Defines a simple ideal operational amplifier for simulation"),RQt=v.object({type:v.literal("simulation_spice_subcircuit"),simulation_spice_subcircuit_id:gn("simulation_spice_subcircuit"),source_component_id:v.string(),spice_pin_to_source_port_map:v.record(v.string(),v.string()),subcircuit_source:v.string()}).describe("Defines a custom SPICE subcircuit model for simulation"),Mvt=(e)=>e!==void 0,QQt=v.object({type:v.literal("simulation_oscilloscope_trace"),simulation_oscilloscope_trace_id:gn("simulation_oscilloscope_trace"),simulation_transient_voltage_graph_id:v.string().optional(),simulation_transient_current_graph_id:v.string().optional(),simulation_voltage_probe_id:v.string().optional(),simulation_current_probe_id:v.string().optional(),display_name:v.string().optional(),color:v.string().optional(),display_center_value:v.number().optional(),display_center_offset_divs:v.number().optional(),volts_per_div:v.number().positive().optional(),amps_per_div:v.number().positive().optional()}).describe("Defines how a simulation measurement is rendered as an oscilloscope-style trace.").superRefine((e,t)=>{let n=[e.simulation_transient_voltage_graph_id,e.simulation_voltage_probe_id].filter(Mvt).length,o=[e.simulation_transient_current_graph_id,e.simulation_current_probe_id].filter(Mvt).length;n+o!==1&&t.addIssue({code:v.ZodIssueCode.custom,message:"An oscilloscope trace must reference exactly one voltage graph, current graph, voltage probe, or current probe."}),n>0&&e.amps_per_div!==void 0&&t.addIssue({code:v.ZodIssueCode.custom,message:"Voltage oscilloscope traces must use volts_per_div, not amps_per_div."}),o>0&&e.volts_per_div!==void 0&&t.addIssue({code:v.ZodIssueCode.custom,message:"Current oscilloscope traces must use amps_per_div, not volts_per_div."})}),YDe=v.object({x:v.number().finite(),y:v.number().finite(),layer:Er}),aQe=v.discriminatedUnion("contact_type",[YDe.extend({contact_type:v.literal("pcb_port"),pcb_port_id:v.string().min(1)}),YDe.extend({contact_type:v.literal("pcb_via"),pcb_via_id:v.string().min(1)}),YDe.extend({contact_type:v.literal("pcb_copper_pour"),pcb_copper_pour_id:v.string().min(1)})]).describe("Identifies the reference conductor at a return-current contact"),cQe=v.object({signal_pcb_port_id:v.string().min(1),reference_pcb_port_id:v.string().min(1).optional(),reference_layer:Er,resistance:v.number().finite().positive()}).describe("A two-terminal return-current excitation port with resistance in ohms"),kQt=v.object({type:v.literal("simulation_return_current_excitation"),simulation_return_current_excitation_id:gn("simulation_return_current_excitation"),simulation_experiment_id:v.string().min(1),pcb_trace_id:v.string().min(1),ground_source_net_id:v.string().min(1),current:v.number().finite(),return_source:aQe,return_sink:aQe,source_port:cQe.optional(),load_port:cQe.optional()}).describe("Excites a signal trace with signed current in amperes, peak for AC; return_source is near the load and return_sink near the driver for positive current"),LQt=v.object({type:v.literal("simulation_pcb_return_current_result"),simulation_pcb_return_current_result_id:gn("simulation_pcb_return_current_result"),simulation_experiment_id:v.string().min(1),pcb_board_id:v.string().min(1),simulation_return_current_excitation_ids:v.array(v.string().min(1)).min(1).refine((e)=>new Set(e).size===e.length,"Excitation IDs must be unique"),frequency_hz:v.number().finite().positive().optional()}).describe("A PCB return-current result at one frequency, or a frequency-independent result when frequency_hz is absent");function FQt(e){return Ute.extend({project_relative_path:v.string().min(1),url:v.string().url()}).superRefine((t,n)=>{if(e.includes(t.mimetype)||n.addIssue({code:v.ZodIssueCode.custom,path:["mimetype"],message:`Expected one of: ${e.join(", ")}`}),t.url.startsWith("data:"))/^data:([^;,]*)(?:;[^,]*)?,/i.exec(t.url)?.[1]?.toLowerCase()!==t.mimetype&&n.addIssue({code:v.ZodIssueCode.custom,path:["url"],message:"Data URL media type must match asset.mimetype"})})}var HQt=FQt(["application/json","application/gzip"]),OQt=FQt(["image/png","image/webp"]),zQt=v.object({type:v.literal("simulation_pcb_return_current_field"),simulation_pcb_return_current_field_id:gn("simulation_pcb_return_current_field"),simulation_pcb_return_current_result_id:v.string().min(1),layer:Er,source_net_id:v.string().min(1),field_type:v.enum(["real","complex_phasor"]),min_x:v.number().finite(),min_y:v.number().finite(),columns:v.number().int().positive().safe(),rows:v.number().int().positive().safe(),cell_width:v.number().finite().positive(),cell_height:v.number().finite().positive(),copper_thickness:v.number().finite().positive(),data_format:v.literal("simulation_return_current_grid_json_v1"),field_asset:HQt}).superRefine((e,t)=>{Number.isSafeInteger(e.columns*e.rows)||t.addIssue({code:v.ZodIssueCode.custom,path:["columns"],message:"The grid cell count must be a safe integer"})}).describe("A sampled sheet-current field in A/mm, using plain or gzipped JSON Asset URLs; dimensions are PCB millimeters"),RY=v.array(v.number().finite().nullable()).min(1),GQt=v.discriminatedUnion("field_type",[v.object({field_type:v.literal("real"),sheet_current_x:RY,sheet_current_y:RY}),v.object({field_type:v.literal("complex_phasor"),sheet_current_x_real:RY,sheet_current_x_imag:RY,sheet_current_y_real:RY,sheet_current_y_imag:RY})]).superRefine((e,t)=>{let n=e.field_type==="real"?[e.sheet_current_x,e.sheet_current_y]:[e.sheet_current_x_real,e.sheet_current_x_imag,e.sheet_current_y_real,e.sheet_current_y_imag],o=n[0];if(n.some((i)=>i.length!==o.length))t.addIssue({code:v.ZodIssueCode.custom,message:"Current channels must have equal lengths"});else for(let i=0;i<o.length;i++){let r=o[i]===null;if(n.some((s)=>s[i]===null!==r))return void t.addIssue({code:v.ZodIssueCode.custom,message:`Cell ${i} must be null in every channel or finite in every channel`})}}).describe("Decoded real or complex sheet-current arrays with a shared conductor mask");function JDo(e){let t=e.columns*e.rows;if(!Number.isSafeInteger(e.columns)||e.columns<=0||!Number.isSafeInteger(e.rows)||e.rows<=0||!Number.isSafeInteger(t))throw Error("Grid dimensions must be positive safe integers");return GQt.superRefine((n,o)=>{n.field_type!==e.field_type&&o.addIssue({code:v.ZodIssueCode.custom,path:["field_type"],message:"Decoded field_type must match the parent field"}),(n.field_type==="real"?n.sheet_current_x:n.sheet_current_x_real).length!==t&&o.addIssue({code:v.ZodIssueCode.custom,message:`Each current channel must have ${t} entries (columns * rows)`})})}var YQt=v.object({type:v.literal("simulation_pcb_return_current_heatmap"),simulation_pcb_return_current_heatmap_id:gn("simulation_pcb_return_current_heatmap"),simulation_pcb_return_current_result_id:v.string().min(1),layer:Er,source_net_id:v.string().min(1),min_x:v.number().finite(),min_y:v.number().finite(),max_x:v.number().finite(),max_y:v.number().finite(),image_asset:OQt}).superRefine((e,t)=>{for(let n of["x","y"])e[`max_${n}`]<=e[`min_${n}`]&&t.addIssue({code:v.ZodIssueCode.custom,path:[`max_${n}`],message:"Heatmap bounds must have positive width and height"})}).describe("A transparent PNG/WebP current-density overlay in A/mm²; the top-left pixel maps to (min_x, max_y)"),Bvt=v.object({type:v.literal("simulation_pcb_return_current_marker"),simulation_pcb_return_current_marker_id:gn("simulation_pcb_return_current_marker"),simulation_pcb_return_current_result_id:v.string().min(1),role:v.enum(["signal_source","signal_load","return_source","return_sink","signal_transition","return_transition"]),label:v.string().optional(),label_x:v.number().finite().optional(),label_y:v.number().finite().optional()}),VQt=v.discriminatedUnion("target_type",[Bvt.extend({target_type:v.literal("pcb_port"),pcb_port_id:v.string().min(1),layer:Er}),Bvt.extend({target_type:v.literal("pcb_via"),pcb_via_id:v.string().min(1),from_layer:Er,to_layer:Er})]).superRefine((e,t)=>{e.label_x===void 0!=(e.label_y===void 0)&&t.addIssue({code:v.ZodIssueCode.custom,path:["label_x"],message:"label_x and label_y must be provided together"}),e.target_type==="pcb_via"&&e.from_layer===e.to_layer&&t.addIssue({code:v.ZodIssueCode.custom,path:["to_layer"],message:"A via transition must connect distinct layers"})}).describe("A signal/return port or via highlight; markers do not assert measured via-transfer currents"),UQt=v.union([ADt,ZTt,pDt,JTt,$Tt,qTt,tDt,eDt,VLe,zLe,ufe,YLe,GLe,ULe,WLe,XLe,qLe,JLe,$Le,oFe,ZLe,eFe,tFe,nFe,jLe,KLe,iDt,rDt,nDt,iFe,rFe,sFe,aFe,sDt,mDt,cFe,dFe,lFe,aDt,cDt,lDt,dDt,uDt,hDt,uFe,hFe,oDt,oNt,aNt,pNt,MRt,BRt,wRt,RRt,QRt,kRt,LRt,FRt,ANt,CRt,IRt,_Nt,HNt,CNt,vNt,ENt,MNt,TNt,BNt,wNt,DNt,ONt,fNt,yNt,xNt,zNt,GNt,XNt,KNt,TRt,$Nt,ZNt,eRt,tRt,cRt,nRt,oRt,iRt,rRt,aRt,NNt,RNt,QNt,kNt,jNt,qNt,JNt,LNt,FNt,qRt,JRt,$Rt,ZRt,dRt,lRt,uRt,hRt,mRt,pRt,ARt,_Rt,gRt,DRt,NRt,fRt,yRt,HRt,ERt,ORt,zRt,GRt,WRt,XRt,KRt,jRt,eQt,tQt,nQt,oQt,iQt,_Dt,BDt,SDt,PDt,vDt,EDt,IDt,bDt,wDt,MDt,gDt,DDt,NDt,TDt,LDt,FDt,HDt,ODt,zDt,GDt,qDt,YDt,VDt,UDt,jDt,WDt,XDt,sQt,cQt,dQt,aQt,mQt,_Qt,yQt,kQt,LQt,zQt,YQt,VQt,xQt,CQt,EQt,MQt,BQt,wQt,TQt,DQt,vQt,IQt,bQt,SQt,QQt,PQt,NQt,RQt]),ege=UQt;function wvt(e,t,n){if(!t||!n)return;let o=e.get(t);o||(o=new Set,e.set(t,o)),o.add(n);let i=e.get(n);i||(i=new Set,e.set(n,i)),i.add(t)}var vy=(e,t={})=>{let n=e,o=n._internal_store;if(!o){o={counts:{},editCount:0},n._internal_store=o;for(let r of n){let s=r.type,a=r[`${s}_id`];if(!a)continue;let c=Number.parseInt(a.split("_").pop());Number.isNaN(c)||(o.counts[s]=Math.max(o.counts[s]??0,c))}}let i=new Proxy({},{get:(r,s)=>{if(s==="toArray")return()=>(n.editCount=o.editCount,n);if(s==="editCount")return o.editCount;if(s==="subtree")return(c)=>vy(function(l,d){if(!d.subcircuit_id&&!d.source_group_id)return[...l];let u=d;if(d.subcircuit_id){let g=new Set([d.subcircuit_id]),_=new Map,f=new Map;for(let x of l)if(x.type==="source_group"){let{source_group_id:C,subcircuit_id:I}=x;I&&f.set(C,I);let b=x.parent_source_group_id;b&&(_.has(b)||_.set(b,[]),_.get(b).push(C))}let y;for(let[x,C]of f)if(C===d.subcircuit_id){y=x;break}if(y){let x=(C)=>{let I=_.get(C)||[];for(let b of I){let P=f.get(b);P&&g.add(P),x(b)}};x(y),u={...d,subcircuit_ids:Array.from(g)}}}let h=new Map;for(let g of l){let _=g[`${g.type}_id`];typeof _=="string"&&h.set(_,g)}let A=new Map;for(let g of l){let _=Object.entries(g);for(let[f,y]of _)if(f!=="parent_source_group_id"){if(f.endsWith("_id")&&typeof y=="string")wvt(A,g,h.get(y));else if(f.endsWith("_ids")&&Array.isArray(y))for(let x of y)typeof x=="string"&&wvt(A,g,h.get(x))}}let m=[],p=new Set;for(let g of l){let _=!1;(u.subcircuit_id&&("subcircuit_id"in g)&&g.subcircuit_id===u.subcircuit_id||u.subcircuit_ids&&("subcircuit_id"in g)&&g.subcircuit_id&&u.subcircuit_ids.includes(g.subcircuit_id)||u.source_group_id&&("source_group_id"in g)&&g.source_group_id===u.source_group_id||u.source_group_id&&("member_source_group_ids"in g)&&Array.isArray(g.member_source_group_ids)&&g.member_source_group_ids.includes(u.source_group_id))&&(_=!0),_&&(m.push(g),p.add(g))}for(;m.length>0;){let g=m.shift(),_=A.get(g);if(_)for(let f of _)p.has(f)||(p.add(f),m.push(f))}return l.filter((g)=>p.has(g))}(n,c),t);if(s==="insert")return(c)=>{let l=c.type;if(!l)throw Error("insert requires an element with a type");o.counts[l]??=-1,o.counts[l]++;let d=o.counts[l],u={...c,type:l,[`${l}_id`]:`${l}_${d}`};if(t.validateInserts)($_e[l]??ege).parse(u);return n.push(u),o.editCount++,u};if(s==="insertAll")return(c)=>c.map((l)=>i.insert(l));let a=s;return{get:(c)=>n.find((l)=>l.type===a&&l[`${a}_id`]===c),getUsing:(c)=>{let l=Object.keys(c);if(l.length!==1)throw Error("getUsing requires exactly one key, e.g. { pcb_component_id }");let d=l[0],u=d.replace("_id",""),h=n.find((A)=>A.type===u&&A[d]===c[d]);return h?n.find((A)=>A.type===a&&A[`${a}_id`]===h[`${a}_id`]):null},getWhere:(c)=>{let l=Object.keys(c);return n.find((d)=>d.type===a&&l.every((u)=>d[u]===c[u]))},list:(c)=>{let l=c?Object.keys(c):[];return n.filter((d)=>d.type===a&&l.every((u)=>d[u]===c[u]))},insert:(c)=>{o.counts[a]??=-1,o.counts[a]++;let l=o.counts[a],d={type:a,[`${a}_id`]:`${a}_${l}`,...c};if(t.validateInserts)($_e[a]??ege).parse(d);return n.push(d),o.editCount++,d},delete:(c)=>{let l=n.find((d)=>d[`${a}_id`]===c);l&&(n.splice(n.indexOf(l),1),o.editCount++)},update:(c,l)=>{let d=n.find((u)=>u.type===a&&u[`${a}_id`]===c);return d?(Object.assign(d,l),o.editCount++,d):null},select:(c)=>{if(a==="source_component")return n.find((l)=>l.type==="source_component"&&l.name===c.replace(/\./g,""));if(a==="pcb_port"||a==="source_port"||a==="schematic_port"){let[l,d]=c.replace(/\./g,"").split(/[\s\>]+/),u=n.find((A)=>A.type==="source_component"&&A.name===l);if(!u)return null;let h=n.find((A)=>A.type==="source_port"&&A.source_component_id===u.source_component_id&&(A.name===d||(A.port_hints??[]).includes(d)));if(!h)return null;if(a==="source_port")return h;if(a==="pcb_port")return n.find((A)=>A.type==="pcb_port"&&A.source_port_id===h.source_port_id);if(a==="schematic_port")return n.find((A)=>A.type==="schematic_port"&&A.source_port_id===h.source_port_id)}}}}});return i};vy.unparsed=vy;var MI=vy;function VDe(e){let t=e.type;return`${t}:${e[`${t}_id`]}`}var Tvt=(e,t={})=>{let n=e._internal_store_indexed;if(!n){n={counts:{},editCount:0,indexes:{}};for(let r of e){let s=r.type,a=r[`${s}_id`];if(!a)continue;let c=Number.parseInt(a.split("_").pop()||"");Number.isNaN(c)||(n.counts[s]=Math.max(n.counts[s]??0,c))}let o=t.indexConfig||{},i=n.indexes;if(o.byId&&(i.byId=new Map),o.byType&&(i.byType=new Map),o.byRelation&&(i.byRelation=new Map),o.bySubcircuit&&(i.bySubcircuit=new Map),o.byCustomField&&o.byCustomField.length>0){i.byCustomField=new Map;for(let r of o.byCustomField)i.byCustomField.set(r,new Map)}for(let r of e){if(o.byId){let s=VDe(r);i.byId.set(s,r)}if(o.byType){let s=i.byType.get(r.type)||[];s.push(r),i.byType.set(r.type,s)}if(o.byRelation){let s=Object.entries(r);for(let[a,c]of s)if(a.endsWith("_id")&&a!==`${r.type}_id`&&typeof c=="string"){let l=i.byRelation.get(a)||new Map,d=l.get(c)||[];d.push(r),l.set(c,d),i.byRelation.set(a,l)}}if(o.bySubcircuit&&"subcircuit_id"in r){let s=r.subcircuit_id;if(s&&typeof s=="string"){let a=i.bySubcircuit.get(s)||[];a.push(r),i.bySubcircuit.set(s,a)}}if(o.byCustomField&&i.byCustomField){for(let s of o.byCustomField)if(s in r){let a=r[s];if(a!==void 0&&(typeof a=="string"||typeof a=="number")){let c=String(a),l=i.byCustomField.get(s),d=l.get(c)||[];d.push(r),l.set(c,d)}}}}e._internal_store_indexed=n}return new Proxy({},{get:(o,i)=>{if(i==="toArray")return()=>(e.editCount=n.editCount,e);if(i==="editCount")return n.editCount;let r=i;return{get:(s)=>{let a=t.indexConfig||{};if(a.byId&&n.indexes.byId)return n.indexes.byId.get(`${r}:${s}`)||null;if(a.byType&&n.indexes.byType)return(n.indexes.byType.get(r)||[]).find((c)=>c[`${r}_id`]===s)||null;return e.find((c)=>c.type===r&&c[`${r}_id`]===s)||null},getUsing:(s)=>{let a=t.indexConfig||{},c=Object.keys(s);if(c.length!==1)throw Error("getUsing requires exactly one key, e.g. { pcb_component_id }");let l=c[0],d=l.replace("_id","");if(a.byRelation&&n.indexes.byRelation){let h=n.indexes.byRelation.get(l);if(h){let A=(h.get(s[l])||[]).find((p)=>p.type===d);if(!A)return null;let m=A[`${r}_id`];if(a.byId&&n.indexes.byId)return n.indexes.byId.get(`${r}:${m}`)||null;if(a.byType&&n.indexes.byType)return(n.indexes.byType.get(r)||[]).find((p)=>p[`${r}_id`]===m)||null;return e.find((p)=>p.type===r&&p[`${r}_id`]===m)||null}}let u=e.find((h)=>h.type===d&&h[l]===s[l]);return u&&e.find((h)=>h.type===r&&h[`${r}_id`]===u[`${r}_id`])||null},getWhere:(s)=>{let a=t.indexConfig||{},c=Object.keys(s);if(c.length===1&&a.byCustomField&&n.indexes.byCustomField){let l=c[0],d=n.indexes.byCustomField.get(l);if(d){let u=String(s[l]);return(d.get(u)||[]).find((h)=>h.type===r)||null}}if("subcircuit_id"in s&&a.bySubcircuit&&n.indexes.bySubcircuit){let l=s.subcircuit_id;return(n.indexes.bySubcircuit.get(l)||[]).find((d)=>d.type===r&&c.every((u)=>d[u]===s[u]))||null}if(a.byType&&n.indexes.byType)return(n.indexes.byType.get(r)||[]).find((l)=>c.every((d)=>l[d]===s[d]))||null;return e.find((l)=>l.type===r&&c.every((d)=>l[d]===s[d]))||null},list:(s)=>{let a=t.indexConfig||{},c=s?Object.keys(s):[];if(c.length===0&&a.byType&&n.indexes.byType)return n.indexes.byType.get(r)||[];if(c.length===1&&c[0]==="subcircuit_id"&&a.bySubcircuit&&n.indexes.bySubcircuit){let d=s.subcircuit_id;return(n.indexes.bySubcircuit.get(d)||[]).filter((u)=>u.type===r)}let l;return l=a.byType&&n.indexes.byType?n.indexes.byType.get(r)||[]:e.filter((d)=>d.type===r),c.length>0?l.filter((d)=>c.every((u)=>d[u]===s[u])):l},insert:(s)=>{n.counts[r]??=-1,n.counts[r]++;let a=n.counts[r],c={type:r,[`${r}_id`]:`${r}_${a}`,...s};if(t.validateInserts)($_e[r]??ege).parse(c);e.push(c),n.editCount++;let l=t.indexConfig||{};if(l.byId&&n.indexes.byId){let d=VDe(c);n.indexes.byId.set(d,c)}if(l.byType&&n.indexes.byType){let d=n.indexes.byType.get(r)||[];d.push(c),n.indexes.byType.set(r,d)}if(l.byRelation&&n.indexes.byRelation){let d=Object.entries(c);for(let[u,h]of d)if(u.endsWith("_id")&&u!==`${c.type}_id`&&typeof h=="string"){let A=n.indexes.byRelation.get(u)||new Map,m=A.get(h)||[];m.push(c),A.set(h,m),n.indexes.byRelation.set(u,A)}}if(l.bySubcircuit&&n.indexes.bySubcircuit&&"subcircuit_id"in c){let d=c.subcircuit_id;if(d&&typeof d=="string"){let u=n.indexes.bySubcircuit.get(d)||[];u.push(c),n.indexes.bySubcircuit.set(d,u)}}if(l.byCustomField&&n.indexes.byCustomField){for(let d of l.byCustomField)if(d in c){let u=c[d];if(u!==void 0&&(typeof u=="string"||typeof u=="number")){let h=String(u),A=n.indexes.byCustomField.get(d),m=A.get(h)||[];m.push(c),A.set(h,m)}}}return c},delete:(s)=>{let a=t.indexConfig||{},c;if(a.byId&&n.indexes.byId)c=n.indexes.byId.get(`${r}:${s}`);else if(a.byType&&n.indexes.byType)c=(n.indexes.byType.get(r)||[]).find((u)=>u[`${r}_id`]===s);else c=e.find((d)=>d[`${r}_id`]===s);if(!c)return;let l=e.indexOf(c);if(l>=0&&(e.splice(l,1),n.editCount++),a.byId&&n.indexes.byId){let d=VDe(c);n.indexes.byId.delete(d)}if(a.byType&&n.indexes.byType){let d=(n.indexes.byType.get(r)||[]).filter((u)=>u[`${r}_id`]!==s);n.indexes.byType.set(r,d)}if(a.byRelation&&n.indexes.byRelation)for(let[d,u]of n.indexes.byRelation.entries())for(let[h,A]of u.entries()){let m=A.filter((p)=>p!==c);m.length===0?u.delete(h):u.set(h,m)}if(a.bySubcircuit&&n.indexes.bySubcircuit&&"subcircuit_id"in c){let d=c.subcircuit_id;if(d){let u=(n.indexes.bySubcircuit.get(d)||[]).filter((h)=>h!==c);u.length===0?n.indexes.bySubcircuit.delete(d):n.indexes.bySubcircuit.set(d,u)}}if(a.byCustomField&&n.indexes.byCustomField)for(let d of n.indexes.byCustomField.values())for(let[u,h]of d.entries()){let A=h.filter((m)=>m!==c);A.length===0?d.delete(u):d.set(u,A)}},update:(s,a)=>{let c=t.indexConfig||{},l;if(c.byId&&n.indexes.byId)l=n.indexes.byId.get(`${r}:${s}`);else if(c.byType&&n.indexes.byType)l=(n.indexes.byType.get(r)||[]).find((u)=>u[`${r}_id`]===s);else l=e.find((d)=>d.type===r&&d[`${r}_id`]===s);if(!l)return null;if(c.byRelation&&n.indexes.byRelation){let d=Object.entries(l);for(let[u,h]of d)if(u.endsWith("_id")&&u!==`${l.type}_id`&&typeof h=="string"&&u in a&&a[u]!==h){let A=n.indexes.byRelation.get(u);if(A){let m=(A.get(h)||[]).filter((p)=>p!==l);m.length===0?A.delete(h):A.set(h,m)}}}if(c.bySubcircuit&&n.indexes.bySubcircuit&&"subcircuit_id"in l&&"subcircuit_id"in a){let d=l.subcircuit_id;if(d!==a.subcircuit_id){let u=(n.indexes.bySubcircuit.get(d)||[]).filter((h)=>h!==l);u.length===0?n.indexes.bySubcircuit.delete(d):n.indexes.bySubcircuit.set(d,u)}}if(c.byCustomField&&n.indexes.byCustomField){for(let d of c.byCustomField)if(d in l&&d in a&&l[d]!==a[d]){let u=n.indexes.byCustomField.get(d);if(u){let h=String(l[d]),A=(u.get(h)||[]).filter((m)=>m!==l);A.length===0?u.delete(h):u.set(h,A)}}}if(Object.assign(l,a),n.editCount++,c.byRelation&&n.indexes.byRelation){let d=Object.entries(l);for(let[u,h]of d)if(u.endsWith("_id")&&u!==`${l.type}_id`&&typeof h=="string"&&u in a){let A=n.indexes.byRelation.get(u)||new Map,m=A.get(h)||[];m.includes(l)||(m.push(l),A.set(h,m),n.indexes.byRelation.set(u,A))}}if(c.bySubcircuit&&n.indexes.bySubcircuit&&"subcircuit_id"in l&&"subcircuit_id"in a){let d=l.subcircuit_id;if(d&&typeof d=="string"){let u=n.indexes.bySubcircuit.get(d)||[];u.includes(l)||(u.push(l),n.indexes.bySubcircuit.set(d,u))}}if(c.byCustomField&&n.indexes.byCustomField){for(let d of c.byCustomField)if(d in l&&d in a){let u=l[d];if(u!==void 0&&(typeof u=="string"||typeof u=="number")){let h=String(u),A=n.indexes.byCustomField.get(d),m=A.get(h)||[];m.includes(l)||(m.push(l),A.set(h,m))}}}return l},select:(s)=>{if(r==="source_component")return e.find((a)=>a.type==="source_component"&&a.name===s.replace(/\./g,""))||null;if(r==="pcb_port"||r==="source_port"||r==="schematic_port"){let[a,c]=s.replace(/\./g,"").split(/[\s\>]+/),l=e.find((u)=>u.type==="source_component"&&u.name===a);if(!l)return null;let d=e.find((u)=>u.type==="source_port"&&u.source_component_id===l.source_component_id&&(u.name===c||(u.port_hints??[]).includes(c)));if(!d)return null;if(r==="source_port")return d;if(r==="pcb_port")return e.find((u)=>u.type==="pcb_port"&&u.source_port_id===d.source_port_id)||null;if(r==="schematic_port")return e.find((u)=>u.type==="schematic_port"&&u.source_port_id===d.source_port_id)||null}return null}}}})};Tvt.unparsed=Tvt;var Dvt=(e)=>e[`${e.type}_id`],Nvt=(e,t)=>{let n=vy(e).pcb_port.get(t);if(!n)return`pcb_port[#${t}]`;let o=n.pcb_component_id?vy(e).pcb_component.get(n.pcb_component_id):void 0;if(!o)return`pcb_port[#${t}]`;let i=vy(e).source_component.get(o.source_component_id);if(!i)return`pcb_port[#${t}]`;let r=vy(e).source_port.get(n.source_port_id);if(!r)return`pcb_port[#${t}]`;let s;return s=r?.port_hints&&r.port_hints.length>0||r.port_hints&&r.port_hints.length>0?r.port_hints[0]:t,`pcb_port[.${i.name} > .${s}]`};function $Do(e,t){let n=vy(e).pcb_trace.get(t);if(!n)return`trace[${t}]`;let o=n.route.flatMap((i)=>[i.start_pcb_port_id,i.end_pcb_port_id]).filter(Boolean);if(o.length===0)return`trace[${t}]`;return`trace[${o.map((i)=>{let r=function(s){let a=vy(e).pcb_port.get(s);if(!a)return null;let c=a.pcb_component_id?vy(e).pcb_component.get(a.pcb_component_id):void 0;if(!c)return null;let l=vy(e).source_component.get(c.source_component_id);if(!l)return null;let d=vy(e).source_port.get(a.source_port_id),u=d?.port_hints?d.port_hints[1]:"";return{componentName:l.name,portHint:u}}(i);return r?`.${r.componentName} > port.${r.portHint}`:`port[${i}]`}).join(", ")}]`}var WQt=(e,t)=>{if(typeof t=="string"){let n=((o,i)=>o.find((r)=>Dvt(r)===i)??null)(e,t);return WQt(e,n)}switch(t.type){case"pcb_port":return Nvt(e,t.pcb_port_id);case"pcb_smtpad":return function(n,o){let i=vy(n).pcb_smtpad.get(o);return i&&i.pcb_port_id?Nvt(n,i.pcb_port_id):`smtpad[${o}]`}(e,t.pcb_smtpad_id);case"pcb_trace":return $Do(e,t.pcb_trace_id);case"source_component":return`source_component[${t.name}]`;default:return`${t.type}[#${Dvt(t)}]`}},lQe=(e,t)=>({minX:Math.min(e.minX,t.minX),minY:Math.min(e.minY,t.minY),maxX:Math.max(e.maxX,t.maxX),maxY:Math.max(e.maxY,t.maxY)}),kZ=(e,t,n)=>{let o=n/2;return{minX:e-o,minY:t-o,maxX:e+o,maxY:t+o}},Rvt=(e,t,n,o,i)=>{let r=n/2,s=o/2,a=i*Math.PI/180,c=Math.cos(a),l=Math.sin(a),d=[{x:-r,y:-s},{x:r,y:-s},{x:r,y:s},{x:-r,y:s}].map((u)=>({x:e+u.x*c-u.y*l,y:t+u.x*l+u.y*c}));return{minX:Math.min(...d.map((u)=>u.x)),minY:Math.min(...d.map((u)=>u.y)),maxX:Math.max(...d.map((u)=>u.x)),maxY:Math.max(...d.map((u)=>u.y))}},ZDo=(e,t,n,o,i)=>{let r=n/2,s=o/2,a=i*Math.PI/180,c=Math.cos(a),l=Math.sin(a),d=Math.hypot(r*c,s*l),u=Math.hypot(r*l,s*c);return{minX:e-d,minY:t-u,maxX:e+d,maxY:t+u}},eNo=(e,t,n,o,i)=>{let r=Math.min(n,o)/2,s=Math.max(n,o)/2-r,a=i*Math.PI/180,c=n>=o?{x:s,y:0}:{x:0,y:s},l={x:c.x*Math.cos(a)-c.y*Math.sin(a),y:c.x*Math.sin(a)+c.y*Math.cos(a)},d=Math.abs(l.x)+r,u=Math.abs(l.y)+r;return{minX:e-d,minY:t-u,maxX:e+d,maxY:t+u}},lAe=(e)=>e.length===0?null:{minX:Math.min(...e.map((t)=>t.x)),minY:Math.min(...e.map((t)=>t.y)),maxX:Math.max(...e.map((t)=>t.x)),maxY:Math.max(...e.map((t)=>t.y))},UDe=(e)=>Array.isArray(e)?e.flatMap((t)=>{if(!t||typeof t!="object")return[];if("x"in t&&"y"in t&&typeof t.x=="number"&&typeof t.y=="number")return[{x:t.x,y:t.y}];if("start"in t&&"end"in t)return[t.start,t.end].filter((n)=>Boolean(n&&typeof n=="object"&&"x"in n&&"y"in n&&typeof n.x=="number"&&typeof n.y=="number"));return[]}):[],tNo=(e)=>{if(!e.type.startsWith("pcb_"))return null;if(e.type==="pcb_smtpad"&&e.shape==="polygon"&&Array.isArray(e.points))return lAe(e.points);if(e.type==="pcb_hole"&&e.hole_shape==="circle")return kZ(e.x,e.y,e.hole_diameter);if(e.type==="pcb_plated_hole"){let u;if("outer_diameter"in e&&typeof e.outer_diameter=="number"?u=kZ(e.x,e.y,e.outer_diameter):("hole_diameter"in e)&&typeof e.hole_diameter=="number"&&(u=kZ(e.x,e.y,e.hole_diameter)),(e.shape==="oval"||e.shape==="pill")&&typeof e.outer_width=="number"&&typeof e.outer_height=="number")u=(e.shape==="pill"?eNo:ZDo)(e.x,e.y,e.outer_width,e.outer_height,e.ccw_rotation??0);if("rect_pad_width"in e&&typeof e.rect_pad_width=="number"&&"rect_pad_height"in e&&typeof e.rect_pad_height=="number"){let h=Rvt(e.x,e.y,e.rect_pad_width,e.rect_pad_height,"rect_ccw_rotation"in e?e.rect_ccw_rotation??0:0);u=u?lQe(u,h):h}if("hole_diameter"in e&&typeof e.hole_diameter=="number"){let h=kZ(e.x+("hole_offset_x"in e?e.hole_offset_x??0:0),e.y+("hole_offset_y"in e?e.hole_offset_y??0:0),e.hole_diameter);u=u?lQe(u,h):h}if(u)return u}let t=e,n=lAe(UDe(t.route));if(n)return n;let o=lAe(UDe(t.outline));if(o)return o;let i=lAe(UDe(t.points));if(i)return i;let r,s,a,c;"x"in e&&"y"in e&&(r=Number(e.x),s=Number(e.y)),"outer_diameter"in e&&(a=Number(e.outer_diameter),c=Number(e.outer_diameter)),"width"in e&&(a=Number(e.width)),"height"in e&&(c=Number(e.height)),"center"in e&&e.center&&typeof e.center=="object"&&"x"in e.center&&"y"in e.center&&(r=Number(e.center.x),s=Number(e.center.y));let l=0;if("rotation"in e&&typeof e.rotation=="number"&&(l=e.rotation),"ccw_rotation"in e&&typeof e.ccw_rotation=="number"&&(l=e.ccw_rotation),r!==void 0&&s!==void 0)return a!==void 0&&c!==void 0?l?Rvt(r,s,a,c,l):{minX:r-a/2,minY:s-c/2,maxX:r+a/2,maxY:s+c/2}:("radius"in e)&&typeof e.radius=="number"?kZ(r,s,2*e.radius):{minX:r,minY:s,maxX:r,maxY:s};let d=[t.anchor_position,t.position].filter((u)=>Boolean(u&&typeof u=="object"&&"x"in u&&"y"in u&&typeof u.x=="number"&&typeof u.y=="number")).at(0);return d?{minX:d.x,minY:d.y,maxX:d.x,maxY:d.y}:null},XQt=(e)=>{let t={minX:Number.POSITIVE_INFINITY,minY:Number.POSITIVE_INFINITY,maxX:Number.NEGATIVE_INFINITY,maxY:Number.NEGATIVE_INFINITY};for(let n of e){let o=tNo(n);o&&(t=lQe(t,o))}return t},nU=(e)=>e[`${e.type}_id`],IE=0.000000001,cee=(e,t,n)=>{let o=n.x-t.x,i=n.y-t.y,r=o*o+i*i;if(r<=IE)return((d,u)=>Math.hypot(d.x-u.x,d.y-u.y))(e,t);let s=(a=((e.x-t.x)*o+(e.y-t.y)*i)/r,c=0,l=1,Math.max(c,Math.min(l,a)));var a,c,l;return Math.hypot(e.x-(t.x+s*o),e.y-(t.y+s*i))},lee=(e,t,n)=>(t.x-e.x)*(n.y-e.y)-(t.y-e.y)*(n.x-e.x),dee=(e,t,n)=>!(Math.abs(lee(t,n,e))>IE)&&(e.x>=Math.min(t.x,n.x)-IE&&e.x<=Math.max(t.x,n.x)+IE&&e.y>=Math.min(t.y,n.y)-IE&&e.y<=Math.max(t.y,n.y)+IE),nNo=(e,t,n,o)=>{let i=lee(e,t,n),r=lee(e,t,o),s=lee(n,o,e),a=lee(n,o,t);return(i>IE&&r<-0.000000001||i<-0.000000001&&r>IE)&&(s>IE&&a<-0.000000001||s<-0.000000001&&a>IE)||(dee(n,e,t)||dee(o,e,t)||dee(e,n,o)||dee(t,n,o))},lV=(e)=>{let t=[];if(e.points.length<2)return t;for(let n=0;n<e.points.length;n+=1){let o=e.points[n],i=e.points[(n+1)%e.points.length];o&&i&&t.push([o,i])}return t},dQe=(e,t)=>{for(let[o,i]of lV(t))if(dee(e,o,i))return!0;let n=!1;for(let o=0,i=t.points.length-1;o<t.points.length;i=o++){let r=t.points[o],s=t.points[i];if(!r||!s)continue;r.y>e.y!=s.y>e.y&&e.x<(s.x-r.x)*(e.y-r.y)/(s.y-r.y)+r.x&&(n=!n)}return n},Qvt=(e,t)=>{if(t.points.length<3)return Number.POSITIVE_INFINITY;if(dQe({x:e.x,y:e.y},t))return 0;let n=Number.POSITIVE_INFINITY;for(let[o,i]of lV(t))n=Math.min(n,cee({x:e.x,y:e.y},o,i));return Math.max(0,n-e.radius)},uQe=(Object.keys({leftside_top:{side:"leftside",alignment:"top"},leftside_bottom:{side:"leftside",alignment:"bottom"},rightside_top:{side:"rightside",alignment:"top"},rightside_bottom:{side:"rightside",alignment:"bottom"},topside_left:{side:"topside",alignment:"left"},topside_right:{side:"topside",alignment:"right"},bottomside_left:{side:"bottomside",alignment:"left"},bottomside_right:{side:"bottomside",alignment:"right"}}),(e,t,n=0)=>{let{a:o,b:i,c:r,d:s,e:a,f:c}=Qke(Yk(t.x,t.y),LBt(n*Math.PI/180));return e.transform(new z8(o,i,r,s,a,c))}),eL=(e)=>e.orientation()===vV.CCW?e:e.reverse(),MV=(e,t)=>eL(new GI(new RLe(new Gh(e.x,e.y),t))),uee=(e,t,n,o=0,i=0)=>{let r=t/2,s=n/2,a=Math.max(0,Math.min(o,r,s));if(a===0)return uQe(eL(new GI(new QLe(-r,-s,r,s))),e,i);let c=[new RI(new Gh(r-a,-s+a),a,-Math.PI/2,0,!0),new RI(new Gh(r-a,s-a),a,0,Math.PI/2,!0),new RI(new Gh(-r+a,s-a),a,Math.PI/2,Math.PI,!0),new RI(new Gh(-r+a,-s+a),a,Math.PI,1.5*Math.PI,!0)],l=[];for(let d=0;d<c.length;d++){let u=c[d],h=c[(d+1)%c.length];l.push(u),u.end.distanceTo(h.start)[0]>0.000000000001&&l.push(new YE(u.end,h.start))}return uQe(eL(new GI(l)),e,i)},kvt=(e)=>{let t=[];for(let n=0;n<e.vertices.length;n++){let o=e.vertices[n],i=e.vertices[(n+1)%e.vertices.length],r=i.x-o.x,s=i.y-o.y;if(r===0&&s===0)continue;let a=o.bulge??0;if(a===0)t.push(new YE(new Gh(o.x,o.y),new Gh(i.x,i.y)));else{let c=(1-a*a)/(4*a),l=new Gh((o.x+i.x)/2-s*c,(o.y+i.y)/2+r*c);t.push(new RI(l,Math.hypot(r,s)*(1+a*a)/(4*Math.abs(a)),Math.atan2(o.y-l.y,o.x-l.x),Math.atan2(i.y-l.y,i.x-l.x),a>0))}}return eL(new GI(t))},hee=(e,t)=>{for(let n of t.reverse().faces)e.addFace(n.shapes);return e},oNo=(e)=>{if(e.shape==="rect")return uee(e.center,e.width,e.height,0,e.rotation);if(e.shape==="polygon")return eL(new GI(e.points.map((n)=>new Gh(n.x,n.y))));let t=kvt(e.brep_shape.outer_ring);for(let n of e.brep_shape.inner_rings)hee(t,kvt(n));return t},iNo=(e,t=0)=>{if(e.shape==="circle")return((i,r,s)=>hee(MV(i,r/2),MV(i,s/2)))(e,e.outer_diameter,e.hole_diameter);if("outer_width"in e)return hee(uee(e,e.outer_width,e.outer_height,Math.min(e.outer_width,e.outer_height)/2,e.ccw_rotation),uee(e,e.hole_width,e.hole_height,Math.min(e.hole_width,e.hole_height)/2,e.ccw_rotation));let n={x:e.x+e.hole_offset_x,y:e.y+e.hole_offset_y},o=e.shape==="hole_with_polygon_pad"?uQe(eL(new GI(e.pad_outline.map((i)=>new Gh(i.x,i.y)))),e,e.ccw_rotation??t):uee(e,e.rect_pad_width,e.rect_pad_height,e.rect_border_radius,"rect_ccw_rotation"in e?e.rect_ccw_rotation:0);if(e.shape==="circular_hole_with_rect_pad"||e.shape==="hole_with_polygon_pad"&&e.hole_shape==="circle"){if(e.hole_diameter===void 0)throw Error("Circular plated hole requires hole_diameter");return hee(o,MV(n,e.hole_diameter/2))}if(!("hole_width"in e)||e.hole_width===void 0||e.hole_height===void 0)throw Error("Slotted plated hole requires hole_width and hole_height");return hee(o,uee(n,e.hole_width,e.hole_height,Math.min(e.hole_width,e.hole_height)/2,"hole_ccw_rotation"in e?e.hole_ccw_rotation:e.shape==="hole_with_polygon_pad"?e.ccw_rotation??t:0))},Lvt=(e,t,n,o=n)=>{let i=Math.hypot(t.x-e.x,t.y-e.y),r=n/2,s=o/2;if(i<=Math.abs(s-r))return MV(r>=s?e:t,Math.max(r,s));let a=Math.atan2(t.y-e.y,t.x-e.x),c=Math.acos((r-s)/i),l=new RI(new Gh(e.x,e.y),r,a+c,a-c,!0),d=new RI(new Gh(t.x,t.y),s,a-c,a+c,!0);return eL(new GI([l,new YE(l.end,d.start),d,new YE(d.end,l.start)]))},rNo=/\b(?:pcb|source|schematic|subcircuit)_[a-z0-9_]+\b/i,tge=(e,t,n)=>!e||e===t||t.length>0&&e.includes(t)||rNo.test(e)?n:e,nge=(e,t)=>{for(let n of e){let o=tge(n,t,"");if(o)return o}return""},pte=(e,t)=>{let n=e.find((o)=>o.type==="pcb_port"&&o.pcb_port_id===t);if(n?.type==="pcb_port"){let o=e.find((a)=>a.type==="source_port"&&a.source_port_id===n.source_port_id),i=o?.type==="source_port"?e.find((a)=>a.type==="source_component"&&a.source_component_id===o.source_component_id):null,r=nge([i?.type==="source_component"?i.name:null],i?.type==="source_component"?i.source_component_id:""),s=nge([o?.type==="source_port"?o.name:null,o?.type==="source_port"?o.pin_number?.toString():null,o?.type==="source_port"?o.port_hints?.[0]:null],o?.type==="source_port"?o.source_port_id:"");if(r&&s)return`${r}.${s}`;if(s)return s}return"unnamed port"},fS=(e,t)=>{let n=e.find((s)=>nU(s)===t);if(!n)return"unnamed element";if(n.type==="pcb_component"||n.type==="schematic_component"){let s=e.find((a)=>a.type==="source_component"&&a.source_component_id===n.source_component_id);if(s?.type==="source_component")return tge(s.name,s.source_component_id,"unnamed component")}if((n.type==="pcb_smtpad"||n.type==="pcb_plated_hole")&&n.pcb_port_id){let s=pte(e,n.pcb_port_id);if(s!=="unnamed port")return s}if(n.type==="pcb_trace")return yk(e,t);let o={pcb_smtpad:"SMD pad",pcb_plated_hole:"through-hole pad",pcb_via:"via",pcb_hole:"hole",pcb_bend:"bend",pcb_stiffener:"stiffener",pcb_keepout:"keepout",pcb_cutout:"cutout",pcb_copper_pour:"copper pour"}[n.type]??n.type.replace(/^(pcb|source|schematic)_/,"").replaceAll("_"," "),i="name"in n?n.name:void 0,r="description"in n?n.description:void 0;return nge([i,r,WQt(e,t)],t)||`unnamed ${o}`},yk=(e,t)=>{let n=e.find((i)=>i.type==="pcb_trace"&&i.pcb_trace_id===t);if(n?.type==="pcb_trace"&&n.source_trace_id){let i=e.find((r)=>r.type==="source_trace"&&r.source_trace_id===n.source_trace_id);if(i?.type==="source_trace")return((r,s)=>{let a=tge(s.display_name,s.source_trace_id,"");if(a)return a;let c=[];for(let l of s.connected_source_port_ids??[]){let d=r.find((u)=>u.type==="pcb_port"&&u.source_port_id===l);if(d?.type==="pcb_port"){let u=pte(r,d.pcb_port_id);u!=="unnamed port"&&c.push(u)}else{let u=r.find((p)=>p.type==="source_port"&&p.source_port_id===l);if(u?.type!=="source_port")continue;let h=r.find((p)=>p.type==="source_component"&&p.source_component_id===u.source_component_id),A=h?.type==="source_component"?tge(h.name,h.source_component_id,""):"",m=nge([u.name,u.pin_number?.toString(),u.port_hints?.[0]],u.source_port_id);A&&m?c.push(`${A}.${m}`):m&&c.push(m)}if(c.length===2)return`${c[0]} to ${c[1]}`}return c.length===1?`trace connected to ${c[0]}`:"unnamed trace"})(e,i)}if(n?.type!=="pcb_trace")return"unnamed trace";let o=[...new Set(n.route.flatMap((i)=>i.route_type==="wire"?[i.start_pcb_port_id,i.end_pcb_port_id]:[]).filter((i)=>Boolean(i)))].map((i)=>pte(e,i)).filter((i)=>i!=="unnamed port");return o.length>=2?`${o[0]} to ${o[1]}`:o.length===1?`trace connected to ${o[0]}`:"unnamed trace"},KQt=(e,t)=>{let n=t*Math.PI/180;return{x:e.x*Math.cos(n)-e.y*Math.sin(n),y:e.x*Math.sin(n)+e.y*Math.cos(n)}},Fvt=({x:e,y:t,width:n,height:o,ccwRotation:i})=>{let r=n/2,s=o/2;return[{x:-r,y:-s},{x:r,y:-s},{x:r,y:s},{x:-r,y:s}].map((a)=>{let c=KQt(a,i);return{x:e+c.x,y:t+c.y}})},f6=(e)=>{let t,n,o,i=0;e.type==="pcb_hole"?(t=e.hole_width,n=e.hole_height,o=Math.min(t,n)/2,e.hole_shape==="rotated_pill"&&(i=e.ccw_rotation)):e.type==="pcb_plated_hole"?(t=e.outer_width,n=e.outer_height,o=Math.min(t,n)/2,i=e.ccw_rotation):(t=e.width,n=e.height,o=e.radius,e.shape==="rotated_pill"&&(i=e.ccw_rotation));let r=Math.max(Math.max(t,n)/2-o,0),s=KQt(t>=n?{x:r,y:0}:{x:0,y:r},i);return{start:{x:e.x-s.x,y:e.y-s.y},end:{x:e.x+s.x,y:e.y+s.y},radius:o}},Ate=(e)=>{if(e.type==="pcb_smtpad"){if(e.shape==="polygon")return e.points;if(e.shape==="rotated_rect")return Fvt({x:e.x,y:e.y,width:e.width,height:e.height,ccwRotation:e.ccw_rotation})}if(e.type==="pcb_plated_hole"&&"rect_pad_width"in e&&"rect_pad_height"in e)return Fvt({x:e.x,y:e.y,width:e.rect_pad_width,height:e.rect_pad_height,ccwRotation:"rect_ccw_rotation"in e&&typeof e.rect_ccw_rotation=="number"?e.rect_ccw_rotation:0});throw Error(`Expected polygonal pad geometry, got ${e.type} with shape "${e.shape}"`)},Hvt=(e)=>e.map((t,n)=>[t,e[(n+1)%e.length]]),hQe=(e,t,n,o)=>{let i=T6(e,t,n,o);if(i)return{distance:0,pointOnA:i,pointOnB:i,center:i};let r=[{pointOnA:e,pointOnB:im(e,n,o)},{pointOnA:t,pointOnB:im(t,n,o)},{pointOnA:im(n,e,t),pointOnB:n},{pointOnA:im(o,e,t),pointOnB:o}],s=r[0],a=xE(s.pointOnA,s.pointOnB);for(let c of r.slice(1)){let l=xE(c.pointOnA,c.pointOnB);l<a&&(s=c,a=l)}return{distance:Um(e,t,n,o),pointOnA:s.pointOnA,pointOnB:s.pointOnB,center:{x:(s.pointOnA.x+s.pointOnB.x)/2,y:(s.pointOnA.y+s.pointOnB.y)/2}}},mQe=(e,t,n)=>{if(n.length<3)return{distance:Number.POSITIVE_INFINITY,center:e,tracePoint:e,obstaclePoint:e};let o=Hvt(n).map(([r,s])=>T6(e,t,r,s)).filter((r)=>r!==null);if(o.length>0){let r=t.x-e.x,s=t.y-e.y,a=r*r+s*s;return o.sort((c,l)=>((c.x-e.x)*r+(c.y-e.y)*s)/a-((l.x-e.x)*r+(l.y-e.y)*s)/a),{distance:0,center:o[0],tracePoint:o[0],obstaclePoint:o[0]}}if(Xee(e,n)||Xee(t,n)){let r={x:(e.x+t.x)/2,y:(e.y+t.y)/2};return{distance:0,center:r,tracePoint:r,obstaclePoint:r}}let i=hQe(e,t,n[0],n[1]);for(let[r,s]of Hvt(n).slice(1)){let a=hQe(e,t,r,s);a.distance<i.distance&&(i=a)}return{distance:i.distance,center:i.center,tracePoint:i.pointOnA,obstaclePoint:i.pointOnB}};function Ovt(e,t){return Math.sqrt((t.x-e.x)**2+(t.y-e.y)**2)}var zvt=0.000000001,dE=0.000000001;function sNo(e,t){let n=(e.y-t.start.y)*(t.end.x-t.start.x)-(e.x-t.start.x)*(t.end.y-t.start.y);if(Math.abs(n)>zvt)return!1;let o=(e.x-t.start.x)*(t.end.x-t.start.x)+(e.y-t.start.y)*(t.end.y-t.start.y);if(o<-0.000000001)return!1;return o<=(t.end.x-t.start.x)**2+(t.end.y-t.start.y)**2+zvt}function WDe(e,t){let n=!1;for(let o=0,i=t.length-1;o<t.length;i=o++){let r=t[o],s=t[i];if(sNo(e,{start:r,end:s}))return!0;r.y>e.y!=s.y>e.y&&e.x<(s.x-r.x)*(e.y-r.y)/(s.y-r.y)+r.x&&(n=!n)}return n}function _fe(e,t){if(t.type==="pcb_smtpad"){if(t.shape==="circle")return Ovt(e,t)<=t.radius+dE;if(t.shape==="rect"){let n=t.width/2,o=t.height/2;return Math.abs(e.x-t.x)<=n+dE&&Math.abs(e.y-t.y)<=o+dE}if(t.shape==="rotated_rect")return WDe(e,Ate(t));if(t.shape==="pill"||t.shape==="rotated_pill"){if(t.shape==="rotated_pill"){let c=f6(t);return Da(e,c.start,c.end)<=c.radius+dE}let n=t.width/2,o=t.height/2,i=t.radius;if(Math.abs(e.x-t.x)<=n-i+dE&&Math.abs(e.y-t.y)<=o+dE)return!0;let r=Math.max(Math.abs(e.x-t.x)-(n-i),0),s=Math.max(Math.abs(e.y-t.y)-(o-i),0),a=i+dE;return r*r+s*s<=a*a}if(t.shape==="polygon")return WDe(e,t.points)}if(t.type==="pcb_plated_hole"){if(t.shape==="circle")return Ovt(e,t)<=t.outer_diameter/2+dE;if("rect_pad_width"in t&&"rect_pad_height"in t)return WDe(e,Ate(t));if(t.shape==="oval"||t.shape==="pill")return Math.abs(e.x-t.x)<=t.outer_width/2+dE&&Math.abs(e.y-t.y)<=t.outer_height/2+dE}return!1}function Z8(e){return e.type==="pcb_trace_segment"||e.type==="pcb_smtpad"?[e.layer]:e.type==="pcb_plated_hole"?Array.isArray(e.layers)?e.layers:[...QE]:e.type==="pcb_hole"?[...QE]:e.type==="pcb_via"?Array.isArray(e.layers)?e.layers:[...QE]:e.type==="pcb_keepout"&&Array.isArray(e.layers)?e.layers:[]}var jQt=0.1,aNo=0.2,qQt=0.1,cNo=0.1,lNo=0.2,pQe=0.1,Q6=0.005,gL=(e)=>e.find((t)=>t.type==="pcb_board"),eT=(e,t)=>e?.[t],gfe=(e)=>e.type==="pcb_keepout"?e.shape==="outline"?{minX:Math.min(...e.outline.map((t)=>t.x)),minY:Math.min(...e.outline.map((t)=>t.y)),maxX:Math.max(...e.outline.map((t)=>t.x)),maxY:Math.max(...e.outline.map((t)=>t.y))}:e.shape==="circle"?{minX:e.center.x-e.radius,minY:e.center.y-e.radius,maxX:e.center.x+e.radius,maxY:e.center.y+e.radius}:{minX:e.center.x-e.width/2,minY:e.center.y-e.height/2,maxX:e.center.x+e.width/2,maxY:e.center.y+e.height/2}:XQt([e]),dNo=(e)=>{if(e.type==="pcb_keepout"&&e.shape==="circle")return e.radius;let t=gfe(e);return Math.min(t.maxX-t.minX,t.maxY-t.minY)/2},uk=(e)=>e.type==="pcb_via"||e.shape==="circle",hk=(e)=>e.type==="pcb_smtpad"&&(e.shape==="pill"||e.shape==="rotated_pill")||e.type==="pcb_plated_hole"&&(e.shape==="oval"||e.shape==="pill"),mk=(e)=>{let t=((n)=>{if(n.type==="pcb_keepout"&&n.shape!=="outline")return n.center;let o=gfe(n);return Uk({x:o.minX,y:o.minY},{x:o.maxX,y:o.maxY})})(e);return{kind:"circle",x:t.x,y:t.y,radius:dNo(e)}},pk=(e)=>{if(e.type==="pcb_keepout"){if(e.shape==="outline")return{kind:"polygon",points:e.outline};if(e.shape!=="rect")throw Error(`Expected rectangular keepout, got ${e.shape}`);return{kind:"polygon",points:[{x:e.center.x-e.width/2,y:e.center.y-e.height/2},{x:e.center.x+e.width/2,y:e.center.y-e.height/2},{x:e.center.x+e.width/2,y:e.center.y+e.height/2},{x:e.center.x-e.width/2,y:e.center.y+e.height/2}]}}if(e.type==="pcb_smtpad"&&(e.shape==="polygon"||e.shape==="rotated_rect"))return{kind:"polygon",points:Ate(e)};if(e.type==="pcb_plated_hole"&&"rect_pad_width"in e&&"rect_pad_height"in e)return{kind:"polygon",points:Ate(e)};let t=gfe(e);return{kind:"polygon",points:[{x:t.minX,y:t.minY},{x:t.maxX,y:t.minY},{x:t.maxX,y:t.maxY},{x:t.minX,y:t.maxY}]}},AQe=(e)=>{if(e.type!=="pcb_smtpad"||e.shape!=="rect"&&e.shape!=="rotated_rect"||!e.corner_radius||e.corner_radius<=0)return null;let t=Math.min(e.corner_radius,e.width/2,e.height/2);if(t===Math.min(e.width,e.height)/2)return{core:{...e,shape:"rotated_pill",radius:t,ccw_rotation:e.shape==="rotated_rect"?e.ccw_rotation:0},radius:0};return{core:{...e,width:e.width-2*t,height:e.height-2*t,corner_radius:0},radius:t}},yFe=(e,t)=>{let n=AQe(e),o=AQe(t);if(n||o)return yFe(n?.core??e,o?.core??t)-(n?.radius??0)-(o?.radius??0);if(hk(e)&&hk(t)){let s=f6(e),a=f6(t);return Um(s.start,s.end,a.start,a.end)-s.radius-a.radius}if(hk(e)&&uk(t)){let s=f6(e);return q8(s.start,s.end,mk(t))-s.radius}if(uk(e)&&hk(t)){let s=f6(t);return q8(s.start,s.end,mk(e))-s.radius}if(hk(e)){let s=f6(e);return mQe(s.start,s.end,pk(t).points).distance-s.radius}if(hk(t)){let s=f6(t);return mQe(s.start,s.end,pk(e).points).distance-s.radius}return uk(e)&&uk(t)?(i=mk(e),r=mk(t),Math.max(0,Math.hypot(i.x-r.x,i.y-r.y)-i.radius-r.radius)):uk(e)?Qvt(mk(e),pk(t)):uk(t)?Qvt(mk(t),pk(e)):((s,a)=>{if(s.points.length<3||a.points.length<3)return Number.POSITIVE_INFINITY;for(let[u,h]of lV(s))for(let[A,m]of lV(a))if(nNo(u,h,A,m))return 0;let c=s.points[0],l=a.points[0];if(c&&dQe(c,a)||l&&dQe(l,s))return 0;let d=Number.POSITIVE_INFINITY;for(let[u,h]of lV(s))for(let[A,m]of lV(a))d=Math.min(d,cee(u,A,m),cee(h,A,m),cee(A,u,h),cee(m,u,h));return d})(pk(e),pk(t));var i,r},JQt=(e)=>[...MI(e).pcb_smtpad.list(),...MI(e).pcb_plated_hole.list()],$Qt=(e)=>MI(e).pcb_trace.list().flatMap((t)=>{let n=[];for(let o=0;o<t.route.length-1;o++){let i=t.route[o],r=t.route[o+1];i.route_type==="wire"&&(r.route_type==="wire"&&i.layer===r.layer&&n.push({type:"pcb_trace_segment",pcb_trace_id:t.pcb_trace_id,_pcbTrace:t,thickness:"width"in i?i.width:("width"in r)?r.width:pQe,layer:i.layer,x1:i.x,y1:i.y,x2:r.x,y2:r.y}))}return n}),XDe=({tracePoint:e,obstaclePoint:t,traceRadius:n,obstacleRadius:o})=>{let i=t.x-e.x,r=t.y-e.y,s=Math.hypot(i,r);if(s===0)return Uk(e,t);let a=i/s,c=r/s;if(s<=n+o){let l=(Math.max(-n,s-o)+Math.min(n,s+o))/2;return{x:e.x+a*l,y:e.y+c*l}}return Uk({x:e.x+a*n,y:e.y+c*n},{x:t.x-a*o,y:t.y-c*o})},xFe=(e,t)=>{let n=AQe(t);n&&(t=n.core);let o=n?.radius??0,i={x:e.x1,y:e.y1},r={x:e.x2,y:e.y2},s=e.thickness/2;if(t.type==="pcb_via"||uk(t)){let c=t.type==="pcb_via"?{x:t.x,y:t.y,radius:t.outer_diameter/2}:mk(t),l=im(c,i,r);return{gap:q8(i,r,c)-s,center:XDe({tracePoint:l,obstaclePoint:c,traceRadius:s,obstacleRadius:c.radius})}}if(hk(t)){let c=((l,d)=>{let u=f6(d),h=hQe({x:l.x1,y:l.y1},{x:l.x2,y:l.y2},u.start,u.end);return{distance:h.distance,center:h.center,radius:u.radius,tracePoint:h.pointOnA,obstaclePoint:h.pointOnB}})(e,t);return{gap:c.distance-s-c.radius,center:XDe({tracePoint:c.tracePoint,obstaclePoint:c.obstaclePoint,traceRadius:s,obstacleRadius:c.radius})}}let a=mQe(i,r,pk(t).points);return{gap:a.distance-s-o,center:XDe({tracePoint:a.tracePoint,obstaclePoint:a.obstaclePoint,traceRadius:s,obstacleRadius:o})}},BV=(e)=>e<=0,KDe=(e,t)=>{let n={x:e.x1,y:e.y1},o={x:e.x2,y:e.y2},i={x:t.x1,y:t.y1},r={x:t.x2,y:t.y2},s={x:o.x-n.x,y:o.y-n.y},a={x:r.x-i.x,y:r.y-i.y},c=s.x*s.x+s.y*s.y,l=a.x*a.x+a.y*a.y;if(c===0||l===0){if(c===0&&l===0)return{x:(n.x+i.x)/2,y:(n.y+i.y)/2};if(c===0){let T=fE(((n.x-i.x)*a.x+(n.y-i.y)*a.y)/l,0,1),Q={x:i.x+T*a.x,y:i.y+T*a.y};return{x:(n.x+Q.x)/2,y:(n.y+Q.y)/2}}let B=fE(((i.x-n.x)*s.x+(i.y-n.y)*s.y)/c,0,1),w={x:n.x+B*s.x,y:n.y+B*s.y};return{x:(w.x+i.x)/2,y:(w.y+i.y)/2}}let d=n.x-i.x,u=n.y-i.y,h=s.x*s.x+s.y*s.y,A=s.x*a.x+s.y*a.y,m=s.x*d+s.y*u,p=a.x*a.x+a.y*a.y,g=a.x*d+a.y*u,_=h*p-A*A;if(_<0.0000000001)return uNo(n,o,i,r,s,a,c,l);let f=(A*g-p*m)/_,y=(h*g-A*m)/_;f=fE(f,0,1),y=fE(y,0,1),y=(f*A+g)/p,y=fE(y,0,1),f=(y*A-m)/h,f=fE(f,0,1);let x=n.x+f*s.x,C=n.y+f*s.y,I=i.x+y*a.x,b=i.y+y*a.y,P=x-I,E=C-b;return Math.sqrt(P*P+E*E),{x:(x+I)/2,y:(C+b)/2}},uNo=(e,t,n,o,i,r,s,a)=>{let c=((n.x-e.x)*i.x+(n.y-e.y)*i.y)/s;c=fE(c,0,1);let l={x:e.x+c*i.x,y:e.y+c*i.y},d=((o.x-e.x)*i.x+(o.y-e.y)*i.y)/s;d=fE(d,0,1);let u={x:e.x+d*i.x,y:e.y+d*i.y},h=((e.x-n.x)*r.x+(e.y-n.y)*r.y)/a;h=fE(h,0,1);let A={x:n.x+h*r.x,y:n.y+h*r.y},m=((t.x-n.x)*r.x+(t.y-n.y)*r.y)/a;m=fE(m,0,1);let p={x:n.x+m*r.x,y:n.y+m*r.y},g=[{pointA:l,pointB:n,distance:Math.sqrt((l.x-n.x)**2+(l.y-n.y)**2)},{pointA:u,pointB:o,distance:Math.sqrt((u.x-o.x)**2+(u.y-o.y)**2)},{pointA:e,pointB:A,distance:Math.sqrt((e.x-A.x)**2+(e.y-A.y)**2)},{pointA:t,pointB:p,distance:Math.sqrt((t.x-p.x)**2+(t.y-p.y)**2)}].reduce((_,f)=>f.distance<_.distance?f:_);return{x:(g.pointA.x+g.pointB.x)/2,y:(g.pointA.y+g.pointB.y)/2}},fE=(e,t,n)=>Math.max(t,Math.min(n,e));function _Qe(e){return e.route_type!=="wire"?[]:[e.start_pcb_port_id,e.end_pcb_port_id].filter((t)=>Boolean(t))}function hNo(e){let t=new Set;for(let n of e.route)for(let o of _Qe(n))t.add(o);return Array.from(t)}function LZ(e){let t=new Set;for(let n of e)for(let o of hNo(n))t.add(o);return Array.from(t)}var R8=0.000000001,dS=(e)=>new Gh(e.x,e.y);function w6(e,t){if(!Number.isFinite(e)||e<=0)throw Error(`${t} must be finite and positive`);return e}function c1(e,t){return w6(t,"radius"),new GI(new RLe(dS(e),t))}function Sx(e){let t=e.filter((i,r)=>r===0||dS(i).distanceTo(dS(e[r-1]))[0]>R8);if(t.length>1&&dS(t[0]).distanceTo(dS(t.at(-1)))[0]<=R8&&t.pop(),t.length<2)throw Error("A ring needs at least two distinct vertices");let n=t.map((i,r)=>{let s=t[(r+1)%t.length];if(![i.x,i.y,i.bulge??0].every(Number.isFinite))throw Error("Non-finite ring vertex");let a=i.bulge??0;if(Math.abs(a)<=R8)return new YE(dS(i),dS(s));let c=s.x-i.x,l=s.y-i.y,d=Math.hypot(c,l),u=d*(1-a*a)/(4*a),h=new Gh((i.x+s.x)/2-l/d*u,(i.y+s.y)/2+c/d*u);return new RI(h,d*(1+a*a)/(4*Math.abs(a)),Math.atan2(i.y-h.y,i.x-h.x),Math.atan2(s.y-h.y,s.x-h.x),a>0)}),o=new GI;if(o.addFace(n),o.area()<=R8)throw Error("A ring must enclose a non-zero area");return o}function Og(e,t,n,o=0,i=0){if(w6(t,"width"),w6(n,"height"),!Number.isFinite(o)||!Number.isFinite(i)||i<0)throw Error("Invalid rectangle rotation or corner radius");let r=Math.min(i,t/2,n/2),s=t/2,a=n/2,c;if(r<=R8)c=Sx([{x:-s,y:-a},{x:s,y:-a},{x:s,y:a},{x:-s,y:a}]);else{let l=[new Gh(s-r,-a+r),new Gh(s-r,a-r),new Gh(-s+r,a-r),new Gh(-s+r,-a+r)],d=[];for(let u=0;u<4;u++){let h=-Math.PI/2+u*Math.PI/2,A=new RI(l[u],r,h,h+Math.PI/2,!0),m=l[(u+1)%4],p=new Gh(m.x+r*Math.cos(h+Math.PI/2),m.y+r*Math.sin(h+Math.PI/2));d.push(A),A.end.distanceTo(p)[0]>R8&&d.push(new YE(A.end,p))}c=new GI,c.addFace(d)}return c.rotate(o*Math.PI/180).translate(new ife(e.x,e.y))}function gQe(e,t,n,o=n){let i=w6(n,"trace width")/2,r=w6(o,"trace width")/2,s=dS(e).distanceTo(dS(t))[0];if(s<=Math.abs(i-r)+R8)return c1(i>=r?e:t,Math.max(i,r));let a=Math.atan2(t.y-e.y,t.x-e.x),c=Math.acos((i-r)/s),l=a-c,d=a+c,u=(A,m,p)=>new Gh(A.x+m*Math.cos(p),A.y+m*Math.sin(p)),h=new GI;return h.addFace([new YE(u(e,i,l),u(t,r,l)),new RI(dS(t),r,l,d,!0),new YE(u(t,r,d),u(e,i,d)),new RI(dS(e),i,d,l,!0)]),h}function oge(e,t){let n=e.clone(),o=[...n.faces][0].orientation();for(let i of t){let r=i.clone();[...r.faces][0].orientation()===o&&r.reverse();for(let s of r.faces)n.addFace(s.shapes)}return n}function y_e(e,t,n,o=0,i=0.001){if(w6(t,"ellipse width"),w6(n,"ellipse height"),w6(i,"curveTolerance"),Math.abs(t-n)<R8)return c1(e,t/2);let r=Math.max(t,n)/2,s=Math.max(16,Math.ceil(Math.PI/Math.acos(Math.max(-1,1-i/r))));if(s>1e5)throw Error("curveTolerance requires more than 100000 ellipse segments");return Sx(Array.from({length:s},(a,c)=>({x:t/2*Math.cos(2*c*Math.PI/s),y:n/2*Math.sin(2*c*Math.PI/s)}))).rotate(o*Math.PI/180).translate(new ife(e.x,e.y))}function Tee(e,t){if(!e.length)return[];let n=e.map((o)=>t.indexOf(o));if(n.some((o)=>o<0))throw Error(`Layer is missing from copperLayers: ${e.join(", ")}`);return t.slice(Math.min(...n),Math.max(...n)+1)}function mNo(e){switch(e.shape){case"circle":return c1(e,e.radius);case"polygon":return Sx(e.points);case"rect":case"rotated_rect":return Og(e,e.width,e.height,"ccw_rotation"in e?e.ccw_rotation:0,e.rect_border_radius??e.corner_radius??0);case"pill":case"rotated_pill":return Og(e,e.width,e.height,"ccw_rotation"in e?e.ccw_rotation:0,e.radius)}}function pNo(e,t){switch(e.hole_shape){case"circle":return c1(e,e.hole_diameter/2);case"square":return Og(e,e.hole_diameter,e.hole_diameter);case"rect":return Og(e,e.hole_width,e.hole_height);case"oval":return y_e(e,e.hole_width,e.hole_height,0,t);case"pill":case"rotated_pill":return Og(e,e.hole_width,e.hole_height,"ccw_rotation"in e?e.ccw_rotation:0,Math.min(e.hole_width,e.hole_height)/2)}}function ANo(e,t,n,o){let i,r,s={x:e.x+("hole_offset_x"in e?e.hole_offset_x??0:0),y:e.y+("hole_offset_y"in e?e.hole_offset_y??0:0)};switch(e.shape){case"circle":i=c1(e,e.outer_diameter/2),r=c1(e,e.hole_diameter/2);break;case"oval":i=y_e(e,e.outer_width,e.outer_height,e.ccw_rotation,o),r=y_e(e,e.hole_width,e.hole_height,e.ccw_rotation,o);break;case"pill":i=Og(e,e.outer_width,e.outer_height,e.ccw_rotation,Math.min(e.outer_width,e.outer_height)/2),r=Og(e,e.hole_width,e.hole_height,e.ccw_rotation,Math.min(e.hole_width,e.hole_height)/2);break;case"circular_hole_with_rect_pad":case"pill_hole_with_rect_pad":case"rotated_pill_hole_with_rect_pad":i=Og(e,e.rect_pad_width,e.rect_pad_height,"rect_ccw_rotation"in e?e.rect_ccw_rotation:0,e.rect_border_radius??0),r=e.shape==="circular_hole_with_rect_pad"?c1(s,e.hole_diameter/2):Og(s,e.hole_width,e.hole_height,"hole_ccw_rotation"in e?e.hole_ccw_rotation:0,Math.min(e.hole_width,e.hole_height)/2);break;case"hole_with_polygon_pad":{let a=e.ccw_rotation??t;i=Sx(e.pad_outline).rotate(a*Math.PI/180).translate(new ife(e.x,e.y)),r=e.hole_shape==="circle"?c1(s,e.hole_diameter/2):e.hole_shape==="oval"?y_e(s,e.hole_width,e.hole_height,a,o):Og(s,e.hole_width,e.hole_height,a,Math.min(e.hole_width,e.hole_height)/2);break}}return n?oge(i,[r]):i}var jDe=(e,t)=>e.x===t.x&&e.y===t.y,Gvt=(e,t)=>{let n=Math.hypot(e,t);return n?{x:e/n,y:t/n}:{x:1,y:0}};function _No(e,t){try{return $Re.subtract(e,t)}catch(n){if(!(n instanceof Error)||n.message!=="Unresolved boundary conflict in boolean operation")throw n;let o=new z8(1000,0,0,1000,0,0),i=new z8(0.001,0,0,0.001,0,0);return $Re.subtract(e.transform(o),t.transform(o)).transform(i)}}function gNo(e,t,n){let o=new Map,i=new Map,r=[],s=(a,c)=>o.set(a,[...o.get(a)??[],c]);for(let a of e.route){if(a.route_type==="via"){let c=a,l=a.outer_diameter??c.via_diameter;if(l===void 0)continue;let d=a.hole_diameter??c.via_hole_diameter,u=c1(a,l/2),h=n&&d?c1(a,d/2):void 0;for(let A of Tee([a.from_layer,a.to_layer],t))s(A,h?oge(u,[h]):u),h&&i.set(A,[...i.get(A)??[],h])}if(a.route_type==="through_pad")for(let c of new Set([a.start_layer,a.end_layer]))s(c,gQe(a.start,a.end,a.width))}for(let a=0;a<e.route.length-1;a++){let c=e.route[a],l=e.route[a+1],d=c.route_type==="through_pad"?c.end:c,u=l.route_type==="through_pad"?l.start:l;if(jDe(d,u))continue;let h=c.route_type==="wire"?[c.layer]:c.route_type==="via"?Tee([c.from_layer,c.to_layer],t):[c.end_layer],A=l.route_type==="wire"?[l.layer]:l.route_type==="via"?Tee([l.from_layer,l.to_layer],t):[l.start_layer],m=h.filter((_)=>A.includes(_));if(m.length!==1)throw Error(`Cannot determine one wire layer between route points ${a} and ${a+1}`);let p=m[0],g="width"in c?c.width:("width"in l)?l.width:void 0;g===void 0||jDe(d,u)||r.push({start:d,end:u,layer:p,startWidth:g,endWidth:"width"in l?l.width:g})}if(e.route_thickness_mode==="interpolated"){let a=[],c=()=>{a.length&&(s(a[0].layer,function(l){let d=[{...l[0].start,width:l[0].startWidth},...l.map((m)=>({...m.end,width:m.endWidth}))],u=l.map((m)=>Gvt(m.end.x-m.start.x,m.end.y-m.start.y)),h=[],A=[];for(let m=0;m<d.length;m++){let p=d[m];w6(p.width,"interpolated trace width");let g=u[Math.max(0,m-1)],_=u[Math.min(m,u.length-1)],f=Gvt(g.x+_.x,g.y+_.y),y=-f.y*p.width/2,x=f.x*p.width/2;h.push({x:p.x+y,y:p.y+x}),A.push({x:p.x-y,y:p.y-x})}return Sx([...h,...A.reverse()])}(a)),a=[])};for(let l of r){let d=a.at(-1);!d||d.layer===l.layer&&jDe(d.end,l.start)&&d.endWidth===l.startWidth||c(),a.push(l)}c()}else for(let a of r)s(a.layer,gQe(a.start,a.end,a.startWidth));for(let[a,c]of i)o.set(a,o.get(a).map((l)=>c.reduce((d,u)=>_No(d,u),l)).filter((l)=>l.faces.size>0));return o}var fNo=["pcb_board","pcb_smtpad","pcb_plated_hole","pcb_hole","pcb_via","pcb_trace","pcb_copper_pour","pcb_cutout","pcb_keepout","pcb_courtyard_rect","pcb_courtyard_circle","pcb_courtyard_pill","pcb_courtyard_polygon","pcb_courtyard_outline"];function yNo(e){switch(e.shape){case"circle":return[c1(e.center,e.radius)];case"rect":return[Og(e.center,e.width,e.height,e.rotation,e.corner_radius)];case"polygon":return[Sx(e.points)];case"path":if(e.slot_length!==void 0||e.space_between_slots!==void 0||e.slot_corner_radius!==void 0)throw Error("Patterned/custom-corner path cutouts are not supported; use explicit rect/polygon cutouts");return e.route.slice(1).map((t,n)=>gQe(e.route[n],t,e.slot_width))}}function xNo(e,t={}){if(t.layer&&t.layers)throw Error("Specify layer or layers, not both");let n=t.layer?[t.layer]:t.layers,o=function(c,l){if(l.copperLayers){if(!l.copperLayers.length||new Set(l.copperLayers).size!==l.copperLayers.length)throw Error("copperLayers must be a non-empty list without duplicates");return[...l.copperLayers]}let u=c.find((h)=>h.type==="pcb_board")?.num_layers??2;for(let h of c){let A="layers"in h?h.layers:("layer"in h)?[h.layer]:[];if(Array.isArray(A))for(let m of A){let p=typeof m=="string"&&/^inner(\d+)$/.exec(m);p&&(u=Math.max(u,Number(p[1])+2))}if(h.type==="pcb_trace")for(let m of h.route)for(let p of m.route_type==="wire"?[m.layer]:m.route_type==="via"?[m.from_layer,m.to_layer]:[m.start_layer,m.end_layer]){let g=/^inner(\d+)$/.exec(p);g&&(u=Math.max(u,Number(g[1])+2))}}if(!Number.isInteger(u)||u<1||u>10)throw Error("Supported copper layer count is 1–10");return u===1?["top"]:["top",...Array.from({length:u-2},(h,A)=>`inner${A+1}`),"bottom"]}(e,t),i={elements:[],warnings:[],bounds:void 0,copperLayers:o},r=new Map(e.filter((c)=>c.type==="pcb_component").map((c)=>[c.pcb_component_id,c.rotation])),s=t.curveTolerance??0.001;if(!Number.isFinite(s)||s<=0)throw Error("curveTolerance must be finite and positive");let a=t.includeDrillHoles!==!1;for(let c of e){if(!fNo.includes(c.type))continue;let l=c[`${c.type}_id`];if(t.elementTypes&&!t.elementTypes.includes(c.type))continue;if(t.elementIds&&!t.elementIds.includes(l))continue;let d,u="copper",h=[null],A=[];try{switch(c.type){case"pcb_smtpad":h=[c.layer],A=[mNo(c)];break;case"pcb_plated_hole":h=Tee(c.layers,o),A=[ANo(c,r.get(c.pcb_component_id??"")??0,a,s)];break;case"pcb_via":{h=Tee(c.layers,o);let p=c1(c,c.outer_diameter/2);A=[a?oge(p,[c1(c,c.hole_diameter/2)]):p];break}case"pcb_trace":d=gNo(c,o,a),h=[...d.keys()];break;case"pcb_copper_pour":h=[c.layer],A=[c.shape==="rect"?Og(c.center,c.width,c.height,c.rotation):c.shape==="polygon"?Sx(c.points):oge(Sx(c.brep_shape.outer_ring.vertices),c.brep_shape.inner_rings.map((p)=>Sx(p.vertices)))];break;case"pcb_board":u="board",A=[c.outline?.length?Sx(c.outline):Og(c.center,c.width,c.height)];break;case"pcb_hole":u="drill",A=[pNo(c,s)];break;case"pcb_cutout":u="cutout",A=yNo(c);break;case"pcb_keepout":u="keepout",h=c.layers,A=[c.shape==="circle"?c1(c.center,c.radius):c.shape==="rect"?Og(c.center,c.width,c.height):Sx(c.outline)];break;case"pcb_courtyard_rect":u="courtyard",h=[c.layer],A=[Og(c.center,c.width,c.height,c.ccw_rotation)];break;case"pcb_courtyard_circle":u="courtyard",h=[c.layer],A=[c1(c.center,c.radius)];break;case"pcb_courtyard_pill":u="courtyard",h=[c.layer],A=[Og(c.center,c.width,c.height,0,c.radius)];break;case"pcb_courtyard_polygon":u="courtyard",h=[c.layer],A=[Sx(c.points)];break;case"pcb_courtyard_outline":u="courtyard",h=[c.layer],A=[Sx(c.outline)]}if(t.roles&&!t.roles.includes(u))continue;let m=[];for(let p of new Set(h)){if(p===null?t.includeLayerless===!1:n&&!n.includes(p))continue;let g=d?.get(p)??A;if(!g.length)continue;let _=g.reduce((y,x)=>y.merge(x.box),g[0].box);if(![_.xmin,_.ymin,_.xmax,_.ymax].every(Number.isFinite))throw Error("Non-finite geometry bounds");let f={elementId:l,elementType:c.type,sourceElement:c,role:u,layer:p,shapes:g,bounds:_};m.push(f)}for(let p of m)i.elements.push(p),i.bounds=i.bounds?i.bounds.merge(p.bounds):p.bounds}catch(m){let p=m instanceof Error?m.message:String(m);if(t.strict)throw Error(`${l}: ${p}`);i.warnings.push({elementId:l,elementType:c.type,message:p})}}return i}var dAe=0.000000001;function Yvt(e){let t=new Map(e.filter((a)=>a.type==="pcb_port").map((a)=>[a.pcb_port_id,a])),n=e.filter((a)=>a.type==="pcb_smtpad"||a.type==="pcb_plated_hole"),o=new Map;for(let a of n){if(!a.pcb_port_id)continue;let c=o.get(a.pcb_port_id)??[];c.push(a),o.set(a.pcb_port_id,c)}let i=e.filter((a)=>a.type==="pcb_via"),r,s=(a)=>{let c=o.get(a.pcb_port_id);return c?.length?[...new Set(c.flatMap(Z8))]:a.layers};return{ports:t,layersForPort:s,canConnect:(a,c)=>{let l=t.get(c);if(!l)return!0;let d=s(l);if(d.includes(a.layer))return!0;let u=o.get(c)??[];return(()=>{if(r)return r;r=i.map((m)=>({...m,diameter:m.outer_diameter}));let h=e.find((m)=>m.type==="pcb_board"),A=["top",...QE.filter((m)=>m.startsWith("inner")).slice(0,h?Math.max(0,h.num_layers-2):void 0),...h?.num_layers===1?[]:["bottom"]];for(let m of e)if(m.type==="pcb_trace")for(let p of m.route){if(p.route_type!=="via")continue;if(i.some((f)=>Math.hypot(f.x-p.x,f.y-p.y)<=dAe))continue;let g=A.indexOf(p.from_layer),_=A.indexOf(p.to_layer);g<0||_<0||r.push({...p,layers:A.slice(Math.min(g,_),Math.max(g,_)+1),diameter:p.outer_diameter})}return r})().some((h)=>{if(!h.layers.includes(a.layer)||!d.some((m)=>h.layers.includes(m)))return!1;if(h.diameter!==void 0&&(!Number.isFinite(h.diameter)||h.diameter<=0))return!1;let A=h.diameter===void 0?0:h.diameter/2+a.width/2;return!(Math.hypot(a.x-h.x,a.y-h.y)>A+dAe)&&(u.length===0?Math.hypot(l.x-h.x,l.y-h.y)<=dAe:u.some((m)=>!!Z8(m).some((p)=>h.layers.includes(p))&&(h.diameter===void 0?_fe(h,m):yFe({type:"pcb_via",pcb_via_id:"layer-contact",x:h.x,y:h.y,outer_diameter:h.diameter,hole_diameter:0,layers:h.layers},m)<=dAe)))})}}}function CNo(e){if(!e.some((m)=>m.type==="pcb_via"||m.type==="pcb_plated_hole"||m.type==="pcb_copper_pour"||m.type==="pcb_trace"&&m.route.some((p)=>p.route_type==="via")))return[];let t=[],n=[],o=1e6,i=0.0000001*o,r=function(m){let p=new WeakMap,g=(_)=>{let f=p.get(_);return f||(f={box:_.box,facePoints:[..._.faces].map((y)=>y.first.start),edges:[..._.edges].map((y)=>y.shape),edgeIndex:_.edges},p.set(_,f)),f};return(_,f)=>{if(_.isEmpty()||f.isEmpty())return!1;let y=g(_),x=g(f);if(y.box.xmin>x.box.xmax+m||y.box.xmax<x.box.xmin-m||y.box.ymin>x.box.ymax+m||y.box.ymax<x.box.ymin-m)return!1;if(y.facePoints.some((b)=>x.box.contains(b)&&f.contains(b))||x.facePoints.some((b)=>y.box.contains(b)&&_.contains(b)))return!0;let[C,I]=y.edges.length<=x.edges.length?[y,x]:[x,y];for(let b of C.edges){let P=b.box,E=new QLe(P.xmin-m,P.ymin-m,P.xmax+m,P.ymax+m),B=I.edgeIndex.search(E);for(let w of B)if(b.distanceTo(w.shape)[0]<=m)return!0}return!1}}(i),s=(m,p,g,_=!1,f=!1)=>{if(!g.isEmpty()){let y=g.scale(o,o);t.push({id:m,layers:p,geometry:{polygon:y},box:y.box,bridges:_,platedPort:f})}},a=new Map,c=(m)=>{if("polygon"in m.geometry)return m.geometry.polygon;let p=a.get(m);if(!p){let{start:g,end:_}=m.geometry;p=Lvt(g,_,g.width).scale(o,o),a.set(m,p)}return p},l=e.filter((m)=>m.type==="pcb_via"),d=new Map(e.filter((m)=>m.type==="pcb_component").map((m)=>[m.pcb_component_id,m])),u=e.find((m)=>m.type==="pcb_board"),h=["top",...QE.filter((m)=>m.startsWith("inner")).slice(0,u?Math.max(0,u.num_layers-2):void 0),...u?.num_layers===1?[]:["bottom"]];for(let m of e)if(m.type==="pcb_via")s(m.pcb_via_id,m.layers,MV(m,m.outer_diameter/2),!0),m.pcb_trace_id&&n.push([m.pcb_via_id,m.pcb_trace_id]);else if(m.type==="pcb_plated_hole"){if(!m.pcb_port_id)continue;let p={...m,hole_offset_x:"hole_offset_x"in m?m.hole_offset_x??0:0,hole_offset_y:"hole_offset_y"in m?m.hole_offset_y??0:0};s(m.pcb_port_id,m.layers,iNo(p,m.pcb_component_id?d.get(m.pcb_component_id)?.rotation:0),!0,!0)}else if(m.type==="pcb_copper_pour")s(m.pcb_copper_pour_id,[m.layer],oNo(m),!0);else if(m.type==="pcb_trace"){if(m.route_thickness_mode==="interpolated")continue;for(let p=0;p<m.route.length;p++){let g=m.route[p],_=m.route[p+1];if(g.route_type!=="wire"||_?.route_type!=="wire"||g.layer!==_.layer||g.x===_.x&&g.y===_.y){if(g.route_type==="via"){if(l.some((C)=>C.pcb_trace_id===m.pcb_trace_id&&Math.hypot(C.x-g.x,C.y-g.y)<0.000000001))continue;let f=h.indexOf(g.from_layer),y=h.indexOf(g.to_layer);if(f<0||y<0||!g.outer_diameter)continue;let x={type:"pcb_via",pcb_via_id:`${m.pcb_trace_id}_via_${p}`,x:g.x,y:g.y,outer_diameter:g.outer_diameter,hole_diameter:0,layers:h.slice(Math.min(f,y),Math.max(f,y)+1)};s(m.pcb_trace_id,x.layers,MV(x,x.outer_diameter/2),!0)}}else if(g.width>0){let f=g.width/2;t.push({id:m.pcb_trace_id,layers:[g.layer],geometry:{start:g,end:_},box:{xmin:(Math.min(g.x,_.x)-f)*o,ymin:(Math.min(g.y,_.y)-f)*o,xmax:(Math.max(g.x,_.x)+f)*o,ymax:(Math.max(g.y,_.y)+f)*o},bridges:!1,platedPort:!1})}else s(m.pcb_trace_id,[g.layer],Lvt(g,_,g.width))}}if(!t.length)return n;let A=new Vm(t.length);for(let{box:m}of t)A.add(m.xmin,m.ymin,m.xmax,m.ymax);A.finish();for(let[m,p]of t.entries()){if(!p.bridges)continue;let g=p.box;for(let _ of A.search(g.xmin-i,g.ymin-i,g.xmax+i,g.ymax+i)){let f=t[_];p.platedPort&&f.bridges||f.platedPort&&p.bridges||m===_||p.id===f.id||f.bridges&&_<m||!p.layers.some((y)=>f.layers.includes(y))||r(c(p),c(f))&&n.push([p.id,f.id])}}return n}function Vvt(e,t,n,o){return Math.sqrt((n-e)**2+(o-t)**2)}var ZQt=(e)=>xNo(e.filter((t)=>t.type==="pcb_hole"),{elementTypes:["pcb_hole"],strict:!0,curveTolerance:0.000001}).elements,ekt=(e,t)=>{let n=t.sourceElement;if(n.type!=="pcb_hole")throw Error("Expected hole geometry");let o=new Gh(e.x1,e.y1),i=new Gh(e.x2,e.y2),r=1/0,s=im(n,o,i);if(n.hole_shape==="circle")r=Da(n,o,i)-n.hole_diameter/2;else{let a=new YE(o,i);for(let c of t.shapes){let[l,d]=c.distanceTo(a),u=c.contains(o)||c.contains(i)?0:l;u<r&&(r=u,s=d.end)}}return{gap:r-e.thickness/2,center:s}},CFe=class{buckets;objectsById;getBounds;getId;CELL_SIZE=0.4;constructor({objects:e,getBounds:t,getId:n,CELL_SIZE:o}){this.buckets=new Map,this.objectsById=new Map,this.getBounds=t,this.getId=n??(()=>this._getNextId()),this.CELL_SIZE=o??this.CELL_SIZE;for(let i of e)this.addObject(i)}_idCounter=0;_getNextId(){return""+this._idCounter++}addObject(e){let t=this.getBounds(e),n=this.getId(e),o={...e,spatialIndexId:n};this.objectsById.set(n,o);let i=Math.floor(t.minX/this.CELL_SIZE),r=Math.floor(t.minY/this.CELL_SIZE),s=Math.floor(t.maxX/this.CELL_SIZE),a=Math.floor(t.maxY/this.CELL_SIZE);for(let c=i;c<=s;c++)for(let l=r;l<=a;l++){let d=`${c}x${l}`,u=this.buckets.get(d);u?u.push(o):this.buckets.set(d,[o])}}removeObject(e){let t=this.objectsById.get(e);if(!t)return!1;this.objectsById.delete(e);let n=this.getBounds(t),o=Math.floor(n.minX/this.CELL_SIZE),i=Math.floor(n.minY/this.CELL_SIZE),r=Math.floor(n.maxX/this.CELL_SIZE),s=Math.floor(n.maxY/this.CELL_SIZE);for(let a=o;a<=r;a++)for(let c=i;c<=s;c++){let l=`${a}x${c}`,d=this.buckets.get(l);if(d){let u=d.findIndex((h)=>h.spatialIndexId===e);u!==-1&&(d.splice(u,1),d.length===0&&this.buckets.delete(l))}}return!0}getBucketKey(e,t){return`${Math.floor(e/this.CELL_SIZE)}x${Math.floor(t/this.CELL_SIZE)}`}getObjectsInBounds(e,t=0){let n=[],o=new Set,i=Math.floor((e.minX-t)/this.CELL_SIZE),r=Math.floor((e.minY-t)/this.CELL_SIZE),s=Math.floor((e.maxX+t)/this.CELL_SIZE),a=Math.floor((e.maxY+t)/this.CELL_SIZE);for(let c=i;c<=s;c++)for(let l=r;l<=a;l++){let d=`${c}x${l}`,u=this.buckets.get(d)||[];for(let h of u){let A=h.spatialIndexId;o.has(A)||(o.add(A),n.push(h))}}return n}},Uvt=(e,t)=>{let n={x:e.x1,y:e.y1},o={x:e.x2,y:e.y2},{minX:i,minY:r,maxX:s,maxY:a}=t;if(n.x===o.x&&n.y===o.y){let P=Math.max(i,Math.min(s,n.x)),E=Math.max(r,Math.min(a,n.y));return P===n.x&&E===n.y?{x:n.x,y:n.y}:{x:P,y:E}}let c=o.x-n.x,l=o.y-n.y,d=c!==0?(i-n.x)/c:Number.NEGATIVE_INFINITY,u=c!==0?(s-n.x)/c:Number.POSITIVE_INFINITY,h=l!==0?(r-n.y)/l:Number.NEGATIVE_INFINITY,A=l!==0?(a-n.y)/l:Number.POSITIVE_INFINITY,m=Math.max(Math.min(d,u),Math.min(h,A)),p=Math.min(Math.max(d,u),Math.max(h,A));if(m<=p&&p>=0&&m<=1){let P=Math.max(0,Math.min(1,m));return{x:n.x+P*c,y:n.y+P*l}}let g={x:Math.max(i,Math.min(s,n.x)),y:Math.max(r,Math.min(a,n.y))},_={x:Math.max(i,Math.min(s,o.x)),y:Math.max(r,Math.min(a,o.y))},f=(g.x-n.x)**2+(g.y-n.y)**2,y=(_.x-o.x)**2+(_.y-o.y)**2,x=[{start:{x:i,y:r},end:{x:s,y:r}},{start:{x:s,y:r},end:{x:s,y:a}},{start:{x:s,y:a},end:{x:i,y:a}},{start:{x:i,y:a},end:{x:i,y:r}}],C=Math.min(f,y),I=f<=y?g:_,b=(P,E,B)=>Math.max(E,Math.min(B,P));for(let P of x){let E={x:o.x-n.x,y:o.y-n.y},B={x:P.end.x-P.start.x,y:P.end.y-P.start.y},w={x:n.x-P.start.x,y:n.y-P.start.y},T=E.x*E.x+E.y*E.y,Q=E.x*B.x+E.y*B.y,N=E.x*w.x+E.y*w.y,F=B.x*B.x+B.y*B.y,H=B.x*w.x+B.y*w.y,z=T*F-Q*Q;if(Math.abs(z)<0.0000000001)continue;let Y=(Q*H-F*N)/z,U=(T*H-Q*N)/z;Y=b(Y,0,1),U=b(U,0,1);let X={x:n.x+Y*E.x,y:n.y+Y*E.y},V={x:P.start.x+U*B.x,y:P.start.y+U*B.y},W=X.x-V.x,j=X.y-V.y,q=W*W+j*j;q<C&&(C=q,I={x:(X.x+V.x)/2,y:(X.y+V.y)/2})}return I},JY=(e)=>{if(e.type==="pcb_hole"&&(e.hole_shape==="pill"||e.hole_shape==="rotated_pill")||e.type==="pcb_smtpad"&&e.shape==="rotated_pill"){let t=f6(e);return{minX:Math.min(t.start.x,t.end.x)-t.radius,minY:Math.min(t.start.y,t.end.y)-t.radius,maxX:Math.max(t.start.x,t.end.x)+t.radius,maxY:Math.max(t.start.y,t.end.y)+t.radius}}if(e.type==="pcb_trace_segment")return{minX:Math.min(e.x1,e.x2),minY:Math.min(e.y1,e.y2),maxX:Math.max(e.x1,e.x2),maxY:Math.max(e.y1,e.y2)};if(e.type==="pcb_smtpad"||e.type==="pcb_plated_hole"){if(e.type==="pcb_smtpad"&&(e.shape==="rotated_rect"||e.shape==="polygon")||e.type==="pcb_plated_hole"&&"rect_pad_width"in e&&"rect_pad_height"in e){let t=Ate(e);return{minX:Math.min(...t.map((n)=>n.x)),minY:Math.min(...t.map((n)=>n.y)),maxX:Math.max(...t.map((n)=>n.x)),maxY:Math.max(...t.map((n)=>n.y))}}}return XQt([e])},INo=(e)=>e.type==="pcb_port"?e.pcb_port_id:e.type==="pcb_smtpad"?e.pcb_smtpad_id:e.pcb_plated_hole_id;function bNo(e,{connMap:t,minClearance:n}={}){let o=function(x){let C=new Set(x.flatMap((P)=>P.type==="source_bus"&&P.max_length_skew!==void 0?P.source_trace_ids:[])),I=MI(x),b=[];for(let P of x){if(P.type!=="pcb_trace")continue;if(!P.source_trace_id||!C.has(P.source_trace_id))continue;let E=[],B=[],w,T=0,Q=0;for(let N=0;N<P.route.length-1;N++){B[N]=T;let F=P.route[N],H=P.route[N+1];if(F.route_type!=="wire"||H.route_type!=="wire"||F.layer!==H.layer){Q++;continue}let z=Math.hypot(H.x-F.x,H.y-F.y);z!==0&&(E.push({type:"pcb_trace_segment",_pcbTrace:P,pcb_trace_id:P.pcb_trace_id,thickness:F.width,layer:F.layer,x1:F.x,y1:F.y,x2:H.x,y2:H.y,run:Q,startDistance:T,endDistance:T+z}),T+=z)}B[P.route.length-1]=T;e:for(let N=0;N<E.length;N++){let F=E[N];for(let H=N+1;H<E.length;H++){let z=E[H];if(F.layer!==z.layer)continue;let Y=(F.thickness+z.thickness)/2,U=(F.x2-F.x1)*(z.x2-z.x1)+(F.y2-F.y1)*(z.y2-z.y1),X=(F.x2-F.x1)*(z.y2-z.y1)-(F.y2-F.y1)*(z.x2-z.x1),V=U>=Math.hypot(F.x2-F.x1,F.y2-F.y1)*Math.hypot(z.x2-z.x1,z.y2-z.y1)*-0.000000001,W=F.run===z.run&&z.startDistance===F.endDistance;if((!W||U<0&&Math.abs(X)<0.000000001)&&!(!W&&F.run===z.run&&z.startDistance-F.endDistance<=Math.SQRT2*Y&&V||Um({x:F.x1,y:F.y1},{x:F.x2,y:F.y2},{x:z.x1,y:z.y1},{x:z.x2,y:z.y2})-Y>0.000000001)){w=KDe(F,z);break e}}}if(!w){let N=x.find((H)=>H.type==="pcb_board"),F=["top",...QE.filter((H)=>H.startsWith("inner")).slice(0,N?Math.max(0,N.num_layers-2):void 0),...N?.num_layers===1?[]:["bottom"]];e:for(let H=0;H<P.route.length;H++){let z=P.route[H];if(z.route_type!=="via")continue;let Y=I.pcb_via.list().find((j)=>(j.pcb_trace_id===P.pcb_trace_id||!j.pcb_trace_id&&j.source_trace_id===P.source_trace_id)&&Math.hypot(j.x-z.x,j.y-z.y)<=0.000000001),U=Y?.outer_diameter??z.outer_diameter;if(U===void 0||!Number.isFinite(U)||U<=0)continue;let X=F.indexOf(z.from_layer),V=F.indexOf(z.to_layer),W=Y?.layers??(X>=0&&V>=0?F.slice(Math.min(X,V),Math.max(X,V)+1):[]);for(let j of E){if(!W.includes(j.layer))continue;let q=(U+j.thickness)/2;if(Math.max(j.startDistance-B[H],B[H]-j.endDistance,0)<=q+0.000000001)continue;let ne={...j,x1:z.x,y1:z.y,x2:z.x,y2:z.y};if(!(Um(z,z,{x:j.x1,y:j.y1},{x:j.x2,y:j.y2})-q>0.000000001)){w=KDe(j,ne);break e}}}}if(w){let N=I.source_trace.get(P.source_trace_id),F=(N?.connected_source_port_ids??[]).map((z)=>{let Y=I.source_port.get(z),U=Y?.source_component_id?I.source_component.get(Y.source_component_id):void 0;return U?.name&&Y?.name?`${U.name}.${Y.name}`:void 0}).filter((z)=>Boolean(z)),H=N?.name||N?.display_name||F.join(" → ")||"unnamed";b.push({type:"pcb_trace_error",error_type:"pcb_trace_error",pcb_trace_error_id:`self_short_${P.pcb_trace_id}`,pcb_trace_id:P.pcb_trace_id,source_trace_id:P.source_trace_id,message:`PCB trace "${H}" shorts to itself, bypassing part of its length-matched route`,center:w,pcb_component_ids:[],pcb_port_ids:LZ([P]),subcircuit_id:P.subcircuit_id})}}return b}(e);((x)=>{let C=x.filter((E)=>E.type==="pcb_port"),I=x.filter((E)=>E.type==="pcb_smtpad"),b=x.filter((E)=>E.type==="pcb_trace");function P(E,B={}){let w=B.traceWidth||0,T=C.find((Q)=>Q.layers.includes(E.layer)&&Vvt(Q.x,Q.y,E.x,E.y)<0.01);if(T)return T.pcb_port_id;if(B.isFirstOrLastPoint){let Q=I.find((N)=>N.layer===E.layer&&(N.shape==="rect"?Math.abs(E.x-N.x)<N.width/2+w/2&&Math.abs(E.y-N.y)<N.height/2+w/2:N.shape==="circle"?Vvt(E.x,E.y,N.x,N.y)<N.radius:N.shape==="pill"||N.shape==="rotated_pill"?_fe(E,N):void 0));if(Q)return Q.pcb_port_id??null}return null}for(let E of b)for(let B=0;B<E.route.length;B++){let w=E.route[B],T=B===0||B===E.route.length-1;if(w.route_type==="wire"){if(!w.start_pcb_port_id&&B===0){let Q=P(w,{isFirstOrLastPoint:T,traceWidth:w.width});Q&&(w.start_pcb_port_id=Q)}if(!w.end_pcb_port_id&&B===E.route.length-1){let Q=P(w,{isFirstOrLastPoint:T,traceWidth:w.width});Q&&(w.end_pcb_port_id=Q)}}}})(e),t??=uL(e);let i=gL(e);n??=eT(i,"min_trace_to_pad_edge_clearance")??0.1;let r=MI(e).pcb_trace.list().flatMap((x)=>{let C=[];for(let I=0;I<x.route.length-1;I++){let b=x.route[I],P=x.route[I+1];if(b.route_type!=="wire"&&b.route_type!=="via"||P.route_type!=="wire"&&P.route_type!=="via")continue;let E=b.route_type==="wire"?b:P;E.route_type==="wire"&&(b.route_type==="wire"&&P.route_type==="wire"&&b.layer!==P.layer||C.push({type:"pcb_trace_segment",pcb_trace_id:x.pcb_trace_id,_pcbTrace:x,thickness:Math.max(b.route_type==="wire"?b.width??pQe:0,P.route_type==="wire"?P.width??pQe:0),layer:E.layer,x1:b.x,y1:b.y,x2:P.x,y2:P.y}))}return C}),s=MI(e).pcb_smtpad.list(),a=MI(e).pcb_plated_hole.list(),c=MI(e).pcb_port.list(),l=MI(e).pcb_hole.list(),d=new Map(ZQt(e).map((x)=>[x.elementId,x])),u=MI(e).pcb_via.list(),h=MI(e).pcb_keepout.list().filter((x)=>!x.allow_traces),A=[...c,...s,...a],m=new Map;for(let x of h){let C=new Set(x.excluded_pcb_component_ids??[]);C.size!==0&&m.set(x.pcb_keepout_id,A.filter((I)=>I.pcb_component_id&&C.has(I.pcb_component_id)).map(INo))}let p=[...r,...s,...a,...l,...u,...h],g=new CFe({objects:p,getBounds:JY}),_=(x)=>fS(e,x),f=(x,C,I)=>BV(I)?`PCB trace ${x} overlaps with ${C} (accidental contact)`:`PCB trace ${x} is too close to ${C} (gap: ${I.toFixed(3)}mm)`,y=new Set;for(let x of r){let C=n,I=JY(x),b=g.getObjectsInBounds(I,C+x.thickness/2);if(x.x1!==x.x2||x.y1!==x.y2)for(let P of b){if(!Z8(P).includes(x.layer))continue;if(P.type==="pcb_keepout"&&(m.get(P.pcb_keepout_id)??[]).some((w)=>t.areIdsConnected(x.pcb_trace_id,w)))continue;if(P.type==="pcb_trace_segment"){let w=P;if(x.layer!==w.layer)continue;if(t.areIdsConnected(x.pcb_trace_id,w.pcb_trace_id))continue;let T=Um({x:x.x1,y:x.y1},{x:x.x2,y:x.y2},{x:w.x1,y:w.y1},{x:w.x2,y:w.y2})-x.thickness/2-w.thickness/2;if(T>n-Q6)continue;let Q=`overlap_${x.pcb_trace_id}_${w.pcb_trace_id}`,N=`overlap_${w.pcb_trace_id}_${x.pcb_trace_id}`;if(y.has(Q))continue;if(y.has(N))continue;y.add(Q),o.push({type:"pcb_trace_error",error_type:"pcb_trace_error",message:f(_(x.pcb_trace_id),_(w.pcb_trace_id),T),pcb_trace_id:x.pcb_trace_id,source_trace_id:"",pcb_trace_error_id:Q,pcb_component_ids:[],center:KDe(x,w),pcb_port_ids:LZ([x._pcbTrace,w._pcbTrace])});continue}let E=nU(P);if(t.areIdsConnected(x.pcb_trace_id,"pcb_trace_id"in P?P.pcb_trace_id:E))continue;if(P.type==="pcb_smtpad"||P.type==="pcb_plated_hole"||P.type==="pcb_via"){let{gap:w,center:T}=xFe(x,P);if(!BV(w))continue;let Q=`overlap_${x.pcb_trace_id}_${E}`;if(y.has(Q))continue;y.add(Q),o.push({type:"pcb_trace_error",error_type:"pcb_trace_error",message:f(_(x.pcb_trace_id),`${P.type} "${_(E)}"`,w),pcb_trace_id:x.pcb_trace_id,center:T,source_trace_id:"",pcb_trace_error_id:Q,pcb_component_ids:["pcb_component_id"in P?P.pcb_component_id:void 0].filter(Boolean),pcb_port_ids:[...LZ([x._pcbTrace]),"pcb_port_id"in P?P.pcb_port_id:void 0].filter(Boolean)});continue}if(P.type==="pcb_hole"){let{gap:w,center:T}=ekt(x,d.get(P.pcb_hole_id));if(!BV(w))continue;let Q=`overlap_${x.pcb_trace_id}_${E}`;if(y.has(Q))continue;y.add(Q),o.push({type:"pcb_trace_error",error_type:"pcb_trace_error",message:f(_(x.pcb_trace_id),`${P.type} "${_(E)}"`,w),pcb_trace_id:x.pcb_trace_id,source_trace_id:x._pcbTrace.source_trace_id??"",pcb_trace_error_id:Q,pcb_component_ids:P.pcb_component_id?[P.pcb_component_id]:[],pcb_port_ids:LZ([x._pcbTrace]),center:T});continue}let B=dL({x:x.x1,y:x.y1},{x:x.x2,y:x.y2},JY(P))-x.thickness/2;if(B+Q6<C){let w=`overlap_${x.pcb_trace_id}_${E}`;if(y.has(w))continue;if(y.add(w),P.type==="pcb_keepout"&&P.warning_only){o.push({type:"pcb_keepout_overlap_warning",warning_type:"pcb_keepout_overlap_warning",pcb_keepout_overlap_warning_id:`pcb_keepout_overlap_warning_${w}`,pcb_keepout_id:P.pcb_keepout_id,pcb_trace_ids:[x.pcb_trace_id],message:`PCB trace ${_(x.pcb_trace_id)} violates advisory PCB keepout "${fS(e,P.pcb_keepout_id)}"`,center:Uvt(x,JY(P)),subcircuit_id:x._pcbTrace.subcircuit_id??P.subcircuit_id});continue}o.push({type:"pcb_trace_error",error_type:"pcb_trace_error",message:f(_(x.pcb_trace_id),`${P.type} "${_(nU(P))}"`,B),pcb_trace_id:x.pcb_trace_id,source_trace_id:"",pcb_trace_error_id:w,pcb_component_ids:["pcb_component_id"in P?P.pcb_component_id:void 0].filter(Boolean),center:Uvt(x,JY(P)),pcb_port_ids:[...LZ([x._pcbTrace]),"pcb_port_id"in P?P.pcb_port_id:void 0].filter(Boolean)})}}}return o}function _te(e,t){return Math.hypot(e.x-t.x,e.y-t.y)}function SNo(e,t){return _te(e,t)<=Q6}function PNo(e,{connMap:t,minClearance:n}={}){let o=e.filter((a)=>a.type==="pcb_via");if(o.length<2)return[];let i=gL(e);n??=eT(i,"min_via_hole_edge_to_via_hole_edge_clearance")??jQt,t??=uL(e);let r=[],s=new Set;for(let a=0;a<o.length;a++)for(let c=a+1;c<o.length;c++){let l=o[a],d=o[c];if(SNo(l,d))continue;if(!t.areIdsConnected(l.pcb_via_id,d.pcb_via_id))continue;let u=_te(l,d)-l.hole_diameter/2-d.hole_diameter/2;if(u+Q6>=n)continue;let h=[l.pcb_via_id,d.pcb_via_id].sort().join("_");s.has(h)||(s.add(h),r.push({type:"pcb_via_clearance_error",pcb_error_id:`same_net_vias_close_${h}`,message:`Vias ${fS(e,l.pcb_via_id)} and ${fS(e,d.pcb_via_id)} are too close together (gap: ${u.toFixed(3)}mm)`,error_type:"pcb_via_clearance_error",pcb_via_ids:[l.pcb_via_id,d.pcb_via_id],minimum_clearance:n,actual_clearance:u,pcb_center:{x:(l.x+d.x)/2,y:(l.y+d.y)/2}}))}return r}function vNo(e,{connMap:t,minClearance:n}={}){let o=e.filter((c)=>c.type==="pcb_via");if(o.length<2)return[];let i=gL(e);n??=eT(i,"min_via_hole_edge_to_via_hole_edge_clearance")??jQt;let r=eT(i,"min_pad_edge_to_pad_edge_clearance")??cNo;t??=uL(e);let s=[],a=new Set;for(let c=0;c<o.length;c++)for(let l=c+1;l<o.length;l++){let d=o[c],u=o[l];if(t.areIdsConnected(d.pcb_via_id,u.pcb_via_id))continue;let h=_te(d,u),A=h-d.hole_diameter/2-u.hole_diameter/2,m=n;if(A+Q6>=m){if(!d.layers.some((g)=>u.layers.includes(g)))continue;if(A=h-d.outer_diameter/2-u.outer_diameter/2,m=r,A>=0&&A+Q6>=m)continue}let p=[d.pcb_via_id,u.pcb_via_id].sort().join("_");a.has(p)||(a.add(p),s.push({type:"pcb_via_clearance_error",pcb_error_id:`different_net_vias_close_${p}`,message:`Vias ${fS(e,d.pcb_via_id)} and ${fS(e,u.pcb_via_id)} from different nets are too close together (gap: ${A.toFixed(3)}mm)`,error_type:"pcb_via_clearance_error",pcb_via_ids:[d.pcb_via_id,u.pcb_via_id],minimum_clearance:m,actual_clearance:A,pcb_center:{x:(d.x+u.x)/2,y:(d.y+u.y)/2}}))}return s}var mee=0.000000001;function Wvt({point:e,width:t,ownerTrace:n,index:o,connectivity:i}){if(e.route_type!=="wire"||!Number.isFinite(t)||t<=0)return!1;let r=i.getNetConnectedToId(n.pcb_trace_id);return!!r&&(o.get(r)?.get(e.layer)??[]).some((s)=>{if(s.ownerTraceId===n.pcb_trace_id)return!1;if(!s.touchesPad&&![...s.touchingTraceIds].some((c)=>c!==n.pcb_trace_id))return!1;let a=s.radius===void 0?0:s.radius+t/2;return Math.hypot(e.x-s.x,e.y-s.y)<=a+mee})}var QY=0.01;function ENo({via:e,incoming:t,outgoing:n,traceId:o,context:{stack:i,ownedViasByTrace:r}}){let s=i.indexOf(e.from_layer),a=i.indexOf(e.to_layer);if(s<0||a<0)return!1;let c=r.get(o)?.filter((h)=>Math.abs(h.x-e.x)<QY&&Math.abs(h.y-e.y)<QY)??[],l=c.length>0?c.map((h)=>h.layers):[i.slice(Math.min(s,a),Math.max(s,a)+1)],d=Math.abs(t.x-e.x)<QY&&Math.abs(t.y-e.y)<QY,u=Math.abs(n.x-e.x)<QY&&Math.abs(n.y-e.y)<QY;return i.includes(t.layer)&&i.includes(n.layer)&&l.some((h)=>h.includes(t.layer)&&h.includes(n.layer))&&(d||t.layer===e.from_layer)&&(u||n.layer===e.to_layer)}function $Y(e,t){return e.route_type==="wire"&&Z8(t).includes(e.layer)&&_fe(e,t)}function Xvt(e,t){if(e.route_thickness_mode==="interpolated")return;let n=t==="start"?0:e.route.length-2,o=t==="start"?1:-1;for(;n>=0&&n<e.route.length-1;){let i=e.route[n],r=e.route[n+1];if(i?.route_type!=="wire"||r?.route_type!=="wire"||i.layer!==r.layer)return;if(Math.hypot(i.x-r.x,i.y-r.y)>0.000000001)return i.width;n+=o}}function Kvt({point:e,endpointTraceCopperWidth:t,ownerTrace:n,traceWireSegmentsByNetAndLayer:o,fullConnectivityMap:i}){if(e.route_type!=="wire")return!1;let r=i.getNetConnectedToId(n.pcb_trace_id);if(!r)return!1;let s=o.get(r)?.get(e.layer)??[];for(let a of s){if(a.trace.pcb_trace_id===n.pcb_trace_id)continue;let c=t/2+a.start.width/2+0.000000001;if(Da(e,a.start,a.end)<=c)return!0}return!1}function jvt(e){return e.route_type==="through_pad"?{x:(e.start.x+e.end.x)/2,y:(e.start.y+e.end.y)/2}:{x:e.x,y:e.y}}function qvt(e,t,n,o){return t.some((i)=>{if(!i.pcb_port_id||i.pcb_port_id===n)return!1;return o.get(i.pcb_port_id)?.some((s)=>$Y(e,s))??!1})}function MNo({firstPoint:e,lastPoint:t,port:n,expectedPorts:o,padMap:i}){let r,s=e.route_type==="wire"?e:void 0,a=t.route_type==="wire"?t:void 0,c=_Qe(e).includes(n.pcb_port_id),l=_Qe(t).includes(n.pcb_port_id);c&&s?r=s:l&&a||qvt(e,o,n.pcb_port_id,i)&&a?r=a:qvt(t,o,n.pcb_port_id,i)&&s?r=s:s&&a?r=_te(s,n)<=_te(a,n)?s:a:s?r=s:a&&(r=a);let d=jvt(e),u=jvt(t);return r?{x:r.x,y:r.y}:{x:(d.x+u.x)/2,y:(d.y+u.y)/2}}function BNo(e,{connMap:t,pcbConnectivityMap:n}={}){let o=function(I){let b=I.find((B)=>B.type==="pcb_board"),P=["top",...QE.filter((B)=>B.startsWith("inner")).slice(0,b?Math.max(0,b.num_layers-2):void 0),...b?.num_layers===1?[]:["bottom"]],E=new Map;for(let B of I){if(B.type!=="pcb_via"||!B.pcb_trace_id)continue;let w=E.get(B.pcb_trace_id);w?w.push(B):E.set(B.pcb_trace_id,[B])}return{stack:P,ownedViasByTrace:E}}(e),i=function(I){let b=Yvt(I);return I.flatMap((P)=>P.type!=="pcb_trace"?[]:P.route.flatMap((E,B)=>E.route_type!=="wire"?[]:[...new Set([E.start_pcb_port_id,E.end_pcb_port_id])].flatMap((w)=>{if(!w||b.canConnect(E,w))return[];let T=b.ports.get(w);return[{trace:P,point:E,index:B,port:T,padLayers:b.layersForPort(T)}]})))}(e).map(({trace:I,point:b,index:P,port:E,padLayers:B})=>({type:"pcb_trace_error",error_type:"pcb_trace_error",pcb_trace_error_id:`missing_layer_connection_${I.pcb_trace_id}_${P}_${E.pcb_port_id}`,pcb_trace_id:I.pcb_trace_id,source_trace_id:I.source_trace_id??`!${I.pcb_trace_id}`,pcb_port_ids:[E.pcb_port_id],pcb_component_ids:E.pcb_component_id?[E.pcb_component_id]:[],center:{x:b.x,y:b.y},message:`Trace [${yk(e,I.pcb_trace_id)}] on ${b.layer} is missing a via connection to port [${pte(e,E.pcb_port_id)}] on ${B.join(", ")}.`})),r=e.filter((I)=>I.type==="pcb_port"),s=e.filter((I)=>I.type==="pcb_trace"),a=e.filter((I)=>I.type==="source_trace"),c=e.filter((I)=>I.type==="pcb_smtpad"),l=e.filter((I)=>I.type==="pcb_plated_hole"),d=new Map,u,h=t,A=()=>(h??=uL(e),h),m=()=>(u??=function(I,b){let P=new Map;for(let E of I){if(E.route_thickness_mode==="interpolated")continue;let B=b.getNetConnectedToId(E.pcb_trace_id);if(B)for(let w=0;w<E.route.length-1;w++){let T=E.route[w],Q=E.route[w+1];if(T.route_type!=="wire"||Q.route_type!=="wire")continue;if(T.layer!==Q.layer)continue;if(Math.hypot(T.x-Q.x,T.y-Q.y)<=0.000000001)continue;let N=P.get(B)??new Map,F=N.get(T.layer)??[];F.push({trace:E,start:T,end:Q}),N.set(T.layer,F),P.set(B,N)}}return P}(s,A()),u),p,g=()=>(p??=function(I,b){let P=new Map,E=JQt(I),B=I.filter((H)=>H.type==="pcb_trace"),w=I.filter((H)=>H.type==="pcb_via"),T=I.find((H)=>H.type==="pcb_board"),Q=T?.num_layers,N=["top",...QE.filter((H)=>H.startsWith("inner")).slice(0,Q===void 0?void 0:Math.max(0,Q-2)),...Q===1?[]:["bottom"]],F=(H,z,Y)=>{if(![Y.x,Y.y].every(Number.isFinite))return;let U=b.getNetConnectedToId(H);if(!U)return;let X=E.some((q)=>{if(b.getNetConnectedToId(nU(q))!==U||!Z8(q).some((ce)=>z.includes(ce)))return!1;if(Y.radius===void 0)return _fe(Y,q);let ne={type:"pcb_via",pcb_via_id:H,x:Y.x,y:Y.y,outer_diameter:2*Y.radius,hole_diameter:0,layers:z};return yFe(ne,q)<=mee}),V=new Set;for(let q of B)if(q.route_thickness_mode!=="interpolated"&&b.getNetConnectedToId(q.pcb_trace_id)===U)for(let ne=1;ne<q.route.length;ne++){let ce=q.route[ne-1],oe=q.route[ne];if(ce.route_type!=="wire"||oe.route_type!=="wire"||ce.layer!==oe.layer||!z.includes(ce.layer)||!Number.isFinite(ce.width)||ce.width<=0||Math.hypot(ce.x-oe.x,ce.y-oe.y)<=mee)continue;let ie=Y.radius===void 0?0:Y.radius+ce.width/2;if(Da(Y,ce,oe)<=ie+mee){V.add(q.pcb_trace_id);break}}let W={...Y,touchesPad:X,touchingTraceIds:V},j=P.get(U)??new Map;for(let q of z){let ne=j.get(q)??[];ne.push(W),j.set(q,ne)}P.set(U,j)};for(let H of w)!Number.isFinite(H.outer_diameter)||H.outer_diameter<=0||F(H.pcb_via_id,Z8(H),{x:H.x,y:H.y,ownerTraceId:H.pcb_trace_id,radius:H.outer_diameter/2});for(let H of I)if(H.type==="pcb_trace")for(let z of H.route){if(z.route_type!=="via")continue;if(w.some((V)=>Math.hypot(V.x-z.x,V.y-z.y)<=mee&&(V.pcb_trace_id===H.pcb_trace_id||!V.pcb_trace_id&&b.areIdsConnected(V.pcb_via_id,H.pcb_trace_id))))continue;let Y=N.indexOf(z.from_layer),U=N.indexOf(z.to_layer);if(Y<0||U<0)continue;let X=z.outer_diameter;X!==void 0&&(!Number.isFinite(X)||X<=0)||F(H.pcb_trace_id,N.slice(Math.min(Y,U),Math.max(Y,U)+1),{x:z.x,y:z.y,ownerTraceId:H.pcb_trace_id,radius:X===void 0?void 0:X/2})}return P}(e,A()),p),_=new Set;for(let I of c)I.pcb_port_id&&d.set(I.pcb_port_id,[...d.get(I.pcb_port_id)??[],I]);for(let I of l)I.pcb_port_id&&d.set(I.pcb_port_id,[...d.get(I.pcb_port_id)??[],I]);let f=new Map,y=new Map;for(let I of s){let b=new Set,P=I.route[0],E=I.route.at(-1);for(let B of[P,E])if(B)for(let[w,T]of d)T.some((Q)=>$Y(B,Q))&&b.add(w);f.set(I.pcb_trace_id,b);for(let B of b){let w=y.get(B)??new Set;w.add(I.pcb_trace_id),y.set(B,w)}}let x=new Map,C=(I)=>{let b=x.get(I.pcb_trace_id);if(b)return b;n??=function(w){let T=new zwo;T.circuitJson=w;for(let U of w)U.type==="pcb_trace"?T.traceIdToElm.set(U.pcb_trace_id,U):U.type==="pcb_port"&&T.portIdToElm.set(U.pcb_port_id,U);let Q=[...T.traceIdToElm.values()],N=new Map;for(let[U,X]of Q.entries())for(let V=0;V<X.route.length-1;V++){let W=X.route[V],j=X.route[V+1];if(W.route_type!=="wire"||j.route_type!=="wire"||W.layer!==j.layer)continue;let q=W.width/2+0.000000001,ne=N.get(W.layer)??[];ne.push({traceIndex:U,segmentTrace:{...X,route:[W,j]},minX:Math.min(W.x,j.x)-q,minY:Math.min(W.y,j.y)-q,maxX:Math.max(W.x,j.x)+q,maxY:Math.max(W.y,j.y)+q}),N.set(W.layer,ne)}let F=Q.map(()=>new Set);for(let U of N.values()){let X=new Vm(U.length);for(let V of U)X.add(V.minX,V.minY,V.maxX,V.maxY);X.finish();for(let V of U)for(let W of X.search(V.minX,V.minY,V.maxX,V.maxY)){let j=U[W],q=j.traceIndex,ne=F[V.traceIndex];q>V.traceIndex&&!ne.has(q)&&T._arePcbTracesConnected(V.segmentTrace,j.segmentTrace)&&ne.add(q)}}let H=[];for(let[U,X]of F.entries())for(let V of[...X].sort((W,j)=>W-j))H.push([Q[U].pcb_trace_id,Q[V].pcb_trace_id]);let z=Yvt(w),Y=new Map;for(let U of Q)for(let X of U.route)if(X.route_type==="wire")for(let V of new Set([X.start_pcb_port_id,X.end_pcb_port_id])){if(!V||!T.portIdToElm.has(V))continue;if(!z.canConnect(X,V))continue;let W=Y.get(V)??[];W.push(X.start_pcb_port_id===V?[V,U.pcb_trace_id]:[U.pcb_trace_id,V]),Y.set(V,W)}for(let U of T.portIdToElm.keys())for(let X of Y.get(U)??[])H.push(X);return H.push(...CNo(w)),T.connMap=new Xk(Gke(H)),T}(e);let P=new Set,E=[I.pcb_trace_id];for(;E.length>0;){let w=E.pop();if(!P.has(w)){P.add(w);for(let T of n.getAllTracesConnectedToTrace(w))P.has(T.pcb_trace_id)||E.push(T.pcb_trace_id);for(let T of f.get(w)??[])for(let Q of y.get(T)??[])P.has(Q)||E.push(Q)}}let B=s.filter((w)=>P.has(w.pcb_trace_id));for(let w of B)x.set(w.pcb_trace_id,B);return B};for(let I of s){if(I.route.length===0)continue;let b=I.route[0],P=I.route[I.route.length-1],E=a.find((T)=>T.source_trace_id===I.source_trace_id),B=E?r.filter((T)=>E.connected_source_port_ids?.includes(T.source_port_id)):[],w;for(let T=1;T<I.route.length-1;T++){let Q=I.route[T-1],N=I.route[T],F=I.route[T+1];if(N.route_type==="via"){let H=Q.route_type==="wire",z=F.route_type==="wire";H&&z&&(ENo({via:N,incoming:Q,outgoing:F,traceId:I.pcb_trace_id,context:o})||(w??=yk(e,I.pcb_trace_id),i.push({type:"pcb_trace_error",message:`Via in trace [${w}] does not connect its adjacent wire layers at position {x: ${N.x}, y: ${N.y}}.`,source_trace_id:E?.source_trace_id||I.source_trace_id||`!${I.pcb_trace_id}`,error_type:"pcb_trace_error",pcb_trace_id:I.pcb_trace_id,pcb_trace_error_id:`misaligned_via_${I.pcb_trace_id}_${T}`,pcb_component_ids:[],pcb_port_ids:[]})))}}if(E&&B.length>0){if(_.has(E.source_trace_id))continue;_.add(E.source_trace_id)}for(let T of B){if(!T.pcb_port_id)continue;let Q=d.get(T.pcb_port_id);if(!Q?.length)continue;let N=Q.some((H)=>$Y(b,H)),F=Q.some((H)=>$Y(P,H));if(N||F)continue;if(!C(I).some((H)=>f.get(H.pcb_trace_id)?.has(T.pcb_port_id))&&(!N&&!F)){w??=yk(e,I.pcb_trace_id);let H=pte(e,T.pcb_port_id),z=Q[0].type==="pcb_smtpad"?"SMD pad":"through-hole pad",Y=MNo({firstPoint:b,lastPoint:P,port:T,expectedPorts:B,padMap:d});i.push({type:"pcb_trace_error",message:`Trace [${w}] is missing a connection to ${z} ${H}`,source_trace_id:E?.source_trace_id||I.source_trace_id||`!${I.pcb_trace_id}`,error_type:"pcb_trace_error",pcb_trace_id:I.pcb_trace_id,pcb_trace_error_id:`missing_connection_${I.pcb_trace_id}_${T.pcb_port_id}`,center:Y,pcb_component_ids:[],pcb_port_ids:[T.pcb_port_id]})}}if(B.length===0){let T=!1,Q=!1;for(let V of d.values())V.some((W)=>$Y(b,W))&&(T=!0),V.some((W)=>$Y(P,W))&&(Q=!0);let N=T?void 0:Xvt(I,"start"),F=Q?void 0:Xvt(I,"end"),H=N!==void 0&&Kvt({point:b,endpointTraceCopperWidth:N,ownerTrace:I,traceWireSegmentsByNetAndLayer:m(),fullConnectivityMap:A()}),z=F!==void 0&&Kvt({point:P,endpointTraceCopperWidth:F,ownerTrace:I,traceWireSegmentsByNetAndLayer:m(),fullConnectivityMap:A()}),Y=T||H||N!==void 0&&Wvt({point:b,width:N,ownerTrace:I,index:g(),connectivity:A()}),U=Q||z||F!==void 0&&Wvt({point:P,width:F,ownerTrace:I,index:g(),connectivity:A()}),X=b.route_type==="wire"&&P.route_type==="wire"&&b.layer===P.layer&&Math.hypot(b.x-P.x,b.y-P.y)<=0.000000001;Y||b.route_type!=="wire"||(w??=yk(e,I.pcb_trace_id),i.push({type:"pcb_trace_error",message:`Trace [${w}] has disconnected endpoint at (${b.x.toFixed(2)}, ${b.y.toFixed(2)})`,source_trace_id:E?.source_trace_id||I.source_trace_id||`!${I.pcb_trace_id}`,error_type:"pcb_trace_error",pcb_trace_id:I.pcb_trace_id,pcb_trace_error_id:`disconnected_endpoint_${I.pcb_trace_id}_start`,center:{x:b.x,y:b.y},pcb_component_ids:[],pcb_port_ids:[]})),U||P.route_type!=="wire"||X&&!Y||(w??=yk(e,I.pcb_trace_id),i.push({type:"pcb_trace_error",message:`Trace [${w}] has disconnected endpoint at (${P.x.toFixed(2)}, ${P.y.toFixed(2)})`,source_trace_id:E?.source_trace_id||I.source_trace_id||`!${I.pcb_trace_id}`,error_type:"pcb_trace_error",pcb_trace_id:I.pcb_trace_id,pcb_trace_error_id:`disconnected_endpoint_${I.pcb_trace_id}_end`,center:{x:P.x,y:P.y},pcb_component_ids:[],pcb_port_ids:[]}))}}return i}function wNo(e,t={}){let n=[],o=gL(e);if(!o)return n;let i=t.margin??eT(o,"min_board_edge_clearance")??lNo,r=function(a){if(a.outline&&a.outline.length>0)return a.outline.map((c)=>({x:c.x,y:c.y}));if(a.center&&typeof a.width=="number"&&typeof a.height=="number"){let c=a.center.x,l=a.center.y,d=a.width/2,u=a.height/2;return[{x:c-d,y:l-u},{x:c+d,y:l-u},{x:c+d,y:l+u},{x:c-d,y:l+u}]}return null}(o);if(!r)return n;let s=MI(e).pcb_trace.list();for(let a of s)if(!(a.route.length<2))for(let c=0;c<a.route.length-1;c++){let l=a.route[c],d=a.route[c+1];if(l.route_type!=="wire"||d.route_type!=="wire")continue;let u="width"in l?l.width:("width"in d)?d.width:0.1,h={x:l.x,y:l.y},A={x:d.x,y:d.y},m=Number.POSITIVE_INFINITY;for(let g=0;g<r.length;g++){let _=Um(h,A,r[g],r[(g+1)%r.length]);_<m&&(m=_)}let p=u/2+i;if(m<p){let g={type:"pcb_trace_error",error_type:"pcb_trace_error",pcb_trace_error_id:`trace_too_close_to_board_${a.pcb_trace_id}_segment_${c}`,message:`Trace too close to board edge (${m.toFixed(3)}mm < ${p.toFixed(3)}mm required, margin: ${i}mm)`,pcb_trace_id:a.pcb_trace_id,source_trace_id:a.source_trace_id||"",center:{x:(h.x+A.x)/2,y:(h.y+A.y)/2},pcb_component_ids:[],pcb_port_ids:[]};n.push(g)}}return n}function tkt(e,{connMap:t,minClearance:n}={}){let o=JQt(e),i=$Qt(e);if(o.length===0||i.length===0)return[];let r=gL(e);n??=eT(r,"min_trace_to_pad_edge_clearance")??qQt,t??=uL(e);let s=new CFe({objects:o,getBounds:gfe,getId:(l)=>nU(l)}),a=new Map,c=new Set;for(let l of i){let d=s.getObjectsInBounds(JY(l),n+l.thickness/2);for(let u of d){let h=nU(u);if(!Z8(u).includes(l.layer))continue;if(t.areIdsConnected(l.pcb_trace_id,h))continue;let A=`${h}_${l.pcb_trace_id}`,{gap:m,center:p}=xFe(l,u);if(BV(m)){a.delete(A),c.add(A);continue}if(c.has(A))continue;if(m+Q6>=n)continue;let g={type:"pcb_pad_trace_clearance_error",pcb_pad_trace_clearance_error_id:`pad_trace_clearance_${A}`,error_type:"pcb_pad_trace_clearance_error",message:`Pad ${fS(e,h)} and trace ${fS(e,l.pcb_trace_id)} are too close (clearance: ${Z_e(m)}, minimum: ${Z_e(n)})`,pcb_pad_id:h,pcb_trace_id:l.pcb_trace_id,minimum_clearance:n,actual_clearance:m,center:p},_=a.get(A);(!_||m<_.gap)&&a.set(A,{error:g,gap:m})}}return Array.from(a.values()).map(({error:l})=>l)}function nkt(e,{connMap:t,minClearance:n}={}){let o=e.filter((c)=>c.type==="pcb_via"),i=$Qt(e).map((c)=>({...c,minX:Math.min(c.x1,c.x2),maxX:Math.max(c.x1,c.x2),minY:Math.min(c.y1,c.y2),maxY:Math.max(c.y1,c.y2),radius:Math.max(0,c.thickness/2),finiteBounds:Number.isFinite(c.x1)&&Number.isFinite(c.x2)&&Number.isFinite(c.y1)&&Number.isFinite(c.y2)&&Number.isFinite(c.thickness)}));if(o.length===0||i.length===0)return[];let r=gL(e);n??=eT(r,"min_trace_to_pad_edge_clearance")??qQt,t??=uL(e);let s=new Map,a=new Set;for(let c of o){let l=Z8(c),d=Number.isFinite(c.x)&&Number.isFinite(c.y)&&Number.isFinite(c.outer_diameter)&&Number.isFinite(n),u=Math.max(0,c.outer_diameter/2)+Math.max(0,n)+Q6;for(let h of i){let A=u+h.radius;if(d&&h.finiteBounds&&(c.x<h.minX-A||c.x>h.maxX+A||c.y<h.minY-A||c.y>h.maxY+A))continue;if(!l.includes(h.layer))continue;if(t.areIdsConnected(h.pcb_trace_id,c.pcb_via_id))continue;let m=`${c.pcb_via_id}_${h.pcb_trace_id}`,{gap:p,center:g}=xFe(h,c);if(BV(p)){s.delete(m),a.add(m);continue}if(a.has(m))continue;if(p+Q6>=n)continue;let _={type:"pcb_via_trace_clearance_error",pcb_via_trace_clearance_error_id:`via_trace_clearance_${m}`,error_type:"pcb_via_trace_clearance_error",message:`Via ${fS(e,c.pcb_via_id)} and trace ${fS(e,h.pcb_trace_id)} are too close (clearance: ${Z_e(p)}, minimum: ${Z_e(n)})`,pcb_via_id:c.pcb_via_id,pcb_trace_id:h.pcb_trace_id,minimum_clearance:n,actual_clearance:p,center:g},f=s.get(m);(!f||p<f.gap)&&s.set(m,{error:_,gap:p})}}return Array.from(s.values()).map(({error:c})=>c)}var TNo,DNo,NNo=Object.create,{getPrototypeOf:RNo,defineProperty:Jvt,getOwnPropertyNames:QNo}=Object,$vt=Object.prototype.hasOwnProperty;function kNo(e){return this[e]}var Zvt,uAe,LNo=(Zvt=function(e,t){var n,o;n=e,o=function(){var i=function(F){return F!=null&&(r(F)||function(H){return typeof H.readFloatLE=="function"&&typeof H.slice=="function"&&r(H.slice(0,0))}(F)||!!F._isBuffer)};function r(F){return!!F.constructor&&typeof F.constructor.isBuffer=="function"&&F.constructor.isBuffer(F)}var s=Object.prototype.toString,a=function(F){if(typeof F>"u")return"undefined";if(F===null)return"null";if(F===!0||F===!1||F instanceof Boolean)return"boolean";if(typeof F=="string"||F instanceof String)return"string";if(typeof F=="number"||F instanceof Number)return"number";if(typeof F=="function"||F instanceof Function)return"function";if(typeof Array.isArray<"u"&&Array.isArray(F))return"array";if(F instanceof RegExp)return"regexp";if(F instanceof Date)return"date";var H=s.call(F);return H==="[object RegExp]"?"regexp":H==="[object Date]"?"date":H==="[object Arguments]"?"arguments":H==="[object Error]"?"error":i(F)?"buffer":H==="[object Set]"?"set":H==="[object WeakSet]"?"weakset":H==="[object Map]"?"map":H==="[object WeakMap]"?"weakmap":H==="[object Symbol]"?"symbol":H==="[object Int8Array]"?"int8array":H==="[object Uint8Array]"?"uint8array":H==="[object Uint8ClampedArray]"?"uint8clampedarray":H==="[object Int16Array]"?"int16array":H==="[object Uint16Array]"?"uint16array":H==="[object Int32Array]"?"int32array":H==="[object Uint32Array]"?"uint32array":H==="[object Float32Array]"?"float32array":H==="[object Float64Array]"?"float64array":"object"};function c(F,H){return F(H={exports:{}},H.exports),H.exports}var l=c(function(F){(function(){function H(z,Y){if(typeof Y!="function")return z;var U={};for(var X in z)Object.prototype.hasOwnProperty.call(z,X)&&(U[Y(X,z[X])||X]=z[X]);return U}F.exports?F.exports=H:window.rename=H})()}),d=function F(H,z){var Y=a(H);if(Y!=="object"&&Y!=="array")throw Error("expected an object");var U=[];for(var X in Y==="object"&&(H=l(H,z),U={}),H)if(H.hasOwnProperty(X)){var V=H[X];a(V)==="object"||a(V)==="array"?U[X]=F(V,z):U[X]=V}return U},u=c(function(F){var H=Object.prototype.hasOwnProperty,z="~";function Y(){}function U(V,W,j){this.fn=V,this.context=W,this.once=j||!1}function X(){this._events=new Y,this._eventsCount=0}Object.create&&(Y.prototype=Object.create(null),new Y().__proto__||(z=!1)),X.prototype.eventNames=function(){var V,W,j=[];if(this._eventsCount===0)return j;for(W in V=this._events)H.call(V,W)&&j.push(z?W.slice(1):W);return Object.getOwnPropertySymbols?j.concat(Object.getOwnPropertySymbols(V)):j},X.prototype.listeners=function(V,W){var j=z?z+V:V,q=this._events[j];if(W)return!!q;if(!q)return[];if(q.fn)return[q.fn];for(var ne=0,ce=q.length,oe=Array(ce);ne<ce;ne++)oe[ne]=q[ne].fn;return oe},X.prototype.emit=function(V,W,j,q,ne,ce){var oe=z?z+V:V;if(!this._events[oe])return!1;var ie,J,ee=this._events[oe],se=arguments.length;if(ee.fn){switch(ee.once&&this.removeListener(V,ee.fn,void 0,!0),se){case 1:return ee.fn.call(ee.context),!0;case 2:return ee.fn.call(ee.context,W),!0;case 3:return ee.fn.call(ee.context,W,j),!0;case 4:return ee.fn.call(ee.context,W,j,q),!0;case 5:return ee.fn.call(ee.context,W,j,q,ne),!0;case 6:return ee.fn.call(ee.context,W,j,q,ne,ce),!0}for(J=1,ie=Array(se-1);J<se;J++)ie[J-1]=arguments[J];ee.fn.apply(ee.context,ie)}else{var le,he=ee.length;for(J=0;J<he;J++)switch(ee[J].once&&this.removeListener(V,ee[J].fn,void 0,!0),se){case 1:ee[J].fn.call(ee[J].context);break;case 2:ee[J].fn.call(ee[J].context,W);break;case 3:ee[J].fn.call(ee[J].context,W,j);break;case 4:ee[J].fn.call(ee[J].context,W,j,q);break;default:if(!ie)for(le=1,ie=Array(se-1);le<se;le++)ie[le-1]=arguments[le];ee[J].fn.apply(ee[J].context,ie)}}return!0},X.prototype.on=function(V,W,j){var q=new U(W,j||this),ne=z?z+V:V;return this._events[ne]?this._events[ne].fn?this._events[ne]=[this._events[ne],q]:this._events[ne].push(q):(this._events[ne]=q,this._eventsCount++),this},X.prototype.once=function(V,W,j){var q=new U(W,j||this,!0),ne=z?z+V:V;return this._events[ne]?this._events[ne].fn?this._events[ne]=[this._events[ne],q]:this._events[ne].push(q):(this._events[ne]=q,this._eventsCount++),this},X.prototype.removeListener=function(V,W,j,q){var ne=z?z+V:V;if(!this._events[ne])return this;if(!W)return--this._eventsCount===0?this._events=new Y:delete this._events[ne],this;var ce=this._events[ne];if(ce.fn)ce.fn!==W||q&&!ce.once||j&&ce.context!==j||(--this._eventsCount===0?this._events=new Y:delete this._events[ne]);else{for(var oe=0,ie=[],J=ce.length;oe<J;oe++)(ce[oe].fn!==W||q&&!ce[oe].once||j&&ce[oe].context!==j)&&ie.push(ce[oe]);ie.length?this._events[ne]=ie.length===1?ie[0]:ie:--this._eventsCount===0?this._events=new Y:delete this._events[ne]}return this},X.prototype.removeAllListeners=function(V){var W;return V?(W=z?z+V:V,this._events[W]&&(--this._eventsCount===0?this._events=new Y:delete this._events[W])):(this._events=new Y,this._eventsCount=0),this},X.prototype.off=X.prototype.removeListener,X.prototype.addListener=X.prototype.on,X.prototype.setMaxListeners=function(){return this},X.prefixed=z,X.EventEmitter=X,F.exports=X});function h(F,H,z){return H in F?Object.defineProperty(F,H,{value:z,enumerable:!0,configurable:!0,writable:!0}):F[H]=z,F}var A=function(){},m={data:"state-data",cdata:"state-cdata",tagBegin:"state-tag-begin",tagName:"state-tag-name",tagEnd:"state-tag-end",attributeNameStart:"state-attribute-name-start",attributeName:"state-attribute-name",attributeNameEnd:"state-attribute-name-end",attributeValueBegin:"state-attribute-value-begin",attributeValue:"state-attribute-value"},p={lt:"action-lt",gt:"action-gt",space:"action-space",equal:"action-equal",quote:"action-quote",slash:"action-slash",char:"action-char",error:"action-error"},g={text:"text",openTag:"open-tag",closeTag:"close-tag",attributeName:"attribute-name",attributeValue:"attribute-value"},_={" ":p.space,"\t":p.space,"\n":p.space,"\r":p.space,"<":p.lt,">":p.gt,'"':p.quote,"'":p.quote,"=":p.equal,"/":p.slash},f=function(F){var H,z,Y,U,X,V,W,j,q,ne;F=Object.assign({debug:!1},F);var ce=new u,oe=m.data,ie="",J="",ee="",se="",le="",he="",ue=function(_e,Pe){if(J[0]!=="?"&&J[0]!=="!"){var Ee={type:_e,value:Pe};F.debug&&console.log("emit:",Ee),ce.emit("data",Ee)}};ce.stateMachine=(h(ne={},m.data,(h(H={},p.lt,function(){ie.trim()&&ue(g.text,ie),J="",le=!1,oe=m.tagBegin}),h(H,p.char,function(_e){ie+=_e}),H)),h(ne,m.cdata,h({},p.char,function(_e){(ie+=_e).substr(-3)==="]]>"&&(ue(g.text,ie.slice(0,-3)),ie="",oe=m.data)})),h(ne,m.tagBegin,(h(z={},p.space,A),h(z,p.char,function(_e){J=_e,oe=m.tagName}),h(z,p.slash,function(){J="",le=!0}),z)),h(ne,m.tagName,(h(Y={},p.space,function(){le?oe=m.tagEnd:(oe=m.attributeNameStart,ue(g.openTag,J))}),h(Y,p.gt,function(){ue(le?g.closeTag:g.openTag,J),ie="",oe=m.data}),h(Y,p.slash,function(){oe=m.tagEnd,ue(g.openTag,J)}),h(Y,p.char,function(_e){(J+=_e)==="![CDATA["&&(oe=m.cdata,ie="",J="")}),Y)),h(ne,m.tagEnd,(h(U={},p.gt,function(){ue(g.closeTag,J),ie="",oe=m.data}),h(U,p.char,A),U)),h(ne,m.attributeNameStart,(h(X={},p.char,function(_e){ee=_e,oe=m.attributeName}),h(X,p.gt,function(){ie="",oe=m.data}),h(X,p.space,A),h(X,p.slash,function(){le=!0,oe=m.tagEnd}),X)),h(ne,m.attributeName,(h(V={},p.space,function(){oe=m.attributeNameEnd}),h(V,p.equal,function(){ue(g.attributeName,ee),oe=m.attributeValueBegin}),h(V,p.gt,function(){se="",ue(g.attributeName,ee),ue(g.attributeValue,se),ie="",oe=m.data}),h(V,p.slash,function(){le=!0,se="",ue(g.attributeName,ee),ue(g.attributeValue,se),oe=m.tagEnd}),h(V,p.char,function(_e){ee+=_e}),V)),h(ne,m.attributeNameEnd,(h(W={},p.space,A),h(W,p.equal,function(){ue(g.attributeName,ee),oe=m.attributeValueBegin}),h(W,p.gt,function(){se="",ue(g.attributeName,ee),ue(g.attributeValue,se),ie="",oe=m.data}),h(W,p.char,function(_e){se="",ue(g.attributeName,ee),ue(g.attributeValue,se),ee=_e,oe=m.attributeName}),W)),h(ne,m.attributeValueBegin,(h(j={},p.space,A),h(j,p.quote,function(_e){he=_e,se="",oe=m.attributeValue}),h(j,p.gt,function(){ue(g.attributeValue,se=""),ie="",oe=m.data}),h(j,p.char,function(_e){he="",se=_e,oe=m.attributeValue}),j)),h(ne,m.attributeValue,(h(q={},p.space,function(_e){he?se+=_e:(ue(g.attributeValue,se),oe=m.attributeNameStart)}),h(q,p.quote,function(_e){he===_e?(ue(g.attributeValue,se),oe=m.attributeNameStart):se+=_e}),h(q,p.gt,function(_e){he?se+=_e:(ue(g.attributeValue,se),ie="",oe=m.data)}),h(q,p.slash,function(_e){he?se+=_e:(ue(g.attributeValue,se),le=!0,oe=m.tagEnd)}),h(q,p.char,function(_e){se+=_e}),q)),ne);var Ae=function(_e){F.debug&&console.log(oe,_e);var Pe=ce.stateMachine[oe],Ee=Pe[function(Te){return _[Te]||p.char}(_e)]||Pe[p.error]||Pe[p.char];Ee(_e)};return ce.write=function(_e){for(var Pe=_e.length,Ee=0;Ee<Pe;Ee++)Ae(_e[Ee])},ce},y=g,x={element:"element",text:"text"},C=function(F){return Object.assign({name:"",type:x.element,value:"",parent:null,attributes:{},children:[]},F)},I=function(F){F=Object.assign({stream:!1,parentNodes:!0,doneEvent:"done",tagPrefix:"tag:",emitTopLevelOnly:!1,debug:!1},F);var H=void 0,z=void 0,Y=void 0,U=void 0,X=new u,V=function(W){switch(W.type){case y.openTag:if(Y===null)(Y=z).name=W.value;else{var j=C({name:W.value,parent:Y});Y.children.push(j),Y=j}break;case y.closeTag:var q=Y.parent;if(F.parentNodes||(Y.parent=null),Y.name!==W.value)break;F.stream&&q===z&&(z.children=[],Y.parent=null),F.emitTopLevelOnly&&q!==z||(X.emit(F.tagPrefix+Y.name,Y),X.emit("tag",Y.name,Y)),Y===z&&(H.removeAllListeners("data"),X.emit(F.doneEvent,Y),z=null),Y=q;break;case y.text:Y&&Y.children.push(C({type:x.text,value:W.value,parent:F.parentNodes?Y:null}));break;case y.attributeName:U=W.value,Y.attributes[U]="";break;case y.attributeValue:Y.attributes[U]=W.value}};return X.reset=function(){(H=f({debug:F.debug})).on("data",V),z=C(),Y=null,U="",X.parse=H.write},X.reset(),X},b=function(F,H){H=Object.assign({},H,{stream:!1,tagPrefix:":"});var z=I(H),Y=void 0;return z.on("done",function(U){Y=U}),z.parse(F),Y},P=b,E=function(F){return d(F,function(H){return w(H)?H:B(H)})},B=function(F){return F.replace(/[-|:]([a-z])/gi,function(H,z){return z.toUpperCase()})},w=function(F){return/^(data|aria)(-\w+)/.test(F)},T=function(F){return String(F).replace(/&/g,"&").replace(/'/g,"'").replace(/"/g,""").replace(/</g,"<").replace(/>/g,">")},Q=function(F){var H,z,Y=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},U=Y.transformNode,X=U===void 0?function(j){return j}:U,V=Y.camelcase,W=V!==void 0&&V;return H=function(j){var q=P("<root>".concat(j,"</root>"),{parentNodes:!1});if(q.children&&q.children.length>0&&q.children.every(function(ne){return ne.name==="svg"}))return q.children.length===1?q.children[0]:q.children;throw Error("nothing to parse")}(F),z=X(H),W&&(z=E(z)),z},N=Object.assign({},{parse:function(){for(var F=arguments.length,H=Array(F),z=0;z<F;z++)H[z]=arguments[z];return new Promise(function(Y,U){try{Y(Q.apply(void 0,H))}catch(X){U(X)}})},parseSync:Q,stringify:function F(H){var z=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},Y=z.transformAttr,U=Y===void 0?function(ie,J,ee){return"".concat(ie,'="').concat(ee(J),'"')}:Y,X=z.transformNode,V=X===void 0?function(ie){return ie}:X,W=z.selfClose,j=W===void 0||W;if(Array.isArray(H))return H.map(function(ie){return F(ie,{transformAttr:U,selfClose:j,transformNode:V})}).join("");var q=V(H);if(q.type==="text")return function(ie){if(ie){var J=String(ie);return/[&<>]/.test(J)?"<![CDATA[".concat(J.replace(/]]>/,"]]]]><![CDATA[>"),"]]>"):J}return""}(q.value);var ne="";for(var ce in q.attributes){var oe=U(ce,q.attributes[ce],T,q.name);ne+=oe?" ".concat(oe):""}return q.children&&q.children.length>0||!j?"<".concat(q.name).concat(ne,">").concat(F(q.children,{transformAttr:U,transformNode:V,selfClose:j}),"</").concat(q.name,">"):"<".concat(q.name).concat(ne,"/>")}});return N},typeof e=="object"&&typeof t<"u"?t.exports=o():typeof define=="function"&&define.amd?define(o):(n=typeof globalThis<"u"?globalThis:n||self).svgson=o()},()=>(uAe||Zvt((uAe={exports:{}}).exports,uAe),uAe.exports)),eEt={0:"M0.301025 0.257813 L0.206593 0.283385 L0.122042 0.361307 L0.075923 0.474441 L0.064942 0.642221 L0.091296 0.78289 L0.159376 0.899463 L0.257104 0.961214 L0.344948 0.961214 L0.442678 0.899463 L0.510757 0.78289 L0.537111 0.642221 L0.526131 0.474441 L0.480012 0.361307 L0.39546 0.283385 L0.301025 0.257813",1:"M0.220426 0.40845 L0.381626 0.270996 L0.381626 0.948966",2:"M0.110409 0.39212 L0.125621 0.342293 L0.170571 0.295823 L0.244237 0.26431 L0.291518 0.257813 L0.373319 0.263799 L0.434683 0.290705 L0.468239 0.331966 L0.480292 0.379913 L0.479492 0.411806 L0.465088 0.465192 L0.402571 0.568988 L0.245134 0.766438 L0.07959 0.948045 L0.522462 0.948045",3:"M0.081606 0.345073 L0.119154 0.315633 L0.178996 0.284091 L0.255265 0.257813 L0.349133 0.263062 L0.43127 0.289348 L0.48994 0.336662 L0.525141 0.394491 L0.513407 0.457577 L0.466472 0.504892 L0.384334 0.541692 L0.290464 0.56272 L0.20833 0.573235 L0.290464 0.583749 L0.384334 0.610035 L0.466472 0.652092 L0.519274 0.709922 L0.531007 0.773007 L0.50754 0.841351 L0.454738 0.899179 L0.3726 0.946494 L0.310412 0.961214 L0.209503 0.959111 L0.127367 0.946494 L0.071046 0.929671",4:"M0.418494 0.270996 L0.048828 0.724199 L0.553224 0.724199 M0.414181 0.578167 L0.414181 0.94897",5:"M0.074951 0.270996 L0.074951 0.614701 L0.267655 0.5695 L0.405247 0.586502 L0.460002 0.617189 L0.498028 0.660731 L0.527101 0.779401 L0.513352 0.841049 L0.477274 0.889568 L0.406378 0.93463 L0.324445 0.958337 L0.247399 0.962139 L0.182516 0.949767 L0.130068 0.925508 L0.074951 0.875607 M0.074951 0.270996 L0.527101 0.270996",6:"M0.428549 0.257813 L0.341433 0.285053 L0.26073 0.312099 L0.192188 0.360182 L0.138902 0.410969 L0.098219 0.500422 L0.070249 0.584267 L0.067264 0.670716 L0.065164 0.756863 L0.087163 0.820973 L0.108168 0.861042 L0.157916 0.913131 L0.210981 0.948192 L0.29279 0.961214 L0.384548 0.956206 L0.456409 0.924151 L0.507262 0.881077 L0.5349 0.821975 L0.537111 0.771889 L0.521634 0.718798 L0.498418 0.67372 L0.463042 0.636657 L0.414398 0.613617 L0.34696 0.598591 L0.28284 0.595587 L0.215403 0.605604 L0.145756 0.641665 L0.109274 0.678729 L0.064942 0.724006",7:"M0.071534 0.270996 L0.530519 0.270996 L0.495935 0.291702 L0.477752 0.305407 L0.435186 0.346112 L0.412067 0.374136 L0.388565 0.40796 L0.365315 0.448098 L0.342943 0.495062 L0.322081 0.549366 L0.303364 0.611524 L0.287416 0.68205 L0.270077 0.80465 L0.26253 0.94897",8:"M0.286761 0.257813 L0.210684 0.27162 L0.1414 0.305622 L0.092494 0.382125 L0.111513 0.450128 L0.16857 0.502193 L0.228345 0.539382 L0.377781 0.594635 L0.470161 0.645637 L0.52586 0.706203 L0.538087 0.792269 L0.506841 0.87621 L0.438915 0.927212 L0.339743 0.961214 L0.263666 0.959089 L0.174004 0.929337 L0.102003 0.881523 L0.063965 0.811395 L0.066682 0.741266 L0.102003 0.671139 L0.180797 0.608448 L0.259591 0.580822 L0.358762 0.548945 L0.456576 0.49688 L0.486463 0.446941 L0.487822 0.362999 L0.453859 0.302434 L0.384574 0.265245 L0.286761 0.257813",9:"M0.511026 0.437812 L0.491026 0.347812 L0.451026 0.297812 L0.391026 0.267812 L0.311026 0.257813 L0.231026 0.267812 L0.161026 0.297812 L0.111026 0.347812 L0.091026 0.417812 L0.111026 0.487812 L0.161026 0.537812 L0.231026 0.567812 L0.311026 0.577812 L0.391026 0.557812 L0.451026 0.517812 L0.491026 0.477812 L0.511026 0.437812 M0.510026 0.438812 L0.434026 0.636812 L0.381026 0.777812 L0.337026 0.879812 L0.301026 0.957812","!":"M0.301026 0.270996 L0.301026 0.749566 M0.251466 0.94897 L0.350587 0.94897",'"':"M0.16504 0.270996 L0.16504 0.523022 M0.437013 0.270996 L0.437013 0.523022","#":"M0.20958 0.282227 L0.146515 0.949754 M0.461844 0.282227 L0.398779 0.949754 M0.032999 0.526969 L0.600587 0.452796 M0.001465 0.82366 L0.569055 0.749486",$:"M0.307121 0.240234 L0.307121 1.083502 M0.490031 0.415915 L0.404676 0.328075 L0.23396 0.310507 L0.136407 0.398347 L0.099828 0.521324 L0.124213 0.591596 L0.197379 0.644299 L0.429061 0.697003 L0.502224 0.749708 L0.526613 0.837547 L0.477836 0.960526 L0.355897 1.013228 L0.197379 0.99566 L0.112021 0.942957 L0.07544 0.837547","'":"M0.301026 0.270996 L0.301026 0.523022","(":"M0.413087 0.241211 L0.372337 0.28347 L0.331589 0.334184 L0.290838 0.393349 L0.25009 0.460965 L0.219528 0.528584 L0.199153 0.5962 L0.188966 0.655364 L0.199153 0.714529 L0.219528 0.782146 L0.25009 0.849764 L0.290838 0.91738 L0.331589 0.976544 L0.372337 1.027258 L0.413087 1.069491",")":"M0.188966 0.241211 L0.229716 0.28347 L0.270466 0.334184 L0.311213 0.393349 L0.351964 0.460965 L0.382526 0.528584 L0.4029 0.5962 L0.413087 0.655364 L0.4029 0.714529 L0.382526 0.782146 L0.351964 0.849764 L0.311213 0.91738 L0.270466 0.976544 L0.229716 1.027258 L0.188966 1.069491","*":"M0.301026 0.458702 L0.301026 0.681942 M0.301026 0.458702 L0.520997 0.536834 M0.301026 0.458702 L0.439954 0.257813 M0.301026 0.458702 L0.162098 0.257813 M0.301026 0.458702 L0.081055 0.536834","+":"M0.042969 0.66845 L0.559083 0.66845 M0.301023 0.428223 L0.301023 0.908661",",":"M0.38672 0.852051 L0.215333 1.030661 L0.301025 1.119971","-":"M0.173829 0.686035 L0.428224 0.686035",".":"M0.362549 0.851074 L0.239503 0.851074","/":"M0.062501 1.035249 L0.539551 0.270996","<":"M0.559083 0.441895 L0.042969 0.66939 L0.042969 0.66939 L0.559083 0.896902","=":"M0.042969 0.545898 L0.559083 0.545898 M0.042969 0.80837 L0.559083 0.80837",">":"M0.042969 0.441895 L0.559083 0.66939 L0.559083 0.66939 L0.042969 0.896902",A:"M0.018067 0.94897 L0.290179 0.270996 L0.583986 0.94897 M0.155303 0.684521 L0.433548 0.684521",B:"M0.063965 0.94897 L0.063965 0.278953 L0.209356 0.270996 L0.342486 0.294394 L0.432179 0.37292 L0.418224 0.48773 L0.312686 0.549166 L0.084728 0.575531 L0.306377 0.589434 L0.468877 0.647456 L0.538087 0.736658 L0.5324 0.85202 L0.501247 0.902983 L0.42355 0.944398 L0.063965 0.94897",C:"M0.529054 0.419847 L0.498425 0.345196 L0.442238 0.292341 L0.33583 0.257813 L0.257199 0.268357 L0.187906 0.303748 L0.120243 0.385432 L0.072998 0.599844 L0.110073 0.815385 L0.165381 0.902183 L0.222883 0.942801 L0.334904 0.961214 L0.43253 0.937679 L0.504816 0.868999 L0.529054 0.772065",D:"M0.064454 0.94897 L0.071838 0.285078 L0.171217 0.270996 L0.247348 0.272633 L0.37101 0.306078 L0.462461 0.378304 L0.514748 0.475555 L0.535591 0.576392 L0.537599 0.652313 L0.528065 0.717381 L0.508562 0.772419 L0.445948 0.855695 L0.362356 0.90871 L0.225203 0.945862 L0.064454 0.94897",E:"M0.080078 0.270996 L0.080078 0.94897 M0.080078 0.270996 L0.521974 0.270996 M0.080078 0.609981 L0.389405 0.609981 M0.080078 0.94897 L0.521974 0.94897",F:"M0.086426 0.270996 L0.086426 0.94897 M0.091304 0.275607 L0.515626 0.275607 M0.091304 0.607677 L0.447344 0.607677",G:"M0.498034 0.284943 L0.374621 0.257813 L0.244219 0.268648 L0.160577 0.311997 L0.094556 0.398116 L0.056397 0.58404 L0.076752 0.785532 L0.120865 0.858197 L0.188947 0.916734 L0.271008 0.953591 L0.357069 0.961214 L0.43715 0.932047 L0.501262 0.858539 L0.545656 0.648611 L0.329595 0.648131",H:"M0.066895 0.270996 L0.066895 0.94897 M0.066895 0.595658 L0.530009 0.595658 M0.535157 0.270996 L0.535157 0.94897",I:"M0.301026 0.270996 L0.301026 0.94897",J:"M0.506839 0.270996 L0.507814 0.782193 L0.498468 0.846168 L0.480733 0.880789 L0.455864 0.90832 L0.426095 0.929408 L0.360746 0.954812 L0.302508 0.962139 L0.223573 0.953638 L0.16538 0.930312 L0.137072 0.907715 L0.116428 0.880312 L0.102822 0.848819 L0.095633 0.813947 L0.094239 0.776413",K:"M0.035401 0.270996 L0.035401 0.94897 M0.502258 0.316194 L0.035401 0.687823 M0.212484 0.582361 L0.566652 0.933903",L:"M0.07544 0.270996 L0.07544 0.94897 L0.526613 0.94897",M:"M0.042481 0.94897 L0.042481 0.270996 L0.301027 0.712492 L0.559571 0.270996 L0.559571 0.94897",N:"M0.067871 0.94897 L0.067871 0.270996 L0.534181 0.94897 L0.525031 0.270996",O:"M0.287293 0.961214 L0.19843 0.933567 L0.1172 0.849451 L0.057129 0.563945 L0.114348 0.350255 L0.18455 0.289392 L0.306101 0.257813 L0.42054 0.29572 L0.487543 0.365003 L0.544923 0.625294 L0.516366 0.789624 L0.465476 0.884596 L0.375084 0.949287 L0.287293 0.961214",P:"M0.070557 0.94897 L0.070557 0.28379 L0.20704 0.270996 L0.329134 0.278993 L0.408525 0.300514 L0.444022 0.317908 L0.500637 0.368929 L0.525796 0.423728 L0.531496 0.50384 L0.508934 0.554205 L0.473724 0.582043 L0.417577 0.604365 L0.336375 0.620372 L0.226014 0.629268 L0.082368 0.630258",Q:"M0.282435 1.050813 L0.195447 1.019646 L0.115933 0.924817 L0.057129 0.602943 L0.113139 0.362034 L0.18186 0.293418 L0.300844 0.257813 L0.412868 0.300553 L0.478457 0.37866 L0.534625 0.672103 L0.506671 0.857367 L0.456855 0.964437 L0.368371 1.037368 L0.282435 1.050813 M0.341225 0.815559 L0.544923 1.070653",R:"M0.034912 0.944112 L0.034912 0.288556 L0.227127 0.270996 L0.362038 0.276867 L0.443423 0.294907 L0.477644 0.309614 L0.505809 0.328757 L0.526616 0.352817 L0.544963 0.418061 L0.543241 0.475921 L0.524463 0.517817 L0.49076 0.546518 L0.444265 0.564799 L0.355195 0.578739 L0.047653 0.589627 M0.303054 0.617306 L0.56714 0.94897",S:"M0.483037 0.364333 L0.407613 0.267477 L0.22883 0.257813 L0.128623 0.327565 L0.087712 0.455539 L0.104656 0.518727 L0.168054 0.573307 L0.41928 0.617318 L0.503796 0.669342 L0.535157 0.759324 L0.493846 0.900055 L0.367668 0.961214 L0.205436 0.956661 L0.116711 0.907038 L0.066895 0.790334",T:"M0.022949 0.270996 L0.579103 0.270996 M0.309284 0.270996 L0.309284 0.94897",U:"M0.072022 0.270996 L0.07308 0.648875 L0.080372 0.75167 L0.099024 0.827813 L0.134786 0.885729 L0.181571 0.924023 L0.251464 0.95168 L0.339655 0.962139 L0.401553 0.951668 L0.45232 0.924086 L0.482701 0.891771 L0.495745 0.870529 L0.515699 0.81637 L0.525014 0.744626 L0.530031 0.272017",V:"M0.027832 0.270996 L0.320083 0.94897 L0.57422 0.270996",W:"M0 0.270996 L0.079799 0.940377 L0.285198 0.472884 L0.505255 0.94897 L0.602052 0.270996",X:"M0.009034 0.270996 L0.586805 0.94897 M0.593019 0.270996 L0.015246 0.94897",Y:"M0.018067 0.270996 L0.293132 0.574135 M0.583986 0.271959 L0.294954 0.57606 L0.305277 0.94897",Z:"M0.053711 0.270996 L0.548341 0.270996 L0.053711 0.94897 L0.548341 0.94897","[":"M0.404542 0.240234 L0.197511 0.240234 L0.197511 1.069424 L0.404542 1.069424","\\":"M0.062501 0.270996 L0.539551 1.035249","]":"M0.19751 0.240234 L0.404542 0.240234 L0.404542 1.069424 L0.19751 1.069424","^":"M0.035156 0.523931 L0.301024 0.270996 L0.566896 0.523931",_:"M0 1.160601 L0.602052 1.160601",a:"M0.527101 0.439941 L0.527101 0.973965 M0.527101 0.553824 L0.451366 0.477535 L0.376759 0.439941 L0.263722 0.439941 L0.187989 0.477535 L0.112255 0.553824 L0.074951 0.66881 L0.074951 0.745099 L0.112255 0.85898 L0.187989 0.93527 L0.263722 0.973965 L0.376759 0.973965 L0.451366 0.93527 L0.527101 0.85898",b:"M0.07666 0.240234 L0.07666 0.959985 M0.07666 0.582737 L0.151822 0.514237 L0.225865 0.480483 L0.338045 0.480483 L0.413211 0.514237 L0.488374 0.582737 L0.525392 0.685983 L0.525392 0.754485 L0.488374 0.856739 L0.413211 0.92524 L0.338045 0.959985 L0.225865 0.959985 L0.151822 0.92524 L0.07666 0.856739",c:"M0.512452 0.553823 L0.441624 0.477535 L0.371854 0.439941 L0.26614 0.439941 L0.195312 0.477535 L0.124486 0.553823 L0.0896 0.668808 L0.0896 0.745099 L0.124486 0.858979 L0.195312 0.93527 L0.26614 0.973965 L0.371854 0.973965 L0.441624 0.93527 L0.512452 0.858979",d:"M0.525392 0.240234 L0.525392 0.959985 M0.525392 0.582737 L0.450232 0.514237 L0.376189 0.480483 L0.264006 0.480483 L0.188844 0.514237 L0.11368 0.582737 L0.076661 0.685983 L0.076661 0.754485 L0.11368 0.856739 L0.188844 0.92524 L0.264006 0.959985 L0.376189 0.959985 L0.450232 0.92524 L0.525392 0.856739",e:"M0.059571 0.668808 L0.542482 0.668808 M0.542482 0.592521 L0.502641 0.516231 L0.461594 0.477535 L0.381914 0.439941 L0.261186 0.439941 L0.180299 0.477535 L0.099412 0.553823 L0.059571 0.668808 L0.059571 0.745099 L0.099412 0.858979 L0.180299 0.93527 L0.261186 0.973965 L0.381914 0.973965 L0.461594 0.93527 L0.542482 0.858979",f:"M0.512941 0.240234 L0.406984 0.240234 L0.301026 0.274346 L0.248047 0.374731 L0.248047 0.946817 M0.089112 0.476088 L0.459965 0.476088",g:"M0.525392 0.439941 L0.525392 0.989395 L0.488373 1.091918 L0.45023 1.126757 L0.376189 1.160601 L0.264004 1.160601 L0.188844 1.126757 L0.113681 1.058075 L0.076661 0.954555 M0.525392 0.542467 L0.45023 0.473786 L0.376189 0.439941 L0.264004 0.439941 L0.188844 0.473786 L0.113681 0.542467 L0.076661 0.645988 L0.076661 0.714669 L0.113681 0.817193 L0.188844 0.885875 L0.264004 0.920713 L0.376189 0.920713 L0.45023 0.885875 L0.525392 0.817193",h:"M0.092041 0.240234 L0.092041 0.946817 M0.092041 0.61058 L0.205937 0.509225 L0.282214 0.476086 L0.396109 0.476086 L0.47187 0.509225 L0.510011 0.61058 L0.510011 0.946817",i:"M0.261026 0.240234 L0.341026 0.240234 M0.300978 0.476089 L0.300978 0.946817",j:"M0.3853 0.240234 L0.447023 0.240234 M0.416159 0.465708 L0.416159 1.011689 L0.383887 1.108586 L0.252832 1.140264 L0.15503 1.108586",k:"M0.065186 0.240234 L0.065186 0.946817 M0.493824 0.476086 L0.065186 0.812323 M0.236758 0.677829 L0.536867 0.946817",l:"M0.301026 0.234863 L0.301026 0.946441",m:"M0.050538 0.439941 L0.050538 0.960796 M0.050538 0.588758 L0.114405 0.476607 L0.157178 0.439941 L0.236864 0.439941 L0.279637 0.476607 L0.32241 0.588758 L0.32241 0.960796 M0.32241 0.588758 L0.386281 0.476607 L0.428467 0.439941 L0.50874 0.439941 L0.551515 0.476607 L0.551515 0.960796",n:"M0.092041 0.439941 L0.092041 0.960796 M0.092041 0.588758 L0.205936 0.476607 L0.282216 0.439941 L0.396113 0.439941 L0.471871 0.476607 L0.510011 0.588758 L0.510011 0.960796",o:"M0.247175 0.439941 L0.175178 0.477535 L0.103186 0.553823 L0.066895 0.668808 L0.066895 0.745099 L0.103186 0.858979 L0.175178 0.93527 L0.247175 0.973965 L0.354874 0.973965 L0.426872 0.93527 L0.498866 0.858979 L0.535157 0.745099 L0.535157 0.668808 L0.498866 0.553823 L0.426872 0.477535 L0.354874 0.439941 L0.247175 0.439941",p:"M0.076904 0.439941 L0.076904 1.154244 M0.076904 0.541563 L0.151986 0.473487 L0.225944 0.439941 L0.338005 0.439941 L0.413087 0.473487 L0.488166 0.541563 L0.525148 0.644169 L0.525148 0.712246 L0.488166 0.813866 L0.413087 0.881942 L0.338005 0.916471 L0.225944 0.916471 L0.151986 0.881942 L0.076904 0.813866",q:"M0.525148 0.441895 L0.525148 1.156195 M0.525148 0.5435 L0.450067 0.47544 L0.376106 0.441895 L0.264042 0.441895 L0.188966 0.47544 L0.113885 0.5435 L0.076905 0.646108 L0.076905 0.714187 L0.113885 0.815809 L0.188966 0.883886 L0.264042 0.918418 L0.376106 0.918418 L0.450067 0.883886 L0.525148 0.815809",r:"M0.107422 0.439941 L0.107422 0.960796 M0.107422 0.663164 L0.155824 0.551014 L0.252626 0.476607 L0.349428 0.439941 L0.49463 0.439941",s:"M0.475556 0.477535 L0.400757 0.439941 L0.276092 0.439941 L0.176361 0.477535 L0.101563 0.553823 L0.101563 0.630112 L0.176361 0.668808 L0.301024 0.668808 L0.425688 0.745099 L0.50049 0.821387 L0.50049 0.897677 L0.425688 0.93527 L0.325956 0.973965 L0.201295 0.973965 L0.126496 0.93527 L0.101563 0.858979",t:"M0.246032 0.297852 L0.246032 0.826549 L0.301023 0.919323 L0.411011 0.950848 L0.520997 0.950848 M0.081055 0.515799 L0.466004 0.515799",u:"M0.092041 0.454102 L0.092041 0.826134 L0.13018 0.937211 L0.205936 0.974954 L0.319832 0.974954 L0.396113 0.937211 L0.510011 0.826134 M0.510011 0.454102 L0.510011 0.974954",v:"M0.048828 0.453125 L0.301026 0.961719 M0.553224 0.453125 L0.301026 0.961719",w:"M0 0.453125 L0.150512 0.961719 M0.301024 0.453125 L0.150512 0.961719 M0.301024 0.453125 L0.451539 0.961719 M0.602052 0.453125 L0.451539 0.961719",x:"M0.03711 0.453125 L0.564943 0.961719 M0.564943 0.453125 L0.03711 0.961719",y:"M0.084618 0.453125 L0.320232 0.921476 M0.55713 0.453125 L0.320232 0.921476 L0.242119 1.055289 L0.163369 1.122196 L0.084618 1.155166 L0.044922 1.155166",z:"M0.505373 0.452148 L0.09668 0.961651 M0.09668 0.452148 L0.505373 0.452148 M0.09668 0.961651 L0.505373 0.961651"},tEt={};for(let e in eEt){tEt[e]=[];let t=eEt[e].split("M").slice(1).map((n)=>n.split("L").map((o)=>o.trim().split(" ").map(parseFloat)));for(let n of t)for(let o=0;o<n.length-1;o++)tEt[e].push({x1:n[o][0],y1:1-n[o][1],x2:n[o+1][0],y2:1-n[o+1][1]})}(()=>{let e=new Uint8Array(4);new Uint32Array(e.buffer)[0]=1,e[0]})(),globalThis.Int8Array,globalThis.Uint8Array,globalThis.Int16Array,globalThis.Uint16Array,globalThis.Int32Array,globalThis.Uint32Array,globalThis.BigUint64Array,globalThis.BigInt64Array,globalThis.Float32Array,globalThis.Float64Array;var FNo=[];for(let e=0;e<256;e++){let t=e;for(let n=0;n<8;n++)1&t?t=3988292384^t>>>1:t>>>=1;FNo[e]=t}var HNo=new Uint16Array([255]),ONo=(new Uint8Array(HNo.buffer)[0],new Uint16Array([255])),{cos:Uzr,sin:Wzr,PI:Xzr}=(new Uint8Array(ONo.buffer)[0],new Uint8Array(0),Uint8Array.of(137,80,78,71,13,10,26,10),new TextDecoder("latin1"),Math),{tan:Kzr}=Math;((e,t,n)=>{var o=e!=null&&typeof e=="object";if(o){var i=t?TNo??=new WeakMap:DNo??=new WeakMap,r=i.get(e);if(r)return r}n=e!=null?NNo(RNo(e)):{};let s=!t&&e&&e.__esModule&&$vt.call(e,"default")?n:Jvt(n,"default",{value:e,enumerable:!0});if(e&&typeof e=="object"||typeof e=="function")for(let a of QNo(e))$vt.call(s,a)||Jvt(s,a,{get:kNo.bind(e,a),enumerable:!0});o&&i.set(e,s)})(LNo(),1);var okt=(e,t={})=>{let n=((p)=>{let g=uL(p),_=p.filter((f)=>f.type==="pcb_via"&&typeof f.pcb_trace_id=="string").map((f)=>[f.pcb_via_id,f.pcb_trace_id]);return g.addConnections(_),g})(e),o=Math.max(t.viaClearance??0.1,0.1),i=bNo(e,{connMap:n,minClearance:t.traceClearance}).filter((p)=>p.type!=="pcb_keepout_overlap_warning"),r=t.includeTypedTraceClearance!==!1,s=r?nkt(e,{connMap:n,minClearance:t.traceClearance}):[],a=r?tkt(e,{connMap:n,minClearance:t.traceClearance}):[],c=function(p,{minClearance:g}={}){let _=g??eT(gL(p),"min_trace_to_hole_edge_clearance")??aNo;if(!Number.isFinite(_)||_<0)throw Error("Trace-to-hole clearance must be finite and non-negative");let f=ZQt(p);if(f.length===0)return[];let y=new CFe({objects:f,getId:(I)=>I.elementId,getBounds:(I)=>({minX:I.bounds.xmin,minY:I.bounds.ymin,maxX:I.bounds.xmax,maxY:I.bounds.ymax})}),x=new Map,C=new Set;for(let I of p)if(I.type==="pcb_trace")for(let b=1;b<I.route.length;b++){let P=I.route[b-1],E=I.route[b];if(P.route_type!=="wire"&&P.route_type!=="via"||E.route_type!=="wire"&&E.route_type!=="via")continue;if(P.route_type!=="wire"&&E.route_type!=="wire")continue;if(P.route_type==="wire"&&E.route_type==="wire"&&P.layer!==E.layer)continue;let B=Math.max(P.route_type==="wire"?P.width:0,E.route_type==="wire"?E.width:0)/2,w=y.getObjectsInBounds({minX:Math.min(P.x,E.x),minY:Math.min(P.y,E.y),maxX:Math.max(P.x,E.x),maxY:Math.max(P.y,E.y)},_+B);for(let T of w){let Q=T.sourceElement;if(Q.type!=="pcb_hole")continue;let{gap:N,center:F}=ekt({x1:P.x,y1:P.y,x2:E.x,y2:E.y,thickness:2*B},T),H=`${I.pcb_trace_id}_${Q.pcb_hole_id}`;BV(N)?(x.delete(H),C.add(H)):C.has(H)||N+0.000001>=_||(x.get(H)?.gap??1/0)<=N||x.set(H,{gap:N,error:{type:"pcb_trace_error",error_type:"pcb_trace_error",pcb_trace_error_id:`overlap_${H}`,pcb_trace_id:I.pcb_trace_id,source_trace_id:I.source_trace_id??"",pcb_component_ids:Q.pcb_component_id?[Q.pcb_component_id]:[],pcb_port_ids:[],center:F,message:`Trace ${yk(p,I.pcb_trace_id)} is too close to non-plated hole ${fS(p,Q.pcb_hole_id)} (gap: ${N.toFixed(6)}mm, required: ${_}mm)`}})}}return Array.from(x.values(),({error:I})=>I)}(e,{minClearance:t.holeClearance}),l=[...PNo(e,{connMap:n,minClearance:o}),...vNo(e,{connMap:n,minClearance:o})],d=[...i,...wNo(e),...t.includeTraceContinuity===!1?[]:BNo(e),...s,...a,...c,...l],u=e.filter((p)=>p.type==="pcb_via"),h=new Map(u.map((p)=>[p.pcb_via_id,p])),A=d.map((p)=>{if(p.type==="pcb_via_trace_clearance_error"&&typeof p.pcb_via_id=="string"){let g=h.get(p.pcb_via_id);if(g)return{...p,center:{x:g.x,y:g.y}}}if("center"in p&&p.center)return p;if("pcb_center"in p&&p.pcb_center)return{...p,center:p.pcb_center};if("pcb_via_ids"in p&&Array.isArray(p.pcb_via_ids)){let[g,_]=p.pcb_via_ids,f=h.get(g),y=h.get(_);if(f&&y)return{...p,center:{x:(f.x+y.x)/2,y:(f.y+y.y)/2}}}if("pcb_error_id"in p&&typeof p.pcb_error_id=="string"&&(p.pcb_error_id.startsWith("same_net_vias_close_")||p.pcb_error_id.startsWith("different_net_vias_close_"))){let g=p.pcb_error_id.replace("same_net_vias_close_","").replace("different_net_vias_close_","").split("_").filter(Boolean);if(g.length===2){let _=h.get(g[0]),f=h.get(g[1]);if(_&&f)return{...p,center:{x:(_.x+f.x)/2,y:(_.y+f.y)/2}}}}return p}),m=A.filter((p)=>Boolean(p.center));return{errors:d,errorsWithCenters:A,locationAwareErrors:m}},s1=(e,t)=>e===0?"top":e===t-1?"bottom":`inner${e}`,ikt=(e,t)=>{if(e.layers!==void 0)return e.layers;if(!Number.isInteger(t)||t<1)throw Error(`Invalid board layer count: ${t}`);let n=Array.from({length:t},(r,s)=>s1(s,t)),o=n.findIndex((r)=>r===e.from_layer),i=n.findIndex((r)=>r===e.to_layer);if(o<0||i<0)throw Error(`Via span ${e.from_layer} -> ${e.to_layer} is outside the board`);return n.slice(Math.min(o,i),Math.max(o,i)+1)},fQe=(e,t,n=!1)=>{let o=n?e:{from_layer:"top",to_layer:s1(t-1,t)};return ikt(o,t)},FZ=0.005,qDe=0.000001,x_e=(e,t)=>({minX:e.minX-t,minY:e.minY-t,maxX:e.maxX+t,maxY:e.maxY+t}),nEt=(e)=>x_e({minX:Math.min(e.start.x,e.end.x),minY:Math.min(e.start.y,e.end.y),maxX:Math.max(e.start.x,e.end.x),maxY:Math.max(e.start.y,e.end.y)},e.width/2),hAe=(e)=>{let t=e.diameter/2;return{minX:e.x-t,minY:e.y-t,maxX:e.x+t,maxY:e.y+t}},zNo=(e)=>Lke(QBt(e.localToWorld,[{x:-e.width/2,y:-e.height/2},{x:e.width/2,y:-e.height/2},{x:e.width/2,y:e.height/2},{x:-e.width/2,y:e.height/2}])),oEt=(e)=>({minX:-e.width/2,minY:-e.height/2,maxX:e.width/2,maxY:e.height/2}),JDe=class{constructor(e){this.cellSize=e}cellSize;cells=new Map;itemIds=new Map;rowItems=[];visitedGenerations=new Uint32Array(0);queryGeneration=0;registerItem(e){let t=this.itemIds.get(e);if(t!==void 0)return t;let n=this.rowItems.length;if(n>=this.visitedGenerations.length){let o=new Uint32Array(this.visitedGenerations.length===0?16:2*this.visitedGenerations.length);o.set(this.visitedGenerations),this.visitedGenerations=o}return this.itemIds.set(e,n),this.rowItems.push(e===0?0:e),n}insert(e,t){let n=Math.floor(t.minX/this.cellSize),o=Math.floor(t.maxX/this.cellSize),i=Math.floor(t.minY/this.cellSize),r=Math.floor(t.maxY/this.cellSize),s;for(let a=n;a<=o;a+=1){let c=this.cells.get(a);!c&&i<=r&&(c=new Map,this.cells.set(a,c));for(let l=i;l<=r;l+=1){let d=c.get(l);s===void 0&&(s=this.registerItem(e)),d?d.push(s):c.set(l,[s])}}}query(e){let t=Math.floor(e.minX/this.cellSize),n=Math.floor(e.maxX/this.cellSize),o=Math.floor(e.minY/this.cellSize),i=Math.floor(e.maxY/this.cellSize),r=this.queryGeneration+1;r>4294967295&&(this.visitedGenerations.fill(0),r=1),this.queryGeneration=r;let s=[];for(let a=t;a<=n;a+=1){let c=this.cells.get(a);if(!(!c&&o>=-9007199254740991&&i<=9007199254740991))for(let l=o;l<=i;l+=1){let d=c?.get(l);if(d)for(let u of d)this.visitedGenerations[u]!==r&&(this.visitedGenerations[u]=r,s.push(this.rowItems[u]))}}return s}},GNo=(e,t)=>{let n=T6(e.start,e.end,t.start,t.end);if(n)return n;let o=[{left:e.start,right:im(e.start,t.start,t.end)},{left:e.end,right:im(e.end,t.start,t.end)},{left:im(t.start,e.start,e.end),right:t.start},{left:im(t.end,e.start,e.end),right:t.end}],i={left:e.start,right:t.start},r=Number.POSITIVE_INFINITY;for(let s of o){let a=Math.hypot(s.left.x-s.right.x,s.left.y-s.right.y);a<r&&(i=s,r=a)}return{x:(i.left.x+i.right.x)/2,y:(i.left.y+i.right.y)/2}},iEt=(e,t)=>{let n=im(t,e.start,e.end);return{x:(n.x+t.x)/2,y:(n.y+t.y)/2}},YNo=(e,t)=>{let n=im({x:(t.minX+t.maxX)/2,y:(t.minY+t.maxY)/2},e.start,e.end),o=Math.max(t.minX,Math.min(t.maxX,n.x)),i=Math.max(t.minY,Math.min(t.maxY,n.y));return{x:(n.x+o)/2,y:(n.y+i)/2}},VNo=(e)=>{let t=new Set;for(let n of e.route)n.route_type==="wire"&&(n.start_pcb_port_id&&t.add(n.start_pcb_port_id),n.end_pcb_port_id&&t.add(n.end_pcb_port_id));return[...t]},$De=(e,t,n)=>n<0?`PCB trace ${e} overlaps with ${t} (accidental contact)`:`PCB trace ${e} is too close to ${t} (gap: ${n.toFixed(3)}mm)`,Wte=class{constructor(e,t={}){this.srj=e;let n=t.queryResultCacheBudget??8000000;if(!Number.isSafeInteger(n)||n<0)throw Error("queryResultCacheBudget must be a nonnegative safe integer");if(this.primitiveKeyBudget=Math.floor(n/4),this.queryResultBudget=n-this.primitiveKeyBudget,this.traceClearance=t.traceClearance??0.1,this.viaClearance=Math.max(t.viaClearance??0.1,0.1),this.viaToPadClearance=t.viaToPadClearance??this.srj.minViaEdgeToPadEdgeClearance??0.1,this.connMap=t.connMap,this.includeTraceViaOwnerMetadata=t.includeTraceViaOwnerMetadata??!1,this.cellSize=t.spatialCellSize??this.getDefaultSpatialCellSize(),!Number.isFinite(this.traceClearance)||this.traceClearance<0)throw Error("traceClearance must be a non-negative finite number");if(!Number.isFinite(this.viaClearance))throw Error("viaClearance must be a finite number");if(!Number.isFinite(this.viaToPadClearance)||this.viaToPadClearance<0)throw Error("viaToPadClearance must be a non-negative finite number");if(!Number.isFinite(this.cellSize)||this.cellSize<=0)throw Error("spatialCellSize must be a positive finite number");this.compileConnectionAliases(),this.obstacles=this.compileStaticObstacles(),this.obstacles.forEach((o,i)=>this.staticObstacleIds.set(o,i)),this.indexStaticObstacles()}srj;traceClearance;viaClearance;viaToPadClearance;cellSize;connMap;includeTraceViaOwnerMetadata;canonicalNetByAlias=new Map;connMapNetByCanonicalNet=new Map;obstacles;queryResultBudget;primitiveKeyBudget;primitiveIdsByKey=new Map;primitiveKeyUnits=0;nextPrimitiveId=0;staticObstacleIds=new WeakMap;queryResultCache=new Map;queryResultUnits=0;cachedConnectivityKey;obstacleIndexesByLayer=new Map;lastRunStats={traceCount:0,segmentCount:0,viaCount:0,obstacleCount:0,broadPhaseCandidateCount:0,exactCheckCount:0};getDefaultSpatialCellSize(){let e=Math.max(0,this.srj.bounds.maxX-this.srj.bounds.minX),t=Math.max(0,this.srj.bounds.maxY-this.srj.bounds.minY);return Math.max(0.25,Math.max(e,t)/64,(this.srj.minViaDiameter??0.3)+Math.max(this.traceClearance,this.viaToPadClearance))}compileConnectionAliases(){let e=new Map;for(let t of this.srj.connections){let n=t.netConnectionName??t.rootConnectionName??t.name,o=[t.name,t.rootConnectionName,t.netConnectionName,...t.mergedConnectionNames??[],...t.pointsToConnect.flatMap((i)=>[i.pointId,i.pcb_port_id])];for(let i of o){if(!i)continue;this.canonicalNetByAlias.set(i,n);let r=this.connMap?.getNetConnectedToId(i);if(!r)continue;let s=e.get(n);s||(s=new Set,e.set(n,s)),s.add(r)}this.canonicalNetByAlias.set(n,n)}for(let[t,n]of e)n.size===1&&this.connMapNetByCanonicalNet.set(t,n.values().next().value)}resolveNetId(e){let t=this.connMap?.getNetConnectedToId(e);if(t)return t;let n=this.canonicalNetByAlias.get(e);return n?this.connMapNetByCanonicalNet.get(n)??n:e}areConnected(e,t){return e===t||(!!this.connMap?.areIdsConnected(e,t)||this.resolveNetId(e)===this.resolveNetId(t))}compileStaticObstacles(){let e=[],t=new Set,n=new Set;for(let o of this.srj.obstacles){if(o.layers.length===0)continue;let i=o.connectedTo.find((m)=>m.startsWith("pcb_smtpad_")),r=o.connectedTo.find((m)=>m.startsWith("pcb_plated_hole_")),s=o.connectedTo.find((m)=>m.startsWith("pcb_port_"));if(!i&&!r&&!s)continue;let a=o.layers.length>1,c=a?"pcb_plated_hole":"pcb_smtpad",l=a?r??`pcb_plated_hole_${o.center.x.toFixed(3)}_${o.center.y.toFixed(3)}`:i??`pcb_smtpad_${o.center.x.toFixed(3)}_${o.center.y.toFixed(3)}`,d=a?n:t;if(d.has(l))continue;d.add(l);let u=typeof o.ccwRotationDegrees=="number"&&Number.isFinite(o.ccwRotationDegrees),h=Qke(Yk(o.center.x,o.center.y),FBt(u?o.ccwRotationDegrees:0)),A=!u&&a&&Math.abs(o.width-o.height)<0.001;e.push({kind:"obstacle",obstacleType:c,obstacleId:l,connectedTo:o.connectedTo,x:o.center.x,y:o.center.y,width:o.width,height:o.height,localToWorld:h,worldToLocal:kBt(h),...A?{radius:Math.max(o.width,o.height)/2}:{},layers:o.layers,...s?{pcbPortId:s}:{}})}return e}indexStaticObstacles(){for(let e of this.obstacles){let t=x_e(zNo(e),Math.max(this.traceClearance,this.viaToPadClearance));for(let n of e.layers){let o=this.obstacleIndexesByLayer.get(n);o||(o=new JDe(this.cellSize),this.obstacleIndexesByLayer.set(n,o)),o.insert(e,t)}}}collectDynamicGeometry(e){let t=[],n=[],o=new Set;for(let i of e){let r=this.resolveNetId(i.connection_name),s=VNo(i),a=this.queryResultBudget?JSON.stringify([i.pcb_trace_id,r,s]):void 0;for(let c=0;c<i.route.length-1;c+=1){let l=i.route[c],d=i.route[c+1];l?.route_type==="wire"&&d?.route_type==="wire"&&l.layer===d.layer&&(Math.abs(l.x-d.x)<=qDe&&Math.abs(l.y-d.y)<=qDe||t.push({kind:"trace_segment",order:t.length,traceId:i.pcb_trace_id,netId:r,start:{x:l.x,y:l.y},end:{x:d.x,y:d.y},width:rEt(l,d),layer:l.layer,pcbPortIds:s,primitiveId:a===void 0?void 0:this.getPrimitiveId(["trace",a,l.x,l.y,d.x,d.y,rEt(l,d),l.layer])}))}for(let c of i.route){if(c.route_type!=="via")continue;let l=`${c.x},${c.y},${c.from_layer},${c.to_layer}`;if(o.has(l))continue;o.add(l);let d=`via_${n.length}`,u=c.via_diameter??this.srj.minViaDiameter??0.3,h=fQe(c,this.srj.layerCount,this.srj.allowBlindAndBuriedVias);n.push({kind:"via",order:n.length,viaId:d,traceId:i.pcb_trace_id,netId:r,x:c.x,y:c.y,diameter:u,layers:h,primitiveId:this.queryResultBudget?this.getPrimitiveId(["via",d,i.pcb_trace_id,r,c.x,c.y,u,h]):void 0})}}return{segments:t,vias:n}}buildDynamicIndexes(e,t){let n=new Map,o=(i,r,s)=>{let a=n.get(i);a||(a=new JDe(this.cellSize),n.set(i,a)),a.insert(r,x_e(s,this.traceClearance))};for(let i of e)o(i.layer,i,nEt(i));for(let i of t)for(let r of i.layers)o(r,i,hAe(i));return n}obstacleSharesNet(e,t){return t.connectedTo.some((n)=>this.areConnected(e,n))}getPrimitiveId(e){if(!this.primitiveKeyBudget)return;let t=JSON.stringify(e.map((r)=>typeof r!="number"?r:Object.is(r,-0)?"-0":Number.isNaN(r)?"NaN":r===1/0?"+Infinity":r===-1/0?"-Infinity":r)),n=this.primitiveIdsByKey.get(t);if(n)return n.id;let o=t.length+64;if(o>this.primitiveKeyBudget||this.nextPrimitiveId>=Number.MAX_SAFE_INTEGER)return;for(;this.primitiveKeyUnits+o>this.primitiveKeyBudget;){let r=this.primitiveIdsByKey.keys().next().value;this.primitiveKeyUnits-=this.primitiveIdsByKey.get(r).units,this.primitiveIdsByKey.delete(r)}let i=this.nextPrimitiveId++;return this.primitiveIdsByKey.set(t,{id:i,units:o}),this.primitiveKeyUnits+=o,i}getQueryCacheKey(e,t){if(this.queryResultBudget&&!t.some((n)=>n===void 0))return`${e}:${t.join(",")}`}runCachedQuery(e,t){let n=e===void 0?void 0:this.queryResultCache.get(e);if(n)return this.lastRunStats.exactCheckCount+=n.exactCheckCount,this.lastRunStats.broadPhaseCandidateCount+=n.broadPhaseCandidateCount,n.errors.length?structuredClone(n.errors):[];let o=this.lastRunStats.exactCheckCount,i=this.lastRunStats.broadPhaseCandidateCount,r=t();if(e===void 0)return r;let s=e.length+(r.length?JSON.stringify(r).length:0)+64*r.length+64;if(s>this.queryResultBudget)return r;for(;this.queryResultUnits+s>this.queryResultBudget;){let a=this.queryResultCache.keys().next().value;this.queryResultUnits-=this.queryResultCache.get(a).units,this.queryResultCache.delete(a)}return this.queryResultCache.set(e,{errors:r.length?structuredClone(r):[],exactCheckCount:this.lastRunStats.exactCheckCount-o,broadPhaseCandidateCount:this.lastRunStats.broadPhaseCandidateCount-i,units:s}),this.queryResultUnits+=s,r}checkTraceQuery(e,t,n){let o;if(this.lastRunStats.broadPhaseCandidateCount+=t.length+n.length,this.queryResultBudget){let i=[e.primitiveId];for(let r of t)r.kind==="trace_segment"&&r.order<=e.order||i.push(r.primitiveId);i.push(-1);for(let r of n)i.push(this.staticObstacleIds.get(r));o=this.getQueryCacheKey("trace",i)}return this.runCachedQuery(o,()=>{let i=[];for(let r of t){if(r.kind==="trace_segment"&&r.order<=e.order)continue;let s=r.kind==="trace_segment"?this.checkTracePair(e,r):this.checkTraceVia(e,r);s&&i.push(s)}for(let r of n){let s=this.checkTraceObstacle(e,r);s&&i.push(s)}return i})}checkTracePair(e,t){if(this.areConnected(e.netId,t.netId))return;this.lastRunStats.exactCheckCount+=1;let n=Um(e.start,e.end,t.start,t.end)-e.width/2-t.width/2;if(n>this.traceClearance-FZ)return;let o=`overlap_${e.traceId}_${t.traceId}`;return{type:"pcb_trace_error",error_type:"pcb_trace_error",message:$De(e.traceId,`PCB trace ${t.traceId}`,n),pcb_trace_id:e.traceId,source_trace_id:"",pcb_trace_error_id:o,minimum_clearance:this.traceClearance,actual_clearance:n,pcb_component_ids:[],pcb_port_ids:[...new Set([...e.pcbPortIds,...t.pcbPortIds])],center:GNo(e,t)}}checkTraceVia(e,t){if(this.areConnected(e.netId,t.netId))return;this.lastRunStats.exactCheckCount+=1;let n=q8(e.start,e.end,{x:t.x,y:t.y,radius:t.diameter/2})-e.width/2;if(n>this.traceClearance-FZ)return;let o=`overlap_${e.traceId}_${t.viaId}`;return{type:"pcb_trace_error",error_type:"pcb_trace_error",message:$De(e.traceId,`pcb_via "${t.viaId}"`,n),pcb_trace_id:e.traceId,...this.includeTraceViaOwnerMetadata?{pcb_trace_ids:[e.traceId,t.traceId],pcb_via_id:t.viaId,pcb_via_ids:[t.viaId]}:{},source_trace_id:"",pcb_trace_error_id:o,minimum_clearance:this.traceClearance,actual_clearance:n,pcb_component_ids:[],pcb_port_ids:e.pcbPortIds,center:iEt(e,t)}}checkTraceObstacle(e,t){if(this.obstacleSharesNet(e.netId,t))return;this.lastRunStats.exactCheckCount+=1;let n=oEt(t),o={...e,start:C6(t.worldToLocal,e.start),end:C6(t.worldToLocal,e.end)},i=(t.radius===void 0?dL(o.start,o.end,n):q8(e.start,e.end,{x:t.x,y:t.y,radius:t.radius}))-e.width/2;if(i+FZ>=this.traceClearance)return;let r=`overlap_${e.traceId}_${t.obstacleId}`;return{type:"pcb_trace_error",error_type:"pcb_trace_error",message:$De(e.traceId,`${t.obstacleType} "${t.obstacleId}"`,i),pcb_trace_id:e.traceId,source_trace_id:"",pcb_trace_error_id:r,minimum_clearance:this.traceClearance,actual_clearance:i,pcb_component_ids:[],pcb_port_ids:[...new Set([...e.pcbPortIds,...t.pcbPortId?[t.pcbPortId]:[]])],center:t.radius===void 0?C6(t.localToWorld,YNo(o,n)):iEt(e,t)}}checkViaObstacle(e,t){if(this.obstacleSharesNet(e.netId,t))return;this.lastRunStats.exactCheckCount+=1;let n=oEt(t),o=C6(t.worldToLocal,e),i=(t.radius===void 0?Math.hypot(Math.max(n.minX-o.x,0,o.x-n.maxX),Math.max(n.minY-o.y,0,o.y-n.maxY)):Math.hypot(e.x-t.x,e.y-t.y)-t.radius)-e.diameter/2;if(i+FZ>=this.viaToPadClearance)return;let r=`via_pad_clearance_${e.viaId}_${t.obstacleId}`,s={x:(e.x+t.x)/2,y:(e.y+t.y)/2};return{type:"pcb_pad_pad_clearance_error",error_type:"pcb_pad_pad_clearance_error",pcb_pad_pad_clearance_error_id:r,message:`pcb_via "${e.viaId}" and ${t.obstacleType} "${t.obstacleId}" are too close (gap: ${i.toFixed(3)}mm)`,pcb_trace_id:e.traceId,pcb_pad_ids:[e.viaId,t.obstacleId],pcb_via_ids:[e.viaId],minimum_clearance:this.viaToPadClearance,actual_clearance:i,center:s}}checkViaPairs(e){let t=this.queryResultBudget?this.getQueryCacheKey("via-pairs",e.map((n)=>n.primitiveId)):void 0;return this.runCachedQuery(t,()=>this.computeViaPairs(e))}computeViaPairs(e){if(e.length<2)return[];let t=[],n=new JDe(this.cellSize);for(let o of e)n.insert(o,x_e(hAe(o),this.viaClearance));for(let o of e)for(let i of n.query(hAe(o))){if(this.lastRunStats.broadPhaseCandidateCount+=1,i.order<=o.order)continue;this.lastRunStats.exactCheckCount+=1;let r=Math.hypot(o.x-i.x,o.y-i.y);if(r<=qDe)continue;let s=r-o.diameter/2-i.diameter/2;if(s+FZ>=this.viaClearance)continue;let a=this.areConnected(o.netId,i.netId),c=[o.viaId,i.viaId].sort().join("_"),l={x:(o.x+i.x)/2,y:(o.y+i.y)/2};t.push({type:"pcb_via_clearance_error",error_type:"pcb_via_clearance_error",pcb_error_id:`${a?"same_net":"different_net"}_vias_close_${c}`,message:`Vias ${o.viaId} and ${i.viaId}${a?"":" from different nets"} are too close together (gap: ${s.toFixed(3)}mm)`,pcb_via_ids:[o.viaId,i.viaId],...this.includeTraceViaOwnerMetadata?{pcb_trace_ids:[o.traceId,i.traceId]}:{},pcb_via_pair_net_relation:a?"same_net":"different_net",minimum_clearance:this.viaClearance,actual_clearance:s,pcb_center:l,center:l})}return t}checkViaPadQuery(e){let t=this.getQueryCacheKey("via-pad",[e.primitiveId]);return this.runCachedQuery(t,()=>{let n=[],o=new Set;for(let i of e.layers){let r=this.obstacleIndexesByLayer.get(i)?.query(hAe(e))??[];for(let s of r){if(o.has(s))continue;o.add(s),this.lastRunStats.broadPhaseCandidateCount+=1;let a=this.checkViaObstacle(e,s);a&&n.push(a)}}return n})}evaluate(e){return this.evaluateInternal(e,!0)}evaluateLegacy(e){return this.evaluateInternal(e,!1)}evaluateInternal(e,t){if(this.queryResultBudget){let u=JSON.stringify([this.connMap?.idToNetMap,this.obstacles.map((h)=>h.connectedTo)]);u!==this.cachedConnectivityKey&&(this.queryResultCache.clear(),this.queryResultUnits=0,this.cachedConnectivityKey=u)}let{segments:n,vias:o}=this.collectDynamicGeometry(e),i=this.buildDynamicIndexes(n,o),r=[],s=[];this.lastRunStats={traceCount:e.length,segmentCount:n.length,viaCount:o.length,obstacleCount:this.obstacles.length,broadPhaseCandidateCount:0,exactCheckCount:0};for(let u of n){let h=nEt(u),A=i.get(u.layer)?.query(h)??[],m=this.obstacleIndexesByLayer.get(u.layer)?.query(h)??[];r.push(...this.checkTraceQuery(u,A,m))}let a=this.checkViaPairs(o);if(t)for(let u of o)s.push(...this.checkViaPadQuery(u));let c=new Map;for(let u of r){let h=String(u.pcb_trace_error_id),A=c.get(h),m=Number(u.actual_clearance);if(!A){c.set(h,{...u,first_contact_center:u.center,first_contact_message:u.message,first_actual_clearance:m,worst_contact_center:u.center,worst_contact_message:u.message,worst_actual_clearance:m});continue}let p=Number(A.worst_actual_clearance);(m<p||!Number.isFinite(p))&&(A.worst_contact_center=u.center,A.worst_contact_message=u.message,A.worst_actual_clearance=m)}let l=[...c.values()].map((u)=>({...u,center:typeof u.worst_contact_center=="object"?u.worst_contact_center:u.center,message:typeof u.worst_contact_message=="string"?u.worst_contact_message:u.message,actual_clearance:typeof u.worst_actual_clearance=="number"?u.worst_actual_clearance:u.actual_clearance}));l.push(...s),l.push(...a);let d=l.filter((u)=>u.center);return{errors:l,errorsWithCenters:d,locationAwareErrors:d}}},rEt=(e,t)=>e.width??t.width??0.1,UNo=[1,1.75,-1],WNo=[1,1.75,-1],XNo=2.6666666666666665,bi=0.000001,ca=0.001,Y8=0.14,dV=0.035,zg=0.015,IFe=(e)=>e.minTraceToPadEdgeClearance??0.16,ffe=(e)=>e.minViaEdgeToPadEdgeClearance??0.1,sEt=(e)=>Math.max(48,Math.round(48*Math.max(1,e))),KNo=(e)=>e>=2?UNo:WNo,jNo=class{netMap;idToNetMap;constructor(e){this.netMap=e,this.idToNetMap={};for(let[t,n]of Object.entries(e))for(let o of n)this.idToNetMap[o]=t}addConnections(e){for(let t of e){let n=new Set;for(let i of t){let r=this.idToNetMap[i];r&&n.add(r)}let o;if(n.size===0)o=`connectivity_net${Object.keys(this.netMap).length}`,this.netMap[o]=[];else if(n.size===1)o=n.values().next().value??`connectivity_net${Object.keys(this.netMap).length}`;else{o=n.values().next().value??`connectivity_net${Object.keys(this.netMap).length}`;for(let i of n)if(i!==o){this.netMap[o].push(...this.netMap[i]),this.netMap[i]=this.netMap[o];for(let r of this.netMap[o])this.idToNetMap[r]=o}}for(let i of t)this.netMap[o].includes(i)||this.netMap[o].push(i),this.idToNetMap[i]=o}}getIdsConnectedToNet(e){return this.netMap[e]||[]}getNetConnectedToId(e){return this.idToNetMap[e]}areIdsConnected(e,t){if(e===t)return!0;let n=this.getNetConnectedToId(e);if(!n)return!1;let o=this.getNetConnectedToId(t);return!!o&&(n===o||o===e||o===e)}areAllIdsConnected(e){let t=this.getNetConnectedToId(e[0]);for(let n of e){let o=this.getNetConnectedToId(n);if(o===void 0)return!1;if(o!==t)return!1}return!0}},bFe=(e)=>{let t=[];for(let o of e)if(o.type==="source_trace")t.push([o.source_trace_id,...o.connected_source_port_ids??[],...o.connected_source_net_ids??[]].filter(Boolean));else if(o.type==="pcb_port"){let{pcb_port_id:i,source_port_id:r}=o;r&&i&&t.push([r,i])}else if(o.type==="pcb_smtpad"){let{pcb_smtpad_id:i,pcb_port_id:r}=o;r&&i&&t.push([i,r])}else if(o.type==="pcb_plated_hole"){let{pcb_plated_hole_id:i,pcb_port_id:r}=o;r&&i&&t.push([i,r])}else if(o.type==="pcb_trace"){let{pcb_trace_id:i,source_trace_id:r}=o,s=Array.isArray(o.route)?o.route.filter((a)=>a&&a.route_type==="wire"):[];if(r&&i&&t.push([i,r]),Array.isArray(s)){let a=s.find((l)=>l?.start_pcb_port_id)?.start_pcb_port_id,c=s.find((l)=>l?.end_pcb_port_id)?.end_pcb_port_id;a&&i&&c&&t.push([a,i,c])}}else if(o.type==="pcb_via"){let{pcb_via_id:i,pcb_trace_id:r}=o;r&&i&&t.push([i,r])}else if(o.type==="source_component"&&o.internally_connected_source_port_ids)for(let i of o.internally_connected_source_port_ids)t.push(i);let n=function(o){let i=new Map,r=0;function s(a){for(let[,l]of i)if(l.has(a))return l;let c=new Set;return i.set("connectivity_net"+r++,c),c}for(let a of o){let c=null;for(let l of a){if(c){if(!c.has(l)){let d=s(l);if(d!==c){for(let u of d)c.add(u);i.delete(Array.from(i.entries()).find(([,u])=>u===d)[0])}}}else c=s(l);c.add(l)}}return Object.fromEntries(Array.from(i.entries()).map(([a,c])=>[a,Array.from(c)]))}(t);return new jNo(n)},ige={};Vge(ige,{all_layers:()=>Dee,any_circuit_element:()=>_Ht,any_soup_element:()=>rge,any_source_component:()=>Nkt,asset:()=>lkt,base_circuit_json_error:()=>vl,battery_capacity:()=>ckt,brep_shape:()=>bLt,cadModelDefaultDirectionMap:()=>ERo,cad_component:()=>nHt,cad_model_axis_directions:()=>tHt,cad_model_formats:()=>vRo,capacitance:()=>SFe,circuit_json_footprint_load_error:()=>wFt,current:()=>oU,distance:()=>Fn,duration_ms:()=>Xte,experiment_type:()=>lHt,external_footprint_load_error:()=>BFt,frequency:()=>fL,getZodPrefixedIdWithDefault:()=>io,inductance:()=>skt,kicadAt:()=>xfe,kicadEffects:()=>dkt,kicadFont:()=>vFe,kicadFootprintAttributes:()=>hkt,kicadFootprintMetadata:()=>Akt,kicadFootprintModel:()=>pkt,kicadFootprintPad:()=>mkt,kicadFootprintProperties:()=>ukt,kicadProperty:()=>pee,kicadSymbolEffects:()=>fkt,kicadSymbolMetadata:()=>xkt,kicadSymbolPinNames:()=>gkt,kicadSymbolPinNumbers:()=>_kt,kicadSymbolProperties:()=>ykt,kicadSymbolProperty:()=>v8,layer_ref:()=>Va,layer_string:()=>xQe,length:()=>Zo,manufacturing_drc_properties:()=>vLt,ms:()=>tL,ninePointAnchor:()=>U6,pcbRenderLayer:()=>ZNo,pcb_autorouting_error:()=>DFt,pcb_board:()=>$Lt,pcb_breakout_point:()=>kFt,pcb_component:()=>ELt,pcb_component_invalid_layer_error:()=>WFt,pcb_component_not_on_board_edge_error:()=>UFt,pcb_component_outside_board_error:()=>VFt,pcb_connector_not_in_accessible_orientation_warning:()=>RFt,pcb_copper_pour:()=>YFt,pcb_copper_pour_brep:()=>zFt,pcb_copper_pour_polygon:()=>GFt,pcb_copper_pour_rect:()=>OFt,pcb_copper_text:()=>sFt,pcb_courtyard_circle:()=>eHt,pcb_courtyard_outline:()=>$Ft,pcb_courtyard_overlap_error:()=>CFt,pcb_courtyard_polygon:()=>ZFt,pcb_courtyard_rect:()=>JFt,pcb_cutout:()=>EFt,pcb_cutout_circle:()=>SFt,pcb_cutout_path:()=>vFt,pcb_cutout_polygon:()=>PFt,pcb_cutout_rect:()=>bFt,pcb_fabrication_note_dimension:()=>pFt,pcb_fabrication_note_path:()=>hFt,pcb_fabrication_note_rect:()=>mFt,pcb_fabrication_note_text:()=>uFt,pcb_footprint_overlap_error:()=>xFt,pcb_ground_plane:()=>LFt,pcb_ground_plane_region:()=>FFt,pcb_group:()=>TFt,pcb_hole:()=>RLt,pcb_hole_circle_or_square_shape:()=>sRo,pcb_hole_circle_shape:()=>iRo,pcb_hole_oval_shape:()=>aRo,pcb_hole_pill_shape:()=>cRo,pcb_hole_rect_shape:()=>rRo,pcb_hole_rotated_pill_shape:()=>lRo,pcb_keepout:()=>IFt,pcb_manual_edit_conflict_warning:()=>NFt,pcb_missing_footprint_error:()=>MFt,pcb_net:()=>qLt,pcb_note_dimension:()=>yFt,pcb_note_line:()=>fFt,pcb_note_path:()=>gFt,pcb_note_rect:()=>_Ft,pcb_note_text:()=>AFt,pcb_pad_pad_clearance_error:()=>jFt,pcb_pad_trace_clearance_error:()=>qFt,pcb_panel:()=>ZLt,pcb_panelization_placement_error:()=>tFt,pcb_placement_error:()=>eFt,pcb_plated_hole:()=>QLt,pcb_port:()=>kLt,pcb_port_not_connected_error:()=>jLt,pcb_port_not_matched_error:()=>KLt,pcb_route_hint:()=>SLt,pcb_route_hints:()=>oRo,pcb_silkscreen_circle:()=>cFt,pcb_silkscreen_line:()=>oFt,pcb_silkscreen_oval:()=>lFt,pcb_silkscreen_path:()=>iFt,pcb_silkscreen_pill:()=>dFt,pcb_silkscreen_rect:()=>aFt,pcb_silkscreen_text:()=>rFt,pcb_smtpad:()=>FLt,pcb_smtpad_pill:()=>LLt,pcb_solder_paste:()=>HLt,pcb_text:()=>OLt,pcb_thermal_spoke:()=>HFt,pcb_trace:()=>VLt,pcb_trace_error:()=>WLt,pcb_trace_hint:()=>nFt,pcb_trace_missing_error:()=>XLt,pcb_trace_route_point:()=>YLt,pcb_trace_route_point_via:()=>GLt,pcb_trace_route_point_wire:()=>zLt,pcb_trace_warning:()=>ULt,pcb_via:()=>JLt,pcb_via_clearance_error:()=>XFt,pcb_via_trace_clearance_error:()=>KFt,point:()=>Fi,point3:()=>b6,point_with_bulge:()=>ILt,port_arrangement:()=>Zkt,position:()=>JNo,position3:()=>$No,resistance:()=>yfe,ring:()=>CQe,rotation:()=>sm,route_hint_point:()=>PLt,schematic_arc:()=>rLt,schematic_box:()=>Kkt,schematic_circle:()=>iLt,schematic_component:()=>eLt,schematic_component_port_arrangement_by_sides:()=>$kt,schematic_component_port_arrangement_by_size:()=>Jkt,schematic_debug_line:()=>mLt,schematic_debug_object:()=>ALt,schematic_debug_object_base:()=>Ife,schematic_debug_point:()=>pLt,schematic_debug_rect:()=>hLt,schematic_error:()=>dLt,schematic_group:()=>fLt,schematic_layout_error:()=>uLt,schematic_line:()=>nLt,schematic_manual_edit_conflict_warning:()=>gLt,schematic_net_label:()=>lLt,schematic_path:()=>jkt,schematic_pin_styles:()=>qkt,schematic_port:()=>cLt,schematic_rect:()=>oLt,schematic_sheet:()=>CLt,schematic_symbol:()=>tLt,schematic_table:()=>yLt,schematic_table_cell:()=>xLt,schematic_text:()=>aLt,schematic_trace:()=>sLt,schematic_voltage_probe:()=>_Lt,simulation_ac_current_source:()=>aHt,simulation_ac_voltage_source:()=>iHt,simulation_current_source:()=>cHt,simulation_dc_current_source:()=>sHt,simulation_dc_voltage_source:()=>oHt,simulation_experiment:()=>dHt,simulation_op_amp:()=>AHt,simulation_switch:()=>hHt,simulation_transient_voltage_graph:()=>uHt,simulation_unknown_experiment_error:()=>pHt,simulation_voltage_probe:()=>mHt,simulation_voltage_source:()=>rHt,size:()=>PFe,source_ambiguous_port_reference:()=>Okt,source_board:()=>Hkt,source_component_base:()=>Ud,source_component_internal_connection:()=>Qkt,source_component_pins_underspecified_warning:()=>Ukt,source_failed_to_create_component_error:()=>Mkt,source_group:()=>Lkt,source_i2c_misconfigured_error:()=>qFe,source_interconnect:()=>Tkt,source_invalid_component_property_error:()=>WFe,source_manually_placed_via:()=>Gkt,source_missing_manufacturer_part_number_warning:()=>jFe,source_missing_property_error:()=>Ekt,source_net:()=>Fkt,source_no_ground_pin_defined_warning:()=>Vkt,source_no_power_pin_defined_warning:()=>Ykt,source_pcb_ground_plane:()=>zkt,source_pin_attributes:()=>Skt,source_pin_missing_trace_warning:()=>KFe,source_pin_must_be_connected_error:()=>Wkt,source_port:()=>Rkt,source_project_metadata:()=>UFe,source_property_ignored_warning:()=>Bkt,source_simple_battery:()=>NFe,source_simple_capacitor:()=>MFe,source_simple_chip:()=>TFe,source_simple_connector:()=>vkt,source_simple_crystal:()=>Pkt,source_simple_current_source:()=>bkt,source_simple_diode:()=>Cfe,source_simple_fiducial:()=>Ckt,source_simple_ground:()=>Ikt,source_simple_inductor:()=>RFe,source_simple_led:()=>wFe,source_simple_mosfet:()=>GFe,source_simple_op_amp:()=>YFe,source_simple_pin_header:()=>LFe,source_simple_pinout:()=>FFe,source_simple_potentiometer:()=>kFe,source_simple_power_source:()=>DFe,source_simple_push_button:()=>QFe,source_simple_resistor:()=>BFe,source_simple_resonator:()=>HFe,source_simple_switch:()=>VFe,source_simple_test_point:()=>zFe,source_simple_transistor:()=>OFe,source_simple_voltage_probe:()=>wkt,source_simple_voltage_source:()=>Dkt,source_trace:()=>kkt,source_trace_not_connected_error:()=>XFe,supplier_footprint_mismatch_warning:()=>QFt,supplier_name:()=>EFe,time:()=>qNo,timestamp:()=>akt,unknown_error_finding_part:()=>Xkt,visible_layer:()=>H_,voltage:()=>k6,wave_shape:()=>$Fe});var rkt={Hz:{baseUnit:"Hz",variants:{MHz:1e6,kHz:1000,Hz:1}},g:{baseUnit:"g",variants:{kg:1000,g:1}},"Ω":{baseUnit:"Ω",variants:{"mΩ":0.001,"Ω":1,"kΩ":1000,"KΩ":1000,kohm:1000,"MΩ":1e6,"GΩ":1e9,"TΩ":1000000000000}},V:{baseUnit:"V",variants:{mV:0.001,V:1,kV:1000,KV:1000,MV:1e6,GV:1e9,TV:1000000000000}},A:{baseUnit:"A",variants:{"µA":0.000001,mA:0.001,ma:0.001,A:1,kA:1000,MA:1e6}},F:{baseUnit:"F",variants:{pF:0.000000000001,nF:0.000000001,"µF":0.000001,uF:0.000001,mF:0.001,F:1}},ml:{baseUnit:"ml",variants:{ml:1,mL:1,l:1000,L:1000}},deg:{baseUnit:"deg",variants:{rad:180/Math.PI}},ms:{baseUnit:"ms",variants:{fs:0.000000000001,ps:0.000000001,ns:0.000001,us:0.001,"µs":0.001,ms:1,s:1000}},mm:{baseUnit:"mm",variants:{nm:0.000001,"µm":0.001,um:0.001,mm:1,cm:10,dm:100,m:1000,km:1e6,in:25.4,ft:304.8,IN:25.4,FT:304.8,yd:914.4,mi:1609344,mil:0.0254}}},yQe=new Set;for(let[e,t]of Object.entries(rkt)){yQe.add(e);for(let n of Object.keys(t.variants))yQe.add(n)}var aEt={tera:1000000000000,T:1000000000000,giga:1e9,G:1e9,mega:1e6,M:1e6,kilo:1000,k:1000,deci:0.1,d:0.1,centi:0.01,c:0.01,milli:0.001,m:0.001,micro:0.000001,u:0.000001,"µ":0.000001,nano:0.000000001,n:0.000000001,pico:0.000000000001,p:0.000000000001};function _S(e){if(e==null)return{parsedUnit:null,unitOfValue:null,value:null};if(typeof e=="string"&&e.match(/^-?[\d\.]+$/))return{value:Number.parseFloat(e),parsedUnit:null,unitOfValue:null};if(typeof e=="number")return{value:e,parsedUnit:null,unitOfValue:null};if(typeof e=="object"&&"x"in e&&"y"in e){let{parsedUnit:a,unitOfValue:c}=_S(e.x),l=_S(e.x),d=_S(e.y);return l.value===null||d.value===null?{parsedUnit:null,unitOfValue:null,value:null}:{parsedUnit:a,unitOfValue:c,value:{x:l.value,y:d.value}}}let t=e.toString().split("").reverse().join(""),n=t.match(/[^\d\s]+/)?.[0];if(!n)throw Error(`Could not determine unit: "${e}"`);let o=n.split("").reverse().join(""),i=e.slice(0,-o.length);if(o in aEt&&!yQe.has(o)){let a=aEt[o];return{parsedUnit:null,unitOfValue:null,value:Number.parseFloat(i)*a}}let{baseUnit:r,conversionFactor:s}=function(a){for(let[c,l]of Object.entries(rkt))if(a in l.variants)return{baseUnit:l.baseUnit,conversionFactor:l.variants[a]};return{baseUnit:a,conversionFactor:1}}(o);return{parsedUnit:o,unitOfValue:r,value:s*Number.parseFloat(i)}}var yfe=v.string().or(v.number()).transform((e)=>_S(e).value),SFe=v.string().or(v.number()).transform((e)=>_S(e).value).transform((e)=>Number.parseFloat(e.toPrecision(12))),skt=v.string().or(v.number()).transform((e)=>_S(e).value),k6=v.string().or(v.number()).transform((e)=>_S(e).value),Zo=v.string().or(v.number()).transform((e)=>_S(e).value),fL=v.string().or(v.number()).transform((e)=>_S(e).value),Fn=Zo,oU=v.string().or(v.number()).transform((e)=>_S(e).value),Xte=v.string().or(v.number()).transform((e)=>_S(e).value),qNo=Xte,tL=Xte,akt=v.string().datetime(),sm=v.string().or(v.number()).transform((e)=>typeof e=="number"?e:e.endsWith("deg")?Number.parseFloat(e.split("deg")[0]):e.endsWith("rad")?180*Number.parseFloat(e.split("rad")[0])/Math.PI:Number.parseFloat(e)),ckt=v.number().or(v.string().endsWith("mAh")).transform((e)=>{if(typeof e=="string"){let t=e.replace("mAh",""),n=Number.parseFloat(t);if(Number.isNaN(n))throw Error("Invalid capacity");return n}return e}).describe("Battery capacity in mAh"),Fi=v.object({x:Fn,y:Fn}),JNo=Fi,b6=v.object({x:Fn,y:Fn,z:Fn}),$No=b6,PFe=v.object({width:v.number(),height:v.number()}),io=(e)=>v.string().optional().default(()=>`${e}_${((t)=>Array.from({length:t},()=>"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"[Math.floor(62*Math.random())]).join(""))(10)}`),U6=v.enum(["top_left","top_center","top_right","center_left","center","center_right","bottom_left","bottom_center","bottom_right"]),ZNo=v.enum(["top_silkscreen","bottom_silkscreen","top_copper","bottom_copper","top_soldermask","bottom_soldermask","top_fabrication_note","bottom_fabrication_note","top_user_note","bottom_user_note","top_courtyard","bottom_courtyard","inner1_copper","inner2_copper","inner3_copper","inner4_copper","inner5_copper","inner6_copper","edge_cuts","drill"]),lkt=v.object({project_relative_path:v.string(),url:v.string(),mimetype:v.string()}),xfe=Fi.extend({rotation:sm.optional()}),vFe=v.object({size:Fi.optional(),thickness:Fn.optional()}),dkt=v.object({font:vFe.optional()}),pee=v.object({value:v.string(),at:xfe.optional(),layer:v.string().optional(),uuid:v.string().optional(),hide:v.boolean().optional(),effects:dkt.optional()}),ukt=v.object({Reference:pee.optional(),Value:pee.optional(),Datasheet:pee.optional(),Description:pee.optional()}),hkt=v.object({through_hole:v.boolean().optional(),smd:v.boolean().optional(),exclude_from_pos_files:v.boolean().optional(),exclude_from_bom:v.boolean().optional()}),mkt=v.object({name:v.string(),type:v.string(),shape:v.string().optional(),at:xfe.optional(),size:Fi.optional(),drill:Fn.optional(),layers:v.array(v.string()).optional(),removeUnusedLayers:v.boolean().optional(),uuid:v.string().optional()}),pkt=v.object({path:v.string(),offset:b6.optional(),scale:b6.optional(),rotate:b6.optional()}),Akt=v.object({footprintName:v.string().optional(),version:v.union([v.number(),v.string()]).optional(),generator:v.string().optional(),generatorVersion:v.union([v.number(),v.string()]).optional(),layer:v.string().optional(),properties:ukt.optional(),attributes:hkt.optional(),pads:v.array(mkt).optional(),embeddedFonts:v.boolean().optional(),model:pkt.optional()}),_kt=v.object({hide:v.boolean().optional()}),gkt=v.object({offset:Fn.optional(),hide:v.boolean().optional()}),fkt=v.object({font:vFe.optional(),justify:v.union([v.string(),v.array(v.string())]).optional(),hide:v.boolean().optional()}),v8=v.object({value:v.string(),id:v.union([v.number(),v.string()]).optional(),at:xfe.optional(),effects:fkt.optional()}),ykt=v.object({Reference:v8.optional(),Value:v8.optional(),Footprint:v8.optional(),Datasheet:v8.optional(),Description:v8.optional(),ki_keywords:v8.optional(),ki_fp_filters:v8.optional()}),xkt=v.object({symbolName:v.string().optional(),extends:v.string().optional(),pinNumbers:_kt.optional(),pinNames:gkt.optional(),excludeFromSim:v.boolean().optional(),inBom:v.boolean().optional(),onBoard:v.boolean().optional(),properties:ykt.optional(),embeddedFonts:v.boolean().optional()}),vl=v.object({error_type:v.string(),message:v.string(),is_fatal:v.boolean().optional()}),EFe=v.enum(["jlcpcb","macrofab","pcbway","digikey","mouser","lcsc"]),Ud=v.object({type:v.literal("source_component"),ftype:v.string().optional(),source_component_id:v.string(),name:v.string(),manufacturer_part_number:v.string().optional(),supplier_part_numbers:v.record(EFe,v.array(v.string())).optional(),display_value:v.string().optional(),display_name:v.string().optional(),are_pins_interchangeable:v.boolean().optional(),internally_connected_source_port_ids:v.array(v.array(v.string())).optional(),source_group_id:v.string().optional(),subcircuit_id:v.string().optional()}),MFe=Ud.extend({ftype:v.literal("simple_capacitor"),capacitance:SFe,max_voltage_rating:k6.optional(),display_capacitance:v.string().optional(),max_decoupling_trace_length:Fn.optional()}),BFe=Ud.extend({ftype:v.literal("simple_resistor"),resistance:yfe,display_resistance:v.string().optional()}),Cfe=Ud.extend({ftype:v.literal("simple_diode")}),Ckt=Ud.extend({ftype:v.literal("simple_fiducial")}),wFe=Cfe.extend({ftype:v.literal("simple_led"),color:v.string().optional(),wavelength:v.string().optional()}),Ikt=Ud.extend({ftype:v.literal("simple_ground")}),TFe=Ud.extend({ftype:v.literal("simple_chip")}),DFe=Ud.extend({ftype:v.literal("simple_power_source"),voltage:k6}),bkt=Ud.extend({ftype:v.literal("simple_current_source"),current:oU,frequency:fL.optional(),peak_to_peak_current:oU.optional(),wave_shape:v.enum(["sine","square","triangle","sawtooth","dc"]).optional().default("dc"),phase:v.number().optional(),duty_cycle:v.number().min(0).max(1).optional()}),Skt=v.object({must_be_connected:v.boolean().optional(),provides_power:v.boolean().optional(),requires_power:v.boolean().optional(),provides_ground:v.boolean().optional(),requires_ground:v.boolean().optional(),provides_voltage:v.union([v.string(),v.number()]).optional(),requires_voltage:v.union([v.string(),v.number()]).optional(),do_not_connect:v.boolean().optional(),include_in_board_pinout:v.boolean().optional(),can_use_internal_pullup:v.boolean().optional(),is_using_internal_pullup:v.boolean().optional(),needs_external_pullup:v.boolean().optional(),can_use_internal_pulldown:v.boolean().optional(),is_using_internal_pulldown:v.boolean().optional(),needs_external_pulldown:v.boolean().optional(),can_use_open_drain:v.boolean().optional(),is_using_open_drain:v.boolean().optional(),can_use_push_pull:v.boolean().optional(),is_using_push_pull:v.boolean().optional(),should_have_decoupling_capacitor:v.boolean().optional(),recommended_decoupling_capacitor_capacitance:v.union([v.string(),v.number()]).optional(),is_configured_for_i2c_sda:v.boolean().optional(),is_configured_for_i2c_scl:v.boolean().optional(),is_configured_for_spi_mosi:v.boolean().optional(),is_configured_for_spi_miso:v.boolean().optional(),is_configured_for_spi_sck:v.boolean().optional(),is_configured_for_spi_cs:v.boolean().optional(),is_configured_for_uart_tx:v.boolean().optional(),is_configured_for_uart_rx:v.boolean().optional(),supports_i2c_sda:v.boolean().optional(),supports_i2c_scl:v.boolean().optional(),supports_spi_mosi:v.boolean().optional(),supports_spi_miso:v.boolean().optional(),supports_spi_sck:v.boolean().optional(),supports_spi_cs:v.boolean().optional(),supports_uart_tx:v.boolean().optional(),supports_uart_rx:v.boolean().optional()}),eRo=Ud.extend({ftype:v.literal("simple_fuse"),current_rating_amps:v.number().describe("Nominal current in amps the fuse is rated for"),voltage_rating_volts:v.number().describe("Voltage rating in volts, e.g. ±5V would be 5")}),NFe=Ud.extend({ftype:v.literal("simple_battery"),capacity:ckt}),RFe=Ud.extend({ftype:v.literal("simple_inductor"),inductance:skt,display_inductance:v.string().optional(),max_current_rating:v.number().optional()}),QFe=Ud.extend({ftype:v.literal("simple_push_button")}),kFe=Ud.extend({ftype:v.literal("simple_potentiometer"),max_resistance:yfe,display_max_resistance:v.string().optional()}),Pkt=Ud.extend({ftype:v.literal("simple_crystal"),frequency:v.number().describe("Frequency in Hz"),load_capacitance:v.number().optional().describe("Load capacitance in pF"),pin_variant:v.enum(["two_pin","four_pin"]).optional()}),LFe=Ud.extend({ftype:v.literal("simple_pin_header"),pin_count:v.number(),gender:v.enum(["male","female"]).optional().default("male")}),vkt=Ud.extend({ftype:v.literal("simple_connector"),standard:v.enum(["usb_c","m2"]).optional()}),FFe=Ud.extend({ftype:v.literal("simple_pinout")}),HFe=Ud.extend({ftype:v.literal("simple_resonator"),load_capacitance:SFe,equivalent_series_resistance:yfe.optional(),frequency:fL}),OFe=Ud.extend({ftype:v.literal("simple_transistor"),transistor_type:v.enum(["npn","pnp"])}),zFe=Ud.extend({ftype:v.literal("simple_test_point"),footprint_variant:v.enum(["pad","through_hole"]).optional(),pad_shape:v.enum(["rect","circle"]).optional(),pad_diameter:v.union([v.number(),v.string()]).optional(),hole_diameter:v.union([v.number(),v.string()]).optional(),width:v.union([v.number(),v.string()]).optional(),height:v.union([v.number(),v.string()]).optional()}),GFe=Ud.extend({ftype:v.literal("simple_mosfet"),channel_type:v.enum(["n","p"]),mosfet_mode:v.enum(["enhancement","depletion"])}),YFe=Ud.extend({ftype:v.literal("simple_op_amp")}),VFe=Ud.extend({ftype:v.literal("simple_switch")}),UFe=v.object({type:v.literal("source_project_metadata"),name:v.string().optional(),software_used_string:v.string().optional(),project_url:v.string().optional(),created_at:akt.optional()}),Ekt=vl.extend({type:v.literal("source_missing_property_error"),source_missing_property_error_id:io("source_missing_property_error"),source_component_id:v.string(),property_name:v.string(),subcircuit_id:v.string().optional(),error_type:v.literal("source_missing_property_error").default("source_missing_property_error")}).describe("The source code is missing a property"),Mkt=vl.extend({type:v.literal("source_failed_to_create_component_error"),source_failed_to_create_component_error_id:io("source_failed_to_create_component_error"),error_type:v.literal("source_failed_to_create_component_error").default("source_failed_to_create_component_error"),component_name:v.string().optional(),subcircuit_id:v.string().optional(),parent_source_component_id:v.string().optional(),pcb_center:v.object({x:v.number().optional(),y:v.number().optional()}).optional(),schematic_center:v.object({x:v.number().optional(),y:v.number().optional()}).optional()}).describe("Error emitted when a component fails to be constructed"),WFe=vl.extend({type:v.literal("source_invalid_component_property_error"),source_invalid_component_property_error_id:io("source_invalid_component_property_error"),source_component_id:v.string(),property_name:v.string(),property_value:v.unknown().optional(),expected_format:v.string().optional(),subcircuit_id:v.string().optional(),error_type:v.literal("source_invalid_component_property_error").default("source_invalid_component_property_error")}).describe("The source component property is invalid"),XFe=vl.extend({type:v.literal("source_trace_not_connected_error"),source_trace_not_connected_error_id:io("source_trace_not_connected_error"),error_type:v.literal("source_trace_not_connected_error").default("source_trace_not_connected_error"),subcircuit_id:v.string().optional(),source_group_id:v.string().optional(),source_trace_id:v.string().optional(),connected_source_port_ids:v.array(v.string()).optional(),selectors_not_found:v.array(v.string()).optional()}).describe("Occurs when a source trace selector does not match any ports"),Bkt=v.object({type:v.literal("source_property_ignored_warning"),source_property_ignored_warning_id:io("source_property_ignored_warning"),source_component_id:v.string(),property_name:v.string(),subcircuit_id:v.string().optional(),error_type:v.literal("source_property_ignored_warning").default("source_property_ignored_warning"),message:v.string()}).describe("The source property was ignored"),KFe=v.object({type:v.literal("source_pin_missing_trace_warning"),source_pin_missing_trace_warning_id:io("source_pin_missing_trace_warning"),warning_type:v.literal("source_pin_missing_trace_warning").default("source_pin_missing_trace_warning"),message:v.string(),source_component_id:v.string(),source_port_id:v.string(),subcircuit_id:v.string().optional()}).describe("Warning emitted when a source component pin is missing a trace connection"),jFe=v.object({type:v.literal("source_missing_manufacturer_part_number_warning"),source_missing_manufacturer_part_number_warning_id:io("source_missing_manufacturer_part_number_warning"),warning_type:v.literal("source_missing_manufacturer_part_number_warning").default("source_missing_manufacturer_part_number_warning"),message:v.string(),source_component_id:v.string(),standard:v.string(),subcircuit_id:v.string().optional()}).describe("Warning emitted when a standard connector is missing manufacturer part number"),wkt=Ud.extend({ftype:v.literal("simple_voltage_probe")}),Tkt=Ud.extend({ftype:v.literal("interconnect")}),qFe=vl.extend({type:v.literal("source_i2c_misconfigured_error"),source_i2c_misconfigured_error_id:io("source_i2c_misconfigured_error"),error_type:v.literal("source_i2c_misconfigured_error").default("source_i2c_misconfigured_error"),source_port_ids:v.array(v.string())}).describe("Error emitted when incompatible I2C pins (e.g. SDA and SCL) are connected to the same net"),Dkt=Ud.extend({ftype:v.literal("simple_voltage_source"),voltage:k6,frequency:fL.optional(),peak_to_peak_voltage:k6.optional(),wave_shape:v.enum(["sinewave","square","triangle","sawtooth"]).optional(),phase:sm.optional(),duty_cycle:v.number().optional().describe("Duty cycle as a fraction (0 to 1)")}),Nkt=v.union([BFe,MFe,Cfe,Ckt,wFe,Ikt,TFe,DFe,bkt,NFe,RFe,QFe,kFe,Pkt,LFe,vkt,FFe,HFe,VFe,OFe,zFe,GFe,YFe,eRo,wkt,Tkt,Dkt,UFe,Ekt,WFe,Mkt,XFe,Bkt,KFe,jFe,qFe]),Rkt=v.object({type:v.literal("source_port"),pin_number:v.number().optional(),port_hints:v.array(v.string()).optional(),name:v.string(),source_port_id:v.string(),source_component_id:v.string().optional(),source_group_id:v.string().optional(),most_frequently_referenced_by_name:v.string().optional(),subcircuit_id:v.string().optional(),subcircuit_connectivity_map_key:v.string().optional()}).merge(Skt),Qkt=v.object({type:v.literal("source_component_internal_connection"),source_component_internal_connection_id:v.string(),source_component_id:v.string(),source_port_ids:v.array(v.string()),subcircuit_id:v.string().optional()}),kkt=v.object({type:v.literal("source_trace"),source_trace_id:v.string(),connected_source_port_ids:v.array(v.string()),connected_source_net_ids:v.array(v.string()),subcircuit_id:v.string().optional(),subcircuit_connectivity_map_key:v.string().optional(),max_length:v.number().optional(),min_trace_thickness:v.number().optional(),display_name:v.string().optional()}),Lkt=v.object({type:v.literal("source_group"),source_group_id:v.string(),subcircuit_id:v.string().optional(),parent_subcircuit_id:v.string().optional(),parent_source_group_id:v.string().optional(),is_subcircuit:v.boolean().optional(),show_as_schematic_box:v.boolean().optional(),name:v.string().optional(),was_automatically_named:v.boolean().optional()}),Fkt=v.object({type:v.literal("source_net"),source_net_id:v.string(),name:v.string(),member_source_group_ids:v.array(v.string()),is_power:v.boolean().optional(),is_ground:v.boolean().optional(),is_digital_signal:v.boolean().optional(),is_analog_signal:v.boolean().optional(),is_positive_voltage_source:v.boolean().optional(),trace_width:v.number().optional(),subcircuit_id:v.string().optional(),subcircuit_connectivity_map_key:v.string().optional()}),Hkt=v.object({type:v.literal("source_board"),source_board_id:v.string(),source_group_id:v.string(),title:v.string().optional()}).describe("Defines a board in the source domain"),Okt=vl.extend({type:v.literal("source_ambiguous_port_reference"),source_ambiguous_port_reference_id:io("source_ambiguous_port_reference"),error_type:v.literal("source_ambiguous_port_reference").default("source_ambiguous_port_reference"),source_port_id:v.string().optional(),source_component_id:v.string().optional()}).describe("Error emitted when a port hint matches multiple non-overlapping pads, making the port reference ambiguous"),zkt=v.object({type:v.literal("source_pcb_ground_plane"),source_pcb_ground_plane_id:v.string(),source_group_id:v.string(),source_net_id:v.string(),subcircuit_id:v.string().optional()}).describe("Defines a ground plane in the source domain"),Dee=["top","bottom","inner1","inner2","inner3","inner4","inner5","inner6"],xQe=v.enum(Dee),Va=xQe.or(v.object({name:xQe})).transform((e)=>typeof e=="string"?e:e.name),H_=v.enum(["top","bottom"]),Gkt=v.object({type:v.literal("source_manually_placed_via"),source_manually_placed_via_id:v.string(),source_group_id:v.string(),source_net_id:v.string(),subcircuit_id:v.string().optional(),source_trace_id:v.string().optional()}).describe("Defines a via that is manually placed in the source domain"),Ykt=v.object({type:v.literal("source_no_power_pin_defined_warning"),source_no_power_pin_defined_warning_id:io("source_no_power_pin_defined_warning"),warning_type:v.literal("source_no_power_pin_defined_warning").default("source_no_power_pin_defined_warning"),message:v.string(),source_component_id:v.string(),source_port_ids:v.array(v.string()),subcircuit_id:v.string().optional()}).describe("Warning emitted when a chip has no source ports with requires_power=true"),Vkt=v.object({type:v.literal("source_no_ground_pin_defined_warning"),source_no_ground_pin_defined_warning_id:io("source_no_ground_pin_defined_warning"),warning_type:v.literal("source_no_ground_pin_defined_warning").default("source_no_ground_pin_defined_warning"),message:v.string(),source_component_id:v.string(),source_port_ids:v.array(v.string()),subcircuit_id:v.string().optional()}).describe("Warning emitted when a chip has no source ports marked as ground pins"),Ukt=v.object({type:v.literal("source_component_pins_underspecified_warning"),source_component_pins_underspecified_warning_id:io("source_component_pins_underspecified_warning"),warning_type:v.literal("source_component_pins_underspecified_warning").default("source_component_pins_underspecified_warning"),message:v.string(),source_component_id:v.string(),source_port_ids:v.array(v.string()),subcircuit_id:v.string().optional()}).describe("Warning emitted when all ports on a source component are underspecified"),Wkt=vl.extend({type:v.literal("source_pin_must_be_connected_error"),source_pin_must_be_connected_error_id:io("source_pin_must_be_connected_error"),error_type:v.literal("source_pin_must_be_connected_error").default("source_pin_must_be_connected_error"),source_component_id:v.string(),source_port_id:v.string(),subcircuit_id:v.string().optional()}).describe("Error emitted when a pin with mustBeConnected attribute is not connected to any trace"),Xkt=vl.extend({type:v.literal("unknown_error_finding_part"),unknown_error_finding_part_id:io("unknown_error_finding_part"),error_type:v.literal("unknown_error_finding_part").default("unknown_error_finding_part"),source_component_id:v.string().optional(),subcircuit_id:v.string().optional()}).describe("Error emitted when an unexpected error occurs while finding a part"),Kkt=v.object({type:v.literal("schematic_box"),schematic_component_id:v.string().optional(),schematic_symbol_id:v.string().optional(),width:Fn,height:Fn,is_dashed:v.boolean().default(!1),x:Fn,y:Fn,subcircuit_id:v.string().optional()}).describe("Draws a box on the schematic"),jkt=v.object({type:v.literal("schematic_path"),schematic_path_id:io("schematic_path"),schematic_component_id:v.string().optional(),schematic_symbol_id:v.string().optional(),fill_color:v.string().optional(),is_filled:v.boolean().optional(),stroke_width:Fn.nullable().optional(),stroke_color:v.string().optional(),points:v.array(Fi),subcircuit_id:v.string().optional()}),qkt=v.record(v.object({left_margin:Zo.optional(),right_margin:Zo.optional(),top_margin:Zo.optional(),bottom_margin:Zo.optional()})),Jkt=v.object({left_size:v.number(),right_size:v.number(),top_size:v.number().optional(),bottom_size:v.number().optional()}),$kt=v.object({left_side:v.object({pins:v.array(v.number()),direction:v.enum(["top-to-bottom","bottom-to-top"]).optional()}).optional(),right_side:v.object({pins:v.array(v.number()),direction:v.enum(["top-to-bottom","bottom-to-top"]).optional()}).optional(),top_side:v.object({pins:v.array(v.number()),direction:v.enum(["left-to-right","right-to-left"]).optional()}).optional(),bottom_side:v.object({pins:v.array(v.number()),direction:v.enum(["left-to-right","right-to-left"]).optional()}).optional()}),Zkt=v.union([Jkt,$kt]),eLt=v.object({type:v.literal("schematic_component"),size:PFe,center:Fi,source_component_id:v.string().optional(),schematic_component_id:v.string(),schematic_symbol_id:v.string().optional(),pin_spacing:Zo.optional(),pin_styles:qkt.optional(),box_width:Zo.optional(),symbol_name:v.string().optional(),port_arrangement:Zkt.optional(),port_labels:v.record(v.string()).optional(),symbol_display_value:v.string().optional(),subcircuit_id:v.string().optional(),schematic_group_id:v.string().optional(),is_schematic_group:v.boolean().optional(),source_group_id:v.string().optional(),is_box_with_pins:v.boolean().optional().default(!0)}),tRo=v.object({kicad_symbol:xkt.optional()}).catchall(v.unknown()),tLt=v.object({type:v.literal("schematic_symbol"),schematic_symbol_id:v.string(),name:v.string().optional(),metadata:tRo.optional()}).describe("Defines a named schematic symbol that can be referenced by components."),nLt=v.object({type:v.literal("schematic_line"),schematic_line_id:io("schematic_line"),schematic_component_id:v.string().optional(),schematic_symbol_id:v.string().optional(),x1:Fn,y1:Fn,x2:Fn,y2:Fn,stroke_width:Fn.nullable().optional(),color:v.string().default("#000000"),is_dashed:v.boolean().default(!1),subcircuit_id:v.string().optional()}).describe("Draws a styled line on the schematic"),oLt=v.object({type:v.literal("schematic_rect"),schematic_rect_id:io("schematic_rect"),schematic_component_id:v.string().optional(),schematic_symbol_id:v.string().optional(),center:Fi,width:Fn,height:Fn,rotation:sm.default(0),stroke_width:Fn.nullable().optional(),color:v.string().default("#000000"),is_filled:v.boolean().default(!1),fill_color:v.string().optional(),is_dashed:v.boolean().default(!1),subcircuit_id:v.string().optional()}).describe("Draws a styled rectangle on the schematic"),iLt=v.object({type:v.literal("schematic_circle"),schematic_circle_id:io("schematic_circle"),schematic_component_id:v.string().optional(),schematic_symbol_id:v.string().optional(),center:Fi,radius:Fn,stroke_width:Fn.nullable().optional(),color:v.string().default("#000000"),is_filled:v.boolean().default(!1),fill_color:v.string().optional(),is_dashed:v.boolean().default(!1),subcircuit_id:v.string().optional()}).describe("Draws a styled circle on the schematic"),rLt=v.object({type:v.literal("schematic_arc"),schematic_arc_id:io("schematic_arc"),schematic_component_id:v.string().optional(),schematic_symbol_id:v.string().optional(),center:Fi,radius:Fn,start_angle_degrees:sm,end_angle_degrees:sm,direction:v.enum(["clockwise","counterclockwise"]).default("counterclockwise"),stroke_width:Fn.nullable().optional(),color:v.string().default("#000000"),is_dashed:v.boolean().default(!1),subcircuit_id:v.string().optional()}).describe("Draws a styled arc on the schematic"),sLt=v.object({type:v.literal("schematic_trace"),schematic_trace_id:v.string(),source_trace_id:v.string().optional(),junctions:v.array(v.object({x:v.number(),y:v.number()})),edges:v.array(v.object({from:v.object({x:v.number(),y:v.number()}),to:v.object({x:v.number(),y:v.number()}),is_crossing:v.boolean().optional(),from_schematic_port_id:v.string().optional(),to_schematic_port_id:v.string().optional()})),subcircuit_id:v.string().optional(),subcircuit_connectivity_map_key:v.string().optional()}),nRo=v.enum(["center","left","right","top","bottom"]),aLt=v.object({type:v.literal("schematic_text"),schematic_component_id:v.string().optional(),schematic_symbol_id:v.string().optional(),schematic_text_id:v.string(),text:v.string(),font_size:v.number().default(0.18),position:v.object({x:Fn,y:Fn}),rotation:v.number().default(0),anchor:v.union([nRo.describe("legacy"),U6]).default("center"),color:v.string().default("#000000"),subcircuit_id:v.string().optional()}),cLt=v.object({type:v.literal("schematic_port"),schematic_port_id:v.string(),source_port_id:v.string(),schematic_component_id:v.string().optional(),center:Fi,facing_direction:v.enum(["up","down","left","right"]).optional(),distance_from_component_edge:v.number().optional(),side_of_component:v.enum(["top","bottom","left","right"]).optional(),true_ccw_index:v.number().optional(),pin_number:v.number().optional(),display_pin_label:v.string().optional(),subcircuit_id:v.string().optional(),is_connected:v.boolean().optional(),has_input_arrow:v.boolean().optional(),has_output_arrow:v.boolean().optional(),is_drawn_with_inversion_circle:v.boolean().optional()}).describe("Defines a port on a schematic component"),lLt=v.object({type:v.literal("schematic_net_label"),schematic_net_label_id:io("schematic_net_label"),schematic_trace_id:v.string().optional(),source_trace_id:v.string().optional(),source_net_id:v.string(),center:Fi,anchor_position:Fi.optional(),anchor_side:v.enum(["top","bottom","left","right"]),text:v.string(),symbol_name:v.string().optional(),is_movable:v.boolean().optional(),subcircuit_id:v.string().optional()}),dLt=vl.extend({type:v.literal("schematic_error"),schematic_error_id:v.string(),error_type:v.literal("schematic_port_not_found").default("schematic_port_not_found"),subcircuit_id:v.string().optional()}).describe("Defines a schematic error on the schematic"),uLt=vl.extend({type:v.literal("schematic_layout_error"),schematic_layout_error_id:io("schematic_layout_error"),error_type:v.literal("schematic_layout_error").default("schematic_layout_error"),source_group_id:v.string(),schematic_group_id:v.string(),subcircuit_id:v.string().optional()}).describe("Error emitted when schematic layout fails for a group"),Ife=v.object({type:v.literal("schematic_debug_object"),label:v.string().optional(),subcircuit_id:v.string().optional()}),hLt=Ife.extend({shape:v.literal("rect"),center:Fi,size:PFe}),mLt=Ife.extend({shape:v.literal("line"),start:Fi,end:Fi}),pLt=Ife.extend({shape:v.literal("point"),center:Fi}),ALt=v.discriminatedUnion("shape",[hLt,mLt,pLt]),_Lt=v.object({type:v.literal("schematic_voltage_probe"),schematic_voltage_probe_id:v.string(),source_component_id:v.string().optional(),name:v.string().optional(),position:Fi,schematic_trace_id:v.string(),voltage:k6.optional(),subcircuit_id:v.string().optional(),color:v.string().optional(),label_alignment:U6.optional()}).describe("Defines a voltage probe measurement point on a schematic trace"),gLt=v.object({type:v.literal("schematic_manual_edit_conflict_warning"),schematic_manual_edit_conflict_warning_id:io("schematic_manual_edit_conflict_warning"),warning_type:v.literal("schematic_manual_edit_conflict_warning").default("schematic_manual_edit_conflict_warning"),message:v.string(),schematic_component_id:v.string(),schematic_group_id:v.string().optional(),subcircuit_id:v.string().optional(),source_component_id:v.string()}).describe("Warning emitted when a component has both manual placement and explicit schX/schY coordinates"),fLt=v.object({type:v.literal("schematic_group"),schematic_group_id:io("schematic_group"),source_group_id:v.string(),is_subcircuit:v.boolean().optional(),subcircuit_id:v.string().optional(),width:Zo,height:Zo,center:Fi,schematic_component_ids:v.array(v.string()),show_as_schematic_box:v.boolean().optional(),name:v.string().optional(),description:v.string().optional()}).describe("Defines a group of components on the schematic"),yLt=v.object({type:v.literal("schematic_table"),schematic_table_id:io("schematic_table"),anchor_position:Fi,column_widths:v.array(Fn),row_heights:v.array(Fn),cell_padding:Fn.optional(),border_width:Fn.optional(),subcircuit_id:v.string().optional(),schematic_component_id:v.string().optional(),anchor:U6.optional()}).describe("Defines a table on the schematic"),xLt=v.object({type:v.literal("schematic_table_cell"),schematic_table_cell_id:io("schematic_table_cell"),schematic_table_id:v.string(),start_row_index:v.number(),end_row_index:v.number(),start_column_index:v.number(),end_column_index:v.number(),text:v.string().optional(),center:Fi,width:Fn,height:Fn,horizontal_align:v.enum(["left","center","right"]).optional(),vertical_align:v.enum(["top","middle","bottom"]).optional(),font_size:Fn.optional(),subcircuit_id:v.string().optional()}).describe("Defines a cell within a schematic_table"),CLt=v.object({type:v.literal("schematic_sheet"),schematic_sheet_id:io("schematic_sheet"),name:v.string().optional(),subcircuit_id:v.string().optional()}).describe("Defines a schematic sheet or page that components can be placed on"),ILt=v.object({x:Fn,y:Fn,bulge:v.number().optional()}),CQe=v.object({vertices:v.array(ILt)}),bLt=v.object({outer_ring:CQe,inner_rings:v.array(CQe).default([])}),SLt=v.object({x:Fn,y:Fn,via:v.boolean().optional(),via_to_layer:Va.optional()}),oRo=v.array(SLt),PLt=v.object({x:Fn,y:Fn,via:v.boolean().optional(),to_layer:Va.optional(),trace_width:Fn.optional()}),vLt=v.object({min_trace_width:Zo.optional(),min_board_edge_clearance:Zo.optional(),min_via_hole_edge_to_via_hole_edge_clearance:Zo.optional(),min_plated_hole_drill_edge_to_drill_edge_clearance:Zo.optional(),min_trace_to_pad_edge_clearance:Zo.optional(),min_pad_edge_to_pad_edge_clearance:Zo.optional(),min_same_net_trace_edge_to_trace_edge_clearance:Zo.optional(),min_different_net_trace_edge_to_trace_edge_clearance:Zo.optional(),min_via_hole_diameter:Zo.optional(),min_via_pad_diameter:Zo.optional()}),ELt=v.object({type:v.literal("pcb_component"),pcb_component_id:io("pcb_component"),source_component_id:v.string(),center:Fi,layer:Va,rotation:sm,display_offset_x:v.string().optional().describe("How to display the x offset for this part, usually corresponding with how the user specified it"),display_offset_y:v.string().optional().describe("How to display the y offset for this part, usually corresponding with how the user specified it"),width:Zo,height:Zo,do_not_place:v.boolean().optional(),is_allowed_to_be_off_board:v.boolean().optional(),subcircuit_id:v.string().optional(),pcb_group_id:v.string().optional(),position_mode:v.enum(["packed","relative_to_group_anchor","relative_to_another_component","none"]).optional(),anchor_position:Fi.optional(),anchor_alignment:U6.optional(),positioned_relative_to_pcb_group_id:v.string().optional(),positioned_relative_to_pcb_board_id:v.string().optional(),cable_insertion_center:Fi.optional(),insertion_direction:v.enum(["from_above","from_left","from_right","from_front","from_back"]).optional(),metadata:v.object({kicad_footprint:Akt.optional()}).optional(),obstructs_within_bounds:v.boolean().default(!0).describe("Does this component take up all the space within its bounds on a layer. This is generally true except for when separated pin headers are being represented by a single component (in which case, chips can be placed between the pin headers) or for tall modules where chips fit underneath")}).describe("Defines a component on the PCB"),MLt=v.object({type:v.literal("pcb_hole"),pcb_hole_id:io("pcb_hole"),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),pcb_component_id:v.string().optional(),hole_shape:v.literal("circle"),hole_diameter:v.number(),x:Fn,y:Fn,is_covered_with_solder_mask:v.boolean().optional(),soldermask_margin:v.number().optional()}),iRo=MLt.describe("Defines a circular hole on the PCB"),BLt=v.object({type:v.literal("pcb_hole"),pcb_hole_id:io("pcb_hole"),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),pcb_component_id:v.string().optional(),hole_shape:v.literal("rect"),hole_width:v.number(),hole_height:v.number(),x:Fn,y:Fn,is_covered_with_solder_mask:v.boolean().optional(),soldermask_margin:v.number().optional()}),rRo=BLt.describe("Defines a rectangular (square-capable) hole on the PCB. Use equal width/height for square."),wLt=v.object({type:v.literal("pcb_hole"),pcb_hole_id:io("pcb_hole"),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),pcb_component_id:v.string().optional(),hole_shape:v.enum(["circle","square"]),hole_diameter:v.number(),x:Fn,y:Fn,is_covered_with_solder_mask:v.boolean().optional(),soldermask_margin:v.number().optional()}),sRo=wLt.describe("Defines a circular or square hole on the PCB"),TLt=v.object({type:v.literal("pcb_hole"),pcb_hole_id:io("pcb_hole"),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),pcb_component_id:v.string().optional(),hole_shape:v.literal("oval"),hole_width:v.number(),hole_height:v.number(),x:Fn,y:Fn,is_covered_with_solder_mask:v.boolean().optional(),soldermask_margin:v.number().optional()}),aRo=TLt.describe("Defines an oval hole on the PCB"),DLt=v.object({type:v.literal("pcb_hole"),pcb_hole_id:io("pcb_hole"),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),pcb_component_id:v.string().optional(),hole_shape:v.literal("pill"),hole_width:v.number(),hole_height:v.number(),x:Fn,y:Fn,is_covered_with_solder_mask:v.boolean().optional(),soldermask_margin:v.number().optional()}),cRo=DLt.describe("Defines a pill-shaped hole on the PCB"),NLt=v.object({type:v.literal("pcb_hole"),pcb_hole_id:io("pcb_hole"),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),pcb_component_id:v.string().optional(),hole_shape:v.literal("rotated_pill"),hole_width:v.number(),hole_height:v.number(),x:Fn,y:Fn,ccw_rotation:sm,is_covered_with_solder_mask:v.boolean().optional(),soldermask_margin:v.number().optional()}),lRo=NLt.describe("Defines a rotated pill-shaped hole on the PCB"),RLt=wLt.or(TLt).or(DLt).or(NLt).or(MLt).or(BLt),dRo=v.object({type:v.literal("pcb_plated_hole"),shape:v.literal("circle"),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),outer_diameter:v.number(),hole_diameter:v.number(),is_covered_with_solder_mask:v.boolean().optional(),x:Fn,y:Fn,layers:v.array(Va),port_hints:v.array(v.string()).optional(),pcb_component_id:v.string().optional(),pcb_port_id:v.string().optional(),pcb_plated_hole_id:io("pcb_plated_hole"),soldermask_margin:v.number().optional()}),uRo=v.object({type:v.literal("pcb_plated_hole"),shape:v.enum(["oval","pill"]),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),outer_width:v.number(),outer_height:v.number(),hole_width:v.number(),hole_height:v.number(),is_covered_with_solder_mask:v.boolean().optional(),x:Fn,y:Fn,ccw_rotation:sm,layers:v.array(Va),port_hints:v.array(v.string()).optional(),pcb_component_id:v.string().optional(),pcb_port_id:v.string().optional(),pcb_plated_hole_id:io("pcb_plated_hole"),soldermask_margin:v.number().optional()}),hRo=v.object({type:v.literal("pcb_plated_hole"),shape:v.literal("circular_hole_with_rect_pad"),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),hole_shape:v.literal("circle"),pad_shape:v.literal("rect"),hole_diameter:v.number(),rect_pad_width:v.number(),rect_pad_height:v.number(),rect_border_radius:v.number().optional(),hole_offset_x:Fn.default(0),hole_offset_y:Fn.default(0),is_covered_with_solder_mask:v.boolean().optional(),x:Fn,y:Fn,layers:v.array(Va),port_hints:v.array(v.string()).optional(),pcb_component_id:v.string().optional(),pcb_port_id:v.string().optional(),pcb_plated_hole_id:io("pcb_plated_hole"),soldermask_margin:v.number().optional(),rect_ccw_rotation:sm.optional()}),mRo=v.object({type:v.literal("pcb_plated_hole"),shape:v.literal("pill_hole_with_rect_pad"),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),hole_shape:v.literal("pill"),pad_shape:v.literal("rect"),hole_width:v.number(),hole_height:v.number(),rect_pad_width:v.number(),rect_pad_height:v.number(),rect_border_radius:v.number().optional(),hole_offset_x:Fn.default(0),hole_offset_y:Fn.default(0),is_covered_with_solder_mask:v.boolean().optional(),x:Fn,y:Fn,layers:v.array(Va),port_hints:v.array(v.string()).optional(),pcb_component_id:v.string().optional(),pcb_port_id:v.string().optional(),pcb_plated_hole_id:io("pcb_plated_hole"),soldermask_margin:v.number().optional()}),pRo=v.object({type:v.literal("pcb_plated_hole"),shape:v.literal("rotated_pill_hole_with_rect_pad"),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),hole_shape:v.literal("rotated_pill"),pad_shape:v.literal("rect"),hole_width:v.number(),hole_height:v.number(),hole_ccw_rotation:sm,rect_pad_width:v.number(),rect_pad_height:v.number(),rect_border_radius:v.number().optional(),rect_ccw_rotation:sm,hole_offset_x:Fn.default(0),hole_offset_y:Fn.default(0),is_covered_with_solder_mask:v.boolean().optional(),x:Fn,y:Fn,layers:v.array(Va),port_hints:v.array(v.string()).optional(),pcb_component_id:v.string().optional(),pcb_port_id:v.string().optional(),pcb_plated_hole_id:io("pcb_plated_hole"),soldermask_margin:v.number().optional()}),ARo=v.object({type:v.literal("pcb_plated_hole"),shape:v.literal("hole_with_polygon_pad"),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),hole_shape:v.enum(["circle","oval","pill","rotated_pill"]),hole_diameter:v.number().optional(),hole_width:v.number().optional(),hole_height:v.number().optional(),pad_outline:v.array(v.object({x:Fn,y:Fn})).min(3),hole_offset_x:Fn.default(0),hole_offset_y:Fn.default(0),is_covered_with_solder_mask:v.boolean().optional(),x:Fn,y:Fn,layers:v.array(Va),port_hints:v.array(v.string()).optional(),pcb_component_id:v.string().optional(),pcb_port_id:v.string().optional(),pcb_plated_hole_id:io("pcb_plated_hole"),soldermask_margin:v.number().optional(),ccw_rotation:sm.optional()}),QLt=v.union([dRo,uRo,hRo,mRo,pRo,ARo]),kLt=v.object({type:v.literal("pcb_port"),pcb_port_id:io("pcb_port"),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),source_port_id:v.string(),pcb_component_id:v.string().optional(),x:Fn,y:Fn,layers:v.array(Va),is_board_pinout:v.boolean().optional()}).describe("Defines a port on the PCB"),_Ro=v.object({type:v.literal("pcb_smtpad"),shape:v.literal("circle"),pcb_smtpad_id:io("pcb_smtpad"),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),x:Fn,y:Fn,radius:v.number(),layer:Va,port_hints:v.array(v.string()).optional(),pcb_component_id:v.string().optional(),pcb_port_id:v.string().optional(),is_covered_with_solder_mask:v.boolean().optional(),soldermask_margin:v.number().optional()}),gRo=v.object({type:v.literal("pcb_smtpad"),shape:v.literal("rect"),pcb_smtpad_id:io("pcb_smtpad"),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),x:Fn,y:Fn,width:v.number(),height:v.number(),rect_border_radius:v.number().optional(),corner_radius:v.number().optional(),layer:Va,port_hints:v.array(v.string()).optional(),pcb_component_id:v.string().optional(),pcb_port_id:v.string().optional(),is_covered_with_solder_mask:v.boolean().optional(),soldermask_margin:v.number().optional(),soldermask_margin_left:v.number().optional(),soldermask_margin_top:v.number().optional(),soldermask_margin_right:v.number().optional(),soldermask_margin_bottom:v.number().optional()}),fRo=v.object({type:v.literal("pcb_smtpad"),shape:v.literal("rotated_rect"),pcb_smtpad_id:io("pcb_smtpad"),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),x:Fn,y:Fn,width:v.number(),height:v.number(),rect_border_radius:v.number().optional(),corner_radius:v.number().optional(),ccw_rotation:sm,layer:Va,port_hints:v.array(v.string()).optional(),pcb_component_id:v.string().optional(),pcb_port_id:v.string().optional(),is_covered_with_solder_mask:v.boolean().optional(),soldermask_margin:v.number().optional(),soldermask_margin_left:v.number().optional(),soldermask_margin_top:v.number().optional(),soldermask_margin_right:v.number().optional(),soldermask_margin_bottom:v.number().optional()}),LLt=v.object({type:v.literal("pcb_smtpad"),shape:v.literal("pill"),pcb_smtpad_id:io("pcb_smtpad"),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),x:Fn,y:Fn,width:v.number(),height:v.number(),radius:v.number(),layer:Va,port_hints:v.array(v.string()).optional(),pcb_component_id:v.string().optional(),pcb_port_id:v.string().optional(),is_covered_with_solder_mask:v.boolean().optional(),soldermask_margin:v.number().optional()}),yRo=v.object({type:v.literal("pcb_smtpad"),shape:v.literal("rotated_pill"),pcb_smtpad_id:io("pcb_smtpad"),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),x:Fn,y:Fn,width:v.number(),height:v.number(),radius:v.number(),ccw_rotation:sm,layer:Va,port_hints:v.array(v.string()).optional(),pcb_component_id:v.string().optional(),pcb_port_id:v.string().optional(),is_covered_with_solder_mask:v.boolean().optional(),soldermask_margin:v.number().optional()}),xRo=v.object({type:v.literal("pcb_smtpad"),shape:v.literal("polygon"),pcb_smtpad_id:io("pcb_smtpad"),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),points:v.array(Fi),layer:Va,port_hints:v.array(v.string()).optional(),pcb_component_id:v.string().optional(),pcb_port_id:v.string().optional(),is_covered_with_solder_mask:v.boolean().optional(),soldermask_margin:v.number().optional()}),FLt=v.discriminatedUnion("shape",[_Ro,gRo,fRo,yRo,LLt,xRo]).describe("Defines an SMT pad on the PCB"),CRo=v.object({type:v.literal("pcb_solder_paste"),shape:v.literal("circle"),pcb_solder_paste_id:io("pcb_solder_paste"),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),x:Fn,y:Fn,radius:v.number(),layer:Va,pcb_component_id:v.string().optional(),pcb_smtpad_id:v.string().optional()}),IRo=v.object({type:v.literal("pcb_solder_paste"),shape:v.literal("rect"),pcb_solder_paste_id:io("pcb_solder_paste"),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),x:Fn,y:Fn,width:v.number(),height:v.number(),layer:Va,pcb_component_id:v.string().optional(),pcb_smtpad_id:v.string().optional()}),bRo=v.object({type:v.literal("pcb_solder_paste"),shape:v.literal("pill"),pcb_solder_paste_id:io("pcb_solder_paste"),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),x:Fn,y:Fn,width:v.number(),height:v.number(),radius:v.number(),layer:Va,pcb_component_id:v.string().optional(),pcb_smtpad_id:v.string().optional()}),SRo=v.object({type:v.literal("pcb_solder_paste"),shape:v.literal("rotated_rect"),pcb_solder_paste_id:io("pcb_solder_paste"),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),x:Fn,y:Fn,width:v.number(),height:v.number(),ccw_rotation:Fn,layer:Va,pcb_component_id:v.string().optional(),pcb_smtpad_id:v.string().optional()}),PRo=v.object({type:v.literal("pcb_solder_paste"),shape:v.literal("oval"),pcb_solder_paste_id:io("pcb_solder_paste"),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),x:Fn,y:Fn,width:v.number(),height:v.number(),layer:Va,pcb_component_id:v.string().optional(),pcb_smtpad_id:v.string().optional()}),HLt=v.union([CRo,IRo,bRo,SRo,PRo]).describe("Defines solderpaste on the PCB"),OLt=v.object({type:v.literal("pcb_text"),pcb_text_id:io("pcb_text"),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),text:v.string(),center:Fi,layer:Va,width:Zo,height:Zo,lines:v.number(),align:v.enum(["bottom-left"])}).describe("Defines text on the PCB"),zLt=v.object({route_type:v.literal("wire"),x:Fn,y:Fn,width:Fn,copper_pour_id:v.string().optional(),is_inside_copper_pour:v.boolean().optional(),start_pcb_port_id:v.string().optional(),end_pcb_port_id:v.string().optional(),layer:Va}),GLt=v.object({route_type:v.literal("via"),x:Fn,y:Fn,copper_pour_id:v.string().optional(),is_inside_copper_pour:v.boolean().optional(),hole_diameter:Fn.optional(),outer_diameter:Fn.optional(),from_layer:Va,to_layer:Va}),YLt=v.union([zLt,GLt]),VLt=v.object({type:v.literal("pcb_trace"),source_trace_id:v.string().optional(),pcb_component_id:v.string().optional(),pcb_trace_id:io("pcb_trace"),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),route_thickness_mode:v.enum(["constant","interpolated"]).default("constant").optional(),route_order_index:v.number().optional(),should_round_corners:v.boolean().optional(),trace_length:v.number().optional(),highlight_color:v.string().optional(),route:v.array(YLt)}).describe("Defines a trace on the PCB"),ULt=v.object({type:v.literal("pcb_trace_warning"),pcb_trace_warning_id:io("pcb_trace_warning"),warning_type:v.literal("pcb_trace_warning").default("pcb_trace_warning"),message:v.string(),center:Fi.optional(),pcb_trace_id:v.string(),source_trace_id:v.string(),pcb_component_ids:v.array(v.string()),pcb_port_ids:v.array(v.string()),subcircuit_id:v.string().optional()}).describe("Defines a trace warning on the PCB"),WLt=vl.extend({type:v.literal("pcb_trace_error"),pcb_trace_error_id:io("pcb_trace_error"),error_type:v.literal("pcb_trace_error").default("pcb_trace_error"),center:Fi.optional(),pcb_trace_id:v.string(),source_trace_id:v.string(),pcb_component_ids:v.array(v.string()),pcb_port_ids:v.array(v.string()),subcircuit_id:v.string().optional()}).describe("Defines a trace error on the PCB"),XLt=vl.extend({type:v.literal("pcb_trace_missing_error"),pcb_trace_missing_error_id:io("pcb_trace_missing_error"),error_type:v.literal("pcb_trace_missing_error").default("pcb_trace_missing_error"),center:Fi.optional(),source_trace_id:v.string(),pcb_component_ids:v.array(v.string()),pcb_port_ids:v.array(v.string()),subcircuit_id:v.string().optional()}).describe("Defines an error when a source trace has no corresponding PCB trace"),KLt=vl.extend({type:v.literal("pcb_port_not_matched_error"),pcb_error_id:io("pcb_error"),error_type:v.literal("pcb_port_not_matched_error").default("pcb_port_not_matched_error"),pcb_component_ids:v.array(v.string()),subcircuit_id:v.string().optional()}).describe("Defines a trace error on the PCB where a port is not matched"),jLt=vl.extend({type:v.literal("pcb_port_not_connected_error"),pcb_port_not_connected_error_id:io("pcb_port_not_connected_error"),error_type:v.literal("pcb_port_not_connected_error").default("pcb_port_not_connected_error"),pcb_port_ids:v.array(v.string()),pcb_component_ids:v.array(v.string()),subcircuit_id:v.string().optional()}).describe("Defines an error when a pcb port is not connected to any trace"),qLt=v.object({type:v.literal("pcb_net"),pcb_net_id:io("pcb_net"),source_net_id:v.string().optional(),highlight_color:v.string().optional()}).describe("Defines a net on the PCB"),JLt=v.object({type:v.literal("pcb_via"),pcb_via_id:io("pcb_via"),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),subcircuit_connectivity_map_key:v.string().optional(),x:Fn,y:Fn,outer_diameter:Fn.default("0.6mm"),hole_diameter:Fn.default("0.25mm"),from_layer:Va.optional(),to_layer:Va.optional(),layers:v.array(Va),pcb_trace_id:v.string().optional(),net_is_assignable:v.boolean().optional(),net_assigned:v.boolean().optional(),is_tented:v.boolean().optional()}).describe("Defines a via on the PCB"),$Lt=v.object({type:v.literal("pcb_board"),pcb_board_id:io("pcb_board"),pcb_panel_id:v.string().optional(),carrier_pcb_board_id:v.string().optional(),is_subcircuit:v.boolean().optional(),subcircuit_id:v.string().optional(),is_mounted_to_carrier_board:v.boolean().optional(),width:Zo.optional(),height:Zo.optional(),center:Fi,display_offset_x:v.string().optional().describe("How to display the x offset for this board, usually corresponding with how the user specified it"),display_offset_y:v.string().optional().describe("How to display the y offset for this board, usually corresponding with how the user specified it"),thickness:Zo.optional().default(1.4),num_layers:v.number().optional().default(4),outline:v.array(Fi).optional(),shape:v.enum(["rect","polygon"]).optional(),material:v.enum(["fr4","fr1"]).default("fr4"),anchor_position:Fi.optional(),anchor_alignment:U6.optional(),position_mode:v.enum(["relative_to_panel_anchor","none"]).optional()}).merge(vLt).describe("Defines the board outline of the PCB"),ZLt=v.object({type:v.literal("pcb_panel"),pcb_panel_id:io("pcb_panel"),width:Zo,height:Zo,center:Fi,thickness:Zo.optional().default(1.4),covered_with_solder_mask:v.boolean().optional().default(!0)}).describe("Defines a PCB panel that can contain multiple boards"),eFt=vl.extend({type:v.literal("pcb_placement_error"),pcb_placement_error_id:io("pcb_placement_error"),error_type:v.literal("pcb_placement_error").default("pcb_placement_error"),subcircuit_id:v.string().optional()}).describe("Defines a placement error on the PCB"),tFt=vl.extend({type:v.literal("pcb_panelization_placement_error"),pcb_panelization_placement_error_id:io("pcb_panelization_placement_error"),error_type:v.literal("pcb_panelization_placement_error").default("pcb_panelization_placement_error"),pcb_panel_id:v.string().optional(),pcb_board_id:v.string().optional(),subcircuit_id:v.string().optional()}).describe("Defines a panelization placement error on the PCB"),nFt=v.object({type:v.literal("pcb_trace_hint"),pcb_trace_hint_id:io("pcb_trace_hint"),pcb_port_id:v.string(),pcb_component_id:v.string(),route:v.array(PLt),subcircuit_id:v.string().optional()}).describe("A hint that can be used during generation of a PCB trace"),oFt=v.object({type:v.literal("pcb_silkscreen_line"),pcb_silkscreen_line_id:io("pcb_silkscreen_line"),pcb_component_id:v.string(),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),stroke_width:Fn.default("0.1mm"),x1:Fn,y1:Fn,x2:Fn,y2:Fn,layer:H_}).describe("Defines a silkscreen line on the PCB"),iFt=v.object({type:v.literal("pcb_silkscreen_path"),pcb_silkscreen_path_id:io("pcb_silkscreen_path"),pcb_component_id:v.string(),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),layer:H_,route:v.array(Fi),stroke_width:Zo}).describe("Defines a silkscreen path on the PCB"),rFt=v.object({type:v.literal("pcb_silkscreen_text"),pcb_silkscreen_text_id:io("pcb_silkscreen_text"),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),font:v.literal("tscircuit2024").default("tscircuit2024"),font_size:Fn.default("0.2mm"),pcb_component_id:v.string(),text:v.string(),is_knockout:v.boolean().default(!1).optional(),knockout_padding:v.object({left:Zo,top:Zo,bottom:Zo,right:Zo}).default({left:"0.2mm",top:"0.2mm",bottom:"0.2mm",right:"0.2mm"}).optional(),ccw_rotation:v.number().optional(),layer:Va,is_mirrored:v.boolean().default(!1).optional(),anchor_position:Fi.default({x:0,y:0}),anchor_alignment:U6.default("center")}).describe("Defines silkscreen text on the PCB"),sFt=v.object({type:v.literal("pcb_copper_text"),pcb_copper_text_id:io("pcb_copper_text"),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),font:v.literal("tscircuit2024").default("tscircuit2024"),font_size:Fn.default("0.2mm"),pcb_component_id:v.string(),text:v.string(),is_knockout:v.boolean().default(!1).optional(),knockout_padding:v.object({left:Zo,top:Zo,bottom:Zo,right:Zo}).default({left:"0.2mm",top:"0.2mm",bottom:"0.2mm",right:"0.2mm"}).optional(),ccw_rotation:v.number().optional(),layer:Va,is_mirrored:v.boolean().default(!1).optional(),anchor_position:Fi.default({x:0,y:0}),anchor_alignment:U6.default("center")}).describe("Defines copper text on the PCB"),aFt=v.object({type:v.literal("pcb_silkscreen_rect"),pcb_silkscreen_rect_id:io("pcb_silkscreen_rect"),pcb_component_id:v.string(),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),center:Fi,width:Zo,height:Zo,layer:Va,stroke_width:Zo.default("1mm"),corner_radius:Zo.optional(),is_filled:v.boolean().default(!0).optional(),has_stroke:v.boolean().optional(),is_stroke_dashed:v.boolean().optional(),ccw_rotation:v.number().optional()}).describe("Defines a silkscreen rect on the PCB"),cFt=v.object({type:v.literal("pcb_silkscreen_circle"),pcb_silkscreen_circle_id:io("pcb_silkscreen_circle"),pcb_component_id:v.string(),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),center:Fi,radius:Zo,layer:H_,stroke_width:Zo.default("1mm"),is_filled:v.boolean().optional()}).describe("Defines a silkscreen circle on the PCB"),lFt=v.object({type:v.literal("pcb_silkscreen_oval"),pcb_silkscreen_oval_id:io("pcb_silkscreen_oval"),pcb_component_id:v.string(),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),center:Fi,radius_x:Fn,radius_y:Fn,layer:H_,ccw_rotation:sm.optional()}).describe("Defines a silkscreen oval on the PCB"),dFt=v.object({type:v.literal("pcb_silkscreen_pill"),pcb_silkscreen_pill_id:io("pcb_silkscreen_pill"),pcb_component_id:v.string(),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),center:Fi,width:Zo,height:Zo,layer:Va,ccw_rotation:v.number().optional()}).describe("Defines a silkscreen pill on the PCB"),uFt=v.object({type:v.literal("pcb_fabrication_note_text"),pcb_fabrication_note_text_id:io("pcb_fabrication_note_text"),subcircuit_id:v.string().optional(),pcb_group_id:v.string().optional(),font:v.literal("tscircuit2024").default("tscircuit2024"),font_size:Fn.default("1mm"),pcb_component_id:v.string(),text:v.string(),layer:H_,anchor_position:Fi.default({x:0,y:0}),anchor_alignment:v.enum(["center","top_left","top_right","bottom_left","bottom_right"]).default("center"),color:v.string().optional()}).describe("Defines a fabrication note in text on the PCB, useful for leaving notes for assemblers or fabricators"),hFt=v.object({type:v.literal("pcb_fabrication_note_path"),pcb_fabrication_note_path_id:io("pcb_fabrication_note_path"),pcb_component_id:v.string(),subcircuit_id:v.string().optional(),layer:Va,route:v.array(Fi),stroke_width:Zo,color:v.string().optional()}).describe("Defines a fabrication path on the PCB for fabricators or assemblers"),mFt=v.object({type:v.literal("pcb_fabrication_note_rect"),pcb_fabrication_note_rect_id:io("pcb_fabrication_note_rect"),pcb_component_id:v.string(),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),center:Fi,width:Zo,height:Zo,layer:H_,stroke_width:Zo.default("0.1mm"),corner_radius:Zo.optional(),is_filled:v.boolean().optional(),has_stroke:v.boolean().optional(),is_stroke_dashed:v.boolean().optional(),color:v.string().optional()}).describe("Defines a fabrication note rectangle on the PCB"),pFt=v.object({type:v.literal("pcb_fabrication_note_dimension"),pcb_fabrication_note_dimension_id:io("pcb_fabrication_note_dimension"),pcb_component_id:v.string(),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),layer:H_,from:Fi,to:Fi,text:v.string().optional(),text_ccw_rotation:v.number().optional(),offset:Zo.optional(),offset_distance:Zo.optional(),offset_direction:v.object({x:v.number(),y:v.number()}).optional(),font:v.literal("tscircuit2024").default("tscircuit2024"),font_size:Zo.default("1mm"),color:v.string().optional(),arrow_size:Zo.default("1mm")}).describe("Defines a measurement annotation within PCB fabrication notes"),AFt=v.object({type:v.literal("pcb_note_text"),pcb_note_text_id:io("pcb_note_text"),pcb_component_id:v.string().optional(),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),name:v.string().optional(),font:v.literal("tscircuit2024").default("tscircuit2024"),font_size:Fn.default("1mm"),text:v.string().optional(),anchor_position:Fi.default({x:0,y:0}),anchor_alignment:v.enum(["center","top_left","top_right","bottom_left","bottom_right"]).default("center"),layer:H_.default("top"),is_mirrored_from_top_view:v.boolean().optional(),color:v.string().optional()}).describe("Defines a documentation note in text on the PCB"),_Ft=v.object({type:v.literal("pcb_note_rect"),pcb_note_rect_id:io("pcb_note_rect"),pcb_component_id:v.string().optional(),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),name:v.string().optional(),text:v.string().optional(),center:Fi,width:Zo,height:Zo,layer:H_.default("top"),stroke_width:Zo.default("0.1mm"),corner_radius:Zo.optional(),is_filled:v.boolean().optional(),has_stroke:v.boolean().optional(),is_stroke_dashed:v.boolean().optional(),color:v.string().optional()}).describe("Defines a rectangular documentation note on the PCB"),gFt=v.object({type:v.literal("pcb_note_path"),pcb_note_path_id:io("pcb_note_path"),pcb_component_id:v.string().optional(),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),name:v.string().optional(),text:v.string().optional(),route:v.array(Fi),layer:H_.default("top"),stroke_width:Zo.default("0.1mm"),color:v.string().optional()}).describe("Defines a polyline documentation note on the PCB"),fFt=v.object({type:v.literal("pcb_note_line"),pcb_note_line_id:io("pcb_note_line"),pcb_component_id:v.string().optional(),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),name:v.string().optional(),text:v.string().optional(),x1:Fn,y1:Fn,x2:Fn,y2:Fn,layer:H_.default("top"),stroke_width:Fn.default("0.1mm"),color:v.string().optional(),is_dashed:v.boolean().optional()}).describe("Defines a straight documentation note line on the PCB"),yFt=v.object({type:v.literal("pcb_note_dimension"),pcb_note_dimension_id:io("pcb_note_dimension"),pcb_component_id:v.string().optional(),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),name:v.string().optional(),from:Fi,to:Fi,text:v.string().optional(),text_ccw_rotation:v.number().optional(),offset_distance:Zo.optional(),offset_direction:v.object({x:v.number(),y:v.number()}).optional(),font:v.literal("tscircuit2024").default("tscircuit2024"),font_size:Zo.default("1mm"),layer:H_.default("top"),color:v.string().optional(),arrow_size:Zo.default("1mm")}).describe("Defines a measurement annotation within PCB documentation notes"),xFt=vl.extend({type:v.literal("pcb_footprint_overlap_error"),pcb_error_id:io("pcb_error"),error_type:v.literal("pcb_footprint_overlap_error").default("pcb_footprint_overlap_error"),pcb_smtpad_ids:v.array(v.string()).optional(),pcb_plated_hole_ids:v.array(v.string()).optional(),pcb_hole_ids:v.array(v.string()).optional(),pcb_keepout_ids:v.array(v.string()).optional()}).describe("Error emitted when a pcb footprint overlaps with another element"),CFt=vl.extend({type:v.literal("pcb_courtyard_overlap_error"),pcb_error_id:io("pcb_error"),error_type:v.literal("pcb_courtyard_overlap_error").default("pcb_courtyard_overlap_error"),pcb_component_ids:v.tuple([v.string(),v.string()])}).describe("Error emitted when the courtyard (CrtYd) of one PCB component overlaps with the courtyard of another"),IFt=v.object({type:v.literal("pcb_keepout"),shape:v.literal("rect"),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),center:Fi,width:Fn,height:Fn,pcb_keepout_id:v.string(),layers:v.array(v.string()),description:v.string().optional()}).or(v.object({type:v.literal("pcb_keepout"),shape:v.literal("circle"),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),center:Fi,radius:Fn,pcb_keepout_id:v.string(),layers:v.array(v.string()),description:v.string().optional()})),bfe=v.object({type:v.literal("pcb_cutout"),pcb_cutout_id:io("pcb_cutout"),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),pcb_board_id:v.string().optional(),pcb_panel_id:v.string().optional()}),bFt=bfe.extend({shape:v.literal("rect"),center:Fi,width:Zo,height:Zo,rotation:sm.optional(),corner_radius:Zo.optional()}),SFt=bfe.extend({shape:v.literal("circle"),center:Fi,radius:Zo}),PFt=bfe.extend({shape:v.literal("polygon"),points:v.array(Fi)}),vFt=bfe.extend({shape:v.literal("path"),route:v.array(Fi),slot_width:Zo,slot_length:Zo.optional(),space_between_slots:Zo.optional(),slot_corner_radius:Zo.optional()}),EFt=v.discriminatedUnion("shape",[bFt,SFt,PFt,vFt]).describe("Defines a cutout on the PCB, removing board material."),MFt=vl.extend({type:v.literal("pcb_missing_footprint_error"),pcb_missing_footprint_error_id:io("pcb_missing_footprint_error"),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),error_type:v.literal("pcb_missing_footprint_error").default("pcb_missing_footprint_error"),source_component_id:v.string()}).describe("Defines a missing footprint error on the PCB"),BFt=vl.extend({type:v.literal("external_footprint_load_error"),external_footprint_load_error_id:io("external_footprint_load_error"),pcb_component_id:v.string(),source_component_id:v.string(),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),footprinter_string:v.string().optional(),error_type:v.literal("external_footprint_load_error").default("external_footprint_load_error")}).describe("Defines an error when an external footprint fails to load"),wFt=vl.extend({type:v.literal("circuit_json_footprint_load_error"),circuit_json_footprint_load_error_id:io("circuit_json_footprint_load_error"),pcb_component_id:v.string(),source_component_id:v.string(),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),error_type:v.literal("circuit_json_footprint_load_error").default("circuit_json_footprint_load_error"),circuit_json:v.array(v.any()).optional()}).describe("Defines an error when a circuit JSON footprint fails to load"),TFt=v.object({type:v.literal("pcb_group"),pcb_group_id:io("pcb_group"),source_group_id:v.string(),is_subcircuit:v.boolean().optional(),subcircuit_id:v.string().optional(),width:Zo.optional(),height:Zo.optional(),center:Fi,display_offset_x:v.string().optional().describe("How to display the x offset for this group, usually corresponding with how the user specified it"),display_offset_y:v.string().optional().describe("How to display the y offset for this group, usually corresponding with how the user specified it"),outline:v.array(Fi).optional(),anchor_position:Fi.optional(),anchor_alignment:U6.default("center"),position_mode:v.enum(["packed","relative_to_group_anchor","none"]).optional(),positioned_relative_to_pcb_group_id:v.string().optional(),positioned_relative_to_pcb_board_id:v.string().optional(),pcb_component_ids:v.array(v.string()),child_layout_mode:v.enum(["packed","none"]).optional(),name:v.string().optional(),description:v.string().optional(),layout_mode:v.string().optional(),autorouter_configuration:v.object({trace_clearance:Zo}).optional(),autorouter_used_string:v.string().optional()}).describe("Defines a group of components on the PCB"),DFt=vl.extend({type:v.literal("pcb_autorouting_error"),pcb_error_id:io("pcb_autorouting_error"),error_type:v.literal("pcb_autorouting_error").default("pcb_autorouting_error"),subcircuit_id:v.string().optional()}).describe("The autorouting has failed to route a portion of the board"),NFt=v.object({type:v.literal("pcb_manual_edit_conflict_warning"),pcb_manual_edit_conflict_warning_id:io("pcb_manual_edit_conflict_warning"),warning_type:v.literal("pcb_manual_edit_conflict_warning").default("pcb_manual_edit_conflict_warning"),message:v.string(),pcb_component_id:v.string(),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),source_component_id:v.string()}).describe("Warning emitted when a component has both manual placement and explicit pcbX/pcbY coordinates"),cEt=v.enum(["x-","x+","y+","y-"]),RFt=v.object({type:v.literal("pcb_connector_not_in_accessible_orientation_warning"),pcb_connector_not_in_accessible_orientation_warning_id:io("pcb_connector_not_in_accessible_orientation_warning"),warning_type:v.literal("pcb_connector_not_in_accessible_orientation_warning").default("pcb_connector_not_in_accessible_orientation_warning"),message:v.string(),pcb_component_id:v.string(),source_component_id:v.string().optional(),pcb_board_id:v.string().optional(),facing_direction:cEt,recommended_facing_direction:cEt,subcircuit_id:v.string().optional()}).describe("Warning emitted when a connector PCB component is facing inward toward the board and should be reoriented to an outward-facing direction"),QFt=v.object({type:v.literal("supplier_footprint_mismatch_warning"),supplier_footprint_mismatch_warning_id:io("supplier_footprint_mismatch_warning"),warning_type:v.literal("supplier_footprint_mismatch_warning").default("supplier_footprint_mismatch_warning"),message:v.string(),source_component_id:v.string(),pcb_component_id:v.string().optional(),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),supplier_name:EFe.optional(),supplier_part_number:v.string().optional(),supplier_footprint_url:v.string().optional(),footprint_copper_intersection_over_union:v.number()}).describe("Warning emitted when a supplier part footprint does not match the expected footprint"),kFt=v.object({type:v.literal("pcb_breakout_point"),pcb_breakout_point_id:io("pcb_breakout_point"),pcb_group_id:v.string(),subcircuit_id:v.string().optional(),source_trace_id:v.string().optional(),source_port_id:v.string().optional(),source_net_id:v.string().optional(),x:Fn,y:Fn}).describe("Defines a routing target within a pcb_group for a source_trace or source_net"),LFt=v.object({type:v.literal("pcb_ground_plane"),pcb_ground_plane_id:io("pcb_ground_plane"),source_pcb_ground_plane_id:v.string(),source_net_id:v.string(),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional()}).describe("Defines a ground plane on the PCB"),FFt=v.object({type:v.literal("pcb_ground_plane_region"),pcb_ground_plane_region_id:io("pcb_ground_plane_region"),pcb_ground_plane_id:v.string(),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),layer:Va,points:v.array(Fi)}).describe("Defines a polygon region of a ground plane"),HFt=v.object({type:v.literal("pcb_thermal_spoke"),pcb_thermal_spoke_id:io("pcb_thermal_spoke"),pcb_ground_plane_id:v.string(),shape:v.string(),spoke_count:v.number(),spoke_thickness:Fn,spoke_inner_diameter:Fn,spoke_outer_diameter:Fn,pcb_plated_hole_id:v.string().optional(),subcircuit_id:v.string().optional()}).describe("Pattern for connecting a ground plane to a plated hole"),JFe=v.object({type:v.literal("pcb_copper_pour"),pcb_copper_pour_id:io("pcb_copper_pour"),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),layer:Va,source_net_id:v.string().optional(),covered_with_solder_mask:v.boolean().optional().default(!0)}),OFt=JFe.extend({shape:v.literal("rect"),center:Fi,width:Zo,height:Zo,rotation:sm.optional()}),zFt=JFe.extend({shape:v.literal("brep"),brep_shape:bLt}),GFt=JFe.extend({shape:v.literal("polygon"),points:v.array(Fi)}),YFt=v.discriminatedUnion("shape",[OFt,zFt,GFt]).describe("Defines a copper pour on the PCB."),VFt=vl.extend({type:v.literal("pcb_component_outside_board_error"),pcb_component_outside_board_error_id:io("pcb_component_outside_board_error"),error_type:v.literal("pcb_component_outside_board_error").default("pcb_component_outside_board_error"),pcb_component_id:v.string(),pcb_board_id:v.string(),component_center:Fi,component_bounds:v.object({min_x:v.number(),max_x:v.number(),min_y:v.number(),max_y:v.number()}),subcircuit_id:v.string().optional(),source_component_id:v.string().optional()}).describe("Error emitted when a PCB component is placed outside the board boundaries"),UFt=vl.extend({type:v.literal("pcb_component_not_on_board_edge_error"),pcb_component_not_on_board_edge_error_id:io("pcb_component_not_on_board_edge_error"),error_type:v.literal("pcb_component_not_on_board_edge_error").default("pcb_component_not_on_board_edge_error"),pcb_component_id:v.string(),pcb_board_id:v.string(),component_center:Fi,pad_to_nearest_board_edge_distance:v.number(),source_component_id:v.string().optional(),subcircuit_id:v.string().optional()}).describe("Error emitted when a component that must be placed on the board edge is centered away from the edge"),WFt=vl.extend({type:v.literal("pcb_component_invalid_layer_error"),pcb_component_invalid_layer_error_id:io("pcb_component_invalid_layer_error"),error_type:v.literal("pcb_component_invalid_layer_error").default("pcb_component_invalid_layer_error"),pcb_component_id:v.string().optional(),source_component_id:v.string(),layer:Va,subcircuit_id:v.string().optional()}).describe("Error emitted when a component is placed on an invalid layer (components can only be on 'top' or 'bottom' layers)"),XFt=vl.extend({type:v.literal("pcb_via_clearance_error"),pcb_error_id:io("pcb_error"),error_type:v.literal("pcb_via_clearance_error").default("pcb_via_clearance_error"),pcb_via_ids:v.array(v.string()).min(2),minimum_clearance:Fn.optional(),actual_clearance:Fn.optional(),pcb_center:v.object({x:v.number().optional(),y:v.number().optional()}).optional(),subcircuit_id:v.string().optional()}).describe("Error emitted when vias are closer than the allowed clearance"),KFt=vl.extend({type:v.literal("pcb_via_trace_clearance_error"),pcb_via_trace_clearance_error_id:io("pcb_via_trace_clearance_error"),error_type:v.literal("pcb_via_trace_clearance_error").default("pcb_via_trace_clearance_error"),pcb_via_id:v.string(),pcb_trace_id:v.string(),minimum_clearance:Fn.optional(),actual_clearance:Fn.optional(),center:v.object({x:v.number().optional(),y:v.number().optional()}).optional(),subcircuit_id:v.string().optional()}).describe("Error emitted when a via and trace are closer than the allowed clearance"),jFt=vl.extend({type:v.literal("pcb_pad_pad_clearance_error"),pcb_pad_pad_clearance_error_id:io("pcb_pad_pad_clearance_error"),error_type:v.literal("pcb_pad_pad_clearance_error").default("pcb_pad_pad_clearance_error"),pcb_pad_ids:v.array(v.string()).min(2),minimum_clearance:Fn.optional(),actual_clearance:Fn.optional(),center:v.object({x:v.number().optional(),y:v.number().optional()}).optional(),subcircuit_id:v.string().optional()}).describe("Error emitted when pads are closer than the allowed clearance"),qFt=vl.extend({type:v.literal("pcb_pad_trace_clearance_error"),pcb_pad_trace_clearance_error_id:io("pcb_pad_trace_clearance_error"),error_type:v.literal("pcb_pad_trace_clearance_error").default("pcb_pad_trace_clearance_error"),pcb_pad_id:v.string(),pcb_trace_id:v.string(),minimum_clearance:Fn.optional(),actual_clearance:Fn.optional(),center:v.object({x:v.number().optional(),y:v.number().optional()}).optional(),subcircuit_id:v.string().optional()}).describe("Error emitted when a pad and trace are closer than allowed clearance"),JFt=v.object({type:v.literal("pcb_courtyard_rect"),pcb_courtyard_rect_id:io("pcb_courtyard_rect"),pcb_component_id:v.string(),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),center:Fi,width:Zo,height:Zo,layer:H_,ccw_rotation:sm.optional(),color:v.string().optional()}).describe("Defines a courtyard rectangle on the PCB"),$Ft=v.object({type:v.literal("pcb_courtyard_outline"),pcb_courtyard_outline_id:io("pcb_courtyard_outline"),pcb_component_id:v.string(),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),layer:H_,outline:v.array(Fi).min(2)}).describe("Defines a courtyard outline on the PCB"),ZFt=v.object({type:v.literal("pcb_courtyard_polygon"),pcb_courtyard_polygon_id:io("pcb_courtyard_polygon"),pcb_component_id:v.string(),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),layer:H_,points:v.array(Fi).min(3),color:v.string().optional()}).describe("Defines a courtyard polygon on the PCB"),eHt=v.object({type:v.literal("pcb_courtyard_circle"),pcb_courtyard_circle_id:io("pcb_courtyard_circle"),pcb_component_id:v.string(),pcb_group_id:v.string().optional(),subcircuit_id:v.string().optional(),center:Fi,radius:Zo,layer:H_,color:v.string().optional()}).describe("Defines a courtyard circle on the PCB"),vRo=["obj","stl","3mf","gltf","glb","step","wrl"],tHt=["x+","x-","y+","y-","z+","z-"],ERo={obj:"z+",stl:"z+","3mf":"z+",gltf:"y+",glb:"y+",step:"z+",wrl:"y+"},nHt=v.object({type:v.literal("cad_component"),cad_component_id:v.string(),pcb_component_id:v.string(),source_component_id:v.string(),position:b6,rotation:b6.optional(),size:b6.optional(),layer:Va.optional(),subcircuit_id:v.string().optional(),footprinter_string:v.string().optional(),model_obj_url:v.string().optional(),model_stl_url:v.string().optional(),model_3mf_url:v.string().optional(),model_gltf_url:v.string().optional(),model_glb_url:v.string().optional(),model_step_url:v.string().optional(),model_wrl_url:v.string().optional(),model_asset:lkt.optional(),model_unit_to_mm_scale_factor:v.number().optional(),model_board_normal_direction:v.enum(tHt).optional().describe(`The direction in the model's coordinate space that is considered "up" or "coming out of the board surface"`),model_origin_position:b6.optional(),model_origin_alignment:v.enum(["unknown","center","center_of_component_on_board_surface","bottom_center_of_component"]).optional(),model_object_fit:v.enum(["contain_within_bounds","fill_bounds"]).optional().default("contain_within_bounds"),model_jscad:v.any().optional(),show_as_translucent_model:v.boolean().optional(),anchor_alignment:v.enum(["center","center_of_component_on_board_surface"]).optional().default("center")}).describe("Defines a component on the PCB"),$Fe=v.enum(["sinewave","square","triangle","sawtooth"]),MRo=v.union([v.string(),v.number()]).transform((e)=>typeof e=="string"?e.endsWith("%")?parseFloat(e.slice(0,-1))/100:parseFloat(e):e).pipe(v.number().min(0,"Duty cycle must be non-negative").max(1,"Duty cycle cannot be greater than 100%")),oHt=v.object({type:v.literal("simulation_voltage_source"),simulation_voltage_source_id:io("simulation_voltage_source"),is_dc_source:v.literal(!0).optional().default(!0),positive_source_port_id:v.string().optional(),negative_source_port_id:v.string().optional(),positive_source_net_id:v.string().optional(),negative_source_net_id:v.string().optional(),voltage:k6}).describe("Defines a DC voltage source for simulation"),iHt=v.object({type:v.literal("simulation_voltage_source"),simulation_voltage_source_id:io("simulation_voltage_source"),is_dc_source:v.literal(!1),terminal1_source_port_id:v.string().optional(),terminal2_source_port_id:v.string().optional(),terminal1_source_net_id:v.string().optional(),terminal2_source_net_id:v.string().optional(),voltage:k6.optional(),frequency:fL.optional(),peak_to_peak_voltage:k6.optional(),wave_shape:$Fe.optional(),phase:sm.optional(),duty_cycle:MRo.optional()}).describe("Defines an AC voltage source for simulation"),rHt=v.union([oHt,iHt]).describe("Defines a voltage source for simulation"),BRo=v.union([v.string(),v.number()]).transform((e)=>typeof e=="string"?e.endsWith("%")?parseFloat(e.slice(0,-1))/100:parseFloat(e):e).pipe(v.number().min(0,"Duty cycle must be non-negative").max(1,"Duty cycle cannot be greater than 100%")),sHt=v.object({type:v.literal("simulation_current_source"),simulation_current_source_id:io("simulation_current_source"),is_dc_source:v.literal(!0).optional().default(!0),positive_source_port_id:v.string().optional(),negative_source_port_id:v.string().optional(),positive_source_net_id:v.string().optional(),negative_source_net_id:v.string().optional(),current:oU}).describe("Defines a DC current source for simulation"),aHt=v.object({type:v.literal("simulation_current_source"),simulation_current_source_id:io("simulation_current_source"),is_dc_source:v.literal(!1),terminal1_source_port_id:v.string().optional(),terminal2_source_port_id:v.string().optional(),terminal1_source_net_id:v.string().optional(),terminal2_source_net_id:v.string().optional(),current:oU.optional(),frequency:fL.optional(),peak_to_peak_current:oU.optional(),wave_shape:$Fe.optional(),phase:sm.optional(),duty_cycle:BRo.optional()}).describe("Defines an AC current source for simulation"),cHt=v.union([sHt,aHt]).describe("Defines a current source for simulation"),lHt=v.union([v.literal("spice_dc_sweep"),v.literal("spice_dc_operating_point"),v.literal("spice_transient_analysis"),v.literal("spice_ac_analysis")]),dHt=v.object({type:v.literal("simulation_experiment"),simulation_experiment_id:io("simulation_experiment"),name:v.string(),experiment_type:lHt,time_per_step:Xte.optional(),start_time_ms:tL.optional(),end_time_ms:tL.optional()}).describe("Defines a simulation experiment configuration"),uHt=v.object({type:v.literal("simulation_transient_voltage_graph"),simulation_transient_voltage_graph_id:io("simulation_transient_voltage_graph"),simulation_experiment_id:v.string(),timestamps_ms:v.array(v.number()).optional(),voltage_levels:v.array(v.number()),source_component_id:v.string().optional(),subcircuit_connectivity_map_key:v.string().optional(),time_per_step:Xte,start_time_ms:tL,end_time_ms:tL,name:v.string().optional(),color:v.string().optional()}).describe("Stores voltage measurements over time for a simulation"),hHt=v.object({type:v.literal("simulation_switch"),simulation_switch_id:io("simulation_switch"),source_component_id:v.string().optional(),closes_at:tL.optional(),opens_at:tL.optional(),starts_closed:v.boolean().optional(),switching_frequency:fL.optional()}).describe("Defines a switch for simulation timing control"),mHt=v.object({type:v.literal("simulation_voltage_probe"),simulation_voltage_probe_id:io("simulation_voltage_probe"),source_component_id:v.string().optional(),name:v.string().optional(),signal_input_source_port_id:v.string().optional(),signal_input_source_net_id:v.string().optional(),reference_input_source_port_id:v.string().optional(),reference_input_source_net_id:v.string().optional(),subcircuit_id:v.string().optional(),color:v.string().optional()}).describe("Defines a voltage probe for simulation. If a reference input is not provided, it measures against ground. If a reference input is provided, it measures the differential voltage between two points.").superRefine((e,t)=>{if(e.reference_input_source_port_id||e.reference_input_source_net_id){let n=!!e.signal_input_source_port_id||!!e.reference_input_source_port_id,o=!!e.signal_input_source_net_id||!!e.reference_input_source_net_id;n&&o?t.addIssue({code:v.ZodIssueCode.custom,message:"Cannot mix port and net connections in a differential probe."}):n?e.signal_input_source_port_id&&e.reference_input_source_port_id||t.addIssue({code:v.ZodIssueCode.custom,message:"Differential port probe requires both signal_input_source_port_id and reference_input_source_port_id."}):o&&(e.signal_input_source_net_id&&e.reference_input_source_net_id||t.addIssue({code:v.ZodIssueCode.custom,message:"Differential net probe requires both signal_input_source_net_id and reference_input_source_net_id."}))}else!!e.signal_input_source_port_id==!!e.signal_input_source_net_id&&t.addIssue({code:v.ZodIssueCode.custom,message:"A voltage probe must have exactly one of signal_input_source_port_id or signal_input_source_net_id."})}),pHt=vl.extend({type:v.literal("simulation_unknown_experiment_error"),simulation_unknown_experiment_error_id:io("simulation_unknown_experiment_error"),error_type:v.literal("simulation_unknown_experiment_error").default("simulation_unknown_experiment_error"),simulation_experiment_id:v.string().optional(),subcircuit_id:v.string().optional()}).describe("An unknown error occurred during the simulation experiment."),AHt=v.object({type:v.literal("simulation_op_amp"),simulation_op_amp_id:io("simulation_op_amp"),source_component_id:v.string().optional(),inverting_input_source_port_id:v.string(),non_inverting_input_source_port_id:v.string(),output_source_port_id:v.string(),positive_supply_source_port_id:v.string(),negative_supply_source_port_id:v.string()}).describe("Defines a simple ideal operational amplifier for simulation"),_Ht=v.union([kkt,Rkt,Qkt,Nkt,Fkt,Lkt,TFe,MFe,Cfe,wFe,BFe,DFe,NFe,RFe,LFe,FFe,HFe,VFe,OFe,zFe,GFe,YFe,kFe,QFe,zkt,Gkt,Hkt,UFe,WFe,XFe,KFe,jFe,Ykt,Vkt,Ukt,Wkt,Xkt,qFe,Okt,ELt,RLt,MFt,BFt,wFt,NFt,RFt,QFt,QLt,IFt,kLt,qLt,OLt,VLt,ULt,JLt,FLt,HLt,$Lt,ZLt,TFt,nFt,oFt,iFt,rFt,dFt,sFt,aFt,cFt,lFt,WLt,XLt,eFt,tFt,KLt,jLt,XFt,KFt,jFt,qFt,hFt,uFt,mFt,pFt,AFt,_Ft,gFt,fFt,yFt,DFt,xFt,CFt,kFt,EFt,LFt,FFt,HFt,YFt,VFt,UFt,WFt,JFt,$Ft,ZFt,eHt,Kkt,aLt,nLt,oLt,iLt,rLt,eLt,tLt,cLt,sLt,jkt,dLt,uLt,lLt,ALt,_Lt,gLt,fLt,CLt,yLt,xLt,nHt,rHt,cHt,dHt,uHt,hHt,mHt,pHt,AHt]),rge=_Ht;function lEt(e,t,n){if(!t||!n)return;let o=e.get(t);o||(o=new Set,e.set(t,o)),o.add(n);let i=e.get(n);i||(i=new Set,e.set(n,i)),i.add(t)}var Ey=(e,t={})=>{let n=e,o=n._internal_store;if(!o){o={counts:{},editCount:0},n._internal_store=o;for(let r of n){let s=r.type,a=r[`${s}_id`];if(!a)continue;let c=Number.parseInt(a.split("_").pop());Number.isNaN(c)||(o.counts[s]=Math.max(o.counts[s]??0,c))}}let i=new Proxy({},{get:(r,s)=>{if(s==="toArray")return()=>(n.editCount=o.editCount,n);if(s==="editCount")return o.editCount;if(s==="subtree")return(c)=>Ey(function(l,d){if(!d.subcircuit_id&&!d.source_group_id)return[...l];let u=d;if(d.subcircuit_id){let g=new Set([d.subcircuit_id]),_=new Map,f=new Map;for(let x of l)if(x.type==="source_group"){let{source_group_id:C,subcircuit_id:I}=x;I&&f.set(C,I);let b=x.parent_source_group_id;b&&(_.has(b)||_.set(b,[]),_.get(b).push(C))}let y;for(let[x,C]of f)if(C===d.subcircuit_id){y=x;break}if(y){let x=(C)=>{let I=_.get(C)||[];for(let b of I){let P=f.get(b);P&&g.add(P),x(b)}};x(y),u={...d,subcircuit_ids:Array.from(g)}}}let h=new Map;for(let g of l){let _=g[`${g.type}_id`];typeof _=="string"&&h.set(_,g)}let A=new Map;for(let g of l){let _=Object.entries(g);for(let[f,y]of _)if(f!=="parent_source_group_id"){if(f.endsWith("_id")&&typeof y=="string")lEt(A,g,h.get(y));else if(f.endsWith("_ids")&&Array.isArray(y))for(let x of y)typeof x=="string"&&lEt(A,g,h.get(x))}}let m=[],p=new Set;for(let g of l){let _=!1;(u.subcircuit_id&&("subcircuit_id"in g)&&g.subcircuit_id===u.subcircuit_id||u.subcircuit_ids&&("subcircuit_id"in g)&&g.subcircuit_id&&u.subcircuit_ids.includes(g.subcircuit_id)||u.source_group_id&&("source_group_id"in g)&&g.source_group_id===u.source_group_id||u.source_group_id&&("member_source_group_ids"in g)&&Array.isArray(g.member_source_group_ids)&&g.member_source_group_ids.includes(u.source_group_id))&&(_=!0),_&&(m.push(g),p.add(g))}for(;m.length>0;){let g=m.shift(),_=A.get(g);if(_)for(let f of _)p.has(f)||(p.add(f),m.push(f))}return l.filter((g)=>p.has(g))}(n,c),t);if(s==="insert")return(c)=>{let l=c.type;if(!l)throw Error("insert requires an element with a type");o.counts[l]??=-1,o.counts[l]++;let d=o.counts[l],u={...c,type:l,[`${l}_id`]:`${l}_${d}`};if(t.validateInserts)(ige[l]??rge).parse(u);return n.push(u),o.editCount++,u};if(s==="insertAll")return(c)=>c.map((l)=>i.insert(l));let a=s;return{get:(c)=>n.find((l)=>l.type===a&&l[`${a}_id`]===c),getUsing:(c)=>{let l=Object.keys(c);if(l.length!==1)throw Error("getUsing requires exactly one key, e.g. { pcb_component_id }");let d=l[0],u=d.replace("_id",""),h=n.find((A)=>A.type===u&&A[d]===c[d]);return h?n.find((A)=>A.type===a&&A[`${a}_id`]===h[`${a}_id`]):null},getWhere:(c)=>{let l=Object.keys(c);return n.find((d)=>d.type===a&&l.every((u)=>d[u]===c[u]))},list:(c)=>{let l=c?Object.keys(c):[];return n.filter((d)=>d.type===a&&l.every((u)=>d[u]===c[u]))},insert:(c)=>{o.counts[a]??=-1,o.counts[a]++;let l=o.counts[a],d={type:a,[`${a}_id`]:`${a}_${l}`,...c};if(t.validateInserts)(ige[a]??rge).parse(d);return n.push(d),o.editCount++,d},delete:(c)=>{let l=n.find((d)=>d[`${a}_id`]===c);l&&(n.splice(n.indexOf(l),1),o.editCount++)},update:(c,l)=>{let d=n.find((u)=>u.type===a&&u[`${a}_id`]===c);return d?(Object.assign(d,l),o.editCount++,d):null},select:(c)=>{if(a==="source_component")return n.find((l)=>l.type==="source_component"&&l.name===c.replace(/\./g,""));if(a==="pcb_port"||a==="source_port"||a==="schematic_port"){let[l,d]=c.replace(/\./g,"").split(/[\s\>]+/),u=n.find((A)=>A.type==="source_component"&&A.name===l);if(!u)return null;let h=n.find((A)=>A.type==="source_port"&&A.source_component_id===u.source_component_id&&(A.name===d||(A.port_hints??[]).includes(d)));if(!h)return null;if(a==="source_port")return h;if(a==="pcb_port")return n.find((A)=>A.type==="pcb_port"&&A.source_port_id===h.source_port_id);if(a==="schematic_port")return n.find((A)=>A.type==="schematic_port"&&A.source_port_id===h.source_port_id)}}}}});return i};Ey.unparsed=Ey;var kY=Ey;function ZDe(e){let t=e.type;return`${t}:${e[`${t}_id`]}`}var dEt=(e,t={})=>{let n=e._internal_store_indexed;if(!n){n={counts:{},editCount:0,indexes:{}};for(let s of e){let a=s.type,c=s[`${a}_id`];if(!c)continue;let l=Number.parseInt(c.split("_").pop()||"");Number.isNaN(l)||(n.counts[a]=Math.max(n.counts[a]??0,l))}let i=t.indexConfig||{},r=n.indexes;if(i.byId&&(r.byId=new Map),i.byType&&(r.byType=new Map),i.byRelation&&(r.byRelation=new Map),i.bySubcircuit&&(r.bySubcircuit=new Map),i.byCustomField&&i.byCustomField.length>0){r.byCustomField=new Map;for(let s of i.byCustomField)r.byCustomField.set(s,new Map)}for(let s of e){if(i.byId){let a=ZDe(s);r.byId.set(a,s)}if(i.byType){let a=r.byType.get(s.type)||[];a.push(s),r.byType.set(s.type,a)}if(i.byRelation){let a=Object.entries(s);for(let[c,l]of a)if(c.endsWith("_id")&&c!==`${s.type}_id`&&typeof l=="string"){let d=r.byRelation.get(c)||new Map,u=d.get(l)||[];u.push(s),d.set(l,u),r.byRelation.set(c,d)}}if(i.bySubcircuit&&"subcircuit_id"in s){let a=s.subcircuit_id;if(a&&typeof a=="string"){let c=r.bySubcircuit.get(a)||[];c.push(s),r.bySubcircuit.set(a,c)}}if(i.byCustomField&&r.byCustomField){for(let a of i.byCustomField)if(a in s){let c=s[a];if(c!==void 0&&(typeof c=="string"||typeof c=="number")){let l=String(c),d=r.byCustomField.get(a),u=d.get(l)||[];u.push(s),d.set(l,u)}}}}e._internal_store_indexed=n}return new Proxy({},{get:(i,r)=>{if(r==="toArray")return()=>(e.editCount=n.editCount,e);if(r==="editCount")return n.editCount;let s=r;return{get:(a)=>{let c=t.indexConfig||{};if(c.byId&&n.indexes.byId)return n.indexes.byId.get(`${s}:${a}`)||null;if(c.byType&&n.indexes.byType)return(n.indexes.byType.get(s)||[]).find((l)=>l[`${s}_id`]===a)||null;return e.find((l)=>l.type===s&&l[`${s}_id`]===a)||null},getUsing:(a)=>{let c=t.indexConfig||{},l=Object.keys(a);if(l.length!==1)throw Error("getUsing requires exactly one key, e.g. { pcb_component_id }");let d=l[0],u=d.replace("_id","");if(c.byRelation&&n.indexes.byRelation){let A=n.indexes.byRelation.get(d);if(A){let m=(A.get(a[d])||[]).find((g)=>g.type===u);if(!m)return null;let p=m[`${s}_id`];if(c.byId&&n.indexes.byId)return n.indexes.byId.get(`${s}:${p}`)||null;if(c.byType&&n.indexes.byType)return(n.indexes.byType.get(s)||[]).find((g)=>g[`${s}_id`]===p)||null;return e.find((g)=>g.type===s&&g[`${s}_id`]===p)||null}}let h=e.find((A)=>A.type===u&&A[d]===a[d]);return h&&e.find((A)=>A.type===s&&A[`${s}_id`]===h[`${s}_id`])||null},getWhere:(a)=>{let c=t.indexConfig||{},l=Object.keys(a);if(l.length===1&&c.byCustomField&&n.indexes.byCustomField){let d=l[0],u=n.indexes.byCustomField.get(d);if(u){let h=String(a[d]);return(u.get(h)||[]).find((A)=>A.type===s)||null}}if("subcircuit_id"in a&&c.bySubcircuit&&n.indexes.bySubcircuit){let d=a.subcircuit_id;return(n.indexes.bySubcircuit.get(d)||[]).find((u)=>u.type===s&&l.every((h)=>u[h]===a[h]))||null}if(c.byType&&n.indexes.byType)return(n.indexes.byType.get(s)||[]).find((d)=>l.every((u)=>d[u]===a[u]))||null;return e.find((d)=>d.type===s&&l.every((u)=>d[u]===a[u]))||null},list:(a)=>{let c=t.indexConfig||{},l=a?Object.keys(a):[];if(l.length===0&&c.byType&&n.indexes.byType)return n.indexes.byType.get(s)||[];if(l.length===1&&l[0]==="subcircuit_id"&&c.bySubcircuit&&n.indexes.bySubcircuit){let u=a.subcircuit_id;return(n.indexes.bySubcircuit.get(u)||[]).filter((h)=>h.type===s)}let d;return d=c.byType&&n.indexes.byType?n.indexes.byType.get(s)||[]:e.filter((u)=>u.type===s),l.length>0?d.filter((u)=>l.every((h)=>u[h]===a[h])):d},insert:(a)=>{n.counts[s]??=-1,n.counts[s]++;let c=n.counts[s],l={type:s,[`${s}_id`]:`${s}_${c}`,...a};if(t.validateInserts)(ige[s]??rge).parse(l);e.push(l),n.editCount++;let d=t.indexConfig||{};if(d.byId&&n.indexes.byId){let u=ZDe(l);n.indexes.byId.set(u,l)}if(d.byType&&n.indexes.byType){let u=n.indexes.byType.get(s)||[];u.push(l),n.indexes.byType.set(s,u)}if(d.byRelation&&n.indexes.byRelation){let u=Object.entries(l);for(let[h,A]of u)if(h.endsWith("_id")&&h!==`${l.type}_id`&&typeof A=="string"){let m=n.indexes.byRelation.get(h)||new Map,p=m.get(A)||[];p.push(l),m.set(A,p),n.indexes.byRelation.set(h,m)}}if(d.bySubcircuit&&n.indexes.bySubcircuit&&"subcircuit_id"in l){let u=l.subcircuit_id;if(u&&typeof u=="string"){let h=n.indexes.bySubcircuit.get(u)||[];h.push(l),n.indexes.bySubcircuit.set(u,h)}}if(d.byCustomField&&n.indexes.byCustomField){for(let u of d.byCustomField)if(u in l){let h=l[u];if(h!==void 0&&(typeof h=="string"||typeof h=="number")){let A=String(h),m=n.indexes.byCustomField.get(u),p=m.get(A)||[];p.push(l),m.set(A,p)}}}return l},delete:(a)=>{let c=t.indexConfig||{},l;if(c.byId&&n.indexes.byId)l=n.indexes.byId.get(`${s}:${a}`);else if(c.byType&&n.indexes.byType)l=(n.indexes.byType.get(s)||[]).find((h)=>h[`${s}_id`]===a);else l=e.find((u)=>u[`${s}_id`]===a);if(!l)return;let d=e.indexOf(l);if(d>=0&&(e.splice(d,1),n.editCount++),c.byId&&n.indexes.byId){let u=ZDe(l);n.indexes.byId.delete(u)}if(c.byType&&n.indexes.byType){let u=(n.indexes.byType.get(s)||[]).filter((h)=>h[`${s}_id`]!==a);n.indexes.byType.set(s,u)}if(c.byRelation&&n.indexes.byRelation)for(let[u,h]of n.indexes.byRelation.entries())for(let[A,m]of h.entries()){let p=m.filter((g)=>g!==l);p.length===0?h.delete(A):h.set(A,p)}if(c.bySubcircuit&&n.indexes.bySubcircuit&&"subcircuit_id"in l){let u=l.subcircuit_id;if(u){let h=(n.indexes.bySubcircuit.get(u)||[]).filter((A)=>A!==l);h.length===0?n.indexes.bySubcircuit.delete(u):n.indexes.bySubcircuit.set(u,h)}}if(c.byCustomField&&n.indexes.byCustomField)for(let u of n.indexes.byCustomField.values())for(let[h,A]of u.entries()){let m=A.filter((p)=>p!==l);m.length===0?u.delete(h):u.set(h,m)}},update:(a,c)=>{let l=t.indexConfig||{},d;if(l.byId&&n.indexes.byId)d=n.indexes.byId.get(`${s}:${a}`);else if(l.byType&&n.indexes.byType)d=(n.indexes.byType.get(s)||[]).find((h)=>h[`${s}_id`]===a);else d=e.find((u)=>u.type===s&&u[`${s}_id`]===a);if(!d)return null;if(l.byRelation&&n.indexes.byRelation){let u=Object.entries(d);for(let[h,A]of u)if(h.endsWith("_id")&&h!==`${d.type}_id`&&typeof A=="string"&&h in c&&c[h]!==A){let m=n.indexes.byRelation.get(h);if(m){let p=(m.get(A)||[]).filter((g)=>g!==d);p.length===0?m.delete(A):m.set(A,p)}}}if(l.bySubcircuit&&n.indexes.bySubcircuit&&"subcircuit_id"in d&&"subcircuit_id"in c){let u=d.subcircuit_id;if(u!==c.subcircuit_id){let h=(n.indexes.bySubcircuit.get(u)||[]).filter((A)=>A!==d);h.length===0?n.indexes.bySubcircuit.delete(u):n.indexes.bySubcircuit.set(u,h)}}if(l.byCustomField&&n.indexes.byCustomField){for(let u of l.byCustomField)if(u in d&&u in c&&d[u]!==c[u]){let h=n.indexes.byCustomField.get(u);if(h){let A=String(d[u]),m=(h.get(A)||[]).filter((p)=>p!==d);m.length===0?h.delete(A):h.set(A,m)}}}if(Object.assign(d,c),n.editCount++,l.byRelation&&n.indexes.byRelation){let u=Object.entries(d);for(let[h,A]of u)if(h.endsWith("_id")&&h!==`${d.type}_id`&&typeof A=="string"&&h in c){let m=n.indexes.byRelation.get(h)||new Map,p=m.get(A)||[];p.includes(d)||(p.push(d),m.set(A,p),n.indexes.byRelation.set(h,m))}}if(l.bySubcircuit&&n.indexes.bySubcircuit&&"subcircuit_id"in d&&"subcircuit_id"in c){let u=d.subcircuit_id;if(u&&typeof u=="string"){let h=n.indexes.bySubcircuit.get(u)||[];h.includes(d)||(h.push(d),n.indexes.bySubcircuit.set(u,h))}}if(l.byCustomField&&n.indexes.byCustomField){for(let u of l.byCustomField)if(u in d&&u in c){let h=d[u];if(h!==void 0&&(typeof h=="string"||typeof h=="number")){let A=String(h),m=n.indexes.byCustomField.get(u),p=m.get(A)||[];p.includes(d)||(p.push(d),m.set(A,p))}}}return d},select:(a)=>{if(s==="source_component")return e.find((c)=>c.type==="source_component"&&c.name===a.replace(/\./g,""))||null;if(s==="pcb_port"||s==="source_port"||s==="schematic_port"){let[c,l]=a.replace(/\./g,"").split(/[\s\>]+/),d=e.find((h)=>h.type==="source_component"&&h.name===c);if(!d)return null;let u=e.find((h)=>h.type==="source_port"&&h.source_component_id===d.source_component_id&&(h.name===l||(h.port_hints??[]).includes(l)));if(!u)return null;if(s==="source_port")return u;if(s==="pcb_port")return e.find((h)=>h.type==="pcb_port"&&h.source_port_id===u.source_port_id)||null;if(s==="schematic_port")return e.find((h)=>h.type==="schematic_port"&&h.source_port_id===u.source_port_id)||null}return null}}}})};dEt.unparsed=dEt;var uEt=(e)=>e[`${e.type}_id`];function wRo(e,t){let n=Ey(e).pcb_trace.get(t);if(!n)return`trace[${t}]`;let o=n.route.flatMap((i)=>[i.start_pcb_port_id,i.end_pcb_port_id]).filter(Boolean);if(o.length===0)return`trace[${t}]`;return`trace[${o.map((i)=>{let r=function(s){let a=Ey(e).pcb_port.get(s);if(!a)return null;let c=a.pcb_component_id?Ey(e).pcb_component.get(a.pcb_component_id):void 0;if(!c)return null;let l=Ey(e).source_component.get(c.source_component_id);if(!l)return null;let d=Ey(e).source_port.get(a.source_port_id),u=d?.port_hints?d.port_hints[1]:"";return{componentName:l.name,portHint:u}}(i);return r?`.${r.componentName} > port.${r.portHint}`:`port[${i}]`}).join(", ")}]`}var hEt=(e,t)=>{let n=Ey(e).pcb_port.get(t);if(!n)return`pcb_port[#${t}]`;let o=n.pcb_component_id?Ey(e).pcb_component.get(n.pcb_component_id):void 0;if(!o)return`pcb_port[#${t}]`;let i=Ey(e).source_component.get(o.source_component_id);if(!i)return`pcb_port[#${t}]`;let r=Ey(e).source_port.get(n.source_port_id);if(!r)return`pcb_port[#${t}]`;let s;return s=r?.port_hints&&r.port_hints.length>0||r.port_hints&&r.port_hints.length>0?r.port_hints[0]:t,`pcb_port[.${i.name} > .${s}]`},iU=(e,t)=>{if(typeof t=="string"){let n=((o,i)=>o.find((r)=>uEt(r)===i)??null)(e,t);return iU(e,n)}switch(t.type){case"pcb_port":return hEt(e,t.pcb_port_id);case"pcb_smtpad":return function(n,o){let i=Ey(n).pcb_smtpad.get(o);return i&&i.pcb_port_id?hEt(n,i.pcb_port_id):`smtpad[${o}]`}(e,t.pcb_smtpad_id);case"pcb_trace":return wRo(e,t.pcb_trace_id);case"source_component":return`source_component[${t.name}]`;default:return`${t.type}[#${uEt(t)}]`}},mEt=(e,t)=>({minX:Math.min(e.minX,t.minX),minY:Math.min(e.minY,t.minY),maxX:Math.max(e.maxX,t.maxX),maxY:Math.max(e.maxY,t.maxY)}),mAe=(e,t,n)=>{let o=n/2;return{minX:e-o,minY:t-o,maxX:e+o,maxY:t+o}},TRo=(e,t,n,o,i)=>{let r=n/2,s=o/2,a=i*Math.PI/180,c=Math.cos(a),l=Math.sin(a),d=[{x:-r,y:-s},{x:r,y:-s},{x:r,y:s},{x:-r,y:s}].map((u)=>({x:e+u.x*c-u.y*l,y:t+u.x*l+u.y*c}));return{minX:Math.min(...d.map((u)=>u.x)),minY:Math.min(...d.map((u)=>u.y)),maxX:Math.max(...d.map((u)=>u.x)),maxY:Math.max(...d.map((u)=>u.y))}},eNe=(e)=>e[`${e.type}_id`];function pEt(e,t,n,o){return Math.sqrt((n-e)**2+(o-t)**2)}var DRo=class{buckets;objectsById;getBounds;getId;CELL_SIZE=0.4;constructor({objects:e,getBounds:t,getId:n,CELL_SIZE:o}){this.buckets=new Map,this.objectsById=new Map,this.getBounds=t,this.getId=n??(()=>this._getNextId()),this.CELL_SIZE=o??this.CELL_SIZE;for(let i of e)this.addObject(i)}_idCounter=0;_getNextId(){return""+this._idCounter++}addObject(e){let t=this.getBounds(e),n=this.getId(e),o={...e,spatialIndexId:n};this.objectsById.set(n,o);let i=Math.floor(t.minX/this.CELL_SIZE),r=Math.floor(t.minY/this.CELL_SIZE),s=Math.floor(t.maxX/this.CELL_SIZE),a=Math.floor(t.maxY/this.CELL_SIZE);for(let c=i;c<=s;c++)for(let l=r;l<=a;l++){let d=`${c}x${l}`,u=this.buckets.get(d);u?u.push(o):this.buckets.set(d,[o])}}removeObject(e){let t=this.objectsById.get(e);if(!t)return!1;this.objectsById.delete(e);let n=this.getBounds(t),o=Math.floor(n.minX/this.CELL_SIZE),i=Math.floor(n.minY/this.CELL_SIZE),r=Math.floor(n.maxX/this.CELL_SIZE),s=Math.floor(n.maxY/this.CELL_SIZE);for(let a=o;a<=r;a++)for(let c=i;c<=s;c++){let l=`${a}x${c}`,d=this.buckets.get(l);if(d){let u=d.findIndex((h)=>h.spatialIndexId===e);u!==-1&&(d.splice(u,1),d.length===0&&this.buckets.delete(l))}}return!0}getBucketKey(e,t){return`${Math.floor(e/this.CELL_SIZE)}x${Math.floor(t/this.CELL_SIZE)}`}getObjectsInBounds(e,t=0){let n=[],o=new Set,i=Math.floor((e.minX-t)/this.CELL_SIZE),r=Math.floor((e.minY-t)/this.CELL_SIZE),s=Math.floor((e.maxX+t)/this.CELL_SIZE),a=Math.floor((e.maxY+t)/this.CELL_SIZE);for(let c=i;c<=s;c++)for(let l=r;l<=a;l++){let d=`${c}x${l}`,u=this.buckets.get(d)||[];for(let h of u){let A=h.spatialIndexId;o.has(A)||(o.add(A),n.push(h))}}return n}},gHt=0.1,NRo=0.1,RRo=gHt,QRo=gHt,wV=0.005;function kRo(e){return e.type==="pcb_trace_segment"||e.type==="pcb_smtpad"?[e.layer]:e.type==="pcb_plated_hole"?Array.isArray(e.layers)?e.layers:[...Dee]:e.type==="pcb_hole"?[...Dee]:e.type==="pcb_via"?Array.isArray(e.layers)?e.layers:[...Dee]:e.type==="pcb_keepout"&&Array.isArray(e.layers)?e.layers:[]}var AEt=(e,t)=>{let n={x:e.x1,y:e.y1},o={x:e.x2,y:e.y2},{minX:i,minY:r,maxX:s,maxY:a}=t;if(n.x===o.x&&n.y===o.y){let P=Math.max(i,Math.min(s,n.x)),E=Math.max(r,Math.min(a,n.y));return P===n.x&&E===n.y?{x:n.x,y:n.y}:{x:P,y:E}}let c=o.x-n.x,l=o.y-n.y,d=c!==0?(i-n.x)/c:Number.NEGATIVE_INFINITY,u=c!==0?(s-n.x)/c:Number.POSITIVE_INFINITY,h=l!==0?(r-n.y)/l:Number.NEGATIVE_INFINITY,A=l!==0?(a-n.y)/l:Number.POSITIVE_INFINITY,m=Math.max(Math.min(d,u),Math.min(h,A)),p=Math.min(Math.max(d,u),Math.max(h,A));if(m<=p&&p>=0&&m<=1){let P=Math.max(0,Math.min(1,m));return{x:n.x+P*c,y:n.y+P*l}}let g={x:Math.max(i,Math.min(s,n.x)),y:Math.max(r,Math.min(a,n.y))},_={x:Math.max(i,Math.min(s,o.x)),y:Math.max(r,Math.min(a,o.y))},f=(g.x-n.x)**2+(g.y-n.y)**2,y=(_.x-o.x)**2+(_.y-o.y)**2,x=[{start:{x:i,y:r},end:{x:s,y:r}},{start:{x:s,y:r},end:{x:s,y:a}},{start:{x:s,y:a},end:{x:i,y:a}},{start:{x:i,y:a},end:{x:i,y:r}}],C=Math.min(f,y),I=f<=y?g:_,b=(P,E,B)=>Math.max(E,Math.min(B,P));for(let P of x){let E={x:o.x-n.x,y:o.y-n.y},B={x:P.end.x-P.start.x,y:P.end.y-P.start.y},w={x:n.x-P.start.x,y:n.y-P.start.y},T=E.x*E.x+E.y*E.y,Q=E.x*B.x+E.y*B.y,N=E.x*w.x+E.y*w.y,F=B.x*B.x+B.y*B.y,H=B.x*w.x+B.y*w.y,z=T*F-Q*Q;if(Math.abs(z)<0.0000000001)continue;let Y=(Q*H-F*N)/z,U=(T*H-Q*N)/z;Y=b(Y,0,1),U=b(U,0,1);let X={x:n.x+Y*E.x,y:n.y+Y*E.y},V={x:P.start.x+U*B.x,y:P.start.y+U*B.y},W=X.x-V.x,j=X.y-V.y,q=W*W+j*j;q<C&&(C=q,I={x:(X.x+V.x)/2,y:(X.y+V.y)/2})}return I},LRo=(e,t)=>{let n={x:e.x1,y:e.y1},o={x:e.x2,y:e.y2},i={x:t.x1,y:t.y1},r={x:t.x2,y:t.y2},s={x:o.x-n.x,y:o.y-n.y},a={x:r.x-i.x,y:r.y-i.y},c=s.x*s.x+s.y*s.y,l=a.x*a.x+a.y*a.y;if(c===0||l===0){if(c===0&&l===0)return{x:(n.x+i.x)/2,y:(n.y+i.y)/2};if(c===0){let T=yE(((n.x-i.x)*a.x+(n.y-i.y)*a.y)/l,0,1),Q={x:i.x+T*a.x,y:i.y+T*a.y};return{x:(n.x+Q.x)/2,y:(n.y+Q.y)/2}}let B=yE(((i.x-n.x)*s.x+(i.y-n.y)*s.y)/c,0,1),w={x:n.x+B*s.x,y:n.y+B*s.y};return{x:(w.x+i.x)/2,y:(w.y+i.y)/2}}let d=n.x-i.x,u=n.y-i.y,h=s.x*s.x+s.y*s.y,A=s.x*a.x+s.y*a.y,m=s.x*d+s.y*u,p=a.x*a.x+a.y*a.y,g=a.x*d+a.y*u,_=h*p-A*A;if(_<0.0000000001)return FRo(n,o,i,r,s,a,c,l);let f=(A*g-p*m)/_,y=(h*g-A*m)/_;f=yE(f,0,1),y=yE(y,0,1),y=(f*A+g)/p,y=yE(y,0,1),f=(y*A-m)/h,f=yE(f,0,1);let x=n.x+f*s.x,C=n.y+f*s.y,I=i.x+y*a.x,b=i.y+y*a.y,P=x-I,E=C-b;return Math.sqrt(P*P+E*E),{x:(x+I)/2,y:(C+b)/2}},FRo=(e,t,n,o,i,r,s,a)=>{let c=((n.x-e.x)*i.x+(n.y-e.y)*i.y)/s;c=yE(c,0,1);let l={x:e.x+c*i.x,y:e.y+c*i.y},d=((o.x-e.x)*i.x+(o.y-e.y)*i.y)/s;d=yE(d,0,1);let u={x:e.x+d*i.x,y:e.y+d*i.y},h=((e.x-n.x)*r.x+(e.y-n.y)*r.y)/a;h=yE(h,0,1);let A={x:n.x+h*r.x,y:n.y+h*r.y},m=((t.x-n.x)*r.x+(t.y-n.y)*r.y)/a;m=yE(m,0,1);let p={x:n.x+m*r.x,y:n.y+m*r.y},g=[{pointA:l,pointB:n,distance:Math.sqrt((l.x-n.x)**2+(l.y-n.y)**2)},{pointA:u,pointB:o,distance:Math.sqrt((u.x-o.x)**2+(u.y-o.y)**2)},{pointA:e,pointB:A,distance:Math.sqrt((e.x-A.x)**2+(e.y-A.y)**2)},{pointA:t,pointB:p,distance:Math.sqrt((t.x-p.x)**2+(t.y-p.y)**2)}].reduce((_,f)=>f.distance<_.distance?f:_);return{x:(g.pointA.x+g.pointB.x)/2,y:(g.pointA.y+g.pointB.y)/2}},yE=(e,t,n)=>Math.max(t,Math.min(n,e)),HZ=(e)=>e.type==="pcb_trace_segment"?{minX:Math.min(e.x1,e.x2),minY:Math.min(e.y1,e.y2),maxX:Math.max(e.x1,e.x2),maxY:Math.max(e.y1,e.y2)}:((t)=>{let{POSITIVE_INFINITY:n,POSITIVE_INFINITY:o,NEGATIVE_INFINITY:i,NEGATIVE_INFINITY:r}=Number;for(let s of t){if(!s.type.startsWith("pcb_"))continue;if(s.type==="pcb_smtpad"&&s.shape==="polygon"&&Array.isArray(s.points)){for(let u of s.points)n=Math.min(n,u.x),o=Math.min(o,u.y),i=Math.max(i,u.x),r=Math.max(r,u.y);continue}if(s.type==="pcb_hole"&&s.hole_shape==="circle"){let u=mAe(s.x,s.y,s.hole_diameter);n=Math.min(n,u.minX),o=Math.min(o,u.minY),i=Math.max(i,u.maxX),r=Math.max(r,u.maxY);continue}if(s.type==="pcb_plated_hole"){let u;if("outer_diameter"in s&&typeof s.outer_diameter=="number"?u=mAe(s.x,s.y,s.outer_diameter):("hole_diameter"in s)&&typeof s.hole_diameter=="number"&&(u=mAe(s.x,s.y,s.hole_diameter)),"rect_pad_width"in s&&typeof s.rect_pad_width=="number"&&"rect_pad_height"in s&&typeof s.rect_pad_height=="number"){let h=TRo(s.x,s.y,s.rect_pad_width,s.rect_pad_height,"rect_ccw_rotation"in s?s.rect_ccw_rotation??0:0);u=u?mEt(u,h):h}if("hole_diameter"in s&&typeof s.hole_diameter=="number"){let h=mAe(s.x+("hole_offset_x"in s?s.hole_offset_x??0:0),s.y+("hole_offset_y"in s?s.hole_offset_y??0:0),s.hole_diameter);u=u?mEt(u,h):h}if(u){n=Math.min(n,u.minX),o=Math.min(o,u.minY),i=Math.max(i,u.maxX),r=Math.max(r,u.maxY);continue}}let a,c,l,d;if("x"in s&&"y"in s&&(a=Number(s.x),c=Number(s.y)),"outer_diameter"in s&&(l=Number(s.outer_diameter),d=Number(s.outer_diameter)),"width"in s&&(l=Number(s.width)),"height"in s&&(d=Number(s.height)),"center"in s&&(a=s.center.x,c=s.center.y),a!==void 0&&c!==void 0)n=Math.min(n,a),o=Math.min(o,c),i=Math.max(i,a),r=Math.max(r,c),l!==void 0&&d!==void 0&&(n=Math.min(n,a-l/2),o=Math.min(o,c-d/2),i=Math.max(i,a+l/2),r=Math.max(r,c+d/2)),"radius"in s&&(n=Math.min(n,a-s.radius),o=Math.min(o,c-s.radius),i=Math.max(i,a+s.radius),r=Math.max(r,c+s.radius));else if(s.type==="pcb_trace")for(let u of s.route)n=Math.min(n,u.x),o=Math.min(o,u.y),i=Math.max(i,u.x),r=Math.max(r,u.y);else if(s.type==="pcb_courtyard_outline")for(let u of s.outline)n=Math.min(n,u.x),o=Math.min(o,u.y),i=Math.max(i,u.x),r=Math.max(r,u.y);else if(s.type==="pcb_courtyard_polygon")for(let u of s.points)n=Math.min(n,u.x),o=Math.min(o,u.y),i=Math.max(i,u.x),r=Math.max(r,u.y)}return{minX:n,minY:o,maxX:i,maxY:r}})([e]);function HRo(e){let t=new Set;for(let n of e.route)n.route_type==="wire"&&(n.start_pcb_port_id&&t.add(n.start_pcb_port_id),n.end_pcb_port_id&&t.add(n.end_pcb_port_id));return Array.from(t)}function tNe(e){let t=new Set;for(let n of e)for(let o of HRo(n))t.add(o);return Array.from(t)}var ORo=(e)=>{if(e.type==="pcb_via")return e.outer_diameter/2;if(e.type==="pcb_plated_hole"&&e.shape==="circle")return e.outer_diameter/2;if(e.type==="pcb_hole"&&e.hole_shape==="circle")return e.hole_diameter/2;if(e.type==="pcb_smtpad"&&e.shape==="circle")return e.radius;throw Error(`Could not determine radius of element: ${JSON.stringify(e)}`)};function zRo(e,{connMap:t,minClearance:n=0.1}={}){let o=[];((p)=>{let g=p.filter((x)=>x.type==="pcb_port"),_=p.filter((x)=>x.type==="pcb_smtpad"),f=p.filter((x)=>x.type==="pcb_trace");function y(x,C={}){let I=C.traceWidth||0,b=g.find((P)=>pEt(P.x,P.y,x.x,x.y)<0.01);if(b)return b.pcb_port_id;if(C.isFirstOrLastPoint){let P=_.find((E)=>E.shape==="rect"?Math.abs(x.x-E.x)<E.width/2+I/2&&Math.abs(x.y-E.y)<E.height/2+I/2:E.shape==="circle"?pEt(x.x,x.y,E.x,E.y)<E.radius:void 0);if(P)return P.pcb_port_id??null}return null}for(let x of f)for(let C=0;C<x.route.length;C++){let I=x.route[C],b=C===0||C===x.route.length-1;if(I.route_type==="wire"){if(!I.start_pcb_port_id&&C===0){let P=y(I,{isFirstOrLastPoint:b,traceWidth:I.width});P&&(I.start_pcb_port_id=P)}if(!I.end_pcb_port_id&&C===x.route.length-1){let P=y(I,{isFirstOrLastPoint:b,traceWidth:I.width});P&&(I.end_pcb_port_id=P)}}}})(e),t??=bFe(e);let i=kY(e).pcb_trace.list().flatMap((p)=>{let g=[];for(let _=0;_<p.route.length-1;_++){let f=p.route[_],y=p.route[_+1];f.route_type==="wire"&&(y.route_type==="wire"&&f.layer===y.layer&&g.push({type:"pcb_trace_segment",pcb_trace_id:p.pcb_trace_id,_pcbTrace:p,thickness:"width"in f?f.width:("width"in y)?y.width:NRo,layer:f.layer,x1:f.x,y1:f.y,x2:y.x,y2:y.y}))}return g}),r=kY(e).pcb_smtpad.list(),s=kY(e).pcb_plated_hole.list(),a=kY(e).pcb_hole.list(),c=kY(e).pcb_via.list(),l=kY(e).pcb_keepout.list(),d=[...i,...r,...s,...a,...c,...l],u=new DRo({objects:d,getBounds:HZ}),h=(p)=>iU(e,p),A=(p,g,_)=>_<0?`PCB trace ${p} overlaps with ${g} (accidental contact)`:`PCB trace ${p} is too close to ${g} (gap: ${_.toFixed(3)}mm)`,m=new Set;for(let p of i){let g=n,_=HZ(p),f=u.getObjectsInBounds(_,g+p.thickness/2);if(p.x1!==p.x2||p.y1!==p.y2)for(let y of f){if(!kRo(y).includes(p.layer))continue;if(y.type==="pcb_trace_segment"){let I=y;if(p.layer!==I.layer)continue;if(t.areIdsConnected(p.pcb_trace_id,I.pcb_trace_id))continue;let b=Um({x:p.x1,y:p.y1},{x:p.x2,y:p.y2},{x:I.x1,y:I.y1},{x:I.x2,y:I.y2})-p.thickness/2-I.thickness/2;if(b>n-wV)continue;let P=`overlap_${p.pcb_trace_id}_${I.pcb_trace_id}`,E=`overlap_${I.pcb_trace_id}_${p.pcb_trace_id}`;if(m.has(P))continue;if(m.has(E))continue;m.add(P),o.push({type:"pcb_trace_error",error_type:"pcb_trace_error",message:A(h(p.pcb_trace_id),h(I.pcb_trace_id),b),pcb_trace_id:p.pcb_trace_id,source_trace_id:"",pcb_trace_error_id:P,pcb_component_ids:[],center:LRo(p,I),pcb_port_ids:tNe([p._pcbTrace,I._pcbTrace])});continue}let x=eNe(y);if(t.areIdsConnected(p.pcb_trace_id,"pcb_trace_id"in y?y.pcb_trace_id:x))continue;if(y.type==="pcb_via"||y.type==="pcb_plated_hole"&&y.shape==="circle"||y.type==="pcb_hole"||y.type==="pcb_smtpad"&&y.shape==="circle"){let I=ORo(y),b=q8({x:p.x1,y:p.y1},{x:p.x2,y:p.y2},{x:y.x,y:y.y,radius:I})-p.thickness/2;if(b>n-wV)continue;let P=`overlap_${p.pcb_trace_id}_${x}`;if(m.has(P))continue;m.add(P),o.push({type:"pcb_trace_error",error_type:"pcb_trace_error",message:A(h(p.pcb_trace_id),`${y.type} "${h(eNe(y))}"`,b),pcb_trace_id:p.pcb_trace_id,center:AEt(p,HZ(y)),source_trace_id:"",pcb_trace_error_id:P,pcb_component_ids:["pcb_component_id"in y?y.pcb_component_id:void 0].filter(Boolean),pcb_port_ids:[...tNe([p._pcbTrace]),"pcb_port_id"in y?y.pcb_port_id:void 0].filter(Boolean)})}let C=dL({x:p.x1,y:p.y1},{x:p.x2,y:p.y2},HZ(y))-p.thickness/2;if(C+wV<g){let I=`overlap_${p.pcb_trace_id}_${x}`;if(m.has(I))continue;m.add(I),o.push({type:"pcb_trace_error",error_type:"pcb_trace_error",message:A(h(p.pcb_trace_id),`${y.type} "${h(eNe(y))}"`,C),pcb_trace_id:p.pcb_trace_id,source_trace_id:"",pcb_trace_error_id:I,pcb_component_ids:["pcb_component_id"in y?y.pcb_component_id:void 0].filter(Boolean),center:AEt(p,HZ(y)),pcb_port_ids:[...tNe([p._pcbTrace]),"pcb_port_id"in y?y.pcb_port_id:void 0].filter(Boolean)})}}}return o}function ZFe(e,t){return Math.hypot(e.x-t.x,e.y-t.y)}function fHt(e,t){return ZFe(e,t)<=wV}function GRo(e,{connMap:t,minClearance:n=RRo}={}){let o=e.filter((s)=>s.type==="pcb_via");if(o.length<2)return[];t??=bFe(e);let i=[],r=new Set;for(let s=0;s<o.length;s++)for(let a=s+1;a<o.length;a++){let c=o[s],l=o[a];if(fHt(c,l))continue;if(!t.areIdsConnected(c.pcb_via_id,l.pcb_via_id))continue;let d=ZFe(c,l)-c.outer_diameter/2-l.outer_diameter/2;if(d+wV>=n)continue;let u=[c.pcb_via_id,l.pcb_via_id].sort().join("_");r.has(u)||(r.add(u),i.push({type:"pcb_via_clearance_error",pcb_error_id:`same_net_vias_close_${u}`,message:`Vias ${iU(e,c.pcb_via_id)} and ${iU(e,l.pcb_via_id)} are too close together (gap: ${d.toFixed(3)}mm)`,error_type:"pcb_via_clearance_error",pcb_via_ids:[c.pcb_via_id,l.pcb_via_id],minimum_clearance:n,actual_clearance:d,pcb_center:{x:(c.x+l.x)/2,y:(c.y+l.y)/2}}))}return i}function YRo(e,{connMap:t,minClearance:n=QRo}={}){let o=e.filter((s)=>s.type==="pcb_via");if(o.length<2)return[];t??=bFe(e);let i=[],r=new Set;for(let s=0;s<o.length;s++)for(let a=s+1;a<o.length;a++){let c=o[s],l=o[a];if(fHt(c,l))continue;if(t.areIdsConnected(c.pcb_via_id,l.pcb_via_id))continue;let d=ZFe(c,l)-c.outer_diameter/2-l.outer_diameter/2;if(d+wV>=n)continue;let u=[c.pcb_via_id,l.pcb_via_id].sort().join("_");r.has(u)||(r.add(u),i.push({type:"pcb_via_clearance_error",pcb_error_id:`different_net_vias_close_${u}`,message:`Vias ${iU(e,c.pcb_via_id)} and ${iU(e,l.pcb_via_id)} from different nets are too close together (gap: ${d.toFixed(3)}mm)`,error_type:"pcb_via_clearance_error",pcb_via_ids:[c.pcb_via_id,l.pcb_via_id],minimum_clearance:n,actual_clearance:d,pcb_center:{x:(c.x+l.x)/2,y:(c.y+l.y)/2}}))}return i}var nNe=(e)=>({minSpacing:e,minClearance:e}),m1={traceClearance:0.1,viaClearance:0.1},yHt=(e)=>((t)=>("layer"in t))(e)?[e.layer]:e.layers;function VRo(e,t,n){let o,i=Number.POSITIVE_INFINITY;for(let r of t){let s=n.get(r);if(!s)continue;let a=Math.hypot(s.x-e.x,s.y-e.y);a<i&&(i=a,o=r)}return o??t[0]}function URo(e){let t=[],n=new Set,o=new Set,i=function(r){let s=new Map;for(let a of r.connections)for(let c of a.pointsToConnect)c.pcb_port_id&&s.set(c.pcb_port_id,{x:c.x,y:c.y});return s}(e);for(let r of e.obstacles){let s=r.connectedTo,a=s.find((y)=>y.startsWith("pcb_smtpad_")),c=s.find((y)=>y.startsWith("pcb_plated_hole_")),l=s.filter((y)=>y.startsWith("pcb_port_")),d=VRo(r.center,l,i);if(!a&&!c&&!d)continue;let u=r.layers;if(u.length===0)continue;let{width:h,height:A}=r,m=r.center.x,p=r.center.y,g=r.ccwRotationDegrees,_=typeof g=="number"&&Number.isFinite(g);if(u.length>1){let y=c??`pcb_plated_hole_${m.toFixed(3)}_${p.toFixed(3)}`;if(o.has(y))continue;if(o.add(y),_){let x=Math.max(0.5*Math.min(h,A),0.1);t.push({type:"pcb_plated_hole",pcb_plated_hole_id:y,shape:"rotated_pill_hole_with_rect_pad",hole_shape:"rotated_pill",pad_shape:"rect",hole_width:x,hole_height:x,hole_ccw_rotation:g,rect_pad_width:h,rect_pad_height:A,rect_ccw_rotation:g,hole_offset_x:0,hole_offset_y:0,x:m,y:p,layers:u,...d?{pcb_port_id:d}:{}});continue}if(Math.abs(h-A)<0.001){t.push({type:"pcb_plated_hole",pcb_plated_hole_id:y,shape:"circle",outer_diameter:Math.max(h,A),hole_diameter:Math.max(0.5*Math.min(h,A),0.1),x:m,y:p,layers:u,...d?{pcb_port_id:d}:{}});continue}t.push({type:"pcb_plated_hole",pcb_plated_hole_id:y,shape:"circular_hole_with_rect_pad",hole_shape:"circle",hole_diameter:Math.max(0.5*Math.min(h,A),0.1),rect_pad_width:h,rect_pad_height:A,hole_offset_x:0,hole_offset_y:0,x:m,y:p,layers:u,...d?{pcb_port_id:d}:{}});continue}let f=a??`pcb_smtpad_${m.toFixed(3)}_${p.toFixed(3)}`;n.has(f)||(n.add(f),_?t.push({type:"pcb_smtpad",pcb_smtpad_id:f,layer:u[0],shape:"rotated_rect",x:m,y:p,width:h,height:A,ccw_rotation:g,...d?{pcb_port_id:d}:{}}):t.push({type:"pcb_smtpad",pcb_smtpad_id:f,layer:u[0],shape:"rect",width:h,height:A,x:m,y:p,...d?{pcb_port_id:d}:{}}))}return t}function WRo(e,t,n=0.1,o=e.minViaDiameter??0.3){let i=[];i.push(...function(s,a){let c=[];return s.connections.forEach((l)=>{let d=l.pointsToConnect.filter((p)=>p.pcb_port_id).map((p)=>p.pcb_port_id).filter(Boolean),u=l.netConnectionName||l.rootConnectionName||l.name,h=[],A=a.find((p)=>(p.connection_name??p.connectionName)===l.name);if(A){let p=(_)=>("route_type"in _)&&_.route_type==="jumper"?_.start:("x"in _)&&("y"in _)?{x:_.x,y:_.y}:{x:0,y:0},g=[p(A.route[0]),p(A.route[A.route.length-1])];for(let _ of g)for(let f of s.obstacles)jE(_,f)<=0&&h.push(f)}let m=c.find((p)=>p.type==="source_trace"&&p.source_trace_id===u);if(m){let p=m;p.connected_source_port_ids=[...new Set([...p.connected_source_port_ids,...d])]}else c.push({type:"source_trace",source_trace_id:u,connected_source_port_ids:d.concat(h.flatMap((p)=>[`obstacle_${p.center.x.toFixed(3)}_${p.center.y.toFixed(3)}_${p.layers.join(".")}`,...p.connectedTo])),connected_source_net_ids:[]})}),c}(e,t)),i.push(...function(s){let a=new Map;return s.connections.forEach((c)=>{c.pointsToConnect.forEach((l)=>{l.pcb_port_id&&a.set(l.pcb_port_id,{type:"pcb_port",pcb_port_id:l.pcb_port_id,source_port_id:l.pcb_port_id,x:l.x,y:l.y,layers:yHt(l)})})}),Array.from(a.values())}(e)),i.push(...URo(e)),i.push(...function(s,a,c=0.3,l=!1){let d=[],u=new Set;return s.length>0&&("type"in s[0]&&s[0].type==="pcb_trace"?s.forEach((h)=>{h.route.forEach((A)=>{if(A.route_type==="via"){let m=A.via_diameter??c,p=`${A.x},${A.y},${A.from_layer},${A.to_layer}`;u.has(p)||(d.push({type:"pcb_via",pcb_via_id:`via_${d.length}`,pcb_trace_id:h.pcb_trace_id,x:A.x,y:A.y,outer_diameter:m,hole_diameter:0.5*m,layers:fQe(A,a,l)}),u.add(p))}})}):s.forEach((h,A)=>{let m=`trace_${A}`,p=h.viaDiameter??c;for(let g=1;g<h.route.length;g++){let _=h.route[g-1],f=h.route[g];if(_.z!==f.z&&Math.abs(_.x-f.x)<0.01&&Math.abs(_.y-f.y)<0.01){let y=s1(_.z,a),x=s1(f.z,a),C=`${f.x},${f.y},${y},${x}`;u.has(C)||(d.push({type:"pcb_via",pcb_via_id:`via_${d.length}`,pcb_trace_id:m,x:f.x,y:f.y,outer_diameter:p,hole_diameter:0.5*p,layers:fQe({from_layer:y,to_layer:x},a,l)}),u.add(C))}}})),d}(t,e.layerCount,o,e.allowBlindAndBuriedVias));let r=new Map;return e.connections.forEach((s)=>{r.set(s.name,s.netConnectionName||s.rootConnectionName||s.name)}),t.length>0&&("type"in t[0]&&t[0].type==="pcb_trace"?t.forEach((s)=>{let a=s.connection_name;i.push(function(c,l){return{type:"pcb_trace",pcb_trace_id:c.pcb_trace_id,source_trace_id:l,route:c.route.map((d)=>d.route_type==="wire"?{route_type:"wire",x:d.x,y:d.y,width:d.width,layer:d.layer,start_pcb_port_id:d.start_pcb_port_id,end_pcb_port_id:d.end_pcb_port_id}:d.route_type==="via"?{route_type:"via",x:d.x,y:d.y,from_layer:d.from_layer,to_layer:d.to_layer}:null).filter((d)=>d!==null)}}(s,r.get(a)||a))}):t.forEach((s,a)=>{let c=s.connectionName,l=function(d,u,h,A=0.1,m){let p=[];if(!d.jumpers||d.jumpers.length===0)return[{type:"pcb_trace",pcb_trace_id:u,source_trace_id:h,route:d.route.map((y,x)=>{let C=x===0,I=x===d.route.length-1;return{route_type:"wire",x:y.x,y:y.y,width:A,layer:s1(y.z,m),...C&&y.pcb_port_id?{start_pcb_port_id:y.pcb_port_id}:{},...I&&y.pcb_port_id?{end_pcb_port_id:y.pcb_port_id}:{}}})}];let g=[];for(let y of d.jumpers){let x=-1,C=-1;for(let I=0;I<d.route.length;I++){let b=d.route[I];Math.abs(b.x-y.start.x)<0.01&&Math.abs(b.y-y.start.y)<0.01&&(x=I),Math.abs(b.x-y.end.x)<0.01&&Math.abs(b.y-y.end.y)<0.01&&(C=I)}x!==-1&&C!==-1&&(x>C&&([x,C]=[C,x]),g.push({startIdx:x,endIdx:C}))}g.sort((y,x)=>y.startIdx-x.startIdx);let _=0,f=0;for(let{startIdx:y,endIdx:x}of g){if(y>=_){let C=d.route.slice(_,y+1);C.length>0&&(p.push({type:"pcb_trace",pcb_trace_id:`${u}_${f}`,source_trace_id:h,route:C.map((I,b)=>{let P=b===0&&_===0;return{route_type:"wire",x:I.x,y:I.y,width:A,layer:s1(I.z,m),...P&&I.pcb_port_id?{start_pcb_port_id:I.pcb_port_id}:{}}})}),f++)}_=x}if(_<d.route.length){let y=d.route.slice(_);if(y.length>0)p.push({type:"pcb_trace",pcb_trace_id:`${u}_${f}`,source_trace_id:h,route:y.map((C,I)=>{let b=I===y.length-1;return{route_type:"wire",x:C.x,y:C.y,width:A,layer:s1(C.z,m),...b&&C.pcb_port_id?{end_pcb_port_id:C.pcb_port_id}:{}}})})}return p}(s,`trace_${a}`,r.get(c)||c,n,e.layerCount);i.push(...l)})),i}var vx=(e)=>e.rootConnectionName??e.connectionName,oNe=(e,t)=>{if(e&&t)return e.getNetConnectedToId(t)},_Et=(e,t)=>t?{...e,connections:e.connections.map((n)=>{let o=oNe(t,n.name)??oNe(t,n.rootConnectionName)??n.netConnectionName;return o?{...n,netConnectionName:o}:n}),obstacles:e.obstacles.map((n)=>{let o=new Set(n.connectedTo);for(let i of n.connectedTo){let r=oNe(t,i);r&&o.add(r)}return{...n,connectedTo:[...o]}})}:e,By=(e,t,n)=>{if(!t)return!1;if(e===t)return!0;let o=n?.getNetConnectedToId(e),i=n?.getNetConnectedToId(t);return!(!o||!(o===i||e&&o===t))||!(!i||i!==e)},OA=(e,t,n)=>t.connectedTo?.some((o)=>By(e,o,n))??!1,VE=(e,t,n)=>Math.max(t,Math.min(e,n)),nL=(e,t)=>{e.x=VE(e.x,t.minX,t.maxX),e.y=VE(e.y,t.minY,t.maxY)},xk=(e,t)=>({minX:e.minX-t,minY:e.minY-t,maxX:e.maxX+t,maxY:e.maxY+t}),xHt=(e,t)=>({minCellX:Math.floor(e.minX/t),maxCellX:Math.floor(e.maxX/t),minCellY:Math.floor(e.minY/t),maxCellY:Math.floor(e.maxY/t)}),CHt=(e,t)=>`${e}:${t}`,IQe=new WeakMap,bQe=(e,t,n)=>{let o=new Map,i=Math.ceil(e.length/32);IQe.set(o,{bits:new Uint32Array(i),wordGenerations:new Uint32Array(i),generation:0});for(let r=0;r<e.length;r+=1){let s=e[r];if(!s)continue;let a=xHt(t(s),n);for(let c=a.minCellX;c<=a.maxCellX;c+=1)for(let l=a.minCellY;l<=a.maxCellY;l+=1){let d=CHt(c,l),u=o.get(d);u?u.push(r):o.set(d,[r])}}return o},ZY=(e,t,n)=>{let o=IQe.get(e);o||(o={bits:new Uint32Array(0),wordGenerations:new Uint32Array(0),generation:0},IQe.set(e,o)),o.generation+=1,o.generation>4294967295&&(o.wordGenerations.fill(0),o.generation=1);let i=o.generation,r=xHt(t,n),s=1/0,a=-1;for(let l=r.minCellX;l<=r.maxCellX;l+=1)for(let d=r.minCellY;d<=r.maxCellY;d+=1){let u=e.get(CHt(l,d));if(u)for(let h of u){let A=h>>>5;if(A>=o.bits.length){let m=Math.max(A+1,2*o.bits.length),p=new Uint32Array(m);p.set(o.bits);let g=new Uint32Array(m);g.set(o.wordGenerations),o.bits=p,o.wordGenerations=g}o.wordGenerations[A]!==i&&(o.wordGenerations[A]=i,o.bits[A]=0),o.bits[A]=o.bits[A]|1<<(31&h),A<s&&(s=A),A>a&&(a=A)}}let c=[];for(let l=s;l<=a;l+=1){if(o.wordGenerations[l]!==i)continue;let d=o.bits[l];for(;d!==0;){let u=31-Math.clz32(d&-d);c.push(32*l+u),d&=d-1}}return c},gEt=0.000001,XRo=(e,t,n)=>{if(e.length===0)return[];let o=n?.traceThickness??0.1,i=e[0],r=e.at(-1),s=(d)=>{if(d.pcb_port_id)return d.pcb_port_id;let u=s1(d.z,t);return n?.connectionPoints?.find((h)=>{return h.pcb_port_id&&(A=h,m=d,Math.abs(A.x-m.x)<=gEt&&Math.abs(A.y-m.y)<=gEt)&&yHt(h).includes(u);var A,m})?.pcb_port_id},a=s(i),c=s(r),l=[{route_type:"wire",x:i.x,y:i.y,width:o,layer:s1(i.z,t),...a?{start_pcb_port_id:a}:{},...e.length===1&&c?{end_pcb_port_id:c}:{}}];for(let d=1;d<e.length;d+=1){let u=e[d-1],h=e[d];u&&h&&(u.z!==h.z&&u.x===h.x&&u.y===h.y&&l.push({route_type:"via",x:h.x,y:h.y,from_layer:s1(u.z,t),to_layer:s1(h.z,t),...n?.viaDiameter?{via_diameter:n.viaDiameter}:{}}),l.push({route_type:"wire",x:h.x,y:h.y,width:o,layer:s1(h.z,t),...d===e.length-1&&c?{end_pcb_port_id:c}:{}}))}return l},iNe=(e,t)=>({x:L_(e.x,t.minX,t.maxX),y:L_(e.y,t.minY,t.maxY)}),fEt=(e,t)=>{let n=e.x-t.center.x,o=e.y-t.center.y;return t.circular?Math.max(0,Math.hypot(n,o)-t.halfWidth):KBt(C6(t.worldToLocal,e),{minX:-t.halfWidth,maxX:t.halfWidth,minY:-t.halfHeight,maxY:t.halfHeight})},ME=(e,t)=>({kind:"line",start:e,end:t,bounds:Lke([e,t])}),Ck=(e,t)=>({kind:"circle",center:e,radius:t,bounds:Gd({center:e,width:2*t,height:2*t})}),KRo=(e)=>{let t=e.clearance+bi;if(e.circular)return[Ck(e.center,e.halfWidth+t)];let n=(r,s)=>C6(e.localToWorld,{x:r,y:s}),{halfWidth:o,halfHeight:i}=e;return[ME(n(-o,-i-t),n(o,-i-t)),ME(n(o+t,-i),n(o+t,i)),ME(n(o,i+t),n(-o,i+t)),ME(n(-o-t,i),n(-o-t,-i)),Ck(n(-o,-i),t),Ck(n(o,-i),t),Ck(n(o,i),t),Ck(n(-o,i),t)]},IHt=(e,t)=>{if(t.kind==="circle"){let n=e.x-t.center.x,o=e.y-t.center.y,i=Math.hypot(n,o);return i===0?[{x:t.center.x+t.radius,y:t.center.y},{x:t.center.x-t.radius,y:t.center.y},{x:t.center.x,y:t.center.y+t.radius},{x:t.center.x,y:t.center.y-t.radius}]:[{x:t.center.x+n*t.radius/i,y:t.center.y+o*t.radius/i}]}return[t.start,t.end,im(e,t.start,t.end)]},yEt=(e,t)=>{let n=e.end.x-e.start.x,o=e.end.y-e.start.y,i=e.start.x-t.center.x,r=e.start.y-t.center.y,s=n*n+o*o;if(s===0)return[];let a=2*(i*n+r*o),c=a*a-4*s*(i*i+r*r-t.radius*t.radius);if(c<0)return[];let l=Math.sqrt(c);return[(-a-l)/(2*s),(-a+l)/(2*s)].filter((d)=>d>=0&&d<=1).map((d)=>({x:e.start.x+n*d,y:e.start.y+o*d}))},bHt=(e,t)=>{if(e.kind==="line"&&t.kind==="circle")return yEt(e,t);if(e.kind==="circle"&&t.kind==="line")return yEt(t,e);if(e.kind==="line"&&t.kind==="line"){let l=T6(e.start,e.end,t.start,t.end);return l?[l]:[]}if(e.kind!=="circle"||t.kind!=="circle")return[];let n=t.center.x-e.center.x,o=t.center.y-e.center.y,i=Math.hypot(n,o);if(i===0||i>e.radius+t.radius||i<Math.abs(e.radius-t.radius))return[];let r=(e.radius**2-t.radius**2+i**2)/(2*i),s=Math.sqrt(Math.max(0,e.radius**2-r**2)),a=e.center.x+n*r/i,c=e.center.y+o*r/i;return[{x:a-o*s/i,y:c+n*s/i},{x:a+o*s/i,y:c-n*s/i}]},jRo=(e,t,n,o,i)=>{let r=new Set(function(s,a,c=1){if(c===0)throw Error("step cannot be 0");let l,d;a===void 0?(l=0,d=s):(l=s,d=a);let u=[];if(c>0)for(let h=l;h<d;h+=c)u.push(h);else for(let h=l;h>d;h+=c)u.push(h);return u}(e.allowBlindAndBuriedVias?Math.min(...o):0,e.allowBlindAndBuriedVias?Math.max(...o)+1:e.layerCount).map((s)=>s1(s,e.layerCount)));return e.obstacles.filter((s)=>!s.isCopperPour&&s.layers.some((a)=>r.has(a))).map((s)=>{let a=typeof s.ccwRotationDegrees=="number"&&Number.isFinite(s.ccwRotationDegrees),c=!a&&s.layers.length>1&&Math.abs(s.width-s.height)<0.001,l=Qke(Yk(s.center.x,s.center.y),FBt(a?s.ccwRotationDegrees:0)),d=c?Math.max(s.width,s.height)/2:s.width/2,u=c?d:s.height/2,h=OA(vx(t),s,i)||OA(t.connectionName,s,i),A=n+(h?0:ffe(e)),m=Lke(QBt(l,[{x:-d,y:-u},{x:d,y:-u},{x:d,y:u},{x:-d,y:u}])),p=A+bi;return{center:s.center,halfWidth:d,halfHeight:u,localToWorld:l,worldToLocal:kBt(l),circular:c,clearance:A,bounds:{minX:m.minX-p,maxX:m.maxX+p,minY:m.minY-p,maxY:m.maxY+p}}})},qRo=(e,t,n,o)=>{let i=Math.min(...e.zLayers),r=Math.max(...e.zLayers),s=t.filter((d)=>d.z>=i&&d.z<=r&&!By(e.rootConnectionName,d.rootConnectionName,o)).map((d)=>({segment:d,required:e.radius+d.radius+n})).filter(({segment:d,required:u})=>Da(e,d.start,d.end)<=u+Y8),a=s.flatMap(({segment:d,required:u})=>{let{start:h,end:A}=d,m=Math.sqrt(xE(h,A));if(m<=bi)return[];let p=u+bi,g=(A.y-h.y)/m*p,_=(h.x-A.x)/m*p;return[ME({x:h.x+g,y:h.y+_},{x:A.x+g,y:A.y+_}),ME({x:h.x-g,y:h.y-_},{x:A.x-g,y:A.y-_}),Ck(h,p),Ck(A,p)]}).filter((d)=>KBt(e,d.bounds)<=Y8),c=[],l=(d)=>{xE(d,e)>Y8**2||c.some((u)=>xE(u,d)<0.000000000001)||s.some(({segment:u,required:h})=>Da(d,u.start,u.end)<h)||c.push(d)};l(e);for(let d=0;d<a.length;d+=1){let u=a[d];for(let h of IHt(e,u))l(h);for(let h=d+1;h<a.length;h+=1){let A=a[h];if(D6(u.bounds,A.bounds))for(let m of bHt(u,A))l(m)}}return c.sort((d,u)=>xE(d,e)-xE(u,e))},xEt=1048576,SHt=(e)=>({...e,route:e.route.map((t)=>({...t})),vias:e.vias.map((t)=>({...t}))}),EI=(e)=>e.map(SHt),LY=(e,t)=>{let n=new Set(t);return e.map((o,i)=>n.has(i)?SHt(o):o)},Ym=(e,t)=>Math.abs(e.x-t.x)<=ca&&Math.abs(e.y-t.y)<=ca,JRo=["pcb_smtpad","pcb_plated_hole","pcb_hole","pcb_keepout"],l1=(e)=>typeof e.type=="string"?e.type:typeof e.error_type=="string"?e.error_type:void 0,eHe=(e)=>{if(l1(e)==="pcb_pad_trace_clearance_error")return!0;let t=typeof e.message=="string"?e.message.toLowerCase():"";return(t.includes("pcb_trace")||t.includes("pcb trace"))&&JRo.some((n)=>t.includes(n))},CEt=(e,t,n=!0)=>{let o=[],i=new Map,r=new Map;for(let s=0;s<t.length;s+=1){let a=t[s];if(!a)continue;let c=r.get(a.connectionName);c?c.push({route:a,routeIndex:s}):r.set(a.connectionName,[{route:a,routeIndex:s}])}for(let s of e.connections){let a=r.get(s.name)??[];for(let c=0;c<a.length;c+=1){let l=a[c];if(!l)continue;let d=`${s.name}_${c}`;n&&o.push({type:"pcb_trace",pcb_trace_id:d,connection_name:s.netConnectionName??s.rootConnectionName??s.name,route:XRo(l.route.route,e.layerCount,{traceThickness:l.route.traceThickness??s.nominalTraceWidth??e.nominalTraceWidth??e.minTraceWidth,viaDiameter:l.route.viaDiameter??e.minViaDiameter,connectionPoints:s.pointsToConnect})}),i.set(d,l.routeIndex)}}return{traces:o,traceRouteIndexById:i}},tHe=(e)=>{let t=typeof e.message=="string"?e.message:"",n=t.match(/gap: (-?\d+(?:\.\d+)?)mm/),o=t.match(/required: (-?\d+(?:\.\d+)?)mm/);if(n&&o){let i=Number.parseFloat(n[1]),r=Number.parseFloat(o[1]);if(Number.isFinite(i)&&Number.isFinite(r))return Math.max(0,r-i)}if(n){let i=Number.parseFloat(n[1]),r=m1.traceClearance??0.1;if(Number.isFinite(i))return Math.max(0,r-i)}return 1},PHt={projectEngineError:(e)=>({...e,center:typeof e.first_contact_center=="object"?e.first_contact_center:e.center,message:typeof e.first_contact_message=="string"?e.first_contact_message:e.message,actual_clearance:typeof e.first_actual_clearance=="number"?e.first_actual_clearance:e.actual_clearance}),getErrorSeverity:tHe},$Ro={projectEngineError:(e)=>e,getErrorSeverity:(e)=>{let t=Number(e.minimum_clearance),n=Number(e.worst_actual_clearance);return Number.isFinite(t)&&Number.isFinite(n)?Math.max(0,t-n):tHe(e)}},uV=(e,t=tHe)=>e.reduce((n,o)=>n+t(o),0),vHt=(e,t,n,o,i,r=PHt)=>{let s=n?.inputMode==="routes-only",a=i&&!n||s?e:_Et(e,o),{traces:c,traceRouteIndexById:l}=CEt(a,t,!s),d=n?.({srj:a,routes:t,traces:c});if(d){let m=Array.isArray(d)?d:d.errors,p=Array.isArray(d)?d:d.errorsWithCenters??d.errors;return{errors:p,count:m.length,issueScore:uV(p,r.getErrorSeverity),legacyIssueScore:uV(p.filter((g)=>!wy(g)),r.getErrorSeverity),traceRouteIndexById:l}}if(s){a=_Et(e,o);let m=CEt(a,t);c=m.traces,l=m.traceRouteIndexById}let u=i?.evaluate(c)??((m,p={})=>{let g=Math.max(p.viaClearance??0.1,0.1),_=[...zRo(m,nNe(p.traceClearance)),...GRo(m,nNe(g)),...YRo(m,nNe(g))],f=m.filter((I)=>I.type==="pcb_via"),y=new Map(f.map((I)=>[I.pcb_via_id,I])),x=_.map((I)=>{if("center"in I&&I.center)return I;if("pcb_center"in I&&I.pcb_center)return{...I,center:I.pcb_center};if("pcb_via_ids"in I&&Array.isArray(I.pcb_via_ids)){let[b,P]=I.pcb_via_ids;if(typeof b!="string"||typeof P!="string")return I;let E=y.get(b),B=y.get(P);if(E&&B)return{...I,center:{x:(E.x+B.x)/2,y:(E.y+B.y)/2}}}if("pcb_error_id"in I&&typeof I.pcb_error_id=="string"&&(I.pcb_error_id.startsWith("same_net_vias_close_")||I.pcb_error_id.startsWith("different_net_vias_close_"))){let b=I.pcb_error_id.replace("same_net_vias_close_","").replace("different_net_vias_close_","").split("_").filter(Boolean);if(b.length===2){let P=b[0],E=b[1];if(!P||!E)return I;let B=y.get(P),w=y.get(E);if(B&&w)return{...I,center:{x:(B.x+w.x)/2,y:(B.y+w.y)/2}}}}return I}),C=x.filter((I)=>Boolean(I.center));return{errors:_,errorsWithCenters:x,locationAwareErrors:C}})(WRo(a,c,a.minTraceWidth,a.minViaDiameter),{...m1,traceClearance:a.minTraceToPadEdgeClearance??m1.traceClearance,viaClearance:a.minTraceToPadEdgeClearance??m1.viaClearance}),h=u.errors,A=(u.errorsWithCenters.length>0?u.errorsWithCenters:u.errors).map((m)=>r.projectEngineError(m));return{errors:A,count:h.length,issueScore:uV(A,r.getErrorSeverity),legacyIssueScore:uV(A.filter((m)=>!wy(m)),r.getErrorSeverity),traceRouteIndexById:l}},_E=(e,t,n,o,i)=>vHt(e,t,n,o,i,PHt),ZRo=(e,t,n,o,i)=>vHt(e,t,n,o,i,$Ro),yS=(e,t)=>{let n=[];for(let o=0;o<e.length;o+=1){let i=e[o];if(!i)continue;let r;for(let s=0;s<i.route.length-1;s+=1){let a=i.route[s],c=i.route[s+1];if(!a||!c)continue;if(a.z===c.z||!Ym(a,c))continue;let l=r??=new Set,d=[s,s+1];for(let g=s-1;g>=0;g-=1){let _=i.route[g];if(!_||!Ym(_,a))break;d.push(g)}for(let g=s+2;g<i.route.length;g+=1){let _=i.route[g];if(!_||!Ym(_,a))break;d.push(g)}let u=d;if(u.some((g)=>l.has(g)))continue;for(let g of u)l.add(g);let h=u.filter((g)=>g===0||g===i.route.length-1),A=h.some((g)=>Boolean(i.route[g]?.pcb_port_id)),m=0,p=t.layerCount-1;if(t.allowBlindAndBuriedVias){let g=u.map((_)=>i.route[_].z);m=Math.min(...g),p=Math.max(...g)}n.push({routeIndex:o,rootConnectionName:vx(i),pointIndexes:u,zLayers:Array.from({length:p-m+1},(g,_)=>m+_),x:a.x,y:a.y,radius:(i.viaDiameter??t.minViaDiameter??0.3)/2,movable:h.length===0,canCanonicalize:h.length===0||!A})}}return n},gte=(e,t)=>{let n=[];for(let o=0;o<e.route.length-1;o+=1){let i=e.route[o],r=e.route[o+1];i&&r&&(i.z!==r.z||Ym(i,r)||n.push({routeIndex:t,rootConnectionName:vx(e),startIndex:o,endIndex:o+1,start:i,end:r,z:i.z,radius:(e.traceThickness??0.1)/2}))}return n},Kte=(e)=>e.flatMap((t,n)=>gte(t,n)),C_e=(e)=>({minX:e.x,minY:e.y,maxX:e.x,maxY:e.y}),Ek=(e)=>({minX:Math.min(e.start.x,e.end.x),minY:Math.min(e.start.y,e.end.y),maxX:Math.max(e.start.x,e.end.x),maxY:Math.max(e.start.y,e.end.y)}),EHt=(e)=>({minX:e.center.x-e.width/2,minY:e.center.y-e.height/2,maxX:e.center.x+e.width/2,maxY:e.center.y+e.height/2}),BU=(e,t)=>{if(e.zLayers&&e.zLayers.length>0)return e.zLayers;let n=Array.from({length:t},(o,i)=>i).filter((o)=>e.layers.includes(s1(o,t)));return n.length>0?n:Array.from({length:t},(o,i)=>i)},MHt=(e,t,n)=>{let o=t.reduce((s,a)=>Math.max(s,a.radius),(e.minViaDiameter??0.3)/2),i=n.reduce((s,a)=>Math.max(s,a.radius),e.minTraceWidth/2),r=(m1.traceClearance??0.1)+zg;return Math.max(2*o+0.2+zg,o+i+r,2*i+r,i+IFe(e)+zg,o+ffe(e)+zg)},BHt=(e,t,n)=>{let o=n.x-t.x,i=n.y-t.y,r=o*o+i*i;if(r<=bi)return{x:t.x,y:t.y,t:0};let s=VE(((e.x-t.x)*o+(e.y-t.y)*i)/r,0,1);return{x:t.x+o*s,y:t.y+i*s,t:s}},kI=(e,t)=>BHt(e,t.start,t.end),V8=(e,t)=>{let n=t.width/2,o=t.height/2,i=Math.max(Math.abs(e.x-t.center.x)-n,0),r=Math.max(Math.abs(e.y-t.center.y)-o,0);return Math.hypot(i,r)},Sfe=(e,t)=>e.x>=t.center.x-t.width/2-ca&&e.x<=t.center.x+t.width/2+ca&&e.y>=t.center.y-t.height/2-ca&&e.y<=t.center.y+t.height/2+ca,nHe=(e,t,n,o)=>e.obstacles.find((i)=>OA(vx(t),i,o)&&BU(i,e.layerCount).includes(n.z)&&Sfe(n,i)),sge=(e,t,n=0.6,o)=>{let i;for(let r of e.obstacles){let s=V8(t,r);s>n||(o&&!o(r)||(!i||s<i.distance)&&(i={obstacle:r,distance:s}))}return i?.obstacle},Pfe=(e,t,n)=>{let o=t.width/2,i=t.height/2,r=VE(e.x,t.center.x-o,t.center.x+o),s=VE(e.y,t.center.y-i,t.center.y+i),a=e.x-r,c=e.y-s,l=Math.hypot(a,c);if(l<=bi)o-Math.abs(e.x-t.center.x)<i-Math.abs(e.y-t.center.y)?(a=e.x>=t.center.x?1:-1,c=0,l=0):(a=0,c=e.y>=t.center.y?1:-1,l=0);let d=n-l;if(d<=0)return;let u=Math.hypot(a,c);return{direction:{x:u>bi?a/u:1,y:u>bi?c/u:0},penetration:d}},IEt=(e,t,n,o)=>{let i=t.message;if(typeof i!="string"||!i.includes("pcb_"))return n;let r=Array.isArray(t.pcb_pad_ids)?t.pcb_pad_ids.filter((a)=>typeof a=="string"):[],s=e.obstacles.find((a)=>r.some((c)=>a.connectedTo.includes(c))&&(o?.(a)??!0));return s?s.center:sge(e,n,0.6,o)?.center??n},wHt=(e,t)=>{let n=e.route[t];if(!n)return[];let o=[t];for(let i=t-1;i>=0;i-=1){let r=e.route[i];if(!r||!Ym(r,n))break;o.push(i)}for(let i=t+1;i<e.route.length;i+=1){let r=e.route[i];if(!r||!Ym(r,n))break;o.push(i)}return[...new Set(o)]},oHe=(e,t)=>{if(t<=0||t>=e.route.length-1)return;let n=wHt(e,t);return n.includes(0)||n.includes(e.route.length-1)?void 0:n},rU=(e,t)=>e.x>=t.minX-ca&&e.x<=t.maxX+ca&&e.y>=t.minY-ca&&e.y<=t.maxY+ca,SQe=(e,t)=>Math.min(e.x-t.minX,t.maxX-e.x,e.y-t.minY,t.maxY-e.y),PQe=(e,t,n)=>{let o=n.x-t.x,i=n.y-t.y,r=e.x-t.x,s=o*(e.y-t.y)-i*r;if(Math.abs(s)>ca)return!1;let a=Math.min(t.x,n.x)-ca,c=Math.max(t.x,n.x)+ca,l=Math.min(t.y,n.y)-ca,d=Math.max(t.y,n.y)+ca;return e.x>=a&&e.x<=c&&e.y>=l&&e.y<=d},fte=(e,t)=>{if(t.length<3)return!0;for(let o=0;o<t.length;o+=1){let i=t[o],r=t[(o+1)%t.length];if(i&&r&&PQe(e,i,r))return!0}let n=!1;for(let o=0,i=t.length-1;o<t.length;i=o,o+=1){let r=t[o],s=t[i];if(!r||!s)continue;r.y>e.y!=s.y>e.y&&e.x<(s.x-r.x)*(e.y-r.y)/(s.y-r.y)+r.x&&(n=!n)}return n},bEt=(e,t)=>{let n=Math.hypot(e,t);if(!(n<=bi))return{x:e/n,y:t/n}},THt=(e,t)=>e.outline&&e.outline.length>=3?((n,o)=>{let i=fte(n,o),r;for(let u=0;u<o.length;u+=1){let h=o[u],A=o[(u+1)%o.length];if(!h||!A)continue;let m=BHt(n,h,A),p=Math.hypot(n.x-m.x,n.y-m.y);(!r||p<r.distance)&&(r={projection:m,start:h,end:A,distance:p})}if(!r)return;let s=bEt(i?n.x-r.projection.x:r.projection.x-n.x,i?n.y-r.projection.y:r.projection.y-n.y);if(s)return s;let a=r.end.x-r.start.x,c=r.end.y-r.start.y,l=Math.hypot(a,c);if(l<=bi)return;let d=((u)=>{let h=0;for(let A=0;A<u.length;A+=1){let m=u[A],p=u[(A+1)%u.length];m&&p&&(h+=m.x*p.y-p.x*m.y)}return h/2})(o)>=0;return{x:d?-c/l:c/l,y:d?a/l:-a/l}})(t,e.outline):((n,o)=>{let i=n.x-o.minX,r=o.maxX-n.x,s=n.y-o.minY,a=o.maxY-n.y,c=Math.min(i,r,s,a),l=0,d=0;return i<=c+ca&&(l+=1),r<=c+ca&&(l-=1),s<=c+ca&&(d+=1),a<=c+ca&&(d-=1),bEt(l,d)})(t,e.bounds),DHt=(e,t)=>e.outline&&e.outline.length>=3?fte(t,e.outline):rU(t,e.bounds),Fg=(e,t)=>{if(e.outline&&e.outline.length>=3){let n=((o,i)=>{let r=Number.POSITIVE_INFINITY;for(let s=0;s<i.length;s+=1){let a=i[s],c=i[(s+1)%i.length];a&&c&&(r=Math.min(r,Da(o,a,c)))}return r})(t,e.outline);return fte(t,e.outline)?n:-n}return SQe(t,e.bounds)},BE=(e,t,n)=>{if(Math.abs(t.x-n.x)<=ca&&Math.abs(t.y-n.y)<=ca)return Math.min(Fg(e,t),Fg(e,n));if(e.outline&&e.outline.length>=3){if(!fte(t,e.outline)||!fte(n,e.outline))return Math.min(Fg(e,t),Fg(e,n));let o=Number.POSITIVE_INFINITY;for(let i=0;i<e.outline.length;i+=1){let r=e.outline[i],s=e.outline[(i+1)%e.outline.length];r&&s&&(o=Math.min(o,Um(t,n,r,s)))}return o}return rU(t,e.bounds)&&rU(n,e.bounds)?Math.min(SQe(t,e.bounds),SQe(n,e.bounds)):Math.min(Fg(e,t),Fg(e,n))},sU=(e,t)=>t+Math.max(0.16,e.defaultObstacleMargin??0,m1.traceClearance??0.1),vfe=(e,t,n)=>t<e-ca&&Math.min(e,t)<=n+ca,NHt=(e,t,n,o,i)=>{let r=e*n.x+t*n.y,s=-Math.max(0,o-i);if(r>=s-ca)return{x:e,y:t};let a=s-r;return{x:e+n.x*a,y:t+n.y*a}},iHe=(e,t,n,o,i)=>{let r=THt(e,t);return r?NHt(n,o,r,Fg(e,t),sU(e,i)):{x:n,y:o}},SEt=(e,t,n,o)=>{let i=[...new Set(n)].sort((c,l)=>c-l);if(i.length===0)return Number.POSITIVE_INFINITY;let r=new Set(i),s=(c)=>o?.get(c)??t.route[c],a=Number.POSITIVE_INFINITY;for(let c of i){let l=s(c);l&&(a=Math.min(a,Fg(e,l)))}for(let c=0;c<t.route.length-1;c+=1){if(!r.has(c)&&!r.has(c+1))continue;let l=s(c),d=s(c+1);l&&d&&(a=Math.min(a,BE(e,l,d)))}return a},Efe=(e,t,n,o,i,r)=>{let s=[...new Set(n)].sort((h,A)=>h-A);if(s.length===0)return;let a=((h,A,m,p,g,_)=>{let f=[...new Set(m)].sort((C,I)=>C-I),y={x:p,y:g},x=sU(h,_);for(let C=0;C<Math.max(1,f.length);C+=1){let I=!1;for(let b of f){let P=A.route[b];if(!P)continue;let E=THt(h,P);if(!E)continue;let B=NHt(y.x,y.y,E,Fg(h,P),x);(Math.abs(B.x-y.x)>bi||Math.abs(B.y-y.y)>bi)&&(y=B,I=!0)}if(!I)break}return y})(e,t,s,o,i,r);if(Math.abs(a.x)<=bi&&Math.abs(a.y)<=bi)return;let c=new Map;for(let h of s){let A=t.route[h];if(!A)continue;let m={x:A.x+a.x,y:A.y+a.y};c.set(h,m)}let l=SEt(e,t,s),d=SEt(e,t,s,c);if(d<r-ca)return;let u=sU(e,r);return vfe(l,d,u)?void 0:a},age=(e,t,n,o,i,r,s)=>{let a=e[t];if(!a)return!1;let c=oHe(a,n);if(!c)return!1;let l=Efe(r,a,c,o,i,s);if(!l)return!1;let d=!1;for(let u of c){let h=a.route[u];h&&(h.x+=l.x,h.y+=l.y,nL(h,r.bounds),d=!0)}return d},PEt=(e,t,n,o,i,r)=>oHe(t,n)??((s,a,c,l,d,u)=>{let h=a.route[c];if(!h||h.pcb_port_id||c!==0&&c!==a.route.length-1)return;let A=nHe(s,a,h,u);if(!A)return;let m={...h,x:h.x+l,y:h.y+d};return DHt(s,m)&&Sfe(m,A)?wHt(a,c):void 0})(e,t,n,o,i,r),RHt=(e,t,n,o,i,r)=>{let s=Efe(i,e,t,n,o,r);if(!s)return!1;let a=!1;for(let c of t){let l=e.route[c];l&&(l.x+=s.x,l.y+=s.y,nL(l,i.bounds),a=!0)}return a},vEt=(e,t,n,o,i,r)=>{let s=t.route[n];if(!s)return!1;if(s.pcb_port_id)return!1;let a=nHe(e,t,s,r);return!!a&&Sfe({...s,x:s.x+o,y:s.y+i},a)},eQo=(e,t,n,o)=>{let i=t.route[n];if(i&&!i.pcb_port_id)return nHe(e,t,i,o)},EEt=(e,t,n,o,i,r,s)=>{let a=e[t];if(!a||a.route.length===0)return!1;let c=((A,m,p,g,_)=>{let{NEGATIVE_INFINITY:f,POSITIVE_INFINITY:y,NEGATIVE_INFINITY:x,POSITIVE_INFINITY:C}=Number;for(let I of[0,m.route.length-1]){let b=m.route[I],P=eQo(A,m,I,_);if(!b||!P)return;f=Math.max(f,P.center.x-P.width/2-b.x),y=Math.min(y,P.center.x+P.width/2-b.x),x=Math.max(x,P.center.y-P.height/2-b.y),C=Math.min(C,P.center.y+P.height/2-b.y)}if(!(f>y||x>C))return{x:VE(p,f,y),y:VE(g,x,C)}})(i,a,n,o,s);if(!c)return!1;let l=a.route.map((A,m)=>m),d=Efe(i,a,l,c.x,c.y,r);if(!d)return!1;let u=a.route.length-1;if(!vEt(i,a,0,d.x,d.y,s)||!vEt(i,a,u,d.x,d.y,s))return!1;let h=!1;for(let A of a.route)A.x+=d.x,A.y+=d.y,nL(A,i.bounds),h=!0;return h},MEt=(e,t,n)=>{let o=t.x-e.x,i=t.y-e.y,r=n.x-t.x,s=n.y-t.y;return Math.abs(o*s-i*r)<=ca},BEt=(e,t)=>{if(e.z!==t.z)return!1;let n=t.end.x-t.start.x,o=t.end.y-t.start.y,i=e.x-t.start.x,r=e.y-t.start.y;return Math.abs(n*r-o*i)<=ca},tQo=(e,t)=>{let n=((i,r)=>{let s=r.end.x-r.start.x,a=r.end.y-r.start.y,c=Math.max(ca,0.12*(i.traceThickness??0.1)),l=Math.abs(a)<=c,d=Math.abs(s)<=c,{startIndex:u,endIndex:h}=r;if(l||d){let A=l?(r.start.y+r.end.y)/2:(r.start.x+r.end.x)/2;for(;u>0;){let m=i.route[u-1];if(!m||m.z!==r.z||Math.abs((l?m.y:m.x)-A)>c)break;u-=1}for(;h<i.route.length-1;){let m=i.route[h+1];if(!m||m.z!==r.z||Math.abs((l?m.y:m.x)-A)>c)break;h+=1}return Array.from({length:h-u+1},(m,p)=>u+p)}for(;u>0;){let A=i.route[u-1],m=i.route[u],p=i.route[u+1];if(!(A&&m&&p&&A.z===r.z&&BEt(A,r)&&MEt(A,m,p)))break;u-=1}for(;h<i.route.length-1;){let A=i.route[h-1],m=i.route[h],p=i.route[h+1];if(!(A&&m&&p&&p.z===r.z&&BEt(p,r)&&MEt(A,m,p)))break;h+=1}return Array.from({length:h-u+1},(A,m)=>u+m)})(e,t);if(n.length<=2)return;let o=[];for(let i of n){let r=oHe(e,i);if(!r)return;o.push(...r)}return[...new Set(o)]},vQe=(e,t)=>t>0&&t<e.route.length-1&&!((n,o)=>{let i=n.route[o];if(!i)return!1;let r=n.route[o-1],s=n.route[o+1];return r&&r.z!==i.z&&Ym(r,i)||s&&s.z!==i.z&&Ym(s,i)})(e,t),wEt=(e,t,n)=>{let o=e.route[t.startIndex],i=e.route[t.endIndex];return!(!o||!i)&&(o.z===t.z&&i.z===t.z&&(!!((r,s)=>Ek(r).maxX>=s.minX-ca&&Ek(r).minX<=s.maxX+ca&&Ek(r).maxY>=s.minY-ca&&Ek(r).minY<=s.maxY+ca)(t,n)&&(vQe(e,t.startIndex)||vQe(e,t.endIndex))))},nQo=(e,t,n,o,i,r,s)=>{let a=e[t.routeIndex];if(!a)return!1;let c=((l,d,u,h)=>{let A=xk(EHt(u),h),{startIndex:m,startIndex:p}=d;for(;m>0;){let _={...d,startIndex:m-1,endIndex:m,start:l.route[m-1],end:l.route[m]};if(!l.route[m-1]||!wEt(l,_,A))break;m-=1}for(;p<l.route.length-2;){let _={...d,startIndex:p+1,endIndex:p+2,start:l.route[p+1],end:l.route[p+2]};if(!l.route[p+2]||!wEt(l,_,A))break;p+=1}let g=[];for(let _=m;_<=p+1;_+=1)vQe(l,_)&&g.push(_);return[...new Set(g)]})(a,t,n,o);return!(c.length<=2)&&RHt(a,c,i,r,s,t.radius)},TEt=(e,t)=>{let n=kI(t,e),o=n.x-t.x,i=n.y-t.y,r=Math.hypot(o,i),s=e.end.x-e.start.x,a=e.end.y-e.start.y,c=Math.hypot(s,a),l=e.routeIndex%2==0?1:-1;return{projection:n,direction:r>bi?{x:o/r,y:i/r}:c>bi?{x:-a/c*l,y:s/c*l}:{x:1,y:0}}},rHe=(e,t,n,o,i)=>{let r=e[t.routeIndex];if(!r)return!1;let s=iHe(i,t,n,o,t.radius);if(Math.abs(s.x)<=bi&&Math.abs(s.y)<=bi)return!1;let a={x:t.x+s.x,y:t.y+s.y},c=Fg(i,t),l=Fg(i,a);if(l<t.radius-ca)return!1;let d=sU(i,t.radius);if(vfe(c,l,d))return!1;t.x+=s.x,t.y+=s.y,nL(t,i.bounds);for(let u of t.pointIndexes){let h=r.route[u];h&&(h.x=t.x,h.y=t.y)}return!0},QHt=(e,t,n)=>{if(!Number.isInteger(t.routeIndex))return[];let o=e[t.routeIndex];if(!o||t.routeIndex<0||t.routeIndex>=e.length)return[];let i=yS([o],n),r=i.find((a)=>a.pointIndexes.some((c)=>t.pointIndexes.includes(c)));if(!r)return[];let s=[];for(let a=0;a<e.length;a+=1){let c=e[a];if(!c||vx(c)!==r.rootConnectionName)continue;let l=a===t.routeIndex?i:yS([c],n);for(let d of l)d.routeIndex=a,d.rootConnectionName===r.rootConnectionName&&Math.hypot(d.x-r.x,d.y-r.y)<=ca&&s.push(d)}return s},aU=(e,t,n,o,i)=>t.movable&&QHt(e,t,i).length<=1&&rHe(e,t,n,o,i),oQo=(e,t,n,o,i=1)=>{let{projection:r,direction:s}=TEt(t,n),a=Y8*i,c=1-r.t,l=r.t,d=age(e,t.routeIndex,t.startIndex,s.x*a*c,s.y*a*c,o,t.radius),u=age(e,t.routeIndex,t.endIndex,s.x*a*l,s.y*a*l,o,t.radius);return!(!d&&!u)||((h,A,m,p,g)=>{let _=h[A.routeIndex];if(!_)return!1;let{projection:f,direction:y}=TEt(A,m),x=iHe(p,f,y.x*Y8*g,y.y*Y8*g,A.radius);if(Math.abs(x.x)<=bi&&Math.abs(x.y)<=bi)return!1;let C={..._.route[A.startIndex],x:f.x+x.x,y:f.y+x.y};if(nL(C,p.bounds),Da(C,A.start,A.end)<=ca)return!1;let I=_.route[A.startIndex],b=_.route[A.endIndex];if(!I||!b)return!1;let P=BE(p,I,b),E=Math.min(Fg(p,C),BE(p,I,C),BE(p,C,b));if(E<A.radius-ca)return!1;let B=sU(p,A.radius);return!vfe(P,E,B)&&(_.route.splice(A.endIndex,0,C),!0)})(e,t,n,o,i)},iQo=(e,t,n,o,i,r=1)=>{let s=t.radius+IFe(o)+zg,a=OHt(t,n,s);if(!a)return!1;let c=Math.min(0.3*Math.abs(r),a.penetration+zg),l=a.direction.x*c,d=a.direction.y*c,u=e[t.routeIndex];if(!u)return!1;let h=!((E)=>{for(let B=0;B<E.route.length-1;B+=1){let w=E.route[B],T=E.route[B+1];if(w&&T&&w.z!==T.z&&Ym(w,T))return!0}return!1})(u);if(h&&EEt(e,t.routeIndex,l,d,o,t.radius,i))return!0;if(nQo(e,t,n,s,l,d,o)||((E,B,w,T,Q)=>{let N=E[B.routeIndex];if(!N)return!1;let F=tQo(N,B);return!!F&&RHt(N,F,w,T,Q,B.radius)})(e,t,l,d,o)||((E,B,w,T,Q,N)=>{let F=E[B.routeIndex];if(!F)return!1;let H=PEt(Q,F,B.startIndex,w,T,N),z=PEt(Q,F,B.endIndex,w,T,N);if(!H||!z)return!1;let Y=[...new Set([...H,...z])],U=Efe(Q,F,Y,w,T,B.radius);if(!U)return!1;let X=!1;for(let V of Y){let W=F.route[V];W&&(W.x+=U.x,W.y+=U.y,nL(W,Q.bounds),X=!0)}return X})(e,t,l,d,o,i))return!0;if(!h&&EEt(e,t.routeIndex,l,d,o,t.radius,i))return!0;let m=n.width/2,p=n.height/2,g=(Math.abs(a.direction.y)>=Math.abs(a.direction.x)?[{...u.route[t.startIndex],x:n.center.x-m-s,y:n.center.y+a.direction.y*(p+s)},{...u.route[t.startIndex],x:n.center.x+m+s,y:n.center.y+a.direction.y*(p+s)}]:[{...u.route[t.startIndex],x:n.center.x+a.direction.x*(m+s),y:n.center.y-p-s},{...u.route[t.startIndex],x:n.center.x+a.direction.x*(m+s),y:n.center.y+p+s}]).map((E)=>{let{t:B}=kI(E,t),w={x:t.start.x+(t.end.x-t.start.x)*B,y:t.start.y+(t.end.y-t.start.y)*B},T=iHe(o,w,E.x-w.x,E.y-w.y,t.radius);return E.x=w.x+T.x,E.y=w.y+T.y,nL(E,o.bounds),{point:E,t:B,moved:Math.abs(T.x)>bi||Math.abs(T.y)>bi,awayFromObstacleMotion:T.x*a.direction.x+T.y*a.direction.y}}).sort((E,B)=>E.t-B.t);if(!g.some(({moved:E})=>E))return!1;if(!g.some(({awayFromObstacleMotion:E})=>E>ca))return!1;let _=g.map(({point:E})=>E);if(_.every((E)=>Da(E,t.start,t.end)<=ca))return!1;if(_.some((E)=>!DHt(o,E)))return!1;let f=u.route[t.startIndex],y=u.route[t.endIndex],x=_[0],C=_[1];if(!(f&&y&&x&&C))return!1;let I=BE(o,f,y),b=Math.min(Fg(o,x),Fg(o,C),BE(o,f,x),BE(o,x,C),BE(o,C,y));if(b<t.radius-ca)return!1;let P=sU(o,t.radius);return!vfe(I,b,P)&&(u.route.splice(t.endIndex,0,..._),!0)},kE=(e,t,n)=>{let o;for(let i of e){if(n!==void 0&&i.routeIndex!==n)continue;let r=kI(t,i),s=Math.hypot(r.x-t.x,r.y-t.y);(!o||s<o.distance)&&(o={segment:i,distance:s})}return o?.segment},Aee=(e,t,n)=>{let o;for(let i of e){if(n!==void 0&&i.routeIndex!==n)continue;let r=Math.hypot(i.x-t.x,i.y-t.y);(!o||r<o.distance)&&(o={via:i,distance:r})}return o?.via},rQo=(e,t)=>{let n=e.map((o)=>({via:o,distance:Math.hypot(o.x-t.x,o.y-t.y)})).sort((o,i)=>o.distance-i.distance).slice(0,2).map(({via:o})=>o);return n.length===2?n:void 0},rNe=(e,t,n,o)=>{let i=t.x-n.x,r=t.y-n.y,s=Math.hypot(i,r);return aU(e,t,(s>bi?i/s:1)*Y8,(s>bi?r/s:0)*Y8,o)},kHt=(e,t)=>{let n=kI(e.start,t),o=kI(e.end,t),i=kI(t.start,e),r=kI(t.end,e),s=[{leftT:0,rightT:n.t,leftPoint:e.start,rightPoint:n},{leftT:1,rightT:o.t,leftPoint:e.end,rightPoint:o},{leftT:i.t,rightT:0,leftPoint:i,rightPoint:t.start},{leftT:r.t,rightT:1,leftPoint:r,rightPoint:t.end}],a=s[0],c=Math.hypot(a.leftPoint.x-a.rightPoint.x,a.leftPoint.y-a.rightPoint.y);for(let l=1;l<s.length;l+=1){let d=s[l],u=Math.hypot(d.leftPoint.x-d.rightPoint.x,d.leftPoint.y-d.rightPoint.y);u<c&&(a=d,c=u)}return a},yte=(e,t,n,o,i,r)=>{let s=VE(r,0,1),a=1-s,c=s,l=age(e,t.routeIndex,t.startIndex,n*a,o*a,i,t.radius),d=age(e,t.routeIndex,t.endIndex,n*c,o*c,i,t.radius);return l||d},LHt=(e,t,n,o,i,r=0.035,s=!1,a)=>{if(!s&&(a?a.routesShareNet(t,n):By(t.rootConnectionName,n.rootConnectionName,i)))return!1;let c=t.radius+n.radius+0.2+zg,l=t.x-n.x,d=t.y-n.y,u=Math.hypot(l,d),h=c-u;if(h<=0)return!1;let A=1.618*(97*t.routeIndex+13*n.routeIndex),m=u>bi?l/u:Math.cos(A),p=u>bi?d/u:Math.sin(A),g=Number(t.movable)+Number(n.movable);if(g===0)return!1;let _=Math.min(r,h/g),f=aU(e,t,m*_,p*_,o),y=aU(e,n,-m*_,-p*_,o);return f||y},sQo=(e,t,n,o,i)=>{if(!By(t.rootConnectionName,n.rootConnectionName,i))return!1;let[r,s]=t.canCanonicalize?n.canCanonicalize&&t.routeIndex<=n.routeIndex?[t,n]:[n,t]:[t,n];return((a,c,l,d)=>{if(!l.canCanonicalize)return!1;let u=c.x-l.x,h=c.y-l.y;if(!l.movable&&Math.hypot(u,h)>l.radius+ca)return!1;let A=a[l.routeIndex];if(!A)return!1;let m={x:l.x,y:l.y},p=l.pointIndexes.map((g)=>{let _=A.route[g];return _?{pointIndex:g,x:_.x,y:_.y}:void 0});if(rHe(a,l,u,h,d)&&Ym(l,c))return!0;l.x=m.x,l.y=m.y;for(let g of p){if(!g)continue;let _=A.route[g.pointIndex];_&&(_.x=g.x,_.y=g.y)}return!1})(e,r,s,o)},sHe=(e,t,n,o,i,r=0.035,s=2,a=!1,c)=>{if(c?c.routesShareNet(t,n):By(t.rootConnectionName,n.rootConnectionName,i))return!1;let l=kI(t,n),d=t.x-l.x,u=t.y-l.y,h=Math.hypot(d,u),A=t.radius+n.radius+(m1.traceClearance??0.1)+zg-h;if(A<=0)return!1;let m=n.end.x-n.start.x,p=n.end.y-n.start.y,g=Math.hypot(m,p),_=t.routeIndex%2==0?1:-1,f=h>bi?d/h:g>bi?-p/g*_:1,y=h>bi?u/h:g>bi?m/g*_:0,x=Math.min(r,A/s),C=a?((b,P,E,B,w)=>{let T=QHt(b,P,w);if(T.length===0||T.some((N)=>!N.movable||b[N.routeIndex]===void 0))return!1;let Q=T.reduce((N,F)=>F.radius>N.radius?F:N);if(!rHe(b,Q,E,B,w))return!1;for(let N of T){if(N===Q)continue;N.x=Q.x,N.y=Q.y;let F=b[N.routeIndex];for(let H of N.pointIndexes){let z=F.route[H];z&&(z.x=Q.x,z.y=Q.y)}}return!0})(e,t,f*x,y*x,o):aU(e,t,f*x,y*x,o),I=yte(e,n,-f*x,-y*x,o,l.t);return C||I},FHt=(e,t,n,o,i,r)=>{if(t.z!==n.z||(r?r.routesShareNet(t,n):By(t.rootConnectionName,n.rootConnectionName,i)))return!1;let s=kHt(t,n),a=s.leftPoint.x-s.rightPoint.x,c=s.leftPoint.y-s.rightPoint.y,l=Math.hypot(a,c),d=t.radius+n.radius+(m1.traceClearance??0.1)+zg-l;if(d<=0)return!1;let u=t.end.x-t.start.x,h=t.end.y-t.start.y,A=Math.hypot(u,h),m=(t.routeIndex+n.routeIndex)%2==0?1:-1,p=l>bi?a/l:A>bi?-h/A*m:1,g=l>bi?c/l:A>bi?u/A*m:0,_=Math.min(dV,d/2),f=yte(e,t,p*_,g*_,o,s.leftT),y=yte(e,n,-p*_,-g*_,o,s.rightT);return f||y},Nee=(e,t,n)=>BU(e,n).includes(t.z),HHt=(e,t,n,o,i)=>{let r=t[n];if(!r)return;let s=gte(r,n);if(s.length===0)return;let a=vx(r),c=kE(s,o);if(!c)return;let l=sge(e,o,0.6,(h)=>!OA(a,h,i)&&Nee(h,c,e.layerCount));if(l)return{obstacle:l,segment:c};let d=sge(e,o,0.6,(h)=>!OA(a,h,i)&&s.some((A)=>Nee(h,A,e.layerCount)));if(!d)return;let u=kE(s.filter((h)=>Nee(d,h,e.layerCount)),o);return u?{obstacle:d,segment:u}:void 0},OHt=(e,t,n)=>{let o=t.width/2,i=t.height/2,r=[{x:t.center.x-o,y:t.center.y-i},{x:t.center.x+o,y:t.center.y-i},{x:t.center.x+o,y:t.center.y+i},{x:t.center.x-o,y:t.center.y+i}],s=[t.center,...r].map((d)=>kI(d,e)),a=[{point:e.start,t:0},{point:e.end,t:1},{point:{x:(e.start.x+e.end.x)/2,y:(e.start.y+e.end.y)/2},t:0.5},...s.map((d)=>({point:{x:d.x,y:d.y},t:d.t}))],c,l=Math.hypot(e.end.x-e.start.x,e.end.y-e.start.y);for(let d of a){let u=Pfe(d.point,t,n);if(!u)continue;let h=l>bi?Math.abs(((e.end.x-e.start.x)*u.direction.y-(e.end.y-e.start.y)*u.direction.x)/l):0;(!c||u.penetration>c.penetration+bi||Math.abs(u.penetration-c.penetration)<=bi&&h>c.normality)&&(c={...u,normality:h,t:d.t})}return c},aQo=(e,t,n,o=!1,i)=>{let r=!1,s=yS(t,e),a=Kte(t),c=MHt(e,s,a),l=Math.max(1,2*c),d=bQe(s,C_e,l),u=bQe(a,Ek,l);for(let h=0;h<s.length;h+=1){let A=s[h];if(!A)continue;let m=ZY(d,xk(C_e(A),c),l);for(let p of m){if(p<=h)continue;let g=s[p];g&&(r=LHt(t,A,g,e,n,dV,o,i)||r)}}for(let h=0;h<s.length;h+=1){let A=s[h];if(!A)continue;let m=ZY(u,xk(C_e(A),c),l);for(let p of m){let g=a[p];g&&(r=sHe(t,A,g,e,n,dV,2,!1,i)||r)}}for(let h=0;h<a.length;h+=1){let A=a[h];if(!A)continue;let m=ZY(u,xk(Ek(A),c),l);for(let p of m){if(p<=h)continue;let g=a[p];g&&(r=FHt(t,A,g,e,n,i)||r)}}return((h,A,m,p,g,_,f,y,x)=>{let C=!1,I=IFe(h),b=p.reduce((B,w)=>Math.max(B,w.radius),0)+I+zg,P=ffe(h),E=m.reduce((B,w)=>Math.max(B,w.radius),0)+P+zg;for(let B of h.obstacles){if(B.isCopperPour)continue;let w=EHt(B),T=x?.forObstacle(B),Q=ZY(g,xk(w,E),f);for(let F of Q){let H=m[F];if(!H)continue;if(T?T(H):OA(H.rootConnectionName,B,y))continue;let z=Pfe(H,B,H.radius+P+zg);if(!z)continue;let Y=Math.min(dV,z.penetration);C=aU(A,H,z.direction.x*Y,z.direction.y*Y,h)||C}let N=ZY(_,xk(w,b),f);for(let F of N){let H=p[F];if(!H)continue;if((T?T(H):OA(H.rootConnectionName,B,y))||!Nee(B,H,h.layerCount))continue;let z=OHt(H,B,H.radius+I+zg);if(!z)continue;let Y=Math.min(dV,z.penetration);C=yte(A,H,z.direction.x*Y,z.direction.y*Y,h,z.t)||C}}return C})(e,t,s,a,d,u,l,n,i)||r},aHe=(e,t,n,o=1,i,r=!1,s=!0)=>{let a=EI(t),c=((u,h,A)=>{let m=u*u<=xEt?new Uint8Array(u*u):void 0,p=u*h<=xEt,g=new WeakMap;return{routesShareNet:(_,f)=>{let y=_.routeIndex*u+f.routeIndex,x=m?.[y];if(x)return x===2;let C=By(_.rootConnectionName,f.rootConnectionName,A);return m&&(m[y]=C?2:1),C},forObstacle:(_)=>{let f=g.get(_);if(f)return f;let y=p?new Uint8Array(u):void 0;return f=(x)=>{let C=y?.[x.routeIndex];if(C)return C===2;let I=OA(x.rootConnectionName,_,A);return y&&(y[x.routeIndex]=I?2:1),I},g.set(_,f),f}}})(a.length,e.obstacles.length,i),l=Math.max(2,Math.round(12*Math.max(1,n)*o)),d=!1;for(let u=0;u<l;u+=1){if(!aQo(e,a,i,r,c))break;d=!0}return d&&s&&((u,h,A,m)=>{let p=!1,g=yS(h,u),_=Kte(h),f=MHt(u,g,_),y=Math.max(1,2*f),x=bQe(_,Ek,y);for(let C of g){let I=ZY(x,xk(C_e(C),f),y);for(let b of I){let P=_[b];P&&(p=sHe(h,C,P,u,A,dV,1.75,!1,m)||p)}}})(e,a,i,c),d?cS(a):t},cQo=(e)=>{let t=[];for(let n=0;n<e.route.length-1;n+=1){let o=e.route[n],i=e.route[n+1];if(!o||!i)continue;if(o.toNextSegmentType==="through_obstacle")continue;if(o.z===i.z||!Ym(o,i))continue;let r={x:o.x,y:o.y},s=t.at(-1);s&&Ym(s,r)||t.push(r)}return t},zHt=(e)=>({...e,vias:cQo(e)}),cS=(e)=>e.map(zHt),FY=(e,t)=>{let n=new Set(t);return e.map((o,i)=>n.has(i)?zHt(o):o)},DEt=(e)=>{let t=e.pcb_trace_id;if(typeof t!="string")return;let n=t.match(/^trace_(\d+)/);return n?Number.parseInt(n[1],10):void 0},jte=(e)=>{let t=e.center??e.pcb_center;if(!t||typeof t!="object")return;let n=t;return typeof n.x=="number"&&typeof n.y=="number"?{x:n.x,y:n.y}:void 0},EQe=(e,t=!0)=>e.errors.filter((n)=>((o)=>l1(o)==="pcb_via_clearance_error"||Array.isArray(o.pcb_via_ids))(n)&&(t||!wy(n))).length,wy=(e)=>l1(e)==="pcb_pad_pad_clearance_error"&&Array.isArray(e.pcb_via_ids)&&e.pcb_via_ids.length===1,NEt=(e)=>{let t=Object.entries(e).filter(([o,i])=>o!=="source_trace_id"&&(o.endsWith("_id")||o.endsWith("_ids"))&&i!==void 0&&i!=="").sort(([o],[i])=>o.localeCompare(i)),n=typeof e.message=="string"?e.message.replace(/-?\d+\.\d+/g,"#"):"";return JSON.stringify([l1(e),t,n])},Py=(e)=>Math.max(e.errors.filter((t)=>!wy(t)).length,e.count-e.errors.filter(wy).length),I_e=(e)=>{let t=Py(e);return t>0?t:e.count},GHt=(e)=>{if(Py(e)===0)return e.issueScore;let t=e.errors.filter((n)=>!wy(n));return e.errors.some(wy)?uV(t):e.legacyIssueScore??uV(t)},Mk=(e,t)=>{let n=Py(e),o=Py(t);return n!==o?n<o:!(n>0)&&e.count<t.count},REt=(e)=>{let t=e.filter((n)=>!wy(n));return t.length>0?t:e},oL=(e,t)=>{let n=e.pcb_trace_id;return typeof n=="string"?t.get(n)??DEt(e):DEt(e)},cU=(e,t,n,o,i)=>{let r=n.pcb_port_id;if(!r)return!1;let s=(i??t.viaDiameter)/2;return e.obstacles.some((a)=>{let c=BU(a,e.layerCount);return!(c.length!==1||c[0]!==n.z||!a.connectedTo.includes(r)||n.x-s<a.center.x-a.width/2-bi||n.x+s>a.center.x+a.width/2+bi||n.y-s<a.center.y-a.height/2-bi||n.y+s>a.center.y+a.height/2+bi)&&(OA(vx(t),a,o)||OA(t.connectionName,a,o))})},QEt=[0,1,-1,2,-2,3,-3,4],YHt=QEt.flatMap((e)=>QEt.map((t)=>[e,t])).sort(([e,t],[n,o])=>Math.abs(e)+Math.abs(t)-Math.abs(n)-Math.abs(o)),VHt=YHt.length,UHt=(e,t,n)=>e.x-t>=n.minX-bi&&e.x+t<=n.maxX+bi&&e.y-t>=n.minY-bi&&e.y+t<=n.maxY+bi,bI=(e,t)=>{let n=e.at(-1);n&&Ym(n,t)&&n.z===t.z&&n.pcb_port_id===t.pcb_port_id||e.push(t)},lQo=(e,t,n,o,i,r,s,a=0,c=!1)=>{let l=l1(n);if(l!=="pcb_pad_trace_clearance_error"&&l!=="pcb_trace_error")return!1;if(i<0||i>=e.layerCount)return!1;let d=t[o];if(!d||d.route.length<2)return!1;let u=d.route.map((W)=>({...W})),h=u[0],A=u.at(-1);if(!h||!A)return!1;let m=jte(n);if(!m)return!1;let p=eHe(n),g=p?HHt(e,t,o,m,s):void 0,_=p?g?.segment:kE(gte(d,o),m);if(!_||_.z===i)return!1;let{startIndex:f,endIndex:y}=_,x=r==="full"?u.length:r;for(let W=0;W<x;W+=1){let j=!1;if(u[f-1]?.z===_.z&&(f-=1,j=!0),u[y+1]?.z===_.z&&(y+=1,j=!0),!j)break}let C=f===0&&h.pcb_port_id,I=y===u.length-1&&A.pcb_port_id,b=d.viaDiameter/2,P=YHt[a%VHt],E=!1,B=(W)=>{let j=W==="start"?h:A,q=((ie,J,ee,se)=>{let le=ee.pcb_port_id;if(le)return ie.obstacles.find((he)=>{let ue=BU(he,ie.layerCount);return!(ue.length!==1||ue[0]!==ee.z||!he.connectedTo.includes(le)||!Sfe(ee,he))&&(OA(vx(J),he,se)||OA(J.connectionName,he,se))})})(e,d,j,s),ne=((ie,J)=>{let ee=J==="start"?ie[0]:ie.at(-1);if(!ee)return;let se=J==="start"?Array.from({length:ie.length-1},(le,he)=>he+1):Array.from({length:ie.length-1},(le,he)=>ie.length-he-2);for(let le of se){let he=ie[le];if(!he)continue;let ue=he.x-ee.x,Ae=he.y-ee.y,_e=Math.hypot(ue,Ae);if(!(_e<=bi))return{x:ue/_e,y:Ae/_e}}})(u,W);if(!q||!ne)return;let ce=((ie,J,ee,se)=>{let le=0,he=Math.hypot(J.width,J.height)+2*se,ue=se+bi,Ae=(_e)=>({x:ie.x+ee.x*_e,y:ie.y+ee.y*_e});if(!(V8(Ae(he),J)<ue)){for(;he-le>bi;){let _e=(le+he)/2;V8(Ae(_e),J)>=ue?he=_e:le=_e}return Ae(he)}})(j,q,((ie,J)=>{let ee=J*Math.PI/4,se=Math.cos(ee),le=Math.sin(ee);return{x:ie.x*se-ie.y*le,y:ie.x*le+ie.y*se}})(ne,W==="start"?P[0]:P[1]),b);if(!ce||!UHt(ce,b,e.bounds)||V8(ce,q)+bi<b)return;if(!c)return ce;let oe=((ie,J,ee,se,le,he)=>{let ue=se+(ie.minBoardEdgeClearance??0),Ae={minX:ie.bounds.minX+ue,maxX:ie.bounds.maxX-ue,minY:ie.bounds.minY+ue,maxY:ie.bounds.maxY-ue};if(Ae.minX>Ae.maxX||Ae.minY>Ae.maxY)return;let _e=jRo(ie,J,se,le,he),Pe=(lt)=>N_e(lt,Ae)&&_e.every((it)=>fEt(lt,it)>=it.clearance),Ee=iNe(ee,Ae);if(Pe(Ee))return N_e(ee,Ae)?ee:Ee;let Te=_e.filter((lt)=>fEt(Ee,lt)<lt.clearance),be=new Set(Te);for(let lt=0;lt<Te.length;lt+=1)for(let it of _e)!be.has(it)&&D6(Te[lt].bounds,it.bounds)&&(be.add(it),Te.push(it));let me=Te.flatMap(KRo),ye={x:Ae.minX,y:Ae.minY},Ce={x:Ae.maxX,y:Ae.minY},ve={x:Ae.maxX,y:Ae.maxY},De={x:Ae.minX,y:Ae.maxY},Ze;me.push(ME(ye,Ce),ME(Ce,ve),ME(ve,De),ME(De,ye));let st=Number.POSITIVE_INFINITY,et=(lt)=>{let it=xE(lt,ee);it<st&&Pe(lt)&&(Ze=lt,st=it)};for(let lt of me)for(let it of IHt(ee,lt))et(it);for(let lt=0;lt<me.length;lt+=1){let it=me[lt];if(!(xE(ee,iNe(ee,it.bounds))>st))for(let gt=lt+1;gt<me.length;gt+=1){let wt=me[gt];if(D6(it.bounds,wt.bounds)&&!(xE(ee,iNe(ee,wt.bounds))>st))for(let Dt of bHt(it,wt))et(Dt)}}return Ze})(e,d,ce,b,[_.z,i],s);return E||=oe!==void 0&&oe!==ce,oe},w=C?B("start"):void 0,T=I?B("end"):void 0;if(C&&!w||I&&!T||c&&!E)return!1;let Q=[];for(let W=0;W<f;W+=1)bI(Q,u[W]);let N=u[f],F=f>0&&Ym(u[f-1],N),H=u[y],z=y<u.length-1&&Ym(u[y+1],H);C?(bI(Q,h),bI(Q,{...h,...w,pcb_port_id:void 0}),bI(Q,{...h,...w,z:i,pcb_port_id:void 0})):(F||bI(Q,{...N,pcb_port_id:void 0}),bI(Q,{...N,z:i,pcb_port_id:void 0}));let Y=I?y-1:y;for(let W=f+1;W<=Y;W+=1)bI(Q,{...u[W],z:i,pcb_port_id:void 0});I?(bI(Q,{...A,...T,z:i,pcb_port_id:void 0}),bI(Q,{...A,...T,pcb_port_id:void 0}),bI(Q,A)):z||bI(Q,{...H,pcb_port_id:void 0});for(let W=y+1;W<u.length;W+=1)bI(Q,u[W]);for(let W=1;W<Q.length-1;W+=1)Q[W].pcb_port_id=void 0;let U=e.minBoardEdgeClearance??0.2,X=gte(d,o),V=yS([d],e);for(let W=1;W<Q.length;W+=1){let j=Q[W-1],q=Q[W];if(j.z===q.z&&!X.some((ne)=>PQe(j,ne.start,ne.end)&&PQe(q,ne.start,ne.end))&&BE(e,j,q)<d.traceThickness/2+U)return!1;if(j.z!==q.z&&j.toNextSegmentType!=="through_obstacle"&&!V.some((ne)=>Ym(ne,q)&&ne.radius>=b)&&Fg(e,q)<b+U)return!1}return d.route=Q,!0},dQo=(e,t,n,o,i,r,s)=>{let a=l1(n);if(a!=="pcb_pad_trace_clearance_error"&&a!=="pcb_trace_error")return!1;if(i<0||i>=e.layerCount)return!1;let c=oL(n,o);if(c===void 0)return!1;let l=t[c];if(!l||l.route.length<2)return!1;let d=l.route[0],u=l.route.at(-1);if(!d||!u||d.z!==u.z||i===d.z)return!1;if(l.route.some((A)=>A.z!==d.z))return!1;if(!d.pcb_port_id||!u.pcb_port_id)return!1;if(!cU(e,l,d,r,s)||!cU(e,l,u,r,s))return!1;let h=l.route.map((A)=>({...A}));return l.route=[h[0],{...h[0],z:i,pcb_port_id:void 0},...h.slice(1,-1).map((A)=>({...A,z:i})),{...h.at(-1),z:i,pcb_port_id:void 0},h.at(-1)],!0},uQo=(e,t,n,o,i,r,s)=>{if(l1(n)!=="pcb_pad_trace_clearance_error")return!1;let a=oL(n,o);if(a===void 0)return!1;let c=t[a];if(!c||c.route.length<4)return!1;let l=c.route.map((g)=>({...g}));if(i==="start"){let g=l[0];if(!cU(e,c,g,r,s))return!1;let _=-1;for(let I=1;I<l.length;I+=1)if(l[I].z!==g.z){_=I;break}if(_<=0)return!1;let f=_-1;if(!Ym(l[f],l[_]))return!1;let y=_;for(;y+1<l.length&&Ym(l[_],l[y+1]);)y+=1;let x=l[y].z,C=l.slice(f,y+1).map((I)=>I.z);return c.route=[g,...C.slice(1).map((I)=>({...g,z:I,pcb_port_id:void 0})),...l.slice(1,f+1).map((I)=>({...I,z:x})),...l.slice(y+1)],!0}let d=l.at(-1);if(!cU(e,c,d,r,s))return!1;let u=-1;for(let g=l.length-2;g>=0;g-=1)if(l[g].z!==d.z){u=g;break}if(u<0||u>=l.length-1)return!1;let h=u+1;if(!Ym(l[u],l[h]))return!1;let A=u;for(;A-1>=0&&Ym(l[u],l[A-1]);)A-=1;let m=l[A].z,p=l.slice(A,h+1).map((g)=>g.z);return c.route=[...l.slice(0,A+1),...l.slice(h+1,-1).map((g)=>({...g,z:m})),{...d,z:m,pcb_port_id:void 0},...p.slice(1,-1).map((g)=>({...d,z:g,pcb_port_id:void 0})),d],!0},qte=(e,t)=>{let n=e.pcb_trace_id;if(typeof n!="string")return;if(Array.isArray(e.pcb_via_ids)&&e.pcb_via_ids.length>0)return;let o=Array.isArray(e.pcb_trace_ids)?e.pcb_trace_ids.filter((l)=>typeof l=="string"):[],i=e.pcb_trace_error_id,r=`overlap_${n}_`,s=typeof i=="string"&&i.startsWith(r)?i.slice(r.length):void 0,a=[n,...o,...s?[s]:[]],c=[...new Set(a.map((l)=>t.get(l)).filter((l)=>l!==void 0))];return c.length>=2?[c[0],c[1]]:void 0},hQo=(e,t,n,o,i)=>{if(l1(n)!=="pcb_trace_error")return;let r=qte(n,o);if(!r)return;let s=n.worst_contact_center??n.center;if(!s||typeof s!="object")return;let a=s;if(typeof a.x!="number"||typeof a.y!="number")return;let c={x:a.x,y:a.y},l=Kte(t),d=kE(l,c,r[0]),u=kE(l,c,r[1]);if(!d||!u||d.z!==u.z)return;let h=kHt(d,u),A=h.leftPoint.x-h.rightPoint.x,m=h.leftPoint.y-h.rightPoint.y,p=Math.hypot(A,m),g=Number(n.minimum_clearance),_=Number.isFinite(g)?g:m1.traceClearance??0.1,f=d.radius+u.radius+_-p;if(f<=bi)return;let y=i===0?d:u,x=i===0?h.leftT:h.rightT,C=(1-x)**2+x**2;if(C<=bi)return;let I=f/C,b=i===0?h.leftPoint:h.rightPoint,P=i===0?h.rightPoint:h.leftPoint,E=i===0?1:-1,B=y.end.x-y.start.x,w=y.end.y-y.start.y,T=Math.hypot(B,w),Q=(y.routeIndex+(i===0?u.routeIndex:d.routeIndex))%2==0?1:-1,N=p>bi?(b.x-P.x)/p:T>bi?-w/T*Q*E:E,F=p>bi?(b.y-P.y)/p:T>bi?B/T*Q*E:0;return yte(t,y,N*I,F*I,e,x)?{movedRouteIndex:y.routeIndex}:void 0},mQo=(e)=>{let{srj:t,via:n,segment:o,segments:i,initialTarget:r,requiredTraceDistance:s,requiredObstacleDistance:a,connMap:c}=e,l=Math.min(...n.zLayers),d=Math.max(...n.zLayers),u=t.obstacles.filter((m)=>!m.isCopperPour&&!OA(n.rootConnectionName,m,c)&&BU(m,t.layerCount).some((p)=>p>=l&&p<=d)),h=u.filter((m)=>Boolean(Pfe(r,m,a)));return[r,...qRo(n,i,s-n.radius-o.radius,c),...h.flatMap((m)=>((p)=>{let{point:g,obstacle:_,requiredDistance:f}=p,y=_.center.x-_.width/2,x=_.center.x+_.width/2,C=_.center.y-_.height/2,I=_.center.y+_.height/2,b=Math.max(y-g.x,g.x-x,0),P=Math.max(C-g.y,g.y-I,0),E=[];if(b<f){let B=Math.sqrt(f*f-b*b);E.push({x:g.x,y:C-B-bi},{x:g.x,y:I+B+bi})}if(P<f){let B=Math.sqrt(f*f-P*P);E.push({x:y-B-bi,y:g.y},{x:x+B+bi,y:g.y})}return E})({point:r,obstacle:m,requiredDistance:a}))].filter((m)=>{if(!UHt(m,n.radius,t.bounds))return!1;let p=kI(m,o);return!(Math.hypot(m.x-p.x,m.y-p.y)<s-bi)&&(!i.some((g)=>g.z>=l&&g.z<=d&&!By(n.rootConnectionName,g.rootConnectionName,c)&&Da(m,g.start,g.end)<s+g.radius-o.radius-bi)&&u.every((g)=>V8(m,g)>=a-bi))}).sort((m,p)=>Math.hypot(m.x-n.x,m.y-n.y)-Math.hypot(p.x-n.x,p.y-n.y))[0]},kEt=(e,t,n,o,i,r)=>{if(l1(n)!=="pcb_trace_error")return!1;let s=typeof n.pcb_trace_error_id=="string"?n.pcb_trace_error_id.toLowerCase():"",a=typeof n.message=="string"?n.message.toLowerCase():"";if(!(typeof n.pcb_via_id=="string"||Array.isArray(n.pcb_via_ids)||s.includes("_via_")||a.includes("via")))return!1;if(oL(n,o)!==i)return!1;if(qte(n,o))return!1;let c=n.worst_contact_center??n.center;if(!c||typeof c!="object")return!1;let l=c;if(typeof l.x!="number"||typeof l.y!="number")return!1;let d={x:l.x,y:l.y},u=Kte(t),h=kE(u,d,i),A=Array.isArray(n.pcb_trace_ids)?n.pcb_trace_ids.filter((Y)=>typeof Y=="string"&&Y!==n.pcb_trace_id):[],m=A.map((Y)=>o.get(Y)).filter((Y)=>Y!==void 0),p=yS(t,e),g=Aee(A.length>0?p.filter((Y)=>m.includes(Y.routeIndex)):p,d);if(!h||!g||!g.movable||By(g.rootConnectionName,h.rootConnectionName,r))return!1;let _=kI(g,h),f=g.x-_.x,y=g.y-_.y,x=Math.hypot(f,y),C=Number(n.minimum_clearance),I=Number.isFinite(C)?C:m1.traceClearance??0.1,b=g.radius+h.radius+I-x;if(b<=bi)return!1;let P=h.end.x-h.start.x,E=h.end.y-h.start.y,B=Math.hypot(P,E),w=g.routeIndex%2==0?1:-1,T=x>bi?f/x:B>bi?-E/B*w:1,Q=x>bi?y/x:B>bi?P/B*w:0,N=g.radius+h.radius+I,F=g.radius+ffe(e)+zg,H={x:g.x+T*(b+zg),y:g.y+Q*(b+zg)},z=mQo({srj:e,via:g,segment:h,segments:u,initialTarget:H,requiredTraceDistance:N,requiredObstacleDistance:F,connMap:r});return!!z&&aU(t,g,z.x-g.x,z.y-g.y,e)},cHe=(e,t,n)=>{if(l1(t)!=="pcb_trace_error")return;let o=jte(t),i=e[n];if(!o||!i)return;let r=kE(gte(i,n),o);return r?{center:o,route:i,segment:r}:void 0},WHt=(e,t,n,o)=>{let i=cHe(e,t,n);if(!i)return;let{route:r,segment:s}=i,a=Math.max(0,s.startIndex-o),c=Math.min(r.route.length-1,s.endIndex+o),l=r.route.slice(a,c+1),d=l[0],u=l.at(-1);return d&&u&&!l.some((h)=>h.z!==d.z)&&d.z===u.z?{route:r,spanStartIndex:a,spanEndIndex:c,start:d,end:u}:void 0},pQo=(e,t,n,o,i,r,s=0,a,c)=>{if(r<0||r>=e.layerCount)return!1;let l=qte(n,o);if(!l)return!1;let d=l[i],u=cHe(t,n,d);if(!u||u.segment.z===r)return!1;let{route:h,segment:A}=u,{startIndex:m,endIndex:p}=A;for(let y=0;y<s;y+=1)h.route[m-1]?.z===A.z&&(m-=1),h.route[p+1]?.z===A.z&&(p+=1);if(m===0&&h.route[0]?.pcb_port_id&&!cU(e,h,h.route[0],a,c)||p===h.route.length-1&&h.route.at(-1)?.pcb_port_id&&!cU(e,h,h.route.at(-1),a,c))return!1;let g=h.route[m],_=h.route[p];if(!g||!_||g.z!==_.z)return!1;let f=h.route.slice(m,p+1).map((y)=>({...y,z:r,pcb_port_id:void 0}));return h.route.splice(m,p-m+1,{...g},...f,{..._}),!0},AQo=(e,t,n,o,i,r)=>{if(o<=0||i<=0)return!1;let s=cHe(e,t,n);if(!s)return!1;let{center:a,route:c,segment:l}=s,d=l.end.x-l.start.x,u=l.end.y-l.start.y,h=Math.hypot(d,u);if(h<=bi)return!1;let A=kI(a,l),m=VE(A.t-o/h,0.02,0.98),p=VE(A.t+o/h,0.02,0.98);if(m>=p)return!1;let g=(b)=>({x:l.start.x+d*b,y:l.start.y+u*b,z:l.z}),_=g(m),f=g(p),y=-u/h*r,x=d/h*r,C=c.route[l.startIndex],I=c.route[l.endIndex];return c.route.splice(l.startIndex,2,{...C},_,{..._,x:_.x+y*i,y:_.y+x*i},{...f,x:f.x+y*i,y:f.y+x*i},f,{...I}),!0},_Qo=(e,t,n,o,i,r,s,a=!1)=>{if(!Number.isInteger(i)||i<0||i>=e.layerCount)return!1;let c=jte(n),l=t[o],d=l?.route[0],u=l?.route.at(-1);if(!l||!c||!d||!u||d.z!==u.z||d.z===i||l.jumpers?.length||l.route.some((Y)=>Y.z!==d.z||Y.toNextSegmentType==="through_obstacle"))return!1;let h=u.x-d.x,A=u.y-d.y,m=Math.hypot(h,A);if(m<=bi||m>8)return!1;let p=h/m,g=A/m,_=g*r,f=-p*r,y=(Y)=>(Y.x-c.x)*p+(Y.y-c.y)*g,x=(Y,U,X)=>({x:c.x+p*Y+_*U,y:c.y+g*Y+f*U,z:X}),C=(l.viaDiameter??e.minViaDiameter??0.3)+(e.minTraceToPadEdgeClearance??m1.traceClearance??0.1),I=(a?1.25:-0.75)*C,b=(a?-0.75:1.25)*C,P=y(d)+0.5*C*s,E=y(u)+C*s,B=x(P,I,d.z),w=x(E,b,d.z),T=x(P,2*C,i),Q=x(E,2*C,i),N=[{...d},B,{...B,z:i},T,Q,{...w,z:i},w,{...u}],F=e.minBoardEdgeClearance??0,H=(l.viaDiameter??e.minViaDiameter??0.3)/2,z=l.traceThickness/2;if([B,w].some((Y)=>Fg(e,Y)+ca<H+F))return!1;for(let Y=0;Y<N.length-1;Y+=1){let U=N[Y],X=N[Y+1];if(U.z===X.z&&BE(e,U,X)+ca<z+F)return!1}return l.route.splice(0,l.route.length,...N),!0},gQo=(e,t,n,o,i,r,s)=>{if(!Number.isInteger(i)||i<1||r<=0)return!1;let a=WHt(t,n,o,i);if(!a)return!1;let{route:c,spanStartIndex:l,spanEndIndex:d,start:u,end:h}=a,A=h.x-u.x,m=h.y-u.y,p=Math.hypot(A,m);if(p<=bi)return!1;let g=-m/p*s*r,_=A/p*s*r,f={...u,x:u.x+g,y:u.y+_,pcb_port_id:void 0},y={...h,x:h.x+g,y:h.y+_,pcb_port_id:void 0};return!(!rU(f,e.bounds)||!rU(y,e.bounds))&&(c.route.splice(l,d-l+1,{...u},f,y,{...h}),!0)},fQo=(e,t,n,o,i,r)=>{if(!Number.isInteger(i)||i<0)return!1;let s=WHt(t,n,o,i);if(!s)return!1;let{route:a,spanStartIndex:c,spanEndIndex:l,start:d,end:u}=s;return!(Math.hypot(r.x-d.x,r.y-d.y)<=bi||Math.hypot(r.x-u.x,r.y-u.y)<=bi||!rU(r,e.bounds))&&(a.route.splice(c,l-c+1,{...d},{x:r.x,y:r.y,z:d.z},{...u}),!0)},pE=(e,t,n,o,i,r)=>{if(r){let c=Py(e),l=Py(r);if(c!==l)return c<l}let s=I_e(e),a=GHt(e);return s<n||s===n&&a<o||s===n&&t<i},MQe=(e,t,n,o,i,r,s=!0,a=!1,c=!0,l=!1)=>{let d=!1;for(let u of n){let h=yS(t,e),A=Kte(t),m=jte(u);if(!m)continue;let p=m,g=u.pcb_via_ids,_=l1(u)==="pcb_via_clearance_error",f=wy(u),y=Array.isArray(g)&&g.length>0,x=!_&&!f&&y&&(typeof u.pcb_trace_id=="string"||Array.isArray(u.pcb_trace_ids)),C=l&&x;if(y&&!x){p=IEt(e,u,m);let N=oL(u,o),F=g.length>1?rQo(h,m):void 0;if(F){let H=a&&l1(u)==="pcb_via_clearance_error"&&u.pcb_via_pair_net_relation==="same_net",z=s&&l1(u)==="pcb_via_clearance_error";d=(H?sQo(t,F[0],F[1],e,r):LHt(t,F[0],F[1],e,r,0.16*Math.abs(i),z))||d}else{let H=Aee(h,m,N);H&&(d=rNe(t,H,p,e)||d)}continue}let I=u.pcb_trace_id,b=oL(u,o);if(C&&b===void 0)continue;let P=Array.isArray(u.pcb_trace_ids)?u.pcb_trace_ids.filter((N)=>typeof N=="string"):[];if(C&&typeof I=="string"&&b!==void 0&&P.includes(I)&&P.some((N)=>N!==I&&!o.has(N))){let N=Aee(h,m,b);if(N){d=rNe(t,N,m,e)||d;continue}}let E=s&&!x?qte(u,o):void 0;if(E){let N=kE(A,m,E[0]),F=kE(A,m,E[1]);if(N&&F&&FHt(t,N,F,e,r)){d=!0;continue}}let B=eHe(u),w=B&&b!==void 0?HHt(e,t,b,m,r):void 0,T=B?w?.segment:kE(A,m,b);if(T){let N=B?w?.obstacle:sge(e,m);if(B&&!N)continue;p=B?N?.center??m:IEt(e,u,m);let F=C?void 0:Aee(h,m),H=l1(u)==="pcb_via_trace_clearance_error",z=typeof u.pcb_trace_error_id=="string"?u.pcb_trace_error_id.toLowerCase():"",Y=typeof u.message=="string"?u.message.toLowerCase():"",U=H||typeof u.pcb_via_id=="string"||Array.isArray(u.pcb_via_ids)||z.includes("_via_")||Y.includes("via"),X=Array.isArray(u.pcb_port_ids)&&u.pcb_port_ids.length>0;if(F&&!By(F.rootConnectionName,T.rootConnectionName,r)&&(H||Math.hypot(F.x-m.x,F.y-m.y)<0.45)){if(sHe(t,F,T,e,r,0.3*Math.abs(i),1,c)&&(d=!0,U&&!X))continue}d=(N!==void 0&&(B||!OA(T.rootConnectionName,N,r)&&Nee(N,T,e.layerCount))?iQo(t,T,N,e,r,i):oQo(t,T,p,e,i))||d}let Q=C?void 0:Aee(yS(t,e),m);Q&&Math.hypot(Q.x-m.x,Q.y-m.y)<0.35&&(d=rNe(t,Q,p,e)||d)}return d},Op=0.000001,xte=0.006,yQo=[1,0.5,0.25,0.1,0.05,0.025],TV=(e,t)=>(t.traceThickness??e.minTraceWidth)/2,cge=(e)=>e.minTraceToPadEdgeClearance??0.1,XHt=(e,t)=>t.viaDiameter??e.minViaDiameter??0.3,tT=(e,t)=>bn(e,t)<Op,KHt=(e)=>{let t=[],n=(o)=>{t.some((i)=>tT(i,o))||t.push({x:o.x,y:o.y})};for(let o of e.vias)n(o);for(let o=0;o<e.route.length-1;o+=1){let i=e.route[o],r=e.route[o+1];i&&r&&i.z!==r.z&&(tT(i,r)&&n(i))}return t},lge=(e)=>bn({x:0,y:0},e)<Op?{x:0,y:0}:PRe({x:0,y:0},e),jHt=(e,t)=>{if(e.zLayers&&e.zLayers.length>0)return e.zLayers;let n=Array.from({length:t},(o,i)=>i).filter((o)=>e.layers.includes(s1(o,t)));return n.length>0?n:Array.from({length:t},(o,i)=>i)},lHe=(e,t,n)=>By(vx(e),vx(t),n)||By(vx(e),t.connectionName,n)||By(e.connectionName,vx(t),n)||By(e.connectionName,t.connectionName,n),qHt=(e,t,n)=>OA(vx(e),t,n)||OA(e.connectionName,t,n),xQo=(e,t,n,o)=>!n.pcb_port_id&&e.obstacles.some((i)=>qHt(t,i,o)&&jHt(i,e.layerCount).includes(n.z)&&((r,s)=>r.x>=s.center.x-s.width/2-Op&&r.x<=s.center.x+s.width/2+Op&&r.y>=s.center.y-s.height/2-Op&&r.y<=s.center.y+s.height/2+Op)(n,i)),JHt=(e,t,n,o,i)=>{if(!((s,a)=>s.zLayers.includes(a))(i,n.z))return Number.POSITIVE_INFINITY;let r=TV(e,t);return i.kind==="pad"?HE(n,o,i.obstacle)-(cge(e)+r+xte):Da(i.center,n,o)-(cge(e)+r+i.diameter/2+xte)},CQo=(e,t,n)=>{let o=n.kind==="pad"?n.obstacle.center:n.center,i=im(o,e,t),r=lge({x:i.x-o.x,y:i.y-o.y});if(Math.abs(r.x)<Op&&Math.abs(r.y)<Op){let s=t.x-e.x,a=t.y-e.y,c=Uk(e,t),l=lge({x:-a,y:s}),d={x:-l.x,y:-l.y};r=bn({x:c.x+l.x,y:c.y+l.y},o)>=bn({x:c.x+d.x,y:c.y+d.y},o)?l:d}return r},_ee=(e,t,n,o)=>{if(n<=0||n>=t.route.length-1){let a=t.route[n];return!a||!xQo(e,t,a,o)}let i=t.route[n];if(!i||i.insideJumperPad)return!0;let r=t.route[n-1],s=t.route[n+1];return!(!r||r.z===i.z)||(!(!s||s.z===i.z)||t.vias.some((a)=>tT(a,i)))},LEt=(e,t,n)=>{let o=0;for(let i=0;i<t.route.length-1;i+=1){let r=t.route[i],s=t.route[i+1];if(r&&s&&r.z===s.z&&!tT(r,s))for(let a of n){let c=JHt(e,t,r,s,a);if(!(c>=0)&&(o+=c*c,a.kind==="pad")){if(HE(r,s,a.obstacle)<Op)o+=0.01/(Da(a.obstacle.center,r,s)+0.01)}}}return o},FEt=(e,t,n,o)=>{let i=0;for(let r=0;r<t.route.length-1;r+=1){let s=t.route[r],a=t.route[r+1];if(s&&a&&s.z===a.z&&!tT(s,a)){for(let c of n)if(!lHe(t,c,o)){for(let l=0;l<c.route.length-1;l+=1){let d=c.route[l],u=c.route[l+1];if(!d||!u||d.z!==s.z||u.z!==s.z||tT(d,u))continue;let h=Um(s,a,d,u)-TV(e,t)-TV(e,c),A=cge(e)+xte-h;A>0&&(i+=A*A)}for(let l of KHt(c)){let d=Da(l,s,a)-TV(e,t)-XHt(e,c)/2,u=cge(e)+xte-d;u>0&&(i+=u*u)}}}}return i},IQo=(e,t,n,o,i)=>{let r=t.route.map(()=>({x:0,y:0}));for(let s=0;s<t.route.length-1;s+=1){let a=t.route[s],c=t.route[s+1];if(a&&c&&a.z===c.z&&!tT(a,c)){for(let l of n){let d=JHt(e,t,a,c,l);if(d>=0)continue;let u=CQo(a,c,l);if(Math.abs(u.x)<Op&&Math.abs(u.y)<Op)continue;let h=!_ee(e,t,s,i),A=!_ee(e,t,s+1,i);if(!h&&!A)continue;let m=-d,p=h&&A?0.5:h?1:0,g=h&&A?0.5:A?1:0;r[s].x+=u.x*m*p,r[s].y+=u.y*m*p,r[s+1].x+=u.x*m*g,r[s+1].y+=u.y*m*g}for(let l of o)if(!lHe(t,l,i))for(let d=0;d<l.route.length-1;d+=1){let u=l.route[d],h=l.route[d+1];if(!u||!h||u.z!==a.z||h.z!==a.z||tT(u,h))continue;let A=Um(a,c,u,h)-TV(e,t)-TV(e,l),m=e.minTraceToPadEdgeClearance+xte-A;if(m<=0)continue;let p=Uk(a,c),g=im(p,u,h),_=lge({x:p.x-g.x,y:p.y-g.y});if(Math.abs(_.x)<Op&&Math.abs(_.y)<Op){let I=c.x-a.x,b=c.y-a.y;_=lge({x:-b,y:I})}let f=!_ee(e,t,s,i),y=!_ee(e,t,s+1,i);if(!f&&!y)continue;let x=f&&y?0.5:f?1:0,C=f&&y?0.5:y?1:0;r[s].x+=_.x*m*x,r[s].y+=_.y*m*x,r[s+1].x+=_.x*m*C,r[s+1].y+=_.y*m*C}}}return r},bQo=(e,t,n,o,i)=>({...t,route:t.route.map((r,s)=>{if(_ee(e,t,s,i))return{...r};let a=((c,l)=>{let d=bn({x:0,y:0},c);if(d<=l||d<Op)return c;let u=l/d;return{x:c.x*u,y:c.y*u}})(n[s]??{x:0,y:0},0.5);return{...r,x:r.x+a.x*o,y:r.y+a.y*o}}),vias:t.vias.map((r)=>({...r})),jumpers:t.jumpers?[...t.jumpers]:void 0}),SQo=(e,t)=>t.route.every((n)=>n.x>=e.bounds.minX-Op&&n.x<=e.bounds.maxX+Op&&n.y>=e.bounds.minY-Op&&n.y<=e.bounds.maxY+Op),PQo=(e,t,n,o,i)=>{let r=((l,d,u,h)=>{let A=[];for(let p of l.obstacles)p.isCopperPour||qHt(u,p,h)||A.push({kind:"pad",obstacle:p,zLayers:jHt(p,l.layerCount)});let m=Array.from({length:l.layerCount},(p,g)=>g);for(let p of d)if(p!==u&&!lHe(u,p,h))for(let g of KHt(p))A.push({kind:"via",center:{x:g.x,y:g.y},diameter:XHt(l,p),zLayers:m,connectionName:p.connectionName,rootConnectionName:p.rootConnectionName});return A})(e,t,n,i),s=t.filter((l,d)=>d!==o&&l!==n),a=n,c=LEt(e,a,r)+FEt(e,a,s,i);for(let l=0;l<160&&!(c<=Op);l+=1){let d=IQo(e,a,r,s,i);if(d.every((A)=>bn(A,{x:0,y:0})<0.000000001))break;let u=null,h=c;for(let A of yQo){let m=bQo(e,a,d,A,i),p=LEt(e,m,r)+FEt(e,m,s,i);if(p<c-0.000001&&SQo(e,m)){u=m,h=p;break}}if(!u)break;a=u,c=h}return a},Q8=0.000001,vQo=[1,0.5,0.25,0.1,0.05,0.025],EQo=(e,t)=>e.some((n)=>t.includes(n)),MQo=(e,t,n,o)=>(OA(e.rootConnectionName,n,o)||OA(t.connectionName,n,o))&&V8(e,n)<=Q8,$Ht=(e,t,n,o)=>{let i=[],r=t[n.routeIndex];if(!r)return i;for(let s of e.obstacles){if(s.isCopperPour||MQo(n,r,s,o))continue;let a=BU(s,e.layerCount);EQo(n.zLayers,a)&&i.push({obstacle:s})}return i},BQo=(e,t,n)=>V8(t,n.obstacle)-(t.radius+e.minViaEdgeToPadEdgeClearance+0.006),HEt=(e,t,n,o)=>yS(t,e).filter((i)=>i.routeIndex===n).reduce((i,r)=>i+((s,a,c,l)=>{let d=0;for(let u of $Ht(s,a,c,l)){let h=BQo(s,c,u);!(h>=0)&&(d+=h*h,V8(c,u.obstacle)<Q8)&&(d+=0.01/(bn(c,u.obstacle.center)+0.01))}return d})(e,t,r,o),0),wQo=(e,t,n,o)=>{let i=t[n];if(!i)return[];let r=i.route.map(()=>({x:0,y:0})),s=yS(t,e).filter((a)=>a.routeIndex===n);for(let a of s)if(a.movable)for(let c of $Ht(e,t,a,o)){let l=a.radius+e.minViaEdgeToPadEdgeClearance+0.006,d=Pfe(a,c.obstacle,l);if(d)for(let u of a.pointIndexes)r[u].x+=d.direction.x*d.penetration,r[u].y+=d.direction.y*d.penetration}return r},TQo=(e,t,n,o)=>{let i=new Set(yS([t],e).flatMap((r)=>r.movable?r.pointIndexes:[]));return{...t,route:t.route.map((r,s)=>{if(!i.has(s))return{...r};let a=((c,l)=>{let d=bn({x:0,y:0},c);if(d<=l||d<Q8)return c;let u=l/d;return{x:c.x*u,y:c.y*u}})(n[s]??{x:0,y:0},0.5);return{...r,x:r.x+a.x*o,y:r.y+a.y*o}}),vias:t.vias.map((r)=>({...r})),jumpers:t.jumpers?[...t.jumpers]:void 0}},DQo=(e,t)=>t.route.every((n)=>n.x>=e.bounds.minX-Q8&&n.x<=e.bounds.maxX+Q8&&n.y>=e.bounds.minY-Q8&&n.y<=e.bounds.maxY+Q8),NQo=(e,t,n,o,i)=>{let r=n,s=HEt(e,t,o,i);for(let a=0;a<160&&!(s<=Q8);a+=1){let c=wQo(e,t,o,i);if(c.every((u)=>bn(u,{x:0,y:0})<0.000000001))break;let l=null,d=s;for(let u of vQo){let h=TQo(e,r,c,u),A=[...t];A[o]=h;let m=HEt(e,A,o,i);if(m<s-0.000001&&DQo(e,h)){l=h,d=m;break}}if(!l)break;t[o]=l,r=l,s=d}return r},ZHt=[0.2,0.4,0.8,1.2].flatMap((e)=>[0.2,0.3,0.45,0.6].flatMap((t)=>[-1,1].map((n)=>({halfSpan:e,offset:t,directionSign:n})))).flatMap((e)=>[0,1].map((t)=>({kind:"segment",routeSide:t,...e}))),sNe=[1,-1].flatMap((e)=>[1,-1].flatMap((t)=>[!1,!0].flatMap((n)=>[0,1].map((o)=>({routeSide:o,normalDirectionSign:e,tangentDirectionSign:t,reverseEndpointOffsets:n}))))),BQe=[0,1].map((e)=>({kind:"displacementChain",routeSide:e})),RQo=[...BQe,...[-1,1].flatMap((e)=>[0,1].map((t)=>({kind:"segment",routeSide:t,halfSpan:0.4,offset:1.2,directionSign:e}))),...[-1,1].flatMap((e)=>[0,1].map((t)=>({kind:"span",routeSide:t,spanExpansion:3,offset:1.8,directionSign:e}))),...[{dx:-2.4,dy:-0.4},{dx:-2.4,dy:0.4},{dx:2.4,dy:-0.4},{dx:2.4,dy:0.4},{dx:-0.4,dy:-2.4},{dx:-0.4,dy:2.4},{dx:0.4,dy:-2.4},{dx:0.4,dy:2.4}].flatMap((e)=>[0,1].map((t)=>({kind:"waypoint",routeSide:t,spanExpansion:2,...e}))),...[{dx:-0.17,dy:0},{dx:0.17,dy:0},{dx:0,dy:-0.17},{dx:0,dy:0.17}].flatMap((e)=>[0,1].map((t)=>({kind:"waypoint",routeSide:t,spanExpansion:0,...e}))),...ZHt],aNe=[0,1,2],bE=class extends Js{srj;inputHdRoutes;guardedInputHdRoutes;connMap;effort;drcEvaluator;referenceDrcEvaluator;autoroutingDrcEngine;viaHoleDiameter;configuredMaxIterations;enableBroadFallback;enableLargeBoardBroadFallback;enableTargetedErrorSweep;enablePostSolveClearanceRelaxation;enableSafeTraceLayerMoves;enableViaInPadLayerMoves;enableTraceViaOwnerTargeting;outputHdRoutes;initialDrcIssueCount;initialRepairDrcIssueCount;initialLowCountErrorsHaveMovableTraces=!1;broadForceAccepted=!1;targetedForceAccepted=!1;candidateAttempts=0;viaInPadCandidateAttempts=0;viaInPadCandidatesAccepted=0;padTopologyErrorCursor=0;safeTraceLayerCursorByErrorId=new Map;traceLayerCorridorCursorByErrorId=new Map;tracePairDetourCursorByErrorId=new Map;errorCursor=0;stalledIterations=0;bestDrcIssueCountSeen;bestDrcIssueScoreSeen;lastDrcCountImprovementCheckIteration=0;drcCountPlateauChecks=0;largeBoardBroadFallbackMisses=0;outputSnapshot;legacyCleanCheckpoint;viaPadRepairRolledBack=!1;referenceInputDrcIssueCount;referenceCandidateDrcIssueCount;referenceCandidateRolledBack=!1;referenceInputSnapshot;inputSnapshot;constructor(e){if(super(),this.srj=e.srj,this.inputHdRoutes=e.hdRoutes,this.guardedInputHdRoutes=cS(EI(e.hdRoutes)),this.connMap=e.connMap,this.effort=e.effort??1,this.drcEvaluator=e.drcEvaluator,this.referenceDrcEvaluator=e.referenceDrcEvaluator,this.autoroutingDrcEngine=e.autoroutingDrcEngine??(e.drcEvaluator?void 0:new Wte(e.srj,{connMap:e.connMap,traceClearance:e.srj.minTraceToPadEdgeClearance??m1.traceClearance,viaClearance:e.srj.minTraceToPadEdgeClearance??m1.viaClearance,includeTraceViaOwnerMetadata:e.enableTraceViaOwnerTargeting??!1})),e.viaHoleDiameter!==void 0&&(!Number.isFinite(e.viaHoleDiameter)||e.viaHoleDiameter<=0))throw Error("viaHoleDiameter must be a positive finite number");this.viaHoleDiameter=e.viaHoleDiameter,this.configuredMaxIterations=e.maxIterations,this.enableBroadFallback=e.enableBroadFallback??!0,this.enableLargeBoardBroadFallback=e.enableLargeBoardBroadFallback??!0,this.enableTargetedErrorSweep=e.enableTargetedErrorSweep??!1,this.enablePostSolveClearanceRelaxation=e.enablePostSolveClearanceRelaxation??!0,this.enableSafeTraceLayerMoves=e.enableSafeTraceLayerMoves??!1,this.enableViaInPadLayerMoves=e.enableViaInPadLayerMoves??!1,this.enableTraceViaOwnerTargeting=e.enableTraceViaOwnerTargeting??!1,this.outputHdRoutes=e.hdRoutes,this.referenceDrcEvaluator&&(this.referenceInputSnapshot=this.getReferenceDrcSnapshot(this.inputHdRoutes)),this.MAX_ITERATIONS=this.configuredMaxIterations??sEt(this.effort)}getConstructorParams(){return[{srj:this.srj,hdRoutes:this.inputHdRoutes,connMap:this.connMap,effort:this.effort,drcEvaluator:this.drcEvaluator,referenceDrcEvaluator:this.referenceDrcEvaluator,autoroutingDrcEngine:this.autoroutingDrcEngine,viaHoleDiameter:this.viaHoleDiameter,maxIterations:this.configuredMaxIterations,enableBroadFallback:this.enableBroadFallback,enableLargeBoardBroadFallback:this.enableLargeBoardBroadFallback,enableTargetedErrorSweep:this.enableTargetedErrorSweep,enablePostSolveClearanceRelaxation:this.enablePostSolveClearanceRelaxation,enableSafeTraceLayerMoves:this.enableSafeTraceLayerMoves,enableViaInPadLayerMoves:this.enableViaInPadLayerMoves,enableTraceViaOwnerTargeting:this.enableTraceViaOwnerTargeting}]}updateStats(e){this.stats={initialDrcIssueCount:this.initialDrcIssueCount??e.count,finalDrcIssueCount:e.count,globalDrcForceImproveMaxIterations:this.MAX_ITERATIONS,globalDrcForceImproveBroadForceAccepted:this.broadForceAccepted,globalDrcForceImproveTargetedForceAccepted:this.targetedForceAccepted,globalDrcForceImproveCandidateAttempts:this.candidateAttempts,globalDrcForceImproveViaInPadCandidateAttempts:this.viaInPadCandidateAttempts,globalDrcForceImproveViaInPadCandidatesAccepted:this.viaInPadCandidatesAccepted,globalDrcForceImproveStalledIterations:this.stalledIterations,globalDrcForceImproveBestDrcIssueCountSeen:this.bestDrcIssueCountSeen??e.count,globalDrcForceImproveBestDrcIssueScoreSeen:this.bestDrcIssueScoreSeen??e.issueScore,globalDrcForceImproveDrcCountPlateauChecks:this.drcCountPlateauChecks,globalDrcForceImproveLargeBoardBroadFallbackMisses:this.largeBoardBroadFallbackMisses,globalDrcForceImproveViaPadRepairRolledBack:this.viaPadRepairRolledBack,globalDrcForceImproveReferenceInputDrcIssueCount:this.referenceInputDrcIssueCount,globalDrcForceImproveReferenceCandidateDrcIssueCount:this.referenceCandidateDrcIssueCount,globalDrcForceImproveReferenceCandidateRolledBack:this.referenceCandidateRolledBack}}finishAtLegacyCleanCheckpoint(){let e=this.legacyCleanCheckpoint;return!!e&&(this.outputHdRoutes=e.routes,this.outputSnapshot=e.snapshot,this.viaPadRepairRolledBack=!0,this.updateStats(e.snapshot),this.solved=!0,!0)}increaseMaxIterationsForDrcIssueCount(e){this.configuredMaxIterations===void 0?this.MAX_ITERATIONS=Math.max(this.MAX_ITERATIONS,((t,n)=>Math.max(sEt(n),Math.ceil(t*XNo*Math.max(1,n))))(e,this.effort),((t,n)=>t>120&&n>0?192:48)(this.inputHdRoutes.length,e)):this.MAX_ITERATIONS=this.configuredMaxIterations}getSnapshot(e){return(this.initialLowCountErrorsHaveMovableTraces?ZRo:_E)(this.srj,e,this.drcEvaluator,this.connMap,this.autoroutingDrcEngine)}getReferenceDrcSnapshot(e){let t={traces:[],srj:this.srj,routes:e,hdRoutes:e},n=this.referenceDrcEvaluator?.getCachedResult?.(t);if(n){let o=Array.isArray(n)?n:n.errors;return{errors:o,count:o.length}}return _E(this.srj,e,this.referenceDrcEvaluator,this.connMap,this.autoroutingDrcEngine)}getViaIssueCount(e){return EQe(e)}getRepairIssueCount(e){return I_e(e)}getRepairIssueScore(e){return GHt(e)}acceptSolvedRoutes(e,t){let n=this.enablePostSolveClearanceRelaxation?((l,d,u)=>{if(l.minTraceToPadEdgeClearance===void 0||l.minTraceToPadEdgeClearance<=0)return d;let h=!1,A=EI(d);for(let m=0;m<4;m+=1)for(let p=0;p<A.length;p+=1){let g=A[p];if(!g)continue;let _=PQo(l,A,g,p,u);_!==g&&(A[p]=_,h=!0)}return h?A:d})(this.srj,e,this.connMap):e,o=this.enablePostSolveClearanceRelaxation?((l,d,u)=>{if(l.minViaEdgeToPadEdgeClearance===void 0||l.minViaEdgeToPadEdgeClearance<=0)return d;let h=!1,A=EI(d);for(let m=0;m<4;m+=1)for(let p=0;p<A.length;p+=1){let g=A[p];if(!g)continue;let _=NQo(l,A,g,p,u);_!==g&&(A[p]=_,h=!0)}return h?cS(A):d})(this.srj,n,this.connMap):e,i=o===e?t:this.getSnapshot(o),r=i.count<t.count||i.count===t.count&&i.issueScore<=t.issueScore,s=r?o:e,a=r?i:t,c=this.inputSnapshot??this.getSnapshot(this.guardedInputHdRoutes);if(this.referenceDrcEvaluator){let l=this.referenceInputSnapshot,d=this.getReferenceDrcSnapshot(s);this.referenceInputDrcIssueCount=l.count,this.referenceCandidateDrcIssueCount=d.count,d.count>l.count&&(s=this.guardedInputHdRoutes,a=c,this.referenceCandidateRolledBack=!0)}this.outputHdRoutes=s,this.outputSnapshot=a,this.stalledIterations=0,this.updateStats(a),this.solved=!0}updateDrcCountPlateauState(e){let t=this.getRepairIssueCount(e),n=this.getRepairIssueScore(e);this.bestDrcIssueCountSeen??=t,this.bestDrcIssueScoreSeen??=n;let o=this.initialRepairDrcIssueCount??t,i=this.inputHdRoutes.length>120&&o>0;if((o>=20||i)&&this.iterations<192)return(t<this.bestDrcIssueCountSeen||t===this.bestDrcIssueCountSeen&&n<this.bestDrcIssueScoreSeen)&&(this.bestDrcIssueCountSeen=t,this.bestDrcIssueScoreSeen=n),void(i&&this.largeBoardBroadFallbackMisses>=2&&(this.solved=!0));let r=((s)=>s>=20?8:s<=2?1:2)(o);if(!(this.iterations-this.lastDrcCountImprovementCheckIteration<r)){if(this.lastDrcCountImprovementCheckIteration=this.iterations,t<this.bestDrcIssueCountSeen||t===this.bestDrcIssueCountSeen&&n<this.bestDrcIssueScoreSeen)return this.bestDrcIssueCountSeen=t,this.bestDrcIssueScoreSeen=n,void(this.drcCountPlateauChecks=0);this.drcCountPlateauChecks+=1,this.drcCountPlateauChecks>=2&&(this.solved=!0)}}_step(){let e=this.outputHdRoutes,t=this.outputSnapshot??this.getSnapshot(e),n=Py(t);if(this.legacyCleanCheckpoint&&n>0)return void this.finishAtLegacyCleanCheckpoint();if(!this.legacyCleanCheckpoint&&n===0&&t.errors.some(wy)&&(this.legacyCleanCheckpoint={routes:cS(EI(e)),snapshot:t}),this.initialDrcIssueCount===void 0){this.inputSnapshot=t,this.initialDrcIssueCount=t.count,this.initialRepairDrcIssueCount=this.getRepairIssueCount(t);let N=REt(t.errors);this.initialLowCountErrorsHaveMovableTraces=this.initialRepairDrcIssueCount>0&&this.initialRepairDrcIssueCount<=3&&N.every((F)=>oL(F,t.traceRouteIndexById)!==void 0),this.initialLowCountErrorsHaveMovableTraces&&(t=this.getSnapshot(e)),this.bestDrcIssueCountSeen=this.getRepairIssueCount(t),this.bestDrcIssueScoreSeen=this.getRepairIssueScore(t),this.increaseMaxIterationsForDrcIssueCount(this.getRepairIssueCount(t))}if(t.count===0)return void this.acceptSolvedRoutes(e,t);let o=this.getRepairIssueCount(t),i=this.getRepairIssueScore(t),r=this.getViaIssueCount(t),s=t.errors.filter((N)=>Boolean(jte(N)));if(s.length===0)return void this.acceptSolvedRoutes(e,t);let a=(c=this.effort,Math.max(1,Math.round(3*Math.max(1,c))));var c;let l=0,d=0,u=!1,h=!1,A=!1,m=REt(s),p=this.enableTargetedErrorSweep?m.find((N)=>N.type==="pcb_via_clearance_error"&&N.pcb_via_pair_net_relation==="same_net"):void 0,g=this.enableTargetedErrorSweep&&(this.iterations-1)%8==0,_=p??(g?m.find((N)=>N.type==="pcb_via_clearance_error"):void 0),f=_?[_,...m.filter((N)=>N!==_)]:m,y=Math.min(f.length,Math.max(1,Math.ceil(this.effort))),x=_?0:this.errorCursor%f.length,C=this.enableTargetedErrorSweep?((N,F)=>{let H=Math.max(2,Math.round(12*Math.max(1,F)));return N.filter((z)=>l1(z)==="pcb_trace_error").slice(0,H)})(s,this.effort):[],I=o<=1||this.initialLowCountErrorsHaveMovableTraces,b=!this.initialLowCountErrorsHaveMovableTraces&&o<=8&&this.srj.layerCount>1,P=_?[]:s.filter((N)=>N.type==="pcb_pad_trace_clearance_error"||(this.enableSafeTraceLayerMoves||I||b)&&N.type==="pcb_trace_error"),E=P.map((N,F)=>P[(this.padTopologyErrorCursor+F)%P.length]);for(let N of this.enableSafeTraceLayerMoves||this.enableViaInPadLayerMoves?E:[]){let F=!this.enableSafeTraceLayerMoves||d>=a,H=!this.enableViaInPadLayerMoves||l>=a;if(h||F&&H)break;let z;this.padTopologyErrorCursor=(P.indexOf(N)+1)%P.length;let Y=typeof N.pcb_trace_error_id=="string"?N.pcb_trace_error_id:typeof N.pcb_trace_id=="string"?N.pcb_trace_id:void 0,U=oL(N,t.traceRouteIndexById),X=qte(N,t.traceRouteIndexById);if(this.enableTraceViaOwnerTargeting&&U!==void 0&&Array.isArray(N.pcb_via_ids)&&N.pcb_via_ids.length===1&&l<a){let W=EI(e);if(kEt(this.srj,W,N,t.traceRouteIndexById,U,this.connMap)){let j=cS(W),q=this.getSnapshot(j),ne=this.getViaIssueCount(q);l+=1,this.candidateAttempts+=1,ne<=r&&Mk(q,t)&&(z={routes:j,snapshot:q,viaIssueCount:ne,usesViaInPad:!1})}}if(this.enableSafeTraceLayerMoves&&U!==void 0){let W=X??[U],j=W.length*this.srj.layerCount*aNe.length,q=W.length*this.srj.layerCount*VHt,ne=j+q,ce=eHe(N),oe=ce?0:j,ie=ce?q:0,J=Y?this.safeTraceLayerCursorByErrorId.get(Y)??0:0,ee=0;for(;d<a&&ee<ne;){let se=J;J=(J+1)%ne,ee+=1;let le=se>=oe&&se<oe+q,he=se-(le?oe:ie),ue=he%W.length,Ae=Math.floor(he/W.length),_e=Ae%this.srj.layerCount,Pe=le?"full":aNe[Math.floor(Ae/this.srj.layerCount)%aNe.length],Ee=le?Math.floor(Ae/this.srj.layerCount):0,Te=W[ue],be=!1;for(let me of[!1,!0]){let ye=LY(e,[Te]);if(!lQo(this.srj,ye,N,Te,_e,Pe,this.connMap,Ee,me))continue;let Ce=FY(ye,[Te]);be=!0,this.candidateAttempts+=1;let ve=this.getSnapshot(Ce),De=this.getViaIssueCount(ve),Ze=z?.snapshot??t;De<=(z?.viaIssueCount??r)&&(Mk(ve,Ze)||z!==void 0&&I_e(ve)===I_e(Ze)&&ve.count<Ze.count)&&(z={routes:Ce,snapshot:ve,viaIssueCount:De,usesViaInPad:!1})}be&&(d+=1)}Y&&this.safeTraceLayerCursorByErrorId.set(Y,J)}if(this.enableSafeTraceLayerMoves&&b&&Y&&X){let W=this.traceLayerCorridorCursorByErrorId.get(Y)??0,j=0;for(;l<a&&j<sNe.length;){let q=sNe[W%sNe.length];W+=1,j+=1;let ne=X[q.routeSide],ce=e[ne]?.route[0]?.z;if(ce===void 0)continue;let oe=(ce+1)%this.srj.layerCount,ie=LY(e,[ne]);if(!_Qo(this.srj,ie,N,ne,oe,q.normalDirectionSign,q.tangentDirectionSign,q.reverseEndpointOffsets))continue;let J=FY(ie,[ne]);l+=1,this.candidateAttempts+=1;let ee=this.getSnapshot(J),se=this.getViaIssueCount(ee),le=z?.snapshot??t;se<=(z?.viaIssueCount??r)&&Mk(ee,le)&&(z={routes:J,snapshot:ee,viaIssueCount:se,usesViaInPad:!1})}this.traceLayerCorridorCursorByErrorId.set(Y,W)}if(this.enableSafeTraceLayerMoves&&Y&&(this.initialLowCountErrorsHaveMovableTraces&&(X||U!==void 0)||!this.initialLowCountErrorsHaveMovableTraces&&X)){let W=this.initialLowCountErrorsHaveMovableTraces?RQo:I?[...BQe,...ZHt]:BQe,j=X??[U],q=this.tracePairDetourCursorByErrorId.get(Y)??0,ne=0;for(;l<a&&ne<W.length;){let ce=W[q%W.length];q+=1,ne+=1;let oe=j[ce.routeSide];if(oe===void 0)continue;let ie=this.initialLowCountErrorsHaveMovableTraces&&N.worst_contact_center?{...N,center:N.worst_contact_center,message:N.worst_contact_message??N.message,actual_clearance:N.worst_actual_clearance??N.actual_clearance}:N;if(ce.kind==="displacementChain"){let _e=EI(e),Pe=hQo(this.srj,_e,ie,t.traceRouteIndexById,ce.routeSide);if(!Pe)continue;u=!0,l+=1,this.candidateAttempts+=1;let Ee=cS(_e),Te=this.getSnapshot(Ee),be=this.getViaIssueCount(Te),me=this.getRepairIssueCount(Te);if(me>0&&l<a){let De=EI(Ee),Ze=!1;for(let st of Te.errors)Ze=kEt(this.srj,De,st,Te.traceRouteIndexById,Pe.movedRouteIndex,this.connMap)||Ze;if(Ze){l+=1,this.candidateAttempts+=1;let st=cS(De),et=this.getSnapshot(st),lt=this.getViaIssueCount(et);pE(et,lt,me,this.getRepairIssueScore(Te),be,Te)&&(Ee=st,Te=et,be=lt,me=this.getRepairIssueCount(Te))}}let ye=z?this.getRepairIssueCount(z.snapshot):o,Ce=z?this.getRepairIssueScore(z.snapshot):i,ve=z?.viaIssueCount??r;if(be<=ve&&pE(Te,be,ye,Ce,ve,z?.snapshot??t)&&(z={routes:Ee,snapshot:Te,viaIssueCount:be,usesViaInPad:!1}),me===0)break;continue}let J=LY(e,[oe]);if(!(ce.kind==="segment"?AQo(J,ie,oe,ce.halfSpan,ce.offset,ce.directionSign):ce.kind==="span"?gQo(this.srj,J,ie,oe,ce.spanExpansion,ce.offset,ce.directionSign):fQo(this.srj,J,ie,oe,ce.spanExpansion,{x:ie.center.x+ce.dx,y:ie.center.y+ce.dy})))continue;let ee=FY(J,[oe]);u=!0,l+=1,this.candidateAttempts+=1;let se=this.getSnapshot(ee),le=this.getViaIssueCount(se),he=z?this.getRepairIssueCount(z.snapshot):o,ue=z?this.getRepairIssueScore(z.snapshot):i,Ae=z?.viaIssueCount??r;(this.initialLowCountErrorsHaveMovableTraces?pE(se,le,he,ue,Ae,z?.snapshot??t):le<=Ae&&Mk(se,z?.snapshot??t))&&(z={routes:ee,snapshot:se,viaIssueCount:le,usesViaInPad:!1})}this.tracePairDetourCursorByErrorId.set(Y,q)}for(let W of this.enableViaInPadLayerMoves?["start","end"]:[]){if(l>=a)break;if(U===void 0)break;let j=LY(e,[U]);if(!uQo(this.srj,j,N,t.traceRouteIndexById,W,this.connMap,this.viaHoleDiameter))continue;let q=FY(j,[U]);this.viaInPadCandidateAttempts+=1,l+=1,this.candidateAttempts+=1;let ne=this.getSnapshot(q),ce=this.getViaIssueCount(ne),oe=z?this.getRepairIssueCount(z.snapshot):o,ie=z?this.getRepairIssueScore(z.snapshot):i;pE(ne,ce,oe,ie,z?.viaIssueCount??r,z?.snapshot??t)&&(z={routes:q,snapshot:ne,viaIssueCount:ce,usesViaInPad:!0})}let V=this.enableViaInPadLayerMoves?this.srj.layerCount:0;for(let W=0;W<V&&!(l>=a)&&U!==void 0;W+=1){let j=LY(e,[U]);if(!dQo(this.srj,j,N,t.traceRouteIndexById,W,this.connMap,this.viaHoleDiameter))continue;let q=FY(j,[U]);this.viaInPadCandidateAttempts+=1,l+=1,this.candidateAttempts+=1;let ne=this.getSnapshot(q),ce=this.getViaIssueCount(ne),oe=z?this.getRepairIssueCount(z.snapshot):o,ie=z?this.getRepairIssueScore(z.snapshot):i;pE(ne,ce,oe,ie,z?.viaIssueCount??r,z?.snapshot??t)&&(z={routes:q,snapshot:ne,viaIssueCount:ce,usesViaInPad:!0})}if(this.enableViaInPadLayerMoves&&I&&X){let W=this.iterations%2==0?[0,1]:[1,0],j=this.iterations%3;for(let q of W)for(let ne=0;ne<this.srj.layerCount&&!(l>=a);ne+=1){let ce=X[q],oe=LY(e,[ce]);if(!pQo(this.srj,oe,N,t.traceRouteIndexById,q,ne,j,this.connMap,this.viaHoleDiameter))continue;let ie=FY(oe,[ce]);this.viaInPadCandidateAttempts+=1,l+=1,this.candidateAttempts+=1;let J=this.getSnapshot(ie),ee=this.getViaIssueCount(J),se=z?this.getRepairIssueCount(z.snapshot):o,le=z?this.getRepairIssueScore(z.snapshot):i;pE(J,ee,se,le,z?.viaIssueCount??r,z?.snapshot??t)&&(z={routes:ie,snapshot:J,viaIssueCount:ee,usesViaInPad:!0})}}z&&(e=z.routes,t=z.snapshot,o=this.getRepairIssueCount(t),i=this.getRepairIssueScore(t),r=z.viaIssueCount,this.targetedForceAccepted=!0,z.usesViaInPad&&(this.viaInPadCandidatesAccepted+=1),h=!0)}if(!h&&C.length>=2){let N=EI(e),F=!1;for(let H of C)F=MQe(this.srj,N,[H],t.traceRouteIndexById,1,this.connMap,!0,this.enableTargetedErrorSweep,!1,this.enableTraceViaOwnerTargeting)||F;if(F){let H=cS(N);l+=1,this.candidateAttempts+=1;let z=this.getSnapshot(H),Y=this.getViaIssueCount(z);if(pE(z,Y,o,i,r,t)&&(e=H,t=z,o=this.getRepairIssueCount(z),i=this.getRepairIssueScore(z),r=Y,this.targetedForceAccepted=!0,h=!0,z.count===0))return void this.acceptSolvedRoutes(e,t)}}for(let N=0;N<y&&l<a&&!h;N+=1){let F=(x+N)%f.length,H=f[F];if(!H)continue;this.errorCursor=(F+1)%f.length;let z=o===1;for(let Y of KNo(this.effort)){if(l>=a)break;let U=EI(e);if(!MQe(this.srj,U,[H],t.traceRouteIndexById,Y,this.connMap,!0,this.enableTargetedErrorSweep,z,this.enableTraceViaOwnerTargeting))continue;let X=cS(U);l+=1,this.candidateAttempts+=1;let V=this.getSnapshot(X),W=this.getViaIssueCount(V);if(pE(V,W,o,i,r,t)){if(e=X,t=V,o=this.getRepairIssueCount(V),i=this.getRepairIssueScore(V),r=W,this.targetedForceAccepted=!0,h=!0,V.count===0)return void this.acceptSolvedRoutes(e,t);break}}if(h)break}let B=e.length<=120,w=(T=s.length,Math.max(16,Math.min(64,2*T)));var T;let Q=this.enableLargeBoardBroadFallback&&this.MAX_ITERATIONS>=192&&!B&&this.stalledIterations>0&&this.stalledIterations%w===0;if(this.enableBroadFallback&&!h&&(B||this.effort>=2&&this.stalledIterations>=2||Q)){A=Q;for(let N of[1,2]){let F=aHe(this.srj,e,this.effort,N,this.connMap,this.drcEvaluator===void 0,!1);if(F===e)continue;let H=this.getSnapshot(F),z=this.getViaIssueCount(H);if(pE(H,z,o,i,r,t)&&(e=F,t=H,o=this.getRepairIssueCount(H),i=this.getRepairIssueScore(H),r=z,this.broadForceAccepted=!0,h=!0,H.count===0))return void this.acceptSolvedRoutes(e,t)}}h?this.largeBoardBroadFallbackMisses=0:A&&(this.largeBoardBroadFallbackMisses+=1),this.outputHdRoutes=e,this.outputSnapshot=t,this.stalledIterations=h?0:this.stalledIterations+1,u||this.updateDrcCountPlateauState(t),this.updateStats(t),(this.solved||o===0)&&this.acceptSolvedRoutes(e,t)}tryFinalAcceptance(){let e=this.outputSnapshot??this.getSnapshot(this.outputHdRoutes);this.legacyCleanCheckpoint&&Py(e)>0&&this.finishAtLegacyCleanCheckpoint()||this.acceptSolvedRoutes(this.outputHdRoutes,e)}getOutput(){return this.outputHdRoutes}visualize(){return super.visualize()}preview(){return this.visualize()}},eOt=class extends Js{params;inputHdRoutes;guardedInputHdRoutes;broadMaxIterations;broadPassMultiplier;autoroutingDrcEngine;legacyDrcEvaluator;outputHdRoutes;phase="start";inputSnapshot;baselineSolver;baselineSnapshot;broadInputSnapshot;broadSnapshot;broadSolver;preBroadCandidate;safeTraceLayerInputRoutes;safeTraceLayerInputSnapshot;safeTraceLayerSolver;safeTraceLayerPhaseAccepted=!1;mixedSafeTraceLayerSolver;mixedSafeTraceLayerPhaseAccepted=!1;legacySafeTraceLayerRoutes;legacySafeTraceLayerSnapshot;legacySafeTraceLayerSelectedSolver;viaInPadSolver;portfolioSelectedSolver;selectedSolver;referenceInputDrcIssueCount;referenceCandidateDrcIssueCount;referenceCandidateRolledBack=!1;mixedReferenceInputDrcIssueCount;mixedReferenceCandidateDrcIssueCount;referenceInputSnapshot;constructor(e){if(super(),!Number.isFinite(e.broadPassMultiplier))throw Error("broadPassMultiplier must be a finite number");if(e.broadPassMultiplier<=0)throw Error("broadPassMultiplier must be greater than zero");if(!Number.isInteger(e.broadMaxIterations))throw Error("broadMaxIterations must be an integer");if(e.broadMaxIterations<=0)throw Error("broadMaxIterations must be greater than zero");if(e.viaInPadMaxIterations!==void 0&&!Number.isInteger(e.viaInPadMaxIterations))throw Error("viaInPadMaxIterations must be an integer");if(e.viaInPadMaxIterations!==void 0&&e.viaInPadMaxIterations<=0)throw Error("viaInPadMaxIterations must be greater than zero");this.autoroutingDrcEngine=e.autoroutingDrcEngine??(e.drcEvaluator?void 0:new Wte(e.srj,{connMap:e.connMap,traceClearance:e.srj.minTraceToPadEdgeClearance??m1.traceClearance,viaClearance:e.srj.minTraceToPadEdgeClearance??m1.viaClearance,includeTraceViaOwnerMetadata:e.enableTraceViaOwnerTargeting??!1})),this.legacyDrcEvaluator=(t)=>{let n=e.drcEvaluator?.evaluateLegacy??e.drcEvaluator,o=n?n(t):this.autoroutingDrcEngine.evaluateLegacy(t.traces),i=Array.isArray(o)?o:o.errors,r=Array.isArray(o)?o:o.errorsWithCenters??o.errors;return{errors:i.filter((s)=>!wy(s)),errorsWithCenters:r.filter((s)=>!wy(s))}},Object.defineProperty(this.legacyDrcEvaluator,"inputMode",{get:()=>(e.drcEvaluator?.evaluateLegacy??e.drcEvaluator)?.inputMode}),this.params={...e,autoroutingDrcEngine:this.autoroutingDrcEngine},this.inputHdRoutes=e.hdRoutes,this.guardedInputHdRoutes=cS(EI(e.hdRoutes)),this.broadMaxIterations=e.broadMaxIterations,this.broadPassMultiplier=e.broadPassMultiplier,this.outputHdRoutes=e.hdRoutes,this.params.referenceDrcEvaluator&&(this.referenceInputSnapshot=this.getReferenceDrcSnapshot(this.inputHdRoutes))}getConstructorParams(){return[{...this.params,hdRoutes:this.inputHdRoutes}]}stepBranch(e,t){if(this.activeSubSolver=e,e.step(),e.failed)throw Error(`${t} DRC repair branch failed: ${e.error}`)}getReferenceDrcSnapshot(e){let t={traces:[],srj:this.params.srj,routes:e,hdRoutes:e},n=this.params.referenceDrcEvaluator?.getCachedResult?.(t);if(n){let o=Array.isArray(n)?n:n.errors;return{errors:o,count:o.length}}return _E(this.params.srj,e,this.params.referenceDrcEvaluator,this.params.connMap,this.autoroutingDrcEngine)}finishWithOutput(e,t,n){let o=e,i=t;if(this.params.referenceDrcEvaluator){let r=this.referenceInputSnapshot,s=this.getReferenceDrcSnapshot(o);this.referenceInputDrcIssueCount=r.count,this.referenceCandidateDrcIssueCount=s.count,(s.count>r.count||s.count===r.count&&((a,c)=>{let l=new Set(c.map(NEt));return a.some((d)=>!l.has(NEt(d)))})(s.errors,r.errors))&&(o=this.guardedInputHdRoutes,i=this.inputSnapshot,this.referenceCandidateRolledBack=!0)}this.outputHdRoutes=o,this.selectedSolver=n,this.activeSubSolver=null,this.phase="done",this.progress=1,this.stats={...this.portfolioSelectedSolver?.stats??{},...n?.stats??{},finalDrcIssueCount:i.count,drcBranchPortfolioInitialDrcIssueCount:this.inputSnapshot?.count??t.count,drcBranchPortfolioBaselineDrcIssueCount:this.baselineSnapshot?.count??t.count,drcBranchPortfolioBroadInitialDrcIssueCount:this.broadInputSnapshot?.count,drcBranchPortfolioBroadFinalDrcIssueCount:this.broadSnapshot?.count,drcBranchPortfolioBroadMaxIterations:this.broadMaxIterations,drcBranchPortfolioBroadBranchAttempted:Boolean(this.broadSolver),drcBranchPortfolioBroadBranchAccepted:this.portfolioSelectedSolver!==void 0&&this.portfolioSelectedSolver===this.broadSolver,drcBranchPortfolioSafeTraceLayerPhaseAttempted:Boolean(this.safeTraceLayerSolver),drcBranchPortfolioSafeTraceLayerPhaseAccepted:this.safeTraceLayerPhaseAccepted,drcBranchPortfolioMixedSafeTraceLayerPhaseAttempted:Boolean(this.mixedSafeTraceLayerSolver),drcBranchPortfolioMixedSafeTraceLayerPhaseAccepted:this.mixedSafeTraceLayerPhaseAccepted,drcBranchPortfolioViaInPadPhaseAttempted:Boolean(this.viaInPadSolver),drcBranchPortfolioViaInPadMaxIterations:this.params.viaInPadMaxIterations,drcBranchPortfolioFinalNonViaPadDrcIssueCount:Py(i),drcBranchPortfolioReferenceInputDrcIssueCount:this.referenceInputDrcIssueCount,drcBranchPortfolioReferenceCandidateDrcIssueCount:this.referenceCandidateDrcIssueCount,drcBranchPortfolioReferenceCandidateRolledBack:this.referenceCandidateRolledBack,drcBranchPortfolioMixedReferenceInputDrcIssueCount:this.mixedReferenceInputDrcIssueCount,drcBranchPortfolioMixedReferenceCandidateDrcIssueCount:this.mixedReferenceCandidateDrcIssueCount},this.solved=!0}startBaselineBranch(){this.baselineSolver=new bE({...this.params,hdRoutes:this.inputHdRoutes,drcEvaluator:this.legacyDrcEvaluator,referenceDrcEvaluator:void 0,enableSafeTraceLayerMoves:!1,enableViaInPadLayerMoves:!1}),this.activeSubSolver=this.baselineSolver,this.phase="baseline"}startSafeTraceLayerPhase(e,t,n){this.portfolioSelectedSolver=n,this.params.enableSafeTraceLayerMoves?(this.safeTraceLayerInputRoutes=e,this.safeTraceLayerInputSnapshot=t,this.safeTraceLayerSolver=new bE({...this.params,hdRoutes:e,drcEvaluator:this.legacyDrcEvaluator,referenceDrcEvaluator:void 0,maxIterations:this.params.viaInPadMaxIterations??this.params.maxIterations,enableLargeBoardBroadFallback:!1,enableTargetedErrorSweep:!1,enablePostSolveClearanceRelaxation:!1,enableSafeTraceLayerMoves:!0,enableViaInPadLayerMoves:!1}),this.activeSubSolver=this.safeTraceLayerSolver,this.phase="safeTraceLayer"):this.startViaInPadPhase(e,t,n)}startViaInPadPhase(e,t,n){this.portfolioSelectedSolver=n;let o=this.params.enableViaInPadLayerMoves&&this.params.viaInPadDrcEvaluator!==void 0;t.errors.some(wy)||o?(this.viaInPadSolver=new bE({...this.params,hdRoutes:e,drcEvaluator:this.params.viaInPadDrcEvaluator??this.params.drcEvaluator,maxIterations:this.params.viaInPadMaxIterations??this.params.maxIterations,enableLargeBoardBroadFallback:!1,enableTargetedErrorSweep:!1,enablePostSolveClearanceRelaxation:!1,enableSafeTraceLayerMoves:!1,enableViaInPadLayerMoves:this.params.enableViaInPadLayerMoves}),this.activeSubSolver=this.viaInPadSolver,this.phase="viaInPad"):this.finishWithOutput(e,t,n)}startMixedSafeTraceLayerPhase(e,t,n){this.legacySafeTraceLayerRoutes=e,this.legacySafeTraceLayerSnapshot=t,this.legacySafeTraceLayerSelectedSolver=n,this.mixedSafeTraceLayerSolver=new bE({...this.params,hdRoutes:this.safeTraceLayerInputRoutes,drcEvaluator:this.params.drcEvaluator,referenceDrcEvaluator:void 0,maxIterations:this.params.viaInPadMaxIterations??this.params.maxIterations,enableLargeBoardBroadFallback:!1,enableTargetedErrorSweep:!1,enablePostSolveClearanceRelaxation:!1,enableSafeTraceLayerMoves:!0,enableViaInPadLayerMoves:!1}),this.activeSubSolver=this.mixedSafeTraceLayerSolver,this.phase="mixedSafeTraceLayer"}startBroadBranch(){let e=aHe(this.params.srj,this.inputHdRoutes,this.params.effort??1,this.broadPassMultiplier,this.params.connMap);this.broadInputSnapshot=_E(this.params.srj,e,this.params.drcEvaluator,this.params.connMap,this.autoroutingDrcEngine),Mk(this.broadInputSnapshot,this.baselineSnapshot)?(this.broadSolver=new bE({...this.params,hdRoutes:e,drcEvaluator:this.legacyDrcEvaluator,referenceDrcEvaluator:void 0,maxIterations:this.broadMaxIterations,enableSafeTraceLayerMoves:!1,enableViaInPadLayerMoves:!1}),this.activeSubSolver=this.broadSolver,this.phase="broad"):this.startSafeTraceLayerPhase(this.baselineSolver.getOutput(),this.baselineSnapshot,this.baselineSolver)}_step(){if(this.phase==="start")return this.inputSnapshot=_E(this.params.srj,this.inputHdRoutes,this.params.drcEvaluator,this.params.connMap,this.autoroutingDrcEngine),Py(this.inputSnapshot)===0?void this.startViaInPadPhase(this.inputHdRoutes,this.inputSnapshot):void this.startBaselineBranch();if(this.phase==="baseline"){if(this.stepBranch(this.baselineSolver,"baseline"),!this.baselineSolver.solved)return;let e=this.baselineSolver.getOutput();return this.baselineSnapshot=_E(this.params.srj,e,this.params.drcEvaluator,this.params.connMap,this.autoroutingDrcEngine),Py(this.baselineSnapshot)===0?void this.startViaInPadPhase(e,this.baselineSnapshot,this.baselineSolver):void(this.params.enableSafeTraceLayerMoves&&this.baselineSnapshot.count<=3?this.startSafeTraceLayerPhase(e,this.baselineSnapshot,this.baselineSolver):this.startBroadBranch())}if(this.phase==="broad"){if(this.stepBranch(this.broadSolver,"broad"),!this.broadSolver.solved)return;let e=this.broadSolver.getOutput();return this.broadSnapshot=_E(this.params.srj,e,this.params.drcEvaluator,this.params.connMap,this.autoroutingDrcEngine),Mk(this.broadSnapshot,this.baselineSnapshot)?void this.startSafeTraceLayerPhase(e,this.broadSnapshot,this.broadSolver):void this.startSafeTraceLayerPhase(this.baselineSolver.getOutput(),this.baselineSnapshot,this.baselineSolver)}if(this.phase==="safeTraceLayer"){if(this.stepBranch(this.safeTraceLayerSolver,"safe trace-layer"),!this.safeTraceLayerSolver.solved)return;let e=this.safeTraceLayerSolver.getOutput(),t=_E(this.params.srj,e,this.params.drcEvaluator,this.params.connMap,this.autoroutingDrcEngine),n=EQe(this.safeTraceLayerInputSnapshot,!1),o=EQe(t,!1);this.safeTraceLayerPhaseAccepted=o<=n&&pE(t,o,this.safeTraceLayerInputSnapshot.count,this.safeTraceLayerInputSnapshot.issueScore,n,this.safeTraceLayerInputSnapshot);let i=this.safeTraceLayerPhaseAccepted?e:this.safeTraceLayerInputRoutes,r=this.safeTraceLayerPhaseAccepted?t:this.safeTraceLayerInputSnapshot,s=this.safeTraceLayerPhaseAccepted?this.safeTraceLayerSolver:this.portfolioSelectedSolver;return this.preBroadCandidate&&!Mk(r,this.preBroadCandidate.snapshot)&&(i=this.preBroadCandidate.routes,r=this.preBroadCandidate.snapshot,s=this.preBroadCandidate.solver,this.safeTraceLayerPhaseAccepted=this.preBroadCandidate.safeTraceLayerPhaseAccepted),r.count>0&&!this.broadInputSnapshot?(this.preBroadCandidate={routes:i,snapshot:r,solver:s,safeTraceLayerPhaseAccepted:this.safeTraceLayerPhaseAccepted},void this.startBroadBranch()):Py(r)>0&&this.safeTraceLayerInputSnapshot.errors.some(wy)?void this.startMixedSafeTraceLayerPhase(i,r,s):void this.startViaInPadPhase(i,r,s)}if(this.phase==="mixedSafeTraceLayer"){if(this.stepBranch(this.mixedSafeTraceLayerSolver,"mixed safe trace-layer"),!this.mixedSafeTraceLayerSolver.solved)return;let e=this.mixedSafeTraceLayerSolver.getOutput(),t=_E(this.params.srj,e,this.params.drcEvaluator,this.params.connMap,this.autoroutingDrcEngine),n=Py(t)<=Py(this.legacySafeTraceLayerSnapshot),o=!0;if(this.params.referenceDrcEvaluator){let i=this.getReferenceDrcSnapshot(this.legacySafeTraceLayerRoutes),r=this.getReferenceDrcSnapshot(e);this.mixedReferenceInputDrcIssueCount=i.count,this.mixedReferenceCandidateDrcIssueCount=r.count,o=r.count<=i.count}return this.mixedSafeTraceLayerPhaseAccepted=n&&o,void this.startViaInPadPhase(this.mixedSafeTraceLayerPhaseAccepted?e:this.legacySafeTraceLayerRoutes,this.mixedSafeTraceLayerPhaseAccepted?t:this.legacySafeTraceLayerSnapshot,this.mixedSafeTraceLayerPhaseAccepted?this.mixedSafeTraceLayerSolver:this.legacySafeTraceLayerSelectedSolver)}if(this.phase==="viaInPad"){if(this.stepBranch(this.viaInPadSolver,"via-in-pad"),!this.viaInPadSolver.solved)return;let e=this.viaInPadSolver.getOutput(),t=_E(this.params.srj,e,this.params.viaInPadDrcEvaluator??this.params.drcEvaluator,this.params.connMap,this.autoroutingDrcEngine);this.finishWithOutput(e,t,this.viaInPadSolver)}}getOutput(){return this.outputHdRoutes}visualize(){return(this.activeSubSolver??this.selectedSolver)?.visualize()??super.visualize()}preview(){return(this.activeSubSolver??this.selectedSolver)?.preview()??this.visualize()}},tOt=(e)=>e.circuitJsonMetadata??{},nOt=({connections:e,obstacles:t})=>new Set([...e.flatMap((n)=>n.pointsToConnect.flatMap((o)=>o.pcb_port_id?[o.pcb_port_id]:[])),...t.flatMap((n)=>{let o=tOt(n).pcb_port_id;return o?[o]:[]})]),wQe=(e)=>e.__netConnectionName??e.__rootConnectionNames?.[0]??e.name,dHe=(e)=>Array.from(new Set([e.name,e.__netConnectionName,...e.__rootConnectionNames??[],...e.pointsToConnect.flatMap((t)=>[t.pointId,t.pcb_port_id])])).filter((t)=>Boolean(t)),oOt=(e,t)=>{let n=new Map,o=new Set,i=new Map;for(let r of e){let s=wQe(r);for(let d of dHe(r)){let u=n.get(d);u&&u!==s?(n.delete(d),o.add(d)):o.has(d)||n.set(d,s)}let a=t.getNetConnectedToId(r.name);if(!a)continue;let c=a,l=i.get(c)??new Set;l.add(s),i.set(c,l)}return{connMap:t,circuitJsonSourceTraceIdBySrjDeclaredConnectionReference:n,circuitJsonSourceTraceIdsByConnectivityNetId:i}},DV=(e,t)=>{let n=e.circuitJsonSourceTraceIdBySrjDeclaredConnectionReference.get(t);if(n)return n;let o=e.connMap.getNetConnectedToId(t);if(!o)return;let i=e.circuitJsonSourceTraceIdsByConnectivityNetId.get(o);return i?.size===1?i.values().next().value:void 0};function QQo(e,t,n=e,o){let i=[],r=n===e?e.connections:[...e.connections,...n.connections],s=n===e?e.obstacles:n.obstacles,a=oOt(r,o??x0(n===e?e:{...n,connections:r})),c=nOt({connections:r,obstacles:s});if(r.forEach((l)=>{let d=l.pointsToConnect.map((f)=>f.pcb_port_id).filter((f)=>Boolean(f)),u=new Set(d),h=(f)=>((y)=>Array.from(new Set(y.flatMap((x)=>x.connectedTo))))(f).filter((y)=>!u.has(y)),A=l.pointsToConnect.map((f)=>f.pointId).filter((f)=>Boolean(f)),m=DV(a,l.name)??wQe(l),p=[],g=t.find((f)=>(f.connection_name??f.connectionName)===l.name);if(g){let f=(x)=>("route_type"in x)&&x.route_type==="jumper"?x.start:("x"in x)&&("y"in x)?{x:x.x,y:x.y}:{x:0,y:0},y=[f(g.route[0]),f(g.route[g.route.length-1])];for(let x of y)for(let C of s)jE(x,C)<=0&&p.push(C)}let _=i.find((f)=>f.type==="source_trace"&&f.source_trace_id===m);if(_){let f=_;f.connected_source_port_ids=[...new Set([...f.connected_source_port_ids,...d])],f.connected_source_net_ids=[...new Set([...f.connected_source_net_ids??[],...A,...h(p)])]}else i.push({type:"source_trace",source_trace_id:m,connected_source_port_ids:d,connected_source_net_ids:h(p).concat(A)})}),t[0]&&"type"in t[0]){let l=new Map(r.map((d)=>[d.name,d]));for(let d of t){let u=[...new Set((d.connectsTo??[]).filter((_)=>c.has(_)))],h=new Set(u),A=[...new Set((d.connectsTo??[]).filter((_)=>!h.has(_)))];if(u.length===0&&A.length===0)continue;let m=l.get(d.connection_name),p=DV(a,d.connection_name)??d.connectsTo?.map((_)=>DV(a,_)).find((_)=>_!==void 0)??(m?wQe(m):d.connection_name),g=i.find((_)=>_.type==="source_trace"&&_.source_trace_id===p);g?.type!=="source_trace"?i.push({type:"source_trace",source_trace_id:p,connected_source_port_ids:u,connected_source_net_ids:A}):(g.connected_source_port_ids=[...new Set([...g.connected_source_port_ids,...u])],g.connected_source_net_ids=[...new Set([...g.connected_source_net_ids??[],...A])])}}return i}function kQo(e,t,n){let o,i=Number.POSITIVE_INFINITY;for(let r of t){let s=n.get(r);if(!s)continue;let a=Math.hypot(s.x-e.x,s.y-e.y);a<i&&(i=a,o=r)}return o??t[0]}var LQo=new Set(["top","bottom","inner1","inner2","inner3","inner4","inner5","inner6","inner7","inner8"]),eV=(e)=>LQo.has(e);function OEt(e,t,n,o){let i=JSON.stringify([t.center.x,t.center.y,t.width,t.height,t.ccwRotationDegrees??0,[...t.layers].sort()]),r=o.get(e)??new Set;if(r.has(i))return;let s=r.size===0?e:`${e}_fragment_${n}`;return r.add(i),o.set(e,r),s}function FQo(e){let t=[],n=new Map,o=new Map,i=function(s){let a=new Map;for(let c of s.connections)for(let l of c.pointsToConnect)l.pcb_port_id&&a.set(l.pcb_port_id,{x:l.x,y:l.y});return a}(e),r=nOt(e);for(let[s,a]of e.obstacles.entries()){if(a.isNonPlatedHole){let C={type:"pcb_hole",pcb_hole_id:a.obstacleId??`pcb_hole_${s}`,x:a.center.x,y:a.center.y};if(a.shape==="circle")t.push({...C,hole_shape:"circle",hole_diameter:a.width});else{let I=a.ccwRotationDegrees??0;if(I%90!=0)throw Error(`Cannot represent rotated rectangular hole ${C.pcb_hole_id} in Circuit JSON`);let b=I%180!=0;t.push({...C,hole_shape:"rect",hole_width:b?a.height:a.width,hole_height:b?a.width:a.height})}continue}let c=a.connectedTo,l=tOt(a);if(l.pcb_via_id)continue;let{pcb_smtpad_id:d,pcb_plated_hole_id:u}=l,h=[...new Set([...l.pcb_port_id?[l.pcb_port_id]:[],...c.filter((C)=>r.has(C))])];if(h.length===0){for(let C of e.connections)if(a.netIsAssignable||dHe(C).some((I)=>c.includes(I)))for(let I of C.pointsToConnect)I.pcb_port_id&&Math.hypot(I.x-a.center.x,I.y-a.center.y)<0.000001&&h.push(I.pcb_port_id)}let A=l.pcb_port_id&&i.has(l.pcb_port_id)?l.pcb_port_id:kQo(a.center,h,i);if(!d&&!u&&!A)continue;let m=a.layers.filter(eV);if(m.length===0)continue;let{width:p,height:g}=a,_=a.center.x,f=a.center.y,y=a.ccwRotationDegrees;if(Boolean(u)||m.length>1){let C=OEt(u??`pcb_plated_hole_${_.toFixed(3)}_${f.toFixed(3)}`,a,s,o);if(C===void 0)continue;if(typeof y=="number"&&Number.isFinite(y)){let I=Math.max(0.5*Math.min(p,g),0.1);t.push({type:"pcb_plated_hole",pcb_plated_hole_id:C,shape:"rotated_pill_hole_with_rect_pad",hole_shape:"rotated_pill",pad_shape:"rect",hole_width:I,hole_height:I,hole_ccw_rotation:y,rect_pad_width:p,rect_pad_height:g,rect_ccw_rotation:y,hole_offset_x:0,hole_offset_y:0,x:_,y:f,layers:m,...A?{pcb_port_id:A}:{}});continue}if(Math.abs(p-g)<0.001){t.push({type:"pcb_plated_hole",pcb_plated_hole_id:C,shape:"circle",outer_diameter:Math.max(p,g),hole_diameter:Math.max(0.5*Math.min(p,g),0.1),x:_,y:f,layers:m,...A?{pcb_port_id:A}:{}});continue}t.push({type:"pcb_plated_hole",pcb_plated_hole_id:C,shape:"circular_hole_with_rect_pad",hole_shape:"circle",hole_diameter:Math.max(0.5*Math.min(p,g),0.1),rect_pad_width:p,rect_pad_height:g,hole_offset_x:0,hole_offset_y:0,x:_,y:f,layers:m,...A?{pcb_port_id:A}:{}});continue}let x=OEt(d??`pcb_smtpad_${_.toFixed(3)}_${f.toFixed(3)}`,a,s,n);x!==void 0&&(typeof y=="number"&&Number.isFinite(y)?t.push({type:"pcb_smtpad",pcb_smtpad_id:x,layer:m[0],shape:"rotated_rect",x:_,y:f,width:p,height:g,ccw_rotation:y,...A?{pcb_port_id:A}:{}}):t.push({type:"pcb_smtpad",pcb_smtpad_id:x,layer:m[0],shape:"rect",width:p,height:g,x:_,y:f,...A?{pcb_port_id:A}:{}}))}return t}function zEt(e,t,n){if(n&&e.layers!==void 0)return e.layers;let o=n?e:{from_layer:"top",to_layer:nd(t-1,t)};return ikt(o,t)}function iOt(e){let{minX:t,maxX:n,minY:o,maxY:i}=e.bounds;return{type:"pcb_board",pcb_board_id:"__autorouting_board__",thickness:1.6,num_layers:e.layerCount,center:{x:(t+n)/2,y:(o+i)/2},width:n-t,height:i-o,...e.outline?{outline:e.outline,shape:"polygon"}:{shape:"rect"},material:"fr4",min_trace_to_hole_edge_clearance:e.minTraceToHoleEdgeClearance,min_pad_edge_to_pad_edge_clearance:e.minPadEdgeToPadEdgeClearance,...e.minBoardEdgeClearance!==void 0?{min_board_edge_clearance:e.minBoardEdgeClearance}:{}}}function uHe(e,t,n={}){let{minTraceWidth:o=0.1,minViaDiameter:i,minViaHoleDiameter:r,originalSrj:s,includeOriginalConnections:a=!1}=n,c=y0(e),l=i??c.padDiameter,d=e.min_via_hole_diameter??e.minViaHoleDiameter,u=r??d??(i!==void 0?0.5*l:c.holeDiameter),h=[];h.push(...QQo(e,t,a&&s?s:e,n.connectivityMaps?.source)),h.push(...function(p){let g=new Map;return p.connections.forEach((_)=>{_.pointsToConnect.forEach((f)=>{f.pcb_port_id&&g.set(f.pcb_port_id,{type:"pcb_port",pcb_port_id:f.pcb_port_id,source_port_id:f.pcb_port_id,x:f.x,y:f.y,layers:Dy(f)})})}),Array.from(g.values())}(a&&s?s:e)),h.push(...FQo(s??e)),h.push(...function(p,g,_=0.3,f=0.5*_,y=!1){let x=[],C=new Set;return p.length>0&&("type"in p[0]&&p[0].type==="pcb_trace"?p.forEach((I)=>{I.route.forEach((b)=>{if(b.route_type==="via"){if(!eV(b.from_layer)||!eV(b.to_layer))return;let P=b.via_diameter??_,E=b.via_hole_diameter??f,B=`${b.x},${b.y},${b.from_layer},${b.to_layer}`;C.has(B)||(x.push({type:"pcb_via",pcb_via_id:`via_${x.length}`,pcb_trace_id:I.pcb_trace_id,x:b.x,y:b.y,outer_diameter:P,hole_diameter:E,layers:zEt(b,g,y)}),C.add(B))}})}):p.forEach((I,b)=>{let P=`trace_${b}`,E=I.viaDiameter??_,B=f;for(let w=1;w<I.route.length;w++){let T=I.route[w-1],Q=I.route[w];if(T.z!==Q.z&&Math.abs(T.x-Q.x)<0.01&&Math.abs(T.y-Q.y)<0.01){let N=nd(T.z,g),F=nd(Q.z,g),H=`${Q.x},${Q.y},${N},${F}`;C.has(H)||(x.push({type:"pcb_via",pcb_via_id:`via_${x.length}`,pcb_trace_id:P,x:Q.x,y:Q.y,outer_diameter:E,hole_diameter:B,layers:zEt({from_layer:N,to_layer:F},g,y)}),C.add(H))}}})),x}(t,e.layerCount,l,u,(s??e).allowBlindAndBuriedVias===!0));let A=new Set(e.connections.flatMap(dHe)),m=oOt(a&&s?[...e.connections,...s.connections.filter((p)=>!A.has(p.name))]:e.connections,n.connectivityMaps?.route??x0(e));return t.length>0&&("type"in t[0]&&t[0].type==="pcb_trace"?t.forEach((p)=>{let g=DV(m,p.connection_name)??p.connectsTo?.map((_)=>DV(m,_)).find((_)=>Boolean(_))??p.connection_name;h.push(function(_,f){return{type:"pcb_trace",pcb_trace_id:_.pcb_trace_id,source_trace_id:f,route:_.route.map((y)=>{if(y.route_type==="wire"){if(!eV(y.layer))return null;let x="start_pcb_port_id"in y&&typeof y.start_pcb_port_id=="string"?y.start_pcb_port_id:void 0,C="end_pcb_port_id"in y&&typeof y.end_pcb_port_id=="string"?y.end_pcb_port_id:void 0;return{route_type:"wire",x:y.x,y:y.y,width:y.width,layer:y.layer,...x?{start_pcb_port_id:x}:{},...C?{end_pcb_port_id:C}:{}}}return y.route_type==="via"&&eV(y.from_layer)&&eV(y.to_layer)?{route_type:"via",x:y.x,y:y.y,from_layer:y.from_layer,to_layer:y.to_layer}:null}).filter((y)=>y!==null)}}(p,g))}):t.forEach((p,g)=>{let _=function(f,y,x,C,I=0.1){let b=[];if(!f.jumpers||f.jumpers.length===0)return[{type:"pcb_trace",pcb_trace_id:y,source_trace_id:x,route:f.route.map((w,T)=>{let Q=T===0,N=T===f.route.length-1;return{route_type:"wire",x:w.x,y:w.y,width:w.traceThickness??I,layer:nd(w.z,C),...Q&&w.pcb_port_id?{start_pcb_port_id:w.pcb_port_id}:{},...N&&w.pcb_port_id?{end_pcb_port_id:w.pcb_port_id}:{}}})}];let P=[];for(let w of f.jumpers){let T=-1,Q=-1;for(let N=0;N<f.route.length;N++){let F=f.route[N];Math.abs(F.x-w.start.x)<0.01&&Math.abs(F.y-w.start.y)<0.01&&(T=N),Math.abs(F.x-w.end.x)<0.01&&Math.abs(F.y-w.end.y)<0.01&&(Q=N)}T!==-1&&Q!==-1&&(T>Q&&([T,Q]=[Q,T]),P.push({startIdx:T,endIdx:Q}))}P.sort((w,T)=>w.startIdx-T.startIdx);let E=0,B=0;for(let{startIdx:w,endIdx:T}of P){if(w>=E){let Q=f.route.slice(E,w+1);Q.length>0&&(b.push({type:"pcb_trace",pcb_trace_id:`${y}_${B}`,source_trace_id:x,route:Q.map((N,F)=>{let H=F===0&&E===0;return{route_type:"wire",x:N.x,y:N.y,width:N.traceThickness??I,layer:nd(N.z,C),...H&&N.pcb_port_id?{start_pcb_port_id:N.pcb_port_id}:{}}})}),B++)}E=T}if(E<f.route.length){let w=f.route.slice(E);if(w.length>0)b.push({type:"pcb_trace",pcb_trace_id:`${y}_${B}`,source_trace_id:x,route:w.map((Q,N)=>{let F=N===w.length-1;return{route_type:"wire",x:Q.x,y:Q.y,width:Q.traceThickness??I,layer:nd(Q.z,C),...F&&Q.pcb_port_id?{end_pcb_port_id:Q.pcb_port_id}:{}}})})}return b}(p,`trace_${g}`,DV(m,p.connectionName)??p.connectionName,e.layerCount,o);h.push(..._)})),h}var HY=Symbol("originalPortPoint"),HQo=class extends mE{constructor(e){let t=e.nodeWithPortPoints,n=(e.traceThickness??0.1)/2+(e.traceMargin??0.1),o=t.width>2*n&&t.height>2*n,i=t.center.x-t.width/2+n,r=t.center.x+t.width/2-n,s=t.center.y-t.height/2+n,a=t.center.y+t.height/2-n,c=t.portPoints.map((u)=>({...u,x:Math.max(i,Math.min(r,u.x)),y:Math.max(s,Math.min(a,u.y)),[HY]:u})),l=new Map,d=!1;for(let u of c){let h=`${u.x},${u.y},${u.z}`,A=l.get(h),m=u[HY];!A||A.x===m.x&&A.y===m.y||(d=!0),l.set(h,m)}super({...e,nodeWithPortPoints:o?{...t,width:t.width-2*n,height:t.height-2*n,portPoints:c}:t}),d&&(this.failed=!0,this.error="Boundary clearance collapses distinct terminals"),o||(this.failed=!0,this.error="Node has no interior after copper boundary clearance")}getOutput(){return super.getOutput().map((e)=>{let t=e.route[0],n=e.route[e.route.length-1];if(!t[HY]||!n[HY])throw Error("A13 route lost its original terminal metadata");return{...e,route:[{...t[HY]},...e.route,{...n[HY]}]}})}},OQo=class extends HQo{constructor(e){super(e),this.validationParams=e}validationParams;_step(){if(super._step(),!this.solved)return;let e=this.getOutput(),{connMap:t,layerCount:n}=this.validationParams,o=this.nodeWithPortPoints,i=e.flatMap((_)=>_.route),r=Math.max(this.traceThickness,this.viaDiameter)/2+Math.max(this.traceMargin,0.1)+0.000001,s=Math.min(...i.map((_)=>_.x))-r,a=Math.max(...i.map((_)=>_.x))+r,c=Math.min(...i.map((_)=>_.y))-r,l=Math.max(...i.map((_)=>_.y))+r,d=this.validationParams.obstacles.filter((_)=>{let f=Math.hypot(_.width,_.height)/2;return _.center.x+f>=s&&_.center.x-f<=a&&_.center.y+f>=c&&_.center.y-f<=l});this.stats.boardObstaclesChecked=d.length;let{connectedRouteNamesByObstacle:u,connectedObstaclesByRoute:h}=(({obstacles:_,routes:f,connMap:y})=>{let x=_.map(()=>[]),C=f.map(()=>[]);for(let I=0;I<_.length;I++){let b=_[I],P={...b,connectedTo:[...new Set(b.connectedTo)]};for(let E=0;E<f.length;E++){let B=f[E];N6(P,B,y)&&(x[I].push(B.connectionName),C[E].push(b))}}return{connectedRouteNamesByObstacle:x,connectedObstaclesByRoute:C}})({obstacles:d,routes:e,connMap:t}),A={layerCount:n,minTraceWidth:this.traceThickness,minViaDiameter:this.viaDiameter,bounds:{minX:o.center.x-o.width/2,maxX:o.center.x+o.width/2,minY:o.center.y-o.height/2,maxY:o.center.y+o.height/2},...this.validationParams.boardGeometry,obstacles:d.map((_,f)=>({..._,connectedTo:[..._.connectedTo,...u[f]]})),connections:e.map((_,f)=>({name:_.connectionName,rootConnectionName:_.rootConnectionName,__netConnectionName:_.rootConnectionName??_.connectionName,pointsToConnect:[...[_.route[0],_.route.at(-1)].map((y)=>({x:y.x,y:y.y,layer:nd(y.z,n)})),...h[f].flatMap((y)=>{let x=y.circuitJsonMetadata?.pcb_port_id;return x?[{...y.center,layer:nd(0,n),pcb_port_id:x}]:[]})]}))},m=uHe(A,e.map((_,f)=>({type:"pcb_trace",pcb_trace_id:`${_.connectionName}_${f}`,connection_name:_.connectionName,route:Ex(_,n)})));this.validationParams.boardGeometry&&m.push(iOt(A));let{errors:p}=okt(m,{traceClearance:this.traceMargin,viaClearance:this.traceMargin,includeTraceContinuity:!1}),g=Zk({srj:{...A,traces:void 0},routes:e});this.stats.boardDrcIssueCount=p.length+g.length,(p.length>0||g.length>0)&&(this.solved=!1,this.failed=!0,this.error=`A13 candidate fails board copper validation: ${p[0]?.message??"fixed obstacle clearance violation"}`)}},Px=(e)=>`${e.x.toFixed(6)},${e.y.toFixed(6)},${e.z}`,zQo=(e)=>[e.route[0],e.route[e.route.length-1]],dge=(e,t,n)=>{let o=new Map,i=(a,c)=>{o.has(a)||o.set(a,new Set),o.has(c)||o.set(c,new Set),o.get(a).add(c),o.get(c).add(a)};for(let a of e)if(a.connectionName===t&&a.route.length!==0){if(a.route.length===1){let c=Px(a.route[0]);o.has(c)||o.set(c,new Set);continue}for(let c=0;c<a.route.length-1;c++)i(Px(a.route[c]),Px(a.route[c+1]))}let r=new Set([n]),s=[n];for(;s.length>0;){let a=s.pop();for(let c of o.get(a)??[])r.has(c)||(r.add(c),s.push(c))}return r},cNe=Array.from({length:6},(e,t)=>t),iL=class extends Jge{getSolverName(){return"PortfolioSingleIntraNodeSolver"}constructorParams;solvedRoutes=[];nodeWithPortPoints;connMap;effort;adaptiveSearchExpanded=!1;negotiatedSearchStarted=!1;enableNegotiatedSearch;gridSearchSegmentWork;gridSearchWorkScale;rejectOverlappingTerminals;precomputedIntraNodeRouteParams;nodeSegmentCount;totalCandidateWork=0;dynamicExpansionWorkBudget=1;candidateWorkBySolver=new WeakMap;getSolvedSegmentCount(e){let t=e.solvedConnectionsMap;if(!(t instanceof Map))return null;let n=0;for(let o of t.values())Array.isArray(o)&&(n+=o.length);return n}getNodeSegmentCount(){return this.nodeSegmentCount??=Math.max(1,this.nodeWithPortPoints.portPointsInPairs?.length??new Set(this.nodeWithPortPoints.portPoints.map((e)=>e.connectionName)).size),this.nodeSegmentCount}getCandidateProgress(e){if(e instanceof mE){if(e.solved)return 1;let n=e.connections.length;if(n===0)return 0;let o=e.routedCount/n,i=Math.max(0,(e.routedCount-e.conflictCount)/n);return Math.min(0.99,(o+i)/2)}let t=this.getSolvedSegmentCount(e);return t!==null?Math.min(1,t/this.getNodeSegmentCount()):Math.max(0,Math.min(1,e.progress||0))}constructor(e){if(super(),this.nodeWithPortPoints=e.nodeWithPortPoints,this.connMap=e.connMap,this.constructorParams=e,this.effort=e.effort??1,this.gridSearchSegmentWork=e.gridSearchSegmentWork??1e4,this.gridSearchWorkScale=e.gridSearchWorkScale??1,this.rejectOverlappingTerminals=e.rejectOverlappingTerminals??!1,this.enableNegotiatedSearch=e.enableNegotiatedSearch??!1,this.MAX_ITERATIONS=20000000*this.effort,this.GREEDY_MULTIPLIER=5,this.MIN_SUBSTEPS=100,this.rejectOverlappingTerminals){let t=this.nodeWithPortPoints.portPoints,n=e.traceWidth??0.15;for(let o=0;o<t.length;o++)for(let i=o+1;i<t.length;i++){let r=t[o],s=t[i];if(r.z===s.z&&(r.rootConnectionName??r.connectionName)!==(s.rootConnectionName??s.connectionName)&&!this.connMap?.areIdsConnected(r.connectionName,s.connectionName)&&Math.hypot(r.x-s.x,r.y-s.y)<n-0.000001)return this.failed=!0,void(this.error="Unrelated route terminals overlap at the requested trace width")}}}getGridSearchIterationBudget(){let e=this.nodeWithPortPoints,t=e.availableZ?.length??new Set(e.portPoints.map((i)=>i.z)).size,n=Math.floor(e.width/0.1)*Math.floor(e.height/0.1)*t,o=t>2?this.gridSearchWorkScale:1;return Math.round(o*Math.max(150000,(t<=2?1e4:this.gridSearchSegmentWork)*this.getNodeSegmentCount()**2,Math.round(n*(8+1.2*Math.sqrt(this.getNodeSegmentCount()))*this.effort)))}getCombinationDefs(){return[["throughObstacle"],["singleLayerNoDifferentRootIntersections"],["multiHeadPolyLine"],["majorCombinations","orderings6","cellSizeFactor"],["noVias"],["orderings50"],["flipTraceAlignmentDirection","orderings6"],["closedFormSingleTrace"],["highDensityA01"],["highDensityA03"],...this.enableNegotiatedSearch?[["highDensityA13"]]:[]]}getHyperParameterDefs(){return[{name:"singleLayerNoDifferentRootIntersections",possibleValues:[{SINGLE_LAYER_NO_DIFFERENT_ROOT_INTERSECTIONS:!0}]},{name:"majorCombinations",possibleValues:[{FUTURE_CONNECTION_PROX_TRACE_PENALTY_FACTOR:2,FUTURE_CONNECTION_PROX_VIA_PENALTY_FACTOR:1,FUTURE_CONNECTION_PROXIMITY_VD:10,MISALIGNED_DIST_PENALTY_FACTOR:5},{FUTURE_CONNECTION_PROX_TRACE_PENALTY_FACTOR:1,FUTURE_CONNECTION_PROX_VIA_PENALTY_FACTOR:0.5,FUTURE_CONNECTION_PROXIMITY_VD:5,MISALIGNED_DIST_PENALTY_FACTOR:2},{FUTURE_CONNECTION_PROX_TRACE_PENALTY_FACTOR:10,FUTURE_CONNECTION_PROX_VIA_PENALTY_FACTOR:1,FUTURE_CONNECTION_PROXIMITY_VD:5,MISALIGNED_DIST_PENALTY_FACTOR:10,VIA_PENALTY_FACTOR_2:1}]},{name:"orderings6",possibleValues:cNe.map((e)=>({SHUFFLE_SEED:e}))},{name:"cellSizeFactor",possibleValues:[{CELL_SIZE_FACTOR:0.5},{CELL_SIZE_FACTOR:1}]},{name:"flipTraceAlignmentDirection",possibleValues:[{FLIP_TRACE_ALIGNMENT_DIRECTION:!0}]},{name:"noVias",possibleValues:[{CELL_SIZE_FACTOR:2,VIA_PENALTY_FACTOR_2:10}]},{name:"orderings50",possibleValues:Array.from({length:20},(e,t)=>({SHUFFLE_SEED:100+t}))},{name:"throughObstacle",possibleValues:[{THROUGH_OBSTACLE:!0}]},{name:"closedFormSingleTrace",possibleValues:[{CLOSED_FORM_SINGLE_TRANSITION:!0}]},{name:"multiHeadPolyLine",possibleValues:[{MULTI_HEAD_POLYLINE_SOLVER:!0,SEGMENTS_PER_POLYLINE:6,BOUNDARY_PADDING:0.05},{MULTI_HEAD_POLYLINE_SOLVER:!0,SEGMENTS_PER_POLYLINE:6,BOUNDARY_PADDING:-0.05,ITERATION_PENALTY:1e4,MINIMUM_FINAL_ACCEPTANCE_GAP:0.001}]},{name:"highDensityA01",possibleValues:[{HIGH_DENSITY_A01:!0,SHUFFLE_SEED:cNe[0]}]},{name:"highDensityA03",possibleValues:[{HIGH_DENSITY_A03:!0}]},{name:"highDensityA13",possibleValues:[{HIGH_DENSITY_A13:!0,SHUFFLE_SEED:0}]}]}initializeCandidateBudget(e){if(e instanceof mE)return;let t=e.setup;typeof t=="function"&&t.call(e),(e instanceof Jpe||e instanceof Zpe)&&(e.MAX_ITERATIONS=Math.min(e.MAX_ITERATIONS,this.getGridSearchIterationBudget()))}refreshDynamicIterationLimit(){this.totalCandidateWork=0,this.dynamicExpansionWorkBudget=1;let e=(this.supervisedSolvers??[]).reduce((t,{solver:n})=>{if(n instanceof mE||(this.totalCandidateWork+=n.iterations,this.dynamicExpansionWorkBudget=Math.max(this.dynamicExpansionWorkBudget,n.MAX_ITERATIONS),this.candidateWorkBySolver.set(n,{iterations:n.iterations,maxIterations:n.MAX_ITERATIONS})),n.solved||n.failed)return t;let o=Math.max(0,n.MAX_ITERATIONS-n.iterations+1);return t+Math.ceil(o/this.MIN_SUBSTEPS)},0);this.MAX_ITERATIONS=Math.max(this.iterations+1,this.iterations+e),this.stats.dynamicSupervisorIterationLimit=this.MAX_ITERATIONS}initializeSolvers(){super.initializeSolvers();for(let{solver:e}of this.supervisedSolvers??[])this.initializeCandidateBudget(e);this.refreshDynamicIterationLimit(),this.stats.dynamicExpansionWorkBudget=this.dynamicExpansionWorkBudget}addSupervisedCandidate(e){let t=this.generateSolver(e);this.initializeCandidateBudget(t);let n=this.computeG(t);this.supervisedSolvers.push({hyperParameters:e,solver:t,h:0,g:n,f:n})}expandAdaptiveSearch(){if(!this.adaptiveSearchExpanded){this.adaptiveSearchExpanded=!0;for(let e of cNe.slice(1))this.addSupervisedCandidate({HIGH_DENSITY_A01:!0,SHUFFLE_SEED:e});this.refreshDynamicIterationLimit(),this.stats.adaptiveSearchExpanded=!0,this.stats.adaptiveSearchExpandedAtIteration=this.iterations,this.stats.candidateWorkAtExpansion=this.totalCandidateWork,this.stats.bestProgressAtExpansion=Math.max(0,...(this.supervisedSolvers??[]).map(({solver:e})=>this.getCandidateProgress(e)))}}shouldExpandPortfolio(){if(this.adaptiveSearchExpanded)return!1;let e=this.dynamicExpansionWorkBudget;return this.stats.dynamicExpansionWorkBudget=e,this.totalCandidateWork>=e}_step(){this.supervisedSolvers||this.initializeSolvers(),this.adaptiveSearchExpanded||this.getSupervisedSolverWithBestFitness()||this.expandAdaptiveSearch(),super._step(),!this.negotiatedSearchStarted&&this.activeSubSolver instanceof mE&&(this.negotiatedSearchStarted=!0,this.stats.negotiatedSearchStartedAtIteration=this.iterations),this.solved||this.failed||!this.shouldExpandPortfolio()||this.expandAdaptiveSearch()}computeG(e){if(e instanceof mE)return e.routingIterations/1e6;let t=this.candidateWorkBySolver.get(e);if(t&&(this.totalCandidateWork+=e.iterations-t.iterations,t.iterations=e.iterations,t.maxIterations!==e.MAX_ITERATIONS)){t.maxIterations=e.MAX_ITERATIONS,this.dynamicExpansionWorkBudget=1;for(let{solver:n}of this.supervisedSolvers??[])n instanceof mE||(this.dynamicExpansionWorkBudget=Math.max(this.dynamicExpansionWorkBudget,n.MAX_ITERATIONS))}return e instanceof Jpe||e instanceof Zpe||e instanceof mE?e.iterations/1e6:e?.hyperParameters?.MULTI_HEAD_POLYLINE_SOLVER?1000+((e.hyperParameters?.ITERATION_PENALTY??0)+e.iterations)/1e4+1e4*(e.hyperParameters.SEGMENTS_PER_POLYLINE-3):e.iterations/1e4}computeH(e){return e instanceof mE||this.adaptiveSearchExpanded?1-this.getCandidateProgress(e):1-(e.progress||0)}generateSolver(e){if(this.precomputedIntraNodeRouteParams??=a9t(this.nodeWithPortPoints),e.SINGLE_LAYER_NO_DIFFERENT_ROOT_INTERSECTIONS){if(!TPt.isApplicable(this.nodeWithPortPoints)){let t=new qge({nodeWithPortPoints:this.nodeWithPortPoints,connMap:this.connMap,traceWidth:this.constructorParams.traceWidth,viaDiameter:this.constructorParams.viaDiameter,obstacleMargin:this.constructorParams.obstacleMargin,precomputedIntraNodeRouteParams:this.precomputedIntraNodeRouteParams});return t.failed=!0,t.error="Single-layer no-different-root-intersection solver not applicable",t}return new TPt({nodeWithPortPoints:this.nodeWithPortPoints,traceWidth:this.constructorParams.traceWidth,viaDiameter:this.constructorParams.viaDiameter})}if(e.HIGH_DENSITY_A13){let t=Math.max(1,Math.round(50000000*this.effort)),n=new OQo({obstacles:this.constructorParams.obstacles??[],boardGeometry:this.constructorParams.boardGeometry,connMap:this.connMap,layerCount:this.constructorParams.layerCount??2,nodeWithPortPoints:this.nodeWithPortPoints,cellSizeMm:0.1,viaDiameter:this.constructorParams.viaDiameter??0.3,viaMinDistFromBorder:(this.constructorParams.viaDiameter??0.3)/2,traceThickness:this.constructorParams.traceWidth??0.15,traceMargin:0.1,stepMultiplier:1000,maxSearchIterations:t,maxRounds:Math.max(1,Math.round(200*this.effort)),hyperParameters:{shuffleSeed:e.SHUFFLE_SEED??0}});return n.MAX_ITERATIONS=2*t,n}if(e.HIGH_DENSITY_A01)return new Jpe({nodeWithPortPoints:this.nodeWithPortPoints,cellSizeMm:0.1,viaDiameter:this.constructorParams.viaDiameter??0.3,viaMinDistFromBorder:(this.constructorParams.viaDiameter??0.3)/2,traceMargin:0.1,traceThickness:this.constructorParams.traceWidth??0.15,effort:this.effort,hyperParameters:{shuffleSeed:e.SHUFFLE_SEED??0}});if(e.HIGH_DENSITY_A03)return new Zpe({nodeWithPortPoints:this.nodeWithPortPoints,highResolutionCellSize:0.1,highResolutionCellThickness:8,lowResolutionCellSize:0.4,viaDiameter:this.constructorParams.viaDiameter??0.3,viaMinDistFromBorder:(this.constructorParams.viaDiameter??0.3)/2,traceMargin:0.1,traceThickness:0.1,effort:this.effort,hyperParameters:e});return e.CLOSED_FORM_TWO_TRACE_SAME_LAYER?new F7o({nodeWithPortPoints:this.nodeWithPortPoints,viaDiameter:this.constructorParams.viaDiameter}):e.CLOSED_FORM_TWO_TRACE_TRANSITION_CROSSING?new k7o({nodeWithPortPoints:this.nodeWithPortPoints,viaDiameter:this.constructorParams.viaDiameter}):e.CLOSED_FORM_SINGLE_TRANSITION?new D7o({nodeWithPortPoints:this.nodeWithPortPoints,viaDiameter:this.constructorParams.viaDiameter}):e.THROUGH_OBSTACLE?new N7o({nodeWithPortPoints:this.nodeWithPortPoints,obstacles:this.constructorParams.obstacles,connMap:this.connMap,layerCount:this.constructorParams.layerCount,viaDiameter:this.constructorParams.viaDiameter,traceThickness:this.constructorParams.traceWidth}):e.MULTI_HEAD_POLYLINE_SOLVER?new h9t({nodeWithPortPoints:this.nodeWithPortPoints,connMap:this.connMap,hyperParameters:e,viaDiameter:this.constructorParams.viaDiameter}):new Wke({...this.constructorParams,hyperParameters:e,precomputedIntraNodeRouteParams:this.precomputedIntraNodeRouteParams})}onSolve(e){let t;t=e.solver instanceof Jpe||e.solver instanceof Zpe||e.solver instanceof mE?e.solver.getOutput():e.solver.solvedRoutes;let n=t.map((o)=>{let i=this.nodeWithPortPoints.portPoints.find((r)=>r.connectionName===o.connectionName);return i?.rootConnectionName?{...o,rootConnectionName:i.rootConnectionName}:o});this.solvedRoutes=((o,i)=>{let r=[...o],s=new Map;for(let a of i.portPoints){let c=s.get(a.connectionName)??[];c.push(a),s.set(a.connectionName,c)}for(let[a,c]of s){if(c.length<=1)continue;let l=c[0]?.rootConnectionName??a,d=new Set(c.map(Px)),u=dge(r,a,Px(c[0]));for(let h of c.slice(1)){let A=Px(h);if(u.has(A))continue;let m=r.find((p)=>{if((p.rootConnectionName??p.connectionName)!==l)return!1;if(p.connectionName===a)return!1;let[g,_]=zQo(p);if(!g||!_)return!1;let f=Px(g),y=Px(_);return u.has(f)&&y===A||u.has(y)&&f===A||d.has(f)&&d.has(y)&&(f===A||y===A)});m&&(r.push({...m,connectionName:a,rootConnectionName:l,route:m.route.map((p)=>({...p,connectionName:a,rootConnectionName:l})),vias:m.vias.map((p)=>({...p})),jumpers:m.jumpers?.map((p)=>({...p,start:{...p.start},end:{...p.end}}))}),u=dge(r,a,Px(c[0])))}}return r})(n,this.nodeWithPortPoints)}};function GEt(e,t,n,o,i){let r=n-t,s=i-o;if(Math.abs(e.y-i)<0.000001)return e.x-t;if(Math.abs(e.x-n)<0.000001)return r+(i-e.y);if(Math.abs(e.y-o)<0.000001)return r+s+(n-e.x);if(Math.abs(e.x-t)<0.000001)return 2*r+s+(e.y-o);let c=Math.abs(e.y-i),l=Math.abs(e.x-n),d=Math.abs(e.y-o),u=Math.abs(e.x-t),h=Math.min(c,l,d,u);return h===c?Math.max(0,Math.min(r,e.x-t)):h===l?r+Math.max(0,Math.min(s,i-e.y)):h===d?r+s+Math.max(0,Math.min(r,n-e.x)):2*r+s+Math.max(0,Math.min(s,e.y-o))}function pAe(e,t,n=0.000001){return Math.abs(e-t)<n}function YEt(e){if(e.length<2)return 0;let t=e.map(([o,i])=>o<i?[o,i]:[i,o]),n=0;for(let o=0;o<t.length;o++){let[i,r]=t[o];for(let s=o+1;s<t.length;s++){let[a,c]=t[s];pAe(i,a)||pAe(i,c)||pAe(r,a)||pAe(r,c)||(i<a&&a<r&&r<c||a<i&&i<c&&c<r)&&n++}}return n}var Gm=(e)=>{let t=e.center.x-e.width/2,n=e.center.x+e.width/2,o=e.center.y-e.height/2,i=e.center.y+e.height/2,r=new Map;for(let d of e.portPoints){let u=r.get(d.connectionName)??[];u.some((h)=>h.x===d.x&&h.y===d.y&&h.z===d.z)||u.push({x:d.x,y:d.y,z:d.z}),r.set(d.connectionName,u)}let s=new Map,a=[],c=0;for(let[d,u]of r){if(u.length<2)continue;let h=u[0],A=u[1],m=GEt(h,t,n,o,i),p=GEt(A,t,n,o,i);if(h.z===A.z){let g=h.z,_=s.get(g)??[];_.push([m,p]),s.set(g,_)}else c++,a.push([m,p])}let l=0;for(let[d,u]of s)l+=YEt(u);return{numSameLayerCrossings:l,numEntryExitLayerChanges:c,numTransitionPairCrossings:YEt(a)}},rOt=(e)=>e.availableZ?.length?[...new Set(e.availableZ)].sort((t,n)=>t-n):[...new Set(e.portPoints.map((t)=>t.z??0))].sort((t,n)=>t-n),sOt=(e)=>rOt(e).length===1&&Gm(e).numSameLayerCrossings>0,aOt=(e,t,n)=>{let o=new Map,[i]=rOt(e);for(let r of e.portPoints)o.set(r.connectionName,[...o.get(r.connectionName)??[],r]);return Array.from(o.entries()).flatMap(([r,s])=>{if(s.length<2)return[];let a=s[0],c=s[s.length-1];return[{connectionName:r,rootConnectionName:a.rootConnectionName,regionId:e.capacityMeshNodeId,traceThickness:t,viaDiameter:n,route:[{x:a.x,y:a.y,z:i??a.z??0},{x:c.x,y:c.y,z:i??c.z??0}],vias:[]}]})},GQo=aOt,gee=(e,t,n)=>({...e,x:t.x+(e.x-t.x)*n,y:t.y+(e.y-t.y)*n}),lNe=(e,t,n)=>gee(e,t,n),AAe=["#dc2626","#2563eb","#16a34a","#ca8a04","#9333ea","#0891b2"],VEt=(e,t,n=[])=>[e,t?`rootConnectionName: ${t}`:void 0,...n].filter(Boolean).join(`
`),dNe=class extends Oi{getSolverName(){return"GrowShrinkHighDensityIntraNodeSolver"}constructorParams;nodeWithPortPoints;solvedRoutes=[];failedSolvers=[];activeSubSolver=null;winningSolver;scaleFactor=1;growthAttempts=0;maxGrowthAttempts;minimumGrowthAttempts;constructor(e){super(),this.constructorParams=e,this.nodeWithPortPoints=e.nodeWithPortPoints;let t=Math.min(this.nodeWithPortPoints.width,this.nodeWithPortPoints.height),n=t>0?Math.max(0,Math.ceil(Math.log2((e.viaDiameter??0.3)/t))):0,o=Number.POSITIVE_INFINITY,i=this.nodeWithPortPoints.portPoints;for(let a=0;a<i.length;a++)for(let c=a+1;c<i.length;c++){let l=i[a],d=i[c];if(l.z!==d.z||(l.rootConnectionName??l.connectionName)===(d.rootConnectionName??d.connectionName))continue;let u=Math.hypot(l.x-d.x,l.y-d.y);u>0.000000001&&(o=Math.min(o,u))}let r=Math.max(0,Math.ceil(Math.log2((e.traceWidth??0.15)/o))),s=Math.max(n,r);if(this.maxGrowthAttempts=e.maxGrowthAttempts??3+s,this.minimumGrowthAttempts=Math.min(e.maxGrowthAttempts??3+n,Math.max(n,0,r-1)),this.MAX_ITERATIONS=20000000*(e.effort??1)*(this.maxGrowthAttempts+1),sOt(this.nodeWithPortPoints)){if(!e.fallbackToInvalidGeometryOnFailure)return this.failed=!0,this.progress=1,void(this.error="GrowShrinkHighDensityIntraNodeSolver cannot route an impossible single-layer crossing");this.solvedRoutes=GQo(this.nodeWithPortPoints,e.traceWidth??0.15,e.viaDiameter??0.3),this.solved=!0,this.progress=1,this.stats={invalidGeometryFallback:!0,reason:"single-layer node has same-layer crossings"}}}getConstructorParams(){return this.constructorParams}createActiveSubSolver(){let{growShrinkSolutionValidator:e,...t}=this.constructorParams;var n,o;this.activeSubSolver=new iL({...t,enableNegotiatedSearch:this.scaleFactor===1&&(t.enableNegotiatedSearch??!0),nodeWithPortPoints:(n=this.nodeWithPortPoints,o=this.scaleFactor,{...n,width:n.width*o,height:n.height*o,portPoints:n.portPoints.map((i)=>lNe(i,n.center,o)),portPointsInPairs:n.portPointsInPairs?.map(([i,r])=>[lNe(i,n.center,o),lNe(r,n.center,o)])})}),this.constructorParams.maxInnerIterationsPerGrowthAttempt&&(this.activeSubSolver.MAX_ITERATIONS=this.constructorParams.maxInnerIterationsPerGrowthAttempt)}acceptSolution(e){let t=this.scaleFactor===1?e.solvedRoutes:e.solvedRoutes.map((n)=>((o,i,r)=>({...o,route:o.route.map((s)=>gee(s,i,r)),vias:o.vias.map((s)=>gee(s,i,r)),jumpers:o.jumpers?.map((s)=>({...s,start:gee(s.start,i,r),end:gee(s.end,i,r)}))}))(n,this.nodeWithPortPoints.center,1/this.scaleFactor));return this.constructorParams.growShrinkSolutionValidator&&!this.constructorParams.growShrinkSolutionValidator(t)?(e.solved=!1,e.failed=!0,e.error="High-density scale solution rejected by validator",!1):(this.winningSolver=e,this.error=null,this.solvedRoutes=t,this.solved=!0,this.failed=!1,!0)}computeProgress(){return Math.min(0.99,(this.growthAttempts+(this.activeSubSolver?.progress??0))/(this.maxGrowthAttempts+1))}_step(){if(this.activeSubSolver||this.createActiveSubSolver(),this.activeSubSolver.step(),this.activeSubSolver.solved&&this.acceptSolution(this.activeSubSolver))this.activeSubSolver=null;else if(this.activeSubSolver.failed){if(this.failedSolvers.push(this.activeSubSolver),this.error=this.activeSubSolver.error,this.activeSubSolver=null,this.growthAttempts>=this.maxGrowthAttempts)return this.constructorParams.fallbackToInvalidGeometryOnFailure?(this.solvedRoutes=aOt(this.nodeWithPortPoints,this.constructorParams.traceWidth??0.15,this.constructorParams.viaDiameter??0.3),this.solved=!0,this.failed=!1,this.progress=1,this.stats={...this.stats,invalidGeometryFallback:!0,reason:"growth attempts exhausted",lastError:this.error},void(this.error=null)):(this.failed=!0,void(this.error=`GrowShrinkHighDensityIntraNodeSolver failed after resizing to ${this.scaleFactor}x. Last error: ${this.error}`));this.growthAttempts=Math.max(this.growthAttempts+1,this.minimumGrowthAttempts),this.scaleFactor=2**this.growthAttempts}}visualize(){let e=this.activeSubSolver?.visualize()??this.winningSolver?.visualize();return e||(this.solvedRoutes.length>0?{title:this.stats.invalidGeometryFallback?"Invalid same-layer crossing geometry":"Grow/shrink high density routes",lines:this.solvedRoutes.flatMap((t,n)=>t.route.slice(0,-1).map((o,i)=>({points:[o,t.route[i+1]],strokeColor:AAe[n%AAe.length],strokeWidth:t.traceThickness,layer:`z${o.z}`,label:VEt(t.connectionName,t.rootConnectionName,[`z${o.z}`,this.stats.invalidGeometryFallback?"invalid fallback route":void 0].filter(Boolean))}))),points:this.nodeWithPortPoints.portPoints.map((t)=>({x:t.x,y:t.y,color:AAe[Math.max(0,this.solvedRoutes.findIndex((n)=>n.connectionName===t.connectionName))%AAe.length],label:VEt(t.connectionName,t.rootConnectionName,[`z${t.z}`])})),rects:[{center:this.nodeWithPortPoints.center,width:this.nodeWithPortPoints.width,height:this.nodeWithPortPoints.height,fill:this.stats.invalidGeometryFallback?"rgba(245, 158, 11, 0.12)":"rgba(14, 165, 233, 0.08)",stroke:this.stats.invalidGeometryFallback?"rgba(217, 119, 6, 0.8)":"rgba(14, 165, 233, 0.55)",label:[this.nodeWithPortPoints.capacityMeshNodeId,this.stats.reason].filter(Boolean).join(`
`)}],circles:[]}:e??{lines:[],points:[],rects:[],circles:[]})}},UEt=(e,t,n=[])=>[e,t?`rootConnectionName: ${t}`:void 0,...n].filter(Boolean).join(`
`),yL=class extends Oi{getSolverName(){return"HighDensitySolver"}unsolvedNodePortPoints;routes;colorMap;defaultViaDiameter=0.3;defaultTraceThickness=0.15;viaDiameter;traceWidth;obstacleMargin;effort;obstacles;layerCount;useGrowShrinkHighDensityIntraNodeSolver;enableNegotiatedSearch;gridSearchSegmentWork;gridSearchWorkScale;rejectOverlappingTerminals;boardGeometry;preserveTerminalPcbPortIds;growShrinkMaxInnerIterationsPerGrowthAttempt;growShrinkFallbackToInvalidGeometryOnFailure;growShrinkSolutionValidator;captureSearchDebug;failedSolvers;activeSubSolver=null;connMap;nodePfById;nodeSolveMetadataById;constructor({nodePortPoints:e,colorMap:t,connMap:n,viaDiameter:o,traceWidth:i,obstacleMargin:r,effort:s,nodePfById:a,obstacles:c,layerCount:l,useGrowShrinkHighDensityIntraNodeSolver:d,enableNegotiatedSearch:u=!1,gridSearchSegmentWork:h=1e4,gridSearchWorkScale:A=1,rejectOverlappingTerminals:m=!1,boardGeometry:p,preserveTerminalPcbPortIds:g,growShrinkMaxInnerIterationsPerGrowthAttempt:_,growShrinkFallbackToInvalidGeometryOnFailure:f,growShrinkSolutionValidator:y,captureSearchDebug:x}){super(),this.unsolvedNodePortPoints=e,this.colorMap=t??{},this.connMap=n,this.routes=[],this.failedSolvers=[],this.effort=s??1,this.viaDiameter=o??this.defaultViaDiameter,this.traceWidth=i??this.defaultTraceThickness,this.obstacleMargin=r??0.15,this.obstacles=c??[],this.layerCount=l??2,this.enableNegotiatedSearch=u,this.gridSearchSegmentWork=h,this.gridSearchWorkScale=A,this.rejectOverlappingTerminals=m,this.boardGeometry=p,this.useGrowShrinkHighDensityIntraNodeSolver=d??!1,this.preserveTerminalPcbPortIds=g??!1,this.growShrinkMaxInnerIterationsPerGrowthAttempt=_,this.growShrinkFallbackToInvalidGeometryOnFailure=f??!1,this.growShrinkSolutionValidator=y,this.captureSearchDebug=x??!0,this.MAX_ITERATIONS=1e7*this.effort*(this.useGrowShrinkHighDensityIntraNodeSolver?4:1),this.nodePfById=a instanceof Map?new Map(a):new Map(Object.entries(a??{})),this.nodeSolveMetadataById=new Map,this.stats={solverNodeCount:{},difficultNodePfs:{},highDensityResizeCount:0}}getSolvedNodeSolverType(e){return e instanceof dNe&&e.winningSolver?this.getSolvedNodeSolverType(e.winningSolver):e instanceof iL&&e.winningSolver?this.getConcreteSolverTypeName(e.winningSolver):this.getConcreteSolverTypeName(e)}recordNodeSolveMetadata(e,t){let n=e.nodeWithPortPoints,o=this.nodePfById.get(n.capacityMeshNodeId)??null;this.nodeSolveMetadataById.set(n.capacityMeshNodeId,{node:n,status:t,solverType:this.getSolvedNodeSolverType(e),iterations:e.iterations,routeCount:e.solvedRoutes.length,nodePf:o,error:e.error??void 0})}createNodeMarkerLabel(e,t){return["hd_node_marker",`node: ${e}`,`status: ${t.status}`,`solver: ${t.solverType}`,`iterations: ${t.iterations}`,`routes: ${t.routeCount}`,`nodePf: ${t.nodePf??"n/a"}`,`portPoints: ${t.node.portPoints.length}`,...t.error?[`error: ${t.error}`]:[]].join(`
`)}getConcreteSolverTypeName(e){if(e instanceof Wke){let t=this.getIntraNodeStrategyName(e.hyperParameters);return e.cacheHit?`${t} [cached]`:t}return e instanceof qge?this.getIntraNodeStrategyName(e.hyperParameters):e.getSolverName()}getIntraNodeStrategyName(e){return e?.MULTI_HEAD_POLYLINE_SOLVER?"MultiHeadPolyLineIntraNodeSolver3":e?.SINGLE_LAYER_NO_DIFFERENT_ROOT_INTERSECTIONS?"SingleLayerNoDifferentRootIntersectionsIntraNodeSolver":e?.CLOSED_FORM_SINGLE_TRANSITION?"SingleTransitionIntraNodeSolver":e?.CLOSED_FORM_TWO_TRACE_SAME_LAYER?"TwoCrossingRoutesHighDensitySolver":e?.CLOSED_FORM_TWO_TRACE_TRANSITION_CROSSING?"SingleTransitionCrossingRouteSolver":e?.HIGH_DENSITY_A01?"HighDensitySolverA01":e?.HIGH_DENSITY_A03?"HighDensitySolverA03":"SingleHighDensityRouteSolver6_VertHorzLayer_FutureCost"}recordSolvedNodeStats(e,t){let n=this.getSolvedNodeSolverType(e),o=this.stats.solverNodeCount,i=this.stats.difficultNodePfs;o[n]=(o[n]??0)+1;let r=this.nodePfById.get(t.capacityMeshNodeId)??null;r!==null&&r>0.05&&(i[n]||(i[n]=[]),i[n].push(r))}recordResizeStats(e){e instanceof dNe&&(this.stats.highDensityResizeCount=(this.stats.highDensityResizeCount??0)+e.growthAttempts)}getSolvedRoutesWithTerminalPcbPortIds(e){let t=e.nodeWithPortPoints.portPoints.filter((o)=>o.pcb_port_id!==void 0);if(t.length===0)return e.solvedRoutes;let n=(o,i)=>{let r=t.filter((a)=>a.connectionName===o.connectionName&&a.x===i.x&&a.y===i.y&&a.z===i.z);if(r.length>1)throw Error(`HighDensitySolver found multiple PCB terminals at an endpoint of "${o.connectionName}"`);let s=r[0];if(s?.pcb_port_id)return s.pcb_port_id};return e.solvedRoutes.map((o)=>({...o,startPcbPortId:o.route[0]?n(o,o.route[0]):void 0,endPcbPortId:o.route.length>1?n(o,o.route[o.route.length-1]):void 0}))}_step(){if(this.updateCacheStats(),this.activeSubSolver)return this.activeSubSolver.step(),this.activeSubSolver.solved?(this.routes.push(...this.preserveTerminalPcbPortIds?this.getSolvedRoutesWithTerminalPcbPortIds(this.activeSubSolver):this.activeSubSolver.solvedRoutes),this.recordNodeSolveMetadata(this.activeSubSolver,"solved"),this.recordSolvedNodeStats(this.activeSubSolver,this.activeSubSolver.nodeWithPortPoints),this.recordResizeStats(this.activeSubSolver),this.activeSubSolver=null):this.activeSubSolver.failed&&(this.recordNodeSolveMetadata(this.activeSubSolver,"failed"),this.recordResizeStats(this.activeSubSolver),this.failedSolvers.push(this.activeSubSolver),this.activeSubSolver=null),void this.updateCacheStats();if(this.unsolvedNodePortPoints.length===0)return this.failedSolvers.length>0?(this.solved=!1,this.failed=!0,this.error=`Failed to solve ${this.failedSolvers.length} nodes, ${this.failedSolvers.slice(0,5).map((t)=>t.nodeWithPortPoints.capacityMeshNodeId)}. err0: ${this.failedSolvers[0].error}.`,void this.updateCacheStats()):(this.solved=!0,void this.updateCacheStats());let e={nodeWithPortPoints:this.unsolvedNodePortPoints.pop(),enableNegotiatedSearch:this.enableNegotiatedSearch,gridSearchSegmentWork:this.gridSearchSegmentWork,gridSearchWorkScale:this.gridSearchWorkScale,rejectOverlappingTerminals:this.rejectOverlappingTerminals,boardGeometry:this.boardGeometry,colorMap:this.colorMap,connMap:this.connMap,viaDiameter:this.viaDiameter,traceWidth:this.traceWidth,obstacleMargin:this.obstacleMargin,effort:this.effort,obstacles:this.obstacles,layerCount:this.layerCount,maxInnerIterationsPerGrowthAttempt:this.growShrinkMaxInnerIterationsPerGrowthAttempt,fallbackToInvalidGeometryOnFailure:this.growShrinkFallbackToInvalidGeometryOnFailure,growShrinkSolutionValidator:this.growShrinkSolutionValidator,captureSearchDebug:this.captureSearchDebug};this.activeSubSolver=this.useGrowShrinkHighDensityIntraNodeSolver?new dNe(e):new iL(e),this.updateCacheStats()}updateCacheStats(){let e=CS();this.stats.intraNodeCacheHits=e.cacheHits,this.stats.intraNodeCacheMisses=e.cacheMisses}visualize(){let e={lines:[],points:[],rects:[],circles:[]};for(let t of this.routes){let n=jge(t.route,t.connectionName,this.colorMap[t.connectionName]);for(let o of n)e.lines.push({points:o.points,label:UEt(t.connectionName,t.rootConnectionName),strokeColor:o.z===0?o.color:Cr(o.color,0.5),layer:`z${o.z}`,strokeWidth:t.traceThickness,strokeDash:o.z!==0?[0.1,0.3]:void 0});for(let o of t.vias)e.circles.push({center:o,layer:"z0,1",radius:t.viaDiameter/2,fill:this.colorMap[t.connectionName],label:UEt(t.connectionName,t.rootConnectionName,["via"])})}if(this.solved||this.failed)for(let[t,n]of this.nodeSolveMetadataById){let o=n.node.center.x-n.node.width/2,i=n.node.center.x+n.node.width/2,r=n.node.center.y-n.node.height/2,s=n.node.center.y+n.node.height/2,a=this.createNodeMarkerLabel(t,n),c=n.status==="solved"?"blue":"red";if(e.lines.push({points:[{x:o,y:r},{x:i,y:r}],layer:"hd_node_boundaries",strokeColor:c,strokeDash:"6, 4",strokeWidth:0.03,label:a},{points:[{x:i,y:r},{x:i,y:s}],layer:"hd_node_boundaries",strokeColor:c,strokeDash:"6, 4",strokeWidth:0.03,label:a},{points:[{x:i,y:s},{x:o,y:s}],layer:"hd_node_boundaries",strokeColor:c,strokeDash:"6, 4",strokeWidth:0.03,label:a},{points:[{x:o,y:s},{x:o,y:r}],layer:"hd_node_boundaries",strokeColor:c,strokeDash:"6, 4",strokeWidth:0.03,label:a}),n.status==="solved")e.points.push({x:n.node.center.x,y:n.node.center.y,color:c,layer:"hd_node_markers",label:a});else{e.lines.push({points:[{x:0,y:0},{x:n.node.center.x,y:n.node.center.y}],layer:"hd_failed_node_guides",strokeColor:"red",strokeDash:"8, 6",strokeWidth:0.05,label:a});let l=Math.max(0.1*n.node.width,0.12),d=Math.max(0.1*n.node.height,0.12);e.rects.push({center:n.node.center,layer:"hd_node_markers",width:l,height:d,fill:"red",label:a})}}return this.activeSubSolver&&(e=Lc(e,this.activeSubSolver.visualize())),e}};function cOt(e,t){let n=[],o=t.filter((r)=>r._containsTarget),i=new Map;for(let r of e.connections){let s=[];for(let a of r.pointsToConnect){let c=t[0],l=Number.MAX_VALUE;for(let d of o){let u=Math.sqrt((d.center.x-a.x)**2+(d.center.y-a.y)**2);u<l&&(l=u,c=d)}s.push(c)}if(s.length<2)throw Error(`Not enough nodes for connection "${r.name}", only ${s.length} found`);i.set(r.name,s.map((a)=>a.capacityMeshNodeId)),n.push({connection:r,nodeIds:[s[0].capacityMeshNodeId,s[s.length-1].capacityMeshNodeId],straightLineDistance:bn(s[0].center,s[s.length-1].center)})}return{unshuffledConnectionsWithResults:n,connectionNameToGoalNodeIds:i}}function lOt(e,t){let n=new Map(t.map((u)=>[u.capacityMeshNodeId,u])),o=t.map((u)=>(u.width+u.height)/2).filter((u)=>Number.isFinite(u)&&u>0),i=o.length>0?o.reduce((u,h)=>u+h,0)/o.length:1,r=t.filter((u)=>u._offBoardConnectionId),s=new Map,a=new Map,c=new Map;for(let u of t)a.set(u.capacityMeshNodeId,[]),c.set(u.capacityMeshNodeId,[]);for(let u of t)for(let h of u.portPoints){s.set(h.portPointId,h);for(let A of h.connectionNodeIds){let m=a.get(A);m&&!m.some((p)=>p.portPointId===h.portPointId)&&m.push(h)}}let{unshuffledConnectionsWithResults:l,connectionNameToGoalNodeIds:d}=cOt(e,t);return{nodeMap:n,avgNodePitch:i,offBoardNodes:r,portPointMap:s,nodePortPointsMap:a,nodeAssignedPortPoints:c,unshuffledConnectionsWithResults:l,connectionNameToGoalNodeIds:d}}var UE=(e,t=1,n={})=>{let o=n.viaDiameter??0.3,i="width"in e?e.width:e,r=n.obstacleMargin??0.2,s="height"in e&&typeof e.height=="number"?e.height:i;if(!Number.isFinite(i)||!Number.isFinite(s))return 0;if(i<=0||s<=0)return 0;let a=Math.min(i,s)/(o+r),c=(Math.sqrt(i*s)*Math.min(1.2,Math.max(0.85,a**0.05))/(o/2+r)/2)**1.1*t;return Number.isFinite(c)?e.availableZ?.length===1&&c>1?1:c:0},cT=(e,t=0.5,n=16)=>{let o=0,i=e;for(;o<n;){if(UE({width:i})<=t)break;i/=2,o++}return Math.max(1,o)},d1=(e,t,n,o)=>{if(e?._containsTarget)return 0;if((e.availableZ?.length??2)===1&&(t>0||n>0||o>0))return 1;let i=((0.82*t+0.41*n+0.2*o)/2)**1.1;if(!Number.isFinite(i))return 1;let r=UE(e);if(!Number.isFinite(r)||r<=0)return i>0?1:0;let s=i/r;if(Number.isNaN(s))throw Error("calculateNodeProbabilityOfFailure returned NaN");return Number.isFinite(s)?s:i>0?1:0};function dOt(e,t,n){let o=0,i=n?.NODE_MAX_PF??0.99999;for(let r of e){let s=t.get(r.capacityMeshNodeId);if(!s)continue;if(s._containsTarget)continue;let a=Gm(r),c=Math.min(d1(s,a.numSameLayerCrossings,a.numEntryExitLayerChanges,a.numTransitionPairCrossings),i);o+=Math.log(1-c)}return o}function WEt(e,t){if(t._containsTarget)return 0;let n=Gm(e);return d1(t,n.numSameLayerCrossings,n.numEntryExitLayerChanges,n.numTransitionPairCrossings)}function XEt(e,t,n,o,i){let r=n-t,s=i-o;if(Math.abs(e.y-i)<0.000001)return e.x-t;if(Math.abs(e.x-n)<0.000001)return r+(i-e.y);if(Math.abs(e.y-o)<0.000001)return r+s+(n-e.x);if(Math.abs(e.x-t)<0.000001)return 2*r+s+(e.y-o);let c=Math.abs(e.y-i),l=Math.abs(e.x-n),d=Math.abs(e.y-o),u=Math.abs(e.x-t),h=Math.min(c,l,d,u);return h===c?Math.max(0,Math.min(r,e.x-t)):h===l?r+Math.max(0,Math.min(s,i-e.y)):h===d?r+s+Math.max(0,Math.min(r,n-e.x)):2*r+s+Math.max(0,Math.min(s,e.y-o))}var YQo=5.120000000000001,Cte=(e,t)=>{let n=Math.ceil(t/2),o=Math.min(e.width,e.height),i=Math.max(e.width,e.height),r=(Math.floor(o/1.6)+0.1)*(Math.floor(i/3.2)+0.1)/YQo;return Math.min(1,n/r)};function TQe(e,t,n,o){let i=t.x-n/2,r=t.x+n/2,s=t.y-o/2,a=t.y+o/2,c=Math.abs(e.y-a),l=Math.abs(e.x-r),d=Math.abs(e.y-s),u=Math.abs(e.x-i),h=Math.min(c,l,d,u);return h>0.001?"interior":h===c?"top":h===l?"right":h===d?"bottom":"left"}function KEt(e,t,n,o,i){let r=TQe(e,n,o,i),s=TQe(t,n,o,i);return r!=="interior"&&r===s}function jEt(e,t,n,o,i){let r=TQe(e,n,o,i),s;if(r==="top"||r==="bottom"){let l=o;s=Math.abs(t.x-e.x)/l}else{let l=i;s=Math.abs(t.y-e.y)/l}s=Math.min(1,Math.max(0,s));let a=(e.x+t.x)/2,c=(e.y+t.y)/2;return{x:a+(n.x-a)*s,y:c+(n.y-c)*s}}function _Ae(e){return"computeNodePf"in e&&typeof e.computeNodePf=="function"}function DQe(e){let t={lines:[],points:[],rects:[],circles:[]};for(let o of e.inputNodes){let i=0,r=0,s={numSameLayerCrossings:0,numEntryExitLayerChanges:0,numTransitionPairCrossings:0},a=0;if(_Ae(e)){i=e.computeNodePf(o),r=e.nodeMemoryPfMap.get(o.capacityMeshNodeId)??0;let u=e.buildNodeWithPortPointsForCrossing(o);s=Gm(u);let h=new Set,A=e.nodeAssignedPortPoints.get(o.capacityMeshNodeId)??[];for(let m of A)m.connectionName&&h.add(m.connectionName);a=h.size}else{i=e.nodePfMap.get(o.capacityMeshNodeId)??0;let u=e.nodeAssignedPortPoints.get(o.capacityMeshNodeId)??[],h={capacityMeshNodeId:o.capacityMeshNodeId,center:o.center,width:o.width,height:o.height,portPoints:u,availableZ:o.availableZ};s=Gm(h);let A=new Set;for(let m of u)m.connectionName&&A.add(m.connectionName);a=A.size}let c=Math.min(255,Math.floor(512*i)),l=Math.max(0,255-Math.floor(512*i)),d=`rgba(${c}, ${l}, ${l}, ${i<0.001?"0.1":"0.3"})`;o._containsObstacle&&(d="rgba(255, 0, 0, 0.3)"),o._offBoardConnectedCapacityMeshNodeIds?.length&&(d="rgba(255, 165, 0, 0.3)"),t.rects.push({center:o.center,width:o.width-0.2,height:o.height-0.2,layer:`z${o.availableZ.join(",")}`,fill:d,label:`${o.capacityMeshNodeId}
pf: ${i.toFixed(3)}, memPf: ${r.toFixed(3)}
C#: ${a}
xSame: ${s.numSameLayerCrossings}, xLC: ${s.numEntryExitLayerChanges}, xTransition: ${s.numTransitionPairCrossings}
obCmid: ${o._offBoardConnectedCapacityMeshNodeIds?.join(",")}
obs: ${o._containsObstacle?"yes":"no"}`})}if(_Ae(e))for(let[o,i]of e.portPointMap){let r=e.assignedPortPoints.get(o),s=r?e.colorMap[r.connectionName]??"blue":"rgba(150, 150, 150, 0.5)";t.circles.push({center:{x:i.x,y:i.y},radius:0.05,fill:s,layer:`z${i.z}`,label:[o,`conn: ${r?.connectionName}`,`cd: ${i.distToCentermostPortOnZ}`,`connects: ${i.connectionNodeIds.join(",")}`,`rootConn: ${r?.rootConnectionName}`].filter(Boolean).join(`
`)})}let n=_Ae(e)?e.connectionsWithResults:e.connectionResults;for(let o of n){if(!o.path)continue;let i=o.connection,r=e.colorMap[i.name]??"blue",s=[];for(let a of o.path)s.push({x:a.point.x,y:a.point.y,z:a.z,nodeId:a.currentNodeId});for(let a=0;a<s.length-1;a++){let c=s[a],l=s[a+1],d=c.z===l.z,u=c.z,h;h=d?u===0?void 0:"10 5":"3 3 10";let A=c.nodeId?e.nodeMap.get(c.nodeId):null;if(A&&KEt(c,l,A.center,A.width,A.height)){let m=jEt(c,l,A.center,A.width,A.height);t.lines.push({points:[{x:c.x,y:c.y},{x:m.x,y:m.y}],strokeColor:r,strokeDash:h}),t.lines.push({points:[{x:m.x,y:m.y},{x:l.x,y:l.y}],strokeColor:r,strokeDash:h})}else t.lines.push({points:[{x:c.x,y:c.y},{x:l.x,y:l.y}],strokeColor:r,strokeDash:h})}}if(_Ae(e)&&!e.solved&&e.candidates&&e.candidates.length>0){let o=e.currentConnection,i=o?e.colorMap[o.connection.name]??"blue":"blue";if(o){let[s,a]=o.nodeIds,c=e.nodeMap.get(s),l=e.nodeMap.get(a),d=o.connection.pointsToConnect[0],u=o.connection.pointsToConnect[o.connection.pointsToConnect.length-1];if(c&&l){let h=d?{x:d.x,y:d.y}:c.center,A=u?{x:u.x,y:u.y}:l.center;t.lines.push({points:[h,A],strokeColor:Cr(i,0.5),strokeDash:"5 5"}),t.points.push({x:h.x,y:h.y,color:i,label:[`Start: ${o.connection.name}`,`${o.connection.__rootConnectionNames?.[0]}`].join(`
`)}),t.points.push({x:A.x,y:A.y,color:i,label:[`End: ${o.connection.name}`,`${o.connection.__rootConnectionNames?.[0]}`].join(`
`)}),t.circles.push({center:A,radius:0.08,stroke:i,label:`Goal: ${o.connection.name}`})}}let r=[...e.candidates].sort((s,a)=>s.f-a.f).slice(0,1);for(let s of r){let a=[],c=s;for(;c;)a.unshift({x:c.point.x,y:c.point.y,z:c.z,lastMoveWasOffBoard:c.lastMoveWasOffBoard,nodeId:c.currentNodeId}),c=c.prevCandidate;for(let l=0;l<a.length-1;l++){let d=a[l],u=a[l+1],h=d.z===u.z,A=d.z,m;m=u.lastMoveWasOffBoard?"2 2":h?A===0?void 0:"10 5":"3 3 10";let p=d.nodeId?e.nodeMap.get(d.nodeId):null,g=0.02*d.z;if(p&&KEt(d,u,p.center,p.width,p.height)){let _=jEt(d,u,p.center,p.width,p.height);t.lines.push({points:[{x:d.x+g,y:d.y+g},{x:_.x+g,y:_.y+g}],strokeColor:Cr(i,0.25),strokeDash:m}),t.lines.push({points:[{x:_.x+g,y:_.y+g},{x:u.x+g,y:u.y+g}],strokeColor:Cr(i,0.25),strokeDash:m})}else t.lines.push({points:[{x:d.x+g,y:d.y+g},{x:u.x+g,y:u.y+g}],strokeColor:Cr(i,0.25),strokeDash:m})}if(a.length>=1){let l=a[a.length-1],d=0,u=0,h=0,A=0,m=0,p=0,g=e.nodeMap.get(s.prevCandidate?.currentNodeId);if(g&&s.prevCandidate&&s.portPoint&&o){let E=o.connection.name,B={x:s.prevCandidate.point.x,y:s.prevCandidate.point.y,z:s.prevCandidate.z,connectionName:E},w={x:s.portPoint.x,y:s.portPoint.y,z:s.portPoint.z,connectionName:E},T=e.buildNodeWithPortPointsForCrossing(g,[B,w]),Q=l9t(T);h=Q.numSameLayerCrossings,A=Q.numTransitionPairCrossings,m=Q.numEntryExitLayerChanges;let N=e.capacityMeshNodeMap.get(g.capacityMeshNodeId);N&&(u=e.JUMPER_PF_FN_ENABLED&&g.availableZ.length===1?Cte(N,h):d1(N,h,m,A),d=u**2*e.NODE_PF_FACTOR),p=s.prevCandidate.g>0?s.g-s.prevCandidate.g:s.g}if(!o)continue;let[_,f]=o.nodeIds,y=e.nodeMap.get(f),x=y?Math.sqrt((l.x-y.center.x)**2+(l.y-y.center.y)**2):0,C=e.avgNodePitch>0?x/e.avgNodePitch:0,I=C*e.BASE_CANDIDATE_COST,b=e.nodeMemoryPfMap.get(s.currentNodeId)??0,P=-Math.log(1-b)*e.MEMORY_PF_FACTOR;t.circles.push({center:l,radius:0.03,fill:Cr(i,0.25),layer:`z${s.z}`,label:[`f: ${s.f.toFixed(2)}`,`g: ${s.g.toFixed(2)} (nodeDelta: ${p.toFixed(2)})`,`h: ${s.h.toFixed(2)}`,` dist: ${x.toFixed(2)}`,` estHops: ${C.toFixed(1)}`,` estStepCost: ${I.toFixed(2)}`,` memRiskCost: ${P.toFixed(2)}`,`z: ${s.z}`,`node: ${s.currentNodeId}`,`Cost(Pf): ${d.toFixed(3)}`,`Pf: ${u.toFixed(3)}`,`xSame: ${h}, xTrans: ${A}, xLC: ${m}`,`routeOffBoard=${e.currentConnectionShouldRouteOffBoard}`,`offBoardTouched=${s.hasTouchedOffBoardNode??!1}`,`lastMoveWasOffBoard=${s.lastMoveWasOffBoard??!1}`].join(`
`)})}}}return t}function uOt(e,t,n){let o=0,i=n?.NODE_MAX_PF??0.99999;for(let r of e){let s=t.get(r.capacityMeshNodeId);if(!s)continue;if(s._containsTarget)continue;let a=Gm(r),c=Math.min(Cte(s,a.numSameLayerCrossings),i);o+=Math.log(1-c)}return o}var VQo=class extends Oi{constructor(e){super(),this.input=e;let{simpleRouteJson:t,capacityMeshNodes:n,inputNodes:o,colorMap:i,nodeMemoryPfMap:r,hyperParameters:s,precomputedInitialParams:a,fixedRoutes:c}=e;if(this.input=structuredClone(e),this.MAX_ITERATIONS=1e8,this.simpleRouteJson=t,this.inputNodes=o,this.colorMap=i??{},this.capacityMeshNodeMap=new Map(n.map((l)=>[l.capacityMeshNodeId,l])),this.nodeMemoryPfMap=r??new Map,this.hyperParameters=s??{},a){this.nodeMap=a.nodeMap,this.avgNodePitch=a.avgNodePitch,this.offBoardNodes=a.offBoardNodes,this.portPointMap=a.portPointMap,this.nodePortPointsMap=a.nodePortPointsMap,this.connectionNameToGoalNodeIds=a.connectionNameToGoalNodeIds;let{nodeAssignedPortPoints:l}=function(d){let u=new Map;for(let[h,A]of d.nodeAssignedPortPoints)u.set(h,[...A]);return{nodeAssignedPortPoints:u}}(a);this.nodeAssignedPortPoints=l,this.connectionsWithResults=NI(structuredClone(a.unshuffledConnectionsWithResults),this.hyperParameters.SHUFFLE_SEED??0)}else{this.nodeMap=new Map(o.map((h)=>[h.capacityMeshNodeId,h]));let l=o.map((h)=>(h.width+h.height)/2).filter((h)=>Number.isFinite(h)&&h>0);this.avgNodePitch=l.length>0?l.reduce((h,A)=>h+A,0)/l.length:1,this.offBoardNodes=o.filter((h)=>h._offBoardConnectionId),this.portPointMap=new Map,this.nodePortPointsMap=new Map;for(let h of o)this.nodePortPointsMap.set(h.capacityMeshNodeId,[]),this.nodeAssignedPortPoints.set(h.capacityMeshNodeId,[]);for(let h of o)for(let A of h.portPoints){this.portPointMap.set(A.portPointId,A);for(let m of A.connectionNodeIds){let p=this.nodePortPointsMap.get(m);p&&!p.some((g)=>g.portPointId===A.portPointId)&&p.push(A)}}let{connectionsWithResults:d,connectionNameToGoalNodeIds:u}=this.getConnectionsWithNodes();this.connectionsWithResults=d,this.connectionNameToGoalNodeIds=u}if(c&&c.length>0){for(let l of c)if(this.connectionsWithResults.push(l),l.portPoints)for(let d of l.portPoints)d.portPointId&&this.assignedPortPoints.set(d.portPointId,{connectionName:d.connectionName,rootConnectionName:d.rootConnectionName})}for(let l of this.connectionsWithResults)l.path?this.processedConnectionQueue.push(l):this.unprocessedConnectionQueue.push(l);this.totalConnectionCount=this.connectionsWithResults.length}input;getSolverName(){return"PortPointPathingSolver"}hyperParameters;simpleRouteJson;inputNodes;nodeMap;nodePortPointsMap;portPointMap;connectionsWithResults=[];failedConnection=null;assignedPortPoints=new Map;nodeAssignedPortPoints=new Map;PORT_POINT_REUSE_FACTOR=1000;BASE_COST_FOR_NOT_GOING_OFF_BOARD=100;get NODE_PF_FACTOR(){return this.hyperParameters.NODE_PF_FACTOR??50}get RANDOM_WALK_DISTANCE(){return this.hyperParameters.RANDOM_WALK_DISTANCE??0}get MEMORY_PF_FACTOR(){return this.hyperParameters.MEMORY_PF_FACTOR??0}get CENTER_OFFSET_FOCUS_SHIFT(){return this.hyperParameters.CENTER_OFFSET_FOCUS_SHIFT??0}get RANDOM_COST_MAGNITUDE(){return this.hyperParameters.RANDOM_COST_MAGNITUDE??0}get BASE_CANDIDATE_COST(){return this.hyperParameters.BASE_CANDIDATE_COST??0}get NODE_PF_MAX_PENALTY(){return this.hyperParameters.NODE_PF_MAX_PENALTY??1e4}get FORCE_CENTER_FIRST(){return this.hyperParameters.FORCE_CENTER_FIRST??!0}get FORCE_OFF_BOARD_FREQUENCY(){return this.offBoardNodes.length===0?0:this.hyperParameters.FORCE_OFF_BOARD_FREQUENCY??0}get FORCE_OFF_BOARD_SEED(){return this.hyperParameters.FORCE_OFF_BOARD_SEED??0}get NODE_MAX_PF(){return Math.min(0.99999,1-Math.exp(-this.NODE_PF_MAX_PENALTY))}get CENTER_OFFSET_DIST_PENALTY_FACTOR(){return this.hyperParameters.CENTER_OFFSET_DIST_PENALTY_FACTOR??0}get STRAIGHT_LINE_DEVIATION_PENALTY_FACTOR(){return this.hyperParameters.STRAIGHT_LINE_DEVIATION_PENALTY_FACTOR??0}colorMap;get GREEDY_MULTIPLIER(){return this.hyperParameters.GREEDY_MULTIPLIER??1.3}MAX_CANDIDATES_IN_MEMORY=5000;get MAX_ITERATIONS_PER_PATH(){return this.hyperParameters.MAX_ITERATIONS_PER_PATH??1e4}ITERATIONS_PER_MM_FOR_PATH=30;BASE_ITERATIONS_PER_PATH=1e4;get RIPPING_ENABLED(){return this.hyperParameters.RIPPING_ENABLED??!1}get RIPPING_PF_THRESHOLD(){let e=this.hyperParameters.START_RIPPING_PF_THRESHOLD,t=this.hyperParameters.END_RIPPING_PF_THRESHOLD;if(e!==void 0&&t!==void 0){let n=this.MAX_RIPS;return e+(n>0?this.totalRipCount/n:0)*(t-e)}return this.hyperParameters.RIPPING_PF_THRESHOLD??0.3}get MAX_RIPS(){return this.hyperParameters.MAX_RIPS??100}get RANDOM_RIP_FRACTION(){return this.hyperParameters.RANDOM_RIP_FRACTION??0}get JUMPER_PF_FN_ENABLED(){return this.hyperParameters.JUMPER_PF_FN_ENABLED??!1}jumpersPerMmSquared=0.1;testedRipConnections=new Map;totalRipCount=0;get MIN_ALLOWED_BOARD_SCORE(){return this.hyperParameters.MIN_ALLOWED_BOARD_SCORE??-1e4}nodeMemoryPfMap;unprocessedConnectionQueue=[];processedConnectionQueue=[];currentConnection=null;totalConnectionCount=0;currentPathIterations=0;candidates;visitedPortPoints;connectionNameToGoalNodeIds;capacityMeshNodeMap;avgNodePitch;currentConnectionShouldRouteOffBoard=!1;activeCandidateStraightLineDistance;offBoardNodes=[];baseNodeCostCache=new Map;getConstructorParams(){return this.input}clearCostCaches(){this.baseNodeCostCache.clear()}clampPf(e){return Number.isFinite(e)?Math.min(Math.max(e,0),0.999999):0.999999}pfToFailureCost(e){let t=this.clampPf(e);return t>=this.NODE_MAX_PF?this.NODE_PF_MAX_PENALTY:-Math.log(1-t)}getBaseNodeFailureCost(e){let t=this.baseNodeCostCache.get(e);if(t!=null)return t;let n=this.nodeMap.get(e);if(!n)return 0;let o=this.computeNodePf(n),i=this.pfToFailureCost(o);return this.baseNodeCostCache.set(e,i),i}computeBoardScore(){let e=this.getNodesWithPortPoints();return this.JUMPER_PF_FN_ENABLED?uOt(e,this.capacityMeshNodeMap):dOt(e,this.capacityMeshNodeMap)}getMaxIterationsForCurrentPath(){let e=this.activeCandidateStraightLineDistance??0;return Math.min(this.BASE_ITERATIONS_PER_PATH+this.ITERATIONS_PER_MM_FOR_PATH*e,this.MAX_ITERATIONS_PER_PATH)}getNodeDeltaFailureCostForSegment(e,t,n){let o=this.nodeMap.get(e);if(!o)return 0;let i=this.getBaseNodeFailureCost(e),r=this.computeNodePf(o,[t,n]),s=this.pfToFailureCost(r),a=Math.max(0,s-i);return r>=this.NODE_MAX_PF?this.NODE_PF_MAX_PENALTY:a*this.NODE_PF_FACTOR}getConnectionsWithNodes(){let{unshuffledConnectionsWithResults:e,connectionNameToGoalNodeIds:t}=cOt(this.simpleRouteJson,this.inputNodes);return{connectionsWithResults:NI(e,this.hyperParameters.SHUFFLE_SEED??0),connectionNameToGoalNodeIds:t}}buildNodeWithPortPointsForCrossing(e,t){let n=this.nodeAssignedPortPoints.get(e.capacityMeshNodeId)??[],o=t?[...n,...t]:n;return{capacityMeshNodeId:e.capacityMeshNodeId,center:e.center,width:e.width,height:e.height,portPoints:o,availableZ:e.availableZ}}computeNodePf(e,t){if(e._containsTarget)return 0;let n=this.buildNodeWithPortPointsForCrossing(e,t),o=Gm(n);return this.JUMPER_PF_FN_ENABLED&&e.availableZ.length===1?Cte(this.capacityMeshNodeMap.get(e.capacityMeshNodeId),o.numSameLayerCrossings):d1(this.capacityMeshNodeMap.get(e.capacityMeshNodeId),o.numSameLayerCrossings,o.numEntryExitLayerChanges,o.numTransitionPairCrossings)}getPortPointReusePenalty(e,t){let n=this.assignedPortPoints.get(e);return n?t===n.rootConnectionName?0:this.PORT_POINT_REUSE_FACTOR:0}getOtherNodeId(e,t){let[n,o]=e.connectionNodeIds;return n===t?o:o===t?n:null}computeG(e,t,n,o,i){let{currentNodeId:r,point:s}=e,a={x:s.x,y:s.y,z:e.z,connectionName:o,rootConnectionName:i},c={x:t.x,y:t.y,z:t.z,connectionName:o,rootConnectionName:i},l=this.getNodeDeltaFailureCostForSegment(r,a,c);return e.g+l}computeGToEndTarget(e,t,n,o){let i=e.currentNodeId,r={x:e.point.x,y:e.point.y,z:e.z,connectionName:n,rootConnectionName:o},s={x:t.x,y:t.y,z:e.z,connectionName:n,rootConnectionName:o},a=this.getNodeDeltaFailureCostForSegment(i,r,s);return e.g+a}computeDistanceToNearestOffBoardNode(e){if(this.offBoardNodes.length===0)return 1/0;let t=1/0;for(let n of this.offBoardNodes){let o=bn(e,n.center);o<t&&(t=o)}return t}computeH(e,t,n,o,i,r){if(this.RANDOM_WALK_DISTANCE>0&&i<this.RANDOM_WALK_DISTANCE)return 0;if(this.currentConnectionShouldRouteOffBoard&&!r)return this.BASE_COST_FOR_NOT_GOING_OFF_BOARD+this.computeDistanceToNearestOffBoardNode(e);let s=this.nodeMap.get(n);if(!s)return 0;let a=bn(e,s.center),c=this.avgNodePitch>0?a/this.avgNodePitch:0,l=this.clampPf(this.nodeMemoryPfMap.get(t)??0),d=this.pfToFailureCost(l)*this.MEMORY_PF_FACTOR,u=c*this.BASE_CANDIDATE_COST,h=this.CENTER_OFFSET_DIST_PENALTY_FACTOR*e.distToCentermostPortOnZ**2,A=0;if(this.STRAIGHT_LINE_DEVIATION_PENALTY_FACTOR>0&&this.currentConnection){let m=Da(e,this.currentConnection.connection.pointsToConnect[0],this.currentConnection.connection.pointsToConnect[1]);A=this.STRAIGHT_LINE_DEVIATION_PENALTY_FACTOR*m}return a+u+d+h+A}getVisitedPortPointKey(e,t){return this.currentConnectionShouldRouteOffBoard&&t?`${e}:touched_off_board`:e}getAvailableExitPortPoints(e,t){let n=this.currentConnection?.connection.__rootConnectionNames?.[0],o=this.nodePortPointsMap.get(e)??[],i=[];for(let r of o){let s=this.getVisitedPortPointKey(r.portPointId,t);if(this.visitedPortPoints?.has(s))continue;let a=this.assignedPortPoints.get(r.portPointId);a&&a?.rootConnectionName!==n||i.push(r)}return i}getAvailableExitPortPointsWithOmissions(e,t,n){let o=this.nodePortPointsMap.get(e)??[],i=this.currentConnection?.connection.__rootConnectionNames?.[0],r=new Map;for(let a of o){let c=this.getVisitedPortPointKey(a.portPointId,n);if(this.visitedPortPoints?.has(c))continue;let l=this.getOtherNodeId(a,e);if(!l)continue;this.nodeMap.get(l);let d=`${l}|${a.z}`,u=r.get(d)??[];u.push(a),r.set(d,u)}let s=[];for(let[,a]of r){a.sort((m,p)=>m.distToCentermostPortOnZ-p.distToCentermostPortOnZ);let c=a[0];if(!c)continue;let l=this.assignedPortPoints.get(c.portPointId),d=l&&l.rootConnectionName===i;if(!l||d){s.push(c);continue}let u=[...a].sort((m,p)=>m.x!==p.x?m.x-p.x:m.y-p.y),h=[],A=[];for(let m of u){let p=this.assignedPortPoints.get(m.portPointId);!p||p.rootConnectionName===i?A.push(m):A.length>0&&(h.push(A),A=[])}A.length>0&&h.push(A);for(let m of h){let p=Math.floor(m.length/2);s.push(m[p])}}return s}getAvailableExitPortPointsForOffboardConnection(e,t){let n=this.nodeMap.get(e);if(!n)return[];let o=this.currentConnection?.connection.__rootConnectionNames?.[0],i=[];for(let r of n?._offBoardConnectedCapacityMeshNodeIds??[]){if(r===e)continue;if(!this.nodeMap.get(r))continue;let s=this.nodePortPointsMap.get(r)??[];for(let a of s){let c=this.getVisitedPortPointKey(a.portPointId,t);if(this.visitedPortPoints?.has(c))continue;let l=this.assignedPortPoints.get(a.portPointId);l&&l.rootConnectionName!==o||i.push({...a,throughNodeId:r})}}return i}canTravelThroughObstacle(e,t,n){return this.connectionNameToGoalNodeIds.get(t)?.includes(e.capacityMeshNodeId)||Boolean(e._offBoardConnectionId)}isAtEndGoal(e,t){return e===t}getBacktrackedPath(e){let t=[],n=e;for(;n;){if(n.lastMoveWasOffBoard&&n.throughNodeId){let o=this.nodeMap.get(n.throughNodeId),i=n.prevCandidate?this.nodeMap.get(n.prevCandidate.currentNodeId):null;t.push(n),o&&t.push({prevCandidate:null,portPoint:null,currentNodeId:n.throughNodeId,point:o.center,z:n.z,f:0,g:0,h:0,distanceTraveled:0}),i&&i._offBoardConnectionId&&t.push({prevCandidate:null,portPoint:null,currentNodeId:n.prevCandidate.currentNodeId,point:i.center,z:n.z,f:0,g:0,h:0,distanceTraveled:0})}else t.push(n);n=n.prevCandidate}return t.reverse()}assignPortPointsForPath(e,t,n){let o=[];for(let a=0;a<e.length;a++){let c=e[a];if(!c.portPoint){let u=a===0,h=a===e.length-1;if(!u&&!h){let A={x:c.point.x,y:c.point.y,z:c.z,connectionName:t,rootConnectionName:n};o.push(A);let m=this.nodeAssignedPortPoints.get(c.currentNodeId)??[];m.push(A),this.nodeAssignedPortPoints.set(c.currentNodeId,m)}continue}let l=c.portPoint;this.assignedPortPoints.set(l.portPointId,{connectionName:t,rootConnectionName:n});let d={portPointId:l.portPointId,x:l.x,y:l.y,z:l.z,connectionName:t,rootConnectionName:n,prevPortPointId:l.prevPortPointId,nextPortPointId:l.nextPortPointId};o.push(d);for(let u of l.connectionNodeIds){let h=this.nodeAssignedPortPoints.get(u)??[];h.push(d),this.nodeAssignedPortPoints.set(u,h)}}let i=o.map((a)=>a.portPointId).filter((a)=>Boolean(a)),r=0;for(let a of o)a.portPointId&&(a.prevPortPointId=i[r-1],a.nextPortPointId=i[r+1],r+=1);let s=Array.from(new Set(e.map((a)=>a.currentNodeId)));for(let a of s){let c=this.nodeMap.get(a);if(c&&c._offBoardConnectionId)for(let l of c?._offBoardConnectedCapacityMeshNodeIds??[]){let d=this.nodePortPointsMap.get(l)??[];for(let u of d)this.assignedPortPoints.set(u.portPointId,{connectionName:t,rootConnectionName:n})}}return o}addTargetPointsToNodes(e,t){let n=e[0],o=e[e.length-1],i=t.pointsToConnect[0],r=t.pointsToConnect[t.pointsToConnect.length-1];if(n&&i){let s=this.nodeAssignedPortPoints.get(n.currentNodeId)??[];s.push({x:i.x,y:i.y,z:n.z,connectionName:t.name,rootConnectionName:t.__rootConnectionNames?.[0]}),this.nodeAssignedPortPoints.set(n.currentNodeId,s)}if(o&&r){let s=this.nodeAssignedPortPoints.get(o.currentNodeId)??[];s.push({x:r.x,y:r.y,z:o.z,connectionName:t.name,rootConnectionName:t.__rootConnectionNames?.[0]}),this.nodeAssignedPortPoints.set(o.currentNodeId,s)}}isPortPointInPathChain(e,t){let n=e;for(;n;){if(n.portPoint?.portPointId===t)return!0;n=n.prevCandidate}return!1}isNodeInPathChain(e,t){let n=e;for(;n;){if(n.currentNodeId===t)return!0;n=n.prevCandidate}return!1}_step(){if(this.currentConnection||(this.currentConnection=this.unprocessedConnectionQueue.shift()??null),!this.currentConnection){let h=this.computeBoardScore();return this.stats={boardScore:h,totalRipCount:this.totalRipCount},h<this.MIN_ALLOWED_BOARD_SCORE?(this.failedConnection=null,this.failed=!0,void(this.error=`Board score ${h.toFixed(2)} is less than MIN_ALLOWED_BOARD_SCORE ${this.MIN_ALLOWED_BOARD_SCORE.toFixed(2)}`)):void(this.solved=!0)}let e=this.currentConnection;this.activeCandidateStraightLineDistance=e.straightLineDistance,this.currentPathIterations++;let t=this.getMaxIterationsForCurrentPath();if(this.currentPathIterations>t)return this.failedConnection=e,this.processedConnectionQueue.push(e),this.currentConnection=null,this.candidates=null,this.visitedPortPoints=null,this.currentPathIterations=0,this.failed=!0,void(this.error=`Exceeded max iterations for path (${t}) on connection ${e.connection.name}`);let[n,o]=e.nodeIds,i=this.nodeMap.get(n),r=this.nodeMap.get(o);if(!i||!r)return this.processedConnectionQueue.push(e),this.currentConnection=null,void(this.currentPathIterations=0);let s=e.connection.name,a=e.connection.__rootConnectionNames?.[0],c=e.connection.pointsToConnect[0];if(!this.candidates){if(this.clearCostCaches(),this.FORCE_OFF_BOARD_FREQUENCY>0){let h=Uke(17*(this.hyperParameters.SHUFFLE_SEED??0)+this.FORCE_OFF_BOARD_SEED+this.processedConnectionQueue.length);this.currentConnectionShouldRouteOffBoard=h()<this.FORCE_OFF_BOARD_FREQUENCY}else this.currentConnectionShouldRouteOffBoard=!1;this.candidates=[],this.visitedPortPoints=new Set;for(let h of i.availableZ){let A=c?{x:c.x,y:c.y}:i.center,m={portPointId:`start:${n}:${h}`,x:A.x,y:A.y,z:h,connectionNodeIds:[n,n],distToCentermostPortOnZ:0},p=this.computeH(m,n,o,h,0,!1),g=0+p*this.GREEDY_MULTIPLIER;this.candidates.push({prevCandidate:null,portPoint:null,currentNodeId:n,point:A,z:h,f:g,g:0,h:p,distanceTraveled:0,hasTouchedOffBoardNode:!1})}}this.candidates.sort((h,A)=>h.f-A.f);let l,d=this.candidates.shift();for(;d?.portPoint&&this.visitedPortPoints;){let h=this.getVisitedPortPointKey(d.portPoint.portPointId,d.hasTouchedOffBoardNode);if(!this.visitedPortPoints.has(h))break;d=this.candidates.shift()}if(this.candidates.length>this.MAX_CANDIDATES_IN_MEMORY&&this.candidates.splice(this.MAX_CANDIDATES_IN_MEMORY,this.candidates.length-this.MAX_CANDIDATES_IN_MEMORY),!d)return this.error=`Ran out of candidates on connection ${s}`,this.failedConnection=e,this.processedConnectionQueue.push(e),this.currentConnection=null,this.candidates=null,this.visitedPortPoints=null,this.currentPathIterations=0,void(this.failed=!0);if(d.portPoint&&this.visitedPortPoints){let h=this.getVisitedPortPointKey(d.portPoint.portPointId,d.hasTouchedOffBoardNode);this.visitedPortPoints.add(h)}if(this.isAtEndGoal(d.currentNodeId,o)){let h=e.connection.pointsToConnect[e.connection.pointsToConnect.length-1],A=h?{x:h.x,y:h.y}:r.center,m=this.computeGToEndTarget(d,A,s,a),p={prevCandidate:d,portPoint:null,currentNodeId:o,point:A,z:d.z,g:m,h:0,f:m,distanceTraveled:d.distanceTraveled+bn(d.point,A)},g=this.getBacktrackedPath(p);return e.path=g,e.portPoints=this.assignPortPointsForPath(g,s,a),this.addTargetPointsToNodes(g,e.connection),this.clearCostCaches(),this.RIPPING_ENABLED&&this.processRippingForPath(g,s),this.processedConnectionQueue.push(e),this.currentConnection=null,this.progress=this.processedConnectionQueue.length/this.totalConnectionCount,this.candidates=null,this.visitedPortPoints=null,void(this.currentPathIterations=0)}let u=this.nodeMap.get(d.currentNodeId);l=u?._offBoardConnectionId?this.getAvailableExitPortPointsForOffboardConnection(d.currentNodeId,d.hasTouchedOffBoardNode):this.FORCE_CENTER_FIRST?this.getAvailableExitPortPointsWithOmissions(d.currentNodeId,o,d.hasTouchedOffBoardNode):this.getAvailableExitPortPoints(d.currentNodeId,d.hasTouchedOffBoardNode);for(let h of l){if(this.isPortPointInPathChain(d,h.portPointId))continue;if(this.visitedPortPoints?.has(h.portPointId))continue;let A=this.getOtherNodeId(h,h.throughNodeId??d.currentNodeId);if(!A)continue;if(this.isNodeInPathChain(d,A))continue;let m="throughNodeId"in h?h.throughNodeId:void 0,p=m?this.nodeMap.get(m):null,g=this.nodeMap.get(A);if(!g)continue;if(g._containsObstacle&&!this.canTravelThroughObstacle(g,s,a))continue;let _=this.computeG(d,h,A,s,a);if(!this.RIPPING_ENABLED&&_>-this.MIN_ALLOWED_BOARD_SCORE)continue;let f=d.distanceTraveled+bn(d.point,h),y=d.hasTouchedOffBoardNode||Boolean(g._offBoardConnectionId),x=this.computeH(h,A,o,h.z,f,y),C=_+x*this.GREEDY_MULTIPLIER,I=Boolean(u?._offBoardConnectionId)&&Boolean(p?._offBoardConnectionId);this.candidates.push({prevCandidate:d,portPoint:h,currentNodeId:A,point:{x:h.x,y:h.y},z:h.z,f:C,g:_,h:x,distanceTraveled:f,lastMoveWasOffBoard:I,throughNodeId:I?m:void 0,hasTouchedOffBoardNode:y||Boolean(g._offBoardConnectionId)||Boolean(u?._offBoardConnectionId)})}}getNodesWithPortPoints(){let e=[];for(let t of this.inputNodes){let n=this.nodeAssignedPortPoints.get(t.capacityMeshNodeId)??[];n.length>0&&e.push({capacityMeshNodeId:t.capacityMeshNodeId,center:t.center,width:t.width,height:t.height,portPoints:n,availableZ:t.availableZ})}return e}getConnectionsInNode(e,t){let n=[],o=new Set;for(let i of this.connectionsWithResults)if(i.path&&i.connection.name!==t&&!o.has(i.connection.name)){for(let r of i.path)if(r.currentNodeId===e){n.push(i),o.add(i.connection.name);break}}return n}computeNodePfWithoutConnection(e,t){if(e._containsTarget)return{pf:0,totalCrossings:0};let n=(this.nodeAssignedPortPoints.get(e.capacityMeshNodeId)??[]).filter((s)=>s.connectionName!==t),o={capacityMeshNodeId:e.capacityMeshNodeId,center:e.center,width:e.width,height:e.height,portPoints:n,availableZ:e.availableZ},i=Gm(o),r=i.numSameLayerCrossings+i.numEntryExitLayerChanges+i.numTransitionPairCrossings;return{pf:d1(this.capacityMeshNodeMap.get(e.capacityMeshNodeId),i.numSameLayerCrossings,i.numEntryExitLayerChanges,i.numTransitionPairCrossings),totalCrossings:r}}computeNodeCrossings(e){if(e._containsTarget)return 0;let t=this.buildNodeWithPortPointsForCrossing(e),n=Gm(t);return n.numSameLayerCrossings+n.numEntryExitLayerChanges+n.numTransitionPairCrossings}ripConnection(e){let t=e.connection.name;for(let[n,o]of this.assignedPortPoints.entries())o.connectionName===t&&this.assignedPortPoints.delete(n);for(let[n,o]of this.nodeAssignedPortPoints.entries()){let i=o.filter((r)=>r.connectionName!==t);this.nodeAssignedPortPoints.set(n,i)}e.path=void 0,e.portPoints=void 0}requeueConnection(e){this.totalRipCount++;let t=this.processedConnectionQueue.indexOf(e);if(t!==-1)return this.processedConnectionQueue.splice(t,1),this.unprocessedConnectionQueue.push(e),!0;let n=this.unprocessedConnectionQueue.indexOf(e);return n!==-1&&(this.unprocessedConnectionQueue.splice(n,1),this.unprocessedConnectionQueue.unshift(e)),!0}processRippingForPath(e,t){let n=Array.from(new Set(e.map((i)=>i.currentNodeId))),o=!1;for(let i of n){if(this.totalRipCount>this.MAX_RIPS)break;let r=this.nodeMap.get(i);if(!r)continue;let s=this.computeNodePf(r);if(s<=this.RIPPING_PF_THRESHOLD)continue;this.testedRipConnections.has(i)||this.testedRipConnections.set(i,new Set);let a=this.testedRipConnections.get(i),c=NI(this.getConnectionsInNode(i,t),(this.hyperParameters.SHUFFLE_SEED??0)+this.processedConnectionQueue.length);for(let l of c){if(s<=this.RIPPING_PF_THRESHOLD)break;let d=l.connection.name;a.add(d);let{pf:u}=this.computeNodePfWithoutConnection(r,d);if(this.ripConnection(l),!this.requeueConnection(l))return;s=u,o=!0,this.clearCostCaches()}}o&&this.RANDOM_RIP_FRACTION>0&&this.processRandomRipping(t)}processRandomRipping(e){let t=this.processedConnectionQueue.filter((i)=>i.path!==void 0&&i.connection.name!==e);if(t.length===0)return;let n=Math.max(1,Math.floor(this.RANDOM_RIP_FRACTION*t.length)),o=NI(t,(this.hyperParameters.SHUFFLE_SEED??0)+this.totalRipCount+this.processedConnectionQueue.length);for(let i=0;i<n&&i<o.length&&!(this.totalRipCount>this.MAX_RIPS);i++){let r=o[i];if(this.ripConnection(r),!this.requeueConnection(r))return;this.clearCostCaches()}}visualize(){let e={};if(this.failed){let t=this.failedConnection?.connection.pointsToConnect[0],n=this.failedConnection?.connection.pointsToConnect[1];t&&n&&(e={lines:[{points:[t,n],label:`Failed Connection ${this.failedConnection?.connection.name}`,strokeWidth:1,strokeColor:"red",strokeDash:[2,2]}]})}return Sk(DQe(this),e)}},hHe=class extends Jge{getSolverName(){return"HyperPortPointPathingSolver"}params;precomputedInitialParams;constructor(e){super(),this.params=e,this.MAX_ITERATIONS=1e8,this.GREEDY_MULTIPLIER=1.2,this.MIN_SUBSTEPS=50,this.precomputedInitialParams=e.precomputedInitialParams??lOt(e.simpleRouteJson,e.inputNodes)}getHyperParameterDefs(){let e=this.params.numShuffleSeeds??50;return[{name:"SHUFFLE_SEED",possibleValues:Array.from({length:e},(t,n)=>({SHUFFLE_SEED:n+1700*(this.params.hyperParameters?.SHUFFLE_SEED??0)}))}]}getCombinationDefs(){return[["SHUFFLE_SEED"]]}generateSolver(e){return new VQo({simpleRouteJson:this.params.simpleRouteJson,capacityMeshNodes:this.params.capacityMeshNodes,inputNodes:this.params.inputNodes,colorMap:this.params.colorMap,nodeMemoryPfMap:this.params.nodeMemoryPfMap,hyperParameters:{...this.params.hyperParameters,...e,MIN_ALLOWED_BOARD_SCORE:this.params.minAllowedBoardScore??e.MIN_ALLOWED_BOARD_SCORE??this.params.hyperParameters?.MIN_ALLOWED_BOARD_SCORE},precomputedInitialParams:this.precomputedInitialParams,fixedRoutes:this.params.fixedRoutes})}computeG(e){return-e.computeBoardScore()}computeH(e){let t=e.progress||0;if(t<0.1)return 0;return-(e.computeBoardScore()/t)*(1-t)}getNodesWithPortPoints(){if(this.winningSolver)return this.winningSolver.getNodesWithPortPoints();let e=this.getSupervisedSolverWithBestFitness();return e?e.solver.getNodesWithPortPoints():[]}get connectionsWithResults(){if(this.winningSolver)return this.winningSolver.connectionsWithResults;let e=this.getSupervisedSolverWithBestFitness();return e?e.solver.connectionsWithResults:[]}get inputNodes(){if(this.winningSolver)return this.winningSolver.inputNodes;let e=this.getSupervisedSolverWithBestFitness();return e?e.solver.inputNodes:this.params.inputNodes}get nodeMap(){if(this.winningSolver)return this.winningSolver.nodeMap;let e=this.getSupervisedSolverWithBestFitness();return e?e.solver.nodeMap:new Map(this.params.inputNodes.map((t)=>[t.capacityMeshNodeId,t]))}get assignedPortPoints(){if(this.winningSolver)return this.winningSolver.assignedPortPoints;let e=this.getSupervisedSolverWithBestFitness();return e?e.solver.assignedPortPoints:new Map}get nodeAssignedPortPoints(){if(this.winningSolver)return this.winningSolver.nodeAssignedPortPoints;let e=this.getSupervisedSolverWithBestFitness();return e?e.solver.nodeAssignedPortPoints:new Map}computeNodePf(e){if(this.winningSolver)return this.winningSolver.computeNodePf(e);let t=this.getSupervisedSolverWithBestFitness();return t?t.solver.computeNodePf(e):null}computeBoardScore(){if(this.winningSolver)return this.winningSolver.computeBoardScore();let e=this.getSupervisedSolverWithBestFitness();return e?e.solver.computeBoardScore():0}onSolve(e){this.stats={...e.solver.stats,winningHyperParameters:this.winningSolver?.hyperParameters}}visualize(){return this.winningSolver?this.winningSolver.visualize():super.visualize()}};function qEt(e){let t=e;return()=>{t+=1831565813;let n=t;return n=Math.imul(n^n>>>15,1|n),n^=n+Math.imul(n^n>>>7,61|n),((n^n>>>14)>>>0)/4294967296}}var UQo=[{SHUFFLE_SEED:100,NODE_PF_FACTOR:100,NODE_PF_MAX_PENALTY:100,MEMORY_PF_FACTOR:0,EXPANSION_DEGREES:10,FORCE_CENTER_FIRST:!0,FORCE_OFF_BOARD_FREQUENCY:0,CENTER_OFFSET_DIST_PENALTY_FACTOR:0}],WQo=class extends Oi{getSolverName(){return"MultiSectionPortPointOptimizer"}simpleRouteJson;inputNodes;capacityMeshNodes;capacityMeshEdges;colorMap;nodeMap;capacityMeshNodeMap;connectionResults;assignedPortPoints;nodeAssignedPortPoints;sections=[];activeSubSolver=null;currentSection=null;sectionScoreBeforeOptimization=0;currentSectionCenterNodeId=null;currentScheduleIndex=0;nodePfMap=new Map;attemptsToFixNode=new Map;sectionAttempts=0;MAX_ATTEMPTS_PER_NODE=100;MAX_SECTION_ATTEMPTS=15;ACCEPTABLE_PF=0.05;FRACTION_TO_REPLACE=0.2;JUMPER_PF_FN_ENABLED=!1;SHUFFLE_SEEDS_PER_SECTION=null;ALWAYS_RIP_INTERSECTIONS=!0;effort=1;HYPERPARAMETER_SCHEDULE=UQo;constructor(e){super(),this.MAX_ITERATIONS=1e6,this.simpleRouteJson=e.simpleRouteJson,this.inputNodes=e.inputNodes,this.capacityMeshNodes=e.capacityMeshNodes,this.capacityMeshEdges=e.capacityMeshEdges,this.colorMap=e.colorMap??{},this.effort=e.effort??1,e.FRACTION_TO_REPLACE!==void 0&&(this.FRACTION_TO_REPLACE=e.FRACTION_TO_REPLACE),e.ALWAYS_RIP_INTERSECTIONS!==void 0&&(this.ALWAYS_RIP_INTERSECTIONS=e.ALWAYS_RIP_INTERSECTIONS),e.MAX_ATTEMPTS_PER_NODE!==void 0&&(this.MAX_ATTEMPTS_PER_NODE=e.MAX_ATTEMPTS_PER_NODE),e.MAX_SECTION_ATTEMPTS!==void 0&&(this.MAX_SECTION_ATTEMPTS=e.MAX_SECTION_ATTEMPTS),e.HYPERPARAMETER_SCHEDULE!==void 0&&(this.HYPERPARAMETER_SCHEDULE=e.HYPERPARAMETER_SCHEDULE),this.JUMPER_PF_FN_ENABLED=e.JUMPER_PF_FN_ENABLED??this.JUMPER_PF_FN_ENABLED,this.SHUFFLE_SEEDS_PER_SECTION=e.SHUFFLE_SEEDS_PER_SECTION,this.nodeMap=new Map(e.inputNodes.map((n)=>[n.capacityMeshNodeId,n])),this.capacityMeshNodeMap=new Map(e.capacityMeshNodes.map((n)=>[n.capacityMeshNodeId,n])),this.connectionResults=[...e.initialConnectionResults],this.assignedPortPoints=new Map(e.initialAssignedPortPoints),this.nodeAssignedPortPoints=new Map(e.initialNodeAssignedPortPoints),this.nodePfMap=this.computeInitialPfMap();let t=this.computeBoardScore();this.stats.successfulOptimizations=0,this.stats.failedOptimizations=0,this.stats.nodesExamined=0,this.stats.sectionAttempts=0,this.stats.sectionScores={},this.stats.initialBoardScore=t,this.stats.currentBoardScore=t,this.stats.errors=0}computeInitialPfMap(){let e=new Map;for(let t of this.capacityMeshNodes){let n=this.nodeAssignedPortPoints.get(t.capacityMeshNodeId)??[];if(n.length===0)continue;let o={capacityMeshNodeId:t.capacityMeshNodeId,center:t.center,width:t.width,height:t.height,portPoints:n,availableZ:t.availableZ},i=this.JUMPER_PF_FN_ENABLED&&t.availableZ.length===1?Cte(t,Gm(o).numSameLayerCrossings):WEt(o,t);e.set(t.capacityMeshNodeId,i)}return e}computeBoardScore(){let e=this.getNodesWithPortPoints();return this.computeScoreForNodes(e)}computeScoreForNodes(e){return this.JUMPER_PF_FN_ENABLED?uOt(e,this.capacityMeshNodeMap):dOt(e,this.capacityMeshNodeMap)}recomputePfForNodes(e){for(let t of e){let n=this.capacityMeshNodeMap.get(t);if(!n)continue;let o=this.nodeAssignedPortPoints.get(t)??[];if(o.length===0){this.nodePfMap.set(t,0);continue}let i={capacityMeshNodeId:t,center:n.center,width:n.width,height:n.height,portPoints:o,availableZ:n.availableZ},r=this.JUMPER_PF_FN_ENABLED&&n.availableZ.length===1?Cte(n,Gm(i).numSameLayerCrossings):WEt(i,n);this.nodePfMap.set(t,r)}}getCreatePortPointSectionInput(){return{inputNodes:this.inputNodes,capacityMeshNodes:this.capacityMeshNodes,capacityMeshEdges:this.capacityMeshEdges,nodeMap:this.nodeMap,connectionResults:this.connectionResults}}createSection(e){return function(t,n){let{inputNodes:o,capacityMeshNodes:i,capacityMeshEdges:r,connectionResults:s}=t,{centerOfSectionCapacityNodeId:a,expansionDegrees:c}=n,l=new Map;for(let y of r){let[x,C]=y.nodeIds;l.has(x)||l.set(x,new Set),l.has(C)||l.set(C,new Set),l.get(x).add(C),l.get(C).add(x)}let d=new Set,u=new Set,h=[];for(h.push({nodeId:a,depth:0}),u.add(a);h.length>0;){let{nodeId:y,depth:x}=h.shift();if(d.add(y),x<c){let C=l.get(y)??new Set;for(let I of C)u.has(I)||(u.add(I),h.push({nodeId:I,depth:x+1}))}}let A=o.filter((y)=>d.has(y.capacityMeshNodeId)),m=i.filter((y)=>d.has(y.capacityMeshNodeId)),p=[],g=[];for(let y of r){let[x,C]=y.nodeIds,I=d.has(x),b=d.has(C);I&&b?p.push(y):(I||b)&&g.push(y)}let _=A.map((y)=>{let x=y.portPoints.filter((C)=>{let[I,b]=C.connectionNodeIds,P=d.has(I),E=d.has(b);return P||E});return{...y,portPoints:x}}),f=function(y,x){let C=[];for(let I of y){if(!I.path||I.path.length===0)continue;let b=I.connection.name,P=I.connection.__rootConnectionNames?.[0],E=[];for(let z=0;z<I.path.length;z++){let Y=I.path[z];x.has(Y.currentNodeId)&&E.push(z)}if(E.length===0)continue;let B=E[0],w=E[E.length-1],T=B,Q=w;if(B>0){let z=I.path[0].currentNodeId;(I.nodeIds[0]===z||I.nodeIds[1]===z)&&(T=0)}if(w<I.path.length-1){let z=I.path.length-1,Y=I.path[z].currentNodeId;(I.nodeIds[0]===Y||I.nodeIds[1]===Y)&&(Q=z)}let N=I.path.slice(T,Q+1),F=T>0,H=Q<I.path.length-1;C.push({connectionName:b,rootConnectionName:P,points:N.map((z)=>({x:z.point.x,y:z.point.y,z:z.z,nodeId:z.currentNodeId,portPointId:z.portPoint?.portPointId})),originalStartIndex:T,originalEndIndex:Q,hasEntryFromOutside:F,hasExitToOutside:H})}return C}(s??[],d);return{centerNodeId:a,expansionDegrees:c,nodeIds:d,inputNodes:_,capacityMeshNodes:m,internalEdges:p,boundaryEdges:g,sectionPaths:f}}(this.getCreatePortPointSectionInput(),e)}getSectionNodesWithPortPoints(e){let t=[];for(let n of e.nodeIds){let o=this.nodeMap.get(n),i=this.capacityMeshNodeMap.get(n);if(!o||!i)continue;let r=this.nodeAssignedPortPoints.get(n)??[];r.length>0&&t.push({capacityMeshNodeId:n,center:o.center,width:o.width,height:o.height,portPoints:r,availableZ:o.availableZ})}return t}getNodesWithPortPoints(){let e=[];for(let t of this.inputNodes){let n=this.nodeAssignedPortPoints.get(t.capacityMeshNodeId)??[];n.length>0&&e.push({capacityMeshNodeId:t.capacityMeshNodeId,center:t.center,width:t.width,height:t.height,portPoints:n,availableZ:t.availableZ})}return e}findHighestPfNode(){let e=null,t=0;for(let[n,o]of this.nodePfMap.entries())o*(1-(this.attemptsToFixNode.get(n)??0)/this.MAX_ATTEMPTS_PER_NODE)**2>t&&(t=o,e=n);return!e||t<this.ACCEPTABLE_PF?null:e}currentSectionCutPathInfo=new Map;currentSectionKeptPortPoints=new Map;currentSectionFixedRoutes=[];determineConnectionsToRip(e,t){let n=31337*this.sectionAttempts,o=qEt(n);if(this.FRACTION_TO_REPLACE>=1)return new Set(t);let i=function(a,c){let l=qEt(c),d=[...a];for(let u=d.length-1;u>0;u--){let h=Math.floor(l()*(u+1));[d[u],d[h]]=[d[h],d[u]]}return d}(t,n),r=Math.max(1,Math.ceil(i.length*this.FRACTION_TO_REPLACE)),s=new Set(i.slice(0,r));if(this.ALWAYS_RIP_INTERSECTIONS){let a=function(c){let{section:l,nodePfMap:d,capacityMeshNodeMap:u,nodeAssignedPortPoints:h,acceptablePf:A}=c,m=[];for(let p of l.nodeIds){if((d.get(p)??0)<=A)continue;let g=u.get(p);if(!g)continue;let _=h.get(p)??[];if(_.length<2)continue;let f=g.center.x-g.width/2,y=g.center.x+g.width/2,x=g.center.y-g.height/2,C=g.center.y+g.height/2,I=new Map;for(let E of _){let B=I.get(E.connectionName)??[];B.some((w)=>w.x===E.x&&w.y===E.y&&w.z===E.z)||B.push({x:E.x,y:E.y,z:E.z}),I.set(E.connectionName,B)}let b=new Map;for(let[E,B]of I){if(B.length<2)continue;let w=B[0],T=B[1];if(w.z!==T.z)continue;let Q=XEt(w,f,y,x,C),N=XEt(T,f,y,x,C),F=w.z,H=b.get(F)??[];H.push({connectionName:E,t1:Q,t2:N}),b.set(F,H)}let P=0.000001;for(let[,E]of b){let B=E.map((w)=>({connectionName:w.connectionName,a:Math.min(w.t1,w.t2),b:Math.max(w.t1,w.t2)}));for(let w=0;w<B.length;w++){let{connectionName:T,a:Q,b:N}=B[w];for(let F=w+1;F<B.length;F++){let{connectionName:H,a:z,b:Y}=B[F];Math.abs(Q-z)<P||Math.abs(Q-Y)<P||Math.abs(N-z)<P||Math.abs(N-Y)<P||(Q<z&&z<N&&N<Y||z<Q&&Q<Y&&Y<N)&&m.push([T,H])}}}}return m}({section:e,nodePfMap:this.nodePfMap,capacityMeshNodeMap:this.capacityMeshNodeMap,nodeAssignedPortPoints:this.nodeAssignedPortPoints,acceptablePf:this.ACCEPTABLE_PF});for(let[c,l]of a){if(s.has(c)||s.has(l))continue;let d=t.includes(c),u=t.includes(l);if(d&&u){let h=o()<0.5;s.add(h?c:l)}else d?s.add(c):u&&s.add(l)}}return this.stats.lastRipCount=s.size,s}createSectionSimpleRouteJson(e){let t=[];this.currentSectionCutPathInfo.clear(),this.currentSectionKeptPortPoints.clear(),this.currentSectionFixedRoutes=[];let n=[],o=[];for(let a of this.connectionResults){if(!a.path||a.path.length===0)continue;let[c,l]=a.nodeIds,d=e.nodeIds.has(c),u=e.nodeIds.has(l);d&&u&&(o.push(a),n.push(a.connection.name))}let i=[];for(let a of e.sectionPaths){if(!a.hasEntryFromOutside&&!a.hasExitToOutside)continue;if(a.points.length<2)continue;let c=this.connectionResults.find((l)=>l.connection.name===a.connectionName);c&&(i.push({sectionPath:a,originalResult:c}),n.includes(a.connectionName)||n.push(a.connectionName))}let r=this.determineConnectionsToRip(e,n);for(let a of o)r.has(a.connection.name)&&t.push(a.connection);for(let{sectionPath:a,originalResult:c}of i){if(!r.has(a.connectionName))continue;let l=`__cut__${a.connectionName}__${a.originalStartIndex}`;this.colorMap[l]=this.colorMap[a.connectionName];let d=a.points[0],u=a.points[a.points.length-1],h={name:l,__rootConnectionNames:[a.rootConnectionName??a.connectionName],pointsToConnect:[{x:d.x,y:d.y,layers:[`layer${d.z+1}`]},{x:u.x,y:u.y,layers:[`layer${u.z+1}`]}]};t.push(h),this.currentSectionCutPathInfo.set(l,{sectionPath:a,originalConnectionResult:c})}let s=new Set(n.filter((a)=>!r.has(a)));if(s.size>0){for(let a of e.nodeIds){let c=(this.nodeAssignedPortPoints.get(a)??[]).filter((l)=>s.has(l.connectionName));c.length>0&&this.currentSectionKeptPortPoints.set(a,c)}for(let a of o)s.has(a.connection.name)&&this.currentSectionFixedRoutes.push(a);for(let{sectionPath:a,originalResult:c}of i)if(s.has(a.connectionName)){let l={connection:{name:a.connectionName,__rootConnectionNames:a.rootConnectionName?[a.rootConnectionName]:void 0,pointsToConnect:c.connection.pointsToConnect},path:a.points.map((d)=>({prevCandidate:null,portPoint:null,currentNodeId:d.nodeId,point:{x:d.x,y:d.y},z:d.z,f:0,g:0,h:0,distanceTraveled:0})),portPoints:a.points.map((d)=>({portPointId:d.portPointId,x:d.x,y:d.y,z:d.z,connectionName:a.connectionName,rootConnectionName:a.rootConnectionName})),nodeIds:c.nodeIds,straightLineDistance:c.straightLineDistance};this.currentSectionFixedRoutes.push(l)}}return{...this.simpleRouteJson,connections:t}}prepareSectionInputNodesForCutPaths(e){let t=new Set;for(let[,n]of this.currentSectionCutPathInfo.entries()){let{sectionPath:o}=n;if(o.points.length===0)continue;let i=o.points[0].nodeId;t.add(i);let r=o.points[o.points.length-1].nodeId;t.add(r)}return e.inputNodes.map((n)=>t.has(n.capacityMeshNodeId)?{...n,_containsTarget:!0}:n)}getHyperParametersForScheduleIndex(e,t){let n=this.HYPERPARAMETER_SCHEDULE[e];return{...n,SHUFFLE_SEED:(n.SHUFFLE_SEED??0)+17*t}}createSectionSolver(e){let t=this.createSectionSimpleRouteJson(e),n=this.prepareSectionInputNodesForCutPaths(e),o=lOt(t,n);for(let[i,r]of this.currentSectionKeptPortPoints){let s=o.nodeAssignedPortPoints.get(i)??[];o.nodeAssignedPortPoints.set(i,[...s,...r])}return new hHe({simpleRouteJson:t,inputNodes:n,capacityMeshNodes:e.capacityMeshNodes,colorMap:this.colorMap,nodeMemoryPfMap:this.nodePfMap,numShuffleSeeds:this.SHUFFLE_SEEDS_PER_SECTION??2*t.connections.length*this.effort,hyperParameters:{...this.getHyperParametersForScheduleIndex(this.currentScheduleIndex,this.sectionAttempts)},precomputedInitialParams:o,fixedRoutes:this.currentSectionFixedRoutes})}reattachSection(e,t,n,o){let i=[],r=[];for(let a of t)a.connection.name.startsWith("__cut__")?r.push(a):i.push(a);let s=new Set(i.map((a)=>a.connection.name));this.connectionResults=this.connectionResults.filter((a)=>!s.has(a.connection.name)),this.connectionResults.push(...i);for(let[a,c]of this.nodeAssignedPortPoints.entries()){if(!e.nodeIds.has(a))continue;let l=c.filter((d)=>!s.has(d.connectionName));this.nodeAssignedPortPoints.set(a,l)}for(let[a,c]of this.assignedPortPoints.entries())s.has(c.connectionName)&&this.assignedPortPoints.delete(a);for(let a of r){let c=this.currentSectionCutPathInfo.get(a.connection.name);if(!c||!a.path)continue;let{sectionPath:l,originalConnectionResult:d}=c,u=d.path;if(!u)continue;let h=l.connectionName;for(let[_,f]of this.nodeAssignedPortPoints.entries()){let y=f.filter((x)=>x.connectionName!==h||!e.nodeIds.has(_));this.nodeAssignedPortPoints.set(_,y)}let A=u.slice(0,l.originalStartIndex),m=u.slice(l.originalEndIndex+1),p=[],g=A.length>0?A[A.length-1]:null;for(let _ of a.path){let f={..._,prevCandidate:g};p.push(f),g=f}if(m.length>0&&p.length>0&&(m[0]={...m[0],prevCandidate:p[p.length-1]}),d.path=[...A,...p,...m],a.portPoints)for(let _ of a.portPoints){let f={..._,connectionName:h,rootConnectionName:l.rootConnectionName??h};for(let y of e.inputNodes)for(let x of y.portPoints)if(Math.abs(x.x-_.x)<0.001&&Math.abs(x.y-_.y)<0.001&&x.z===_.z){for(let C of x.connectionNodeIds){let I=this.nodeAssignedPortPoints.get(C)??[];I.push(f),this.nodeAssignedPortPoints.set(C,I)}break}}}for(let[a,c]of n.entries())c.connectionName.startsWith("__cut__")||this.assignedPortPoints.set(a,c);for(let[a,c]of o.entries()){let l=c.filter((d)=>!d.connectionName.startsWith("__cut__"));if(l.length>0){let d=this.nodeAssignedPortPoints.get(a)??[];this.nodeAssignedPortPoints.set(a,[...d,...l])}}}_step(){if(this.activeSubSolver){if(this.activeSubSolver.step(),this.activeSubSolver.solved||this.activeSubSolver.failed){if(this.activeSubSolver.failed){if(this.currentScheduleIndex++,this.activeSubSolver.error&&this.stats.errors++,this.currentScheduleIndex<this.HYPERPARAMETER_SCHEDULE.length&&this.currentSectionCenterNodeId){let l=this.HYPERPARAMETER_SCHEDULE[this.currentScheduleIndex];this.currentSection=this.createSection({centerOfSectionCapacityNodeId:this.currentSectionCenterNodeId,expansionDegrees:l.EXPANSION_DEGREES}),this.activeSubSolver=this.createSectionSolver(this.currentSection)}else this.stats.failedOptimizations++,this.activeSubSolver=null,this.currentSection=null,this.currentSectionCenterNodeId=null,this.currentScheduleIndex=0;return}let o=this.activeSubSolver.getNodesWithPortPoints().map((l)=>({...l,portPoints:l.portPoints.map((d)=>{if(d.connectionName.startsWith("__cut__")){let u=d.connectionName.slice(7),h=u.lastIndexOf("__"),A=h>=0?u.slice(0,h):u;return{...d,connectionName:A}}return d})})),i=new Set;for(let l of o)for(let d of l.portPoints)i.add(d.connectionName);let r=this.getSectionNodesWithPortPoints(this.currentSection).map((l)=>({...l,portPoints:l.portPoints.filter((d)=>i.has(d.connectionName))})).filter((l)=>l.portPoints.length>0),s=this.computeScoreForNodes(r),a=this.computeScoreForNodes(o),c=`attempt${this.sectionAttempts}`;if(this.stats.lastSectionScore=a,a>s){let l=this.stats.currentBoardScore;this.stats.lastBoardScore=l;let d=[...this.connectionResults],u=new Map(this.assignedPortPoints),h=new Map(Array.from(this.nodeAssignedPortPoints.entries()).map(([m,p])=>[m,[...p]]));this.reattachSection(this.currentSection,this.activeSubSolver.connectionsWithResults,this.activeSubSolver.assignedPortPoints,this.activeSubSolver.nodeAssignedPortPoints),this.recomputePfForNodes(this.currentSection.nodeIds);let A=this.computeBoardScore();this.stats.sectionScores[c]=A,A>l?(this.stats.successfulOptimizations++,this.stats.currentBoardScore=A):(this.connectionResults=d,this.assignedPortPoints=u,this.nodeAssignedPortPoints=h,this.recomputePfForNodes(this.currentSection.nodeIds),this.stats.failedOptimizations++),this.activeSubSolver=null,this.currentSection=null,this.currentSectionCenterNodeId=null,this.currentScheduleIndex=0}else if(this.currentScheduleIndex++,this.currentScheduleIndex<this.HYPERPARAMETER_SCHEDULE.length&&this.currentSectionCenterNodeId){let l=this.HYPERPARAMETER_SCHEDULE[this.currentScheduleIndex];this.currentSection=this.createSection({centerOfSectionCapacityNodeId:this.currentSectionCenterNodeId,expansionDegrees:l.EXPANSION_DEGREES}),this.activeSubSolver=this.createSectionSolver(this.currentSection)}else this.stats.failedOptimizations++,this.activeSubSolver=null,this.currentSection=null,this.currentSectionCenterNodeId=null,this.currentScheduleIndex=0}return}if(this.sectionAttempts>=this.MAX_SECTION_ATTEMPTS)return void(this.solved=!0);let e=this.findHighestPfNode();if(!e)return void(this.solved=!0);this.sectionAttempts++,this.stats.sectionAttempts=this.sectionAttempts,this.stats.nodesExamined++,this.attemptsToFixNode.set(e,(this.attemptsToFixNode.get(e)??0)+1),this.currentSectionCenterNodeId=e,this.currentScheduleIndex=0;let t=this.HYPERPARAMETER_SCHEDULE[this.currentScheduleIndex];this.currentSection=this.createSection({centerOfSectionCapacityNodeId:e,expansionDegrees:t.EXPANSION_DEGREES});let n=this.getSectionNodesWithPortPoints(this.currentSection);if(this.sectionScoreBeforeOptimization=this.computeScoreForNodes(n),this.createSectionSimpleRouteJson(this.currentSection).connections.length===0)return this.currentSection=null,void(this.currentSectionCenterNodeId=null);this.activeSubSolver=this.createSectionSolver(this.currentSection)}computeProgress(){return this.sectionAttempts/this.MAX_SECTION_ATTEMPTS}visualize(){return this.solved?DQe(this):this.activeSubSolver?this.activeSubSolver.visualize():this.currentSection?function(e,t){let n={lines:[],points:[],rects:[],circles:[]};for(let o of e.inputNodes){let i=o.capacityMeshNodeId===e.centerNodeId,r=i?"rgba(0, 200, 0, 0.3)":"rgba(200, 200, 200, 0.3)";n.rects.push({center:o.center,width:0.9*o.width,height:0.9*o.height,layer:`z${o.availableZ.join(",")}`,fill:r,label:`${o.capacityMeshNodeId}${i?" (CENTER)":""}`})}for(let o of e.inputNodes)for(let i of o.portPoints)n.circles.push({center:{x:i.x,y:i.y},radius:0.05,fill:"rgba(150, 150, 150, 0.5)",layer:`z${i.z}`,label:[i.portPointId,`cd: ${i.distToCentermostPortOnZ}`,`connects: ${i.connectionNodeIds.join(",")}`].filter(Boolean).join(`
`)});for(let o of e.sectionPaths){let i=t?.[o.connectionName]??"blue";for(let r=0;r<o.points.length-1;r++){let s=o.points[r],a=o.points[r+1],c=s.z===a.z,l=s.z,d;d=c?l===0?"5 5":"10 5":"3 3 10",n.lines.push({points:[{x:s.x,y:s.y},{x:a.x,y:a.y}],strokeColor:i,strokeDash:d})}}return n}(this.currentSection,this.colorMap):DQe(this)}},hOt=class{parent={};constructor(e){for(let t of e)this.parent[t]=t}find(e){return this.parent[e]===e?e:this.parent[e]=this.find(this.parent[e])}union(e,t){let n=this.find(e),o=this.find(t);n!==o&&(this.parent[o]=n)}getGroup(e){let t=this.find(e),n=[];for(let o in this.parent)this.find(o)===t&&n.push(o);return n}},XQo=class{point;left=null;right=null;constructor(e){this.point=e}},KQo=class{root=null;constructor(e){e.length>0&&(this.root=this.buildTree(e,0))}buildTree(e,t){let n=t%2==0?"x":"y";e.sort((r,s)=>r[n]-s[n]);let o=Math.floor(e.length/2),i=new XQo(e[o]);return o>0&&(i.left=this.buildTree(e.slice(0,o),t+1)),o<e.length-1&&(i.right=this.buildTree(e.slice(o+1),t+1)),i}findNearestNeighbor(e){if(!this.root)throw Error("Tree is empty");let t=this.root.point,n=this.distance(e,t);return this.nearestNeighborSearch(this.root,e,0,t,n),t}nearestNeighborSearch(e,t,n,o,i){if(!e)return o;let r=n%2?"x":"y",s=this.distance(t,e.point);s<i&&(o=e.point,i=s);let a=t[r]-e.point[r],c=a<=0?e.left:e.right,l=a<=0?e.right:e.left;return o=this.nearestNeighborSearch(c,t,n+1,o,i),i=this.distance(t,o),Math.abs(a)<i&&(o=this.nearestNeighborSearch(l,t,n+1,o,i)),o}findKNearestNeighbors(e,t){if(!this.root)return[];let n=[];return this.kNearestNeighborSearch(this.root,e,0,n,t),n.sort((o,i)=>o.distance-i.distance).slice(0,t).map((o)=>o.point)}kNearestNeighborSearch(e,t,n,o,i){if(!e)return;let r=n%2?"x":"y",s=this.distance(t,e.point);o.push({point:e.point,distance:s});let a=t[r]-e.point[r],c=a<=0?e.left:e.right,l=a<=0?e.right:e.left;this.kNearestNeighborSearch(c,t,n+1,o,i);let d=1/0;o.length>=i&&(o.sort((u,h)=>u.distance-h.distance),d=o[i-1]?.distance||1/0),(Math.abs(a)<d||o.length<i)&&this.kNearestNeighborSearch(l,t,n+1,o,i)}distance(e,t){return Math.sqrt((e.x-t.x)**2+(e.y-t.y)**2)}},jQo=class{parent=new Map;rank=new Map;constructor(e){for(let t of e){let n=this.pointToKey(t);this.parent.set(n,n),this.rank.set(n,0)}}pointToKey(e){return`${e.x},${e.y}`}find(e){let t=this.pointToKey(e);if(!this.parent.has(t))throw Error(`Point ${t} not found in DisjointSet`);let n=t;for(;n!==this.parent.get(n);)n=this.parent.get(n);let o=t;for(;o!==n;){let i=this.parent.get(o);this.parent.set(o,n),o=i}return n}union(e,t){let n=this.find(e),o=this.find(t);if(n===o)return!1;let i=this.rank.get(n)||0,r=this.rank.get(o)||0;return i<r?this.parent.set(n,o):i>r?this.parent.set(o,n):(this.parent.set(o,n),this.rank.set(n,i+1)),!0}};function mOt(e,t={}){if(e.length<=1)return[];let n=[...e],o=new KQo(n),i=[],r=Math.min(10,e.length-1);for(let c of n){let l=o.findKNearestNeighbors(c,r+1);for(let d of l){if(c.x===d.x&&c.y===d.y)continue;let u=Math.sqrt((c.x-d.x)**2+(c.y-d.y)**2);i.push({from:c,to:d,weight:u})}}t.extraEdges&&i.push(...t.extraEdges),i.sort((c,l)=>c.weight-l.weight);let s=new jQo(n),a=[];for(let c of i)if(s.union(c.from,c.to)&&(a.push(c),a.length===n.length-1))break;return a}var qQo=(e,t)=>{let n=new Map;for(let i of e.pointsToConnect){if(!i.pointId)continue;let r=t.getNetConnectedToId(i.pointId);if(!r)continue;let s=n.get(r)??[];s.push(i),n.set(r,s)}let o=[];for(let i of n.values()){let r=i[0];if(r)for(let s of i.slice(1))o.push({from:r,to:s,weight:0})}return o},pOt=(e,t)=>({zeroWeightEdges:qQo(e,t),arePointsConnected:(n,o)=>Boolean(n.pointId&&o.pointId&&((i,r,s)=>{let a=i.getNetConnectedToId(r);return!!a&&a===i.getNetConnectedToId(s)})(t,n.pointId,o.pointId))});function uge(e){if(e.pointId)return e.pointId;let t=[...Dy(e)].sort().join("-");return`${e.x.toFixed(4)},${e.y.toFixed(4)},${t}`}function AOt(e){if(e.length===0)return[];let t=e.map((s,a)=>`conn_${a}`),n=new hOt(t),o=new Map;e.forEach((s,a)=>{let c=`conn_${a}`;s.pointsToConnect.forEach((l)=>{let d=uge(l);o.has(d)||o.set(d,[]),o.get(d).push(c)})});for(let s of o.values())if(s.length>1){let a=s[0];for(let c=1;c<s.length;c++)n.union(a,s[c])}let i=new Map;e.forEach((s,a)=>{let c=`conn_${a}`,l=n.find(c);i.has(l)||i.set(l,[]),i.get(l).push(s)});let r=[];for(let s of i.values()){if(s.length===1){r.push(s[0]);continue}let a=new Map,c=new Set,l=!1,d=[],u=new Set,h;s.forEach((m)=>{m.pointsToConnect.forEach((g)=>a.set(uge(g),g));let p=m.__rootConnectionNames;if(p&&p.length>0)for(let g of p)c.add(g);else c.add(m.name);m.isOffBoard&&(l=!0),m.externallyConnectedPointIds&&d.push(...m.externallyConnectedPointIds),m.__netConnectionName&&u.add(m.__netConnectionName),h===void 0&&m.nominalTraceWidth!==void 0&&(h=m.nominalTraceWidth)});let A={name:s.map((m)=>m.name).join("__"),pointsToConnect:Array.from(a.values()),isOffBoard:l,externallyConnectedPointIds:d.length>0?d:void 0,__netConnectionName:u.size>0?Array.from(u).join("__"):void 0,__rootConnectionNames:Array.from(c),nominalTraceWidth:h};r.push(A)}return r}var mHe=class extends Oi{constructor(e,t={},n){super(),this.ogSrj=e,this.colorMap=t;let o=new Map;for(let r of e.buses??[])if(r.traceWidth!==void 0)for(let s of r.connectionNames)o.set(s,Math.max(o.get(s)??0,r.traceWidth));let i=e.connections.map((r)=>{let s=o.get(r.name);return s===void 0?r:{...r,nominalTraceWidth:Math.max(r.nominalTraceWidth??0,s)}});this.unprocessedConnections=AOt(i),this.newConnections=[],this.initiallyConnectedMap=n}ogSrj;colorMap;getSolverName(){return"NetToPointPairsSolver"}unprocessedConnections;newConnections;initiallyConnectedMap;_step(){if(this.unprocessedConnections.length===0)return void(this.solved=!0);let e=this.unprocessedConnections.pop(),{zeroWeightEdges:t,arePointsConnected:n}=pOt(e,this.initiallyConnectedMap);if(e.pointsToConnect.length===2){let[r,s]=e.pointsToConnect;if(r&&s&&n(r,s))return;return void this.newConnections.push({...e,__rootConnectionNames:e.__rootConnectionNames??[e.name]})}let o=mOt(e.pointsToConnect,{extraEdges:t}),i=0;for(let r of o)n(r.from,r.to)||this.newConnections.push({...e,pointsToConnect:[r.from,r.to],name:`${e.name}_mst${i++}`,__rootConnectionNames:e.__rootConnectionNames??[e.name],__netConnectionName:e.__netConnectionName})}getNewSimpleRouteJson(){return{...structuredClone(this.ogSrj),connections:structuredClone(this.newConnections)}}visualize(){let e={lines:[],points:[],rects:[],circles:[],coordinateSystem:"cartesian",title:"Net To Point Pairs Visualization"};return this.unprocessedConnections.forEach((t)=>{t.pointsToConnect.forEach((r)=>{e.points.push({x:r.x,y:r.y,color:"red",label:r.pcb_port_id??r.pointId})});let n=t.pointsToConnect.length**2,o=Uke(0),i=new Set;for(let r=0;r<Math.max(n,2*t.pointsToConnect.length);r++){let s=Math.floor(o()*t.pointsToConnect.length),a=Math.floor(o()*t.pointsToConnect.length);i.has(`${s}-${a}`)||(i.add(`${s}-${a}`),e.lines.push({points:[t.pointsToConnect[s],t.pointsToConnect[a]],strokeColor:"rgba(255,0,0,0.25)",label:t.name}))}}),this.newConnections.forEach((t)=>{let n=this.colorMap?.[t.name]||"blue";t.pointsToConnect.forEach((o)=>{e.points.push({x:o.x,y:o.y,color:n,label:o.pcb_port_id??o.pointId})});for(let o=0;o<t.pointsToConnect.length-1;o++)for(let i=o+1;i<t.pointsToConnect.length;i++)e.lines.push({points:[t.pointsToConnect[o],t.pointsToConnect[i]],strokeColor:n,label:t.name})}),e}},wU=class extends mHe{constructor(e,t={},n){let o=e.connections.flatMap((c)=>c.pointsToConnect),i=new Map;for(let c of o)c.pointId&&i.set(c.pointId,c);let r=o.map((c)=>c.pointId).filter((c)=>!!c),s=new hOt(r),a=[];for(let c of e.connections)c.isOffBoard?c.pointsToConnect.length>=2&&c.pointsToConnect[0].pointId&&c.pointsToConnect[1].pointId&&s.union(c.pointsToConnect[0].pointId,c.pointsToConnect[1].pointId):a.push(c);super({...e,connections:a},t,n),this.ogSrj=e,this.colorMap=t,this.connectionPointDsu=s,this.connectionPointMap=i,this.ogSrj=e}ogSrj;colorMap;getSolverName(){return"NetToPointPairsSolver2_OffBoardConnection"}connectionPointDsu;connectionPointMap;_findBestConnectionPointsFromDisjointSets(e,t){if(!e.pointId||!t.pointId)return{pointsToConnect:[e,t]};let n=this.connectionPointDsu.getGroup(e.pointId).map((a)=>this.connectionPointMap.get(a)),o=this.connectionPointDsu.getGroup(t.pointId).map((a)=>this.connectionPointMap.get(a)),i=e,r=t,s=1/0;for(let a of n)for(let c of o){let l=Math.sqrt(Math.pow(a.x-c.x,2)+Math.pow(a.y-c.y,2));l<s&&(s=l,i=a,r=c)}return{pointsToConnect:[i,r]}}_step(){if(this.unprocessedConnections.length===0)return void(this.solved=!0);let e=this.unprocessedConnections.pop(),{zeroWeightEdges:t,arePointsConnected:n}=pOt(e,this.initiallyConnectedMap);if(e.pointsToConnect.length===2){let[r,s]=e.pointsToConnect;if(r&&s&&n(r,s))return;let a=this._findBestConnectionPointsFromDisjointSets(e.pointsToConnect[0],e.pointsToConnect[1]);return void this.newConnections.push({...e,pointsToConnect:a.pointsToConnect,__rootConnectionNames:e.__rootConnectionNames??[e.name]})}let o=mOt(e.pointsToConnect,{extraEdges:t}),i=0;for(let r of o){if(n(r.from,r.to))continue;let s=this._findBestConnectionPointsFromDisjointSets(r.from,r.to);this.newConnections.push({...e,pointsToConnect:s.pointsToConnect,name:`${e.name}_mst${i++}`,__rootConnectionNames:e.__rootConnectionNames??[e.name],__netConnectionName:e.__netConnectionName})}}},pHe=class{netMap;idToNetMap;constructor(e){this.netMap=e,this.idToNetMap={};for(let[t,n]of Object.entries(e))for(let o of n)this.idToNetMap[o]=t}addConnections(e){for(let t of e){let n=new Set;for(let i of t){let r=this.idToNetMap[i];r&&n.add(r)}let o;if(n.size===0)o=`connectivity_net${Object.keys(this.netMap).length}`,this.netMap[o]=[];else if(n.size===1)o=n.values().next().value??`connectivity_net${Object.keys(this.netMap).length}`;else{o=n.values().next().value??`connectivity_net${Object.keys(this.netMap).length}`;for(let i of n)if(i!==o){let r=this.netMap[o],s=this.netMap[i];if(r&&s){r.push(...s),this.netMap[i]=r;for(let a of r)this.idToNetMap[a]=o}}}for(let i of t){let r=this.netMap[o];r&&!r.includes(i)&&r.push(i),this.idToNetMap[i]=o}}}getIdsConnectedToNet(e){return this.netMap[e]||[]}getNetConnectedToId(e){return this.idToNetMap[e]}areIdsConnected(e,t){if(e===t)return!0;let n=this.getNetConnectedToId(e);if(!n)return!1;let o=this.getNetConnectedToId(t);return!!o&&(n===o||o===e||o===e)}areAllIdsConnected(e){if(e.length===0)return!0;let t=this.getNetConnectedToId(e[0]);if(!t)return!1;for(let n of e){let o=this.getNetConnectedToId(n);if(o===void 0)return!1;if(o!==t)return!1}return!0}};function JQo(e,t={}){let n=[],o=[],i=t.color??"gray",r=t.label,s=Wk[e.footprint]??Wk["0603"],a=e.end.x-e.start.x,c=e.end.y-e.start.y,l=Math.abs(a)>Math.abs(c),d=l?s.padLength:s.padWidth,u=l?s.padWidth:s.padLength;return n.push({center:e.start,width:d,height:u,fill:Cr(i,0.5),stroke:"rgba(0, 0, 0, 0.5)",layer:"jumper",label:r?`${r} (start)`:void 0}),n.push({center:e.end,width:d,height:u,fill:Cr(i,0.5),stroke:"rgba(0, 0, 0, 0.5)",layer:"jumper",label:r?`${r} (end)`:void 0}),o.push({points:[e.start,e.end],strokeColor:"rgba(100, 100, 100, 0.8)",strokeWidth:0.3*s.padWidth,layer:"jumper-body"}),{rects:n,lines:o}}function xS(e,t={}){let n={rects:[],lines:[]};for(let o of e){let{rects:i,lines:r}=JQo(o,t);n.rects.push(...i),n.lines.push(...r)}return n}var gAe=1e5,OZ=0.001,JEt=class extends Oi{getSolverName(){return"SingleHighDensityRouteStitchSolver"}mergedHdRoute;remainingHdRoutes;start;end;colorMap;constructor(e){if(super(),this.remainingHdRoutes=[...e.hdRoutes],this.colorMap=e.colorMap??{},e.hdRoutes.length===0){this.start=e.start,this.end=e.end;let a=[{x:e.start.x,y:e.start.y,z:e.start.z}],c=[];return e.start.z!==e.end.z&&(a.push({x:e.start.x,y:e.start.y,z:e.end.z}),c.push({x:e.start.x,y:e.start.y})),a.push({x:e.end.x,y:e.end.y,z:e.end.z}),this.mergedHdRoute={connectionName:e.connectionName,rootConnectionName:e.hdRoutes[0]?.rootConnectionName,route:a,vias:c,jumpers:[],viaDiameter:e.defaultViaDiameter??0.3,traceThickness:e.defaultTraceThickness??0.15},void(this.solved=!0)}let t=1/0,n=e.hdRoutes[0],o="start-to-end";for(let a of e.hdRoutes){let c=a.route[0],l=a.route[a.route.length-1],d=bn(e.start,c),u=bn(e.start,l),h=bn(e.end,c),A=bn(e.end,l),m=Math.min(d,u,h,A);m<t&&(t=m,n=a,o=Math.min(h,A)<Math.min(d,u)?"end-to-start":"start-to-end")}o==="start-to-end"?(this.start=e.start,this.end=e.end):(this.start=e.end,this.end=e.start);let i=n.route[0],r=n.route[n.route.length-1],s=bn(this.start,i)<=bn(this.start,r)?i:r;this.mergedHdRoute={connectionName:e.connectionName,rootConnectionName:n.rootConnectionName,route:[{x:this.start.x,y:this.start.y,z:s.z}],vias:[],jumpers:[],viaDiameter:n.viaDiameter,traceThickness:n.traceThickness}}getDisjointedRoute(){for(let e of this.remainingHdRoutes)if([e.route[0],e.route[e.route.length-1]].some((t)=>!this.remainingHdRoutes.some((n)=>{if(n===e)return!1;return[n.route[0],n.route[n.route.length-1]].some((o)=>o.z===t.z&&bn(t,o)<0.001)})))return{firstRoute:e};return{firstRoute:this.remainingHdRoutes[0]}}_step(){if(this.remainingHdRoutes.length===0){let s=this.mergedHdRoute.route[this.mergedHdRoute.route.length-1];return this.mergedHdRoute.route.push({x:this.end.x,y:this.end.y,z:s.z}),void(this.solved=!0)}let e=this.mergedHdRoute.route[this.mergedHdRoute.route.length-1],t=-1,n="first",o=1/0;for(let s=0;s<this.remainingHdRoutes.length;s++){let a=this.remainingHdRoutes[s],c=a.route[0],l=a.route[a.route.length-1],d=bn(e,c),u=bn(e,l),h=1/0;h=e.z===c.z?d<OZ?d:gAe+d:d<OZ?1000+d:gAe+d,h<o&&(o=h,t=s,n="first");let A=1/0;A=e.z===l.z?u<OZ?u:gAe+u:u<OZ?1000+u:gAe+u,A<o&&(o=A,t=s,n="last")}if(t===-1)return void(this.remainingHdRoutes=[]);let i=this.remainingHdRoutes[t],r;this.remainingHdRoutes.splice(t,1),r=n==="first"?i.route:[...i.route].reverse(),bn(e,r[0])<OZ&&e.z===r[0].z?this.mergedHdRoute.route.push(...r.slice(1)):this.mergedHdRoute.route.push(...r),this.mergedHdRoute.vias.push(...i.vias),i.jumpers&&this.mergedHdRoute.jumpers.push(...i.jumpers)}visualize(){let e={points:[],lines:[],circles:[],rects:[],title:"Single High Density Route Stitch Solver"};if(e.points?.push({x:this.start.x,y:this.start.y,color:"green",label:"Start"},{x:this.end.x,y:this.end.y,color:"red",label:"End"}),this.mergedHdRoute&&this.mergedHdRoute.route.length>1){e.lines?.push({points:this.mergedHdRoute.route.map((t)=>({x:t.x,y:t.y})),strokeColor:"green"});for(let t of this.mergedHdRoute.route)e.points?.push({x:t.x,y:t.y,color:"green"});for(let t of this.mergedHdRoute.vias)e.circles?.push({center:{x:t.x,y:t.y},radius:this.mergedHdRoute.viaDiameter/2,fill:"green"});if(this.mergedHdRoute.jumpers&&this.mergedHdRoute.jumpers.length>0){let t=xS(this.mergedHdRoute.jumpers,{color:"green",label:this.mergedHdRoute.connectionName});e.rects.push(...t.rects??[]),e.lines.push(...t.lines??[])}}for(let[t,n]of this.remainingHdRoutes.entries()){let o=this.colorMap[n.connectionName]??"gray";e.lines?.push({points:n.route.map((i)=>({x:i.x,y:i.y})),strokeColor:o});for(let i=0;i<n.route.length;i++){let r=n.route[i];e.points?.push({x:r.x+(t%2-0.5)/500+(i%8-4)/1000,y:r.y+(t%2-0.5)/500+(i%8-4)/1000,color:o,label:`Route ${n.connectionName} ${r===n.route[0]?"First":r===n.route[n.route.length-1]?"Last":""}`})}for(let i of n.vias)e.circles?.push({center:{x:i.x,y:i.y},radius:n.viaDiameter/2,fill:o});if(n.jumpers&&n.jumpers.length>0){let i=xS(n.jumpers,{color:o,label:n.connectionName});e.rects.push(...i.rects??[]),e.lines.push(...i.lines??[])}}return e}},hV=(e)=>`${Math.round(100*e.x)},${Math.round(100*e.y)},${Math.round(100*e.z)}`,$Qo=(e)=>({startHash:hV(e.route[0]),endHash:hV(e.route[e.route.length-1])}),AHe=class extends Oi{getSolverName(){return"MultipleHighDensityRouteStitchSolver"}unsolvedRoutes;activeSolver=null;mergedHdRoutes=[];colorMap={};defaultTraceThickness;defaultViaDiameter;getClosestEndpointHash(e,t){let n=null,o=1/0;for(let i of e){let r=[i.route[0],i.route[i.route.length-1]];for(let s of r){let a=bn(t,s);a<o&&(o=a,n=hV(s))}}return n}selectRoutesAlongEndpointPath(e,t,n){if(e.length<=2)return e;let o=this.getClosestEndpointHash(e,t),i=this.getClosestEndpointHash(e,n);if(!o||!i||o===i)return e;let r=new Map;for(let u=0;u<e.length;u++){let{startHash:h,endHash:A}=$Qo(e[u]),m=r.get(h)??[];m.push({nextHash:A,routeIndex:u}),r.set(h,m);let p=r.get(A)??[];p.push({nextHash:h,routeIndex:u}),r.set(A,p)}let s=[o],a=new Set([o]),c=new Map;for(;s.length>0;){let u=s.shift();if(u===i)break;for(let h of r.get(u)??[])a.has(h.nextHash)||(a.add(h.nextHash),c.set(h.nextHash,{prevHash:u,routeIndex:h.routeIndex}),s.push(h.nextHash))}if(!a.has(i))return e;let l=new Set,d=i;for(;d!==o;){let u=c.get(d);if(!u)return e;l.add(u.routeIndex),d=u.prevHash}if(l.size===0)return e;return e.filter((u,h)=>l.has(h))}constructor(e){super(),this.colorMap=e.colorMap??{};let t=e.hdRoutes[0];this.defaultTraceThickness=t?.traceThickness??0.15,this.defaultViaDiameter=t?.viaDiameter??e.defaultViaDiameter??0.3;let n=new pHe({}),o=[],i=new Map;for(let a=0;a<e.hdRoutes.length;a++){let c=e.hdRoutes[a],l=c.route[0],d=c.route[c.route.length-1];o.push([`route_island_${a}`,`${c.connectionName}:${hV(l)}`,`${c.connectionName}:${hV(d)}`])}n.addConnections(o);for(let a of o)for(let c of a.slice(1))i.set(c,(i.get(c)??0)+1);this.unsolvedRoutes=[];let r=Array.from(new Set(Object.values(n.idToNetMap)));for(let a of r){let c=n.getIdsConnectedToNet(a),l=e.hdRoutes.filter((g,_)=>c.includes(`route_island_${_}`));if(l.length===0)continue;let d=e.connections.find((g)=>g.name===l[0].connectionName),u=l.flatMap((g)=>[g.route[0],g.route[g.route.length-1]]),h=[];for(let g of u){let _=`${l[0].connectionName}:${hV(g)}`;i.get(_)===1&&h.push(g)}if(h.length===0){console.log("no possible endpoints, can't stitch");continue}let A,m;h.length!==2?(A={...d.pointsToConnect[0],z:Wi(k_(d.pointsToConnect[0]),e.layerCount)},m={...d.pointsToConnect[1],z:Wi(k_(d.pointsToConnect[1]),e.layerCount)}):(A=h[0],m=h[1],bn(A,d.pointsToConnect[1])<bn(m,d.pointsToConnect[0])&&([A,m]=[m,A]));let p=this.selectRoutesAlongEndpointPath(l,A,m);this.unsolvedRoutes.push({connectionName:l[0].connectionName,hdRoutes:p,start:A,end:m})}let s=new Map;for(let a of this.unsolvedRoutes){let c=s.get(a.connectionName);c?c.push(a):s.set(a.connectionName,[a])}this.unsolvedRoutes=Array.from(s.entries()).flatMap(([a,c])=>{if(!c.some((A)=>A.hdRoutes.some((m)=>m.route.length<2)))return c;let l=e.connections.find((A)=>A.name===a);if(!l)return c;let d={...l.pointsToConnect[0],z:Wi(k_(l.pointsToConnect[0]),e.layerCount)},u={...l.pointsToConnect[1],z:Wi(k_(l.pointsToConnect[1]),e.layerCount)},h=c.flatMap((A)=>A.hdRoutes);return[{connectionName:a,hdRoutes:this.selectRoutesAlongEndpointPath(h,d,u),start:d,end:u}]}),this.MAX_ITERATIONS=1e5}_step(){if(this.activeSolver)return this.activeSolver.step(),void(this.activeSolver.solved?(this.activeSolver instanceof JEt&&this.mergedHdRoutes.push(this.activeSolver.mergedHdRoute),this.activeSolver=null):this.activeSolver.failed&&(this.failed=!0,this.error=this.activeSolver.error));let e=this.unsolvedRoutes.pop();e?this.activeSolver=new JEt({connectionName:e.connectionName,hdRoutes:e.hdRoutes,start:e.start,end:e.end,colorMap:this.colorMap,defaultTraceThickness:this.defaultTraceThickness,defaultViaDiameter:this.defaultViaDiameter}):this.solved=!0}visualize(){let e={points:[],lines:[],circles:[],rects:[],title:"Multiple High Density Route Stitch Solver"};if(this.activeSolver){let t=this.activeSolver.visualize();t.points?.length&&e.points?.push(...t.points),t.lines?.length&&e.lines?.push(...t.lines),t.circles?.length&&e.circles?.push(...t.circles),t.rects?.length&&(e.rects||(e.rects=[]),e.rects.push(...t.rects))}for(let[t,n]of this.mergedHdRoutes.entries()){let o=this.colorMap[n.connectionName]??`hsl(120, 100%, ${40+10*t%40}%)`;for(let i=0;i<n.route.length-1;i++){let r=n.route[i],s=n.route[i+1],a=r.z!==0?Cr(o,0.5):o;e.lines?.push({points:[{x:r.x,y:r.y},{x:s.x,y:s.y}],strokeColor:a,strokeWidth:n.traceThickness})}for(let i of n.route){let r=i.z!==0?Cr(o,0.5):o;e.points?.push({x:i.x,y:i.y,color:r})}for(let i of n.vias)e.circles?.push({center:{x:i.x,y:i.y},radius:n.viaDiameter/2,fill:o});if(n.jumpers&&n.jumpers.length>0){let i=xS(n.jumpers,{color:o,label:n.connectionName});e.rects.push(...i.rects??[]),e.lines.push(...i.lines??[])}}for(let t of this.unsolvedRoutes){let n=this.colorMap[t.connectionName]??"gray";e.points?.push({x:t.start.x,y:t.start.y,color:n,label:`${t.connectionName} Start (z=${t.start.z})`},{x:t.end.x,y:t.end.y,color:n,label:`${t.connectionName} End (z=${t.end.z})`}),e.lines?.push({points:[{x:t.start.x,y:t.start.y},{x:t.end.x,y:t.end.y}],strokeColor:n,strokeDash:"2 2"});for(let o of t.hdRoutes){o.route.length>1&&e.lines?.push({points:o.route.map((i)=>({x:i.x,y:i.y})),strokeColor:Cr(n,0.5),strokeDash:"10 5"});for(let i of o.vias)e.circles?.push({center:{x:i.x,y:i.y},radius:o.viaDiameter/2,fill:n});if(o.jumpers&&o.jumpers.length>0){let i=xS(o.jumpers,{color:n,label:o.connectionName});e.rects.push(...i.rects??[]),e.lines.push(...i.lines??[])}}}return e}},xL=class{MAX_ITERATIONS=1000;solved=!1;failed=!1;iterations=0;progress=0;error=null;activeSubSolver;failedSubSolvers;timeToSolve;stats={};pendingEffects;cacheHit;cacheKey;cacheToSolveSpaceTransform;getSolverName(){return this.constructor.name}step(){if(!this.solved&&!this.failed){this.iterations++;try{this._step()}catch(e){throw this.error=`${this.getSolverName()} error: ${e}`,console.error(this.error),this.failed=!0,e}!this.solved&&this.iterations>this.MAX_ITERATIONS&&this.tryFinalAcceptance(),!this.solved&&this.iterations>this.MAX_ITERATIONS&&(this.error=`${this.getSolverName()} ran out of iterations (MAX_ITERATIONS=${this.MAX_ITERATIONS})`,this.failed=!0),"computeProgress"in this&&(this.progress=this.computeProgress())}}_step(){}getConstructorParams(){throw Error("getConstructorParams not implemented")}solve(){let e=Date.now();for(;!this.solved&&!this.failed;)this.step();let t=Date.now();this.timeToSolve=t-e}visualize(){return{lines:[],points:[],rects:[],circles:[]}}tryFinalAcceptance(){}preview(){return{lines:[],points:[],rects:[],circles:[]}}},$Et=class{tree;constructor(e=9){this.tree=new lL(e)}insert(e,t,n,o,i){this.tree.insert({minX:t,minY:n,maxX:o,maxY:i,data:e})}bulkLoad(e){let t=e.map(({item:n,minX:o,minY:i,maxX:r,maxY:s})=>({minX:o,minY:i,maxX:r,maxY:s,data:n}));this.tree.load(t)}search(e,t,n,o){return this.tree.search({minX:e,minY:t,maxX:n,maxY:o}).map((i)=>i.data)}clear(){this.tree.clear()}},_Ot=class{index;items=[];currentIndex=0;capacity;constructor(e){this.capacity=Math.max(1,e),this.index=new Vm(this.capacity)}insert(e,t,n,o,i){if(this.currentIndex>=this.index.numItems)throw Error("Exceeded initial capacity");this.items[this.currentIndex]=e,this.index.add(t,n,o,i),this.currentIndex++}finish(){this.index.finish()}search(e,t,n,o){return this.index.search(e,t,n,o).map((i)=>this.items[i]||null).filter(Boolean)}clear(){this.items=[],this.currentIndex=0,this.index=new Vm(this.capacity)}},_He=class{idx;storage=[];constructor(e="native",t=[]){e==="flatbush"?t.length===0?(this.idx=new $Et,e="rbush"):this.idx=new _Ot(t.length):this.idx=e==="rbush"?new $Et:new class{shi=new ZQo(t);insert(n){}search(n,o,i,r){let s=(n+i)/2,a=(o+r)/2,c=i-n,l=r-o;return this.shi.getNodesInArea(s,a,c,l)}clear(){}},t.forEach((n)=>this.insert(n)),e==="flatbush"&&t.length>0&&this.idx.finish?.()}insert(e){this.storage.push(e),this.idx.insert(e,e.center.x-e.width/2,e.center.y-e.height/2,e.center.x+e.width/2,e.center.y+e.height/2)}search(e){return this.idx.search(e.minX,e.minY,e.maxX,e.maxY)}searchArea(e,t,n,o){return this.search({minX:e-n/2,minY:t-o/2,maxX:e+n/2,maxY:t+o/2})}},ZQo=class{constructor(e){this.obstacles=e,this.buckets=new Map;for(let t=0;t<e.length;t++){let n=e[t],o=n.center.x-n.width/2,i=n.center.y-n.height/2,r=n.center.x+n.width/2,s=n.center.y+n.height/2;for(let a=o;a<=r;a+=this.CELL_SIZE)for(let c=i;c<=s;c+=this.CELL_SIZE){let l=this.getBucketKey(a,c),d=this.buckets.get(l);d?d.push([n,t]):this.buckets.set(l,[[n,t]])}}}obstacles;buckets;CELL_SIZE=0.4;getBucketKey(e,t){return`${Math.floor(e/this.CELL_SIZE)}x${Math.floor(t/this.CELL_SIZE)}`}getNodesInArea(e,t,n,o){let i=[],r=new Set,s=t-o/2,a=e+n/2,c=t+o/2;for(let l=e-n/2;l<=a;l+=this.CELL_SIZE)for(let d=s;d<=c;d+=this.CELL_SIZE){let u=this.getBucketKey(l,d),h=this.buckets.get(u)||[];for(let A of h)r.has(A[1])||(r.add(A[1]),i.push(A[0]))}return i}},fAe=(e)=>({minX:Math.min(e[0].x,e[1].x),maxX:Math.max(e[0].x,e[1].x),minY:Math.min(e[0].y,e[1].y),maxY:Math.max(e[0].y,e[1].y)});function b_e(e,t){let n=e.x-t.x,o=e.y-t.y;return n*n+o*o}function Bk(e,t,n){let o=b_e(t,n);if(o===0)return b_e(e,t);let i=((e.x-t.x)*(n.x-t.x)+(e.y-t.y)*(n.y-t.y))/o;return i=Math.max(0,Math.min(1,i)),b_e(e,{x:t.x+i*(n.x-t.x),y:t.y+i*(n.y-t.y)})}function ZEt(e,t,n,o){if(fu(e,t,n,o))return 0;let i={x:e.x,y:e.y},r={x:t.x,y:t.y},s={x:n.x,y:n.y},a={x:o.x,y:o.y};return Math.min(Bk(i,s,a),Bk(r,s,a),Bk(s,i,r),Bk(a,i,r))}var wk=class{segmentBuckets;viaBuckets;CELL_SIZE;maximumCopperRadius=0;constructor(e,t=1){this.segmentBuckets=new Map,this.viaBuckets=new Map,this.CELL_SIZE=t;for(let n of e)if(n&&n.connectionName){if(this.maximumCopperRadius=Math.max(this.maximumCopperRadius,n.traceThickness/2,n.viaDiameter/2),n.route&&n.route.length>=2)for(let o=0;o<n.route.length-1;o++){let i=n.route[o],r=n.route[o+1];if(i.x===r.x&&i.y===r.y)continue;if(i.insideJumperPad&&r.insideJumperPad)continue;let s=[i,r],a=fAe(s),c={segmentId:`${n.connectionName}-seg-${o}`,segment:s,parentRoute:n},l=Math.floor(a.minX/this.CELL_SIZE),d=Math.floor((a.maxX+0.000000001)/this.CELL_SIZE),u=Math.floor(a.minY/this.CELL_SIZE),h=Math.floor((a.maxY+0.000000001)/this.CELL_SIZE);for(let A=l;A<=d;A++)for(let m=u;m<=h;m++){let p=`${A}x${m}`,g=this.segmentBuckets.get(p);g||(g=[],this.segmentBuckets.set(p,g)),g.push(c)}}if(n.vias&&n.vias.length>0)for(let o=0;o<n.vias.length;o++){let i=n.vias[o];if(i==null)continue;let r={viaId:`${n.connectionName}-via-${o}`,x:i.x,y:i.y,parentRoute:n},s=`${Math.floor(i.x/this.CELL_SIZE)}x${Math.floor(i.y/this.CELL_SIZE)}`,a=this.viaBuckets.get(s);a||(a=[],this.viaBuckets.set(s,a)),a.push(r)}}else console.warn("Skipping route with missing data:",n)}hasConflictingRoutesForSegment(e,t,n,o,i){let r=fAe([e,t]),s=n+this.maximumCopperRadius,a=Math.floor((r.minX-s)/this.CELL_SIZE),c=Math.floor((r.maxX+s+0.000000001)/this.CELL_SIZE),l=Math.floor((r.minY-s)/this.CELL_SIZE),d=Math.floor((r.maxY+s+0.000000001)/this.CELL_SIZE),u=new Set,h=new Set;for(let A=a;A<=c;A++)for(let m=l;m<=d;m++){let p=`${A}x${m}`,g=this.segmentBuckets.get(p);if(g)for(let f of g){let y=f.parentRoute,[x,C]=f.segment;if(e.z!==t.z||x.z!==C.z||x.z!==e.z||o(y)||u.has(f.segmentId))continue;u.add(f.segmentId);let I=n+y.traceThickness/2,b=ZEt(e,t,x,C);if(b<I*I&&(!i||Math.sqrt(b)<i(y)))return!0}let _=this.viaBuckets.get(p);if(_)for(let f of _){let y=f.parentRoute;if(o(y)||h.has(f.viaId))continue;h.add(f.viaId);let x=n+y.viaDiameter/2,C=Bk(f,e,t);if(C<x*x&&(!i||Math.sqrt(C)<i(y)))return!0}}return!1}getConflictingRoutesForSegment(e,t,n,o){let i=fAe([e,t]),r=n+this.maximumCopperRadius,s=i.minX-r,a=i.minY-r,c=i.maxX+r,l=i.maxY+r,d=Math.floor(s/this.CELL_SIZE),u=Math.floor((c+0.000000001)/this.CELL_SIZE),h=Math.floor(a/this.CELL_SIZE),A=Math.floor((l+0.000000001)/this.CELL_SIZE),m=new Map,p=new Set,g=new Set,_={x:e.x,y:e.y},f={x:t.x,y:t.y};for(let x=d;x<=u;x++)for(let C=h;C<=A;C++){let I=`${x}x${C}`,b=this.segmentBuckets.get(I);if(b)for(let E of b){if(p.has(E.segmentId))continue;p.add(E.segmentId);let B=E.parentRoute,[w,T]=E.segment;if(e.z!==t.z||w.z!==T.z||w.z!==e.z)continue;if(o?.(B))continue;let Q=n+B.traceThickness/2,N=Q*Q,F=ZEt(e,t,w,T);if(F<N){let H=B.connectionName,z=m.get(H);(!z||F<z.minDistSq)&&m.set(H,{route:B,minDistSq:F})}}let P=this.viaBuckets.get(I);if(P)for(let E of P){if(g.has(E.viaId))continue;g.add(E.viaId);let B=E.parentRoute;if(o?.(B))continue;let w={x:E.x,y:E.y},T=n+B.viaDiameter/2,Q=T*T,N=Bk(w,_,f);if(N<Q){let F=B.connectionName,H=m.get(F);(!H||N<H.minDistSq)&&m.set(F,{route:B,minDistSq:N})}}}let y=[];for(let x of m.values())y.push({conflictingRoute:x.route,distance:Math.sqrt(x.minDistSq)});return y}removeRoute(e){for(let[t,n]of this.segmentBuckets){let o=n.filter((i)=>i.parentRoute.connectionName!==e);o.length===0?this.segmentBuckets.delete(t):o.length!==n.length&&this.segmentBuckets.set(t,o)}for(let[t,n]of this.viaBuckets){let o=n.filter((i)=>i.parentRoute.connectionName!==e);o.length===0?this.viaBuckets.delete(t):o.length!==n.length&&this.viaBuckets.set(t,o)}}addRoute(e){if(!e||!e.connectionName)return void console.warn("Skipping route with missing data:",e);if(this.maximumCopperRadius=Math.max(this.maximumCopperRadius,e.traceThickness/2,e.viaDiameter/2),e.route&&e.route.length>=2)for(let t=0;t<e.route.length-1;t++){let n=e.route[t],o=e.route[t+1];if(n.x===o.x&&n.y===o.y)continue;if(n.insideJumperPad&&o.insideJumperPad)continue;let i=[n,o],r=fAe(i),s={segmentId:`${e.connectionName}-seg-${t}`,segment:i,parentRoute:e},a=Math.floor(r.minX/this.CELL_SIZE),c=Math.floor((r.maxX+0.000000001)/this.CELL_SIZE),l=Math.floor(r.minY/this.CELL_SIZE),d=Math.floor((r.maxY+0.000000001)/this.CELL_SIZE);for(let u=a;u<=c;u++)for(let h=l;h<=d;h++){let A=`${u}x${h}`,m=this.segmentBuckets.get(A);m||(m=[],this.segmentBuckets.set(A,m)),m.push(s)}}if(e.vias&&e.vias.length>0)for(let t=0;t<e.vias.length;t++){let n=e.vias[t];if(n==null)continue;let o={viaId:`${e.connectionName}-via-${t}`,x:n.x,y:n.y,parentRoute:e},i=`${Math.floor(n.x/this.CELL_SIZE)}x${Math.floor(n.y/this.CELL_SIZE)}`,r=this.viaBuckets.get(i);r||(r=[],this.viaBuckets.set(i,r)),r.push(o)}}getConflictingRoutesNearPoint(e,t,n){let o=t+this.maximumCopperRadius,i=e.x-o,r=e.y-o,s=e.x+o,a=e.y+o,c=Math.floor(i/this.CELL_SIZE),l=Math.floor((s+0.000000001)/this.CELL_SIZE),d=Math.floor(r/this.CELL_SIZE),u=Math.floor((a+0.000000001)/this.CELL_SIZE),h=new Map,A=new Set,m=new Set;for(let g=c;g<=l;g++)for(let _=d;_<=u;_++){let f=`${g}x${_}`,y=this.segmentBuckets.get(f);if(y)for(let C of y){if(A.has(C.segmentId))continue;A.add(C.segmentId);let I=C.segment[0],b=C.segment[1];if(I.z!==b.z||I.z!==e.z)continue;let P=C.parentRoute,E={x:C.segment[0].x,y:C.segment[0].y},B={x:C.segment[1].x,y:C.segment[1].y},w=t+P.traceThickness/2,T=w*w,Q=Bk(e,E,B);if(Q<T){let N=P.connectionName,F=h.get(N);(!F||Q<F.minDistSq)&&h.set(N,{route:P,minDistSq:Q})}}let x=this.viaBuckets.get(f);if(x)for(let C of x){if(m.has(C.viaId))continue;m.add(C.viaId);let I=C.parentRoute,b={x:C.x,y:C.y},P=t+I.viaDiameter/2,E=P*P,B=b_e(e,b);if(B<E){let w=I.connectionName,T=h.get(w);(!T||B<T.minDistSq)&&h.set(w,{route:I,minDistSq:B})}}}let p=[];for(let g of h.values())p.push({conflictingRoute:g.route,distance:Math.sqrt(g.minDistSq)});return p}},Ree=(e,t)=>{let n=[],o=Math.abs(t.x-e.x),i=Math.abs(t.y-e.y),r=t.x>e.x?1:-1,s=t.y>e.y?1:-1,a={x:t.x-r*Math.abs(t.y-e.y),y:e.y};(a.x-e.x)*r>=0&&(a.x-t.x)*r<=0&&n.push([e,a,t]);let c={x:e.x,y:t.y-s*Math.abs(t.x-e.x)};(c.y-e.y)*s>=0&&(c.y-t.y)*s<=0&&n.push([e,c,t]);let l=Math.min(o,i),d={x:e.x+r*l,y:e.y+s*l};return(d.x-e.x)*r>=0&&(d.x-t.x)*r<=0&&(d.y-e.y)*s>=0&&(d.y-t.y)*s<=0&&n.push([e,d,t]),n},e3t=(e,t)=>{let n=Math.max(Math.abs(e),Math.abs(t));if(n===0||n===Number.POSITIVE_INFINITY)return n;let o=e/n,i=t/n;return n*Math.sqrt(o*o+i*i)};function gOt(e,t,n,o){if(fu(e,t,n,o))return 0;let i=yAe(e,n,o),r=yAe(t,n,o),s=yAe(n,e,t),a=yAe(o,e,t);return Math.min(i,r,s,a)}function yAe(e,t,n){let o={x:n.x-t.x,y:n.y-t.y},i=t3t({x:e.x-t.x,y:e.y-t.y},o);if(i<=0)return uNe(e,t);let r=t3t(o,o);if(r<=i)return uNe(e,n);let s=i/r;return uNe(e,{x:t.x+s*o.x,y:t.y+s*o.y})}function t3t(e,t){return e.x*t.x+e.y*t.y}function uNe(e,t){let n=t.x-e.x,o=t.y-e.y;return Math.sqrt(n*n+o*o)}var hge=0.000001,NQe=(e,t,n)=>Da(e,t,n)<=hge,xAe=(e,t)=>Math.abs(e.x-t.x)<=hge&&Math.abs(e.y-t.y)<=hge,n3t=(e,t)=>{if(!t||t.length<3)return!1;for(let o=0;o<t.length;o++){let i=t[o],r=t[(o+1)%t.length];if(NQe(e,i,r))return!0}let n=!1;for(let o=0,i=t.length-1;o<t.length;i=o++){let r=t[o],s=t[i];r.y>e.y!=s.y>e.y&&e.x<(s.x-r.x)*(e.y-r.y)/(s.y-r.y)+r.x&&(n=!n)}return n},mge=({start:e,end:t,polygon:n,margin:o=0.2})=>{if(!n||n.length<3)return!1;let i=n3t(e,n),r=n3t(t,n);if(!i||!r)return!0;for(let s=0;s<n.length;s++){let a=n[s],c=n[(s+1)%n.length],l=NQe(e,a,c),d=NQe(t,a,c);if(l&&d)continue;if(!fu(e,t,a,c)){if(!l&&!d){if(gOt(e,t,a,c)<o-hge)return!0}continue}let u=T6(e,t,a,c);if((!u||!(l&&xAe(u,e)||d&&xAe(u,t)))&&(!u||!xAe(u,e)&&!xAe(u,t)))return!0}return!1},fee=(e)=>{let t=[],n=e.route;if(n.length===0)return[];let o={startIndex:0,endIndex:-1,z:n[0].z,points:[n[0]]};for(let i=1;i<n.length;i++)n[i].z===o.z?o.points.push(n[i]):(o.endIndex=i-1,t.push(o),o={startIndex:i,endIndex:-1,z:n[i].z,points:[n[i]]});return o.endIndex=n.length-1,t.push(o),t},o3t=({endpointX:e,endpointY:t,targetZ:n,endpointPcbPortId:o,terminalLayerIndicesByPcbPortId:i,obstacleSHI:r,route:s,connMap:a})=>{let c=o?i?.get(o):void 0;if(c&&!c.has(n))return!1;let l=[s.connectionName,s.rootConnectionName].filter((u)=>u!==void 0),d=r.searchArea(e,t,2,2).filter((u)=>{if(!l.some((g)=>u.connectedTo.some((_)=>_===g||a.areIdsConnected(g,_))))return!1;let h=u.width/2+0.05,A=u.height/2+0.05,m=Math.abs(e-u.center.x)<=h,p=Math.abs(t-u.center.y)<=A;return m&&p});return d.length>0&&d.some((u)=>u.__zLayers?.includes(n))},mV=({currentSection:e,targetZ:t,route:n,hdRouteSHI:o,obstacleSHI:i,connMap:r,defaultTraceThickness:s,obstacleMargin:a,traceMargin:c,shouldCheckStaticGeometryForSegment:l})=>{let d=n.traceThickness??s,u=c??0,h=[n.connectionName,n.rootConnectionName].filter((A)=>A!==void 0);for(let A=0;A<e.points.length-1;A++){let m={...e.points[A],z:t},p={...e.points[A+1],z:t},g=o.getConflictingRoutesForSegment(m,p,d/2+u);for(let{conflictingRoute:x,distance:C}of g){let I=[x.connectionName,x.rootConnectionName].filter((P)=>P!==void 0);if(h.some((P)=>I.some((E)=>E===P||r.areIdsConnected(E,P))))continue;let b=x.traceThickness??s;if(C<d/2+(u>0?Math.max(b/2,x.viaDiameter/2):b/2)+u)return!1}if(l?.(m,p)===!1)continue;let _={centerX:(m.x+p.x)/2,centerY:(m.y+p.y)/2,width:Math.abs(m.x-p.x),height:Math.abs(m.y-p.y)},f=d/2+a,y=i.searchArea(_.centerX,_.centerY,_.width+2*f,_.height+2*f);for(let x of y){if(h.some((C)=>x.connectedTo.some((I)=>I===C||r.areIdsConnected(I,C))))continue;if(x.__zLayers?.includes(t)){if(Math.abs(m.x-x.center.x)<0.01&&Math.abs(m.y-x.center.y)<0.01||Math.abs(p.x-x.center.x)<0.01&&Math.abs(p.y-x.center.y)<0.01)continue}if(HE(m,p,x)<f)return!1}}return!0},hNe=({targetZ:e,route:t,hdRouteSHI:n,obstacleSHI:o,connMap:i,defaultTraceThickness:r,obstacleMargin:s,traceMargin:a,useNumericSegmentKeys:c})=>{let l=t.traceThickness??r,d=l/2+a,u=l/2+s,{connectionName:h,rootConnectionName:A}=t,m=new Map,p=new WeakMap,g=new WeakMap,_=c?new Map:void 0,f=0,y=(P)=>{let E=_.get(P.x);E||(E=new Map,_.set(P.x,E));let B=E.get(P.y);return B===void 0&&(B=f++,E.set(P.y,B)),B},x=(P,E)=>{if(c){let B=y(P),w=y(E),T=Math.max(B,w);return T*(T+1)/2+Math.min(B,w)}return P.x<E.x||P.x===E.x&&P.y<=E.y?`${P.x}:${P.y}|${E.x}:${E.y}`:`${E.x}:${E.y}|${P.x}:${P.y}`},C=(P)=>P===h||i.areIdsConnected(P,h)||A!==void 0&&(P===A||i.areIdsConnected(P,A)),I=(P)=>{let E=g.get(P);return E===void 0&&(E=C(P.connectionName)||P.rootConnectionName!==void 0&&C(P.rootConnectionName),g.set(P,E)),E},b=(P)=>l/2+Math.max((P.traceThickness??r)/2,P.viaDiameter/2)+a;return(P,E)=>{let B=P.length-1;for(let w=0;w<B;w++){let T=w-1,Q=E===0?w:w===0?E:T>=E?T+1:T,N=P[Q],F=P[Q+1],H=x(N,F),z=m.get(H);if(z!==void 0){if(!z)return!1;continue}let Y=N.z===e?N:{...N,z:e},U=F.z===e?F:{...F,z:e},X={centerX:(Y.x+U.x)/2,centerY:(Y.y+U.y)/2,width:Math.abs(Y.x-U.x),height:Math.abs(Y.y-U.y)},V=o.searchArea(X.centerX,X.centerY,X.width+2*u,X.height+2*u);for(let W of V){let j=p.get(W);if(j===void 0&&(j=W.connectedTo.some(C),p.set(W,j)),j)continue;if(W.__zLayers?.includes(e)){if(Math.abs(Y.x-W.center.x)<0.01&&Math.abs(Y.y-W.center.y)<0.01||Math.abs(U.x-W.center.x)<0.01&&Math.abs(U.y-W.center.y)<0.01)continue}if(HE(Y,U,W)<u)return m.set(H,!1),!1}if(n.hasConflictingRoutesForSegment(Y,U,d,I,b))return m.set(H,!1),!1;m.set(H,!0)}return!0}},eko=class extends xL{getSolverName(){return"SingleRouteUselessViaRemovalSolver"}obstacleSHI;hdRouteSHI;unsimplifiedRoute;connMap;outline;terminalLayerIndicesByPcbPortId;routeSections;currentSectionIndex;sameNetRouteCache=new WeakMap;detourContexts=new WeakMap;TRACE_THICKNESS=0.15;OBSTACLE_MARGIN=0.1;GEOMETRY_SHORTCUT_TRACE_MARGIN=0.1;GEOMETRY_SHORTCUT_OBSTACLE_MARGIN=0.15;MAX_GEOMETRY_SHORTCUT_ADDED_LENGTH=4;ENABLE_GEOMETRY_SHORTCUTS=!0;ENABLE_OBSTACLE_DETOUR_SHORTCUTS=!1;ENABLE_ROUTED_TRACE_DETOURS=!1;PRESERVE_ROUTE_ENDPOINTS=!1;geometryShortcutsApplied=0;multilayerSectionsCollapsed=0;obstacleDetourCandidatesValidated=0;constructor(e){super(),this.currentSectionIndex=0,this.obstacleSHI=e.obstacleSHI,this.hdRouteSHI=e.hdRouteSHI,this.unsimplifiedRoute=e.unsimplifiedRoute,this.connMap=e.connMap,this.outline=e.outline,this.terminalLayerIndicesByPcbPortId=e.terminalLayerIndicesByPcbPortId,this.GEOMETRY_SHORTCUT_TRACE_MARGIN=e.geometryShortcutTraceMargin??this.GEOMETRY_SHORTCUT_TRACE_MARGIN,this.GEOMETRY_SHORTCUT_OBSTACLE_MARGIN=e.geometryShortcutObstacleMargin??this.GEOMETRY_SHORTCUT_OBSTACLE_MARGIN,this.ENABLE_GEOMETRY_SHORTCUTS=e.enableGeometryShortcuts??!0,this.ENABLE_OBSTACLE_DETOUR_SHORTCUTS=e.enableObstacleDetourShortcuts??!1,this.ENABLE_ROUTED_TRACE_DETOURS=e.enableRoutedTraceDetours??!1,this.PRESERVE_ROUTE_ENDPOINTS=e.preserveRouteEndpoints??!1,this.routeSections=fee(this.unsimplifiedRoute)}getPathLength(e){let t=0;for(let n=1;n<e.length;n++)t+=e3t(e[n].x-e[n-1].x,e[n].y-e[n-1].y);return t}normalizeShortcutPath(e,t,n){let o=e.filter((i,r)=>{let s=e[r-1];return!s||i.x!==s.x||i.y!==s.y});return o.map((i,r)=>r===0?{...t}:r===o.length-1?{...n}:{x:i.x,y:i.y,z:t.z})}shortcutCrossesOutline(e){if(!this.outline||this.outline.length<3)return!1;for(let t=1;t<e.length;t++)if(mge({start:e[t-1],end:e[t],polygon:this.outline}))return!0;return!1}isRouteOnSameNet(e){let t=this.sameNetRouteCache.get(e);if(t!==void 0)return t;let n=[this.unsimplifiedRoute.connectionName,this.unsimplifiedRoute.rootConnectionName].filter((r)=>r!==void 0),o=[e.connectionName,e.rootConnectionName].filter((r)=>r!==void 0),i=n.some((r)=>o.some((s)=>r===s||this.connMap.areIdsConnected(r,s)));return this.sameNetRouteCache.set(e,i),i}getObstacleDetourContext(e,t,n){let o=this.ENABLE_ROUTED_TRACE_DETOURS?this.detourContexts.get(e)?.get(t):void 0;if(o?.targetZ===n)return o;let i=this.unsimplifiedRoute.traceThickness??this.TRACE_THICKNESS,r=i/2+this.GEOMETRY_SHORTCUT_OBSTACLE_MARGIN+0.000001,s=this.MAX_GEOMETRY_SHORTCUT_ADDED_LENGTH/2+r,a=Math.min(e.x,t.x)-s,c=Math.max(e.x,t.x)+s,l=Math.min(e.y,t.y)-s,d=Math.max(e.y,t.y)+s,u=this.obstacleSHI.search({minX:a,minY:l,maxX:c,maxY:d}).filter((_)=>_.__zLayers?.includes(n)),h=this.ENABLE_ROUTED_TRACE_DETOURS?this.hdRouteSHI.getConflictingRoutesForSegment({...e,z:n},{...t,z:n},i/2+this.GEOMETRY_SHORTCUT_TRACE_MARGIN,(_)=>this.isRouteOnSameNet(_)):[],A=[],m=new Set,p=new Set;for(let _ of u)m.add(_.center.x-_.width/2-r),m.add(_.center.x+_.width/2+r),p.add(_.center.y-_.height/2-r),p.add(_.center.y+_.height/2+r);for(let{conflictingRoute:_}of h){let f=_.route.filter((x)=>x.z===n&&x.x>=a&&x.x<=c&&x.y>=l&&x.y<=d);if(f.length===0)continue;let y=i/2+Math.max(_.traceThickness/2,_.viaDiameter/2)+this.GEOMETRY_SHORTCUT_TRACE_MARGIN+0.000001;m.add(Math.min(...f.map((x)=>x.x))-y),m.add(Math.max(...f.map((x)=>x.x))+y),p.add(Math.min(...f.map((x)=>x.y))-y),p.add(Math.max(...f.map((x)=>x.y))+y);{let x=Math.min(...f.map((P)=>P.x))-y,C=Math.max(...f.map((P)=>P.x))+y,I=Math.min(...f.map((P)=>P.y))-y,b=Math.max(...f.map((P)=>P.y))+y;A.push({x,y:I},{x,y:b},{x:C,y:I},{x:C,y:b})}}let g={targetZ:n,traceCorners:A,corridorXs:m,corridorYs:p};if(this.ENABLE_ROUTED_TRACE_DETOURS){let _=this.detourContexts.get(e)??new WeakMap;_.set(t,g),this.detourContexts.set(e,_)}return g}getObstacleDetourPaths(e,t,n,o,i=!1,r){let{traceCorners:s,corridorXs:a,corridorYs:c}=this.getObstacleDetourContext(e,t,n),l=[],d=new Set,u=(h)=>{let A=0;for(let f=1;f<h.length;f++)A+=e3t(h[f].x-h[f-1].x,h[f].y-h[f-1].y);if(A>o)return;if(r){let f=0,y=-1;for(let x=0;x<h.length-1;x++){let C=h[x+1].x-h[x].x,I=h[x+1].y-h[x].y,b=C*C+I*I;b>y&&(f=x,y=b)}if(!r([{...h[f],z:e.z},{...h[f+1],z:e.z}],0))return}let m=this.normalizeShortcutPath(h,e,t),p=0,g=-1;for(let f=0;f<m.length-1;f++){let y=m[f+1].x-m[f].x,x=m[f+1].y-m[f].y,C=y*y+x*x;C>g&&(p=f,g=C)}let _=m.map((f)=>`${f.x}:${f.y}`).join("|");d.has(_)||(d.add(_),l.push({path:m,length:A,longestSegmentIndex:p}))};if(i){for(let h of s)for(let A of Ree(e,h))for(let m of Ree(h,t))u([...A,...m.slice(1)]);return l}for(let h of c)u([e,{x:e.x,y:h},{x:t.x,y:h},t]);for(let h of a)u([e,{x:h,y:e.y},{x:h,y:t.y},t]);return l}getDirectGeometryShortcut(e,t,n){let o=null,i=hNe({targetZ:e.z,route:this.unsimplifiedRoute,hdRouteSHI:this.hdRouteSHI,obstacleSHI:this.obstacleSHI,connMap:this.connMap,defaultTraceThickness:this.TRACE_THICKNESS,obstacleMargin:this.GEOMETRY_SHORTCUT_OBSTACLE_MARGIN,traceMargin:this.GEOMETRY_SHORTCUT_TRACE_MARGIN,useNumericSegmentKeys:!0});for(let r=0;r<e.points.length;r++){let s=e.points[r];for(let a=0;a<n.points.length;a++){let c=n.points[a],l=[...e.points.slice(r),...t.points,...n.points.slice(0,a+1)];if(!l.some((d)=>d.insideJumperPad||d.toNextSegmentType))for(let d of Ree(s,c)){let u=this.normalizeShortcutPath(d,s,c),h=this.getPathLength(l)-this.getPathLength(u);if(h<-0.000001)continue;i(u,0)&&!this.shortcutCrossesOutline(u)&&((!o||h>o.savedLength)&&(o={path:u,previousPointIndex:r,nextPointIndex:a,savedLength:h}))}}}return o}getObstacleDetourShortcut(e,t,n,o=!1){let i=e.points.length-1,r=[];for(let u=0;u<=i;u++)r.push([u,0]);for(let u=1;u<n.points.length;u++)r.push([i,u]);let s=this.ENABLE_ROUTED_TRACE_DETOURS?hNe({targetZ:e.z,route:this.unsimplifiedRoute,hdRouteSHI:this.hdRouteSHI,obstacleSHI:this.obstacleSHI,connMap:this.connMap,defaultTraceThickness:this.TRACE_THICKNESS,obstacleMargin:this.GEOMETRY_SHORTCUT_OBSTACLE_MARGIN,traceMargin:this.GEOMETRY_SHORTCUT_TRACE_MARGIN,useNumericSegmentKeys:!0}):void 0,a=[];for(let[u,h]of r){let A=e.points[u],m=n.points[h],p=[...e.points.slice(u),...t.points,...n.points.slice(0,h+1)];if(p.some((_)=>_.insideJumperPad||_.toNextSegmentType))continue;let g=this.getPathLength(p);for(let{path:_,length:f,longestSegmentIndex:y}of this.getObstacleDetourPaths(A,m,e.z,g+this.MAX_GEOMETRY_SHORTCUT_ADDED_LENGTH+0.000001,o,s)){let x=g-f;x<-this.MAX_GEOMETRY_SHORTCUT_ADDED_LENGTH-0.000001||a.push({path:_,previousPointIndex:u,nextPointIndex:h,savedLength:x,validationFirstSegmentIndex:y})}}a.sort((u,h)=>h.savedLength-u.savedLength);let c=0,l=a.length>=256,d=s??hNe({targetZ:e.z,route:this.unsimplifiedRoute,hdRouteSHI:this.hdRouteSHI,obstacleSHI:this.obstacleSHI,connMap:this.connMap,defaultTraceThickness:this.TRACE_THICKNESS,obstacleMargin:this.GEOMETRY_SHORTCUT_OBSTACLE_MARGIN,traceMargin:this.GEOMETRY_SHORTCUT_TRACE_MARGIN,useNumericSegmentKeys:l});for(let u of a){c++;let{path:h}=u;if(d(h,u.validationFirstSegmentIndex??0)&&!this.shortcutCrossesOutline(h))return this.obstacleDetourCandidatesValidated+=c,this.stats.obstacleDetourCandidatesValidated=this.obstacleDetourCandidatesValidated,u}return this.obstacleDetourCandidatesValidated+=c,this.stats.obstacleDetourCandidatesValidated=this.obstacleDetourCandidatesValidated,null}findGeometryShortcut(e,t,n){if(this.detourContexts=new WeakMap,this.unsimplifiedRoute.jumpers?.length)return null;if(this.ENABLE_GEOMETRY_SHORTCUTS){let i=this.getDirectGeometryShortcut(e,t,n);if(i)return i}if(!this.ENABLE_OBSTACLE_DETOUR_SHORTCUTS)return null;let o=this.getObstacleDetourShortcut(e,t,n);return o||!this.ENABLE_ROUTED_TRACE_DETOURS?o:this.getObstacleDetourShortcut(e,t,n,!0)}applyGeometryShortcut(e){let t=this.routeSections[this.currentSectionIndex-1],n=this.routeSections[this.currentSectionIndex+1],o=[...t.points.slice(0,e.previousPointIndex),...e.path,...n.points.slice(e.nextPointIndex+1)].filter((i,r,s)=>{let a=s[r-1];return!a||i.x!==a.x||i.y!==a.y||i.z!==a.z});this.routeSections.splice(this.currentSectionIndex-1,3,{startIndex:t.startIndex,endIndex:n.endIndex,z:t.z,points:o}),this.geometryShortcutsApplied++,this.stats.geometryShortcutsApplied=this.geometryShortcutsApplied,this.stats.viasRemovedByGeometryShortcuts=2*this.geometryShortcutsApplied,this.currentSectionIndex=Math.max(0,this.currentSectionIndex-1)}findMultilayerSectionCollapse(e,t,n){if(e.z===n.z||this.unsimplifiedRoute.jumpers?.length)return null;let o=e.points[e.points.length-1];if(o?.insideJumperPad||o?.toNextSegmentType||t.points.some((r)=>r.insideJumperPad||r.toNextSegmentType))return null;let i=[{targetZ:e.z,mergeWith:"previous"},{targetZ:n.z,mergeWith:"next"}];for(let r of i)if(r.targetZ!==t.z&&mV({currentSection:t,targetZ:r.targetZ,route:this.unsimplifiedRoute,hdRouteSHI:this.hdRouteSHI,obstacleSHI:this.obstacleSHI,connMap:this.connMap,defaultTraceThickness:this.TRACE_THICKNESS,obstacleMargin:this.GEOMETRY_SHORTCUT_OBSTACLE_MARGIN,traceMargin:this.GEOMETRY_SHORTCUT_TRACE_MARGIN}))return r;return null}applyMultilayerSectionCollapse(e){let t=this.routeSections[this.currentSectionIndex-1],n=this.routeSections[this.currentSectionIndex],o=this.routeSections[this.currentSectionIndex+1],i=n.points.map((s)=>({...s,z:e.targetZ})),r=(s)=>s.filter((a,c)=>{let l=s[c-1];return!l||a.x!==l.x||a.y!==l.y||a.z!==l.z});e.mergeWith==="previous"?this.routeSections.splice(this.currentSectionIndex-1,2,{startIndex:t.startIndex,endIndex:n.endIndex,z:e.targetZ,points:r([...t.points,...i])}):this.routeSections.splice(this.currentSectionIndex,2,{startIndex:n.startIndex,endIndex:o.endIndex,z:e.targetZ,points:r([...i,...o.points])}),this.multilayerSectionsCollapsed++,this.stats.multilayerSectionsCollapsed=this.multilayerSectionsCollapsed,this.stats.viasRemovedByMultilayerSectionCollapses=this.multilayerSectionsCollapsed,this.currentSectionIndex=Math.max(0,this.currentSectionIndex-1)}_step(){if(this.currentSectionIndex>=this.routeSections.length)return void(this.solved=!0);if(this.currentSectionIndex===0&&this.routeSections.length>1){let r=this.routeSections[0],s=this.routeSections[1];if(!this.PRESERVE_ROUTE_ENDPOINTS&&r.z!==s.z){let a=s.z,c=r.points[0];if(o3t({endpointX:c.x,endpointY:c.y,targetZ:a,endpointPcbPortId:this.unsimplifiedRoute.startPcbPortId,terminalLayerIndicesByPcbPortId:this.terminalLayerIndicesByPcbPortId,obstacleSHI:this.obstacleSHI,route:this.unsimplifiedRoute,connMap:this.connMap})&&mV({currentSection:r,targetZ:a,route:this.unsimplifiedRoute,hdRouteSHI:this.hdRouteSHI,obstacleSHI:this.obstacleSHI,connMap:this.connMap,defaultTraceThickness:this.TRACE_THICKNESS,obstacleMargin:this.OBSTACLE_MARGIN}))return r.z=a,r.points=r.points.map((l)=>({...l,z:a})),void(this.currentSectionIndex=2)}return void this.currentSectionIndex++}if(this.currentSectionIndex===this.routeSections.length-1){if(!this.PRESERVE_ROUTE_ENDPOINTS&&this.routeSections.length>=2){let r=this.routeSections[this.routeSections.length-1],s=this.routeSections[this.routeSections.length-2];if(r.z!==s.z){let a=s.z,c=r.points[r.points.length-1];o3t({endpointX:c.x,endpointY:c.y,targetZ:a,endpointPcbPortId:this.unsimplifiedRoute.endPcbPortId,terminalLayerIndicesByPcbPortId:this.terminalLayerIndicesByPcbPortId,obstacleSHI:this.obstacleSHI,route:this.unsimplifiedRoute,connMap:this.connMap})&&mV({currentSection:r,targetZ:a,route:this.unsimplifiedRoute,hdRouteSHI:this.hdRouteSHI,obstacleSHI:this.obstacleSHI,connMap:this.connMap,defaultTraceThickness:this.TRACE_THICKNESS,obstacleMargin:this.OBSTACLE_MARGIN})&&(r.z=a,r.points=r.points.map((l)=>({...l,z:a})))}}return void(this.solved=!0)}let e=this.routeSections[this.currentSectionIndex-1],t=this.routeSections[this.currentSectionIndex],n=this.routeSections[this.currentSectionIndex+1];if(e.z!==n.z){let r=this.findMultilayerSectionCollapse(e,t,n);return r?void this.applyMultilayerSectionCollapse(r):void this.currentSectionIndex++}let o=e.z;if(mV({currentSection:t,targetZ:o,route:this.unsimplifiedRoute,hdRouteSHI:this.hdRouteSHI,obstacleSHI:this.obstacleSHI,connMap:this.connMap,defaultTraceThickness:this.TRACE_THICKNESS,obstacleMargin:this.OBSTACLE_MARGIN}))return t.z=o,t.points=t.points.map((r)=>({...r,z:o})),void(this.currentSectionIndex+=2);let i=this.findGeometryShortcut(e,t,n);i?this.applyGeometryShortcut(i):this.currentSectionIndex++}getConstructorParams(){return{obstacleSHI:this.obstacleSHI,hdRouteSHI:this.hdRouteSHI,unsimplifiedRoute:this.unsimplifiedRoute,connMap:this.connMap,outline:this.outline,geometryShortcutTraceMargin:this.GEOMETRY_SHORTCUT_TRACE_MARGIN,geometryShortcutObstacleMargin:this.GEOMETRY_SHORTCUT_OBSTACLE_MARGIN,enableGeometryShortcuts:this.ENABLE_GEOMETRY_SHORTCUTS,enableObstacleDetourShortcuts:this.ENABLE_OBSTACLE_DETOUR_SHORTCUTS,enableRoutedTraceDetours:this.ENABLE_ROUTED_TRACE_DETOURS,preserveRouteEndpoints:this.PRESERVE_ROUTE_ENDPOINTS,terminalLayerIndicesByPcbPortId:this.terminalLayerIndicesByPcbPortId}}getOptimizedHdRoute(){let e=this.routeSections.flatMap((n)=>n.points),t=[];for(let n=0;n<e.length-1;n++)e[n].z!==e[n+1].z&&t.push({x:e[n].x,y:e[n].y});return{connectionName:this.unsimplifiedRoute.connectionName,rootConnectionName:this.unsimplifiedRoute.rootConnectionName,startPcbPortId:this.unsimplifiedRoute.startPcbPortId,endPcbPortId:this.unsimplifiedRoute.endPcbPortId,route:e,traceThickness:this.unsimplifiedRoute.traceThickness,vias:t,viaDiameter:this.unsimplifiedRoute.viaDiameter,jumpers:this.unsimplifiedRoute.jumpers}}visualize(){let e={circles:[],lines:[],points:[],rects:[],coordinateSystem:"cartesian",title:"Single Route Useless Via Removal Solver"};for(let t=0;t<this.routeSections.length;t++){let n=this.routeSections[t];e.lines.push({points:n.points,strokeWidth:this.TRACE_THICKNESS,strokeColor:t===this.currentSectionIndex?"orange":n.z===0?"red":"blue"})}return e}},i3t=(e,t)=>{try{return rV(t,e)}catch(n){return console.error(n),e}},lU={"0603":{length:1.65,width:0.95,padLength:0.8,padWidth:0.95},1206:{length:3.2,width:1.6,padLength:0.6,padWidth:1.6},"1206x4_pair":{length:2.7,width:0.5,padLength:0.8,padWidth:0.5}};function tko(e,t={}){let n=[],o=[],i=t.color??"gray",r=t.label,s=lU[e.footprint]??lU["0603"],a=e.end.x-e.start.x,c=e.end.y-e.start.y,l=Math.abs(a)>Math.abs(c),d=l?s.padLength:s.padWidth,u=l?s.padWidth:s.padLength;return n.push({center:e.start,width:d,height:u,fill:i3t(i,0.5),stroke:"rgba(0, 0, 0, 0.5)",layer:"jumper",label:r?`${r} (start)`:void 0}),n.push({center:e.end,width:d,height:u,fill:i3t(i,0.5),stroke:"rgba(0, 0, 0, 0.5)",layer:"jumper",label:r?`${r} (end)`:void 0}),o.push({points:[e.start,e.end],strokeColor:"rgba(100, 100, 100, 0.8)",strokeWidth:0.3*s.padWidth,layer:"jumper-body"}),{rects:n,lines:o}}function gHe(e,t={}){let n={rects:[],lines:[]};for(let o of e){let{rects:i,lines:r}=tko(o,t);n.rects.push(...i),n.lines.push(...r)}return n}function fOt(e,t){return[...new Set(e)].filter((n)=>Number.isInteger(n)&&n>=0&&n<t).sort((n,o)=>n-o)}function nko(e,t){return fOt(e.map((n)=>((o,i)=>o==="top"?0:o==="bottom"?i-1:parseInt(o.slice(5)))(n,t)),t)}var Jte=(e,t=2)=>{let n=Array.from({length:t},(o,i)=>i);return e.map((o)=>{let i=fOt(o.__zLayers??(o.layers?nko(o.layers,t):void 0)??n,t);return{...o,__zLayers:i.length>0?i:n}})},yOt=class extends xL{constructor(e){super(),this.input=e,this.input={...e,obstacles:Jte(e.obstacles,e.layerCount)},this.MAX_ITERATIONS=1e6,this.unsimplifiedHdRoutes=e.unsimplifiedHdRoutes,this.optimizedHdRoutes=[],this.unprocessedRoutes=[...e.unsimplifiedHdRoutes],this.obstacleSHI=new _He("flatbush",this.input.obstacles),this.hdRouteSHI=new wk([...this.unsimplifiedHdRoutes,...e.otherHdRoutes??[]])}input;getSolverName(){return"UselessViaRemovalSolver"}unsimplifiedHdRoutes;optimizedHdRoutes;unprocessedRoutes;activeSubSolver=null;obstacleSHI=null;hdRouteSHI=null;_step(){if(this.activeSubSolver){if(this.activeSubSolver.step(),this.activeSubSolver.solved){let t=this.activeSubSolver.getOptimizedHdRoute();this.hdRouteSHI.removeRoute(t.connectionName),this.hdRouteSHI.addRoute(t),this.optimizedHdRoutes.push(t),this.activeSubSolver=null}else(this.activeSubSolver.failed||this.activeSubSolver.error)&&(this.error=this.activeSubSolver.error,this.failed=!0);return}let e=this.unprocessedRoutes.shift();e?this.activeSubSolver=new eko({hdRouteSHI:this.hdRouteSHI,obstacleSHI:this.obstacleSHI,unsimplifiedRoute:e,connMap:this.input.connMap,outline:this.input.outline,geometryShortcutTraceMargin:this.input.geometryShortcutTraceMargin,geometryShortcutObstacleMargin:this.input.geometryShortcutObstacleMargin,enableGeometryShortcuts:this.input.enableGeometryShortcuts,enableObstacleDetourShortcuts:this.input.enableObstacleDetourShortcuts,enableRoutedTraceDetours:this.input.enableRoutedTraceDetours,preserveRouteEndpoints:this.input.preserveRouteEndpoints,terminalLayerIndicesByPcbPortId:this.input.terminalLayerIndicesByPcbPortId}):this.solved=!0}getOptimizedHdRoutes(){return this.optimizedHdRoutes}visualize(){let e={lines:[],points:[],rects:[],circles:[],coordinateSystem:"cartesian",title:"Useless Via Removal Solver"};for(let t of this.input.obstacles){let n="rgba(128, 128, 128, 0.2)",o=t.__zLayers?.includes(0),i=t.__zLayers?.includes(1);o&&i?n="rgba(128, 0, 128, 0.2)":o?n="rgba(255, 0, 0, 0.2)":i&&(n="rgba(0, 0, 255, 0.2)"),e.rects.push({center:t.center,width:t.width,height:t.height,fill:n,label:`Obstacle (Z: ${t.__zLayers?.join(", ")})`})}for(let t of this.optimizedHdRoutes){if(t.route.length===0)continue;let n=this.input.colorMap[t.connectionName]||"#888888";for(let o=0;o<t.route.length-1;o++){let i=t.route[o],r=t.route[o+1];i.z===r.z&&e.lines.push({points:[{x:i.x,y:i.y},{x:r.x,y:r.y}],strokeColor:i.z===0?"red":"blue",strokeWidth:t.traceThickness,label:`${t.connectionName} (z=${i.z})`})}for(let o of t.vias)e.circles.push({center:{x:o.x,y:o.y},radius:t.viaDiameter/2,fill:"rgba(255, 0, 255, 0.5)",label:`${t.connectionName} via`});if(t.jumpers&&t.jumpers.length>0){let o=gHe(t.jumpers,{color:n,label:t.connectionName});e.rects.push(...o.rects??[]),e.lines.push(...o.lines??[])}}return this.activeSubSolver&&e.lines.push(...this.activeSubSolver.visualize().lines??[]),e}},oko=class{netMap;idToNetMap;constructor(e){this.netMap=e,this.idToNetMap={};for(let[t,n]of Object.entries(e))for(let o of n)this.idToNetMap[o]=t}addConnections(e){for(let t of e){let n=new Set;for(let i of t){let r=this.idToNetMap[i];r&&n.add(r)}let o;if(n.size===0)o=`connectivity_net${Object.keys(this.netMap).length}`,this.netMap[o]=[];else if(n.size===1)o=n.values().next().value??`connectivity_net${Object.keys(this.netMap).length}`;else{o=n.values().next().value??`connectivity_net${Object.keys(this.netMap).length}`;for(let i of n)if(i!==o){this.netMap[o].push(...this.netMap[i]),this.netMap[i]=this.netMap[o];for(let r of this.netMap[o])this.idToNetMap[r]=o}}for(let i of t)this.netMap[o].includes(i)||this.netMap[o].push(i),this.idToNetMap[i]=o}}getIdsConnectedToNet(e){return this.netMap[e]||[]}getNetConnectedToId(e){return this.idToNetMap[e]}areIdsConnected(e,t){if(e===t)return!0;let n=this.getNetConnectedToId(e);if(!n)return!1;let o=this.getNetConnectedToId(t);return!!o&&(n===o||o===e||o===e)}areAllIdsConnected(e){let t=this.getNetConnectedToId(e[0]);for(let n of e){let o=this.getNetConnectedToId(n);if(o===void 0)return!1;if(o!==t)return!1}return!0}},iko=class extends xL{getSolverName(){return"SingleSimplifiedPathSolver"}newRoute;newVias;headIndex=0;tailIndex=0;inputRoute;otherHdRoutes;obstacles;connMap;colorMap;outline;minBoardEdgeClearance;constructor(e){super(),this.inputRoute=e.inputRoute,this.otherHdRoutes=e.otherHdRoutes,this.obstacles=e.obstacles,this.connMap=e.connMap,this.colorMap=e.colorMap,this.outline=e.outline,this.minBoardEdgeClearance=e.minBoardEdgeClearance??0.2,this.newRoute=[this.inputRoute.route[0]],this.newVias=[]}getConstructorParams(){return{inputRoute:this.inputRoute,otherHdRoutes:this.otherHdRoutes,obstacles:this.obstacles,connMap:this.connMap.netMap,colorMap:this.colorMap,outline:this.outline,minBoardEdgeClearance:this.minBoardEdgeClearance}}get simplifiedRoute(){return{connectionName:this.inputRoute.connectionName,rootConnectionName:this.inputRoute.rootConnectionName,startPcbPortId:this.inputRoute.startPcbPortId,endPcbPortId:this.inputRoute.endPcbPortId,traceThickness:this.inputRoute.traceThickness,viaDiameter:this.inputRoute.viaDiameter,route:this.newRoute,vias:this.newVias,jumpers:this.inputRoute.jumpers}}isValidPath(e){throw Error("Not implemented")}_step(){throw Error("Not implemented")}getVisualsForNewRouteAndObstacles(){let e={lines:[],points:[],circles:[],rects:[],coordinateSystem:"cartesian",title:"Simplified Path Solver"};for(let t=0;t<this.inputRoute.route.length-1;t++)e.lines.push({points:[{x:this.inputRoute.route[t].x,y:this.inputRoute.route[t].y},{x:this.inputRoute.route[t+1].x,y:this.inputRoute.route[t+1].y}],strokeColor:"rgba(255, 0, 0, 0.8)",strokeDash:this.inputRoute.route[t].z===1?"5, 5":void 0,layer:`z${this.inputRoute.route[t].z.toString()}`});for(let t=0;t<this.newRoute.length;t++)t<this.newRoute.length-1&&e.lines.push({points:[{x:this.newRoute[t].x,y:this.newRoute[t].y},{x:this.newRoute[t+1].x,y:this.newRoute[t+1].y}],strokeWidth:0.15,strokeColor:"rgba(0, 255, 0, 0.8)",strokeDash:this.newRoute[t].z===1?[0.4,0.4]:void 0,layer:`z${this.newRoute[t].z.toString()}`}),e.points.push({x:this.newRoute[t].x,y:this.newRoute[t].y,color:"rgba(0, 255, 0, 0.8)",label:`z: ${this.newRoute[t].z}`,layer:`z${this.newRoute[t].z.toString()}`});for(let t of this.newVias)e.circles.push({center:t,radius:this.inputRoute.viaDiameter/2,fill:"rgba(0, 0, 255, 0.5)"});for(let t of this.obstacles)e.rects.push({center:t.center,width:t.width,height:t.height,fill:t.layers?.includes("top")?"rgba(255, 0, 0, 0.3)":t.layers?.includes("bottom")?"rgba(0, 0, 255, 0.3)":"rgba(128, 128, 128, 0.3)"});for(let t of this.otherHdRoutes)for(let n=0;n<t.route.length-1;n++)e.lines.push({points:[{x:t.route[n].x,y:t.route[n].y},{x:t.route[n+1].x,y:t.route[n+1].y}],strokeWidth:0.15,strokeColor:t.route[n].z===0?"rgba(255, 0, 255, 0.5)":t.route[n].z===1?"rgba(128, 0, 128, 0.5)":"rgba(0, 0, 255, 0.5)",layer:`z${t.route[n].z.toString()}`});if("filteredObstaclePathSegments"in this){let t=this.filteredObstaclePathSegments;for(let[n,o]of t)e.lines.push({points:[n,o]})}return e}},rko=(e)=>({minX:Math.min(e[0].x,e[1].x),maxX:Math.max(e[0].x,e[1].x),minY:Math.min(e[0].y,e[1].y),maxY:Math.max(e[0].y,e[1].y)}),r3t=class{constructor(e,t=0.4){this.segments=e,this.buckets=new Map,this.SEGMENT_MARGIN=t;let n=new Map;for(let o of e){let i=this.getSegmentKey(o);if(n.has(i))continue;n.set(i,o);let r=rko(o),s=Math.floor(r.minX/this.CELL_SIZE),a=Math.floor(r.maxX/this.CELL_SIZE),c=Math.floor(r.minY/this.CELL_SIZE),l=Math.floor(r.maxY/this.CELL_SIZE);for(let d=s;d<=a;d++)for(let u=c;u<=l;u++){let h=`${d}x${u}`,A=this.buckets.get(h),m=[o[0],o[1],i];A?A.push(m):this.buckets.set(h,[m])}}}segments;buckets;CELL_SIZE=0.4;SEGMENT_MARGIN;getBucketKey(e,t){return`${Math.floor(e/this.CELL_SIZE)}x${Math.floor(t/this.CELL_SIZE)}`}getSegmentKey(e){return`${e[0].x}-${e[0].y}-${e[0].z}-${e[1].x}-${e[1].y}-${e[1].z}`}getSegmentsThatCouldIntersect(e,t){let n=[],o=new Set,i=Math.min(e.x,t.x)-this.SEGMENT_MARGIN,r=Math.min(e.y,t.y)-this.SEGMENT_MARGIN,s=Math.max(e.x,t.x)+this.SEGMENT_MARGIN,a=Math.max(e.y,t.y)+this.SEGMENT_MARGIN,c=Math.floor(i/this.CELL_SIZE),l=Math.floor(s/this.CELL_SIZE),d=Math.floor(r/this.CELL_SIZE),u=Math.floor(a/this.CELL_SIZE);for(let h=c;h<=l;h++)for(let A=d;A<=u;A++){let m=`${h}x${A}`,p=this.buckets.get(m);if(p)for(let g of p){let _=g[2];o.has(_)||(o.add(_),n.push(g))}}return n}},xOt=class extends iko{pathSegments=[];totalPathLength=0;headDistanceAlongPath=0;tailDistanceAlongPath=0;minStepSize=0.25;lastValidPath=null;lastValidPathHeadDistance=0;STEP_SIZE_REDUCTION_FACTOR=0.25;maxStepSize=4;currentStepSize=this.maxStepSize;lastHeadMoveDistance=0;cachedValidPathSegments;filteredObstacles=[];filteredObstaclePathSegments=[];traceThicknessByObstacleSegmentId=new Map;filteredVias=[];filteredJumperPads=[];jumperPadPointIndices=new Set;segmentTree;OBSTACLE_MARGIN=0.1;TRACE_THICKNESS=0.15;useTraceWidthAwareClearance=!1;clearanceTraceThickness=this.TRACE_THICKNESS;TAIL_JUMP_RATIO=0.8;isSameNetRoute(e){let t=[this.inputRoute.connectionName,this.inputRoute.rootConnectionName].filter((o)=>o!==void 0),n=[e.connectionName,e.rootConnectionName].filter((o)=>o!==void 0);return t.some((o)=>n.some((i)=>o===i||this.connMap.areIdsConnected(o,i)))}constructor(e){if(super(e),this.cachedValidPathSegments=new Set,this.useTraceWidthAwareClearance=e.useTraceWidthAwareClearance??!1,this.clearanceTraceThickness=this.useTraceWidthAwareClearance?this.inputRoute.traceThickness:this.TRACE_THICKNESS,this.inputRoute.route.length<=1)return this.newRoute=[...this.inputRoute.route],void(this.solved=!0);let t=this.inputRoute.route.reduce((l,d)=>(l.minX=Math.min(l.minX,d.x),l.maxX=Math.max(l.maxX,d.x),l.minY=Math.min(l.minY,d.y),l.maxY=Math.max(l.maxY,d.y),l),{minX:1/0,maxX:-1/0,minY:1/0,maxY:-1/0}),n=this.useTraceWidthAwareClearance?Math.max(0,...this.otherHdRoutes.flatMap((l)=>[l.traceThickness,...l.route.map((d)=>d.traceThickness??l.traceThickness)])):this.TRACE_THICKNESS,o=this.useTraceWidthAwareClearance?this.OBSTACLE_MARGIN+this.clearanceTraceThickness/2+n/2:this.OBSTACLE_MARGIN+this.TRACE_THICKNESS,i={center:{x:(t.minX+t.maxX)/2,y:(t.minY+t.maxY)/2},width:t.maxX-t.minX,height:t.maxY-t.minY},r=this.OBSTACLE_MARGIN+this.clearanceTraceThickness/2,s=e.geometryQuery?e.geometryQuery.index.getCandidateObstacles({minX:i.center.x-i.width/2,minY:i.center.y-i.height/2,maxX:i.center.x+i.width/2,maxY:i.center.y+i.height/2},r):this.obstacles,a=e.geometryQuery?e.geometryQuery.index.getCandidateRoutes(t,Math.max(o,r),e.geometryQuery.routeIndex):this.otherHdRoutes;this.filteredObstacles=s.filter((l)=>!l.connectedTo.some((d)=>this.connMap.areIdsConnected(this.inputRoute.connectionName,d))).filter((l)=>{if(l.connectedTo.some((d)=>this.connMap.areIdsConnected(this.inputRoute.connectionName,d)))return!1;return function(d,u){let h=mr(d),A=mr(u),m=Math.max(h.minX-A.maxX,A.minX-h.maxX,0),p=Math.max(h.minY-A.maxY,A.minY-h.maxY,0);return Math.hypot(m,p)}(i,l)<this.OBSTACLE_MARGIN+this.clearanceTraceThickness/2}),this.filteredObstaclePathSegments=a.flatMap((l)=>{if(this.isSameNetRoute(l))return[];let d=l.route,u=[];for(let h=0;h<d.length-1;h++){let A=d[h],m=d[h+1];if(dL(A,m,t)<=o){u.push([A,m]);let p=`${A.x}-${A.y}-${A.z}-${m.x}-${m.y}-${m.z}`;if(this.useTraceWidthAwareClearance){let g=Math.max(A.traceThickness??l.traceThickness,m.traceThickness??l.traceThickness);this.traceThicknessByObstacleSegmentId.set(p,Math.max(this.traceThicknessByObstacleSegmentId.get(p)??0,g))}}}return u}),this.segmentTree=this.useTraceWidthAwareClearance?new r3t(this.filteredObstaclePathSegments,o):new r3t(this.filteredObstaclePathSegments),this.filteredVias=a.flatMap((l)=>{if(this.isSameNetRoute(l))return[];let d=l.vias,u=[];for(let h of d){let A=this.OBSTACLE_MARGIN+this.clearanceTraceThickness/2+l.viaDiameter/2,m=h.x-A,p=h.x+A,g=h.y-A,_=h.y+A;m<=t.maxX&&p>=t.minX&&g<=t.maxY&&_>=t.minY&&u.push({...h,diameter:l.viaDiameter})}return u});let c=(l,d)=>{let u=[];for(let h of l){let A=lU[h.footprint]??lU["0603"],m=h.end.x-h.start.x,p=h.end.y-h.start.y,g=Math.abs(m)>Math.abs(p),_=g?A.padLength:A.padWidth,f=g?A.padWidth:A.padLength,y=this.OBSTACLE_MARGIN+this.clearanceTraceThickness/2;h.start.x-_/2-y<=t.maxX&&h.start.x+_/2+y>=t.minX&&h.start.y-f/2-y<=t.maxY&&h.start.y+f/2+y>=t.minY&&u.push({center:h.start,width:_,height:f,connectionName:d}),h.end.x-_/2-y<=t.maxX&&h.end.x+_/2+y>=t.minX&&h.end.y-f/2-y<=t.maxY&&h.end.y+f/2+y>=t.minY&&u.push({center:h.end,width:_,height:f,connectionName:d})}return u};if(this.filteredJumperPads=a.flatMap((l)=>this.isSameNetRoute(l)?[]:c(l.jumpers??[],l.connectionName)),this.inputRoute.jumpers&&this.inputRoute.jumpers.length>0){this.filteredJumperPads.push(...c(this.inputRoute.jumpers,this.inputRoute.connectionName));for(let l of this.inputRoute.jumpers)for(let d=0;d<this.inputRoute.route.length;d++){let u=this.inputRoute.route[d];(Math.abs(u.x-l.start.x)<0.01&&Math.abs(u.y-l.start.y)<0.01||Math.abs(u.x-l.end.x)<0.01&&Math.abs(u.y-l.end.y)<0.01)&&this.jumperPadPointIndices.add(d)}}this.computePathSegments()}computePathSegments(){let e=0;for(let t=0;t<this.inputRoute.route.length-1;t++){let n=this.inputRoute.route[t],o=this.inputRoute.route[t+1],i=Math.sqrt((o.x-n.x)**2+(o.y-n.y)**2)+t/1e4;this.pathSegments.push({start:n,end:o,length:i,startDistance:e,endDistance:e+i}),e+=i}this.totalPathLength=e}arePointsEqual(e,t){return e.x===t.x&&e.y===t.y&&e.z===t.z}getPointAtDistance(e){e=Math.max(0,Math.min(e,this.totalPathLength));let t=this.pathSegments.find((o)=>e>=o.startDistance&&e<=o.endDistance);if(!t)return this.inputRoute.route[this.inputRoute.route.length-1];let n=(e-t.startDistance)/t.length;return{x:t.start.x+n*(t.end.x-t.start.x),y:t.start.y+n*(t.end.y-t.start.y),z:n<0.5?t.start.z:t.end.z}}getNearestIndexForDistance(e){if(e<=0)return 0;if(e>=this.totalPathLength)return this.inputRoute.route.length-1;let t=this.pathSegments.findIndex((i)=>e>=i.startDistance&&e<=i.endDistance);if(t===-1)return 0;let n=this.pathSegments[t],o=(n.startDistance+n.endDistance)/2;return e>o?t+1:t}isValidPathSegment(e,t){for(let o of this.filteredObstacles){if(!o.__zLayers?.includes(e.z))continue;if(HE(e,t,o)<this.OBSTACLE_MARGIN+this.clearanceTraceThickness/2)return!1}let n=this.segmentTree.getSegmentsThatCouldIntersect(e,t);for(let[o,i,r]of n)if(o.z===e.z&&i.z===e.z){let s=gOt({x:e.x,y:e.y},{x:t.x,y:t.y},{x:o.x,y:o.y},{x:i.x,y:i.y});if(!this.useTraceWidthAwareClearance){if(s<this.OBSTACLE_MARGIN+this.TRACE_THICKNESS)return!1;continue}let a=this.traceThicknessByObstacleSegmentId.get(r);if(a===void 0)throw Error(`Missing trace thickness for segment "${r}"`);if(s<this.OBSTACLE_MARGIN+this.clearanceTraceThickness/2+a/2)return!1}for(let o of this.filteredVias)if(Da(o,e,t)<this.OBSTACLE_MARGIN+o.diameter/2+this.clearanceTraceThickness/2)return!1;for(let o of this.filteredJumperPads)if(HE(e,t,o)<this.OBSTACLE_MARGIN+this.clearanceTraceThickness/2)return!1;if(this.outline&&this.outline.length>=3){if(mge({start:{x:e.x,y:e.y},end:{x:t.x,y:t.y},polygon:this.outline,margin:this.minBoardEdgeClearance+this.inputRoute.traceThickness/2}))return!1}return!0}isValidPath(e){if(e.length<2)return!0;for(let t=0;t<e.length-1;t++)if(e[t].z!==e[t+1].z)return!1;for(let t=0;t<e.length-1;t++)if(!this.isValidPathSegment(e[t],e[t+1]))return!1;return!0}find45DegreePath(e,t){if(this.arePointsEqual(e,t))return[e];if(e.z!==t.z)return null;let n=Ree({x:e.x,y:e.y},{x:t.x,y:t.y});for(let o of n){let i=o.map((r)=>({x:r.x,y:r.y,z:e.z}));if(this.isValidPath(i))return i}return null}addPathToResult(e){if(e.length!==0){for(let t=0;t<e.length;t++)t===0&&this.newRoute.length>0&&this.arePointsEqual(this.newRoute[this.newRoute.length-1],e[t])||this.newRoute.push(e[t]);this.currentStepSize=this.maxStepSize}}appendOriginalRouteSlice(e,t){let n=this.pathSegments.findIndex((o)=>e>=o.startDistance&&e<=o.endDistance);if(n===-1)throw Error(`Could not find path segment containing distance ${e}`);for(let o=n+1;o<=t&&o<this.inputRoute.route.length;o++){let i=this.inputRoute.route[o],r=this.newRoute[this.newRoute.length-1];r&&this.arePointsEqual(r,i)||this.newRoute.push({...i})}}moveHead(e){this.lastHeadMoveDistance=e,this.headDistanceAlongPath=Math.min(this.headDistanceAlongPath+e,this.totalPathLength)}stepBackAndReduceStepSize(){this.headDistanceAlongPath=Math.max(this.tailDistanceAlongPath,this.headDistanceAlongPath-this.lastHeadMoveDistance),this.currentStepSize=Math.max(this.minStepSize,this.currentStepSize*this.STEP_SIZE_REDUCTION_FACTOR)}_step(){let e=this.tailDistanceAlongPath>=this.totalPathLength,t=this.headDistanceAlongPath>=this.totalPathLength;if(e){let h=this.inputRoute.route[this.inputRoute.route.length-1];return this.newRoute.length!==0&&this.arePointsEqual(this.newRoute[this.newRoute.length-1],h)||this.newRoute.push(h),void(this.solved=!0)}if(t){let h=this.getPointAtDistance(this.tailDistanceAlongPath),A=this.inputRoute.route[this.inputRoute.route.length-1],m=this.find45DegreePath(h,A);if(m)return this.addPathToResult(m),void(this.solved=!0);let p=this.lastValidPath?this.lastValidPathHeadDistance:this.tailDistanceAlongPath;return this.lastValidPath&&(this.addPathToResult(this.lastValidPath),this.lastValidPath=null),this.getNearestIndexForDistance(p),this.appendOriginalRouteSlice(p,this.inputRoute.route.length-1),this.tailDistanceAlongPath=this.totalPathLength,this.headDistanceAlongPath=this.totalPathLength,void(this.solved=!0)}this.moveHead(this.currentStepSize);let n=this.getPointAtDistance(this.tailDistanceAlongPath),o=this.getPointAtDistance(this.headDistanceAlongPath),i=this.getNearestIndexForDistance(this.tailDistanceAlongPath),r=this.getNearestIndexForDistance(this.headDistanceAlongPath),s=!1,a=-1;for(let h=i;h<r;h++)if(h+1<this.inputRoute.route.length&&this.inputRoute.route[h].z!==this.inputRoute.route[h+1].z){s=!0;let A=h;a=this.pathSegments[A].startDistance;break}if(s&&this.lastHeadMoveDistance>this.minStepSize)return void this.stepBackAndReduceStepSize();let c=!1,l=-1,d=-1;for(let h=i+1;h<=r;h++)if(this.jumperPadPointIndices.has(h)){c=!0,l=h,d=h>0&&h-1<this.pathSegments.length?this.pathSegments[h-1].endDistance:this.pathSegments[0]?.startDistance??0;break}if(c&&this.lastHeadMoveDistance>this.minStepSize)return void this.stepBackAndReduceStepSize();if(c&&l>=0){let h=this.inputRoute.route[l];this.lastValidPath&&(this.addPathToResult(this.lastValidPath),this.lastValidPath=null);let A=this.newRoute[this.newRoute.length-1];return A&&A.x===h.x&&A.y===h.y||this.newRoute.push({x:h.x,y:h.y,z:h.z}),this.currentStepSize=this.maxStepSize,this.tailDistanceAlongPath=d,this.headDistanceAlongPath=this.tailDistanceAlongPath,this.lastValidPath=null,void(this.lastValidPathHeadDistance=this.tailDistanceAlongPath)}if(s&&a>0){let h=this.lastValidPath?this.lastValidPathHeadDistance:this.tailDistanceAlongPath,A=this.getNearestIndexForDistance(a)+1,m=this.inputRoute.route[A],p={x:m.x,y:m.y};this.lastValidPath&&(this.addPathToResult(this.lastValidPath),this.lastValidPath=null);let g=this.newRoute[this.newRoute.length-1],_={x:p.x,y:p.y,z:g.z};if(!this.arePointsEqual(g,_)){let y=this.find45DegreePath(g,_);y?this.addPathToResult(y):this.appendOriginalRouteSlice(h,A-1)}this.newVias.push(p),this.newRoute.push({x:p.x,y:p.y,z:m.z}),this.currentStepSize=this.maxStepSize;let f=this.pathSegments.findIndex((y)=>y.start===m);if(f!==-1)this.tailDistanceAlongPath=this.pathSegments[f].startDistance,this.headDistanceAlongPath=this.tailDistanceAlongPath,this.lastValidPath=null,this.lastValidPathHeadDistance=this.tailDistanceAlongPath;else if(A<this.inputRoute.route.length){if(A===this.inputRoute.route.length-1)return void(this.solved=!0);console.warn("Fallback used for tailDistanceAlongPath after layer change");let y=this.pathSegments.find((x)=>x.start===this.inputRoute.route[A]);y?(this.tailDistanceAlongPath=y.startDistance,this.headDistanceAlongPath=this.tailDistanceAlongPath,this.lastValidPath=null,this.lastValidPathHeadDistance=this.tailDistanceAlongPath):(console.error(`[${this.inputRoute.connectionName}] Could not find segment start after layer change. Path might be incomplete.
Index sought: ${A}, Point: (${this.inputRoute.route[A].x.toFixed(3)}, ${this.inputRoute.route[A].y.toFixed(3)}, z=${this.inputRoute.route[A].z})
Route Length: ${this.inputRoute.route.length}, Path Segments: ${this.pathSegments.length}`),this.solved=!0)}else console.warn("Layer change occurred at the end of the path."),this.solved=!0;return}let u=this.find45DegreePath(n,o);if(!u&&this.lastHeadMoveDistance>this.minStepSize)this.stepBackAndReduceStepSize();else{if(!u&&!this.lastValidPath){let h=this.getPointAtDistance(this.tailDistanceAlongPath);this.tailDistanceAlongPath+=this.minStepSize,this.moveHead(this.minStepSize);let A=this.getNearestIndexForDistance(this.tailDistanceAlongPath);for(let g=i;g<A;g++)if(this.inputRoute.route[g].z!==this.inputRoute.route[g+1].z){A=g;break}let m=this.inputRoute.route[A],p=this.inputRoute.route[this.inputRoute.route.length-1];return void(this.arePointsEqual(h,m)||this.arePointsEqual(m,p)||(this.newRoute.push(m),this.tailDistanceAlongPath=A===0?0:this.pathSegments[A-1].endDistance))}if(u)return this.lastValidPath=u,void(this.lastValidPathHeadDistance=this.headDistanceAlongPath);this.lastValidPath&&(this.addPathToResult(this.lastValidPath),this.lastValidPath=null,this.tailDistanceAlongPath=this.lastValidPathHeadDistance,this.moveHead(this.minStepSize))}}visualize(){let e=this.getVisualsForNewRouteAndObstacles(),t=this.getPointAtDistance(this.tailDistanceAlongPath),n=this.getPointAtDistance(this.headDistanceAlongPath);e.points.push({x:t.x,y:t.y,color:"yellow",label:["Tail",`z: ${t.z}`].join(`
`)}),e.points.push({x:n.x,y:n.y,color:"orange",label:["Head",`z: ${n.z}`].join(`
`)});let o=this.getPointAtDistance(this.headDistanceAlongPath+this.currentStepSize);e.points.push({x:o.x,y:o.y,color:"red",label:["Tentative Head",`z: ${o.z}`].join(`
`)});let i=0;for(;i<this.totalPathLength;){let r=this.getPointAtDistance(i);e.circles.push({center:{x:r.x,y:r.y},radius:0.05,fill:"rgba(100, 100, 100, 0.5)"}),i+=this.totalPathLength/20}if(this.lastValidPath&&this.lastValidPath.length>1)for(let r=0;r<this.lastValidPath.length-1;r++)e.lines.push({points:[{x:this.lastValidPath[r].x,y:this.lastValidPath[r].y},{x:this.lastValidPath[r+1].x,y:this.lastValidPath[r+1].y}],strokeColor:"rgba(0, 255, 255, 0.9)",strokeDash:"3, 3"});return e}},s3t=class extends xOt{vertexIndex=0;constructor(e){super(e),this.newRoute=this.inputRoute.route.slice(0,1).map((t)=>({...t})),this.newVias=this.inputRoute.vias.map((t)=>({...t}))}getSolverName(){return"VertexShortcutPathSolver"}_step(){let e=this.inputRoute.route,t=e[this.vertexIndex];if(this.vertexIndex>=e.length-1)return void(this.solved=!0);let n=this.vertexIndex+1,o=[0];for(let i=this.vertexIndex;i<e.length-1;i++){let r=e[i],s=e[i+1];if(r.z!==s.z||r.toNextSegmentType||r.traceThickness!==s.traceThickness||r.traceThickness!==void 0&&r.traceThickness!==this.inputRoute.traceThickness||r.insideJumperPad||s.insideJumperPad)break;if(o.push(o.at(-1)+Math.hypot(s.x-r.x,s.y-r.y)),n=i+1,s.pcb_port_id||this.jumperPadPointIndices.has(n))break}for(let i=n;i>this.vertexIndex+1;i--){let r=e[i],s=o[i-this.vertexIndex];for(let a of Ree(t,r)){let c=a.filter((d,u)=>u===0||d.x!==a[u-1].x||d.y!==a[u-1].y).map((d)=>({...d,z:t.z,traceThickness:t.traceThickness})),l=c.reduce((d,u,h)=>h===0?d:d+Math.hypot(u.x-c[h-1].x,u.y-c[h-1].y),0);if(!(c.length<2||l>s+0.000000001||l>=s-0.000000001&&c.length>=i-this.vertexIndex+1)&&this.isValidPath(c))return c[c.length-1]={...r},this.newRoute.push(...c.slice(1)),void(this.vertexIndex=i)}}this.vertexIndex++,this.newRoute.push({...e[this.vertexIndex]})}},RQe=new Float64Array(1),sko=new BigUint64Array(RQe.buffer);function uE(e,t){return Number.isFinite(e)?e===0?t?Number.MIN_VALUE:-Number.MIN_VALUE:(RQe[0]=e,sko[0]+=e>0===t?1n:-1n,RQe[0]):e}function Qee(e,t,n=t){let o=uE(t,!0),i=uE(n,!0);return{minX:uE(uE(e.minX,!1)-o,!1),minY:uE(uE(e.minY,!1)-i,!1),maxX:uE(uE(e.maxX,!0)+o,!0),maxY:uE(uE(e.maxY,!0)+i,!0)}}function mNe(e,t,n){let o={minX:1/0,minY:1/0,maxX:-1/0,maxY:-1/0};for(let i of e.route)o.minX=Math.min(o.minX,i.x),o.minY=Math.min(o.minY,i.y),o.maxX=Math.max(o.maxX,i.x),o.maxY=Math.max(o.maxY,i.y);for(let i of e.vias){let r=Qee({minX:i.x,minY:i.y,maxX:i.x,maxY:i.y},Math.abs(e.viaDiameter/2));o.minX=Math.min(o.minX,r.minX),o.minY=Math.min(o.minY,r.minY),o.maxX=Math.max(o.maxX,r.maxX),o.maxY=Math.max(o.maxY,r.maxY)}for(let i of e.jumpers??[]){let r=lU[i.footprint]??lU["0603"],s=Math.abs(i.end.x-i.start.x)>Math.abs(i.end.y-i.start.y),a=(s?r.padLength:r.padWidth)/2,c=(s?r.padWidth:r.padLength)/2;for(let l of[i.start,i.end]){let d=Qee({minX:l.x,minY:l.y,maxX:l.x,maxY:l.y},a,c);o.minX=Math.min(o.minX,d.minX),o.minY=Math.min(o.minY,d.minY),o.maxX=Math.max(o.maxX,d.maxX),o.maxY=Math.max(o.maxY,d.maxY)}}if(e.route.length!==0||e.vias.length!==0||e.jumpers?.length)return[o.minX,o.minY,o.maxX,o.maxY].every(Number.isFinite)?{...Qee(o,0),route:e,routeIndex:t,immutable:n}:{minX:-1/0,minY:-1/0,maxX:1/0,maxY:1/0,route:e,routeIndex:t,immutable:n}}var ako=class{constructor(e,t,n){this.obstacles=n,this.mutableRoutes=e.map((r,s)=>mNe(r,s,!1));let o=t.map((r,s)=>mNe(r,s,!0)).concat(this.mutableRoutes).filter((r)=>r!==void 0);this.routeIndex.load(o);let i=n.map((r,s)=>{let a={minX:r.center.x-r.width/2,minY:r.center.y-r.height/2,maxX:r.center.x+r.width/2,maxY:r.center.y+r.height/2};return Object.values(a).every(Number.isFinite)?this.indexedObstacleIds.push(s):this.unindexedObstacleIds.push(s),a});if(this.indexedObstacleIds.length>0){this.obstacleIndex=new Vm(this.indexedObstacleIds.length);for(let r of this.indexedObstacleIds){let s=i[r];this.obstacleIndex.add(s.minX,s.minY,s.maxX,s.maxY)}this.obstacleIndex.finish()}}obstacles;routeIndex=new lL;mutableRoutes;obstacleIndex;indexedObstacleIds=[];unindexedObstacleIds=[];getCandidateObstacles(e,t){if(!Number.isFinite(t)||!Object.values(e).every(Number.isFinite))return[...this.obstacles];let n=Qee(e,Math.max(0,t));return(this.obstacleIndex?this.obstacleIndex.search(n.minX,n.minY,n.maxX,n.maxY).map((o)=>this.indexedObstacleIds[o]):[]).concat(this.unindexedObstacleIds).sort((o,i)=>o-i).map((o)=>this.obstacles[o])}getCandidateRoutes(e,t,n){return(Number.isFinite(t)&&Object.values(e).every(Number.isFinite)?this.routeIndex.search(Qee(e,Math.max(0,t))):this.routeIndex.all()).filter((o)=>o.immutable||o.routeIndex!==n).sort((o,i)=>(o.immutable?0:o.routeIndex>n?1:2)-(i.immutable?0:i.routeIndex>n?1:2)||o.routeIndex-i.routeIndex).map((o)=>o.route)}replaceRoute(e,t){if(!Number.isInteger(e)||e<0||e>=this.mutableRoutes.length)throw Error(`Cannot replace path simplification route ${e}`);let n=this.mutableRoutes[e];n&&this.routeIndex.remove(n);let o=mNe(t,e,!1);this.mutableRoutes[e]=o,o&&this.routeIndex.insert(o)}},cko=class extends xL{getSolverName(){return"MultiSimplifiedPathSolver"}simplifiedHdRoutes;currentUnsimplifiedHdRouteIndex=0;activeSubSolver=null;unsimplifiedHdRoutes;otherHdRoutes;obstacles;connMap;colorMap;outline;minBoardEdgeClearance;defaultViaDiameter;useTraceWidthAwareClearance;enableVertexShortcuts;geometryIndex;constructor(e){super(),this.MAX_ITERATIONS=1e8,this.unsimplifiedHdRoutes=e.unsimplifiedHdRoutes,this.otherHdRoutes=e.otherHdRoutes??[];let t=Math.max(2,...[...e.unsimplifiedHdRoutes,...this.otherHdRoutes].flatMap((n)=>n.route.map((o)=>o.z+1)))||2;this.obstacles=Jte(e.obstacles,t),this.connMap=e.connMap||new oko({}),this.colorMap=e.colorMap||{},this.outline=e.outline,this.minBoardEdgeClearance=e.minBoardEdgeClearance??0.2,this.defaultViaDiameter=e.defaultViaDiameter??0.3,this.useTraceWidthAwareClearance=e.useTraceWidthAwareClearance??!1,this.enableVertexShortcuts=e.enableVertexShortcuts??!1,this.geometryIndex=new ako(this.unsimplifiedHdRoutes,this.otherHdRoutes,this.obstacles),this.simplifiedHdRoutes=[]}_step(){let e=this.unsimplifiedHdRoutes[this.currentUnsimplifiedHdRouteIndex];if(!this.activeSubSolver)return e?(this.activeSubSolver=new xOt({inputRoute:e,otherHdRoutes:this.otherHdRoutes.concat(this.unsimplifiedHdRoutes.slice(this.currentUnsimplifiedHdRouteIndex+1).concat(this.simplifiedHdRoutes)),obstacles:this.obstacles,connMap:this.connMap,colorMap:this.colorMap,outline:this.outline,minBoardEdgeClearance:this.minBoardEdgeClearance,useTraceWidthAwareClearance:this.useTraceWidthAwareClearance,geometryQuery:{index:this.geometryIndex,routeIndex:this.currentUnsimplifiedHdRouteIndex}}),void this.currentUnsimplifiedHdRouteIndex++):void(this.solved=!0);if(this.activeSubSolver.step(),this.activeSubSolver.solved){if(this.enableVertexShortcuts&&!(this.activeSubSolver instanceof s3t))return void(this.activeSubSolver=new s3t({inputRoute:this.activeSubSolver.simplifiedRoute,otherHdRoutes:this.activeSubSolver.otherHdRoutes,obstacles:this.obstacles,connMap:this.connMap,colorMap:this.colorMap,outline:this.outline,minBoardEdgeClearance:this.minBoardEdgeClearance,useTraceWidthAwareClearance:this.useTraceWidthAwareClearance,geometryQuery:{index:this.geometryIndex,routeIndex:this.currentUnsimplifiedHdRouteIndex-1}}));let t=this.activeSubSolver.simplifiedRoute;this.geometryIndex.replaceRoute(this.currentUnsimplifiedHdRouteIndex-1,t),this.simplifiedHdRoutes.push(t),this.activeSubSolver=null}}visualize(){if(this.activeSubSolver)return this.activeSubSolver.visualize();let e={lines:[],points:[],circles:[],rects:[],coordinateSystem:"cartesian",title:"Multi Simplified Path Solver"};for(let t of this.unsimplifiedHdRoutes)if(!this.simplifiedHdRoutes.some((n)=>n.connectionName===t.connectionName)){for(let n=0;n<t.route.length-1;n++)e.lines.push({points:[{x:t.route[n].x,y:t.route[n].y},{x:t.route[n+1].x,y:t.route[n+1].y}],strokeColor:t.route[n].z===1?"rgba(0, 0, 255, 0.4)":"rgba(255, 0, 0, 0.4)",strokeWidth:0.15,strokeDash:t.route[n].z===1?[0.5,0.5]:void 0});for(let n of t.vias||[])e.circles.push({center:n,radius:(t.viaDiameter??this.defaultViaDiameter)/2,fill:"rgba(0, 0, 255, 0.4)"})}for(let t of this.simplifiedHdRoutes){let n=this.colorMap?.[t.connectionName]||"rgba(128, 128, 128, 0.8)";for(let o=0;o<t.route.length-1;o++)e.lines.push({points:[{x:t.route[o].x,y:t.route[o].y},{x:t.route[o+1].x,y:t.route[o+1].y}],strokeWidth:0.15,strokeColor:n,strokeDash:t.route[o].z===1?[0.5,0.5]:void 0,step:1});for(let o of t.vias||[])e.circles.push({center:o,radius:t.viaDiameter/2,fill:"rgba(0, 0, 255, 0.5)",step:1})}for(let t of this.unsimplifiedHdRoutes){for(let n=0;n<t.route.length-1;n++)e.lines.push({points:[{x:t.route[n].x,y:t.route[n].y},{x:t.route[n+1].x,y:t.route[n+1].y}],strokeWidth:0.15,strokeColor:"rgba(255, 0, 0, 0.2)",strokeDash:[0.5,0.5],step:0,layer:`z${t.route[n].z.toString()}`});for(let n of t.vias)e.circles.push({center:{x:n.x,y:n.y},radius:t.viaDiameter/2,fill:"rgba(255, 0, 0, 0.2)",step:0})}for(let t of this.obstacles)e.rects.push({center:t.center,width:t.width,height:t.height,fill:t.layers?.includes("top")?"rgba(255, 0, 0, 0.3)":t.layers?.includes("bottom")?"rgba(0, 0, 255, 0.3)":"rgba(128, 128, 128, 0.3)"});if(this.currentUnsimplifiedHdRouteIndex<this.unsimplifiedHdRoutes.length){let t=this.unsimplifiedHdRoutes[this.currentUnsimplifiedHdRouteIndex];t.route.length>0&&e.circles.push({center:{x:t.route[0].x,y:t.route[0].y},radius:0.2,fill:"yellow",label:"Current"})}return e}},lko=(e,t)=>{for(let n=0;n<e.route.length-1;n++){let o=e.route[n],i=e.route[n+1];if(o.z===i.z||o.x!==t.x||o.y!==t.y||i.x!==t.x||i.y!==t.y)continue;let r=n;for(;r>0&&e.route[r-1].x===t.x&&e.route[r-1].y===t.y;)r--;let s=n+1;for(;s<e.route.length-1&&e.route[s+1].x===t.x&&e.route[s+1].y===t.y;)s++;if(r===0||s===e.route.length-1)return!0}return!1},QQe=(e,t,n)=>n?.get(t.connectionName)??e.idToNetMap[t.connectionName]??(t.rootConnectionName?e.idToNetMap[t.rootConnectionName]:void 0),dko=(e,t,n)=>{for(let o of t.connectedTo){if(o===n.net)return!0;if(e.idToNetMap[o]===n.net)return!0;if(e.areIdsConnected(o,n.net))return!0}return!1},uko=(e,t,n)=>{let o=n.mergedViaHdRoutes[e.routeIndex];if(!o)throw Error(`SameNetViaMergerSolver could not find route for via at index ${e.routeIndex}`);let i=new Set;for(let r=1;r<o.route.length;r++){let s=o.route[r-1],a=o.route[r];s.z!==a.z&&(s.x===e.x&&s.y===e.y&&a.x===e.x&&a.y===e.y&&(i.add(s.z),i.add(a.z)))}if(i.size===0)throw Error(`SameNetViaMergerSolver could not find transition layers for via at (${e.x}, ${e.y})`);for(let r of i){let s=o.traceThickness,a={x:e.x,y:e.y,z:r},c={x:t.x,y:t.y,z:r};if(a.x===c.x&&a.y===c.y)continue;let l=n.hdRouteSHI.getConflictingRoutesForSegment(a,c,s/2);for(let{conflictingRoute:A,distance:m}of l){if(A.connectionName===o.connectionName)continue;if(QQe(n.connMap,A,n.netByConnectionName)===e.net)continue;if(m<s/2+A.traceThickness/2)return!1}let d={centerX:(a.x+c.x)/2,centerY:(a.y+c.y)/2,width:Math.abs(a.x-c.x),height:Math.abs(a.y-c.y)},u=s/2+0.1,h=n.obstacleSHI.searchArea(d.centerX,d.centerY,d.width+2*u,d.height+2*u);for(let A of h){if(!A.__zLayers)throw Error(`SameNetViaMergerSolver found obstacle without zLayers near via at (${e.x}, ${e.y})`);if(A.__zLayers.includes(r)&&(!dko(n.connMap,A,e)&&HE(a,c,A)<u))return!1}}return!0},fHe=class extends xL{constructor(e){if(super(),this.input=e,!e.connMap)throw Error("SameNetViaMergerSolver requires connMap");this.input={...e,obstacles:Jte(e.obstacles,e.layerCount)},this.MAX_ITERATIONS=1e6,this.inputHdRoutes=this.input.inputHdRoutes,this.mergedViaHdRoutes=structuredClone(this.inputHdRoutes);for(let t of this.mergedViaHdRoutes)this.dedupeRouteVias(t);this.unprocessedRoutes=[...this.input.inputHdRoutes],this.colorMap=this.input.colorMap,this.outline=this.input.outline,this.obstacles=this.input.obstacles,this.obstacleSHI=new _He("flatbush",this.input.obstacles),this.hdRouteSHI=this.createHdRouteSpatialIndex(),this.vias=[],this.offendingVias=[],this.connMap=e.connMap,this.netByConnectionName=e.netByConnectionName,this.viasByNet=new Map,this.rebuildVias()}input;getSolverName(){return"SameNetViaMergerSolver"}inputHdRoutes;mergedViaHdRoutes;unprocessedRoutes;vias;offendingVias;currentViaRoutes=[];connMap;colorMap;outline;obstacles;viasByNet;netByConnectionName;obstacleSHI;hdRouteSHI;createHdRouteSpatialIndex(){return new wk([...this.mergedViaHdRoutes,...this.input.otherHdRoutes??[]])}rebuildVias(){this.vias=[],this.viasByNet=new Map;let e=(t,n,o)=>{if(t.vias.length===0)return;let i=o?((r,s,a)=>{let c=QQe(r,s,a);if(!c)throw Error(`SameNetViaMergerSolver could not find net for route "${s.connectionName}"`);return c})(this.connMap,t,this.netByConnectionName):QQe(this.connMap,t,this.netByConnectionName);if(i)for(let r=0;r<t.vias.length;r++){let s=t.vias[r],a=[...new Set(t.route.map((d)=>d.z))];if(a.length===0)throw Error(`SameNetViaMergerSolver found via on route "${t.connectionName}" with no route points`);let c={x:s.x,y:s.y,diameter:t.viaDiameter,net:i,layers:a,routeIndex:n,mutable:o&&!(this.input.preserveRouteEndpoints&&lko(t,s))};this.vias.push(c);let l=this.viasByNet.get(c.net);l?l.push(c):this.viasByNet.set(c.net,[c])}};for(let t=0;t<this.mergedViaHdRoutes.length;t++)e(this.mergedViaHdRoutes[t],t,!0);for(let t=0;t<(this.input.otherHdRoutes?.length??0);t++)e(this.input.otherHdRoutes[t],this.mergedViaHdRoutes.length+t,!1)}getViaLocationKey(e){return[e.net,e.x,e.y].join(":")}dedupeRouteVias(e){let t=new Set;e.vias=e.vias.filter((n)=>{let o=`${n.x}:${n.y}`;return!t.has(o)&&(t.add(o),!0)})}getOffendingViaGroupsBatch(){let e=[],t=new Set,n=[];for(let o of this.viasByNet.values()){if(o.length<2)continue;let i=Math.max(0.000001,...o.map((a)=>a.diameter)),r=new Map,s=new Map;for(let a=0;a<o.length;a++){let c=o[a],l=this.getViaLocationKey(c),d=s.get(l);d?d.push(c):s.set(l,[c]);let u=`${Math.floor(c.x/i)}:${Math.floor(c.y/i)}`,h=r.get(u);h?h.push(a):r.set(u,[a])}for(let a=0;a<o.length;a++){let c=o[a],l=Math.floor(c.x/i),d=Math.floor(c.y/i),u=Math.ceil(2.5),h=[];for(let p=-u;p<=u;p++)for(let g=-u;g<=u;g++){let _=r.get(`${l+p}:${d+g}`);if(_)for(let f of _){if(f===a)continue;let y=o[f];if(!y.mutable)continue;let x=c.x-y.x,C=c.y-y.y,I=x*x+C*C,b=c.diameter/2+y.diameter/2,P=2.5*b;I!==0&&((I<=b*b||I<=P*P&&uko(y,c,{connMap:this.connMap,mergedViaHdRoutes:this.mergedViaHdRoutes,hdRouteSHI:this.hdRouteSHI,obstacleSHI:this.obstacleSHI,netByConnectionName:this.netByConnectionName}))&&h.push(y))}}let A=new Set(h),m=h.filter((p)=>p.x===c.x&&p.y===c.y||s.get(this.getViaLocationKey(p)).every((g)=>g.mutable&&A.has(g)));m.length>0&&n.push({keep:c,remove:m})}}n.sort((o,i)=>i.remove.length!==o.remove.length?i.remove.length-o.remove.length:o.keep.mutable!==i.keep.mutable?o.keep.mutable?1:-1:i.keep.layers.length!==o.keep.layers.length?i.keep.layers.length-o.keep.layers.length:o.keep.routeIndex-i.keep.routeIndex);for(let o of n){let i=this.getViaLocationKey(o.keep);if(t.has(i))continue;let r=o.remove.filter((s)=>!t.has(this.getViaLocationKey(s)));if(r.length!==0){e.push({keep:o.keep,remove:r}),t.add(i);for(let s of r)t.add(this.getViaLocationKey(s))}}return e}moveViaTo(e,t,n=!0){if(!e.mutable)throw Error("SameNetViaMergerSolver cannot mutate an immutable via anchor");let o=this.mergedViaHdRoutes[e.routeIndex];if(!o)throw Error(`SameNetViaMergerSolver could not find route for via at index ${e.routeIndex}`);let i=o.route,r=new Set,s=!1;for(let a=i.length-1;a>=1;a--){let c=i[a-1],l=i[a];if(c.z===l.z)continue;if(c.x!==e.x||c.y!==e.y)continue;if(l.x!==e.x||l.y!==e.y)continue;let d=a-1;for(;d>0&&i[d-1].x===e.x&&i[d-1].y===e.y;)d--;let u=a;for(;u<i.length-1&&i[u+1].x===e.x&&i[u+1].y===e.y;)u++;for(let h=d;h<=u;h++)r.add(h)}if(r.size===0)throw Error(`SameNetViaMergerSolver could not find route transition for via at (${e.x}, ${e.y}) on route "${o.connectionName}"`);for(let a of r){let c=i[a];i[a]={...c,x:t.x,y:t.y}}if(o.vias=o.vias.map((a)=>a.x!==e.x||a.y!==e.y?a:(s=!0,{x:t.x,y:t.y})),!s)throw Error(`SameNetViaMergerSolver could not find via at (${e.x}, ${e.y}) on route "${o.connectionName}"`);this.dedupeRouteVias(o),n&&this.rebuildVias()}_step(){let e=this.getOffendingViaGroupsBatch();if(e.length===0)return void(this.solved=!0);let t=0;for(let n of e)for(let o of n.remove)this.moveViaTo(o,n.keep,!1),t++;this.rebuildVias(),this.hdRouteSHI=this.createHdRouteSpatialIndex(),this.stats.mergedViaGroups=e.length,this.stats.mergedViaCount=t}getMergedViaHdRoutes(){return this.mergedViaHdRoutes}visualize(){let e={lines:[],points:[],rects:[],circles:[],coordinateSystem:"cartesian",title:"Same Net Via Merger Solver"};for(let t of this.input.obstacles){if(!t.__zLayers)throw Error("SameNetViaMergerSolver found obstacle without zLayers while visualizing");let n="rgba(128, 128, 128, 0.2)",o=t.__zLayers.includes(0),i=t.__zLayers.includes(1);o&&i?n="rgba(128, 0, 128, 0.2)":o?n="rgba(255, 0, 0, 0.2)":i&&(n="rgba(0, 0, 255, 0.2)"),e.rects.push({center:t.center,width:t.width,height:t.height,fill:n,label:`Obstacle (Z: ${t.__zLayers?.join(", ")})`})}for(let t of this.mergedViaHdRoutes){if(t.route.length===0)continue;let n=this.input.colorMap[t.connectionName];if(!n)throw Error(`SameNetViaMergerSolver could not find color for route "${t.connectionName}"`);for(let o=0;o<t.route.length-1;o++){let i=t.route[o],r=t.route[o+1];i.z===r.z&&e.lines.push({points:[{x:i.x,y:i.y},{x:r.x,y:r.y}],strokeColor:i.z===0?"rgba(255, 0, 0, 0.5)":"rgba(0, 0, 255, 0.5)",strokeWidth:t.traceThickness,label:`${t.connectionName} (z=${i.z})`})}for(let o of t.vias)e.circles.push({center:{x:o.x,y:o.y},radius:t.viaDiameter/2,fill:"rgba(255, 0, 255, 0.5)",label:`${t.connectionName} via`});if(t.jumpers&&t.jumpers.length>0){let o=gHe(t.jumpers,{color:n,label:t.connectionName});if(!o.rects||!o.lines)throw Error(`SameNetViaMergerSolver expected jumper graphics for route "${t.connectionName}"`);e.rects.push(...o.rects),e.lines.push(...o.lines)}}return e}},hko={getConflictingRoutesForSegment:()=>[],getConflictingRoutesNearPoint:()=>[]},i1=0.000001,kee=(e,t)=>{let n=`${e.x}:${e.y}:${e.z}`,o=`${t.x}:${t.y}:${t.z}`;return n<o?`${n}|${o}`:`${o}|${n}`},a3t=(e)=>{let t=new Set;for(let n=1;n<e.route.length;n++){let o=e.route[n-1],i=e.route[n];o.z===i.z&&t.add(kee(o,i))}return t},pNe=(e)=>e.filter((t,n)=>{let o=e[n-1];return!o||t.x!==o.x||t.y!==o.y||t.z!==o.z}),ANe=(e)=>{let t=[],n=new Set;for(let o=1;o<e.length;o++){let i=e[o-1],r=e[o];if(i.z===r.z)continue;if(i.toNextSegmentType==="through_obstacle")continue;if(i.x!==r.x||i.y!==r.y)throw Error(`CrossingViaReductionSolver found a layer transition without a via at route point ${o}`);let s=`${r.x}:${r.y}`;n.has(s)||(n.add(s),t.push({x:r.x,y:r.y}))}return t},kQe=(e)=>{let t=[e.connectionName];return e.rootConnectionName&&t.push(e.rootConnectionName),t},_Ne=(e,t,n)=>{let o=kQe(e),i=kQe(t);return o.some((r)=>i.some((s)=>r===s||n.areIdsConnected(r,s)))},mko=(e,t,n)=>{let o=kQe(t);return e.connectedTo.some((i)=>o.some((r)=>i===r||n.areIdsConnected(i,r)))},COt=(e)=>{let t=0;for(let n=1;n<e.length;n++)t+=Math.hypot(e[n].x-e[n-1].x,e[n].y-e[n-1].y);return t},c3t=(e,t)=>{let n=COt(e);if(t<=i1||t>=n-i1)return null;let o=0;for(let i=1;i<e.length;i++){let r=e[i-1],s=e[i],a=Math.hypot(s.x-r.x,s.y-r.y);if(o+a<t-i1){o+=a;continue}let c=t-o;if(c<=i1)return{prefix:e.slice(0,i).map((u)=>({...u})),suffix:e.slice(i-1).map((u)=>({...u})),point:{...r}};if(a-c<=i1)return{prefix:e.slice(0,i+1).map((u)=>({...u})),suffix:e.slice(i).map((u)=>({...u})),point:{...s}};let l=c/a,d={x:r.x+(s.x-r.x)*l,y:r.y+(s.y-r.y)*l,z:r.z};return{prefix:[...e.slice(0,i),d].map((u)=>({...u})),suffix:[d,...e.slice(i)].map((u)=>({...u})),point:d}}return null},pko=(e,t,n,o)=>{let i=T6(e,t,n,o);if(!i)return null;let r=Math.hypot(i.x-e.x,i.y-e.y),s=Math.hypot(i.x-t.x,i.y-t.y),a=Math.hypot(i.x-n.x,i.y-n.y),c=Math.hypot(i.x-o.x,i.y-o.y);return Math.min(r,s,a,c)<=i1?null:r},l3t=(e)=>e.points.some((t)=>t.insideJumperPad||t.toNextSegmentType),IOt=({sections:e,sectionIndex:t,side:n})=>{let o=e[t],i=n==="start"?e[t-1]:e[t+1];if(!i)return null;let r=n==="start"?o.points[0]:o.points.at(-1),s=n==="start"?i.points.at(-1):i.points[0];return r.x!==s.x||r.y!==s.y?null:i.z},d3t=({sections:e,sectionIndex:t,targetZ:n,side:o})=>IOt({sections:e,sectionIndex:t,side:o})===n,u3t=({baseIndexes:e,otherCandidateRoutes:t,ignoredConnectionNames:n,originalRouteSegmentKeys:o})=>{let i=new wk([...t]);return{getConflictingRoutesForSegment:(r,s,a)=>{let c=o.has(kee(r,s));return[...c?[]:e.mutableRoutes.getConflictingRoutesForSegment(r,s,a).filter(({conflictingRoute:l})=>!n.has(l.connectionName)),...c?[]:e.immutableRoutes?.getConflictingRoutesForSegment(r,s,a)??[],...i.getConflictingRoutesForSegment(r,s,a)]},getConflictingRoutesNearPoint:(r,s)=>[...e.mutableRoutes.getConflictingRoutesNearPoint(r,s).filter(({conflictingRoute:a})=>!n.has(a.connectionName)),...e.immutableRoutes?.getConflictingRoutesNearPoint(r,s)??[],...i.getConflictingRoutesNearPoint(r,s)]}},Ako=class extends xL{input;obstacleSHI;traceMargin;obstacleMargin;reducedHdRoutes;getSolverName(){return"CrossingViaReductionSolver"}constructor(e){super(),this.input={...e,obstacles:Jte(e.obstacles,e.layerCount)},this.traceMargin=e.traceMargin??0.1,this.obstacleMargin=e.obstacleMargin??0.15,this.reducedHdRoutes=structuredClone([...e.inputHdRoutes]),this.obstacleSHI=new _He("flatbush",[...this.input.obstacles]),this.MAX_ITERATIONS=1e6}collapseDetourSection({route:e,section:t,targetZ:n}){let o=t.points.map((r)=>({...r,z:n})),i=pNe([...e.route.slice(0,t.startIndex).map((r)=>({...r})),...o,...e.route.slice(t.endIndex+1).map((r)=>({...r}))]);return{...e,route:i,vias:ANe(i)}}relocateTransitionVia({route:e,section:t,targetZ:n,side:o,newViaDistance:i}){let r=c3t(t.points,i);if(!r)return null;let s=o==="start"?n:t.z,a=o==="start"?t.z:n,c=[...r.prefix.map((d)=>({...d,z:s})),...r.suffix.map((d)=>({...d,z:a}))],l=pNe([...e.route.slice(0,t.startIndex).map((d)=>({...d})),...c,...e.route.slice(t.endIndex+1).map((d)=>({...d}))]);return{route:{...e,route:l,vias:ANe(l)},relocatedVia:{x:r.point.x,y:r.point.y}}}relocateTransitionVias({route:e,sections:t,crossingGroups:n,detourZ:o,detourTraceThickness:i}){let r=new Map;for(let d of n){let u=r.get(d.transitionSectionIndex)??[];u.push(d),r.set(d.transitionSectionIndex,u)}let s=[],a=[],c=e.viaDiameter/2+i/2+this.traceMargin+i1;for(let[d,u]of r){if(u.length!==1)return null;let h=t[d],A=u[0];if(!d3t({sections:t,sectionIndex:d,targetZ:o,side:A.side}))return null;let m=A.side==="start"?Math.max(...A.crossingDistances)+c:Math.min(...A.crossingDistances)-c,p=c3t(h.points,m);if(!p)return null;let g=A.side==="start"?o:h.z,_=A.side==="start"?h.z:o;s.push({section:h,points:[...p.prefix.map((f)=>({...f,z:g})),...p.suffix.map((f)=>({...f,z:_}))]}),a.push({x:p.point.x,y:p.point.y})}let l=e.route.map((d)=>({...d}));for(let d of s.sort((u,h)=>h.section.startIndex-u.section.startIndex))l=[...l.slice(0,d.section.startIndex),...d.points,...l.slice(d.section.endIndex+1)];return l=pNe(l),{route:{...e,route:l,vias:ANe(l)},relocatedVias:a}}routeIsClear(e,t,n){for(let o of fee(e)){for(let i=1;i<o.points.length;i++){let r=o.points[i-1],s=o.points[i];if(!n.has(kee(r,s))&&this.input.outline&&mge({start:r,end:s,polygon:[...this.input.outline],margin:e.traceThickness/2}))return!1}if(!mV({currentSection:o,targetZ:o.z,route:e,hdRouteSHI:t,obstacleSHI:this.obstacleSHI,connMap:this.input.connMap,defaultTraceThickness:e.traceThickness,obstacleMargin:this.obstacleMargin,traceMargin:this.traceMargin,shouldCheckStaticGeometryForSegment:(i,r)=>!n.has(kee(i,r))}))return!1}return!0}relocatedViaIsClear(e,t,n){let o=e.viaDiameter/2;for(let s=0;s<this.input.layerCount;s++)if(n.getConflictingRoutesNearPoint({...t,z:s},o+this.traceMargin).some(({conflictingRoute:a})=>!_Ne(e,a,this.input.connMap)))return!1;let i=o+this.obstacleMargin,r=this.obstacleSHI.searchArea(t.x,t.y,2*i,2*i);for(let s of r)if(!mko(s,e,this.input.connMap)&&HE(t,t,s)<i)return!1;if(this.input.outline){for(let s=0;s<this.input.outline.length;s++)if(Da(t,this.input.outline[s],this.input.outline[(s+1)%this.input.outline.length])<o+this.traceMargin)return!1}return!0}changedSectionsAreStaticallyClear(e,t){for(let n of fee(e))if(n.points.some((o,i)=>{let r=n.points[i-1];return r!==void 0&&!t.has(kee(r,o))})){if(this.input.outline){for(let o=1;o<n.points.length;o++)if(mge({start:n.points[o-1],end:n.points[o],polygon:[...this.input.outline],margin:e.traceThickness/2}))return!1}if(!mV({currentSection:n,targetZ:n.z,route:e,hdRouteSHI:hko,obstacleSHI:this.obstacleSHI,connMap:this.input.connMap,defaultTraceThickness:e.traceThickness,obstacleMargin:Math.min(this.obstacleMargin,0.1),traceMargin:this.traceMargin}))return!1}return!0}candidateIsClear(e,t){let n=[{routeIndex:e.detourRouteIndex,route:e.detourRoute},...e.transitionUpdates],o=new Set(n.map(({routeIndex:s})=>this.reducedHdRoutes[s].connectionName)),i=a3t(this.reducedHdRoutes[e.detourRouteIndex]),r=u3t({baseIndexes:t,otherCandidateRoutes:e.transitionUpdates.map(({route:s})=>s),ignoredConnectionNames:o,originalRouteSegmentKeys:i});if(this.stats.candidateClearanceChecks=(this.stats.candidateClearanceChecks??0)+1,!this.routeIsClear(e.detourRoute,r,i))return!1;for(let s of e.transitionUpdates){let a=a3t(this.reducedHdRoutes[s.routeIndex]),c=u3t({baseIndexes:t,otherCandidateRoutes:n.filter(({routeIndex:l})=>l!==s.routeIndex).map(({route:l})=>l),ignoredConnectionNames:o,originalRouteSegmentKeys:a});if(!this.routeIsClear(s.route,c,a)||s.relocatedVias.some((l)=>!this.relocatedViaIsClear(s.route,l,c)))return!1}return this.changedSectionsAreStaticallyClear(e.detourRoute,i)}candidateRoutesHaveNoExternalCopperConflicts(e,t){let n=[e.detourRoute,...e.transitionUpdates.map(({route:r})=>r)],o=new Set(n.map(({connectionName:r})=>r)),i=[t.mutableRoutes,...t.immutableRoutes?[t.immutableRoutes]:[]];for(let r of n)for(let s of fee(r))for(let a=1;a<s.points.length;a++){let c=s.points[a-1],l=s.points[a];for(let d of i)if(d.getConflictingRoutesForSegment(c,l,r.traceThickness/2+this.traceMargin).some(({conflictingRoute:u})=>!o.has(u.connectionName)&&!_Ne(r,u,this.input.connMap)))return!1}return!0}buildTransitionSegmentIndex(e,t){let n=[];for(let i=0;i<this.reducedHdRoutes.length;i++){if(this.reducedHdRoutes[i].jumpers?.length)continue;let r=e[i];for(let s=0;s<r.length;s++){let a=r[s];if(!l3t(a))for(let c of["start","end"]){let l=IOt({sections:r,sectionIndex:s,side:c});if(l===null||l===a.z)continue;if(!t.has(`${a.z}:${l}`))continue;let d=0;for(let u=1;u<a.points.length;u++){let h=a.points[u-1],A=a.points[u],m=Math.hypot(A.x-h.x,A.y-h.y);m>i1&&n.push({routeIndex:i,sectionIndex:s,side:c,adjacentZ:l,start:h,end:A,distanceFromSectionStart:d}),d+=m}}}}if(this.stats.transitionSegmentsIndexed=(this.stats.transitionSegmentsIndexed??0)+n.length,n.length===0)return null;let o=new _Ot(n.length);for(let i of n)o.insert(i,Math.min(i.start.x,i.end.x),Math.min(i.start.y,i.end.y),Math.max(i.start.x,i.end.x),Math.max(i.start.y,i.end.y));return o.finish(),o}getIndexedCrossingGroups({detourRouteIndex:e,detourSection:t,targetZ:n,transitionSegmentIndex:o}){let i=new Map;for(let r=1;r<t.points.length;r++){let s=t.points[r-1],a=t.points[r];if(Math.hypot(a.x-s.x,a.y-s.y)<=i1)continue;this.stats.indexedDetourSegmentQueries=(this.stats.indexedDetourSegmentQueries??0)+1;let c=o.search(Math.min(s.x,a.x)-i1,Math.min(s.y,a.y)-i1,Math.max(s.x,a.x)+i1,Math.max(s.y,a.y)+i1);for(let l of c){if(l.routeIndex===e||l.start.z!==n||l.adjacentZ!==t.z)continue;this.stats.exactSegmentIntersectionChecks=(this.stats.exactSegmentIntersectionChecks??0)+1;let d=pko(l.start,l.end,s,a);if(d===null)continue;let u=`${l.routeIndex}:${l.sectionIndex}:${l.side}`,h=i.get(u);h||(h={transitionRouteIndex:l.routeIndex,transitionSectionIndex:l.sectionIndex,side:l.side,crossingDistances:[]},i.set(u,h)),h.crossingDistances.push(l.distanceFromSectionStart+d)}}return[...i.values()].sort((r,s)=>r.transitionRouteIndex!==s.transitionRouteIndex?r.transitionRouteIndex-s.transitionRouteIndex:r.transitionSectionIndex!==s.transitionSectionIndex?r.transitionSectionIndex-s.transitionSectionIndex:r.side===s.side?0:r.side==="start"?-1:1)}tryCreateCandidate({detourRouteIndex:e,detourSection:t,targetZ:n,transitionRouteIndex:o,transitionSection:i,transitionSections:r,transitionSectionIndex:s,side:a,crossingDistances:c,baseClearanceIndexes:l}){if(!d3t({sections:r,sectionIndex:s,targetZ:t.z,side:a}))return null;let d=this.reducedHdRoutes[e],u=this.reducedHdRoutes[o];if(c.length===0)return null;let h=u.viaDiameter/2+d.traceThickness/2+this.traceMargin+i1,A=a==="start"?Math.max(...c)+h:Math.min(...c)-h,m=this.relocateTransitionVia({route:u,section:i,targetZ:t.z,side:a,newViaDistance:A});if(!m)return null;let p=this.collapseDetourSection({route:d,section:t,targetZ:n});if(d.vias.length+u.vias.length-p.vias.length-m.route.vias.length!==2)return null;let g={detourRouteIndex:e,detourRoute:p,transitionUpdates:[{routeIndex:o,route:m.route,relocatedVias:[m.relocatedVia]}]};return this.candidateIsClear(g,l)?g:null}tryCreateMultiCrossingCandidate({detourRouteIndex:e,detourSection:t,targetZ:n,crossingGroups:o,sectionsByRoute:i,baseClearanceIndexes:r}){if(o.length<2)return null;let s=this.reducedHdRoutes[e],a=[],c=new Map;for(let u of o){let h=c.get(u.transitionRouteIndex)??[];h.push(u),c.set(u.transitionRouteIndex,h)}for(let[u,h]of c){let A=this.reducedHdRoutes[u],m=this.relocateTransitionVias({route:A,sections:i[u],crossingGroups:h,detourZ:t.z,detourTraceThickness:s.traceThickness});if(!m)return null;a.push({routeIndex:u,route:m.route,relocatedVias:m.relocatedVias})}let l=this.collapseDetourSection({route:s,section:t,targetZ:n});if(s.vias.length+[...c.keys()].reduce((u,h)=>u+this.reducedHdRoutes[h].vias.length,0)-(l.vias.length+a.reduce((u,{route:h})=>u+h.vias.length,0))!==2)return null;this.stats.multiCrossingCandidates=(this.stats.multiCrossingCandidates??0)+1;let d={detourRouteIndex:e,detourRoute:l,transitionUpdates:a};return this.candidateIsClear(d,r)?this.candidateRoutesHaveNoExternalCopperConflicts(d,r)?(this.stats.multiCrossingReductions=(this.stats.multiCrossingReductions??0)+1,this.stats.transitionRoutesMovedByMultiCrossingReductions=(this.stats.transitionRoutesMovedByMultiCrossingReductions??0)+a.length,d):(this.stats.multiCrossingPreexistingConflictRejections=(this.stats.multiCrossingPreexistingConflictRejections??0)+1,null):null}findCrossingReduction(){let e=this.reducedHdRoutes.map((r)=>fee(r)),t=[],n=new Set;for(let r=0;r<this.reducedHdRoutes.length;r++){if(this.reducedHdRoutes[r].jumpers?.length)continue;let s=e[r];for(let a=1;a<s.length-1;a++){let c=s[a-1],l=s[a],d=s[a+1];c.z!==d.z||c.z===l.z||l3t(l)||(t.push({routeIndex:r,section:l,targetZ:c.z}),n.add(`${c.z}:${l.z}`))}}if(t.length===0)return null;let o=this.buildTransitionSegmentIndex(e,n);if(!o)return null;let i=null;for(let r of t){let{routeIndex:s,section:a}=r,c=this.reducedHdRoutes[s],l=this.getIndexedCrossingGroups({detourRouteIndex:s,detourSection:a,targetZ:r.targetZ,transitionSegmentIndex:o}).filter(({transitionRouteIndex:h})=>{let A=this.reducedHdRoutes[h];return!A.jumpers?.length&&!_Ne(c,A,this.input.connMap)}),d=new Map;for(let h of l){let A=`${h.transitionRouteIndex}:${h.transitionSectionIndex}`,m=d.get(A)??[];m.push(h),d.set(A,m)}if(d.size>1){i??={mutableRoutes:new wk(this.reducedHdRoutes),immutableRoutes:this.input.otherHdRoutes?.length?new wk([...this.input.otherHdRoutes]):null};let h=[{groups:[],movement:0}],A=(m)=>{let p=this.reducedHdRoutes[m.transitionRouteIndex],g=e[m.transitionRouteIndex][m.transitionSectionIndex],_=p.viaDiameter/2+c.traceThickness/2+this.traceMargin+i1,f=m.side==="start"?Math.max(...m.crossingDistances)+_:Math.min(...m.crossingDistances)-_;return m.side==="start"?f:COt(g.points)-f};for(let m of d.values()){let p=m.map((g)=>({group:g,movement:A(g)})).sort((g,_)=>g.movement-_.movement);h=h.flatMap((g)=>p.map((_)=>({groups:[...g.groups,_.group],movement:g.movement+_.movement}))).sort((g,_)=>g.movement-_.movement).slice(0,4)}for(let m of h){let p=this.tryCreateMultiCrossingCandidate({detourRouteIndex:s,detourSection:a,targetZ:r.targetZ,crossingGroups:m.groups,sectionsByRoute:e,baseClearanceIndexes:i});if(p)return p}continue}let u=d.values().next().value??[];for(let h of u){let A=h.transitionRouteIndex,m=e[A],p=m[h.transitionSectionIndex];i??={mutableRoutes:new wk(this.reducedHdRoutes),immutableRoutes:this.input.otherHdRoutes?.length?new wk([...this.input.otherHdRoutes]):null};let g=this.tryCreateCandidate({detourRouteIndex:s,detourSection:a,targetZ:r.targetZ,transitionRouteIndex:A,transitionSection:p,transitionSections:m,transitionSectionIndex:h.transitionSectionIndex,side:h.side,crossingDistances:h.crossingDistances,baseClearanceIndexes:i});if(g)return g}}return null}_step(){let e=this.findCrossingReduction();if(e){this.reducedHdRoutes[e.detourRouteIndex]=e.detourRoute;for(let t of e.transitionUpdates)this.reducedHdRoutes[t.routeIndex]=t.route;this.stats.crossingViaReductions=(this.stats.crossingViaReductions??0)+1,this.stats.viasRemovedByCrossingReductions=(this.stats.viasRemovedByCrossingReductions??0)+2}else this.solved=!0}getReducedHdRoutes(){return this.reducedHdRoutes}visualize(){let e={lines:[],circles:[],rects:[],coordinateSystem:"cartesian",title:"Crossing Via Reduction Solver"};for(let t of this.input.obstacles)e.rects.push({center:t.center,width:t.width,height:t.height,fill:"rgba(128, 128, 128, 0.2)"});for(let t of this.reducedHdRoutes){for(let n=1;n<t.route.length;n++){let o=t.route[n-1],i=t.route[n];o.z===i.z&&e.lines.push({points:[o,i],strokeColor:o.z===0?"#d32f2f":"#3367a8",strokeWidth:t.traceThickness,label:`${t.connectionName} (z=${o.z})`})}for(let n of t.vias)e.circles.push({center:n,radius:t.viaDiameter/2,fill:"#ff20d6",label:`${t.connectionName} via`})}return e}},pge=0.000001,gNe=(e,t)=>Math.abs(e.x-t.center.x)<=t.width/2+pge&&Math.abs(e.y-t.center.y)<=t.height/2+pge,h3t=(e)=>(e.__zLayers?.length??e.layers?.length??0)>1,HI=class extends xL{constructor(e){if(super(),this.simplificationConfig=e,this.simplificationConfig={...e,obstacles:Jte(e.obstacles,e.layerCount)},this.hdRoutes=this.markThroughObstacleSegments(e.hdRoutes),e.preserveRouteEndpoints){let t=new Map;for(let n of e.hdRoutes){let o=n.route[0],i=n.route.at(-1);if(!o||!i)throw Error(`TraceSimplificationSolver cannot preserve endpoints for empty route "${n.connectionName}"`);if(t.has(n.connectionName))throw Error(`TraceSimplificationSolver cannot preserve endpoints for duplicate route "${n.connectionName}"`);t.set(n.connectionName,{start:{...o},end:{...i}})}this.preservedRouteEndpoints=t}this.MAX_ITERATIONS=1e8}simplificationConfig;getSolverName(){return"TraceSimplificationSolver"}hdRoutes=[];preservedRouteEndpoints;simplificationPipelineLoops=0;MAX_SIMPLIFICATION_PIPELINE_LOOPS=2;PHASE_ORDER=["via_removal","crossing_via_reduction","via_merging","path_simplification"];currentPhase="via_removal";extractResult=null;get simplifiedHdRoutes(){return this.hdRoutes}validatePreservedRouteEndpoints(e){if(!this.preservedRouteEndpoints)return;if(e.length!==this.preservedRouteEndpoints.size)throw Error(`TraceSimplificationSolver changed the preserved route set (expected ${this.preservedRouteEndpoints.size}, got ${e.length})`);let t=new Set,n=(o,i)=>Math.abs(o.x-i.x)<=pge&&Math.abs(o.y-i.y)<=pge&&o.z===i.z;for(let o of e){if(t.has(o.connectionName))throw Error(`TraceSimplificationSolver produced duplicate preserved route "${o.connectionName}"`);t.add(o.connectionName);let i=this.preservedRouteEndpoints.get(o.connectionName),r=o.route[0],s=o.route.at(-1);if(!(i&&r&&s&&n(r,i.start)&&n(s,i.end)))throw Error(`TraceSimplificationSolver changed a preserved endpoint for route "${o.connectionName}"`)}}isSameNetObstacle(e,t){return t.connectedTo.some((n)=>n===e.connectionName||n===e.rootConnectionName||this.simplificationConfig.connMap.areIdsConnected(e.connectionName,n)||e.rootConnectionName!==void 0&&this.simplificationConfig.connMap.areIdsConnected(e.rootConnectionName,n))}getSameNetObstacleForSegment(e,t,n){return this.simplificationConfig.obstacles.find((o)=>h3t(o)&&this.isSameNetObstacle(e,o)&&gNe(t,o)&&gNe(n,o))}isViaInsideSameNetObstacle(e,t){return this.simplificationConfig.obstacles.some((n)=>h3t(n)&&this.isSameNetObstacle(e,n)&&gNe(t,n))}markThroughObstacleSegments(e){return e.map((t)=>({...t,route:t.route.map((n,o,i)=>{let r=i[o+1],s=r&&n.z!==r.z&&this.getSameNetObstacleForSegment(t,n,r);if(s)return{...n,toNextSegmentType:"through_obstacle",...s.circuitJsonMetadata?{toNextSegmentCircuitJsonMetadata:s.circuitJsonMetadata}:{}};let a={...n};return delete a.toNextSegmentType,delete a.toNextSegmentCircuitJsonMetadata,a}),vias:t.vias.filter((n)=>!this.isViaInsideSameNetObstacle(t,n))}))}_step(){if(this.simplificationPipelineLoops>=this.MAX_SIMPLIFICATION_PIPELINE_LOOPS)this.solved=!0;else{if(this.activeSubSolver){if(this.activeSubSolver.step(),!this.activeSubSolver.failed&&!this.activeSubSolver.solved)return;if(this.activeSubSolver.solved){if(this.extractResult){let e=this.extractResult(this.activeSubSolver);this.validatePreservedRouteEndpoints(e),this.hdRoutes=this.markThroughObstacleSegments(e)}if(this.activeSubSolver=null,this.extractResult=null,this.currentPhase==="via_removal"?this.currentPhase=this.simplificationConfig.enableCrossingViaReduction?"crossing_via_reduction":"via_merging":this.currentPhase==="crossing_via_reduction"?this.currentPhase="via_merging":this.currentPhase==="via_merging"?this.currentPhase="path_simplification":(this.currentPhase="via_removal",this.simplificationPipelineLoops++),this.simplificationPipelineLoops>=this.MAX_SIMPLIFICATION_PIPELINE_LOOPS)return void(this.solved=!0)}else if(this.activeSubSolver.failed)return this.failed=!0,void(this.error=this.activeSubSolver.error??"Sub-solver failed without error message")}if(!this.activeSubSolver&&!this.solved)switch(this.currentPhase){case"via_removal":this.activeSubSolver=new yOt({enableRoutedTraceDetours:this.simplificationConfig.enableRoutedTraceDetours,unsimplifiedHdRoutes:this.hdRoutes,otherHdRoutes:[...this.simplificationConfig.otherHdRoutes??[]],obstacles:[...this.simplificationConfig.obstacles],colorMap:{...this.simplificationConfig.colorMap},layerCount:this.simplificationConfig.layerCount,connMap:this.simplificationConfig.connMap,outline:this.simplificationConfig.outline?[...this.simplificationConfig.outline]:void 0,geometryShortcutTraceMargin:0.1,geometryShortcutObstacleMargin:this.simplificationConfig.minTraceToPadEdgeClearance??0.15,enableGeometryShortcuts:this.simplificationPipelineLoops>0,enableObstacleDetourShortcuts:this.simplificationConfig.enableCrossingViaReduction===!0&&this.simplificationPipelineLoops>0,preserveRouteEndpoints:this.simplificationConfig.preserveRouteEndpoints,terminalLayerIndicesByPcbPortId:this.simplificationConfig.terminalLayerIndicesByPcbPortId}),this.extractResult=(e)=>e.getOptimizedHdRoutes()??[];break;case"crossing_via_reduction":this.activeSubSolver=new Ako({inputHdRoutes:this.hdRoutes,otherHdRoutes:[...this.simplificationConfig.otherHdRoutes??[]],obstacles:[...this.simplificationConfig.obstacles],connMap:this.simplificationConfig.connMap,layerCount:this.simplificationConfig.layerCount,outline:this.simplificationConfig.outline?[...this.simplificationConfig.outline]:void 0,traceMargin:0.1,obstacleMargin:this.simplificationConfig.minTraceToPadEdgeClearance??0.15}),this.extractResult=(e)=>e.getReducedHdRoutes();break;case"via_merging":this.activeSubSolver=new fHe({inputHdRoutes:this.hdRoutes,otherHdRoutes:[...this.simplificationConfig.otherHdRoutes??[]],netByConnectionName:this.simplificationConfig.netByConnectionName,obstacles:[...this.simplificationConfig.obstacles],colorMap:{...this.simplificationConfig.colorMap},layerCount:this.simplificationConfig.layerCount,connMap:this.simplificationConfig.connMap,outline:this.simplificationConfig.outline?[...this.simplificationConfig.outline]:void 0,preserveRouteEndpoints:this.simplificationConfig.preserveRouteEndpoints}),this.extractResult=(e)=>e.getMergedViaHdRoutes()??[];break;case"path_simplification":this.activeSubSolver=new cko({unsimplifiedHdRoutes:this.hdRoutes,otherHdRoutes:[...this.simplificationConfig.otherHdRoutes??[]],obstacles:[...this.simplificationConfig.obstacles],connMap:this.simplificationConfig.connMap,colorMap:{...this.simplificationConfig.colorMap},outline:this.simplificationConfig.outline?[...this.simplificationConfig.outline]:void 0,minBoardEdgeClearance:this.simplificationConfig.minBoardEdgeClearance,defaultViaDiameter:this.simplificationConfig.defaultViaDiameter,useTraceWidthAwareClearance:this.simplificationConfig.useTraceWidthAwareClearance,enableVertexShortcuts:this.simplificationConfig.enableVertexShortcuts}),this.extractResult=(e)=>e.simplifiedHdRoutes;break;default:this.failed=!0,this.error=`Unknown phase: ${this.currentPhase}`}}}visualize(){if(this.activeSubSolver)return this.activeSubSolver.visualize();let e={lines:[],points:[],rects:[],circles:[],coordinateSystem:"cartesian",title:"Trace Simplification Solver"};for(let t of this.simplificationConfig.obstacles){let n="rgba(128, 128, 128, 0.2)",o=t.__zLayers?.includes(0),i=t.__zLayers?.includes(1);o&&i?n="rgba(128, 0, 128, 0.2)":o?n="rgba(255, 0, 0, 0.2)":i&&(n="rgba(0, 0, 255, 0.2)"),e.rects.push({center:t.center,width:t.width,height:t.height,fill:n,label:`Obstacle (Z: ${t.__zLayers?.join(", ")})`})}for(let t of this.simplificationConfig.otherHdRoutes??[]){for(let n=0;n<t.route.length-1;n++){let o=t.route[n],i=t.route[n+1];o.z===i.z&&e.lines.push({points:[{x:o.x,y:o.y},{x:i.x,y:i.y}],strokeColor:o.z===0?"rgba(160, 32, 32, 0.55)":"rgba(32, 32, 160, 0.55)",strokeWidth:t.traceThickness,strokeDash:[0.08,0.08],label:`${t.connectionName} immutable (z=${o.z})`})}for(let n of t.vias)e.circles.push({center:{x:n.x,y:n.y},radius:t.viaDiameter/2,fill:"rgba(96, 96, 96, 0.45)",label:`${t.connectionName} immutable via`})}for(let t of this.hdRoutes)if(t.route.length!==0){for(let n=0;n<t.route.length-1;n++){let o=t.route[n],i=t.route[n+1];o.z===i.z&&e.lines.push({points:[{x:o.x,y:o.y},{x:i.x,y:i.y}],strokeColor:o.z===0?"red":"blue",strokeWidth:t.traceThickness,label:`${t.connectionName} (z=${o.z})`})}for(let n of t.vias)e.circles.push({center:{x:n.x,y:n.y},radius:t.viaDiameter/2,fill:"rgba(255, 0, 255, 0.5)",label:`${t.connectionName} via`});if(t.jumpers&&t.jumpers.length>0){let n=gHe(t.jumpers,{color:"orange",label:t.connectionName});e.rects.push(...n.rects??[]),e.lines.push(...n.lines??[])}}return e}},Lee=class{tree;constructor(e=9){this.tree=new lL(e)}insert(e,t,n,o,i){this.tree.insert({minX:t,minY:n,maxX:o,maxY:i,data:e})}bulkLoad(e){let t=e.map(({item:n,minX:o,minY:i,maxX:r,maxY:s})=>({minX:o,minY:i,maxX:r,maxY:s,data:n}));this.tree.load(t)}search(e,t,n,o){return this.tree.search({minX:e,minY:t,maxX:n,maxY:o}).map((i)=>i.data)}clear(){this.tree.clear()}},bOt=class{index;items=[];currentIndex=0;capacity;constructor(e){this.capacity=Math.max(1,e),this.index=new Vm(this.capacity)}insert(e,t,n,o,i){if(this.currentIndex>=this.index.numItems)throw Error("Exceeded initial capacity");this.items[this.currentIndex]=e,this.index.add(t,n,o,i),this.currentIndex++}finish(){this.index.finish()}search(e,t,n,o){return this.index.search(e,t,n,o).map((i)=>this.items[i]||null).filter(Boolean)}clear(){this.items=[],this.currentIndex=0,this.index=new Vm(this.capacity)}},Mfe=class{idx;storage=[];constructor(e="native",t=[]){e==="flatbush"?t.length===0?(this.idx=new Lee,e="rbush"):this.idx=new bOt(t.length):this.idx=e==="rbush"?new Lee:new class{shi=new _ko(t);insert(n){}search(n,o,i,r){let s=(n+i)/2,a=(o+r)/2,c=i-n,l=r-o;return this.shi.getNodesInArea(s,a,c,l)}clear(){}},t.forEach((n)=>this.insert(n)),e==="flatbush"&&t.length>0&&this.idx.finish?.()}insert(e){this.storage.push(e),this.idx.insert(e,e.center.x-e.width/2,e.center.y-e.height/2,e.center.x+e.width/2,e.center.y+e.height/2)}search(e){return this.idx.search(e.minX,e.minY,e.maxX,e.maxY)}searchArea(e,t,n,o){return this.search({minX:e-n/2,minY:t-o/2,maxX:e+n/2,maxY:t+o/2})}},_ko=class{constructor(e){this.obstacles=e,this.buckets=new Map;for(let t=0;t<e.length;t++){let n=e[t],o=n.center.x-n.width/2,i=n.center.y-n.height/2,r=n.center.x+n.width/2,s=n.center.y+n.height/2;for(let a=o;a<=r;a+=this.CELL_SIZE)for(let c=i;c<=s;c+=this.CELL_SIZE){let l=this.getBucketKey(a,c),d=this.buckets.get(l);d?d.push([n,t]):this.buckets.set(l,[[n,t]])}}}obstacles;buckets;CELL_SIZE=0.4;getBucketKey(e,t){return`${Math.floor(e/this.CELL_SIZE)}x${Math.floor(t/this.CELL_SIZE)}`}getNodesInArea(e,t,n,o){let i=[],r=new Set,s=t-o/2,a=e+n/2,c=t+o/2;for(let l=e-n/2;l<=a;l+=this.CELL_SIZE)for(let d=s;d<=c;d+=this.CELL_SIZE){let u=this.getBucketKey(l,d),h=this.buckets.get(u)||[];for(let A of h)r.has(A[1])||(r.add(A[1]),i.push(A[0]))}return i}},fx=0.000000001,TU=class extends Oi{getSolverName(){return"TraceWidthSolver"}hdRoutes;hdRoutesWithWidths=[];nominalTraceWidth;minTraceWidth;obstacleMargin;minTraceToHoleEdgeClearance;TRACE_WIDTH_SCHEDULE;connectionNominalTraceWidthMap;unprocessedRoutes=[];processedRoutes=[];currentTrace=null;cursorPosition=null;currentTraceSegmentIndex=0;currentTraceSegmentT=0;currentScheduleIndex=0;currentTargetWidth=0;hasInsufficientClearance=!1;lastCollidingObstacles=[];lastCollidingRoutes=[];lastClearance=1/0;obstacles=[];obstacleSHI;hdRouteSHI;connMap;colorMap;constructor(e){super(),this.MAX_ITERATIONS=1e6,this.hdRoutes=[...e.hdRoutes],this.minTraceWidth=e.minTraceWidth,this.obstacleMargin=e.obstacleMargin??0.15,this.minTraceToHoleEdgeClearance=e.minTraceToHoleEdgeClearance,this.nominalTraceWidth=0,this.TRACE_WIDTH_SCHEDULE=[],this.unprocessedRoutes=[...this.hdRoutes],this.connMap=e.connMap,this.colorMap=e.colorMap;let t=e.layerCount;this.obstacles=SU(e.obstacles??[],t),this.connectionNominalTraceWidthMap=new Map;for(let n of e.connection)n.nominalTraceWidth!==void 0&&this.connectionNominalTraceWidthMap.set(n.name,n.nominalTraceWidth);this.obstacles.length>0&&(this.obstacleSHI=new Mfe("flatbush",this.obstacles)),this.hdRouteSHI=new k_e(this.hdRoutes)}getNominalTraceWidthForRoute(e){let t=this.connectionNominalTraceWidthMap.get(e.connectionName);return t!==void 0?t:e.rootConnectionName?this.connectionNominalTraceWidthMap.get(e.rootConnectionName):void 0}_step(){if(!this.currentTrace){let t=this.unprocessedRoutes.shift();if(!t)return this.hdRoutesWithWidths=this.processedRoutes,void(this.solved=!0);let n=this.getNominalTraceWidthForRoute(t);if(n===void 0){let i=t.traceThickness??this.minTraceWidth;return this.processedRoutes.push(this.createRouteWithWidth(t,i)),void(this.currentTrace=null)}this.currentTrace=t,this.nominalTraceWidth=n;let o=(this.nominalTraceWidth+this.minTraceWidth)/2;return this.TRACE_WIDTH_SCHEDULE=[this.nominalTraceWidth,o],this.currentTrace.route.length<2?(this.processedRoutes.push(this.createRouteWithWidth(this.currentTrace,this.minTraceWidth)),void(this.currentTrace=null)):(this.currentScheduleIndex=0,this.currentTargetWidth=this.TRACE_WIDTH_SCHEDULE[0],void this.initializeCursor())}let e=this.stepCursorForward();(e?this.getClearanceForSegment(this.cursorPosition,this.cursorPosition):this.getMinimumRouteClearance())<this.currentTargetWidth/2+this.obstacleMargin?(this.hasInsufficientClearance=!0,this.currentScheduleIndex++,this.currentScheduleIndex<this.TRACE_WIDTH_SCHEDULE.length?(this.currentTargetWidth=this.TRACE_WIDTH_SCHEDULE[this.currentScheduleIndex],this.initializeCursor()):this.finalizeCurrentTrace(this.minTraceWidth)):e||this.finalizeCurrentTrace(this.currentTargetWidth)}initializeCursor(){if(!this.currentTrace)return;let e=this.currentTrace.route[0];this.cursorPosition={...e},this.currentTraceSegmentIndex=0,this.currentTraceSegmentT=0,this.hasInsufficientClearance=!1}stepCursorForward(){if(!this.currentTrace||!this.cursorPosition)return!1;let e=this.currentTrace.route,t=0.1;for(;t>0;){if(this.currentTraceSegmentIndex>=e.length-1)return!1;let n=e[this.currentTraceSegmentIndex],o=e[this.currentTraceSegmentIndex+1];if(n.insideJumperPad&&o.insideJumperPad){this.currentTraceSegmentIndex++,this.currentTraceSegmentT=0;continue}let i=o.x-n.x,r=o.y-n.y,s=Math.sqrt(i*i+r*r);if(s===0){this.currentTraceSegmentIndex++,this.currentTraceSegmentT=0;continue}let a=this.currentTraceSegmentT*s,c=s-a;if(t<=c){let l=a+t;return this.currentTraceSegmentT=l/s,this.cursorPosition={x:n.x+i*this.currentTraceSegmentT,y:n.y+r*this.currentTraceSegmentT,z:n.z},!0}if(t-=c,this.currentTraceSegmentIndex++,this.currentTraceSegmentT=0,this.currentTraceSegmentIndex>=e.length-1){let l=e[e.length-1];return this.cursorPosition={...l},!1}}return!0}isObstacleOwnJumperPad(e){if(!this.currentTrace?.jumpers)return!1;for(let t of this.currentTrace.jumpers){let n=Math.sqrt((e.center.x-t.start.x)**2+(e.center.y-t.start.y)**2),o=Math.sqrt((e.center.x-t.end.x)**2+(e.center.y-t.end.y)**2),i=Math.max(e.width,e.height)/2+0.01;if(n<i||o<i)return!0}return!1}getMinimumRouteClearance(){if(!this.currentTrace)return 1/0;let e=1/0,t=this.currentTrace.route;for(let n=0;n<t.length-1;n++){let o=t[n],i=t[n+1];o.z===i.z&&(o.insideJumperPad&&i.insideJumperPad||o.toNextSegmentType!=="through_obstacle"&&(e=Math.min(e,this.getClearanceForSegment(o,i))))}return e}getClearanceForSegment(e,t){if(!this.currentTrace)return 1/0;let n=this.currentTrace.rootConnectionName??this.currentTrace.connectionName,o=this.currentTargetWidth/2+this.obstacleMargin,i=1/0;this.lastCollidingObstacles=[],this.lastCollidingRoutes=[];let r=this.currentTargetWidth/2+Math.max(this.obstacleMargin,this.minTraceToHoleEdgeClearance??0),s=new Set(this.obstacleSHI?.search({minX:Math.min(e.x,t.x)-r,minY:Math.min(e.y,t.y)-r,maxX:Math.max(e.x,t.x)+r,maxY:Math.max(e.y,t.y)+r}));for(let c of this.obstacles)c.ccwRotationDegrees&&s.add(c);for(let c of s){if(!this.isObstacleOnPointLayer(c,e))continue;if(N6(c,this.currentTrace,this.connMap))continue;if(c.obstacleId&&this.connMap?.areIdsConnected(n,c.obstacleId))continue;if(this.isObstacleOwnJumperPad(c))continue;let l=-(c.ccwRotationDegrees??0)*Math.PI/180,d=Math.cos(l),u=Math.sin(l),h={x:(e.x-c.center.x)*d-(e.y-c.center.y)*u,y:(e.x-c.center.x)*u+(e.y-c.center.y)*d},A={x:(t.x-c.center.x)*d-(t.y-c.center.y)*u,y:(t.x-c.center.x)*u+(t.y-c.center.y)*d},m=(c.isNonPlatedHole&&c.shape==="circle"?q8(e,t,{...c.center,radius:c.width/2}):HE(h,A,{center:{x:0,y:0},width:c.width,height:c.height}))-((c.isNonPlatedHole?this.minTraceToHoleEdgeClearance??this.obstacleMargin:this.obstacleMargin)-this.obstacleMargin);i=Math.min(i,m),m<o&&this.lastCollidingObstacles.push(c)}let a=this.hdRouteSHI.getConflictingRoutesForSegment(e,t,o);for(let{conflictingRoute:c}of a){let l=c,d=l.rootConnectionName??l.connectionName;if(d===n)continue;if(this.connMap?.areIdsConnected(n,d))continue;let u=1/0;for(let h=0;h<l.route.length-1;h++){let A=l.route[h],m=l.route[h+1];A.z===m.z&&A.z===e.z&&(A.insideJumperPad&&m.insideJumperPad||A.toNextSegmentType!=="through_obstacle"&&(u=Math.min(u,Um(e,t,A,m)-(A.traceThickness??l.traceThickness)/2)))}for(let h of l.vias)u=Math.min(u,q8(e,t,{...h,radius:l.viaDiameter/2}));i=Math.min(i,u),u<o&&this.lastCollidingRoutes.push(l)}return this.lastClearance=i,i}isObstacleOnPointLayer(e,t){return!e.__zLayers||e.__zLayers.includes(t.z)}getAdjacentNonCoincidentRoutePoint(e,t){let n=e.route[t];if(!n)return;let o=t===0?1:-1;for(let i=t+o;i>=0&&i<e.route.length;i+=o){let r=e.route[i];if(bn(r,n)>fx)return r}}getObstacleWidthAlongVector(e,t){let n=(e.ccwRotationDegrees??0)*Math.PI/180,o=Math.cos(n),i=Math.sin(n),r=o,s=i,a=-i,c=o;return Math.abs(t.x*r+t.y*s)*e.width+Math.abs(t.x*a+t.y*c)*e.height}getTerminalPadWidthLimit(e,t,n){let o=e.route[t];if(!o)return;let i=this.getAdjacentNonCoincidentRoutePoint(e,t);if(!i)return;let r=t===0?PRe(o,i):PRe(i,o);if(bn(r,{x:0,y:0})<=fx)return;let s={x:-r.y,y:r.x},a;for(let c of this.obstacles){if(!this.isObstacleOnPointLayer(c,o))continue;if(jE(o,c)>fx)continue;if(!N6(c,e,this.connMap))continue;let l=this.getObstacleWidthAlongVector(c,s);if(l<=fx)continue;let d=this.getObstacleWidthAlongVector(c,r)/2;(!a||l<a.width||Math.abs(l-a.width)<=fx&&d>a.neckDistance)&&(a={width:l,neckDistance:d})}return!a||a.width>=n-fx?void 0:a}getRouteDistanceInfo(e){let t=[0],n=0;for(let o=1;o<e.length;o++){let i=e[o-1];n+=bn(e[o],i),t.push(n)}return{distances:t,totalDistance:n}}interpolateRoutePointAtDistance(e,t,n){for(let o=1;o<e.length;o++){let i=t[o-1],r=t[o],s=r-i;if(n>r+fx)continue;let a=e[o-1],c=e[o];if(s<=fx)return{...c};let l=Math.max(0,Math.min(1,(n-i)/s));return{x:a.x+(c.x-a.x)*l,y:a.y+(c.y-a.y)*l,z:a.z}}return{...e[e.length-1]}}getTaperWidthAtDistance({distanceFromStart:e,totalDistance:t,startLimit:n,endLimit:o,taperDistance:i,traceWidth:r}){let s=r;if(n!==void 0&&e<=i){let a=Math.min(n.neckDistance,i);if(e<=a)s=Math.min(s,n.width);else{let c=(e-a)/Math.max(i-a,fx);s=Math.min(s,n.width+(r-n.width)*c)}}if(o!==void 0){let a=t-e;if(a<=i){let c=Math.min(o.neckDistance,i);if(a<=c)s=Math.min(s,o.width);else{let l=(a-c)/Math.max(i-c,fx);s=Math.min(s,o.width+(r-o.width)*l)}}}return s}createTerminalTaperedRoute(e,t){if(e.route.length<2)return e.route.map((l)=>({...l,traceThickness:l.traceThickness??t}));let n=this.getTerminalPadWidthLimit(e,0,t),o=this.getTerminalPadWidthLimit(e,e.route.length-1,t),{distances:i,totalDistance:r}=this.getRouteDistanceInfo(e.route);if(r<=fx){let l=Math.min(n?.width??t,o?.width??t);return e.route.map((d)=>({...d,traceThickness:l}))}let s=Math.min(Math.max(2*t,0.75),r/2),a=i.map((l,d)=>({distanceFromStart:l,originalPointIndex:d})),c=[];if(n!==void 0){c.push(n.neckDistance);for(let l=0;l<=8;l++)c.push(s*l/8)}if(o!==void 0){c.push(r-o.neckDistance);for(let l=0;l<=8;l++)c.push(r-s+s*l/8)}for(let l of c){let d=Math.max(0,Math.min(r,l));a.some((u)=>Math.abs(u.distanceFromStart-d)<=fx)||a.push({distanceFromStart:d})}return a.sort((l,d)=>{let u=l.distanceFromStart-d.distanceFromStart;return Math.abs(u)>fx?u:(l.originalPointIndex??1/0)-(d.originalPointIndex??1/0)}),a.map((l)=>{let{distanceFromStart:d}=l,u=l.originalPointIndex!==void 0?{...e.route[l.originalPointIndex]}:this.interpolateRoutePointAtDistance(e.route,i,d);return u.traceThickness=this.getTaperWidthAtDistance({distanceFromStart:d,totalDistance:r,startLimit:n,endLimit:o,taperDistance:s,traceWidth:t}),u})}createRouteWithWidth(e,t){return{connectionName:e.connectionName,rootConnectionName:e.rootConnectionName,startPcbPortId:e.startPcbPortId,endPcbPortId:e.endPcbPortId,traceThickness:t,viaDiameter:e.viaDiameter,route:this.createTerminalTaperedRoute(e,t),vias:[...e.vias],jumpers:e.jumpers}}finalizeCurrentTrace(e){if(!this.currentTrace)return;let t=this.createRouteWithWidth(this.currentTrace,e);this.processedRoutes.push(t),this.hdRouteSHI.removeRoute(t.connectionName),this.hdRouteSHI.addRoute(t),this.currentTrace=null,this.cursorPosition=null,this.hasInsufficientClearance=!1}visualize(){let e={lines:[],points:[],circles:[],rects:[],coordinateSystem:"cartesian",title:`Trace Width Solver (schedule: [${this.TRACE_WIDTH_SCHEDULE.map((o)=>o.toFixed(2)).join(", ")}]mm, fallback: ${this.minTraceWidth.toFixed(2)}mm, margin: ${this.obstacleMargin.toFixed(2)}mm)`},t=new Set(this.lastCollidingObstacles.map((o)=>o.obstacleId)),n=new Set(this.lastCollidingRoutes.map((o)=>o.connectionName));for(let o of this.obstacles){let i=t.has(o.obstacleId),r=o.__zLayers?.includes(0),s=o.__zLayers?.includes(1),a;a=i?"rgba(255, 0, 0, 0.6)":r&&s?"rgba(128, 0, 128, 0.15)":r?"rgba(255, 0, 0, 0.15)":s?"rgba(0, 0, 255, 0.15)":"rgba(128, 128, 128, 0.15)",e.rects.push({center:o.center,width:o.width,height:o.height,fill:a,stroke:i?"red":void 0,label:i?`COLLIDING: ${o.obstacleId??"obstacle"}`:`${o.obstacleId??"obstacle"} (Z: ${o.__zLayers?.join(", ")})`})}for(let o of this.processedRoutes){if(o.route.length===0)continue;let i=o.traceThickness===this.nominalTraceWidth,r=o.traceThickness===this.TRACE_WIDTH_SCHEDULE[1],s=i?"green":r?"yellow":"orange";for(let a=0;a<o.route.length-1;a++){let c=o.route[a],l=o.route[a+1];c.insideJumperPad&&l.insideJumperPad||c.z===l.z&&e.lines.push({points:[{x:c.x,y:c.y},{x:l.x,y:l.y}],strokeColor:s,strokeWidth:c.traceThickness??o.traceThickness,label:`${o.connectionName} (w=${(c.traceThickness??o.traceThickness).toFixed(2)})`})}for(let a of o.vias)e.circles.push({center:{x:a.x,y:a.y},radius:o.viaDiameter/2,fill:"rgba(255, 0, 255, 0.5)",label:`${o.connectionName} via`});if(o.jumpers&&o.jumpers.length>0){let a=xS(o.jumpers,{color:s,label:o.connectionName});e.rects.push(...a.rects??[]),e.lines.push(...a.lines??[])}}if(this.currentTrace){for(let o=0;o<this.currentTrace.route.length-1;o++){let i=this.currentTrace.route[o],r=this.currentTrace.route[o+1];i.insideJumperPad&&r.insideJumperPad||i.z===r.z&&e.lines.push({points:[{x:i.x,y:i.y},{x:r.x,y:r.y}],strokeColor:"cyan",strokeWidth:this.currentTrace.traceThickness??this.minTraceWidth,label:`Processing: ${this.currentTrace.connectionName}`})}this.cursorPosition&&(e.circles.push({center:{x:this.cursorPosition.x,y:this.cursorPosition.y},radius:this.currentTargetWidth/2,stroke:this.hasInsufficientClearance?"red":"green",fill:"none",label:`Testing width: ${this.currentTargetWidth.toFixed(2)}mm (clearance: ${this.lastClearance.toFixed(2)}mm)`}),e.points.push({x:this.cursorPosition.x,y:this.cursorPosition.y,color:"orange",label:"Cursor"}))}for(let o of this.unprocessedRoutes){if(o.route.length===0)continue;let i=n.has(o.connectionName);for(let r=0;r<o.route.length-1;r++){let s=o.route[r],a=o.route[r+1];s.z===a.z&&e.lines.push({points:[{x:s.x,y:s.y},{x:a.x,y:a.y}],strokeColor:i?"rgba(255, 0, 0, 0.8)":"rgba(128, 128, 128, 0.3)",strokeWidth:o.traceThickness??this.minTraceWidth,label:i?`COLLIDING: ${o.connectionName}`:o.connectionName})}}return e}getHdRoutesWithWidths(){return this.hdRoutesWithWidths}};var gko=class extends Oi{getSolverName(){return"CapacityEdgeToPortSegmentSolver"}nodes;edges;capacityPaths;nodeMap;nodeEdgeMap;unprocessedNodeIds;nodePortSegments;colorMap;constructor({nodes:e,edges:t,capacityPaths:n,colorMap:o}){super(),this.nodes=e,this.edges=t,this.nodeMap=new Map(e.map((i)=>[i.capacityMeshNodeId,i])),this.nodeEdgeMap=GV(t),this.capacityPaths=n,this.colorMap=o??{},this.unprocessedNodeIds=[...new Set(n.flatMap((i)=>i.nodeIds))],this.nodePortSegments=new Map}step(){let e=this.unprocessedNodeIds.pop();if(!e)return void(this.solved=!0);let t=[];for(let r of this.capacityPaths){let s=r.nodeIds.indexOf(e);s!==-1&&t.push({path:r,indexOfNodeInPath:s})}let n=this.nodeMap.get(e),o=[];for(let{path:r,indexOfNodeInPath:s}of t){let a=r.nodeIds[s-1],c=r.nodeIds[s+1];for(let l of[a,c]){let d=this.nodeMap.get(l);if(!d)continue;let u=fko(n,d),h=d.availableZ.filter((m)=>n.availableZ.includes(m));if(h.length===0)continue;let A={capacityMeshNodeId:e,start:u.start,end:u.end,connectionNames:[r.connectionName],rootConnectionNames:r.rootConnectionName?[r.rootConnectionName]:void 0,availableZ:h};o.push(A)}}let i=function(r){let s=[],a=r.map((c)=>({...c,connectionNames:[...c.connectionNames],rootConnectionNames:c.rootConnectionNames?[...c.rootConnectionNames]:[],availableZ:[...c.availableZ].sort((l,d)=>l-d)}));for(;a.length>0;){let c=a.pop(),l=!1;for(let d=0;d<s.length;d++){let u=s[d],h=CAe(u.start,c.start)&&CAe(u.end,c.end)||CAe(u.start,c.end)&&CAe(u.end,c.start),A=yko(u.availableZ,c.availableZ);if(h&&A){let m=new Set(u.connectionNames);c.connectionNames.forEach((g)=>m.add(g)),u.connectionNames=Array.from(m);let p=new Set(u.rootConnectionNames||[]);c.rootConnectionNames?.forEach((g)=>p.add(g)),u.rootConnectionNames=Array.from(p),l=!0;break}}l||s.push(c)}return s}(o);this.nodePortSegments.set(e,i)}visualize(){let e={lines:[],points:[],rects:[],circles:[]};return this.nodePortSegments.forEach((t,n)=>{this.nodeMap.get(n),t.forEach((o)=>{o.start.x,o.end.x;for(let i=0;i<o.connectionNames.length;i++){let r={x:0.05*Math.max(...o.availableZ),y:0.05*Math.max(...o.availableZ)},s={x:(o.start.x+o.end.x)/2,y:(o.start.y+o.end.y)/2},a={x:s.x+r.x,y:s.y+r.y};r.x>0&&e.lines.push({points:[s,a],strokeColor:"rgba(0, 0, 0, 0.25)",strokeDash:"5 5"}),e.points.push({x:a.x,y:a.y,label:`${n}: ${o.connectionNames.join(", ")}
availableZ: ${o.availableZ.join(",")}
nodePortSegmentId: ${o.nodePortSegmentId}`}),e.lines.push({points:[o.start,o.end],strokeColor:Cr(this.colorMap[o.connectionNames[i]],0.6)})}})}),e}};function fko(e,t){let n={start:Math.max(e.center.x-e.width/2,t.center.x-t.width/2),end:Math.min(e.center.x+e.width/2,t.center.x+t.width/2)},o={start:Math.max(e.center.y-e.height/2,t.center.y-t.height/2),end:Math.min(e.center.y+e.height/2,t.center.y+t.height/2)};if(n.end-n.start<o.end-o.start){let i=(n.start+n.end)/2;return{start:{x:i,y:o.start},end:{x:i,y:o.end}}}{let i=(o.start+o.end)/2;return{start:{x:n.start,y:i},end:{x:n.end,y:i}}}}var m3t=0.000000001;function CAe(e,t){return Math.abs(e.x-t.x)<m3t&&Math.abs(e.y-t.y)<m3t}function yko(e,t){if(e.length!==t.length)return!1;for(let n=0;n<e.length;n++)if(e[n]!==t[n])return!1;return!0}var xko=class{constructor(e){this.targets=e,this.buckets=new Map;for(let t=0;t<e.length;t++){let n=e[t],o=Math.floor(n.bounds.minX/this.CELL_SIZE)*this.CELL_SIZE,i=Math.floor(n.bounds.minY/this.CELL_SIZE)*this.CELL_SIZE,r=n.bounds.maxX,s=n.bounds.maxY;for(let a=o;a<=r;a+=this.CELL_SIZE)for(let c=i;c<=s;c+=this.CELL_SIZE){let l=this.getBucketKey(a,c),d=this.buckets.get(l);d?d.push([n,t]):this.buckets.set(l,[[n,t]])}}}targets;buckets;CELL_SIZE=5;getBucketKey(e,t){return`${Math.floor(e/this.CELL_SIZE)}x${Math.floor(t/this.CELL_SIZE)}`}getTargetsInArea(e,t,n,o){let i=[],r=new Set,s=Math.floor((e-n/2)/this.CELL_SIZE)*this.CELL_SIZE,a=Math.floor((t-o/2)/this.CELL_SIZE)*this.CELL_SIZE,c=e+n/2,l=t+o/2;for(let d=s;d<=c;d+=this.CELL_SIZE)for(let u=a;u<=l;u+=this.CELL_SIZE){let h=this.getBucketKey(d,u),A=this.buckets.get(h)||[];for(let m of A)r.has(m[1])||(r.add(m[1]),i.push(m[0]))}return i}},Cko=class extends Oi{constructor(e,t={}){super(),this.srj=e,this.opts=t,this.MAX_DEPTH=t?.capacityDepth??this.MAX_DEPTH,this.MAX_ITERATIONS=1e5,this.layerCount=e.layerCount??2,this.outlinePolygon=e.outline&&e.outline.length>=3?e.outline:void 0;let n={x:(e.bounds.minX+e.bounds.maxX)/2,y:(e.bounds.minY+e.bounds.maxY)/2},o={width:e.bounds.maxX-e.bounds.minX,height:e.bounds.maxY-e.bounds.minY},i=Math.max(o.width,o.height);this.unfinishedNodes=[{capacityMeshNodeId:this.getNextNodeId(),center:n,width:i,height:i,layer:"top",availableZ:Array.from({length:this.layerCount},(s,a)=>a),_depth:0,_containsTarget:!0,_containsObstacle:!0,_completelyInsideObstacle:!1}],this.finishedNodes=[],this.nodeToXYOverlappingObstaclesMap=new Map,this.obstacleZLayersByObstacle=new WeakMap;let r=SU(this.srj.obstacles,this.layerCount);for(let[s,a]of this.srj.obstacles.entries())this.obstacleZLayersByObstacle.set(a,r[s].__zLayers);this.obstacleTree=new Mfe("flatbush",this.srj.obstacles),this.targets=this.computeTargets(),this.targetTree=new xko(this.targets)}srj;opts;getSolverName(){return"CapacityMeshNodeSolver"}unfinishedNodes;finishedNodes;nodeToXYOverlappingObstaclesMap;layerCount;outlinePolygon;MAX_DEPTH=4;targets;targetTree;obstacleTree;obstacleZLayersByObstacle;computeTargets(){let e=[];for(let t of this.srj.connections)for(let n of t.pointsToConnect){let o=Dy(n),i=this.obstacleTree.searchArea(n.x,n.y,0.01,0.01).filter((a)=>{let c=this.getObstacleZLayers(a);return!(!c||c.length===0)&&c.some((l)=>o.some((d)=>l===Wi(d,this.layerCount)))}),r={minX:n.x-0.005,minY:n.y-0.005,maxX:n.x+0.005,maxY:n.y+0.005};i.length>0&&(r={minX:Math.min(...i.map((a)=>a.center.x-a.width/2)),minY:Math.min(...i.map((a)=>a.center.y-a.height/2)),maxX:Math.max(...i.map((a)=>a.center.x+a.width/2)),maxY:Math.max(...i.map((a)=>a.center.y+a.height/2))});let s={...n,connectionName:t.name,availableZ:o.map((a)=>Wi(a,this.layerCount)),bounds:r};e.push(s)}return e}getNodeBounds(e){let t=e.width/2,n=e.height/2;return{minX:e.center.x-t,maxX:e.center.x+t,minY:e.center.y-n,maxY:e.center.y+n}}getNodeRect(e){return{center:{x:e.center.x,y:e.center.y},width:e.width,height:e.height}}_nextNodeCounter=0;getNextNodeId(){return"cn"+this._nextNodeCounter++}getCapacityFromDepth(e){return(this.MAX_DEPTH-e+1)**2}getTargetIfNodeContainsTarget(e){let t=e.width>4*this.targetTree.CELL_SIZE?this.targets:this.targetTree.getTargetsInArea(e.center.x,e.center.y,e.width,e.height);for(let n of t)if(n.bounds.minX<=e.center.x+e.width/2&&n.bounds.maxX>=e.center.x-e.width/2&&n.bounds.minY<=e.center.y+e.height/2&&n.bounds.maxY>=e.center.y-e.height/2&&n.availableZ.some((o)=>e.availableZ.includes(o)))return n;return null}getXYOverlappingObstacles(e){let t=this.nodeToXYOverlappingObstaclesMap.get(e.capacityMeshNodeId);if(t)return t;let n=[],o=this.getNodeBounds(e),{minX:i,maxX:r,minY:s,maxY:a}=o,c=e._parent?this.getXYOverlappingObstacles(e._parent):this.srj.obstacles;for(let l of c){let d=l.center.x-l.width/2,u=l.center.x+l.width/2,h=l.center.y-l.height/2,A=l.center.y+l.height/2;r>=d&&i<=u&&a>=h&&s<=A?n.push(l):(i>=d&&r<=u&&s>=h&&a<=A||d>=i&&u<=r&&h>=s&&A<=a)&&n.push(l)}return this.nodeToXYOverlappingObstaclesMap.set(e.capacityMeshNodeId,n),n}getXYZOverlappingObstacles(e){let t=this.getXYOverlappingObstacles(e),n=[];for(let o of t)e.availableZ.some((i)=>this.getObstacleZLayers(o).includes(i))&&n.push(o);return n}doesNodeOverlapObstacle(e){if(this.getXYZOverlappingObstacles(e).length>0)return!0;let t=this.getNodeBounds(e);if(this.outlinePolygon){let n=this.getNodeRect(e);if(!XBt(n,this.outlinePolygon))return!0}return t.minX<this.srj.bounds.minX||t.maxX>this.srj.bounds.maxX||t.minY<this.srj.bounds.minY||t.maxY>this.srj.bounds.maxY}isNodeCompletelyInsideObstacle(e){let t=this.getXYZOverlappingObstacles(e),n=this.getNodeBounds(e);if(this.outlinePolygon){let o=this.getNodeRect(e);if(!R_e(o,this.outlinePolygon))return!0}for(let o of t){let i=o.center.x-o.width/2,r=o.center.x+o.width/2,s=o.center.y-o.height/2,a=o.center.y+o.height/2;if(n.minX>=i&&n.maxX<=r&&n.minY>=s&&n.maxY<=a)return!0}return!1}getChildNodes(e){if(e._depth===this.MAX_DEPTH)return[];let t=[],n={width:e.width/2,height:e.height/2},o=[{x:e.center.x-n.width/2,y:e.center.y-n.height/2},{x:e.center.x+n.width/2,y:e.center.y-n.height/2},{x:e.center.x-n.width/2,y:e.center.y+n.height/2},{x:e.center.x+n.width/2,y:e.center.y+n.height/2}];for(let i of o){let r={capacityMeshNodeId:this.getNextNodeId(),center:i,width:n.width,height:n.height,layer:e.layer,availableZ:e.availableZ,_depth:(e._depth??0)+1,_parent:e};r._containsObstacle=this.doesNodeOverlapObstacle(r);let s=this.getTargetIfNodeContainsTarget(r);s&&(r._targetConnectionName=s.connectionName,r.availableZ=s.availableZ,r._containsTarget=!0),r._containsObstacle&&(r._completelyInsideObstacle=this.isNodeCompletelyInsideObstacle(r)),r._completelyInsideObstacle&&!r._containsTarget||t.push(r)}return t}shouldNodeBeXYSubdivided(e){return!(e._depth>=this.MAX_DEPTH)&&(!!e._containsTarget||!(!e._containsObstacle||e._completelyInsideObstacle))}_step(){let e=this.unfinishedNodes.pop();if(!e)return void(this.solved=!0);let t=this.getChildNodes(e),n=[],o=[];for(let i of t){let r=this.shouldNodeBeXYSubdivided(i);r?o.push(i):r||i._containsObstacle?!r&&i._containsTarget&&n.push(i):n.push(i)}this.unfinishedNodes.push(...o),this.finishedNodes.push(...n)}visualize(){let e={lines:[],points:[],rects:[],circles:[],coordinateSystem:"cartesian",title:"Capacity Mesh Visualization"};if(this.outlinePolygon&&this.outlinePolygon.length>=2){let n=this.outlinePolygon.map((o)=>({x:o.x,y:o.y}));n.push({...n[0]}),e.lines.push({points:n,strokeColor:"rgba(0, 136, 255, 0.95)",label:"outline"});for(let o of this.outlinePolygon)e.points.push({x:o.x,y:o.y,color:"rgba(0, 136, 255, 0.95)"})}for(let n of this.srj.obstacles){if(n.isCopperPour)continue;let o=this.getObstacleZLayers(n);e.rects.push({center:n.center,width:n.width,height:n.height,fill:o.length===1&&o.includes(1)?"rgba(0,0,255,0.3)":"rgba(255,0,0,0.3)",stroke:"red",label:["obstacle",`z: ${o.join(",")}`].join(`
`)})}let t=[...this.finishedNodes,...this.unfinishedNodes];for(let n of t){let o=Math.min(...n.availableZ),i=this.unfinishedNodes.length>0&&n===this.unfinishedNodes[this.unfinishedNodes.length-1];e.rects.push({center:{x:n.center.x+o*n.width*0.05,y:n.center.y-o*n.width*0.05},width:Math.max(n.width-2,0.8*n.width),height:Math.max(n.height-2,0.8*n.height),fill:n._containsObstacle?"rgba(255,0,0,0.1)":{"0,1":"rgba(0,0,0,0.1)",0:"rgba(0,200,200, 0.1)",1:"rgba(0,0,200, 0.1)"}[n.availableZ.join(",")]??"rgba(0,200,200,0.1)",stroke:i?"rgba(255,165,0,0.5)":void 0,label:[n.capacityMeshNodeId,`availableZ: ${n.availableZ.join(",")}`,`target? ${n._containsTarget??!1}`,`obs? ${n._containsObstacle??!1}`,`${n.width.toFixed(2)}x${n.height.toFixed(2)}`,`capacity: ${UE(n).toFixed(2)}`].join(`
`)})}return e.rects.sort((n,o)=>n.center.y-o.center.y),this.srj.connections.forEach((n,o)=>{let i=cPt[o%cPt.length];for(let r of n.pointsToConnect){let s=Dy(r);e.points.push({x:r.x,y:r.y,label:`conn-${o} (${s.join(",")})`,color:i})}}),e}getObstacleZLayers(e){return this.obstacleZLayersByObstacle.get(e)??[]}},Iko=class extends Cko{constructor(e,t={}){super(e,t),this.srj=e,this.opts=t,this.VIA_DIAMETER=y0(e).padDiameter}srj;opts;getSolverName(){return"CapacityMeshNodeSolver2_NodeUnderObstacle"}VIA_DIAMETER=0.6;OBSTACLE_MARGIN=0.1;OVERLAP_THRESHOLD_FOR_SINGLE_LAYER_NODES=0.2;isNodeCompletelyOutsideBounds(e){if(this.outlinePolygon){let t=this.getNodeRect(e);if(!R_e(t,this.outlinePolygon))return!0}return e.center.x+e.width/2<this.srj.bounds.minX||e.center.x-e.width/2>this.srj.bounds.maxX||e.center.y+e.height/2<this.srj.bounds.minY||e.center.y-e.height/2>this.srj.bounds.maxY}isNodePartiallyOutsideBounds(e){if(this.outlinePolygon){let t=this.getNodeRect(e);return!!R_e(t,this.outlinePolygon)&&!XBt(t,this.outlinePolygon)}return e.center.x-e.width/2<this.srj.bounds.minX||e.center.x+e.width/2>this.srj.bounds.maxX||e.center.y-e.height/2<this.srj.bounds.minY||e.center.y+e.height/2>this.srj.bounds.maxY}getObstacleCoveragePercentage(e){let t=this.getXYZOverlappingObstacles(e);if(t.length===0)return 0;let n=e.center.x-e.width/2,o=e.center.x+e.width/2,i=e.center.y-e.height/2,r=e.center.y+e.height/2,s=e.width*e.height,a=0;for(let c of t){let l=Math.max(n,c.center.x-c.width/2),d=Math.min(o,c.center.x+c.width/2),u=Math.max(i,c.center.y-c.height/2),h=Math.min(r,c.center.y+c.height/2);if(l<d&&u<h)a+=(d-l)*(h-u)}return a/s}shouldFilterSingleLayerNodeForObstacle(e){if(e.availableZ.length!==1)return!1;if(!e._containsObstacle)return!1;return this.getObstacleCoveragePercentage(e)>this.OVERLAP_THRESHOLD_FOR_SINGLE_LAYER_NODES}shouldFilterNodeForObstacle(e){return!!e._containsObstacle&&(e.availableZ.length!==1||this.shouldFilterSingleLayerNodeForObstacle(e))}createChildNodeAtPosition(e,t){let n={capacityMeshNodeId:this.getNextNodeId(),center:t.center,width:t.width,height:t.height,layer:e.layer,availableZ:t.availableZ,_depth:t._depth??(e._depth??0)+1,_parent:e},o=this.getXYZOverlappingObstacles(n);n._containsObstacle=o.length>0||this.isNodePartiallyOutsideBounds(n);let i=this.getTargetIfNodeContainsTarget(n);return i&&(n._targetConnectionName=i.connectionName,n._containsTarget=!0),n._containsObstacle&&(n._completelyInsideObstacle=this.isNodeCompletelyInsideObstacle(n)),n}getZSubdivisionChildNodes(e){if(e.availableZ.length===1)return[];let t=[],n=e.availableZ.map((o)=>[o]);for(let o of n){let i=this.createChildNodeAtPosition(e,{center:{...e.center},width:e.width,height:e.height,availableZ:o,_depth:e._depth});this.isNodeCompletelyOutsideBounds(i)||t.push(i)}return t}getChildNodes(e){if(e._depth>=this.MAX_DEPTH)return[];let t=[],n={width:e.width/2,height:e.height/2},o=[{x:e.center.x-n.width/2,y:e.center.y-n.height/2},{x:e.center.x+n.width/2,y:e.center.y-n.height/2},{x:e.center.x-n.width/2,y:e.center.y+n.height/2},{x:e.center.x+n.width/2,y:e.center.y+n.height/2}];for(let i of o){let r=this.createChildNodeAtPosition(e,{center:i,width:n.width,height:n.height,availableZ:e.availableZ});this.isNodeCompletelyOutsideBounds(r)||t.push(r)}return t}shouldNodeBeXYSubdivided(e){return!(e._depth>=this.MAX_DEPTH)&&(!!e._containsTarget||(e.availableZ.length===1&&e._depth<=this.MAX_DEPTH||!(!e._containsObstacle||e._completelyInsideObstacle)))}_step(){let e=this.unfinishedNodes.pop();if(!e)return void(this.solved=!0);let t=this.getChildNodes(e),n=[],o=[];for(let i of t){let r=this.shouldNodeBeXYSubdivided(i),s=i.availableZ.length>1&&!r&&(i._containsObstacle||i.width<this.VIA_DIAMETER+this.OBSTACLE_MARGIN);if(r)o.push(i);else if(r||this.shouldFilterNodeForObstacle(i)||s)if(!r&&i._containsTarget)if(s){let a=this.getZSubdivisionChildNodes(i);n.push(...a.filter((c)=>c._containsTarget||!this.shouldFilterNodeForObstacle(c)))}else n.push(i);else s&&n.push(...this.getZSubdivisionChildNodes(i).filter((a)=>!this.shouldFilterNodeForObstacle(a)));else n.push(i)}this.unfinishedNodes.push(...o),this.finishedNodes.push(...n)}},bko=class extends Oi{getSolverName(){return"CapacitySegmentToPointSolver"}unsolvedSegments;solvedSegments;nodeMap;colorMap;constructor({segments:e,colorMap:t,nodes:n}){super(),this.MAX_ITERATIONS=1e5,this.unsolvedSegments=e,this.solvedSegments=[],this.colorMap=t??{},this.nodeMap=Object.fromEntries(n.map((o)=>[o.capacityMeshNodeId,o]))}_step(){let e=!1,t=[...this.unsolvedSegments];for(let n of t){let o=n.connectionNames.length;if((!("assignedPoints"in n)||n.assignedPoints?.length!==o)&&o===1){let i={x:(n.start.x+n.end.x)/2,y:(n.start.y+n.end.y)/2,z:n.availableZ[0]};n.assignedPoints=[{connectionName:n.connectionNames[0],rootConnectionName:n.rootConnectionNames?.[0],point:i}],this.unsolvedSegments.splice(this.unsolvedSegments.indexOf(n),1),this.solvedSegments.push(n),e=!0}}if(!e&&t.length>0){let n=t[0];for(let c of t)c.connectionNames.length<n.connectionNames.length&&(n=c);let o=[...n.connectionNames].sort(),i=n.end.x-n.start.x,r=n.end.y-n.start.y,s=o.length,a=[];for(let c=1;c<=s;c++){let l=c/(s+1);a.push({x:n.start.x+i*l,y:n.start.y+r*l,z:n.availableZ[0]})}n.assignedPoints=o.map((c,l)=>({connectionName:c,rootConnectionName:n.rootConnectionNames?.[n.connectionNames.indexOf(c)],point:a[l]})),this.unsolvedSegments.splice(this.unsolvedSegments.indexOf(n),1),this.solvedSegments.push(n),e=!0}this.unsolvedSegments.length===0&&(this.solved=!0)}getNodesWithPortPoints(){if(!this.solved)throw Error("CapacitySegmentToPointSolver not solved, can't give port points yet");let e=new Map;for(let t of this.solvedSegments){let n=t.capacityMeshNodeId,o=this.nodeMap[n];e.has(n)||e.set(n,{capacityMeshNodeId:n,portPoints:[],center:o.center,width:o.width,height:o.height}),e.get(n).portPoints.push(...t.assignedPoints.map((i)=>({...i.point,connectionName:i.connectionName})))}return Array.from(e.values())}visualize(){let e={points:[],lines:this.solvedSegments.map((o)=>({points:[o.start,o.end],step:4})),rects:[],circles:[],coordinateSystem:"cartesian",title:"Capacity Segment to Point Solver"};for(let o=0;o<this.solvedSegments.length;o++){let i=this.solvedSegments[o];for(let r=0;r<i.assignedPoints.length;r++){let s=i.assignedPoints[r],a={x:s.point.x,y:s.point.y},c={x:s.point.x+0.05*s.point.z,y:s.point.y+0.05*s.point.z};s.point.z!==0&&e.lines.push({points:[a,c],strokeColor:"rgba(0, 0, 0, 0.25)",strokeDash:"5 5",step:4}),e.points.push({x:c.x,y:c.y,label:[`${i.capacityMeshNodeId}-${s.connectionName}`,`z: ${i.availableZ.join(",")}`,`nodePortSegmentId: ${i.nodePortSegmentId}`].join(`
`),color:this.colorMap[s.connectionName],step:4})}}let t=[],n={};for(let o of this.solvedSegments){let i=o.capacityMeshNodeId;n[i]||(n[i]={});for(let r of o.assignedPoints)n[i][r.connectionName]||(n[i][r.connectionName]=[]),n[i][r.connectionName].push({x:r.point.x,y:r.point.y})}for(let o in n)for(let i in n[o]){let r=n[o][i];r.length>1&&t.push({points:r,step:4,strokeDash:"5 5",strokeColor:this.colorMap[i]||"#000"})}return e.lines.push(...t),e}},FA=(e,t={})=>{let n=Math.min(...e.availableZ);return{center:!t.rectMargin||t.zOffset?{x:e.center.x+n*e.width*(t.zOffset??0.05),y:e.center.y-n*e.width*(t.zOffset??0.05)}:e.center,width:t.rectMargin?e.width-2*t.rectMargin:Math.max(e.width-0.5,0.8*e.width),height:t.rectMargin?e.height-2*t.rectMargin:Math.max(e.height-0.5,0.8*e.height),fill:e._containsObstacle?"rgba(255,0,0,0.1)":{"0,1":"rgba(0,0,0,0.1)",0:"rgba(0,200,200, 0.1)",1:"rgba(0,0,200, 0.1)"}[e.availableZ.join(",")]??"rgba(0,200,200,0.1)",layer:`z${e.availableZ.join(",")}`,label:[e.capacityMeshNodeId,`availableZ: ${e.availableZ.join(",")}`,e._containsTarget?"containsTarget":"",e._containsObstacle?"containsObstacle":""].filter(Boolean).join(`
`)}},Sko=class extends Oi{getSolverName(){return"CapacityPathingSolver"}connectionsWithNodes;usedNodeCapacityMap;simpleRouteJson;nodes;edges;GREEDY_MULTIPLIER=1.1;MAX_CANDIDATES_IN_MEMORY=1e5;nodeMap;nodeEdgeMap;connectionNameToGoalNodeIds;colorMap;maxDepthOfNodes;activeCandidateStraightLineDistance;debug_lastNodeCostMap;hyperParameters;constructor({simpleRouteJson:e,nodes:t,edges:n,colorMap:o,MAX_ITERATIONS:i=1e6,hyperParameters:r={}}){super(),this.MAX_ITERATIONS=i,this.simpleRouteJson=e,this.nodes=t,this.edges=n,this.colorMap=o??{};let{connectionsWithNodes:s,connectionNameToGoalNodeIds:a}=this.getConnectionsWithNodes();this.connectionsWithNodes=s,this.connectionNameToGoalNodeIds=a,this.hyperParameters=r,this.usedNodeCapacityMap=new Map(this.nodes.map((c)=>[c.capacityMeshNodeId,0])),this.nodeMap=new Map(this.nodes.map((c)=>[c.capacityMeshNodeId,c])),this.nodeEdgeMap=GV(this.edges),this.maxDepthOfNodes=Math.max(...this.nodes.map((c)=>c._depth??0)),this.debug_lastNodeCostMap=new Map}getTotalCapacity(e){let t=e._depth??0;return(this.maxDepthOfNodes-t+1)**2}getConnectionsWithNodes(){let e=[],t=this.nodes.filter((o)=>o._containsTarget),n=new Map;for(let o of this.simpleRouteJson.connections){let i=[];for(let r of o.pointsToConnect){let s=this.nodes[0],a=Number.MAX_VALUE;for(let c of t){let l=Math.sqrt((c.center.x-r.x)**2+(c.center.y-r.y)**2);l<a&&(a=l,s=c)}i.push(s)}if(i.length<2)throw Error(`Not enough nodes for connection "${o.name}", only ${i.length} found`);n.set(o.name,i.map((r)=>r.capacityMeshNodeId)),e.push({connection:o,nodes:i,pathFound:!1,straightLineDistance:bn(i[0].center,i[i.length-1].center)})}return e.sort((o,i)=>o.straightLineDistance-i.straightLineDistance),{connectionsWithNodes:e,connectionNameToGoalNodeIds:n}}currentConnectionIndex=0;candidates;visitedNodes;computeG(e,t,n){return e.g+this.getDistanceBetweenNodes(e.node,t)}computeH(e,t,n){return this.getDistanceBetweenNodes(t,n)}getBacktrackedPath(e){let t=[],n=e;for(;n;)t.push(n.node),n=n.prevCandidate;return t}getNeighboringNodes(e){return this.nodeEdgeMap.get(e.capacityMeshNodeId).flatMap((t)=>t.nodeIds.filter((n)=>n!==e.capacityMeshNodeId)).map((t)=>this.nodeMap.get(t))}getCapacityPaths(){let e=[];for(let t of this.connectionsWithNodes){let n=t.path;n&&e.push({capacityPathId:t.connection.name,connectionName:t.connection.name,rootConnectionName:t.connection.__rootConnectionNames?.[0],nodeIds:n.map((o)=>o.capacityMeshNodeId)})}return e}doesNodeHaveCapacityForTrace(e,t){let n=this.usedNodeCapacityMap.get(e.capacityMeshNodeId)??0,o=this.getTotalCapacity(e);if(e.availableZ.length===1&&!e._containsTarget&&n>0)return!1;let i=0;return e.availableZ.length>1&&t.availableZ.length===1&&(i+=0.5),n+i<o}canTravelThroughObstacle(e,t){return this.connectionNameToGoalNodeIds.get(t)?.includes(e.capacityMeshNodeId)??!1}getDistanceBetweenNodes(e,t){return Math.sqrt((e.center.x-t.center.x)**2+(e.center.y-t.center.y)**2)}reduceCapacityAlongPath(e){for(let t of e.path??[])this.usedNodeCapacityMap.set(t.capacityMeshNodeId,this.usedNodeCapacityMap.get(t.capacityMeshNodeId)+1)}isConnectedToEndGoal(e,t){return this.nodeEdgeMap.get(e.capacityMeshNodeId).some((n)=>n.nodeIds.includes(t.capacityMeshNodeId))}_step(){let e=this.connectionsWithNodes[this.currentConnectionIndex];if(!e)return void(this.solved=!0);let[t,n]=e.nodes;this.candidates||(this.candidates=[{prevCandidate:null,node:t,f:0,g:0,h:0}],this.debug_lastNodeCostMap=new Map,this.visitedNodes=new Set([t.capacityMeshNodeId]),this.activeCandidateStraightLineDistance=bn(t.center,n.center)),this.candidates.sort((r,s)=>r.f-s.f);let o=this.candidates.shift();if(this.candidates.length>this.MAX_CANDIDATES_IN_MEMORY&&this.candidates.splice(this.MAX_CANDIDATES_IN_MEMORY,this.candidates.length-this.MAX_CANDIDATES_IN_MEMORY),!o)return console.error(`Ran out of candidates on connection ${e.connection.name}`),this.currentConnectionIndex++,this.candidates=null,this.visitedNodes=null,void(this.failed=!0);if(this.isConnectedToEndGoal(o.node,n))return e.path=this.getBacktrackedPath({prevCandidate:o,node:n,f:0,g:0,h:0}),this.reduceCapacityAlongPath(e),this.currentConnectionIndex++,this.candidates=null,void(this.visitedNodes=null);let i=this.getNeighboringNodes(o.node);for(let r of i){if(this.visitedNodes?.has(r.capacityMeshNodeId))continue;if(!this.doesNodeHaveCapacityForTrace(r,o.node))continue;let s=this.connectionsWithNodes[this.currentConnectionIndex].connection.name;if(r._containsObstacle&&!this.canTravelThroughObstacle(r,s))continue;let a=this.computeG(o,r,n),c=this.computeH(o,r,n),l=a+c*this.GREEDY_MULTIPLIER;this.debug_lastNodeCostMap.set(r.capacityMeshNodeId,{f:l,g:a,h:c});let d={prevCandidate:o,node:r,f:l,g:a,h:c};this.candidates.push(d)}this.visitedNodes.add(o.node.capacityMeshNodeId)}visualize(){let e={lines:[],points:[],rects:[],circles:[]};if(this.connectionsWithNodes)for(let n=0;n<this.connectionsWithNodes.length;n++){let o=this.connectionsWithNodes[n];if(o.path&&o.path.length>0){let i=o.path.map(({center:{x:r,y:s},width:a,availableZ:c})=>({x:r+0.005*a*(n%10+n%19),y:s+0.005*a*(n%10+n%19),availableZ:c}));e.lines.push({points:i,strokeColor:this.colorMap[o.connection.name]});for(let r=0;r<i.length;r++){let s=i[r];e.points.push({x:s.x,y:s.y,label:[`conn: ${o.connection.name}`,`node: ${o.path[r].capacityMeshNodeId}`,`z: ${s.availableZ.join(",")}`].join(`
`)})}}}for(let n of this.nodes){let o=this.usedNodeCapacityMap.get(n.capacityMeshNodeId)??0,i=this.getTotalCapacity(n),r=this.debug_lastNodeCostMap.get(n.capacityMeshNodeId);e.rects.push({...FA(n,{rectMargin:0.025,zOffset:0.01}),label:[`${n.capacityMeshNodeId}`,`${o}/${i}`,`${n.width.toFixed(2)}x${n.height.toFixed(2)}`,`g: ${r?.g!==void 0?r.g.toFixed(2):"?"}`,`h: ${r?.h!==void 0?r.h.toFixed(2):"?"}`,`f: ${r?.f!==void 0?r.f.toFixed(2):"?"}`,`z: ${n.availableZ.join(", ")}`].join(`
`),stroke:o>i+0.5?"red":void 0})}if(this.connectionsWithNodes){for(let n of this.connectionsWithNodes)if(n.connection?.pointsToConnect)for(let o of n.connection.pointsToConnect)e.points.push({x:o.x,y:o.y,label:[`pointsToConnect ${n.connection.name}`].join(`
`)})}let t=this.connectionsWithNodes[this.currentConnectionIndex];if(!this.candidates&&this.currentConnectionIndex>0&&!this.connectionsWithNodes[this.currentConnectionIndex-1].path&&(t=this.connectionsWithNodes[this.currentConnectionIndex-1]),t){let[n,o]=t.connection.pointsToConnect;e.lines.push({points:[{x:n.x,y:n.y},{x:o.x,y:o.y}],strokeColor:"red",strokeDash:"10 5"})}if(this.candidates){let n=this.candidates.slice(0,5),o=this.connectionsWithNodes[this.currentConnectionIndex].connection.name;n.forEach((i,r)=>{let s=0.5*(1-r/5),a=this.getBacktrackedPath(i);e.lines.push({points:a.map(({center:{x:c,y:l}})=>({x:c,y:l})),strokeColor:Cr(this.colorMap[o]??"red",1-s)})})}return e}},Pko=class extends Sko{getSolverName(){return"CapacityPathingSolver5"}NEGATIVE_CAPACITY_PENALTY_FACTOR=1;REDUCED_CAPACITY_PENALTY_FACTOR=1;constructor(...e){super(...e),this.GREEDY_MULTIPLIER=2.5}get maxCapacityFactor(){return this.hyperParameters.MAX_CAPACITY_FACTOR??1}getTotalCapacity(e){return UE(e,this.maxCapacityFactor)}getNodeCapacityPenalty(e){let t=e.width+e.height,o=this.getTotalCapacity(e)-(this.usedNodeCapacityMap.get(e.capacityMeshNodeId)??0);if(o>2)return 0.05;return(t-0.05)*Math.max(1,(2-o)/(t-0.05))+0.05}getDistanceBetweenNodes(e,t){let n=e.center.x-t.center.x,o=e.center.y-t.center.y;return Math.sqrt(n**2+o**2)}computeG(e,t,n){return e.g+this.getDistanceBetweenNodes(e.node,t)+this.getNodeCapacityPenalty(t)}computeH(e,t,n){return this.getDistanceBetweenNodes(t,n)+this.getNodeCapacityPenalty(t)}},SOt=class extends Pko{getSolverName(){return"CapacityPathingGreedySolver"}doesNodeHaveCapacityForTrace(e,t){return!0}getNodeCapacityPenalty(e){let t=this.getTotalCapacity(e)-(this.usedNodeCapacityMap.get(e.capacityMeshNodeId)??0)-1;if(t>0)return 0;let n=1;return e.availableZ.length===1&&(n=10),(0.05+2*Math.abs(t))*n}};function p3t(e,t,n){let o=t.x-e.x,i=t.y-e.y;if(Math.abs(o)<0.000000001&&Math.abs(i)<0.000000001)return e;let r=n.width/2,s=n.height/2,a=n.center.x-r,c=n.center.x+r,l=n.center.y-s,d=n.center.y+s,u=0,h=1/0;if(Math.abs(o)>0.000000001){let A=(a-e.x)/o,m=(c-e.x)/o;u=Math.max(u,Math.min(A,m)),h=Math.min(h,Math.max(A,m))}else if(e.x<a||e.x>c)return e;if(Math.abs(i)>0.000000001){let A=(l-e.y)/i,m=(d-e.y)/i;u=Math.max(u,Math.min(A,m)),h=Math.min(h,Math.max(A,m))}else if(e.y<l||e.y>d)return e;if(h<u||u===1/0||u<-1e9)return e;return{x:e.x+o*u,y:e.y+i*u}}function vko(e,t){let n=e.center,o=t.center,i=p3t(n,o,e),r=p3t(o,n,t),s=o.x-n.x,a=o.y-n.y,c=Math.sqrt(s*s+a*a),l=i,d=r;if(c>0.000000001){let u={x:s/c,y:a/c},h=0.3*e.width,A=0.3*t.width;h+A<Math.sqrt((r.x-i.x)**2+(r.y-i.y)**2)?(l={x:i.x+u.x*h,y:i.y+u.y*h},d={x:r.x-u.x*A,y:r.y-u.y*A}):(l=i,d=r)}return{lineStart:l,lineEnd:d}}var Age=(e)=>{let{usedCapacity:t,totalCapacity:n,layerCount:o}=e;if(t<n)return 0;if(n<1&&t<=1)return 0;if(o===1&&t>1)return 1-0.01**t;let i=t/n-1;return 1-Math.exp(-2*i)},LQe=(e,t,n)=>{if(n._containsTarget)return 0;if(e<=t)return 0;let o=1-Age({usedCapacity:e,totalCapacity:t,layerCount:n.availableZ.length});return o<=0?-1e9:Math.log(o)},yee=({totalNodeCapacityMap:e,usedNodeCapacityMap:t,nodeMap:n,sectionNodeIds:o})=>{let i=0,r=o??new Set(t.keys());for(let s of r){if(!e.has(s))continue;let a=n.get(s);if(!a)continue;let c=e.get(s),l=t.get(s)??0;i+=LQe(l,c,a)}return i};function yHe({sectionNodes:e,sectionEdges:t,sectionConnectionTerminals:n,completedPaths:o,nodeMap:i,colorMap:r,centerNodeId:s,title:a,nodeOpacity:c=0.1,usedNodeCapacityMap:l,totalCapacityMap:d}){let u={points:[],lines:[],rects:[],circles:[],title:a},h=new Set(e.map((A)=>A.capacityMeshNodeId));for(let A of e){let m=`rgba(128, 128, 128, ${c})`,p=`rgba(128, 128, 128, ${c})`,g=A.availableZ??[],_=g.includes(0),f=g.includes(1);_&&f?(m=`rgba(128, 0, 128, ${c})`,p=`rgba(128, 0, 128, ${c})`):_?(m=`rgba(0, 0, 255, ${c})`,p=`rgba(0, 0, 255, ${c})`):f&&(m=`rgba(255, 0, 0, ${c})`,p=`rgba(255, 0, 0, ${c})`),s&&A.capacityMeshNodeId===s&&(m=`rgba(0, 255, 0, ${c})`,p=`rgba(0, 128, 0, ${c})`),u.rects.push({...FA(A),fill:m,stroke:p,label:`${A.capacityMeshNodeId}
(Section Node)
Z: ${g.join(",")}`});let y=u.rects.length-1;if(l&&d){let x=l.get(A.capacityMeshNodeId)??0,C=d.get(A.capacityMeshNodeId)??0,I=C>0?(x/C*100).toFixed(1):"N/A",b=Age({usedCapacity:x,totalCapacity:C,layerCount:A.availableZ.length});u.rects[y].label+=`
${x.toFixed(1)} / ${C.toFixed(1)}
${I}% (Pf: ${(100*b).toFixed(1)}%)`,b>0.2&&(u.rects[y].stroke=Cr("red",0.7*(0.8+c)))}}for(let A of t){let[m,p]=A.nodeIds,g=i.get(m),_=i.get(p);if(g&&_){let{lineStart:f,lineEnd:y}=vko(g,_);u.lines.push({points:[f,y],strokeColor:`rgba(0, 0, 0, ${0.2*Math.min(1,c/0.1)})`})}}return n.forEach((A,m)=>{let p=i.get(A.startNodeId),g=i.get(A.endNodeId),_=r[A.connectionName]??"black",f=p&&h.has(p.capacityMeshNodeId),y=g&&h.has(g.capacityMeshNodeId),x=(m+m/50)%5,C=0,I=0,b=0,P=0;if(f&&p){let E=0.02*Math.min(p.width,p.height);C=E*x,I=E*x,u.points.push({x:p.center.x+C,y:p.center.y+I,color:_,label:`Start: ${A.connectionName}
(${A.startNodeId})`}),u.lines.push({points:[{x:p.center.x,y:p.center.y},{x:p.center.x+C,y:p.center.y+I}],strokeColor:"gray",strokeDash:"2 2"})}if(y&&g){let E=0.02*Math.min(g.width,g.height);b=E*x,P=E*x,u.points.push({x:g.center.x+b,y:g.center.y+P,color:_,label:`End: ${A.connectionName}
(${A.endNodeId})`}),u.lines.push({points:[{x:g.center.x,y:g.center.y},{x:g.center.x+b,y:g.center.y+P}],strokeColor:"gray",strokeDash:"2 2"})}f&&y&&p&&g&&u.lines.push({points:[{x:p.center.x+C,y:p.center.y+I},{x:g.center.x+b,y:g.center.y+P}],strokeColor:_,strokeDash:"5 5"})}),o&&o.forEach((A,m)=>{if(A.path&&A.path.length>0){let p=r[A.connectionName]??"gray",g={x:(m+m/50)%5*0.03,y:(m+m/50)%5*0.03};u.lines.push({points:A.path.map(({center:{x:_,y:f}})=>({x:_+g.x,y:f+g.y})),strokeColor:Cr(p,0.2)})}}),u}var Eko=class extends Oi{getSolverName(){return"CapacityPathingSingleSectionSolver"}GREEDY_MULTIPLIER=1.5;sectionNodes;sectionEdges;sectionConnectionTerminals;nodeMap;nodeEdgeMap;colorMap;usedNodeCapacityMap;totalNodeCapacityMap;centerNodeId;currentSectionScore=0;MAX_CANDIDATES_IN_MEMORY=1e4;currentConnectionIndex=0;candidates=null;visitedNodes=null;queuedNodes=null;activeCandidateStraightLineDistance;debug_lastNodeCostMap=new Map;maxCapacityFactor=1;constructor(e){super(),this.MAX_ITERATIONS=1e4,this.centerNodeId=e.centerNodeId,this.sectionNodes=e.sectionNodes,this.sectionEdges=e.sectionEdges,this.sectionConnectionTerminals=e.sectionConnectionTerminals.map((n)=>({...n,path:void 0})),this.nodeMap=e.nodeMap??new Map(this.sectionNodes.map((n)=>[n.capacityMeshNodeId,n])),this.nodeEdgeMap=e.nodeEdgeMap??GV(this.sectionEdges),this.colorMap=e.colorMap??{},this.usedNodeCapacityMap=new Map(this.sectionNodes.map((n)=>[n.capacityMeshNodeId,0])),this.totalNodeCapacityMap=new Map(this.sectionNodes.map((n)=>[n.capacityMeshNodeId,this.getTotalCapacity(n)]));let t=new Set(this.sectionNodes.map((n)=>n.capacityMeshNodeId));this.currentSectionScore=yee({totalNodeCapacityMap:this.totalNodeCapacityMap,usedNodeCapacityMap:this.usedNodeCapacityMap,nodeMap:this.nodeMap,sectionNodeIds:t}),e.hyperParameters?.SHUFFLE_SEED&&(this.sectionConnectionTerminals=NI(this.sectionConnectionTerminals,e.hyperParameters?.SHUFFLE_SEED))}getTotalCapacity(e){return UE(e,this.maxCapacityFactor)}getNodeCapacityPenalty(e){if(!this.nodeMap.has(e.capacityMeshNodeId))return 1/0;let t=this.getTotalCapacity(e)-(this.usedNodeCapacityMap.get(e.capacityMeshNodeId)??0)-1;if(t>0)return 0;let n=1;return e.availableZ.length===1&&(n=10),(0.05+t**2*4)*n}getDistanceBetweenNodes(e,t){let n=e.center.x-t.center.x,o=e.center.y-t.center.y;return Math.sqrt(n**2+o**2)}computeG(e,t,n){return e.g+this.getDistanceBetweenNodes(e.node,t)+this.getNodeCapacityPenalty(t)}computeH(e,t,n){return this.getDistanceBetweenNodes(t,n)+this.getNodeCapacityPenalty(t)}getBacktrackedPath(e){let t=[],n=e;for(;n;){if(t.push(n.node),!this.nodeMap.has(n.node.capacityMeshNodeId)){console.warn("Backtracked path went outside section bounds");break}n=n.prevCandidate}return t.reverse()}getNeighboringNodes(e){return this.nodeMap.has(e.capacityMeshNodeId)?this.nodeEdgeMap.get(e.capacityMeshNodeId)?.flatMap((t)=>t.nodeIds.filter((n)=>n!==e.capacityMeshNodeId)).map((t)=>this.nodeMap.get(t)).filter(Boolean)??[]:[]}isConnectedToEndGoal(e,t){return!(!this.nodeMap.has(e.capacityMeshNodeId)||!this.nodeMap.has(t.capacityMeshNodeId))&&(this.nodeEdgeMap.get(e.capacityMeshNodeId)??[]).some((n)=>n.nodeIds.includes(t.capacityMeshNodeId))}doesNodeHaveCapacityForTrace(e,t){return!0}reduceCapacityAlongPath(e){for(let t of e)if(this.usedNodeCapacityMap.has(t.capacityMeshNodeId)){let n=t.capacityMeshNodeId,o=this.nodeMap.get(n);if(!o){console.warn(`Node ${n} from path not found in section's nodeMap during score update.`);continue}let i=this.totalNodeCapacityMap.get(n),r=this.usedNodeCapacityMap.get(n)??0,s=LQe(r,i,o);this.currentSectionScore-=s;let a=r+1;this.usedNodeCapacityMap.set(n,a);let c=LQe(a,i,o);this.currentSectionScore+=c}}getSolvedSectionScore(){return this.currentSectionScore}_step(){let e=this.sectionConnectionTerminals[this.currentConnectionIndex];if(!e)return void(this.solved=!0);let t=this.nodeMap.get(e.startNodeId),n=this.nodeMap.get(e.endNodeId);if(!t||!n)return console.error(`Start or end node not found in section for connection ${e.connectionName}`),this.currentConnectionIndex++,this.candidates=null,void(this.visitedNodes=null);this.candidates||this._setupAStar(t,n);let o=this.candidates;if(o.length===0)return void this._handleCandidatesExhausted(e);o.sort((s,a)=>s.f-a.f);let i=o.shift();if(o.length>this.MAX_CANDIDATES_IN_MEMORY&&o.splice(this.MAX_CANDIDATES_IN_MEMORY,o.length-this.MAX_CANDIDATES_IN_MEMORY),this.visitedNodes.add(i.node.capacityMeshNodeId),i.node.capacityMeshNodeId===n.capacityMeshNodeId)return void this._handleGoalReached(i,e,n);let r=this.getNeighboringNodes(i.node);for(let s of r){if(this.queuedNodes?.has(s.capacityMeshNodeId))continue;if(!this.doesNodeHaveCapacityForTrace(s,i.node))continue;if(s._containsObstacle){let u=s.capacityMeshNodeId===e.startNodeId,h=s.capacityMeshNodeId===e.endNodeId;if(!u&&!h)continue}let a=this.computeG(i,s,n),c=this.computeH(i,s,n),l=a+c*this.GREEDY_MULTIPLIER;this.debug_lastNodeCostMap.set(s.capacityMeshNodeId,{f:l,g:a,h:c});let d={prevCandidate:i,node:s,f:l,g:a,h:c};this.queuedNodes?.add(s.capacityMeshNodeId),o.push(d)}}computeProgress(){let e=this.sectionConnectionTerminals.length;if(e===0)return 1;let t=this.currentConnectionIndex/e;if(this.currentConnectionIndex<e&&this.candidates&&this.candidates.length>0&&this.activeCandidateStraightLineDistance&&this.activeCandidateStraightLineDistance>0){let n=this.candidates.reduce((o,i)=>i.f<o.f?i:o);t+=Math.max(0,Math.min(1,1-n.h/this.activeCandidateStraightLineDistance))/e}else this.solved&&(t=1);return Math.min(1,t)}_setupAStar(e,t){this.candidates=[{prevCandidate:null,node:e,f:0,g:0,h:0}],this.visitedNodes=new Set([e.capacityMeshNodeId]),this.debug_lastNodeCostMap=new Map,this.activeCandidateStraightLineDistance=bn(e.center,t.center);let n=this.computeH(null,e,t);this.candidates[0].h=n,this.candidates[0].f=n*this.GREEDY_MULTIPLIER,this.debug_lastNodeCostMap.set(e.capacityMeshNodeId,{f:this.candidates[0].f,g:0,h:n}),this.queuedNodes=new Set([e.capacityMeshNodeId])}_handleCandidatesExhausted(e){console.error(`Ran out of candidates for section connection ${e.connectionName}`),this.currentConnectionIndex++,this.candidates=null,this.visitedNodes=null,this.queuedNodes=null}_handleGoalReached(e,t,n){let o=this.getBacktrackedPath(e);t.path=o,this.reduceCapacityAlongPath(o),this.currentConnectionIndex++,this.candidates=null,this.visitedNodes=null,this.queuedNodes=null}visualize(){let e=this.sectionConnectionTerminals.filter((n)=>n.path&&n.path.length>0).map((n)=>({connectionName:n.connectionName,path:n.path})),t=yHe({sectionNodes:this.sectionNodes,sectionEdges:this.sectionEdges,sectionConnectionTerminals:this.sectionConnectionTerminals,completedPaths:e,nodeMap:this.nodeMap,colorMap:this.colorMap,centerNodeId:null,title:`Section Pathing: Conn ${this.currentConnectionIndex+1}/${this.sectionConnectionTerminals.length} (${this.sectionNodes.length} nodes)`,nodeOpacity:0.1});for(let n of this.sectionNodes){let o=t.rects.findIndex((i)=>i.label?.includes(n.capacityMeshNodeId));if(o!==-1){let i=this.debug_lastNodeCostMap.get(n.capacityMeshNodeId),r=this.usedNodeCapacityMap.get(n.capacityMeshNodeId)??0,s=this.getTotalCapacity(n),a=`${r.toFixed(1)}/${s.toFixed(1)}`,c=i?`f:${i.f.toFixed(1)} g:${i.g.toFixed(1)} h:${i.h.toFixed(1)}`:"cost:?";t.rects[o].label=[n.capacityMeshNodeId,`Cap: ${a}`,c,`Z: ${n.availableZ.join(",")}`].join(`
`),r>s&&(t.rects[o].stroke=Cr("red",0.7))}}if(this.candidates&&this.candidates.length>0){let n=this.candidates.slice().sort((s,a)=>s.f-a.f).slice(0,5),o=this.sectionConnectionTerminals[this.currentConnectionIndex],i=o?.connectionName??"unknown",r=this.colorMap[i]??"purple";n.forEach((s,a)=>{let c=0.8*(1-a/5),l=this.getBacktrackedPath(s);l.length>0&&t.lines.push({points:l.map(({center:{x:d,y:u}})=>({x:d,y:u})),strokeColor:Cr(r,1-c),strokeWidth:0.05})})}return t}},IAe=(e)=>Array.from({length:e},(t,n)=>n),Mko=class extends Jge{getSolverName(){return"HyperCapacityPathingSingleSectionSolver"}constructorParams;constructor(e){super(),this.MAX_ITERATIONS=1e5,this.constructorParams=e}computeG(e){return-e.getSolvedSectionScore()}computeH(e){return 0}getCombinationDefs(){let e=this.constructorParams.sectionConnectionTerminals.length;return e===2?[["orderings2_for2"]]:e===3?[["orderings6_for3"]]:e===4?[["orderings24_for4"]]:[["orderings30"]]}getFailureMessage(){return`All CapacityPathingSingleSection solvers failed for "${this.centerNodeId}"`}getHyperParameterDefs(){return[{name:"orderings2_for2",possibleValues:IAe(2).map((e)=>({SHUFFLE_SEED:e}))},{name:"orderings6_for3",possibleValues:IAe(6).map((e)=>({SHUFFLE_SEED:e}))},{name:"orderings24_for4",possibleValues:IAe(24).map((e)=>({SHUFFLE_SEED:e}))},{name:"orderings30",possibleValues:IAe(30).map((e)=>({SHUFFLE_SEED:e}))}]}generateSolver(e){return new Eko({...this.constructorParams,hyperParameters:{...this.constructorParams.hyperParameters,...e}})}onSolve({solver:e}){this.winningSolver=e}get centerNodeId(){return this.constructorParams.centerNodeId}get sectionNodes(){return this.constructorParams.sectionNodes}get sectionConnectionTerminals(){return this.winningSolver?.sectionConnectionTerminals}},Bko=(e)=>Math.floor(10*e)/10,wko=class extends Mko{cacheHit=!1;cacheProvider;hasAttemptedToUseCache=!1;sectionNodeIdSet;cachedSectionConnectionTerminals=null;sectionScore=0;constructor(e){e.nodeMap=e.nodeMap??new Map(e.sectionNodes.map((t)=>[t.capacityMeshNodeId,t])),super(e),this.sectionNodeIdSet=new Set(e.sectionNodes.map((t)=>t.capacityMeshNodeId)),this.cacheProvider=e.cacheProvider===void 0?CS():e.cacheProvider}_step(){!this.hasAttemptedToUseCache&&this.cacheProvider&&this.attemptToUseCacheSync()||(super._step(),(this.solved||this.failed)&&this.cacheProvider&&this.saveToCacheSync())}_computeBfsOrderingOfNodesInSection(){let e=new Set(this.constructorParams.centerNodeId),t=[],n=[{ancestorCapacitySum:0,capacity:0,g:0,capacityMeshNodeId:this.constructorParams.centerNodeId}];for(;n.length>0;){n.sort((r,s)=>s.g-r.g);let o=n.pop();if(!o)break;t.push(o.capacityMeshNodeId);let i=this.constructorParams.nodeEdgeMap.get(o.capacityMeshNodeId).flatMap((r)=>r.nodeIds).filter((r)=>!e.has(r)).filter((r)=>this.sectionNodeIdSet.has(r));for(let r of i){e.add(r);let s=this.constructorParams.nodeMap.get(r),a=UE(s);n.push({ancestorCapacitySum:o.g,capacity:a,g:o.g+a,capacityMeshNodeId:r})}}return t}computeCacheKeyAndTransform(){let e=this._computeBfsOrderingOfNodesInSection(),t=new Map,n=new Map;e.forEach((u,h)=>{let A=`node${h}`;t.set(u,A),n.set(A,u)});let o={};for(let u of e){let h=t.get(u),A=this.constructorParams.nodeMap.get(u),m=UE(A);o[h]=Bko(m).toFixed(1)}let i=new Set,r=[];for(let u of e){let h=t.get(u),A=this.constructorParams.nodeEdgeMap.get(u)??[];for(let m of A){let p=m.nodeIds.find((g)=>g!==u);if(this.sectionNodeIdSet.has(p)){let g=[h,t.get(p)].sort(),_=`${g[0]}-${g[1]}`;i.has(_)||(r.push(g),i.add(_))}}}r.sort((u,h)=>u[0]!==h[0]?u[0].localeCompare(h[0]):u[1].localeCompare(h[1]));let s={},a=new Map,c=new Map;for(let u of this.constructorParams.sectionConnectionTerminals){let h=t.get(u.startNodeId),A=t.get(u.endNodeId),[m,p]=[h,A].sort(),g=`${m}->${p}`,_=c.get(g)??0;c.set(g,_+1);let f=`${m}->${p}::${_}`;s[f]={start:m,end:p},a.set(f,u.connectionName)}let l=`capacitypathing:${POt.default({node_capacity_map:o,node_edge_map:r,terminals:s})}`,d={cacheSpaceToRealConnectionId:a,cacheSpaceToRealNodeId:n};return this.cacheKey=l,this.cacheToSolveSpaceTransform=d,{cacheKey:l,cacheToSolveSpaceTransform:d}}applyCachedSolution(e){if(!this.cacheToSolveSpaceTransform)return console.error("Cache transform not available, cannot apply cached solution."),void(this.failed=!0);if(!e.success)return this.failed=!0,void(this.cacheHit=!0);this.cachedSectionConnectionTerminals=[];let{cacheSpaceToRealNodeId:t,cacheSpaceToRealConnectionId:n}=this.cacheToSolveSpaceTransform;for(let[o,i]of Object.entries(e.solutionPaths)){let r=n.get(o);if(!r){console.warn(`Could not find real connection name for ${o}`);continue}let s=this.constructorParams.sectionConnectionTerminals.find((c)=>c.connectionName===r);if(!s){console.warn(`Could not find original terminal for connection name ${r}`);continue}let a=i.map((c)=>{let l=t.get(c);if(!l)throw Error(`Could not map cache node ID ${c} to real node ID for connection ${r}`);let d=this.constructorParams.nodeMap.get(l);if(!d)throw Error(`Could not find node with ID ${l} in nodeMap for connection ${r}`);return d});this.cachedSectionConnectionTerminals.push({...s,path:a})}this.sectionScore=e.sectionScore,this.solved=!0,this.cacheHit=!0}attemptToUseCacheSync(){if(this.hasAttemptedToUseCache=!0,!this.cacheProvider?.isSyncCache)return console.log("Cache provider is not synchronous, skipping sync cache check."),!1;if(this.cacheKey||this.computeCacheKeyAndTransform(),!this.cacheKey)return console.error("Failed to compute cache key."),!1;try{let e=this.cacheProvider.getCachedSolutionSync(this.cacheKey);if(e)return this.applyCachedSolution(e),!0}catch(e){console.error("Error attempting to use cache:",e)}return!1}saveToCacheSync(){if(!this.cacheKey)return void console.error("Cannot save to cache without cache key.");if(!this.cacheToSolveSpaceTransform)return void console.error("Cache transform not available, cannot save solution to cache.");let e;if(this.failed)e={success:!1};else{if(!this.solved)return;{let t={},{cacheSpaceToRealNodeId:n,cacheSpaceToRealConnectionId:o}=this.cacheToSolveSpaceTransform,i=new Map;for(let[a,c]of n)i.set(c,a);let r=new Map;for(let[a,c]of o)r.set(c,a);let s=[];if(super.sectionConnectionTerminals){for(let a of super.sectionConnectionTerminals)if(a.path&&a.path.length>0){let c=a.path.map((l)=>l.capacityMeshNodeId);s.push([a.connectionName,c])}}for(let[a,c]of s){let l=r.get(a);if(!l){console.warn(`Could not find cache space connection ID for ${a} when saving to cache.`);continue}let d=c.map((u)=>{let h=i.get(u);if(!h)throw Error(`Could not map real node ID ${u} to cache node ID for connection ${a} when saving to cache.`);return h});t[l]=d}e={success:!0,sectionScore:this.sectionScore,solutionPaths:t}}}try{this.cacheProvider?.setCachedSolutionSync(this.cacheKey,e)}catch(t){console.error("Error saving solution to cache:",t)}}get sectionConnectionTerminals(){return this.cacheHit&&this.solved&&this.cachedSectionConnectionTerminals?(console.log("returning the cached section connection terminals"),this.cachedSectionConnectionTerminals):super.sectionConnectionTerminals}visualize(){if(!this.cacheHit)return super.visualize();return yHe({sectionNodes:this.constructorParams.sectionNodes,sectionEdges:this.constructorParams.sectionEdges,sectionConnectionTerminals:this.cachedSectionConnectionTerminals,completedPaths:this.cachedSectionConnectionTerminals.map((t)=>({connectionName:t.connectionName,path:t.path})),nodeMap:this.constructorParams.nodeMap,colorMap:this.constructorParams.colorMap,title:"CachedHyperCapacityPathingSingleSectionSolver"})}},Tko=class extends Oi{getSolverName(){return"CapacityPathingMultiSectionSolver"}simpleRouteJson;nodes;edges;nodeEdgeMap;connectionsWithNodes=[];colorMap;initialSolver;cacheProvider;stage="initialization";nodeMap=new Map;allNodeIdsSet;usedNodeCapacityMap=new Map;totalNodeCapacityMap=new Map;nodeCapacityPercentMap=new Map;nodeOptimizationAttemptCountMap=new Map;currentSection=null;sectionSolver=null;currentScheduleIndex=0;stats;OPTIMIZATION_SCHEDULE=[{MAX_ATTEMPTS_PER_NODE:1,MAX_EXPANSION_DEGREES:3,MINIMUM_PROBABILITY_OF_FAILURE_TO_OPTIMIZE:0.05},{MAX_ATTEMPTS_PER_NODE:2,MAX_EXPANSION_DEGREES:5,MINIMUM_PROBABILITY_OF_FAILURE_TO_OPTIMIZE:0.2},{MAX_ATTEMPTS_PER_NODE:3,MAX_EXPANSION_DEGREES:7,MINIMUM_PROBABILITY_OF_FAILURE_TO_OPTIMIZE:0.9}];get currentSchedule(){return this.OPTIMIZATION_SCHEDULE[this.currentScheduleIndex]??null}constructor(e){super(),this.stats={successfulOptimizations:0,failedOptimizations:0,failedSectionSolvers:0,startingScore:0,scheduleScores:this.OPTIMIZATION_SCHEDULE.map(({MAX_EXPANSION_DEGREES:t})=>({maxExpansionDegrees:t,endingScore:0,endingHighestNodePf:0,sectionAttempts:0})),cacheHits:0,cacheMisses:0},this.MAX_ITERATIONS=e.MAX_ITERATIONS??1e7,this.cacheProvider=e.cacheProvider,this.simpleRouteJson=e.simpleRouteJson,this.nodes=e.nodes,this.edges=e.edges,this.nodeEdgeMap=GV(this.edges),this.colorMap=e.colorMap??{},this.nodeMap=new Map(this.nodes.map((t)=>[t.capacityMeshNodeId,t])),this.nodeEdgeMap=GV(this.edges),this.initialSolver=e.initialPathingSolver||new SOt({simpleRouteJson:this.simpleRouteJson,nodes:this.nodes,edges:this.edges,colorMap:this.colorMap}),this.activeSubSolver=this.initialSolver;for(let t of this.nodes){let n=this.initialSolver.getTotalCapacity(t);this.totalNodeCapacityMap.set(t.capacityMeshNodeId,n)}this.allNodeIdsSet=new Set(this.nodes.map((t)=>t.capacityMeshNodeId))}_stepInitialization(){if(this.initialSolver?.step(),this.initialSolver?.failed)return this.failed=!0,void(this.error=this.initialSolver.error);if(this.initialSolver?.solved){this.usedNodeCapacityMap=new Map(this.initialSolver.usedNodeCapacityMap);for(let e of this.nodes){let t=this.totalNodeCapacityMap.get(e.capacityMeshNodeId)??0,n=this.usedNodeCapacityMap.get(e.capacityMeshNodeId)??0,o=t>0?n/t:0;this.nodeCapacityPercentMap.set(e.capacityMeshNodeId,o),this.nodeOptimizationAttemptCountMap.set(e.capacityMeshNodeId,0)}this.connectionsWithNodes=this.initialSolver.connectionsWithNodes,this.stats.startingScore=yee({totalNodeCapacityMap:this.totalNodeCapacityMap,usedNodeCapacityMap:this.usedNodeCapacityMap,nodeMap:this.nodeMap,sectionNodeIds:this.allNodeIdsSet}),this.stage="section-optimization"}}_getNextNodeToOptimize(){let e=0,t=0,n=null;for(let o of this.nodes){if(o._containsTarget)continue;let i=this.nodeOptimizationAttemptCountMap.get(o.capacityMeshNodeId),r=this.totalNodeCapacityMap.get(o.capacityMeshNodeId),s=Age({usedCapacity:this.usedNodeCapacityMap.get(o.capacityMeshNodeId)??0,totalCapacity:r,layerCount:o.availableZ.length}),a=s/(i+1);i<this.currentSchedule.MAX_ATTEMPTS_PER_NODE&&a>e&&s>this.currentSchedule.MINIMUM_PROBABILITY_OF_FAILURE_TO_OPTIMIZE&&(e=a,t=s,n=o.capacityMeshNodeId)}return n}getOverallScore(){let e=0;for(let t of this.nodes){if(t._containsTarget)continue;let n=this.totalNodeCapacityMap.get(t.capacityMeshNodeId),o=Age({usedCapacity:this.usedNodeCapacityMap.get(t.capacityMeshNodeId)??0,totalCapacity:n,layerCount:t.availableZ.length});o>e&&(e=o)}return{highestNodePf:e,score:yee({totalNodeCapacityMap:this.totalNodeCapacityMap,usedNodeCapacityMap:this.usedNodeCapacityMap,nodeMap:this.nodeMap,sectionNodeIds:this.allNodeIdsSet})}}_stepSectionOptimization(){if(!this.sectionSolver){let e=this._getNextNodeToOptimize();if(!e){let{highestNodePf:n,score:o}=this.getOverallScore();return this.stats.scheduleScores[this.currentScheduleIndex].endingHighestNodePf=n,this.stats.scheduleScores[this.currentScheduleIndex].endingScore=o,this.currentScheduleIndex++,void(this.currentSchedule||(this.solved=!0))}let t=((n)=>{let{centerNodeId:o,connectionsWithNodes:i,nodeMap:r,edges:s,nodeEdgeMap:a,expansionDegrees:c}=n,l=new Set,d=[{nodeId:o,depth:0}];l.add(o);let u=0;for(;u<d.length;){let{nodeId:p,depth:g}=d[u++];if(g>=c)continue;let _=a.get(p)?.flatMap((f)=>f.nodeIds.filter((y)=>y!==p))??[];for(let f of _)l.has(f)||(l.add(f),d.push({nodeId:f,depth:g+1}))}let h=Array.from(l).map((p)=>r.get(p)),A=s.filter((p)=>{let[g,_]=p.nodeIds;return l.has(g)&&l.has(_)}),m=[];for(let p of i){if(!p.path)continue;let g=null,_=null;for(let f of p.path)if(l.has(f.capacityMeshNodeId)){g=f.capacityMeshNodeId;break}for(let f=p.path.length-1;f>=0;f--){let y=p.path[f];if(l.has(y.capacityMeshNodeId)){_=y.capacityMeshNodeId;break}}g&&_&&m.push({connectionName:p.connection.name,startNodeId:g,endNodeId:_})}return{sectionConnectionTerminals:m,sectionNodes:h,sectionEdges:A,centerNodeId:o}})({centerNodeId:e,connectionsWithNodes:this.connectionsWithNodes,nodeMap:this.nodeMap,edges:this.edges,expansionDegrees:this.currentSchedule.MAX_EXPANSION_DEGREES,nodeEdgeMap:this.nodeEdgeMap});this.stats.scheduleScores[this.currentScheduleIndex].sectionAttempts++,this.currentSection=t,this.sectionSolver=new wko({sectionNodes:this.currentSection.sectionNodes,sectionEdges:this.currentSection.sectionEdges,sectionConnectionTerminals:this.currentSection.sectionConnectionTerminals,colorMap:this.colorMap,centerNodeId:this.currentSection.centerNodeId,nodeEdgeMap:this.nodeEdgeMap,hyperParameters:{EXPANSION_DEGREES:this.currentSchedule.MAX_EXPANSION_DEGREES},cacheProvider:this.cacheProvider}),this.activeSubSolver=this.sectionSolver,this.nodeOptimizationAttemptCountMap.set(e,(this.nodeOptimizationAttemptCountMap.get(e)??0)+1)}if(this.sectionSolver.step(),(this.sectionSolver.failed||this.sectionSolver.solved)&&(this.sectionSolver.cacheHit?this.stats.cacheHits++:this.stats.cacheMisses++),this.sectionSolver.failed)return console.warn(`Section solver failed for node ${this.currentSection.centerNodeId}. Error: ${this.sectionSolver.error}`),this.stats.failedSectionSolvers++,this.stats.failedOptimizations++,this.sectionSolver=null,void(this.activeSubSolver=null);if(this.sectionSolver.solved){let e=this.sectionSolver.sectionConnectionTerminals,t=this.sectionSolver.sectionNodes,n=this.sectionSolver.centerNodeId;if(this.sectionSolver=null,this.activeSubSolver=null,!e)return void console.warn(`Pathing sub-solver for section ${this.currentSection.centerNodeId} did not complete successfully. Discarding results.`);let o=new Set(t.map((a)=>a.capacityMeshNodeId)),i=yee({totalNodeCapacityMap:this.totalNodeCapacityMap,usedNodeCapacityMap:this.usedNodeCapacityMap,nodeMap:this.nodeMap,sectionNodeIds:o}),r=new Map(this.usedNodeCapacityMap),s=e;for(let a of s){let c=this.connectionsWithNodes.find((l)=>l.connection.name===a.connectionName);if(c?.path){for(let l of c.path)if(o.has(l.capacityMeshNodeId)){let d=r.get(l.capacityMeshNodeId)??0;r.set(l.capacityMeshNodeId,Math.max(0,d-1))}}}for(let a of s)if(a.path)for(let c of a.path)o.has(c.capacityMeshNodeId)&&r.set(c.capacityMeshNodeId,(r.get(c.capacityMeshNodeId)??0)+1);yee({totalNodeCapacityMap:this.totalNodeCapacityMap,usedNodeCapacityMap:r,nodeMap:this.nodeMap,sectionNodeIds:o})>i?(this.stats.successfulOptimizations++,this._mergeSolvedSectionPaths({centerNodeId:n,sectionConnectionTerminals:e}),this._recalculateNodeCapacityUsage()):this.stats.failedOptimizations++}}_mergeSolvedSectionPaths({centerNodeId:e,sectionConnectionTerminals:t}){for(let n of t){if(!n.path){console.warn(`No path found for connection ${n.connectionName} in section ${e}`);continue}let o=this.connectionsWithNodes.find((A)=>A.connection.name===n.connectionName);if(!o||!o.path){console.warn(`Original connection or path not found for ${n.connectionName} while merging section ${e}`);continue}let i=o.path,r=n.path,s=i.findIndex((A)=>A.capacityMeshNodeId===n.startNodeId),a=i.findIndex((A)=>A.capacityMeshNodeId===n.endNodeId);if(s===-1||a===-1){console.warn(`Could not find start/end nodes (${n.startNodeId}/${n.endNodeId}) in original path for ${n.connectionName}`);continue}let[c,l]=s<=a?[s,a]:[a,s],d=i.slice(0,c),u=i.slice(l+1),h=r;if(r.length>0&&i[c]&&r[0].capacityMeshNodeId!==i[c].capacityMeshNodeId){if(r[r.length-1].capacityMeshNodeId!==i[c].capacityMeshNodeId){console.warn(`New section path for ${n.connectionName} doesn't align with original path boundaries. Skipping merge for this connection.`);continue}h=[...r].reverse()}o.path=[...d,...h,...u]}}_recalculateNodeCapacityUsage(){this.usedNodeCapacityMap.clear();for(let e of this.connectionsWithNodes)if(e.path)for(let t of e.path)this.usedNodeCapacityMap.set(t.capacityMeshNodeId,(this.usedNodeCapacityMap.get(t.capacityMeshNodeId)??0)+1);for(let e of this.nodes){let t=this.totalNodeCapacityMap.get(e.capacityMeshNodeId)??0,n=this.usedNodeCapacityMap.get(e.capacityMeshNodeId)??0,o=t>0?n/t:0;this.nodeCapacityPercentMap.set(e.capacityMeshNodeId,o)}}getCapacityPaths(){let e=[];for(let t of this.connectionsWithNodes){let n=t.path;n&&e.push({capacityPathId:t.connection.name,connectionName:t.connection.name,nodeIds:n.map((o)=>o.capacityMeshNodeId)})}return e}_step(){this.iterations>=this.MAX_ITERATIONS-1?this.solved=!0:this.stage==="initialization"?this._stepInitialization():this.stage==="section-optimization"&&this._stepSectionOptimization()}visualize(){let e=this.connectionsWithNodes.filter((t)=>t.path&&t.path.length>0).map((t)=>({connectionName:t.connection.name,path:t.path}));return yHe({nodeMap:this.nodeMap,sectionConnectionTerminals:this.connectionsWithNodes.map((t)=>({connectionName:t.connection.name,startNodeId:t.path?.[0]?.capacityMeshNodeId,endNodeId:t.path?.[t.path.length-1]?.capacityMeshNodeId})),completedPaths:e,sectionNodes:this.nodes,sectionEdges:this.edges,colorMap:this.colorMap,totalCapacityMap:this.totalNodeCapacityMap,usedNodeCapacityMap:this.usedNodeCapacityMap,nodeOpacity:0.05,title:"Capacity Pathing Multi-Section Solver (Solved)"})}},Dko=class extends Oi{getSolverName(){return"DeadEndSolver"}removedNodeIds;targetNodeIds;leaves;leavesIndex;adjacencyList;nodeMap;nodes;edges;constructor({nodes:e,edges:t}){super(),this.MAX_ITERATIONS=e.length,this.nodes=e,this.edges=t,this.removedNodeIds=new Set,this.targetNodeIds=new Set(e.filter((n)=>n._containsTarget).map((n)=>n.capacityMeshNodeId)),this.adjacencyList=new Map(e.map(({capacityMeshNodeId:n})=>[n,new Set]));for(let{nodeIds:[n,o]}of t)this.adjacencyList.get(n).add(o),this.adjacencyList.get(o).add(n);this.leavesIndex=0,this.leaves=[...this.adjacencyList.entries()].filter(([n,o])=>o.size===1).filter(([n,o])=>!this.targetNodeIds.has(n)).map(([n,o])=>n)}_step(){if(this.leavesIndex===this.leaves.length)return void(this.solved=!0);let e=this.leaves[this.leavesIndex],t=this.adjacencyList.get(e);if(!t||t.size===0)return this.removedNodeIds.add(e),this.adjacencyList.delete(e),this.leavesIndex+=1,void(this.leavesIndex===this.leaves.length&&(this.solved=!0));let[n]=t,o=n?this.adjacencyList.get(n):void 0;if(!n||!o)return this.removedNodeIds.add(e),this.adjacencyList.delete(e),this.leavesIndex+=1,void(this.leavesIndex===this.leaves.length&&(this.solved=!0));o.delete(e),this.removedNodeIds.add(e),this.adjacencyList.delete(e),o.size!==1||this.targetNodeIds.has(n)||this.leaves.push(n),this.leavesIndex+=1,this.leavesIndex===this.leaves.length&&(this.solved=!0)}visualize(){if(!this.nodeMap){this.nodeMap=new Map;for(let n of this.nodes)this.nodeMap.set(n.capacityMeshNodeId,n)}let e=new Map;for(let n of this.edges)for(let o of n.nodeIds)e.set(o,1+(e.get(o)??0));let t={lines:[],points:[],rects:this.nodes.map((n)=>{let o=Math.min(...n.availableZ);return{width:Math.max(n.width-2,0.8*n.width),height:Math.max(n.height-2,0.8*n.height),center:{x:n.center.x+o*n.width*0.05,y:n.center.y-o*n.width*0.05},fill:n._containsObstacle?"rgba(255,0,0,0.1)":{"0,1":"rgba(0,0,0,0.1)",0:"rgba(0,200,200, 0.1)",1:"rgba(0,0,200, 0.1)"}[n.availableZ.join(",")]??"rgba(0,200,200,0.1)",label:[n.capacityMeshNodeId,`availableZ: ${n.availableZ.join(",")}`,`target? ${n._containsTarget??!1}`,`obs? ${n._containsObstacle??!1}`,`conn: ${e.get(n.capacityMeshNodeId)??0}`].join(`
`),layer:`z${n.availableZ.join(",")}`}}),circles:[]};for(let n of this.edges){let o=this.nodeMap.get(n.nodeIds[0]),i=this.nodeMap.get(n.nodeIds[1]);if(o?.center&&i?.center){let r=Math.min(...o.availableZ),s=Math.min(...i.availableZ),a={x:o.center.x+r*o.width*0.05,y:o.center.y-r*o.width*0.05},c={x:i.center.x+s*i.width*0.05,y:i.center.y-s*i.width*0.05},l=Array.from(new Set([...o.availableZ,...i.availableZ])).sort();t.lines.push({layer:`z${l.join(",")}`,points:[a,c],strokeDash:o.availableZ.join(",")===i.availableZ.join(",")?void 0:"10 5",strokeColor:n.nodeIds.some((d)=>this.removedNodeIds.has(d))?Cr("black",0.9):void 0})}}return t}},Nko=class extends AHe{getSolverName(){return"NoOffBoardMultipleHighDensityRouteStitchSolver"}constructor(e){super(e),this.unsolvedRoutes=[];let t=new Map;for(let n of e.hdRoutes){let o=t.get(n.connectionName)||[];o.push(n),t.set(n.connectionName,o)}for(let[n,o]of t.entries()){let i=e.connections.find((a)=>a.name===n);if(!i)continue;let r={...i.pointsToConnect[0],z:Wi(k_(i.pointsToConnect[0]),e.layerCount)},s={...i.pointsToConnect[1],z:Wi(k_(i.pointsToConnect[1]),e.layerCount)};this.unsolvedRoutes.push({connectionName:n,hdRoutes:o,start:r,end:s})}for(let n of e.connections)t.has(n.name)||this.unsolvedRoutes.push({connectionName:n.name,hdRoutes:[],start:{...n.pointsToConnect[0],z:Wi(k_(n.pointsToConnect[0]),e.layerCount)},end:{...n.pointsToConnect[1],z:Wi(k_(n.pointsToConnect[1]),e.layerCount)}})}},bAe=0.005,Rko=class extends Oi{getSolverName(){return"SingleLayerNodeMergerSolver"}nodeMap;currentBatchNodeIds;absorbedNodeIds;nextBatchNodeIds;batchHadModifications;hasComputedAdjacentNodeIds=!1;newNodes;constructor(e){super(),this.nodeMap=new Map,this.MAX_ITERATIONS=1e5;for(let n of e)this.nodeMap.set(n.capacityMeshNodeId,n);this.newNodes=[],this.absorbedNodeIds=new Set;let t=[];for(let n of e)n.availableZ.length>1?(this.newNodes.push(n),this.absorbedNodeIds.add(n.capacityMeshNodeId)):t.push([n,n.width*n.height]);t.sort((n,o)=>n[1]-o[1]);for(let[n,o]of t){let i={...n,center:{...n.center}};this.nodeMap.set(n.capacityMeshNodeId,i)}this.currentBatchNodeIds=t.map(([n])=>n.capacityMeshNodeId),this.nextBatchNodeIds=[],this.batchHadModifications=!1}computeAdjacentNodeIdsForFirstBatch(e){let t=Math.max(...e.map((o)=>Math.max(...o.availableZ))),n=[];for(let o=0;o<=t;o++)n.push(new Yke(e.filter((i)=>i.availableZ[0]===o)));for(let o of e){let i=[],r=n[o.availableZ[0]].getNodesInArea(o.center.x,o.center.y,4*o.width,4*o.height);for(let s of r)s._containsTarget&&s._targetConnectionName!==o._targetConnectionName||o._containsTarget&&(!s._containsTarget||s._targetConnectionName!==o._targetConnectionName)||s.capacityMeshNodeId!==o.capacityMeshNodeId&&Kge(o,s)&&i.push(s);o._adjacentNodeIds=i.map((s)=>s.capacityMeshNodeId)}}getAdjacentSameLayerUnprocessedNodes(e){return this.getAdjacentSameLayerUnprocessedNodes2(e)}getAdjacentSameLayerUnprocessedNodes2(e){let t=[],n=Array.from(new Set((e._adjacentNodeIds??[]).map((o)=>this.nodeMap.get(o)))).filter((o)=>o&&o.capacityMeshNodeId!==e.capacityMeshNodeId);n.sort((o,i)=>o.width*o.height-i.width*i.height);for(let o of n)this.absorbedNodeIds.has(o.capacityMeshNodeId)||t.push(o);return t}_step(){this.hasComputedAdjacentNodeIds||(this.computeAdjacentNodeIdsForFirstBatch(this.currentBatchNodeIds.map((l)=>this.nodeMap.get(l))),this.hasComputedAdjacentNodeIds=!0);let e=this.currentBatchNodeIds.pop();for(;e&&this.absorbedNodeIds.has(e);)e=this.currentBatchNodeIds.pop();if(!e)return this.batchHadModifications?(this.currentBatchNodeIds=this.nextBatchNodeIds.sort((l,d)=>{let u=this.nodeMap.get(l),h=this.nodeMap.get(d);return u.width*u.height-h.width*h.height}),this.nextBatchNodeIds=[],void(this.batchHadModifications=!1)):(this.solved=!0,void this.newNodes.push(...this.nextBatchNodeIds.map((l)=>this.nodeMap.get(l))));let t=this.nodeMap.get(e),n=!1,o=this.getAdjacentSameLayerUnprocessedNodes(t);if(o.length===0)return void this.nextBatchNodeIds.push(e);let i=(l)=>{for(let d of l)this.absorbedNodeIds.add(d.capacityMeshNodeId);t._adjacentNodeIds=Array.from(new Set([...t._adjacentNodeIds??[],...l.flatMap((d)=>d._adjacentNodeIds??[])].filter((d)=>d!==t.capacityMeshNodeId&&!this.absorbedNodeIds.has(d))))},r=o.filter((l)=>l.center.x<t.center.x&&Math.abs(l.center.y-t.center.y)<t.height/2);if(r.length>0){let{width:l,height:d}=r[0],u=r.every((h)=>h.width===l&&h.height===d);Math.abs(r.reduce((h,A)=>h+A.height,0)-t.height)<bAe&&u&&(t.width+=l,t.center.x=t.center.x-l/2,i(r),n=!0)}let s=o.filter((l)=>l.center.x>t.center.x&&Math.abs(l.center.y-t.center.y)<t.height/2);if(s.length>0&&!n){let{width:l,height:d}=s[0],u=s.every((h)=>h.width===l&&h.height===d);Math.abs(s.reduce((h,A)=>h+A.height,0)-t.height)<bAe&&u&&(t.width+=l,t.center.x=t.center.x+l/2,i(s),n=!0)}let a=o.filter((l)=>l.center.y>t.center.y&&Math.abs(l.center.x-t.center.x)<t.width/2);if(a.length>0&&!n){let{width:l,height:d}=a[0],u=a.every((h)=>h.width===l&&h.height===d);Math.abs(a.reduce((h,A)=>h+A.width,0)-t.width)<bAe&&u&&(t.height+=d,t.center.y=t.center.y+d/2,i(a),n=!0)}let c=o.filter((l)=>l.center.y<t.center.y&&Math.abs(l.center.x-t.center.x)<t.width/2);if(c.length>0&&!n){let{width:l,height:d}=c[0],u=c.every((h)=>h.width===l&&h.height===d);Math.abs(c.reduce((h,A)=>h+A.width,0)-t.width)<bAe&&u&&(t.height+=d,t.center.y=t.center.y-d/2,i(c),n=!0)}n?(this.batchHadModifications=!0,this.currentBatchNodeIds.push(e)):this.nextBatchNodeIds.unshift(e)}visualize(){let e={circles:[],lines:[],points:[],rects:[],coordinateSystem:"cartesian",title:"Same Layer Node Merger"};for(let o of this.newNodes)e.rects.push(FA(o));let t=this.currentBatchNodeIds[this.currentBatchNodeIds.length-1],n;t&&(n=this.getAdjacentSameLayerUnprocessedNodes(this.nodeMap.get(t)));for(let o of this.currentBatchNodeIds){let i=this.nodeMap.get(o);if(!this.absorbedNodeIds.has(o)&&i){let r=FA(i,{rectMargin:0.01});o===t?r.stroke="rgba(0, 255, 0, 0.8)":n?.some((s)=>s.capacityMeshNodeId===o)?r.stroke="rgba(128, 0, 128, 0.8)":r.stroke="rgba(255, 165, 0, 0.8)",r.layer=`z${i.availableZ.join(",")}`,r.label=`${r.label}
(unprocessed)`,e.rects.push(r)}}for(let o of this.nextBatchNodeIds){let i=this.nodeMap.get(o);if(!this.absorbedNodeIds.has(o)&&i){let r=FA(i,{rectMargin:0.01});r.layer=`z${i.availableZ.join(",")}`,r.stroke="rgba(0, 217, 255, 0.8)",r.label=`${r.label}
x: ${i.center.x}, y: ${i.center.y}
${i.width}x${i.height}
(next batch)`,e.rects.push(r)}}return e}},Qko=class extends Oi{getSolverName(){return"StrawSolver"}multiLayerNodes;strawNodes;skippedNodes;unprocessedNodes;strawSize;nodeIdCounter;constructor(e){super(),this.MAX_ITERATIONS=1e5,this.strawSize=e.strawSize??0.5,this.multiLayerNodes=[],this.strawNodes=[],this.skippedNodes=[],this.nodeIdCounter=0,this.unprocessedNodes=[];for(let t of e.nodes)t.availableZ.length===1?this.unprocessedNodes.push(t):this.multiLayerNodes.push(t)}getCapacityOfMultiLayerNodesWithinBounds(e){let t=0;for(let n of this.multiLayerNodes){let o=n.center.x-n.width/2,i=n.center.x+n.width/2,r=n.center.y-n.height/2,s=n.center.y+n.height/2,a=Math.max(e.minX,o),c=Math.min(e.maxX,i),l=Math.max(e.minY,r),d=Math.min(e.maxY,s);if(a<c&&l<d){let u=(c-a)*(d-l)/(n.width*n.height);t+=UE(n)*u}}return t}getSurroundingCapacities(e){let t=Math.min(e.width,e.height);return{leftSurroundingCapacity:this.getCapacityOfMultiLayerNodesWithinBounds({minX:e.center.x-e.width/2-t,maxX:e.center.x-e.width/2,minY:e.center.y-e.height/2,maxY:e.center.y+e.height/2}),rightSurroundingCapacity:this.getCapacityOfMultiLayerNodesWithinBounds({minX:e.center.x+e.width/2,maxX:e.center.x+e.width/2+t,minY:e.center.y-e.height/2,maxY:e.center.y+e.height/2}),topSurroundingCapacity:this.getCapacityOfMultiLayerNodesWithinBounds({minX:e.center.x-e.width/2,maxX:e.center.x+e.width/2,minY:e.center.y-e.height/2-t,maxY:e.center.y-e.height/2}),bottomSurroundingCapacity:this.getCapacityOfMultiLayerNodesWithinBounds({minX:e.center.x-e.width/2,maxX:e.center.x+e.width/2,minY:e.center.y+e.height/2,maxY:e.center.y+e.height/2+t})}}createStrawsForNode(e){let t=[],{leftSurroundingCapacity:n,rightSurroundingCapacity:o,topSurroundingCapacity:i,bottomSurroundingCapacity:r}=this.getSurroundingCapacities(e);if(1*(n+o)>i+r){let s=Math.floor(e.height/this.strawSize),a=e.height/s;for(let c=0;c<s;c++){let l=e.center.y-e.height/2+c*a+a/2;t.push({capacityMeshNodeId:`${e.capacityMeshNodeId}_straw${c}`,center:{x:e.center.x,y:l},width:e.width,height:a,layer:e.layer,availableZ:[...e.availableZ],_depth:e._depth,_strawNode:!0,_strawParentCapacityMeshNodeId:e.capacityMeshNodeId})}}else{let s=Math.floor(e.width/this.strawSize),a=e.width/s;for(let c=0;c<s;c++){let l=e.center.x-e.width/2+c*a+a/2;t.push({capacityMeshNodeId:`${e.capacityMeshNodeId}_straw${c}`,center:{x:l,y:e.center.y},width:a,height:e.height,layer:e.layer,availableZ:[...e.availableZ],_depth:e._depth,_strawNode:!0,_strawParentCapacityMeshNodeId:e.capacityMeshNodeId})}}return t}getResultNodes(){return[...this.multiLayerNodes,...this.strawNodes,...this.skippedNodes]}_step(){let e=this.unprocessedNodes.pop();if(!e)return void(this.solved=!0);if(e.width<this.strawSize&&e.height<this.strawSize)return void this.skippedNodes.push(e);if(e._containsTarget)return void this.skippedNodes.push(e);let t=this.createStrawsForNode(e);this.strawNodes.push(...t),t.length===0&&this.strawNodes.push(e)}visualize(){let e={rects:[],lines:[],points:[],circles:[],title:"Straw Solver"};for(let t of this.unprocessedNodes)e.rects.push({center:t.center,width:t.width,height:t.height,fill:"rgba(200, 200, 200, 0.5)",stroke:"rgba(0, 0, 0, 0.5)",label:`${t.capacityMeshNodeId}
Unprocessed
${t.width}x${t.height}`});for(let t of this.strawNodes){let n=t.availableZ[0]===0?"rgba(0, 150, 255, 0.5)":"rgba(255, 100, 0, 0.5)";e.rects.push({center:t.center,width:t.width,height:t.height,fill:n,stroke:"rgba(0, 0, 0, 0.5)",label:`${t.capacityMeshNodeId}
Layer: ${t.availableZ[0]}
${t.width}x${t.height}`,layer:`z${t.availableZ.join(",")}`})}for(let t of this.multiLayerNodes)e.rects.push({center:t.center,width:0.9*t.width,height:0.9*t.height,fill:"rgba(100, 255, 100, 0.5)",stroke:"rgba(0, 0, 0, 0.5)",layer:`z${t.availableZ.join(",")}`,label:`${t.capacityMeshNodeId}
Layers: ${t.availableZ.join(",")}
${t.width}x${t.height}`});return e}};function A3t(e){let{nodeId:t,nodeIdToSegmentIds:n,segmentIdToNodeIds:o,hops:i}=e;if(i===0)return[t];let r=new Set([t]),s=[{nodeId:t,remainingHops:i}];for(;s.length>0;){let{nodeId:a,remainingHops:c}=s.shift();if(c===0)continue;let l=n.get(a)||[];for(let d of l){let u=o.get(d)||[];for(let h of u)r.has(h)||(r.add(h),s.push({nodeId:h,remainingHops:c-1}))}}return Array.from(r)}var FQe=(e)=>Array.from(e.entries()).map(([t,{x:n,y:o,z:i}])=>`${t}(${n?.toFixed(3)??""},${o?.toFixed(3)??""},${i??""})`).sort().join("&"),kko=(e,t,n,o)=>{let i=Math.min(e,t),r=Math.max(e,t),s=Math.min(n,o);return i<=Math.max(n,o)&&r>=s},S_e=(e,t,n,o)=>{let i=[],r=new Map(e.originalPointMap);for(let[s,a]of n.entries()){let c=r.get(s);r.set(s,{x:a.x??c.x,y:a.y??c.y,z:a.z??c.z})}for(let s of e.allNodeIds){if(!t.get(s))continue;let a=e.segmentPairsInNode.get(s);for(let c of a){let l=r.get(c[0]),d=r.get(c[1]);l.z!==d.z&&i.push({type:"transition_via",segmentPoints:c,capacityMeshNodeId:s,probabilityOfFailure:0})}for(let c=0;c<a.length;c++)for(let l=c+1;l<a.length;l++){if(o?.areIdsConnected(a[c][0],a[c][1]))continue;let d=a[c],u=a[l],h=r.get(d[0]),A=r.get(d[1]),m=r.get(u[0]),p=r.get(u[1]);if(!kko(h.z,A.z,m.z,p.z))continue;let g=fu(h,A,m,p),_=h.z===A.z&&m.z===p.z&&h.z===m.z;g&&(_?i.push({type:"same_layer_crossing",segmentPoints:[d,u],capacityMeshNodeId:s,crossingLine1:d,crossingLine2:u,probabilityOfFailure:0}):h.z===A.z&&m.z!==p.z?i.push({type:"single_transition_crossing",segmentPoints:[d,u],capacityMeshNodeId:s,sameLayerCrossingLine:d,transitionCrossingLine:u,probabilityOfFailure:0}):h.z!==A.z&&m.z===p.z?i.push({type:"single_transition_crossing",segmentPoints:[d,u],capacityMeshNodeId:s,sameLayerCrossingLine:u,transitionCrossingLine:d,probabilityOfFailure:0}):h.z!==A.z&&m.z!==p.z&&i.push({type:"double_transition_crossing",segmentPoints:[d,u],capacityMeshNodeId:s,crossingLine1:d,crossingLine2:u,probabilityOfFailure:0}))}}return i},vOt=(e,t,n)=>{if(t.type==="change_layer")for(let o of t.segmentPointIds){let i=e.get(o)||{};e.set(o,{...i,z:t.newZ})}else if(t.type==="swap_position_on_segment"){let[o,i]=t.segmentPointIds,r=n(o),s=n(i),a=e.get(o)||{},c=e.get(i)||{};e.set(o,{...a,x:s.x,y:s.y}),e.set(i,{...c,x:r.x,y:r.y})}else if(t.type==="combined")for(let o of t.operations)vOt(e,o,n)},EOt=(e,t)=>{let n=new Map,o=new Map,i=new Map,r=[],s=0;for(let a of e)for(let c of a.assignedPoints){let l={segmentPointId:"SP"+s++,segmentId:a.nodePortSegmentId,capacityMeshNodeIds:t.get(a.nodePortSegmentId),connectionName:c.connectionName,rootConnectionName:c.rootConnectionName,x:c.point.x,y:c.point.y,z:c.point.z,directlyConnectedSegmentPointIds:[]};n.set(l.segmentPointId,l);for(let d of l.capacityMeshNodeIds)o.set(d,[...o.get(d)??[],l.segmentPointId]);i.set(a.nodePortSegmentId,[...i.get(a.nodePortSegmentId)??[],l.segmentPointId]),r.push(l)}return{segmentPointMap:n,nodeToSegmentPointMap:o,segmentToSegmentPointMap:i}},Lko=class extends Oi{getSolverName(){return"UnravelSectionSolver"}nodeMap;dedupedSegments;dedupedSegmentMap;MUTABLE_HOPS=1;unravelSection;candidates=[];lastProcessedCandidate=null;bestCandidate=null;originalCandidate;rootNodeId;nodeIdToSegmentIds;segmentIdToNodeIds;colorMap;tunedNodeCapacityMap;MAX_CANDIDATES=500;iterationsSinceImprovement=0;hyperParameters;selectedCandidateIndex=null;queuedOrExploredCandidatePointModificationHashes=new Set;constructorParams;constructor(e){if(super(),this.constructorParams=e,this.MUTABLE_HOPS=e.MUTABLE_HOPS??this.MUTABLE_HOPS,this.MAX_ITERATIONS=50000,this.hyperParameters={...e.hyperParameters,MAX_ITERATIONS_WITHOUT_IMPROVEMENT:200},this.nodeMap=e.nodeMap,this.dedupedSegments=e.dedupedSegments,e.dedupedSegmentMap)this.dedupedSegmentMap=e.dedupedSegmentMap;else{this.dedupedSegmentMap=new Map;for(let t of this.dedupedSegments)this.dedupedSegmentMap.set(t.nodePortSegmentId,t)}this.nodeIdToSegmentIds=e.nodeIdToSegmentIds,this.segmentIdToNodeIds=e.segmentIdToNodeIds,this.rootNodeId=e.rootNodeId,this.colorMap=e.colorMap??{},this.unravelSection=this.createUnravelSection({segmentPointMap:e.segmentPointMap,nodeToSegmentPointMap:e.nodeToSegmentPointMap,segmentToSegmentPointMap:e.segmentToSegmentPointMap}),this.tunedNodeCapacityMap=new Map;for(let t of this.unravelSection.allNodeIds)this.tunedNodeCapacityMap.set(t,UE(this.nodeMap.get(t)));this.originalCandidate=this.createInitialCandidate(),this.candidates=[this.originalCandidate]}getConstructorParams(){return{...this.constructorParams,segmentPointMap:this.unravelSection.segmentPointMap,nodeToSegmentPointMap:this.unravelSection.segmentPointsInNode,segmentToSegmentPointMap:this.unravelSection.segmentPointsInSegment}}createUnravelSection(e){let t=A3t({nodeId:this.rootNodeId,nodeIdToSegmentIds:this.nodeIdToSegmentIds,segmentIdToNodeIds:this.segmentIdToNodeIds,hops:this.MUTABLE_HOPS}),n=A3t({nodeId:this.rootNodeId,nodeIdToSegmentIds:this.nodeIdToSegmentIds,segmentIdToNodeIds:this.segmentIdToNodeIds,hops:this.MUTABLE_HOPS+1}),o=Array.from(new Set(n).difference(new Set(t)));e?.segmentPointMap||(e=EOt(this.dedupedSegments,this.segmentIdToNodeIds));let i=new Map;for(let h of n)i.set(h,e.nodeToSegmentPointMap.get(h));let r=new Map;for(let h of n)for(let A of i.get(h)){let m=e.segmentPointMap.get(A);r.set(A,m)}let s=Array.from(r.values()),a=new Map;for(let h of s)a.set(h.segmentId,[...a.get(h.segmentId)??[],h.segmentPointId]);for(let[h,A]of i.entries())for(let m=0;m<A.length;m++){let p=e.segmentPointMap.get(A[m]);for(let g=m+1;g<A.length;g++){let _=e.segmentPointMap.get(A[g]);_.segmentPointId!==p.segmentPointId&&(_.segmentId!==p.segmentId&&_.connectionName===p.connectionName&&(_.directlyConnectedSegmentPointIds.includes(p.segmentPointId)||(p.directlyConnectedSegmentPointIds.push(_.segmentPointId),_.directlyConnectedSegmentPointIds.push(p.segmentPointId))))}}let c=new Map;for(let h of n)c.set(h,[]);for(let h of s)for(let A of h.capacityMeshNodeIds){let m=c.get(A);if(m)for(let p of h.directlyConnectedSegmentPointIds){let g=e.segmentPointMap.get(p);g.segmentPointId!==h.segmentPointId&&(g.capacityMeshNodeIds.some((_)=>_===A)&&(m.some(([_,f])=>_===h.segmentPointId&&f===g.segmentPointId||_===g.segmentPointId&&f===h.segmentPointId)||m.push([h.segmentPointId,g.segmentPointId])))}}let l=new Set;for(let h of t)for(let A of this.nodeIdToSegmentIds.get(h))this.segmentIdToNodeIds.get(A).every((m)=>!this.nodeMap.get(m)._containsTarget)&&l.add(A);let d=new Set;for(let h of s){let A=h.capacityMeshNodeIds.some((g)=>t.includes(g)),m=this.dedupedSegmentMap.get(h.segmentId),p=m&&m.availableZ.length>1;(A||p)&&d.add(h.segmentPointId)}let u=new Set;for(let h of s)if(h.capacityMeshNodeIds.some((A)=>this.nodeMap.get(A)?._containsTarget)){let A=this.dedupedSegmentMap.get(h.segmentId);A&&A.availableZ.length===1&&u.add(h.segmentPointId)}return{allNodeIds:n,mutableNodeIds:t,immutableNodeIds:o,mutableSegmentIds:l,segmentPairsInNode:c,segmentPointMap:r,segmentPointsInNode:i,segmentPointsInSegment:a,originalPointMap:r,mutableSegmentPointIds:d,zLockedSegmentPointIds:u}}createInitialCandidate(){let e=new Map,t=S_e(this.unravelSection,this.nodeMap,e),n=this.computeG({issues:t,originalCandidate:{},operationsPerformed:0,operation:{}});return{pointModifications:e,g:n,h:0,f:n,operationsPerformed:0,candidateHash:FQe(e),issues:S_e(this.unravelSection,this.nodeMap,e)}}get nextCandidate(){return this.candidates[0]??null}getPointInCandidate(e,t){let n=this.unravelSection.segmentPointMap.get(t),o=e.pointModifications.get(t);return{x:o?.x??n.x,y:o?.y??n.y,z:o?.z??n.z,segmentId:n.segmentId}}getConnectionSegmentPointIds(e){let t=[];for(let[n,o]of this.unravelSection.segmentPointMap.entries())o.connectionName===e&&t.push(n);return t}canConnectionUseLayer(e,t){for(let n of e){let o=this.unravelSection.segmentPointMap.get(n),i=this.dedupedSegmentMap.get(o.segmentId);if(!i||!i.availableZ.includes(t))return!1}return!0}getOperationsForIssue(e,t){let n=[];if(t.type==="transition_via"){let[o,i]=t.segmentPoints,r=this.getPointInCandidate(e,o),s=this.getPointInCandidate(e,i),a=this.unravelSection.segmentPointMap.get(o),c=(this.unravelSection.segmentPointMap.get(i),this.dedupedSegmentMap.get(r.segmentId).availableZ),l=this.dedupedSegmentMap.get(s.segmentId).availableZ,d=this.unravelSection.zLockedSegmentPointIds.has(o),u=this.unravelSection.zLockedSegmentPointIds.has(i),h=this.getConnectionSegmentPointIds(a.connectionName);if(this.canConnectionUseLayer(h,s.z)){let A=h.filter((m)=>this.unravelSection.mutableSegmentPointIds.has(m)&&!this.unravelSection.zLockedSegmentPointIds.has(m));A.length>0&&n.push({type:"change_layer",newZ:s.z,segmentPointIds:A})}if(this.canConnectionUseLayer(h,r.z)){let A=h.filter((m)=>this.unravelSection.mutableSegmentPointIds.has(m)&&!this.unravelSection.zLockedSegmentPointIds.has(m));A.length>0&&n.push({type:"change_layer",newZ:r.z,segmentPointIds:A})}this.unravelSection.mutableSegmentPointIds.has(o)&&!d&&c.includes(s.z)&&n.push({type:"change_layer",newZ:s.z,segmentPointIds:[o]}),this.unravelSection.mutableSegmentPointIds.has(i)&&!u&&l.includes(r.z)&&n.push({type:"change_layer",newZ:r.z,segmentPointIds:[i]})}if(t.type==="same_layer_crossing"){let[o,i]=t.crossingLine1,[r,s]=t.crossingLine2,a=[],c=this.unravelSection.segmentPointMap.get(o),l=this.unravelSection.segmentPointMap.get(i),d=this.unravelSection.segmentPointMap.get(r),u=this.unravelSection.segmentPointMap.get(s),h=this.unravelSection.mutableSegmentPointIds.has(o),A=this.unravelSection.mutableSegmentPointIds.has(i),m=this.unravelSection.mutableSegmentPointIds.has(r),p=this.unravelSection.mutableSegmentPointIds.has(s),g=this.unravelSection.zLockedSegmentPointIds.has(o),_=this.unravelSection.zLockedSegmentPointIds.has(i),f=this.unravelSection.zLockedSegmentPointIds.has(r),y=this.unravelSection.zLockedSegmentPointIds.has(s);h&&m&&c.segmentId===d.segmentId&&a.push([o,r]),h&&p&&c.segmentId===u.segmentId&&a.push([o,s]),A&&m&&l.segmentId===d.segmentId&&a.push([i,r]),A&&p&&l.segmentId===u.segmentId&&a.push([i,s]);for(let[T,Q]of a)n.push({type:"swap_position_on_segment",segmentPointIds:[T,Q]});let x=this.getConnectionSegmentPointIds(c.connectionName),C=this.getConnectionSegmentPointIds(d.connectionName),I=new Set;for(let T of this.unravelSection.segmentPointMap.values()){let Q=this.dedupedSegmentMap.get(T.segmentId);if(Q)for(let N of Q.availableZ)I.add(N)}for(let T of I)if(T!==c.z&&this.canConnectionUseLayer(x,T)){let Q=x.filter((N)=>this.unravelSection.mutableSegmentPointIds.has(N)&&!this.unravelSection.zLockedSegmentPointIds.has(N));Q.length>0&&n.push({type:"change_layer",newZ:T,segmentPointIds:Q})}for(let T of I)if(T!==d.z&&this.canConnectionUseLayer(C,T)){let Q=C.filter((N)=>this.unravelSection.mutableSegmentPointIds.has(N)&&!this.unravelSection.zLockedSegmentPointIds.has(N));Q.length>0&&n.push({type:"change_layer",newZ:T,segmentPointIds:Q})}let b=this.dedupedSegmentMap.get(c.segmentId),P=this.dedupedSegmentMap.get(l.segmentId),E=this.dedupedSegmentMap.get(d.segmentId),B=this.dedupedSegmentMap.get(u.segmentId),w=(T,Q)=>T.every((N)=>N.availableZ.includes(Q));if(h&&A&&!g&&!_){let T=c.z===0?1:0;w([b,P],T)&&n.push({type:"change_layer",newZ:T,segmentPointIds:[o,i]})}if(m&&p&&!f&&!y){let T=d.z===0?1:0;w([E,B],T)&&n.push({type:"change_layer",newZ:T,segmentPointIds:[r,s]})}if(h&&!g){let T=c.z===0?1:0;b.availableZ.includes(T)&&n.push({type:"change_layer",newZ:T,segmentPointIds:[o]})}if(A&&!_){let T=l.z===0?1:0;P.availableZ.includes(T)&&n.push({type:"change_layer",newZ:T,segmentPointIds:[i]})}if(m&&!f){let T=d.z===0?1:0;E.availableZ.includes(T)&&n.push({type:"change_layer",newZ:T,segmentPointIds:[r]})}if(p&&!y){let T=u.z===0?1:0;B.availableZ.includes(T)&&n.push({type:"change_layer",newZ:T,segmentPointIds:[s]})}}return n}computeG(e){let{issues:t,originalCandidate:n,operationsPerformed:o,operation:i}=e,r=new Map;for(let c of t){r.has(c.capacityMeshNodeId)||r.set(c.capacityMeshNodeId,{numTransitionCrossings:0,numSameLayerCrossings:0,numEntryExitLayerChanges:0});let l=r.get(c.capacityMeshNodeId);c.type==="transition_via"?l.numTransitionCrossings++:c.type==="same_layer_crossing"?l.numSameLayerCrossings++:c.type==="double_transition_crossing"||c.type==="single_transition_crossing"?l.numEntryExitLayerChanges++:c.type}let s=0;for(let[c,{numEntryExitLayerChanges:l,numSameLayerCrossings:d,numTransitionCrossings:u}]of r){let h=this.nodeMap.get(c),A=Math.min(d1(h,d,l,u),0.999999);s+=Math.log(1-A)}var a;return(a=s)<-Math.LN2?Math.log(1-Math.exp(a)):Math.log(-Math.expm1(a))}getUnexploredNeighborByApplyingOperation(e,t){let n=new Map(e.pointModifications);vOt(n,t,(a)=>this.getPointInCandidate(e,a));let o=FQe(n);if(this.queuedOrExploredCandidatePointModificationHashes.has(o))return null;let i=S_e(this.unravelSection,this.nodeMap,n),r=e.operationsPerformed+1,s=this.computeG({issues:i,originalCandidate:e,operationsPerformed:r,operation:t});return{issues:i,g:s,h:0,f:s,pointModifications:n,candidateHash:o,operationsPerformed:r}}getNeighborOperationsForCandidate(e){return e.issues.flatMap((t)=>this.getOperationsForIssue(e,t))}getNeighbors(e){let t=[],n=this.getNeighborOperationsForCandidate(e);for(let o of n){let i=this.getUnexploredNeighborByApplyingOperation(e,o);i&&t.push(i)}return t}_step(){let e=this.candidates.shift();this.iterationsSinceImprovement++,this.iterationsSinceImprovement>this.hyperParameters.MAX_ITERATIONS_WITHOUT_IMPROVEMENT?this.solved=!0:e?(this.lastProcessedCandidate=e,e.f<(this.bestCandidate?.f??1/0)&&(this.bestCandidate=e,this.iterationsSinceImprovement=0),this.getNeighbors(e).forEach((t)=>{this.queuedOrExploredCandidatePointModificationHashes.has(t.candidateHash)||(this.queuedOrExploredCandidatePointModificationHashes.add(t.candidateHash),this.candidates.push(t))}),this.candidates.sort((t,n)=>t.f-n.f),this.candidates.length=Math.min(this.candidates.length,this.MAX_CANDIDATES)):this.solved=!0}visualize(){let e={points:[],lines:[],rects:[],circles:[],coordinateSystem:"cartesian",title:"Unravel Section Solver"},t=null;if(t=this.selectedCandidateIndex!==null?this.selectedCandidateIndex==="best"?this.bestCandidate:this.selectedCandidateIndex==="original"?this.originalCandidate:this.candidates[this.selectedCandidateIndex]:this.solved?this.bestCandidate:this.lastProcessedCandidate||this.candidates[0],!t)return e;let n=new Map;for(let[i,r]of this.unravelSection.segmentPointMap){let s={...r},a=t.pointModifications.get(i);a&&(a.x!==void 0&&(s.x=a.x),a.y!==void 0&&(s.y=a.y),a.z!==void 0&&(s.z=a.z)),n.set(i,s)}for(let[i,r]of n)e.points.push({x:r.x,y:r.y,label:`${i}
Segment: ${r.segmentId} ${this.unravelSection.mutableSegmentIds.has(r.segmentId)?"MUTABLE":"IMMUTABLE"}
Layer: ${r.z}`,color:this.colorMap[r.connectionName]||"#000"});let o=new Map;for(let i of this.unravelSection.allNodeIds)o.set(i,{numTransitionCrossings:0,numSameLayerCrossings:0,numEntryExitLayerChanges:0,estPf:0});for(let i of t.issues){let r=o.get(i.capacityMeshNodeId);i.type==="transition_via"?r.numTransitionCrossings++:i.type==="same_layer_crossing"?r.numSameLayerCrossings++:i.type!=="double_transition_crossing"&&i.type!=="single_transition_crossing"||r.numEntryExitLayerChanges++}for(let[i,r]of o.entries()){let s=this.nodeMap.get(i);r.estPf=d1(s,r.numSameLayerCrossings,r.numEntryExitLayerChanges,r.numTransitionCrossings)}for(let i of this.unravelSection.allNodeIds){let r=this.nodeMap.get(i),s=this.unravelSection.mutableNodeIds.includes(i),a=o.get(i),c=[`${i} (${s?"MUT":"IMM"})`,`${r.width.toFixed(2)}x${r.height.toFixed(2)}`,`Pf: ${a.estPf.toFixed(3)}`,`TC: ${a.numTransitionCrossings}`,`SLC: ${a.numSameLayerCrossings}`,`EELC: ${a.numEntryExitLayerChanges}`].join(`
`);e.rects.push({center:r.center,label:c,color:s?"green":"red",width:r.width/8,height:r.height/8})}for(let[i,r]of this.unravelSection.segmentPointsInSegment){if(r.length<=1)continue;let s=r.map((a)=>n.get(a));for(let a=0;a<s.length-1;a++)e.lines.push({points:[{x:s[a].x,y:s[a].y},{x:s[a+1].x,y:s[a+1].y}],strokeColor:this.colorMap[i]||"#000"})}for(let[i,r]of n)for(let s of r.directlyConnectedSegmentPointIds)if(i<s){let a=n.get(s);if(!a)continue;let c=r.z===a.z,l=r.z,d;d=c?l===0?void 0:"10 5":"3 3 10",e.lines.push({points:[{x:r.x,y:r.y},{x:a.x,y:a.y}],strokeDash:d,strokeColor:this.colorMap[r.connectionName]||"#000"})}for(let i of t.issues){let r=this.nodeMap.get(i.capacityMeshNodeId);if(i.type==="transition_via")for(let s of i.segmentPoints){let a=n.get(s);e.circles.push({center:{x:a.x,y:a.y},radius:r.width/16,stroke:"#ff0000",fill:"rgba(255, 0, 0, 0.2)",label:`Via Issue
${s}
Layer: ${a.z}`})}else if(i.type==="same_layer_crossing")for(let[s,a]of[i.crossingLine1,i.crossingLine2]){let c=n.get(s),l=n.get(a);e.lines.push({points:[{x:c.x,y:c.y},{x:l.x,y:l.y}],strokeColor:"rgba(255,0,0,0.2)",strokeWidth:r.width/32})}}for(let[i,r]of t.pointModifications){let s=n.get(i),a=this.unravelSection.segmentPointMap.get(i);e.circles.push({center:{x:s.x,y:s.y},radius:0.05,stroke:"#0000ff",fill:"rgba(0, 0, 255, 0.2)",label:`${i}
Original: (${a.x.toFixed(2)}, ${a.y.toFixed(2)}, ${a.z})
New: (${s.x.toFixed(2)}, ${s.y.toFixed(2)}, ${s.z})`})}return e}},SAe=(e)=>(Math.round(20*e)/20).toFixed(2),_3t=(e)=>(Math.round(1000*e)/1000).toFixed(3);Xge();var Fko=class extends Lko{cacheHit=!1;cacheProvider;hasAttemptedToUseCache=!1;constructor(e){super(e),this.cacheProvider=e.cacheProvider===void 0?Qwo():e.cacheProvider}_step(){!this.hasAttemptedToUseCache&&this.cacheProvider&&this.attemptToUseCacheSync()||(super._step(),(this.solved||this.failed)&&this.cacheProvider&&this.saveToCacheSync())}computeCacheKeyAndTransform(){let e=this.nodeMap.get(this.rootNodeId),t=Yk(-e.center.x,-e.center.y),n=new Map,o=new Map,i=new Map,r=new Map,s=new Map,a=new Map,c=0,l=0,d=0,u=[...this.unravelSection.allNodeIds].sort((f,y)=>{let x=this.nodeMap.get(f),C=this.nodeMap.get(y);return x.center.x!==C.center.x?x.center.x-C.center.x:x.center.y-C.center.y});for(let f of u){let y="node_"+c++;n.set(f,y),o.set(y,f)}let h=[...Array.from(this.unravelSection.segmentPointMap.entries()).sort(([,f],[,y])=>f.x!==y.x?f.x-y.x:f.y-y.y).map(([f])=>f)].sort();for(let f of h){let y="sp_"+d++;s.set(f,y),a.set(y,f);let x=this.unravelSection.segmentPointMap.get(f).segmentId;if(!i.has(x)){let C="seg_"+l++;i.set(x,C),r.set(C,x)}}let A={};for(let[f,y]of n.entries()){let x=this.nodeMap.get(f),C=C6(t,x.center);A[y]={width:x.width,height:x.height,availableZ:x.availableZ,center:{x:SAe(C.x),y:SAe(C.y)}}}let m={};for(let[f,y]of s.entries()){let x=this.unravelSection.segmentPointMap.get(f),C=C6(t,{x:x.x,y:x.y});m[y]={x:SAe(C.x),y:SAe(C.y),z:x.z}}let p={hyperParameters:this.hyperParameters,normalizedNodes:A,normalizedSegmentPoints:m,mutableHops:this.MUTABLE_HOPS},g=`unravelsec:${MOt.default(p)}`,_={realToCacheTransform:t,nodeIdMap:n,segmentIdMap:i,segmentPointIdMap:s,reverseNodeIdMap:o,reverseSegmentIdMap:r,reverseSegmentPointIdMap:a};return this.cacheKey=g,this.cacheToSolveSpaceTransform=_,{cacheKey:g,cacheToSolveSpaceTransform:_}}applyCachedSolution(e){if(e.success===!1)return void(this.failed=!0);if(!this.cacheToSolveSpaceTransform)return void console.error("Cache transform not available to apply cached solution.");let{reverseSegmentPointIdMap:t,reverseNodeIdMap:n}=this.cacheToSolveSpaceTransform,o=new Map;for(let[r,s]of e.bestCandidatePointModificationsDelta){let a=t.get(r);if(!a){console.warn(`Could not find original ID for normalized SP ID: ${r} when applying cache.`);continue}let c=this.unravelSection.segmentPointMap.get(a);if(!c){console.warn(`Could not find original segment point for ID: ${a} when applying cache.`);continue}let l={};if(s.dx!==void 0){let d=parseFloat(s.dx);Number.isNaN(d)?console.warn(`Failed to parse cached dx coordinate: ${s.dx}`):l.x=c.x+d}if(s.dy!==void 0){let d=parseFloat(s.dy);Number.isNaN(d)?console.warn(`Failed to parse cached dy coordinate: ${s.dy}`):l.y=c.y+d}s.dz!==void 0&&(l.z=c.z+s.dz),Object.keys(l).length>0&&o.set(a,l)}let i=S_e(this.unravelSection,this.nodeMap,o);this.bestCandidate={pointModifications:o,issues:i,f:e.bestCandidateF,g:e.bestCandidateF,h:0,operationsPerformed:-1,candidateHash:FQe(o)},this.cacheHit=!0,this.solved=!0}attemptToUseCacheSync(){if(this.hasAttemptedToUseCache=!0,!this.cacheProvider?.isSyncCache)return console.log("Cache provider is not synchronous, skipping sync cache check."),!1;if(this.cacheKey||this.computeCacheKeyAndTransform(),!this.cacheKey)return console.error("Failed to compute cache key."),!1;try{let e=this.cacheProvider.getCachedSolutionSync(this.cacheKey);if(e)return this.applyCachedSolution(e),!0}catch(e){console.error("Error attempting to use cache:",e)}return!1}saveToCacheSync(){if(this.failed)return void this.cacheProvider?.setCachedSolutionSync(this.cacheKey,{success:!1});if(!this.bestCandidate)return;let{segmentPointIdMap:e}=this.cacheToSolveSpaceTransform,t=[];for(let[o,i]of this.bestCandidate.pointModifications.entries()){let r=e.get(o);if(!r){console.warn(`Could not find normalized ID for original SP ID: ${o} when saving to cache.`);continue}let s=this.unravelSection.segmentPointMap.get(o);if(!s){console.warn(`Could not find original segment point for ID: ${o} when saving cache.`);continue}let a={},c=!1;if(i.x!==void 0){let l=i.x-s.x,d=_3t(l);parseFloat(d)!==0&&(a.dx=d,c=!0)}if(i.y!==void 0){let l=i.y-s.y,d=_3t(l);parseFloat(d)!==0&&(a.dy=d,c=!0)}if(i.z!==void 0){let l=i.z-s.z;l!==0&&(a.dz=l,c=!0)}c&&t.push([r,a])}let n={success:!0,bestCandidatePointModificationsDelta:t,bestCandidateF:this.bestCandidate.f};this.cacheProvider?.setCachedSolutionSync(this.cacheKey,n)}},Hko=class extends Oi{getSolverName(){return"UnravelMultiSectionSolver"}nodeMap;dedupedSegmentMap;dedupedSegments;nodeIdToSegmentIds;segmentIdToNodeIds;nodeToSegmentPointMap;segmentToSegmentPointMap;colorMap;tunedNodeCapacityMap;MAX_NODE_ATTEMPTS=2;MUTABLE_HOPS=1;ACCEPTABLE_PF=0.05;MAX_ITERATIONS_WITHOUT_IMPROVEMENT=200;nodePfMap;attemptsToFixNode;activeSubSolver=null;segmentPointMap;cacheProvider=null;constructor({assignedSegments:e,colorMap:t,nodes:n,cacheProvider:o}){super(),this.stats.successfulOptimizations=0,this.stats.failedOptimizations=0,this.stats.cacheHits=0,this.stats.cacheMisses=0,this.cacheProvider=o??null,this.MAX_ITERATIONS=1e6,this.dedupedSegments=((a)=>{let c=[],l=new Map,d=-1;for(let u of a){let h=`${u.start.x}-${u.start.y}-${u.end.x}-${u.end.y}-${u.availableZ.join(",")}`,A=l.get(h);A?u.nodePortSegmentId=A.nodePortSegmentId:(d++,u.nodePortSegmentId=`SEG${d}`,l.set(h,u),c.push(u))}return c})(e),this.dedupedSegmentMap=new Map;for(let a of this.dedupedSegments)this.dedupedSegmentMap.set(a.nodePortSegmentId,a);this.nodeMap=new Map;for(let a of n)this.nodeMap.set(a.capacityMeshNodeId,a);this.nodeIdToSegmentIds=new Map,this.segmentIdToNodeIds=new Map,this.attemptsToFixNode=new Map;for(let a of e)this.segmentIdToNodeIds.set(a.nodePortSegmentId,[...this.segmentIdToNodeIds.get(a.nodePortSegmentId)??[],a.capacityMeshNodeId]),this.nodeIdToSegmentIds.set(a.capacityMeshNodeId,[...this.nodeIdToSegmentIds.get(a.capacityMeshNodeId)??[],a.nodePortSegmentId]);this.colorMap=t??{},this.tunedNodeCapacityMap=new Map;for(let[a,c]of this.nodeMap)this.tunedNodeCapacityMap.set(a,UE(c));let{segmentPointMap:i,nodeToSegmentPointMap:r,segmentToSegmentPointMap:s}=EOt(this.dedupedSegments,this.segmentIdToNodeIds);this.segmentPointMap=i,this.nodeToSegmentPointMap=r,this.segmentToSegmentPointMap=s,this.nodePfMap=this.computeInitialPfMap()}computeInitialPfMap(){let e=new Map;for(let[t,n]of this.nodeMap.entries())e.set(t,this.computeNodePf(n));return e}computeNodePf(e){let{numSameLayerCrossings:t,numEntryExitLayerChanges:n,numTransitionCrossings:o}=((i)=>{let r=0,s=0,a=0,c=new Map;for(let u of i)c.has(u.connectionName)||c.set(u.connectionName,[]),c.get(u.connectionName).push(u);let l=[],d=[];for(let[u,h]of c.entries()){if(h.length<2)continue;let A=h[0];for(let m=1;m<h.length;m++){let p=h[m],g={connectionName:u,z:A.z,points:[A,p]};A.z!==p.z?(s++,d.push({connectionName:u,points:[A,p]})):l.push(g)}}for(let u=0;u<l.length;u++)for(let h=u+1;h<l.length;h++){let A=l[u],m=l[h];A.z===m.z&&fu(A.points[0],A.points[1],m.points[0],m.points[1])&&r++}for(let u=0;u<d.length;u++)for(let h=u+1;h<d.length;h++){let A=d[u],m=d[h];fu(A.points[0],A.points[1],m.points[0],m.points[1])&&a++}for(let u=0;u<d.length;u++)for(let h=0;h<l.length;h++){let A=d[u],m=l[h];fu(A.points[0],A.points[1],m.points[0],m.points[1])&&a++}return{numSameLayerCrossings:r,numEntryExitLayerChanges:s,numTransitionCrossings:a}})((this.nodeToSegmentPointMap.get(e.capacityMeshNodeId)??[]).map((i)=>this.segmentPointMap.get(i)));return d1(e,t,n,o)}_step(){if(this.iterations>=this.MAX_ITERATIONS-1)return void(this.solved=!0);if(!this.activeSubSolver){let o=null,i=0;for(let[r,s]of this.nodePfMap.entries())s*(1-(this.attemptsToFixNode.get(r)??0)/this.MAX_NODE_ATTEMPTS)>i&&(i=s,o=r);if(!o||i<this.ACCEPTABLE_PF)return void(this.solved=!0);this.attemptsToFixNode.set(o,(this.attemptsToFixNode.get(o)??0)+1),this.activeSubSolver=new Fko({dedupedSegments:this.dedupedSegments,dedupedSegmentMap:this.dedupedSegmentMap,nodeMap:this.nodeMap,nodeIdToSegmentIds:this.nodeIdToSegmentIds,segmentIdToNodeIds:this.segmentIdToNodeIds,colorMap:this.colorMap,rootNodeId:o,MUTABLE_HOPS:this.MUTABLE_HOPS,segmentPointMap:this.segmentPointMap,nodeToSegmentPointMap:this.nodeToSegmentPointMap,segmentToSegmentPointMap:this.segmentToSegmentPointMap,cacheProvider:this.cacheProvider})}this.activeSubSolver.step();let{bestCandidate:e,originalCandidate:t,lastProcessedCandidate:n}=this.activeSubSolver;if(this.activeSubSolver.failed)return this.stats.failedOptimizations+=1,void(this.activeSubSolver=null);if(this.activeSubSolver.solved){if(this.activeSubSolver.cacheHit?this.stats.cacheHits+=1:this.stats.cacheMisses+=1,e&&e.g<t.g){this.stats.successfulOptimizations+=1;for(let[o,i]of e.pointModifications.entries()){let r=this.segmentPointMap.get(o);r.x=i.x??r.x,r.y=i.y??r.y,r.z=i.z??r.z}for(let o of this.activeSubSolver.unravelSection.allNodeIds)this.nodePfMap.set(o,this.computeNodePf(this.nodeMap.get(o)))}else this.stats.failedOptimizations+=1;this.activeSubSolver=null}}visualize(){if(this.activeSubSolver)return this.activeSubSolver.visualize();let e={lines:[],points:[],rects:[],circles:[],coordinateSystem:"cartesian",title:"Unravel Multi Section Solver"};for(let[i,r]of this.nodeMap.entries()){let s=this.nodePfMap.get(i)||0,a=Math.min(s,1),c=`rgb(${Math.floor(255*a)}, ${Math.floor(255*(1-a))}, 0)`;(this.attemptsToFixNode.get(i)??0)===0&&a===0||e.rects.push({center:r.center,label:[i,`${r.width.toFixed(2)}x${r.height.toFixed(2)}`,`Pf: ${s.toFixed(3)}`].join(`
`),color:c,width:r.width/8,height:r.height/8})}for(let i of this.segmentPointMap.values()){let r=this.dedupedSegmentMap.get(i.segmentId);e.points.push({x:i.x,y:i.y,label:[i.segmentPointId,i.segmentId,`z: ${i.z}`,`segment.availableZ: ${r?.availableZ.join(",")}`].join(`
`),color:this.colorMap[i.connectionName]||"#000"})}let t=new Map;for(let i of this.segmentPointMap.values())t.has(i.segmentId)||t.set(i.segmentId,[]),t.get(i.segmentId).push(i);for(let[i,r]of t.entries()){if(r.length<2)continue;let s=[...r].sort((a,c)=>a.x!==c.x?a.x-c.x:a.y-c.y);for(let a=0;a<s.length-1;a++)e.lines.push({points:[{x:s[a].x,y:s[a].y},{x:s[a+1].x,y:s[a+1].y}],strokeColor:this.colorMap[i]||"#000"})}let n=new Set,o=Array.from(this.segmentPointMap.values());for(let i=0;i<o.length;i++){let r=o[i];for(let s=i+1;s<o.length;s++){let a=o[s];if(r.connectionName!==a.connectionName||r.segmentId===a.segmentId)continue;if(r.capacityMeshNodeIds.some((c)=>a.capacityMeshNodeIds.includes(c))){let c=`${r.segmentPointId}-${a.segmentPointId}`;if(n.has(c))continue;n.add(c);let l=r.z===a.z,d=r.z,u;u=l?d===0?void 0:"10 5":"3 3 10",e.lines.push({points:[{x:r.x,y:r.y},{x:a.x,y:a.y}],strokeDash:u,strokeColor:this.colorMap[r.connectionName]||"#666"})}}}return e}getNodesWithPortPoints(){if(!this.solved)throw Error("CapacitySegmentToPointSolver not solved, can't give port points yet");let e=new Map;for(let t of this.dedupedSegments){let n=t.nodePortSegmentId;for(let o of this.segmentIdToNodeIds.get(n)){let i=this.nodeMap.get(o);e.has(o)||e.set(o,{capacityMeshNodeId:o,portPoints:[],center:i.center,width:i.width,height:i.height})}}for(let t of this.segmentPointMap.values())for(let n of t.capacityMeshNodeIds){let o=e.get(n);o&&o.portPoints.push({x:t.x,y:t.y,z:t.z,connectionName:t.connectionName,rootConnectionName:t.rootConnectionName})}return Array.from(e.values())}};function by(e,t,n,o={}){return{solverName:e,solverClass:t,getConstructorParams:n,onSolved:o.onSolved}}var BOt=class extends Oi{constructor(e,t={}){super(),this.srj=e,this.opts=t,this.srj=e,this.opts={...t},this.MAX_ITERATIONS=1e8,this.viaDiameter=y0(e).padDiameter,this.minTraceWidth=e.minTraceWidth;let n=this.opts;if(n.capacityDepth===void 0){let o=e.bounds.maxX-e.bounds.minX,i=e.bounds.maxY-e.bounds.minY,r=Math.max(o,i),s=n.targetMinCapacity??0.5;n.capacityDepth=cT(r,s)}this.connMap=x0(e),this.colorMap=HA(e,this.connMap),this.cacheProvider=n.cacheProvider===void 0?CS():n.cacheProvider===null?null:n.cacheProvider,this.startTimeOfPhase={},this.endTimeOfPhase={},this.timeSpentOnPhase={}}srj;opts;getSolverName(){return"AutoroutingPipeline1_OriginalUnravel"}netToPointPairsSolver;nodeSolver;nodeTargetMerger;edgeSolver;initialPathingSolver;pathingOptimizer;edgeToPortSegmentSolver;colorMap;segmentToPointSolver;unravelMultiSectionSolver;segmentToPointOptimizer;highDensityRouteSolver;highDensityStitchSolver;singleLayerNodeMerger;strawSolver;deadEndSolver;traceSimplificationSolver;viaDiameter;minTraceWidth;startTimeOfPhase;endTimeOfPhase;timeSpentOnPhase;activeSubSolver=null;connMap;srjWithPointPairs;capacityNodes=null;capacityEdges=null;cacheProvider=null;pipelineDef=[by("netToPointPairsSolver",wU,(e)=>[e.srj,e.colorMap,rT(e.srj)],{onSolved:(e)=>{e.srjWithPointPairs=e.netToPointPairsSolver?.getNewSimpleRouteJson(),e.colorMap=HA(e.srjWithPointPairs,this.connMap),e.connMap=x0(e.srjWithPointPairs)}}),by("nodeSolver",Iko,(e)=>[e.netToPointPairsSolver?.getNewSimpleRouteJson()||e.srj,e.opts],{onSolved:(e)=>{e.capacityNodes=e.nodeSolver?.finishedNodes}}),by("singleLayerNodeMerger",Rko,(e)=>[e.nodeSolver?.finishedNodes],{onSolved:(e)=>{e.capacityNodes=e.singleLayerNodeMerger?.newNodes}}),by("strawSolver",Qko,(e)=>[{nodes:e.singleLayerNodeMerger?.newNodes}],{onSolved:(e)=>{e.capacityNodes=e.strawSolver?.getResultNodes()}}),by("edgeSolver",sT,(e)=>[e.capacityNodes],{onSolved:(e)=>{e.capacityEdges=e.edgeSolver?.edges}}),by("deadEndSolver",Dko,(e)=>[{nodes:e.capacityNodes,edges:e.capacityEdges}],{onSolved:(e)=>{let t=e.deadEndSolver?.removedNodeIds;e.capacityNodes=e.capacityNodes.filter((n)=>!t.has(n.capacityMeshNodeId)),e.capacityEdges=e.capacityEdges.filter((n)=>n.nodeIds.every((o)=>!t.has(o)))}}),by("initialPathingSolver",SOt,(e)=>[{simpleRouteJson:e.srjWithPointPairs,nodes:e.capacityNodes,edges:e.capacityEdges||[],colorMap:e.colorMap,hyperParameters:{MAX_CAPACITY_FACTOR:1}}]),by("pathingOptimizer",Tko,(e)=>[{initialPathingSolver:e.initialPathingSolver,simpleRouteJson:e.srjWithPointPairs,nodes:e.capacityNodes,edges:e.capacityEdges||[],colorMap:e.colorMap,cacheProvider:e.cacheProvider,hyperParameters:{MAX_CAPACITY_FACTOR:1}}]),by("edgeToPortSegmentSolver",gko,(e)=>[{nodes:e.capacityNodes,edges:e.capacityEdges||[],capacityPaths:e.pathingOptimizer?.getCapacityPaths()||[],colorMap:e.colorMap}]),by("segmentToPointSolver",bko,(e)=>{let t=[];return e.edgeToPortSegmentSolver?.nodePortSegments&&e.edgeToPortSegmentSolver.nodePortSegments.forEach((n)=>{t.push(...n)}),[{segments:t,colorMap:e.colorMap,nodes:e.capacityNodes}]}),by("unravelMultiSectionSolver",Hko,(e)=>[{assignedSegments:e.segmentToPointSolver?.solvedSegments||[],colorMap:e.colorMap,nodes:e.capacityNodes,cacheProvider:this.cacheProvider}]),by("highDensityRouteSolver",yL,(e)=>[{nodePortPoints:e.unravelMultiSectionSolver?.getNodesWithPortPoints()??e.segmentToPointOptimizer?.getNodesWithPortPoints()??[],colorMap:e.colorMap,connMap:e.connMap,viaDiameter:e.viaDiameter,traceWidth:e.minTraceWidth}]),by("highDensityStitchSolver",Nko,(e)=>[{connections:e.srjWithPointPairs.connections,hdRoutes:e.highDensityRouteSolver.routes,colorMap:e.colorMap,layerCount:e.srj.layerCount,defaultViaDiameter:e.viaDiameter}]),by("traceSimplificationSolver",HI,(e)=>[{hdRoutes:e.highDensityStitchSolver.mergedHdRoutes,obstacles:e.srj.obstacles,connMap:e.connMap,colorMap:e.colorMap,outline:e.srj.outline,defaultViaDiameter:e.viaDiameter,layerCount:e.srj.layerCount}])];getConstructorParams(){return[this.srj,this.opts]}currentPipelineStepIndex=0;_step(){let e=this.pipelineDef[this.currentPipelineStepIndex];if(!e)return void(this.solved=!0);if(this.activeSubSolver)return this.activeSubSolver.step(),void(this.activeSubSolver.solved?(this.endTimeOfPhase[e.solverName]=performance.now(),this.timeSpentOnPhase[e.solverName]=this.endTimeOfPhase[e.solverName]-this.startTimeOfPhase[e.solverName],e.onSolved?.(this),this.activeSubSolver=null,this.currentPipelineStepIndex++):this.activeSubSolver.failed&&(this.error=this.activeSubSolver?.error,this.failed=!0,this.activeSubSolver=null));let t=e.getConstructorParams(this);this.activeSubSolver=new e.solverClass(...t),this[e.solverName]=this.activeSubSolver,this.timeSpentOnPhase[e.solverName]=0,this.startTimeOfPhase[e.solverName]=performance.now()}solveUntilPhase(e){for(;this.getCurrentPhase()!==e;)this.step()}getCurrentPhase(){return this.pipelineDef[this.currentPipelineStepIndex]?.solverName??"none"}visualize(){if(!this.solved&&this.activeSubSolver)return this.activeSubSolver.visualize();let e=this.netToPointPairsSolver?.visualize(),t=this.nodeSolver?.visualize(),n=this.nodeTargetMerger?.visualize(),o=this.singleLayerNodeMerger?.visualize(),i=this.strawSolver?.visualize(),r=this.edgeSolver?.visualize(),s=this.deadEndSolver?.visualize(),a=this.initialPathingSolver?.visualize(),c=this.pathingOptimizer?.visualize(),l=this.edgeToPortSegmentSolver?.visualize(),d=this.segmentToPointSolver?.visualize(),u=this.unravelMultiSectionSolver?.visualize()??this.segmentToPointOptimizer?.visualize(),h=this.highDensityRouteSolver?.visualize(),A=this.highDensityStitchSolver?.visualize(),m=this.traceSimplificationSolver?.visualize(),p=this.srj.outline,g=[];if(g.push({points:[{x:this.srj.bounds?.minX??-50,y:this.srj.bounds?.minY??-50},{x:this.srj.bounds?.maxX??50,y:this.srj.bounds?.minY??-50},{x:this.srj.bounds?.maxX??50,y:this.srj.bounds?.maxY??50},{x:this.srj.bounds?.minX??-50,y:this.srj.bounds?.maxY??50},{x:this.srj.bounds?.minX??-50,y:this.srj.bounds?.minY??-50}],strokeColor:"rgba(255,0,0,0.25)"}),p&&p.length>=2){let x=p.map((C)=>({x:C.x,y:C.y}));x.push({...x[0]}),g.push({points:x,strokeColor:"rgba(0, 136, 255, 0.95)"})}let _=O6(this.srj),f={points:[...this.srj.connections.flatMap((x)=>x.pointsToConnect.map((C)=>({...C,layer:z6(C,this.srj.layerCount),label:`${x.name} ${C.pcb_port_id??""}`})))],rects:[...(this.srj.obstacles??[]).filter((x)=>!x.isCopperPour).map((x)=>({...x,fill:x.layers?.includes("top")?"rgba(255,0,0,0.25)":x.layers?.includes("bottom")?"rgba(0,0,255,0.25)":"rgba(255,0,0,0.25)",layer:OE(x,this.srj.layerCount),label:_(x)}))],lines:g},y=[f,e,t,n,o,i,r,s,a,c,l,d,u,h?Lc(f,h):null,A,m,this.solved?Lc({lines:g},p1(this.getOutputSimpleRouteJson())):null].filter(Boolean);return Lc(...y)}preview(){if(this.highDensityRouteSolver){let e=[];for(let t=this.highDensityRouteSolver.routes.length-1;t>=0;t--){let n=this.highDensityRouteSolver.routes[t];if(e.push({points:n.route.map((o)=>({x:o.x,y:o.y})),strokeColor:this.colorMap[n.connectionName]}),e.length>200)break}return{lines:e}}if(this.pathingOptimizer){let e=[];for(let t of this.pathingOptimizer.connectionsWithNodes)t.path&&e.push({points:t.path.map((n)=>({x:n.center.x,y:n.center.y})),strokeColor:this.colorMap[t.connection.name]});return{lines:e}}return this.netToPointPairsSolver?this.netToPointPairsSolver?.visualize():{}}_getOutputHdRoutes(){return this.traceSimplificationSolver?.simplifiedHdRoutes??this.highDensityStitchSolver.mergedHdRoutes}getOutputSimplifiedPcbTraces(){if(!this.solved||!this.highDensityRouteSolver)throw Error("Cannot get output before solving is complete");let e=[],t=this._getOutputHdRoutes();for(let n of this.netToPointPairsSolver?.newConnections??[]){let o=n.__netConnectionName??this.srj.connections.find((r)=>r.name===n.name)?.__netConnectionName,i=t.filter((r)=>r.connectionName===n.name);for(let r=0;r<i.length;r++){let s=i[r],a={type:"pcb_trace",pcb_trace_id:`${n.name}_${r}`,connection_name:o??n.__rootConnectionNames?.[0]??n.name,route:Ex(s,this.srj.layerCount)};e.push(a)}}return e}getOutputSimpleRouteJson(){return{...this.srj,traces:this.getOutputSimplifiedPcbTraces()}}};function PAe(e){let{pos:t,segments:n,dir:o,keepoutRadius:i}=e,r=1/0,s=i/4,a={x:t.x-o.x*s,y:t.y-o.y*s},c={x:t.x+o.x*s,y:t.y+o.y*s};for(let l of n){let d=Um(a,c,l.start,l.end);r=Math.min(r,d)}return r}function Oko(e,t,n,o){let i=vAe(n,o,e),r=vAe(n,o,t),s=vAe(e,t,n),a=vAe(e,t,o);if((i>0&&r<0||i<0&&r>0)&&(s>0&&a<0||s<0&&a>0))return!0;let c=0.0001;return!!(Math.abs(i)<c&&EAe(n,o,e))||(!!(Math.abs(r)<c&&EAe(n,o,t))||(!!(Math.abs(s)<c&&EAe(e,t,n))||!!(Math.abs(a)<c&&EAe(e,t,o))))}function vAe(e,t,n){return(n.x-e.x)*(t.y-e.y)-(t.x-e.x)*(n.y-e.y)}function EAe(e,t,n){return n.x>=Math.min(e.x,t.x)-0.0001&&n.x<=Math.max(e.x,t.x)+0.0001&&n.y>=Math.min(e.y,t.y)-0.0001&&n.y<=Math.max(e.y,t.y)+0.0001}function fNe(e,t,n){for(let o of n)if(Oko(e,t,o.start,o.end))return!1;return!0}var A8=0.0001;function HQe(e){let t=e.width/2,n=e.height/2,o=e.center.x,i=e.center.y,r={x:o-t,y:i+n},s={x:o+t,y:i+n},a={x:o-t,y:i-n},c={x:o+t,y:i-n};return[{start:r,end:s},{start:s,end:c},{start:c,end:a},{start:a,end:r}]}function zko(e,t,n=0.1){let o=t.x-e.x,i=t.y-e.y,r=Math.sqrt(o*o+i*i);if(r===0)return[];let s=-(i/r),a=o/r,c=n/2;return[{start:{x:e.x+s*c,y:e.y+a*c},end:{x:t.x+s*c,y:t.y+a*c}},{start:{x:e.x-s*c,y:e.y-a*c},end:{x:t.x-s*c,y:t.y-a*c}}]}function Gko(e,t,n){let o=Math.hypot(e.start.x-t.x,e.start.y-t.y),i=Math.hypot(e.end.x-t.x,e.end.y-t.y);if(o<=n||i<=n)return!0;let r=e.end.x-e.start.x,s=e.end.y-e.start.y,a=r*r+s*s;if(a===0)return!1;let c=Math.max(0,Math.min(1,((t.x-e.start.x)*r+(t.y-e.start.y)*s)/a)),l=e.start.x+c*r,d=e.start.y+c*s;return Math.hypot(l-t.x,d-t.y)<=n}function Yko(e,t,n){if(!n||n.length===0)return!1;for(let o of n){let i=Math.abs(e.x-o.start.x)<A8&&Math.abs(e.y-o.start.y)<A8&&Math.abs(t.x-o.end.x)<A8&&Math.abs(t.y-o.end.y)<A8,r=Math.abs(e.x-o.end.x)<A8&&Math.abs(e.y-o.end.y)<A8&&Math.abs(t.x-o.start.x)<A8&&Math.abs(t.y-o.start.y)<A8;if(i||r)return!0}return!1}function Vko(e,t,n,o,i){let r=[];for(let s=0;s<e.length-1;s++){let a=e[s],c=e[s+1];Yko(a,c,i)||Gko({start:a,end:c},n,o+t)&&r.push(...zko(a,c,t))}return r}var MAe=0.0001;function Uko(e,t,n,o){let i=t.x-e.x,r=t.y-e.y,s=o.x-n.x,a=o.y-n.y,c=i*a-r*s;if(Math.abs(c)<0.0000000001)return null;let l=n.x-e.x,d=n.y-e.y,u=(l*a-d*s)/c,h=(l*r-d*i)/c,A=0.000001;return u>A&&u<0.999999&&h>A&&h<0.999999?{x:e.x+u*i,y:e.y+u*r}:null}function Wko(e,t){if(!t||t.length===0)return!1;for(let n of t)if(Math.abs(e.x-n.start.x)<MAe&&Math.abs(e.y-n.start.y)<MAe||Math.abs(e.x-n.end.x)<MAe&&Math.abs(e.y-n.end.y)<MAe)return!0;return!1}function Xko(e,t,n,o){if(!o||o.length===0)return!1;for(let i=t;i<=n;i++)if(i>=0&&i<e.length&&Wko(e[i],o))return!0;return!1}var yx=0.0001,wOt=class extends Oi{constructor(e){super(),this.input=e;let t=e.srj?.layerCount??2;this.input={...e,obstacles:SU(e.obstacles,t)},this.MAX_ITERATIONS=1e6,this.originalHdRoutes=[...this.input.hdRoutes],this.hdRoutes=this.input.hdRoutes,this.KEEPOUT_RADIUS_SCHEDULE=e.keepoutRadiusSchedule??[0.3,0.5,0.5],this.currentKeepoutRadius=this.KEEPOUT_RADIUS_SCHEDULE[0]??0.15,this.unprocessedRoutes=[...this.hdRoutes],this.smoothedCursorRoutes=[...this.unprocessedRoutes];let n=[...this.input.obstacles,...this.getJumperPadObstacles()];this.obstacleSHI=new Mfe("flatbush",n),this.boardOutlineRoutes=this.createBoardOutlineRoutes(),this.hdRouteSHI=new k_e([...this.hdRoutes,...this.boardOutlineRoutes]);for(let[o,i,r]of this.hdRoutes.flatMap((s)=>[[s.route[0],s.connectionName,s.rootConnectionName],[s.route[s.route.length-1],s.connectionName,s.rootConnectionName]])){let s=this.obstacleSHI.searchArea(o.x,o.y,0.01,0.01).filter((c)=>c.__zLayers?.includes(o.z));if(s.length===0)continue;let a=s[0];this.input.connMap.addConnections([[i,r,...a.offBoardConnectsTo??[],a.obstacleId,...a.connectedTo].filter(Boolean)])}}input;getSolverName(){return"TraceKeepoutSolver"}originalHdRoutes;hdRoutes;redrawnHdRoutes=[];KEEPOUT_RADIUS_SCHEDULE;currentScheduleIndex=0;currentKeepoutRadius;unprocessedRoutes=[];smoothedCursorRoutes=[];processedRoutes=[];currentTrace=null;cursorPosition=null;lastCursorPosition=null;drawPosition=null;currentTraceSegmentIndex=0;currentTraceSegmentT=0;recordedDrawPositions=[];lastCollidingSegments=[];currentTraceJumperSegments=new Map;obstacleSHI;hdRouteSHI;boardOutlineRoutes=[];getSmoothDistance(){return this.currentKeepoutRadius}getJumperPadObstacles(){let e=[];if(!this.input.jumpers)return e;for(let t of this.input.jumpers)for(let n of t.pads)e.push({...n,__zLayers:[0]});return e}buildJumperSegmentMap(e){let t=new Map;if(!e.jumpers||e.jumpers.length===0)return t;let n=e.route;for(let o of e.jumpers){let i=-1,r=1/0;for(let s=0;s<n.length-1;s++){let a=n[s],c=n[s+1],l=Math.sqrt((a.x-o.start.x)**2+(a.y-o.start.y)**2),d=Math.sqrt((c.x-o.end.x)**2+(c.y-o.end.y)**2),u=l+d,h=Math.sqrt((a.x-o.end.x)**2+(a.y-o.end.y)**2),A=Math.sqrt((c.x-o.start.x)**2+(c.y-o.start.y)**2),m=h+A,p=Math.min(u,m);(u<=m?l:h)<1&&(u<=m?d:A)<1&&p<r&&(r=p,i=s)}i>=0&&t.set(i,o)}return t}_step(){if(!this.currentTrace){let i=this.unprocessedRoutes.shift();if(!i)return this.currentScheduleIndex++,this.currentScheduleIndex<this.KEEPOUT_RADIUS_SCHEDULE.length?(this.currentKeepoutRadius=this.KEEPOUT_RADIUS_SCHEDULE[this.currentScheduleIndex],this.unprocessedRoutes=NI([...this.processedRoutes],this.currentScheduleIndex),this.smoothedCursorRoutes=[...this.unprocessedRoutes],this.processedRoutes=[],void(this.hdRouteSHI=new k_e([...this.unprocessedRoutes,...this.boardOutlineRoutes]))):(this.redrawnHdRoutes=this.processedRoutes,void(this.solved=!0));if(this.currentTrace=i,this.currentTrace.route.length<2)return this.processedRoutes.push(this.currentTrace),void(this.currentTrace=null);this.currentTraceJumperSegments=this.buildJumperSegmentMap(this.currentTrace);let r=this.currentTrace.route[0];return this.cursorPosition={...r},this.lastCursorPosition={...r},this.drawPosition={x:r.x,y:r.y},this.currentTraceSegmentIndex=0,this.currentTraceSegmentT=0,void(this.recordedDrawPositions=[{...r}])}this.lastCursorPosition={...this.cursorPosition};let e=this.stepCursorForward();if(e==="end")return void this.finalizeCurrentTrace();if(e==="jumper")return void(this.drawPosition={x:this.cursorPosition.x,y:this.cursorPosition.y});let t=this.getCollidingSegments(this.cursorPosition);this.lastCollidingSegments=t;let n=function(i){let{cursorPosition:r,lastCursorPosition:s,collidingSegments:a,keepoutRadius:c}=i;if(a.length===0)return null;let l=0.0001,d=r.x-s.x,u=r.y-s.y,h=Math.sqrt(d*d+u*u),A=h>l?{x:d/h,y:u/h}:{x:1,y:0},m=-A.y,p=A.x,g=PAe({pos:r,segments:a,dir:A,keepoutRadius:c});if(g>=c)return null;for(let N=1;N<=20;N++){let F=N/20*c,H={x:r.x+m*F,y:r.y+p*F},z=PAe({pos:H,segments:a,dir:A,keepoutRadius:c}),Y={x:r.x-m*F,y:r.y-p*F},U=PAe({pos:Y,segments:a,dir:A,keepoutRadius:c}),X=z>=c&&fNe(r,H,a),V=U>=c&&fNe(r,Y,a);if(X&&V)return z>=U?H:Y;if(X)return H;if(V)return Y}let _=c,f=[];for(let N=-60;N<=60;N++){let F=N/60*_,H={x:r.x+m*F,y:r.y+p*F},z=PAe({pos:H,segments:a,dir:A,keepoutRadius:c}),Y=fNe(r,H,a);f.push({pos:H,clearance:z,dist:Math.abs(F),pathClear:Y,index:N})}let y=f.filter((N)=>N.pathClear),x=f.findIndex((N)=>N.index===0),C=x>=0?x:Math.floor(f.length/2),I=null;for(let N=C+1;N<f.length-1;N++){let F=f[N-1],H=f[N],z=f[N+1];if(H.clearance>=F.clearance&&H.clearance>=z.clearance){I=H;break}}let b=null;for(let N=C-1;N>0;N--){let F=f[N-1],H=f[N],z=f[N+1];if(H.clearance>=F.clearance&&H.clearance>=z.clearance){b=H;break}}let P=null,E=null;if(y.length>0){let N=y.findIndex((H)=>H.index===0),F=N>=0?N:Math.floor(y.length/2);for(let H=F+1;H<y.length-1;H++){let z=y[H-1],Y=y[H],U=y[H+1];if(Y.clearance>=z.clearance&&Y.clearance>=U.clearance){P=Y;break}}for(let H=F-1;H>0;H--){let z=y[H-1],Y=y[H],U=y[H+1];if(Y.clearance>=z.clearance&&Y.clearance>=U.clearance){E=Y;break}}}let B=[I,b,P,E,f.find((N)=>N.index===0)].filter((N)=>N!=null),w=new Set,T=B.filter((N)=>{let F=`${N.pos.x.toFixed(6)},${N.pos.y.toFixed(6)}`;return!w.has(F)&&(w.add(F),!0)});if(T.length===0){let N=f[0];if(!N)return null;for(let F of f)F.clearance>N.clearance&&(N=F);return Math.sqrt((N.pos.x-r.x)**2+(N.pos.y-r.y)**2)>l?N.pos:null}let Q;if(g<0.15*c){Q=T[0];for(let N of T)N.clearance>Q.clearance&&(Q=N)}else{let N=T.filter((H)=>H.pathClear),F=N.length>0?N:T;Q=F[0];for(let H of F)H.clearance>Q.clearance&&(Q=H)}return Math.sqrt((Q.pos.x-r.x)**2+(Q.pos.y-r.y)**2)>l?Q.pos:null}({cursorPosition:this.cursorPosition,lastCursorPosition:this.lastCursorPosition,collidingSegments:t,keepoutRadius:this.currentKeepoutRadius});this.drawPosition=n??{...this.cursorPosition};let o=this.recordedDrawPositions[this.recordedDrawPositions.length-1];if(o&&this.drawPosition){let i={x:o.x,y:o.y,z:o.z},r={x:this.drawPosition.x,y:this.drawPosition.y,z:this.cursorPosition.z};this.segmentIntersectsOtherRoutes(i,r)&&(this.drawPosition={...this.cursorPosition})}this.recordedDrawPositions.push({x:this.drawPosition.x,y:this.drawPosition.y,z:this.cursorPosition.z})}getStepDistance(){return this.currentKeepoutRadius/2}getJumperAtCurrentSegmentStart(){return this.currentTraceSegmentT>yx?null:this.currentTraceJumperSegments.get(this.currentTraceSegmentIndex)??null}stepCursorForward(){if(!this.currentTrace||!this.cursorPosition)return"end";let e=this.currentTrace.route,t=this.getStepDistance();for(;t>0;){if(this.currentTraceSegmentIndex>=e.length-1)return"end";let n=this.getJumperAtCurrentSegmentStart();if(n){let d=e[this.currentTraceSegmentIndex],u=e[this.currentTraceSegmentIndex+1],h=Math.sqrt((d.x-n.start.x)**2+(d.y-n.start.y)**2),A=Math.sqrt((d.x-n.end.x)**2+(d.y-n.end.y)**2),m=h<=A?n.start:n.end,p=h<=A?n.end:n.start;return this.recordedDrawPositions.push({x:m.x,y:m.y,z:d.z,insideJumperPad:!0}),this.recordedDrawPositions.push({x:p.x,y:p.y,z:u.z,insideJumperPad:!0}),this.cursorPosition={x:p.x,y:p.y,z:u.z},this.currentTraceSegmentIndex++,this.currentTraceSegmentT=0,"jumper"}let o=e[this.currentTraceSegmentIndex],i=e[this.currentTraceSegmentIndex+1],r=i.x-o.x,s=i.y-o.y,a=Math.sqrt(r*r+s*s);if(a===0){this.currentTraceSegmentIndex++,this.currentTraceSegmentT=0;continue}let c=this.currentTraceSegmentT*a,l=a-c;if(t<=l){let d=c+t;return this.currentTraceSegmentT=d/a,this.cursorPosition={x:o.x+r*this.currentTraceSegmentT,y:o.y+s*this.currentTraceSegmentT,z:o.z},"stepped"}if(t-=l,this.currentTraceSegmentIndex++,this.currentTraceSegmentT=0,this.currentTraceSegmentIndex>=e.length-1){let d=e[e.length-1];return this.cursorPosition={...d},"end"}}return"stepped"}getCollidingSegments(e){if(!this.currentTrace)return[];let t=this.currentTrace.rootConnectionName??this.currentTrace.connectionName,n=2*this.currentKeepoutRadius,o=[],i=this.obstacleSHI.searchArea(e.x,e.y,n,n).filter((s)=>s.__zLayers?.includes(e.z));for(let s of i){if(s.__zLayers&&!s.__zLayers.includes(e.z))continue;if(s.connectedTo.includes(t))continue;if(s.obstacleId&&this.input.connMap.areIdsConnected(t,s.obstacleId))continue;let a=!1;for(let c of s.connectedTo)if(this.input.connMap.areIdsConnected(t,c)){a=!0;break}a||o.push(...HQe(s))}let r=this.hdRouteSHI.getConflictingRoutesNearPoint({x:e.x,y:e.y,z:e.z},n);for(let{conflictingRoute:s}of r){let a=s.rootConnectionName??s.connectionName;if(a===t)continue;if(this.input.connMap.areIdsConnected(t,a))continue;let c=s.traceThickness??0.15;o.push(...Vko(s.route,c,{x:e.x,y:e.y},n,s.jumpers))}return o}positionHasCollision(e,t=0){let n=this.getCollidingSegments(e);for(let o of n)if(Da(e,o.start,o.end)<=this.currentKeepoutRadius+t)return!0;return!1}segmentIntersectsOtherRoutes(e,t){if(!this.currentTrace)return!1;let n=this.currentTrace.rootConnectionName??this.currentTrace.connectionName,o=[...this.unprocessedRoutes,...this.smoothedCursorRoutes,...this.processedRoutes];for(let i of o)if((i.rootConnectionName??i.connectionName)!==n)for(let r=0;r<i.route.length-1;r++){let s=i.route[r],a=i.route[r+1];if((s.z===e.z||a.z===e.z)&&((!s.insideJumperPad||!a.insideJumperPad)&&fu({x:e.x,y:e.y},{x:t.x,y:t.y},{x:s.x,y:s.y},{x:a.x,y:a.y})))return!0}return!1}finalizeCurrentTrace(){if(!this.currentTrace)return;let e=this.currentTrace.route[this.currentTrace.route.length-1],t=this.recordedDrawPositions[this.recordedDrawPositions.length-1];t&&t.x===e.x&&t.y===e.y||this.recordedDrawPositions.push({...e});let n=function(i,r){if(i.length<4)return i;let s=[...i],a=!0;for(;a;){a=!1;for(let c=0;c<s.length-1&&!a;c++){let l=s[c],d=s[c+1];if(l.z===d.z)for(let u=c+2;u<s.length-1&&!a;u++){if(u===c+1)continue;let h=s[u],A=s[u+1];if(h.z!==A.z||l.z!==h.z)continue;let m=Uko(l,d,h,A);if(m){if(Xko(s,c+1,u,r))continue;let p=[];for(let g=0;g<=c;g++)p.push(s[g]);p.push({x:m.x,y:m.y,z:l.z});for(let g=u+1;g<s.length;g++)p.push(s[g]);s=p,a=!0}}}}return s}(this.simplifyRoute(this.recordedDrawPositions,this.currentTrace.jumpers),this.currentTrace.jumpers),o={connectionName:this.currentTrace.connectionName,rootConnectionName:this.currentTrace.rootConnectionName,traceThickness:this.currentTrace.traceThickness,viaDiameter:this.currentTrace.viaDiameter,route:n,vias:[...this.currentTrace.vias],jumpers:this.currentTrace.jumpers};this.processedRoutes.push(o),this.hdRouteSHI.removeRoute(this.currentTrace.connectionName),this.hdRouteSHI.addRoute(o),this.currentTrace=null,this.cursorPosition=null,this.lastCursorPosition=null,this.drawPosition=null,this.recordedDrawPositions=[]}isJumperEndpoint(e,t){if(!t||t.length===0)return!1;for(let n of t)if(Math.abs(e.x-n.start.x)<yx&&Math.abs(e.y-n.start.y)<yx||Math.abs(e.x-n.end.x)<yx&&Math.abs(e.y-n.end.y)<yx)return!0;return!1}simplifyRoute(e,t){if(e.length<=2)return e;let n=[e[0]];for(let o=1;o<e.length-1;o++){let i=n[n.length-1],r=e[o],s=e[o+1];if(this.isJumperEndpoint(r,t)){n.push(r);continue}if(r.z!==i.z||r.z!==s.z){n.push(r);continue}let a=r.x-i.x,c=r.y-i.y,l=s.x-r.x,d=a*(s.y-r.y)-c*l,u=0.000001;Math.abs(d)>u&&n.push(r)}return n.push(e[e.length-1]),n}createBoardOutlineRoutes(){let e=[];if(!this.input.srj)return e;let{outline:t,bounds:n}=this.input.srj,o;o=t&&t.length>=3?t:[{x:n.minX,y:n.minY},{x:n.maxX,y:n.minY},{x:n.maxX,y:n.maxY},{x:n.minX,y:n.maxY}];let i=this.input.srj.layerCount??2;for(let r=0;r<o.length;r++){let s=o[r],a=o[(r+1)%o.length];for(let c=0;c<i;c++)e.push({connectionName:`__board_outline___${r}_z${c}`,traceThickness:0.01,viaDiameter:0,route:[{x:s.x,y:s.y,z:c},{x:a.x,y:a.y,z:c}],vias:[]})}return e}visualize(){let e={lines:[],points:[],rects:[],circles:[],coordinateSystem:"cartesian",title:`Trace Keepout Solver (radius: ${this.currentKeepoutRadius.toFixed(2)})`};for(let t of this.originalHdRoutes)if(t.route.length!==0)for(let n=0;n<t.route.length-1;n++){let o=t.route[n],i=t.route[n+1];o.z===i.z&&e.lines.push({points:[{x:o.x,y:o.y},{x:i.x,y:i.y}],strokeColor:"rgba(0,0,0,0.25)",strokeWidth:1.5*(t.traceThickness??0.15)})}if(this.input.jumpers)for(let t of this.input.jumpers){for(let n of t.pads){let o=n.connectedTo.length>0?n.connectedTo.join(", "):"unused",i=n.connectedTo.length>0?this.input.colorMap[n.connectedTo[0]]||"#888888":"rgba(128, 128, 128, 0.5)";e.rects.push({center:n.center,width:n.width,height:n.height,fill:i,stroke:"rgba(0, 0, 0, 0.5)",label:`Jumper pad (${o})`})}t.pads.length>=2&&e.lines.push({points:[t.pads[0].center,t.pads[1].center],strokeColor:"rgba(100, 100, 100, 0.8)",strokeWidth:0.2,label:"Jumper body"})}for(let t of this.input.obstacles){let n="rgba(128, 128, 128, 0.2)",o=t.__zLayers?.includes(0),i=t.__zLayers?.includes(1);o&&i?n="rgba(128, 0, 128, 0.2)":o?n="rgba(255, 0, 0, 0.2)":i&&(n="rgba(0, 0, 255, 0.2)"),e.rects.push({center:t.center,width:t.width,height:t.height,fill:n,label:`Obstacle (Z: ${t.__zLayers?.join(", ")})`})}if(this.input.srj){let{outline:t,bounds:n}=this.input.srj,o;o=t&&t.length>=3?t:[{x:n.minX,y:n.minY},{x:n.maxX,y:n.minY},{x:n.maxX,y:n.maxY},{x:n.minX,y:n.maxY}];for(let i=0;i<o.length;i++){let r=o[i],s=o[(i+1)%o.length];e.lines.push({points:[{x:r.x,y:r.y},{x:s.x,y:s.y}],strokeColor:"rgba(0, 128, 0, 0.6)",strokeWidth:0.1,label:"Board outline"})}}for(let t of this.processedRoutes){if(t.route.length===0)continue;let n=this.input.colorMap[t.connectionName]||"#888888",o=new Set;if(t.jumpers&&t.jumpers.length>0)for(let i of t.jumpers)for(let r=0;r<t.route.length-1;r++){let s=t.route[r],a=t.route[r+1],c=Math.abs(s.x-i.start.x)<yx&&Math.abs(s.y-i.start.y)<yx&&Math.abs(a.x-i.end.x)<yx&&Math.abs(a.y-i.end.y)<yx,l=Math.abs(s.x-i.end.x)<yx&&Math.abs(s.y-i.end.y)<yx&&Math.abs(a.x-i.start.x)<yx&&Math.abs(a.y-i.start.y)<yx;if(c||l){o.add(r);break}}for(let i=0;i<t.route.length-1;i++){let r=t.route[i],s=t.route[i+1];o.has(i)?e.lines.push({points:[{x:r.x,y:r.y},{x:s.x,y:s.y}],strokeColor:"rgba(128, 128, 128, 0.6)",strokeDash:"2 2",label:`${t.connectionName} (jumper segment - fixed)`}):r.z===s.z&&e.lines.push({points:[{x:r.x,y:r.y},{x:s.x,y:s.y}],strokeColor:r.z===0?"red":"blue",strokeWidth:t.traceThickness,label:`${t.connectionName} (z=${r.z})`})}for(let i of t.vias)e.circles.push({center:{x:i.x,y:i.y},radius:t.viaDiameter/2,fill:"rgba(255, 0, 255, 0.5)",label:`${t.connectionName} via`});if(t.jumpers&&t.jumpers.length>0){let i=xS(t.jumpers,{color:n,label:t.connectionName});e.rects.push(...i.rects??[]),e.lines.push(...i.lines??[])}}if(this.currentTrace&&this.recordedDrawPositions.length>0){this.input.colorMap[this.currentTrace.connectionName];for(let t=0;t<this.recordedDrawPositions.length-1;t++){let n=this.recordedDrawPositions[t],o=this.recordedDrawPositions[t+1];e.lines.push({points:[{x:n.x,y:n.y},{x:o.x,y:o.y}],strokeColor:"green",strokeWidth:this.currentTrace.traceThickness})}if(this.cursorPosition&&(e.circles.push({center:{x:this.cursorPosition.x,y:this.cursorPosition.y},radius:this.currentKeepoutRadius,stroke:"orange",fill:"none"}),e.points.push({x:this.cursorPosition.x,y:this.cursorPosition.y,color:"orange",label:"Cursor"}),this.lastCursorPosition)){let t=this.cursorPosition.x-this.lastCursorPosition.x,n=this.cursorPosition.y-this.lastCursorPosition.y,o=Math.sqrt(t*t+n*n),i=o>0.0001?{x:t/o,y:n/o}:{x:1,y:0},r=this.currentKeepoutRadius/4,s={x:this.cursorPosition.x-i.x*r,y:this.cursorPosition.y-i.y*r},a={x:this.cursorPosition.x+i.x*r,y:this.cursorPosition.y+i.y*r};e.lines.push({points:[s,a],strokeColor:"cyan",strokeWidth:0.05,label:"Projected segment"})}this.drawPosition&&e.points.push({x:this.drawPosition.x,y:this.drawPosition.y,color:"lime",label:"Draw"});for(let t of this.lastCollidingSegments)e.lines.push({points:[{x:t.start.x,y:t.start.y},{x:t.end.x,y:t.end.y}],strokeColor:"rgba(255, 0, 255, 0.8)",strokeWidth:0.02,label:"Colliding segment"})}if(!this.solved){for(let t of this.smoothedCursorRoutes)if(t.route.length!==0)for(let n=0;n<t.route.length-1;n++){let o=t.route[n],i=t.route[n+1];o.z===i.z&&e.lines.push({points:[{x:o.x,y:o.y},{x:i.x,y:i.y}],strokeColor:"gray"})}}return e}getRedrawnHdRoutes(){return this.redrawnHdRoutes}},TOt=class extends Oi{constructor(e){super(),this.input=e,this.unprocessedObstacles=SU(this.input.srj.obstacles,this.input.srj.layerCount).filter((t)=>t.offBoardConnectsTo&&t.offBoardConnectsTo.length>0),this.unprocessedObstacles.forEach((t,n)=>{t.obstacleId=t.obstacleId??`__obs${n}`}),this.offBoardConnMap=new pHe({}),this.offBoardConnMap.addConnections(this.unprocessedObstacles.filter((t)=>t.offBoardConnectsTo?.length).map((t)=>[t.obstacleId,...t.offBoardConnectsTo??[]])),this.nodeTree=new Yke(this.input.capacityMeshNodes)}input;getSolverName(){return"RelateNodesToOffBoardConnectionsSolver"}unprocessedObstacles;nodeTree;offBoardConnMap;nodesInNet=new Map;lastProcessedObstacle;_step(){let e=this.unprocessedObstacles.pop();if(this.lastProcessedObstacle=e,!e)return void(this.solved=!0);let t=this.offBoardConnMap.getNetConnectedToId(e.obstacleId),n=this.nodeTree.getNodesInArea(e.center.x,e.center.y,0.01,0.01).filter((s)=>s.availableZ.some((a)=>e.__zLayers?.includes(a))).filter((s)=>Math.abs(s.center.x-e.center.x)<0.01&&Math.abs(s.center.y-e.center.y)<0.01),o=n.map((s)=>s.capacityMeshNodeId),i=this.nodesInNet.get(t)??[],r=[...i.map((s)=>s.capacityMeshNodeId),...o];for(let s of i)s._offBoardConnectedCapacityMeshNodeIds=r;for(let s of n)s._offBoardConnectedCapacityMeshNodeIds=r,s._offBoardConnectionId=t;this.nodesInNet.set(t,[...i,...n])}getOutput(){return{capacityNodes:this.input.capacityMeshNodes}}visualize(){let e={rects:[],lines:[],points:[],circles:[]},t=new Set;for(let[n,o]of this.nodesInNet)for(let i of o)t.add(i.capacityMeshNodeId);for(let n of this.input.capacityMeshNodes)t.has(n.capacityMeshNodeId)||e.rects.push({center:n.center,width:n.width-0.1,height:n.height-0.1,fill:"rgba(0, 0, 0, 0.2)"});this.lastProcessedObstacle&&e.rects.push({center:this.lastProcessedObstacle.center,width:this.lastProcessedObstacle.width,height:this.lastProcessedObstacle.height,fill:"rgba(255, 0, 0, 0.5)"});for(let[n,o]of this.nodesInNet.entries()){for(let i of o)e.rects.push({center:i.center,width:i.width,height:i.height,fill:jee(n,0.2),label:`OffBoardConn: ${n}`});for(let i of o)for(let r of o)i.capacityMeshNodeId!==r.capacityMeshNodeId&&e.lines.push({points:[i.center,r.center],strokeColor:jee(n,1)})}return e}},BAe=0.1,wAe=0.1;function TAe(e,t,n,o,i,r){return(i-e)*(o-t)-(r-t)*(n-e)}function DAe(e,t,n,o,i,r){return Math.min(e,n)<=i&&i<=Math.max(e,n)&&Math.min(t,o)<=r&&r<=Math.max(t,o)}function Kko(e,t,n,o,i,r,s,a){let c=TAe(i,r,s,a,e,t),l=TAe(i,r,s,a,n,o),d=TAe(e,t,n,o,i,r),u=TAe(e,t,n,o,s,a);return(c>0&&l<0||c<0&&l>0)&&(d>0&&u<0||d<0&&u>0)||(!(c!==0||!DAe(i,r,s,a,e,t))||(!(l!==0||!DAe(i,r,s,a,n,o))||(!(d!==0||!DAe(e,t,n,o,i,r))||!(u!==0||!DAe(e,t,n,o,s,a)))))}function jko(e,t,n,o,i,r){let s=i-n,a=r-o,c=e-n,l=t-o,d=s*s+a*a;if(d===0)return{x:n,y:o,distSq:c*c+l*l};let u=(c*s+l*a)/d;u=Math.max(0,Math.min(1,u));let h=n+u*s,A=o+u*a,m=e-h,p=t-A;return{x:h,y:A,distSq:m*m+p*p}}var qko=class extends Oi{getSolverName(){return"SimpleHighDensitySolver"}unsolvedNodes;allNodes;routes;colorMap;traceWidth;viaDiameter;numMovablePoints;currentNode=null;lastNode=null;currentNodeStep=0;routesInProgress=[];pushMargin;currentNodeBounds=null;constructor({nodePortPoints:e,colorMap:t,traceWidth:n=0.1,viaDiameter:o=0.3,pushMargin:i=0.3,numMovablePoints:r=2}){if(super(),r<1||r>3)throw Error(`numMovablePoints must be 1, 2, or 3, got ${r}`);this.allNodes=[...e],this.unsolvedNodes=[...e],this.colorMap=t??{},this.routes=[],this.traceWidth=n,this.viaDiameter=o,this.numMovablePoints=r,this.pushMargin=i,this.MAX_ITERATIONS=10*e.length+1}_step(){if(this.currentNode===null){if(this.unsolvedNodes.length===0)return void(this.solved=!0);this.lastNode=this.currentNode,this.currentNode=this.unsolvedNodes.pop(),this.currentNodeStep=0,this.routesInProgress=[],this._initializeRoutesForCurrentNode()}this.currentNodeStep>0&&this._runForceDirectedStep(),this.currentNodeStep++,this.currentNodeStep>=10&&(this._finalizeRoutesForCurrentNode(),this.lastNode=this.currentNode,this.currentNode=null)}_initializeRoutesForCurrentNode(){let e=this.currentNode,t=e.center.x-e.width/2,n=e.center.x+e.width/2,o=e.center.y-e.height/2,i=e.center.y+e.height/2;this.currentNodeBounds={minX:t,maxX:n,minY:o,maxY:i};let r=new Map;for(let s of e.portPoints)r.has(s.connectionName)||r.set(s.connectionName,[]),r.get(s.connectionName).push({x:s.x,y:s.y,z:s.z,rootConnectionName:s.rootConnectionName});for(let[s,a]of r){if(a.length<2)continue;let c=a[0],l=a[a.length-1],d=c.z,u=l.x-c.x,h=l.y-c.y,A=Math.sqrt(u*u+h*h),m=A>0?u/A:0,p=A>0?h/A:0,g=[];this.numMovablePoints>=1&&g.push({x:c.x+m*wAe,y:c.y+p*wAe,z:d,rootConnectionName:c.rootConnectionName,connectionName:s}),this.numMovablePoints>=2&&g.push({x:l.x-m*wAe,y:l.y-p*wAe,z:d,rootConnectionName:c.rootConnectionName,connectionName:s}),this.numMovablePoints>=3&&g.push({x:c.x+u/2,y:c.y+h/2,z:d,rootConnectionName:c.rootConnectionName,connectionName:s}),this.routesInProgress.push({connectionName:s,rootConnectionName:c.rootConnectionName,startPoint:{x:c.x,y:c.y,z:d},endPoint:{x:l.x,y:l.y,z:d},movablePoints:g})}}_runForceDirectedStep(){let e=this.currentNodeBounds,t=[];for(let a of this.routesInProgress)t.push(...a.movablePoints);let n=new Map;for(let a of t)n.set(a,{fx:0,fy:0});let o=0.3+this.pushMargin,i=new Map;for(let a of this.routesInProgress){let c=[{x:a.startPoint.x,y:a.startPoint.y,movablePoint:null}];a.movablePoints.length===1?c.push({x:a.movablePoints[0].x,y:a.movablePoints[0].y,movablePoint:a.movablePoints[0]}):a.movablePoints.length===2?(c.push({x:a.movablePoints[0].x,y:a.movablePoints[0].y,movablePoint:a.movablePoints[0]}),c.push({x:a.movablePoints[1].x,y:a.movablePoints[1].y,movablePoint:a.movablePoints[1]})):a.movablePoints.length===3&&(c.push({x:a.movablePoints[0].x,y:a.movablePoints[0].y,movablePoint:a.movablePoints[0]}),c.push({x:a.movablePoints[2].x,y:a.movablePoints[2].y,movablePoint:a.movablePoints[2]}),c.push({x:a.movablePoints[1].x,y:a.movablePoints[1].y,movablePoint:a.movablePoints[1]})),c.push({x:a.endPoint.x,y:a.endPoint.y,movablePoint:null}),i.set(a,c)}for(let a of t){let c=n.get(a),l=a.x-e.minX,d=e.maxX-a.x,u=e.maxY-a.y,h=a.y-e.minY;l<o&&(c.fx+=BAe*(o-l)),d<o&&(c.fx-=BAe*(o-d)),h<o&&(c.fy+=BAe*(o-h)),u<o&&(c.fy-=BAe*(o-u));for(let A of this.routesInProgress){if(A.rootConnectionName===a.rootConnectionName)continue;let m=i.get(A);for(let p=0;p<m.length-1;p++){let g=m[p],_=m[p+1],f=jko(a.x,a.y,g.x,g.y,_.x,_.y),y=Math.sqrt(f.distSq);if(y>0&&y<2*o){let x=a.x-f.x,C=a.y-f.y,I=0.002/f.distSq,b=I*x,P=I*C;c.fx+=b,c.fy+=P;let E=g.movablePoint,B=_.movablePoint;if(E&&B){let w=n.get(E),T=n.get(B);w.fx-=b/2,w.fy-=P/2,T.fx-=b/2,T.fy-=P/2}else if(E){let w=n.get(E);w.fx-=b,w.fy-=P}else if(B){let w=n.get(B);w.fx-=b,w.fy-=P}}}}}let r=(a)=>a.movablePoint?{x:a.movablePoint.x,y:a.movablePoint.y}:{x:a.x,y:a.y},s=(a)=>{let c=null;for(let h of this.routesInProgress)if(h.movablePoints.includes(a)){c=h;break}if(!c)return!1;let l=i.get(c),d=-1;for(let h=0;h<l.length;h++)if(l[h].movablePoint===a){d=h;break}if(d===-1)return!1;let u=[];if(d>0){let h=r(l[d-1]);u.push({ax:h.x,ay:h.y,bx:a.x,by:a.y})}if(d<l.length-1){let h=r(l[d+1]);u.push({ax:a.x,ay:a.y,bx:h.x,by:h.y})}for(let h of this.routesInProgress){if(h.rootConnectionName===c.rootConnectionName)continue;let A=i.get(h);for(let m=0;m<A.length-1;m++){let p=r(A[m]),g=r(A[m+1]);for(let _ of u)if(Kko(_.ax,_.ay,_.bx,_.by,p.x,p.y,g.x,g.y))return!0}}return!1};for(let a of t){let c=n.get(a);a.forceX=c.fx,a.forceY=c.fy;let{x:l,y:d}=a;a.x+=c.fx,a.y+=c.fy,a.x=Math.max(e.minX,Math.min(e.maxX,a.x)),a.y=Math.max(e.minY,Math.min(e.maxY,a.y)),s(a)&&(a.x=l,a.y=d)}}_finalizeRoutesForCurrentNode(){for(let e of this.routesInProgress){let{connectionName:t,rootConnectionName:n,startPoint:o,endPoint:i,movablePoints:r}=e,s=[{x:o.x,y:o.y,z:o.z}];r.length===1?s.push({x:r[0].x,y:r[0].y,z:r[0].z}):r.length===2?(s.push({x:r[0].x,y:r[0].y,z:r[0].z}),s.push({x:r[1].x,y:r[1].y,z:r[1].z})):r.length===3&&(s.push({x:r[0].x,y:r[0].y,z:r[0].z}),s.push({x:r[2].x,y:r[2].y,z:r[2].z}),s.push({x:r[1].x,y:r[1].y,z:r[1].z})),s.push({x:i.x,y:i.y,z:i.z});let a={connectionName:t,rootConnectionName:n,traceThickness:this.traceWidth,viaDiameter:this.viaDiameter,route:s,vias:[]};this.routes.push(a)}this.routesInProgress=[]}_getNodeBounds(e){return{minX:e.center.x-e.width/2,maxX:e.center.x+e.width/2,minY:e.center.y-e.height/2,maxY:e.center.y+e.height/2}}visualize(){let e={lines:[],points:[],rects:[],circles:[]};for(let t of this.unsolvedNodes){if(t===this.currentNode)continue;let n=this._getNodeBounds(t);e.rects.push({center:{x:(n.minX+n.maxX)/2,y:(n.minY+n.maxY)/2},width:n.maxX-n.minX,height:n.maxY-n.minY,fill:"rgba(0, 0, 0, 0.08)",stroke:"rgba(0, 0, 0, 0.2)",label:t.capacityMeshNodeId})}if(this.lastNode){let t=this._getNodeBounds(this.lastNode);e.rects.push({center:{x:(t.minX+t.maxX)/2,y:(t.minY+t.maxY)/2},width:t.maxX-t.minX,height:t.maxY-t.minY,fill:"rgba(0, 200, 0, 0.15)",stroke:"rgba(0, 0, 255, 0.6)"})}if(this.currentNode){let t=this._getNodeBounds(this.currentNode);e.rects.push({center:{x:(t.minX+t.maxX)/2,y:(t.minY+t.maxY)/2},width:t.maxX-t.minX,height:t.maxY-t.minY,fill:"rgba(0, 200, 0, 0.15)",stroke:"rgba(0, 200, 0, 0.6)"})}for(let t of this.unsolvedNodes){let n=new Map;for(let o of t.portPoints)n.has(o.connectionName)||n.set(o.connectionName,[]),n.get(o.connectionName).push({x:o.x,y:o.y});for(let[o,i]of n)i.length<2||e.lines.push({points:i.map((r)=>({x:r.x,y:r.y})),label:o,strokeColor:"gray",strokeWidth:this.traceWidth})}for(let t of this.routes){let n=jge(t.route,t.connectionName,this.colorMap[t.connectionName]);for(let i of n)e.lines.push({points:i.points,label:i.connectionName,strokeColor:i.z===0?i.color:Cr(i.color,0.75),layer:`z${i.z}`,strokeWidth:t.traceThickness,strokeDash:i.z!==0?"10, 5":void 0});let o=t.route;for(let i=0;i<o.length;i++){let r=o[i],s=i===0,a=i===o.length-1,c=!s&&!a,l;l=s?"start":a?"end":`M${i}`,e.points.push({x:r.x,y:r.y,label:l,color:c?"orange":"blue"})}}for(let t of this.routesInProgress){let{startPoint:n,endPoint:o,movablePoints:i,connectionName:r}=t,s=this.colorMap[r]??"gray",a=[{x:n.x,y:n.y}];i.length===1?a.push({x:i[0].x,y:i[0].y}):i.length===2?(a.push({x:i[0].x,y:i[0].y}),a.push({x:i[1].x,y:i[1].y})):i.length===3&&(a.push({x:i[0].x,y:i[0].y}),a.push({x:i[2].x,y:i[2].y}),a.push({x:i[1].x,y:i[1].y})),a.push({x:o.x,y:o.y}),e.lines.push({points:a,label:r,strokeColor:s,strokeWidth:this.traceWidth}),e.points.push({x:n.x,y:n.y,label:"start",color:"blue"});for(let c=0;c<i.length;c++){let l=i[c];if(e.points.push({x:l.x,y:l.y,label:`M${c+1}`,color:"orange"}),l.forceX!==void 0&&l.forceY!==void 0){if(Math.sqrt(l.forceX*l.forceX+l.forceY*l.forceY)>0.001){e.lines.push({points:[{x:l.x,y:l.y},{x:l.x+l.forceX*5,y:l.y+l.forceY*5}],strokeColor:"red",strokeWidth:0.02,label:`F${c+1}`});let u=0.05,h=l.x+l.forceX*5,A=l.y+l.forceY*5,m=Math.atan2(l.forceY,l.forceX);e.lines.push({points:[{x:h,y:A},{x:h-u*Math.cos(m-Math.PI/6),y:A-u*Math.sin(m-Math.PI/6)}],strokeColor:"red",strokeWidth:0.02}),e.lines.push({points:[{x:h,y:A},{x:h-u*Math.cos(m+Math.PI/6),y:A-u*Math.sin(m+Math.PI/6)}],strokeColor:"purple",strokeWidth:0.02})}}}e.points.push({x:o.x,y:o.y,label:"end",color:"blue"})}return e}},DOt=({connMap:e,connectionsWithResults:t,inputNodes:n,obstacles:o})=>{let i=o.filter((a)=>a.offBoardConnectsTo?.length);if(i.length===0)return;let r=new Xk({});r.addConnections(i.map((a,c)=>[a.obstacleId??`__obs${c}`,...a.offBoardConnectsTo??[]]));let s=new Map(n.map((a)=>[a.capacityMeshNodeId,a]));for(let a of t){if(!a.path)continue;let c=a.connection.rootConnectionName??a.connection.name,l=new Set;for(let d of a.path){let u=s.get(d.currentNodeId);if(u?._offBoardConnectionId&&l.add(u._offBoardConnectionId),d.throughNodeId){let h=s.get(d.throughNodeId);h?._offBoardConnectionId&&l.add(h._offBoardConnectionId)}}for(let d of l){let u=r.getIdsConnectedToNet(d);u?.length&&e.addConnections([[c,...u]])}}};function SI(e,t,n,o={}){return{solverName:e,solverClass:t,getConstructorParams:n,onSolved:o.onSolved}}var NOt=class extends Oi{constructor(e,t={}){super(),this.srj=e,this.opts=t,this.srj=e,this.opts={...t},this.viaDiameter=y0(e).padDiameter,this.minTraceWidth=e.minTraceWidth;let n=this.opts;if(this.effort=n.effort??1,this.MAX_ITERATIONS=1e8*this.effort,n.capacityDepth===void 0){let o=e.bounds.maxX-e.bounds.minX,i=e.bounds.maxY-e.bounds.minY,r=Math.max(o,i),s=n.targetMinCapacity??0.5;n.capacityDepth=cT(r,s)}this.connMap=x0(e),this.colorMap=HA(e,this.connMap),this.cacheProvider=n.cacheProvider===void 0?CS():n.cacheProvider===null?null:n.cacheProvider,this.startTimeOfPhase={},this.endTimeOfPhase={},this.timeSpentOnPhase={}}srj;opts;getSolverName(){return"AssignableAutoroutingPipeline2"}netToPointPairsSolver;nodeSolver;nodeTargetMerger;edgeSolver;relateNodesToOffBoardConnections;colorMap;highDensityRouteSolver;simpleHighDensityRouteSolver;highDensitySolver;highDensityStitchSolver;singleLayerNodeMerger;offboardPathFragmentSolver;strawSolver;deadEndSolver;traceSimplificationSolver;traceKeepoutSolver;traceWidthSolver;availableSegmentPointSolver;portPointPathingSolver;multiSectionPortPointOptimizer;viaDiameter;minTraceWidth;effort;startTimeOfPhase;endTimeOfPhase;timeSpentOnPhase;activeSubSolver=null;connMap;srjWithPointPairs;capacityNodes=null;capacityEdges=null;cacheProvider=null;pipelineDef=[SI("netToPointPairsSolver",mHe,(e)=>[e.srj,e.colorMap,rT(e.srj)],{onSolved:(e)=>{e.srjWithPointPairs=e.netToPointPairsSolver?.getNewSimpleRouteJson(),e.colorMap=HA(e.srjWithPointPairs,this.connMap),e.connMap=x0(e.srjWithPointPairs)}}),SI("nodeSolver",bU,(e)=>[{simpleRouteJson:e.srjWithPointPairs,maxGapFillPasses:4}],{onSolved:(e)=>{e.capacityNodes=e.nodeSolver?.getOutput().meshNodes??[]}}),SI("relateNodesToOffBoardConnections",TOt,(e)=>[{capacityMeshNodes:e.capacityNodes,srj:e.srj}],{onSolved:(e)=>{e.capacityNodes=e.relateNodesToOffBoardConnections?.getOutput().capacityNodes}}),SI("edgeSolver",sT,(e)=>[e.capacityNodes],{onSolved:(e)=>{e.capacityEdges=e.edgeSolver?.edges}}),SI("availableSegmentPointSolver",hL,(e)=>[{nodes:e.capacityNodes,edges:e.capacityEdges||[],traceWidth:e.minTraceWidth,colorMap:e.colorMap,shouldReturnCrampedPortPoints:!1}]),SI("portPointPathingSolver",hHe,(e)=>{let t=e.capacityNodes.map((i)=>({capacityMeshNodeId:i.capacityMeshNodeId,center:i.center,width:i.width,height:i.height,portPoints:[],availableZ:i.availableZ,_containsTarget:i._containsTarget,_containsObstacle:i._containsObstacle,_offBoardConnectionId:i._offBoardConnectionId,_offBoardConnectedCapacityMeshNodeIds:i._offBoardConnectedCapacityMeshNodeIds})),n=new Map(t.map((i)=>[i.capacityMeshNodeId,i])),o=e.availableSegmentPointSolver;for(let i of o.sharedEdgeSegments)for(let r of i.portPoints){let[s,a]=r.nodeIds,c={portPointId:r.segmentPortPointId,x:r.x,y:r.y,z:r.availableZ[0]??0,connectionNodeIds:[s,a],distToCentermostPortOnZ:r.distToCentermostPortOnZ,connectsToOffBoardNode:i.nodeIds.some((d)=>n.get(d)?._offBoardConnectionId)},l=n.get(s);l&&l.portPoints.push(c)}return[{simpleRouteJson:e.srjWithPointPairs,inputNodes:t,capacityMeshNodes:e.capacityNodes,colorMap:e.colorMap,numShuffleSeeds:100*Math.min(1,e.effort),hyperParameters:{JUMPER_PF_FN_ENABLED:!1,NODE_PF_FACTOR:100,NODE_PF_MAX_PENALTY:100,CENTER_OFFSET_DIST_PENALTY_FACTOR:0,FORCE_CENTER_FIRST:!0}}]},{onSolved:(e)=>{let t=e.portPointPathingSolver;t&&DOt({connMap:e.connMap,connectionsWithResults:t.connectionsWithResults,inputNodes:t.inputNodes,obstacles:e.srj.obstacles})}}),SI("multiSectionPortPointOptimizer",WQo,(e)=>{let t=e.portPointPathingSolver;return[{simpleRouteJson:e.srjWithPointPairs,inputNodes:t.inputNodes,capacityMeshNodes:e.capacityNodes,capacityMeshEdges:e.capacityEdges,colorMap:e.colorMap,initialConnectionResults:t.connectionsWithResults,initialAssignedPortPoints:t.assignedPortPoints,initialNodeAssignedPortPoints:t.nodeAssignedPortPoints}]}),SI("highDensitySolver",qko,(e)=>[{nodePortPoints:e.multiSectionPortPointOptimizer?.getNodesWithPortPoints()??e.portPointPathingSolver?.getNodesWithPortPoints()??[],colorMap:e.colorMap,viaDiameter:e.viaDiameter,traceWidth:e.minTraceWidth,connMap:e.connMap}]),SI("highDensityStitchSolver",AHe,(e)=>[{connections:e.srjWithPointPairs.connections,hdRoutes:e.highDensitySolver.routes,colorMap:e.colorMap,layerCount:e.srj.layerCount,defaultViaDiameter:e.viaDiameter}]),SI("traceSimplificationSolver",HI,(e)=>[{hdRoutes:e.highDensityStitchSolver?.mergedHdRoutes??e.highDensitySolver?.routes??e.highDensityRouteSolver?.routes,obstacles:e.srj.obstacles,connMap:e.connMap,colorMap:e.colorMap,outline:e.srj.outline,defaultViaDiameter:e.viaDiameter,layerCount:e.srj.layerCount,iterations:2}]),SI("traceKeepoutSolver",wOt,(e)=>[{hdRoutes:e.traceSimplificationSolver?.simplifiedHdRoutes??[],obstacles:e.srj.obstacles,connMap:e.connMap,colorMap:e.colorMap,srj:e.srj}]),SI("traceWidthSolver",TU,(e)=>[{hdRoutes:e.traceKeepoutSolver?.redrawnHdRoutes??[],connection:e.srj.connections,obstacles:e.srj.obstacles,connMap:e.connMap,colorMap:e.colorMap,minTraceWidth:e.minTraceWidth,obstacleMargin:e.srj.defaultObstacleMargin??0.15,layerCount:e.srj.layerCount}])];getConstructorParams(){return[this.srj,this.opts]}currentPipelineStepIndex=0;_step(){let e=this.pipelineDef[this.currentPipelineStepIndex];if(!e)return void(this.solved=!0);if(this.activeSubSolver)return this.activeSubSolver.step(),void(this.activeSubSolver.solved?(this.endTimeOfPhase[e.solverName]=performance.now(),this.timeSpentOnPhase[e.solverName]=this.endTimeOfPhase[e.solverName]-this.startTimeOfPhase[e.solverName],e.onSolved?.(this),this.activeSubSolver=null,this.currentPipelineStepIndex++):this.activeSubSolver.failed&&(this.error=this.activeSubSolver?.error,this.failed=!0,this.activeSubSolver=null));let t=e.getConstructorParams(this);this.activeSubSolver=new e.solverClass(...t),this[e.solverName]=this.activeSubSolver,this.timeSpentOnPhase[e.solverName]=0,this.startTimeOfPhase[e.solverName]=performance.now()}solveUntilPhase(e){for(;this.getCurrentPhase()!==e;)this.step()}getCurrentPhase(){return this.pipelineDef[this.currentPipelineStepIndex]?.solverName??"none"}visualize(){if(!this.solved&&this.activeSubSolver)return this.activeSubSolver.visualize();let e=this.netToPointPairsSolver?.visualize(),t=this.nodeSolver?.visualize(),n=this.nodeTargetMerger?.visualize(),o=this.singleLayerNodeMerger?.visualize(),i=this.strawSolver?.visualize(),r=this.edgeSolver?.visualize(),s=this.deadEndSolver?.visualize(),a=this.availableSegmentPointSolver?.visualize(),c=this.offboardPathFragmentSolver?.visualize(),l=this.portPointPathingSolver?.visualize(),d=this.multiSectionPortPointOptimizer?.visualize(),u=this.highDensityRouteSolver?.visualize(),h=this.highDensitySolver?.visualize(),A=this.simpleHighDensityRouteSolver?.visualize(),m=this.highDensityStitchSolver?.visualize(),p=this.traceSimplificationSolver?.visualize(),g=this.traceKeepoutSolver?.visualize(),_=this.traceWidthSolver?.visualize(),f=this.srj.outline,y=[];if(y.push({points:[{x:this.srj.bounds?.minX??-50,y:this.srj.bounds?.minY??-50},{x:this.srj.bounds?.maxX??50,y:this.srj.bounds?.minY??-50},{x:this.srj.bounds?.maxX??50,y:this.srj.bounds?.maxY??50},{x:this.srj.bounds?.minX??-50,y:this.srj.bounds?.maxY??50},{x:this.srj.bounds?.minX??-50,y:this.srj.bounds?.minY??-50}],strokeColor:"rgba(255,0,0,0.25)"}),f&&f.length>=2){let b=f.map((P)=>({x:P.x,y:P.y}));b.push({...b[0]}),y.push({points:b,strokeColor:"rgba(0, 136, 255, 0.95)"})}let x=O6(this.srj),C={points:[...this.srj.connections.flatMap((b)=>b.pointsToConnect.map((P)=>({...P,layer:z6(P,this.srj.layerCount),label:`${b.name} ${P.pcb_port_id??""}`})))],rects:[...(this.srj.obstacles??[]).filter((b)=>!b.isCopperPour).map((b)=>({...b,fill:b.layers?.includes("top")?"rgba(255,0,0,0.25)":b.layers?.includes("bottom")?"rgba(0,0,255,0.25)":"rgba(255,0,0,0.25)",layer:OE(b,this.srj.layerCount),label:x(b)}))],lines:y},I=[C,e,t,n,o,i,r,s,a,c,l,d,u?Lc(C,u):null,h?Lc(C,h):null,A?Lc(C,A):null,m,p,g,_,this.solved?Lc({lines:y},p1(this.getOutputSimpleRouteJson())):null].filter(Boolean);return Lc(...I)}preview(){let e=this.highDensitySolver?.routes??this.simpleHighDensityRouteSolver?.routes??this.highDensityRouteSolver?.routes;if(e){let t=[];for(let n=e.length-1;n>=0;n--){let o=e[n];if(t.push({points:o.route.map((i)=>({x:i.x,y:i.y})),strokeColor:this.colorMap[o.connectionName]}),t.length>200)break}return{lines:t}}if(this.portPointPathingSolver){let t=[];for(let n of this.portPointPathingSolver.connectionsWithResults)n.path&&t.push({points:n.path.map((o)=>({x:o.point.x,y:o.point.y})),strokeColor:this.colorMap[n.connection.name]});return{lines:t}}return this.netToPointPairsSolver?this.netToPointPairsSolver?.visualize():{}}_getOutputHdRoutes(){return this.traceWidthSolver?.hdRoutesWithWidths??this.traceKeepoutSolver?.redrawnHdRoutes??this.traceSimplificationSolver?.simplifiedHdRoutes??this.highDensityStitchSolver?.mergedHdRoutes??this.highDensitySolver?.routes??this.simpleHighDensityRouteSolver?.routes??this.highDensityRouteSolver?.routes}getConnectedOffboardObstacles(){let e={},t=new Set(this.srj.connections.flatMap((n)=>n.__rootConnectionNames??[n.name]));for(let[n,o]of this.srj.obstacles.entries()){if(!o.offBoardConnectsTo?.length)continue;let i=o.obstacleId??`__obs${n}`,r=this.connMap.getNetConnectedToId(i);if(!r)continue;let s=this.connMap.getIdsConnectedToNet(r).find((a)=>t.has(a));s&&(e[i]=s)}return e}getOutputSimplifiedPcbTraces(){if(!this.solved||!this.highDensityRouteSolver&&!this.simpleHighDensityRouteSolver&&!this.highDensitySolver)throw Error("Cannot get output before solving is complete");let e=[],t=this._getOutputHdRoutes();for(let n of this.netToPointPairsSolver?.newConnections??[]){let o=n.__netConnectionName??this.srj.connections.find((r)=>r.name===n.name)?.__netConnectionName,i=t.filter((r)=>r.connectionName===n.name);for(let r=0;r<i.length;r++){let s=i[r],a={type:"pcb_trace",pcb_trace_id:`${n.name}_${r}`,connection_name:o??n.__rootConnectionNames?.[0]??n.name,route:Ex(s,this.srj.layerCount)};e.push(a)}}return e}getOutputSimpleRouteJson(){return{...this.srj,traces:this.getOutputSimplifiedPcbTraces()}}},Jko=class extends Oi{getSolverName(){return"MultipleHighDensityRouteStitchSolver2"}unsolvedRoutes;mergedHdRoutes=[];colorMap={};defaultTraceThickness;defaultViaDiameter;constructor(e){super(),this.colorMap=e.colorMap??{};let t=e.hdRoutes[0];this.defaultTraceThickness=t?.traceThickness??0.15,this.defaultViaDiameter=t?.viaDiameter??e.defaultViaDiameter??0.3;let n=new Map;for(let i of e.connectionPathResults)n.set(i.connection.name,i);let o=new Map;for(let i of e.hdRoutes){let r=o.get(i.connectionName);r?r.push(i):o.set(i.connectionName,[i])}this.unsolvedRoutes=[];for(let[i,r]of o.entries()){let s=e.connections.find((u)=>u.name===i);if(!s)continue;let a=n.get(i),c=[];a?.path&&(c=a.path.map((u)=>u.currentNodeId));let l={...s.pointsToConnect[0],z:Wi(k_(s.pointsToConnect[0]),e.layerCount)},d={...s.pointsToConnect[1],z:Wi(k_(s.pointsToConnect[1]),e.layerCount)};this.unsolvedRoutes.push({connectionName:i,hdRoutes:r,nodeOrder:c,start:l,end:d})}this.MAX_ITERATIONS=1e5}_step(){let e=this.unsolvedRoutes.pop();if(!e)return void(this.solved=!0);let t=this.stitchOrderedRoutes(e);this.mergedHdRoutes.push(t)}stitchOrderedRoutes(e){let{connectionName:t,hdRoutes:n,nodeOrder:o,start:i,end:r}=e;if(n.length===0)return{connectionName:t,traceThickness:this.defaultTraceThickness,viaDiameter:this.defaultViaDiameter,route:[i,r],vias:[],jumpers:[]};let s;s=o.length>0?this.orderRoutesByNodePath(n,o,i,t):this.orderRoutesByProximity(n,i);let a=[],c=[],l=[];a.push({x:i.x,y:i.y,z:i.z});for(let u=0;u<s.length;u++){let h=s[u],A=a[a.length-1],m=h.route[0],p=h.route[h.route.length-1],g=bn(A,m),_=bn(A,p),f=Math.min(g,_);if(u>0&&f>1)continue;let y;y=g<=_?[...h.route]:[...h.route].reverse();let x=0.001;y.length>0&&bn(A,y[0])<x&&(y=y.slice(1)),a.push(...y),c.push(...h.vias),h.jumpers&&l.push(...h.jumpers)}let d=bn(a[a.length-1],r);return d>0.001&&d<1&&a.push({x:r.x,y:r.y,z:r.z}),{connectionName:t,rootConnectionName:n[0]?.rootConnectionName,traceThickness:n[0]?.traceThickness??this.defaultTraceThickness,viaDiameter:n[0]?.viaDiameter??this.defaultViaDiameter,route:a,vias:c,jumpers:l}}orderRoutesByNodePath(e,t,n,o){if(e.length===0)return[];let i=new Set(e),r=null,s=1/0;for(let g of i){let _=g.route[0],f=g.route[g.route.length-1],y=Math.min(bn(n,_),bn(n,f));y<s&&(s=y,r=g)}if(!r)return[];i.delete(r);let a=r.route[0],c=r.route[r.route.length-1],l,d;bn(n,a)<=bn(n,c)?(l=a,d=c):(l=c,d=a);let u=(g,_)=>{let f=0;for(let y of i){if(y===_)continue;let x=y.route[0],C=y.route[y.route.length-1];(bn(g,x)<10||bn(g,C)<10)&&f++}return f},h=[r],A=d;for(;i.size>0;){let g=null,_=1/0,f=-1;for(let y of i){let x=y.route[0],C=y.route[y.route.length-1],I=bn(A,x),b=bn(A,C),P=Math.min(I,b);if(P>=10)continue;let E=u(I<=b?C:x,y),B=E===0,w=f===0,T=P-_,Q=!1;Q=g===null||(!!(!B&&w&&T<5)||!(B&&!w&&T>-5)&&P<_),Q&&(_=P,g=y,f=E)}if(!g)break;{h.push(g),i.delete(g);let y=g.route[0],x=g.route[g.route.length-1];A=bn(A,y)<=bn(A,x)?x:y}}let m=[];for(A=l;i.size>0;){let g=null,_=1/0,f=-1,y=bn(A,n);for(let x of i){let C=x.route[0],I=x.route[x.route.length-1],b=bn(A,C),P=bn(A,I),E=Math.min(b,P);if(E>=10)continue;let B=b<=P?I:C;if(bn(B,n)>y+2)continue;let w=u(B,x),T=w===0,Q=f===0,N=E-_,F=!1;F=g===null||(!!(!T&&Q&&N<5)||!(T&&!Q&&N>-5)&&E<_),F&&(_=E,g=x,f=w)}if(!g)break;{m.unshift(g),i.delete(g);let x=g.route[0],C=g.route[g.route.length-1];A=bn(A,x)<=bn(A,C)?C:x}}let p=[...m,...h];if(i.size>0){let g=[...i].map((_)=>{let f=_.route[0],y=_.route[_.route.length-1];return`start=(${f.x.toFixed(2)},${f.y.toFixed(2)}) end=(${y.x.toFixed(2)},${y.y.toFixed(2)})`});console.warn(`[StitchSolver] Skipped ${i.size} routes for connection ${e[0]?.connectionName??"?"}, skipped routes: ${g.join("; ")}`)}return p}orderRoutesByProximity(e,t){let n=new Set(e),o=[],i=t;for(;n.size>0;){let r=null,s=1/0,a=!1;for(let c of n){let l=c.route[0],d=c.route[c.route.length-1],u=bn(i,l),h=bn(i,d);u<s&&(s=u,r=c,a=!1),h<s&&(s=h,r=c,a=!0)}if(!r)break;{o.push(r),n.delete(r);let c=r.route[0],l=r.route[r.route.length-1];i=a?c:l}}return o}visualize(){let e={points:[],lines:[],circles:[],rects:[],title:"Multiple High Density Route Stitch Solver 2"};for(let[t,n]of this.mergedHdRoutes.entries()){let o=this.colorMap[n.connectionName]??`hsl(120, 100%, ${40+10*t%40}%)`;for(let i=0;i<n.route.length-1;i++){let r=n.route[i],s=n.route[i+1],a=r.z!==0?Cr(o,0.5):o;e.lines?.push({points:[{x:r.x,y:r.y},{x:s.x,y:s.y}],strokeColor:a,strokeWidth:n.traceThickness})}for(let i of n.route){let r=i.z!==0?Cr(o,0.5):o;e.points?.push({x:i.x,y:i.y,color:r})}for(let i of n.vias)e.circles?.push({center:{x:i.x,y:i.y},radius:n.viaDiameter/2,fill:o});if(n.jumpers&&n.jumpers.length>0){let i=xS(n.jumpers,{color:o,label:n.connectionName});e.rects.push(...i.rects??[]),e.lines.push(...i.lines??[])}}for(let t of this.unsolvedRoutes){let n=this.colorMap[t.connectionName]??"gray";e.points?.push({x:t.start.x,y:t.start.y,color:n,label:`${t.connectionName} Start`},{x:t.end.x,y:t.end.y,color:n,label:`${t.connectionName} End`});for(let o=0;o<t.hdRoutes.length;o++){let i=t.hdRoutes[o];if(i.route.length>1&&e.lines?.push({points:i.route.map((r)=>({x:r.x,y:r.y})),strokeColor:Cr(n,0.5),strokeDash:"10 5",label:`segment ${o}`}),i.jumpers&&i.jumpers.length>0){let r=xS(i.jumpers,{color:n,label:i.connectionName});e.rects.push(...r.rects??[]),e.lines.push(...r.lines??[])}}}return e}},{create:$ko,defineProperty:g3t,getOwnPropertyDescriptor:Zko,getOwnPropertyNames:ROt,getPrototypeOf:eLo}=Object,tLo=Object.prototype.hasOwnProperty,CL=(e,t)=>function(){return t||(0,e[ROt(e)[0]])((t={exports:{}}).exports,t),t.exports},f3t=(e,t,n)=>(n=e!=null?$ko(eLo(e)):{},((o,i,r,s)=>{if(i&&typeof i=="object"||typeof i=="function")for(let a of ROt(i))tLo.call(o,a)||a===r||g3t(o,a,{get:()=>i[a],enumerable:!(s=Zko(i,a))||s.enumerable});return o})(!t&&e&&e.__esModule?n:g3t(n,"default",{value:e,enumerable:!0}),e)),nLo=CL({"node_modules/is-buffer/index.js"(e,t){function n(o){return!!o.constructor&&typeof o.constructor.isBuffer=="function"&&o.constructor.isBuffer(o)}t.exports=function(o){return o!=null&&(n(o)||function(i){return typeof i.readFloatLE=="function"&&typeof i.slice=="function"&&n(i.slice(0,0))}(o)||!!o._isBuffer)}}}),oLo=CL({"node_modules/kind-of/index.js"(e,t){var n=nLo(),o=Object.prototype.toString;t.exports=function(i){if(i===void 0)return"undefined";if(i===null)return"null";if(i===!0||i===!1||i instanceof Boolean)return"boolean";if(typeof i=="string"||i instanceof String)return"string";if(typeof i=="number"||i instanceof Number)return"number";if(typeof i=="function"||i instanceof Function)return"function";if(Array.isArray!==void 0&&Array.isArray(i))return"array";if(i instanceof RegExp)return"regexp";if(i instanceof Date)return"date";var r=o.call(i);return r==="[object RegExp]"?"regexp":r==="[object Date]"?"date":r==="[object Arguments]"?"arguments":r==="[object Error]"?"error":n(i)?"buffer":r==="[object Set]"?"set":r==="[object WeakSet]"?"weakset":r==="[object Map]"?"map":r==="[object WeakMap]"?"weakmap":r==="[object Symbol]"?"symbol":r==="[object Int8Array]"?"int8array":r==="[object Uint8Array]"?"uint8array":r==="[object Uint8ClampedArray]"?"uint8clampedarray":r==="[object Int16Array]"?"int16array":r==="[object Uint16Array]"?"uint16array":r==="[object Int32Array]"?"int32array":r==="[object Uint32Array]"?"uint32array":r==="[object Float32Array]"?"float32array":r==="[object Float64Array]"?"float64array":"object"}}}),iLo=CL({"node_modules/rename-keys/index.js"(e,t){(function(){function n(o,i){if(typeof i!="function")return o;var r={};for(var s in o)Object.prototype.hasOwnProperty.call(o,s)&&(r[i(s,o[s])||s]=o[s]);return r}t!==void 0&&t.exports?t.exports=n:typeof define=="function"&&define.amd?define([],function(){return n}):window.rename=n})()}}),rLo=CL({"node_modules/deep-rename-keys/index.js"(e,t){var n=oLo(),o=iLo();t.exports=function i(r,s){var a=n(r);if(a!=="object"&&a!=="array")throw Error("expected an object");var c=[];for(var l in a==="object"&&(r=o(r,s),c={}),r)if(r.hasOwnProperty(l)){var d=r[l];n(d)==="object"||n(d)==="array"?c[l]=i(d,s):c[l]=d}return c}}}),QOt=CL({"node_modules/eventemitter3/index.js"(e,t){var n=Object.prototype.hasOwnProperty,o="~";function i(){}function r(a,c,l){this.fn=a,this.context=c,this.once=l||!1}function s(){this._events=new i,this._eventsCount=0}Object.create&&(i.prototype=Object.create(null),new i().__proto__||(o=!1)),s.prototype.eventNames=function(){var a,c,l=[];if(this._eventsCount===0)return l;for(c in a=this._events)n.call(a,c)&&l.push(o?c.slice(1):c);return Object.getOwnPropertySymbols?l.concat(Object.getOwnPropertySymbols(a)):l},s.prototype.listeners=function(a,c){var l=o?o+a:a,d=this._events[l];if(c)return!!d;if(!d)return[];if(d.fn)return[d.fn];for(var u=0,h=d.length,A=Array(h);u<h;u++)A[u]=d[u].fn;return A},s.prototype.emit=function(a,c,l,d,u,h){var A=o?o+a:a;if(!this._events[A])return!1;var m,p,g=this._events[A],_=arguments.length;if(g.fn){switch(g.once&&this.removeListener(a,g.fn,void 0,!0),_){case 1:return g.fn.call(g.context),!0;case 2:return g.fn.call(g.context,c),!0;case 3:return g.fn.call(g.context,c,l),!0;case 4:return g.fn.call(g.context,c,l,d),!0;case 5:return g.fn.call(g.context,c,l,d,u),!0;case 6:return g.fn.call(g.context,c,l,d,u,h),!0}for(p=1,m=Array(_-1);p<_;p++)m[p-1]=arguments[p];g.fn.apply(g.context,m)}else{var f,y=g.length;for(p=0;p<y;p++)switch(g[p].once&&this.removeListener(a,g[p].fn,void 0,!0),_){case 1:g[p].fn.call(g[p].context);break;case 2:g[p].fn.call(g[p].context,c);break;case 3:g[p].fn.call(g[p].context,c,l);break;case 4:g[p].fn.call(g[p].context,c,l,d);break;default:if(!m)for(f=1,m=Array(_-1);f<_;f++)m[f-1]=arguments[f];g[p].fn.apply(g[p].context,m)}}return!0},s.prototype.on=function(a,c,l){var d=new r(c,l||this),u=o?o+a:a;return this._events[u]?this._events[u].fn?this._events[u]=[this._events[u],d]:this._events[u].push(d):(this._events[u]=d,this._eventsCount++),this},s.prototype.once=function(a,c,l){var d=new r(c,l||this,!0),u=o?o+a:a;return this._events[u]?this._events[u].fn?this._events[u]=[this._events[u],d]:this._events[u].push(d):(this._events[u]=d,this._eventsCount++),this},s.prototype.removeListener=function(a,c,l,d){var u=o?o+a:a;if(!this._events[u])return this;if(!c)return--this._eventsCount===0?this._events=new i:delete this._events[u],this;var h=this._events[u];if(h.fn)h.fn!==c||d&&!h.once||l&&h.context!==l||(--this._eventsCount===0?this._events=new i:delete this._events[u]);else{for(var A=0,m=[],p=h.length;A<p;A++)(h[A].fn!==c||d&&!h[A].once||l&&h[A].context!==l)&&m.push(h[A]);m.length?this._events[u]=m.length===1?m[0]:m:--this._eventsCount===0?this._events=new i:delete this._events[u]}return this},s.prototype.removeAllListeners=function(a){var c;return a?(c=o?o+a:a,this._events[c]&&(--this._eventsCount===0?this._events=new i:delete this._events[c])):(this._events=new i,this._eventsCount=0),this},s.prototype.off=s.prototype.removeListener,s.prototype.addListener=s.prototype.on,s.prototype.setMaxListeners=function(){return this},s.prefixed=o,s.EventEmitter=s,t!==void 0&&(t.exports=s)}}),sLo=CL({"node_modules/xml-lexer/dist/lexer.js"(e,t){function n(l,d,u){return d in l?Object.defineProperty(l,d,{value:u,enumerable:!0,configurable:!0,writable:!0}):l[d]=u,l}var o=QOt(),i=function(){},r={data:"state-data",cdata:"state-cdata",tagBegin:"state-tag-begin",tagName:"state-tag-name",tagEnd:"state-tag-end",attributeNameStart:"state-attribute-name-start",attributeName:"state-attribute-name",attributeNameEnd:"state-attribute-name-end",attributeValueBegin:"state-attribute-value-begin",attributeValue:"state-attribute-value"},s={lt:"action-lt",gt:"action-gt",space:"action-space",equal:"action-equal",quote:"action-quote",slash:"action-slash",char:"action-char",error:"action-error"},a={text:"text",openTag:"open-tag",closeTag:"close-tag",attributeName:"attribute-name",attributeValue:"attribute-value"},c={" ":s.space,"\t":s.space,"\n":s.space,"\r":s.space,"<":s.lt,">":s.gt,'"':s.quote,"'":s.quote,"=":s.equal,"/":s.slash};t.exports={State:r,Action:s,Type:a,create:function(l){var d,u,h,A,m,p,g,_,f,y;l=Object.assign({debug:!1},l);var x=new o,C=r.data,I="",b="",P="",E="",B="",w="",T=function(N,F){if(b[0]!=="?"&&b[0]!=="!"){var H={type:N,value:F};l.debug&&console.log("emit:",H),x.emit("data",H)}};x.stateMachine=(n(y={},r.data,(n(d={},s.lt,function(){I.trim()&&T(a.text,I),b="",B=!1,C=r.tagBegin}),n(d,s.char,function(N){I+=N}),d)),n(y,r.cdata,n({},s.char,function(N){(I+=N).substr(-3)==="]]>"&&(T(a.text,I.slice(0,-3)),I="",C=r.data)})),n(y,r.tagBegin,(n(u={},s.space,i),n(u,s.char,function(N){b=N,C=r.tagName}),n(u,s.slash,function(){b="",B=!0}),u)),n(y,r.tagName,(n(h={},s.space,function(){B?C=r.tagEnd:(C=r.attributeNameStart,T(a.openTag,b))}),n(h,s.gt,function(){T(B?a.closeTag:a.openTag,b),I="",C=r.data}),n(h,s.slash,function(){C=r.tagEnd,T(a.openTag,b)}),n(h,s.char,function(N){(b+=N)==="![CDATA["&&(C=r.cdata,I="",b="")}),h)),n(y,r.tagEnd,(n(A={},s.gt,function(){T(a.closeTag,b),I="",C=r.data}),n(A,s.char,i),A)),n(y,r.attributeNameStart,(n(m={},s.char,function(N){P=N,C=r.attributeName}),n(m,s.gt,function(){I="",C=r.data}),n(m,s.space,i),n(m,s.slash,function(){B=!0,C=r.tagEnd}),m)),n(y,r.attributeName,(n(p={},s.space,function(){C=r.attributeNameEnd}),n(p,s.equal,function(){T(a.attributeName,P),C=r.attributeValueBegin}),n(p,s.gt,function(){E="",T(a.attributeName,P),T(a.attributeValue,E),I="",C=r.data}),n(p,s.slash,function(){B=!0,E="",T(a.attributeName,P),T(a.attributeValue,E),C=r.tagEnd}),n(p,s.char,function(N){P+=N}),p)),n(y,r.attributeNameEnd,(n(g={},s.space,i),n(g,s.equal,function(){T(a.attributeName,P),C=r.attributeValueBegin}),n(g,s.gt,function(){E="",T(a.attributeName,P),T(a.attributeValue,E),I="",C=r.data}),n(g,s.char,function(N){E="",T(a.attributeName,P),T(a.attributeValue,E),P=N,C=r.attributeName}),g)),n(y,r.attributeValueBegin,(n(_={},s.space,i),n(_,s.quote,function(N){w=N,E="",C=r.attributeValue}),n(_,s.gt,function(){T(a.attributeValue,E=""),I="",C=r.data}),n(_,s.char,function(N){w="",E=N,C=r.attributeValue}),_)),n(y,r.attributeValue,(n(f={},s.space,function(N){w?E+=N:(T(a.attributeValue,E),C=r.attributeNameStart)}),n(f,s.quote,function(N){w===N?(T(a.attributeValue,E),C=r.attributeNameStart):E+=N}),n(f,s.gt,function(N){w?E+=N:(T(a.attributeValue,E),I="",C=r.data)}),n(f,s.slash,function(N){w?E+=N:(T(a.attributeValue,E),B=!0,C=r.tagEnd)}),n(f,s.char,function(N){E+=N}),f)),y);var Q=function(N){l.debug&&console.log(C,N);var F=x.stateMachine[C],H=F[function(z){return c[z]||s.char}(N)]||F[s.error]||F[s.char];H(N)};return x.write=function(N){for(var F=N.length,H=0;H<F;H++)Q(N[H])},x}}}}),aLo=CL({"node_modules/xml-reader/dist/reader.js"(e,t){var n=QOt(),o=sLo(),i=o.Type,r={element:"element",text:"text"},s=function(c){return Object.assign({name:"",type:r.element,value:"",parent:null,attributes:{},children:[]},c)},a=function(c){c=Object.assign({stream:!1,parentNodes:!0,doneEvent:"done",tagPrefix:"tag:",emitTopLevelOnly:!1,debug:!1},c);var l=void 0,d=void 0,u=void 0,h=void 0,A=new n,m=function(p){switch(p.type){case i.openTag:if(u===null)(u=d).name=p.value;else{var g=s({name:p.value,parent:u});u.children.push(g),u=g}break;case i.closeTag:var _=u.parent;if(c.parentNodes||(u.parent=null),u.name!==p.value)break;c.stream&&_===d&&(d.children=[],u.parent=null),c.emitTopLevelOnly&&_!==d||(A.emit(c.tagPrefix+u.name,u),A.emit("tag",u.name,u)),u===d&&(l.removeAllListeners("data"),A.emit(c.doneEvent,u),d=null),u=_;break;case i.text:u&&u.children.push(s({type:r.text,value:p.value,parent:c.parentNodes?u:null}));break;case i.attributeName:h=p.value,u.attributes[h]="";break;case i.attributeValue:u.attributes[h]=p.value}};return A.reset=function(){(l=o.create({debug:c.debug})).on("data",m),d=s(),u=null,h="",A.parse=l.write},A.reset(),A};t.exports={parseSync:function(c,l){l=Object.assign({},l,{stream:!1,tagPrefix:":"});var d=a(l),u=void 0;return d.on("done",function(h){u=h}),d.parse(c),u},create:a,NodeType:r}}}),{cos:jzr,sin:qzr,PI:Jzr}=Math,{tan:$zr}=Math,cLo=(f3t(rLo()),f3t(aLo()),class{MAX_ITERATIONS=1e5;solved=!1;failed=!1;iterations=0;progress=0;error=null;activeSubSolver;failedSubSolvers;timeToSolve;stats={};_setupDone=!1;setup(){this._setupDone||(this._setup(),this._setupDone=!0)}_setup(){}step(){if(this._setupDone||this.setup(),!this.solved&&!this.failed){this.iterations++;try{this._step()}catch(e){throw this.error=`${this.constructor.name} error: ${e}`,this.failed=!0,e}!this.solved&&this.iterations>=this.MAX_ITERATIONS&&this.tryFinalAcceptance(),!this.solved&&this.iterations>=this.MAX_ITERATIONS&&(this.error=`${this.constructor.name} ran out of iterations`,this.failed=!0),"computeProgress"in this&&(this.progress=this.computeProgress())}}_step(){}getConstructorParams(){throw Error("getConstructorParams not implemented")}getOutput(){return null}solve(){let e=Date.now();for(;!this.solved&&!this.failed;)this.step();let t=Date.now();this.timeToSolve=t-e}visualize(){return{lines:[],points:[],rects:[],circles:[]}}tryFinalAcceptance(){}preview(){return{lines:[],points:[],rects:[],circles:[]}}}),yNe=(e)=>e?`hsl(${((t)=>{let n=0;for(let o=0;o<t.length;o++)n=779*t.charCodeAt(o)+((n<<5)-n);return n})(e)%360}, 100%, 50%)`:"rgba(0, 0, 0, 0.5)",lLo=(e)=>[[{x:e.minX,y:e.minY},{x:e.maxX,y:e.minY}],[{x:e.maxX,y:e.minY},{x:e.maxX,y:e.maxY}],[{x:e.maxX,y:e.maxY},{x:e.minX,y:e.maxY}],[{x:e.minX,y:e.maxY},{x:e.minX,y:e.minY}]];function y3t(e,t){let{minX:n,maxX:o,minY:i,maxY:r}=t,s=o-n,a=r-i;return Math.abs(e.y-r)<0.000001?e.x-n:Math.abs(e.x-o)<0.000001?s+(r-e.y):Math.abs(e.y-i)<0.000001?s+a+(o-e.x):Math.abs(e.x-n)<0.000001?2*s+a+(e.y-i):0}function x3t(e,t){let{minX:n,maxX:o,minY:i,maxY:r}=t,a=Math.abs(e.y-r)<0.000001,c=Math.abs(e.y-i)<0.000001,l=Math.abs(e.x-o)<0.000001,d=Math.abs(e.x-n)<0.000001;if(a&&l)return{x:-Math.SQRT1_2,y:-Math.SQRT1_2};if(a&&d)return{x:Math.SQRT1_2,y:-Math.SQRT1_2};if(c&&l)return{x:-Math.SQRT1_2,y:Math.SQRT1_2};if(c&&d)return{x:Math.SQRT1_2,y:Math.SQRT1_2};if(a)return{x:0,y:-1};if(c)return{x:0,y:1};if(l)return{x:-1,y:0};if(d)return{x:1,y:0};let u=(i+r)/2,h=(n+o)/2-e.x,A=u-e.y,m=Math.hypot(h,A);return m>0?{x:h/m,y:A/m}:{x:0,y:-1}}function NAe(e,t,n,o,i,r,s,a,c,l){for(let d=0;d<=l;d++){let u=d/l,h=1-u,A=h*h,m=A*h,p=u*u,g=p*u,_=2*d;c[_]=m*e+3*A*u*n+3*h*p*i+g*s,c[_+1]=m*t+3*A*u*o+3*h*p*r+g*a}}function dLo(e,t,n,o,i){let r=[];for(let s=0;s<=i;s++){let a=s/i,c=1-a,l=c*c,d=l*c,u=a*a,h=u*a;r.push({x:d*e.x+3*l*a*t.x+3*c*u*n.x+h*o.x,y:d*e.y+3*l*a*t.y+3*c*u*n.y+h*o.y})}return r}function RAe(e,t,n,o,i,r){let s=i-n,a=r-o,c=s*s+a*a;if(c===0){let h=e-n,A=t-o;return h*h+A*A}let l=Math.max(0,Math.min(1,((e-n)*s+(t-o)*a)/c)),d=e-(n+l*s),u=t-(o+l*a);return d*d+u*u}function QAe(e,t,n,o,i,r,s,a){let c=(s-i)*(t-r)-(a-r)*(e-i),l=(s-i)*(o-r)-(a-r)*(n-i),d=(n-e)*(r-t)-(o-t)*(i-e),u=(n-e)*(a-t)-(o-t)*(s-e);return(c>0&&l<0||c<0&&l>0)&&(d>0&&u<0||d<0&&u>0)?0:Math.min(RAe(e,t,i,r,s,a),RAe(n,o,i,r,s,a),RAe(i,r,e,t,n,o),RAe(s,a,e,t,n,o))}function uLo(e,t,n,o,i,r,s,a){let c=(s-i)*(t-r)-(a-r)*(e-i),l=(s-i)*(o-r)-(a-r)*(n-i),d=(n-e)*(r-t)-(o-t)*(i-e),u=(n-e)*(a-t)-(o-t)*(s-e);return(c>0&&l<0||c<0&&l>0)&&(d>0&&u<0||d<0&&u>0)}function hLo(e,t,n,o,i){let r=(h)=>(h%i+i)%i,s=r(e),a=r(t),c=r(n),l=r(o),[d,u]=s<a?[s,a]:[a,s];return c>d&&c<u&&l>d&&l<u}function C3t(e,t){let n=1/0,o=-1/0,i=1/0,r=-1/0;for(let s=0;s<t;s++){let a=e[2*s],c=e[2*s+1];a<n&&(n=a),a>o&&(o=a),c<i&&(i=c),c>r&&(r=c)}return{minX:n,maxX:o,minY:i,maxY:r}}var kOt=class extends cLo{constructor(e){super(),this.problem=e;for(let t of this.problem.obstacles)t.outerSegments=lLo(t);this.precomputeObstacles()}outputTraces=[];traces=[];optimizationStep=0;maxOptimizationSteps=100;sampledPoints=[];traceBounds=[];obstacleSegments=new Float64Array(0);obstacleNetworkIds=[];numObstacleSegments=0;collisionPairs=[];lastCost=1/0;stagnantSteps=0;effectiveTraceToTraceSpacing=0;getConstructorParams(){return this.problem}precomputeObstacles(){let{obstacles:e}=this.problem,t=0;for(let o of e)o.outerSegments&&(t+=o.outerSegments.length);this.obstacleSegments=new Float64Array(4*t),this.obstacleNetworkIds=[],this.numObstacleSegments=t;let n=0;for(let o of e)if(o.outerSegments)for(let i of o.outerSegments)this.obstacleSegments[n++]=i[0].x,this.obstacleSegments[n++]=i[0].y,this.obstacleSegments[n++]=i[1].x,this.obstacleSegments[n++]=i[1].y,this.obstacleNetworkIds.push(o.networkId)}initializeTraces(){let{bounds:e,waypointPairs:t}=this.problem,{minX:n,maxX:o,minY:i,maxY:r}=e,s=o-n,a=r-i,c=2*s+2*a,l=function(p){return{x:(p.minX+p.maxX)/2,y:(p.minY+p.maxY)/2}}(e),d=t.map((p,g)=>({pair:p,t1:y3t(p.start,e),t2:y3t(p.end,e),idx:g})),u=d.map(()=>[]),h=d.map(()=>[]);for(let p of d)for(let g of d)if(p.idx!==g.idx){if(p.pair.networkId&&g.pair.networkId&&p.pair.networkId===g.pair.networkId)continue;hLo(g.t1,g.t2,p.t1,p.t2,c)&&(u[p.idx].push(g.idx),h[g.idx].push(p.idx))}let A=u.map((p)=>p.length),m=Math.max(...A,1);this.traces=d.map(({pair:p,t1:g,t2:_,idx:f})=>{let y=x3t(p.start,e),x=x3t(p.end,e),C=Math.hypot(p.end.x-p.start.x,p.end.y-p.start.y),I=A[f]/m,b=(p.start.x+p.end.x)/2,P=(p.start.y+p.end.y)/2,E=C*(0.25+0.15*(1-Math.hypot(b-l.x,P-l.y)/Math.hypot(s/2,a/2)))*(1-0.3*I),B=0.05*Math.min(s,a),w=Math.max(B,E),T=Math.max(B,E);return{waypointPair:p,ctrl1:{x:p.start.x+w*y.x,y:p.start.y+w*y.y},ctrl2:{x:p.end.x+T*x.x,y:p.end.y+T*x.y},networkId:p.networkId,t1:g,t2:_,perpDir1:y,perpDir2:x,d1:w,d2:T,containedBy:u[f],contains:h[f]}}),this.sampledPoints=this.traces.map(()=>new Float64Array(12)),this.traceBounds=this.traces.map(()=>({minX:0,maxX:0,minY:0,maxY:0})),this.updateSampledTraces(),this.updateCollisionPairs()}updateSampledTraces(){for(let e=0;e<this.traces.length;e++){let t=this.traces[e];NAe(t.waypointPair.start.x,t.waypointPair.start.y,t.ctrl1.x,t.ctrl1.y,t.ctrl2.x,t.ctrl2.y,t.waypointPair.end.x,t.waypointPair.end.y,this.sampledPoints[e],5),this.traceBounds[e]=C3t(this.sampledPoints[e],6)}}updateSingleTraceSample(e){let t=this.traces[e];NAe(t.waypointPair.start.x,t.waypointPair.start.y,t.ctrl1.x,t.ctrl1.y,t.ctrl2.x,t.ctrl2.y,t.waypointPair.end.x,t.waypointPair.end.y,this.sampledPoints[e],5),this.traceBounds[e]=C3t(this.sampledPoints[e],6)}updateControlPointsFromDistances(e){let t=this.traces[e],{minX:n,maxX:o,minY:i,maxY:r}=this.problem.bounds,a=t.waypointPair.start.x+t.d1*t.perpDir1.x,c=t.waypointPair.start.y+t.d1*t.perpDir1.y,l=t.waypointPair.end.x+t.d2*t.perpDir2.x,d=t.waypointPair.end.y+t.d2*t.perpDir2.y,u=t.waypointPair.start;Math.abs(u.x-n)<0.000001&&(a=Math.max(a,n)),Math.abs(u.x-o)<0.000001&&(a=Math.min(a,o)),Math.abs(u.y-i)<0.000001&&(c=Math.max(c,i)),Math.abs(u.y-r)<0.000001&&(c=Math.min(c,r));let h=t.waypointPair.end;Math.abs(h.x-n)<0.000001&&(l=Math.max(l,n)),Math.abs(h.x-o)<0.000001&&(l=Math.min(l,o)),Math.abs(h.y-i)<0.000001&&(d=Math.max(d,i)),Math.abs(h.y-r)<0.000001&&(d=Math.min(d,r)),a=Math.max(n,Math.min(o,a)),c=Math.max(i,Math.min(r,c)),l=Math.max(n,Math.min(o,l)),d=Math.max(i,Math.min(r,d)),t.ctrl1.x=a,t.ctrl1.y=c,t.ctrl2.x=l,t.ctrl2.y=d}updateCollisionPairs(){let e=this.effectiveTraceToTraceSpacing;this.collisionPairs=[];for(let t=0;t<this.traces.length;t++)for(let n=t+1;n<this.traces.length;n++){let o=this.traces[t],i=this.traces[n];if(o.networkId&&i.networkId&&o.networkId===i.networkId)continue;let r=this.traceBounds[t],s=this.traceBounds[n];r.maxX+e>=s.minX&&s.maxX+e>=r.minX&&r.maxY+e>=s.minY&&s.maxY+e>=r.minY&&this.collisionPairs.push([t,n])}}computeTotalCost(){let{preferredObstacleToTraceSpacing:e}=this.problem,t=this.effectiveTraceToTraceSpacing,n=t**2,o=e**2,i=0;for(let[r,s]of this.collisionPairs){let a=this.sampledPoints[r],c=this.sampledPoints[s];for(let l=0;l<5;l++){let d=a[2*l],u=a[2*l+1],h=a[2*(l+1)],A=a[2*(l+1)+1];for(let m=0;m<5;m++){let p=QAe(d,u,h,A,c[2*m],c[2*m+1],c[2*(m+1)],c[2*(m+1)+1]);if(p<n)i+=(t-Math.sqrt(p))**2,p<0.000000000000000001&&(i+=20*n)}}}for(let r=0;r<this.traces.length;r++){let s=this.traces[r],a=this.sampledPoints[r],c=this.traceBounds[r];for(let l=0;l<this.numObstacleSegments;l++){if(s.networkId&&this.obstacleNetworkIds[l]&&s.networkId===this.obstacleNetworkIds[l])continue;let d=4*l,u=this.obstacleSegments[d],h=this.obstacleSegments[d+1],A=this.obstacleSegments[d+2],m=this.obstacleSegments[d+3],p=Math.min(u,A),g=Math.max(u,A),_=Math.min(h,m),f=Math.max(h,m);if(!(c.maxX+e<p||g+e<c.minX||c.maxY+e<_||f+e<c.minY))for(let y=0;y<5;y++){let x=QAe(a[2*y],a[2*y+1],a[2*(y+1)],a[2*(y+1)+1],u,h,A,m);if(x<o)i+=(e-Math.sqrt(x))**2,x<0.000000000000000001&&(i+=20*o)}}}return i}computeCostForTrace(e){let{preferredObstacleToTraceSpacing:t}=this.problem,n=this.effectiveTraceToTraceSpacing,o=n**2,i=t**2,r=this.traces[e],s=this.sampledPoints[e],a=this.traceBounds[e],c=0;for(let l=0;l<this.traces.length;l++){if(l===e)continue;let d=this.traces[l];if(r.networkId&&d.networkId&&r.networkId===d.networkId)continue;let u=this.traceBounds[l];if(a.maxX+n<u.minX||u.maxX+n<a.minX||a.maxY+n<u.minY||u.maxY+n<a.minY)continue;let h=this.sampledPoints[l];for(let A=0;A<5;A++){let m=s[2*A],p=s[2*A+1],g=s[2*(A+1)],_=s[2*(A+1)+1];for(let f=0;f<5;f++){let y=QAe(m,p,g,_,h[2*f],h[2*f+1],h[2*(f+1)],h[2*(f+1)+1]);if(y<o)c+=(n-Math.sqrt(y))**2,y<0.000000000000000001&&(c+=20*o)}}}for(let l=0;l<this.numObstacleSegments;l++){if(r.networkId&&this.obstacleNetworkIds[l]&&r.networkId===this.obstacleNetworkIds[l])continue;let d=4*l,u=this.obstacleSegments[d],h=this.obstacleSegments[d+1],A=this.obstacleSegments[d+2],m=this.obstacleSegments[d+3],p=Math.min(u,A),g=Math.max(u,A),_=Math.min(h,m),f=Math.max(h,m);if(!(a.maxX+t<p||g+t<a.minX||a.maxY+t<_||f+t<a.minY))for(let y=0;y<5;y++){let x=QAe(s[2*y],s[2*y+1],s[2*(y+1)],s[2*(y+1)+1],u,h,A,m);if(x<i)c+=(t-Math.sqrt(x))**2,x<0.000000000000000001&&(c+=20*i)}}return c}tracesIntersect(e,t){let n=this.traces[e],o=this.traces[t],r=new Float64Array(32),s=new Float64Array(32);NAe(n.waypointPair.start.x,n.waypointPair.start.y,n.ctrl1.x,n.ctrl1.y,n.ctrl2.x,n.ctrl2.y,n.waypointPair.end.x,n.waypointPair.end.y,r,15),NAe(o.waypointPair.start.x,o.waypointPair.start.y,o.ctrl1.x,o.ctrl1.y,o.ctrl2.x,o.ctrl2.y,o.waypointPair.end.x,o.waypointPair.end.y,s,15);for(let a=0;a<15;a++){let c=r[2*a],l=r[2*a+1],d=r[2*(a+1)],u=r[2*(a+1)+1];for(let h=0;h<15;h++)if(uLo(c,l,d,u,s[2*h],s[2*h+1],s[2*(h+1)],s[2*(h+1)+1]))return!0}return!1}findIntersectingPairs(){let e=[];for(let t=0;t<this.traces.length;t++)for(let n=t+1;n<this.traces.length;n++){let o=this.traces[t],i=this.traces[n];if(o.networkId&&i.networkId&&o.networkId===i.networkId)continue;let r=this.traceBounds[t],s=this.traceBounds[n];r.maxX<s.minX||s.maxX<r.minX||r.maxY<s.minY||s.maxY<r.minY||this.tracesIntersect(t,n)&&e.push([t,n])}return e}resolveIntersections(){let{bounds:e,preferredTraceToTraceSpacing:t}=this.problem,{minX:n,maxX:o,minY:i,maxY:r}=e,s=Math.min(o-n,r-i),a=0.02*s,c=1.5*s,l=this.findIntersectingPairs();if(l.length===0)return 0;let d=0;for(let[u,h]of l){let A=this.traces[u],m=this.traces[h];if(!this.tracesIntersect(u,h))continue;let p,g;if(A.containedBy.includes(h))p=h,g=u;else if(m.containedBy.includes(u))p=u,g=h;else(A.d1+A.d2)/2<(m.d1+m.d2)/2?(p=u,g=h):(p=h,g=u);let _=this.traces[p],f=this.traces[g],{d1:y,d2:x}=_,{d1:C,d2:I}=f,b=2*t,P=[{innerMult:1,outerMult:0},{innerMult:0,outerMult:1},{innerMult:0.5,outerMult:0.5},{innerMult:2,outerMult:0},{innerMult:1,outerMult:1},{innerMult:3,outerMult:0},{innerMult:2,outerMult:1},{innerMult:4,outerMult:0}],E=this.computeTotalCost(),B=null;for(let w of P)if(_.d1=y,_.d2=x,f.d1=C,f.d2=I,f.d1=Math.min(c,C+b*w.innerMult),f.d2=Math.min(c,I+b*w.innerMult),_.d1=Math.max(a,y-b*w.outerMult),_.d2=Math.max(a,x-b*w.outerMult),this.updateControlPointsFromDistances(g),this.updateControlPointsFromDistances(p),this.updateSingleTraceSample(g),this.updateSingleTraceSample(p),!this.tracesIntersect(p,g)){let T=this.computeTotalCost();(B===null||T<E)&&(E=T,B=w)}B?(f.d1=Math.min(c,C+b*B.innerMult),f.d2=Math.min(c,I+b*B.innerMult),_.d1=Math.max(a,y-b*B.outerMult),_.d2=Math.max(a,x-b*B.outerMult),this.updateControlPointsFromDistances(g),this.updateControlPointsFromDistances(p),this.updateSingleTraceSample(g),this.updateSingleTraceSample(p),d++):(_.d1=y,_.d2=x,f.d1=C,f.d2=I,this.updateControlPointsFromDistances(p),this.updateControlPointsFromDistances(g),this.updateSingleTraceSample(p),this.updateSingleTraceSample(g))}return d}optimizeStep(){let{bounds:e}=this.problem,{minX:t,maxX:n,minY:o,maxY:i}=e,r=Math.min(n-t,i-o),s=this.effectiveTraceToTraceSpacing,a=4*(1-this.optimizationStep/this.maxOptimizationSteps)+0.5,c=0.02*r,l=1.5*r,d=[];for(let u=0;u<this.traces.length;u++)d.push({idx:u,cost:this.computeCostForTrace(u)});d.sort((u,h)=>h.cost-u.cost);for(let{idx:u,cost:h}of d){if(h===0)continue;let A=this.traces[u],m=h>100?2:1,p=[a*m,1.5*a*m,0.5*a];for(let g of p){let _=h>100?[g,-g,2*g,2*-g,3*g,3*-g,2*s,2*-s]:[g,-g,2*g,2*-g],f=this.computeCostForTrace(u),{d1:y,d2:x,d1:C,d2:I}=A;for(let b of _){A.d1=Math.max(c,Math.min(l,C+b)),this.updateControlPointsFromDistances(u),this.updateSingleTraceSample(u);let P=this.computeCostForTrace(u);P<f&&(f=P,y=A.d1,x=I),A.d1=C,this.updateControlPointsFromDistances(u),A.d2=Math.max(c,Math.min(l,I+b)),this.updateControlPointsFromDistances(u),this.updateSingleTraceSample(u);let E=this.computeCostForTrace(u);E<f&&(f=E,y=C,x=A.d2),A.d2=I,this.updateControlPointsFromDistances(u),A.d1=Math.max(c,Math.min(l,C+b)),A.d2=Math.max(c,Math.min(l,I+b)),this.updateControlPointsFromDistances(u),this.updateSingleTraceSample(u);let B=this.computeCostForTrace(u);B<f&&(f=B,y=A.d1,x=A.d2),A.d1=C,A.d2=I,this.updateControlPointsFromDistances(u),A.d1=Math.max(c,Math.min(l,C+b)),A.d2=Math.max(c,Math.min(l,I-b)),this.updateControlPointsFromDistances(u),this.updateSingleTraceSample(u);let w=this.computeCostForTrace(u);w<f&&(f=w,y=A.d1,x=A.d2),A.d1=C,A.d2=I,this.updateControlPointsFromDistances(u)}if(A.d1=y,A.d2=x,this.updateControlPointsFromDistances(u),this.updateSingleTraceSample(u),f<0.9*h)break}}this.optimizationStep%10==0&&this.updateCollisionPairs()}buildOutputTraces(){this.outputTraces=this.traces.map((e)=>({waypointPair:e.waypointPair,points:dLo(e.waypointPair.start,e.ctrl1,e.ctrl2,e.waypointPair.end,20),networkId:e.networkId}))}_step(){if(this.traces.length===0&&(this.effectiveTraceToTraceSpacing=3*this.problem.preferredTraceToTraceSpacing,this.initializeTraces(),this.lastCost=this.computeTotalCost(),this.stagnantSteps=0),this.optimizationStep<this.maxOptimizationSteps){let t=3+-2*(this.optimizationStep/this.maxOptimizationSteps);if(this.effectiveTraceToTraceSpacing=this.problem.preferredTraceToTraceSpacing*t,this.optimizeStep(),this.optimizationStep++,this.optimizationStep%10==0)this.resolveIntersections()>0&&this.updateCollisionPairs();let n=this.computeTotalCost();if(n===0)this.optimizationStep=this.maxOptimizationSteps;else if(n>=0.99*this.lastCost){if(this.stagnantSteps++,this.stagnantSteps>10)this.resolveIntersections()>0?(this.updateCollisionPairs(),this.stagnantSteps=0):this.stagnantSteps>15&&(this.optimizationStep=this.maxOptimizationSteps)}else this.stagnantSteps=0;this.lastCost=n}this.optimizationStep>=this.maxOptimizationSteps&&(this.resolveIntersections(),this.buildOutputTraces(),this.solved=!0)}visualize(){return this.traces.length>0&&this.buildOutputTraces(),((e,t=[])=>{let n={arrows:[],circles:[],lines:[],rects:[],coordinateSystem:"cartesian",points:[],texts:[],title:"Curvy Trace Problem"};n.lines.push({points:[{x:e.bounds.minX,y:e.bounds.minY},{x:e.bounds.maxX,y:e.bounds.minY},{x:e.bounds.maxX,y:e.bounds.maxY},{x:e.bounds.minX,y:e.bounds.maxY},{x:e.bounds.minX,y:e.bounds.minY}],strokeColor:"rgba(0, 0, 0, 0.1)"});for(let o of e.waypointPairs)n.points.push({...o.start,label:`start ${o.networkId??""}`,color:yNe(o.networkId)}),n.points.push({...o.end,label:`end ${o.networkId??""}`,color:yNe(o.networkId)});for(let o of e.obstacles)n.rects.push({center:o.center,width:o.maxX-o.minX,height:o.maxY-o.minY,fill:"rgba(128, 128, 128, 0.3)",stroke:"rgba(128, 128, 128, 0.8)",label:`netId: ${o.networkId}`});for(let o of t)n.lines.push({points:o.points,strokeColor:yNe(o.networkId)});return n})(this.problem,this.outputTraces)}},I3t=class extends Oi{getSolverName(){return"CurvyIntraNodeSolver"}nodeWithPortPoints;colorMap;traceWidth;viaDiameter;adjacentObstacles;routes=[];curvyTraceSolver;phase="initializing";constructor(e){super(),this.nodeWithPortPoints=e.nodeWithPortPoints,this.colorMap=e.colorMap??{},this.traceWidth=e.traceWidth??0.15,this.viaDiameter=e.viaDiameter??0.3,this.adjacentObstacles=e.adjacentObstacles??[],this.MAX_ITERATIONS=1000}_step(){switch(this.phase){case"initializing":this._initializeCurvySolver();break;case"solving":this._stepCurvySolver();break;case"done":this.solved=!0}}_initializeCurvySolver(){let e=this.nodeWithPortPoints,t={minX:e.center.x-e.width/2,minY:e.center.y-e.height/2,maxX:e.center.x+e.width/2,maxY:e.center.y+e.height/2},n=new Map;for(let r of e.portPoints)n.has(r.connectionName)||n.set(r.connectionName,[]),n.get(r.connectionName).push(r);let o=[];for(let[r,s]of n){if(s.length<2)continue;let a=s[0],c=s[s.length-1];o.push({start:{x:a.x,y:a.y},end:{x:c.x,y:c.y},networkId:r})}if(o.length===0)return void(this.phase="done");let i={bounds:t,waypointPairs:o,obstacles:this.adjacentObstacles.map((r)=>({minX:r.minX,minY:r.minY,maxX:r.maxX,maxY:r.maxY,center:{x:(r.minX+r.maxX)/2,y:(r.minY+r.maxY)/2},networkId:r.networkId})),preferredTraceToTraceSpacing:2*this.traceWidth,preferredObstacleToTraceSpacing:2*this.traceWidth};this.curvyTraceSolver=new kOt(i),this.phase="solving"}_stepCurvySolver(){this.curvyTraceSolver?(this.activeSubSolver=this.curvyTraceSolver,this.curvyTraceSolver.step(),this.curvyTraceSolver.solved?(this._convertOutputTraces(),this.phase="done"):this.curvyTraceSolver.failed&&(this.error=this.curvyTraceSolver.error,this.failed=!0)):this.phase="done"}_convertOutputTraces(){if(!this.curvyTraceSolver)return;let e=this.nodeWithPortPoints,t=new Map;for(let n of e.portPoints){let o=n.connectionName;t.has(o)||t.set(o,{connectionName:n.connectionName,rootConnectionName:n.rootConnectionName,z:n.z})}for(let n of this.curvyTraceSolver.outputTraces){let o=n.networkId??"",i=t.get(o);if(!i)continue;let r={connectionName:i.connectionName,rootConnectionName:i.rootConnectionName,traceThickness:this.traceWidth,viaDiameter:this.viaDiameter,route:n.points.map((s)=>({x:s.x,y:s.y,z:i.z})),vias:[]};this.routes.push(r)}}getConstructorParams(){return{nodeWithPortPoints:this.nodeWithPortPoints,colorMap:this.colorMap,traceWidth:this.traceWidth,viaDiameter:this.viaDiameter,adjacentObstacles:this.adjacentObstacles}}visualize(){let e={lines:[],points:[],rects:[],circles:[]},t=this.nodeWithPortPoints;e.rects.push({center:t.center,width:t.width,height:t.height,fill:"rgba(0, 200, 0, 0.1)",stroke:"rgba(0, 200, 0, 0.5)",label:t.capacityMeshNodeId});for(let n of this.adjacentObstacles)e.rects.push({center:{x:(n.minX+n.maxX)/2,y:(n.minY+n.maxY)/2},width:n.maxX-n.minX,height:n.maxY-n.minY,fill:"rgba(255, 0, 0, 0.1)",stroke:"rgba(255, 0, 0, 0.3)",label:`obstacle: ${n.networkId??""}`});if(this.curvyTraceSolver){let n=this.curvyTraceSolver.visualize();n.lines&&e.lines.push(...n.lines),n.points&&e.points.push(...n.points),n.rects&&e.rects.push(...n.rects),n.circles&&e.circles.push(...n.circles)}for(let n of this.routes){let o=this.colorMap[n.connectionName]??"gray";e.lines.push({points:n.route.map((i)=>({x:i.x,y:i.y})),strokeColor:o,strokeWidth:this.traceWidth,label:n.connectionName})}for(let n of t.portPoints){let o=this.colorMap[n.connectionName]??"gray";e.points.push({x:n.x,y:n.y,color:o,label:n.connectionName})}return e}},{create:mLo,defineProperty:b3t,getOwnPropertyDescriptor:pLo,getOwnPropertyNames:LOt,getPrototypeOf:ALo}=Object,_Lo=Object.prototype.hasOwnProperty,Bx=(e,t)=>function(){return t||(0,e[LOt(e)[0]])((t={exports:{}}).exports,t),t.exports},Bfe=Bx({"node_modules/binary-search-bounds/search-bounds.js"(e,t){function n(c,l,d,u,h){for(var A=h+1;u<=h;){var m=u+h>>>1,p=c[m];(d!==void 0?d(p,l):p-l)>=0?(A=m,h=m-1):u=m+1}return A}function o(c,l,d,u,h){for(var A=h+1;u<=h;){var m=u+h>>>1,p=c[m];(d!==void 0?d(p,l):p-l)>0?(A=m,h=m-1):u=m+1}return A}function i(c,l,d,u,h){for(var A=u-1;u<=h;){var m=u+h>>>1,p=c[m];(d!==void 0?d(p,l):p-l)<0?(A=m,u=m+1):h=m-1}return A}function r(c,l,d,u,h){for(var A=u-1;u<=h;){var m=u+h>>>1,p=c[m];(d!==void 0?d(p,l):p-l)<=0?(A=m,u=m+1):h=m-1}return A}function s(c,l,d,u,h){for(;u<=h;){var A=u+h>>>1,m=c[A],p=d!==void 0?d(m,l):m-l;if(p===0)return A;p<=0?u=A+1:h=A-1}return-1}function a(c,l,d,u,h,A){return typeof d=="function"?A(c,l,d,u===void 0?0:0|u,h===void 0?c.length-1:0|h):A(c,l,void 0,d===void 0?0:0|d,u===void 0?c.length-1:0|u)}t.exports={ge:function(c,l,d,u,h){return a(c,l,d,u,h,n)},gt:function(c,l,d,u,h){return a(c,l,d,u,h,o)},lt:function(c,l,d,u,h){return a(c,l,d,u,h,i)},le:function(c,l,d,u,h){return a(c,l,d,u,h,r)},eq:function(c,l,d,u,h){return a(c,l,d,u,h,s)}}}}),xHe=Bx({"node_modules/two-product/two-product.js"(e,t){t.exports=function(o,i,r){var s=o*i,a=n*o,c=a-(a-o),l=o-c,d=n*i,u=d-(d-i),h=i-u,A=l*h-(s-c*u-l*u-c*h);if(r)return r[0]=A,r[1]=s,r;return[A,s]};var n=+(Math.pow(2,27)+1)}}),FOt=Bx({"node_modules/robust-sum/robust-sum.js"(e,t){t.exports=function(n,o){var i=0|n.length,r=0|o.length;if(i===1&&r===1)return function(P,E){var B=P+E,w=B-P,T=B-w,Q=E-w,N=P-T,F=N+Q;if(F)return[F,B];return[B]}(n[0],o[0]);var s,a,c=Array(i+r),l=0,d=0,u=0,h=Math.abs,A=n[d],m=h(A),p=o[u],g=h(p);m<g?(a=A,(d+=1)<i&&(m=h(A=n[d]))):(a=p,(u+=1)<r&&(g=h(p=o[u]))),d<i&&m<g||u>=r?(s=A,(d+=1)<i&&(m=h(A=n[d]))):(s=p,(u+=1)<r&&(g=h(p=o[u])));var _,f,y=s+a,x=y-s,C=a-x,I=C,b=y;for(;d<i&&u<r;)m<g?(s=A,(d+=1)<i&&(m=h(A=n[d]))):(s=p,(u+=1)<r&&(g=h(p=o[u]))),(C=(a=I)-(x=(y=s+a)-s))&&(c[l++]=C),I=b-((_=b+y)-(f=_-b))+(y-f),b=_;for(;d<i;)(C=(a=I)-(x=(y=(s=A)+a)-s))&&(c[l++]=C),I=b-((_=b+y)-(f=_-b))+(y-f),b=_,(d+=1)<i&&(A=n[d]);for(;u<r;)(C=(a=I)-(x=(y=(s=p)+a)-s))&&(c[l++]=C),I=b-((_=b+y)-(f=_-b))+(y-f),b=_,(u+=1)<r&&(p=o[u]);return I&&(c[l++]=I),b&&(c[l++]=b),l||(c[l++]=0),c.length=l,c}}}),gLo=Bx({"node_modules/two-sum/two-sum.js"(e,t){t.exports=function(n,o,i){var r=n+o,s=r-n,a=o-s,c=n-(r-s);if(i)return i[0]=c+a,i[1]=r,i;return[c+a,r]}}}),HOt=Bx({"node_modules/robust-scale/robust-scale.js"(e,t){var n=xHe(),o=gLo();t.exports=function(i,r){var s=i.length;if(s===1){var a=n(i[0],r);return a[0]?a:[a[1]]}var c=Array(2*s),l=[0.1,0.1],d=[0.1,0.1],u=0;n(i[0],r,l),l[0]&&(c[u++]=l[0]);for(var h=1;h<s;++h){n(i[h],r,d);var A=l[1];o(A,d[0],l),l[0]&&(c[u++]=l[0]);var m=d[1],p=l[1],g=m+p,_=p-(g-m);l[1]=g,_&&(c[u++]=_)}return l[1]&&(c[u++]=l[1]),u===0&&(c[u++]=0),c.length=u,c}}}),OOt=Bx({"node_modules/robust-subtract/robust-diff.js"(e,t){t.exports=function(n,o){var i=0|n.length,r=0|o.length;if(i===1&&r===1)return function(P,E){var B=P+E,w=B-P,T=B-w,Q=E-w,N=P-T,F=N+Q;if(F)return[F,B];return[B]}(n[0],-o[0]);var s,a,c=Array(i+r),l=0,d=0,u=0,h=Math.abs,A=n[d],m=h(A),p=-o[u],g=h(p);m<g?(a=A,(d+=1)<i&&(m=h(A=n[d]))):(a=p,(u+=1)<r&&(g=h(p=-o[u]))),d<i&&m<g||u>=r?(s=A,(d+=1)<i&&(m=h(A=n[d]))):(s=p,(u+=1)<r&&(g=h(p=-o[u])));var _,f,y=s+a,x=y-s,C=a-x,I=C,b=y;for(;d<i&&u<r;)m<g?(s=A,(d+=1)<i&&(m=h(A=n[d]))):(s=p,(u+=1)<r&&(g=h(p=-o[u]))),(C=(a=I)-(x=(y=s+a)-s))&&(c[l++]=C),I=b-((_=b+y)-(f=_-b))+(y-f),b=_;for(;d<i;)(C=(a=I)-(x=(y=(s=A)+a)-s))&&(c[l++]=C),I=b-((_=b+y)-(f=_-b))+(y-f),b=_,(d+=1)<i&&(A=n[d]);for(;u<r;)(C=(a=I)-(x=(y=(s=p)+a)-s))&&(c[l++]=C),I=b-((_=b+y)-(f=_-b))+(y-f),b=_,(u+=1)<r&&(p=-o[u]);return I&&(c[l++]=I),b&&(c[l++]=b),l||(c[l++]=0),c.length=l,c}}}),fLo=Bx({"node_modules/robust-orientation/orientation.js"(e,t){var n=xHe(),o=FOt(),i=HOt(),r=OOt();function s(p,g,_,f){return function(y,x,C){var I=p(p(g(x[1],C[0]),g(-C[1],x[0])),p(g(y[1],x[0]),g(-x[1],y[0]))),b=p(g(y[1],C[0]),g(-C[1],y[0])),P=f(I,b);return P[P.length-1]}}function a(p,g,_,f){return function(y,x,C,I){var b=p(p(_(p(g(C[1],I[0]),g(-I[1],C[0])),x[2]),p(_(p(g(x[1],I[0]),g(-I[1],x[0])),-C[2]),_(p(g(x[1],C[0]),g(-C[1],x[0])),I[2]))),p(_(p(g(x[1],I[0]),g(-I[1],x[0])),y[2]),p(_(p(g(y[1],I[0]),g(-I[1],y[0])),-x[2]),_(p(g(y[1],x[0]),g(-x[1],y[0])),I[2])))),P=p(p(_(p(g(C[1],I[0]),g(-I[1],C[0])),y[2]),p(_(p(g(y[1],I[0]),g(-I[1],y[0])),-C[2]),_(p(g(y[1],C[0]),g(-C[1],y[0])),I[2]))),p(_(p(g(x[1],C[0]),g(-C[1],x[0])),y[2]),p(_(p(g(y[1],C[0]),g(-C[1],y[0])),-x[2]),_(p(g(y[1],x[0]),g(-x[1],y[0])),C[2])))),E=f(b,P);return E[E.length-1]}}function c(p,g,_,f){return function(y,x,C,I,b){var P=p(p(p(_(p(_(p(g(I[1],b[0]),g(-b[1],I[0])),C[2]),p(_(p(g(C[1],b[0]),g(-b[1],C[0])),-I[2]),_(p(g(C[1],I[0]),g(-I[1],C[0])),b[2]))),x[3]),p(_(p(_(p(g(I[1],b[0]),g(-b[1],I[0])),x[2]),p(_(p(g(x[1],b[0]),g(-b[1],x[0])),-I[2]),_(p(g(x[1],I[0]),g(-I[1],x[0])),b[2]))),-C[3]),_(p(_(p(g(C[1],b[0]),g(-b[1],C[0])),x[2]),p(_(p(g(x[1],b[0]),g(-b[1],x[0])),-C[2]),_(p(g(x[1],C[0]),g(-C[1],x[0])),b[2]))),I[3]))),p(_(p(_(p(g(C[1],I[0]),g(-I[1],C[0])),x[2]),p(_(p(g(x[1],I[0]),g(-I[1],x[0])),-C[2]),_(p(g(x[1],C[0]),g(-C[1],x[0])),I[2]))),-b[3]),p(_(p(_(p(g(I[1],b[0]),g(-b[1],I[0])),x[2]),p(_(p(g(x[1],b[0]),g(-b[1],x[0])),-I[2]),_(p(g(x[1],I[0]),g(-I[1],x[0])),b[2]))),y[3]),_(p(_(p(g(I[1],b[0]),g(-b[1],I[0])),y[2]),p(_(p(g(y[1],b[0]),g(-b[1],y[0])),-I[2]),_(p(g(y[1],I[0]),g(-I[1],y[0])),b[2]))),-x[3])))),p(p(_(p(_(p(g(x[1],b[0]),g(-b[1],x[0])),y[2]),p(_(p(g(y[1],b[0]),g(-b[1],y[0])),-x[2]),_(p(g(y[1],x[0]),g(-x[1],y[0])),b[2]))),I[3]),p(_(p(_(p(g(x[1],I[0]),g(-I[1],x[0])),y[2]),p(_(p(g(y[1],I[0]),g(-I[1],y[0])),-x[2]),_(p(g(y[1],x[0]),g(-x[1],y[0])),I[2]))),-b[3]),_(p(_(p(g(C[1],I[0]),g(-I[1],C[0])),x[2]),p(_(p(g(x[1],I[0]),g(-I[1],x[0])),-C[2]),_(p(g(x[1],C[0]),g(-C[1],x[0])),I[2]))),y[3]))),p(_(p(_(p(g(C[1],I[0]),g(-I[1],C[0])),y[2]),p(_(p(g(y[1],I[0]),g(-I[1],y[0])),-C[2]),_(p(g(y[1],C[0]),g(-C[1],y[0])),I[2]))),-x[3]),p(_(p(_(p(g(x[1],I[0]),g(-I[1],x[0])),y[2]),p(_(p(g(y[1],I[0]),g(-I[1],y[0])),-x[2]),_(p(g(y[1],x[0]),g(-x[1],y[0])),I[2]))),C[3]),_(p(_(p(g(x[1],C[0]),g(-C[1],x[0])),y[2]),p(_(p(g(y[1],C[0]),g(-C[1],y[0])),-x[2]),_(p(g(y[1],x[0]),g(-x[1],y[0])),C[2]))),-I[3]))))),E=p(p(p(_(p(_(p(g(I[1],b[0]),g(-b[1],I[0])),C[2]),p(_(p(g(C[1],b[0]),g(-b[1],C[0])),-I[2]),_(p(g(C[1],I[0]),g(-I[1],C[0])),b[2]))),y[3]),_(p(_(p(g(I[1],b[0]),g(-b[1],I[0])),y[2]),p(_(p(g(y[1],b[0]),g(-b[1],y[0])),-I[2]),_(p(g(y[1],I[0]),g(-I[1],y[0])),b[2]))),-C[3])),p(_(p(_(p(g(C[1],b[0]),g(-b[1],C[0])),y[2]),p(_(p(g(y[1],b[0]),g(-b[1],y[0])),-C[2]),_(p(g(y[1],C[0]),g(-C[1],y[0])),b[2]))),I[3]),_(p(_(p(g(C[1],I[0]),g(-I[1],C[0])),y[2]),p(_(p(g(y[1],I[0]),g(-I[1],y[0])),-C[2]),_(p(g(y[1],C[0]),g(-C[1],y[0])),I[2]))),-b[3]))),p(p(_(p(_(p(g(C[1],b[0]),g(-b[1],C[0])),x[2]),p(_(p(g(x[1],b[0]),g(-b[1],x[0])),-C[2]),_(p(g(x[1],C[0]),g(-C[1],x[0])),b[2]))),y[3]),_(p(_(p(g(C[1],b[0]),g(-b[1],C[0])),y[2]),p(_(p(g(y[1],b[0]),g(-b[1],y[0])),-C[2]),_(p(g(y[1],C[0]),g(-C[1],y[0])),b[2]))),-x[3])),p(_(p(_(p(g(x[1],b[0]),g(-b[1],x[0])),y[2]),p(_(p(g(y[1],b[0]),g(-b[1],y[0])),-x[2]),_(p(g(y[1],x[0]),g(-x[1],y[0])),b[2]))),C[3]),_(p(_(p(g(x[1],C[0]),g(-C[1],x[0])),y[2]),p(_(p(g(y[1],C[0]),g(-C[1],y[0])),-x[2]),_(p(g(y[1],x[0]),g(-x[1],y[0])),C[2]))),-b[3])))),B=f(P,E);return B[B.length-1]}}function l(p){return(p===3?s:p===4?a:c)(o,n,i,r)}var d=l(3),u=l(4),h=[function(){return 0},function(){return 0},function(p,g){return g[0]-p[0]},function(p,g,_){var f,y=(p[1]-_[1])*(g[0]-_[0]),x=(p[0]-_[0])*(g[1]-_[1]),C=y-x;if(y>0){if(x<=0)return C;f=y+x}else{if(!(y<0))return C;if(x>=0)return C;f=-(y+x)}var I=0.00000000000000033306690738754716*f;return C>=I||C<=-I?C:d(p,g,_)},function(p,g,_,f){var y=p[0]-f[0],x=g[0]-f[0],C=_[0]-f[0],I=p[1]-f[1],b=g[1]-f[1],P=_[1]-f[1],E=p[2]-f[2],B=g[2]-f[2],w=_[2]-f[2],T=x*P,Q=C*b,N=C*I,F=y*P,H=y*b,z=x*I,Y=E*(T-Q)+B*(N-F)+w*(H-z),U=0.0000000000000007771561172376103*((Math.abs(T)+Math.abs(Q))*Math.abs(E)+(Math.abs(N)+Math.abs(F))*Math.abs(B)+(Math.abs(H)+Math.abs(z))*Math.abs(w));return Y>U||-Y>U?Y:u(p,g,_,f)}];function A(p){var g=h[p.length];return g||(g=h[p.length]=l(p.length)),g.apply(void 0,p)}function m(p,g,_,f,y,x,C){return function(I,b,P,E,B){switch(arguments.length){case 0:case 1:return 0;case 2:return f(I,b);case 3:return y(I,b,P);case 4:return x(I,b,P,E);case 5:return C(I,b,P,E,B)}for(var w=Array(arguments.length),T=0;T<arguments.length;++T)w[T]=arguments[T];return p(w)}}(function(){for(;h.length<=5;)h.push(l(h.length));t.exports=m.apply(void 0,[A].concat(h));for(var p=0;p<=5;++p)t.exports[p]=h[p]})()}}),yLo=Bx({"node_modules/cdt2d/lib/monotone.js"(e,t){var n=Bfe(),o=fLo()[3];function i(h,A,m,p,g){this.a=h,this.b=A,this.idx=m,this.lowerIds=p,this.upperIds=g}function r(h,A,m,p){this.a=h,this.b=A,this.type=m,this.idx=p}function s(h,A){var m=h.a[0]-A.a[0]||h.a[1]-A.a[1]||h.type-A.type;return m||(h.type!==0&&(m=o(h.a,h.b,A.b))?m:h.idx-A.idx)}function a(h,A){return o(h.a,h.b,A)}function c(h,A,m,p,g){for(var _=n.lt(A,p,a),f=n.gt(A,p,a),y=_;y<f;++y){for(var x=A[y],C=x.lowerIds,I=C.length;I>1&&o(m[C[I-2]],m[C[I-1]],p)>0;)h.push([C[I-1],C[I-2],g]),I-=1;C.length=I,C.push(g);var b=x.upperIds;for(I=b.length;I>1&&o(m[b[I-2]],m[b[I-1]],p)<0;)h.push([b[I-2],b[I-1],g]),I-=1;b.length=I,b.push(g)}}function l(h,A){var m;return(m=h.a[0]<A.a[0]?o(h.a,h.b,A.a):o(A.b,A.a,h.a))?m:(m=A.b[0]<h.b[0]?o(h.a,h.b,A.b):o(A.b,A.a,h.b))||h.idx-A.idx}function d(h,A,m){var p=n.le(h,m,l),g=h[p],_=g.upperIds,f=_[_.length-1];g.upperIds=[f],h.splice(p+1,0,new i(m.a,m.b,m.idx,[f],_))}function u(h,A,m){var p=m.a;m.a=m.b,m.b=p;var g=n.eq(h,m,l),_=h[g];h[g-1].upperIds=_.upperIds,h.splice(g,1)}t.exports=function(h,A){for(var m=h.length,p=A.length,g=[],_=0;_<m;++_)g.push(new r(h[_],null,0,_));for(_=0;_<p;++_){var f=A[_],y=h[f[0]],x=h[f[1]];y[0]<x[0]?g.push(new r(y,x,2,_),new r(x,y,1,_)):y[0]>x[0]&&g.push(new r(x,y,2,_),new r(y,x,1,_))}g.sort(s);for(var C=g[0].a[0]-(1+Math.abs(g[0].a[0]))*Math.pow(2,-52),I=[new i([C,1],[C,0],-1,[],[],[],[])],b=[],P=(_=0,g.length);_<P;++_){var E=g[_],B=E.type;B===0?c(b,I,h,E.a,E.idx):B===2?d(I,h,E):u(I,h,E)}return b}}}),xLo=Bx({"node_modules/cdt2d/lib/triangulation.js"(e,t){var n=Bfe();function o(s,a){this.stars=s,this.edges=a}t.exports=function(s,a){for(var c=Array(s),l=0;l<s;++l)c[l]=[];return new o(c,a)};var i=o.prototype;function r(s,a,c){for(var l=1,d=s.length;l<d;l+=2)if(s[l-1]===a&&s[l]===c)return s[l-1]=s[d-2],s[l]=s[d-1],void(s.length=d-2)}i.isConstraint=function(){var s=[0,0];function a(c,l){return c[0]-l[0]||c[1]-l[1]}return function(c,l){return s[0]=Math.min(c,l),s[1]=Math.max(c,l),n.eq(this.edges,s,a)>=0}}(),i.removeTriangle=function(s,a,c){var l=this.stars;r(l[s],a,c),r(l[a],c,s),r(l[c],s,a)},i.addTriangle=function(s,a,c){var l=this.stars;l[s].push(a,c),l[a].push(c,s),l[c].push(s,a)},i.opposite=function(s,a){for(var c=this.stars[a],l=1,d=c.length;l<d;l+=2)if(c[l]===s)return c[l-1];return-1},i.flip=function(s,a){var c=this.opposite(s,a),l=this.opposite(a,s);this.removeTriangle(s,a,c),this.removeTriangle(a,s,l),this.addTriangle(s,l,c),this.addTriangle(a,c,l)},i.edges=function(){for(var s=this.stars,a=[],c=0,l=s.length;c<l;++c)for(var d=s[c],u=0,h=d.length;u<h;u+=2)a.push([d[u],d[u+1]]);return a},i.cells=function(){for(var s=this.stars,a=[],c=0,l=s.length;c<l;++c)for(var d=s[c],u=0,h=d.length;u<h;u+=2){var A=d[u],m=d[u+1];c<Math.min(A,m)&&a.push([c,A,m])}return a}}}),CLo=Bx({"node_modules/robust-in-sphere/in-sphere.js"(e,t){var n=xHe(),o=FOt(),i=OOt(),r=HOt();function s(m){return(m===3?a:m===4?c:m===5?l:d)(o,i,n,r)}function a(m,p,g,_){return function(f,y,x){var C=g(f[0],f[0]),I=_(C,y[0]),b=_(C,x[0]),P=g(y[0],y[0]),E=_(P,f[0]),B=_(P,x[0]),w=g(x[0],x[0]),T=_(w,f[0]),Q=_(w,y[0]),N=m(p(Q,B),p(E,I)),F=p(T,b),H=p(N,F);return H[H.length-1]}}function c(m,p,g,_){return function(f,y,x,C){var I=m(g(f[0],f[0]),g(f[1],f[1])),b=_(I,y[0]),P=_(I,x[0]),E=_(I,C[0]),B=m(g(y[0],y[0]),g(y[1],y[1])),w=_(B,f[0]),T=_(B,x[0]),Q=_(B,C[0]),N=m(g(x[0],x[0]),g(x[1],x[1])),F=_(N,f[0]),H=_(N,y[0]),z=_(N,C[0]),Y=m(g(C[0],C[0]),g(C[1],C[1])),U=_(Y,f[0]),X=_(Y,y[0]),V=_(Y,x[0]),W=m(m(_(p(V,z),y[1]),m(_(p(X,Q),-x[1]),_(p(H,T),C[1]))),m(_(p(X,Q),f[1]),m(_(p(U,E),-y[1]),_(p(w,b),C[1])))),j=m(m(_(p(V,z),f[1]),m(_(p(U,E),-x[1]),_(p(F,P),C[1]))),m(_(p(H,T),f[1]),m(_(p(F,P),-y[1]),_(p(w,b),x[1])))),q=p(W,j);return q[q.length-1]}}function l(m,p,g,_){return function(f,y,x,C,I){var b=m(g(f[0],f[0]),m(g(f[1],f[1]),g(f[2],f[2]))),P=_(b,y[0]),E=_(b,x[0]),B=_(b,C[0]),w=_(b,I[0]),T=m(g(y[0],y[0]),m(g(y[1],y[1]),g(y[2],y[2]))),Q=_(T,f[0]),N=_(T,x[0]),F=_(T,C[0]),H=_(T,I[0]),z=m(g(x[0],x[0]),m(g(x[1],x[1]),g(x[2],x[2]))),Y=_(z,f[0]),U=_(z,y[0]),X=_(z,C[0]),V=_(z,I[0]),W=m(g(C[0],C[0]),m(g(C[1],C[1]),g(C[2],C[2]))),j=_(W,f[0]),q=_(W,y[0]),ne=_(W,x[0]),ce=_(W,I[0]),oe=m(g(I[0],I[0]),m(g(I[1],I[1]),g(I[2],I[2]))),ie=_(oe,f[0]),J=_(oe,y[0]),ee=_(oe,x[0]),se=_(oe,C[0]),le=m(m(m(_(m(_(p(se,ce),x[1]),m(_(p(ee,V),-C[1]),_(p(ne,X),I[1]))),y[2]),m(_(m(_(p(se,ce),y[1]),m(_(p(J,H),-C[1]),_(p(q,F),I[1]))),-x[2]),_(m(_(p(ee,V),y[1]),m(_(p(J,H),-x[1]),_(p(U,N),I[1]))),C[2]))),m(_(m(_(p(ne,X),y[1]),m(_(p(q,F),-x[1]),_(p(U,N),C[1]))),-I[2]),m(_(m(_(p(se,ce),y[1]),m(_(p(J,H),-C[1]),_(p(q,F),I[1]))),f[2]),_(m(_(p(se,ce),f[1]),m(_(p(ie,w),-C[1]),_(p(j,B),I[1]))),-y[2])))),m(m(_(m(_(p(J,H),f[1]),m(_(p(ie,w),-y[1]),_(p(Q,P),I[1]))),C[2]),m(_(m(_(p(q,F),f[1]),m(_(p(j,B),-y[1]),_(p(Q,P),C[1]))),-I[2]),_(m(_(p(ne,X),y[1]),m(_(p(q,F),-x[1]),_(p(U,N),C[1]))),f[2]))),m(_(m(_(p(ne,X),f[1]),m(_(p(j,B),-x[1]),_(p(Y,E),C[1]))),-y[2]),m(_(m(_(p(q,F),f[1]),m(_(p(j,B),-y[1]),_(p(Q,P),C[1]))),x[2]),_(m(_(p(U,N),f[1]),m(_(p(Y,E),-y[1]),_(p(Q,P),x[1]))),-C[2]))))),he=m(m(m(_(m(_(p(se,ce),x[1]),m(_(p(ee,V),-C[1]),_(p(ne,X),I[1]))),f[2]),_(m(_(p(se,ce),f[1]),m(_(p(ie,w),-C[1]),_(p(j,B),I[1]))),-x[2])),m(_(m(_(p(ee,V),f[1]),m(_(p(ie,w),-x[1]),_(p(Y,E),I[1]))),C[2]),_(m(_(p(ne,X),f[1]),m(_(p(j,B),-x[1]),_(p(Y,E),C[1]))),-I[2]))),m(m(_(m(_(p(ee,V),y[1]),m(_(p(J,H),-x[1]),_(p(U,N),I[1]))),f[2]),_(m(_(p(ee,V),f[1]),m(_(p(ie,w),-x[1]),_(p(Y,E),I[1]))),-y[2])),m(_(m(_(p(J,H),f[1]),m(_(p(ie,w),-y[1]),_(p(Q,P),I[1]))),x[2]),_(m(_(p(U,N),f[1]),m(_(p(Y,E),-y[1]),_(p(Q,P),x[1]))),-I[2])))),ue=p(le,he);return ue[ue.length-1]}}function d(m,p,g,_){return function(f,y,x,C,I,b){var P=m(m(g(f[0],f[0]),g(f[1],f[1])),m(g(f[2],f[2]),g(f[3],f[3]))),E=_(P,y[0]),B=_(P,x[0]),w=_(P,C[0]),T=_(P,I[0]),Q=_(P,b[0]),N=m(m(g(y[0],y[0]),g(y[1],y[1])),m(g(y[2],y[2]),g(y[3],y[3]))),F=_(N,f[0]),H=_(N,x[0]),z=_(N,C[0]),Y=_(N,I[0]),U=_(N,b[0]),X=m(m(g(x[0],x[0]),g(x[1],x[1])),m(g(x[2],x[2]),g(x[3],x[3]))),V=_(X,f[0]),W=_(X,y[0]),j=_(X,C[0]),q=_(X,I[0]),ne=_(X,b[0]),ce=m(m(g(C[0],C[0]),g(C[1],C[1])),m(g(C[2],C[2]),g(C[3],C[3]))),oe=_(ce,f[0]),ie=_(ce,y[0]),J=_(ce,x[0]),ee=_(ce,I[0]),se=_(ce,b[0]),le=m(m(g(I[0],I[0]),g(I[1],I[1])),m(g(I[2],I[2]),g(I[3],I[3]))),he=_(le,f[0]),ue=_(le,y[0]),Ae=_(le,x[0]),_e=_(le,C[0]),Pe=_(le,b[0]),Ee=m(m(g(b[0],b[0]),g(b[1],b[1])),m(g(b[2],b[2]),g(b[3],b[3]))),Te=_(Ee,f[0]),be=_(Ee,y[0]),me=_(Ee,x[0]),ye=_(Ee,C[0]),Ce=_(Ee,I[0]),ve=m(m(m(_(m(m(_(m(_(p(Ce,Pe),C[1]),m(_(p(ye,se),-I[1]),_(p(_e,ee),b[1]))),x[2]),_(m(_(p(Ce,Pe),x[1]),m(_(p(me,ne),-I[1]),_(p(Ae,q),b[1]))),-C[2])),m(_(m(_(p(ye,se),x[1]),m(_(p(me,ne),-C[1]),_(p(J,j),b[1]))),I[2]),_(m(_(p(_e,ee),x[1]),m(_(p(Ae,q),-C[1]),_(p(J,j),I[1]))),-b[2]))),y[3]),m(_(m(m(_(m(_(p(Ce,Pe),C[1]),m(_(p(ye,se),-I[1]),_(p(_e,ee),b[1]))),y[2]),_(m(_(p(Ce,Pe),y[1]),m(_(p(be,U),-I[1]),_(p(ue,Y),b[1]))),-C[2])),m(_(m(_(p(ye,se),y[1]),m(_(p(be,U),-C[1]),_(p(ie,z),b[1]))),I[2]),_(m(_(p(_e,ee),y[1]),m(_(p(ue,Y),-C[1]),_(p(ie,z),I[1]))),-b[2]))),-x[3]),_(m(m(_(m(_(p(Ce,Pe),x[1]),m(_(p(me,ne),-I[1]),_(p(Ae,q),b[1]))),y[2]),_(m(_(p(Ce,Pe),y[1]),m(_(p(be,U),-I[1]),_(p(ue,Y),b[1]))),-x[2])),m(_(m(_(p(me,ne),y[1]),m(_(p(be,U),-x[1]),_(p(W,H),b[1]))),I[2]),_(m(_(p(Ae,q),y[1]),m(_(p(ue,Y),-x[1]),_(p(W,H),I[1]))),-b[2]))),C[3]))),m(m(_(m(m(_(m(_(p(ye,se),x[1]),m(_(p(me,ne),-C[1]),_(p(J,j),b[1]))),y[2]),_(m(_(p(ye,se),y[1]),m(_(p(be,U),-C[1]),_(p(ie,z),b[1]))),-x[2])),m(_(m(_(p(me,ne),y[1]),m(_(p(be,U),-x[1]),_(p(W,H),b[1]))),C[2]),_(m(_(p(J,j),y[1]),m(_(p(ie,z),-x[1]),_(p(W,H),C[1]))),-b[2]))),-I[3]),_(m(m(_(m(_(p(_e,ee),x[1]),m(_(p(Ae,q),-C[1]),_(p(J,j),I[1]))),y[2]),_(m(_(p(_e,ee),y[1]),m(_(p(ue,Y),-C[1]),_(p(ie,z),I[1]))),-x[2])),m(_(m(_(p(Ae,q),y[1]),m(_(p(ue,Y),-x[1]),_(p(W,H),I[1]))),C[2]),_(m(_(p(J,j),y[1]),m(_(p(ie,z),-x[1]),_(p(W,H),C[1]))),-I[2]))),b[3])),m(_(m(m(_(m(_(p(Ce,Pe),C[1]),m(_(p(ye,se),-I[1]),_(p(_e,ee),b[1]))),y[2]),_(m(_(p(Ce,Pe),y[1]),m(_(p(be,U),-I[1]),_(p(ue,Y),b[1]))),-C[2])),m(_(m(_(p(ye,se),y[1]),m(_(p(be,U),-C[1]),_(p(ie,z),b[1]))),I[2]),_(m(_(p(_e,ee),y[1]),m(_(p(ue,Y),-C[1]),_(p(ie,z),I[1]))),-b[2]))),f[3]),_(m(m(_(m(_(p(Ce,Pe),C[1]),m(_(p(ye,se),-I[1]),_(p(_e,ee),b[1]))),f[2]),_(m(_(p(Ce,Pe),f[1]),m(_(p(Te,Q),-I[1]),_(p(he,T),b[1]))),-C[2])),m(_(m(_(p(ye,se),f[1]),m(_(p(Te,Q),-C[1]),_(p(oe,w),b[1]))),I[2]),_(m(_(p(_e,ee),f[1]),m(_(p(he,T),-C[1]),_(p(oe,w),I[1]))),-b[2]))),-y[3])))),m(m(m(_(m(m(_(m(_(p(Ce,Pe),y[1]),m(_(p(be,U),-I[1]),_(p(ue,Y),b[1]))),f[2]),_(m(_(p(Ce,Pe),f[1]),m(_(p(Te,Q),-I[1]),_(p(he,T),b[1]))),-y[2])),m(_(m(_(p(be,U),f[1]),m(_(p(Te,Q),-y[1]),_(p(F,E),b[1]))),I[2]),_(m(_(p(ue,Y),f[1]),m(_(p(he,T),-y[1]),_(p(F,E),I[1]))),-b[2]))),C[3]),_(m(m(_(m(_(p(ye,se),y[1]),m(_(p(be,U),-C[1]),_(p(ie,z),b[1]))),f[2]),_(m(_(p(ye,se),f[1]),m(_(p(Te,Q),-C[1]),_(p(oe,w),b[1]))),-y[2])),m(_(m(_(p(be,U),f[1]),m(_(p(Te,Q),-y[1]),_(p(F,E),b[1]))),C[2]),_(m(_(p(ie,z),f[1]),m(_(p(oe,w),-y[1]),_(p(F,E),C[1]))),-b[2]))),-I[3])),m(_(m(m(_(m(_(p(_e,ee),y[1]),m(_(p(ue,Y),-C[1]),_(p(ie,z),I[1]))),f[2]),_(m(_(p(_e,ee),f[1]),m(_(p(he,T),-C[1]),_(p(oe,w),I[1]))),-y[2])),m(_(m(_(p(ue,Y),f[1]),m(_(p(he,T),-y[1]),_(p(F,E),I[1]))),C[2]),_(m(_(p(ie,z),f[1]),m(_(p(oe,w),-y[1]),_(p(F,E),C[1]))),-I[2]))),b[3]),_(m(m(_(m(_(p(ye,se),x[1]),m(_(p(me,ne),-C[1]),_(p(J,j),b[1]))),y[2]),_(m(_(p(ye,se),y[1]),m(_(p(be,U),-C[1]),_(p(ie,z),b[1]))),-x[2])),m(_(m(_(p(me,ne),y[1]),m(_(p(be,U),-x[1]),_(p(W,H),b[1]))),C[2]),_(m(_(p(J,j),y[1]),m(_(p(ie,z),-x[1]),_(p(W,H),C[1]))),-b[2]))),f[3]))),m(m(_(m(m(_(m(_(p(ye,se),x[1]),m(_(p(me,ne),-C[1]),_(p(J,j),b[1]))),f[2]),_(m(_(p(ye,se),f[1]),m(_(p(Te,Q),-C[1]),_(p(oe,w),b[1]))),-x[2])),m(_(m(_(p(me,ne),f[1]),m(_(p(Te,Q),-x[1]),_(p(V,B),b[1]))),C[2]),_(m(_(p(J,j),f[1]),m(_(p(oe,w),-x[1]),_(p(V,B),C[1]))),-b[2]))),-y[3]),_(m(m(_(m(_(p(ye,se),y[1]),m(_(p(be,U),-C[1]),_(p(ie,z),b[1]))),f[2]),_(m(_(p(ye,se),f[1]),m(_(p(Te,Q),-C[1]),_(p(oe,w),b[1]))),-y[2])),m(_(m(_(p(be,U),f[1]),m(_(p(Te,Q),-y[1]),_(p(F,E),b[1]))),C[2]),_(m(_(p(ie,z),f[1]),m(_(p(oe,w),-y[1]),_(p(F,E),C[1]))),-b[2]))),x[3])),m(_(m(m(_(m(_(p(me,ne),y[1]),m(_(p(be,U),-x[1]),_(p(W,H),b[1]))),f[2]),_(m(_(p(me,ne),f[1]),m(_(p(Te,Q),-x[1]),_(p(V,B),b[1]))),-y[2])),m(_(m(_(p(be,U),f[1]),m(_(p(Te,Q),-y[1]),_(p(F,E),b[1]))),x[2]),_(m(_(p(W,H),f[1]),m(_(p(V,B),-y[1]),_(p(F,E),x[1]))),-b[2]))),-C[3]),_(m(m(_(m(_(p(J,j),y[1]),m(_(p(ie,z),-x[1]),_(p(W,H),C[1]))),f[2]),_(m(_(p(J,j),f[1]),m(_(p(oe,w),-x[1]),_(p(V,B),C[1]))),-y[2])),m(_(m(_(p(ie,z),f[1]),m(_(p(oe,w),-y[1]),_(p(F,E),C[1]))),x[2]),_(m(_(p(W,H),f[1]),m(_(p(V,B),-y[1]),_(p(F,E),x[1]))),-C[2]))),b[3]))))),De=m(m(m(_(m(m(_(m(_(p(Ce,Pe),C[1]),m(_(p(ye,se),-I[1]),_(p(_e,ee),b[1]))),x[2]),_(m(_(p(Ce,Pe),x[1]),m(_(p(me,ne),-I[1]),_(p(Ae,q),b[1]))),-C[2])),m(_(m(_(p(ye,se),x[1]),m(_(p(me,ne),-C[1]),_(p(J,j),b[1]))),I[2]),_(m(_(p(_e,ee),x[1]),m(_(p(Ae,q),-C[1]),_(p(J,j),I[1]))),-b[2]))),f[3]),m(_(m(m(_(m(_(p(Ce,Pe),C[1]),m(_(p(ye,se),-I[1]),_(p(_e,ee),b[1]))),f[2]),_(m(_(p(Ce,Pe),f[1]),m(_(p(Te,Q),-I[1]),_(p(he,T),b[1]))),-C[2])),m(_(m(_(p(ye,se),f[1]),m(_(p(Te,Q),-C[1]),_(p(oe,w),b[1]))),I[2]),_(m(_(p(_e,ee),f[1]),m(_(p(he,T),-C[1]),_(p(oe,w),I[1]))),-b[2]))),-x[3]),_(m(m(_(m(_(p(Ce,Pe),x[1]),m(_(p(me,ne),-I[1]),_(p(Ae,q),b[1]))),f[2]),_(m(_(p(Ce,Pe),f[1]),m(_(p(Te,Q),-I[1]),_(p(he,T),b[1]))),-x[2])),m(_(m(_(p(me,ne),f[1]),m(_(p(Te,Q),-x[1]),_(p(V,B),b[1]))),I[2]),_(m(_(p(Ae,q),f[1]),m(_(p(he,T),-x[1]),_(p(V,B),I[1]))),-b[2]))),C[3]))),m(m(_(m(m(_(m(_(p(ye,se),x[1]),m(_(p(me,ne),-C[1]),_(p(J,j),b[1]))),f[2]),_(m(_(p(ye,se),f[1]),m(_(p(Te,Q),-C[1]),_(p(oe,w),b[1]))),-x[2])),m(_(m(_(p(me,ne),f[1]),m(_(p(Te,Q),-x[1]),_(p(V,B),b[1]))),C[2]),_(m(_(p(J,j),f[1]),m(_(p(oe,w),-x[1]),_(p(V,B),C[1]))),-b[2]))),-I[3]),_(m(m(_(m(_(p(_e,ee),x[1]),m(_(p(Ae,q),-C[1]),_(p(J,j),I[1]))),f[2]),_(m(_(p(_e,ee),f[1]),m(_(p(he,T),-C[1]),_(p(oe,w),I[1]))),-x[2])),m(_(m(_(p(Ae,q),f[1]),m(_(p(he,T),-x[1]),_(p(V,B),I[1]))),C[2]),_(m(_(p(J,j),f[1]),m(_(p(oe,w),-x[1]),_(p(V,B),C[1]))),-I[2]))),b[3])),m(_(m(m(_(m(_(p(Ce,Pe),x[1]),m(_(p(me,ne),-I[1]),_(p(Ae,q),b[1]))),y[2]),_(m(_(p(Ce,Pe),y[1]),m(_(p(be,U),-I[1]),_(p(ue,Y),b[1]))),-x[2])),m(_(m(_(p(me,ne),y[1]),m(_(p(be,U),-x[1]),_(p(W,H),b[1]))),I[2]),_(m(_(p(Ae,q),y[1]),m(_(p(ue,Y),-x[1]),_(p(W,H),I[1]))),-b[2]))),f[3]),_(m(m(_(m(_(p(Ce,Pe),x[1]),m(_(p(me,ne),-I[1]),_(p(Ae,q),b[1]))),f[2]),_(m(_(p(Ce,Pe),f[1]),m(_(p(Te,Q),-I[1]),_(p(he,T),b[1]))),-x[2])),m(_(m(_(p(me,ne),f[1]),m(_(p(Te,Q),-x[1]),_(p(V,B),b[1]))),I[2]),_(m(_(p(Ae,q),f[1]),m(_(p(he,T),-x[1]),_(p(V,B),I[1]))),-b[2]))),-y[3])))),m(m(m(_(m(m(_(m(_(p(Ce,Pe),y[1]),m(_(p(be,U),-I[1]),_(p(ue,Y),b[1]))),f[2]),_(m(_(p(Ce,Pe),f[1]),m(_(p(Te,Q),-I[1]),_(p(he,T),b[1]))),-y[2])),m(_(m(_(p(be,U),f[1]),m(_(p(Te,Q),-y[1]),_(p(F,E),b[1]))),I[2]),_(m(_(p(ue,Y),f[1]),m(_(p(he,T),-y[1]),_(p(F,E),I[1]))),-b[2]))),x[3]),_(m(m(_(m(_(p(me,ne),y[1]),m(_(p(be,U),-x[1]),_(p(W,H),b[1]))),f[2]),_(m(_(p(me,ne),f[1]),m(_(p(Te,Q),-x[1]),_(p(V,B),b[1]))),-y[2])),m(_(m(_(p(be,U),f[1]),m(_(p(Te,Q),-y[1]),_(p(F,E),b[1]))),x[2]),_(m(_(p(W,H),f[1]),m(_(p(V,B),-y[1]),_(p(F,E),x[1]))),-b[2]))),-I[3])),m(_(m(m(_(m(_(p(Ae,q),y[1]),m(_(p(ue,Y),-x[1]),_(p(W,H),I[1]))),f[2]),_(m(_(p(Ae,q),f[1]),m(_(p(he,T),-x[1]),_(p(V,B),I[1]))),-y[2])),m(_(m(_(p(ue,Y),f[1]),m(_(p(he,T),-y[1]),_(p(F,E),I[1]))),x[2]),_(m(_(p(W,H),f[1]),m(_(p(V,B),-y[1]),_(p(F,E),x[1]))),-I[2]))),b[3]),_(m(m(_(m(_(p(_e,ee),x[1]),m(_(p(Ae,q),-C[1]),_(p(J,j),I[1]))),y[2]),_(m(_(p(_e,ee),y[1]),m(_(p(ue,Y),-C[1]),_(p(ie,z),I[1]))),-x[2])),m(_(m(_(p(Ae,q),y[1]),m(_(p(ue,Y),-x[1]),_(p(W,H),I[1]))),C[2]),_(m(_(p(J,j),y[1]),m(_(p(ie,z),-x[1]),_(p(W,H),C[1]))),-I[2]))),f[3]))),m(m(_(m(m(_(m(_(p(_e,ee),x[1]),m(_(p(Ae,q),-C[1]),_(p(J,j),I[1]))),f[2]),_(m(_(p(_e,ee),f[1]),m(_(p(he,T),-C[1]),_(p(oe,w),I[1]))),-x[2])),m(_(m(_(p(Ae,q),f[1]),m(_(p(he,T),-x[1]),_(p(V,B),I[1]))),C[2]),_(m(_(p(J,j),f[1]),m(_(p(oe,w),-x[1]),_(p(V,B),C[1]))),-I[2]))),-y[3]),_(m(m(_(m(_(p(_e,ee),y[1]),m(_(p(ue,Y),-C[1]),_(p(ie,z),I[1]))),f[2]),_(m(_(p(_e,ee),f[1]),m(_(p(he,T),-C[1]),_(p(oe,w),I[1]))),-y[2])),m(_(m(_(p(ue,Y),f[1]),m(_(p(he,T),-y[1]),_(p(F,E),I[1]))),C[2]),_(m(_(p(ie,z),f[1]),m(_(p(oe,w),-y[1]),_(p(F,E),C[1]))),-I[2]))),x[3])),m(_(m(m(_(m(_(p(Ae,q),y[1]),m(_(p(ue,Y),-x[1]),_(p(W,H),I[1]))),f[2]),_(m(_(p(Ae,q),f[1]),m(_(p(he,T),-x[1]),_(p(V,B),I[1]))),-y[2])),m(_(m(_(p(ue,Y),f[1]),m(_(p(he,T),-y[1]),_(p(F,E),I[1]))),x[2]),_(m(_(p(W,H),f[1]),m(_(p(V,B),-y[1]),_(p(F,E),x[1]))),-I[2]))),-C[3]),_(m(m(_(m(_(p(J,j),y[1]),m(_(p(ie,z),-x[1]),_(p(W,H),C[1]))),f[2]),_(m(_(p(J,j),f[1]),m(_(p(oe,w),-x[1]),_(p(V,B),C[1]))),-y[2])),m(_(m(_(p(ie,z),f[1]),m(_(p(oe,w),-y[1]),_(p(F,E),C[1]))),x[2]),_(m(_(p(W,H),f[1]),m(_(p(V,B),-y[1]),_(p(F,E),x[1]))),-C[2]))),I[3]))))),Ze=p(ve,De);return Ze[Ze.length-1]}}var u=[function(){return 0},function(){return 0},function(){return 0}];function h(m){var p=u[m.length];return p||(p=u[m.length]=s(m.length)),p.apply(void 0,m)}function A(m,p,g,_,f,y,x,C){return function(I,b,P,E,B,w){switch(arguments.length){case 0:case 1:return 0;case 2:return _(I,b);case 3:return f(I,b,P);case 4:return y(I,b,P,E);case 5:return x(I,b,P,E,B);case 6:return C(I,b,P,E,B,w)}for(var T=Array(arguments.length),Q=0;Q<arguments.length;++Q)T[Q]=arguments[Q];return m(T)}}(function(){for(;u.length<=6;)u.push(s(u.length));t.exports=A.apply(void 0,[h].concat(u));for(var m=0;m<=6;++m)t.exports[m]=u[m]})()}}),ILo=Bx({"node_modules/cdt2d/lib/delaunay.js"(e,t){var n=CLo()[4];Bfe();function o(i,r,s,a,c,l){var d=r.opposite(a,c);if(!(d<0)){if(c<a){var u=a;a=c,c=u,u=l,l=d,d=u}r.isConstraint(a,c)||n(i[a],i[c],i[l],i[d])<0&&s.push(a,c)}}t.exports=function(i,r){for(var s=[],a=i.length,c=r.stars,l=0;l<a;++l)for(var d=c[l],u=1;u<d.length;u+=2)if(!((p=d[u])<l)&&!r.isConstraint(l,p)){for(var h=d[u-1],A=-1,m=1;m<d.length;m+=2)if(d[m-1]===p){A=d[m];break}A<0||n(i[l],i[p],i[h],i[A])<0&&s.push(l,p)}for(;s.length>0;){for(var p=s.pop(),g=(h=-1,A=-1,d=c[l=s.pop()],1);g<d.length;g+=2){var _=d[g-1],f=d[g];_===p?A=f:f===p&&(h=_)}h<0||A<0||(n(i[l],i[p],i[h],i[A])>=0||(r.flip(l,p),o(i,r,s,h,l,A),o(i,r,s,l,A,h),o(i,r,s,A,p,h),o(i,r,s,p,h,A)))}}}}),bLo=Bx({"node_modules/cdt2d/lib/filter.js"(e,t){var n=Bfe();function o(r,s,a,c,l,d,u){this.cells=r,this.neighbor=s,this.flags=c,this.constraint=a,this.active=l,this.next=d,this.boundary=u}function i(r,s){return r[0]-s[0]||r[1]-s[1]||r[2]-s[2]}t.exports=function(r,s,a){var c=function(C,I){for(var b=C.cells(),P=b.length,E=0;E<P;++E){var B=(X=b[E])[0],w=X[1],T=X[2];w<T?w<B&&(X[0]=w,X[1]=T,X[2]=B):T<B&&(X[0]=T,X[1]=B,X[2]=w)}b.sort(i);var Q=Array(P);for(E=0;E<Q.length;++E)Q[E]=0;var N=[],F=[],H=Array(3*P),z=Array(3*P),Y=null;I&&(Y=[]);var U=new o(b,H,z,Q,N,F,Y);for(E=0;E<P;++E)for(var X=b[E],V=0;V<3;++V){B=X[V],w=X[(V+1)%3];var W=H[3*E+V]=U.locate(w,B,C.opposite(w,B)),j=z[3*E+V]=C.isConstraint(B,w);W<0&&(j?F.push(E):(N.push(E),Q[E]=1),I&&Y.push([w,B,-1]))}return U}(r,a);if(s===0)return a?c.cells.concat(c.boundary):c.cells;var l=1,{active:d,next:u,flags:h,cells:A,constraint:m,neighbor:p}=c;for(;d.length>0||u.length>0;){for(;d.length>0;){var g=d.pop();if(h[g]!==-l){h[g]=l,A[g];for(var _=0;_<3;++_){var f=p[3*g+_];f>=0&&h[f]===0&&(m[3*g+_]?u.push(f):(d.push(f),h[f]=l))}}}var y=u;u=d,d=y,u.length=0,l=-l}var x=function(C,I,b){for(var P=0,E=0;E<C.length;++E)I[E]===b&&(C[P++]=C[E]);return C.length=P,C}(A,h,s);if(a)return x.concat(c.boundary);return x},o.prototype.locate=function(){var r=[0,0,0];return function(s,a,c){var l=s,d=a,u=c;return a<c?a<s&&(l=a,d=c,u=s):c<s&&(l=c,d=s,u=a),l<0?-1:(r[0]=l,r[1]=d,r[2]=u,n.eq(this.cells,r,i))}}()}}),SLo=Bx({"node_modules/cdt2d/cdt2d.js"(e,t){var n=yLo(),o=xLo(),i=ILo(),r=bLo();function s(l){return[Math.min(l[0],l[1]),Math.max(l[0],l[1])]}function a(l,d){return l[0]-d[0]||l[1]-d[1]}function c(l,d,u){return d in l?l[d]:u}t.exports=function(l,d,u){Array.isArray(d)?(u=u||{},d=d||[]):(u=d||{},d=[]);var h=!!c(u,"delaunay",!0),A=!!c(u,"interior",!0),m=!!c(u,"exterior",!0),p=!!c(u,"infinity",!1);if(!A&&!m||l.length===0)return[];var g=n(l,d);if(h||A!==m||p){for(var _=o(l.length,function(x){return x.map(s).sort(a)}(d)),f=0;f<g.length;++f){var y=g[f];_.addTriangle(y[0],y[1],y[2])}return h&&i(l,_),m?A?p?r(_,0,p):_.cells():r(_,1,p):r(_,-1)}return g}}}),zOt=(e)=>e.map((t)=>({connectionId:t.connectionId,startRegionId:t.startRegion.regionId,endRegionId:t.endRegion.regionId,mutuallyConnectedNetworkId:t.mutuallyConnectedNetworkId})),GOt=(e)=>({ports:e.ports.map((t)=>({portId:t.portId,region1Id:t.region1.regionId,region2Id:t.region2.regionId,d:t.d})),regions:e.regions.map((t)=>({regionId:t.regionId,pointIds:t.ports.map((n)=>n.portId),d:t.d}))}),xNe=({port:e,boundaryRegionMap:t})=>{let n=t.get(e.portId);if(!n){let o=typeof e.d?.x=="number"?e.d.x:0,i=typeof e.d?.y=="number"?e.d.y:0;n={regionId:`__section_boundary__${e.portId}`,ports:[],d:{isBoundaryRegion:!0,boundaryPortId:e.portId,...e.d,center:{x:o,y:i},bounds:{minX:o-0.05,maxX:o+0.05,minY:i-0.05,maxY:i+0.05}},assignments:[]},t.set(e.portId,n)}return n},PLo=(e)=>{let{sectionRoute:t,graph:n}=e,o=new Set(n.ports.map((a)=>a.portId)),i=t.globalRoute.path.slice(t.sectionStartIndex,t.sectionEndIndex+1).filter((a)=>o.has(a.port.portId)),r=[],s=t.sectionConnection.startRegion;for(let a=0;a<i.length;a++){let c=i[a],l=n.ports.find((u)=>u.portId===c.port.portId),d=l.region1===s?l.region2:l.region1;r.push({port:l,g:0,h:0,f:0,hops:a,ripRequired:c.ripRequired,parent:a>0?r[a-1]:void 0,lastPort:a>0?r[a-1].port:void 0,lastRegion:a>0?s:void 0,nextRegion:d}),s=d}return{connection:t.sectionConnection,path:r,requiredRip:t.globalRoute.requiredRip}},vLo=(e,t)=>{let n=-1,o=-1;for(let i=0;i<e.path.length;i++){let r=e.path[i];(r.lastRegion&&t.has(r.lastRegion.regionId)||r.nextRegion&&t.has(r.nextRegion.regionId))&&(n===-1&&(n=i),o=i)}return n===-1?null:{startIndex:n,endIndex:o}},ELo=(e)=>{let{graph:t,solvedRoutes:n,centralRegion:o,expansionHopsFromCentralRegion:i}=e,r=(({centralRegion:m,expansionHopsFromCentralRegion:p})=>{let g=new Set([m.regionId]),_=[{region:m,hops:0}];for(;_.length>0;){let{region:f,hops:y}=_.shift();if(!(y>=p+1))for(let x of f.ports){let C=x.region1===f?x.region2:x.region1;g.has(C.regionId)||(g.add(C.regionId),_.push({region:C,hops:y+1}))}}return g})({graph:t,centralRegion:o,expansionHopsFromCentralRegion:i}),s=new Map,a=new Map,c=[];for(let m of t.regions)r.has(m.regionId)&&s.set(m.regionId,{regionId:m.regionId,ports:[],d:m.d?structuredClone(m.d):m.d,assignments:[]});for(let m of t.ports){let p=r.has(m.region1.regionId),g=r.has(m.region2.regionId);if(!p&&!g)continue;if(p&&g){let x={portId:m.portId,region1:s.get(m.region1.regionId),region2:s.get(m.region2.regionId),d:m.d};x.region1.ports.push(x),x.region2.ports.push(x),c.push(x);continue}let _=p?m.region1:m.region2,f=xNe({port:m,boundaryRegionMap:a}),y={portId:m.portId,region1:s.get(_.regionId),region2:f,d:m.d};y.region1.ports.push(y),y.region2.ports.push(y),c.push(y)}let l={regions:[...s.values(),...a.values()],ports:c},d=[],u=[],h=[];for(let m of n){let p=vLo(m,r);if(!p)continue;let g=m.path[p.startIndex],_=m.path[p.endIndex];h.push({solvedRoute:m,solvedPathStartIndex:p.startIndex,solvedPathEndIndex:p.endIndex,startCandidate:g,endCandidate:_})}let A=new Map(l.regions.map((m)=>[m.regionId,m]));for(let{solvedRoute:m,solvedPathStartIndex:p,solvedPathEndIndex:g,startCandidate:_,endCandidate:f}of h){let y,x,C,I;if(r.has(m.connection.startRegion.regionId))y=m.connection.startRegion.regionId,x=A.get(y);else{let B=xNe({port:_.port,boundaryRegionMap:a});y=B.regionId,x=B,A.has(y)||A.set(y,B)}if(r.has(m.connection.endRegion.regionId))C=m.connection.endRegion.regionId,I=A.get(C);else{let B=xNe({port:f.port,boundaryRegionMap:a});C=B.regionId,I=B,A.has(C)||A.set(C,B)}if(!x)throw console.error("[getSectionOfHyperGraphAsHyperGraph] CRITICAL ERROR: startRegion not found!"),console.error(` Looking for: ${y}`),console.error(` Route connection: ${m.connection.connectionId}`),console.error(` Original startRegion: ${m.connection.startRegion.regionId}`),console.error(` startCandidate port: ${_.port.portId}`),console.error(" Available regions in sectionRegionMap:",Array.from(A.keys())),Error(`startRegion ${y} not found in sectionRegionMap`);if(!I)throw console.error("[getSectionOfHyperGraphAsHyperGraph] CRITICAL ERROR: endRegion not found!"),console.error(` Looking for: ${C}`),console.error(` Route connection: ${m.connection.connectionId}`),console.error(` Original endRegion: ${m.connection.endRegion.regionId}`),console.error(` endCandidate port: ${f.port.portId}`),console.error(" Available regions in sectionRegionMap:",Array.from(A.keys())),Error(`endRegion ${C} not found in sectionRegionMap`);let b={connectionId:m.connection.connectionId,mutuallyConnectedNetworkId:m.connection.mutuallyConnectedNetworkId,startRegion:x,endRegion:I},P=m.path.slice(p,g+1),E={globalRoute:m,globalConnection:m.connection,sectionConnection:b,sectionStartIndex:p,sectionEndIndex:g};d.push({...E,canRemainFixedInSectionSolve:P.every((B)=>l.ports.some((w)=>w.portId===B.port.portId)),sectionRoute:PLo({sectionRoute:E,graph:l})}),u.push(b)}return{centralRegionId:o.regionId,sectionRegionIds:r,graph:l,connections:u,sectionRoutes:d}},S3t=class{heap=[];maxSize;constructor(e=[],t=1e4){if(this.maxSize=t,e.length>0){this.heap=[...e].sort((n,o)=>n.f-o.f).slice(0,this.maxSize);for(let n=Math.floor(this.heap.length/2)-1;n>=0;n--)this._siftDown(n)}}get size(){return this.heap.length}isEmpty(){return this.heap.length===0}peek(){return this.isEmpty()?null:this.heap[0]??null}peekMany(e){return[...this.heap].sort((t,n)=>t.f-n.f).slice(0,e)}dequeue(){if(this.isEmpty())return null;let e=this.heap[0],t=this.heap.pop();return this.heap.length===0&&t!==void 0||t!==void 0&&(this.heap[0]=t,this._siftDown(0)),e}enqueue(e){this.heap.length>=this.maxSize||(this.heap.push(e),this._siftUp(this.heap.length-1))}_siftUp(e){let t=e;for(;t>0;){let n=this._parentIndex(t);if(this.heap[n].f<=this.heap[t].f)break;this._swap(t,n),t=n}}_siftDown(e){let t=e,n=this.heap.length;for(;;){let o=this._leftChildIndex(t),i=this._rightChildIndex(t),r=t;if(o<n&&this.heap[o].f<this.heap[r].f&&(r=o),i<n&&this.heap[i].f<this.heap[r].f&&(r=i),r===t)break;this._swap(t,r),t=r}}_swap(e,t){[this.heap[e],this.heap[t]]=[this.heap[t],this.heap[e]]}_parentIndex(e){return Math.floor((e-1)/2)}_leftChildIndex(e){return 2*e+1}_rightChildIndex(e){return 2*e+2}},YOt=(e)=>{for(let t of e.regions)t.assignments=[];for(let t of e.ports)t.assignment=void 0},OQe=({graph:e,connections:t,solvedRoutes:n})=>{let o=new Map(e.ports.map((a)=>[a.portId,a])),i=new Map(e.regions.map((a)=>[a.regionId,a])),r=new Map(t.map((a)=>[a.connectionId,a])),s=n.map((a)=>{let c=[];for(let l of a.path){let d={port:o.get(l.port.portId),g:l.g,h:l.h,f:l.f,hops:l.hops,ripRequired:l.ripRequired};l.lastPort&&(d.lastPort=o.get(l.lastPort.portId)),l.lastRegion&&(d.lastRegion=i.get(l.lastRegion.regionId)),l.nextRegion&&(d.nextRegion=i.get(l.nextRegion.regionId));let u=c[c.length-1];u&&(d.parent=u),c.push(d)}return{path:c,connection:r.get(a.connection.connectionId),requiredRip:a.requiredRip}});YOt(e),e.solvedRoutes=s;for(let a of s)for(let c of a.path){if(c.port.assignment={solvedRoute:a,connection:a.connection},!c.lastPort||!c.lastRegion)continue;let l={regionPort1:c.lastPort,regionPort2:c.port,region:c.lastRegion,connection:a.connection,solvedRoute:a};c.lastRegion.assignments??=[],c.lastRegion.assignments.push(l)}return s},VOt=class extends Js{constructor(e){super(),this.input=e,this.graph=((n)=>{if(n.ports.length>0&&"region1"in n.ports[0]&&typeof n.ports[0].region1=="object")return n;let o=new Map,i=new Map;for(let r of n.regions){let{assignments:s,...a}=r;i.set(r.regionId,{...a,d:a.d?structuredClone(a.d):a.d,ports:[],assignments:void 0})}for(let r of n.ports){let s=i.get(r.region1Id??r.region1?.regionId),a=i.get(r.region2Id??r.region2?.regionId),c={portId:r.portId,region1:s,region2:a,d:r.d};o.set(r.portId,c),s.ports.push(c),a.ports.push(c)}return{ports:Array.from(o.values()),regions:Array.from(i.values())}})(e.inputGraph),YOt(this.graph),this.connections=((n,o)=>{let i=[];for(let r of n)"startRegionId"in r?i.push({connectionId:r.connectionId,mutuallyConnectedNetworkId:r.mutuallyConnectedNetworkId??r.connectionId,startRegion:o.regions.find((s)=>s.regionId===r.startRegionId),endRegion:o.regions.find((s)=>s.regionId===r.endRegionId)}):i.push(r);return i})(e.inputConnections,this.graph),e.inputSolvedRoutes?this.solvedRoutes=OQe({graph:this.graph,connections:this.connections,solvedRoutes:e.inputSolvedRoutes}):this.graph.solvedRoutes=this.solvedRoutes,e.greedyMultiplier!==void 0&&(this.greedyMultiplier=e.greedyMultiplier),e.rippingEnabled!==void 0&&(this.rippingEnabled=e.rippingEnabled),e.ripCost!==void 0&&(this.ripCost=e.ripCost);let t=new Set(this.solvedRoutes.map((n)=>n.connection.connectionId));this.unprocessedConnections=this.connections.filter((n)=>!t.has(n.connectionId)),this.candidateQueue=new S3t,this.unprocessedConnections.length===0?this.solved=!0:this.beginNewConnection()}getSolverName(){return"HyperGraphSolver"}graph;connections;candidateQueue;unprocessedConnections;solvedRoutes=[];currentConnection=null;currentEndRegion=null;greedyMultiplier=1;rippingEnabled=!1;ripCost=0;lastCandidate=null;visitedPointsForCurrentConnection=new Map;getConstructorParams(){return{inputGraph:GOt(this.graph),inputConnections:zOt(this.connections),greedyMultiplier:this.greedyMultiplier,rippingEnabled:this.rippingEnabled,ripCost:this.ripCost,inputSolvedRoutes:this.solvedRoutes}}computeH(e){return this.estimateCostToEnd(e.port)}estimateCostToEnd(e){return 0}getPortUsagePenalty(e){return 0}computeIncreasedRegionCostIfPortsAreUsed(e,t,n){return 0}getRipsRequiredForPortUsage(e,t,n){return[]}isRipRequiredForPortUsage(e,t,n){return!1}isTransitionAllowed(e,t,n){return!0}computeG(e){return e.parent.g+this.computeIncreasedRegionCostIfPortsAreUsed(e.lastRegion,e.lastPort,e.port)+(e.ripRequired?this.ripCost:0)+this.getPortUsagePenalty(e.port)}selectCandidatesForEnteringRegion(e){return e}computeRoutesToRip(e){let t=this.computeCrossingRoutes(e),n=this.computePortOverlapRoutes(e);return new Set([...t,...n])}computePortOverlapRoutes(e){let t=new Set;for(let n of e.path)n.port.assignment&&n.port.assignment.connection.mutuallyConnectedNetworkId!==e.connection.mutuallyConnectedNetworkId&&t.add(n.port.assignment.solvedRoute);return t}computeCrossingRoutes(e){let t=new Set;for(let n of e.path){if(!n.lastPort||!n.lastRegion)continue;let o=this.getRipsRequiredForPortUsage(n.lastRegion,n.lastPort,n.port);for(let i of o)t.add(i.solvedRoute)}return t}getNextCandidates(e){let{nextRegion:t,port:n}=e,o={};for(let r of t.ports){if(r===e.port)continue;if(!this.isTransitionAllowed(t,n,r))continue;let s=r.assignment&&r.assignment.connection.mutuallyConnectedNetworkId!==this.currentConnection.mutuallyConnectedNetworkId||this.isRipRequiredForPortUsage(t,n,r),a={port:r,hops:e.hops+1,parent:e,lastRegion:t,nextRegion:r.region1===t?r.region2:r.region1,lastPort:n,ripRequired:s};!this.rippingEnabled&&a.ripRequired||(o[a.nextRegion.regionId]??=[],o[a.nextRegion.regionId].push(a))}let i=[];for(let r in o){let s=o[r];i.push(...this.selectCandidatesForEnteringRegion(s))}for(let r of i)r.g=this.computeG(r),r.h=this.computeH(r),r.f=r.g+r.h*this.greedyMultiplier;return i}processSolvedRoute(e){let t={path:[],connection:this.currentConnection,requiredRip:!1},n=e,o=!1;for(;n;)o||=!!n.ripRequired,t.path.unshift(n),n=n.parent;o&&(t.requiredRip=!0);let i=this.computeRoutesToRip(t);if(i.size>0){t.requiredRip=!0;for(let r of i)this.ripSolvedRoute(r)}for(let r of t.path){if(r.port.assignment={solvedRoute:t,connection:this.currentConnection},!r.lastPort)continue;let s={regionPort1:r.lastPort,regionPort2:r.port,region:r.lastRegion,connection:this.currentConnection,solvedRoute:t};r.lastRegion.assignments?.push(s)}this.solvedRoutes.push(t),this.routeSolvedHook(t)}routeSolvedHook(e){}routeStartedHook(e){}ripSolvedRoute(e){for(let t of e.path.map((n)=>n.port))t.ripCount=(t.ripCount??0)+1,t.region1.assignments=t.region1.assignments?.filter((n)=>n.regionPort1!==t&&n.regionPort2!==t),t.region2.assignments=t.region2.assignments?.filter((n)=>n.regionPort1!==t&&n.regionPort2!==t),t.assignment=void 0;this.solvedRoutes=this.solvedRoutes.filter((t)=>t!==e),this.unprocessedConnections.push(e.connection)}beginNewConnection(){this.currentConnection=this.unprocessedConnections.shift(),this.currentEndRegion=this.currentConnection.endRegion,this.candidateQueue=new S3t,this.visitedPointsForCurrentConnection.clear(),this.routeStartedHook(this.currentConnection);for(let e of this.currentConnection.startRegion.ports)this.candidateQueue.enqueue({port:e,g:0,h:0,f:0,hops:0,ripRequired:!1,nextRegion:e.region1===this.currentConnection.startRegion?e.region2:e.region1})}_step(){let e=this.candidateQueue.dequeue();if(!e)return this.failed=!0,void(this.error="Ran out of candidates");let t=this.visitedPointsForCurrentConnection.get(e.port.portId);for(;e&&t!==void 0&&!(e.g<t)&&(e=this.candidateQueue.dequeue(),e);)t=this.visitedPointsForCurrentConnection.get(e.port.portId);if(!e)return this.failed=!0,void(this.error="Ran out of candidates");if(this.lastCandidate=e,this.visitedPointsForCurrentConnection.set(e.port.portId,e.g),e.nextRegion===this.currentEndRegion)return this.processSolvedRoute(e),this.unprocessedConnections.length===0?void(this.solved=!0):void this.beginNewConnection();let n=this.getNextCandidates(e);for(let o of n)this.candidateQueue.enqueue(o)}};function MLo(e,t){let n=e.x-t.x,o=e.y-t.y;return n*n+o*o}function zQe(e,t,n,o,i){let r=n-t,s=i-o;if(Math.abs(e.y-i)<0.000001)return e.x-t;if(Math.abs(e.x-n)<0.000001)return r+(i-e.y);if(Math.abs(e.y-o)<0.000001)return r+s+(n-e.x);if(Math.abs(e.x-t)<0.000001)return 2*r+s+(e.y-o);let c=Math.abs(e.y-i),l=Math.abs(e.x-n),d=Math.abs(e.y-o),u=Math.abs(e.x-t),h=Math.min(c,l,d,u);return h===c?Math.max(0,Math.min(r,e.x-t)):h===l?r+Math.max(0,Math.min(s,i-e.y)):h===d?r+s+Math.max(0,Math.min(r,n-e.x)):2*r+s+Math.max(0,Math.min(s,e.y-o))}function BLo(e,t,n){let o=n.x-t.x,i=n.y-t.y,r=e.x-t.x,s=e.y-t.y,a=o*o+i*i,c=a>0?(l=(r*o+s*i)/a,d=0,u=1,Math.max(d,Math.min(u,l))):0;var l,d,u;return{u:c,d2:MLo(e,{x:t.x+c*o,y:t.y+c*i})}}function UOt(e){let t=e.d.polygon;if(!t||t.length<3)return null;let n=e.d.polygonPerimeterCache;if(n)return n;let o=function(i){let r=i.length,s=Array(r),a=Array(r+1);a[0]=0;for(let c=0;c<r;c++){let l=i[c],d=i[(c+1)%r],u=Math.hypot(d.x-l.x,d.y-l.y);s[c]=u,a[c+1]=a[c]+u}return{edgeLengths:s,cumulative:a,perimeter:a[r]}}(t);return e.d.polygonPerimeterCache=o,o}function P3t(e){let t=UOt(e);if(t)return t.perimeter;let{minX:n,maxX:o,minY:i,maxY:r}=e.d.bounds;return 2*(o-n)+2*(r-i)}function _8(e,t){if(e.region1===t){if(typeof e.region1T=="number")return e.region1T;let n=CNe(e.d,t);return e.region1T=n,n}if(e.region2===t){if(typeof e.region2T=="number")return e.region2T;let n=CNe(e.d,t);return e.region2T=n,n}return CNe(e.d,t)}function CNe(e,t){let n=t.d.polygon;if(n&&n.length>=3){let a=UOt(t);if(a)return function(c,l,d,u=0.000001){let h=0,A=0,m=Number.POSITIVE_INFINITY,p=u*u;for(let g=0;g<l.length;g++){let _=BLo(c,l[g],l[(g+1)%l.length]);if(_.d2<=p){h=g,A=_.u,m=_.d2;break}_.d2<m&&(h=g,A=_.u,m=_.d2)}return d.cumulative[h]+A*d.edgeLengths[h]}(e,n,a)}let{minX:o,maxX:i,minY:r,maxY:s}=t.d.bounds;return zQe(e,o,i,r,s)}function kAe(e,t,n=0.000001){return Math.abs(e-t)<n}function k8(e,t){return(e%t+t)%t}function LAe(e,t,n,o){let i=Math.abs(k8(e-t,n));return i<o||n-i<o}function v3t(e,t,n,o,i){let r=k8(e,o),s=k8(t,o),a=k8(n,o);return!(Math.abs(s-a)<i)&&(s<a?s<r&&r<a:r>s||r<a)}function INe(e,t,n){if(typeof n=="number"&&n>0){let[a,c]=e,[l,d]=t;if(a=k8(a,n),c=k8(c,n),l=k8(l,n),d=k8(d,n),LAe(a,l,n,0.000001)||LAe(a,d,n,0.000001)||LAe(c,l,n,0.000001)||LAe(c,d,n,0.000001))return!1;return v3t(l,a,c,n,0.000000000001)!==v3t(d,a,c,n,0.000000000001)}let[o,i]=e[0]<e[1]?e:[e[1],e[0]],[r,s]=t[0]<t[1]?t:[t[1],t[0]];return!(kAe(o,r)||kAe(o,s)||kAe(i,r)||kAe(i,s))&&(o<r&&r<i&&i<s||r<o&&o<s&&s<i)}var WOt=(e)=>{let{POSITIVE_INFINITY:t,NEGATIVE_INFINITY:n,POSITIVE_INFINITY:o,NEGATIVE_INFINITY:i}=Number;for(let r of e){let{bounds:s}=r.d;t=Math.min(t,s.minX),n=Math.max(n,s.maxX),o=Math.min(o,s.minY),i=Math.max(i,s.maxY)}return{minX:t,maxX:n,minY:o,maxY:i}},E3t=(e,t,n,o)=>{let i={portId:e,region1:t,region2:n,d:{x:o.x,y:o.y}};return t.ports.push(i),n.ports.push(i),i},M3t=(e,t,n)=>({regionId:e,ports:[],d:{bounds:{minX:t-0.2,maxX:t+0.2,minY:n-0.2,maxY:n+0.2},center:{x:t,y:n},isPad:!1,isConnectionRegion:!0}}),L8=0.01,A6=(e,t,n)=>Math.max(t,Math.min(n,e)),B3t=(e,t,n)=>t==="left"?Math.abs(e.x-n.minX)<L8:t==="right"?Math.abs(e.x-n.maxX)<L8:t==="top"?Math.abs(e.y-n.maxY)<L8:Math.abs(e.y-n.minY)<L8,wLo=(e,t,n,o)=>{let i=o.x-n.x,r=o.y-n.y,s=e-n.x,a=t-n.y,c=i*i+r*r,l=c>0?A6((s*i+a*r)/c,0,1):0,d=n.x+l*i,u=n.y+l*r,h=e-d,A=t-u;return{x:d,y:u,d2:h*h+A*A}},TLo=(e,t,n,o,i)=>{let r=n.d.polygon;if(r&&r.length>=3){let l=new Set(i),d=null;for(let u=0;u<r.length;u++){let h=r[u],A=r[(u+1)%r.length];if(i.length>0){if(!i.some((p)=>B3t(h,p,o)&&B3t(A,p,o)&&l.has(p)))continue}let m=wLo(e,t,h,A);(!d||m.d2<d.d2)&&(d=m)}if(d)return d}let s=n.d.bounds,a=[];if(i.length>0)for(let l of i)l==="left"?a.push({side:l,x:s.minX,y:A6(t,s.minY,s.maxY)}):l==="right"?a.push({side:l,x:s.maxX,y:A6(t,s.minY,s.maxY)}):l==="top"?a.push({side:l,x:A6(e,s.minX,s.maxX),y:s.maxY}):a.push({side:l,x:A6(e,s.minX,s.maxX),y:s.minY});a.length===0&&a.push({side:"left",x:s.minX,y:A6(t,s.minY,s.maxY)},{side:"right",x:s.maxX,y:A6(t,s.minY,s.maxY)},{side:"top",x:A6(e,s.minX,s.maxX),y:s.maxY},{side:"bottom",x:A6(e,s.minX,s.maxX),y:s.minY});let c=null;for(let l of a){if(i.length>0&&!i.includes(l.side))continue;let d=e-l.x,u=t-l.y,h=d*d+u*u;(!c||h<c.d2)&&(c={x:l.x,y:l.y,d2:h})}return c},w3t=(e,t,n,o)=>{let i=((c,l,d)=>{let u=[];return Math.abs(c-d.minX)<L8&&u.push("left"),Math.abs(c-d.maxX)<L8&&u.push("right"),Math.abs(l-d.maxY)<L8&&u.push("top"),Math.abs(l-d.minY)<L8&&u.push("bottom"),u})(e,t,o),r=null,s=Number.POSITIVE_INFINITY,a={x:e,y:t};for(let c of n){if(c.d.isPad||c.d.isThroughJumper)continue;let l=c.d.bounds;if(!(Math.abs(l.minX-o.minX)<0.01||Math.abs(l.maxX-o.maxX)<0.01||Math.abs(l.minY-o.minY)<0.01||Math.abs(l.maxY-o.maxY)<0.01))continue;let d=TLo(e,t,c,o,i);if(!d)continue;let u=Math.sqrt(d.d2);u<s&&(s=u,r=c,a={x:d.x,y:d.y})}return r?{region:r,portPosition:a}:null},DLo=class extends Js{constructor(e){super(),this.input=e,this.graph=e.hyperGraphSolver.graph;let t=e.inputSolvedRoutes,n=e.hyperGraphSolver.connections;this.connections=n,this.solvedRoutes=OQe({graph:this.graph,connections:this.connections,solvedRoutes:t}),this.maxAttemptsPerRegion=e.MAX_ATTEMPTS_PER_REGION,this.maxSectionAttempts=e.MAX_ATTEMPTS_PER_SECTION??500,this.iterations+=this.iterations*(e.effort??1),this.fractionToReplace=e.FRACTION_TO_REPLACE??0.2,this.alwaysRipConflicts=e.alwaysRipConflicts??!0}graph;connections;solvedRoutes;activeSection=null;baselineSectionCost=1/0;baselineGlobalCost=1/0;regionAttemptCounts=new Map;sectionAttempts=0;maxAttemptsPerRegion;maxSectionAttempts;fractionToReplace;alwaysRipConflicts;random=((e)=>{let t=e;return()=>(t=1664525*t+1013904223>>>0,t/4294967295)})(31337);getSolverName(){return"HyperGraphSectionOptimizer"}getConstructorParams(){return{inputGraph:GOt(this.graph),inputConnections:zOt(this.connections),inputSolvedRoutes:this.solvedRoutes,expansionHopsFromCentralRegion:this.input.expansionHopsFromCentralRegion,maxAttemptsPerRegion:this.maxAttemptsPerRegion,maxSectionAttempts:this.maxSectionAttempts,effort:this.input.effort,fractionToReplace:this.fractionToReplace,alwaysRipConflicts:this.alwaysRipConflicts,ACCEPTABLE_COST:this.input.ACCEPTABLE_REGION_COST}}getOutput(){return this.solvedRoutes}_setup(){this.beginSectionSolve()}visualize(){return this.activeSubSolver?this.activeSubSolver.visualize():{title:"HyperGraphSectionOptimizer",points:[],lines:[],rects:[],circles:[],texts:[],polygons:[],arrows:[]}}getCostOfRegionWithAttempts(e){let t=this.regionAttemptCounts.get(e.regionId)??0;return this.input.regionCost(e)+1e4*t}computeCostOfSection({section:e,solvedRoutes:t}){if(this.input.computeSolvedGraphCost)return this.input.computeSolvedGraphCost(t);let n=this.input.createHyperGraphSolver({inputGraph:e.graph,inputConnections:e.connections,inputSolvedRoutes:t}),o=0;for(let i of n.graph.regions)o+=this.input.regionCost(i);return o}computeSolvedGraphCost(e){if(this.input.computeSolvedGraphCost)return this.input.computeSolvedGraphCost(e);let t=this.input.createHyperGraphSolver({inputGraph:this.graph,inputConnections:this.connections,inputSolvedRoutes:e}),n=0;for(let o of t.graph.regions)n+=this.input.regionCost(o);return n}determineConnectionsToRip(e,t){let n=e.sectionRoutes.map((a)=>a.globalConnection.connectionId);if(this.fractionToReplace>=1)return new Set(n);let o=[...n];for(let a=o.length-1;a>0;a--){let c=Math.floor(this.random()*(a+1));[o[a],o[c]]=[o[c],o[a]]}let i=Math.max(1,Math.ceil(o.length*this.fractionToReplace)),r=new Set(o.slice(0,i));if(!this.alwaysRipConflicts)return r;let s=new Map(e.graph.regions.map((a)=>[a.regionId,a]));for(let a of e.sectionRoutes)for(let c of a.sectionRoute.path){if(!c.lastPort||!c.lastRegion)continue;let l=s.get(c.lastRegion.regionId);if(!l)continue;t.currentConnection=a.globalConnection;let d=t.getRipsRequiredForPortUsage(l,c.lastPort,c.port);for(let u of d){let h=a.globalConnection.connectionId,A=u.connection.connectionId;r.has(h)||r.has(A)||r.add(this.random()<0.5?h:A)}}return r}getNextCentralRegion(){let e=null,t=1/0;for(let n of this.graph.regions){if((n.assignments?.length??0)===0)continue;if((this.regionAttemptCounts.get(n.regionId)??0)>=this.maxAttemptsPerRegion)continue;if(this.input.regionCost(n)<this.input.ACCEPTABLE_REGION_COST)continue;let o=this.getCostOfRegionWithAttempts(n);o>=t||(t=o,e=n)}return e}beginSectionSolve(){if(this.sectionAttempts>=this.maxSectionAttempts)return console.log(`Reached max section attempts (${this.maxSectionAttempts}), stopping optimization`),void(this.solved=!0);let e=this.getNextCentralRegion();if(!e)return void(this.solved=!0);if(this.sectionAttempts++,this.activeSection=ELo({graph:this.graph,solvedRoutes:this.solvedRoutes,centralRegion:e,expansionHopsFromCentralRegion:this.input.expansionHopsFromCentralRegion}),!this.activeSection)return;if(this.activeSection.connections.length===0)return this.regionAttemptCounts.set(e.regionId,(this.regionAttemptCounts.get(e.regionId)??0)+1),void(this.activeSection=null);let t=this.activeSection.sectionRoutes.filter((s)=>s.canRemainFixedInSectionSolve),n=this.input.createHyperGraphSolver({inputGraph:this.activeSection.graph,inputConnections:this.activeSection.connections,inputSolvedRoutes:t.map((s)=>s.sectionRoute)}),o=this.determineConnectionsToRip(this.activeSection,n);for(let s of this.activeSection.sectionRoutes)s.canRemainFixedInSectionSolve||o.add(s.globalConnection.connectionId);let i=this.activeSection.sectionRoutes.filter((s)=>s.canRemainFixedInSectionSolve&&!o.has(s.globalConnection.connectionId)).map((s)=>s.sectionRoute),r=[...i,...this.activeSection.sectionRoutes.filter((s)=>o.has(s.globalConnection.connectionId)).map((s)=>s.sectionRoute)];this.baselineSectionCost=this.computeCostOfSection({section:this.activeSection,solvedRoutes:r}),this.baselineGlobalCost=this.computeSolvedGraphCost(this.solvedRoutes),this.activeSubSolver=this.input.createHyperGraphSolver({inputGraph:this.activeSection.graph,inputConnections:this.activeSection.connections,inputSolvedRoutes:i});for(let s of this.activeSubSolver.connections)s.startRegion&&s.endRegion||console.error({startRegion:s.startRegion?.regionId,endRegion:s.endRegion?.regionId})}_step(){if(!this.activeSubSolver)return void this.beginSectionSolve();if(this.activeSubSolver.step(),!this.activeSection)return;if(this.activeSubSolver.failed){this.failedSubSolvers??=[],this.failedSubSolvers.push(this.activeSubSolver);let s=this.regionAttemptCounts.get(this.activeSection.centralRegionId)??0;return this.regionAttemptCounts.set(this.activeSection.centralRegionId,s+1),this.activeSubSolver=null,this.activeSection=null,this.baselineSectionCost=1/0,void(this.baselineGlobalCost=1/0)}if(!this.activeSubSolver.solved)return;let e=this.activeSubSolver.solvedRoutes,t=this.computeCostOfSection({section:this.activeSection,solvedRoutes:e}),n=((s)=>{let{solvedRoutes:a,section:c,replacementSolvedRoutes:l}=s,d=new Map(l.map((u)=>[u.connection.connectionId,u]));return a.map((u)=>{let h=c.sectionRoutes.find((p)=>p.globalConnection.connectionId===u.connection.connectionId);if(!h)return u;let A=d.get(u.connection.connectionId);if(!A)return u;let m=[...u.path.slice(0,h.sectionStartIndex),...A.path,...u.path.slice(h.sectionEndIndex+1)].map((p)=>({port:p.port,g:p.g,h:p.h,f:p.f,hops:p.hops,ripRequired:p.ripRequired,lastPort:p.lastPort,lastRegion:p.lastRegion,nextRegion:p.nextRegion}));for(let p=0;p<m.length;p++)m[p].parent=p>0?m[p-1]:void 0;return{connection:u.connection,path:m,requiredRip:u.requiredRip||A.requiredRip}})})({solvedRoutes:this.solvedRoutes,section:this.activeSection,replacementSolvedRoutes:e}),o=this.computeSolvedGraphCost(n),i=t<=this.baselineSectionCost,r=o<this.baselineGlobalCost;if(i&&r){this.solvedRoutes=n;let s=this.input.hyperGraphSolver;if(!s)return;s.solvedRoutes=OQe({graph:s.graph,connections:s.connections,solvedRoutes:this.solvedRoutes});for(let a of this.activeSection.sectionRegionIds)this.regionAttemptCounts.set(a,0);this.baselineSectionCost=t,this.baselineGlobalCost=o}else{let s=this.regionAttemptCounts.get(this.activeSection.centralRegionId)??0;this.regionAttemptCounts.set(this.activeSection.centralRegionId,s+1)}this.activeSubSolver=null,this.activeSection=null,this.baselineSectionCost=1/0,this.baselineGlobalCost=1/0}};function OY(e,t){return Array.isArray(t)?[e.a*t[0]+e.c*t[1]+e.e,e.b*t[0]+e.d*t[1]+e.f]:{x:e.a*t.x+e.c*t.y+e.e,y:e.b*t.x+e.d*t.y+e.f}}function T3t(e){return e===void 0}function FAe(e,t=0){return{a:1,c:0,e,b:0,d:1,f:t}}function GQe(...e){let t=(n,o)=>({a:n.a*o.a+n.c*o.b,c:n.a*o.c+n.c*o.d,e:n.a*o.e+n.c*o.f+n.e,b:n.b*o.a+n.d*o.b,d:n.b*o.c+n.d*o.d,f:n.b*o.e+n.d*o.f+n.f});switch((e=Array.isArray(e[0])?e[0]:e).length){case 0:throw Error("no matrices provided");case 1:return e[0];case 2:return t(e[0],e[1]);default:{let[n,o,...i]=e;return GQe(t(n,o),...i)}}}var{cos:NLo,sin:RLo,PI:Zzr}=Math,{tan:eGr}=Math,bNe=(e)=>({x:(e.minX+e.maxX)/2,y:(e.minY+e.maxY)/2}),XOt=(e,t)=>{let n=e.regions.map((s)=>{let{bounds:a,center:c,...l}=s.d,d=[{x:a.minX,y:a.minY},{x:a.maxX,y:a.minY},{x:a.minX,y:a.maxY},{x:a.maxX,y:a.maxY}].map((A)=>OY(t,A)),u={minX:Math.min(...d.map((A)=>A.x)),maxX:Math.max(...d.map((A)=>A.x)),minY:Math.min(...d.map((A)=>A.y)),maxY:Math.max(...d.map((A)=>A.y))},h=OY(t,c);return{...s,ports:[],d:{...l,bounds:u,center:h}}}),o=new Map;for(let s=0;s<e.regions.length;s++)o.set(e.regions[s],n[s]);let i=e.ports.map((s)=>{let a=OY(t,s.d),c=o.get(s.region1),l=o.get(s.region2),d={...s,region1:c,region2:l,d:a};return c.ports.push(d),l.ports.push(d),d}),r=e.jumperLocations?.map((s)=>{let a=OY(t,s.center),c=s.padRegions.map((A)=>o.get(A)),l=OY(t,{x:1,y:0}),d=OY(t,{x:0,y:0}),u=l.x-d.x,h=l.y-d.y;return{center:a,orientation:Math.abs(h)>Math.abs(u)?s.orientation==="horizontal"?"vertical":"horizontal":s.orientation,padRegions:c}});return{regions:n,ports:i,...r&&{jumperLocations:r}}},SNe=(e,t=0.8)=>{let n=0;for(let o=0;o<e.length;o++)n=17777*e.charCodeAt(o)+((n<<5)-n);return`hsla(${Math.abs(n)%360}, 70%, 50%, ${t})`},QLo=(e)=>{let t=((i)=>{let r=((s,a)=>{let c={arrows:[],circles:[],title:"Jumper Graph",lines:[],points:[],rects:[],texts:[],polygons:[],coordinateSystem:"cartesian"};for(let l of s.regions){let{bounds:d,isPad:u,isThroughJumper:h,isConnectionRegion:A,polygon:m}=l.d,p=(d.minX+d.maxX)/2,g=(d.minY+d.maxY)/2,_=d.maxX-d.minX,f=d.maxY-d.minY,y;if(y=A?"rgba(255, 100, 255, 0.6)":h?"rgba(100, 200, 100, 0.5)":u?"rgba(255, 200, 100, 0.5)":"rgba(200, 200, 255, 0.1)",m&&m.length>=3){let x=m;c.polygons.push({points:x,fill:y})}else c.rects.push({center:{x:p,y:g},width:_-0.1,height:f-0.1,fill:y})}if(!a?.hidePortPoints)for(let l of s.ports){let d=l.region1.regionId.split(":").pop()??l.region1.regionId,u=l.region2.regionId.split(":").pop()??l.region2.regionId;c.circles.push({center:{x:l.d.x,y:l.d.y},radius:0.05,fill:"rgba(128, 128, 128, 0.5)",label:`${d}-${u}`})}if(!a?.hideRegionPortLines)for(let l of s.ports){let d={x:(l.region1.d.bounds.minX+l.region1.d.bounds.maxX)/2,y:(l.region1.d.bounds.minY+l.region1.d.bounds.maxY)/2},u={x:(l.region2.d.bounds.minX+l.region2.d.bounds.maxX)/2,y:(l.region2.d.bounds.minY+l.region2.d.bounds.maxY)/2};c.lines.push({points:[d,{x:l.d.x,y:l.d.y},u],strokeColor:"rgba(100, 100, 100, 0.3)"})}if(a?.connections&&!a?.hideConnectionLines)for(let l of a.connections){let{startRegion:d,endRegion:u}=l,h={x:(d.d.bounds.minX+d.d.bounds.maxX)/2,y:(d.d.bounds.minY+d.d.bounds.maxY)/2},A={x:(u.d.bounds.minX+u.d.bounds.maxX)/2,y:(u.d.bounds.minY+u.d.bounds.maxY)/2},m=(h.x+A.x)/2,p=(h.y+A.y)/2;c.lines.push({points:[h,A],strokeColor:"rgba(255, 50, 150, 0.8)",strokeDash:"3 3"}),c.points.push({x:m,y:p,color:"rgba(200, 0, 100, 1)",label:l.connectionId})}return c})(i.graph,{connections:i.connections,...i.hideInitialGeometry?{hideRegionPortLines:!0,hideConnectionLines:!0,hidePortPoints:!0}:{}});if(!i.hideInitialGeometry)for(let s of r.polygons)s.stroke="rgba(128, 128, 128, 0.5)",s.strokeWidth=0.03;i.title&&(r.title=i.title);for(let s of i.priorSolvedRoutes??[]){let a=s.path.map((c)=>{let l=c.port;return{x:l.d.x,y:l.d.y}});a.length!==0&&r.lines.push({points:a,strokeColor:"rgba(80, 80, 80, 0.45)",strokeDash:"4 4"})}for(let s of i.solvedRoutes){let a=SNe(s.connection.connectionId),c=[];for(let l of s.path){let d=l.port;c.push({x:d.d.x,y:d.d.y})}c.length>0&&r.lines.push({points:c,strokeColor:a})}return r})({graph:{regions:e.graph.regions,ports:e.graph.ports},connections:e.connections,solvedRoutes:e.solvedRoutes,hideInitialGeometry:e.iterations>0});if(e.currentConnection&&!e.solved){let i=SNe(e.currentConnection.connectionId),r=e.currentConnection.startRegion,s=e.currentConnection.endRegion;if(!r?.d||!s?.d)return t;let a={x:(r.d.bounds.minX+r.d.bounds.maxX)/2,y:(r.d.bounds.minY+r.d.bounds.maxY)/2},c={x:(s.d.bounds.minX+s.d.bounds.maxX)/2,y:(s.d.bounds.minY+s.d.bounds.maxY)/2};t.lines.push({points:[a,c],strokeColor:i,strokeDash:"10 5"}),t.points.push({x:a.x-0.1,y:a.y+0.1,color:i,label:[e.currentConnection.connectionId,"start"].join(`
`)}),t.points.push({x:c.x-0.1,y:c.y+0.1,color:i,label:[e.currentConnection.connectionId,"end"].join(`
`)})}let n=e.candidateQueue.peekMany(10);for(let i=0;i<n.length;i++){let r=n[i],s=r.port,a=i===0;t.points.push({x:s.d.x,y:s.d.y,color:a?"green":"rgba(128, 128, 128, 0.25)",label:[r.port.portId,`g: ${r.g.toFixed(2)}`,`h: ${r.h.toFixed(2)}`,`f: ${r.f.toFixed(2)}`].join(`
`)})}let o=n[0];if(!e.solved&&o&&e.currentConnection){let i=SNe(e.currentConnection.connectionId),r=[],s=o;for(;s;){let a=s.port;r.unshift({x:a.d.x,y:a.d.y}),s=s.parent}r.length>1&&t.lines.push({points:r,strokeColor:i})}return t},kLo=0.034685181009478865,LLo=0,FLo=4.072520483177124,HLo=0,OLo=35.38577539020022,zLo=0.5518001238069296,GLo=class extends VOt{getSolverName(){return"JumperGraphSolver"}UNIT_OF_COST="hops";portUsagePenalty=kLo;portUsagePenaltySq=LLo;crossingPenalty=FLo;crossingPenaltySq=HLo;ripCost=OLo;baseMaxIterations=4000;additionalMaxIterationsPerConnection=2000;additionalMaxIterationsPerCrossing=2000;constructor(e){super({greedyMultiplier:zLo,rippingEnabled:!0,...e}),this.ripCost=e.ripCost??this.ripCost,this.portUsagePenalty=e.portUsagePenalty??this.portUsagePenalty,this.crossingPenalty=e.crossingPenalty??this.crossingPenalty,this.baseMaxIterations=e.baseMaxIterations??this.baseMaxIterations,this.additionalMaxIterationsPerConnection=e.additionalMaxIterationsPerConnection??this.additionalMaxIterationsPerConnection;let t=function(n,o){if(o.length<2)return 0;let i=1/0,r=-1/0,s=1/0,a=-1/0;for(let h of n.regions){let A=h;A.d?.bounds?(i=Math.min(i,A.d.bounds.minX),r=Math.max(r,A.d.bounds.maxX),s=Math.min(s,A.d.bounds.minY),a=Math.max(a,A.d.bounds.maxY)):A.d?.center&&(i=Math.min(i,A.d.center.x),r=Math.max(r,A.d.center.x),s=Math.min(s,A.d.center.y),a=Math.max(a,A.d.center.y))}let c=new Map;for(let h of n.regions){let A=h;A.d?.center&&c.set(h.regionId,A.d.center)}let l=[],d=2*(r-i)+2*(a-s);for(let h of o){let A,m;if("startRegion"in h&&h.startRegion){let{startRegion:_,endRegion:f}=h;A=_.d?.center,m=f.d?.center}else"startRegionId"in h&&(A=c.get(h.startRegionId),m=c.get(h.endRegionId));if(!A||!m)continue;let p=zQe(A,i,r,s,a),g=zQe(m,i,r,s,a);l.push([p,g])}let u=0;for(let h=0;h<l.length;h++)for(let A=h+1;A<l.length;A++)INe(l[h],l[A],d)&&u++;return u}(this.graph,e.inputConnections);this.MAX_ITERATIONS=this.baseMaxIterations+e.inputConnections.length*this.additionalMaxIterationsPerConnection+t*this.additionalMaxIterationsPerCrossing,this.populateDistanceToEndMaps()}populateDistanceToEndMaps(){let e=new Set(this.connections.map((t)=>t.endRegion));for(let t of e){let n=new Map,o=[];for(n.set(t.regionId,0),o.push({region:t,distance:0});o.length>0;){let{region:i,distance:r}=o.shift();for(let s of i.ports){let a=s.region1===i?s.region2:s.region1;n.has(a.regionId)||(n.set(a.regionId,r+1),o.push({region:a,distance:r+1}))}}for(let i of this.graph.ports){i.distanceToEndMap||(i.distanceToEndMap={});let r=n.get(i.region1.regionId)??1/0,s=n.get(i.region2.regionId)??1/0;i.distanceToEndMap[t.regionId]=Math.min(r,s)}}}estimateCostToEnd(e){let t=this.currentEndRegion.regionId;return e.distanceToEndMap[t]}getPortUsagePenalty(e){let t=e.ripCount??0;return t*this.portUsagePenalty+t*this.portUsagePenaltySq}isTransitionAllowed(e,t,n){if(!e.d.isPad)return!0;let o=(i)=>{let r=i.region1===e?i.region2:i.region1;return Boolean(r.d.isThroughJumper)};return o(t)||o(n)}computeIncreasedRegionCostIfPortsAreUsed(e,t,n){if(e.d.isPad){let i=(e.assignments??[]).filter((r)=>r.connection.mutuallyConnectedNetworkId!==this.currentConnection.mutuallyConnectedNetworkId).length;return i>0?i*this.crossingPenalty+i*this.crossingPenaltySq:0}let o=function(i,r,s){let a=P3t(i),c=[_8(r,i),_8(s,i)],l=0,d=i.assignments??[];for(let u of d)INe(c,[_8(u.regionPort1,i),_8(u.regionPort2,i)],a)&&l++;return l}(e,t,n);return o*this.crossingPenalty+o*this.crossingPenaltySq}getRipsRequiredForPortUsage(e,t,n){if(e.d.isPad)return(e.assignments??[]).filter((r)=>r.connection.mutuallyConnectedNetworkId!==this.currentConnection.mutuallyConnectedNetworkId);let o=function(r,s,a){let c=P3t(r),l=[_8(s,r),_8(a,r)],d=[],u=r.assignments??[];for(let h of u)INe(l,[_8(h.regionPort1,r),_8(h.regionPort2,r)],c)&&d.push(h);return d}(e,t,n),i=o.filter((r)=>r.connection.mutuallyConnectedNetworkId!==this.currentConnection.mutuallyConnectedNetworkId);if(!e.d.isThroughJumper)return i;for(let r of e.assignments??[])r.connection.mutuallyConnectedNetworkId!==this.currentConnection.mutuallyConnectedNetworkId&&i.push(r);return i}isRipRequiredForPortUsage(e,t,n){if(!e.d.isThroughJumper&&!e.d.isPad)return!1;for(let o of e.assignments??[])if(o.connection.mutuallyConnectedNetworkId!==this.currentConnection.mutuallyConnectedNetworkId)return!0;return!1}routeSolvedHook(e){}routeStartedHook(e){}visualize(){return QLo(this)}},YLo={padWidth:0.8,outerPadHeight:0.5,innerPadHeight:0.4,leftPadCenterX:-0.9,rightPadCenterX:0.9,row1CenterY:-1.2,row2CenterY:-0.4,row3CenterY:0.4,row4CenterY:1.2},VLo=({cols:e,rows:t,marginX:n,marginY:o,innerColChannelPointCount:i=1,innerRowChannelPointCount:r=1,regionsBetweenPads:s=!1,outerPaddingX:a=0.5,outerPaddingY:c=0.5,outerChannelXPointCount:l,outerChannelYPointCount:d,orientation:u="vertical",center:h,bounds:A,parallelTracesUnderJumperCount:m=2})=>{let p=[],g=[],{padWidth:_,outerPadHeight:f,innerPadHeight:y,leftPadCenterX:x,rightPadCenterX:C,row1CenterY:I,row2CenterY:b,row3CenterY:P,row4CenterY:E}=YLo,B=_/2,w=f/2,T=y/2,Q=C-x+_,N=Q+n,F=E-I+f,H=F+o,z=a,Y=c;if(A){let ie=e*Q+(e-1)*n,J=t*F+(t-1)*o;z=((u==="horizontal"?A.maxY-A.minY:A.maxX-A.minX)-ie)/2,Y=((u==="horizontal"?A.maxX-A.minX:A.maxY-A.minY)-J)/2}let U=l??Math.max(1,Math.floor(z/0.4)),X=d??Math.max(1,Math.floor(Y/0.4)),V=[],W=[],j=(ie,J,ee,se)=>({regionId:ie,ports:[],d:{bounds:J,center:bNe(J),isPad:ee,isThroughJumper:se}}),q=(ie,J,ee)=>{let se=J.d.bounds,le=ee.d.bounds,he,ue;Math.abs(se.maxX-le.minX)<0.001?(he=se.maxX,ue=(Math.max(se.minY,le.minY)+Math.min(se.maxY,le.maxY))/2):Math.abs(se.minX-le.maxX)<0.001?(he=se.minX,ue=(Math.max(se.minY,le.minY)+Math.min(se.maxY,le.maxY))/2):Math.abs(se.maxY-le.minY)<0.001?(he=(Math.max(se.minX,le.minX)+Math.min(se.maxX,le.maxX))/2,ue=se.maxY):(he=(Math.max(se.minX,le.minX)+Math.min(se.maxX,le.maxX))/2,ue=se.minY);let Ae={portId:ie,region1:J,region2:ee,d:{x:he,y:ue}};return J.ports.push(Ae),ee.ports.push(Ae),Ae},ne=(ie,J,ee,se)=>{if(se<=0)return[];if(se===1)return[q(ie,J,ee)];let le=J.d.bounds,he=ee.d.bounds,ue=[],Ae,_e,Pe,Ee;Math.abs(le.maxX-he.minX)<0.001?(Ae=!0,_e=le.maxX,Pe=Math.max(le.minY,he.minY),Ee=Math.min(le.maxY,he.maxY)):Math.abs(le.minX-he.maxX)<0.001?(Ae=!0,_e=le.minX,Pe=Math.max(le.minY,he.minY),Ee=Math.min(le.maxY,he.maxY)):Math.abs(le.maxY-he.minY)<0.001?(Ae=!1,_e=le.maxY,Pe=Math.max(le.minX,he.minX),Ee=Math.min(le.maxX,he.maxX)):(Ae=!1,_e=le.minY,Pe=Math.max(le.minX,he.minX),Ee=Math.min(le.maxX,he.maxX));for(let Te=0;Te<se;Te++){let be=Pe+(Te+0.5)/se*(Ee-Pe),me={portId:`${ie}:${Te}`,region1:J,region2:ee,d:{x:Ae?_e:be,y:Ae?be:_e}};J.ports.push(me),ee.ports.push(me),ue.push(me)}return ue};for(let ie=0;ie<t;ie++){V[ie]=[];for(let J=0;J<e;J++){let ee=`cell_${ie}_${J}`,se=J*N,le=-ie*H,he=se+x,ue=le+I,Ae=se+x,_e=le+b,Pe=se+x,Ee=le+P,Te=se+x,be=le+E,me=se+C,ye=le+E,Ce=se+C,ve=le+P,De=se+C,Ze=le+b,st=se+C,et=le+I,lt=(wo,wr,dr)=>({minX:wo-B,maxX:wo+B,minY:wr-dr,maxY:wr+dr}),it=lt(he,ue,w),gt=lt(Ae,_e,T),wt=lt(Pe,Ee,T),Dt=lt(Te,be,w),vt=lt(me,ye,w),Ht=lt(Ce,ve,T),Xt=lt(De,Ze,T),ut=lt(st,et,w),je={minX:it.maxX,maxX:ut.minX,minY:it.minY,maxY:Dt.maxY},Je={minX:he,maxX:st,minY:ue-0.15,maxY:ue+0.15},Ve={minX:Ae,maxX:De,minY:_e-0.15,maxY:_e+0.15},Ye={minX:Pe,maxX:Ce,minY:Ee-0.15,maxY:Ee+0.15},mt={minX:Te,maxX:me,minY:be-0.15,maxY:be+0.15},ft=it.minX,Oe=ut.maxX,qe=it.minY,rt=Dt.maxY,Ct=j(`${ee}:pad1`,it,!0),Mt=j(`${ee}:pad2`,gt,!0),Nt=j(`${ee}:pad3`,wt,!0),Ot=j(`${ee}:pad4`,Dt,!0),mn=j(`${ee}:pad5`,vt,!0),ln=j(`${ee}:pad6`,Ht,!0),Cn=j(`${ee}:pad7`,Xt,!0),vn=j(`${ee}:pad8`,ut,!0),nn=j(`${ee}:underjumper`,je,!1),on=j(`${ee}:throughjumper1`,Je,!1,!0),Kn=j(`${ee}:throughjumper2`,Ve,!1,!0),xo=j(`${ee}:throughjumper3`,Ye,!1,!0),ai=j(`${ee}:throughjumper4`,mt,!1,!0);p.push(Ct,Mt,Nt,Ot,mn,ln,Cn,vn,nn,on,Kn,xo,ai);let At=(he+st)/2,_t=(ue+be)/2;W.push({center:{x:At,y:_t},orientation:"vertical",padRegions:[Ct,Mt,Nt,Ot,mn,ln,Cn,vn]});let Tt=null,Ut=null,Lt=null,fn=null,On=null,Gn=null;s&&(Tt=j(`${ee}:L-BP12`,{minX:it.minX,maxX:it.maxX,minY:it.maxY,maxY:gt.minY},!1),Ut=j(`${ee}:L-BP23`,{minX:gt.minX,maxX:gt.maxX,minY:gt.maxY,maxY:wt.minY},!1),Lt=j(`${ee}:L-BP34`,{minX:wt.minX,maxX:wt.maxX,minY:wt.maxY,maxY:Dt.minY},!1),fn=j(`${ee}:R-BP87`,{minX:ut.minX,maxX:ut.maxX,minY:ut.maxY,maxY:Xt.minY},!1),On=j(`${ee}:R-BP76`,{minX:Xt.minX,maxX:Xt.maxX,minY:Xt.maxY,maxY:Ht.minY},!1),Gn=j(`${ee}:R-BP65`,{minX:Ht.minX,maxX:Ht.maxX,minY:Ht.maxY,maxY:vt.minY},!1),p.push(Tt,Ut,Lt,fn,On,Gn));let fo=J===0,Ho=ie===t-1,Vn=J===e-1,Wn;if(Vn)Wn=Oe+z;else Wn=(J+1)*N+x-B;let Co=null;ie===0&&(Co=j(`${ee}:T`,{minX:fo?ft-z:ft,maxX:Wn,minY:rt,maxY:rt+Y},!1),p.push(Co));let Eo=null;Eo=j(`${ee}:B`,{minX:fo?ft-z:ft,maxX:Wn,minY:qe-(Ho?Y:o),maxY:qe},!1),p.push(Eo);let In=null;fo&&(In=j(`${ee}:L`,{minX:ft-z,maxX:ft,minY:qe,maxY:rt},!1),p.push(In));let eo=j(`${ee}:R`,{minX:Oe,maxX:Wn,minY:qe,maxY:rt},!1);if(p.push(eo),V[ie][J]={pad1:Ct,pad2:Mt,pad3:Nt,pad4:Ot,pad5:mn,pad6:ln,pad7:Cn,pad8:vn,underjumper:nn,throughjumper1:on,throughjumper2:Kn,throughjumper3:xo,throughjumper4:ai,top:Co,bottom:Eo,left:In,right:eo,leftBP12:Tt,leftBP23:Ut,leftBP34:Lt,rightBP87:fn,rightBP76:On,rightBP65:Gn},Co)if(In&&g.push(...ne(`${ee}:T-L`,Co,In,U)),g.push(...ne(`${ee}:T-R`,Co,eo,Vn?U:i)),g.push(q(`${ee}:T-P4`,Co,Ot)),g.push(q(`${ee}:T-P5`,Co,mn)),s){let wo=nn.d.bounds,wr=(wo.maxX-wo.minX)/(m+1);for(let dr=1;dr<=m;dr++){let Yr={portId:`${ee}:T-UJ${dr}`,region1:Co,region2:nn,d:{x:wo.minX+wr*dr,y:wo.maxY}};Co.ports.push(Yr),nn.ports.push(Yr),g.push(Yr)}}else g.push(q(`${ee}:T-UJ`,Co,nn));if(Eo)if(In&&g.push(...ne(`${ee}:B-L`,Eo,In,U)),g.push(...ne(`${ee}:B-R`,Eo,eo,Vn?U:i)),g.push(q(`${ee}:B-P1`,Eo,Ct)),g.push(q(`${ee}:B-P8`,Eo,vn)),s){let wo=nn.d.bounds,wr=(wo.maxX-wo.minX)/(m+1);for(let dr=1;dr<=m;dr++){let Yr={portId:`${ee}:B-UJ${dr}`,region1:Eo,region2:nn,d:{x:wo.minX+wr*dr,y:wo.minY}};Eo.ports.push(Yr),nn.ports.push(Yr),g.push(Yr)}}else g.push(q(`${ee}:B-UJ`,Eo,nn));In&&(g.push(q(`${ee}:L-P1`,In,Ct)),g.push(q(`${ee}:L-P2`,In,Mt)),g.push(q(`${ee}:L-P3`,In,Nt)),g.push(q(`${ee}:L-P4`,In,Ot))),g.push(q(`${ee}:R-P5`,eo,mn)),g.push(q(`${ee}:R-P6`,eo,ln)),g.push(q(`${ee}:R-P7`,eo,Cn)),g.push(q(`${ee}:R-P8`,eo,vn)),s&&(In&&(g.push(q(`${ee}:L-BP12`,In,Tt)),g.push(q(`${ee}:L-BP23`,In,Ut)),g.push(q(`${ee}:L-BP34`,In,Lt))),g.push(q(`${ee}:UJ-LBP12`,Tt,nn)),g.push(q(`${ee}:UJ-LBP23`,Ut,nn)),g.push(q(`${ee}:UJ-LBP34`,Lt,nn)),g.push(q(`${ee}:R-BP87`,eo,fn)),g.push(q(`${ee}:R-BP76`,eo,On)),g.push(q(`${ee}:R-BP65`,eo,Gn)),g.push(q(`${ee}:UJ-RBP87`,fn,nn)),g.push(q(`${ee}:UJ-RBP76`,On,nn)),g.push(q(`${ee}:UJ-RBP65`,Gn,nn)));let co={portId:`${ee}:TJ1-P1`,region1:on,region2:Ct,d:{x:he,y:ue}};on.ports.push(co),Ct.ports.push(co),g.push(co);let $n={portId:`${ee}:TJ1-P8`,region1:on,region2:vn,d:{x:st,y:et}};on.ports.push($n),vn.ports.push($n),g.push($n);let zo={portId:`${ee}:TJ2-P2`,region1:Kn,region2:Mt,d:{x:Ae,y:_e}};Kn.ports.push(zo),Mt.ports.push(zo),g.push(zo);let qo={portId:`${ee}:TJ2-P7`,region1:Kn,region2:Cn,d:{x:De,y:Ze}};Kn.ports.push(qo),Cn.ports.push(qo),g.push(qo);let fi={portId:`${ee}:TJ3-P3`,region1:xo,region2:Nt,d:{x:Pe,y:Ee}};xo.ports.push(fi),Nt.ports.push(fi),g.push(fi);let Nr={portId:`${ee}:TJ3-P6`,region1:xo,region2:ln,d:{x:Ce,y:ve}};xo.ports.push(Nr),ln.ports.push(Nr),g.push(Nr);let bs={portId:`${ee}:TJ4-P4`,region1:ai,region2:Ot,d:{x:Te,y:be}};ai.ports.push(bs),Ot.ports.push(bs),g.push(bs);let Fs={portId:`${ee}:TJ4-P5`,region1:ai,region2:mn,d:{x:me,y:ye}};if(ai.ports.push(Fs),mn.ports.push(Fs),g.push(Fs),J>0){let wo=V[ie][J-1];g.push(q(`cell_${ie}_${J-1}->cell_${ie}_${J}:R-P1`,wo.right,Ct)),g.push(q(`cell_${ie}_${J-1}->cell_${ie}_${J}:R-P2`,wo.right,Mt)),g.push(q(`cell_${ie}_${J-1}->cell_${ie}_${J}:R-P3`,wo.right,Nt)),g.push(q(`cell_${ie}_${J-1}->cell_${ie}_${J}:R-P4`,wo.right,Ot)),s&&(g.push(q(`cell_${ie}_${J-1}->cell_${ie}_${J}:R-LBP12`,wo.right,Tt)),g.push(q(`cell_${ie}_${J-1}->cell_${ie}_${J}:R-LBP23`,wo.right,Ut)),g.push(q(`cell_${ie}_${J-1}->cell_${ie}_${J}:R-LBP34`,wo.right,Lt))),Co&&wo.top&&g.push(...ne(`cell_${ie}_${J-1}->cell_${ie}_${J}:T-T`,wo.top,Co,X)),Eo&&wo.bottom&&g.push(...ne(`cell_${ie}_${J-1}->cell_${ie}_${J}:B-B`,wo.bottom,Eo,Ho?X:r))}if(ie>0){let wo=V[ie-1][J];if(In&&g.push(...ne(`cell_${ie-1}_${J}->cell_${ie}_${J}:B-L`,wo.bottom,In,U)),g.push(q(`cell_${ie-1}_${J}->cell_${ie}_${J}:B-P4`,wo.bottom,Ot)),s){let wr=nn.d.bounds,dr=(wr.maxX-wr.minX)/(m+1);for(let Yr=1;Yr<=m;Yr++){let mc=wr.minX+dr*Yr,zc={portId:`cell_${ie-1}_${J}->cell_${ie}_${J}:B-UJ${Yr}`,region1:wo.bottom,region2:nn,d:{x:mc,y:wr.maxY}};wo.bottom.ports.push(zc),nn.ports.push(zc),g.push(zc)}}else g.push(q(`cell_${ie-1}_${J}->cell_${ie}_${J}:B-UJ`,wo.bottom,nn));g.push(q(`cell_${ie-1}_${J}->cell_${ie}_${J}:B-P5`,wo.bottom,mn)),g.push(...ne(`cell_${ie-1}_${J}->cell_${ie}_${J}:B-R`,wo.bottom,eo,Vn?U:i))}}}let ce={regions:p,ports:g,jumperLocations:W},oe=u==="horizontal";if(oe||h!==void 0||A!==void 0){let ie=WOt(ce.regions),J=bNe(ie),ee=[],se;se=h||(A?bNe(A):J),ee.push(FAe(se.x,se.y)),oe&&ee.push(function(he,ue,Ae){let _e=NLo(he),Pe=RLo(he),Ee={a:_e,c:-Pe,e:0,b:Pe,d:_e,f:0};return T3t(ue)||T3t(Ae)?Ee:GQe([FAe(ue,Ae),Ee,FAe(-ue,-Ae)])}(-Math.PI/2)),ee.push(FAe(-J.x,-J.y));let le=function(...he){return GQe(...he)}(...ee);ce=XOt(ce,le)}return ce},KOt=!0,Fee={CCW:-1,CW:1,NOT_ORIENTABLE:0},ULo=2*Math.PI,_ge=Object.freeze({__proto__:null,BOUNDARY:2,CCW:KOt,CONTAINS:3,CW:!1,END_VERTEX:2,INSIDE:1,INTERLACE:4,NOT_VERTEX:0,ORIENTATION:Fee,OUTSIDE:0,OVERLAP_OPPOSITE:2,OVERLAP_SAME:1,PIx2:ULo,START_VERTEX:1}),WE=0.000001;function jOt(e){WE=e}function qOt(){return WE}function YQe(e){return e<WE&&e>-WE}function rL(e,t){return e-t<WE&&e-t>-WE}function JOt(e,t){return e-t>WE}function $Ot(e,t){return e-t<-WE}var Le={Utils:Object.freeze({__proto__:null,DECIMALS:3,EQ:rL,EQ_0:YQe,GE:function(e,t){return e-t>-WE},GT:JOt,LE:function(e,t){return e-t<WE},LT:$Ot,getTolerance:qOt,setTolerance:jOt}),Errors:void 0,Matrix:void 0,Planar_set:void 0,Point:void 0,Vector:void 0,Line:void 0,Circle:void 0,Segment:void 0,Arc:void 0,Box:void 0,Edge:void 0,Face:void 0,Ray:void 0,Ray_shooting:void 0,Multiline:void 0,Polygon:void 0,Distance:void 0,Inversion:void 0};for(let e in _ge)Le[e]=_ge[e];Object.defineProperty(Le,"DP_TOL",{get:function(){return qOt()},set:function(e){jOt(e)}});var Xu=class{static get ILLEGAL_PARAMETERS(){return ReferenceError("Illegal Parameters")}static get ZERO_DIVISION(){return Error("Zero division")}static get UNRESOLVED_BOUNDARY_CONFLICT(){return Error("Unresolved boundary conflict in boolean operation")}static get INFINITE_LOOP(){return Error("Infinite loop")}static get CANNOT_COMPLETE_BOOLEAN_OPERATION(){return Error("Cannot complete boolean operation")}static get CANNOT_INVOKE_ABSTRACT_METHOD(){return Error("Abstract method cannot be invoked")}static get OPERATION_IS_NOT_SUPPORTED(){return Error("Operation is not supported")}static get UNSUPPORTED_SHAPE_TYPE(){return Error("Unsupported shape type")}};Le.Errors=Xu;var CHe=class{constructor(e,t){this.first=e,this.last=t||this.first}[Symbol.iterator](){let e;return{next:()=>(e=e?e.next:this.first,{value:e,done:e===void 0})}}get size(){let e=0;for(let t of this)e++;return e}toArray(e=void 0,t=void 0){let n=[],o=e||this.first,i=t||this.last,r=o;if(r===void 0)return n;do n.push(r),r=r.next;while(r!==i.next);return n}append(e){return this.isEmpty()?this.first=e:(e.prev=this.last,this.last.next=e),this.last=e,this.last.next=void 0,this.first.prev=void 0,this}insert(e,t){if(this.isEmpty())this.first=e,this.last=e;else if(t==null)e.next=this.first,this.first.prev=e,this.first=e;else{let n=t.next;t.next=e,n&&(n.prev=e),e.prev=t,e.next=n,this.last===t&&(this.last=e)}return this.last.next=void 0,this.first.prev=void 0,this}remove(e){return e===this.first&&e===this.last?(this.first=void 0,this.last=void 0):(e.prev&&(e.prev.next=e.next),e.next&&(e.next.prev=e.prev),e===this.first&&(this.first=e.next),e===this.last&&(this.last=e.prev)),this}isEmpty(){return this.first===void 0}static testInfiniteLoop(e){let t=e,n=e;do{if(t!=e&&t===n)throw Xu.INFINITE_LOOP;t=t.next,n=n.next.next}while(t!=e)}},D3t={stroke:"black"},WLo=class{constructor(e=D3t){for(let t in e)this[t]=e[t];this.stroke=e.stroke??D3t.stroke}toAttributesString(){return Object.keys(this).reduce((e,t)=>e+(this[t]!==void 0?this.toAttrString(t,this[t]):""),"")}toAttrString(e,t){let n=e==="className"?"class":this.convertCamelToKebabCase(e);return t===null?`${n} `:`${n}="${t.toString()}" `}convertCamelToKebabCase(e){return e.match(/[A-Z]{2,}(?=[A-Z][a-z]+[0-9]*|\b)|[A-Z]?[a-z]+[0-9]*|[A-Z]|[0-9]+/g).join("-").toLowerCase()}};function IL(e){return new WLo(e).toAttributesString()}function DU(e,t){let n=[],[o,i,r]=e.standard,[s,a,c]=t.standard,l=o*a-i*s,d=r*a-i*c,u=o*c-r*s;if(!Le.Utils.EQ_0(l)){let h,A;i===0?(h=r/o,A=u/l):a===0?(h=c/s,A=u/l):o===0?(h=d/l,A=r/i):s===0?(h=d/l,A=c/a):(h=d/l,A=u/l),n.push(new Le.Point(h,A))}return n}function bL(e,t){let n=[],o=t.pc.projectionOn(e),i=t.pc.distanceTo(o)[0];if(Le.Utils.EQ(i,t.r))n.push(o);else if(Le.Utils.LT(i,t.r)){let r,s,a=Math.sqrt(t.r*t.r-i*i);r=e.norm.rotate90CCW().multiply(a),s=o.translate(r),n.push(s),r=e.norm.rotate90CW().multiply(a),s=o.translate(r),n.push(s)}return n}function dU(e,t){let n=[];for(let o of t.toSegments()){let i=$te(o,e);for(let r of i)szt(r,n)||n.push(r)}return n}function wfe(e,t){let n=[];if(dU(e,t.box).length===0)return n;let o=bL(e,new Le.Circle(t.pc,t.r));for(let i of o)i.on(t)&&n.push(i);return n}function $te(e,t){let n=[];return e.ps.on(t)&&n.push(e.ps),e.pe.on(t)&&!e.isZeroLength()&&n.push(e.pe),n.length>0||e.isZeroLength()||e.ps.leftTo(t)&&e.pe.leftTo(t)||!e.ps.leftTo(t)&&!e.pe.leftTo(t)?n:DU(new Le.Line(e.ps,e.pe),t)}function gge(e,t){let n=[];if(e.isZeroLength())return e.ps.on(t)&&n.push(e.ps),n;if(t.isZeroLength())return t.ps.on(e)&&n.push(t.ps),n;let o=new Le.Line(e.ps,e.pe),i=new Le.Line(t.ps,t.pe);if(o.incidentTo(i))e.ps.on(t)&&n.push(e.ps),e.pe.on(t)&&n.push(e.pe),!t.ps.on(e)||t.ps.equalTo(e.ps)||t.ps.equalTo(e.pe)||n.push(t.ps),!t.pe.on(e)||t.pe.equalTo(e.ps)||t.pe.equalTo(e.pe)||n.push(t.pe);else{let r=DU(o,i);r.length>0&&N3t(r[0],e)&&N3t(r[0],t)&&n.push(r[0])}return n}function N3t(e,t){let n=t.box;return Le.Utils.LE(e.x,n.xmax)&&Le.Utils.GE(e.x,n.xmin)&&Le.Utils.LE(e.y,n.ymax)&&Le.Utils.GE(e.y,n.ymin)}function fge(e,t){let n=[];if(e.isZeroLength()){let[i,r]=e.ps.distanceTo(t.pc);return Le.Utils.EQ(i,t.r)&&n.push(e.ps),n}let o=bL(new Le.Line(e.ps,e.pe),t);for(let i of o)i.on(e)&&n.push(i);return n}function uU(e,t){let n=[];if(e.isZeroLength())return e.ps.on(t)&&n.push(e.ps),n;let o=bL(new Le.Line(e.ps,e.pe),new Le.Circle(t.pc,t.r));for(let i of o)i.on(e)&&i.on(t)&&n.push(i);return n}function ZOt(e,t){let n=[],o=new Le.Vector(e.pc,t.pc),i=e.r,r=t.r;if(Le.Utils.EQ_0(i)||Le.Utils.EQ_0(r))return n;if(Le.Utils.EQ_0(o.x)&&Le.Utils.EQ_0(o.y)&&Le.Utils.EQ(i,r))return n.push(e.pc.translate(-i,0)),n;let s,a=e.pc.distanceTo(t.pc)[0];if(Le.Utils.GT(a,i+r))return n;if(Le.Utils.LT(a,Math.abs(i-r)))return n;if(o.x/=a,o.y/=a,Le.Utils.EQ(a,i+r)||Le.Utils.EQ(a,Math.abs(i-r)))return s=e.pc.translate(i*o.x,i*o.y),n.push(s),n;let c=i*i/(2*a)-r*r/(2*a)+a/2,l=e.pc.translate(c*o.x,c*o.y),d=Math.sqrt(i*i-c*c);return s=l.translate(o.rotate90CCW().multiply(d)),n.push(s),s=l.translate(o.rotate90CW().multiply(d)),n.push(s),n}function ezt(e,t){let n=[];if(e.pc.equalTo(t.pc)&&Le.Utils.EQ(e.r,t.r)){let s;return s=e.start,s.on(t)&&n.push(s),s=e.end,s.on(t)&&n.push(s),s=t.start,s.on(e)&&n.push(s),s=t.end,s.on(e)&&n.push(s),n}let o=new Le.Circle(e.pc,e.r),i=new Le.Circle(t.pc,t.r),r=o.intersect(i);for(let s of r)s.on(e)&&s.on(t)&&n.push(s);return n}function IHe(e,t){let n=[];if(t.pc.equalTo(e.pc)&&Le.Utils.EQ(t.r,e.r))return n.push(e.start),n.push(e.end),n;let o=ZOt(t,new Le.Circle(e.pc,e.r));for(let i of o)i.on(e)&&n.push(i);return n}function tzt(e,t){return e.isSegment?gge(e.shape,t):uU(t,e.shape)}function nzt(e,t){return e.isSegment?uU(e.shape,t):ezt(e.shape,t)}function ozt(e,t){return e.isSegment?$te(e.shape,t):wfe(t,e.shape)}function XLo(e,t){return e.isSegment?fge(e.shape,t):IHe(e.shape,t)}function bHe(e,t){let n=[];for(let o of t.edges)for(let i of tzt(o,e))n.push(i);return n}function SHe(e,t){let n=[];for(let o of t.edges)for(let i of nzt(o,e))n.push(i);return n}function Zte(e,t){let n=[];if(t.isEmpty())return n;for(let o of t.edges)for(let i of ozt(o,e))szt(i,n)||n.push(i);return e.sortPoints(n)}function izt(e,t){let n=[];if(t.isEmpty())return n;for(let o of t.edges)for(let i of XLo(o,e))n.push(i);return n}function rzt(e,t){return e.isSegment?tzt(t,e.shape):e.isArc?nzt(t,e.shape):e.isLine?ozt(t,e.shape):e.isRay?(n=t,o=e.shape,n.isSegment?PHe(o,n.shape):vHe(o,n.shape)):[];var n,o}function R3t(e,t){let n=[];if(t.isEmpty()||e.shape.box.not_intersect(t.box))return n;let o=t.edges.search(e.shape.box);for(let i of o)n=[...n,...rzt(e,i)];return n}function szt(e,t){return t.some((n)=>n.equalTo(e))}function U8(e){return new Le.Line(e.start,e.norm)}function PHe(e,t){return $te(t,U8(e)).filter((n)=>e.contains(n))}function vHe(e,t){return wfe(U8(e),t).filter((n)=>e.contains(n))}function azt(e,t){return bL(U8(e),t).filter((n)=>e.contains(n))}function czt(e,t){return DU(U8(e),t).filter((n)=>e.contains(n))}function lzt(e,t){return Zte(U8(e),t).filter((n)=>e.contains(n))}function dzt(e,t){if(e.intersect&&e.intersect instanceof Function)return e.intersect(t);throw Xu.UNSUPPORTED_SHAPE_TYPE}function NU(e,t){let n=[];for(let o of t)n=[...n,...dzt(e,o.shape)];return n}var Fk=class e extends CHe{constructor(...t){if(super(),this.isInfinite=!1,t.length===1&&t[0]instanceof Array&&t[0].length>0){let n=t[0],o=n.length,i=(s)=>s instanceof Le.Segment||s instanceof Le.Arc||s instanceof Le.Ray,r=(s)=>s instanceof Le.Segment||s instanceof Le.Arc;if(!(o===1&&((s)=>s instanceof Le.Segment||s instanceof Le.Arc||s instanceof Le.Ray||s instanceof Le.Line)(n[0])||o>1&&i(n[0])&&i(n[o-1])&&n.slice(1,o-1).every(r)))throw Le.Errors.ILLEGAL_PARAMETERS;this.isInfinite=n.some((s)=>s instanceof Le.Ray||s instanceof Le.Line);for(let s of n){let a=new Le.Edge(s);this.append(a)}this.setArcLength()}}get edges(){return[...this]}get box(){return this.edges.reduce((t,n)=>t.merge(n.box),new Le.Box)}get vertices(){let t=this.edges.map((n)=>n.start);return t.push(this.last.end),t}get length(){if(this.isEmpty())return 0;if(this.isInfinite)return Number.POSITIVE_INFINITY;let t=0;for(let n of this)t+=n.length;return t}clone(){return new e(this.toShapes())}setArcLength(){for(let t of this)this.setOneEdgeArcLength(t)}setOneEdgeArcLength(t){t===this.first?t.arc_length=0:t.arc_length=t.prev.arc_length+t.prev.length}pointAtLength(t){if(t>this.length||t<0)return null;if(this.isInfinite)return null;let n=null;for(let o of this)if(t>=o.arc_length&&(o===this.last||t<o.next.arc_length)){n=o.pointAtLength(t-o.arc_length);break}return n}addVertex(t,n){let o=n.shape.split(t);if(o[0]===null)return n.prev;if(o[1]===null)return n;let i=new Le.Edge(o[0]),r=n.prev;return this.insert(i,r),n.shape=o[1],i}getChain(t,n){let o=[];for(let i=t;i!==n.next;i=i.next)o.push(i);return o}split(t){for(let n of t){let o=this.findEdgeByPoint(n);this.addVertex(n,o)}return this}findEdgeByPoint(t){let n;for(let o of this)if(o.shape.contains(t)){n=o;break}return n}distanceTo(t){if(t instanceof Point){let[n,o]=Le.Distance.shape2multiline(t,this);return[n,o.reverse()]}if(t instanceof Le.Line){let[n,o]=Le.Distance.shape2multiline(t,this);return[n,o.reverse()]}if(t instanceof Le.Circle){let[n,o]=Le.Distance.shape2multiline(t,this);return[n,o.reverse()]}if(t instanceof Le.Segment){let[n,o]=Le.Distance.shape2multiline(t,this);return[n,o.reverse()]}if(t instanceof Le.Arc){let[n,o]=Le.Distance.shape2multiline(t,this);return[n,o.reverse()]}if(t instanceof Le.Multiline)return Le.Distance.multiline2multiline(this,t);throw Le.Errors.UNSUPPORTED_SHAPE_TYPE}intersect(t){return t instanceof Le.Multiline?function(n,o){let i=[];for(let r of n)for(let s of o)i=[...i,...dzt(r.shape,s.shape)];return i}(this,t):NU(t,this)}contains(t){if(t instanceof Le.Point)return this.edges.some((n)=>n.shape.contains(t));throw Le.Errors.UNSUPPORTED_SHAPE_TYPE}translate(t){return new e(this.edges.map((n)=>n.shape.translate(t)))}rotate(t=0,n=new Le.Point){return new e(this.edges.map((o)=>o.shape.rotate(t,n)))}transform(t=new Le.Matrix){return new e(this.edges.map((n)=>n.shape.transform(t)))}toShapes(){return this.edges.map((t)=>t.shape.clone())}toJSON(){return this.edges.map((t)=>t.toJSON())}svgPoints(){return this.vertices.map((t)=>`${t.x},${t.y}`).join(" ")}dpath(){let t=`M${this.first.start.x},${this.first.start.y}`;for(let n of this)t+=n.svg();return t}svg(t={}){let n=`
<path ${IL({fill:"none",...t})} d="`;n+=`
M${this.first.start.x},${this.first.start.y}`;for(let o of this)n+=o.svg();return n+=`" >
</path>`,n}};Le.Multiline=Fk;function hU(e,t,n){let o=n.length,i=e.shape.split(t);if(i.length===0)return;let r=0;r=i[0]===null?0:i[1]===null?e.shape.length:i[0].length;let s,a=0;rL(r,0)&&(a|=1),rL(r,e.shape.length)&&(a|=2),s=r===1/0?i[0].coord(t):2&a&&e.next&&e.next.arc_length===0?0:e.arc_length+r,n.push({id:o,pt:t,arc_length:s,edge_before:e,edge_after:void 0,face:e.face,is_vertex:a})}function Ite(e){e.int_points1_sorted=M8(e.int_points1),e.int_points2_sorted=M8(e.int_points2)}function M8(e){let t=new Map,n=0;for(let o of e)t.has(o.face)||(t.set(o.face,n),n++);for(let o of e)o.faceId=t.get(o.face);return e.slice().sort(KLo)}function KLo(e,t){return e.faceId<t.faceId?-1:e.faceId>t.faceId?1:e.arc_length<t.arc_length?-1:e.arc_length>t.arc_length?1:0}function EHe(e){if(e.int_points1.length<2)return;let t,n,o,i,r=!1;for(let s=0;s<e.int_points1_sorted.length;s++)if(e.int_points1_sorted[s].id!==-1){t=e.int_points1_sorted[s],n=e.int_points2[t.id];for(let a=s+1;a<e.int_points1_sorted.length&&(o=e.int_points1_sorted[a],rL(o.arc_length,t.arc_length));a++)o.id!==-1&&(i=e.int_points2[o.id],i.id!==-1&&o.edge_before===t.edge_before&&o.edge_after===t.edge_after&&i.edge_before===n.edge_before&&i.edge_after===n.edge_after&&(o.id=-1,i.id=-1,r=!0))}n=e.int_points2_sorted[0],t=e.int_points1[n.id];for(let s=1;s<e.int_points2_sorted.length;s++){let a=e.int_points2_sorted[s];if(a.id===-1)continue;if(n.id===-1||!rL(a.arc_length,n.arc_length)){n=a,t=e.int_points1[n.id];continue}let c=e.int_points1[a.id];c.edge_before===t.edge_before&&c.edge_after===t.edge_after&&a.edge_before===n.edge_before&&a.edge_after===n.edge_after&&(c.id=-1,a.id=-1,r=!0)}r&&(e.int_points1=e.int_points1.filter((s)=>s.id>=0),e.int_points2=e.int_points2.filter((s)=>s.id>=0),e.int_points1.forEach((s,a)=>s.id=a),e.int_points2.forEach((s,a)=>s.id=a))}function VQe(e){for(let t of e)t.edge_before&&(t.edge_before.bvStart=void 0,t.edge_before.bvEnd=void 0,t.edge_before.bv=void 0,t.edge_before.overlap=void 0),t.edge_after&&(t.edge_after.bvStart=void 0,t.edge_after.bvEnd=void 0,t.edge_after.bv=void 0,t.edge_after.overlap=void 0);for(let t of e)t.edge_before&&(t.edge_before.bvEnd=2),t.edge_after&&(t.edge_after.bvStart=2)}function UQe(e,t){for(let n of e)n.edge_before&&n.edge_before.setInclusion(t),n.edge_after&&n.edge_after.setInclusion(t)}function mU(e,t,n){let o,i,r=1;if(e.length===1)return 1;o=e[t];for(let s=t+1;s<e.length&&o.face===n&&(i=e[s],i.pt.equalTo(o.pt)&&i.edge_before===o.edge_before&&i.edge_after===o.edge_after);s++)r++;return r}function pU(e,t){if(t){for(let n of t){let o=n.edge_before;if(n.is_vertex=0,o.shape.start&&o.shape.start.equalTo(n.pt)&&(n.is_vertex|=1),o.shape.end&&o.shape.end.equalTo(n.pt)&&(n.is_vertex|=2),1&n.is_vertex){n.edge_before=o.prev,o.prev&&(n.is_vertex=2);continue}if(2&n.is_vertex)continue;let i=e.addVertex(n.pt,o);n.edge_before=i}for(let n of t)n.edge_before?n.edge_after=n.edge_before.next:e instanceof Fk&&1&n.is_vertex&&(n.edge_after=e.first)}}function Q3t(e,t,n){let o=e.edge_before,i=t.edge_after,r=n.length;o.next=n[0],n[0].prev=o,n[r-1].next=i,i.prev=n[r-1]}Le.multiline=(...e)=>new Le.Multiline(...e);var{INSIDE:wE,OUTSIDE:TE,BOUNDARY:LA,OVERLAP_SAME:jLo,OVERLAP_OPPOSITE:qLo}=_ge,{NOT_VERTEX:tGr,START_VERTEX:k3t,END_VERTEX:L3t}=_ge;function WQe(e,t){let n=t.clone().reverse(),[o,i]=ene(e,n,3,!0);return o}function uzt(e,t){let[n,o]=ene(e,t,2,!0);return n}function hzt(e,t){let[n,o]=ene(e,t,2,!1),i=[];for(let s of n.faces)i=[...i,...[...s.edges].map((a)=>a.shape)];let r=[];for(let s of o.faces)r=[...r,...[...s.edges].map((a)=>a.shape)];return[i,r]}function XQe(e,t){let[n,o]=ene(e,t,3,!1),i=[];for(let r of n.faces)i=[...i,...[...r.edges].map((s)=>s.shape)];return i}function mzt(e,t){let n=e.clone(),o=t.clone(),i=pzt(n,o);return Ite(i),pU(n,i.int_points1_sorted),pU(o,i.int_points2_sorted),EHe(i),Ite(i),[i.int_points1_sorted.map((r)=>r.pt),i.int_points2_sorted.map((r)=>r.pt)]}function JLo(e,t,n,o){let i=F3t(e,n.int_points1),r=F3t(t,n.int_points2);for(H3t(i,t),H3t(r,e),VQe(n.int_points1),VQe(n.int_points2),UQe(n.int_points1,t),UQe(n.int_points2,e);$Lo(e,t,n.int_points1,n.int_points1_sorted,n.int_points2,n););(function(s){let a,c,l,d=s.int_points1.length;for(let u=0;u<d;u++){let h=s.int_points1_sorted[u];h.face!==a&&(c=u,a=h.face);let A,m=u,p=mU(s.int_points1_sorted,u,a);A=m+p<d&&s.int_points1_sorted[m+p].face===a?m+p:c;let g=mU(s.int_points1_sorted,A,a);l=null;for(let b=A;b<A+g;b++){let P=s.int_points1_sorted[b];if(P.face===a&&s.int_points2[P.id].face===s.int_points2[h.id].face){l=P;break}}if(l===null)continue;let _=h.edge_after,f=l.edge_before;if(_.bv!==2||f.bv!==2)continue;if(_!==f)continue;let y=s.int_points2[h.id],x=s.int_points2[l.id],C=y.edge_after,I=x.edge_before;C.bv===2&&I.bv===2&&C===I||(y=s.int_points2[l.id],x=s.int_points2[h.id],C=y.edge_after,I=x.edge_before),C.bv===2&&I.bv===2&&C===I&&_.setOverlap(C)}})(n),KQe(e,o,n.int_points1_sorted,!0),KQe(t,o,n.int_points2_sorted,!1),O3t(e,i,o,!0),O3t(t,r,o,!1)}function ene(e,t,n,o){let i=e.clone(),r=t.clone(),s=pzt(i,r);return Ite(s),pU(i,s.int_points1_sorted),pU(r,s.int_points2_sorted),EHe(s),Ite(s),JLo(i,r,s,n),o&&function(a,c,l){(function(d,u,h,A){for(let m of u.faces){for(let p of m)d.edges.add(p);A.find((p)=>p.face===m)===void 0&&d.addFace(m.first,m.last)}})(a,c,0,l.int_points2),function(d,u,h){if(h.int_points1.length!==0)for(let A=0;A<h.int_points1.length;A++){let m=h.int_points1[A],p=h.int_points2[A];if(m.edge_before!==void 0&&m.edge_after===void 0&&p.edge_before===void 0&&p.edge_after!==void 0&&(m.edge_before.next=p.edge_after,p.edge_after.prev=m.edge_before,m.edge_after=p.edge_after,p.edge_before=m.edge_before),p.edge_before!==void 0&&p.edge_after===void 0&&m.edge_before===void 0&&m.edge_after!==void 0&&(p.edge_before.next=m.edge_after,m.edge_after.prev=p.edge_before,p.edge_after=m.edge_after,m.edge_before=p.edge_before),m.edge_before!==void 0&&m.edge_after===void 0)for(let g of h.int_points1_sorted)g!==m&&g.edge_before===void 0&&g.edge_after!==void 0&&g.pt.equalTo(m.pt)&&(m.edge_before.next=g.edge_after,g.edge_after.prev=m.edge_before,m.edge_after=g.edge_after,g.edge_before=m.edge_before);if(p.edge_before!==void 0&&p.edge_after===void 0)for(let g of h.int_points2_sorted)g!==p&&g.edge_before===void 0&&g.edge_after!==void 0&&g.pt.equalTo(p.pt)&&(p.edge_before.next=g.edge_after,g.edge_after.prev=p.edge_before,p.edge_after=g.edge_after,g.edge_before=p.edge_before)}}(0,0,l),jQe(a,l.int_points1),jQe(c,l.int_points2),qQe(a,l.int_points1,l.int_points2),qQe(a,l.int_points2,l.int_points1)}(i,r,s),[i,r]}function pzt(e,t){let n={int_points1:[],int_points2:[]};for(let o of e.edges){let i=t.edges.search(o.box);for(let r of i){let s=o.shape.intersect(r.shape);for(let a of s)hU(o,a,n.int_points1),hU(r,a,n.int_points2)}}return n}function F3t(e,t){let n=[];for(let o of e.faces)t.find((i)=>i.face===o)||n.push(o);return n}function H3t(e,t){for(let n of e)n.first.bv=n.first.bvStart=n.first.bvEnd=void 0,n.first.setInclusion(t)}function $Lo(e,t,n,o,i,r){let s,a,c,l=o.length,d=!1;for(let u=0;u<l;u++){let h=o[u];h.face!==s&&(a=u,s=h.face);let A,m=u,p=mU(o,u,s);A=m+p<l&&o[m+p].face===s?m+p:a;let g=mU(o,A,s);c=null;for(let y=A;y<A+g;y++){let x=o[y];if(x.face===s&&i[x.id].face===i[h.id].face){c=x;break}}if(c===null)continue;let _=h.edge_after,f=c.edge_before;if(_.bv!==LA||f.bv==LA)if(_.bv==LA||f.bv!==LA){if(_.bv===LA&&f.bv===LA&&_!=f||_.bv===wE&&f.bv===TE||_.bv===TE&&f.bv===wE){let y=_.next;for(;y!=f;)y.bvStart=void 0,y.bvEnd=void 0,y.bv=void 0,y.setInclusion(t),y=y.next}if(_.bv===LA&&f.bv===LA&&_!=f){let y,x=_.next;for(;x!=f;){if(x.bv!=LA){if(y===void 0)y=x.bv;else if(x.bv!=y)throw Xu.UNRESOLVED_BOUNDARY_CONFLICT}x=x.next}y!=null&&(_.bv=y,f.bv=y);continue}if(_.bv===wE&&f.bv===TE||_.bv===TE&&f.bv===wE){let y=_;for(;y!=f;){if(y.bvStart===_.bv&&y.bvEnd===f.bv){let[x,C]=y.shape.distanceTo(t);if(x<10*Le.DP_TOL){hU(y,C.ps,n);let I=n[n.length-1];if(I.is_vertex&k3t)I.edge_after=y,I.edge_before=y.prev,y.bvStart=LA,y.bv=void 0,y.setInclusion(t);else if(I.is_vertex&L3t)I.edge_after=y.next,y.bvEnd=LA,y.bv=void 0,y.setInclusion(t);else{let E=t.addVertex(I.pt,y);I.edge_before=E,I.edge_after=E.next,E.setInclusion(t),E.next.bvStart=LA,E.next.bvEnd=void 0,E.next.bv=void 0,E.next.setInclusion(t)}let b=t.findEdgeByPoint(C.pe);hU(b,C.pe,i);let P=i[i.length-1];if(P.is_vertex&k3t)P.edge_after=b,P.edge_before=b.prev;else if(P.is_vertex&L3t)P.edge_after=b.next;else{let E=i.find((w)=>w.edge_after===b),B=t.addVertex(P.pt,b);P.edge_before=B,P.edge_after=B.next,E&&(E.edge_after=B),B.bvStart=void 0,B.bvEnd=LA,B.bv=void 0,B.setInclusion(e),B.next.bvStart=LA,B.next.bvEnd=void 0,B.next.bv=void 0,B.next.setInclusion(e)}Ite(r),d=!0;break}}y=y.next}if(d)break;throw Xu.UNRESOLVED_BOUNDARY_CONFLICT}}else f.bv=_.bv;else _.bv=f.bv}return d}function KQe(e,t,n,o){if(!n)return;let i,r,s,a;for(let c=0;c<n.length;c++){if(s=n[c],s.face!==i&&(r=c,i=s.face),i.isEmpty())continue;let l,d=c,u=mU(n,c,i);l=d+u<n.length&&n[d+u].face===s.face?d+u:r,a=n[l];let h=l,A=mU(n,h,i),m=s.edge_after,p=a.edge_before;if(m.bv===wE&&p.bv===wE&&t===1||m.bv===TE&&p.bv===TE&&t===2||(m.bv===TE||p.bv===TE)&&t===3&&!o||(m.bv===wE||p.bv===wE)&&t===3&&o||m.bv===LA&&p.bv===LA&&m.overlap&jLo&&o||m.bv===LA&&p.bv===LA&&m.overlap&qLo){e.removeChain(i,m,p);for(let g=d;g<d+u;g++)n[g].edge_after=void 0;for(let g=h;g<h+A;g++)n[g].edge_before=void 0}c+=u-1}}function jQe(e,t){for(let n of t)e.faces.delete(n.face),n.face=void 0,n.edge_before&&(n.edge_before.face=void 0),n.edge_after&&(n.edge_after.face=void 0)}function qQe(e,t,n){for(let o of t){if(o.edge_before===void 0||o.edge_after===void 0)continue;if(o.face)continue;if(o.edge_after.face||o.edge_before.face)continue;let{edge_after:i,edge_before:r}=o;try{CHe.testInfiniteLoop(i)}catch(a){throw Xu.CANNOT_COMPLETE_BOOLEAN_OPERATION}let s=e.addFace(i,r);for(let a of t)a.edge_before&&a.edge_after&&a.edge_before.face===s&&a.edge_after.face===s&&(a.face=s);for(let a of n)a.edge_before&&a.edge_after&&a.edge_before.face===s&&a.edge_after.face===s&&(a.face=s)}}function O3t(e,t,n,o){for(let i of t){let r=i.first.bv;(n===1&&r===wE||n===3&&r===wE&&o||n===3&&r===TE&&!o||n===2&&r===TE)&&e.deleteFace(i)}}var ZLo=Object.freeze({__proto__:null,BOOLEAN_INTERSECT:2,BOOLEAN_SUBTRACT:3,BOOLEAN_UNION:1,calculateIntersections:mzt,innerClip:hzt,intersect:uzt,outerClip:XQe,removeNotRelevantChains:KQe,removeOldFaces:jQe,restoreFaces:qQe,subtract:WQe,unify:function(e,t){let[n,o]=ene(e,t,1,!0);return n}}),eFo=RegExp("T.F..FFF.|T.F...F.."),tFo=RegExp("T........|.T.......|...T.....|....T...."),nFo=RegExp("FT.......|F..T.....|F...T...."),oFo=RegExp("T.F..F..."),iFo=RegExp("T.F..F...|.TF..F...|..FT.F...|..F.TF..."),pV=class{constructor(){this.m=[,,,,,,,,,].fill(void 0)}get I2I(){return this.m[0]}set I2I(e){this.m[0]=e}get I2B(){return this.m[1]}set I2B(e){this.m[1]=e}get I2E(){return this.m[2]}set I2E(e){this.m[2]=e}get B2I(){return this.m[3]}set B2I(e){this.m[3]=e}get B2B(){return this.m[4]}set B2B(e){this.m[4]=e}get B2E(){return this.m[5]}set B2E(e){this.m[5]=e}get E2I(){return this.m[6]}set E2I(e){this.m[6]=e}get E2B(){return this.m[7]}set E2B(e){this.m[7]=e}get E2E(){return this.m[8]}set E2E(e){this.m[8]=e}toString(){return this.m.map((e)=>e instanceof Array&&e.length>0?"T":e instanceof Array&&e.length===0?"F":"*").join("")}equal(){return eFo.test(this.toString())}intersect(){return tFo.test(this.toString())}touch(){return nFo.test(this.toString())}inside(){return oFo.test(this.toString())}covered(){return iFo.test(this.toString())}};function Hee(e,t){let n,o=new Le.Ray(t),i=new Le.Line(o.pt,o.norm),r=new Le.Box(o.box.xmin-Le.DP_TOL,o.box.ymin-Le.DP_TOL,o.box.xmax+Le.DP_TOL,o.box.ymax+Le.DP_TOL);if(e.box.not_intersect(r))return Le.OUTSIDE;let s=e.edges.search(r);if(s.length===0)return Le.OUTSIDE;for(let d of s)if(d.shape.contains(t))return Le.BOUNDARY;let a=[...e.faces],c=[];for(let d of s)for(let u of o.intersect(d.shape)){if(u.equalTo(t))return Le.BOUNDARY;c.push({pt:u,edge:d,face_index:a.indexOf(d.face)})}c.sort((d,u)=>$Ot(d.pt.x,u.pt.x)?-1:JOt(d.pt.x,u.pt.x)?1:d.face_index<u.face_index?-1:d.face_index>u.face_index?1:d.edge.arc_length<u.edge.arc_length?-1:d.edge.arc_length>u.edge.arc_length?1:0);let l=0;for(let d=0;d<c.length;d++){let u=c[d];if(u.pt.equalTo(u.edge.shape.start)){if(d>0&&u.pt.equalTo(c[d-1].pt)&&u.face_index===c[d-1].face_index&&u.edge.prev===c[d-1].edge)continue;let h=u.edge.prev;for(;YQe(h.length);)h=h.prev;let A=h.shape.tangentInEnd(),m=u.pt.translate(A),p=u.edge.shape.tangentInStart(),g=u.pt.translate(p),_=m.leftTo(i),f=g.leftTo(i);(_&&!f||!_&&f)&&l++}else if(u.pt.equalTo(u.edge.shape.end)){if(d>0&&u.pt.equalTo(c[d-1].pt)&&u.face_index===c[d-1].face_index&&u.edge.next===c[d-1].edge)continue;let h=u.edge.next;for(;YQe(h.length);)h=h.next;let A=h.shape.tangentInStart(),m=u.pt.translate(A),p=u.edge.shape.tangentInEnd(),g=u.pt.translate(p),_=m.leftTo(i),f=g.leftTo(i);(_&&!f||!_&&f)&&l++}else if(u.edge.shape instanceof Le.Segment)l++;else{let h=u.edge.shape.box;rL(u.pt.y,h.ymin)||rL(u.pt.y,h.ymax)||l++}}return n=l%2==1?1:0,n}function z3t(e,t){return NV(e,t).intersect()}function G3t(e,t){return NV(e,t).inside()}function Azt(e,t){return NV(e,t).covered()}function _zt(e,t){return Azt(t,e)}function NV(e,t){return e instanceof Le.Line&&t instanceof Le.Line?function(n,o){let i=new pV,r=DU(n,o);return r.length===0?n.contains(o.pt)&&o.contains(n.pt)?(i.I2I=[n],i.I2E=[],i.E2I=[]):(i.I2I=[],i.I2E=[n],i.E2I=[o]):(i.I2I=r,i.I2E=n.split(r),i.E2I=o.split(r)),i}(e,t):e instanceof Le.Line&&t instanceof Le.Circle?function(n,o){let i=new pV,r=bL(n,o);if(r.length===0)i.I2I=[],i.I2B=[],i.I2E=[n],i.E2I=[o];else if(r.length===1)i.I2I=[],i.I2B=r,i.I2E=n.split(r),i.E2I=[o];else{let s=new Fk([n]),a=n.sortPoints(r);s.split(a);let c=s.toShapes();i.I2I=[c[1]],i.I2B=a,i.I2E=[c[0],c[2]],i.E2I=new Le.Polygon([o.toArc()]).cutWithLine(n)}return i}(e,t):e instanceof Le.Line&&t instanceof Le.Box?function(n,o){let i=new pV,r=dU(n,o);if(r.length===0)i.I2I=[],i.I2B=[],i.I2E=[n],i.E2I=[o];else if(r.length===1)i.I2I=[],i.I2B=r,i.I2E=n.split(r),i.E2I=[o];else{let s=new Fk([n]),a=n.sortPoints(r);s.split(a);let c=s.toShapes();o.toSegments().some((l)=>l.contains(r[0])&&l.contains(r[1]))?(i.I2I=[],i.I2B=[c[1]],i.I2E=[c[0],c[2]],i.E2I=[o]):(i.I2I=[c[1]],i.I2B=a,i.I2E=[c[0],c[2]],i.E2I=new Le.Polygon(o.toSegments()).cutWithLine(n))}return i}(e,t):e instanceof Le.Line&&t instanceof Le.Polygon?function(n,o){let i=new pV,r=Zte(n,o),s=new Fk([n]),a=r.length>0?r.slice():n.sortPoints(r);return s.split(a),[...s].forEach((c)=>c.setInclusion(o)),i.I2I=[...s].filter((c)=>c.bv===Le.INSIDE).map((c)=>c.shape),i.I2B=[...s].slice(1).map((c)=>c.bv===Le.BOUNDARY?c.shape:c.shape.start),i.I2E=[...s].filter((c)=>c.bv===Le.OUTSIDE).map((c)=>c.shape),i.E2I=o.cutWithLine(n),i}(e,t):(e instanceof Le.Segment||e instanceof Le.Arc)&&t instanceof Le.Polygon?Y3t(e,t):(e instanceof Le.Segment||e instanceof Le.Arc)&&(t instanceof Le.Circle||t instanceof Le.Box)?Y3t(e,new Le.Polygon(t)):e instanceof Le.Polygon&&t instanceof Le.Polygon?HAe(e,t):(e instanceof Le.Circle||e instanceof Le.Box)&&(t instanceof Le.Circle||t instanceof Le.Box)?HAe(new Le.Polygon(e),new Le.Polygon(t)):(e instanceof Le.Circle||e instanceof Le.Box)&&t instanceof Le.Polygon?HAe(new Le.Polygon(e),t):e instanceof Le.Polygon&&(t instanceof Le.Circle||t instanceof Le.Box)?HAe(e,new Le.Polygon(t)):void 0}function Y3t(e,t){let n=new pV,o=function(s,a){return s instanceof Le.Line?Zte(s,a):s instanceof Le.Segment?bHe(s,a):s instanceof Le.Arc?SHe(s,a):[]}(e,t),i=o.length>0?o.slice():e.sortPoints(o),r=new Fk([e]);r.split(i),[...r].forEach((s)=>s.setInclusion(t)),n.I2I=[...r].filter((s)=>s.bv===Le.INSIDE).map((s)=>s.shape),n.I2B=[...r].slice(1).map((s)=>s.bv===Le.BOUNDARY?s.shape:s.shape.start),n.I2E=[...r].filter((s)=>s.bv===Le.OUTSIDE).map((s)=>s.shape),n.B2I=[],n.B2B=[],n.B2E=[];for(let s of[e.start,e.end])switch(Hee(t,s)){case Le.INSIDE:n.B2I.push(s);break;case Le.BOUNDARY:n.B2B.push(s);break;case Le.OUTSIDE:n.B2E.push(s)}return n}function HAe(e,t){let n=new pV,[o,i]=mzt(e,t),r=uzt(e,t),s=WQe(e,t),a=WQe(t,e),[c,l]=hzt(e,t),d=XQe(e,t),u=XQe(t,e);return n.I2I=r.isEmpty()?[]:[r],n.I2B=l,n.I2E=s.isEmpty()?[]:[s],n.B2I=c,n.B2B=o,n.B2E=d,n.E2I=a.isEmpty()?[]:[a],n.E2B=u,n}var rFo=Object.freeze({__proto__:null,contain:function(e,t){return G3t(t,e)},cover:_zt,covered:Azt,disjoint:function(e,t){return!z3t(e,t)},equal:function(e,t){return NV(e,t).equal()},inside:G3t,intersect:z3t,relate:NV,touch:function(e,t){return NV(e,t).touch()}}),Oee=class e{constructor(t=1,n=0,o=0,i=1,r=0,s=0){this.a=t,this.b=n,this.c=o,this.d=i,this.tx=r,this.ty=s}fromMatrix3x3(t){let[n,o,i]=t[0],[r,s,a]=t[1];return new e(n,r,o,s,i,a)}toMatrix3x3(){return[[this.a,this.c,this.tx],[this.b,this.d,this.ty],[0,0,1]]}clone(){return new e(this.a,this.b,this.c,this.d,this.tx,this.ty)}transform(t){return[t[0]*this.a+t[1]*this.c+this.tx,t[0]*this.b+t[1]*this.d+this.ty]}multiply(t){return new e(this.a*t.a+this.c*t.b,this.b*t.a+this.d*t.b,this.a*t.c+this.c*t.d,this.b*t.c+this.d*t.d,this.a*t.tx+this.c*t.ty+this.tx,this.b*t.tx+this.d*t.ty+this.ty)}translate(...t){let n,o;if(t.length!=1||isNaN(t[0].x)||isNaN(t[0].y)){if(t.length!==2||typeof t[0]!="number"||typeof t[1]!="number")throw Xu.ILLEGAL_PARAMETERS;n=t[0],o=t[1]}else n=t[0].x,o=t[0].y;return this.multiply(new e(1,0,0,1,n,o))}rotate(t,n=0,o=0){let i=Math.cos(t),r=Math.sin(t);return this.translate(n,o).multiply(new e(i,r,-r,i,0,0)).translate(-n,-o)}scale(t,n){return this.multiply(new e(t,0,0,n,0,0))}equalTo(t){return!!Le.Utils.EQ(this.tx,t.tx)&&(!!Le.Utils.EQ(this.ty,t.ty)&&(!!Le.Utils.EQ(this.a,t.a)&&(!!Le.Utils.EQ(this.b,t.b)&&(!!Le.Utils.EQ(this.c,t.c)&&!!Le.Utils.EQ(this.d,t.d)))))}};Le.Matrix=Oee;Le.matrix=(...e)=>new Le.Matrix(...e);var sFo=class{constructor(e,t){this.low=e,this.high=t}get max(){return this.clone()}less_than(e){return this.low<e.low||this.low===e.low&&this.high<e.high}equal_to(e){return this.low===e.low&&this.high===e.high}intersect(e){return!this.not_intersect(e)}not_intersect(e){return this.high<e.low||e.high<this.low}merge(e){let t=this.low===void 0?e.low:this.low<e.low?this.low:e.low,n=this.high===void 0?e.high:this.high>e.high?this.high:e.high,o=this.clone();return o.low=t,o.high=n,o}output(){return[this.low,this.high]}comparable_less_than(e,t){return e<t}},aFo=class e extends sFo{clone(){return new e(this.low,this.high)}},g8=class{constructor(e,t,n=null,o=null,i=null,r=0){if(this.left=n,this.right=o,this.parent=i,this.color=r,this.item={key:void 0,values:[]},t!==void 0&&this.item.values.push(t),e!==void 0)if(Array.isArray(e)){let[s,a]=e;if(!Number.isNaN(s)&&!Number.isNaN(a)){let c=s,l=a;c>l&&([c,l]=[l,c]),this.item.key=new aFo(c,l)}}else this.item.key=e;this.max=this.item.key?this.item.key.max:void 0}isNil(){return this.item.key===void 0&&this.item.values.length===0&&this.left===null&&this.right===null&&this.color===0}requireKey(){if(!this.item.key)throw Error("Node key is undefined (nil/sentinel). Operation is not applicable.");return this.item.key}less_than(e){let t=this.requireKey(),n=e.requireKey();return t.less_than(n)}_value_equal(e){let t=this.item.values[0],n=e.item.values[0];return t&&n&&t.equal_to?t.equal_to(n):t===n}equal_to(e){let t=this.requireKey(),n=e.requireKey();return t.equal_to(n)}intersect(e){let t=this.requireKey(),n=e.requireKey();return t.intersect(n)}copy_data(e){this.item.key=e.item.key,this.item.values=e.item.values.slice()}update_max(){this.max=this.item.key?this.item.key.max:void 0,this.right&&this.right.max&&(this.max=this.max?this.max.merge(this.right.max):this.right.max),this.left&&this.left.max&&(this.max=this.max?this.max.merge(this.left.max):this.left.max)}not_intersect_left_subtree(e){if(!this.left)return!0;let t=this.left.max?this.left.max.high:this.left.item.key.high,n=this.requireKey(),o=e.requireKey();return n.comparable_less_than(t,o.low)}not_intersect_right_subtree(e){if(!this.right)return!0;let t=this.right.max?this.right.max.low:this.right.item.key.low,n=this.requireKey(),o=e.requireKey();return n.comparable_less_than(o.high,t)}},JQe=class e{constructor(){this.root=null,this.nil_node=new g8}get size(){let t=0;return this.tree_walk(this.root,(n)=>t+=n.item.values.length),t}get keys(){let t=[];return this.tree_walk(this.root,(n)=>t.push(n.item.key.output())),t}get values(){let t=[];return this.tree_walk(this.root,(n)=>{for(let o of n.item.values)t.push(o)}),t}get items(){let t=[];return this.tree_walk(this.root,(n)=>{let o=n.item.key.output();for(let i of n.item.values)t.push({key:o,value:i})}),t}isEmpty(){return this.root==null||this.root===this.nil_node}clear(){this.root=null}insert(t,n=t){if(t===void 0)return;let o=this.tree_search(this.root,new g8(t));if(o)return o.item.values.push(n),o;let i=new g8(t,n,this.nil_node,this.nil_node,null,1);return this.tree_insert(i),this.recalc_max(i),i}exist(t,n=t){let o=this.tree_search(this.root,new g8(t));return!!o&&(arguments.length<2||n===t||o.item.values.some((i)=>i&&i.equal_to?i.equal_to(n):i===n))}remove(t,n=t){let o=this.tree_search(this.root,new g8(t));if(!o)return;if(arguments.length<2)return this.tree_delete(o),o;let i=o.item.values.findIndex((r)=>r&&r.equal_to?r.equal_to(n):r===n);return i>=0?(o.item.values.splice(i,1),o.item.values.length===0&&this.tree_delete(o),o):void 0}search(t,n=(o,i)=>o===i?i.output():o){let o=new g8(t),i=[];this.tree_search_interval(this.root,o,i);let r=[];for(let s of i)for(let a of s.item.values)r.push(n(a,s.item.key));return r}intersect_any(t){let n=new g8(t);return this.tree_find_any_interval(this.root,n)}forEach(t){this.tree_walk(this.root,(n)=>{for(let o of n.item.values)t(n.item.key,o)})}map(t){let n=new e;return this.tree_walk(this.root,(o)=>{for(let i of o.item.values)n.insert(o.item.key,t(i,o.item.key))}),n}*iterate(t,n=(o,i)=>o===i?i.output():o){let o=null;for(t?o=this.tree_search_nearest_forward(this.root,new g8(t)):this.root&&(o=this.local_minimum(this.root));o;){for(let i of o.item.values)yield n(i,o.item.key);o=this.tree_successor(o)}}recalc_max(t){let n=t;for(;n.parent!=null;)n.parent.update_max(),n=n.parent}tree_insert(t){let n=this.root,o=null;if(this.root==null||this.root===this.nil_node)this.root=t;else{for(;n!==this.nil_node;)o=n,n=t.less_than(n)?n.left:n.right;t.parent=o,t.less_than(o)?o.left=t:o.right=t}this.insert_fixup(t)}insert_fixup(t){let n,o;for(n=t;n!==this.root&&n.parent.color===1;)n.parent===n.parent.parent.left?(o=n.parent.parent.right,o.color===1?(n.parent.color=0,o.color=0,n.parent.parent.color=1,n=n.parent.parent):(n===n.parent.right&&(n=n.parent,this.rotate_left(n)),n.parent.color=0,n.parent.parent.color=1,this.rotate_right(n.parent.parent))):(o=n.parent.parent.left,o.color===1?(n.parent.color=0,o.color=0,n.parent.parent.color=1,n=n.parent.parent):(n===n.parent.left&&(n=n.parent,this.rotate_right(n)),n.parent.color=0,n.parent.parent.color=1,this.rotate_left(n.parent.parent)));this.root.color=0}tree_delete(t){let n,o;n=t.left===this.nil_node||t.right===this.nil_node?t:this.tree_successor(t),o=n.left!==this.nil_node?n.left:n.right,o.parent=n.parent,n===this.root?this.root=o:(n===n.parent.left?n.parent.left=o:n.parent.right=o,n.parent.update_max()),this.recalc_max(o),n!==t&&(t.copy_data(n),t.update_max(),this.recalc_max(t)),n.color===0&&this.delete_fixup(o)}delete_fixup(t){let n,o=t;for(;o!==this.root&&o.parent!=null&&o.color===0;)o===o.parent.left?(n=o.parent.right,n.color===1&&(n.color=0,o.parent.color=1,this.rotate_left(o.parent),n=o.parent.right),n.left.color===0&&n.right.color===0?(n.color=1,o=o.parent):(n.right.color===0&&(n.color=1,n.left.color=0,this.rotate_right(n),n=o.parent.right),n.color=o.parent.color,o.parent.color=0,n.right.color=0,this.rotate_left(o.parent),o=this.root)):(n=o.parent.left,n.color===1&&(n.color=0,o.parent.color=1,this.rotate_right(o.parent),n=o.parent.left),n.left.color===0&&n.right.color===0?(n.color=1,o=o.parent):(n.left.color===0&&(n.color=1,n.right.color=0,this.rotate_left(n),n=o.parent.left),n.color=o.parent.color,o.parent.color=0,n.left.color=0,this.rotate_right(o.parent),o=this.root));o.color=0}tree_search(t,n){if(t!=null&&t!==this.nil_node)return n.equal_to(t)?t:n.less_than(t)?this.tree_search(t.left,n):this.tree_search(t.right,n)}tree_search_nearest_forward(t,n){let o=null,i=t;for(;i&&i!==this.nil_node;)i.less_than(n)?i.intersect(n)?(o=i,i=i.left):i=i.right:(o&&!i.less_than(o)||(o=i),i=i.left);return o||null}tree_search_interval(t,n,o){t!=null&&t!==this.nil_node&&(t.left===this.nil_node||t.not_intersect_left_subtree(n)||this.tree_search_interval(t.left,n,o),t.intersect(n)&&o.push(t),t.right===this.nil_node||t.not_intersect_right_subtree(n)||this.tree_search_interval(t.right,n,o))}tree_find_any_interval(t,n){let o=!1;return t!=null&&t!==this.nil_node&&(t.left===this.nil_node||t.not_intersect_left_subtree(n)||(o=this.tree_find_any_interval(t.left,n)),o||(o=t.intersect(n)),o||t.right===this.nil_node||t.not_intersect_right_subtree(n)||(o=this.tree_find_any_interval(t.right,n))),o}local_minimum(t){let n=t;for(;n.left!=null&&n.left!==this.nil_node;)n=n.left;return n}local_maximum(t){let n=t;for(;n.right!=null&&n.right!==this.nil_node;)n=n.right;return n}tree_successor(t){let n,o,i;if(t.right!==this.nil_node)n=this.local_minimum(t.right);else{for(o=t,i=t.parent;i!=null&&i.right===o;)o=i,i=i.parent;n=i}return n}rotate_left(t){let n=t.right;t.right=n.left,n.left!==this.nil_node&&(n.left.parent=t),n.parent=t.parent,t===this.root?this.root=n:t===t.parent.left?t.parent.left=n:t.parent.right=n,n.left=t,t.parent=n,t!==null&&t!==this.nil_node&&t.update_max(),n!=null&&n!==this.nil_node&&n.update_max()}rotate_right(t){let n=t.left;t.left=n.right,n.right!==this.nil_node&&(n.right.parent=t),n.parent=t.parent,t===this.root?this.root=n:t===t.parent.left?t.parent.left=n:t.parent.right=n,n.right=t,t.parent=n,t!==null&&t!==this.nil_node&&t.update_max(),n!=null&&n!==this.nil_node&&n.update_max()}tree_walk(t,n){t!=null&&t!==this.nil_node&&(this.tree_walk(t.left,n),n(t),this.tree_walk(t.right,n))}testRedBlackProperty(){let t=!0;return this.tree_walk(this.root,function(n){n.color===1&&(n.left.color===0&&n.right.color===0||(t=!1))}),t}testBlackHeightProperty(t){let n=0,o=0,i=0;if(t.color===0&&n++,o=t.left!==this.nil_node?this.testBlackHeightProperty(t.left):1,i=t.right!==this.nil_node?this.testBlackHeightProperty(t.right):1,o!==i)throw Error("Red-black height property violated");return n+=o,n}},cFo=class extends Set{constructor(e){super(e),this.index=new JQe,this.forEach((t)=>this.index.insert(t))}add(e){let t=this.size,{key:n,value:o}=e,i=n||e.box,r=o||e;return super.add(r),this.size>t&&this.index.insert(i,r),this}delete(e){let{key:t,value:n}=e,o=t||e.box,i=n||e,r=super.delete(i);return r&&this.index.remove(o,i),r}clear(){super.clear(),this.index=new JQe}search(e){return this.index.search(e)}hit(e){let t=new Le.Box(e.x-1,e.y-1,e.x+1,e.y+1);return this.index.search(t).filter((n)=>e.on(n))}svg(){return[...this].reduce((e,t)=>e+t.svg(),"")}};Le.PlanarSet=cFo;var lT=class{get name(){throw Xu.CANNOT_INVOKE_ABSTRACT_METHOD}get box(){throw Xu.CANNOT_INVOKE_ABSTRACT_METHOD}clone(){throw Xu.CANNOT_INVOKE_ABSTRACT_METHOD}translate(...e){return this.transform(new Oee().translate(...e))}rotate(e,t=new Le.Point){return this.transform(new Oee().rotate(e,t.x,t.y))}scale(e,t){return this.transform(new Oee().scale(e,t))}transform(...e){throw Xu.CANNOT_INVOKE_ABSTRACT_METHOD}toJSON(){return Object.assign({},this,{name:this.name})}svg(e={}){throw Xu.CANNOT_INVOKE_ABSTRACT_METHOD}};Le.Point=class e extends lT{constructor(...t){if(super(),this.x=0,this.y=0,t.length!==0){if(t.length===1&&t[0]instanceof Array&&t[0].length===2){let n=t[0];if(typeof n[0]=="number"&&typeof n[1]=="number")return this.x=n[0],void(this.y=n[1])}if(t.length===1&&t[0]instanceof Object&&t[0].name==="point"){let{x:n,y:o}=t[0];return this.x=n,void(this.y=o)}if(t.length===2&&typeof t[0]=="number"&&typeof t[1]=="number")return this.x=t[0],void(this.y=t[1]);throw Xu.ILLEGAL_PARAMETERS}}get box(){return new Le.Box(this.x,this.y,this.x,this.y)}clone(){return new Le.Point(this.x,this.y)}get vertices(){return[this.clone()]}equalTo(t){return Le.Utils.EQ(this.x,t.x)&&Le.Utils.EQ(this.y,t.y)}lessThan(t){return!!Le.Utils.LT(this.y,t.y)||!(!Le.Utils.EQ(this.y,t.y)||!Le.Utils.LT(this.x,t.x))}transform(t){return new Le.Point(t.transform([this.x,this.y]))}projectionOn(t){if(this.equalTo(t.pt))return this.clone();let n=new Le.Vector(this,t.pt);if(Le.Utils.EQ_0(n.cross(t.norm)))return t.pt.clone();let o=n.dot(t.norm),i=t.norm.multiply(o);return this.translate(i)}leftTo(t){let n=new Le.Vector(t.pt,this);return Le.Utils.GT(n.dot(t.norm),0)}distanceTo(t){if(t instanceof e){let n=t.x-this.x,o=t.y-this.y;return[Math.sqrt(n*n+o*o),new Le.Segment(this,t)]}return t instanceof Le.Line?Le.Distance.point2line(this,t):t instanceof Le.Circle?Le.Distance.point2circle(this,t):t instanceof Le.Segment?Le.Distance.point2segment(this,t):t instanceof Le.Arc?Le.Distance.point2arc(this,t):t instanceof Le.Polygon?Le.Distance.point2polygon(this,t):t instanceof Le.PlanarSet?Le.Distance.shape2planarSet(this,t):t instanceof Le.Multiline?Le.Distance.shape2multiline(this,t):void 0}on(t){if(t instanceof Le.Point)return this.equalTo(t);if(t.contains&&t.contains instanceof Function)return t.contains(this);throw Le.Errors.UNSUPPORTED_SHAPE_TYPE}get name(){return"point"}svg(t={}){let n=t.r??3;return`
<circle cx="${this.x}" cy="${this.y}" r="${n}"
${IL({fill:"red",...t})} />`}};Le.point=(...e)=>new Le.Point(...e);Le.Vector=class extends lT{constructor(...e){if(super(),this.x=0,this.y=0,e.length!==0){if(e.length===1&&e[0]instanceof Array&&e[0].length===2){let t=e[0];if(typeof t[0]=="number"&&typeof t[1]=="number")return this.x=t[0],void(this.y=t[1])}if(e.length===1&&e[0]instanceof Object&&e[0].name==="vector"){let{x:t,y:n}=e[0];return this.x=t,void(this.y=n)}if(e.length===1&&e[0]instanceof Object&&e[0].name==="segment"){let{start:t,end:n}=e[0];return this.x=n.x-t.x,void(this.y=n.y-t.y)}if(e.length===2){let t=e[0],n=e[1];if(typeof t=="number"&&typeof n=="number")return this.x=t,void(this.y=n);if(t instanceof Le.Point&&n instanceof Le.Point)return this.x=n.x-t.x,void(this.y=n.y-t.y)}throw Xu.ILLEGAL_PARAMETERS}}clone(){return new Le.Vector(this.x,this.y)}get slope(){let e=Math.atan2(this.y,this.x);return e<0&&(e=2*Math.PI+e),e}get length(){return Math.sqrt(this.dot(this))}isZeroLength(){return Le.Utils.EQ_0(this.length)}equalTo(e){return Le.Utils.EQ(this.x,e.x)&&Le.Utils.EQ(this.y,e.y)}multiply(e){return new Le.Vector(e*this.x,e*this.y)}dot(e){return this.x*e.x+this.y*e.y}cross(e){return this.x*e.y-this.y*e.x}normalize(){if(this.isZeroLength())throw Xu.ZERO_DIVISION;return new Le.Vector(this.x/this.length,this.y/this.length)}rotate(e,t=new Le.Point){if(t.x===0&&t.y===0)return this.transform(new Oee().rotate(e));throw Xu.OPERATION_IS_NOT_SUPPORTED}transform(e){return new Le.Vector(e.transform([this.x,this.y]))}rotate90CCW(){return new Le.Vector(-this.y,this.x)}rotate90CW(){return new Le.Vector(this.y,-this.x)}invert(){return new Le.Vector(-this.x,-this.y)}add(e){return new Le.Vector(this.x+e.x,this.y+e.y)}subtract(e){return new Le.Vector(this.x-e.x,this.y-e.y)}angleTo(e){let t=this.normalize(),n=e.normalize(),o=Math.atan2(t.cross(n),t.dot(n));return o<0&&(o+=2*Math.PI),o}projectionOn(e){let t=e.normalize(),n=this.dot(t);return t.multiply(n)}get name(){return"vector"}};var gzt=(...e)=>new Le.Vector(...e);Le.vector=gzt;Le.Segment=class e extends lT{constructor(...t){if(super(),this.ps=new Le.Point,this.pe=new Le.Point,t.length!==0){if(t.length===1&&t[0]instanceof Array&&t[0].length===4){let n=t[0];return this.ps=new Le.Point(n[0],n[1]),void(this.pe=new Le.Point(n[2],n[3]))}if(t.length===1&&t[0]instanceof Object&&t[0].name==="segment"){let{ps:n,pe:o}=t[0];return this.ps=new Le.Point(n.x,n.y),void(this.pe=new Le.Point(o.x,o.y))}if(!(t.length===1&&t[0]instanceof Le.Point)){if(t.length===2&&t[0]instanceof Le.Point&&t[1]instanceof Le.Point)return this.ps=t[0].clone(),void(this.pe=t[1].clone());if(t.length===4)return this.ps=new Le.Point(t[0],t[1]),void(this.pe=new Le.Point(t[2],t[3]));throw Xu.ILLEGAL_PARAMETERS}this.ps=t[0].clone()}}clone(){return new Le.Segment(this.start,this.end)}get start(){return this.ps}get end(){return this.pe}get vertices(){return[this.ps.clone(),this.pe.clone()]}get length(){return this.start.distanceTo(this.end)[0]}get slope(){return new Le.Vector(this.start,this.end).slope}get box(){return new Le.Box(Math.min(this.start.x,this.end.x),Math.min(this.start.y,this.end.y),Math.max(this.start.x,this.end.x),Math.max(this.start.y,this.end.y))}equalTo(t){return this.ps.equalTo(t.ps)&&this.pe.equalTo(t.pe)}contains(t){return Le.Utils.EQ_0(this.distanceToPoint(t))}intersect(t){return t instanceof Le.Point?this.contains(t)?[t]:[]:t instanceof Le.Line?$te(this,t):t instanceof Le.Ray?PHe(t,this):t instanceof Le.Segment?gge(this,t):t instanceof Le.Circle?fge(this,t):t instanceof Le.Box?function(n,o){let i=[];for(let r of o.toSegments()){let s=gge(r,n);for(let a of s)i.push(a)}return i}(this,t):t instanceof Le.Arc?uU(this,t):t instanceof Le.Polygon?bHe(this,t):t instanceof Le.Multiline?NU(this,t):void 0}distanceTo(t){if(t instanceof Le.Point){let[n,o]=Le.Distance.point2segment(t,this);return o=o.reverse(),[n,o]}if(t instanceof Le.Circle){let[n,o]=Le.Distance.segment2circle(this,t);return[n,o]}if(t instanceof Le.Line){let[n,o]=Le.Distance.segment2line(this,t);return[n,o]}if(t instanceof Le.Segment){let[n,o]=Le.Distance.segment2segment(this,t);return[n,o]}if(t instanceof Le.Arc){let[n,o]=Le.Distance.segment2arc(this,t);return[n,o]}if(t instanceof Le.Polygon){let[n,o]=Le.Distance.shape2polygon(this,t);return[n,o]}if(t instanceof Le.PlanarSet){let[n,o]=Le.Distance.shape2planarSet(this,t);return[n,o]}if(t instanceof Le.Multiline)return Le.Distance.shape2multiline(this,t)}tangentInStart(){return new Le.Vector(this.start,this.end).normalize()}tangentInEnd(){return new Le.Vector(this.end,this.start).normalize()}reverse(){return new e(this.end,this.start)}split(t){return this.start.equalTo(t)?[null,this.clone()]:this.end.equalTo(t)?[this.clone(),null]:[new Le.Segment(this.start,t),new Le.Segment(t,this.end)]}middle(){return new Le.Point((this.start.x+this.end.x)/2,(this.start.y+this.end.y)/2)}pointAtLength(t){if(t>this.length||t<0)return null;if(t==0)return this.start;if(t==this.length)return this.end;let n=t/this.length;return new Le.Point((this.end.x-this.start.x)*n+this.start.x,(this.end.y-this.start.y)*n+this.start.y)}distanceToPoint(t){let[n,...o]=Le.Distance.point2segment(t,this);return n}definiteIntegral(t=0){return(this.end.x-this.start.x)*(this.start.y-t+(this.end.y-t))/2}transform(t=new Le.Matrix){return new e(this.ps.transform(t),this.pe.transform(t))}isZeroLength(){return this.ps.equalTo(this.pe)}sortPoints(t){return new Le.Line(this.start,this.end).sortPoints(t)}get name(){return"segment"}svg(t={}){return`
<line x1="${this.start.x}" y1="${this.start.y}" x2="${this.end.x}" y2="${this.end.y}" ${IL(t)} />`}};Le.segment=(...e)=>new Le.Segment(...e);var{vector:zZ}=Le;Le.Line=class e extends lT{constructor(...t){if(super(),this.pt=new Le.Point,this.norm=new Le.Vector(0,1),t.length!==0){if(t.length===1&&t[0]instanceof Object&&t[0].name==="line"){let{pt:n,norm:o}=t[0];return this.pt=new Le.Point(n),void(this.norm=new Le.Vector(o))}if(t.length===2){let n=t[0],o=t[1];if(n instanceof Le.Point&&o instanceof Le.Point)return this.pt=n,this.norm=e.points2norm(n,o),void(this.norm.dot(zZ(this.pt.x,this.pt.y))>=0&&this.norm.invert());if(n instanceof Le.Point&&o instanceof Le.Vector){if(Le.Utils.EQ_0(o.x)&&Le.Utils.EQ_0(o.y))throw Xu.ILLEGAL_PARAMETERS;return this.pt=n.clone(),this.norm=o.clone(),this.norm=this.norm.normalize(),void(this.norm.dot(zZ(this.pt.x,this.pt.y))>=0&&this.norm.invert())}if(n instanceof Le.Vector&&o instanceof Le.Point){if(Le.Utils.EQ_0(n.x)&&Le.Utils.EQ_0(n.y))throw Xu.ILLEGAL_PARAMETERS;return this.pt=o.clone(),this.norm=n.clone(),this.norm=this.norm.normalize(),void(this.norm.dot(zZ(this.pt.x,this.pt.y))>=0&&this.norm.invert())}}throw Xu.ILLEGAL_PARAMETERS}}clone(){return new Le.Line(this.pt,this.norm)}get start(){}get end(){}get length(){return Number.POSITIVE_INFINITY}get box(){return new Le.Box(Number.NEGATIVE_INFINITY,Number.NEGATIVE_INFINITY,Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY)}get middle(){}get slope(){return new Le.Vector(this.norm.y,-this.norm.x).slope}get standard(){return[this.norm.x,this.norm.y,this.norm.dot(zZ(this.pt.x,this.pt.y))]}parallelTo(t){return Le.Utils.EQ_0(this.norm.cross(t.norm))}incidentTo(t){return this.parallelTo(t)&&this.pt.on(t)}contains(t){if(this.pt.equalTo(t))return!0;let n=new Le.Vector(this.pt,t);return Le.Utils.EQ_0(this.norm.dot(n))}coord(t){return zZ(t.x,t.y).cross(this.norm)}intersect(t){return t instanceof Le.Point?this.contains(t)?[t]:[]:t instanceof Le.Line?DU(this,t):t instanceof Le.Ray?czt(t,this):t instanceof Le.Circle?bL(this,t):t instanceof Le.Box?dU(this,t):t instanceof Le.Segment?$te(t,this):t instanceof Le.Arc?wfe(this,t):t instanceof Le.Polygon?Zte(this,t):t instanceof Le.Multiline?NU(this,t):void 0}distanceTo(t){if(t instanceof Le.Point){let[n,o]=Le.Distance.point2line(t,this);return o=o.reverse(),[n,o]}if(t instanceof Le.Circle){let[n,o]=Le.Distance.circle2line(t,this);return o=o.reverse(),[n,o]}if(t instanceof Le.Segment){let[n,o]=Le.Distance.segment2line(t,this);return[n,o.reverse()]}if(t instanceof Le.Arc){let[n,o]=Le.Distance.arc2line(t,this);return[n,o.reverse()]}if(t instanceof Le.Polygon){let[n,o]=Le.Distance.shape2polygon(this,t);return[n,o]}}split(t){if(t instanceof Le.Point)return[new Le.Ray(t,this.norm),new Le.Ray(t,this.norm)];{let n=new Le.Multiline([this]),o=this.sortPoints(t);return n.split(o),n.toShapes()}}rotate(t,n=new Le.Point){return new Le.Line(this.pt.rotate(t,n),this.norm.rotate(t))}transform(t){return new Le.Line(this.pt.transform(t),this.norm.clone())}sortPoints(t){return t.slice().sort((n,o)=>this.coord(n)<this.coord(o)?-1:this.coord(n)>this.coord(o)?1:0)}get name(){return"line"}svg(t,n={}){let o=dU(this,t);if(o.length===0)return"";let i=o[0],r=o.length===2?o[1]:o.find((s)=>!s.equalTo(i));return r===void 0&&(r=i),new Le.Segment(i,r).svg(n)}static points2norm(t,n){if(t.equalTo(n))throw Xu.ILLEGAL_PARAMETERS;return new Le.Vector(t,n).normalize().rotate90CCW()}};Le.line=(...e)=>new Le.Line(...e);Le.Circle=class extends lT{constructor(...e){if(super(),this.pc=new Le.Point,this.r=1,e.length===1&&e[0]instanceof Object&&e[0].name==="circle"){let{pc:t,r:n}=e[0];this.pc=new Le.Point(t),this.r=n}else{let[t,n]=[...e];t&&t instanceof Le.Point&&(this.pc=t.clone()),n!==void 0&&(this.r=n)}}clone(){return new Le.Circle(this.pc.clone(),this.r)}get center(){return this.pc}get box(){return new Le.Box(this.pc.x-this.r,this.pc.y-this.r,this.pc.x+this.r,this.pc.y+this.r)}contains(e){return e instanceof Le.Point?Le.Utils.LE(e.distanceTo(this.center)[0],this.r):e instanceof Le.Segment?Le.Utils.LE(e.start.distanceTo(this.center)[0],this.r)&&Le.Utils.LE(e.end.distanceTo(this.center)[0],this.r):e instanceof Le.Arc?this.intersect(e).length===0&&Le.Utils.LE(e.start.distanceTo(this.center)[0],this.r)&&Le.Utils.LE(e.end.distanceTo(this.center)[0],this.r):e instanceof Le.Circle?this.intersect(e).length===0&&Le.Utils.LE(e.r,this.r)&&Le.Utils.LE(e.center.distanceTo(this.center)[0],this.r):void 0}toArc(e=!0){return new Le.Arc(this.center,this.r,Math.PI,-Math.PI,e)}scale(e,t){if(e!==t)throw Xu.OPERATION_IS_NOT_SUPPORTED;if(this.pc.x!==0||this.pc.y!==0)throw Xu.OPERATION_IS_NOT_SUPPORTED;return new Le.Circle(this.pc,this.r*e)}transform(e=new Le.Matrix){return new Le.Circle(this.pc.transform(e),this.r)}intersect(e){return e instanceof Le.Point?this.contains(e)?[e]:[]:e instanceof Le.Line?bL(e,this):e instanceof Le.Ray?azt(e,this):e instanceof Le.Segment?fge(e,this):e instanceof Le.Circle?ZOt(e,this):e instanceof Le.Box?function(t,n){let o=[];for(let i of n.toSegments()){let r=fge(i,t);for(let s of r)o.push(s)}return o}(this,e):e instanceof Le.Arc?IHe(e,this):e instanceof Le.Polygon?izt(this,e):e instanceof Le.Multiline?NU(this,e):void 0}distanceTo(e){if(e instanceof Le.Point){let[t,n]=Le.Distance.point2circle(e,this);return n=n.reverse(),[t,n]}if(e instanceof Le.Circle){let[t,n]=Le.Distance.circle2circle(this,e);return[t,n]}if(e instanceof Le.Line){let[t,n]=Le.Distance.circle2line(this,e);return[t,n]}if(e instanceof Le.Segment){let[t,n]=Le.Distance.segment2circle(e,this);return n=n.reverse(),[t,n]}if(e instanceof Le.Arc){let[t,n]=Le.Distance.arc2circle(e,this);return n=n.reverse(),[t,n]}if(e instanceof Le.Polygon){let[t,n]=Le.Distance.shape2polygon(this,e);return[t,n]}if(e instanceof Le.PlanarSet){let[t,n]=Le.Distance.shape2planarSet(this,e);return[t,n]}if(e instanceof Le.Multiline){let[t,n]=Le.Distance.shape2multiline(this,e);return[t,n]}}get name(){return"circle"}svg(e={}){return`
<circle cx="${this.pc.x}" cy="${this.pc.y}" r="${this.r}"
${IL({fill:"none",...e})} />`}};Le.circle=(...e)=>new Le.Circle(...e);Le.Arc=class extends lT{constructor(...e){if(super(),this.pc=new Le.Point,this.r=1,this.startAngle=0,this.endAngle=2*Math.PI,this.counterClockwise=!0,e.length!==0)if(e.length===1&&e[0]instanceof Object&&e[0].name==="arc"){let{pc:t,r:n,startAngle:o,endAngle:i,counterClockwise:r}=e[0];this.pc=new Le.Point(t.x,t.y),this.r=n,this.startAngle=o,this.endAngle=i,this.counterClockwise=r}else{let[t,n,o,i,r]=[...e];t&&t instanceof Le.Point&&(this.pc=t.clone()),n!==void 0&&(this.r=n),o!==void 0&&(this.startAngle=o),i!==void 0&&(this.endAngle=i),r!==void 0&&(this.counterClockwise=r)}}clone(){return new Le.Arc(this.pc.clone(),this.r,this.startAngle,this.endAngle,this.counterClockwise)}get sweep(){let e=this.startAngle,t=this.endAngle;if(Le.Utils.EQ(Math.abs(e-t),Le.PIx2))return Le.PIx2;Math.abs(e)>Le.PIx2&&(e-=Math.trunc(e/Le.PIx2)*Le.PIx2),e<0&&(e+=Le.PIx2),Math.abs(t)>Le.PIx2&&(t-=Math.trunc(t/Le.PIx2)*Le.PIx2),t<0&&(t+=Le.PIx2);let n=this.counterClockwise?t-e:e-t;return n<0&&(n+=Le.PIx2),n}get start(){return new Le.Point(this.pc.x+this.r,this.pc.y).rotate(this.startAngle,this.pc)}get end(){return new Le.Point(this.pc.x+this.r,this.pc.y).rotate(this.endAngle,this.pc)}get center(){return this.pc.clone()}get vertices(){return[this.start.clone(),this.end.clone()]}get length(){return Math.abs(this.sweep*this.r)}get box(){let e=this.breakToFunctional().reduce((t,n)=>t.merge(n.start.box),new Le.Box);return e=e.merge(this.end.box),e}contains(e){if(!Le.Utils.EQ(this.pc.distanceTo(e)[0],this.r))return!1;if(e.equalTo(this.start))return!0;let t=new Le.Vector(this.pc,e).slope,n=new Le.Arc(this.pc,this.r,this.startAngle,t,this.counterClockwise);return Le.Utils.LE(n.length,this.length)}split(e){if(this.start.equalTo(e))return[null,this.clone()];if(this.end.equalTo(e))return[this.clone(),null];let t=new Le.Vector(this.pc,e).slope;return[new Le.Arc(this.pc,this.r,this.startAngle,t,this.counterClockwise),new Le.Arc(this.pc,this.r,t,this.endAngle,this.counterClockwise)]}middle(){let e=this.counterClockwise?this.startAngle+this.sweep/2:this.startAngle-this.sweep/2;return new Le.Arc(this.pc,this.r,this.startAngle,e,this.counterClockwise).end}pointAtLength(e){if(e>this.length||e<0)return null;if(e===0)return this.start;if(e===this.length)return this.end;let t=e/this.length,n=this.counterClockwise?this.startAngle+this.sweep*t:this.startAngle-this.sweep*t;return new Le.Arc(this.pc,this.r,this.startAngle,n,this.counterClockwise).end}chordHeight(){return(1-Math.cos(Math.abs(this.sweep/2)))*this.r}intersect(e){return e instanceof Le.Point?this.contains(e)?[e]:[]:e instanceof Le.Line?wfe(e,this):e instanceof Le.Ray?vHe(e,this):e instanceof Le.Circle?IHe(this,e):e instanceof Le.Segment?uU(e,this):e instanceof Le.Box?function(t,n){let o=[];for(let i of n.toSegments()){let r=uU(i,t);for(let s of r)o.push(s)}return o}(this,e):e instanceof Le.Arc?ezt(this,e):e instanceof Le.Polygon?SHe(this,e):e instanceof Le.Multiline?NU(this,e):void 0}distanceTo(e){if(e instanceof Le.Point){let[t,n]=Le.Distance.point2arc(e,this);return n=n.reverse(),[t,n]}if(e instanceof Le.Circle){let[t,n]=Le.Distance.arc2circle(this,e);return[t,n]}if(e instanceof Le.Line){let[t,n]=Le.Distance.arc2line(this,e);return[t,n]}if(e instanceof Le.Segment){let[t,n]=Le.Distance.segment2arc(e,this);return n=n.reverse(),[t,n]}if(e instanceof Le.Arc){let[t,n]=Le.Distance.arc2arc(this,e);return[t,n]}if(e instanceof Le.Polygon){let[t,n]=Le.Distance.shape2polygon(this,e);return[t,n]}if(e instanceof Le.PlanarSet){let[t,n]=Le.Distance.shape2planarSet(this,e);return[t,n]}if(e instanceof Le.Multiline)return Le.Distance.shape2multiline(this,e)}breakToFunctional(){let e=[],t=[0,Math.PI/2,Math.PI,3*Math.PI/2],n=this.startAngle,o=this.endAngle;Le.Utils.EQ(Math.abs(n-o),Le.PIx2)&&(o=n),Math.abs(n)>Le.PIx2&&(n-=Math.trunc(n/Le.PIx2)*Le.PIx2),n<0&&(n+=Le.PIx2),Math.abs(o)>Le.PIx2&&(o-=Math.trunc(o/Le.PIx2)*Le.PIx2),o<0&&(o+=Le.PIx2);let i,r,s,a=n;this.counterClockwise?(r=Math.ceil(n/(Math.PI/2))%4,s=1):(r=Math.floor(n/(Math.PI/2))%4,s=-1);for(let c=0,l=r;c<4;c++,l=(l+s+4)%4){if(i=t[l],i===a)continue;let d=this.counterClockwise?i-n:n-i;if(d<0&&(d+=Le.PIx2),d>this.sweep)break;e.push(new Le.Arc(this.pc,this.r,a,i,this.counterClockwise)),a=i}return e.length===0?(e.push(this),e):(i=o,a!==i&&e.push(new Le.Arc(this.pc,this.r,a,i,this.counterClockwise)),e)}tangentInStart(){let e=new Le.Vector(this.pc,this.start),t=this.counterClockwise?Math.PI/2:-Math.PI/2;return e.rotate(t).normalize()}tangentInEnd(){let e=new Le.Vector(this.pc,this.end),t=this.counterClockwise?-Math.PI/2:Math.PI/2;return e.rotate(t).normalize()}reverse(){return new Le.Arc(this.pc,this.r,this.endAngle,this.startAngle,!this.counterClockwise)}transform(e=new Le.Matrix){let t=this.start.transform(e),n=this.end.transform(e),o=this.pc.transform(e),i=this.counterClockwise;return e.a*e.d<0&&(i=!i),Le.Arc.arcSE(o,t,n,i)}static arcSE(e,t,n,o){let{vector:i}=Le,r=i(e,t).slope,s=i(e,n).slope;Le.Utils.EQ(r,s)&&(s+=2*Math.PI,o=!0);let a=i(e,t).length;return new Le.Arc(e,a,r,s,o)}definiteIntegral(e=0){return this.breakToFunctional().reduce((t,n)=>t+n.circularSegmentDefiniteIntegral(e),0)}circularSegmentDefiniteIntegral(e){let t=new Le.Segment(this.start,this.end).definiteIntegral(e),n=Le.Utils.EQ(this.sweep,Le.PIx2)?0:this.circularSegmentArea();return this.counterClockwise?t-n:t+n}circularSegmentArea(){return 0.5*this.r*this.r*(this.sweep-Math.sin(this.sweep))}sortPoints(e){let{vector:t}=Le;return e.slice().sort((n,o)=>{let i=t(this.pc,n).slope,r=t(this.pc,o).slope;return i<r?-1:i>r?1:0})}get name(){return"arc"}svg(e={}){let t=this.sweep<=Math.PI?"0":"1",n=this.counterClockwise?"1":"0";if(Le.Utils.EQ(this.sweep,2*Math.PI))return new Le.Circle(this.pc,this.r).svg(e);return`
<path d="M${this.start.x},${this.start.y}
A${this.r},${this.r} 0 ${t},${n} ${this.end.x},${this.end.y}"
${IL({fill:"none",...e})} />`}};Le.arc=(...e)=>new Le.Arc(...e);Le.Box=class e extends lT{constructor(t=void 0,n=void 0,o=void 0,i=void 0){super(),this.xmin=t,this.ymin=n,this.xmax=o,this.ymax=i}clone(){return new e(this.xmin,this.ymin,this.xmax,this.ymax)}get low(){return new Le.Point(this.xmin,this.ymin)}get high(){return new Le.Point(this.xmax,this.ymax)}get max(){return this.clone()}get center(){return new Le.Point((this.xmin+this.xmax)/2,(this.ymin+this.ymax)/2)}get width(){return Math.abs(this.xmax-this.xmin)}get height(){return Math.abs(this.ymax-this.ymin)}get box(){return this.clone()}not_intersect(t){return this.xmax<t.xmin||this.xmin>t.xmax||this.ymax<t.ymin||this.ymin>t.ymax}intersect(t){return!this.not_intersect(t)}merge(t){return new e(this.xmin===void 0?t.xmin:Math.min(this.xmin,t.xmin),this.ymin===void 0?t.ymin:Math.min(this.ymin,t.ymin),this.xmax===void 0?t.xmax:Math.max(this.xmax,t.xmax),this.ymax===void 0?t.ymax:Math.max(this.ymax,t.ymax))}less_than(t){return!!this.low.lessThan(t.low)||!(!this.low.equalTo(t.low)||!this.high.lessThan(t.high))}equal_to(t){return this.low.equalTo(t.low)&&this.high.equalTo(t.high)}output(){return this.clone()}comparable_less_than(t,n){return t.lessThan(n)}set(t,n,o,i){this.xmin=t,this.ymin=n,this.xmax=o,this.ymax=i}extend(t){return t<=0?this.clone():new e(this.xmin-t,this.ymin-t,this.xmax+t,this.ymax+t)}toPoints(){return[new Le.Point(this.xmin,this.ymin),new Le.Point(this.xmax,this.ymin),new Le.Point(this.xmax,this.ymax),new Le.Point(this.xmin,this.ymax)]}toSegments(){let t=this.toPoints();return[new Le.Segment(t[0],t[1]),new Le.Segment(t[1],t[2]),new Le.Segment(t[2],t[3]),new Le.Segment(t[3],t[0])]}rotate(t,n=new Le.Point){throw Xu.OPERATION_IS_NOT_SUPPORTED}transform(t=new Le.Matrix){return this.toPoints().map((n)=>n.transform(t)).reduce((n,o)=>n.merge(o.box),new e)}contains(t){return t instanceof Le.Point?t.x>=this.xmin&&t.x<=this.xmax&&t.y>=this.ymin&&t.y<=this.ymax:t instanceof Le.Segment?t.vertices.every((n)=>this.contains(n)):t instanceof Le.Box?t.toSegments().every((n)=>this.contains(n)):t instanceof Le.Circle?this.contains(t.box):t instanceof Le.Arc?t.vertices.every((n)=>this.contains(n))&&this.toSegments().every((n)=>uU(n,t).length===0):!(t instanceof Le.Line||t instanceof Le.Ray)&&(t instanceof Le.Multiline?t.toShapes().every((n)=>this.contains(n)):t instanceof Le.Polygon?this.contains(t.box):void 0)}distanceTo(t){let n=this.toSegments().map((i)=>i.distanceTo(t)),o=[Number.MAX_SAFE_INTEGER,null];return n.forEach((i)=>{i[0]<o[0]&&(o=i)}),o}get name(){return"box"}svg(t={}){let n=this.xmax-this.xmin,o=this.ymax-this.ymin;return`
<rect x="${this.xmin}" y="${this.ymin}" width="${n}" height="${o}"
${IL({fill:"none",...t})} />`}};Le.box=(...e)=>new Le.Box(...e);Le.Edge=class{constructor(e){this.shape=e,this.next=void 0,this.prev=void 0,this.face=void 0,this.arc_length=0,this.bvStart=void 0,this.bvEnd=void 0,this.bv=void 0,this.overlap=void 0}get start(){return this.shape.start}get end(){return this.shape.end}get length(){return this.shape.length}get box(){return this.shape.box}get isSegment(){return this.shape instanceof Le.Segment}get isArc(){return this.shape instanceof Le.Arc}get isLine(){return this.shape instanceof Le.Line}get isRay(){return this.shape instanceof Le.Ray}middle(){return this.shape.middle()}pointAtLength(e){return this.shape.pointAtLength(e)}contains(e){return this.shape.contains(e)}setInclusion(e){if(this.bv!==void 0)return this.bv;if(this.shape instanceof Le.Line||this.shape instanceof Le.Ray)return this.bv=Le.OUTSIDE,this.bv;if(this.bvStart===void 0&&(this.bvStart=Hee(e,this.start)),this.bvEnd===void 0&&(this.bvEnd=Hee(e,this.end)),this.bvStart===Le.OUTSIDE||this.bvEnd==Le.OUTSIDE)this.bv=Le.OUTSIDE;else if(this.bvStart===Le.INSIDE||this.bvEnd==Le.INSIDE)this.bv=Le.INSIDE;else{let t=Hee(e,this.middle());this.bv=t}return this.bv}setOverlap(e){let t,n=this.shape,o=e.shape;n instanceof Le.Segment&&o instanceof Le.Segment?n.start.equalTo(o.start)&&n.end.equalTo(o.end)?t=Le.OVERLAP_SAME:n.start.equalTo(o.end)&&n.end.equalTo(o.start)&&(t=Le.OVERLAP_OPPOSITE):(n instanceof Le.Arc&&o instanceof Le.Arc||n instanceof Le.Segment&&o instanceof Le.Arc||n instanceof Le.Arc&&o instanceof Le.Segment)&&(n.start.equalTo(o.start)&&n.end.equalTo(o.end)&&n.middle().equalTo(o.middle())?t=Le.OVERLAP_SAME:n.start.equalTo(o.end)&&n.end.equalTo(o.start)&&n.middle().equalTo(o.middle())&&(t=Le.OVERLAP_OPPOSITE)),this.overlap===void 0&&(this.overlap=t),e.overlap===void 0&&(e.overlap=t)}svg(){if(this.shape instanceof Le.Segment)return` L${this.shape.end.x},${this.shape.end.y}`;if(this.shape instanceof Le.Arc){let e,t=this.shape,n=t.counterClockwise?"1":"0";if(Le.Utils.EQ(t.sweep,2*Math.PI)){let o=t.counterClockwise?1:-1,i=new Le.Arc(t.pc,t.r,t.startAngle,t.startAngle+o*Math.PI,t.counterClockwise),r=new Le.Arc(t.pc,t.r,t.startAngle+o*Math.PI,t.endAngle,t.counterClockwise);return e="0",` A${i.r},${i.r} 0 ${e},${n} ${i.end.x},${i.end.y}
A${r.r},${r.r} 0 ${e},${n} ${r.end.x},${r.end.y}`}return e=t.sweep<=Math.PI?"0":"1",` A${t.r},${t.r} 0 ${e},${n} ${t.end.x},${t.end.y}`}}toJSON(){return this.shape.toJSON()}};var lFo=class extends CHe{constructor(e,t){super(e,t),this.setCircularLinks()}setCircularLinks(){this.isEmpty()||(this.last.next=this.first,this.first.prev=this.last)}[Symbol.iterator](){let e;return{next:()=>{let t=e||this.first,n=!this.first||!!e&&e===this.first;return e=t?t.next:void 0,{value:t,done:n}}}}append(e){return super.append(e),this.setCircularLinks(),this}insert(e,t){return super.insert(e,t),this.setCircularLinks(),this}remove(e){return super.remove(e),this}};Le.Face=class e extends lFo{constructor(t,...n){if(super(),this._box=void 0,this._orientation=void 0,n.length!==0){if(n.length===1){if(n[0]instanceof Array){let o=n[0];if(o.length===0)return;if(o.every((i)=>i instanceof Le.Point)){let i=e.points2segments(o);this.shapes2face(t.edges,i)}else if(o.every((i)=>i instanceof Array&&i.length===2)){let i=o.map((s)=>new Le.Point(s[0],s[1])),r=e.points2segments(i);this.shapes2face(t.edges,r)}else if(o.every((i)=>i instanceof Le.Segment||i instanceof Le.Arc))this.shapes2face(t.edges,o);else if(o.every((i)=>i.name==="segment"||i.name==="arc")){let i=[];for(let r of o){let s;s=r.name==="segment"?new Le.Segment(r):new Le.Arc(r),i.push(s)}this.shapes2face(t.edges,i)}}else if(n[0]instanceof e){let o=n[0];this.first=o.first,this.last=o.last;for(let i of o)t.edges.add(i)}else if(n[0]instanceof Le.Circle)this.shapes2face(t.edges,[n[0].toArc(KOt)]);else if(n[0]instanceof Le.Box){let o=n[0];this.shapes2face(t.edges,[new Le.Segment(new Le.Point(o.xmin,o.ymin),new Le.Point(o.xmax,o.ymin)),new Le.Segment(new Le.Point(o.xmax,o.ymin),new Le.Point(o.xmax,o.ymax)),new Le.Segment(new Le.Point(o.xmax,o.ymax),new Le.Point(o.xmin,o.ymax)),new Le.Segment(new Le.Point(o.xmin,o.ymax),new Le.Point(o.xmin,o.ymin))])}}n.length===2&&n[0]instanceof Le.Edge&&n[1]instanceof Le.Edge&&(this.first=n[0],this.last=n[1],this.last.next=this.first,this.first.prev=this.last,this.setArcLength())}}get edges(){return this.toArray()}get vertices(){return this.edges.map((t)=>t.shape.start.clone())}get shapes(){return this.edges.map((t)=>t.shape.clone())}get box(){if(this._box===void 0){let t=new Le.Box;for(let n of this)t=t.merge(n.box);this._box=t}return this._box}get perimeter(){return this.last.arc_length+this.last.length}pointAtLength(t){if(t>this.perimeter||t<0)return null;let n=null;for(let o of this)if(t>=o.arc_length&&(o===this.last||t<o.next.arc_length)){n=o.pointAtLength(t-o.arc_length);break}return n}static points2segments(t){let n=[];for(let o=0;o<t.length;o++)t[o].equalTo(t[(o+1)%t.length])||n.push(new Le.Segment(t[o],t[(o+1)%t.length]));return n}shapes2face(t,n){for(let o of n){let i=new Le.Edge(o);this.append(i),t.add(i)}}append(t){return super.append(t),this.setOneEdgeArcLength(t),t.face=this,this}insert(t,n){return super.insert(t,n),this.setOneEdgeArcLength(t),t.face=this,this}remove(t){return super.remove(t),this.setArcLength(),this}merge_with_next_edge(t){return t.shape.end.x=t.next.shape.end.x,t.shape.end.y=t.next.shape.end.y,this.remove(t.next),this}reverse(){let t=[],n=this.last;do n.shape=n.shape.reverse(),t.push(n),n=n.prev;while(n!==this.last);this.first=void 0,this.last=void 0;for(let o of t)this.first===void 0?(o.prev=o,o.next=o,this.first=o,this.last=o):(o.prev=this.last,this.last.next=o,this.last=o,this.last.next=this.first,this.first.prev=this.last),this.setOneEdgeArcLength(o);this._orientation!==void 0&&(this._orientation=void 0,this._orientation=this.orientation())}setArcLength(){for(let t of this)this.setOneEdgeArcLength(t),t.face=this}setOneEdgeArcLength(t){t===this.first?t.arc_length=0:t.arc_length=t.prev.arc_length+t.prev.length}area(){return Math.abs(this.signedArea())}signedArea(){let t=0,n=this.box.ymin;for(let o of this)t+=o.shape.definiteIntegral(n);return t}orientation(){if(this._orientation===void 0){let t=this.signedArea();Le.Utils.EQ_0(t)?this._orientation=Fee.NOT_ORIENTABLE:Le.Utils.LT(t,0)?this._orientation=Fee.CCW:this._orientation=Fee.CW}return this._orientation}isSimple(t){return e.getSelfIntersections(this,t,!0).length===0}static getSelfIntersections(t,n,o=!1){let i=[];for(let r of t){let s=n.search(r.box);for(let a of s){if(r===a)continue;if(a.face!==t)continue;if(r.shape instanceof Le.Segment&&a.shape instanceof Le.Segment&&(r.next===a||r.prev===a))continue;let c=r.shape.intersect(a.shape);for(let l of c)if((!l.equalTo(r.start)||!l.equalTo(a.end)||a!==r.prev)&&(!l.equalTo(r.end)||!l.equalTo(a.start)||a!==r.next)&&(i.push(l),o))break;if(i.length>0&&o)break}if(i.length>0&&o)break}return i}findEdgeByPoint(t){let n;for(let o of this)if(!t.equalTo(o.shape.start)&&(t.equalTo(o.shape.end)||o.shape.contains(t))){n=o;break}return n}toPolygon(){return new Le.Polygon(this.shapes)}toJSON(){return this.edges.map((t)=>t.toJSON())}svg(){let t=`M${this.first.start.x},${this.first.start.y}`;for(let n of this)t+=n.svg();return t+=" z",t}};Le.Ray=class e extends lT{constructor(...t){if(super(),this.pt=new Le.Point,this.norm=new Le.Vector(0,1),t.length!==0&&(t.length>=1&&t[0]instanceof Le.Point&&(this.pt=t[0].clone()),t.length!==1)){if(!(t.length===2&&t[1]instanceof Le.Vector))throw Xu.ILLEGAL_PARAMETERS;this.norm=t[1].clone()}}clone(){return new e(this.pt,this.norm)}get slope(){return new Le.Vector(this.norm.y,-this.norm.x).slope}get box(){let t=this.slope;return new Le.Box(t>Math.PI/2&&t<3*Math.PI/2?Number.NEGATIVE_INFINITY:this.pt.x,t>=0&&t<=Math.PI?this.pt.y:Number.NEGATIVE_INFINITY,t>=Math.PI/2&&t<=3*Math.PI/2?this.pt.x:Number.POSITIVE_INFINITY,t>=Math.PI&&t<=2*Math.PI||t===0?this.pt.y:Number.POSITIVE_INFINITY)}get start(){return this.pt}get end(){}get length(){return Number.POSITIVE_INFINITY}contains(t){if(this.pt.equalTo(t))return!0;let n=new Le.Vector(this.pt,t);return Le.Utils.EQ_0(this.norm.dot(n))&&Le.Utils.GE(n.cross(this.norm),0)}coord(t){return gzt(t.x,t.y).cross(this.norm)}split(t){return this.contains(t)?this.pt.equalTo(t)?[this]:[new Le.Segment(this.pt,t),new Le.Ray(t,this.norm)]:[]}intersect(t){return t instanceof Le.Point?this.contains(t)?[t]:[]:t instanceof Le.Segment?PHe(this,t):t instanceof Le.Arc?vHe(this,t):t instanceof Le.Line?czt(this,t):t instanceof Le.Ray?(o=t,DU(U8(n=this),U8(o)).filter((i)=>n.contains(i)).filter((i)=>o.contains(i))):t instanceof Le.Circle?azt(this,t):t instanceof Le.Box?function(i,r){return dU(U8(i),r).filter((s)=>i.contains(s))}(this,t):t instanceof Le.Polygon?lzt(this,t):t instanceof Le.Multiline?NU(this,t):void 0;var n,o}rotate(t,n=new Le.Point){return new Le.Ray(this.pt.rotate(t,n),this.norm.rotate(t))}transform(t){return new Le.Ray(this.pt.transform(t),this.norm.clone())}get name(){return"ray"}svg(t,n={}){let o=dU(new Le.Line(this.pt,this.norm),t);return o=o.filter((i)=>this.contains(i)),o.length===0||o.length===2?"":new Le.Segment(this.pt,o[0]).svg(n)}};Le.ray=(...e)=>new Le.Ray(...e);Le.Polygon=class e{constructor(){this.faces=new Le.PlanarSet,this.edges=new Le.PlanarSet;let t=[...arguments];if(t.length===1&&(t[0]instanceof Array&&t[0].length>0||t[0]instanceof Le.Circle||t[0]instanceof Le.Box)){let n=t[0];if(t[0]instanceof Array&&t[0].every((o)=>o instanceof Array))if(n.every((o)=>o instanceof Array&&o.length===2&&typeof o[0]=="number"&&typeof o[1]=="number"))this.faces.add(new Le.Face(this,n));else for(let o of n)if(o instanceof Array&&o[0]instanceof Array&&o[0].every((i)=>i instanceof Array&&i.length===2&&typeof i[0]=="number"&&typeof i[1]=="number"))for(let i of o)this.faces.add(new Le.Face(this,i));else this.faces.add(new Le.Face(this,o));else this.faces.add(new Le.Face(this,n))}}get box(){return[...this.faces].reduce((t,n)=>t.merge(n.box),new Le.Box)}get vertices(){return[...this.faces].flatMap((t)=>t.vertices)}clone(){let t=new e;for(let n of this.faces)t.addFace(n.shapes);return t}createFromArray(t){let n=new e;return t.forEach((o)=>[...o.faces].forEach((i)=>n.addFace(i.shapes))),n}isEmpty(){return this.edges.size===0||this.faces.size===0}isValid(){let t=!0;for(let n of this.faces)if(!n.isSimple(this.edges)){t=!1;break}return t}area(){let t=[...this.faces].reduce((n,o)=>n+o.signedArea(),0);return Math.abs(t)}addFace(...t){let n=new Le.Face(this,...t);return this.faces.add(n),n}deleteFace(t){for(let n of t)this.edges.delete(n);return this.faces.delete(t)}recreateFaces(){this.faces.clear();for(let o of this.edges)o.face=null;let t,n=!0;for(;n;){n=!1;for(let o of this.edges)if(o.face===null){t=o,n=!0;break}if(n){let o=t;do o=o.next;while(o.next!==t);this.addFace(t,o)}}}removeChain(t,n,o){if(o.next!==n){for(let i=n;i!==o.next;i=i.next)if(t.remove(i),this.edges.delete(i),t.isEmpty()){this.deleteFace(t);break}}else this.deleteFace(t)}addVertex(t,n){let o=n.shape.split(t);if(o[0]===null)return n.prev;if(o[1]===null)return n;let i=new Le.Edge(o[0]),r=n.prev;return n.face.insert(i,r),this.edges.delete(n),this.edges.add(i),n.shape=o[1],this.edges.add(n),i}removeEndVertex(t){let n=t.next;n!==t&&(t.face.merge_with_next_edge(t),this.edges.delete(n))}cut(t){let n=this.splitToIslands().flatMap((o)=>o._cutSingleIsland(t)).filter((o)=>o.isValid()&&o.isEmpty()===!1);return this.createFromArray(n)}_cutSingleIsland(t){let n=this.clone(),o=t.clone(),i,r,s={int_points1:[],int_points2:[],int_points1_sorted:[],int_points2_sorted:[]};for(let a of o.edges)for(let c of n.edges){let l=rzt(a,c);for(let d of l)hU(a,d,s.int_points1),hU(c,d,s.int_points2)}if(s.int_points1.length===0)return n;s.int_points1_sorted=M8(s.int_points1),s.int_points2_sorted=M8(s.int_points2),pU(o,s.int_points1_sorted),pU(n,s.int_points2_sorted),EHe(s),s.int_points1_sorted=M8(s.int_points1),s.int_points2_sorted=M8(s.int_points2),VQe(s.int_points1),UQe(s.int_points1,n);for(let a of s.int_points1_sorted)a.edge_before&&a.edge_after&&a.edge_before.bv===a.edge_after.bv&&(s.int_points2[a.id]=-1,a.id=-1);if(s.int_points1=s.int_points1.filter((a)=>a.id>=0),s.int_points2=s.int_points2.filter((a)=>a.id>=0),s.int_points1.forEach((a,c)=>{a.id=c}),s.int_points2.forEach((a,c)=>{a.id=c}),s.int_points1.length===0)return n;s.int_points1_sorted=M8(s.int_points1),s.int_points2_sorted=M8(s.int_points2);for(let a=1;a<s.int_points1_sorted.length;a++)if(r=s.int_points1_sorted[a],i=s.int_points1_sorted[a-1],r.edge_before&&r.edge_before.bv===1){let c=i.edge_after,l=r.edge_before,d=o.getChain(c,l);Q3t(s.int_points2[i.id],s.int_points2[r.id],d),d.forEach((u)=>n.edges.add(u)),d=d.reverse().map((u)=>new Le.Edge(u.shape.reverse()));for(let u=0;u<d.length-1;u++)d[u].next=d[u+1],d[u+1].prev=d[u];Q3t(s.int_points2[r.id],s.int_points2[i.id],d),d.forEach((u)=>n.edges.add(u))}return n.recreateFaces(),n}cutWithLine(t){let n=new Fk([t]);return this.cut(n)}findEdgeByPoint(t){let n;for(let o of this.faces)if(n=o.findEdgeByPoint(t),n!==void 0)break;return n}splitToIslands(){if(this.isEmpty())return[];let t=this.toArray();t.sort((i,r)=>r.area()-i.area());let n=[...t[0].faces][0].orientation(),o=t.filter((i)=>[...i.faces][0].orientation()===n);for(let i of t){let r=[...i.faces][0];if(r.orientation()!==n){for(let s of o)if(r.shapes.every((a)=>s.contains(a))){s.addFace(r.shapes);break}}}return o}rearrange(){if(this.faces.size<=1)return this.clone();let t=this.splitToIslands(),n=new e;return t.forEach((o)=>{o.faces.forEach((i)=>n.addFace(i.shapes))}),n}orientation(){return this.isEmpty()?Fee.NOT_ORIENTABLE:[...this.faces][0].orientation()}isOuter(t){return t.orientation()===this.orientation()}isMultiPolygon(){let t=0;return this.faces.forEach((n)=>{this.isOuter(n)&&t++}),t>1}reverse(){for(let t of this.faces)t.reverse();return this}contains(t){if(t instanceof Le.Point){let n=Hee(this,t);return n===1||n===2}return _zt(this,t)}distanceTo(t){if(t instanceof Le.Point){let[n,o]=Le.Distance.point2polygon(t,this);return o=o.reverse(),[n,o]}if(t instanceof Le.Circle||t instanceof Le.Line||t instanceof Le.Segment||t instanceof Le.Arc){let[n,o]=Le.Distance.shape2polygon(t,this);return o=o.reverse(),[n,o]}if(t instanceof Le.Polygon){let n,o,i=[Number.POSITIVE_INFINITY,new Le.Segment];for(let r of this.edges){let s=i[0];[n,o]=Le.Distance.shape2planarSet(r.shape,t.edges,s),Le.Utils.LT(n,s)&&(i=[n,o])}return i}}intersect(t){return t instanceof Le.Point?this.contains(t)?[t]:[]:t instanceof Le.Line?Zte(t,this):t instanceof Le.Ray?lzt(t,this):t instanceof Le.Circle?izt(t,this):t instanceof Le.Segment?bHe(t,this):t instanceof Le.Arc?SHe(t,this):t instanceof Le.Polygon?function(n,o){let i=[];if(n.isEmpty()||o.isEmpty())return i;if(n.box.not_intersect(o.box))return i;for(let r of n.edges)i=[...i,...R3t(r,o)];return i}(t,this):t instanceof Le.Multiline?function(n,o){let i=[];if(o.isEmpty()||n.size===0)return i;for(let r of n)i=[...i,...R3t(r,o)];return i}(t,this):void 0}translate(t){let n=new e;for(let o of this.faces)n.addFace(o.shapes.map((i)=>i.translate(t)));return n}rotate(t=0,n=new Le.Point){let o=new e;for(let i of this.faces)o.addFace(i.shapes.map((r)=>r.rotate(t,n)));return o}scale(t,n){let o=new e;for(let i of this.faces)o.addFace(i.shapes.map((r)=>r.scale(t,n)));return o}transform(t=new Le.Matrix){let n=new e;for(let o of this.faces)n.addFace(o.shapes.map((i)=>i.transform(t)));return n}toJSON(){return[...this.faces].map((t)=>t.toJSON())}toArray(){return[...this.faces].map((t)=>t.toPolygon())}dpath(){return[...this.faces].reduce((t,n)=>t+n.svg(),"")}svg(t={}){let n=`
<path ${IL({fillRule:"evenodd",fill:"lightcyan",...t})} d="`;for(let o of this.faces)n+=`
${o.svg()}`;return n+=`" >
</path>`,n}};Le.polygon=(...e)=>new Le.Polygon(...e);var{Circle:PNe,Line:V3t,Point:U3t,Vector:OAe,Utils:vNe}=Le;Le.Inversion=class e{constructor(t){this.circle=t}get inversion_circle(){return this.circle}static inversePoint(t,n){let o=new OAe(t.pc,n),i=t.r*t.r,r=o.dot(o);return vNe.EQ_0(r)?new U3t(Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY):t.pc.translate(o.multiply(i/r))}static inverseCircle(t,n){let o=t.pc.distanceTo(n.pc)[0];if(vNe.EQ(o,n.r)){let i=t.r*t.r/(2*n.r),r=new OAe(t.pc,n.pc);r=r.normalize();let s=t.pc.translate(r.multiply(i));return new V3t(s,r)}{let i=new OAe(t.pc,n.pc),r=t.r*t.r/(i.dot(i)-n.r*n.r),s=t.pc.translate(i.multiply(r)),a=Math.abs(r)*n.r;return new PNe(s,a)}}static inverseLine(t,n){let[o,i]=t.pc.distanceTo(n);if(vNe.EQ_0(o))return n.clone();{let r=t.r*t.r/(2*o),s=new OAe(t.pc,i.end);return s=s.multiply(r/o),new PNe(t.pc.translate(s),r)}}inverse(t){return t instanceof U3t?e.inversePoint(this.circle,t):t instanceof PNe?e.inverseCircle(this.circle,t):t instanceof V3t?e.inverseLine(this.circle,t):void 0}};Le.inversion=(e)=>new Le.Inversion(e);Le.Distance=class e{static point2point(t,n){return t.distanceTo(n)}static point2line(t,n){let o=t.projectionOn(n);return[new Le.Vector(t,o).length,new Le.Segment(t,o)]}static point2circle(t,n){let[o,i]=t.distanceTo(n.center);if(Le.Utils.EQ_0(o))return[n.r,new Le.Segment(t,n.toArc().start)];{let r=Math.abs(o-n.r),s=new Le.Vector(n.pc,t).normalize().multiply(n.r),a=n.pc.translate(s);return[r,new Le.Segment(t,a)]}}static point2segment(t,n){if(n.start.equalTo(n.end))return e.point2point(t,n.start);let o,i,r=new Le.Vector(n.start,n.end),s=new Le.Vector(n.start,t),a=new Le.Vector(n.end,t),c=r.dot(s),l=-r.dot(a);if(Le.Utils.GE(c,0)&&Le.Utils.GE(l,0)){let d=n.tangentInStart();return o=Math.abs(d.cross(s)),i=n.start.translate(d.multiply(d.dot(s))),[o,new Le.Segment(t,i)]}return c<0?t.distanceTo(n.start):t.distanceTo(n.end)}static point2arc(t,n){let o,i,r=new Le.Circle(n.pc,n.r),s=[];return[o,i]=e.point2circle(t,r),i.end.on(n)&&s.push(e.point2circle(t,r)),s.push(e.point2point(t,n.start)),s.push(e.point2point(t,n.end)),e.sort(s),s[0]}static point2edge(t,n){return n.shape instanceof Le.Segment?e.point2segment(t,n.shape):e.point2arc(t,n.shape)}static segment2line(t,n){let o=t.intersect(n);if(o.length>0)return[0,new Le.Segment(o[0],o[0])];let i=[];return i.push(e.point2line(t.start,n)),i.push(e.point2line(t.end,n)),e.sort(i),i[0]}static segment2segment(t,n){let o=gge(t,n);if(o.length>0)return[0,new Le.Segment(o[0],o[0])];let i,r,s=[];return[i,r]=e.point2segment(n.start,t),s.push([i,r.reverse()]),[i,r]=e.point2segment(n.end,t),s.push([i,r.reverse()]),s.push(e.point2segment(t.start,n)),s.push(e.point2segment(t.end,n)),e.sort(s),s[0]}static segment2circle(t,n){let o=t.intersect(n);if(o.length>0)return[0,new Le.Segment(o[0],o[0])];let i=new Le.Line(t.ps,t.pe),[r,s]=e.point2line(n.center,i);if(Le.Utils.GE(r,n.r)&&s.end.on(t))return e.point2circle(s.end,n);{let[a,c]=e.point2circle(t.start,n),[l,d]=e.point2circle(t.end,n);return Le.Utils.LT(a,l)?[a,c]:[l,d]}}static segment2arc(t,n){let o=t.intersect(n);if(o.length>0)return[0,new Le.Segment(o[0],o[0])];let i=new Le.Line(t.ps,t.pe),r=new Le.Circle(n.pc,n.r),[s,a]=e.point2line(r.center,i);if(Le.Utils.GE(s,r.r)&&a.end.on(t)){let[u,h]=e.point2circle(a.end,r);if(h.end.on(n))return[u,h]}let c,l,d=[];return d.push(e.point2arc(t.start,n)),d.push(e.point2arc(t.end,n)),[c,l]=e.point2segment(n.start,t),d.push([c,l.reverse()]),[c,l]=e.point2segment(n.end,t),d.push([c,l.reverse()]),e.sort(d),d[0]}static circle2circle(t,n){let o=t.intersect(n);if(o.length>0)return[0,new Le.Segment(o[0],o[0])];if(t.center.equalTo(n.center)){let i=t.toArc(),r=n.toArc();return e.point2point(i.start,r.start)}{let i=new Le.Line(t.center,n.center),r=i.intersect(t),s=i.intersect(n),a=[];return a.push(e.point2point(r[0],s[0])),a.push(e.point2point(r[0],s[1])),a.push(e.point2point(r[1],s[0])),a.push(e.point2point(r[1],s[1])),e.sort(a),a[0]}}static circle2line(t,n){let o=t.intersect(n);if(o.length>0)return[0,new Le.Segment(o[0],o[0])];let[i,r]=e.point2line(t.center,n),[s,a]=e.point2circle(r.end,t);return a=a.reverse(),[s,a]}static arc2line(t,n){let o=n.intersect(t);if(o.length>0)return[0,new Le.Segment(o[0],o[0])];let i=new Le.Circle(t.center,t.r),[r,s]=e.point2line(i.center,n);if(!Le.Utils.GE(r,i.r)){let a=[];return a.push(e.point2line(t.start,n)),a.push(e.point2line(t.end,n)),e.sort(a),a[0]}{let[a,c]=e.point2circle(s.end,i);if(c.end.on(t))return[a,c]}}static arc2circle(t,n){let o=t.intersect(n);if(o.length>0)return[0,new Le.Segment(o[0],o[0])];let i=new Le.Circle(t.center,t.r),[r,s]=e.circle2circle(i,n);if(s.start.on(t))return[r,s];{let a=[];return a.push(e.point2circle(t.start,n)),a.push(e.point2circle(t.end,n)),e.sort(a),a[0]}}static arc2arc(t,n){let o=t.intersect(n);if(o.length>0)return[0,new Le.Segment(o[0],o[0])];let i=new Le.Circle(t.center,t.r),r=new Le.Circle(n.center,n.r),[s,a]=e.circle2circle(i,r);if(a.start.on(t)&&a.end.on(n))return[s,a];{let c,l,d=[];return[c,l]=e.point2arc(t.start,n),l.end.on(n)&&d.push([c,l]),[c,l]=e.point2arc(t.end,n),l.end.on(n)&&d.push([c,l]),[c,l]=e.point2arc(n.start,t),l.end.on(t)&&d.push([c,l.reverse()]),[c,l]=e.point2arc(n.end,t),l.end.on(t)&&d.push([c,l.reverse()]),[c,l]=e.point2point(t.start,n.start),d.push([c,l]),[c,l]=e.point2point(t.start,n.end),d.push([c,l]),[c,l]=e.point2point(t.end,n.start),d.push([c,l]),[c,l]=e.point2point(t.end,n.end),d.push([c,l]),e.sort(d),d[0]}}static point2polygon(t,n){let o=[Number.POSITIVE_INFINITY,new Le.Segment];for(let i of n.edges){let[r,s]=e.point2edge(t,i);Le.Utils.LT(r,o[0])&&(o=[r,s])}return o}static shape2polygon(t,n){let o=[Number.POSITIVE_INFINITY,new Le.Segment];for(let i of n.edges){let[r,s]=t.distanceTo(i.shape);Le.Utils.LT(r,o[0])&&(o=[r,s])}return o}static polygon2polygon(t,n){let o=[Number.POSITIVE_INFINITY,new Le.Segment];for(let i of t.edges)for(let r of n.edges){let[s,a]=i.shape.distanceTo(r.shape);Le.Utils.LT(s,o[0])&&(o=[s,a])}return o}static box2box_minmax(t,n){let o=Math.max(Math.max(t.xmin-n.xmax,0),Math.max(n.xmin-t.xmax,0)),i=Math.max(Math.max(t.ymin-n.ymax,0),Math.max(n.ymin-t.ymax,0)),r=o*o+i*i,s=t.merge(n),a=s.xmax-s.xmin,c=s.ymax-s.ymin;return[r,a*a+c*c]}static minmax_tree_process_level(t,n,o,i){let r,s;for(let c of n){[r,s]=e.box2box_minmax(t.box,c.item.key);for(let l of c.item.values)l instanceof Le.Edge?i.insert([r,s],l.shape):i.insert([r,s],l);Le.Utils.LT(s,o)&&(o=s)}if(n.length===0)return o;let a=[...n.map((c)=>c.left.isNil()?void 0:c.left).filter((c)=>c!==void 0),...n.map((c)=>c.right.isNil()?void 0:c.right).filter((c)=>c!==void 0)].filter((c)=>{let[l,d]=e.box2box_minmax(t.box,c.max);return Le.Utils.LE(l,o)});return o=e.minmax_tree_process_level(t,a,o,i)}static minmax_tree(t,n,o){let i=new JQe,r=[n.index.root],s=o<Number.POSITIVE_INFINITY?o*o:Number.POSITIVE_INFINITY;return s=e.minmax_tree_process_level(t,r,s,i),i}static minmax_tree_calc_distance(t,n,o){let i,r;if(n!=null&&!n.isNil()){if([i,r]=e.minmax_tree_calc_distance(t,n.left,o),r)return[i,r];if(Le.Utils.LT(i[0],Math.sqrt(n.item.key.low)))return[i,!0];let[s,a]=e.distanceToArray(t,n.item.values);return Le.Utils.LT(s,i[0])&&(i=[s,a]),[i,r]=e.minmax_tree_calc_distance(t,n.right,i),[i,r]}return[o,!1]}static shape2planarSet(t,n,o=Number.POSITIVE_INFINITY){let i=[o,new Le.Segment],r=!1;if(n instanceof Le.PlanarSet){let s=e.minmax_tree(t,n,o);[i,r]=e.minmax_tree_calc_distance(t,s.root,i)}return i}static sort(t){t.sort((n,o)=>Le.Utils.LT(n[0],o[0])?-1:Le.Utils.GT(n[0],o[0])?1:0)}static distance(t,n){return t.distanceTo(n)}static distanceToArray(t,n){let o=[Number.POSITIVE_INFINITY,new Le.Segment];for(let i of n){let[r,s]=t.distanceTo(i);Le.Utils.LT(r,o[0])&&(o=[r,s])}return o}static shape2multiline(t,n){let o=[Number.POSITIVE_INFINITY,new Le.Segment];for(let i of n){let[r,s]=e.distance(t,i.shape);Le.Utils.LT(r,o[0])&&(o=[r,s])}return o}static multiline2multiline(t,n){let o=[Number.POSITIVE_INFINITY,new Le.Segment];for(let i of t)for(let r of n){let[s,a]=e.distance(i.shape,r.shape);Le.Utils.LT(s,o[0])&&(o=[s,a])}return o}};var{Multiline:dFo,Point:fzt,Segment:uFo,Polygon:yzt}=Le;function $Qe(e){return new fzt(e.split(" ").map(Number))}function xzt(e){return e.split(", ").map($Qe)}function ENe(e){let t=xzt(e),n=[];for(let o=0;o<t.length-1;o++)n.push(new uFo(t[o],t[o+1]));return new dFo(n)}function W3t(e){let t=e.replace(/\(\(/,"").replace(/\)\)$/,"").split("), ("),n=new yzt,o;return t.forEach((i,r)=>{let s=i.split(", ").map((c)=>new fzt(c.split(" ").map(Number))),a=n.addFace(s);r===0?o=a.orientation():a.orientation()===o&&a.reverse()}),n}function hFo(e){if(e.startsWith("POLYGON"))return W3t(e.replace(/^POLYGON /,""));return function(t){let n=t.split(/\)\), \(\(/).map((i)=>"(("+i+"))").map(W3t),o=new yzt;return n.reduce((i,r)=>[...i,...r?.faces],[]).forEach((i)=>o.addFace([...i?.shapes])),o}(e.replace(/^MULTIPOLYGON \(\(\((.*)\)\)\)$/,"$1"))}function X3t(e){return e.split(`
`)?.every((t)=>t.includes("POINT"))}function K3t(e){return e.split(`
`)?.every((t)=>t.includes("LINESTRING"))}Le.isWktString=function(e){return e.startsWith("POINT")||X3t(e)||e.startsWith("LINESTRING")||K3t(e)||e.startsWith("MULTILINESTRING")||e.startsWith("POLYGON")||e.startsWith("MULTIPOINT")||e.startsWith("MULTIPOLYGON")||e.startsWith("GEOMETRYCOLLECTION")},Le.parseWKT=function e(t){if(t.startsWith("POINT"))return $Qe(t.replace(/^POINT \(/,"").replace(/\)$/,""));if(t.startsWith("MULTIPOINT"))return xzt(t.replace(/^MULTIPOINT \(/,"").replace(/\)$/,""));if(t.startsWith("LINESTRING"))return ENe(t.replace(/^LINESTRING \(/,"").replace(/\)$/,""));if(t.startsWith("MULTILINESTRING"))return function(n){return n.replace(/\(\(/,"").replace(/\)\)$/,"").split("), (").map(ENe)}(t.replace(/^MULTILINESTRING /,""));if(t.startsWith("POLYGON")||t.startsWith("MULTIPOLYGON"))return hFo(t);if(t.startsWith("GEOMETRYCOLLECTION")){let n=/(?<type>POINT|LINESTRING|POLYGON|MULTIPOINT|MULTILINESTRING|MULTIPOLYGON) \((?:[^\(\)]|\([^\)]*\))*\)/g,o=t.match(n);return o[0].startsWith("GEOMETRYCOLLECTION")&&(o[0]=o[0].replace("GEOMETRYCOLLECTION (","")),o.map(e).map((i)=>i instanceof Array?i:[i]).reduce((i,r)=>[...i,...r],[])}return X3t(t)?function(n){return n.split(`
`).map((o)=>o.match(/\(([^)]+)\)/)[1]).map($Qe)}(t):K3t(t)?function(n){return n.split(`
`).map((o)=>o.match(/\(([^)]+)\)/)[1]).map(ENe).reduce((o,i)=>[...o,...i],[])}(t):[]},Le.BooleanOperations=ZLo,Le.Relations=rFo;sk=SLo(),j3t=1,MNe=sk!=null?mLo(ALo(sk)):{},((e,t,n,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of LOt(t))_Lo.call(e,i)||i===n||b3t(e,i,{get:()=>t[i],enumerable:!(o=pLo(t,i))||o.enumerable})})(!j3t&&sk&&sk.__esModule?MNe:b3t(MNe,"default",{value:sk,enumerable:!0}),sk);var sk,j3t,MNe,{create:mFo,defineProperty:q3t,getOwnPropertyDescriptor:pFo,getOwnPropertyNames:Czt,getPrototypeOf:AFo}=Object,_Fo=Object.prototype.hasOwnProperty,SL=(e,t)=>function(){return t||(0,e[Czt(e)[0]])((t={exports:{}}).exports,t),t.exports},J3t=(e,t,n)=>(n=e!=null?mFo(AFo(e)):{},((o,i,r,s)=>{if(i&&typeof i=="object"||typeof i=="function")for(let a of Czt(i))_Fo.call(o,a)||a===r||q3t(o,a,{get:()=>i[a],enumerable:!(s=pFo(i,a))||s.enumerable});return o})(!t&&e&&e.__esModule?n:q3t(n,"default",{value:e,enumerable:!0}),e)),gFo=SL({"node_modules/is-buffer/index.js"(e,t){function n(o){return!!o.constructor&&typeof o.constructor.isBuffer=="function"&&o.constructor.isBuffer(o)}t.exports=function(o){return o!=null&&(n(o)||function(i){return typeof i.readFloatLE=="function"&&typeof i.slice=="function"&&n(i.slice(0,0))}(o)||!!o._isBuffer)}}}),fFo=SL({"node_modules/kind-of/index.js"(e,t){var n=gFo(),o=Object.prototype.toString;t.exports=function(i){if(i===void 0)return"undefined";if(i===null)return"null";if(i===!0||i===!1||i instanceof Boolean)return"boolean";if(typeof i=="string"||i instanceof String)return"string";if(typeof i=="number"||i instanceof Number)return"number";if(typeof i=="function"||i instanceof Function)return"function";if(Array.isArray!==void 0&&Array.isArray(i))return"array";if(i instanceof RegExp)return"regexp";if(i instanceof Date)return"date";var r=o.call(i);return r==="[object RegExp]"?"regexp":r==="[object Date]"?"date":r==="[object Arguments]"?"arguments":r==="[object Error]"?"error":n(i)?"buffer":r==="[object Set]"?"set":r==="[object WeakSet]"?"weakset":r==="[object Map]"?"map":r==="[object WeakMap]"?"weakmap":r==="[object Symbol]"?"symbol":r==="[object Int8Array]"?"int8array":r==="[object Uint8Array]"?"uint8array":r==="[object Uint8ClampedArray]"?"uint8clampedarray":r==="[object Int16Array]"?"int16array":r==="[object Uint16Array]"?"uint16array":r==="[object Int32Array]"?"int32array":r==="[object Uint32Array]"?"uint32array":r==="[object Float32Array]"?"float32array":r==="[object Float64Array]"?"float64array":"object"}}}),yFo=SL({"node_modules/rename-keys/index.js"(e,t){(function(){function n(o,i){if(typeof i!="function")return o;var r={};for(var s in o)Object.prototype.hasOwnProperty.call(o,s)&&(r[i(s,o[s])||s]=o[s]);return r}t!==void 0&&t.exports?t.exports=n:typeof define=="function"&&define.amd?define([],function(){return n}):window.rename=n})()}}),xFo=SL({"node_modules/deep-rename-keys/index.js"(e,t){var n=fFo(),o=yFo();t.exports=function i(r,s){var a=n(r);if(a!=="object"&&a!=="array")throw Error("expected an object");var c=[];for(var l in a==="object"&&(r=o(r,s),c={}),r)if(r.hasOwnProperty(l)){var d=r[l];n(d)==="object"||n(d)==="array"?c[l]=i(d,s):c[l]=d}return c}}}),Izt=SL({"node_modules/eventemitter3/index.js"(e,t){var n=Object.prototype.hasOwnProperty,o="~";function i(){}function r(a,c,l){this.fn=a,this.context=c,this.once=l||!1}function s(){this._events=new i,this._eventsCount=0}Object.create&&(i.prototype=Object.create(null),new i().__proto__||(o=!1)),s.prototype.eventNames=function(){var a,c,l=[];if(this._eventsCount===0)return l;for(c in a=this._events)n.call(a,c)&&l.push(o?c.slice(1):c);return Object.getOwnPropertySymbols?l.concat(Object.getOwnPropertySymbols(a)):l},s.prototype.listeners=function(a,c){var l=o?o+a:a,d=this._events[l];if(c)return!!d;if(!d)return[];if(d.fn)return[d.fn];for(var u=0,h=d.length,A=Array(h);u<h;u++)A[u]=d[u].fn;return A},s.prototype.emit=function(a,c,l,d,u,h){var A=o?o+a:a;if(!this._events[A])return!1;var m,p,g=this._events[A],_=arguments.length;if(g.fn){switch(g.once&&this.removeListener(a,g.fn,void 0,!0),_){case 1:return g.fn.call(g.context),!0;case 2:return g.fn.call(g.context,c),!0;case 3:return g.fn.call(g.context,c,l),!0;case 4:return g.fn.call(g.context,c,l,d),!0;case 5:return g.fn.call(g.context,c,l,d,u),!0;case 6:return g.fn.call(g.context,c,l,d,u,h),!0}for(p=1,m=Array(_-1);p<_;p++)m[p-1]=arguments[p];g.fn.apply(g.context,m)}else{var f,y=g.length;for(p=0;p<y;p++)switch(g[p].once&&this.removeListener(a,g[p].fn,void 0,!0),_){case 1:g[p].fn.call(g[p].context);break;case 2:g[p].fn.call(g[p].context,c);break;case 3:g[p].fn.call(g[p].context,c,l);break;case 4:g[p].fn.call(g[p].context,c,l,d);break;default:if(!m)for(f=1,m=Array(_-1);f<_;f++)m[f-1]=arguments[f];g[p].fn.apply(g[p].context,m)}}return!0},s.prototype.on=function(a,c,l){var d=new r(c,l||this),u=o?o+a:a;return this._events[u]?this._events[u].fn?this._events[u]=[this._events[u],d]:this._events[u].push(d):(this._events[u]=d,this._eventsCount++),this},s.prototype.once=function(a,c,l){var d=new r(c,l||this,!0),u=o?o+a:a;return this._events[u]?this._events[u].fn?this._events[u]=[this._events[u],d]:this._events[u].push(d):(this._events[u]=d,this._eventsCount++),this},s.prototype.removeListener=function(a,c,l,d){var u=o?o+a:a;if(!this._events[u])return this;if(!c)return--this._eventsCount===0?this._events=new i:delete this._events[u],this;var h=this._events[u];if(h.fn)h.fn!==c||d&&!h.once||l&&h.context!==l||(--this._eventsCount===0?this._events=new i:delete this._events[u]);else{for(var A=0,m=[],p=h.length;A<p;A++)(h[A].fn!==c||d&&!h[A].once||l&&h[A].context!==l)&&m.push(h[A]);m.length?this._events[u]=m.length===1?m[0]:m:--this._eventsCount===0?this._events=new i:delete this._events[u]}return this},s.prototype.removeAllListeners=function(a){var c;return a?(c=o?o+a:a,this._events[c]&&(--this._eventsCount===0?this._events=new i:delete this._events[c])):(this._events=new i,this._eventsCount=0),this},s.prototype.off=s.prototype.removeListener,s.prototype.addListener=s.prototype.on,s.prototype.setMaxListeners=function(){return this},s.prefixed=o,s.EventEmitter=s,t!==void 0&&(t.exports=s)}}),CFo=SL({"node_modules/xml-lexer/dist/lexer.js"(e,t){function n(l,d,u){return d in l?Object.defineProperty(l,d,{value:u,enumerable:!0,configurable:!0,writable:!0}):l[d]=u,l}var o=Izt(),i=function(){},r={data:"state-data",cdata:"state-cdata",tagBegin:"state-tag-begin",tagName:"state-tag-name",tagEnd:"state-tag-end",attributeNameStart:"state-attribute-name-start",attributeName:"state-attribute-name",attributeNameEnd:"state-attribute-name-end",attributeValueBegin:"state-attribute-value-begin",attributeValue:"state-attribute-value"},s={lt:"action-lt",gt:"action-gt",space:"action-space",equal:"action-equal",quote:"action-quote",slash:"action-slash",char:"action-char",error:"action-error"},a={text:"text",openTag:"open-tag",closeTag:"close-tag",attributeName:"attribute-name",attributeValue:"attribute-value"},c={" ":s.space,"\t":s.space,"\n":s.space,"\r":s.space,"<":s.lt,">":s.gt,'"':s.quote,"'":s.quote,"=":s.equal,"/":s.slash};t.exports={State:r,Action:s,Type:a,create:function(l){var d,u,h,A,m,p,g,_,f,y;l=Object.assign({debug:!1},l);var x=new o,C=r.data,I="",b="",P="",E="",B="",w="",T=function(N,F){if(b[0]!=="?"&&b[0]!=="!"){var H={type:N,value:F};l.debug&&console.log("emit:",H),x.emit("data",H)}};x.stateMachine=(n(y={},r.data,(n(d={},s.lt,function(){I.trim()&&T(a.text,I),b="",B=!1,C=r.tagBegin}),n(d,s.char,function(N){I+=N}),d)),n(y,r.cdata,n({},s.char,function(N){(I+=N).substr(-3)==="]]>"&&(T(a.text,I.slice(0,-3)),I="",C=r.data)})),n(y,r.tagBegin,(n(u={},s.space,i),n(u,s.char,function(N){b=N,C=r.tagName}),n(u,s.slash,function(){b="",B=!0}),u)),n(y,r.tagName,(n(h={},s.space,function(){B?C=r.tagEnd:(C=r.attributeNameStart,T(a.openTag,b))}),n(h,s.gt,function(){T(B?a.closeTag:a.openTag,b),I="",C=r.data}),n(h,s.slash,function(){C=r.tagEnd,T(a.openTag,b)}),n(h,s.char,function(N){(b+=N)==="![CDATA["&&(C=r.cdata,I="",b="")}),h)),n(y,r.tagEnd,(n(A={},s.gt,function(){T(a.closeTag,b),I="",C=r.data}),n(A,s.char,i),A)),n(y,r.attributeNameStart,(n(m={},s.char,function(N){P=N,C=r.attributeName}),n(m,s.gt,function(){I="",C=r.data}),n(m,s.space,i),n(m,s.slash,function(){B=!0,C=r.tagEnd}),m)),n(y,r.attributeName,(n(p={},s.space,function(){C=r.attributeNameEnd}),n(p,s.equal,function(){T(a.attributeName,P),C=r.attributeValueBegin}),n(p,s.gt,function(){E="",T(a.attributeName,P),T(a.attributeValue,E),I="",C=r.data}),n(p,s.slash,function(){B=!0,E="",T(a.attributeName,P),T(a.attributeValue,E),C=r.tagEnd}),n(p,s.char,function(N){P+=N}),p)),n(y,r.attributeNameEnd,(n(g={},s.space,i),n(g,s.equal,function(){T(a.attributeName,P),C=r.attributeValueBegin}),n(g,s.gt,function(){E="",T(a.attributeName,P),T(a.attributeValue,E),I="",C=r.data}),n(g,s.char,function(N){E="",T(a.attributeName,P),T(a.attributeValue,E),P=N,C=r.attributeName}),g)),n(y,r.attributeValueBegin,(n(_={},s.space,i),n(_,s.quote,function(N){w=N,E="",C=r.attributeValue}),n(_,s.gt,function(){T(a.attributeValue,E=""),I="",C=r.data}),n(_,s.char,function(N){w="",E=N,C=r.attributeValue}),_)),n(y,r.attributeValue,(n(f={},s.space,function(N){w?E+=N:(T(a.attributeValue,E),C=r.attributeNameStart)}),n(f,s.quote,function(N){w===N?(T(a.attributeValue,E),C=r.attributeNameStart):E+=N}),n(f,s.gt,function(N){w?E+=N:(T(a.attributeValue,E),I="",C=r.data)}),n(f,s.slash,function(N){w?E+=N:(T(a.attributeValue,E),B=!0,C=r.tagEnd)}),n(f,s.char,function(N){E+=N}),f)),y);var Q=function(N){l.debug&&console.log(C,N);var F=x.stateMachine[C],H=F[function(z){return c[z]||s.char}(N)]||F[s.error]||F[s.char];H(N)};return x.write=function(N){for(var F=N.length,H=0;H<F;H++)Q(N[H])},x}}}}),IFo=SL({"node_modules/xml-reader/dist/reader.js"(e,t){var n=Izt(),o=CFo(),i=o.Type,r={element:"element",text:"text"},s=function(c){return Object.assign({name:"",type:r.element,value:"",parent:null,attributes:{},children:[]},c)},a=function(c){c=Object.assign({stream:!1,parentNodes:!0,doneEvent:"done",tagPrefix:"tag:",emitTopLevelOnly:!1,debug:!1},c);var l=void 0,d=void 0,u=void 0,h=void 0,A=new n,m=function(p){switch(p.type){case i.openTag:if(u===null)(u=d).name=p.value;else{var g=s({name:p.value,parent:u});u.children.push(g),u=g}break;case i.closeTag:var _=u.parent;if(c.parentNodes||(u.parent=null),u.name!==p.value)break;c.stream&&_===d&&(d.children=[],u.parent=null),c.emitTopLevelOnly&&_!==d||(A.emit(c.tagPrefix+u.name,u),A.emit("tag",u.name,u)),u===d&&(l.removeAllListeners("data"),A.emit(c.doneEvent,u),d=null),u=_;break;case i.text:u&&u.children.push(s({type:r.text,value:p.value,parent:c.parentNodes?u:null}));break;case i.attributeName:h=p.value,u.attributes[h]="";break;case i.attributeValue:u.attributes[h]=p.value}};return A.reset=function(){(l=o.create({debug:c.debug})).on("data",m),d=s(),u=null,h="",A.parse=l.write},A.reset(),A};t.exports={parseSync:function(c,l){l=Object.assign({},l,{stream:!1,tagPrefix:":"});var d=a(l),u=void 0;return d.on("done",function(h){u=h}),d.parse(c),u},create:a,NodeType:r}}}),{cos:nGr,sin:oGr,PI:iGr}=Math,{tan:rGr}=Math,bFo=(J3t(xFo()),J3t(IFo()),Object.create),{defineProperty:$3t,getOwnPropertyDescriptor:SFo,getOwnPropertyNames:bzt,getPrototypeOf:PFo}=Object,vFo=Object.prototype.hasOwnProperty,PL=(e,t)=>function(){return t||(0,e[bzt(e)[0]])((t={exports:{}}).exports,t),t.exports},Z3t=(e,t,n)=>(n=e!=null?bFo(PFo(e)):{},((o,i,r,s)=>{if(i&&typeof i=="object"||typeof i=="function")for(let a of bzt(i))vFo.call(o,a)||a===r||$3t(o,a,{get:()=>i[a],enumerable:!(s=SFo(i,a))||s.enumerable});return o})(!t&&e&&e.__esModule?n:$3t(n,"default",{value:e,enumerable:!0}),e)),EFo=PL({"node_modules/is-buffer/index.js"(e,t){function n(o){return!!o.constructor&&typeof o.constructor.isBuffer=="function"&&o.constructor.isBuffer(o)}t.exports=function(o){return o!=null&&(n(o)||function(i){return typeof i.readFloatLE=="function"&&typeof i.slice=="function"&&n(i.slice(0,0))}(o)||!!o._isBuffer)}}}),MFo=PL({"node_modules/kind-of/index.js"(e,t){var n=EFo(),o=Object.prototype.toString;t.exports=function(i){if(i===void 0)return"undefined";if(i===null)return"null";if(i===!0||i===!1||i instanceof Boolean)return"boolean";if(typeof i=="string"||i instanceof String)return"string";if(typeof i=="number"||i instanceof Number)return"number";if(typeof i=="function"||i instanceof Function)return"function";if(Array.isArray!==void 0&&Array.isArray(i))return"array";if(i instanceof RegExp)return"regexp";if(i instanceof Date)return"date";var r=o.call(i);return r==="[object RegExp]"?"regexp":r==="[object Date]"?"date":r==="[object Arguments]"?"arguments":r==="[object Error]"?"error":n(i)?"buffer":r==="[object Set]"?"set":r==="[object WeakSet]"?"weakset":r==="[object Map]"?"map":r==="[object WeakMap]"?"weakmap":r==="[object Symbol]"?"symbol":r==="[object Int8Array]"?"int8array":r==="[object Uint8Array]"?"uint8array":r==="[object Uint8ClampedArray]"?"uint8clampedarray":r==="[object Int16Array]"?"int16array":r==="[object Uint16Array]"?"uint16array":r==="[object Int32Array]"?"int32array":r==="[object Uint32Array]"?"uint32array":r==="[object Float32Array]"?"float32array":r==="[object Float64Array]"?"float64array":"object"}}}),BFo=PL({"node_modules/rename-keys/index.js"(e,t){(function(){function n(o,i){if(typeof i!="function")return o;var r={};for(var s in o)Object.prototype.hasOwnProperty.call(o,s)&&(r[i(s,o[s])||s]=o[s]);return r}t!==void 0&&t.exports?t.exports=n:typeof define=="function"&&define.amd?define([],function(){return n}):window.rename=n})()}}),wFo=PL({"node_modules/deep-rename-keys/index.js"(e,t){var n=MFo(),o=BFo();t.exports=function i(r,s){var a=n(r);if(a!=="object"&&a!=="array")throw Error("expected an object");var c=[];for(var l in a==="object"&&(r=o(r,s),c={}),r)if(r.hasOwnProperty(l)){var d=r[l];n(d)==="object"||n(d)==="array"?c[l]=i(d,s):c[l]=d}return c}}}),Szt=PL({"node_modules/eventemitter3/index.js"(e,t){var n=Object.prototype.hasOwnProperty,o="~";function i(){}function r(a,c,l){this.fn=a,this.context=c,this.once=l||!1}function s(){this._events=new i,this._eventsCount=0}Object.create&&(i.prototype=Object.create(null),new i().__proto__||(o=!1)),s.prototype.eventNames=function(){var a,c,l=[];if(this._eventsCount===0)return l;for(c in a=this._events)n.call(a,c)&&l.push(o?c.slice(1):c);return Object.getOwnPropertySymbols?l.concat(Object.getOwnPropertySymbols(a)):l},s.prototype.listeners=function(a,c){var l=o?o+a:a,d=this._events[l];if(c)return!!d;if(!d)return[];if(d.fn)return[d.fn];for(var u=0,h=d.length,A=Array(h);u<h;u++)A[u]=d[u].fn;return A},s.prototype.emit=function(a,c,l,d,u,h){var A=o?o+a:a;if(!this._events[A])return!1;var m,p,g=this._events[A],_=arguments.length;if(g.fn){switch(g.once&&this.removeListener(a,g.fn,void 0,!0),_){case 1:return g.fn.call(g.context),!0;case 2:return g.fn.call(g.context,c),!0;case 3:return g.fn.call(g.context,c,l),!0;case 4:return g.fn.call(g.context,c,l,d),!0;case 5:return g.fn.call(g.context,c,l,d,u),!0;case 6:return g.fn.call(g.context,c,l,d,u,h),!0}for(p=1,m=Array(_-1);p<_;p++)m[p-1]=arguments[p];g.fn.apply(g.context,m)}else{var f,y=g.length;for(p=0;p<y;p++)switch(g[p].once&&this.removeListener(a,g[p].fn,void 0,!0),_){case 1:g[p].fn.call(g[p].context);break;case 2:g[p].fn.call(g[p].context,c);break;case 3:g[p].fn.call(g[p].context,c,l);break;case 4:g[p].fn.call(g[p].context,c,l,d);break;default:if(!m)for(f=1,m=Array(_-1);f<_;f++)m[f-1]=arguments[f];g[p].fn.apply(g[p].context,m)}}return!0},s.prototype.on=function(a,c,l){var d=new r(c,l||this),u=o?o+a:a;return this._events[u]?this._events[u].fn?this._events[u]=[this._events[u],d]:this._events[u].push(d):(this._events[u]=d,this._eventsCount++),this},s.prototype.once=function(a,c,l){var d=new r(c,l||this,!0),u=o?o+a:a;return this._events[u]?this._events[u].fn?this._events[u]=[this._events[u],d]:this._events[u].push(d):(this._events[u]=d,this._eventsCount++),this},s.prototype.removeListener=function(a,c,l,d){var u=o?o+a:a;if(!this._events[u])return this;if(!c)return--this._eventsCount===0?this._events=new i:delete this._events[u],this;var h=this._events[u];if(h.fn)h.fn!==c||d&&!h.once||l&&h.context!==l||(--this._eventsCount===0?this._events=new i:delete this._events[u]);else{for(var A=0,m=[],p=h.length;A<p;A++)(h[A].fn!==c||d&&!h[A].once||l&&h[A].context!==l)&&m.push(h[A]);m.length?this._events[u]=m.length===1?m[0]:m:--this._eventsCount===0?this._events=new i:delete this._events[u]}return this},s.prototype.removeAllListeners=function(a){var c;return a?(c=o?o+a:a,this._events[c]&&(--this._eventsCount===0?this._events=new i:delete this._events[c])):(this._events=new i,this._eventsCount=0),this},s.prototype.off=s.prototype.removeListener,s.prototype.addListener=s.prototype.on,s.prototype.setMaxListeners=function(){return this},s.prefixed=o,s.EventEmitter=s,t!==void 0&&(t.exports=s)}}),TFo=PL({"node_modules/xml-lexer/dist/lexer.js"(e,t){function n(l,d,u){return d in l?Object.defineProperty(l,d,{value:u,enumerable:!0,configurable:!0,writable:!0}):l[d]=u,l}var o=Szt(),i=function(){},r={data:"state-data",cdata:"state-cdata",tagBegin:"state-tag-begin",tagName:"state-tag-name",tagEnd:"state-tag-end",attributeNameStart:"state-attribute-name-start",attributeName:"state-attribute-name",attributeNameEnd:"state-attribute-name-end",attributeValueBegin:"state-attribute-value-begin",attributeValue:"state-attribute-value"},s={lt:"action-lt",gt:"action-gt",space:"action-space",equal:"action-equal",quote:"action-quote",slash:"action-slash",char:"action-char",error:"action-error"},a={text:"text",openTag:"open-tag",closeTag:"close-tag",attributeName:"attribute-name",attributeValue:"attribute-value"},c={" ":s.space,"\t":s.space,"\n":s.space,"\r":s.space,"<":s.lt,">":s.gt,'"':s.quote,"'":s.quote,"=":s.equal,"/":s.slash};t.exports={State:r,Action:s,Type:a,create:function(l){var d,u,h,A,m,p,g,_,f,y;l=Object.assign({debug:!1},l);var x=new o,C=r.data,I="",b="",P="",E="",B="",w="",T=function(N,F){if(b[0]!=="?"&&b[0]!=="!"){var H={type:N,value:F};l.debug&&console.log("emit:",H),x.emit("data",H)}};x.stateMachine=(n(y={},r.data,(n(d={},s.lt,function(){I.trim()&&T(a.text,I),b="",B=!1,C=r.tagBegin}),n(d,s.char,function(N){I+=N}),d)),n(y,r.cdata,n({},s.char,function(N){(I+=N).substr(-3)==="]]>"&&(T(a.text,I.slice(0,-3)),I="",C=r.data)})),n(y,r.tagBegin,(n(u={},s.space,i),n(u,s.char,function(N){b=N,C=r.tagName}),n(u,s.slash,function(){b="",B=!0}),u)),n(y,r.tagName,(n(h={},s.space,function(){B?C=r.tagEnd:(C=r.attributeNameStart,T(a.openTag,b))}),n(h,s.gt,function(){T(B?a.closeTag:a.openTag,b),I="",C=r.data}),n(h,s.slash,function(){C=r.tagEnd,T(a.openTag,b)}),n(h,s.char,function(N){(b+=N)==="![CDATA["&&(C=r.cdata,I="",b="")}),h)),n(y,r.tagEnd,(n(A={},s.gt,function(){T(a.closeTag,b),I="",C=r.data}),n(A,s.char,i),A)),n(y,r.attributeNameStart,(n(m={},s.char,function(N){P=N,C=r.attributeName}),n(m,s.gt,function(){I="",C=r.data}),n(m,s.space,i),n(m,s.slash,function(){B=!0,C=r.tagEnd}),m)),n(y,r.attributeName,(n(p={},s.space,function(){C=r.attributeNameEnd}),n(p,s.equal,function(){T(a.attributeName,P),C=r.attributeValueBegin}),n(p,s.gt,function(){E="",T(a.attributeName,P),T(a.attributeValue,E),I="",C=r.data}),n(p,s.slash,function(){B=!0,E="",T(a.attributeName,P),T(a.attributeValue,E),C=r.tagEnd}),n(p,s.char,function(N){P+=N}),p)),n(y,r.attributeNameEnd,(n(g={},s.space,i),n(g,s.equal,function(){T(a.attributeName,P),C=r.attributeValueBegin}),n(g,s.gt,function(){E="",T(a.attributeName,P),T(a.attributeValue,E),I="",C=r.data}),n(g,s.char,function(N){E="",T(a.attributeName,P),T(a.attributeValue,E),P=N,C=r.attributeName}),g)),n(y,r.attributeValueBegin,(n(_={},s.space,i),n(_,s.quote,function(N){w=N,E="",C=r.attributeValue}),n(_,s.gt,function(){T(a.attributeValue,E=""),I="",C=r.data}),n(_,s.char,function(N){w="",E=N,C=r.attributeValue}),_)),n(y,r.attributeValue,(n(f={},s.space,function(N){w?E+=N:(T(a.attributeValue,E),C=r.attributeNameStart)}),n(f,s.quote,function(N){w===N?(T(a.attributeValue,E),C=r.attributeNameStart):E+=N}),n(f,s.gt,function(N){w?E+=N:(T(a.attributeValue,E),I="",C=r.data)}),n(f,s.slash,function(N){w?E+=N:(T(a.attributeValue,E),B=!0,C=r.tagEnd)}),n(f,s.char,function(N){E+=N}),f)),y);var Q=function(N){l.debug&&console.log(C,N);var F=x.stateMachine[C],H=F[function(z){return c[z]||s.char}(N)]||F[s.error]||F[s.char];H(N)};return x.write=function(N){for(var F=N.length,H=0;H<F;H++)Q(N[H])},x}}}}),DFo=PL({"node_modules/xml-reader/dist/reader.js"(e,t){var n=Szt(),o=TFo(),i=o.Type,r={element:"element",text:"text"},s=function(c){return Object.assign({name:"",type:r.element,value:"",parent:null,attributes:{},children:[]},c)},a=function(c){c=Object.assign({stream:!1,parentNodes:!0,doneEvent:"done",tagPrefix:"tag:",emitTopLevelOnly:!1,debug:!1},c);var l=void 0,d=void 0,u=void 0,h=void 0,A=new n,m=function(p){switch(p.type){case i.openTag:if(u===null)(u=d).name=p.value;else{var g=s({name:p.value,parent:u});u.children.push(g),u=g}break;case i.closeTag:var _=u.parent;if(c.parentNodes||(u.parent=null),u.name!==p.value)break;c.stream&&_===d&&(d.children=[],u.parent=null),c.emitTopLevelOnly&&_!==d||(A.emit(c.tagPrefix+u.name,u),A.emit("tag",u.name,u)),u===d&&(l.removeAllListeners("data"),A.emit(c.doneEvent,u),d=null),u=_;break;case i.text:u&&u.children.push(s({type:r.text,value:p.value,parent:c.parentNodes?u:null}));break;case i.attributeName:h=p.value,u.attributes[h]="";break;case i.attributeValue:u.attributes[h]=p.value}};return A.reset=function(){(l=o.create({debug:c.debug})).on("data",m),d=s(),u=null,h="",A.parse=l.write},A.reset(),A};t.exports={parseSync:function(c,l){l=Object.assign({},l,{stream:!1,tagPrefix:":"});var d=a(l),u=void 0;return d.on("done",function(h){u=h}),d.parse(c),u},create:a,NodeType:r}}}),{cos:sGr,sin:aGr,PI:cGr}=Math,{tan:lGr}=Math;Z3t(wFo()),Z3t(DFo());function BNe(e,t){if(e.points)for(let n of e.points)n.step=t;if(e.lines)for(let n of e.lines)n.step=t;if(e.infiniteLines)for(let n of e.infiniteLines)n.step=t;if(e.polygons)for(let n of e.polygons)n.step=t;if(e.rects)for(let n of e.rects)n.step=t;if(e.circles)for(let n of e.circles)n.step=t;if(e.texts)for(let n of e.texts)n.step=t;return e}var tne=class{MAX_ITERATIONS=1e5;solved=!1;failed=!1;iterations=0;progress=0;error=null;activeSubSolver;failedSubSolvers;timeToSolve;stats={};_setupDone=!1;getSolverName(){return this.constructor.name}setup(){this._setupDone||(this._setup(),this._setupDone=!0)}_setup(){}step(){if(this._setupDone||this.setup(),!this.solved&&!this.failed){this.iterations++;try{this._step()}catch(e){throw this.error=`${this.getSolverName()} error: ${e}`,this.failed=!0,e}!this.solved&&this.iterations>=this.MAX_ITERATIONS&&this.tryFinalAcceptance(),!this.solved&&this.iterations>=this.MAX_ITERATIONS&&(this.error=`${this.getSolverName()} ran out of iterations`,this.failed=!0),"computeProgress"in this&&(this.progress=this.computeProgress())}}_step(){}getConstructorParams(){throw Error("getConstructorParams not implemented")}getOutput(){return null}solve(){let e=Date.now();for(;!this.solved&&!this.failed;)this.step();let t=Date.now();this.timeToSolve=t-e}visualize(){return{lines:[],points:[],rects:[],circles:[]}}tryFinalAcceptance(){}preview(){return{lines:[],points:[],rects:[],circles:[]}}};function zAe(e,t,n,o={}){return{solverName:e,solverClass:t,getConstructorParams:n,onSolved:o.onSolved}}var NFo=class extends tne{startTimeOfStage={};endTimeOfStage={};timeSpentOnStage={};firstIterationOfStage={};currentPipelineStageIndex=0;inputProblem;pipelineOutputs={};constructor(e){super(),this.inputProblem=e,this.MAX_ITERATIONS=1e6}_step(){let e=this.pipelineDef[this.currentPipelineStageIndex];if(!e)return void(this.solved=!0);if(this.activeSubSolver){if(this.activeSubSolver.step(),this.activeSubSolver.solved){this.endTimeOfStage[e.solverName]=performance.now(),this.timeSpentOnStage[e.solverName]=this.endTimeOfStage[e.solverName]-this.startTimeOfStage[e.solverName];let n=this.activeSubSolver.getOutput();n!==null&&(this.pipelineOutputs[e.solverName]=n),e.onSolved?.(this),this.activeSubSolver=null,this.currentPipelineStageIndex++}else this.activeSubSolver.failed&&(this.error=this.activeSubSolver?.error,this.failed=!0,this.activeSubSolver=null);return}let t=e.getConstructorParams(this);this.activeSubSolver=new e.solverClass(...t),this[e.solverName]=this.activeSubSolver,this.timeSpentOnStage[e.solverName]=0,this.startTimeOfStage[e.solverName]=performance.now(),this.firstIterationOfStage[e.solverName]=this.iterations}solveUntilStage(e){for(;this.getCurrentStageName().toLowerCase()!==e.toLowerCase()&&(this.step(),!this.failed&&!this.solved););}getCurrentStageName(){return this.pipelineDef[this.currentPipelineStageIndex]?.solverName??"none"}getStageProgress(){let e=this.pipelineDef.length;if(e===0)return 1;let t=this.activeSubSolver?.progress??0;return(this.currentPipelineStageIndex+t)/e}getStageStats(){let e={};for(let t of this.pipelineDef){let n=this.timeSpentOnStage[t.solverName]||0,o=this.firstIterationOfStage[t.solverName]||0,i=this.iterations,r=t.solverName===this.getCurrentStageName()?i-o:0,s=this.currentPipelineStageIndex>this.pipelineDef.findIndex((a)=>a.solverName===t.solverName);e[t.solverName]={timeSpent:n,iterations:r,completed:s}}return e}initialVisualize(){return null}finalVisualize(){return null}visualize(){if(!this.solved&&this.activeSubSolver)return this.activeSubSolver.visualize();let e=0,t=this.initialVisualize();t&&(BNe(t,0),e=1);let n=null;this.solved&&(n=this.finalVisualize());let o=[t].filter(Boolean).concat(this.pipelineDef.map((i,r)=>{let s=this[i.solverName],a=s?.visualize();return a?(BNe(a,r+e),a):null}).filter(Boolean));return o.length===0?{points:[],rects:[],lines:[],circles:[],texts:[]}:(this.solved&&n&&(BNe(n,o.length+e+1),o.push(n)),o.length===1?o[0]:{points:o.flatMap((i)=>i.points||[]),rects:o.flatMap((i)=>i.rects||[]),lines:o.flatMap((i)=>i.lines||[]),circles:o.flatMap((i)=>i.circles||[]),texts:o.flatMap((i)=>i.texts||[])})}preview(){return this.activeSubSolver?this.activeSubSolver.preview():super.preview()}computeProgress(){return this.getStageProgress()}getStageOutput(e){return this.pipelineOutputs[e]}getAllOutputs(){return{...this.pipelineOutputs}}hasStageOutput(e){return e in this.pipelineOutputs}getSolver(e){return this[e]}},ZQe=(e,t,n)=>(t.x-e.x)*(n.y-e.y)-(t.y-e.y)*(n.x-e.x),Pzt=(e,t)=>{let n=[...new Set(e)].map((r)=>{let s=t[r];return s?{i:r,x:s.x,y:s.y}:null}).filter((r)=>r!==null);if(n.sort((r,s)=>r.x-s.x||r.y-s.y),n.length<=2)return n.map((r)=>r.i);let o=[],i=[];for(let r of n){for(;o.length>=2;){let s=o[o.length-2],a=o[o.length-1];if(!s||!a||ZQe(s,a,r)>0.0000000001)break;o.pop()}o.push(r)}for(let r=n.length-1;r>=0;r--){let s=n[r];if(s){for(;i.length>=2;){let a=i[i.length-2],c=i[i.length-1];if(!a||!c||ZQe(a,c,s)>0.0000000001)break;i.pop()}i.push(s)}}return o.pop(),i.pop(),o.concat(i).map((r)=>r.i)},e4t=(e)=>e!==void 0,RFo=class extends tne{input;output=null;constructor(e){super(),this.input=e}_step(){let{regions:e,hulls:t}={regions:(n=this.input).cells.map((o)=>o.map((i)=>n.pts[i]).filter(e4t)),hulls:n.cells.map((o)=>Pzt(o,n.pts).map((i)=>n.pts[i]).filter(e4t))};var n;this.output={pts:this.input.pts,validTris:this.input.validTris,regions:e,hulls:t,depths:this.input.depths},this.stats={regions:e.length},this.solved=!0}getConstructorParams(){return[this.input]}getOutput(){return this.output}visualize(){let e=this.output;return e?{points:e.pts.map((t)=>({x:t.x,y:t.y,color:"#3b82f6"})),lines:e.regions.flatMap((t)=>t.flatMap((n,o)=>{let i=t[(o+1)%t.length];return i?[{points:[n,i],strokeColor:"#0f766e"}]:[]})),rects:[],circles:[],texts:[{x:4,y:12,text:`regions: ${e.regions.length}`,color:"#1f2937"}]}:{points:[],lines:[],rects:[],circles:[],texts:[]}}},GAe=(e,t,n)=>{let o=Math.cos(n.ccwRotation),i=Math.sin(n.ccwRotation);return{x:n.center.x+e*o-t*i,y:n.center.y+e*i+t*o}},QFo=(e,t=[],n,o=[])=>{let i=[],{minX:r,maxX:s,minY:a,maxY:c}=e;i.push({x:r,y:a},{x:s,y:a},{x:s,y:c},{x:r,y:c});for(let l=1;l<10;l++){let d=l/10;i.push({x:r+d*(s-r),y:a}),i.push({x:s,y:a+d*(c-a)}),i.push({x:s-d*(s-r),y:c}),i.push({x:r,y:c-d*(c-a)})}for(let l of t){let d=l.diameter/2+n;for(let u=0;u<24;u++){let h=2*Math.PI*u/24;i.push({x:l.center.x+d*Math.cos(h),y:l.center.y+d*Math.sin(h)})}}for(let l of o){let d=l.width/2+n,u=l.height/2+n,h=Math.max(2,Math.ceil(Math.max(2*d,2*u)/20));for(let A=0;A<h;A++){let m=A/h;i.push(GAe(2*m*d-d,-u,l)),i.push(GAe(d,2*m*u-u,l)),i.push(GAe(d-2*m*d,u,l)),i.push(GAe(-d,u-2*m*u,l))}}return i.map((l,d)=>({x:l.x+0.000001*(d%7-3),y:l.y+0.000001*(d%5-2)}))},kFo=class extends tne{input;output=null;constructor(e){super(),this.input=e}_step(){let e=this.input.vias??[],t=this.input.rects??[];this.output={pts:QFo(this.input.bounds,e,this.input.clearance,t)},this.stats={points:this.output.pts.length},this.solved=!0}getConstructorParams(){return[this.input]}getOutput(){return this.output}visualize(){let e=(this.output?.pts??[]).map((t)=>({x:t.x,y:t.y,color:"#2563eb"}));return{points:e,lines:[],rects:[],circles:(this.input.vias??[]).map((t)=>({center:{x:t.center.x,y:t.center.y},radius:t.diameter/2+this.input.clearance,stroke:"#ef4444"})),texts:[{x:this.input.bounds.minX+6,y:this.input.bounds.minY+12,text:`sample points: ${e.length}`,color:"#1f2937"}]}}},LFo=(e,t,n)=>{let o=n.x-t.x,i=n.y-t.y,r=o*o+i*i;if(r<0.0000000001)return Math.hypot(e.x-t.x,e.y-t.y);let s=((e.x-t.x)*o+(e.y-t.y)*i)/r;return s=Math.max(0,Math.min(1,s)),Math.hypot(e.x-t.x-s*o,e.y-t.y-s*i)},t4t=(e,t)=>{if(e.length<=3)return 0;let n=Pzt(e,t),o=new Set(n),i=n.map((s)=>t[s]).filter((s)=>Boolean(s)),r=0;for(let s of e){if(o.has(s))continue;let a=t[s];if(!a)continue;let c=Number.POSITIVE_INFINITY;for(let l=0;l<i.length;l++){let d=i[l],u=i[(l+1)%i.length];d&&u&&(c=Math.min(c,LFo(a,d,u)))}r=Math.max(r,c)}return r},wNe=(e,t)=>e<t?1e5*e+t:1e5*t+e,FFo=(e,t)=>{let n=e.map((u,h)=>[u,e[(h+1)%e.length]]),o=t.map((u,h)=>[u,t[(h+1)%t.length]]),i=new Set;for(let[u,h]of n)if(h!==void 0)for(let[A,m]of o)m!==void 0&&u===m&&h===A&&i.add(wNe(u,h));if(i.size===0)return null;let r=[];for(let[u,h]of n)h!==void 0&&(i.has(wNe(u,h))||r.push([u,h]));for(let[u,h]of o)h!==void 0&&(i.has(wNe(u,h))||r.push([u,h]));if(r.length===0)return null;let s=new Map;for(let[u,h]of r)s.set(u,h);let a=r[0]?.[0];if(a===void 0)return null;let c=[a],l=s.get(a),d=0;for(;l!==void 0&&l!==a&&d++<r.length+5;)c.push(l),l=s.get(l);return l!==a||c.length!==r.length?null:c},HFo=(e,t)=>e<t?1e5*e+t:1e5*t+e,OFo=class extends tne{input;output=null;constructor(e){super(),this.input=e}_step(){let e=((t,n,o)=>{if(!t.length)return{cells:[],depths:[]};let i=t.map(([c,l,d])=>{let u=n[c],h=n[l],A=n[d];return u&&h&&A&&ZQe(u,h,A)<0?[c,d,l]:[c,l,d]}),r=!0,s=0;for(;r&&s++<800;){r=!1;let c=new Map,l=i.map(()=>new Set);for(let m=0;m<i.length;m++){let p=i[m];if(p)for(let g=0;g<p.length;g++){let _=p[g],f=p[(g+1)%p.length];if(_===void 0||f===void 0)continue;let y=HFo(_,f);if(c.has(y)){let x=c.get(y);x!==void 0&&(l[m]?.add(x),l[x]?.add(m))}else c.set(y,m)}}let d=-1,u=-1,h=null,A=Number.POSITIVE_INFINITY;for(let m=0;m<i.length;m++){let p=l[m];if(p)for(let g of p){if(g<=m)continue;let _=FFo(i[m]??[],i[g]??[]);if(!_)continue;let f=t4t(_,n);f<=o+0.000001&&f<A&&(A=f,d=m,u=g,h=_)}}if(d<0||u<0||!h)break;i[d]=h,i.splice(u,1),r=!0}let a=i.map((c)=>t4t(c,n));return{cells:i,depths:a}})(this.input.validTris,this.input.pts,this.input.concavityTolerance);this.output={pts:this.input.pts,validTris:this.input.validTris,cells:e.cells,depths:e.depths},this.stats={mergedCells:e.cells.length,maxDepth:e.depths.length?Math.max(...e.depths):0},this.solved=!0}getConstructorParams(){return[this.input]}getOutput(){return this.output}visualize(){let e=this.output?.cells??[];return{points:this.input.pts.map((t)=>({x:t.x,y:t.y,color:"#3b82f6"})),lines:e.flatMap((t)=>t.flatMap((n,o)=>{let i=this.input.pts[n],r=t[(o+1)%t.length],s=r===void 0?void 0:this.input.pts[r];return i&&s?[{points:[i,s],strokeColor:"#10b981"}]:[]})),rects:[],circles:[],texts:[{x:4,y:12,text:`merged cells: ${e.length}`,color:"#1f2937"}]}}},n4t=(e,t,n)=>{let o=2*(e.x*(t.y-n.y)+t.x*(n.y-e.y)+n.x*(e.y-t.y));if(Math.abs(o)<0.0000000001)return{x:0,y:0,r2:1000000000000000000};let i=e.x*e.x+e.y*e.y,r=t.x*t.x+t.y*t.y,s=n.x*n.x+n.y*n.y,a=(i*(t.y-n.y)+r*(n.y-e.y)+s*(e.y-t.y))/o,c=(i*(n.x-t.x)+r*(e.x-n.x)+s*(t.x-e.x))/o;return{x:a,y:c,r2:(e.x-a)**2+(e.y-c)**2}},zFo=(e,t,n)=>[e.a,e.b,e.c].includes(t)&&[e.a,e.b,e.c].includes(n),GFo=(e,t,n,o=[],i,r=[])=>e.filter(([s,a,c])=>{let l=t[s],d=t[a],u=t[c];if(!l||!d||!u)return!1;return((h,A,m,p=[],g,_=[])=>{let{minX:f,maxX:y,minY:x,maxY:C}=m;if(h<f-0.1||h>y+0.1||A<x-0.1||A>C+0.1)return!1;for(let I of p){let b=I.diameter/2+g;if((h-I.center.x)**2+(A-I.center.y)**2<b*b-0.1)return!1}for(let I of _){let b=I.width/2+g,P=I.height/2+g,E=h-I.center.x,B=A-I.center.y,w=Math.cos(I.ccwRotation),T=Math.sin(I.ccwRotation),Q=E*w+B*T,N=-E*T+B*w;if(Math.abs(Q)<b-0.1&&Math.abs(N)<P-0.1)return!1}return!0})((l.x+d.x+u.x)/3,(l.y+d.y+u.y)/3,n,o,i,r)}),YFo=class extends tne{input;output=null;constructor(e){super(),this.input=e}_step(){let e=this.input.vias??[],t=this.input.rects??[],n=((i)=>{let r=i.map((_,f)=>({..._,i:f}));if(r.length<3)return[];let{POSITIVE_INFINITY:s,POSITIVE_INFINITY:a,NEGATIVE_INFINITY:c,NEGATIVE_INFINITY:l}=Number;for(let _ of r)s=Math.min(s,_.x),a=Math.min(a,_.y),c=Math.max(c,_.x),l=Math.max(l,_.y);let d=Math.max(c-s,l-a)||1,u=(s+c)/2,h=(a+l)/2,A={x:u-30*d,y:h-d,i:-1},m={x:u,y:h+30*d,i:-2},p={x:u+30*d,y:h-d,i:-3},g=[{a:A,b:m,c:p,cc:n4t(A,m,p)}];for(let _ of r){let f=g.filter((C)=>{let I=_.x-C.cc.x,b=_.y-C.cc.y;return I*I+b*b<C.cc.r2+0.000001}),y=new Set(f),x=[];for(let C of f){let I=[[C.a,C.b],[C.b,C.c],[C.c,C.a]];for(let[b,P]of I){let E=!1;for(let B of f)if(B!==C&&zFo(B,b,P)){E=!0;break}E||x.push([b,P])}}g=g.filter((C)=>!y.has(C));for(let[C,I]of x)g.push({a:C,b:I,c:_,cc:n4t(C,I,_)})}return g.filter((_)=>_.a.i>=0&&_.b.i>=0&&_.c.i>=0).map((_)=>[_.a.i,_.b.i,_.c.i])})(this.input.pts),o=GFo(n,this.input.pts,this.input.bounds,e,this.input.clearance,t);this.output={pts:this.input.pts,validTris:o},this.stats={candidateTriangles:n.length,validTriangles:o.length},this.solved=!0}getConstructorParams(){return[this.input]}getOutput(){return this.output}visualize(){let e=this.output?.validTris??[];return{points:this.input.pts.map((t)=>({x:t.x,y:t.y,color:"#2563eb"})),lines:e.flatMap(([t,n,o])=>{let i=this.input.pts[t],r=this.input.pts[n],s=this.input.pts[o];return i&&r&&s?[{points:[i,r],strokeColor:"#64748b"},{points:[r,s],strokeColor:"#64748b"},{points:[s,i],strokeColor:"#64748b"}]:[]}),rects:[],circles:[],texts:[{x:this.input.bounds.minX+6,y:this.input.bounds.minY+12,text:`valid triangles: ${e.length}`,color:"#1f2937"}]}}},VFo=class extends NFo{pipelineDef=[zAe("generatePoints",kFo,(e)=>[e.inputProblem]),zAe("triangulate",YFo,(e)=>{let t=e.getStageOutput("generatePoints");if(!t)throw Error("generatePoints output missing");return[{pts:t.pts,bounds:e.inputProblem.bounds,vias:e.inputProblem.vias,rects:e.inputProblem.rects,clearance:e.inputProblem.clearance}]}),zAe("mergeCells",OFo,(e)=>{let t=e.getStageOutput("triangulate");if(!t)throw Error("triangulate output missing");return[{pts:t.pts,validTris:t.validTris,concavityTolerance:e.inputProblem.concavityTolerance}]}),zAe("buildRegions",RFo,(e)=>{let t=e.getStageOutput("mergeCells");if(!t)throw Error("mergeCells output missing");return[t]})];getConstructorParams(){return[this.inputProblem]}getOutput(){return this.getStageOutput("buildRegions")??null}visualize(){let e=this.getOutput();return e?{points:e.pts.map((t)=>({x:t.x,y:t.y,color:"#38b6ff"})),lines:e.regions.flatMap((t)=>t.map((n,o)=>{let i=t[(o+1)%t.length]??n;return{points:[{x:n.x,y:n.y},{x:i.x,y:i.y}],strokeColor:"#4ecb82"}})),rects:[],circles:(this.inputProblem.vias??[]).map((t)=>({center:{x:t.center.x,y:t.center.y},radius:t.diameter/2,stroke:"#ff6b6b"})),texts:[{x:this.inputProblem.bounds.minX+8,y:this.inputProblem.bounds.minY+16,text:`regions=${e.regions.length}`,color:"#ffffff"}]}:{points:[],lines:[],rects:[],circles:[],texts:[]}}},eke=0.000000001,UFo=(e,t)=>{let n=[Ezt(e)],o=[],i=t.maxSplitsPerRegion??32;for(;n.length>0;){let r=n.pop();if(!r)continue;if(r.length<4){o.push(r);continue}let s=WFo(r,t);if(!s||i<=0){o.push(r);continue}let[a,c]=KFo(r,s.i,s.j);i-=1,n.push(a,c)}return o},WFo=(e,t)=>{let n=jFo(e);if(!n)return null;let{triangles:o}=n,i=ZFo(e);if(i<=eke)return null;let r=Math.sqrt(i),s=o.map((c)=>eHo(e[c[0]],e[c[1]],e[c[2]])),a=null;for(let c of n.internalEdges){let{i:l,j:d,triA:u,triB:h}=c,A=tHo(e[l],e[d])/r;if(A>t.maxNeckRatio)continue;let m=XFo(u,h,o.length,n.triangleAdjacency,s),p=i-m,g=Math.min(m,p)/i;if(g<t.minSplitBalanceRatio)continue;let _=A/Math.max(g,eke);(!a||_<a.score)&&(a={i:l,j:d,score:_})}return a?{i:a.i,j:a.j}:null},XFo=(e,t,n,o,i)=>{let r=Array(n).fill(!1),s=[e];r[t]=!0;let a=0;for(;s.length>0;){let c=s.pop();if(c===void 0||r[c])continue;r[c]=!0,a+=i[c]??0;let l=o[c]??[];for(let d of l)r[d]||s.push(d)}return a},KFo=(e,t,n)=>[o4t(e,t,n),o4t(e,n,t)],o4t=(e,t,n)=>{let o=[],i=e.length,r=t;for(o.push(e[r]);r!==n;)r=(r+1)%i,o.push(e[r]);return Ezt(o)},jFo=(e)=>{let t=e.length;if(t<3)return null;let n=new Set;for(let a=0;a<t;a++){let c=(a+1)%t;n.add(i4t(a,c))}let o=qFo(e);if(!o||o.length===0)return null;let i=new Map;o.forEach((a,c)=>{for(let l=0;l<3;l++){let d=a[l],u=a[(l+1)%3],h=i4t(d,u),A=i.get(h);A?A.push(c):i.set(h,[c])}});let r=Array.from({length:o.length},()=>[]),s=[];for(let[a,c]of i.entries()){if(n.has(a))continue;if(c.length!==2)continue;let[l,d]=a.split("_"),u=Number(l),h=Number(d),A=c[0],m=c[1];s.push({i:u,j:h,triA:A,triB:m});let p=r[A],g=r[m];p&&p.push(m),g&&g.push(A)}return{triangles:o,internalEdges:s,triangleAdjacency:r}},qFo=(e)=>{let t=e.length;if(t<3)return null;let n=Math.sign(vzt(e));if(n===0)return null;let o=[...Array(t).keys()];n<0&&o.reverse();let i=[],r=0;for(;o.length>3&&r<t*t;){let s=!1;for(let a=0;a<o.length;a++){let c=o[(a-1+o.length)%o.length],l=o[a],d=o[(a+1)%o.length];if(c===void 0||l===void 0||d===void 0)continue;let u=e[c],h=e[l],A=e[d];if(!u||!h||!A)continue;if(!JFo(u,h,A))continue;let m=!1;for(let p of o){if(p===c||p===l||p===d)continue;let g=e[p];if(g&&$Fo(g,u,h,A)){m=!0;break}}if(!m){i.push([c,l,d]),o.splice(a,1),s=!0;break}}if(!s)return null;r+=1}if(o.length===3){let[s,a,c]=o;s!==void 0&&a!==void 0&&c!==void 0&&i.push([s,a,c])}return i},JFo=(e,t,n)=>zee(e,t,n)>eke,$Fo=(e,t,n,o)=>{let i=zee(t,n,e),r=zee(n,o,e),s=zee(o,t,e);return i>=-0.000000001&&r>=-0.000000001&&s>=-0.000000001},zee=(e,t,n)=>(t.x-e.x)*(n.y-e.y)-(t.y-e.y)*(n.x-e.x),vzt=(e)=>{let t=0;for(let n=0;n<e.length;n++){let o=e[n],i=e[(n+1)%e.length];o&&i&&(t+=o.x*i.y-i.x*o.y)}return t/2},ZFo=(e)=>Math.abs(vzt(e)),eHo=(e,t,n)=>Math.abs(zee(e,t,n))/2,tHo=(e,t)=>Math.hypot(e.x-t.x,e.y-t.y),i4t=(e,t)=>e<t?`${e}_${t}`:`${t}_${e}`,Ezt=(e)=>{if(e.length<2)return e;let t=e[0],n=e[e.length-1];return t&&n&&t.x===n.x&&t.y===n.y?e.slice(0,-1):e},xx={pattern:"grid",pitchX:2.2,pitchY:1.8,staggerAxis:"x",staggerOffset:1.1,staggerOffsetX:1.1,padWidth:0.9,padHeight:1,padGap:0.35,viaDiameter:0.3,clearance:0.2,concavityTolerance:0.3,boundsPadding:1.2,orientation:"horizontal",portSpacing:0.25,maxNeckRatio:0,minSplitBalanceRatio:0.2},nHo=(e,t)=>{let{POSITIVE_INFINITY:n,POSITIVE_INFINITY:o,NEGATIVE_INFINITY:i,NEGATIVE_INFINITY:r}=Number;for(let s of e)for(let a of s.padCenters){let c=t.orientation==="horizontal"?t.padWidth/2:t.padHeight/2,l=t.orientation==="horizontal"?t.padHeight/2:t.padWidth/2;a.x-c<n&&(n=a.x-c),a.y-l<o&&(o=a.y-l),a.x+c>i&&(i=a.x+c),a.y+l>r&&(r=a.y+l)}return{minX:n-t.boundsPadding,minY:o-t.boundsPadding,maxX:i+t.boundsPadding,maxY:r+t.boundsPadding}},oHo=(e)=>e.pattern==="staggered"?((t)=>{let n=[],o=[],i=t.padGap/2+t.padWidth/2,r=-(t.cols-1)*t.pitchX/2,s=-(t.rows-1)*t.pitchY/2;for(let a=0;a<t.rows;a++){let c=t.staggerAxis==="x"&&a%2==1?t.staggerOffset:0;for(let l=0;l<t.cols;l++){let d=t.staggerAxis==="y"&&l%2==1?t.staggerOffset:0,u={x:r+l*t.pitchX+c,y:s+a*t.pitchY+d},h=t.orientation==="horizontal"?{x:u.x-i,y:u.y}:{x:u.x,y:u.y-i},A=t.orientation==="horizontal"?{x:u.x+i,y:u.y}:{x:u.x,y:u.y+i};n.push({jumperId:`jumper_r${a}_c${l}`,center:u,orientation:t.orientation,padCenters:[h,A]}),o.push({center:h,diameter:t.viaDiameter},{center:A,diameter:t.viaDiameter})}}return{jumpers:n,vias:o,bounds:nHo(n,t)}})(e):((t)=>{let n=[],o=[],i=t.padGap/2+t.padWidth/2,r=-(t.cols-1)*t.pitchX/2,s=-(t.rows-1)*t.pitchY/2;for(let a=0;a<t.rows;a++)for(let c=0;c<t.cols;c++){let l={x:r+c*t.pitchX,y:s+a*t.pitchY},d=t.orientation==="horizontal"?{x:l.x-i,y:l.y}:{x:l.x,y:l.y-i},u=t.orientation==="horizontal"?{x:l.x+i,y:l.y}:{x:l.x,y:l.y+i},h=`jumper_r${a}_c${c}`;n.push({jumperId:h,center:l,orientation:t.orientation,padCenters:[d,u]}),o.push({center:d,diameter:t.viaDiameter},{center:u,diameter:t.viaDiameter})}return{jumpers:n,vias:o,bounds:{minX:r-i-t.padWidth/2-t.boundsPadding,maxX:r+(t.cols-1)*t.pitchX+i+t.padWidth/2+t.boundsPadding,minY:s-i-t.padHeight/2-t.boundsPadding,maxY:s+(t.rows-1)*t.pitchY+i+t.padHeight/2+t.boundsPadding}}})(e),Mzt=(e)=>({x:(e.minX+e.maxX)/2,y:(e.minY+e.maxY)/2}),TNe=(e)=>[{x:e.minX,y:e.minY},{x:e.maxX,y:e.minY},{x:e.maxX,y:e.maxY},{x:e.minX,y:e.maxY}],W8=(e,t,n)=>Math.abs(e-t)<=n,YAe=(e,t,n)=>W8(e.x,t.x,n)&&W8(e.y,t.y,n),iHo=(e)=>e.map((t,n)=>{let o=((i)=>{let{POSITIVE_INFINITY:r,POSITIVE_INFINITY:s,NEGATIVE_INFINITY:a,NEGATIVE_INFINITY:c}=Number;for(let l of i)l.x<r&&(r=l.x),l.y<s&&(s=l.y),l.x>a&&(a=l.x),l.y>c&&(c=l.y);return{minX:r,minY:s,maxX:a,maxY:c}})(t);return{regionId:`top_${n}`,ports:[],d:{bounds:o,center:Mzt(o),polygon:t,isPad:!1}}}),rHo=(e)=>{let t=e.end.x-e.start.x,n=e.end.y-e.start.y;return Math.hypot(t,n)},AU=(e,t)=>({x:e.start.x+(e.end.x-e.start.x)*t,y:e.start.y+(e.end.y-e.start.y)*t}),r4t=(e,t,n)=>{let o=[];if(!e.d.polygon||!t.d.polygon)return o;for(let i=0;i<e.d.polygon.length;i++){let r=e.d.polygon[i],s=e.d.polygon[(i+1)%e.d.polygon.length];if(r&&s)for(let a=0;a<t.d.polygon.length;a++){let c=t.d.polygon[a],l=t.d.polygon[(a+1)%t.d.polygon.length];if(!c||!l)continue;let d=lHo({start:r,end:s},{start:c,end:l},n);if(!d)continue;o.some((u)=>cHo(u,d,n))||o.push(d)}}return o},sHo=(e,t)=>{let n=[];for(let o of e){let i=o,r=!0;for(;r;){r=!1;for(let s=0;s<n.length;s++){let a=n[s];if(!a)continue;let c=aHo(i,a,t);if(c){i=c,n.splice(s,1),r=!0;break}}}n.push(i)}return n},aHo=(e,t,n)=>{let o=e.end.x-e.start.x,i=e.end.y-e.start.y,r=t.end.x-t.start.x,s=t.end.y-t.start.y,a=o**2+i**2;if(a<=n**2)return null;if(!W8(o*s-i*r,0,n))return null;let c=t.start.x-e.start.x,l=t.start.y-e.start.y,d=t.end.x-e.start.x,u=t.end.y-e.start.y,h=o*u-i*d;if(!W8(o*l-i*c,0,n)||!W8(h,0,n))return null;let A=(c*o+l*i)/a,m=(d*o+u*i)/a,p=Math.min(A,m),g=Math.max(A,m),_=n/Math.sqrt(a);if(p>1+_||g<0-_)return null;let f=Math.min(0,p),y=Math.max(1,g);return{start:AU(e,f),end:AU(e,y)}},cHo=(e,t,n)=>YAe(e.start,t.start,n)&&YAe(e.end,t.end,n)||YAe(e.start,t.end,n)&&YAe(e.end,t.start,n),lHo=(e,t,n)=>{let o=e.end.x-e.start.x,i=e.end.y-e.start.y,r=t.end.x-t.start.x,s=t.end.y-t.start.y,a=o**2+i**2;if(a<=n**2)return null;if(!W8(o*s-i*r,0,n))return null;let c=t.start.x-e.start.x,l=t.start.y-e.start.y,d=t.end.x-e.start.x,u=t.end.y-e.start.y,h=o*u-i*d;if(!W8(o*l-i*c,0,n)||!W8(h,0,n))return null;let A=(c*o+l*i)/a,m=(d*o+u*i)/a,p=Math.max(0,Math.min(A,m)),g=Math.min(1,Math.max(A,m));return g-p<=n/Math.sqrt(a)?null:{start:AU(e,p),end:AU(e,g)}},dHo=(e,t,n)=>{let o=Math.max(e.minX,t.minX),i=Math.min(e.maxX,t.maxX),r=Math.max(e.minY,t.minY),s=Math.min(e.maxY,t.maxY);return i<o-n||s<r-n?null:{minX:o,maxX:i,minY:r,maxY:s}},uHo=(e)=>{let t=((m)=>{let p=m.orientation??xx.orientation,g=m.staggerAxis??xx.staggerAxis,_=m.padWidth??xx.padWidth,f=m.padHeight??xx.padHeight,y=m.padGap??xx.padGap,x=m.clearance??xx.clearance,C=m.colSpacing??m.pitchX??xx.pitchX,I=m.rowSpacing??m.pitchY??xx.pitchY,b=(P=_,E=f,B=y,p==="horizontal"?{x:B+2*P,y:E}:{x:E,y:B+2*P});var P,E,B;let w=x,T=((F,H,z,Y,U)=>F==="horizontal"?H==="x"?U+2*z:Y:H==="x"?Y:U+2*z)(p,g,_,f,y)/2,Q=m.staggerOffset??m.staggerOffsetX??T,N={...xx,...m,orientation:p,staggerAxis:g,pitchX:Math.max(C,b.x+w),pitchY:Math.max(I,b.y+w),padWidth:_,padHeight:f,padGap:y,staggerOffset:Q,staggerOffsetX:Q,concavityTolerance:m.concavityTolerance??xx.concavityTolerance,clearance:x,portSpacing:m.portSpacing??xx.portSpacing,maxNeckRatio:m.maxNeckRatio??xx.maxNeckRatio,minSplitBalanceRatio:m.minSplitBalanceRatio??xx.minSplitBalanceRatio};if(N.cols<=0||N.rows<=0)throw Error("rows and cols must be > 0");if(!Number.isFinite(N.portSpacing)||N.portSpacing<=0)throw Error("portSpacing must be > 0");if(!Number.isFinite(N.maxNeckRatio)||N.maxNeckRatio<0)throw Error("maxNeckRatio must be >= 0");if(!Number.isFinite(N.minSplitBalanceRatio)||N.minSplitBalanceRatio<0||N.minSplitBalanceRatio>0.5)throw Error("minSplitBalanceRatio must be between 0 and 0.5");return N})(e),n=oHo(t),o=t.orientation==="horizontal"?t.padWidth:t.padHeight,i=t.orientation==="horizontal"?t.padHeight:t.padWidth,r=n.jumpers.flatMap((m)=>m.padCenters.map((p)=>({center:p,width:o,height:i,ccwRotation:0}))),s=new VFo({bounds:n.bounds,rects:r,clearance:0,concavityTolerance:t.concavityTolerance});s.solve();let a=s.getOutput();if(!a)throw Error(s.error??"ConvexRegionsSolver failed");let c=((m,p)=>{if(p.maxNeckRatio<=0)return m;let g=[];for(let _ of m)g.push(...UFo(_,p));return g})(a.regions,{maxNeckRatio:t.maxNeckRatio,minSplitBalanceRatio:t.minSplitBalanceRatio}),l=iHo(c),d=((m,p)=>m.flatMap((g)=>{let[_,f]=g.padCenters,y=p.orientation==="horizontal"?p.padWidth/2:p.padHeight/2,x=p.orientation==="horizontal"?p.padHeight/2:p.padWidth/2,C={minX:_.x-y,maxX:_.x+y,minY:_.y-x,maxY:_.y+x},I={minX:f.x-y,maxX:f.x+y,minY:f.y-x,maxY:f.y+x},b=y/2,P=x/2,E=p.orientation==="horizontal"?{minX:Math.min(_.x,f.x),maxX:Math.max(_.x,f.x),minY:g.center.y-P,maxY:g.center.y+P}:{minX:g.center.x-b,maxX:g.center.x+b,minY:Math.min(_.y,f.y),maxY:Math.max(_.y,f.y)};return[{regionId:`${g.jumperId}_pad1`,ports:[],d:{bounds:C,center:_,polygon:TNe(C),isPad:!0,isThroughJumper:!1}},{regionId:`${g.jumperId}_bridge`,ports:[],d:{bounds:E,center:g.center,polygon:TNe(E),isPad:!1,isThroughJumper:!0}},{regionId:`${g.jumperId}_pad2`,ports:[],d:{bounds:I,center:f,polygon:TNe(I),isPad:!0,isThroughJumper:!1}}]}))(n.jumpers,{orientation:t.orientation,padWidth:t.padWidth,padHeight:t.padHeight}),u=((m,p,g=0.00001)=>{let _=[],f=0;for(let y=0;y<m.length;y++){let x=m[y];if(x?.d.polygon)for(let C=y+1;C<m.length;C++){let I=m[C];if(!I?.d.polygon)continue;let b=r4t(x,I,g);for(let P of b){let E=rHo(P),B=Math.floor(E/p),w=Math.max(1,B-1);for(let T=0;T<w;T++){let Q=AU(P,(T+1)/(w+1));_.push({portId:"tp_"+f++,region1:x,region2:I,d:{x:Q.x,y:Q.y}})}}}}return _})(l,t.portSpacing),h=((m,p,g=0.00001)=>{let _=[],f=0,y=0,x=m.filter((I)=>I.d.isPad),C=m.filter((I)=>I.d.isThroughJumper&&!I.d.isPad);for(let I of x)for(let b of p){let P=r4t(I,b,g),E=sHo(P,g);for(let B of E){let w=AU(B,0.5);_.push({portId:"jp_"+f++,region1:I,region2:b,d:{x:w.x,y:w.y}})}}for(let I of C)for(let b of x){let P=dHo(I.d.bounds,b.d.bounds,g);if(!P)continue;let E=Mzt(P);_.push({portId:"jip_"+y++,region1:b,region2:I,d:{x:E.x,y:E.y}})}return _})(d,l),A=[...u,...h];return((m)=>{for(let p of m)p.region1.ports.push(p),p.region2.ports.push(p)})(A),{regions:[...l,...d],ports:A,jumperLocations:n.jumpers.map((m,p)=>({center:m.center,orientation:m.orientation,padRegions:[d[3*p],d[3*p+2]].filter((g)=>Boolean(g))})),topLayerRegions:l,jumperRegions:d,jumpers:n.jumpers,vias:n.vias,bounds:n.bounds}},hHo=class extends Oi{getSolverName(){return"JumperPrepatternSolver2_HyperGraph"}constructorParams;nodeWithPortPoints;colorMap;traceWidth;obstacleMargin;hyperParameters;jumperGraphSolver=null;xyConnections=[];graphBounds=null;jumperLocations=[];solvedRoutes=[];jumpers=[];phase="jumperGraph";curvySolvers=[];currentCurvySolverIndex=0;routeInfos=[];regionCurvedPaths=new Map;constructor(e){super(),this.constructorParams=e,this.nodeWithPortPoints=e.nodeWithPortPoints,this.colorMap=e.colorMap??{},this.traceWidth=e.traceWidth??0.15,this.obstacleMargin=e.obstacleMargin??0.15,this.hyperParameters=e.hyperParameters??{},this.MAX_ITERATIONS=1e6,Object.keys(this.colorMap).length===0&&(this.colorMap=this._buildColorMap())}getConstructorParams(){return this.constructorParams}_buildColorMap(){let e=["#e6194b","#3cb44b","#ffe119","#4363d8","#f58231","#911eb4","#46f0f0","#f032e6","#bcf60c","#fabebe"],t={},n=new Set;for(let i of this.nodeWithPortPoints.portPoints)n.add(i.connectionName);let o=0;for(let i of Array.from(n))t[i]=e[o%e.length],o++;return t}_normalizeRegionPolygonsToBounds(e){for(let t of e.regions){let n=t.d,o=n?.polygon,i=n?.bounds;if(!o||o.length===0||!i)continue;let r=1/0,s=1/0;for(let l of o)r=Math.min(r,l.x),s=Math.min(s,l.y);let a=i.minX-r,c=i.minY-s;(Math.abs(a)>0.000000000001||Math.abs(c)>0.000000000001)&&(n.polygon=o.map((l)=>({x:l.x+a,y:l.y+c}))),n.polygonPerimeterCache&&(n.polygonPerimeterCache=void 0)}return e}_getPatternConfig(){return{cols:this.hyperParameters.COLS??1,rows:this.hyperParameters.ROWS??1}}_generate0603Grid(e,t,n,o){let i=t==="horizontal"?e.rows:e.cols,r=t==="horizontal"?e.cols:e.rows,s=o.maxX-o.minX,a=o.maxY-o.minY,l=this.hyperParameters.TRACE_CHANNELS_BETWEEN_JUMPERS??1,d=this.traceWidth*l+2*this.obstacleMargin,u=t==="horizontal"?2.15:1,h=t==="horizontal"?1:2.15,A=t==="horizontal"?"x":"y",m=n==="staggered",p=m&&A==="x"?u/2:m?h/2:0,g=Math.max(0,s-1),_=Math.max(0,a-1),f=Math.max(0,g-(m&&A==="x"?p:0)),y=Math.max(0,_-(m&&A==="y"?p:0)),x=i>1?Math.max(u+d,(f-u)/(i-1)):u,C=r>1?Math.max(h+d,(y-h)/(r-1)):h,I=uHo({cols:i,rows:r,orientation:t,pattern:n,staggerAxis:A,colSpacing:x,rowSpacing:C,padWidth:0.9,padHeight:1,padGap:0.35,clearance:d,boundsPadding:0,maxNeckRatio:0.4,minSplitBalanceRatio:0.2}),b=I.bounds,P=(b.minX+b.maxX)/2,E=(b.minY+b.maxY)/2,B=Yk((o.minX+o.maxX)/2-P,(o.minY+o.maxY)/2-E);return this._normalizeRegionPolygonsToBounds(XOt(I,B))}_initializeGraph(){let e=this.nodeWithPortPoints,t=this._getPatternConfig(),n=this.hyperParameters.ORIENTATION??"vertical",o=this.hyperParameters.JUMPER_TYPE??"1206x4",i=this.hyperParameters.PATTERN??"grid",r={minX:e.center.x-e.width/2,maxX:e.center.x+e.width/2,minY:e.center.y-e.height/2,maxY:e.center.y+e.height/2},s;if(this.graphBounds=r,o==="0603"){let l=this._generate0603Grid(t,n,i,r);if(!l)return this.error=`0603 grid (${t.cols}x${t.rows}) is too large to fit in node bounds`,this.failed=!0,!1;s=l}else s=VLo({cols:t.cols,rows:t.rows,marginX:Math.max(1.2,0.3*t.cols),marginY:Math.max(1.2,0.3*t.rows),outerPaddingX:0.4,outerPaddingY:0.4,parallelTracesUnderJumperCount:2,innerColChannelPointCount:3,innerRowChannelPointCount:3,outerChannelXPointCount:3,outerChannelYPointCount:3,regionsBetweenPads:!0,orientation:n,bounds:r});if(s.regions.length>0){let l=1/0,d=-1/0,u=1/0,h=-1/0;for(let m of s.regions){if(!m.d?.isPad)continue;let p=m.d?.bounds;p&&(l=Math.min(l,p.minX),d=Math.max(d,p.maxX),u=Math.min(u,p.minY),h=Math.max(h,p.maxY))}let A=o==="0603"?0.5:1;if(l-A<r.minX||d+A>r.maxX||u-A<r.minY||h+A>r.maxY)return this.error=`baseGraph bounds (${l.toFixed(2)}, ${u.toFixed(2)}, ${d.toFixed(2)}, ${h.toFixed(2)}) exceed node bounds (${r.minX.toFixed(2)}, ${r.minY.toFixed(2)}, ${r.maxX.toFixed(2)}, ${r.maxY.toFixed(2)})`,this.failed=!0,!1}this.jumperLocations=s.jumperLocations?.map((l)=>({center:l.center,orientation:l.orientation,padRegions:l.padRegions}))??[];let a=new Map;for(let l of e.portPoints){let d=a.get(l.connectionName);d?d.points.push(l):a.set(l.connectionName,{points:[l],rootConnectionName:l.rootConnectionName})}this.xyConnections=[];for(let[l,d]of Array.from(a.entries()))d.points.length<2||this.xyConnections.push({start:{x:d.points[0].x,y:d.points[0].y},end:{x:d.points[1].x,y:d.points[1].y},connectionId:l});if(this.xyConnections.length===0)return this.solved=!0,!0;let c=((l,d)=>{let u=[...l.regions],h=[...l.ports],A=[],m=WOt(l.regions);for(let p of d){let{start:g,end:_,connectionId:f}=p,y=M3t(`conn:${f}:start`,g.x,g.y);u.push(y);let x=M3t(`conn:${f}:end`,_.x,_.y);u.push(x);let C=w3t(g.x,g.y,l.regions,m);if(C){let P=E3t(`conn:${f}:start-port`,y,C.region,C.portPosition);h.push(P)}let I=w3t(_.x,_.y,l.regions,m);if(I){let P=E3t(`conn:${f}:end-port`,x,I.region,I.portPosition);h.push(P)}let b={connectionId:f,mutuallyConnectedNetworkId:f,startRegion:y,endRegion:x};A.push(b)}return{regions:u,ports:h,connections:A}})(s,this.xyConnections);return this.jumperGraphSolver=new GLo({inputGraph:{regions:c.regions,ports:c.ports},inputConnections:c.connections}),this.jumperGraphSolver.MAX_ITERATIONS*=3,!0}_step(){switch(this.phase){case"jumperGraph":this._stepJumperGraph();break;case"curvyTrace":this._stepCurvyTrace();break;case"done":this.solved=!0}}_stepJumperGraph(){if(!this.jumperGraphSolver){if(this._initializeGraph(),this.solved)return;if(!this.jumperGraphSolver)return void(this.failed=!0)}this.activeSubSolver=this.jumperGraphSolver,this.jumperGraphSolver.step(),this.jumperGraphSolver.solved?(this._initializeCurvyTraceSolvers(),this.curvySolvers.length>0?this.phase="curvyTrace":(this._finalizeCurvyTraceResults(),this.phase="done",this.solved=!0)):this.jumperGraphSolver.failed&&(this.error=this.jumperGraphSolver.error,this.failed=!0)}_stepCurvyTrace(){if(this.currentCurvySolverIndex>=this.curvySolvers.length)return this._finalizeCurvyTraceResults(),this.phase="done",void(this.solved=!0);let e=this.curvySolvers[this.currentCurvySolverIndex],t=e.solver;if(this.activeSubSolver=t,t.step(),t.solved){let n=e.regionId;this.regionCurvedPaths.has(n)||this.regionCurvedPaths.set(n,new Map);for(let o of t.outputTraces){let i=o.networkId??"",r=o.points.map((a)=>({x:a.x,y:a.y})),s={path:r,start:r[0]??{x:0,y:0},end:r[r.length-1]??{x:0,y:0}};this.regionCurvedPaths.get(n).has(i)||this.regionCurvedPaths.get(n).set(i,[]),this.regionCurvedPaths.get(n).get(i).push(s)}this.currentCurvySolverIndex++}else t.failed&&this.currentCurvySolverIndex++}_initializeCurvyTraceSolvers(){if(!this.jumperGraphSolver)return;let e=new Set,t=[];for(let o of this.jumperLocations)for(let i of o.padRegions){let r=i.d.bounds,s=i.d.center;t.push({minX:r.minX,minY:r.minY,maxX:r.maxX,maxY:r.maxY,center:{x:s.x,y:s.y},networkIds:[]})}let n=new Map;for(let o=0;o<this.jumperGraphSolver.solvedRoutes.length;o++){let i=this.jumperGraphSolver.solvedRoutes[o],r=i.connection.connectionId,s=this.nodeWithPortPoints.portPoints.find((u)=>u.connectionName===r)?.rootConnectionName,a=[],c=[],l=null,d=null;for(let u=0;u<i.path.length;u++){let h=i.path[u],{port:A,lastRegion:m}=h,{region1:p,region2:g}=A,_;if(m)p&&p.regionId!==m.regionId?_=p:g&&g.regionId!==m.regionId&&(_=g);else{let f=i.path[u+1],y=f?.lastRegion;if(y&&(p&&p.regionId===y.regionId?_=p:g&&g.regionId===y.regionId&&(_=g)),!_){let x=(C)=>C?.regionId?.startsWith("conn:");_=!p||x(p)||p.d?.isPad||p.d?.isThroughJumper?!g||x(g)||g.d?.isPad||g.d?.isThroughJumper?!p||p.d?.isPad||p.d?.isThroughJumper?(!g||g.d?.isPad||g.d?.isThroughJumper)&&p||g:p:g:p}}if(_&&(!l||_.regionId!==l.regionId)){if(l&&d){c.push({regionId:l.regionId,region:l,entryPort:d,exitPort:A});let f=l.regionId;n.has(f)||n.set(f,[]),n.get(f).push({regionId:l.regionId,region:l,routeIndex:o,connectionName:r,rootConnectionName:s,entryPort:d,exitPort:A})}l=_,d=A}if(m?.d?.isThroughJumper&&!e.has(m.regionId)){e.add(m.regionId);let f=m.d.bounds,y=m.d.center,x=f.maxX-f.minX>f.maxY-f.minY,C=(this.hyperParameters.JUMPER_TYPE??"1206x4")==="0603"?"0603":"1206x4_pair";x?a.push({route_type:"jumper",start:{x:f.minX,y:y.y},end:{x:f.maxX,y:y.y},footprint:C}):a.push({route_type:"jumper",start:{x:y.x,y:f.minY},end:{x:y.x,y:f.maxY},footprint:C})}}if(l&&d){let u=i.path[i.path.length-1];c.push({regionId:l.regionId,region:l,entryPort:d,exitPort:u?.port||null})}this.routeInfos.push({connectionId:r,rootConnectionName:s,jumpers:a,traversals:c})}for(let o=0;o<this.routeInfos.length;o++){let i=this.routeInfos[o],r=i.rootConnectionName??i.connectionId;for(let s of i.jumpers){let a=[s.start,s.end];for(let c of a)for(let l of t){let d=Math.abs(l.center.x-c.x),u=Math.abs(l.center.y-c.y);d<0.1&&u<0.1&&(l.networkIds.includes(r)||l.networkIds.push(r))}}}for(let[o,i]of n){if(i.length===0)continue;let r=i[0].region;if(r.d.isPad||r.d.isThroughJumper)continue;let s=r.d.bounds,a=[];for(let h of i)a.push({start:{x:h.entryPort.d.x,y:h.entryPort.d.y},end:{x:h.exitPort.d.x,y:h.exitPort.d.y},networkId:h.rootConnectionName??h.connectionName});let c=0.01,l=t.filter((h)=>h.minX<=s.maxX+c&&h.maxX>=s.minX-c&&h.minY<=s.maxY+c&&h.maxY>=s.minY-c).map((h)=>{let A=i.map((p)=>p.rootConnectionName??p.connectionName),m=h.networkIds.find((p)=>A.includes(p));return{minX:h.minX,minY:h.minY,maxX:h.maxX,maxY:h.maxY,center:h.center,networkId:m}}),d={bounds:s,waypointPairs:a,obstacles:l,preferredTraceToTraceSpacing:2*this.traceWidth,preferredObstacleToTraceSpacing:2*this.traceWidth},u=new kOt(d);this.curvySolvers.push({solver:u,regionId:o,traversals:i.map((h)=>({routeIndex:h.routeIndex,connectionName:h.connectionName,rootConnectionName:h.rootConnectionName}))})}}_finalizeCurvyTraceResults(){let e=(t,n)=>Math.sqrt((t.x-n.x)**2+(t.y-n.y)**2);for(let t=0;t<this.routeInfos.length;t++){let n=this.routeInfos[t],o=[];for(let i of n.traversals){let r=i.regionId,s=n.rootConnectionName??n.connectionId,a=this.regionCurvedPaths.get(r)?.get(s),c=null;if(a&&a.length>0){let l={x:i.entryPort.d.x,y:i.entryPort.d.y},d=i.exitPort?{x:i.exitPort.d.x,y:i.exitPort.d.y}:null,u=null,h=1/0;for(let A of a){let m=e(A.start,l)+(d?e(A.end,d):0);m<h&&(h=m,u=A)}u&&h<0.5&&(c=u.path)}if(c&&c.length>0)for(let l=o.length>0?1:0;l<c.length;l++)o.push({x:c[l].x,y:c[l].y,z:0});else o.length===0&&o.push({x:i.entryPort.d.x,y:i.entryPort.d.y,z:0}),i.exitPort&&o.push({x:i.exitPort.d.x,y:i.exitPort.d.y,z:0})}this.solvedRoutes.push({connectionName:n.connectionId,rootConnectionName:n.rootConnectionName,traceThickness:this.traceWidth,route:o,jumpers:n.jumpers})}}getOutput(){return this.solvedRoutes}getOutputJumpers(){if(this.jumpers.length>0)return this.jumpers;let e=new Map;for(let o of this.solvedRoutes)for(let i of o.jumpers){let r=[i.start,i.end];for(let s of r){let a=`${s.x.toFixed(3)},${s.y.toFixed(3)}`,c=e.get(a)??[];o.rootConnectionName&&!c.includes(o.rootConnectionName)&&c.push(o.rootConnectionName),c.includes(o.connectionName)||c.push(o.connectionName),e.set(a,c)}}let t=this.hyperParameters.JUMPER_TYPE??"1206x4",n=Wk[t==="0603"?"0603":"1206x4_pair"];for(let o of this.jumperLocations){let i=o.orientation==="horizontal",r=o.padRegions.map((a)=>{let c=a.d.bounds,l=a.d.center,d=c.maxX-c.minX,u=c.maxY-c.minY,h=`${l.x.toFixed(3)},${l.y.toFixed(3)}`;return{type:"rect",center:l,width:d,height:u,layers:["top"],connectedTo:[...e.get(h)??[]]}}),s={jumper_footprint:t,center:o.center,orientation:o.orientation,width:i?n.length:n.width,height:i?n.width:n.length,pads:r};this.jumpers.push(s)}return this.jumpers=this.jumpers.filter((o)=>o.pads.some((i)=>i.connectedTo.length>0)),this.jumpers}visualize(){if(this.jumperGraphSolver&&!this.solved)return this.jumperGraphSolver.visualize();let e={lines:[],points:[],rects:[],circles:[]},t=this.nodeWithPortPoints,n={minX:t.center.x-t.width/2,maxX:t.center.x+t.width/2,minY:t.center.y-t.height/2,maxY:t.center.y+t.height/2};e.lines.push({points:[{x:n.minX,y:n.minY},{x:n.maxX,y:n.minY},{x:n.maxX,y:n.maxY},{x:n.minX,y:n.maxY},{x:n.minX,y:n.minY}],strokeColor:"rgba(255, 0, 0, 0.25)",strokeDash:"4 4",layer:"border"});for(let o of t.portPoints)e.points.push({x:o.x,y:o.y,label:o.connectionName,color:this.colorMap[o.connectionName]??"blue"});for(let o of this.solvedRoutes){let i=this.colorMap[o.connectionName]??"blue";for(let r=0;r<o.route.length-1;r++){let s=o.route[r],a=o.route[r+1];e.lines.push({points:[s,a],strokeColor:Cr(i,0.2),strokeWidth:o.traceThickness,layer:"route-layer-0"})}for(let r of o.jumpers)this._drawJumperPads(e,r,Cr(i,0.5))}return e}_drawJumperPads(e,t,n){let o=Wk[t.footprint],i=t.end.x-t.start.x,r=t.end.y-t.start.y,s=Math.abs(i)>Math.abs(r),a=s?o.padLength:o.padWidth,c=s?o.padWidth:o.padLength;e.rects.push({center:{x:t.start.x,y:t.start.y},width:a,height:c,fill:n,stroke:"rgba(0, 0, 0, 0.5)",layer:"jumper"}),e.rects.push({center:{x:t.end.x,y:t.end.y},width:a,height:c,fill:n,stroke:"rgba(0, 0, 0, 0.5)",layer:"jumper"}),e.lines.push({points:[t.start,t.end],strokeColor:"rgba(100, 100, 100, 0.8)",strokeWidth:0.3*o.padWidth,layer:"jumper-body"})}},mHo=class extends Jge{constructorParams;nodeWithPortPoints;colorMap;traceWidth;obstacleMargin;connMap;baseHyperParameters;availableJumperTypes;solvedRoutes=[];jumpers=[];constructor(e){super(),this.constructorParams=e,this.nodeWithPortPoints=e.nodeWithPortPoints,this.colorMap=e.colorMap??{},this.traceWidth=e.traceWidth??0.15,this.obstacleMargin=e.obstacleMargin??0.15,this.connMap=e.connMap,this.baseHyperParameters=e.hyperParameters??{},this.availableJumperTypes=e.availableJumperTypes??["0603"],this.MAX_ITERATIONS=1e6,this.GREEDY_MULTIPLIER=1,this.MIN_SUBSTEPS=1000}getConstructorParams(){return this.constructorParams}getHyperParameterDefs(){let e=[],t=this.nodeWithPortPoints,n=this.calculateMax0603ConfigWithTraceChannels(t.width,t.height,"vertical",1);e.push({name:"0603_max_rows_and_cols_vert_1trace_grid",possibleValues:[{JUMPER_TYPE:"0603",COLS:n.cols,ROWS:n.rows,ORIENTATION:"vertical",PATTERN:"grid",TRACE_CHANNELS_BETWEEN_JUMPERS:1}]});let o=this.calculateMax0603ConfigWithTraceChannels(t.width,t.height,"vertical",1,"staggered");e.push({name:"0603_max_rows_and_cols_vert_1trace_staggered",possibleValues:[{JUMPER_TYPE:"0603",COLS:o.cols,ROWS:o.rows,ORIENTATION:"vertical",PATTERN:"staggered",TRACE_CHANNELS_BETWEEN_JUMPERS:1}]});let i=this.calculateMax0603ConfigWithTraceChannels(t.width,t.height,"vertical",2);e.push({name:"0603_max_rows_and_cols_vert_2trace_grid",possibleValues:[{JUMPER_TYPE:"0603",COLS:i.cols,ROWS:i.rows,ORIENTATION:"vertical",PATTERN:"grid",TRACE_CHANNELS_BETWEEN_JUMPERS:2}]});let r=this.calculateMax0603ConfigWithTraceChannels(t.width,t.height,"vertical",2,"staggered");e.push({name:"0603_max_rows_and_cols_vert_2trace_staggered",possibleValues:[{JUMPER_TYPE:"0603",COLS:r.cols,ROWS:r.rows,ORIENTATION:"vertical",PATTERN:"staggered",TRACE_CHANNELS_BETWEEN_JUMPERS:2}]});let s=this.calculateMax0603ConfigWithTraceChannels(t.width,t.height,"horizontal",1);e.push({name:"0603_max_rows_and_cols_horz_1trace_grid",possibleValues:[{JUMPER_TYPE:"0603",COLS:s.cols,ROWS:s.rows,ORIENTATION:"horizontal",PATTERN:"grid",TRACE_CHANNELS_BETWEEN_JUMPERS:1}]});let a=this.calculateMax0603ConfigWithTraceChannels(t.width,t.height,"horizontal",1,"staggered");e.push({name:"0603_max_rows_and_cols_horz_1trace_staggered",possibleValues:[{JUMPER_TYPE:"0603",COLS:a.cols,ROWS:a.rows,ORIENTATION:"horizontal",PATTERN:"staggered",TRACE_CHANNELS_BETWEEN_JUMPERS:1}]});let c=this.calculateMax0603ConfigWithTraceChannels(t.width,t.height,"horizontal",2);e.push({name:"0603_max_rows_and_cols_horz_2trace_grid",possibleValues:[{JUMPER_TYPE:"0603",COLS:c.cols,ROWS:c.rows,ORIENTATION:"horizontal",PATTERN:"grid",TRACE_CHANNELS_BETWEEN_JUMPERS:2}]});let l=this.calculateMax0603ConfigWithTraceChannels(t.width,t.height,"horizontal",2,"staggered");return e.push({name:"0603_max_rows_and_cols_horz_2trace_staggered",possibleValues:[{JUMPER_TYPE:"0603",COLS:l.cols,ROWS:l.rows,ORIENTATION:"horizontal",PATTERN:"staggered",TRACE_CHANNELS_BETWEEN_JUMPERS:2}]}),e.push({name:"1206x4",possibleValues:[{JUMPER_TYPE:"1206x4"}]}),e.push({name:"1206x4_cols",possibleValues:[1,2,3,4,6,8,10].map((d)=>({COLS:d}))}),e.push({name:"1206x4_rows",possibleValues:[1,2,3,4,8].map((d)=>({ROWS:d}))}),e.push({name:"orientation",possibleValues:[{ORIENTATION:"vertical"},{ORIENTATION:"horizontal"}]}),e}isValidCombination(e){let{JUMPER_TYPE:t,COLS:n,ROWS:o}=e,i=[1,2,4,6,8],r=[1,2,3,4,6,8,10],s=[1,2,3,4,8];return t==="0603"?i.includes(n)&&i.includes(o):t==="1206x4"&&(r.includes(n)&&s.includes(o))}getCombinationDefs(){return[["0603_max_rows_and_cols_vert_1trace_grid"],["0603_max_rows_and_cols_vert_1trace_staggered"],["0603_max_rows_and_cols_horz_1trace_grid"],["0603_max_rows_and_cols_horz_1trace_staggered"],["0603_max_rows_and_cols_vert_2trace_grid"],["0603_max_rows_and_cols_vert_2trace_staggered"],["0603_max_rows_and_cols_horz_2trace_grid"],["0603_max_rows_and_cols_horz_2trace_staggered"],["1206x4","1206x4_cols","1206x4_rows","orientation"]]}calculateMax0603ConfigWithTraceChannels(e,t,n,o,i="grid"){let r=this.traceWidth*o+2*this.obstacleMargin,s=n==="horizontal"?2.15:1,a=n==="horizontal"?1:2.15,c=n==="horizontal"?"x":"y",l=i==="staggered"&&c==="x"?s/2:i==="staggered"?a/2:0,d=Math.max(0,e-1),u=Math.max(0,t-1),h=Math.max(0,d-(i==="staggered"&&c==="x"?l:0)),A=Math.max(0,u-(i==="staggered"&&c==="y"?l:0)),m=s+r,p=a+r,g=Math.max(1,Math.floor(1+(h-s)/m)),_=Math.max(1,Math.floor(1+(A-a)/p));return n==="vertical"?{cols:g,rows:_}:{cols:_,rows:g}}initializeSolvers(){let e=this.getHyperParameterDefs(),t=this.getCombinationDefs();this.supervisedSolvers=[];for(let n of t){let o=n.some((s)=>s.startsWith("0603_max_rows_and_cols_")),i=n.includes("1206x4");if(o&&!this.availableJumperTypes.includes("0603"))continue;if(i&&!this.availableJumperTypes.includes("1206x4"))continue;let r=this.getHyperParameterCombinations(e.filter((s)=>n.includes(s.name)));for(let s of r){let a=this.generateSolver(s),c=this.computeG(a);this.supervisedSolvers.push({hyperParameters:s,solver:a,h:0,g:c,f:c})}}}generateSolver(e){return new hHo({nodeWithPortPoints:this.nodeWithPortPoints,colorMap:this.colorMap,traceWidth:this.traceWidth,hyperParameters:{COLS:e.COLS,ROWS:e.ROWS,ORIENTATION:e.ORIENTATION,JUMPER_TYPE:e.JUMPER_TYPE,PATTERN:e.PATTERN,TRACE_CHANNELS_BETWEEN_JUMPERS:e.TRACE_CHANNELS_BETWEEN_JUMPERS},obstacleMargin:this.obstacleMargin})}computeG(e){let t=e.hyperParameters.COLS*e.hyperParameters.ROWS;return e.iterations/1e4+0.25*t}computeH(e){return 1-(e.progress||0)}onSolve(e){this.solvedRoutes=e.solver.solvedRoutes,this.jumpers=e.solver.getOutputJumpers()}getOutput(){return this.solvedRoutes}getOutputJumpers(){return this.jumpers}visualize(){return this.winningSolver?this.winningSolver.visualize():super.visualize()}};function pHo(e){return{connectionName:e.connectionName,rootConnectionName:e.rootConnectionName,regionId:e.regionId,traceThickness:e.traceThickness,viaDiameter:0,route:e.route,vias:[],jumpers:e.jumpers}}var AHo=class extends Oi{getSolverName(){return"JumperHighDensitySolver"}allNodes;nodeAnalyses;routes;colorMap;traceWidth;obstacleMargin;viaDiameter;connMap;hyperParameters;availableJumperTypes;capacityMeshNodes;capacityMeshEdges;capacityMeshNodeMap;nodeAdjacencyMap;nodesWithoutCrossings;nodesWithCrossings;curvyIntraNodeSolvers;currentCurvySolverIndex;jumperSolvers;currentJumperSolverIndex;phase;jumpers=[];constructor({nodePortPoints:e,colorMap:t,traceWidth:n=0.15,obstacleMargin:o=0.15,viaDiameter:i=0.3,connMap:r,hyperParameters:s,capacityMeshNodes:a=[],capacityMeshEdges:c=[],availableJumperTypes:l}){super(),this.allNodes=[...e],this.colorMap=t??{},this.routes=[],this.traceWidth=n,this.obstacleMargin=o,this.viaDiameter=i,this.connMap=r,this.hyperParameters=s,this.capacityMeshNodes=a,this.capacityMeshEdges=c,this.availableJumperTypes=l??["0603"],this.capacityMeshNodeMap=new Map(a.map((h)=>[h.capacityMeshNodeId,h])),this.nodeAdjacencyMap=this._buildNodeAdjacencyMap(),this.nodesWithoutCrossings=[],this.nodesWithCrossings=[],this.nodeAnalyses=[],this.curvyIntraNodeSolvers=[],this.currentCurvySolverIndex=0,this.jumperSolvers=[],this.currentJumperSolverIndex=0,this.phase="analyzing",this._analyzeNodes();let d=1000*this.nodesWithoutCrossings.length,u=1e5*this.nodesWithCrossings.length;this.MAX_ITERATIONS=d+u+100}_buildNodeAdjacencyMap(){let e=new Map;for(let t of this.capacityMeshEdges){let[n,o]=t.nodeIds;e.has(n)||e.set(n,new Set),e.has(o)||e.set(o,new Set),e.get(n).add(o),e.get(o).add(n)}return e}_analyzeNodes(){for(let e of this.allNodes){let t=Gm(e),n={node:e,hasCrossings:t.numSameLayerCrossings>0,numSameLayerCrossings:t.numSameLayerCrossings};this.nodeAnalyses.push(n),t.numSameLayerCrossings>0?this.nodesWithCrossings.push(e):this.nodesWithoutCrossings.push(e)}this.nodesWithoutCrossings.length>0?(this.phase="curvy",this._initializeCurvySolvers()):this.nodesWithCrossings.length>0?(this.phase="jumpers",this._initializeJumperSolvers()):this.phase="done"}_step(){switch(this.phase){case"analyzing":this.nodesWithoutCrossings.length>0?(this.phase="curvy",this._initializeCurvySolvers()):this.nodesWithCrossings.length>0?(this.phase="jumpers",this._initializeJumperSolvers()):this.phase="done";break;case"curvy":this._stepCurvySolvers();break;case"jumpers":this._stepJumperSolvers();break;case"done":this.solved=!0}}_getAdjacentObstacles(e){let t=[],n=this.nodeAdjacencyMap.get(e.capacityMeshNodeId);if(!n||n.size===0)return t;let o=new Map(this.allNodes.map((i)=>[i.capacityMeshNodeId,i]));for(let i of n){let r=this.capacityMeshNodeMap.get(i);if(!r)continue;if(!r._containsObstacle&&!r._containsTarget)continue;let s=r.center.x-r.width/2,a=r.center.y-r.height/2,c=r.center.x+r.width/2,l=r.center.y+r.height/2,d;if(r._containsTarget)if(r._targetConnectionName)d=r._targetConnectionName;else{let u=o.get(i);u&&u.portPoints.length>0&&(d=u.portPoints[0].rootConnectionName??u.portPoints[0].connectionName)}t.push({minX:s,minY:a,maxX:c,maxY:l,networkId:d})}return t}_initializeCurvySolvers(){for(let e of this.nodesWithoutCrossings){let t=this._getAdjacentObstacles(e),n=new I3t({nodeWithPortPoints:e,colorMap:this.colorMap,traceWidth:this.traceWidth,viaDiameter:this.viaDiameter,adjacentObstacles:t});this.curvyIntraNodeSolvers.push(n)}}_stepCurvySolvers(){if(this.curvyIntraNodeSolvers.length===0)return this.phase=this.nodesWithCrossings.length>0?"jumpers":"done",void(this.phase==="jumpers"&&this._initializeJumperSolvers());let e=this.curvyIntraNodeSolvers[this.currentCurvySolverIndex];if(this.activeSubSolver=e,!e)return this.phase=this.nodesWithCrossings.length>0?"jumpers":"done",void(this.phase==="jumpers"&&this._initializeJumperSolvers());if(e.step(),e.solved){this.routes.push(...e.routes),this.currentCurvySolverIndex++;for(let t=this.currentCurvySolverIndex;t<this.curvyIntraNodeSolvers.length;t++){this.curvyIntraNodeSolvers[t];let n=this.nodesWithoutCrossings[t],o=this._getAdjacentObstacles(n),i=new I3t({nodeWithPortPoints:n,colorMap:this.colorMap,traceWidth:this.traceWidth,viaDiameter:this.viaDiameter,adjacentObstacles:o});this.curvyIntraNodeSolvers[t]=i}this.currentCurvySolverIndex>=this.curvyIntraNodeSolvers.length&&(this.phase=this.nodesWithCrossings.length>0?"jumpers":"done",this.phase==="jumpers"&&this._initializeJumperSolvers())}else e.failed&&(this.error=`CurvyIntraNodeSolver failed for node: ${e.nodeWithPortPoints.capacityMeshNodeId}: ${e.error}`,this.failed=!0)}_initializeJumperSolvers(){for(let e of this.nodesWithCrossings){let t=new mHo({nodeWithPortPoints:e,colorMap:this.colorMap,traceWidth:this.traceWidth,obstacleMargin:this.obstacleMargin,connMap:this.connMap,availableJumperTypes:this.availableJumperTypes});this.jumperSolvers.push(t)}}_stepJumperSolvers(){if(this.jumperSolvers.length===0)return this.phase="done",void(this.solved=!0);let e=this.jumperSolvers[this.currentJumperSolverIndex];if(this.activeSubSolver=e,!e)return this.phase="done",void(this.solved=!0);if(e.step(),e.solved){for(let t of e.solvedRoutes)this.routes.push(pHo(t));this.jumpers.push(...e.getOutputJumpers()),this.currentJumperSolverIndex++,this.currentJumperSolverIndex>=this.jumperSolvers.length&&(this.phase="done",this.solved=!0)}else e.failed&&(this.error=`HyperJumperPrepatternSolver2 failed for node: ${e.nodeWithPortPoints.capacityMeshNodeId}: ${e.error}`,this.failed=!0)}computeProgress(){let e=this.allNodes.length;if(e===0)return 1;let t=0;t+=this.currentCurvySolverIndex;let n=this.curvyIntraNodeSolvers[this.currentCurvySolverIndex];n&&(t+=n.progress),t+=this.currentJumperSolverIndex;let o=this.jumperSolvers[this.currentJumperSolverIndex];return o&&(t+=o.progress),t/e}getConstructorParams(){return{nodePortPoints:this.allNodes,colorMap:this.colorMap,traceWidth:this.traceWidth,obstacleMargin:this.obstacleMargin,viaDiameter:this.viaDiameter,connMap:this.connMap,hyperParameters:this.hyperParameters,capacityMeshNodes:this.capacityMeshNodes,capacityMeshEdges:this.capacityMeshEdges,availableJumperTypes:this.availableJumperTypes}}getOutputJumpers(){return this.jumpers}visualize(){let e={lines:[],points:[],rects:[],circles:[]};if(this.failed&&this.activeSubSolver)return this.activeSubSolver.visualize();if(this.phase==="curvy"&&this.curvyIntraNodeSolvers[this.currentCurvySolverIndex])return this.curvyIntraNodeSolvers[this.currentCurvySolverIndex].visualize();if(this.phase==="jumpers"&&this.jumperSolvers[this.currentJumperSolverIndex])return this.jumperSolvers[this.currentJumperSolverIndex].visualize();for(let t of this.routes){let n=t.rootConnectionName??t.connectionName,o=jge(t.route,t.connectionName,this.colorMap[n]);for(let i of o)e.lines.push({points:i.points,label:i.connectionName,strokeColor:i.z===0?i.color:Cr(i.color??"gray",0.75),layer:`z${i.z}`,strokeWidth:t.traceThickness,strokeDash:i.z!==0?"10, 5":void 0});for(let i of t.vias)e.circles.push({center:i,radius:t.viaDiameter/2,fill:Cr(this.colorMap[n]??"gray",0.5),layer:"via"});if("jumpers"in t&&t.jumpers)for(let i of t.jumpers){let r=this.colorMap[n]??"gray",s=i.footprint??"1206",a=Wk[s],c=i.end.x-i.start.x,l=i.end.y-i.start.y,d=Math.abs(c)>Math.abs(l),u=d?a.padLength:a.padWidth,h=d?a.padWidth:a.padLength;e.rects.push({center:i.start,width:u,height:h,fill:Cr(r,0.5),stroke:"rgba(0, 0, 0, 0.5)",layer:"jumper"}),e.rects.push({center:i.end,width:u,height:h,fill:Cr(r,0.5),stroke:"rgba(0, 0, 0, 0.5)",layer:"jumper"}),e.lines.push({points:[i.start,i.end],strokeColor:"rgba(100, 100, 100, 0.8)",strokeWidth:0.3*a.padWidth,layer:"jumper-body"})}}for(let t of this.nodeAnalyses){let n=t.node;n.center.x,n.width,n.center.x,n.width,n.center.y,n.height,n.center.y,n.height,e.rects.push({center:n.center,width:n.width,height:n.height,fill:t.hasCrossings?"rgba(255, 200, 0, 0.1)":"rgba(0, 200, 0, 0.1)",stroke:t.hasCrossings?"rgba(255, 150, 0, 0.5)":"rgba(0, 150, 0, 0.5)",label:[n.capacityMeshNodeId,t.hasCrossings?`crossings: ${t.numSameLayerCrossings}`:"no crossings"].join(`
`)})}return e}};function p6(e,t,n,o={}){return{solverName:e,solverClass:t,getConstructorParams:n,onSolved:o.onSolved}}var Bzt=class extends Oi{constructor(e,t={}){super(),this.srj=e,this.opts=t,this.srj=e,this.opts={...t},this.viaDiameter=y0(e).padDiameter,this.minTraceWidth=e.minTraceWidth;let n=this.opts;if(this.effort=n.effort??1,this.MAX_ITERATIONS=1e8*this.effort,n.capacityDepth===void 0){let o=e.bounds.maxX-e.bounds.minX,i=e.bounds.maxY-e.bounds.minY,r=Math.max(o,i),s=n.targetMinCapacity??0.5;n.capacityDepth=cT(r,s)}this.connMap=x0(e),this.colorMap=HA(e,this.connMap),this.cacheProvider=n.cacheProvider===void 0?CS():n.cacheProvider===null?null:n.cacheProvider,this.startTimeOfPhase={},this.endTimeOfPhase={},this.timeSpentOnPhase={}}srj;opts;getSolverName(){return"AssignableAutoroutingPipeline3"}netToPointPairsSolver;traceKeepoutSolver;nodeSolver;nodeTargetMerger;edgeSolver;relateNodesToOffBoardConnections;colorMap;highDensityRouteSolver;simpleHighDensityRouteSolver;highDensitySolver;highDensityStitchSolver;singleLayerNodeMerger;offboardPathFragmentSolver;strawSolver;deadEndSolver;traceSimplificationSolver;traceWidthSolver;availableSegmentPointSolver;portPointPathingSolver;multiSectionPortPointOptimizer;viaDiameter;minTraceWidth;effort;startTimeOfPhase;endTimeOfPhase;timeSpentOnPhase;activeSubSolver=null;connMap;srjWithPointPairs;capacityNodes=null;capacityEdges=null;cacheProvider=null;pipelineDef=[p6("netToPointPairsSolver",mHe,(e)=>[e.srj,e.colorMap,rT(e.srj)],{onSolved:(e)=>{e.srjWithPointPairs=e.netToPointPairsSolver?.getNewSimpleRouteJson(),e.colorMap=HA(e.srjWithPointPairs,this.connMap),e.connMap=x0(e.srjWithPointPairs)}}),p6("nodeSolver",bU,(e)=>[{simpleRouteJson:e.srjWithPointPairs,maxGapFillPasses:4}],{onSolved:(e)=>{e.capacityNodes=e.nodeSolver?.getOutput().meshNodes??[]}}),p6("relateNodesToOffBoardConnections",TOt,(e)=>[{capacityMeshNodes:e.capacityNodes,srj:e.srj}],{onSolved:(e)=>{e.capacityNodes=e.relateNodesToOffBoardConnections?.getOutput().capacityNodes}}),p6("edgeSolver",sT,(e)=>[e.capacityNodes],{onSolved:(e)=>{e.capacityEdges=e.edgeSolver?.edges}}),p6("availableSegmentPointSolver",hL,(e)=>[{nodes:e.capacityNodes,edges:e.capacityEdges||[],traceWidth:e.minTraceWidth,colorMap:e.colorMap,shouldReturnCrampedPortPoints:!1}]),p6("portPointPathingSolver",hHe,(e)=>{let t=e.capacityNodes.map((i)=>({capacityMeshNodeId:i.capacityMeshNodeId,center:i.center,width:i.width,height:i.height,portPoints:[],availableZ:i.availableZ,_containsTarget:i._containsTarget,_containsObstacle:i._containsObstacle,_offBoardConnectionId:i._offBoardConnectionId,_offBoardConnectedCapacityMeshNodeIds:i._offBoardConnectedCapacityMeshNodeIds})),n=new Map(t.map((i)=>[i.capacityMeshNodeId,i])),o=e.availableSegmentPointSolver;for(let i of o.sharedEdgeSegments)for(let r of i.portPoints){let[s,a]=r.nodeIds,c={portPointId:r.segmentPortPointId,x:r.x,y:r.y,z:r.availableZ[0]??0,connectionNodeIds:[s,a],distToCentermostPortOnZ:r.distToCentermostPortOnZ,connectsToOffBoardNode:i.nodeIds.some((d)=>n.get(d)?._offBoardConnectionId)},l=n.get(s);l&&l.portPoints.push(c)}return[{simpleRouteJson:e.srjWithPointPairs,inputNodes:t,capacityMeshNodes:e.capacityNodes,colorMap:e.colorMap,numShuffleSeeds:10*Math.min(1,e.effort),hyperParameters:{JUMPER_PF_FN_ENABLED:!0,NODE_PF_FACTOR:100,MAX_RIPS:100*Math.min(1,e.effort),RIPPING_ENABLED:!0,MAX_RIPPING_PF_THRESHOLD:0.9,MIN_RIPPING_PF_THRESHOLD:0.1,RANDOM_RIP_FRACTION:0.05,NODE_PF_MAX_PENALTY:1000,STRAIGHT_LINE_DEVIATION_PENALTY_FACTOR:0,CENTER_OFFSET_DIST_PENALTY_FACTOR:0,FORCE_CENTER_FIRST:!0}}]},{onSolved:(e)=>{let t=e.portPointPathingSolver;t&&DOt({connMap:e.connMap,connectionsWithResults:t.connectionsWithResults,inputNodes:t.inputNodes,obstacles:e.srj.obstacles})}}),p6("highDensitySolver",AHo,(e)=>[{nodePortPoints:e.multiSectionPortPointOptimizer?.getNodesWithPortPoints()??e.portPointPathingSolver?.getNodesWithPortPoints()??[],colorMap:e.colorMap,viaDiameter:e.viaDiameter,traceWidth:e.minTraceWidth,obstacleMargin:e.srj.defaultObstacleMargin??0.15,connMap:e.connMap,capacityMeshNodes:e.capacityNodes??[],capacityMeshEdges:e.capacityEdges??[],availableJumperTypes:e.srj.availableJumperTypes}]),p6("highDensityStitchSolver",Jko,(e)=>[{connections:e.srjWithPointPairs.connections,hdRoutes:e.highDensitySolver.routes,connectionPathResults:e.multiSectionPortPointOptimizer?.connectionResults??e.portPointPathingSolver?.connectionsWithResults??[],colorMap:e.colorMap,layerCount:e.srj.layerCount,defaultViaDiameter:e.viaDiameter}]),p6("traceKeepoutSolver",wOt,(e)=>[{hdRoutes:e.traceSimplificationSolver?.simplifiedHdRoutes??e.highDensityStitchSolver?.mergedHdRoutes??[],obstacles:e.srj.obstacles,jumpers:e.highDensitySolver?.getOutputJumpers()??[],connMap:e.connMap,colorMap:e.colorMap,srj:e.srj}])];getConstructorParams(){return[this.srj,this.opts]}currentPipelineStepIndex=0;_step(){let e=this.pipelineDef[this.currentPipelineStepIndex];if(!e)return void(this.solved=!0);if(this.activeSubSolver)return this.activeSubSolver.step(),void(this.activeSubSolver.solved?(this.endTimeOfPhase[e.solverName]=performance.now(),this.timeSpentOnPhase[e.solverName]=this.endTimeOfPhase[e.solverName]-this.startTimeOfPhase[e.solverName],e.onSolved?.(this),this.activeSubSolver=null,this.currentPipelineStepIndex++):this.activeSubSolver.failed&&(this.error=this.activeSubSolver?.error,this.failed=!0,this.activeSubSolver=null));let t=e.getConstructorParams(this);this.activeSubSolver=new e.solverClass(...t),this[e.solverName]=this.activeSubSolver,this.timeSpentOnPhase[e.solverName]=0,this.startTimeOfPhase[e.solverName]=performance.now()}solveUntilPhase(e){for(;this.getCurrentPhase()!==e;)this.step()}getCurrentPhase(){return this.pipelineDef[this.currentPipelineStepIndex]?.solverName??"none"}visualize(){if(!this.solved&&this.activeSubSolver)return this.activeSubSolver.visualize();let e=this.netToPointPairsSolver?.visualize(),t=this.nodeSolver?.visualize(),n=this.nodeTargetMerger?.visualize(),o=this.singleLayerNodeMerger?.visualize(),i=this.strawSolver?.visualize(),r=this.edgeSolver?.visualize(),s=this.traceKeepoutSolver?.visualize(),a=this.deadEndSolver?.visualize(),c=this.availableSegmentPointSolver?.visualize(),l=this.offboardPathFragmentSolver?.visualize(),d=this.portPointPathingSolver?.visualize(),u=this.multiSectionPortPointOptimizer?.visualize(),h=this.highDensityRouteSolver?.visualize(),A=this.highDensitySolver?.visualize(),m=this.simpleHighDensityRouteSolver?.visualize(),p=this.highDensityStitchSolver?.visualize(),g=this.traceSimplificationSolver?.visualize(),_=this.traceWidthSolver?.visualize(),f=this.srj.outline,y=[];if(y.push({points:[{x:this.srj.bounds?.minX??-50,y:this.srj.bounds?.minY??-50},{x:this.srj.bounds?.maxX??50,y:this.srj.bounds?.minY??-50},{x:this.srj.bounds?.maxX??50,y:this.srj.bounds?.maxY??50},{x:this.srj.bounds?.minX??-50,y:this.srj.bounds?.maxY??50},{x:this.srj.bounds?.minX??-50,y:this.srj.bounds?.minY??-50}],strokeColor:"rgba(255,0,0,0.25)"}),f&&f.length>=2){let b=f.map((P)=>({x:P.x,y:P.y}));b.push({...b[0]}),y.push({points:b,strokeColor:"rgba(0, 136, 255, 0.95)"})}let x=O6(this.srj),C={points:[...this.srj.connections.flatMap((b)=>b.pointsToConnect.map((P)=>({...P,layer:z6(P,this.srj.layerCount),label:`${b.name} ${P.pcb_port_id??""}`})))],rects:[...(this.srj.obstacles??[]).filter((b)=>!b.isCopperPour).map((b)=>({...b,fill:b.layers?.includes("top")?"rgba(255,0,0,0.25)":b.layers?.includes("bottom")?"rgba(0,0,255,0.25)":"rgba(255,0,0,0.25)",layer:OE(b,this.srj.layerCount),label:x(b)}))],lines:y},I=[C,e,t,n,o,i,r,a,c,l,d,u,h?Lc(C,h):null,A?Lc(C,A):null,m?Lc(C,m):null,p,g,s,_,this.solved?Lc({lines:y},p1(this.getOutputSimpleRouteJson())):null].filter(Boolean);return Lc(...I)}preview(){let e=this.highDensitySolver?.routes??this.simpleHighDensityRouteSolver?.routes??this.highDensityRouteSolver?.routes;if(e){let t=[];for(let n=e.length-1;n>=0;n--){let o=e[n];if(t.push({points:o.route.map((i)=>({x:i.x,y:i.y})),strokeColor:this.colorMap[o.connectionName]}),t.length>200)break}return{lines:t}}if(this.portPointPathingSolver){let t=[];for(let n of this.portPointPathingSolver.connectionsWithResults)n.path&&t.push({points:n.path.map((o)=>({x:o.point.x,y:o.point.y})),strokeColor:this.colorMap[n.connection.name]});return{lines:t}}return this.netToPointPairsSolver?this.netToPointPairsSolver?.visualize():{}}_getOutputHdRoutes(){return this.traceWidthSolver?.hdRoutesWithWidths??this.traceKeepoutSolver?.redrawnHdRoutes??this.traceSimplificationSolver?.simplifiedHdRoutes??this.highDensityStitchSolver?.mergedHdRoutes??this.highDensitySolver?.routes??this.simpleHighDensityRouteSolver?.routes??this.highDensityRouteSolver?.routes}getConnectedOffboardObstacles(){let e={},t=new Set(this.srj.connections.flatMap((n)=>n.__rootConnectionNames??[n.name]));for(let[n,o]of this.srj.obstacles.entries()){if(!o.offBoardConnectsTo?.length)continue;let i=o.obstacleId??`__obs${n}`;o.obstacleId=i;let r=this.connMap.getNetConnectedToId(i);if(!r)continue;let s=this.connMap.getIdsConnectedToNet(r).find((a)=>t.has(a));s&&(e[i]=s)}return e}getOutputSimplifiedPcbTraces(){if(!this.solved||!this.highDensityRouteSolver&&!this.simpleHighDensityRouteSolver&&!this.highDensitySolver)throw Error("Cannot get output before solving is complete");let e=[],t=this._getOutputHdRoutes();for(let n of this.netToPointPairsSolver?.newConnections??[]){let o=n.__netConnectionName??this.srj.connections.find((r)=>r.name===n.name)?.__netConnectionName,i=t.filter((r)=>r.connectionName===n.name);for(let r=0;r<i.length;r++){let s=i[r],a={type:"pcb_trace",pcb_trace_id:`${n.name}_${r}`,connection_name:o??n.__rootConnectionNames?.[0]??n.name,route:Ex(s,this.srj.layerCount)};e.push(a)}}return e}getOutputJumpers(){return this.highDensitySolver?this.highDensitySolver.getOutputJumpers():[]}getOutputSimpleRouteJson(){let e=this.getOutputJumpers();return{...this.srj,traces:this.getOutputSimplifiedPcbTraces(),jumpers:e.length>0?e:void 0}}},s4t=(e)=>{let{candidates:t,mapOfCapacityMeshNodeIdToRef:n}=e,o=!0;for(let i of t){let r=!1;i.port.nodeIds.forEach((s)=>{let a=n.get(s);if(!a)throw Error(`Could not find capacity mesh node for id ${s}`);a._containsObstacle&&(r=!0)}),r||(o=!1)}return o},a4t=(e)=>e.depth+1000*e.countOfCrampedPortPointsInPath,c4t=class extends Js{constructor(e){if(super(),this.input=e,this.input.depthLimit<1)throw Error("Depth limit must be at least 1");this._setup()}input;queue=[];resultExploredPortPoints=[];currentExploredPortPoints=null;visitedExploredPortPoints=new Map;getSolverName(){return"singleTargetNecessaryCrampedPortPointSolver"}_setup(){let e=this.input.mapOfCapacityMeshNodeIdToSegmentPortPoints.get(this.input.target.capacityMeshNodeId)??[];for(let t of e){if(this.input.shouldIgnoreCrampedPortPoints&&t.cramped)continue;let n={port:t,depth:1,parent:null,countOfCrampedPortPointsInPath:t.cramped?1:0},o=this.visitedExploredPortPoints.get(t);(!o||this.getCandidateCost(n)<this.getCandidateCost(o))&&(this.visitedExploredPortPoints.set(t,n),this.queue.push(n))}}_step(){if(this.queue.length===0)return this.currentExploredPortPoints=null,void(this.solved=!0);for(;this.queue.length>0;){if(this.currentExploredPortPoints=this.queue.shift(),this.visitedExploredPortPoints.get(this.currentExploredPortPoints.port)!==this.currentExploredPortPoints)continue;if(this.currentExploredPortPoints.depth===this.input.depthLimit){this.resultExploredPortPoints.push(this.currentExploredPortPoints);continue}let e=this.currentExploredPortPoints.port.nodeIds.map((t)=>{let n=this.input.mapOfCapacityMeshNodeIdToRef.get(t);if(!n)throw Error(`Could not find capacity mesh node for id ${t}`);return n}).flatMap((t)=>this.input.mapOfCapacityMeshNodeIdToSegmentPortPoints.get(t.capacityMeshNodeId)??[]);for(let t of e){if(this.input.shouldIgnoreCrampedPortPoints&&t.cramped)continue;let n={port:t,depth:this.currentExploredPortPoints.depth+1,parent:this.currentExploredPortPoints,countOfCrampedPortPointsInPath:this.currentExploredPortPoints.countOfCrampedPortPointsInPath+(t.cramped?1:0)},o=this.visitedExploredPortPoints.get(t);o&&this.getCandidateCost(o)<=this.getCandidateCost(n)||(this.visitedExploredPortPoints.set(t,n),this.queue.push(n))}}this.solved=!0}getCandidateCost(e){return e.depth+1000*e.countOfCrampedPortPointsInPath}getOutput(){return this.resultExploredPortPoints}visualize(){let e={points:[],rects:[]};for(let t of this.visitedExploredPortPoints.keys())e.points.push({...t,color:t.cramped?"blue":"green"});return e}},nne=class extends Js{constructor(e){super(),this.input=e,this._setup()}input;unprocessedTargets=[];targetNode=[];currentTarget;crampedPortPointsToKeep=new Set;candidatesAtDepth=[];isRunningCrampedPass=!1;filteredOutput;activeSubSolver=null;nodeMap=new Map;mapOfCapacityMeshNodeIdToSegmentPortPoints=new Map;getSolverName(){return"multiTargetNecessaryCrampedPortPointSolver"}_setup(){this.targetNode=this.input.capacityMeshNodes.filter((e)=>e._containsObstacle),this.targetNode=this.targetNode.filter((e)=>{for(let t of this.input.simpleRouteJson.connections)for(let n of t.pointsToConnect)if(jE(n,e)<=0)return!0;return!1}),this.unprocessedTargets=[...this.targetNode],this.unprocessedTargets.sort((e,t)=>e.center.x-t.center.x);for(let e of this.input.capacityMeshNodes)this.nodeMap.set(e.capacityMeshNodeId,e);for(let e of this.input.sharedEdgeSegments)for(let t of e.portPoints){let n=t.nodeIds;for(let o of n){if(!this.nodeMap.get(o))throw Error(`Could not find capacity mesh node for id ${o}`);let i=this.mapOfCapacityMeshNodeIdToSegmentPortPoints.get(o)||[];this.mapOfCapacityMeshNodeIdToSegmentPortPoints.set(o,[...i,t])}}}_step(){if(this.activeSubSolver){if(this.activeSubSolver._step(),!this.activeSubSolver.solved)return;if(this.activeSubSolver.failed)return this.failed=!0,void(this.error=this.activeSubSolver.error);if(this.candidatesAtDepth=this.activeSubSolver.getOutput(),this.activeSubSolver=null,!this.currentTarget)return this.failed=!0,void(this.error="Missing current capacity mesh node while finishing BFS");if(!this.isRunningCrampedPass)return s4t({candidates:this.candidatesAtDepth,mapOfCapacityMeshNodeIdToRef:this.nodeMap})||this.candidatesAtDepth.length===0?(this.isRunningCrampedPass=!0,void(this.activeSubSolver=new c4t({target:this.currentTarget,depthLimit:3,shouldIgnoreCrampedPortPoints:!1,mapOfCapacityMeshNodeIdToSegmentPortPoints:this.mapOfCapacityMeshNodeIdToSegmentPortPoints,mapOfCapacityMeshNodeIdToRef:this.nodeMap}))):void(this.currentTarget=void 0);let e=this.candidatesAtDepth.filter((t)=>{let n=t.port;return n.nodeIds.map((o)=>{let i=this.nodeMap.get(o);if(!i)throw this.failed=!0,this.error=`Could not find capacity mesh node for id ${o}`,Error(`Could not find capacity mesh node for id ${o}`);return i}).every((o)=>!o._containsObstacle)&&n.cramped});if(s4t({candidates:e,mapOfCapacityMeshNodeIdToRef:this.nodeMap})&&(this.error=`All candidates are blocked by obstacles even after including cramped port points for capacity mesh node ${this.currentTarget.capacityMeshNodeId}`),this.candidatesAtDepth=[...e].sort((t,n)=>{let o=a4t(t)-a4t(n);return o!==0?o:this.getCandidateExitCapacity(n)-this.getCandidateExitCapacity(t)}),this.candidatesAtDepth.length===0)this.error=`No candidates found for capacity mesh node ${this.currentTarget.capacityMeshNodeId} even after including cramped port points`;else{let t=new Map;for(let o of this.candidatesAtDepth){if(!o.parent)throw Error(`Missing parent for cramped escape candidate ${o.port.segmentPortPointId}`);let i=`${o.parent.port.segmentPortPointId}->${o.port.segmentPortPointId}`;if(!t.has(i)&&(t.set(i,o),t.size===5))break}let n=[...t.values()];for(let o of n)this.keepCandidatePath(o)}return this.isRunningCrampedPass=!1,void(this.currentTarget=void 0)}if(!this.currentTarget)return this.currentTarget=this.unprocessedTargets.shift(),this.currentTarget?(this.isRunningCrampedPass=!1,this.candidatesAtDepth=[],void(this.activeSubSolver=new c4t({target:this.currentTarget,depthLimit:2,shouldIgnoreCrampedPortPoints:!0,mapOfCapacityMeshNodeIdToSegmentPortPoints:this.mapOfCapacityMeshNodeIdToSegmentPortPoints,mapOfCapacityMeshNodeIdToRef:this.nodeMap}))):void(this.solved=!0)}getOutput(){return this.filteredOutput||(this.filteredOutput=this.input.sharedEdgeSegments.map((e)=>({...e,portPoints:e.portPoints.flatMap((t)=>!t.cramped||this.crampedPortPointsToKeep.has(t)?[t]:this.isMultilayerEscapePort(t)?[{...t,tinyHypergraphPortPenalty:1000}]:[])}))),this.filteredOutput}getCandidateExitCapacity(e){if(!e.parent)throw Error(`Missing parent for cramped escape candidate ${e.port.segmentPortPointId}`);let t=new Set(e.parent.port.nodeIds),n=e.port.nodeIds.filter((o)=>!t.has(o)).map((o)=>{let i=this.nodeMap.get(o);if(!i)throw Error(`Could not find capacity mesh node for id ${o}`);return i});if(n.length===0)throw Error(`Could not find exit node for cramped escape candidate ${e.port.segmentPortPointId}`);return Math.max(0,...n.map((o)=>o.width*o.height*o.availableZ.length))}keepCandidatePath(e){this.crampedPortPointsToKeep.add(e.port);let t=e.parent;for(;t;)this.crampedPortPointsToKeep.add(t.port),t=t.parent}isMultilayerEscapePort(e){return e.nodeIds.some((t)=>(this.nodeMap.get(t)?.availableZ.length??0)>1)}visualize(){let e={rects:[],points:[]};for(let t of this.targetNode)e.rects.push({...t,fill:this.currentTarget?.capacityMeshNodeId===t.capacityMeshNodeId?"rgba(255, 0, 0, 0.5)":"rgba(255, 0, 0, 0.2)"});for(let t of this.candidatesAtDepth)e.points.push({...t.port,color:t.port.cramped?"blue":"green"});for(let t of this.crampedPortPointsToKeep)e.points.push({...t,color:"blue"});return this.activeSubSolver?Sk(e,this.activeSubSolver.visualize()):e}},AV=(e)=>`${e.x.toFixed(4)},${e.y.toFixed(4)}`,wzt=(e)=>e.netIsAssignable===!0&&(e.layers?.length??0)>1,_Ho=(e,t)=>e.connectedTo?.find((n)=>n.startsWith("pcb_via"))??e.obstacleId??`assignable_via_${t}`,gHo=(e)=>[...new Set(e.obstacle.layers.map((t)=>Wi(t,e.layerCount)))].sort((t,n)=>t-n),fHo=(e)=>AV(e.center),l4t=(e)=>new Set(e.filter(wzt).map(fHo));function BI(e,t){if(e==null)throw Error(t)}function MHe({point:e,layerCount:t}){let n=Dy(e).map((o)=>Wi(o,t));return[...new Set(n)]}function Tzt(e){if(jE(e.point,e.region.d)<=0.001)return(e.pointZLayers??MHe(e)).some((t)=>e.region.d.availableZ.includes(t));return!1}function yHo({region:e,pointZLayers:t}){return e.ports.some((n)=>t.includes(n.d.z)&&t.some((o)=>n.region1.d.availableZ.includes(o))&&t.some((o)=>n.region2.d.availableZ.includes(o)))}function d4t({graph:e,point:t,layerCount:n}){let o=MHe({point:t,layerCount:n}),i;for(let r of e.regions)if(Tzt({point:t,region:r,layerCount:n,pointZLayers:o})&&(i??=r,yHo({region:r,pointZLayers:o})))return r;return i}var u4t=(e,t)=>{let n=e.getNetConnectedToId(t);if(!n)throw Error(`Could not resolve net ID for connection "${t}"`);return n},xHo=(e)=>{let t=e.graph.regions.filter((i)=>i.d.availableZ.includes(e.z)&&!i.d._assignableVia).map((i)=>({region:i,distance:jE(e.point,i.d)})).sort((i,r)=>i.distance-r.distance||i.region.d.width*i.region.d.height-r.region.d.width*r.region.d.height),n=t[0]?.distance;if(n===void 0)return[];let o=Math.max(n+0.000001,e.viaRadius+0.15);return t.filter((i)=>i.distance<=o).slice(0,4).map((i)=>i.region)};function one(e){let t={ports:[],regions:[]},n=[],o=new Map;for(let i of e.capacityMeshNodes){let r=i._connectedTo?.map((a)=>u4t(e.connectivityMap,a)),s={regionId:i.capacityMeshNodeId,d:r?{...i,_connectedTo:[...new Set(r)]}:i,ports:[]};t.regions.push(s),o.has(s.regionId)||o.set(s.regionId,s)}for(let i of e.segmentPortPoints){let[r,s]=i.nodeIds,a=o.get(r),c=o.get(s);BI(a,`Could not find region with id ${r} for segment port point ${i.segmentPortPointId}`),BI(c,`Could not find region with id ${s} for segment port point ${i.segmentPortPointId}`);for(let l of i.availableZ){let d=i._preloadedTracePortAssignments?.filter((A)=>A.z===l),u={portId:`${i.segmentPortPointId}::${l}`,x:i.x,y:i.y,z:l,distToCentermostPortOnZ:i.distToCentermostPortOnZ,cramped:i.cramped,regions:[a,c],tinyHypergraphPortPenalty:i.tinyHypergraphPortPenalty,_preloadedFixedNetIds:d&&d.length>0?[...new Set(d.map((A)=>A.fixedNetId))].sort():void 0,_preloadedTracePortAssignments:d},h={portId:i.segmentPortPointId,d:u,region1:a,region2:c};t.ports.push(h),a.ports.push(h),c.ports.push(h)}}((i)=>{for(let[r,s]of i.assignableViaObstacles.entries()){if(!wzt(s))continue;let a=gHo({obstacle:s,layerCount:i.layerCount});if(a.length<2)continue;let c=`assignable-via:${_Ho(s,r)}`,l=Math.min(s.width,s.height)/2,d={regionId:c,d:{capacityMeshNodeId:c,center:{...s.center},width:s.width,height:s.height,layer:`z${a.join(",")}`,availableZ:a,_containsObstacle:!1,_completelyInsideObstacle:!1,_containsTarget:!1,_assignableVia:!0,_assignedViaObstacle:s},ports:[]},u=[];for(let h of a)for(let A of xHo({graph:i.graph,point:s.center,z:h,viaRadius:l})){let m={portId:`${c}:port:${A.regionId}:z${h}`,x:s.center.x,y:s.center.y,z:h,distToCentermostPortOnZ:0,cramped:!1,regions:[A,d]},p={portId:m.portId,d:m,region1:A,region2:d};u.push(p),A.ports.push(p)}if(new Set(u.map((h)=>h.d.z)).size<2)for(let h of u)h.region1.ports=h.region1.ports.filter((A)=>A!==h);else d.ports.push(...u),i.graph.regions.push(d),i.graph.ports.push(...u)}})({graph:t,assignableViaObstacles:e.assignableViaObstacles??[],layerCount:e.layerCount});for(let i of e.simpleRouteJsonConnections){let[r,s]=i.pointsToConnect,a=d4t({graph:t,point:r,layerCount:e.layerCount}),c=d4t({graph:t,point:s,layerCount:e.layerCount});BI(a,`Could not find start region for connection "${i.name}"`),BI(c,`Could not find end region for connection "${i.name}"`),n.push({connectionId:i.name,mutuallyConnectedNetworkId:u4t(e.connectivityMap,i.name),startRegion:a,endRegion:c,simpleRouteConnection:i})}return{graph:t,connections:n}}function CHo(e,t){let n={lines:[],points:[]};if(!e)return n;let o=e.shift();if(!o)return n;let i=[];n.points.push({...o.port.d,color:"rgb(255, 50, 50)",label:`g: ${o.g}
h: ${o.h}
f: ${o.f}
ripRequired: ${o.ripRequired}`});do i.push({x:o.port.d.x,y:o.port.d.y,z:o.port.d.z}),o=o.parent;while(o);i.reverse();let r=i[0]?.z??0;i.unshift({x:t.x,y:t.y,z:r});for(let s=0;s<i.length-1;s++){let a=i[s],c=i[s+1],l;l=a.z===c.z?a.z===0?void 0:"10 5":"3 3 10",n.lines.push({points:[{x:a.x,y:a.y},{x:c.x,y:c.y}],strokeColor:"rgba(255, 250, 50, 1)",strokeWidth:0.01,strokeDash:l})}for(let s of e)n.points.push({...s.port.d,color:"rgb(0, 64, 255)",label:`${s.port.portId}
g: ${s.g}
h: ${s.h}
f: ${s.f}
ripRequired: ${s.ripRequired}`});return n}function IHo(e,t){let n={lines:[],points:[]};for(let o of e){let i=t[o.connection.connectionId]??"rgba(255, 50, 50, 1)",r=[{x:o.connection.startRegion.d.center.x,y:o.connection.startRegion.d.center.y,z:o.connection.startRegion.d?.availableZ?.[0]??0}];for(let s of o.path)r.push({x:s.port.d.x,y:s.port.d.y,z:s.port.d.z});r.push({x:o.connection.endRegion.d.center.x,y:o.connection.endRegion.d.center.y,z:o.connection.endRegion.d?.availableZ?.[0]??0});for(let s=0;s<r.length-1;s++){let a=r[s],c=r[s+1],l;l=a.z===c.z?a.z===0?void 0:"10 5":"3 3 10";let d={points:[{x:a.x,y:a.y},{x:c.x,y:c.y}],strokeColor:i,strokeWidth:0.01,strokeDash:l};n.lines.push(d)}}return n}function bHo(e,t){let n={lines:[],points:[]};for(let o of e){let i=o.startRegion.d.center,r=o.endRegion.d.center,s=(i.x+r.x)/2,a=(i.y+r.y)/2,c=t[o.connectionId]??"rgba(255, 50, 150, 0.8)";n.points.push({x:s,y:a,color:c,label:o.connectionId}),n.lines.push({points:[i,r],strokeColor:c,strokeWidth:0.1,strokeDash:(o.startRegion.d?.availableZ?.[0]??0)===0?void 0:"10 5"})}return n}function SHo(e){let t={rects:[],points:[]};for(let n of e.regions)t.rects.push({center:n.d.center,width:n.d.width,height:n.d.height,fill:"rgba(200, 200, 200, 0.5)",label:n.regionId});for(let n of e.ports)t.points.push({x:n.d.x,y:n.d.y,color:"rgba(4, 90, 20, 0.3)",label:n.portId});return t}var h4t=class extends VOt{constructor(e){super({inputConnections:e.connections,inputGraph:e.graph,inputSolvedRoutes:e.inputSolvedRoutes,greedyMultiplier:e.weights.GREEDY_MULTIPLIER,ripCost:e.weights.RIPPING_PF_COST,rippingEnabled:e.flags.RIPPING_ENABLED}),this.params=e,this.regionMemoryPfMap=e.opts?.regionMemoryPfMap??new Map,this.baseRegionFailureCostMap=new Map,this.regionRipCountMap=new Map,this.totalRipCount=0,e.weights.MAX_ITERATIONS_PER_PATH>0&&(this.MAX_ITERATIONS=e.weights.MAX_ITERATIONS_PER_PATH*e.effort)}params;regionMemoryPfMap;baseRegionFailureCostMap;regionRipCountMap;totalRipCount;estimateCostToEnd(e){let t=this.currentEndRegion;return BI(t,"Current end region is undefined"),bn(e.d,t.d.center)}computeH(e){let t=e,n=this.computeDistanceTraveled(t);if(this.params.weights.RANDOM_WALK_DISTANCE>0&&n<this.params.weights.RANDOM_WALK_DISTANCE)return 0;let o=this.estimateCostToEnd(e.port),i=(e.port.d.distToCentermostPortOnZ-this.params.weights.CENTER_OFFSET_FOCUS_SHIFT)*this.params.weights.CENTER_OFFSET_DIST_PENALTY_FACTOR,r=e.nextRegion?.regionId??e.lastRegion?.regionId,s=r?this.regionMemoryPfMap.get(r)??0:0;return o+i+this.computeMemoryPfPenalty(s)+this.computeDeviation(e)*this.params.weights.STRAIGHT_LINE_DEVIATION_PENALTY_FACTOR}computeIncreasedRegionCostIfPortsAreUsed(e,t,n){let o=this.currentConnection;BI(o,"Current connection is undefined");let i=this.getBaseRegionFailureCost(e),r=this.computeRegionPfWithAdditionalSegment(e,t,n,o.connectionId,o.mutuallyConnectedNetworkId);if(r>=this.NODE_MAX_PF)return this.params.weights.NODE_PF_MAX_PENALTY;let s=this.pfToFailureCost(r),a=Math.max(0,s-i);return Math.min(this.params.weights.NODE_PF_MAX_PENALTY,a*this.params.weights.NODE_PF_FACTOR)}computeG(e){let t=e,n=super.computeG(e);return t.lastPort&&t.lastPort.d.z!==t.port.d.z&&(n+=this.params.weights.LAYER_CHANGE_COST),t.nextRegion!==this.currentEndRegion?n:n+this.computeEndRegionCloseCost(t)}getPortUsagePenalty(e){let t=e.assignment;if(!t)return 0;let n=this.currentConnection?.mutuallyConnectedNetworkId;return t.connection.mutuallyConnectedNetworkId===n?0:0.5*Math.max(1,this.params.weights.NODE_PF_FACTOR)+this.params.weights.BASE_CANDIDATE_COST}getRipsRequiredForPortUsage(e,t,n){let o=e.assignments??[];if(o.length===0)return[];return o.filter((i)=>i.connection.mutuallyConnectedNetworkId!==this.currentConnection?.mutuallyConnectedNetworkId&&(i.regionPort1!==t&&i.regionPort2!==t&&(i.regionPort1!==n&&i.regionPort2!==n&&fu(i.regionPort1.d,i.regionPort2.d,t.d,n.d))))}selectCandidatesForEnteringRegion(e){let t=this.currentConnection?.startRegion,n=this.currentConnection?.endRegion;BI(t,"Current connection or start region is undefined"),BI(n,"Current connection or end region is undefined");let o=e.filter((s)=>{let a=s.nextRegion;return!a?.d._containsObstacle||(a===t||a===n)}),i=this.params.flags.FORCE_CENTER_FIRST?this.getCenterFirstEnteringRegionCandidates(o):o,r=-this.params.weights.MIN_ALLOWED_BOARD_SCORE;if(r>0){let s=i.filter((a)=>a.g+a.h<=r);s.length>0&&(i=s)}return i}routeSolvedHook(e){this.baseRegionFailureCostMap.clear();let t=new Set;for(let i of e.path){let r=i.lastRegion;r&&t.add(r)}for(let i of t){let r=this.computeRegionPfFromAssignments(i);this.regionMemoryPfMap.set(i.regionId,r)}if(!e.requiredRip)return;if(this.unprocessedConnections.length<2)return;let[n,...o]=this.unprocessedConnections;this.unprocessedConnections=[...o,n]}computeRoutesToRip(e){let t=super.computePortOverlapRoutes(e),n=new Set(t),o=new Map;e.path.map((c)=>{if(!c.lastPort||!c.lastRegion)return;let l=this.getRipsRequiredForPortUsage(c.lastRegion,c.lastPort,c.port);if(l.length===0)return null;let d=o.get(c.lastRegion)??new Set;for(let u of l)d.add(u.solvedRoute);o.set(c.lastRegion,d)});let i=e.path.flatMap((c)=>c.lastRegion?[c.lastRegion]:[]),r=Array.from(new Set([...o.keys(),...i])),s=this.params.weights.SHUFFLE_SEED+this.iterations+this.solvedRoutes.length+this.totalRipCount,a=NI(r,s);for(let c of a){if(this.totalRipCount>=this.params.weights.MAX_RIPS)break;let l=this.getRegionRippingPfThreshold(c.regionId),d=this.computeRegionPf({region:c,newlySolvedRoute:e,routesToRip:n});if(this.regionMemoryPfMap.set(c.regionId,d),d<=l)continue;let u=new Set,h=0;for(;d>l&&!(this.totalRipCount>=this.params.weights.MAX_RIPS);){if(!c.assignments||c.assignments.length===0)throw Error("We are trying to rip a region with no assignments, this should not happen");let A=c.assignments.map((p)=>{let g=p.solvedRoute;return p.connection.connectionId===e.connection.connectionId?null:n.has(g)?void 0:g}).filter((p)=>!!p);if(A.length===0)break;let m=NI(A,s+h+u.size)[0];if(!m)break;u.add(m.connection),n.add(m),this.totalRipCount++,h++,this.regionRipCountMap.set(c.regionId,(this.regionRipCountMap.get(c.regionId)??0)+1),d=this.computeRegionPf({region:c,newlySolvedRoute:e,routesToRip:n}),this.regionMemoryPfMap.set(c.regionId,d)}}if(n.size>t.size){if(this.totalRipCount>=this.params.weights.MAX_RIPS)return n;let c=this.solvedRoutes.filter((h)=>!n.has(h)&&h.connection.connectionId!==e.connection.connectionId);if(c.length===0)return n;let l=Math.max(1,Math.floor(this.params.weights.RANDOM_RIP_FRACTION*c.length)),d=NI(c,s),u=0;for(let h of d){if(u>=l)break;if(this.totalRipCount>=this.params.weights.MAX_RIPS)break;n.has(h)||(n.add(h),u++,this.totalRipCount++)}}return n}computeDeviation(e){let t=this.currentConnection?.startRegion.d.center,n=this.currentConnection?.endRegion.d.center;return BI(t,"Current connection or start region is undefined"),BI(n,"Current connection or end region is undefined"),Da(e.port.d,t,n)}computeDistanceTraveled(e){let t=0,n=e;for(;n?.parent;)t+=bn(n.parent.port.d,n.port.d),n=n.parent;return t}computeMemoryPfPenalty(e){let t=Math.min(Math.max(e,0),0.999999),n=Math.min(this.params.weights.NODE_PF_MAX_PENALTY,-Math.log(1-t));return n*this.params.weights.MEMORY_PF_FACTOR+n*this.params.weights.NODE_PF_FACTOR*0.01}computeEndRegionCloseCost(e){let t=this.currentConnection,n=this.currentEndRegion;BI(t,"Current connection is undefined"),BI(n,"Current end region is undefined");let o=t.endRegion.d.center,i={portId:`end-target:${t.connectionId}`,region1:n,region2:n,d:{portId:`end-target:${t.connectionId}`,x:o.x,y:o.y,z:e.port.d.z,distToCentermostPortOnZ:0,regions:[n,n]}};return this.computeIncreasedRegionCostIfPortsAreUsed(n,e.port,i)}getCenterFirstEnteringRegionCandidates(e){let t=new Map;for(let o of e){let i=o.port.d.z,r=t.get(i)??[];r.push(o),t.set(i,r)}let n=[];for(let o of t.values()){let i=o.sort((c,l)=>c.port.d.distToCentermostPortOnZ-l.port.d.distToCentermostPortOnZ)[0];if(!i)continue;if(this.isPortAvailableForCurrentNet(i.port)){n.push(i);continue}let r=o.sort((c,l)=>c.port.d.x!==l.port.d.x?c.port.d.x-l.port.d.x:c.port.d.y-l.port.d.y),s=[],a=[];for(let c of r)this.isPortAvailableForCurrentNet(c.port)?a.push(c):a.length>0&&(s.push(a),a=[]);a.length>0&&s.push(a);for(let c of s)n.push(c[Math.floor(c.length/2)])}return n}isPortAvailableForCurrentNet(e){let t=e.assignment;if(!t)return!0;let n=this.currentConnection?.mutuallyConnectedNetworkId;return t.connection.mutuallyConnectedNetworkId===n}computeRegionPfFromAssignments(e){let t=this.getRegionAssignedPortPoints(e),n={...e.d,portPoints:t},o=Gm(n),i=e.d;return d1(i,o.numSameLayerCrossings,o.numEntryExitLayerChanges,o.numTransitionPairCrossings)}clampPf(e){return Math.min(Math.max(e,0),0.999999)}get NODE_MAX_PF(){return Math.min(0.99999,1-Math.exp(-this.params.weights.NODE_PF_MAX_PENALTY))}pfToFailureCost(e){let t=this.clampPf(e);return t>=this.NODE_MAX_PF?this.params.weights.NODE_PF_MAX_PENALTY:-Math.log(1-t)}getBaseRegionFailureCost(e){let t=this.baseRegionFailureCostMap.get(e.regionId);if(t!=null)return t;let n=this.computeRegionPfFromAssignments(e),o=this.pfToFailureCost(n);return this.baseRegionFailureCostMap.set(e.regionId,o),o}getRegionAssignedPortPoints(e){return(e.assignments??[]).flatMap((t)=>{let n=t.regionPort1.d,o=t.regionPort2.d,i=t.connection.connectionId,r=t.connection.simpleRouteConnection?.__rootConnectionNames?.[0];return[{x:n.x,y:n.y,z:n.z,connectionName:i,rootConnectionName:r},{x:o.x,y:o.y,z:o.z,connectionName:i,rootConnectionName:r}]})}computeRegionPfWithAdditionalSegment(e,t,n,o,i){let r=this.getRegionAssignedPortPoints(e),s=[{x:t.d.x,y:t.d.y,z:t.d.z,connectionName:o,rootConnectionName:i},{x:n.d.x,y:n.d.y,z:n.d.z,connectionName:o,rootConnectionName:i}],a={...e.d,portPoints:[...r,...s]},c=Gm(a);return d1(e.d,c.numSameLayerCrossings,c.numEntryExitLayerChanges,c.numTransitionPairCrossings)}getRegionRippingPfThreshold(e){let t=this.regionRipCountMap.get(e)??0,n=Math.max(1,Math.floor(this.params.weights.MAX_RIPS/10)),o=Math.min(1,t/n);return(this.params.weights.START_RIPPING_PF_THRESHOLD||0.3)*(1-o)+(this.params.weights.END_RIPPING_PF_THRESHOLD||1)*o}computeRegionPf({region:e,newlySolvedRoute:t,routesToRip:n}){let o=[...(e.assignments??[]).filter((a)=>!n.has(a.solvedRoute)).flatMap((a)=>{let{regionPort1:c,regionPort2:l}=a,d=a.connection.connectionId,u=a.connection.simpleRouteConnection?.__rootConnectionNames?.[0];return[{x:c.d.x,y:c.d.y,z:c.d.z,connectionName:d,rootConnectionName:u},{x:l.d.x,y:l.d.y,z:l.d.z,connectionName:d,rootConnectionName:u}]}),...t.path.flatMap((a)=>{if(!a.lastPort||a.lastRegion!==e)return[];let{lastPort:c,port:l}=a;return[{x:c.d.x,y:c.d.y,z:c.d.z,connectionName:t.connection.connectionId,rootConnectionName:t.connection.simpleRouteConnection?.__rootConnectionNames?.[0]},{x:l.d.x,y:l.d.y,z:l.d.z,connectionName:t.connection.connectionId,rootConnectionName:t.connection.simpleRouteConnection?.__rootConnectionNames?.[0]}]})],i={capacityMeshNodeId:e.d.capacityMeshNodeId,center:e.d.center,width:e.d.width,height:e.d.height,portPoints:o,availableZ:e.d.availableZ},r=Gm(i),s=e.d;return d1(s,r.numSameLayerCrossings,r.numEntryExitLayerChanges,r.numTransitionPairCrossings)}computeNodePf(e){let t=this.getOutput().nodesWithPortPoints.find((i)=>i.capacityMeshNodeId===e.capacityMeshNodeId),n=this.params.graph.regions.find((i)=>i.d.capacityMeshNodeId===e.capacityMeshNodeId);if(!t||!n)return null;let o=Gm(t);return d1(n.d,o.numSameLayerCrossings,o.numEntryExitLayerChanges,o.numTransitionPairCrossings)}getOutput(){new Map(this.params.graph.regions.map((i)=>[i.regionId,i]));let e=new Set;for(let i of this.params.connections)e.add(i.startRegion.regionId),e.add(i.endRegion.regionId);let t=new Map;for(let i of this.solvedRoutes){let r=i.path;if(r.length===0)continue;let s=r[0]?.port,a=r[r.length-1]?.port;if(!s||!a)continue;let c=i.connection.connectionId,l=i.connection,d=l.simpleRouteConnection?.__rootConnectionNames?.[0],u=i.connection.startRegion.regionId,h=i.connection.endRegion.regionId,A=t.get(u)??[];A.push({portPointId:s.d.portId,x:s.d.x,y:s.d.y,z:s.d.z,connectionName:c,rootConnectionName:d}),t.set(u,A);let m=t.get(h)??[];m.push({portPointId:a.d.portId,x:a.d.x,y:a.d.y,z:a.d.z,connectionName:c,rootConnectionName:d}),t.set(h,m)}let n=[],o=[];for(let i of this.params.graph.regions){let r=(i.assignments??[]).flatMap((l)=>{let d=l.connection.connectionId,u=l.connection.simpleRouteConnection?.__rootConnectionNames?.[0];return[{portPointId:l.regionPort1.d.portId,x:l.regionPort1.d.x,y:l.regionPort1.d.y,z:l.regionPort1.d.z,connectionName:d,rootConnectionName:u,nextPortPointId:l.regionPort2.d.portId},{portPointId:l.regionPort2.d.portId,x:l.regionPort2.d.x,y:l.regionPort2.d.y,z:l.regionPort2.d.z,connectionName:d,rootConnectionName:u,prevPortPointId:l.regionPort1.d.portId}]}),s=[];if(i.d._containsObstacle&&e.has(i.regionId)){let l=t.get(i.regionId)??[],d=[];for(let h of l)r.some((A)=>A.connectionName===h.connectionName&&A.rootConnectionName===h.rootConnectionName&&A.portPointId===h.portPointId)||d.push(h);r.push(...d);let u=new Map;for(let h of r){let A=`${h.connectionName}::${h.rootConnectionName??""}`,m=u.get(A)??[];m.push(h),u.set(A,m)}for(let[h,A]of u.entries()){let[m,p=""]=h.split("::"),g=A[0];if(!g)continue;let _={portPointId:`center:${i.regionId}:${m}:${p}`,x:i.d.center.x,y:i.d.center.y,z:g.z,connectionName:m,rootConnectionName:p||void 0};if(A.length>=2){let f=A[A.length-1];g.portPointId&&(g.nextPortPointId=_.portPointId,_.prevPortPointId=g.portPointId),f.portPointId&&(f.prevPortPointId=_.portPointId,_.nextPortPointId=f.portPointId)}s.push(_)}}let a=[...r,...s];a.length>0&&n.push({capacityMeshNodeId:i.d.capacityMeshNodeId,center:i.d.center,width:i.d.width,height:i.d.height,portPoints:a,availableZ:i.d.availableZ});let c=i.ports.map((l)=>{let d=l.d,u=l.d.regions.some((h)=>Boolean(h.d._offBoardConnectionId));return{portPointId:l.d.portId,x:l.d.x,y:l.d.y,z:l.d.z,prevPortPointId:d.prevPortPointId,nextPortPointId:d.nextPortPointId,connectionNodeIds:l.d.regions.map((h)=>h.regionId),distToCentermostPortOnZ:l.d.distToCentermostPortOnZ,connectsToOffBoardNode:u}});o.push({capacityMeshNodeId:i.d.capacityMeshNodeId,center:i.d.center,width:i.d.width,height:i.d.height,portPoints:c,availableZ:i.d.availableZ,_containsObstacle:i.d._containsObstacle,_containsTarget:i.d._containsTarget,_offBoardConnectionId:i.d._offBoardConnectionId,_offBoardConnectedCapacityMeshNodeIds:i.d._offBoardConnectedCapacityMeshNodeIds})}return{nodesWithPortPoints:n,inputNodeWithPortPoints:o}}visualize(){return function(e){let t={};return t=e.reduce((n,o)=>n&&o?Sk(n,o):{},t),t||{}}([SHo(this.params.graph),this.visualizePfOverlay(),bHo(this.params.connections,this.params.colorMap??{}),CHo(this.candidateQueue.peekMany(100),this.currentConnection?.startRegion.d.center),IHo(this.solvedRoutes,this.params.colorMap??{})])}visualizePfOverlay(){let e=this.getOutput(),t=e?.inputNodeWithPortPoints??[],n=new Map((e?.nodesWithPortPoints??[]).map((i)=>[i.capacityMeshNodeId,i])),o={rects:[]};for(let i of t){let r=this.computeNodePf(i),s=r??0,a=n.get(i.capacityMeshNodeId),c=a?Gm(a):{numSameLayerCrossings:0,numEntryExitLayerChanges:0,numTransitionPairCrossings:0},l=Math.min(255,Math.floor(512*s)),d=Math.max(0,255-Math.floor(512*s)),u=`rgba(${l}, ${d}, ${d}, ${s<0.001?"0.1":"0.3"})`;i._containsObstacle&&(u="rgba(255, 0, 0, 0.3)"),i._offBoardConnectedCapacityMeshNodeIds?.length&&(u="rgba(255, 165, 0, 0.3)"),o.rects.push({center:i.center,width:i.width-0.2,height:i.height-0.2,layer:`z${i?.availableZ?.join(",")}`,fill:u,label:`${i.capacityMeshNodeId}
pf: ${r===null?"n/a":r.toFixed(3)}
xSame: ${c.numSameLayerCrossings}, xLC: ${c.numEntryExitLayerChanges}, xTransition: ${c.numTransitionPairCrossings}`})}return o}},PHo=(e)=>{if(!e.assignments||e.assignments.length===0)return e.d?.assignment?0:1;let t=e.assignments.flatMap((i)=>{let r=i.regionPort1.d,s=i.regionPort2.d,a=i.connection.connectionId,c=i.connection,l=c.simpleRouteConnection?.__rootConnectionNames?.[0];return[{x:r.x,y:r.y,z:r.z,connectionName:a,rootConnectionName:l},{x:s.x,y:s.y,z:s.z,connectionName:a,rootConnectionName:l}]}),n={...e.d,portPoints:t},o=Gm(n);return d1(e.d,o.numSameLayerCrossings,o.numEntryExitLayerChanges,o.numTransitionPairCrossings)};function PI(e,t,n,o={}){return{solverName:e,solverClass:t,getConstructorParams:n,onSolved:o.onSolved}}var Dzt=class extends Oi{constructor(e,t={}){super(),this.srj=e,this.opts=t,this.srj=e,this.opts={...t},this.viaDiameter=y0(e).padDiameter,this.minTraceWidth=e.minTraceWidth;let n=this.opts;if(this.effort=n.effort??1,this.MAX_ITERATIONS=1e8*this.effort,n.capacityDepth===void 0){let o=e.bounds.maxX-e.bounds.minX,i=e.bounds.maxY-e.bounds.minY,r=Math.max(o,i),s=n.targetMinCapacity??0.5;n.capacityDepth=cT(r,s)}this.connMap=x0(e),this.colorMap=HA(e,this.connMap),this.cacheProvider=n.cacheProvider===void 0?CS():n.cacheProvider===null?null:n.cacheProvider,this.startTimeOfPhase={},this.endTimeOfPhase={},this.timeSpentOnPhase={}}srj;opts;netToPointPairsSolver;nodeSolver;nodeTargetMerger;edgeSolver;colorMap;highDensityRouteSolver;highDensityStitchSolver;singleLayerNodeMerger;strawSolver;deadEndSolver;traceSimplificationSolver;availableSegmentPointSolver;portPointPathingSolver;multiSectionPortPointOptimizer;uniformPortDistributionSolver;traceWidthSolver;necessaryCrampedPortPointSolver;hyperGraphSectionOptimizer;viaDiameter;minTraceWidth;effort;startTimeOfPhase;endTimeOfPhase;timeSpentOnPhase;activeSubSolver=null;connMap;srjWithPointPairs;capacityNodes=null;capacityEdges=null;cacheProvider=null;pipelineDef=[PI("netToPointPairsSolver",wU,(e)=>[e.srj,e.colorMap,rT(e.srj)],{onSolved:(e)=>{e.srjWithPointPairs=e.netToPointPairsSolver?.getNewSimpleRouteJson(),e.colorMap=HA(e.srjWithPointPairs,this.connMap),e.connMap=x0(e.srjWithPointPairs)}}),PI("nodeSolver",bU,(e)=>[{simpleRouteJson:e.srjWithPointPairs,maxGapFillPasses:4}],{onSolved:(e)=>{e.capacityNodes=e.nodeSolver?.getOutput().meshNodes??[]}}),PI("edgeSolver",sT,(e)=>[e.capacityNodes],{onSolved:(e)=>{e.capacityEdges=e.edgeSolver?.edges}}),PI("availableSegmentPointSolver",hL,(e)=>[{nodes:e.capacityNodes,edges:e.capacityEdges||[],traceWidth:e.minTraceWidth,colorMap:e.colorMap,shouldReturnCrampedPortPoints:!0}]),PI("necessaryCrampedPortPointSolver",nne,(e)=>[{capacityMeshNodes:e.capacityNodes,sharedEdgeSegments:e.availableSegmentPointSolver.getOutput(),simpleRouteJson:e.srjWithPointPairs}]),PI("portPointPathingSolver",h4t,(e)=>{let t=e.necessaryCrampedPortPointSolver?.getOutput()??e.availableSegmentPointSolver.getOutput(),{graph:n,connections:o}=one({capacityMeshNodes:e.capacityNodes,layerCount:e.srj.layerCount,connectivityMap:e.connMap,segmentPortPoints:t.flatMap((i)=>i.portPoints),simpleRouteJsonConnections:e.srjWithPointPairs.connections});return[{graph:n,connections:o,layerCount:e.srj.layerCount,effort:Math.min(1,e.effort),flags:{FORCE_CENTER_FIRST:!0,RIPPING_ENABLED:!0},weights:{SHUFFLE_SEED:0,MEMORY_PF_FACTOR:4,CENTER_OFFSET_DIST_PENALTY_FACTOR:0,CENTER_OFFSET_FOCUS_SHIFT:0,NODE_PF_FACTOR:0,LAYER_CHANGE_COST:0,RIPPING_PF_COST:0,NODE_PF_MAX_PENALTY:100,BASE_CANDIDATE_COST:0.6,MAX_ITERATIONS_PER_PATH:0,RANDOM_WALK_DISTANCE:0,START_RIPPING_PF_THRESHOLD:0.3,END_RIPPING_PF_THRESHOLD:1,MAX_RIPS:1000,RANDOM_RIP_FRACTION:0.3,STRAIGHT_LINE_DEVIATION_PENALTY_FACTOR:4,GREEDY_MULTIPLIER:0.7,MIN_ALLOWED_BOARD_SCORE:-1e4}}]}),PI("hyperGraphSectionOptimizer",DLo,(e)=>{let t=e.portPointPathingSolver;return[{hyperGraphSolver:t,inputSolvedRoutes:t.solvedRoutes,expansionHopsFromCentralRegion:1,createHyperGraphSolver:(n)=>new h4t({graph:n.inputGraph,connections:n.inputConnections,inputSolvedRoutes:n.inputSolvedRoutes,layerCount:e.srj.layerCount,effort:Math.min(1,e.effort),flags:{FORCE_CENTER_FIRST:!0,RIPPING_ENABLED:!0},weights:{SHUFFLE_SEED:0,MEMORY_PF_FACTOR:4,CENTER_OFFSET_DIST_PENALTY_FACTOR:0,CENTER_OFFSET_FOCUS_SHIFT:0,NODE_PF_FACTOR:0,LAYER_CHANGE_COST:0,RIPPING_PF_COST:0,NODE_PF_MAX_PENALTY:100,BASE_CANDIDATE_COST:0.6,MAX_ITERATIONS_PER_PATH:0,RANDOM_WALK_DISTANCE:0,START_RIPPING_PF_THRESHOLD:0.3,END_RIPPING_PF_THRESHOLD:1,MAX_RIPS:1000,RANDOM_RIP_FRACTION:0.3,STRAIGHT_LINE_DEVIATION_PENALTY_FACTOR:4,GREEDY_MULTIPLIER:0.7,MIN_ALLOWED_BOARD_SCORE:-1e4}}),regionCost:PHo,effort:Math.min(1,e.effort),ACCEPTABLE_REGION_COST:0.1,MAX_ATTEMPTS_PER_REGION:Math.max(3,3*Math.min(1,e.effort)),MAX_ATTEMPTS_PER_SECTION:Math.max(50,50*Math.min(1,e.effort)),FRACTION_TO_REPLACE:1,alwaysRipConflicts:!0}]}),PI("uniformPortDistributionSolver",Hte,(e)=>[{nodeWithPortPoints:e.portPointPathingSolver?.getOutput().nodesWithPortPoints??[],inputNodesWithPortPoints:e.portPointPathingSolver?.getOutput().inputNodeWithPortPoints??[],minTraceWidth:e.minTraceWidth,obstacles:e.srj.obstacles,layerCount:e.srj.layerCount}]),PI("highDensityRouteSolver",yL,(e)=>[{nodePortPoints:e.uniformPortDistributionSolver?.getOutput()??[],nodePfById:new Map((e.portPointPathingSolver?.getOutput().inputNodeWithPortPoints??[]).map((t)=>[t.capacityMeshNodeId,e.portPointPathingSolver?.computeNodePf(t)??null])),colorMap:e.colorMap,connMap:e.connMap,viaDiameter:e.viaDiameter,traceWidth:e.minTraceWidth}]),PI("highDensityStitchSolver",AHe,(e)=>[{connections:e.srjWithPointPairs.connections,hdRoutes:e.highDensityRouteSolver.routes,colorMap:e.colorMap,layerCount:e.srj.layerCount,defaultViaDiameter:e.viaDiameter}]),PI("traceSimplificationSolver",HI,(e)=>[{hdRoutes:e.highDensityStitchSolver.mergedHdRoutes,obstacles:e.srj.obstacles,connMap:e.connMap,colorMap:e.colorMap,outline:e.srj.outline,defaultViaDiameter:e.viaDiameter,layerCount:e.srj.layerCount,iterations:2}]),PI("traceWidthSolver",TU,(e)=>[{hdRoutes:e.traceSimplificationSolver.simplifiedHdRoutes,obstacles:e.srj.obstacles,connMap:e.connMap,colorMap:e.colorMap,minTraceWidth:e.minTraceWidth,connection:e.srj.connections,layerCount:e.srj.layerCount}])];getConstructorParams(){return[this.srj,this.opts]}currentPipelineStepIndex=0;_step(){let e=this.pipelineDef[this.currentPipelineStepIndex];if(!e)return void(this.solved=!0);if(this.activeSubSolver)return this.activeSubSolver.step(),void(this.activeSubSolver.solved?(this.endTimeOfPhase[e.solverName]=performance.now(),this.timeSpentOnPhase[e.solverName]=this.endTimeOfPhase[e.solverName]-this.startTimeOfPhase[e.solverName],e.onSolved?.(this),this.activeSubSolver=null,this.currentPipelineStepIndex++):this.activeSubSolver.failed&&(this.error=this.activeSubSolver?.error,this.failed=!0,this.activeSubSolver=null));let t=e.getConstructorParams(this);this.activeSubSolver=new e.solverClass(...t),this[e.solverName]=this.activeSubSolver,this.timeSpentOnPhase[e.solverName]=0,this.startTimeOfPhase[e.solverName]=performance.now()}solveUntilPhase(e){for(;this.getCurrentPhase()!==e;)this.step()}getCurrentPhase(){return this.pipelineDef[this.currentPipelineStepIndex]?.solverName??"none"}visualize(){if(!this.solved&&this.activeSubSolver)return this.activeSubSolver.visualize();let e=this.netToPointPairsSolver?.visualize(),t=this.nodeSolver?.visualize(),n=this.nodeTargetMerger?.visualize(),o=this.singleLayerNodeMerger?.visualize(),i=this.strawSolver?.visualize(),r=this.edgeSolver?.visualize(),s=this.deadEndSolver?.visualize(),a=this.availableSegmentPointSolver?.visualize(),c=this.portPointPathingSolver?.visualize(),l=this.multiSectionPortPointOptimizer?.visualize(),d=this.uniformPortDistributionSolver?.visualize(),u=this.highDensityRouteSolver?.visualize(),h=this.highDensityStitchSolver?.visualize(),A=this.traceSimplificationSolver?.visualize(),m=this.necessaryCrampedPortPointSolver?.visualize(),p=this.highDensityRouteSolver?.visualize(),g=this.srj.outline,_=[];if(_.push({points:[{x:this.srj.bounds?.minX??-50,y:this.srj.bounds?.minY??-50},{x:this.srj.bounds?.maxX??50,y:this.srj.bounds?.minY??-50},{x:this.srj.bounds?.maxX??50,y:this.srj.bounds?.maxY??50},{x:this.srj.bounds?.minX??-50,y:this.srj.bounds?.maxY??50},{x:this.srj.bounds?.minX??-50,y:this.srj.bounds?.minY??-50}],strokeColor:"rgba(255,0,0,0.25)"}),g&&g.length>=2){let C=g.map((I)=>({x:I.x,y:I.y}));C.push({...C[0]}),_.push({points:C,strokeColor:"rgba(0, 136, 255, 0.95)"})}let f=O6(this.srj),y={points:[...this.srj.connections.flatMap((C)=>C.pointsToConnect.map((I)=>({...I,layer:z6(I,this.srj.layerCount),label:`${C.name} ${I.pcb_port_id??""}`})))],rects:[...(this.srj.obstacles??[]).filter((C)=>!C.isCopperPour).map((C)=>({...C,fill:C.layers?.includes("top")?"rgba(255,0,0,0.25)":C.layers?.includes("bottom")?"rgba(0,0,255,0.25)":"rgba(255,0,0,0.25)",layer:OE(C,this.srj.layerCount),label:f(C)}))],lines:_},x=[y,e,t,n,o,i,r,s,a,m,c,p,l,d,u?Lc(y,u):null,h,A,this.solved?Lc({lines:_},p1(this.getOutputSimpleRouteJson())):null].filter(Boolean);return Lc(...x)}preview(){if(this.highDensityRouteSolver){let e=[];for(let t=this.highDensityRouteSolver.routes.length-1;t>=0;t--){let n=this.highDensityRouteSolver.routes[t];if(e.push({points:n.route.map((o)=>({x:o.x,y:o.y})),strokeColor:this.colorMap[n.connectionName]}),e.length>200)break}return{lines:e}}return this.netToPointPairsSolver?this.netToPointPairsSolver.visualize():{}}_getOutputHdRoutes(){return this.traceWidthSolver?.getHdRoutesWithWidths()??this.traceSimplificationSolver?.simplifiedHdRoutes??this.highDensityStitchSolver.mergedHdRoutes}getOutputSimplifiedPcbTraces(){if(!this.solved||!this.highDensityRouteSolver)throw Error("Cannot get output before solving is complete");let e=[],t=this._getOutputHdRoutes();for(let n of this.netToPointPairsSolver?.newConnections??[]){let o=n.__netConnectionName??this.srj.connections.find((r)=>r.name===n.name)?.__netConnectionName,i=t.filter((r)=>r.connectionName===n.name);for(let r=0;r<i.length;r++){let s=i[r],a={type:"pcb_trace",pcb_trace_id:`${n.name}_${r}`,connection_name:o??n.__rootConnectionNames?.[0]??n.name,route:Ex(s,this.srj.layerCount)};e.push(a)}}return e}getOutputSimpleRouteJson(){return{...this.srj,traces:this.getOutputSimplifiedPcbTraces()}}},vHo=class{MAX_ITERATIONS=1000;solved=!1;failed=!1;iterations=0;progress=0;error=null;activeSubSolver;failedSubSolvers;timeToSolve;stats={};pendingEffects;cacheHit;cacheKey;cacheToSolveSpaceTransform;getSolverName(){return this.constructor.name}step(){if(!this.solved&&!this.failed){this.iterations++;try{this._step()}catch(e){throw this.error=`${this.getSolverName()} error: ${e}`,console.error(this.error),this.failed=!0,e}!this.solved&&this.iterations>this.MAX_ITERATIONS&&this.tryFinalAcceptance(),!this.solved&&this.iterations>this.MAX_ITERATIONS&&(this.error=`${this.getSolverName()} ran out of iterations (MAX_ITERATIONS=${this.MAX_ITERATIONS})`,this.failed=!0),"computeProgress"in this&&(this.progress=this.computeProgress())}}_step(){}getConstructorParams(){throw Error("getConstructorParams not implemented")}solve(){let e=Date.now();for(;!this.solved&&!this.failed;)this.step();let t=Date.now();this.timeToSolve=t-e}visualize(){return{lines:[],points:[],rects:[],circles:[]}}tryFinalAcceptance(){}preview(){return{lines:[],points:[],rects:[],circles:[]}}},EHo=(e,t)=>{let n=(d)=>d===" "||d===`
`||d==="\r"||d==="\t",o=(d)=>{let u=0,h=d.length;for(;u<h&&n(d[u]);)u+=1;for(;h>u&&n(d[h-1]);)h-=1;return d.slice(u,h)},i=(d)=>{let u=[],h=0,A=0;for(let m=0;m<d.length;m+=1){let p=d[m];p!=="("?p!==")"?p===","&&A===0&&(u.push(o(d.slice(h,m))),h=m+1):A>0&&(A-=1):A+=1}return u.push(o(d.slice(h))),u},r=(d)=>{return`${u=d,Math.min(1,Math.max(0,u))}`;var u},s=((d)=>{let u=o(d);if(!u.startsWith("#"))return null;let h=u.slice(1);if(h.length!==3&&h.length!==6)return null;for(let A of h){let m=A.toLowerCase();if(!(m>="0"&&m<="9")&&!(m>="a"&&m<="f"))return null}if(h.length===3){let[A,m,p]=h;return{r:Number.parseInt(A+A,16),g:Number.parseInt(m+m,16),b:Number.parseInt(p+p,16)}}return{r:Number.parseInt(h.slice(0,2),16),g:Number.parseInt(h.slice(2,4),16),b:Number.parseInt(h.slice(4,6),16)}})(t);if(s)return`rgba(${s.r}, ${s.g}, ${s.b}, ${r(1-e)})`;let a=((d)=>{let u=o(d),h=u.indexOf("(");return h<=0||u[u.length-1]!==")"?null:{name:o(u.slice(0,h)).toLowerCase(),args:i(u.slice(h+1,-1))}})(t);if(!a)return t;let{name:c,args:l}=a;if(c==="hsl"||c==="rgb")return l.length!==3?t:`${c}a(${l[0]}, ${l[1]}, ${l[2]}, ${r(1-e)})`;if(c==="hsla"||c==="rgba"){if(l.length!==4)return t;let d=((u)=>{let h=o(u);if(!h)return null;let A=Number.parseFloat(h);return Number.isFinite(A)?A:null})(l[3]);return d===null?t:`${c}(${l[0]}, ${l[1]}, ${l[2]}, ${r(d-e)})`}return t},MHo=(e,t)=>{try{return EHo(t,e)}catch(n){return console.error(n),e}},Nzt=(e)=>e.rootConnectionName??e.connectionName,bte=(e)=>{let t=[];for(let n=0;n<e.route.length-1;n+=1){let o=e.route[n],i=e.route[n+1];if(!o||!i||o.z===i.z)continue;if(Math.abs(o.x-i.x)>0.000001||Math.abs(o.y-i.y)>0.000001)continue;let r={x:Math.round(1000*o.x)/1000,y:Math.round(1000*o.y)/1000},s=t.at(-1);s&&s.x===r.x&&s.y===r.y||t.push(r)}return t},RV=(e,t,n=0.001)=>Math.abs(e.x-t.x)<=n&&Math.abs(e.y-t.y)<=n,BHe=(e,t)=>({minX:e.center.x-e.width/2+t,maxX:e.center.x+e.width/2-t,minY:e.center.y-e.height/2+t,maxY:e.center.y+e.height/2-t}),f0=(e,t)=>{let n=Math.max(Math.abs(e),Math.abs(t));if(n===0||n===Number.POSITIVE_INFINITY)return n;let o=e/n,i=t/n;return n*Math.sqrt(o*o+i*i)},DNe=(e,t)=>({x:e.x-t.x,y:e.y-t.y}),GZ=(e,t)=>e.x*t.x+e.y*t.y,m4t=(e,t,n)=>({x:e.x+(t.x-e.x)*n,y:e.y+(t.y-e.y)*n}),S6=(e)=>{let t=[];for(let n=0;n<e.length;n+=1){let o=e[n];if(o)for(let i=0;i<o.route.length-1;i+=1){let r=o.route[i],s=o.route[i+1];r&&s&&(r.z!==s.z||RV(r,s)||t.push({routeIndex:n,rootConnectionName:Nzt(o),startIndex:i,endIndex:i+1,start:r,end:s,z:r.z,traceRadius:(o.traceThickness??0.1)/2}))}}return t},xee=(e,t,n=0.000001)=>{let o=t.end.x-t.start.x,i=t.end.y-t.start.y,r=o*o+i*i;if(r<=n)return{x:t.start.x,y:t.start.y,t:0};let s=((e.x-t.start.x)*o+(e.y-t.start.y)*i)/r,a=(c=s,Math.max(0,Math.min(c,1)));var c;return{x:t.start.x+o*a,y:t.start.y+i*a,t:a}},X8=(e,t,n=0.000001)=>{let o=DNe(e.end,e.start),i=DNe(t.end,t.start),r=DNe(e.start,t.start),s=GZ(o,o),a=GZ(o,i),c=GZ(i,i),l=GZ(o,r),d=GZ(i,r),u=s*c-a*a,h=n,A,m,p=u,g=u;u<=h?(A=0,p=1,m=d,g=c):(A=a*d-c*l,m=s*d-a*l,A<0?(A=0,m=d,g=c):A>p&&(A=p,m=d+a,g=c)),m<0?(m=0,-l<0?A=0:-l>s?A=p:(A=-l,p=s)):m>g&&(m=g,-l+a<0?A=0:-l+a>s?A=p:(A=-l+a,p=s));let _=Math.abs(A)<=h?0:A/p,f=Math.abs(m)<=h?0:m/g,y=m4t(e.start,e.end,_),x=m4t(t.start,t.end,f),C=xee(e.start,t,n),I=xee(e.end,t,n),b=xee(t.start,e,n),P=xee(t.end,e,n);return[{leftT:_,rightT:f,leftPoint:y,rightPoint:x},{leftT:0,rightT:C.t,leftPoint:e.start,rightPoint:C},{leftT:1,rightT:I.t,leftPoint:e.end,rightPoint:I},{leftT:b.t,rightT:0,leftPoint:b,rightPoint:t.start},{leftT:P.t,rightT:1,leftPoint:P,rightPoint:t.end}].sort((E,B)=>f0(E.leftPoint.x-E.rightPoint.x,E.leftPoint.y-E.rightPoint.y)-f0(B.leftPoint.x-B.rightPoint.x,B.leftPoint.y-B.rightPoint.y))},SE=0.000001,Cee=(e)=>{let t=[];for(let n of e){let o=t[n.routeIndex]??[];o[n.startIndex]=n,t[n.routeIndex]=o}return t},Rzt=(e,t)=>e<t?[e,t]:[t,e],P_e=(e,t)=>e.some(([n,o])=>n===t[0]&&o===t[1]),p4t=(e,t,n)=>{let o,i=Number.POSITIVE_INFINITY;for(let r of e){if(r.routeIndex!==t.routeIndex||r.z!==t.z||r.endIndex!==t.startIndex&&r.startIndex!==t.endIndex)continue;let[s]=X8(r,n);if(!s)continue;let a=f0(s.leftPoint.x-s.rightPoint.x,s.leftPoint.y-s.rightPoint.y);a>=i||(i=a,o=r)}return o},A4t=(e,t)=>{let n=S6(t),o=S6(e),i=Cee(o),r=[];for(let s=0;s<n.length;s+=1){let a=n[s];if(a)for(let c=s+1;c<n.length;c+=1){let l=n[c];if(!l||a.z!==l.z||a.rootConnectionName===l.rootConnectionName||Math.max(a.start.x,a.end.x)<Math.min(l.start.x,l.end.x)||Math.max(l.start.x,l.end.x)<Math.min(a.start.x,a.end.x)||Math.max(a.start.y,a.end.y)<Math.min(l.start.y,l.end.y)||Math.max(l.start.y,l.end.y)<Math.min(a.start.y,a.end.y))continue;let[d]=X8(a,l);if(!d||f0(d.leftPoint.x-d.rightPoint.x,d.leftPoint.y-d.rightPoint.y)>SE||d.leftT<=SE||d.leftT>=0.999999||d.rightT<=SE||d.rightT>=0.999999)continue;let u=i[a.routeIndex]?.[a.startIndex],h=i[l.routeIndex]?.[l.startIndex];if(!u||!h)continue;let[A]=X8(u,h);if(!A||f0(A.leftPoint.x-A.rightPoint.x,A.leftPoint.y-A.rightPoint.y)<=SE)continue;let m=p4t(o,u,h),p=p4t(o,h,u),g=m?[u,m]:[u],_=p?[h,p]:[h];for(let f of g)for(let y of _){let x={leftRouteIndex:a.routeIndex,leftStartPointIndex:f.startIndex,rightRouteIndex:l.routeIndex,rightStartPointIndex:y.startIndex};r.some((C)=>C.leftRouteIndex===x.leftRouteIndex&&C.leftStartPointIndex===x.leftStartPointIndex&&C.rightRouteIndex===x.rightRouteIndex&&C.rightStartPointIndex===x.rightStartPointIndex)||r.push(x)}}}return r},NNe=(e)=>{let t=S6(e),n=[];for(let o=0;o<t.length;o+=1){let i=t[o];if(i)for(let r=o+1;r<t.length;r+=1){let s=t[r];if(!s||i.z!==s.z||i.rootConnectionName===s.rootConnectionName)continue;let[a]=X8(i,s);if(!a)continue;if(f0(a.leftPoint.x-a.rightPoint.x,a.leftPoint.y-a.rightPoint.y)+SE<i.traceRadius+s.traceRadius){let c=Rzt(i.routeIndex,s.routeIndex);P_e(n,c)||n.push(c)}}}return n},tke=(e,t)=>t<=1||t>=e-2,Qzt=(e,t)=>t.some((n)=>tke(e,n)),v_e=0.2,nke=0.4,BHo=0.7000000000000001,VAe=0.03,_4t=1000,Yd=0.000001,wHe=0.015,g4t=(e)=>Math.round(e*_4t)/_4t,RNe=(e,t)=>({x:e.x-t.x,y:e.y-t.y}),kzt=(e,t)=>({x:e.x*t,y:e.y*t}),f4t=(e,t)=>e.x*t.x+e.y*t.y,wHo=(e,t,n)=>({x:e.x+(t.x-e.x)*n,y:e.y+(t.y-e.y)*n}),sL=(e)=>Math.max(0,Math.min(e,1)),_U=(e,t,n)=>Math.max(t,Math.min(e,n)),Lzt=(e,t)=>{let n=((o)=>f0(o.x,o.y))(e);return n<=t||n<=Yd?e:kzt(e,t/n)},Fzt=(e,t=0)=>({minX:e.center.x-e.width/2-t,maxX:e.center.x+e.width/2+t,minY:e.center.y-e.height/2-t,maxY:e.center.y+e.height/2+t}),THo=(e,t,n=0)=>{let o=Fzt(t,n);return e.x>=o.minX&&e.x<=o.maxX&&e.y>=o.minY&&e.y<=o.maxY},DHo=(e,t,n)=>{if(e.regionId){let s=t.findIndex((a)=>a.capacityMeshNodeId===e.regionId);if(s!==-1)return s}let o=[...e.route.map(({x:s,y:a})=>({x:s,y:a})),...e.vias.map(({x:s,y:a})=>({x:s,y:a}))],i=-1,r=Number.POSITIVE_INFINITY;for(let s=0;s<t.length;s++){let a=t[s];if(!a||!o.every((l)=>THo(l,a,n)))continue;let c=a.width*a.height;c<r&&(r=c,i=s)}return i},y4t=(e,t,n,o)=>{let i=((r,s,a)=>{let c=Math.min(Math.abs(r.originalX-a.minX),Math.abs(a.maxX-r.originalX)),l=Math.min(Math.abs(r.originalY-a.minY),Math.abs(a.maxY-r.originalY));if(Math.abs(c-l)<=Yd)return Math.abs(s.x-r.x)>=Math.abs(s.y-r.y)?"y":"x";return c<l?"y":"x"})(e,t,n);return Lzt(i==="x"?{x:1.1*(e.x-t.x)*o,y:0}:{x:0,y:1.1*(e.y-t.y)*o},0.06*o)},_V=(e,t,n,o,i=3.5,r=0.2,s=0.4)=>{let a=Math.max(e,0);if(a>=s)return 0;let c=a/r;if(c<1){let u=1-c;return t*u**3*(1+u*i)}let l=(a-r)/Math.max(s-r,Yd),d=t*n*Math.exp(-l*o);return d<0.00001?0:d},NHo=(e,t)=>{let n=e.boundaryPadding>0?0.001:0,o=t.minX+e.boundaryPadding+n,i=t.maxX-e.boundaryPadding-n,r=t.minY+e.boundaryPadding+n,s=t.maxY-e.boundaryPadding-n;e.x=_U(e.x,o,i),e.y=_U(e.y,r,s)},oke=(e,t)=>{for(let n of e)for(let o of n.nodes)NHo(o,t)},Hzt=(e)=>e.kind==="via"?0.4:0.25,RHo=(e)=>(e.kind,0.5),Ozt=(e)=>e.kind==="via"?12:3.5,QHo=(e)=>e.kind==="via"?0.18:0.06,kHo=(e)=>e.kind==="via"?1.35:1.05,LHo=(e,t)=>e.kind==="via"?3*t:t,ike=(e,t,n,o)=>{let i=2*t;e[i]=(e[i]??0)+n,e[i+1]=(e[i+1]??0)+o},Tk=(e,t,n,o,i,r)=>{if(e.fixed||ike(o,e.node.forceIndex,t,n),!e.fixed&&i&&r!==void 0){let s=2*r;i[s]=(i[s]??0)+t,i[s+1]=(i[s+1]??0)+n}},zzt=(e,t,n,o,i=0.5)=>{let{startNode:r,endNode:s}=e,a=1-sL(i),c=sL(i),l=r.fixed?0:a,d=s.fixed?0:c,u=l+d;if(!(u<=Yd)){if(!r.fixed&&l>0){let h=l/u;ike(o,r.forceIndex,t*h,n*h)}if(!s.fixed&&d>0){let h=d/u;ike(o,s.forceIndex,t*h,n*h)}}},FHo=(e,t,n,o,i)=>{if(t.fixed)return{x:0,y:0};let{minX:r,maxX:s,minY:a,maxY:c}=e,l=((m)=>m.kind==="via"?0.65:v_e)(t),d=((m)=>m.kind==="via"?BHo:nke)(t),u=((m)=>m.kind==="via"?0.015:0.08)(t),h=((m)=>m.kind==="via"?80:20)(t),A=Ozt(t);return{x:_V(n-r,VAe,u,h,A,l,d)*i-_V(s-n,VAe,u,h,A,l,d)*i,y:_V(o-a,VAe,u,h,A,l,d)*i-_V(c-o,VAe,u,h,A,l,d)*i}},HHo=(e)=>{if(e.length===0)return null;let t=new Vm(e.length);for(let n of e){let{startNode:o,endNode:i}=n;t.add(Math.min(o.x,i.x),Math.min(o.y,i.y),Math.max(o.x,i.x),Math.max(o.y,i.y))}return t.finish(),{index:t,segments:e}},Gzt=(e)=>{let t=new Map,n=new Map;for(let o of e){let i=n.get(o.z)??[];i.push(o),n.set(o.z,i)}for(let[o,i]of n){let r=HHo(i);r&&t.set(o,r)}return{byLayer:t}},Yzt=(e,t,n,o,i)=>{let r=(a)=>({candidateIndexes:a.index.search(n-i,o-i,n+i,o+i),segments:a.segments});if(t.kind==="point"){let a=e.byLayer.get(t.z);return a?[r(a)]:[]}let s=[];for(let a of e.byLayer.values())s.push(r(a));return s},OHo=(e)=>{let t=[];for(let n=0;n<e.length;n+=1){let o=e[n];if(!o)continue;let i=new Set;for(let r=0;r<o.route.length-1;r+=1){let s=o.route[r],a=o.route[r+1];if(!s||!a)continue;if(s.z===a.z||!RV(s,a))continue;let c=[r,r+1];for(let u=r-1;u>=0;u-=1){let h=o.route[u];if(!h||!RV(h,s))break;c.push(u)}for(let u=r+2;u<o.route.length;u+=1){let h=o.route[u];if(!h||!RV(h,s))break;c.push(u)}let l=[...new Set(c)].sort((u,h)=>u-h),d=!1;for(let u of l)if(i.has(u)){d=!0;break}if(!d){for(let u of l)i.add(u);t.push({routeIndex:n,rootConnectionName:Nzt(o),pointIndexes:l,x:s.x,y:s.y,radius:(o.viaDiameter??0.3)/2,movable:!Qzt(o.route.length,l)})}}}return t},rke=(e)=>{let{routes:t,via:n,dx:o,dy:i,node:r}=e;if(!n.movable)return!1;n.x+=o,n.y+=i,((a,c)=>{let l=BHe(c,a.radius+Yd);a.x=_U(a.x,l.minX,l.maxX),a.y=_U(a.y,l.minY,l.maxY)})(n,r);let s=t[n.routeIndex];if(!s)return!1;for(let a of n.pointIndexes){let c=s.route[a];c&&(c.x=n.x,c.y=n.y)}return!0},zHo=(e)=>{let{routes:t,node:n,vias:o}=e,i=!1;for(let r=0;r<o.length;r+=1){let s=o[r];if(s)for(let a=r+1;a<o.length;a+=1){let c=o[a];if(!c)continue;let l=s.radius+c.radius+0.1+wHe,d=s.x-c.x,u=s.y-c.y,h=f0(d,u),A=l-h;if(A<=0)continue;let m=1.61803398875*(97*r+13*a),p=h>Yd?d/h:Math.cos(m),g=h>Yd?u/h:Math.sin(m),_=Number(s.movable)+Number(c.movable);if(_===0)continue;let f=Math.min(0.04,A/_);i=rke({routes:t,via:s,dx:p*f,dy:g*f,node:n})||i,i=rke({routes:t,via:c,dx:-p*f,dy:-g*f,node:n})||i}}return i},GHo=(e)=>{let{routes:t,node:n,vias:o,segments:i}=e,r=!1;for(let s=0;s<o.length;s+=1){let a=o[s];if(a?.movable)for(let c of i){if(a.rootConnectionName===c.rootConnectionName)continue;let l=xee(a,c),d=a.x-l.x,u=a.y-l.y,h=f0(d,u),A=a.radius+c.traceRadius+0.1+wHe-h;if(A<=0)continue;let m=c.end.x-c.start.x,p=c.end.y-c.start.y,g=f0(m,p),_=s%2==0?1:-1,f=h>Yd?d/h:g>Yd?-p/g*_:1,y=h>Yd?u/h:g>Yd?m/g*_:0,x=Math.min(0.04,A);r=rke({routes:t,via:a,dx:f*x,dy:y*x,node:n})||r}}return r},x4t=(e)=>{let{routes:t,routeIndex:n,pointIndex:o,dx:i,dy:r,node:s}=e,a=t[n];if(!a||o<=0||o>=a.route.length-1)return!1;let c=((u,h,A=0.001)=>{let m=u[h];if(!m)return[];let p=[h];for(let g=h-1;g>=0;g-=1){let _=u[g];if(!_||!RV(_,m,A))break;p.push(g)}for(let g=h+1;g<u.length;g+=1){let _=u[g];if(!_||!RV(_,m,A))break;p.push(g)}return[...new Set(p)]})(a.route,o);if(Qzt(a.route.length,c))return!1;let l=BHe(s,Yd),d=!1;for(let u of c){let h=a.route[u];h&&(h.x=_U(h.x+i,l.minX,l.maxX),h.y=_U(h.y+r,l.minY,l.maxY),d=!0)}return d},ske=(e)=>{let{routes:t,segment:n,dx:o,dy:i,node:r,t:s}=e,a=1-sL(s),c=sL(s),l=x4t({routes:t,routeIndex:n.routeIndex,pointIndex:n.startIndex,dx:o*a,dy:i*a,node:r}),d=x4t({routes:t,routeIndex:n.routeIndex,pointIndex:n.endIndex,dx:o*c,dy:i*c,node:r});return l||d},Vzt=(e)=>{let{routes:t,node:n,segments:o,movableRouteIndexes:i}=e,r=!1;for(let s=0;s<o.length;s+=1){let a=o[s];if(a)for(let c=s+1;c<o.length;c+=1){let l=o[c];if(!l||a.z!==l.z||a.rootConnectionName===l.rootConnectionName)continue;let d=a.traceRadius+l.traceRadius+0.1+wHe;if(Math.max(a.start.x,a.end.x)+d<=Math.min(l.start.x,l.end.x)||Math.max(l.start.x,l.end.x)+d<=Math.min(a.start.x,a.end.x)||Math.max(a.start.y,a.end.y)+d<=Math.min(l.start.y,l.end.y)||Math.max(l.start.y,l.end.y)+d<=Math.min(a.start.y,a.end.y))continue;let[u]=X8(a,l);if(!u)continue;let h=u.leftPoint.x-u.rightPoint.x,A=u.leftPoint.y-u.rightPoint.y,m=f0(h,A),p=d-m;if(p<=0)continue;let g=!i||i.has(a.routeIndex),_=!i||i.has(l.routeIndex),f=Number(g)+Number(_);if(f===0)continue;let y=a.end.x-a.start.x,x=a.end.y-a.start.y,C=f0(y,x),I=(s+c)%2==0?1:-1,b=m>Yd?h/m:C>Yd?-x/C*I:1,P=m>Yd?A/m:C>Yd?y/C*I:0,E=Math.min(0.025,p/f);g&&(r=ske({routes:t,segment:a,dx:b*E,dy:P*E,node:n,t:u.leftT})||r),_&&(r=ske({routes:t,segment:l,dx:-b*E,dy:-P*E,node:n,t:u.rightT})||r)}}return r},C4t=(e,t)=>{for(let n=0;n<10;n+=1){let o=OHo(t),i=S6(t),r=zHo({routes:t,node:e,vias:o}),s=GHo({routes:t,node:e,vias:o,segments:i}),a=Vzt({routes:t,node:e,segments:i});if(!r&&!s&&!a)break}for(let n of t)n.vias=bte(n);return t},YHo=(e,t,n)=>{for(let o=0;o<10;o+=1)if(!Vzt({routes:t,node:e,segments:S6(t),movableRouteIndexes:n}))break;for(let o of n){let i=t[o];i&&(i.vias=bte(i))}return t},I4t=(e,t,n,o,i,r=3,s=0.02)=>{for(let a=0;a<r;a+=1){i.fill(0);let c=Gzt(o);for(let l=0;l<n.length;l+=1){let d=n[l];if(!d||d.kind!=="via")continue;let u=d.node;for(let h=l+1;h<n.length;h+=1){let A=n[h];if(!A||A.kind!=="via")continue;if(d.rootConnectionName===A.rootConnectionName)continue;let m=A.node,p=u.x-m.x,g=u.y-m.y;if(Math.abs(p)>=v_e||Math.abs(g)>=v_e)continue;let _=f0(p,g),f=v_e-_;if(f<=0)continue;let y=0,x=0;if(_>Yd){let P=1/_;y=p*P,x=g*P}else{let P=1.61803398875*(1009*a+97*l+13*h);y=Math.cos(P),x=Math.sin(P)}let C=Math.min(s,0.9*f),I=y*C,b=x*C;Tk(d,I,b,i),Tk(A,-I,-b,i)}}for(let l=0;l<n.length;l+=1){let d=n[l];if(!d)continue;let u=d.node,h=Hzt(d),A=Yzt(c,d,u.x,u.y,h);for(let m of A)for(let p of m.candidateIndexes){let g=m.segments[p];if(!g)continue;if(d.rootConnectionName===g.rootConnectionName)continue;let{startNode:_,endNode:f}=g,y=f.x-_.x,x=f.y-_.y,C=y*y+x*x;if(C<=Yd)continue;let I=u.x-_.x,b=u.y-_.y,P=sL((I*y+b*x)/C),E=_.x+y*P,B=_.y+x*P,w=u.x-E,T=u.y-B,Q=f0(w,T),N=h-Q;if(N<=0)continue;let F=1009*a+97*l+13*g.obstacleIndex,H=0,z=0;if(Q>Yd){let V=1/Q;H=w*V,z=T*V}else{let V=-x,W=y,j=f0(V,W);if(j>Yd){let q=(F%2==0?1:-1)/j;H=V*q,z=W*q}else{let q=1.61803398875*F;H=Math.cos(q),z=Math.sin(q)}}let Y=Math.min(LHo(d,s),N*kHo(d)),U=H*Y,X=z*Y;Tk(d,U,X,i),zzt(g,-U,-X,i,P)}}for(let l=0;l<t.length;l+=1){let d=t[l];if(d)for(let u=0;u<d.nodes.length;u+=1){let h=d.nodes[u];if(!h||h.fixed)continue;let A=2*h.forceIndex,m=i[A]??0,p=i[A+1]??0,g=f0(m,p);if(g>s&&g>Yd){let _=s/g;m*=_,p*=_}h.x+=m,h.y+=p}}oke(t,e)}},b4t=(e,t,n,o)=>{let{mutableRoutes:i,totalNodeCount:r}=((A)=>{let m=0;return{mutableRoutes:A.map((p)=>{let g=[],_=new Int32Array(p.route.length);_.fill(-1);for(let f=0;f<p.route.length;f+=1){let y=p.route[f];if(!y)continue;let x=p.route[f-1],C=g.at(-1),I=g.length-1;C&&x&&x.x===y.x&&x.y===y.y?(x.z!==y.z&&(C.boundaryPadding=Math.max(C.boundaryPadding,p.viaDiameter/2)),C.pointIndexes.push(f),C.fixed||=tke(p.route.length,f),_[f]=I):(g.push({x:y.x,y:y.y,originalX:y.x,originalY:y.y,boundaryPadding:0,pointIndexes:[f],fixed:tke(p.route.length,f),forceIndex:m}),_[f]=g.length-1,m+=1)}return{route:p,rootConnectionName:p.rootConnectionName??p.connectionName,nodes:g,pointNodeIndexes:_}}),totalNodeCount:m}})(t),s=((A)=>{let m=[];for(let p=0;p<A.length;p+=1){let g=A[p];if(g)for(let _=0;_<g.nodes.length;_+=1){let f=g.nodes[_],y=f?.pointIndexes[0],x=y===void 0?void 0:g.route.route[y];f&&x&&(f.pointIndexes.length>1?m.push({kind:"via",routeIndex:p,rootConnectionName:g.rootConnectionName,node:f,fixed:f.fixed}):m.push({kind:"point",routeIndex:p,rootConnectionName:g.rootConnectionName,node:f,z:x.z,fixed:f.fixed}))}}return m})(i),a=((A)=>{let m=[];for(let p=0;p<A.length;p+=1){let g=A[p];if(g)for(let _=0;_<g.nodes.length-1;_+=1){let f=g.nodes[_],y=g.nodes[_+1],x=f?.pointIndexes[0],C=x===void 0?void 0:g.route.route[x];f&&y&&C&&m.push({obstacleIndex:m.length,rootConnectionName:g.rootConnectionName,z:C.z,startNode:f,endNode:y})}}return m})(i),c=new Float64Array(2*r),l=new Float64Array(2*r),d=o?.includeForceVectors??!0;oke(i,e);let u=[];for(let A=0;A<n;A+=1){let m=n<=1?0:A/Math.max(n-1,1),p=0.25+0.75*(1-m),g=1-m,_=d&&A===n-1,f=_?new Float64Array(2*s.length):void 0;c.fill(0);for(let x=0;x<s.length;x+=1){let C=s[x];if(!C||C.kind!=="via")continue;let I=C.node;for(let b=x+1;b<s.length;b+=1){let P=s[b];if(!P||P.kind!=="via")continue;if(C.rootConnectionName===P.rootConnectionName)continue;let E=P.node,B=I.x-E.x,w=I.y-E.y;if(Math.abs(B)>=nke||Math.abs(w)>=nke)continue;let T=f0(B,w),Q=0,N=0;if(T>Yd){let Y=1/T;Q=B*Y,N=w*Y}else{let Y=1.61803398875*(97*x+13*b);Q=Math.cos(Y),N=Math.sin(Y)}let F=_V(T,0.034,0.08,18)*p;if(F<=0)continue;let H=Q*F,z=N*F;Tk(C,H,z,c,f,x),Tk(P,-H,-z,c,f,b)}}let y=Gzt(a);for(let x=0;x<s.length;x+=1){let C=s[x];if(!C)continue;let I=C.node,b=RHo(C),P=Yzt(y,C,I.x,I.y,b);for(let E of P)for(let B of E.candidateIndexes){let w=E.segments[B];if(!w)continue;if(C.rootConnectionName===w.rootConnectionName)continue;let{startNode:T,endNode:Q}=w,N=Q.x-T.x,F=Q.y-T.y,H=N*N+F*F;if(H<=Yd)continue;let z=I.x-T.x,Y=I.y-T.y,U=sL((z*N+Y*F)/H),X=T.x+N*U,V=T.y+F*U,W=I.x-X,j=I.y-V,q=f0(W,j),ne=97*x+13*w.obstacleIndex,ce=0,oe=0;if(q>Yd){let se=1/q;ce=W*se,oe=j*se}else{let se=-F,le=N,he=f0(se,le);if(he>Yd){let ue=(ne%2==0?1:-1)/he;ce=se*ue,oe=le*ue}else{let ue=1.61803398875*ne;ce=Math.cos(ue),oe=Math.sin(ue)}}let ie=_V(q,QHo(C),0.08,18,Ozt(C),Hzt(C),b)*p;if(ie<=0)continue;let J=ce*ie,ee=oe*ie;Tk(C,J,ee,c,f,x),zzt(w,-J,-ee,c,U)}}_&&(u=Array(s.length));for(let x=0;x<s.length;x+=1){let C=s[x];if(!C)continue;let I=C.node,b=FHo(e,C,I.x,I.y,p);if(Tk(C,b.x,b.y,c,f,x),_&&f){let P=2*x;u[x]={kind:C.kind,routeIndex:C.routeIndex,rootConnectionName:C.rootConnectionName,x:I.x,y:I.y,dx:f[P]??0,dy:f[P+1]??0}}}for(let x=0;x<i.length;x+=1){let C=i[x];if(!C)continue;let I=C.nodes.length-2;for(let b=0;b<C.nodes.length;b+=1){let P=C.nodes[b];if(!P||P.fixed)continue;let E=2*P.forceIndex,B=(c[E]??0)+0.14*(P.originalX-P.x),w=(c[E+1]??0)+0.14*(P.originalY-P.y),T=0,Q=0,N=0,F=0,H=C.nodes[b-1],z=C.nodes[b+1];if(H||z){let W=0,j=0,q=0;if(H&&(W+=H.x,j+=H.y,q+=1),z&&(W+=z.x,j+=z.y,q+=1),q>0){let ne=1/q;B+=0.22*(W*ne-P.x),w+=0.22*(j*ne-P.y)}}if(H&&z&&g>0){let W=RNe(z,H),j=f4t(W,W);if(j>Yd){let q=sL(f4t(RNe(P,H),W)/j),ne=wHo(H,z,q),ce=Lzt(kzt(RNe(ne,P),0.55*g),0.02*g);T=ce.x,Q=ce.y}}if(g>0){if(b===1&&H?.fixed){let W=y4t(H,P,e,g);N+=W.x,F+=W.y}if(b===I&&z?.fixed){let W=y4t(z,P,e,g);N+=W.x,F+=W.y}}let Y=0.85*B*p,U=0.85*w*p,X=f0(Y,U),V=0.012*p;if(X>V&&X>Yd){let W=V/X;Y*=W,U*=W}P.x+=Y+T+N,P.y+=U+Q+F}}oke(i,e),I4t(e,i,s,a,l,3,0.02)}return I4t(e,i,s,a,l,8,0.03),{routes:((A)=>A.map(({route:m,nodes:p,pointNodeIndexes:g})=>{let _=m.route.map((y,x)=>{let C=g[x]??-1,I=C>=0?p[C]:void 0;return I?{...y,x:g4t(I.x),y:g4t(I.y)}:y}),f={...m,route:_,vias:[]};return f.vias=bte(f),f}))(i),forceVectors:u,stepsCompleted:n}},ine=class extends vHo{sampleEntries;originalHdRoutes;originalNodeWithPortPoints;colorMap;totalStepsPerNode;nodeAssignmentMargin;improvedRoutesByIndex=new Map;activeSampleIndex=0;latestVisualization={};constructor(e){super(),this.originalHdRoutes=e.hdRoutes,this.originalNodeWithPortPoints=e.nodeWithPortPoints,this.colorMap=e.colorMap??{},this.totalStepsPerNode=e.totalStepsPerNode??60,this.nodeAssignmentMargin=e.nodeAssignmentMargin??0.2;let t=new Map;for(let n=0;n<e.hdRoutes.length;n++){let o=DHo(e.hdRoutes[n],e.nodeWithPortPoints,this.nodeAssignmentMargin);if(o===-1)continue;let i=t.get(o)??[];i.push(n),t.set(o,i)}this.sampleEntries=Array.from(t.entries()).map(([n,o])=>({node:e.nodeWithPortPoints[n],routeIndexes:o})),this.MAX_ITERATIONS=Math.max(10*this.sampleEntries.length,1000),this.stats={nodeAssignmentMargin:this.nodeAssignmentMargin,sampleCount:this.sampleEntries.length,improvedNodeCount:0,improvedRouteCount:0,totalStepsPerNode:this.totalStepsPerNode}}getSolverName(){return"HighDensityForceImproveSolver"}getConstructorParams(){return[{nodeWithPortPoints:this.originalNodeWithPortPoints,hdRoutes:this.originalHdRoutes,totalStepsPerNode:this.totalStepsPerNode,nodeAssignmentMargin:this.nodeAssignmentMargin,colorMap:this.colorMap}]}_step(){let e=this.sampleEntries[this.activeSampleIndex];if(!e)return void(this.solved=!0);let t=Fzt(e.node),n=e.routeIndexes.map((s)=>this.originalHdRoutes[s]),o=b4t(t,n,this.totalStepsPerNode,{includeForceVectors:!0});C4t(e.node,o.routes);let i=A4t(n,o.routes),r=i.length===0?o:b4t(t,((s,a)=>{let{routes:c,node:l,selectors:d}=s,u=structuredClone(c),h=S6(c),A=Cee(h),m=d.flatMap((p)=>{let g=A[p.leftRouteIndex]?.[p.leftStartPointIndex],_=A[p.rightRouteIndex]?.[p.rightStartPointIndex];if(!g||!_)return[];let[f]=X8(g,_);if(!f)return[];let y=f.leftPoint.x-f.rightPoint.x,x=f.leftPoint.y-f.rightPoint.y,C=f0(y,x);return C<=SE?[]:[{selector:p,directionX:y/C,directionY:x/C,requiredDistance:g.traceRadius+_.traceRadius+0.015}]});for(let p=0;p<3;p+=1){let g=S6(u),_=Cee(g);for(let f of m){let y=_[f.selector.leftRouteIndex]?.[f.selector.leftStartPointIndex],x=_[f.selector.rightRouteIndex]?.[f.selector.rightStartPointIndex];if(!y||!x)continue;let[C]=X8(y,x);if(!C)continue;let I=(C.leftPoint.x-C.rightPoint.x)*f.directionX+(C.leftPoint.y-C.rightPoint.y)*f.directionY,b=f.requiredDistance-I;if(b<=0)continue;let P=Math.min(0.025,b/2);a({routes:u,segment:y,dx:f.directionX*P,dy:f.directionY*P,node:l,t:C.leftT}),a({routes:u,segment:x,dx:-f.directionX*P,dy:-f.directionY*P,node:l,t:C.rightT})}}for(let p of u)p.vias=bte(p);return u})({routes:n,node:e.node,selectors:i},ske),this.totalStepsPerNode,{includeForceVectors:!0});if(r!==o){C4t(e.node,r.routes);let s=A4t(n,r.routes);if(s.length>0){let a=((c,l)=>{let{originalRoutes:d,guardedRoutes:u,node:h,crossingSelectors:A,protectedSelectors:m}=c,p=Cee(S6(d)),g=Cee(S6(u)),_=NNe(u),f=m.map(({leftRouteIndex:x,rightRouteIndex:C})=>Rzt(x,C)),y=BHe(h,SE);for(let x of A){let C=g[x.leftRouteIndex]?.[x.leftStartPointIndex],I=g[x.rightRouteIndex]?.[x.rightStartPointIndex];if(!C||!I)continue;let[b]=X8(C,I);if(!(!b||f0(b.leftPoint.x-b.rightPoint.x,b.leftPoint.y-b.rightPoint.y)>SE||b.leftT<=SE||b.leftT>=0.999999||b.rightT<=SE||b.rightT>=0.999999))for(let P of["right","left"]){let E=P==="left"?x.leftRouteIndex:x.rightRouteIndex,B=P==="left"?x.leftStartPointIndex:x.rightStartPointIndex,w=P==="left"?x.rightRouteIndex:x.leftRouteIndex,T=P==="left"?x.rightStartPointIndex:x.leftStartPointIndex,Q=d[E],N=u[E],F=p[w]?.[T],H=g[w]?.[T];if(!(Q&&N&&F&&H))continue;let z=Q.route[B]?.z,Y=[];for(let U=B-2;U<=B+3;U+=1){let X=Q.route[U];!X||U<=0||U>=Q.route.length-1||X.z!==z||[Q.route[U-1],Q.route[U+1]].some((V)=>V&&V.z!==X.z)||Y.push(U)}if(Y.length!==0)for(let[U,X]of[[F.start,H.start],[F.end,H.end]])for(let V of[1.51,1.25,1.75,2]){let W=[...u],j=structuredClone(N);W[E]=j;let q=!0;for(let ie of Y){let J=Q.route[ie],ee=j.route[ie];if(!J||!ee)continue;let se=X.x+(J.x-U.x)*V,le=X.y+(J.y-U.y)*V;if(se<=y.minX||se>=y.maxX||le<=y.minY||le>=y.maxY){q=!1;break}ee.x=se,ee.y=le}if(!q)continue;j.vias=bte(j);let ne=W,ce=NNe(ne),oe=new Set;for(let[ie,J]of ce)P_e(_,[ie,J])||(ie===E&&J!==E?oe.add(J):J===E&&ie!==E&&oe.add(ie));if(oe.size>0){let ie=l(h,structuredClone(W),oe),J=NNe(ie);f.every((ee)=>!P_e(J,ee))&&J.length<ce.length&&(ne=ie,ce=J)}if(f.every((ie)=>!P_e(ce,ie))&&ce.length<_.length)return ne}}}})({originalRoutes:n,guardedRoutes:r.routes,node:e.node,crossingSelectors:s,protectedSelectors:[...i,...s]},YHo);a&&(r={...r,routes:a})}}for(let s=0;s<e.routeIndexes.length;s++)this.improvedRoutesByIndex.set(e.routeIndexes[s],r.routes[s]);this.latestVisualization=S4t({node:e.node,routes:r.routes,forceVectors:r.forceVectors,colorMap:this.colorMap}),this.activeSampleIndex+=1,this.stats={nodeAssignmentMargin:this.nodeAssignmentMargin,sampleCount:this.sampleEntries.length,improvedNodeCount:this.activeSampleIndex,improvedRouteCount:this.improvedRoutesByIndex.size,totalStepsPerNode:this.totalStepsPerNode},this.activeSampleIndex>=this.sampleEntries.length&&(this.solved=!0)}getOutput(){return this.originalHdRoutes.map((e,t)=>this.improvedRoutesByIndex.get(t)??e)}visualize(){return this.solved?S4t({routes:this.getOutput(),colorMap:this.colorMap}):this.latestVisualization}},S4t=(e)=>{let t=[],n=[],o=[];e.node&&o.push({center:e.node.center,width:e.node.width,height:e.node.height,stroke:"rgba(14,165,233,0.7)",fill:"rgba(14,165,233,0.04)",label:e.node.capacityMeshNodeId});for(let i of e.routes){let r=e.colorMap?.[i.connectionName]??"#0ea5e9";for(let s=0;s<i.route.length-1;s++){let a=i.route[s],c=i.route[s+1];a.z===c.z&&t.push({points:[{x:a.x,y:a.y},{x:c.x,y:c.y}],strokeColor:a.z===0?r:MHo(r,0.5),strokeWidth:i.traceThickness,layer:`z${a.z}`,strokeDash:a.z!==0?[0.1,0.3]:void 0})}for(let s of i.vias)n.push({center:{x:s.x,y:s.y},radius:i.viaDiameter/2,stroke:r,fill:"rgba(14,165,233,0.12)"})}for(let i of e.forceVectors??[])t.push({points:[{x:i.x,y:i.y},{x:i.x+5*i.dx,y:i.y+5*i.dy}],strokeColor:"rgba(244,63,94,0.85)",strokeWidth:0.06,strokeDash:[0.08,0.08]});return{lines:t,circles:n,rects:o}},Tfe=class extends Oi{constructor(e,t,n=Number.POSITIVE_INFINITY,o=0.010000000000000002){super(),this.nodes=e,this.maxNodeDimension=t,this.maxNodeRatio=n,this.minNodeArea=o,this.outputNodes=[]}nodes;maxNodeDimension;maxNodeRatio;minNodeArea;outputNodes;getSolverName(){return"NodeDimensionSubdivisionSolver"}getSubdivisionGrid(e){let t=Number.isFinite(this.maxNodeDimension)&&this.maxNodeDimension>0,n=Number.isFinite(this.maxNodeRatio)&&this.maxNodeRatio>0,o=t?Math.max(1,Math.ceil(e.width/this.maxNodeDimension)):1,i=t?Math.max(1,Math.ceil(e.height/this.maxNodeDimension)):1;if(n&&e.width>0&&e.height>0)for(;;){let r=e.width/o,s=e.height/i;if((r>=s?r/s:s/r)<=this.maxNodeRatio)break;r>=s?o++:i++}return{cols:o,rows:i}}shouldRemoveNode(e){let t=Number.isFinite(this.minNodeArea)&&this.minNodeArea>0;if(!Number.isFinite(e.width)||!Number.isFinite(e.height))return!0;if(!t||e.width*e.height>=this.minNodeArea)return!1;if(Math.min(e.width,e.height)<0.002)return!0;if(e._containsTarget)return!1;let n=0;for(let o of this.nodes)if(o.capacityMeshNodeId!==e.capacityMeshNodeId&&e.availableZ.some((i)=>o.availableZ.includes(i))&&Kge(e,o)){if(o._containsTarget)return!1;if(n++,n>=2)return!1}return!0}subdivideNode(e){if(this.shouldRemoveNode(e))return[];let{cols:t,rows:n}=this.getSubdivisionGrid(e);if(t===1&&n===1)return[e];let o=e.width/t,i=e.height/n,r=e.center.x-e.width/2,s=e.center.y-e.height/2,a=[];for(let c=0;c<n;c++)for(let l=0;l<t;l++)a.push({...e,capacityMeshNodeId:`${e.capacityMeshNodeId}__sub_${c}_${l}`,center:{x:r+o*(l+0.5),y:s+i*(c+0.5)},width:o,height:i,availableZ:[...e.availableZ]});return a}_step(){let e=this.nodes.length,t=0,n=0,o=0;for(let i of this.nodes){let r=!Number.isFinite(i.width)||!Number.isFinite(i.height),s=this.subdivideNode(i);s.length!==0?(s.length>1&&t++,this.outputNodes.push(...s)):r?o++:n++}this.stats={inputNodeCount:e,outputNodeCount:this.outputNodes.length,subdividedNodeCount:t,removedSmallNodeCount:n,removedInvalidNodeCount:o,maxNodeDimension:this.maxNodeDimension,maxNodeRatio:this.maxNodeRatio,minNodeArea:this.minNodeArea},this.solved=!0}visualize(){return{rects:this.outputNodes.map((e)=>({center:e.center,width:e.width,height:e.height,label:`${e.capacityMeshNodeId}
${e.width.toFixed(2)}x${e.height.toFixed(2)}`,layer:`z${e.availableZ.join(",")}`,fill:"rgba(0, 200, 255, 0.08)",stroke:"rgba(0, 120, 180, 0.5)"}))}}},gS=(e)=>{let t=[...new Set(e.filter((n)=>typeof n=="number"&&Number.isInteger(n)&&n>=0))].sort((n,o)=>n-o);if(t.length!==0)return`z${t.join(",")}`},THe=(e)=>{let t=[];for(let n=0;n<31;n++)e&1<<n&&t.push(n);return t},K8=(e)=>typeof e=="object"&&e!==null,Uzt=(e)=>K8(e)?{...e}:e===void 0?{}:{value:e},Dk=(e,t)=>{let n=e.topology.regionMetadata?.[t];if(K8(n)){if(typeof n.serializedRegionId=="string")return n.serializedRegionId;if(typeof n.regionId=="string")return n.regionId;if(typeof n.capacityMeshNodeId=="string")return n.capacityMeshNodeId}return`region-${t}`},gV=(e,t)=>{let n=e.topology.portMetadata?.[t];if(K8(n)){if(typeof n.serializedPortId=="string")return n.serializedPortId;if(typeof n.portId=="string")return(o=n.portId).includes("::")?o.slice(0,o.indexOf("::")):o}var o;return`port-${t}`},Wzt=(e,t)=>{let n=e.problem.routeMetadata?.[t];return K8(n)&&typeof n.connectionId=="string"?n.connectionId:`route-${t}`},VHo=(e,t)=>{let n=Uzt(e.topology.regionMetadata?.[t]);if(K8(n.center)||(n.center={x:e.topology.regionCenterX[t],y:e.topology.regionCenterY[t]}),typeof n.width!="number"&&(n.width=e.topology.regionWidth[t]),typeof n.height!="number"&&(n.height=e.topology.regionHeight[t]),!Array.isArray(n.availableZ)){let o=e.topology.regionAvailableZMask?.[t]??0;o!==0&&(n.availableZ=THe(o))}return n.layer=gS(Array.isArray(n.availableZ)?n.availableZ:[])??gS((e.topology.regionIncidentPorts[t]??[]).map((o)=>e.topology.portZ[o]))??"z0",n},UHo=(e,t)=>{let n=Uzt(e.topology.portMetadata?.[t]);return typeof n.x!="number"&&(n.x=e.topology.portX[t]),typeof n.y!="number"&&(n.y=e.topology.portY[t]),typeof n.z!="number"&&(n.z=e.topology.portZ[t]),n.layer=gS([e.topology.portZ[t]])??"z0",n},P4t=(e,t,n)=>{let o=(e.topology.incidentPortRegion[t]??[]).find((i)=>i!==n);if(o===void 0)throw Error(`Port ${t} is not incident to a region outside route region ${n}`);return o},WHo=(e,t,n)=>{let{orderedPortIds:o,orderedRegionIds:i}=((u,h,A)=>{if(A.length===0)throw Error(`Route ${h} has no solved segments`);let m=u.problem.routeStartPort[h],p=u.problem.routeEndPort[h],g=m===p,_=new Map;A.forEach((C,I)=>{let b={...C,segmentIndex:I},P=_.get(C.fromPortId)??[];P.push(b),_.set(C.fromPortId,P);let E=_.get(C.toPortId)??[];E.push(b),_.set(C.toPortId,E)});let f=[m],y=[],x=(C,I,b)=>{if(C===p&&(!g||I.size===A.length))return!0;for(let P of _.get(C)??[]){if(I.has(P.segmentIndex))continue;let E=P.fromPortId===C?P.toPortId:P.fromPortId,B=g&&E===p&&I.size+1===A.length;if(b.has(E)&&!B)continue;I.add(P.segmentIndex);let w=!b.has(E);if(w&&b.add(E),y.push(P.regionId),f.push(E),x(E,I,b))return!0;f.pop(),y.pop(),w&&b.delete(E),I.delete(P.segmentIndex)}return!1};if(!x(m,new Set,new Set([m])))throw Error(`Route ${h} is not a single ordered path from ${m} to ${p}`);return{orderedPortIds:f,orderedRegionIds:y}})(e,t,n),r=i[0],s=i[i.length-1];if(r===void 0||s===void 0)throw Error(`Route ${t} could not determine endpoint regions`);let a=Dk(e,P4t(e,o[0],r)),c=Dk(e,P4t(e,o[o.length-1],s)),l=((u,h,A,m)=>{let p=u.problem.routeMetadata?.[h];return{connectionId:Wzt(u,h),startRegionId:(K8(p)&&typeof p.startRegionId=="string"?p.startRegionId:void 0)??A,endRegionId:(K8(p)&&typeof p.endRegionId=="string"?p.endRegionId:void 0)??m,mutuallyConnectedNetworkId:(K8(p)&&typeof p.mutuallyConnectedNetworkId=="string"?p.mutuallyConnectedNetworkId:void 0)??`net-${u.problem.routeNet[h]}`}})(e,t,a,c),d=o.map((u,h)=>{let A={portId:gV(e,u),g:h,h:0,f:h,hops:h,ripRequired:!1,nextRegionId:h<i.length?Dk(e,i[h]):l.endRegionId};return h>0&&(A.lastPortId=gV(e,o[h-1]),A.lastRegionId=Dk(e,i[h-1])),A});return{connection:l,solvedRoute:{connection:l,path:d,requiredRip:!1}}},XHo=(e)=>{if(!e.solved||e.failed)throw Error("convertToSerializedHyperGraph requires a solved, non-failed solver");let{topology:t}=e,n=((s)=>{let a=Array.from({length:s.problem.routeCount},()=>[]);return s.state.regionSegments.forEach((c,l)=>{for(let[d,u,h]of c)a[d].push({regionId:l,fromPortId:u,toPortId:h})}),a})(e),o=Array.from({length:t.regionCount},(s,a)=>{let c=e.state.regionSegments[a].map(([l,d,u])=>({regionPort1Id:gV(e,d),regionPort2Id:gV(e,u),connectionId:Wzt(e,l)}));return{regionId:Dk(e,a),pointIds:t.regionIncidentPorts[a].map((l)=>gV(e,l)),d:VHo(e,a),...c.length>0&&{assignments:c}}}),i=Array.from({length:t.portCount},(s,a)=>{let[c,l]=t.incidentPortRegion[a]??[];if(c===void 0||l===void 0)throw Error(`Port ${a} is missing incident regions`);return{portId:gV(e,a),region1Id:Dk(e,c),region2Id:Dk(e,l),d:UHo(e,a)}}),r=n.map((s,a)=>WHo(e,a,s));return{regions:o,ports:i,connections:r.map(({connection:s})=>s),solvedRoutes:r.map(({solvedRoute:s})=>s)}},Xzt=0.3,Kzt=(e)=>e>0&&!(e&e-1),KHo=(e,t,n,o,i,r=0,s=0.3,a=0)=>(2*t+1*n+1*o)*(s+0.15)**2*(1+i/5)/e+(Kzt(r)?10*t:0)+a*(i/jHo(r))**2*0.010000000000000002/e,jHo=(e)=>{if(e===0)return 2;let t=e>>>0,n=0;for(;t!==0;)n+=1&t,t>>>=1;return n},v4t=(e,t)=>{let{netIds:n,lesserAngles:o,greaterAngles:i,layerMasks:r}=e,{netId:s,lesserAngle:a,greaterAngle:c,layerMask:l}=t,d=0,u=0;for(let h=0;h<n.length;h++){if(s===n[h])continue;(a<o[h]&&o[h]<c)!==(a<i[h]&&i[h]<c)&&((l&r[h])!==0?d++:u++)}t.sameLayerIntersectionCount=d,t.crossingLayerIntersectionCount=u},qHo=(e,t,n)=>{let o=e.routeStartPort[t],i=e.routeEndPort[t],r=new Map;for(let{fromPortId:c,toPortId:l}of n){let d=r.get(c)??new Set;d.add(l),r.set(c,d);let u=r.get(l)??new Set;u.add(c),r.set(l,u)}let s=new Set,a=[o];for(;a.length>0;){let c=a.pop();if(!s.has(c)){s.add(c);for(let l of r.get(c)??[])a.push(l)}}if(!s.has(i))throw Error(`Initial assignments for route ${t} do not connect ${o} to ${i}`);if(n.some(({fromPortId:c,toPortId:l})=>!s.has(c)||!s.has(l)))throw Error(`Initial assignments for route ${t} contain disconnected segments`)},ake=({topology:e,problem:t,state:n,routeSuccessCountByRouteId:o,appendSegmentToRegionCache:i})=>{let r=t.initialAssignments??[];if(r.length===0)return;let s=new Map;for(let c of r){let{routeId:l,regionId:d,fromPortId:u,toPortId:h}=c;if(!Number.isInteger(l)||l<0||l>=t.routeCount)throw Error(`Initial assignment references invalid route ${l}`);if(!Number.isInteger(d)||d<0||d>=e.regionCount)throw Error(`Initial assignment references invalid region ${d}`);for(let m of[u,h]){if(!Number.isInteger(m)||m<0||m>=e.portCount)throw Error(`Initial assignment references invalid port ${m}`);if(!e.incidentPortRegion[m]?.includes(d))throw Error(`Initial assignment port ${m} is not incident to region ${d}`)}let A=s.get(l)??[];A.push(c),s.set(l,A)}for(let[c,l]of s)qHo(t,c,l);let a=new Set(s.keys());for(let{routeId:c,regionId:l,fromPortId:d,toPortId:u}of r){let h=t.routeNet[c];for(let A of[d,u]){let m=n.portAssignment[A];if(m!==-1&&m!==h)throw Error(`Initial assignment port ${A} is assigned to multiple nets`);n.portAssignment[A]=h}n.currentRouteNetId=h,n.regionSegments[l].push([c,d,u]),i(l,d,u)}n.currentRouteNetId=void 0,n.unroutedRoutes=n.unroutedRoutes.filter((c)=>!a.has(c));for(let c of a)o[c]=1;return{initialAssignmentCount:r.length,initiallyRoutedRouteCount:a.size}},jzt=class{constructor(e,t){this.items=e,this.compare=t}items;compare;get length(){return this.items.length}toArray(){return[...this.items]}clear(){this.items.length=0}queue(e){this.items.push(e),this.siftUp(this.items.length-1)}dequeue(){let e=this.items[0];if(e===void 0)return;let t=this.items.pop();return this.items.length>0&&(this.items[0]=t,this.siftDown(0)),e}siftUp(e){let t=e;for(;t>0;){let n=t-1>>1,o=this.items[n],i=this.items[t];if(this.compare(o,i)<=0)return;this.items[n]=i,this.items[t]=o,t=n}}siftDown(e){let t=e,n=this.items.length;for(;;){let o=2*t+1;if(o>=n)return;let i=o+1,r=o;i<n&&this.compare(this.items[i],this.items[o])<0&&(r=i);let s=this.items[t],a=this.items[r];if(this.compare(s,a)<=0)return;this.items[t]=a,this.items[r]=s,t=r}}},qzt=class{constructor(e,t){this.regionCount=e,this.compactHopIndex=t,t&&(this.hopStateGeneration=new Uint32Array(t.hopCapacity),this.hopIndexOrClosed=new Int32Array(t.hopCapacity))}regionCount;compactHopIndex;items=[];indexByHopId=new Map;closedHopIds=new Set;hopStateGeneration;hopIndexOrClosed;currentHopStateGeneration=1;closureEpochToken={};get closureEpoch(){return this.closureEpochToken}get length(){return this.items.length}toArray(){return[...this.items]}clear(){this.closureEpochToken={},this.items.length=0,this.indexByHopId.clear(),this.closedHopIds.clear(),this.hopStateGeneration&&(this.currentHopStateGeneration===4294967295?(this.hopStateGeneration.fill(0),this.currentHopStateGeneration=1):this.currentHopStateGeneration+=1)}isClosedHop(e,t){return this.isClosedHopId(this.getHopIdFromValues(e,t))}isClosedHopId(e){return this.isHopClosed(e)}queue(e){let t=this.getHopId(e);if(this.isHopClosed(t))return;let n=this.getQueuedHopIndex(t);if(n!==void 0){let i=this.items[n];if(e.g>=i.g)return;return this.items[n]=e,void(e.f<=i.f?this.siftUp(n):this.siftDown(n))}let o=this.items.length;this.items.push(e),this.siftUp(o)}dequeue(){let e=this.items[0];if(!e)return;let t=this.getHopId(e);this.closeHop(t);let n=this.items.pop();return this.items.length>0&&(this.items[0]=n,this.siftDown(0)),e}getHopId(e){if(e.hopId!==void 0)return e.hopId;let t=this.getHopIdFromValues(e.portId,e.nextRegionId);return e.hopId=t,t}getHopIdFromValues(e,t){let n=this.compactHopIndex;if(!n)return e*this.regionCount+t;let o=e*n.hopSlotStride;if(n.firstRegionByPortId[e]===t)return o;if(n.secondRegionByPortId[e]===t)return o+1;let i=n.incidentPortRegion[e];for(let r=2;r<(i?.length??0);r++)if(i[r]===t)return o+r;return-(e*this.regionCount+t)-1}getQueuedHopIndex(e){if(e>=0&&this.hopStateGeneration){if(this.hopStateGeneration[e]!==this.currentHopStateGeneration)return;let t=this.hopIndexOrClosed[e];return t>=0?t:void 0}return this.indexByHopId.get(e)}isHopClosed(e){return e>=0&&this.hopStateGeneration?this.hopStateGeneration[e]===this.currentHopStateGeneration&&this.hopIndexOrClosed[e]===-1:this.closedHopIds.has(e)}setQueuedHopIndex(e,t){if(e>=0&&this.hopStateGeneration)return this.hopStateGeneration[e]=this.currentHopStateGeneration,void(this.hopIndexOrClosed[e]=t);this.indexByHopId.set(e,t)}closeHop(e){if(e>=0&&this.hopStateGeneration)return this.hopStateGeneration[e]=this.currentHopStateGeneration,void(this.hopIndexOrClosed[e]=-1);this.indexByHopId.delete(e),this.closedHopIds.add(e)}siftUp(e){let t=this.items[e],n=e;for(;n>0;){let o=n-1>>1,i=this.items[o];if(i.f<=t.f)break;this.items[n]=i,this.setQueuedHopIndex(this.getHopId(i),n),n=o}this.items[n]=t,this.setQueuedHopIndex(this.getHopId(t),n)}siftDown(e){let t=this.items[e],n=e;for(;;){let o=2*n+1;if(o>=this.items.length)break;let i=o+1,r=i<this.items.length&&this.items[i].f<this.items[o].f?i:o,s=this.items[r];if(t.f<=s.f)break;this.items[n]=s,this.setQueuedHopIndex(this.getHopId(s),n),n=r}this.items[n]=t,this.setQueuedHopIndex(this.getHopId(t),n)}},yge=(e,t)=>{let n=[...e],o=((i)=>{let r=i>>>0;return()=>{r+=1831565813;let s=r;return s=Math.imul(s^s>>>15,1|s),s^=s+Math.imul(s^s>>>7,61|s),((s^s>>>14)>>>0)/4294967296}})(t);for(let i=n.length-1;i>0;i--){let r=Math.floor(o()*(i+1));[n[i],n[r]]=[n[r],n[i]]}return n},Jzt=(e,t)=>e.routeMetadata?.[t],JHo=(e)=>e?.simpleRouteConnection?.pointsToConnect?.map(({pointId:t})=>typeof t=="string"?t:null).filter((t)=>t!==null)??[],$Ho=(e,t)=>{let n=Jzt(e,t)?.connectionId;return typeof n=="string"?n:`route-${t}`},ZHo=(e,t,n)=>{let o=e.portEndpointNetIds[n];if(!o)return!1;for(let i of o)if(i!==t)return!0;return!1},E4t=(e,t,n)=>{let o=e.regionNetId[n];return o!==-1&&o!==t},eOo=(e)=>[...new Set(e.routeIds)].filter((t)=>!((n,o)=>{let{topology:i,problem:r,problemSetup:s,portAssignment:a,maxPrecheckHops:c}=n,l=r.routeNet[o],d=r.routeStartPort[o],u=r.routeEndPort[o];if(d===u)return!0;let h=n.getStartingNextRegionId(o,d);if(h===void 0)return!1;let A=[{portId:d,nextRegionId:h}],m=new Set([d*i.regionCount+h]);for(let p=0;p<A.length;p++){let g=A[p];if(!E4t(r,l,g.nextRegionId))for(let _ of i.regionIncidentPorts[g.nextRegionId]??[]){let f=a[_];if(ZHo(s,l,_))continue;if(_===u){if(f!==-1&&f!==l)continue;return!0}if(_===g.portId)continue;if(f!==-1&&f!==l)continue;if(r.portSectionMask[_]===0)continue;let y=i.incidentPortRegion[_]??[],x=y[0]===g.nextRegionId?y[1]:y[0];if(x===void 0||E4t(r,l,x))continue;let C=_*i.regionCount+x;if(!m.has(C)){if(m.size>=c)return!0;m.add(C),A.push({portId:_,nextRegionId:x})}}}return!1})(e,t)).map((t)=>e.getRouteSummary(t)),QNe=(e)=>{let t=Array(e);for(let n=0;n<e;n++)t[n]=n;return t},kNe="rgba(220, 38, 38, 0.98)",M4t="rgba(220, 38, 38, 0.18)",LNe=(...e)=>e.filter((t)=>Boolean(t)).join(`
`),B4t=(e,t)=>{let n=0.005*e.topology.portZ[t];return{x:e.topology.portX[t]+n,y:e.topology.portY[t]+n}},w4t=(e,t)=>gS([e.topology.portZ[t]])??"z0",T4t=(e,t)=>{let n=e.topology.portMetadata?.[t];return`port: ${n?.serializedPortId??n?.portId??`port-${t}`}`},D4t=(e,t)=>`z: ${e.topology.portZ[t]}`,tOo=(e,t)=>((n,o,i)=>{let r=n.topology.portZ[o],s=n.topology.portZ[i];return r===s?`z: ${r}`:`z: ${r} -> ${s}`})(e,e.problem.routeStartPort[t],e.problem.routeEndPort[t]),nOo=(e,t)=>`net: ${e.problem.routeNet[t]}`,xge=0.05,oOo={r:255,g:64,b:64,a:0.72},UAe="rgba(220, 38, 38, 0.98)",N4t="rgba(220, 38, 38, 0.12)",R4t="10 6",Fp=(...e)=>e.filter((t)=>Boolean(t)).join(`
`),$zt=(e)=>Math.min(1,Math.max(0,e)),FNe=(e,t,n)=>Math.round(e+(t-e)*n),Zzt=({r:e,g:t,b:n,a:o})=>`rgba(${e}, ${t}, ${n}, ${o})`,Nk=(e,t)=>{let n=e.problem.routeMetadata?.[t];return n?.connectionId??n?.mutuallyConnectedNetworkId??`route-${t}`},cke=(e)=>typeof e.centerRouteId=="number",lke=(e,t)=>cke(e)?t===e.centerRouteId?1:0.5:1,Q4t=(e,t)=>{let n=e.match(/^(rgba|hsla)\((.*),\s*([0-9]*\.?[0-9]+)\)$/);if(!n)return e;let[,o,i,r]=n,s=$zt(Number(r)*t);return`${o}(${i}, ${Number(s.toFixed(3))})`},Ik=(e,t,n=0.8)=>((o,i,r=0.8)=>{let s=`${o.problem.routeNet[i]}:${Nk(o,i)}`,a=0;for(let c=0;c<s.length;c++)a=17777*s.charCodeAt(c)+((a<<5)-a);return`hsla(${Math.abs(a)%360}, 70%, 50%, ${r})`})(e,t,n*lke(e,t)),k4t=(e,t)=>`net: ${e.problem.routeNet[t]}`,eGt=(e,t)=>{let n=e.topology.regionMetadata?.[t],o=n?.polygon;if(Array.isArray(o)&&o.length>=3){let l=o.map((u)=>u.x),d=o.map((u)=>u.y);return{minX:Math.min(...l),maxX:Math.max(...l),minY:Math.min(...d),maxY:Math.max(...d)}}let i=n?.bounds;if(i&&typeof i.minX=="number"&&typeof i.maxX=="number"&&typeof i.minY=="number"&&typeof i.maxY=="number")return i;let r=e.topology.regionWidth[t],s=e.topology.regionHeight[t],a=e.topology.regionCenterX[t],c=e.topology.regionCenterY[t];return{minX:a-r/2,maxX:a+r/2,minY:c-s/2,maxY:c+s/2}},tGt=(e,t)=>({x:e.topology.regionCenterX[t],y:e.topology.regionCenterY[t]}),nGt=(e,t)=>{let n=e.topology.regionMetadata?.[t],o=Array.isArray(n?.availableZ)?n.availableZ.filter((s)=>typeof s=="number"&&Number.isInteger(s)&&s>=0):[];if(o.length>0)return gS(o)??"z0";let i=THe(e.topology.regionAvailableZMask?.[t]??0);if(i.length>0)return gS(i)??"z0";let r=[...new Set((e.topology.regionIncidentPorts[t]??[]).map((s)=>e.topology.portZ[s]))].sort((s,a)=>s-a);return gS(r)??"z0"},oGt=(e,t)=>{let n=e.state.regionIntersectionCaches[t],o=n?.existingRegionCost??0,i=e.state.regionCongestionCost[t]??0,r=e.problem.regionNetId[t];return Fp(`region: region-${t}`,`net: ${r===-1?"free":`${r}`}`,e.getAdditionalRegionLabel(t),`cost: ${o.toFixed(3)}`,`congestion: ${i.toFixed(3)}`,`same layer X: ${n?.existingSameLayerIntersections??0}`,`trans X: ${n?.existingCrossingLayerIntersections??0}`,`entry exit X: ${n?.existingEntryExitLayerChanges??0}`)},iGt=(e,t)=>{let n=e.topology.regionMetadata?.[t];return n?.isConnectionRegion?{r:255,g:100,b:255,a:0.6}:n?.isThroughJumper?{r:100,g:200,b:100,a:0.5}:n?.isPad?{r:255,g:200,b:100,a:0.5}:n?.layer==="bottom"?{r:52,g:152,b:219,a:0.08}:{r:200,g:200,b:255,a:0.1}},iOo=(e,t)=>{let n=iGt(e,t),o=$zt(e.state.regionIntersectionCaches[t]?.existingRegionCost??0);return Zzt((r=oOo,s=o**0.8,{r:FNe((i=n).r,r.r,s),g:FNe(i.g,r.g,s),b:FNe(i.b,r.b,s),a:Number((i.a+(r.a-i.a)*s).toFixed(3))}));var i,r,s},wI=(e,t)=>{let n=((i,r)=>({x:i.topology.portX[r],y:i.topology.portY[r]}))(e,t),o=0.005*e.topology.portZ[t];return{x:n.x+o,y:n.y+o}},Iee=wI,Sy=(e,t)=>gS([e.topology.portZ[t]])??"z0",fV=(e,t)=>{let n=e.topology.portMetadata?.[t];return`port: ${n?.serializedPortId??n?.portId??`port-${t}`}`},rGt=(e,t,n)=>{if(n!==void 0)return`net: ${e.problem.routeNet[n]}`;let o=e.state.portAssignment[t];if(o>=0)return`net: ${o}`;let i=new Set;for(let r=0;r<e.problem.routeCount;r++)e.problem.routeStartPort[r]!==t&&e.problem.routeEndPort[r]!==t||i.add(e.problem.routeNet[r]);return i.size!==0?`net: ${Array.from(i).sort((r,s)=>r-s).join(", ")}`:void 0},_6=(e,t)=>`z: ${e.topology.portZ[t]}`,sGt=(e,t,n)=>{let o=e.topology.portZ[t],i=e.topology.portZ[n];return o===i?`z: ${o}`:`z: ${o} -> ${i}`},HNe=(e,t)=>sGt(e,e.problem.routeStartPort[t],e.problem.routeEndPort[t]),E_e=(e,t,n)=>Fp(fV(e,t),((o,i)=>{let r=o.topology.incidentPortRegion[i]?.[0],s=o.topology.incidentPortRegion[i]?.[1];return`connects: region-${r??"?"} <-> region-${s??"?"}`})(e,t),rGt(e,t,n)),rOo=(e,t,n,o)=>{let i=e.topology.portZ[n];return i!==e.topology.portZ[o]?{strokeColor:Q4t("rgba(22, 160, 133, 0.95)",lke(e,t)),strokeDash:"2 4 2"}:i>0?{strokeColor:Q4t("rgba(52, 152, 219, 0.95)",lke(e,t)),strokeDash:"3 2"}:{strokeColor:Ik(e,t)}},L4t=(e,t)=>{for(let n=0;n<e.state.regionSegments.length;n++){let o=e.state.regionSegments[n]??[];for(let[i,r,s]of o)t.lines.push({points:[wI(e,r),wI(e,s)],label:Fp(`route: ${Nk(e,i)}`,`region: region-${n}`,sGt(e,r,s)),layer:Sy(e,r),...rOo(e,i,r,s)})}},F4t=(e,t)=>{let n=new Set;for(let o=0;o<e.state.regionSegments.length;o++){let i=e.state.regionSegments[o]??[];for(let[r,s,a]of i)for(let c of[s,a]){let l=`${r}:${c}`;if(n.has(l))continue;n.add(l);let d=wI(e,c);t.points.push({x:d.x,y:d.y,color:Ik(e,r,1),layer:Sy(e,c),label:Fp(`route: ${Nk(e,r)}`,fV(e,c),rGt(e,c,r),_6(e,c))})}}},sOo=(e,t)=>{for(let n=0;n<e.problem.routeCount;n++)if(e.problem.routeStartPort[n]===t||e.problem.routeEndPort[n]===t)return!0;return!1},aOo=(e,t,n)=>{let o=((s,a)=>{let c=new Set;for(let l=0;l<a.length;l++)if(a[l]===1)for(let d of s.topology.incidentPortRegion[l]??[])c.add(d);return c})(e,n);for(let s of o){let a=e.topology.regionMetadata?.[s],c=a?.polygon,l=eGt(e,s),d=tGt(e,s),u=l.maxX-l.minX,h=l.maxY-l.minY,A=nGt(e,s),m=Fp("section region",oGt(e,s));Array.isArray(c)&&c.length>=3?t.polygons.push({points:c,fill:"rgba(245, 158, 11, 0.08)",stroke:"rgba(245, 158, 11, 0.95)",strokeWidth:2,layer:A,label:m}):t.rects.push({center:d,width:Math.max(u-xge,0.05),height:Math.max(h-xge,0.05),fill:"rgba(245, 158, 11, 0.08)",stroke:"rgba(245, 158, 11, 0.95)",layer:A,label:m})}for(let s=0;s<n.length;s++)n[s]===1&&t.circles.push({center:Iee(e,s),radius:0.07,fill:"rgba(251, 191, 36, 0.18)",stroke:"rgba(245, 158, 11, 0.95)",layer:Sy(e,s),label:Fp(E_e(e,s),_6(e,s),"section port")})},Cge=(e,t={})=>{let n={arrows:[],circles:[],infiniteLines:[],lines:[],points:[],polygons:[],rects:[],texts:[],title:"Tiny HyperGraph",coordinateSystem:"cartesian"},o=((a,c)=>{if(!c?.highlightSectionMask)return;let l=c.sectionPortMask??a.problem.portSectionMask;if(l.length!==a.topology.portCount)return;let d=0,u=0;for(let h=0;h<l.length;h++)l[h]===1?d+=1:u+=1;return d!==0&&u!==0?l:void 0})(e,t),i=((a)=>{let c=a.getStaticallyUnroutableRoutes();if(c.length!==0)return new Set(c.map((l)=>l.routeId))})(e);for(let a=0;a<e.topology.regionCount;a++){let c=e.topology.regionMetadata?.[a],l=c?.polygon,d=eGt(e,a),u=tGt(e,a),h=d.maxX-d.minX,A=d.maxY-d.minY,m=nGt(e,a),p=Zzt(iGt(e,a));Array.isArray(l)&&l.length>=3?n.polygons.push({points:l,fill:p,layer:m}):n.rects.push({center:u,width:Math.max(h-xge,0.05),height:Math.max(A-xge,0.05),fill:iOo(e,a),layer:m,label:oGt(e,a)})}if(((a,c,l)=>{for(let d=0;d<a.problem.routeCount;d++){if(l&&!l.has(d))continue;let u=a.problem.routeStartPort[d],h=a.problem.routeEndPort[d],A=wI(a,u),m=wI(a,h),p=Ik(a,d),g=Nk(a,d),_=k4t(a,d);c.points.push({x:A.x,y:A.y,color:p,layer:Sy(a,u),label:Fp(`route: ${g}`,_,"endpoint: start",fV(a,u),_6(a,u))}),c.points.push({x:m.x,y:m.y,color:p,layer:Sy(a,h),label:Fp(`route: ${g}`,_,"endpoint: end",fV(a,h),_6(a,h))})}})(e,n,i),e.iterations===0){for(let a of n.polygons)a.stroke="rgba(128, 128, 128, 0.5)";for(let a of n.rects)a.stroke="rgba(128, 128, 128, 0.5)"}if(e.iterations===0){for(let a=0;a<e.topology.portCount;a++){let c=o?.[a]===1;t.showOnlySectionPortsOnIdle&&!c||n.circles.push({center:Iee(e,a),radius:0.05,fill:e.topology.portZ[a]>0?"rgba(52, 152, 219, 0.55)":"rgba(128, 128, 128, 0.5)",layer:Sy(e,a),label:Fp(E_e(e,a),_6(e,a))})}if(i)((a,c)=>{for(let l of a.getStaticallyUnroutableRoutes()){let{routeId:d,connectionId:u,startPortId:h,endPortId:A}=l,m=B4t(a,h),p=B4t(a,A),g=LNe(`static reachability failed: ${u}`,nOo(a,d),l.startRegionId?`startRegionId: ${l.startRegionId}`:void 0,l.endRegionId?`endRegionId: ${l.endRegionId}`:void 0,l.pointIds.length>=2?`points: ${l.pointIds.join(" -> ")}`:void 0,tOo(a,d));c.lines.push({points:[m,p],strokeColor:kNe,strokeDash:"8 4",label:g}),c.circles.push({center:m,radius:0.12,fill:M4t,stroke:kNe,layer:w4t(a,h),label:LNe(g,"endpoint: start",T4t(a,h),D4t(a,h))}),c.circles.push({center:p,radius:0.12,fill:M4t,stroke:kNe,layer:w4t(a,A),label:LNe(g,"endpoint: end",T4t(a,A),D4t(a,A))})}})(e,n);else{let a=new Set;for(let c of e.state.regionSegments)for(let[l]of c)a.add(l);if(a.size>0&&(L4t(e,n),F4t(e,n)),t.showInitialRouteHints!==!1){let c=new Set(e.state.unroutedRoutes);e.state.currentRouteId!==void 0&&c.add(e.state.currentRouteId),((l,d,u)=>{for(let h=0;h<l.problem.routeCount;h++){if(u&&!u.has(h))continue;let A=l.problem.routeStartPort[h],m=l.problem.routeEndPort[h],p=wI(l,A),g=wI(l,m),_={x:(p.x+g.x)/2,y:(p.y+g.y)/2};d.lines.push({points:[p,g],strokeColor:Ik(l,h),strokeDash:"3 3",layer:Sy(l,A),label:Fp(Nk(l,h),HNe(l,h))}),d.points.push({x:_.x,y:_.y,color:Ik(l,h,1),layer:Sy(l,A),label:Fp(Nk(l,h),HNe(l,h))})}})(e,n,c)}}}else L4t(e,n),F4t(e,n),((a)=>cke(a)&&a.showUnassignedPortsInVisualization===!0)(e)&&((a,c)=>{for(let l=0;l<a.topology.portCount;l++)a.state.portAssignment[l]>=0||sOo(a,l)||c.circles.push({center:Iee(a,l),radius:0.04,fill:a.topology.portZ[l]>0?"rgba(52, 152, 219, 0.2)":"rgba(128, 128, 128, 0.2)",stroke:a.topology.portZ[l]>0?"rgba(52, 152, 219, 0.6)":"rgba(128, 128, 128, 0.6)",layer:Sy(a,l),label:Fp(E_e(a,l),_6(a,l),"state: unassigned")})})(e,n),cke(e)||(((a,c)=>{let l=a.state.currentRouteId;if(l===void 0||a.solved)return;let d=a.problem.routeStartPort[l],u=a.problem.routeEndPort[l],h=wI(a,d),A=wI(a,u),m=Ik(a,l),p=Nk(a,l);c.lines.push({points:[h,A],strokeColor:m,strokeDash:"10 5",label:Fp(p,HNe(a,l))})})(e,n),((a,c)=>{if(a.solved)return;let l=a.state.currentRouteId,d=a.state.candidateQueue.toArray().sort((m,p)=>m.f-p.f).slice(0,10);for(let m=0;m<d.length;m++){let p=d[m],g=wI(a,p.portId),_=m===0;c.points.push({x:g.x,y:g.y,color:_?"green":"rgba(128, 128, 128, 0.25)",layer:Sy(a,p.portId),label:Fp(E_e(a,p.portId,l),_6(a,p.portId),`g: ${p.g.toFixed(2)}`,`h: ${p.h.toFixed(2)}`,`f: ${p.f.toFixed(2)}`)})}let u=d[0];if(!u)return;let h=[],A=u;for(;A;)h.unshift(wI(a,A.portId)),A=A.prevCandidate;h.length>1&&c.lines.push({points:h,strokeColor:l!==void 0?Ik(a,l):"rgba(0, 160, 120, 0.9)"})})(e,n));o&&aOo(e,n,o),((a,c)=>{if(a.failed)for(let l of a.getNeverSuccessfullyRoutedRoutes()){let{routeId:d,connectionId:u,attempts:h,startPortId:A,endPortId:m}=l,p=k4t(a,d),g=Iee(a,A),_=Iee(a,m),f=Fp(`never routed: ${u}`,`attempts: ${h}`,p,l.startRegionId?`startRegionId: ${l.startRegionId}`:void 0,l.endRegionId?`endRegionId: ${l.endRegionId}`:void 0);c.lines.push({points:[{x:0,y:0},{x:g.x,y:g.y}],strokeColor:UAe,strokeDash:R4t,layer:Sy(a,A),label:Fp(f,"origin guide","endpoint: start")}),c.circles.push({center:g,radius:1,fill:N4t,stroke:UAe,layer:Sy(a,A),label:Fp(f,"endpoint: start",fV(a,A),_6(a,A))}),c.lines.push({points:[{x:0,y:0},{x:_.x,y:_.y}],strokeColor:UAe,strokeDash:R4t,layer:Sy(a,m),label:Fp(f,"origin guide","endpoint: end")}),c.circles.push({center:_,radius:1,fill:N4t,stroke:UAe,layer:Sy(a,m),label:Fp(f,"endpoint: end",fV(a,m),_6(a,m))})}})(e,n);let r=e.state.unroutedRoutes.length+(e.state.currentRouteId===void 0?0:1),s=o?o.reduce((a,c)=>a+Number(c===1),0):0;return n.title=["Tiny HyperGraph",`iter=${e.iterations}`,`pending=${r}`,o?`sectionPorts=${s}`:void 0,i?`staticReachabilityFailed=${i.size}`:void 0,e.failed?"failed":e.solved?"solved":"running"].filter(Boolean).join(" | "),n},QV=()=>({netIds:new Int32Array(0),lesserAngles:new Int32Array(0),greaterAngles:new Int32Array(0),layerMasks:new Int32Array(0),existingCrossingLayerIntersections:0,existingSameLayerIntersections:0,existingEntryExitLayerChanges:0,existingRegionCost:0,existingSegmentCount:0}),cOo=(e)=>({netIds:new Int32Array(e.netIds),lesserAngles:new Int32Array(e.lesserAngles),greaterAngles:new Int32Array(e.greaterAngles),layerMasks:new Int32Array(e.layerMasks),existingCrossingLayerIntersections:e.existingCrossingLayerIntersections,existingSameLayerIntersections:e.existingSameLayerIntersections,existingEntryExitLayerChanges:e.existingEntryExitLayerChanges,existingRegionCost:e.existingRegionCost,existingSegmentCount:e.existingSegmentCount}),YZ=(e)=>{return{portAssignment:new Int32Array(e.portAssignment),regionSegments:(t=e.regionSegments,t.map((n)=>n.map(([o,i,r])=>[o,i,r]))),regionIntersectionCaches:e.regionIntersectionCaches.map(cOo),regionCongestionCost:new Float64Array(e.regionCongestionCost),ripCount:e.ripCount};var t},aGt=(e,t)=>{t&&(t.minViaPadDiameter!==void 0&&(e.minViaPadDiameter=t.minViaPadDiameter),t.DISTANCE_TO_COST!==void 0&&(e.DISTANCE_TO_COST=t.DISTANCE_TO_COST),t.RIP_THRESHOLD_START!==void 0&&(e.RIP_THRESHOLD_START=t.RIP_THRESHOLD_START),t.RIP_THRESHOLD_END!==void 0&&(e.RIP_THRESHOLD_END=t.RIP_THRESHOLD_END),t.RIP_THRESHOLD_RAMP_ATTEMPTS!==void 0&&(e.RIP_THRESHOLD_RAMP_ATTEMPTS=t.RIP_THRESHOLD_RAMP_ATTEMPTS),t.RIP_CONGESTION_REGION_COST_FACTOR!==void 0&&(e.RIP_CONGESTION_REGION_COST_FACTOR=t.RIP_CONGESTION_REGION_COST_FACTOR),t.TRACE_DENSITY_COST_FACTOR!==void 0&&(e.TRACE_DENSITY_COST_FACTOR=Math.max(0,t.TRACE_DENSITY_COST_FACTOR)),t.USE_LAZY_ROUTE_HEURISTIC!==void 0&&(e.USE_LAZY_ROUTE_HEURISTIC=t.USE_LAZY_ROUTE_HEURISTIC),t.USE_SPARSE_CANDIDATE_STORAGE!==void 0&&(e.USE_SPARSE_CANDIDATE_STORAGE=t.USE_SPARSE_CANDIDATE_STORAGE),t.OWNED_REGIONAL_HOP_FRONTIER!==void 0&&(e.OWNED_REGIONAL_HOP_FRONTIER=t.OWNED_REGIONAL_HOP_FRONTIER),t.MAX_ITERATIONS!==void 0&&(e.MAX_ITERATIONS=t.MAX_ITERATIONS),t.VERBOSE!==void 0&&(e.VERBOSE=t.VERBOSE),t.STATIC_REACHABILITY_PRECHECK!==void 0&&(e.STATIC_REACHABILITY_PRECHECK=t.STATIC_REACHABILITY_PRECHECK),t.STATIC_REACHABILITY_PRECHECK_MAX_HOPS!==void 0&&(e.STATIC_REACHABILITY_PRECHECK_MAX_HOPS=t.STATIC_REACHABILITY_PRECHECK_MAX_HOPS),t.ACCEPT_BEST_SOLUTION_ON_TIMEOUT!==void 0&&(e.ACCEPT_BEST_SOLUTION_ON_TIMEOUT=t.ACCEPT_BEST_SOLUTION_ON_TIMEOUT),t.GREEDY_FINAL_ROUTE_ITERS!==void 0&&(e.GREEDY_FINAL_ROUTE_ITERS=t.GREEDY_FINAL_ROUTE_ITERS),t.PARTIAL_RIP_ENABLED!==void 0&&(e.PARTIAL_RIP_ENABLED=t.PARTIAL_RIP_ENABLED),t.PARTIAL_RIP_MIN_ROUTE_COUNT!==void 0&&(e.PARTIAL_RIP_MIN_ROUTE_COUNT=t.PARTIAL_RIP_MIN_ROUTE_COUNT),t.PARTIAL_RIP_MAX_ROUTE_COUNT!==void 0&&(e.PARTIAL_RIP_MAX_ROUTE_COUNT=t.PARTIAL_RIP_MAX_ROUTE_COUNT),t.PARTIAL_RIP_MAX_DISTANCE!==void 0&&(e.PARTIAL_RIP_MAX_DISTANCE=t.PARTIAL_RIP_MAX_DISTANCE),t.PARTIAL_RIP_QUALITY_MAX_DISTANCE!==void 0&&(e.PARTIAL_RIP_QUALITY_MAX_DISTANCE=t.PARTIAL_RIP_QUALITY_MAX_DISTANCE),t.PARTIAL_RIP_MAX_ATTEMPTS!==void 0&&(e.PARTIAL_RIP_MAX_ATTEMPTS=t.PARTIAL_RIP_MAX_ATTEMPTS),t.PARTIAL_RIP_WARMUP_FULL_RIP_ATTEMPTS!==void 0&&(e.PARTIAL_RIP_WARMUP_FULL_RIP_ATTEMPTS=t.PARTIAL_RIP_WARMUP_FULL_RIP_ATTEMPTS),t.PARTIAL_RIP_COMPLEXITY_SELECTION_MIN_ROUTE_COUNT!==void 0&&(e.PARTIAL_RIP_COMPLEXITY_SELECTION_MIN_ROUTE_COUNT=t.PARTIAL_RIP_COMPLEXITY_SELECTION_MIN_ROUTE_COUNT),t.PARTIAL_RIP_TARGET_MAX_COST_IMPROVEMENT_RATIO!==void 0&&(e.PARTIAL_RIP_TARGET_MAX_COST_IMPROVEMENT_RATIO=t.PARTIAL_RIP_TARGET_MAX_COST_IMPROVEMENT_RATIO),t.PARTIAL_RIP_MAX_REGION_COST_GROWTH_RATIO!==void 0&&(e.PARTIAL_RIP_MAX_REGION_COST_GROWTH_RATIO=t.PARTIAL_RIP_MAX_REGION_COST_GROWTH_RATIO),t.PARTIAL_RIP_MAX_TOTAL_COST_GROWTH_RATIO!==void 0&&(e.PARTIAL_RIP_MAX_TOTAL_COST_GROWTH_RATIO=t.PARTIAL_RIP_MAX_TOTAL_COST_GROWTH_RATIO),t.OUTSIDE_IN_ROUTING!==void 0&&(e.OUTSIDE_IN_ROUTING=t.OUTSIDE_IN_ROUTING),t.OUTSIDE_IN_MAX_DISTANCE!==void 0&&(e.OUTSIDE_IN_MAX_DISTANCE=t.OUTSIDE_IN_MAX_DISTANCE))},M_e=(e)=>({minViaPadDiameter:e.minViaPadDiameter,DISTANCE_TO_COST:e.DISTANCE_TO_COST,RIP_THRESHOLD_START:e.RIP_THRESHOLD_START,RIP_THRESHOLD_END:e.RIP_THRESHOLD_END,RIP_THRESHOLD_RAMP_ATTEMPTS:e.RIP_THRESHOLD_RAMP_ATTEMPTS,RIP_CONGESTION_REGION_COST_FACTOR:e.RIP_CONGESTION_REGION_COST_FACTOR,TRACE_DENSITY_COST_FACTOR:e.TRACE_DENSITY_COST_FACTOR,USE_LAZY_ROUTE_HEURISTIC:e.USE_LAZY_ROUTE_HEURISTIC,USE_SPARSE_CANDIDATE_STORAGE:e.USE_SPARSE_CANDIDATE_STORAGE,OWNED_REGIONAL_HOP_FRONTIER:e.OWNED_REGIONAL_HOP_FRONTIER,MAX_ITERATIONS:e.MAX_ITERATIONS,VERBOSE:e.VERBOSE,STATIC_REACHABILITY_PRECHECK:e.STATIC_REACHABILITY_PRECHECK,STATIC_REACHABILITY_PRECHECK_MAX_HOPS:e.STATIC_REACHABILITY_PRECHECK_MAX_HOPS,ACCEPT_BEST_SOLUTION_ON_TIMEOUT:e.ACCEPT_BEST_SOLUTION_ON_TIMEOUT,GREEDY_FINAL_ROUTE_ITERS:e.GREEDY_FINAL_ROUTE_ITERS,PARTIAL_RIP_ENABLED:e.PARTIAL_RIP_ENABLED,PARTIAL_RIP_MIN_ROUTE_COUNT:e.PARTIAL_RIP_MIN_ROUTE_COUNT,PARTIAL_RIP_MAX_ROUTE_COUNT:e.PARTIAL_RIP_MAX_ROUTE_COUNT,PARTIAL_RIP_MAX_DISTANCE:e.PARTIAL_RIP_MAX_DISTANCE,PARTIAL_RIP_QUALITY_MAX_DISTANCE:e.PARTIAL_RIP_QUALITY_MAX_DISTANCE,PARTIAL_RIP_MAX_ATTEMPTS:e.PARTIAL_RIP_MAX_ATTEMPTS,PARTIAL_RIP_WARMUP_FULL_RIP_ATTEMPTS:e.PARTIAL_RIP_WARMUP_FULL_RIP_ATTEMPTS,PARTIAL_RIP_COMPLEXITY_SELECTION_MIN_ROUTE_COUNT:e.PARTIAL_RIP_COMPLEXITY_SELECTION_MIN_ROUTE_COUNT,PARTIAL_RIP_TARGET_MAX_COST_IMPROVEMENT_RATIO:e.PARTIAL_RIP_TARGET_MAX_COST_IMPROVEMENT_RATIO,PARTIAL_RIP_MAX_REGION_COST_GROWTH_RATIO:e.PARTIAL_RIP_MAX_REGION_COST_GROWTH_RATIO,PARTIAL_RIP_MAX_TOTAL_COST_GROWTH_RATIO:e.PARTIAL_RIP_MAX_TOTAL_COST_GROWTH_RATIO,OUTSIDE_IN_ROUTING:e.OUTSIDE_IN_ROUTING,OUTSIDE_IN_MAX_DISTANCE:e.OUTSIDE_IN_MAX_DISTANCE}),lOo=(e,t)=>e.f-t.f,nT=class e extends Js{constructor(t,n,o){super(),this.topology=t,this.problem=n,aGt(this,o);let i=1,r=new Int32Array(t.portCount).fill(-1),s=new Int32Array(t.portCount).fill(-1);for(let l=0;l<t.portCount;l++){let d=t.incidentPortRegion[l]??[];d.length>i&&(i=d.length),r[l]=d[0]??-1,s[l]=d[1]??-1}this.candidateHopSlotStride=i,this.candidateFirstRegionByPortId=r,this.candidateSecondRegionByPortId=s,this.hCostByPortId=new Float64Array(t.portCount),this.hCostRouteIdByPortId=new Int32Array(t.portCount).fill(-1);let a=t.portCount*i;this.candidateHopCapacity=a,this.state={portAssignment:new Int32Array(t.portCount).fill(-1),regionSegments:Array.from({length:t.regionCount},()=>[]),regionIntersectionCaches:Array.from({length:t.regionCount},()=>QV()),currentRouteId:void 0,currentRouteNetId:void 0,unroutedRoutes:QNe(n.routeCount),candidateQueue:new jzt([],lOo),candidateBestCostByHopId:this.USE_SPARSE_CANDIDATE_STORAGE?new Map:new Float64Array(a),candidateBestCostGenerationByHopId:this.USE_SPARSE_CANDIDATE_STORAGE?new Map:new Uint32Array(a),candidateBestCostGeneration:1,goalPortId:-1,ripCount:0,regionCongestionCost:new Float64Array(t.regionCount).fill(0)},this.routeAttemptCountByRouteId=new Uint32Array(n.routeCount),this.routeSuccessCountByRouteId=new Uint32Array(n.routeCount);let c=ake({topology:t,problem:n,state:this.state,routeSuccessCountByRouteId:this.routeSuccessCountByRouteId,appendSegmentToRegionCache:(l,d,u)=>this.appendSegmentToRegionCache(l,d,u)});c&&(this.stats={...this.stats,...c})}topology;problem;state;candidateHopSlotStride;candidateHopCapacity;candidateFirstRegionByPortId;candidateSecondRegionByPortId;candidateOverflowBestCost;regionalHopFrontierQueue;regionalHopFrontierEpoch;regionalHopFrontierGoalPortId;regionalHopFrontierRouteId;regionalHopFrontierNetId;regionalHopFrontiers=new Map;_problemSetup;hCostByPortId;hCostRouteIdByPortId;hCostEndRouteId;hCostEndX=0;hCostEndY=0;routeAttemptCountByRouteId;routeSuccessCountByRouteId;bestSolvedStateSnapshot;bestSolvedStateSummary;hasLoggedNeverSuccessfullyRoutedRoutes=!1;staticallyUnroutableRoutes=[];segmentGeometryScratch={netId:0,lesserAngle:0,greaterAngle:0,layerMask:0,entryExitLayerChanges:0,sameLayerIntersectionCount:0,crossingLayerIntersectionCount:0};ADD_SEGMENT_DISTANCE_TO_G=!1;costAwareFinalReripBudget=0;DISTANCE_TO_COST=0.05;minViaPadDiameter=Xzt;RIP_THRESHOLD_START=0.05;RIP_THRESHOLD_END=0.8;RIP_THRESHOLD_RAMP_ATTEMPTS=50;RIP_CONGESTION_REGION_COST_FACTOR=0.1;TRACE_DENSITY_COST_FACTOR=0;USE_LAZY_ROUTE_HEURISTIC=!0;USE_SPARSE_CANDIDATE_STORAGE=!1;OWNED_REGIONAL_HOP_FRONTIER=!1;MAX_ITERATIONS=1e6;VERBOSE=!1;STATIC_REACHABILITY_PRECHECK=!0;STATIC_REACHABILITY_PRECHECK_MAX_HOPS=16;ACCEPT_BEST_SOLUTION_ON_TIMEOUT=!0;GREEDY_FINAL_ROUTE_ITERS=4;PARTIAL_RIP_ENABLED=!1;PARTIAL_RIP_MIN_ROUTE_COUNT=0;PARTIAL_RIP_MAX_ROUTE_COUNT=Number.POSITIVE_INFINITY;PARTIAL_RIP_MAX_DISTANCE=12;PARTIAL_RIP_QUALITY_MAX_DISTANCE;PARTIAL_RIP_MAX_ATTEMPTS=Number.POSITIVE_INFINITY;PARTIAL_RIP_WARMUP_FULL_RIP_ATTEMPTS=0;PARTIAL_RIP_COMPLEXITY_SELECTION_MIN_ROUTE_COUNT=Number.POSITIVE_INFINITY;PARTIAL_RIP_TARGET_MAX_COST_IMPROVEMENT_RATIO=0;PARTIAL_RIP_MAX_REGION_COST_GROWTH_RATIO=0.2;PARTIAL_RIP_MAX_TOTAL_COST_GROWTH_RATIO=0.1;OUTSIDE_IN_ROUTING=!1;OUTSIDE_IN_MAX_DISTANCE=24;resetForProblem(t){if(this.constructor!==e)throw Error("TinyHyperGraphSolver.resetForProblem cannot reset subclass routing state");this.problem=t,this._problemSetup=void 0,this.hCostEndRouteId=void 0,this.hCostRouteIdByPortId.fill(-1),this.state.portAssignment.fill(-1);for(let o of this.state.regionSegments)o.length=0;this.state.regionIntersectionCaches.fill(QV()),this.state.currentRouteId=void 0,this.state.currentRouteNetId=void 0,this.state.unroutedRoutes=QNe(t.routeCount),this.state.candidateQueue.clear(),this.state.candidateBestCostGeneration=1,this.state.candidateBestCostByHopId instanceof Map?this.state.candidateBestCostByHopId.clear():this.state.candidateBestCostByHopId.fill(0),this.state.candidateBestCostGenerationByHopId instanceof Map?this.state.candidateBestCostGenerationByHopId.clear():this.state.candidateBestCostGenerationByHopId.fill(0),this.state.goalPortId=-1,this.state.ripCount=0,this.state.regionCongestionCost.fill(0),this.routeAttemptCountByRouteId=new Uint32Array(t.routeCount),this.routeSuccessCountByRouteId=new Uint32Array(t.routeCount),this.bestSolvedStateSnapshot=void 0,this.bestSolvedStateSummary=void 0,this.hasLoggedNeverSuccessfullyRoutedRoutes=!1,this.staticallyUnroutableRoutes=[],this.candidateOverflowBestCost?.clear(),this.solved=!1,this.failed=!1,this.iterations=0,this.progress=0,this.error=null,this.activeSubSolver=void 0,this.failedSubSolvers=void 0,this.timeToSolve=void 0,this.stats={},this._setupDone=!1;let n=ake({topology:this.topology,problem:t,state:this.state,routeSuccessCountByRouteId:this.routeSuccessCountByRouteId,appendSegmentToRegionCache:(o,i,r)=>this.appendSegmentToRegionCache(o,i,r)});n&&(this.stats={...this.stats,...n})}get problemSetup(){return this._problemSetup||(this._problemSetup=this.computeProblemSetup()),this._problemSetup}computeProblemSetup(){let{topology:t,problem:n}=this,o=this.USE_LAZY_ROUTE_HEURISTIC?void 0:new Float64Array(t.portCount*n.routeCount),{portX:i,portY:r}=t,s=[],a=new Int32Array(t.portCount).fill(-1),c=(l,d)=>{let u=s[l]??new Set;u.add(d),s[l]=u;let h=a[l];h===-1?a[l]=d:h!==d&&(a[l]=-2)};for(let l=0;l<n.routeCount;l++){let d=n.routeNet[l];if(c(n.routeStartPort[l],d),c(n.routeEndPort[l],d),o){let u=n.routeEndPort[l],h=i[u],A=r[u];for(let m=0;m<t.portCount;m++){let p=i[m]-h,g=r[m]-A;o[m*n.routeCount+l]=Math.sqrt(p*p+g*g)*this.DISTANCE_TO_COST}}}return{...o?{portHCostToEndOfRoute:o}:{},portEndpointNetIds:s,portEndpointReservationNetId:a}}_setup(){if(this.problemSetup,this.STATIC_REACHABILITY_PRECHECK){let t=eOo({topology:this.topology,problem:this.problem,problemSetup:this.problemSetup,portAssignment:this.state.portAssignment,routeIds:this.state.unroutedRoutes,maxPrecheckHops:Math.max(0,this.STATIC_REACHABILITY_PRECHECK_MAX_HOPS),getStartingNextRegionId:(n,o)=>this.getStartingNextRegionId(n,o),getRouteSummary:(n)=>this.getRouteSummary(n)});this.staticallyUnroutableRoutes=t,t.length>0&&(this.failed=!0,this.error=((n)=>{let o=n.slice(0,5).map((r)=>{let s=r.pointIds.length>=2?`${r.pointIds[0]}->${r.pointIds[1]}`:`${r.startPortId}->${r.endPortId}`;return`${r.connectionId} (${s})`}).join(", "),i=n.length-5;return["Static reachability precheck failed:",`${n.length} route(s) have no legal path under the current reservation and start-region rules`,i>0?`${o}, +${i} more`:o].join(" ")})(t),this.stats={...this.stats,staticallyUnroutableRouteCount:t.length})}}_step(){let{problem:t,topology:n,state:o}=this;if(o.currentRouteId===void 0){if(o.unroutedRoutes.length===0)return void this.onAllRoutesRouted();o.currentRouteId=o.unroutedRoutes.shift(),o.currentRouteNetId=t.routeNet[o.currentRouteId],this.routeAttemptCountByRouteId[o.currentRouteId]+=1,this.resetCandidateBestCosts();let a=this.getRouteStartPortId(o.currentRouteId);o.candidateQueue.clear();let c=this.getStartingNextRegionId(o.currentRouteId,a);if(c===void 0)return this.failed=!0,void(this.error=`Start port ${a} has no incident regions`);let l=this.getHopId(a,c);this.setCandidateBestCost(l,0),o.candidateQueue.queue({hopId:l,nextRegionId:c,portId:a,f:0,g:0,h:0}),o.goalPortId=this.getRouteEndPortId(o.currentRouteId)}let i=o.candidateQueue.dequeue();if(!i)return void this.onOutOfCandidates();let r=i.hopId??this.getHopId(i.portId,i.nextRegionId);if(i.g>this.getCandidateBestCost(r))return;if(this.isRegionReservedForDifferentNet(i.nextRegionId))return;let s=n.regionIncidentPorts[i.nextRegionId];if(this.OWNED_REGIONAL_HOP_FRONTIER){let a=this.getRegionalHopFrontier(i.nextRegionId,s);if(a)return void this.expandRegionalHopFrontier(i,a)}for(let a of s){if(a===o.goalPortId){let _=o.portAssignment[a];if(this.isPortReservedForDifferentNet(a))continue;if(_!==-1&&_!==o.currentRouteNetId)continue;return void this.onPathFound(i)}if(a===i.portId)continue;if(t.portSectionMask[a]===0)continue;let c=n.incidentPortRegion[a][0]===i.nextRegionId?n.incidentPortRegion[a][1]:n.incidentPortRegion[a][0];if(c===void 0)continue;let l=this.getHopId(a,c);if((o.candidateQueue.isClosedHopId?o.candidateQueue.isClosedHopId(l):o.candidateQueue.isClosedHop?.(a,c))===!0)continue;let d=o.portAssignment[a];if(this.isPortReservedForDifferentNet(a))continue;if(d!==-1&&d!==o.currentRouteNetId)continue;if(this.isRegionReservedForDifferentNet(c))continue;let u=this.getCandidateBestCost(l);if(i.g>=u)continue;let h,A=i.g+o.regionCongestionCost[i.nextRegionId]+(t.portPenalty?.[a]??0);if(this.ADD_SEGMENT_DISTANCE_TO_G){let _=n.portX[i.portId]-n.portX[a],f=n.portY[i.portId]-n.portY[a];h=Math.sqrt(_*_+f*f),A+=h*this.DISTANCE_TO_COST}if(A>=u)continue;let m=this.computeG(i,a,u,h);if(!Number.isFinite(m)||m>=u)continue;let p=this.computeH(a),g={hopId:l,prevRegionId:i.nextRegionId,nextRegionId:c,portId:a,g:m,h:p,f:m+p,prevCandidate:i};if(a===o.goalPortId)return void this.onPathFound(g);this.setCandidateBestCost(l,m),o.candidateQueue.queue(g)}}getRegionalHopFrontier(t,n){let{state:o}=this,i=o.candidateQueue;if(!(i instanceof qzt))return this.regionalHopFrontierQueue=void 0,this.regionalHopFrontierEpoch=void 0,void this.regionalHopFrontiers.clear();let r=i.closureEpoch;if(i===this.regionalHopFrontierQueue&&r===this.regionalHopFrontierEpoch&&o.goalPortId===this.regionalHopFrontierGoalPortId&&o.currentRouteId===this.regionalHopFrontierRouteId&&o.currentRouteNetId===this.regionalHopFrontierNetId||(this.regionalHopFrontierQueue=i,this.regionalHopFrontierEpoch=r,this.regionalHopFrontierGoalPortId=o.goalPortId,this.regionalHopFrontierRouteId=o.currentRouteId,this.regionalHopFrontierNetId=o.currentRouteNetId,this.regionalHopFrontiers.clear()),!Array.isArray(n)||n.length>2147483647)return;let s=this.regionalHopFrontiers.get(t);if(!s||s.neighbors!==n){let a=new Int32Array(n.length);for(let c=0;c<n.length;c++)a[c]=c+1<n.length?c+1:-1;s={neighbors:n,next:a,head:n.length>0?0:-1},this.regionalHopFrontiers.set(t,s)}return s}expandRegionalHopFrontier(t,n){let{problem:o,topology:i,state:r}=this,{neighbors:s,next:a}=n,c=n.head,l=-1;for(;c!==-1;){let d=c;c=a[d];let u=l;l=d;let h=s[d];if(h===r.goalPortId){let I=r.portAssignment[h];if(this.isPortReservedForDifferentNet(h))continue;if(I!==-1&&I!==r.currentRouteNetId)continue;return void this.onPathFound(t)}if(h===t.portId)continue;if(o.portSectionMask[h]===0)continue;let A=i.incidentPortRegion[h][0]===t.nextRegionId?i.incidentPortRegion[h][1]:i.incidentPortRegion[h][0];if(A===void 0)continue;let m=this.getHopId(h,A);if((r.candidateQueue.isClosedHopId?r.candidateQueue.isClosedHopId(m):r.candidateQueue.isClosedHop?.(h,A))===!0){u===-1?n.head=c:a[u]=c,l=u;continue}let p=r.portAssignment[h];if(this.isPortReservedForDifferentNet(h))continue;if(p!==-1&&p!==r.currentRouteNetId)continue;if(this.isRegionReservedForDifferentNet(A))continue;let g=this.getCandidateBestCost(m);if(t.g>=g)continue;let _,f=t.g+r.regionCongestionCost[t.nextRegionId]+(o.portPenalty?.[h]??0);if(this.ADD_SEGMENT_DISTANCE_TO_G){let I=i.portX[t.portId]-i.portX[h],b=i.portY[t.portId]-i.portY[h];_=Math.sqrt(I*I+b*b),f+=_*this.DISTANCE_TO_COST}if(f>=g)continue;let y=this.computeG(t,h,g,_);if(!Number.isFinite(y)||y>=g)continue;let x=this.computeH(h),C={hopId:m,prevRegionId:t.nextRegionId,nextRegionId:A,portId:h,g:y,h:x,f:y+x,prevCandidate:t};if(h===r.goalPortId)return void this.onPathFound(C);this.setCandidateBestCost(m,y),r.candidateQueue.queue(C)}}resetCandidateBestCosts(){let{state:t}=this;if(this.candidateOverflowBestCost?.clear(),t.candidateBestCostGeneration===4294967295)return t.candidateBestCostByHopId instanceof Map&&t.candidateBestCostByHopId.clear(),t.candidateBestCostGenerationByHopId instanceof Map?t.candidateBestCostGenerationByHopId.clear():t.candidateBestCostGenerationByHopId.fill(0),void(t.candidateBestCostGeneration=1);t.candidateBestCostGeneration+=1}getCandidateBestCost(t){if(t<0)return this.candidateOverflowBestCost?.get(t)??Number.POSITIVE_INFINITY;let{state:n}=this,o=n.candidateBestCostGenerationByHopId;return(o instanceof Map?o.get(t):o[t])===n.candidateBestCostGeneration?n.candidateBestCostByHopId instanceof Map?n.candidateBestCostByHopId.get(t):n.candidateBestCostByHopId[t]:Number.POSITIVE_INFINITY}setCandidateBestCost(t,n){if(t<0)return this.candidateOverflowBestCost||(this.candidateOverflowBestCost=new Map),void this.candidateOverflowBestCost.set(t,n);let{state:o}=this;o.candidateBestCostGenerationByHopId instanceof Map?o.candidateBestCostGenerationByHopId.set(t,o.candidateBestCostGeneration):o.candidateBestCostGenerationByHopId[t]=o.candidateBestCostGeneration,o.candidateBestCostByHopId instanceof Map?o.candidateBestCostByHopId.set(t,n):o.candidateBestCostByHopId[t]=n}getHopId(t,n){let o=t*this.candidateHopSlotStride;if(this.candidateFirstRegionByPortId[t]===n)return o;if(this.candidateSecondRegionByPortId[t]===n)return o+1;let i=this.topology.incidentPortRegion[t];for(let r=2;r<(i?.length??0);r++)if(i[r]===n)return o+r;return-(t*this.topology.regionCount+n)-1}getStartingNextRegionId(t,n){let o=this.topology.incidentPortRegion[n]??[],i=this.problem.routeNet[t];return o.find((r)=>this.problem.regionNetId[r]===-1)??o.find((r)=>this.problem.regionNetId[r]===i)??o[0]}getRouteStartPortId(t){return this.problem.routeStartPort[t]}getRouteEndPortId(t){return this.problem.routeEndPort[t]}isPortReservedForDifferentNet(t){let n=this.problemSetup.portEndpointReservationNetId[t]??-1;return n===-2||n!==-1&&n!==this.state.currentRouteNetId}isRegionReservedForDifferentNet(t){let n=this.problem.regionNetId[t];return n!==-1&&n!==this.state.currentRouteNetId}isKnownSingleLayerRegion(t){let n=this.topology.regionAvailableZMask?.[t]??0;return Kzt(n)}computeRegionCostForRegion(t,n,o,i,r){return((s,a,c,l,d,u,h=0,A=0.3,m=0)=>KHo(s*a,c,l,d,u,h,A,m))(this.topology.regionWidth[t],this.topology.regionHeight[t],n,o,i,r,this.topology.regionAvailableZMask?.[t]??0,this.minViaPadDiameter,this.TRACE_DENSITY_COST_FACTOR)}populateSegmentGeometryScratch(t,n,o){return this.populateBaseSegmentGeometryScratch(t,n,o)}populateBaseSegmentGeometryScratch(t,n,o){let{state:i,topology:r}=this,s=this.segmentGeometryScratch,a=this.candidateFirstRegionByPortId[n]===t||this.candidateSecondRegionByPortId[n]!==t?r.portAngleForRegion1[n]:r.portAngleForRegion2?.[n]??r.portAngleForRegion1[n],c=this.candidateFirstRegionByPortId[o]===t||this.candidateSecondRegionByPortId[o]!==t?r.portAngleForRegion1[o]:r.portAngleForRegion2?.[o]??r.portAngleForRegion1[o],l=r.portZ[n],d=r.portZ[o];return s.lesserAngle=a<c?a:c,s.greaterAngle=a<c?c:a,s.layerMask=1<<l|1<<d,s.entryExitLayerChanges=l!==d?1:0,s.netId=i.currentRouteNetId,s}appendSegmentToRegionCache(t,n,o){let{state:i}=this,r=i.regionIntersectionCaches[t],s=this.populateSegmentGeometryScratch(t,n,o);v4t(r,s);let{sameLayerIntersectionCount:a,crossingLayerIntersectionCount:c,entryExitLayerChanges:l}=s,d=r.netIds.length+1,u=new Int32Array(d);u.set(r.netIds),u[d-1]=i.currentRouteNetId;let h=new Int32Array(d);h.set(r.lesserAngles),h[d-1]=s.lesserAngle;let A=new Int32Array(d);A.set(r.greaterAngles),A[d-1]=s.greaterAngle;let m=new Int32Array(d);m.set(r.layerMasks),m[d-1]=s.layerMask;let p=r.existingSameLayerIntersections+a,g=r.existingCrossingLayerIntersections+c,_=r.existingEntryExitLayerChanges+l,f=h.length;i.regionIntersectionCaches[t]={netIds:u,lesserAngles:h,greaterAngles:A,layerMasks:m,existingSameLayerIntersections:p,existingCrossingLayerIntersections:g,existingEntryExitLayerChanges:_,existingSegmentCount:f,existingRegionCost:this.computeRegionCostForRegion(t,p,g,_,f)}}getSolvedPathSegments(t){let{state:n}=this,o=[],i=t;for(;i;)o.unshift(i),i=i.prevCandidate;let r=[];for(let a=1;a<o.length;a++)r.push({regionId:o[a-1].nextRegionId,fromPortId:o[a-1].portId,toPortId:o[a].portId});let s=o[o.length-1];return s&&s.portId!==n.goalPortId&&r.push({regionId:s.nextRegionId,fromPortId:s.portId,toPortId:n.goalPortId}),r}resetRoutingStateForRerip(){let{topology:t,problem:n,state:o}=this;o.portAssignment.fill(-1),o.regionSegments=Array.from({length:t.regionCount},()=>[]),o.regionIntersectionCaches=Array.from({length:t.regionCount},()=>QV()),o.currentRouteNetId=void 0,o.currentRouteId=void 0,o.unroutedRoutes=yge(QNe(n.routeCount),o.ripCount),o.candidateQueue.clear(),this.resetCandidateBestCosts(),o.goalPortId=-1}getMaxRegionCost(){let{topology:t,state:n}=this,o=0;for(let i=0;i<t.regionCount;i++){let r=n.regionIntersectionCaches[i]?.existingRegionCost??0;o=Math.max(o,r)}return o}getRouteMetadata(t){return this.problem.routeMetadata?.[t]}getRouteConnectionId(t){let n=this.getRouteMetadata(t)?.connectionId;return typeof n=="string"?n:`route-${t}`}getRouteSummary(t){return(({problem:n,routeId:o,getRouteMetadata:i,getRouteConnectionId:r})=>{let s=i?.(o)??Jzt(n,o);return{routeId:o,connectionId:r?.(o)??$Ho(n,o),startPortId:n.routeStartPort[o],endPortId:n.routeEndPort[o],startRegionId:typeof s?.startRegionId=="string"?s.startRegionId:void 0,endRegionId:typeof s?.endRegionId=="string"?s.endRegionId:void 0,pointIds:JHo(s)}})({problem:this.problem,routeId:t,getRouteMetadata:(n)=>this.getRouteMetadata(n),getRouteConnectionId:(n)=>this.getRouteConnectionId(n)})}getAdditionalRegionLabel(t){}getNeverSuccessfullyRoutedRoutes(){let t=[];for(let n=0;n<this.problem.routeCount;n++){let o=this.routeAttemptCountByRouteId[n];o===0||this.routeSuccessCountByRouteId[n]>0||t.push({...this.getRouteSummary(n),attempts:o})}return t}getStaticallyUnroutableRoutes(){return this.staticallyUnroutableRoutes}logNeverSuccessfullyRoutedRoutes(){if(!this.VERBOSE||this.hasLoggedNeverSuccessfullyRoutedRoutes)return;let t=this.getNeverSuccessfullyRoutedRoutes();if(this.hasLoggedNeverSuccessfullyRoutedRoutes=!0,t.length!==0){console.log(["[TinyHyperGraphSolver:never-routed-summary]",`count=${t.length}`].join(" "));for(let n of t){let o=n.pointIds.length>=2?`${n.pointIds[0]}->${n.pointIds[1]}`:"unknown";console.log(["[TinyHyperGraphSolver:never-routed]",`routeId=${n.routeId}`,`connectionId=${n.connectionId}`,`attempts=${n.attempts}`,`pointPath=${o}`,`startRegionId=${n.startRegionId??"unknown"}`,`endRegionId=${n.endRegionId??"unknown"}`].join(" "))}}}logRipEvent(t,n,o={}){this.VERBOSE&&console.log(["[TinyHyperGraphSolver:rip]",`ripCount=${this.state.ripCount}`,`maxRegionCostBeforeRip=${n.toFixed(3)}`,`reason=${t}`,...Object.entries(o).map(([i,r])=>`${i}=${typeof r=="number"?Number.isInteger(r)?String(r):r.toFixed(3):r}`)].join(" "))}compareRegionCostSummaries(t,n){return t.maxRegionCost!==n.maxRegionCost?t.maxRegionCost-n.maxRegionCost:t.totalRegionCost-n.totalRegionCost}captureBestSolvedState(t){this.bestSolvedStateSummary&&this.compareRegionCostSummaries(t,this.bestSolvedStateSummary)>=0||this.replaceBestSolvedState(t)}replaceBestSolvedState(t){this.bestSolvedStateSummary=t,this.bestSolvedStateSnapshot=YZ({portAssignment:this.state.portAssignment,regionSegments:this.state.regionSegments,regionIntersectionCaches:this.state.regionIntersectionCaches,regionCongestionCost:this.state.regionCongestionCost,ripCount:this.state.ripCount})}restoreBestSolvedState(){if(!this.bestSolvedStateSnapshot)return;let t=YZ(this.bestSolvedStateSnapshot);this.state.portAssignment=t.portAssignment,this.state.regionSegments=t.regionSegments,this.state.regionIntersectionCaches=t.regionIntersectionCaches,this.state.regionCongestionCost=t.regionCongestionCost,this.state.ripCount=t.ripCount,this.state.currentRouteId=void 0,this.state.currentRouteNetId=void 0,this.state.unroutedRoutes=[],this.state.candidateQueue.clear(),this.resetCandidateBestCosts(),this.state.goalPortId=-1}getRemainingRouteIdsForGreedyFinalRoute(){let t=new Set(this.state.unroutedRoutes);return this.state.currentRouteId!==void 0&&t.add(this.state.currentRouteId),[...t]}applySnapshotToGreedyFinalRouteSolver(t,n,o){let i=YZ(n);t.state.portAssignment=i.portAssignment,t.state.regionSegments=i.regionSegments,t.state.regionIntersectionCaches=i.regionIntersectionCaches,t.state.regionCongestionCost=i.regionCongestionCost,t.state.ripCount=0,t.state.currentRouteId=void 0,t.state.currentRouteNetId=void 0,t.state.unroutedRoutes=[...o],t.state.candidateQueue.clear(),t.resetCandidateBestCosts(),t.state.goalPortId=-1}summarizeSolvedState(t){let n=0,o=0;for(let i of t.state.regionIntersectionCaches){let r=i.existingRegionCost;n=Math.max(n,r),o+=r}return{maxRegionCost:n,totalRegionCost:o}}createGreedyFinalRouteSolver(t,n){return new dOo(this.topology,this.problem,t)}tryGreedyFinalRouteAcceptance(){let t=Math.max(0,Math.floor(this.GREEDY_FINAL_ROUTE_ITERS));if(t===0)return!1;let n=this.getRemainingRouteIdsForGreedyFinalRoute();if(n.length===0)return!1;let o=YZ({portAssignment:this.state.portAssignment,regionSegments:this.state.regionSegments,regionIntersectionCaches:this.state.regionIntersectionCaches,regionCongestionCost:this.state.regionCongestionCost,ripCount:this.state.ripCount}),i=50000;for(let r=this.state.ripCount<this.costAwareFinalReripBudget?-1:0;r<t;r++){let s=r<=0?n:yge(n,this.state.ripCount+r),a=this.createGreedyFinalRouteSolver({...M_e(this),ACCEPT_BEST_SOLUTION_ON_TIMEOUT:!1,GREEDY_FINAL_ROUTE_ITERS:0,MAX_ITERATIONS:50000,RIP_THRESHOLD_RAMP_ATTEMPTS:0,STATIC_REACHABILITY_PRECHECK:!1,OUTSIDE_IN_ROUTING:!1,PARTIAL_RIP_ENABLED:!1},r);if(i=a.MAX_ITERATIONS,this.applySnapshotToGreedyFinalRouteSolver(a,o,s),a.solve(),a.solved&&!a.failed)return this.bestSolvedStateSnapshot=YZ({portAssignment:a.state.portAssignment,regionSegments:a.state.regionSegments,regionIntersectionCaches:a.state.regionIntersectionCaches,regionCongestionCost:a.state.regionCongestionCost,ripCount:a.state.ripCount}),this.bestSolvedStateSummary=this.summarizeSolvedState(a),this.restoreBestSolvedState(),this.stats={...this.stats,acceptedGreedyFinalRouteOnTimeout:!0,greedyFinalRouteIter:Math.max(0,r),finalRoutingStrategy:r<0?"congestion-aware":"greedy",greedyFinalRouteRemainingRouteCount:n.length,greedyFinalRouteMaxIterations:i,neverSuccessfullyRoutedRouteCount:0,maxRegionCost:this.bestSolvedStateSummary.maxRegionCost,totalRegionCost:this.bestSolvedStateSummary.totalRegionCost,bestMaxRegionCost:this.bestSolvedStateSummary.maxRegionCost,bestTotalRegionCost:this.bestSolvedStateSummary.totalRegionCost},this.solved=!0,this.failed=!1,this.error=null,!0}return this.stats={...this.stats,greedyFinalRouteAttemptCount:t,greedyFinalRouteRemainingRouteCount:n.length,greedyFinalRouteMaxIterations:i},!1}onAllRoutesRouted(){let{topology:t,state:n}=this,o=this.RIP_THRESHOLD_RAMP_ATTEMPTS<=0?1:Math.min(1,n.ripCount/this.RIP_THRESHOLD_RAMP_ATTEMPTS),i=this.RIP_THRESHOLD_START+(this.RIP_THRESHOLD_END-this.RIP_THRESHOLD_START)*o,r=[],s=new Float64Array(t.regionCount),a=0,c=0;for(let u=0;u<t.regionCount;u++){let h=n.regionIntersectionCaches[u]?.existingRegionCost??0;s[u]=h,a=Math.max(a,h),c+=h,h>i&&r.push(u)}let l={maxRegionCost:a,totalRegionCost:c},d=r.length===0||n.ripCount>=this.RIP_THRESHOLD_RAMP_ATTEMPTS;if(d?(!this.bestSolvedStateSummary||this.compareRegionCostSummaries(l,this.bestSolvedStateSummary)<0)&&(this.bestSolvedStateSummary=l):this.captureBestSolvedState(l),this.stats={...this.stats,currentRipThreshold:i,hotRegionCount:r.length,maxRegionCost:a,totalRegionCost:c,bestMaxRegionCost:this.bestSolvedStateSummary?.maxRegionCost,bestTotalRegionCost:this.bestSolvedStateSummary?.totalRegionCost,ripCount:n.ripCount},d)this.solved=!0;else{for(let u=0;u<t.regionCount;u++)n.regionCongestionCost[u]+=s[u]*this.RIP_CONGESTION_REGION_COST_FACTOR;n.ripCount+=1,this.resetRoutingStateForRerip(),this.stats={...this.stats,ripCount:n.ripCount,maxRegionCostBeforeRip:a,reripRegionCount:r.length},this.logRipEvent("hot_regions",a,{hotRegionCount:r.length,currentRipThreshold:i})}}onOutOfCandidates(){let{topology:t,state:n}=this,o=n.currentRouteId,i=this.getMaxRegionCost();for(let r=0;r<t.regionCount;r++){let s=n.regionIntersectionCaches[r]?.existingRegionCost??0;n.regionCongestionCost[r]+=s*this.RIP_CONGESTION_REGION_COST_FACTOR}n.ripCount+=1,this.resetRoutingStateForRerip(),this.stats={...this.stats,ripCount:n.ripCount,maxRegionCost:i,maxRegionCostBeforeRip:i,reripReason:"out_of_candidates"},this.logRipEvent("out_of_candidates",i,{...o===void 0?{}:{routeId:o,connectionId:this.getRouteConnectionId(o)}})}onPathFound(t){let{state:n}=this,o=n.currentRouteId;if(o===void 0)return;this.routeSuccessCountByRouteId[o]+=1;let i=this.getSolvedPathSegments(t);for(let{regionId:r,fromPortId:s,toPortId:a}of i)n.regionSegments[r].push([o,s,a]),n.portAssignment[s]=n.currentRouteNetId,n.portAssignment[a]=n.currentRouteNetId,this.appendSegmentToRegionCache(r,s,a);n.candidateQueue.clear(),n.currentRouteNetId=void 0,n.currentRouteId=void 0}computeG(t,n,o=Number.POSITIVE_INFINITY,i){let{state:r,topology:s}=this,a=t.nextRegionId,c=r.regionIntersectionCaches[a],l=r.regionCongestionCost[a],d=this.problem.portPenalty?.[n]??0,u=0;if(this.ADD_SEGMENT_DISTANCE_TO_G){let g=i;if(g===void 0){let _=s.portX[t.portId]-s.portX[n],f=s.portY[t.portId]-s.portY[n];g=Math.sqrt(_*_+f*f)}u=g*this.DISTANCE_TO_COST}if(t.g+l+d+u>o+0.000000001)return Number.POSITIVE_INFINITY;let h=0,A=0,m=s.portZ[t.portId]!==s.portZ[n]?1:0;if(c.existingSegmentCount>0){let g=this.populateBaseSegmentGeometryScratch(a,t.portId,n);v4t(c,g),h=g.sameLayerIntersectionCount,A=g.crossingLayerIntersectionCount,m=g.entryExitLayerChanges}if(h>0&&this.isKnownSingleLayerRegion(a))return Number.POSITIVE_INFINITY;let p=this.computeRegionCostForRegion(a,c.existingSameLayerIntersections+h,c.existingCrossingLayerIntersections+A,c.existingEntryExitLayerChanges+m,c.existingSegmentCount+1)-c.existingRegionCost;return t.g+p+l+d+u}tryFinalAcceptance(){let t=this.getNeverSuccessfullyRoutedRoutes();if(this.stats={...this.stats,neverSuccessfullyRoutedRouteCount:t.length},this.ACCEPT_BEST_SOLUTION_ON_TIMEOUT&&this.bestSolvedStateSnapshot&&this.bestSolvedStateSummary)return this.restoreBestSolvedState(),this.stats={...this.stats,acceptedBestSolutionOnTimeout:!0,maxRegionCost:this.bestSolvedStateSummary.maxRegionCost,totalRegionCost:this.bestSolvedStateSummary.totalRegionCost,bestMaxRegionCost:this.bestSolvedStateSummary.maxRegionCost,bestTotalRegionCost:this.bestSolvedStateSummary.totalRegionCost},this.solved=!0,this.failed=!1,void(this.error=null);this.ACCEPT_BEST_SOLUTION_ON_TIMEOUT&&this.tryGreedyFinalRouteAcceptance()||this.logNeverSuccessfullyRoutedRoutes()}getRouteHeuristic(t,n){let o=this.problemSetup.portHCostToEndOfRoute;if(o)return o[n*this.problem.routeCount+t];if(this.hCostEndRouteId!==t){this.hCostEndRouteId=t;let i=this.getRouteEndPortId(t);this.hCostEndX=this.topology.portX[i],this.hCostEndY=this.topology.portY[i]}if(this.hCostRouteIdByPortId[n]!==t){let i=this.topology.portX[n]-this.hCostEndX,r=this.topology.portY[n]-this.hCostEndY;this.hCostByPortId[n]=Math.sqrt(i*i+r*r)*this.DISTANCE_TO_COST,this.hCostRouteIdByPortId[n]=t}return this.hCostByPortId[n]}computeH(t){return this.getRouteHeuristic(this.state.currentRouteId,t)}visualize(){return Cge(this)}getOutput(){return XHo(this)}},dOo=class extends nT{computeG(e,t){return e.g}},uOo=class extends nT{constructor(e,t,n){super(e,t,n),this.ADD_SEGMENT_DISTANCE_TO_G=!0}_setup(){super._setup(),this.state.candidateQueue=new qzt(this.topology.regionCount,{hopCapacity:this.candidateHopCapacity,hopSlotStride:this.candidateHopSlotStride,firstRegionByPortId:this.candidateFirstRegionByPortId,secondRegionByPortId:this.candidateSecondRegionByPortId,incidentPortRegion:this.topology.incidentPortRegion})}onPathFound(e){let t=this.state.goalPortId;if(e.portId===t)return void super.onPathFound(e);let n=this.computeG(e,t);if(!Number.isFinite(n))return;let o=this.getHopId(t,e.nextRegionId);n>=this.getCandidateBestCost(o)||(this.setCandidateBestCost(o,n),this.state.candidateQueue.queue({hopId:o,prevRegionId:e.nextRegionId,nextRegionId:e.nextRegionId,portId:t,g:n,h:0,f:n,prevCandidate:e}))}},hOo=new Set,mOo=class extends uOo{partialRipRoutePlans=new Map;outsideInRouteSearch;oneSidedFallbackRouteId;partialRipWindowDistance;partialRipCount=0;partiallyRippedRouteCount=0;partiallyRippedSegmentCount=0;retainedPartialRipSegmentCount=0;outsideInRouteCount=0;outsideInCompletedRouteCount=0;outsideInFallbackRouteCount=0;outsideInForwardExpansionCount=0;outsideInReverseExpansionCount=0;outsideInDistancePruneCount=0;completedRoundSummaries=[];firstCompletedRoundSummary;partialRipQualityBaselineSummary;bestSolvedRoundSummary;partialRipTargetReached=!1;useComplexityAwareSelection=!1;constructor(e,t,n){super(e,t,n),n?.PARTIAL_RIP_ENABLED===void 0&&(this.PARTIAL_RIP_ENABLED=!0),n?.OUTSIDE_IN_ROUTING===void 0&&(this.OUTSIDE_IN_ROUTING=!0),this.PARTIAL_RIP_ENABLED&&n?.PARTIAL_RIP_MAX_ATTEMPTS===void 0&&(this.PARTIAL_RIP_MAX_ATTEMPTS=10),(t.routeCount<Math.max(0,this.PARTIAL_RIP_MIN_ROUTE_COUNT)||t.routeCount>Math.max(0,this.PARTIAL_RIP_MAX_ROUTE_COUNT))&&(this.PARTIAL_RIP_ENABLED=!1,this.OUTSIDE_IN_ROUTING=!1),this.useComplexityAwareSelection=t.routeCount>=Math.max(0,this.PARTIAL_RIP_COMPLEXITY_SELECTION_MIN_ROUTE_COUNT)}getRouteStartPortId(e){return this.PARTIAL_RIP_ENABLED?this.partialRipRoutePlans.get(e)?.activeStartPortId??super.getRouteStartPortId(e):super.getRouteStartPortId(e)}getRouteEndPortId(e){return this.PARTIAL_RIP_ENABLED?this.partialRipRoutePlans.get(e)?.activeEndPortId??super.getRouteEndPortId(e):super.getRouteEndPortId(e)}getStartingNextRegionId(e,t){if(!this.PARTIAL_RIP_ENABLED)return super.getStartingNextRegionId(e,t);let n=this.partialRipRoutePlans.get(e);return n&&n.activeStartPortId===t?n.forcedStartRegionId:super.getStartingNextRegionId(e,t)}getEndingNextRegionId(e,t){let n=this.partialRipRoutePlans.get(e);return n&&n.activeEndPortId===t?n.forcedEndRegionId:super.getStartingNextRegionId(e,t)}computeH(e){if(!this.PARTIAL_RIP_ENABLED)return super.computeH(e);let t=this.state.currentRouteId;if(t===void 0||!this.partialRipRoutePlans.has(t))return super.computeH(e);let n=this.getRouteEndPortId(t),o=this.topology.portX[e]-this.topology.portX[n],i=this.topology.portY[e]-this.topology.portY[n];return Math.sqrt(o*o+i*i)*this.DISTANCE_TO_COST}onPathFound(e){if(!this.PARTIAL_RIP_ENABLED&&!this.OUTSIDE_IN_ROUTING)return void super.onPathFound(e);let t=this.state.currentRouteId,n=t!==void 0&&this.outsideInRouteSearch?.routeId===t;super.onPathFound(e),t!==void 0&&this.state.currentRouteId===void 0&&(this.partialRipRoutePlans.delete(t),n&&(this.outsideInCompletedRouteCount+=1),this.oneSidedFallbackRouteId===t&&(this.oneSidedFallbackRouteId=void 0)),this.outsideInRouteSearch=void 0,this.publishOutsideInStats()}resetRoutingStateForRerip(){this.PARTIAL_RIP_ENABLED||this.OUTSIDE_IN_ROUTING?(this.partialRipRoutePlans.clear(),this.outsideInRouteSearch=void 0,this.oneSidedFallbackRouteId=void 0,super.resetRoutingStateForRerip()):super.resetRoutingStateForRerip()}clearPartialRipPlans(e){for(let t of e)this.partialRipRoutePlans.delete(t)}getRouteIdsPreferredForPreservation(){return hOo}getCommittedRouteSegments(e){let t=[];for(let c=0;c<this.state.regionSegments.length;c++)for(let[l,d,u]of this.state.regionSegments[c]??[])l===e&&t.push({segmentIndex:t.length,regionId:c,fromPortId:d,toPortId:u});if(t.length===0)return;let n=new Map;for(let c of t)for(let l of[c.fromPortId,c.toPortId]){let d=n.get(l)??[];d.push(c.segmentIndex),n.set(l,d)}let o=this.problem.routeEndPort[e],i=[],r=new Set,s=new Set([this.problem.routeStartPort[e]]),a=(c)=>{if(c===o)return!0;for(let l of n.get(c)??[]){if(r.has(l))continue;let d=t[l],u=d.fromPortId===c?d.toPortId:d.fromPortId;if(!s.has(u)){if(r.add(l),s.add(u),i.push({regionId:d.regionId,fromPortId:c,toPortId:u}),a(u))return!0;i.pop(),s.delete(u),r.delete(l)}}return!1};return a(this.problem.routeStartPort[e])&&r.size===t.length?i:void 0}getSegmentDistance(e){let t=this.topology.portX[e.fromPortId]-this.topology.portX[e.toPortId],n=this.topology.portY[e.fromPortId]-this.topology.portY[e.toPortId];return Math.sqrt(t*t+n*n)}getPartialRipWindow(e,t,n){let o,i=Number.NEGATIVE_INFINITY;for(let d=0;d<e.length;d++){let u=e[d];if(!t.has(u.regionId))continue;let h=n[u.regionId]??0;h>i&&(i=h,o=d)}if(o===void 0)return;let r=Math.max(0,this.partialRipWindowDistance??this.PARTIAL_RIP_MAX_DISTANCE),s=o,a=o,c=this.getSegmentDistance(e[o])/2,l=c;for(;s>0;){let d=this.getSegmentDistance(e[s-1]);if(c+d>r)break;s-=1,c+=d}for(;a+1<e.length;){let d=this.getSegmentDistance(e[a+1]);if(l+d>r)break;a+=1,l+=d}return{startIndex:s,endIndex:a}}appendRetainedSegment(e,t,n){e[n.regionId].push([t,n.fromPortId,n.toPortId])}preparePartialRip(e,t){if(!this.PARTIAL_RIP_ENABLED||e.length===0)return!1;let n=new Set(e);if(this.partialRipWindowDistance===void 0){let d=0;for(let A of e)d=Math.max(d,t[A]??0);let u=Math.max(0,this.PARTIAL_RIP_MAX_DISTANCE),h=Math.max(u,this.PARTIAL_RIP_QUALITY_MAX_DISTANCE??2*u);this.partialRipWindowDistance=d<=1.5*this.RIP_THRESHOLD_END?h:u}let o=new Set;for(let d of e)for(let[u]of this.state.regionSegments[d]??[])o.add(u);if(o.size===0)return!1;let i=this.getRouteIdsPreferredForPreservation(),r=[...o].some((d)=>!i.has(d)),s=Array.from({length:this.topology.regionCount},()=>[]),a=new Map,c=0,l=0;for(let d=0;d<this.problem.routeCount;d++){let u=this.getCommittedRouteSegments(d);if(!u)return!1;if(!o.has(d)||r&&i.has(d)){for(let p of u)this.appendRetainedSegment(s,d,p),l+=1;continue}let h=this.getPartialRipWindow(u,n,t);if(!h)return!1;for(let p=0;p<u.length;p++){let g=u[p];p>=h.startIndex&&p<=h.endIndex?c+=1:(this.appendRetainedSegment(s,d,g),l+=1)}let A=u[h.startIndex],m=u[h.endIndex];a.set(d,{routeId:d,activeStartPortId:A.fromPortId,activeEndPortId:m.toPortId,forcedStartRegionId:A.regionId,forcedEndRegionId:m.regionId,rippedSegmentCount:h.endIndex-h.startIndex+1,retainedSegmentCount:u.length-(h.endIndex-h.startIndex+1)})}return a.size!==0&&c!==0&&(this.partialRipRoutePlans=a,this.rebuildRetainedRoutingState(s,[...a.keys()]),this.partialRipCount+=1,this.partiallyRippedRouteCount+=a.size,this.partiallyRippedSegmentCount+=c,this.retainedPartialRipSegmentCount+=l,this.publishPartialRipStats(),!0)}rebuildRetainedRoutingState(e,t){this.state.portAssignment.fill(-1),this.state.regionSegments=Array.from({length:this.topology.regionCount},()=>[]),this.state.regionIntersectionCaches=Array.from({length:this.topology.regionCount},()=>QV()),this.state.currentRouteId=void 0,this.state.currentRouteNetId=void 0,this.state.unroutedRoutes=t,this.state.candidateQueue.clear(),this.resetCandidateBestCosts(),this.state.goalPortId=-1,this.outsideInRouteSearch=void 0,this.oneSidedFallbackRouteId=void 0;for(let n=0;n<e.length;n++)for(let[o,i,r]of e[n]??[]){let s=this.problem.routeNet[o];this.state.currentRouteNetId=s;for(let a of[i,r]){let c=this.state.portAssignment[a];if(c!==-1&&c!==s)throw Error(`OutsideInPartialRipTinyHyperGraphSolver: retained port ${a} belongs to multiple nets`);this.state.portAssignment[a]=s}this.state.regionSegments[n].push([o,i,r]),this.appendSegmentToRegionCache(n,i,r)}this.state.currentRouteNetId=void 0}publishPartialRipStats(){this.stats={...this.stats,partialRipCount:this.partialRipCount,partiallyRippedRouteCount:this.partiallyRippedRouteCount,partiallyRippedSegmentCount:this.partiallyRippedSegmentCount,retainedPartialRipSegmentCount:this.retainedPartialRipSegmentCount,partialRipMaxDistance:this.partialRipWindowDistance??this.PARTIAL_RIP_MAX_DISTANCE,partialRipBaseMaxDistance:this.PARTIAL_RIP_MAX_DISTANCE,partialRipQualityMaxDistance:this.PARTIAL_RIP_QUALITY_MAX_DISTANCE??2*this.PARTIAL_RIP_MAX_DISTANCE,partialRipMaxAttempts:this.PARTIAL_RIP_MAX_ATTEMPTS}}publishOutsideInStats(){this.stats={...this.stats,outsideInRouteCount:this.outsideInRouteCount,outsideInCompletedRouteCount:this.outsideInCompletedRouteCount,outsideInFallbackRouteCount:this.outsideInFallbackRouteCount,outsideInForwardExpansionCount:this.outsideInForwardExpansionCount,outsideInReverseExpansionCount:this.outsideInReverseExpansionCount,outsideInDistancePruneCount:this.outsideInDistancePruneCount,outsideInMaxDistance:this.OUTSIDE_IN_MAX_DISTANCE}}createOutsideInFrontier(e,t,n){let o=new jzt([],(c,l)=>c.f===l.f?c.g-l.g:c.f-l.f),i=this.topology.portX[e]-this.topology.portX[n],r=this.topology.portY[e]-this.topology.portY[n],s=Math.sqrt(i*i+r*r)*this.DISTANCE_TO_COST,a={portId:e,nextRegionId:t,f:s,g:0,h:s,travelDistance:0};return o.queue(a),{queue:o,bestCostByHopId:new Map([[this.getHopId(e,t),0]]),settledByPortId:new Map,settledByRegionId:new Map,targetPortId:n}}startOutsideInRouteSearch(e){let t=this.getRouteStartPortId(e),n=this.getRouteEndPortId(e),o=this.getStartingNextRegionId(e,t),i=this.getEndingNextRegionId(e,n);return o!==void 0&&i!==void 0&&(this.state.goalPortId=n,this.state.candidateQueue.clear(),this.resetCandidateBestCosts(),this.outsideInRouteSearch={routeId:e,forward:this.createOutsideInFrontier(t,o,n),reverse:this.createOutsideInFrontier(n,i,t),expandForwardNext:!0,distanceLimitHit:!1,bestJoinedCost:Number.POSITIVE_INFINITY},this.outsideInRouteCount+=1,this.publishOutsideInStats(),!0)}dequeueFreshCandidate(e){for(;e.queue.length>0;){let t=e.queue.dequeue(),n=this.getHopId(t.portId,t.nextRegionId);if(t.g<=(e.bestCostByHopId.get(n)??1/0))return t}}recordSettledCandidate(e,t){let n=e.settledByPortId.get(t.portId);(!n||t.g<n.g)&&e.settledByPortId.set(t.portId,t);let o=e.settledByRegionId.get(t.nextRegionId)??[];o.push(t),o.sort((i,r)=>i.g-r.g),o.length>16&&(o.length=16),e.settledByRegionId.set(t.nextRegionId,o)}getCandidatePath(e){let t=[],n=e;for(;n;)t.push(n),n=n.prevCandidate;return t.reverse(),t}buildJoinedCandidate(e,t){let n=this.getCandidatePath(e),o=this.getCandidatePath(t),i=n.map(({portId:c})=>c),r=n.slice(0,-1).map(({nextRegionId:c})=>c);if(e.portId!==t.portId){if(e.nextRegionId!==t.nextRegionId)return;let c=this.topology.portX[e.portId]-this.topology.portX[t.portId],l=this.topology.portY[e.portId]-this.topology.portY[t.portId],d=Math.sqrt(c*c+l*l);if(e.travelDistance+t.travelDistance+d>2*this.OUTSIDE_IN_MAX_DISTANCE)return;let u=this.computeG(e,t.portId);if(!Number.isFinite(u))return;r.push(e.nextRegionId),i.push(t.portId)}for(let c=o.length-2;c>=0;c--){let l=o[c];r.push(l.nextRegionId),i.push(l.portId)}if(new Set(i).size!==i.length||r.length+1!==i.length)return;let s={portId:i[0],nextRegionId:r[0],f:0,g:0,h:0};for(let c=1;c<i.length;c++)s={portId:i[c],prevRegionId:r[c-1],nextRegionId:r[c]??r[c-1],prevCandidate:s,f:0,g:0,h:0};let a=e.portId===t.portId?0:this.computeG(e,t.portId)-e.g;return{candidate:s,cost:e.g+t.g+a}}considerOutsideInJoins(e,t){let n=this.outsideInRouteSearch,o=t?n.reverse:n.forward,i=(s)=>{!s||s.cost>=n.bestJoinedCost||(n.bestJoinedCandidate=s.candidate,n.bestJoinedCost=s.cost,n.remainingPostMeetingExpansions=24)},r=o.settledByPortId.get(e.portId);r&&i(t?this.buildJoinedCandidate(e,r):this.buildJoinedCandidate(r,e));for(let s of o.settledByRegionId.get(e.nextRegionId)??[])i(t?this.buildJoinedCandidate(e,s):this.buildJoinedCandidate(s,e))}commitBestOutsideInJoin(){let e=this.outsideInRouteSearch?.bestJoinedCandidate;return!!e&&(this.onPathFound(e),!0)}expandOutsideInFrontier(e){let t=this.outsideInRouteSearch,n=e?t.forward:t.reverse,o=this.dequeueFreshCandidate(n);if(!o)return!1;if(e?this.outsideInForwardExpansionCount+=1:this.outsideInReverseExpansionCount+=1,this.isRegionReservedForDifferentNet(o.nextRegionId))return!0;this.recordSettledCandidate(n,o),this.considerOutsideInJoins(o,e);for(let i of this.topology.regionIncidentPorts[o.nextRegionId]??[]){if(i===o.portId)continue;if(this.isPortReservedForDifferentNet(i))continue;let r=this.state.portAssignment[i];if(r!==-1&&r!==this.state.currentRouteNetId)continue;if(i!==n.targetPortId&&this.problem.portSectionMask[i]===0)continue;let s=this.topology.portX[o.portId]-this.topology.portX[i],a=this.topology.portY[o.portId]-this.topology.portY[i],c=Math.sqrt(s*s+a*a),l=o.travelDistance+c;if(l>this.OUTSIDE_IN_MAX_DISTANCE){t.distanceLimitHit=!0,this.outsideInDistancePruneCount+=1;continue}let d=this.topology.incidentPortRegion[i]?.[0]===o.nextRegionId?this.topology.incidentPortRegion[i]?.[1]:this.topology.incidentPortRegion[i]?.[0];if(d===void 0||this.isRegionReservedForDifferentNet(d))continue;let u=this.getHopId(i,d),h=n.bestCostByHopId.get(u)??1/0;if(o.g>=h)continue;let A=this.computeG(o,i,h,c);if(!Number.isFinite(A)||A>=h)continue;n.bestCostByHopId.set(u,A);let m=this.topology.portX[i]-this.topology.portX[n.targetPortId],p=this.topology.portY[i]-this.topology.portY[n.targetPortId],g=Math.sqrt(m*m+p*p)*this.DISTANCE_TO_COST;n.queue.queue({portId:i,prevRegionId:o.nextRegionId,nextRegionId:d,prevCandidate:o,f:A+g,g:A,h:g,travelDistance:l})}return!0}fallBackToOneSidedRouteSearch(){let e=this.state.currentRouteId;e!==void 0&&(this.outsideInRouteSearch=void 0,this.outsideInFallbackRouteCount+=1,this.oneSidedFallbackRouteId=e,this.state.currentRouteId=void 0,this.state.currentRouteNetId=void 0,this.state.goalPortId=-1,this.state.candidateQueue.clear(),this.resetCandidateBestCosts(),this.state.unroutedRoutes.unshift(e),this.publishOutsideInStats())}_step(){if(!this.OUTSIDE_IN_ROUTING)return void super._step();let e=this.state.currentRouteId??this.state.unroutedRoutes[0];if(e!==void 0&&!this.partialRipRoutePlans.has(e))return void super._step();if(this.oneSidedFallbackRouteId!==void 0)return void super._step();if(this.state.currentRouteId===void 0){if(this.state.unroutedRoutes.length===0)return void this.onAllRoutesRouted();let o=this.state.unroutedRoutes.shift();if(this.state.currentRouteId=o,this.state.currentRouteNetId=this.problem.routeNet[o],this.routeAttemptCountByRouteId[o]+=1,!this.startOutsideInRouteSearch(o))return this.failed=!0,void(this.error=`Route ${o} has an endpoint without an incident region`)}let t=this.outsideInRouteSearch;if(!t)return;let n=this.expandOutsideInFrontier(t.expandForwardNext);if(this.state.currentRouteId!==void 0&&(n||(n=this.expandOutsideInFrontier(!t.expandForwardNext),this.state.currentRouteId!==void 0)))if(t.expandForwardNext=!t.expandForwardNext,t.bestJoinedCandidate&&(t.remainingPostMeetingExpansions=(t.remainingPostMeetingExpansions??1)-1,(t.remainingPostMeetingExpansions??0)<=0))this.commitBestOutsideInJoin();else{if(!n&&t.forward.queue.length===0&&t.reverse.queue.length===0){if(this.commitBestOutsideInJoin())return;this.outsideInRouteSearch=void 0,t.distanceLimitHit?this.fallBackToOneSidedRouteSearch():this.onOutOfCandidates()}this.publishOutsideInStats()}}shouldReplaceBestSolvedState(e){let t=this.bestSolvedRoundSummary;if(!t)return!0;if(!this.useComplexityAwareSelection)return this.compareRegionCostSummaries(e,t)<0;let n=this.partialRipQualityBaselineSummary;if(!n)return this.compareRegionCostSummaries(e,t)<0;let o=this.firstCompletedRoundSummary??n,i=o.maxRegionCost*(1+Math.max(0,this.PARTIAL_RIP_MAX_REGION_COST_GROWTH_RATIO)),r=o.totalRegionCost*(1+Math.max(0,this.PARTIAL_RIP_MAX_TOTAL_COST_GROWTH_RATIO)),s=e.maxRegionCost<=i&&e.totalRegionCost<=r;return s!==(t.maxRegionCost<=i&&t.totalRegionCost<=r)?s:s&&e.segmentCount!==t.segmentCount?e.segmentCount<t.segmentCount:this.compareRegionCostSummaries(e,t)<0}onAllRoutesRouted(){if(!this.PARTIAL_RIP_ENABLED)return void super.onAllRoutesRouted();let{state:e,topology:t}=this,n=Math.min(this.RIP_THRESHOLD_RAMP_ATTEMPTS,this.PARTIAL_RIP_MAX_ATTEMPTS),o=Math.max(0,this.RIP_THRESHOLD_RAMP_ATTEMPTS),i=o<=0?1:Math.min(1,e.ripCount/o),r=this.RIP_THRESHOLD_START+(this.RIP_THRESHOLD_END-this.RIP_THRESHOLD_START)*i,s=new Float64Array(t.regionCount),a=[],c=0,l=0,d=0,u=0,h=0;for(let E=0;E<t.regionCount;E++){let B=e.regionIntersectionCaches[E]?.existingRegionCost??0;s[E]=B,c=Math.max(c,B),l+=B;let w=e.regionSegments[E]?.length??0;d+=w,u=Math.max(u,w),h+=w*w,B>r&&a.push(E)}let A={maxRegionCost:c,totalRegionCost:l},m={...A,ripCount:e.ripCount,segmentCount:d,maxRegionSegmentCount:u,squaredRegionSegmentCount:h};this.completedRoundSummaries.push(m),this.firstCompletedRoundSummary??=m,this.partialRipQualityBaselineSummary===void 0&&e.ripCount>=Math.max(0,this.PARTIAL_RIP_WARMUP_FULL_RIP_ATTEMPTS)&&(this.partialRipQualityBaselineSummary=m),this.shouldReplaceBestSolvedState(m)&&(this.replaceBestSolvedState(A),this.bestSolvedRoundSummary=m);let p=this.firstCompletedRoundSummary,g=this.partialRipQualityBaselineSummary??p,_=Math.max(0,this.PARTIAL_RIP_TARGET_MAX_COST_IMPROVEMENT_RATIO),f=Math.max(0,this.PARTIAL_RIP_MAX_TOTAL_COST_GROWTH_RATIO),y=g.maxRegionCost*(1-_),x=g.totalRegionCost*(1+f),C=this.useComplexityAwareSelection&&e.ripCount>g.ripCount&&_>0&&c<=y&&l<=x&&d<=g.segmentCount;if(C&&(this.partialRipTargetReached=!0),this.stats={...this.stats,currentRipThreshold:r,hotRegionCount:a.length,maxRegionCost:c,totalRegionCost:l,bestMaxRegionCost:this.bestSolvedStateSummary?.maxRegionCost,bestTotalRegionCost:this.bestSolvedStateSummary?.totalRegionCost,ripCount:e.ripCount,completedRoundSummaries:this.completedRoundSummaries.map((E)=>({...E})),firstMaxRegionCost:p.maxRegionCost,firstTotalRegionCost:p.totalRegionCost,firstSegmentCount:p.segmentCount,firstMaxRegionSegmentCount:p.maxRegionSegmentCount,firstSquaredRegionSegmentCount:p.squaredRegionSegmentCount,partialRipQualityBaselineRipCount:g.ripCount,partialRipQualityBaselineMaxRegionCost:g.maxRegionCost,partialRipQualityBaselineTotalRegionCost:g.totalRegionCost,partialRipQualityBaselineSegmentCount:g.segmentCount,partialRipQualityBaselineMaxRegionSegmentCount:g.maxRegionSegmentCount,partialRipQualityBaselineSquaredRegionSegmentCount:g.squaredRegionSegmentCount,bestSolvedSegmentCount:this.bestSolvedRoundSummary?.segmentCount,bestSolvedMaxRegionSegmentCount:this.bestSolvedRoundSummary?.maxRegionSegmentCount,bestSolvedSquaredRegionSegmentCount:this.bestSolvedRoundSummary?.squaredRegionSegmentCount,partialRipTargetMaxRegionCost:y,partialRipMaxTargetTotalRegionCost:x,partialRipComplexityAwareSelection:this.useComplexityAwareSelection,partialRipComplexitySelectionMinRouteCount:this.PARTIAL_RIP_COMPLEXITY_SELECTION_MIN_ROUTE_COUNT,partialRipMaxRegionCostGrowthRatio:this.PARTIAL_RIP_MAX_REGION_COST_GROWTH_RATIO,partialRipTargetReached:this.partialRipTargetReached},this.publishPartialRipStats(),a.length===0||C||e.ripCount>=n)return this.restoreBestSolvedState(),void(this.solved=!0);for(let E=0;E<t.regionCount;E++)e.regionCongestionCost[E]+=s[E]*this.RIP_CONGESTION_REGION_COST_FACTOR;let I=e.ripCount<Math.max(0,this.PARTIAL_RIP_WARMUP_FULL_RIP_ATTEMPTS);e.ripCount+=1;let b=!I&&this.preparePartialRip(a,s);b||this.resetRoutingStateForRerip();let P=I?"warmup_full":b?"partial":"full_fallback";this.stats={...this.stats,ripCount:e.ripCount,maxRegionCostBeforeRip:c,reripRegionCount:a.length,reripMode:P,partialRipWarmupFullRipAttempts:this.PARTIAL_RIP_WARMUP_FULL_RIP_ATTEMPTS},this.logRipEvent("hot_regions",c,{hotRegionCount:a.length,currentRipThreshold:r,reripMode:P,partialRouteCount:b?this.partialRipRoutePlans.size:0})}},cGt=(e)=>{let t=typeof e.d?.netId=="number"?e.d.netId:typeof e.d?.NetId=="number"?e.d.NetId:void 0;return Number.isFinite(t)?t:void 0},pOo=(e)=>{let t=new Set;for(let r of e.connections??[])t.add(r.startRegionId),t.add(r.endRegionId);let n=new Set(e.regions.filter((r)=>((s)=>{if(s.d?._containsObstacle!==!0)return!1;let a=cGt(s);return a===void 0||a===-1})(r)&&!t.has(r.regionId)).map((r)=>r.regionId));if(n.size===0)return e;let o=e.ports.filter((r)=>!n.has(r.region1Id)&&!n.has(r.region2Id)),i=(e.connections??[]).find((r)=>n.has(r.startRegionId)||n.has(r.endRegionId));if(i)throw Error(`Connection "${i.connectionId}" references full-obstacle region`);return{...e,regions:e.regions.filter((r)=>!n.has(r.regionId)),ports:o}},lGt=(e)=>{let t=e.d?.bounds;if(t)return t;let n=e.d?.center,o=e.d?.width,i=e.d?.height;return n&&typeof n.x=="number"&&typeof n.y=="number"&&typeof o=="number"&&typeof i=="number"?{minX:n.x-o/2,maxX:n.x+o/2,minY:n.y-i/2,maxY:n.y+i/2}:{minX:0,maxX:0,minY:0,maxY:0}},dGt=(e)=>Number(e.d?.x??0),uGt=(e)=>Number(e.d?.y??0),H4t=(e,t)=>{if(!t)return 0;let n=lGt(t),o=dGt(e),i=uGt(e),r=n.minX<=o&&o<=n.maxX,s=n.minY<=i&&i<=n.maxY;if(s&&o>=n.maxX){let p=Math.max(n.maxY-n.minY,0.000000001),g=(i-n.minY)/p;return Math.round(9000*g)}if(r&&i>=n.maxY){let p=Math.max(n.maxX-n.minX,0.000000001),g=(n.maxX-o)/p;return 9000+Math.round(9000*g)}if(s&&o<=n.minX){let p=Math.max(n.maxY-n.minY,0.000000001),g=(n.maxY-i)/p;return 18000+Math.round(9000*g)}if(r&&i<=n.minY){let p=Math.max(n.maxX-n.minX,0.000000001),g=(o-n.minX)/p;return 27000+Math.round(9000*g)}let a=Math.abs(o-n.minX),c=Math.abs(o-n.maxX),l=Math.abs(i-n.minY),d=Math.abs(i-n.maxY),u=Math.min(a,c,l,d),h=Math.max(n.maxX-n.minX,0.000000001),A=Math.max(n.maxY-n.minY,0.000000001);if(u===c){let p=(i-n.minY)/A;return Math.round(9000*p)}if(u===d){let p=(n.maxX-o)/h;return 9000+Math.round(9000*p)}if(u===a){let p=(n.maxY-i)/A;return 18000+Math.round(9000*p)}let m=(o-n.minX)/h;return 27000+Math.round(9000*m)},O4t=(e,t)=>{if(!e)return;return[...e.pointIds].sort((n,o)=>{let i=t.get(n),r=t.get(o),s=Number(i?.d?.distToCentermostPortOnZ??Number.POSITIVE_INFINITY),a=Number(r?.d?.distToCentermostPortOnZ??Number.POSITIVE_INFINITY);if(s!==a)return s-a;let c=Number(i?.d?.z??0),l=Number(r?.d?.z??0);return c!==l?c-l:n.localeCompare(o)})[0]},DHe=(e)=>{let t=pOo(e),n=new Map,o=new Map,i=new Map,r=new Map((t.solvedRoutes??[]).map((ie)=>[ie.connection.connectionId,ie]));t.regions.forEach((ie,J)=>{n.set(ie.regionId,J)}),t.ports.forEach((ie,J)=>{o.set(ie.portId,J),i.set(ie.portId,ie)});let s=t.regions.length,a=t.ports.length,c=t.regions.map((ie)=>ie.pointIds.map((J)=>o.get(J)).filter((J)=>J!==void 0)),l=Array.from({length:a},()=>[]),d=new Float64Array(s),u=new Float64Array(s),h=new Float64Array(s),A=new Float64Array(s),m=new Int32Array(s),p=new Int32Array(s).fill(-1),g=new Int8Array(s);t.regions.forEach((ie,J)=>{let ee=((le)=>{let he=lGt(le),ue=typeof le.d?.width=="number"?le.d.width:he.maxX-he.minX,Ae=typeof le.d?.height=="number"?le.d.height:he.maxY-he.minY;return{centerX:typeof le.d?.center?.x=="number"?le.d.center.x:(he.minX+he.maxX)/2,centerY:typeof le.d?.center?.y=="number"?le.d.center.y:(he.minY+he.maxY)/2,width:ue,height:Ae}})(ie);d[J]=ee.width,u[J]=ee.height,h[J]=ee.centerX,A[J]=ee.centerY,m[J]=((le)=>{let he=le.d?.availableZ;if(!Array.isArray(he))return 0;let ue=0;for(let Ae of he)!Number.isInteger(Ae)||Ae<0||Ae>=31||(ue|=1<<Ae);return ue})(ie);let se=cGt(ie);se!==void 0&&(p[J]=se,g[J]=1)});let _=new Int32Array(a),f=new Int32Array(a),y=new Float64Array(a),x=new Float64Array(a),C=new Int32Array(a);t.ports.forEach((ie,J)=>{let ee=n.get(ie.region1Id),se=n.get(ie.region2Id);if(ee===void 0||se===void 0)throw Error(`Port "${ie.portId}" references missing regions "${ie.region1Id}" or "${ie.region2Id}"`);l[J]=[ee,se],y[J]=dGt(ie),x[J]=uGt(ie),C[J]=((le)=>{let he=Number(le.d?.z??0);return Number.isFinite(he)?he:0})(ie),_[J]=H4t(ie,t.regions[ee]),f[J]=H4t(ie,t.regions[se])});let I=t.regions.map((ie,J)=>((ee,se)=>{let le=ee.d&&typeof ee.d=="object"&&!Array.isArray(ee.d)?{...ee.d}:{value:ee.d};return le.layer=se,Object.defineProperty(le,"serializedRegionId",{value:ee.regionId,enumerable:!1,configurable:!0,writable:!0}),le})(ie,((ee)=>gS(THe(m[ee]))??gS((c[ee]??[]).map((se)=>C[se]))??"z0")(J))),b=t.ports.map((ie,J)=>((ee,se)=>{let le=ee.d&&typeof ee.d=="object"&&!Array.isArray(ee.d)?{...ee.d}:{value:ee.d};return le.layer=se,Object.defineProperty(le,"serializedPortId",{value:ee.portId,enumerable:!1,configurable:!0,writable:!0}),le})(ie,gS([C[J]])??"z0")),P=t.connections??[],E=new Map,B=0,w=(ie)=>{let J=ie.mutuallyConnectedNetworkId??ie.connectionId,ee=E.get(J);return ee===void 0&&(ee=B++,E.set(J,ee)),ee},T=Array.from({length:s},()=>new Set),Q=(ie,J)=>{let ee=n.get(ie);if(ee===void 0)throw Error(`Connection references missing region "${ie}"`);T[ee].add(J)};P.forEach((ie)=>{let J=w(ie);Q(ie.startRegionId,J),Q(ie.endRegionId,J)}),T.forEach((ie,J)=>{g[J]!==1&&ie.size===1&&(p[J]=[...ie][0])});let N=P.map((ie)=>{let J=r.get(ie.connectionId),ee=((se,le)=>se.ports.filter((he)=>he.region1Id===le.startRegionId&&he.region2Id===le.endRegionId||he.region2Id===le.startRegionId&&he.region1Id===le.endRegionId).map((he)=>he.portId))(t,ie);return{connection:ie,solvedRoute:J,sharedPortIds:ee}}).filter(({solvedRoute:ie,sharedPortIds:J})=>J.length===0||(ie?.path.length??0)>1),F=N.length,H=new Map(N.map(({connection:ie},J)=>[ie.connectionId,J])),z=new Int8Array(a).fill(1),Y=new Int32Array(F),U=new Int32Array(F),X=new Int32Array(F);N.forEach(({connection:ie,solvedRoute:J},ee)=>{let se=O4t(t.regions.find((Pe)=>Pe.regionId===ie.startRegionId),i),le=O4t(t.regions.find((Pe)=>Pe.regionId===ie.endRegionId),i),he=J?.path[0]?.portId??se,ue=J?.path[J.path.length-1]?.portId??le,Ae=he!==void 0?o.get(he):void 0,_e=ue!==void 0?o.get(ue):void 0;if(Ae===void 0||_e===void 0)throw Error(`Connection "${ie.connectionId}" could not be mapped to route endpoints`);Y[ee]=Ae,U[ee]=_e,X[ee]=w(ie)});let V={portCount:a,regionCount:s,regionIncidentPorts:c,incidentPortRegion:l,regionWidth:d,regionHeight:u,regionCenterX:h,regionCenterY:A,regionAvailableZMask:m,regionMetadata:I,portAngleForRegion1:_,portAngleForRegion2:f,portX:y,portY:x,portZ:C,portMetadata:b},W=t.regions.flatMap((ie,J)=>(ie.assignments??[]).map((ee)=>{let se=H.get(ee.connectionId);if(se===void 0)throw Error(`Region "${ie.regionId}" assignment references unknown routable connection "${ee.connectionId}"`);let le=o.get(ee.regionPort1Id),he=o.get(ee.regionPort2Id);if(le===void 0||he===void 0)throw Error(`Region "${ie.regionId}" assignment references missing port "${le===void 0?ee.regionPort1Id:ee.regionPort2Id}"`);if(!c[J]?.includes(le)||!c[J]?.includes(he))throw Error(`Region "${ie.regionId}" assignment ports must both belong to the region`);return{routeId:se,regionId:J,fromPortId:le,toPortId:he}})),j=Float64Array.from(t.ports,(ie)=>{let J=Number(ie.d?.tinyHypergraphPortPenalty??0);return Number.isFinite(J)&&J>0?J:0}),q=j.some((ie)=>ie>0),ne={routeCount:F,portSectionMask:z,routeMetadata:N.map(({connection:ie})=>ie),routeStartPort:Y,routeEndPort:U,routeNet:X,regionNetId:p,...W.length>0&&{initialAssignments:W},...q&&{portPenalty:j}},ce=[],oe=[];for(let{solvedRoute:ie}of N){if(!ie){ce.push([]),oe.push([]);continue}let J=[],ee=[];for(let se=1;se<ie.path.length;se++){let le=ie.path[se-1],he=ie.path[se],ue=le?.portId,Ae=he?.portId,_e=ue!==void 0?o.get(ue):void 0,Pe=Ae!==void 0?o.get(Ae):void 0;if(_e===void 0||Pe===void 0)continue;let Ee=typeof le?.nextRegionId=="string"?le.nextRegionId:typeof he?.lastRegionId=="string"?he.lastRegionId:void 0;J.push([_e,Pe]),ee.push(Ee!==void 0?n.get(Ee):void 0)}ce.push(J),oe.push(ee)}return{topology:V,problem:ne,solution:{solvedRoutePathSegments:ce,solvedRoutePathRegionIds:oe}}},kV=(e)=>typeof e=="object"&&e!==null,yV=(e)=>Array.isArray(e)?e.map((t)=>yV(t)):kV(e)?Object.fromEntries(Object.entries(e).map(([t,n])=>[t,yV(n)])):e,AOo=(e)=>kV(e)?{...e}:e===void 0?{}:{value:e},B8=(e,t=0)=>typeof e=="number"&&Number.isFinite(e)?e:t,Ste=(e)=>({x:B8(e.d?.x),y:B8(e.d?.y)}),z4t=(e)=>[e.region1Id,e.region2Id].sort().join("\x00"),_Oo=(e,t)=>Math.hypot(e.x-t.x,e.y-t.y),G4t=(e)=>{let t=Math.hypot(e.x,e.y);if(!(t<=0.000000001))return{x:e.x/t,y:e.y/t}},Y4t=(e)=>{let t=e?.d?.center;if(kV(t))return{x:B8(t.x),y:B8(t.y)};let n=((o)=>{let i=o?.d?.bounds;if(kV(i)&&typeof i.minX=="number"&&typeof i.maxX=="number"&&typeof i.minY=="number"&&typeof i.maxY=="number")return{minX:i.minX,maxX:i.maxX,minY:i.minY,maxY:i.maxY};let r=o?.d?.center,s=B8(o?.d?.width),a=B8(o?.d?.height);if(kV(r)){let c=B8(r.x),l=B8(r.y);return{minX:c-s/2,maxX:c+s/2,minY:l-a/2,maxY:l+a/2}}return{minX:0,maxX:0,minY:0,maxY:0}})(e);return{x:(n.minX+n.maxX)/2,y:(n.minY+n.maxY)/2}},gOo=(e,t)=>{let n=Ste(e),o,i=Number.POSITIVE_INFINITY;for(let r of t){if(r.portId===e.portId)continue;let s=_Oo(n,Ste(r));s<=0.000000001||s>=i||(o=r,i=s)}return o},fOo=(e,t,n)=>{let o=Ste(e);if(t){let i=Ste(t),r=G4t({x:o.x-i.x,y:o.y-i.y});if(r)return r}return((i,r)=>{let s=Y4t(r.get(i.region1Id)),a=Y4t(r.get(i.region2Id));return G4t({x:-(a.y-s.y),y:a.x-s.x})??{x:1,y:0}})(e,n)},yOo=(e,t,n)=>{let o=`${e}::dup${t}`;if(!n.has(o))return n.add(o),o;for(let i=2;;i++){let r=`${o}-${i}`;if(!n.has(r))return n.add(r),r}},xOo=(e,t,n)=>{let o=e.indexOf(t);o!==-1?e.splice(o+1,0,...n):e.push(...n)},COo=(e,t)=>{let n=e.portMetadata?.[t];if(kV(n)){if(typeof n.serializedPortId=="string")return n.serializedPortId;if(typeof n.portId=="string")return n.portId}return`port-${t}`},IOo=(e,t)=>({routeCount:1,portSectionMask:e.portSectionMask,routeMetadata:e.routeMetadata===void 0?void 0:[e.routeMetadata[t]],routeStartPort:Int32Array.from([e.routeStartPort[t]]),routeEndPort:Int32Array.from([e.routeEndPort[t]]),routeNet:Int32Array.from([e.routeNet[t]]),regionNetId:e.regionNetId,portPenalty:e.portPenalty}),bOo=(e)=>{let t=new Set;for(let n of e.state.regionSegments)for(let[,o,i]of n)t.add(o),t.add(i);return t.size===0&&e.problem.routeCount===1&&(t.add(e.problem.routeStartPort[0]),t.add(e.problem.routeEndPort[0])),t},SOo=class extends Js{constructor(e,t={}){super(),this.serializedHyperGraph=e,this.options=t}serializedHyperGraph;options;revisedSerializedHyperGraph;report={portUseCounts:{},duplicatedPorts:[]};getDuplicatePortProximity(){return this.options.duplicatePortProximity??0.05}getIndividualRouteSolveOptions(){return{RIP_THRESHOLD_RAMP_ATTEMPTS:0,STATIC_REACHABILITY_PRECHECK:!1,...this.options.routeSolveOptions}}getPortUseCounts(){let{topology:e,problem:t}=DHe(this.serializedHyperGraph);this.options.useSerializedPortPenalties===!1&&(t.portPenalty=void 0);let n=new Map,o;for(let i=0;i<t.routeCount;i++){let r=IOo(t,i);if(o?o.resetForProblem(r):o=new nT(e,r,this.getIndividualRouteSolveOptions()),o.solve(),!o.solved||o.failed)throw Error(`Route ${i} could not be solved independently: ${o.error??"unknown error"}`);for(let s of bOo(o)){let a=COo(e,s);n.set(a,(n.get(a)??0)+1)}}return n}duplicateCongestedPorts(e){let t=this.getDuplicatePortProximity();if(!(t>0))throw Error("duplicatePortProximity must be greater than zero");let{solvedRoutes:n,...o}=this.serializedHyperGraph,i=this.serializedHyperGraph.regions.map((u)=>({...u,pointIds:[...u.pointIds],d:yV(u.d)})),r=this.serializedHyperGraph.ports.map((u)=>({...u,d:yV(u.d)})),s=new Map(i.map((u)=>[u.regionId,u])),a=new Map(r.map((u)=>[u.portId,u])),c=((u)=>{let h=new Map;for(let A of u){let m=z4t(A),p=h.get(m);p?p.push(A):h.set(m,[A])}return h})(this.serializedHyperGraph.ports),l=new Set(r.map((u)=>u.portId)),d=[];for(let[u,h]of[...e.entries()].sort(([A],[m])=>A.localeCompare(m))){if(h<=1)continue;let A=a.get(u);if(!A)continue;let m=h-1,p=c.get(z4t(A));if(!p)throw Error(`No boundary ports found for "${u}"`);let g=gOo(A,p),_=fOo(A,g,s),f=Ste(A),y=[];for(let x=1;x<=m;x++){let C=yOo(u,x,l),I=t*x/(m+1),b=AOo(yV(A.d));b.x=f.x+_.x*I,b.y=f.y+_.y*I,b.duplicatedFromPortId=u,b.duplicateIndex=x,b.duplicatePortUseCount=h,b.duplicatePortProximity=t,b.repairReason="congested-port",r.push({...A,portId:C,d:b}),y.push(C)}for(let x of[A.region1Id,A.region2Id]){let C=s.get(x);C&&xOo(C.pointIds,u,y)}d.push({sourcePortId:u,duplicatePortIds:y,useCount:h})}return this.report={portUseCounts:Object.fromEntries([...e.entries()].sort()),duplicatedPorts:d},{...o,regions:i,ports:r,connections:this.serializedHyperGraph.connections===void 0?void 0:yV(this.serializedHyperGraph.connections)}}_setup(){try{let e=this.getPortUseCounts();this.revisedSerializedHyperGraph=this.duplicateCongestedPorts(e),this.stats={...this.stats,duplicateSourcePortCount:this.report.duplicatedPorts.length,duplicatedPortCount:this.report.duplicatedPorts.reduce((t,n)=>t+n.duplicatePortIds.length,0)},this.solved=!0}catch(e){this.failed=!0,this.error=e instanceof Error?e.message:String(e)}}_step(){this.failed||(this.solved=!0)}getOutput(){if(!this.revisedSerializedHyperGraph||this.failed)throw Error("DuplicateCongestedPortSolver does not have a repaired topology output");return this.revisedSerializedHyperGraph}},ONe=(e,t)=>{let n=e.owners.size-t.owners.size;if(n!==0)return n;let o=e.distance-t.distance;return o!==0?o:e.queueOrder-t.queueOrder},POo=class{heap=[];push(e){this.heap.push(e);let t=this.heap.length-1;for(;t>0;){let n=Math.floor((t-1)/2);if(ONe(this.heap[n],this.heap[t])<=0)break;[this.heap[n],this.heap[t]]=[this.heap[t],this.heap[n]],t=n}}pop(){let e=this.heap[0],t=this.heap.pop();if(!e||!t)return null;if(this.heap.length===0)return e;this.heap[0]=t;let n=0;for(;;){let o=2*n+1,i=o+1,r=n;if(o<this.heap.length&&ONe(this.heap[o],this.heap[r])<0&&(r=o),i<this.heap.length&&ONe(this.heap[i],this.heap[r])<0&&(r=i),r===n)break;[this.heap[n],this.heap[r]]=[this.heap[r],this.heap[n]],n=r}return e}},vOo=(e,t,n)=>{if(e===t)return!0;if(e.size>t.size+n.length)return!1;for(let o of e)if(!t.has(o)&&!n.includes(o))return!1;return!0},EOo=(e,t)=>!(e.distance>t.distance)&&((n,o)=>{if(n.size>o.size)return!1;for(let i of n)if(!o.has(i))return!1;return!0})(e.owners,t.owners),MOo=(e,t)=>{let n=[],o=[],i=e;for(;i!==null;)n.push(i.state),i.incomingHop!==null&&o.push(i.incomingHop),i=i.parent;return n.reverse(),o.reverse(),{found:!0,states:n,hops:o,owners:new Set(e.owners),distance:e.distance,expandedLabelCount:t}},BOo=(e)=>{for(;;){let t=e.pop();if(t===null)return null;if(t.active)return t}},wOo=(e)=>{let t=e.maxExpandedLabels??Number.POSITIVE_INFINITY;if(t!==Number.POSITIVE_INFINITY&&(!Number.isInteger(t)||t<0))throw Error("maxExpandedLabels must be a non-negative integer");if(e.checkReachability){let a=((c,l)=>{let d=[c.start],u=new Set([c.getStateKey(c.start)]),h=0,A=0;for(let m=0;m<d.length;m++){let p=d[m];if(c.isGoal(p))return;if(h>=l)return;h++;for(let g of c.getHops(p)){if(A+=g.distance,g.distance<0||!Number.isFinite(A))return;let _=c.getStateKey(g.state);u.has(_)||(u.add(_),d.push(g.state))}}return{found:!1,reason:"no_path",expandedLabelCount:h}})(e,t);if(a)return a}let n=new Map,o=new POo,i=0,r=0,s={state:e.start,stateKey:e.getStateKey(e.start),owners:new Set,distance:0,parent:null,incomingHop:null,queueOrder:i++,active:!0};for(n.set(s.stateKey,[s]),o.push(s);;){let a=BOo(o);if(a===null)return{found:!1,reason:"no_path",expandedLabelCount:r};if(e.isGoal(a.state))return MOo(a,r);if(r>=t)return{found:!1,reason:"expansion_limit",expandedLabelCount:r};r++;for(let c of e.getHops(a.state)){if(!Number.isFinite(c.distance)||c.distance<0)throw Error("Distinct-owner blocker hops require finite distances >= 0");let l=a.distance+c.distance;if(!Number.isFinite(l))throw Error("Distinct-owner blocker path distance overflowed");let d=e.getStateKey(c.state),u=i++,h=n.get(d)??[],A=c.owners??[],m=!1;for(let f of h)if(f.distance<=l&&vOo(f.owners,a.owners,A)){m=!0;break}if(m)continue;let p=a.owners;for(let f of A)p.has(f)||(p===a.owners&&(p=new Set(a.owners)),p.add(f));let g={state:c.state,stateKey:d,owners:p,distance:l,parent:a,incomingHop:c,queueOrder:u,active:!0},_=[];for(let f of h)EOo(g,f)?f.active=!1:_.push(f);_.push(g),n.set(g.stateKey,_),o.push(g)}}},hGt=(e,t)=>{aGt(e,t),t&&(t.MAX_RIPS!==void 0&&(e.MAX_RIPS=t.MAX_RIPS),t.MAX_RIPS_WITHOUT_MAX_REGION_COST_IMPROVEMENT!==void 0&&(e.MAX_RIPS_WITHOUT_MAX_REGION_COST_IMPROVEMENT=t.MAX_RIPS_WITHOUT_MAX_REGION_COST_IMPROVEMENT),t.EXTRA_RIPS_AFTER_BEATING_BASELINE_MAX_REGION_COST!==void 0&&(e.EXTRA_RIPS_AFTER_BEATING_BASELINE_MAX_REGION_COST=t.EXTRA_RIPS_AFTER_BEATING_BASELINE_MAX_REGION_COST))},mGt=(e)=>e.map((t)=>t.map(([n,o,i])=>[n,o,i])),TOo=(e)=>({netIds:new Int32Array(e.netIds),lesserAngles:new Int32Array(e.lesserAngles),greaterAngles:new Int32Array(e.greaterAngles),layerMasks:new Int32Array(e.layerMasks),existingCrossingLayerIntersections:e.existingCrossingLayerIntersections,existingSameLayerIntersections:e.existingSameLayerIntersections,existingEntryExitLayerChanges:e.existingEntryExitLayerChanges,existingRegionCost:e.existingRegionCost,existingSegmentCount:e.existingSegmentCount}),dke=(e)=>({portAssignment:new Int32Array(e.portAssignment),regionSegments:mGt(e.regionSegments),regionIntersectionCaches:e.regionIntersectionCaches.map(TOo)}),zNe=(e,t)=>{let n=dke(t);e.state.portAssignment=n.portAssignment,e.state.regionSegments=n.regionSegments,e.state.regionIntersectionCaches=n.regionIntersectionCaches},V4t=(e)=>{let t=0,n=0;for(let o=0;o<e.length;o++){let i=e[o]?.existingRegionCost??0;t=Math.max(t,i),n+=i}return{maxRegionCost:t,totalRegionCost:n}},pGt=(e,t)=>e.maxRegionCost!==t.maxRegionCost?e.maxRegionCost-t.maxRegionCost:e.totalRegionCost-t.totalRegionCost,DOo=(e,t,n)=>{let o=e.incidentPortRegion[t]??[],i=e.incidentPortRegion[n]??[],r=o.find((s)=>i.includes(s));if(r===void 0)throw Error(`Ports ${t} and ${n} do not share a region`);return r},AGt=(e,t,n,o)=>{let i=n.solvedRoutePathSegments[o]??[],r=n.solvedRoutePathRegionIds?.[o]??[],s=t.routeStartPort[o],a=t.routeEndPort[o];if(i.length===0){if(s===a)return{orderedPortIds:[s],orderedRegionIds:[]};throw Error(`Route ${o} does not have an existing solved path`)}let c=new Map;i.forEach(([m,p],g)=>{let _={segmentIndex:g,fromPortId:m,toPortId:p,regionId:r[g]},f=c.get(m)??[];f.push(_),c.set(m,f);let y=c.get(p)??[];y.push(_),c.set(p,y)});let l=[s],d=[],u=new Set,h,A=s;for(;A!==a||u.size<i.length;){let m=(c.get(A)??[]).filter(({segmentIndex:_,fromPortId:f,toPortId:y})=>{if(u.has(_))return!1;let x=f===A?y:f,C=x===a&&u.size+1===i.length;return x!==h||C}),p=A===a&&u.size===0&&m.length===2||m.length===1?m[0]:void 0;if(!p)throw Error(`Route ${o} is not a single ordered path from ${s} to ${a}`);let g=p.fromPortId===A?p.toPortId:p.fromPortId;u.add(p.segmentIndex),d.push(p.regionId??DOo(e,p.fromPortId,p.toPortId)),l.push(g),h=A,A=g}if(u.size!==i.length)throw Error(`Route ${o} contains disconnected solved segments`);return{orderedPortIds:l,orderedRegionIds:d}},U4t=(e,t,n,o)=>{let i=new nT(e,t,o);return((r,s)=>{r.state.portAssignment.fill(-1),r.state.regionSegments=Array.from({length:r.topology.regionCount},()=>[]),r.state.regionIntersectionCaches=Array.from({length:r.topology.regionCount},()=>QV()),r.state.currentRouteId=void 0,r.state.currentRouteNetId=void 0,r.state.unroutedRoutes=[],r.state.candidateQueue.clear(),r.resetCandidateBestCosts(),r.state.goalPortId=-1,r.state.ripCount=0,r.state.regionCongestionCost.fill(0);for(let a=0;a<s.length;a++)for(let[c,l,d]of s[a]??[])r.state.currentRouteNetId=r.problem.routeNet[c],r.state.regionSegments[a].push([c,l,d]),r.state.portAssignment[l]=r.state.currentRouteNetId,r.state.portAssignment[d]=r.state.currentRouteNetId,r.appendSegmentToRegionCache(a,l,d);r.state.currentRouteId=void 0,r.state.currentRouteNetId=void 0,r.solved=!0,r.failed=!1,r.error=null})(i,n),i},_Gt=(e,t,n)=>{let o=new Int32Array(t.routeStartPort),i=new Int32Array(t.routeEndPort),r=Array.from({length:t.routeCount},(a,c)=>({routeId:c,fixedSegments:[]})),s=[];for(let a=0;a<t.routeCount;a++){let c=r[a],{orderedPortIds:l,orderedRegionIds:d}=AGt(e,t,n,a),u=[],h;for(let g=0;g<l.length;g++){let _=l[g],f=t.portSectionMask[_]===1;f&&h===void 0?h=g:f||h===void 0||(u.push({startIndex:h,endIndex:g-1}),h=void 0)}if(h!==void 0&&u.push({startIndex:h,endIndex:l.length-1}),u.length===0){for(let g=1;g<l.length;g++)c.fixedSegments.push({regionId:d[g-1],fromPortId:l[g-1],toPortId:l[g]});continue}if(u.length>1)throw Error(`Route ${a} enters the section multiple times; only one contiguous section span is currently supported`);let A=u[0],m=Math.max(0,A.startIndex-1),p=Math.min(l.length-1,A.endIndex+1);if(p<=m)throw Error(`Route ${a} does not have a valid section span`);for(let g=1;g<=m;g++)c.fixedSegments.push({regionId:d[g-1],fromPortId:l[g-1],toPortId:l[g]});for(let g=p+1;g<l.length;g++)c.fixedSegments.push({regionId:d[g-1],fromPortId:l[g-1],toPortId:l[g]});c.activeStartPortId=l[m],c.activeEndPortId=l[p],c.forcedStartRegionId=d[m],o[a]=c.activeStartPortId,i[a]=c.activeEndPortId,s.push(a)}return{sectionProblem:{routeCount:t.routeCount,portSectionMask:new Int8Array(t.portSectionMask),routeMetadata:t.routeMetadata,routeStartPort:o,routeEndPort:i,routeNet:new Int32Array(t.routeNet),regionNetId:new Int32Array(t.regionNetId),portPenalty:t.portPenalty===void 0?void 0:new Float64Array(t.portPenalty)},routePlans:r,activeRouteIds:s}},NOo=(e,t,n)=>_Gt(e,t,n).activeRouteIds,ROo=class extends nT{constructor(e,t,n,o,i,r,s,a){super(e,t,a),this.routePlans=n,this.activeRouteIds=o,this.mutableRegionIds=i,this.immutableRegionSummary=r,this.baselineSummary=s,hGt(this,a),this.state.unroutedRoutes=[...o],this.applyFixedSegments(),this.fixedSnapshot=dke({portAssignment:this.state.portAssignment,regionSegments:this.state.regionSegments,regionIntersectionCaches:this.state.regionIntersectionCaches})}routePlans;activeRouteIds;mutableRegionIds;immutableRegionSummary;baselineSummary;bestSnapshot;fixedSnapshot;bestSummary;baselineBeatRipCount;previousBestMaxRegionCost=Number.POSITIVE_INFINITY;ripsSinceBestMaxRegionCostImprovement=0;MAX_RIPS=Number.POSITIVE_INFINITY;MAX_RIPS_WITHOUT_MAX_REGION_COST_IMPROVEMENT=Number.POSITIVE_INFINITY;EXTRA_RIPS_AFTER_BEATING_BASELINE_MAX_REGION_COST=Number.POSITIVE_INFINITY;applyFixedSegments(){for(let e of this.routePlans)for(let{regionId:t,fromPortId:n,toPortId:o}of e.fixedSegments)this.state.currentRouteNetId=this.problem.routeNet[e.routeId],this.state.regionSegments[t].push([e.routeId,n,o]),this.state.portAssignment[n]=this.state.currentRouteNetId,this.state.portAssignment[o]=this.state.currentRouteNetId,this.appendSegmentToRegionCache(t,n,o);this.state.currentRouteId=void 0,this.state.currentRouteNetId=void 0}captureBestState(e){this.bestSummary&&pGt(e,this.bestSummary)>=0||(this.bestSummary=e,this.bestSnapshot=dke({portAssignment:this.state.portAssignment,regionSegments:this.state.regionSegments,regionIntersectionCaches:this.state.regionIntersectionCaches}))}restoreBestState(){this.bestSnapshot&&(zNe(this,this.bestSnapshot),this.state.currentRouteId=void 0,this.state.currentRouteNetId=void 0,this.state.unroutedRoutes=[],this.state.candidateQueue.clear(),this.resetCandidateBestCosts(),this.state.goalPortId=-1)}getStartingNextRegionId(e,t){let n=this.routePlans[e]?.forcedStartRegionId;return n!==void 0?n:super.getStartingNextRegionId(e,t)}resetRoutingStateForRerip(){if(!this.fixedSnapshot)return super.resetRoutingStateForRerip(),this.state.unroutedRoutes=yge([...this.activeRouteIds],this.state.ripCount),void this.applyFixedSegments();zNe(this,this.fixedSnapshot),this.state.currentRouteId=void 0,this.state.currentRouteNetId=void 0,this.state.unroutedRoutes=yge([...this.activeRouteIds],this.state.ripCount),this.state.candidateQueue.clear(),this.resetCandidateBestCosts(),this.state.goalPortId=-1}onAllRoutesRouted(){let{state:e}=this,t=Math.min(this.MAX_RIPS,this.RIP_THRESHOLD_RAMP_ATTEMPTS),n=t<=0?1:Math.min(1,e.ripCount/t),o=this.RIP_THRESHOLD_START+(this.RIP_THRESHOLD_END-this.RIP_THRESHOLD_START)*n,i=[],r=new Float64Array(this.mutableRegionIds.length),s=0,a=0;for(let u=0;u<this.mutableRegionIds.length;u++){let h=this.mutableRegionIds[u],A=e.regionIntersectionCaches[h]?.existingRegionCost??0;r[u]=A,s=Math.max(s,A),a+=A,A>o&&i.push(h)}let c=Math.max(this.immutableRegionSummary.maxRegionCost,s),l=this.immutableRegionSummary.totalRegionCost+a;this.captureBestState({maxRegionCost:c,totalRegionCost:l});let d=this.bestSummary??{maxRegionCost:c,totalRegionCost:l};if(d.maxRegionCost<this.previousBestMaxRegionCost-Number.EPSILON?(this.previousBestMaxRegionCost=d.maxRegionCost,this.ripsSinceBestMaxRegionCostImprovement=0):this.ripsSinceBestMaxRegionCostImprovement+=1,this.baselineBeatRipCount===void 0&&d.maxRegionCost<this.baselineSummary.maxRegionCost-Number.EPSILON&&(this.baselineBeatRipCount=e.ripCount),this.stats={...this.stats,activeRouteCount:this.activeRouteIds.length,currentRipThreshold:o,hotRegionCount:i.length,maxRegionCost:c,totalRegionCost:l,bestMaxRegionCost:d.maxRegionCost,bestTotalRegionCost:d.totalRegionCost,ripCount:e.ripCount},i.length===0||e.ripCount>=t||this.ripsSinceBestMaxRegionCostImprovement>=this.MAX_RIPS_WITHOUT_MAX_REGION_COST_IMPROVEMENT||this.baselineBeatRipCount!==void 0&&e.ripCount-this.baselineBeatRipCount>=this.EXTRA_RIPS_AFTER_BEATING_BASELINE_MAX_REGION_COST)return this.restoreBestState(),void(this.solved=!0);for(let u=0;u<this.mutableRegionIds.length;u++){let h=this.mutableRegionIds[u];e.regionCongestionCost[h]+=r[u]*this.RIP_CONGESTION_REGION_COST_FACTOR}e.ripCount+=1,this.resetRoutingStateForRerip(),this.stats={...this.stats,ripCount:e.ripCount,reripRegionCount:i.length}}onOutOfCandidates(){let{state:e}=this;for(let t of this.mutableRegionIds){let n=e.regionIntersectionCaches[t]?.existingRegionCost??0;e.regionCongestionCost[t]+=n*this.RIP_CONGESTION_REGION_COST_FACTOR}e.ripCount+=1,this.resetRoutingStateForRerip(),this.stats={...this.stats,ripCount:e.ripCount,reripReason:"out_of_candidates"}}tryFinalAcceptance(){if(this.bestSnapshot)return this.restoreBestState(),void(this.solved=!0);this.fixedSnapshot&&zNe(this,this.fixedSnapshot),this.state.currentRouteId=void 0,this.state.currentRouteNetId=void 0,this.state.unroutedRoutes=[...this.activeRouteIds],this.state.candidateQueue.clear(),this.resetCandidateBestCosts(),this.state.goalPortId=-1,this.stats={...this.stats,acceptedFixedSectionStateOnTimeout:!0},this.solved=!0}visualize(){return Cge(this,{highlightSectionMask:!0,showInitialRouteHints:!1,showOnlySectionPortsOnIdle:!0})}},Pte=class extends Js{constructor(e,t,n,o){super(),this.topology=e,this.problem=t,this.initialSolution=n,hGt(this,o),this.baselineSolver=((i,r,s,a)=>{let c=Array.from({length:i.regionCount},()=>[]);for(let l=0;l<r.routeCount;l++){let{orderedPortIds:d,orderedRegionIds:u}=AGt(i,r,s,l);for(let h=1;h<d.length;h++){let A=d[h-1],m=d[h];c[u[h-1]].push([l,A,m])}}return U4t(i,r,c,a)})(e,t,n,M_e(this)),this.baselineSummary=V4t(this.baselineSolver.state.regionIntersectionCaches),this.sectionRegionIds=((i,r)=>{let s=new Set;for(let a=0;a<r.portSectionMask.length;a++)if(r.portSectionMask[a]===1)for(let c of i.incidentPortRegion[a]??[])s.add(c);return[...s]})(e,t),this.sectionBaselineSummary=((i,r)=>{let s=0,a=0;for(let c of r){let l=i[c]?.existingRegionCost??0;s=Math.max(s,l),a+=l}return{maxRegionCost:s,totalRegionCost:a}})(this.baselineSolver.state.regionIntersectionCaches,this.sectionRegionIds),this.outsideSectionBaselineSummary=((i,r)=>{let s=new Set(r),a=0,c=0;for(let l=0;l<i.length;l++){if(s.has(l))continue;let d=i[l]?.existingRegionCost??0;a=Math.max(a,d),c+=d}return{maxRegionCost:a,totalRegionCost:c}})(this.baselineSolver.state.regionIntersectionCaches,this.sectionRegionIds),this.applySectionRipPolicy()}topology;problem;initialSolution;baselineSolver;baselineSummary;sectionBaselineSummary;outsideSectionBaselineSummary;sectionRegionIds;optimizedSolver;sectionSolver;activeRouteIds=[];DISTANCE_TO_COST=0.05;minViaPadDiameter=Xzt;VERBOSE=!1;RIP_THRESHOLD_START=0.05;RIP_THRESHOLD_END=0.8;RIP_THRESHOLD_RAMP_ATTEMPTS=50;MAX_RIPS=Number.POSITIVE_INFINITY;MAX_RIPS_WITHOUT_MAX_REGION_COST_IMPROVEMENT=10;EXTRA_RIPS_AFTER_BEATING_BASELINE_MAX_REGION_COST=10;RIP_CONGESTION_REGION_COST_FACTOR=0.1;MAX_ITERATIONS=1e6;STATIC_REACHABILITY_PRECHECK=!1;STATIC_REACHABILITY_PRECHECK_MAX_HOPS=16;ACCEPT_BEST_SOLUTION_ON_TIMEOUT=!0;GREEDY_FINAL_ROUTE_ITERS=4;applySectionRipPolicy(){this.RIP_THRESHOLD_START=0.05,this.RIP_THRESHOLD_END=Math.max(this.RIP_THRESHOLD_START,this.sectionBaselineSummary.maxRegionCost),this.MAX_RIPS=Math.min(this.MAX_RIPS,20)}_setup(){this.applySectionRipPolicy();let{sectionProblem:e,routePlans:t,activeRouteIds:n}=_Gt(this.topology,this.problem,this.initialSolution);if(this.activeRouteIds=n,n.length===0)return this.optimizedSolver=this.baselineSolver,this.stats={...this.stats,activeRouteCount:0,initialMaxRegionCost:this.baselineSummary.maxRegionCost,finalMaxRegionCost:this.baselineSummary.maxRegionCost,optimized:!1},void(this.solved=!0);var o;this.sectionSolver=new ROo(this.topology,e,t,n,this.sectionRegionIds,this.outsideSectionBaselineSummary,this.baselineSummary,{...M_e(o=this),MAX_RIPS:o.MAX_RIPS,MAX_RIPS_WITHOUT_MAX_REGION_COST_IMPROVEMENT:o.MAX_RIPS_WITHOUT_MAX_REGION_COST_IMPROVEMENT,EXTRA_RIPS_AFTER_BEATING_BASELINE_MAX_REGION_COST:o.EXTRA_RIPS_AFTER_BEATING_BASELINE_MAX_REGION_COST}),this.activeSubSolver=this.sectionSolver,this.stats={...this.stats,sectionBaselineMaxRegionCost:this.sectionBaselineSummary.maxRegionCost,sectionBaselineTotalRegionCost:this.sectionBaselineSummary.totalRegionCost,effectiveRipThresholdStart:this.RIP_THRESHOLD_START,effectiveRipThresholdEnd:this.RIP_THRESHOLD_END,effectiveMaxRips:this.MAX_RIPS}}_step(){if(!this.sectionSolver)return void(this.solved=!0);if(this.sectionSolver.step(),this.stats={...this.stats,...this.sectionSolver.stats,activeRouteCount:this.activeRouteIds.length},this.sectionSolver.failed)return this.optimizedSolver=this.baselineSolver,this.stats={...this.stats,initialMaxRegionCost:this.baselineSummary.maxRegionCost,initialTotalRegionCost:this.baselineSummary.totalRegionCost,finalMaxRegionCost:this.baselineSummary.maxRegionCost,finalTotalRegionCost:this.baselineSummary.totalRegionCost,optimized:!1,sectionSearchFailedFallbackToBaseline:!0,sectionSearchError:this.sectionSolver.error},void(this.solved=!0);if(!this.sectionSolver.solved)return;let e=U4t(this.topology,this.problem,mGt(this.sectionSolver.state.regionSegments),M_e(this)),t=V4t(e.state.regionIntersectionCaches),n=pGt(t,this.baselineSummary)<0;this.optimizedSolver=n?e:this.baselineSolver;let o=n?t:this.baselineSummary;this.stats={...this.stats,initialMaxRegionCost:this.baselineSummary.maxRegionCost,initialTotalRegionCost:this.baselineSummary.totalRegionCost,candidateMaxRegionCost:t.maxRegionCost,candidateTotalRegionCost:t.totalRegionCost,finalMaxRegionCost:o.maxRegionCost,finalTotalRegionCost:o.totalRegionCost,optimized:n},this.solved=!0}tryFinalAcceptance(){this.optimizedSolver=this.baselineSolver,this.stats={...this.stats,initialMaxRegionCost:this.baselineSummary.maxRegionCost,initialTotalRegionCost:this.baselineSummary.totalRegionCost,finalMaxRegionCost:this.baselineSummary.maxRegionCost,finalTotalRegionCost:this.baselineSummary.totalRegionCost,optimized:!1,sectionSolverTimeoutFallbackToBaseline:!0},this.solved=!0,this.failed=!1,this.error=null}getSolvedSolver(){if(!this.solved||this.failed||!this.optimizedSolver)throw Error("TinyHyperGraphSectionSolver does not have a solved output yet");return this.optimizedSolver}visualize(){return this.optimizedSolver?Cge(this.optimizedSolver,{highlightSectionMask:!0}):this.sectionSolver?this.sectionSolver.visualize():Cge(this.baselineSolver,{highlightSectionMask:!0,showInitialRouteHints:!1,showOnlySectionPortsOnIdle:!0})}getOutput(){return this.getSolvedSolver().getOutput()}},QOo=["self-touch","onehop-all","onehop-touch","twohop-all","twohop-touch"],kOo={"self-all":0,"self-touch":0,"onehop-all":1,"onehop-touch":1,"twohop-all":2,"twohop-touch":2,"threehop-all":3,"threehop-touch":3,"fourhop-all":4,"fourhop-touch":4},LOo=(e,t)=>{let n=new Set(t);for(let o of t)for(let i of e.regionIncidentPorts[o]??[])for(let r of e.incidentPortRegion[i]??[])n.add(r);return[...n]},FOo=(e,t,n)=>{let o=[...new Set(t)];for(let i=0;i<n;i+=1)o=LOo(e,o);return o},HOo=(e,t,n)=>t.flatMap((o)=>n.map((i)=>((r,s,a)=>({label:`hot-${s}-${a}`,family:a,regionIds:FOo(r,[s],kOo[a]),portSelectionRule:a.endsWith("-all")?"all-incident-regions-selected":"touches-selected-region"}))(e,o,i))),OOo={RIP_THRESHOLD_RAMP_ATTEMPTS:5},zOo={DISTANCE_TO_COST:0.05,RIP_THRESHOLD_RAMP_ATTEMPTS:16,RIP_CONGESTION_REGION_COST_FACTOR:0.1,MAX_ITERATIONS:50000,MAX_RIPS_WITHOUT_MAX_REGION_COST_IMPROVEMENT:6,EXTRA_RIPS_AFTER_BEATING_BASELINE_MAX_REGION_COST:Number.POSITIVE_INFINITY},uke=(e)=>e.state.regionIntersectionCaches.reduce((t,n)=>Math.max(t,n.existingRegionCost),0),GOo=(e,t)=>{let n=DHe(e),o=new Pte(n.topology,n.problem,n.solution,t);return uke(o.baselineSolver)},YOo=(e,t,n)=>{let o=new Set(t);return Int8Array.from({length:e.portCount},(i,r)=>{let s=e.incidentPortRegion[r]??[];return n==="touches-selected-region"?s.some((a)=>o.has(a))?1:0:s.length>0&&s.every((a)=>o.has(a))?1:0})},VOo=(e,t)=>({routeCount:e.routeCount,portSectionMask:t,routeMetadata:e.routeMetadata,routeStartPort:new Int32Array(e.routeStartPort),routeEndPort:new Int32Array(e.routeEndPort),routeNet:new Int32Array(e.routeNet),regionNetId:new Int32Array(e.regionNetId),portPenalty:e.portPenalty===void 0?void 0:new Float64Array(e.portPenalty)}),UOo=(e,t,n,o,i,r)=>{let s=performance.now(),a=performance.now(),c=new Pte(t,n,o,r),l=uke(c.baselineSolver),d=performance.now()-a,u,h,A=l,m=new Int8Array(t.portCount),p=0,g=0,_=0,f=0,y=0,x=0,C=0,I=new Set,b=i?.maxHotRegions??r.MAX_HOT_REGIONS??2;for(let P of((E,B,w,T)=>{let Q=E.state.regionIntersectionCaches.map((N,F)=>({regionId:F,regionCost:N.existingRegionCost})).filter(({regionCost:N})=>N>0).sort((N,F)=>F.regionCost-N.regionCost).slice(0,w).map(({regionId:N})=>N);return HOo(B,Q,T)})(e,t,b,i?.candidateFamilies??[...QOo])){let E=VOo(n,YOo(t,P.regionIds,P.portSelectionRule));p+=1;let B=E.portSectionMask.join(",");if(I.has(B))_+=1;else{I.add(B);try{let w=performance.now(),T=NOo(t,E,o);if(f+=performance.now()-w,T.length===0)continue;g+=1;let Q=performance.now(),N=new Pte(t,E,o,r);y+=performance.now()-Q;let F=performance.now();if(N.solve(),x+=performance.now()-F,N.failed||!N.solved)continue;if(Number(N.stats.finalMaxRegionCost??uke(N.getSolvedSolver()))<A-0.000000001){let H=performance.now(),z=GOo(N.getOutput(),r);C+=performance.now()-H,z<A-0.000000001&&(A=z,m=new Int8Array(E.portSectionMask),u=P.label,h=P.family)}}catch{}}}return{portSectionMask:m,baselineMaxRegionCost:l,finalMaxRegionCost:A,generatedCandidateCount:p,candidateCount:g,duplicateCandidateCount:_,totalMs:performance.now()-s,baselineEvaluationMs:d,candidateEligibilityMs:f,candidateInitMs:y,candidateSolveMs:x,candidateReplayScoreMs:C,winningCandidateLabel:u,winningCandidateFamily:h}},WOo=class extends KE{initialVisualizationSolver;selectedSectionMask;selectedSectionCandidateLabel;selectedSectionCandidateFamily;constructor(e){super(e),this.MAX_ITERATIONS=200000}loadHyperGraph(e){return DHe(e)}getSolveGraphOptions(){return{...OOo,...this.inputProblem.minViaPadDiameter===void 0?{}:{minViaPadDiameter:this.inputProblem.minViaPadDiameter},...this.inputProblem.solveGraphOptions}}getSectionSolverOptions(){return{...zOo,...this.inputProblem.minViaPadDiameter===void 0?{}:{minViaPadDiameter:this.inputProblem.minViaPadDiameter},...this.inputProblem.sectionSolverOptions}}pipelineDef=[{solverName:"solveGraph",solverClass:nT,getConstructorParams:(e)=>{let{topology:t,problem:n}=e.loadHyperGraph(e.inputProblem.serializedHyperGraph);return[t,n,e.getSolveGraphOptions()]}},{solverName:"optimizeSection",solverClass:Pte,getConstructorParams:(e)=>e.getSectionStageParams()}];getSectionStageParams(){let e=this.getStageOutput("solveGraph");if(!e)throw Error("solveGraph did not produce a solved serialized hypergraph");let t=this.getSolver("solveGraph");if(!t)throw Error("solveGraph solver is unavailable");let n=this.getSectionSolverOptions(),{topology:o,problem:i,solution:r}=this.loadHyperGraph(e),s=this.inputProblem.createSectionMask?this.inputProblem.createSectionMask({serializedHyperGraph:this.inputProblem.serializedHyperGraph,solvedSerializedHyperGraph:e,solvedSolver:t,topology:o,problem:i,solution:r}):(()=>{let a=UOo(t,o,i,r,this.inputProblem.sectionSearchConfig,n);return this.selectedSectionCandidateLabel=a.winningCandidateLabel,this.selectedSectionCandidateFamily=a.winningCandidateFamily,this.stats={...this.stats,sectionSearchGeneratedCandidateCount:a.generatedCandidateCount,sectionSearchCandidateCount:a.candidateCount,sectionSearchDuplicateCandidateCount:a.duplicateCandidateCount,sectionSearchBaselineMaxRegionCost:a.baselineMaxRegionCost,sectionSearchFinalMaxRegionCost:a.finalMaxRegionCost,sectionSearchDelta:a.baselineMaxRegionCost-a.finalMaxRegionCost,selectedSectionCandidateLabel:a.winningCandidateLabel??null,selectedSectionCandidateFamily:a.winningCandidateFamily??null,sectionSearchMs:a.totalMs,sectionSearchBaselineEvaluationMs:a.baselineEvaluationMs,sectionSearchCandidateEligibilityMs:a.candidateEligibilityMs,sectionSearchCandidateInitMs:a.candidateInitMs,sectionSearchCandidateSolveMs:a.candidateSolveMs,sectionSearchCandidateReplayScoreMs:a.candidateReplayScoreMs},a.portSectionMask})();return this.selectedSectionMask=new Int8Array(s),i.portSectionMask=new Int8Array(s),this.stats={...this.stats,sectionMaskPortCount:[...s].filter((a)=>a===1).length},[o,i,r,n]}getInitialVisualizationSolver(){if(!this.initialVisualizationSolver){let{topology:e,problem:t}=this.loadHyperGraph(this.inputProblem.serializedHyperGraph);this.initialVisualizationSolver=new nT(e,t,this.getSolveGraphOptions())}return this.initialVisualizationSolver}initialVisualize(){return this.getInitialVisualizationSolver().visualize()}visualize(){return this.iterations===0?this.initialVisualize()??super.visualize():super.visualize()}getOutput(){return this.getStageOutput("optimizeSection")??this.getStageOutput("solveGraph")??null}tryFinalAcceptance(){this.getStageOutput("solveGraph")&&(this.stats={...this.stats,acceptedSolveGraphOutputOnSectionPipelineTimeout:!0},this.activeSubSolver=void 0,this.solved=!0,this.failed=!1,this.error=null)}};var gGt=class extends mOo{costAwareFinalReripBudget=8;failedOwnerPairCounts=new Map;selectiveReripStats={selectiveRipCount:0,selectivelyRippedRouteCount:0,globalReripCount:0,alternateBlockerSearchCount:0,alternateOwnerCount:0,failedOwnerPairCount:0,maxFailedOwnerPairCount:0,failedOwnerPairs:[],lastDirectOwnerRouteIds:[],lastRepeatedOwnerRouteIds:[],lastAlternateOwnerRouteIds:[],lastRippedRouteIds:[],lastRelaxedSearchExpandedLabelCount:0,lastAlternateSearchExpandedLabelCount:0};selectiveReripCongestionUpdateCount=0;constructor(e,t,n){super(e,t,n)}getSelectiveReripStats(){return{...this.selectiveReripStats,failedOwnerPairs:this.selectiveReripStats.failedOwnerPairs.map((e)=>({...e})),lastDirectOwnerRouteIds:[...this.selectiveReripStats.lastDirectOwnerRouteIds],lastRepeatedOwnerRouteIds:[...this.selectiveReripStats.lastRepeatedOwnerRouteIds],lastAlternateOwnerRouteIds:[...this.selectiveReripStats.lastAlternateOwnerRouteIds],lastRippedRouteIds:[...this.selectiveReripStats.lastRippedRouteIds]}}createGreedyFinalRouteSolver(e,t){if(t>=0)return super.createGreedyFinalRouteSolver(e,t);let n=new XOo(this.topology,this.problem,{...e,MAX_ITERATIONS:Math.max(e.MAX_ITERATIONS??50000,2*this.MAX_ITERATIONS)});return n.remainingReripBudget=this.costAwareFinalReripBudget-this.state.ripCount,n}onOutOfCandidates(){let e=this.state.currentRouteId;if(e===void 0)throw Error("SelectiveReripTinyHyperGraphSolver: candidate search exhausted without a current route");let t=this.findRelaxedBlockerPathPreferringPreservedRoutes();if(!t.found||t.owners.size===0)return this.selectiveReripStats.globalReripCount+=1,this.selectiveReripStats.globalReripReason=t.found?"no_blocker_path":t.reason,this.selectiveReripStats.lastFailedRouteId=e,this.selectiveReripStats.lastDirectOwnerRouteIds=[],this.selectiveReripStats.lastRepeatedOwnerRouteIds=[],this.selectiveReripStats.lastAlternateOwnerRouteIds=[],this.selectiveReripStats.lastRippedRouteIds=[],this.selectiveReripStats.lastRelaxedSearchExpandedLabelCount=t.expandedLabelCount,this.selectiveReripStats.lastAlternateSearchExpandedLabelCount=0,super.onOutOfCandidates(),void this.publishSelectiveReripStats();let n=[...t.owners],o=[];for(let c of n)this.incrementFailedOwnerPair(e,c)>=2&&o.push(c);if(n.some((c)=>this.hasFailedOwnerPath(c,e)))return this.selectiveReripStats.globalReripCount+=1,this.selectiveReripStats.globalReripReason="failed_owner_cycle",this.selectiveReripStats.lastFailedRouteId=e,this.selectiveReripStats.lastDirectOwnerRouteIds=n,this.selectiveReripStats.lastRepeatedOwnerRouteIds=o,this.selectiveReripStats.lastAlternateOwnerRouteIds=[],this.selectiveReripStats.lastRippedRouteIds=[],this.selectiveReripStats.lastRelaxedSearchExpandedLabelCount=t.expandedLabelCount,this.selectiveReripStats.lastAlternateSearchExpandedLabelCount=0,this.failedOwnerPairCounts.clear(),super.onOutOfCandidates(),void this.publishSelectiveReripStats();let i;if(o.length>0&&(this.selectiveReripStats.alternateBlockerSearchCount+=1,i=this.findRelaxedBlockerPathPreferringPreservedRoutes(new Set(o)),!i.found))return this.selectiveReripStats.globalReripCount+=1,this.selectiveReripStats.globalReripReason=i.reason,this.selectiveReripStats.lastFailedRouteId=e,this.selectiveReripStats.lastDirectOwnerRouteIds=n,this.selectiveReripStats.lastRepeatedOwnerRouteIds=o,this.selectiveReripStats.lastAlternateOwnerRouteIds=[],this.selectiveReripStats.lastRippedRouteIds=[],this.selectiveReripStats.lastRelaxedSearchExpandedLabelCount=t.expandedLabelCount,this.selectiveReripStats.lastAlternateSearchExpandedLabelCount=i.expandedLabelCount,super.onOutOfCandidates(),void this.publishSelectiveReripStats();let r=i?.found?[...i.owners]:void 0,s=function(c){let l=new Set(c.alternateOwnerRouteIds??c.directOwnerRouteIds);if(l.delete(c.failedRouteId),l.size===0)throw Error(`SelectiveReripTinyHyperGraphSolver: route ${c.failedRouteId} has blocker resources but no distinct committed owner can be reripped`);return l}({failedRouteId:e,directOwnerRouteIds:n,alternateOwnerRouteIds:r});this.clearPartialRipPlans(s);let a=(r??[]).filter((c)=>!t.owners.has(c));this.selectiveReripCongestionUpdateCount<1&&(this.addCongestionCostForSelectiveRerip(),this.selectiveReripCongestionUpdateCount+=1),this.rebuildCommittedState(s),this.state.ripCount+=1,this.state.currentRouteId=void 0,this.state.currentRouteNetId=void 0,this.state.unroutedRoutes=function(c){let l=c.pendingRouteIds.filter((u)=>u!==c.failedRouteId&&!c.rippedRouteIds.has(u)),d=[...c.rippedRouteIds].filter((u)=>u!==c.failedRouteId);return[c.failedRouteId,...l,...d]}({failedRouteId:e,pendingRouteIds:this.state.unroutedRoutes,rippedRouteIds:s}),this.state.candidateQueue.clear(),this.resetCandidateBestCosts(),this.state.goalPortId=-1,this.selectiveReripStats.selectiveRipCount+=1,this.selectiveReripStats.selectivelyRippedRouteCount+=s.size,this.selectiveReripStats.alternateOwnerCount+=a.length,this.selectiveReripStats.lastFailedRouteId=e,this.selectiveReripStats.lastDirectOwnerRouteIds=n,this.selectiveReripStats.lastRepeatedOwnerRouteIds=o,this.selectiveReripStats.lastAlternateOwnerRouteIds=a,this.selectiveReripStats.lastRippedRouteIds=[...s],this.selectiveReripStats.lastRelaxedSearchExpandedLabelCount=t.expandedLabelCount,this.selectiveReripStats.lastAlternateSearchExpandedLabelCount=i?.expandedLabelCount??0,this.publishSelectiveReripStats()}addCongestionCostForSelectiveRerip(){for(let e=0;e<this.topology.regionCount;e++){let t=this.state.regionIntersectionCaches[e]?.existingRegionCost??0;this.state.regionCongestionCost[e]+=t*this.RIP_CONGESTION_REGION_COST_FACTOR}}findRelaxedBlockerPath(e=new Set){let t=this.state.currentRouteId,n=this.state.currentRouteNetId;if(t===void 0||n===void 0)throw Error("SelectiveReripTinyHyperGraphSolver: blocker search requires a current route and net");let o=this.getRouteStartPortId(t),i=this.getRouteEndPortId(t),r=this.getStartingNextRegionId(t,o);if(r===void 0)throw Error(`SelectiveReripTinyHyperGraphSolver: route ${this.describeRoute(t)} has no starting region for blocker search`);let s=this.getPortOwners(),a=new Map,c=new Map,l=new Map;return wOo({start:{portId:o,nextRegionId:r},getStateKey:({portId:d,nextRegionId:u})=>this.getHopId(d,u),isGoal:({portId:d})=>d===i,getHops:(d)=>{let u=this.getHopId(d.portId,d.nextRegionId),h=l.get(u);if(h)return h;let A=this.getRelaxedSearchHops({state:d,goalPortId:i,routeNetId:n,portOwners:s,portResources:a,hopTemplatesByRegion:c,forbiddenOwnerRouteIds:e});return l.set(u,A),A},maxExpandedLabels:this.getRelaxedSearchExpansionLimit(),checkReachability:!0})}findRelaxedBlockerPathPreferringPreservedRoutes(e=new Set){let t=this.getRouteIdsPreferredForPreservation();if(t.size===0)return this.findRelaxedBlockerPath(e);let n=new Set(e);for(let i of t)n.add(i);let o=this.findRelaxedBlockerPath(n);return o.found&&o.owners.size>0?o:this.findRelaxedBlockerPath(e)}getRelaxedSearchExpansionLimit(){let e=0;for(let n of this.topology.incidentPortRegion)e+=n.length;let t=Math.max(4,Math.ceil(Math.log2(this.problem.routeCount+1)));return Math.max(4096,e*t*4)}getRelaxedSearchHops(e){let{state:t,goalPortId:n,routeNetId:o}=e;if(this.isRegionReservedForDifferentNet(t.nextRegionId))return[];if(!e.buildRegionTemplates&&!this.isKnownSingleLayerRegion(t.nextRegionId)){let r=e.hopTemplatesByRegion.get(t.nextRegionId);r||(r=this.getRelaxedSearchHops({...e,buildRegionTemplates:!0}),e.hopTemplatesByRegion.set(t.nextRegionId,r));let s=[];for(let a of r)a.state.portId!==t.portId&&s.push({state:a.state,owners:a.owners,data:a.data,distance:Math.hypot(this.topology.portX[t.portId]-this.topology.portX[a.state.portId],this.topology.portY[t.portId]-this.topology.portY[a.state.portId])});return s}let i=[];for(let r of this.topology.regionIncidentPorts[t.nextRegionId]??[]){if(r===t.portId&&!e.buildRegionTemplates)continue;if(this.isPortReservedForDifferentNet(r))continue;if(r!==n&&this.problem.portSectionMask[r]===0)continue;let s=this.getHopBlockerResources({regionId:t.nextRegionId,fromPortId:t.portId,toPortId:r,routeNetId:o,portOwners:e.portOwners,portResources:e.portResources}),a=[];for(let l of s)for(let d of l.owners)a.includes(d)||a.push(d);if(a.some((l)=>e.forbiddenOwnerRouteIds.has(l)))continue;let c=t.nextRegionId;if(r!==n){let[l,d]=this.topology.incidentPortRegion[r]??[];if(c=l===t.nextRegionId?d:l,c===void 0||this.isRegionReservedForDifferentNet(c))continue}i.push({state:{portId:r,nextRegionId:c},distance:Math.hypot(this.topology.portX[t.portId]-this.topology.portX[r],this.topology.portY[t.portId]-this.topology.portY[r]),owners:a,data:{resources:s}})}return i}getHopBlockerResources(e){let t=[],n=this.state.portAssignment[e.toPortId];if(n!==-1&&n!==e.routeNetId){let i=e.portResources.get(e.toPortId);if(!i){let r=[...e.portOwners.get(e.toPortId)??new Set].filter((s)=>this.problem.routeNet[s]!==e.routeNetId);if(r.length===0)throw Error(`SelectiveReripTinyHyperGraphSolver: port ${e.toPortId} is assigned to foreign net ${n} without a committed route owner`);i={kind:"port",portId:e.toPortId,owners:r},e.portResources.set(e.toPortId,i)}t.push(i)}let o=this.getHardBlockedCrossingOwners(e.regionId,e.fromPortId,e.toPortId);return o.length>0&&t.push({kind:"same_layer_intersection",regionId:e.regionId,fromPortId:e.fromPortId,toPortId:e.toPortId,owners:o}),t}getPortOwners(){let e=new Map;for(let t of this.state.regionSegments)for(let[n,o,i]of t)for(let r of[o,i]){let s=e.get(r)??new Set;s.add(n),e.set(r,s)}return e}getHardBlockedCrossingOwners(e,t,n){if(!this.isKnownSingleLayerRegion(e))return[];let o=this.state.currentRouteNetId;if(o===void 0)throw Error("SelectiveReripTinyHyperGraphSolver: crossing ownership requires a current route net");let i=new Set;for(let[r,s,a]of this.state.regionSegments[e]??[])this.problem.routeNet[r]!==o&&this.segmentsCrossOnSameLayer(e,t,n,s,a)&&i.add(r);return[...i]}segmentsCrossOnSameLayer(e,t,n,o,i){let r=this.populateSegmentGeometryScratch(e,t,n),{lesserAngle:s,greaterAngle:a,layerMask:c}=r,l=this.populateSegmentGeometryScratch(e,o,i);if((c&l.layerMask)===0)return!1;if(s===l.lesserAngle||s===l.greaterAngle||a===l.lesserAngle||a===l.greaterAngle)return!1;return(s<l.lesserAngle&&l.lesserAngle<a)!==(s<l.greaterAngle&&l.greaterAngle<a)}rebuildCommittedState(e){this.state.regionSegments=this.state.regionSegments.map((t)=>t.filter(([n])=>!e.has(n))),this.state.portAssignment.fill(-1),this.state.regionIntersectionCaches=Array.from({length:this.topology.regionCount},()=>QV());for(let t=0;t<this.state.regionSegments.length;t++)for(let[n,o,i]of this.state.regionSegments[t]){let r=this.problem.routeNet[n];this.state.currentRouteNetId=r;for(let s of[o,i]){let a=this.state.portAssignment[s];if(a!==-1&&a!==r)throw Error(`SelectiveReripTinyHyperGraphSolver: rebuilding committed routes found cross-net ownership at port ${s} between net ${a} and net ${r}`);this.state.portAssignment[s]=r}this.appendSegmentToRegionCache(t,o,i)}this.state.currentRouteNetId=void 0}incrementFailedOwnerPair(e,t){let n=this.failedOwnerPairCounts.get(e)??new Map,o=(n.get(t)??0)+1;return n.set(t,o),this.failedOwnerPairCounts.set(e,n),o}hasFailedOwnerPath(e,t){let n=[e],o=new Set;for(;n.length>0;){let i=n.pop();if(i===t)return!0;o.has(i)||(o.add(i),n.push(...this.failedOwnerPairCounts.get(i)?.keys()??[]))}return!1}publishSelectiveReripStats(){let e=[];for(let[t,n]of this.failedOwnerPairCounts)for(let[o,i]of n)e.push({failedRouteId:t,ownerRouteId:o,count:i});e.sort((t,n)=>t.failedRouteId-n.failedRouteId||t.ownerRouteId-n.ownerRouteId),this.selectiveReripStats.failedOwnerPairs=e,this.selectiveReripStats.failedOwnerPairCount=e.length,this.selectiveReripStats.maxFailedOwnerPairCount=Math.max(0,...e.map(({count:t})=>t)),this.stats={...this.stats,...this.getSelectiveReripStats()}}describeRoute(e){let t=this.problem.routeMetadata?.[e]?.connectionId;return t===void 0?String(e):`${e} (${String(t)})`}},XOo=class extends gGt{remainingReripBudget=0;onOutOfCandidates(){super.onOutOfCandidates(),this.state.ripCount>=this.remainingReripBudget&&(this.failed=!0,this.error="Congestion-aware final routing exhausted its rerip budget")}};new Int32Array(0);var W4t=class extends gGt{initialAssignmentRouteIds;getRouteIdsPreferredForPreservation(){return this.initialAssignmentRouteIds||(this.initialAssignmentRouteIds=new Set((this.problem.initialAssignments??[]).map((e)=>e.routeId))),this.initialAssignmentRouteIds}resetRoutingStateForRerip(){super.resetRoutingStateForRerip(),this.problem.initialAssignments?.length&&ake({topology:this.topology,problem:this.problem,state:this.state,routeSuccessCountByRouteId:this.routeSuccessCountByRouteId,appendSegmentToRegionCache:(e,t,n)=>this.appendSegmentToRegionCache(e,t,n)})}},F8=(e)=>{if(typeof e!="object"||e===null)return!1;let t=e,n=t.preloadedTraceSection;return typeof t.connectionId=="string"&&typeof n?.traceId=="string"&&typeof n.startRoutePosition=="number"&&typeof n.endRoutePosition=="number"&&typeof n.startPoint?.x=="number"&&typeof n.startPoint.y=="number"&&typeof n.startPoint.z=="number"&&typeof n.endPoint?.x=="number"&&typeof n.endPoint.y=="number"&&typeof n.endPoint.z=="number"},KOo=(e,t)=>`__tscircuit_preloaded_trace__:${JSON.stringify([e,t])}`,hke=(e)=>[e.region1Id,e.region2Id],X4t=(e,t)=>{let n=new Set(hke(t));return hke(e).filter((o)=>n.has(o))},jOo=(e,t,n)=>{let o=e[t],i=e[t+1],r=X4t(o.port,i.port);if(r.length===0)return;if(r.length===1)return r[0];let s=e[t+2];if(s){let a=new Set(X4t(i.port,s.port)),c=r.find((l)=>a.has(l));if(c)return c}return n&&r.includes(n)?n:[...r].sort()[0]},K4t=(e,t)=>hke(e).find((n)=>n!==t)??t,fGt=(e)=>{let t=new Set((e.connections??[]).filter(F8).map((i)=>i.connectionId)),n=e.ports.filter((i)=>(i.d?._preloadedTracePortAssignments?.length??0)>0).length,o=e.regions.reduce((i,r)=>i+(r.assignments??[]).filter((s)=>t.has(s.connectionId)).length,0);return{preloadedTraceCount:t.size,preloadedPortCount:n,preloadedAssignmentCount:o}},j4t=(e)=>typeof e=="object"&&e!==null?e:{},GNe=(e)=>typeof e=="object"&&e!==null?e:{},WAe=0.000001,mke={DISTANCE_TO_COST:0.05,RIP_THRESHOLD_START:0.05,RIP_THRESHOLD_END:0.8,RIP_CONGESTION_REGION_COST_FACTOR:0.1,ACCEPT_BEST_SOLUTION_ON_TIMEOUT:!0,GREEDY_FINAL_ROUTE_ITERS:4,PARTIAL_RIP_MIN_ROUTE_COUNT:100,PARTIAL_RIP_MAX_ROUTE_COUNT:350,PARTIAL_RIP_MAX_ATTEMPTS:7,PARTIAL_RIP_WARMUP_FULL_RIP_ATTEMPTS:1,PARTIAL_RIP_COMPLEXITY_SELECTION_MIN_ROUTE_COUNT:100,PARTIAL_RIP_TARGET_MAX_COST_IMPROVEMENT_RATIO:0.02,PARTIAL_RIP_MAX_REGION_COST_GROWTH_RATIO:0.05,PARTIAL_RIP_MAX_TOTAL_COST_GROWTH_RATIO:0.1},qOo={DISTANCE_TO_COST:0.05,RIP_THRESHOLD_START:0.05,RIP_THRESHOLD_END:0.8,RIP_CONGESTION_REGION_COST_FACTOR:0.1,ACCEPT_BEST_SOLUTION_ON_TIMEOUT:!0,GREEDY_FINAL_ROUTE_ITERS:4,MAX_RIPS_WITHOUT_MAX_REGION_COST_IMPROVEMENT:6,EXTRA_RIPS_AFTER_BEATING_BASELINE_MAX_REGION_COST:Number.POSITIVE_INFINITY},NHe=(e)=>Math.max(e,0.01),RHe=(e)=>Number.isFinite(e)?{minViaPadDiameter:e}:{},JOo=(e,t)=>{let n=NHe(e);return{...mke,...RHe(t),OWNED_REGIONAL_HOP_FRONTIER:!0,USE_SPARSE_CANDIDATE_STORAGE:!1,RIP_THRESHOLD_RAMP_ATTEMPTS:Math.ceil(10*n),MAX_ITERATIONS:Math.ceil(2000000*n)}},$Oo=(e,t)=>{let n=NHe(e);return{...qOo,...RHe(t),USE_SPARSE_CANDIDATE_STORAGE:!1,RIP_THRESHOLD_RAMP_ATTEMPTS:Math.ceil(16*n),MAX_ITERATIONS:Math.ceil(1e6*n)}},yGt=(e)=>(e.solveGraphOptions?.MAX_ITERATIONS??1e6)+(e.sectionSolverOptions?.MAX_ITERATIONS??1e6)+1e6,ZOo=(e)=>e.mutuallyConnectedNetworkId,pke=(e,t)=>e.simpleRouteConnection?.pointsToConnect[t],q4t=(e)=>{let t=pke(e.routeMetadata,e.endpointIndex);if(!t)return e.fallbackZ;let n=Dy(t).map((o)=>Wi(o,e.layerCount));return e.regionAvailableZ.find((o)=>n.includes(o))??e.fallbackZ},ezo=(e,t)=>{let n=e.d,o=n.bounds;return{capacityMeshNodeId:e.d.capacityMeshNodeId,center:{x:e.d.center.x,y:e.d.center.y},width:e.d.width,height:e.d.height,availableZ:[...e.d.availableZ],...o?{bounds:{minX:o.minX,maxX:o.maxX,minY:o.minY,maxY:o.maxY}}:{},_containsObstacle:e.d._containsObstacle,_containsTarget:e.d._containsTarget,_offBoardConnectionId:e.d._offBoardConnectionId,_offBoardConnectedCapacityMeshNodeIds:e.d._offBoardConnectedCapacityMeshNodeIds===void 0?void 0:[...e.d._offBoardConnectedCapacityMeshNodeIds],_qfpRegionType:n._qfpRegionType,_isNarrowQfpPadGap:n._isNarrowQfpPadGap,...t!==void 0?{netId:t}:{}}},tzo=(e)=>{let t=e.d;return{portId:e.d.portId,x:e.d.x,y:e.d.y,z:e.d.z,prevPortPointId:t.prevPortPointId,nextPortPointId:t.nextPortPointId,distToCentermostPortOnZ:e.d.distToCentermostPortOnZ,tinyHypergraphPortPenalty:e.d.tinyHypergraphPortPenalty,cramped:e.d.cramped,_preloadedFixedNetIds:e.d._preloadedFixedNetIds,_preloadedTracePortAssignments:e.d._preloadedTracePortAssignments}},nzo=(e)=>{let t=function(){let l=new Map;return(d)=>{let u=d.mutuallyConnectedNetworkId,h=l.get(u);return h===void 0&&(h=l.size,l.set(u,h)),h}}(),n=function(l){let d=new Map,u=new Set,h=new Map;for(let m of l.params.connections){let p=m.mutuallyConnectedNetworkId,g=l.getNetIndex({connectionId:m.connectionId,mutuallyConnectedNetworkId:p});for(let _ of[m.connectionId,p])h.set(_,g);for(let _ of m.simpleRouteConnection.pointsToConnect){let f=MHe({point:_,layerCount:l.params.layerCount});for(let y of l.params.graph.regions){if(!Tzt({point:_,region:y,layerCount:l.params.layerCount,pointZLayers:f}))continue;if(_.pcb_port_id===void 0&&y.d._containsTarget!==!0){u.add(y.regionId);continue}let x=d.get(y.regionId);x||(x=new Set,d.set(y.regionId,x)),x.add(g)}}}for(let m of l.params.graph.regions)for(let p of m.d._connectedTo??[]){let g=h.get(p);if(g===void 0)continue;let _=d.get(m.regionId);_||(_=new Set,d.set(m.regionId,_)),_.add(g)}let A=new Map;for(let m of u)A.set(m,-1);for(let[m,p]of d)p.size===1&&A.set(m,[...p][0]);return A}({params:e,getNetIndex:t}),o=e.graph.regions.map((l)=>({regionId:l.regionId,pointIds:l.ports.map((d)=>d.d.portId),d:ezo(l,n.get(l.regionId))})),i=new Map;for(let l of o)i.has(l.regionId)||i.set(l.regionId,l);let r=e.graph.ports.map((l)=>({portId:l.d.portId,region1Id:l.region1.regionId,region2Id:l.region2.regionId,d:tzo(l)})),s=e.connections.map((l)=>({connectionId:l.connectionId,mutuallyConnectedNetworkId:l.mutuallyConnectedNetworkId,startRegionId:l.startRegion.regionId,endRegionId:l.endRegion.regionId,simpleRouteConnection:l.simpleRouteConnection})),a=[];for(let l of e.connections){let d={connectionId:l.connectionId,mutuallyConnectedNetworkId:l.mutuallyConnectedNetworkId,simpleRouteConnection:l.simpleRouteConnection},u=t(d),h=pke(d,0),A=pke(d,1),m=l.startRegion.d.availableZ[0]??0,p=l.endRegion.d.availableZ[0]??0,g=q4t({routeMetadata:d,endpointIndex:0,fallbackZ:m,regionAvailableZ:l.startRegion.d.availableZ,layerCount:e.layerCount}),_=q4t({routeMetadata:d,endpointIndex:1,fallbackZ:p,regionAvailableZ:l.endRegion.d.availableZ,layerCount:e.layerCount}),f=`tiny-terminal:start-region:${l.connectionId}`,y=`tiny-terminal:end-region:${l.connectionId}`,x=`tiny-terminal:start-port:${l.connectionId}`,C=`tiny-terminal:end-port:${l.connectionId}`;o.push({regionId:f,pointIds:[x],d:{capacityMeshNodeId:f,center:{x:h?.x??l.startRegion.d.center.x,y:h?.y??l.startRegion.d.center.y},width:WAe,height:WAe,availableZ:[g],_containsTarget:!0,_tinyTerminal:!0,_tinyTerminalNetId:l.mutuallyConnectedNetworkId,netId:u}}),o.push({regionId:y,pointIds:[C],d:{capacityMeshNodeId:y,center:{x:A?.x??l.endRegion.d.center.x,y:A?.y??l.endRegion.d.center.y},width:WAe,height:WAe,availableZ:[_],_containsTarget:!0,_tinyTerminal:!0,_tinyTerminalNetId:l.mutuallyConnectedNetworkId,netId:u}}),r.push({portId:x,region1Id:l.startRegion.regionId,region2Id:f,d:{portId:x,x:h?.x??l.startRegion.d.center.x,y:h?.y??l.startRegion.d.center.y,z:g,distToCentermostPortOnZ:0,_tinyTerminal:!0,...e.preserveTerminalPcbPortIds&&h?.pcb_port_id?{pcb_port_id:h.pcb_port_id}:{}}}),r.push({portId:C,region1Id:l.endRegion.regionId,region2Id:y,d:{portId:C,x:A?.x??l.endRegion.d.center.x,y:A?.y??l.endRegion.d.center.y,z:_,distToCentermostPortOnZ:0,_tinyTerminal:!0,...e.preserveTerminalPcbPortIds&&A?.pcb_port_id?{pcb_port_id:A.pcb_port_id}:{}}});let I=i.get(l.startRegion.regionId),b=i.get(l.endRegion.regionId);I?.pointIds.push(x),b?.pointIds.push(C),a.push({connection:{connectionId:l.connectionId},path:[{portId:x},{portId:C}]})}let c={regions:o,ports:r,connections:s,solvedRoutes:a};return((l)=>{let d=new Map,u=new Map,h=new Set((l.connections??[]).flatMap((x)=>[x.startRegionId,x.endRegionId])),A=new Set(l.regions.filter((x)=>{let C=typeof x.d?.netId=="number"?x.d.netId:typeof x.d?.NetId=="number"?x.d.NetId:void 0;return x.d?._containsObstacle===!0&&(C===void 0||C===-1)&&!h.has(x.regionId)}).map((x)=>x.regionId)),m=0;for(let x of l.ports){let C=x.d,I=C?._preloadedTracePortAssignments??[];if(I.length>0&&m++,!A.has(x.region1Id)&&!A.has(x.region2Id))for(let b of I){let P=u.get(b.traceId);if(P!==void 0&&P!==b.fixedNetId)throw Error(`Preloaded trace "${b.traceId}" maps to multiple canonical nets`);u.set(b.traceId,b.fixedNetId);let E=d.get(b.traceId)??[];E.push({port:x,assignment:b}),d.set(b.traceId,E)}}let p=new Map(l.regions.map((x)=>[x.regionId,x])),g=l.connections??=[],_=l.solvedRoutes??=[],f=0,y=0;for(let[x,C]of d){C.sort((B,w)=>B.assignment.routePosition-w.assignment.routePosition||B.assignment.z-w.assignment.z||B.port.portId.localeCompare(w.port.portId));let I=C.filter(({port:B},w)=>w===0||B.portId!==C[w-1].port.portId);if(I.length<2)continue;let b=[],P;for(let B=0;B<I.length-1;B++){let w=I[B],T=I[B+1];if(w.assignment.z===T.assignment.z&&Math.abs(w.assignment.routePosition-T.assignment.routePosition)<=0.000001){P=void 0;continue}let Q=jOo(I,B,P);Q?(b.push({regionId:Q,from:w,to:T}),P=Q):P=void 0}let E=[];for(let B of b){let w=E.at(-1);w&&w.at(-1).to.port.portId===B.from.port.portId?w.push(B):E.push([B])}for(let[B,w]of E.entries()){let T=KOo(x,B);for(let Y of w){let U=p.get(Y.regionId);if(!U)throw Error(`Preloaded trace "${x}" references missing region "${Y.regionId}"`);U.assignments=[...U.assignments??[],{regionPort1Id:Y.from.port.portId,regionPort2Id:Y.to.port.portId,connectionId:T}],y++}let Q=w[0],N=w.at(-1),F=Q.from.port,H=N.to.port,z={connectionId:T,mutuallyConnectedNetworkId:u.get(x)??x,startRegionId:K4t(F,Q.regionId),endRegionId:K4t(H,N.regionId),preloadedTraceSection:{traceId:x,startRoutePosition:Q.from.assignment.routePosition,endRoutePosition:N.to.assignment.routePosition,startPoint:{x:Q.from.assignment.tracePoint.x,y:Q.from.assignment.tracePoint.y,z:Q.from.assignment.z},endPoint:{x:N.to.assignment.tracePoint.x,y:N.to.assignment.tracePoint.y,z:N.to.assignment.z}}};g.push(z),_.push({requiredRip:!1,connection:z,path:[F,H].map((Y)=>({portId:Y.portId,g:0,h:0,f:0,hops:0,ripRequired:!1}))})}E.length>0&&f++}})(c),c},J4t=(e)=>{let t=new Map;for(let n=0;n<e.problem.routeNet.length;n++){let o=e.problem.routeMetadata?.[n],i=o?.mutuallyConnectedNetworkId;if(typeof i!="string"||i.length===0)throw Error(`Tiny hypergraph route ${n} is missing a net ID`);t.set(i,e.problem.routeNet[n])}for(let n=0;n<e.problem.regionNetId.length;n++){let o=e.topology.regionMetadata?.[n]?._tinyTerminalNetId;if(typeof o!="string")continue;let i=t.get(o);i!==void 0&&(e.problem.regionNetId[n]=i)}},$4t=(e)=>{let t=new Map;e.topology.regionMetadata?.forEach((o,i)=>{typeof o.serializedRegionId=="string"&&t.set(o.serializedRegionId,i)});let n=new Set;for(let o of e.problem.routeMetadata??[])F8(o)||(typeof o.startRegionId=="string"&&n.add(o.startRegionId),typeof o.endRegionId=="string"&&n.add(o.endRegionId));for(let o of e.problem.routeMetadata??[])if(F8(o))for(let i of[o.startRegionId,o.endRegionId]){if(typeof i!="string"||n.has(i))continue;let r=t.get(i);if(r===void 0)continue;let s=e.topology.regionMetadata?.[r];typeof s?.netId=="number"||typeof s?.NetId=="number"||(e.problem.regionNetId[r]=-1)}},Z4t=(e)=>{if(e.problem.metadataPortPenaltiesApplied)return 0;let t=0,n=e.problem.portPenalty!==void 0;for(let i=0;i<e.topology.portCount;i++){let r=Number(e.topology.portMetadata?.[i]?.tinyHypergraphPortPenalty),s=Number.isFinite(r)&&r>0?r:0;s>0&&t++,e.problem.portPenalty?.[i]!==s&&(n=!1)}if(n)return e.problem.metadataPortPenaltiesApplied=!0,t;t=0;let o=e.problem.portPenalty?new Float64Array(e.problem.portPenalty):new Float64Array(e.topology.portCount);for(let i=0;i<e.topology.portCount;i++){let r=Number(e.topology.portMetadata?.[i]?.tinyHypergraphPortPenalty);!Number.isFinite(r)||r<=0||(o[i]+=r,t++)}return t>0&&(e.problem.portPenalty=o),e.problem.metadataPortPenaltiesApplied=!0,t},eMt=class extends WOo{configuredSolvers=new WeakSet;duplicatePortPenaltyCount=0;metadataPortPenaltyCount=0;crampedPortPenaltyCount=0;preloadedPortCount=0;preloadedFixedSegmentCount=0;crampedPortTraversalPenalty;useSelectiveReripRouting;constructor(e,t){super(e),this.useSelectiveReripRouting=t,this.crampedPortTraversalPenalty=150;let n=fGt(e.serializedHyperGraph);if(this.preloadedPortCount=n.preloadedPortCount,this.preloadedFixedSegmentCount=n.preloadedAssignmentCount,t){let o=this.pipelineDef.find((i)=>i.solverName==="solveGraph");if(!o)throw Error("Tiny hypergraph pipeline is missing the solveGraph stage");o.solverClass=W4t}this.MAX_ITERATIONS=yGt(e)}loadHyperGraph(e){let t=super.loadHyperGraph(e);((r,s)=>{let a=new Map;for(let c of s.connections??[])F8(c)&&a.set(c.connectionId,c.preloadedTraceSection);for(let c of r.problem.routeMetadata??[]){let l=a.get(c.connectionId);l&&(c.preloadedTraceSection=l)}})(t,this.inputProblem.serializedHyperGraph);let n=Z4t(t),{duplicatePortPenaltyCount:o,crampedPortPenaltyCount:i}=((r,s)=>{let a=0,c=0,l=r.problem.portPenalty?new Float64Array(r.problem.portPenalty):new Float64Array(r.topology.portCount);for(let d=0;d<r.topology.portCount;d++){let u=r.topology.portMetadata?.[d];typeof u?.duplicatedFromPortId=="string"&&(l[d]+=150,a++),u?.cramped&&s>0&&(l[d]+=s,c++)}return(a>0||c>0)&&(r.problem.portPenalty=l),{duplicatePortPenaltyCount:a,crampedPortPenaltyCount:c}})(t,this.crampedPortTraversalPenalty);return J4t(t),$4t(t),this.metadataPortPenaltyCount=Math.max(this.metadataPortPenaltyCount,n),this.duplicatePortPenaltyCount=Math.max(this.duplicatePortPenaltyCount,o),this.crampedPortPenaltyCount=Math.max(this.crampedPortPenaltyCount,i),t}_step(){super._step(),this.configureSolver(this.activeSubSolver)}getInitialVisualizationSolver(){if(this.useSelectiveReripRouting&&!this.initialVisualizationSolver){let{topology:t,problem:n}=this.loadHyperGraph(this.inputProblem.serializedHyperGraph);this.initialVisualizationSolver=new W4t(t,n,this.getSolveGraphOptions())}let e=super.getInitialVisualizationSolver();return this.configureSolver(e),e}getSolvedTinySolver(){let e=this.getSolver("optimizeSection");if(e?.solved&&!e.failed)return e.getSolvedSolver();let t=this.getSolver("solveGraph");if(t?.solved&&!t.failed)return t;throw Error("TinyHyperGraph section pipeline does not have a solved graph")}configureSolver(e){if(e&&!this.configuredSolvers.has(e)){if(e instanceof Pte||e instanceof nT){let t=e;Z4t(t),J4t(t),$4t(t)}this.configuredSolvers.add(e)}}},Dfe=class extends Oi{constructor(e){super(),this.params=e;let t=((u)=>u.map((h)=>{let A=h.simpleRouteConnection;if(!A)throw Error(`TinyHypergraphPortPointPathingSolver requires a SimpleRouteConnection for "${h.connectionId}"`);let m=h.mutuallyConnectedNetworkId;if(!m)throw Error(`TinyHypergraphPortPointPathingSolver requires a net ID for "${h.connectionId}"`);return{...h,mutuallyConnectedNetworkId:m,simpleRouteConnection:A}}))(e.connections),n=e.flags.USE_SELECTIVE_RERIP_ROUTING?function(u,h){let A=new Map;for(let m of u){let p=h(m);A.set(p,(A.get(p)??0)+1)}return u.map((m,p)=>({connection:m,index:p})).sort((m,p)=>(A.get(h(p.connection))??0)-(A.get(h(m.connection))??0)||m.index-p.index).map(({connection:m})=>m)}(t,ZOo):t;this.rootConnectionNameByConnectionId=new Map(n.map((u)=>[u.connectionId,u.simpleRouteConnection.__rootConnectionNames?.[0]]));let o=nzo({...e,connections:n});this.originalPreloadedSegmentKeysByConnectionId=((u)=>{let h=new Map;for(let A of u.connections??[])F8(A)&&h.set(A.connectionId,new Set);for(let A of u.regions)for(let m of A.assignments??[]){let p=h.get(m.connectionId);if(!p)continue;let[g,_]=[m.regionPort1Id,m.regionPort2Id].sort();p.add(JSON.stringify([A.regionId,g,_]))}return h})(o);let i=fGt(o),r=i.preloadedPortCount>0,s=r&&e.flags.USE_PARTIAL_RIP_ROUTING_WITH_PRELOADED_TRACES===!0,a=s?Math.max(o.connections?.length??0,i.preloadedAssignmentCount):void 0,c=o,l=new SOo(o,{duplicatePortProximity:0.05,useSerializedPortPenalties:!1,routeSolveOptions:{...RHe(e.minViaPadDiameter),USE_SPARSE_CANDIDATE_STORAGE:!1,ACCEPT_BEST_SOLUTION_ON_TIMEOUT:!0,GREEDY_FINAL_ROUTE_ITERS:4,MAX_ITERATIONS:Math.ceil(2000000*NHe(e.effort)),RIP_THRESHOLD_RAMP_ATTEMPTS:0,STATIC_REACHABILITY_PRECHECK:!0}});if(l.solve(),l.failed)this.duplicateCongestedPortError=l.error??"unknown error";else{this.duplicateCongestedPortReport=l.report,c=l.getOutput();for(let u of c.ports){let h=GNe(u.d);typeof h.duplicatedFromPortId=="string"&&(delete h._preloadedFixedNetIds,delete h._preloadedTracePortAssignments)}}this.duplicatedPortCount=this.duplicateCongestedPortReport?.duplicatedPorts.reduce((u,h)=>u+h.duplicatePortIds.length,0)??0;let d=((u,h,A,m=!0,p)=>{let g=u.connections?.length??0,_=p??g,f=mke.PARTIAL_RIP_MIN_ROUTE_COUNT??0,y=mke.PARTIAL_RIP_MAX_ROUTE_COUNT??Number.POSITIVE_INFINITY,x=m&&_>=f&&_<=y;return{serializedHyperGraph:u,createSectionMask:({topology:C})=>new Int8Array(C.portCount),solveGraphOptions:{...JOo(h,A),...x?{PARTIAL_RIP_MIN_ROUTE_COUNT:0,PARTIAL_RIP_MAX_ROUTE_COUNT:Number.POSITIVE_INFINITY,PARTIAL_RIP_COMPLEXITY_SELECTION_MIN_ROUTE_COUNT:0}:{PARTIAL_RIP_ENABLED:!1,OUTSIDE_IN_ROUTING:!1}},sectionSolverOptions:$Oo(h,A)}})({...c,solvedRoutes:o.solvedRoutes},e.effort,e.minViaPadDiameter,!r||s,a);this.tinyPipelineSolver=new eMt(d,e.flags.USE_SELECTIVE_RERIP_ROUTING===!0),this.primaryTinyPipelineSolver=this.tinyPipelineSolver,n.length>=30&&n.length<=99&&(this.alternativeTinyPipelineInput={...d,solveGraphOptions:{...d.solveGraphOptions,TRACE_DENSITY_COST_FACTOR:1}}),this.MAX_ITERATIONS=yGt(d)*(this.alternativeTinyPipelineInput?2:1),this.originalRegionById=new Map(e.graph.regions.map((u)=>[u.regionId,u])),this.originalRegionIds=new Set(this.originalRegionById.keys()),this.inputNodeWithPortPoints=((u,h)=>{let A=new Map(h.regions.map((p)=>[p.regionId,p])),m=new Map(h.ports.map((p)=>[p.portId,p]));return u.graph.regions.map((p)=>{let g=A.get(p.regionId),_=(g?.pointIds??p.ports.map((f)=>f.d.portId)).map((f)=>m.get(f)).filter((f)=>f&&!GNe(f.d)._tinyTerminal).map((f)=>{let y=f,x=GNe(y.d),C=A.get(y.region1Id),I=A.get(y.region2Id),b=Boolean(j4t(C?.d)._offBoardConnectionId??j4t(I?.d)._offBoardConnectionId);return{portPointId:y.portId,x:Number(x.x??0),y:Number(x.y??0),z:Number(x.z??0),prevPortPointId:typeof x.prevPortPointId=="string"?x.prevPortPointId:void 0,nextPortPointId:typeof x.nextPortPointId=="string"?x.nextPortPointId:void 0,connectionNodeIds:[y.region1Id,y.region2Id],distToCentermostPortOnZ:Number(x.distToCentermostPortOnZ??0),cramped:Boolean(x.cramped),connectsToOffBoardNode:b}});return{capacityMeshNodeId:p.d.capacityMeshNodeId,center:p.d.center,width:p.d.width,height:p.d.height,portPoints:_,availableZ:p.d.availableZ,_containsObstacle:p.d._containsObstacle,_containsTarget:p.d._containsTarget,_offBoardConnectionId:p.d._offBoardConnectionId,_offBoardConnectedCapacityMeshNodeIds:p.d._offBoardConnectedCapacityMeshNodeIds,_qfpRegionType:p.d._qfpRegionType,_isNarrowQfpPadGap:p.d._isNarrowQfpPadGap}})})(e,c),Object.defineProperty(this,"stats",{configurable:!0,enumerable:!0,get:()=>this.getStatsSnapshot(),set:(u)=>{this.statsSnapshot=u,this.statsSnapshotDirty=!1}})}params;tinyPipelineSolver;primaryTinyPipelineSolver;alternativeTinyPipelineSolver;alternativeTinyPipelineInput;candidatePortfolioPhase="primary";primaryCandidateSummary;alternativeCandidateSummary;alternativeCandidateEvaluated=!1;selectedCandidate="primary";duplicateCongestedPortReport;duplicateCongestedPortError;duplicatedPortCount=0;inputNodeWithPortPoints;originalRegionById;originalRegionIds;rootConnectionNameByConnectionId;originalPreloadedSegmentKeysByConnectionId;statsSnapshot={};statsSnapshotDirty=!1;getSolverName(){return"TinyHypergraphPortPointPathingSolver"}getChangedPreloadedRouteIds(e){let t=new Map,n=new Map;for(let i=0;i<e.problem.routeCount;i++){let r=this.getRouteMetadata(e,i);F8(r)&&(t.set(r.connectionId,i),n.set(i,new Set))}for(let i=0;i<e.state.regionSegments.length;i++){let r=e.topology.regionMetadata?.[i]?.serializedRegionId;for(let[s,a,c]of e.state.regionSegments[i]??[]){let l=n.get(s);if(!l)continue;let d=e.topology.portMetadata?.[a]?.serializedPortId,u=e.topology.portMetadata?.[c]?.serializedPortId;if(typeof r!="string"||typeof d!="string"||typeof u!="string")throw Error(`Tiny hypergraph preloaded route ${s} has a segment without serialized topology IDs`);let[h,A]=[d,u].sort();l.add(JSON.stringify([r,h,A]))}}let o=new Set;for(let[i,r]of this.originalPreloadedSegmentKeysByConnectionId){let s=t.get(i);if(s===void 0)throw Error(`Tiny hypergraph lost preloaded trace section "${i}"`);let a=n.get(s);if(r.size>0&&a.size===0)throw Error(`Tiny hypergraph lost preloaded trace section "${i}"`);(r.size!==a.size||[...r].some((c)=>!a.has(c)))&&o.add(s)}return o}summarizePipelineCandidate(e){let t=e.getSolvedTinySolver(),n=0,o=0,i=0,r=0,s=0,a=0,c=t.topology.regionMetadata??[];for(let l=0;l<t.state.regionSegments.length;l++){let d=t.state.regionSegments[l];s+=d.length;for(let[,_,f]of d)t.topology.portZ[_]!==t.topology.portZ[f]&&(a+=1);let u=c[l]?.capacityMeshNodeId;if(!u||!this.originalRegionIds.has(u))continue;let h=this.originalRegionById.get(u);if(!h||d.length===0)continue;let A=d.map(([_,f,y])=>[this.createAssignedPortPoint(t,_,f),this.createAssignedPortPoint(t,_,y)]),m={capacityMeshNodeId:h.d.capacityMeshNodeId,center:h.d.center,width:h.d.width,height:h.d.height,portPoints:A.flat(),portPointsInPairs:A,availableZ:h.d.availableZ},p=Gm(m),g=d1(h.d,p.numSameLayerCrossings,p.numEntryExitLayerChanges,p.numTransitionPairCrossings);n+=g,o+=g*g,i=Math.max(i,g),r+=m.portPoints.length**2}return{nodePfSum:n,nodePfSquaredSum:o,nodePfMax:i,squaredNodePortPointCount:r,segmentCount:s,layerChangeCount:a,changedPreloadedTraceSectionCount:this.getChangedPreloadedRouteIds(t).size}}shouldEvaluateAlternative(e){let t=this.primaryTinyPipelineSolver.getSolvedTinySolver().problem.routeCount;return this.alternativeTinyPipelineInput!==void 0&&((n,o)=>n.nodePfSum>4&&n.nodePfMax>1&&n.squaredNodePortPointCount/Math.max(1,o)>=125)(e,t)}shouldSelectAlternative(e,t){return((n,o,i)=>{if(o.changedPreloadedTraceSectionCount>n.changedPreloadedTraceSectionCount)return!1;let r=i>40?0.92:0.95,s=o.nodePfSum<=0.9*n.nodePfSum&&o.nodePfSquaredSum<=0.85*n.nodePfSquaredSum&&o.nodePfMax<=0.85*n.nodePfMax&&o.squaredNodePortPointCount<0.98*n.squaredNodePortPointCount&&o.segmentCount<=0.97*n.segmentCount;return o.nodePfSum<=1.03*n.nodePfSum&&o.nodePfSquaredSum<=1.06*n.nodePfSquaredSum&&(o.squaredNodePortPointCount<n.squaredNodePortPointCount*r||s)})(e,t,this.primaryTinyPipelineSolver.getSolvedTinySolver().problem.routeCount)}finishCandidatePortfolio(){this.candidatePortfolioPhase="complete",this.solved=this.tinyPipelineSolver.solved,this.failed=this.tinyPipelineSolver.failed,this.error=this.tinyPipelineSolver.error??null}getSolveGraphBenchmarkMetrics(){let e=this.tinyPipelineSolver.getSolver("solveGraph");if(!e)return;let t=e.state.regionSegments.map((r)=>r.length),n=this.selectedCandidate==="alternative"?this.alternativeCandidateSummary:this.primaryCandidateSummary,o=e.stats,i=this.tinyPipelineSolver.getStageStats().solveGraph;return{routeCount:e.problem.routeCount,traceDensityCandidateEvaluated:this.alternativeCandidateEvaluated,traceDensityCandidateSelected:this.selectedCandidate==="alternative",downstreamNodePfSum:n?.nodePfSum,downstreamNodePfSquaredSum:n?.nodePfSquaredSum,downstreamNodePfMax:n?.nodePfMax,downstreamSquaredNodePortPointCount:n?.squaredNodePortPointCount,changedPreloadedTraceSectionCount:n?.changedPreloadedTraceSectionCount,iterations:e.iterations,timeMs:i?.timeSpent,ripCount:o.ripCount,partialRipCount:o.partialRipCount,partiallyRippedRouteCount:o.partiallyRippedRouteCount,partiallyRippedSegmentCount:o.partiallyRippedSegmentCount,retainedPartialRipSegmentCount:o.retainedPartialRipSegmentCount,firstMaxRegionCost:o.firstMaxRegionCost,bestMaxRegionCost:o.bestMaxRegionCost,firstTotalRegionCost:o.firstTotalRegionCost,bestTotalRegionCost:o.bestTotalRegionCost,firstSegmentCount:o.firstSegmentCount,bestSolvedSegmentCount:o.bestSolvedSegmentCount,bestSolvedMaxRegionSegmentCount:o.bestSolvedMaxRegionSegmentCount,bestSolvedSquaredRegionSegmentCount:o.bestSolvedSquaredRegionSegmentCount,finalMaxRegionSegmentCount:Math.max(0,...t),finalSquaredRegionSegmentCount:t.reduce((r,s)=>r+s*s,0),finalSegmentCount:n?.segmentCount,finalLayerChangeCount:n?.layerChangeCount,warmupFullRipAttempts:o.partialRipWarmupFullRipAttempts,complexityAwareSelection:o.partialRipComplexityAwareSelection,targetReached:o.partialRipTargetReached,outsideInCompletedRouteCount:o.outsideInCompletedRouteCount,outsideInFallbackRouteCount:o.outsideInFallbackRouteCount,outsideInForwardExpansionCount:o.outsideInForwardExpansionCount,outsideInReverseExpansionCount:o.outsideInReverseExpansionCount}}_step(){this.tinyPipelineSolver.step(),this.candidatePortfolioPhase==="primary"&&this.primaryTinyPipelineSolver.failed?(this.alternativeTinyPipelineInput=void 0,this.finishCandidatePortfolio()):this.candidatePortfolioPhase==="primary"&&this.primaryTinyPipelineSolver.solved?(this.primaryCandidateSummary=this.summarizePipelineCandidate(this.primaryTinyPipelineSolver),this.shouldEvaluateAlternative(this.primaryCandidateSummary)?(this.alternativeCandidateEvaluated=!0,this.alternativeTinyPipelineSolver=new eMt(this.alternativeTinyPipelineInput,this.params.flags.USE_SELECTIVE_RERIP_ROUTING===!0),this.tinyPipelineSolver=this.alternativeTinyPipelineSolver,this.candidatePortfolioPhase="alternative"):(this.alternativeTinyPipelineInput=void 0,this.finishCandidatePortfolio())):this.candidatePortfolioPhase==="alternative"&&(this.tinyPipelineSolver.solved||this.tinyPipelineSolver.failed)&&(this.tinyPipelineSolver.solved&&!this.tinyPipelineSolver.failed&&(this.alternativeCandidateSummary=this.summarizePipelineCandidate(this.tinyPipelineSolver)),this.alternativeCandidateSummary&&this.primaryCandidateSummary&&this.shouldSelectAlternative(this.primaryCandidateSummary,this.alternativeCandidateSummary)?(this.selectedCandidate="alternative",this.primaryTinyPipelineSolver=void 0,this.alternativeTinyPipelineSolver=void 0):(this.tinyPipelineSolver=this.primaryTinyPipelineSolver,this.alternativeTinyPipelineSolver=void 0),this.alternativeTinyPipelineInput=void 0,this.finishCandidatePortfolio()),this.solved=this.candidatePortfolioPhase==="complete"&&this.tinyPipelineSolver.solved,this.failed=this.candidatePortfolioPhase==="complete"&&this.tinyPipelineSolver.failed,this.error=this.failed?this.tinyPipelineSolver.error??null:null,this.progress=this.candidatePortfolioPhase==="complete"?1:this.candidatePortfolioPhase==="alternative"?0.5+0.5*this.tinyPipelineSolver.progress:this.alternativeTinyPipelineInput?0.5*this.tinyPipelineSolver.progress:this.tinyPipelineSolver.progress,this.statsSnapshotDirty=!0,this.activeSubSolver=this.tinyPipelineSolver.activeSubSolver??null}getStatsSnapshot(){if(!this.statsSnapshotDirty)return this.statsSnapshot;let e=this.tinyPipelineSolver.getSolver("optimizeSection"),t=this.getCurrentTinySolver();return this.statsSnapshot={duplicateCongestedPortSourceCount:this.duplicateCongestedPortReport?.duplicatedPorts.length??0,duplicateCongestedPortCount:this.duplicatedPortCount,duplicateCongestedPortFallbackToOriginal:Boolean(this.duplicateCongestedPortError),duplicateCongestedPortPenalty:this.duplicatedPortCount>0?150:0,duplicateCongestedPortPenaltyCount:this.tinyPipelineSolver.duplicatePortPenaltyCount,metadataPortPenaltyCount:this.tinyPipelineSolver.metadataPortPenaltyCount,crampedPortPenalty:this.tinyPipelineSolver.crampedPortTraversalPenalty,crampedPortPenaltyCount:this.tinyPipelineSolver.crampedPortPenaltyCount,preloadedPortCount:this.tinyPipelineSolver.preloadedPortCount,preloadedFixedSegmentCount:this.tinyPipelineSolver.preloadedFixedSegmentCount,duplicateCongestedPortError:this.duplicateCongestedPortError,candidatePortfolioPhase:this.candidatePortfolioPhase,candidatePortfolioSelectedCandidate:this.selectedCandidate,candidatePortfolioPrimarySummary:this.primaryCandidateSummary,candidatePortfolioAlternativeSummary:this.alternativeCandidateSummary,...this.tinyPipelineSolver.stats??{},...t?.stats??{},...e?.stats??{},currentStage:this.tinyPipelineSolver.getCurrentStageName(),stageStats:this.tinyPipelineSolver.getStageStats()},this.statsSnapshotDirty=!1,this.statsSnapshot}preview(){return this.visualize()}getCurrentTinySolver(){let e=this.tinyPipelineSolver.getSolver("optimizeSection");if(e?.solved&&!e.failed)return e.getSolvedSolver();return this.tinyPipelineSolver.getSolver("solveGraph")||void 0}getSolvedTinySolver(){return this.tinyPipelineSolver.getSolvedTinySolver()}getRouteMetadata(e,t){return e.problem.routeMetadata?.[t]}createAssignedPortPoint(e,t,n){let o=this.getRouteMetadata(e,t),i=o?((a)=>a.simpleRouteConnection?.name??a.connectionId)(o):`route-${t}`,r=o?this.rootConnectionNameByConnectionId.get(o.connectionId)??o.mutuallyConnectedNetworkId:void 0,s=e.topology.portMetadata?.[n];return{portPointId:String(s?.serializedPortId??s?.portId??`tiny-port-${n}`),x:e.topology.portX[n],y:e.topology.portY[n],z:e.topology.portZ[n],connectionName:i,rootConnectionName:r,...this.params.preserveTerminalPcbPortIds&&typeof s?.pcb_port_id=="string"?{pcb_port_id:s.pcb_port_id}:{},prevPortPointId:typeof s?.prevPortPointId=="string"?s.prevPortPointId:void 0,nextPortPointId:typeof s?.nextPortPointId=="string"?s.nextPortPointId:void 0}}getOutput(){let e=this.getSolvedTinySolver(),t=[],n=e.state.regionSegments,o=e.topology.regionMetadata??[],i=this.getChangedPreloadedRouteIds(e);for(let s=0;s<n.length;s++){let a=o[s]?.capacityMeshNodeId;if(!a||!this.originalRegionIds.has(a))continue;let c=this.originalRegionById.get(a);if(!c)continue;let l=n[s].filter(([u])=>{let h=this.getRouteMetadata(e,u);return!F8(h)||i.has(u)}).map(([u,h,A])=>{let m=this.createAssignedPortPoint(e,u,h),p=this.createAssignedPortPoint(e,u,A);return m.portPointId&&p.portPointId&&(m.nextPortPointId=p.portPointId,p.prevPortPointId=m.portPointId),[m,p]}),d=l.flat();d.length!==0&&t.push({capacityMeshNodeId:c.d.capacityMeshNodeId,center:c.d.center,width:c.d.width,height:c.d.height,portPoints:d,portPointsInPairs:l,availableZ:c.d.availableZ})}let r=[...i].map((s)=>{let a=this.getRouteMetadata(e,s);if(!F8(a))throw Error(`Changed preloaded hypergraph route ${s} is missing section metadata`);let c=a.preloadedTraceSection;return{connectionName:a.connectionId,traceId:c.traceId,startRoutePosition:c.startRoutePosition,endRoutePosition:c.endRoutePosition,connection:{name:a.connectionId,__rootConnectionNames:[a.mutuallyConnectedNetworkId],pointsToConnect:[{x:c.startPoint.x,y:c.startPoint.y,layer:nd(c.startPoint.z,this.params.layerCount)},{x:c.endPoint.x,y:c.endPoint.y,layer:nd(c.endPoint.z,this.params.layerCount)}]}}});return this.stats.changedPreloadedTraceSectionCount=r.length,{nodesWithPortPoints:t,inputNodeWithPortPoints:this.inputNodeWithPortPoints,changedPreloadedTraceSections:r}}computeNodePf(e){let t=this.getOutput().nodesWithPortPoints.find((n)=>n.capacityMeshNodeId===e.capacityMeshNodeId);return this.computeSolvedNodePf(e.capacityMeshNodeId,t)}computeNodePfMap(){let e=new Map(this.getOutput().nodesWithPortPoints.map((t)=>[t.capacityMeshNodeId,t]));return new Map(this.inputNodeWithPortPoints.map((t)=>[t.capacityMeshNodeId,this.computeSolvedNodePf(t.capacityMeshNodeId,e.get(t.capacityMeshNodeId))]))}computeSolvedNodePf(e,t){let n=this.originalRegionById.get(e);if(!t||!n)return null;let o=Gm(t);return d1(n.d,o.numSameLayerCrossings,o.numEntryExitLayerChanges,o.numTransitionPairCrossings)}tryFinalAcceptance(){}getConstructorParams(){return[this.params]}visualize(){return this.tinyPipelineSolver.visualize()}},VZ=(e,t)=>{if(!e||e==="none")return e;try{let n=Vk(e);return`rgba(${n.red},${n.green},${n.blue},${t})`}catch{return Cr(e,1-t)}},L6=({srj:e,opacity:t=0.25,visualizationOptions:n={}})=>{let o=p1({...e,obstacles:[]},n);return{...o,points:[],lines:o.lines?.map((i)=>({...i,strokeColor:VZ(i.strokeColor,t)})),rects:o.rects?.map((i)=>({...i,fill:VZ(i.fill,t),stroke:VZ(i.stroke,t)})),circles:o.circles?.map((i)=>({...i,fill:VZ(i.fill,t),stroke:VZ(i.stroke,t)}))}};function Hk(e,t,n,o){if(fu(e,t,n,o))return 0;let i=XAe(e,n,o),r=XAe(t,n,o),s=XAe(n,e,t),a=XAe(o,e,t);return Math.min(i,r,s,a)}function XAe(e,t,n){let o={x:n.x-t.x,y:n.y-t.y},i=tMt({x:e.x-t.x,y:e.y-t.y},o);if(i<=0)return YNe(e,t);let r=tMt(o,o);if(r<=i)return YNe(e,n);let s=i/r;return YNe(e,{x:t.x+s*o.x,y:t.y+s*o.y})}function tMt(e,t){return e.x*t.x+e.y*t.y}function YNe(e,t){let n=t.x-e.x,o=t.y-e.y;return Math.sqrt(n*n+o*o)}function VNe(e,t){return e.x>=t.center.x-t.width/2&&e.x<=t.center.x+t.width/2&&e.y>=t.center.y-t.height/2&&e.y<=t.center.y+t.height/2}var Ige=0.000001,Ake=(e,t,n)=>Da(e,t,n)<=Ige,KAe=(e,t)=>Math.abs(e.x-t.x)<=Ige&&Math.abs(e.y-t.y)<=Ige,UNe=(e,t)=>{if(!t||t.length<3)return!1;for(let o=0;o<t.length;o++){let i=t[o],r=t[(o+1)%t.length];if(Ake(e,i,r))return!0}let n=!1;for(let o=0,i=t.length-1;o<t.length;i=o++){let r=t[o],s=t[i];r.y>e.y!=s.y>e.y&&e.x<(s.x-r.x)*(e.y-r.y)/(s.y-r.y)+r.x&&(n=!n)}return n},WNe="escape-via:",Cx=0.0001,ozo=(e)=>e.obstacleId??[e.layers.join("."),e.center.x.toFixed(4),e.center.y.toFixed(4),e.width.toFixed(4),e.height.toFixed(4)].join(":"),nMt=(e,t,n=0.0001)=>bn(e,t)<=n,Nfe=class extends Oi{constructor(e,t={}){super(),this.ogSrj=e,this.viaDiameter=t.viaDiameter??y0(e).padDiameter,this.viaRadius=this.viaDiameter/2,this.minTraceWidth=t.minTraceWidth??e.minTraceWidth,this.obstacleMargin=t.obstacleMargin??e.defaultObstacleMargin??0.15,this.requiredViaToPadClearance=Math.max(this.obstacleMargin,e.minViaEdgeToPadEdgeClearance??0),this.escapeOffset=this.viaRadius+Math.max(this.minTraceWidth/2,this.requiredViaToPadClearance),this.requiredTraceClearance=this.minTraceWidth/2+this.obstacleMargin/2,this.requiredViaToViaClearance=this.viaDiameter+this.obstacleMargin,this.outputSrj=e,this.escapeViaMetadataByPointId=new Map,this.createdEscapeVias=[]}ogSrj;getSolverName(){return"EscapeViaLocationSolver"}viaDiameter;viaRadius;minTraceWidth;obstacleMargin;escapeOffset;requiredTraceClearance;requiredViaToPadClearance;requiredViaToViaClearance;outputSrj;escapeViaMetadataByPointId;createdEscapeVias;nextEscapeViaIndex=0;getConnectionNetIds(e){return new Set([e.name,...e.__rootConnectionNames??[],e.__netConnectionName].filter((t)=>Boolean(t)))}obstacleMatchesConnectionNet(e,t){return e.connectedTo.some((n)=>t.has(n))}getObstacleZs(e){return e.__zLayers&&e.__zLayers.length>0?e.__zLayers:e.layers.map((t)=>Wi(t,this.ogSrj.layerCount))}getViaSpanLayers(e,t){let n=Wi(e,this.ogSrj.layerCount),o=Wi(t,this.ogSrj.layerCount),i=Math.min(n,o),r=Math.max(n,o),s=Array.from({length:r-i+1},(a,c)=>i+c);return{__zLayers:s,layers:s.map((a)=>nd(a,this.ogSrj.layerCount))}}createEscapeViaObstacle(e){let{escapeVia:t,connectionNetIds:n}=e,{layers:o,__zLayers:i}=this.getViaSpanLayers(t.sourceLayer,t.targetLayer);return{obstacleId:`escape-via-obstacle:${t.pointId}`,type:"rect",layers:o,__zLayers:i,center:{x:t.x,y:t.y},width:this.viaDiameter,height:this.viaDiameter,connectedTo:Array.from(n)}}selectSourceObstacle(e){let{point:t,sourceLayer:n,connectionNetIds:o}=e;return this.ogSrj.obstacles.filter((i)=>!i.isCopperPour&&i.layers.includes(n)&&VNe(t,i)).sort((i,r)=>{let s=i.connectedTo.includes(t.pointId??"")||i.connectedTo.includes(t.pcb_port_id??"")||this.obstacleMatchesConnectionNet(i,o);return s!==(r.connectedTo.includes(t.pointId??"")||r.connectedTo.includes(t.pcb_port_id??"")||this.obstacleMatchesConnectionNet(r,o))?s?-1:1:i.width*i.height-r.width*r.height})[0]}getCandidatePositions(e,t){if(!t)return this.dedupeCandidatePositions([{x:e.x+this.escapeOffset,y:e.y},{x:e.x-this.escapeOffset,y:e.y},{x:e.x,y:e.y+this.escapeOffset},{x:e.x,y:e.y-this.escapeOffset},{x:e.x+this.escapeOffset,y:e.y+this.escapeOffset},{x:e.x+this.escapeOffset,y:e.y-this.escapeOffset},{x:e.x-this.escapeOffset,y:e.y+this.escapeOffset},{x:e.x-this.escapeOffset,y:e.y-this.escapeOffset}]);let n=t.center.x-t.width/2,o=t.center.x+t.width/2,i=t.center.y-t.height/2,r=t.center.y+t.height/2,s=n-this.escapeOffset,a=o+this.escapeOffset,c=i-this.escapeOffset,l=r+this.escapeOffset,d=this.getEdgeSamples(i,r,e.y),u=this.getEdgeSamples(n,o,e.x),h=[];for(let A of d)h.push({x:s,y:A},{x:a,y:A});for(let A of u)h.push({x:A,y:c},{x:A,y:l});return this.dedupeCandidatePositions(h)}dedupeCandidatePositions(e){let t=[];for(let n of e)t.some((o)=>nMt(o,n))||t.push(n);return t}pushEdgeSample(e,t,n,o){let i=Math.max(n,Math.min(o,t));e.some((r)=>Math.abs(r-i)<=Cx)||e.push(i)}getEdgeSamples(e,t,n){let o=[],i=t-e;if(this.pushEdgeSample(o,n,e,t),i<=Cx)return o;this.pushEdgeSample(o,e,e,t),this.pushEdgeSample(o,t,e,t),this.pushEdgeSample(o,(e+t)/2,e,t);let r=Math.max(e,Math.min(t,n)),s=Math.max(this.requiredViaToViaClearance,Cx),a=Math.ceil(i/s);for(let c=1;c<=a;c++){let l=c*s;this.pushEdgeSample(o,r+l,e,t),this.pushEdgeSample(o,r-l,e,t)}return o}isInsideBoard(e){return e.x>=this.ogSrj.bounds.minX+this.viaRadius&&e.x<=this.ogSrj.bounds.maxX-this.viaRadius&&e.y>=this.ogSrj.bounds.minY+this.viaRadius&&e.y<=this.ogSrj.bounds.maxY-this.viaRadius&&(!(this.ogSrj.outline&&this.ogSrj.outline.length>=3)||UNe(e,this.ogSrj.outline))}hasClearEscapePath(e){let{sourcePoint:t,candidate:n,sourceLayer:o,sourceObstacle:i}=e;if(this.ogSrj.outline&&this.ogSrj.outline.length>=3){if((({start:r,end:s,polygon:a,margin:c=0.2})=>{if(!a||a.length<3)return!1;let l=UNe(r,a),d=UNe(s,a);if(!l||!d)return!0;for(let u=0;u<a.length;u++){let h=a[u],A=a[(u+1)%a.length],m=Ake(r,h,A),p=Ake(s,h,A);if(m&&p)continue;if(!fu(r,s,h,A)){if(!m&&!p&&Hk(r,s,h,A)<c-Ige)return!0;continue}let g=T6(r,s,h,A);if(!(g&&(m&&KAe(g,r)||p&&KAe(g,s))||g&&(KAe(g,r)||KAe(g,s))))return!0}return!1})({start:t,end:n,polygon:this.ogSrj.outline,margin:this.requiredTraceClearance}))return!1}for(let r of this.ogSrj.obstacles){if(r===i)continue;if(!r.layers.includes(o))continue;if(VNe(n,r))return!1;let s=HQe(r);if(Math.min(...s.map((a)=>Hk(t,n,a.start,a.end)))+Cx<this.requiredTraceClearance)return!1}return!0}getBoardBoundarySegments(){if(this.ogSrj.outline&&this.ogSrj.outline.length>=3)return this.ogSrj.outline.map((i,r)=>({start:i,end:this.ogSrj.outline[(r+1)%this.ogSrj.outline.length]}));let{minX:e,maxX:t,minY:n,maxY:o}=this.ogSrj.bounds;return[{start:{x:e,y:n},end:{x:t,y:n}},{start:{x:t,y:n},end:{x:t,y:o}},{start:{x:t,y:o},end:{x:e,y:o}},{start:{x:e,y:o},end:{x:e,y:n}}]}getRayProbeDistance(){let{minX:e,maxX:t,minY:n,maxY:o}=this.ogSrj.bounds;return 2*Math.hypot(t-e,o-n)+this.viaDiameter}getRayIntersectionDistance(e){let{rayStart:t,rayEnd:n,segmentStart:o,segmentEnd:i}=e;if(!fu(t,n,o,i))return null;let r=T6(t,n,o,i);if(!r)return null;let s=bn(t,r);return s<=Cx?null:s}getProjectedFreeSpace(e){let{sourcePoint:t,candidate:n}=e,o=n.x-t.x,i=n.y-t.y;return Math.abs(o)<=Cx||Math.abs(i)<=Cx?this.getProjectedFreeSpaceAlongDirection({...e,direction:{x:o,y:i},travelDistance:bn(t,n)}):Math.min(this.getProjectedFreeSpaceAlongDirection({...e,direction:{x:0,y:Math.sign(i)},travelDistance:Math.abs(i)}),this.getProjectedFreeSpaceAlongDirection({...e,direction:{x:Math.sign(o),y:Math.sign(i)},travelDistance:bn(t,n)}),this.getProjectedFreeSpaceAlongDirection({...e,direction:{x:Math.sign(o),y:0},travelDistance:Math.abs(o)}))}getProjectedFreeSpaceAlongDirection(e){let{sourcePoint:t,sourceLayer:n,sourceObstacle:o,direction:i,travelDistance:r}=e,s=Math.hypot(i.x,i.y);if(s<=Cx||r<=Cx)return 0;let a=this.getRayProbeDistance(),c=i.x/s,l=i.y/s,d={x:t.x+c*a,y:t.y+l*a},u=Number.POSITIVE_INFINITY;for(let h of this.ogSrj.obstacles)if(h!==o&&h.layers.includes(n))for(let A of HQe(h)){let m=this.getRayIntersectionDistance({rayStart:t,rayEnd:d,segmentStart:A.start,segmentEnd:A.end});m!==null&&(u=Math.min(u,m))}for(let h of this.getBoardBoundarySegments()){let A=this.getRayIntersectionDistance({rayStart:t,rayEnd:d,segmentStart:h.start,segmentEnd:h.end});A!==null&&(u=Math.min(u,A))}return Number.isFinite(u)?Math.max(0,u-r):0}getMinBlockingClearance(e){let{candidate:t,connectionNetIds:n,sourceZ:o,targetZ:i}=e,r=Math.min(o,i),s=Math.max(o,i),a=Number.POSITIVE_INFINITY;for(let c of this.ogSrj.obstacles){let l=this.getObstacleZs(c);if(!l.some((u)=>u>=r&&u<=s))continue;if(c.isCopperPour&&!l.includes(o))continue;let d=jE(t,c)-this.viaRadius;if(a=Math.min(a,d),a+Cx<this.requiredViaToPadClearance)return a}return a}getMinPlacedEscapeViaClearance(e){let t=Number.POSITIVE_INFINITY;for(let n of this.createdEscapeVias){let o=bn(e,n)-this.viaDiameter;if(t=Math.min(t,o),t+Cx<this.obstacleMargin)return t}return t}selectPointOwner(e){let{point:t,groupConnections:n,matchingCopperPours:o}=e,i=uge(t),r=n.map((s)=>({connection:s,pointIndex:s.pointsToConnect.findIndex((a)=>uge(a)===i)})).filter((s)=>s.pointIndex!==-1);return r.length===0?null:(r.sort((s,a)=>{let c=o.some((l)=>this.obstacleMatchesConnectionNet(l,this.getConnectionNetIds(s.connection)));return c!==o.some((l)=>this.obstacleMatchesConnectionNet(l,this.getConnectionNetIds(a.connection)))?c?-1:1:s.pointIndex-a.pointIndex}),r[0])}findBestEscapeViaCandidate(e){let{connection:t,point:n,pointIndex:o,matchingCopperPours:i,connectionNetIds:r,sourceObstacle:s}=e;if(!Pk(n))return null;let a=n.layer,c=Wi(a,this.ogSrj.layerCount),l=s??this.selectSourceObstacle({point:n,sourceLayer:a,connectionNetIds:r}),d=this.getCandidatePositions(n,l),u=null;for(let h of i){let A=h.layers[0];if(!A||A===a)continue;let m=Wi(A,this.ogSrj.layerCount),p=ozo(h);for(let g of d){if(!this.isInsideBoard(g))continue;if(!VNe(g,h))continue;if(!this.hasClearEscapePath({sourcePoint:n,candidate:g,sourceLayer:a,sourceObstacle:l}))continue;let _=this.getMinBlockingClearance({candidate:g,connectionNetIds:r,sourceZ:c,targetZ:m});if(_+Cx<this.requiredViaToPadClearance)continue;let f=this.getMinPlacedEscapeViaClearance(g);if(f+Cx<this.obstacleMargin)continue;let y=this.getProjectedFreeSpace({sourcePoint:n,candidate:g,sourceLayer:a,sourceObstacle:l}),x=Math.min(y,3),C=100*_-bn(n,g)-0.5*Math.abs(m-c)+2*x+(Number.isFinite(f)?10*Math.min(f,this.requiredViaToViaClearance):0);(!u||C>u.score)&&(u={pointId:`${WNe}${t.name}:${n.pointId??`p${o}`}:${A}:${this.nextEscapeViaIndex++}`,x:g.x,y:g.y,connectionName:t.name,rootConnectionName:t.__rootConnectionNames?.[0]??t.name,sourcePointIndex:o,sourcePointId:n.pointId,sourceLayer:a,targetLayer:A,targetPourKey:p,score:C})}}return u}buildPointPlacementPlans(e){let{mergedConnection:t,groupConnections:n,matchingCopperPours:o,connectionNetIds:i}=e,r=[];for(let s of t.pointsToConnect){let a=this.selectPointOwner({point:s,groupConnections:n,matchingCopperPours:o});if(!a)continue;let c=Pk(s)?this.selectSourceObstacle({point:s,sourceLayer:s.layer,connectionNetIds:i}):void 0,l=Pk(s)?this.getCandidatePositions(s,c).length:0;r.push({point:s,pointOwner:a,sourceObstacle:c,candidateCount:l})}return r.sort((s,a)=>{if(s.candidateCount!==a.candidateCount)return s.candidateCount-a.candidateCount;let c=(s.sourceObstacle?.width??0)*(s.sourceObstacle?.height??0),l=(a.sourceObstacle?.width??0)*(a.sourceObstacle?.height??0);return c!==l?c-l:s.pointOwner.pointIndex-a.pointOwner.pointIndex})}_step(){let e=this.ogSrj.obstacles.filter((s)=>s.isCopperPour),t=this.ogSrj.connections,n=t.map((s)=>structuredClone(s)),o=new Map(n.map((s)=>[s.name,s])),i=structuredClone(this.ogSrj.obstacles),r=AOt([...t]);for(let s of r){let a=new Set(s.__rootConnectionNames??[s.name]),c=t.filter((m)=>(m.__rootConnectionNames??[m.name]).some((p)=>a.has(p)));if(c.length===0)continue;let l=new Set;for(let m of c)for(let p of this.getConnectionNetIds(m))l.add(p);let d=e.filter((m)=>this.obstacleMatchesConnectionNet(m,l));if(d.length===0)continue;let u=new Map,h=new Map,A=this.buildPointPlacementPlans({mergedConnection:s,groupConnections:c,matchingCopperPours:d,connectionNetIds:l});for(let{point:m,pointOwner:p,sourceObstacle:g}of A){let _=this.findBestEscapeViaCandidate({connection:p.connection,point:m,pointIndex:p.pointIndex,matchingCopperPours:d,connectionNetIds:l,sourceObstacle:g});if(!_)continue;let f=o.get(p.connection.name);if(!f)continue;if(f.pointsToConnect.some((x)=>Pk(x)&&x.layer===_.sourceLayer&&nMt(x,_)))continue;f.pointsToConnect.push({x:_.x,y:_.y,layer:_.sourceLayer,pointId:_.pointId,terminalVia:{toLayer:_.targetLayer,viaDiameter:this.viaDiameter}}),this.escapeViaMetadataByPointId.set(_.pointId,_),this.createdEscapeVias.push(_),i.push(this.createEscapeViaObstacle({escapeVia:_,connectionNetIds:this.getConnectionNetIds(p.connection)}));let y=u.get(_.targetPourKey);y?y.push(_.pointId):u.set(_.targetPourKey,[_.pointId]),h.has(_.targetPourKey)||h.set(_.targetPourKey,p.connection.name)}for(let[m,p]of u.entries()){if(p.length<=1)continue;let g=h.get(m);if(!g)continue;let _=o.get(g);_&&(_.externallyConnectedPointIds=[..._.externallyConnectedPointIds??[],p])}}this.outputSrj={...structuredClone(this.ogSrj),connections:n,obstacles:i},this.solved=!0}getOutputSimpleRouteJson(){return structuredClone(this.outputSrj)}getEscapeViaMetadataByPointId(){return new Map(this.escapeViaMetadataByPointId)}visualize(){return{title:"Escape Via Location Solver",points:this.outputSrj.connections.flatMap((e)=>e.pointsToConnect.map((t)=>({x:t.x,y:t.y,color:t.pointId?.startsWith(WNe)===!0?"#0f766e":"#dc2626",label:t.pointId?.startsWith(WNe)===!0?`${e.name}
escape via`:e.name}))),lines:this.createdEscapeVias.map((e)=>{let t=this.outputSrj.connections.find((n)=>n.name===e.connectionName)?.pointsToConnect[e.sourcePointIndex]??null;return{points:t?[{x:t.x,y:t.y},{x:e.x,y:e.y}]:[{x:e.x,y:e.y}],strokeColor:"#0f766e"}}),circles:this.createdEscapeVias.map((e)=>({center:{x:e.x,y:e.y},radius:this.viaRadius,strokeColor:"#0f766e",label:`${e.connectionName}
${e.targetLayer}`})),rects:this.outputSrj.obstacles.filter((e)=>!e.isCopperPour).map((e)=>({...e,fill:"rgba(220,38,38,0.12)"}))}}},izo=(e)=>({...e}),DE=(e)=>({...e,route:e.route?.map(izo),vias:e.vias?.map((t)=>({...t}))}),lS=(e)=>e.map(DE),xGt="#0000FF",vte=0.15,ri=0.000001,gU=0.1,fU=["top","bottom","left","right"],XNe=(e)=>e.x*e.x+e.y*e.y,jAe=(e,t)=>({x:e.x-t.x,y:e.y-t.y}),H8=(e,t,n)=>{let o=jAe(n,t),i=XNe(o);if(i<=ri)return Math.sqrt(XNe(jAe(e,t)));let r=(a=jAe(e,t),c=o,s=(a.x*c.x+a.y*c.y)/i,Math.max(0,Math.min(1,s)));var s,a,c;let l={x:t.x+o.x*r,y:t.y+o.y*r};return Math.sqrt(XNe(jAe(e,l)))},x6=(e)=>e?.z===1?"bottom":"top",rzo=(e,t,n)=>(e.z??0)===(t.z??0)&&((t.z??0)===(n.z??0)&&(e.x===t.x&&t.x===n.x||e.y===t.y&&t.y===n.y)),bge=(e,t,n)=>{let o=n?.get(e);if(o)return o;let i=e.route??[],r=e.traceThickness??vte,{POSITIVE_INFINITY:s,POSITIVE_INFINITY:a,NEGATIVE_INFINITY:c,NEGATIVE_INFINITY:l}=Number,d=!1,u=(A,m,p)=>{s=Math.min(s,A-p),a=Math.min(a,m-p),c=Math.max(c,A+p),l=Math.max(l,m+p),d=!0},h={segments:[],segmentsByLayer:{top:[],bottom:[]},vias:(e.vias??[]).map((A)=>{let m=(A.diameter??e.viaDiameter??0.3)/2;return u(A.x,A.y,m),{center:{x:A.x,y:A.y},radius:m,routeIndex:t}}),bounds:{minX:0,minY:0,maxX:0,maxY:0}};for(let A=0;A<i.length-1;){let m=i[A],p=A+1,g=i[p],_=r/2;for(m&&u(m.x,m.y,_),g&&u(g.x,g.y,_);p<i.length-1;){let x=i[p],C=i[p+1];if(!m||!x||!C)break;if(x6(m)!==x6(x))break;if(x6(x)!==x6(C))break;if(!rzo(m,x,C))break;p+=1,g=C,u(C.x,C.y,_)}if(!m||!g){A+=1;continue}let f=x6(m),y={start:m,end:g,routeIndex:t,pointIndex:A,endPointIndex:p,thickness:r,halfThickness:_,layer:f,minX:Math.min(m.x,g.x)-_,maxX:Math.max(m.x,g.x)+_,minY:Math.min(m.y,g.y)-_,maxY:Math.max(m.y,g.y)+_};h.segments.push(y),h.segmentsByLayer[f].push(y),A=p}if(!d)for(let A of i)u(A.x,A.y,r/2);return h.bounds=d?{minX:s,minY:a,maxX:c,maxY:l}:{minX:0,minY:0,maxX:0,maxY:0},n?.set(e,h),h},qAe=(e,t,n)=>t.x<=Math.max(e.x,n.x)+ri&&t.x>=Math.min(e.x,n.x)-ri&&t.y<=Math.max(e.y,n.y)+ri&&t.y>=Math.min(e.y,n.y)-ri,JAe=(e,t,n)=>(t.y-e.y)*(n.x-t.x)-(t.x-e.x)*(n.y-t.y),RU=(e,t,n,o)=>((i,r,s,a)=>{let c=JAe(i,r,s),l=JAe(i,r,a),d=JAe(s,a,i),u=JAe(s,a,r);return!!(Math.abs(c)<=ri&&qAe(i,s,r))||!!(Math.abs(l)<=ri&&qAe(i,a,r))||!!(Math.abs(d)<=ri&&qAe(s,i,a))||!!(Math.abs(u)<=ri&&qAe(s,r,a))||c>0!=l>0&&d>0!=u>0})(e,t,n,o)?0:Math.min(H8(e,n,o),H8(t,n,o),H8(n,e,t),H8(o,e,t)),NE=(e,t)=>Math.abs(e.x-t.x)<=ri&&Math.abs(e.y-t.y)<=ri,CGt=(e,t)=>NE(e.start,t.start)||NE(e.start,t.end)||NE(e.end,t.start)||NE(e.end,t.end),oMt=(e)=>{if(!e)return[];let t=[e.connectionName,e.rootConnectionName].filter((n)=>Boolean(n));return Array.from(new Set(t))},szo=(e,t)=>{let n=oMt(e),o=oMt(t);return n.length!==0&&o.length!==0&&n.some((i)=>o.includes(i))},azo=(e,t,n)=>e.minX-n<=t.maxX&&e.maxX+n>=t.minX&&e.minY-n<=t.maxY&&e.maxY+n>=t.minY,czo=(e,t,n)=>{let o=n+e.halfThickness+t.halfThickness-ri;return e.minX-n<=t.maxX&&e.maxX+n>=t.minX&&e.minY-n<=t.maxY&&e.maxY+n>=t.minY&&o>0},iMt=(e,t,n,o)=>{let i=o+n.halfThickness+t-ri,r=e.x-i,s=e.x+i,a=e.y-i,c=e.y+i;return r<=n.maxX&&s>=n.minX&&a<=n.maxY&&c>=n.minY},lzo=(e,t)=>{let n=new WeakMap,o=e.map((a,c)=>bge(a,c,n)),i=[],r=new Set,s=(a)=>{r.has(a.label)||(r.add(a.label),i.push(a))};for(let a=0;a<o.length;a+=1){let c=o[a];if(c)for(let l=a+1;l<o.length;l+=1){let d=o[l];if(d&&(!szo(e[a],e[l])&&azo(c.bounds,d.bounds,t))){for(let u of["top","bottom"]){let h=c.segmentsByLayer[u],A=d.segmentsByLayer[u];for(let m of h)for(let p of A){if(CGt(m,p))continue;if(!czo(m,p,t))continue;let g=t+(m.thickness+p.thickness)/2-ri;if(RU(m.start,m.end,p.start,p.end)>=g)continue;s({center:{x:(Math.max(m.minX-t,p.minX-t)+Math.min(m.maxX+t,p.maxX+t))/2,y:(Math.max(m.minY-t,p.minY-t)+Math.min(m.maxY+t,p.maxY+t))/2},label:`trace-violation:${a}:s${m.pointIndex}:${l}:s${p.pointIndex}:${u}`})}}for(let u of c.segments)for(let[h,A]of d.vias.entries()){if(!iMt(A.center,A.radius,u,t))continue;let m=t+u.halfThickness+A.radius-ri;H8(A.center,u.start,u.end)>=m||s({center:A.center,label:`trace-violation:${a}:s${u.pointIndex}:${l}:v${h}`})}for(let u of d.segments)for(let[h,A]of c.vias.entries()){if(!iMt(A.center,A.radius,u,t))continue;let m=t+u.halfThickness+A.radius-ri;H8(A.center,u.start,u.end)>=m||s({center:A.center,label:`trace-violation:${a}:v${h}:${l}:s${u.pointIndex}`})}}}}return((a)=>{let c=[];for(let l of a){let d=c.find((u)=>{return h=u.center,A=l.center,Math.hypot(h.x-A.x,h.y-A.y)<=0.28;var h,A});d?(d.center={x:(d.center.x*d.count+l.center.x)/(d.count+1),y:(d.center.y*d.count+l.center.y)/(d.count+1)},d.labels.push(l.label),d.count+=1):c.push({center:l.center,labels:[l.label],count:1})}return c.map((l,d)=>({center:l.center,radius:Math.min(0.3,0.2+0.035*Math.sqrt(l.count-1)),stroke:"#f59e0b",fill:"rgba(245, 158, 11, 0.46)",label:l.count===1?l.labels[0]:`trace-violations:${d}:count-${l.count}`}))})(i)},rMt=new WeakMap,sMt=new WeakMap,aMt=new WeakMap,xV=(e)=>{let t=rMt.get(e);return t===void 0&&(t=e.length>2&&e[e.length-1]-e[0]===e.length-1?`${e[0]}..${e[e.length-1]}`:e.join(","),rMt.set(e,t)),t},w8=({routeIndexes:e,layers:t,routePointIndexes:n})=>`${e[0]}:${t[0]}:${xV(n[0])}:${e[1]}:${t[1]}:${xV(n[1])}`,$Ae=(e,t,n,o,i,r,s)=>{let a=((c,l,d,u,h,A)=>c<d?`${c}:${l}:${xV(h)}:${d}:${u}:${xV(A)}`:`${d}:${u}:${xV(A)}:${c}:${l}:${xV(h)}`)(t,n,o,i,r,s);e.has(a)||(t<o?e.set(a,{routeIndexes:[t,o],layers:[n,i],routePointIndexes:[r,s]}):e.set(a,{routeIndexes:[o,t],layers:[i,n],routePointIndexes:[s,r]}))},ZAe=(e)=>{let t=sMt.get(e);if(t)return t;let n=[];for(let o=e.pointIndex;o<=e.endPointIndex;o+=1)n.push(o);return sMt.set(e,n),n},f8=(e,t)=>!t||e.some((n)=>t.has(n)),e_e=(e,t)=>{let n=aMt.get(t);if(n)return n;let o=e.route??[],i=[];for(let r=0;r<o.length;r+=1){let s=o[r];s&&(Math.abs(s.x-t.center.x)<=ri&&Math.abs(s.y-t.center.y)<=ri&&i.push(r))}return aMt.set(t,i),i},dzo=(e,t,n)=>e.minX-n<=t.maxX&&e.maxX+n>=t.minX&&e.minY-n<=t.maxY&&e.maxY+n>=t.minY,uzo=(e,t,n)=>{let o=n+e.halfThickness+t.halfThickness-ri;return e.minX-n<=t.maxX&&e.maxX+n>=t.minX&&e.minY-n<=t.maxY&&e.maxY+n>=t.minY&&o>0},cMt=(e,t,n,o)=>{let i=o+n.halfThickness+t-ri,r=e.x-i,s=e.x+i,a=e.y-i,c=e.y+i;return r<=n.maxX&&s>=n.minX&&a<=n.maxY&&c>=n.minY},hzo=(e,t,n)=>{let o=n+e.radius+t.radius-ri;return Math.abs(e.center.x-t.center.x)<=o&&Math.abs(e.center.y-t.center.y)<=o},r1=(e,t,n,o,i)=>{let r=e.map((d,u)=>bge(d,u,o)),s=new Map;if(t.size===0)return[];let a=Array.from(t),c=new Map,l=(d)=>{let u=c.get(d);if(u)return u;let h=r[d];if(!h)return[];let A=[];for(let m=0;m<r.length;m+=1){if(m===d)continue;let p=r[m];p&&(dzo(h.bounds,p.bounds,n)&&A.push(m))}return c.set(d,A),A};for(let d of a){let u=r[d];if(!u)continue;let h=l(d),A=i?.get(d);for(let m of u.segments){let p=ZAe(m);if(f8(p,A))for(let g of h){if(d>g&&t.has(g))continue;let _=r[g];if(!_)continue;let f=i?.get(g),y=_.segmentsByLayer[m.layer];for(let x of y){let C=ZAe(x);if(!f8(C,f))continue;if(CGt(m,x))continue;if(!uzo(m,x,n))continue;let I=n+(m.thickness+x.thickness)/2-ri;RU(m.start,m.end,x.start,x.end)<I&&$Ae(s,m.routeIndex,m.layer,x.routeIndex,x.layer,p,C)}}}}for(let d of a){let u=r[d];if(!u)continue;let h=l(d),A=i?.get(d);for(let m of u.vias){let p=e_e(e[m.routeIndex],m);if(f8(p,A))for(let g of h){if(d>g&&t.has(g))continue;let _=r[g];if(!_)continue;let f=i?.get(g);for(let y of _.segments){let x=ZAe(y);if(!f8(x,f))continue;if(!cMt(m.center,m.radius,y,n))continue;let C=n+y.thickness/2+m.radius-ri;H8(m.center,y.start,y.end)<C&&$Ae(s,y.routeIndex,y.layer,m.routeIndex,"via",x,p)}}}}for(let d of a){let u=r[d];if(!u)continue;let h=l(d),A=i?.get(d);for(let m of u.segments){let p=ZAe(m);if(f8(p,A))for(let g of h){let _=r[g];if(!_)continue;let f=i?.get(g);for(let y of _.vias){let x=e_e(e[y.routeIndex],y);if(!f8(x,f))continue;if(!cMt(y.center,y.radius,m,n))continue;let C=n+m.thickness/2+y.radius-ri;H8(y.center,m.start,m.end)<C&&$Ae(s,m.routeIndex,m.layer,y.routeIndex,"via",p,x)}}}}for(let d of a){let u=r[d];if(!u)continue;let h=l(d),A=i?.get(d);for(let m of u.vias){let p=e_e(e[m.routeIndex],m);if(f8(p,A))for(let g of h){if(d>g&&t.has(g))continue;let _=r[g];if(!_)continue;let f=i?.get(g);for(let y of _.vias){let x=e_e(e[y.routeIndex],y);if(!f8(x,f))continue;if(!hzo(m,y,n))continue;let C=n+m.radius+y.radius-ri;Math.hypot(m.center.x-y.center.x,m.center.y-y.center.y)<C&&$Ae(s,m.routeIndex,"via",y.routeIndex,"via",p,x)}}}}return Array.from(s.values())},lMt=(e,t)=>e.x>=t.minX-ri&&e.x<=t.maxX+ri&&e.y>=t.minY-ri&&e.y<=t.maxY+ri,mzo=(e,t,n)=>{switch(t){case"left":return{minX:e.minX,maxX:e.minX+n,minY:e.minY,maxY:e.maxY};case"right":return{minX:e.maxX-n,maxX:e.maxX,minY:e.minY,maxY:e.maxY};case"top":return{minX:e.minX,maxX:e.maxX,minY:e.maxY-n,maxY:e.maxY};case"bottom":return{minX:e.minX,maxX:e.maxX,minY:e.minY,maxY:e.minY+n}}},pzo=(e,t,n)=>{let o=t.x-e.x,i=t.y-e.y,r=0,s=1,a=(l,d)=>{if(Math.abs(l)<=ri)return d>=-0.000001;let u=d/l;return l<0?!(u>s)&&(u>r&&(r=u),!0):!(u<r)&&(u<s&&(s=u),!0)};if(!(a(-o,e.x-n.minX)&&a(o,n.maxX-e.x)&&a(-i,e.y-n.minY)&&a(i,n.maxY-e.y)))return 0;let c=Math.hypot(o,i);return Math.max(0,s-r)*c},dMt=(e,t)=>fU.filter((n)=>{switch(n){case"left":return Math.abs(e.x-t.minX)<=ri;case"right":return Math.abs(e.x-t.maxX)<=ri;case"top":return Math.abs(e.y-t.maxY)<=ri;case"bottom":return Math.abs(e.y-t.minY)<=ri}return!1}),uMt=(e,t)=>{let n=[];return e.x<t.minX-ri&&n.push("left"),e.x>t.maxX+ri&&n.push("right"),e.y>t.maxY+ri&&n.push("top"),e.y<t.minY-ri&&n.push("bottom"),n},Azo=(e,t,n)=>{let o=t.x-e.x,i=t.y-e.y;switch(n){case"left":case"right":return Math.abs(o)<=ri&&Math.abs(i)>ri;case"top":case"bottom":return Math.abs(i)<=ri&&Math.abs(o)>ri}},LV=(e,t,n)=>{let o=[],i=Math.max(n,ri),r=Math.min(0.1,i/4);for(let s=0;s<e.length;s+=1){let a=e[s],c=a?.route??[];for(let l=0;l<c.length-1;l+=1){let d=c[l],u=c[l+1];if(!d||!u)continue;let h=uMt(d,t),A=uMt(u,t),m=dMt(d,t),p=dMt(u,t),g=fU.filter((y)=>{if(a.connectedPadSides?.includes(y))return!1;return!(pzo(d,u,mzo(t,y,i))<=r)&&!!Azo(d,u,y)}),_=!lMt(d,t)||!lMt(u,t),f=Array.from(new Set([...g,...h,...A]));(_||f.length!==0)&&o.push({routeIndex:s,connectionName:a.connectionName??a.rootConnectionName??`route-${s}`,segmentIndex:l,touchedSides:f,startSides:m,endSides:p,start:d,end:u})}}return o},_ke=(e)=>e?.center&&e.width&&e.height?{minX:e.center.x-e.width/2,maxX:e.center.x+e.width/2,minY:e.center.y-e.height/2,maxY:e.center.y+e.height/2,width:e.width,height:e.height,center:e.center}:null,hMt=(e)=>e==="bottom"?xGt:"#FF0000",gke=(e)=>{let t=e.route??[],n=[];if(t.length<2)return n;let o=x6(t[0]),i=[t[0]];for(let r=1;r<t.length;r+=1){let s=t[r],a=x6(s);a===o?i.push(s):(i.length>=2&&n.push({points:i,strokeColor:hMt(o),strokeWidth:e.traceThickness??vte,label:e.connectionName??"route"}),o=a,i=[t[r-1],s])}return i.length>=2&&n.push({points:i,strokeColor:hMt(o),strokeWidth:e.traceThickness??vte,label:e.connectionName??"route"}),n},_zo=(e)=>{let t=DE(e),n=t.route??[],o=t.vias??[];for(let i=1;i<n.length;i++){let r=n[i-1],s=n[i];if((r.z??0)===(s.z??0))continue;if(r.x!==s.x||r.y!==s.y)throw Error("Node repair requires coincident via transition endpoints");let a=-1,c=0.001;for(let l=0;l<o.length;l++){let d=o[l],u=Math.hypot(d.x-r.x,d.y-r.y);u<=c&&(a=l,c=u)}a===-1?o.push({x:r.x,y:r.y,diameter:t.viaDiameter}):o[a]={...o[a],x:r.x,y:r.y}}return(o.length||t.vias)&&(t.vias=o),t},IGt=class{scenes=new WeakMap;retainedBytes=0;maximumBytes=33554432;getCandidatePairs(e,t,n,o,i){if(!Number.isFinite(i)||i<0)return;let r=o[n];for(let l of r)if(!Number.isFinite(l.start.x)||!Number.isFinite(l.start.y)||!Number.isFinite(l.end.x)||!Number.isFinite(l.end.y)||!Number.isFinite(l.radius)||l.radius<0)return;let s=this.scenes.get(e),a=s?.get(n);if(a?.fixedRoutes!==t&&(a=void 0),!a){let l=0,d=1;for(let g=0;g<o.length;g++)if(g!==n)for(let _=0;_<o[g].length;_++){let f=o[g][_];if(!Number.isFinite(f.start.x)||!Number.isFinite(f.start.y)||!Number.isFinite(f.end.x)||!Number.isFinite(f.end.y)||!Number.isFinite(f.radius)||f.radius<0)return;d=Math.max(d,Math.abs(f.start.x),Math.abs(f.start.y),Math.abs(f.end.x),Math.abs(f.end.y),f.radius),l++}if(l<32)return;let u=new Vm(l),h=new Uint32Array(l),A=new Uint32Array(l),m=0;for(let g=0;g<o.length;g++)if(g!==n)for(let _=0;_<o[g].length;_++){let f=o[g][_],y=Math.min(f.start.x,f.end.x)-f.radius,x=Math.min(f.start.y,f.end.y)-f.radius,C=Math.max(f.start.x,f.end.x)+f.radius,I=Math.max(f.start.y,f.end.y)+f.radius;if(!(Number.isFinite(y)&&Number.isFinite(x)&&Number.isFinite(C)&&Number.isFinite(I)))return;u.add(y,x,C,I),h[m]=g,A[m]=_,m++}u.finish(),a={index:u,routeIndexes:h,copperIndexes:A,maxMagnitude:d,fixedRoutes:t,queries:[],queryHitCount:0};let p=u.data.byteLength+h.byteLength+A.byteLength;this.retainedBytes+p>this.maximumBytes&&(this.scenes=new WeakMap,this.retainedBytes=0,s=void 0),p<=this.maximumBytes&&(s||(s=new Map,this.scenes.set(e,s)),s.set(n,a),this.retainedBytes+=p)}let c=new Map;for(let l=0;l<r.length;l++){let d=r[l],u=i+d.radius,h=8*Number.EPSILON*(a.maxMagnitude+Math.abs(d.start.x)+Math.abs(d.start.y)+Math.abs(d.end.x)+Math.abs(d.end.y)+u+1);if(!Number.isFinite(h+u))return;let A=Math.min(d.start.x,d.end.x)-u-h,m=Math.min(d.start.y,d.end.y)-u-h,p=Math.max(d.start.x,d.end.x)+u+h,g=Math.max(d.start.y,d.end.y)+u+h,_=a.queries[l],f;if(_&&_.minX===A&&_.minY===m&&_.maxX===p&&_.maxY===g)f=_.hits;else{f=a.index.search(A,m,p,g).sort((x,C)=>x-C);let y=a.queryHitCount-(_?.hits.length??0)+f.length;y<=65536&&(a.queries[l]={minX:A,minY:m,maxX:p,maxY:g,hits:f},a.queryHitCount=y)}for(let y of f){let x=a.routeIndexes[y],C=a.copperIndexes[y],I=c.get(x);I||(I=[],c.set(x,I));let b=x<n?C:l,P=x<n?l:C;(I[b]??=[]).push(P)}}return c}},bGt=(e)=>{let t=e.route??[],n=[];for(let o=1;o<t.length;o++){let i=t[o-1],r=t[o];(i.z??0)===(r.z??0)&&n.push({start:i,end:r,minX:Math.min(i.x,r.x),minY:Math.min(i.y,r.y),maxX:Math.max(i.x,r.x),maxY:Math.max(i.y,r.y),magnitude:1+Math.abs(i.x)+Math.abs(i.y)+Math.abs(r.x)+Math.abs(r.y),radius:(e.traceThickness??vte)/2,minZ:i.z??0,maxZ:i.z??0,indexes:[o-1,o],via:!1})}for(let[o,i]of(e.vias??[]).entries()){let r=t.flatMap((a,c)=>a.x===i.x&&a.y===i.y?[c]:[]),s=r.map((a)=>t[a].z??0);n.push({start:i,end:i,minX:i.x,minY:i.y,maxX:i.x,maxY:i.y,magnitude:1+2*(Math.abs(i.x)+Math.abs(i.y)),radius:(i.diameter??e.viaDiameter??0.3)/2,minZ:s.length?Math.min(...s):0,maxZ:s.length?Math.max(...s):1,indexes:r,via:!0,viaIndex:o})}return n},Sge=(e,t,n,o=[],i,r=new WeakMap,s=new IGt,a=new WeakMap,c=new WeakMap)=>{let l=[...e,...o],d=l.map((m)=>{let p=r.get(m);return p||(p=bGt(m),r.set(m,p)),p}),u=i?s.getCandidatePairs(i.routes,o,i.changedRoute,d,t):void 0,h=i?i.evaluation.conflicts.filter((m)=>m.firstRoute!==i.changedRoute&&m.secondRoute!==i.changedRoute):[],A=h.reduce((m,p)=>m+p.penetration**2,0);for(let m=0;m<e.length&&!(i&&m>i.changedRoute);m++){let p=e[m],g=c.get(p);if(g||(g=new Set([p.connectionName,p.rootConnectionName].filter(Boolean)),c.set(p,g)),!i||m===i.changedRoute){let x=d[m].filter((C)=>C.via);for(let C=0;C<x.length;C++){let I=x[C];for(let b=C+1;b<x.length;b++){let P=x[b];if(I.maxZ<P.minZ||P.maxZ<I.minZ)continue;let E=Math.hypot(I.start.x-P.start.x,I.start.y-P.start.y);if(E===0)continue;let B=t+I.radius+P.radius-E;B<=ri||(h.push({key:`${m}:vias:${C}:${b}`,firstRoute:m,secondRoute:m,first:I,second:P,penetration:B}),A+=B**2)}}for(let[C,I]of n.entries()){if(I.connectedTo?.some((E)=>g.has(E)))continue;let b,P=a.get(I);!P&&I.center&&I.width!==void 0&&I.height!==void 0&&I.width>=0&&I.height>=0&&(P={minX:I.center.x-I.width/2,minY:I.center.y-I.height/2,maxX:I.center.x+I.width/2,maxY:I.center.y+I.height/2,magnitude:Math.abs(I.center.x)+Math.abs(I.center.y)+Math.abs(I.width)+Math.abs(I.height)},a.set(I,P));for(let E of d[m]){if(I.zLayers&&!I.zLayers.some((w)=>w>=E.minZ&&w<=E.maxZ))continue;if(P&&t+E.radius>=0){let w=t+E.radius,T=32*Number.EPSILON*(E.magnitude+P.magnitude+Math.abs(w));if(E.minX>P.maxX+w+T||E.maxX<P.minX-w-T||E.minY>P.maxY+w+T||E.maxY<P.minY-w-T)continue}let B=t-Pge(E,I);B<=ri||B<=(b?.penetration??0)||(b={key:`${m}:pad:${C}`,firstRoute:m,secondRoute:-1,first:E,second:E,penetration:B})}b&&(h.push(b),A+=b.penetration**2)}}let _=i&&m!==i.changedRoute,f=_?i.changedRoute:m+1,y=_?i.changedRoute+1:l.length;for(let x=f;x<y;x++){let C=l[x],I=g.has(C.connectionName)||g.has(C.rootConnectionName),b=new Map,P=u?.get(m===i?.changedRoute?x:m);if(u&&!P)continue;let E=d[m],B=d[x];for(let w=0;w<E.length;w++){let T=E[w],Q=P?.[w];if(u&&!Q)continue;let N=Q?Q.length:B.length;for(let F=0;F<N;F++){let H=B[Q?Q[F]:F];if(I&&(!T.via||!H.via))continue;if(T.maxZ<H.minZ||H.maxZ<T.minZ)continue;if(I&&T.start.x===H.start.x&&T.start.y===H.start.y)continue;let z=t+T.radius+H.radius;if(Math.min(T.start.x,T.end.x)>Math.max(H.start.x,H.end.x)+z||Math.min(H.start.x,H.end.x)>Math.max(T.start.x,T.end.x)+z||Math.min(T.start.y,T.end.y)>Math.max(H.start.y,H.end.y)+z||Math.min(H.start.y,H.end.y)>Math.max(T.start.y,T.end.y)+z)continue;let Y=z-RU(T.start,T.end,H.start,H.end);if(Y<=ri)continue;let U=`${T.via?`via:${T.viaIndex}`:`trace:${T.minZ}`}:${H.via?`via:${H.viaIndex}`:`trace:${H.minZ}`}`;Y<=(b.get(U)?.penetration??0)||b.set(U,{key:`${m}:${x}:${U}`,firstRoute:m,secondRoute:x,first:T,second:H,penetration:Y})}}for(let w of b.values())h.push(w),A+=w.penetration**2}}return h.sort((m,p)=>p.penetration-m.penetration),{conflicts:h,score:A}},Pge=(e,t)=>{if(!t.center||t.width===void 0||t.height===void 0)return 1/0;let n=t.center.x-t.width/2,o=t.center.x+t.width/2,i=t.center.y-t.height/2,r=t.center.y+t.height/2,s=0;for(let c of[e.start,e.end])c.x>=n&&c.x<=o&&c.y>=i&&c.y<=r&&(s=Math.max(s,e.radius+Math.min(c.x-n,o-c.x,c.y-i,r-c.y)));if(s>0)return-s;let a=[{x:n,y:i},{x:o,y:i},{x:o,y:r},{x:n,y:r}];return Math.min(...a.map((c,l)=>RU(e.start,e.end,c,a[(l+1)%4])))-e.radius},mMt=(e,t)=>{let n=bGt(e).filter((o)=>!t.zLayers||t.zLayers.some((i)=>i>=o.minZ&&i<=o.maxZ));return Math.min(...n.map((o)=>Pge(o,t)))},gzo=(e,t,n,o,i)=>{let r=DE(e),s=r.route??[],a=e.route??[],c=(d)=>d===0||d===s.length-1,l=new Set;for(let d of t.indexes){if(c(d))continue;let u=a[d];a.forEach((h,A)=>{h.x===u.x&&h.y===u.y&&l.add(A)})}if(!([...l].some(c)||t.via&&t.indexes.some(c))){if(l.size===0){if(t.via||t.indexes.length!==2)return;let[d,u]=t.indexes,h=s[d],A=s[u],m=[0.25,0.75].map((p)=>({...h,x:h.x+(A.x-h.x)*p+n,y:h.y+(A.y-h.y)*p+o}));s.splice(u,0,...m)}else{for(let d of l)s[d].x+=n,s[d].y+=o;for(let d of r.vias??[])[...l].some((u)=>a[u].x===d.x&&a[u].y===d.y)&&(d.x+=n,d.y+=o)}if(!s.some((d,u)=>u>0&&u<s.length-1&&(d.x<i.minX||d.x>i.maxX||d.y<i.minY||d.y>i.maxY)))return r}},KNe=(e)=>{let t=[],n=e.route??[];for(let o=1;o<n.length;o++){let i=n[o-1],r=n[o];(i.z??0)===(r.z??0)&&t.push({start:i,end:r,radius:(e.traceThickness??vte)/2,minZ:i.z??0,maxZ:i.z??0})}for(let o of e.vias??[]){let i=1/0,r=-1/0;for(let s=1;s<n.length;s++){let a=n[s-1],c=n[s];Math.hypot(a.x-o.x,a.y-o.y)>0.001||Math.hypot(c.x-o.x,c.y-o.y)>0.001||a.z===c.z||(i=Math.min(i,a.z??0,c.z??0),r=Math.max(r,a.z??0,c.z??0))}t.push({start:o,end:o,radius:(o.diameter??e.viaDiameter??0.3)/2,minZ:i===1/0?0:i,maxZ:r===-1/0?1:r})}return t},pMt=(e,t)=>{let n=1/0;for(let o of e)o.maxZ<t.minZ||t.maxZ<o.minZ||(n=Math.min(n,RU(o.start,o.end,t.start,t.end)-o.radius-t.radius));return n},fzo=class{constructor(e,t,n=[]){this.minimumClearance=t,this.obstacles=n,this.fixedCopper=e.map((o)=>({route:o,copper:KNe(o)}))}minimumClearance;obstacles;fixedCopper;cache=new WeakMap;allows(e,t,n,o=!0){if(o&&((i,r,s)=>{let a=new Map(Sge(i,s,[]).conflicts.map((c)=>[c.key,c.penetration]));return Sge(r,s,[]).conflicts.some((c)=>c.penetration>(a.get(c.key)??0)+ri)})(e,t,this.minimumClearance))return!1;if(this.fixedCopper.length===0&&this.obstacles.length===0)return!0;for(let i of n){let r=e[i],s=t[i];if(r===s)continue;let a=this.cache.get(r)??KNe(r),c=this.cache.get(s)??KNe(s);this.cache.set(r,a),this.cache.set(s,c);let l=new Set([r.connectionName,r.rootConnectionName].filter(Boolean));for(let d of this.obstacles){if(d.connectedTo?.some((A)=>l.has(A)))continue;let u=mMt(s,d);if(u>=this.minimumClearance-ri)continue;let h=mMt(r,d);if(u<Math.min(h,this.minimumClearance)-ri)return!1}for(let d of this.fixedCopper)if(!l.has(d.route.connectionName)&&!l.has(d.route.rootConnectionName))for(let u of d.copper){let h=pMt(c,u);if(h>=this.minimumClearance-ri)continue;let A=pMt(a,u);if(h<Math.min(A,this.minimumClearance)-ri)return!1}}return!0}},yzo=(e,t)=>({title:`HighDensityRepair02 Initial State (margin=${t})`,routes:e}),vge=(e)=>{let t=[];for(let n of e){let o=t[t.length-1];o&&o.z===n.z&&NE(o,n)||t.push(n)}return t},xzo=(e,t,n)=>{let o=Math.max(0,e.minX-t.maxX,t.minX-e.maxX),i=Math.max(0,e.minY-t.maxY,t.minY-e.maxY);return Math.hypot(o,i)<=n+ri},AMt=(e,t)=>{let n=Number.POSITIVE_INFINITY;for(let o of e.segments)for(let i of t.segments){if(o.layer!==i.layer)continue;let r=RU(o.start,o.end,i.start,i.end)-(o.thickness+i.thickness)/2;n=Math.min(n,r)}return n},fke=({currentRoutes:e,candidateRoutes:t,candidateRouteIndexes:n,maximumAllowedClearance:o})=>{let i=new WeakMap,r=new WeakMap,s=[],a=Array.from(n).sort((u,h)=>u-h),c=e.map((u,h)=>bge(u,h,i)),l=t.map((u,h)=>bge(u,h,r)),d=new Set;for(let u of a)for(let h=0;h<t.length;h+=1){if(h===u)continue;let A=Math.min(u,h),m=Math.max(u,h),p=`${A}:${m}`;if(d.has(p))continue;d.add(p);let g=l[A],_=l[m];if(!g||!_||!xzo(g.bounds,_.bounds,o))continue;let f=AMt(g,_);if(!Number.isFinite(f)||f>o+ri||!c[A]||!c[m])continue;let y=AMt(c[A],c[m]);!Number.isFinite(y)||f>=y-ri||s.push({routeIndexes:[A,m],previousClearance:y,nextClearance:f})}return s},t_e=0.001,Czo=(e,t)=>e.map((n)=>{let o=n.route??[];return o.length===0?n:{...n,route:o.map((i,r)=>r===0||r===o.length-1?((s,a)=>{let c={...s};return Math.abs(c.x-a.minX)<=t_e?c.x=a.minX:Math.abs(c.x-a.maxX)<=t_e&&(c.x=a.maxX),Math.abs(c.y-a.minY)<=t_e?c.y=a.minY:Math.abs(c.y-a.maxY)<=t_e&&(c.y=a.maxY),c})(i,t):i)}}),Izo=(e,t)=>Array.from(t).flatMap((n)=>gke(e[n]).map((o)=>({...o,strokeColor:"#000000",strokeWidth:o.strokeWidth,label:`candidate:${o.label}`}))),SGt=(e,t,n,o,i)=>{switch(t){case"left":return{center:{x:e.minX+n/2,y:e.center.y},width:n,height:e.height,stroke:"rgba(0, 0, 0, 0)",fill:o,label:i};case"right":return{center:{x:e.maxX-n/2,y:e.center.y},width:n,height:e.height,stroke:"rgba(0, 0, 0, 0)",fill:o,label:i};case"top":return{center:{x:e.center.x,y:e.maxY-n/2},width:e.width,height:n,stroke:"rgba(0, 0, 0, 0)",fill:o,label:i};case"bottom":return{center:{x:e.center.x,y:e.minY+n/2},width:e.width,height:n,stroke:"rgba(0, 0, 0, 0)",fill:o,label:i}}},bzo=({routes:e,candidateRoutes:t,candidateRouteIndexes:n,originalRoutes:o,boundary:i,side:r,margin:s,rejected:a,rejectionReason:c})=>{let l=Array.from(n).map((d)=>t[d].connectionName??`route-${d}`);return{title:a?`${r} move rejected (${c})`:`${r} move accepted`,routes:a?e:t,originalRoutes:o,activeSide:r,candidateRouteNames:l,overlayLines:a?Izo(t,n):[],overlayRects:[SGt(i,r,s,a?"rgba(220, 38, 38, 0.14)":"rgba(16, 185, 129, 0.14)",a?`rejected:${r}`:`accepted:${r}`)]}},Szo=(e,t,n,o)=>{let i=(e?.adjacentObstacles??[]).some((r)=>((s,a,c,l)=>{let d=((u)=>u.center&&u.width&&u.height?{minX:u.center.x-u.width/2,maxX:u.center.x+u.width/2,minY:u.center.y-u.height/2,maxY:u.center.y+u.height/2}:null)(s);if(!d)return!1;switch(c){case"left":return d.maxX>=a.minX-ri&&d.minX<=a.minX+l+ri;case"right":return d.minX<=a.maxX+ri&&d.maxX>=a.maxX-l-ri;case"top":return d.minY<=a.maxY+ri&&d.maxY>=a.maxY-l-ri;case"bottom":return d.maxY>=a.minY-ri&&d.minY<=a.minY+l+ri}})(r,t,n,o));return{hasObstacle:i,moveAmount:i?o:o/2}},Pzo=({start:e,end:t,side:n,boundary:o,amount:i,targetAxisValue:r})=>{let s=(({side:a,boundary:c,amount:l,targetAxisValue:d})=>{let u=d??(()=>{switch(a){case"left":return c.minX+l;case"right":return c.maxX-l;case"top":return c.maxY-l;case"bottom":return c.minY+l}})();switch(a){case"left":case"right":return Math.min(Math.max(u,c.minX),c.maxX);case"top":case"bottom":return Math.min(Math.max(u,c.minY),c.maxY)}})({side:n,boundary:o,amount:i,targetAxisValue:r});switch(n){case"left":case"right":return vge([e,{x:s,y:e.y,z:e.z},{x:s,y:t.y,z:t.z},t]);case"top":case"bottom":return vge([e,{x:e.x,y:s,z:e.z},{x:t.x,y:s,z:t.z},t])}},vzo=(e,t,n,o,i,r,s,a=!1)=>{let c=e.route??[];if(c.length<2||t.length===0)return DE(e);let l=a?i:Math.max(i,r),d=((h,A)=>{switch(h){case"left":return{x:A,y:0};case"right":return{x:-A,y:0};case"top":return{x:0,y:-A};case"bottom":return{x:0,y:A}}})(o,l);if(a||(e.vias?.length??0)>0||c.length>2){let h=DE(e),A=h.route??[];for(let m of t){let p=A[m];p&&(A[m]={...p,x:p.x+d.x,y:p.y+d.y})}for(let m of h.vias??[])t.some((p)=>{let g=e.route?.[p];return!!g&&NE(g,m)})&&(m.x+=d.x,m.y+=d.y);return h}let u=DE(e);if(c.length===2&&t.length===2&&t[0]===0&&t[1]===1){let h=c[0],A=c[1];return DE({...e,route:Pzo({start:h,end:A,side:o,boundary:n,amount:l,targetAxisValue:s})})}return u},Rfe=(e,t,n)=>{switch(n){case"left":return e.x-t.minX;case"right":return t.maxX-e.x;case"top":return t.maxY-e.y;case"bottom":return e.y-t.minY}},_Mt=(e,t,n)=>{let o=((i)=>{let r=i.route??[];if(r.length===0)return[];let s=[];for(let a=0;a<r.length;a+=1){let c=r[a];if(!c)continue;a===0||a===r.length-1||s.push(c);let l=r[a+1];l&&s.push({x:(c.x+l.x)/2,y:(c.y+l.y)/2})}return s})(e);return o.length===0?Number.POSITIVE_INFINITY:o.reduce((i,r)=>Math.min(i,Rfe(r,t,n)),Number.POSITIVE_INFINITY)},yke=(e,t,n=[])=>{let o=e.route??[],i=[],r=new Set,s=t.length===0||t.includes("via");if(o.length===2)return[0,1];let a=(c)=>{if(c<=0||c>=o.length-1)return;if(r.has(c))return;let l=o[c];l&&(s||t.includes(x6(l)))&&(r.add(c),i.push(c))};if(n.length>0)for(let c of n)a(c);else for(let c=1;c<o.length-1;c+=1)a(c);for(let c=0;c<i.length;c+=1){let l=i[c],d=o[l];if(d)for(let u=1;u<o.length-1;u+=1){if(r.has(u))continue;let h=o[u];h&&(h.z!==d.z&&NE(h,d)&&(r.add(u),i.push(u)))}}return i.sort((c,l)=>c-l),i},gMt=(e,t)=>Math.max(0,...(e.route??[]).map((n)=>Math.max(t.minX-n.x,n.x-t.maxX,t.minY-n.y,n.y-t.maxY,0))),FV=(e,t,n,o)=>Rfe(e,t,n)<=o+ri,fMt=(e,t,n,o)=>{let i=e.route??[],r=[],s=new Set,a=1,c=i.length-2;for(;a<i.length-1&&NE(i[a],i[0]);)a+=1;for(;c>0&&NE(i[c],i[i.length-1]);)c-=1;for(let l=a;l<=c;l+=1)FV(i[l],t,n,o)&&(s.add(l),r.push(l));for(let l=0;l<r.length;l+=1){let d=i[r[l]];if(d)for(let u=a;u<=c;u+=1){if(s.has(u))continue;let h=i[u];h&&(h.z!==d.z&&NE(h,d)&&(s.add(u),r.push(u)))}}return r.length===0&&i.length===2&&i.some((l)=>FV(l,t,n,o))?[0,1]:(r.sort((l,d)=>l-d),r)},Ezo=(e,t,n)=>{let o=e.route??[],i=n===0?o[0]:o[o.length-1];return i?fU.filter((r)=>Rfe(i,t,r)<=ri):[]},Mzo=(e,t,n)=>{let o=e.route??[],i=t.route??[];if(o.length===0||i.length===0)return!0;for(let r of[0,-1]){let s=Ezo(e,n,r);if(s.length===0)continue;let a=r===0?i[0]:i[i.length-1];if(!a)return!1;for(let c of s)if(Rfe(a,n,c)>ri)return!1}return!0},Bzo=(e,t)=>Math.hypot(t.x-e.x,t.y-e.y),yMt=(e,t,n,o)=>{let i=e.route??[];if(i.length===0)return"none";let r=!1;for(let s=0;s<i.length;s+=1){let a=i[s];if(a&&FV(a,t,n,o)){if(s!==0&&s!==i.length-1)return"interior";r=!0}}for(let s=0;s<i.length-1;s+=1){let a=i[s],c=i[s+1];if(a&&c&&(FV(a,t,n,o)&&FV(c,t,n,o)&&!(Bzo(a,c)<=ri)))return"interior"}return r?"endpoint":"none"},xMt=({currentRoutes:e,routeIndex:t,side:n,moveSide:o=n,boundary:i,margin:r,moveAmount:s,geometryCache:a,fixedCopperGuard:c})=>{let l=e[t],d=(l.route?.length??0)===2,u=fMt(l,i,n,r);if(u.length===0)return null;let h=new Set,A=new Map,m=new Set,p=e.slice(),g=!1,_="overlap",f=new Set([t]),y=new Map([[t,new Set]]),x=new Map([[t,new Set]]),C=[t],I=0,b=null,P=null,E=null,B=null,w=(F)=>new Set(F.map((H)=>w8(H))),T=()=>b||(b=r1(e,h,r,a,A),b),Q=()=>E||(E=r1(e,h,0,a,A),E),N=()=>B||(B=r1(p,h,0,a,A),B);for(;I<C.length&&!g;){let F=C[I];if(I+=1,f.delete(F),h.has(F))continue;let H=p[F],z=Array.from(y.get(F)??[]),Y=Array.from(x.get(F)??[]);y.delete(F),x.delete(F);let U=F===t?fMt(H,i,n,r):yke(H,z,Y);if(U.length===0){if(F===t)return null;g=!0,_="eventual-overlap";break}let X=H.route??[],V=F===t?void 0:o==="left"||o==="right"?(X[U[0]]?.x??0)+(o==="left"?s:-s):(X[U[0]]?.y??0)+(o==="top"?-s:s);p[F]=vzo(H,U,i,o,s,r,V,F!==t),h.add(F),A.set(F,new Set(U)),b=null,P=null,E=null,B=null,(H.route?.length??0)===2&&m.add(F);let W=gMt(e[F],i);if(gMt(p[F],i)>W+0.000001){g=!0,_="boundary";break}if(!Mzo(e[F],p[F],i)){g=!0,_="endpoint-boundary";break}let j=r1(p,new Set([F]),r,a,new Map([[F,new Set(U)]]));for(let q of j){if(w(T()).has(w8(q)))continue;let[ne,ce]=q.routeIndexes,oe=h.has(ne),ie=h.has(ce);if(oe&&ie)continue;let J=oe?ce:ne,ee=oe?q.layers[1]:q.layers[0],se=oe?q.routePointIndexes[1]:q.routePointIndexes[0];if(h.has(J)||f.has(J)){if(f.has(J)){let le=y.get(J)??new Set;le.add(ee),y.set(J,le);let he=x.get(J)??new Set;for(let ue of se)he.add(ue);x.set(J,he)}}else f.add(J),C.push(J),y.set(J,new Set([ee])),x.set(J,new Set(se))}}if(!g&&h.size>1){let F=w(T()),H=w(P||(P=r1(p,h,r,a,A),P));for(let z of H)if(!F.has(z)){g=!0,_="eventual-overlap";break}}if(!g&&h.size>1){let F=w(Q()),H=w(N());for(let z of H)if(!F.has(z)){g=!0,_="eventual-overlap";break}}if(!g){let F=new Set(r1(e,h,0,a).map((z)=>w8(z))),H=r1(p,h,0,a);for(let z of H){let Y=w8(z);if(!F.has(Y)){g=!0,_="eventual-overlap";break}}}if(!g)(({currentRoutes:H,candidateRoutes:z,candidateRouteIndexes:Y,boundary:U,activeSide:X})=>{let V=fU.filter((j)=>j!==X),W=[];for(let j of Y){let q=H[j],ne=z[j];if(q&&ne)for(let ce of V){let oe=_Mt(q,U,ce),ie=_Mt(ne,U,ce);oe>ri&&ie<=ri&&W.push({routeIndex:j,side:ce,previousClearance:oe,nextClearance:ie})}}return W})({currentRoutes:e,candidateRoutes:p,candidateRouteIndexes:h,boundary:i,activeSide:n}).length>0&&(g=!0,_="boundary-touch");if(!g)(({currentRoutes:H,candidateRoutes:z,candidateRouteIndexes:Y,geometryCache:U,currentConflicts:X,candidateConflicts:V})=>{let W=X??r1(H,Y,0,U),j=V??r1(z,Y,0,U),q=new Set(W.map((ne)=>w8(ne)));return j.filter((ne)=>{let ce=w8(ne);if(q.has(ce))return!1;let[oe,ie]=ne.routeIndexes,[J,ee]=ne.layers,se=Y.has(oe),le=Y.has(ie);if(se&&le)return!1;let he=se?ee:J,ue=z[se?ie:oe];return!!ue&&yke(ue,[he]).length===0})})({currentRoutes:e,candidateRoutes:p,candidateRouteIndexes:h,geometryCache:a,currentConflicts:Q(),candidateConflicts:N()}).length>0&&(g=!0,_="fixed-trace-touch");if(!g)fke({currentRoutes:e,candidateRoutes:p,candidateRouteIndexes:h,maximumAllowedClearance:Math.min(r/2,gU)}).length>0&&(g=!0,_="trace-clearance");return!g&&((F,H,z,Y,U,X)=>Array.from(z).some((V)=>{let W=F[V],j=H[V];return fU.filter((q)=>q!==U).some((q)=>{let ne=yMt(W,Y,q,X),ce=yMt(j,Y,q,X);return ne==="none"&&ce!=="none"})}))(e,p,h,i,n,r)&&(g=!0,_="side-regression"),g||!c||c.allows(e,p,h)||(g=!0,_="fixed-copper-clearance"),{isTwoPointRoute:d,movableIndexes:u,candidateRouteIndexes:h,movedTwoPointRouteIndexes:m,candidateRoutes:p,rejected:g,rejectionReason:_}},wzo=(e,t,n,o,i)=>{let r=e.route??[];if(t.length===0)return null;if(o==="top"||o==="bottom"){let a=t.reduce((c,l)=>c+(r[l]?.x??n.center.x),0)/t.length;return a<n.center.x-i/2?"right":a>n.center.x+i/2?"left":null}let s=t.reduce((a,c)=>a+(r[c]?.y??n.center.y),0)/t.length;return s>n.center.y+i/2?"bottom":s<n.center.y-i/2?"top":null},Tzo=({side:e,sample:t,boundary:n,margin:o,repairedRoutes:i,frames:r,captureProgressFrames:s,lockedTwoPointRoutes:a,geometryCache:c,fixedCopperGuard:l,allowTwoPointWithoutObstacle:d=!1})=>{let{hasObstacle:u,moveAmount:h}=Szo(t,n,e,o);s&&r.push(((p,g,_,f,y,x)=>({title:`${_} boundary analysis: move=${y.toFixed(3)} (${x?"obstacle-side":"clear-side"})`,routes:p,activeSide:_,overlayRects:[SGt(g,_,f,"rgba(245, 158, 11, 0.16)",`strip:${_}`)]}))(lS(i),n,e,o,h,u));let A=new Set,m=0;for(let p=0;p<i.length;p+=1){if(A.has(p))continue;if(a.has(p))continue;let g=i[p];if(g.connectedPadSides?.includes(e))continue;if((g.route?.length??0)===2&&!u&&!d)continue;let _=xMt({currentRoutes:i,routeIndex:p,side:e,boundary:n,margin:o,moveAmount:h,geometryCache:c,fixedCopperGuard:l});if(_){if(_.rejected){let f=wzo(g,_.movableIndexes,n,e,o);if(f){let y=xMt({currentRoutes:i,routeIndex:p,side:e,moveSide:f,boundary:n,margin:o,moveAmount:h,geometryCache:c,fixedCopperGuard:l});y&&!y.rejected&&(_=y)}}if(s&&r.push(bzo({routes:lS(i),candidateRoutes:_.candidateRoutes,candidateRouteIndexes:_.candidateRouteIndexes,originalRoutes:_.rejected?void 0:Array.from(_.candidateRouteIndexes).map((f)=>DE(i[f])),boundary:n,side:e,margin:o,rejected:_.rejected,rejectionReason:_.rejectionReason})),!_.rejected){i.splice(0,i.length,..._.candidateRoutes);for(let f of _.movedTwoPointRouteIndexes)a.add(f);m+=1}A.add(p)}}return{movesAccepted:m}},UZ=(e,t,n,o)=>FV(e,t,n,o),WZ=(e,t,n,o)=>{switch(n){case"left":return{...e,x:Math.min(t.minX+o,t.maxX)};case"right":return{...e,x:Math.max(t.maxX-o,t.minX)};case"top":return{...e,y:Math.max(t.maxY-o,t.minY)};case"bottom":return{...e,y:Math.min(t.minY+o,t.maxY)}}},CMt=(e)=>`${e.routeIndexes[0]}:${e.layers[0]}:${e.routeIndexes[1]}:${e.layers[1]}`,IMt=(e)=>{if(!e)return[];let t=[e.connectionName,e.rootConnectionName].filter((n)=>Boolean(n));return Array.from(new Set(t))},bMt=(e,t)=>{let n=IMt(e),o=IMt(t);return n.length!==0&&o.length!==0&&n.some((i)=>o.includes(i))},zY=(e,t,n)=>e?LV([e],t,n).length:0,SMt=(e,t,n,o)=>{let i=new Set(r1(e,new Set([n]),o).map(w8));return r1(t,new Set([n]),o).some((r)=>!i.has(w8(r)))},PMt=(e,t,n)=>LV(e,t,n).length,vMt=(e)=>{if(!e)return[];let t=[e.connectionName,e.rootConnectionName].filter((n)=>Boolean(n));return Array.from(new Set(t))},EMt=(e,t)=>r1(e,new Set(e.map((n,o)=>o)),gU,t).filter((n)=>!(n.layers[0]==="via"&&n.layers[1]==="via"||((o,i)=>{let r=vMt(o),s=vMt(i);return r.length!==0&&s.length!==0&&r.some((a)=>s.includes(a))})(e[n.routeIndexes[0]],e[n.routeIndexes[1]]))).length,Dzo=(e)=>{let t=fU;return[...t.slice(e%t.length),...t.slice(0,e%t.length)]},Nzo=(e,t,n=!1,o=!0)=>{let i=_ke(e?.nodeWithPortPoints),r=(e?.nodeHdRoutes??[]).map(_zo),s=Math.max(t??0.4,0.05),a=new fzo(e?.fixedHdRoutes??[],Math.min(s/2,gU),e?.clearanceObstacles??e?.adjacentObstacles),c=i&&o?((A,m)=>A.map((p)=>{let g=p.route??[],_=!1,f=g.map((y)=>{let{x,y:C}=y;return x<m.minX?x=m.minX:x>m.maxX&&(x=m.maxX),C<m.minY?C=m.minY:C>m.maxY&&(C=m.maxY),x===y.x&&C===y.y?y:(_=!0,{...y,x,y:C})});return _?{...p,route:f}:p}))(Czo(lS(r),i),i):lS(r),l=o&&a.allows(r,c,r.keys())?c:r,d=lS(l);if(!i)return{boundary:null,baseRoutes:l,repairedRoutes:d,margin:s,frames:[{title:"HighDensityRepair02 Missing Boundary",routes:d}]};let u=n?[yzo(lS(d),s)]:[];if(o){let A=new WeakMap,m=PMt(d,i,s);for(let _=0;_<1;_+=1){let f=new Set,y=0;for(let C of Dzo(_)){let{movesAccepted:I}=Tzo({side:C,sample:e,boundary:i,frames:u,margin:s,repairedRoutes:d,captureProgressFrames:n,lockedTwoPointRoutes:f,geometryCache:A,fixedCopperGuard:a,allowTwoPointWithoutObstacle:_>=1});y+=I}let x=PMt(d,i,s);if(y===0)break;if(x===0)break;if(x>=m)break;m=x}let p=lS(d),g=EMt(d,A);(({routes:_,boundary:f,margin:y,geometryCache:x,fixedCopperGuard:C})=>{let I=LV(_,f,y);if(I.length===0)return{movesAccepted:0};let b=new Map;for(let N of I){let F=b.get(N.routeIndex)??new Set;for(let H of N.touchedSides)F.add(H);b.set(N.routeIndex,F)}let P=[0.000008,0.01,y/4,y/2,y+0.000008],E=0,B=(N,F,H)=>{let z=F.route??[];if(z.length<2)return!1;let Y={...F,route:vge(z)};if((Y.route?.length??0)<2)return!1;let U=_.slice();if(U[N]=Y,C&&!C.allows(_,U,[N]))return!1;if(zY(U[N],f,y)>=H)return!1;let X=(W)=>bMt(_[W.routeIndexes[0]],_[W.routeIndexes[1]]),V=new Set(r1(_,new Set([N]),0,x).filter((W)=>!X(W)).map(CMt));return!r1(U,new Set([N]),0,x).filter((W)=>!X(W)).some((W)=>!V.has(CMt(W)))&&!(fke({currentRoutes:_,candidateRoutes:U,candidateRouteIndexes:new Set([N]),maximumAllowedClearance:Math.min(y/2,gU)}).filter((W)=>!bMt(_[W.routeIndexes[0]],_[W.routeIndexes[1]])).length>0||(_[N]=Y,0))},w=(N,F,H,z)=>{if(F.length===0)return!1;for(let Y of P){let U=_[N],X=DE(U),V=X.route??[],W=!1;for(let j of yke(U,[],F)){let q=V[j];q&&(V[j]=WZ(q,f,H,Y),W=!0)}if(!W)return!1;if(B(N,X,z))return!0}return!1},T=(N,F)=>{let H=[];return F==="top"||F==="bottom"?(Math.abs(N.x-f.minX)<=ri&&H.push("left"),Math.abs(N.x-f.maxX)<=ri&&H.push("right")):(Math.abs(N.y-f.minY)<=ri&&H.push("bottom"),Math.abs(N.y-f.maxY)<=ri&&H.push("top")),H},Q=(N,F,H)=>{let z=_[N],Y=z.route??[];if(Y.length!==2)return!1;let[U,X]=Y;if(!UZ(U,f,F,y))return!1;if(!UZ(X,f,F,y))return!1;let V=T(U,F),W=T(X,F);for(let j of P){let q=WZ(U,f,F,j),ne=WZ(X,f,F,j);for(let oe of V)q=WZ(q,f,oe,j);for(let oe of W)ne=WZ(ne,f,oe,j);let ce={...z,route:[U,q,ne,X]};if(B(N,ce,H))return!0}return!1};for(let[N,F]of b)if(_[N])for(let H of F){let z=!0;for(;z;){z=!1;let Y=_[N].route??[];if(Y.length===2){let q=zY(_[N],f,y);q>0&&Q(N,H,q)&&(E+=1);break}if(Y.length<3)break;let U=zY(_[N],f,y);if(U===0)break;let X=[];for(let q=1;q<Y.length-1;q+=1){let ne=Y[q];ne&&UZ(ne,f,H,y)&&X.push(q)}if(X.length===0)break;if(w(N,X,H,U)){E+=1,z=!0;continue}let V=!1,W=U,j=0;for(;j<X.length;){let q=j;for(;q+1<X.length&&X[q+1]===X[q]+1;)q+=1;w(N,X.slice(j,q+1),H,W)&&(E+=1,V=!0,W=zY(_[N],f,y)),j=q+1}if(!V){let q=_[N].route??[],ne=U;for(let ce=1;ce<q.length-1;ce+=1){let oe=q[ce];oe&&UZ(oe,f,H,y)&&w(N,[ce],H,ne)&&(E+=1,V=!0,ne=zY(_[N],f,y))}}V&&(z=!0)}}for(let[N,F]of b){let H=_[N];if(!H)continue;let z=H.route??[];if(z.length<=2)continue;let Y=zY(_[N],f,y);if(Y!==0)for(let U of F){if(!z.every((j)=>UZ(j,f,U,y)))continue;let X=z[0]?.z;if(!z.every((j)=>j.z===X))continue;let V={...H,route:[z[0],z[z.length-1]]},W=_[N];_[N]=V,Q(N,U,Y)?E+=1:_[N]=W;break}}})({routes:p,boundary:i,margin:s,geometryCache:A,fixedCopperGuard:a}),EMt(p,A)<=g&&d.splice(0,d.length,...p),(({routes:_,boundary:f,clearanceMargin:y,fixedCopperGuard:x})=>{for(let C=0;C<_.length;C+=1){let I=_[C];if((I.route??[]).length<=2)continue;let b=y,P=Math.max(f.width/2-ri,0),E=Math.max(f.height/2-ri,0),B=Math.min(b,P),w=Math.min(b,E),T=I.connectedPadSides??[],Q=f.minX+(T.includes("left")?0:B),N=f.maxX-(T.includes("right")?0:B),F=f.minY+(T.includes("bottom")?0:w),H=f.maxY-(T.includes("top")?0:w),z=DE(I),Y=z.route??[],U=!1;for(let q=1;q<Y.length-1;q+=1){let ne=Y[q];if(!ne)continue;let ce=Math.min(Math.max(ne.x,Q),N),oe=Math.min(Math.max(ne.y,F),H);(Math.abs(ce-ne.x)>ri||Math.abs(oe-ne.y)>ri)&&(ne.x=ce,ne.y=oe,U=!0)}if(!U)continue;if(z.route=vge(Y),(z.route?.length??0)<2)continue;let X=lS(_);X[C]=z;let V=SMt(_,X,C,0),W=SMt(_,X,C,y),j=fke({currentRoutes:_,candidateRoutes:X,candidateRouteIndexes:new Set([C]),maximumAllowedClearance:y}).length>0;V||W||j||!x.allows(_,X,[C])||(_[C]=z)}})({routes:d,boundary:i,clearanceMargin:s,fixedCopperGuard:a})}let h=(({routes:A,fixedRoutes:m=[],boundary:p,fixedCopperGuard:g,adjacentObstacles:_=[],clearanceObstacles:f=_,clearance:y=0.1,boundaryMargin:x=0.2,maxCandidates:C})=>{let I=A,b=new WeakMap,P=new IGt,E=new WeakMap,B=new WeakMap,w=new WeakMap,T=new WeakMap,Q=Sge(I,y,f,m,void 0,b,P,B,T),N=C??Math.max(256,96*Q.conflicts.length),F={routes:A,initialConflictCount:Q.conflicts.length,finalConflictCount:Q.conflicts.length,candidateCount:0};for(;Q.conflicts.length&&F.candidateCount<N;){let H=!1,z=new Map(Q.conflicts.map((Y)=>[Y.key,Y.penetration]));for(let Y of Q.conflicts){for(let[U,X]of[[Y.firstRoute,Y.first],[Y.secondRoute,Y.second]]){if(U<0||U>=I.length)continue;let V=I[U],W=new Set([V.connectionName,V.rootConnectionName].filter(Boolean)),j=f.filter((ie)=>!ie.connectedTo?.some((J)=>W.has(J))),q=b.get(V),ne=w.get(V);ne===void 0&&(ne=LV([V],p,x).length,w.set(V,ne));let ce=E.get(V);ce||(ce=new Map,E.set(V,ce));let oe=j.map((ie)=>{let J=ce.get(ie);if(J!==void 0)return J;let ee=Math.min(...q.filter((se)=>!ie.zLayers||ie.zLayers.some((le)=>le>=se.minZ&&le<=se.maxZ)).map((se)=>Pge(se,ie)));return ce.set(ie,ee),ee});for(let ie of[1.01,2,4]){let J=Math.max(0.01,Y.penetration*ie);for(let[ee,se]of[[1,0],[-1,0],[0,1],[0,-1],[Math.SQRT1_2,Math.SQRT1_2],[-Math.SQRT1_2,Math.SQRT1_2],[Math.SQRT1_2,-Math.SQRT1_2],[-Math.SQRT1_2,-Math.SQRT1_2]]){if(F.candidateCount>=N)break;F.candidateCount++;let le=gzo(V,X,ee*J,se*J,p);if(!le)continue;if(LV([le],p,x).length>ne)continue;let he=[...I];he[U]=le;let ue=Sge(he,y,f,m,{evaluation:Q,changedRoute:U,routes:I},b,P,B,T);if(ue.conflicts.length>Q.conflicts.length||ue.score>=Q.score-0.000000000001)continue;if(ue.conflicts.some((_e)=>_e.penetration>(z.get(_e.key)??0)+ri))continue;if(!g.allows(I,he,[U],!1))continue;let Ae=b.get(le);if(!j.some((_e,Pe)=>Math.min(...Ae.filter((Ee)=>!_e.zLayers||_e.zLayers.some((Te)=>Te>=Ee.minZ&&Te<=Ee.maxZ)).map((Ee)=>Pge(Ee,_e)))<Math.min(y,oe[Pe])-ri)){I=he,Q=ue,H=!0;break}}if(H||F.candidateCount>=N)break}if(H||F.candidateCount>=N)break}if(H||F.candidateCount>=N)break}if(!H)break}return{...F,routes:I,finalConflictCount:Q.conflicts.length}})({fixedRoutes:e?.fixedHdRoutes,routes:d,boundary:i,fixedCopperGuard:a,adjacentObstacles:e?.adjacentObstacles,clearanceObstacles:e?.clearanceObstacles,boundaryMargin:s});return d.splice(0,d.length,...h.routes),u.push(((A,m,p)=>({title:`HighDensityRepair02 Final State (margin=${p})`,routes:A,originalRoutes:m}))(lS(d),lS(l),s)),{boundary:i,baseRoutes:l,repairedRoutes:d,frames:u,margin:s,clearanceRepairStats:{nodeClearanceInitialConflictCount:h.initialConflictCount,nodeClearanceFinalConflictCount:h.finalConflictCount,nodeClearanceCandidateCount:h.candidateCount}}},Rzo=class extends Js{constructor(e={}){super(),this.params=e,this.showBoundryViolationMarkers=e.showBoundryViolationMarkers??!1}params;frames=[];traceViolationCounts=new WeakMap;clearanceRepairStats={};currentFrameIndex=0;showBoundryViolationMarkers;repairedRoutes=[];_setup(){this.buildFrames();let e=this.getCurrentBoundryViolationCount(),t=this.getCurrentTraceViolationCount();this.stats={...this.clearanceRepairStats,boundryViolationCount:e,traceViolationCount:t,margin:this.params.margin??0.4,frames:this.frames.length,currentFrame:this.currentFrameIndex}}_step(){if(this.frames.length<=1){let n=this.getCurrentBoundryViolationCount(),o=this.getCurrentTraceViolationCount();return this.showBoundryViolationMarkers=!0,this.stats={...this.stats,boundryViolationCount:n,traceViolationCount:o},void(this.solved=!0)}this.currentFrameIndex<this.frames.length-1&&(this.currentFrameIndex+=1);let e=this.getCurrentBoundryViolationCount(),t=this.getCurrentTraceViolationCount();this.stats={...this.clearanceRepairStats,boundryViolationCount:e,traceViolationCount:t,margin:this.params.margin??0.4,frames:this.frames.length,currentFrame:this.currentFrameIndex,title:this.frames[this.currentFrameIndex]?.title},this.currentFrameIndex>=this.frames.length-1&&(this.showBoundryViolationMarkers=!0,this.solved=!0)}getConstructorParams(){return[this.params]}getOutput(){let e=this.getCurrentTraceViolationCount();return{...this.clearanceRepairStats,margin:this.params.margin??0.4,repairedRoutes:this.repairedRoutes,frameCount:this.frames.length,traceViolationCount:e}}setShowBoundryViolationMarkers(e){this.showBoundryViolationMarkers=e}buildFrames(){let e=Nzo(this.params.sample,this.params.margin,this.params.captureProgressFrames??!1,this.params.repairBoundaryDiagonals??!0);this.clearanceRepairStats=e.clearanceRepairStats??{},this.frames=e.frames,this.repairedRoutes=e.repairedRoutes}getCurrentFrame(){let e=this.params.sample;return this.frames[this.currentFrameIndex]??{title:"HighDensityRepair02",routes:lS(e?.nodeHdRoutes??[])}}getBoundryViolationsForFrame(e){let t=_ke(this.params.sample?.nodeWithPortPoints);return t?LV(e.routes,t,this.params.margin??0.4):[]}getCurrentBoundryViolationCount(){return this.getBoundryViolationsForFrame(this.getCurrentFrame()).length}getRouteNetNames(e){if(!e)return[];let t=[e.connectionName,e.rootConnectionName].filter((n)=>Boolean(n));return Array.from(new Set(t))}areRoutesSameNet(e,t){let n=this.getRouteNetNames(e),o=this.getRouteNetNames(t);return n.length!==0&&o.length!==0&&n.some((i)=>o.includes(i))}getCurrentTraceViolationCount(){let e=this.getCurrentFrame(),t=this.traceViolationCounts.get(e);if(t!==void 0)return t;let n=e.routes,o=new Set(n.map((r,s)=>s)),i=r1(n,o,gU).filter((r)=>!(r.layers[0]==="via"&&r.layers[1]==="via"||this.areRoutesSameNet(n[r.routeIndexes[0]],n[r.routeIndexes[1]]))).length;return this.traceViolationCounts.set(e,i),i}visualize(){let e=this.params.sample,t=e?.nodeWithPortPoints,n=e?.adjacentObstacles??[],o=this.getCurrentFrame(),i=_ke(t),r=i&&t?.capacityMeshNodeId?[{center:i.center,width:i.width,height:i.height,stroke:"#1d4ed8",fill:"rgba(29, 78, 216, 0.08)",label:t.capacityMeshNodeId}]:i?[{center:i.center,width:i.width,height:i.height,stroke:"#1d4ed8",fill:"rgba(29, 78, 216, 0.08)",label:"capacity-node"}]:[],s=n.filter((h)=>h.center&&h.width&&h.height).map((h,A)=>({center:h.center,width:h.width,height:h.height,stroke:h.type==="oval"?"#a855f7":"#dc2626",fill:h.type==="oval"?"rgba(168, 85, 247, 0.12)":"rgba(220, 38, 38, 0.08)",label:h.type?`obstacle:${h.type}:${A}`:`obstacle:${A}`})),a=this.showBoundryViolationMarkers&&i?this.getBoundryViolationsForFrame(o).map((h)=>{let A=h.end.x-h.start.x,m=h.end.y-h.start.y,p=Math.max(Math.hypot(A,m),0.2),g=Math.abs(A)>=Math.abs(m);return{center:{x:(h.start.x+h.end.x)/2,y:(h.start.y+h.end.y)/2},width:g?p:0.18,height:g?0.18:p,stroke:"#b45309",fill:"rgba(250, 204, 21, 0.45)",label:`boundry-violation:${h.routeIndex}:${h.segmentIndex}`}}):[],c=this.showBoundryViolationMarkers?lzo(o.routes,gU):[],l=[...(t?.portPoints??[]).map((h)=>({x:h.x,y:h.y,color:"#0f766e",label:h.connectionName??h.portPointId??"port-point"})),...o.routes.flatMap((h)=>h.route??[]).map((h)=>({x:h.x,y:h.y,color:x6(h)==="bottom"?xGt:"#0ea5e9",label:""})),...o.overlayPoints??[]],d=[...(o.originalRoutes??[]).flatMap((h)=>gke(h).map((A)=>({...A,strokeColor:"#111111",strokeWidth:Math.max(0.6*A.strokeWidth,0.05),label:`original:${A.label}`}))),...o.routes.filter((h)=>(h.route?.length??0)>=2).flatMap((h)=>gke(h)),...o.overlayLines??[]],u=o.routes.flatMap((h)=>(h.vias??[]).map((A)=>({center:{x:A.x,y:A.y},radius:(A.diameter??h.viaDiameter??0.3)/2,stroke:"#7c3aed",fill:"rgba(124, 58, 237, 0.2)",label:h.connectionName?`via:${h.connectionName}`:"via"})));return u.push(...c),{coordinateSystem:"cartesian",title:o.title,rects:[...r,...s,...o.overlayRects??[],...a],points:l,lines:d,circles:u,arrows:o.overlayArrows}}},Qzo=(e,t,n,o)=>{let r=new Set;for(let s of[t.route[0],t.route.at(-1)]){if(!s)continue;n.some((a)=>a.__zLayers.includes(s.z)&&Math.abs(s.x-a.center.x)<=a.width/2+0.001&&Math.abs(s.y-a.center.y)<=a.height/2+0.001&&N6(a,t,o))&&(Math.abs(s.x-(e.center.x-e.width/2))<=0.001&&r.add("left"),Math.abs(s.x-(e.center.x+e.width/2))<=0.001&&r.add("right"),Math.abs(s.y-(e.center.y-e.height/2))<=0.001&&r.add("bottom"),Math.abs(s.y-(e.center.y+e.height/2))<=0.001&&r.add("top"))}return[...r]},PGt=(e,t)=>e.minX<=t.maxX&&e.maxX>=t.minX&&e.minY<=t.maxY&&e.maxY>=t.minY,QHe=(e,t=0)=>({minX:e.center.x-e.width/2-t,maxX:e.center.x+e.width/2+t,minY:e.center.y-e.height/2-t,maxY:e.center.y+e.height/2+t}),vGt=(e)=>({minX:e.center.x-e.width/2,maxX:e.center.x+e.width/2,minY:e.center.y-e.height/2,maxY:e.center.y+e.height/2}),kzo=(e,t,n=0)=>{let o=QHe(t,n);return e.x>=o.minX&&e.x<=o.maxX&&e.y>=o.minY&&e.y<=o.maxY},Lzo=(e,t,n)=>e.route.length>0&&t.some((o)=>((i)=>(i.__zLayers?.length??i.layers?.length??0)>1)(o)&&N6(o,e,n)&&e.route.every((i)=>((r,s)=>{let a=s.width/2,c=s.height/2;return Math.abs(r.x-s.center.x)<=a+0.001&&Math.abs(r.y-s.center.y)<=c+0.001})(i,o))),Fzo=(e,t,n)=>{if(e.regionId){let i=t.findIndex((r)=>r.capacityMeshNodeId===e.regionId);if(i!==-1)return i}let o=[...e.route.map(({x:i,y:r})=>({x:i,y:r})),...e.vias.map(({x:i,y:r})=>({x:i,y:r}))];for(let i=0;i<t.length;i++){let r=t[i];if(o.every((s)=>kzo(s,r,n)))return i}return-1},Hzo=(e,t)=>({connectionName:e.connectionName??t.connectionName,rootConnectionName:t.rootConnectionName,...t.startPcbPortId?{startPcbPortId:t.startPcbPortId}:{},...t.endPcbPortId?{endPcbPortId:t.endPcbPortId}:{},regionId:e.capacityMeshNodeId??t.regionId,traceThickness:t.traceThickness,viaDiameter:e.viaDiameter??t.viaDiameter,route:e.route?.map((n)=>({x:n.x,y:n.y,z:n.z??0}))??t.route,vias:e.vias?.map((n)=>({x:n.x,y:n.y}))??t.vias,jumpers:t.jumpers}),Ozo=(e,t,n,o,i)=>{let r=QHe(e,n);return t.search(r).filter((s)=>PGt(r,vGt(s))).filter((s)=>!i||!o.some((a)=>N6(s,a,i))).map((s)=>({type:s.type,center:s.center,width:s.width,height:s.height}))},rne=class extends Oi{repairMargin;minimumTraceWidth;sampleEntries;originalHdRoutes;originalNodeWithPortPoints;originalObstacles;obstacleSHI;colorMap;connMap;repairedRoutesByIndex=new Map;activeSampleIndex=0;activeSubSolver=null;latestVisualization={};constructor(e){super(),this.repairMargin=e.repairMargin??0.2,this.minimumTraceWidth=e.minimumTraceWidth,this.originalHdRoutes=e.hdRoutes,this.originalNodeWithPortPoints=e.nodeWithPortPoints,this.originalObstacles=e.obstacles,this.obstacleSHI=new Mfe("flatbush",this.originalObstacles),this.colorMap=e.colorMap??{},this.connMap=e.connMap;let t=new Map;for(let s=0;s<e.hdRoutes.length;s++){if(Lzo(e.hdRoutes[s],e.obstacles,e.connMap))continue;let a=Fzo(e.hdRoutes[s],e.nodeWithPortPoints,this.repairMargin);if(a===-1)continue;let c=t.get(a)??[];c.push(s),t.set(a,c)}let n=SU(e.obstacles,Math.max(2,...e.nodeWithPortPoints.flatMap((s)=>s.availableZ?.map((a)=>a+1)??[]))),o=e.hdRoutes.map((s)=>((a,c,l)=>({capacityMeshNodeId:a.regionId,connectionName:a.connectionName,rootConnectionName:c?.getNetConnectedToId(a.connectionName)??a.rootConnectionName,route:a.route.map((d)=>({x:d.x,y:d.y,z:d.z})),traceThickness:Math.max(a.traceThickness,l??a.traceThickness),vias:a.vias.map((d)=>({x:d.x,y:d.y,diameter:a.viaDiameter})),viaDiameter:a.viaDiameter}))(s,e.connMap,e.minimumTraceWidth)),i=new bOt(e.hdRoutes.length);for(let[s,a]of e.hdRoutes.entries()){let c=[...a.route,...a.vias];if(c.length===0)throw Error(`High density repair route "${a.connectionName}" has no points`);let l=Math.max(o[s].traceThickness,a.viaDiameter)/2;i.insert({routeIndex:s},Math.min(...c.map((d)=>d.x))-l,Math.min(...c.map((d)=>d.y))-l,Math.max(...c.map((d)=>d.x))+l,Math.max(...c.map((d)=>d.y))+l)}e.hdRoutes.length>0&&i.finish();let r=Array.from(t.entries()).map(([s,a])=>{let c=e.nodeWithPortPoints[s],l=Math.max(...a.map((h)=>Math.max(o[h].traceThickness,e.hdRoutes[h].viaDiameter)/2)),d=QHe(c,Math.max(this.repairMargin,l+0.1)),u=new Set(a);return{node:c,routeIndexes:a,sample:{nodeWithPortPoints:{capacityMeshNodeId:c.capacityMeshNodeId,center:c.center,width:c.width,height:c.height,portPoints:c.portPoints.map((h)=>({x:h.x,y:h.y,z:h.z,connectionName:h.connectionName,portPointId:h.portPointId,prevPortPointId:h.prevPortPointId,nextPortPointId:h.nextPortPointId}))},nodeHdRoutes:a.map((h)=>({...o[h],...e.connMap?{connectedPadSides:Qzo(c,e.hdRoutes[h],n,e.connMap)}:{}})),fixedHdRoutes:i.search(d.minX,d.minY,d.maxX,d.maxY).filter(({routeIndex:h})=>!u.has(h)).map(({routeIndex:h})=>o[h]),clearanceObstacles:n.filter((h)=>PGt(d,vGt(h))).map((h)=>({type:h.type,center:h.center,width:h.width,height:h.height,zLayers:h.__zLayers,connectedTo:[...new Set(h.connectedTo.flatMap((A)=>{let m=e.connMap?.getNetConnectedToId(A);return m?[A,m]:[A]}))]})),adjacentObstacles:Ozo(c,this.obstacleSHI,this.repairMargin,a.map((h)=>e.hdRoutes[h]),e.connMap)}}});this.sampleEntries=r,this.MAX_ITERATIONS=Math.max(1000*this.sampleEntries.length,1e5),this.stats={sampleCount:this.sampleEntries.length,repairedNodeCount:0,repairedRouteCount:0}}getSolverName(){return"Pipeline4HighDensityRepairSolver"}getConstructorParams(){return[{nodeWithPortPoints:this.sampleEntries.map((e)=>e.node),hdRoutes:this.originalHdRoutes,obstacles:this.originalObstacles,repairMargin:this.repairMargin,minimumTraceWidth:this.minimumTraceWidth,colorMap:this.colorMap,connMap:this.connMap}]}_step(){let e=this.sampleEntries[this.activeSampleIndex];if(e){if(this.activeSubSolver){if(this.activeSubSolver.step(),this.latestVisualization=this.activeSubSolver.visualize(),this.activeSubSolver.failed)return this.failed=!0,this.error=this.activeSubSolver.error??`High density repair failed for node ${e.node.capacityMeshNodeId}`,void(this.activeSubSolver=null);if(!this.activeSubSolver.solved)return;let t=this.activeSubSolver.getOutput().repairedRoutes,n={nodeClearanceInitialConflictCount:Number(this.stats.nodeClearanceInitialConflictCount??0)+Number(this.activeSubSolver.stats.nodeClearanceInitialConflictCount??0),nodeClearanceFinalConflictCount:Number(this.stats.nodeClearanceFinalConflictCount??0)+Number(this.activeSubSolver.stats.nodeClearanceFinalConflictCount??0),nodeClearanceCandidateCount:Number(this.stats.nodeClearanceCandidateCount??0)+Number(this.activeSubSolver.stats.nodeClearanceCandidateCount??0)};for(let o=0;o<e.routeIndexes.length;o++){let i=e.routeIndexes[o],r=this.originalHdRoutes[i],s=t[o];this.repairedRoutesByIndex.set(i,s?Hzo(s,r):r)}return this.activeSubSolver=null,this.activeSampleIndex+=1,this.stats={...n,sampleCount:this.sampleEntries.length,repairedNodeCount:this.activeSampleIndex,repairedRouteCount:this.repairedRoutesByIndex.size},void(this.activeSampleIndex>=this.sampleEntries.length&&(this.solved=!0))}this.activeSubSolver=new Rzo({repairBoundaryDiagonals:!1,sample:e.sample,margin:this.repairMargin}),this.latestVisualization=this.activeSubSolver.visualize()}else this.solved=!0}getOutput(){return this.originalHdRoutes.map((e,t)=>this.repairedRoutesByIndex.get(t)??e)}visualize(){if(this.activeSubSolver)return this.activeSubSolver.visualize();if(!this.solved)return this.latestVisualization;let e=[],t=[];for(let n of this.getOutput()){let o=this.colorMap[n.connectionName]??"#0ea5e9";for(let i=0;i<n.route.length-1;i++){let r=n.route[i],s=n.route[i+1];r.z===s.z&&e.push({points:[{x:r.x,y:r.y},{x:s.x,y:s.y}],strokeColor:r.z===0?o:Cr(o,0.5),strokeWidth:n.traceThickness,layer:`z${r.z}`,strokeDash:r.z!==0?[0.1,0.3]:void 0})}for(let i of n.vias)t.push({center:{x:i.x,y:i.y},radius:n.viaDiameter/2,stroke:o,fill:"rgba(14,165,233,0.12)"})}return{title:"Pipeline4 High Density Repair",lines:e,circles:t}}},XZ=0.000001,MMt=({startGap:e,endGap:t,segmentGap:n,requiredGap:o})=>{let i=e<o&&t>=o-XZ&&n>=e-XZ,r=t<o&&e>=o-XZ&&n>=t-XZ,s=e<o&&t<o&&n>=Math.min(e,t)-XZ;return i||r||s},zzo=class{minClearance;rootsByConnection=new Map;sameNetCache=new Map;segments=[];vias=[];segmentIndexesByLayer;viaIndex;constructor({hdRoutes:e,minClearance:t=0.1}){this.minClearance=t;for(let n of e)this.addRoute(n);this.buildSpatialIndexes()}addRoute(e){let t=this.rootsByConnection.get(e.connectionName)??new Set;t.add(e.rootConnectionName??e.connectionName),this.rootsByConnection.set(e.connectionName,t),this.sameNetCache.clear();for(let n=0;n<e.route.length-1;n+=1){let o=e.route[n],i=e.route[n+1];if(o.z!==i.z)continue;if(o.insideJumperPad&&i.insideJumperPad)continue;let r={connectionName:e.connectionName,start:o,end:i,traceThickness:e.traceThickness};this.segments.push(r),this.insertSegmentIntoSpatialIndex(r)}for(let n of e.vias){let o={connectionName:e.connectionName,x:n.x,y:n.y,diameter:e.viaDiameter};this.vias.push(o),this.insertViaIntoSpatialIndex(o)}}insertSegmentIntoSpatialIndex(e){if(!this.segmentIndexesByLayer)return;let t=this.segmentIndexesByLayer.get(e.start.z);t||(t=new Lee,this.segmentIndexesByLayer.set(e.start.z,t));let n=e.traceThickness/2;t.insert(e,Math.min(e.start.x,e.end.x)-n,Math.min(e.start.y,e.end.y)-n,Math.max(e.start.x,e.end.x)+n,Math.max(e.start.y,e.end.y)+n)}insertViaIntoSpatialIndex(e){if(!this.viaIndex)return;let t=e.diameter/2;this.viaIndex.insert(e,e.x-t,e.y-t,e.x+t,e.y+t)}buildSpatialIndexes(){this.segmentIndexesByLayer=new Map;let e=new Map;for(let t of this.segments){let n=e.get(t.start.z);n?n.push(t):e.set(t.start.z,[t])}for(let[t,n]of e){let o=new Lee;o.bulkLoad(n.map((i)=>{let r=i.traceThickness/2;return{item:i,minX:Math.min(i.start.x,i.end.x)-r,minY:Math.min(i.start.y,i.end.y)-r,maxX:Math.max(i.start.x,i.end.x)+r,maxY:Math.max(i.start.y,i.end.y)+r}})),this.segmentIndexesByLayer.set(t,o)}this.viaIndex=new Lee,this.viaIndex.bulkLoad(this.vias.map((t)=>{let n=t.diameter/2;return{item:t,minX:t.x-n,minY:t.y-n,maxX:t.x+n,maxY:t.y+n}}))}areSameNet(e,t){if(e===t)return!0;let n=this.sameNetCache.get(e)?.get(t);if(n!==void 0)return n;let o=this.rootsByConnection.get(e),i=this.rootsByConnection.get(t),r=!1;if(o&&i){for(let a of o)if(i.has(a)){r=!0;break}}let s=this.sameNetCache.get(e);return s||(s=new Map,this.sameNetCache.set(e,s)),s.set(t,r),r}isSegmentClear({connectionName:e,start:t,end:n,traceThickness:o}){let i=o/2,r=this.minClearance+i,s=Math.min(t.x,n.x)-r,a=Math.min(t.y,n.y)-r,c=Math.max(t.x,n.x)+r,l=Math.max(t.y,n.y)+r,d=this.segmentIndexesByLayer?.get(t.z)?.search(s,a,c,l)??[];for(let h of d){if(this.areSameNet(e,h.connectionName))continue;let A=this.minClearance+i+h.traceThickness/2,m=Hk(t,n,h.start,h.end);if(m<A&&!MMt({startGap:Da(t,h.start,h.end),endGap:Da(n,h.start,h.end),segmentGap:m,requiredGap:A}))return!1}let u=this.viaIndex?.search(s,a,c,l)??[];for(let h of u){if(this.areSameNet(e,h.connectionName))continue;let A=this.minClearance+i+h.diameter/2,m=Da(h,t,n);if(m<A&&!MMt({startGap:Math.hypot(t.x-h.x,t.y-h.y),endGap:Math.hypot(n.x-h.x,n.y-h.y),segmentGap:m,requiredGap:A}))return!1}return!0}},Hg=0.000000001,kHe=1.25,D8=(e,t)=>e<t?-1:e>t?1:0,LE=(e,t)=>D8(e.z,t.z)||D8(e.x,t.x)||D8(e.y,t.y),BMt=(e)=>`${e.z.toFixed(6)}:${e.x.toFixed(6)}:${e.y.toFixed(6)}`,wMt=(e)=>{let t=e.route.map(BMt).join("|"),n=[...e.route].reverse().map(BMt).join("|");return t<=n?t:n},Ete=(e,t)=>{let n=e.connectionName.localeCompare(t.connectionName);if(n!==0)return n;let o=(e.rootConnectionName??"").localeCompare(t.rootConnectionName??"");if(o!==0)return o;let i=wMt(e).localeCompare(wMt(t));return i!==0?i:D8(e.traceThickness,t.traceThickness)||D8(e.viaDiameter,t.viaDiameter)||D8(e.route.length,t.route.length)||D8(e.vias.length,t.vias.length)||D8(e.jumpers?.length??0,t.jumpers?.length??0)},TMt=1e5,y8=0.001,DMt=1.000000001,jNe=class extends Oi{getSolverName(){return"SingleHighDensityRouteStitchSolver3"}mergedHdRoute;remainingHdRoutes;start;end;colorMap;allowedLayerTransitionPointKeys;isStitchSegmentClear;stitchClearanceMode;isPlanarStitchClear(e,t){return this.isStitchSegmentClear({connectionName:this.mergedHdRoute.connectionName,start:e,end:t,traceThickness:this.mergedHdRoute.traceThickness})}constructor(e){super();let t=[...e.hdRoutes].sort(Ete);if(this.remainingHdRoutes=t,this.colorMap=e.colorMap??{},this.allowedLayerTransitionPointKeys=e.allowedLayerTransitionPointKeys,this.isStitchSegmentClear=e.isStitchSegmentClear,this.stitchClearanceMode=e.stitchClearanceMode,t.length===0){this.start=e.start,this.end=e.end;let A=e.defaultTraceThickness??0.15,m=[{x:e.start.x,y:e.start.y,z:e.start.z}],p=[];if(e.start.z!==e.end.z){if(e.allowedLayerTransitionPointKeys&&!e.allowedLayerTransitionPointKeys.has(AV(e.start)))return this.failed=!0,void(this.error=`Layer transition at ${AV(e.start)} is not allowed`);m.push({x:e.start.x,y:e.start.y,z:e.end.z}),p.push({x:e.start.x,y:e.start.y})}let g=m[m.length-1],_={x:e.end.x,y:e.end.y,z:e.end.z},f={connectionName:e.connectionName,start:g,end:_,traceThickness:A};return bn(g,_)>y8&&!this.isStitchSegmentClear(f)&&this.stitchClearanceMode==="require_clear"?(this.failed=!0,void(this.error=`Terminal stitch for "${e.connectionName}" violates copper clearance`)):(m.push(_),this.mergedHdRoute={connectionName:e.connectionName,...e.preserveTerminalPcbPortIds&&e.start.pcb_port_id?{startPcbPortId:e.start.pcb_port_id}:{},...e.preserveTerminalPcbPortIds&&e.end.pcb_port_id?{endPcbPortId:e.end.pcb_port_id}:{},rootConnectionName:t[0]?.rootConnectionName,route:m,vias:p,jumpers:[],viaDiameter:e.defaultViaDiameter??0.3,traceThickness:A},void(this.solved=!0))}let n=new Set((e.preserveTerminalPcbPortIds?[e.start.pcb_port_id,e.end.pcb_port_id]:[]).filter((A)=>A!==void 0));if(e.preserveTerminalPcbPortIds&&e.start.pcb_port_id&&e.start.pcb_port_id===e.end.pcb_port_id)throw Error(`SingleHighDensityRouteStitchSolver3 received duplicate PCB terminal "${e.start.pcb_port_id}" for "${e.connectionName}"`);let o=t.flatMap((A)=>[A.startPcbPortId,A.endPcbPortId]).filter((A)=>A!==void 0);if(n.size>0){for(let A of o)if(!n.has(A))throw Error(`SingleHighDensityRouteStitchSolver3 found unknown PCB terminal "${A}" on "${e.connectionName}"`)}let i=1/0,r=t[0],s="start-to-end";for(let A of t){let m=A.route[0],p=A.route[A.route.length-1],g=bn(e.start,m),_=bn(e.start,p),f=bn(e.end,m),y=bn(e.end,p),x=Math.min(g,_,f,y);(x<i-Hg||Math.abs(x-i)<=Hg&&Ete(A,r)<0)&&(i=x,r=A,s=Math.min(f,y)<Math.min(g,_)-Hg||Math.abs(Math.min(f,y)-Math.min(g,_))<=Hg&&LE(e.end,e.start)<0?"end-to-start":"start-to-end")}s==="start-to-end"?(this.start=e.start,this.end=e.end):(this.start=e.end,this.end=e.start);let a=r.route[0],c=r.route[r.route.length-1],l=bn(this.start,a),d=bn(this.start,c),u=l<d-Hg||Math.abs(l-d)<=Hg&&LE(a,c)<=0?a:c,h=u===a?r.startPcbPortId:r.endPcbPortId;if(h&&this.start.pcb_port_id&&h!==this.start.pcb_port_id)throw Error(`SingleHighDensityRouteStitchSolver3 terminal identity disagrees with route orientation for "${e.connectionName}"`);this.mergedHdRoute={connectionName:e.connectionName,...e.preserveTerminalPcbPortIds&&this.start.pcb_port_id?{startPcbPortId:this.start.pcb_port_id}:{},...e.preserveTerminalPcbPortIds&&this.end.pcb_port_id?{endPcbPortId:this.end.pcb_port_id}:{},rootConnectionName:r.rootConnectionName,route:[{x:this.start.x,y:this.start.y,z:u.z}],vias:[],jumpers:[],viaDiameter:r.viaDiameter,traceThickness:r.traceThickness}}getDisjointedRoute(){for(let e of this.remainingHdRoutes)if([e.route[0],e.route[e.route.length-1]].some((t)=>!this.remainingHdRoutes.some((n)=>{if(n===e)return!1;return[n.route[0],n.route[n.route.length-1]].some((o)=>o.z===t.z&&bn(t,o)<0.001)})))return{firstRoute:e};return{firstRoute:this.remainingHdRoutes[0]}}_step(){let e=this.mergedHdRoute.route.at(-1),t=this.mergedHdRoute.endPcbPortId!==void 0&&e.z===this.end.z&&bn(e,this.end)<y8;if(this.remainingHdRoutes.length===0||t){let l=this.mergedHdRoute.route[this.mergedHdRoute.route.length-1],d={...this.end,z:l.z},u=bn(l,d);if(u>y8&&u<=kHe){if(!this.isPlanarStitchClear(l,d)&&this.stitchClearanceMode==="require_clear")return this.failed=!0,void(this.error=`Terminal stitch for "${this.mergedHdRoute.connectionName}" violates copper clearance`);this.mergedHdRoute.route.push({x:this.end.x,y:this.end.y,z:l.z})}return void(this.solved=!0)}let n=this.mergedHdRoute.route[this.mergedHdRoute.route.length-1],o=-1,i="first",r=1/0,s=!1;for(let l=0;l<this.remainingHdRoutes.length;l++){let d=this.remainingHdRoutes[l],u=d.route[0],h=d.route[d.route.length-1],A=bn(n,u),m=bn(n,h),p=1/0;if(n.z===u.z){if(A<y8)p=A;else if(A<=1){let _=this.isPlanarStitchClear(n,u);if(_||this.stitchClearanceMode==="prefer_clear")p=TMt+(_?0:DMt)+A;else s=!0}}else A<y8&&(!this.allowedLayerTransitionPointKeys||this.allowedLayerTransitionPointKeys.has(AV(u)))&&(p=1000+A);p<r&&(r=p,o=l,i="first");let g=1/0;if(n.z===h.z){if(m<y8)g=m;else if(m<=1){let _=this.isPlanarStitchClear(n,h);if(_||this.stitchClearanceMode==="prefer_clear")g=TMt+(_?0:DMt)+m;else s=!0}}else m<y8&&(!this.allowedLayerTransitionPointKeys||this.allowedLayerTransitionPointKeys.has(AV(h)))&&(g=1000+m);g<r&&(r=g,o=l,i="last")}if(o===-1)return s?(this.failed=!0,void(this.error=`Route stitch for "${this.mergedHdRoute.connectionName}" violates copper clearance`)):void(this.remainingHdRoutes=[]);let a=this.remainingHdRoutes[o],c;this.remainingHdRoutes.splice(o,1),c=i==="first"?a.route:((l)=>{let d=[...l].reverse().map((u)=>{let{toNextSegmentType:h,...A}=u;return A});for(let u=0;u<l.length-1;u++){let h=l[u]?.toNextSegmentType;if(!h)continue;let A=l.length-u-2;d[A]={...d[A],toNextSegmentType:h}}return d})(a.route),c.length>0&&bn(n,c[0])<y8&&n.z===c[0].z?(c[0].toNextSegmentType&&(n.toNextSegmentType=c[0].toNextSegmentType),this.mergedHdRoute.route.push(...c.slice(1))):this.mergedHdRoute.route.push(...c),this.mergedHdRoute.vias.push(...a.vias),a.jumpers&&this.mergedHdRoute.jumpers.push(...a.jumpers)}visualize(){let e={points:[],lines:[],circles:[],rects:[],title:"Single High Density Route Stitch Solver 3"};if(e.points?.push({x:this.start.x,y:this.start.y,color:"green",label:"Start"},{x:this.end.x,y:this.end.y,color:"red",label:"End"}),this.mergedHdRoute&&this.mergedHdRoute.route.length>1){e.lines?.push({points:this.mergedHdRoute.route.map((t)=>({x:t.x,y:t.y})),strokeColor:"green"});for(let t of this.mergedHdRoute.route)e.points?.push({x:t.x,y:t.y,color:"green"});for(let t of this.mergedHdRoute.vias)e.circles?.push({center:{x:t.x,y:t.y},radius:this.mergedHdRoute.viaDiameter/2,fill:"green"});if(this.mergedHdRoute.jumpers&&this.mergedHdRoute.jumpers.length>0){let t=xS(this.mergedHdRoute.jumpers,{color:"green",label:this.mergedHdRoute.connectionName});e.rects.push(...t.rects??[]),e.lines.push(...t.lines??[])}}for(let t of this.remainingHdRoutes){e.lines?.push({points:t.route.map((n)=>({x:n.x,y:n.y})),strokeColor:"orange"});for(let n of t.route)e.points?.push({x:n.x,y:n.y,color:"orange"});for(let n of t.vias)e.circles?.push({center:{x:n.x,y:n.y},radius:t.viaDiameter/2,fill:"orange"});if(t.jumpers&&t.jumpers.length>0){let n=xS(t.jumpers,{color:"orange",label:t.connectionName});e.rects.push(...n.rects??[]),e.lines.push(...n.lines??[])}}return e}},Gzo=class{constructor(e=!1){this.preferSameLayerTerminalEndpoints=e}preferSameLayerTerminalEndpoints;endpointClusters=new Map;getEndpointKey(e,t){let n=this.endpointClusters.get(e)??[],o,i=1/0;for(let s of n){if(s.point.z!==t.z)continue;let a=bn(s.point,t);a<=0.1&&(a<i-Hg||Math.abs(a-i)<=Hg&&(!o||LE(s.point,o.point)<0))&&(o=s,i=a)}if(o)return o.key;let r=`${e}:endpoint_${n.length}`;return n.push({key:r,point:{x:t.x,y:t.y,z:t.z}}),this.endpointClusters.set(e,n),r}getClusters(e){return this.endpointClusters.get(e)??[]}getClosestEndpointKey(e,t,n){let o=t.flatMap((l)=>[l.route[0],l.route[l.route.length-1]]),i=o.filter((l)=>l.z===n.z),r=this.preferSameLayerTerminalEndpoints&&i.length>0?i:o,s=null,a=null,c=1/0;for(let l of r){let d=bn(n,l),u=this.getEndpointKey(e,l);(d<c-Hg||Math.abs(d-c)<=Hg&&(s===null||u.localeCompare(s)<0||u===s&&a!==null&&LE(l,a)<0))&&(c=d,s=u,a=l)}return s}},n_e=(e,t,n)=>{let o=e.get(t)??[];o.some((i)=>i.nextHash===n.nextHash&&i.routeIndex===n.routeIndex)||(o.push(n),e.set(t,o))},Yzo=(e)=>{let t=[...e.possibleEndpoints].sort(LE),n=t.reduce((r,s)=>{let a=bn(s,e.globalStart),c=bn(r,e.globalStart);return a<c-Hg||Math.abs(a-c)<=Hg&&LE(s,r)<0?s:r}),o=t.filter((r)=>r!==n),i=(o.length>0?o:e.possibleEndpoints).reduce((r,s)=>{let a=bn(s,e.globalEnd),c=bn(r,e.globalEnd);return a<c-Hg||Math.abs(a-c)<=Hg&&LE(s,r)<0?s:r});return{start:n,end:i}},NMt=(e)=>{let t=[...e.terminals].sort(LE),n=t[0],o=bn(e.islandEndpoint,n);for(let i of t.slice(1)){let r=bn(e.islandEndpoint,i);(r<o-Hg||Math.abs(r-o)<=Hg&&LE(i,n)<0)&&(n=i,o=r)}return o<=kHe?n:e.islandEndpoint},qNe=(e)=>{if(e.hdRoutes.length<=2)return e.hdRoutes;let t=[...e.hdRoutes].sort(Ete),n=e.endpointIndex.getClosestEndpointKey(e.connectionName,t,e.start),o=e.endpointIndex.getClosestEndpointKey(e.connectionName,t,e.end);if(!n||!o||n===o)return t;let i=new Map;for(let h=0;h<t.length;h++){let A=t[h],m=e.endpointIndex.getEndpointKey(e.connectionName,A.route[0]),p=e.endpointIndex.getEndpointKey(e.connectionName,A.route[A.route.length-1]);n_e(i,m,{nextHash:p,routeIndex:h}),n_e(i,p,{nextHash:m,routeIndex:h})}let r=[...e.endpointIndex.getClusters(e.connectionName)].sort((h,A)=>LE(h.point,A.point));for(let h=0;h<r.length;h++){let A=r[h];for(let m=h+1;m<r.length;m++){let p=r[m];A.point.z===p.point.z&&(bn(A.point,p.point)>1||(n_e(i,A.key,{nextHash:p.key,routeIndex:null}),n_e(i,p.key,{nextHash:A.key,routeIndex:null})))}}for(let[h,A]of i.entries())i.set(h,[...A].sort((m,p)=>{if(m.routeIndex===null&&p.routeIndex!==null)return 1;if(m.routeIndex!==null&&p.routeIndex===null)return-1;if(m.routeIndex!==null&&p.routeIndex!==null){let g=Ete(t[m.routeIndex],t[p.routeIndex]);if(g!==0)return g}return m.nextHash.localeCompare(p.nextHash)}));let s=[n],a=new Set([n]),c=new Map;for(;s.length>0;){let h=s.shift();if(h===o)break;for(let A of i.get(h)??[])a.has(A.nextHash)||(a.add(A.nextHash),c.set(A.nextHash,{prevHash:h,routeIndex:A.routeIndex}),s.push(A.nextHash))}if(!a.has(o))return t;let l=[],d=o;for(;d!==n;){let h=c.get(d);if(!h)return t;h.routeIndex!==null&&l.push(h.routeIndex),d=h.prevHash}if(l.length===0)return e.hdRoutes;let u=l.reverse().map((h)=>t[h]);return u.length>0&&!e.canStitchBetweenTerminals({connectionName:e.connectionName,hdRoutes:u,start:e.start,end:e.end})?t:u},Qfe=class extends Oi{getSolverName(){return"MultipleHighDensityRouteStitchSolver3"}unsolvedRoutes;activeSolver=null;mergedHdRoutes=[];colorMap={};defaultTraceThickness;defaultViaDiameter;allowedLayerTransitionPointKeys;preserveTerminalPcbPortIds;endpointIndex;clearanceValidator;canStitchBetweenTerminals(e){let t=new jNe({connectionName:e.connectionName,hdRoutes:e.hdRoutes,start:e.start,end:e.end,colorMap:this.colorMap,defaultTraceThickness:this.defaultTraceThickness,defaultViaDiameter:this.defaultViaDiameter,allowedLayerTransitionPointKeys:this.allowedLayerTransitionPointKeys,preserveTerminalPcbPortIds:this.preserveTerminalPcbPortIds,isStitchSegmentClear:(i)=>this.clearanceValidator.isSegmentClear(i),stitchClearanceMode:"require_clear"});for(;!t.solved&&!t.failed&&t.iterations<t.MAX_ITERATIONS;)t.step();if(t.failed)return!1;let n=t.mergedHdRoute.route[0],o=t.mergedHdRoute.route[t.mergedHdRoute.route.length-1];return n.z===t.start.z&&o.z===t.end.z&&bn(n,t.start)+bn(o,t.end)<=kHe}getSharedRootPathRoutes(e){let t=e.rootConnectionName;if(!t)return null;let n=new Set(e.hdRoutes),o=e.allHdRoutes.filter((r)=>(r.rootConnectionName??r.connectionName)===t);if(o.every((r)=>n.has(r)))return null;let i=qNe({connectionName:e.connectionName,hdRoutes:o,start:e.start,end:e.end,endpointIndex:this.endpointIndex,canStitchBetweenTerminals:(r)=>this.canStitchBetweenTerminals(r)});return!i.some((r)=>!n.has(r))||i.length>=o.length?null:i}constructor(e){super(),this.endpointIndex=new Gzo(e.preferSameLayerTerminalEndpoints),this.colorMap=e.colorMap??{},this.allowedLayerTransitionPointKeys=e.allowedLayerTransitionPointKeys,this.preserveTerminalPcbPortIds=e.preserveTerminalPcbPortIds??!1;let t=[...e.hdRoutes].sort(Ete);this.clearanceValidator=new zzo({hdRoutes:t});let n=t[0];this.defaultTraceThickness=n?.traceThickness??0.15,this.defaultViaDiameter=n?.viaDiameter??e.defaultViaDiameter??0.3;let o=new pHe({}),i=[],r=new Map;for(let c=0;c<t.length;c++){let l=t[c],d=l.route[0],u=l.route[l.route.length-1];i.push([`route_island_${c}`,this.endpointIndex.getEndpointKey(l.connectionName,d),this.endpointIndex.getEndpointKey(l.connectionName,u)])}o.addConnections(i);for(let c of i)for(let l of c.slice(1))r.set(l,(r.get(l)??0)+1);this.unsolvedRoutes=[];let s=Array.from(new Set(Object.values(o.idToNetMap)));for(let c of s){let l=o.getIdsConnectedToNet(c),d=t.filter((y,x)=>l.includes(`route_island_${x}`));if(d.length===0)continue;let u=e.connections.find((y)=>y.name===d[0].connectionName),h=d.flatMap((y)=>[y.route[0],y.route[y.route.length-1]]),A=new Map,m=[];for(let y of h){let x=this.endpointIndex.getEndpointKey(d[0].connectionName,y);A.has(x)||A.set(x,y),r.get(x)===1&&m.push(y)}let p=m.length>0?m:[...A.values()];if(p.length===0)continue;let g,_;if(p.length>=2){let y={...u.pointsToConnect[0],z:Wi(k_(u.pointsToConnect[0]),e.layerCount)},x={...u.pointsToConnect[1],z:Wi(k_(u.pointsToConnect[1]),e.layerCount)};({start:g,end:_}=Yzo({possibleEndpoints:p,globalStart:y,globalEnd:x})),bn(g,u.pointsToConnect[1])<bn(_,u.pointsToConnect[0])&&([g,_]=[_,g]),g=NMt({islandEndpoint:g,terminals:[y,x]}),_=NMt({islandEndpoint:_,terminals:[y,x]})}else g={...u.pointsToConnect[0],z:Wi(k_(u.pointsToConnect[0]),e.layerCount)},_={...u.pointsToConnect[1],z:Wi(k_(u.pointsToConnect[1]),e.layerCount)};let f=qNe({connectionName:d[0].connectionName,hdRoutes:d,start:g,end:_,endpointIndex:this.endpointIndex,canStitchBetweenTerminals:(y)=>this.canStitchBetweenTerminals(y)});this.unsolvedRoutes.push({connectionName:d[0].connectionName,hdRoutes:f,start:g,end:_})}let a=new Map;for(let c of this.unsolvedRoutes){let l=a.get(c.connectionName);l?l.push(c):a.set(c.connectionName,[c])}this.unsolvedRoutes=Array.from(a.entries()).flatMap(([c,l])=>{let d=e.connections.find((_)=>_.name===c),u=l.some((_)=>_.hdRoutes.some((f)=>f.route.length<2)),h=l.length>1&&((_)=>{for(let f=0;f<_.length;f++)for(let y=f+1;y<_.length;y++){let x=[_[f].start,_[f].end],C=[_[y].start,_[y].end];for(let I of x)for(let b of C)if(I.z===b.z&&bn(I,b)<=1)return!0}return!1})(l);if(!d)return l;let A={...d.pointsToConnect[0],z:Wi(k_(d.pointsToConnect[0]),e.layerCount)},m={...d.pointsToConnect[1],z:Wi(k_(d.pointsToConnect[1]),e.layerCount)},p=l.flatMap((_)=>_.hdRoutes),g=l.length>1?this.getSharedRootPathRoutes({connectionName:c,rootConnectionName:d.__rootConnectionNames?.[0]??p[0]?.rootConnectionName,hdRoutes:p,allHdRoutes:t,start:A,end:m}):null;return u||h||g?[{connectionName:c,hdRoutes:g??qNe({connectionName:c,hdRoutes:p,start:A,end:m,endpointIndex:this.endpointIndex,canStitchBetweenTerminals:(_)=>this.canStitchBetweenTerminals(_)}),start:A,end:m}]:l}),this.MAX_ITERATIONS=1e5}_step(){if(this.activeSolver)return this.activeSolver.step(),void(this.activeSolver.solved?(this.activeSolver instanceof jNe&&(this.clearanceValidator.addRoute(this.activeSolver.mergedHdRoute),this.mergedHdRoutes.push(this.activeSolver.mergedHdRoute)),this.activeSolver=null):this.activeSolver.failed&&(this.failed=!0,this.error=this.activeSolver.error));let e=this.unsolvedRoutes.pop();if(!e){let t=new Set;for(let n of this.mergedHdRoutes)n.startPcbPortId&&n.endPcbPortId&&t.add(n.connectionName);return this.mergedHdRoutes=this.mergedHdRoutes.filter((n)=>!t.has(n.connectionName)||Boolean(n.startPcbPortId&&n.endPcbPortId)),void(this.solved=!0)}this.activeSolver=new jNe({connectionName:e.connectionName,hdRoutes:e.hdRoutes,start:e.start,end:e.end,colorMap:this.colorMap,defaultTraceThickness:this.defaultTraceThickness,defaultViaDiameter:this.defaultViaDiameter,allowedLayerTransitionPointKeys:this.allowedLayerTransitionPointKeys,preserveTerminalPcbPortIds:this.preserveTerminalPcbPortIds,isStitchSegmentClear:(t)=>this.clearanceValidator.isSegmentClear(t),stitchClearanceMode:"prefer_clear"})}visualize(){let e={points:[],lines:[],circles:[],rects:[],title:"Multiple High Density Route Stitch Solver 3"};if(this.activeSolver){let t=this.activeSolver.visualize();t.points?.length&&e.points?.push(...t.points),t.lines?.length&&e.lines?.push(...t.lines),t.circles?.length&&e.circles?.push(...t.circles),t.rects?.length&&(e.rects||(e.rects=[]),e.rects.push(...t.rects))}for(let[t,n]of this.mergedHdRoutes.entries()){let o=this.colorMap[n.connectionName]??`hsl(120, 100%, ${40+10*t%40}%)`;for(let i=0;i<n.route.length-1;i++){let r=n.route[i],s=n.route[i+1],a=r.z!==0?Cr(o,0.5):o;e.lines?.push({points:[{x:r.x,y:r.y},{x:s.x,y:s.y}],strokeColor:a,strokeWidth:n.traceThickness})}for(let i of n.route){let r=i.z!==0?Cr(o,0.5):o;e.points?.push({x:i.x,y:i.y,color:r})}for(let i of n.vias)e.circles?.push({center:{x:i.x,y:i.y},radius:n.viaDiameter/2,fill:o});if(n.jumpers&&n.jumpers.length>0){let i=xS(n.jumpers,{color:o,label:n.connectionName});e.rects.push(...i.rects??[]),e.lines.push(...i.lines??[])}}return e}},EGt=(e)=>(e%360+360)%360,Vzo=(e,t)=>{let{ccwRotationDegrees:n,...o}=e,i=((r)=>{let s=EGt(r),a=[0,90,180,270];for(let c of a)if(Math.min(Math.abs(s-c),360-Math.abs(s-c))<=0.01)return c;return null})(t);return i===90||i===270?{...o,width:e.height,height:e.width}:o},RMt=(e,t)=>!(Dy(e).length>0&&!Dy(e).some((n)=>t.layers.includes(n)))&&N_e(e,Gd(t)),QMt=(e,t)=>{let{minX:n,maxX:o,minY:i,maxY:r}=Gd(t);return{x:Math.max(n,Math.min(o,e.x)),y:Math.max(i,Math.min(r,e.y))}},Uzo=(e,t)=>e.obstacleId??`${e.componentId??"obstacle"}_${t}`;function MGt(e,t=2){let{center:n,width:o,height:i,rotation:r}=e,s=[],a=Math.max(1,Math.ceil(t)),c=r*Math.PI/180,l=Math.cos(c),d=Math.sin(c);if(o>=i){let u=o/a;for(let h=0;h<a;h++){let A=(h-a/2+0.5)*u,m=A*l,p=A*d,g=Math.abs(u*l)+Math.abs(i*d),_=Math.abs(u*d)+Math.abs(i*l);s.push({center:{x:n.x+m,y:n.y+p},width:g,height:_})}}else{let u=i/a;for(let h=0;h<a;h++){let A=(h-a/2+0.5)*u,m=-A*d,p=A*l,g=Math.abs(o*l)+Math.abs(u*d),_=Math.abs(o*d)+Math.abs(u*l);s.push({center:{x:n.x+m,y:n.y+p},width:g,height:_})}}return s}var BGt=(e)=>{if(e.type==="oval")return BGt({...e,type:"rect"});let t=e.ccwRotationDegrees;if(typeof t!="number"||!Number.isFinite(t))return[e];if(((l)=>{let d=EGt(l);return[0,90,180,270].some((u)=>Math.min(Math.abs(d-u),360-Math.abs(d-u))<=0.01)})(t))return[Vzo(e,t)];let{ccwRotationDegrees:n,...o}=e,i={center:e.center,width:e.width,height:e.height,rotation:t},r=((l)=>{let d=Math.max(l.width,l.height),u=Math.min(l.width,l.height);return l.obstacleId?.startsWith("trace_obstacle_")?Math.max(2,Math.ceil(d/0.75)):u<=0?2:d/u<2||u>=0.9?null:Math.max(2,Math.ceil(d/0.75))})(e),s=e.connectedTo.length>0&&!e.obstacleId?.startsWith("trace_obstacle_"),a=e.isNonPlatedHole||s?((l)=>{let d=l.rotation*Math.PI/180,u=Math.cos(d),h=Math.sin(d),A=[-1,1].flatMap((B)=>[-1,1].map((w)=>{let T=B*(l.width/2),Q=w*(l.height/2);return{x:l.center.x+T*u-Q*h,y:l.center.y+T*h+Q*u}})),m=[A[0],A[2],A[3],A[1]],p=Math.min(...m.map((B)=>B.x)),g=Math.max(...m.map((B)=>B.x)),_=Math.min(...m.map((B)=>B.y)),f=Math.max(...m.map((B)=>B.y)),y=g-p<=f-_?"x":"y",x=y==="x"?p:_,C=y==="x"?g:f,I=Math.max(1,Math.ceil((C-x)/0.4)),b=(C-x)/I,P=(B,w,T)=>{let Q=[],N=(F)=>F[y];for(let F=0;F<B.length;F++){let H=B[F],z=B[(F+1)%B.length],Y=N(H),U=N(z),X=T?Y>=w:Y<=w,V=T?U>=w:U<=w;if(X&&Q.push(H),X===V)continue;let W=(w-Y)/(U-Y);Q.push({x:H.x+(z.x-H.x)*W,y:H.y+(z.y-H.y)*W})}return Q},E=[];for(let B=0;B<I;B++){let w=x+B*b,T=B===I-1?C:w+b,Q=P(P(m,w,!0),T,!1);if(Q.length===0)continue;let N=Math.min(...Q.map((Y)=>Y.x)),F=Math.max(...Q.map((Y)=>Y.x)),H=Math.min(...Q.map((Y)=>Y.y)),z=Math.max(...Q.map((Y)=>Y.y));E.push({center:{x:(N+F)/2,y:(H+z)/2},width:F-N,height:z-H})}return E})(i):r===null?((l,d)=>{let{center:u,width:h,height:A,rotation:m}=l,p=Math.max(1,Math.ceil(h/d)),g=Math.max(1,Math.ceil(A/d)),_=h/p,f=A/g,y=m*Math.PI/180,x=Math.cos(y),C=Math.sin(y),I=[];for(let b=0;b<p;b++){let P=(b-p/2+0.5)*_;for(let E=0;E<g;E++){let B=(E-g/2+0.5)*f;I.push({center:{x:u.x+P*x-B*C,y:u.y+P*C+B*x},width:Math.abs(_*x)+Math.abs(f*C),height:Math.abs(_*C)+Math.abs(f*x)})}}return I})(i,((l)=>l.obstacleId?.startsWith("trace_obstacle_")?0.75:0.4)(e)):MGt(i,r),c=e.connectedTo.length>0?a.reduce((l,d,u)=>{let h=a[l],A=(h.center.x-e.center.x)**2+(h.center.y-e.center.y)**2;return(d.center.x-e.center.x)**2+(d.center.y-e.center.y)**2<A?u:l},0):-1;return a.map((l,d)=>({...o,obstacleId:d===c?o.obstacleId:o.obstacleId?`${o.obstacleId}_approx_${d}`:void 0,connectedTo:o.connectedTo,center:l.center,width:l.width,height:l.height}))},wGt=(e)=>{let t=new Map,n=new Map,o=new Map;for(let[r,s]of e.obstacles.entries()){let a=BGt(s),c=Uzo(s,r);n.set(c,a),o.set(c,s);for(let l of a){let d=[l.center.x.toFixed(6),l.center.y.toFixed(6),l.width.toFixed(6),l.height.toFixed(6),l.layers.join(","),l.isNonPlatedHole?"hole":""].join(":"),u=t.get(d);u?u.connectedTo=[...new Set([...u.connectedTo,...l.connectedTo])]:t.set(d,l)}}let i=e.connections.map((r)=>({...r,pointsToConnect:r.pointsToConnect.map((s)=>{let a=((c)=>[c.pointId,c.pcb_port_id].filter((l)=>Boolean(l)))(s);if(a.length===0)return s;for(let[c,l]of o){if(!a.some((A)=>l.connectedTo.includes(A)))continue;if(!RMt(s,l))continue;let d=n.get(c)??[];if(d.length===0)continue;if(d.some((A)=>RMt(s,A)))return s;let u=d[0],h=Number.POSITIVE_INFINITY;for(let A of d){let m=bn(QMt(s,A),s);m<h&&(h=m,u=A)}return{...s,...QMt(s,u)}}return s})}));return{...e,connections:i,obstacles:[...t.values()]}},Ege=0.001,kMt=(e)=>e.route_type==="wire",Wzo=(e)=>e.route_type==="via",Xzo=(e)=>e.route_type==="through_obstacle",LMt=(e,t,n)=>{let o=Wi(e,n),i=Wi(t,n),r=Math.min(o,i),s=Math.max(o,i);return Array.from({length:s-r+1},(a,c)=>nd(r+c,n))},FMt=({obstacleId:e,start:t,end:n,width:o,layer:i,connectedTo:r})=>{let s=n.x-t.x,a=n.y-t.y,c=Math.hypot(s,a);return c<=Ege?null:{obstacleId:e,type:"rect",layers:[i],center:{x:(t.x+n.x)/2,y:(t.y+n.y)/2},width:c,height:Math.max(o,Ege),ccwRotationDegrees:180*Math.atan2(a,s)/Math.PI,connectedTo:r}};function Kzo(e){if(!e)return e;let t=((n)=>{if(!n)return[];let o=[],i=y0(n);for(let[r,s]of(n.traces??[]).entries()){let a=s.connectsTo??[];for(let c=0;c<s.route.length;c++){let l=s.route[c];if(Wzo(l)){let d=l.via_diameter??i.padDiameter;o.push({obstacleId:`trace_obstacle_${s.pcb_trace_id}_${r}_${c}_via`,type:"rect",layers:LMt(l.from_layer,l.to_layer,n.layerCount),center:{x:l.x,y:l.y},width:Math.max(d,Ege),height:Math.max(d,Ege),connectedTo:a});continue}if(Xzo(l)){let d=FMt({obstacleId:`trace_obstacle_${s.pcb_trace_id}_${r}_${c}_through`,start:l.start,end:l.end,width:l.width,layer:l.from_layer,connectedTo:a});d&&(d.layers=LMt(l.from_layer,l.to_layer,n.layerCount),o.push(d))}}for(let c=0;c<s.route.length-1;c++){let l=s.route[c],d=s.route[c+1];if(!kMt(l)||!kMt(d)||l.layer!==d.layer)continue;let u=FMt({obstacleId:`trace_obstacle_${s.pcb_trace_id}_${r}_${c}_wire`,start:l,end:d,width:l.width,layer:l.layer,connectedTo:a});u&&o.push(u)}}return o})(e);return t.length===0?e:{...e,obstacles:[...e.obstacles??[],...t]}}function HMt(e,t){let n=function(o,i){let r=Lte(o.__zLayers??o.zLayers??[],i);if(r.length>0)return r;let s=Fte(o.layers,i);if(s.length>0)return s;throw Error(`Obstacle "${o.obstacleId??"unknown"}" has no layers on this ${i}-layer board`)}(e,t);return{...e,layers:n.map((o)=>nd(o,t)),zLayers:n,__zLayers:n}}function XE(e){return{...e,obstacles:e.obstacles.map((t)=>HMt(t,e.layerCount)),jumpers:e.jumpers?.map((t)=>({...t,pads:t.pads.map((n)=>HMt(n,e.layerCount))}))}}var TGt=(e)=>{let t=e.obstacles.filter((i)=>!((r,s)=>!((a)=>(a.connectedTo?.length??0)>0||(a.offBoardConnectsTo?.length??0)>0||a.netIsAssignable===!0)(r)&&(s.outline&&s.outline.length>=3?!R_e(r,s.outline):!D6({minX:r.center.x-r.width/2,maxX:r.center.x+r.width/2,minY:r.center.y-r.height/2,maxY:r.center.y+r.height/2},s.bounds)))(i,e)),n=t.length!==e.obstacles.length,o=n&&e.outline&&e.outline.length>=3?((i)=>{if(i.width&&i.height&&i.center){let u=i.width/2,h=i.height/2;return{minX:i.center.x-u,minY:i.center.y-h,maxX:i.center.x+u,maxY:i.center.y+h,width:i.width,height:i.height,center:{x:i.center.x,y:i.center.y}}}if(!i.outline||i.outline.length===0)throw Error("Unable to compute board bounds. pcb_board must include width/height/center or a non-empty outline.");let{POSITIVE_INFINITY:r,POSITIVE_INFINITY:s,NEGATIVE_INFINITY:a,NEGATIVE_INFINITY:c}=Number;for(let u of i.outline)r=Math.min(r,u.x),s=Math.min(s,u.y),a=Math.max(a,u.x),c=Math.max(c,u.y);let l=a-r,d=c-s;return{minX:r,minY:s,maxX:a,maxY:c,width:l,height:d,center:{x:r+l/2,y:s+d/2}}})({type:"pcb_board",pcb_board_id:"__autorouting_board_outline__",center:{x:0,y:0},thickness:1,num_layers:e.layerCount,material:"fr4",outline:e.outline}):e.bounds;return n?{...e,obstacles:t,bounds:o}:e};function xke(e){let{minX:t,maxX:n,minY:o,maxY:i}=e.bounds;for(let r of e.connections)if(!r.isOffBoard){for(let[s,a]of r.pointsToConnect.entries())if(!(a.x>=t&&a.x<=n&&a.y>=o&&a.y<=i))return`Connection "${r.name}" point "${a.pointId??s}" at (${a.x}, ${a.y}) is outside routing bounds: x [${t}, ${n}], y [${o}, ${i}]`}return null}var kfe=class extends Oi{constructor(e,t={}){super(),this.inputSrj=e,this.visualizationOptions=t,this.MAX_ITERATIONS=1}inputSrj;visualizationOptions;outputSrj;_step(){if(this.error=xke(this.inputSrj),this.error)return void(this.failed=!0);let e=XE(this.inputSrj),t=Kzo(e)??e,n=wGt(TGt(t));this.outputSrj=XE(n),this.solved=!0}getOutputSimpleRouteJson(){if(!this.outputSrj)throw Error("PreprocessSimpleRouteJsonSolver has not solved yet");return this.outputSrj}getConstructorParams(){return[this.inputSrj,this.visualizationOptions]}visualize(){return this.outputSrj?Lc(p1({...this.outputSrj,traces:[]},this.visualizationOptions),L6({srj:this.outputSrj,visualizationOptions:this.visualizationOptions})):{lines:[],points:[],rects:[],circles:[]}}};function Q_(e,t,n,o={}){return{solverName:e,solverClass:t,getConstructorParams:n,onSolved:o.onSolved}}var LHe=class extends Oi{constructor(e,t={}){super(),this.srj=e,this.opts=t,this.originalSrj=e,this.opts={...t};let n=this.opts;if(this.effort=n.effort??1,this.MAX_ITERATIONS=1e8*this.effort,this.maxNodeDimension=n.maxNodeDimension??16,this.maxNodeRatio=n.maxNodeRatio??6,this.minNodeArea=n.minNodeArea??0.010000000000000002,this.setSimpleRouteJson(e),n.capacityDepth===void 0){let o=this.srj.bounds.maxX-this.srj.bounds.minX,i=this.srj.bounds.maxY-this.srj.bounds.minY,r=Math.max(o,i),s=n.targetMinCapacity??0.5;n.capacityDepth=cT(r,s)}this.cacheProvider=n.cacheProvider===void 0?CS():n.cacheProvider===null?null:n.cacheProvider,this.startTimeOfPhase={},this.endTimeOfPhase={},this.timeSpentOnPhase={}}srj;opts;preprocessSimpleRouteJsonSolver;escapeViaLocationSolver;netToPointPairsSolver;nodeSolver;nodeDimensionSubdivisionSolver;nodeTargetMerger;edgeSolver;colorMap;highDensityRouteSolver;highDensityForceImproveSolver;highDensityRepairSolver;highDensityStitchSolver;globalDrcForceImproveSolver;singleLayerNodeMerger;strawSolver;deadEndSolver;traceSimplificationSolver;availableSegmentPointSolver;portPointPathingSolver;multiSectionPortPointOptimizer;uniformPortDistributionSolver;traceWidthSolver;necessaryCrampedPortPointSolver;viaDiameter;viaHoleDiameter;minTraceWidth;effort;maxNodeDimension;maxNodeRatio;minNodeArea;startTimeOfPhase;endTimeOfPhase;timeSpentOnPhase;activeSubSolver=null;connMap;srjWithEscapeViaLocations;srjWithPointPairs;originalSrj;capacityNodes=null;capacityEdges=null;highDensityNodePortPoints;cacheProvider=null;pipelineDef=[Q_("preprocessSimpleRouteJsonSolver",kfe,(e)=>[e.originalSrj],{onSolved:(e)=>{e.setSimpleRouteJson(e.preprocessSimpleRouteJsonSolver.getOutputSimpleRouteJson())}}),Q_("escapeViaLocationSolver",Nfe,(e)=>[e.srj,{viaDiameter:e.viaDiameter,minTraceWidth:e.minTraceWidth,obstacleMargin:e.srj.defaultObstacleMargin??0.15}],{onSolved:(e)=>{e.srjWithEscapeViaLocations=e.escapeViaLocationSolver?.getOutputSimpleRouteJson()}}),Q_("netToPointPairsSolver",wU,(e)=>{let t=e.srjWithEscapeViaLocations??e.srj;return[t,e.colorMap,rT(t)]},{onSolved:(e)=>{e.srjWithPointPairs=e.netToPointPairsSolver?.getNewSimpleRouteJson(),e.colorMap=HA(e.srjWithPointPairs,e.connMap),e.connMap=x0(e.srjWithPointPairs)}}),Q_("nodeSolver",bU,(e)=>[{simpleRouteJson:e.srjWithPointPairs,maxGapFillPasses:4}],{onSolved:(e)=>{e.capacityNodes=e.nodeSolver?.getOutput().meshNodes??[]}}),Q_("nodeDimensionSubdivisionSolver",Tfe,(e)=>[e.capacityNodes,e.maxNodeDimension,e.maxNodeRatio,e.minNodeArea],{onSolved:(e)=>{e.capacityNodes=e.nodeDimensionSubdivisionSolver?.outputNodes??[]}}),Q_("edgeSolver",sT,(e)=>[e.capacityNodes],{onSolved:(e)=>{e.capacityEdges=e.edgeSolver?.edges}}),Q_("availableSegmentPointSolver",hL,(e)=>[{nodes:e.capacityNodes,edges:e.capacityEdges||[],traceWidth:e.minTraceWidth,colorMap:e.colorMap,shouldReturnCrampedPortPoints:!0}]),Q_("necessaryCrampedPortPointSolver",nne,(e)=>[{capacityMeshNodes:e.capacityNodes,sharedEdgeSegments:e.availableSegmentPointSolver.getOutput(),simpleRouteJson:e.srjWithPointPairs}]),Q_("portPointPathingSolver",Dfe,(e)=>{let t=e.necessaryCrampedPortPointSolver?.getOutput()??e.availableSegmentPointSolver.getOutput(),{graph:n,connections:o}=one({capacityMeshNodes:e.capacityNodes,layerCount:e.srj.layerCount,connectivityMap:e.connMap,segmentPortPoints:t.flatMap((i)=>i.portPoints),simpleRouteJsonConnections:e.srjWithPointPairs.connections});return[{graph:n,connections:o,layerCount:e.srj.layerCount,effort:Math.min(1,e.effort),minViaPadDiameter:e.viaDiameter,flags:{FORCE_CENTER_FIRST:!0,RIPPING_ENABLED:!0},weights:{SHUFFLE_SEED:0,MEMORY_PF_FACTOR:4,CENTER_OFFSET_DIST_PENALTY_FACTOR:0,CENTER_OFFSET_FOCUS_SHIFT:0,NODE_PF_FACTOR:0,LAYER_CHANGE_COST:0,RIPPING_PF_COST:0,NODE_PF_MAX_PENALTY:100,BASE_CANDIDATE_COST:0.6,MAX_ITERATIONS_PER_PATH:0,RANDOM_WALK_DISTANCE:0,START_RIPPING_PF_THRESHOLD:0.3,END_RIPPING_PF_THRESHOLD:1,MAX_RIPS:1000,RANDOM_RIP_FRACTION:0.3,STRAIGHT_LINE_DEVIATION_PENALTY_FACTOR:4,GREEDY_MULTIPLIER:0.7,MIN_ALLOWED_BOARD_SCORE:-1e4}}]}),Q_("uniformPortDistributionSolver",Hte,(e)=>[{nodeWithPortPoints:e.portPointPathingSolver?.getOutput().nodesWithPortPoints??[],inputNodesWithPortPoints:e.portPointPathingSolver?.getOutput().inputNodeWithPortPoints??[],minTraceWidth:e.minTraceWidth,obstacles:e.srj.obstacles,layerCount:e.srj.layerCount}]),Q_("highDensityRouteSolver",yL,(e)=>{let t=e.uniformPortDistributionSolver?.getOutput()??[],n=e.portPointPathingSolver?.getOutput().nodesWithPortPoints??[],o=(t.length>0?t:n).map((i)=>sOt(i)?{...i,availableZ:Array.from({length:e.srj.layerCount},(r,s)=>s)}:i);return e.highDensityNodePortPoints=structuredClone(o),[{nodePortPoints:o,nodePfById:new Map((e.portPointPathingSolver?.getOutput().inputNodeWithPortPoints??[]).map((i)=>[i.capacityMeshNodeId,e.portPointPathingSolver?.computeNodePf(i)??null])),colorMap:e.colorMap,connMap:e.connMap,viaDiameter:e.viaDiameter,traceWidth:e.minTraceWidth,obstacleMargin:e.srj.defaultObstacleMargin??0.15,obstacles:e.srj.obstacles,layerCount:e.srj.layerCount,useGrowShrinkHighDensityIntraNodeSolver:!0}]}),Q_("highDensityForceImproveSolver",ine,(e)=>[{nodeWithPortPoints:e.highDensityNodePortPoints??[],hdRoutes:e.highDensityRouteSolver.routes,colorMap:e.colorMap,totalStepsPerNode:Math.max(20,Math.round(60*Math.min(1,e.effort))),nodeAssignmentMargin:e.srj.defaultObstacleMargin??0.2}]),Q_("highDensityRepairSolver",rne,(e)=>[{nodeWithPortPoints:e.highDensityNodePortPoints??[],hdRoutes:e.highDensityForceImproveSolver?.getOutput()??e.highDensityRouteSolver.routes,obstacles:e.srj.obstacles,colorMap:e.colorMap,repairMargin:e.srj.defaultObstacleMargin??0.2,minimumTraceWidth:e.srj.minTraceWidth,connMap:e.connMap}]),Q_("highDensityStitchSolver",Qfe,(e)=>[{connections:e.srjWithPointPairs.connections,hdRoutes:e.highDensityRepairSolver?.getOutput()??e.highDensityForceImproveSolver?.getOutput()??e.highDensityRouteSolver.routes,colorMap:e.colorMap,layerCount:e.srj.layerCount,defaultViaDiameter:e.viaDiameter}]),Q_("traceSimplificationSolver",HI,(e)=>[{hdRoutes:e.highDensityStitchSolver.mergedHdRoutes,obstacles:e.srj.obstacles,connMap:e.connMap,colorMap:e.colorMap,outline:e.srj.outline,defaultViaDiameter:e.viaDiameter,layerCount:e.srj.layerCount,minTraceToPadEdgeClearance:e.srj.minTraceToPadEdgeClearance,iterations:2}]),Q_("traceWidthSolver",TU,(e)=>[{hdRoutes:e.traceSimplificationSolver.simplifiedHdRoutes,obstacles:e.srj.obstacles,connMap:e.connMap,colorMap:e.colorMap,minTraceWidth:e.minTraceWidth,connection:e.srj.connections,obstacleMargin:e.srj.minTraceToPadEdgeClearance??0.15,layerCount:e.srj.layerCount}]),Q_("globalDrcForceImproveSolver",bE,(e)=>[{srj:e.srjWithPointPairs,hdRoutes:e.traceWidthSolver.getHdRoutesWithWidths(),effort:Math.min(1,e.effort)}])];setSimpleRouteJson(e){this.srj=e;let t=y0(this.srj);this.viaDiameter=t.padDiameter,this.viaHoleDiameter=t.holeDiameter,this.minTraceWidth=this.srj.minTraceWidth,this.connMap=x0(this.srj),this.colorMap=HA(this.srj,this.connMap)}getConstructorParams(){return[this.srj,this.opts]}currentPipelineStepIndex=0;_step(){let e=this.pipelineDef[this.currentPipelineStepIndex];if(!e)return void(this.solved=!0);if(this.activeSubSolver)return this.activeSubSolver.step(),void(this.activeSubSolver.solved?(this.endTimeOfPhase[e.solverName]=performance.now(),this.timeSpentOnPhase[e.solverName]=this.endTimeOfPhase[e.solverName]-this.startTimeOfPhase[e.solverName],e.onSolved?.(this),this.activeSubSolver=null,this.currentPipelineStepIndex++):this.activeSubSolver.failed&&(this.error=this.activeSubSolver?.error,this.failed=!0,this.activeSubSolver=null));let t=e.getConstructorParams(this);this.activeSubSolver=new e.solverClass(...t),this[e.solverName]=this.activeSubSolver,this.timeSpentOnPhase[e.solverName]=0,this.startTimeOfPhase[e.solverName]=performance.now()}solveUntilPhase(e){for(;this.getCurrentPhase()!==e;)this.step()}getCurrentPhase(){return this.pipelineDef[this.currentPipelineStepIndex]?.solverName??"none"}visualize(){if(!this.solved&&this.activeSubSolver)return this.activeSubSolver.visualize();let e=this.escapeViaLocationSolver?.visualize(),t=this.netToPointPairsSolver?.visualize(),n=this.nodeSolver?.visualize(),o=this.nodeDimensionSubdivisionSolver?.visualize(),i=this.nodeTargetMerger?.visualize(),r=this.singleLayerNodeMerger?.visualize(),s=this.strawSolver?.visualize(),a=this.edgeSolver?.visualize(),c=this.deadEndSolver?.visualize(),l=this.availableSegmentPointSolver?.visualize(),d=this.portPointPathingSolver?.visualize(),u=this.multiSectionPortPointOptimizer?.visualize(),h=this.uniformPortDistributionSolver?.visualize(),A=this.highDensityRouteSolver?.visualize(),m=this.highDensityForceImproveSolver?.visualize(),p=this.highDensityRepairSolver?.visualize(),g=this.highDensityStitchSolver?.visualize(),_=this.traceSimplificationSolver?.visualize(),f=this.necessaryCrampedPortPointSolver?.visualize(),y=(this.highDensityRouteSolver?.visualize(),this.originalSrj),x=y.outline,C=[];if(C.push({points:[{x:y.bounds?.minX??-50,y:y.bounds?.minY??-50},{x:y.bounds?.maxX??50,y:y.bounds?.minY??-50},{x:y.bounds?.maxX??50,y:y.bounds?.maxY??50},{x:y.bounds?.minX??-50,y:y.bounds?.maxY??50},{x:y.bounds?.minX??-50,y:y.bounds?.minY??-50}],strokeColor:"rgba(255,0,0,0.25)"}),x&&x.length>=2){let B=x.map((w)=>({x:w.x,y:w.y}));B.push({...B[0]}),C.push({points:B,strokeColor:"rgba(0, 136, 255, 0.95)"})}let I=O6(y),b={points:[...y.connections.flatMap((B)=>B.pointsToConnect.map((w)=>({...w,layer:z6(w,y.layerCount),label:`${B.name} ${w.pcb_port_id??""}`})))],rects:[...(y.obstacles??[]).filter((B)=>!B.isCopperPour).map((B)=>({...B,fill:B.layers?.includes("top")?"rgba(255,0,0,0.25)":B.layers?.includes("bottom")?"rgba(0,0,255,0.25)":"rgba(255,0,0,0.25)",layer:OE(B,y.layerCount),label:I(B)}))],lines:C},P=L6({srj:y}),E=[Lc(b,P),e,t,n,o,i,r,s,a,c,l,f,d,u,h,A?Lc(b,A):null,m,p,g,_,this.solved?Lc({lines:C},L6({srj:this.originalSrj}),p1(this.getOutputSimpleRouteJson())):null].filter(Boolean);return Lc(...E)}preview(){if(this.highDensityRouteSolver){let e=[];for(let t=this.highDensityRouteSolver.routes.length-1;t>=0;t--){let n=this.highDensityRouteSolver.routes[t];if(e.push({points:n.route.map((o)=>({x:o.x,y:o.y})),strokeColor:this.colorMap[n.connectionName]}),e.length>200)break}return{lines:e}}return this.portPointPathingSolver?this.portPointPathingSolver.preview():this.netToPointPairsSolver?this.netToPointPairsSolver.visualize():this.escapeViaLocationSolver?this.escapeViaLocationSolver.visualize():this.preprocessSimpleRouteJsonSolver?this.preprocessSimpleRouteJsonSolver.visualize():{}}_getOutputHdRoutes(){return this.globalDrcForceImproveSolver?.getOutput()??this.traceWidthSolver?.getHdRoutesWithWidths()??this.traceSimplificationSolver?.simplifiedHdRoutes??this.highDensityStitchSolver.mergedHdRoutes}getOutputSimplifiedPcbTraces(){if(!this.solved||!this.highDensityRouteSolver)throw Error("Cannot get output before solving is complete");let e=[],t=this._getOutputHdRoutes();for(let n of this.netToPointPairsSolver?.newConnections??[]){let o=n.__netConnectionName??this.originalSrj.connections.find((r)=>r.name===n.name)?.__netConnectionName,i=t.filter((r)=>r.connectionName===n.name);for(let r=0;r<i.length;r++){let s=i[r],a={type:"pcb_trace",pcb_trace_id:`${n.name}_${r}`,connection_name:o??n.__rootConnectionNames?.[0]??n.name,route:Ex(s,this.srj.layerCount,{connectionPoints:n.pointsToConnect,defaultViaHoleDiameter:this.viaHoleDiameter,obstacles:this.srj.obstacles,connMap:this.connMap})};e.push(a)}}return e}getOutputSimpleRouteJson(){return{...this.originalSrj,traces:this.getOutputSimplifiedPcbTraces()}}},DGt=(e)=>{let t=[],n=e;for(;n;)t.push(n),n=n.activeSubSolver;for(let o=t.length-1;o>=0;o--){let i=t[o]?.pendingEffects?.filter(Boolean)??[];if(i.length>0)return i}return[]},o_e=(e)=>/\/solve\/?$/.test(e)?e.replace(/\/+$/,""):`${e.replace(/\/+$/,"")}/solve`,jzo=(e,t,n)=>{let o=((i)=>{let r=new Map;for(let s of i.portPoints)s.rootConnectionName&&!r.has(s.connectionName)&&r.set(s.connectionName,s.rootConnectionName);return r})(e);return t.map((i)=>({connectionName:i.connectionName,rootConnectionName:i.rootConnectionName??o.get(i.connectionName)??void 0,traceThickness:i.traceThickness??n.traceWidth,viaDiameter:i.viaDiameter??n.viaDiameter,route:(i.route??[]).map((r)=>({x:r.x,y:r.y,z:r.z,...r.insideJumperPad?{insideJumperPad:!0}:{}})),vias:(i.vias??[]).map((r)=>({x:r.x,y:r.y})),...i.jumpers?{jumpers:i.jumpers}:{}}))},JNe=(e,t)=>{if(e.length===0)return null;let n=Math.min(Math.max(t,0),1),o=(e.length-1)*n,i=Math.floor(o),r=Math.ceil(o),s=e[i],a=e[r];return i===r?s:s+(a-s)*(o-i)},tV=(e)=>new Set(e.portPoints.map((t)=>t.connectionName)).size,OMt=(e)=>!(tV(e)<3)&&(e.availableZ?.length??0)!==1,zMt=(e)=>e?.MULTI_HEAD_POLYLINE_SOLVER?"MultiHeadPolyLineIntraNodeSolver3":e?.CLOSED_FORM_SINGLE_TRANSITION?"SingleTransitionIntraNodeSolver":e?.CLOSED_FORM_TWO_TRACE_SAME_LAYER?"TwoCrossingRoutesHighDensitySolver":e?.CLOSED_FORM_TWO_TRACE_TRANSITION_CROSSING?"SingleTransitionCrossingRouteSolver":e?.HIGH_DENSITY_A01?"HighDensitySolverA01":e?.HIGH_DENSITY_A03?"HighDensitySolverA03":"SingleHighDensityRouteSolver6_VertHorzLayer_FutureCost",GMt=(e)=>{if(e instanceof Wke){let n=zMt(e.hyperParameters);return e.cacheHit?`${n} [cached]`:n}if(e instanceof qge)return zMt(e.hyperParameters);if(e&&typeof e=="object"&&"getSolverName"in e&&typeof e.getSolverName=="function")return e.getSolverName();let t=e?.constructor;return typeof t?.name=="string"?t.name:"unknown"},YMt=(e)=>e.winningSolver?GMt(e.winningSolver):GMt(e),qzo=class extends Oi{getSolverName(){return"Pipeline5HdCacheHighDensitySolver"}unsolvedNodePortPoints;colorMap;connMap;viaDiameter;traceWidth;obstacleMargin;obstacles;layerCount;hdCacheBaseUrl;fetchImpl;nodePfById;routes=[];nodeSolveMetadataById=new Map;launchedRemoteSolves=!1;solvedRoutesByNodeIndex=new Map;failedNodeResults=[];remoteResponseMeasurements=[];constructor({nodePortPoints:e,colorMap:t,connMap:n,viaDiameter:o,traceWidth:i,obstacleMargin:r,obstacles:s,layerCount:a,nodePfById:c,hdCacheBaseUrl:l,fetchImpl:d}){super(),this.unsolvedNodePortPoints=e,this.colorMap=t??{},this.connMap=n,this.viaDiameter=o??0.3,this.traceWidth=i??0.15,this.obstacleMargin=r??0.15,this.obstacles=s??[],this.layerCount=a??2,this.hdCacheBaseUrl=l??"https://hd-cache.tscircuit.com",this.fetchImpl=(d??globalThis.fetch).bind(globalThis),this.nodePfById=c instanceof Map?new Map(c):new Map(Object.entries(c??{})),this.pendingEffects=[],this.stats={localDirectNodeCount:0,localSolvedNodeCount:0,localFallbackNodeCount:0,remoteFallbackNodeCount:0,remoteRequestsStarted:0,remoteRequestsCompleted:0,remoteResponseSampleCount:0,remoteKOrderSampleCount:0,slowestRemoteResponseMs:null,slowestRemoteResponseNodeId:null,p50RemoteResponseMs:null,p50RemoteKOrder:null,p95RemoteKOrder:null,remoteSources:{}}}computeProgress(){return this.unsolvedNodePortPoints.length===0?1:this.nodeSolveMetadataById.size/this.unsolvedNodePortPoints.length}solveNodeLocally(e,t,n={}){let o=new iL({nodeWithPortPoints:e,colorMap:this.colorMap,connMap:this.connMap,viaDiameter:this.viaDiameter,traceWidth:this.traceWidth,obstacleMargin:this.obstacleMargin,obstacles:this.obstacles,layerCount:this.layerCount});if(o.solve(),o.failed){let r=o.error??`Local intra-node solver failed for ${e.capacityMeshNodeId}`,s=tV(e);return this.failedNodeResults.push({node:e,error:n.remoteFailure&&n.resolution==="local-fallback"?`Remote solve failed (${n.remoteFailure}); local fallback failed (${r})`:r}),void this.recordNodeSolveMetadata(e,{status:"failed",resolution:"failed",solverType:YMt(o),supervisorType:o.getSolverName(),iterations:o.iterations,pairCount:s,routeCount:0,remoteAttempt:n.resolution==="local-fallback"?{attempted:!0,endpoint:o_e(this.hdCacheBaseUrl),source:"error",durationMs:n.remoteDurationMs,error:n.remoteFailure??r}:{attempted:!1},error:r})}this.solvedRoutesByNodeIndex.set(t,o.solvedRoutes);let i=tV(e);this.recordNodeSolveMetadata(e,{status:"solved",resolution:n.resolution??"local",solverType:YMt(o),supervisorType:o.getSolverName(),iterations:o.iterations,pairCount:i,routeCount:o.solvedRoutes.length,remoteAttempt:n.resolution==="local-fallback"?{attempted:!0,endpoint:o_e(this.hdCacheBaseUrl),source:"error",durationMs:n.remoteDurationMs,error:n.remoteFailure}:{attempted:!1}}),n.resolution==="local-fallback"?(this.stats.localFallbackNodeCount+=1,this.stats.remoteFallbackNodeCount+=1):this.stats.localDirectNodeCount+=1,this.stats.localSolvedNodeCount+=1}async solveNodeViaHdCache(e,t){let n=o_e(this.hdCacheBaseUrl),o={"content-type":"application/json"},i={nodeWithPortPoints:e},r=JSON.stringify(i),s=Date.now(),a,c,l,d=null,u=null;try{let A=await this.fetchImpl(n,{method:"POST",headers:o,body:r});if(a=A.status,c=A.ok,l=await A.text(),d=Date.now()-s,u=l?JSON.parse(l):null,!A.ok)throw Error(u?.message??l??`hd-cache request failed with status ${A.status}`);if(!u?.ok||u.routes===null)throw Error(u?.message??`hd-cache returned no routes for ${e.capacityMeshNodeId}`);let m=jzo(e,u.routes,{traceWidth:this.traceWidth,viaDiameter:this.viaDiameter});this.solvedRoutesByNodeIndex.set(t,m),this.recordNodeSolveMetadata(e,{status:"solved",resolution:"remote",solverType:`hd-cache.tscircuit.com [${u.source}]`,iterations:null,pairCount:tV(e),routeCount:m.length,remoteAttempt:{attempted:!0,endpoint:o_e(this.hdCacheBaseUrl),source:u.source,durationMs:d}}),this.recordRemoteSource(u.source)}catch(A){d??=Date.now()-s;let m=((p)=>p instanceof Error?p.message:String(p))(A);this.recordFailedHdCacheRequest({nodeId:e.capacityMeshNodeId,pairCount:tV(e),failedAt:new Date().toISOString(),durationMs:d,error:m,url:n,request:{method:"POST",headers:o,body:r,bodyJson:i},response:a!==void 0||c!==void 0||l!==void 0||u!==null?{status:a,ok:c,text:l,body:u}:void 0}),this.recordRemoteSource("error"),this.solveNodeLocally(e,t,{resolution:"local-fallback",remoteFailure:m,remoteDurationMs:d})}finally{this.recordRemoteResponseMetrics(e.capacityMeshNodeId,d??Date.now()-s,(h=u?.kOrder,typeof h=="number"&&Number.isFinite(h)?u.kOrder:null)),this.stats.remoteRequestsCompleted+=1}var h}launchRemoteSolves(){let e=[];this.unsolvedNodePortPoints.forEach((t,n)=>{if(!OMt(t))return void this.solveNodeLocally(t,n);let o={name:`hd-cache:${t.capacityMeshNodeId}`,promise:Promise.resolve()};o.promise=this.solveNodeViaHdCache(t,n).finally(()=>{this.pendingEffects=this.pendingEffects?.filter((i)=>i!==o)}),e.push(o)}),this.pendingEffects=e,this.stats.remoteRequestsStarted=e.length}recordRemoteSource(e){this.stats.remoteSources[e]=(this.stats.remoteSources[e]??0)+1}recordRemoteResponseMetrics(e,t,n){this.remoteResponseMeasurements.push({nodeId:e,durationMs:t,kOrder:n}),this.stats.remoteResponseSampleCount=this.remoteResponseMeasurements.length,this.stats.remoteKOrderSampleCount=this.remoteResponseMeasurements.filter((s)=>s.kOrder!==null).length;let o=null;for(let s of this.remoteResponseMeasurements)(!o||s.durationMs>o.durationMs)&&(o=s);this.stats.slowestRemoteResponseMs=o?.durationMs??null,this.stats.slowestRemoteResponseNodeId=o?.nodeId??null;let i=this.remoteResponseMeasurements.map((s)=>s.durationMs).sort((s,a)=>s-a);this.stats.p50RemoteResponseMs=JNe(i,0.5);let r=this.remoteResponseMeasurements.map((s)=>s.kOrder).filter((s)=>s!==null).sort((s,a)=>s-a);this.stats.p50RemoteKOrder=JNe(r,0.5),this.stats.p95RemoteKOrder=JNe(r,0.95)}recordFailedHdCacheRequest(e){let t=(()=>{if(typeof window>"u")return null;let n=window;return Array.isArray(n.__FAILED_HD_CACHE_REQUESTS)||(n.__FAILED_HD_CACHE_REQUESTS=[]),n.__FAILED_HD_CACHE_REQUESTS})();t&&t.push(e)}recordNodeSolveMetadata(e,t){this.nodeSolveMetadataById.set(e.capacityMeshNodeId,{...t,node:e,nodePf:this.nodePfById.get(e.capacityMeshNodeId)??null})}ensureFailedNodeMetadata(){for(let e of this.failedNodeResults)this.nodeSolveMetadataById.has(e.node.capacityMeshNodeId)||this.recordNodeSolveMetadata(e.node,{status:"failed",resolution:"failed",solverType:"unknown",iterations:null,pairCount:tV(e.node),routeCount:0,remoteAttempt:{attempted:OMt(e.node),source:"error",error:e.error},error:e.error})}getVisibleRoutes(){if(this.solved)return this.routes;let e=[];for(let t=0;t<this.unsolvedNodePortPoints.length;t++)e.push(...this.solvedRoutesByNodeIndex.get(t)??[]);return e}createNodeMarkerLabel(e,t){return["hd_node_marker",`node: ${e}`,`status: ${t.status}`,`resolution: ${t.resolution}`,`solver: ${t.solverType}`,...t.supervisorType?[`supervisor: ${t.supervisorType}`]:[],...t.iterations!==null?[`iterations: ${t.iterations}`]:[],`pairCount: ${t.pairCount}`,`routes: ${t.routeCount}`,`nodePf: ${t.nodePf??"n/a"}`,"remoteAttempted: "+(t.remoteAttempt.attempted?"yes":"no"),...t.remoteAttempt.source?[`remoteSource: ${t.remoteAttempt.source}`]:[],...t.remoteAttempt.durationMs!==void 0?[`remoteDurationMs: ${t.remoteAttempt.durationMs}`]:[],...t.remoteAttempt.error?[`remoteError: ${t.remoteAttempt.error}`]:[],`portPoints: ${t.node.portPoints.length}`,...t.error?[`error: ${t.error}`]:[]].join(`
`)}_step(){if(!this.launchedRemoteSolves)return this.launchedRemoteSolves=!0,void this.launchRemoteSolves();if(!((this.pendingEffects?.length??0)>0)){if(this.failedNodeResults.length>0){this.ensureFailedNodeMetadata();let e=this.failedNodeResults[0];return this.failed=!0,void(this.error=`Failed to solve ${this.failedNodeResults.length} nodes via hd-cache. First failure: ${e?.node.capacityMeshNodeId} (${e?.error})`)}this.routes=[];for(let e=0;e<this.unsolvedNodePortPoints.length;e++)this.routes.push(...this.solvedRoutesByNodeIndex.get(e)??[]);this.solved=!0}}visualize(){let e={lines:[],points:[],rects:[],circles:[]};for(let t of this.getVisibleRoutes()){let n=jge(t.route,t.connectionName,this.colorMap[t.connectionName]);for(let o of n)e.lines.push({points:o.points,label:o.connectionName,strokeColor:o.z===0?o.color:Cr(o.color,0.75),layer:`z${o.z}`,strokeWidth:t.traceThickness,strokeDash:o.z!==0?"10, 5":void 0});for(let o of t.vias)e.circles.push({center:o,layer:"z0,1",radius:t.viaDiameter/2,fill:this.colorMap[t.connectionName],label:`${t.connectionName} via`})}for(let[t,n]of this.nodeSolveMetadataById){let o=n.node.center.x-n.node.width/2,i=n.node.center.x+n.node.width/2,r=n.node.center.y-n.node.height/2,s=n.node.center.y+n.node.height/2,a=this.createNodeMarkerLabel(t,n),c=n.status==="solved"?"blue":"red",l=n.status==="solved"?0.03:0.08;if(e.lines.push({points:[{x:o,y:r},{x:i,y:r}],layer:"hd_node_boundaries",strokeColor:c,strokeDash:"6, 4",strokeWidth:l,label:a},{points:[{x:i,y:r},{x:i,y:s}],layer:"hd_node_boundaries",strokeColor:c,strokeDash:"6, 4",strokeWidth:l,label:a},{points:[{x:i,y:s},{x:o,y:s}],layer:"hd_node_boundaries",strokeColor:c,strokeDash:"6, 4",strokeWidth:l,label:a},{points:[{x:o,y:s},{x:o,y:r}],layer:"hd_node_boundaries",strokeColor:c,strokeDash:"6, 4",strokeWidth:l,label:a}),n.status==="solved")e.points.push({x:n.node.center.x,y:n.node.center.y,color:c,layer:"hd_node_markers",label:a});else{e.lines.push({points:[{x:0,y:0},{x:n.node.center.x,y:n.node.center.y}],layer:"hd_failed_node_guides",strokeColor:c,strokeDash:"8, 6",strokeWidth:0.05,label:a});let d=Math.max(n.node.width,1.2),u=Math.max(n.node.height,1.2),h=d/2,A=u/2;e.rects.push({center:n.node.center,layer:"hd_node_markers",width:d,height:u,fill:"rgba(255, 0, 0, 0.3)",stroke:c,label:a}),e.circles.push({center:n.node.center,radius:Math.max(0.6*Math.max(d,u),1.1),layer:"hd_node_markers",fill:"rgba(255, 0, 0, 0.08)",stroke:c,label:a}),e.lines.push({points:[{x:n.node.center.x-h,y:n.node.center.y-A},{x:n.node.center.x+h,y:n.node.center.y+A}],layer:"hd_node_markers",strokeColor:c,strokeWidth:0.16,label:a},{points:[{x:n.node.center.x-h,y:n.node.center.y+A},{x:n.node.center.x+h,y:n.node.center.y-A}],layer:"hd_node_markers",strokeColor:c,strokeWidth:0.16,label:a})}}return e}},NGt=class extends LHe{hdCacheBaseUrl;hdCacheFetch;constructor(e,t={}){super(e,{...t,maxNodeDimension:t.maxNodeDimension??7,maxNodeRatio:t.maxNodeRatio??4}),this.hdCacheBaseUrl=t.hdCacheBaseUrl??"https://hd-cache.tscircuit.com",this.hdCacheFetch=t.hdCacheFetch,this.replaceHighDensityPipelineStep()}replaceHighDensityPipelineStep(){let e=this.pipelineDef.findIndex((t)=>t.solverName==="highDensityRouteSolver");if(e===-1)throw Error("Pipeline4 highDensityRouteSolver step is missing");this.pipelineDef[e]={...this.pipelineDef[e],solverClass:qzo,getConstructorParams:(t)=>{let n=t.uniformPortDistributionSolver?.getOutput()??[],o=t.portPointPathingSolver?.getOutput().nodesWithPortPoints??[],i=n.length>0?n:o;return t.highDensityNodePortPoints=structuredClone(i),[{nodePortPoints:i,nodePfById:new Map((t.portPointPathingSolver?.getOutput().inputNodeWithPortPoints??[]).map((r)=>[r.capacityMeshNodeId,t.portPointPathingSolver?.computeNodePf(r)??null])),colorMap:t.colorMap,connMap:t.connMap,viaDiameter:t.viaDiameter,traceWidth:t.minTraceWidth,obstacleMargin:t.srj.defaultObstacleMargin??0.15,obstacles:t.srj.obstacles,layerCount:t.srj.layerCount,hdCacheBaseUrl:t.hdCacheBaseUrl,fetchImpl:t.hdCacheFetch}]}}}async stepAsync(){if(this.solved||this.failed)return;this.step();let e=DGt(this);e.length!==0&&(await Promise.race(e.map((t)=>t.promise.then(()=>t.name,()=>t.name))),this.solved||this.failed||this.step())}async solveAsync(){let e=Date.now();for(;!this.solved&&!this.failed;)await this.stepAsync();this.timeToSolve=Date.now()-e}solve(){throw Error("AutoroutingPipelineSolver5_HdCache requires async execution. Use solveAsync() or stepAsync().")}};var dGr=Math.PI/2;var Jzo=0.1,$zo=0.15,Zzo=Jzo+$zo,uGr=3*Zzo/4;var hGr=CRe(T9o(),1);var mGr=(Number.POSITIVE_INFINITY,0.000000001);var pGr=(new Int32Array(0),(e)=>(e.ccwRotationDegrees??0)*Math.PI/180);var Yh=(e,t)=>{if(e==="top")return 0;if(e==="bottom")return t-1;let n=/^inner(\d+)$/.exec(e);if(!n)return-1;let o=Number(n[1]);return o>0&&o<t-1?o:-1},uS=(e,t)=>e===0?"top":e===t-1?"bottom":`inner${e}`,yU=(e,t,n)=>{let o=Yh(e,n),i=Yh(t,n);if(o<0||i<0)return[];let r=Math.min(o,i),s=Math.max(o,i);return Array.from({length:s-r+1},(a,c)=>uS(r+c,n))},sne=(e,t)=>{let n=[],o=[],i=e.route.find((c)=>c.route_type==="wire"),r=i?.route_type==="wire"?i.width:null,s={"0603":0.95,1206:1.8,"1206x4_pair":1.8},a=null;for(let c=0;c<e.route.length;c++){let l=e.route[c];if(l.route_type==="wire"){if(!Number.isFinite(l.x)||!Number.isFinite(l.y)||!Number.isFinite(l.width)||l.width<=0||Yh(l.layer,t)<0)throw Error(`PostProcessingSolver: immutable trace "${e.connection_name}" has an invalid wire`);if(a&&a.layer!==l.layer)throw Error(`PostProcessingSolver: immutable trace "${e.connection_name}" changes layer without a transition`);a&&n.push({start:a,end:l,layer:l.layer,width:Math.max(a.width,l.width),connectionName:e.connection_name,terminal:null}),a=l;continue}if(l.route_type==="via"){let A=yU(l.from_layer,l.to_layer,t),m=a,p=l.via_diameter??m?.width??r;if(!Number.isFinite(l.x)||!Number.isFinite(l.y)||A.length<2||p===null||!Number.isFinite(p)||p<=0||l.via_hole_diameter!==void 0&&(!Number.isFinite(l.via_hole_diameter)||l.via_hole_diameter<=0||p!==null&&l.via_hole_diameter>=p))throw Error(`PostProcessingSolver: immutable trace "${e.connection_name}" has an invalid via`);m&&Math.hypot(m.x-l.x,m.y-l.y)>0.00000001&&n.push({start:m,end:l,layer:m.layer,width:m.width,connectionName:e.connection_name,terminal:null}),o.push({x:l.x,y:l.y,layers:A,diameter:p,connectionName:e.connection_name,terminal:c===0?"start":c===e.route.length-1?"end":null});let g=e.route.slice(c+1).find((f)=>f.route_type==="wire"),_=m?.layer===l.from_layer?l.to_layer:m?.layer===l.to_layer?l.from_layer:g?.route_type!=="wire"||g.layer!==l.from_layer&&g.layer!==l.to_layer?null:g.layer;if(!_)throw Error(`PostProcessingSolver: immutable trace "${e.connection_name}" has a discontinuous via`);a={x:l.x,y:l.y,layer:_,width:m?.width??r??p};continue}if(l.route_type==="jumper"){let A=s[l.footprint];if(!Number.isFinite(l.start.x)||!Number.isFinite(l.start.y)||!Number.isFinite(l.end.x)||!Number.isFinite(l.end.y)||Yh(l.layer,t)<0)throw Error(`PostProcessingSolver: immutable trace "${e.connection_name}" has an invalid jumper`);if(a&&(a.layer!==l.layer||Math.hypot(a.x-l.start.x,a.y-l.start.y)>0.00000001))throw Error(`PostProcessingSolver: immutable trace "${e.connection_name}" has a discontinuous jumper`);n.push({start:l.start,end:l.end,layer:l.layer,width:A,connectionName:e.connection_name,terminal:null}),a={...l.end,layer:l.layer,width:A};continue}let d=yU(l.from_layer,l.to_layer,t);if(!Number.isFinite(l.start.x)||!Number.isFinite(l.start.y)||!Number.isFinite(l.end.x)||!Number.isFinite(l.end.y)||!Number.isFinite(l.width)||l.width<=0||d.length<2)throw Error(`PostProcessingSolver: immutable trace "${e.connection_name}" has invalid through-obstacle copper`);if(a&&(a.layer!==l.from_layer&&a.layer!==l.to_layer||Math.hypot(a.x-l.start.x,a.y-l.start.y)>0.00000001))throw Error(`PostProcessingSolver: immutable trace "${e.connection_name}" has discontinuous through-obstacle copper`);for(let A of d)n.push({start:l.start,end:l.end,layer:A,width:l.width,connectionName:e.connection_name,terminal:null});let u=a,h=u?.layer===l.to_layer?l.from_layer:l.to_layer;a={...l.end,layer:h,width:l.width}}return{segments:n,vias:o}},aL=(e)=>e.rootConnectionName??e.connectionName,GY=(e,t)=>e.flatMap((n,o)=>aL(n)===t?[o]:[]),OI=(e,t,n,o)=>{let i=(h,A,m)=>{let p=m.x-A.x,g=m.y-A.y,_=h.x-A.x,f=h.y-A.y,y=p**2+g**2,x=y===0?0:Math.max(0,Math.min(1,(_*p+f*g)/y));return Math.hypot(h.x-(A.x+x*p),h.y-(A.y+x*g))},r={x:t.x-e.x,y:t.y-e.y},s={x:o.x-n.x,y:o.y-n.y},a={x:n.x-e.x,y:n.y-e.y},c=(h,A)=>h.x*A.y-h.y*A.x,l=c(r,s),d=Math.hypot(r.x,r.y),u=0.000000000001*(d*Math.hypot(s.x,s.y)+1);if(Math.abs(l)>u){let h=c(a,s)/l,A=c(a,r)/l;if(h>=-0.000000000001&&h<=1.000000000001&&A>=-0.000000000001&&A<=1.000000000001)return 0}else if(d>0.000000000001&&Math.abs(c(a,r))<=u){let h=Math.abs(r.x)>=Math.abs(r.y),A=Math.min(h?e.x:e.y,h?t.x:t.y),m=Math.max(h?e.x:e.y,h?t.x:t.y),p=Math.min(h?n.x:n.y,h?o.x:o.y),g=Math.max(h?n.x:n.y,h?o.x:o.y);if(Math.max(A,p)<=Math.min(m,g)+0.000000000001)return 0}return Math.min(i(e,n,o),i(t,n,o),i(n,e,t),i(o,e,t))},FHe=(e,t)=>Math.hypot(t.x-e.x,t.y-e.y),y6=(e)=>{let t=0;for(let n=0;n<e.route.length-1;n++)t+=FHe(e.route[n],e.route[n+1]);return t},YY=(e,t)=>t.reduce((n,o)=>n+y6(e[o]),0),QU=(e,t)=>{let{__zLayers:n,zLayers:o}=e,i=n!==void 0?n:o;if(i!==void 0){if(!Array.isArray(i)||i.length===0||i.some((r)=>!Number.isInteger(r)||r<0||r>=t))throw Error("Obstacle has invalid z-layer indexes");return i}if(e.layers.length===0)throw Error("Obstacle has no declared layers");return e.layers.map((r)=>{if(r==="top")return 0;if(r==="bottom")return t-1;let s=/^inner(\d+)$/.exec(r),a=s?Number(s[1]):-1;if(a<=0||a>=t-1)throw Error(`Obstacle has invalid layer name "${r}"`);return a})},nV=(e)=>{let t=(a,c,l,d)=>{let u=l.center.x-l.width/2-d,h=l.center.x+l.width/2+d,A=l.center.y-l.height/2-d,m=l.center.y+l.height/2+d;if(a.x>=u&&a.x<=h&&a.y>=A&&a.y<=m||c.x>=u&&c.x<=h&&c.y>=A&&c.y<=m)return!0;let p=[{x:u,y:A},{x:h,y:A},{x:h,y:m},{x:u,y:m}];return p.some((g,_)=>OI(a,c,g,p[(_+1)%p.length])===0)};if(e.bounds&&e.meanderPoints.some((a)=>a.x<e.bounds.minX||a.x>e.bounds.maxX||a.y<e.bounds.minY||a.y>e.bounds.maxY))return!1;let n=(a,c,l)=>{let d=l.x-c.x,u=l.y-c.y,h=d*d+u*u,A=h===0?0:Math.max(0,Math.min(1,((a.x-c.x)*d+(a.y-c.y)*u)/h));return Math.hypot(a.x-(c.x+A*d),a.y-(c.y+A*u))},o=e.meanderPoints.some((a)=>!e.route.route.slice(1).some((c,l)=>{let d=e.route.route[l];return d.z===a.z&&c.z===a.z&&n(a,d,c)<=0.000000001})),i=(e.traces??[]).map((a)=>sne(a,e.layerCount)),r=aL(e.route),s=e.route.traceThickness/2+e.obstacleMargin;for(let a=0;a<e.meanderPoints.length-1;a++){let c=e.meanderPoints[a],l=e.meanderPoints[a+1],d=e.route.route.slice(1).some((h,A)=>{let m=e.route.route[A];return c.z===l.z&&m.z===c.z&&h.z===l.z&&n(c,m,h)<=0.000000001&&n(l,m,h)<=0.000000001});if(o&&d)continue;for(let h of e.obstacles){if(!QU(h,e.layerCount).includes(c.z))continue;let A=a===0||a===e.meanderPoints.length-2;if((!h.connectedTo.includes(r)||!A)&&t(c,l,h,s))return!1}let u=uS(c.z,e.layerCount);for(let{segments:h,vias:A}of i){for(let m of h)if(m.layer===u&&OI(c,l,m.start,m.end)<s+m.width/2)return!1;for(let m of A)if(m.layers.includes(u)&&n(m,c,l)<s+m.diameter/2)return!1}for(let h of e.routedRoutes){let A=aL(h)===r;for(let m of h.vias){if(m.zLayers&&!m.zLayers.includes(c.z))continue;let p=Math.hypot(m.x-c.x,m.y-c.y)<=0.00000001||Math.hypot(m.x-l.x,m.y-l.y)<=0.00000001,g=e.route.traceThickness/2+h.viaDiameter/2+e.obstacleMargin;if((!A||!p)&&n(m,c,l)<g)return!1}if(!A)for(let m=0;m<h.route.length-1;m++){let p=h.route[m],g=h.route[m+1];if(c.z!==p.z||c.z!==g.z)continue;let _=e.route.traceThickness/2+h.traceThickness/2+e.obstacleMargin;if(OI(c,l,p,g)<_)return!1}}}return!0},VMt=(e)=>{let t=[];for(let o of e.routeIndexes){let i=e.routes[o],r=e.minMeanderGap??Math.max(0.3,2*i.traceThickness),s=i.traceThickness+r,a=Math.max(e.minimumToothPitch??0,2*s),c=e.minMeanderHeight??s;for(let l=0;l<i.route.length-1;l++){let d=i.route[l],u=i.route[l+1],h=FHe(d,u);if(h<=0||d.z!==u.z)continue;let A=Math.min(Math.max(0,Math.floor(h/a)-1),e.maxToothCount);for(let m=1;m<=A;m++){let p=h/(m+1),g=[p,Math.sqrt(a*p),a].filter((f,y,x)=>x.findIndex((C)=>Math.abs(C-f)<0.000000001)===y),_=m%2==0?["balanced","negative","positive"]:["negative","positive"];for(let f of g)for(let y of _)t.push({routeIndex:o,segmentIndex:l,segmentLength:h,toothCount:m,maximumDepth:e.maximumDepth,minimumHeight:c,toothPitch:f,placement:y,heightProfile:m>1?"tapered":"uniform"})}}}let n={balanced:0,negative:1,positive:2};return t.sort((o,i)=>o.toothCount-i.toothCount||n[o.placement]-n[i.placement]||i.toothPitch-o.toothPitch||i.segmentLength-o.segmentLength)},eGo=(e)=>{if(e.centerlineDistanceCost===null)return 0;let t=e.predictedToothDepths.flatMap((_,f)=>_>0?[f]:[]);if(t.length===0)return 0;let n=t.map((_)=>e.predictedToothDepths[_]),o=Math.max(...n),i=n.reduce((_,f)=>_+f,0)/n.length,r=Math.sqrt(n.reduce((_,f)=>_+(f-i)**2,0)/n.length),s=t[0],a=(t.at(-1)-s+1)*e.toothPitch,c=o/(e.toothPitch/2),l=e.addedLength/a,d=c/(1+c)*40,u=l/(1+l)*30,h=e.predictedToothDepths.map((_,f)=>Math.sin(Math.PI*(f+1)/(e.predictedToothDepths.length+1))),A=Math.max(...h),m=Math.sqrt(e.predictedToothDepths.reduce((_,f,y)=>_+(f-o*h[y]/A)**2,0)/e.predictedToothDepths.length),p=100-d-u-Math.min(10,(e.heightProfile==="tapered"?m:r)/i*10)-2*(n.length-1)-7*Math.min(1,e.addedLength/e.segmentLength)-100*e.centerlineDistanceCost,g=e.centerlineDistanceCost>0?p:Math.max(0,p);return Math.round(1e6*g)/1e6},CV=(e)=>{if(e.toothDepths.length!==e.toothCount)throw Error(`LengthMatchingSolver: expected ${e.toothCount} tooth depths, received ${e.toothDepths.length}`);if(e.toothDepths.some((c)=>!Number.isFinite(c)||c<0))throw Error("LengthMatchingSolver: every meander tooth depth must be a non-negative finite number");let t=e.route.route[e.segmentIndex],n=e.route.route[e.segmentIndex+1],o=FHe(t,n),i=(n.x-t.x)/o,r=(n.y-t.y)/o,s=(o-(e.toothCount-0.5)*e.toothPitch)/2,a=[{...t}];for(let c=0;c<e.toothCount;c++){let l=e.toothDepths[c];if(l===0)continue;let d=e.placement==="balanced"?c%2==0?-1:1:e.placement==="negative"?-1:1,u={x:-r*d,y:i*d},h=s+c*e.toothPitch,A=h+e.toothPitch/2,m={...t,x:t.x+i*h,y:t.y+r*h};a.push(m,{...m,x:m.x+u.x*l,y:m.y+u.y*l},{...t,x:t.x+i*A+u.x*l,y:t.y+r*A+u.y*l},{...t,x:t.x+i*A,y:t.y+r*A})}return a.push({...n}),((c)=>{if(c.length<3)return c;let l=[{...c[0]}];for(let d=1;d<c.length-1;d++){let u=c[d-1],h=c[d],A=c[d+1],m=Math.hypot(h.x-u.x,h.y-u.y),p=Math.hypot(A.x-h.x,A.y-h.y);if(m===0||p===0)throw Error("LengthMatchingSolver: meander contains a zero-length segment");let g={x:(h.x-u.x)/m,y:(h.y-u.y)/m},_={x:(A.x-h.x)/p,y:(A.y-h.y)/p};if(Math.abs(g.x*_.y-g.y*_.x)<0.000000001){l.push({...h});continue}let f=Math.min(m,p)/2,y={...h,x:h.x-g.x*f,y:h.y-g.y*f},x={...h,x:h.x+_.x*f,y:h.y+_.y*f},C=l.at(-1);y.x===C.x&&y.y===C.y||l.push(y);for(let I=1;I<6;I++){let b=I/6,P=1-b;l.push({...h,x:P**2*y.x+2*P*b*h.x+b**2*x.x,y:P**2*y.y+2*P*b*h.y+b**2*x.y})}l.push(x)}return l.push({...c[c.length-1]}),l})(a)},oV=(e)=>[...e.route.route.slice(0,e.segmentIndex),...CV(e),...e.route.route.slice(e.segmentIndex+2)],Gee=(e)=>{let t=y6(e.route),n=(()=>{let H=[];for(let z=0;z<e.candidate.toothCount;z++){let Y=Array(e.candidate.toothCount).fill(0);Y[z]=e.candidate.maximumDepth;let U=CV({...e.candidate,route:e.route,toothDepths:Y});if(e.isGeometryValid(U)){H.push(e.candidate.maximumDepth);continue}let X=0,V=e.candidate.maximumDepth;for(let W=0;W<32;W++){let j=(X+V)/2,q=Array(e.candidate.toothCount).fill(0);q[z]=j;let ne=CV({...e.candidate,route:e.route,toothDepths:q});e.isGeometryValid(ne)?X=j:V=j}H.push(X)}return H})(),o=((H)=>{if(H.heightProfile!=="tapered")return Array(H.toothCount).fill(1);let z=Array.from({length:H.toothCount},(U,X)=>Math.sin(Math.PI*(X+1)/(H.toothCount+1))),Y=Math.max(...z);return z.map((U)=>U/Y)})(e.candidate),i=e.candidate.maximumDepth,r=n.map((H,z)=>Math.min(H,i*o[z])),s=[0.25,0.75],a=r.map((H)=>H*s[0]),c=r.map((H)=>H*s[1]),l=oV({...e.candidate,route:e.route,toothDepths:a}),d=oV({...e.candidate,route:e.route,toothDepths:c}),u=[y6({...e.route,route:l})-t,y6({...e.route,route:d})-t],h=oV({...e.candidate,route:e.route,toothDepths:r}),A=y6({...e.route,route:h})-t,m=(u[1]-u[0])/(s[1]-s[0]),p=u[0]-m*s[0],g=m>0&&Number.isFinite(m)?(e.targetAddedLength-p)/m:0,_=Math.min(e.targetAddedLength,A),f=e.targetAddedLength>0&&_>0?((H)=>{let z=0,Y=e.candidate.maximumDepth;for(let X=0;X<32;X++){let V=(z+Y)/2,W=H.maximumToothDepths.map((ce,oe)=>Math.min(ce,V*H.toothHeightWeights[oe])),j=oV({...e.candidate,route:e.route,toothDepths:W}),q=y6({...e.route,route:j})-H.originalLength,ne=CV({...e.candidate,route:e.route,toothDepths:W});e.isGeometryValid(ne)?q<H.targetAddedLength?z=V:Y=V:Y=V}let U=(z+Y)/2;return{depthLevel:U,toothDepths:H.maximumToothDepths.map((X,V)=>Math.min(X,U*H.toothHeightWeights[V]))}})({maximumToothDepths:n,toothHeightWeights:o,originalLength:t,targetAddedLength:_}):{depthLevel:g*i,toothDepths:r.map((H)=>Math.max(0,H*g))},y=f.depthLevel/i,x=f.toothDepths,C=oV({...e.candidate,route:e.route,toothDepths:x}),I=y6({...e.route,route:C})-t,b=Math.abs(_-I),P=CV({...e.candidate,route:e.route,toothDepths:x}),E=0;if(e.getCenterlineDistanceCost&&(E=e.getCenterlineDistanceCost(P)),E!==null&&(!Number.isFinite(E)||E<0))throw Error("LengthMatchingSolver: meander centerline distance cost must be a non-negative finite number");let B=Number.isFinite(y)&&y>0&&y<=1,w=x.every((H)=>H===0||H>=e.candidate.minimumHeight),T=e.isGeometryValid(P),Q,N=null;E===null?N="no-paired-same-layer-geometry":B?b>e.lengthTolerance?N="target-error":T?w||(N="below-minimum-height"):N="invalid-geometry":N="invalid-scale",Q=N?{valid:!1,invalidReason:N}:{valid:!0,invalidReason:null};let F={...e.candidate,connectionName:e.connectionName,maximumToothDepths:n,sampleScaleFactors:s,sampleAddedLengths:u,slope:m,intercept:p,predictedScaleFactor:y,predictedToothDepths:x,predictedRoute:C,addedLength:I,maximumAddedLength:A,resultingError:b,testedSegment:[{...e.route.route[e.candidate.segmentIndex]},{...e.route.route[e.candidate.segmentIndex+1]}],meanderPoints:P,centerlineDistanceCost:E,qualityScore:0,...Q};return{...F,qualityScore:eGo(F)}},tGo=(e)=>{let t=((l)=>{if(l.heightProfile!=="tapered")return Array(l.toothCount).fill(1);let d=Array.from({length:l.toothCount},(h,A)=>Math.sin(Math.PI*(A+1)/(l.toothCount+1))),u=Math.max(...d);return d.map((h)=>h/u)})(e.candidate),n=Math.max(...t.map((l)=>e.candidate.minimumHeight/l)),o=e.candidate.maximumDepth/1073741824,i=t.map((l)=>l*(n+o));if(i.some((l)=>l>e.candidate.maximumDepth))return null;let r=CV({...e.candidate,route:e.route,toothDepths:i});if(!e.isGeometryValid(r))return null;let s=oV({...e.candidate,route:e.route,toothDepths:i}),a=y6({...e.route,route:s})-y6(e.route),c=Gee({...e,targetAddedLength:a});return c.valid?c:null},UMt=(e)=>{let t=(c,l)=>{let d=c[l.routeIndex];if(!d)throw Error(`LengthMatchingSolver: dual meander references missing route ${l.routeIndex}`);let u=[...c];return u[l.routeIndex]={...d,route:l.predictedRoute},u},n=(()=>{if(e.targetAddedLength+e.config.lengthTolerance<e.plan.minimumAddedLength||e.targetAddedLength-e.config.lengthTolerance>e.plan.maximumAddedLength)return null;let c=e.plan.attemptOptions.map((u)=>Math.min(...u.map((h)=>h.attempt.addedLength))),l=Math.max(0,e.targetAddedLength-e.plan.minimumAddedLength),d=c.map((u,h)=>h);for(;l>0.000000001&&d.length>0;){let u=l/d.length,h=0,A=[];for(let m of d){let p=Math.max(...e.plan.attemptOptions[m].map((_)=>_.attempt.maximumAddedLength))-c[m],g=Math.min(p,u);c[m]+=g,h+=g,p-g>0.000000001&&A.push(m)}if(h<=0.000000001)break;l-=h,d=A}return l<=e.config.lengthTolerance?c:null})();if(!n)return null;let o=e.plan.attemptOptions.map((c,l)=>({attemptOptions:c,targetAddedLength:n[l]})).sort((c,l)=>l.attemptOptions[0].candidate.routeIndex-c.attemptOptions[0].candidate.routeIndex||l.attemptOptions[0].candidate.segmentIndex-c.attemptOptions[0].candidate.segmentIndex),i=[...e.routes],r=[];for(let c of o){let l=c.attemptOptions[0]?.candidate;if(!l)throw Error("LengthMatchingSolver: empty dual-meander segment options");let d=i[l.routeIndex];if(!d)throw Error(`LengthMatchingSolver: missing planned dual-meander route ${l.routeIndex}`);let u=null;for(let h of c.attemptOptions){if(h.attempt.addedLength-e.config.lengthTolerance>c.targetAddedLength||h.attempt.maximumAddedLength+e.config.lengthTolerance<c.targetAddedLength)continue;let A=Gee({candidate:h.candidate,route:d,connectionName:e.connectionName,targetAddedLength:c.targetAddedLength,lengthTolerance:e.config.lengthTolerance,isGeometryValid:(m)=>nV({route:d,meanderPoints:m,routedRoutes:e.excludedConnectionName?i.filter((p)=>aL(p)!==e.excludedConnectionName):i,...e.config})});A.valid&&(!u||A.qualityScore>u.qualityScore)&&(u=A)}if(!u)return null;i=t(i,u),r.push(u)}let s=r.reduce((c,l)=>c+l.addedLength,0);if(Math.abs(s-e.targetAddedLength)>e.config.lengthTolerance)return null;let a=r[0];if(!a)throw Error("LengthMatchingSolver: fitted an empty dual-meander plan");return{attempts:[a,...r.slice(1)],routes:i,addedLength:s}},B_e=(e)=>{if(e.length===0)throw Error("LengthMatchingSolver: cannot score an empty meander plan");return e.reduce((t,n)=>t+n.qualityScore,0)/e.length-3*(e.length-1)},WMt=(e)=>{let t=(i)=>[i.candidate.toothCount,i.candidate.placement,i.candidate.heightProfile].join(":"),n=new Map;for(let i of e){let r=t(i),s=`${i.candidate.routeIndex}:${i.candidate.segmentIndex}`,a=n.get(r);if(!a){n.set(r,new Map([[s,[i]]]));continue}let c=a.get(s);c?c.push(i):a.set(s,[i])}let o=[];for(let i of n.values()){let r=[...i.values()].map((s)=>({attempts:s,maximumAddedLength:Math.max(...s.map((a)=>a.attempt.maximumAddedLength)),minimumAddedLength:Math.min(...s.map((a)=>a.attempt.addedLength)),rankingAttempt:s.reduce((a,c)=>c.attempt.qualityScore>a.attempt.qualityScore?c:a)})).sort((s,a)=>a.maximumAddedLength-s.maximumAddedLength);for(let s of r)o.push({attempts:[s.rankingAttempt],attemptOptions:[s.attempts],minimumAddedLength:s.minimumAddedLength,maximumAddedLength:s.maximumAddedLength,rankingQualityScore:s.rankingAttempt.attempt.qualityScore});for(let s=2;s<=r.length;s++){let a=r.slice(0,s),c=a.map((l)=>l.rankingAttempt);o.push({attempts:c,attemptOptions:a.map((l)=>l.attempts),minimumAddedLength:a.reduce((l,d)=>l+d.minimumAddedLength,0),maximumAddedLength:a.reduce((l,d)=>l+d.maximumAddedLength,0),rankingQualityScore:B_e(c.map((l)=>l.attempt))})}}return o},w_e=class extends Error{connectionName;reason;constructor(e){super(e.message),this.name="LengthMatchingNoSolutionError",this.connectionName=e.connectionName,this.reason=e.reason}},Ak=(e)=>[e.routeIndex,e.segmentIndex,e.toothCount,e.placement,e.toothPitch,e.heightProfile,e.maximumDepth,e.minimumHeight].join(":"),XMt=(e)=>{let t=new Map,n=[...e.attempts].sort((i,r)=>i.addedLength-r.addedLength),o=e.targetAddedLength;for(let i=0;i<n.length;i++){let r=n[i],s=Math.min(r.addedLength,o/(n.length-i));t.set(Ak(r),{routeIndex:r.routeIndex,segmentIndex:r.segmentIndex,targetAddedLength:s}),o-=s}return t},nGo=(e,t)=>`z${QU(e,t).join(",")}`,_k=(e)=>`z${e}`,oGo=(e)=>{if(!e.showAttempt)return;if(!e.attempt)return void((r)=>{let s=r.activePair?.candidates[r.activePair.candidateIndex];if(!s)return;let a=r.routes[s.routeIndex];if(!a)return;let c=a.route[s.segmentIndex],l=a.route[s.segmentIndex+1];c&&l&&r.graphics.lines.push({points:[c,l],strokeColor:"rgba(234, 179, 8, 0.6)",strokeWidth:2*a.traceThickness,strokeDash:[0.1,0.1],layer:_k(c.z)})})(e);let t=e.routes[e.attempt.routeIndex],[n,o]=e.attempt.testedSegment,i=e.theme.getConnectionColor(e.attempt.connectionName);e.graphics.lines.push({points:[n,o],strokeColor:e.theme.getTestedSegmentColor(i),strokeWidth:t.traceThickness,strokeDash:[0.15,0.15],layer:_k(n.z)}),e.attempt.valid?e.graphics.lines.push({points:e.attempt.meanderPoints.map(({x:r,y:s})=>({x:r,y:s})),strokeColor:"rgba(234, 179, 8, 0.6)",strokeWidth:2*t.traceThickness,strokeDash:[0.1,0.1],layer:_k(n.z)}):e.graphics.lines.push({points:e.attempt.meanderPoints.map(({x:r,y:s})=>({x:r,y:s})),strokeColor:e.theme.getRejectedCandidateColor(i),strokeWidth:t.traceThickness,strokeDash:[0.1,0.1],layer:_k(n.z)}),e.graphics.points.push({x:n.x,y:n.y,color:i,layer:_k(n.z)},{x:o.x,y:o.y,color:i,layer:_k(o.z)})},iGo=(e)=>{let t={lines:[],points:[],rects:[],circles:[]},n=((o)=>{for(let i of Object.values(o))rV(0,i);return{getConnectionColor:(i,r)=>o[i]??(r?o[r]:void 0)??((s)=>s?`hsl(${300*s.split("").reduce((a,c)=>a+c.charCodeAt(0),0)/s.length%360}, 100%, 50%)`:"rgba(0, 0, 0, 0.5)")(i),getInnerLayerConnectionColor:(i)=>rV(0.5,i),getTestedSegmentColor:(i)=>rV(0.55,i),getRejectedCandidateColor:(i)=>rV(0.45,i),boardBounds:{fill:"rgba(30,41,59,0.03)",stroke:"rgba(30,41,59,0.55)"},obstacle:{fill:"rgba(255,0,0,0.25)",stroke:"rgba(255,0,0,0.5)"},via:{fill:"blue",stroke:"none"}}})(e.colorMap);return((o)=>{for(let i of o.routes){let r=aL(i),s=o.theme.getConnectionColor(r,i.connectionName);for(let c=0;c<i.route.length-1;c++){let l=i.route[c],d=i.route[c+1];l.z===d.z&&o.graphics.lines.push({points:[l,d],strokeColor:l.z===0?s:o.theme.getInnerLayerConnectionColor(s),strokeWidth:i.traceThickness,...l.z===0?{}:{strokeDash:[0.2,0.2]},layer:_k(l.z)})}let a=[...new Set(i.route.map((c)=>c.z))];for(let c of i.vias)o.graphics.circles.push({center:c,radius:i.viaDiameter/2,fill:o.theme.via.fill,stroke:o.theme.via.stroke,layer:`z${(c.zLayers??a).join(",")}`})}})({routes:e.routes,theme:n,graphics:t}),((o)=>{if(o.bounds){let{minX:i,maxX:r,minY:s,maxY:a}=o.bounds;o.graphics.rects.push({center:{x:(i+r)/2,y:(s+a)/2},width:r-i,height:a-s,fill:o.theme.boardBounds.fill,stroke:o.theme.boardBounds.stroke,layer:`z${Array.from({length:o.layerCount},(c,l)=>l).join(",")}`})}for(let i of o.obstacles)o.graphics.rects.push({center:i.center,width:i.width,height:i.height,ccwRotationDegrees:i.ccwRotationDegrees,fill:o.theme.obstacle.fill,stroke:o.theme.obstacle.stroke,layer:nGo(i,o.layerCount)})})({obstacles:e.obstacles,bounds:e.bounds,layerCount:e.layerCount,theme:n,graphics:t}),oGo({routes:e.routes,attempt:e.currentAttempt,activePair:e.activePair,showAttempt:!e.solved,theme:n,graphics:t}),{...t}},RGt=class extends Js{constructor(e){super(),this.params=e,this.MAX_ITERATIONS=1e5,this.matchedHdRoutes=e.hdRoutes.map((t)=>({...t,route:t.route.map((n)=>({...n}))})),this.pairs=e.differentialPairs??[]}params;matchedHdRoutes;pairs;nextPairIndex=0;activePair=null;currentAttempt=null;config=null;candidatesTried=0;getSolverName(){return"LengthMatchingSolver"}startNextPair(){let e=this.pairs[this.nextPairIndex++];if(!e)return void(this.solved=!0);((d,u)=>{if(d.connectionNames[0]===d.connectionNames[1])throw Error("LengthMatchingSolver: a differential pair must reference two distinct connections");if(!Number.isFinite(d.lengthTolerance)||d.lengthTolerance<0)throw Error("LengthMatchingSolver: differential pair lengthTolerance must be a non-negative finite number");for(let A of[d.minimumCenterlineDistance,d.maximumCenterlineDistance])if(A!==void 0&&(!Number.isFinite(A)||A<=0))throw Error("LengthMatchingSolver: differential pair centerline distances must be positive finite numbers");if(d.minimumCenterlineDistance!==void 0&&d.maximumCenterlineDistance!==void 0&&d.minimumCenterlineDistance>d.maximumCenterlineDistance)throw Error("LengthMatchingSolver: differential pair minimumCenterlineDistance cannot exceed maximumCenterlineDistance");let h=new Map(u.map((A)=>[A.name,A]));for(let A of d.connectionNames){let m=h.get(A);if(!m)throw Error(`LengthMatchingSolver: differential pair references unknown connection "${A}"`);if(m.pointsToConnect.length!==2)throw Error(`LengthMatchingSolver: differential pair connection "${A}" must have exactly two points before MST splitting`)}})(e,this.params.originalConnections);let t=GY(this.matchedHdRoutes,e.connectionNames[0]),n=GY(this.matchedHdRoutes,e.connectionNames[1]);if(t.length===0&&n.length===0)return;if(t.length===0||n.length===0)throw Error(`LengthMatchingSolver: differential pair ${e.connectionNames.join("/")} has routed geometry for only one connection`);let o=YY(this.matchedHdRoutes,t),i=YY(this.matchedHdRoutes,n),r=Math.abs(o-i);if(r<=e.lengthTolerance)return;let s=o<i,a=e.connectionNames[s?0:1],c=e.connectionNames[s?1:0],l=VMt({routes:this.matchedHdRoutes,routeIndexes:s?t:n,maximumDepth:this.getConfig().maximumMeanderDepth,minimumToothPitch:this.getConfig().minimumToothPitch,minMeanderGap:this.getConfig().minMeanderGap,minMeanderHeight:this.getConfig().minMeanderHeight,maxToothCount:this.getConfig().maxToothCount});if(l.length===0)throw new w_e({message:`LengthMatchingSolver: no same-layer straight segment can tune connection "${a}"`,connectionName:a,reason:"no-meander-candidate"});this.activePair={pair:e,longerConnectionName:c,longerRouteIndexes:s?n:t,shorterConnectionName:a,targetAddedLength:r,remainingAddedLength:r,candidates:l,candidateIndex:0,lastMatchedSegmentIndexByRoute:new Map,partialAttempts:[],fullAttempts:[],plannedAttemptTargets:null,hasMinimumHeightBlockedAttempt:!1}}acceptAttempt(e,t){let n=this.matchedHdRoutes[t.routeIndex];this.matchedHdRoutes[t.routeIndex]={...n,route:t.predictedRoute},e.remainingAddedLength-=t.addedLength,e.lastMatchedSegmentIndexByRoute.set(t.routeIndex,t.segmentIndex),e.candidateIndex=0,e.partialAttempts=[],e.fullAttempts=[],e.plannedAttemptTargets?.delete(Ak(t)),e.plannedAttemptTargets?.size===0&&(e.plannedAttemptTargets=null),e.remainingAddedLength<=e.pair.lengthTolerance&&(this.activePair=null)}tryCandidate(e){let t;for(;!t;){let r=e.candidates[e.candidateIndex++];if(!r)break;let s=e.lastMatchedSegmentIndexByRoute.get(r.routeIndex);(s===void 0||r.segmentIndex<s)&&(!e.plannedAttemptTargets||e.plannedAttemptTargets.has(Ak(r))&&![...e.plannedAttemptTargets.values()].some((a)=>a.routeIndex===r.routeIndex&&a.segmentIndex>r.segmentIndex))&&(t=r)}if(!t){let r=e.fullAttempts.reduce((a,c)=>!a||c.qualityScore>a.qualityScore?c:a,null),s=((a)=>{let c=(u)=>[u.toothCount,u.placement,u.heightProfile].join(":"),l=new Map;for(let u of a.attempts){let h=`${u.routeIndex}:${u.segmentIndex}`,A=c(u),m=l.get(A);if(!m){l.set(A,new Map([[h,[u]]]));continue}let p=m.get(h);p?p.push(u):m.set(h,[u])}let d=null;for(let u of l.values()){let h=[...u.values()].map((m)=>({attempts:m,maximumCapacityAttempt:m.reduce((p,g)=>g.addedLength>p.addedLength?g:p)})).sort((m,p)=>p.maximumCapacityAttempt.addedLength-m.maximumCapacityAttempt.addedLength),A=0;for(let m=0;m<h.length;m++){if(A+=h[m].maximumCapacityAttempt.addedLength,A+a.lengthTolerance<a.targetAddedLength)continue;let p=h.slice(0,m+1),g=p.map((C)=>C.maximumCapacityAttempt),_=XMt({attempts:g,targetAddedLength:a.targetAddedLength}),f=p.map((C)=>{let I=_.get(Ak(C.maximumCapacityAttempt));if(!I)throw Error(`LengthMatchingSolver: missing capacity target for ${Ak(C.maximumCapacityAttempt)}`);let b=C.attempts.filter((P)=>P.addedLength+a.lengthTolerance>=I.targetAddedLength);if(b.length===0)throw Error(`LengthMatchingSolver: no pitch can supply planned target for route ${C.maximumCapacityAttempt.routeIndex} segment ${C.maximumCapacityAttempt.segmentIndex}`);return b.reduce((P,E)=>E.qualityScore>P.qualityScore||E.qualityScore===P.qualityScore&&E.toothPitch>P.toothPitch?E:P)}),y=B_e(f);if(!d){d={attempts:f};break}let x=B_e(d.attempts);(f.length<d.attempts.length||f.length===d.attempts.length&&y>x)&&(d={attempts:f});break}}return d})({attempts:e.partialAttempts,targetAddedLength:e.remainingAddedLength,lengthTolerance:e.pair.lengthTolerance});if(r&&(!s||r.qualityScore>=B_e(s.attempts)))return void this.acceptAttempt(e,r);if(!s){if(!(e.hasMinimumHeightBlockedAttempt&&e.plannedAttemptTargets===null&&e.lastMatchedSegmentIndexByRoute.size===0))throw new w_e({message:`LengthMatchingSolver: linear regression exhausted all segment/tooth combinations for "${e.shorterConnectionName}"; required ${e.targetAddedLength.toFixed(4)}mm`,connectionName:e.shorterConnectionName,reason:"meander-search-exhausted"});return this.tryDualMeanderPlan(e)}return e.plannedAttemptTargets=XMt({attempts:s.attempts,targetAddedLength:e.remainingAddedLength}),e.candidateIndex=0,e.partialAttempts=[],void(e.fullAttempts=[])}let n=this.matchedHdRoutes[t.routeIndex],o=this.getConfig(),i=e.plannedAttemptTargets?.get(Ak(t));if(e.plannedAttemptTargets!==null&&i===void 0)throw Error(`LengthMatchingSolver: missing planned target for ${Ak(t)}`);this.currentAttempt=Gee({candidate:t,route:n,connectionName:e.shorterConnectionName,targetAddedLength:i===void 0?e.remainingAddedLength:i.targetAddedLength,lengthTolerance:e.pair.lengthTolerance,isGeometryValid:(r)=>nV({route:n,meanderPoints:r,routedRoutes:this.matchedHdRoutes,traces:o.traces,obstacles:o.obstacles,bounds:o.bounds,layerCount:o.layerCount,obstacleMargin:o.obstacleMargin}),getCenterlineDistanceCost:e.pair.minimumCenterlineDistance===void 0&&e.pair.maximumCenterlineDistance===void 0?void 0:(r)=>((s)=>{let a=0,c=0;for(let l=0;l<s.meanderPoints.length-1;l++){let d=s.meanderPoints[l],u=s.meanderPoints[l+1],h=Math.hypot(u.x-d.x,u.y-d.y);if(h!==0){for(let A=0;A<4;A++){let m=(A+0.5)/4,p={x:d.x+(u.x-d.x)*m,y:d.y+(u.y-d.y)*m},g=[];for(let f of s.pairedRoutes)for(let y=0;y<f.route.length-1;y++){let x=f.route[y],C=f.route[y+1];d.z===x.z&&d.z===C.z&&g.push(OI(p,p,x,C))}if(g.length===0)return null;let _=Math.min(...g);c+=h*Math.max(0,(s.minimumCenterlineDistance??Number.NEGATIVE_INFINITY)-_,_-(s.maximumCenterlineDistance??Number.POSITIVE_INFINITY))/4}a+=h}}if(a===0)throw Error("LengthMatchingSolver: cannot measure a zero-length meander centerline");return c/a})({meanderPoints:r,pairedRoutes:e.longerRouteIndexes.map((s)=>this.matchedHdRoutes[s]),minimumCenterlineDistance:e.pair.minimumCenterlineDistance,maximumCenterlineDistance:e.pair.maximumCenterlineDistance})}),this.candidatesTried++,this.currentAttempt.invalidReason==="below-minimum-height"&&(e.hasMinimumHeightBlockedAttempt=!0),this.stats={pair:`${e.pair.connectionNames[0]}/${e.pair.connectionNames[1]}`,candidatesTried:this.candidatesTried,segmentIndex:t.segmentIndex,toothCount:t.toothCount,toothPitch:t.toothPitch,placement:t.placement,predictedScaleFactor:this.currentAttempt.predictedScaleFactor,predictedToothDepths:this.currentAttempt.predictedToothDepths,resultingError:this.currentAttempt.resultingError,qualityScore:this.currentAttempt.qualityScore,accepted:this.currentAttempt.valid},this.currentAttempt.valid&&(e.plannedAttemptTargets===null?e.remainingAddedLength-this.currentAttempt.addedLength<=e.pair.lengthTolerance?e.fullAttempts.push(this.currentAttempt):e.partialAttempts.push(this.currentAttempt):this.acceptAttempt(e,this.currentAttempt))}tryDualMeanderPlan(e){if(e.remainingAddedLength!==e.targetAddedLength)throw Error(`LengthMatchingSolver: cannot start a dual-meander plan after partially tuning "${e.shorterConnectionName}"`);let t=this.getConfig(),n=VMt({routes:this.matchedHdRoutes,routeIndexes:e.longerRouteIndexes,maximumDepth:t.maximumMeanderDepth,minimumToothPitch:t.minimumToothPitch,minMeanderGap:t.minMeanderGap,minMeanderHeight:t.minMeanderHeight,maxToothCount:t.maxToothCount}),o=((a)=>{let c=(x,C)=>x.rankingQualityScore!==C.rankingQualityScore?x.rankingQualityScore>C.rankingQualityScore:x.leftIndex!==C.leftIndex?x.leftIndex<C.leftIndex:x.rightIndex<C.rightIndex,l=(x,C)=>{x.push(C);let I=x.length-1;for(;I>0;){let b=Math.floor((I-1)/2),P=x[b];if(c(P,C))break;x[I]=P,I=b}x[I]=C},d=(x)=>{let C=x[0],I=x.pop();if(!C||!I||x.length===0)return C;let b=0;for(;;){let P=2*b+1,E=P+1;if(P>=x.length)break;let B=E<x.length&&c(x[E],x[P])?E:P,w=x[B];if(c(I,w))break;x[b]=w,b=B}return x[b]=I,C},u=function*(x){let C=[...x.leftOptions].sort((P,E)=>x.getLeftQualityScore(E)-x.getLeftQualityScore(P)),I=[...x.rightOptions].sort((P,E)=>x.getRightQualityScore(E)-x.getRightQualityScore(P)),b=[];for(let P=0;P<C.length;P++){let E=I[0];if(!E)break;l(b,{leftIndex:P,rightIndex:0,rankingQualityScore:(x.getLeftQualityScore(C[P])+x.getRightQualityScore(E))/2})}for(;b.length>0;){let P=d(b);yield[C[P.leftIndex],I[P.rightIndex]];let E=P.rightIndex+1,B=I[E];B&&l(b,{leftIndex:P.leftIndex,rightIndex:E,rankingQualityScore:(x.getLeftQualityScore(C[P.leftIndex])+x.getRightQualityScore(B))/2})}},h=(x,C)=>{let I=x[C.routeIndex];if(!I)throw Error(`LengthMatchingSolver: dual meander references missing route ${C.routeIndex}`);let b=[...x];return b[C.routeIndex]={...I,route:C.predictedRoute},b},A=(x)=>{let C=x.routes[x.attempt.routeIndex];if(!C)throw Error(`LengthMatchingSolver: cannot validate missing dual-meander route ${x.attempt.routeIndex}`);return nV({route:C,meanderPoints:x.attempt.meanderPoints,routedRoutes:x.routes,...x.config})},m=(x)=>{let C=x.routes.filter((b)=>aL(b)!==x.counterpartConnectionName),I=[];for(let b of x.candidates){let P=x.routes[b.routeIndex];if(!P)throw Error(`LengthMatchingSolver: dual-meander candidate references missing route ${b.routeIndex}`);let E=tGo({candidate:b,route:P,connectionName:x.connectionName,lengthTolerance:x.config.lengthTolerance,isGeometryValid:(B)=>nV({route:P,meanderPoints:B,routedRoutes:C,...x.config})});E&&I.push({candidate:b,attempt:E})}return I},p={traces:a.traces,obstacles:a.obstacles,bounds:a.bounds,layerCount:a.layerCount,obstacleMargin:a.obstacleMargin},g=m({candidates:a.shorterCandidates,routes:a.routes,connectionName:a.shorterConnectionName,counterpartConnectionName:a.longerConnectionName,config:{...p,lengthTolerance:a.lengthTolerance}});if(g.length===0)return null;let _=m({candidates:a.longerCandidates,routes:a.routes,connectionName:a.longerConnectionName,counterpartConnectionName:a.shorterConnectionName,config:{...p,lengthTolerance:a.lengthTolerance}}),f=u({leftOptions:_,rightOptions:g,getLeftQualityScore:(x)=>x.attempt.qualityScore,getRightQualityScore:(x)=>x.attempt.qualityScore});for(let[x,C]of f){let I=Math.max(x.attempt.addedLength,C.attempt.addedLength-a.originalLengthDifference),b=I+a.originalLengthDifference;if(I-a.lengthTolerance>x.attempt.maximumAddedLength||b-a.lengthTolerance>C.attempt.maximumAddedLength)continue;let P=a.routes[x.candidate.routeIndex];if(!P)throw Error(`LengthMatchingSolver: missing longer route ${x.candidate.routeIndex}`);let E=a.routes[C.candidate.routeIndex];if(!E)throw Error(`LengthMatchingSolver: missing shorter route ${C.candidate.routeIndex}`);let B=a.routes.filter((Y)=>aL(Y)!==a.shorterConnectionName),w=Gee({candidate:x.candidate,route:P,connectionName:a.longerConnectionName,targetAddedLength:I,lengthTolerance:a.lengthTolerance,isGeometryValid:(Y)=>nV({route:P,meanderPoints:Y,routedRoutes:B,...p})});if(!w.valid||Math.abs(w.addedLength-I)>a.lengthTolerance)continue;let T=h(a.routes,w),Q=w.addedLength+a.originalLengthDifference,N=Gee({candidate:C.candidate,route:E,connectionName:a.shorterConnectionName,targetAddedLength:Q,lengthTolerance:a.lengthTolerance,isGeometryValid:(Y)=>nV({route:E,meanderPoints:Y,routedRoutes:T,...p})});if(!N.valid)continue;let F=h(T,N),H=GY(F,a.longerConnectionName),z=GY(F,a.shorterConnectionName);if(!(Math.abs(YY(F,z)-YY(F,H))>a.lengthTolerance)&&A({attempt:w,routes:F,config:p})&&A({attempt:N,routes:F,config:p}))return{longerAttempts:[w],shorterAttempts:[N]}}let y=u({leftOptions:WMt(_),rightOptions:WMt(g),getLeftQualityScore:(x)=>x.rankingQualityScore,getRightQualityScore:(x)=>x.rankingQualityScore});for(let[x,C]of y){if(x.attempts.length===1&&C.attempts.length===1)continue;let I=Math.max(x.minimumAddedLength,C.minimumAddedLength-a.originalLengthDifference),b=I+a.originalLengthDifference;if(I-a.lengthTolerance>x.maximumAddedLength||b-a.lengthTolerance>C.maximumAddedLength)continue;let P=UMt({plan:x,targetAddedLength:I,routes:a.routes,connectionName:a.longerConnectionName,excludedConnectionName:a.shorterConnectionName,config:{...p,lengthTolerance:a.lengthTolerance}});if(!P)continue;let E=UMt({plan:C,targetAddedLength:P.addedLength+a.originalLengthDifference,routes:P.routes,connectionName:a.shorterConnectionName,config:{...p,lengthTolerance:a.lengthTolerance}});if(!E)continue;let B=GY(E.routes,a.longerConnectionName),w=GY(E.routes,a.shorterConnectionName),T=Math.abs(YY(E.routes,w)-YY(E.routes,B)),Q=[...P.attempts,...E.attempts];if(!(T>a.lengthTolerance||Q.some((N)=>!A({attempt:N,routes:E.routes,config:p}))))return{longerAttempts:P.attempts,shorterAttempts:E.attempts}}return null})({routes:this.matchedHdRoutes,longerConnectionName:e.longerConnectionName,shorterConnectionName:e.shorterConnectionName,originalLengthDifference:e.targetAddedLength,lengthTolerance:e.pair.lengthTolerance,longerCandidates:n,shorterCandidates:e.candidates,traces:t.traces,obstacles:t.obstacles,bounds:t.bounds,layerCount:t.layerCount,obstacleMargin:t.obstacleMargin});if(!o)throw new w_e({message:`LengthMatchingSolver: linear regression exhausted all segment/tooth combinations for "${e.shorterConnectionName}"; required ${e.targetAddedLength.toFixed(4)}mm`,connectionName:e.shorterConnectionName,reason:"meander-search-exhausted"});let i=[...this.matchedHdRoutes];for(let a of[...o.longerAttempts,...o.shorterAttempts]){let c=this.matchedHdRoutes[a.routeIndex];if(!c)throw Error(`LengthMatchingSolver: cannot commit dual meander to missing route ${a.routeIndex}`);i[a.routeIndex]={...c,route:a.predictedRoute}}this.matchedHdRoutes=i,this.currentAttempt=o.shorterAttempts[0];let r=o.longerAttempts.reduce((a,c)=>a+c.addedLength,0),s=o.shorterAttempts.reduce((a,c)=>a+c.addedLength,0);this.stats={pair:`${e.pair.connectionNames[0]}/${e.pair.connectionNames[1]}`,mode:"dual-meander",longerAddedLength:r,shorterAddedLength:s,resultingError:Math.abs(s-r-e.targetAddedLength)},this.activePair=null}getConfig(){return this.config||(this.config=((e)=>{let t=e.maximumMeanderDepth??5,n=e.maxToothCount??12;if(!Number.isFinite(t)||t<=0)throw Error("LengthMatchingSolver: maximumMeanderDepth must be a positive finite number");if(e.minimumToothPitch!==void 0&&(!Number.isFinite(e.minimumToothPitch)||e.minimumToothPitch<=0))throw Error("LengthMatchingSolver: minimumToothPitch must be a positive finite number");if(e.minMeanderGap!==void 0&&(!Number.isFinite(e.minMeanderGap)||e.minMeanderGap<=0))throw Error("LengthMatchingSolver: minMeanderGap must be a positive finite number");if(e.minMeanderHeight!==void 0&&(!Number.isFinite(e.minMeanderHeight)||e.minMeanderHeight<=0))throw Error("LengthMatchingSolver: minMeanderHeight must be a positive finite number");if(e.minMeanderHeight!==void 0&&e.minMeanderHeight>t)throw Error("LengthMatchingSolver: minMeanderHeight cannot exceed maximumMeanderDepth");if(!Number.isFinite(n)||!Number.isInteger(n)||n<=0)throw Error("LengthMatchingSolver: maxToothCount must be a positive finite integer");for(let o of e.traces??[])sne(o,e.layerCount??2);return{maximumMeanderDepth:t,minimumToothPitch:e.minimumToothPitch,minMeanderGap:e.minMeanderGap,minMeanderHeight:e.minMeanderHeight,maxToothCount:n,traces:e.traces??[],obstacles:e.obstacles??[],bounds:e.bounds,obstacleMargin:e.obstacleMargin??0.15,layerCount:e.layerCount??2,colorMap:e.colorMap??{}}})(this.params)),this.config}_step(){this.getConfig(),this.activePair?this.tryCandidate(this.activePair):this.startNextPair()}getConstructorParams(){return[this.params]}getOutput(){if(!this.solved)throw Error("LengthMatchingSolver: getOutput() called before the solver completed");return{matchedHdRoutes:this.matchedHdRoutes}}getBestEffortOutput(){let e=structuredClone(this.matchedHdRoutes),t=this.activePair?.fullAttempts??[],n=null;for(let o of t)(!n||o.qualityScore>n.qualityScore)&&(n=o);if(!n)for(let o of this.activePair?.partialAttempts??[])(!n||o.addedLength>n.addedLength||o.addedLength===n.addedLength&&o.qualityScore>n.qualityScore)&&(n=o);if(n){let o=e[n.routeIndex];o&&(e[n.routeIndex]={...o,route:structuredClone(n.predictedRoute)})}return{matchedHdRoutes:e}}computeProgress(){if(this.solved)return 1;if(this.pairs.length===0)return this.config?1:0;let e=Math.max(0,this.nextPairIndex-1),t=this.activePair?this.activePair.candidateIndex/this.activePair.candidates.length:0;return Math.min(0.99,(e+t)/this.pairs.length)}visualize(){let e=this.getConfig();return iGo({routes:this.matchedHdRoutes,obstacles:e.obstacles,bounds:e.bounds,layerCount:e.layerCount,colorMap:e.colorMap,activePair:this.activePair,currentAttempt:this.currentAttempt,solved:this.solved})}},$Ne=0.00000001,Om=(e,t)=>{if(e.route.length===0)throw Error(`trace "${e.connection_name}" has an empty route`);if(e.route.some((h)=>h.route_type!=="wire"&&h.route_type!=="via"))throw Error(`trace "${e.connection_name}" contains unsupported jumper or through-obstacle geometry`);let n=e.route.findIndex((h)=>h.route_type==="wire"),o=e.route[n],i=e.route.findLast((h)=>h.route_type==="wire");if(o?.route_type!=="wire"||!i)throw Error(`trace "${e.connection_name}" must contain a wire point`);let r=[],s=[],a=[],c=[],l=null,d=o.width;if(n>0){let h=o.layer;for(let m=n-1;m>=0;m--){let p=e.route[m];if(p?.route_type!=="via")throw Error(`trace "${e.connection_name}" has unsupported geometry before its first wire`);if(h===p.to_layer)h=p.from_layer;else{if(h!==p.from_layer)throw Error(`trace "${e.connection_name}" has discontinuous leading vias`);h=p.to_layer}}let A=e.route[0];if(A.route_type!=="via")throw Error(`trace "${e.connection_name}" has an invalid leading entry`);l={x:A.x,y:A.y,layer:h,width:o.width},r.push(l)}for(let h of e.route){if(h.route_type==="wire"){if(!Number.isFinite(h.x)||!Number.isFinite(h.y)||!Number.isFinite(h.width)||h.width<=0||Yh(h.layer,t)<0)throw Error(`trace "${e.connection_name}" has an invalid wire point`);d=Math.max(d,h.width);let f={x:h.x,y:h.y,layer:h.layer,width:h.width};if(l){if(l.layer!==f.layer)throw Error(`trace "${e.connection_name}" changes layers without a via`);Math.hypot(l.x-f.x,l.y-f.y)>$Ne&&s.push({start:l,end:f,layer:f.layer,width:Math.max(l.width,f.width),connectionName:e.connection_name,terminal:null})}r.push(f),l=f;continue}if(h.route_type!=="via")throw Error(`trace "${e.connection_name}" contains unsupported route geometry`);if(!l)throw Error(`trace "${e.connection_name}" has a leading via`);let A=Yh(h.from_layer,t),m=Yh(h.to_layer,t),p=h.via_diameter??l.width;if(!Number.isFinite(h.x)||!Number.isFinite(h.y)||A<0||m<0||A===m||h.via_diameter!==void 0&&(!Number.isFinite(h.via_diameter)||h.via_diameter<=0)||h.via_hole_diameter!==void 0&&(!Number.isFinite(h.via_hole_diameter)||h.via_hole_diameter<=0||h.via_hole_diameter>=p))throw Error(`trace "${e.connection_name}" has an invalid via`);let g=l.layer===h.from_layer?h.from_layer:l.layer===h.to_layer?h.to_layer:null;if(!g)throw Error(`trace "${e.connection_name}" has a discontinuous via transition`);Math.hypot(l.x-h.x,l.y-h.y)>$Ne&&s.push({start:l,end:h,layer:l.layer,width:l.width,connectionName:e.connection_name,terminal:null});let _=g===h.from_layer?h.to_layer:h.from_layer;c.push({...h,from_layer:g,to_layer:_}),a.push({x:h.x,y:h.y,layers:yU(g,_,t),diameter:p,connectionName:e.connection_name,terminal:r.length===1?"start":null}),l={x:h.x,y:h.y,layer:_,width:l.width},r.push(l)}if(r.length<2||s.length===0)throw Error(`trace "${e.connection_name}" does not contain a routable path`);s[0].terminal=s.length===1?"both":"start",s[s.length-1].terminal=s.length===1?"both":"end";let u=a.at(-1);return u&&Math.hypot(u.x-i.x,u.y-i.y)<=$Ne&&(u.terminal="end"),{source:e,points:r,segments:s,vias:a,transitions:c,width:d,viaDiameter:e.__postProcessingViaDiameter??d,...o.start_pcb_port_id?{startPortId:o.start_pcb_port_id}:{},...i.end_pcb_port_id?{endPortId:i.end_pcb_port_id}:{}}},P6=(e)=>e.segments.reduce((t,n)=>t+Math.hypot(n.end.x-n.start.x,n.end.y-n.start.y),0),KMt=(e)=>{let{simpleRouteJson:t}=e.params,n=((d)=>{let u=new Set(d.reroutedPairs.map((h)=>h.connectionNames.join("\x00")));return d.declaredPairs.filter((h)=>{let A=h.connectionNames.map((g)=>d.traces.filter((_)=>_.connection_name===g));if(A.some((g)=>g.length!==1))return!1;if(u.has(h.connectionNames.join("\x00")))return!0;let m=A.map((g)=>g[0]);if(m.some((g)=>g.route.length<2||g.route[0]?.route_type!=="wire"||!g.route.every((_)=>_.route_type==="wire"||_.route_type==="via")))return!1;let p=m.map((g)=>P6(Om(g,d.layerCount)));return Math.abs(p[0]-p[1])>h.lengthTolerance+0.0000001}).map((h)=>structuredClone(h))})({traces:e.result.traces,declaredPairs:t.differentialPairs,reroutedPairs:e.result.reroutedPairs,layerCount:t.layerCount}),o=new Set(n.flatMap((d)=>d.connectionNames)),i=[],r=[],s=[],a=new Set;for(let d=0;d<e.result.traces.length;d++){let u=e.result.traces[d];if(!o.has(u.connection_name))continue;let h=u.route.every((B)=>B.route_type==="wire"||B.route_type==="via"),A=u.route[0]?.route_type==="wire";if(!h||!A)throw Error(`PostProcessingSolver: rerouted connection "${u.connection_name}" cannot be bound to LengthMatchingSolver`);let m=Om(u,t.layerCount),p=u.route[0];if(p.route_type!=="wire")throw Error(`PostProcessingSolver: trace "${u.connection_name}" lost its first wire during binding`);let g=[{x:p.x,y:p.y,z:Yh(p.layer,t.layerCount),traceThickness:p.width}],_=[],f=[],{layer:y,width:x}=p;for(let B of u.route.slice(1)){if(B.route_type==="wire"){if(B.layer!==y)throw Error(`PostProcessingSolver: trace "${u.connection_name}" changes layers without a via while binding`);g.push({x:B.x,y:B.y,z:Yh(B.layer,t.layerCount),traceThickness:B.width}),x=B.width;continue}if(B.route_type!=="via")throw Error(`PostProcessingSolver: trace "${u.connection_name}" contains unsupported bound geometry`);let w=y===B.from_layer?B.to_layer:y===B.to_layer?B.from_layer:null;if(!w)throw Error(`PostProcessingSolver: trace "${u.connection_name}" has a discontinuous bound via`);let T=g.at(-1);Math.hypot(T.x-B.x,T.y-B.y)>0.00000001&&g.push({x:B.x,y:B.y,z:Yh(y,t.layerCount),traceThickness:x}),g.push({x:B.x,y:B.y,z:Yh(w,t.layerCount),traceThickness:x}),_.push({x:B.x,y:B.y,zLayers:yU(B.from_layer,B.to_layer,t.layerCount).map((Q)=>Yh(Q,t.layerCount))}),f.push({...B}),y=w}if(g.length<2)throw Error(`PostProcessingSolver: trace "${u.connection_name}" has no bound copper segments`);let C=Math.max(...g.map((B)=>B.traceThickness??m.width)),I=m.viaDiameter,b=i.length;i.push({connectionName:u.connection_name,traceThickness:C,viaDiameter:I,route:g,vias:_});let P=g[0],E=g.at(-1);r.push({name:u.connection_name,pointsToConnect:[{x:P.x,y:P.y,layer:p.layer,...m.startPortId?{pcb_port_id:m.startPortId}:{}},{x:E.x,y:E.y,layer:m.points.at(-1).layer,...m.endPortId?{pcb_port_id:m.endPortId}:{}}]}),s.push({traceIndex:d,matchedRouteIndex:b,viaTemplates:f,startEndpoint:{...P},endEndpoint:{...E},...m.startPortId?{startPortId:m.startPortId}:{},...m.endPortId?{endPortId:m.endPortId}:{}}),a.add(u.connection_name)}for(let d of o)if(!a.has(d))throw Error(`PostProcessingSolver: missing LengthMatchingSolver binding for rerouted connection "${d}"`);let c=e.result.traces.filter((d)=>!o.has(d.connection_name)),l=t.minTraceToPadEdgeClearance??Math.max(0,...i.filter((d)=>d.route.length>=2).map((d)=>d.traceThickness),...c.flatMap((d)=>sne(d,t.layerCount).segments.map((u)=>u.width)));return{solverParams:{hdRoutes:i,traces:c,originalConnections:r,differentialPairs:n,obstacles:t.obstacles,bounds:t.bounds,layerCount:t.layerCount,obstacleMargin:l},traceBindings:s,baseTraces:structuredClone(e.result.traces)}},jMt=(e)=>{let t=new Map;for(let a of e.differentialPairs)for(let c of a.connectionNames){let l=e.hdRoutes.map((d,u)=>({route:d,hdRouteIndex:u})).filter(({route:d})=>d.connectionName===c);l.length===1&&t.set(l[0].hdRouteIndex,c)}let n=e.hdRoutes.map((a,c)=>{let l=[],d=new Map;for(let u=0;u<(a.jumpers?.length??0);u++){let h=a.jumpers[u],A=a.route.map((_,f)=>({point:_,index:f})).filter(({point:_})=>Math.hypot(_.x-h.start.x,_.y-h.start.y)<=0.00000001).map(({index:_})=>_),m=a.route.map((_,f)=>({point:_,index:f})).filter(({point:_})=>Math.hypot(_.x-h.end.x,_.y-h.end.y)<=0.00000001).map(({index:_})=>_),p=[...A.flatMap((_)=>m.filter((f)=>f>_).map((f)=>({startIndex:_,endIndex:f}))),...m.flatMap((_)=>A.filter((f)=>f>_).map((f)=>({startIndex:_,endIndex:f})))];if(p.length!==1)throw Error(`PostProcessingSolver: immutable HD route "${a.connectionName}" has an ambiguous jumper traversal`);let g=p[0];if(d.has(g.startIndex)||[...d.values()].some(({endIndex:_})=>g.startIndex<_||g.endIndex<=_))throw Error(`PostProcessingSolver: immutable HD route "${a.connectionName}" has overlapping or unordered jumpers`);d.set(g.startIndex,{endIndex:g.endIndex,jumperIndex:u})}if(a.route.length>0){let u=a.route[0];l.push({route_type:"wire",x:u.x,y:u.y,width:u.traceThickness??a.traceThickness,layer:uS(u.z,e.layerCount)});for(let p=0;p<a.route.length-1;p++){let g=a.route[p],_=d.get(p);if(_){let C=a.route[_.endIndex],I=a.jumpers[_.jumperIndex];if(g.z!==C.z)throw Error(`PostProcessingSolver: immutable HD route "${a.connectionName}" changes layers through a jumper`);l.push({route_type:"jumper",start:{x:g.x,y:g.y},end:{x:C.x,y:C.y},footprint:I.footprint,layer:uS(g.z,e.layerCount)}),l.push({route_type:"wire",x:C.x,y:C.y,width:C.traceThickness??a.traceThickness,layer:uS(C.z,e.layerCount)}),p=_.endIndex-1;continue}let f=a.route[p+1],y=uS(g.z,e.layerCount),x=uS(f.z,e.layerCount);g.z!==f.z&&(g.toNextSegmentType==="through_obstacle"?l.push({route_type:"through_obstacle",start:{x:g.x,y:g.y},end:{x:f.x,y:f.y},from_layer:y,to_layer:x,width:g.traceThickness??a.traceThickness}):l.push({route_type:"via",x:f.x,y:f.y,from_layer:y,to_layer:x,via_diameter:a.viaDiameter})),l.push({route_type:"wire",x:f.x,y:f.y,width:f.traceThickness??a.traceThickness,layer:x})}let h=l.filter((p)=>p.route_type==="wire"),A=a.startPcbPortId??a.route[0]?.pcb_port_id,m=a.endPcbPortId??a.route.at(-1)?.pcb_port_id;A&&h[0]&&(h[0].start_pcb_port_id=A),m&&h.at(-1)&&(h.at(-1).end_pcb_port_id=m)}return{type:"pcb_trace",pcb_trace_id:`post_processing_hd_route_${c}`,connection_name:a.connectionName,__postProcessingViaDiameter:a.viaDiameter,route:l}}),o=new Set(n.map((a)=>a.connection_name));for(let[a,c]of(e.traces??[]).entries()){let l=`post_processing_fixed_trace_${a}`;for(;o.has(l);)l+="_";o.add(l),n.push({...structuredClone(c),connection_name:l})}let i=structuredClone(e.obstacles),r=new Map,s=new Map;for(let a of i)for(let c of a.connectedTo){let l=r.get(c);l||(l=new Set,r.set(c,l)),l.add(a)}for(let a=0;a<e.hdRoutes.length;a++){let c=e.hdRoutes[a],l=new Set([c.connectionName,c.rootConnectionName,c.startPcbPortId,c.endPcbPortId,c.route[0]?.pcb_port_id,c.route.at(-1)?.pcb_port_id,t.get(a)].filter((u)=>u!==void 0)),d=new Set;for(let u of l){let h=r.get(u);if(h)for(let A of h)d.add(A)}for(let u of d){let h=s.get(u);h||(h=new Set(u.connectedTo),s.set(u,h),u.connectedTo=[...h]);for(let A of l){if(h.has(A))continue;h.add(A),u.connectedTo.push(A);let m=r.get(A);m||(m=new Set,r.set(A,m)),m.add(u)}}}return{params:{simpleRouteJson:{traces:n,differentialPairs:structuredClone(e.differentialPairs),obstacles:i,bounds:structuredClone(e.bounds),layerCount:e.layerCount,minTraceToPadEdgeClearance:e.minTraceToPadEdgeClearance},...e.routingGrid?{routingGrid:structuredClone(e.routingGrid)}:{}},routeBindings:[...t.entries()].map(([a,c])=>({hdRouteIndex:a,traceIndex:a,internalConnectionName:c})),sourceHdRoutes:structuredClone(e.hdRoutes)}};function QGt(e){let t=structuredClone(e.model.sourceHdRoutes);for(let n of e.model.routeBindings){let o=e.binding.traceBindings.find((c)=>c.traceIndex===n.traceIndex);if(!o)continue;let i=e.result.matchedHdRoutes[o.matchedRouteIndex],r=t[n.hdRouteIndex];if(!i||!r)throw Error(`PostProcessingSolver: missing matched or source HD route for "${n.internalConnectionName}"`);if(i.connectionName!==n.internalConnectionName)throw Error(`PostProcessingSolver: matched HD binding changed "${n.internalConnectionName}" to "${i.connectionName}"`);let s=i.route.map((c)=>({...c})),a=(c,l)=>{if(c&&l&&(l.pcb_port_id&&(c.pcb_port_id=l.pcb_port_id),l.insideJumperPad&&e.rejectInsideJumperPad))throw Error(`PostProcessingSolver: cannot restore jumper-pad metadata on rerouted connection "${n.internalConnectionName}"`)};a(s[0],r.route[0]),a(s.at(-1),r.route.at(-1)),t[n.hdRouteIndex]={...r,route:s,vias:structuredClone(i.vias)}}return{hdRoutes:t,postProcessingErrors:[]}}var T8=class extends Error{connectionNames;reason;constructor(e){super(`PostProcessingSolver: differential pair ${e.connectionNames.join("/")} ${e.message}`),this.name="DifferentialPairRoutingError",this.connectionNames=[e.connectionNames[0],e.connectionNames[1]],this.reason=e.reason}},Cke=class extends Error{connectionNames;reason;constructor(e){super(e.message),this.name="PostProcessingConstraintError",this.connectionNames=[...e.connectionNames],this.reason=e.reason}},kGt=class extends Error{reason="grid-capacity-exhausted";constructor(e){super(e),this.name="PostProcessingGridCapacityError"}},LGt=(e)=>{let t=75000*e.simpleRouteJson.differentialPairs.length;if(!Number.isSafeInteger(t))throw Error("PostProcessingSolver: derived rerouting iteration bound exceeds the safe integer range");let n=Math.min(t,80000);return Math.max(1,n)},Mge=(e)=>structuredClone(e),FGt=(e,t,n)=>{let o=(l)=>{let d=-(t.ccwRotationDegrees??0)*Math.PI/180,u=l.x-t.center.x,h=l.y-t.center.y;return{x:u*Math.cos(d)-h*Math.sin(d),y:u*Math.sin(d)+h*Math.cos(d)}},i=o(e.start),r=o(e.end),s=t.width/2+n,a=t.height/2+n;if(Math.abs(i.x)<=s&&Math.abs(i.y)<=a||Math.abs(r.x)<=s&&Math.abs(r.y)<=a)return!0;let c=[{x:-s,y:-a},{x:s,y:-a},{x:s,y:a},{x:-s,y:a}];return c.some((l,d)=>OI(i,r,l,c[(d+1)%c.length])<=0.0000001)},rGo=(e)=>{let t=[],n=[];for(let u of e.immutableTraces){let h=sne(u,e.layerCount);t.push(...h.segments),n.push(...h.vias)}let o=Array.from({length:e.layerCount},()=>[]);for(let u of t){let h=Yh(u.layer,e.layerCount);o[h].push(u)}let i=(u,h)=>Math.hypot(u.x-h.x,u.y-h.y)<=0.00000001,r=(u,h,A)=>{let m=A.x-h.x,p=A.y-h.y,g=m*m+p*p,_=g===0?0:Math.max(0,Math.min(1,((u.x-h.x)*m+(u.y-h.y)*p)/g));return Math.hypot(u.x-h.x-m*_,u.y-h.y-p*_)},s=(u,h,A)=>{let m=-(h.ccwRotationDegrees??0)*Math.PI/180,p=u.x-h.center.x,g=u.y-h.center.y,_=p*Math.cos(m)-g*Math.sin(m),f=p*Math.sin(m)+g*Math.cos(m);return Math.abs(_)<=h.width/2+A&&Math.abs(f)<=h.height/2+A},a=(u,h)=>{let A=Yh(h,e.layerCount);return QU(u,e.layerCount).includes(A)},c=(u,h,A)=>{let m=((g,_,f)=>{let y=Math.hypot(_.x,_.y);if(y<=0.0000000001)throw Error("PostProcessingSolver: cannot orient terminal fanout on a zero-length spine");let x=-_.y/y*e.side*e.centerlineSpacing/2,C=_.x/y*e.side*e.centerlineSpacing/2,I=f==="start"?[e.firstStartTerminal,e.secondStartTerminal]:[e.firstEndTerminal,e.secondEndTerminal],b=[e.firstWidth,e.secondWidth],P=[e.firstConnectionName,e.secondConnectionName];return I.map((E,B)=>{let w=B===0?1:-1,T={x:g.x+x*w,y:g.y+C*w};return{start:f==="start"?E:T,end:f==="start"?T:E,layer:g.layer,width:b[B],connectionName:P[B],terminal:f}})})(u,h,A),p=m.map((g)=>A==="start"?g.end:g.start);return m.every(l)&&p.every((g,_)=>e.obstacles.every((f)=>!a(f,u.layer)||!s(g,f,1.5*m[_].width+(e.terminalMiterMargin??0))))&&OI(m[0].start,m[0].end,m[1].start,m[1].end)>=m[0].width/2+m[1].width/2-0.0000001},l=(u)=>{let h=u.width/2,A=h+(e.minTraceToPadEdgeClearance??u.width),m=Yh(u.layer,e.layerCount),p=Math.min(u.start.x,u.end.x),g=Math.max(u.start.x,u.end.x),_=Math.min(u.start.y,u.end.y),f=Math.max(u.start.y,u.end.y);for(let y of[u.start,u.end])if(y.x-h<e.bounds.minX||y.x+h>e.bounds.maxX||y.y-h<e.bounds.minY||y.y+h>e.bounds.maxY)return!1;for(let y of e.obstacles){if(!a(y,u.layer))continue;let x=Math.hypot(y.width/2+A,y.height/2+A);if(g<y.center.x-x||p>y.center.x+x||f<y.center.y-x||_>y.center.y+x)continue;let[C,I]=u.connectionName===e.firstConnectionName?[e.firstStartTerminal,e.firstEndTerminal]:[e.secondStartTerminal,e.secondEndTerminal],b=s(C,y,0)&&(s(u.start,y,A)||s(u.end,y,A))&&Math.hypot(u.end.x-C.x,u.end.y-C.y)>=Math.hypot(u.start.x-C.x,u.start.y-C.y),P=s(I,y,0)&&(s(u.start,y,A)||s(u.end,y,A))&&Math.hypot(u.end.x-I.x,u.end.y-I.y)<=Math.hypot(u.start.x-I.x,u.start.y-I.y);if(!(y.connectedTo.includes(u.connectionName)&&(b||P))&&FGt(u,y,A))return!1}for(let y of o[m]){let x=u.width/2+y.width/2+Math.max(u.width,y.width);if(!(g+x<Math.min(y.start.x,y.end.x)||p-x>Math.max(y.start.x,y.end.x)||f+x<Math.min(y.start.y,y.end.y)||_-x>Math.max(y.start.y,y.end.y))&&OI(u.start,u.end,y.start,y.end)<x)return!1}for(let y of n)if(y.layers.includes(u.layer)&&r(y,u.start,u.end)<u.width/2+y.diameter/2+u.width)return!1;return!0},d=(u)=>{let h=u.diameter/2;if(u.x-h<e.bounds.minX||u.x+h>e.bounds.maxX||u.y-h<e.bounds.minY||u.y+h>e.bounds.maxY)return!1;for(let A of e.obstacles){if(!u.layers.some((m)=>a(A,m)))continue;if(!(u.terminal!==null&&A.connectedTo.includes(u.connectionName)&&s(u,A,0))&&s(u,A,h+u.diameter))return!1}for(let A of t){if(!u.layers.includes(A.layer))continue;let m=h+A.width/2+Math.max(u.diameter,A.width);if(r(u,A.start,A.end)<m)return!1}for(let A of n){if(!A.layers.some((p)=>u.layers.includes(p)))continue;let m=h+A.diameter/2+Math.max(u.diameter,A.diameter);if(Math.hypot(u.x-A.x,u.y-A.y)<m)return!1}return!0};return{isEdgeValid:(u,h)=>{if(u.layer!==h.layer||!((m,p)=>{let g=Math.hypot(p.x-m.x,p.y-m.y);if(g===0)return[];let _=-(p.y-m.y)/g*e.side*e.centerlineSpacing/2,f=(p.x-m.x)/g*e.side*e.centerlineSpacing/2,y=i(m,e.start),x=i(p,e.end),C=e.terminalFanout?y&&x?"both":y?"start":x?"end":null:null,I=y&&e.terminalFanout?e.firstStartTerminal:{x:m.x+_,y:m.y+f},b=x&&e.terminalFanout?e.firstEndTerminal:{x:p.x+_,y:p.y+f},P=y&&e.terminalFanout?e.secondStartTerminal:{x:m.x-_,y:m.y-f},E=x&&e.terminalFanout?e.secondEndTerminal:{x:p.x-_,y:p.y-f};return[{start:I,end:b,layer:m.layer,width:e.firstWidth,connectionName:e.firstConnectionName,terminal:C},{start:P,end:E,layer:m.layer,width:e.secondWidth,connectionName:e.secondConnectionName,terminal:C}]})(u,h).every(l))return!1;if(e.terminalFanout||e.terminalMiterMargin===void 0)return!0;let A={x:h.x-u.x,y:h.y-u.y};return!(i(u,e.start)&&!c(u,A,"start"))&&!(i(h,e.end)&&!c(h,A,"end"))},isTerminalFanoutValid:c,isViaValid:(u,h,A)=>{let m=Math.hypot(A.x,A.y);if(m<=0.0000000001)throw Error("PostProcessingSolver: cannot orient a coupled via on a zero-length spine");let p=yU(u.layer,h,e.layerCount),g=-A.y/m*e.side*e.centerlineSpacing/2,_=A.x/m*e.side*e.centerlineSpacing/2,f=i(u,e.start)?"start":i(u,e.end)?"end":null;return[{x:u.x+g,y:u.y+_,layers:p,diameter:e.firstViaDiameter,connectionName:e.firstConnectionName,terminal:f},{x:u.x-g,y:u.y-_,layers:p,diameter:e.secondViaDiameter,connectionName:e.secondConnectionName,terminal:f}].every(d)}}},Bge=(e,t,n)=>{let i=(u,h)=>{let A=-(h.ccwRotationDegrees??0)*Math.PI/180,m=u.x-h.center.x,p=u.y-h.center.y;return{x:m*Math.cos(A)-p*Math.sin(A),y:m*Math.sin(A)+p*Math.cos(A)}},r=(u,h,A)=>{let m=A.x-h.x,p=A.y-h.y,g=m*m+p*p,_=g===0?0:Math.max(0,Math.min(1,((u.x-h.x)*m+(u.y-h.y)*p)/g));return Math.hypot(u.x-(h.x+_*m),u.y-(h.y+_*p))},s=(u,h,A)=>{let m=Yh(h,A);return QU(u,A).includes(m)},a=(u,h,A)=>{let m=u.width/2;if(u.start.x-m<h.bounds.minX-0.0000001||u.start.x+m>h.bounds.maxX+0.0000001||u.start.y-m<h.bounds.minY-0.0000001||u.start.y+m>h.bounds.maxY+0.0000001||u.end.x-m<h.bounds.minX-0.0000001||u.end.x+m>h.bounds.maxX+0.0000001||u.end.y-m<h.bounds.minY-0.0000001||u.end.y+m>h.bounds.maxY+0.0000001)return!1;for(let p of h.obstacles){if(!s(p,u.layer,h.layerCount))continue;let g=u.terminal==="both"?[u.start,u.end]:u.terminal==="start"?[u.start]:u.terminal==="end"?[u.end]:[];if(!(p.connectedTo.includes(u.connectionName)&&g.some((_)=>{let f=i(_,p);return Math.abs(f.x)<=p.width/2+0.0000001&&Math.abs(f.y)<=p.height/2+0.0000001}))&&FGt(u,p,m+(h.minTraceToPadEdgeClearance??u.width)))return!1}for(let p of A.segments){if(p.layer!==u.layer)continue;let g=u.width/2+p.width/2+Math.max(u.width,p.width);if(OI(u.start,u.end,p.start,p.end)<g-0.0000001)return!1}for(let p of A.vias){if(!p.layers.includes(u.layer))continue;let g=u.width/2+p.diameter/2+u.width;if(r(p,u.start,u.end)<g-0.0000001)return!1}return!0},c=(u,h,A)=>{let m=u.diameter/2;if(u.x-m<h.bounds.minX-0.0000001||u.x+m>h.bounds.maxX+0.0000001||u.y-m<h.bounds.minY-0.0000001||u.y+m>h.bounds.maxY+0.0000001)return!1;for(let p of h.obstacles){if(!u.layers.some((_)=>s(p,_,h.layerCount)))continue;let g=i(u,p);if(!(u.terminal!==null&&p.connectedTo.includes(u.connectionName)&&Math.abs(g.x)<=p.width/2+0.0000001&&Math.abs(g.y)<=p.height/2+0.0000001)&&Math.abs(g.x)<=p.width/2+m+u.diameter&&Math.abs(g.y)<=p.height/2+m+u.diameter)return!1}for(let p of A.segments){if(!u.layers.includes(p.layer))continue;let g=m+p.width/2+Math.max(u.diameter,p.width);if(r(u,p.start,p.end)<g-0.0000001)return!1}for(let p of A.vias){if(!p.layers.some((_)=>u.layers.includes(_)))continue;let g=m+p.diameter/2+Math.max(u.diameter,p.diameter);if(Math.hypot(u.x-p.x,u.y-p.y)<g-0.0000001)return!1}return!0},l=(u)=>{for(let h=0;h<u.segments.length;h++){let A=u.segments[h];for(let m=h+2;m<u.segments.length;m++){let p=u.segments[m];if(A.layer!==p.layer)continue;if(!(u.segments.slice(h+1,m).reduce((g,_)=>g+Math.hypot(_.end.x-_.start.x,_.end.y-_.start.y),0)<=A.width+p.width+0.0000001)&&OI(A.start,A.end,p.start,p.end)<A.width/2+p.width/2-0.0000001)return!0}}for(let h of u.vias)for(let A of u.segments){if(!h.layers.includes(A.layer))continue;if(!(Math.hypot(h.x-A.start.x,h.y-A.start.y)<=0.0000001||Math.hypot(h.x-A.end.x,h.y-A.end.y)<=0.0000001)&&r(h,A.start,A.end)<h.diameter/2+A.width/2-0.0000001)return!0}return!1},d=((u,h)=>{let A=[],m=[];for(let p of u){let g=sne(p,h);A.push(...g.segments),m.push(...g.vias)}return{segments:A,vias:m}})(n.immutableTraces,n.layerCount);if(!((u,h)=>{for(let A of u.segments)for(let m of h.segments){if(A.layer!==m.layer)continue;let p=A.width/2+m.width/2;if(OI(A.start,A.end,m.start,m.end)<p-0.0000001)return!1}for(let[A,m]of[[u.vias,h.segments],[h.vias,u.segments]])for(let p of A)for(let g of m)if(p.layers.includes(g.layer)&&r(p,g.start,g.end)<p.diameter/2+g.width/2-0.0000001)return!1;for(let A of u.vias)for(let m of h.vias)if(A.layers.some((p)=>m.layers.includes(p))&&Math.hypot(A.x-m.x,A.y-m.y)<A.diameter/2+m.diameter/2-0.0000001)return!1;return!0})(e,t)||l(e)||l(t))return!1;for(let u of[e,t])if(u.segments.some((h)=>!a(h,n,d))||u.vias.some((h)=>!c(h,n,d)))return!1;return!0},qMt=[{x:1,y:0},{x:1,y:1},{x:0,y:1},{x:-1,y:1},{x:-1,y:0},{x:-1,y:-1},{x:0,y:-1},{x:1,y:-1}],sGo=class{constructor(e){this.input=e;let{bounds:t,grid:n}=e,o={minX:t.minX+n.outerPerimeterWidth,maxX:t.maxX-n.outerPerimeterWidth,minY:t.minY+n.outerPerimeterWidth,maxY:t.maxY-n.outerPerimeterWidth},i=this.createAxis(t.minX,t.maxX,n.outerGridStep,[o.minX,o.maxX]),r=this.createAxis(t.minY,t.maxY,n.outerGridStep,[o.minY,o.maxY]),s=this.createAxis(o.minX,o.maxX,n.innerGridStep,[],e.start.x),a=this.createAxis(o.minY,o.maxY,n.innerGridStep,[],e.start.y),c=this.createGrid(i,r,(u)=>u.x<=o.minX||u.x>=o.maxX||u.y<=o.minY||u.y>=o.maxY),l=this.createGrid(s,a,()=>!0);this.connectLocalNeighbors(c),this.connectLocalNeighbors(l);for(let u of["left","right","bottom","top"])this.connectBoundaries(u,c,l,o);let d=this.nodes.map((u,h)=>h);this.connectEndpoint(e.start,d),this.connectEndpoint(e.end,d)}input;nodes=[];nodeIdByPoint=new Map;endpointNodeIdByPoint=new Map;getPlanarNeighbors(e){let t=this.endpointNodeIdByPoint.get(this.exactKeyFor(e))??this.nodeIdByPoint.get(this.keyFor(e));if(t===void 0)throw Error(`PostProcessingSolver: coupled path point (${e.x}, ${e.y}) is not on the composite grid`);return[...this.nodes[t].neighborIds].map((n)=>({...this.nodes[n].point,layer:e.layer}))}getNodeCount(){return this.nodes.length}getSearchStateCountUpperBound(e){let t=this.nodes.reduce((n,o)=>n+o.neighborIds.size,0)*e+1;if(!Number.isSafeInteger(t))throw Error("PostProcessingSolver: composite-grid search-state bound exceeds the safe integer range");return t}createAxis(e,t,n,o,i=e){let r=[e,t,...o].map((a)=>({value:a,fixed:!0}));for(let a=Math.ceil((e-i)/n);i+a*n<t-0.00000001;a++)r.push({value:i+a*n,fixed:!1});r.sort((a,c)=>a.value-c.value||Number(c.fixed)-Number(a.fixed));let s=[];for(let a of r){let c=s.at(-1);!c||Math.abs(a.value-c.value)>0.00000001?s.push(a):a.fixed&&!c.fixed&&(s[s.length-1]=a)}return s.map((a)=>a.value)}createGrid(e,t,n){return t.map((o)=>e.map((i)=>{let r={x:i,y:o};return n(r)?this.addNode(r):null}))}connectLocalNeighbors(e){for(let t=0;t<e.length;t++)for(let n=0;n<(e[t]?.length??0);n++){let o=e[t][n];if(o!==null)for(let i of qMt){let r=e[t+i.y]?.[n+i.x];r!=null&&this.connect(o,r)}}}connectBoundaries(e,t,n,o){let i=e==="left"?o.minX:e==="right"?o.maxX:e==="bottom"?o.minY:o.maxY,r=e==="left"||e==="right",s=(d)=>Math.abs((r?d.x:d.y)-i)<=0.00000001,a=(d)=>{let u=new Set;for(let h of d)for(let A of h)A!==null&&s(this.nodes[A].point)&&u.add(A);return[...u].sort((h,A)=>{let m=this.nodes[h].point,p=this.nodes[A].point;return(r?m.y-p.y:m.x-p.x)||h-A})},c=a(t),l=a(n);if(c.length===0||l.length===0)throw Error(`PostProcessingSolver: composite grid has no ${e} boundary bridge candidates`);for(let d of c)this.connect(d,this.findNearestAlongBoundary(d,l,r));for(let d of l)this.connect(d,this.findNearestAlongBoundary(d,c,r))}findNearestAlongBoundary(e,t,n){let o=this.nodes[e].point,i=t[0],r=Number.POSITIVE_INFINITY;for(let s of t){let a=this.nodes[s].point,c=Math.abs(n?o.y-a.y:o.x-a.x);(c<r-0.00000001||Math.abs(c-r)<=0.00000001&&s<i)&&(r=c,i=s)}return i}connectEndpoint(e,t){let n=this.nodeIdByPoint.get(this.keyFor(e)),o=n===void 0?null:this.nodes[n].point,i=o?.x===e.x&&o.y===e.y?n:this.nodes.push({point:{x:e.x,y:e.y},neighborIds:new Set})-1;this.endpointNodeIdByPoint.set(this.exactKeyFor(e),i);let r=(s,a)=>{let c=this.nodes[s].point,l=t.filter((d)=>d!==s).map((d)=>({nodeId:d,distance:Math.hypot(this.nodes[d].point.x-c.x,this.nodes[d].point.y-c.y)})).filter(({distance:d})=>d>0.0000000001).sort((d,u)=>d.distance-u.distance||d.nodeId-u.nodeId).slice(0,a);if(l.length===0)throw Error("PostProcessingSolver: composite grid has no endpoint connection candidates");for(let{nodeId:d}of l)this.connect(s,d)};r(i,8);for(let s of qMt){let a={x:e.x+s.x*this.input.grid.innerGridStep,y:e.y+s.y*this.input.grid.innerGridStep};if(a.x<this.input.bounds.minX||a.x>this.input.bounds.maxX||a.y<this.input.bounds.minY||a.y>this.input.bounds.maxY)continue;let c=this.addNode(a);this.connect(i,c),r(c,4)}}addNode(e){let t=this.keyFor(e),n=this.nodeIdByPoint.get(t);if(n!==void 0)return n;let o=this.nodes.length;return this.nodes.push({point:{x:e.x,y:e.y},neighborIds:new Set}),this.nodeIdByPoint.set(t,o),o}connect(e,t){if(e===t)return;let n=this.nodes[e],o=this.nodes[t];n.neighborIds.add(t),o.neighborIds.add(e)}keyFor(e){let t=Object.is(e.x,-0)?0:e.x,n=Object.is(e.y,-0)?0:e.y;return`${t.toFixed(12)}:${n.toFixed(12)}`}exactKeyFor(e){return`${Object.is(e.x,-0)?0:e.x}:${Object.is(e.y,-0)?0:e.y}`}},aGo=class{constructor(e){if(this.input=e,this.startLayer=Yh(e.start.layer,e.layerCount),this.endLayer=Yh(e.end.layer,e.layerCount),this.grid=new sGo(e),this.maxSearchStates=this.grid.getSearchStateCountUpperBound(e.layerCount),this.exploredStateLimit=Math.min(this.maxSearchStates,20000),this.startLayer<0||this.endLayer<0)return this.queue=[],void(this.status="exhausted");let t={point:e.start,direction:null,cost:0,estimate:this.estimate(e.start),parent:null,sequence:0};this.queue=[t],this.bestCosts.set(this.keyFor(e.start,null),0)}input;queue;bestCosts=new Map;startLayer;endLayer;grid;maxSearchStates;exploredStateLimit;current=null;result=null;status="searching";explored=0;nextSequence=1;isComplete(){return this.status!=="searching"}getPath(){return this.result}getPreviewPath(){return this.current?this.createPath(this.current):[this.input.start]}getExploredCount(){return this.explored}getProgress(){return this.status!=="searching"?1:Math.min(0.99,this.explored/this.exploredStateLimit)}getGridNodeCount(){return this.grid.getNodeCount()}step(){if(this.status!=="searching")return;let e=this.popQueue();if(!e)return void(this.status="exhausted");let t=this.bestCosts.get(this.keyFor(e.point,e.direction));if(t===void 0)throw Error("PostProcessingSolver: coupled path queue contains an untracked state");if(e.cost>t+0.0000000001)this.queue.length===0&&(this.status="exhausted");else{if(this.current=e,this.explored++,this.explored>this.maxSearchStates)throw Error(`PostProcessingSolver: coupled path search exceeded its ${this.maxSearchStates}-state graph invariant limit`);if(this.isEnd(e.point)){let n=this.createPath(e);return n[n.length-1]=this.input.end,this.result=this.simplifyPath(n),void(this.status="found")}this.explored>=this.exploredStateLimit?this.status="exhausted":(this.enqueuePlanarNeighbors(e),this.enqueueViaNeighbors(e),this.queue.length===0&&(this.status="exhausted"))}}isEnd(e){return e.layer===this.input.end.layer&&e.x===this.input.end.x&&e.y===this.input.end.y}estimate(e){return Math.hypot(e.x-this.input.end.x,e.y-this.input.end.y)+3*Math.abs(Yh(e.layer,this.input.layerCount)-this.endLayer)}keyFor(e,t){return`${Object.is(e.x,-0)?0:e.x}:${Object.is(e.y,-0)?0:e.y}:${e.layer}:${t?.key??"start"}`}createDirection(e,t){let n=t.x-e.x,o=t.y-e.y,i=Math.hypot(n,o);if(i<=0.0000000001)throw Error("PostProcessingSolver: composite grid produced a zero-length planar edge");let r=n/i,s=o/i;return{x:r,y:s,key:`${r.toFixed(6)}:${s.toFixed(6)}`}}createPath(e){let t=[],n=e;for(;n;)t.push(n.point),n=n.parent;return t.reverse()}simplifyPath(e){return e.filter((t,n)=>{if(n===0||n===e.length-1)return!0;let o=e[n-1],i=e[n+1],r={x:t.x-o.x,y:t.y-o.y},s={x:i.x-t.x,y:i.y-t.y},a=r.x*s.y-r.y*s.x,c=Math.hypot(r.x,r.y)*Math.hypot(s.x,s.y);return Math.abs(a)>0.0000000001*c||t.layer!==o.layer||t.layer!==i.layer})}hasHigherQueuePriority(e,t){return e.estimate!==t.estimate?e.estimate<t.estimate:e.cost!==t.cost?e.cost<t.cost:e.point.x!==t.point.x?e.point.x<t.point.x:e.point.y!==t.point.y?e.point.y<t.point.y:e.point.layer!==t.point.layer?e.point.layer<t.point.layer:e.sequence<t.sequence}pushQueue(e){this.queue.push(e);let t=this.queue.length-1;for(;t>0;){let n=Math.floor((t-1)/2),o=this.queue[n];if(!this.hasHigherQueuePriority(e,o))break;this.queue[t]=o,t=n}this.queue[t]=e}popQueue(){let e=this.queue[0],t=this.queue.pop();if(!e||!t||this.queue.length===0)return e;let n=0;for(;;){let o=2*n+1;if(o>=this.queue.length)break;let i=o+1,r=o;i<this.queue.length&&this.hasHigherQueuePriority(this.queue[i],this.queue[o])&&(r=i);let s=this.queue[r];if(!this.hasHigherQueuePriority(s,t))break;this.queue[n]=s,n=r}return this.queue[n]=t,e}enqueuePlanarNeighbors(e){for(let t of this.grid.getPlanarNeighbors(e.point)){if(!this.input.isEdgeValid(e.point,t))continue;let n=this.createDirection(e.point,t),o=e.direction===null||e.direction.key===n.key?0:0.18,i=e.cost+Math.hypot(t.x-e.point.x,t.y-e.point.y)+o,r=this.keyFor(t,n);(this.bestCosts.get(r)??Number.POSITIVE_INFINITY)<=i||(this.bestCosts.set(r,i),this.pushQueue({point:t,direction:n,cost:i,estimate:i+this.estimate(t),parent:e,sequence:this.nextSequence++}))}}enqueueViaNeighbors(e){if(!e.direction)return;let t=Yh(e.point.layer,this.input.layerCount);for(let n of[t-1,t+1]){if(n<0||n>=this.input.layerCount)continue;let o=uS(n,this.input.layerCount);if(!this.input.isViaValid(e.point,o,e.direction))continue;let i={...e.point,layer:o},r=e.cost+4,s=this.keyFor(i,e.direction);(this.bestCosts.get(s)??Number.POSITIVE_INFINITY)<=r||(this.bestCosts.set(s,r),this.pushQueue({point:i,direction:e.direction,cost:r,estimate:r+this.estimate(i),parent:e,sequence:this.nextSequence++}))}}},HGt=(e)=>{let t=Math.min(e.bounds.maxX-e.bounds.minX,e.bounds.maxY-e.bounds.minY),n=e.config?.innerGridStep??e.defaultInnerGridStep,o=e.config?.outerGridStep??4*n,i=e.config?.outerPerimeterWidth??Math.min(o,t/4);if(!Number.isFinite(n)||n<0.0001)throw Error("PostProcessingSolver: routingGrid.innerGridStep must be finite and at least 0.0001");if(!Number.isFinite(o)||o<=n)throw Error("PostProcessingSolver: routingGrid.outerGridStep must be finite and greater than innerGridStep");if(!Number.isFinite(i)||i<=0||2*i>=t)throw Error("PostProcessingSolver: routingGrid.outerPerimeterWidth must be finite, positive, and less than half the smaller board extent");let r=e.bounds.maxX-e.bounds.minX,s=e.bounds.maxY-e.bounds.minY;if((Math.ceil(r/o)+4)*(Math.ceil(s/o)+4)+(Math.ceil((r-2*i)/n)+2)*(Math.ceil((s-2*i)/n)+2)+18>250000)throw new kGt("PostProcessingSolver: valid input exceeds the 250000-node optimization grid capacity");return{innerGridStep:n,outerGridStep:o,outerPerimeterWidth:i}},JMt=(e)=>{let t=-e.pathDirection.y,n=e.pathDirection.x,o=Math.tan(e.maximumTurnDegrees*Math.PI/180),i=Math.max(0,...e.lanes.map(({point:c,polarity:l})=>{let d=c.x-e.anchor.x,u=c.y-e.anchor.y,h=d*e.escapeDirection.x+u*e.escapeDirection.y,A=d*t+u*n,m=l*e.side*e.centerlineSpacing/2;return h+Math.abs(A-m)/o})),r=e.maxUncoupledLength??i;if(i>r+0.00000001)return null;let s=Math.max(0.05,Math.min(0.25,e.searchStep/2)),a=Math.max(1,Math.ceil((r-i)/s)+1);for(let c=0;c<a;c++){let l=Math.min(r,i+c*s),d={x:e.anchor.x+e.escapeDirection.x*l,y:e.anchor.y+e.escapeDirection.y*l,layer:e.anchor.layer};if(e.lanes.every(({point:u,polarity:h})=>{let A=h*e.side*e.centerlineSpacing/2,m=d.x+t*A,p=d.y+n*A;return e.maxUncoupledLength===void 0||Math.hypot(m-u.x,p-u.y)<=e.maxUncoupledLength+0.00000001})&&e.isValid(d))return d}return null},cGo=[0.75,0.5,1,0.25,1.25],i_e=100,lGo=class{constructor(e){this.input=e,this.pairName=e.pair.connectionNames.join("/"),this.prepared=this.prepare()}input;pairName;prepared;candidates=[];result=null;search=null;nextAttempt=0;exploredNodeCount=0;isComplete(){return this.result!==null}getResult(){if(!this.result)throw Error(`PostProcessingSolver: differential pair ${this.pairName} is not complete`);return this.result}getPreviewPath(){return this.search?.getPreviewPath()??null}getProgress(){if(this.result)return 1;let e=this.prepared.attempts.length,t=this.search?.getProgress()??0;return Math.min(0.99,(this.nextAttempt+t)/e)}getStats(){return{phase:this.search?"searching":"candidate-selection",pair:this.pairName,attemptIndex:this.nextAttempt,attemptCount:this.prepared.attempts.length,exploredNodeCount:this.exploredNodeCount+(this.search?.getExploredCount()??0),gridNodeCount:this.search?.getGridNodeCount()??0,acceptedCandidateCount:this.candidates.length}}step(){if(this.result)return;let e=this.prepared;if(!this.search){let i=e.attempts[this.nextAttempt];return i?void(this.search=new aGo(i.input)):void this.complete()}if(this.search.step(),!this.search.isComplete())return;let t=this.search.getPath();this.exploredNodeCount+=this.search.getExploredCount();let n=e.attempts[this.nextAttempt];if(!n)throw Error(`PostProcessingSolver: differential pair ${this.pairName} lost its active attempt`);if(this.search=null,this.nextAttempt++,!t)return;let o=((i)=>{let r=(E,B)=>Math.hypot(E.x-B.x,E.y-B.y)<=0.00000001;if(i.path.length<2)throw Error("PostProcessingSolver: coupled path has fewer than two stations");let s=(E,B)=>{for(let w=E+B;w>=0&&w<i.path.length;w+=B){let T=i.path[w];if(!r(T,i.path[E]))return T}return null},a=(E)=>{let B=i.path[E],w=s(E,-1),T=s(E,1),Q=(W,j)=>{let q=j.x-W.x,ne=j.y-W.y,ce=Math.hypot(q,ne);if(ce<=0.0000000001)throw Error("PostProcessingSolver: cannot offset a zero-length spine");return{x:-ne/ce,y:q/ce}},N=i.side*i.centerlineSpacing/2;if(!w||!T){let W=Q(w??B,T??B);return{x:W.x*N,y:W.y*N}}if(i.terminalFanout&&E===1)return Q(w,B);if(i.terminalFanout&&E===i.path.length-2)return Q(B,T);if(i.terminalFanout&&i.path[E+1]?.layer!==B.layer)return Q(w,B);let F=Q(w,B),H=Q(B,T),z={x:F.x+H.x,y:F.y+H.y},Y=Math.hypot(z.x,z.y);if(Y<=0.0000000001)return null;let U=z.x/Y,X=z.y/Y,V=N/(U*F.x+X*F.y);return{x:U*V,y:X*V}},c=i.first.points[0],l=i.first.points.at(-1),d=i.reverseSecond?i.second.points.at(-1):i.second.points[0],u=i.reverseSecond?i.second.points[0]:i.second.points.at(-1),h=[[{route_type:"wire",x:c.x,y:c.y,width:c.width,layer:c.layer}],[{route_type:"wire",x:d.x,y:d.y,width:d.width,layer:d.layer}]],A=[i.first.transitions[0],i.second.transitions[0]],m=0,p=i.terminalFanout?1:0,g=i.path.length-2,_=i.path[g],f=i.path[g-1],y=i.terminalFanout&&_?.layer===l.layer&&f?.layer===_.layer,x=i.terminalFanout?y?g-1:i.path.length-1:i.path.length;for(let E=p;E<x;E++){let B=i.path[E],w=a(E);if(!w)return null;for(let T of[0,1]){let Q=T===0?1:-1,N={x:B.x+w.x*Q,y:B.y+w.y*Q},F=h[T],H=i.path[E-1];if(H&&H.layer!==B.layer){if(!r(H,B))throw Error("PostProcessingSolver: a coupled layer transition moved in the plane");let z=[...F].reverse().find((U)=>U.route_type==="wire");if(!z)throw Error("PostProcessingSolver: generated via has no preceding wire");let Y=A[T];F.push({route_type:"via",x:z.x,y:z.y,from_layer:H.layer,to_layer:B.layer,via_diameter:Y?.via_diameter??(T===0?i.first.viaDiameter:i.second.viaDiameter),...Y?.via_hole_diameter!==void 0?{via_hole_diameter:Y.via_hole_diameter}:{}}),F.push({route_type:"wire",x:z.x,y:z.y,width:T===0?i.first.width:i.second.width,layer:B.layer})}else{let z=F.at(-1);z?.route_type==="wire"&&r(z,N)&&z.layer===B.layer||F.push({route_type:"wire",...N,width:T===0?i.first.width:i.second.width,layer:B.layer})}}i.path[E-1]?.layer!==B.layer&&E>0&&m++}let C=(E,B)=>{let w=E.at(-1);if(!w||w.route_type!=="wire")throw Error("PostProcessingSolver: terminal fanout has no preceding wire");let T=E.at(-2),Q=!1;if(T?.route_type==="wire"&&T.layer===w.layer&&w.layer===B.layer){let N={x:w.x-T.x,y:w.y-T.y},F={x:B.x-w.x,y:B.y-w.y},H=Math.hypot(N.x,N.y),z=Math.hypot(F.x,F.y);if(H>0.00000001&&z>0.00000001&&Math.abs(N.x*F.x+N.y*F.y)<=0.00000001){let Y={x:w.x-N.x/H*z,y:w.y-N.y/H*z};(Y.x-T.x)*(N.x/H)+(Y.y-T.y)*(N.y/H)>0.00000001&&(w.x=Y.x,w.y=Y.y,Q=!0)}}i.terminalFanout&&!Q&&w.x!==B.x&&w.y!==B.y&&E.push({route_type:"wire",x:B.x,y:w.y,width:B.width,layer:B.layer}),E.push({route_type:"wire",x:B.x,y:B.y,width:B.width,layer:B.layer})};C(h[0],l),C(h[1],u),i.reverseSecond&&(h[1]=h[1].reverse().map((E)=>E.route_type==="via"?{...E,from_layer:E.to_layer,to_layer:E.from_layer}:E));let I=(E,B)=>{let w=E.filter((T)=>T.route_type==="wire");for(let T of w)delete T.start_pcb_port_id,delete T.end_pcb_port_id;B.startPortId&&(w[0].start_pcb_port_id=B.startPortId),B.endPortId&&(w.at(-1).end_pcb_port_id=B.endPortId)};I(h[0],i.first),I(h[1],i.second);let b={...i.first.source,route:h[0]},P={...i.second.source,route:h[1]};return{first:b,second:P,firstParsed:Om(b,i.layerCount),secondParsed:Om(P,i.layerCount),edgeGap:i.edgeGap,centerlineDistance:i.centerlineSpacing,bendCount:Math.max(0,i.path.length-m-2),viaPairCount:m}})({first:e.first,second:e.second,reverseSecond:e.reverseSecond,path:t,centerlineSpacing:n.edgeGap+e.first.width/2+e.second.width/2,edgeGap:n.edgeGap,side:n.side,layerCount:this.input.layerCount,terminalFanout:e.terminalFanout});o&&Bge(o.firstParsed,o.secondParsed,e.context)&&this.candidates.push(o)}prepare(){let e=this.input.traces.map((b,P)=>({trace:b,index:P})).filter(({trace:b})=>b.connection_name===this.input.pair.connectionNames[0]),t=this.input.traces.map((b,P)=>({trace:b,index:P})).filter(({trace:b})=>b.connection_name===this.input.pair.connectionNames[1]);if(e.length!==1||t.length!==1)throw new T8({connectionNames:this.input.pair.connectionNames,reason:"trace-resolution-failure",message:"must resolve each connection_name to exactly one non-branching trace"});if(e[0].index===t[0].index)throw new T8({connectionNames:this.input.pair.connectionNames,reason:"trace-resolution-failure",message:"resolved both members to one trace"});let n,o;try{n=Om(e[0].trace,this.input.layerCount),o=Om(t[0].trace,this.input.layerCount)}catch(b){throw new T8({connectionNames:this.input.pair.connectionNames,reason:"invalid-routed-geometry",message:`has unsupported or invalid routed geometry: ${b instanceof Error?b.message:String(b)}`})}let i=n.points[0],r=n.points.at(-1),s=Math.hypot(i.x-o.points[0].x,i.y-o.points[0].y)+Math.hypot(r.x-o.points.at(-1).x,r.y-o.points.at(-1).y),a=Math.hypot(i.x-o.points.at(-1).x,i.y-o.points.at(-1).y)+Math.hypot(r.x-o.points[0].x,r.y-o.points[0].y)+0.00000001<s,c=a?o.points.at(-1):o.points[0],l=a?o.points[0]:o.points.at(-1);if(i.layer!==c.layer||r.layer!==l.layer)throw new T8({connectionNames:this.input.pair.connectionNames,reason:"terminal-layer-mismatch",message:"does not have common paired layers at both terminal stations"});let d={x:(i.x+c.x)/2,y:(i.y+c.y)/2,layer:i.layer},u={x:(r.x+l.x)/2,y:(r.y+l.y)/2,layer:r.layer},h=Math.hypot(u.x-d.x,u.y-d.y);if(h<0.000001)throw new T8({connectionNames:this.input.pair.connectionNames,reason:"coincident-terminal-midpoints",message:"has coincident terminal-pair midpoints"});let A={x:-(u.y-d.y)/h,y:(u.x-d.x)/h},m=i.x-c.x,p=i.y-c.y,g=m*A.x+p*A.y>=0?1:-1,_=(b,P)=>{let E=b.x-P.x,B=b.y-P.y,w=Math.hypot(E,B);return w>0.00000001&&Math.abs(E*A.x+B*A.y)/w<0.5},f=_(i,c)&&_(r,l),y={x:A.y,y:-A.x},x=[i,c].some((b)=>(b.x-d.x)*y.x+(b.y-d.y)*y.y>0.00000001),C={immutableTraces:this.input.traces.filter((b,P)=>P!==e[0].index&&P!==t[0].index),obstacles:this.input.obstacles,bounds:this.input.bounds,layerCount:this.input.layerCount,minTraceToPadEdgeClearance:this.input.minTraceToPadEdgeClearance},I=((b)=>{let{minimumCenterlineDistance:P,maximumCenterlineDistance:E}=b;if(P===void 0&&E===void 0)return b.legacyCenterlineDistances;let B=[...P!==void 0&&E!==void 0?[(P+E)/2,P,E,P-0.25,E+0.25]:P!==void 0?[P,P+0.25,P+0.5,P-0.25,P+1]:[E,E-0.25,E-0.5,E+0.25,E-1],...b.legacyCenterlineDistances];return B.filter((w,T)=>w>b.minimumPhysicalDistance&&B.findIndex((Q)=>Math.abs(Q-w)<0.00000001)===T)})({minimumCenterlineDistance:this.input.pair.minimumCenterlineDistance,maximumCenterlineDistance:this.input.pair.maximumCenterlineDistance,minimumPhysicalDistance:n.width/2+o.width/2,legacyCenterlineDistances:cGo.map((b)=>b+n.width/2+o.width/2)}).flatMap((b)=>{let P=b-n.width/2-o.width/2;return[g,g===1?-1:1].flatMap((E)=>{let B=HGt({config:this.input.routingGrid,bounds:this.input.bounds,defaultInnerGridStep:Math.max(0.25,Math.min(0.5,b/2))}),w=(F,H)=>rGo({...C,start:F,end:H,firstConnectionName:n.source.connection_name,secondConnectionName:o.source.connection_name,firstStartTerminal:i,firstEndTerminal:r,secondStartTerminal:c,secondEndTerminal:l,firstWidth:n.width,secondWidth:o.width,firstViaDiameter:n.transitions[0]?.via_diameter??n.viaDiameter,secondViaDiameter:o.transitions[0]?.via_diameter??o.viaDiameter,centerlineSpacing:b,side:E,terminalFanout:f,terminalMiterMargin:this.input.pair.maxUncoupledLength===void 0?void 0:b/2}),T=this.input.pair.maxUncoupledLength===void 0?((F,H)=>{if(!x||f)return d;let z=[{terminal:i,offset:H*F/2},{terminal:c,offset:-H*F/2}],Y=Math.tan(55*Math.PI/180),U=Math.max(...z.map(({terminal:X,offset:V})=>{let W=(X.x-d.x)*y.x+(X.y-d.y)*y.y,j=(X.x-d.x)*A.x+(X.y-d.y)*A.y;return W+Math.abs(j-V)/Y}));return{x:d.x+y.x*U,y:d.y+y.y*U,layer:d.layer}})(b,E):d,Q=u;if(!f&&this.input.pair.maxUncoupledLength!==void 0){let F=w(d,u),H=JMt({anchor:d,escapeDirection:y,pathDirection:y,centerlineSpacing:b,side:E,lanes:[{point:i,polarity:1},{point:c,polarity:-1}],maxUncoupledLength:this.input.pair.maxUncoupledLength,maximumTurnDegrees:55,searchStep:B.innerGridStep,isValid:(Y)=>F.isTerminalFanoutValid(Y,y,"start")}),z=JMt({anchor:u,escapeDirection:{x:-y.x,y:-y.y},pathDirection:y,centerlineSpacing:b,side:E,lanes:[{point:r,polarity:1},{point:l,polarity:-1}],maxUncoupledLength:this.input.pair.maxUncoupledLength,maximumTurnDegrees:45,searchStep:B.innerGridStep,isValid:(Y)=>F.isTerminalFanoutValid(Y,y,"end")});if(!H||!z)return[];if(T=H,Q=z,(Q.x-T.x)*y.x+(Q.y-T.y)*y.y<=B.innerGridStep)return[]}let N=w(T,Q);return[{edgeGap:P,side:E,input:{start:T,end:Q,bounds:this.input.bounds,layerCount:this.input.layerCount,grid:B,...N}}]})});return{first:n,second:o,reverseSecond:a,terminalFanout:f,context:C,attempts:I}}complete(){if(this.candidates.length===0)throw new T8({connectionNames:this.input.pair.connectionNames,reason:"no-valid-candidate",message:"could not be improved without violating bounds, copper clearance, or coupled-via constraints"});this.candidates.sort((e,t)=>this.score(e)-this.score(t)||e.edgeGap-t.edgeGap),this.result={status:"accepted",candidate:this.candidates[0]}}score(e){return(this.input.pair.minimumCenterlineDistance!==void 0||this.input.pair.maximumCenterlineDistance!==void 0?Math.max(0,(this.input.pair.minimumCenterlineDistance??Number.NEGATIVE_INFINITY)-e.centerlineDistance)*i_e+Math.max(0,e.centerlineDistance-(this.input.pair.maximumCenterlineDistance??Number.POSITIVE_INFINITY))*i_e:e.edgeGap<0.5?(0.5-e.edgeGap)*i_e:e.edgeGap>1?(e.edgeGap-1)*i_e:0)+P6(e.firstParsed)+P6(e.secondParsed)+0.15*e.bendCount+8*e.viaPairCount}},Mte=(e)=>{let t={lines:[],points:[],rects:[],circles:[]};t.rects.push({center:{x:(e.bounds.minX+e.bounds.maxX)/2,y:(e.bounds.minY+e.bounds.maxY)/2},width:e.bounds.maxX-e.bounds.minX,height:e.bounds.maxY-e.bounds.minY,fill:"rgba(30, 70, 120, 0.04)",stroke:"rgba(30, 70, 120, 0.55)",layer:`z${Array.from({length:e.layerCount},(n,o)=>o).join(",")}`});for(let n of e.obstacles){let o=QU(n,e.layerCount);t.rects.push({center:n.center,width:n.width,height:n.height,ccwRotationDegrees:n.ccwRotationDegrees,fill:"rgba(220, 60, 60, 0.16)",stroke:"rgba(190, 40, 40, 0.75)",layer:`z${o.join(",")}`})}for(let n=0;n<(e.previewPath?.length??0)-1;n++){let o=e.previewPath[n],i=e.previewPath[n+1];if(o.layer!==i.layer)continue;let r=Yh(o.layer,e.layerCount);t.lines.push({points:[o,i],strokeColor:"#16a34a",strokeWidth:0.08,strokeDash:[0.18,0.12],layer:`z${r}`})}for(let n of e.traces){if(e.activeConnectionNames?.includes(n.connection_name))continue;let o="#2563eb",i=null;for(let r of n.route)if(r.route_type==="wire"){if(i&&i.layer===r.layer){let s=Yh(r.layer,e.layerCount);t.lines.push({points:[i,r],strokeColor:o,strokeWidth:Math.max(i.width,r.width),...s===0?{}:{strokeDash:[0.2,0.16]},layer:`z${s}`})}i=r}else if(r.route_type==="via"){let s=yU(r.from_layer,r.to_layer,e.layerCount).map((a)=>Yh(a,e.layerCount));if(t.circles.push({center:r,radius:(r.via_diameter??i?.width??0.2)/2,fill:"rgba(37, 99, 235, 0.45)",stroke:o,layer:`z${s.join(",")}`}),i){let a=i.width;i={x:r.x,y:r.y,layer:r.to_layer,width:a}}}}return t},dGo=class extends Js{constructor(e){super(),this.params=e,this.outputTraces=Mge(e.simpleRouteJson.traces),this.MAX_ITERATIONS=LGt(e)}params;outputTraces;reroutedPairs=[];failures=[];nextPairIndex=0;activeConnectionNames=null;activeSession=null;getSolverName(){return"DifferentialPairReroutingSolver"}_step(){let e=this.params.simpleRouteJson.differentialPairs[this.nextPairIndex];if(!e)return void this.finish();this.activeConnectionNames=e.connectionNames;try{if(!this.activeSession)return this.activeSession=new lGo({pair:e,traces:this.outputTraces,obstacles:this.params.simpleRouteJson.obstacles,bounds:this.params.simpleRouteJson.bounds,layerCount:this.params.simpleRouteJson.layerCount,minTraceToPadEdgeClearance:this.params.simpleRouteJson.minTraceToPadEdgeClearance,routingGrid:this.params.routingGrid}),void(this.stats=this.activeSession.getStats());this.activeSession.step()}catch(n){if(!(n instanceof T8))throw n;return void this.skipFailedPair(e,n)}if(this.stats=this.activeSession.getStats(),!this.activeSession.isComplete())return;let t=this.activeSession.getResult();this.activeSession=null;for(let n of[t.candidate.first,t.candidate.second]){let o=this.outputTraces.findIndex((i)=>i.connection_name===n.connection_name);if(o<0)throw Error(`DifferentialPairReroutingSolver: accepted replacement for unknown connection "${n.connection_name}"`);this.outputTraces[o]=n}this.reroutedPairs.push(e),this.nextPairIndex++,this.nextPairIndex!==this.params.simpleRouteJson.differentialPairs.length?this.stats={phase:"accepted",pair:e.connectionNames.join("/"),pairIndex:this.nextPairIndex-1,pairCount:this.params.simpleRouteJson.differentialPairs.length}:this.finish()}finish(){this.activeConnectionNames=null,this.solved=!0,this.stats={phase:"complete",acceptedPairCount:this.reroutedPairs.length,skippedPairCount:this.failures.length}}skipFailedPair(e,t){this.failures.push({connectionNames:[...e.connectionNames],reason:t.reason,message:t.message}),this.activeSession=null,this.nextPairIndex++,this.nextPairIndex!==this.params.simpleRouteJson.differentialPairs.length?this.stats={phase:"skipped",pair:e.connectionNames.join("/"),pairIndex:this.nextPairIndex-1,pairCount:this.params.simpleRouteJson.differentialPairs.length,skippedPairCount:this.failures.length}:this.finish()}getConstructorParams(){return[this.params]}getOutput(){if(!this.solved)throw Error("DifferentialPairReroutingSolver: getOutput() called before completion");return this.getBestEffortOutput()}getBestEffortOutput(){return{traces:Mge(this.outputTraces),reroutedPairs:this.reroutedPairs.map((e)=>({...e,connectionNames:[...e.connectionNames]})),failures:this.failures.map((e)=>({...e,connectionNames:[...e.connectionNames]}))}}computeProgress(){return this.solved?1:this.params.simpleRouteJson.differentialPairs.length===0?0:(this.nextPairIndex+(this.activeSession?.getProgress()??0))/this.params.simpleRouteJson.differentialPairs.length}visualize(){return Mte({traces:this.outputTraces,obstacles:this.params.simpleRouteJson.obstacles,bounds:this.params.simpleRouteJson.bounds,layerCount:this.params.simpleRouteJson.layerCount,activeConnectionNames:this.activeConnectionNames,previewPath:this.activeSession?.getPreviewPath()??null})}},vI=0.00000001,uGo=class extends Js{constructor(e){super(),this.input=e,this.traces=Mge(e.traces),this.MAX_ITERATIONS=Math.max(1,e.reroutedPairs.length+1)}input;traces;nextPairIndex=0;getSolverName(){return"FortyFiveDegreeSimplificationSolver"}_step(){let e=this.input.reroutedPairs[this.nextPairIndex];if(!e)return this.solved=!0,void(this.stats={phase:"complete",simplifiedPairCount:this.nextPairIndex});this.traces=((t)=>{let n=t.pair.connectionNames.join("/"),o=t.pair.connectionNames.map((P)=>t.traces.map((E,B)=>({trace:E,index:B})).filter(({trace:E})=>E.connection_name===P));if(o[0].length!==1||o[1].length!==1)throw Error(`FortyFiveDegreeSimplificationSolver: pair ${n} must resolve to exactly two traces`);let i=o[0][0].index,r=o[1][0].index;if(i===r)throw Error(`FortyFiveDegreeSimplificationSolver: pair ${n} resolved both members to one trace`);let s=structuredClone(t.traces),a={immutableTraces:s.filter((P,E)=>E!==i&&E!==r),obstacles:t.obstacles,bounds:t.bounds,layerCount:t.layerCount,minTraceToPadEdgeClearance:t.minTraceToPadEdgeClearance},c=(P)=>{let E=Om(P[i],t.layerCount),B=Om(P[r],t.layerCount),w=0;for(let[T,Q]of[[E.segments,B.segments],[B.segments,E.segments]])for(let N of T){if(N.terminal!==null)continue;let F=Q.filter((H)=>H.layer===N.layer);if(F.length===0)throw Error(`FortyFiveDegreeSimplificationSolver: pair ${n} lost common-layer interior copper`);w=Math.max(w,Math.min(...F.map((H)=>OI(N.start,N.end,H.start,H.end))))}return w},l=(P)=>{let E=Om(P[i],t.layerCount),B=Om(P[r],t.layerCount),w=Number.POSITIVE_INFINITY;for(let[T,Q]of[[E.segments,B.segments],[B.segments,E.segments]])for(let N of T)if(N.terminal===null)for(let F of Q)F.layer===N.layer&&(w=Math.min(w,OI(N.start,N.end,F.start,F.end)-N.width/2-F.width/2));return Number.isFinite(w)?w:null},d=(P)=>{let E=Om(P[i],t.layerCount),B=Om(P[r],t.layerCount);return Bge(E,B,a)};if(!d(s))throw Error(`FortyFiveDegreeSimplificationSolver: rerouted pair ${n} has invalid complete copper before simplification`);if(t.pair.maxUncoupledLength!==void 0&&t.pair.minimumCenterlineDistance!==void 0&&t.pair.maximumCenterlineDistance!==void 0&&Math.abs(t.pair.minimumCenterlineDistance-t.pair.maximumCenterlineDistance)<=vI)return s;let u=Om(s[i],t.layerCount),h=Om(s[r],t.layerCount),A=Math.abs(P6(u)-P6(h)),m=l(s),p=t.pair.maximumCenterlineDistance??1+u.width/2+h.width/2,g=Math.min(c(s),p),_=(P)=>{if(!d(P))return!1;if(c(P)>g+vI)return!1;let E=l(P);return m===null||E===null||E>=m-vI},f=(P,E)=>{let B=Math.abs(E.x-P.x),w=Math.abs(E.y-P.y),T=E.x>=P.x?1:-1,Q=E.y>=P.y?1:-1,N=[],F={x:E.x-T*w,y:P.y};(F.x-P.x)*T>=-0.00000001&&(F.x-E.x)*T<=vI&&N.push([P,F,E]);let H={x:P.x,y:E.y-Q*B};(H.y-P.y)*Q>=-0.00000001&&(H.y-E.y)*Q<=vI&&N.push([P,H,E]);let z={x:P.x+T*Math.min(B,w),y:P.y+Q*Math.min(B,w)};return N.push([P,z,E]),N.map((Y,U)=>{let X=Y.filter((W,j)=>j===0||Math.hypot(W.x-Y[j-1].x,W.y-Y[j-1].y)>vI),V=X.slice(0,-1).map((W,j)=>{let q=X[j+1],ne=Math.abs(q.x-W.x),ce=Math.abs(q.y-W.y);return{length:Math.hypot(ne,ce),straight:ne<=vI||ce<=vI?Math.hypot(ne,ce):0}});return{points:X,usableStraightLength:Math.max(0,...V.map((W)=>W.straight)),bendCount:Math.max(0,X.length-2),priority:U}}).filter((Y,U,X)=>X.findIndex((V)=>JSON.stringify(V.points)===JSON.stringify(Y.points))===U).sort((Y,U)=>U.usableStraightLength-Y.usableStraightLength||Y.bendCount-U.bendCount||Y.priority-U.priority)},y=(P)=>{let E=[];for(let B=0;B<P.route.length-1;B++){let w=P.route[B];if(w?.route_type==="wire")for(let T=P.route.length-1;T>=B+1;T--){if(B===0||T===P.route.length-1)continue;let Q=P.route[T];Q?.route_type==="wire"&&Q.layer===w.layer&&(P.route.slice(B+1,T).some((N)=>N.route_type!=="wire"||N.layer!==w.layer)||E.push({startIndex:B,endIndex:T,skippedPointCount:T-B-1}))}}return E.sort((B,w)=>w.skippedPointCount-B.skippedPointCount||B.startIndex-w.startIndex||w.endIndex-B.endIndex)},x=(P,E,B)=>{let w=P.route[E.startIndex],T=P.route[E.endIndex],Q=Math.max(w.width,T.width),N=B.points.slice(1,-1).map((F)=>({route_type:"wire",...F,width:Q,layer:w.layer}));return{...P,route:[...P.route.slice(0,E.startIndex+1),...N,...P.route.slice(E.endIndex)]}};for(let P of[i,r]){let E=!0;for(;E;){E=!1;let B=s[P];for(let w of y(B)){let T=B.route[w.startIndex],Q=B.route[w.endIndex],N=B.route.slice(w.startIndex,w.endIndex+1),F=N.slice(0,-1).every((H,z)=>{let Y=N[z+1],U=Math.abs(Y.x-H.x),X=Math.abs(Y.y-H.y);return U<=vI||X<=vI||Math.abs(U-X)<=vI});for(let H of f(T,Q)){if(H.points.length>=N.length&&F)continue;let z=x(B,w,H),Y=[...s];if(Y[P]=z,JSON.stringify(z.route)===JSON.stringify(B.route))continue;if(_(Y)){s[P]=z,E=!0;break}let U=P===i?r:i,X=s[U],V=y(X).find((q)=>q.startIndex===w.startIndex&&q.endIndex===w.endIndex);if(!V)continue;let W=X.route[V.startIndex],j=X.route[V.endIndex];for(let q of f(W,j)){let ne=x(X,V,q),ce=[...Y];if(ce[U]=ne,_(ce)){s[P]=z,s[U]=ne,E=!0;break}}if(E)break}if(E)break}}}if(!_(s))throw Error(`FortyFiveDegreeSimplificationSolver: pair ${n} produced invalid complete copper`);let C=Om(s[i],t.layerCount),I=Om(s[r],t.layerCount),b=Math.abs(P6(C)-P6(I));return Math.abs(b-A)>t.pair.lengthTolerance+vI?structuredClone(t.traces):s})({traces:this.traces,pair:e,obstacles:this.input.obstacles,bounds:this.input.bounds,layerCount:this.input.layerCount,minTraceToPadEdgeClearance:this.input.minTraceToPadEdgeClearance}),this.nextPairIndex++,this.stats={phase:"simplifying",pair:e.connectionNames.join("/"),pairIndex:this.nextPairIndex-1,pairCount:this.input.reroutedPairs.length}}getConstructorParams(){return[this.input]}getOutput(){if(!this.solved)throw Error("FortyFiveDegreeSimplificationSolver: getOutput() called before completion");return this.getBestEffortOutput()}getBestEffortOutput(){return{traces:Mge(this.traces),reroutedPairs:this.input.reroutedPairs.map((e)=>({...e,connectionNames:[...e.connectionNames]}))}}computeProgress(){return this.solved?1:this.input.reroutedPairs.length===0?0:this.nextPairIndex/this.input.reroutedPairs.length}visualize(){return Mte({traces:this.traces,obstacles:this.input.obstacles,bounds:this.input.bounds,layerCount:this.input.layerCount,activeConnectionNames:this.input.reroutedPairs[this.nextPairIndex]?.connectionNames??null,previewPath:null})}},wge=(e,t)=>Math.abs(e-t)<=0.0000001,ZNe=(e,t)=>wge(e.x,t.x)&&wge(e.y,t.y),hGo=(e)=>{let t=e.candidatePair.map((n,o)=>{let i=e.originalPair[o];return{...n,segments:n.segments.filter((r)=>!i.segments.some((s)=>{return c=r,(a=s).layer===c.layer&&!!wge(a.width,c.width)&&!!ZNe(a.start,c.start)&&!!ZNe(a.end,c.end);var a,c})),vias:n.vias.filter((r)=>!i.vias.some((s)=>{return!!ZNe(a=s,c=r)&&!!wge(a.diameter,c.diameter)&&a.layers.length===c.layers.length&&!!a.layers.every((l)=>c.layers.includes(l));var a,c}))}});return[t[0],t[1]]},mGo=class extends Js{constructor(e){super(),this.input=e}input;output=null;visualizationTraces=null;getSolverName(){return"HdRouteReconstructionSolver"}_step(){this.visualizationTraces=((e)=>{let{simpleRouteJson:t}=e.params;if(e.result.matchedHdRoutes.length!==e.binding.solverParams.hdRoutes.length)throw Error("PostProcessingSolver: LengthMatchingSolver changed the search route count");let n=structuredClone(e.binding.baseTraces);for(let o of e.binding.traceBindings){let i=e.result.matchedHdRoutes[o.matchedRouteIndex];if(!i)throw Error(`PostProcessingSolver: missing matched route at index ${o.matchedRouteIndex}`);let r=n[o.traceIndex];if(!r)throw Error(`PostProcessingSolver: missing simplified trace binding at index ${o.traceIndex}`);if(r.connection_name!==i.connectionName)throw Error(`PostProcessingSolver: route binding changed connection "${r.connection_name}" to "${i.connectionName}"`);if(i.route.length<2)throw Error(`PostProcessingSolver: matched connection "${i.connectionName}" has incomplete geometry`);let s=i.route[0],a=i.route.at(-1);if(Math.hypot(s.x-o.startEndpoint.x,s.y-o.startEndpoint.y)>0.00000001||s.z!==o.startEndpoint.z||Math.hypot(a.x-o.endEndpoint.x,a.y-o.endEndpoint.y)>0.00000001||a.z!==o.endEndpoint.z)throw Error(`PostProcessingSolver: matched connection "${i.connectionName}" moved a preserved endpoint`);let c=[],l=0,d=(h)=>({route_type:"wire",x:h.x,y:h.y,width:h.traceThickness??i.traceThickness,layer:uS(h.z,t.layerCount)});c.push(d(i.route[0]));for(let h=1;h<i.route.length;h++){let A=i.route[h-1],m=i.route[h];if(A.z===m.z){c.push(d(m));continue}if(Math.hypot(A.x-m.x,A.y-m.y)>0.00000001)throw Error(`PostProcessingSolver: matched connection "${i.connectionName}" moves while changing layers`);let p=o.viaTemplates[l++];if(!p)throw Error(`PostProcessingSolver: matched connection "${i.connectionName}" added an unbound via`);if(Math.hypot(p.x-m.x,p.y-m.y)>0.00000001)throw Error(`PostProcessingSolver: matched connection "${i.connectionName}" moved a preserved via`);let g=uS(A.z,t.layerCount),_=uS(m.z,t.layerCount),f=new Set([p.from_layer,p.to_layer]);if(!f.has(g)||!f.has(_))throw Error(`PostProcessingSolver: matched connection "${i.connectionName}" changed a preserved via span`);c.push({...p}),c.push(d(m))}if(l!==o.viaTemplates.length)throw Error(`PostProcessingSolver: matched connection "${i.connectionName}" removed a preserved via`);let u=c.filter((h)=>h.route_type==="wire");for(let h of u)delete h.start_pcb_port_id,delete h.end_pcb_port_id;o.startPortId&&(u[0].start_pcb_port_id=o.startPortId),o.endPortId&&(u.at(-1).end_pcb_port_id=o.endPortId),n[o.traceIndex]={...r,route:c}}for(let o of e.binding.solverParams.differentialPairs){let i=o.connectionNames.join("/"),r=o.connectionNames.map((f)=>n.map((y,x)=>({trace:y,index:x})).filter(({trace:y})=>y.connection_name===f));if(r[0].length!==1||r[1].length!==1)throw Error(`PostProcessingSolver: reconstructed pair ${i} does not resolve to complete copper`);let s=r[0][0],a=r[1][0],c=o.connectionNames.map((f)=>{let y=e.binding.baseTraces.filter((x)=>x.connection_name===f);if(y.length!==1)throw Error(`PostProcessingSolver: original pair ${i} does not resolve to complete copper`);return y[0]}),l=Om(s.trace,t.layerCount),d=Om(a.trace,t.layerCount),u=Om(c[0],t.layerCount),h=Om(c[1],t.layerCount),A=Math.abs(P6(l)-P6(d));if(A>o.lengthTolerance+0.0000001)throw new Cke({message:`PostProcessingSolver: reconstructed pair ${i} exceeds length tolerance ${o.lengthTolerance} with error ${A}`,connectionNames:[...o.connectionNames],reason:"length-tolerance-unsatisfied"});let m={immutableTraces:n.filter((f,y)=>y!==s.index&&y!==a.index),obstacles:t.obstacles,bounds:t.bounds,layerCount:t.layerCount,minTraceToPadEdgeClearance:t.minTraceToPadEdgeClearance},p=Bge(l,d,{...m,obstacles:[]}),g=hGo({candidatePair:[l,d],originalPair:[u,h]}),_=Bge(g[0],g[1],{...m,immutableTraces:[]});if(!p||!_)throw new Cke({message:`PostProcessingSolver: length matching produced invalid complete copper for pair ${i}`,connectionNames:[...o.connectionNames],reason:"invalid-final-copper"})}return n})(this.input),this.output=QGt({...this.input,rejectInsideJumperPad:!0}),this.stats={phase:"complete",routeCount:this.output.hdRoutes.length},this.solved=!0}getConstructorParams(){return[this.input]}getOutput(){if(!this.output||!this.solved)throw Error("HdRouteReconstructionSolver: getOutput() called before completion");return structuredClone(this.output)}visualize(){let e=this.visualizationTraces??this.input.simplified.traces,{obstacles:t,bounds:n,layerCount:o}=this.input.params.simpleRouteJson;return Mte({traces:e,obstacles:t,bounds:n,layerCount:o,activeConnectionNames:null,previewPath:null})}},OGt=class extends KE{differentialPairReroutingSolver;fortyFiveDegreeSimplificationSolver;lengthMatchingSolver;hdRouteReconstructionSolver;lengthMatchingBinding=null;model;fallbackOutput=null;postProcessingErrors=[];pipelineDef=[bh("differentialPairReroutingSolver",dGo,(e)=>[e.model.params]),bh("fortyFiveDegreeSimplificationSolver",uGo,(e)=>{let t=e.getStageOutput("differentialPairReroutingSolver");if(!t)throw Error("PostProcessingSolver: rerouting stage completed without output");let{obstacles:n,bounds:o,layerCount:i,minTraceToPadEdgeClearance:r}=e.model.params.simpleRouteJson;return[{...t,obstacles:n,bounds:o,layerCount:i,minTraceToPadEdgeClearance:r}]}),bh("lengthMatchingSolver",RGt,(e)=>{let t=e.getStageOutput("fortyFiveDegreeSimplificationSolver");if(!t)throw Error("PostProcessingSolver: 45-degree simplification stage completed without output");return e.lengthMatchingBinding=KMt({result:t,params:e.model.params}),[e.lengthMatchingBinding.solverParams]}),bh("hdRouteReconstructionSolver",mGo,(e)=>{let t=e.getStageOutput("fortyFiveDegreeSimplificationSolver"),n=e.getStageOutput("lengthMatchingSolver");if(!t||!n||!e.lengthMatchingBinding)throw Error("PostProcessingSolver: reconstruction stage is missing a required binding or output");return[{binding:e.lengthMatchingBinding,result:n,simplified:t,params:e.model.params,model:e.model}]},{onSolved:(e)=>{let t=e.getStageOutput("differentialPairReroutingSolver");if(!t)throw Error("PostProcessingSolver: cannot summarize missing rerouting output");e.stats={phase:"complete",acceptedPairCount:t.reroutedPairs.length},t.failures.length>0&&(e.stats.skippedPairCount=t.failures.length,e.stats.postProcessingErrorCount=t.failures.length)}})];constructor(e){super(structuredClone(e));let t=null;try{(function(o){if(!o||typeof o!="object")throw Error("PostProcessingSolver: params must be an object");if(!Array.isArray(o.hdRoutes))throw Error("PostProcessingSolver: hdRoutes must be an array");if(!Array.isArray(o.differentialPairs))throw Error("PostProcessingSolver: differentialPairs must be an array");if(!Array.isArray(o.obstacles))throw Error("PostProcessingSolver: obstacles must be an array");if(o.minTraceToPadEdgeClearance!==void 0&&(!Number.isFinite(o.minTraceToPadEdgeClearance)||o.minTraceToPadEdgeClearance<0))throw Error("PostProcessingSolver: minTraceToPadEdgeClearance must be finite and nonnegative");if(!Number.isInteger(o.layerCount)||o.layerCount<1)throw Error("PostProcessingSolver: layerCount must be a positive integer");for(let d of o.obstacles){if(!d||typeof d!="object"||d.type!=="rect"||!d.center||!Number.isFinite(d.center.x)||!Number.isFinite(d.center.y)||!Number.isFinite(d.width)||d.width<=0||!Number.isFinite(d.height)||d.height<=0||!Array.isArray(d.layers)||d.layers.some((u)=>typeof u!="string")||!Array.isArray(d.connectedTo)||d.connectedTo.some((u)=>typeof u!="string"||u.length===0)||d.ccwRotationDegrees!==void 0&&!Number.isFinite(d.ccwRotationDegrees))throw Error("PostProcessingSolver: obstacle declaration is invalid");QU(d,o.layerCount)}let{minX:i,maxX:r,minY:s,maxY:a}=o.bounds??{};if(![i,r,s,a].every(Number.isFinite)||i>=r||s>=a)throw Error("PostProcessingSolver: bounds must have finite positive extents");let c=new Set(o.differentialPairs.flatMap((d)=>d.connectionNames));for(let d of o.hdRoutes){if(!d||typeof d!="object"||typeof d.connectionName!="string"||d.connectionName.length===0||d.rootConnectionName!==void 0&&(typeof d.rootConnectionName!="string"||d.rootConnectionName.length===0)||!Number.isFinite(d.traceThickness)||d.traceThickness<=0||!Number.isFinite(d.viaDiameter)||d.viaDiameter<0||d.viaDiameter===0&&c.has(d.connectionName)||!Array.isArray(d.route)||!Array.isArray(d.vias)||d.jumpers!==void 0&&!Array.isArray(d.jumpers))throw Error("PostProcessingSolver: HD route declaration is invalid");if(d.startPcbPortId!==void 0&&(typeof d.startPcbPortId!="string"||d.startPcbPortId.length===0)||d.endPcbPortId!==void 0&&(typeof d.endPcbPortId!="string"||d.endPcbPortId.length===0))throw Error(`PostProcessingSolver: HD route "${d.connectionName}" has invalid terminal metadata`);for(let u of d.route)if(!u||typeof u!="object"||!Number.isFinite(u.x)||!Number.isFinite(u.y)||!Number.isInteger(u.z)||u.z<0||u.z>=o.layerCount||u.traceThickness!==void 0&&(!Number.isFinite(u.traceThickness)||u.traceThickness<=0))throw Error(`PostProcessingSolver: HD route "${d.connectionName}" has an invalid route point`);for(let u of d.vias)if(!u||typeof u!="object"||!Number.isFinite(u.x)||!Number.isFinite(u.y)||u.zLayers!==void 0&&(!Array.isArray(u.zLayers)||u.zLayers.some((h)=>!Number.isInteger(h)||h<0||h>=o.layerCount)))throw Error(`PostProcessingSolver: HD route "${d.connectionName}" has an invalid via`);if(d.vias.length>0&&d.viaDiameter<=0)throw Error(`PostProcessingSolver: HD route "${d.connectionName}" has a non-positive via diameter`);for(let u of d.jumpers??[])if(!(u&&typeof u=="object"&&u.route_type==="jumper"&&Number.isFinite(u.start?.x)&&Number.isFinite(u.start?.y)&&Number.isFinite(u.end?.x)&&Number.isFinite(u.end?.y)&&["0603","1206","1206x4_pair"].includes(u.footprint)))throw Error(`PostProcessingSolver: HD route "${d.connectionName}" has an invalid jumper`)}let l=new Set;for(let d of o.differentialPairs){if(!d||typeof d!="object"||!Array.isArray(d.connectionNames)||d.connectionNames.length!==2||d.connectionNames[0]===d.connectionNames[1]||!d.connectionNames.every((u)=>typeof u=="string"&&u.length>0)||!Number.isFinite(d.lengthTolerance)||d.lengthTolerance<0)throw Error("PostProcessingSolver: differential pair declaration is invalid");for(let u of[d.minimumCenterlineDistance,d.maximumCenterlineDistance])if(u!==void 0&&(!Number.isFinite(u)||u<=0))throw Error("PostProcessingSolver: differential pair centerline distances must be positive finite numbers");if(d.maxUncoupledLength!==void 0&&(!Number.isFinite(d.maxUncoupledLength)||d.maxUncoupledLength<0))throw Error("PostProcessingSolver: differential pair maxUncoupledLength must be a non-negative finite number");if(d.minimumCenterlineDistance!==void 0&&d.maximumCenterlineDistance!==void 0&&d.minimumCenterlineDistance>d.maximumCenterlineDistance)throw Error("PostProcessingSolver: differential pair minimumCenterlineDistance cannot exceed maximumCenterlineDistance");for(let u of d.connectionNames){if(l.has(u))throw Error(`PostProcessingSolver: connection "${u}" belongs to multiple differential pairs`);l.add(u)}}for(let d of[0.25,0.5])HGt({config:o.routingGrid,bounds:o.bounds,defaultInnerGridStep:d})})(e)}catch(o){if(!(o instanceof kGt))throw o;t=o}if(this.model=jMt(e),t)return void this.finishWithBestEffortOutput({stage:"differentialPairReroutingSolver",message:t.message,reason:t.reason});let n=LGt(this.model.params)+Math.max(1,e.differentialPairs.length+1)+1e5+10;if(!Number.isSafeInteger(n))throw Error("PostProcessingSolver: derived pipeline iteration bound exceeds the safe integer range");this.MAX_ITERATIONS=n}getSolverName(){return"PostProcessingSolver"}getConstructorParams(){return[structuredClone(this.inputProblem)]}_step(){let e=this.getCurrentStageName();try{super._step()}catch(n){let o=this.classifyOptimizationFailure(n,e);if(!o)throw n;return void this.finishWithBestEffortOutput(o)}if(!this.failed)return;let t=this.classifyIterationFailure(this.error,e);if(!t)throw Error(this.error??"PostProcessingSolver failed without an error message");this.finishWithBestEffortOutput(t)}tryFinalAcceptance(){let e=this.getCurrentStageName();e!=="differentialPairReroutingSolver"&&e!=="lengthMatchingSolver"||this.finishWithBestEffortOutput({stage:e,message:"PostProcessingSolver reached its iteration limit",reason:"iteration-limit-exhausted"})}classifyOptimizationFailure(e,t){return t==="lengthMatchingSolver"&&e instanceof w_e?{stage:t,message:e.message,connectionName:e.connectionName,reason:e.reason}:t==="hdRouteReconstructionSolver"&&e instanceof Cke||t==="differentialPairReroutingSolver"&&e instanceof T8&&e.reason==="no-valid-candidate"?{stage:t,message:e.message,connectionNames:[...e.connectionNames],reason:e.reason}:null}classifyIterationFailure(e,t){return t!=="differentialPairReroutingSolver"&&t!=="lengthMatchingSolver"?null:e&&e.endsWith("ran out of iterations")?{stage:t,message:e,reason:"iteration-limit-exhausted"}:null}createBestEffortOutput(e){let t=this.lengthMatchingBinding;if(!t){let o=this.getStageOutput("fortyFiveDegreeSimplificationSolver")??this.fortyFiveDegreeSimplificationSolver?.getBestEffortOutput(),i=this.getStageOutput("differentialPairReroutingSolver")??this.differentialPairReroutingSolver?.getBestEffortOutput(),r=o??i;r&&(t=KMt({result:r,params:this.model.params}))}if(!t)return{output:{hdRoutes:structuredClone(this.inputProblem.hdRoutes),postProcessingErrors:[]},source:"input-hd-routes"};let n=this.getStageOutput("lengthMatchingSolver");return n||(n=this.lengthMatchingSolver?.getBestEffortOutput()),n&&e.reason!=="invalid-final-copper"||(n={matchedHdRoutes:t.solverParams.hdRoutes}),{output:QGt({binding:t,result:n,model:this.model}),source:"best-effort-hd-routes"}}finishWithBestEffortOutput(e){let t=this.createBestEffortOutput(e),n={type:"post_processing_error",...e,returnedRouteSource:t.source};this.postProcessingErrors.push(n),this.fallbackOutput=t.output,this.activeSubSolver=null,this.error=null,this.failed=!1,this.solved=!0,this.progress=1,this.stats={phase:"complete",postProcessingErrorCount:this.postProcessingErrors.length}}getOutput(){if(!this.solved)throw Error("PostProcessingSolver: getOutput() called before the solver completed");let e=this.fallbackOutput??this.getStageOutput("hdRouteReconstructionSolver");if(!e)throw Error("PostProcessingSolver: completed pipeline is missing reconstruction output");let t=this.getStageOutput("differentialPairReroutingSolver")??this.differentialPairReroutingSolver?.getBestEffortOutput(),n=t?.failures??[],o="input-hd-routes";(t?.reroutedPairs.length??0)>0&&(o="best-effort-hd-routes");let i=[...n.map((s)=>({type:"post_processing_error",stage:"differentialPairReroutingSolver",message:s.message,connectionNames:[...s.connectionNames],reason:s.reason,returnedRouteSource:o})),...this.postProcessingErrors],r=structuredClone(e);return r.postProcessingErrors=structuredClone(i),r}initialVisualize(){if(this.fallbackOutput)return{lines:this.fallbackOutput.hdRoutes.map((i)=>({points:i.route.map(({x:r,y:s})=>({x:r,y:s})),strokeWidth:i.traceThickness}))};let{traces:e,obstacles:t,bounds:n,layerCount:o}=this.model.params.simpleRouteJson;return Mte({traces:structuredClone(e),obstacles:t,bounds:n,layerCount:o,activeConnectionNames:null,previewPath:null})}finalVisualize(){if(this.fallbackOutput)return this.initialVisualize();let e=jMt({...this.inputProblem,hdRoutes:this.getOutput().hdRoutes}),{traces:t,obstacles:n,bounds:o,layerCount:i}=e.params.simpleRouteJson;return Mte({traces:t,obstacles:n,bounds:o,layerCount:i,activeConnectionNames:null,previewPath:null})}},ane=class e{static generators=new Map;static register(t){e.generators.set(t.componentKind,t)}static create(t){let n=t.detectedComponent.componentKind,o=e.generators.get(n);if(!o)throw Error(`No topology generator registered for component kind "${n}"`);return new o(t)}},Bte=(e)=>[e.obstacle.obstacleId??e.obstacle.componentId??"obstacle",e.start.x.toFixed(4),e.start.y.toFixed(4),e.end.x.toFixed(4),e.end.y.toFixed(4),e.expansionDirection.x,e.expansionDirection.y].join(":"),zGt=(e)=>{let t=0;for(let n of e)t=31*t+n.charCodeAt(0)>>>0;return t},zm=(e,t)=>`hsla(${zGt(Bte(e))%360},72%,36%,${t})`,wte=(e)=>{let t=e.expansionDirection;return t.x<0?"left":t.x>0?"right":t.y<0?"bottom":"top"},FE=(e)=>({x:(e.start.x+e.end.x)/2,y:(e.start.y+e.end.y)/2}),Ike=(e)=>{let t=/^bga-gapfill-(\d+)-/.exec(e.capacityMeshNodeId);return t?Number.parseInt(t[1],10):null},$Mt=(e,t)=>{let n=FE(e),o=FE(t),i=n.y-o.y;if(Math.abs(i)>0.000001)return i;let r=n.x-o.x;return Math.abs(r)>0.000001?r:Bte(e).localeCompare(Bte(t))},Tge=(e)=>{let t=[...e].sort($Mt),n=[],o=t.shift();for(;o&&(n.push(o),t.length!==0);){let i=FE(o),r=0,s=Number.POSITIVE_INFINITY;for(let a=0;a<t.length;a++){let c=t[a],l=FE(c),d=(l.x-i.x)**2+(l.y-i.y)**2;d<s-0.000000001?(s=d,r=a):Math.abs(d-s)<=0.000000001&&$Mt(c,t[r])<0&&(r=a)}o=t.splice(r,1)[0]}return n},mS=(e,t)=>{let n=Bte(e),o=t.findIndex((i)=>Bte(i)===n);return o>=0?`E${o+1}`:`E${zGt(n).toString(36).slice(0,4)}`},bke=(e)=>e.flatMap((t)=>{let n=Gd(t);return[{obstacle:t,start:{x:n.minX,y:n.minY},end:{x:n.minX,y:n.maxY},expansionDirection:{x:-1,y:0}},{obstacle:t,start:{x:n.maxX,y:n.minY},end:{x:n.maxX,y:n.maxY},expansionDirection:{x:1,y:0}},{obstacle:t,start:{x:n.minX,y:n.minY},end:{x:n.maxX,y:n.minY},expansionDirection:{x:0,y:-1}},{obstacle:t,start:{x:n.minX,y:n.maxY},end:{x:n.maxX,y:n.maxY},expansionDirection:{x:0,y:1}}]}),ak=0.001,r_e=0.001,pGo=class extends Js{constructor(e){super(),this.inputProblem=e}inputProblem;meshIndex;allEdges=[];queueEdges=[];disconnectedEdges=[];currentEdge=null;lastSearchBounds=null;lastCandidateMeshNodes=[];lastMatchedMeshNode=null;_setup(){let e=Math.max(this.inputProblem.meshNodes.length,1);this.meshIndex=new Vm(e);for(let n of this.inputProblem.meshNodes){let o=Gd(n);this.meshIndex.add(o.minX,o.minY,o.maxX,o.maxY)}this.meshIndex.finish();let t=bke(this.inputProblem.unmarkedComponentObstacles);this.queueEdges=t,this.allEdges=Tge(t),this.currentEdge=null,this.lastSearchBounds=null,this.lastCandidateMeshNodes=[],this.lastMatchedMeshNode=null}_step(){let e=this.queueEdges.shift();if(!e)return this.currentEdge=null,this.lastSearchBounds=null,this.lastCandidateMeshNodes=[],this.lastMatchedMeshNode=null,void(this.solved=!0);this.currentEdge=e,this.lastMatchedMeshNode=null;let t=Math.abs(e.start.x-e.end.x)<=ak,n=t?{minX:e.start.x-r_e,maxX:e.start.x+r_e,minY:Math.min(e.start.y,e.end.y),maxY:Math.max(e.start.y,e.end.y)}:{minX:Math.min(e.start.x,e.end.x),maxX:Math.max(e.start.x,e.end.x),minY:e.start.y-r_e,maxY:e.start.y+r_e};this.lastSearchBounds=n;let o=this.meshIndex.search(n.minX,n.minY,n.maxX,n.maxY);this.lastCandidateMeshNodes=o.map((r)=>this.inputProblem.meshNodes[r]);let i=!1;for(let r of o){let s=this.inputProblem.meshNodes[r],a=Gd(s);if(t){if(!(Math.min(a.maxY,Math.max(e.start.y,e.end.y))-Math.max(a.minY,Math.min(e.start.y,e.end.y))>ak))continue;if(e.expansionDirection.x===-1&&Math.abs(a.maxX-e.start.x)<=ak){i=!0,this.lastMatchedMeshNode=s;break}if(e.expansionDirection.x===1&&Math.abs(a.minX-e.start.x)<=ak){i=!0,this.lastMatchedMeshNode=s;break}continue}if(Math.min(a.maxX,Math.max(e.start.x,e.end.x))-Math.max(a.minX,Math.min(e.start.x,e.end.x))>ak){if(e.expansionDirection.y===-1&&Math.abs(a.maxY-e.start.y)<=ak){i=!0,this.lastMatchedMeshNode=s;break}if(e.expansionDirection.y===1&&Math.abs(a.minY-e.start.y)<=ak){i=!0,this.lastMatchedMeshNode=s;break}}}i||this.disconnectedEdges.push(e)}getOutput(){return this.disconnectedEdges}visualize(){let e=this.disconnectedEdges,t=this.allEdges.length>0?this.allEdges:[...e,...this.currentEdge?[this.currentEdge]:[]],n=this.currentEdge?zm(this.currentEdge,0.88):"rgba(40,40,40,0.4)",o=this.inputProblem.meshNodes.map((u)=>({...FA(u,{rectMargin:0.01}),fill:u._containsObstacle?"rgba(120,120,120,0.18)":"rgba(120,120,120,0.08)",stroke:u._containsObstacle?"rgba(120,120,120,0.42)":"rgba(120,120,120,0.24)"})),i=this.lastSearchBounds&&this.currentEdge?[{center:(r=this.lastSearchBounds,{x:(r.minX+r.maxX)/2,y:(r.minY+r.maxY)/2}),width:this.lastSearchBounds.maxX-this.lastSearchBounds.minX,height:this.lastSearchBounds.maxY-this.lastSearchBounds.minY,fill:zm(this.currentEdge,0.1),stroke:zm(this.currentEdge,0.36),label:[mS(this.currentEdge,t),"search band"].join(" ")}]:[];var r;let s=this.lastCandidateMeshNodes.map((u)=>({...FA(u,{rectMargin:0.018}),fill:u===this.lastMatchedMeshNode?"rgba(0,180,90,0.24)":this.currentEdge?zm(this.currentEdge,0.16):"rgba(80,120,160,0.16)",stroke:u===this.lastMatchedMeshNode?"rgba(0,150,80,0.88)":n,label:[u===this.lastMatchedMeshNode?"matched":"candidate",u.capacityMeshNodeId,`z:${u.availableZ.join(",")}`].join(`
`)})),a=this.inputProblem.unmarkedComponentObstacles.map((u)=>({center:u.center,width:u.width,height:u.height,fill:"rgba(160,160,160,0.10)",stroke:"rgba(160,160,160,0.40)",label:u.obstacleId??u.componentId??"obstacle"})),c=e.map((u)=>({points:[u.start,u.end],strokeColor:zm(u,0.14),strokeWidth:0.01,strokeDash:"5 4",label:[mS(u,t),wte(u),"disconnected"].join(" ")})),l=[],d=[];if(this.currentEdge){let u=FE(this.currentEdge);l.push({points:[this.currentEdge.start,this.currentEdge.end],strokeColor:zm(this.currentEdge,1),strokeWidth:0.06,label:[mS(this.currentEdge,t),wte(this.currentEdge),"checking"].join(" ")},{points:[u,{x:u.x+0.16*this.currentEdge.expansionDirection.x,y:u.y+0.16*this.currentEdge.expansionDirection.y}],strokeColor:zm(this.currentEdge,0.82),strokeWidth:0.02,strokeDash:"3 3"}),d.push({...u,color:zm(this.currentEdge,1),label:mS(this.currentEdge,t)})}return{rects:[...o,...i,...s,...a],lines:[...c,...l],points:d}}},x8=0.001,C8=0.001,s_e=0.000001,AGo=class extends Js{constructor(e){super(),this.inputProblem=e}inputProblem;meshIndex;meshBounds;expandedNodes=[];_setup(){let e=Math.max(this.inputProblem.meshNodes.length,1);this.meshIndex=new Vm(e);let{POSITIVE_INFINITY:t,NEGATIVE_INFINITY:n,POSITIVE_INFINITY:o,NEGATIVE_INFINITY:i}=Number;for(let r of this.inputProblem.meshNodes){let s=Gd(r);this.meshIndex.add(s.minX,s.minY,s.maxX,s.maxY),t=Math.min(t,s.minX),n=Math.max(n,s.maxX),o=Math.min(o,s.minY),i=Math.max(i,s.maxY)}this.meshIndex.finish(),this.meshBounds=this.inputProblem.meshNodes.length?{minX:t,maxX:n,minY:o,maxY:i}:{minX:0,maxX:0,minY:0,maxY:0}}getObstacleAvailableZ(e){return e.__zLayers??e.layers.map((t)=>Wi(t,this.inputProblem.layerCount))}getSharedOverlapArea(e,t){if(!e.availableZ.some((s)=>t.availableZ.includes(s)))return 0;let n=Gd(e),o=Gd(t),i=Math.min(n.maxX,o.maxX)-Math.max(n.minX,o.minX),r=Math.min(n.maxY,o.maxY)-Math.max(n.minY,o.minY);return i<=s_e||r<=s_e?0:i*r}getNodeObstacleOverlapArea(e,t){let n=this.getObstacleAvailableZ(t);if(!e.availableZ.some((a)=>n.includes(a)))return 0;let o=Gd(e),i=Gd(t),r=Math.min(o.maxX,i.maxX)-Math.max(o.minX,i.minX),s=Math.min(o.maxY,i.maxY)-Math.max(o.minY,i.minY);return r<=s_e||s<=s_e?0:r*s}getClosestMeshNode(e,t){let n=Math.abs(e.start.x-e.end.x)<=x8,o=this.getObstacleAvailableZ(e.obstacle),i=n?e.expansionDirection.x<0?{minX:this.meshBounds.minX,maxX:e.start.x,minY:Math.min(e.start.y,e.end.y)-C8,maxY:Math.max(e.start.y,e.end.y)+C8}:{minX:e.start.x,maxX:this.meshBounds.maxX,minY:Math.min(e.start.y,e.end.y)-C8,maxY:Math.max(e.start.y,e.end.y)+C8}:e.expansionDirection.y<0?{minX:Math.min(e.start.x,e.end.x)-C8,maxX:Math.max(e.start.x,e.end.x)+C8,minY:this.meshBounds.minY,maxY:e.start.y}:{minX:Math.min(e.start.x,e.end.x)-C8,maxX:Math.max(e.start.x,e.end.x)+C8,minY:e.start.y,maxY:this.meshBounds.maxY},r=this.meshIndex.search(i.minX,i.minY,i.maxX,i.maxY),s=null,a=Number.POSITIVE_INFINITY,c=[...r.map((l)=>this.inputProblem.meshNodes[l]),...t];for(let l of c){if(l._containsObstacle)continue;if(!l.availableZ.some((h)=>o.includes(h)))continue;let d=Gd(l);if((n?Math.min(Math.max(e.start.y,e.end.y),d.maxY)-Math.max(Math.min(e.start.y,e.end.y),d.minY):Math.min(Math.max(e.start.x,e.end.x),d.maxX)-Math.max(Math.min(e.start.x,e.end.x),d.minX))<=x8)continue;let u=n?e.expansionDirection.x<0?e.start.x-d.maxX:d.minX-e.start.x:e.expansionDirection.y<0?e.start.y-d.maxY:d.minY-e.start.y;u<x8||(u>=a||(a=u,s=l))}return s}createExpandedNode(e,t,n){let o=Gd(t),i=this.getObstacleAvailableZ(e.obstacle);if(Math.abs(e.start.x-e.end.x)<=x8){let l=Math.max(Math.min(e.start.y,e.end.y),o.minY),d=Math.min(Math.max(e.start.y,e.end.y),o.maxY),u=e.expansionDirection.x<0?o.maxX:e.start.x,h=e.expansionDirection.x<0?e.start.x:o.minX;return h-u<=x8||d-l<=x8?null:{capacityMeshNodeId:`bga-gapfill-${n}-${e.obstacle.obstacleId??"no-obstacle"}-${t.capacityMeshNodeId}`,center:{x:(u+h)/2,y:(l+d)/2},width:h-u,height:d-l,layer:`z${i.join(",")}`,availableZ:i}}let r=Math.max(Math.min(e.start.x,e.end.x),o.minX),s=Math.min(Math.max(e.start.x,e.end.x),o.maxX),a=e.expansionDirection.y<0?o.maxY:e.start.y,c=e.expansionDirection.y<0?e.start.y:o.minY;return s-r<=x8||c-a<=x8?null:{capacityMeshNodeId:`bga-gapfill-${n}-${e.obstacle.obstacleId??"no-obstacle"}-${t.capacityMeshNodeId}`,center:{x:(r+s)/2,y:(a+c)/2},width:s-r,height:c-a,layer:`z${i.join(",")}`,availableZ:i}}overlapsExistingGeometry(e,t){for(let n of this.inputProblem.meshNodes)if(this.getSharedOverlapArea(e,n)>0)return!0;for(let n of t)if(this.getSharedOverlapArea(e,n)>0)return!0;for(let n of this.inputProblem.edgesWithObstacle)if(this.getNodeObstacleOverlapArea(e,n.obstacle)>0)return!0;return!1}_step(){let e=[];for(let[t,n]of this.inputProblem.edgesWithObstacle.entries()){let o=this.getClosestMeshNode(n,e);if(!o)continue;let i=this.createExpandedNode(n,o,t);i&&(this.overlapsExistingGeometry(i,e)||e.push(i))}this.expandedNodes=e,this.solved=!0}getOutput(){return this.expandedNodes}visualize(){let e=this.inputProblem.edgesWithObstacle,t=Tge(e);return{rects:[...this.inputProblem.meshNodes.map((n)=>({...FA(n,{rectMargin:0.01}),fill:n._containsObstacle?"rgba(255,0,0,0.16)":"rgba(0,120,255,0.08)",stroke:n._containsObstacle?"rgba(255,0,0,0.35)":"rgba(0,120,255,0.28)"})),...this.expandedNodes.map((n)=>{let o=Ike(n),i=o===null?null:e[o]??null;return{...FA(n,{rectMargin:0.012,zOffset:0.01}),fill:i?zm(i,0.24):"rgba(0,160,100,0.24)",stroke:i?zm(i,0.72):"rgba(0,160,100,0.68)",label:[i?mS(i,t):"E?","expanded",n.capacityMeshNodeId,`z:${n.availableZ.join(",")}`].join(`
`)}})],lines:[...this.inputProblem.edgesWithObstacle.map((n)=>({points:[n.start,n.end],strokeColor:zm(n,0.9),strokeWidth:0.034,label:[mS(n,t),wte(n)].join(" ")})),...this.inputProblem.edgesWithObstacle.map((n)=>{let o=FE(n);return{points:[o,{x:o.x+0.16*n.expansionDirection.x,y:o.y+0.16*n.expansionDirection.y}],strokeColor:zm(n,0.7),strokeWidth:0.016,strokeDash:"3 3"}})],points:this.inputProblem.edgesWithObstacle.map((n)=>({...FE(n),color:zm(n,0.95),label:mS(n,t)}))}}},ck=0.001,_Go=class extends KE{constructor(e){super(e),this.inputProblem=e}inputProblem;detectEdgesNotConnectedToMesh;expandUnconnectedEdgesToMesh;pipelineDef=[bh("detectEdgesNotConnectedToMesh",pGo,(e)=>[e.inputProblem]),bh("expandUnconnectedEdgesToMesh",AGo,(e)=>[{meshNodes:e.inputProblem.meshNodes,edgesWithObstacle:e.detectEdgesNotConnectedToMesh.getOutput(),layerCount:e.inputProblem.layerCount}])];getOutput(){return[...this.inputProblem.meshNodes,...this.expandUnconnectedEdgesToMesh.getOutput()]}getExpandedNodes(){return this.expandUnconnectedEdgesToMesh.getOutput()}getObstacleLayer(e){return`z${(e.obstacle.__zLayers??e.obstacle.layers.map((t)=>Wi(t,this.inputProblem.layerCount))).join(",")}`}getObstacleRects(){return this.inputProblem.unmarkedComponentObstacles.map((e)=>{let t=e.__zLayers??e.layers.map((n)=>Wi(n,this.inputProblem.layerCount));return{center:e.center,width:e.width,height:e.height,fill:"rgba(150,150,150,0.08)",stroke:"rgba(90,90,90,0.42)",label:e.obstacleId??e.componentId??"bga obstacle",layer:`z${t.join(",")}`}})}getBaseMeshRects(){return this.inputProblem.meshNodes.map((e)=>({...FA(e,{rectMargin:0.025,zOffset:0.01}),fill:e._containsObstacle?"rgba(210,60,60,0.14)":"rgba(80,120,160,0.08)",stroke:e._containsObstacle?"rgba(190,40,40,0.42)":"rgba(80,120,160,0.28)",label:`mesh ${e.capacityMeshNodeId}
z:${e.availableZ.join(",")}`}))}initialVisualize(){let e=bke(this.inputProblem.unmarkedComponentObstacles),t=Tge(e),n=[...e.map((o)=>({points:[o.start,o.end],strokeColor:zm(o,0.72),strokeWidth:0.018,strokeDash:"0.05 0.035",layer:this.getObstacleLayer(o),label:[mS(o,t),wte(o)].join(" ")})),...e.map((o)=>{let i=FE(o);return{points:[i,{x:i.x+0.18*o.expansionDirection.x,y:i.y+0.18*o.expansionDirection.y}],strokeColor:zm(o,0.64),strokeWidth:0.012,strokeDash:"0.035 0.025",layer:this.getObstacleLayer(o)}})];return{title:"BGA GapFill: candidate obstacle edges",rects:[...this.getBaseMeshRects(),...this.getObstacleRects()],lines:n}}finalVisualize(){let e=this.getStageOutput("detectEdgesNotConnectedToMesh")??[],t=this.getStageOutput("expandUnconnectedEdgesToMesh")??[],n=Tge(bke(this.inputProblem.unmarkedComponentObstacles)),o=new Map;for(let c of t){let l=Ike(c);l!==null&&o.set(l,c)}let i=t.map((c)=>{let l=Ike(c),d=l===null?null:e[l]??null,u=d?(({expandedNode:m,edge:p,meshNodes:g})=>{let _=Gd(m),f=Math.abs(p.start.x-p.end.x)<=ck;return g.filter((y)=>{if(y._containsObstacle)return!1;if(!m.availableZ.some((C)=>y.availableZ.includes(C)))return!1;let x=Gd(y);return f?!(Math.min(_.maxY,x.maxY)-Math.max(_.minY,x.minY)<=ck)&&(p.expansionDirection.x<0?Math.abs(x.maxX-_.minX)<=ck:Math.abs(x.minX-_.maxX)<=ck):!(Math.min(_.maxX,x.maxX)-Math.max(_.minX,x.minX)<=ck)&&(p.expansionDirection.y<0?Math.abs(x.maxY-_.minY)<=ck:Math.abs(x.minY-_.maxY)<=ck)}).map((y)=>y.capacityMeshNodeId)})({expandedNode:c,edge:d,meshNodes:this.inputProblem.meshNodes}):[],h=d?mS(d,n):"E?",A=d===null?"rgba(0,160,100,0.72)":zm(d,0.72);return{...FA(c,{rectMargin:0.012,zOffset:0.01}),fill:d===null?"rgba(0,160,100,0.24)":zm(d,0.16),stroke:A,label:[`${h} gap fill`,u.length>0?`to ${u.join(",")}`:"target mesh not adjacent",`z:${c.availableZ.join(",")}`].join(`
`)}}),r=e.map((c,l)=>{let d=o.get(l);return{points:[c.start,c.end],strokeColor:d?zm(c,0.68):"rgba(80,80,80,0.14)",strokeWidth:d?0.026:0.008,...d?{}:{strokeDash:"5 4"},layer:this.getObstacleLayer(c),label:[[mS(c,n),wte(c)].join(" "),d?"filled":"no fill created"].join(`
`)}}),s=e.flatMap((c,l)=>{let d=FE(c),u=o.get(l);return u?[{points:[d,u.center],strokeColor:zm(c,0.42),strokeWidth:0.012,strokeDash:"0.035 0.025",layer:this.getObstacleLayer(c)}]:[]}),a=e.flatMap((c,l)=>o.has(l)?[{...FE(c),color:zm(c,0.82),label:mS(c,n),layer:this.getObstacleLayer(c)}]:[]);return{title:"BGA GapFill: disconnected edges and created mesh",rects:[...this.getBaseMeshRects(),...this.getObstacleRects(),...i],lines:[...r,...s],points:a}}};function ZMt(e,t){let n=[];for(let o=0;o<e.length;o++){let i=e[o];n.push(i);let r=e[o+1];if(r===void 0)continue;let s=Math.round((r-i)/t);if(!(s<=1))for(let a=1;a<s;a++){let c=a/s;n.push(Number((i+(r-i)*c).toFixed(6)))}}return n}var iV=0.001;function e6t(e){let t=[];for(let r=1;r<e.length;r++){let s=e[r]-e[r-1];s>iV&&t.push(s)}if(t.length===0)return null;let n=Math.min(...t),o=t.filter((r)=>r<=1.5*n).sort((r,s)=>r-s),i=Math.floor(o.length/2);return o.length%2==0?(o[i-1]+o[i])/2:o[i]}function t6t(e){return[...new Set(e)].sort((t,n)=>t-n)}function a_e(e){return Number(e.toFixed(6))}var gGo=class e{static fromObstacles(t){if(t.length===0)return null;let n=t6t(t.map((s)=>s.center.x)),o=t6t(t.map((s)=>s.center.y)),i=e6t(n),r=e6t(o);return i===null||r===null?null:new e({obstacles:t,xCoordinates:ZMt(n,i),yCoordinates:ZMt(o,r),pitchX:i,pitchY:r})}xCoordinates;yCoordinates;pitchX;pitchY;originX;originY;rowCount;colCount;padWidth;padHeight;slots=new Map;constructor(t){this.xCoordinates=t.xCoordinates,this.yCoordinates=t.yCoordinates,this.pitchX=t.pitchX,this.pitchY=t.pitchY,this.originX=this.xCoordinates[0],this.originY=this.yCoordinates[0],this.colCount=this.xCoordinates.length,this.rowCount=this.yCoordinates.length,this.padWidth=t.obstacles[0].width,this.padHeight=t.obstacles[0].height;for(let n of t.obstacles){let o=this.getSlotForObstacle(n);o&&this.slots.set(this.getSlotKey(o.row,o.col),{...o,obstacle:n})}}getSlotKey(t,n){return`${t}:${n}`}getAxisIndex(t,n){let o=-1,i=Number.POSITIVE_INFINITY;for(let r=0;r<t.length;r++){let s=Math.abs(t[r]-n);s<i&&(i=s,o=r)}return i<=iV?o:null}getAxisCoordinate(t,n){return t[n]}hasPadAt(t,n){return this.slots.has(this.getSlotKey(t,n))}getSlotForObstacle(t){let n=this.getAxisIndex(this.yCoordinates,t.center.y),o=this.getAxisIndex(this.xCoordinates,t.center.x);return n===null||o===null||n<0||n>=this.rowCount||o<0||o>=this.colCount?null:{row:n,col:o}}getSlotCenter(t,n){return{x:this.getAxisCoordinate(this.xCoordinates,n),y:this.getAxisCoordinate(this.yCoordinates,t)}}getHorizontalGap(t,n){let o=this.getSlotCenter(t,n),i=this.getSlotCenter(t,n+1),r=Math.abs(i.x-o.x);return{orientation:"horizontal",row:t,col:n,center:{x:a_e((o.x+i.x)/2),y:o.y},width:r-this.padWidth,height:this.padHeight,isBetweenTwoPads:this.hasPadAt(t,n)&&this.hasPadAt(t,n+1)}}getVerticalGap(t,n){let o=this.getSlotCenter(t,n),i=this.getSlotCenter(t+1,n),r=Math.abs(i.y-o.y);return{orientation:"vertical",row:t,col:n,center:{x:o.x,y:a_e((o.y+i.y)/2)},width:this.padWidth,height:r-this.padHeight,isBetweenTwoPads:this.hasPadAt(t,n)&&this.hasPadAt(t+1,n)}}getDiagonalGap(t,n){let o=this.getSlotCenter(t,n),i=this.getSlotCenter(t+1,n+1),r=Math.abs(i.x-o.x),s=Math.abs(i.y-o.y);return{orientation:"diagonal",row:t,col:n,center:{x:a_e((o.x+i.x)/2),y:a_e((o.y+i.y)/2)},width:r-this.padWidth,height:s-this.padHeight,isBetweenTwoPads:this.hasPadAt(t,n)&&this.hasPadAt(t+1,n+1)}}getDiagonalGaps(){let t=[];for(let n=0;n<this.rowCount-1;n++)for(let o=0;o<this.colCount-1;o++)t.push(this.getDiagonalGap(n,o));return t.filter((n)=>n.width>iV&&n.height>iV)}getAxisGaps(){let t=[];for(let n=0;n<this.rowCount;n++)for(let o=0;o<this.colCount-1;o++)t.push(this.getHorizontalGap(n,o));for(let n=0;n<this.rowCount-1;n++)for(let o=0;o<this.colCount;o++)t.push(this.getVerticalGap(n,o));return t.filter((n)=>n.width>iV&&n.height>iV)}getMissingSlots(){let t=[];for(let n=0;n<this.rowCount;n++)for(let o=0;o<this.colCount;o++)this.hasPadAt(n,o)||t.push({row:n,col:o,center:this.getSlotCenter(n,o),width:this.padWidth,height:this.padHeight});return t}};function fGo(e){if([e.point.pointId,e.point.pcb_port_id].filter((o)=>typeof o=="string").some((o)=>e.obstacle.connectedTo.includes(o)))return!0;if(e.obstacle.connectedTo.length===0)return!1;if(jE(e.point,e.obstacle)>0.001)return!1;let t=Dy(e.point).map((o)=>Wi(o,e.layerCount)),n=e.obstacle.layers.map((o)=>Wi(o,e.layerCount));return t.some((o)=>n.includes(o))}function GGt(e){return e.obstacleId??[e.componentId??"no-component",e.center.x,e.center.y,e.width,e.height,e.layers.join(",")].join(":")}function YGt({componentId:e,orientationKey:t,row:n,col:o,center:i,width:r,height:s}){return["cmn",t,e,n,o,i.x,i.y,r,s].join("_")}function n6t(e){let{componentId:t,bgaGap:n,freeLayers:o,multiLayerThreshold:i}=e,r=n.width>i&&n.height>i,s="d";n.orientation==="horizontal"&&(s="h"),n.orientation==="vertical"&&(s="v");let a=YGt({componentId:t,orientationKey:s,row:n.row,col:n.col,center:n.center,width:n.width,height:n.height});return n.orientation==="diagonal"&&r||!n.isBetweenTwoPads&&r?[{center:n.center,width:n.width,height:n.height,availableZ:[...o],capacityMeshNodeId:`${a}_all`,layer:""}]:o.map((c)=>({center:n.center,width:n.width,height:n.height,availableZ:[c],capacityMeshNodeId:`${a}_${c}`,layer:""}))}function yGo(e){let{componentId:t,obstacle:n,freeLayers:o,layerCount:i}=e,r=n.layers.map((c)=>Wi(c,i)),s=o.filter((c)=>!r.includes(c)),a=GGt(n);return s.map((c)=>({capacityMeshNodeId:`free-${t}-${a}-${c}`,center:n.center,width:n.width,height:n.height,layer:`z${c}`,availableZ:[c]}))}function o6t(e,t,n){let o=t.layers.map((s)=>Wi(s,n.layerCount)),i=GGt(t),r=function(s){for(let a of s.srj.connections)for(let c of a.pointsToConnect)if(fGo({point:c,obstacle:s.obstacle,layerCount:s.srj.layerCount}))return a.__rootConnectionNames?.[0]??a.name}({obstacle:t,srj:n});return{capacityMeshNodeId:`obstacle-${e}-${i}-${o.join(",")}-${t.center.x}-${t.center.y}`,_containsObstacle:!0,...r?{_containsTarget:!0,_targetConnectionName:r}:{},center:t.center,width:t.width,height:t.height,layer:`z${o.join(",")}`,availableZ:o}}var xGo=class extends Js{constructor(e){super(),this.inputProblem=e}inputProblem;componentObstacles=[];meshNodes=[];getConstructorParams(){return[this.inputProblem]}_step(){let{srj:e,componentBounds:t,componentId:n,markedComponentObstacles:o,unmarkedComponentObstacles:i}=this.inputProblem,r=e.obstacles.filter((h)=>h.isCopperPour===!0).filter((h)=>D6(Gd(h),t)).flatMap((h)=>h.layers.map((A)=>Wi(A,e.layerCount))),s=Array.from({length:e.layerCount},(h,A)=>A).filter((h)=>!r.includes(h));if(this.componentObstacles=o,o.length===0||s.length===0)return void(this.solved=!0);let a=gGo.fromObstacles(o);if(!a)return void(this.solved=!0);let c=a.getAxisGaps(),l=a.getDiagonalGaps(),d=a.getMissingSlots(),u=1.2*(this.inputProblem.viaDiameter??y0(e).padDiameter);this.meshNodes=[...c.flatMap((h)=>n6t({componentId:n,bgaGap:h,freeLayers:s,multiLayerThreshold:u})),...l.flatMap((h)=>n6t({componentId:n,bgaGap:h,freeLayers:s,multiLayerThreshold:u})),...d.flatMap((h)=>function(A){let{componentId:m,missingBgaSlot:p,freeLayers:g,multiLayerThreshold:_}=A,f=YGt({componentId:m,orientationKey:"missing",row:p.row,col:p.col,center:p.center,width:p.width,height:p.height});return p.width>_&&p.height>_?[{center:p.center,width:p.width,height:p.height,availableZ:[...g],capacityMeshNodeId:`${f}_all`,layer:""}]:g.map((y)=>({center:p.center,width:p.width,height:p.height,availableZ:[y],capacityMeshNodeId:`${f}_${y}`,layer:""}))}({componentId:n,missingBgaSlot:h,freeLayers:s,multiLayerThreshold:u})),...o.flatMap((h)=>[...yGo({componentId:n,obstacle:h,freeLayers:s,layerCount:e.layerCount}),o6t(n,h,e)]),...i.flatMap((h)=>[o6t(n,h,e)])],this.meshNodes=function(h){let A=new Map;return h.map((m)=>{let p=A.get(m.capacityMeshNodeId)??0;return A.set(m.capacityMeshNodeId,p+1),p===0?m:{...m,capacityMeshNodeId:`${m.capacityMeshNodeId}__dup${p}`}})}(this.meshNodes),this.solved=!0}getOutput(){return this.meshNodes}visualize(){return{rects:[{center:{x:(this.inputProblem.componentBounds.minX+this.inputProblem.componentBounds.maxX)/2,y:(this.inputProblem.componentBounds.minY+this.inputProblem.componentBounds.maxY)/2},width:this.inputProblem.componentBounds.maxX-this.inputProblem.componentBounds.minX,height:this.inputProblem.componentBounds.maxY-this.inputProblem.componentBounds.minY,fill:"rgba(0,0,0,0)",stroke:"rgba(30,30,30,0.65)",label:`component ${this.inputProblem.componentId}`},...this.inputProblem.markedComponentObstacles.map((e)=>({center:e.center,width:e.width,height:e.height,fill:"rgba(255,0,0,0.18)",stroke:"rgba(255,0,0,0.52)",label:`pad ${e.obstacleId??"obstacle"}`})),...this.inputProblem.unmarkedComponentObstacles.map((e)=>({center:e.center,width:e.width,height:e.height,fill:"rgba(255,140,0,0.14)",stroke:"rgba(255,140,0,0.42)",label:`foreign ${e.obstacleId??"obstacle"}`})),...this.meshNodes.map((e)=>({...FA(e,{rectMargin:0.01}),fill:e._containsObstacle?"rgba(255,0,0,0.14)":e.capacityMeshNodeId.includes("missing")?"rgba(0,200,120,0.18)":"rgba(0,120,255,0.12)",stroke:e._containsObstacle?"rgba(255,0,0,0.36)":e.capacityMeshNodeId.includes("missing")?"rgba(0,200,120,0.52)":"rgba(0,120,255,0.38)"}))]}}};function eRe(e){return e.capacityMeshNodeId.startsWith("bga-gapfill-")}function CGo(e){return JSON.stringify({availableZ:[...e.availableZ].sort((t,n)=>t-n),_containsTarget:e._containsTarget??!1,_targetConnectionName:e._targetConnectionName??null,_depth:e._depth??null,_strawNode:e._strawNode??!1,_strawParentCapacityMeshNodeId:e._strawParentCapacityMeshNodeId??null,_qfpRegionType:e._qfpRegionType??null,_isNarrowQfpPadGap:e._isNarrowQfpPadGap??!1,_soicRegionType:e._soicRegionType??null,_offBoardConnectionId:e._offBoardConnectionId??null,_offboardNetName:e._offboardNetName??null,_isVirtualOffboard:e._isVirtualOffboard??!1,_containsObstacle:e._containsObstacle??!1})}function IGo(e,t){let n=Gd(e);for(let o of t){if(!e.availableZ.some((r)=>o.availableZ.includes(r)))continue;let i=Gd(o);if(D6(n,i))return!0}return!1}function bGo(e){let t=e[0];if(!t)throw Error("createMergedNode requires at least one source node");let{POSITIVE_INFINITY:n,NEGATIVE_INFINITY:o,POSITIVE_INFINITY:i,NEGATIVE_INFINITY:r}=Number;for(let s of e){let a=Gd(s);n=Math.min(n,a.minX),o=Math.max(o,a.maxX),i=Math.min(i,a.minY),r=Math.max(r,a.maxY)}return{...t,capacityMeshNodeId:`merge:${e.map((s)=>s.capacityMeshNodeId).join(":")}`,center:{x:(n+o)/2,y:(i+r)/2},width:o-n,height:r-i}}function KZ(e,t,n){return{center:e.center,width:e.width,height:e.height,fill:t,stroke:t,label:n}}var SGo=class extends Js{constructor(e){super(),this.inputProblem=e}inputProblem;obstacleNodes=[];passthroughNodes=[];mergedNodes=[];pendingGroups=[];totalGroupCount=0;processedGroupCount=0;debugFilteredNodes=[];debugMergeEvents=[];currentGroupKey=null;currentRootNodeId=null;lastMergedNodeId=null;_setup(){this.obstacleNodes=this.inputProblem.meshNodes.filter((t)=>t._containsObstacle===!0),this.passthroughNodes=[],this.mergedNodes=[],this.pendingGroups=[],this.totalGroupCount=0,this.processedGroupCount=0,this.debugFilteredNodes=[],this.debugMergeEvents=[],this.currentGroupKey=null,this.currentRootNodeId=null,this.lastMergedNodeId=null;let e=new Map;for(let t of this.inputProblem.meshNodes){if(t._containsObstacle===!0){this.passthroughNodes.push(t),this.debugFilteredNodes.push({type:"preserved-obstacle",node:t,reason:"contains-obstacle"});continue}if(eRe(t)){this.passthroughNodes.push(t);continue}if(t.availableZ.length!==this.inputProblem.layerCount){this.passthroughNodes.push(t);continue}let n=!1;for(let r=0;r<this.inputProblem.layerCount;r+=1)if(!t.availableZ.includes(r)){n=!0;break}if(n){this.passthroughNodes.push(t);continue}if(IGo(t,this.obstacleNodes)){this.passthroughNodes.push(t),this.debugFilteredNodes.push({type:"preserved-overlap",node:t,reason:"overlaps-obstacle"});continue}let o=CGo(t),i=e.get(o);i?i.push(t):e.set(o,[t])}for(let[t,n]of e.entries())n.length<=1?this.passthroughNodes.push(...n):this.pendingGroups.push({groupKey:t,nodes:n});this.pendingGroups.sort((t,n)=>n.nodes.length-t.nodes.length),this.totalGroupCount=this.pendingGroups.length,this.updateStats("setup")}_step(){let e=this.pendingGroups.shift();if(!e)return this.currentGroupKey=null,this.currentRootNodeId=null,this.solved=!0,void this.updateStats("done");let t=e.nodes[0];this.currentGroupKey=e.groupKey,this.currentRootNodeId=t?t.capacityMeshNodeId:null;let n=function(i){if(!i.nodes[0])return{outputNodes:[],mergeEvents:[]};let{POSITIVE_INFINITY:r,POSITIVE_INFINITY:s,POSITIVE_INFINITY:a,POSITIVE_INFINITY:c}=Number;for(let m of i.nodes){r=Math.min(r,m.width),s=Math.min(s,m.height);let p=Gd(m);a=Math.min(a,p.minX),c=Math.min(c,p.minY)}let l=new Map,d=[];for(let m of i.nodes){let p=Gd(m),g=Math.round((p.minX-a)/r),_=Math.round((p.minY-c)/s),f=Math.max(1,Math.round(m.width/r)),y=Math.max(1,Math.round(m.height/s));for(let x=0;x<y;x+=1)for(let C=0;C<f;C+=1)l.set(`${g+C},${_+x}`,m);d.push({col:g,row:_})}d.sort((m,p)=>m.row-p.row||m.col-p.col);let u=new Set,h=[],A=[];for(let m of d){let p=`${m.col},${m.row}`;if(u.has(p))continue;let g=0;for(;;){let P=`${m.col+g},${m.row}`;if(!l.has(P))break;if(u.has(P))break;g+=1}let _=g,f=1,y=1,x=1;for(let P=1;;P+=1){let E=m.row+P-1,B=0;for(;B<_;){let w=`${m.col+B},${E}`;if(!l.has(w))break;if(u.has(w))break;B+=1}if(B===0)break;_=Math.min(_,B);for(let w=_;w>=1;w-=1){let T=w*r,Q=P*s,N=Math.min(T,Q);if((N<=0.000001?Number.POSITIVE_INFINITY:Math.max(T,Q)/N)>4)continue;let F=w*P;F>x&&(x=F,f=w,y=P);break}}let C=new Map;for(let P=0;P<y;P+=1)for(let E=0;E<f;E+=1){let B=`${m.col+E},${m.row+P}`,w=l.get(B);w&&(u.add(B),C.set(w.capacityMeshNodeId,w))}let I=[...C.values()];if(I.length<=1){let P=I[0];P&&h.push(P);continue}let b=bGo(I);h.push(b),A.push({type:"merge",groupKey:i.groupKey,sourceNodes:I,mergedNode:b})}return{outputNodes:h,mergeEvents:A}}(e);this.mergedNodes.push(...n.outputNodes),this.processedGroupCount+=1,this.debugMergeEvents.push(...n.mergeEvents);let o=n.mergeEvents[n.mergeEvents.length-1];o&&(this.lastMergedNodeId=o.mergedNode.capacityMeshNodeId),this.updateStats(n.mergeEvents.length>0?"merged-group":"passthrough-group")}computeProgress(){return this.totalGroupCount===0?1:this.processedGroupCount/this.totalGroupCount}updateStats(e){let t=new Set(this.debugMergeEvents.map((o)=>o.groupKey)),n={lastAction:e,totalGroupCount:this.totalGroupCount,processedGroupCount:this.processedGroupCount,pendingGroupCount:this.pendingGroups.length,mergedNodeCount:this.mergedNodes.length,passthroughNodeCount:this.passthroughNodes.length,gapFillNodeCount:this.passthroughNodes.filter(eRe).length,preservedObstacleNodeCount:this.debugFilteredNodes.filter((o)=>o.type==="preserved-obstacle").length,preservedOverlapNodeCount:this.debugFilteredNodes.filter((o)=>o.type==="preserved-overlap").length,mergeCount:this.debugMergeEvents.length,mergedGroupCount:t.size,currentGroupKey:this.currentGroupKey,currentRootNodeId:this.currentRootNodeId,lastMergedNodeId:this.lastMergedNodeId};this.stats=n}getConstructorParams(){return[this.inputProblem]}getOutput(){return[...this.mergedNodes,...this.passthroughNodes]}visualize(){let e=this.getOutput(),t=this.currentRootNodeId?e.find((o)=>o.capacityMeshNodeId===this.currentRootNodeId)??null:null,n=this.lastMergedNodeId?e.find((o)=>o.capacityMeshNodeId===this.lastMergedNodeId)??null:null;return{rects:[...this.debugFilteredNodes.map((o)=>KZ(o.node,o.type==="preserved-obstacle"?"rgba(255,64,64,0.35)":"rgba(255,160,64,0.35)",o.reason)),...this.passthroughNodes.map((o)=>KZ(o,o._containsObstacle?"rgba(255,0,0,0.35)":eRe(o)?"rgba(0,120,255,0.18)":"rgba(160,160,160,0.12)")),...this.mergedNodes.map((o)=>KZ(o,"rgba(120,120,120,0.14)")),...t?[KZ(t,"rgba(255,215,0,0.35)","active-group")]:[],...n?[KZ(n,"rgba(0,200,120,0.28)","merged")]:[]]}}},PGo=class extends Js{constructor(e){super(),this.inputProblem=e}inputProblem;obstacleQueue=[];obstacleQueueIndex=0;meshNodes=[];_setup(){this.obstacleQueue=this.inputProblem.obstacles,this.obstacleQueueIndex=0,this.meshNodes=[...this.inputProblem.meshNodes]}_step(){if(this.obstacleQueueIndex>=this.obstacleQueue.length)return void(this.solved=!0);let e=this.obstacleQueue[this.obstacleQueueIndex],t=e.layers.map((o)=>Wi(o,this.inputProblem.layerCount)),n=[];for(let o of this.meshNodes){if(o._containsObstacle){n.push(o);continue}if(!t.some((r)=>o.availableZ.includes(r))){n.push(o);continue}if(!D6(Gd(o),Gd(e))){n.push(o);continue}if(o.availableZ.length===1)continue;let i=o.availableZ.filter((r)=>!t.includes(r));for(let r of i){let s={...o,capacityMeshNodeId:`${o.capacityMeshNodeId}:z${r}`,availableZ:[r],layer:`z${r}`};n.push(s)}}this.meshNodes=n,this.obstacleQueueIndex+=1,this.stats={obstaclesProcessed:this.obstacleQueueIndex,obstacleCount:this.obstacleQueue.length,meshNodeCount:this.meshNodes.length}}computeProgress(){return this.obstacleQueue.length===0?1:this.obstacleQueueIndex/this.obstacleQueue.length}getConstructorParams(){return[this.inputProblem]}getOutput(){return this.meshNodes}visualize(){let e=this.obstacleQueueIndex<this.obstacleQueue.length?this.obstacleQueue[this.obstacleQueueIndex]??null:null,t=this.obstacleQueue.slice(0,this.obstacleQueueIndex),n=e?this.obstacleQueue.slice(this.obstacleQueueIndex+1):[];return{rects:[...t.map((o)=>({center:o.center,width:o.width,height:o.height,fill:"rgba(160,160,160,0.10)",stroke:"rgba(160,160,160,0.35)",label:`processed ${o.obstacleId??"obstacle"}`})),...e?[{center:e.center,width:e.width,height:e.height,fill:"rgba(255,140,0,0.22)",stroke:"rgba(255,140,0,0.75)",label:`active ${e.obstacleId??"obstacle"}`}]:[],...n.map((o)=>({center:o.center,width:o.width,height:o.height,fill:"rgba(255,0,0,0.05)",stroke:"rgba(255,0,0,0.22)",label:`pending ${o.obstacleId??"obstacle"}`})),...this.meshNodes.map((o)=>({...FA(o,{rectMargin:0.01}),fill:o._containsObstacle?"rgba(255,0,0,0.18)":"rgba(0,120,255,0.12)",stroke:o._containsObstacle?"rgba(255,0,0,0.45)":"rgba(0,120,255,0.45)"}))]}}};ane.register(class extends KE{constructor(e){super(e),this.inputProblem=e}inputProblem;static componentKind="bga";initialTopologySolver;removeMeshNodeOverlappingWithUnmarkedObstacle;gapfillDueToNodeRemoval;mergeMeshNodes;markedComponentObstacles=[];unmarkedComponentObstacles=[];pipelineDef=[bh("initialTopologySolver",xGo,(e)=>[{srj:e.inputProblem.inputSrj,componentBounds:e.inputProblem.detectedComponent.bounds,componentId:e.inputProblem.detectedComponent.componentId,markedComponentObstacles:e.markedComponentObstacles,unmarkedComponentObstacles:e.unmarkedComponentObstacles,viaDiameter:e.inputProblem.viaDiameter}]),bh("removeMeshNodeOverlappingWithUnmarkedObstacle",PGo,(e)=>[{meshNodes:e.initialTopologySolver.getOutput(),obstacles:e.unmarkedComponentObstacles,layerCount:e.inputProblem.inputSrj.layerCount}]),bh("gapfillDueToNodeRemoval",_Go,(e)=>[{meshNodes:e.removeMeshNodeOverlappingWithUnmarkedObstacle.getOutput(),unmarkedComponentObstacles:e.unmarkedComponentObstacles,layerCount:e.inputProblem.inputSrj.layerCount}]),bh("mergeMeshNodes",SGo,(e)=>[{meshNodes:e.gapfillDueToNodeRemoval.getOutput(),layerCount:e.inputProblem.inputSrj.layerCount}])];_setup(){let e=this.inputProblem.detectedComponent.bounds,t=this.inputProblem.detectedComponent.componentId,n=[],o=[];for(let i of this.inputProblem.inputSrj.obstacles){let r=Gd(i);D6(e,r)&&(i.componentId!==t?o.push(i):n.push(i))}this.markedComponentObstacles=n,this.unmarkedComponentObstacles=o}getConstructorParams(){return[this.inputProblem]}getOutput(){return{routingRegions:this.mergeMeshNodes?.getOutput()??this.gapfillDueToNodeRemoval?.getOutput()??this.removeMeshNodeOverlappingWithUnmarkedObstacle?.getOutput()??[]}}initialVisualize(){return{rects:[{center:{x:(this.inputProblem.detectedComponent.bounds.minX+this.inputProblem.detectedComponent.bounds.maxX)/2,y:(this.inputProblem.detectedComponent.bounds.minY+this.inputProblem.detectedComponent.bounds.maxY)/2},width:this.inputProblem.detectedComponent.bounds.maxX-this.inputProblem.detectedComponent.bounds.minX,height:this.inputProblem.detectedComponent.bounds.maxY-this.inputProblem.detectedComponent.bounds.minY,fill:"rgba(0,0,0,0)",stroke:"rgba(30,30,30,0.65)",label:`bga ${this.inputProblem.detectedComponent.componentId}`},...this.markedComponentObstacles.map((e)=>({center:e.center,width:e.width,height:e.height,fill:"rgba(255,0,0,0.18)",stroke:"rgba(255,0,0,0.52)",label:`pad ${e.obstacleId??"obstacle"}`})),...this.unmarkedComponentObstacles.map((e)=>({center:e.center,width:e.width,height:e.height,fill:"rgba(255,140,0,0.14)",stroke:"rgba(255,140,0,0.42)",label:`foreign ${e.obstacleId??"obstacle"}`}))]}}finalVisualize(){return{rects:this.getOutput().routingRegions.map((e)=>({...FA(e,{rectMargin:0.01}),fill:e._containsObstacle?"rgba(255,0,0,0.16)":"rgba(0,120,255,0.12)",stroke:e._containsObstacle?"rgba(255,0,0,0.36)":"rgba(0,120,255,0.42)"}))}}});var i6t=0.000001;function Lfe(e,t){return e.__zLayers&&e.__zLayers.length>0?Lte(e.__zLayers,t):Fte(e.layers,t)}function c_e(e){let t=[...e].sort((r,s)=>r-s),n=[];for(let r=1;r<t.length;r++){let s=t[r]-t[r-1];s>i6t&&n.push(s)}let o=n.length>0?Math.max(i6t,Math.min(...n)/4):0.001,i=[];for(let r of t){let s=i[i.length-1];(s===void 0||Math.abs(r-s)>o)&&i.push(r)}return i}function HHe(e){return Array.from({length:Math.max(0,e)},(t,n)=>n)}var r6t=0.000001;function VGt(e){return e.maxX-e.minX>r6t&&e.maxY-e.minY>r6t}function s6t(e){return function(t){let n=Math.min(t.width,t.height),o=Math.max(t.width,t.height);return n<=0?0:o/n}(e)>=1.5}function vGo(e,t){let n=[{side:"top",distance:Math.abs(e.center.y-t.minY)},{side:"right",distance:Math.abs(t.maxX-e.center.x)},{side:"bottom",distance:Math.abs(t.maxY-e.center.y)},{side:"left",distance:Math.abs(e.center.x-t.minX)}];return n.sort((o,i)=>o.distance-i.distance),n[0].side}function EGo(e,t){return e.map((n,o)=>({key:`pad:${n.obstacleId??o}`,bounds:mr(n),regionType:"pad",obstacleZ:Lfe(n,t),connectedTo:[...n.connectedTo]}))}function MGo(e,t){return e.map((n,o)=>({key:`thermal-pad:${n.obstacleId??o}`,bounds:mr(n),regionType:"pad",obstacleZ:Lfe(n,t),connectedTo:[...n.connectedTo]}))}function UGt(e,t){return!!VGt(e)&&Math.min(e.maxX-e.minX,e.maxY-e.minY)<=t}function l_e({side:e,sideObstacles:t,bounds:n,innerBounds:o,narrowThreshold:i}){let r=[];for(let s=0;s<t.length-1;s++){let a=mr(t[s]),c=mr(t[s+1]),l;l=e==="top"?{minX:a.maxX,maxX:c.minX,minY:n.minY,maxY:o.minY}:e==="right"?{minX:o.maxX,maxX:n.maxX,minY:a.maxY,maxY:c.minY}:e==="bottom"?{minX:a.maxX,maxX:c.minX,minY:o.maxY,maxY:n.maxY}:{minX:n.minX,maxX:o.minX,minY:a.maxY,maxY:c.minY},r.push({key:`${e}-gap-${s}`,bounds:l,regionType:"pad-gap",isNarrowPadGap:UGt(l,i)})}return r}function d_e({side:e,sideObstacles:t,thermalPadBounds:n,narrowThreshold:o}){let i=[];for(let r=0;r<t.length;r++){let s=mr(t[r]),a=t[r-1]?mr(t[r-1]):null,c=t[r+1]?mr(t[r+1]):null,l;l=e==="top"?{minX:a?(a.maxX+s.minX)/2:s.minX,maxX:c?(s.maxX+c.minX)/2:s.maxX,minY:s.maxY,maxY:n.minY}:e==="right"?{minX:n.maxX,maxX:s.minX,minY:a?(a.maxY+s.minY)/2:s.minY,maxY:c?(s.maxY+c.minY)/2:s.maxY}:e==="bottom"?{minX:a?(a.maxX+s.minX)/2:s.minX,maxX:c?(s.maxX+c.minX)/2:s.maxX,minY:n.maxY,maxY:s.minY}:{minX:s.maxX,maxX:n.minX,minY:a?(a.maxY+s.minY)/2:s.minY,maxY:c?(s.maxY+c.minY)/2:s.maxY},i.push({key:`inner-${e}-pad-${r}`,bounds:l,regionType:"pad-gap",isNarrowPadGap:UGt(l,o)})}return i}function BGo({bounds:e,innerBounds:t,sideGroups:n}){let o=n.top[0]?mr(n.top[0]):null,i=n.top.at(-1)?mr(n.top.at(-1)):null,r=n.right[0]?mr(n.right[0]):null,s=n.right.at(-1)?mr(n.right.at(-1)):null,a=n.bottom[0]?mr(n.bottom[0]):null,c=n.bottom.at(-1)?mr(n.bottom.at(-1)):null,l=n.left[0]?mr(n.left[0]):null,d=n.left.at(-1)?mr(n.left.at(-1)):null;return[{key:"corner-nw-outer",regionType:"corner",bounds:{minX:e.minX,maxX:t.minX,minY:e.minY,maxY:t.minY}},{key:"corner-nw-top",regionType:"corner",bounds:{minX:t.minX,maxX:o?.minX??t.minX,minY:e.minY,maxY:t.minY}},{key:"corner-nw-left",regionType:"corner",bounds:{minX:e.minX,maxX:t.minX,minY:t.minY,maxY:l?.minY??t.minY}},{key:"corner-ne-outer",regionType:"corner",bounds:{minX:t.maxX,maxX:e.maxX,minY:e.minY,maxY:t.minY}},{key:"corner-ne-top",regionType:"corner",bounds:{minX:i?.maxX??t.maxX,maxX:t.maxX,minY:e.minY,maxY:t.minY}},{key:"corner-ne-right",regionType:"corner",bounds:{minX:t.maxX,maxX:e.maxX,minY:t.minY,maxY:r?.minY??t.minY}},{key:"corner-se-outer",regionType:"corner",bounds:{minX:t.maxX,maxX:e.maxX,minY:t.maxY,maxY:e.maxY}},{key:"corner-se-right",regionType:"corner",bounds:{minX:t.maxX,maxX:e.maxX,minY:s?.maxY??t.maxY,maxY:t.maxY}},{key:"corner-se-bottom",regionType:"corner",bounds:{minX:c?.maxX??t.maxX,maxX:t.maxX,minY:t.maxY,maxY:e.maxY}},{key:"corner-sw-outer",regionType:"corner",bounds:{minX:e.minX,maxX:t.minX,minY:t.maxY,maxY:e.maxY}},{key:"corner-sw-bottom",regionType:"corner",bounds:{minX:t.minX,maxX:a?.minX??t.minX,minY:t.maxY,maxY:e.maxY}},{key:"corner-sw-left",regionType:"corner",bounds:{minX:e.minX,maxX:t.minX,minY:d?.maxY??t.maxY,maxY:t.maxY}}]}function wGo({innerBounds:e,thermalPadBounds:t,sideGroups:n}){let o=n.top[0]?mr(n.top[0]):null,i=n.top.at(-1)?mr(n.top.at(-1)):null,r=n.right[0]?mr(n.right[0]):null,s=n.right.at(-1)?mr(n.right.at(-1)):null,a=n.bottom[0]?mr(n.bottom[0]):null,c=n.bottom.at(-1)?mr(n.bottom.at(-1)):null,l=n.left[0]?mr(n.left[0]):null,d=n.left.at(-1)?mr(n.left.at(-1)):null;return[{key:"inner-corner-nw-core",regionType:"corner",bounds:{minX:e.minX,maxX:t.minX,minY:e.minY,maxY:t.minY}},{key:"inner-corner-nw-top",regionType:"corner",bounds:{minX:t.minX,maxX:o?.minX??t.minX,minY:e.minY,maxY:t.minY}},{key:"inner-corner-nw-left",regionType:"corner",bounds:{minX:e.minX,maxX:t.minX,minY:t.minY,maxY:l?.minY??t.minY}},{key:"inner-corner-ne-core",regionType:"corner",bounds:{minX:t.maxX,maxX:e.maxX,minY:e.minY,maxY:t.minY}},{key:"inner-corner-ne-top",regionType:"corner",bounds:{minX:i?.maxX??t.maxX,maxX:t.maxX,minY:e.minY,maxY:t.minY}},{key:"inner-corner-ne-right",regionType:"corner",bounds:{minX:t.maxX,maxX:e.maxX,minY:t.minY,maxY:r?.minY??t.minY}},{key:"inner-corner-se-core",regionType:"corner",bounds:{minX:t.maxX,maxX:e.maxX,minY:t.maxY,maxY:e.maxY}},{key:"inner-corner-se-right",regionType:"corner",bounds:{minX:t.maxX,maxX:e.maxX,minY:s?.maxY??t.maxY,maxY:t.maxY}},{key:"inner-corner-se-bottom",regionType:"corner",bounds:{minX:c?.maxX??t.maxX,maxX:t.maxX,minY:t.maxY,maxY:e.maxY}},{key:"inner-corner-sw-core",regionType:"corner",bounds:{minX:e.minX,maxX:t.minX,minY:t.maxY,maxY:e.maxY}},{key:"inner-corner-sw-bottom",regionType:"corner",bounds:{minX:t.minX,maxX:a?.minX??t.minX,minY:t.maxY,maxY:e.maxY}},{key:"inner-corner-sw-left",regionType:"corner",bounds:{minX:e.minX,maxX:t.minX,minY:d?.maxY??t.maxY,maxY:t.maxY}}]}ane.register(class extends Js{constructor(e){super(),this.inputProblem=e}inputProblem;static componentKind="qfp_thermalpad";output=null;getConstructorParams(){return[this.inputProblem]}_step(){if(this.output)return void(this.solved=!0);let{layerCount:e,obstacles:t}=this.inputProblem.inputSrj,{bounds:n,componentId:o}=this.inputProblem.detectedComponent,i=HHe(e),r=t.filter((f)=>f.componentId===o),s=r.length>0?r:t,{padRingObstacles:a,thermalPadObstacles:c}=function(f){return{padRingObstacles:f.filter(s6t),thermalPadObstacles:f.filter((y)=>!s6t(y))}}(s),l=function(f,y){let x={top:[],right:[],bottom:[],left:[]};for(let C of f)x[vGo(C,y)].push(C);return x.top.sort((C,I)=>C.center.x-I.center.x),x.bottom.sort((C,I)=>C.center.x-I.center.x),x.left.sort((C,I)=>C.center.y-I.center.y),x.right.sort((C,I)=>C.center.y-I.center.y),x}(a,n),d=function({bounds:f,sideGroups:y}){return{minX:y.left.length>0?Math.max(...y.left.map((x)=>mr(x).maxX)):f.minX,maxX:y.right.length>0?Math.min(...y.right.map((x)=>mr(x).minX)):f.maxX,minY:y.top.length>0?Math.max(...y.top.map((x)=>mr(x).maxY)):f.minY,maxY:y.bottom.length>0?Math.min(...y.bottom.map((x)=>mr(x).minY)):f.maxY}}({bounds:n,sideGroups:l}),u=function(f){return f.length===0?null:f.reduce((y,x)=>{let C=mr(x);return{minX:Math.min(y.minX,C.minX),maxX:Math.max(y.maxX,C.maxX),minY:Math.min(y.minY,C.minY),maxY:Math.max(y.maxY,C.maxY)}},mr(f[0]))}(c);if(!u)return this.failed=!0,void(this.error="QfpThermalPadTopologyGeneratorSolver requires a thermal pad");let h=o,A=this.inputProblem.viaDiameter??y0(this.inputProblem.inputSrj).padDiameter,m=this.inputProblem.obstacleMargin??this.inputProblem.inputSrj.defaultObstacleMargin??0.15,p=A+2*m,g=this.inputProblem.inputSrj.minTraceWidth+2*m,_=[...EGo(a,e),...MGo(c,e),...l_e({side:"top",sideObstacles:l.top,bounds:n,innerBounds:d,narrowThreshold:g}),...l_e({side:"right",sideObstacles:l.right,bounds:n,innerBounds:d,narrowThreshold:g}),...l_e({side:"bottom",sideObstacles:l.bottom,bounds:n,innerBounds:d,narrowThreshold:g}),...l_e({side:"left",sideObstacles:l.left,bounds:n,innerBounds:d,narrowThreshold:g}),...d_e({side:"top",sideObstacles:l.top,thermalPadBounds:u,narrowThreshold:g}),...d_e({side:"right",sideObstacles:l.right,thermalPadBounds:u,narrowThreshold:g}),...d_e({side:"bottom",sideObstacles:l.bottom,thermalPadBounds:u,narrowThreshold:g}),...d_e({side:"left",sideObstacles:l.left,thermalPadBounds:u,narrowThreshold:g}),...wGo({innerBounds:d,thermalPadBounds:u,sideGroups:l}),...BGo({bounds:n,innerBounds:d,sideGroups:l})].flatMap((f)=>function({nodeId:y,bounds:x,availableZ:C,multiLayerThreshold:I,regionType:b,isNarrowPadGap:P=!1,obstacleZ:E=[],connectedTo:B}){if(!VGt(x))return[];let w=function(N){return{center:{x:(N.minX+N.maxX)/2,y:(N.minY+N.maxY)/2},width:N.maxX-N.minX,height:N.maxY-N.minY}}(x),T=Math.min(w.width,w.height)>I,Q=T?[{availableZ:C.filter((N)=>!E.includes(N)),containsObstacle:!1},{availableZ:C.filter((N)=>E.includes(N)),containsObstacle:!0}].filter((N)=>N.availableZ.length>0):C.map((N)=>({availableZ:[N],containsObstacle:E.includes(N)}));return Q.map((N)=>({capacityMeshNodeId:Q.length===1?y:T?`${y}:${N.containsObstacle?"obstacle":"free"}`:`${y}:z${N.availableZ[0]}`,center:w.center,width:w.width,height:w.height,layer:`z${N.availableZ.join(",")}`,availableZ:N.availableZ,_qfpRegionType:b,_isNarrowQfpPadGap:P,_containsObstacle:N.containsObstacle,_connectedTo:N.containsObstacle?B:void 0}))}({nodeId:`qfp_thermalpad:${h}:${f.key}`,bounds:f.bounds,availableZ:i,multiLayerThreshold:p,regionType:f.regionType,isNarrowPadGap:f.isNarrowPadGap,obstacleZ:f.obstacleZ,connectedTo:f.connectedTo}));this.output={routingRegions:_},this.stats={componentId:o,layerCount:e,viaDiameter:A,obstacleMargin:m,multiLayerThreshold:p,narrowPadGapThreshold:g,thermalPadCount:c.length,perimeterPadCount:a.length,innerCornerRectCount:_.filter((f)=>f.capacityMeshNodeId.includes(":inner-corner-")).length,narrowPadGapNodeCount:_.filter((f)=>f._isNarrowQfpPadGap).length,topPadCount:l.top.length,rightPadCount:l.right.length,bottomPadCount:l.bottom.length,leftPadCount:l.left.length,multiLayerNodeCount:_.filter((f)=>f.availableZ.length>1).length,totalMeshNodeCount:_.length},this.solved=!0}getOutput(){if(!this.output)throw Error("QfpThermalPadTopologyGeneratorSolver has not solved yet");return this.output}});var a6t=0.000001;function WGt(e){return e.maxX-e.minX>a6t&&e.maxY-e.minY>a6t}function TGo(e,t){let n=[{side:"top",distance:Math.abs(e.center.y-t.minY)},{side:"right",distance:Math.abs(t.maxX-e.center.x)},{side:"bottom",distance:Math.abs(t.maxY-e.center.y)},{side:"left",distance:Math.abs(e.center.x-t.minX)}];return n.sort((o,i)=>o.distance-i.distance),n[0].side}function DGo(e,t){return e.map((n,o)=>({key:`pad:${n.obstacleId??o}`,bounds:mr(n),regionType:"pad",obstacleZ:Lfe(n,t),connectedTo:[...n.connectedTo]}))}function NGo(e,t){return!!WGt(e)&&Math.min(e.maxX-e.minX,e.maxY-e.minY)<=t}function u_e({side:e,sideObstacles:t,bounds:n,centralBounds:o,narrowThreshold:i}){let r=[];for(let s=0;s<t.length-1;s++){let a=mr(t[s]),c=mr(t[s+1]),l;l=e==="top"?{minX:a.maxX,maxX:c.minX,minY:n.minY,maxY:o.minY}:e==="right"?{minX:o.maxX,maxX:n.maxX,minY:a.maxY,maxY:c.minY}:e==="bottom"?{minX:a.maxX,maxX:c.minX,minY:o.maxY,maxY:n.maxY}:{minX:n.minX,maxX:o.minX,minY:a.maxY,maxY:c.minY},r.push({key:`${e}-gap-${s}`,bounds:l,regionType:"pad-gap",isNarrowPadGap:NGo(l,i)})}return r}function RGo({bounds:e,centralBounds:t,sideGroups:n}){let o=n.top[0]?mr(n.top[0]):null,i=n.top.at(-1)?mr(n.top.at(-1)):null,r=n.right[0]?mr(n.right[0]):null,s=n.right.at(-1)?mr(n.right.at(-1)):null,a=n.bottom[0]?mr(n.bottom[0]):null,c=n.bottom.at(-1)?mr(n.bottom.at(-1)):null,l=n.left[0]?mr(n.left[0]):null,d=n.left.at(-1)?mr(n.left.at(-1)):null;return[{key:"corner-nw-outer",regionType:"corner",bounds:{minX:e.minX,maxX:t.minX,minY:e.minY,maxY:t.minY}},{key:"corner-nw-top",regionType:"corner",bounds:{minX:t.minX,maxX:o?.minX??t.minX,minY:e.minY,maxY:t.minY}},{key:"corner-nw-left",regionType:"corner",bounds:{minX:e.minX,maxX:t.minX,minY:t.minY,maxY:l?.minY??t.minY}},{key:"corner-ne-outer",regionType:"corner",bounds:{minX:t.maxX,maxX:e.maxX,minY:e.minY,maxY:t.minY}},{key:"corner-ne-top",regionType:"corner",bounds:{minX:i?.maxX??t.maxX,maxX:t.maxX,minY:e.minY,maxY:t.minY}},{key:"corner-ne-right",regionType:"corner",bounds:{minX:t.maxX,maxX:e.maxX,minY:t.minY,maxY:r?.minY??t.minY}},{key:"corner-se-outer",regionType:"corner",bounds:{minX:t.maxX,maxX:e.maxX,minY:t.maxY,maxY:e.maxY}},{key:"corner-se-right",regionType:"corner",bounds:{minX:t.maxX,maxX:e.maxX,minY:s?.maxY??t.maxY,maxY:t.maxY}},{key:"corner-se-bottom",regionType:"corner",bounds:{minX:c?.maxX??t.maxX,maxX:t.maxX,minY:t.maxY,maxY:e.maxY}},{key:"corner-sw-outer",regionType:"corner",bounds:{minX:e.minX,maxX:t.minX,minY:t.maxY,maxY:e.maxY}},{key:"corner-sw-bottom",regionType:"corner",bounds:{minX:t.minX,maxX:a?.minX??t.minX,minY:t.maxY,maxY:e.maxY}},{key:"corner-sw-left",regionType:"corner",bounds:{minX:e.minX,maxX:t.minX,minY:d?.maxY??t.maxY,maxY:t.maxY}}]}ane.register(class extends Js{constructor(e){super(),this.inputProblem=e}inputProblem;static componentKind="qfp";output=null;getConstructorParams(){return[this.inputProblem]}_step(){if(this.output)return void(this.solved=!0);let{layerCount:e,obstacles:t}=this.inputProblem.inputSrj,{bounds:n,componentId:o}=this.inputProblem.detectedComponent,i=HHe(e),r=t.filter((p)=>p.componentId===o),s=r.length>0?r:t,a=function(p,g){let _={top:[],right:[],bottom:[],left:[]};for(let f of p)_[TGo(f,g)].push(f);return _.top.sort((f,y)=>f.center.x-y.center.x),_.bottom.sort((f,y)=>f.center.x-y.center.x),_.left.sort((f,y)=>f.center.y-y.center.y),_.right.sort((f,y)=>f.center.y-y.center.y),_}(s,n),c=function({bounds:p,sideGroups:g}){return{minX:g.left.length>0?Math.max(...g.left.map((_)=>mr(_).maxX)):p.minX,maxX:g.right.length>0?Math.min(...g.right.map((_)=>mr(_).minX)):p.maxX,minY:g.top.length>0?Math.max(...g.top.map((_)=>mr(_).maxY)):p.minY,maxY:g.bottom.length>0?Math.min(...g.bottom.map((_)=>mr(_).minY)):p.maxY}}({bounds:n,sideGroups:a}),l=o,d=this.inputProblem.viaDiameter??y0(this.inputProblem.inputSrj).padDiameter,u=this.inputProblem.obstacleMargin??this.inputProblem.inputSrj.defaultObstacleMargin??0.15,h=d+2*u,A=this.inputProblem.inputSrj.minTraceWidth+2*u,m=[{key:"center",bounds:c,regionType:"center"},...DGo(s,e),...u_e({side:"top",sideObstacles:a.top,bounds:n,centralBounds:c,narrowThreshold:A}),...u_e({side:"right",sideObstacles:a.right,bounds:n,centralBounds:c,narrowThreshold:A}),...u_e({side:"bottom",sideObstacles:a.bottom,bounds:n,centralBounds:c,narrowThreshold:A}),...u_e({side:"left",sideObstacles:a.left,bounds:n,centralBounds:c,narrowThreshold:A}),...RGo({bounds:n,centralBounds:c,sideGroups:a})].flatMap((p)=>function({nodeId:g,bounds:_,availableZ:f,multiLayerThreshold:y,regionType:x,isNarrowPadGap:C=!1,obstacleZ:I=[],connectedTo:b}){if(!WGt(_))return[];let P=function(w){return{center:{x:(w.minX+w.maxX)/2,y:(w.minY+w.maxY)/2},width:w.maxX-w.minX,height:w.maxY-w.minY}}(_),E=Math.min(P.width,P.height)>y,B=E?[{availableZ:f.filter((w)=>!I.includes(w)),containsObstacle:!1},{availableZ:f.filter((w)=>I.includes(w)),containsObstacle:!0}].filter((w)=>w.availableZ.length>0):f.map((w)=>({availableZ:[w],containsObstacle:I.includes(w)}));return B.map((w)=>({capacityMeshNodeId:B.length===1?g:E?`${g}:${w.containsObstacle?"obstacle":"free"}`:`${g}:z${w.availableZ[0]}`,center:P.center,width:P.width,height:P.height,layer:`z${w.availableZ.join(",")}`,availableZ:w.availableZ,_qfpRegionType:x,_isNarrowQfpPadGap:C,_containsObstacle:w.containsObstacle,_connectedTo:w.containsObstacle?b:void 0}))}({nodeId:`qfp:${l}:${p.key}`,bounds:p.bounds,availableZ:i,multiLayerThreshold:h,regionType:p.regionType,isNarrowPadGap:p.isNarrowPadGap,obstacleZ:p.obstacleZ,connectedTo:p.connectedTo}));this.output={routingRegions:m},this.stats={componentId:o,layerCount:e,viaDiameter:d,obstacleMargin:u,multiLayerThreshold:h,narrowPadGapThreshold:A,narrowPadGapNodeCount:m.filter((p)=>p._isNarrowQfpPadGap).length,topPadCount:a.top.length,rightPadCount:a.right.length,bottomPadCount:a.bottom.length,leftPadCount:a.left.length,multiLayerNodeCount:m.filter((p)=>p.availableZ.length>1).length,totalMeshNodeCount:m.length},this.solved=!0}getOutput(){if(!this.output)throw Error("QfpTopologyGeneratorSolver has not solved yet");return this.output}});var c6t=0.000001;function QGo({nodeId:e,bounds:t,availableZ:n,multiLayerThreshold:o,regionType:i,obstacleZ:r=[],connectedTo:s}){if(!function(d){return d.maxX-d.minX>c6t&&d.maxY-d.minY>c6t}(t))return[];let a=function(d){return{center:{x:(d.minX+d.maxX)/2,y:(d.minY+d.maxY)/2},width:d.maxX-d.minX,height:d.maxY-d.minY}}(t),c=Math.min(a.width,a.height)>o,l=c?[{availableZ:n.filter((d)=>!r.includes(d)),containsObstacle:!1},{availableZ:n.filter((d)=>r.includes(d)),containsObstacle:!0}].filter((d)=>d.availableZ.length>0):n.map((d)=>({availableZ:[d],containsObstacle:r.includes(d)}));return l.map((d)=>({capacityMeshNodeId:l.length===1?e:c?`${e}:${d.containsObstacle?"obstacle":"free"}`:`${e}:z${d.availableZ[0]}`,center:a.center,width:a.width,height:a.height,layer:`z${d.availableZ.join(",")}`,availableZ:d.availableZ,_soicRegionType:i,_containsObstacle:d.containsObstacle,_connectedTo:d.containsObstacle?s:void 0}))}function l6t(e,t){let n=0,o=Number.POSITIVE_INFINITY;for(let i=0;i<t.length;i++){let r=Math.abs(e-t[i]);r<o&&(n=i,o=r)}return n}function kGo(e,t){return e.map((n,o)=>({key:`pad:${n.obstacleId??o}`,bounds:mr(n),regionType:"pad",obstacleZ:Lfe(n,t),connectedTo:[...n.connectedTo]}))}function Ske(e,t){if(e.componentId!==t.componentId)return!1;let{bounds:n}=t;return e.center.x>=n.minX&&e.center.x<=n.maxX&&e.center.y>=n.minY&&e.center.y<=n.maxY}function d6t({detectedComponent:e,inputSrj:t}){let n=t.obstacles.filter((a)=>Ske(a,e)),o=Array.from({length:t.layerCount},(a,c)=>c),i=o.map((a)=>nd(a,t.layerCount)),r=Array.from(new Set(n.flatMap((a)=>a.connectedTo))),{bounds:s}=e;return{obstacleId:`${e.componentId}_component_bounds`,componentId:e.componentId,type:"rect",layers:i,__zLayers:o,center:{x:(s.minX+s.maxX)/2,y:(s.minY+s.maxY)/2},width:s.maxX-s.minX,height:s.maxY-s.minY,connectedTo:r}}function Ffe(e){if(e.length===0)return{minX:0,maxX:0,minY:0,maxY:0};let{POSITIVE_INFINITY:t,NEGATIVE_INFINITY:n,POSITIVE_INFINITY:o,NEGATIVE_INFINITY:i}=Number;for(let r of e){let s=mr(r);t=Math.min(t,s.minX),n=Math.max(n,s.maxX),o=Math.min(o,s.minY),i=Math.max(i,s.maxY)}return{minX:t,maxX:n,minY:o,maxY:i}}function LGo(e){let t=e.componentDetectionOutput??[],n=function({detectedComponents:r,inputSrj:s}){return r.map((a)=>{let c=s.obstacles.filter((l)=>Ske(l,a));return{componentId:a.componentId,componentKind:a.componentKind,memberObstacleIds:c.map((l,d)=>l.obstacleId??`${a.componentId}:member:${d}`),memberObstacles:c,replacementObstacle:d6t({detectedComponent:a,inputSrj:s})}})}({detectedComponents:t,inputSrj:e.inputSrj}),o=e.globalNoConnectionSrj??(t.length>0?function({detectedComponents:r,inputSrj:s}){return{...structuredClone(s),obstacles:[...s.obstacles.filter((a)=>!r.some((c)=>Ske(a,c))),...r.map((a)=>d6t({detectedComponent:a,inputSrj:s}))]}}({detectedComponents:t,inputSrj:e.inputSrj}):e.inputSrj)??e.brokenSrj?.componentsAsObstaclesSrj,i=e.components??n??e.brokenSrj?.components??[];if(!o)throw Error("MultiGraphTopologyPlannerSolver requires globalNoConnectionSrj or detected components");return{globalNoConnectionSrj:o,components:i}}function FGo({rects:e,components:t}){return e&&t.length!==0?e.filter((n)=>!function(o){return typeof o.label=="string"&&o.label.startsWith("node ")}(n)||!t.some((o)=>function({rect:i,obstacle:r}){if(!i.center||i.width===void 0||i.height===void 0)return!1;let s=0.000000001,a=Gd({center:i.center,width:i.width,height:i.height}),c=Gd({center:r.center,width:r.width,height:r.height});return XGt({bounds:a,outerBounds:c,epsilon:s})}({rect:n,obstacle:o.replacementObstacle}))):e}function XGt({bounds:e,outerBounds:t,epsilon:n}){return e.minX>=t.minX-n&&e.maxX<=t.maxX+n&&e.minY>=t.minY-n&&e.maxY<=t.maxY+n}ane.register(class extends Js{constructor(e){super(),this.inputProblem=e}inputProblem;static componentKind="soic";output=null;getConstructorParams(){return[this.inputProblem]}_step(){if(this.output)return void(this.solved=!0);let{layerCount:e,obstacles:t}=this.inputProblem.inputSrj,{bounds:n,componentId:o}=this.inputProblem.detectedComponent,i=HHe(e),r=t.filter((_)=>_.componentId===o),s=r.length>0?r:t,a=function(_){let f=c_e(_.map((y)=>y.center.y)).length;return c_e(_.map((y)=>y.center.x)).length===2&&f!==2?"vertical-columns":"horizontal-rows"}(s),c=function({obstacles:_,orientation:f}){let y={left:[],right:[],top:[],bottom:[]};if(f==="vertical-columns"){let C=c_e(_.map((I)=>I.center.x));for(let I of _)y[l6t(I.center.x,C)===0?"left":"right"].push(I);return y.left.sort((I,b)=>I.center.y-b.center.y),y.right.sort((I,b)=>I.center.y-b.center.y),y}let x=c_e(_.map((C)=>C.center.y));for(let C of _)y[l6t(C.center.y,x)===0?"top":"bottom"].push(C);return y.top.sort((C,I)=>C.center.x-I.center.x),y.bottom.sort((C,I)=>C.center.x-I.center.x),y}({obstacles:s,orientation:a}),l=function({bounds:_,orientation:f,sideGroups:y}){return f==="vertical-columns"?{minX:Math.max(...y.left.map((x)=>mr(x).maxX)),maxX:Math.min(...y.right.map((x)=>mr(x).minX)),minY:_.minY,maxY:_.maxY}:{minX:_.minX,maxX:_.maxX,minY:Math.max(...y.top.map((x)=>mr(x).maxY)),maxY:Math.min(...y.bottom.map((x)=>mr(x).minY))}}({bounds:n,orientation:a,sideGroups:c}),d=o,u=this.inputProblem.viaDiameter??y0(this.inputProblem.inputSrj).padDiameter,h=this.inputProblem.obstacleMargin??this.inputProblem.inputSrj.defaultObstacleMargin??0.15,A=2*(u+h),m=a==="vertical-columns"?["left","right"]:["top","bottom"],p=[{key:"center",bounds:l,regionType:"center"},...kGo(s,e),...m.flatMap((_)=>function({side:f,sideObstacles:y,bounds:x,centralBounds:C}){let I=[];for(let b=0;b<y.length-1;b++){let P=mr(y[b]),E=mr(y[b+1]),B;B=f==="left"?{minX:x.minX,maxX:C.minX,minY:P.maxY,maxY:E.minY}:f==="right"?{minX:C.maxX,maxX:x.maxX,minY:P.maxY,maxY:E.minY}:f==="top"?{minX:P.maxX,maxX:E.minX,minY:x.minY,maxY:C.minY}:{minX:P.maxX,maxX:E.minX,minY:C.maxY,maxY:x.maxY},I.push({key:`${f}-gap-${b}`,bounds:B,regionType:"pad-gap"})}return I}({side:_,sideObstacles:c[_],bounds:n,centralBounds:l}))],g=p.flatMap((_)=>QGo({nodeId:`soic:${d}:${_.key}`,bounds:_.bounds,availableZ:i,multiLayerThreshold:A,regionType:_.regionType,obstacleZ:_.obstacleZ,connectedTo:_.connectedTo}));this.output={routingRegions:g},this.stats={componentId:o,layerCount:e,orientation:a,viaDiameter:u,obstacleMargin:h,multiLayerThreshold:A,firstSidePadCount:c[m[0]].length,secondSidePadCount:c[m[1]].length,multiLayerNodeCount:g.filter((_)=>_.availableZ.length>1).length,totalMeshNodeCount:g.length},this.solved=!0}getOutput(){if(!this.output)throw Error("SoicTopologyGeneratorSolver has not solved yet");return this.output}});var HGo=class extends Js{constructor(e){super(),this.inputProblem=e}inputProblem;activeSubSolver=null;currentIndex=0;componentMeshNodes=[];getConstructorParams(){return[this.inputProblem]}_step(){if(this.activeSubSolver){if(this.activeSubSolver.step(),this.activeSubSolver.failed)return this.error=this.activeSubSolver.error,this.failed=!0,void(this.activeSubSolver=null);if(!this.activeSubSolver.solved)return;return this.componentMeshNodes.push(this.activeSubSolver.getOutput().routingRegions),this.currentIndex+=1,void(this.activeSubSolver=null)}if(this.currentIndex>=this.inputProblem.componentSrjs.length)return void(this.solved=!0);let e=this.inputProblem.componentKinds[this.currentIndex],t=this.inputProblem.componentSrjs[this.currentIndex],n={inputSrj:t,detectedComponent:{componentId:this.inputProblem.componentIds[this.currentIndex],componentKind:e,bounds:{__type:"rect",...t.bounds}},viaDiameter:this.inputProblem.viaDiameter,obstacleMargin:this.inputProblem.obstacleMargin};this.activeSubSolver=ane.create(n)}getOutput(){return{componentMeshNodes:this.componentMeshNodes}}visualize(){if(this.activeSubSolver)return this.activeSubSolver.visualize();let e=this.inputProblem.componentSrjs[this.currentIndex]??null,t=this.componentMeshNodes.flatMap((n)=>n);return{rects:[...e?[{center:{x:(e.bounds.minX+e.bounds.maxX)/2,y:(e.bounds.minY+e.bounds.maxY)/2},width:e.bounds.maxX-e.bounds.minX,height:e.bounds.maxY-e.bounds.minY,fill:"rgba(0,0,0,0)",stroke:"rgba(255,140,0,0.72)",label:`active component ${this.inputProblem.componentIds[this.currentIndex]??this.currentIndex}`},...e.obstacles.map((n)=>({center:n.center,width:n.width,height:n.height,fill:"rgba(255,140,0,0.10)",stroke:"rgba(255,140,0,0.30)",label:n.obstacleId??n.componentId??"obstacle"}))]:[],...t.map((n)=>({...FA(n,{rectMargin:0.01}),fill:n._containsObstacle?"rgba(255,0,0,0.14)":"rgba(0,120,255,0.12)",stroke:n._containsObstacle?"rgba(255,0,0,0.34)":"rgba(0,120,255,0.38)"}))]}}},cL=0.001;function Dge(e){let t=[...e].sort((o,i)=>o-i),n=[];for(let o of t){let i=n[n.length-1];(i===void 0||Math.abs(o-i)>cL)&&n.push(o)}return n}function u6t(e){let t=Math.min(...e),n=Math.max(...e);return!(t<=0)&&n/t<=1.01}function OGo(e){if(!function(s){return u6t(s.map((a)=>a.width))&&u6t(s.map((a)=>a.height))}(e))return!1;if(!function(s){return s.every((a)=>{let c=Math.min(a.width,a.height),l=Math.max(a.width,a.height);return!(c<=0)&&l/c<=1.5})}(e))return!1;let t=Dge(e.map((s)=>s.center.y)),n=Dge(e.map((s)=>s.center.x)),o=t.length,i=n.length;if(o<3||i<3)return!1;let r=o*i;return!((r>0?e.length/r:0)<0.5)&&!!function(s,a,c){if(a.length<3)return!1;if(c.length<3)return!1;let l=new Set(a.slice(1,-1)),d=new Set(c.slice(1,-1)),u=0;for(let h of s)l.has(h.center.y)&&d.has(h.center.x)&&(u+=1);return u>=1}(e,t,n)}function zGo(e){return[Math.round(e.width/cL),Math.round(e.height/cL),e.layers.join(",")].join(":")}function h6t(e){if(e.length<3)return!1;let t=[...e].sort((o,i)=>o-i),n=t[1]-t[0];return!(n<=cL)&&t.every((o,i)=>i===0||Math.abs(o-t[i-1]-n)<=cL)}function GGo(e){let t=function(o){let i=new Map;for(let r of o){let s=Math.round(r.center.y/cL),a=Math.round(r.center.x/cL),c=i.get(s)??{y:r.center.y,obstaclesByX:new Map};c.obstaclesByX.set(a,r),i.set(s,c)}return[...i.values()]}(e),n=[];for(let o of t){let i=[...o.obstaclesByX.keys()];if(!h6t([...o.obstaclesByX.values()].map((a)=>a.center.x)))continue;let r=t.filter((a)=>i.every((c)=>a.obstaclesByX.has(c)));if(!h6t(r.map((a)=>a.y)))continue;let s=r.flatMap((a)=>i.map((c)=>a.obstaclesByX.get(c)));s.length>n.length&&(n=s)}return n}function KGt(e){if(OGo(e))return e;let t=Map.groupBy(e,zGo),n=[];for(let o of t.values()){let i=GGo(o);i.length>n.length&&(n=i)}return n.length>0?n:null}function m6t(e){let t=Math.min(e.width,e.height),n=Math.max(e.width,e.height);return t>0&&n/t>=1.5}function p6t({perimeterPadObstacles:e,thermalPadObstacles:t}){if(t.length===0)return!0;if(t.length>4)return!1;let n=Ffe(e),o=n.maxX-n.minX,i=n.maxY-n.minY,r=n.minX+0.2*o,s=n.maxX-0.2*o,a=n.minY+0.2*i,c=n.maxY-0.2*i,l=Math.min(...e.map((d)=>Math.min(d.width,d.height)));return t.every((d)=>{let u=Math.min(d.width,d.height);return d.center.x>=r&&d.center.x<=s&&d.center.y>=a&&d.center.y<=c&&u>l})}function A6t(e){if(e.length<12)return!1;if(e.length>32)return!1;let{counts:t,maxNearestSideRatio:n}=function(o){let i=Ffe(o),r=i.maxX-i.minX,s=i.maxY-i.minY,a={top:0,right:0,bottom:0,left:0};if(r<=0||s<=0)return{counts:a,maxNearestSideRatio:1};let c=0;for(let l of o){let d=l.width>l.height,u=[{side:"top",distance:Math.abs(l.center.y-i.minY),axisSpan:s,orientationMatches:!d},{side:"right",distance:Math.abs(i.maxX-l.center.x),axisSpan:r,orientationMatches:d},{side:"bottom",distance:Math.abs(i.maxY-l.center.y),axisSpan:s,orientationMatches:!d},{side:"left",distance:Math.abs(l.center.x-i.minX),axisSpan:r,orientationMatches:d}].filter((h)=>h.orientationMatches).sort((h,A)=>h.distance-A.distance)[0];a[u.side]+=1,c=Math.max(c,u.distance/u.axisSpan)}return{counts:a,maxNearestSideRatio:c}}(e);return t.top>=3&&t.right>=3&&t.bottom>=3&&t.left>=3&&n<=0.25}function _6t(e){return{perimeterPadObstacles:function(n){return n.filter(m6t)}(e),thermalPadObstacles:e.filter((n)=>!m6t(n))}}function g6t(e){let t=Math.min(...e),n=Math.max(...e);return!(t<=0)&&n/t<=1.01}function f6t(e,t){let n=0,o=Number.POSITIVE_INFINITY;for(let i=0;i<t.length;i++){let r=Math.abs(e-t[i]);r<o&&(n=i,o=r)}return n}function YGo({memberObstacles:e,inputSrj:t}){if(!function(r){return g6t(r.map((s)=>s.width))&&g6t(r.map((s)=>s.height))}(e))return!1;let n=Dge(e.map((r)=>r.center.y)),o=Dge(e.map((r)=>r.center.x));if(!(n.length===2&&o.length>=4||o.length===2&&n.length>=4))return!1;let i=function({memberObstacles:r,rowAxisValues:s,columnAxisValues:a}){if(s.length===2&&a.length>=4){let c=[[],[]];for(let l of r)c[f6t(l.center.y,s)].push(l);return Math.min(...c[1].map((l)=>l.center.y-l.height/2))-Math.max(...c[0].map((l)=>l.center.y+l.height/2))}if(a.length===2&&s.length>=4){let c=[[],[]];for(let l of r)c[f6t(l.center.x,a)].push(l);return Math.min(...c[1].map((l)=>l.center.x-l.width/2))-Math.max(...c[0].map((l)=>l.center.x+l.width/2))}return null}({memberObstacles:e,rowAxisValues:n,columnAxisValues:o});if(i===null)return!1;return i>2*(y0(t).padDiameter+(t.defaultObstacleMargin??0.15))}var VGo=[class e{constructor(t){this.params=t}params;static componentKind="qfp_thermalpad";componentKind=e.componentKind;static isMatch({memberObstacles:t}){return function(n){let{perimeterPadObstacles:o,thermalPadObstacles:i}=_6t(n);return i.length!==0&&!!A6t(o)&&p6t({perimeterPadObstacles:o,thermalPadObstacles:i})}(t)}},class e{constructor(t){this.params=t}params;static componentKind="qfp";componentKind=e.componentKind;static isMatch({memberObstacles:t}){return function(n){let{perimeterPadObstacles:o,thermalPadObstacles:i}=_6t(n);return!(i.length>0)&&!!p6t({perimeterPadObstacles:o,thermalPadObstacles:i})&&A6t(o)}(t)}},class e{constructor(t){this.params=t}params;static componentKind="soic";componentKind=e.componentKind;static isMatch(t){return YGo(t)}},class e{constructor(t){this.params=t}params;static componentKind="bga";componentKind=e.componentKind;static isMatch({memberObstacles:t}){return function(n){return KGt(n)!==null}(t)}}];function UGo(e){return function(t){for(let n of VGo)if(n.isMatch(t))return new n(t);return null}(e)?.componentKind??null}var WGo=class extends Js{inputSrj;initialized=!1;groupedComponentObstacles={};groupedComponentKinds={};unprocessedComponentIds=[];detectedComponents=[];currentComponentId=null;currentMemberObstacles=[];output=null;constructor({inputSrj:e}){super(),this.inputSrj=e}getConstructorParams(){return[{inputSrj:this.inputSrj}]}_step(){this.initialized?this.output?this.solved=!0:this.currentComponentId!==null||this.unprocessedComponentIds.length>0?this.processNextComponent():(this.finalizeOutput(),this.solved=!0):this.initializeDetectionState()}getOutput(){if(!this.output)throw Error("ComponentDetectionSolver has not solved yet");return this.output}visualize(){let e=[];e.push(...this.inputSrj.obstacles.filter((n)=>!n.componentId).map((n)=>({center:n.center,width:n.width,height:n.height,fill:"rgba(120, 120, 120, 0.10)",stroke:"rgba(120, 120, 120, 0.40)",label:n.obstacleId,layer:n.layers.join(","),step:0})));let t=new Set(this.detectedComponents.map((n)=>n.componentId));for(let n of this.inputSrj.obstacles){if(!n.componentId)continue;if(t.has(n.componentId))continue;let o=n.componentId===this.currentComponentId,i=jee(n.componentId),r=this.groupedComponentKinds[n.componentId];e.push({center:n.center,width:n.width,height:n.height,fill:Cr(i,o?0.55:0.82),stroke:Cr(i,o?0.1:0.45),label:r?`${n.componentId} ${r.toUpperCase()}`:n.componentId,layer:n.layers.join(","),step:o?1:0})}for(let n of this.detectedComponents){let o=jee(n.componentId);e.push({center:{x:(n.bounds.minX+n.bounds.maxX)/2,y:(n.bounds.minY+n.bounds.maxY)/2},width:n.bounds.maxX-n.bounds.minX,height:n.bounds.maxY-n.bounds.minY,fill:Cr(o,0.88),stroke:Cr(o,0.1),label:`${n.componentId} ${n.componentKind.toUpperCase()} region`,step:2})}return{title:this.getVisualizationTitle(),rects:e,lines:[],points:[],circles:[]}}preview(){return this.visualize()}initializeDetectionState(){this.initialized=!0,this.groupedComponentKinds={},this.groupedComponentObstacles=this.groupObstaclesByComponentId({obstacles:this.inputSrj.obstacles}),this.unprocessedComponentIds=Object.keys(this.groupedComponentObstacles).sort(),this.detectedComponents=[],this.currentComponentId=null,this.currentMemberObstacles=[],this.output=null}processNextComponent(){if(!this.currentComponentId){let e=this.unprocessedComponentIds.shift();return e?(this.currentComponentId=e,void(this.currentMemberObstacles=this.groupedComponentObstacles[e]??[])):(this.currentComponentId=null,void(this.currentMemberObstacles=[]))}if(this.currentMemberObstacles.length===0)return this.currentComponentId=null,void(this.currentMemberObstacles=[]);this.detectedComponents.push(this.createDetectedComponent({componentId:this.currentComponentId,componentKind:this.groupedComponentKinds[this.currentComponentId],memberObstacles:this.currentMemberObstacles})),this.currentComponentId=null,this.currentMemberObstacles=[]}finalizeOutput(){this.output=this.detectedComponents.map((e)=>({...e,bounds:{...e.bounds}})),this.stats={initialized:this.initialized,totalComponentCount:Object.keys(this.groupedComponentObstacles).length,detectedComponentCount:this.detectedComponents.length,detectedBgaComponentCount:this.detectedComponents.filter((e)=>e.componentKind==="bga").length,detectedQfpComponentCount:this.detectedComponents.filter((e)=>e.componentKind==="qfp").length,detectedQfpComponentIds:this.detectedComponents.filter((e)=>e.componentKind==="qfp").map((e)=>e.componentId),detectedQfpThermalPadComponentCount:this.detectedComponents.filter((e)=>e.componentKind==="qfp_thermalpad").length,detectedQfpThermalPadComponentIds:this.detectedComponents.filter((e)=>e.componentKind==="qfp_thermalpad").map((e)=>e.componentId),detectedSoicComponentCount:this.detectedComponents.filter((e)=>e.componentKind==="soic").length,detectedSoicComponentIds:this.detectedComponents.filter((e)=>e.componentKind==="soic").map((e)=>e.componentId),remainingComponentCount:this.unprocessedComponentIds.length,hasActiveComponent:this.currentComponentId!==null}}groupObstaclesByComponentId({obstacles:e}){let t={},n={};for(let i of e)i.componentId&&(t[i.componentId]??=[],t[i.componentId].push(i));let o=Object.entries(t).flatMap(([i,r])=>{let s=this.inputSrj.bounds;if(r.some((c)=>!XGt({bounds:mr(c),outerBounds:s,epsilon:0})))return[];let a=UGo({memberObstacles:r,inputSrj:this.inputSrj});if(!a)return[];return n[i]=a,[[i,a==="bga"?KGt(r):r]]});return this.groupedComponentKinds=n,Object.fromEntries(o)}createDetectedComponent({componentId:e,componentKind:t,memberObstacles:n}){return{componentId:e,componentKind:t,bounds:{__type:"rect",...Ffe(n)}}}getVisualizationTitle(){let e=Object.keys(this.groupedComponentObstacles).length||new Set(this.inputSrj.obstacles.map((n)=>n.componentId).filter((n)=>Boolean(n))).size,t=this.detectedComponents.length;return this.initialized?this.output||this.solved?`Component Detection: done ${t}/${e}`:this.currentComponentId!==null||this.unprocessedComponentIds.length>0?`Component Detection: ${t}/${e} processed`:`Component Detection: finalizing ${t}/${e}`:"Component Detection: setup"}},XGo=(e)=>e.componentId&&e.obstacleId?`${e.componentId}
${e.obstacleId}`:e.componentId??e.obstacleId??"obstacle",jGt=class extends KE{rectBoundsComponentDetection;pipelineDef=[bh("rectBoundsComponentDetection",WGo,(e)=>[{inputSrj:e.inputProblem.inputSrj}])];getConstructorParams(){return[this.inputProblem]}getOutput(){let e=this.getStageOutput("rectBoundsComponentDetection");if(!e)throw Error("ComponentDetectionSolver has not solved yet");return e}initialVisualize(){let{bounds:e}=this.inputProblem.inputSrj;return{title:"Component Detection: board and grouped component pads",rects:[{center:{x:(e.minX+e.maxX)/2,y:(e.minY+e.maxY)/2},width:e.maxX-e.minX,height:e.maxY-e.minY,fill:"rgba(0, 0, 0, 0)",stroke:"rgba(40, 40, 40, 0.7)",label:"Board bounds",step:0},...this.inputProblem.inputSrj.obstacles.map((t)=>{let n=t.componentId?jee(t.componentId):null;return{center:t.center,width:t.width,height:t.height,fill:n?Cr(n,0.72):"rgba(120, 120, 120, 0.10)",stroke:n?Cr(n,0.28):"rgba(120, 120, 120, 0.40)",label:XGo(t),layer:t.layers.join(","),step:t.componentId?1:0}})],lines:[],points:[],circles:[]}}},gE=0.000000001;function Ok(e){return Gd({center:e.center,width:e.width,height:e.height})}function qGt(e,t){let n={minX:Math.max(e.minX,t.minX),maxX:Math.min(e.maxX,t.maxX),minY:Math.max(e.minY,t.minY),maxY:Math.min(e.maxY,t.maxY)};return OHe(n)?n:null}function OHe(e){let t=e.maxX-e.minX,n=e.maxY-e.minY,o=Number.isFinite(t)&&t>gE,i=Number.isFinite(n)&&n>gE;return o&&i}function KGo(e){(function(o){if(!Number.isInteger(o.layerCount))throw Error("TopologyMergingSolver: layerCount must be an integer");if(o.layerCount<=0)throw Error("TopologyMergingSolver: layerCount must be positive");if(o.nodeGroups.length===0)throw Error("TopologyMergingSolver: at least one node group is required");let i=new Set,r=0;for(let s of o.nodeGroups){if(i.has(s.groupId))throw Error(`TopologyMergingSolver: duplicate topology group id "${s.groupId}"`);if(i.add(s.groupId),r+=s.nodes.length,s.nodes.length===0)throw Error(`TopologyMergingSolver: topology group "${s.groupId}" is empty`);let a=new Set;for(let c of s.nodes){if(a.has(c.capacityMeshNodeId))throw Error(`TopologyMergingSolver: duplicate node id "${c.capacityMeshNodeId}" in group "${s.groupId}"`);a.add(c.capacityMeshNodeId),jGo({node:c,groupId:s.groupId,layerCount:o.layerCount})}}if(r===0)throw Error("TopologyMergingSolver: topology node groups are empty")})(e);let t=[],n=new Map;for(let o=0;o<e.nodeGroups.length;o++){let i=e.nodeGroups[o];for(let r of i.nodes){let s={sourceKey:`${i.groupId}:${r.capacityMeshNodeId}`,groupIndex:o,node:r,bounds:Ok(r)};t.push(s),n.set(s.sourceKey,s)}}return{preparedNodes:t,preparedNodeBySourceKey:n}}function jGo({node:e,groupId:t,layerCount:n}){if(!OHe(Ok(e)))throw Error(`TopologyMergingSolver: node "${e.capacityMeshNodeId}" in group "${t}" has invalid bounds`);if(e.availableZ.length===0)throw Error(`TopologyMergingSolver: node "${e.capacityMeshNodeId}" in group "${t}" has no available layers`);let o=[...new Set(e.availableZ)].sort((s,a)=>s-a),i=o.some((s)=>!Number.isInteger(s)||s<0||s>=n),r=o.length===e.availableZ.length&&o.every((s,a)=>s===e.availableZ[a]);if(i||!r)throw Error(`TopologyMergingSolver: node "${e.capacityMeshNodeId}" in group "${t}" has invalid or unsorted availableZ`)}var u1=0.00001,IV=0.00004;function y6t({regions:e,preparedNodeBySourceKey:t,nodeGroups:n,provenance:o,preserveSourceIds:i=!0}){i&&(o.groupIndexesByNodeId.clear(),o.sourceKeysByNodeId.clear());let r=[...e].sort((a,c)=>a.bounds.minX-c.bounds.minX||a.bounds.minY-c.bounds.minY||a.bounds.maxX-c.bounds.maxX||a.bounds.maxY-c.bounds.maxY||a.availableZ[0]-c.availableZ[0]),s=new Set;return r.map((a,c)=>{let l=a.sourceKeys.map((p)=>{let g=t.get(p);if(!g)throw Error(`TopologyMergingSolver: missing source node for "${p}"`);return g}),d=l.map(({node:p})=>p),u=function({sourceNodes:p,isComponentTopologyNode:g}){if(p.length===1)return{_isComponentTopologyNode:!!g||p[0]._isComponentTopologyNode};let _=p.map((b)=>b.capacityMeshNodeId),f=tRe(p.map((b)=>b._targetConnectionName),"target connection",_),y=tRe(p.map((b)=>b._offBoardConnectionId),"off-board connection",_),x=tRe(p.map((b)=>b._offboardNetName),"off-board net",_),C=Array.from(new Set(p.flatMap((b)=>b._offBoardConnectedCapacityMeshNodeIds??[]))),I=Array.from(new Set(p.flatMap((b)=>b._connectedTo??[])));return{_containsObstacle:p.some((b)=>b._containsObstacle)||void 0,_completelyInsideObstacle:p.some((b)=>b._completelyInsideObstacle)||void 0,_containsTarget:p.some((b)=>b._containsTarget)||void 0,_targetConnectionName:f,_isVirtualOffboard:p.some((b)=>b._isVirtualOffboard)||void 0,_offboardNetName:x,_offBoardConnectionId:y,_offBoardConnectedCapacityMeshNodeIds:C.length>0?C:void 0,_qfpRegionType:x6t(p.map((b)=>b._qfpRegionType)),_isNarrowQfpPadGap:p.some((b)=>b._isNarrowQfpPadGap)||void 0,_soicRegionType:x6t(p.map((b)=>b._soicRegionType)),_isComponentTopologyNode:g||void 0,_connectedTo:I.length>0?I:void 0}}({sourceNodes:d,isComponentTopologyNode:l.some(({groupIndex:p})=>n[p].isComponent)}),h=i&&l.length===1?l[0].node:null,m=Boolean(h&&function({region:p,sourceNode:g,usedNodeIds:_}){let f=Ok(g),y=Math.abs(p.bounds.minX-f.minX)<=u1&&Math.abs(p.bounds.maxX-f.maxX)<=u1&&Math.abs(p.bounds.minY-f.minY)<=u1&&Math.abs(p.bounds.maxY-f.maxY)<=u1,x=p.availableZ.length===g.availableZ.length&&p.availableZ.every((C,I)=>C===g.availableZ[I]);return y&&x&&!_.has(g.capacityMeshNodeId)}({region:a,sourceNode:h,usedNodeIds:s}))?h.capacityMeshNodeId:`topology_merge_${c}`;for(;s.has(m);)m=`${m}_next`;return s.add(m),i&&(o.groupIndexesByNodeId.set(m,[...new Set(l.map(({groupIndex:p})=>p))]),o.sourceKeysByNodeId.set(m,[...a.sourceKeys])),{...h??d[0],...u,capacityMeshNodeId:m,center:{x:(a.bounds.minX+a.bounds.maxX)/2,y:(a.bounds.minY+a.bounds.maxY)/2},width:a.bounds.maxX-a.bounds.minX,height:a.bounds.maxY-a.bounds.minY,layer:`z${a.availableZ.join(",")}`,availableZ:[...a.availableZ],_adjacentNodeIds:void 0,_parent:void 0,_strawNode:void 0,_strawParentCapacityMeshNodeId:void 0}})}function tRe(e,t,n){let o=Array.from(new Set(e.filter((i)=>i!==void 0)));if(o.length>1)throw Error(`TopologyMergingSolver: conflicting ${t} values for overlapping source nodes ${n.join(", ")}`);return o[0]}function x6t(e){let t=Array.from(new Set(e.filter((n)=>n!==void 0)));return t.length===1?t[0]:void 0}function qGo({node:e,sourceKey:t,preparedNodeBySourceKey:n}){let o=n.get(t);if(!o)throw Error(`TopologyMergingSolver: missing source node for output "${e.capacityMeshNodeId}"`);let i=Ok(e),r=i.minX>=o.bounds.minX-IV&&i.maxX<=o.bounds.maxX+IV&&i.minY>=o.bounds.minY-IV&&i.maxY<=o.bounds.maxY+IV,s=e.availableZ.every((a)=>o.node.availableZ.includes(a));if(!r||!s)throw Error(`TopologyMergingSolver: output node "${e.capacityMeshNodeId}" escapes its source geometry or layers`)}function JGo({groupIndexesA:e,groupIndexesB:t,sourceKeysA:n,sourceKeysB:o,sharedLayers:i,preparedNodeBySourceKey:r}){if(e.length!==1||t.length!==1||e[0]!==t[0]||n.length!==1||o.length!==1||n[0]===o[0])return!1;let s=r.get(n[0]),a=r.get(o[0]);if(!s||!a||i.length===0)return!1;return i.some((c)=>s.node.availableZ.includes(c)&&a.node.availableZ.includes(c))&&qGt(s.bounds,a.bounds)!==null}function C6t(e){let t=[...e].sort((o,i)=>o-i),n=[];for(let o of t){let i=n[n.length-1];(i===void 0||Math.abs(o-i)>u1)&&n.push(o)}return n}function $Go(e,t){return t.x>=e.minX-u1&&t.x<=e.maxX+u1&&t.y>=e.minY-u1&&t.y<=e.maxY+u1}function ZGo({coveringNodes:e,nodeGroups:t,layerCount:n}){let o=new Map;for(let i=0;i<n;i++){let r=e.filter(({node:h})=>h.availableZ.includes(i)).sort((h,A)=>h.sourceKey.localeCompare(A.sourceKey));if(r.length===0)continue;let s=new Set(r.map(({groupIndex:h})=>h)),a=r.filter(({node:h})=>h._containsObstacle&&h._containsTarget),c=a.filter(({groupIndex:h})=>!t[h].isComponent),l=new Set(a.map(({groupIndex:h})=>h)),d=a.length>0?c.length>0||l.size===1?"target-passthrough":"target-merged":s.size===1?"passthrough":"merged",u=nYo({topologyMode:d,nodesOnLayer:r,targetObstacleNodes:a,globalTargetObstacleNodes:c});for(let h of u){let A=JSON.stringify({mode:d,sourceKeys:h}),m=o.get(A);m?m.availableZ.push(i):o.set(A,{availableZ:[i],sourceKeys:h,topologyMode:d,topologySignature:A})}}return[...o.values()]}function JGt(e){return JSON.stringify({availableZ:e.availableZ,topologySignature:e.topologySignature})}function eYo(e){return JSON.stringify({mergeKey:JGt(e),minY:e.bounds.minY.toPrecision(15),maxY:e.bounds.maxY.toPrecision(15)})}function tYo(e){return JSON.stringify({mergeKey:JGt(e),minX:e.bounds.minX.toPrecision(15),maxX:e.bounds.maxX.toPrecision(15)})}function I6t(e,t){let n=new Map;for(let o of e){let i=t==="horizontal"?eYo(o):tYo(o),r=n.get(i)??[];r.push(o),n.set(i,r)}return[...n.values()].flatMap((o)=>function(i,r){let s=[...i].sort((c,l)=>r==="horizontal"?c.bounds.minX-l.bounds.minX:c.bounds.minY-l.bounds.minY),a=[];for(let c of s){let l=a[a.length-1],d=l!==void 0&&(r==="horizontal"?Math.abs(l.bounds.maxX-c.bounds.minX)<=u1:Math.abs(l.bounds.maxY-c.bounds.minY)<=u1);l&&d?r==="horizontal"?l.bounds.maxX=c.bounds.maxX:l.bounds.maxY=c.bounds.maxY:a.push({...c,bounds:{...c.bounds},availableZ:[...c.availableZ],sourceKeys:[...c.sourceKeys]})}return a}(o,t))}function nYo({topologyMode:e,nodesOnLayer:t,targetObstacleNodes:n,globalTargetObstacleNodes:o}){if(e==="target-passthrough")return(o.length>0?o:n).map(({sourceKey:i})=>[i]);return e==="target-merged"?[n.map(({sourceKey:i})=>i).sort()]:e==="passthrough"?t.map(({sourceKey:i})=>[i]):[t.map(({sourceKey:i})=>i).sort()]}var $Gt=class extends Js{constructor(e){super(),this.inputProblem=e,this.MAX_ITERATIONS=1e5;let{preparedNodes:t,preparedNodeBySourceKey:n}=KGo(e);this.preparedNodes=t,this.preparedNodeBySourceKey=n,this.xCoordinates=C6t(this.preparedNodes.flatMap(({bounds:o})=>[o.minX,o.maxX])),this.stats={inputNodeCount:this.preparedNodes.length,xSlabCount:Math.max(0,this.xCoordinates.length-1),processedXSlabCount:0,atomicRegionCount:0,outputNodeCount:0}}inputProblem;preparedNodes;preparedNodeBySourceKey;outputProvenance={groupIndexesByNodeId:new Map,sourceKeysByNodeId:new Map};xCoordinates;atomicRegions=[];outputNodes=[];currentXIndex=0;getConstructorParams(){return[this.inputProblem]}_step(){if(this.inputProblem.nodeGroups.length===1)return void this.completePassthroughTopology();if(this.currentXIndex<this.xCoordinates.length-1)return this.processCurrentXSlab(),this.currentXIndex+=1,this.stats.processedXSlabCount=this.currentXIndex,void(this.stats.atomicRegionCount=this.atomicRegions.length);let e=function(t){let n=t;for(;;){let o=I6t(n,"horizontal"),i=I6t(o,"vertical");if(i.length===n.length)return i;n=i}}(function({regions:t,preparedNodeBySourceKey:n}){let o=new Map;for(let r of t)for(let s of r.sourceKeys){let a=o.get(s)??new Set;a.add(r.topologyMode),o.set(s,a)}let i=new Set([...o.entries()].filter(([,r])=>r.size===1&&r.has("target-passthrough")).map(([r])=>r));return i.size===0?t:[...t.filter((r)=>r.topologyMode!=="target-passthrough"||!i.has(r.sourceKeys[0])),...[...i].map((r)=>{let s=n.get(r);if(!s)throw Error(`TopologyMergingSolver: missing authoritative target source "${r}"`);return{bounds:{...s.bounds},availableZ:[...s.node.availableZ],sourceKeys:[r],topologyMode:"target-passthrough",topologySignature:JSON.stringify({mode:"target-passthrough",sourceKeys:[r]})}})]}({regions:this.atomicRegions,preparedNodeBySourceKey:this.preparedNodeBySourceKey}));this.outputNodes=y6t({regions:e,preparedNodeBySourceKey:this.preparedNodeBySourceKey,nodeGroups:this.inputProblem.nodeGroups,provenance:this.outputProvenance}),function({nodes:t,preparedNodeBySourceKey:n,provenance:o}){let i=new Set;for(let r of t){if(i.has(r.capacityMeshNodeId))throw Error(`TopologyMergingSolver: duplicate output node id "${r.capacityMeshNodeId}"`);if(i.add(r.capacityMeshNodeId),!OHe(Ok(r)))throw Error(`TopologyMergingSolver: output node "${r.capacityMeshNodeId}" has invalid bounds`);if(r.availableZ.length===0)throw Error(`TopologyMergingSolver: output node "${r.capacityMeshNodeId}" has no available layers`);let s=o.sourceKeysByNodeId.get(r.capacityMeshNodeId);if(!s)throw Error(`TopologyMergingSolver: missing output provenance for node "${r.capacityMeshNodeId}"`);s.length===1&&qGo({node:r,sourceKey:s[0],preparedNodeBySourceKey:n})}for(let r=0;r<t.length;r++){let s=t[r],a=Ok(s);for(let c=r+1;c<t.length;c++){let l=t[c];if(l.center.x-l.width/2>a.maxX||l.center.x+l.width/2<a.minX||l.center.y-l.height/2>a.maxY||l.center.y+l.height/2<a.minY)continue;let d=s.availableZ.filter((f)=>l.availableZ.includes(f));if(d.length===0)continue;let u=qGt(a,Ok(l));if(!u)continue;let h=u.maxX-u.minX,A=u.maxY-u.minY;if(h<=IV||A<=IV)continue;let m=o.groupIndexesByNodeId.get(s.capacityMeshNodeId),p=o.groupIndexesByNodeId.get(l.capacityMeshNodeId);if(!m||!p)throw Error(`TopologyMergingSolver: missing output provenance for overlapping nodes "${s.capacityMeshNodeId}" and "${l.capacityMeshNodeId}"`);let g=o.sourceKeysByNodeId.get(s.capacityMeshNodeId),_=o.sourceKeysByNodeId.get(l.capacityMeshNodeId);if(!g||!_)throw Error(`TopologyMergingSolver: missing source provenance for overlapping nodes "${s.capacityMeshNodeId}" and "${l.capacityMeshNodeId}"`);if(!JGo({groupIndexesA:m,groupIndexesB:p,sourceKeysA:g,sourceKeysB:_,sharedLayers:d,preparedNodeBySourceKey:n}))throw Error(`TopologyMergingSolver: output nodes "${s.capacityMeshNodeId}" and "${l.capacityMeshNodeId}" have an unresolved inter-group overlap on a shared layer`)}}}({nodes:this.outputNodes,preparedNodeBySourceKey:this.preparedNodeBySourceKey,provenance:this.outputProvenance}),this.stats.outputNodeCount=this.outputNodes.length,this.stats.compactedRegionCount=e.length,this.solved=!0}getOutput(){if(!this.solved)throw Error("TopologyMergingSolver: getOutput() called before the solver completed");return this.outputNodes}computeProgress(){let e=Math.max(1,this.xCoordinates.length-1);return this.solved?1:Math.min(0.99,this.currentXIndex/e)}visualize(){let e=this.solved?this.outputNodes:y6t({regions:this.atomicRegions,preparedNodeBySourceKey:this.preparedNodeBySourceKey,nodeGroups:this.inputProblem.nodeGroups,provenance:this.outputProvenance,preserveSourceIds:!1});return{title:`Topology Merging: ${e.length} refined regions`,coordinateSystem:"cartesian",rects:e.map((t)=>({...FA(t,{rectMargin:0.01,zOffset:0.02}),label:`${t.capacityMeshNodeId}
availableZ: ${t.availableZ.join(",")}
component: ${t._isComponentTopologyNode?"yes":"no"}`})),lines:[],points:[],circles:[],texts:[]}}completePassthroughTopology(){let e=this.inputProblem.nodeGroups[0];this.outputNodes=e.nodes;for(let t of this.outputNodes)this.outputProvenance.groupIndexesByNodeId.set(t.capacityMeshNodeId,[0]),this.outputProvenance.sourceKeysByNodeId.set(t.capacityMeshNodeId,[`${e.groupId}:${t.capacityMeshNodeId}`]);this.stats.processedXSlabCount=this.stats.xSlabCount,this.stats.atomicRegionCount=0,this.stats.compactedRegionCount=0,this.stats.outputNodeCount=this.outputNodes.length,this.stats.passthroughNodeCount=this.outputNodes.length,this.solved=!0}processCurrentXSlab(){let e=this.xCoordinates[this.currentXIndex],t=this.xCoordinates[this.currentXIndex+1];if(t-e<=u1)return;let n=(e+t)/2,o=this.preparedNodes.filter(({bounds:r})=>n>=r.minX-u1&&n<=r.maxX+u1),i=C6t(o.flatMap(({bounds:r})=>[r.minY,r.maxY]));for(let r=0;r<i.length-1;r++){let s=i[r],a=i[r+1];if(a-s<=u1)continue;let c={x:n,y:(s+a)/2},l=o.filter(({bounds:u})=>$Go(u,c));if(l.length===0)continue;let d=ZGo({coveringNodes:l,nodeGroups:this.inputProblem.nodeGroups,layerCount:this.inputProblem.layerCount});for(let u of d)this.atomicRegions.push({bounds:{minX:e,maxX:t,minY:s,maxY:a},availableZ:u.availableZ,sourceKeys:u.sourceKeys,topologyMode:u.topologyMode,topologySignature:u.topologySignature})}}};function oYo({meshNodes:e,components:t}){return t.length===0?e:e.map((n)=>t.some((i)=>function({node:r,component:s}){let{replacementObstacle:a}=s,c=Math.abs(r.center.x-a.center.x)<=gE&&Math.abs(r.center.y-a.center.y)<=gE&&Math.abs(r.width-a.width)<=gE&&Math.abs(r.height-a.height)<=gE;if(s.componentKind!=="qfp"&&s.componentKind!=="qfp_thermalpad"&&s.componentKind!=="soic")return c;let l=a.center.x-a.width/2,d=a.center.x+a.width/2,u=a.center.y-a.height/2,h=a.center.y+a.height/2,A=r.center.x>=l-gE&&r.center.x<=d+gE&&r.center.y>=u-gE&&r.center.y<=h+gE,m=r.width*r.height,p=a.width*a.height,g=A&&m>=0.2*p;return c||g}({node:n,component:i}))?{...n,_containsObstacle:void 0,_completelyInsideObstacle:void 0,_containsTarget:void 0,_targetConnectionName:void 0,_connectedTo:void 0}:n)}var ZGt=class extends KE{globalTopologySolver;componentTopologyBatchSolver;normalizedInput;pipelineDef=[bh("globalTopologySolver",bU,(e)=>[e.getGlobalTopologySolverInput()]),bh("componentTopologyBatchSolver",HGo,(e)=>[{componentSrjs:e.getComponentNoConnectionSrjs(),componentIds:e.normalizedInput.components.map((t)=>t.componentId),componentKinds:e.normalizedInput.components.map((t)=>t.componentKind),viaDiameter:e.inputProblem.viaDiameter,obstacleMargin:e.inputProblem.obstacleMargin}])];constructor(e){super(e),this.normalizedInput=LGo(e)}getConstructorParams(){return[this.inputProblem]}getOutput(){let e=oYo({meshNodes:this.getStageOutput("globalTopologySolver")?.meshNodes??[],components:this.normalizedInput.components}),t=this.getStageOutput("componentTopologyBatchSolver")?.componentMeshNodes??[],n=this.getComponentNoConnectionSrjs();return{globalNoConnectionSrj:this.normalizedInput.globalNoConnectionSrj,componentNoConnectionSrjs:n,globalMeshNodes:e,componentMeshNodes:t}}finalVisualize(){let e=this.getOutput();return{title:"Topology Planning: generated topology groups",rects:[...e.componentNoConnectionSrjs.flatMap((t,n)=>{let o=this.normalizedInput.components[n]??null;return t.obstacles.map((i)=>({center:i.center,width:i.width,height:i.height,fill:"rgba(120, 120, 120, 0.06)",stroke:"rgba(120, 120, 120, 0.35)",label:i.obstacleId??o?.componentId??"component-pad",layer:i.layers.join(",")}))}),...[...e.globalMeshNodes,...e.componentMeshNodes.flat()].map((t)=>{let n=this.normalizedInput.components.find((o)=>t.capacityMeshNodeId.includes(o.componentId));return{...FA(t,{rectMargin:0.01}),fill:t._containsObstacle?Cr("red",0.82):"rgba(0, 120, 255, 0.12)",stroke:t._containsObstacle?Cr("red",0.3):"rgba(0, 120, 255, 0.55)",label:n?`${n.componentKind.toUpperCase()} ${t.capacityMeshNodeId}`:t.capacityMeshNodeId}})],lines:[],points:[],circles:[],texts:[]}}visualize(){return this.filterGlobalRectDiffNodesFromVisualization({visualization:super.visualize()})}preview(){return this.filterGlobalRectDiffNodesFromVisualization({visualization:super.preview()})}getComponentNoConnectionSrjs(){return this.normalizedInput.components.map((e)=>function({inputSrj:t,component:n}){let o=Ffe(n.memberObstacles),i=Math.max(t.minViaPadDiameter??t.min_via_pad_diameter??t.minViaDiameter??0.3,t.defaultObstacleMargin??0.15,2*t.minTraceWidth),r=new Set(n.memberObstacles.flatMap((c)=>c.connectedTo)),s=t.connections.flatMap((c)=>c.pointsToConnect.filter((l)=>{let d=[l.pointId,l.pcb_port_id].filter((h)=>typeof h=="string").some((h)=>r.has(h)),u=l.x>=o.minX-i&&l.x<=o.maxX+i&&l.y>=o.minY-i&&l.y<=o.maxY+i;return d&&u})).reduce((c,l)=>({minX:Math.min(c.minX,l.x),maxX:Math.max(c.maxX,l.x),minY:Math.min(c.minY,l.y),maxY:Math.max(c.maxY,l.y)}),o),a=t.obstacles.filter((c)=>D6(mr(c),s)).map((c)=>({...c}));return{...structuredClone(t),bounds:s,obstacles:a}}({inputSrj:this.inputProblem.inputSrj,component:e}))}getGlobalTopologySolverInput(){return{simpleRouteJson:this.normalizedInput.globalNoConnectionSrj,maxGapFillPasses:4}}filterGlobalRectDiffNodesFromVisualization({visualization:e}){return{...e,rects:FGo({rects:e.rects,components:this.normalizedInput.components})}}},nRe=(e,t)=>{if(e)return Object.entries(t).sort(([n],[o])=>o.length-n.length).find(([n])=>e.includes(n))?.[1]},Nge=(e,t)=>({...e,points:e.points?.map((n)=>({...n,color:nRe(n.label,t)??n.color})),lines:e.lines?.map((n)=>({...n,strokeColor:nRe(n.label,t)??n.strokeColor})),circles:e.circles?.map((n)=>{let o=nRe(n.label,t);return o?{...n,fill:o,stroke:o}:n})}),eYt=class extends Oi{constructor(e){super(),this.topologyPlanningSolver=e,this.solved=e.solved,this.failed=e.failed,this.error=e.error,this.stats=e.stats}topologyPlanningSolver;getOutput(){return this.topologyPlanningSolver.getOutput().componentMeshNodes.flat()}visualize(){return this.topologyPlanningSolver.finalVisualize()??this.topologyPlanningSolver.visualize()}preview(){return this.visualize()}},vL=class{MAX_ITERATIONS=1e5;solved=!1;failed=!1;iterations=0;progress=0;error=null;activeSubSolver;failedSubSolvers;timeToSolve;stats={};_setupDone=!1;getSolverName(){return this.constructor.name}setup(){this._setupDone||(this._setup(),this._setupDone=!0)}_setup(){}step(){if(this._setupDone||this.setup(),!this.solved&&!this.failed){this.iterations++;try{this._step()}catch(e){throw this.error=`${this.getSolverName()} error: ${e}`,this.failed=!0,e}!this.solved&&this.iterations>=this.MAX_ITERATIONS&&this.tryFinalAcceptance(),!this.solved&&this.iterations>=this.MAX_ITERATIONS&&(this.error=`${this.getSolverName()} ran out of iterations`,this.failed=!0),"computeProgress"in this&&(this.progress=this.computeProgress())}}_step(){}getConstructorParams(){throw Error("getConstructorParams not implemented")}getOutput(){return null}solve(){let e=Date.now();for(;!this.solved&&!this.failed;)this.step();let t=Date.now();this.timeToSolve=t-e}visualize(){return{lines:[],points:[],rects:[],circles:[]}}tryFinalAcceptance(){}preview(){return{lines:[],points:[],rects:[],circles:[]}}},oRe=(e)=>e.filter((t)=>Boolean(t)),b6t=(e,t,n)=>{let o=`${Math.round(100*e.x)},${Math.round(100*e.y)}`,i=t.map((r)=>((s,a)=>s==="top"?0:s==="bottom"?a-1:Number.parseInt(s.slice(5),10))(r,n)).sort().join("-");return`${o}:${i}`},F6=class{parent=new Map;cachedObstacles;canonicalSetsByAliases=new Map;constructor(e,t=e.traces??[],n={}){for(let o of e.connections)this.unionAll(oRe([o.name,o.source_trace_id,o.rootConnectionName,o.netConnectionName,...o.mergedConnectionNames??[],...o.pointsToConnect.flatMap((i)=>[i.pointId,i.pcb_port_id,...n.includePhysicalPositionAliases?[b6t(i,i.layers??[i.layer],e.layerCount)]:[]])]));for(let o of[...t,...e.fixedTraces??[]])this.unionAll(oRe([o.pcb_trace_id,o.connection_name,o.source_trace_id,o.rootConnectionName,...o.mergedConnectionNames??[],...o.connectsTo??[]]));for(let o of e.obstacles)this.unionAll(n.includePhysicalPositionAliases?oRe([o.obstacleId,...o.connectedTo,...o.offBoardConnectsTo??[],b6t(o.center,o.layers,e.layerCount)]):o.connectedTo);this.setCacheableObstacles(e.obstacles)}setCacheableObstacles(e){if(this.cachedObstacles!==e){this.cachedObstacles=e,this.canonicalSetsByAliases.clear();for(let t of e)this.canonicalSetsByAliases.set(t.connectedTo,null)}}canonicalize(e){return[...new Set(e.map((t)=>this.find(t)))]}canonicalizeToSet(e){let t=this.canonicalSetsByAliases.get(e);if(t&&e.length===t.aliases.length&&e.every((o,i)=>o===t.aliases[i]))return t.canonicalNames;let n=new Set(this.canonicalize(e));return this.canonicalSetsByAliases.has(e)&&this.canonicalSetsByAliases.set(e,{aliases:[...e],canonicalNames:n}),n}unionAll(e){let t=e[0];if(t){this.add(t);for(let n=1;n<e.length;n++)this.union(t,e[n])}}add(e){this.parent.has(e)||this.parent.set(e,e)}find(e){this.add(e);let t=this.parent.get(e);if(t===e)return e;let n=this.find(t);return this.parent.set(e,n),n}union(e,t){let n=this.find(e),o=this.find(t);n!==o&&this.parent.set(o,n)}},ti=0.000001,os=(e,t)=>Math.hypot(t.x-e.x,t.y-e.y),Rk=(e,t,n)=>{let o=n.x-t.x,i=n.y-t.y,r=o*o+i*i;if(r<=0.000000000001)return os(e,t);let s=Ih(((e.x-t.x)*o+(e.y-t.y)*i)/r,0,1);return Math.hypot(e.x-(t.x+o*s),e.y-(t.y+i*s))},zk=(e,t,n=0.000001)=>Math.abs(e.x-t.x)<=n&&Math.abs(e.y-t.y)<=n,Ih=(e,t,n)=>Math.max(t,Math.min(n,e)),bee=(e,t,n)=>(t.x-e.x)*(n.y-e.y)-(t.y-e.y)*(n.x-e.x),See=(e,t,n)=>Math.abs(bee(t,n,e))<=0.000000001&&e.x>=Math.min(t.x,n.x)-0.000000001&&e.x<=Math.max(t.x,n.x)+0.000000001&&e.y>=Math.min(t.y,n.y)-0.000000001&&e.y<=Math.max(t.y,n.y)+0.000000001,Pke=(e,t,n,o)=>((i,r,s,a)=>{let c=bee(i,r,s),l=bee(i,r,a),d=bee(s,a,i),u=bee(s,a,r);return c*l<0&&d*u<0||Math.abs(c)<=0.000000001&&See(s,i,r)||Math.abs(l)<=0.000000001&&See(a,i,r)||Math.abs(d)<=0.000000001&&See(i,s,a)||Math.abs(u)<=0.000000001&&See(r,s,a)})(e,t,n,o)?0:Math.min(Rk(e,n,o),Rk(t,n,o),Rk(n,e,t),Rk(o,e,t)),S6t=(e,t)=>{let n=!1;for(let o=0,i=t.length-1;o<t.length;i=o++){let r=t[o],s=t[i];if(See(e,s,r))return!0;r.y>e.y!=s.y>e.y&&e.x<(s.x-r.x)*(e.y-r.y)/(s.y-r.y)+r.x&&(n=!n)}return n},iRe=(e,t,n)=>{if(S6t(e,n)||S6t(t,n))return 0;let o=Number.POSITIVE_INFINITY;for(let i=0;i<n.length;i++){let r=n[i],s=n[(i+1)%n.length];o=Math.min(o,Pke(e,t,r,s))}return o};function P6t(e,t,n){let o=0,i=1,r=t.x-e.x,s=t.y-e.y,a=[[-r,e.x-n.minX],[r,n.maxX-e.x],[-s,e.y-n.minY],[s,n.maxY-e.y]];for(let[c,l]of a){if(Math.abs(c)<0.000000000001){if(l<0)return!1;continue}let d=l/c;if(c<0?o=Math.max(o,d):i=Math.min(i,d),o>i)return!1}return!0}function tYt({start:e,end:t,width:n,base:o}){let i=os(e,t),r=((l)=>Ih(1.25*l,0.25,0.75))(n),s=Math.max(1,Math.ceil(i/r)),a=n/2,c=[];for(let l=0;l<s;l++){let d=l/s,u=(l+1)/s,h=e.x+(t.x-e.x)*d,A=e.y+(t.y-e.y)*d,m=e.x+(t.x-e.x)*u,p=e.y+(t.y-e.y)*u;c.push({...o,minX:Math.min(h,m)-a,minY:Math.min(A,p)-a,maxX:Math.max(h,m)+a,maxY:Math.max(A,p)+a,exactShape:{type:"segment",start:{x:h,y:A},end:{x:m,y:p},width:n}})}return c}var iYo=(e,t,n)=>{let o=Math.cos(n),i=Math.sin(n),r=e.x-t.x,s=e.y-t.y;return{x:t.x+r*o-s*i,y:t.y+r*i+s*o}},rYo=class{nodeIndices=[];priorities=[];get size(){return this.nodeIndices.length}push(e,t){let n=this.nodeIndices.length;for(this.nodeIndices.push(e),this.priorities.push(t);n>0;){let o=n-1>>1;if(this.priorities[o]<=t)break;this.swap(n,o),n=o}}pop(){let e=this.nodeIndices[0],t=this.nodeIndices.pop(),n=this.priorities.pop();if(this.nodeIndices.length===0)return e;this.nodeIndices[0]=t,this.priorities[0]=n;let o=0;for(;;){let i=2*o+1,r=i+1;if(i>=this.nodeIndices.length)break;let s=i;if(r<this.nodeIndices.length&&this.priorities[r]<this.priorities[i]&&(s=r),this.priorities[o]<=this.priorities[s])break;this.swap(o,s),o=s}return e}swap(e,t){[this.nodeIndices[e],this.nodeIndices[t]]=[this.nodeIndices[t],this.nodeIndices[e]],[this.priorities[e],this.priorities[t]]=[this.priorities[t],this.priorities[e]]}},sYo=[[-1,-1],[-1,0],[-1,1],[0,-1],[0,1],[1,-1],[1,0],[1,1]],h_e=["#d53535","#3478c8","#8e44ad","#15956f"],v6t=class extends vL{problem;searchBounds;rows;columns;origin;nodes=[];open=new rYo;bestCost=new Map;closed=new Set;baseStateCount;stateSpaceUpperBound;endLayerIndices;targetCell;segmentWidthCache=new Map;closedStateCount=0;output=null;constructor(e){super(),this.problem=e;let t=Math.max(e.traceWidth,e.viaDiameter)/2+e.obstacleIndex.clearance,n=Ih(Math.min(e.start.x,e.end.x)-e.searchPadding,e.bounds.minX+t,e.bounds.maxX-t),o=Ih(Math.max(e.start.x,e.end.x)+e.searchPadding,e.bounds.minX+t,e.bounds.maxX-t),i=Ih(Math.min(e.start.y,e.end.y)-e.searchPadding,e.bounds.minY+t,e.bounds.maxY-t),r=Ih(Math.max(e.start.y,e.end.y)+e.searchPadding,e.bounds.minY+t,e.bounds.maxY-t),s=Math.floor((n-e.gridOffset.x)/e.gridSize)*e.gridSize+e.gridOffset.x,a=Math.floor((i-e.gridOffset.y)/e.gridSize)*e.gridSize+e.gridOffset.y;this.origin={x:s,y:a},this.columns=Math.max(2,Math.floor((o-s)/e.gridSize)+1),this.rows=Math.max(2,Math.floor((r-a)/e.gridSize)+1),this.searchBounds={minX:s,minY:a,maxX:s+(this.columns-1)*e.gridSize,maxY:a+(this.rows-1)*e.gridSize};let c=this.rows*this.columns*e.layers.length*(e.maxViaCount+1);this.baseStateCount=c,this.stateSpaceUpperBound=c*(this.rows*this.columns+1),this.targetCell=this.pointToCell(e.end),this.endLayerIndices=new Set(e.endLayers.map((d)=>e.layers.indexOf(d)).filter((d)=>d>=0));let l=this.pointToCell(e.start);for(let d of e.startLayers){let u=e.layers.indexOf(d);if(u<0||this.endpointCollides(e.start,u))continue;let h={...l,...e.start,layerIndex:u,viaCount:0,viaPoints:[],g:0,f:this.heuristic(e.start),parentIndex:-1},A=this.nodes.length;this.nodes.push(h),this.open.push(A,h.f),this.bestCost.set(this.toStateIndex(h),0)}this.open.size!==0&&this.endLayerIndices.size!==0||(this.failed=!0,this.error="No collision-free multilayer route endpoint"),this.MAX_ITERATIONS=Math.min(15000,Math.max(2000,2*c)),this.stats=this.createStats()}getSolverName(){return`LayerAwareGridRouteSolver(${this.problem.gridSize.toFixed(3)}mm)`}_step(){if(this.open.size===0)return this.failed=!0,void(this.error="No collision-free multilayer grid route found");let e=this.open.pop(),t=this.nodes[e],n=this.toStateIndex(t);if(!this.closed.has(n)){if(this.closed.add(n),this.closedStateCount++,t.row===this.targetCell.row&&t.column===this.targetCell.column&&this.endLayerIndices.has(t.layerIndex)&&t.viaCount>=this.problem.minViaCount&&!this.segmentCollides(t,this.problem.end))return this.output=this.reconstructRoute(e),this.solved=!0,void(this.stats=this.createStats());this.expandPlanarMoves(e,t),this.expandViaMoves(e,t),this.stats=this.createStats()}}expandPlanarMoves(e,t){for(let[n,o]of sYo){let i=t.row+n,r=t.column+o;if(i<0||i>=this.rows||r<0||r>=this.columns)continue;let s=this.cellToPoint(i,r),a=this.getSafeSegmentWidth(t,s);if(a<=0)continue;let c=this.problem.gridSize*(n!==0&&o!==0?Math.SQRT2:1)*Math.max(1,(this.problem.traceWidth/a)**this.problem.neckPenaltyExponent);this.enqueueNode({row:i,column:r,...s,layerIndex:t.layerIndex,viaCount:t.viaCount,viaPoints:t.viaPoints,g:t.g+c,parentIndex:e})}}expandViaMoves(e,t){if(t.viaCount>=this.problem.maxViaCount)return;let n=0.5*this.problem.gridSize;if(os(t,this.problem.start)<n-0.000000001||os(t,this.problem.end)<n-0.000000001)return;let o=t.parentIndex>=0?this.nodes[t.parentIndex]:void 0;if(!o||o.layerIndex===t.layerIndex||!zk(o,t))for(let i=0;i<this.problem.layers.length;i++)i!==t.layerIndex&&(this.problem.obstacleIndex.collidesVia({point:t,layers:this.problem.layers,padDiameter:this.problem.viaDiameter,holeDiameter:this.problem.viaHoleDiameter,connectionNames:this.problem.connectionNames,ignoreTraceIndex:this.problem.ignoreTraceIndex,ignoreTraceIndices:this.problem.softTraceIndices,ignoreRouteRange:this.problem.ignoreRouteRange,obstacleClearance:this.problem.obstacleClearance,blockSameNetObstacles:!0,sameNetObstacleClearance:0,otherNewViaPoints:t.viaPoints,fixedVias:this.problem.fixedVias})||this.enqueueNode({row:t.row,column:t.column,x:t.x,y:t.y,layerIndex:i,viaCount:t.viaCount+1,viaPoints:[...t.viaPoints,{x:t.x,y:t.y}],g:t.g+this.problem.viaCost,parentIndex:e}))}enqueueNode(e){let t=this.toStateIndex(e);if(this.closed.has(t)||e.g>=(this.bestCost.get(t)??Number.POSITIVE_INFINITY))return;this.bestCost.set(t,e.g);let n=e.g+this.heuristic(e),o=this.nodes.length;this.nodes.push({...e,f:n}),this.open.push(o,n)}endpointCollides(e,t){return this.getSafeSegmentWidth({...e,layerIndex:t,viaCount:0},e)<=0}segmentCollides(e,t){return this.getSafeSegmentWidth(e,t)<=0}getSafeSegmentWidth(e,t){let n=this.problem.layers[e.layerIndex],o=this.problem.startLayers.length===1&&e.viaCount===0&&n===this.problem.originalStartLayer&&os(this.problem.start,e)<=this.problem.maxStartNeckLength+0.000000001&&os(this.problem.start,t)<=this.problem.maxStartNeckLength+0.000000001,i=this.problem.endLayers.length===1&&n===this.problem.originalEndLayer&&os(this.problem.end,e)<=this.problem.maxEndNeckLength+0.000000001&&os(this.problem.end,t)<=this.problem.maxEndNeckLength+0.000000001,r=Math.max(o?this.problem.startNeckWidth:0,i?this.problem.endNeckWidth:0),s=[e.x,e.y,t.x,t.y,e.layerIndex,e.viaCount,r].join(":"),a=this.segmentWidthCache.get(s);if(a!==void 0)return a;let c=(d)=>!this.problem.obstacleIndex.collides({start:e,end:t,layer:n,width:d,connectionNames:this.problem.connectionNames,ignoreTraceIndex:this.problem.ignoreTraceIndex,ignoreTraceIndices:this.problem.softTraceIndices,ignoreRouteRange:this.problem.ignoreRouteRange,obstacleClearance:this.problem.obstacleClearance}),l=0;if(o||i){let u=Math.ceil((r-0.000000001)/0.025),h=Math.floor((this.problem.traceWidth+0.000000001)/0.025);for(;u<=h;){let A=Math.floor((u+h)/2),m=Number((A*0.025).toFixed(6));c(m)?(l=m,u=A+1):h=A-1}l<r-0.000000001&&c(r)&&(l=r)}else l=c(this.problem.traceWidth)?this.problem.traceWidth:0;return this.segmentWidthCache.set(s,l),l}reconstructRoute(e){let t=[],n=e;for(;n>=0;){let a=this.nodes[n];t.push(a),n=a.parentIndex}t.reverse();let o=t[t.length-1];zk(o,this.problem.end)||t.push({...o,...this.problem.end,row:this.targetCell.row,column:this.targetCell.column,parentIndex:-1});let i=[],r=[t[0]];for(let a=1;a<t.length;a++){let c=t[a-1],l=t[a];l.layerIndex!==c.layerIndex?(i.push(r),r=[l]):r.push(l)}i.push(r);let s=[];for(let a=0;a<i.length;a++){let c=this.simplifySection(i[a]),l=c.slice(0,-1).map((h,A)=>this.getSafeSegmentWidth(h,c[A+1])),d=c.map((h,A)=>({route_type:"wire",x:h.x,y:h.y,layer:this.problem.layers[h.layerIndex],width:l.length===0?Math.min(this.problem.startNeckWidth,this.problem.endNeckWidth):A===0?l[0]:A===c.length-1?l[l.length-1]:Math.min(l[A-1],l[A])}));s.push(...d);let u=i[a+1];if(u){let h=this.problem.layers[c.at(-1).layerIndex],A=this.problem.layers[u[0].layerIndex],m=c.at(-1);s.push({route_type:"via",x:m.x,y:m.y,from_layer:h,to_layer:A,via_diameter:this.problem.viaDiameter,via_hole_diameter:this.problem.viaHoleDiameter})}}return{route:s,traceWidth:this.problem.traceWidth,startNeckWidth:this.problem.startNeckWidth,endNeckWidth:this.problem.endNeckWidth,gridSize:this.problem.gridSize,gridOffset:this.problem.gridOffset,viaCount:i.length-1}}simplifySection(e){return e.length<=2?e:this.problem.neckPenaltyExponent>1?this.simplifyStrictSection(e):this.simplifyWidthPreservingSection(e)}simplifyStrictSection(e){let t=e.slice(0,-1).map((r,s)=>this.getSafeSegmentWidth(r,e[s+1])),n=[0];for(let r=0;r<t.length;r++)n.push(n[r]+this.getWidthPenalizedCost(e[r],e[r+1],t[r]));let o=[e[0]],i=0;for(;i<e.length-1;){let r=e.length-1;for(;r>i+1&&!this.shortcutPreservesRouteQuality(e,t,n,i,r);)r--;o.push(e[r]),i=r}return this.removeRedundantCollinearPoints(o)}shortcutPreservesRouteQuality(e,t,n,o,i){let r=this.getSafeSegmentWidth(e[o],e[i]);if(r<=0)return!1;let s=Number.POSITIVE_INFINITY;for(let c=o;c<i;c++)s=Math.min(s,t[c]);let a=n[i]-n[o];return r>=s-0.000000001&&this.getWidthPenalizedCost(e[o],e[i],r)<=a+0.000000001}getWidthPenalizedCost(e,t,n){return os(e,t)*Math.max(1,(this.problem.traceWidth/n)**this.problem.neckPenaltyExponent)}simplifyWidthPreservingSection(e){let t=e.slice(0,-1).map((c,l)=>this.getSafeSegmentWidth(c,e[l+1])),n=[0];for(let c=0;c<t.length;c++)n.push(n[c]+os(e[c],e[c+1])*Math.max(1,(this.problem.traceWidth/t[c])**this.problem.neckPenaltyExponent));let o=new Float64Array(e.length).fill(Number.POSITIVE_INFINITY),i=new Float64Array(e.length).fill(Number.POSITIVE_INFINITY),r=new Int32Array(e.length).fill(-1);o[0]=0,i[0]=0;for(let c=1;c<e.length;c++){let l=Number.POSITIVE_INFINITY;for(let d=c-1;d>=0;d--){if(l=Math.min(l,t[d]),!Number.isFinite(o[d]))continue;let u=this.getSafeSegmentWidth(e[d],e[c]);if(u<l-0.000000001)continue;let h=os(e[d],e[c]);if(h*Math.max(1,(this.problem.traceWidth/u)**this.problem.neckPenaltyExponent)>n[c]-n[d]+0.000000001)continue;let A=o[d]+h*Math.max(0,this.problem.traceWidth-u),m=i[d]+h;(A<o[c]-0.000000001||Math.abs(A-o[c])<=0.000000001&&m<i[c]-0.000000001)&&(o[c]=A,i[c]=m,r[c]=d)}}let s=[],a=e.length-1;for(;a>=0&&(s.push(e[a]),a!==0);)if(a=r[a],a<0)return e;return s.reverse(),this.removeRedundantCollinearPoints(s)}removeRedundantCollinearPoints(e){return e.filter((t,n,o)=>{if(n===0||n===o.length-1)return!0;let i=o[n-1],r=o[n+1],s=(t.x-i.x)*(r.y-t.y)-(t.y-i.y)*(r.x-t.x),a=Math.abs(this.getSafeSegmentWidth(i,t)-this.getSafeSegmentWidth(t,r))<0.000000001;return Math.abs(s)>0.00000001||!a})}pointToCell(e){return{column:Ih(Math.round((e.x-this.origin.x)/this.problem.gridSize),0,this.columns-1),row:Ih(Math.round((e.y-this.origin.y)/this.problem.gridSize),0,this.rows-1)}}cellToPoint(e,t){return{x:this.origin.x+t*this.problem.gridSize,y:this.origin.y+e*this.problem.gridSize}}toStateIndex(e){let t=((e.viaCount*this.problem.layers.length+e.layerIndex)*this.rows+e.row)*this.columns+e.column;if(e.viaCount!==1||e.viaPoints.length===0||os(e,e.viaPoints[0])>=this.problem.viaHoleDiameter+this.problem.obstacleIndex.minViaHoleEdgeToViaHoleEdgeClearance-0.000000001)return t;let n=this.pointToCell(e.viaPoints[0]);return t+(1+n.row*this.columns+n.column)*this.baseStateCount}heuristic(e){return os(e,this.problem.end)}createStats(){return{phase:"layer-aware-grid-search",gridSize:this.problem.gridSize,traceWidth:this.problem.traceWidth,startNeckWidth:this.problem.startNeckWidth,endNeckWidth:this.problem.endNeckWidth,maxViaCount:this.problem.maxViaCount,minViaCount:this.problem.minViaCount,openStates:this.open.size,closedStates:this.closedStateCount,trackedStates:this.bestCost.size,stateSpaceUpperBound:this.stateSpaceUpperBound}}computeProgress(){return Math.min(0.99,this.iterations/this.MAX_ITERATIONS)}getOutput(){return this.output}getConstructorParams(){let{obstacleIndex:e,...t}=this.problem;return[t]}visualize(){let e=this.nodes.filter((i)=>this.closed.has(this.toStateIndex(i))).slice(-2000).map((i)=>({x:i.x,y:i.y,color:`${h_e[i.layerIndex%h_e.length]}55`})),t=[],n=[],o=this.output?.route??[];for(let i=0;i<o.length-1;i++){let r=o[i],s=o[i+1];if(r?.route_type==="wire"&&s?.route_type==="wire"&&r.layer===s.layer){let a=this.problem.layers.indexOf(r.layer);t.push({points:[r,s],strokeColor:h_e[a%h_e.length]??"#333",strokeWidth:r.width})}r?.route_type==="via"&&n.push({center:r,radius:(r.via_diameter??this.problem.viaDiameter)/2,fill:"#d4a017"})}return{coordinateSystem:"cartesian",title:this.getSolverName(),rects:[{center:{x:(this.searchBounds.minX+this.searchBounds.maxX)/2,y:(this.searchBounds.minY+this.searchBounds.maxY)/2},width:this.searchBounds.maxX-this.searchBounds.minX,height:this.searchBounds.maxY-this.searchBounds.minY,stroke:"#777"}],points:[...e,{...this.problem.start,color:"green",label:"reroute start"},{...this.problem.end,color:"purple",label:"reroute target"}],lines:t,circles:n,texts:[]}}},m_e=[{direction:1,strength:0.7},{direction:-1,strength:0.7},{direction:1,strength:1},{direction:-1,strength:1}],aYo=(e,t,n)=>{let o=n.x-t.x,i=n.y-t.y,r=o*o+i*i;if(r<=0.000000000001)return{...t};let s=Ih(((e.x-t.x)*o+(e.y-t.y)*i)/r,0,1);return{x:t.x+o*s,y:t.y+i*s}},rRe=class extends vL{problem;phase="prepare-candidate";variantCursor=0;relaxationIteration=0;candidatePoints=[];sampledPoints;output=null;constructor(e){super(),this.problem=e,this.sampledPoints=this.sampleRoute(),this.MAX_ITERATIONS=100,this.stats=this.createStats()}getSolverName(){return"ElasticTracePushSolver"}_step(){switch(this.phase){case"prepare-candidate":if(this.variantCursor>=m_e.length)return this.failed=!0,void(this.error="No collision-free elastic displacement found");this.candidatePoints=this.sampledPoints.map((e)=>({...e})),this.relaxationIteration=0,this.phase="relax-candidate";break;case"relax-candidate":this.relaxCandidate(),this.relaxationIteration++,this.relaxationIteration>=10&&(this.phase="validate-candidate");break;case"validate-candidate":{let e=this.simplifyCandidate(this.candidatePoints);this.pathCollides(e)?(this.variantCursor++,this.phase="prepare-candidate"):(this.output={points:e,traceWidth:this.problem.traceWidth},this.phase="complete");break}case"complete":this.solved=!0}this.stats=this.createStats()}sampleRoute(){let e=[],t=Ih(2*this.problem.traceWidth,0.2,0.45),n=this.problem.trace.route;for(let o=this.problem.range.startIndex;o<this.problem.range.endIndex;o++){let i=n[o],r=n[o+1];if(i?.route_type!=="wire"||r?.route_type!=="wire"||i.layer!==r.layer)continue;e.length===0&&e.push({x:i.x,y:i.y});let s=os(i,r),a=Math.max(1,Math.ceil(s/t));for(let c=1;c<=a;c++){let l=c/a;e.push({x:i.x+(r.x-i.x)*l,y:i.y+(r.y-i.y)*l})}}return e}relaxCandidate(){let e=m_e[this.variantCursor],t=this.candidatePoints.map((o)=>({...o})),n=new Uint8Array(this.candidatePoints.length);for(let o=1;o<this.candidatePoints.length-1;o++){let i=this.candidatePoints[o],r=this.findNearestCorridorSegment(i);if(!r)continue;let s=os(r.segment.start,r.segment.end);if(s<=0.000000001)continue;let a=r.segment.width/2+this.problem.traceWidth/2+this.problem.obstacleIndex.clearance+0.025;if(r.distance>a+0.35)continue;let c={x:(r.segment.start.y-r.segment.end.y)/s*e.direction,y:(r.segment.end.x-r.segment.start.x)/s*e.direction},l=a-((i.x-r.closest.x)*c.x+(i.y-r.closest.y)*c.y);if(l<=0)continue;let d=Math.min(0.35,l*e.strength);t[o]={x:i.x+c.x*d,y:i.y+c.y*d},n[o]=1}for(let o=1;o<t.length-1;o++){if(!n[o])continue;let i=t[o-1],r=t[o],s=t[o+1];t[o]={x:0.85*r.x+(i.x+s.x)/2*0.15,y:0.85*r.y+(i.y+s.y)/2*0.15}}this.candidatePoints=t}findNearestCorridorSegment(e){let t;for(let n of this.problem.corridor){if(n.layer!==this.problem.layer)continue;let o=aYo(e,n.start,n.end),i=os(e,o);(!t||i<t.distance)&&(t={segment:n,closest:o,distance:i})}return t}simplifyCandidate(e){if(e.length<=2)return e;let t=[e[0]],n=0;for(;n<e.length-1;){let o=e.length-1;for(;o>n+1&&this.segmentCollides(e[n],e[o]);)o--;t.push(e[o]),n=o}return t.filter((o,i,r)=>i===0||!zk(o,r[i-1]))}pathCollides(e){if(e.length<2)return!0;for(let t=0;t<e.length-1;t++)if(this.segmentCollides(e[t],e[t+1]))return!0;return!1}segmentCollides(e,t){return this.problem.obstacleIndex.collides({start:e,end:t,layer:this.problem.layer,width:this.problem.traceWidth,connectionNames:this.problem.connectionNames,ignoreTraceIndex:-1})}createStats(){let e=m_e[this.variantCursor];return{phase:this.phase,direction:e?.direction,strength:e?.strength,variantCursor:this.variantCursor,relaxationIteration:this.relaxationIteration,sampledPointCount:this.sampledPoints.length}}computeProgress(){return Math.min(0.99,(this.variantCursor+this.relaxationIteration/12)/m_e.length)}getOutput(){return this.output}getConstructorParams(){return[this.problem]}visualize(){return{coordinateSystem:"cartesian",title:`Elastic trace push: ${this.phase}`,lines:[...this.problem.corridor.map((e)=>({points:[e.start,e.end],strokeColor:"rgba(255, 128, 0, 0.6)",strokeWidth:e.width})),...this.candidatePoints.length>1?[{points:this.candidatePoints,strokeColor:"#1769d2",strokeWidth:this.problem.traceWidth}]:[]],points:[],rects:[],circles:[],texts:[]}}},Rge=(e,t)=>{let n=Math.abs(t.x-e.x),o=Math.abs(t.y-e.y);return n<=ti||o<=ti||Math.abs(n-o)<=ti},sRe=(e)=>{let t=0;for(let n=0;n<e.length-1;n++)Rge(e[n],e[n+1])||t++;return t},Tte=(e)=>{let t=0;for(let n=0;n<e.length-1;n++)t+=os(e[n],e[n+1]);return t},cYo=(e)=>e.filter((t,n)=>n===0||!zk(t,e[n-1])),nYt=(e,t)=>{let n=t.x-e.x,o=t.y-e.y,i=Math.abs(n),r=Math.abs(o),s=Math.sign(n),a=Math.sign(o),c=[];Rge(e,t)&&c.push([e,t]),c.push([e,{x:t.x,y:e.y},t],[e,{x:e.x,y:t.y},t]),i>=r?c.push([e,{x:t.x-s*r,y:e.y},t],[e,{x:e.x+s*r,y:t.y},t]):c.push([e,{x:e.x,y:t.y-a*i},t],[e,{x:t.x,y:e.y+a*i},t]);let l=new Map;for(let d of c){let u=cYo(d);if(u.length<2||u.some((A,m)=>m<u.length-1&&!Rge(A,u[m+1])))continue;let h=u.map((A)=>`${A.x.toFixed(6)},${A.y.toFixed(6)}`).join(";");l.set(h,u)}return[...l.values()].sort((d,u)=>Tte(d)-Tte(u)||d.length-u.length)},lYo=class{nodeIndices=[];priorities=[];get size(){return this.nodeIndices.length}push(e,t){let n=this.nodeIndices.length;for(this.nodeIndices.push(e),this.priorities.push(t);n>0;){let o=n-1>>1;if(this.priorities[o]<=t)break;this.swap(n,o),n=o}}pop(){let e=this.nodeIndices[0],t=this.nodeIndices.pop(),n=this.priorities.pop();if(this.nodeIndices.length===0)return e;this.nodeIndices[0]=t,this.priorities[0]=n;let o=0;for(;;){let i=2*o+1,r=i+1;if(i>=this.nodeIndices.length)break;let s=i;if(r<this.nodeIndices.length&&this.priorities[r]<this.priorities[i]&&(s=r),this.priorities[o]<=this.priorities[s])break;this.swap(o,s),o=s}return e}swap(e,t){[this.nodeIndices[e],this.nodeIndices[t]]=[this.nodeIndices[t],this.nodeIndices[e]],[this.priorities[e],this.priorities[t]]=[this.priorities[t],this.priorities[e]]}},dYo=[[-1,-1],[-1,0],[-1,1],[0,-1],[0,1],[1,-1],[1,0],[1,1]],Qge=class extends vL{problem;searchBounds;rows;columns;origin;nodes=[];open=new lYo;bestCost;closed;closedCellCount=0;targetCell;output=null;constructor(e){super(),this.problem=e;let t=e.traceWidth/2+e.obstacleIndex.clearance,n=Ih(Math.min(e.start.x,e.end.x)-e.searchPadding,e.bounds.minX+t,e.bounds.maxX-t),o=Ih(Math.max(e.start.x,e.end.x)+e.searchPadding,e.bounds.minX+t,e.bounds.maxX-t),i=Ih(Math.min(e.start.y,e.end.y)-e.searchPadding,e.bounds.minY+t,e.bounds.maxY-t),r=Ih(Math.max(e.start.y,e.end.y)+e.searchPadding,e.bounds.minY+t,e.bounds.maxY-t),s=Math.floor((n-e.gridOffset.x)/e.gridSize)*e.gridSize+e.gridOffset.x,a=Math.floor((i-e.gridOffset.y)/e.gridSize)*e.gridSize+e.gridOffset.y;if(this.origin={x:s,y:a},this.columns=Math.max(2,Math.floor((o-s)/e.gridSize)+1),this.rows=Math.max(2,Math.floor((r-a)/e.gridSize)+1),this.searchBounds={minX:s,minY:a,maxX:s+(this.columns-1)*e.gridSize,maxY:a+(this.rows-1)*e.gridSize},this.bestCost=new Float64Array(this.rows*this.columns).fill(Number.POSITIVE_INFINITY),this.closed=new Uint8Array(this.rows*this.columns),this.endpointCollides(e.start)||this.endpointCollides(e.end))return this.failed=!0,this.error="Grid-route endpoint violates obstacle clearance",this.targetCell={row:0,column:0},this.MAX_ITERATIONS=1,void(this.stats=this.createStats());let c=this.pointToCell(e.start);this.targetCell=this.pointToCell(e.end);let l={...c,x:e.start.x,y:e.start.y,g:0,f:this.heuristic(e.start),parentIndex:-1};this.nodes.push(l),this.open.push(0,l.f),this.bestCost[this.toFlatIndex(c.row,c.column)]=0,this.MAX_ITERATIONS=Math.min(5000,Math.max(1000,this.rows*this.columns*2)),this.stats=this.createStats()}endpointCollides(e){return this.problem.obstacleIndex.collides({start:e,end:e,layer:this.problem.layer,width:this.problem.traceWidth,connectionNames:this.problem.connectionNames,ignoreTraceIndex:this.problem.ignoreTraceIndex,ignoreRouteRange:this.problem.ignoreRouteRange,obstacleClearance:this.problem.obstacleClearance})}getSolverName(){return`ObstacleAwareGridRouteSolver(${this.problem.gridSize.toFixed(3)}mm)`}_step(){if(this.open.size===0)return this.failed=!0,void(this.error="No collision-free grid route found");let e=this.open.pop(),t=this.nodes[e],n=this.toFlatIndex(t.row,t.column);if(!this.closed[n]){if(this.closed[n]=1,this.closedCellCount++,t.row===this.targetCell.row&&t.column===this.targetCell.column&&this.getAllowedConnector(t,this.problem.end)!==null)return this.output={points:this.reconstructPath(e),traceWidth:this.problem.traceWidth,gridSize:this.problem.gridSize,gridOffset:this.problem.gridOffset},this.solved=!0,void(this.stats=this.createStats());for(let[o,i]of dYo){let r=t.row+o,s=t.column+i;if(r<0||r>=this.rows||s<0||s>=this.columns)continue;let a=this.toFlatIndex(r,s);if(this.closed[a])continue;let c=t.parentIndex===-1&&this.problem.requireOctilinear,l=this.problem.gridSize*(o!==0&&i!==0?Math.SQRT2:1);if(!c&&t.g+l>=this.bestCost[a])continue;let d=this.cellToPoint(r,s),u=this.getAllowedConnector(t,d);if(u===null)continue;c&&(l=Tte(u));let h=t.g+l;if(h>=this.bestCost[a])continue;this.bestCost[a]=h;let A=h+this.heuristic(d),m=this.nodes.length;this.nodes.push({row:r,column:s,...d,g:h,f:A,parentIndex:e}),this.open.push(m,A)}this.stats=this.createStats()}}segmentCollides(e,t){return this.problem.obstacleIndex.collides({start:e,end:t,layer:this.problem.layer,width:this.problem.traceWidth,connectionNames:this.problem.connectionNames,ignoreTraceIndex:this.problem.ignoreTraceIndex,ignoreRouteRange:this.problem.ignoreRouteRange,obstacleClearance:this.problem.obstacleClearance})}getAllowedConnector(e,t){return this.problem.requireOctilinear&&(("parentIndex"in e)&&e.parentIndex===-1||zk(t,this.problem.end))?nYt(e,t).find((n)=>n.slice(0,-1).every((o,i)=>!this.segmentCollides(o,n[i+1])))??null:this.segmentCollides(e,t)?null:[e,t]}pointToCell(e){return{column:Ih(Math.round((e.x-this.origin.x)/this.problem.gridSize),0,this.columns-1),row:Ih(Math.round((e.y-this.origin.y)/this.problem.gridSize),0,this.rows-1)}}cellToPoint(e,t){return{x:this.origin.x+t*this.problem.gridSize,y:this.origin.y+e*this.problem.gridSize}}toFlatIndex(e,t){return e*this.columns+t}heuristic(e){return Math.hypot(this.problem.end.x-e.x,this.problem.end.y-e.y)}reconstructPath(e){let t=[],n=e;for(;n>=0;){let r=this.nodes[n];t.push({x:r.x,y:r.y}),n=r.parentIndex}if(t.reverse(),zk(t[0],this.problem.start)||t.unshift({...this.problem.start}),zk(t[t.length-1],this.problem.end)||t.push({...this.problem.end}),this.problem.requireOctilinear){let r=[t[0]];for(let s=0;s<t.length-1;s++){let a=t[s],c=t[s+1],l=s===0||s===t.length-2?this.getAllowedConnector(s===0?{...a,parentIndex:-1}:a,c):[a,c];if(!l)return t;r.push(...l.slice(1))}return r.filter((s,a,c)=>{if(a===0||a===c.length-1)return!0;let l=c[a-1],d=c[a+1],u=(s.x-l.x)*(d.y-s.y)-(s.y-l.y)*(d.x-s.x);return Math.abs(u)>0.00000001||!Rge(l,d)})}let o=[t[0]],i=0;for(;i<t.length-1;){let r=t.length-1;for(;r>i+1&&this.segmentCollides(t[i],t[r]);)r--;o.push(t[r]),i=r}return o.filter((r,s,a)=>{if(s===0||s===a.length-1)return!0;let c=a[s-1],l=a[s+1],d=(r.x-c.x)*(l.y-r.y)-(r.y-c.y)*(l.x-r.x);return Math.abs(d)>0.00000001})}createStats(){return{phase:"obstacle-aware-grid-search",gridSize:this.problem.gridSize,traceWidth:this.problem.traceWidth,gridOffset:this.problem.gridOffset,openCells:this.open.size,closedCells:this.closedCellCount,gridCells:this.rows*this.columns}}computeProgress(){return Math.min(0.99,this.iterations/this.MAX_ITERATIONS)}getOutput(){return this.output}getConstructorParams(){let{obstacleIndex:e,...t}=this.problem;return[t]}visualize(){let e=this.nodes.filter((n)=>this.closed[this.toFlatIndex(n.row,n.column)]).slice(-2000).map((n)=>({x:n.x,y:n.y,color:"rgba(0,90,255,0.22)"})),t=this.output?.points??[];return{coordinateSystem:"cartesian",title:this.getSolverName(),rects:[{center:{x:(this.searchBounds.minX+this.searchBounds.maxX)/2,y:(this.searchBounds.minY+this.searchBounds.maxY)/2},width:this.searchBounds.maxX-this.searchBounds.minX,height:this.searchBounds.maxY-this.searchBounds.minY,stroke:"#777"}],points:[...e,{...this.problem.start,color:"green",label:"reroute start"},{...this.problem.end,color:"purple",label:"reroute target"}],lines:t.length>1?[{points:t,strokeColor:"#00a050",strokeWidth:this.problem.traceWidth}]:[],circles:[],texts:[]}}},zI=class{items;clearance;minPadEdgeToPadEdgeClearance;holeClearance;boardEdgeClearance;boardLayers;minViaHoleEdgeToViaHoleEdgeClearance;defaultViaHoleDiameter;bounds;maxIndexedViaHoleDiameter;index;connectionNameSets;copperObjectIds;connectionNameResolver;connectedPads;dynamicTraceIndex;constructor(e,t,n,o=[],i=new F6(e,t)){var r;this.bounds=e.bounds,this.boardLayers=(r=e.layerCount,["top",...Array.from({length:Math.max(0,r-2)},(a,c)=>`inner${c+1}`),...r>1?["bottom"]:[]]),this.dynamicTraceIndex=n,this.clearance=Math.max(e.defaultObstacleMargin??0,e.minTraceToPadEdgeClearance??0,0.1),this.holeClearance=e.minTraceToHoleEdgeClearance??this.clearance,this.minPadEdgeToPadEdgeClearance=e.minPadEdgeToPadEdgeClearance??this.clearance,this.boardEdgeClearance=e.minBoardEdgeClearance??this.clearance,this.minViaHoleEdgeToViaHoleEdgeClearance=Math.max(e.minViaHoleEdgeToViaHoleEdgeClearance??0,0.1),this.defaultViaHoleDiameter=e.min_via_hole_diameter??e.minViaHoleDiameter??0.3,this.items=[...e.obstacles.flatMap((a,c)=>function(l,d=0.6){if(l.isNonPlatedHole&&l.shape==="circle"){let _=l.width/2;return[{minX:l.center.x-_,minY:l.center.y-_,maxX:l.center.x+_,maxY:l.center.y+_,layers:l.layers,kind:"obstacle",obstacleKind:"hole",connectionNames:l.connectedTo,exactShape:{type:"circle",center:l.center,radius:_}}]}let u=(l.ccwRotationDegrees??0)*Math.PI/180,h=Math.max(1,Math.ceil(l.width/d)),A=Math.max(1,Math.ceil(l.height/d)),m=l.width/h,p=l.height/A,g=[];for(let _=0;_<A;_++)for(let f=0;f<h;f++){let y={x:l.center.x-l.width/2+(f+0.5)*m,y:l.center.y-l.height/2+(_+0.5)*p},x=m/2,C=p/2,I=[{x:y.x-x,y:y.y-C},{x:y.x+x,y:y.y-C},{x:y.x+x,y:y.y+C},{x:y.x-x,y:y.y+C}].map((b)=>iYo(b,l.center,u));g.push({minX:Math.min(...I.map((b)=>b.x)),minY:Math.min(...I.map((b)=>b.y)),maxX:Math.max(...I.map((b)=>b.x)),maxY:Math.max(...I.map((b)=>b.y)),layers:l.layers,kind:"obstacle",obstacleKind:l.isNonPlatedHole?"hole":l.connectedTo[0]?.startsWith("pcb_via_")?"via":l.connectedTo[0]?.startsWith("pcb_smtpad_")||l.connectedTo[0]?.startsWith("pcb_plated_hole_")?"pad":"other",connectionNames:l.connectedTo,exactShape:{type:"polygon",points:I}})}return g}(a).map((l)=>({...l,copperObjectId:`obstacle:${c}`}))),...this.createTraceItems(e.fixedTraces??[],!0),...this.createTraceItems(t),...o],this.maxIndexedViaHoleDiameter=this.items.reduce((a,c)=>c.kind==="via"?Math.max(a,c.viaHoleDiameter??this.defaultViaHoleDiameter):a,this.defaultViaHoleDiameter),this.connectionNameResolver=i,i.setCacheableObstacles(e.obstacles);let s=new Map;this.connectionNameSets=this.items.map((a)=>{let c=s.get(a.connectionNames);return c||(c=i.canonicalizeToSet(a.connectionNames),s.set(a.connectionNames,c)),c}),this.copperObjectIds=this.items.map((a,c)=>a.copperObjectId??`indexed-item:${c}`),this.connectedPads=e.obstacles.flatMap((a)=>a.connectedTo.some((c)=>c.startsWith("pcb_smtpad_")||c.startsWith("pcb_plated_hole_"))?[{obstacle:a,canonicalConnectionNames:i.canonicalizeToSet(a.connectedTo)}]:[]),this.index=this.items.length>0?new Vm(this.items.length):null;for(let a of this.items)this.index.add(a.minX,a.minY,a.maxX,a.maxY);this.index?.finish()}createTraceItems(e,t=!1){let n=[];for(let o=0;o<e.length;o++){let i=e[o],r=t?void 0:o,s=`${t?"fixed-trace":"trace"}:${o}`,a=!t&&o===this.dynamicTraceIndex,c=[i.connection_name,i.source_trace_id,i.rootConnectionName,...i.mergedConnectionNames??[],...i.connectsTo??[]].filter((l)=>Boolean(l));for(let l=0;l<i.route.length;l++){let d=i.route[l];if(d.route_type==="via"){let h=d.via_diameter??0.6;n.push({minX:d.x-h/2,minY:d.y-h/2,maxX:d.x+h/2,maxY:d.y+h/2,layers:this.boardLayers,kind:"via",connectionNames:c,copperObjectId:s,traceIndex:r,routeStartIndex:l,routeEndIndex:l,viaHoleDiameter:d.via_hole_diameter??this.defaultViaHoleDiameter,exactShape:{type:"circle",center:{x:d.x,y:d.y},radius:h/2}});continue}if(a)continue;let u=i.route[l+1];d.route_type==="wire"&&u?.route_type==="wire"&&d.layer===u.layer&&n.push(...tYt({start:d,end:u,width:d.width,base:{layers:[d.layer],kind:"trace",connectionNames:c,copperObjectId:s,traceIndex:r,routeStartIndex:l,routeEndIndex:l+1}}))}}return n}collides(e){if(this.isOutsideBounds(e))return!0;let{radius:t,candidates:n,canonicalConnectionNames:o}=this.getCollisionCandidates(e);for(let i of n)if(this.itemCollides(i,e,t,o))return!0;return!1}findCollisions(e){let{radius:t,candidates:n,canonicalConnectionNames:o}=this.getCollisionCandidates(e),i=[];for(let r of n)this.itemCollides(r,e,t,o)&&i.push(this.items[r]);return i}getSameNetCopperContactIds(e){let t=e.width/2,n=this.index?.search(Math.min(e.start.x,e.end.x)-t,Math.min(e.start.y,e.end.y)-t,Math.max(e.start.x,e.end.x)+t,Math.max(e.start.y,e.end.y)+t)??[],o=new Set(this.connectionNameResolver.canonicalize(e.connectionNames)),i=new Set;for(let r of n){let s=this.items[r];s.layers.includes(e.layer)&&(s.traceIndex===e.ignoreTraceIndex||e.ignoreTraceIndices?.includes(s.traceIndex??-1)||[...this.connectionNameSets[r]].some((a)=>o.has(a))&&this.itemCopperTouches(s,e,t)&&i.add(this.copperObjectIds[r]))}return i}getConnectedPadWidthLimit(e){if(Math.hypot(e.end.x-e.start.x,e.end.y-e.start.y)<=0.00001)return null;let t=this.getConnectedPadWidthLimitAtPoint(e,e.start),n=this.getConnectedPadWidthLimitAtPoint(e,e.end);return t===null?n:n===null?t:Math.min(t,n)}getConnectedPadWidthLimitAtPoint(e,t){let n=this.getConnectedPadsAtPoint(e,t);return n.length===0?null:Math.max(...n.map(({obstacle:o})=>this.getPadWidthNormalToQuery(o,e)))}getConnectedPadEndpointWidthLimitAtPoint(e,t){let n=this.getConnectedPadsAtPoint(e,t);return n.length===0?null:Math.max(...n.map(({obstacle:o})=>{let i=this.getObstacleLocalPoint(t,o);return Math.max(0,2*Math.min(o.width/2-Math.abs(i.x),o.height/2-Math.abs(i.y)))}))}getConnectedPadBoundaryPoint(e,t){let n=t==="start"?e.start:e.end,o=t==="start"?e.end:e.start,i=this.getConnectedPadsAtPoint(e,n).sort((r,s)=>this.getPadWidthNormalToQuery(s.obstacle,e)-this.getPadWidthNormalToQuery(r.obstacle,e))[0];return!i||this.pointIsInsideObstacle(o,i.obstacle)?null:this.getObstacleBoundaryPoint(n,o,i.obstacle)}getConnectedPadsAtPoint(e,t){let n=new Set(this.connectionNameResolver.canonicalize(e.connectionNames));return this.connectedPads.filter(({obstacle:o,canonicalConnectionNames:i})=>o.layers.includes(e.layer)&&[...i].some((r)=>n.has(r))&&this.pointIsInsideObstacle(t,o))}pointIsInsideObstacle(e,t){let{x:n,y:o}=this.getObstacleLocalPoint(e,t);return Math.abs(n)<=t.width/2+0.000000001&&Math.abs(o)<=t.height/2+0.000000001}getObstacleLocalPoint(e,t){let n=-(t.ccwRotationDegrees??0)*Math.PI/180,o=Math.cos(n),i=Math.sin(n),r=e.x-t.center.x,s=e.y-t.center.y;return{x:r*o-s*i,y:r*i+s*o}}getPadWidthNormalToQuery(e,t){let n=t.end.x-t.start.x,o=t.end.y-t.start.y,i=Math.hypot(n,o);if(i<=0.000000001)return Math.min(e.width,e.height);let r=-o/i,s=n/i,a=-(e.ccwRotationDegrees??0)*Math.PI/180,c=Math.cos(a),l=Math.sin(a),d=r*c-s*l,u=r*l+s*c;return Math.abs(d)*e.width+Math.abs(u)*e.height}getObstacleBoundaryPoint(e,t,n){let o=-(n.ccwRotationDegrees??0)*Math.PI/180,i=Math.cos(o),r=Math.sin(o),s=(h)=>{let A=h.x-n.center.x,m=h.y-n.center.y;return{x:A*i-m*r,y:A*r+m*i}},a=s(e),c=s(t),l={x:c.x-a.x,y:c.y-a.y},d=[];if(Math.abs(l.x)>0.000000000001){let h=l.x>0?n.width/2:-n.width/2;d.push((h-a.x)/l.x)}if(Math.abs(l.y)>0.000000000001){let h=l.y>0?n.height/2:-n.height/2;d.push((h-a.y)/l.y)}let u=Math.min(...d.filter((h)=>h>=0&&h<=1));return Number.isFinite(u)?{x:e.x+(t.x-e.x)*u,y:e.y+(t.y-e.y)*u}:null}getConnectedLayersAtPoint(e,t){let n=new Set(this.connectionNameResolver.canonicalize(t)),o=new Set,i=this.index?.search(e.x,e.y,e.x,e.y)??[];for(let r of i){let s=this.items[r];if(s.kind!=="obstacle")continue;if(![...this.connectionNameSets[r]].some((a)=>n.has(a)))continue;if(s.exactShape?.type==="polygon"?iRe(e,e,s.exactShape.points)<=0.000000001:s.exactShape?.type==="circle"?Math.hypot(s.exactShape.center.x-e.x,s.exactShape.center.y-e.y)<=s.exactShape.radius+0.000000001:e.x>=s.minX-0.000000001&&e.x<=s.maxX+0.000000001&&e.y>=s.minY-0.000000001&&e.y<=s.maxY+0.000000001)for(let a of s.layers)o.add(a)}return[...o]}collidesVia(e){return this.getViaViolationSignatures(e).size>0}getViaViolationSignatures(e){let t=new Set;for(let a of e.layers){let c={isVia:!0,start:e.point,end:e.point,layer:a,width:e.padDiameter,connectionNames:e.connectionNames,ignoreTraceIndex:e.ignoreTraceIndex,ignoreTraceIndices:e.ignoreTraceIndices,ignoreRouteRange:e.ignoreRouteRange,obstacleClearance:e.obstacleClearance,blockSameNetObstacles:e.blockSameNetObstacles,sameNetObstacleClearance:e.sameNetObstacleClearance};this.isOutsideBounds(c)&&t.add(`board-edge:${a}`);let{radius:l,candidates:d,canonicalConnectionNames:u}=this.getCollisionCandidates(c);for(let h of d)this.itemCollides(h,c,l,u)&&t.add(`copper:${a}:${this.getViolationObjectId(h)}`)}let n=e.holeDiameter+this.minViaHoleEdgeToViaHoleEdgeClearance;for(let a of e.otherNewViaPoints??[])Math.hypot(a.x-e.point.x,a.y-e.point.y)<n-0.000000001&&t.add(`new-via-drill:${a.x},${a.y}:${e.holeDiameter}`);let o=e.fixedVias??[];for(let a=0;a<o.length;a++){let c=o[a],l=e.holeDiameter/2+c.holeDiameter/2+this.minViaHoleEdgeToViaHoleEdgeClearance;Math.hypot(c.point.x-e.point.x,c.point.y-e.point.y)<l-0.000000001&&t.add(`fixed-via-drill:${a}:${c.point.x},${c.point.y}:${c.holeDiameter}`)}let i=e.holeDiameter/2+this.maxIndexedViaHoleDiameter/2+this.minViaHoleEdgeToViaHoleEdgeClearance,r=this.index?.search(e.point.x-i,e.point.y-i,e.point.x+i,e.point.y+i)??[],s=new Set;for(let a of r){let c=this.items[a];if(c.kind!=="via"||c.exactShape?.type!=="circle")continue;if(c.traceIndex===e.ignoreTraceIndex&&e.ignoreRouteRange&&(c.routeEndIndex??-1)>=e.ignoreRouteRange.start&&(c.routeStartIndex??Number.POSITIVE_INFINITY)<=e.ignoreRouteRange.end)continue;if(e.ignoreTraceIndices?.includes(c.traceIndex??-1))continue;let l=`${this.copperObjectIds[a]??"unknown"}:${c.routeStartIndex??-1}`;if(s.has(l))continue;s.add(l);let d=c.viaHoleDiameter??this.defaultViaHoleDiameter,u=e.holeDiameter/2+d/2+this.minViaHoleEdgeToViaHoleEdgeClearance;Math.hypot(c.exactShape.center.x-e.point.x,c.exactShape.center.y-e.point.y)<u-0.000000001&&t.add(`indexed-via-drill:${this.getViolationObjectId(a)}`)}return t}getViolationObjectId(e){let t=this.items[e],n=this.copperObjectIds[e],o=`${t.routeStartIndex??""}-${t.routeEndIndex??""}`;if(t.kind==="obstacle")return n;if(t.exactShape?.type==="segment"){let{start:i,end:r,width:s}=t.exactShape;return`${n}:${t.kind}:${o}:${i.x},${i.y}:${r.x},${r.y}:${s}`}if(t.exactShape?.type==="circle"){let{center:i,radius:r}=t.exactShape;return`${n}:${t.kind}:${o}:${i.x},${i.y}:${r}`}return t.exactShape?.type==="polygon"?`${n}:${t.kind}:${o}:${t.exactShape.points.map((i)=>`${i.x},${i.y}`).join(";")}`:`${n}:${t.kind}:${o}:${t.minX},${t.minY},${t.maxX},${t.maxY}`}getCollisionCandidates(e){let t=Math.max(this.clearance,this.holeClearance,e.isVia?this.minPadEdgeToPadEdgeClearance:0,e.obstacleClearance??this.clearance,e.sameNetObstacleClearance??0),n=e.width/2+t,o={minX:Math.min(e.start.x,e.end.x)-n,minY:Math.min(e.start.y,e.end.y)-n,maxX:Math.max(e.start.x,e.end.x)+n,maxY:Math.max(e.start.y,e.end.y)+n};return{radius:n,candidates:this.index?.search(o.minX,o.minY,o.maxX,o.maxY)??[],canonicalConnectionNames:this.connectionNameResolver.canonicalize(e.connectionNames)}}itemCollides(e,t,n,o){let i=this.items[e];if(!i.layers.includes(t.layer))return!1;let r=this.connectionNameSets[e],s=o.some((l)=>r.has(l));if(s&&(!t.blockSameNetObstacles||i.kind!=="obstacle"||i.obstacleKind==="via"))return!1;if(i.kind==="trace"&&t.ignoreTraceIndices?.includes(i.traceIndex??-1))return!1;if(i.kind==="trace"&&i.traceIndex===t.ignoreTraceIndex&&t.ignoreRouteRange&&(i.routeEndIndex??-1)>=t.ignoreRouteRange.start&&(i.routeStartIndex??Number.POSITIVE_INFINITY)<=t.ignoreRouteRange.end)return!1;let a=t.isVia&&(i.kind==="via"||i.kind==="obstacle"&&i.obstacleKind==="via")?this.minPadEdgeToPadEdgeClearance:i.kind!=="obstacle"||i.obstacleKind!=="hole"||t.isVia?i.kind==="obstacle"&&i.obstacleKind==="pad"?s&&t.blockSameNetObstacles?t.sameNetObstacleClearance??t.obstacleClearance??this.clearance:t.obstacleClearance??this.clearance:this.clearance:this.holeClearance,c=t.width/2+a;return i.exactShape?.type==="segment"?Pke(t.start,t.end,i.exactShape.start,i.exactShape.end)<=c+i.exactShape.width/2+0.000000001:i.exactShape?.type==="polygon"?iRe(t.start,t.end,i.exactShape.points)<=c+0.000000001:i.exactShape?.type==="circle"?Rk(i.exactShape.center,t.start,t.end)<=c+i.exactShape.radius+0.000000001:P6t(t.start,t.end,{minX:i.minX-c,minY:i.minY-c,maxX:i.maxX+c,maxY:i.maxY+c})}itemCopperTouches(e,t,n){return e.exactShape?.type==="segment"?Pke(t.start,t.end,e.exactShape.start,e.exactShape.end)<=n+e.exactShape.width/2+0.000000001:e.exactShape?.type==="polygon"?iRe(t.start,t.end,e.exactShape.points)<=n+0.000000001:e.exactShape?.type==="circle"?Rk(e.exactShape.center,t.start,t.end)<=n+e.exactShape.radius+0.000000001:P6t(t.start,t.end,{minX:e.minX-n,minY:e.minY-n,maxX:e.maxX+n,maxY:e.maxY+n})}isOutsideBounds(e){let t=e.width/2+this.boardEdgeClearance;return Math.min(e.start.x,e.end.x)-t<this.bounds.minX||Math.max(e.start.x,e.end.x)+t>this.bounds.maxX||Math.min(e.start.y,e.end.y)-t<this.bounds.minY||Math.max(e.start.y,e.end.y)+t>this.bounds.maxY}},E6t=[{x:0,y:0},{x:0.5,y:0},{x:0,y:0.5},{x:0.5,y:0.5}],sS=(e)=>e?.route_type==="wire",HV=class extends vL{inputProblem;traces;corridor;phase="scan-corridor";corridorCursor=0;blockerCursor=0;offsetCursor=0;resolutionCursor=0;attemptedGridCount=0;blockerIndex;connectionNameResolver;connectionByTraceId=new Map;mutableTraceIndices;blockersByTrace=new Map;blockers=[];currentBlocker=null;currentRange=null;currentTraceWidth=0;gridResolutions=[];currentObstacleIndex=null;output=null;constructor(e,t=new F6(e.simpleRouteJson,e.traces)){super(),this.inputProblem=structuredClone(e),this.traces=structuredClone(e.traces),this.corridor=structuredClone(e.corridor),this.mutableTraceIndices=e.mutableTraceIndices?new Set(e.mutableTraceIndices):null,this.connectionNameResolver=t,this.blockerIndex=new zI(this.inputProblem.simpleRouteJson,this.traces,e.powerTraceIndex,[],this.connectionNameResolver),this.activeSubSolver=null,this.MAX_ITERATIONS=25000,this.stats=this.createStats()}getSolverName(){return"LocalTraceInflationSolver"}_step(){if(this.activeSubSolver)return this.stepActiveSubSolver(),void(this.stats=this.createStats());switch(this.phase){case"scan-corridor":this.scanNextCorridorSegment();break;case"select-blocker":this.selectNextBlocker();break;case"try-elastic-push":break;case"try-grid-candidate":this.startNextGridCandidate();break;case"complete":this.output?this.solved=!0:(this.failed=!0,this.error="No locally reroutable trace blocks the power corridor")}this.stats=this.createStats()}scanNextCorridorSegment(){let e=this.corridor[this.corridorCursor];if(!e)return this.blockers=[...this.blockersByTrace.values()].sort((o,i)=>o.traceIndex-i.traceIndex),void(this.phase="select-blocker");let t=this.traces[this.inputProblem.powerTraceIndex],n=this.blockerIndex.findCollisions({start:e.start,end:e.end,layer:e.layer,width:e.width,connectionNames:t?this.getTraceConnectionNames(t):[]});for(let o of n)this.recordBlockingTrace(o);this.corridorCursor++}recordBlockingTrace(e){if(e.kind!=="trace"||e.traceIndex===void 0||e.routeStartIndex===void 0||e.routeEndIndex===void 0||e.traceIndex===this.inputProblem.powerTraceIndex||this.mutableTraceIndices!==null&&!this.mutableTraceIndices.has(e.traceIndex))return;let t=this.traces[e.traceIndex];if(!t)return;let n=this.findConnectionForTrace(t);if((n?this.resolveNominalTraceWidth(n):this.getTraceNominalWidth(t))>=(this.inputProblem.pushOnlyNominalWidthsBelow??this.inputProblem.nominalPowerWidth)-ti)return;let o=this.blockersByTrace.get(e.traceIndex);if(o)return o.firstRouteIndex=Math.min(o.firstRouteIndex,e.routeStartIndex),void(o.lastRouteIndex=Math.max(o.lastRouteIndex,e.routeEndIndex));this.blockersByTrace.set(e.traceIndex,{traceIndex:e.traceIndex,firstRouteIndex:e.routeStartIndex,lastRouteIndex:e.routeEndIndex})}selectNextBlocker(){if(this.currentBlocker=this.blockers[this.blockerCursor]??null,!this.currentBlocker)return void(this.phase="complete");let e=this.findStableAnchorRange(this.currentBlocker);if(!e)return void this.blockerCursor++;let t=this.traces[this.currentBlocker.traceIndex];this.currentRange=e,this.currentTraceWidth=this.getRangeWidth(t,e),this.gridResolutions=this.getGridResolutions(this.currentTraceWidth),this.resolutionCursor=0,this.offsetCursor=0,this.currentObstacleIndex=new zI(this.inputProblem.simpleRouteJson,this.traces,this.currentBlocker.traceIndex,this.createInflatedCorridorItems(),this.connectionNameResolver),this.activeSubSolver=new rRe({trace:t,range:e,layer:t.route[e.startIndex].layer,traceWidth:this.currentTraceWidth,corridor:this.corridor,obstacleIndex:this.currentObstacleIndex,connectionNames:this.getTraceConnectionNames(t)}),this.phase="try-elastic-push"}findStableAnchorRange(e){let t=this.traces[e.traceIndex];if(!t)return null;let{firstRouteIndex:n,lastRouteIndex:o}=e;for(;n>0;){let c=t.route[n];if(sS(c)&&this.pointClearsCorridor(c))break;n--}for(;o<t.route.length-1;){let c=t.route[o];if(sS(c)&&this.pointClearsCorridor(c))break;o++}let i=t.route[n],r=t.route[o];if(!sS(i)||!sS(r)||i.layer!==r.layer||!this.pointClearsCorridor(i)||!this.pointClearsCorridor(r)||n>=o)return null;let s={startIndex:n,endIndex:o},a=this.getRangeLength(t,s);return!Number.isFinite(a)||a>(this.inputProblem.maxRerouteLength??10)+ti?null:s}pointClearsCorridor(e){return this.corridor.every((t)=>{if(t.layer!==e.layer)return!0;let n=t.width/2+e.width/2+this.blockerIndex.clearance;return Rk(e,t.start,t.end)>=n-ti})}startNextGridCandidate(){if(!this.currentBlocker||!this.currentRange)return void(this.phase="select-blocker");if(this.resolutionCursor>=this.gridResolutions.length)return this.blockerCursor++,void(this.phase="select-blocker");if(this.offsetCursor>=E6t.length)return this.resolutionCursor++,void(this.offsetCursor=0);let e=this.traces[this.currentBlocker.traceIndex],t=e.route[this.currentRange.startIndex],n=e.route[this.currentRange.endIndex];if(!sS(t)||!sS(n))return this.blockerCursor++,void(this.phase="select-blocker");let o=this.gridResolutions[this.resolutionCursor],i=E6t[this.offsetCursor],r=this.currentObstacleIndex;if(!r)return this.blockerCursor++,void(this.phase="select-blocker");this.attemptedGridCount++,this.activeSubSolver=new Qge({start:t,end:n,layer:t.layer,traceWidth:this.currentTraceWidth,gridSize:o,gridOffset:{x:i.x*o,y:i.y*o},connectionNames:this.getTraceConnectionNames(e),obstacleIndex:r,ignoreTraceIndex:this.currentBlocker.traceIndex,ignoreRouteRange:{start:this.currentRange.startIndex,end:this.currentRange.endIndex},bounds:this.inputProblem.simpleRouteJson.bounds,searchPadding:Ih(2.5*this.inputProblem.nominalPowerWidth,1.5,4)})}stepActiveSubSolver(){let e=this.activeSubSolver;if(e.step(),e.solved||e.failed){if(e.solved){let t=e.getOutput();if(t)return this.applyRoute(t,e instanceof rRe?"elastic":"grid"),this.activeSubSolver=null,void(this.phase="complete")}this.failedSubSolvers??=[],this.failedSubSolvers.push(e),this.activeSubSolver=null,e instanceof rRe?this.phase="try-grid-candidate":this.offsetCursor++}}applyRoute(e,t){let n=this.currentBlocker,o=this.currentRange,i=this.traces[n.traceIndex],r=i.route[o.startIndex],s=i.route[o.endIndex],a=e.points.map((c)=>({route_type:"wire",x:c.x,y:c.y,width:this.currentTraceWidth,layer:r.layer}));a[0].width=Math.max(a[0].width,r.width),a[a.length-1].width=Math.max(a[a.length-1].width,s.width),i.route.splice(o.startIndex,o.endIndex-o.startIndex+1,...a),this.output={traces:this.traces,pushedTraceIndex:n.traceIndex,replacedRange:o,strategy:t}}createInflatedCorridorItems(){return this.corridor.flatMap((e)=>tYt({start:e.start,end:e.end,width:e.width,base:{layers:[e.layer],kind:"obstacle",connectionNames:[]}}))}getGridResolutions(e){return[Ih(1.5*e,0.1,0.3),Ih(0.75*e,0.08,0.18)].filter((t,n,o)=>o.findIndex((i)=>Math.abs(i-t)<ti)===n)}getRangeWidth(e,t){let n=this.inputProblem.simpleRouteJson.minTraceWidth;for(let o=t.startIndex;o<=t.endIndex;o++){let i=e.route[o];sS(i)&&(n=Math.max(n,i.width))}return n}getRangeLength(e,t){let n=0;for(let o=t.startIndex;o<t.endIndex;o++){let i=e.route[o],r=e.route[o+1];if(!sS(i)||!sS(r)||i.layer!==r.layer)return Number.POSITIVE_INFINITY;n+=os(i,r)}return n}resolveNominalTraceWidth(e){return Math.max(e.nominalTraceWidth??e.width??this.inputProblem.simpleRouteJson.nominalTraceWidth??this.inputProblem.simpleRouteJson.minTraceWidth,this.inputProblem.simpleRouteJson.minTraceWidth)}getTraceNominalWidth(e){return e.route.reduce((t,n)=>n.route_type==="wire"?Math.max(t,n.width):t,this.inputProblem.simpleRouteJson.minTraceWidth)}findConnectionForTrace(e){let t=this.connectionByTraceId.get(e.pcb_trace_id);if(t!==void 0)return t??void 0;let n=this.getTraceConnectionNames(e),o=this.inputProblem.simpleRouteJson.connections.find((i)=>[i.name,i.source_trace_id,i.rootConnectionName,i.netConnectionName,...i.mergedConnectionNames??[]].filter((r)=>Boolean(r)).some((r)=>n.includes(r)))??null;return this.connectionByTraceId.set(e.pcb_trace_id,o),o??void 0}getTraceConnectionNames(e){return[e.connection_name,e.source_trace_id,e.rootConnectionName,...e.mergedConnectionNames??[]].filter((t)=>Boolean(t))}createStats(){return{phase:this.phase,corridorSegment:this.corridorCursor,corridorSegmentCount:this.corridor.length,blockingTraceCount:this.blockersByTrace.size,blockerCursor:this.blockerCursor,pushedTraceIndex:this.currentBlocker?.traceIndex,anchorRange:this.currentRange,traceWidth:this.currentTraceWidth,gridSize:this.gridResolutions[this.resolutionCursor],gridOffsetVariant:this.offsetCursor,attemptedGridCount:this.attemptedGridCount}}computeProgress(){return this.phase==="scan-corridor"?this.corridor.length===0?0.25:this.corridorCursor/this.corridor.length*0.25:this.blockers.length===0?0.5:Math.min(0.99,0.25+this.blockerCursor/this.blockers.length)}getOutput(){return this.output}getConstructorParams(){return[this.inputProblem]}visualize(){let e=[];for(let t=0;t<this.traces.length;t++){let n=this.traces[t];for(let o=0;o<n.route.length-1;o++){let i=n.route[o],r=n.route[o+1];sS(i)&&sS(r)&&i.layer===r.layer&&e.push({points:[i,r],strokeColor:t===this.currentBlocker?.traceIndex?"#1769d2":"#777",strokeWidth:Math.max(i.width,r.width)})}}for(let t of this.corridor)e.push({points:[t.start,t.end],strokeColor:"rgba(255, 128, 0, 0.55)",strokeWidth:t.width});return{coordinateSystem:"cartesian",title:this.getSolverName(),lines:e,points:[],rects:[],circles:[],texts:[]}}},Ch=0.000001,Gk=(e,t)=>Math.hypot(e.x-t.x,e.y-t.y),v6=(e,t,n)=>{let o=n.x-t.x,i=n.y-t.y,r=o*o+i*i,s=r<=0.000000000001?0:Math.max(0,Math.min(1,((e.x-t.x)*o+(e.y-t.y)*i)/r));return Math.hypot(e.x-(t.x+s*o),e.y-(t.y+s*i))},p_e=(e,t,n)=>(t.x-e.x)*(n.y-e.y)-(t.y-e.y)*(n.x-e.x),vke=(e,t,n,o)=>((i,r,s,a)=>{let c=p_e(s,a,i),l=p_e(s,a,r),d=p_e(i,r,s),u=p_e(i,r,a);return(c>0&&l<0||c<0&&l>0)&&(d>0&&u<0||d<0&&u>0)})(e,t,n,o)?0:Math.min(v6(e,n,o),v6(t,n,o),v6(n,e,t),v6(o,e,t)),Dte=(e)=>{let t=(e.ccwRotationDegrees??0)*Math.PI/180,n=Math.cos(t),o=Math.sin(t);return[{x:-e.width/2,y:-e.height/2},{x:e.width/2,y:-e.height/2},{x:e.width/2,y:e.height/2},{x:-e.width/2,y:e.height/2}].map((i)=>({x:e.center.x+i.x*n-i.y*o,y:e.center.y+i.x*o+i.y*n}))},OV=(e)=>{if(!(e.type==="oval"||e.shape==="circle"))return!1;if(Math.abs(e.width-e.height)>Ch)throw Error(`Physical connectivity does not yet support non-circular oval obstacle ${e.obstacleId??"<unknown>"}`);return!0},Nte=(e,t)=>{for(let o=0;o<t.length;o++)if(v6(e,t[o],t[(o+1)%t.length])<=Ch)return!0;let n=!1;for(let o=0,i=t.length-1;o<t.length;i=o++){let r=t[o],s=t[i];r.y>e.y!=s.y>e.y&&e.x<(s.x-r.x)*(e.y-r.y)/(s.y-r.y)+r.x&&(n=!n)}return n},Rte=(e,t)=>{if(OV(t))return Math.max(0,Gk(e,t.center)-t.width/2);let n=Dte(t);return Nte(e,n)?0:Math.min(...n.map((o,i)=>v6(e,o,n[(i+1)%n.length])))},oYt=(e,t)=>{if(OV(e))return OV(t)?Math.max(0,Gk(e.center,t.center)-e.width/2-t.width/2):Math.max(0,Rte(e.center,t)-e.width/2);if(OV(t))return oYt(t,e);let n=Dte(e),o=Dte(t);if(Nte(n[0],o)||Nte(o[0],n))return 0;let i=Number.POSITIVE_INFINITY;for(let r=0;r<n.length;r++)for(let s=0;s<o.length;s++)i=Math.min(i,vke(n[r],n[(r+1)%n.length],o[s],o[(s+1)%o.length]));return i},kge=(e,t)=>({minX:e.minX-t,minY:e.minY-t,maxX:e.maxX+t,maxY:e.maxY+t}),Hfe=(e)=>({minX:e.x,minY:e.y,maxX:e.x,maxY:e.y}),iYt=(e)=>{if(OV(e))return kge(Hfe(e.center),e.width/2);let t=Dte(e);return{minX:Math.min(...t.map((n)=>n.x)),minY:Math.min(...t.map((n)=>n.y)),maxX:Math.max(...t.map((n)=>n.x)),maxY:Math.max(...t.map((n)=>n.y))}},gk=(e,t)=>{if(!((n,o)=>n.layers.some((i)=>o.layers.includes(i)))(e,t)||!((n,o)=>n.maxX+Ch>=o.minX&&o.maxX+Ch>=n.minX&&n.maxY+Ch>=o.minY&&o.maxY+Ch>=n.minY)(e.bounds,t.bounds))return!1;if(e.kind==="bridge-pad"){let n={kind:"obstacle",obstacle:e.obstacle,layers:e.layers,bounds:e.bounds};return t.kind==="bridge-pad"?gk(n,{kind:"obstacle",obstacle:t.obstacle,layers:t.layers,bounds:t.bounds}):gk(n,t)}return t.kind==="bridge-pad"?gk(t,e):e.kind==="endpoint"?t.kind==="endpoint"?Gk(e.point,t.point)<=Ch:t.kind==="obstacle"?Rte(e.point,t.obstacle)<=Ch:t.kind==="segment"?v6(e.point,t.start,t.end)<=t.width/2+Ch:Gk(e.point,t.center)<=t.diameter/2+Ch:t.kind==="endpoint"?gk(t,e):e.kind==="obstacle"?t.kind==="obstacle"?oYt(e.obstacle,t.obstacle)<=Ch:t.kind==="segment"?((n,o,i)=>{if(OV(i))return Math.max(0,v6(i.center,n,o)-i.width/2);let r=Dte(i);return Nte(n,r)||Nte(o,r)?0:Math.min(...r.map((s,a)=>vke(n,o,s,r[(a+1)%r.length])))})(t.start,t.end,e.obstacle)<=t.width/2+Ch:Rte(t.center,e.obstacle)<=t.diameter/2+Ch:t.kind==="obstacle"?gk(t,e):e.kind==="segment"?t.kind==="segment"?vke(e.start,e.end,t.start,t.end)<=(e.width+t.width)/2+Ch:v6(t.center,e.start,e.end)<=e.width/2+t.diameter/2+Ch:t.kind==="segment"?gk(t,e):Gk(e.center,t.center)<=(e.diameter+t.diameter)/2+Ch},uYo=class{parent;constructor(e){this.parent=Array.from({length:e},(t,n)=>n)}find(e){let t=this.parent[e];if(t===e)return e;let n=this.find(t);return this.parent[e]=n,n}union(e,t){let n=this.find(e),o=this.find(t);n!==o&&(this.parent[o]=n)}},hYo=(e,t)=>{let n=t.indexOf(e.from_layer),o=t.indexOf(e.to_layer);return n<0||o<0?[...new Set([e.from_layer,e.to_layer])]:t.slice(Math.min(n,o),Math.max(n,o)+1)},mYo=(e)=>[e.pcb_trace_id,e.connection_name,e.source_trace_id,e.rootConnectionName,...e.mergedConnectionNames??[],...e.connectsTo??[]].filter((t)=>Boolean(t)),pYo=(e)=>[e.name,e.source_trace_id,e.rootConnectionName,...e.mergedConnectionNames??[],e.netConnectionName,...e.pointsToConnect.flatMap((t)=>[t.pointId,t.pcb_port_id])].filter((t)=>Boolean(t)),AYo=(e)=>[e.obstacleId,...e.connectedTo,...e.offBoardConnectsTo??[]].filter((t)=>Boolean(t)),M6t=(e,t,n,o)=>({kind:"bridge-contact",center:{x:e.x,y:e.y},diameter:t,layers:n,bridgeId:o,bounds:kge(Hfe(e),t/2)}),Yee=0.01,_Yo={"0603":{horizontalWidth:0.8,horizontalHeight:0.95,centerSpacings:[1.65,1.8]},1206:{horizontalWidth:0.6,horizontalHeight:1.6,centerSpacings:[3.2]},"1206x4_pair":{horizontalWidth:0.8,horizontalHeight:0.5,centerSpacings:[2.7]}},B6t=(e,t,n)=>{if(!e.layer)throw Error(`Jumper ${n} is missing its layer`);let o=_Yo[e.footprint];if(!o)throw Error(`Unsupported jumper footprint ${String(e.footprint)} on ${n}`);let i=Math.abs(e.end.x-e.start.x),r=Math.abs(e.end.y-e.start.y),s=(d)=>o.centerSpacings.some((u)=>Math.abs(d-u)<Yee),a=r<Yee&&s(i),c=i<Yee&&s(r);if(!a&&!c)throw Error(`Jumper ${n} does not match ${e.footprint} pad spacing`);let l={type:"rect",center:{...t},width:a?o.horizontalWidth:o.horizontalHeight,height:a?o.horizontalHeight:o.horizontalWidth,layers:[e.layer],connectedTo:[]};return{kind:"bridge-pad",obstacle:l,layers:l.layers,bridgeId:n,bounds:iYt(l)}},gYo=(e,t,n)=>{if(e.layer!==n.layer||t.layer!==n.layer)return!1;let o=(s,a)=>Math.abs(s.x-a.x)<Yee&&Math.abs(s.y-a.y)<Yee,i=o(e,n.start)&&o(t,n.end),r=o(e,n.end)&&o(t,n.start);return i||r},fYo=(e,t,n,o)=>{let i=[],r=e.route.flatMap((c,l)=>c.route_type==="jumper"?[{routePoint:c,routePointIndex:l}]:[]),s=new Map;for(let c of r){let l=[];for(let u=1;u<e.route.length;u++){let h=e.route[u-1],A=e.route[u];h?.route_type==="wire"&&A?.route_type==="wire"&&gYo(h,A,c.routePoint)&&l.push(u)}if(l.length!==1)throw Error(`Jumper ${e.pcb_trace_id}:${c.routePointIndex} matched ${l.length} placeholder wire segments`);let d=l[0];if(s.has(d))throw Error(`Multiple jumpers matched placeholder segment ${d} on ${e.pcb_trace_id}`);s.set(d,c)}let a;for(let c=0;c<e.route.length;c++){let l=e.route[c];if(l.route_type==="wire"){if(a&&a.layer===l.layer&&Gk(a,l)>Ch){let u=a;if(s.get(c));else{let h=u.width/2;i.push({kind:"segment",start:{x:u.x,y:u.y},end:{x:l.x,y:l.y},width:u.width,layers:[u.layer],bounds:kge({minX:Math.min(u.x,l.x),minY:Math.min(u.y,l.y),maxX:Math.max(u.x,l.x),maxY:Math.max(u.y,l.y)},h)})}}a=l;continue}if(a=void 0,l.route_type==="via"){let u=e.route[c-1],h=e.route[c+1];for(let m of[u,h])if(m?.route_type==="wire"&&Gk(m,l)>Ch)throw Error(`Via ${e.pcb_trace_id}:${c} is adjacent to a non-colocated wire endpoint`);let A=l.via_diameter??n;i.push({kind:"via",center:{x:l.x,y:l.y},diameter:A,layers:hYo(l,t),bounds:kge(Hfe(l),A/2)});continue}let d=`${e.pcb_trace_id}:${c}:${l.route_type}`;if(l.route_type==="jumper"){i.push(B6t(l,l.start,d),B6t(l,l.end,d));continue}if(l.route_type==="through_obstacle"){if(!o.find((u)=>u.layers.includes(l.from_layer)&&u.layers.includes(l.to_layer)&&Rte(l.start,u)<=Ch&&Rte(l.end,u)<=Ch))throw Error(`Through-obstacle marker ${d} has no same-net multilayer obstacle witness`);i.push(M6t(l.start,0,[l.from_layer],d),M6t(l.end,0,[l.to_layer],d));continue}throw Error(`Unsupported route primitive: ${String(l.route_type)}`)}return i},rYt=(e,t,n)=>{let o=e.pointsToConnect[n];return o.pointId??o.pcb_port_id??`${e.name}[${t}:${n}]`},w6t=(e)=>{let t={},n={},o=[];for(let i=0;i<e.connections.length;i++){let r=e.connections[i];for(let s=0;s<r.pointsToConnect.length;s++){let a=`${i}:${s}`;t[a]=rYt(r,i,s),n[a]=a,o.push([a])}}return{endpointCount:Object.keys(t).length,endpointLabels:t,componentByEndpointKey:n,endpointComponents:o}},Lge=(e)=>{if(e===null||typeof e!="object")return JSON.stringify(e)??String(e);if(Array.isArray(e))return`[${e.map((n)=>Lge(n)).join(",")}]`;let t=e;return`{${Object.keys(t).sort().map((n)=>`${JSON.stringify(n)}:${Lge(t[n])}`).join(",")}}`},T6t=(e,t)=>{let n=new F6(e,t,{includePhysicalPositionAliases:!0}),o=(i=e.layerCount)<=1?["top"]:i===2?["top","bottom"]:["top",...Array.from({length:i-2},(h,A)=>`inner${A+1}`),"bottom"];var i;let r=((h)=>{let A=h.min_via_hole_diameter??h.minViaHoleDiameter??0;return Math.max(A,h.min_via_pad_diameter??h.minViaPadDiameter??h.minViaDiameter??0.6)})(e),s=new Map,a=new Map,c={},l=(h,A)=>{let m=s.get(h)??[];m.push(A),s.set(h,m)};for(let h=0;h<e.connections.length;h++){let A=e.connections[h],m=n.canonicalize(pYo(A));if(m.length!==1)throw Error(`Connection ${A.name} resolved to ${m.length} canonical nets`);for(let p=0;p<A.pointsToConnect.length;p++){let g=A.pointsToConnect[p],_=`${h}:${p}`,f=rYt(A,h,p);c[_]=f;let y={kind:"endpoint",endpointKey:_,endpointLabel:f,point:{x:g.x,y:g.y},layers:g.layers??[g.layer],bounds:Hfe(g)};for(let x of m)l(x,y)}}for(let h of e.obstacles){let A={kind:"obstacle",obstacle:h,layers:h.layers,bounds:iYt(h)};for(let m of n.canonicalize(AYo(h))){let p=a.get(m)??[];p.push(h),a.set(m,p),s.has(m)&&l(m,A)}}for(let h of[...t,...e.fixedTraces??[]]){let A=n.canonicalize(mYo(h));if(A.length!==1)throw Error(`Trace ${h.pcb_trace_id} resolved to ${A.length} canonical nets`);let m=a.get(A[0])??[],p=fYo(h,o,r,m);for(let g of A)if(s.has(g))for(let _ of p)l(g,_)}let d={},u=[];for(let h of s.values()){let A=new uYo(h.length),m=new Map;for(let _=0;_<h.length;_++){let f=h[_];if(f.kind!=="bridge-contact"&&f.kind!=="bridge-pad")continue;let y=m.get(f.bridgeId);y===void 0?m.set(f.bridgeId,_):A.union(y,_)}let p=h.length>0?new Vm(h.length):null;if(p){for(let _ of h)p.add(_.bounds.minX,_.bounds.minY,_.bounds.maxX,_.bounds.maxY);p.finish()}for(let _=0;_<h.length;_++){let f=h[_],y=p?.search(f.bounds.minX-Ch,f.bounds.minY-Ch,f.bounds.maxX+Ch,f.bounds.maxY+Ch)??[];for(let x of y)x<=_||gk(f,h[x])&&A.union(_,x)}let g=new Map;for(let _=0;_<h.length;_++){let f=h[_];if(f.kind!=="endpoint")continue;let y=A.find(_),x=g.get(y)??[];x.push(f.endpointKey),g.set(y,x)}for(let _ of g.values()){_.sort();let f=_[0];u.push(_);for(let y of _){if(d[y]!==void 0)throw Error(`Endpoint ${y} was assigned to multiple canonical nets`);d[y]=f}}}return u.sort(([h=""],[A=""])=>h.localeCompare(A)),{endpointCount:Object.keys(c).length,endpointLabels:c,componentByEndpointKey:d,endpointComponents:u}},Fge=class{baseline;inputProblem;baselineCaptureError;baselineTraceSignature;constructor(e,t){this.inputProblem=e,this.baselineTraceSignature=Lge(t);try{this.baseline=T6t(e,t),this.baselineCaptureError=null}catch(n){this.baseline=w6t(e),this.baselineCaptureError=n instanceof Error?n.message:String(n)}}validate(e){if(this.baselineCaptureError){let o=Lge(e)===this.baselineTraceSignature;return{safe:o,candidate:this.baseline,regressions:[],validationError:o?`Connectivity validation is limited to exact trace preservation: ${this.baselineCaptureError}`:`Connectivity validation failed closed: ${this.baselineCaptureError}`}}let t;try{t=T6t(this.inputProblem,e)}catch(o){return{safe:!1,candidate:w6t(this.inputProblem),regressions:[],validationError:`Connectivity validation failed closed: ${o instanceof Error?o.message:String(o)}`}}let n=[];for(let o of this.baseline.endpointComponents){if(o.length<2)continue;let i=new Map;for(let r of o){let s=t.componentByEndpointKey[r]??`missing:${r}`,a=i.get(s)??[];a.push(r),i.set(s,a)}i.size<=1||n.push({baselineEndpointKeys:[...o],baselineEndpointLabels:o.map((r)=>this.baseline.endpointLabels[r]),candidateComponents:[...i.values()]})}return{safe:n.length===0,candidate:t,regressions:n}}},D6t=[{x:0,y:0},{x:0.5,y:0.5}],yYo=[0.15,0.2,0.25,0.3,0.4,0.5],ba=(e)=>e?.route_type==="wire",aRe=(e)=>e?.route_type==="via",xYo=Array.from({length:24},(e,t)=>{let n=t*Math.PI/12;return{x:Math.cos(n),y:Math.sin(n)}}),VY=(e)=>[...new Set(e.map((t)=>Number(t.toFixed(6))))].sort((t,n)=>n-t),cRe=class extends vL{inputProblem;traces;obstacleIndex;phase="repair-vias";traceCursor=0;routeCursor=0;candidateCursor=0;clearanceTierCursor=0;attemptedCandidateCount=0;attemptedClearanceShoveCount=0;attemptedViaGridCount=0;committedClearanceShoveCount=0;viaPairCountRemoved=0;viaCountRemoved=0;simplifiedPathCount=0;normalizedSegmentCount=0;achievedExtraClearanceCount=0;relocatedViaCount=0;unresolvedViaCount=0;attemptedPushedViaRepairCount=0;committedPushedViaRepairCount=0;padClearanceRerouteCount=0;unresolvedPadClearanceCount=0;initialPadClearanceViolationCount=0;remainingPadClearanceViolationCount=0;initialPadClearanceViolationCountByClearance={};remainingPadClearanceViolationCountByClearance={};budgetLimited=!1;connectivityValidationCount=0;connectivityRollbackCount=0;connectivityRegressionEndpointIds=[];connectivityValidationError=null;connectivityRollbackMutationStats=null;connectionNameResolver;connectionByTraceId=new Map;connectivityInvariant;initialConnectivitySafeTraces;mutableTraceIndices;mutableTraceIndexSet;viaRepairTraceIndices;traceIndices;maxRerouteLength;clearancePaddingTiers;desiredPadClearance;initialTraceLengths=new Map;candidates=[];candidateShoveCount=0;rollbackTraces=null;baseCandidateValidated=!1;activeShovePadding=0;viaGridAttempt=null;candidateSetMayUseGridFallback=!1;pendingPushedViaRepair=null;alternatePushedViaRepairs=[];pushedViaRepairRollbackTraces=null;connectivityFinalized=!1;finalizedMutatedTraceIndices=[];resumePhase="scan-via-pairs";constructor(e){super(),this.inputProblem=structuredClone(e),this.traces=structuredClone(e.traces),this.initialConnectivitySafeTraces=structuredClone(e.traces),this.connectivityInvariant=new Fge(this.inputProblem.simpleRouteJson,this.initialConnectivitySafeTraces),this.connectionNameResolver=new F6(e.simpleRouteJson,this.traces),this.maxRerouteLength=e.maxRerouteLength??10,this.desiredPadClearance=e.desiredPadClearance,this.clearancePaddingTiers=VY([...e.clearancePaddingTiers??[0.1,0.05,0],0]).filter((i)=>i>=0);let t=this.traces.map((i,r)=>r),n=(i,r,s)=>{let a=[...new Set(i??s)];for(let c of a)if(!Number.isInteger(c)||c<0||c>=this.traces.length)throw RangeError(`Invalid cleanup ${r} index: ${c}`);return a},o=n(e.traceIndices,"trace",t);this.viaRepairTraceIndices=n(e.viaRepairTraceIndices,"via repair trace",o),this.mutableTraceIndices=n(e.mutableTraceIndices,"mutable trace",o),this.mutableTraceIndexSet=new Set(this.mutableTraceIndices),this.traceIndices=o.filter((i)=>this.resolveNominalTraceWidth(this.traces[i])>=0.499999);for(let i of this.traceIndices)this.initialTraceLengths.set(i,this.measureTraceLength(this.traces[i]));this.obstacleIndex=this.createObstacleIndex(),this.initialPadClearanceViolationCount=this.countPadClearanceViolations(),this.remainingPadClearanceViolationCount=this.initialPadClearanceViolationCount,this.initialPadClearanceViolationCountByClearance=this.countPadClearanceViolationsByTier(),this.remainingPadClearanceViolationCountByClearance={...this.initialPadClearanceViolationCountByClearance},this.activeSubSolver=null,this.MAX_ITERATIONS=1e6,this.stats=this.createStats()}getSolverName(){return"PowerTraceCleanupSolver"}_step(){if(this.activeSubSolver)return this.stepActiveShoveSolver(),void(this.stats=this.createStats());switch(this.phase){case"repair-vias":this.repairNextVia();break;case"scan-via-pairs":this.scanNextViaPair();break;case"scan-pad-clearance":this.scanNextPadClearance();break;case"scan-simplification":this.scanNextSimplification();break;case"evaluate-candidate":this.evaluateCurrentCandidate();break;case"shove-clearance":break;case"route-via-pair":this.startNextViaGridCandidate();break;case"complete":this.ensureConnectivitySafeOutput(),this.solved=!0}this.stats=this.createStats()}repairNextVia(){let e=this.viaRepairTraceIndices[this.traceCursor],t=e===void 0?void 0:this.traces[e];if(!t)return this.traceCursor=0,this.routeCursor=0,this.phase="scan-via-pairs",void this.rebuildObstacleIndex();let n=t.route.findIndex((l,d)=>d>=this.routeCursor&&aRe(l));if(n===-1)return this.traceCursor++,void(this.routeCursor=0);this.routeCursor=n+1;let o=t.route[n],i=t.route[n-1],r=t.route[n+1];if(!aRe(o)||!ba(i)||!ba(r))return;let s=this.getTraceConnectionNames(t),a=this.getBaseObstacleClearance();if(!this.obstacleIndex.collidesVia({point:o,layers:this.obstacleIndex.boardLayers,padDiameter:o.via_diameter??0.6,holeDiameter:o.via_hole_diameter??this.obstacleIndex.defaultViaHoleDiameter,connectionNames:s,ignoreTraceIndex:e,ignoreRouteRange:{start:n,end:n},obstacleClearance:a,blockSameNetObstacles:!0,sameNetObstacleClearance:0}))return;let c=this.findViaRepair(t,n,a);if(!c){let l=this.findPushableViaRepairs(t,n,a),d=l.shift();return d?(this.alternatePushedViaRepairs=l,void this.startPushedViaRepair(d)):void this.unresolvedViaCount++}t.route.splice(c.startIndex,c.endIndex-c.startIndex+1,...c.route),this.relocatedViaCount++,this.routeCursor=c.startIndex+c.route.length,this.rebuildObstacleIndex()}findViaRepair(e,t,n){let o=this.createViaRepairContext(e,t);if(!o)return null;let i=o.candidates.map((r)=>({point:r,movedLength:os(o.leftAnchor,r)+os(r,o.rightAnchor)})).filter(({movedLength:r})=>r<=o.originalLength+Math.min(6,this.maxRerouteLength)+ti);i.sort((r,s)=>r.movedLength-s.movedLength||os(r.point,o.via)-os(s.point,o.via));for(let r of i)if(this.isViaRepairPointSafe(o,r.point,n))return this.createViaRepairReplacement(o,r.point);return null}findPushableViaRepairs(e,t,n){let o=this.viaRepairTraceIndices[this.traceCursor];if(o===void 0)return[];let i=this.createViaRepairContext(e,t);if(!i)return[];let r=i.candidates.flatMap((s)=>{let a=os(i.leftAnchor,s)+os(s,i.rightAnchor);if(a>i.originalLength+Math.min(6,this.maxRerouteLength)+ti)return[];let c=new Set,l=this.getViaRepairCollisionQueries(i,s,n);for(let u of l)for(let h of this.obstacleIndex.findCollisions(u)){if(h.kind!=="trace"||h.traceIndex===void 0||h.traceIndex===o||!this.mutableTraceIndexSet.has(h.traceIndex))return[];c.add(h.traceIndex)}if(c.size===0||c.size>2)return[];let d=[...c];return this.isViaRepairPointSafe(i,s,n,d)?[{point:s,movedLength:a,blockerCount:c.size,blockerKey:[...c].sort((u,h)=>u-h).join(",")}]:[]});return r.sort((s,a)=>s.blockerCount-a.blockerCount||s.movedLength-a.movedLength||os(s.point,i.via)-os(a.point,i.via)),[...new Map([...r].reverse().map((s)=>[s.blockerKey,s])).values(),...r].filter((s,a,c)=>c.findIndex((l)=>l.point.x===s.point.x&&l.point.y===s.point.y)===a).slice(0,12).map((s)=>({traceIndex:o,viaIndex:t,point:s.point,padClearance:n,corridor:[{start:i.leftAnchor,end:s.point,layer:i.leftWire.layer,width:i.leftWire.width},{start:s.point,end:i.rightAnchor,layer:i.rightWire.layer,width:i.rightWire.width},...this.obstacleIndex.boardLayers.map((a)=>({start:s.point,end:s.point,layer:a,width:i.viaDiameter}))]}))}createViaRepairContext(e,t){let n=e.route[t],o=e.route[t-1],i=e.route[t+1];if(!aRe(n)||!ba(o)||!ba(i))return null;let r=t-1==0||!ba(e.route[t-2]),s=t+1===e.route.length-1||!ba(e.route[t+2]),a=r?o:e.route[t-2],c=s?i:e.route[t+2],l=os(a,n)+os(n,c),d=this.getTraceConnectionNames(e),u=n.via_diameter??0.6,h=n.via_hole_diameter??this.obstacleIndex.defaultViaHoleDiameter,A=Math.max(0.3,h+this.obstacleIndex.minViaHoleEdgeToViaHoleEdgeClearance+0.05),m=[A,A+0.15,A+0.3,A+0.5,A+0.75,A+1,A+1.5,A+2].flatMap((g)=>xYo.map((_)=>({x:0.025*Math.round((n.x+_.x*g)/0.025),y:0.025*Math.round((n.y+_.y*g)/0.025)}))),p=[...m,...m.flatMap((g)=>[{x:g.x,y:Math.floor(10*n.y)/10},{x:g.x,y:Math.ceil(10*n.y)/10},{x:Math.floor(10*n.x)/10,y:g.y},{x:Math.ceil(10*n.x)/10,y:g.y}])].filter((g,_,f)=>f.findIndex((y)=>y.x===g.x&&y.y===g.y)===_);return{trace:e,viaIndex:t,via:n,leftWire:o,rightWire:i,leftIsEndpoint:r,rightIsEndpoint:s,leftAnchor:a,rightAnchor:c,originalLength:l,connectionNames:d,viaDiameter:u,holeDiameter:h,ignoreRouteRange:{start:Math.max(0,t-2),end:Math.min(e.route.length-1,t+2)},candidates:p}}getViaRepairCollisionQueries(e,t,n,o){let i=this.viaRepairTraceIndices[this.traceCursor],r={connectionNames:e.connectionNames,ignoreTraceIndex:i,ignoreTraceIndices:o,ignoreRouteRange:e.ignoreRouteRange,obstacleClearance:n};return[...this.obstacleIndex.boardLayers.map((s)=>({...r,start:t,end:t,layer:s,width:e.viaDiameter,blockSameNetObstacles:!0,sameNetObstacleClearance:0})),{...r,start:e.leftAnchor,end:t,layer:e.leftWire.layer,width:e.leftWire.width},{...r,start:t,end:e.rightAnchor,layer:e.rightWire.layer,width:e.rightWire.width}]}isViaRepairPointSafe(e,t,n,o){let i=this.viaRepairTraceIndices[this.traceCursor];return!this.obstacleIndex.collidesVia({point:t,layers:this.obstacleIndex.boardLayers,padDiameter:e.viaDiameter,holeDiameter:e.holeDiameter,connectionNames:e.connectionNames,ignoreTraceIndex:i,ignoreTraceIndices:o,ignoreRouteRange:{start:e.viaIndex,end:e.viaIndex},obstacleClearance:n,blockSameNetObstacles:!0,sameNetObstacleClearance:0})&&!this.getViaRepairCollisionQueries(e,t,n,o).slice(this.obstacleIndex.boardLayers.length).some((r)=>this.obstacleIndex.collides(r))}createViaRepairReplacement(e,t){let n={...e.leftWire,...t},o={...e.via,...t},i={...e.rightWire,...t};return{startIndex:e.viaIndex-1,endIndex:e.viaIndex+1,route:[...e.leftIsEndpoint?[e.leftWire]:[],n,o,i,...e.rightIsEndpoint?[e.rightWire]:[]]}}startPushedViaRepair(e){this.pendingPushedViaRepair=e,this.pushedViaRepairRollbackTraces=structuredClone(this.traces),this.attemptedPushedViaRepairCount++,this.activeSubSolver=new HV({simpleRouteJson:this.inputProblem.simpleRouteJson,traces:this.traces,powerTraceIndex:e.traceIndex,nominalPowerWidth:Math.max(...e.corridor.map((t)=>t.width)),pushOnlyNominalWidthsBelow:Number.POSITIVE_INFINITY,mutableTraceIndices:this.mutableTraceIndices,corridor:e.corridor,maxRerouteLength:this.maxRerouteLength},this.connectionNameResolver)}finishPushedViaRepairSolver(e){let t=this.pendingPushedViaRepair;if(this.activeSubSolver=null,!t)return;if(e.solved){let o=e.getOutput();if(o){this.traces=o.traces,this.rebuildObstacleIndex();let i=this.traces[t.traceIndex],r=i?this.createViaRepairContext(i,t.viaIndex):null;if(r&&this.isViaRepairPointSafe(r,t.point,t.padClearance)){let s=this.createViaRepairReplacement(r,t.point);return i.route.splice(s.startIndex,s.endIndex-s.startIndex+1,...s.route),this.relocatedViaCount++,this.committedPushedViaRepairCount++,this.routeCursor=s.startIndex+s.route.length,this.pendingPushedViaRepair=null,this.alternatePushedViaRepairs=[],this.pushedViaRepairRollbackTraces=null,void this.rebuildObstacleIndex()}}}this.pushedViaRepairRollbackTraces&&(this.traces=this.pushedViaRepairRollbackTraces),this.pendingPushedViaRepair=null,this.pushedViaRepairRollbackTraces=null;let n=this.alternatePushedViaRepairs.shift();if(n)return this.rebuildObstacleIndex(),void this.startPushedViaRepair(n);this.alternatePushedViaRepairs=[],this.unresolvedViaCount++,this.rebuildObstacleIndex()}scanNextViaPair(){let e=this.traceIndices[this.traceCursor];if(e===void 0)return this.traceCursor=0,this.routeCursor=0,void(this.phase="scan-pad-clearance");let t=this.traces[e],n=t.route.findIndex((_,f)=>f>=this.routeCursor&&_.route_type==="via");if(n===-1)return void this.advanceTrace();let o=t.route.slice(n+1).findIndex((_)=>_.route_type==="via");if(o===-1)return void this.advanceTrace();let i=n-1,r=n+1+o+1,s=t.route[i],a=t.route[r];if(this.routeCursor=n+1,!ba(s)||!ba(a)||s.layer!==a.layer||os(s,a)>this.maxRerouteLength+ti)return;let c=this.createCandidates({kind:"via-pair",traceIndex:e,startIndex:i,endIndex:r}),l=c[0]?.width??Math.max(s.width,a.width),d=c[0]?.padClearance??this.getCandidatePadClearance("via-pair",e,i,r),u=(_)=>{let f=t.route[_];return!!ba(f)&&this.obstacleIndex.findCollisions({start:f,end:f,layer:f.layer,width:l,connectionNames:this.getTraceConnectionNames(t),ignoreTraceIndex:e,ignoreRouteRange:{start:Math.max(0,i-1),end:Math.min(t.route.length-1,r+1)},obstacleClearance:d}).some((y)=>y.kind==="obstacle"&&y.obstacleKind==="pad")},h=t.route[i-1],A=t.route[r+1],m=c.length>0&&u(i)&&ba(h)&&h.layer===s.layer?i-1:i,p=c.length>0&&u(r)&&ba(A)&&A.layer===a.layer?r+1:r,g=[{startIndex:i,endIndex:r},{startIndex:m,endIndex:r},{startIndex:i,endIndex:p},{startIndex:m,endIndex:p}].filter((_,f,y)=>y.findIndex((x)=>x.startIndex===_.startIndex&&x.endIndex===_.endIndex)===f).flatMap((_)=>_.startIndex===i&&_.endIndex===r?c:this.createCandidates({kind:"via-pair",traceIndex:e,startIndex:_.startIndex,endIndex:_.endIndex}));g.length!==0&&this.beginCandidates(g,"scan-via-pairs",!0)}scanNextPadClearance(){let e=this.traceIndices[this.traceCursor];if(e===void 0)return this.traceCursor=0,this.routeCursor=0,void(this.phase="scan-simplification");let t=this.traces[e];if(this.resolveNominalTraceWidth(t)<0.499999)return void this.advanceTrace();let n=this.routeCursor,o=t.route[n],i=t.route[n+1];if(!ba(o)||!ba(i)||o.layer!==i.layer)return void(n>=t.route.length-1?this.advanceTrace():this.routeCursor++);if(this.routeCursor++,!this.segmentHasPadClearanceViolation(e,n))return;let r=this.getPadClearanceIntervals(t,n).flatMap((s)=>this.getImprovedPadClearanceTiers(e,s.startIndex,s.endIndex).flatMap((a)=>this.createCandidates({kind:"pad-clearance",traceIndex:e,startIndex:s.startIndex,endIndex:s.endIndex,padClearance:a}).slice(0,8)));r.length!==0?this.beginCandidates(r.slice(0,72),"scan-pad-clearance",!0):this.unresolvedPadClearanceCount++}segmentHasPadClearanceViolation(e,t){let n=this.traces[e],o=n.route[t],i=n.route[t+1];return!(!ba(o)||!ba(i)||o.layer!==i.layer)&&this.obstacleIndex.findCollisions({start:o,end:i,layer:o.layer,width:Math.max(o.width,i.width),connectionNames:this.getTraceConnectionNames(n),ignoreTraceIndex:e,ignoreRouteRange:{start:Math.max(0,t-1),end:Math.min(n.route.length-1,t+2)},obstacleClearance:this.getPadClearanceForTrace(n)}).some((r)=>r.kind==="obstacle"&&r.obstacleKind==="pad")}getPadClearanceIntervals(e,t){let n=e.route[t];if(!ba(n))return[];let o=[t],i=0;for(let s=t-1;s>=0;s--){let a=e.route[s],c=e.route[s+1];if(!ba(a)||!ba(c)||a.layer!==n.layer||c.layer!==n.layer)break;if(i+=os(a,c),i>this.maxRerouteLength/2+ti)break;o.push(s)}let r=[t+1];i=0;for(let s=t+1;s<e.route.length-1;s++){let a=e.route[s],c=e.route[s+1];if(!ba(a)||!ba(c)||a.layer!==n.layer||c.layer!==n.layer)break;if(i+=os(a,c),i>this.maxRerouteLength/2+ti)break;r.push(s+1)}return o.flatMap((s)=>r.map((a)=>({startIndex:s,endIndex:a,length:this.measureRouteRange(e,s,a).length}))).filter((s)=>s.length<=this.maxRerouteLength+ti&&s.startIndex<s.endIndex).sort((s,a)=>a.length-s.length).slice(0,8)}scanNextSimplification(){let e=this.traceIndices[this.traceCursor];if(e===void 0)return this.remainingPadClearanceViolationCount=this.countPadClearanceViolations(),this.remainingPadClearanceViolationCountByClearance=this.countPadClearanceViolationsByTier(),void(this.phase="complete");let t=this.traces[e],n=this.routeCursor,o=t.route[n];if(!ba(o)||n>=t.route.length-1)return void(n>=t.route.length-1?this.advanceTrace():this.routeCursor++);let i=0,r=[];for(let a=n+1;a<t.route.length;a++){let c=t.route[a-1],l=t.route[a];if(!ba(c)||!ba(l)||c.layer!==o.layer||l.layer!==o.layer)break;if(i+=os(c,l),i>this.maxRerouteLength+ti)break;let d=this.measureRouteRange(t,n,a);(d.nonOctilinearSegmentCount>0||d.pointCount>3)&&r.push(a)}let s=r.slice(-6).reverse().flatMap((a)=>this.createCandidates({kind:"simplification",traceIndex:e,startIndex:n,endIndex:a}));s.length!==0?this.beginCandidates(s,"scan-simplification"):this.routeCursor++}createCandidates({kind:e,traceIndex:t,startIndex:n,endIndex:o,padClearance:i}){let r=this.traces[t],s=r.route[n],a=r.route[o];if(!ba(s)||!ba(a)||s.layer!==a.layer)return[];let c=this.resolveNominalTraceWidth(r),l=this.measureRouteRange(r,n,o),d=i??this.getCandidatePadClearance(e,t,n,o),u=[],h=nYt(s,a);if(e==="pad-clearance"&&sRe([s,a])===0){let m=os(s,a);if(m>ti){let p={x:-(a.y-s.y)/m,y:(a.x-s.x)/m};for(let g of[0.25,0.5,0.75,1,1.5,2])for(let _ of[-1,1])h.push([s,{x:s.x+p.x*g*_,y:s.y+p.y*g*_},{x:a.x+p.x*g*_,y:a.y+p.y*g*_},a])}}let A=new Map(h.map((m)=>[m.map((p)=>`${p.x.toFixed(6)},${p.y.toFixed(6)}`).join(";"),m]));for(let m of A.values()){let p=Tte(m);if(p>this.maxRerouteLength+ti||e==="pad-clearance"&&p>1.35*l.length+0.5||e==="simplification"&&(p>1.1*l.length+ti||this.measureTraceLength(r)-l.length+p>1.01*(this.initialTraceLengths.get(t)??this.measureTraceLength(r))+ti))continue;let g=p<=ti?c:c-l.deficitArea/p;if(g>c+ti)continue;let _=0.05*Math.ceil(Math.max(this.inputProblem.simpleRouteJson.minTraceWidth,g)/0.05-ti),f=VY([c,Math.min(c,_),Math.min(c,Math.max(this.inputProblem.simpleRouteJson.minTraceWidth,g))].map((y)=>Math.max(y,s.width)));for(let y of f){let x=this.measureCandidate(m,y,c,a.width,s.width);x.deficitArea>l.deficitArea+ti||x.conservativeDeficitArea>l.conservativeDeficitArea+ti||!this.preservesCoverage(x,l)||(e!=="simplification"||l.nonOctilinearSegmentCount!==0||x.pointCount<l.pointCount&&x.length<l.length-ti)&&u.push({kind:e,traceIndex:t,startIndex:n,endIndex:o,layer:s.layer,points:m,width:y,padClearance:d,originalQuality:l})}}return u.slice(0,18)}beginCandidates(e,t,n=!1){this.candidates=e,this.candidateCursor=0,this.clearanceTierCursor=0,this.candidateShoveCount=0,this.rollbackTraces=null,this.baseCandidateValidated=!1,this.resumePhase=t,this.candidateSetMayUseGridFallback=n,this.phase="evaluate-candidate"}evaluateCurrentCandidate(){let e=this.candidates[this.candidateCursor];if(!e)return void this.finishCandidateSet(!1);if(!this.baseCandidateValidated){if(!this.candidateCollides(e,0))return this.candidateShoveCount>0?void this.applyCandidate(e,0):(this.baseCandidateValidated=!0,void(this.clearanceTierCursor=0));return this.getPushableTraceIndices(e,0)&&this.candidateShoveCount<2&&this.attemptedClearanceShoveCount<48?void this.startClearanceShove(e,0):void this.advanceCandidate()}let t=this.clearancePaddingTiers[this.clearanceTierCursor];if(t===void 0||t<=ti)return void this.applyCandidate(e,0);if(this.attemptedCandidateCount++,!this.candidateCollides(e,t))return void this.applyCandidate(e,t);this.getPushableTraceIndices(e,t)&&this.candidateShoveCount<2&&this.attemptedClearanceShoveCount<48?this.startClearanceShove(e,t):(this.rollbackCandidateShoves(),this.clearanceTierCursor++,this.candidateShoveCount=0)}advanceCandidate(){this.rollbackCandidateShoves(),this.candidateCursor++,this.clearanceTierCursor=0,this.candidateShoveCount=0,this.baseCandidateValidated=!1}candidateCollides(e,t){let n=this.traces[e.traceIndex],o=this.getTraceConnectionNames(n);for(let i=0;i<e.points.length-1;i++){let r=this.getCandidateSegmentWidth(e,i);if(this.obstacleIndex.collides({start:e.points[i],end:e.points[i+1],layer:e.layer,width:r+2*t,connectionNames:o,ignoreTraceIndex:e.traceIndex,ignoreRouteRange:{start:Math.max(0,e.startIndex-1),end:Math.min(n.route.length-1,e.endIndex+1)},obstacleClearance:e.padClearance}))return!0}return!1}getPushableTraceIndices(e,t){let n=this.traces[e.traceIndex],o=this.getTraceConnectionNames(n),i=new Set;for(let r=0;r<e.points.length-1;r++){let s=this.getCandidateSegmentWidth(e,r),a={start:e.points[r],end:e.points[r+1],layer:e.layer,width:s+2*t,connectionNames:o,ignoreTraceIndex:e.traceIndex,ignoreRouteRange:{start:Math.max(0,e.startIndex-1),end:Math.min(n.route.length-1,e.endIndex+1)},obstacleClearance:e.padClearance};if(!this.obstacleIndex.collides(a))continue;let c=this.obstacleIndex.findCollisions(a);if(c.length===0)return null;for(let l of c){if(l.kind!=="trace"||l.traceIndex===void 0||l.traceIndex===e.traceIndex||!this.mutableTraceIndexSet.has(l.traceIndex))return null;let d=this.traces[l.traceIndex];if(!d||this.resolveNominalTraceWidth(d)>=e.width-ti)return null;i.add(l.traceIndex)}}return i.size>0&&i.size<=2?[...i]:null}startClearanceShove(e,t){this.rollbackTraces??=structuredClone(this.traces),this.activeShovePadding=t;let n=e.width+2*t,o=e.points.slice(0,-1).map((i,r)=>({start:i,end:e.points[r+1],layer:e.layer,width:this.getCandidateSegmentWidth(e,r)+2*t}));this.attemptedClearanceShoveCount++,this.activeSubSolver=new HV({simpleRouteJson:this.inputProblem.simpleRouteJson,traces:this.traces,powerTraceIndex:e.traceIndex,nominalPowerWidth:n,pushOnlyNominalWidthsBelow:e.width,mutableTraceIndices:this.mutableTraceIndices,corridor:o,maxRerouteLength:this.maxRerouteLength},this.connectionNameResolver),this.phase="shove-clearance"}getCandidateSegmentWidth(e,t){let n=this.traces[e.traceIndex],o=n.route[e.startIndex],i=n.route[e.endIndex],r=t===0&&ba(o)?o.width:e.width,s=t===e.points.length-2&&ba(i)?i.width:e.width;return Math.max(r,s)}stepActiveShoveSolver(){let e=this.activeSubSolver;if(e.step(),e.solved||e.failed)if(this.pendingPushedViaRepair&&e instanceof HV)this.finishPushedViaRepairSolver(e);else if(e instanceof Qge)this.finishViaGridSolver(e);else{if(this.activeSubSolver=null,this.phase="evaluate-candidate",e.solved){let t=e.getOutput();if(t)return this.traces=t.traces,this.candidateShoveCount++,void this.rebuildObstacleIndex()}this.failedSubSolvers??=[],this.failedSubSolvers.push(e),this.rollbackCandidateShoves(),this.activeShovePadding<=ti?this.advanceCandidate():this.clearanceTierCursor++,this.candidateShoveCount=0}}rollbackCandidateShoves(){this.rollbackTraces&&(this.traces=this.rollbackTraces,this.rollbackTraces=null,this.rebuildObstacleIndex())}applyCandidate(e,t){let n=this.traces[e.traceIndex],o=n.route[e.startIndex],i=n.route[e.endIndex],r=e.points.map((c,l)=>({...l===0?o:l===e.points.length-1?i:{route_type:"wire",layer:e.layer,width:e.width},x:c.x,y:c.y,layer:e.layer,width:l===0?o.width:l===e.points.length-1?i.width:e.width})),s=n.route.slice(e.startIndex,e.endIndex+1),a=e.originalQuality.nonOctilinearSegmentCount;if(n.route.splice(e.startIndex,e.endIndex-e.startIndex+1,...r),e.kind==="via-pair"){let c=s.filter((l)=>l.route_type==="via").length;this.viaPairCountRemoved++,this.viaCountRemoved+=c,this.routeCursor=Math.max(0,e.startIndex-1)}else e.kind==="pad-clearance"?(this.padClearanceRerouteCount++,this.routeCursor=e.startIndex+Math.max(1,r.length-1)):(this.simplifiedPathCount++,this.normalizedSegmentCount+=a,this.routeCursor=e.startIndex+Math.max(1,r.length-1));this.committedClearanceShoveCount+=this.candidateShoveCount,t>ti&&this.achievedExtraClearanceCount++,this.rollbackTraces=null,this.candidateShoveCount=0,this.rebuildObstacleIndex(),this.finishCandidateSet(!0)}finishCandidateSet(e){let t=this.candidates[0],n=VY(this.candidates.filter((i)=>i.kind===t?.kind).map((i)=>i.width)),o=VY(this.candidates.filter((i)=>i.kind===t?.kind&&i.traceIndex===t.traceIndex&&i.startIndex===t.startIndex&&i.endIndex===t.endIndex).map((i)=>i.padClearance));if(this.rollbackCandidateShoves(),this.candidates=[],this.candidateCursor=0,this.clearanceTierCursor=0,this.candidateShoveCount=0,this.baseCandidateValidated=!1,!e&&this.candidateSetMayUseGridFallback&&t)return this.candidateSetMayUseGridFallback=!1,void this.beginViaGridAttempt(t,n,o);this.candidateSetMayUseGridFallback=!1,e||this.routeCursor++,this.phase=this.resumePhase}beginViaGridAttempt(e,t,n=[e.padClearance]){this.viaGridAttempt={kind:e.kind,traceIndex:e.traceIndex,startIndex:e.startIndex,endIndex:e.endIndex,layer:e.layer,padClearances:n,padClearanceCursor:0,originalQuality:e.originalQuality,widths:t,widthCursor:0,gridSizes:[],gridSizeCursor:0,offsetCursor:0},this.phase="route-via-pair"}startNextViaGridCandidate(){let e=this.viaGridAttempt;if(!e)return void(this.phase=this.resumePhase);if(e.padClearanceCursor>=e.padClearances.length)return e.kind==="pad-clearance"&&this.unresolvedPadClearanceCount++,this.viaGridAttempt=null,this.routeCursor++,void(this.phase=this.resumePhase);if(e.widthCursor>=e.widths.length)return e.padClearanceCursor++,e.widthCursor=0,e.gridSizes=[],e.gridSizeCursor=0,void(e.offsetCursor=0);let t=e.widths[e.widthCursor],n=e.padClearances[e.padClearanceCursor];if(e.gridSizes.length===0&&(e.gridSizes=VY([Ih(t/2,0.2,0.4),Ih(t/3,0.15,0.25)])),e.gridSizeCursor>=e.gridSizes.length)return e.widthCursor++,e.gridSizes=[],e.gridSizeCursor=0,void(e.offsetCursor=0);if(e.offsetCursor>=D6t.length)return e.gridSizeCursor++,void(e.offsetCursor=0);let o=this.traces[e.traceIndex],i=o.route[e.startIndex],r=o.route[e.endIndex];if(!ba(i)||!ba(r))return this.viaGridAttempt=null,this.routeCursor++,void(this.phase=this.resumePhase);let s=e.gridSizes[e.gridSizeCursor],a=D6t[e.offsetCursor];this.attemptedViaGridCount++,this.activeSubSolver=new Qge({start:i,end:r,layer:e.layer,traceWidth:t,gridSize:s,gridOffset:{x:a.x*s,y:a.y*s},connectionNames:this.getTraceConnectionNames(o),obstacleIndex:this.obstacleIndex,ignoreTraceIndex:e.traceIndex,ignoreRouteRange:{start:Math.max(0,e.startIndex-1),end:Math.min(o.route.length-1,e.endIndex+1)},bounds:this.inputProblem.simpleRouteJson.bounds,obstacleClearance:n,searchPadding:Math.min(4,Math.max(2,os(i,r)/2,3*t)),requireOctilinear:!0})}finishViaGridSolver(e){let t=this.viaGridAttempt;if(this.activeSubSolver=null,e.solved&&t){let n=e.getOutput(),o=this.traces[t.traceIndex];if(n&&o){let i=this.resolveNominalTraceWidth(o),r=this.measureCandidate(n.points,n.traceWidth,i,o.route[t.endIndex].width,o.route[t.startIndex].width);if(r.nonOctilinearSegmentCount===0&&r.length<=this.maxRerouteLength+ti&&r.deficitArea<=t.originalQuality.deficitArea+ti&&r.conservativeDeficitArea<=t.originalQuality.conservativeDeficitArea+ti&&this.preservesCoverage(r,t.originalQuality)){let s={kind:t.kind,traceIndex:t.traceIndex,startIndex:t.startIndex,endIndex:t.endIndex,layer:t.layer,points:n.points,width:n.traceWidth,padClearance:t.padClearances[t.padClearanceCursor],originalQuality:t.originalQuality};return this.viaGridAttempt=null,void this.beginCandidates([s],this.resumePhase,!1)}}}e.failed&&(this.failedSubSolvers??=[],this.failedSubSolvers.push(e)),t&&t.offsetCursor++,this.phase="route-via-pair"}measureRouteRange(e,t,n){let o=this.resolveNominalTraceWidth(e),i=0,r=0,s=0,a=0,c=0,l=0,d=0;for(let u=t;u<=n;u++){if(ba(e.route[u])&&d++,u>=n)continue;let h=e.route[u],A=e.route[u+1];if(!ba(h)||!ba(A)||h.layer!==A.layer)continue;let m=os(h,A);i+=m,r+=m*Math.max(0,o-h.width),h.width>=o-ti&&(a+=m),s+=m*Math.max(0,o-Math.min(h.width,A.width)),Math.min(h.width,A.width)>=o-ti&&(c+=m),l+=sRe([h,A])}return{length:i,deficitArea:r,conservativeDeficitArea:s,nominalLength:a,conservativeNominalLength:c,nonOctilinearSegmentCount:l,pointCount:d}}measureTraceLength(e){let t=0;for(let n=0;n<e.route.length-1;n++){let o=e.route[n],i=e.route[n+1];ba(o)&&ba(i)&&o.layer===i.layer&&(t+=os(o,i))}return t}measureCandidate(e,t,n,o=t,i=t){let r=Tte(e),s=0,a=0,c=0,l=0;for(let d=0;d<e.length-1;d++){let u=os(e[d],e[d+1]),h=d===0?i:t,A=d===e.length-2?o:t,m=Math.min(h,A);s+=u*Math.max(0,n-h),a+=u*Math.max(0,n-m),h>=n-ti&&(c+=u),m>=n-ti&&(l+=u)}return{length:r,deficitArea:s,conservativeDeficitArea:a,nominalLength:c,conservativeNominalLength:l,nonOctilinearSegmentCount:sRe(e),pointCount:e.length}}preservesCoverage(e,t){let n=t.length<=ti?1:t.nominalLength/t.length,o=e.length<=ti?1:e.nominalLength/e.length,i=t.length<=ti?1:t.conservativeNominalLength/t.length,r=e.length<=ti?1:e.conservativeNominalLength/e.length;return!(o+ti<n||r+ti<i)&&!(e.length>t.length+ti&&o<0.999999)}advanceTrace(){this.traceCursor++,this.routeCursor=0,this.rebuildObstacleIndex()}createObstacleIndex(){return new zI(this.inputProblem.simpleRouteJson,this.traces,this.phase==="repair-vias"?void 0:this.traceIndices?.[this.traceCursor],[],this.connectionNameResolver)}rebuildObstacleIndex(){this.obstacleIndex=this.createObstacleIndex()}resolveNominalTraceWidth(e){let t=this.findConnectionForTrace(e);return Math.max(t?.nominalTraceWidth??t?.width??this.inputProblem.simpleRouteJson.nominalTraceWidth??this.inputProblem.simpleRouteJson.minTraceWidth,this.inputProblem.simpleRouteJson.minTraceWidth)}getPadClearanceForTrace(e){let t=this.getBaseObstacleClearance();return this.resolveNominalTraceWidth(e)>=0.499999?Math.max(t,this.desiredPadClearance??this.resolveNominalTraceWidth(e)/2):t}getBaseObstacleClearance(){return Math.max(this.inputProblem.simpleRouteJson.defaultObstacleMargin??0,this.inputProblem.simpleRouteJson.minTraceToPadEdgeClearance??0,0.1)}getCandidatePadClearance(e,t,n,o){let i=this.traces[t],r=this.getBaseObstacleClearance(),s=this.getPadClearanceForTrace(i);if(e==="pad-clearance")return s;let a=e==="via-pair"?Math.min(s,Math.max(r,0.15)):s;return this.findExistingPadClearance(t,n,o,r,a)}getImprovedPadClearanceTiers(e,t,n){let o=this.traces[e],i=this.getBaseObstacleClearance(),r=this.getPadClearanceForTrace(o),s=this.findExistingPadClearance(e,t,n,i,r),a=Math.max(0.025,Math.min(0.05,r/10)),c=[r];for(let l=r-a;l>s+a/2;l-=a)c.push(l);return VY(c).filter((l)=>l>s+ti)}findExistingPadClearance(e,t,n,o,i){if(this.routeRangeHasPadClearanceViolation(e,t,n,o))return o;if(!this.routeRangeHasPadClearanceViolation(e,t,n,i))return i;let r=o,s=i;for(let a=0;a<7;a++){let c=(r+s)/2;this.routeRangeHasPadClearanceViolation(e,t,n,c)?s=c:r=c}return Math.max(o,Number((r-0.001).toFixed(6)))}routeRangeHasPadClearanceViolation(e,t,n,o){let i=this.traces[e],r=this.getTraceConnectionNames(i);for(let s=t;s<n;s++){let a=i.route[s],c=i.route[s+1];if(!ba(a)||!ba(c)||a.layer!==c.layer)continue;if(this.obstacleIndex.findCollisions({start:a,end:c,layer:a.layer,width:Math.max(a.width,c.width),connectionNames:r,ignoreTraceIndex:e,ignoreRouteRange:{start:Math.max(0,t-1),end:Math.min(i.route.length-1,n+1)},obstacleClearance:o}).some((l)=>l.kind==="obstacle"&&l.obstacleKind==="pad"))return!0}return!1}countPadClearanceViolations(e){let t=0;for(let n of this.traceIndices){let o=this.traces[n];if(!o)continue;let i=this.getTraceConnectionNames(o);for(let r=0;r<o.route.length-1;r++){let s=o.route[r],a=o.route[r+1];if(!ba(s)||!ba(a)||s.layer!==a.layer)continue;this.obstacleIndex.findCollisions({start:s,end:a,layer:s.layer,width:Math.max(s.width,a.width),connectionNames:i,ignoreTraceIndex:n,ignoreRouteRange:{start:Math.max(0,r-1),end:Math.min(o.route.length-1,r+2)},obstacleClearance:e??this.getPadClearanceForTrace(o)}).some((c)=>c.kind==="obstacle"&&c.obstacleKind==="pad")&&t++}}return t}countPadClearanceViolationsByTier(){return Object.fromEntries(yYo.map((e)=>[e.toFixed(2),this.countPadClearanceViolations(e)]))}findConnectionForTrace(e){let t=this.connectionByTraceId.get(e.pcb_trace_id);if(t!==void 0)return t??void 0;let n=new Set(this.connectionNameResolver.canonicalize(this.getTraceConnectionNames(e))),o=this.inputProblem.simpleRouteJson.connections.find((i)=>this.connectionNameResolver.canonicalize(this.getConnectionNames(i)).some((r)=>n.has(r)))??null;return this.connectionByTraceId.set(e.pcb_trace_id,o),o??void 0}getConnectionNames(e){return[e.name,e.source_trace_id,e.rootConnectionName,e.netConnectionName,...e.mergedConnectionNames??[]].filter((t)=>Boolean(t))}getTraceConnectionNames(e){return[e.pcb_trace_id,e.connection_name,e.source_trace_id,e.rootConnectionName,...e.mergedConnectionNames??[],...e.connectsTo??[]].filter((t)=>Boolean(t))}ensureConnectivitySafeOutput(){if(!this.connectivityFinalized){this.connectivityFinalized=!0,this.connectivityValidationCount++;try{let e=this.connectivityInvariant.validate(this.traces);if(this.connectivityValidationError??=e.validationError??null,e.safe)return void(this.finalizedMutatedTraceIndices=this.getMutatedTraceIndices());this.connectivityRegressionEndpointIds=[...new Set(e.regressions.flatMap((t)=>t.baselineEndpointLabels))]}catch(e){this.connectivityValidationError=e instanceof Error?e.message:String(e)}this.connectivityRollbackCount++,this.connectivityRollbackMutationStats={committedClearanceShoveCount:this.committedClearanceShoveCount,viaPairCountRemoved:this.viaPairCountRemoved,viaCountRemoved:this.viaCountRemoved,simplifiedPathCount:this.simplifiedPathCount,normalizedSegmentCount:this.normalizedSegmentCount,achievedExtraClearanceCount:this.achievedExtraClearanceCount,relocatedViaCount:this.relocatedViaCount,committedPushedViaRepairCount:this.committedPushedViaRepairCount,padClearanceRerouteCount:this.padClearanceRerouteCount},this.committedClearanceShoveCount=0,this.viaPairCountRemoved=0,this.viaCountRemoved=0,this.simplifiedPathCount=0,this.normalizedSegmentCount=0,this.achievedExtraClearanceCount=0,this.relocatedViaCount=0,this.committedPushedViaRepairCount=0,this.padClearanceRerouteCount=0,this.traces=structuredClone(this.initialConnectivitySafeTraces),this.obstacleIndex=new zI(this.inputProblem.simpleRouteJson,this.traces,void 0,[],this.connectionNameResolver),this.remainingPadClearanceViolationCount=this.countPadClearanceViolations(),this.remainingPadClearanceViolationCountByClearance=this.countPadClearanceViolationsByTier(),this.finalizedMutatedTraceIndices=this.getMutatedTraceIndices()}}getMutatedTraceIndices(){let e=Math.max(this.initialConnectivitySafeTraces.length,this.traces.length);return Array.from({length:e},(t,n)=>n).filter((t)=>JSON.stringify(this.initialConnectivitySafeTraces[t])!==JSON.stringify(this.traces[t]))}createStats(){let e=this.candidates[this.candidateCursor],t=this.phase==="repair-vias"?this.viaRepairTraceIndices:this.traceIndices;return{phase:this.phase,budgetLimited:this.budgetLimited,completionReason:this.phase==="complete"||this.solved?this.connectivityRollbackCount>0?"connectivity_rollback":this.budgetLimited?"iteration_budget":this.connectivityValidationError?"connectivity_validation_unavailable":"completed":null,resultStatus:this.connectivityRollbackCount>0||this.budgetLimited||this.connectivityValidationError!==null?"best_effort":"complete",traceCursor:this.traceCursor,traceCount:t.length,traceIndex:t[this.traceCursor],routeCursor:this.routeCursor,candidateCursor:this.candidateCursor,candidateCount:this.candidates.length,candidateKind:e?.kind,candidateWidth:e?.width,candidatePointCount:e?.points.length,clearancePadding:this.clearancePaddingTiers[this.clearanceTierCursor],candidateShoveCount:this.candidateShoveCount,attemptedCandidateCount:this.attemptedCandidateCount,attemptedClearanceShoveCount:this.attemptedClearanceShoveCount,attemptedViaGridCount:this.attemptedViaGridCount,committedClearanceShoveCount:this.committedClearanceShoveCount,viaPairCountRemoved:this.viaPairCountRemoved,viaCountRemoved:this.viaCountRemoved,simplifiedPathCount:this.simplifiedPathCount,normalizedSegmentCount:this.normalizedSegmentCount,achievedExtraClearanceCount:this.achievedExtraClearanceCount,relocatedViaCount:this.relocatedViaCount,unresolvedViaCount:this.unresolvedViaCount,attemptedPushedViaRepairCount:this.attemptedPushedViaRepairCount,committedPushedViaRepairCount:this.committedPushedViaRepairCount,padClearanceRerouteCount:this.padClearanceRerouteCount,unresolvedPadClearanceCount:this.unresolvedPadClearanceCount,initialPadClearanceViolationCount:this.initialPadClearanceViolationCount,remainingPadClearanceViolationCount:this.remainingPadClearanceViolationCount,initialPadClearanceViolationCountByClearance:{...this.initialPadClearanceViolationCountByClearance},remainingPadClearanceViolationCountByClearance:{...this.remainingPadClearanceViolationCountByClearance},connectivityValidationCount:this.connectivityValidationCount,connectivityRollbackCount:this.connectivityRollbackCount,connectivityRegressionEndpointIds:[...this.connectivityRegressionEndpointIds],connectivityValidationError:this.connectivityValidationError,connectivityRollbackMutationStats:this.connectivityRollbackMutationStats===null?null:{...this.connectivityRollbackMutationStats},mutatedTraceIndices:[...this.finalizedMutatedTraceIndices],spatialIndexRectCount:this.obstacleIndex.items.length}}computeProgress(){if(this.solved||this.phase==="complete")return 1;let e=this.phase==="repair-vias"?this.viaRepairTraceIndices:this.traceIndices;if(e.length===0)return 1;let t=this.resumePhase==="scan-via-pairs"?0:0.5;return Math.min(0.99,t+this.traceCursor/e.length*0.5)}getConstructorParams(){return[this.inputProblem]}tryFinalAcceptance(){let e=this.pushedViaRepairRollbackTraces??this.rollbackTraces;e&&(this.traces=e),this.activeSubSolver=null,this.rollbackTraces=null,this.pushedViaRepairRollbackTraces=null,this.pendingPushedViaRepair=null,this.alternatePushedViaRepairs=[],this.viaGridAttempt=null,this.candidates=[],this.candidateCursor=0,this.clearanceTierCursor=0,this.candidateShoveCount=0,this.baseCandidateValidated=!1,this.candidateSetMayUseGridFallback=!1,this.ensureConnectivitySafeOutput(),this.obstacleIndex=new zI(this.inputProblem.simpleRouteJson,this.traces,void 0,[],this.connectionNameResolver),this.remainingPadClearanceViolationCount=this.countPadClearanceViolations(),this.remainingPadClearanceViolationCountByClearance=this.countPadClearanceViolationsByTier(),this.budgetLimited=!0,this.phase="complete",this.solved=!0,this.progress=1,this.stats=this.createStats()}getOutput(){return structuredClone(this.solved?this.traces:this.initialConnectivitySafeTraces)}visualize(){let e=[],t=[],n=this.candidates[this.candidateCursor];for(let o=0;o<this.traces.length;o++){let i=this.traces[o];for(let r of i.route)r.route_type==="via"&&t.push({center:r,radius:(r.via_diameter??0.6)/2,fill:"#d4a017",stroke:"#7a5700"});for(let r=0;r<i.route.length-1;r++){let s=i.route[r],a=i.route[r+1];ba(s)&&ba(a)&&s.layer===a.layer&&e.push({points:[s,a],strokeColor:s.layer==="bottom"?"#376fc4":"#777",strokeWidth:s.width})}}if(n)for(let o=0;o<n.points.length-1;o++)e.push({points:[n.points[o],n.points[o+1]],strokeColor:"#ff7400",strokeWidth:n.width+2*(this.clearancePaddingTiers[this.clearanceTierCursor]??0)});return{coordinateSystem:"cartesian",title:`Power trace cleanup: ${this.phase}`,lines:e,points:[],circles:t,rects:[],texts:[]}}},aS=(e)=>e?.route_type==="wire",lRe=class extends vL{inputProblem;traces;obstacleIndex;traceCursor=0;routeCursor=0;repairedSegmentCount=0;repairedPadNeckSegmentCount=0;unresolvedSegmentCount=0;totalWidthReduction=0;budgetLimited=!1;connectivityValidationCount=0;connectivityRollbackCount=0;connectivityRegressionEndpointIds=[];connectivityValidationError=null;connectivityRollbackMutationStats=null;connectionNameResolver;nominalWidthByTraceId=new Map;connectivityInvariant;initialConnectivitySafeTraces;minimumTraceWidth;traceIndices;connectivityFinalized=!1;constructor(e){super(),this.inputProblem=structuredClone(e),this.traces=structuredClone(e.traces),this.initialConnectivitySafeTraces=structuredClone(e.traces),this.connectivityInvariant=new Fge(this.inputProblem.simpleRouteJson,this.initialConnectivitySafeTraces),this.connectionNameResolver=new F6(e.simpleRouteJson,this.traces),this.minimumTraceWidth=e.simpleRouteJson.minTraceWidth;let t=e.traceIndices?[...new Set(e.traceIndices)]:this.traces.map((o,i)=>i);for(let o of t)if(!Number.isInteger(o)||o<0||o>=this.traces.length)throw RangeError(`Invalid clearance-repair trace index: ${o}`);this.traceIndices=t,this.obstacleIndex=this.createConservativeObstacleIndex();let n=this.traceIndices.reduce((o,i)=>o+Math.max(0,this.traces[i].route.length-1),0);this.MAX_ITERATIONS=Math.max(10,8*n+2*this.traceIndices.length),this.stats=this.createStats()}getSolverName(){return"PowerTraceClearanceRepairSolver"}_step(){let e=this.traceIndices[this.traceCursor],t=e===void 0?void 0:this.traces[e];if(!t)return this.ensureConnectivitySafeOutput(),this.solved=!0,void(this.stats=this.createStats());if(this.routeCursor>=t.route.length-1)return this.traceCursor++,this.routeCursor=0,void(this.stats=this.createStats());let n=this.routeCursor++,o=t.route[n],i=t.route[n+1];if(!aS(o)||!aS(i)||o.layer!==i.layer)return void(this.stats=this.createStats());let r=Math.max(o.width,i.width),s={start:o,end:i,layer:o.layer,width:r,connectionNames:this.getTraceConnectionNames(t),ignoreTraceIndex:e,ignoreRouteRange:{start:n,end:n+1}};if(this.repairConnectedPadNeck(t,n,s))return void(this.stats=this.createStats());if(!this.segmentHasForeignTraceCollision(n,r))return void(this.stats=this.createStats());if(this.segmentHasForeignTraceCollision(n,this.minimumTraceWidth))return this.unresolvedSegmentCount++,void(this.stats=this.createStats());let a=this.minimumTraceWidth,c=r;for(let p=0;p<10;p++){let g=(a+c)/2;this.segmentHasForeignTraceCollision(n,g)?c=g:a=g}let l=r>=0.5?0.025:0.0125,d=Math.max(this.minimumTraceWidth,Math.floor((a+ti)/l)*l),u=this.segmentHasForeignTraceCollision(n,d)?a:d,h=o.width,A=i.width;o.width=Math.min(o.width,u),i.width=Math.min(i.width,u);let m=h-o.width+(A-i.width);if(m<=ti)return this.unresolvedSegmentCount++,void(this.stats=this.createStats());this.repairedSegmentCount++,this.totalWidthReduction+=m,this.obstacleIndex=this.createConservativeObstacleIndex(),this.routeCursor=Math.max(0,n-1),this.stats=this.createStats()}repairConnectedPadNeck(e,t,n){let o=e.route[t],i=e.route[t+1];if(!aS(o)||!aS(i))return!1;let r=this.obstacleIndex.getConnectedPadWidthLimitAtPoint(n,o),s=this.obstacleIndex.getConnectedPadWidthLimitAtPoint(n,i);t===0&&(r=this.getSmallerLimit(r,this.obstacleIndex.getConnectedPadEndpointWidthLimitAtPoint(n,o))),t+1===e.route.length-1&&(s=this.getSmallerLimit(s,this.obstacleIndex.getConnectedPadEndpointWidthLimitAtPoint(n,i)));let a=r,c=s;if((a===null||o.width<=a+ti)&&(c===null||i.width<=c+ti))return!1;let l=o.width,d=i.width;if(a!==null&&(o.width=Math.min(o.width,a)),c!==null&&(i.width=Math.min(i.width,c)),a!==null&&c===null)this.insertPadBoundaryTransition(e,t,n,"start",o.width,d);else if(a===null&&c!==null)this.insertPadBoundaryTransition(e,t,n,"end",i.width,l);else if(a!==null&&c!==null){let u=this.obstacleIndex.getConnectedPadBoundaryPoint(n,"start"),h=this.obstacleIndex.getConnectedPadBoundaryPoint(n,"end");u&&h&&(this.insertPadBoundaryTransition(e,t,n,"start",o.width,d),this.insertPadBoundaryTransition(e,t+2,n,"end",i.width,l))}return this.totalWidthReduction+=l-o.width+(d-i.width),this.repairedPadNeckSegmentCount++,this.obstacleIndex=this.createConservativeObstacleIndex(),this.routeCursor=Math.max(0,t-1),!0}getSmallerLimit(e,t){return e===null?t:t===null?e:Math.min(e,t)}insertPadBoundaryTransition(e,t,n,o,i,r){let s=this.obstacleIndex.getConnectedPadBoundaryPoint(n,o);if(!s)return;let a=o==="start"?n.start:n.end,c=o==="start"?n.end:n.start,l=Math.hypot(c.x-a.x,c.y-a.y);if(l<=0.000000001)return;let d=Math.min(0.000001,l/4),u=(c.x-a.x)/l,h=(c.y-a.y)/l,A={route_type:"wire",x:s.x-u*d,y:s.y-h*d,width:i,layer:n.layer},m={...A,x:s.x+u*d,y:s.y+h*d,width:r},p=o==="start"?e.route[t+1]:e.route[t],g=o==="start"?e.route[t+2]:e.route[t-1];if(aS(p)&&g?.route_type==="via"){let _=this.resolveNominalTraceWidth(e);this.obstacleIndex.collides({...n,start:p,end:m,width:_})||(p.width=Math.max(p.width,_),m.width=p.width)}e.route.splice(t+1,0,...o==="start"?[A,m]:[m,A])}resolveNominalTraceWidth(e){let t=this.nominalWidthByTraceId.get(e.pcb_trace_id);if(t!==void 0)return t;let n=new Set(this.connectionNameResolver.canonicalize(this.getTraceConnectionNames(e))),o=this.inputProblem.simpleRouteJson.connections.find((r)=>this.connectionNameResolver.canonicalize([r.name,r.source_trace_id,r.rootConnectionName,r.netConnectionName,...r.mergedConnectionNames??[]].filter((s)=>Boolean(s))).some((s)=>n.has(s))),i=Math.max(o?.nominalTraceWidth??o?.width??this.inputProblem.simpleRouteJson.nominalTraceWidth??this.minimumTraceWidth,this.minimumTraceWidth);return this.nominalWidthByTraceId.set(e.pcb_trace_id,i),i}segmentHasForeignTraceCollision(e,t){let n=this.traceIndices[this.traceCursor],o=n===void 0?void 0:this.traces[n],i=o?.route[e],r=o?.route[e+1];return!!(o&&aS(i)&&aS(r)&&i.layer===r.layer)&&this.obstacleIndex.findCollisions({start:i,end:r,layer:i.layer,width:t,connectionNames:this.getTraceConnectionNames(o),ignoreTraceIndex:n,ignoreRouteRange:{start:e,end:e+1}}).some((s)=>s.kind==="trace"&&s.traceIndex!==void 0&&s.traceIndex!==n)}createConservativeObstacleIndex(){let e=structuredClone(this.traces);for(let t of e)for(let n=0;n<t.route.length-1;n++){let o=t.route[n],i=t.route[n+1];aS(o)&&aS(i)&&o.layer===i.layer&&(o.width=Math.max(o.width,i.width))}return new zI(this.inputProblem.simpleRouteJson,e,void 0,[],this.connectionNameResolver)}getTraceConnectionNames(e){return[e.pcb_trace_id,e.connection_name,e.source_trace_id,e.rootConnectionName,...e.mergedConnectionNames??[],...e.connectsTo??[]].filter((t)=>Boolean(t))}ensureConnectivitySafeOutput(){if(!this.connectivityFinalized){this.connectivityFinalized=!0,this.connectivityValidationCount++;try{let e=this.connectivityInvariant.validate(this.traces);if(this.connectivityValidationError??=e.validationError??null,e.safe)return;this.connectivityRegressionEndpointIds=[...new Set(e.regressions.flatMap((t)=>t.baselineEndpointLabels))]}catch(e){this.connectivityValidationError=e instanceof Error?e.message:String(e)}this.connectivityRollbackCount++,this.connectivityRollbackMutationStats={repairedSegmentCount:this.repairedSegmentCount,repairedPadNeckSegmentCount:this.repairedPadNeckSegmentCount,totalWidthReduction:this.totalWidthReduction},this.repairedSegmentCount=0,this.repairedPadNeckSegmentCount=0,this.totalWidthReduction=0,this.traces=structuredClone(this.initialConnectivitySafeTraces),this.obstacleIndex=this.createConservativeObstacleIndex()}}createStats(){return{phase:this.solved?"complete":"repair-trace-clearance",budgetLimited:this.budgetLimited,completionReason:this.solved?this.connectivityRollbackCount>0?"connectivity_rollback":this.budgetLimited?"iteration_budget":this.connectivityValidationError?"connectivity_validation_unavailable":"completed":null,resultStatus:this.connectivityRollbackCount>0||this.budgetLimited||this.connectivityValidationError!==null?"best_effort":"complete",traceCursor:this.traceCursor,traceCount:this.traceIndices.length,traceIndex:this.traceIndices[this.traceCursor],routeCursor:this.routeCursor,repairedSegmentCount:this.repairedSegmentCount,repairedPadNeckSegmentCount:this.repairedPadNeckSegmentCount,unresolvedSegmentCount:this.unresolvedSegmentCount,totalWidthReduction:this.totalWidthReduction,connectivityValidationCount:this.connectivityValidationCount,connectivityRollbackCount:this.connectivityRollbackCount,connectivityRegressionEndpointIds:[...this.connectivityRegressionEndpointIds],connectivityValidationError:this.connectivityValidationError,connectivityRollbackMutationStats:this.connectivityRollbackMutationStats===null?null:{...this.connectivityRollbackMutationStats},spatialIndexRectCount:this.obstacleIndex.items.length}}computeProgress(){return this.solved||this.traceIndices.length===0?1:Math.min(0.99,this.traceCursor/this.traceIndices.length)}tryFinalAcceptance(){this.ensureConnectivitySafeOutput(),this.budgetLimited=!0,this.solved=!0,this.progress=1,this.stats=this.createStats()}getConstructorParams(){return[this.inputProblem]}getOutput(){return structuredClone(this.solved?this.traces:this.initialConnectivitySafeTraces)}visualize(){let e=[];for(let t=0;t<this.traces.length;t++){let n=this.traces[t];for(let o=0;o<n.route.length-1;o++){let i=n.route[o],r=n.route[o+1];aS(i)&&aS(r)&&i.layer===r.layer&&e.push({points:[i,r],strokeColor:t===this.traceIndices[this.traceCursor]&&o===this.routeCursor?"#ff7400":i.layer==="bottom"?"#376fc4":"#777",strokeWidth:Math.max(i.width,r.width)})}}return{coordinateSystem:"cartesian",title:"Power trace direction-independent clearance repair",lines:e,points:[],circles:[],rects:[],texts:[]}}},N6t=[{x:0,y:0},{x:0.5,y:0},{x:0,y:0.5},{x:0.5,y:0.5}],R6t=[{offset:{x:0,y:0},strictNecking:!0},{offset:{x:0.5,y:0.5},strictNecking:!0},{offset:{x:0,y:0},strictNecking:!1},{offset:{x:0.5,y:0.5},strictNecking:!1}],Q6t=(e)=>[...new Set(e.map((t)=>Number(t.toFixed(6))))].sort((t,n)=>n-t),hs=(e)=>e?.route_type==="wire",CYo=class extends vL{inputProblem;options;traces;obstacleIndex;connectionNameResolver;connectionByTraceId=new Map;connectivityInvariant;lastConnectivitySafeTraces;traceOrder;selectedOwnedTraceIndices;selectedCleanupTraceIndices;selectedViaRepairTraceIndices;mutableBlockerTraceIndices;immutableTraceIndices;initialImmutableTraceSignatures=new Map;traceOrderCursor=-1;maxPassCount=4;previousWidthDeficit=0;passIndex=0;completedPassCount=0;lastNormalizedWidthDeficitGain=0;normalizedWidthDeficitGainByPass=[];plateauReached=!1;phase="scan-trace";traceIndex=-1;routeSegmentIndex=0;nominalTraceWidth=0;currentIntervals=[];intervalCursor=0;candidateWidths=[];widthCursor=0;gridResolutions=[];resolutionCursor=0;offsetCursor=0;keptTraceCount=0;recreatedTraceCount=0;expandedSegmentCount=0;intermediateExpandedSegmentCount=0;pathWidthUpgradeCount=0;inPlaceWidthProbeCount=0;reroutedSegmentCount=0;unresolvedSegmentCount=0;attemptedGridCount=0;attemptedLayerGridCount=0;attemptedInflationCount=0;pushedTraceCount=0;elasticPushedTraceCount=0;layerReroutedTraceCount=0;insertedViaCount=0;neckedLayerSegmentCount=0;removedViaPairCount=0;removedViaCount=0;simplifiedPathCount=0;normalizedSegmentCount=0;cleanupClearanceShoveCount=0;relocatedViaCount=0;unresolvedViaCount=0;initialImmutableViaViolationCount=0;remainingImmutableViaViolationCount=0;initialImmutableViaViolationPairCount=0;remainingImmutableViaViolationPairCount=0;immutableTraceMutationIds=[];lastSafeImmutableViaViolationSignatures=new Set;immutableViaViolationRollbackCount=0;attemptedImmutableViaViolationCount=null;attemptedImmutableViaViolationPairCount=null;immutableViaViolationRegressionIds=[];padClearanceRerouteCount=0;unresolvedPadClearanceCount=0;repairedTraceClearanceSegmentCount=0;repairedPadNeckSegmentCount=0;unresolvedTraceClearanceSegmentCount=0;sameNetContactRejectionCount=0;connectivityValidationCount=0;connectivityRollbackCount=0;connectivityRollbackPhases=[];immutableSafetyRollbackCount=0;immutableSafetyRollbackPhases=[];connectivityRegressionEndpointIds=[];connectivityValidationError=null;connectivityRollbackMutationStats=null;immutableSafetyRollbackMutationStats=null;discardedExpansionMutationStats=null;initialPadClearanceViolationCount=0;remainingPadClearanceViolationCount=0;initialPadClearanceViolationCountByClearance={};remainingPadClearanceViolationCountByClearance={};budgetLimitedExpansion=!1;finalAcceptanceUsed=!1;cleanupCompleted=!1;clearanceRepairCompleted=!1;cleanupBestEffortAccepted=!1;clearanceRepairBestEffortAccepted=!1;cleanupIterationBudget=0;clearanceRepairIterationBudget=0;expansionPushedTraceIndices=new Set;cleanupMutatedTraceIndices=[];failedSubSolverCount=0;inflationAttemptsBySegment=new Map;layerAttemptCountByTrace=new Map;layerRerouteCountByTrace=new Map;activeInflationKey=null;activeInflationWidth=null;layerAttempt=null;pendingLayerOutput=null;pendingLayerPushCount=0;constructor(e,t={}){super(),this.inputProblem=structuredClone(e),this.options=structuredClone(t),this.traces=structuredClone(e.traces??[]),this.connectionNameResolver=new F6(this.inputProblem,this.traces),this.lastConnectivitySafeTraces=structuredClone(this.traces),this.connectivityInvariant=new Fge(this.inputProblem,this.lastConnectivitySafeTraces);let n=t.onlyConnectionNames?new Set(this.connectionNameResolver.canonicalize([...t.onlyConnectionNames])):null,o=this.traces.flatMap((s,a)=>{if(!n)return[a];return this.connectionNameResolver.canonicalize(this.getTraceConnectionNames(s)).some((c)=>n.has(c))?[a]:[]}),i=new Map(o.map((s)=>[s,this.getInitialTracePriority(this.traces[s])]));this.traceOrder=o.sort((s,a)=>i.get(a)-i.get(s)||s-a),this.selectedOwnedTraceIndices=this.traceOrder.filter((s)=>this.findConnectionForTrace(this.traces[s])),this.selectedCleanupTraceIndices=[...this.selectedOwnedTraceIndices],this.selectedViaRepairTraceIndices=[...this.selectedOwnedTraceIndices],this.mutableBlockerTraceIndices=this.traces.flatMap((s,a)=>this.findConnectionForTrace(s)?[a]:[]);let r=new Set(this.mutableBlockerTraceIndices);this.immutableTraceIndices=this.traces.flatMap((s,a)=>r.has(a)?[]:(this.initialImmutableTraceSignatures.set(a,JSON.stringify(s)),[a])),this.previousWidthDeficit=this.calculateWidthDeficit().deficit,this.obstacleIndex=new zI(this.inputProblem,this.traces,this.traceIndex>=0?this.traceIndex:void 0,[],this.connectionNameResolver),this.lastSafeImmutableViaViolationSignatures=this.getImmutableViaViolationSignatures(this.traces),this.initialImmutableViaViolationCount=this.countViolatingImmutableVias(this.lastSafeImmutableViaViolationSignatures),this.remainingImmutableViaViolationCount=this.initialImmutableViaViolationCount,this.initialImmutableViaViolationPairCount=this.lastSafeImmutableViaViolationSignatures.size,this.remainingImmutableViaViolationPairCount=this.initialImmutableViaViolationPairCount,this.activeSubSolver=null,this.MAX_ITERATIONS=8000000,this.stats=this.createStats()}getSolverName(){return"PowerTraceExpanderSolver"}_step(){if(this.shouldStartBudgetFinalization())return this.startBudgetFinalization(),void(this.stats=this.createStats());if(this.activeSubSolver)return this.stepActiveGridSolver(),void(this.stats=this.createStats());switch(this.phase){case"scan-trace":this.scanNextTrace();break;case"evaluate-segment":this.evaluateNextSegment();break;case"try-trace-inflation":case"cleanup":case"repair-trace-clearance":break;case"try-layer-candidate":this.startNextLayerCandidate();break;case"try-grid-candidate":this.startNextGridCandidate();break;case"complete":this.acceptConnectivityCheckpoint(this.traces,"final"),this.solved=!0}this.stats=this.createStats()}scanNextTrace(){if(this.traceOrderCursor++,this.routeSegmentIndex=0,this.traceOrderCursor>=this.traceOrder.length)return void this.finishOrStartNextPass();this.traceIndex=this.traceOrder[this.traceOrderCursor];let e=this.traces[this.traceIndex];this.findConnectionForTrace(e)?(this.nominalTraceWidth=this.resolveNominalTraceWidth(e),this.traceMeetsNominalWidth(e,this.nominalTraceWidth)?this.keptTraceCount++:(this.rebuildObstacleIndex(),e.route=function(t,n){if(t.length<2)return t.map((i)=>({...i}));let o=[];for(let i=0;i<t.length-1;i++){let r=t[i],s=t[i+1];if(o.push({...r}),r.route_type!=="wire"||s.route_type!=="wire"||r.layer!==s.layer||r.width>=n-ti)continue;let a=os(r,s),c=Math.max(1,Math.ceil(a/n));for(let l=1;l<c;l++){let d=l/c;o.push({route_type:"wire",x:r.x+(s.x-r.x)*d,y:r.y+(s.y-r.y)*d,width:r.width,layer:r.layer})}}return o.push({...t[t.length-1]}),o}(e.route,this.nominalTraceWidth),this.recreatedTraceCount++,this.phase="evaluate-segment")):this.keptTraceCount++}finishOrStartNextPass(){let{deficit:e,nominalArea:t}=this.calculateWidthDeficit(),n=this.previousWidthDeficit-e;if(this.lastNormalizedWidthDeficitGain=t<=ti?0:n/t,this.normalizedWidthDeficitGainByPass.push(this.lastNormalizedWidthDeficitGain),this.plateauReached=this.lastNormalizedWidthDeficitGain<0.001,this.completedPassCount=this.passIndex+1,this.passIndex+1<this.maxPassCount&&this.lastNormalizedWidthDeficitGain>=0.001)return this.previousWidthDeficit=e,this.passIndex++,this.traceOrderCursor=-1,this.traceIndex=-1,this.routeSegmentIndex=0,this.inflationAttemptsBySegment.clear(),void(this.phase="scan-trace");this.startCleanup()}startCleanup(){this.acceptConnectivityCheckpoint(this.traces,"expansion"),this.traceIndex=this.traces.length,this.phase="cleanup";let e=new cRe({simpleRouteJson:this.inputProblem,traces:this.traces,traceIndices:this.selectedCleanupTraceIndices,viaRepairTraceIndices:this.selectedViaRepairTraceIndices,mutableTraceIndices:this.mutableBlockerTraceIndices,maxRerouteLength:10,desiredPadClearance:this.options.powerTraceToPadClearance}),t=this.getRemainingParentIterationsAfterCurrentStep(),n=t===0?0:Math.max(1,Math.floor(0.75*t));e.MAX_ITERATIONS=Math.min(e.MAX_ITERATIONS,n),this.cleanupIterationBudget=e.MAX_ITERATIONS,this.activeSubSolver=e}shouldStartBudgetFinalization(){return!this.budgetLimitedExpansion&&(this.phase!=="cleanup"&&this.phase!=="repair-trace-clearance"&&this.phase!=="complete"&&this.iterations>=this.getExpansionIterationBudget())}getFinalizationIterationReserve(){return Math.min(Math.max(0,this.MAX_ITERATIONS-1),Math.max(1,Math.floor(0.125*this.MAX_ITERATIONS)))}getExpansionIterationBudget(){return Math.max(1,this.MAX_ITERATIONS-this.getFinalizationIterationReserve())}startBudgetFinalization(){this.budgetLimitedExpansion=!0,this.activeSubSolver=null,this.pendingLayerOutput=null,this.pendingLayerPushCount=0,this.activeInflationKey=null,this.activeInflationWidth=null,this.layerAttempt=null,this.discardInFlightExpansion(),this.startCleanup()}discardInFlightExpansion(){this.discardedExpansionMutationStats=this.captureAndResetExpansionMutationStats(),this.restoreLastConnectivitySafeTraces()}rollbackConnectivityRegressedExpansion(){this.connectivityRollbackMutationStats=this.captureAndResetExpansionMutationStats(),this.restoreLastConnectivitySafeTraces()}rollbackImmutableUnsafeExpansion(){this.immutableSafetyRollbackMutationStats=this.captureAndResetExpansionMutationStats(),this.restoreLastConnectivitySafeTraces()}captureAndResetExpansionMutationStats(){let e={recreatedTraceCount:this.recreatedTraceCount,expandedSegmentCount:this.expandedSegmentCount,intermediateExpandedSegmentCount:this.intermediateExpandedSegmentCount,pathWidthUpgradeCount:this.pathWidthUpgradeCount,reroutedSegmentCount:this.reroutedSegmentCount,pushedTraceCount:this.pushedTraceCount,elasticPushedTraceCount:this.elasticPushedTraceCount,layerReroutedTraceCount:this.layerReroutedTraceCount,insertedViaCount:this.insertedViaCount,neckedLayerSegmentCount:this.neckedLayerSegmentCount};return this.recreatedTraceCount=0,this.expandedSegmentCount=0,this.intermediateExpandedSegmentCount=0,this.pathWidthUpgradeCount=0,this.reroutedSegmentCount=0,this.pushedTraceCount=0,this.elasticPushedTraceCount=0,this.layerReroutedTraceCount=0,this.insertedViaCount=0,this.neckedLayerSegmentCount=0,this.expansionPushedTraceIndices.clear(),e}restoreLastConnectivitySafeTraces(){this.traces=structuredClone(this.lastConnectivitySafeTraces),this.rebuildObstacleIndex()}getRemainingParentIterationsAfterCurrentStep(){return Math.max(0,this.MAX_ITERATIONS-this.iterations-1)}calculateWidthDeficit(){let e=0,t=0;for(let n of this.traceOrder){let o=this.traces[n];if(!this.findConnectionForTrace(o))continue;let i=this.resolveNominalTraceWidth(o);for(let r=0;r<o.route.length-1;r++){let s=o.route[r],a=o.route[r+1];if(!hs(s)||!hs(a)||s.layer!==a.layer)continue;let c=os(s,a),l=s.width;t+=c*i,e+=c*Math.max(0,i-l)}}return{deficit:e,nominalArea:t}}getInitialTracePriority(e){let t=this.resolveNominalTraceWidth(e),n=0;for(let o=0;o<e.route.length-1;o++){let i=e.route[o],r=e.route[o+1];hs(i)&&hs(r)&&i.layer===r.layer&&(n+=os(i,r)*Math.max(0,t-Math.min(i.width,r.width)))}return t*n}evaluateNextSegment(){let e=this.traces[this.traceIndex];if(!e)return void(this.phase="scan-trace");let t=this.findNextUnderWidthSegment(e,this.routeSegmentIndex,this.nominalTraceWidth);if(t===-1)return void(this.phase="scan-trace");this.routeSegmentIndex=t;let n=e.route[t],o=e.route[t+1];if(!hs(n)||!hs(o))return void this.routeSegmentIndex++;let i=this.getTraceConnectionNames(e),r=Math.min(n.width,o.width),s=this.findMaximumSafeInPlaceWidth(e,t,i);if(s>r+ti){if(n.width=Math.max(n.width,s),o.width=Math.max(o.width,s),s>=this.nominalTraceWidth-ti)return this.expandedSegmentCount++,void this.routeSegmentIndex++;this.intermediateExpandedSegmentCount++}this.startTraceInflation(e,t)||this.prepareLayerRouteAttempt(e,t)||this.prepareRegularGridCandidates(e,t)}prepareRegularGridCandidates(e,t){if(this.currentIntervals=this.getExponentialIntervalCandidates(e,t,this.nominalTraceWidth),this.intervalCursor=0,this.candidateWidths=this.getCandidateWidths(this.nominalTraceWidth),this.widthCursor=0,this.gridResolutions=[],this.resolutionCursor=0,this.offsetCursor=0,this.currentIntervals.length===0)return this.unresolvedSegmentCount++,void this.routeSegmentIndex++;this.phase="try-grid-candidate"}prepareLayerRouteAttempt(e,t){if(this.nominalTraceWidth<0.499999)return!1;let n=this.options.allowNewVias!==!1&&this.inputProblem.layerCount>=2,o=n?2:this.maxPassCount,i=this.layerAttemptCountByTrace.get(this.traceIndex)??0,r=this.layerRerouteCountByTrace.get(this.traceIndex)??0;if(r>=o||i>=o||i>this.passIndex||i>0&&r===0)return!1;let s=e.route[t],a=e.route[t+1];if(!hs(s)||!hs(a)||Math.min(s.width,a.width)>=0.5*this.nominalTraceWidth-ti)return!1;let c=this.getExponentialIntervalCandidates(e,t,this.nominalTraceWidth).filter((f)=>this.intervalSupportsLayerRouting(e,f)).sort((f,y)=>y.endIndex-f.endIndex||f.startIndex-y.startIndex||this.getRouteIntervalLength(e,y.startIndex,y.endIndex)-this.getRouteIntervalLength(e,f.startIndex,f.endIndex))[0];if(!c)return!1;let l=this.getRouteQuality(e.route.slice(c.startIndex,c.endIndex+1));if(l.deficitArea<this.nominalTraceWidth)return!1;if(i>0&&l.deficitArea/Math.max(l.length,ti)<0.25)return!1;let d=e.route[c.startIndex],u=e.route[c.endIndex],h=this.getTraceConnectionNames(e),A=n?this.getEndpointLayers(d,h):[d.layer],m=n?this.getEndpointLayers(u,h):[u.layer],p=Math.min(this.nominalTraceWidth,Math.max(d.width,this.findMaximumSafeInPlaceWidth(e,c.startIndex,h))),g=Math.min(this.nominalTraceWidth,Math.max(u.width,this.findMaximumSafeInPlaceWidth(e,c.endIndex-1,h))),_=this.getSoftTraceIndices(this.nominalTraceWidth);return this.layerAttemptCountByTrace.set(this.traceIndex,i+1),this.layerAttempt={interval:c,minViaCount:n?1:0,maxViaCount:n?2:0,candidateWidths:[this.nominalTraceWidth],widthCursor:0,gridResolutions:[Ih(this.nominalTraceWidth/4,0.2,0.3)],resolutionCursor:0,offsetCursor:0,startLayers:A,endLayers:m,startNeckWidth:p,endNeckWidth:g,softTraceIndices:_},this.phase="try-layer-candidate",!0}intervalSupportsLayerRouting(e,t){if(t.startIndex>=t.endIndex)return!1;for(let i=t.startIndex;i<=t.endIndex;i++){let r=e.route[i];if(!hs(r))return!1}let n=e.route[t.startIndex],o=e.route[t.endIndex];return n.layer===o.layer}getEndpointLayers(e,t){return[...new Set([e.layer,...this.obstacleIndex.getConnectedLayersAtPoint({x:e.x,y:e.y},t)])].filter((n)=>this.obstacleIndex.boardLayers.includes(n))}getSoftTraceIndices(e){let t=[];for(let n=0;n<this.traces.length;n++){if(n===this.traceIndex)continue;let o=this.traces[n],i=this.findConnectionForTrace(o);if(!i)continue;Math.max(i.nominalTraceWidth??i.width??this.inputProblem.nominalTraceWidth??this.inputProblem.minTraceWidth,this.inputProblem.minTraceWidth)<e-ti&&t.push(n)}return t}startNextLayerCandidate(){let e=this.layerAttempt,t=this.traces[this.traceIndex];if(!e||!t)return this.layerAttempt=null,void(this.phase="evaluate-segment");if(e.widthCursor>=e.candidateWidths.length){let m=this.routeSegmentIndex;return this.layerAttempt=null,void this.prepareRegularGridCandidates(t,m)}let n=e.candidateWidths[e.widthCursor];if(e.gridResolutions.length===0&&(e.gridResolutions=this.getGridResolutions(n)),e.resolutionCursor>=e.gridResolutions.length)return e.widthCursor++,e.gridResolutions=[],e.resolutionCursor=0,void(e.offsetCursor=0);if(e.offsetCursor>=R6t.length)return e.resolutionCursor++,void(e.offsetCursor=0);let o=t.route[e.interval.startIndex],i=t.route[e.interval.endIndex];if(!hs(o)||!hs(i))return this.layerAttempt=null,void this.prepareRegularGridCandidates(t,this.routeSegmentIndex);let r=e.gridResolutions[e.resolutionCursor],s=R6t[e.offsetCursor],a=s.offset,c=Math.min(e.startNeckWidth,e.endNeckWidth),l=this.inputProblem.min_via_hole_diameter??this.inputProblem.minViaHoleDiameter??0.3,d=Math.max(l,this.inputProblem.min_via_pad_diameter??this.inputProblem.minViaPadDiameter??this.inputProblem.minViaDiameter??0.6),u=Math.max(this.inputProblem.minTraceWidth,Math.min(s.strictNecking?e.startNeckWidth:c,n)),h=Math.max(this.inputProblem.minTraceWidth,Math.min(s.strictNecking?e.endNeckWidth:c,n)),A=Ih(3*this.nominalTraceWidth,1.5,3);e.maxViaCount>0?this.attemptedLayerGridCount++:this.attemptedGridCount++,this.activeSubSolver=new v6t({start:o,end:i,originalStartLayer:o.layer,originalEndLayer:i.layer,startLayers:e.startLayers,endLayers:e.endLayers,layers:this.obstacleIndex.boardLayers,traceWidth:n,startNeckWidth:u,endNeckWidth:h,maxStartNeckLength:A,maxEndNeckLength:A,neckPenaltyExponent:s.strictNecking?2:1,viaDiameter:d,viaHoleDiameter:l,minViaCount:e.minViaCount,maxViaCount:e.maxViaCount,viaCost:Math.max(1,2*this.nominalTraceWidth),gridSize:r,gridOffset:{x:a.x*r,y:a.y*r},connectionNames:this.getTraceConnectionNames(t),obstacleIndex:this.obstacleIndex,ignoreTraceIndex:this.traceIndex,ignoreRouteRange:{start:Math.max(0,e.interval.startIndex-1),end:Math.min(t.route.length-1,e.interval.endIndex+1)},softTraceIndices:e.softTraceIndices,fixedVias:this.getFixedViasOutsideInterval(t,e.interval),bounds:this.inputProblem.bounds,obstacleClearance:this.getDesiredPadClearance(n),searchPadding:Math.min(5,Math.max(2.5,os(o,i)/2,4*n))})}startNextGridCandidate(){let e=this.traces[this.traceIndex];if(!e)return void(this.phase="scan-trace");if(this.widthCursor>=this.candidateWidths.length)return this.unresolvedSegmentCount++,this.routeSegmentIndex++,void(this.phase="evaluate-segment");if(this.intervalCursor>=this.currentIntervals.length)return this.widthCursor++,this.intervalCursor=0,this.gridResolutions=[],this.resolutionCursor=0,void(this.offsetCursor=0);let t=this.candidateWidths[this.widthCursor],n=e.route[this.routeSegmentIndex],o=e.route[this.routeSegmentIndex+1];if(hs(n)&&hs(o)&&t<=Math.min(n.width,o.width)+ti)return void(this.widthCursor=this.candidateWidths.length);if(this.gridResolutions.length===0&&(this.gridResolutions=this.getGridResolutions(t)),this.resolutionCursor>=this.gridResolutions.length)return this.intervalCursor++,this.resolutionCursor=0,void(this.offsetCursor=0);if(this.offsetCursor>=N6t.length)return this.resolutionCursor++,void(this.offsetCursor=0);let i=this.currentIntervals[this.intervalCursor],r=e.route[i.startIndex],s=e.route[i.endIndex];if(!hs(r)||!hs(s)||r.layer!==s.layer)return this.intervalCursor++,this.resolutionCursor=0,void(this.offsetCursor=0);if(this.endpointCollides(e,i,r,t)||this.endpointCollides(e,i,s,t))return this.intervalCursor++,this.resolutionCursor=0,void(this.offsetCursor=0);let a=this.gridResolutions[this.resolutionCursor],c=N6t[this.offsetCursor],l={x:c.x*a,y:c.y*a};this.attemptedGridCount++,this.activeSubSolver=new Qge({start:r,end:s,layer:r.layer,traceWidth:t,gridSize:a,gridOffset:l,connectionNames:this.getTraceConnectionNames(e),obstacleIndex:this.obstacleIndex,ignoreTraceIndex:this.traceIndex,ignoreRouteRange:{start:Math.max(0,i.startIndex-1),end:Math.min(e.route.length-1,i.endIndex+1)},bounds:this.inputProblem.bounds,obstacleClearance:this.getDesiredPadClearance(t),searchPadding:Math.min(5,Math.max(1.5,os(r,s)/2,3*t))})}endpointCollides(e,t,n,o){return this.obstacleIndex.collides({start:n,end:n,layer:n.layer,width:o,connectionNames:this.getTraceConnectionNames(e),ignoreTraceIndex:this.traceIndex,ignoreRouteRange:{start:Math.max(0,t.startIndex-1),end:Math.min(e.route.length-1,t.endIndex+1)},obstacleClearance:this.getDesiredPadClearance(o)})}stepActiveGridSolver(){if(this.activeSubSolver instanceof lRe)return void this.stepActiveTraceClearanceRepairSolver();if(this.activeSubSolver instanceof cRe)return void this.stepActiveCleanupSolver();if(this.activeSubSolver instanceof HV)return void this.stepActiveInflationSolver();if(this.activeSubSolver instanceof v6t)return void this.stepActiveLayerSolver();let e=this.activeSubSolver;if(e.step(),e.solved||e.failed){if(e.solved){let t=e.getOutput();if(t){let n=this.gridRouteReplacementCollides(t)||this.gridRouteBoundaryCollides(t);if(!n&&this.gridRoutePreservesSameNetContacts(t))return this.applyGridRoute(this.maximizeGridRouteWidth(t)),void(this.activeSubSolver=null);n||this.sameNetContactRejectionCount++}}this.retainFailedSubSolver(e),this.activeSubSolver=null,this.offsetCursor++}}stepActiveCleanupSolver(){let e=this.activeSubSolver;if(e.step(),e.solved||e.failed){if(e.solved)return this.adoptCleanupOutput(e),this.activeSubSolver=null,void this.startTraceClearanceRepair();this.retainFailedSubSolver(e),this.activeSubSolver=null,this.startTraceClearanceRepair()}}adoptCleanupOutput(e){let t=this.acceptConnectivityCheckpoint(e.getOutput(),"cleanup");this.cleanupCompleted=!e.budgetLimited;let n=e.stats;this.connectivityValidationError??=n.connectivityValidationError??null,this.connectivityValidationCount+=Number(n.connectivityValidationCount??0);let o=Number(n.connectivityRollbackCount??0);o>0&&(this.connectivityRollbackCount+=o,this.connectivityRollbackPhases.includes("cleanup")||this.connectivityRollbackPhases.push("cleanup"),this.connectivityRegressionEndpointIds=[...new Set([...this.connectivityRegressionEndpointIds,...n.connectivityRegressionEndpointIds??[]])]);let i=t&&o===0;this.cleanupBestEffortAccepted=e.budgetLimited&&i,this.cleanupMutatedTraceIndices=i?[...n.mutatedTraceIndices??[]]:[],this.removedViaPairCount=i?Number(n.viaPairCountRemoved??0):0,this.removedViaCount=i?Number(n.viaCountRemoved??0):0,this.simplifiedPathCount=i?Number(n.simplifiedPathCount??0):0,this.normalizedSegmentCount=i?Number(n.normalizedSegmentCount??0):0,this.cleanupClearanceShoveCount=i?Number(n.committedClearanceShoveCount??0):0,this.relocatedViaCount=i?Number(n.relocatedViaCount??0):0,this.unresolvedViaCount=Number(n.unresolvedViaCount??0),this.padClearanceRerouteCount=i?Number(n.padClearanceRerouteCount??0):0,this.unresolvedPadClearanceCount=Number(n.unresolvedPadClearanceCount??0),this.initialPadClearanceViolationCount=Number(n.initialPadClearanceViolationCount??0),this.remainingPadClearanceViolationCount=Number(n.remainingPadClearanceViolationCount??0),this.initialPadClearanceViolationCountByClearance={...n.initialPadClearanceViolationCountByClearance??{}},this.remainingPadClearanceViolationCountByClearance={...n.remainingPadClearanceViolationCountByClearance??{}},this.rebuildObstacleIndex()}startTraceClearanceRepair(){this.phase="repair-trace-clearance";let e=[...new Set([...this.getOwnedTraceIndices(),...this.expansionPushedTraceIndices,...this.cleanupMutatedTraceIndices])],t=new lRe({simpleRouteJson:this.inputProblem,traces:this.traces,traceIndices:e});t.MAX_ITERATIONS=Math.min(t.MAX_ITERATIONS,this.getRemainingParentIterationsAfterCurrentStep()),this.clearanceRepairIterationBudget=t.MAX_ITERATIONS,this.activeSubSolver=t}stepActiveTraceClearanceRepairSolver(){let e=this.activeSubSolver;if(e.step(),e.solved||e.failed){if(e.solved)return this.adoptClearanceRepairOutput(e),this.activeSubSolver=null,void(this.phase="complete");this.retainFailedSubSolver(e),this.activeSubSolver=null,this.phase="complete"}}adoptClearanceRepairOutput(e){let t=this.acceptConnectivityCheckpoint(e.getOutput(),"clearance-repair");this.clearanceRepairCompleted=!e.budgetLimited;let n=e.stats;this.connectivityValidationError??=n.connectivityValidationError??null,this.connectivityValidationCount+=Number(n.connectivityValidationCount??0);let o=Number(n.connectivityRollbackCount??0);o>0&&(this.connectivityRollbackCount+=o,this.connectivityRollbackPhases.includes("clearance-repair")||this.connectivityRollbackPhases.push("clearance-repair"),this.connectivityRegressionEndpointIds=[...new Set([...this.connectivityRegressionEndpointIds,...n.connectivityRegressionEndpointIds??[]])]);let i=t&&o===0;this.clearanceRepairBestEffortAccepted=e.budgetLimited&&i,this.repairedTraceClearanceSegmentCount=i?Number(n.repairedSegmentCount??0):0,this.repairedPadNeckSegmentCount=i?Number(n.repairedPadNeckSegmentCount??0):0,this.unresolvedTraceClearanceSegmentCount=Number(n.unresolvedSegmentCount??0),this.rebuildObstacleIndex()}stepActiveLayerSolver(){let e=this.activeSubSolver;if(e.step(),e.solved||e.failed){if(e.solved){let t=e.getOutput();if(t){let n=!this.layerRouteReplacementCollides(t,!0)&&this.layerRouteImprovesInterval(t),o=n&&this.layerRoutePreservesSameNetContacts(t);if(o){if(this.activeSubSolver=null,this.pendingLayerOutput=t,this.pendingLayerPushCount=0,!this.layerRouteReplacementCollides(t,!1))return void this.applyLayerRoute(t);if(this.startPendingLayerInflation())return;this.pendingLayerOutput=null}n&&!o&&this.sameNetContactRejectionCount++}}this.retainFailedSubSolver(e),this.activeSubSolver=null,this.layerAttempt&&this.layerAttempt.offsetCursor++,this.phase="try-layer-candidate"}}layerRouteReplacementCollides(e,t){let n=this.traces[this.traceIndex],o=this.layerAttempt;if(!n||!o)return!0;let i=this.getTraceConnectionNames(n),r=t?o.softTraceIndices:void 0,s={start:Math.max(0,o.interval.startIndex-1),end:Math.min(n.route.length-1,o.interval.endIndex+1)},a=this.getFixedViasOutsideInterval(n,o.interval);for(let c=0;c<e.route.length;c++){let l=e.route[c];if(l?.route_type==="via"){if(this.obstacleIndex.collidesVia({point:l,layers:this.obstacleIndex.boardLayers,padDiameter:l.via_diameter??0.6,holeDiameter:l.via_hole_diameter??this.obstacleIndex.defaultViaHoleDiameter,connectionNames:i,ignoreTraceIndex:this.traceIndex,ignoreTraceIndices:r,otherNewViaPoints:e.route.slice(0,c).filter((u)=>u.route_type==="via").map((u)=>({x:u.x,y:u.y})),fixedVias:a,ignoreRouteRange:s,obstacleClearance:this.getDesiredPadClearance(e.traceWidth),blockSameNetObstacles:!0,sameNetObstacleClearance:0}))return!0;continue}let d=e.route[c+1];if(l?.route_type==="wire"&&d?.route_type==="wire"&&l.layer===d.layer&&this.obstacleIndex.collides({start:l,end:d,layer:l.layer,width:Math.max(l.width,d.width),connectionNames:i,ignoreTraceIndex:this.traceIndex,ignoreTraceIndices:r,ignoreRouteRange:s,obstacleClearance:this.getDesiredPadClearance(e.traceWidth)}))return!0}return this.layerRouteBoundaryCollides(e,t)}getFixedViasOutsideInterval(e,t){return e.route.flatMap((n,o)=>n.route_type!=="via"||o>=t.startIndex&&o<=t.endIndex?[]:[{point:{x:n.x,y:n.y},padDiameter:n.via_diameter??0.6,holeDiameter:n.via_hole_diameter??this.obstacleIndex.defaultViaHoleDiameter}])}layerRouteBoundaryCollides(e,t){let n=this.traces[this.traceIndex],o=this.layerAttempt,i=e.route.find((a)=>a.route_type==="wire"),r;for(let a=e.route.length-1;a>=0;a--){let c=e.route[a];if(c?.route_type==="wire"){r=c;break}}if(!i||!r)return!0;let s=[{outside:n.route[o.interval.startIndex-1],inside:i},{outside:n.route[o.interval.endIndex+1],inside:r}];for(let a of s)if(hs(a.outside)&&a.outside.layer===a.inside.layer&&this.obstacleIndex.collides({start:a.outside,end:a.inside,layer:a.inside.layer,width:Math.max(a.outside.width,a.inside.width),connectionNames:this.getTraceConnectionNames(n),ignoreTraceIndex:this.traceIndex,ignoreTraceIndices:t?o.softTraceIndices:void 0,ignoreRouteRange:{start:Math.max(0,o.interval.startIndex-1),end:Math.min(n.route.length-1,o.interval.endIndex+1)},obstacleClearance:this.getDesiredPadClearance(e.traceWidth)}))return!0;return!1}layerRouteImprovesInterval(e){let t=this.traces[this.traceIndex],n=this.layerAttempt.interval,o=this.getRouteQuality(t.route.slice(n.startIndex,n.endIndex+1)),i=this.getRouteQuality(e.route);return i.length<=o.length+10+ti&&i.deficitArea<=o.deficitArea-Math.max(0.05,0.1*o.deficitArea)}getRouteQuality(e){let t=0,n=0;for(let o=0;o<e.length-1;o++){let i=e[o],r=e[o+1];if(!hs(i)||!hs(r)||i.layer!==r.layer)continue;let s=os(i,r),a=Math.min(i.width,r.width);t+=s,n+=s*Math.max(0,this.nominalTraceWidth-a)}return{length:t,deficitArea:n}}getLayerInflationCorridor(e){let t=[];for(let n=0;n<e.route.length;n++){let o=e.route[n];if(o?.route_type==="via"){for(let r of this.obstacleIndex.boardLayers)t.push({start:o,end:o,layer:r,width:o.via_diameter??0.6});continue}let i=e.route[n+1];o?.route_type==="wire"&&i?.route_type==="wire"&&o.layer===i.layer&&t.push({start:o,end:i,layer:o.layer,width:Math.max(o.width,i.width)})}return t}startPendingLayerInflation(){let e=this.pendingLayerOutput;if(!e||this.pendingLayerPushCount>=2)return!1;let t=this.getLayerInflationCorridor(e);return t.length!==0&&(this.pendingLayerPushCount++,this.attemptedInflationCount++,this.activeSubSolver=new HV({simpleRouteJson:this.inputProblem,traces:this.traces,powerTraceIndex:this.traceIndex,nominalPowerWidth:e.traceWidth,mutableTraceIndices:this.mutableBlockerTraceIndices,corridor:t,maxRerouteLength:10},this.connectionNameResolver),this.phase="try-trace-inflation",!0)}applyLayerRoute(e){let t=this.traces[this.traceIndex],n=this.layerAttempt.interval,o=this.createLayerRouteReplacement(e);t.route.splice(n.startIndex,n.endIndex-n.startIndex+1,...o),e.viaCount>0&&this.layerReroutedTraceCount++,this.layerRerouteCountByTrace.set(this.traceIndex,(this.layerRerouteCountByTrace.get(this.traceIndex)??0)+1),this.reroutedSegmentCount++,this.insertedViaCount+=e.viaCount,e.viaCount>0&&(this.neckedLayerSegmentCount+=o.filter((i)=>i.route_type==="wire"&&i.width<this.nominalTraceWidth-ti).length),this.routeSegmentIndex=n.startIndex,this.currentIntervals=[],this.layerAttempt=null,this.pendingLayerOutput=null,this.pendingLayerPushCount=0,this.phase="evaluate-segment"}createLayerRouteReplacement(e){let t=this.traces[this.traceIndex],n=this.layerAttempt.interval,o=t.route[n.startIndex],i=t.route[n.endIndex],r=structuredClone(e.route),s=r.findIndex((c)=>c.route_type==="wire"),a=-1;for(let c=r.length-1;c>=0;c--)if(r[c]?.route_type==="wire"){a=c;break}return s>=0&&(r[s]={...o,...r[s]}),a>=0&&(r[a]={...i,...r[a]}),r}layerRoutePreservesSameNetContacts(e){let t=this.traces[this.traceIndex],n=this.layerAttempt.interval;return this.routeReplacementPreservesSameNetContacts(t,n,this.createLayerRouteReplacement(e))}startTraceInflation(e,t){let n=e.route[t],o=e.route[t+1];if(!hs(n)||!hs(o))return!1;let i=Math.min(n.width,o.width),r=this.findBestPushableInflationWidth(e,t,i);if(!r)return!1;let s=this.getLocalInflationCorridor(e,t,r);if(s.length===0)return!1;let a=[this.traceIndex,n.x,n.y,o.x,o.y].join(":"),c=this.inflationAttemptsBySegment.get(a)??0;return!(c>=2)&&(this.inflationAttemptsBySegment.set(a,c+1),this.activeInflationKey=a,this.activeInflationWidth=r,this.attemptedInflationCount++,this.activeSubSolver=new HV({simpleRouteJson:this.inputProblem,traces:this.traces,powerTraceIndex:this.traceIndex,nominalPowerWidth:r,mutableTraceIndices:this.mutableBlockerTraceIndices,corridor:s,maxRerouteLength:10},this.connectionNameResolver),this.phase="try-trace-inflation",!0)}hasOnlyPushableTraceBlockers(e,t,n){let o=Math.max(0,t-1),i=Math.min(e.route.length-2,t+1),r=new Set;for(let s=o;s<=i;s++){let a=e.route[s],c=e.route[s+1];if(!hs(a)||!hs(c)||a.layer!==c.layer)continue;let l={start:a,end:c,layer:a.layer,width:n,connectionNames:this.getTraceConnectionNames(e),ignoreTraceIndex:this.traceIndex,ignoreRouteRange:{start:o,end:i+1},obstacleClearance:this.getDesiredPadClearance(n)},d=this.obstacleIndex.findCollisions(l);if(d.length===0&&this.obstacleIndex.collides(l))return!1;for(let u of d){if(u.kind!=="trace"||u.traceIndex===void 0)return!1;let h=this.traces[u.traceIndex];if(!h)return!1;let A=this.findConnectionForTrace(h);if(!A||(A.nominalTraceWidth??A.width??this.inputProblem.nominalTraceWidth??this.inputProblem.minTraceWidth)>=n-ti)return!1;r.add(u.traceIndex)}}return r.size>0&&r.size<=2}findBestPushableInflationWidth(e,t,n){let o=this.nominalTraceWidth>=0.5?0.05:0.0125;for(let i=this.nominalTraceWidth;i>n+ti;i-=o){let r=Number(i.toFixed(6));if(this.hasOnlyPushableTraceBlockers(e,t,r))return r}return null}stepActiveInflationSolver(){let e=this.activeSubSolver;if(e.step(),e.solved||e.failed){if(e.solved){let t=e.getOutput(),n=t&&this.sameNetContactsArePreserved(this.traces[t.pushedTraceIndex].route,t.traces[t.pushedTraceIndex].route,this.getTraceConnectionNames(this.traces[t.pushedTraceIndex]),t.pushedTraceIndex);if(t&&n){if(this.traces=t.traces,this.pushedTraceCount++,this.expansionPushedTraceIndices.add(t.pushedTraceIndex),t.strategy==="elastic"&&this.elasticPushedTraceCount++,this.activeSubSolver=null,this.activeInflationKey=null,this.activeInflationWidth=null,this.rebuildObstacleIndex(),this.pendingLayerOutput){if(!this.layerRouteReplacementCollides(this.pendingLayerOutput,!1)&&this.layerRoutePreservesSameNetContacts(this.pendingLayerOutput))return void this.applyLayerRoute(this.pendingLayerOutput);if(this.startPendingLayerInflation())return;return this.pendingLayerOutput=null,this.pendingLayerPushCount=0,this.layerAttempt&&this.layerAttempt.offsetCursor++,void(this.phase="try-layer-candidate")}return void(this.phase="evaluate-segment")}t&&!n&&this.sameNetContactRejectionCount++}if(this.retainFailedSubSolver(e),this.activeInflationKey&&this.inflationAttemptsBySegment.set(this.activeInflationKey,2),this.activeInflationKey=null,this.activeInflationWidth=null,this.activeSubSolver=null,this.pendingLayerOutput)return this.pendingLayerOutput=null,this.pendingLayerPushCount=0,this.layerAttempt&&this.layerAttempt.offsetCursor++,void(this.phase="try-layer-candidate");this.phase="evaluate-segment"}}getLocalInflationCorridor(e,t,n){let o=e.route[t],i=e.route[t+1];if(!hs(o)||!hs(i)||o.layer!==i.layer)return[];let r=Ih(4*n,2,4),s=r/2,a=t,c=0;for(;a>0;){let A=e.route[a-1],m=e.route[a];if(!hs(A)||!hs(m)||A.layer!==m.layer)break;let p=os(A,m);if(c+p>s+ti)break;c+=p,a--}let l=t+1,d=0;for(;l<e.route.length-1;){let A=e.route[l],m=e.route[l+1];if(!hs(A)||!hs(m)||A.layer!==m.layer)break;let p=os(A,m);if(d+p>s+ti)break;d+=p,l++}let u=r-c-d;for(;u>ti&&a>0;){let A=e.route[a-1],m=e.route[a];if(!hs(A)||!hs(m)||A.layer!==m.layer)break;let p=os(A,m);if(p>u+ti)break;u-=p,a--}for(;u>ti&&l<e.route.length-1;){let A=e.route[l],m=e.route[l+1];if(!hs(A)||!hs(m)||A.layer!==m.layer)break;let p=os(A,m);if(p>u+ti)break;u-=p,l++}let h=[];for(let A=a;A<l;A++){let m=e.route[A],p=e.route[A+1];hs(m)&&hs(p)&&m.layer===p.layer&&h.push({start:m,end:p,layer:m.layer,width:n})}return h}applyGridRoute(e){let t=this.traces[this.traceIndex],n=this.currentIntervals[this.intervalCursor],o=this.createGridRouteReplacement(e);t.route.splice(n.startIndex,n.endIndex-n.startIndex+1,...o),this.reroutedSegmentCount++,this.routeSegmentIndex=n.startIndex+o.length-1,this.currentIntervals=[],this.phase="evaluate-segment"}createGridRouteReplacement(e){let t=this.traces[this.traceIndex],n=this.currentIntervals[this.intervalCursor],o=t.route[n.startIndex],i=t.route[n.endIndex],r=e.points.map((s)=>({route_type:"wire",x:s.x,y:s.y,width:e.traceWidth,layer:o.layer}));return r[0].width=Math.max(o.width,e.traceWidth),r[r.length-1].width=Math.max(i.width,e.traceWidth),r}gridRoutePreservesSameNetContacts(e){let t=this.traces[this.traceIndex],n=this.currentIntervals[this.intervalCursor];return this.routeReplacementPreservesSameNetContacts(t,n,this.createGridRouteReplacement(e))}routeReplacementPreservesSameNetContacts(e,t,n){let o=this.getTraceConnectionNames(e),i=this.getSameNetContactIds(e.route.slice(t.startIndex,t.endIndex+1),o,this.traceIndex),r=new Set([...this.getSameNetContactIds(e.route.slice(0,t.startIndex+1),o,this.traceIndex),...this.getSameNetContactIds(e.route.slice(t.endIndex),o,this.traceIndex)]),s=new Set([...i].filter((c)=>!r.has(c)));if(s.size===0)return!0;let a=this.getSameNetContactIds(n,o,this.traceIndex);return[...s].every((c)=>a.has(c))}sameNetContactsArePreserved(e,t,n,o){let i=this.getSameNetContactIds(e,n,o);if(i.size===0)return!0;let r=this.getSameNetContactIds(t,n,o);return[...i].every((s)=>r.has(s))}getSameNetContactIds(e,t,n){let o=new Set;for(let i=0;i<e.length;i++){let r=e[i];if(r?.route_type==="via"){for(let a of this.getViaLayers(r))for(let c of this.obstacleIndex.getSameNetCopperContactIds({start:r,end:r,layer:a,width:r.via_diameter??0.6,connectionNames:t,ignoreTraceIndex:n}))o.add(c);continue}let s=e[i+1];if(r?.route_type==="wire"&&s?.route_type==="wire"&&r.layer===s.layer)for(let a of this.obstacleIndex.getSameNetCopperContactIds({start:r,end:s,layer:r.layer,width:Math.min(r.width,s.width),connectionNames:t,ignoreTraceIndex:n}))o.add(a)}return o}getViaLayers(e){let t=this.obstacleIndex.boardLayers.indexOf(e.from_layer),n=this.obstacleIndex.boardLayers.indexOf(e.to_layer);return t<0||n<0?this.obstacleIndex.boardLayers:this.obstacleIndex.boardLayers.slice(Math.min(t,n),Math.max(t,n)+1)}gridRouteReplacementCollides(e){let t=this.traces[this.traceIndex],n=this.currentIntervals[this.intervalCursor],o=t.route[n.startIndex],i=t.route[n.endIndex],r=this.getTraceConnectionNames(t);for(let s=0;s<e.points.length-1;s++){let a=Math.max(e.traceWidth,s===0?o.width:0,s===e.points.length-2?i.width:0);if(this.obstacleIndex.collides({start:e.points[s],end:e.points[s+1],layer:o.layer,width:a,connectionNames:r,ignoreTraceIndex:this.traceIndex,ignoreRouteRange:{start:Math.max(0,n.startIndex-1),end:Math.min(t.route.length-1,n.endIndex+1)},obstacleClearance:this.getDesiredPadClearance(a)}))return!0}return!1}gridRouteBoundaryCollides(e){let t=this.traces[this.traceIndex],n=this.currentIntervals[this.intervalCursor],o=this.getTraceConnectionNames(t),i=[{startIndex:n.startIndex-1,endIndex:n.startIndex},{startIndex:n.endIndex,endIndex:n.endIndex+1}];for(let r of i){let s=t.route[r.startIndex],a=t.route[r.endIndex];if(hs(s)&&hs(a)&&s.layer===a.layer&&this.obstacleIndex.collides({start:s,end:a,layer:s.layer,width:Math.max(s.width,a.width,e.traceWidth),connectionNames:o,ignoreTraceIndex:this.traceIndex,ignoreRouteRange:{start:r.startIndex,end:r.endIndex},obstacleClearance:this.getDesiredPadClearance(Math.max(s.width,a.width,e.traceWidth))}))return!0}return!1}canExpandSegmentAndEndpoints(e,t,n,o=this.nominalTraceWidth){let i=Math.max(0,t-1),r=Math.min(e.route.length-2,t+1);for(let s=i;s<=r;s++){let a=e.route[s],c=e.route[s+1];if(!hs(a)||!hs(c)||a.layer!==c.layer)continue;let l=s<=t+1&&s+1>=t,d=Math.max(a.width,c.width,l?o:0);if(this.obstacleIndex.collides({start:a,end:c,layer:a.layer,width:d,connectionNames:n,ignoreTraceIndex:this.traceIndex,ignoreRouteRange:{start:i,end:r+1},obstacleClearance:this.getDesiredPadClearance(d)}))return!1}return!0}findMaximumSafeInPlaceWidth(e,t,n){let o=e.route[t],i=e.route[t+1];if(!hs(o)||!hs(i))return 0;let r=Math.min(o.width,i.width);if(this.probeInPlaceWidth(e,t,n,this.nominalTraceWidth))return this.nominalTraceWidth;let s=r,a=this.nominalTraceWidth;for(let d=0;d<7;d++){let u=(s+a)/2;if(u<=s+ti)break;this.probeInPlaceWidth(e,t,n,u)?s=u:a=u}let c=this.nominalTraceWidth>=0.5?0.025:0.0125,l=Math.max(r,Math.floor((s+ti)/c)*c);return l>r+ti&&this.probeInPlaceWidth(e,t,n,l)?l:r}probeInPlaceWidth(e,t,n,o){return this.inPlaceWidthProbeCount++,this.canExpandSegmentAndEndpoints(e,t,n,o)}maximizeGridRouteWidth(e){if(e.traceWidth>=this.nominalTraceWidth-ti)return e;let t=e.traceWidth,n=this.nominalTraceWidth;for(let r=0;r<7;r++){let s=(t+n)/2,a={...e,traceWidth:s};this.gridRouteReplacementCollides(a)||this.gridRouteBoundaryCollides(a)?n=s:t=s}let o=this.nominalTraceWidth>=0.5?0.025:0.0125,i=Math.max(e.traceWidth,Math.floor((t+ti)/o)*o);if(i>e.traceWidth+ti){let r={...e,traceWidth:i};if(!this.gridRouteReplacementCollides(r)&&!this.gridRouteBoundaryCollides(r))return this.pathWidthUpgradeCount++,r}return e}getExponentialIntervalCandidates(e,t,n){let o=this.getExponentialIndices(e,t,-1,n,5),i=this.getExponentialIndices(e,t,1,n,10).filter((s)=>s>t),r=[];for(let s of o)for(let a of i){let c=this.getRouteIntervalLength(e,s,a);c>10.000001||r.push({startIndex:s,endIndex:a,routeLength:c})}return r.sort((s,a)=>s.routeLength-a.routeLength).filter((s,a,c)=>c.findIndex((l)=>l.startIndex===s.startIndex&&l.endIndex===s.endIndex)===a).slice(0,10).map(({startIndex:s,endIndex:a})=>({startIndex:s,endIndex:a}))}getExponentialIndices(e,t,n,o,i){let r=[t],s=0,a=Math.max(o,0.3),c=t,l=t;for(;;){let d=c+n;if(d<0||d>=e.route.length)break;let u=e.route[c],h=e.route[d];if(!hs(u)||!hs(h)||u.layer!==h.layer)break;let A=os(u,h);if(s+A>i+ti)break;s+=A,c=d,l=d,s+ti>=a&&(r.push(d),a*=2)}return r.includes(l)||r.push(l),r}getRouteIntervalLength(e,t,n){let o=0;for(let i=t;i<n;i++){let r=e.route[i],s=e.route[i+1];if(!hs(r)||!hs(s)||r.layer!==s.layer)return Number.POSITIVE_INFINITY;o+=os(r,s)}return o}getCandidateWidths(e){let t=this.inputProblem.minTraceWidth;return Q6t([e,0.875*e,0.75*e,0.625*e,0.5*e,0.375*e,0.25*e,t]).filter((n)=>n>=t-ti)}getGridResolutions(e){return Q6t([Math.max(0.1,Math.min(0.5,e/2)),Math.max(0.1,Math.min(0.25,e/3))])}resolveNominalTraceWidth(e){let t=this.findConnectionForTrace(e);return Math.max(t?.nominalTraceWidth??t?.width??this.inputProblem.nominalTraceWidth??this.inputProblem.minTraceWidth,this.inputProblem.minTraceWidth)}getDesiredPadClearance(e=this.nominalTraceWidth){let t=Math.max(this.inputProblem.defaultObstacleMargin??0,this.inputProblem.minTraceToPadEdgeClearance??0,0.1);return e<0.499999||this.phase!=="cleanup"?t:Math.max(t,this.options.powerTraceToPadClearance??e/2)}findConnectionForTrace(e){let t=this.connectionByTraceId.get(e.pcb_trace_id);if(t!==void 0)return t??void 0;let n=this.getTraceConnectionNames(e),o=this.inputProblem.connections.find((i)=>this.connectionMatchesTrace(i,n))??null;return this.connectionByTraceId.set(e.pcb_trace_id,o),o??void 0}getOwnedTraceIndices(){return[...this.selectedOwnedTraceIndices]}connectionMatchesTrace(e,t){return[e.name,e.source_trace_id,e.rootConnectionName,e.netConnectionName,...e.mergedConnectionNames??[]].filter((n)=>Boolean(n)).some((n)=>t.includes(n))}getTraceConnectionNames(e){return[e.connection_name,e.source_trace_id,e.rootConnectionName,...e.mergedConnectionNames??[]].filter((t)=>Boolean(t))}traceMeetsNominalWidth(e,t){return e.route.every((n)=>n.route_type!=="wire"||n.width>=t-ti)}findNextUnderWidthSegment(e,t,n){for(let o=t;o<e.route.length-1;o++){let i=e.route[o],r=e.route[o+1];if(hs(i)&&hs(r)&&i.layer===r.layer&&(i.width<n-ti||r.width<n-ti))return o}return-1}getMutatedImmutableTraceIds(e){return this.immutableTraceIndices.flatMap((t)=>{let n=e[t];return JSON.stringify(n)===this.initialImmutableTraceSignatures.get(t)?[]:[n?.pcb_trace_id??this.traces[t]?.pcb_trace_id??String(t)]})}getImmutableViaViolationSignatures(e){let t=new Set;if(this.immutableTraceIndices.length===0)return t;let n=new F6(this.inputProblem,e),o=new zI(this.inputProblem,e,void 0,[],n);for(let i of this.immutableTraceIndices){let r=e[i];if(!r)continue;let s=[r.pcb_trace_id,r.connection_name,r.source_trace_id,r.rootConnectionName,...r.mergedConnectionNames??[],...r.connectsTo??[]].filter((a)=>Boolean(a));for(let a=0;a<r.route.length;a++){let c=r.route[a];if(c?.route_type!=="via")continue;let l=`${r.pcb_trace_id}:${a}`,d=o.getViaViolationSignatures({point:c,layers:o.boardLayers,padDiameter:c.via_diameter??this.inputProblem.min_via_pad_diameter??this.inputProblem.minViaPadDiameter??this.inputProblem.minViaDiameter??0.6,holeDiameter:c.via_hole_diameter??o.defaultViaHoleDiameter,connectionNames:s,ignoreTraceIndex:i,ignoreRouteRange:{start:a,end:a},blockSameNetObstacles:!0,sameNetObstacleClearance:0});for(let u of d)t.add(`${l}|${u}`)}}return t}countViolatingImmutableVias(e){return new Set([...e].map((t)=>t.split("|")[0])).size}acceptConnectivityCheckpoint(e,t){this.connectivityValidationCount++;let n=!1,o=!1;try{let i=this.connectivityInvariant.validate(e),r=this.getMutatedImmutableTraceIds(e),s=this.getImmutableViaViolationSignatures(e),a=[...s].filter((l)=>!this.lastSafeImmutableViaViolationSignatures.has(l)),c=a.length>0;if(n=!i.safe,o=r.length>0||c,this.connectivityValidationError??=i.validationError??null,!n&&!o)return this.traces=structuredClone(e),this.lastConnectivitySafeTraces=structuredClone(e),this.remainingImmutableViaViolationCount=this.countViolatingImmutableVias(s),this.remainingImmutableViaViolationPairCount=s.size,this.lastSafeImmutableViaViolationSignatures=s,this.connectivityInvariant=new Fge(this.inputProblem,this.lastConnectivitySafeTraces),!0;this.immutableTraceMutationIds=[...new Set([...this.immutableTraceMutationIds,...r])],c&&(this.immutableViaViolationRollbackCount++,this.attemptedImmutableViaViolationCount=this.countViolatingImmutableVias(s),this.attemptedImmutableViaViolationPairCount=s.size,this.immutableViaViolationRegressionIds=[...new Set([...this.immutableViaViolationRegressionIds,...a])]),this.connectivityRegressionEndpointIds=[...new Set([...this.connectivityRegressionEndpointIds,...i.regressions.flatMap((l)=>l.baselineEndpointLabels)])]}catch(i){n=!0,this.connectivityValidationError=i instanceof Error?i.message:String(i)}return n&&(this.connectivityRollbackCount++,this.connectivityRollbackPhases.includes(t)||this.connectivityRollbackPhases.push(t)),o&&(this.immutableSafetyRollbackCount++,this.immutableSafetyRollbackPhases.includes(t)||this.immutableSafetyRollbackPhases.push(t)),t==="expansion"?n?this.rollbackConnectivityRegressedExpansion():this.rollbackImmutableUnsafeExpansion():this.restoreLastConnectivitySafeTraces(),this.remainingImmutableViaViolationCount=this.countViolatingImmutableVias(this.lastSafeImmutableViaViolationSignatures),this.remainingImmutableViaViolationPairCount=this.lastSafeImmutableViaViolationSignatures.size,!1}rebuildObstacleIndex(){this.obstacleIndex=new zI(this.inputProblem,this.traces,this.traceIndex,[],this.connectionNameResolver)}retainFailedSubSolver(e){this.failedSubSolverCount++,this.failedSubSolvers??=[],this.failedSubSolvers.length<16?this.failedSubSolvers.push(e):this.failedSubSolvers[15]=e}tryFinalAcceptance(){this.finalAcceptanceUsed=!0;let e=!1;this.activeSubSolver instanceof cRe?(this.activeSubSolver.tryFinalAcceptance(),this.adoptCleanupOutput(this.activeSubSolver),e=!0):this.activeSubSolver instanceof lRe&&(this.activeSubSolver.tryFinalAcceptance(),this.adoptClearanceRepairOutput(this.activeSubSolver),e=!0),e||this.phase==="cleanup"||this.phase==="repair-trace-clearance"||this.phase==="complete"||this.discardInFlightExpansion(),this.activeSubSolver=null,this.pendingLayerOutput=null,this.pendingLayerPushCount=0,this.activeInflationKey=null,this.activeInflationWidth=null,this.layerAttempt=null,this.acceptConnectivityCheckpoint(this.traces,"final"),this.traceIndex=this.traces.length,this.phase="complete",this.rebuildObstacleIndex(),this.progress=1,this.solved=!0,this.stats=this.createStats()}createStats(){return{phase:this.phase,pass:this.passIndex+1,completedPassCount:this.completedPassCount,lastNormalizedWidthDeficitGain:this.lastNormalizedWidthDeficitGain,normalizedWidthDeficitGainByPass:[...this.normalizedWidthDeficitGainByPass],plateauReached:this.plateauReached,traceIndex:this.traceIndex,traceCount:this.traces.length,selectedTraceCount:this.traceOrder.length,routeSegmentIndex:this.routeSegmentIndex,nominalTraceWidth:this.nominalTraceWidth,intervalCursor:this.intervalCursor,intervalCount:this.currentIntervals.length,candidateWidth:this.candidateWidths[this.widthCursor],gridSize:this.gridResolutions[this.resolutionCursor],gridOffsetVariant:this.offsetCursor,keptTraceCount:this.keptTraceCount,recreatedTraceCount:this.recreatedTraceCount,expandedSegmentCount:this.expandedSegmentCount,intermediateExpandedSegmentCount:this.intermediateExpandedSegmentCount,pathWidthUpgradeCount:this.pathWidthUpgradeCount,inPlaceWidthProbeCount:this.inPlaceWidthProbeCount,reroutedSegmentCount:this.reroutedSegmentCount,unresolvedSegmentCount:this.unresolvedSegmentCount,attemptedGridCount:this.attemptedGridCount,attemptedLayerGridCount:this.attemptedLayerGridCount,attemptedInflationCount:this.attemptedInflationCount,activeInflationWidth:this.activeInflationWidth,pushedTraceCount:this.pushedTraceCount,elasticPushedTraceCount:this.elasticPushedTraceCount,layerReroutedTraceCount:this.layerReroutedTraceCount,insertedViaCount:this.insertedViaCount,neckedLayerSegmentCount:this.neckedLayerSegmentCount,removedViaPairCount:this.removedViaPairCount,removedViaCount:this.removedViaCount,simplifiedPathCount:this.simplifiedPathCount,normalizedSegmentCount:this.normalizedSegmentCount,cleanupClearanceShoveCount:this.cleanupClearanceShoveCount,relocatedViaCount:this.relocatedViaCount,unresolvedViaCount:this.unresolvedViaCount,initialImmutableViaViolationCount:this.initialImmutableViaViolationCount,remainingImmutableViaViolationCount:this.remainingImmutableViaViolationCount,initialImmutableViaViolationPairCount:this.initialImmutableViaViolationPairCount,remainingImmutableViaViolationPairCount:this.remainingImmutableViaViolationPairCount,skippedImmutableViaRepairCount:this.remainingImmutableViaViolationCount,immutableViaViolationRollbackCount:this.immutableViaViolationRollbackCount,attemptedImmutableViaViolationCount:this.attemptedImmutableViaViolationCount,attemptedImmutableViaViolationPairCount:this.attemptedImmutableViaViolationPairCount,immutableViaViolationRegressionIds:[...this.immutableViaViolationRegressionIds],immutableTraceMutationIds:[...this.immutableTraceMutationIds],padClearanceRerouteCount:this.padClearanceRerouteCount,unresolvedPadClearanceCount:this.unresolvedPadClearanceCount,repairedTraceClearanceSegmentCount:this.repairedTraceClearanceSegmentCount,repairedPadNeckSegmentCount:this.repairedPadNeckSegmentCount,unresolvedTraceClearanceSegmentCount:this.unresolvedTraceClearanceSegmentCount,sameNetContactRejectionCount:this.sameNetContactRejectionCount,connectivityValidationCount:this.connectivityValidationCount,connectivityRollbackCount:this.connectivityRollbackCount,connectivityRollbackPhases:[...this.connectivityRollbackPhases],immutableSafetyRollbackCount:this.immutableSafetyRollbackCount,immutableSafetyRollbackPhases:[...this.immutableSafetyRollbackPhases],connectivityRegressionEndpointIds:[...this.connectivityRegressionEndpointIds],connectivityValidationError:this.connectivityValidationError,connectivityRollbackMutationStats:this.connectivityRollbackMutationStats===null?null:{...this.connectivityRollbackMutationStats},immutableSafetyRollbackMutationStats:this.immutableSafetyRollbackMutationStats===null?null:{...this.immutableSafetyRollbackMutationStats},expansionPushedTraceIndices:[...this.expansionPushedTraceIndices],cleanupMutatedTraceIndices:[...this.cleanupMutatedTraceIndices],discardedExpansionMutationStats:this.discardedExpansionMutationStats===null?null:{...this.discardedExpansionMutationStats},initialPadClearanceViolationCount:this.initialPadClearanceViolationCount,remainingPadClearanceViolationCount:this.remainingPadClearanceViolationCount,initialPadClearanceViolationCountByClearance:{...this.initialPadClearanceViolationCountByClearance},remainingPadClearanceViolationCountByClearance:{...this.remainingPadClearanceViolationCountByClearance},budgetLimitedExpansion:this.budgetLimitedExpansion,finalAcceptanceUsed:this.finalAcceptanceUsed,cleanupCompleted:this.cleanupCompleted,clearanceRepairCompleted:this.clearanceRepairCompleted,cleanupBestEffortAccepted:this.cleanupBestEffortAccepted,clearanceRepairBestEffortAccepted:this.clearanceRepairBestEffortAccepted,cleanupStatus:this.connectivityRollbackPhases.includes("cleanup")?"connectivity_rollback":this.immutableSafetyRollbackPhases.includes("cleanup")?"immutable_safety_rollback":this.cleanupBestEffortAccepted?"budget_limited":this.cleanupCompleted?"completed":this.phase==="cleanup"?"in_progress":"not_started",clearanceRepairStatus:this.connectivityRollbackPhases.includes("clearance-repair")?"connectivity_rollback":this.immutableSafetyRollbackPhases.includes("clearance-repair")?"immutable_safety_rollback":this.clearanceRepairBestEffortAccepted?"budget_limited":this.clearanceRepairCompleted?"completed":this.phase==="repair-trace-clearance"?"in_progress":"not_started",cleanupIterationBudget:this.cleanupIterationBudget,clearanceRepairIterationBudget:this.clearanceRepairIterationBudget,completionReason:this.phase==="complete"||this.solved?this.connectivityRollbackCount>0?"connectivity_rollback":this.immutableSafetyRollbackCount>0?"immutable_safety_rollback":this.connectivityValidationError?"connectivity_validation_unavailable":this.finalAcceptanceUsed?"total_iteration_budget":this.budgetLimitedExpansion?"expansion_budget":this.cleanupBestEffortAccepted?"cleanup_budget":this.clearanceRepairBestEffortAccepted?"clearance_repair_budget":this.remainingImmutableViaViolationCount>0?"immutable_via_violations_preserved":"completed":null,resultStatus:this.finalAcceptanceUsed||this.budgetLimitedExpansion||this.cleanupBestEffortAccepted||this.clearanceRepairBestEffortAccepted||this.connectivityRollbackCount>0||this.immutableSafetyRollbackCount>0||this.connectivityValidationError!==null||this.remainingImmutableViaViolationCount>0?"best_effort":"complete",failedSubSolverCount:this.failedSubSolverCount,retainedFailedSubSolverCount:this.failedSubSolvers?.length??0,expansionIterationBudget:this.getExpansionIterationBudget(),finalizationIterationReserve:this.getFinalizationIterationReserve(),spatialIndexRectCount:this.obstacleIndex.items.length}}computeProgress(){return this.solved||this.phase==="complete"?1:this.budgetLimitedExpansion?0.99:this.traceOrder.length===0?1:Math.min(0.99,(this.passIndex+Math.max(0,this.traceOrderCursor)/this.traceOrder.length)/this.maxPassCount)}getConstructorParams(){return[this.inputProblem,this.options]}getOutput(){return structuredClone(this.lastConnectivitySafeTraces)}visualize(){let e=[],t=[];for(let n=0;n<this.traces.length;n++){let o=this.traces[n],i=this.resolveNominalTraceWidth(o);for(let r of o.route)r.route_type==="via"&&t.push({center:r,radius:(r.via_diameter??0.6)/2,fill:"#d4a017",stroke:"#7a5700"});for(let r=0;r<o.route.length-1;r++){let s=o.route[r],a=o.route[r+1];if(!hs(s)||!hs(a)||s.layer!==a.layer)continue;let c=n===this.traceIndex&&r===this.routeSegmentIndex,l=s.width>=i-ti&&a.width>=i-ti,d=s.layer==="bottom";e.push({points:[s,a],strokeColor:c?"#ff8c00":l?d?"#2468c7":"#169c45":d?"#8b4bb8":"#cc3344",strokeWidth:Math.max(s.width,a.width)})}}return{coordinateSystem:"cartesian",title:`Power trace expander: ${this.phase}`,lines:e,points:[],circles:t,rects:this.obstacleIndex.items.filter((n)=>n.kind==="obstacle").slice(0,2000).map((n)=>({center:{x:(n.minX+n.maxX)/2,y:(n.minY+n.maxY)/2},width:n.maxX-n.minX,height:n.maxY-n.minY,fill:"rgba(80,80,80,0.12)",stroke:"rgba(80,80,80,0.35)"})),texts:[]}}},sYt=class extends Oi{constructor(e,t={}){if(super(),this.inputSrj=e,this.options=t,this.powerTraceExpanderSolver=new CYo(e,t),t.onlyConnectionNames?.length===0)return this.MAX_ITERATIONS=1,this.progress=1,this.solved=!0,void(this.stats={selectedTraceCount:0,bypassed:!0});this.MAX_ITERATIONS=this.powerTraceExpanderSolver.MAX_ITERATIONS+1}inputSrj;options;powerTraceExpanderSolver;_step(){let e=this.powerTraceExpanderSolver;if(e.step(),this.progress=e.progress,this.stats=e.stats,e.failed)return this.error=e.error,void(this.failed=!0);e.solved&&(this.solved=!0)}getConstructorParams(){return[this.inputSrj,this.options]}getOutput(){if(!this.solved)throw Error("Cannot get power trace expansion output before solving");return this.powerTraceExpanderSolver.getOutput()}visualize(){return p1({...this.inputSrj,traces:this.getOutput()},{traceColorMode:"layer"})}},zHe=({connections:e,originalConnections:t,layerCount:n,obstacles:o,defaultViaHoleDiameter:i,connMap:r})=>{let s=new Map;for(let u of t)s.has(u.name)||s.set(u.name,u.__netConnectionName);let a=e.map((u)=>{if(u.pointsToConnect.length!==2)throw Error(`Expected Pipeline7 output connection "${u.name}" to have two points, got ${u.pointsToConnect.length}`);let[h,A]=u.pointsToConnect;return{connection:u,connectsTo:[h?.pointId,A?.pointId].filter((m)=>Boolean(m)),outputConnectionName:u.__netConnectionName??s.get(u.name)??u.__rootConnectionNames?.[0]??u.name}}),c=o.filter((u)=>(u.__zLayers?.length??u.layers?.length??0)>1),l=new Map,d=(u)=>{let h=l.get(u.connectionName);h||(h=new Map,l.set(u.connectionName,h));let A=h.get(u.rootConnectionName);if(A)return A;let m=c.filter((p)=>N6(p,u,r));return h.set(u.rootConnectionName,m),m};return(u)=>{let h=[],A=new Map;for(let m of u){let p=A.get(m.connectionName);p?p.push(m):A.set(m.connectionName,[m])}for(let{connection:m,connectsTo:p,outputConnectionName:g}of a){let _=A.get(m.name)??[];for(let f=0;f<_.length;f+=1){let y=_[f];h.push({type:"pcb_trace",pcb_trace_id:`${m.name}_${f}`,connection_name:g,connectsTo:p,route:Ex(y,n,{connectionPoints:m.pointsToConnect,defaultViaHoleDiameter:i,connectedMultilayerObstacles:d(y),connMap:r})})}}return h}},Eke=({connections:e,originalConnections:t,hdRoutes:n,layerCount:o,obstacles:i,defaultViaHoleDiameter:r,connMap:s})=>zHe({connections:e,originalConnections:t,layerCount:o,obstacles:i,defaultViaHoleDiameter:r,connMap:s})(n),aYt=(e)=>{let t=Math.max(e.minTraceWidth+0.1,2*e.minTraceWidth);return e.connections.flatMap((n)=>(n.nominalTraceWidth??e.nominalTraceWidth??e.minTraceWidth)+0.000001>=t?[n.name]:[])},cYt=({hdRoutes:e,connections:t})=>{let n=new Map(t.map((o)=>[o.name,o]));return e.map((o)=>{if(o.route.length===0)throw Error(`Cannot lock PCB terminals for empty route "${o.connectionName}"`);let i=n.get(o.connectionName);if(!i)throw Error(`Cannot lock PCB terminals: connection "${o.connectionName}" was not found`);if(i.pointsToConnect.length!==2)throw Error(`Cannot lock PCB terminals for "${o.connectionName}": expected 2 connection points, found ${i.pointsToConnect.length}`);let r=new Map;for(let d of i.pointsToConnect)if(d.pcb_port_id){if(r.has(d.pcb_port_id))throw Error(`Cannot lock duplicate PCB terminal "${d.pcb_port_id}" for "${o.connectionName}"`);r.set(d.pcb_port_id,d)}if(r.size===0)return o;let s=[o.startPcbPortId,o.endPcbPortId].filter((d)=>d!==void 0);if(s.length===0)return o;if(new Set(s).size!==s.length||s.some((d)=>!r.has(d)))throw Error(`Cannot lock PCB terminals for "${o.connectionName}": route endpoint IDs do not match connection terminal IDs`);let a=o.startPcbPortId?r.get(o.startPcbPortId):void 0,c=o.endPcbPortId?r.get(o.endPcbPortId):void 0,l=o.route.map((d,u)=>{if(u===0&&a)return{...d,x:a.x,y:a.y,pcb_port_id:a.pcb_port_id};if(u===o.route.length-1&&c)return{...d,x:c.x,y:c.y,pcb_port_id:c.pcb_port_id};let h={...d};return delete h.pcb_port_id,h});return{...o,route:l}})},lYt=({originalSrj:e,newlyRoutedTraces:t,currentPreloadedTraces:n,expandedConnectionNames:o,resolveConnectedTraceAliases:i=!1})=>{let r=n??e.traces??[],s=i?IYo({originalSrj:e,newlyRoutedTraces:t,preloadedTraces:r,expandedConnectionNames:o}):new Set(r.filter((d)=>o.includes(d.connection_name))),a=r.filter((d)=>!s.has(d)),c=new Set([...t.map((d)=>d.pcb_trace_id),...a.map((d)=>d.pcb_trace_id)]),l=r.filter((d)=>s.has(d)).map((d)=>{let u=d.pcb_trace_id,h=u,A=2;for(;c.has(h);)h=`${u}_power_expansion_${A++}`;return c.add(h),{...d,pcb_trace_id:h,__replaces_pcb_trace_id:d.__replaces_pcb_trace_id??d.pcb_trace_id}});return{...e,traces:[...t,...l],fixedTraces:a}},IYo=({originalSrj:e,newlyRoutedTraces:t,preloadedTraces:n,expandedConnectionNames:o})=>{let i=new Set(n.map((l)=>l.pcb_trace_id)),r=new Set([...i,...t.map((l)=>l.pcb_trace_id)]),s=t.map((l,d)=>{if(!i.has(l.pcb_trace_id))return l;let u=`__pipeline7_new_trace_${d}_${l.pcb_trace_id}`,h=u,A=2;for(;r.has(h);)h=`${u}_${A++}`;return r.add(h),{...l,pcb_trace_id:h}}),a=new F6({...e,traces:[...s,...n]}),c=new Set(a.canonicalize([...o]));return new Set(n.filter((l)=>a.canonicalize([l.connection_name]).some((d)=>c.has(d))))};function k6t(e){return new Set((e??[]).filter((t)=>t._isComponentTopologyNode).map((t)=>t.capacityMeshNodeId))}function dYt(e,t){return e.nodeIds.some((n)=>t.has(n))}function bYo({sharedEdgeSegments:e,componentCapacityMeshNodeIds:t}){return e.filter((n)=>!dYt(n,t))}function g0(e,t,n,o={}){return{solverName:e,solverClass:t,getConstructorParams:n,onSolved:o.onSolved}}var uYt=class extends Oi{constructor(e,t={}){super(),this.srj=e,this.opts=t;let n=XE(e);this.originalSrj=n,this.opts={...t};let o=this.opts;if(this.effort=o.effort??1,this.MAX_ITERATIONS=1e8*this.effort,this.maxNodeDimension=o.maxNodeDimension??16,this.maxNodeRatio=o.maxNodeRatio??6,this.minNodeArea=o.minNodeArea??0.010000000000000002,this.visualizationTraceColorMode=o.visualizationTraceColorMode??"layer",this.setSimpleRouteJson(n),o.capacityDepth===void 0){let i=this.srj.bounds.maxX-this.srj.bounds.minX,r=this.srj.bounds.maxY-this.srj.bounds.minY,s=Math.max(i,r),a=o.targetMinCapacity??0.5;o.capacityDepth=cT(s,a)}this.cacheProvider=o.cacheProvider===void 0?CS():o.cacheProvider===null?null:o.cacheProvider,this.startTimeOfPhase={},this.endTimeOfPhase={},this.timeSpentOnPhase={}}srj;opts;getSolverName(){return"AutoroutingPipelineSolver7_MultiGraph"}preprocessSimpleRouteJsonSolver;escapeViaLocationSolver;netToPointPairsSolver;componentTopologyGeneratorSolver;topologyPlanningSolver;topologyMergingSolver;globalTopologyGeneratorSolver;nodeDimensionSubdivisionSolver;nodeTargetMerger;edgeSolver;colorMap;highDensityRouteSolver;highDensityForceImproveSolver;highDensityRepairSolver;highDensityStitchSolver;globalDrcForceImproveSolver;exactGeometryDrcForceImproveSolver;singleLayerNodeMerger;strawSolver;deadEndSolver;traceSimplificationSolver;lengthMatchingPostProcessingSolver;powerTraceExpansionSolver;availableSegmentPointSolver;portPointPathingSolver;multiSectionPortPointOptimizer;uniformPortDistributionSolver;traceWidthSolver;necessaryCrampedPortPointSolver;componentDetectionSolver;viaDiameter;viaHoleDiameter;minTraceWidth;effort;maxNodeDimension;maxNodeRatio;minNodeArea;visualizationTraceColorMode;startTimeOfPhase;endTimeOfPhase;timeSpentOnPhase;activeSubSolver=null;connMap;srjWithEscapeViaLocations;srjWithPointPairs;originalSrj;capacityNodes=null;capacityEdges=null;sharedEdgeSegmentsWithNecessaryCrampedPortPoints;highDensityNodePortPoints;cacheProvider=null;pipelineDef=[g0("preprocessSimpleRouteJsonSolver",kfe,(e)=>[e.originalSrj,{traceColorMode:e.visualizationTraceColorMode}],{onSolved:(e)=>{e.setSimpleRouteJson(e.preprocessSimpleRouteJsonSolver.getOutputSimpleRouteJson())}}),g0("componentDetectionSolver",jGt,(e)=>[{inputSrj:e.srj}]),g0("escapeViaLocationSolver",Nfe,(e)=>[e.srj,{viaDiameter:e.viaDiameter,minTraceWidth:e.minTraceWidth,obstacleMargin:e.srj.defaultObstacleMargin??0.15}],{onSolved:(e)=>{e.srjWithEscapeViaLocations=e.escapeViaLocationSolver?.getOutputSimpleRouteJson()}}),g0("netToPointPairsSolver",wU,(e)=>{let t=e.srjWithEscapeViaLocations??e.srj;return[t,e.colorMap,rT(t)]},{onSolved:(e)=>{e.srjWithPointPairs=e.netToPointPairsSolver?.getNewSimpleRouteJson(),e.colorMap=HA(e.srjWithPointPairs,e.connMap),e.connMap=x0(e.srjWithPointPairs)}}),g0("topologyPlanningSolver",ZGt,(e)=>[{inputSrj:e.srjWithPointPairs,componentDetectionOutput:e.componentDetectionSolver.getOutput(),viaDiameter:e.viaDiameter,obstacleMargin:e.srj.defaultObstacleMargin??0.15}],{onSolved:(e)=>{e.topologyPlanningSolver.getOutput(),e.globalTopologyGeneratorSolver=e.topologyPlanningSolver.globalTopologySolver,e.componentTopologyGeneratorSolver=new eYt(e.topologyPlanningSolver)}}),g0("topologyMergingSolver",$Gt,(e)=>{let t=e.topologyPlanningSolver.getOutput();return[{layerCount:e.srj.layerCount,nodeGroups:[{groupId:"global",nodes:t.globalMeshNodes,isComponent:!1},...t.componentMeshNodes.map((n,o)=>({groupId:`component-${o}`,nodes:n,isComponent:!0}))]}]},{onSolved:(e)=>{e.capacityNodes=e.topologyMergingSolver.getOutput()}}),g0("nodeDimensionSubdivisionSolver",Tfe,(e)=>[e.capacityNodes,e.maxNodeDimension,e.maxNodeRatio,e.minNodeArea],{onSolved:(e)=>{e.capacityNodes=e.nodeDimensionSubdivisionSolver.outputNodes}}),g0("edgeSolver",sT,(e)=>[e.capacityNodes],{onSolved:(e)=>{e.capacityEdges=e.edgeSolver?.edges}}),g0("availableSegmentPointSolver",hL,(e)=>[{nodes:e.capacityNodes,edges:e.capacityEdges||[],traceWidth:e.minTraceWidth,colorMap:e.colorMap,shouldReturnCrampedPortPoints:!0}]),g0("necessaryCrampedPortPointSolver",nne,(e)=>{let t=k6t(e.capacityNodes);return[{capacityMeshNodes:e.capacityNodes.filter((n)=>!t.has(n.capacityMeshNodeId)),sharedEdgeSegments:bYo({sharedEdgeSegments:e.availableSegmentPointSolver.getOutput(),componentCapacityMeshNodeIds:t}),simpleRouteJson:e.srjWithPointPairs}]},{onSolved:(e)=>{let t=k6t(e.capacityNodes);e.sharedEdgeSegmentsWithNecessaryCrampedPortPoints=function({originalSharedEdgeSegments:n,filteredSharedEdgeSegments:o,componentCapacityMeshNodeIds:i}){let r=new Map(o.map((s)=>[s.edgeId,s]));return n.map((s)=>dYt(s,i)?s:r.get(s.edgeId)??s)}({originalSharedEdgeSegments:e.availableSegmentPointSolver.getOutput(),filteredSharedEdgeSegments:e.necessaryCrampedPortPointSolver.getOutput(),componentCapacityMeshNodeIds:t})}}),g0("portPointPathingSolver",Dfe,(e)=>{let t=e.sharedEdgeSegmentsWithNecessaryCrampedPortPoints??e.necessaryCrampedPortPointSolver?.getOutput()??e.availableSegmentPointSolver.getOutput(),{graph:n,connections:o}=one({capacityMeshNodes:e.capacityNodes,layerCount:e.srj.layerCount,connectivityMap:e.connMap,segmentPortPoints:t.flatMap((i)=>i.portPoints),simpleRouteJsonConnections:e.srjWithPointPairs.connections});return[{graph:n,connections:o,layerCount:e.srj.layerCount,effort:Math.min(1,e.effort),preserveTerminalPcbPortIds:!0,minViaPadDiameter:e.viaDiameter,flags:{FORCE_CENTER_FIRST:!0,RIPPING_ENABLED:!0,USE_SELECTIVE_RERIP_ROUTING:!0},weights:{SHUFFLE_SEED:0,MEMORY_PF_FACTOR:4,CENTER_OFFSET_DIST_PENALTY_FACTOR:0,CENTER_OFFSET_FOCUS_SHIFT:0,NODE_PF_FACTOR:0,LAYER_CHANGE_COST:0,RIPPING_PF_COST:0,NODE_PF_MAX_PENALTY:100,BASE_CANDIDATE_COST:0.6,MAX_ITERATIONS_PER_PATH:0,RANDOM_WALK_DISTANCE:0,START_RIPPING_PF_THRESHOLD:0.3,END_RIPPING_PF_THRESHOLD:1,MAX_RIPS:1000,RANDOM_RIP_FRACTION:0.3,STRAIGHT_LINE_DEVIATION_PENALTY_FACTOR:4,GREEDY_MULTIPLIER:0.7,MIN_ALLOWED_BOARD_SCORE:-1e4}}]}),g0("uniformPortDistributionSolver",Hte,(e)=>[{nodeWithPortPoints:e.portPointPathingSolver?.getOutput().nodesWithPortPoints??[],inputNodesWithPortPoints:e.portPointPathingSolver?.getOutput().inputNodeWithPortPoints??[],minTraceWidth:e.minTraceWidth,obstacles:e.srj.obstacles,layerCount:e.srj.layerCount}]),g0("highDensityRouteSolver",yL,(e)=>{let t=e.uniformPortDistributionSolver?.getOutput()??[],n=e.portPointPathingSolver?.getOutput().nodesWithPortPoints??[],o=t.length>0?t:n;return e.highDensityNodePortPoints=structuredClone(o),[{nodePortPoints:o,nodePfById:new Map((e.portPointPathingSolver?.getOutput().inputNodeWithPortPoints??[]).map((i)=>[i.capacityMeshNodeId,e.portPointPathingSolver?.computeNodePf(i)??null])),colorMap:e.colorMap,connMap:e.connMap,viaDiameter:e.viaDiameter,traceWidth:e.minTraceWidth,obstacleMargin:e.srj.defaultObstacleMargin??0.15,obstacles:e.srj.obstacles,layerCount:e.srj.layerCount,useGrowShrinkHighDensityIntraNodeSolver:!0,preserveTerminalPcbPortIds:!0,growShrinkFallbackToInvalidGeometryOnFailure:!0,captureSearchDebug:!1}]}),g0("highDensityForceImproveSolver",ine,(e)=>[{nodeWithPortPoints:e.highDensityNodePortPoints??[],hdRoutes:e.highDensityRouteSolver.routes,colorMap:e.colorMap,totalStepsPerNode:Math.max(12,Math.round(20*Math.min(1,e.effort))),nodeAssignmentMargin:e.srj.defaultObstacleMargin??0.2}]),g0("highDensityRepairSolver",rne,(e)=>[{nodeWithPortPoints:e.highDensityNodePortPoints??[],hdRoutes:e.highDensityForceImproveSolver?.getOutput()??e.highDensityRouteSolver.routes,obstacles:e.srj.obstacles,colorMap:e.colorMap,repairMargin:e.srj.defaultObstacleMargin??0.2,minimumTraceWidth:e.srj.minTraceWidth,connMap:e.connMap}]),g0("highDensityStitchSolver",Qfe,(e)=>[{connections:e.srjWithPointPairs.connections,hdRoutes:e.highDensityRepairSolver?.getOutput()??e.highDensityForceImproveSolver?.getOutput()??e.highDensityRouteSolver.routes,colorMap:e.colorMap,layerCount:e.srj.layerCount,defaultViaDiameter:e.viaDiameter,preserveTerminalPcbPortIds:!0}]),g0("traceSimplificationSolver",HI,(e)=>[{hdRoutes:e.highDensityStitchSolver.mergedHdRoutes,obstacles:e.srj.obstacles,connMap:e.connMap,colorMap:e.colorMap,outline:e.srj.outline,defaultViaDiameter:e.viaDiameter,layerCount:e.srj.layerCount,minTraceToPadEdgeClearance:e.srj.minTraceToPadEdgeClearance,minBoardEdgeClearance:e.srj.minBoardEdgeClearance,enableCrossingViaReduction:!0,iterations:2}]),g0("traceWidthSolver",TU,(e)=>[{hdRoutes:e.traceSimplificationSolver.simplifiedHdRoutes,obstacles:e.srj.obstacles,connMap:e.connMap,colorMap:e.colorMap,minTraceWidth:e.minTraceWidth,connection:e.srj.connections,obstacleMargin:e.srj.minTraceToPadEdgeClearance??0.15,layerCount:e.srj.layerCount}]),g0("globalDrcForceImproveSolver",bE,(e)=>[{srj:e.srjWithPointPairs,hdRoutes:cYt({hdRoutes:e.traceWidthSolver.getHdRoutesWithWidths(),connections:e.netToPointPairsSolver?.newConnections??[]}),connMap:e.connMap,effort:Math.min(1,e.effort),maxIterations:16,enableLargeBoardBroadFallback:!1,enablePostSolveClearanceRelaxation:!1}]),g0("exactGeometryDrcForceImproveSolver",eOt,(e)=>{let t=e.globalDrcForceImproveSolver.getOutput(),n=((o)=>{let i={...o.srjWithPointPairs,obstacles:o.originalSrj.obstacles,minTraceWidth:o.originalSrj.minTraceWidth,minViaDiameter:o.originalSrj.minViaDiameter??o.srjWithPointPairs.minViaDiameter},r=Math.max(y0(o.originalSrj).padDiameter,i.minTraceWidth)+Math.max(0.1,0.1),s=new Wte(i,{connMap:o.connMap,includeTraceViaOwnerMetadata:!0,traceClearance:0.1,viaClearance:0.1,spatialCellSize:r}),a=zHe(o),c=o.originalSrj.traces??[];return({routes:l,hdRoutes:d})=>{let u=l??d;if(!u)throw Error("Pipeline7 autorouting DRC evaluation requires HD routes");let h=a(u),A=c.length?[...c,...h]:h;return s.evaluate(A)}})({connections:e.netToPointPairsSolver?.newConnections??[],originalConnections:e.originalSrj.connections,layerCount:e.srj.layerCount,obstacles:e.srj.obstacles,defaultViaHoleDiameter:e.viaHoleDiameter,connMap:e.connMap,srjWithPointPairs:e.srjWithPointPairs,originalSrj:e.originalSrj});return[{srj:e.srjWithPointPairs,hdRoutes:t,connMap:e.connMap,effort:Math.min(1,e.effort),viaHoleDiameter:e.viaHoleDiameter,drcEvaluator:n,viaInPadDrcEvaluator:n,maxIterations:32,enableLargeBoardBroadFallback:!1,enableBroadFallback:!1,enableTargetedErrorSweep:!0,enablePostSolveClearanceRelaxation:!1,enableSafeTraceLayerMoves:!0,enableViaInPadLayerMoves:e.originalSrj.allowViaInPad??!1,viaInPadMaxIterations:32,broadMaxIterations:12,broadPassMultiplier:3}]}),g0("lengthMatchingPostProcessingSolver",OGt,(e)=>{let t=e.netToPointPairsSolver;if(!t)throw Error("Pipeline7: length-matching post-processing requires NetToPointPairsSolver output");let n=t.newConnections,o=new Map;for(let s of e.srj.differentialPairs??[])for(let a of s.connectionNames){let c=n.filter((l)=>l.name===a||l.__rootConnectionNames?.includes(a)||l.__netConnectionName===a);if(c.length!==1)throw Error(`Pipeline7: differential pair connection "${a}" must resolve to exactly one final point-pair connection, got ${c.length}`);o.set(a,c[0].name)}let i=e.exactGeometryDrcForceImproveSolver.getOutput(),r=(e.srj.differentialPairs??[]).map((s)=>{let a=s.connectionNames.map((d)=>{let u=o.get(d);if(!u)throw Error(`Pipeline7: differential pair connection "${d}" is missing from final routed output`);return u});if(a[0]===a[1])throw Error(`Pipeline7: differential pair ${s.connectionNames.join("/")} resolves both members to "${a[0]}"`);if(s.traceGap===void 0)return{connectionNames:a,lengthTolerance:s.lengthTolerance,maxUncoupledLength:s.maxUncoupledLength};let c=a.map((d)=>{let u=i.filter((h)=>h.connectionName===d);if(u.length!==1)throw Error(`Pipeline7: differential pair connection "${d}" must resolve to exactly one final HD route, got ${u.length}`);return u[0]}),l=s.traceGap+c.reduce((d,u)=>d+u.traceThickness/2,0);return{connectionNames:a,lengthTolerance:s.lengthTolerance,maxUncoupledLength:s.maxUncoupledLength,minimumCenterlineDistance:l,maximumCenterlineDistance:l}});return[{hdRoutes:i,differentialPairs:r,obstacles:e.srj.obstacles,bounds:e.srj.bounds,layerCount:e.srj.layerCount}]}),g0("powerTraceExpansionSolver",sYt,(e)=>{let t=e.opts.powerTraceExpansion??{},n=t.onlyConnectionNames??aYt(e.originalSrj);return[lYt({originalSrj:e.originalSrj,newlyRoutedTraces:e.getPrePowerTraceOutputSimplifiedPcbTraces(),expandedConnectionNames:n}),{allowNewVias:!1,...t,onlyConnectionNames:n}]})];setSimpleRouteJson(e){this.srj=e;let t=y0(this.srj);this.viaDiameter=t.padDiameter,this.viaHoleDiameter=t.holeDiameter,this.minTraceWidth=this.srj.minTraceWidth,this.connMap=x0(this.srj),this.colorMap=HA(this.srj,this.connMap)}getConstructorParams(){return[this.srj,this.opts]}currentPipelineStepIndex=0;computeProgress(){let e=this.activeSubSolver?.progress??0;return(this.currentPipelineStepIndex+e)/this.pipelineDef.length}_step(){let e=this.pipelineDef[this.currentPipelineStepIndex];if(!e)return void(this.solved=!0);if(this.activeSubSolver)return this.activeSubSolver.step(),void(this.activeSubSolver.solved?(this.endTimeOfPhase[e.solverName]=performance.now(),this.timeSpentOnPhase[e.solverName]=this.endTimeOfPhase[e.solverName]-this.startTimeOfPhase[e.solverName],e.onSolved?.(this),this.activeSubSolver=null,this.currentPipelineStepIndex++):this.activeSubSolver.failed&&(this.error=this.activeSubSolver?.error,this.failed=!0,this.activeSubSolver=null));let t=e.getConstructorParams(this);this.activeSubSolver=new e.solverClass(...t),this.activeSubSolver instanceof HI&&(this.activeSubSolver.MAX_SIMPLIFICATION_PIPELINE_LOOPS=Math.ceil(this.activeSubSolver.MAX_SIMPLIFICATION_PIPELINE_LOOPS*Math.min(1,this.effort))),e.solverName!=="lengthMatchingPostProcessingSolver"&&e.solverName!=="powerTraceExpansionSolver"||(this.MAX_ITERATIONS=Math.max(this.MAX_ITERATIONS,this.iterations+this.activeSubSolver.MAX_ITERATIONS+1)),this[e.solverName]=this.activeSubSolver,this.timeSpentOnPhase[e.solverName]=0,this.startTimeOfPhase[e.solverName]=performance.now()}solveUntilPhase(e){for(;this.getCurrentPhase()!==e;)this.step()}getCurrentPhase(){return this.pipelineDef[this.currentPipelineStepIndex]?.solverName??"none"}visualize(){if(!this.solved&&this.activeSubSolver)return this.visualizeStage(this.activeSubSolver);let e=this.escapeViaLocationSolver?.visualize(),t=this.netToPointPairsSolver?.visualize(),n=this.componentDetectionSolver?.visualize(),o=this.componentTopologyGeneratorSolver?.visualize(),i=this.globalTopologyGeneratorSolver?.visualize(),r=this.topologyMergingSolver?.visualize(),s=this.nodeDimensionSubdivisionSolver?.visualize(),a=this.nodeTargetMerger?.visualize(),c=this.singleLayerNodeMerger?.visualize(),l=this.strawSolver?.visualize(),d=this.edgeSolver?.visualize(),u=this.deadEndSolver?.visualize(),h=this.availableSegmentPointSolver?.visualize(),A=this.portPointPathingSolver?.visualize(),m=this.multiSectionPortPointOptimizer?.visualize(),p=this.uniformPortDistributionSolver?.visualize(),g=this.highDensityRouteSolver?.visualize(),_=this.highDensityForceImproveSolver?.visualize(),f=this.highDensityRepairSolver?.visualize(),y=this.highDensityStitchSolver?.visualize(),x=this.traceSimplificationSolver?.visualize(),C=this.lengthMatchingPostProcessingSolver?.visualize(),I=this.traceWidthSolver?.visualize(),b=this.necessaryCrampedPortPointSolver?.visualize(),P=(this.highDensityRouteSolver?.visualize(),this.originalSrj),E=P.outline,B=[];if(B.push({points:[{x:P.bounds?.minX??-50,y:P.bounds?.minY??-50},{x:P.bounds?.maxX??50,y:P.bounds?.minY??-50},{x:P.bounds?.maxX??50,y:P.bounds?.maxY??50},{x:P.bounds?.minX??-50,y:P.bounds?.maxY??50},{x:P.bounds?.minX??-50,y:P.bounds?.minY??-50}],strokeColor:"rgba(255,0,0,0.25)"}),E&&E.length>=2){let V=E.map((W)=>({x:W.x,y:W.y}));V.push({...V[0]}),B.push({points:V,strokeColor:"rgba(0, 136, 255, 0.95)"})}let w=O6(P),T={points:[...P.connections.flatMap((V)=>V.pointsToConnect.map((W)=>({...W,layer:z6(W,P.layerCount),label:`${V.name} ${W.pcb_port_id??""}`})))],rects:[...(P.obstacles??[]).filter((V)=>!V.isCopperPour).map((V)=>({...V,fill:V.layers?.includes("top")?"rgba(255,0,0,0.25)":V.layers?.includes("bottom")?"rgba(0,0,255,0.25)":"rgba(255,0,0,0.25)",layer:OE(V,P.layerCount),label:w(V)}))],lines:B},Q={traceColorMode:this.visualizationTraceColorMode},N=L6({srj:P,visualizationOptions:Q}),F=Lc(T,N),H=this.preprocessSimpleRouteJsonSolver?.visualize(),z=this.globalDrcForceImproveSolver?.visualize(),Y=this.exactGeometryDrcForceImproveSolver?.visualize(),U=[F,H,n,o,e,t,i,r,s,a,c,l,d,u,h,b,A,m,p,g?Lc(T,g):null,_,f,y,x,I,z,Y,C,this.solved?Lc({lines:B},L6({srj:this.originalSrj,visualizationOptions:Q}),this.visualizeFinalOutput()):null].filter(Boolean),X=Lc(...U);return this.visualizationTraceColorMode==="net"?Nge(X,this.colorMap):X}visualizeStage(e){let t=e.visualize();return this.visualizationTraceColorMode==="net"?Nge(t,this.colorMap):t}visualizeFinalOutput(){let e=this.visualizationTraceColorMode,t=this.getOutputSimpleRouteJson();return p1(t,{traceColorMode:e})}preview(){if(this.highDensityRouteSolver){let e=[];for(let t=this.highDensityRouteSolver.routes.length-1;t>=0;t--){let n=this.highDensityRouteSolver.routes[t];if(e.push({points:n.route.map((o)=>({x:o.x,y:o.y})),strokeColor:this.colorMap[n.connectionName]}),e.length>200)break}return{lines:e}}return this.portPointPathingSolver?this.portPointPathingSolver.preview():this.netToPointPairsSolver?this.netToPointPairsSolver.visualize():this.escapeViaLocationSolver?this.escapeViaLocationSolver.visualize():this.componentTopologyGeneratorSolver?this.componentTopologyGeneratorSolver.visualize():this.componentDetectionSolver?this.componentDetectionSolver.visualize():this.preprocessSimpleRouteJsonSolver?this.preprocessSimpleRouteJsonSolver.visualize():{}}_getOutputHdRoutes(){if(this.lengthMatchingPostProcessingSolver){let{hdRoutes:e}=this.lengthMatchingPostProcessingSolver.getOutput();return e}return this.exactGeometryDrcForceImproveSolver?.getOutput()??this.globalDrcForceImproveSolver?.getOutput()??this.traceWidthSolver?.getHdRoutesWithWidths()??this.traceSimplificationSolver?.simplifiedHdRoutes??this.highDensityStitchSolver.mergedHdRoutes}getOutputSimplifiedPcbTraces(){if(!this.solved||!this.highDensityRouteSolver)throw Error("Cannot get output before solving is complete");return this.powerTraceExpansionSolver?this.powerTraceExpansionSolver.getOutput():this.getPrePowerTraceOutputSimplifiedPcbTraces()}getPrePowerTraceOutputSimplifiedPcbTraces(){return Eke({connections:this.netToPointPairsSolver?.newConnections??[],originalConnections:this.originalSrj.connections,hdRoutes:this._getOutputHdRoutes(),layerCount:this.srj.layerCount,obstacles:this.srj.obstacles,defaultViaHoleDiameter:this.viaHoleDiameter,connMap:this.connMap})}getOutputSimpleRouteJson(){return{...this.originalSrj,traces:this.getOutputSimplifiedPcbTraces()}}},L6t=(e)=>[...new Set(e)].sort((t,n)=>t-n),SYo=class extends Oi{constructor(e){super(),this.params=e,this.MAX_ITERATIONS=1}params;outputNodes=[];outputSharedEdgeSegments=[];nodeIdByOriginalAndZ=new Map;getSolverName(){return"SplitNodesIntoSingleLayerNodeSolver"}_step(){this.outputNodes=this.params.capacityMeshNodes.flatMap((e)=>L6t(e.availableZ).map((t)=>{let n=((o,i)=>`${o}__z${i}`)(e.capacityMeshNodeId,t);return this.nodeIdByOriginalAndZ.set(`${e.capacityMeshNodeId}:${t}`,n),{...e,capacityMeshNodeId:n,layer:`z${t}`,availableZ:[t],_parent:e}})),this.outputSharedEdgeSegments=this.params.sharedEdgeSegments.flatMap((e)=>this.splitSharedEdgeSegment(e)),this.stats={inputNodeCount:this.params.capacityMeshNodes.length,outputNodeCount:this.outputNodes.length,inputPortPointCount:this.params.sharedEdgeSegments.reduce((e,t)=>e+t.portPoints.length,0),outputPortPointCount:this.outputSharedEdgeSegments.reduce((e,t)=>e+t.portPoints.length,0)},this.solved=!0}getSplitNodeId(e,t){return this.nodeIdByOriginalAndZ.get(`${e}:${t}`)}splitPortPoint(e){return L6t(e.availableZ).flatMap((t)=>{let n=e.nodeIds.map((o)=>this.getSplitNodeId(o,t));return n[0]&&n[1]?[{...e,segmentPortPointId:`${e.segmentPortPointId}__z${t}`,availableZ:[t],nodeIds:[n[0],n[1]]}]:[]})}splitSharedEdgeSegment(e){let t=new Map;for(let n of e.portPoints.flatMap((o)=>this.splitPortPoint(o))){let o=n.availableZ[0];if(o===void 0)continue;let i=t.get(o)??[];i.push(n),t.set(o,i)}return[...t.entries()].map(([n,o])=>({...e,edgeId:`${e.edgeId}__z${n}`,nodeIds:o[0].nodeIds,availableZ:[n],portPoints:o}))}getOutput(){return{capacityMeshNodes:this.outputNodes,sharedEdgeSegments:this.outputSharedEdgeSegments}}getConstructorParams(){return[this.params]}visualize(){return{rects:this.outputNodes.map((e)=>({...FA(e),label:`${e.capacityMeshNodeId}
${e.layer}`})),points:this.outputSharedEdgeSegments.flatMap((e)=>e.portPoints.map((t)=>({x:t.x,y:t.y,label:`${t.segmentPortPointId}
z${t.availableZ.join(",")}`})))}}};function QA(e,t,n,o={}){return{solverName:e,solverClass:t,getConstructorParams:n,onSolved:o.onSolved}}var hYt=class extends Oi{constructor(e,t={}){super(),this.srj=e,this.opts=t,this.originalSrj=e,this.opts={...t};let n=this.opts;if(this.effort=n.effort??1,this.MAX_ITERATIONS=1e8*this.effort,this.maxNodeDimension=n.maxNodeDimension??16,this.maxNodeRatio=n.maxNodeRatio??6,this.minNodeArea=n.minNodeArea??0.010000000000000002,this.setSimpleRouteJson(e),n.capacityDepth===void 0){let o=this.srj.bounds.maxX-this.srj.bounds.minX,i=this.srj.bounds.maxY-this.srj.bounds.minY,r=Math.max(o,i),s=n.targetMinCapacity??0.5;n.capacityDepth=cT(r,s)}this.cacheProvider=n.cacheProvider===void 0?CS():n.cacheProvider===null?null:n.cacheProvider,this.startTimeOfPhase={},this.endTimeOfPhase={},this.timeSpentOnPhase={}}srj;opts;preprocessSimpleRouteJsonSolver;escapeViaLocationSolver;netToPointPairsSolver;nodeSolver;nodeDimensionSubdivisionSolver;nodeTargetMerger;edgeSolver;colorMap;highDensityRouteSolver;highDensityForceImproveSolver;highDensityForceImproveRoutes;highDensityRepairSolver;highDensityRepairRoutes;highDensityStitchSolver;globalDrcForceImproveSolver;singleLayerNodeMerger;strawSolver;deadEndSolver;traceSimplificationSolver;availableSegmentPointSolver;splitNodesIntoSingleLayerNodeSolver;portPointPathingSolver;multiSectionPortPointOptimizer;uniformPortDistributionSolver;traceWidthSolver;necessaryCrampedPortPointSolver;viaDiameter;viaHoleDiameter;minTraceWidth;effort;maxNodeDimension;maxNodeRatio;minNodeArea;startTimeOfPhase;endTimeOfPhase;timeSpentOnPhase;activeSubSolver=null;connMap;srjWithEscapeViaLocations;srjWithPointPairs;originalSrj;capacityNodes=null;capacityEdges=null;highDensityNodePortPoints;cacheProvider=null;pipelineDef=[QA("preprocessSimpleRouteJsonSolver",kfe,(e)=>[e.originalSrj],{onSolved:(e)=>{e.setSimpleRouteJson(e.preprocessSimpleRouteJsonSolver.getOutputSimpleRouteJson())}}),QA("escapeViaLocationSolver",Nfe,(e)=>[e.srj,{viaDiameter:e.viaDiameter,minTraceWidth:e.minTraceWidth,obstacleMargin:e.srj.defaultObstacleMargin??0.15}],{onSolved:(e)=>{e.srjWithEscapeViaLocations=e.escapeViaLocationSolver?.getOutputSimpleRouteJson()}}),QA("netToPointPairsSolver",wU,(e)=>{let t=e.srjWithEscapeViaLocations??e.srj;return[t,e.colorMap,rT(t)]},{onSolved:(e)=>{e.srjWithPointPairs=e.netToPointPairsSolver?.getNewSimpleRouteJson(),e.colorMap=HA(e.srjWithPointPairs,e.connMap),e.connMap=x0(e.srjWithPointPairs)}}),QA("nodeSolver",bU,(e)=>[{simpleRouteJson:e.srjWithPointPairs,maxGapFillPasses:4}],{onSolved:(e)=>{e.capacityNodes=e.nodeSolver?.getOutput().meshNodes??[]}}),QA("nodeDimensionSubdivisionSolver",Tfe,(e)=>[e.capacityNodes,e.maxNodeDimension,e.maxNodeRatio,e.minNodeArea],{onSolved:(e)=>{e.capacityNodes=e.nodeDimensionSubdivisionSolver?.outputNodes??[]}}),QA("edgeSolver",sT,(e)=>[e.capacityNodes],{onSolved:(e)=>{e.capacityEdges=e.edgeSolver?.edges}}),QA("availableSegmentPointSolver",hL,(e)=>[{nodes:e.capacityNodes,edges:e.capacityEdges||[],traceWidth:e.minTraceWidth,colorMap:e.colorMap,shouldReturnCrampedPortPoints:!0}]),QA("necessaryCrampedPortPointSolver",nne,(e)=>[{capacityMeshNodes:e.capacityNodes,sharedEdgeSegments:e.availableSegmentPointSolver.getOutput(),simpleRouteJson:e.srjWithPointPairs}]),QA("splitNodesIntoSingleLayerNodeSolver",SYo,(e)=>[{capacityMeshNodes:e.capacityNodes,sharedEdgeSegments:e.necessaryCrampedPortPointSolver?.getOutput()??e.availableSegmentPointSolver.getOutput()}],{onSolved:(e)=>{e.capacityNodes=e.splitNodesIntoSingleLayerNodeSolver.getOutput().capacityMeshNodes}}),QA("portPointPathingSolver",Dfe,(e)=>{let t=e.splitNodesIntoSingleLayerNodeSolver.getOutput(),{graph:n,connections:o}=one({capacityMeshNodes:t.capacityMeshNodes,layerCount:e.srj.layerCount,connectivityMap:e.connMap,segmentPortPoints:t.sharedEdgeSegments.flatMap((i)=>i.portPoints),simpleRouteJsonConnections:e.srjWithPointPairs.connections,assignableViaObstacles:e.originalSrj.obstacles});return[{graph:n,connections:o,layerCount:e.srj.layerCount,effort:Math.min(1,e.effort),minViaPadDiameter:e.viaDiameter,flags:{FORCE_CENTER_FIRST:!0,RIPPING_ENABLED:!0},weights:{SHUFFLE_SEED:0,MEMORY_PF_FACTOR:4,CENTER_OFFSET_DIST_PENALTY_FACTOR:0,CENTER_OFFSET_FOCUS_SHIFT:0,NODE_PF_FACTOR:0,LAYER_CHANGE_COST:0,RIPPING_PF_COST:0,NODE_PF_MAX_PENALTY:100,BASE_CANDIDATE_COST:0.6,MAX_ITERATIONS_PER_PATH:0,RANDOM_WALK_DISTANCE:0,START_RIPPING_PF_THRESHOLD:0.3,END_RIPPING_PF_THRESHOLD:1,MAX_RIPS:1000,RANDOM_RIP_FRACTION:0.3,STRAIGHT_LINE_DEVIATION_PENALTY_FACTOR:4,GREEDY_MULTIPLIER:0.7,MIN_ALLOWED_BOARD_SCORE:-1e4}}]}),QA("uniformPortDistributionSolver",Hte,(e)=>[{nodeWithPortPoints:e.portPointPathingSolver?.getOutput().nodesWithPortPoints??[],inputNodesWithPortPoints:e.portPointPathingSolver?.getOutput().inputNodeWithPortPoints??[],minTraceWidth:e.minTraceWidth,obstacles:e.srj.obstacles,layerCount:e.srj.layerCount}]),QA("highDensityRouteSolver",yL,(e)=>{let t=e.uniformPortDistributionSolver?.getOutput()??[],n=e.portPointPathingSolver?.getOutput().nodesWithPortPoints??[],o=t.length>0?t:n;return e.highDensityNodePortPoints=structuredClone(o),[{nodePortPoints:o,nodePfById:new Map((e.portPointPathingSolver?.getOutput().inputNodeWithPortPoints??[]).map((i)=>[i.capacityMeshNodeId,e.portPointPathingSolver?.computeNodePf(i)??null])),colorMap:e.colorMap,connMap:e.connMap,viaDiameter:e.viaDiameter,traceWidth:e.minTraceWidth,obstacleMargin:e.srj.defaultObstacleMargin??0.15,obstacles:e.srj.obstacles,layerCount:e.srj.layerCount}]}),QA("highDensityForceImproveSolver",ine,(e)=>[{nodeWithPortPoints:e.getHighDensityNodePortPointsWithAssignableViasFirst(),hdRoutes:e.getMovableHighDensityRoutes(e.highDensityRouteSolver.routes),colorMap:e.colorMap,totalStepsPerNode:Math.max(20,Math.round(60*Math.min(1,e.effort))),nodeAssignmentMargin:e.srj.defaultObstacleMargin??0.2}],{onSolved:(e)=>{e.highDensityForceImproveRoutes=e.mergeMovableHighDensityRoutesBack(e.highDensityRouteSolver.routes,e.highDensityForceImproveSolver.getOutput())}}),QA("highDensityRepairSolver",rne,(e)=>[{nodeWithPortPoints:e.getHighDensityNodePortPointsWithAssignableViasFirst(),hdRoutes:e.getMovableHighDensityRoutes(e.highDensityForceImproveRoutes??e.highDensityForceImproveSolver?.getOutput()??e.highDensityRouteSolver.routes),obstacles:e.srj.obstacles,colorMap:e.colorMap,repairMargin:e.srj.defaultObstacleMargin??0.2,minimumTraceWidth:e.srj.minTraceWidth,connMap:e.connMap}],{onSolved:(e)=>{let t=e.highDensityForceImproveRoutes??e.highDensityForceImproveSolver?.getOutput()??e.highDensityRouteSolver.routes;e.highDensityRepairRoutes=e.mergeMovableHighDensityRoutesBack(t,e.highDensityRepairSolver.getOutput())}}),QA("highDensityStitchSolver",Qfe,(e)=>[{connections:e.srjWithPointPairs.connections,hdRoutes:e.highDensityRepairRoutes??e.highDensityRepairSolver?.getOutput()??e.highDensityForceImproveRoutes??e.highDensityForceImproveSolver?.getOutput()??e.highDensityRouteSolver.routes,colorMap:e.colorMap,layerCount:e.srj.layerCount,defaultViaDiameter:e.viaDiameter,allowedLayerTransitionPointKeys:l4t(e.originalSrj.obstacles)}]),QA("traceSimplificationSolver",HI,(e)=>[{hdRoutes:e.highDensityStitchSolver.mergedHdRoutes,obstacles:e.srj.obstacles,connMap:e.connMap,colorMap:e.colorMap,outline:e.srj.outline,defaultViaDiameter:e.viaDiameter,layerCount:e.srj.layerCount,minTraceToPadEdgeClearance:e.srj.minTraceToPadEdgeClearance,iterations:2}]),QA("traceWidthSolver",TU,(e)=>[{hdRoutes:e.traceSimplificationSolver.simplifiedHdRoutes,obstacles:e.srj.obstacles,connMap:e.connMap,colorMap:e.colorMap,minTraceWidth:e.minTraceWidth,connection:e.srj.connections,obstacleMargin:e.srj.minTraceToPadEdgeClearance??0.15,layerCount:e.srj.layerCount}]),QA("globalDrcForceImproveSolver",bE,(e)=>[{srj:e.srjWithPointPairs,hdRoutes:e.traceWidthSolver.getHdRoutesWithWidths(),effort:Math.min(1,e.effort)}])];setSimpleRouteJson(e){this.srj=e;let t=y0(this.srj);this.viaDiameter=t.padDiameter,this.viaHoleDiameter=t.holeDiameter,this.minTraceWidth=this.srj.minTraceWidth,this.connMap=x0(this.srj),this.colorMap=HA(this.srj,this.connMap)}getConstructorParams(){return[this.srj,this.opts]}currentPipelineStepIndex=0;_step(){let e=this.pipelineDef[this.currentPipelineStepIndex];if(!e)return void(this.solved=!0);if(this.activeSubSolver)return this.activeSubSolver.step(),void(this.activeSubSolver.solved?(this.endTimeOfPhase[e.solverName]=performance.now(),this.timeSpentOnPhase[e.solverName]=this.endTimeOfPhase[e.solverName]-this.startTimeOfPhase[e.solverName],e.onSolved?.(this),this.activeSubSolver=null,this.currentPipelineStepIndex++):this.activeSubSolver.failed&&(this.error=this.activeSubSolver?.error,this.failed=!0,this.activeSubSolver=null));let t=e.getConstructorParams(this);this.activeSubSolver=new e.solverClass(...t),this[e.solverName]=this.activeSubSolver,this.timeSpentOnPhase[e.solverName]=0,this.startTimeOfPhase[e.solverName]=performance.now()}solveUntilPhase(e){for(;this.getCurrentPhase()!==e;)this.step()}getCurrentPhase(){return this.pipelineDef[this.currentPipelineStepIndex]?.solverName??"none"}visualize(){if(!this.solved&&this.activeSubSolver)return this.activeSubSolver.visualize();let e=this.escapeViaLocationSolver?.visualize(),t=this.netToPointPairsSolver?.visualize(),n=this.nodeSolver?.visualize(),o=this.nodeDimensionSubdivisionSolver?.visualize(),i=this.nodeTargetMerger?.visualize(),r=this.singleLayerNodeMerger?.visualize(),s=this.strawSolver?.visualize(),a=this.edgeSolver?.visualize(),c=this.deadEndSolver?.visualize(),l=this.availableSegmentPointSolver?.visualize(),d=this.splitNodesIntoSingleLayerNodeSolver?.visualize(),u=this.portPointPathingSolver?.visualize(),h=this.multiSectionPortPointOptimizer?.visualize(),A=this.uniformPortDistributionSolver?.visualize(),m=this.highDensityRouteSolver?.visualize(),p=this.highDensityForceImproveSolver?.visualize(),g=this.highDensityRepairSolver?.visualize(),_=this.highDensityStitchSolver?.visualize(),f=this.traceSimplificationSolver?.visualize(),y=this.necessaryCrampedPortPointSolver?.visualize(),x=(this.highDensityRouteSolver?.visualize(),this.originalSrj),C=x.outline,I=[];if(I.push({points:[{x:x.bounds?.minX??-50,y:x.bounds?.minY??-50},{x:x.bounds?.maxX??50,y:x.bounds?.minY??-50},{x:x.bounds?.maxX??50,y:x.bounds?.maxY??50},{x:x.bounds?.minX??-50,y:x.bounds?.maxY??50},{x:x.bounds?.minX??-50,y:x.bounds?.minY??-50}],strokeColor:"rgba(255,0,0,0.25)"}),C&&C.length>=2){let w=C.map((T)=>({x:T.x,y:T.y}));w.push({...w[0]}),I.push({points:w,strokeColor:"rgba(0, 136, 255, 0.95)"})}let b=O6(x),P={points:[...x.connections.flatMap((w)=>w.pointsToConnect.map((T)=>({...T,layer:z6(T,x.layerCount),label:`${w.name} ${T.pcb_port_id??""}`})))],rects:[...(x.obstacles??[]).filter((w)=>!w.isCopperPour).map((w)=>({...w,fill:w.layers?.includes("top")?"rgba(255,0,0,0.25)":w.layers?.includes("bottom")?"rgba(0,0,255,0.25)":"rgba(255,0,0,0.25)",layer:OE(w,x.layerCount),label:b(w)}))],lines:I},E=L6({srj:x}),B=[Lc(P,E),e,t,n,o,i,r,s,a,c,l,y,d,u,h,A,m?Lc(P,m):null,p,g,_,f,this.solved?Lc({lines:I},L6({srj:this.originalSrj}),p1(this.getOutputSimpleRouteJson())):null].filter(Boolean);return Lc(...B)}preview(){if(this.highDensityRouteSolver){let e=[];for(let t=this.highDensityRouteSolver.routes.length-1;t>=0;t--){let n=this.highDensityRouteSolver.routes[t];if(e.push({points:n.route.map((o)=>({x:o.x,y:o.y})),strokeColor:this.colorMap[n.connectionName]}),e.length>200)break}return{lines:e}}return this.portPointPathingSolver?this.portPointPathingSolver.preview():this.netToPointPairsSolver?this.netToPointPairsSolver.visualize():this.escapeViaLocationSolver?this.escapeViaLocationSolver.visualize():this.preprocessSimpleRouteJsonSolver?this.preprocessSimpleRouteJsonSolver.visualize():{}}_getOutputHdRoutes(){let e=this.globalDrcForceImproveSolver?.getOutput();return e&&this.routesOnlyUsePreplacedVias(e)?e:this.traceWidthSolver?.getHdRoutesWithWidths()??this.traceSimplificationSolver?.simplifiedHdRoutes??this.highDensityRepairRoutes??this.highDensityForceImproveRoutes??this.highDensityStitchSolver.mergedHdRoutes}routesOnlyUsePreplacedVias(e){let t=l4t(this.originalSrj.obstacles);return t.size===0||e.every((n)=>n.vias.every((o)=>t.has(AV(o))))}getHighDensityNodePortPointsWithAssignableViasFirst(){return[...this.highDensityNodePortPoints??[]].sort((e,t)=>{let n=e.capacityMeshNodeId.startsWith("assignable-via:");return n===t.capacityMeshNodeId.startsWith("assignable-via:")?0:n?-1:1})}getPreplacedAssignableViaObstacles(){return this.originalSrj.obstacles.filter((e)=>e.netIsAssignable===!0&&(e.layers?.length??0)>1)}isFixedPreplacedViaRoute(e){let t=this.getPreplacedAssignableViaObstacles();return t.length!==0&&e.vias.length!==0&&t.some((n)=>[...e.route,...e.vias].every((o)=>jE(o,n)<=0))}getMovableHighDensityRouteIndexes(e){return e.map((t,n)=>this.isFixedPreplacedViaRoute(t)?-1:n).filter((t)=>t!==-1)}getMovableHighDensityRoutes(e){return this.getMovableHighDensityRouteIndexes(e).map((t)=>e[t])}mergeMovableHighDensityRoutesBack(e,t){let n=this.getMovableHighDensityRouteIndexes(e),o=[...e];for(let i=0;i<n.length;i++)o[n[i]]=t[i];return o}getOutputSimplifiedPcbTraces(){if(!this.solved||!this.highDensityRouteSolver)throw Error("Cannot get output before solving is complete");let e=[],t=this._getOutputHdRoutes();for(let n of this.netToPointPairsSolver?.newConnections??[]){let o=n.__netConnectionName??this.originalSrj.connections.find((r)=>r.name===n.name)?.__netConnectionName,i=t.filter((r)=>r.connectionName===n.name);for(let r=0;r<i.length;r++){let s=i[r],a={type:"pcb_trace",pcb_trace_id:`${n.name}_${r}`,connection_name:o??n.__rootConnectionNames?.[0]??n.name,route:Ex(s,this.srj.layerCount,{connectionPoints:n.pointsToConnect,defaultViaHoleDiameter:this.viaHoleDiameter,obstacles:this.srj.obstacles,connMap:this.connMap})};e.push(a)}}return e}getOutputSimpleRouteJson(){return{...this.originalSrj,traces:this.getOutputSimplifiedPcbTraces()}}},PYo=class extends Oi{bestRoutes;bestCost;completedPasses=0;cleanupPasses;simplifier;viaRemovalSolver;params;constructor(e){super(),this.params=e,this.bestRoutes=structuredClone([...e.config.hdRoutes]),this.bestCost=e.getCost(this.bestRoutes),this.cleanupPasses=e.effort<=1?e.viaRemovalPasses??1:Math.ceil(2*e.effort),this.MAX_ITERATIONS=1e8*Math.max(1,this.cleanupPasses),e.effort<=1?this.viaRemovalSolver=this.createViaRemovalSolver():(this.simplifier=new HI({...e.config,enableRoutedTraceDetours:!0,hdRoutes:structuredClone(this.bestRoutes)}),this.simplifier.simplificationPipelineLoops=2,this.simplifier.MAX_SIMPLIFICATION_PIPELINE_LOOPS=2+this.cleanupPasses,this.simplifier.MAX_ITERATIONS=this.MAX_ITERATIONS)}createViaRemovalSolver(){let e=this.params.config,t=new yOt({unsimplifiedHdRoutes:structuredClone(this.bestRoutes),otherHdRoutes:e.otherHdRoutes,obstacles:[...e.obstacles],colorMap:e.colorMap,layerCount:e.layerCount,connMap:e.connMap,outline:e.outline?[...e.outline]:void 0,geometryShortcutTraceMargin:0.1,geometryShortcutObstacleMargin:e.minTraceToPadEdgeClearance??0.15,enableGeometryShortcuts:!0,enableRoutedTraceDetours:!0,enableObstacleDetourShortcuts:e.enableCrossingViaReduction,preserveRouteEndpoints:e.preserveRouteEndpoints,terminalLayerIndicesByPcbPortId:e.terminalLayerIndicesByPcbPortId});return t.MAX_ITERATIONS=this.MAX_ITERATIONS,t}_step(){if(this.viaRemovalSolver){let i=this.viaRemovalSolver;if(i.step(),i.failed)return this.failed=!0,void(this.error=i.error);if(!i.solved)return;let r=i.getOptimizedHdRoutes();if(!r)throw Error("Via removal has no output");let s=this.params.getCost(r),a=s.vias<this.bestCost.vias&&this.params.isValid(r);return a&&(this.bestRoutes=structuredClone(r),this.bestCost=s),this.completedPasses++,a&&this.completedPasses<this.cleanupPasses?void(this.viaRemovalSolver=this.createViaRemovalSolver()):void(this.solved=!0)}let e=this.simplifier;if(!e)throw Error("Cleanup has no active simplifier");let{currentPhase:t,simplificationPipelineLoops:n}=e;if(e.step(),e.failed)return this.failed=!0,void(this.error=e.error);let o=e.simplificationPipelineLoops-2;if(this.completedPasses=o,e.currentPhase!==t||e.simplificationPipelineLoops!==n){let i=e.simplifiedHdRoutes,r=this.params.getCost(i);(r.vias<this.bestCost.vias||r.vias===this.bestCost.vias&&r.points<this.bestCost.points)&&this.params.isValid(i)&&(this.bestRoutes=structuredClone(i),this.bestCost=r)}this.solved=e.solved}getOutput(){if(!this.solved)throw Error("Cleanup is not complete");return this.bestRoutes}},j8={traceClearance:0.1,viaClearance:0.1},Mke=(e,t)=>{let n=new Set(t.flatMap((o)=>o.__replaces_pcb_trace_id?[o.__replaces_pcb_trace_id]:[]));return[...e.filter((o)=>!n.has(o.pcb_trace_id)),...t]},T_e=({inputSrj:e,srjWithPointPairs:t,routedTraces:n,drcOptions:o,includeBoardClearance:i=!1,connectivityMaps:r})=>{let s=e.traces??[],a=uHe(t,Mke(s,n),{minTraceWidth:e.minTraceWidth,minViaDiameter:e.minViaDiameter,originalSrj:e,includeOriginalConnections:!0,connectivityMaps:r});return i&&a.push(iOt({...e,minBoardEdgeClearance:e.minBoardEdgeClearance??0})),{circuitJson:a,...okt(a,{...j8,holeClearance:e.minTraceToHoleEdgeClearance,...o})}},F6t=(e,t)=>{let n=e.filter((o)=>(o.rootConnectionName??o.connectionName)===t);if(n.length!==0)return n.reduce((o,i)=>o+i.route.slice(1).reduce((r,s,a)=>{let c=i.route[a];return r+Math.hypot(s.x-c.x,s.y-c.y)},0),0)},vYo=(e,t)=>{let n=new Set(e.flatMap((o)=>o.maxLengthSkew===void 0?[]:o.connectionNames));return t.flatMap((o)=>{if(!n.has(o.name))return[];let i=o.pointsToConnect[0],r=o.pointsToConnect.at(-1);if(!i||!r||i===r)throw Error(`Length matching: bus connection "${o.name}" needs at least two points`);return[{...o,pointsToConnect:[i,r]}]})},EYo=class extends Oi{constructor(e){super(),this.params=e,this.differentialPairSolver=new OGt({hdRoutes:e.hdRoutes,differentialPairs:e.differentialPairs,traces:e.traces,obstacles:e.obstacles,bounds:e.bounds,layerCount:e.layerCount,minTraceToPadEdgeClearance:e.obstacleMargin}),this.MAX_ITERATIONS=this.differentialPairSolver.MAX_ITERATIONS+1e5+10}params;differentialPairSolver;busLengthMatchingSolver;outputHdRoutes;getSolverName(){return"LengthMatchingPostProcessingSolver"}_step(){if(!this.differentialPairSolver.solved)return this.differentialPairSolver.step(),void(this.differentialPairSolver.failed&&(this.failed=!0,this.error=this.differentialPairSolver.error));if(!this.busLengthMatchingSolver){let n=this.differentialPairSolver.getOutput().hdRoutes,o=(e=this.params.buses,t=n,e.flatMap((i)=>{let r=i.maxLengthSkew;if(r===void 0||i.connectionNames.length<2)return[];let s=i.connectionNames.map((c)=>{let l=F6t(t,c);if(l===void 0)throw Error(`Length matching: bus "${i.busId}" has no routed geometry for connection "${c}"`);return{connectionName:c,length:l}}),a=s.reduce((c,l)=>l.length>c.length?l:c);return s.flatMap((c)=>c.connectionName===a.connectionName?[]:[{connectionNames:[c.connectionName,a.connectionName],lengthTolerance:r}])}));return o.length===0?(this.outputHdRoutes=n,void(this.solved=!0)):void(this.busLengthMatchingSolver=new RGt({hdRoutes:n,originalConnections:vYo(this.params.buses,this.params.connections),differentialPairs:o,traces:this.params.traces,obstacles:this.params.obstacles,bounds:this.params.bounds,layerCount:this.params.layerCount,obstacleMargin:this.params.obstacleMargin}))}var e,t;if(this.busLengthMatchingSolver.step(),this.busLengthMatchingSolver.failed)return this.failed=!0,void(this.error=this.busLengthMatchingSolver.error);this.busLengthMatchingSolver.solved&&(this.outputHdRoutes=this.busLengthMatchingSolver.getOutput().matchedHdRoutes,((n,o)=>{for(let i of n){if(i.maxLengthSkew===void 0||i.connectionNames.length<2)continue;let r=i.connectionNames.map((a)=>{let c=F6t(o,a);if(c===void 0)throw Error(`Length matching: bus "${i.busId}" lost routed geometry for connection "${a}"`);return c}),s=Math.max(...r)-Math.min(...r);if(s>i.maxLengthSkew+0.000001)throw Error(`Length matching: bus "${i.busId}" routed length skew ${s.toFixed(4)}mm exceeds ${i.maxLengthSkew.toFixed(4)}mm`)}})(this.params.buses,this.outputHdRoutes),this.solved=!0)}getOutput(){if(!this.solved||!this.outputHdRoutes)throw Error("LengthMatchingPostProcessingSolver output requested before completion");return{hdRoutes:this.outputHdRoutes}}visualize(){return this.busLengthMatchingSolver?.visualize()??this.differentialPairSolver.visualize()}},xU=0.000000001,H6t=(e,t)=>Math.abs(e.x-t.x)<=xU&&Math.abs(e.y-t.y)<=xU&&e.z===t.z,MYo=(e,t)=>{if(e.length===0)return void e.push(...t.route);let n=e.at(-1);if(t.route[0]&&H6t(n,t.route[0]))e.push(...t.route.slice(1));else{if(!t.route.at(-1)||!H6t(n,t.route.at(-1)))throw Error(`Pipeline9 could not reconnect mutated preloaded segment "${t.connectionName}"`);e.push(...t.route.slice(0,-1).reverse())}},Bke=(e,t)=>{let n=e.preloadedRoutePositionStart??e.preloadedRouteIndex,o=t.preloadedRoutePositionStart??t.preloadedRouteIndex,i=e.preloadedRoutePositionEnd??n,r=t.preloadedRoutePositionEnd??o;return n-o||i-r||e.preloadedRouteIndex-t.preloadedRouteIndex||e.connectionName.localeCompare(t.connectionName)},BYo=(e)=>{let t=e.route.flatMap((n)=>n.route_type==="wire"||n.route_type==="through_obstacle"?[n.width]:[]);return t.length>0?Math.max(...t):void 0},mYt=({trace:e,updatedTraceRoutes:t,layerCount:n,defaultViaHoleDiameter:o,obstacles:i,connMap:r})=>{if(t.length===0)throw Error(`Pipeline9 lost every fixed route for mutated trace "${e.pcb_trace_id}"`);let s=[],a,c=0,l=0;for(let u of[...t].sort(Bke))MYo(s,u),c=Math.max(c,u.traceThickness),l=Math.max(l,u.viaDiameter),a??=u.rootConnectionName;let d={connectionName:e.connection_name,rootConnectionName:a,traceThickness:BYo(e)??c,viaDiameter:l,route:s,vias:s.slice(0,-1).flatMap((u,h)=>{let A=s[h+1];return u.z!==A.z&&Math.abs(u.x-A.x)<=xU&&Math.abs(u.y-A.y)<=xU?[{x:A.x,y:A.y}]:[]})};return Ex(d,n,{defaultViaHoleDiameter:o,obstacles:i,connMap:r})},dRe=(e,t)=>e.filter((n)=>{if(n.isThroughObstacle===!0)return!1;let{preloadedRoutePositionStart:o,preloadedRoutePositionEnd:i}=n;if(o===void 0||i===void 0)throw Error(`Pipeline9 fixed route "${n.connectionName}" is missing route-position metadata`);let r=Math.min(o,i),s=Math.max(o,i);return r>=t.routePositionStart-xU&&s<=t.routePositionEnd+xU}),wYo=({trace:e,originalTraceRoutes:t,updatedTraceRoutes:n,layerCount:o,defaultViaHoleDiameter:i,obstacles:r,connMap:s})=>{if(n.length===0)throw Error(`Pipeline9 lost every fixed route for mutated trace "${e.pcb_trace_id}"`);let a=((u)=>{let h=[],A=0;for(let m=0;m<u.route.length;m++)u.route[m]?.route_type==="through_obstacle"&&(A<m&&h.push({routePositionStart:A,routePositionEnd:m-1}),A=m+1);return A<u.route.length&&h.push({routePositionStart:A,routePositionEnd:u.route.length-1}),h})(e),c=n.filter((u)=>u.isThroughObstacle!==!0);for(let u of c)if(a.filter((h)=>dRe([u],h).includes(u)).length!==1)throw Error(`Pipeline9 fixed route "${u.connectionName}" crosses an immutable through-obstacle primitive`);let l=[],d=0;for(let u of a){l.push(...e.route.slice(d,u.routePositionStart));let h=dRe(t,u),A=dRe(n,u);if(h.length>0&&A.length===0)throw Error(`Pipeline9 lost every fixed route for an ordinary section of mutated trace "${e.pcb_trace_id}"`);l.push(...A.length>0?mYt({trace:e,updatedTraceRoutes:A,layerCount:o,defaultViaHoleDiameter:i,obstacles:r,connMap:s}):e.route.slice(u.routePositionStart,u.routePositionEnd+1)),d=u.routePositionEnd+1}return l.push(...e.route.slice(d)),l},wke=(e,t)=>{let n=new Set(t.map((o)=>o.pcb_trace_id));return e.map((o)=>{if(!n.has(o.pcb_trace_id))return n.add(o.pcb_trace_id),o;let i=`${o.pcb_trace_id}_routed`,r=i,s=2;for(;n.has(r);)r=`${i}_${s}`,s+=1;return n.add(r),{...o,pcb_trace_id:r}})},O6t=(e,t,n)=>{let o=(s)=>`${s.x}:${s.y}`,i=new Map;for(let s of t){let a=o(s.center),c=i.get(a)??[];c.push(s),i.set(a,c)}let r=new Map;for(let s of e)for(let a of s.pointsToConnect){if(!a.pcb_port_id)continue;let c=r.get(a.pcb_port_id)??new Set,l=Dy(a);for(let d of l)c.add(Wi(d,n));for(let d of i.get(o(a))??[])if(!(d.layers.length<=1)&&d.connectedTo.includes(a.pcb_port_id))for(let u of d.layers)c.add(Wi(u,n));r.set(a.pcb_port_id,c)}return r},Hge=(e,t)=>new Map(e.flatMap((n)=>{let o=t.getNetConnectedToId(n.connectionName)??(n.rootConnectionName?t.getNetConnectedToId(n.rootConnectionName)??(t.netMap[n.rootConnectionName]?n.rootConnectionName:void 0):void 0);return o?[[n.connectionName,o]]:[]})),lk=0.000000001,Tke=0.000001,z6t=(e,t)=>Math.abs(e.x-t.x)<=Tke&&Math.abs(e.y-t.y)<=Tke&&e.z===t.z,pYt=(e)=>new Map(e.map((t,n)=>[t.pcb_trace_id,n])),G6t=(e,t)=>{let n=e[0],o=e.at(-1);if(!n||!o)throw Error("Pipeline9 cannot split an empty preloaded route");if(n.z!==o.z)throw Error("Pipeline9 cannot partially split a preloaded layer transition");return{...n,x:n.x+(o.x-n.x)*t,y:n.y+(o.y-n.y)*t}},Y6t=({traces:e,fixedHdRoutes:t,sections:n})=>{let o=(({traces:i,sections:r})=>{let s=pYt(i),a=new Map;for(let c of r){let l=s.get(c.traceId);if(l===void 0)throw Error(`Pipeline9 hypergraph changed missing preloaded trace "${c.traceId}"`);let d=a.get(l)??[];d.push({start:Math.min(c.startRoutePosition,c.endRoutePosition),end:Math.max(c.startRoutePosition,c.endRoutePosition)}),a.set(l,d)}for(let c of a.values())c.sort((l,d)=>l.start-d.start||l.end-d.end);return a})({traces:e,sections:n});return t.flatMap((i)=>{let r=o.get(i.preloadedTraceIndex);if(!r?.length)return[i];let{preloadedRoutePositionStart:s,preloadedRoutePositionEnd:a}=i;if(s===void 0||a===void 0)throw Error(`Pipeline9 fixed route "${i.connectionName}" is missing route-position metadata`);if(Math.abs(a-s)<=lk)return r.some((l)=>l.start-lk<=s&&s<=l.end+lk)?[]:[i];let c=[{start:s,end:a}];for(let l of r)c=c.flatMap((d)=>{if(l.end<=d.start+lk||l.start>=d.end-lk)return[d];let u=[];return l.start>d.start+lk&&u.push({start:d.start,end:Math.min(l.start,d.end)}),l.end<d.end-lk&&u.push({start:Math.max(l.end,d.start),end:d.end}),u});return c.map((l,d)=>{let u=(l.start-s)/(a-s),h=(l.end-s)/(a-s);return{...i,connectionName:`${i.connectionName}_hypergraph_fixed_${d}`,preloadedRoutePositionStart:l.start,preloadedRoutePositionEnd:l.end,route:[G6t(i.route,u),G6t(i.route,h)],vias:[]}})})},TYo=({traces:e,sections:t,stitchedHdRoutes:n,layerCount:o})=>{let i=pYt(e);return t.map((r,s)=>{let a=i.get(r.traceId);if(a===void 0)throw Error(`Pipeline9 cannot materialize missing preloaded trace "${r.traceId}"`);let[c,l]=((m,p)=>{let g=m.connection.pointsToConnect.map((_)=>({x:_.x,y:_.y,z:Wi(k_(_),p)}));if(!g[0]||!g[1])throw Error(`Pipeline9 changed section "${m.connectionName}" is missing an endpoint`);return[g[0],g[1]]})(r,o),d=n.flatMap((m)=>{if(m.connectionName!==r.connectionName)return[];let p=(({route:g,sectionStart:_,sectionEnd:f})=>{let y=g.route[0],x=g.route.at(-1);if(!y||!x)return null;let C=y.z===_.z&&x.z===f.z,I=y.z===f.z&&x.z===_.z,b=C?bn(y,_)+bn(x,f):Number.POSITIVE_INFINITY,P=I?bn(y,f)+bn(x,_):Number.POSITIVE_INFINITY;return Number.isFinite(b)||Number.isFinite(P)?b<=P?{score:b,reverse:!1}:{score:P,reverse:!0}:null})({route:m,sectionStart:c,sectionEnd:l});return p?[{route:m,...p}]:[]});d.sort((m,p)=>m.score-p.score);let u=d[0],h=d[1];if(!u||h&&Math.abs(h.score-u.score)<=Tke)throw Error(`Pipeline9 expected one nearest stitched route for changed preloaded section "${r.connectionName}", got ${d.length}`);return{...(({route:m,reverse:p,sectionStart:g,sectionEnd:_})=>{let f=p?((y)=>{let x=[...y].reverse().map((C)=>{let{toNextSegmentType:I,...b}=C;return b});for(let C=0;C<y.length-1;C++){let I=y[C]?.toNextSegmentType;I&&(x[y.length-C-2]={...x[y.length-C-2],toNextSegmentType:I})}return x})(m.route):[...m.route];if(!f[0]||!f.at(-1))throw Error(`Pipeline9 cannot materialize empty route "${m.connectionName}"`);return z6t(f[0],g)||f.unshift(g),z6t(f.at(-1),_)||f.push(_),{...m,route:f}})({route:u.route,reverse:u.reverse,sectionStart:c,sectionEnd:l}),preloadedTraceIndex:a,preloadedRouteIndex:Number.MAX_SAFE_INTEGER-t.length+s,preloadedRoutePositionStart:r.startRoutePosition,preloadedRoutePositionEnd:r.endRoutePosition,isThroughObstacle:!1}})},UY=0.000001,AYt=({hdRoute:e,start:t,end:n})=>{if(Math.abs(t.x-n.x)<=UY&&Math.abs(t.y-n.y)<=UY)return"colocated";let o=e.vias.some((r)=>Math.abs(r.x-t.x)<=UY&&Math.abs(r.y-t.y)<=UY),i=e.vias.some((r)=>Math.abs(r.x-n.x)<=UY&&Math.abs(r.y-n.y)<=UY);if(!o&&!i)throw Error(`Pipeline9 route "${e.connectionName}" changes layers from z=${t.z} to z=${n.z} without an explicit via`);if(o===i)throw Error(`Pipeline9 route "${e.connectionName}" has an ambiguous layer transition between (${t.x}, ${t.y}) and (${n.x}, ${n.y})`);return o?"start":"end"},GHe=(e)=>e.map((t)=>{let n=[];for(let o of t.route){let i=n.at(-1);if(!i||i.z===o.z||i.toNextSegmentType==="through_obstacle"){n.push(o);continue}let r=AYt({hdRoute:t,start:i,end:o});r!=="colocated"?(r==="start"?n.push({x:i.x,y:i.y,z:o.z}):n.push({x:o.x,y:o.y,z:i.z}),n.push(o)):n.push(o)}return{...t,route:n}}),bV=(e)=>GHe(e).map((t)=>({...t,route:t.route.flatMap((n,o)=>{let i=t.route[o-1];return!i||i.z===n.z||i.toNextSegmentType==="through_obstacle"||i.x===n.x&&i.y===n.y?[n]:[{x:n.x,y:n.y,z:i.z},n]})})),DYo=(e)=>{let t=new Map;for(let n of e)n.regionId&&t.set(n.regionId,(t.get(n.regionId)??0)+n.route.length);return e.map((n)=>{if(!n.regionId||t.get(n.regionId)<4096)return n;let o=[],i=[];for(let[s,a]of n.route.entries()){for(;o.length>=2;){let c=o[o.length-2],l=o[o.length-1];if(c.z!==l.z||l.z!==a.z||c.toNextSegmentType||c.traceThickness!==void 0||Object.keys(l).some((p)=>p!=="x"&&p!=="y"&&p!=="z")||n.vias.some((p)=>Math.hypot(p.x-l.x,p.y-l.y)<0.000000001))break;let d=l.x-c.x,u=l.y-c.y,h=a.x-l.x,A=a.y-l.y,m=Math.hypot(a.x-c.x,a.y-c.y);if(m===0||d*h+u*A<0||Math.abs(d*A-u*h)>0.000000001*m)break;o.pop(),i.pop()}o.push(a),i.push(s)}let r=[];for(let s=0;s<o.length;s++){let a=o[s];if(o[s-1]){let c=i[s-1],l=i[s];l-c<64&&r.push(...n.route.slice(c+1,l))}r.push(a)}return{...n,route:r}})},h1=0.000000001,_Yt=(e)=>({minX:e.center.x-e.width/2,maxX:e.center.x+e.width/2,minY:e.center.y-e.height/2,maxY:e.center.y+e.height/2}),V6t=(e,t)=>e.x>=t.minX-h1&&e.x<=t.maxX+h1&&e.y>=t.minY-h1&&e.y<=t.maxY+h1,U6t=(e,t,n)=>n<=h1?e:n>=0.999999999?t:{x:e.x+(t.x-e.x)*n,y:e.y+(t.y-e.y)*n,z:e.z},NYo=(e,t,n)=>{let o=t.x-e.x,i=t.y-e.y;if(Math.abs(o)<=h1&&Math.abs(i)<=h1)return V6t(e,n)&&V6t(t,n)?{start:e,end:t}:null;let r=0,s=1,a=[[-o,e.x-n.minX],[o,n.maxX-e.x],[-i,e.y-n.minY],[i,n.maxY-e.y]];for(let[c,l]of a){if(Math.abs(c)<=h1){if(l<0)return null;continue}let d=l/c;if(c<0?r=Math.max(r,d):s=Math.min(s,d),r>s+h1)return null}return{start:U6t(e,t,r),end:U6t(e,t,s)}},RYo=(e)=>{let t=e.sourceRoutes[0],n=`pipeline9_fallback:${t.connectionName}`,o=`${n}:start`,i=`${n}:end`;return[{...e.start.point,portPointId:o,nextPortPointId:i,connectionName:t.connectionName,rootConnectionName:t.rootConnectionName},{...e.end.point,portPointId:i,prevPortPointId:o,connectionName:t.connectionName,rootConnectionName:t.rootConnectionName}]},Vee=(e,t)=>Math.abs(e.x-t.x)<=h1&&Math.abs(e.y-t.y)<=h1&&e.z===t.z,QYo=(e,t)=>e.sourceRoute.preloadedTraceIndex===t.sourceRoute.preloadedTraceIndex&&Vee(e.sourceRoute.route.at(-1),t.sourceRoute.route[0]),Qte=(e,t,n=new Set)=>{let o=new Map,i=[],r=new Set(e.portPoints.map((u)=>u.z)),s=t.map((u)=>((h,A)=>{let m=_Yt(A),p,g;for(let _=0;_<h.route.length-1;_++){let f=NYo(h.route[_],h.route[_+1],m);f&&(p??={segmentIndex:_,point:f.start},g={segmentIndex:_,point:f.end})}return p&&g?{sourceRoute:h,start:p,end:g}:null})(u,e)).filter((u)=>u!==null),a=s.filter((u)=>u.sourceRoute.isThroughObstacle!==!0&&(((h,A)=>A.size===0||[h.start.point,...h.sourceRoute.route.slice(h.start.segmentIndex+1,h.end.segmentIndex+1),h.end.point].some((m)=>A.has(m.z)))(u,r)||n.has(u.sourceRoute.connectionName))).sort((u,h)=>u.sourceRoute.preloadedTraceIndex-h.sourceRoute.preloadedTraceIndex||u.sourceRoute.preloadedRouteIndex-h.sourceRoute.preloadedRouteIndex),c=new Set(a.map((u)=>u.sourceRoute)),l=s.map((u)=>u.sourceRoute).filter((u)=>!c.has(u)),d=[];for(let u=0;u<a.length;u++){let h=a[u],A=a[u-1],m=d.at(-1);A&&m&&QYo(A,h)?(m.sourceRoutes.push(h.sourceRoute),m.end=h.end):d.push({sourceRoutes:[h.sourceRoute],start:h.start,end:h.end})}for(let u of d){if(Vee(u.start.point,u.end.point))continue;let h=u.sourceRoutes[0].connectionName;if(o.has(h))throw Error(`Pipeline9 regional fallback found duplicate fixed route section identity "${h}"`);o.set(h,u),i.push(RYo(u))}return{nodeWithPortPoints:{...e,portPoints:[...e.portPoints,...i.flatMap((u)=>u)],portPointsInPairs:[...e.portPointsInPairs??[],...i]},fixedRouteSectionsByConnectionName:o,fixedObstacleRoutes:l}},kYo=(e)=>{let t=[];for(let n=0;n<e.length-1;n++){let o=e[n],i=e[n+1];o.z!==i.z&&Math.abs(o.x-i.x)<=h1&&Math.abs(o.y-i.y)<=h1&&t.push({x:i.x,y:i.y})}return t},YHe=(e,t)=>gYt({section:e,replacement:t,sourceMutationMasks:new Map,replacementIsMutated:!1}).route,gYt=({section:e,replacement:t,sourceMutationMasks:n,replacementIsMutated:o})=>{let i=e.sourceRoutes[0],r=e.sourceRoutes.at(-1),s=((A,m)=>{let p=A.route,g=p[0],_=p.at(-1);if(!g||!_)throw Error(`Pipeline9 regional fallback produced an empty replacement for "${m.sourceRoutes[0].connectionName}"`);let f=Math.hypot(g.x-m.start.point.x,g.y-m.start.point.y)+Math.hypot(_.x-m.end.point.x,_.y-m.end.point.y);return Math.hypot(_.x-m.start.point.x,_.y-m.start.point.y)+Math.hypot(g.x-m.end.point.x,g.y-m.end.point.y)<f?[...p].reverse():p})(t,e),a=[],c=[],l=(A,m)=>{let p=n.get(A.connectionName);if(p&&p.length!==A.route.length-1)throw Error(`Pipeline9 fixed route mutation mask for "${A.connectionName}" has ${p.length} segments, expected ${A.route.length-1}`);return p?.[m]??!1},d=(A,m)=>{let p=a.at(-1);if(p){if(!Vee(p,A)){if(p.z!==A.z&&(Math.abs(p.x-A.x)>h1||Math.abs(p.y-A.y)>h1)){let g={...A,z:p.z};Vee(p,g)||(a.push(g),c.push(m))}Vee(a.at(-1),A)||(a.push(A),c.push(m))}}else a.push(A)};d(i.route[0],!1);for(let A=1;A<=e.start.segmentIndex;A++)d(i.route[A],l(i,A-1));d(e.start.point,l(i,e.start.segmentIndex));let u=c.length;for(let A of s.slice(1,-1))d(A,o);d(e.end.point,o);let h=c.length>u;for(let A=e.end.segmentIndex+1;A<r.route.length;A++)d(r.route[A],l(r,A-1));if(c.length!==a.length-1)throw Error(`Pipeline9 produced an invalid mutation mask while splicing "${i.connectionName}"`);return{route:{...i,preloadedRoutePositionStart:i.preloadedRoutePositionStart,preloadedRoutePositionEnd:r.preloadedRoutePositionEnd,traceThickness:Math.max(...e.sourceRoutes.map((A)=>A.traceThickness)),viaDiameter:Math.max(...e.sourceRoutes.map((A)=>A.viaDiameter)),route:a,vias:kYo(a)},mutatedSegments:c,replacementProducedSegment:h}},Oge=0.000001,zge=(e,t)=>Math.abs(e.x-t.x)<=Oge&&Math.abs(e.y-t.y)<=Oge&&e.z===t.z,W6t=(e,t)=>{for(let n of t)e.at(-1)&&zge(e.at(-1),n)||e.push(n)},fYt=(e)=>e.slice(0,-1).flatMap((t,n)=>{let o=e[n+1];return t.z!==o.z&&Math.abs(t.x-o.x)<=Oge&&Math.abs(t.y-o.y)<=Oge?[{x:o.x,y:o.y}]:[]}),X6t=(e)=>{let{preloadedRoutePositionStart:t,preloadedRoutePositionEnd:n}=e;if(t===void 0||n===void 0)throw Error(`Pipeline9 fixed route "${e.connectionName}" is missing route-position metadata`);return{start:Math.min(t,n),end:Math.max(t,n)}},yYt=(e,t)=>{let n=X6t(e),o=X6t(t);return e.preloadedTraceIndex-t.preloadedTraceIndex||n.start-o.start||n.end-o.end||e.preloadedRouteIndex-t.preloadedRouteIndex||e.connectionName.localeCompare(t.connectionName)},xYt=(e,t)=>{let n=e.route.at(-1),o=t.route[0];return Boolean(n&&o&&e.preloadedTraceIndex===t.preloadedTraceIndex&&zge(n,o))},K6t=(e,t)=>{let n=e.preloadedRoutePositionStart??e.preloadedRouteIndex;return n+((e.preloadedRoutePositionEnd??e.preloadedRouteIndex)-n)*t/(e.route.length-1)},j6t=(e,t)=>e.route[t].z!==e.route[t+1].z,LYo=({updatedFixedRoutes:e,regionalMutationMasks:t})=>{let n=[],o=(({updatedFixedRoutes:i,regionalMutationMasks:r})=>{let s=new Map;for(let d of i){if(d.route.length===0)throw Error(`Pipeline9 cannot normalize empty fixed route "${d.connectionName}"`);let u=d.route.length-1;if(s.has(d.connectionName))throw Error(`Pipeline9 cannot normalize duplicate fixed route "${d.connectionName}"`);let h=r.get(d.connectionName);if(h&&h.length!==u)throw Error(`Pipeline9 fixed route mutation mask for "${d.connectionName}" has ${h.length} segments, expected ${u}`);let A=d.isThroughObstacle!==!0&&(d.jumpers?.length??0)===0;s.set(d.connectionName,Array.from({length:u},(m,p)=>A&&(h?.[p]??!1)))}let a=[],c=()=>{for(;a[0]&&j6t(a[0].route,a[0].segmentIndex);){let d=a.shift();s.get(d.route.connectionName)[d.segmentIndex]=!1}for(;a.at(-1)&&j6t(a.at(-1).route,a.at(-1).segmentIndex);){let d=a.pop();s.get(d.route.connectionName)[d.segmentIndex]=!1}a=[]},l;for(let d of[...i].sort(yYt)){l&&!xYt(l,d)&&c();let u=s.get(d.connectionName);if(u.length!==0){for(let h=0;h<u.length;h++)u[h]?a.push({route:d,segmentIndex:h}):c();l=d}else c(),l=d}return c(),s})({updatedFixedRoutes:e,regionalMutationMasks:t});for(let i of e){let r=i.route.length-1,s=o.get(i.connectionName);if(r===0){n.push({route:i,mutated:!1});continue}let a=[];for(let c=0;c<r;c++){let l=s[c],d=a.at(-1);d?.mutated===l?d.end=c+1:a.push({start:c,end:c+1,mutated:l})}for(let[c,l]of a.entries()){let d=i.route.slice(l.start,l.end+1),u={...i,connectionName:a.length===1?i.connectionName:`${i.connectionName}_mutation_fragment_${c}`,preloadedRouteIndex:i.preloadedRouteIndex+c/(a.length+1),preloadedRoutePositionStart:K6t(i,l.start),preloadedRoutePositionEnd:K6t(i,l.end),route:d,vias:fYt(d)};n.push({route:u,mutated:l.mutated})}}return n},FYo=({updatedFixedRoutes:e,regionalMutationMasks:t})=>{let n=LYo({updatedFixedRoutes:e,regionalMutationMasks:t}),o=n.map(({route:a})=>a),i=((a)=>{let c=[],l;for(let d of[...a].sort((u,h)=>yYt(u.route,h.route))){let u=d.route;if(!d.mutated){l=void 0;continue}let h=u.route[0],A=u.route.at(-1);if(!h||!A||u.route.length<2)throw Error(`Pipeline9 cannot simplify empty fixed route "${u.connectionName}"`);let m=l?.sourceRoutes.at(-1);l&&m&&xYt(m,u)?(l.sourceRoutes.push(u),l.end={segmentIndex:u.route.length-2,point:A}):(l={sourceRoutes:[u],start:{segmentIndex:0,point:h},end:{segmentIndex:u.route.length-2,point:A}},c.push(l))}return c})(n),r=i.map((a,c)=>{let l=((d,u)=>{let h=d.sourceRoutes[0],A=d.sourceRoutes.at(-1);if(!h||!A)throw Error("Pipeline9 cannot simplify an empty mutation section");let m=[d.start.point];for(let[p,g]of d.sourceRoutes.entries()){let _=p===0,f=p===d.sourceRoutes.length-1,y=_?d.start.segmentIndex+1:0,x=f?d.end.segmentIndex+1:g.route.length;W6t(m,g.route.slice(y,x))}if(W6t(m,[d.end.point]),m.length<2)throw Error(`Pipeline9 mutation section for "${h.connectionName}" has no routable span`);return{connectionName:`pipeline9_mutated_preload_${h.preloadedTraceIndex}_${u}`,rootConnectionName:h.rootConnectionName,traceThickness:Math.max(...d.sourceRoutes.map((p)=>p.traceThickness)),viaDiameter:Math.max(...d.sourceRoutes.map((p)=>p.viaDiameter)),route:m,vias:fYt(m)}})(a,c);return{connectionName:l.connectionName,section:a,hdRoute:l}}),s=new Set(r.flatMap(({section:a})=>a.sourceRoutes.map((c)=>c.connectionName)));return{sections:r,immutableHdRoutes:o.filter((a)=>!s.has(a.connectionName)),normalizedFixedRoutes:o}},uRe=0.000000001,E6=(e,t,n,o,i)=>{let r=i.getNetConnectedToId(e.connection_name)??e.connection_name,s=[],a=(c,l,d=o,u=[],h,A,m=!1)=>{c.length<2||s.push({connectionName:`${e.connection_name}_fixed_${t}_${s.length}`,rootConnectionName:r,preloadedTraceIndex:t,preloadedRouteIndex:s.length,preloadedRoutePositionStart:h,preloadedRoutePositionEnd:A,isThroughObstacle:m,traceThickness:Math.max(uRe,l),viaDiameter:Math.max(uRe,d),route:c,vias:u})};for(let c=0;c<e.route.length;c++){let l=e.route[c];if(l.route_type==="via"){a([{x:l.x,y:l.y,z:Wi(l.from_layer,n)},{x:l.x,y:l.y,z:Wi(l.to_layer,n)}],uRe,l.via_diameter??o,[{x:l.x,y:l.y}],c,c);continue}if(l.route_type==="through_obstacle"){let u=Wi(l.from_layer,n),h=Wi(l.to_layer,n);for(let A=Math.min(u,h);A<=Math.max(u,h);A++)a([{...l.start,z:A},{...l.end,z:A}],l.width,o,[],c,c+1,!0);continue}let d=e.route[c+1];l.route_type==="wire"&&d?.route_type==="wire"&&l.layer===d.layer&&a([{x:l.x,y:l.y,z:Wi(l.layer,n)},{x:d.x,y:d.y,z:Wi(d.layer,n)}],Math.max(l.width,d.width),o,[],c,c+1)}return s};function I8(e,t){return{x:e.a*t.x+e.b*t.y+e.c,y:e.d*t.x+e.e*t.y+e.f}}var HYo={highResolutionCellSize:0.1,highResolutionCellThickness:8,lowResolutionCellSize:0.4,traceMargin:0.15,traceThickness:0.1,viaDiameter:0.3,viaMinDistFromBorder:0.15},OYo={...HYo},Dke=(e,t,n)=>{let[o,i]=e;if(o===i)return;let r=((s,a)=>{let c=s.portPointId??`${s.connectionName}:${s.x}:${s.y}:${s.z}`,l=a.portPointId??`${a.connectionName}:${a.x}:${a.y}:${a.z}`;return c<l?`${c}|${l}`:`${l}|${c}`})(o,i);t.has(r)||(t.add(r),n.push(e))},q6t=(e,t,n)=>{for(let o=0;o<e.length-1;o++)Dke([e[o],e[o+1]],t,n)},zYo=(e)=>{let t=[],n=new Set,o=((s)=>{let a=new Map;for(let c of s)c.portPointId&&a.set(c.portPointId,c);return a})(e);for(let s of e){if(s.prevPortPointId){let a=o.get(s.prevPortPointId);a&&a.connectionName===s.connectionName&&Dke([a,s],n,t)}if(s.nextPortPointId){let a=o.get(s.nextPortPointId);a&&a.connectionName===s.connectionName&&Dke([s,a],n,t)}}if(t.length===0)return q6t(e,n,t),t;let i=((s)=>{let a=new Set;for(let[c,l]of s)c.portPointId&&a.add(c.portPointId),l.portPointId&&a.add(l.portPointId);return a})(t),r=e.filter((s)=>!s.portPointId||!i.has(s.portPointId));return q6t(r,n,t),t};function A_e(e,t,n){return Math.max(t,Math.min(n,e))}var hRe=["left","top","right","bottom","middle"],GYo=class{f=new Float64Array(1024);seq=new Uint32Array(1024);id=new Int32Array(1024);n=0;push(e,t,n){this.ensureCapacity(this.n+1);let o=this.n++;for(this.f[o]=e,this.seq[o]=t,this.id[o]=n;o>0;){let i=o-1>>1;if(this.less(i,o))break;this.swap(o,i),o=i}}pop(){let e=this.id[0];return this.n--,this.n>0&&(this.f[0]=this.f[this.n],this.seq[0]=this.seq[this.n],this.id[0]=this.id[this.n],this.siftDown(0)),e}get size(){return this.n}clear(){this.n=0}ensureCapacity(e){if(e<=this.f.length)return;let t=this.f.length;for(;t<e;)t*=2;let n=new Float64Array(t);n.set(this.f),this.f=n;let o=new Uint32Array(t);o.set(this.seq),this.seq=o;let i=new Int32Array(t);i.set(this.id),this.id=i}siftDown(e){for(;;){let t=2*e+1,n=t+1;if(t>=this.n)return;let o=t;if(n<this.n&&!this.less(t,n)&&(o=n),this.less(e,o))return;this.swap(e,o),e=o}}less(e,t){let n=this.f[e],o=this.f[t];return n!==o?n<o:this.seq[e]<this.seq[t]}swap(e,t){let n=this.f[e];this.f[e]=this.f[t],this.f[t]=n;let o=this.seq[e];this.seq[e]=this.seq[t],this.seq[t]=o;let i=this.id[e];this.id[e]=this.id[t],this.id[t]=i}},YYo=class{z=new Int32Array(1024);cellId=new Int32Array(1024);g=new Float64Array(1024);parent=new Int32Array(1024);ripHead=new Int32Array(1024).fill(-1);ripCount=new Int32Array(1024);length=0;clear(){this.length=0}push(e,t,n,o,i,r){this.ensureCapacity(this.length+1);let s=this.length++;return this.z[s]=e,this.cellId[s]=t,this.g[s]=n,this.parent[s]=o,this.ripHead[s]=i,this.ripCount[s]=r,s}ensureCapacity(e){if(e<=this.z.length)return;let t=this.z.length;for(;t<e;)t*=2;let n=new Int32Array(t);n.set(this.z),this.z=n;let o=new Int32Array(t);o.set(this.cellId),this.cellId=o;let i=new Float64Array(t);i.set(this.g),this.g=i;let r=new Int32Array(t);r.set(this.parent),this.parent=r;let s=new Int32Array(t);s.fill(-1),s.set(this.ripHead.subarray(0,this.length)),this.ripHead=s;let a=new Int32Array(t);a.set(this.ripCount.subarray(0,this.length)),this.ripCount=a}},VYo=class{connId=new Int32Array(1024);prev=new Int32Array(1024).fill(-1);length=0;clear(){this.length=0}append(e,t){this.ensureCapacity(this.length+1);let n=this.length++;return this.connId[n]=t,this.prev[n]=e,n}contains(e,t){for(let n=e;n>=0;n=this.prev[n])if(this.connId[n]===t)return!0;return!1}collect(e,t){t.length=0;for(let n=e;n>=0;n=this.prev[n])t.push(this.connId[n])}ensureCapacity(e){if(e<=this.connId.length)return;let t=this.connId.length;for(;t<e;)t*=2;let n=new Int32Array(t);n.set(this.connId),this.connId=n;let o=new Int32Array(t);o.fill(-1),o.set(this.prev.subarray(0,this.length)),this.prev=o}};function mRe(e,t){return t??e.replace(/_mst\d+$/,"")}function pRe(e,t){let n=e.x-t.center.x,o=e.y-t.center.y,i=Math.cos(-t.rotationRadians),r=Math.sin(-t.rotationRadians);return{x:n*i-o*r,y:n*r+o*i}}function J6t(e){return{minX:-e.width/2,minY:-e.height/2,maxX:e.width/2,maxY:e.height/2}}function bx(e,t,n){return Math.max(t,Math.min(n,e))}function WY(e,t){for(let n=0;n<e.length;n++)if(e[n]===t)return;e.push(t)}function $6t(e,t){for(let n=0;n<e.length;n++)if(e[n].cellId===t.cellId)return;e.push(t)}function jZ(e,t,n,o,i,r,s){let a=e-bx(e,o,r),c=t-bx(t,i,s);return a*a+c*c<=n*n}function Qk(e){let t=e.segmentEnd.x-e.segmentStart.x,n=e.segmentEnd.y-e.segmentStart.y,o=t**2+n**2;if(o===0)return(e.point.x-e.segmentStart.x)**2+(e.point.y-e.segmentStart.y)**2;let i=bx(((e.point.x-e.segmentStart.x)*t+(e.point.y-e.segmentStart.y)*n)/o,0,1),r=e.segmentStart.x+i*t,s=e.segmentStart.y+i*n;return(e.point.x-r)**2+(e.point.y-s)**2}function Pee(e){let t=bx(e.point.x,e.rect.minX,e.rect.maxX),n=bx(e.point.y,e.rect.minY,e.rect.maxY),o=e.point.x-t,i=e.point.y-n;return o*o+i*i}function vee(e){return(e.second.x-e.first.x)*(e.third.y-e.first.y)-(e.second.y-e.first.y)*(e.third.x-e.first.x)}function __e(e){return!(Math.abs(vee({first:e.segmentStart,second:e.segmentEnd,third:e.point}))>0.000000001)&&(e.point.x>=Math.min(e.segmentStart.x,e.segmentEnd.x)&&e.point.x<=Math.max(e.segmentStart.x,e.segmentEnd.x)&&e.point.y>=Math.min(e.segmentStart.y,e.segmentEnd.y)&&e.point.y<=Math.max(e.segmentStart.y,e.segmentEnd.y))}function CYt(e){let t=vee({first:e.firstStart,second:e.firstEnd,third:e.secondStart}),n=vee({first:e.firstStart,second:e.firstEnd,third:e.secondEnd}),o=vee({first:e.secondStart,second:e.secondEnd,third:e.firstStart}),i=vee({first:e.secondStart,second:e.secondEnd,third:e.firstEnd});return t*n<0&&o*i<0||(__e({point:e.secondStart,segmentStart:e.firstStart,segmentEnd:e.firstEnd})||__e({point:e.secondEnd,segmentStart:e.firstStart,segmentEnd:e.firstEnd})||__e({point:e.firstStart,segmentStart:e.secondStart,segmentEnd:e.secondEnd})||__e({point:e.firstEnd,segmentStart:e.secondStart,segmentEnd:e.secondEnd}))}function UYo(e){return CYt(e)?0:Math.min(Qk({point:e.firstStart,segmentStart:e.secondStart,segmentEnd:e.secondEnd}),Qk({point:e.firstEnd,segmentStart:e.secondStart,segmentEnd:e.secondEnd}),Qk({point:e.secondStart,segmentStart:e.firstStart,segmentEnd:e.firstEnd}),Qk({point:e.secondEnd,segmentStart:e.firstStart,segmentEnd:e.firstEnd}))}function Z6t(e){if(function(n){if(Pee({point:n.segmentStart,rect:n.rect})===0||Pee({point:n.segmentEnd,rect:n.rect})===0)return!0;let o=[{x:n.rect.minX,y:n.rect.minY},{x:n.rect.maxX,y:n.rect.minY},{x:n.rect.maxX,y:n.rect.maxY},{x:n.rect.minX,y:n.rect.maxY}];for(let i=0;i<o.length;i++){let r=(i+1)%o.length;if(CYt({firstStart:n.segmentStart,firstEnd:n.segmentEnd,secondStart:o[i],secondEnd:o[r]}))return!0}return!1}(e))return!0;let t=e.radius**2;if(Pee({point:e.segmentStart,rect:e.rect})<=t||Pee({point:e.segmentEnd,rect:e.rect})<=t)return!0;return[{x:e.rect.minX,y:e.rect.minY},{x:e.rect.maxX,y:e.rect.minY},{x:e.rect.maxX,y:e.rect.maxY},{x:e.rect.minX,y:e.rect.maxY}].some((n)=>Qk({point:n,segmentStart:e.segmentStart,segmentEnd:e.segmentEnd})<=t)}var WYo=class extends Js{getSolverName(){return"HighDensitySolverB01"}nodeWithPortPoints;obstacles;highResolutionCellSize;highResolutionCellThickness;lowResolutionCellSize;viaDiameter;MAX_RIPS;maxCellCount;traceThickness;traceMargin;obstacleClearanceMargin;viaMinDistFromBorder;showPenaltyMap;showUsedCellMap;effort;stepMultiplier;hyperParameters;initialPenaltyFn;boundsMinX;boundsMaxX;boundsMinY;boundsMaxY;gridToBoundsTransform;availableZ;zToLayer;layerToZ;layers;fineRows;fineCols;lowScale;bandRows;bandCols;regions;planeSize;cellCenterX;cellCenterY;cellMinX;cellMinY;cellMaxX;cellMaxY;cellWidth;cellHeight;cellRegion;cellRow;cellCol;viaAllowed;neighborOffset;neighborIds;neighborCosts;usedCellsFlat;sharedCellsFlat;portOwnerFlat;penalty2d;ripStateBuckets;visitedStamp;bestGStamp;bestGValue;visitedFlatStamp;sharedCrossRootPortFlat;stamp=0;connNameToId;connIdToName;connIdToRootNet;overlapFriendlyRootNets;usedIndicesByConn;unsolvedSegs;solvedRoutes;activeConnSeg=null;activeConnId=-1;nodePool;heap;ripChain;seqCounter=0;_viaOccs=[];_cellOccs=[];_rippedIds=[];ripCount;totalRipEvents=0;searchIterations=0;consecutiveSkips=0;penaltyCap;baseSearchBudgetIters;_moveCost=0;_moveRippedHead=-1;_moveRipCount=0;traceKeepoutRadius;viaKeepoutRadius;obstacleTraceRootIdsFlat;obstacleViaRootIdsByCell;obstacleRootNameToId;obstacleRootNames;obstacleTracePrimitives;obstacleViaPrimitives;obstacleRectPrimitives;obstacleTraceBlockedCellCount=0;obstacleViaBlockedCellCount=0;get unsolvedConnections(){return this.unsolvedSegs}get solvedConnectionsMap(){let e=new Map;for(let t=0;t<this.solvedRoutes.length;t++){let n=this.getSolvedRoutesForConn(t);n.length>0&&e.set(t,n)}return e}get activeConnection(){if(!this.activeConnSeg)return null;let e=this.activeConnSeg.startCellId,t=this.activeConnSeg.endCellId;return{connectionName:this.connIdToName[this.activeConnSeg.connId]??"",start:{cellId:e,region:hRe[this.cellRegion[e]],row:this.cellRow[e],col:this.cellCol[e],x:this.cellCenterX[e],y:this.cellCenterY[e],z:this.activeConnSeg.startZ},end:{cellId:t,region:hRe[this.cellRegion[t]],row:this.cellRow[t],col:this.cellCol[t],x:this.cellCenterX[t],y:this.cellCenterY[t],z:this.activeConnSeg.endZ}}}get openSet(){return{length:this.heap?.size??0}}get gridStats(){return{cells:this.planeSize||0,layers:this.layers||0,states:(this.planeSize||0)*(this.layers||0),ripStateBuckets:this.ripStateBuckets||0,neighborEdges:this.neighborIds?.length??0,regionCounts:this.regions?Object.fromEntries(this.regions.map((e)=>[e.name,e.rows*e.cols])):{},obstacleTraceBlockedCells:this.obstacleTraceBlockedCellCount,obstacleViaBlockedCells:this.obstacleViaBlockedCellCount,obstacleRootCount:this.obstacleRootNames?.length??0,obstacleRectCount:this.obstacleRectPrimitives?.length??0}}constructor(e){super(),this.nodeWithPortPoints=e.nodeWithPortPoints,this.obstacles=e.obstacles,this.highResolutionCellSize=e.highResolutionCellSize??0.1,this.highResolutionCellThickness=Math.max(1,Math.floor(e.highResolutionCellThickness??8)),this.lowResolutionCellSize=e.lowResolutionCellSize??0.4,this.viaDiameter=e.viaDiameter,this.maxCellCount=e.maxCellCount,this.traceThickness=e.traceThickness??0.1,this.traceMargin=e.traceMargin??0.15,this.obstacleClearanceMargin=e.obstacleClearanceMargin??0,this.viaMinDistFromBorder=e.viaMinDistFromBorder??0.15,this.showPenaltyMap=e.showPenaltyMap??!1,this.showUsedCellMap=e.showUsedCellMap??!1,this.effort=e.effort??1,this.stepMultiplier=Math.max(1,Math.floor(e.stepMultiplier??1)),this.hyperParameters={shuffleSeed:0,ripCost:8,ripTracePenalty:0.5,ripViaPenalty:0.75,viaBaseCost:0.1,greedyMultiplier:1.5,sameRootObstacleCostMultiplier:1,...e.hyperParameters},this.MAX_ITERATIONS=1e8,this.MAX_RIPS=200,this.initialPenaltyFn=e.initialPenaltyFn}getConstructorParams(){return[{nodeWithPortPoints:this.nodeWithPortPoints,obstacles:this.obstacles,highResolutionCellSize:this.highResolutionCellSize,highResolutionCellThickness:this.highResolutionCellThickness,lowResolutionCellSize:this.lowResolutionCellSize,viaDiameter:this.viaDiameter,maxCellCount:this.maxCellCount,stepMultiplier:this.stepMultiplier,traceThickness:this.traceThickness,traceMargin:this.traceMargin,obstacleClearanceMargin:this.obstacleClearanceMargin,viaMinDistFromBorder:this.viaMinDistFromBorder,showPenaltyMap:this.showPenaltyMap,showUsedCellMap:this.showUsedCellMap,effort:this.effort,hyperParameters:this.hyperParameters,initialPenaltyFn:this.initialPenaltyFn}]}_setup(){let{nodeWithPortPoints:e}=this,{width:t,height:n,center:o}=e;if(t>15||n>15)return this.error=`HighDensitySolverB01 only supports routing windows up to 15x15mm; received ${t}x${n}mm`,void(this.failed=!0);let i=this.lowResolutionCellSize/this.highResolutionCellSize,r=Math.round(i);if(!Number.isFinite(i)||i<=0||Math.abs(i-r)>0.000000001)return this.error="lowResolutionCellSize must be a positive integer multiple of highResolutionCellSize",void(this.failed=!0);this.lowScale=Math.max(1,r),this.availableZ=e.availableZ??[...new Set(e.portPoints.map((A)=>A.z))].sort((A,m)=>A-m),this.layers=this.availableZ.length,this.zToLayer=new Map,this.layerToZ=new Map;for(let A=0;A<this.availableZ.length;A++){let m=this.availableZ[A];this.zToLayer.set(m,A),this.layerToZ.set(A,m)}this.boundsMinX=o.x-t/2,this.boundsMaxX=o.x+t/2,this.boundsMinY=o.y-n/2,this.boundsMaxY=o.y+n/2,this.traceKeepoutRadius=this.traceMargin+this.traceThickness/2,this.viaKeepoutRadius=this.viaDiameter/2+this.traceKeepoutRadius,this.buildFiveRegionGrid(t,n),this.gridToBoundsTransform=this.computeGridToBoundsTransform();let s=this.layers*this.planeSize;if(this.maxCellCount!==void 0&&s>this.maxCellCount)return this.error=`Cell count ${s} exceeds maxCellCount ${this.maxCellCount}`,void(this.failed=!0);this.connNameToId=new Map,this.connIdToName=[],this.connIdToRootNet=[],this.overlapFriendlyRootNets=new Set,this.unsolvedSegs=this.buildConnectionSegs(),this.penalty2d=new Float64Array(this.planeSize);let a=t>0?1/t:0,c=n>0?1/n:0;for(let A=0;A<this.planeSize;A++){let m=0;this.initialPenaltyFn&&(m+=this.initialPenaltyFn({x:this.cellCenterX[A],y:this.cellCenterY[A],px:(this.cellCenterX[A]-this.boundsMinX)*a,py:(this.cellCenterY[A]-this.boundsMinY)*c,cellId:A,region:hRe[this.cellRegion[A]],row:this.cellRow[A],col:this.cellCol[A]})),this.penalty2d[A]=m}this.usedCellsFlat=new Int32Array(s).fill(-1),this.sharedCellsFlat=Array.from({length:s},()=>{}),this.portOwnerFlat=new Int32Array(s).fill(-1),this.sharedCrossRootPortFlat=new Uint8Array(s),this.obstacleTraceRootIdsFlat=Array.from({length:s},()=>{}),this.obstacleViaRootIdsByCell=Array.from({length:this.planeSize},()=>{}),this.obstacleRootNameToId=new Map,this.obstacleRootNames=[],this.obstacleTracePrimitives=[],this.obstacleViaPrimitives=[],this.obstacleRectPrimitives=[];let l=this.rasterizeObstacles();if(l)return this.error=l,void(this.failed=!0);this.ripStateBuckets=1;let d=s;this.visitedStamp=new Uint32Array(d),this.bestGStamp=new Uint32Array(d),this.bestGValue=new Float64Array(d),this.visitedFlatStamp=new Uint32Array(s),this.stamp=0;let u=new Map;for(let A of this.nodeWithPortPoints.portPoints){let m=this.connNameToId.get(A.connectionName);if(m===void 0)continue;let p=this.pointToCell(A),g=p.z*this.planeSize+p.cellId,_=this.connIdToRootNet[m],f=u.get(g);f===void 0?u.set(g,_):f!==_&&(this.sharedCrossRootPortFlat[g]=1);let y=this.portOwnerFlat[g];this.portOwnerFlat[g]=y===-1||y===m?m:-2}this.solvedRoutes=[],this.usedIndicesByConn=[],this.ripCount=[],this.consecutiveSkips=0,this.penaltyCap=0.5*this.hyperParameters.ripCost,this.shuffleConnections();let h=function(A){let m=A.planeSize*A.layers,p=A.connectionCount,g=Math.sqrt(p),_=Math.max(1,A.maxIterations),f=A_e(Math.round(m*(8+1.2*g)),150000,12000000),y=A_e(Math.round(f*A.effort),150000,12000000),x=A_e(Math.round(0.2*_),150000,2000000);return{maxIterationsIters:Math.max(1,Math.min(_,Math.max(x,y))),baseSearchBudgetIters:A_e(Math.round(m*(10+0.8*g)*A.effort),50000,4000000)}}({planeSize:this.planeSize,layers:this.layers,connectionCount:this.unsolvedSegs.length,effort:this.effort,maxIterations:this.MAX_ITERATIONS});this.baseSearchBudgetIters=h.baseSearchBudgetIters,this.MAX_ITERATIONS=h.maxIterationsIters,this.activeConnSeg=null,this.activeConnId=-1,this.nodePool=new YYo,this.heap=new GYo,this.ripChain=new VYo,this.seqCounter=0}_step(){for(let e=0;e<this.stepMultiplier;e++){if(this.solved||this.failed)return;this.stepOnce()}}rasterizeObstacles(){for(let e=0;e<this.obstacles.length;e++){let t=this.obstacles[e];if(t.type==="rect"){let i=this.rasterizeRectObstacle(t,e);if(i)return i;continue}if(t.traceThickness<=0||t.viaDiameter<=0||t.route.length<2)return`Obstacle ${e} must have positive trace/via sizes and at least two route points`;let n=mRe(t.connectionName,t.rootConnectionName),o=this.internObstacleRootName(n);for(let i=1;i<t.route.length;i++){let r=t.route[i-1],s=t.route[i];if(!(Number.isFinite(r.x)&&Number.isFinite(r.y)&&Number.isFinite(r.z)&&Number.isFinite(s.x)&&Number.isFinite(s.y)&&Number.isFinite(s.z)))return`Obstacle ${e} contains non-finite route coordinates`;if(r.z===s.z){let a=this.zToLayer.get(r.z);if(a===void 0)return`Obstacle ${e} uses unavailable layer z=${r.z}`;this.rasterizeObstacleTraceSegment({segmentStart:r,segmentEnd:s,layer:a,obstacleRootId:o,obstacleTraceThickness:t.traceThickness})}else if(!t.vias.some((a)=>a.x===s.x&&a.y===s.y)){let a=this.rasterizeObstacleVia({center:s,obstacleRootId:o,obstacleViaDiameter:t.viaDiameter,zStart:r.z,zEnd:s.z,obstacleIndex:e});if(a)return a}}for(let i of t.vias){if(!Number.isFinite(i.x)||!Number.isFinite(i.y))return`Obstacle ${e} contains non-finite via coordinates`;let r=this.rasterizeObstacleVia({center:i,obstacleRootId:o,obstacleViaDiameter:t.viaDiameter,zStart:i.zStart,zEnd:i.zEnd,obstacleIndex:e});if(r)return r}}return this.obstacleTraceBlockedCellCount=this.obstacleTraceRootIdsFlat.reduce((e,t)=>e+(t?1:0),0),this.obstacleViaBlockedCellCount=this.obstacleViaRootIdsByCell.reduce((e,t)=>e+(t?1:0),0),null}rasterizeRectObstacle(e,t){if(!Number.isFinite(e.center.x)||!Number.isFinite(e.center.y)||!Number.isFinite(e.width)||!Number.isFinite(e.height)||e.width<=0||e.height<=0)return`Rect obstacle ${t} must have finite geometry and positive dimensions`;let n=[];for(let l of e.zLayers){let d=this.zToLayer.get(l);if(d===void 0)return`Rect obstacle ${t} uses unavailable layer z=${l}`;WY(n,d)}if(n.length===0)return`Rect obstacle ${t} must apply to at least one layer`;let o=this.internObstacleRootName(mRe(e.connectionName,e.rootConnectionName)),i={rootId:o,center:e.center,width:e.width,height:e.height,rotationRadians:(e.ccwRotationDegrees??0)*Math.PI/180,layers:n};this.obstacleRectPrimitives.push(i);let r=this.transformBoundsPointToGrid(e.center),s=Math.hypot(e.width/2,e.height/2),a=this.getConservativeGridRadius(s+this.traceThickness/2+this.traceMargin);this.forEachCellNearCircle(r.x,r.y,a,(l)=>{for(let d of n)this.addObstacleRootId({rootIdsByCell:this.obstacleTraceRootIdsFlat,cellIndex:d*this.planeSize+l,obstacleRootId:o})});let c=this.getConservativeGridRadius(s+this.viaDiameter/2+this.traceMargin);return this.forEachCellNearCircle(r.x,r.y,c,(l)=>{this.addObstacleRootId({rootIdsByCell:this.obstacleViaRootIdsByCell,cellIndex:l,obstacleRootId:o})}),null}internObstacleRootName(e){let t=this.obstacleRootNameToId.get(e);if(t!==void 0)return t;let n=this.obstacleRootNames.length;return this.obstacleRootNames.push(e),this.obstacleRootNameToId.set(e,n),n}rasterizeObstacleTraceSegment(e){this.obstacleTracePrimitives.push({rootId:e.obstacleRootId,layer:e.layer,segmentStart:e.segmentStart,segmentEnd:e.segmentEnd,traceRadius:e.obstacleTraceThickness/2});let t=this.transformBoundsPointToGrid(e.segmentStart),n=this.transformBoundsPointToGrid(e.segmentEnd),o=this.getConservativeGridRadius(e.obstacleTraceThickness/2+this.traceMargin),i=this.getConservativeGridRadius(e.obstacleTraceThickness/2+this.viaDiameter/2+this.traceMargin);this.forEachCellNearSegment({segmentStart:t,segmentEnd:n,radius:o},(r)=>{this.addObstacleRootId({rootIdsByCell:this.obstacleTraceRootIdsFlat,cellIndex:e.layer*this.planeSize+r,obstacleRootId:e.obstacleRootId})}),this.forEachCellNearSegment({segmentStart:t,segmentEnd:n,radius:i},(r)=>{this.addObstacleRootId({rootIdsByCell:this.obstacleViaRootIdsByCell,cellIndex:r,obstacleRootId:e.obstacleRootId})})}rasterizeObstacleVia(e){if(e.zStart===void 0!=(e.zEnd===void 0))return`Obstacle ${e.obstacleIndex} via must provide both zStart and zEnd`;let t=Array.from({length:this.layers},(r,s)=>s);if(e.zStart!==void 0&&e.zEnd!==void 0){if(!Number.isFinite(e.zStart)||!Number.isFinite(e.zEnd))return`Obstacle ${e.obstacleIndex} contains a non-finite via layer span`;let r=Math.min(e.zStart,e.zEnd),s=Math.max(e.zStart,e.zEnd);t=this.availableZ.flatMap((a,c)=>a>=r&&a<=s?[c]:[])}if(t.length===0)return null;this.obstacleViaPrimitives.push({rootId:e.obstacleRootId,center:e.center,viaRadius:e.obstacleViaDiameter/2,layers:t});let n=this.transformBoundsPointToGrid(e.center),o=this.getConservativeGridRadius(e.obstacleViaDiameter/2+this.traceThickness/2+this.traceMargin),i=this.getConservativeGridRadius(e.obstacleViaDiameter/2+this.viaDiameter/2+this.traceMargin);return this.forEachCellNearCircle(n.x,n.y,Math.max(o,i),(r)=>{let s=this.getCellRect(r);if(jZ(n.x,n.y,o,s.minX,s.minY,s.maxX,s.maxY))for(let a of t)this.addObstacleRootId({rootIdsByCell:this.obstacleTraceRootIdsFlat,cellIndex:a*this.planeSize+r,obstacleRootId:e.obstacleRootId});jZ(n.x,n.y,i,s.minX,s.minY,s.maxX,s.maxY)&&this.addObstacleRootId({rootIdsByCell:this.obstacleViaRootIdsByCell,cellIndex:r,obstacleRootId:e.obstacleRootId})}),null}forEachCellNearSegment(e,t){let n={x:(e.segmentStart.x+e.segmentEnd.x)/2,y:(e.segmentStart.y+e.segmentEnd.y)/2},o=Math.hypot(e.segmentEnd.x-e.segmentStart.x,e.segmentEnd.y-e.segmentStart.y)/2+e.radius;this.forEachCellNearCircle(n.x,n.y,o,(i)=>{Z6t({segmentStart:e.segmentStart,segmentEnd:e.segmentEnd,radius:e.radius,rect:this.getCellRect(i)})&&t(i)})}getCellRect(e){return{minX:this.cellMinX[e],minY:this.cellMinY[e],maxX:this.cellMaxX[e],maxY:this.cellMaxY[e]}}transformBoundsPointToGrid(e){let t=this.gridToBoundsTransform;return{x:(e.x-t.c)/t.a,y:(e.y-t.f)/t.e}}getConservativeGridRadius(e){return e/Math.min(Math.abs(this.gridToBoundsTransform.a),Math.abs(this.gridToBoundsTransform.e))}addObstacleRootId(e){let t=e.rootIdsByCell[e.cellIndex];t||(t=[],e.rootIdsByCell[e.cellIndex]=t),WY(t,e.obstacleRootId)}isBlockedByObstacleRoots(e,t){if(!e)return!1;let n=this.connIdToRootNet[t];for(let o of e)if(this.obstacleRootNames[o]!==n)return!0;return!1}hasSameRootObstacle(e,t){if(!e)return!1;let n=this.connIdToRootNet[t];return e.some((o)=>this.obstacleRootNames[o]===n)}isLateralMoveBlockedByObstacleGeometry(e){let t=this.connIdToRootNet[e.activeConn],n=this.activeConnSeg,o=n&&e.layer===n.startZ&&e.fromCellId===n.startCellId?n.startPoint:I8(this.gridToBoundsTransform,{x:this.cellCenterX[e.fromCellId],y:this.cellCenterY[e.fromCellId]}),i=n&&e.layer===n.endZ&&e.toCellId===n.endCellId?n.endPoint:I8(this.gridToBoundsTransform,{x:this.cellCenterX[e.toCellId],y:this.cellCenterY[e.toCellId]});for(let r of this.obstacleTracePrimitives){if(r.layer!==e.layer||this.obstacleRootNames[r.rootId]===t)continue;let s=r.traceRadius+this.traceThickness/2+this.obstacleClearanceMargin;if(UYo({firstStart:o,firstEnd:i,secondStart:r.segmentStart,secondEnd:r.segmentEnd})<s*s)return!0}for(let r of this.obstacleViaPrimitives){if(!r.layers.includes(e.layer)||this.obstacleRootNames[r.rootId]===t)continue;let s=r.viaRadius+this.traceThickness/2+this.obstacleClearanceMargin;if(Qk({point:r.center,segmentStart:o,segmentEnd:i})<s*s)return!0}for(let r of this.obstacleRectPrimitives)if(r.layers.includes(e.layer)&&this.obstacleRootNames[r.rootId]!==t&&Z6t({segmentStart:pRe(o,r),segmentEnd:pRe(i,r),radius:this.traceThickness/2+this.obstacleClearanceMargin,rect:J6t(r)}))return!0;return!1}isViaMoveBlockedByObstacleGeometry(e){let t=this.connIdToRootNet[e.activeConn],n=I8(this.gridToBoundsTransform,{x:this.cellCenterX[e.cellId],y:this.cellCenterY[e.cellId]});for(let o of this.obstacleTracePrimitives){if(this.obstacleRootNames[o.rootId]===t)continue;let i=o.traceRadius+this.viaDiameter/2+this.obstacleClearanceMargin;if(Qk({point:n,segmentStart:o.segmentStart,segmentEnd:o.segmentEnd})<i*i)return!0}for(let o of this.obstacleViaPrimitives){if(this.obstacleRootNames[o.rootId]===t)continue;let i=o.viaRadius+this.viaDiameter/2+this.obstacleClearanceMargin;if((n.x-o.center.x)**2+(n.y-o.center.y)**2<i*i)return!0}for(let o of this.obstacleRectPrimitives){if(this.obstacleRootNames[o.rootId]===t)continue;let i=pRe(n,o),r=this.viaDiameter/2+this.obstacleClearanceMargin;if(Pee({point:i,rect:J6t(o)})<r*r)return!0}return!1}buildFiveRegionGrid(e,t){this.fineCols=Math.max(1,Math.ceil(e/this.highResolutionCellSize)),this.fineRows=Math.max(1,Math.ceil(t/this.highResolutionCellSize)),this.bandCols=Math.min(this.highResolutionCellThickness,Math.floor(this.fineCols/2)),this.bandRows=Math.min(this.highResolutionCellThickness,Math.floor(this.fineRows/2));let n=Math.max(0,this.fineCols-2*this.bandCols),o=Math.max(0,this.fineRows-2*this.bandRows),i=n,r=n;this.regions=[{id:0,name:"left",fineOriginRow:0,fineOriginCol:0,fineRows:this.fineRows,fineCols:this.bandCols,cellScale:1,rows:this.fineRows,cols:this.bandCols,offset:0},{id:1,name:"top",fineOriginRow:0,fineOriginCol:this.bandCols,fineRows:this.bandRows,fineCols:i,cellScale:1,rows:this.bandRows,cols:i,offset:0},{id:2,name:"right",fineOriginRow:0,fineOriginCol:this.fineCols-this.bandCols,fineRows:this.fineRows,fineCols:this.bandCols,cellScale:1,rows:this.fineRows,cols:this.bandCols,offset:0},{id:3,name:"bottom",fineOriginRow:this.fineRows-this.bandRows,fineOriginCol:this.bandCols,fineRows:this.bandRows,fineCols:r,cellScale:1,rows:this.bandRows,cols:r,offset:0},{id:4,name:"middle",fineOriginRow:this.bandRows,fineOriginCol:this.bandCols,fineRows:o,fineCols:n,cellScale:this.lowScale,rows:o>0?Math.ceil(o/this.lowScale):0,cols:n>0?Math.ceil(n/this.lowScale):0,offset:0}];let s=0;for(let x=0;x<this.regions.length;x++)this.regions[x].offset=s,s+=this.regions[x].rows*this.regions[x].cols;this.planeSize=s,this.cellCenterX=new Float64Array(this.planeSize),this.cellCenterY=new Float64Array(this.planeSize),this.cellMinX=new Float64Array(this.planeSize),this.cellMinY=new Float64Array(this.planeSize),this.cellMaxX=new Float64Array(this.planeSize),this.cellMaxY=new Float64Array(this.planeSize),this.cellWidth=new Float64Array(this.planeSize),this.cellHeight=new Float64Array(this.planeSize),this.cellRegion=new Uint8Array(this.planeSize),this.cellRow=new Int32Array(this.planeSize),this.cellCol=new Int32Array(this.planeSize),this.viaAllowed=new Uint8Array(this.planeSize);for(let x=0;x<this.regions.length;x++){let C=this.regions[x];for(let I=0;I<C.rows;I++){let b=C.fineOriginRow+I*C.cellScale,P=Math.min(C.fineOriginRow+C.fineRows,b+C.cellScale),E=this.boundsMinY+b*this.highResolutionCellSize,B=Math.min(this.boundsMaxY,this.boundsMinY+P*this.highResolutionCellSize);for(let w=0;w<C.cols;w++){let T=C.fineOriginCol+w*C.cellScale,Q=Math.min(C.fineOriginCol+C.fineCols,T+C.cellScale),N=this.boundsMinX+T*this.highResolutionCellSize,F=Math.min(this.boundsMaxX,this.boundsMinX+Q*this.highResolutionCellSize),H=this.cellIdFor(C.id,I,w);this.cellCenterX[H]=(N+F)/2,this.cellCenterY[H]=(E+B)/2,this.cellMinX[H]=N,this.cellMinY[H]=E,this.cellMaxX[H]=F,this.cellMaxY[H]=B,this.cellWidth[H]=F-N,this.cellHeight[H]=B-E,this.cellRegion[H]=C.id,this.cellRow[H]=I,this.cellCol[H]=w;let z=Math.min(this.cellCenterX[H]-this.boundsMinX,this.boundsMaxX-this.cellCenterX[H],this.cellCenterY[H]-this.boundsMinY,this.boundsMaxY-this.cellCenterY[H]);this.viaAllowed[H]=z>=this.viaMinDistFromBorder?1:0}}}let a=Array.from({length:this.planeSize},()=>[]),c=(x,C)=>{if(x===C||x<0||C<0)return;let I=this.cellCenterX[x]-this.cellCenterX[C],b=this.cellCenterY[x]-this.cellCenterY[C],P=Math.hypot(I,b);$6t(a[x],{cellId:C,cost:P}),$6t(a[C],{cellId:x,cost:P})};for(let x=0;x<this.regions.length;x++){let C=this.regions[x];for(let I=0;I<C.rows;I++)for(let b=0;b<C.cols;b++){let P=this.cellIdFor(C.id,I,b);I+1<C.rows&&c(P,this.cellIdFor(C.id,I+1,b)),b+1<C.cols&&c(P,this.cellIdFor(C.id,I,b+1))}}let l=this.regions[0],d=this.regions[1],u=this.regions[2],h=this.regions[3],A=this.regions[4],m=l.rows>0&&l.cols>0,p=d.rows>0&&d.cols>0,g=u.rows>0&&u.cols>0,_=h.rows>0&&h.cols>0,f=A.rows>0&&A.cols>0;if(m&&p)for(let x=0;x<this.bandRows;x++)c(this.cellIdFor(0,x,l.cols-1),this.cellIdFor(1,x,0));if(p&&g)for(let x=0;x<this.bandRows;x++)c(this.cellIdFor(1,x,d.cols-1),this.cellIdFor(2,x,0));if(m&&_)for(let x=this.fineRows-this.bandRows;x<this.fineRows;x++)c(this.cellIdFor(0,x,l.cols-1),this.cellIdFor(3,x-(this.fineRows-this.bandRows),0));if(_&&g)for(let x=this.fineRows-this.bandRows;x<this.fineRows;x++)c(this.cellIdFor(3,x-(this.fineRows-this.bandRows),h.cols-1),this.cellIdFor(2,x,0));if(m&&f)for(let x=this.bandRows;x<this.fineRows-this.bandRows;x++)c(this.cellIdFor(0,x,l.cols-1),this.cellIdFor(4,Math.floor((x-this.bandRows)/this.lowScale),0));if(g&&f)for(let x=this.bandRows;x<this.fineRows-this.bandRows;x++)c(this.cellIdFor(4,Math.floor((x-this.bandRows)/this.lowScale),A.cols-1),this.cellIdFor(2,x,0));if(p&&f)for(let x=this.bandCols;x<this.fineCols-this.bandCols;x++)c(this.cellIdFor(1,d.rows-1,x-this.bandCols),this.cellIdFor(4,0,Math.floor((x-this.bandCols)/this.lowScale)));if(_&&f)for(let x=this.bandCols;x<this.fineCols-this.bandCols;x++)c(this.cellIdFor(4,A.rows-1,Math.floor((x-this.bandCols)/this.lowScale)),this.cellIdFor(3,0,x-this.bandCols));if(!f&&!p&&!_&&m&&g)for(let x=0;x<Math.min(l.rows,u.rows);x++)c(this.cellIdFor(0,x,l.cols-1),this.cellIdFor(2,x,0));if(!f&&!m&&!g&&p&&_)for(let x=0;x<Math.min(d.cols,h.cols);x++)c(this.cellIdFor(1,d.rows-1,x),this.cellIdFor(3,0,x));let y=this.flattenNeighborLists(a);this.neighborOffset=y.offset,this.neighborIds=y.ids,this.neighborCosts=y.costs}cellIdFor(e,t,n){let o=this.regions[e];return o.offset+t*o.cols+n}stepOnce(){if(!this.activeConnSeg){if(this.unsolvedSegs.length===0)return void(this.solved=!0);let f=this.unsolvedSegs.shift();this.activeConnSeg=f,this.activeConnId=f.connId,this.nodePool.clear(),this.ripChain.clear(),this.heap.clear(),this.seqCounter=0,this.searchIterations=0,this.nextStamp();let y=this.computeH(f.startZ,f.startCellId,f.endZ,f.endCellId)*this.hyperParameters.greedyMultiplier,x=this.nodePool.push(f.startZ,f.startCellId,0,-1,-1,0),C=f.startZ*this.planeSize+f.startCellId,I=this.getSearchStateIdx(C,0);return this.bestGStamp[I]=this.stamp,this.bestGValue[I]=0,void this.heap.push(y,this.seqCounter++,x)}this.searchIterations++;let e=this.ripCount[this.activeConnId]??0,t=Math.round(this.baseSearchBudgetIters*(1+0.25*Math.min(e,10)));if(this.searchIterations>t){let f=this.penalty2d;for(let y=0;y<f.length;y++)f[y]=0.9*f[y];return this.unsolvedSegs.push(this.activeConnSeg),this.activeConnSeg=null,this.activeConnId=-1,this.heap.clear(),this.nodePool.clear(),this.consecutiveSkips++,void(this.consecutiveSkips>=Math.max(3,3*this.unsolvedSegs.length)&&(this.error=`Convergence failure: ${this.unsolvedSegs.length} connections stuck`,this.failed=!0))}if(this.heap.size===0)return this.error=`No path found for ${this.connIdToName[this.activeConnId]}`,void(this.failed=!0);let n=this.heap.pop(),o=this.nodePool.z[n],i=this.nodePool.cellId[n],r=this.nodePool.g[n],s=this.nodePool.ripHead[n],a=this.nodePool.ripCount[n],c=o*this.planeSize+i,l=this.getSearchStateIdx(c,a);if(this.visitedStamp[l]===this.stamp)return;this.visitedStamp[l]=this.stamp,this.visitedFlatStamp[c]=this.stamp;let d=this.activeConnSeg;if(o===d.endZ&&i===d.endCellId)return this.finalizeRoute(n),this.activeConnSeg=null,void(this.activeConnId=-1);let u=this.visitedStamp,h=this.stamp,A=this.activeConnId,{endZ:m,endCellId:p}=d,g=this.neighborOffset[i],_=this.neighborOffset[i+1];for(let f=g;f<_;f++){let y=this.neighborIds[f],x=o*this.planeSize+y;if(this.computeMoveCostAndRips(A,o,i,y,!1,s,a,this.neighborCosts[f]),this._moveCost<0)continue;let C=this.getSearchStateIdx(x,this._moveRipCount);if(u[C]===h)continue;let I=r+this._moveCost;if(this.bestGStamp[C]===h&&I>=this.bestGValue[C])continue;this.bestGStamp[C]=h,this.bestGValue[C]=I;let b=I+this.computeH(o,y,m,p)*this.hyperParameters.greedyMultiplier,P=this.nodePool.push(o,y,I,n,this._moveRippedHead,this._moveRipCount);this.heap.push(b,this.seqCounter++,P)}if(this.viaAllowed[i])for(let f=0;f<this.layers;f++){if(f===o)continue;let y=f*this.planeSize+i;if(this.computeMoveCostAndRips(A,f,i,i,!0,s,a,0),this._moveCost<0)continue;let x=this.getSearchStateIdx(y,this._moveRipCount);if(u[x]===h)continue;let C=r+this._moveCost;if(this.bestGStamp[x]===h&&C>=this.bestGValue[x])continue;this.bestGStamp[x]=h,this.bestGValue[x]=C;let I=C+this.computeH(f,i,m,p)*this.hyperParameters.greedyMultiplier,b=this.nodePool.push(f,i,C,n,this._moveRippedHead,this._moveRipCount);this.heap.push(I,this.seqCounter++,b)}}computeMoveCostAndRips(e,t,n,o,i,r,s,a){let c=0,l=r,d=s,u=t*this.planeSize+o,h=i?this.obstacleViaRootIdsByCell[o]:[...this.obstacleTraceRootIdsFlat[t*this.planeSize+n]??[],...this.obstacleTraceRootIdsFlat[u]??[]];if(this.isBlockedByObstacleRoots(h,e)&&(i?this.isViaMoveBlockedByObstacleGeometry({activeConn:e,cellId:o}):this.isLateralMoveBlockedByObstacleGeometry({activeConn:e,layer:t,fromCellId:n,toCellId:o})))return this._moveCost=-1,this._moveRippedHead=l,void(this._moveRipCount=d);let A=this.hasSameRootObstacle(h,e);if(i){c+=this.hyperParameters.viaBaseCost,c+=Math.min(this.penalty2d[o],this.penaltyCap);let m=this.portOwnerFlat[u],p=this.allowSharedUse(e,m),g=this.activeConnSeg,_=!!g&&t===g.endZ&&o===g.endCellId;if(m>=0&&m!==e&&!p&&!_)return this._moveCost=-1,void(this._moveRippedHead=l);this.fillViaOccupants(o,e);let f=this._viaOccs;for(let y=0;y<f.length;y++){let x=f[y];this.ripChain.contains(l,x)||(c+=this.hyperParameters.ripCost,l=this.ripChain.append(l,x),d++),c+=this.hyperParameters.ripViaPenalty}}else{c+=a,c+=Math.min(this.penalty2d[o],this.penaltyCap);let m=this.portOwnerFlat[u],p=this.allowSharedUse(e,m),g=this.activeConnSeg,_=!!g&&t===g.endZ&&o===g.endCellId;if(m>=0&&m!==e&&!p&&!_)return this._moveCost=-1,void(this._moveRippedHead=l);this.fillTraceOccupants(u,e,this._cellOccs);for(let f=0;f<this._cellOccs.length;f++){let y=this._cellOccs[f];this.ripChain.contains(l,y)||(c+=this.hyperParameters.ripCost,l=this.ripChain.append(l,y),d++),c+=this.hyperParameters.ripTracePenalty}}A&&(c*=this.hyperParameters.sameRootObstacleCostMultiplier),this._moveCost=c,this._moveRippedHead=l,this._moveRipCount=d}fillViaOccupants(e,t){let n=this._viaOccs;n.length=0;let o=this.cellCenterX[e],i=this.cellCenterY[e];this.forEachCellNearCircle(o,i,this.viaKeepoutRadius,(r)=>{if(jZ(o,i,this.viaKeepoutRadius,this.cellMinX[r],this.cellMinY[r],this.cellMaxX[r],this.cellMaxY[r]))for(let s=0;s<this.layers;s++)this.pushFlatOccupants(s*this.planeSize+r,t,n)})}fillTraceOccupants(e,t,n){n.length=0,this.pushFlatOccupants(e,t,n)}pushFlatOccupants(e,t,n){let o=this.usedCellsFlat[e];o===-1||o===t||this.allowSharedUse(t,o)||WY(n,o);let i=this.sharedCellsFlat[e];if(i)for(let r=0;r<i.length;r++){let s=i[r];s!==t&&(this.allowSharedUse(t,s)||WY(n,s))}}addSharedOccupant(e,t){if(this.usedCellsFlat[e]===t)return;let n=this.sharedCellsFlat[e];n||(n=[],this.sharedCellsFlat[e]=n),WY(n,t)}replaceOccupants(e,t){this.usedCellsFlat[e]=t,this.sharedCellsFlat[e]=void 0}removeOccupant(e,t){let n=this.sharedCellsFlat[e];if(this.usedCellsFlat[e]===t)return void(n&&n.length>0?(this.usedCellsFlat[e]=n.pop(),n.length===0&&(this.sharedCellsFlat[e]=void 0)):this.usedCellsFlat[e]=-1);if(!n)return;let o=n.indexOf(t);o!==-1&&(n.splice(o,1),n.length===0&&(this.sharedCellsFlat[e]=void 0))}allowSharedUse(e,t){if(t<0)return!1;return this.connIdToRootNet[t]===this.connIdToRootNet[e]}shouldSkipFixedPortHalo(e,t){let n=this.portOwnerFlat[e];return n!==t&&(n===-2||!(n<0)&&!this.allowSharedUse(t,n))}nextStamp(){this.stamp=this.stamp+1>>>0,this.stamp===0&&(this.visitedStamp.fill(0),this.bestGStamp.fill(0),this.visitedFlatStamp.fill(0),this.stamp=1)}getSearchStateIdx(e,t){return e}computeH(e,t,n,o){let i=Math.hypot(this.cellCenterX[t]-this.cellCenterX[o],this.cellCenterY[t]-this.cellCenterY[o]);return e===n?i:i+this.hyperParameters.viaBaseCost}internConn(e,t){let n=this.connNameToId.get(e);if(n!==void 0)return n;let o=this.connIdToName.length;return this.connIdToName.push(e),this.connIdToRootNet.push(mRe(e,t)),this.connNameToId.set(e,o),o}buildConnectionSegs(){let e=new Map;for(let o of this.nodeWithPortPoints.portPoints){let i=o.connectionName;e.has(i)||e.set(i,{points:[],rootConnectionName:o.rootConnectionName}),e.get(i).points.push(o)}let t=[],n=new Map;for(let[o,i]of e){let r=i.points,s=zYo(r);if(s.length===0)continue;let a=this.internConn(o,i.rootConnectionName);for(let[c,l]of s){let d=this.pointToCell(c),u=this.pointToCell(l),h=`${d.z}:${d.cellId}`,A=`${u.z}:${u.cellId}`,m=h<A?`${h}|${A}`:`${A}|${h}`,p=this.connIdToRootNet[a],g=`${p}|${m}`,_=n.get(g);if(_){if(this.overlapFriendlyRootNets.add(p),!_.connectionAliases.some((y)=>y.connectionName===o)){let y=_.startZ===d.z&&_.startCellId===d.cellId&&_.endZ===u.z&&_.endCellId===u.cellId,x=_.startZ===u.z&&_.startCellId===u.cellId&&_.endZ===d.z&&_.endCellId===d.cellId;if(!y&&!x)throw Error(`Connection alias ${o} does not match canonical segment ${g}`);_.connectionAliases.push({connectionName:o,rootConnectionName:p,startPoint:c,endPoint:l,reversedFromCanonical:!y&&x})}continue}let f={connId:a,startZ:d.z,startCellId:d.cellId,startPoint:c,endZ:u.z,endCellId:u.cellId,endPoint:l,connectionAliases:[{connectionName:o,rootConnectionName:p,startPoint:c,endPoint:l,reversedFromCanonical:!1}]};n.set(g,f),t.push(f)}}return t}pointToCell(e){let t=bx(Math.floor((e.x-this.boundsMinX)/this.highResolutionCellSize),0,this.fineCols-1),n=bx(Math.floor((e.y-this.boundsMinY)/this.highResolutionCellSize),0,this.fineRows-1),o=4;t<this.bandCols?o=0:t>=this.fineCols-this.bandCols?o=2:n<this.bandRows?o=1:n>=this.fineRows-this.bandRows&&(o=3);let i=this.regions[o],r=n-i.fineOriginRow,s=t-i.fineOriginCol,a=bx(Math.floor(r/i.cellScale),0,Math.max(0,i.rows-1)),c=bx(Math.floor(s/i.cellScale),0,Math.max(0,i.cols-1));return{z:this.zToLayer.get(e.z)??0,cellId:this.cellIdFor(o,a,c)}}shuffleConnections(){let e=this.unsolvedSegs,t=this.hyperParameters.shuffleSeed>>>0,n=()=>(t=Math.imul(t,1664525)+1013904223>>>0,t/4294967295);for(let o=e.length-1;o>0;o--){let i=Math.floor(n()*(o+1)),r=e[o];e[o]=e[i],e[i]=r}}finalizeRoute(e){this.consecutiveSkips=Math.max(0,this.consecutiveSkips-1);let t=[],n=e;for(;n>=0;){let l=this.nodePool.z[n],d=this.nodePool.cellId[n];t.push(l*this.planeSize+d),n=this.nodePool.parent[n]}for(t.reverse();t.length>1&&this.sharedCrossRootPortFlat[t[0]];)t.shift();for(;t.length>1&&this.sharedCrossRootPortFlat[t[t.length-1]];)t.pop();let o=this.extractViaCellIds(t),i=this.activeConnId;this.ripChain.collect(this.nodePool.ripHead[e],this._rippedIds);for(let l=0;l<this._rippedIds.length;l++)if(this.ripTrace(this._rippedIds[l]),this.failed)return;let r=[];for(let l=0;l<t.length;l++){let d=t[l],u=Math.floor(d/this.planeSize),h=d-u*this.planeSize;this.markTraceFootprint(i,u,h,r)}let s=[];for(let l=0;l<o.length;l++)this.markViaFootprint(i,o[l],r,s);for(;this.usedIndicesByConn.length<=i;)this.usedIndicesByConn.push(void 0);let a=this.usedIndicesByConn[i]??[];for(a.push(...r),this.usedIndicesByConn[i]=a;this.solvedRoutes.length<=i;)this.solvedRoutes.push(void 0);let c=this.solvedRoutes[i]??[];c.push({connId:i,states:Int32Array.from(t),viaCellIds:Int32Array.from(o),startPoint:this.activeConnSeg.startPoint,endPoint:this.activeConnSeg.endPoint,connectionAliases:this.activeConnSeg.connectionAliases}),this.solvedRoutes[i]=c;for(let l=0;l<s.length;l++)if(this.ripTrace(s[l]),this.failed)return;if(this._rippedIds.length>0||s.length>0){let l=this.penalty2d,d=this.penaltyCap;if(this.totalRipEvents>50)for(let u=0;u<l.length;u++)l[u]=0.99*l[u];else for(let u=0;u<l.length;u++)l[u]>d&&(l[u]=0.5*l[u])}}extractViaCellIds(e){let t=[];for(let n=1;n<e.length;n++){let o=e[n-1],i=e[n],r=Math.floor(o/this.planeSize),s=Math.floor(i/this.planeSize);r!==s&&t.push(i-s*this.planeSize)}return t}markTraceFootprint(e,t,n,o){let i=this.cellCenterX[n],r=this.cellCenterY[n];this.forEachCellNearCircle(i,r,this.traceKeepoutRadius,(s)=>{if(!jZ(i,r,this.traceKeepoutRadius,this.cellMinX[s],this.cellMinY[s],this.cellMaxX[s],this.cellMaxY[s]))return;let a=t*this.planeSize+s;if(s!==n&&this.shouldSkipFixedPortHalo(a,e))return;let c=this.usedCellsFlat[a],l=this.allowSharedUse(e,c);(c===-1||c===e||l)&&(c!==-1&&c!==e?this.addSharedOccupant(a,e):this.usedCellsFlat[a]=e,o.push(a))})}markViaFootprint(e,t,n,o){let i=this.cellCenterX[t],r=this.cellCenterY[t];this.forEachCellNearCircle(i,r,this.viaKeepoutRadius,(s)=>{if(jZ(i,r,this.viaKeepoutRadius,this.cellMinX[s],this.cellMinY[s],this.cellMaxX[s],this.cellMaxY[s]))for(let a=0;a<this.layers;a++){let c=a*this.planeSize+s;if(s!==t&&this.shouldSkipFixedPortHalo(c,e))continue;if(this.fillTraceOccupants(c,e,this._cellOccs),this._cellOccs.length>0){for(let d=0;d<this._cellOccs.length;d++)WY(o,this._cellOccs[d]);this.replaceOccupants(c,e),n.push(c);continue}let l=this.usedCellsFlat[c];l!==-1&&l!==e?this.addSharedOccupant(c,e):this.usedCellsFlat[c]=e,n.push(c)}})}forEachCellNearCircle(e,t,n,o){let i=bx(Math.floor((e-n-this.boundsMinX)/this.highResolutionCellSize),0,this.fineCols-1),r=bx(Math.floor((e+n-this.boundsMinX)/this.highResolutionCellSize),0,this.fineCols-1),s=bx(Math.floor((t-n-this.boundsMinY)/this.highResolutionCellSize),0,this.fineRows-1),a=bx(Math.floor((t+n-this.boundsMinY)/this.highResolutionCellSize),0,this.fineRows-1);for(let c=0;c<this.regions.length;c++){let l=this.regions[c];if(l.rows===0||l.cols===0)continue;let d=Math.max(s,l.fineOriginRow),u=Math.min(a,l.fineOriginRow+l.fineRows-1),h=Math.max(i,l.fineOriginCol),A=Math.min(r,l.fineOriginCol+l.fineCols-1);if(d>u)continue;if(h>A)continue;let m=Math.floor((d-l.fineOriginRow)/l.cellScale),p=Math.floor((u-l.fineOriginRow)/l.cellScale),g=Math.floor((h-l.fineOriginCol)/l.cellScale),_=Math.floor((A-l.fineOriginCol)/l.cellScale);for(let f=m;f<=p;f++)for(let y=g;y<=_;y++)o(this.cellIdFor(l.id,f,y))}}ripTrace(e){for(;this.ripCount.length<=e;)this.ripCount.push(0);if(this.ripCount[e]++,this.totalRipEvents++,this.totalRipEvents>=this.MAX_RIPS)return this.error=`Convergence failure: exceeded MAX_RIPS ${this.MAX_RIPS}`,void(this.failed=!0);let t=this.getSolvedRoutesForConn(e);if(t.length>0)for(let o of t){for(let i=0;i<o.states.length;i++){let r=o.states[i]%this.planeSize;this.penalty2d[r]=this.penalty2d[r]+this.hyperParameters.ripTracePenalty}for(let i=0;i<o.viaCellIds.length;i++){let r=o.viaCellIds[i];this.penalty2d[r]=this.penalty2d[r]+this.hyperParameters.ripViaPenalty}}let n=this.usedIndicesByConn[e];if(n){for(let o=0;o<n.length;o++)this.removeOccupant(n[o],e);this.usedIndicesByConn[e]=void 0}if(t.length>0){this.solvedRoutes[e]=void 0;for(let o of t){let i=o.states[0],r=o.states[o.states.length-1],s=Math.floor(i/this.planeSize),a=Math.floor(r/this.planeSize);this.unsolvedSegs.push({connId:e,startZ:s,startCellId:i-s*this.planeSize,startPoint:o.startPoint,endZ:a,endCellId:r-a*this.planeSize,endPoint:o.endPoint,connectionAliases:o.connectionAliases})}}}flattenNeighborLists(e){let t=new Int32Array(e.length+1),n=0;for(let s=0;s<e.length;s++)t[s]=n,n+=e[s].length;t[e.length]=n;let o=new Int32Array(n),i=new Float32Array(n),r=0;for(let s=0;s<e.length;s++){let a=e[s];for(let c=0;c<a.length;c++){let l=a[c];o[r]=l.cellId,i[r]=l.cost,r++}}return{offset:t,ids:o,costs:i}}visualize(){let e=["red","blue","orange","green"],t=this.gridToBoundsTransform,n=[],o=[],i=[],r=[];r.push({center:{x:this.nodeWithPortPoints.center.x,y:this.nodeWithPortPoints.center.y},width:this.nodeWithPortPoints.width,height:this.nodeWithPortPoints.height,stroke:"gray"});let s=({route:c,connectionName:l,strokeWidth:d,strokeDash:u,labelPrefix:h})=>{if(c.length<2)return;let A=0;for(let p=1;p<c.length;p+=1){let g=c[p-1];c[p].z!==g.z&&(p-A>=2&&o.push({points:c.slice(A,p).map((_)=>({x:_.x,y:_.y})),strokeColor:e[g.z]??"rgba(128,128,128,0.75)",strokeWidth:d,strokeDash:u,label:`${h} ${l} z=${g.z}`}),A=p)}if(c.length-A<2)return;let m=c[A].z;o.push({points:c.slice(A).map((p)=>({x:p.x,y:p.y})),strokeColor:e[m]??"rgba(128,128,128,0.75)",strokeWidth:d,strokeDash:u,label:`${h} ${l} z=${m}`})};for(let c of this.obstacles)if(c.type!=="rect"){s({route:c.route,connectionName:c.connectionName,strokeWidth:c.traceThickness,strokeDash:[0.12,0.08],labelPrefix:"fixed obstacle"});for(let l of c.vias)i.push({center:{x:l.x,y:l.y},radius:c.viaDiameter/2,fill:"rgba(128,0,128,0.25)",stroke:"purple",label:`fixed obstacle ${c.connectionName} via`})}else r.push({center:c.center,width:c.width,height:c.height,fill:"rgba(128,0,128,0.12)",stroke:"purple",label:`fixed obstacle ${c.connectionName}`});if(this.showPenaltyMap&&this.penalty2d){let c=0;for(let l=0;l<this.penalty2d.length;l++)this.penalty2d[l]>c&&(c=this.penalty2d[l]);if(c>0)for(let l=0;l<this.planeSize;l++){let d=this.penalty2d[l];if(d<=0)continue;let u=I8(t,{x:this.cellCenterX[l],y:this.cellCenterY[l]}),h=Math.min(0.6,d/c*0.6);r.push({center:u,width:this.cellWidth[l]*t.a,height:this.cellHeight[l]*t.e,fill:`rgba(255,165,0,${h.toFixed(3)})`})}}if(this.showUsedCellMap&&this.usedCellsFlat)for(let c=0;c<this.layers;c++){let l=c*this.planeSize;for(let d=0;d<this.planeSize;d++){if(this.usedCellsFlat[l+d]===-1)continue;let u=I8(t,{x:this.cellCenterX[d],y:this.cellCenterY[d]});r.push({center:u,width:this.cellWidth[d]*t.a,height:this.cellHeight[d]*t.e,fill:"rgba(0,0,255,0.5)"})}}for(let c of this.nodeWithPortPoints.portPoints)n.push({x:c.x,y:c.y,color:e[c.z]??"gray",label:c.connectionName});let a=this.getOutput();for(let c of a)s({route:c.route,connectionName:c.connectionName,strokeWidth:this.traceThickness,labelPrefix:"B01 route"});for(let c of a)for(let l of c.vias)i.push({center:{x:l.x,y:l.y},radius:this.viaDiameter/2,fill:"rgba(0,0,0,0.3)",stroke:"black",label:`B01 route ${c.connectionName} via`});if(this.activeConnSeg&&this.visitedFlatStamp){let c=this.stamp;for(let l=0;l<this.layers;l++){let d=l*this.planeSize;for(let u=0;u<this.planeSize;u++){if(this.visitedFlatStamp[d+u]!==c)continue;let h=I8(t,{x:this.cellCenterX[u],y:this.cellCenterY[u]});n.push({x:h.x,y:h.y,color:"rgba(0,0,255,0.2)"})}}}return{points:n,lines:o,circles:i,rects:r,coordinateSystem:"cartesian",title:`HighDensityB01 [${this.getSolvedRouteCount()} solved, ${this.unsolvedSegs?.length??0} remaining]`}}getOutput(){let e=this.gridToBoundsTransform,t=[];for(let n=0;n<this.solvedRoutes.length;n++){let o=this.getSolvedRoutesForConn(n);if(o.length!==0)for(let i of o){let r=Array.from(i.states,(a)=>{let c=Math.floor(a/this.planeSize),l=a-c*this.planeSize,d=I8(e,{x:this.cellCenterX[l],y:this.cellCenterY[l]});return{x:d.x,y:d.y,z:this.layerToZ.get(c)??c}}),s=Array.from(i.viaCellIds,(a)=>I8(e,{x:this.cellCenterX[a],y:this.cellCenterY[a]}));for(let a of i.connectionAliases){let c=(a.reversedFromCanonical?[...r].reverse():r).map((l)=>({...l}));c.length>0&&(c[0]={...a.startPoint},c.length>1&&(c[c.length-1]={...a.endPoint})),t.push({connectionName:a.connectionName,rootConnectionName:a.rootConnectionName,regionId:this.nodeWithPortPoints.capacityMeshNodeId,traceThickness:this.traceThickness,viaDiameter:this.viaDiameter,route:c,vias:s.map((l)=>({...l}))})}}}return t}getSolvedRoutesForConn(e){let t=this.solvedRoutes[e];return t?Array.isArray(t)?t:[t]:[]}getSolvedRouteCount(){let e=0;for(let t=0;t<this.solvedRoutes.length;t++)e+=this.getSolvedRoutesForConn(t).length;return e}computeGridToBoundsTransform(){let e=1/0,t=-1/0,n=1/0,o=-1/0;for(let d=0;d<this.planeSize;d++){let u=this.cellCenterX[d],h=this.cellCenterY[d];u<e&&(e=u),u>t&&(t=u),h<n&&(n=h),h>o&&(o=h)}let i=t-e,r=o-n,s=this.boundsMaxX-this.boundsMinX,a=this.boundsMaxY-this.boundsMinY,c=i>0?s/i:1,l=r>0?a/r:1;return{a:c,b:0,c:i>0?this.boundsMinX-c*e:(this.boundsMinX+this.boundsMaxX)/2-e,d:0,e:l,f:r>0?this.boundsMinY-l*n:(this.boundsMinY+this.boundsMaxY)/2-n}}},ARe=new WeakMap,H6=(e,{layerCount:t,allowBlindAndBuriedVias:n})=>{let o=`${t}:${n===!0}`,i=ARe.get(e)?.get(o);if(i)return i;let r=[],s=[];for(let l=1;l<e.route.length;l++){let d=e.route[l-1],u=e.route[l],h=Math.hypot(u.x-d.x,u.y-d.y),A=Math.max(d.traceThickness??e.traceThickness,u.traceThickness??e.traceThickness);if(d.z!==u.z&&d.toNextSegmentType==="through_obstacle"){let _=Math.min(d.z,u.z),f=Math.max(d.z,u.z);if(h<=0.000000001){let y=e.vias.some((x)=>Math.hypot(x.x-u.x,x.y-u.y)<=0.000000001);s.push({center:{x:u.x,y:u.y},minZ:_,maxZ:f,diameter:y?e.viaDiameter:A});continue}for(let y=_;y<=f;y++)r.push({start:{...d,z:y},end:{...u,z:y},z:y,width:A});continue}let m=d.z===u.z?void 0:AYt({hdRoute:e,start:d,end:u}),p=m==="start"?u.z:d.z;if(h>0.000000001&&r.push({start:d.z===p?d:{...d,z:p},end:u.z===p?u:{...u,z:p},z:p,width:A}),d.z===u.z)continue;let g=m==="start"?d:u;nd(d.z,t),nd(u.z,t),s.push({center:{x:g.x,y:g.y},minZ:n?Math.min(d.z,u.z):0,maxZ:n?Math.max(d.z,u.z):t-1,diameter:e.viaDiameter})}let a={wireSegments:r,viaSpans:s},c=ARe.get(e)??new Map;return c.set(o,a),ARe.set(e,c),a},IYt=(e,t,n)=>{let o=e.end.x-e.start.x,i=e.end.y-e.start.y,r=Math.hypot(o,i),s={x:(e.start.x+e.end.x)/2,y:(e.start.y+e.end.y)/2};return Math.abs(o)<=0.000000001||Math.abs(i)<=0.000000001?[{center:s,width:Math.abs(o)>Math.abs(i)?r:e.width,height:Math.abs(o)>Math.abs(i)?e.width:r}]:MGt({center:s,width:r,height:e.width,rotation:180*Math.atan2(i,o)/Math.PI},Math.max(n,Math.ceil(r/t)))},bYt=({fixedObstacleRoutes:e,layerCount:t,allowBlindAndBuriedVias:n})=>e.flatMap((o,i)=>{let r=[o.connectionName,o.rootConnectionName].filter((a)=>typeof a=="string"),s=H6(o,{layerCount:t,allowBlindAndBuriedVias:n});return[...s.wireSegments.flatMap((a,c)=>IYt(a,0.75,2).map((l,d)=>({obstacleId:`pipeline9_fixed_obstacle_${i}_wire_${c}_${d}`,type:"rect",layers:[nd(a.z,t)],center:l.center,width:l.width,height:l.height,connectedTo:r}))),...s.viaSpans.map((a,c)=>({obstacleId:`pipeline9_fixed_obstacle_${i}_via_${c}`,type:"rect",layers:Array.from({length:a.maxZ-a.minZ+1},(l,d)=>nd(a.minZ+d,t)),center:a.center,width:a.diameter,height:a.diameter,connectedTo:r}))]}),SYt=(e,t,n)=>{let o=[e.connectionName,e.rootConnectionName].filter((r)=>typeof r=="string"),i=[t.connectionName,t.rootConnectionName].filter((r)=>typeof r=="string");return o.some((r)=>i.some((s)=>r===s||n.areIdsConnected(r,s)))},eBt=(e,t)=>e.minX<=t.maxX&&e.maxX>=t.minX&&e.minY<=t.maxY&&e.maxY>=t.minY,PYt=({left:e,right:t,clearance:n,leftBounds:o,layerCount:i,allowBlindAndBuriedVias:r})=>{let s={layerCount:i,allowBlindAndBuriedVias:r},a=H6(e,s),c=H6(t,s),l=o?a.wireSegments.filter((u)=>((h,A)=>{let m={minX:Math.min(h.start.x,h.end.x)-h.width/2,maxX:Math.max(h.start.x,h.end.x)+h.width/2,minY:Math.min(h.start.y,h.end.y)-h.width/2,maxY:Math.max(h.start.y,h.end.y)+h.width/2};return eBt(m,A)})(u,o)):a.wireSegments,d=o?a.viaSpans.filter((u)=>((h,A)=>{let m={minX:h.center.x-h.diameter/2,maxX:h.center.x+h.diameter/2,minY:h.center.y-h.diameter/2,maxY:h.center.y+h.diameter/2};return eBt(m,A)})(u,o)):a.viaSpans;for(let u of l){for(let h of c.wireSegments){if(u.z!==h.z)continue;let A=u.width/2+h.width/2+n;if(Hk(u.start,u.end,h.start,h.end)<A)return!0}for(let h of c.viaSpans){if(u.z<h.minZ||u.z>h.maxZ)continue;let A=u.width/2+h.diameter/2+n;if(Hk(u.start,u.end,h.center,h.center)<A)return!0}}for(let u of d){for(let h of c.wireSegments){if(h.z<u.minZ||h.z>u.maxZ)continue;let A=u.diameter/2+h.width/2+n;if(Hk(u.center,u.center,h.start,h.end)<A)return!0}for(let h of c.viaSpans){if(u.minZ>h.maxZ||h.minZ>u.maxZ)continue;let A=u.diameter/2+h.diameter/2+n;if(Math.hypot(u.center.x-h.center.x,u.center.y-h.center.y)<A)return!0}}return!1},XYo=({routes:e,movablePreloadedConnectionNames:t,boardObstacles:n,connMap:o,layerCount:i,viaToPadClearance:r,allowBlindAndBuriedVias:s})=>e.some((a)=>{if(!t.has(a.connectionName))return!1;return H6(a,{layerCount:i,allowBlindAndBuriedVias:s}).viaSpans.some((c)=>n.some((l)=>{if((({obstacle:u,route:h,connMap:A})=>{if(N6(u,h,A))return!0;if(!h.rootConnectionName)return!1;let m=A.getNetConnectedToId(h.connectionName)??A.getNetConnectedToId(h.rootConnectionName)??(A.netMap[h.rootConnectionName]?h.rootConnectionName:void 0);return!!m&&u.connectedTo.some((p)=>(A.getNetConnectedToId(p)??(A.netMap[p]?p:void 0))===m)})({obstacle:l,route:a,connMap:o}))return!1;return!!((u,h)=>(u.__zLayers??u.zLayers)||u.layers.map((m)=>Wi(m,h)))(l,i).some((u)=>u>=c.minZ&&u<=c.maxZ)&&((u,h)=>{let A=-1*(h.ccwRotationDegrees??0)*Math.PI/180,m=u.x-h.center.x,p=u.y-h.center.y,g=m*Math.cos(A)-p*Math.sin(A),_=m*Math.sin(A)+p*Math.cos(A),f=Math.max(Math.abs(g)-h.width/2,0),y=Math.max(Math.abs(_)-h.height/2,0);return Math.hypot(f,y)})(c.center,l)<c.diameter/2+r}))}),vYt=class extends Oi{params;highDensitySolver;forceImproveSolver;repairSolver;phase="route";constructor(e){super(),this.params=e,this.stats={preloadedViaCandidateRejectionCount:0,forceImproveCandidateRejectionCount:0,repairCandidateRejectionCount:0},this.highDensitySolver=new yL({nodePortPoints:[e.nodeWithPortPoints],colorMap:e.colorMap,connMap:e.connMap,viaDiameter:e.viaDiameter,traceWidth:e.traceWidth,obstacleMargin:e.obstacleMargin,effort:e.effort,nodePfById:e.nodePfById,obstacles:e.obstacles,layerCount:e.layerCount,useGrowShrinkHighDensityIntraNodeSolver:!0,preserveTerminalPcbPortIds:!1,growShrinkFallbackToInvalidGeometryOnFailure:!1,growShrinkSolutionValidator:e.boardObstacles&&e.movablePreloadedConnectionNames&&e.viaToPadClearance!==void 0?(t)=>this.validateCandidateRoutes(t):void 0}),this.activeSubSolver=this.highDensitySolver,this.MAX_ITERATIONS=1e8*e.effort}getSolverName(){return"Pipeline9RegionalFallbackSolver"}validateCandidateRoutes(e){let{boardObstacles:t,movablePreloadedConnectionNames:n,viaToPadClearance:o}=this.params;if(!t||!n||o===void 0)return!0;let i=XYo({routes:e,movablePreloadedConnectionNames:n,boardObstacles:t,connMap:this.params.connMap,layerCount:this.params.layerCount,allowBlindAndBuriedVias:this.params.allowBlindAndBuriedVias,viaToPadClearance:o});return i&&(this.stats.preloadedViaCandidateRejectionCount=Number(this.stats.preloadedViaCandidateRejectionCount??0)+1),!i}_step(){if(this.phase==="route"){if(this.highDensitySolver.step(),this.highDensitySolver.failed)return this.error=this.highDensitySolver.error,void(this.failed=!0);if(!this.highDensitySolver.solved)return;let e=GHe(this.highDensitySolver.routes);return this.validateCandidateRoutes(e)?(this.forceImproveSolver=new ine({nodeWithPortPoints:[this.params.nodeWithPortPoints],hdRoutes:e,colorMap:this.params.colorMap,totalStepsPerNode:Math.max(12,Math.round(20*this.params.effort)),nodeAssignmentMargin:this.params.obstacleMargin}),this.activeSubSolver=this.forceImproveSolver,void(this.phase="improve")):(this.error="Pipeline9 regional route output failed its candidate validator",void(this.failed=!0))}if(this.phase==="improve"){if(this.forceImproveSolver.step(),this.forceImproveSolver.failed)return this.error=this.forceImproveSolver.error,void(this.failed=!0);if(!this.forceImproveSolver.solved)return;let e=this.forceImproveSolver.getOutput();return this.validateCandidateRoutes(e)?(this.repairSolver=new rne({nodeWithPortPoints:[this.params.nodeWithPortPoints],hdRoutes:e,obstacles:this.params.obstacles,colorMap:this.params.colorMap,repairMargin:this.params.obstacleMargin,minimumTraceWidth:this.params.traceWidth,connMap:this.params.connMap}),this.activeSubSolver=this.repairSolver,void(this.phase="repair")):(this.stats.forceImproveCandidateRejectionCount=Number(this.stats.forceImproveCandidateRejectionCount??0)+1,this.error="Pipeline9 regional force-improve output failed its candidate validator",void(this.failed=!0))}if(this.phase==="repair"){if(this.repairSolver.step(),this.repairSolver.failed)return this.error=this.repairSolver.error,void(this.failed=!0);if(!this.repairSolver.solved)return;let e=this.repairSolver.getOutput();return this.validateCandidateRoutes(e)?(this.activeSubSolver=null,this.phase="done",void(this.solved=!0)):(this.stats.repairCandidateRejectionCount=Number(this.stats.repairCandidateRejectionCount??0)+1,this.error="Pipeline9 regional repair output failed its candidate validator",void(this.failed=!0))}}getOutput(){return this.repairSolver?.getOutput()??this.forceImproveSolver?.getOutput()??this.highDensitySolver.routes}visualize(){return this.repairSolver?.visualize()??this.forceImproveSolver?.visualize()??this.highDensitySolver.visualize()}},tBt=(e,t)=>({minX:e.center.x-e.width/2-t,maxX:e.center.x+e.width/2+t,minY:e.center.y-e.height/2-t,maxY:e.center.y+e.height/2+t}),KYo=(e,t,n,o,i)=>{let r=new Set(t.availableZ??t.portPoints.map((a)=>a.z)),s=H6(e,i);return s.wireSegments.some((a)=>r.has(a.z)&&((c,l,d,u)=>Math.min(c.x,l.x)-d<=u.maxX&&Math.max(c.x,l.x)+d>=u.minX&&Math.min(c.y,l.y)-d<=u.maxY&&Math.max(c.y,l.y)+d>=u.minY)(a.start,a.end,a.width/2+o,n))||s.viaSpans.some((a)=>[...r].some((c)=>c>=a.minZ&&c<=a.maxZ)&&((c,l,d)=>{let u=Math.max(d.minX-c.x,0,c.x-d.maxX),h=Math.max(d.minY-c.y,0,c.y-d.maxY);return u*u+h*h<=l*l})(a.center,a.diameter/2+o,n))},Uee=(e,t)=>{let n=(o)=>({...o,rootConnectionName:t.getNetConnectedToId(o.rootConnectionName??o.connectionName)??o.rootConnectionName??o.connectionName});return{...e,portPoints:e.portPoints.map(n),portPointsInPairs:e.portPointsInPairs?.map(([o,i])=>[n(o),n(i)])}},jYo=({nodeWithPortPoints:e,connMap:t,colorMap:n,viaDiameter:o,traceWidth:i,obstacleMargin:r,effort:s,nodePfById:a,obstacles:c,boardGeometry:l,layerCount:d})=>new yL({nodePortPoints:[Uee(e,t)],colorMap:n,connMap:t,viaDiameter:o,traceWidth:i,obstacleMargin:r,effort:s,nodePfById:a,obstacles:c,layerCount:d,useGrowShrinkHighDensityIntraNodeSolver:!0,enableNegotiatedSearch:!0,gridSearchSegmentWork:500,gridSearchWorkScale:d>2?0.25:1,rejectOverlappingTerminals:d>2,boardGeometry:l,preserveTerminalPcbPortIds:!1,growShrinkFallbackToInvalidGeometryOnFailure:!1,captureSearchDebug:!1}),VHe=class extends Oi{fixedHdRoutes;connMap;colorMap;obstacles;boardGeometry;layerCount;allowBlindAndBuriedVias;viaDiameter;traceWidth;obstacleMargin;viaToPadClearance;effort;nodePfById;preserveTerminalPcbPortIds;includeBoardObstacles;enableRegionalFallback;maxB01Rips;routes=[];failedSolvers=[];unsolvedNodePortPoints;fixedRouteReplacements=new Map;removedFixedRouteConnectionNames=new Set;preloadedTraceMutationMasks=new Map;activeRegularSolver=null;activeB01Solver=null;activeFallbackSolver=null;activeFallbackFixedRouteSections=new Map;activeFallbackFixedObstacleRoutes=[];activeFallbackPromotedFixedRouteConnectionNames=new Set;activeFallbackReason=null;activeNode=null;constructor(e){super(),this.fixedHdRoutes=e.fixedHdRoutes,this.connMap=e.connMap,this.colorMap=e.colorMap??{},this.obstacles=e.obstacles,this.boardGeometry=e.boardGeometry,this.layerCount=e.layerCount,this.allowBlindAndBuriedVias=e.allowBlindAndBuriedVias??!1,this.viaDiameter=e.viaDiameter,this.traceWidth=e.traceWidth,this.obstacleMargin=e.obstacleMargin,this.viaToPadClearance=e.viaToPadClearance,this.effort=e.effort,this.nodePfById=e.nodePfById instanceof Map?new Map(e.nodePfById):new Map(Object.entries(e.nodePfById??{})),this.preserveTerminalPcbPortIds=e.preserveTerminalPcbPortIds??!1,this.includeBoardObstacles=e.includeBoardObstacles??!1,this.enableRegionalFallback=e.enableRegionalFallback??!0,this.maxB01Rips=e.maxB01Rips,this.unsolvedNodePortPoints=[...e.nodePortPoints],this.MAX_ITERATIONS=1e8*this.effort,this.stats={nodeCount:e.nodePortPoints.length,solvedNodeCount:0,fixedObstacleCount:e.fixedHdRoutes.length,fixedObstacleUses:0,boardObstacleUses:0,fallbackNodeCount:0,regularNodeCount:0,b01NodeCount:0,reroutedFixedRouteCount:0,reroutedFixedRouteSectionCount:0,promotedFallbackAttemptCount:0,promotedFixedRouteCount:0,regionalPreloadedViaCandidateRejectionCount:0,regionalForceImproveCandidateRejectionCount:0,regionalRepairCandidateRejectionCount:0}}getSolverName(){return"Pipeline9HighDensitySolver"}getUpdatedFixedHdRoutes(){return this.fixedHdRoutes.flatMap((e)=>this.removedFixedRouteConnectionNames.has(e.connectionName)?[]:[this.fixedRouteReplacements.get(e.connectionName)??e])}finishActiveNode(e){let t=this.activeNode?((n,o)=>n.map((i)=>({...i,rootConnectionName:o.portPoints.find((r)=>r.connectionName===i.connectionName)?.rootConnectionName??i.rootConnectionName})))(e,this.activeNode):e;this.routes.push(...this.preserveTerminalPcbPortIds&&this.activeNode?((n,o)=>{let i=o.portPoints.filter((r)=>r.pcb_port_id!==void 0);return n.map((r)=>{let s=r.route[0],a=r.route.at(-1),c=i.find((d)=>s!==void 0&&d.connectionName===r.connectionName&&d.x===s.x&&d.y===s.y&&d.z===s.z),l=i.find((d)=>a!==void 0&&d.connectionName===r.connectionName&&d.x===a.x&&d.y===a.y&&d.z===a.z);return{...r,startPcbPortId:c?.pcb_port_id,endPcbPortId:l?.pcb_port_id}})})(t,this.activeNode):t),this.stats.solvedNodeCount=Number(this.stats.solvedNodeCount??0)+1,this.activeB01Solver=null,this.activeRegularSolver=null,this.activeFallbackSolver=null,this.activeFallbackFixedRouteSections.clear(),this.activeFallbackFixedObstacleRoutes=[],this.activeFallbackPromotedFixedRouteConnectionNames.clear(),this.activeFallbackReason=null,this.activeNode=null}startRegularSolver(e){this.activeNode=e,this.activeRegularSolver=jYo({nodeWithPortPoints:e,colorMap:this.colorMap,connMap:this.connMap,viaDiameter:this.viaDiameter,traceWidth:this.traceWidth,obstacleMargin:this.obstacleMargin,effort:this.effort,nodePfById:this.nodePfById,obstacles:this.obstacles,boardGeometry:this.boardGeometry,layerCount:this.layerCount}),this.stats.regularNodeCount=Number(this.stats.regularNodeCount??0)+1}startRegionalFallback(e=new Set){if(!this.activeNode)throw Error("Pipeline9 cannot start a regional fallback without an active node");let t={...Uee(this.activeNode,this.connMap),availableZ:Array.from({length:this.layerCount},(s,a)=>a)},n=Qte(t,this.getUpdatedFixedHdRoutes(),e),o=new Set([...n.fixedRouteSectionsByConnectionName.values()].flatMap((s)=>s.sourceRoutes.map((a)=>a.connectionName)));for(let s of e)if(!o.has(s))throw Error(`Pipeline9 could not promote fixed route "${s}" into the active regional fallback`);let i=[...e].filter((s)=>!this.activeFallbackPromotedFixedRouteConnectionNames.has(s)).length;this.activeFallbackFixedRouteSections=n.fixedRouteSectionsByConnectionName,this.activeFallbackFixedObstacleRoutes=n.fixedObstacleRoutes,this.activeFallbackPromotedFixedRouteConnectionNames=new Set(e);let r=bYt({fixedObstacleRoutes:this.activeFallbackFixedObstacleRoutes,layerCount:this.layerCount,allowBlindAndBuriedVias:this.allowBlindAndBuriedVias});this.activeFallbackSolver=new vYt({nodeWithPortPoints:n.nodeWithPortPoints,colorMap:this.colorMap,connMap:this.connMap,viaDiameter:this.viaDiameter,traceWidth:this.traceWidth,obstacleMargin:this.obstacleMargin,effort:this.effort,nodePfById:this.nodePfById,obstacles:[...this.obstacles,...r],boardObstacles:this.obstacles,movablePreloadedConnectionNames:o,viaToPadClearance:this.viaToPadClearance,layerCount:this.layerCount,allowBlindAndBuriedVias:this.allowBlindAndBuriedVias}),e.size===0?this.stats.fallbackNodeCount=Number(this.stats.fallbackNodeCount??0)+1:(this.stats.promotedFallbackAttemptCount=Number(this.stats.promotedFallbackAttemptCount??0)+1,this.stats.promotedFixedRouteCount=Number(this.stats.promotedFixedRouteCount??0)+i)}finishRegionalFallback(){if(!this.activeFallbackSolver)return;if(!this.activeNode)throw Error("Pipeline9 cannot finish a regional fallback without an active node");this.recordRegionalCandidateRejections();let e=[],t=new Map;for(let h of this.activeFallbackSolver.getOutput()){if(!this.activeFallbackFixedRouteSections.has(h.connectionName)){e.push(h);continue}let A=t.get(h.connectionName)??[];A.push(h),t.set(h.connectionName,A)}let n=[],o=[];for(let[h,A]of this.activeFallbackFixedRouteSections){let m=t.get(h)??[];if(m.length===0){o.push(A);continue}if(m.length>1)return this.error=`Pipeline9 regional fallback expected one replacement for fixed route "${h}", got ${m.length}`,void(this.failed=!0);let p=gYt({section:A,replacement:m[0],sourceMutationMasks:this.preloadedTraceMutationMasks,replacementIsMutated:!0});n.push({connectionName:h,section:A,replacement:p.route,mutatedSegments:p.mutatedSegments,replacementProducedSegment:p.replacementProducedSegment})}let i=[...e,...n.map(({replacement:h})=>h)],r=[...this.activeFallbackFixedObstacleRoutes,...o.flatMap((h)=>h.sourceRoutes)],s=tBt(this.activeNode,this.obstacleMargin+Math.max(this.traceWidth,this.viaDiameter)/2),a=new Map;for(let h of i)for(let A of r)SYt(h,A,this.connMap)||PYt({left:h,right:A,clearance:this.obstacleMargin,leftBounds:s,layerCount:this.layerCount,allowBlindAndBuriedVias:this.allowBlindAndBuriedVias})&&a.set(A.connectionName,A);if(a.size>0){let h=[...a.keys()],A=[...a].flatMap(([p,g])=>g.isThroughObstacle===!0?[]:[p]),m=new Set(this.activeFallbackPromotedFixedRouteConnectionNames);for(let p of A)m.add(p);if(m.size===this.activeFallbackPromotedFixedRouteConnectionNames.size){let p=[...a].flatMap(([g,_])=>_.isThroughObstacle===!0?[g]:[]);return this.error=p.length>0?`Pipeline9 regional fallback conflicts with immutable through-obstacle route(s): ${p.join(", ")}`:`Pipeline9 promoted regional fallback could not resolve immutable fixed route conflict(s): ${h.join(", ")}`,void(this.failed=!0)}return void this.startRegionalFallback(m)}let c=new Map;for(let{section:h,replacementProducedSegment:A}of n)if(A)for(let m of h.sourceRoutes){let{preloadedRoutePositionStart:p,preloadedRoutePositionEnd:g}=m;if(p===void 0!=(g===void 0))throw Error(`Pipeline9 fixed route "${m.connectionName}" has incomplete route-position metadata`);let _=Math.min(p??m.preloadedRouteIndex,g??m.preloadedRouteIndex),f=Math.max(p??m.preloadedRouteIndex,g??m.preloadedRouteIndex),y=c.get(m.preloadedTraceIndex);c.set(m.preloadedTraceIndex,{start:Math.min(y?.start??_,_),end:Math.max(y?.end??f,f)})}for(let{connectionName:h,section:A,replacement:m,mutatedSegments:p}of n){this.fixedRouteReplacements.set(h,m),this.preloadedTraceMutationMasks.set(h,p);for(let g of A.sourceRoutes.slice(1))this.removedFixedRouteConnectionNames.add(g.connectionName),this.preloadedTraceMutationMasks.delete(g.connectionName)}let l=Qte({...Uee(this.activeNode,this.connMap),portPoints:[],portPointsInPairs:[],availableZ:Array.from({length:this.layerCount},(h,A)=>A)},this.getUpdatedFixedHdRoutes()),d=new Set;for(let h of l.fixedRouteSectionsByConnectionName.values()){let A=h.sourceRoutes[0];if(!A)continue;let m=c.get(A.preloadedTraceIndex);if(m)for(let[p,g]of h.sourceRoutes.entries()){let _=g.preloadedRoutePositionStart??g.preloadedRouteIndex,f=g.preloadedRoutePositionEnd??g.preloadedRouteIndex,y={start:Math.min(_,f),end:Math.max(_,f)},x=y.start===y.end,C=m.start===m.end;if(!(x||C?y.start<=m.end&&m.start<=y.end:y.start<m.end&&m.start<y.end))continue;d.add(A.preloadedTraceIndex);let I=[...this.preloadedTraceMutationMasks.get(g.connectionName)??Array(g.route.length-1).fill(!1)];if(I.length!==g.route.length-1)throw Error(`Pipeline9 fixed route mutation mask for "${g.connectionName}" has ${I.length} segments, expected ${g.route.length-1}`);let b=p===0?h.start.segmentIndex:0,P=p===h.sourceRoutes.length-1?h.end.segmentIndex:g.route.length-2;for(let E=b;E<=P;E++)I[E]=!0;this.preloadedTraceMutationMasks.set(g.connectionName,I)}}for(let h of c.keys())if(!d.has(h))throw Error(`Pipeline9 could not capture accepted mutation provenance for trace ${h}`);let u=n.reduce((h,{section:A})=>h+A.sourceRoutes.length,0);this.stats.reroutedFixedRouteCount=Number(this.stats.reroutedFixedRouteCount??0)+u,this.stats.reroutedFixedRouteSectionCount=Number(this.stats.reroutedFixedRouteSectionCount??0)+n.length,this.finishActiveNode(e)}recordRegionalCandidateRejections(){if(!this.activeFallbackSolver)return;let e=this.activeFallbackSolver.stats;this.stats.regionalPreloadedViaCandidateRejectionCount=Number(this.stats.regionalPreloadedViaCandidateRejectionCount??0)+Number(e.preloadedViaCandidateRejectionCount??0),this.stats.regionalForceImproveCandidateRejectionCount=Number(this.stats.regionalForceImproveCandidateRejectionCount??0)+Number(e.forceImproveCandidateRejectionCount??0),this.stats.regionalRepairCandidateRejectionCount=Number(this.stats.regionalRepairCandidateRejectionCount??0)+Number(e.repairCandidateRejectionCount??0)}finishRegularSolverFailure(e){if(this.activeFallbackReason=`regular high-density routing failed: ${e}`,this.activeRegularSolver=null,!this.enableRegionalFallback)return this.error=`Pipeline9 ${this.activeFallbackReason}`,this.failed=!0,void(this.activeNode=null);this.startRegionalFallback()}_step(){this.stepNodeRouting(),this.activeSubSolver=this.activeFallbackSolver??this.activeRegularSolver??this.activeB01Solver}computeProgress(){if(this.solved)return 1;let e=Number(this.stats.nodeCount);if(e===0)return 0;let t=Math.max(0,Math.min(1,this.activeSubSolver?.progress??0));return Math.max(this.progress,(Number(this.stats.solvedNodeCount)+t)/e)}stepNodeRouting(){if(this.activeFallbackSolver){if(this.activeFallbackSolver.step(),this.activeFallbackSolver.failed)return this.recordRegionalCandidateRejections(),this.error=[`Pipeline9 primary high-density routing failed: ${this.activeFallbackReason??"unknown error"}`,`regional fallback failed: ${this.activeFallbackSolver.error??"unknown error"}`].join("; "),this.failed=!0,this.activeFallbackSolver=null,this.activeFallbackFixedRouteSections.clear(),this.activeFallbackFixedObstacleRoutes=[],this.activeFallbackPromotedFixedRouteConnectionNames.clear(),void(this.activeNode=null);if(!this.activeFallbackSolver.solved)return;return void this.finishRegionalFallback()}if(this.activeRegularSolver){if(this.activeRegularSolver.step(),this.activeRegularSolver.failed)return void this.finishRegularSolverFailure(this.activeRegularSolver.error??"unknown error");if(!this.activeRegularSolver.solved)return;return void this.finishActiveNode(this.activeRegularSolver.routes)}if(this.activeB01Solver){if(this.activeB01Solver.step(),this.activeB01Solver.failed)return this.failedSolvers.push(this.activeB01Solver),this.activeFallbackReason=`B01 failed: ${this.activeB01Solver.error??"unknown error"}`,this.activeB01Solver=null,this.enableRegionalFallback?void this.startRegionalFallback():(this.error=`Pipeline9 ${this.activeFallbackReason}`,this.failed=!0,void(this.activeNode=null));if(!this.activeB01Solver.solved)return;return void this.finishActiveNode(this.activeB01Solver.getOutput())}let e=this.unsolvedNodePortPoints.pop();if(!e)return void(this.solved=!0);let t=tBt(e,this.obstacleMargin),n=Math.max(this.traceWidth,this.viaDiameter)/2,o=this.getUpdatedFixedHdRoutes().filter((s)=>KYo(s,e,t,n,this)).flatMap((s)=>((a,c,l)=>{let d=new Set(c.availableZ??c.portPoints.map((m)=>m.z));if(d.size===0)throw Error(`Pipeline9 B01 node "${c.capacityMeshNodeId}" has no available layers`);let u={type:"route",connectionName:a.connectionName,rootConnectionName:a.rootConnectionName,traceThickness:a.traceThickness,viaDiameter:a.viaDiameter},h=[],A=H6(a,l);for(let m of A.wireSegments)d.has(m.z)&&h.push({...u,traceThickness:m.width,route:[m.start,m.end],vias:[]});for(let m of A.viaSpans)[...d].some((p)=>p>=m.minZ&&p<=m.maxZ)&&h.push({...u,viaDiameter:m.diameter,route:[{...m.center,z:m.minZ},{...m.center,z:m.maxZ}],vias:[{...m.center,zStart:m.minZ,zEnd:m.maxZ}]});return h})(s,e,this));if(this.stats.fixedObstacleUses=Number(this.stats.fixedObstacleUses??0)+o.length,o.length===0)return void this.startRegularSolver(e);let i=(this.includeBoardObstacles?this.obstacles:[]).filter((s)=>((a,c)=>{let l=(a.ccwRotationDegrees??0)*Math.PI/180,d=Math.abs(Math.cos(l)),u=Math.abs(Math.sin(l)),h=a.width/2*d+a.height/2*u,A=a.width/2*u+a.height/2*d;return a.center.x-h<=c.maxX&&a.center.x+h>=c.minX&&a.center.y-A<=c.maxY&&a.center.y+A>=c.minY})(s,t)).map((s)=>(({obstacle:a,node:c,connMap:l,layerCount:d})=>{let u=new Set(c.availableZ??c.portPoints.map((m)=>m.z)),h=(a.zLayers??a.layers.map((m)=>Wi(m,d))).filter((m)=>u.has(m));if(h.length===0)return;let A=a.connectedTo[0]??a.obstacleId??`pipeline9_obstacle_${a.center.x}_${a.center.y}`;return{type:"rect",connectionName:A,rootConnectionName:l.getNetConnectedToId(A)??A,center:a.center,width:a.width,height:a.height,ccwRotationDegrees:a.ccwRotationDegrees,zLayers:h}})({obstacle:s,node:e,connMap:this.connMap,layerCount:this.layerCount})).filter((s)=>s!==void 0);if(this.stats.boardObstacleUses=Number(this.stats.boardObstacleUses??0)+i.length,this.activeNode=e,e.width>15||e.height>15)return this.activeFallbackReason=`B01 node "${e.capacityMeshNodeId}" exceeds the 15x15mm routing limit (${e.width}x${e.height}mm)`,void this.startRegionalFallback();let r=Uee(e,this.connMap);this.stats.b01NodeCount=Number(this.stats.b01NodeCount??0)+1,this.activeB01Solver=new WYo({...OYo,nodeWithPortPoints:r,obstacles:[...o,...i],viaDiameter:this.viaDiameter,viaMinDistFromBorder:this.viaDiameter/2,traceThickness:this.traceWidth,traceMargin:this.obstacleMargin,obstacleClearanceMargin:0.15,effort:this.effort}),this.maxB01Rips!==void 0&&(this.activeB01Solver.MAX_RIPS=this.maxB01Rips)}visualize(){return this.activeFallbackSolver?.visualize()??this.activeRegularSolver?.visualize()??this.activeB01Solver?.visualize()??{lines:this.routes.flatMap((e)=>e.route.slice(0,-1).map((t,n)=>({points:[t,e.route[n+1]],strokeWidth:e.traceThickness,layer:`z${t.z}`,label:e.connectionName}))),points:[],rects:[],circles:[]}}},bk=(e,t)=>{let n=e({hdRoutes:t,traces:[]});return Array.isArray(n)?n:n.errorsWithCenters??n.errors},EYt=(e)=>{let t=typeof e.pcb_trace_id=="string"?e.pcb_trace_id:void 0,n=Array.isArray(e.pcb_trace_ids)?e.pcb_trace_ids.filter((s)=>typeof s=="string"):[],o=[...typeof e.pcb_via_id=="string"?[e.pcb_via_id]:[],...Array.isArray(e.pcb_via_ids)?e.pcb_via_ids:[]].filter((s)=>typeof s=="string"),i=t?`overlap_${t}_`:void 0,r=i&&typeof e.pcb_trace_error_id=="string"&&e.pcb_trace_error_id.startsWith(i)?e.pcb_trace_error_id.slice(i.length):void 0;if(n.length>0){let s=t&&!n.includes(t)?[t,...n]:[...n];return s.length<2&&r&&!o.includes(r)&&s.push(r),s}return[t,r].filter((s)=>typeof s=="string"&&!o.includes(s))},qYo=(e)=>EYt(e).filter((t,n,o)=>o.indexOf(t)===n),nBt=(e)=>e.reduce((t,n)=>{if(typeof n.actual_clearance=="number"&&typeof n.minimum_clearance=="number")return t+Math.max(0,n.minimum_clearance-n.actual_clearance);let o=(typeof n.message=="string"?n.message:"").match(/gap: (-?\d+(?:\.\d+)?)mm/);return o?t+Math.max(0,0.1-Number.parseFloat(o[1])):t+1},0),Eee=(e,t)=>e.length<t.length||e.length===t.length&&nBt(e)<nBt(t)-0.000000001,kte=({routes:e,newConnections:t,syntheticConnectionNames:n})=>{let o=new Set([...t.map((s)=>s.name),...n]),i=new Map,r=new Map;for(let s=0;s<e.length;s++){let a=e[s];if(!o.has(a.connectionName))continue;let c=i.get(a.connectionName)??0;i.set(a.connectionName,c+1),r.set(`${a.connectionName}_${c}`,s)}return r},Gge=0.01,JYo=[0.03,0.1,0.25],oBt=(e)=>{let t=0;for(let n of e){if(typeof n.actual_clearance!="number"||!Number.isFinite(n.actual_clearance)||typeof n.minimum_clearance!="number"||!Number.isFinite(n.minimum_clearance))return;if(t+=Math.max(0,n.minimum_clearance-n.actual_clearance),!Number.isFinite(t))return}return t},_Re=({errors:e,errorsWithCenters:t,routeIndexByTraceId:n,padPositionById:o})=>{let i=[],r=0;for(let s of e){let a=s.type==="pcb_via_trace_clearance_error",c=s.type==="pcb_pad_trace_clearance_error";if(!a&&!c||typeof s.pcb_trace_id!="string"||!n.has(s.pcb_trace_id)||typeof s.actual_clearance!="number"||!Number.isFinite(s.actual_clearance)||typeof s.minimum_clearance!="number"||!Number.isFinite(s.minimum_clearance))return;let l=qYo(s);if(a&&l.length<2||l.some((A)=>!n.has(A)))return;let d=t.find((A)=>A.type===s.type&&A.pcb_trace_id===s.pcb_trace_id&&A.pcb_pad_id===s.pcb_pad_id&&A.pcb_via_id===s.pcb_via_id),u=c?typeof s.pcb_pad_id=="string"?o.get(s.pcb_pad_id):void 0:d?.center??s.center;if(!u||typeof u!="object")return;if(!(("x"in u)&&("y"in u)&&typeof u.x=="number"&&Number.isFinite(u.x)&&typeof u.y=="number"&&Number.isFinite(u.y)))return;let h={...s,pcb_trace_id:s.pcb_trace_id,actual_clearance:s.actual_clearance,minimum_clearance:s.minimum_clearance,center:{x:u.x,y:u.y}};if(a){if(typeof s.pcb_via_id!="string")return;i.push({...h,type:"pcb_via_trace_clearance_error",pcb_via_id:s.pcb_via_id,pcb_pad_id:void 0})}else{if(typeof s.pcb_pad_id!="string")return;i.push({...h,type:"pcb_pad_trace_clearance_error",pcb_pad_id:s.pcb_pad_id,pcb_via_id:void 0})}if(r+=Math.max(0,s.minimum_clearance-s.actual_clearance),!Number.isFinite(r))return}return{errors:i,deficit:r}},UHe=(e)=>((t)=>{let n=typeof t.pcb_trace_id=="string"?t.pcb_trace_id:void 0,o=Array.isArray(t.pcb_trace_ids)?t.pcb_trace_ids.filter((a)=>typeof a=="string"):[],i=[...typeof t.pcb_via_id=="string"?[t.pcb_via_id]:[],...Array.isArray(t.pcb_via_ids)?t.pcb_via_ids:[]].filter((a)=>typeof a=="string"),r=n?`overlap_${n}_`:void 0,s=r&&typeof t.pcb_trace_error_id=="string"&&t.pcb_trace_error_id.startsWith(r)?t.pcb_trace_error_id.slice(r.length):void 0;if(o.length>0){let a=n&&!o.includes(n)?[n,...o]:[...o];return a.length<2&&s&&!i.includes(s)&&a.push(s),a}return[n,s].filter((a)=>typeof a=="string"&&!i.includes(a))})(e).filter((t,n,o)=>o.indexOf(t)===n),$Yo=(e,t)=>{let n=[...new Set(t.flatMap(UHe))];return e.map((o)=>{if(o.jumpers?.length||!n.some((r)=>r===o.connectionName||r.startsWith(`${o.connectionName}_`)))return o;let i=o.route.flatMap((r,s)=>{let a=o.route[s+1];if(!a||r.z!==a.z||r.toNextSegmentType||r.insideJumperPad||a.insideJumperPad||(r.traceThickness??o.traceThickness)!==(a.traceThickness??o.traceThickness))return[r];let c=Math.min(32,Math.ceil(((l,d)=>{let u=Math.max(Math.abs(l),Math.abs(d));if(u===0||u===Number.POSITIVE_INFINITY)return u;let h=l/u,A=d/u;return u*Math.sqrt(h*h+A*A)})(a.x-r.x,a.y-r.y)/0.25));return[r,...Array.from({length:Math.max(0,c-1)},(l,d)=>({x:r.x+(a.x-r.x)*(d+1)/c,y:r.y+(a.y-r.y)*(d+1)/c,z:r.z,traceThickness:r.traceThickness}))]});return i.length===o.route.length?o:{...o,route:i}})},fk=class extends Oi{params;state={phase:"initialize"};constructor(e){super(),this.params=e}_step(){let e=this.state,t=this.params;if(e.phase==="initialize"){let l=t.drcEvaluator({traces:[],routes:t.routes,hdRoutes:t.routes}),d=Array.isArray(l)?l:l.errors;if(d.length===0)return this.state={phase:"finished",output:t.routes},void(this.solved=!0);let u={...XE(t.originalSrj),traces:void 0},h=bV(t.routes),A=t.subdivideSegments?$Yo(h,d):h,m=new cDo({srj:u,routes:A,bounds:u.bounds,boundaryMargin:0,boardEdgeClearance:t.originalSrj.minBoardEdgeClearance??0,lockedPointIndices:A.map((p)=>p.route.map(()=>!1)),allowViaMovement:!t.allowPartialRepair,traceClearance:(t.originalSrj.minTraceToPadEdgeClearance??j8.traceClearance)+(t.allowPartialRepair||t.usePrecisionMargin?Gge:0),viaClearance:(t.originalSrj.minPadEdgeToPadEdgeClearance??j8.viaClearance)+(t.usePrecisionMargin?Gge:0)});return this.MAX_ITERATIONS=m.MAX_ITERATIONS+4,this.activeSubSolver=m,void(this.state={phase:"relax",context:{srj:u,errors:d,originalCanonicalRoutes:h,canonicalRoutes:A},solver:m})}if(e.phase==="relax"){if(e.solver.step(),this.MAX_ITERATIONS=e.solver.MAX_ITERATIONS+4,e.solver.failed)throw Error(`Clearance relaxation failed: ${e.solver.error}`);return void(e.solver.solved&&(this.activeSubSolver=null,this.state={phase:"select",context:e.context,candidate:e.solver.getOutput()}))}if(e.phase==="finished")throw Error("Clearance projection stepped after completion");let{srj:n,errors:o,originalCanonicalRoutes:i,canonicalRoutes:r}=e.context;if(e.phase==="select"){let l=e.candidate;return t.allowPartialRepair&&(l=(({srj:d,routes:u,proposedRoutes:h})=>{if(u.length!==h.length)throw Error("Clearance projection changed the route count");if(d.allowBlindAndBuriedVias||u.some((B)=>B.jumpers?.length||B.route.some((w)=>w.toNextSegmentType||w.insideJumperPad)))return u;let{holeDiameter:A}=y0(d),m=(B,w)=>({type:"pcb_trace",pcb_trace_id:`projection_${w}`,connection_name:B.rootConnectionName??B.connectionName,route:Ex(B,d.layerCount,{defaultViaHoleDiameter:A})}),p=u.map(m),g={...d,minBoardEdgeClearance:d.minBoardEdgeClearance??0,traces:p},_=new F6(g),f=new Set(_.canonicalize([...(d.differentialPairs??[]).flatMap((B)=>B.connectionNames),...(d.buses??[]).flatMap((B)=>B.connectionNames)])),y=[...u],x=[];for(let[B,w]of h.entries()){let T=u[B];if(w.route.length!==T.route.length)throw Error("Partial clearance projection changed routing topology");let Q=[p[B].pcb_trace_id];if(!_.canonicalize(Q).some((N)=>f.has(N))){y[B]={...T,route:[...w.route]};for(let N=0;N<w.route.length;N++)w.route[N].x===T.route[N].x&&w.route[N].y===T.route[N].y||x.push({routeIndex:B,pointIndex:N})}}let C=new zI(g,y.map(m),void 0,[],_),I=({routeIndex:B,pointIndex:w})=>{let T=y[B];for(let Q=Math.max(1,w);Q<=Math.min(w+1,T.route.length-1);Q++){let N=T.route[Q-1],F=T.route[Q];if(N.z!==F.z)throw Error("Partial clearance projection moved a layer transition");if(C.collides({start:N,end:F,layer:nd(N.z,d.layerCount),width:Math.max(N.traceThickness??T.traceThickness,F.traceThickness??T.traceThickness),connectionNames:[p[B].pcb_trace_id]}))return!1}return!0},b=x;for(;b.length>0;){let B=b.filter((T)=>!I(T));if(B.length===0)break;for(let{routeIndex:T,pointIndex:Q}of B)y[T].route[Q]=u[T].route[Q];let w=new Set(B);b=b.filter((T)=>!w.has(T)),C=new zI(g,y.map(m),void 0,[],_)}let P=new Set(b);for(let B=0;B<x.length;B++){let w=x[B];if(P.has(w))continue;let T=[w];for(;B+1<x.length;){let Q=x[B+1];if(P.has(Q)||Q.routeIndex!==w.routeIndex||Q.pointIndex!==x[B].pointIndex+1)break;T.push(Q),B++}for(let{routeIndex:Q,pointIndex:N}of T)y[Q].route[N]=h[Q].route[N];for(;T.length>0;){let Q=T.filter((F)=>!I(F));if(Q.length===0)break;for(let{routeIndex:F,pointIndex:H}of Q)y[F].route[H]=u[F].route[H];let N=new Set(Q);T=T.filter((F)=>!N.has(F))}if(T.length!==0){for(let Q of T)P.add(Q);C=new zI(g,y.map(m),void 0,[],_)}}let E=new Set([...P].map(({routeIndex:B})=>B));return y.map((B,w)=>E.has(w)?B:u[w])})({srj:n,routes:r,proposedRoutes:l}),l=l.map((d,u)=>d===r[u]?i[u]:d)),void(this.state={phase:"physical-validation",context:e.context,candidate:l})}if(e.phase==="physical-validation"){let l=new Map(Zk({srj:n,routes:r}).map((d)=>[d.key,d.severity]));return Zk({srj:n,routes:e.candidate}).some(({key:d,severity:u})=>!l.has(d)||u>l.get(d)+0.00000001)||kLe({srj:n,previousRoutes:t.previousRoutes??r,routes:e.candidate}).length>0?(this.state={phase:"finished",output:t.routes},void(this.solved=!0)):void(this.state={...e,phase:"reference-validation"})}let s=t.drcEvaluator({traces:[],routes:e.candidate,hdRoutes:e.candidate}),a=Array.isArray(s)?s:s.errors,c=t.allowPartialRepair?((l,d)=>{if(d.length>=l.length)return!1;let u=(A)=>A.type==="pcb_via_trace_clearance_error"?JSON.stringify([A.type,A.pcb_trace_id,A.pcb_via_id]):A.type==="pcb_pad_trace_clearance_error"?JSON.stringify([A.type,A.pcb_trace_id,A.pcb_pad_id]):A.type==="pcb_via_clearance_error"&&Array.isArray(A.pcb_via_ids)?JSON.stringify([A.type,[...A.pcb_via_ids].sort()]):A.type==="pcb_trace_error"&&typeof A.pcb_trace_error_id=="string"&&A.pcb_trace_error_id.startsWith(`overlap_${A.pcb_trace_id}_`)?JSON.stringify([A.type,A.pcb_trace_error_id]):void 0,h=[...l];for(let A of d){let m=u(A);if(m===void 0)return!1;let p=h.findIndex((_)=>u(_)===m);if(p<0)return!1;let g=h.splice(p,1)[0];if(A.type!=="pcb_trace_error"&&(typeof A.actual_clearance!="number"||!Number.isFinite(A.actual_clearance)||typeof g.actual_clearance!="number"||!Number.isFinite(g.actual_clearance)||A.minimum_clearance!==g.minimum_clearance||A.actual_clearance<g.actual_clearance-0.000000001))return!1}return!0})(o,a):a.length<o.length;this.state={phase:"finished",output:c?e.candidate:t.routes},this.solved=!0}getOutput(){if(!this.solved||this.state.phase!=="finished")throw Error("Clearance projection is not complete");return this.state.output}computeProgress(){switch(this.state.phase){case"initialize":return 0;case"relax":return 0.9*this.state.solver.progress;case"select":return 0.9;case"physical-validation":return 0.93;case"reference-validation":return 0.96;case"finished":return 1}}},ZYo={maxRegions:4,maxCandidateAttempts:1024,maxPathSearchNodes:480000},iBt=(e,t,n)=>{if(!Number.isFinite(n)||n<=0)throw Error("Pipeline9 regional repair effort must be positive and finite");let o=Math.max(1,n);return{maxRegions:Math.ceil(24*o),maxCandidateAttempts:Math.ceil(4096*o),maxPathSearchNodes:Math.ceil(40000000*o),initialMaxRegions:Math.ceil(4*o),initialMaxCandidateAttempts:Math.ceil(1024*o),initialMaxPathSearchNodes:Math.ceil(2000000*o),regionsPerAcceptedRepair:2,candidateAttemptsPerAcceptedRepair:512,pathSearchNodesPerAcceptedRepair:2000000,maxCandidateAttemptsPerRegion:512,maxPathSearchNodesPerCall:1e6,pathGridSizeScale:2,pathHeuristicWeight:3,revisitChangedRegions:!0,regionSizes:[16,32]}},rBt=(e,t)=>({maxRegions:Math.min(e.maxRegions,(e.initialMaxRegions??e.maxRegions)+t*(e.regionsPerAcceptedRepair??0)),maxCandidateAttempts:Math.min(e.maxCandidateAttempts,(e.initialMaxCandidateAttempts??e.maxCandidateAttempts)+t*(e.candidateAttemptsPerAcceptedRepair??0)),maxPathSearchNodes:Math.min(e.maxPathSearchNodes,(e.initialMaxPathSearchNodes??e.maxPathSearchNodes)+t*(e.pathSearchNodesPerAcceptedRepair??0))}),sBt=[3,4,5,6,8],aBt=({error:e,routeIndexByTraceId:t})=>{let n=typeof e.pcb_trace_id=="string"?e.pcb_trace_id:void 0,o=[...typeof e.pcb_via_id=="string"?[e.pcb_via_id]:[],...Array.isArray(e.pcb_via_ids)?e.pcb_via_ids.filter((a)=>typeof a=="string"):[]],i=n?`overlap_${n}_`:void 0,r=i&&typeof e.pcb_trace_error_id=="string"&&e.pcb_trace_error_id.startsWith(i)?e.pcb_trace_error_id.slice(i.length):void 0,s=r!==void 0&&o.includes(r);return[n,...Array.isArray(e.pcb_trace_ids)?e.pcb_trace_ids:[],s?void 0:r].filter((a)=>typeof a=="string"&&t.has(a)).filter((a,c,l)=>l.indexOf(a)===c)},cBt=(e)=>e.filter((t)=>t.type==="pcb_via_clearance_error"||Array.isArray(t.pcb_via_ids)).length,MYt=(e,t)=>{let n=new Map;for(let o of e)n.set(o.connectionName,(n.get(o.connectionName)??0)+1);return e.map((o,i)=>{let r=n.get(o.connectionName)>1?`${o.connectionName}_regional_${i}`:o.connectionName;return r!==o.connectionName&&t.addConnections([[r,o.connectionName,o.rootConnectionName??o.connectionName]]),{...o,connectionName:r,preloadedTraceId:`pipeline9_joint_candidate_${i}`,preloadedTraceIndex:i,preloadedRouteIndex:0,isThroughObstacle:!1}})},lBt=(e,t)=>e.minX<=t.maxX&&e.maxX>=t.minX&&e.minY<=t.maxY&&e.maxY>=t.minY,BYt=(e)=>({minX:e.center.x-e.diameter/2,maxX:e.center.x+e.diameter/2,minY:e.center.y-e.diameter/2,maxY:e.center.y+e.diameter/2}),eVo=(e)=>({minX:e.center.x-e.width/2,maxX:e.center.x+e.width/2,minY:e.center.y-e.height/2,maxY:e.center.y+e.height/2}),tVo=(e,t,n)=>{let o=H6(e,n);return o.wireSegments.some((i)=>lBt(((r)=>({minX:Math.min(r.start.x,r.end.x)-r.width/2,maxX:Math.max(r.start.x,r.end.x)+r.width/2,minY:Math.min(r.start.y,r.end.y)-r.width/2,maxY:Math.max(r.start.y,r.end.y)+r.width/2}))(i),t))||o.viaSpans.some((i)=>lBt(BYt(i),t))},nVo=({routes:e,fixedRouteCopperSpatialIndex:t,center:n,regionSize:o,srj:i,connMap:r,colorMap:s,viaDiameter:a,traceWidth:c,obstacleMargin:l,effort:d})=>{let u=MYt(e,r),h={capacityMeshNodeId:"pipeline9_joint_drc_regular_fallback",center:n,width:o,height:o,availableZ:Array.from({length:i.layerCount},(f,y)=>y),portPoints:[],portPointsInPairs:[]},A=Qte(h,u);if(A.fixedRouteSectionsByConnectionName.size===0)return;if(!((f)=>{let y=_Yt(f);return f.portPoints.every((x)=>p9t({point:x,bounds:y})==="on-boundary")})(A.nodeWithPortPoints))return;let m=[...A.fixedRouteSectionsByConnectionName.values()].flatMap((f)=>f.sourceRoutes).reduce((f,y)=>{let x=H6(y,i);return Math.max(f,y.viaDiameter/2,...x.wireSegments.map((C)=>C.width/2),...x.viaSpans.map((C)=>C.diameter/2))},Math.max(c/2,a/2)),p={minX:n.x-o/2-l-m,maxX:n.x+o/2+l+m,minY:n.y-o/2-l-m,maxY:n.y+o/2+l+m},g=t.getRoutesOverlappingBounds(p),_=bYt({fixedObstacleRoutes:g,layerCount:i.layerCount,allowBlindAndBuriedVias:i.allowBlindAndBuriedVias});return{solver:new vYt({nodeWithPortPoints:A.nodeWithPortPoints,colorMap:s,connMap:r,viaDiameter:a,traceWidth:c,obstacleMargin:l,effort:d,obstacles:[...i.obstacles,..._],layerCount:i.layerCount,allowBlindAndBuriedVias:i.allowBlindAndBuriedVias}),routes:e,regionalRoutes:u,problem:A,candidateBounds:p,localFixedObstacleRoutes:g,obstacleMargin:l,connMap:r,srj:i}},oVo=({solver:e,routes:t,regionalRoutes:n,problem:o,candidateBounds:i,localFixedObstacleRoutes:r,obstacleMargin:s,connMap:a,srj:c})=>{if(!e.solved||e.failed)return;let l=e.getOutput(),d=new Map(l.map((m)=>[m.connectionName,m])),u=new Map,h=new Set;for(let[m,p]of o.fixedRouteSectionsByConnectionName){let g=d.get(m);if(!g)return;u.set(p.sourceRoutes[0].preloadedTraceIndex,YHe(p,g));for(let _ of p.sourceRoutes.slice(1))h.add(_.preloadedTraceIndex)}let A=n.flatMap((m,p)=>h.has(p)?[]:[{...u.get(p)??m,connectionName:t[p].connectionName}]);return(({candidateRoutes:m,fixedObstacleRoutes:p,obstacleMargin:g,connMap:_,candidateBounds:f,srj:y})=>{for(let x of m)for(let C of p)if(!SYt(x,C,_)&&PYt({left:x,right:C,clearance:g,leftBounds:f,layerCount:y.layerCount,allowBlindAndBuriedVias:y.allowBlindAndBuriedVias}))return!0;return!1})({candidateRoutes:A,fixedObstacleRoutes:r,obstacleMargin:s,connMap:a,candidateBounds:i,srj:c})?void 0:A},iVo=class extends Oi{params;candidateSearchBudget;phase="initialize";result;currentRoutes;currentErrors=[];bestRoutes;bestErrors=[];fixedRouteCopperSpatialIndex;routeIndexByTraceId=new Map;repairableErrors=[];passIndex=0;errorIndex=0;traceIndex=0;regionIndex=0;traceIds=[];repairCenter;stopB01SearchForError=!1;acceptedOnPass=!1;attemptedCandidateCount=0;acceptedCandidateCount=0;fallbackCandidateCount=0;candidateSearchCount=0;candidateSearchBudgetExhausted=!1;safeTraceLayerRepairSkippedForBudget=!1;preloadEligibleDrcIssueCount=0;b01Candidate;regularCandidate;safeTraceLayerSolver;constructor(e){super(),this.params=e,this.currentRoutes=e.routes,this.bestRoutes=e.routes,this.candidateSearchBudget=((t)=>{if(!Number.isInteger(t)||t<0)throw Error("Pipeline9 regional repair route count must be nonnegative");let n=Math.floor(7000/Math.max(1,t));return Math.max(16,Math.min(192,n))})(e.routes.length),this.MAX_ITERATIONS=64+8*this.candidateSearchBudget}initializeRepair(){let{initialErrors:e,drcEvaluator:t,newConnections:n,syntheticConnectionNames:o}=this.params;this.currentErrors=e??bk(t,this.currentRoutes),this.MAX_ITERATIONS+=16*this.currentErrors.length,this.preloadEligibleDrcIssueCount=this.currentErrors.filter((s)=>(({error:a,preloadRepairTraceIds:c})=>!!EYt(a).some((l)=>c.has(l))||(a.__collapsed_trace_participants??[]).flatMap((l)=>new Set(l.evaluationTraceIds).size>1?[l.solverTraceId]:[]).some((l)=>c.collidingFixedTraceIds?.has(l)))({error:s,preloadRepairTraceIds:this.params.preloadRepairTraceIds})).length;let i=kte({routes:this.currentRoutes,newConnections:n,syntheticConnectionNames:o}),r=this.params.allowTracePairRepair===!0&&this.currentErrors.some((s)=>((a,c)=>!(a.type!=="pcb_trace_error"||typeof a.pcb_via_id=="string"||Array.isArray(a.pcb_via_ids)&&a.pcb_via_ids.length>0)&&aBt({error:a,routeIndexByTraceId:c}).length===2)(s,i));this.preloadEligibleDrcIssueCount!==0||r?(this.fixedRouteCopperSpatialIndex=((s,a)=>{let c=new Map,l=(d,u)=>{let h=Math.floor(u.minX/4),A=Math.floor(u.maxX/4),m=Math.floor(u.minY/4),p=Math.floor(u.maxY/4);for(let g=h;g<=A;g++)for(let _=m;_<=p;_++){let f=`${g}:${_}`,y=c.get(f)??new Set;y.add(d),c.set(f,y)}};for(let d=0;d<s.length;d++){let u=H6(s[d],a);for(let h of u.wireSegments)for(let A of IYt(h,4,1))l(d,eVo(A));for(let h of u.viaSpans)l(d,BYt(h))}return{getRoutesOverlappingBounds:(d)=>{let u=new Set,h=Math.floor(d.minX/4),A=Math.floor(d.maxX/4),m=Math.floor(d.minY/4),p=Math.floor(d.maxY/4);for(let g=h;g<=A;g++)for(let _=m;_<=p;_++)for(let f of c.get(`${g}:${_}`)??[])u.add(f);return[...u].sort((g,_)=>g-_).map((g)=>s[g]).filter((g)=>tVo(g,d,a))}}})(this.params.fixedObstacleRoutes,this.params.srj),this.phase="begin-pass"):this.finishRepair()}beginPass(){this.candidateSearchBudgetExhausted||this.passIndex>=2?this.phase="refine":(this.acceptedOnPass=!1,this.routeIndexByTraceId=kte({routes:this.currentRoutes,newConnections:this.params.newConnections,syntheticConnectionNames:this.params.syntheticConnectionNames}),this.repairableErrors=this.currentErrors.filter((e)=>(e.type==="pcb_trace_error"||e.type==="pcb_pad_trace_clearance_error"||e.type==="pcb_via_trace_clearance_error"||e.type==="pcb_via_clearance_error")&&typeof e.pcb_trace_id=="string"),this.errorIndex=0,this.phase="begin-error")}beginError(){if(this.candidateSearchBudgetExhausted||this.errorIndex>=this.repairableErrors.length)return void(this.phase="finish-pass");let e=this.repairableErrors[this.errorIndex];this.repairCenter=((t,n)=>{let o=typeof t.pcb_pad_id=="string"?t.pcb_pad_id:typeof t.pcb_trace_error_id=="string"?t.pcb_trace_error_id.match(/(pcb_(?:smtpad|plated_hole|hole|keepout)_\d+)$/)?.[1]:void 0;if(o){let i=n.obstacles.find((r)=>r.obstacleId===o||r.connectedTo[0]===o);if(i)return i.center}return((i)=>{let r=i.center;return r&&typeof r=="object"&&"x"in r&&"y"in r&&typeof r.x=="number"&&typeof r.y=="number"?{x:r.x,y:r.y}:void 0})(t)})(e,this.params.srj),this.traceIds=aBt({error:e,routeIndexByTraceId:this.routeIndexByTraceId}).slice(0,2),this.repairCenter?(this.bestRoutes=this.currentRoutes,this.bestErrors=this.currentErrors,this.traceIndex=0,this.regionIndex=0,this.stopB01SearchForError=!1,this.phase="prepare-b01"):this.errorIndex++}startChildSolver(e){let t=Math.floor(e.MAX_ITERATIONS)+1;if(!Number.isSafeInteger(t)||t<1)throw Error("Regional B01 child has an invalid iteration limit");this.MAX_ITERATIONS+=t,this.activeSubSolver=e}prepareB01Candidate(){if(this.stopB01SearchForError||this.candidateSearchBudgetExhausted||this.traceIndex>=this.traceIds.length)return void(this.phase="prepare-regional");let e=this.routeIndexByTraceId.get(this.traceIds[this.traceIndex]);if(e===void 0)return this.traceIndex++,void(this.regionIndex=0);if(this.regionIndex>=sBt.length)return void(this.bestErrors.length===0?this.stopB01SearchForError=!0:(this.traceIndex++,this.regionIndex=0));if(this.candidateSearchCount>=this.candidateSearchBudget)return this.candidateSearchBudgetExhausted=!0,void(this.phase="prepare-regional");let t=this.repairCenter;if(!t)throw Error("Regional B01 candidate has no repair center");let n=sBt[this.regionIndex];this.regionIndex++,this.candidateSearchCount++,this.b01Candidate=(({routes:o,fixedObstacleRoutes:i,routeIndex:r,center:s,regionSize:a,srj:c,connMap:l,colorMap:d,viaDiameter:u,traceWidth:h,obstacleMargin:A,effort:m})=>{let p=MYt(o,l),g=p[r];if(!g)return;let _={capacityMeshNodeId:`pipeline9_joint_drc_${r}_${a}`,center:s,width:a,height:a,availableZ:Array.from({length:c.layerCount},(C,I)=>I),portPoints:[],portPointsInPairs:[]},f=Qte(_,[g]),y=f.fixedRouteSectionsByConnectionName.get(g.connectionName);if(!y)return;let x=p.filter((C,I)=>I!==r);return{solver:new VHe({nodePortPoints:[f.nodeWithPortPoints],fixedHdRoutes:[...x,...i].map((C)=>({...C,rootConnectionName:l.getNetConnectedToId(C.rootConnectionName??C.connectionName)??C.rootConnectionName??C.connectionName})),connMap:l,colorMap:d,obstacles:c.obstacles,layerCount:c.layerCount,allowBlindAndBuriedVias:c.allowBlindAndBuriedVias,viaDiameter:u,traceWidth:h,obstacleMargin:A,effort:m,preserveTerminalPcbPortIds:!0,includeBoardObstacles:!0,enableRegionalFallback:!1,maxB01Rips:120}),routes:o,movableRoute:g,movableSection:y,routeIndex:r}})({...this.params,routes:this.currentRoutes,routeIndex:e,center:t,regionSize:n}),this.b01Candidate&&(this.startChildSolver(this.b01Candidate.solver),this.phase="route-b01")}stepB01Candidate(){let e=this.b01Candidate;if(!e)throw Error("Regional B01 has no active candidate");e.solver.step(),(e.solver.solved||e.solver.failed)&&(this.activeSubSolver=null,this.phase="validate-b01")}validateB01Candidate(){let e=this.b01Candidate;if(!e)throw Error("Regional B01 has no completed candidate");let t=(({solver:n,routes:o,movableRoute:i,movableSection:r,routeIndex:s})=>{if(!n.solved||n.failed)return;let a=n.routes.find((c)=>c.connectionName===i.connectionName);return a?{routes:o.map((c,l)=>l===s?{...YHe(r,a),connectionName:c.connectionName}:c),usedFallback:Number(n.stats.fallbackNodeCount??0)>0}:void 0})(e);if(this.b01Candidate=void 0,t){this.attemptedCandidateCount++,t.usedFallback&&this.fallbackCandidateCount++;let n=bk(this.params.drcEvaluator,t.routes);Eee(n,this.bestErrors)&&(this.bestRoutes=t.routes,this.bestErrors=n),this.bestErrors.length===0&&(this.stopB01SearchForError=!0)}this.phase="prepare-b01"}prepareRegularCandidate(){if(this.bestRoutes!==this.currentRoutes||this.candidateSearchBudgetExhausted)return void(this.phase="commit-error");if(this.candidateSearchCount>=this.candidateSearchBudget)return this.candidateSearchBudgetExhausted=!0,void(this.phase="commit-error");this.candidateSearchCount++;let e=this.repairCenter,t=this.fixedRouteCopperSpatialIndex;if(!e||!t)throw Error("Regional fallback candidate is missing its fixed context");this.regularCandidate=nVo({...this.params,routes:this.currentRoutes,fixedRouteCopperSpatialIndex:t,center:e,regionSize:3}),this.regularCandidate?(this.startChildSolver(this.regularCandidate.solver),this.phase="route-regional"):this.phase="commit-error"}stepRegularCandidate(){let e=this.regularCandidate;if(!e)throw Error("Regional fallback has no active candidate");e.solver.step(),(e.solver.solved||e.solver.failed)&&(this.activeSubSolver=null,this.phase="validate-regional")}validateRegularCandidate(){let e=this.regularCandidate;if(!e)throw Error("Regional fallback has no completed candidate");let t=oVo(e);if(this.regularCandidate=void 0,t){this.attemptedCandidateCount++,this.fallbackCandidateCount++;let n=bk(this.params.drcEvaluator,t);Eee(n,this.bestErrors)&&(this.bestRoutes=t,this.bestErrors=n)}this.phase="commit-error"}commitErrorRepair(){this.bestRoutes!==this.currentRoutes&&(this.currentRoutes=this.bestRoutes,this.currentErrors=this.bestErrors,this.acceptedCandidateCount++,this.acceptedOnPass=!0),this.errorIndex++,this.phase=this.candidateSearchBudgetExhausted?"finish-pass":"begin-error"}finishPass(){this.passIndex++,this.phase=!this.acceptedOnPass||this.currentErrors.length===0||this.candidateSearchBudgetExhausted?"refine":"begin-pass"}refineAcceptedRoutes(){if(this.acceptedCandidateCount>0&&this.currentErrors.length>0){let e=aHe({...this.params.srj,traces:void 0},this.currentRoutes,this.params.effort,1,this.params.connMap);if(e!==this.currentRoutes){let t=bk(this.params.drcEvaluator,e);cBt(t)<=cBt(this.currentErrors)&&Eee(t,this.currentErrors)&&(this.currentRoutes=e,this.currentErrors=t)}}this.phase="prepare-safe-layer"}prepareSafeLayerRepair(){let e=this.currentErrors.some((t)=>t.type==="pcb_trace_error"||t.type==="pcb_pad_trace_clearance_error");this.safeTraceLayerRepairSkippedForBudget=e&&this.candidateSearchBudgetExhausted,e&&!this.candidateSearchBudgetExhausted?(this.safeTraceLayerSolver=new bE({srj:{...this.params.srj,traces:void 0},hdRoutes:this.currentRoutes,connMap:this.params.connMap,effort:this.params.effort,drcEvaluator:this.params.drcEvaluator,maxIterations:8,enableLargeBoardBroadFallback:!1,enableTargetedErrorSweep:!1,enablePostSolveClearanceRelaxation:!1,enableSafeTraceLayerMoves:!0,enableViaInPadLayerMoves:!1}),this.startChildSolver(this.safeTraceLayerSolver),this.phase="route-safe-layer"):this.finishRepair()}stepSafeLayerRepair(){let e=this.safeTraceLayerSolver;if(!e)throw Error("Regional B01 has no safe trace-layer solver");if(e.step(),e.failed)throw Error(`Pipeline9 post-regional safe trace-layer repair failed: ${e.error??"unknown error"}`);e.solved&&(this.activeSubSolver=null,this.phase="validate-safe-layer")}validateSafeLayerRepair(){let e=this.safeTraceLayerSolver;if(!e)throw Error("Regional B01 has no completed safe trace-layer solver");let t=e.getOutput(),n=bk(this.params.drcEvaluator,t);Eee(n,this.currentErrors)&&(this.currentRoutes=t,this.currentErrors=n),this.safeTraceLayerSolver=void 0,this.finishRepair()}finishRepair(){this.result={routes:this.currentRoutes,attemptedCandidateCount:this.attemptedCandidateCount,acceptedCandidateCount:this.acceptedCandidateCount,fallbackCandidateCount:this.fallbackCandidateCount,candidateSearchCount:this.candidateSearchCount,candidateSearchBudget:this.candidateSearchBudget,candidateSearchBudgetExhausted:this.candidateSearchBudgetExhausted,safeTraceLayerRepairSkippedForBudget:this.safeTraceLayerRepairSkippedForBudget,remainingDrcIssueCount:this.currentErrors.length,preloadEligibleDrcIssueCount:this.preloadEligibleDrcIssueCount,preloadRepairAttempted:this.preloadEligibleDrcIssueCount>0},this.activeSubSolver=null,this.stats={...this.result,routes:void 0},this.phase="done",this.solved=!0}_step(){switch(this.phase){case"initialize":return this.initializeRepair();case"begin-pass":return this.beginPass();case"begin-error":return this.beginError();case"prepare-b01":return this.prepareB01Candidate();case"route-b01":return this.stepB01Candidate();case"validate-b01":return this.validateB01Candidate();case"prepare-regional":return this.prepareRegularCandidate();case"route-regional":return this.stepRegularCandidate();case"validate-regional":return this.validateRegularCandidate();case"commit-error":return this.commitErrorRepair();case"finish-pass":return this.finishPass();case"refine":return this.refineAcceptedRoutes();case"prepare-safe-layer":return this.prepareSafeLayerRepair();case"route-safe-layer":return this.stepSafeLayerRepair();case"validate-safe-layer":return this.validateSafeLayerRepair();case"done":throw Error("Regional B01 repair was stepped after completion")}}computeProgress(){if(this.solved)return 1;let e=this.activeSubSolver?Math.max(0,Math.min(1,this.activeSubSolver.progress)):1;return Math.max(this.progress,Math.min(1,(Math.max(0,this.candidateSearchCount-1)+e)/(this.candidateSearchBudget+1)))}getResult(){if(!this.solved||this.failed||!this.result)throw Error("Pipeline9 regional B01 repair is not complete");return this.result}},rVo=class extends Oi{params;merger;result;phase="initialize";physicalSrj;movableRoutes=[];candidateRoutes;beforeErrorCount=0;constructor(e){super(),this.params=e,this.MAX_ITERATIONS=1000004}initializeMerge(){let{srj:e,routes:t,connMap:n,drcEvaluator:o,referenceResult:i}=this.params,r=i??o({traces:[],routes:t,hdRoutes:t});this.result={routes:t,referenceResult:r,referenceValidationCount:i===void 0?1:0,accepted:!1};let s=Array.isArray(r)?r:r.errors;this.beforeErrorCount=s.length;let a=s.filter((l)=>l.type==="pcb_via_clearance_error").flatMap(UHe);if(this.movableRoutes=t.filter((l)=>a.some((d)=>d===l.connectionName||d.startsWith(`${l.connectionName}_`))),this.movableRoutes.length===0)return this.phase="done",void(this.solved=!0);this.physicalSrj={...XE(e),traces:void 0};let c=new Set(this.movableRoutes);this.merger=new fHe({inputHdRoutes:this.movableRoutes,otherHdRoutes:t.filter((l)=>!c.has(l)),netByConnectionName:Hge(t,n),obstacles:this.physicalSrj.obstacles,layerCount:this.physicalSrj.layerCount,connMap:n,colorMap:{},preserveRouteEndpoints:!0}),this.MAX_ITERATIONS=this.merger.MAX_ITERATIONS+4,this.activeSubSolver=this.merger,this.phase="merge"}stepMerge(){let e=this.merger;if(!e)throw Error("Reported via merge has no active merger");if(e.step(),e.failed)throw Error(`Reported via merge failed: ${e.error}`);if(!e.solved)return;if(e.mergedViaHdRoutes.length!==this.movableRoutes.length)throw Error("Reported via merge changed the number of route pieces");let t=new Map(this.movableRoutes.map((n,o)=>[n,e.mergedViaHdRoutes[o]]));this.candidateRoutes=this.params.routes.map((n)=>t.get(n)??n),this.activeSubSolver=null,this.phase="physical-check"}validatePhysicalProposal(){let e=this.physicalSrj,t=this.candidateRoutes;if(!e||!t)throw Error("Reported via merge has no physical proposal");let n=this.params.routes,o=new Map(Zk({srj:e,routes:n}).map(({key:i,severity:r})=>[i,r]));if(!Zk({srj:e,routes:t}).every(({key:i,severity:r})=>o.has(i)&&r<=o.get(i)+0.00000001)||kLe({srj:e,previousRoutes:n,routes:t}).length>0)return this.phase="done",void(this.solved=!0);this.phase="reference-check"}validateReferenceProposal(){let e=this.result,t=this.candidateRoutes;if(!e||!t)throw Error("Reported via merge has no reference proposal");let n=this.params.drcEvaluator({traces:[],routes:t,hdRoutes:t});e.referenceValidationCount++,(Array.isArray(n)?n:n.errors).length<this.beforeErrorCount&&(this.result={...e,routes:t,referenceResult:n,accepted:!0}),this.phase="done",this.solved=!0}_step(){switch(this.phase){case"initialize":return this.initializeMerge();case"merge":return this.stepMerge();case"physical-check":return this.validatePhysicalProposal();case"reference-check":return this.validateReferenceProposal();case"done":throw Error("Reported via merge was stepped after completion")}}getResult(){if(!this.solved||this.failed||!this.result)throw Error("Reported via merge is not complete");return this.result}},sVo=[10,16],dBt=class extends Oi{params;budget;state={phase:"initialize"};result;reservedChildMaximum=0;constructor(e){super(),this.params=e,this.budget=e.budget??ZYo,this.result={routes:e.routes,attemptedRegionCount:0,acceptedRegionCount:0,candidateAttemptCount:0,pathSearchNodeCount:0,referenceValidationCount:0,initialDrcIssueCount:void 0,finalDrcIssueCount:void 0,publishedDrcIssueCount:void 0,repaired:!1},this.MAX_ITERATIONS=16*this.budget.maxRegions+32}updateProgress(){let e=rBt(this.budget,this.result.acceptedRegionCount),t=this.state.phase==="negotiate"?this.state.solver:void 0,n=typeof t?.stats.pathSearchCalls=="number"?t.stats.pathSearchCalls:0,o=typeof t?.stats.pathSearchNodes=="number"?t.stats.pathSearchNodes:0;this.stats={...this.result,routes:void 0,phase:this.state.phase,candidateAttemptCount:this.result.candidateAttemptCount+n,pathSearchNodeCount:this.result.pathSearchNodeCount+o,allowedRegionCount:e.maxRegions,allowedCandidateAttemptCount:e.maxCandidateAttempts,allowedPathSearchNodeCount:e.maxPathSearchNodes};let i=Math.max(this.result.attemptedRegionCount/Math.max(1,this.budget.maxRegions),this.stats.candidateAttemptCount/Math.max(1,this.budget.maxCandidateAttempts),this.stats.pathSearchNodeCount/Math.max(1,this.budget.maxPathSearchNodes));this.progress=this.solved?1:Math.max(this.progress,Math.min(0.99,i))}startChild(e){if(this.activeSubSolver)throw Error("Regional repair started a child before the previous stage completed");this.activeSubSolver=e,this.reservedChildMaximum=e.MAX_ITERATIONS,this.MAX_ITERATIONS+=this.reservedChildMaximum+1}finish(){if(this.activeSubSolver)throw Error("Regional repair finished with an active child solver");this.solved=!0,this.state={phase:"done"}}publish(e,t){this.result.routes=e.currentRoutes,this.result.publishedDrcIssueCount=e.currentErrors.length,this.result.finalDrcIssueCount=e.currentErrors.length,this.result.repaired=t,this.finish()}initialize(){let{originalSrj:e,routes:t,syntheticConnectionNames:n}=this.params;if(e.traces?.length||n.size>0)return void this.finish();let o=Math.max(e.defaultObstacleMargin??0.2,e.minTraceToPadEdgeClearance??0,e.minTraceToHoleEdgeClearance??0,e.minViaEdgeToPadEdgeClearance??0),i=Math.max(e.minTraceWidth,e.minViaDiameter??0);for(let a of t){i=Math.max(i,a.traceThickness,a.viaDiameter);for(let c of a.route)i=Math.max(i,c.traceThickness??0)}let r=Math.max(0.5,i+o),s=(this.budget.regionSizes??sVo).filter((a)=>!Number.isFinite(r)||2*r<a);s.length!==0?this.state={phase:"initial-reference",context:{boundaryMargin:r,regionSizes:s}}:this.finish()}initialReference(e){let t=this.params.drcEvaluator({traces:[],routes:this.params.routes,hdRoutes:this.params.routes});this.result.referenceValidationCount++;let n=Array.isArray(t)?t:t.errors,o={...e,currentRoutes:this.params.routes,reference:t,currentErrors:n,initialErrors:n};if(this.result.initialDrcIssueCount=n.length,this.result.finalDrcIssueCount=n.length,this.result.publishedDrcIssueCount=n.length,n.length===0)return void this.finish();let i=new fk({originalSrj:this.params.originalSrj,routes:o.currentRoutes,drcEvaluator:(r)=>(this.result.referenceValidationCount++,this.params.drcEvaluator(r))});this.state={phase:"initial-projection",context:o,solver:i},this.startChild(i)}initialProjectionReference(e){let t=this.params.drcEvaluator({traces:[],routes:e.currentRoutes,hdRoutes:e.currentRoutes});this.result.referenceValidationCount++,e.reference=t,e.currentErrors=Array.isArray(t)?t:t.errors,this.result.finalDrcIssueCount=e.currentErrors.length,e.currentErrors.length!==0?this.state={phase:"prepare-regions",context:e}:this.publish(e,!0)}prepareRegions(e){let t={...XE(this.params.originalSrj),traces:void 0},n=new Map;for(let r of this.params.originalSrj.obstacles)for(let s of[r.obstacleId,r.circuitJsonMetadata?.pcb_smtpad_id,r.circuitJsonMetadata?.pcb_plated_hole_id,r.connectedTo[0]])typeof s=="string"&&n.set(s,r.center);let o=bV(e.currentRoutes),i={...e,srj:t,obstacleCenterById:n,currentRoutes:o,attemptedRegions:[],fixedViolations:new Map(Zk({srj:t,routes:o}).map(({key:r,severity:s})=>[r,s]))};this.state={phase:"select-region",context:i}}selectRegion(e){let t=rBt(this.budget,this.result.acceptedRegionCount);if(this.result.attemptedRegionCount>=t.maxRegions||this.result.candidateAttemptCount>=t.maxCandidateAttempts||this.result.pathSearchNodeCount>=t.maxPathSearchNodes)return void(this.state={phase:"publish-partial",context:e});let n=(Array.isArray(e.reference)?e.reference:e.reference.errorsWithCenters??e.reference.errors).map((u)=>{let h=`overlap_${u.pcb_trace_id}_`,A=typeof u.pcb_pad_id=="string"?u.pcb_pad_id:typeof u.pcb_trace_error_id=="string"&&u.pcb_trace_error_id.startsWith(h)?u.pcb_trace_error_id.slice(h.length):void 0;return(A?e.obstacleCenterById.get(A):void 0)??u.center??u.pcb_center}).filter((u)=>u!==null&&typeof u=="object"&&("x"in u)&&("y"in u)&&typeof u.x=="number"&&typeof u.y=="number"&&Number.isFinite(u.x)&&Number.isFinite(u.y)),o;for(let u of e.regionSizes){let h=n.filter(({x:y,y:x})=>!e.attemptedRegions.some(({bounds:C,size:I})=>u===I&&y>=C.minX&&y<=C.maxX&&x>=C.minY&&x<=C.maxY)),A=h[0];if(!A)continue;let{x:m,x:p,y:g,y:_}=A,f=u-2*e.boundaryMargin;for(let y of h.slice(1)){let x=Math.min(m,y.x),C=Math.max(p,y.x),I=Math.min(g,y.y),b=Math.max(_,y.y);C-x>=f||b-I>=f||(m=x,p=C,g=I,_=b)}o={center:{x:(m+p)/2,y:(g+_)/2},size:u};break}if(!o)return void(this.state={phase:"publish-partial",context:e});let{center:i,size:r}=o,s=nDo({srj:e.srj,routes:e.currentRoutes,bounds:{minX:i.x-r/2,maxX:i.x+r/2,minY:i.y-r/2,maxY:i.y+r/2}});if(e.attemptedRegions.push({bounds:s.mutableBounds,size:r}),this.result.attemptedRegionCount++,s.routes.length===0)return;let a=new Set(e.currentErrors.flatMap(UHe)),c=s.routes.flatMap((u,h)=>[...a].some((A)=>A===u.connectionName||A.startsWith(`${u.connectionName}_`))?[h]:[]),l=Math.min(this.budget.maxCandidateAttemptsPerRegion??(this.budget.revisitChangedRegions?Math.ceil(t.maxCandidateAttempts/2):t.maxCandidateAttempts),t.maxCandidateAttempts-this.result.candidateAttemptCount),d=new sDo({srj:s.srj,routes:s.routes,bounds:s.mutableBounds,dirtyRouteIndices:c,isLocked:(u,h)=>s.lockedPointIndices[u][h],maxPathSearchCalls:l,maxPathSearchNodes:t.maxPathSearchNodes-this.result.pathSearchNodeCount,maxPathSearchNodesPerCall:this.budget.maxPathSearchNodesPerCall,pathHeuristicWeight:this.budget.pathHeuristicWeight,pathGridSizeScale:e.currentErrors.length>10?this.budget.pathGridSizeScale:void 0,allowLayerChanges:!0,traceClearance:j8.traceClearance,viaClearance:j8.viaClearance,viaHoleDiameter:this.params.viaHoleDiameter});this.state={phase:"negotiate",negotiation:{context:e,allowance:t,maxPathSearchCalls:l,region:s},solver:d},this.startChild(d)}completeNegotiation(e){let t=e.solver.getOutput(),{context:n,allowance:o,maxPathSearchCalls:i}=e.negotiation,{pathSearchCalls:r,pathSearchNodes:s}=t;if(this.budget.revisitChangedRegions&&t.unresolvedSpanCount>0&&r<i&&s<o.maxPathSearchNodes-this.result.pathSearchNodeCount&&n.regionSizes.sort((a,c)=>c-a),!Number.isSafeInteger(r)||r<0||r+this.result.candidateAttemptCount>this.budget.maxCandidateAttempts||!Number.isSafeInteger(s)||s<0||s+this.result.pathSearchNodeCount>this.budget.maxPathSearchNodes)throw Error("Pipeline9 bounded regional repair exceeded its work budget");this.result.candidateAttemptCount+=r,this.result.pathSearchNodeCount+=s,this.state={phase:"splice-region",negotiation:e.negotiation,repair:t}}spliceRegion(e){let{context:t,region:n}=e.negotiation,o=(({routes:r,region:s,repairedRoutes:a})=>{if(a.length!==s.routeMappings.length||s.lockedPointIndices.length!==a.length)throw Error("repair04 merge requires exactly one replacement for every extracted fragment");let c=new Map;for(let l=0;l<a.length;l+=1){let d=s.routeMappings[l],u=a[l];if(!r[d.sourceRouteIndex])throw Error("repair04 merge source route no longer exists");if(oDo(d.originalFragment,u,s.lockedPointIndices[l],s.mutableBounds,s.contextBounds,s.srj.layerCount),Qc(d.originalFragment)===Qc(u))continue;let h=c.get(d.sourceRouteIndex)??[];h.push({mapping:d,repaired:u}),c.set(d.sourceRouteIndex,h)}return r.map((l,d)=>{let u=c.get(d);if(!u)return l;u.sort((g,_)=>aAe(g.mapping.start)-aAe(_.mapping.start));let h=[],A=0;for(let{mapping:g,repaired:_}of u){let f=aAe(g.start),y=aAe(g.end);if(f<A-ii||y<f||y>l.route.length-1+ii)throw Error("repair04 merge received overlapping or stale fragment provenance");if(A9t(l,f,y)!==g.sourceGeometryKey)throw Error("repair04 merge rejected stale source geometry");FDe(h,kRe(l,A,f)),FDe(h,_.route),A=y}FDe(h,kRe(l,A,l.route.length-1));let m=new Set(u.flatMap(({mapping:g})=>g.originalFragment.vias.map((_)=>`${_.x},${_.y}`))),p=l.vias.filter((g)=>!m.has(`${g.x},${g.y}`)).map((g)=>structuredClone(g));for(let{repaired:g}of u)for(let _ of g.vias)p.some((f)=>Math.abs(f.x-_.x)<=ii&&Math.abs(f.y-_.y)<=ii)||p.push(structuredClone(_));return{...l,route:iDo(h,l,u.map(({mapping:g})=>g)),vias:p}})})({routes:t.currentRoutes,region:n,repairedRoutes:e.repair.routes});if(o.every((r,s)=>r===t.currentRoutes[s]))return void(this.state={phase:"select-region",context:t});let i=new fk({originalSrj:this.params.originalSrj,routes:o,previousRoutes:t.currentRoutes,subdivideSegments:!0,drcEvaluator:(r)=>(this.result.referenceValidationCount++,this.params.drcEvaluator(r))});this.state={phase:"candidate-projection",context:t,solver:i},this.startChild(i)}prepareViaMerge(e){if(!this.params.connMap)return void(this.state={...e,phase:"candidate-physical"});let t=new rVo({srj:e.context.srj,routes:e.candidateRoutes,connMap:this.params.connMap,drcEvaluator:this.params.drcEvaluator});this.state={...e,phase:"via-merge",solver:t},this.startChild(t)}validateCandidate(e){let{context:t,candidateRoutes:n}=e,o=Zk({srj:t.srj,routes:n});!o.every(({key:i,severity:r})=>t.fixedViolations.has(i)&&r<=t.fixedViolations.get(i)+0.00000001)||kLe({srj:t.srj,previousRoutes:t.currentRoutes,routes:n}).length>0?this.state={phase:"select-region",context:t}:this.state=e.candidateReference===void 0?{phase:"candidate-reference",context:t,candidateRoutes:n,candidateFixedViolations:o}:{phase:"accept-candidate",context:t,candidateRoutes:n,candidateFixedViolations:o,candidateReference:e.candidateReference}}referenceCandidate(e){let t=this.params.drcEvaluator({traces:[],routes:e.candidateRoutes,hdRoutes:e.candidateRoutes});this.result.referenceValidationCount++,this.state={...e,phase:"accept-candidate",candidateReference:t}}acceptCandidate(e){let{context:t,candidateReference:n}=e,o=Array.isArray(n)?n:n.errors;o.length>=t.currentErrors.length?this.state={phase:"select-region",context:t}:(t.currentRoutes=e.candidateRoutes,t.currentErrors=o,t.reference=n,t.fixedViolations=new Map(e.candidateFixedViolations.map(({key:i,severity:r})=>[i,r])),this.result.acceptedRegionCount++,this.budget.revisitChangedRegions&&(t.attemptedRegions.length=0),this.result.finalDrcIssueCount=o.length,o.length!==0?this.state={phase:"select-region",context:t}:this.publish(t,!0))}publishPartial(e){(({originalSrj:t,initialErrors:n,remainingErrors:o})=>{if(o.length>=n.length)return!1;let i=new Set(t.obstacles.flatMap((s)=>{let a=s.circuitJsonMetadata;return[a?.pcb_smtpad_id,a?.pcb_plated_hole_id].filter((c)=>typeof c=="string")})),r=[...n];for(let s of o){if(typeof s.pcb_trace_id!="string")return!1;let a=`overlap_${s.pcb_trace_id}_`,c=s.type==="pcb_trace_error"&&typeof s.pcb_trace_error_id=="string"&&s.pcb_trace_error_id.startsWith(a)?s.pcb_trace_error_id.slice(a.length):void 0,l=s.type==="pcb_pad_trace_clearance_error",d=l?s.pcb_pad_id:c;if(typeof d!="string"||!i.has(d))return!1;let u=r.findIndex((A)=>A.type===s.type&&A.pcb_trace_id===s.pcb_trace_id&&(l?A.pcb_pad_id===d:A.pcb_trace_error_id===s.pcb_trace_error_id));if(u===-1)return!1;let h=r.splice(u,1)[0];if(l&&(typeof s.actual_clearance!="number"||!Number.isFinite(s.actual_clearance)||typeof h.actual_clearance!="number"||!Number.isFinite(h.actual_clearance)||typeof s.minimum_clearance!="number"||!Number.isFinite(s.minimum_clearance)||s.minimum_clearance!==h.minimum_clearance||s.actual_clearance<h.actual_clearance))return!1}return!0})({originalSrj:this.params.originalSrj,initialErrors:e.initialErrors,remainingErrors:e.currentErrors})?this.publish(e,!1):this.state={phase:"prepare-independent-projection",context:e}}prepareIndependentProjection(e){let t=new fk({originalSrj:this.params.originalSrj,routes:this.params.routes,allowPartialRepair:!0,drcEvaluator:(n)=>(this.result.referenceValidationCount++,this.params.drcEvaluator(n))});this.state={phase:"independent-projection",context:e,solver:t},this.startChild(t)}prepareIndependentSubdivision(e){let t=new fk({originalSrj:this.params.originalSrj,routes:e.independentRoutes,allowPartialRepair:!0,subdivideSegments:!0,drcEvaluator:(n)=>(this.result.referenceValidationCount++,this.params.drcEvaluator(n))});this.state={phase:"independent-subdivision",context:e.context,solver:t},this.startChild(t)}prepareIndependentCoupled(e){let t=new fk({originalSrj:this.params.originalSrj,routes:e.independentRoutes,usePrecisionMargin:!0,drcEvaluator:(n)=>(this.result.referenceValidationCount++,this.params.drcEvaluator(n))});this.state={phase:"independent-coupled",context:e.context,solver:t},this.startChild(t)}referenceIndependent(e){let t=this.params.drcEvaluator({traces:[],routes:e.independentRoutes,hdRoutes:e.independentRoutes});this.result.referenceValidationCount++;let n=Array.isArray(t)?t:t.errors;this.result.routes=e.independentRoutes,this.result.publishedDrcIssueCount=n.length,this.result.finalDrcIssueCount=n.length,this.result.repaired=n.length===0,this.finish()}completeChild(){let e=this.state;switch(e.phase){case"initial-projection":{let t=e.solver.getOutput();t!==e.context.currentRoutes?(e.context.currentRoutes=t,this.state={phase:"initial-projection-reference",context:e.context}):this.state={phase:"prepare-regions",context:e.context};break}case"negotiate":this.completeNegotiation(e);break;case"candidate-projection":{let t=new fk({originalSrj:this.params.originalSrj,routes:e.solver.getOutput(),previousRoutes:e.context.currentRoutes,usePrecisionMargin:!0,drcEvaluator:(n)=>(this.result.referenceValidationCount++,this.params.drcEvaluator(n))});this.state={phase:"candidate-margin-projection",context:e.context,solver:t},this.startChild(t);break}case"candidate-margin-projection":this.state={phase:"prepare-via-merge",context:e.context,candidateRoutes:e.solver.getOutput()};break;case"via-merge":{let t=e.solver.getResult();this.result.referenceValidationCount+=t.referenceValidationCount,this.state={phase:"candidate-physical",context:e.context,candidateRoutes:t.routes,candidateReference:t.referenceResult};break}case"independent-projection":this.state={phase:"prepare-independent-subdivision",context:e.context,independentRoutes:e.solver.getOutput()};break;case"independent-subdivision":{let t=e.solver.getOutput();t===this.params.routes?this.finish():this.state={phase:"prepare-independent-coupled",context:e.context,independentRoutes:t};break}case"independent-coupled":this.state={phase:"independent-reference",context:e.context,independentRoutes:e.solver.getOutput()};break;default:throw Error(`Regional repair child completed during phase ${e.phase}`)}}_step(){let e=this.activeSubSolver;if(e)return e.step(),e.MAX_ITERATIONS>this.reservedChildMaximum&&(this.MAX_ITERATIONS+=e.MAX_ITERATIONS-this.reservedChildMaximum,this.reservedChildMaximum=e.MAX_ITERATIONS),e.failed?(this.failed=!0,this.error=e.error):e.solved&&(this.activeSubSolver=null,this.reservedChildMaximum=0,this.completeChild()),void this.updateProgress();let t=this.state;switch(t.phase){case"initialize":this.initialize();break;case"initial-reference":this.initialReference(t.context);break;case"initial-projection-reference":this.initialProjectionReference(t.context);break;case"prepare-regions":this.prepareRegions(t.context);break;case"select-region":this.selectRegion(t.context);break;case"splice-region":this.spliceRegion(t);break;case"prepare-via-merge":this.prepareViaMerge(t);break;case"candidate-physical":this.validateCandidate(t);break;case"candidate-reference":this.referenceCandidate(t);break;case"accept-candidate":this.acceptCandidate(t);break;case"publish-partial":this.publishPartial(t.context);break;case"prepare-independent-projection":this.prepareIndependentProjection(t.context);break;case"prepare-independent-subdivision":this.prepareIndependentSubdivision(t);break;case"prepare-independent-coupled":this.prepareIndependentCoupled(t);break;case"independent-reference":this.referenceIndependent(t);break;default:throw Error(`Regional repair has no active child during phase ${t.phase}`)}this.updateProgress()}getResult(){if(!this.solved||this.failed)throw Error("Pipeline9 bounded regional repair result requested before completion");return this.result}},aVo=[0.9,0.72],cVo=Array.from({length:16},(e,t)=>t*Math.PI/8),lVo=(e)=>e.type==="pcb_pad_trace_clearance_error"||e.type==="pcb_trace_error"&&!(Array.isArray(e.pcb_trace_ids)&&e.pcb_trace_ids.length>=2),dVo=(e)=>{if(typeof e.pcb_pad_id=="string")return e.pcb_pad_id;if(typeof e.pcb_trace_error_id=="string"){let n=e.pcb_trace_error_id.match(/(pcb_(?:smtpad|plated_hole|hole|keepout)_\d+)$/)?.[1];if(n)return n}return(typeof e.message=="string"?e.message:"").match(/(?:pcb_smtpad|pcb_plated_hole|pcb_hole|pcb_keepout)\[#?([^\]"]+)\]/)?.[1]},uVo=(e,t)=>{if(!t)return;let n=t.startsWith("pcb_")?t:`pcb_${t}`;return e.obstacles.find((o)=>o.obstacleId===n||o.connectedTo[0]===n)},hVo=({srj:e,pcbPortId:t,z:n,portPositionMap:o})=>{let i=nd(n,e.layerCount),r=o.get(t),s=e.obstacles.filter((a)=>a.layers.includes(i)&&a.connectedTo.includes(t));return r?s.reduce((a,c)=>a?Math.hypot(c.center.x-r.x,c.center.y-r.y)<Math.hypot(a.center.x-r.x,a.center.y-r.y)?c:a:c,void 0):s[0]},mVo=({terminalObstacle:e,conflictingObstacle:t,traceRadius:n})=>{let o=Math.max(0,e.width/2-n),i=Math.max(0,e.height/2-n),r=(e.ccwRotationDegrees??0)*Math.PI/180;return aVo.flatMap((s)=>cVo.map((a)=>{let c={x:Math.cos(a)*o*s,y:Math.sin(a)*i*s},l=(u=r,{x:(d=c).x*Math.cos(u)-d.y*Math.sin(u),y:d.x*Math.sin(u)+d.y*Math.cos(u)});var d,u;return{x:e.center.x+l.x,y:e.center.y+l.y}})).sort((s,a)=>Math.hypot(a.x-t.center.x,a.y-t.center.y)-Math.hypot(s.x-t.center.x,s.y-t.center.y)).slice(0,16)},pVo=({routes:e,routeIndex:t,endpointIndex:n,point:o,bounds:i,collapseAdjacent:r})=>{let s=((A)=>A.map((m)=>({...m,route:m.route.map((p)=>({...p})),vias:m.vias.map((p)=>({...p}))})))(e),a=s[t];if(!a||a.route.length<2)return;let c=n===0?0:a.route.length-1,l=n===0?1:c-1,d=a.route[c],u=a.route[l];if(!d||!u||d.z!==u.z)return;let h=a.traceThickness/2;if(!(o.x-h<i.minX||o.x+h>i.maxX||o.y-h<i.minY||o.y+h>i.maxY)){if(a.route[c]={...d,...o},r){let A=n===0?l+1:l-1,m=a.route[A],p=a.vias.some((g)=>g.x===u.x&&g.y===u.y);if(!m||m.z!==d.z||u.pcb_port_id!==void 0||p)return;a.route[l]={...u,...o}}return s}},AVo=({srj:e,originalSrj:t,routes:n,newConnections:o,syntheticConnectionNames:i,drcEvaluator:r,effort:s=1})=>{let a=n,c=bk(r,a),l=0,d=0,u=c.length<20||n.length<=120?256:Math.max(32,Math.min(256,Math.floor(16384*Math.max(1,s)/n.length))),h=((A)=>{let m=new Map;for(let p of A.connections)for(let g of p.pointsToConnect)g.pcb_port_id&&m.set(g.pcb_port_id,g);return m})(t);for(let A=0;A<2;A++){let m=!1,p=kte({routes:a,newConnections:o,syntheticConnectionNames:i});for(let g of c.filter(lVo)){if(l>=u)break;if(typeof g.pcb_trace_id!="string")continue;let _=p.get(g.pcb_trace_id),f=uVo(e,dVo(g));if(_===void 0||!f)continue;let y=a[_],x=a,C=c;e:for(let I of[0,-1]){let b=I===0?y.route[0]:y.route.at(-1);if(!b||typeof b.pcb_port_id!="string")continue;let P=hVo({srj:t,pcbPortId:b.pcb_port_id,z:b.z,portPositionMap:h});if(!P||P===f)continue;let E=Math.hypot(f.width,f.height)/2+Math.hypot(P.width,P.height)/2+0.5;if(!(Math.hypot(b.x-f.center.x,b.y-f.center.y)>E))for(let B of mVo({terminalObstacle:P,conflictingObstacle:f,traceRadius:y.traceThickness/2}))for(let w of[!1,!0]){if(l>=u)break e;let T=pVo({routes:a,routeIndex:_,endpointIndex:I,point:B,bounds:e.bounds,collapseAdjacent:w});if(!T)continue;l++;let Q=bk(r,T);Eee(Q,C)&&(x=T,C=Q)}}x!==a&&(a=x,c=C,d++,m=!0)}if(!m||c.length===0)break}return{routes:a,attemptedCandidateCount:l,acceptedCandidateCount:d,remainingErrors:c}},_Vo=["pcb_trace_error_id","pcb_error_id","pcb_via_trace_clearance_error_id","pcb_pad_trace_clearance_error_id"],gRe=(e,t)=>{let n=e,o=[...t].sort(([i],[r])=>r.length-i.length);for(let[i,r]of o)n=n.replaceAll(i,r);return n},uBt=(e,t)=>{let n=String(e.type??e.error_type??"unknown");if(n==="pcb_via_clearance_error")return((i,r)=>{let s=[...typeof i.pcb_trace_id=="string"?[i.pcb_trace_id]:[],...Array.isArray(i.pcb_trace_ids)?i.pcb_trace_ids.filter((d)=>typeof d=="string"):[]].map((d)=>gRe(d,r)).filter((d,u,h)=>h.indexOf(d)===u).sort(),a=i.center&&typeof i.center=="object"?i.center:i.pcb_center&&typeof i.pcb_center=="object"?i.pcb_center:void 0,c=typeof a?.x=="number"&&typeof a.y=="number"?{x:a.x,y:a.y}:void 0,l=typeof i.pcb_via_pair_net_relation=="string"?i.pcb_via_pair_net_relation:void 0;if(s.length!==0&&c&&l)return`pcb_via_clearance_error:${JSON.stringify({traceIds:s,center:c,netRelation:l})}`})(e,t);for(let i of _Vo){let r=e[i];if(typeof r=="string")return`${n}:${gRe(r,t)}`}let o=Object.fromEntries(Object.entries(e).filter(([i,r])=>(i.endsWith("_id")||i.endsWith("_ids"))&&(typeof r=="string"||Array.isArray(r))).sort(([i],[r])=>i.localeCompare(r)).map(([i,r])=>[i,typeof r=="string"?gRe(r,t):r]));return`${n}:${JSON.stringify(o)}`},XY=({errors:e,baselineErrors:t,originalTraceIdByPreparedTraceId:n=new Map})=>{let o=new Set(t.filter((i)=>!((r)=>typeof r.pcb_trace_error_id=="string"&&r.pcb_trace_error_id.startsWith("missing_connection_"))(i)).map((i)=>uBt(i,new Map)));return o.delete(void 0),e.filter((i)=>{let r=uBt(i,n);return r===void 0||!o.has(r)})},g_e=1.5,gVo=({errorsWithCenters:e,traces:t,layerCount:n,defaultViaDiameter:o,connMap:i})=>{let r=((a)=>a.flatMap((c)=>{if(c.type!=="pcb_trace_error"||!Array.isArray(c.pcb_port_ids)||c.pcb_port_ids.length<4)return[];let l=c.center;return l&&typeof l=="object"&&"x"in l&&"y"in l&&typeof l.x=="number"&&typeof l.y=="number"?[{x:l.x,y:l.y}]:[]}))(e),s=new Set;for(let a=0;a<t.length;a++){let c=t[a],l=E6(c,a,n,o,i);r.some((d)=>l.some((u)=>{let h=u.route.map((m)=>m.x),A=u.route.map((m)=>m.y);return Math.min(...h)<=d.x+g_e&&Math.max(...h)>=d.x-g_e&&Math.min(...A)<=d.y+g_e&&Math.max(...A)>=d.y-g_e}))&&s.add(c.pcb_trace_id)}return s},fVo=({routes:e,otherHdRoutes:t,obstacles:n,colorMap:o,layerCount:i,connMap:r})=>{let s=Hge([...e,...t],r),a=new fHe({inputHdRoutes:e,otherHdRoutes:t,netByConnectionName:s,obstacles:n,colorMap:o,layerCount:i,connMap:r});if(a.solve(),a.failed)throw Error(`Pipeline9 could not merge movable preloaded vias: ${a.error??"unknown error"}`);return a.getMergedViaHdRoutes()??e},hBt=({errors:e,circuitJson:t,newTraceIds:n})=>{let o=new Map(t.flatMap((i)=>i.type==="pcb_via"&&typeof i.pcb_via_id=="string"&&typeof i.pcb_trace_id=="string"?[[i.pcb_via_id,i.pcb_trace_id]]:[]));return e.map((i)=>{let r=typeof i.pcb_trace_id=="string"?i.pcb_trace_id:void 0,s=Array.isArray(i.pcb_trace_ids)?i.pcb_trace_ids.filter((u)=>typeof u=="string"):[],a=[...typeof i.pcb_via_id=="string"?[i.pcb_via_id]:[],...Array.isArray(i.pcb_via_ids)?i.pcb_via_ids.filter((u)=>typeof u=="string"):[]].filter((u,h,A)=>A.indexOf(u)===h);if(r&&typeof i.pcb_trace_error_id=="string"){let u=`overlap_${r}_`,h=i.pcb_trace_error_id.startsWith(u)?i.pcb_trace_error_id.slice(u.length):void 0,A=h!==void 0&&(a.includes(h)||o.has(h)&&!s.includes(h)),m=s.find((p)=>p!==r&&n.has(p))??(h&&!A?h:void 0);if(!n.has(r)&&a.length===0&&m&&n.has(m)){let p=[m,r,...s].filter((g,_,f)=>f.indexOf(g)===_);return{...i,pcb_trace_id:m,pcb_trace_ids:p,pcb_trace_error_id:`overlap_${m}_${r}`}}}let c=a.flatMap((u)=>{let h=o.get(u);return h?[h]:[]}).filter((u,h,A)=>A.indexOf(u)===h),l=c.length>0?c:s.filter((u)=>u!==r),d=l.find((u)=>n.has(u));if(d&&(!r||!n.has(r))){let u=[d,...r?[r]:[],...s,...l].filter((h,A,m)=>m.indexOf(h)===A);return{...i,pcb_trace_id:d,pcb_trace_ids:u,pcb_via_id:a[0],pcb_via_ids:a}}if(a.length>0){let u=[...r?[r]:[],...s,...l].filter((h,A,m)=>m.indexOf(h)===A);return{...i,pcb_trace_ids:u,pcb_via_id:a[0],pcb_via_ids:a}}return i})},Yge=0.000000001,mBt=(e)=>{let t=new Set,n=[];for(let o of e)for(let i of o.route){if(i.route_type!=="via")continue;let r=`${i.x},${i.y},${i.from_layer},${i.to_layer}`;t.has(r)||(t.add(r),n.push({type:"pcb_via",pcb_via_id:`via_${n.length}`,pcb_trace_id:o.pcb_trace_id}))}return n},hE=({errors:e,circuitJson:t,evaluatedTraceIds:n})=>{let o=new Map(t.flatMap((i)=>i.type==="pcb_via"&&typeof i.pcb_via_id=="string"&&typeof i.pcb_trace_id=="string"?[[i.pcb_via_id,i.pcb_trace_id]]:[]));return e.map((i)=>{let r=[...typeof i.pcb_via_id=="string"?[i.pcb_via_id]:[],...Array.isArray(i.pcb_via_ids)?i.pcb_via_ids.filter((A)=>typeof A=="string"):[]],s=typeof i.pcb_trace_id=="string"?i.pcb_trace_id:void 0,a=s?`overlap_${s}_`:void 0,c=a&&typeof i.pcb_trace_error_id=="string"&&i.pcb_trace_error_id.startsWith(a)?i.pcb_trace_error_id.slice(a.length):void 0,l=typeof i.pcb_trace_error_id=="string"?i.pcb_trace_error_id.match(/_(via_\d+)$/)?.[1]:void 0,d=r.length!==0||!l||!o.has(l)||c&&n.has(c)?void 0:l,u=[...r,...d?[d]:[]].filter((A,m,p)=>p.indexOf(A)===m),h=[...typeof i.pcb_trace_id=="string"?[i.pcb_trace_id]:[],...Array.isArray(i.pcb_trace_ids)?i.pcb_trace_ids.filter((A)=>typeof A=="string"):[],...u.flatMap((A)=>{let m=o.get(A);return m?[m]:[]})].filter((A,m,p)=>p.indexOf(A)===m);return{...i,...u.length>0?{pcb_via_id:u[0],pcb_via_ids:u}:{},...u.length>0&&h.length>0?{pcb_trace_ids:h}:{}}})},pBt=(e,t)=>Math.abs(e.x-t.x)<=Yge&&Math.abs(e.y-t.y)<=Yge&&e.z===t.z,yVo=({trace:e,sectionGroup:t,syntheticConnectionName:n,connMap:o})=>{let i=t.routes;if(i.length===0)throw Error(`Pipeline9 cannot exactly repair empty preloaded section for trace "${e.pcb_trace_id}"`);let r=[];for(let d of i){if(r.length===0){r.push(...d.route);continue}let u=r.at(-1);if(d.route[0]&&pBt(u,d.route[0]))r.push(...d.route.slice(1));else{if(!d.route.at(-1)||!pBt(u,d.route.at(-1)))throw Error(`Pipeline9 cannot reconnect preloaded trace "${e.pcb_trace_id}" for exact repair`);r.push(...d.route.slice(0,-1).reverse())}}let s=t.routePositionStart===0,a=t.routePositionEnd===e.route.length-1,c=s?e.connectsTo?.[0]:null,l=a?e.connectsTo?.at(-1):null;return c&&r[0]&&(r[0]={...r[0],pcb_port_id:c}),l&&r.at(-1)&&(r[r.length-1]={...r.at(-1),pcb_port_id:l}),{connectionName:n,rootConnectionName:o.getNetConnectedToId(e.connection_name)??e.connection_name,traceThickness:Math.max(...i.map((d)=>d.traceThickness)),viaDiameter:Math.max(...i.map((d)=>d.viaDiameter)),route:r,vias:r.slice(0,-1).flatMap((d,u)=>{let h=r[u+1];return d.z!==h.z&&(A=d,m=h,Math.abs(A.x-m.x)<=Yge&&Math.abs(A.y-m.y)<=Yge)?[{x:h.x,y:h.y}]:[];var A,m})}},xVo=({trace:e,traceIndex:t,layerCount:n,defaultViaDiameter:o,connMap:i})=>{let r=e.route.flatMap((c,l)=>c.route_type==="through_obstacle"?[l]:[]),s=new Map,a=E6(e,t,n,o,i);for(let c of a){let{preloadedRoutePositionStart:l,preloadedRoutePositionEnd:d}=c;if(l===void 0||d===void 0)throw Error(`Pipeline9 preloaded trace section is missing route positions for "${e.pcb_trace_id}"`);if(e.route[l]?.route_type==="through_obstacle")continue;let u=r.filter((A)=>A<l).length,h=s.get(u)??{routePositionStart:l,routePositionEnd:d,routes:[]};h.routePositionStart=Math.min(h.routePositionStart,l),h.routePositionEnd=Math.max(h.routePositionEnd,d),h.routes.push(c),s.set(u,h)}return[...s.values()]},ABt=(e,t)=>e.map((n)=>{let o=Array.isArray(n.pcb_trace_ids)?n.pcb_trace_ids.filter((p)=>typeof p=="string"):[],i=typeof n.pcb_trace_id=="string"?n.pcb_trace_id:void 0,r=i?`overlap_${i}_`:void 0,s=r&&typeof n.pcb_trace_error_id=="string"&&n.pcb_trace_error_id.startsWith(r)?n.pcb_trace_error_id.slice(r.length):void 0,a=[...typeof n.pcb_via_id=="string"?[n.pcb_via_id]:[],...Array.isArray(n.pcb_via_ids)?n.pcb_via_ids.filter((p)=>typeof p=="string"):[]],c=s!==void 0&&a.includes(s),l=[i,...o,c?void 0:s].filter((p)=>typeof p=="string"),d=new Map;for(let p of l){let g=t.get(p)??p,_=d.get(g)??new Set;_.add(p),d.set(g,_)}let u=[...d].flatMap(([p,g])=>g.size>1?[{solverTraceId:p,evaluationTraceIds:[...g]}]:[]),h=i?t.get(i)??i:void 0,A=o.map((p)=>t.get(p)??p),m=s?c?s:t.get(s)??s:void 0;return h!==i||A.some((p,g)=>p!==o[g])||m!==s?{...n,...i?{pcb_trace_id:h}:{},...Array.isArray(n.pcb_trace_ids)?{pcb_trace_ids:A}:{},...h&&m?{pcb_trace_error_id:`overlap_${h}_${m}`}:{},...u.length>0?{__collapsed_trace_participants:u}:{}}:n}),CVo=(e,t)=>{let n=e.hdRoute.route[0],o=e.hdRoute.route.at(-1);return{name:e.syntheticConnectionName,rootConnectionName:e.hdRoute.rootConnectionName,__netConnectionName:e.originalTrace.connection_name,nominalTraceWidth:e.hdRoute.traceThickness,pointsToConnect:[{x:n.x,y:n.y,layer:nd(n.z,t),pointId:`${e.syntheticConnectionName}:start`},{x:o.x,y:o.y,layer:nd(o.z,t),pointId:`${e.syntheticConnectionName}:end`}]}},IVo=({originalTrace:e,repairedSections:t})=>{let n=[],o=0;for(let i of[...t].sort((r,s)=>r.routePositionStart-s.routePositionStart)){if(i.routePositionStart<o)throw Error(`Pipeline9 found overlapping repaired sections for preloaded trace "${e.pcb_trace_id}"`);n.push(...e.route.slice(o,i.routePositionStart),...i.route),o=i.routePositionEnd+1}return n.push(...e.route.slice(o)),{...e,__replaces_pcb_trace_id:e.pcb_trace_id,route:n}},bVo=class extends Oi{params;inputNewHdRoutes;inputUpdatedPreloadedTraces;movablePreloadedSections;fixedPreloadedObstacleRoutes;syntheticConnectionNames;exactRepairSolver;exactRepairParams;clearanceProjectionSolver;drcEvaluator;cachedReferenceDrcEvaluator;clearancePrecisionDrcEvaluator;clearancePrecisionIndexedDrcEvaluator;clearanceMarginDrcEvaluator;referenceDrcValidationCount=0;referenceDrcFalseNegativeCount=0;indexedDrcEvaluationCount=0;indexedDrcCacheHitCount=0;indexedDrcEvaluationTimeMs=0;indexedDrcCandidateCache=new Map;combinedOutput;currentPipelineStepIndex=0;regionalB01Params;boundedRegionalParams;boundedRegionalRepairStartedAt;initialBoundedRegionalRepairSolver;initialBoundedRegionalRepairStartedAt;pipelineDef=[{solverName:"clearanceProjectionSolver",createSolver:()=>{if(!this.exactRepairParams)throw Error("Pipeline9 clearance projection is missing its input");return this.clearanceProjectionSolver=new fk({originalSrj:this.params.originalSrj,routes:this.exactRepairParams.hdRoutes,drcEvaluator:this.cachedReferenceDrcEvaluator}),this.clearanceProjectionSolver},onSolved:()=>{}},{solverName:"initialBoundedRegionalRepairSolver",createSolver:()=>{if(!this.exactRepairParams||!this.cachedReferenceDrcEvaluator)throw Error("Pipeline9 initial regional repair is missing its input");return this.initialBoundedRegionalRepairStartedAt=performance.now(),this.initialBoundedRegionalRepairSolver=new dBt({connMap:this.params.connMap,originalSrj:{...this.params.originalSrj,connections:[...this.params.originalSrj.connections,...this.params.newConnections]},routes:this.clearanceProjectionSolver?.getOutput()??this.exactRepairParams.hdRoutes,viaHoleDiameter:this.params.defaultViaHoleDiameter,syntheticConnectionNames:this.syntheticConnectionNames,drcEvaluator:this.cachedReferenceDrcEvaluator,budget:iBt(this.exactRepairParams.hdRoutes.length,this.stats.initialJointDrcIssueCount,this.params.effort)}),this.initialBoundedRegionalRepairSolver},onSolved:()=>this.finishInitialBoundedRegionalRepair()},{solverName:"exactRepairSolver",createSolver:()=>{if(!this.exactRepairParams)throw Error("Pipeline9 exact repair stage is missing its input");return this.exactRepairSolver=new eOt({...this.exactRepairParams,hdRoutes:this.clearanceProjectionSolver?.getOutput()??this.exactRepairParams.hdRoutes}),this.exactRepairSolver},onSolved:()=>this.finishExactRepair()},{solverName:"regionalB01RepairSolver",createSolver:()=>{if(!this.regionalB01Params)throw Error("Pipeline9 regional B01 stage is missing its input");return this.regionalB01RepairSolver=new iVo(this.regionalB01Params),this.regionalB01RepairSolver},onSolved:()=>this.finishRegionalB01Repair()},{solverName:"boundedRegionalRepairSolver",createSolver:()=>{if(!this.boundedRegionalParams)throw Error("Pipeline9 bounded regional stage is missing its input");return this.boundedRegionalRepairStartedAt=performance.now(),this.boundedRegionalRepairSolver=new dBt(this.boundedRegionalParams),this.boundedRegionalRepairSolver},onSolved:()=>this.finishBoundedRegionalRepair()}];boundedRegionalRepairSolver;regionalB01RepairSolver;cacheIndexedDrcResult(e,t){if(this.indexedDrcCandidateCache.size>=64){let n=this.indexedDrcCandidateCache.keys().next().value;n!==void 0&&this.indexedDrcCandidateCache.delete(n)}this.indexedDrcCandidateCache.set(e,t)}constructor(e){super(),this.params=e,this.inputNewHdRoutes=e.newHdRoutes,this.inputUpdatedPreloadedTraces=e.updatedPreloadedTraces;let t=e.updatedPreloadedTraces.filter((se)=>e.mutatedPreloadedTraceIds.has(se.pcb_trace_id)),n=zHe({connections:e.newConnections,originalConnections:e.originalSrj.connections,layerCount:e.layerCount,obstacles:e.obstacles,defaultViaHoleDiameter:e.defaultViaHoleDiameter,connMap:e.connMap}),o=n(e.newHdRoutes),i=new Set(o.map((se)=>se.pcb_trace_id)),r=(({originalPreloadedTraces:se,mutatedPreloadedTraces:le,newTraces:he})=>{let ue=new Set(he.map((Ee)=>Ee.pcb_trace_id)),Ae=new Map(le.map((Ee)=>[Ee.pcb_trace_id,Ee])),_e=new Set([...se.map((Ee)=>Ee.pcb_trace_id),...ue]),Pe=new Map;return{routedTraces:[...se.filter((Ee)=>ue.has(Ee.pcb_trace_id)).map((Ee)=>{let Te=Ae.get(Ee.pcb_trace_id)??Ee,be=`${Ee.pcb_trace_id}_preloaded`,me=be,ye=2;for(;_e.has(me);)me=`${be}_${ye}`,ye+=1;return _e.add(me),Pe.set(me,Ee.pcb_trace_id),{...Te,pcb_trace_id:me,__replaces_pcb_trace_id:Ee.pcb_trace_id}}),...le.filter((Ee)=>!ue.has(Ee.pcb_trace_id)),...he],originalPreloadedTraceIdByPreparedTraceId:Pe}})({originalPreloadedTraces:e.originalSrj.traces??[],mutatedPreloadedTraces:t,newTraces:o}),s=e.originalSrj.minTraceToPadEdgeClearance??j8.traceClearance??0.1,a=j8.viaClearance??0.1,c=e.originalSrj.minViaHoleEdgeToViaHoleEdgeClearance??j8.viaClearance??0.1,l=T_e({includeBoardClearance:!0,inputSrj:e.originalSrj,srjWithPointPairs:e.srjWithPointPairs,routedTraces:[],drcOptions:{traceClearance:s,viaClearance:c}}),d=new Set((e.originalSrj.traces??[]).map((se)=>se.pcb_trace_id)),u=hE({errors:l.errors,circuitJson:l.circuitJson,evaluatedTraceIds:d}),h=hE({errors:l.errorsWithCenters,circuitJson:l.circuitJson,evaluatedTraceIds:d}),A=T_e({includeBoardClearance:!0,inputSrj:e.originalSrj,srjWithPointPairs:e.srjWithPointPairs,routedTraces:r.routedTraces,drcOptions:{traceClearance:s,viaClearance:c}}),m=new Set(Mke(e.originalSrj.traces??[],r.routedTraces).map((se)=>se.pcb_trace_id)),p=hE({errors:A.errors,circuitJson:A.circuitJson,evaluatedTraceIds:m}),g=hE({errors:A.errorsWithCenters,circuitJson:A.circuitJson,evaluatedTraceIds:m}),_={...A,errors:XY({errors:p,baselineErrors:u,originalTraceIdByPreparedTraceId:r.originalPreloadedTraceIdByPreparedTraceId}),errorsWithCenters:XY({errors:g,baselineErrors:h,originalTraceIdByPreparedTraceId:r.originalPreloadedTraceIdByPreparedTraceId})},f=(({errors:se,circuitJson:le})=>{let he=new Map(le.flatMap((Ae)=>Ae.type==="pcb_via"&&typeof Ae.pcb_via_id=="string"&&typeof Ae.pcb_trace_id=="string"?[[Ae.pcb_via_id,Ae.pcb_trace_id]]:[])),ue=new Set;for(let Ae of se){let _e=typeof Ae.pcb_trace_id=="string"?Ae.pcb_trace_id:void 0,Pe=[...typeof Ae.pcb_via_id=="string"?[Ae.pcb_via_id]:[],...Array.isArray(Ae.pcb_via_ids)?Ae.pcb_via_ids.filter((Te)=>typeof Te=="string"):[]];if(typeof Ae.pcb_trace_id=="string"&&ue.add(Ae.pcb_trace_id),Array.isArray(Ae.pcb_trace_ids))for(let Te of Ae.pcb_trace_ids)typeof Te=="string"&&ue.add(Te);if(typeof Ae.pcb_via_id=="string"){let Te=he.get(Ae.pcb_via_id);Te&&ue.add(Te)}if(Array.isArray(Ae.pcb_via_ids))for(let Te of Ae.pcb_via_ids){if(typeof Te!="string")continue;let be=he.get(Te);be&&ue.add(be)}let Ee=_e?`overlap_${_e}_`:void 0;if(Ee&&typeof Ae.pcb_trace_error_id=="string"&&Ae.pcb_trace_error_id.startsWith(Ee)){let Te=Ae.pcb_trace_error_id.slice(Ee.length);Pe.includes(Te)||ue.add(Te)}}return ue})({errors:_.errors,circuitJson:_.circuitJson}),y=new Map(e.updatedPreloadedTraces.map((se)=>[se.pcb_trace_id,se])),x=new Set;for(let se of f){let le=r.originalPreloadedTraceIdByPreparedTraceId.get(se);le&&y.has(le)?x.add(le):!i.has(se)&&y.has(se)&&x.add(se)}for(let se of gVo({errorsWithCenters:_.errorsWithCenters,traces:e.updatedPreloadedTraces,layerCount:e.layerCount,defaultViaDiameter:e.defaultViaDiameter,connMap:e.connMap}))x.add(se);this.movablePreloadedSections=[];for(let se of x){let le=y.get(se);if(!le)throw Error(`Pipeline9 cannot find preloaded trace "${se}" selected for exact repair`);let he=e.updatedPreloadedTraces.findIndex((Ae)=>Ae.pcb_trace_id===se),ue=xVo({trace:le,traceIndex:he,layerCount:e.layerCount,defaultViaDiameter:e.defaultViaDiameter,connMap:e.connMap});for(let[Ae,_e]of ue.entries()){let Pe=`pipeline9_preloaded_drc_${this.movablePreloadedSections.length}`;this.movablePreloadedSections.push({originalTrace:le,originalRoutePositionStart:_e.routePositionStart,originalRoutePositionEnd:_e.routePositionEnd,syntheticConnectionName:Pe,evaluationTraceId:`${le.pcb_trace_id}__pipeline9_section_${Ae}`,hdRoute:yVo({trace:le,sectionGroup:_e,syntheticConnectionName:Pe,connMap:e.connMap})})}}this.syntheticConnectionNames=new Set(this.movablePreloadedSections.map((se)=>se.syntheticConnectionName));let C=new Set(this.movablePreloadedSections.map((se)=>se.originalTrace.pcb_trace_id));this.fixedPreloadedObstacleRoutes=e.updatedPreloadedTraces.flatMap((se,le)=>{let he=E6(se,le,e.layerCount,e.defaultViaDiameter,e.connMap);return C.has(se.pcb_trace_id)?he.filter((ue)=>{let Ae=ue.preloadedRoutePositionStart;return Ae!==void 0&&se.route[Ae]?.route_type==="through_obstacle"}):he});let I=new Map;for(let[se,le]of this.movablePreloadedSections.entries()){let he=le.originalTrace.pcb_trace_id,ue=I.get(he)??[];ue.push(se),I.set(he,ue)}for(let se of(({errors:le,circuitJson:he,originalTraceIdByPreparedTraceId:ue})=>{let Ae=new Map(he.flatMap((_e)=>_e.type==="pcb_via"&&typeof _e.pcb_via_id=="string"&&typeof _e.pcb_trace_id=="string"?[[_e.pcb_via_id,_e.pcb_trace_id]]:[]));return le.flatMap((_e)=>{if(_e.type!=="pcb_via_clearance_error"||!Array.isArray(_e.pcb_via_ids)||typeof _e.actual_clearance!="number"||_e.actual_clearance>=0)return[];let Pe=_e.pcb_via_ids.flatMap((Ee)=>{if(typeof Ee!="string")return[];let Te=Ae.get(Ee);return Te?[ue.get(Te)??Te]:[]}).filter((Ee,Te,be)=>be.indexOf(Ee)===Te);return Pe.length>0?[Pe]:[]})})({errors:_.errors,circuitJson:_.circuitJson,originalTraceIdByPreparedTraceId:r.originalPreloadedTraceIdByPreparedTraceId})){let le=se.flatMap((Ae)=>I.get(Ae)??[]).filter((Ae,_e,Pe)=>Pe.indexOf(Ae)===_e);if(le.length===0)continue;let he=new Set(le),ue=fVo({routes:le.map((Ae)=>this.movablePreloadedSections[Ae].hdRoute),otherHdRoutes:[...e.newHdRoutes,...this.fixedPreloadedObstacleRoutes,...this.movablePreloadedSections.flatMap((Ae,_e)=>he.has(_e)?[]:[Ae.hdRoute])],obstacles:e.obstacles,colorMap:e.colorMap,layerCount:e.layerCount,connMap:e.connMap});for(let Ae=0;Ae<le.length;Ae++)this.movablePreloadedSections[le[Ae]].hdRoute=ue[Ae]}let b=e.newHdRoutes.length+this.movablePreloadedSections.length,P=_.errors.length>=20&&b>120?Math.min(1,120*Math.max(1,e.effort)/b):1,E=_.errors.length>=200?P**2:P,B=Math.max(_.errors.length>=200?2:8,Math.floor(32*E)),w=Math.max(_.errors.length>=200?1:4,Math.floor(12*E));if(this.stats={initialJointDrcIssueCount:_.errors.length,baselineJointDrcIssueCount:l.errors.length,initialJointDrcIssueCountByType:_.errors.reduce((se,le)=>{let he=String(le.type??le.error_type??"unknown");return se[he]=(se[he]??0)+1,se},{}),movablePreloadedTraceCount:C.size,movablePreloadedSectionCount:this.movablePreloadedSections.length,exactRepairConfiguredMaxIterations:B,exactRepairConfiguredViaInPadMaxIterations:B,exactRepairConfiguredBroadMaxIterations:w},_.errors.length===0)return void(this.solved=!0);let T=new Set(this.movablePreloadedSections.map((se)=>se.originalTrace.pcb_trace_id)),Q=t.filter((se)=>!T.has(se.pcb_trace_id)),N=new Map(this.movablePreloadedSections.map((se)=>[se.syntheticConnectionName,CVo(se,e.layerCount)])),{traces:F,...H}=e.srjWithPointPairs,z={...H,connections:[...e.srjWithPointPairs.connections,...N.values()]},Y=new Wte({...z,obstacles:e.originalSrj.obstacles,minTraceWidth:e.originalSrj.minTraceWidth,minViaDiameter:e.originalSrj.minViaDiameter??e.defaultViaDiameter},{connMap:e.connMap,traceClearance:s,viaClearance:a,includeTraceViaOwnerMetadata:!0,spatialCellSize:Math.max(e.defaultViaDiameter,e.originalSrj.minTraceWidth)+Math.max(s,a)}),U=Y.evaluate(e.originalSrj.traces??[]),X=mBt(e.originalSrj.traces??[]),V={...U,errors:hE({errors:U.errors,circuitJson:X,evaluatedTraceIds:d}),errorsWithCenters:hE({errors:U.errorsWithCenters,circuitJson:X,evaluatedTraceIds:d})},W,j=(se)=>{let le=se.filter((me)=>!this.syntheticConnectionNames.has(me.connectionName)),he=n(le),ue=wke(he,e.originalSrj.traces??[]),Ae=new Set,_e=new Map,Pe=this.movablePreloadedSections.map((me)=>{let ye=se.find((De)=>De.connectionName===me.syntheticConnectionName);if(!ye)throw Error(`Pipeline9 joint DRC repair lost preloaded section "${me.syntheticConnectionName}"`);let Ce=me.originalTrace.pcb_trace_id;_e.set(me.evaluationTraceId,Ce);let ve=!Ae.has(Ce);return Ae.add(Ce),{...me.originalTrace,pcb_trace_id:me.evaluationTraceId,...ve?{__replaces_pcb_trace_id:Ce}:{__replaces_pcb_trace_id:void 0},route:Ex(ye,e.layerCount,{defaultViaHoleDiameter:e.defaultViaHoleDiameter,obstacles:e.obstacles,connMap:e.connMap})}}),Ee=new Map;for(let me=0;me<he.length;me++)Ee.set(ue[me].pcb_trace_id,he[me].pcb_trace_id);for(let me of this.movablePreloadedSections)Ee.set(me.evaluationTraceId,`${me.syntheticConnectionName}_0`);let Te=new Set(Ee.values()),be=[...Q,...Pe,...ue];return{evaluatedTraces:Mke(e.originalSrj.traces??[],be),movableTraceIds:Te,originalTraceIdByEvaluationTraceId:_e,routedTraces:be,solverTraceIdByEvaluationTraceId:Ee}},q=({errors:se,errorsWithCenters:le,circuitJson:he,movableTraceIds:ue,solverTraceIdByEvaluationTraceId:Ae})=>{let _e=he.map((Pe)=>{if(!("pcb_trace_id"in Pe)||typeof Pe.pcb_trace_id!="string")return Pe;let Ee=Ae.get(Pe.pcb_trace_id);return Ee?{...Pe,pcb_trace_id:Ee}:Pe});return{errors:hBt({errors:ABt(se,Ae),circuitJson:_e,newTraceIds:ue}),errorsWithCenters:hBt({errors:ABt(le,Ae),circuitJson:_e,newTraceIds:ue})}},ne={source:x0(e.originalSrj===e.srjWithPointPairs?e.originalSrj:{...e.originalSrj,connections:[...e.srjWithPointPairs.connections,...e.originalSrj.connections]}),route:x0(e.srjWithPointPairs)},ce=({routes:se,hdRoutes:le},he=!0)=>{let ue=se??le;if(!ue)throw Error("Pipeline9 reference DRC repair requires HD routes");let Ae=j(ue),_e=T_e({includeBoardClearance:!0,connectivityMaps:ne,inputSrj:e.originalSrj,srjWithPointPairs:e.srjWithPointPairs,routedTraces:Ae.routedTraces,drcOptions:{traceClearance:s,viaClearance:c,includeTraceContinuity:he}}),Pe=new Set(Ae.evaluatedTraces.map((ye)=>ye.pcb_trace_id)),Ee=hE({errors:_e.errors,circuitJson:_e.circuitJson,evaluatedTraceIds:Pe}),Te=hE({errors:_e.errorsWithCenters,circuitJson:_e.circuitJson,evaluatedTraceIds:Pe}),be=XY({errors:Ee,baselineErrors:u,originalTraceIdByPreparedTraceId:Ae.originalTraceIdByEvaluationTraceId}),me=XY({errors:Te,baselineErrors:h,originalTraceIdByPreparedTraceId:Ae.originalTraceIdByEvaluationTraceId});return q({errors:be,errorsWithCenters:me,circuitJson:_e.circuitJson,movableTraceIds:Ae.movableTraceIds,solverTraceIdByEvaluationTraceId:Ae.solverTraceIdByEvaluationTraceId})},oe=({routes:se,hdRoutes:le})=>{let he=se??le;if(!he)throw Error("Pipeline9 cached reference DRC requires HD routes");let ue=JSON.stringify(he);if(W?.candidateKey===ue)return W.result;this.referenceDrcValidationCount+=1;let Ae=ce({traces:[],routes:he,hdRoutes:he});return W={candidateKey:ue,result:Ae},Ae};oe.inputMode="routes-only",this.cachedReferenceDrcEvaluator=oe,this.clearancePrecisionDrcEvaluator=({routes:se,hdRoutes:le})=>ce({traces:[],routes:se,hdRoutes:le},!1);let ie=(se)=>{let le=j(se);return uHe(e.srjWithPointPairs,le.routedTraces,{minTraceWidth:e.originalSrj.minTraceWidth,minViaDiameter:e.originalSrj.minViaDiameter,originalSrj:e.originalSrj,includeOriginalConnections:!0,connectivityMaps:ne})},J;this.clearanceMarginDrcEvaluator=(se,le,he)=>(J?.routes!==he&&(J={routes:he,circuitJson:ie(he)}),(({circuitJson:ue,originalCircuitJson:Ae,targets:_e})=>{let Pe=new Map(ue.filter((ye)=>ye.type==="pcb_trace").map((ye)=>[ye.pcb_trace_id,ye])),Ee=new Map(Ae.filter((ye)=>ye.type==="pcb_trace").map((ye)=>[ye.pcb_trace_id,ye])),Te=ue.filter((ye)=>ye.type==="pcb_via"),be=new Map;for(let ye of ue)ye.type==="pcb_via"?be.set(ye.pcb_via_id,ye):ye.type==="pcb_smtpad"?be.set(ye.pcb_smtpad_id,ye):ye.type==="pcb_plated_hole"&&be.set(ye.pcb_plated_hole_id,ye);let me=[];for(let ye of _e){let Ce=ye.type==="pcb_via_trace_clearance_error",ve=Ce?ye.pcb_via_id:ye.pcb_pad_id;if(!Ce&&ye.type!=="pcb_pad_trace_clearance_error"||typeof ye.pcb_trace_id!="string"||typeof ve!="string"||typeof ye.minimum_clearance!="number"||!Number.isFinite(ye.minimum_clearance)||ye.minimum_clearance<=0)throw Error("Pipeline9 clearance margin requires a valid target pair");let De=Ee.get(ye.pcb_trace_id),Ze=Ae.find((wt)=>Ce?wt.type==="pcb_via"&&wt.pcb_via_id===ve:wt.type==="pcb_smtpad"&&wt.pcb_smtpad_id===ve||wt.type==="pcb_plated_hole"&&wt.pcb_plated_hole_id===ve);if(!De||!Ze)throw Error(`Pipeline9 clearance margin has no original target ${ve}/${ye.pcb_trace_id}`);let st=Pe.get(ye.pcb_trace_id),et=be.get(ve);if(Ce){if(Ze.type!=="pcb_via"||typeof Ze.pcb_trace_id!="string")throw Error("Pipeline9 clearance margin requires the original via owner");let wt=Ee.get(Ze.pcb_trace_id);if(!wt)throw Error("Pipeline9 clearance margin lost the original via owner");let Dt=wt.route.filter((Re)=>Re.route_type==="via"),vt=Dt.map((Re,Je)=>({segment:Re,index:Je})).filter(({segment:Re})=>Re.x===Ze.x&&Re.y===Ze.y&&Ze.layers.includes(Re.from_layer)&&Ze.layers.includes(Re.to_layer)).filter(({segment:Re},Je,Ve)=>Ve.findIndex((Ye)=>Ye.segment.from_layer===Re.from_layer&&Ye.segment.to_layer===Re.to_layer)===Je);if(vt.length===0)throw Error("Pipeline9 clearance margin lost the original via transition");if(vt.length!==1)return{status:"unsupported-identity"};let Ht=vt[0].index,Xt=Pe.get(Ze.pcb_trace_id),ut=Xt?.route.filter((Re)=>Re.route_type==="via");if(!ut||ut.length!==Dt.length||ut.some((Re,Je)=>Re.from_layer!==Dt[Je].from_layer||Re.to_layer!==Dt[Je].to_layer))return{status:"unsupported-identity"};let je=ut[Ht];et=Te.filter((Re)=>Re.x===je.x&&Re.y===je.y&&Re.layers.join()===Ze.layers.join()).reduce((Re,Je)=>!Re||Je.outer_diameter>Re.outer_diameter?Je:Re,void 0)}if(!(st&&et&&("x"in et)&&("y"in et)))return{status:"unsupported-identity"};let lt={minClearance:ye.minimum_clearance+1},it=Ce?nkt([st,et],lt):tkt([st,et],lt),gt=ye.minimum_clearance+Gge;for(let wt of it){let Dt=wt.actual_clearance;if(typeof Dt!="number"||!Number.isFinite(Dt))throw Error("Pipeline9 clearance margin requires a finite measurement");Dt>=gt||me.push({...ye,...et.type==="pcb_via"?{pcb_via_id:et.pcb_via_id,pcb_via_ids:[et.pcb_via_id]}:{},actual_clearance:Dt,minimum_clearance:gt,center:{x:et.x,y:et.y}})}}return{status:"measured",errors:me}})({circuitJson:ie(se),originalCircuitJson:J.circuitJson,targets:le})),this.clearancePrecisionIndexedDrcEvaluator=({routes:se,hdRoutes:le})=>{let he=se??le;if(!he)throw Error("Pipeline9 clearance ranking requires HD routes");let ue=j(he);return Y.evaluate(ue.evaluatedTraces)};let ee=({routes:se,hdRoutes:le})=>{let he=se??le;if(!he)throw Error("Pipeline9 joint DRC repair requires HD routes");let ue=JSON.stringify(he),Ae=this.indexedDrcCandidateCache.get(ue);if(Ae!==void 0)return this.indexedDrcCacheHitCount+=1,Ae;let _e=performance.now();this.indexedDrcEvaluationCount+=1;let Pe=j(he),Ee=Y.evaluate(Pe.evaluatedTraces),Te=mBt(Pe.evaluatedTraces),be=new Set(Pe.evaluatedTraces.map((Ze)=>Ze.pcb_trace_id)),me=hE({errors:Ee.errors,circuitJson:Te,evaluatedTraceIds:be}),ye=hE({errors:Ee.errorsWithCenters,circuitJson:Te,evaluatedTraceIds:be}),Ce=XY({errors:me,baselineErrors:V.errors,originalTraceIdByPreparedTraceId:Pe.originalTraceIdByEvaluationTraceId}),ve=XY({errors:ye,baselineErrors:V.errorsWithCenters,originalTraceIdByPreparedTraceId:Pe.originalTraceIdByEvaluationTraceId});if(Ce.length===0){let Ze=this.referenceDrcValidationCount,st=oe({traces:[],routes:he,hdRoutes:he}),et=Array.isArray(st)?st:st.errors;return this.referenceDrcValidationCount>Ze&&et.length>0&&(this.referenceDrcFalseNegativeCount+=1),this.indexedDrcEvaluationTimeMs+=performance.now()-_e,this.cacheIndexedDrcResult(ue,st),st}let De=q({errors:Ce,errorsWithCenters:ve,circuitJson:Te,movableTraceIds:Pe.movableTraceIds,solverTraceIdByEvaluationTraceId:Pe.solverTraceIdByEvaluationTraceId});return this.indexedDrcEvaluationTimeMs+=performance.now()-_e,this.cacheIndexedDrcResult(ue,De),De};ee.inputMode="routes-only",this.drcEvaluator=ee,this.exactRepairParams={srj:z,hdRoutes:[...e.newHdRoutes,...this.movablePreloadedSections.map((se)=>se.hdRoute)],connMap:e.connMap,effort:e.effort,viaHoleDiameter:e.defaultViaHoleDiameter,drcEvaluator:ee,viaInPadDrcEvaluator:ee,maxIterations:B,enableBroadFallback:!1,enableLargeBoardBroadFallback:!1,enableTargetedErrorSweep:!0,enableTraceViaOwnerTargeting:!0,enablePostSolveClearanceRelaxation:!1,enableSafeTraceLayerMoves:!0,enableViaInPadLayerMoves:e.originalSrj.allowViaInPad??!1,viaInPadMaxIterations:B,broadMaxIterations:w,broadPassMultiplier:3*E},(e.updatedPreloadedTraces.length>0||(e.originalSrj.traces?.length??0)>0)&&this.pipelineDef.splice(1,1),(e.updatedPreloadedTraces.length>0||!e.obstacles.some((se)=>se.isNonPlatedHole))&&(this.currentPipelineStepIndex=1),this.activeSubSolver=this.pipelineDef[this.currentPipelineStepIndex].createSolver(),this.MAX_ITERATIONS=this.activeSubSolver.MAX_ITERATIONS+1}getSolverName(){return"Pipeline9JointDrcRepairSolver"}_step(){let e=this.pipelineDef[this.currentPipelineStepIndex];if(e){if(this.activeSubSolver){let t=this.activeSubSolver;return t.step(),this.MAX_ITERATIONS=Math.max(this.MAX_ITERATIONS,this.iterations+t.MAX_ITERATIONS-t.iterations+2),void(t.failed?(this.failed=!0,this.error=t.error,this.activeSubSolver=null):t.solved&&(e.onSolved(),this.activeSubSolver=null,this.currentPipelineStepIndex++))}this.activeSubSolver=e.createSolver(),this.MAX_ITERATIONS=Math.max(this.MAX_ITERATIONS,this.iterations+this.activeSubSolver.MAX_ITERATIONS+2)}else this.solved=!0}computeProgress(){return this.solved?1:Math.max(this.progress,(this.currentPipelineStepIndex+(this.activeSubSolver?.progress??0))/this.pipelineDef.length)}getCurrentPhase(){return this.pipelineDef[this.currentPipelineStepIndex]?.solverName??"none"}finishInitialBoundedRegionalRepair(){if(!this.initialBoundedRegionalRepairSolver?.solved||this.initialBoundedRegionalRepairStartedAt===void 0||!this.cachedReferenceDrcEvaluator)throw Error("Pipeline9 initial regional repair is not complete");let e=this.initialBoundedRegionalRepairSolver.getResult();if(this.stats={...this.stats,initialBoundedRegionalRepairAccepted:!1,initialBoundedRegionalRepairAttemptedRegionCount:e.attemptedRegionCount,initialBoundedRegionalRepairAcceptedRegionCount:e.acceptedRegionCount,initialBoundedRegionalRepairCandidateAttemptCount:e.candidateAttemptCount,initialBoundedRegionalRepairPathSearchNodeCount:e.pathSearchNodeCount,initialBoundedRegionalRepairReferenceValidationCount:e.referenceValidationCount,initialBoundedRegionalRepairPublishedDrcIssueCount:e.publishedDrcIssueCount,initialBoundedRegionalRepairTimeMs:performance.now()-this.initialBoundedRegionalRepairStartedAt},e.publishedDrcIssueCount!==0)return;let t=this.cachedReferenceDrcEvaluator({traces:[],routes:e.routes,hdRoutes:e.routes});if((Array.isArray(t)?t:t.errors).length!==0)throw Error("Pipeline9 initial regional repair lost its zero-DRC validation");this.combinedOutput=e.routes,this.stats={...this.stats,finalDrcIssueCount:0,initialBoundedRegionalRepairAccepted:!0,boundedRegionalRepairMaxRegions:this.initialBoundedRegionalRepairSolver.budget.maxRegions,boundedRegionalRepairMaxCandidateAttempts:this.initialBoundedRegionalRepairSolver.budget.maxCandidateAttempts,boundedRegionalRepairMaxPathSearchNodes:this.initialBoundedRegionalRepairSolver.budget.maxPathSearchNodes,boundedRegionalRepairAttemptedRegionCount:e.attemptedRegionCount,boundedRegionalRepairAcceptedRegionCount:e.acceptedRegionCount,boundedRegionalRepairCandidateAttemptCount:e.candidateAttemptCount,boundedRegionalRepairPathSearchNodeCount:e.pathSearchNodeCount,boundedRegionalRepairReferenceValidationCount:e.referenceValidationCount,boundedRegionalRepairRepaired:e.repaired,boundedRegionalRepairPublishedDrcIssueCount:e.publishedDrcIssueCount,initialBoundedRegionalRepairAddedViaCount:Math.max(0,e.routes.reduce((n,o)=>n+o.vias.length,0)-this.inputNewHdRoutes.reduce((n,o)=>n+o.vias.length,0)),terminalEscapeCandidateCount:0,terminalEscapeAcceptedCount:0,regionalB01RepairAttempted:!1,regionalB01RepairCandidateSearchCount:0,regionalB01RepairCandidateSearchBudget:0,clearancePrecisionCandidateCount:0,clearancePrecisionCandidateValidationCount:0,clearancePrecisionReferenceValidationCount:0,clearancePrecisionRepaired:!1,referenceDrcValidationCount:this.referenceDrcValidationCount,referenceDrcFalseNegativeCount:this.referenceDrcFalseNegativeCount,indexedDrcEvaluationCount:this.indexedDrcEvaluationCount,indexedDrcCacheHitCount:this.indexedDrcCacheHitCount,indexedDrcEvaluationTimeMs:this.indexedDrcEvaluationTimeMs,indexedDrcCandidateCacheSize:this.indexedDrcCandidateCache.size,indexedDrcCandidateCacheCapacity:64},this.solved=!0}finishExactRepair(){if(!this.exactRepairSolver)throw Error("Pipeline9 post-exact repair requires the exact solver");let e=this.exactRepairSolver.getOutput(),t=this.exactRepairSolver.stats.finalDrcIssueCount,n=typeof t=="number"&&Number.isFinite(t)&&t>=0?t:void 0,o,i=0,r=0,s=0,a=!1,c=this.cachedReferenceDrcEvaluator({traces:[],routes:e,hdRoutes:e}),l=Array.isArray(c)?c:c.errors;if(o=l.length,l.length>0){let h=(({srj:A,routes:m,newConnections:p,syntheticConnectionNames:g,connMap:_,indexedDrcEvaluator:f,candidateDrcEvaluator:y,marginDrcEvaluator:x,drcEvaluator:C,initialErrors:I,initialErrorsWithCenters:b=I})=>{let P={routes:m,attemptedCandidateCount:0,candidateValidationCount:0,referenceValidationCount:0,repaired:!1};if((A.traces?.length??0)>0||g.size>0)return P;if(I.length===0)return P;let E=kte({routes:m,newConnections:p,syntheticConnectionNames:g}),B=new Map;for(let V of A.obstacles)for(let W of[V.obstacleId,V.circuitJsonMetadata?.pcb_smtpad_id,V.circuitJsonMetadata?.pcb_plated_hole_id,V.connectedTo[0]])typeof W=="string"&&B.set(W,V.center);let w=_Re({errors:I,errorsWithCenters:b,routeIndexByTraceId:E,padPositionById:B});if(!w)return P;let T=w,Q=w.errors,N=w.errors.map((V)=>({...V,minimum_clearance:V.minimum_clearance+Gge})),F=oBt(N);if(F===void 0)return P;let H={errors:N,deficit:F},z=m,Y=0,U=0,X=0;for(let V=0;V<8;V++){let W=new Map;for(let se of[...H.errors,...T.errors]){let le=JSON.stringify([se.type,se.pcb_trace_id,se.pcb_pad_id,se.pcb_via_id]);W.set(le,se)}let j=[...W.values()],q;for(let se of JYo){let le=EI(z);if(!MQe(A,le,j,E,se,_,!0,!0,!0,!1))continue;let he=cS(le);Y++;let ue=f({traces:[],routes:he,hdRoutes:he}),Ae=oBt(Array.isArray(ue)?ue:ue.errors);Ae!==void 0&&(!q||Ae<q.deficit)&&(q={routes:he,deficit:Ae})}if(!q)break;U++;let ne=y({traces:[],routes:q.routes,hdRoutes:q.routes}),ce=Array.isArray(ne)?ne:ne.errors,oe=_Re({errors:ce,errorsWithCenters:Array.isArray(ne)?ne:ne.errorsWithCenters??ne.errors,routeIndexByTraceId:E,padPositionById:B});if(!oe)break;let ie=x(q.routes,Q,m);if(ie.status==="unsupported-identity")break;let J=ie.errors,ee=_Re({errors:J,errorsWithCenters:J,routeIndexByTraceId:E,padPositionById:B});if(!ee)break;if(ce.length===0&&J.length===0){X++;let se=C({traces:[],routes:q.routes,hdRoutes:q.routes});if((Array.isArray(se)?se:se.errors).length===0)return{routes:q.routes,attemptedCandidateCount:Y,candidateValidationCount:U,referenceValidationCount:X,repaired:!0};break}if(oe.deficit+ee.deficit>=T.deficit+H.deficit-0.000000001)break;z=q.routes,T=oe,H=ee}return{routes:m,attemptedCandidateCount:Y,candidateValidationCount:U,referenceValidationCount:X,repaired:!1}})({srj:this.params.srj,routes:e,newConnections:this.params.newConnections,syntheticConnectionNames:this.syntheticConnectionNames,connMap:this.params.connMap,indexedDrcEvaluator:this.clearancePrecisionIndexedDrcEvaluator,candidateDrcEvaluator:this.clearancePrecisionDrcEvaluator,marginDrcEvaluator:this.clearanceMarginDrcEvaluator,drcEvaluator:this.cachedReferenceDrcEvaluator,initialErrors:l,initialErrorsWithCenters:Array.isArray(c)?c:c.errorsWithCenters??c.errors});i=h.attemptedCandidateCount,r=h.candidateValidationCount,s=h.referenceValidationCount,a=h.repaired,h.repaired&&(e=h.routes,o=0)}if(o===0)return this.combinedOutput=e,this.stats={...this.stats,...this.exactRepairSolver.stats,postExactIndexedDrcIssueCount:n,postExactReferenceValidationAttempted:!0,postExactReferenceDrcIssueCount:0,postExactReferenceAccepted:!0,clearancePrecisionCandidateCount:i,clearancePrecisionCandidateValidationCount:r,clearancePrecisionReferenceValidationCount:s,clearancePrecisionRepaired:a,boundedRegionalRepairMaxRegions:0,boundedRegionalRepairMaxCandidateAttempts:0,boundedRegionalRepairMaxPathSearchNodes:0,boundedRegionalRepairAttemptedRegionCount:0,boundedRegionalRepairAcceptedRegionCount:0,boundedRegionalRepairCandidateAttemptCount:0,boundedRegionalRepairPathSearchNodeCount:0,boundedRegionalRepairReferenceValidationCount:0,boundedRegionalRepairRepaired:!1,boundedRegionalRepairTimeMs:0,regionalB01RepairCandidateCount:0,regionalB01RepairAcceptedCount:0,regionalB01RepairFallbackCandidateCount:0,regionalB01RepairCandidateSearchCount:0,regionalB01RepairCandidateSearchBudget:0,regionalB01RepairCandidateSearchBudgetExhausted:!1,regionalB01RepairSafeTraceLayerSkippedForBudget:!1,regionalB01RepairRemainingDrcIssueCount:0,regionalB01RepairPreloadEligibleDrcIssueCount:0,regionalB01RepairAttempted:!1,regionalB01RepairTraceIdCount:0,terminalEscapeCandidateCount:0,terminalEscapeAcceptedCount:0,referenceDrcValidationCount:this.referenceDrcValidationCount,referenceDrcFalseNegativeCount:this.referenceDrcFalseNegativeCount,indexedDrcEvaluationCount:this.indexedDrcEvaluationCount,indexedDrcCacheHitCount:this.indexedDrcCacheHitCount,indexedDrcEvaluationTimeMs:this.indexedDrcEvaluationTimeMs,indexedDrcCandidateCacheSize:this.indexedDrcCandidateCache.size,indexedDrcCandidateCacheCapacity:64},void(this.solved=!0);let d=AVo({srj:this.params.srj,originalSrj:this.params.originalSrj,routes:e,newConnections:this.params.newConnections,syntheticConnectionNames:this.syntheticConnectionNames,drcEvaluator:this.drcEvaluator,effort:this.params.effort}),u=(({routes:h,newConnections:A,syntheticConnectionNames:m,fixedPreloadedObstacleRoutes:p,updatedPreloadedTraces:g})=>{let _=new Set,f=Object.assign(new Set,{collidingFixedTraceIds:_}),y=kte({routes:h,newConnections:A,syntheticConnectionNames:m}),x=new Set;for(let[C,I]of y)m.has(h[I].connectionName)?f.add(C):x.add(C);for(let C of p){let I=g[C.preloadedTraceIndex];if(!I)throw Error(`Pipeline9 fixed preload route has invalid trace index ${C.preloadedTraceIndex}`);x.has(I.pcb_trace_id)?_.add(I.pcb_trace_id):f.add(I.pcb_trace_id)}return f})({routes:d.routes,newConnections:this.params.newConnections,syntheticConnectionNames:this.syntheticConnectionNames,fixedPreloadedObstacleRoutes:this.fixedPreloadedObstacleRoutes,updatedPreloadedTraces:this.params.updatedPreloadedTraces});this.regionalB01Params={srj:this.params.srj,routes:d.routes,fixedObstacleRoutes:this.fixedPreloadedObstacleRoutes,newConnections:this.params.newConnections,syntheticConnectionNames:this.syntheticConnectionNames,drcEvaluator:this.drcEvaluator,initialErrors:d.remainingErrors,allowTracePairRepair:!0,preloadRepairTraceIds:u,connMap:this.params.connMap,colorMap:this.params.colorMap,viaDiameter:this.params.defaultViaDiameter,traceWidth:this.params.srj.minTraceWidth,obstacleMargin:this.params.srj.defaultObstacleMargin??this.params.srj.minTraceToPadEdgeClearance??0.15,effort:this.params.effort},this.stats={...this.stats,...this.exactRepairSolver.stats,postExactIndexedDrcIssueCount:n,postExactReferenceValidationAttempted:!0,postExactReferenceDrcIssueCount:o,postExactReferenceAccepted:!1,clearancePrecisionCandidateCount:i,clearancePrecisionCandidateValidationCount:r,clearancePrecisionReferenceValidationCount:s,clearancePrecisionRepaired:a,regionalB01RepairTraceIdCount:u.size+(u.collidingFixedTraceIds?.size??0),terminalEscapeCandidateCount:d.attemptedCandidateCount,terminalEscapeAcceptedCount:d.acceptedCandidateCount}}finishRegionalB01Repair(){if(!this.regionalB01RepairSolver?.solved)throw Error("Pipeline9 regional B01 stage must solve before completion");let e=this.regionalB01RepairSolver.getResult(),t=this.cachedReferenceDrcEvaluator({traces:[],routes:e.routes,hdRoutes:e.routes}),n=iBt(e.routes.length,(Array.isArray(t)?t:t.errors).length,this.params.effort);this.boundedRegionalParams={connMap:this.params.connMap,originalSrj:{...this.params.originalSrj,connections:[...this.params.originalSrj.connections,...this.params.newConnections]},routes:e.routes,viaHoleDiameter:this.params.defaultViaHoleDiameter,syntheticConnectionNames:this.syntheticConnectionNames,drcEvaluator:this.cachedReferenceDrcEvaluator,budget:n}}finishBoundedRegionalRepair(){if(!this.boundedRegionalRepairSolver?.solved||!this.regionalB01RepairSolver?.solved||!this.boundedRegionalParams?.budget||this.boundedRegionalRepairStartedAt===void 0)throw Error("Pipeline9 bounded regional stage is missing its completed inputs");let e=this.regionalB01RepairSolver.getResult(),t=this.boundedRegionalRepairSolver.getResult(),n=this.boundedRegionalParams.budget;this.combinedOutput=t.routes,this.stats={...this.stats,boundedRegionalRepairMaxRegions:n.maxRegions,boundedRegionalRepairMaxCandidateAttempts:n.maxCandidateAttempts,boundedRegionalRepairMaxPathSearchNodes:n.maxPathSearchNodes,boundedRegionalRepairAttemptedRegionCount:t.attemptedRegionCount,boundedRegionalRepairAcceptedRegionCount:t.acceptedRegionCount,boundedRegionalRepairCandidateAttemptCount:t.candidateAttemptCount,boundedRegionalRepairPathSearchNodeCount:t.pathSearchNodeCount,boundedRegionalRepairReferenceValidationCount:t.referenceValidationCount,boundedRegionalRepairRepaired:t.repaired,boundedRegionalRepairPublishedDrcIssueCount:t.publishedDrcIssueCount,boundedRegionalRepairTimeMs:performance.now()-this.boundedRegionalRepairStartedAt,regionalB01RepairCandidateCount:e.attemptedCandidateCount,regionalB01RepairAcceptedCount:e.acceptedCandidateCount,regionalB01RepairFallbackCandidateCount:e.fallbackCandidateCount,regionalB01RepairCandidateSearchCount:e.candidateSearchCount,regionalB01RepairCandidateSearchBudget:e.candidateSearchBudget,regionalB01RepairCandidateSearchBudgetExhausted:e.candidateSearchBudgetExhausted,regionalB01RepairSafeTraceLayerSkippedForBudget:e.safeTraceLayerRepairSkippedForBudget,regionalB01RepairRemainingDrcIssueCount:e.remainingDrcIssueCount,regionalB01RepairPreloadEligibleDrcIssueCount:e.preloadEligibleDrcIssueCount,regionalB01RepairAttempted:e.preloadRepairAttempted,referenceDrcValidationCount:this.referenceDrcValidationCount,referenceDrcFalseNegativeCount:this.referenceDrcFalseNegativeCount,indexedDrcEvaluationCount:this.indexedDrcEvaluationCount,indexedDrcCacheHitCount:this.indexedDrcCacheHitCount,indexedDrcEvaluationTimeMs:this.indexedDrcEvaluationTimeMs,indexedDrcCandidateCacheSize:this.indexedDrcCandidateCache.size,indexedDrcCandidateCacheCapacity:64},this.solved=!0}getCombinedOutput(){return this.combinedOutput??this.exactRepairSolver?.getOutput()??this.inputNewHdRoutes}getOutput(){return this.getCombinedOutput().filter((e)=>!this.syntheticConnectionNames.has(e.connectionName))}getUpdatedPreloadedTraces(){let e=new Map(this.getCombinedOutput().map((o)=>[o.connectionName,o])),t=new Map;for(let o of this.movablePreloadedSections){let i=e.get(o.syntheticConnectionName);if(!i)throw Error(`Pipeline9 joint DRC repair output is missing "${o.syntheticConnectionName}"`);let r=o.originalTrace.pcb_trace_id,s=t.get(r)??[];s.push({routePositionStart:o.originalRoutePositionStart,routePositionEnd:o.originalRoutePositionEnd,route:Ex(i,this.params.layerCount,{defaultViaHoleDiameter:this.params.defaultViaHoleDiameter,obstacles:this.params.obstacles,connMap:this.params.connMap})}),t.set(r,s)}let n=new Map([...t].map(([o,i])=>{let r=this.inputUpdatedPreloadedTraces.find((s)=>s.pcb_trace_id===o);if(!r)throw Error(`Pipeline9 cannot find preloaded trace "${o}" while rebuilding repaired sections`);return[o,IVo({originalTrace:r,repairedSections:i})]}));return this.inputUpdatedPreloadedTraces.map((o)=>n.get(o.pcb_trace_id)??o)}getMutatedPreloadedTraces(){let e=new Set([...this.params.mutatedPreloadedTraceIds,...this.movablePreloadedSections.map((t)=>t.originalTrace.pcb_trace_id)]);return this.getUpdatedPreloadedTraces().filter((t)=>e.has(t.pcb_trace_id))}visualize(){return this.exactRepairSolver?.visualize()??{}}},wYt=0.000001,_Bt=(e,t,n)=>{let o=Wi(e,n),i=Wi(t,n);return Array.from({length:Math.abs(i-o)+1},(r,s)=>Math.min(o,i)+s)},gBt=(e)=>e.route_type==="wire",SVo=(e,t,n)=>e.portPoints.filter((o)=>o.availableZ.includes(n)&&!(o._preloadedTracePortAssignments??[]).some((i)=>i.z===n&&i.fixedNetId!==t.fixedNetId)).map((o)=>({portPoint:o,distance:Da(o,t.start,t.end)})).sort((o,i)=>o.distance-i.distance||o.portPoint.distToCentermostPortOnZ-i.portPoint.distToCentermostPortOnZ||o.portPoint.segmentPortPointId.localeCompare(i.portPoint.segmentPortPointId))[0]?.portPoint,PVo=(e,t,n)=>{e._preloadedFixedNetIds=[...new Set([...e._preloadedFixedNetIds??[],t.fixedNetId])].sort();let o=t.end.x-t.start.x,i=t.end.y-t.start.y,r=o*o+i*i,s=r===0?0:Math.max(0,Math.min(1,((e.x-t.start.x)*o+(e.y-t.start.y)*i)/r)),a={traceId:t.traceId,fixedNetId:t.fixedNetId,routePosition:t.routePositionStart+s*(t.routePositionEnd-t.routePositionStart),tracePoint:{x:t.start.x+s*o,y:t.start.y+s*i},z:n},c=e._preloadedTracePortAssignments??[];c.some((l)=>l.traceId===a.traceId&&l.fixedNetId===a.fixedNetId&&l.z===a.z&&Math.abs(l.routePosition-a.routePosition)<=wYt)||(e._preloadedTracePortAssignments=[...c,a].sort((l,d)=>l.traceId.localeCompare(d.traceId)||l.routePosition-d.routePosition||l.z-d.z))},vVo=class extends Oi{constructor(e,t){super(),this.sharedEdgeSegments=e,this.srj=t,this.MAX_ITERATIONS=1,this.primitives=((n)=>{let o=[],i=x0(n);for(let r of n.traces??[]){if(!r.connection_name)throw Error(`Preloaded trace "${r.pcb_trace_id}" is missing a connection name`);let s=i.getNetConnectedToId(r.connection_name)??r.connection_name;for(let[a,c]of r.route.entries())if(c.route_type==="via")o.push({traceId:r.pcb_trace_id,fixedNetId:s,connectionName:r.connection_name,routePositionStart:a,routePositionEnd:a,zLayers:_Bt(c.from_layer,c.to_layer,n.layerCount),start:c,end:c});else if(c.route_type==="through_obstacle")o.push({traceId:r.pcb_trace_id,fixedNetId:s,connectionName:r.connection_name,routePositionStart:a,routePositionEnd:a+1,zLayers:_Bt(c.from_layer,c.to_layer,n.layerCount),start:c.start,end:c.end});else if(c.route_type==="jumper"){let l=Wi(c.layer,n.layerCount);for(let[d,u]of[c.start,c.end].entries())o.push({traceId:r.pcb_trace_id,fixedNetId:s,connectionName:r.connection_name,routePositionStart:a+d,routePositionEnd:a+d,zLayers:[l],start:u,end:u})}for(let a=0;a<r.route.length-1;a++){let c=r.route[a],l=r.route[a+1];gBt(c)&&gBt(l)&&c.layer===l.layer&&o.push({traceId:r.pcb_trace_id,fixedNetId:s,connectionName:r.connection_name,routePositionStart:a,routePositionEnd:a+1,zLayers:[Wi(c.layer,n.layerCount)],start:c,end:l})}}return o})(t)}sharedEdgeSegments;srj;primitives;getSolverName(){return"PreloadedTraceGraphSolver"}_step(){for(let n of this.primitives)for(let o of this.sharedEdgeSegments)if(!(Hk(n.start,n.end,o.start,o.end)>wYt))for(let i of n.zLayers){if(!o.availableZ.includes(i))continue;let r=SVo(o,n,i);r&&PVo(r,n,i)}let e=this.sharedEdgeSegments.flatMap((n)=>n.portPoints),t=e.filter((n)=>(n._preloadedFixedNetIds?.length??0)>0);this.stats={preloadedTraceCount:this.srj.traces?.length??0,preloadedTraceShapeCount:this.primitives.length,inputBoundaryCount:this.sharedEdgeSegments.length,outputBoundaryCount:this.sharedEdgeSegments.length,inputPortCount:e.length,outputPortCount:e.length,preloadedPortCount:t.length,tracePortAssignmentCount:t.reduce((n,o)=>n+(o._preloadedTracePortAssignments?.length??0),0),topologyChanged:!1},this.solved=!0}getOutput(){if(!this.solved)throw Error("PreloadedTraceGraphSolver has not solved yet");return this.sharedEdgeSegments}},EVo=class extends kfe{_step(){if(this.error=xke(this.inputSrj),this.error)return void(this.failed=!0);let{traces:e,...t}=this.inputSrj,n=XE(t),o=XE(wGt(TGt(n)));this.error=xke(o),this.error?this.failed=!0:(this.outputSrj=e===void 0?o:{...o,traces:e},this.solved=!0)}};function fBt(e){return new Set((e??[]).filter((t)=>t._isComponentTopologyNode).map((t)=>t.capacityMeshNodeId))}function TYt(e,t){return e.nodeIds.some((n)=>t.has(n))}function MVo({sharedEdgeSegments:e,componentCapacityMeshNodeIds:t}){return e.filter((n)=>!TYt(n,t))}function Uu(e,t,n,o={}){return{solverName:e,solverClass:t,getConstructorParams:n,onSolved:o.onSolved}}var cne=class extends Oi{constructor(e,t={}){super(),this.srj=e,this.opts=t;let n=XE(e);this.originalSrj=n,this.opts={...t};let o=this.opts;if(this.effort=o.effort??1,this.MAX_ITERATIONS=1e8*this.effort,this.maxNodeDimension=o.maxNodeDimension??15,this.maxNodeRatio=o.maxNodeRatio??6,this.minNodeArea=o.minNodeArea??0.010000000000000002,this.visualizationTraceColorMode=o.visualizationTraceColorMode??"layer",this.setSimpleRouteJson(n),o.capacityDepth===void 0){let i=this.srj.bounds.maxX-this.srj.bounds.minX,r=this.srj.bounds.maxY-this.srj.bounds.minY,s=Math.max(i,r),a=o.targetMinCapacity??0.5;o.capacityDepth=cT(s,a)}this.cacheProvider=o.cacheProvider===void 0?CS():o.cacheProvider===null?null:o.cacheProvider,this.startTimeOfPhase={},this.endTimeOfPhase={},this.timeSpentOnPhase={}}srj;opts;getSolverName(){return"AutoroutingPipelineSolver9_PreloadedTraceGraph"}preprocessSimpleRouteJsonSolver;escapeViaLocationSolver;netToPointPairsSolver;componentTopologyGeneratorSolver;topologyPlanningSolver;topologyMergingSolver;globalTopologyGeneratorSolver;nodeDimensionSubdivisionSolver;nodeTargetMerger;edgeSolver;colorMap;highDensityRouteSolver;highDensityForceImproveSolver;highDensityRepairSolver;highDensityStitchSolver;globalDrcForceImproveSolver;pipeline9JointDrcRepairSolver;singleLayerNodeMerger;strawSolver;deadEndSolver;traceSimplificationSolver;mutatedPreloadedTraceSimplificationSolver;lengthMatchingPostProcessingSolver;powerTraceExpansionSolver;availableSegmentPointSolver;portPointPathingSolver;multiSectionPortPointOptimizer;uniformPortDistributionSolver;traceWidthSolver;necessaryCrampedPortPointSolver;preloadedTraceGraphSolver;componentDetectionSolver;viaDiameter;viaHoleDiameter;minTraceWidth;effort;effortCleanupSolver;maxNodeDimension;maxNodeRatio;minNodeArea;visualizationTraceColorMode;startTimeOfPhase;endTimeOfPhase;timeSpentOnPhase;activeSubSolver=null;connMap;srjWithEscapeViaLocations;srjWithPointPairs;originalSrj;capacityNodes=null;capacityEdges=null;sharedEdgeSegmentsWithNecessaryCrampedPortPoints;highDensityNodePortPoints;cacheProvider=null;pipelineDef=[Uu("preprocessSimpleRouteJsonSolver",EVo,(e)=>[e.originalSrj,{traceColorMode:e.visualizationTraceColorMode}],{onSolved:(e)=>{e.setSimpleRouteJson(e.preprocessSimpleRouteJsonSolver.getOutputSimpleRouteJson())}}),Uu("componentDetectionSolver",jGt,(e)=>[{inputSrj:e.srj}]),Uu("escapeViaLocationSolver",Nfe,(e)=>[e.srj,{viaDiameter:e.viaDiameter,minTraceWidth:e.minTraceWidth,obstacleMargin:e.srj.defaultObstacleMargin??0.15}],{onSolved:(e)=>{e.srjWithEscapeViaLocations=e.escapeViaLocationSolver?.getOutputSimpleRouteJson()}}),Uu("netToPointPairsSolver",wU,(e)=>{let t=e.srjWithEscapeViaLocations??e.srj;return[t,e.colorMap,rT(t)]},{onSolved:(e)=>{e.srjWithPointPairs=e.netToPointPairsSolver?.getNewSimpleRouteJson(),e.colorMap=HA(e.srjWithPointPairs,e.connMap),e.connMap=x0(e.srjWithPointPairs)}}),Uu("topologyPlanningSolver",ZGt,(e)=>[{inputSrj:e.srjWithPointPairs,componentDetectionOutput:e.componentDetectionSolver.getOutput(),viaDiameter:e.viaDiameter,obstacleMargin:e.srj.defaultObstacleMargin??0.15}],{onSolved:(e)=>{e.topologyPlanningSolver.getOutput(),e.globalTopologyGeneratorSolver=e.topologyPlanningSolver.globalTopologySolver,e.componentTopologyGeneratorSolver=new eYt(e.topologyPlanningSolver)}}),Uu("topologyMergingSolver",$Gt,(e)=>{let t=e.topologyPlanningSolver.getOutput();return[{layerCount:e.srj.layerCount,nodeGroups:[{groupId:"global",nodes:t.globalMeshNodes,isComponent:!1},...t.componentMeshNodes.map((n,o)=>({groupId:`component-${o}`,nodes:n,isComponent:!0}))]}]},{onSolved:(e)=>{e.capacityNodes=e.topologyMergingSolver.getOutput()}}),Uu("nodeDimensionSubdivisionSolver",Tfe,(e)=>[e.capacityNodes,e.maxNodeDimension,e.maxNodeRatio,e.minNodeArea],{onSolved:(e)=>{e.capacityNodes=e.nodeDimensionSubdivisionSolver.outputNodes}}),Uu("edgeSolver",sT,(e)=>[e.capacityNodes],{onSolved:(e)=>{e.capacityEdges=e.edgeSolver?.edges}}),Uu("availableSegmentPointSolver",hL,(e)=>[{nodes:e.capacityNodes,edges:e.capacityEdges||[],traceWidth:e.minTraceWidth,colorMap:e.colorMap,shouldReturnCrampedPortPoints:!0}]),Uu("necessaryCrampedPortPointSolver",nne,(e)=>{let t=fBt(e.capacityNodes);return[{capacityMeshNodes:e.capacityNodes.filter((n)=>!t.has(n.capacityMeshNodeId)),sharedEdgeSegments:MVo({sharedEdgeSegments:e.availableSegmentPointSolver.getOutput(),componentCapacityMeshNodeIds:t}),simpleRouteJson:e.srjWithPointPairs}]},{onSolved:(e)=>{let t=fBt(e.capacityNodes);e.sharedEdgeSegmentsWithNecessaryCrampedPortPoints=function({originalSharedEdgeSegments:n,filteredSharedEdgeSegments:o,componentCapacityMeshNodeIds:i}){let r=new Map(o.map((s)=>[s.edgeId,s]));return n.map((s)=>TYt(s,i)?s:r.get(s.edgeId)??s)}({originalSharedEdgeSegments:e.availableSegmentPointSolver.getOutput(),filteredSharedEdgeSegments:e.necessaryCrampedPortPointSolver.getOutput(),componentCapacityMeshNodeIds:t})}}),Uu("preloadedTraceGraphSolver",vVo,(e)=>[e.sharedEdgeSegmentsWithNecessaryCrampedPortPoints,e.srjWithPointPairs]),Uu("portPointPathingSolver",Dfe,(e)=>{let t=e.sharedEdgeSegmentsWithNecessaryCrampedPortPoints??e.necessaryCrampedPortPointSolver?.getOutput()??e.availableSegmentPointSolver.getOutput(),{graph:n,connections:o}=one({capacityMeshNodes:e.capacityNodes,layerCount:e.srj.layerCount,connectivityMap:e.connMap,segmentPortPoints:t.flatMap((i)=>i.portPoints),simpleRouteJsonConnections:e.srjWithPointPairs.connections});return[{graph:n,connections:o,layerCount:e.srj.layerCount,effort:Math.min(1,e.effort),preserveTerminalPcbPortIds:!0,minViaPadDiameter:e.viaDiameter,flags:{FORCE_CENTER_FIRST:!0,RIPPING_ENABLED:!0,USE_SELECTIVE_RERIP_ROUTING:!0,USE_PARTIAL_RIP_ROUTING_WITH_PRELOADED_TRACES:!0},weights:{SHUFFLE_SEED:0,MEMORY_PF_FACTOR:4,CENTER_OFFSET_DIST_PENALTY_FACTOR:0,CENTER_OFFSET_FOCUS_SHIFT:0,NODE_PF_FACTOR:0,LAYER_CHANGE_COST:0,RIPPING_PF_COST:0,NODE_PF_MAX_PENALTY:100,BASE_CANDIDATE_COST:0.6,MAX_ITERATIONS_PER_PATH:0,RANDOM_WALK_DISTANCE:0,START_RIPPING_PF_THRESHOLD:0.3,END_RIPPING_PF_THRESHOLD:1,MAX_RIPS:1000,RANDOM_RIP_FRACTION:0.3,STRAIGHT_LINE_DEVIATION_PENALTY_FACTOR:4,GREEDY_MULTIPLIER:0.7,MIN_ALLOWED_BOARD_SCORE:-1e4}}]}),Uu("uniformPortDistributionSolver",Hte,(e)=>[{nodeWithPortPoints:e.portPointPathingSolver?.getOutput().nodesWithPortPoints??[],inputNodesWithPortPoints:e.portPointPathingSolver?.getOutput().inputNodeWithPortPoints??[],minTraceWidth:e.minTraceWidth,obstacles:e.srj.obstacles,layerCount:e.srj.layerCount,useLayerAwareGeometry:e.srj.layerCount>2,preserveSolitaryPorts:Boolean(e.srj.traces?.length)}]),Uu("highDensityRouteSolver",VHe,(e)=>{let t=e.portPointPathingSolver;if(!t)throw Error("Pipeline9 invariant violated: high-density routing requires the completed port-point pathing solver");let n=t.getOutput(),o=e.uniformPortDistributionSolver?.getOutput()??[],i=n.nodesWithPortPoints,r=o.length>0?o:i;e.highDensityNodePortPoints=structuredClone(r);let s=(e.originalSrj.traces??[]).flatMap((c,l)=>E6(c,l,e.originalSrj.layerCount,e.viaDiameter,e.connMap)),a=Y6t({traces:e.originalSrj.traces??[],fixedHdRoutes:s,sections:e.getChangedPreloadedTraceSections()});return[{nodePortPoints:r,boardGeometry:{bounds:e.originalSrj.bounds,outline:e.originalSrj.outline,minBoardEdgeClearance:e.originalSrj.minBoardEdgeClearance},fixedHdRoutes:a,connMap:e.connMap,colorMap:e.colorMap,obstacles:e.srj.obstacles,layerCount:e.srj.layerCount,allowBlindAndBuriedVias:e.srj.allowBlindAndBuriedVias,viaDiameter:e.viaDiameter,traceWidth:e.minTraceWidth,obstacleMargin:e.srj.defaultObstacleMargin??0.15,viaToPadClearance:e.srj.minViaEdgeToPadEdgeClearance,effort:Math.min(1,e.effort),includeBoardObstacles:!0,nodePfById:t.computeNodePfMap(),preserveTerminalPcbPortIds:!0}]}),Uu("highDensityForceImproveSolver",ine,(e)=>[{nodeWithPortPoints:e.highDensityNodePortPoints??[],hdRoutes:DYo(GHe(e.highDensityRouteSolver.routes)),colorMap:e.colorMap,totalStepsPerNode:Math.max(12,Math.round(20*Math.min(1,e.effort))),nodeAssignmentMargin:e.srj.defaultObstacleMargin??0.2}]),Uu("highDensityRepairSolver",rne,(e)=>[{nodeWithPortPoints:e.highDensityNodePortPoints??[],hdRoutes:e.highDensityForceImproveSolver?.getOutput()??e.highDensityRouteSolver.routes,obstacles:e.srj.obstacles,colorMap:e.colorMap,repairMargin:e.srj.defaultObstacleMargin??0.2,minimumTraceWidth:e.srj.minTraceWidth,connMap:e.connMap}]),Uu("highDensityStitchSolver",Qfe,(e)=>[{connections:[...e.srjWithPointPairs.connections,...e.getChangedPreloadedTraceSections().map((t)=>t.connection)],hdRoutes:e.highDensityRepairSolver?.getOutput()??e.highDensityForceImproveSolver?.getOutput()??e.highDensityRouteSolver.routes,colorMap:e.colorMap,layerCount:e.srj.layerCount,defaultViaDiameter:e.viaDiameter,preserveTerminalPcbPortIds:!0,preferSameLayerTerminalEndpoints:!0}]),Uu("traceSimplificationSolver",HI,(e)=>{let t=e.getPreloadedTraceUpdatesAfterHighDensity().updatedPreloadedTraces.flatMap((r,s)=>E6(r,s,e.originalSrj.layerCount,e.viaDiameter,e.connMap).map((a)=>({...a,rootConnectionName:r.connection_name}))),n=new Set(e.getChangedPreloadedTraceSections().map((r)=>r.connectionName)),o=e.highDensityStitchSolver.mergedHdRoutes.filter((r)=>!n.has(r.connectionName)),i=Hge([...o,...t],e.connMap);return[{hdRoutes:o,obstacles:e.srj.obstacles,connMap:e.connMap,colorMap:e.colorMap,outline:e.srj.outline,defaultViaDiameter:e.viaDiameter,layerCount:e.srj.layerCount,minTraceToPadEdgeClearance:e.srj.minTraceToPadEdgeClearance,minBoardEdgeClearance:e.srj.minBoardEdgeClearance,otherHdRoutes:t,netByConnectionName:i,enableCrossingViaReduction:!0,terminalLayerIndicesByPcbPortId:O6t(e.srj.connections,e.srj.obstacles,e.srj.layerCount),iterations:2}]}),Uu("mutatedPreloadedTraceSimplificationSolver",HI,(e)=>{let t=e.getPreparedMutatedPreloadedTraceSections(),n=t.sections.map((i)=>i.hdRoute),o=[...t.immutableHdRoutes,...e.traceSimplificationSolver.simplifiedHdRoutes];return[{hdRoutes:n,obstacles:e.srj.obstacles,connMap:e.connMap,colorMap:e.colorMap,outline:e.srj.outline,defaultViaDiameter:e.viaDiameter,layerCount:e.srj.layerCount,minTraceToPadEdgeClearance:e.srj.minTraceToPadEdgeClearance,minBoardEdgeClearance:e.srj.minBoardEdgeClearance,otherHdRoutes:o,netByConnectionName:Hge([...n,...o],e.connMap),enableCrossingViaReduction:!0,preserveRouteEndpoints:!0,enableVertexShortcuts:!0,iterations:2}]}),Uu("traceWidthSolver",TU,(e)=>[{hdRoutes:e.traceSimplificationSolver.simplifiedHdRoutes,obstacles:e.srj.obstacles,connMap:e.connMap,colorMap:e.colorMap,minTraceWidth:e.minTraceWidth,connection:e.srjWithPointPairs.connections,obstacleMargin:e.srj.minTraceToPadEdgeClearance??0.15,minTraceToHoleEdgeClearance:e.srj.minTraceToHoleEdgeClearance,layerCount:e.srj.layerCount}]),Uu("globalDrcForceImproveSolver",bE,(e)=>[{srj:e.getSrjWithMaterializedPreloadedTraces(),hdRoutes:cYt({hdRoutes:bV(e.traceWidthSolver.getHdRoutesWithWidths()),connections:e.netToPointPairsSolver?.newConnections??[]}),connMap:e.connMap,effort:Math.min(1,e.effort),maxIterations:16,enableLargeBoardBroadFallback:!1,enablePostSolveClearanceRelaxation:!1}]),Uu("pipeline9JointDrcRepairSolver",bVo,(e)=>{let t=e.getPreloadedTraceUpdatesAfterHighDensity(),n=e.getSrjWithMaterializedPreloadedTraces();return[{srj:n,srjWithPointPairs:n,originalSrj:e.originalSrj,newConnections:e.netToPointPairsSolver?.newConnections??[],newHdRoutes:e.globalDrcForceImproveSolver.getOutput(),updatedPreloadedTraces:t.updatedPreloadedTraces,mutatedPreloadedTraceIds:new Set(t.mutatedPreloadedTraces.map((o)=>o.pcb_trace_id)),connMap:e.connMap,obstacles:e.srj.obstacles,layerCount:e.srj.layerCount,defaultViaDiameter:e.viaDiameter,defaultViaHoleDiameter:e.viaHoleDiameter,effort:Math.min(1,e.effort),colorMap:e.colorMap}]}),Uu("effortCleanupSolver",PYo,(e)=>{let t=e.getUpdatedPreloadedTraces(),n={...e.originalSrj,traces:t},o=bV(e.pipeline9JointDrcRepairSolver.getOutput()),i=(r)=>wke(Eke({connections:e.netToPointPairsSolver.newConnections,originalConnections:e.originalSrj.connections,hdRoutes:bV(r),layerCount:e.srj.layerCount,obstacles:e.srj.obstacles,defaultViaHoleDiameter:e.viaHoleDiameter,connMap:e.connMap}),e.originalSrj.traces??[]);return[{effort:e.effort,viaRemovalPasses:e.pipeline9JointDrcRepairSolver.stats.initialBoundedRegionalRepairAddedViaCount>0?2:1,config:{hdRoutes:o,preserveRouteEndpoints:!0,obstacles:e.srj.obstacles,connMap:e.connMap,colorMap:e.colorMap,outline:e.srj.outline,defaultViaDiameter:e.viaDiameter,layerCount:e.srj.layerCount,minTraceToPadEdgeClearance:e.srj.minTraceToPadEdgeClearance,minBoardEdgeClearance:e.srj.minBoardEdgeClearance,otherHdRoutes:t.flatMap((r,s)=>E6(r,s,e.srj.layerCount,e.viaDiameter,e.connMap)),enableCrossingViaReduction:!0,terminalLayerIndicesByPcbPortId:O6t(e.srj.connections,e.srj.obstacles,e.srj.layerCount)},getCost:(r)=>{let s=i(r);return{vias:s.reduce((a,c)=>a+c.route.filter((l)=>l.route_type==="via").length,0),points:s.reduce((a,c)=>a+c.route.length,0)}},isValid:(r)=>T_e({inputSrj:n,srjWithPointPairs:e.srjWithPointPairs,routedTraces:i(r),includeBoardClearance:!0,drcOptions:{traceClearance:e.originalSrj.minTraceToPadEdgeClearance??0.1,viaClearance:e.originalSrj.minViaHoleEdgeToViaHoleEdgeClearance??0.1}}).errors.length===0}]}),Uu("lengthMatchingPostProcessingSolver",EYo,(e)=>{let t=e.netToPointPairsSolver;if(!t)throw Error("Pipeline9: length-matching post-processing requires NetToPointPairsSolver output");let n=t.newConnections,o=new Map;for(let s of e.srj.differentialPairs??[])for(let a of s.connectionNames){let c=n.filter((l)=>l.name===a||l.__rootConnectionNames?.includes(a)||l.__netConnectionName===a);if(c.length!==1)throw Error(`Pipeline9: differential pair connection "${a}" must resolve to exactly one final point-pair connection, got ${c.length}`);o.set(a,c[0].name)}let i=e.effortCleanupSolver.getOutput(),r=(e.srj.differentialPairs??[]).map((s)=>{let a=s.connectionNames.map((u)=>{let h=o.get(u);if(!h)throw Error(`Pipeline9: differential pair connection "${u}" is missing from final routed output`);return h});if(a[0]===a[1])throw Error(`Pipeline9: differential pair ${s.connectionNames.join("/")} resolves both members to "${a[0]}"`);let c={connectionNames:a,lengthTolerance:s.lengthTolerance};if(s.maxUncoupledLength!==void 0&&(c.maxUncoupledLength=s.maxUncoupledLength),s.traceGap===void 0)return c;let l=a.map((u)=>{let h=i.filter((A)=>A.connectionName===u);if(h.length!==1)throw Error(`Pipeline9: differential pair connection "${u}" must resolve to exactly one final HD route, got ${h.length}`);return h[0]}),d=s.traceGap+l.reduce((u,h)=>u+h.traceThickness/2,0);return{...c,minimumCenterlineDistance:d,maximumCenterlineDistance:d}});return[{hdRoutes:i,differentialPairs:r,buses:e.srj.buses??[],connections:e.srj.connections,obstacles:e.srj.obstacles,traces:e.getUpdatedPreloadedTraces(),bounds:e.srj.bounds,layerCount:e.srj.layerCount,obstacleMargin:e.srj.minTraceToPadEdgeClearance??0.15}]}),Uu("powerTraceExpansionSolver",sYt,(e)=>{let t=e.opts.powerTraceExpansion??{},n=t.onlyConnectionNames??aYt(e.originalSrj);return[lYt({originalSrj:e.originalSrj,newlyRoutedTraces:e.getNewTracesBeforePowerExpansion(),currentPreloadedTraces:e.getUpdatedPreloadedTraces(),expandedConnectionNames:n,resolveConnectedTraceAliases:!0}),{allowNewVias:!1,...t,onlyConnectionNames:n}]})];setSimpleRouteJson(e){this.srj=e;let t=y0(this.srj);this.viaDiameter=t.padDiameter,this.viaHoleDiameter=t.holeDiameter,this.minTraceWidth=this.srj.minTraceWidth,this.connMap=x0(this.srj),this.colorMap=HA(this.srj,this.connMap)}getConstructorParams(){return[this.srj,this.opts]}currentPipelineStepIndex=0;computeProgress(){let e=this.activeSubSolver?.progress??0;return(this.currentPipelineStepIndex+e)/this.pipelineDef.length}_step(){let e=this.pipelineDef[this.currentPipelineStepIndex];if(!e)return void(this.solved=!0);if(this.activeSubSolver)return this.activeSubSolver.step(),void(this.activeSubSolver.solved?(this.endTimeOfPhase[e.solverName]=performance.now(),this.timeSpentOnPhase[e.solverName]=this.endTimeOfPhase[e.solverName]-this.startTimeOfPhase[e.solverName],e.onSolved?.(this),this.activeSubSolver=null,this.currentPipelineStepIndex++):this.activeSubSolver.failed&&(this.error=this.activeSubSolver?.error,this.failed=!0,this.activeSubSolver=null));let t=e.getConstructorParams(this);this.activeSubSolver=new e.solverClass(...t),this.activeSubSolver instanceof HI&&(this.activeSubSolver.MAX_SIMPLIFICATION_PIPELINE_LOOPS=Math.ceil(this.activeSubSolver.MAX_SIMPLIFICATION_PIPELINE_LOOPS*Math.min(1,this.effort))),e.solverName!=="lengthMatchingPostProcessingSolver"&&e.solverName!=="powerTraceExpansionSolver"&&e.solverName!=="effortCleanupSolver"||(this.MAX_ITERATIONS=Math.max(this.MAX_ITERATIONS,this.iterations+this.activeSubSolver.MAX_ITERATIONS+1)),this[e.solverName]=this.activeSubSolver,this.timeSpentOnPhase[e.solverName]=0,this.startTimeOfPhase[e.solverName]=performance.now()}solveUntilPhase(e){for(;this.getCurrentPhase()!==e;)this.step()}getCurrentPhase(){return this.pipelineDef[this.currentPipelineStepIndex]?.solverName??"none"}visualize(){if(!this.solved&&this.activeSubSolver)return this.visualizeStage(this.activeSubSolver);let e=this.escapeViaLocationSolver?.visualize(),t=this.netToPointPairsSolver?.visualize(),n=this.componentDetectionSolver?.visualize(),o=this.componentTopologyGeneratorSolver?.visualize(),i=this.globalTopologyGeneratorSolver?.visualize(),r=this.topologyMergingSolver?.visualize(),s=this.nodeDimensionSubdivisionSolver?.visualize(),a=this.nodeTargetMerger?.visualize(),c=this.singleLayerNodeMerger?.visualize(),l=this.strawSolver?.visualize(),d=this.edgeSolver?.visualize(),u=this.deadEndSolver?.visualize(),h=this.availableSegmentPointSolver?.visualize(),A=this.portPointPathingSolver?.visualize(),m=this.multiSectionPortPointOptimizer?.visualize(),p=this.uniformPortDistributionSolver?.visualize(),g=this.highDensityRouteSolver?.visualize(),_=this.highDensityForceImproveSolver?.visualize(),f=this.highDensityRepairSolver?.visualize(),y=this.highDensityStitchSolver?.visualize(),x=this.traceSimplificationSolver?.visualize(),C=this.mutatedPreloadedTraceSimplificationSolver?.visualize(),I=this.lengthMatchingPostProcessingSolver?.visualize(),b=this.powerTraceExpansionSolver?.visualize(),P=this.traceWidthSolver?.visualize(),E=this.necessaryCrampedPortPointSolver?.visualize(),B=(this.highDensityRouteSolver?.visualize(),this.originalSrj),w=B.outline,T=[];if(T.push({points:[{x:B.bounds?.minX??-50,y:B.bounds?.minY??-50},{x:B.bounds?.maxX??50,y:B.bounds?.minY??-50},{x:B.bounds?.maxX??50,y:B.bounds?.maxY??50},{x:B.bounds?.minX??-50,y:B.bounds?.maxY??50},{x:B.bounds?.minX??-50,y:B.bounds?.minY??-50}],strokeColor:"rgba(255,0,0,0.25)"}),w&&w.length>=2){let j=w.map((q)=>({x:q.x,y:q.y}));j.push({...j[0]}),T.push({points:j,strokeColor:"rgba(0, 136, 255, 0.95)"})}let Q=O6(B),N={points:[...B.connections.flatMap((j)=>j.pointsToConnect.map((q)=>({...q,layer:z6(q,B.layerCount),label:`${j.name} ${q.pcb_port_id??""}`})))],rects:[...(B.obstacles??[]).filter((j)=>!j.isCopperPour).map((j)=>({...j,fill:j.layers?.includes("top")?"rgba(255,0,0,0.25)":j.layers?.includes("bottom")?"rgba(0,0,255,0.25)":"rgba(255,0,0,0.25)",layer:OE(j,B.layerCount),label:Q(j)}))],lines:T},F={traceColorMode:this.visualizationTraceColorMode},H=L6({srj:B,visualizationOptions:F}),z=Lc(N,H),Y=this.preprocessSimpleRouteJsonSolver?.visualize(),U=this.globalDrcForceImproveSolver?.visualize(),X=this.pipeline9JointDrcRepairSolver?.visualize(),V=[z,Y,n,o,e,t,i,r,s,a,c,l,d,u,h,E,A,m,p,g?Lc(N,g):null,_,f,y,x,C,P,U,X,I,b,this.solved?Lc({lines:T},L6({srj:this.originalSrj,visualizationOptions:F}),this.visualizeFinalOutput()):null].filter(Boolean),W=Lc(...V);return this.visualizationTraceColorMode==="net"?Nge(W,this.colorMap):W}visualizeStage(e){let t=e.visualize();return this.visualizationTraceColorMode==="net"?Nge(t,this.colorMap):t}visualizeFinalOutput(){let e=this.visualizationTraceColorMode,t=this.getOutputSimpleRouteJson();return p1(t,{traceColorMode:e})}preview(){if(this.highDensityRouteSolver){let e=[];for(let t=this.highDensityRouteSolver.routes.length-1;t>=0;t--){let n=this.highDensityRouteSolver.routes[t];if(e.push({points:n.route.map((o)=>({x:o.x,y:o.y})),strokeColor:this.colorMap[n.connectionName]}),e.length>200)break}return{lines:e}}return this.portPointPathingSolver?this.portPointPathingSolver.preview():this.netToPointPairsSolver?this.netToPointPairsSolver.visualize():this.escapeViaLocationSolver?this.escapeViaLocationSolver.visualize():this.componentTopologyGeneratorSolver?this.componentTopologyGeneratorSolver.visualize():this.componentDetectionSolver?this.componentDetectionSolver.visualize():this.preprocessSimpleRouteJsonSolver?this.preprocessSimpleRouteJsonSolver.visualize():{}}_getOutputHdRoutes(){if(((this.originalSrj.differentialPairs?.length??0)>0||(this.originalSrj.buses??[]).some((e)=>e.maxLengthSkew!==void 0))&&this.lengthMatchingPostProcessingSolver){let{hdRoutes:e}=this.lengthMatchingPostProcessingSolver.getOutput();return e}return(this.effortCleanupSolver?.solved?this.effortCleanupSolver.getOutput():void 0)??this.pipeline9JointDrcRepairSolver?.getOutput()??this.globalDrcForceImproveSolver?.getOutput()??this.traceWidthSolver?.getHdRoutesWithWidths()??this.traceSimplificationSolver?.simplifiedHdRoutes??this.highDensityStitchSolver.mergedHdRoutes}getOriginalFixedHdRoutes(){return(this.originalSrj.traces??[]).flatMap((e,t)=>E6(e,t,this.originalSrj.layerCount,this.viaDiameter,this.connMap))}getChangedPreloadedTraceSections(){return this.portPointPathingSolver?.getOutput().changedPreloadedTraceSections??[]}getPreloadedFixedRouteStateAfterHighDensity(){let e=this.getOriginalFixedHdRoutes(),t=this.getChangedPreloadedTraceSections(),n=Y6t({traces:this.originalSrj.traces??[],fixedHdRoutes:e,sections:t}),o=t.length===0?[]:TYo({traces:this.originalSrj.traces??[],sections:t,stitchedHdRoutes:this.highDensityStitchSolver?.mergedHdRoutes??[],layerCount:this.originalSrj.layerCount}),i=new Set(t.map((s)=>s.traceId)),r=e.filter((s)=>i.has(this.originalSrj.traces?.[s.preloadedTraceIndex]?.pcb_trace_id??"")).map((s)=>s.connectionName);return{originalFixedRoutes:e,updatedFixedRoutes:[...this.highDensityRouteSolver?.getUpdatedFixedHdRoutes()??n,...o],replacedConnectionNames:new Set([...this.highDensityRouteSolver?.fixedRouteReplacements.keys()??[],...r]),mutationMasks:new Map([...this.highDensityRouteSolver?.preloadedTraceMutationMasks??[],...o.map((s)=>[s.connectionName,Array(s.route.length-1).fill(!0)])])}}getPreparedMutatedPreloadedTraceSections(){let e=this.getPreloadedFixedRouteStateAfterHighDensity();return FYo({updatedFixedRoutes:e.updatedFixedRoutes,regionalMutationMasks:e.mutationMasks})}getPreloadedTraceUpdatesAfterHighDensity(){let e=this.getPreloadedFixedRouteStateAfterHighDensity(),t=this.getPreparedMutatedPreloadedTraceSections(),n=this.mutatedPreloadedTraceSimplificationSolver?.solved===!0?(({updatedFixedRoutes:o,sections:i,simplifiedHdRoutes:r})=>{let s=new Set(i.map((d)=>d.connectionName)),a=new Map(r.map((d)=>[d.connectionName,d]));if(a.size!==i.length||r.some((d)=>!s.has(d.connectionName)))throw Error(`Pipeline9 trace simplification changed the mutation-section set (expected ${i.length}, got ${r.length})`);let c=new Map,l=new Set;for(let d of i){let u=a.get(d.connectionName);if(!u)throw Error(`Pipeline9 trace simplification lost mutation section "${d.connectionName}"`);let h=u.route[0],A=u.route.at(-1);if(!(h&&A&&zge(h,d.section.start.point)&&zge(A,d.section.end.point)))throw Error(`Pipeline9 trace simplification changed mutation-section boundary "${d.connectionName}"`);let m=YHe(d.section,u),p=d.section.sourceRoutes[0];l.add(p.connectionName);for(let g of d.section.sourceRoutes){if(c.has(g.connectionName))throw Error(`Pipeline9 attempted to simplify fixed route "${g.connectionName}" more than once`);c.set(g.connectionName,m)}}return o.flatMap((d)=>{let u=c.get(d.connectionName);return u?l.has(d.connectionName)?[u]:[]:[d]})})({updatedFixedRoutes:t.normalizedFixedRoutes,sections:t.sections,simplifiedHdRoutes:this.mutatedPreloadedTraceSimplificationSolver.simplifiedHdRoutes}):e.updatedFixedRoutes;return(({originalTraces:o,originalFixedRoutes:i,updatedFixedRoutes:r,replacedConnectionNames:s,layerCount:a,defaultViaHoleDiameter:c,obstacles:l,connMap:d})=>{let u=new Map,h=new Map;for(let m of i){let p=u.get(m.preloadedTraceIndex)??[];p.push(m),u.set(m.preloadedTraceIndex,p)}for(let m of r){let p=h.get(m.preloadedTraceIndex)??[];p.push(m),h.set(m.preloadedTraceIndex,p)}let A=[];return{updatedPreloadedTraces:o.map((m,p)=>{let g=(u.get(p)??[]).sort(Bke);if(!g.some((x)=>s.has(x.connectionName)))return m;let _=(h.get(p)??[]).sort(Bke),f=m.route.some((x)=>x.route_type==="through_obstacle"),y={...m,__replaces_pcb_trace_id:m.pcb_trace_id,route:f?wYo({trace:m,originalTraceRoutes:g,updatedTraceRoutes:_,layerCount:a,defaultViaHoleDiameter:c,obstacles:l,connMap:d}):mYt({trace:m,updatedTraceRoutes:_,layerCount:a,defaultViaHoleDiameter:c,obstacles:l,connMap:d})};return A.push(y),y}),mutatedPreloadedTraces:A}})({originalTraces:this.originalSrj.traces??[],originalFixedRoutes:e.originalFixedRoutes,updatedFixedRoutes:n,replacedConnectionNames:e.replacedConnectionNames,layerCount:this.originalSrj.layerCount,defaultViaHoleDiameter:this.viaHoleDiameter,obstacles:this.originalSrj.obstacles,connMap:this.connMap})}getSrjWithMaterializedPreloadedTraces(){return{...this.srjWithPointPairs,traces:this.getPreloadedTraceUpdatesAfterHighDensity().updatedPreloadedTraces}}getUpdatedPreloadedTraces(){return this.pipeline9JointDrcRepairSolver?.getUpdatedPreloadedTraces()??this.getPreloadedTraceUpdatesAfterHighDensity().updatedPreloadedTraces}getMutatedPreloadedTraces(){return this.pipeline9JointDrcRepairSolver?.getMutatedPreloadedTraces()??this.getPreloadedTraceUpdatesAfterHighDensity().mutatedPreloadedTraces}getNewTracesBeforePowerExpansion(){if(!this.highDensityRouteSolver)throw Error("Cannot get new traces before high-density routing");let e=Eke({connections:this.netToPointPairsSolver?.newConnections??[],originalConnections:this.originalSrj.connections,hdRoutes:bV(this._getOutputHdRoutes()),layerCount:this.srj.layerCount,obstacles:this.srj.obstacles,defaultViaHoleDiameter:this.viaHoleDiameter,connMap:this.connMap});return wke(e,this.originalSrj.traces??[])}getPowerTraceExpansionFixedTraces(){if(!this.powerTraceExpansionSolver)throw Error("Pipeline9 invariant violated: solved pipeline is missing the unconditional power-trace expansion solver");return this.powerTraceExpansionSolver.inputSrj.fixedTraces}getOutputSimplifiedPcbTraces(){if(!this.solved)throw Error("Cannot get output before solving is complete");if(!this.powerTraceExpansionSolver)throw Error("Pipeline9 invariant violated: solved pipeline is missing the unconditional power-trace expansion solver");return[...this.getPowerTraceExpansionFixedTraces().filter((e)=>e.__replaces_pcb_trace_id!==void 0),...this.powerTraceExpansionSolver.getOutput()]}getOutputSimpleRouteJson(){if(!this.solved)throw Error("Cannot get output before solving is complete");if(!this.powerTraceExpansionSolver)throw Error("Pipeline9 invariant violated: solved pipeline is missing the unconditional power-trace expansion solver");let e=[...this.getPowerTraceExpansionFixedTraces(),...this.powerTraceExpansionSolver.getOutput()];return{...this.originalSrj,traces:e}}},BVo=String("0.0.993"),WHe=({nodeWithPortPoints:e,obstacleMargin:t,traceWidth:n,viaDiameter:o})=>{let i=Kee(e),r=t+Math.max(n,o)/2+0.000001;return{minX:e.center.x+8*(i.minX-e.center.x)-r,maxX:e.center.x+8*(i.maxX-e.center.x)+r,minY:e.center.y+8*(i.minY-e.center.y)-r,maxY:e.center.y+8*(i.maxY-e.center.y)+r}},DYt=(e,t)=>{let n=(e.ccwRotationDegrees??0)*Math.PI/180,o=Math.abs(Math.cos(n)),i=Math.abs(Math.sin(n)),r=e.width/2,s=e.height/2,a=Math.max(r,r*o+s*i),c=Math.max(s,r*i+s*o);return e.center.x-a<=t.maxX&&e.center.x+a>=t.minX&&e.center.y-c<=t.maxY&&e.center.y+c>=t.minY},zV=(e,t)=>{for(let n of[t.connectionName,t.rootConnectionName,t.portPointId,t.pcb_port_id,t.prevPortPointId,t.nextPortPointId])n!==void 0&&e.add(n)},NYt=(e,t)=>Object.fromEntries(Object.entries(e.netMap).flatMap(([n,o])=>{let i=o.filter((r)=>t.has(r));return i.length>0||t.has(n)?[[n,i]]:[]})),RYt=({obstacle:e,connectedTo:t,preserveRotation:n})=>({type:"rect",layers:e.layers,...e.zLayers===void 0?{}:{zLayers:e.zLayers},...e.__zLayers===void 0?{}:{__zLayers:e.__zLayers},center:e.center,width:e.width,height:e.height,...n&&e.ccwRotationDegrees!==void 0?{ccwRotationDegrees:e.ccwRotationDegrees}:{},connectedTo:t,...e.circuitJsonMetadata===void 0?{}:{circuitJsonMetadata:e.circuitJsonMetadata}});function wVo({nodeWithPortPoints:e,connMap:t,obstacles:n,obstacleMargin:o,traceWidth:i,viaDiameter:r}){let s=WHe({nodeWithPortPoints:e,obstacleMargin:o,traceWidth:i,viaDiameter:r}),a=new Set;for(let l of e.portPoints)zV(a,l);for(let l of e.portPointsInPairs??[])zV(a,l[0]),zV(a,l[1]);let c=n.flatMap((l)=>{if(!DYt(l,s))return[];let d=(({obstacle:u,nodeWithPortPoints:h,connMap:A})=>{let m=new Set(h.portPoints.flatMap((_)=>{let f=A.getNetConnectedToId(_.rootConnectionName??_.connectionName)??_.rootConnectionName??_.connectionName;return[_.connectionName,f]})),p=new Set(u.connectedTo.filter((_)=>m.has(_))),g=new Map;for(let _ of m){let f=A.getNetConnectedToId(_)??_,y=g.get(f)??[];y.push(_),g.set(f,y)}for(let _ of g.values()){if([...p].some((y)=>_.some((x)=>x===y||A.areIdsConnected(x,y))))continue;let f=u.connectedTo.find((y)=>_.some((x)=>x===y||A.areIdsConnected(x,y)));f!==void 0&&p.add(f)}return[...p]})({obstacle:l,nodeWithPortPoints:e,connMap:t});for(let u of d)a.add(u);return[RYt({obstacle:l,connectedTo:d,preserveRotation:!0})]});return{connectivityNetMap:NYt(t,a),obstacles:c}}var TVo=(...e)=>{let t=new Map;for(let n of e)for(let[o,i]of Object.entries(n)){let r=t.get(o)??new Set;for(let s of i)r.add(s);t.set(o,r)}return Object.fromEntries([...t].map(([n,o])=>[n,[...o]]))};function DVo({nodeWithPortPoints:e,connMap:t,colorMap:n,obstacles:o,obstacleMargin:i,traceWidth:r,viaDiameter:s}){let a=WHe({nodeWithPortPoints:e,obstacleMargin:i,traceWidth:r,viaDiameter:s}),c=((u)=>[...new Set(u.portPoints.map((h)=>h.connectionName))])(e),l=o.flatMap((u)=>{if(!DYt(u,a))return[];let h=c.filter((A)=>u.connectedTo.some((m)=>m===A||t.areIdsConnected(A,m)));return h.length===0?[]:[RYt({obstacle:u,connectedTo:h,preserveRotation:!1})]}),d=new Set;for(let u of e.portPoints)zV(d,u);for(let u of e.portPointsInPairs??[])zV(d,u[0]),zV(d,u[1]);for(let u of l)for(let h of[u.circuitJsonMetadata?.pcb_smtpad_id,u.circuitJsonMetadata?.pcb_plated_hole_id,u.circuitJsonMetadata?.pcb_port_id,u.circuitJsonMetadata?.pcb_via_id,...u.connectedTo??[]])h!==void 0&&d.add(h);return{connectivityNetMap:NYt(t,d),colorMap:Object.fromEntries(Object.entries(n??{}).filter(([u])=>d.has(u))),obstacles:l}}var XHe="https://hd-cache2.tscircuit.com",yBt=310000,xBt=1835008,CBt=16777216,xh=class extends Error{constructor(e,t){super(t),this.reason=e,this.name="HdCache2RequestError"}reason},qZ=(e)=>e instanceof Error?e.message:String(e),NVo=new Set(["pcb_smtpad_id","pcb_plated_hole_id","pcb_port_id","pcb_via_id","source_component_name","source_port_name"]),RVo=(e)=>!(!e||typeof e!="object"||Array.isArray(e))&&Object.entries(e).every(([t,n])=>NVo.has(t)&&typeof n=="string"),JZ=(e,t)=>Math.abs(e-t)<=0.000000001*Math.max(1,Math.abs(e),Math.abs(t)),IBt=0.000001,QVo=(e,t)=>{let n=t==="ordinary"?IBt:0.001,o=new Set;for(let r=0;r<e.route.length-1;r++){let s=e.route[r],a=e.route[r+1],c=s.z!==a.z;if(s.toNextSegmentType==="through_obstacle"){if(!c)return!1;continue}if(s.toNextSegmentCircuitJsonMetadata!==void 0)return!1;if(!c)continue;let l=[],d=[];for(let[u,h]of e.vias.entries())Math.hypot(h.x-s.x,h.y-s.y)<=n&&l.push(u),Math.hypot(h.x-a.x,h.y-a.y)<=n&&d.push(u);if(Math.hypot(s.x-a.x,s.y-a.y)<=IBt){if(l.length===0)return!1;for(let u of l)o.add(u)}else{if(t==="regional-fallback")return!1;if(l.length===0==(d.length===0))return!1;for(let u of[...l,...d])o.add(u)}}let i=e.route.at(-1);return i.toNextSegmentType===void 0&&i.toNextSegmentCircuitJsonMetadata===void 0&&e.vias.every((r,s)=>o.has(s))},kVo=(e,t,n)=>{if(!Array.isArray(e))return!1;let o=new Map;for(let c of t.nodeWithPortPoints.portPoints){let l=o.get(c.connectionName)??[];l.push(c),o.set(c.connectionName,l)}let i=new Set(t.nodeWithPortPoints.availableZ??t.nodeWithPortPoints.portPoints.map((c)=>c.z)),r=WHe({nodeWithPortPoints:t.nodeWithPortPoints,obstacleMargin:t.obstacleMargin,traceWidth:t.traceWidth,viaDiameter:t.viaDiameter}),s=(c,l)=>(o.get(l)??[]).some((d)=>typeof c.x=="number"&&JZ(c.x,d.x)&&typeof c.y=="number"&&JZ(c.y,d.y)&&c.z===d.z);for(let c of e){if(!c||typeof c!="object")return!1;let l=c;if(typeof l.connectionName!="string"||l.connectionName.length===0||!o.has(l.connectionName)||typeof l.traceThickness!="number"||!Number.isFinite(l.traceThickness)||l.traceThickness<=0||typeof l.viaDiameter!="number"||!Number.isFinite(l.viaDiameter)||l.viaDiameter<=0||!JZ(l.viaDiameter,t.viaDiameter)||!Array.isArray(l.route)||l.route.length<2||!Array.isArray(l.vias))return!1;for(let u of[l.rootConnectionName,l.startPcbPortId,l.endPcbPortId,l.regionId])if(u!==void 0&&typeof u!="string")return!1;for(let u of l.route){if(!u||typeof u!="object")return!1;let h=u;if(typeof h.x!="number"||!Number.isFinite(h.x)||typeof h.y!="number"||!Number.isFinite(h.y)||h.x<r.minX||h.x>r.maxX||h.y<r.minY||h.y>r.maxY||typeof h.z!="number"||!Number.isInteger(h.z)||h.z<0||h.z>=t.layerCount||n==="ordinary"&&!i.has(h.z))return!1;if(h.traceThickness!==void 0&&(typeof h.traceThickness!="number"||!Number.isFinite(h.traceThickness)||h.traceThickness<=0))return!1;if(h.pcb_port_id!==void 0&&typeof h.pcb_port_id!="string")return!1;if(h.insideJumperPad!==void 0&&typeof h.insideJumperPad!="boolean")return!1;if(h.toNextSegmentType!==void 0&&h.toNextSegmentType!=="through_obstacle")return!1;if(h.toNextSegmentCircuitJsonMetadata!==void 0&&!RVo(h.toNextSegmentCircuitJsonMetadata))return!1}let d=l.route;if(!(n!=="ordinary"||s(d[0],l.connectionName)&&s(d.at(-1),l.connectionName)))return!1;for(let u of l.vias){if(!u||typeof u!="object")return!1;let h=u;if(typeof h.x!="number"||!Number.isFinite(h.x)||typeof h.y!="number"||!Number.isFinite(h.y)||h.x<r.minX||h.x>r.maxX||h.y<r.minY||h.y>r.maxY)return!1}if(!QVo(l,n))return!1;if(l.jumpers!==void 0){if(!Array.isArray(l.jumpers))return!1;for(let u of l.jumpers){if(!u||typeof u!="object")return!1;let h=u,{start:A,end:m}=h;if(h.route_type!=="jumper"||h.footprint!=="0603"&&h.footprint!=="1206"&&h.footprint!=="1206x4_pair"||!A||typeof A.x!="number"||!Number.isFinite(A.x)||typeof A.y!="number"||!Number.isFinite(A.y)||!m||typeof m.x!="number"||!Number.isFinite(m.x)||typeof m.y!="number"||!Number.isFinite(m.y)||A.x<r.minX||A.x>r.maxX||A.y<r.minY||A.y>r.maxY||m.x<r.minX||m.x>r.maxX||m.y<r.minY||m.y>r.maxY)return!1}}}let a=e;return n==="ordinary"?((c,l)=>{let d=l.portPointsInPairs??[];if(d.length>0){for(let[h,A]of d)if(!dge(c,h.connectionName,Px(h)).has(Px(A)))return!1;return!0}let u=new Map;for(let h of l.portPoints){let A=u.get(h.connectionName)??[];A.push(h),u.set(h.connectionName,A)}for(let[h,A]of u)for(let[m,p]of qee(A))if(!dge(c,h,Px(m)).has(Px(p)))return!1;return!0})(a,t.nodeWithPortPoints):((c,l)=>{let d=(p,g)=>{if(p.z!==g.z)return!1;let _=p.x-g.x,f=p.y-g.y;return Math.hypot(_,f)<=0.001},u=new Map;for(let p of c){let g=p.route.some((C,I)=>{let b=p.route[I+1];return!(b===void 0||JZ(C.x,b.x)&&JZ(C.y,b.y)&&C.z===b.z)}),_=p.route[0],f=p.route.at(-1);if(!g||!_||!f)return!1;let y=l.portPoints.filter((C)=>C.connectionName===p.connectionName);if(!y.some((C)=>d(_,C))||!y.some((C)=>d(f,C)))return!1;let x=u.get(p.connectionName)??[];x.push({start:_,end:f}),u.set(p.connectionName,x)}let h=(p,g,_)=>{if(d(g,_))return!0;let f=u.get(p)??[],y=[],x=new Set;for(let[C,I]of f.entries())(d(g,I.start)||d(g,I.end))&&(y.push(C),x.add(C));for(;y.length>0;){let C=f[y.pop()];if(d(_,C.start)||d(_,C.end))return!0;for(let[I,b]of f.entries())x.has(I)||(d(C.start,b.start)||d(C.start,b.end)||d(C.end,b.start)||d(C.end,b.end))&&(x.add(I),y.push(I))}return!1},A=l.portPointsInPairs??[];if(A.length>0)return A.every(([p,g])=>h(p.connectionName,p,g));let m=new Map;for(let p of l.portPoints){let g=m.get(p.connectionName)??[];g.push(p),m.set(p.connectionName,g)}return[...m].every(([,p])=>qee(p).every(([g,_])=>h(g.connectionName,g,_)))})(a,t.nodeWithPortPoints)},LVo=class{constructor(e,t=XHe,n={}){this.autorouterVersion=e,this.serverUrl=t;let{cacheVersion:o}=n;if(o!==void 0&&o.trim().length===0)throw Error("hd-cache2 cacheVersion must not be empty");this.cacheVersion=o}autorouterVersion;serverUrl;cacheVersion;stats={batchRequestsStarted:0,batchRequestsCompleted:0,batchItemsStarted:0,batchBodyBytesStarted:0,batchMaxBodyBytes:0,batchCacheMisses:0,singleRequestsStarted:0,batchInvalidLines:0,batchUnknownRequestIds:0,batchDuplicateRequestIds:0};solveMany(e){let t=e.map((r,s)=>this.createPendingSolve(String(s),r)),n=t.filter((r)=>r.serializedItem!==null),{batches:o,singletonSolves:i}=this.prepareBatches(n);for(let r of o)this.fetchBatch(r);for(let r of i)this.launchSingleSolve(r);return t.map((r)=>r.promise)}createPendingSolve(e,t){let n,o={requestId:e,input:t,serializedItem:null,promise:new Promise((i)=>{n=i}),resolve:n,settled:!1,singleSolveStarted:!1};try{o.serializedItem=JSON.stringify({requestId:e,input:t})}catch(i){this.settleWithFallback(o,"request_serialization_error",qZ(i))}return o}settle(e,t){e.settled||(e.settled=!0,e.resolve(t))}settleWithFallback(e,t,n){this.settle(e,{kind:"local-fallback",reason:t,error:n})}parseSuccessfulResponse(e,t){if(!e||typeof e!="object"||Array.isArray(e))throw new xh("invalid_response","hd-cache2 returned a non-object response");let n=e;if(n.ok!==!0)throw new xh("remote_error",typeof n.message=="string"?n.message:"hd-cache2 returned an unsuccessful response");if(n.autorouterVersion!==this.autorouterVersion)throw new xh("version_mismatch",`hd-cache2 returned autorouter version ${String(n.autorouterVersion)}, expected ${this.autorouterVersion}`);if(n.cacheVersion!==this.cacheVersion)throw new xh("cache_version_mismatch",`hd-cache2 returned cache version ${String(n.cacheVersion)}, expected ${String(this.cacheVersion)}`);if(n.source!=="cache"&&n.source!=="solver")throw new xh("invalid_response","hd-cache2 returned an invalid cache source");if(n.solutionStage!=="ordinary"&&n.solutionStage!=="regional-fallback")throw new xh("invalid_response","hd-cache2 returned an invalid solution stage");if(n.solutionStage==="regional-fallback"&&(!t.enableRegionalFallback||typeof n.ordinaryFailure!="string"||n.ordinaryFailure.length===0))throw new xh("invalid_response","hd-cache2 returned invalid regional fallback metadata");if(n.solutionStage==="ordinary"&&Object.prototype.hasOwnProperty.call(n,"ordinaryFailure"))throw new xh("invalid_response","hd-cache2 returned regional metadata on an ordinary result");if(n.solutionStage==="ordinary"&&n.status==="failed"&&t.enableRegionalFallback)throw new xh("invalid_response","hd-cache2 returned an intermediate ordinary failure");if(n.status==="solved"&&kVo(n.routes,t,n.solutionStage))return n;if(n.status==="failed"&&typeof n.error=="string"&&n.error.length>0)return n;throw new xh("invalid_response","hd-cache2 returned an invalid solve result")}parseBatchCacheMiss(e){if(e.ok!==!1||e.code!=="CACHE_MISS")return null;if(e.autorouterVersion!==this.autorouterVersion)throw new xh("version_mismatch",`hd-cache2 returned autorouter version ${String(e.autorouterVersion)}, expected ${this.autorouterVersion}`);if(e.cacheVersion!==this.cacheVersion)throw new xh("cache_version_mismatch",`hd-cache2 returned cache version ${String(e.cacheVersion)}, expected ${String(this.cacheVersion)}`);if(typeof e.message!="string")throw new xh("invalid_response","hd-cache2 returned an invalid cache miss response");return e}async fetchSingle(e){let t=new AbortController,n=!1,o=setTimeout(()=>{n=!0,t.abort(Error("hd-cache2 transport timed out after 310000ms"))},yBt);o.unref?.();try{let r={autorouterVersion:this.autorouterVersion,...this.cacheVersion===void 0?{}:{cacheVersion:this.cacheVersion},input:e.input},s;try{s=JSON.stringify(r)}catch(d){throw new xh("request_serialization_error",qZ(d))}let a=await fetch((i=this.serverUrl,/\/solve\/?$/.test(i)?i.replace(/\/+$/,""):`${i.replace(/\/+$/,"")}/solve`),{method:"POST",headers:{accept:"application/json","content-type":"application/json"},body:s,signal:t.signal}),c=await a.text(),l=null;try{l=c?JSON.parse(c):null}catch{if(!a.ok)throw new xh("http_error",`hd-cache2 request failed with status ${a.status}`);throw new xh("invalid_json",`hd-cache2 returned invalid JSON with status ${a.status}`)}if(!a.ok){let d=l&&typeof l=="object"&&"message"in l&&typeof l.message=="string"?l.message:`hd-cache2 request failed with status ${a.status}`;throw new xh("http_error",d)}this.settle(e,{kind:"remote",response:this.parseSuccessfulResponse(l,e.input)})}catch(r){let s=r instanceof xh?r.reason:n?"transport_timeout":"transport_error";this.settleWithFallback(e,s,qZ(r))}finally{clearTimeout(o)}var i}launchSingleSolve(e){e.singleSolveStarted||e.settled||(e.singleSolveStarted=!0,this.stats.singleRequestsStarted+=1,this.fetchSingle(e))}handleBatchResponseLine(e,t,n){if(e.trim().length===0)return;if(e.length>CBt)throw new xh("response_too_large","hd-cache2 returned an oversized batch result line");let o;try{o=JSON.parse(e)}catch{return void(this.stats.batchInvalidLines+=1)}if(!o||typeof o!="object"||Array.isArray(o))return void(this.stats.batchInvalidLines+=1);let i=o,r=i.requestId;if(typeof r!="string")return void(this.stats.batchInvalidLines+=1);let s=t.get(r);if(s)if(n.has(r))this.stats.batchDuplicateRequestIds+=1;else{n.add(r);try{if(this.parseBatchCacheMiss(i))return this.stats.batchCacheMisses+=1,void this.launchSingleSolve(s);this.settle(s,{kind:"remote",response:this.parseSuccessfulResponse(i,s.input)})}catch(a){this.stats.batchInvalidLines+=1,this.settleWithFallback(s,a instanceof xh?a.reason:"invalid_response",qZ(a))}}else this.stats.batchUnknownRequestIds+=1}async readBatchResponse(e,t){if(!e.body)throw new xh("invalid_response","hd-cache2 returned an empty batch response body");let n=new Map(t.items.map((a)=>[a.requestId,a])),o=new Set,i=new TextDecoder,r=e.body.getReader(),s="";for(;o.size<t.items.length;){let{done:a,value:c}=await r.read();if(s+=i.decode(c,{stream:!a}),s.length>CBt&&!s.includes(`
`))throw new xh("response_too_large","hd-cache2 returned an oversized unterminated batch result line");let l=s.indexOf(`
`);for(;l>=0;){let d=s.slice(0,l);s=s.slice(l+1),this.handleBatchResponseLine(d,n,o),l=s.indexOf(`
`)}if(a){s.trim().length>0&&this.handleBatchResponseLine(s,n,o);break}}if(o.size!==t.items.length)for(let a of t.items)o.has(a.requestId)||this.settleWithFallback(a,"missing_response",`hd-cache2 batch ended without result ${a.requestId}`);else await r.cancel().catch(()=>{})}async fetchBatch(e){let t=new AbortController,n=!1,o=setTimeout(()=>{n=!0,t.abort(Error("hd-cache2 batch transport timed out after 310000ms"))},yBt);o.unref?.(),this.stats.batchRequestsStarted+=1,this.stats.batchItemsStarted+=e.items.length,this.stats.batchBodyBytesStarted+=e.bodyBytes,this.stats.batchMaxBodyBytes=Math.max(this.stats.batchMaxBodyBytes,e.bodyBytes);try{let i=await fetch(((r)=>{let s=r.replace(/\/+$/,"");return/\/solve-batch$/.test(s)?s:/\/solve$/.test(s)?s.replace(/\/solve$/,"/solve-batch"):`${s}/solve-batch`})(this.serverUrl),{method:"POST",headers:{accept:"application/x-ndjson","content-type":"application/json"},body:e.body,signal:t.signal});if(!i.ok){let r=await i.text().catch(()=>""),s=`hd-cache2 batch request failed with status ${i.status}`;try{let a=r?JSON.parse(r):null;a&&typeof a=="object"&&"message"in a&&typeof a.message=="string"&&(s=a.message)}catch{}throw new xh("http_error",s)}await this.readBatchResponse(i,e)}catch(i){let r=i instanceof xh?i.reason:n?"transport_timeout":"transport_error";for(let s of e.items)s.singleSolveStarted||this.settleWithFallback(s,r,qZ(i))}finally{clearTimeout(o),this.stats.batchRequestsCompleted+=1}}prepareBatches(e){let t=new TextEncoder,n=this.cacheVersion===void 0?"":`,"cacheVersion":${JSON.stringify(this.cacheVersion)}`,o=`{"autorouterVersion":${JSON.stringify(this.autorouterVersion)}${n},"items":[`,i=t.encode(o+"]}").byteLength,r=[],s=[],a=[],c=i,l=()=>{a.length!==0&&(r.push({body:`${o}${a.map((d)=>d.serializedItem).join(",")}]}`,bodyBytes:c,items:a}),a=[],c=i)};for(let d of e){let u=t.encode(d.serializedItem).byteLength,h=a.length===0?0:1;i+u>xBt?(l(),s.push(d)):((a.length>=100||c+h+u>xBt)&&l(),a.push(d),c+=(a.length===1?0:1)+u)}return l(),{batches:r,singletonSolves:s}}},FVo="ordinary_then_regional_without_fixed_copper_v1",HVo=class extends VHe{autorouterVersion;hdCache2ServerUrl;hdCache2CacheVersion;requestTimeoutMs;hdCache2Client;launchedRemoteSolves=!1;waitingForRemoteNode=null;remoteRequestByNode=new Map;remoteResultByNode=new Map;logicallyTimedOutNodes=new Set;constructor({autorouterVersion:e,hdCache2ServerUrl:t,hdCache2CacheVersion:n,requestTimeoutMs:o,...i}){if(super(i),i.effort!==1)throw Error(`Pipeline9 networked high-density routing requires effort=1, received ${i.effort}`);if(this.requestTimeoutMs=o??30000,!Number.isFinite(this.requestTimeoutMs)||this.requestTimeoutMs<=0)throw Error(`Pipeline9 network request timeout must be a positive number, received ${this.requestTimeoutMs}`);this.autorouterVersion=e,this.hdCache2ServerUrl=t??XHe,this.hdCache2CacheVersion=n,this.hdCache2Client=new LVo(this.autorouterVersion,this.hdCache2ServerUrl,{cacheVersion:n}),this.pendingEffects=[],this.stats={...this.stats,remoteRequestsStarted:0,remoteRequestsCompleted:0,remoteBatchRequestsStarted:0,remoteBatchRequestsCompleted:0,remoteBatchItemsStarted:0,remoteBatchBodyBytesStarted:0,remoteBatchMaxBodyBytes:0,remoteBatchCacheMisses:0,remoteSingleRequestsStarted:0,remoteBatchInvalidLines:0,remoteBatchUnknownRequestIds:0,remoteBatchDuplicateRequestIds:0,remoteCacheHits:0,remoteSolverResults:0,remoteSolvedResults:0,remoteFailedResults:0,remoteOrdinaryResults:0,remoteRegionalFallbackResults:0,remoteRegionalFallbackResultsApplied:0,remoteRegionalFallbackResultsDeferredToLocal:0,remoteTransportFallbacks:0,remoteLogicalTimeoutFallbacks:0,remoteFallbackReasonCounts:{}}}getSolverName(){return"Pipeline9NetworkedHighDensitySolver"}async waitForAllRemoteRequests(){let e=[...this.remoteRequestByNode.values()];e.length!==0?(await Promise.all(e.map(({promise:t})=>t)),this.syncClientStats()):this.syncClientStats()}createNodeInput(e){let t=this.enableRegionalFallback?wVo({nodeWithPortPoints:e,connMap:this.connMap,obstacles:this.obstacles,obstacleMargin:this.obstacleMargin,traceWidth:this.traceWidth,viaDiameter:this.viaDiameter}):{connectivityNetMap:{},obstacles:[]},n=DVo({nodeWithPortPoints:e,connMap:this.connMap,colorMap:this.colorMap,obstacles:this.enableRegionalFallback?t.obstacles:this.obstacles,obstacleMargin:this.obstacleMargin,traceWidth:this.traceWidth,viaDiameter:this.viaDiameter});return{solvePolicy:FVo,enableRegionalFallback:this.enableRegionalFallback,nodeWithPortPoints:e,connectivityNetMap:TVo(n.connectivityNetMap,t.connectivityNetMap),colorMap:n.colorMap,viaDiameter:this.viaDiameter,traceWidth:this.traceWidth,obstacleMargin:this.obstacleMargin,effort:1,obstacles:n.obstacles,boardGeometry:this.boardGeometry,regionalObstacles:t.obstacles,layerCount:this.layerCount,nodePf:this.nodePfById.get(e.capacityMeshNodeId)??null}}syncClientStats(){let e=this.hdCache2Client.stats;this.stats.remoteBatchRequestsStarted=e.batchRequestsStarted,this.stats.remoteBatchRequestsCompleted=e.batchRequestsCompleted,this.stats.remoteBatchItemsStarted=e.batchItemsStarted,this.stats.remoteBatchBodyBytesStarted=e.batchBodyBytesStarted,this.stats.remoteBatchMaxBodyBytes=e.batchMaxBodyBytes,this.stats.remoteBatchCacheMisses=e.batchCacheMisses,this.stats.remoteSingleRequestsStarted=e.singleRequestsStarted,this.stats.remoteBatchInvalidLines=e.batchInvalidLines,this.stats.remoteBatchUnknownRequestIds=e.batchUnknownRequestIds,this.stats.remoteBatchDuplicateRequestIds=e.batchDuplicateRequestIds}recordFallbackReason(e){let t=this.stats.remoteFallbackReasonCounts;t[e]=(t[e]??0)+1}trackRemoteSolve(e,t){let n=performance.now()+this.requestTimeoutMs;this.stats.remoteRequestsStarted+=1;let o=t.then((i)=>{let r=this.logicallyTimedOutNodes.has(e);r||this.remoteResultByNode.set(e,i),i.kind==="remote"?(i.response.source==="cache"&&(this.stats.remoteCacheHits+=1),i.response.source==="solver"&&(this.stats.remoteSolverResults+=1),i.response.status==="solved"?this.stats.remoteSolvedResults+=1:this.stats.remoteFailedResults+=1):r||(this.stats.remoteTransportFallbacks+=1,this.recordFallbackReason(i.reason)),this.stats.remoteRequestsCompleted+=1,this.syncClientStats()});this.remoteRequestByNode.set(e,{promise:o,deadlineAt:n})}launchRemoteSolves(){let e=[],t=[...this.unsolvedNodePortPoints].reverse();for(let o of t)try{e.push({node:o,input:this.createNodeInput(o)})}catch(i){this.trackRemoteSolve(o,Promise.resolve({kind:"local-fallback",reason:"request_serialization_error",error:i instanceof Error?i.message:String(i)}))}let n=this.hdCache2Client.solveMany(e.map(({input:o})=>o));for(let[o,i]of n.entries())this.trackRemoteSolve(e[o].node,i);this.syncClientStats()}async waitForCurrentRemoteNode(e,t){let n=t.deadlineAt-performance.now();if(n<=0)return void this.recordLogicalTimeout(e);let o,i=await Promise.race([t.promise.then(()=>"request-settled"),new Promise((r)=>{o=setTimeout(()=>r("logical-timeout"),n)})]);o!==void 0&&clearTimeout(o),i==="logical-timeout"&&this.recordLogicalTimeout(e)}recordLogicalTimeout(e){this.logicallyTimedOutNodes.add(e),this.stats.remoteLogicalTimeoutFallbacks+=1,this.stats.remoteTransportFallbacks+=1,this.recordFallbackReason("logical_timeout")}startRegularSolver(e){let t=this.remoteResultByNode.get(e);if(!t){let n=this.remoteRequestByNode.get(e);if(n){this.waitingForRemoteNode=e;let o=this.waitForCurrentRemoteNode(e,n);o.then(()=>{this.waitingForRemoteNode===e&&(this.pendingEffects=[])});let i={name:`hd-cache2:${e.capacityMeshNodeId}`,promise:o};return void(this.pendingEffects=[i])}return void super.startRegularSolver(e)}this.applyRemoteResultToRegularNode(e,t)}applyRemoteResultToRegularNode(e,t){if(t.kind!=="local-fallback"){if(this.stats.regularNodeCount=Number(this.stats.regularNodeCount??0)+1,this.activeNode=e,t.response.solutionStage==="regional-fallback"){if(this.stats.remoteRegionalFallbackResults+=1,!this.canUseNoFixedCopperRegionalResult(e))return this.stats.remoteRegionalFallbackResultsDeferredToLocal+=1,void this.finishRegularSolverFailure(t.response.ordinaryFailure);this.stats.remoteRegionalFallbackResultsApplied+=1,this.stats.fallbackNodeCount=Number(this.stats.fallbackNodeCount??0)+1}else this.stats.remoteOrdinaryResults+=1;if(t.response.status==="failed")return this.error=t.response.error,this.failed=!0,void(this.activeNode=null);this.finishActiveNode(t.response.routes)}else super.startRegularSolver(e)}canUseNoFixedCopperRegionalResult(e){let t={...Uee(e,this.connMap),availableZ:Array.from({length:this.layerCount},(o,i)=>i)},n=Qte(t,this.getUpdatedFixedHdRoutes());return n.fixedRouteSectionsByConnectionName.size===0&&n.fixedObstacleRoutes.length===0}_step(){if(this.syncClientStats(),this.launchedRemoteSolves||(this.launchedRemoteSolves=!0,this.launchRemoteSolves()),this.waitingForRemoteNode){let e=this.waitingForRemoteNode;if(this.logicallyTimedOutNodes.has(e))return this.waitingForRemoteNode=null,this.pendingEffects=[],void super.startRegularSolver(e);let t=this.remoteResultByNode.get(e);if(!t)return;return this.waitingForRemoteNode=null,this.pendingEffects=[],void this.applyRemoteResultToRegularNode(e,t)}super._step()}},Ofe=class extends cne{hdCache2ServerUrl;hdCache2CacheVersion;getSolverName(){return"AutoroutingPipelineSolver9_Networked"}constructor(e,t={}){if(super(e,t),this.effort!==1)throw Error(`AutoroutingPipelineSolver9_Networked is only available at effort=1, received ${this.effort}`);this.hdCache2ServerUrl=t.hdCache2ServerUrl??XHe,this.hdCache2CacheVersion=t.hdCache2CacheVersion,this.replaceHighDensityPipelineStep()}replaceHighDensityPipelineStep(){let e=this.pipelineDef.findIndex((o)=>o.solverName==="highDensityRouteSolver"),t=this.pipelineDef[e];if(!t)throw Error("Pipeline9 highDensityRouteSolver step is missing");let n=t.getConstructorParams;this.pipelineDef[e]={...t,solverClass:HVo,getConstructorParams:(o)=>{let[i]=n(o);return[{...i,autorouterVersion:BVo,hdCache2ServerUrl:o.hdCache2ServerUrl,hdCache2CacheVersion:o.hdCache2CacheVersion}]}}}async stepAsync(){if(this.solved||this.failed)return;this.step();let e=DGt(this);e.length!==0&&(await Promise.race(e.map((t)=>t.promise.then(()=>t.name,()=>t.name))),this.solved||this.failed||this.step())}async solveAsync(){let e=Date.now();for(;!this.solved&&!this.failed;)await this.stepAsync();this.timeToSolve=Date.now()-e}async solveUntilPhaseAsync(e){for(;this.getCurrentPhase()!==e&&!this.solved&&!this.failed;)await this.stepAsync()}solve(){throw Error("AutoroutingPipelineSolver9_Networked requires async execution. Use solveAsync() or stepAsync().")}solveUntilPhase(e){throw Error("AutoroutingPipelineSolver9_Networked requires solveUntilPhaseAsync().")}};var AGr=globalThis.process?.env?.FANOUT_FLOW_DEBUG==="1";var OVo=class extends Js{constructor(e){super(),this.inputProblem=e,this.simplifiedRouteByTraceId=new Map(e.simplifiedHdRoutes.map((t)=>[t.connectionName,t])),this.MAX_ITERATIONS=e.preparedInput.preparedTraces.length+1}inputProblem;simplifiedRouteByTraceId;outputTraces=[];nextTraceIndex=0;getSolverName(){return"ApplyTraceSimplificationSolver"}_step(){let e=this.inputProblem.preparedInput.preparedTraces,t=e[this.nextTraceIndex];t?(this.outputTraces.push(this.applyTrace(t)),this.nextTraceIndex++,this.progress=this.nextTraceIndex/Math.max(1,e.length)):this.finishApplication()}applyTrace(e){if(!e.mutableHdRoute)return structuredClone(e.originalTrace);let t=this.simplifiedRouteByTraceId.get(e.originalTrace.pcb_trace_id);if(!t||e.uniformTraceWidth===void 0)throw Error(`Simplification removed trace "${e.originalTrace.pcb_trace_id}"`);let n=Ex(t,this.inputProblem.preparedInput.srj.layerCount,{defaultViaHoleDiameter:e.viaHoleDiameter,obstacles:this.inputProblem.preparedInput.srj.obstacles,connMap:this.inputProblem.preparedInput.connMap}),o=n.filter((r)=>r.route_type==="jumper"),i=((r,s)=>r.map((a)=>a.route_type==="wire"||a.route_type==="through_obstacle"?{...a,width:s}:a))([...structuredClone(e.leadingTerminalVias),...n.filter((r)=>r.route_type!=="jumper"),...structuredClone(e.trailingTerminalVias),...o],e.uniformTraceWidth);return((r,s)=>{let a=r.filter((c)=>c.route_type==="wire");s.startPcbPortId&&a[0]&&(a[0].start_pcb_port_id=s.startPcbPortId),s.endPcbPortId&&a.at(-1)&&(a.at(-1).end_pcb_port_id=s.endPcbPortId)})(i,t),{...structuredClone(e.originalTrace),route:i}}finishApplication(){let e=this.inputProblem.preparedInput.preparedTraces;this.stats={inputTraceCount:e.length,outputTraceCount:this.outputTraces.length,inputRoutePointCount:e.reduce((t,n)=>t+n.originalTrace.route.length,0),outputRoutePointCount:this.outputTraces.reduce((t,n)=>t+n.route.length,0)},this.progress=1,this.solved=!0}getConstructorParams(){return[this.inputProblem]}getOutput(){if(!this.solved)throw Error("Cannot get applied traces before conversion completes");return{...structuredClone(this.inputProblem.preparedInput.originalSrj),traces:structuredClone(this.outputTraces)}}},$Z=(e,t)=>{let n=e.at(-1);if(n&&(o=n,i=t,Math.abs(o.x-i.x)<=0.000000001&&Math.abs(o.y-i.y)<=0.000000001&&o.z===i.z))return t.traceThickness!==void 0&&(n.traceThickness=t.traceThickness),void(t.pcb_port_id!==void 0&&(n.pcb_port_id=t.pcb_port_id));var o,i;e.push(t)},zVo=(e,t,n)=>{for(let o=t+1;o<e.length;o++){let i=e[o];if(i.route_type==="wire")return Wi(i.layer,n);if(i.route_type==="through_obstacle")return Wi(i.from_layer,n)}},GVo=({fromZ:e,toZ:t,previousZ:n,nextZ:o})=>n===e?[e,t]:n===t?[t,e]:o===t?[e,t]:o===e?[t,e]:[e,t],YVo=(e,t)=>{for(let n of e)if(n.route_type==="via"&&n.via_diameter!==void 0)return n.via_diameter;return t},bBt=(e,t)=>{let n=t==="start"?e:[...e].reverse();for(let o of n){if(o.route_type!=="wire")continue;let i=t==="start"?o.start_pcb_port_id:o.end_pcb_port_id;if(i)return i}},VVo=(e)=>({route_type:"jumper",start:{...e.start},end:{...e.end},footprint:e.footprint}),UVo=(e,t)=>{for(let n of e.route)if(n.route_type==="via"&&n.via_hole_diameter!==void 0)return n.via_hole_diameter;return t},WVo=class extends Js{preparedInput;seenTraceIds=new Set;nextTraceIndex=0;constructor(e){super();let t=structuredClone(e.inputSrj),n=XE(t),o=x0(n);this.preparedInput={originalSrj:t,srj:n,connMap:o,colorMap:HA(n,o),immutableHdRoutes:[],mutableHdRoutes:[],netByConnectionName:new Map,options:{...e.options},preparedTraces:[]},this.MAX_ITERATIONS=(n.traces?.length??0)+1}getSolverName(){return"PrepareTraceSimplificationSolver"}_step(){let e=this.preparedInput.srj.traces??[],t=e[this.nextTraceIndex];if(!t)return this.stats={inputTraceCount:e.length,mutableTraceCount:this.preparedInput.mutableHdRoutes.length,immutableTraceCount:e.length-this.preparedInput.mutableHdRoutes.length},this.progress=1,void(this.solved=!0);this.prepareTrace(t,this.nextTraceIndex),this.nextTraceIndex++,this.progress=this.nextTraceIndex/Math.max(1,e.length)}prepareTrace(e,t){if(this.seenTraceIds.has(e.pcb_trace_id))throw Error(`Duplicate pcb_trace_id "${e.pcb_trace_id}"`);this.seenTraceIds.add(e.pcb_trace_id);let n=y0(this.preparedInput.srj),o=((u)=>{let h=u.route.flatMap((m)=>m.route_type==="wire"||m.route_type==="through_obstacle"?[m.width]:[]),A=h[0];if(A!==void 0&&!h.some((m)=>Math.abs(m-A)>0.000000001))return A})(e),{traceToSimplify:i,leadingTerminalVias:r,trailingTerminalVias:s}=((u)=>{let h=0;for(;u.route[h]?.route_type==="via";)h++;let A=u.route.length;for(;u.route[A-1]?.route_type==="jumper";)A--;let m=A;for(;m>h&&u.route[m-1]?.route_type==="via";)m--;return{traceToSimplify:{...u,route:[...u.route.slice(h,m),...u.route.slice(A)]},leadingTerminalVias:u.route.slice(0,h),trailingTerminalVias:u.route.slice(m,A)}})(e),a=this.preparedInput.connMap.getNetConnectedToId(e.connection_name)??e.connection_name,c=o===void 0?void 0:((u,h)=>{let A=[],m=[],p=[],g=((_,f)=>{for(let y of _)if(y.route_type==="wire"||y.route_type==="through_obstacle")return y.width;return f})(u.route,h.defaultTraceThickness);for(let _=0;_<u.route.length;_++){let f=u.route[_];if(f.route_type==="jumper"){p.push(VVo(f));continue}if(f.route_type==="wire"){$Z(A,{x:f.x,y:f.y,z:Wi(f.layer,h.layerCount),traceThickness:f.width,pcb_port_id:f.start_pcb_port_id??f.end_pcb_port_id});continue}let y=Wi(f.from_layer,h.layerCount),x=Wi(f.to_layer,h.layerCount),[C,I]=GVo({fromZ:y,toZ:x,previousZ:A.at(-1)?.z,nextZ:zVo(u.route,_,h.layerCount)});if(f.route_type==="via"){$Z(A,{x:f.x,y:f.y,z:C,traceThickness:g}),$Z(A,{x:f.x,y:f.y,z:I,traceThickness:g}),m.push({x:f.x,y:f.y});continue}let b=C===y,P=b?f.start:f.end,E=b?f.end:f.start;$Z(A,{...P,z:C,traceThickness:f.width,toNextSegmentType:"through_obstacle",...f.circuitJsonMetadata?{toNextSegmentCircuitJsonMetadata:f.circuitJsonMetadata}:{}}),$Z(A,{...E,z:I,traceThickness:f.width})}return{connectionName:u.pcb_trace_id,rootConnectionName:h.rootConnectionName,startPcbPortId:bBt(u.route,"start"),endPcbPortId:bBt(u.route,"end"),traceThickness:g,viaDiameter:YVo(u.route,h.defaultViaDiameter),route:A,vias:m,...p.length>0?{jumpers:p}:{}}})(i,{layerCount:this.preparedInput.srj.layerCount,defaultTraceThickness:o,defaultViaDiameter:n.padDiameter,rootConnectionName:a}),l=c&&c.route.length>=2?c:void 0;if(this.preparedInput.preparedTraces.push({originalTrace:e,mutableHdRoute:l,leadingTerminalVias:r,trailingTerminalVias:s,uniformTraceWidth:o,viaHoleDiameter:UVo(e,n.holeDiameter)}),!l)return void this.preparedInput.immutableHdRoutes.push(...E6(e,t,this.preparedInput.srj.layerCount,n.padDiameter,this.preparedInput.connMap));this.preparedInput.mutableHdRoutes.push(l),this.preparedInput.netByConnectionName.set(l.connectionName,a),this.preparedInput.colorMap[l.connectionName]=this.preparedInput.colorMap[a]??this.preparedInput.colorMap[e.connection_name]??"#2563eb";let d={...e,route:[...r,...s]};this.preparedInput.immutableHdRoutes.push(...E6(d,t,this.preparedInput.srj.layerCount,n.padDiameter,this.preparedInput.connMap))}getOutput(){if(!this.solved)throw Error("Cannot get prepared traces before preparation completes");return this.preparedInput}},XVo=class extends Js{constructor(e){super(),this.inputProblem=e;let t=e.preparedInput,n=y0(t.srj);this.traceSimplificationSolver=new HI({hdRoutes:t.mutableHdRoutes,otherHdRoutes:t.immutableHdRoutes,obstacles:t.srj.obstacles,connMap:t.connMap,colorMap:t.colorMap,outline:t.srj.outline,defaultViaDiameter:n.padDiameter,layerCount:t.srj.layerCount,minTraceToPadEdgeClearance:t.srj.minTraceToPadEdgeClearance,minBoardEdgeClearance:t.srj.minBoardEdgeClearance,netByConnectionName:t.netByConnectionName,enableCrossingViaReduction:t.options.enableCrossingViaReduction??!0,preserveRouteEndpoints:!0,useTraceWidthAwareClearance:!0,enableVertexShortcuts:t.options.enableVertexShortcuts??!0}),this.traceSimplificationSolver.MAX_SIMPLIFICATION_PIPELINE_LOOPS=t.options.iterations??2,this.activeSubSolver=this.traceSimplificationSolver,this.MAX_ITERATIONS=this.traceSimplificationSolver.MAX_ITERATIONS+1}inputProblem;traceSimplificationSolver;getSolverName(){return"TraceSimplificationStageSolver"}_step(){if(this.traceSimplificationSolver.step(),this.progress=this.traceSimplificationSolver.progress,this.stats={...this.traceSimplificationSolver.stats},this.traceSimplificationSolver.failed)return this.error=this.traceSimplificationSolver.error??"Trace simplification failed",this.failed=!0,void(this.activeSubSolver=null);this.traceSimplificationSolver.solved&&(this.progress=1,this.solved=!0,this.activeSubSolver=null)}getConstructorParams(){return[this.inputProblem]}getOutput(){if(!this.solved)throw Error("Cannot get simplified routes before cleanup completes");return structuredClone(this.traceSimplificationSolver.simplifiedHdRoutes)}visualize(){return this.traceSimplificationSolver.visualize()}preview(){return this.traceSimplificationSolver.preview()}},KVo=class extends Js{constructor(e){super(),this.inputProblem=e;let t=e.preparedInput;this.drcEngine=new Wte(t.srj,{connMap:t.connMap,traceClearance:t.srj.minTraceToPadEdgeClearance??0.1,viaClearance:0.1}),this.MAX_ITERATIONS=3}inputProblem;drcEngine;phase="baseline";baselineErrorCounts={};outputErrorCounts={};getSolverName(){return"ValidateTraceSimplificationSolver"}_step(){return this.phase==="baseline"?(this.baselineErrorCounts=this.evaluateErrorCounts(this.inputProblem.preparedInput.originalSrj),this.phase="output",void(this.progress=0.3333333333333333)):this.phase==="output"?(this.outputErrorCounts=this.evaluateErrorCounts(this.inputProblem.outputSrj),this.phase="compare",void(this.progress=0.6666666666666666)):(this.assertNoNewDrcErrors(),this.stats={baselineErrorCounts:this.baselineErrorCounts,outputErrorCounts:this.outputErrorCounts},this.progress=1,void(this.solved=!0))}evaluateErrorCounts(e){return((t)=>{let n={};for(let o of t.errors)n[o.type]=(n[o.type]??0)+1;return n})(this.drcEngine.evaluate(e.traces??[]))}assertNoNewDrcErrors(){let e=[...new Set([...Object.keys(this.baselineErrorCounts),...Object.keys(this.outputErrorCounts)])].filter((n)=>(this.outputErrorCounts[n]??0)>(this.baselineErrorCounts[n]??0));if(e.length===0)return;let t=e.map((n)=>`${n}: ${this.baselineErrorCounts[n]??0} -> ${this.outputErrorCounts[n]??0}`).join(", ");throw Error(`Pipeline 11 simplification introduced DRC errors (${t})`)}getConstructorParams(){return[this.inputProblem]}getOutput(){if(!this.solved)throw Error("Cannot get Pipeline 11 output before DRC validation");return structuredClone(this.inputProblem.outputSrj)}},QYt=class extends KE{prepareTraceSimplificationSolver;traceSimplificationStageSolver;applyTraceSimplificationSolver;validateTraceSimplificationSolver;pipelineDef=[bh("prepareTraceSimplificationSolver",WVo,(e)=>[{inputSrj:e.inputProblem.inputSrj,options:e.inputProblem.options}]),bh("traceSimplificationStageSolver",XVo,(e)=>[{preparedInput:e.prepareTraceSimplificationSolver.getOutput()}]),bh("applyTraceSimplificationSolver",OVo,(e)=>[{preparedInput:e.prepareTraceSimplificationSolver.getOutput(),simplifiedHdRoutes:e.traceSimplificationStageSolver.getOutput()}]),bh("validateTraceSimplificationSolver",KVo,(e)=>[{preparedInput:e.prepareTraceSimplificationSolver.getOutput(),outputSrj:e.applyTraceSimplificationSolver.getOutput()}])];constructor(e,t={}){if(t.iterations!==void 0&&(!Number.isInteger(t.iterations)||t.iterations<1))throw Error("Simplification iterations must be a positive integer");super({inputSrj:e,options:{...t}}),this.MAX_ITERATIONS=1e8}getSolverName(){return"AutoroutingPipelineSolver11_Simplification"}getConstructorParams(){return[this.inputProblem.inputSrj,this.inputProblem.options]}getOutput(){if(!this.validateTraceSimplificationSolver?.solved)throw Error("Pipeline 11 simplification has not solved yet");return this.validateTraceSimplificationSolver.getOutput()}getOutputSimpleRouteJson(){return this.getOutput()}getOutputSimplifiedPcbTraces(){return structuredClone(this.getOutput().traces??[])}initialVisualize(){return p1(this.inputProblem.inputSrj)}finalVisualize(){return p1(this.getOutput())}};var CU=0.000000001,fRe=(e)=>((t)=>t.route_type==="wire")(e)||((t)=>t.route_type==="via")(e)?e:((t)=>t.route_type==="through_obstacle")(e)&&Math.hypot(e.end.x-e.start.x,e.end.y-e.start.y)<=CU?{route_type:e.route_type,x:e.start.x,y:e.start.y,from_layer:e.from_layer,to_layer:e.to_layer,width:e.width}:null,jVo=(e,t)=>e.layer??t.layer??e.to_layer??t.from_layer??e.from_layer??t.to_layer??"top",qVo=(e,t,n)=>e.width??t.width??n,KY=(e,t,n,o,i)=>({x:e.x+(t.x-e.x)*n,y:e.y+(t.y-e.y)*n,layer:o,width:i}),SBt=(e,t)=>({...e,x:Math.abs(e.x-t.minX)<0.000001?t.minX:Math.abs(e.x-t.maxX)<0.000001?t.maxX:e.x,y:Math.abs(e.y-t.minY)<0.000001?t.minY:Math.abs(e.y-t.maxY)<0.000001?t.maxY:e.y}),PBt=({x:e,y:t,layer:n})=>({x:e,y:t,layer:n}),vBt=({x:e,y:t,layer:n,width:o})=>({route_type:"wire",x:e,y:t,layer:n,width:o}),JVo=(e,t,n)=>{let o=t.x-e.x,i=t.y-e.y,r=0,s=1,a=(c,l)=>{if(Math.abs(c)<CU)return l>=0;let d=l/c;if(c<0){if(d>s)return!1;d>r&&(r=d)}else{if(d<r)return!1;d<s&&(s=d)}return!0};return a(-o,e.x-n.minX)&&a(o,n.maxX-e.x)&&a(-i,e.y-n.minY)&&a(i,n.maxY-e.y)?{startT:r,endT:s}:null},EBt=(e,t)=>e.x>=t.minX-0.000001&&e.x<=t.maxX+0.000001&&e.y>=t.minY-0.000001&&e.y<=t.maxY+0.000001&&(Math.abs(e.x-t.minX)<=0.000001||Math.abs(e.x-t.maxX)<=0.000001||Math.abs(e.y-t.minY)<=0.000001||Math.abs(e.y-t.maxY)<=0.000001),yRe=(e,t,n,o,i)=>{var r,s;(r=o,s=i,Math.hypot(r.x-s.x,r.y-s.y)<=CU)||e.push({type:"pcb_trace",pcb_trace_id:`${t.pcb_trace_id}_keep_${n}`,connection_name:t.connection_name,route:[vBt(o),vBt(i)]})},MBt=({obstacleId:e,start:t,end:n,layer:o,width:i})=>{let r=n.x-t.x,s=n.y-t.y,a=Math.hypot(r,s);return a>i+CU?null:{obstacleId:e,type:"rect",layers:[o],center:{x:(t.x+n.x)/2,y:(t.y+n.y)/2},width:a,height:i,ccwRotationDegrees:180*Math.atan2(s,r)/Math.PI,connectedTo:[]}},BBt=({connection:e,point:t,endpointIndex:n})=>({obstacleId:`${e.name}_route_endpoint_${n}`,type:"rect",layers:[t.layer],center:{x:t.x,y:t.y},width:t.width,height:t.width,connectedTo:[e.name,e.__rootConnectionNames?.[0]??e.name]}),wBt=({trace:e,ripIndex:t,start:n,end:o,region:i,allowInteriorStart:r,allowInteriorEnd:s})=>{if(!r&&!EBt(n,i)||!s&&!EBt(o,i))return null;let a=(({trace:c,ripIndex:l,start:d,end:u})=>({name:`${c.connection_name}_reroute_${c.pcb_trace_id}_${l}`,__rootConnectionNames:[c.connection_name],pointsToConnect:[PBt(d),PBt(u)]}))({trace:e,ripIndex:t,start:n,end:o});return{connection:a,endpointObstacles:[BBt({connection:a,point:n,endpointIndex:0}),BBt({connection:a,point:o,endpointIndex:1})]}},$Vo=(e,t,n)=>{let o=[],i=[],r=[],s=[],a=null,c=!1,l=0,d=!1;for(let u=0;u<e.route.length-1;u++){let h=fRe(e.route[u]),A=fRe(e.route[u+1]);if(!h||!A)return null;let m=jVo(h,A),p=qVo(h,A,n),g=JVo(h,A,t),_=KY(h,A,0,m,p),f=KY(h,A,1,m,p),y=u===0;if(!g){yRe(o,e,l++,_,f);continue}if(d=!0,g.startT>CU){let b=KY(h,A,g.startT,m,p),P=MBt({obstacleId:`${e.pcb_trace_id}_keep_${l}_bounds`,start:_,end:b,layer:m,width:p});P&&s.push(P),yRe(o,e,l++,_,b)}let x=KY(h,A,g.endT,m,p),C=SBt(KY(h,A,g.startT,m,p),t),I=SBt(KY(h,A,g.endT,m,p),t);if(a||(a=C,c=y&&g.startT<=CU),g.endT<0.999999999){let b=wBt({trace:e,ripIndex:i.length,start:a,end:I,region:t,allowInteriorStart:c});b&&(i.push(b.connection),r.push(...b.endpointObstacles)),a=null,c=!1;let P=MBt({obstacleId:`${e.pcb_trace_id}_keep_${l}_bounds`,start:x,end:f,layer:m,width:p});P&&s.push(P),yRe(o,e,l++,x,f)}}if(a){let u=e.route.slice().reverse().map(fRe).find((h)=>Boolean(h));if(u){let h=wBt({trace:e,ripIndex:i.length,start:a,end:{x:u.x,y:u.y,layer:u.layer??u.from_layer??a.layer,width:a.width},region:t,allowInteriorStart:c,allowInteriorEnd:!0});h&&(i.push(h.connection),r.push(...h.endpointObstacles))}}return{keptTraces:o,rerouteConnections:i,rerouteEndpointObstacles:r,clippedTraceSegmentObstacles:s,hadIntersection:d}},kYt=(e,t)=>{let n=structuredClone(e),o=[],i=[],r=[],s=[];for(let c of e.traces??[]){let l=$Vo(c,t,e.minTraceWidth);l?l.hadIntersection?(o.push(...l.keptTraces),i.push(...l.rerouteConnections),r.push(...l.rerouteEndpointObstacles),s.push(...l.clippedTraceSegmentObstacles)):o.push(structuredClone(c)):o.push(structuredClone(c))}let a=((c,l)=>{let d={minX:c.minX,maxX:c.maxX,minY:c.minY,maxY:c.maxY};for(let u of l){let h=mr(u);d.minX=Math.min(d.minX,h.minX),d.maxX=Math.max(d.maxX,h.maxX),d.minY=Math.min(d.minY,h.minY),d.maxY=Math.max(d.maxY,h.maxY)}return d})(t,[...r,...s]);return{...n,bounds:a,obstacles:[...n.obstacles,...r],traces:o,connections:i}},LYt=(e,t)=>{let n=new Map(t.connections.map((i)=>[i.name,i.__rootConnectionNames?.[0]??i.name])),o=(t.traces??[]).map((i)=>{let r=n.get(i.connection_name);return r?{...structuredClone(i),connection_name:r}:structuredClone(i)});return{...structuredClone(e),traces:o,jumpers:t.jumpers?structuredClone(t.jumpers):structuredClone(e.jumpers)}};/*! Bundled license information:
is-buffer/index.js:
(*!
* Determine if an object is a Buffer
*
* @author Feross Aboukhadijeh <https://feross.org>
* @license MIT
*)
deep-rename-keys/index.js:
(*!
* deep-rename-keys <https://github.com/jonschlinkert/deep-rename-keys>
*
* Copyright (c) 2015 Jon Schlinkert, contributors.
* Licensed under the MIT license.
*)
@tscircuit/checks/dist/index.js:
(*! Bundled license information:
@tscircuit/circuit-json-pcb-style-analysis/dist/index.js:
(*!
* Determine if an object is a Buffer
*
* @author Feross Aboukhadijeh <https://feross.org>
* @license MIT
*)
*)
@tscircuit/curvy-trace-solver/dist/index.js:
@tscircuit/find-convex-regions/dist/index.js:
(*! Bundled license information:
is-buffer/index.js:
(*!
* Determine if an object is a Buffer
*
* @author Feross Aboukhadijeh <https://feross.org>
* @license MIT
*)
deep-rename-keys/index.js:
(*!
* deep-rename-keys <https://github.com/jonschlinkert/deep-rename-keys>
*
* Copyright (c) 2015 Jon Schlinkert, contributors.
* Licensed under the MIT license.
*)
*)
@tscircuit/hypergraph/dist/index.js:
(*! Bundled license information:
@tscircuit/find-convex-regions/dist/index.js:
(*! Bundled license information:
is-buffer/index.js:
(*!
* Determine if an object is a Buffer
*
* @author Feross Aboukhadijeh <https://feross.org>
* @license MIT
*)
deep-rename-keys/index.js:
(*!
* deep-rename-keys <https://github.com/jonschlinkert/deep-rename-keys>
*
* Copyright (c) 2015 Jon Schlinkert, contributors.
* Licensed under the MIT license.
*)
*)
*)
*/Gt();qa();var fW=Rt(l0(),1);Gt();Gt();async function ZVo(e={}){var t,n=e,o=!!globalThis.window,i=!!globalThis.WorkerGlobalScope,r=globalThis.process?.versions?.node&&globalThis.process?.type!="renderer";if(r){let{createRequire:Ge}=await import("node:module");var s=Ge(import.meta.url)}var a=!1;n.setup=function(){if(a)return;a=!0,n.initTBB();function Ge(zt,An,Un=(ao)=>ao){if(An)for(let ao of An)zt.push_back(Un(ao));return zt}function nt(zt,An=(Un)=>Un){let Un=[],ao=zt.size();for(let $i=0;$i<ao;$i++)Un.push(An(zt.get($i)));return Un}function It(zt,An=(Un)=>Un){let Un=[],ao=zt.size();for(let $i=0;$i<ao;$i++){let vs=zt.get($i),Vr=vs.size(),Us=[];for(let Nl=0;Nl<Vr;Nl++)Us.push(An(vs.get(Nl)));Un.push(Us)}return Un}function Wt(zt){if(zt[0].length<3)zt=[zt];return Ge(new n.Vector2_vec2,zt,(An)=>Ge(new n.Vector_vec2,An,(Un)=>{if(Un instanceof Array)return{x:Un[0],y:Un[1]};return Un}))}function dn(zt){for(let An=0;An<zt.size();An++)zt.get(An).delete();zt.delete()}function yn(zt){if(zt[0]instanceof Array)return{x:zt[0][0],y:zt[0][1]};if(typeof zt[0]=="number")return{x:zt[0]||0,y:zt[1]||0};return zt[0]}function Sn(zt){if(zt[0]instanceof Array)return{x:zt[0][0],y:zt[0][1],z:zt[0][2]};if(typeof zt[0]=="number")return{x:zt[0]||0,y:zt[1]||0,z:zt[2]||0};return zt[0]}function Jn(zt){return zt=="EvenOdd"?0:zt=="NonZero"?1:zt=="Negative"?3:2}function Io(zt){return zt=="Round"?1:zt=="Miter"?2:0}let Vo=n.CrossSection;function yi(zt,An="Positive"){if(zt instanceof Vo)return zt;else{let Un=Wt(zt),ao=new Vo(Un,Jn(An));return dn(Un),ao}}n.CrossSection.prototype.translate=function(...zt){return this._Translate(yn(zt))},n.CrossSection.prototype.scale=function(zt){if(typeof zt=="number")return this._Scale({x:zt,y:zt});return this._Scale(yn([zt]))},n.CrossSection.prototype.mirror=function(zt){return this._Mirror(yn([zt]))},n.CrossSection.prototype.warp=function(zt){let An=ch(function(ao){let $i=Ee(ao,"double"),vs=Ee(ao+8,"double"),Vr=[$i,vs];zt(Vr),be(ao,Vr[0],"double"),be(ao+8,Vr[1],"double")},"vi"),Un=this._Warp(An);return s_(An),Un},n.CrossSection.prototype.decompose=function(){let zt=this._Decompose(),An=nt(zt);return zt.delete(),An},n.CrossSection.prototype.bounds=function(){let zt=this._Bounds();return{min:["x","y"].map((An)=>zt.min[An]),max:["x","y"].map((An)=>zt.max[An])}},n.CrossSection.prototype.offset=function(zt,An="Round",Un=2,ao=0){return this._Offset(zt,Io(An),Un,ao)},n.CrossSection.prototype.simplify=function(zt=0.000001){return this._Simplify(zt)},n.CrossSection.prototype.extrude=function(zt,An=0,Un=0,ao=[1,1],$i=!1){ao=yn([ao]);let vs=n._Extrude(this._ToPolygons(),zt,An,Un,ao);return $i?vs.translate([0,0,-zt/2]):vs},n.CrossSection.prototype.revolve=function(zt=0,An=360){return n._Revolve(this._ToPolygons(),zt,An)},n.CrossSection.prototype.add=function(zt){return this._add(yi(zt))},n.CrossSection.prototype.subtract=function(zt){return this._subtract(yi(zt))},n.CrossSection.prototype.intersect=function(zt){return this._intersect(yi(zt))},n.CrossSection.prototype.toPolygons=function(){let zt=this._ToPolygons(),An=It(zt,(Un)=>[Un.x,Un.y]);return zt.delete(),An},n.Manifold.prototype.smoothOut=function(zt=52.5,An=0){return this._SmoothOut(zt,An)},n.Manifold.prototype.warp=function(zt){let An=ch(function($i){let vs=Ee($i,"double"),Vr=Ee($i+8,"double"),Us=Ee($i+16,"double"),Nl=[vs,Vr,Us];zt(Nl),be($i,Nl[0],"double"),be($i+8,Nl[1],"double"),be($i+16,Nl[2],"double")},"vi"),Un=this._Warp(An);s_(An);let ao=Un.status();if(ao!=="NoError")throw new n.ManifoldError(ao);return Un},n.Manifold.prototype.warpBatch=function(zt){let An=ch(function($i,vs){let Vr=n.HEAPF64??F;if(!Vr)throw Error("WASM heap is not initialized (HEAPF64 unavailable)");let Us=new Float64Array(Vr.buffer,$i,vs*3);zt(Us,vs)},"vii"),Un=this._WarpBatch(An);s_(An);let ao=Un.status();if(ao!=="NoError")throw new n.ManifoldError(ao);return Un},n.Manifold.prototype.calculateNormals=function(zt=0,An=52.5){return this._CalculateNormals(zt,An)},n.Manifold.prototype.smoothByNormals=function(zt=0){return this._SmoothByNormals(zt)},n.Manifold.prototype.setProperties=function(zt,An){let Un=this.numProp(),ao=ch(function(vs,Vr,Us){let Nl=[];for(let Vc=0;Vc<zt;++Vc)Nl[Vc]=Ee(vs+8*Vc,"double");let up=[];for(let Vc=0;Vc<3;++Vc)up[Vc]=Ee(Vr+8*Vc,"double");let hp=[];for(let Vc=0;Vc<Un;++Vc)hp[Vc]=Ee(Us+8*Vc,"double");An(Nl,up,hp);for(let Vc=0;Vc<zt;++Vc)be(vs+8*Vc,Nl[Vc],"double")},"viii"),$i=this._SetProperties(zt,ao);return s_(ao),$i},n.Manifold.prototype.translate=function(...zt){return this._Translate(Sn(zt))},n.Manifold.prototype.rotate=function(zt,An,Un){if(Array.isArray(zt))return this._Rotate(...zt);else return this._Rotate(zt,An||0,Un||0)},n.Manifold.prototype.scale=function(zt){if(typeof zt=="number")return this._Scale({x:zt,y:zt,z:zt});return this._Scale(Sn([zt]))},n.Manifold.prototype.mirror=function(zt){return this._Mirror(Sn([zt]))},n.Manifold.prototype.trimByPlane=function(zt,An=0){return this._TrimByPlane(Sn([zt]),An)},n.Manifold.prototype.slice=function(zt=0){let An=this._Slice(zt),Un=new Vo(An,Jn("Positive"));return dn(An),Un},n.Manifold.prototype.project=function(){let zt=this._Project(),An=new Vo(zt,Jn("Positive"));return dn(zt),An},n.Manifold.prototype.rayCast=function(zt,An){let Un=this._RayCast(Sn([zt]),Sn([An])),ao=nt(Un,($i)=>({faceID:$i.faceID,distance:$i.distance,position:["x","y","z"].map((vs)=>$i.position[vs]),normal:["x","y","z"].map((vs)=>$i.normal[vs])}));return Un.delete(),ao},n.Manifold.prototype.split=function(zt){let An=this._Split(zt),Un=nt(An);return An.delete(),Un},n.Manifold.prototype.splitByPlane=function(zt,An=0){let Un=this._SplitByPlane(Sn([zt]),An),ao=nt(Un);return Un.delete(),ao},n.Manifold.prototype.decompose=function(){let zt=this._Decompose(),An=nt(zt);return zt.delete(),An},n.Manifold.prototype.boundingBox=function(){let zt=this._boundingBox();return{min:["x","y","z"].map((An)=>zt.min[An]),max:["x","y","z"].map((An)=>zt.max[An])}},n.Manifold.prototype.simplify=function(zt=0){return this._Simplify(zt)};class Ss{constructor({numProp:zt=3,triVerts:An=new Uint32Array,vertProperties:Un=new Float32Array,mergeFromVert:ao,mergeToVert:$i,runIndex:vs,runOriginalID:Vr,faceID:Us,halfedgeTangent:Nl,runTransform:up,runFlags:hp,tolerance:Vc=0}={}){this.numProp=zt,this.triVerts=An,this.vertProperties=Un,this.mergeFromVert=ao,this.mergeToVert=$i,this.runIndex=vs,this.runOriginalID=Vr,this.faceID=Us,this.halfedgeTangent=Nl,this.runTransform=up,this.runFlags=hp,this.tolerance=Vc}get numTri(){return this.triVerts.length/3}get numVert(){return this.vertProperties.length/this.numProp}get numRun(){return this.runOriginalID.length}merge(){let{changed:zt,mesh:An}=n._Merge(this);return Object.assign(this,{...An}),zt}verts(zt){return this.triVerts.subarray(3*zt,3*(zt+1))}position(zt){return this.vertProperties.subarray(this.numProp*zt,this.numProp*zt+3)}extras(zt){return this.vertProperties.subarray(this.numProp*zt+3,this.numProp*(zt+1))}tangent(zt){return this.halfedgeTangent.subarray(4*zt,4*(zt+1))}transform(zt){let An=Array(16);for(let Un of[0,1,2,3])for(let ao of[0,1,2])An[4*Un+ao]=this.runTransform[12*zt+3*Un+ao];return An[15]=1,An}backside(zt){return this.runFlags!=null&&zt<this.runFlags.length&&(this.runFlags[zt]&1)!==0}hasNormals(zt){return this.runFlags!=null&&zt<this.runFlags.length&&(this.runFlags[zt]&2)!==0}}n.Mesh=Ss,n.Manifold.prototype.getMesh=function(zt=-1){return new Ss(this._GetMeshJS(zt))},n.ManifoldError=function(An,...Un){let ao="Unknown error";switch(An){case"NonFiniteVertex":ao="Non-finite vertex";break;case"NotManifold":ao="Not manifold";break;case"VertexOutOfBounds":ao="Vertex index out of bounds";break;case"PropertiesWrongLength":ao="Properties have wrong length";break;case"MissingPositionProperties":ao="Less than three properties";break;case"MergeVectorsDifferentLengths":ao="Merge vectors have different lengths";break;case"MergeIndexOutOfBounds":ao="Merge index out of bounds";break;case"TransformWrongLength":ao="Transform vector has wrong length";break;case"RunIndexWrongLength":ao="Run index vector has wrong length";break;case"FaceIDWrongLength":ao="Face ID vector has wrong length";break;case"InvalidConstruction":ao="Manifold constructed with invalid parameters";break;case"ResultTooLarge":ao="Result exceeds maximum size";break;case"InvalidTangents":ao="Invalid halfedge tangents";break}let $i=Error.apply(this,[ao,...Un]);$i.name=this.name="ManifoldError",this.message=$i.message,this.stack=$i.stack,this.code=An},n.ManifoldError.prototype=Object.create(Error.prototype,{constructor:{value:n.ManifoldError,writable:!0,configurable:!0}}),n.CrossSection=function(zt,An="Positive"){let Un=Wt(zt),ao=new Vo(Un,Jn(An));return dn(Un),ao},n.CrossSection.ofPolygons=function(zt,An="Positive"){return new n.CrossSection(zt,An)},n.CrossSection.square=function(...zt){let An=void 0;if(zt.length==0)An={x:1,y:1};else if(typeof zt[0]=="number")An={x:zt[0],y:zt[0]};else An=yn(zt);let Un=zt[1]||!1;return n._Square(An,Un)},n.CrossSection.circle=function(zt,An=0){return n._Circle(zt,An)};function Vs(zt){return function(...An){if(An.length==1)An=An[0];let Un=new n.Vector_crossSection;for(let $i of An)Un.push_back(yi($i));let ao=n["_crossSection"+zt](Un);return Un.delete(),ao}}n.CrossSection.compose=Vs("Compose"),n.CrossSection.union=Vs("UnionN"),n.CrossSection.difference=Vs("DifferenceN"),n.CrossSection.intersection=Vs("IntersectionN");function _s(zt,An){Ge(zt,An,(Un)=>{if(Un instanceof Array)return{x:Un[0],y:Un[1]};return Un})}n.CrossSection.hull=function(...zt){if(zt.length==1)zt=zt[0];let An=new n.Vector_vec2;for(let ao of zt)if(ao instanceof Vo)n._crossSectionCollectVertices(An,ao);else if(ao instanceof Array&&ao.length==2&&typeof ao[0]=="number")An.push_back({x:ao[0],y:ao[1]});else if(ao.x)An.push_back(ao);else{let vs=ao[0].length==2&&typeof ao[0][0]=="number"||ao[0].x?[ao]:ao;for(let Vr of vs)_s(An,Vr)}let Un=n._crossSectionHullPoints(An);return An.delete(),Un},n.CrossSection.prototype=Object.create(Vo.prototype),Object.defineProperty(n.CrossSection,Symbol.hasInstance,{get:()=>(zt)=>zt instanceof Vo});let Ps=n.Manifold;n.Manifold=function(zt){let An=new Ps(zt),Un=An.status();if(Un!=="NoError")throw new n.ManifoldError(Un);return An},n.Manifold.ofMesh=function(zt){return new n.Manifold(zt)},n.Manifold.tetrahedron=function(){return n._Tetrahedron()},n.Manifold.cube=function(...zt){let An=void 0;if(zt.length==0)An={x:1,y:1,z:1};else if(typeof zt[0]=="number")An={x:zt[0],y:zt[0],z:zt[0]};else An=Sn(zt);let Un=zt[1]||!1;return n._Cube(An,Un)},n.Manifold.cylinder=function(zt,An,Un=-1,ao=0,$i=!1){return n._Cylinder(zt,An,Un,ao,$i)},n.Manifold.sphere=function(zt,An=0){return n._Sphere(zt,An)},n.Manifold.smooth=function(zt,An=[]){let Un=new n.Vector_smoothness;Ge(Un,An);let ao=n._Smooth(zt,Un);return Un.delete(),ao},n.Manifold.extrude=function(zt,An,Un=0,ao=0,$i=[1,1],vs=!1){return(zt instanceof Vo?zt:n.CrossSection(zt,"Positive")).extrude(An,Un,ao,$i,vs)},n.Manifold.revolve=function(zt,An=0,Un=360){return(zt instanceof Vo?zt:n.CrossSection(zt,"Positive")).revolve(An,Un)},n.Manifold.reserveIDs=function(zt){return n._ReserveIDs(zt)};function Qa(zt){return function(...An){if(An.length==1)An=An[0];let Un=new n.Vector_manifold;for(let $i of An)Un.push_back($i);let ao=n["_manifold"+zt+"N"](Un);return Un.delete(),ao}}n.Manifold.union=Qa("Union"),n.Manifold.compose=n.Manifold.union,n.Manifold.difference=Qa("Difference"),n.Manifold.intersection=Qa("Intersection"),n.Manifold.levelSet=function(zt,An,Un,ao=0,$i=-1){let vs={min:{x:An.min[0],y:An.min[1],z:An.min[2]},max:{x:An.max[0],y:An.max[1],z:An.max[2]}},Vr=ch(function(Nl){let up=Ee(Nl,"double"),hp=Ee(Nl+8,"double"),Vc=Ee(Nl+16,"double");return zt([up,hp,Vc])},"di"),Us=n._LevelSet(Vr,vs,Un,ao,$i);return s_(Vr),Us},n.ExecutionContext.prototype.fromMesh=function(zt){return this._FromMesh(zt)},n.ExecutionContext.prototype.smooth=function(zt,An=[]){let Un=new n.Vector_smoothness;Ge(Un,An);let ao=this._Smooth(zt,Un);return Un.delete(),ao},n.ExecutionContext.prototype.levelSet=function(zt,An,Un,ao=0,$i=-1){let vs={min:{x:An.min[0],y:An.min[1],z:An.min[2]},max:{x:An.max[0],y:An.max[1],z:An.max[2]}},Vr=ch(function(Nl){let up=Ee(Nl,"double"),hp=Ee(Nl+8,"double"),Vc=Ee(Nl+16,"double");return zt([up,hp,Vc])},"di"),Us=this._LevelSet(Vr,vs,Un,ao,$i);return s_(Vr),Us};function e0(zt,An){Ge(zt,An,(Un)=>{if(Un instanceof Array)return{x:Un[0],y:Un[1],z:Un[2]};return Un})}n.Manifold.hull=function(...zt){if(zt.length==1)zt=zt[0];let An=new n.Vector_vec3;for(let ao of zt)if(ao instanceof Ps)n._manifoldCollectVertices(An,ao);else if(ao instanceof Array&&ao.length==3&&typeof ao[0]=="number")An.push_back({x:ao[0],y:ao[1],z:ao[2]});else if(ao.x)An.push_back(ao);else e0(An,ao);let Un=n._manifoldHullPoints(An);return An.delete(),Un},n.Manifold.prototype=Object.create(Ps.prototype),Object.defineProperty(n.Manifold,Symbol.hasInstance,{get:()=>(zt)=>zt instanceof Ps}),n.triangulate=function(zt,An=-1,Un=!0){let ao=Wt(zt),$i=nt(n._Triangulate(ao,An,Un),(vs)=>[vs[0],vs[1],vs[2]]);return dn(ao),$i}};var c=[],l="./this.program",d=(Ge,nt)=>{throw nt},u=import.meta.url,h="";function A(Ge){if(n.locateFile)return n.locateFile(Ge,h);return h+Ge}var m,p;if(r){var g=s("node:fs");if(u.startsWith("file:"))h=s("node:path").dirname(s("node:url").fileURLToPath(u))+"/";if(p=(Ge)=>{Ge=C(Ge)?new URL(Ge):Ge;var nt=g.readFileSync(Ge);return nt},m=async(Ge,nt=!0)=>{Ge=C(Ge)?new URL(Ge):Ge;var It=g.readFileSync(Ge,nt?void 0:"utf8");return It},process.argv.length>1)l=process.argv[1].replace(/\\/g,"/");c=process.argv.slice(2),d=(Ge,nt)=>{throw process.exitCode=Ge,nt}}else if(o||i){try{h=new URL(".",u).href}catch{}{if(i)p=(Ge)=>{var nt=new XMLHttpRequest;return nt.open("GET",Ge,!1),nt.responseType="arraybuffer",nt.send(null),new Uint8Array(nt.response)};m=async(Ge)=>{if(C(Ge))return new Promise((It,Wt)=>{var dn=new XMLHttpRequest;dn.open("GET",Ge,!0),dn.responseType="arraybuffer",dn.onload=()=>{if(dn.status==200||dn.status==0&&dn.response){It(dn.response);return}Wt(dn.status)},dn.onerror=Wt,dn.send(null)});var nt=await fetch(Ge,{credentials:"same-origin"});if(nt.ok)return nt.arrayBuffer();throw Error(nt.status+" : "+nt.url)}}}var _=console.log.bind(console),f=console.error.bind(console),y,x=!1,C=(Ge)=>Ge.startsWith("file://"),I,b,P,E,B,w,T,Q,N,F,H,z,Y=!1;function U(){var Ge=uf.buffer;P=new Int8Array(Ge),B=new Int16Array(Ge),E=new Uint8Array(Ge),w=new Uint16Array(Ge),T=new Int32Array(Ge),Q=new Uint32Array(Ge),N=new Float32Array(Ge),F=new Float64Array(Ge),H=new BigInt64Array(Ge),z=new BigUint64Array(Ge)}function X(){if(n.preRun){if(typeof n.preRun=="function")n.preRun=[n.preRun];while(n.preRun.length)Pe(n.preRun.shift())}he(_e)}function V(){Y=!0,A2.J()}function W(){if(n.postRun){if(typeof n.postRun=="function")n.postRun=[n.postRun];while(n.postRun.length)Ae(n.postRun.shift())}he(ue)}function j(Ge){n.onAbort?.(Ge),Ge="Aborted("+Ge+")",f(Ge),x=!0,Ge+=". Build with -sASSERTIONS for more info.";var nt=new WebAssembly.RuntimeError(Ge);throw b?.(nt),nt}var q;function ne(){if(n.locateFile)return A("manifold.wasm");return new URL("manifold.wasm",import.meta.url).href}function ce(Ge){if(Ge==q&&y)return new Uint8Array(y);if(p)return p(Ge);throw"both async and sync fetching of the wasm failed"}async function oe(Ge){if(!y)try{var nt=await m(Ge);return new Uint8Array(nt)}catch{}return ce(Ge)}async function ie(Ge,nt){try{var It=await oe(Ge),Wt=await WebAssembly.instantiate(It,nt);return Wt}catch(dn){f(`failed to asynchronously prepare wasm: ${dn}`),j(dn)}}async function J(Ge,nt,It){if(!Ge&&!C(nt)&&!r)try{var Wt=fetch(nt,{credentials:"same-origin"}),dn=await WebAssembly.instantiateStreaming(Wt,It);return dn}catch(yn){f(`wasm streaming compile failed: ${yn}`),f("falling back to ArrayBuffer instantiation")}return ie(nt,It)}function ee(){var Ge={a:h4};return Ge}async function se(){function Ge(yn,Sn){return A2=yn.exports,A2=p2(A2),Nu(A2),U(),A2}function nt(yn){return Ge(yn.instance)}var It=ee();if(n.instantiateWasm)return new Promise((yn,Sn)=>{n.instantiateWasm(It,(Jn,Io)=>{yn(Ge(Jn,Io))})});q??=ne();var Wt=await J(y,q,It),dn=nt(Wt);return dn}class le{name="ExitStatus";constructor(Ge){this.message=`Program terminated with exit(${Ge})`,this.status=Ge}}var he=(Ge)=>{while(Ge.length>0)Ge.shift()(n)},ue=[],Ae=(Ge)=>ue.push(Ge),_e=[],Pe=(Ge)=>_e.push(Ge);function Ee(Ge,nt="i8"){if(nt.endsWith("*"))nt="*";switch(nt){case"i1":return P[Ge>>>0];case"i8":return P[Ge>>>0];case"i16":return B[Ge>>>1>>>0];case"i32":return T[Ge>>>2>>>0];case"i64":return H[Ge>>>3>>>0];case"float":return N[Ge>>>2>>>0];case"double":return F[Ge>>>3>>>0];case"*":return Q[Ge>>>2>>>0];default:j(`invalid type for getValue: ${nt}`)}}var Te=!0;function be(Ge,nt,It="i8"){if(It.endsWith("*"))It="*";switch(It){case"i1":P[Ge>>>0]=nt;break;case"i8":P[Ge>>>0]=nt;break;case"i16":B[Ge>>>1>>>0]=nt;break;case"i32":T[Ge>>>2>>>0]=nt;break;case"i64":H[Ge>>>3>>>0]=BigInt(nt);break;case"float":N[Ge>>>2>>>0]=nt;break;case"double":F[Ge>>>3>>>0]=nt;break;case"*":Q[Ge>>>2>>>0]=nt;break;default:j(`invalid type for setValue: ${It}`)}}class me{constructor(Ge){this.excPtr=Ge,this.ptr=Ge-24}set_type(Ge){Q[this.ptr+4>>>2>>>0]=Ge}get_type(){return Q[this.ptr+4>>>2>>>0]}set_destructor(Ge){Q[this.ptr+8>>>2>>>0]=Ge}get_destructor(){return Q[this.ptr+8>>>2>>>0]}set_caught(Ge){Ge=Ge?1:0,P[this.ptr+12>>>0]=Ge}get_caught(){return P[this.ptr+12>>>0]!=0}set_rethrown(Ge){Ge=Ge?1:0,P[this.ptr+13>>>0]=Ge}get_rethrown(){return P[this.ptr+13>>>0]!=0}init(Ge,nt){this.set_adjusted_ptr(0),this.set_type(Ge),this.set_destructor(nt)}set_adjusted_ptr(Ge){Q[this.ptr+16>>>2>>>0]=Ge}get_adjusted_ptr(){return Q[this.ptr+16>>>2>>>0]}}var ye=0,Ce=0;function ve(Ge,nt,It){Ge>>>=0,nt>>>=0,It>>>=0;var Wt=new me(Ge);throw Wt.init(nt,It),ye=Ge,Ce++,ye}var De=()=>j(""),Ze={},st=(Ge)=>{while(Ge.length){var nt=Ge.pop(),It=Ge.pop();It(nt)}};function et(Ge){return this.fromWireType(Q[Ge>>>2>>>0])}var lt={},it={},gt={},wt=class extends Error{constructor(nt){super(nt);this.name="InternalError"}},Dt=(Ge)=>{throw new wt(Ge)},vt=(Ge,nt,It)=>{Ge.forEach((Jn)=>gt[Jn]=nt);function Wt(Jn){var Io=It(Jn);if(Io.length!==Ge.length)Dt("Mismatched type converter count");for(var Vo=0;Vo<Ge.length;++Vo)Je(Ge[Vo],Io[Vo])}var dn=Array(nt.length),yn=[],Sn=0;for(let[Jn,Io]of nt.entries())if(it.hasOwnProperty(Io))dn[Jn]=it[Io];else{if(yn.push(Io),!lt.hasOwnProperty(Io))lt[Io]=[];lt[Io].push(()=>{if(dn[Jn]=it[Io],++Sn,Sn===yn.length)Wt(dn)})}if(yn.length===0)Wt(dn)},Ht=function(Ge){Ge>>>=0;var nt=Ze[Ge];delete Ze[Ge];var{rawConstructor:It,rawDestructor:Wt,fields:dn}=nt,yn=dn.map((Sn)=>Sn.getterReturnType).concat(dn.map((Sn)=>Sn.setterArgumentType));vt([Ge],yn,(Sn)=>{var Jn={};for(var[Io,Vo]of dn.entries()){let yi=Sn[Io],{getter:Ss,getterContext:Vs}=Vo,_s=Sn[Io+dn.length],{setter:Ps,setterContext:Qa}=Vo;Jn[Vo.fieldName]={read:(e0)=>yi.fromWireType(Ss(Vs,e0)),write:(e0,zt)=>{var An=[];Ps(Qa,e0,_s.toWireType(An,zt)),st(An)},optional:yi.optional}}return[{name:nt.name,fromWireType:(yi)=>{var Ss={};for(var Vs in Jn)Ss[Vs]=Jn[Vs].read(yi);return Wt(yi),Ss},toWireType:(yi,Ss)=>{for(var Vs in Jn)if(!(Vs in Ss)&&!Jn[Vs].optional)throw TypeError(`Missing field: "${Vs}"`);var _s=It();for(Vs in Jn)Jn[Vs].write(_s,Ss[Vs]);if(yi!==null)yi.push(Wt,_s);return _s},readValueFromPointer:et,destructorFunction:Wt}]})},Xt=(Ge)=>{Ge>>>=0;var nt="";while(!0){var It=E[Ge++>>>0];if(!It)return nt;nt+=String.fromCharCode(It)}},ut=class extends Error{constructor(nt){super(nt);this.name="BindingError"}},je=(Ge)=>{throw new ut(Ge)};function Re(Ge,nt,It={}){var Wt=nt.name;if(!Ge)je(`type "${Wt}" must have a positive integer typeid pointer`);if(it.hasOwnProperty(Ge))if(It.ignoreDuplicateRegistrations)return;else je(`Cannot register type '${Wt}' twice`);if(it[Ge]=nt,delete gt[Ge],lt.hasOwnProperty(Ge)){var dn=lt[Ge];delete lt[Ge],dn.forEach((yn)=>yn())}}function Je(Ge,nt,It={}){return Re(Ge,nt,It)}var Ve=(Ge,nt,It)=>{switch(nt){case 1:return It?(Wt)=>P[Wt>>>0]:(Wt)=>E[Wt>>>0];case 2:return It?(Wt)=>B[Wt>>>1>>>0]:(Wt)=>w[Wt>>>1>>>0];case 4:return It?(Wt)=>T[Wt>>>2>>>0]:(Wt)=>Q[Wt>>>2>>>0];case 8:return It?(Wt)=>H[Wt>>>3>>>0]:(Wt)=>z[Wt>>>3>>>0];default:throw TypeError(`invalid integer width (${nt}): ${Ge}`)}},Ye=function(Ge,nt,It,Wt,dn){Ge>>>=0,nt>>>=0,It>>>=0,nt=Xt(nt);let yn=Wt===0n,Sn=(Jn)=>Jn;if(yn){let Jn=It*8;Sn=(Io)=>BigInt.asUintN(Jn,Io),dn=Sn(dn)}Je(Ge,{name:nt,fromWireType:Sn,toWireType:(Jn,Io)=>{if(typeof Io=="number")Io=BigInt(Io);return Io},readValueFromPointer:Ve(nt,It,!yn),destructorFunction:null})};function mt(Ge,nt,It,Wt){Ge>>>=0,nt>>>=0,nt=Xt(nt),Je(Ge,{name:nt,fromWireType:function(dn){return!!dn},toWireType:function(dn,yn){return yn?It:Wt},readValueFromPointer:function(dn){return this.fromWireType(E[dn>>>0])},destructorFunction:null})}var ft=(Ge)=>({count:Ge.count,deleteScheduled:Ge.deleteScheduled,preservePointerOnDelete:Ge.preservePointerOnDelete,ptr:Ge.ptr,ptrType:Ge.ptrType,smartPtr:Ge.smartPtr,smartPtrType:Ge.smartPtrType}),Oe=(Ge)=>{function nt(It){return It.$$.ptrType.registeredClass.name}je(nt(Ge)+" instance already deleted")},qe=!1,rt=(Ge)=>{},Ct=(Ge)=>{if(Ge.smartPtr)Ge.smartPtrType.rawDestructor(Ge.smartPtr);else Ge.ptrType.registeredClass.rawDestructor(Ge.ptr)},Mt=(Ge)=>{Ge.count.value-=1;var nt=Ge.count.value===0;if(nt)Ct(Ge)},Nt=(Ge)=>{if(!globalThis.FinalizationRegistry)return Nt=(nt)=>nt,Ge;return qe=new FinalizationRegistry((nt)=>{Mt(nt.$$)}),Nt=(nt)=>{var It=nt.$$,Wt=!!It.smartPtr;if(Wt){var dn={$$:It};qe.register(nt,dn,nt)}return nt},rt=(nt)=>qe.unregister(nt),Nt(Ge)},Ot=[],mn=()=>{while(Ot.length){var Ge=Ot.pop();Ge.$$.deleteScheduled=!1,Ge.delete()}},ln,Cn=()=>{let Ge=vn.prototype;Object.assign(Ge,{isAliasOf(It){if(!(this instanceof vn))return!1;if(!(It instanceof vn))return!1;var Wt=this.$$.ptrType.registeredClass,dn=this.$$.ptr;It.$$=It.$$;var yn=It.$$.ptrType.registeredClass,Sn=It.$$.ptr;while(Wt.baseClass)dn=Wt.upcast(dn),Wt=Wt.baseClass;while(yn.baseClass)Sn=yn.upcast(Sn),yn=yn.baseClass;return Wt===yn&&dn===Sn},clone(){if(!this.$$.ptr)Oe(this);if(this.$$.preservePointerOnDelete)return this.$$.count.value+=1,this;else{var It=Nt(Object.create(Object.getPrototypeOf(this),{$$:{value:ft(this.$$)}}));return It.$$.count.value+=1,It.$$.deleteScheduled=!1,It}},delete(){if(!this.$$.ptr)Oe(this);if(this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete)je("Object already scheduled for deletion");if(rt(this),Mt(this.$$),!this.$$.preservePointerOnDelete)this.$$.smartPtr=void 0,this.$$.ptr=void 0},isDeleted(){return!this.$$.ptr},deleteLater(){if(!this.$$.ptr)Oe(this);if(this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete)je("Object already scheduled for deletion");if(Ot.push(this),Ot.length===1&&ln)ln(mn);return this.$$.deleteScheduled=!0,this}});let nt=Symbol.dispose;if(nt)Ge[nt]=Ge.delete};function vn(){}var nn=(Ge,nt)=>Object.defineProperty(nt,"name",{value:Ge}),on={},Kn=(Ge,nt,It)=>{if(Ge[nt].overloadTable===void 0){var Wt=Ge[nt];Ge[nt]=function(...dn){if(!Ge[nt].overloadTable.hasOwnProperty(dn.length))je(`Function '${It}' called with an invalid number of arguments (${dn.length}) - expects one of (${Ge[nt].overloadTable})!`);return Ge[nt].overloadTable[dn.length].apply(this,dn)},Ge[nt].overloadTable=[],Ge[nt].overloadTable[Wt.argCount]=Wt}},xo=(Ge,nt,It)=>{if(n.hasOwnProperty(Ge)){if(It===void 0||n[Ge].overloadTable!==void 0&&n[Ge].overloadTable[It]!==void 0)je(`Cannot register public name '${Ge}' twice`);if(Kn(n,Ge,Ge),n[Ge].overloadTable.hasOwnProperty(It))je(`Cannot register multiple overloads of a function with the same number of arguments (${It})!`);n[Ge].overloadTable[It]=nt}else n[Ge]=nt,n[Ge].argCount=It},ai=48,At=57,_t=(Ge)=>{Ge=Ge.replace(/[^a-zA-Z0-9_]/g,"$");var nt=Ge.charCodeAt(0);if(nt>=ai&&nt<=At)return`_${Ge}`;return Ge};function Tt(Ge,nt,It,Wt,dn,yn,Sn,Jn){this.name=Ge,this.constructor=nt,this.instancePrototype=It,this.rawDestructor=Wt,this.baseClass=dn,this.getActualType=yn,this.upcast=Sn,this.downcast=Jn,this.pureVirtualFunctions=[]}var Ut=(Ge,nt,It)=>{while(nt!==It){if(!nt.upcast)je(`Expected null or instance of ${It.name}, got an instance of ${nt.name}`);Ge=nt.upcast(Ge),nt=nt.baseClass}return Ge},Lt=(Ge)=>{if(Ge===null)return"null";var nt=typeof Ge;if(nt==="object"||nt==="array"||nt==="function")return Ge.toString();else return""+Ge};function fn(Ge,nt){if(nt===null){if(this.isReference)je(`null is not a valid ${this.name}`);return 0}if(!nt.$$)je(`Cannot pass "${Lt(nt)}" as a ${this.name}`);if(!nt.$$.ptr)je(`Cannot pass deleted object as a pointer of type ${this.name}`);var It=nt.$$.ptrType.registeredClass,Wt=Ut(nt.$$.ptr,It,this.registeredClass);return Wt}function On(Ge,nt){var It;if(nt===null){if(this.isReference)je(`null is not a valid ${this.name}`);if(this.isSmartPointer){if(It=this.rawConstructor(),Ge!==null)Ge.push(this.rawDestructor,It);return It}else return 0}if(!nt||!nt.$$)je(`Cannot pass "${Lt(nt)}" as a ${this.name}`);if(!nt.$$.ptr)je(`Cannot pass deleted object as a pointer of type ${this.name}`);if(!this.isConst&&nt.$$.ptrType.isConst)je(`Cannot convert argument of type ${nt.$$.smartPtrType?nt.$$.smartPtrType.name:nt.$$.ptrType.name} to parameter type ${this.name}`);var Wt=nt.$$.ptrType.registeredClass;if(It=Ut(nt.$$.ptr,Wt,this.registeredClass),this.isSmartPointer){if(nt.$$.smartPtr===void 0)je("Passing raw pointer to smart pointer is illegal");switch(this.sharingPolicy){case 0:if(nt.$$.smartPtrType===this)It=nt.$$.smartPtr;else je(`Cannot convert argument of type ${nt.$$.smartPtrType?nt.$$.smartPtrType.name:nt.$$.ptrType.name} to parameter type ${this.name}`);break;case 1:It=nt.$$.smartPtr;break;case 2:if(nt.$$.smartPtrType===this)It=nt.$$.smartPtr;else{var dn=nt.clone();if(It=this.rawShare(It,zi.toHandle(()=>dn.delete())),Ge!==null)Ge.push(this.rawDestructor,It)}break;default:je("Unsupported sharing policy")}}return It}function Gn(Ge,nt){if(nt===null){if(this.isReference)je(`null is not a valid ${this.name}`);return 0}if(!nt.$$)je(`Cannot pass "${Lt(nt)}" as a ${this.name}`);if(!nt.$$.ptr)je(`Cannot pass deleted object as a pointer of type ${this.name}`);if(nt.$$.ptrType.isConst)je(`Cannot convert argument of type ${nt.$$.ptrType.name} to parameter type ${this.name}`);var It=nt.$$.ptrType.registeredClass,Wt=Ut(nt.$$.ptr,It,this.registeredClass);return Wt}var fo=(Ge,nt,It)=>{if(nt===It)return Ge;if(It.baseClass===void 0)return null;var Wt=fo(Ge,nt,It.baseClass);if(Wt===null)return null;return It.downcast(Wt)},Ho={},Vn=(Ge,nt)=>{if(nt===void 0)je("ptr should not be undefined");while(Ge.baseClass)nt=Ge.upcast(nt),Ge=Ge.baseClass;return nt},Wn=(Ge,nt)=>(nt=Vn(Ge,nt),Ho[nt]),Co=(Ge,nt)=>{if(!nt.ptrType||!nt.ptr)Dt("makeClassHandle requires ptr and ptrType");var It=!!nt.smartPtrType,Wt=!!nt.smartPtr;if(It!==Wt)Dt("Both smartPtrType and smartPtr must be specified");return nt.count={value:1},Nt(Object.create(Ge,{$$:{value:nt,writable:!0}}))};function Eo(Ge){var nt=this.getPointee(Ge);if(!nt)return this.destructor(Ge),null;var It=Wn(this.registeredClass,nt);if(It!==void 0)if(It.$$.count.value===0)return It.$$.ptr=nt,It.$$.smartPtr=Ge,It.clone();else{var Wt=It.clone();return this.destructor(Ge),Wt}function dn(){if(this.isSmartPointer)return Co(this.registeredClass.instancePrototype,{ptrType:this.pointeeType,ptr:nt,smartPtrType:this,smartPtr:Ge});else return Co(this.registeredClass.instancePrototype,{ptrType:this,ptr:Ge})}var yn=this.registeredClass.getActualType(nt),Sn=on[yn];if(!Sn)return dn.call(this);var Jn;if(this.isConst)Jn=Sn.constPointerType;else Jn=Sn.pointerType;var Io=fo(nt,this.registeredClass,Jn.registeredClass);if(Io===null)return dn.call(this);if(this.isSmartPointer)return Co(Jn.registeredClass.instancePrototype,{ptrType:Jn,ptr:Io,smartPtrType:this,smartPtr:Ge});else return Co(Jn.registeredClass.instancePrototype,{ptrType:Jn,ptr:Io})}var In=()=>{Object.assign(eo.prototype,{getPointee(Ge){if(this.rawGetPointee)Ge=this.rawGetPointee(Ge);return Ge},destructor(Ge){this.rawDestructor?.(Ge)},readValueFromPointer:et,fromWireType:Eo})};function eo(Ge,nt,It,Wt,dn,yn,Sn,Jn,Io,Vo,yi){if(this.name=Ge,this.registeredClass=nt,this.isReference=It,this.isConst=Wt,this.isSmartPointer=dn,this.pointeeType=yn,this.sharingPolicy=Sn,this.rawGetPointee=Jn,this.rawConstructor=Io,this.rawShare=Vo,this.rawDestructor=yi,!dn&&nt.baseClass===void 0)if(Wt)this.toWireType=fn,this.destructorFunction=null;else this.toWireType=Gn,this.destructorFunction=null;else this.toWireType=On}var co=(Ge,nt,It)=>{if(!n.hasOwnProperty(Ge))Dt("Replacing nonexistent public symbol");if(n[Ge].overloadTable!==void 0&&It!==void 0)n[Ge].overloadTable[It]=nt;else n[Ge]=nt,n[Ge].argCount=It},$n=(Ge)=>hf.get(Ge),zo=(Ge,nt,It=[],Wt=!1)=>{var dn=$n(nt),yn=dn(...It);function Sn(Jn){return Ge[0]=="p"?Jn>>>0:Jn}return Sn(yn)},qo=(Ge,nt,It=!1)=>(...Wt)=>zo(Ge,nt,Wt,It),fi=(Ge,nt,It=!1)=>{Ge=Xt(Ge);function Wt(){if(Ge.includes("p"))return qo(Ge,nt,It);var yn=$n(nt);return yn}var dn=Wt();if(typeof dn!="function")je(`unknown function pointer with signature ${Ge}: ${nt}`);return dn};class Nr extends Error{}var bs=(Ge)=>{var nt=Zh(Ge),It=Xt(nt);return pl(nt),It},Fs=(Ge,nt)=>{var It=[],Wt={};function dn(yn){if(Wt[yn])return;if(it[yn])return;if(gt[yn]){gt[yn].forEach(dn);return}It.push(yn),Wt[yn]=!0}throw nt.forEach(dn),new Nr(`${Ge}: `+It.map(bs).join([", "]))};function wo(Ge,nt,It,Wt,dn,yn,Sn,Jn,Io,Vo,yi,Ss,Vs){Ge>>>=0,nt>>>=0,It>>>=0,Wt>>>=0,dn>>>=0,yn>>>=0,Sn>>>=0,Jn>>>=0,Io>>>=0,Vo>>>=0,yi>>>=0,Ss>>>=0,Vs>>>=0,yi=Xt(yi),yn=fi(dn,yn),Jn&&=fi(Sn,Jn),Vo&&=fi(Io,Vo),Vs=fi(Ss,Vs);var _s=_t(yi);xo(_s,function(){Fs(`Cannot construct ${yi} due to unbound types`,[Wt])}),vt([Ge,nt,It],Wt?[Wt]:[],(Ps)=>{Ps=Ps[0];var Qa,e0;if(Wt)Qa=Ps.registeredClass,e0=Qa.instancePrototype;else e0=vn.prototype;var zt=nn(yi,function(...Vr){if(Object.getPrototypeOf(this)!==An)throw new ut(`Use 'new' to construct ${yi}`);if(Un.constructor_body===void 0)throw new ut(`${yi} has no accessible constructor`);var Us=Un.constructor_body[Vr.length];if(Us===void 0)throw new ut(`Tried to invoke ctor of ${yi} with invalid number of parameters (${Vr.length}) - expected (${Object.keys(Un.constructor_body).toString()}) parameters instead!`);return Us.apply(this,Vr)}),An=Object.create(e0,{constructor:{value:zt}});zt.prototype=An;var Un=new Tt(yi,zt,An,Vs,Qa,yn,Jn,Vo);if(Un.baseClass)Un.baseClass.__derivedClasses??=[],Un.baseClass.__derivedClasses.push(Un);var ao=new eo(yi,Un,!0,!1,!1),$i=new eo(yi+"*",Un,!1,!1,!1),vs=new eo(yi+" const*",Un,!1,!0,!1);return on[Ge]={pointerType:$i,constPointerType:vs},co(_s,zt),[ao,$i,vs]})}var wr=(Ge,nt)=>{var It=[];for(var Wt=0;Wt<Ge;Wt++)It.push(Q[nt+Wt*4>>>2>>>0]);return It};function dr(Ge){for(var nt=1;nt<Ge.length;++nt)if(Ge[nt]!==null&&Ge[nt].destructorFunction===void 0)return!0;return!1}function Yr(Ge,nt,It,Wt){var dn=dr(Ge),yn=Ge.length-2,Sn=[],Jn=["fn"];if(nt)Jn.push("thisWired");for(var Io=0;Io<yn;++Io)Sn.push(`arg${Io}`),Jn.push(`arg${Io}Wired`);Sn=Sn.join(","),Jn=Jn.join(",");var Vo=`return function (${Sn}) {
`;if(dn)Vo+=`var destructors = [];
`;var yi=dn?"destructors":"null",Ss=["humanName","throwBindingError","invoker","fn","runDestructors","fromRetWire","toClassParamWire"];if(nt)Vo+=`var thisWired = toClassParamWire(${yi}, this);
`;for(var Io=0;Io<yn;++Io){var Vs=`toArg${Io}Wire`;Vo+=`var arg${Io}Wired = ${Vs}(${yi}, arg${Io});
`,Ss.push(Vs)}if(Vo+=(It||Wt?"var rv = ":"")+`invoker(${Jn});
`,dn)Vo+=`runDestructors(destructors);
`;else for(var Io=nt?1:2;Io<Ge.length;++Io){var _s=Io===1?"thisWired":"arg"+(Io-2)+"Wired";if(Ge[Io].destructorFunction!==null)Vo+=`${_s}_dtor(${_s});
`,Ss.push(`${_s}_dtor`)}if(It)Vo+=`var ret = fromRetWire(rv);
return ret;
`;return Vo+=`}
`,Function(Ss,Vo)}function mc(Ge,nt,It,Wt,dn,yn){var Sn=nt.length;if(Sn<2)je("argTypes array size mismatch! Must at least get return value and 'this' types!");var Jn=nt[1]!==null&&It!==null,Io=dr(nt),Vo=!nt[0].isVoid,yi=nt[0],Ss=nt[1],Vs=[Ge,je,Wt,dn,st,yi.fromWireType.bind(yi),Ss?.toWireType.bind(Ss)];for(var _s=2;_s<Sn;++_s){var Ps=nt[_s];Vs.push(Ps.toWireType.bind(Ps))}if(!Io){for(var _s=Jn?1:2;_s<nt.length;++_s)if(nt[_s].destructorFunction!==null)Vs.push(nt[_s].destructorFunction)}var e0=Yr(nt,Jn,Vo,yn)(...Vs);return nn(Ge,e0)}var zc=function(Ge,nt,It,Wt,dn,yn){Ge>>>=0,It>>>=0,Wt>>>=0,dn>>>=0,yn>>>=0;var Sn=wr(nt,It);dn=fi(Wt,dn),vt([],[Ge],(Jn)=>{Jn=Jn[0];var Io=`constructor ${Jn.name}`;if(Jn.registeredClass.constructor_body===void 0)Jn.registeredClass.constructor_body=[];if(Jn.registeredClass.constructor_body[nt-1]!==void 0)throw new ut(`Cannot register multiple constructors with identical number of parameters (${nt-1}) for class '${Jn.name}'! Overload resolution is currently only performed using the parameter count, not actual type info!`);return Jn.registeredClass.constructor_body[nt-1]=()=>{Fs(`Cannot construct ${Jn.name} due to unbound types`,Sn)},vt([],Sn,(Vo)=>(Vo.splice(1,0,null),Jn.registeredClass.constructor_body[nt-1]=mc(Io,Vo,null,dn,yn),[])),[]})},nc=(Ge)=>{Ge=Ge.trim();let nt=Ge.indexOf("(");if(nt===-1)return Ge;return Ge.slice(0,nt)},Bd=function(Ge,nt,It,Wt,dn,yn,Sn,Jn,Io,Vo){Ge>>>=0,nt>>>=0,Wt>>>=0,dn>>>=0,yn>>>=0,Sn>>>=0;var yi=wr(It,Wt);nt=Xt(nt),nt=nc(nt),yn=fi(dn,yn,Io),vt([],[Ge],(Ss)=>{Ss=Ss[0];var Vs=`${Ss.name}.${nt}`;if(nt.startsWith("@@"))nt=Symbol[nt.substring(2)];if(Jn)Ss.registeredClass.pureVirtualFunctions.push(nt);function _s(){Fs(`Cannot call ${Vs} due to unbound types`,yi)}var Ps=Ss.registeredClass.instancePrototype,Qa=Ps[nt];if(Qa===void 0||Qa.overloadTable===void 0&&Qa.className!==Ss.name&&Qa.argCount===It-2)_s.argCount=It-2,_s.className=Ss.name,Ps[nt]=_s;else Kn(Ps,nt,Vs),Ps[nt].overloadTable[It-2]=_s;return vt([],yi,(e0)=>{var zt=mc(Vs,e0,Ss,yn,Sn,Io);if(Ps[nt].overloadTable===void 0)zt.argCount=It-2,Ps[nt]=zt;else Ps[nt].overloadTable[It-2]=zt;return[]}),[]})},Mh=[],Wo=[0,1,,1,null,1,!0,1,!1,1];function Ti(Ge){if(Ge>>>=0,Ge>9&&--Wo[Ge+1]===0)Wo[Ge]=void 0,Mh.push(Ge)}var zi={toValue:(Ge)=>{if(!Ge)je(`Cannot use deleted val. handle = ${Ge}`);return Wo[Ge]},toHandle:(Ge)=>{switch(Ge){case void 0:return 2;case null:return 4;case!0:return 6;case!1:return 8;default:{let nt=Mh.pop()||Wo.length;return Wo[nt]=Ge,Wo[nt+1]=1,nt}}}},el={name:"emscripten::val",fromWireType:(Ge)=>{var nt=zi.toValue(Ge);return Ti(Ge),nt},toWireType:(Ge,nt)=>zi.toHandle(nt),readValueFromPointer:et,destructorFunction:null};function Gc(Ge){return Ge>>>=0,Je(Ge,el)}var wd=(Ge,nt,It)=>{switch(nt){case 1:return It?function(Wt){return this.fromWireType(P[Wt>>>0])}:function(Wt){return this.fromWireType(E[Wt>>>0])};case 2:return It?function(Wt){return this.fromWireType(B[Wt>>>1>>>0])}:function(Wt){return this.fromWireType(w[Wt>>>1>>>0])};case 4:return It?function(Wt){return this.fromWireType(T[Wt>>>2>>>0])}:function(Wt){return this.fromWireType(Q[Wt>>>2>>>0])};default:throw TypeError(`invalid integer width (${nt}): ${Ge}`)}};function sf(Ge){return Ge===0?"object":Ge===1?"number":"string"}function B0(Ge,nt,It,Wt,dn){Ge>>>=0,nt>>>=0,It>>>=0,nt=Xt(nt);let yn=sf(dn);switch(yn){case"object":{let Vo=function(){};Vo.values={},Je(Ge,{name:nt,constructor:Vo,valueType:yn,fromWireType:function(yi){return this.constructor.values[yi]},toWireType:(yi,Ss)=>Ss.value,readValueFromPointer:wd(nt,It,Wt),destructorFunction:null}),xo(nt,Vo);break}case"number":{var Sn={};Je(Ge,{name:nt,keysMap:Sn,valueType:yn,fromWireType:(Vo)=>Vo,toWireType:(Vo,yi)=>yi,readValueFromPointer:wd(nt,It,Wt),destructorFunction:null}),xo(nt,Sn),delete n[nt].argCount;break}case"string":{var Jn={},Io={},Sn={};Je(Ge,{name:nt,valuesMap:Jn,reverseMap:Io,keysMap:Sn,valueType:yn,fromWireType:function(yi){return this.reverseMap[yi]},toWireType:function(yi,Ss){return this.valuesMap[Ss]},readValueFromPointer:wd(nt,It,Wt),destructorFunction:null}),xo(nt,Sn),delete n[nt].argCount;break}}}var Hs=(Ge,nt)=>{var It=it[Ge];if(It===void 0)je(`${nt} has unknown type ${bs(Ge)}`);return It};function sh(Ge,nt,It){Ge>>>=0,nt>>>=0;var Wt=Hs(Ge,"enum");switch(nt=Xt(nt),Wt.valueType){case"object":{var dn=Wt.constructor,yn=Object.create(Wt.constructor.prototype,{value:{value:It},constructor:{value:nn(`${Wt.name}_${nt}`,function(){})}});dn.values[It]=yn,dn[nt]=yn;break}case"number":{Wt.keysMap[nt]=It;break}case"string":{Wt.valuesMap[nt]=It,Wt.reverseMap[It]=nt,Wt.keysMap[nt]=nt;break}}}var w0=(Ge,nt)=>{switch(nt){case 4:return function(It){return this.fromWireType(N[It>>>2>>>0])};case 8:return function(It){return this.fromWireType(F[It>>>3>>>0])};default:throw TypeError(`invalid float width (${nt}): ${Ge}`)}},tu=function(Ge,nt,It){Ge>>>=0,nt>>>=0,It>>>=0,nt=Xt(nt),Je(Ge,{name:nt,fromWireType:(Wt)=>Wt,toWireType:(Wt,dn)=>dn,readValueFromPointer:w0(nt,It),destructorFunction:null})};function wu(Ge,nt,It,Wt,dn,yn,Sn,Jn){Ge>>>=0,It>>>=0,Wt>>>=0,dn>>>=0,yn>>>=0;var Io=wr(nt,It);Ge=Xt(Ge),Ge=nc(Ge),dn=fi(Wt,dn,Sn),xo(Ge,function(){Fs(`Cannot call ${Ge} due to unbound types`,Io)},nt-1),vt([],Io,(Vo)=>{var yi=[Vo[0],null].concat(Vo.slice(1));return co(Ge,mc(Ge,yi,null,dn,yn,Sn),nt-1),[]})}var Rr=function(Ge,nt,It,Wt,dn){Ge>>>=0,nt>>>=0,It>>>=0,nt=Xt(nt);let yn=Wt===0,Sn=(Io)=>Io;if(yn){var Jn=32-8*It;Sn=(Io)=>Io<<Jn>>>Jn,dn=Sn(dn)}Je(Ge,{name:nt,fromWireType:Sn,toWireType:(Io,Vo)=>Vo,readValueFromPointer:Ve(nt,It,Wt!==0),destructorFunction:null})},Yc=(Ge,nt,It)=>{let Wt=(dn,yn)=>{let Sn=0;return{next(){if(Sn>=dn)return{done:!0};let Jn=Sn;return Sn++,{value:yn(Jn),done:!1}},[Symbol.iterator](){return this}}};if(!Ge[Symbol.iterator])Ge[Symbol.iterator]=function(){let dn=this[nt]();return Wt(dn,(yn)=>this[It](yn))}},Ns=function(Ge,nt,It,Wt){Ge>>>=0,nt>>>=0,It>>>=0,Wt>>>=0,It=Xt(It),Wt=Xt(Wt),vt([],[Ge,nt],(dn)=>{let yn=dn[0];return Yc(yn.registeredClass.instancePrototype,It,Wt),[]})};function ja(Ge,nt,It){Ge>>>=0,It>>>=0;var Wt=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array,BigInt64Array,BigUint64Array],dn=Wt[nt];function yn(Sn){var Jn=Q[Sn>>>2>>>0],Io=Q[Sn+4>>>2>>>0];return new dn(P.buffer,Io,Jn)}It=Xt(It),Je(Ge,{name:It,fromWireType:yn,readValueFromPointer:yn},{ignoreDuplicateRegistrations:!0})}var Rs=Object.assign({optional:!0},el);function Vi(Ge,nt){Ge>>>=0,nt>>>=0,Je(Ge,Rs)}var xa=(Ge,nt,It,Wt)=>{if(It>>>=0,!(Wt>0))return 0;var dn=It,yn=It+Wt-1;for(var Sn=0;Sn<Ge.length;++Sn){var Jn=Ge.codePointAt(Sn);if(Jn<=127){if(It>=yn)break;nt[It++>>>0]=Jn}else if(Jn<=2047){if(It+1>=yn)break;nt[It++>>>0]=192|Jn>>6,nt[It++>>>0]=128|Jn&63}else if(Jn<=65535){if(It+2>=yn)break;nt[It++>>>0]=224|Jn>>12,nt[It++>>>0]=128|Jn>>6&63,nt[It++>>>0]=128|Jn&63}else{if(It+3>=yn)break;nt[It++>>>0]=240|Jn>>18,nt[It++>>>0]=128|Jn>>12&63,nt[It++>>>0]=128|Jn>>6&63,nt[It++>>>0]=128|Jn&63,Sn++}}return nt[It>>>0]=0,It-dn},Tl=(Ge,nt,It)=>xa(Ge,E,nt,It),cs=(Ge)=>{var nt=0;for(var It=0;It<Ge.length;++It){var Wt=Ge.charCodeAt(It);if(Wt<=127)nt++;else if(Wt<=2047)nt+=2;else if(Wt>=55296&&Wt<=57343)nt+=4,++It;else nt+=3}return nt},Td=globalThis.TextDecoder&&new TextDecoder,Dl=(Ge,nt,It,Wt)=>{var dn=nt+It;if(Wt)return dn;while(Ge[nt]&&!(nt>=dn))++nt;return nt},Dd=(Ge,nt=0,It,Wt)=>{nt>>>=0;var dn=Dl(Ge,nt,It,Wt);if(dn-nt>16&&Ge.buffer&&Td)return Td.decode(Ge.subarray(nt,dn));var yn="";while(nt<dn){var Sn=Ge[nt++];if(!(Sn&128)){yn+=String.fromCharCode(Sn);continue}var Jn=Ge[nt++]&63;if((Sn&224)==192){yn+=String.fromCharCode((Sn&31)<<6|Jn);continue}var Io=Ge[nt++]&63;if((Sn&240)==224)Sn=(Sn&15)<<12|Jn<<6|Io;else Sn=(Sn&7)<<18|Jn<<12|Io<<6|Ge[nt++]&63;if(Sn<65536)yn+=String.fromCharCode(Sn);else{var Vo=Sn-65536;yn+=String.fromCharCode(55296|Vo>>10,56320|Vo&1023)}}return yn},tA=(Ge,nt,It)=>(Ge>>>=0,Ge?Dd(E,Ge,nt,It):"");function Tu(Ge,nt){Ge>>>=0,nt>>>=0,nt=Xt(nt);var It=!0;Je(Ge,{name:nt,fromWireType(Wt){var dn=Q[Wt>>>2>>>0],yn=Wt+4,Sn;if(It)Sn=tA(yn,dn,!0);else{Sn="";for(var Jn=0;Jn<dn;++Jn)Sn+=String.fromCharCode(E[yn+Jn>>>0])}return pl(Wt),Sn},toWireType(Wt,dn){if(dn instanceof ArrayBuffer)dn=new Uint8Array(dn);var yn,Sn=typeof dn=="string";if(!(Sn||ArrayBuffer.isView(dn)&&dn.BYTES_PER_ELEMENT==1))je("Cannot pass non-string to std::string");if(It&&Sn)yn=cs(dn);else yn=dn.length;var Jn=Cb(4+yn+1),Io=Jn+4;if(Q[Jn>>>2>>>0]=yn,Sn)if(It)Tl(dn,Io,yn+1);else for(var Vo=0;Vo<yn;++Vo){var yi=dn.charCodeAt(Vo);if(yi>255)pl(Jn),je("String has UTF-16 code units that do not fit in 8 bits");E[Io+Vo>>>0]=yi}else E.set(dn,Io>>>0);if(Wt!==null)Wt.push(pl,Jn);return Jn},readValueFromPointer:et,destructorFunction(Wt){pl(Wt)}})}var af=globalThis.TextDecoder?new TextDecoder("utf-16le"):void 0,r_=(Ge,nt,It)=>{var Wt=Ge>>>1,dn=Dl(w,Wt,nt/2,It);if(dn-Wt>16&&af)return af.decode(w.subarray(Wt>>>0,dn>>>0));var yn="";for(var Sn=Wt;Sn<dn;++Sn){var Jn=w[Sn>>>0];yn+=String.fromCharCode(Jn)}return yn},Bh=(Ge,nt,It)=>{if(It??=2147483647,It<2)return 0;It-=2;var Wt=nt,dn=It<Ge.length*2?It/2:Ge.length;for(var yn=0;yn<dn;++yn){var Sn=Ge.charCodeAt(yn);B[nt>>>1>>>0]=Sn,nt+=2}return B[nt>>>1>>>0]=0,nt-Wt},lp=(Ge)=>Ge.length*2,nu=(Ge,nt,It)=>{var Wt="",dn=Ge>>>2;for(var yn=0;!(yn>=nt/4);yn++){var Sn=Q[dn+yn>>>0];if(!Sn&&!It)break;Wt+=String.fromCodePoint(Sn)}return Wt},gm=(Ge,nt,It)=>{if(nt>>>=0,It??=2147483647,It<4)return 0;var Wt=nt,dn=Wt+It-4;for(var yn=0;yn<Ge.length;++yn){var Sn=Ge.codePointAt(yn);if(Sn>65535)yn++;if(T[nt>>>2>>>0]=Sn,nt+=4,nt+4>dn)break}return T[nt>>>2>>>0]=0,nt-Wt},jl=(Ge)=>{var nt=0;for(var It=0;It<Ge.length;++It){var Wt=Ge.codePointAt(It);if(Wt>65535)It++;nt+=4}return nt};function k1(Ge,nt,It){Ge>>>=0,nt>>>=0,It>>>=0,It=Xt(It);var Wt,dn,yn;if(nt===2)Wt=r_,dn=Bh,yn=lp;else Wt=nu,dn=gm,yn=jl;Je(Ge,{name:It,fromWireType:(Sn)=>{var Jn=Q[Sn>>>2>>>0],Io=Wt(Sn+4,Jn*nt,!0);return pl(Sn),Io},toWireType:(Sn,Jn)=>{if(typeof Jn!="string")je(`Cannot pass non-string to C++ string type ${It}`);var Io=yn(Jn),Vo=Cb(4+Io+nt);if(Q[Vo>>>2>>>0]=Io/nt,dn(Jn,Vo+4,Io+nt),Sn!==null)Sn.push(pl,Vo);return Vo},readValueFromPointer:et,destructorFunction(Sn){pl(Sn)}})}function fm(Ge,nt,It,Wt,dn,yn){Ge>>>=0,nt>>>=0,It>>>=0,Wt>>>=0,dn>>>=0,yn>>>=0,Ze[Ge]={name:Xt(nt),rawConstructor:fi(It,Wt),rawDestructor:fi(dn,yn),fields:[]}}function Z_(Ge,nt,It,Wt,dn,yn,Sn,Jn,Io,Vo){Ge>>>=0,nt>>>=0,It>>>=0,Wt>>>=0,dn>>>=0,yn>>>=0,Sn>>>=0,Jn>>>=0,Io>>>=0,Vo>>>=0,Ze[Ge].fields.push({fieldName:Xt(nt),getterReturnType:It,getter:fi(Wt,dn),getterContext:yn,setterArgumentType:Sn,setter:fi(Jn,Io),setterContext:Vo})}var cf=function(Ge,nt){Ge>>>=0,nt>>>=0,nt=Xt(nt),Je(Ge,{isVoid:!0,name:nt,fromWireType:()=>{return},toWireType:(It,Wt)=>{return}})};function yb(Ge,nt){Ge>>>=0,nt>>>=0,Ge=zi.toValue(Ge),nt=zi.toValue(nt),Ge.set(nt)}var ah=[],xb=(Ge)=>{var nt=ah.length;return ah.push(Ge),nt},lf=(Ge,nt)=>{var It=Array(Ge);for(var Wt=0;Wt<Ge;++Wt)It[Wt]=Hs(Q[nt+Wt*4>>>2>>>0],`parameter ${Wt}`);return It},Nd=(Ge,nt,It)=>{var Wt=[],dn=Ge(Wt,It);if(Wt.length)Q[nt>>>2>>>0]=zi.toHandle(Wt);return dn},As={},Ao=(Ge)=>{var nt=As[Ge];if(nt===void 0)return Xt(Ge);return nt},dd=function(Ge,nt,It){nt>>>=0;var Wt=8,[dn,...yn]=lf(Ge,nt),Sn=dn.toWireType.bind(dn),Jn=yn.map((_s)=>_s.readValueFromPointer.bind(_s));Ge--;var Io={toValue:zi.toValue},Vo=Jn.map((_s,Ps)=>{var Qa=`argFromPtr${Ps}`;return Io[Qa]=_s,`${Qa}(args${Ps?"+"+Ps*Wt:""})`}),yi;switch(It){case 0:yi="toValue(handle)";break;case 2:yi="new (toValue(handle))";break;case 3:yi="";break;case 1:Io.getStringOrSymbol=Ao,yi="toValue(handle)[getStringOrSymbol(methodName)]";break}if(yi+=`(${Vo})`,!dn.isVoid)Io.toReturnWire=Sn,Io.emval_returnValue=Nd,yi=`return emval_returnValue(toReturnWire, destructorsRef, ${yi})`;yi=`return function (handle, methodName, destructorsRef, args) {
${yi}
}`;var Ss=Function(Object.keys(Io),yi)(...Object.values(Io)),Vs=`methodCaller<(${yn.map((_s)=>_s.name)}) => ${dn.name}>`;return xb(nn(Vs,Ss))};function pc(Ge,nt){return Ge>>>=0,nt>>>=0,Ge=zi.toValue(Ge),nt=zi.toValue(nt),Ge==nt}function Ys(Ge,nt){return Ge>>>=0,nt>>>=0,Ge=zi.toValue(Ge),nt=zi.toValue(nt),zi.toHandle(Ge[nt])}function nA(Ge){if(Ge>>>=0,Ge>9)Wo[Ge+1]+=1}function cC(Ge,nt,It,Wt,dn){return Ge>>>=0,nt>>>=0,It>>>=0,Wt>>>=0,dn>>>=0,ah[Ge](nt,It,Wt,dn)}function r9(Ge){return Ge>>>=0,zi.toHandle(Ao(Ge))}function lC(){return zi.toHandle({})}function ZD(Ge){Ge>>>=0;var nt=zi.toValue(Ge);st(nt),Ti(Ge)}function h2(Ge,nt,It){Ge>>>=0,nt>>>=0,It>>>=0,Ge=zi.toValue(Ge),nt=zi.toValue(nt),It=zi.toValue(It),Ge[nt]=It}var m2=()=>4294901760,iP=(Ge,nt)=>Math.ceil(Ge/nt)*nt,Du=(Ge)=>{var nt=uf.buffer.byteLength,It=(Ge-nt+65535)/65536|0;try{return uf.grow(It),U(),1}catch(Wt){}};function oc(Ge){Ge>>>=0;var nt=E.length,It=m2();if(Ge>It)return!1;for(var Wt=1;Wt<=4;Wt*=2){var dn=nt*(1+0.2/Wt);dn=Math.min(dn,Ge+100663296);var yn=Math.min(It,iP(Math.max(Ge,dn),65536)),Sn=Du(yn);if(Sn)return!0}return!1}var rP=(Ge,nt)=>{if(dp)for(var It=Ge;It<Ge+nt;It++){var Wt=$n(It);if(Wt)dp.set(Wt,It)}},dp,df=(Ge)=>{if(!dp)dp=new WeakMap,rP(0,hf.length);return dp.get(Ge)||0},T0=[],wh=()=>{if(T0.length)return T0.pop();return hf.grow(1)},D0=(Ge,nt)=>hf.set(Ge,nt),N0=(Ge)=>{let nt=Ge.length;return[nt%128|128,nt>>7,...Ge]},sP={i:127,p:127,j:126,f:125,d:124,e:111},ym=(Ge)=>N0(Array.from(Ge,(nt)=>{var It=sP[nt];return It})),u4=(Ge,nt)=>{var It=Uint8Array.of(0,97,115,109,1,0,0,0,1,...N0([1,96,...ym(nt.slice(1)),...ym(nt[0]==="v"?"":nt[0])]),2,7,1,1,101,1,102,0,0,7,5,1,1,102,0,0),Wt=new WebAssembly.Module(It),dn=new WebAssembly.Instance(Wt,{e:{f:Ge}}),yn=dn.exports.f;return yn},ch=(Ge,nt)=>{var It=df(Ge);if(It)return It;var Wt=wh();try{D0(Wt,Ge)}catch(yn){if(!(yn instanceof TypeError))throw yn;var dn=u4(Ge,nt);D0(Wt,dn)}return dp.set(Ge,Wt),Wt},s_=(Ge)=>{dp.delete($n(Ge)),D0(Ge,null),T0.push(Ge)};Cn(),In();{if(n.noExitRuntime)Te=n.noExitRuntime;if(n.print)_=n.print;if(n.printErr)f=n.printErr;if(n.wasmBinary)y=n.wasmBinary;if(n.arguments)c=n.arguments;if(n.thisProgram)l=n.thisProgram;if(n.preInit){if(typeof n.preInit=="function")n.preInit=[n.preInit];while(n.preInit.length>0)n.preInit.shift()()}}n.addFunction=ch,n.removeFunction=s_;var Zh,Cb,pl,a_,dC,uf,hf;function Nu(Ge){Zh=Ge.K,Cb=Ge.M,pl=Ge.N,a_=uf=Ge.I,dC=hf=Ge.L}var h4={l:ve,C:De,q:Ht,z:Ye,G:mt,j:wo,i:zc,a:Bd,E:Gc,x:B0,d:sh,y:tu,c:wu,p:Rr,m:Ns,h:ja,n:Vi,F:Tu,w:k1,r:fm,k:Z_,H:cf,u:yb,g:dd,b:Ti,o:pc,B:Ys,t:nA,f:cC,s:r9,A:lC,e:ZD,v:h2,D:oc};function p2(Ge){Ge=Object.assign({},Ge);var nt=(Wt)=>(dn)=>Wt(dn)>>>0,It=(Wt)=>()=>Wt()>>>0;return Ge.K=nt(Ge.K),Ge.M=nt(Ge.M),Ge._emscripten_stack_alloc=nt(Ge._emscripten_stack_alloc),Ge.emscripten_stack_get_current=It(Ge.emscripten_stack_get_current),Ge}function m4(){X();function Ge(){if(n.calledRun=!0,x)return;V(),I?.(n),n.onRuntimeInitialized?.(),W()}if(n.setStatus)n.setStatus("Running..."),setTimeout(()=>{setTimeout(()=>n.setStatus(""),1),Ge()},1);else Ge()}var A2=await se();if(m4(),Y)t=n;else t=new Promise((Ge,nt)=>{I=Ge,b=nt});return t}var FYt=ZVo;var HYt="AGFzbQEAAAABlwRFYAF/AGACf38AYAJ/fwF/YAN/f38AYAF/AX9gBH9/f38AYAN/f38Bf2AFf39/f38AYAZ/f39/f38AYAR/f39/AX9gCH9/f39/f39/AGADf398AGAAAGABfAF8YAABf2AEf39/fABgAX8BfGACf38BfGAHf39/f39/fwBgBX9/f39/AX9gBH9/f3wBf2AEf398fwBgA398fwBgCn9/f39/f39/f38AYAV/f39/fwF8YAF8AX9gA39/fAF/YAF8AGAEf398fwF/YAR/f398AXxgA3x8fwF8YAJ8fAF8YAJ8fwF/YAJ/fgBgBX9/fHx8AGAGf398f3x/AGAGf3x8fH9/AGADf3x/AX9gA39/fAF8YAR/f3x8AGAHf39/f3x8fABgBn9/f3x8fABgBn9/fH98fABgDX9/f39/f39/f39/f38AYAV/f39+fgBgAnx/AXxgBX9/f398AGAFf39/f3wBf2AFf398fH8AYAZ/f39/fH8AYAJ/fgF/YAV/f398fwF/YAF+AX9gA39/fwF8YAd/f39/fHx/AGAHf39/fHx8fwBgDH9/f39/f39/f39/fwBgCX9/f39/f39/fwBgBn9/fH98fAF/YAd/f39/fHx8AX9gA39/fgBgAn9/AX5gAn98AX9gAn98AGAGf39/fHx8AX9gBn9/fH98fwF/YAZ/fHx8f38Bf2AFf398fHwBf2AEf398fAF/As0BIgFhAWEAFwFhAWIAAAFhAWMACgFhAWQAAwFhAWUAAAFhAWYAGAFhAWcABgFhAWgAAwFhAWkACAFhAWoAKwFhAWsAFwFhAWwAAwFhAW0ABQFhAW4AAQFhAW8AAgFhAXAABwFhAXEAAAFhAXIACAFhAXMABAFhAXQAAAFhAXUAAQFhAXYAAwFhAXcAAwFhAXgABwFhAXkAAwFhAXoALAFhAUEADgFhAUIAAgFhAUMADAFhAUQABAFhAUUAAAFhAUYAAQFhAUcABQFhAUgAAQP1B/MHAAQAAQwEBAABAgEAAgQAAwkBDQEAAgABBAQCAQ0DAgQAAQEAAQUCAAkJAQEBAgQABAABAQECAAEAAQENAQMCCQICCQAMAwEEAQQOAwABAQAMBgQAAQMBBQABAgEDAQsDBQAJBQUGAwABAgABAAMBBQEAAAACDQEAAQEDHAMBAgMQAgEBAQENCQAABBkBCAgAAgICBwcICAgIHQEBCAQEAhkIAQcIAAMBAwcBAAcFCAgICAEAAAEeHwIEBQcAAQMBBwAFAwIFBQMABAIAAwEDAQELEQAEAi0NHxgCCQEJBQUABAACAQIHBgMAAQEBAQQIAQAAAwUDAAADAgIAAwMBBAIBAAMAAQEAAgcFAwwEDQ0NAwcuBQUKCi8DBgEGAgMBMBEDAwUSEgEACgoKAQUxBQEBAQECBTIBAQADCQAAAwYGCgEBAQEKBwoSAQEEAAUFAQEFAQAzAQYDAAAHAQEDBRIDAAoHCgcKBwoHBRMBAQICBgQBCQEABQEBBgEIAgUDBgQGHjQNIA0NBQUDAwUGAggHAQcABwECAgE1AQMBBQUFBggAAQEBBwEEAQMEBQUFCAMBBQMDAgcHBwEDAQEBBQYFAQY2AQUDAwAGBQMDAQUDAwMBASECIQY3AAEDBgEBBQQRBAIVFQABAQEBBQEBFQABBwcPAQMGAyIDDgQEBAUMAQUJCRIFBwMBBggHBQQBBgEFAAEBAQEFAQMAEgcGBAMAAQAIBwEBAAEDCAEBAQEBAQIAAwEFAwMDAQEDBQUBAQECAwEBAQEBAwIXODkCBwcTBxMHChMHChMFAQEBAQEBAQEBAgkBACAFAgEBIyQDAQUBAQEGBAYAAQMBAAYMBgMEAwEEBAQDAgMCAgEABAcGBQUFBgQCBCUCBgYCAgIaAAYCBAIBAQQEAAACAAYEAAQAAAQAAQQQAQECBAsDAwsDARYDAQ4AAAQEAgUBBAQCAQQEAgUBBAQCAQQODg4OAgAEDgIJAQQEAgkBBAQCAQQABCYBAQsDAw8LCwMnAw8FBAQQEAQLCxADDAwAGxsEAgEBBAEFDwAEEAQAAwEABAAABAAABAAEAAAEKAAABAQEBAMDBQMpBAMFAwUDBAIBBAQCAQQDAQEBAwMDBAIBAQQABAEPARYqAAQCAxEBBAQCBQEEBAIBAQQEAgEEBAIBBAkCAwkGFAY6AQYGAwYBBgMGAxQGDwsGAwMGBgMDBgMGAwM7CQYDAwQDAQQEBgMDAQMABAYDAwEABAYDAQQDAQQGAwMBAAQDBAYDAwEEBgMDAQQGAwMBBDw9AwIAPgE/AgJAFBxBBgQlQgYUCR0CAkMGRBoCGhQCAAQEBAgICAcHAgQMBAUBcADvBAUHAQGAAoCABAYIAX8BQbCrBgsHGwYBSQIAAUoAlAgBSwCTCAFMAQABTQAnAU4AIgniCAEAQQEL7gSgBZ0EiQFsiQGEBokBgAaJAf8FiQH+BYkBnQSJAf0FiQHrBekFa+cFvAbmBbsGswG6BsMC1gbVBswG3QXWBc8FtweyB60HqQf8BpQH4gXDBeEFwQXgBd8F4wXABdgFswHZBcMCywOzAc4D1wW/Bd4F+AbGA7ED2wW+BbwF5QW6BeQFuAWbBZsFnweaB6ED9gaSCNoFiwiJCIgI7wbsBusG6ga9BrcGmgaHCJkGnAOYBpcGhgiWBrEDlQaFCNgHnQacA5wGhAibBp8GngaDCN0G2wbaBuYG6QGCCJsEgQicBJoE9AaACMABswG+BqoGnAOQArMBoAS/AZ8EngTkAv8HqQbDAqgGpwamBrMBpAalBpQG/ge2BqEG/QegBvwHowaPAvsHkQX6B5AF+Qf3BvgH+Qb3B8IH9gePBfUHhwT0B/UG8wfXBvIHzQfxB6IGrQXpBugG5wahA7UGrQWOAvAHrwauBu8HrQbuB8IB7QesBqsG9AHzAawFqwX0AfMB9AHzAewH6weqBakFrAWrBfQB8wHqB+kH9AHzAaoFqQWfBbUHtAfoB6sBa2znB+YHqAXlB+QH4werAWts4gfhB6cF4AffB94HqwFrbN0H3AemBdsH2gfZB6sBa2ylBaQFowWiBaEF1wfWB2ts1QfUB6cF0wfSB9EHqwFrbNAHzwfOB8wHywfKB8kHa2zIB8cHqAXGB8UHxAfDB2tswQfAB6YFvwe+B70HqwFrbKUFpAWjBaIFoQW8B6sBa2y7B7oHuQe4B7YHmQWZBZsHmQeXBZgHlweWB5cFlQefBZMHkgezB4UBfLEHhAGwB4UBfK8HhAGuB4UBfKwHhAGcBYUBfKsHhAGqB4UBfKgHhAGnB6YHfKUHpAejB4UBfKIHhAGhB4UBfKAHhAGcBYUBfJ4HhAGdB4UBfJwHhAFSsAWiBFIwkQeQB0JRlQWPB44HUjCNB4wHQlGVBYsHigdSMIkHiAdCUYcHhgeFB1IwhAeDB0JRggeBB4AHUjD/Bv4GQlH9BvsG+gbzBvIGiQW7BTBSMPEG8AZCUYcF7gbtBlJSMOUG5AZCUeIE4wbiBjDhBuAGQlHiBN8G3gZS2QbeBNgG0AbcBtMG1AbSBtEG3wTPBs4GzQYwywbKBskGMMgGxwaJBTDG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CwsSACAAEFAiAEUEQBCuAgALIAALLwEBfwJAIAAoAggEQCAAIAAoAggiAUEBazYCCCABDQELIAAgACgCACgCEBEAAAsLVwEDfyAAKAIIIAFJBEAgAUECdBAnIQQgACgCACECAkAgACgCBCIDRQ0AIANBAnQiA0UNACAEIAIgA/wKAAALIAIEQCACECILIAAgATYCCCAAIAQ2AgALCwkAQfENEJ4FAAvCKAELfyMAQRBrIgokAAJAAkACQAJAAkACQAJAAkACQAJAIABB9AFNBEBBpKECKAIAIgRBECAAQQtqQfgDcSAAQQtJGyIGQQN2IgB2IgFBA3EEQAJAIAFBf3NBAXEgAGoiA0EDdCIBQcyhAmoiACABKALUoQIiAigCCCIFRgRAQaShAiAEQX4gA3dxNgIADAELIAUgADYCDCAAIAU2AggLIAJBCGohACACIAFBA3I2AgQgASACaiIBIAEoAgRBAXI2AgQMCwsgBkGsoQIoAgAiCE0NASABBEACQEECIAB0IgJBACACa3IgASAAdHFoIgNBA3QiAUHMoQJqIgIgASgC1KECIgAoAggiBUYEQEGkoQIgBEF+IAN3cSIENgIADAELIAUgAjYCDCACIAU2AggLIAAgBkEDcjYCBCAAIAZqIgcgASAGayIFQQFyNgIEIAAgAWogBTYCACAIBEAgCEF4cUHMoQJqIQFBuKECKAIAIQICfyAEQQEgCEEDdnQiA3FFBEBBpKECIAMgBHI2AgAgAQwBCyABKAIICyEDIAEgAjYCCCADIAI2AgwgAiABNgIMIAIgAzYCCAsgAEEIaiEAQbihAiAHNgIAQayhAiAFNgIADAsLQaihAigCACILRQ0BIAtoQQJ0KALUowIiASgCBEF4cSAGayEDIAEhAgNAAkAgASgCECIARQRAIAEoAhQiAEUNAQsgACgCBEF4cSAGayIBIAMgASADSSIBGyEDIAAgAiABGyECIAAhAQwBCwsgAigCGCEJIAIgAigCDCIARwRAIAIoAggiASAANgIMIAAgATYCCAwKCyACKAIUIgEEfyACQRRqBSACKAIQIgFFDQMgAkEQagshBQNAIAUhByABIgBBFGohBSAAKAIUIgENACAAQRBqIQUgACgCECIBDQALIAdBADYCAAwJC0F/IQYgAEG/f0sNACAAQQtqIgFBeHEhBkGooQIoAgAiB0UNAEEfIQhBACAGayEDIABB9P//B00EQCAGQSYgAUEIdmciAGt2QQFxIABBAXRrQT5qIQgLAkACQAJAIAhBAnQoAtSjAiIBRQRAQQAhAAwBC0EAIQAgBkEZIAhBAXZrQQAgCEEfRxt0IQIDQAJAIAEoAgRBeHEgBmsiBCADTw0AIAEhBSAEIgMNAEEAIQMgASEADAMLIAAgASgCFCIEIAQgASACQR12QQRxaigCECIBRhsgACAEGyEAIAJBAXQhAiABDQALCyAAIAVyRQRAQQAhBUECIAh0IgBBACAAa3IgB3EiAEUNAyAAaEECdCgC1KMCIQALIABFDQELA0AgACgCBEF4cSAGayICIANJIQEgAiADIAEbIQMgACAFIAEbIQUgACgCECIBBH8gAQUgACgCFAsiAA0ACwsgBUUNACADQayhAigCACAGa08NACAFKAIYIQggBSAFKAIMIgBHBEAgBSgCCCIBIAA2AgwgACABNgIIDAgLIAUoAhQiAQR/IAVBFGoFIAUoAhAiAUUNAyAFQRBqCyECA0AgAiEEIAEiAEEUaiECIAAoAhQiAQ0AIABBEGohAiAAKAIQIgENAAsgBEEANgIADAcLIAZBrKECKAIAIgVNBEBBuKECKAIAIQACQCAFIAZrIgFBEE8EQCAAIAZqIgIgAUEBcjYCBCAAIAVqIAE2AgAgACAGQQNyNgIEDAELIAAgBUEDcjYCBCAAIAVqIgEgASgCBEEBcjYCBEEAIQFBACECC0GsoQIgATYCAEG4oQIgAjYCACAAQQhqIQAMCQsgBkGwoQIoAgAiAkkEQEGwoQIgAiAGayIBNgIAQbyhAkG8oQIoAgAiACAGaiICNgIAIAIgAUEBcjYCBCAAIAZBA3I2AgQgAEEIaiEADAkLQQAhACAGQS9qIgMCf0H8pAIoAgAEQEGEpQIoAgAMAQtBiKUCQn83AgBBgKUCQoCggICAgAQ3AgBB/KQCIApBDGpBcHFB2KrVqgVzNgIAQZClAkEANgIAQeCkAkEANgIAQYAgCyIBaiIEQQAgAWsiB3EiASAGTQ0IQdykAigCACIFBEBB1KQCKAIAIgggAWoiCSAITSAFIAlJcg0JCwJAQeCkAi0AAEEEcUUEQAJAAkACQAJAQbyhAigCACIFBEBB5KQCIQADQCAAKAIAIgggBU0EQCAFIAggACgCBGpJDQMLIAAoAggiAA0ACwtBABCsASICQX9GDQMgASEEQYClAigCACIAQQFrIgUgAnEEQCABIAJrIAIgBWpBACAAa3FqIQQLIAQgBk0NA0HcpAIoAgAiAARAQdSkAigCACIFIARqIgcgBU0gACAHSXINBAsgBBCsASIAIAJHDQEMBQsgBCACayAHcSIEEKwBIgIgACgCACAAKAIEakYNASACIQALIABBf0YNASAGQTBqIARNBEAgACECDAQLQYSlAigCACICIAMgBGtqQQAgAmtxIgIQrAFBf0YNASACIARqIQQgACECDAMLIAJBf0cNAgtB4KQCQeCkAigCAEEEcjYCAAsgARCsASICQX9GQQAQrAEiAEF/RnIgACACTXINBSAAIAJrIgQgBkEoak0NBQtB1KQCQdSkAigCACAEaiIANgIAQdikAigCACAASQRAQdikAiAANgIACwJAQbyhAigCACIDBEBB5KQCIQADQCACIAAoAgAiASAAKAIEIgVqRg0CIAAoAggiAA0ACwwEC0G0oQIoAgAiAEEAIAAgAk0bRQRAQbShAiACNgIAC0EAIQBB6KQCIAQ2AgBB5KQCIAI2AgBBxKECQX82AgBByKECQfykAigCADYCAEHwpAJBADYCAANAIABBA3QiASABQcyhAmoiBTYC1KECIAEgBTYC2KECIABBAWoiAEEgRw0AC0GwoQIgBEEoayIAQXggAmtBB3EiAWsiBTYCAEG8oQIgASACaiIBNgIAIAEgBUEBcjYCBCAAIAJqQSg2AgRBwKECQYylAigCADYCAAwECyACIANNIAEgA0tyDQIgACgCDEEIcQ0CIAAgBCAFajYCBEG8oQIgA0F4IANrQQdxIgBqIgE2AgBBsKECQbChAigCACAEaiICIABrIgA2AgAgASAAQQFyNgIEIAIgA2pBKDYCBEHAoQJBjKUCKAIANgIADAMLQQAhAAwGC0EAIQAMBAtBtKECKAIAIAJLBEBBtKECIAI2AgALIAIgBGohBUHkpAIhAAJAA0AgBSAAKAIAIgFHBEAgACgCCCIADQEMAgsLIAAtAAxBCHFFDQMLQeSkAiEAA0ACQCAAKAIAIgEgA00EQCADIAEgACgCBGoiBUkNAQsgACgCCCEADAELC0GwoQIgBEEoayIAQXggAmtBB3EiAWsiBzYCAEG8oQIgASACaiIBNgIAIAEgB0EBcjYCBCAAIAJqQSg2AgRBwKECQYylAigCADYCACADIAVBJyAFa0EHcWpBL2siACAAIANBEGpJGyIBQRs2AgQgAUHspAIpAgA3AhAgAUHkpAIpAgA3AghB7KQCIAFBCGo2AgBB6KQCIAQ2AgBB5KQCIAI2AgBB8KQCQQA2AgAgAUEYaiEAA0AgAEEHNgIEIABBCGogAEEEaiEAIAVJDQALIAEgA0YNACABIAEoAgRBfnE2AgQgAyABIANrIgJBAXI2AgQgASACNgIAAn8gAkH/AU0EQCACQfgBcUHMoQJqIQACf0GkoQIoAgAiAUEBIAJBA3Z0IgJxRQRAQaShAiABIAJyNgIAIAAMAQsgACgCCAshASAAIAM2AgggASADNgIMQQwhAkEIDAELQR8hACACQf///wdNBEAgAkEmIAJBCHZnIgBrdkEBcSAAQQF0ckE+cyEACyADIAA2AhwgA0IANwIQIABBAnRB1KMCaiEBAkACQEGooQIoAgAiBUEBIAB0IgRxRQRAQaihAiAEIAVyNgIAIAEgAzYCAAwBCyACQRkgAEEBdmtBACAAQR9HG3QhACABKAIAIQUDQCAFIgEoAgRBeHEgAkYNAiAAQR12IQUgAEEBdCEAIAEgBUEEcWoiBCgCECIFDQALIAQgAzYCEAsgAyABNgIYQQghAiADIgEhAEEMDAELIAEoAggiACADNgIMIAEgAzYCCCADIAA2AghBACEAQRghAkEMCyADaiABNgIAIAIgA2ogADYCAAtBsKECKAIAIgAgBk0NAEGwoQIgACAGayIBNgIAQbyhAkG8oQIoAgAiACAGaiICNgIAIAIgAUEBcjYCBCAAIAZBA3I2AgQgAEEIaiEADAQLQaChAkEwNgIAQQAhAAwDCyAAIAI2AgAgACAAKAIEIARqNgIEIAJBeCACa0EHcWoiCCAGQQNyNgIEIAFBeCABa0EHcWoiBCAGIAhqIgNrIQcCQEG8oQIoAgAgBEYEQEG8oQIgAzYCAEGwoQJBsKECKAIAIAdqIgA2AgAgAyAAQQFyNgIEDAELQbihAigCACAERgRAQbihAiADNgIAQayhAkGsoQIoAgAgB2oiADYCACADIABBAXI2AgQgACADaiAANgIADAELIAQoAgQiAEEDcUEBRgRAIABBeHEhCSAEKAIMIQICQCAAQf8BTQRAIAQoAggiASACRgRAQaShAkGkoQIoAgBBfiAAQQN2d3E2AgAMAgsgASACNgIMIAIgATYCCAwBCyAEKAIYIQYCQCACIARHBEAgBCgCCCIAIAI2AgwgAiAANgIIDAELAkAgBCgCFCIABH8gBEEUagUgBCgCECIARQ0BIARBEGoLIQEDQCABIQUgACICQRRqIQEgACgCFCIADQAgAkEQaiEBIAIoAhAiAA0ACyAFQQA2AgAMAQtBACECCyAGRQ0AAkAgBCgCHCIAQQJ0IgEoAtSjAiAERgRAIAFB1KMCaiACNgIAIAINAUGooQJBqKECKAIAQX4gAHdxNgIADAILAkAgBCAGKAIQRgRAIAYgAjYCEAwBCyAGIAI2AhQLIAJFDQELIAIgBjYCGCAEKAIQIgAEQCACIAA2AhAgACACNgIYCyAEKAIUIgBFDQAgAiAANgIUIAAgAjYCGAsgByAJaiEHIAQgCWoiBCgCBCEACyAEIABBfnE2AgQgAyAHQQFyNgIEIAMgB2ogBzYCACAHQf8BTQRAIAdB+AFxQcyhAmohAAJ/QaShAigCACIBQQEgB0EDdnQiAnFFBEBBpKECIAEgAnI2AgAgAAwBCyAAKAIICyEBIAAgAzYCCCABIAM2AgwgAyAANgIMIAMgATYCCAwBC0EfIQIgB0H///8HTQRAIAdBJiAHQQh2ZyIAa3ZBAXEgAEEBdHJBPnMhAgsgAyACNgIcIANCADcCECACQQJ0QdSjAmohAAJAAkBBqKECKAIAIgFBASACdCIFcUUEQEGooQIgASAFcjYCACAAIAM2AgAMAQsgB0EZIAJBAXZrQQAgAkEfRxt0IQIgACgCACEBA0AgASIAKAIEQXhxIAdGDQIgAkEddiEBIAJBAXQhAiAAIAFBBHFqIgUoAhAiAQ0ACyAFIAM2AhALIAMgADYCGCADIAM2AgwgAyADNgIIDAELIAAoAggiASADNgIMIAAgAzYCCCADQQA2AhggAyAANgIMIAMgATYCCAsgCEEIaiEADAILAkAgCEUNAAJAIAUoAhwiAUECdCICKALUowIgBUYEQCACQdSjAmogADYCACAADQFBqKECIAdBfiABd3EiBzYCAAwCCwJAIAUgCCgCEEYEQCAIIAA2AhAMAQsgCCAANgIUCyAARQ0BCyAAIAg2AhggBSgCECIBBEAgACABNgIQIAEgADYCGAsgBSgCFCIBRQ0AIAAgATYCFCABIAA2AhgLAkAgA0EPTQRAIAUgAyAGaiIAQQNyNgIEIAAgBWoiACAAKAIEQQFyNgIEDAELIAUgBkEDcjYCBCAFIAZqIgQgA0EBcjYCBCADIARqIAM2AgAgA0H/AU0EQCADQfgBcUHMoQJqIQACf0GkoQIoAgAiAUEBIANBA3Z0IgJxRQRAQaShAiABIAJyNgIAIAAMAQsgACgCCAshASAAIAQ2AgggASAENgIMIAQgADYCDCAEIAE2AggMAQtBHyEAIANB////B00EQCADQSYgA0EIdmciAGt2QQFxIABBAXRyQT5zIQALIAQgADYCHCAEQgA3AhAgAEECdEHUowJqIQECQAJAIAdBASAAdCICcUUEQEGooQIgAiAHcjYCACABIAQ2AgAgBCABNgIYDAELIANBGSAAQQF2a0EAIABBH0cbdCEAIAEoAgAhAQNAIAEiAigCBEF4cSADRg0CIABBHXYhByAAQQF0IQAgAiAHQQRxaiIHKAIQIgENAAsgByAENgIQIAQgAjYCGAsgBCAENgIMIAQgBDYCCAwBCyACKAIIIgAgBDYCDCACIAQ2AgggBEEANgIYIAQgAjYCDCAEIAA2AggLIAVBCGohAAwBCwJAIAlFDQACQCACKAIcIgFBAnQiBSgC1KMCIAJGBEAgBUHUowJqIAA2AgAgAA0BQaihAiALQX4gAXdxNgIADAILAkAgAiAJKAIQRgRAIAkgADYCEAwBCyAJIAA2AhQLIABFDQELIAAgCTYCGCACKAIQIgEEQCAAIAE2AhAgASAANgIYCyACKAIUIgFFDQAgACABNgIUIAEgADYCGAsCQCADQQ9NBEAgAiADIAZqIgBBA3I2AgQgACACaiIAIAAoAgRBAXI2AgQMAQsgAiAGQQNyNgIEIAIgBmoiBSADQQFyNgIEIAMgBWogAzYCACAIBEAgCEF4cUHMoQJqIQBBuKECKAIAIQECf0EBIAhBA3Z0IgcgBHFFBEBBpKECIAQgB3I2AgAgAAwBCyAAKAIICyEEIAAgATYCCCAEIAE2AgwgASAANgIMIAEgBDYCCAtBuKECIAU2AgBBrKECIAM2AgALIAJBCGohAAsgCkEQaiQAIAALFgAgAEEQahAvGiAAQQhqEC8aIAAQLwsrAQJ/IAAoAgAiASgCACICBEAgASACEHsgACgCACIAKAIAIAAoAggaECILC/w9AxJ/HXwLfiMAQbACayIMJAAgDEIANwMIIAxCgICAgICAgPg/NwMAIAxCADcDECAMQgA3AxggDEIANwMoIAxCgICAgICAgPg/NwMgIAxCADcDMCAMQgA3AzggDEIANwNIIAxCgICAgICAgPg/NwNAIAxCADcDUCAMQgA3A1ggDEGYAmogAUEYaiIFIAwQygEgDCsDmAIgDCsDoAJiBEAgASgCDCELIwBBwAZrIgMkACADQgA3A/AEIANCgICAgICAgPg/NwPoBCADQgA3A/gEIANCADcDgAUgA0IANwOQBSADQoCAgICAgID4PzcDiAUgA0IANwOYBSADQgA3A6AFIANCADcDsAUgA0KAgICAgICA+D83A6gFIANCADcDuAUgA0IANwPABSADQaADaiAFIANB6ARqEMoBAkAgAysDoAMgAysDqANhBEAgDCALEDcaDAELIAwQOyEIIAsoAkQiAgRAIAggAjYCRAwBCyAFKQMAITEgBSkDCCEyIAUpAxAhMyAFKQMYITQgBSkDICE1IAUpAyghNiAFKQMwITcgBSkDOCE4IAUpA0AhOSAFKQNIITogBSkDUCE7IAMgBSkDWEL///////////8Ag0KAgICAgICA+P8AVDoA8wQgAyA7Qv///////////wCDQoCAgICAgID4/wBUOgDyBCADIDpC////////////AINCgICAgICAgPj/AFQ6APEEIAMgOUL///////////8Ag0KAgICAgICA+P8AVDoA8AQgAyA4Qv///////////wCDQoCAgICAgID4/wBUOgDvBCADIDdC////////////AINCgICAgICAgPj/AFQ6AO4EIAMgNkL///////////8Ag0KAgICAgICA+P8AVDoA7QQgAyA1Qv///////////wCDQoCAgICAgID4/wBUOgDsBCADIDRC////////////AINCgICAgICAgPj/AFQ6AOsEIAMgM0L///////////8Ag0KAgICAgICA+P8AVDoA6gQgAyAyQv///////////wCDQoCAgICAgID4/wBUOgDpBCADIDFC////////////AINCgICAgICAgPj/AFQ6AOgEAkACQCADLQDpBCADLQDoBHFFDQAgAy0A6gRBAXFFDQAgAy0A7AQgAy0A6wRxRQ0AIAMtAO0EQQFxRQ0AIAMtAO8EIAMtAO4EcUUNACADLQDwBEEBcUUNACADLQDyBCADLQDxBHFFDQAgAy0A8wRBAXENAQsgCEEBECwMAQsgCCALKALIATYCyAEgCCALRwRAIAsoAswBIQYgC0HQAWohEiMAQRBrIg0kACAIQcwBaiIKKAIIBEAgDSAKNgIEIAooAgAhAiAKIApBBGo2AgAgCigCBEEANgIIIApCADcCBCANIAIoAgQiBCACIAQbIgI2AgwgDSACNgIIIAIEQCANIAIQsAQ2AggLAkAgDSgCDCICRSAGIBJGcg0AA0AgAiAGKAIQNgIQIAJBGGogBkEYakHqAPwKAAAgAiEJAkAgCigCBCIERQRAIApBBGoiAiEHDAELIAkoAhAhDgNAIAQiAigCECAOSgRAIAIhByACKAIAIgQNAQwCCyACKAIEIgQNAAsgAkEEaiEHCyAKIAIgByAJEIIBIA0gDSgCCCICNgIMIAIEQCANIAIQsAQ2AggLAkAgBigCBCICBEADQCACIgYoAgAiAg0ADAILAAsDQCAGIAYoAggiBigCAEcNAAsLIA0oAgwiAkUNASAGIBJHDQALCyANKAIEIA0oAgwQbyANKAIIIgIEQCACKAIIIgQEQANAIAQiAigCCCIEDQALIA0gAjYCCAsgDSgCBCACEG8LCyAGIBJHBEAgCkEEaiEQA0AjAEEQayIRJABBiAEQIyITQRBqIg8gBkEQakH4APwKAAACfwJAAkAgECIHIApBBGoiBEcEQCAPKAIAIgkgBygCEEoNAQsgBygCACEOAkAgByICIAooAgBHBEACQCAORQRAA0AgAiACKAIIIgIoAgBGDQAMAgsACyAOIQkDQCAJIgIoAgQiCQ0ACwsgDygCACIJIAIoAhBIDQELIA5FBEAgESAHNgIMIAcMBAsgESACNgIMIAJBBGoMAwsDQCAEIgcoAgAiAkUNAgNAIAkgAiIEKAIQSA0BIAIoAgQiAg0ACwsgBEEEaiEHDAELA0AgBCIHKAIAIgJFDQEDQCACIgQoAhAgCU4NASACKAIEIgINAAsLIARBBGohBwsgESAENgIMIAcLIQIgCiARKAIMIAIgExCCASARQRBqJAACQCAGKAIEIgIEQANAIAIiBigCACICDQAMAgsACwNAIAYgBigCCCIGKAIARw0ACwsgBiASRw0ACwsgDUEQaiQACwJAIAhBAGogC0YNACAIKALYASICBEAgAhAiCyAIQgA3AtgBIAggCygC3AEiAjYC4AEgCCACNgLcASACRQ0AIAggAkEEdCICECciBDYC2AEgAkUNACAEIAsoAtgBIAL8CgAACyAIIAsrAzA5AzAgCCALKwM4OQM4IAggCygCQDYCQCAIQYgBaiIOIAtBiAFqEJICIAggC0Ew/AoAACAIQdgAaiIJIAtB2ABqIg8Q7QIgCEHoAGoiByALQegAahDtAiAIQfgAaiIKIAtB+ABqEO0CIAsoArwBIQIgA0IANwOABCADQgA3A4gEIANCADcDkAQgA0IANwOYBCADIAMpA4AENwOgAiADIAMpA4gENwOoAiADIAMpA5AENwOwAiADIAMpA5gENwO4AiAIQbgBaiACIANBoAJqENoEIAhBfzYCyAEgCCgCzAEiAiAIQdABaiIERwRAA0AgAisDICEVIAIrAyghFCACKwMwIRcgAisDOCEbIAIrA0AhGCACKwNIIRYgAisDUCEZIAIrA1ghGiACKwNgIR4gAisDaCEfIAIrA3AhHCACKwN4ISAgA0KAgICAgICA+D83A+AFIAMgIDkD2AUgAyAcOQPQBSADIB85A8gFIANCADcDwAUgAyAeOQO4BSADIBo5A7AFIAMgGTkDqAUgA0IANwOgBSADIBY5A5gFIAMgGDkDkAUgAyAbOQOIBSADQgA3A4AFIAMgFzkD+AQgAyAUOQPwBCADIBU5A+gEIANBoANqIgYgBSADQegEahDwASACQSBqIAZB4AD8CgAAAkAgAigCBCIGBEADQCAGIgIoAgAiBg0ADAILAAsDQCACIAIoAggiAigCAEcNAAsLIAIgBEcNAAsLIAsoAkwhAiADQgA3A5gDIANCADcDkAMgA0IANwOIAyADQgA3A4gCIANCADcDkAIgA0IANwOYAiAIQcgAaiACIANBiAJqEGcgCygCrAEhAiADQgA3A/ACIANCADcD+AIgA0IANwOAAyADIAMpA/ACNwPwASADIAMpA/gCNwP4ASADIAMpA4ADNwOAAiAIQagBaiACIANB8AFqEGcgCygCnAEhAiADQgA3A9gCIANCADcD4AIgA0IANwPoAiADIAMpA9gCNwPYASADIAMpA+ACNwPgASADIAMpA+gCNwPoASAIQZgBaiACIANB2AFqEGcgBSsDQCEeIAUrAzghFSAFKwMwIRQgBSsDKCEXIAUrAyAhGyAFKwMYIRggBSsDECEWIAUrAwghGSAFKwMAIRogAyALKAJMIgQEfCALKAJIIgIgBEEYbGohBCAFKwNYIR0gBSsDUCEhIAUrA0ghIiAIKAJIIQYDQCAGIB0gFiACKwMAIh+iIBcgAisDCCIcoqAgHiACKwMQIiCioKA5AxAgBiAhIBkgH6IgGyAcoqAgFSAgoqCgOQMIIAYgIiAaIB+iIBggHKKgIBQgIKKgoDkDACAGQRhqIQYgAkEYaiICIARHDQALIAUrAxAhFiAFKwMIIRkgBSsDACEaIAUrAzghFSAFKwMwIRQgBSsDKCEXIAUrAyAhGyAFKwMYIRggBSsDQAUgHgs5A6gFIAMgFzkDoAUgAyAWOQOYBSADIBU5A5AFIAMgGzkDiAUgAyAZOQOABSADIBQ5A/gEIAMgGDkD8AQgAyAaOQPoBCADQaADaiICIANB6ARqEJABIAgoAqgBIQYgCygCqAEhBCALKAKsASEQIANBkAFqIg0gAkHIAPwKAAAgBCAEIBBBGGxqIAYgDRC6BCAIKAKYASEGIAsoApgBIQQgCygCnAEhECADQcgAaiINIAJByAD8CgAAIAQgBCAQQRhsaiAGIA0QugQgCygCQCIEQQJKBEAgDyALQcgBaiACIA4gCygCjAEgBG4gBEEAEL4ECyAFKwMYIhsgBSsDOCIYoiAFKwMgIhYgBSsDMCIZoqEgBSsDECIcoiAFKwMAIiAgFiAFKwNAIhqiIAUrAygiHiAYoqGiIAUrAwgiHSAeIBmiIBsgGqKhoqCgIR8gCygCvAEiDgRAIAsoAmghDyALKAK4ASEQIAgoArgBIQ1BACECA0AgECAfRAAAAAAAAAAAYwR/IAIgAkEDcEEBdGtBAnQgD2ooAggFIAILQQV0aiIEKwMQIRUgBCsDACEUIAQrAwghFyANIAJBBXRqIgYgBCsDGDkDGCAGIBwgFKIgHiAXoqAgGiAVoqA5AxAgBiAdIBSiIBYgF6KgIBggFaKgOQMIIAYgICAUoiAbIBeioCAZIBWioDkDACACQQFqIgIgDkcNAAsLAkAgH0QAAAAAAAAAAGNFDQAgCRA4IAcQOCAKEDggCCgCXCICQQNuIQ8gAkEDSQ0AIAooAgAhBCAHKAIAIQcgCSgCACEKQQAhCQNAIAMgCiAJQQNsIhBBAnQiAkEIaiIGaigCACINNgLoBCADIAIgCmooAgAiETYC7AQgAyAGIAdqKAIANgLwBCADIAQgBmooAgA2AvQEIAogAkEEaiIGaigCACEOIAMgDTYC/AQgAyAONgL4BCADIAYgB2ooAgA2AoAFIAQgBmooAgAhBiADIA42AowFIAMgETYCiAUgAyAGNgKEBSADIAIgB2ooAgA2ApAFIAMgAiAEaigCADYClAUgA0ECNgLQAiADQoCAgIAQNwLIAkEAIQYDQCADQegEaiADQcgCaiAGaigCAEEEdGoiAiACKQIAQiCJNwIAIAIgAigCCCICIAJBA29BAXRrQQJqNgIIIAZBBGoiBkEMRw0ACyADQQI2AtACIANCgICAgBA3AsgCQQAhAgNAIAogA0HIAmogAmooAgAiDiAQakECdCIGaiADQegEaiAOQQR0aiIOKAIANgIAIAYgB2ogDigCCDYCACAEIAZqIA4oAgw2AgAgAkEEaiICQQxHDQALIAlBAWoiCSAPRw0ACwsgCBBYIAMgBSkDKDcDyAQgAyAFKQMgNwPABCADIAUpAxg3A7gEIAMgBSkDMDcD0AQgAyAFKQM4NwPYBCADIAUpA0A3A+AEIAMgBSkDADcDoAQgAyAFKQMINwOoBCADIAUpAxA3A7AEIAMgA0GgBGpByAD8CgAAIANB6ARqIgYhBEEAIQcjAEHgAWsiAiQAIAMrAwAhFSADKwMYIRQgAysDMCEXIAMrAwghGyADKwMgIRggAysDOCEWIAMrAxAhGSADKwMoIRogAiADKwNAOQNIIAIgGjkDQCACIBk5AzggAiAWOQMwIAIgGDkDKCACIBs5AyAgAiAXOQMYIAIgFDkDECACIBU5AwggAkHQAGogAkEIaiADEJoCRAAAAAAAAAAAIRUgAisDkAEhKSACKwN4ISMgAisDcCEiIAIrA2AhJiACKwNYIRQgAisDUCEkRAAAAAAAAPA/ISBEAAAAAAAAAAAhF0QAAAAAAAAAACEbA0AgJCAioSIYIBigIhhEAAAAAAAA8D8gFCAUoiAYIBiiIhagn6MiGKJERo0yz2uQ7T8gGL1C////////////AINCgICAgICAgPj/AFQgFCAUROadPzNPUBdAoqIgFmNxIgkbIh0gHaIiFiAUIBiiRGOprqbifdg/IAkbIhggGKIiGaFEAAAAAAAA8D8gFiAZoKMiGaIiFiAiIBaiIBQgHSAYIBigoiAZoiIZoiIcoSIloiAZIBQgFqIiJyAkIBmioSIroqEiKiApoSIUIBSgIhpEAAAAAAAA8D8gIyAWoiAmIBmioSIUIBSiIBogGqIiHqCfoyIaokRGjTLPa5DtPyAavUL///////////8Ag0KAgICAgICA+P8AVCAUIBRE5p0/M09QF0CioiAeY3EiCRsiISAhoiIeIBQgGqJEY6mupuJ92D8gCRsiGiAaoiIfoUQAAAAAAADwPyAeIB+goyIfoiIeICkgHqIgFCAhIBogGqCiIB+iIh+iIiyhIi2iIB8gFCAeoiIuICogH6KhIi+ioSIoIBYgJCAWoiAcoKIgGSAnICIgGaKgoqAiJ6EiFCAUoCIcRAAAAAAAAPA/ICYgFqIgIyAZoqAiIyAeoiAWICuiIBkgJaKgIiUgH6KhIhQgFKIgHCAcoiIZoJ+jIhaiREaNMs9rkO0/IBa9Qv///////////wCDQoCAgICAgID4/wBUIBQgFETmnT8zT1AXQKKiIBljcSIJGyIiICKiIhkgFCAWokRjqa6m4n3YPyAJGyIWIBaiIhyhRAAAAAAAAPA/IBkgHKCjIhyiIhkgJyAZoiAUICIgFiAWoKIgHKIiHKIiK6EiJqIgHCAUIBmiIjAgKCAcoqEiFKKhISQgGSAUoiAcICaioCEmICUgHqIgIyAfoqAiIyAZoiAeIC+iIB8gLaKgIiUgHKKhIRQgJSAZoiAjIByioCEjICAgHaIgFSAYoqEiJSAaoiAbIB2iIBcgGKKgIi0gIaKgIi8gIqIgICAYoiAVIB2ioCIgICGiIBcgHaIgGyAYoqEiFyAaoqEiFSAWoqEhGyAVICKiIC8gFqKgIRUgJSAhoiAtIBqioSIYICKiIBcgIaIgICAaoqAiFyAWoqEhICAYIBaiIBcgIqKgIRcgHiAqIB6iICygoiAfIC4gKSAfoqCioCEiIBkgKCAZoiAroKIgHCAwICcgHKKgoqAhKSAHQQFqIgdBDEcNAAsgAiAXIBWiIhQgGyAgoiIYoSIWIBagOQPQASACIBsgFaIiFiAXICCiIhmgIhogGqA5A8gBIAIgFCAYoCIUIBSgOQPAASACIBsgF6IiFCAVICCiIhihIhogGqA5A7ABIAIgFiAZoSIWIBagOQOoASACIBQgGKAiFCAUoDkDoAEgAkQAAAAAAADwPyAbIBuiIhQgFyAXoiIXoCIbIBugoTkD2AEgAkQAAAAAAADwPyAUIBUgFaIiFaAiFCAUoKE5A7gBIAJEAAAAAAAA8D8gFyAVoCIVIBWgoTkDmAEgAkEIaiADIAJBmAFqIg4QmgIgAiACKwPIASIZIAIrA7ABIhogAisDmAEiHiACKwMIIhUgFaIgAisDECIWIBaioCACKwMYIhwgHKKgIhQgAisDICIgICCiIAIrAygiHSAdoqAgAisDMCIhICGioCIXYyIHGyIfIBcgFCAHGyIiIAIrAzgiIyAjoiACKwNAIiYgJqKgIAIrA0giKiAqoqAiKWMiCRs5A5gBIAIgAisD0AEiJCACKwO4ASIoIAIrA6ABIicgBxsiJSAJGzkDoAEgAisDwAEhGyACKwOoASEYIAIgH5ogGSAJGyIZIB6aIBogBxsiGiAUIBcgBxsgIiApIAkbYyIKGzkDsAEgAiAamiAZIAobOQPIASACICWaICQgCRsiFCAnmiAoIAcbIhcgChs5A7gBIAIgF5ogFCAKGzkD0AEgAiACKwPYASIUIBsgGCAHGyIXIAkbOQOoASACIBiaIBsgBxsiG5ogF5ogFCAJGyIUIAobOQPYASACIBQgGyAKGzkDwAEgBCAmIB0gFiAHGyIlIAkbIiIgIyAgIBUgBxsiKyAJGyIZmSAZIBmiICIgIqKgnyIURI3ttaD3xrA+EPoBoCIXICJEAAAAAAAAAAAgFESN7bWg98awPmQbIhsgGUQAAAAAAAAAAGMiDxsiFEQAAAAAAADwPyAbIBcgDxsiFyAXoiAUIBSioJ+jIhuiIhQgFyAboiIaIBqgoiIboiAZRAAAAAAAAPA/IBQgFCAUoKKhIh6ioCIfmSAqICEgHCAHGyIsIAkbIikgKaIgHyAfoqCfIhdEje21oPfGsD4Q+gGgIhggKUQAAAAAAAAAACAXRI3ttaD3xrA+ZBsiJCAfRAAAAAAAAAAAYyIPGyIXRAAAAAAAAPA/ICQgGCAPGyIYIBiiIBcgF6Kgn6MiJKIiFyAYICSiIiQgJKAiLaIiGDkDECAEIBQgGkQAAAAAAAAAwKKiIBcgF6JEAAAAAAAA4L+gIiggKKAiKKI5AwggBCAUIBSiRAAAAAAAAOC/oCInICegIicgKKI5AwAgBCAcmiAhIAcbIiGaICyaICogCRsiKiAKGyIsIBiiIBaaIB0gBxsiFpogJZogJiAJGyIdIAobIiUgG6IgFZogICAHGyIVmiArmiAjIAkbIiAgChsiKyAeoqAiLkQAAAAAAADwPyAXIBcgF6CioSIcoqA5A3ggBCAqICEgChsiISAYoiAdIBYgChsiFiAboiAgIBUgChsiFSAeoqAiHSAcoqA5A2AgBCApIBiiIB8gHKKgOQNIIAQgFiAeoiAVIBuioSIgmSAgICCiICEgHKIgHSAYoqEiIyAjoqCfIhVEje21oPfGsD4Q+gGgIhYgI0QAAAAAAAAAACAVRI3ttaD3xrA+ZBsiHSAgRAAAAAAAAAAAYyIHGyIVRAAAAAAAAPA/IB0gFiAHGyIWIBaiIBUgFaKgn6MiHaIiFSAoIBYgHaIiFkQAAAAAAAAAwKIiKqKiOQMoIAQgKCAVIBWiRAAAAAAAAOC/oCIdIB2gIiaiOQNAIAQgLCAcoiAuIBiioSIoRAAAAAAAAPA/IBUgFSAVoKKhIh2iICUgHqIgKyAboqEiJSAVIBYgFqCiIiGioTkDiAEgBCAoICGiICUgHaKgOQOAASAEICMgHaIgICAhoqE5A3AgBCAjICGiICAgHaKgOQNoIAQgKSAcoiAfIBiioSIYIB2iICIgHqIgGSAboqEiGSAhoqE5A1ggBCAYICGiIBkgHaKgOQNQIAQgFSAUIBpEAAAAAAAAEECiIBaioqIgFyAnIC2ioiAmoqE5AzAgBCAnICaiIBUgFyAUIBpEAAAAAAAAIMCiICSiIBaioqKioDkDICAEIBUgFyAnICREAAAAAAAAEECiIBaioqKiIBsgJqKgOQMYIAQgFSAqoiAURAAAAAAAABBAoiAVIBQgFqKiIBcgGiAkoqIgJqKgoqA5AzggBEGQAWogDkHIAPwKAAAgAkHgAWokACAIIAMrA7AFIAgrAzCiIhU5AzAgCCAIEKIBRBHqLYGZl3E9oiIUIBUgFCAVZBsiFUQAAAAAAADwvyAVvUL///////////8Ag0KAgICAgICA+P8AVBsiFTkDMCAIIBUgCCsDOCIUIBQgFWMbOQM4IAgoAlxBA0kNAEEAIQ4jAEEgayIKQQI2AhwgCkKAgICAEDcCFCAFIgRBGGohBwNAIApBFGogDmooAgAhAiAKQQI2AhAgCkKAgICAEDcCCEEIQRAgAkEBRhtBACACGyEQQQAhD0EAIQkDQCAEIQICQAJAAkAgCkEIaiAPaigCACINDgICAAELIAchAgwBCyAEQTBByAAgDUECRhtqIQILIAkgAiAQaisDAEQAAAAAAAAAAGFqIQkgD0EEaiIPQQxHDQALIAlBAkYEQCAOQQRqIg5BDEcNAQsLIAlBAkYEQCAIQegBaiICIAtB6AFqELkEIAhB+AFqIAtB+AFqELgEIAhBiAJqIAtBiAJqELcEIAgoAuwBIQkgAyACNgLsBCADIAU2AugEQQAhBCMAQTBrIgckACAJBEAgBiECA0AgByAEQTBsIgYgAigCBCIFKAIAaiACKAIAENsEIAUoAgAgBmogB0Ew/AoAACAEQQFqIgQgCUcNAAsLIAdBMGokAAwBCyAIKAJcQQNJDQAgCEHoAWoiAiALQegBaiIEELkEIAJBEGogBEEQahC4BCACQSBqIARBIGoQtwQgA0EANgLwBCADQgA3AugEIANBADYC0AIgA0IANwLIAiAIIANB6ARqIANByAJqQQAQzwIgAyADKQLoBDcCwAIgAiADQcACahC2BCADKALIAiICBEAgAhAiCyADKALoBCICRQ0AIAIQIgsgA0HABmokAEGoAhAjIgJB2JMCNgIAIAJCADcCBCACQRBqIAwQowEhBCAMIAI2ApwCIAwgBDYCmAIgAUEMaiAMQZgCahBOAkAgDCgCnAIiAkUNACACIAIoAgQiBEEBazYCBCAEDQAgAiACKAIAKAIIEQAAIAIQJAsgDBA6GiABQgA3AyAgAUKAgICAgICA+D83AxggAUIANwMoIAFCADcDMCABQgA3A0AgAUKAgICAgICA+D83AzggAUIANwNIIAFCADcDUCABQgA3A2AgAUKAgICAgICA+D83A1ggAUIANwNoIAFCADcDcAsgACABKAIMNgIAIAAgASgCECIANgIEIAAEQCAAIAAoAgRBAWo2AgQLIAxBsAJqJAAL9QEBBH8jAEEQayIDJAAgACgCABogAQRAIAAoAggiAiACKAIAKAIMEQQAIQIgAUEANgIMIAFBADYCBCABIAIgAkEAR2siAjYCACABIAJBC2w2AggLAkAgACgCCCICIAIoAgAoAggRBABBA0YNACADQQhqIgIgAEEIaiIEKAIAIgUgASAFKAIAKAIAEQMAIAQgAhBOIAMoAgwiAUUNACABIAEoAgQiAkEBazYCBCACDQAgASABKAIAKAIIEQAAIAEQJAsgACgCCAJAIAAoAgwiAEUNACAAKAIEQX9HDQAgACAAKAIAKAIIEQAAIAAQJAsgA0EQaiQAC7EEAQZ/IwBBIGsiAiQAIABBADYCTCAAQoCAgICAgIB4NwMoIABCgICAgICAgHg3AyAgAEKAgICAgICAeDcDGCAAQoCAgICAgID4/wA3AxAgAEKAgICAgICA+P8ANwMIIABCgICAgICAgPj/ADcDACAAQcgAahBxIABB2ABqIgMQOCAAQegAahA4IABB+ABqEDggAxDvAiAAQQA2ApwBIABBmAFqEHEgAEEANgKsASAAQagBahBxIABBADYCvAEgAEG4AWoQkwEgAkIANwIIIAJBfzYCACACQgA3AhggAkIANwIQIAIgAkEIaiIENgIEIABBfzYCyAEgAEHMAWogACgC0AEQbyAAIAIoAgQ2AswBIAAgAigCCCIFNgLQASAAIAIoAgwiBjYC1AEgAEHQAWohAyAAQcgBaiEHAkAgBkUEQCAAIAM2AswBDAELIAUgAzYCCCACQgA3AgggAiAENgIECyACQQRqAkAgAiAHRwRAIAAoAtgBIgQEQCAEECILIAAgAigCEDYC2AEgACACKAIUNgLcASAAIAIoAhg2AuABDAELIAIoAhAiBEUNACAEECILIAJBADYCGCACQgA3AhAgAigCCBBvIAAoAugBIgMEQCADECILIABBADYC8AEgAEIANwPoASAAKAL4ASIDBEAgAxAiCyAAQQA2AoACIABCADcD+AEgACgCiAIiAwRAIAMQIgsgAEEANgKQAiAAQgA3A4gCIAAgATYCRCACQSBqJAALUgEEfyAAKAIAIQECQCAAKAIEIgNFBEAMAQsgA0ECdCIEECchAiAERQ0AIAIgASAE/AoAAAsgACABBH8gARAiIAAoAgQFIAMLNgIIIAAgAjYCAAuQAQECfyMAQRBrIgMkAEEkECMiAkIANwIMIAJBhJYCNgIAIAJCADcCBCACQgA3AhQgAkIANwIcIABCADcCCCAAIAI2AgQgACACQQxqNgIAIABCADcCECABKAIAGiAAQQhqIAFBCGoQXiADQQhqIAFBEGoQfyADIAMpAgg3AwAgAEEQaiADEOcCIANBEGokACAACzcBAn8CQCAAKAIEIgFFDQAgASABKAIEIgJBAWs2AgQgAg0AIAEgASgCACgCCBEAACABECQLIAALBgAgABAiC3IBBH8gACgCBCIDIAFBAXRLIANBEEtxAkAgASADTQ0AIAAgARAlIAEgACgCBCIEayIDQQBMDQAgACgCACAEQQJ0aiEEA0AgBCACNgIAIARBBGohBCADQQFLIANBAWshAw0ACwsgACABNgIEBEAgABAtCwtgACAAIAM2AhBBACEDIABBADYCDAJAIAEEQCABQYCAgIABTw0BIAFBBHQQIyEDCyAAIAM2AgAgACADIAJBBHRqIgI2AgggACADIAFBBHRqNgIMIAAgAjYCBCAADwsQcgALVwEDfyAAKAIIIAFJBEAgAUEYbBAnIQQgACgCACECAkAgACgCBCIDRQ0AIANBGGwiA0UNACAEIAIgA/wKAAALIAIEQCACECILIAAgATYCCCAAIAQ2AgALC6QBAwF8AX4BfyAAvSICQjSIp0H/D3EiA0GyCE0EfCADQf0HTQRAIABEAAAAAAAAAACiDwsCfCAAmSIARAAAAAAAADBDoEQAAAAAAAAww6AgAKEiAUQAAAAAAADgP2QEQCAAIAGgRAAAAAAAAPC/oAwBCyAAIAGgIgAgAUQAAAAAAADgv2VFDQAaIABEAAAAAAAA8D+gCyIAmiAAIAJCAFMbBSAACwtXAQN/IAAoAgggAUkEQCABQQxsECchBCAAKAIAIQICQCAAKAIEIgNFDQAgA0EMbCIDRQ0AIAQgAiAD/AoAAAsgAgRAIAIQIgsgACABNgIIIAAgBDYCAAsLPQECfyAAKAIEIgIgACgCCCIBRwRAIAAgASACIAFrQQ9qQXBxajYCCAsgACgCACIBBEAgACgCDBogARAiCwu7CwEJfyAAIAFByAD8CgAAIABBADYCUCAAQgA3A0gCQCABKAJMIgNFDQAgASgCSCEFIANBGGwiBBAnIQIgBEUNACACIAUgBPwKAAALIAAgAzYCUCAAIAM2AkwgACACNgJIQQAhBCMAQRBrIgIkACAAQdgAaiIDQgA3AgggA0IANwIAIAEoAlghCSABKAJcIQUgAkEANgIAQQQQIyIHQQE2AgAgAiAFNgIIIAIgBTYCBCACIAc2AgwCQCAFRQ0AIAIgBUECdCIIECciBDYCACAIRQ0AIAQgCSAI/AoAAAsgAiADRwRAIAMgBzYCDCACQQA2AgwgAyAFNgIIIAMgBTYCBCADIAQ2AgAgAkEANgIIIAJCADcCAAsgAhBJIANCADcCGCADQgA3AhAgASgCaCEJIAEoAmwhBUEAIQQgAkEANgIAQQQQIyIHQQE2AgAgAiAFNgIIIAIgBTYCBCACIAc2AgwgA0EQaiEKAkAgBUUNACACIAVBAnQiCBAnIgQ2AgAgCEUNACAEIAkgCPwKAAALIAIgCkcEQCADIAc2AhwgAkEANgIMIAMgBTYCGCADIAU2AhQgAyAENgIQIAJBADYCCCACQgA3AgALIAIQSSADQgA3AiggA0IANwIgIAEoAnghCSABKAJ8IQVBACEEIAJBADYCAEEEECMiB0EBNgIAIAIgBTYCCCACIAU2AgQgAiAHNgIMIANBIGohCgJAIAVFDQAgAiAFQQJ0IggQJyIENgIAIAhFDQAgBCAJIAj8CgAACyACIApHBEAgAyAHNgIsIAJBADYCDCADIAU2AiggAyAFNgIkIAMgBDYCICACQQA2AgggAkIANwIACyACEEkgAkEQaiQAIABBADYCkAEgAEIANwOIAQJAIAEoAowBIgNFDQAgASgCiAEhBCADQQN0IgIQJyEGIAJFDQAgBiAEIAL8CgAAC0EAIQIgAEEANgKgASAAQgA3A5gBIAAgAzYCkAEgACADNgKMASAAIAY2AogBQQAhBgJAIAEoApwBIgNFDQAgASgCmAEhBSADQRhsIgQQJyEGIARFDQAgBiAFIAT8CgAACyAAQQA2ArABIABCADcDqAEgACADNgKgASAAIAM2ApwBIAAgBjYCmAECQCABKAKsASIDRQ0AIAEoAqgBIQQgA0EYbCIGECchAiAGRQ0AIAIgBCAG/AoAAAtBACEGIABBADYCwAEgAEIANwO4ASAAIAM2ArABIAAgAzYCrAEgACACNgKoAUEAIQICQCABKAK8ASIDRQ0AIAEoArgBIQUgA0EFdCIEECchAiAERQ0AIAIgBSAE/AoAAAsgACADNgLAASAAIAM2ArwBIAAgAjYCuAEgASgCyAEhAiAAQgA3A9ABIAAgAjYCyAEgACAAQdABajYCzAEgAEHMAWogASgCzAEgAUHQAWoQgwMgAEEANgLgASAAQgA3A9gBAkAgASgC3AEiA0UNACABKALYASEEIANBBHQiAhAnIQYgAkUNACAGIAQgAvwKAAALQQAhAiAAQQA2AvABIABCADcD6AEgACADNgLgASAAIAM2AtwBIAAgBjYC2AFBACEGAkAgASgC7AEiA0UNACABKALoASEFIANBMGwiBBAnIQYgBEUNACAGIAUgBPwKAAALIABBADYCgAIgAEIANwP4ASAAIAM2AvABIAAgAzYC7AEgACAGNgLoAQJAIAEoAvwBIgNFDQAgASgC+AEhBCADQQJ0IgYQJyECIAZFDQAgAiAEIAb8CgAAC0EAIQQgAEEANgKQAiAAQgA3A4gCIAAgAzYCgAIgACADNgL8ASAAIAI2AvgBIAEoAowCIgIEQCABKAKIAiIBIAJBA3QiA2ohBSADECciBCEGA0AgBiABKAIANgIAIAYgASgCBDYCBCAGQQhqIQYgAUEIaiIBIAVHDQALCyAAIAI2ApACIAAgAjYCjAIgACAENgKIAiAAC40CAQR/IwBBEGsiAiQAIAAoAgwoAgBBAk4EQCAAKAIAIQQgACgCBCEBIAJBADYCAEEEECMiA0EBNgIAIAIgATYCCCACIAE2AgQgAiADNgIMAkAgAUUNACACIAFBAnQiARAnIgM2AgAgAUUNACADIAQgAfwKAAALIAAgAkcEQAJAIAAoAgwiAUUNACABIAEoAgAiAUEBazYCACABQQFKDQAgACgCDCIBBEAgARAiCyAAQQA2AgwgACgCACIBRQ0AIAEQIgsgACACKAIMNgIMIAJBADYCDCAAIAIoAgA2AgAgACACKAIENgIEIAAgAigCCDYCCCACQQA2AgggAkIANwIACyACEEkLIAJBEGokAAtXAQN/IAAoAgggAUkEQCABQQR0ECchBCAAKAIAIQICQCAAKAIEIgNFDQAgA0EEdCIDRQ0AIAQgAiAD/AoAAAsgAgRAIAIQIgsgACABNgIIIAAgBDYCAAsLogIBAX8gACgCiAIiAQRAIAEQIgsgAEEANgKQAiAAQgA3A4gCIAAoAvgBIgEEQCABECILIABBADYCgAIgAEIANwP4ASAAKALoASIBBEAgARAiCyAAKALYASIBBEAgARAiCyAAQQA2AuABIABCADcD2AEgAEHMAWogACgC0AEQbyAAKAK4ASIBBEAgARAiCyAAQQA2AsABIABCADcDuAEgACgCqAEiAQRAIAEQIgsgAEEANgKwASAAQgA3A6gBIAAoApgBIgEEQCABECILIABBADYCoAEgAEIANwOYASAAKAKIASIBBEAgARAiCyAAQQA2ApABIABCADcDiAEgAEH4AGoQSSAAQegAahBJIABB2ABqEEkgACgCSCIBBEAgARAiCyAAC7kCACAAQgA3A0AgAEKAgICAgICA+L9/NwM4IABCgICAgICAgPi/fzcDMCAAQoCAgICAgIB4NwMoIABCgICAgICAgHg3AyAgAEKAgICAgICAeDcDGCAAQoCAgICAgID4/wA3AxAgAEKAgICAgICA+P8ANwMIIABCgICAgICAgPj/ADcDACAAQgA3A0ggAEEANgJQIABB2ABqEKECGiAAQgA3A9ABIABBfzYCyAEgAEEANgLAASAAQgA3A7gBIABBADYCsAEgAEIANwOoASAAQQA2AqABIABCADcDmAEgAEEANgKQASAAQgA3A4gBIABBADYCkAIgAEIANwOIAiAAQQA2AoACIABCADcD+AEgAEEANgLwASAAQgA3A+gBIABBADYC4AEgAEIANwPYASAAIABB0AFqNgLMASAAC1UBAn8gAEEANgIIIABCADcCACABKAIEIgIgASgCACIDRwRAIAAgAiADayIBQQR1EI8DIAAoAgQhAiABBEAgAiADIAH8CgAACyAAIAEgAmo2AgQLIAALoAIBBX8jAEEgayIFJAACQAJAIAAoAgQiAiAAKAIIIgNJBEAgAiABKAIANgIAIAJBBGohAQwBCyACIAAoAgAiBGtBAnUiBkEBaiICQYCAgIAETw0BIAVBDGpB/////wMgAyAEayIDQQF1IgQgAiACIARJGyADQfz///8HTxsgBiAAEEoiAigCCCIDIAEoAgA2AgAgAiADQQRqNgIIIAIoAgQgACgCBCAAKAIAIgNrIgFrIQQgAQRAIAQgAyAB/AoAAAsgACgCACEDIAAgBDYCACACIAM2AgQgACACKAIIIgE2AgQgAiADNgIIIAAoAgghBCAAIAIoAgw2AgggAiADNgIAIAIgBDYCDCACEFMLIAAgATYCBCAFQSBqJAAPCxAmAAvQAQIBfAF/IwBBEGsiAiQARAAAAAAAAPh/IQECQCAAvUL///////////8Ag0L/////////9/8AVg0ARAAAAAAAAAAAIQEgAEQAAAAAAAAAAGMEQCAAmhA+miEBDAELIACZRAAAAAAAgFZAIAJBDGoQpQNEGC1EVPshCUCiRAAAAAAAgGZAoyEAAkACQAJAAkAgAigCDEEEbw4EAAECAwQLIAAQqAEhAQwDCyAAEJcBIQEMAgsgABCoAZohAQwBCyAAEJcBmiEBCyACQRBqJAAgAQspACAAIAEoAgQgAhASIgEQGzYCBCAAQZygAjYCACABQQlPBEAgARABCwujAQEBf0EkECMiAkIANwIMIAJBhJYCNgIAIAJCADcCBCACQgA3AhQgAkIANwIcIABCADcDGCAAQoCAgICAgID4PzcDECAAQgA3AwggACACNgIEIAAgAkEMajYCACAAQgA3AyAgAEIANwMwIABCgICAgICAgPg/NwMoIABCADcDOCABKAIAGiAAQQhqIAFBCGoQXiAAQRBqIAFBEGpBMPwKAAAgAAsOACAAQQhqEC8aIAAQLwsCAAtyAQF/QSQQIyICQgA3AgwgAkGElgI2AgAgAkIANwIEIAJCADcCFCACQgA3AhwgACACNgIEIAAgAkEMajYCACAAIAEoAgA2AgggACABKAIEIgI2AgwgAgRAIAIgAigCBEEBajYCBAsgAEIANwIQIAEQLxoLVwEDfyAAKAIIIAFJBEAgAUEDdBAnIQQgACgCACECAkAgACgCBCIDRQ0AIANBA3QiA0UNACAEIAIgA/wKAAALIAIEQCACECILIAAgATYCCCAAIAQ2AgALCy0BAX8gACgCACIBBEAgACABNgIEIAAoAggaIAEQIiAAQQA2AgggAEIANwIACwuLAQEDfyMAQRBrIgMkAEGoAhAjIgJBoJACNgIAIAJCADcCBCACQRBqEDshBCACIAE2AlQgAyACNgIMIAMgBDYCCCACIAIoAgRBAWo2AgQgAyADKQIINwMAIAAgAxBIGiACIAIoAgQiAEEBazYCBCAARQRAIAIgAigCACgCCBEAACACECQLIANBEGokAAs+ACADBEAgACADEKMCIAAoAgQhAyABIAJHBEADQCADIAEQPEEMaiEDIAFBDGoiASACRw0ACwsgACADNgIECwt5AQJ/IwBBEGsiAyQAQSQQIyICQgA3AgwgAkGElgI2AgAgAkIANwIEIAJCADcCFCACQgA3AhwgACACNgIEIAAgAkEMajYCACADQQRqIAEQWSAAIAMoAgQ2AgggACADKAIINgIMIABCADcCECABEC8aIANBEGokACAAC1gBAX8C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IAlBADYCWCAJQgA3AlAgCUEANgJIIAlCADcCQCAAIAlB0ABqIgIgCUFAayIDIAEQzwICQAJAIAFFBEAgACACIANBABDjAwwBCyABLQAQDQEgACAJQdAAaiAJQUBrIAEQ4wMgAS0AEA0BCyAAKAJcRQRAIAAoAugBIgEEQCABECILIABBADYC8AEgAEIANwPoASAAKAL4ASIBBEAgARAiCyAAQQA2AoACIABCADcD+AEgACgCiAIiAQRAIAEQIgsgAEEANgKQAiAAQgA3A4gCDAELIAkgCSkCUDcCCCAJIAkpAkA3AgACQCAJQRBqIAlBCGogCRDiAyICIABB6AFqRwRAIAAoAugBIgMEQCADECILIAAgAigCADYC6AEgACACKAIENgLsASAAIAIoAgg2AvABIAJBADYCCCACQgA3AgAgACgC+AEiAwRAIAMQIgsgACACKAIQNgL4ASAAIAIoAhQ2AvwBIAAgAigCGDYCgAIgAkEANgIYIAJCADcCECAAKAKIAiIDBEAgAxAiCyAAIAIoAiA2AogCIAAgAigCJDYCjAIgACACKAIoNgKQAgwBCyACKAIgIgNFDQAgAxAiCyACQQA2AiggAkIANwIgIAIoAhAiAwRAIAMQIgsgAkEANgIYIAJCADcCECACKAIAIgMEQCADECILAnwgACgC7AFFBEBEAAAAAAAA8P8hD0QAAAAAAADw/yEQRAAAAAAAAPD/IRFEAAAAAAAA8H8hEkQAAAAAAADwfyETRAAAAAAAAPB/DAELIAAoAugBIgMrA1ghDyADKwNQIRAgAysDSCERIAMrAzghEiADKwMwIRMgAysDQAshDiAAIA85AyggACAQOQMgIAAgETkDGCAAIA45AxAgACASOQMIIAAgEzkDAEEAIQJBACEGIwBBIGsiByQAAkAgACgCQCIMRQ0AIAAoAowBIQsgB0EANgIYIAdCADcCECAHQRBqIAsgDG4iBEEAEDEgACgCXCEDAkACQCABBEACQCADRQ0AIAEtABBBAXENAANAIAZBAWoiBkGACEYEQEEAIQYgAS0AEA0CCyAHKAIQIAAoAnggAkECdGooAgBBAnRqQQE2AgAgAkEBaiICIANHDQALCyABLQAQRQ0BDAILIANFDQADQCAHKAIQIAAoAnggAkECdGooAgBBAnRqQQE2AgAgAkEBaiICIANHDQALCyAHQQA2AgggB0IANwIAIAcgBEEBakEAEDEgBygCACEKAkAgBygCFCIDRQ0AIAogBygCECIIKAIAIgU2AgQgA0EBRg0AIAggA0ECdGohAyAKQQRqIQIgCEEEaiEGA0AgAiAGKAIAIAVqIgU2AgQgAkEEaiECIAZBBGoiBiADRw0ACwsgAEGIAWohCAJAIAAoAowBIgVFDQAgCCgCACEDIAVBA3QiAhAnIQ0gAkUNACANIAMgAvwKAAALIAggCiAEQQJ0aigCACAMbCIDEEQgACADNgKMASAFQRFJIAUgA0EBdE1yRQRAIAgQlAELAkACQAJAAkAgAQRAIAsgDEkNAiABLQAQQQFxDQIgDEEDdCELIAgoAgAhCkEAIQYgBygCACEIIAcoAhAhBUEAIQIDQCAGQQFqIgZBgAhGBEBBACEGIAEtABANBAsCQCAMQQBMDQAgBSACQQJ0IgNqKAIARSALRXINACAKIAMgCGooAgAgDGxBA3RqIA0gAiALbGogC/wKAAALIAJBAWoiAiAERw0ACwwBCyALIAxJDQIgDEEDdCEGIAgoAgAhC0EAIQIgBygCACEKIAcoAhAhCCAMQQBMIQUDQAJAIAUNACAIIAJBAnQiA2ooAgBFIAZFcg0AIAsgAyAKaigCACAMbEEDdGogDSACIAZsaiAG/AoAAAsgAkEBaiICIARHDQALCyABRQ0BCyABLQAQDQEgACgCXCIKRQ0BIAEtABBBAXENASAAKAJ4IQhBACECIAcoAgAhBUEAIQADQCACQQFqIgJBgAhGBEBBACECIAEtABANAwsgCCAAQQJ0aiIDIAUgAygCAEECdGooAgA2AgAgAEEBaiIAIApHDQALDAELIAAoAlwiBUUNACAAKAJ4IQJBACEAIAcoAgAhAwNAIAIgAEECdGoiASADIAEoAgBBAnRqKAIANgIAIABBAWoiACAFRw0ACwsgDQRAIA0QIgsgBygCACIARQ0AIAAQIgsgBygCECIARQ0AIAAQIgsgB0EgaiQACyAJKAJAIgAEQCAAECILIAkoAlAiAEUNACAAECILIAlB4ABqJAALVwEDfyAAKAIIIAFJBEAgAUEFdBAnIQQgACgCACECAkAgACgCBCIDRQ0AIANBBXQiA0UNACAEIAIgA/wKAAALIAIEQCACECILIAAgATYCCCAAIAQ2AgALC8gBAQR/IwBBIGsiBCQAAkAgACgCCCAAKAIAIgJrQQxtIAFJBEAgAUHWqtWqAU8NASAEQQxqIAEgACgCBCACa0EMbSAAEGEiASgCBCAAKAIEIAAoAgAiBWsiAkF0bUEMbGohAyACBEAgAyAFIAL8CgAACyAAKAIAIQIgACADNgIAIAEgAjYCBCAAIAEoAgg2AgQgASACNgIIIAAoAgghAyAAIAEoAgw2AgggASACNgIAIAEgAzYCDCABENUBCyAEQSBqJAAPCxAmAAtTAQF/IAEoAhAiAkUEQCAAQQA2AhAgAA8LIAEgAkYEQCAAIAA2AhAgASgCECIBIAAgASgCACgCDBEBACAADwsgACACIAIoAgAoAggRBAA2AhAgAAuABQIGfAN/AkAgACgCTCIIBEAgACgCSCIHIAhBGGxqIQlEAAAAAAAA8H8hAkQAAAAAAADwfyEDIAchCEQAAAAAAADwfyEBA0AgCCsDECEFIAgrAwghBiAIKwMAIQQCQCABIAFiBEAgBSECIAYhAyAEIQEMAQsgBCAEYg0AIAIgBSACIAVjGyECIAMgBiADIAZjGyEDIAEgBCABIARjGyEBCyAIQRhqIgggCUcNAAsgACACOQMQIAAgAzkDCCAAIAE5AwBEAAAAAAAA8P8hAkQAAAAAAADw/yEDRAAAAAAAAPD/IQEDQCAHKwMQIQUgBysDCCEGIAcrAwAhBAJAIAEgAWIEQCAFIQIgBiEDIAQhAQwBCyAEIARiDQAgBSACIAIgBWMbIQIgBiADIAMgBmMbIQMgBCABIAEgBGMbIQELIAdBGGoiByAJRw0ACwwBCyAAQoCAgICAgID4/wA3AxAgAEKAgICAgICA+P8ANwMIIABCgICAgICAgPj/ADcDAEQAAAAAAADw/yECRAAAAAAAAPD/IQNEAAAAAAAA8P8hAQsgACACOQMoIAAgAzkDICAAIAE5AxhBACEHAkAgACkDAEL///////////8Ag0L/////////9/8AVg0AIAApAwhC////////////AINCgICAgICAgPj/AFoNACAAKQMQQv///////////wCDQoCAgICAgID4/wBaDQAgACkDGEL///////////8Ag0KAgICAgICA+P8AVCAAKQMgQv///////////wCDQoCAgICAgID4/wBUcSAAKQMoQv///////////wCDQoCAgICA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ADcDACAAQQA2AhwgACAENgIYIAMgADYCFCAAIAM2AhAgACACNgIUIAIgADYCECAFRQRAIAQgADYCEAsgAAtgACAAIAM2AhBBACEDIABBADYCDAJAIAEEQCABQavVqtUATw0BIAFBGGwQIyEDCyAAIAM2AgAgACADIAJBGGxqIgI2AgggACADIAFBGGxqNgIMIAAgAjYCBCAADwsQcgALVgEFfyAAKAIAIgIoAgAiAQRAIAEhAyACIQQgAigCBCIFIAFHBEADQCABIAVBCGsQLyIFRw0ACyAAKAIAIgQoAgAhAwsgAiABNgIEIAQoAggaIAMQIgsLHQEBf0EEEHQiAEGQ4gE2AgAgAEGc4gFBqwMQCwALkwEBBH8gACgCBCIDIAFBAXRLIANBEEtxAkAgASADTQ0AIAAgARAzIAEgACgCBCIDa0EYbCIEQQBMDQAgBEEYbiEEIAAoAgAgA0EYbGohAwNAIAMgAikDEDcDECADIAIpAwg3AwggAyACKQMANwMAIANBGGohAyAEQQFLIARBAWshBA0ACwsgACABNgIEBEAgABBxCwuKAwEFfyMAQSBrIgUkAAJAAkAgACgCBCICIAAoAggiA0kEQCACQQA2AgggAkIANwIAIAIgASgCADYCACACIAEoAgQ2AgQgAiABKAIINgIIIAFBADYCCCABQgA3AgAgAkEMaiEBDAELIAIgACgCACIEa0EMbSIGQQFqIgJB1qrVqgFPDQEgBUEMakHVqtWqASADIARrQQxtIgNBAXQiBCACIAIgBEkbIANBqtWq1QBPGyAGIAAQYSICKAIIIgNBADYCCCADQgA3AgAgAyABKAIANgIAIAMgASgCBDYCBCADIAEoAgg2AgggAUEANgIIIAFCADcCACACIANBDGo2AgggAigCBCAAKAIEIAAoAgAiA2siAUF0bUEMbGohBCABBEAgBCADIAH8CgAACyAAKAIAIQMgACAENgIAIAIgAzYCBCAAIAIoAggiATYCBCACIAM2AgggACgCCCEEIAAgAigCDDYCCCACIAM2AgAgAiAENgIMIAIQ1QELIAAgATYCBCAFQSBqJAAPCxAmAAvcAgEEfyMAQRBrIgMkACAAQZCcAjYCACAAEN4BIABBJGogACgCJBC9AyAAIAAoAjQiASAAKAI4IgJHBH8DQCABKAIAIgQEQCAEECILIAFBBGoiASACRw0ACyAAKAI0BSABCzYCOCAAQQA6AHwgAEEAOgAYIAAgACgCJDYCMCAAKAKAASIBBEAgACABNgKEASAAKAKIARogARAiCyAAKAJoIgEEQCAAIAE2AmwgACgCcBogARAiCyAAKAJcIgEEQCAAIAE2AmAgACgCZBogARAiCyAAKAJQIgEEQCAAIAE2AlQgACgCWBogARAiCyAAKAJAIgEEQCAAIAE2AkQgACgCSBogARAiCyAAKAI0IgEEQCAAIAE2AjggACgCPBogARAiCyADIABBJGo2AgwgAygCDCIBKAIAIgIEQCABIAIQvQMgAygCDCIBKAIAIAEoAggaECILIANBEGokACAAC40BAQF/QSQQIyICQgA3AgwgAkGElgI2AgAgAkIANwIEIAJCADcCFCACQgA3AhwgAEIANwMYIABCgICAgICAgPg/NwMQIABCADcDCCAAIAI2AgQgACACQQxqNgIAIABCADcDICAAQgA3AzAgAEKAgICAgICA+D83AyggAEIANwM4IABBCGogARBeIAEQLxoLBwAgABEOAAsYAQF/QQwQIyIAQQA2AgggAEIANwIAIAALIAAgACgCBCABEBIiACACKAIEEBUgAEEJTwRAIAAQAQsLSgECfyAAKAIEIgIgACgCCCIBRwRAA0AgACABQQhrIgE2AgggARAvGiACIAAoAggiAUcNAAsLIAAoAgAiAQRAIAAoAgwaIAEQIgsLHQAgAQRAIAAgASgCABBvIAAgASgCBBBvIAEQIgsL+wMBB38CQAJ/QQIgAUEBRg0AGiABIAEgAUEBa3FFDQAaIAEQ9gELIgMgACgCBCIBTQRAIAEgA00NASAAKAIMsyAAKgIQlY38ASECIAEgAyABQQNJIAFpQQFLcgR/IAIQ9gEFIAJBAUEgIAJBAWtna3QgAkECSRsLIgIgAiADSRsiA00NAQsgACEBAkACQCADBEAgA0GAgICABE8NASADQQJ0IgAQIyEFIAEoAgAhAiABIAU2AgAgAgRAIAEoAgQaIAIQIiABKAIAIQULIAEgAzYCBCAABEAgBUEAIAD8CwALIAEoAggiAEUNAiABQQhqIQEgACgCBCECAkAgA2kiBEEBTQRAIAIgA0EBa3EhAgwBCyACIANJDQAgAiADcCECCyAFIAJBAnRqIAE2AgAgACgCACIBRQ0CIANBAWshByAEQQFLIQgDQCABKAIEIQQCQCAIRQRAIAQgB3EhBAwBCyADIARLDQAgBCADcCEECwJAIAIgBEYEQCABIQAMAQsgBSAEQQJ0aiIGKAIARQRAIAYgADYCACABIQAgBCECDAELIAAgASgCADYCACABIAYoAgAoAgA2AgAgBigCACABNgIACyAAKAIAIgENAAsMAgsgASgCACEAIAFBADYCACAABEAgASgCBBogABAiCyABQQA2AgQMAQsQcgALCwtSAQR/IAAoAgAhAQJAIAAoAgQiA0UEQAwBCyADQRhsIgQQJyECIARFDQAgAiABIAT8CgAACyAAIAEEfyABECIgACgCBAUgAws2AgggACACNgIACx0BAX9BBBB0IgBBiO4BNgIAIABByO4BQe0CEAsAC3EBAX8gAkUEQCAAKAIEIAEoAgRGDwsgACABRgRAQQEPCwJAIAAoAgQiAi0AACIARSAAIAEoAgQiAS0AACIDR3INAANAIAEtAAEhAyACLQABIgBFDQEgAUEBaiEBIAJBAWohAiAAIANGDQALCyAAIANGCw4AIABB0ABqECdB0ABqCxsBAX8gAARAIAAoAgAiAQRAIAEQIgsgABAiCwuiAgEFfyMAQSBrIgUkAAJAAkAgACgCBCICIAAoAggiA0kEQCACIAEQPEEMaiEBDAELIAIgACgCACIEa0EMbSIGQQFqIgJB1qrVqgFPDQEgBUEMakHVqtWqASADIARrQQxtIgNBAXQiBCACIAIgBEkbIANBqtWq1QBPGyAGIAAQYSICKAIIIAEQPBogAiACKAIIQQxqNgIIIAIoAgQgACgCBCAAKAIAIgNrIgFBdG1BDGxqIQQgAQRAIAQgAyAB/AoAAAsgACgCACEDIAAgBDYCACACIAM2AgQgACACKAIIIgE2AgQgAiADNgIIIAAoAgghBCAAIAIoAgw2AgggAiADNgIAIAIgBDYCDCACENUBCyAAIAE2AgQgBUEgaiQADwsQJgALgQECAn8BfCMAQRBrIgMkAEHwngItAABBAXFFBEBBAUHYiwJBARAGIQRB8J4CQQE6AABB7J4CIAQ2AgALIANBADYCDEHsngIoAgAgASACIANBDGpBABAFIQUgAygCDCEBIAAgBfwDNgIEIABBnKACNgIAIAEEQCABEAQLIANBEGokAAuoAQEDfyMAQaACayIDJAACQAJAIAEoAgAiBCgCkAEiAkUEQCABKAIEIgEgASgCBEEBajYCBAwBCyACIAIoAgxBAWo2AgwgBCgCkAEhAiABKAIEIgEgASgCBEEBajYCBCACRQ0AIAItABBBAUcNACADQQhqEDsiAUEONgJEIAAgARCjAUEBOgCYAiABEDoaDAELIABBADoAmAIgAEEAOgAACyADQaACaiQAC5UCAQN/IAACfwJAIAEoAgQiBEUEQCABQQRqIgUhAgwBCyACKAIAIQYDQCAEIgIoAhAiBSAGSgRAIAQhBSAEKAIAIgQNAQwCC0EAIAUgBk4NAhogAigCBCIEDQALIAJBBGohBQtBiAEQIyIEIAMoAgAoAgA2AhAgBEEYakEAQfAA/AsAIARCADcDKCAEQoCAgICAgID4PzcDICAEQX82AhggBEIANwMwIARCADcDOCAEQgA3A0ggBEKAgICAgICA+D83A0AgBEIANwNQIARCADcDWCAEQgA3A2ggBEKAgICAgICA+D83A2AgBEIANwNwIARCADcDeCAEQQA7AYABIAEgAiAFIAQQggFBAQs6AAQgACAENgIAC1YBBX8gACgCACICKAIAIgEEQCABIQMgAiEEIAIoAgQiBSABRwRAA0AgASAFQRhrECgiBUcNAAsgACgCACIEKAIAIQMLIAIgATYCBCAEKAIIGiADECILC0oBA38gACgCBCICIAFHBEADQCACQQxrIgQoAgAiAwRAIAJBCGsgAzYCACACQQRrKAIAGiADECILIAQiAiABRw0ACwsgACABNgIECwwAIAEgACgCABEEAAvzAgEFfyAAKAIEIAAoAgAiAmtBAnUiAyABSQRAIwBBIGsiBSQAAkACQAJAIAEgA2siAyAAKAIIIgQgACgCBCICa0ECdU0EQCAAIAMEfyADQQJ0IgAEQCACQQAgAPwLAAsgACACagUgAgs2AgQMAQsgAiAAKAIAIgJrQQJ1IgYgA2oiAUGAgICABE8NASAFQQxqQf////8DIAQgAmsiAkEBdSIEIAEgASAESRsgAkH8////B08bIAYgABBKIgEoAgghAiADQQJ0IgMEQCACQQAgA/wLAAsgASACIANqNgIIIAEoAgQgACgCBCAAKAIAIgRrIgJrIQMgAgRAIAMgBCAC/AoAAAsgACgCACECIAAgAzYCACABIAI2AgQgACABKAII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/AoAAAsgBCgCACEFIAQgBzYCACACIAU2AgQgBCACKAIINgIEIAIgBTYCCCAEKAIIIQcgBCACKAIMNgIIIAIgBTYCACACIAc2AgwgAhBuCyAGQSBqJAAMAQsQJgALIAEoAgAiAiABKAIEIgdGDQIDQCADQRRqIAIQigECQCADKAIgIgEgAygCJCIESQRAIAEgAygCFDYCACABIAMoAhg2AgQgAUEIaiEBDAELIAEgAygCHCIFa0EDdSIGQQFqIgFBgICAgAJPDQMgA0EsakH/////ASAEIAVrIgRBAnUiBSABIAEgBUkbIARB+P///wdPGyAGIANBHGoQSyEEIAMoAjQiASADKAIUNgIAIAEgAygCGDYCBCADIAFBCGo2AjQgAygCMCADKAIgIAMoAhwiBmsiAWshBSABBEAgBSAGIAH8CgAACyADIAMoAhwiBjYCMCADIAU2AhwgAygCNCEBIAMgBjYCNCADIAE2AiAgAygCJCEFIAMgAygCODYCJCADIAU2AjggBCAGNgIAIAQQbgsgAyABNgIgIAJBGGoiAiAHRw0ACwwCCyAAEOsBGgwCCxAmAAsgA0EsaiADQRxqIANBK2oQgAMgAyADKQIsIgk3AgwgA0IANwIsIAMgCTcDACAAIAMQQwJAIAMoAjAiAEUNACAAIAAoAgQiAUEBazYCBCABDQAgACAAKAIAKAIIEQAAIAAQJAsgAyADQRxqNgIsIANBLGoQZQsgA0FAayQACwsAIAAEQCAAECILCzAAIAEoAgAaIAAgASgCCDYCACAAIAEoAgwiADYCBCAABEAgACAAKAIEQQFqNgIECwtVACAAIAEoAgA2AgAgACABKAIENgIEIAFCADcCACAAIAEoAgg2AgggACABKAIMNgIMIAFCADcCCCAAIAEoAhA2AhAgACABKAIUNgIUIAFCADcCECAAC0UBAn8gACgCBCICIAAoAggiAUcEQCAAIAEgASACa0EYayICQRhwIAJrakEYazYCCAsgACgCACIBBEAgACgCDBogARAiCwuNAQECfCAAIAAQogFEEeotgZmXcT2iIgJEAAAAAAAA8L8gAkQAAAAAAADwv2QbIgJEAAAAAAAA8L8gAr1C////////////AINCgICAgICAgPj/AFQbIgI5AzAgAQRAIAAQogFEAAAAAAAAgD6iIgMgAiACIANjGyECCyAAIAIgACsDOCIDIAIgA2QbOQM4C4sDAQZ/IwBBIGsiAiQAQZiVAiIDIAMoAgAiA0EBajYCACACIAM2AgwgACADNgLIASAAKALcASEBIABB2AFqIgQgACgCXEEDbiIFEDkgACAFNgLcASABQRFJIAEgBUEBdE1yRQRAIAQQgwELIAAoAlwiAUEDbiEFIAFBA08EQCAEKAIAIQZBACEBA0AgBiABQQR0aiIEQX82AgggBCADNgIEIAQgAzYCACABQQFqIgEgBUcNAAsLIAAQ7gIhASAAQcwBaiIEIAAoAtABEG8gACAAQdABajYCzAEgAEIANwPQASACIAJBDGoiADYCFCACQRhqIAQgACACQRRqEHkgAigCGCIAQgA3AyggAEKAgICAgICA+D83AyAgACADNgIYIABCADcDMCAAQgA3AzggAEIANwNIIABCgICAgICAgPg/NwNAIABCADcDUCAAQgA3A1ggAEIANwNoIABCgICAgICAgPg/NwNgIABCADcDcCAAQgA3A3ggAEEAOgCAASAAIAE6AIEBIAJBIGokAAuLAQEBfwJAIAFFDQAgASgCBCIDBEAgAygCBEF/Rw0BCyAAKAIEIgAEQCAAIAAoAgRBAWo2AgQgACAAKAIIQQFqNgIIIAEoAgQhAwsgASAANgIEIAEgAjYCACADBEAgAxAkCyAARQ0AIAAgACgCBCIBQQFrNgIEIAENACAAIAAoAgAoAggRAAAgABAkCwvHAwIBfwx8IwBB0ABrIgIkACABKwNAIQMgASsDECEEIAErAyghBSABKwMwIQYgASsDOCEHIAIgASsDICIIIAErAwAiCaIgASsDCCIKIAErAxgiC6KhOQNIIAIgCiAGoiAHIAmioTkDQCACIAcgC6IgCCAGoqE5AzggAiAEIAuiIAUgCaKhOQMwIAIgAyAJoiAEIAaioTkDKCACIAUgBqIgAyALoqE5AyAgAiAFIAqiIAggBKKhOQMYIAIgByAEoiADIAqioTkDECACIAggA6IgByAFoqE5AwggAisDCCEEIAIrAxAhBSACKwMYIQYgAisDICEHIAIrAyghCCACKwMwIQkgAisDOCEKIAIrA0AhCyAAIAIrA0ggASsDECABKwM4IgMgASsDGCINoiABKwMgIgwgASsDMCIOoqGiIAErAwAgDCABKwNAIgyiIAMgASsDKCID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AoABIABCADcDeCAAIAEoAoQBNgKEASABQQA2AoQBIAAgASgCeDYCeCAAIAEoAnw2AnwgACABKAKAATYCgAEgAUEANgKAASABQgA3A3ggAEEANgKQASAAQgA3A4gBIAAgASgCiAE2AogBIAAgASgCjAE2AowBIAAgASgCkAE2ApABIAFBADYCkAEgAUIANwOIASAAQQA2AqABIABCADcDmAEgACABKAKYATYCmAEgACABKAKcATYCnAEgACABKAKgATYCoAEgAUEANgKgASABQgA3A5gBIABBADYCsAEgAEIANwOoASAAIAEoAqgBNgKoASAAIAEoAqwBNgKsASAAIAEoArABNgKwASABQQA2ArABIAFCADcDqAEgAEEANgLAASAAQgA3A7gBIAAgASgCuAE2ArgBIAAgASgCvAE2ArwBIAAgASgCwAE2AsABIAFBADYCwAEgAUIANwO4ASAAIAEoAsgBNgLIASAAIAEoAswBNgLMASAAIAEoAtABIgM2AtABIAAgASgC1AEiBDYC1AEgAEHQAWohAgJAIARFBEAgACACNgLMAQwBCyADIAI2AgggAUIANwPQASABIAFB0AFqNgLMAQsgAEEANgLgASAAQgA3A9gBIAAgASgC2AE2AtgBIAAgASgC3AE2AtwBIAAgASgC4AE2AuABIAFBADYC4AEgAUIANwPYASAAQQA2AvABIABCADcD6AEgACABKALoATYC6AEgACABKALsATYC7AEgACABKALwATYC8AEgAUEANgLwASABQgA3A+gBIABBADYCgAIgAEIANwP4ASAAIAEoAvgBNgL4ASAAIAEoAvwBNgL8ASAAIAEoAoACNgKAAiABQQA2AoACIAFCADcD+AEgAEEANgKQAiAAQgA3A4gCIAAgASgCiAI2AogCIAAgASgCjAI2AowCIAAgASgCkAI2ApACIAFBADYCkAIgAUIANwOIAiAAC44BAgJ/AXwjAEEQayICJABB6J4CLQAAQQFxRQRAQQJByIsCQQMQBiEDQeieAkEBOgAAQeSeAiADNgIACyACIAEpAgA3AwggAkEANgIEQeSeAigCAEEAQQAgAkEEaiACQQhqEAUhBCACKAIEIQEgACAE/AM2AgQgAEGcoAI2AgAgAQRAIAEQBAsgAkEQaiQAC5oBAQV/IABCADcCBCAAKAIAIQMgAEEANgIAIAAgASgCBCIEEDMgACAENgIEAkACQCABKAIEIgQEQCAAKAIAIQUgASgCACEGA0AgBSACQRhsaiIAIAMgBiACQQJ0aigCAEEYbGoiASkDEDcDECAAIAEpAwg3AwggACABKQMANwMAIAJBAWoiAiAERw0ACwwBCyADRQ0BCyADECILC4EBAQR/IABCADcCBCAAKAIAIQIgAEEANgIAIAAgASgCBCIEECUgACAENgIEAkACQCABKAIEIgQEQCAAKAIAIQAgASgCACEBA0AgACADQQJ0IgVqIAIgASAFaigCAEECdGooAgA2AgAgA0EBaiIDIARHDQALDAELIAJFDQELIAIQIgsL0gQBBH8gASAAIAFGIgM6AAwCQCADDQADQCABKAIIIgMtAAwNAQJAAkAgAygCCCICKAIAIgQgA0YEQAJAIAIoAgQiBUUNACAFLQAMDQAgA0EBOgAMIAIgACACRjoADCAFQQE6AAwMAgsCQCADKAIAIAFGBEAgAyEBDAELIAMgAygCBCIBKAIAIgA2AgQCQAJAAkAgAEUEQCABIAI2AggMAQsgACADNgIIIAMoAggiAigCACABIAI2AgggA0cNAQsgAiABNgIADAELIAIgATYCBAsgASADNgIAIAMgATYCCCABKAIIIgIoAgAhBAsgAUEBOgAMIAJBADoADCACIAQoAgQiADYCACAABEAgACACNgIICyAEIAIoAggiADYCCAJAIAAoAgAgAkYEQCAAIAQ2AgAMAQsgACAENgIECyAEIAI2AgQgAiAENgIIDwsgBEUNASAELQAMDQEgA0EBOgAMIAIgACACRjoADCAEQQE6AAwLIAIhASAAIAJHDQEMAgsLAkAgAygCACIEIAFHBEAgAyEEDAELIAMgBCgCBCIANgIAIAAEQCAAIAM2AgggAygCCCECCyAEIAI2AggCQCACKAIAIANGBEAgAiAENgIADAELIAIgBDYCBAsgBCADNgIEIAMgBDYCCCAEKAIIIQILIARBAToADCACQQA6AAwgAiACKAIEIgEoAgAiADYCBCAABEAgACACNgIICyABIAIoAggiADYCCAJAIAAoAgAgAkYEQCAAIAE2AgAMAQsgACABNgIECyABIAI2AgAgAiABNgIICwvgBQIFfAJ/IwBBEGsiBiQAAkAgAL1CIIinQf////8HcSIHQfvDpP8DTQRA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AgAhAiAAIAg2AgAgAkUNACACECILIAFBBGoiBSAGRw0ACwwBCyAAIANBAXYiBkECdCIIaiEHIAMgBUwEQCAAIAcgAiAGIAQQtQMgByABIAIgAyAGayAEIAhqIgIQtQMgCSADNgIMIAQgA0ECdGohBQJAIAQiASACIgNHBEADQCACIAVGBEAgASADRg0DA0AgASgCACEFIAFBADYCACAAKAIAIQIgACAFNgIAIAIEQCACECILIABBBGohACABQQRqIgEgA0cNAAsMAwsCQAJAAkAgASgCACIHKAIAIgYpAwgiCyACKAIAIggoAgAiCikDCCIMUgRAIAsgDFMNAQwCCyAGKQMAIAopAwBXDQELIAJBADYCACAAKAIAIQYgACAINgIAIAYEQCAGECILIAJBBGohAgwBCyABQQA2AgAgACgCACEGIAAgBzYCACAGBEAgBhAiCyABQQRqIQELIABBBGohACABIANHDQALCyACIAVGDQADQCACKAIAIQMgAkEANgIAIAAoAgAhASAAIAM2AgAgAQRAIAEQIgsgAEEEaiEAIAJBBGoiAiAFRw0ACwsgCUEMaiAEELQDDAELIAAgByACIAYgBCAFELABIAcgASACIAMgBmsiAyAEIAUQsAEgACAHIAEgAiAGIAMgBCAFELkCCyAJQRBqJAALHQECfyAAKAIEIAAoAgAiAmtBDG0EQCAAIAIQewsLFwAgAEHomgI2AgAgAEEEaiABENEEIAALNQEBfyABIAAoAgQiAkEBdWohASAAKAIAIQAgASACQQFxBH8gASgCACAAaigCAAUgAAsRBAALSgAgACABKAIANgIAIAAgASgCBDYCBCABQgA3AwAgACABKAIINgIIIAAgASgCDDYCDCABQgA3AwggAEEQaiABQRBqQTD8CgAAIAALvAUCBX8CfCMAQSBrIgUkAAJAAkACQCACDgMCAgABCyABQRBrKwMAIAArAwhjRQ0BIAUgACkDEDcDGCAFIAApAwg3AxAgBSAAKQMANwMIIAAgAUEYayIBKAIQNgIQIAAgASkDCDcDCCAAIAEpAwA3AwAgASAFKAIYNgIQIAEgBSkDEDcDCCABIAUpAwg3AwAMAQsgAkGAAUwEQCAAIAFGDQEgAEEYaiIDIAFGDQEgACEEA0AgAyEGIAQrAyAiCiAEKwMIYwRAIAQoAighByADKwMA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AAALIAAoAgAhAyAAIAQ2AgAgAiADNgIEIAAgAigCCCIBNgIEIAIgAzYCCCAAKAIIIQQgACACKAIMNgIIIAIgAzYCACACIAQ2AgwgAhCMAQsgACABNgIEIAVBIGokAA8LECYAC9gEAwV/AXwBfiMAQRBrIgYkAAJAAkACQCACDgMCAgABCyABQRBrIgErAwAgACsDAGRFDQEgBiAAKQMINwMIIAYgACkDADcDACAAIAEpAwg3AwggACABKQMANwMAIAEgBikDCDcDCCABIAYpAwA3AwAMAQsgAkGAAUwEQCAAIAFGDQEgAEEQaiIDIAFGDQEgACEEA0AgAyEFIAQrAxAiCiAEKwMAZARAIAQpAxghCyADIQIDQAJAIAIgBCIDKQMINwMIIAIgAykDADcDACAAIANGBEAgACEDDAELIAMhAiAKIANBEGsiBCsDAGQNAQsLIAMgCzcDCCADIAo5AwALIAEgBSIEQRBqIgNHDQALDAELIAIgAkEBdiIHayEIIAAgB0EEdCIJaiEFAkAgAiAETARAIAAgBSAHIAMQrwQgBSABIAggAyAJaiIBEK8EIAMgAkEEdGohBCABIQIDQCACIARGBEAgASADRg0EA0AgACADKQMINwMIIAAgAykDADcDACAAQRBqIQAgA0EQaiIDIAFHDQALDAQLAkAgAisDACADKwMAZARAIAAgAikDCDcDCCAAIAIpAwA3AwAgAkEQaiECDAELIAAgAykDCDcDCCAAIAMpAwA3AwAgA0EQaiEDCyAAQRBqIQAgASADRw0ACwwBCyAAIAUgByADIAQQxQEgBSABIAggAyAEEMUBIAAgBSABIAcgCCADIAQQ6wIMAQsgAiAERg0AA0AgACACKQMINwMIIAAgAikDADcDACAAQRBqIQAgAkEQaiICIARHDQALCyAGQRBqJAALvQQCBH8BfgJAAkACQCADDgMCAgABCyACKAIAKAIAIgIgAUEEayIBKAIAIgNBA3RqKQMAIAIgACgCACIEQQN0aikDAFoNASAAIAM2AgAgASAENgIADwsgA0GAAUwEQCAAIAFGDQEgAEEEaiIEIAFGDQEgAigCACgCACEGIAAhAwNAIAQiByECIAYgAygCBCIIQQN0aikDACIKIAYgAygCACIFQQN0aikDAFQEQANAAkAgAiAFNgIAIAAgAyIERgRAIAAhBAwB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AwggACACKQMANwMAIAJBGGohAgwBCyAAIAMpAxA3AxAgACADKQMINwMIIAAgAykDADcDACADQRhqIQMLIABBGGohACABIANHDQALDAELIAAgBSAHIAMgBBDLASAFIAEgCCADIAQQywEgACAFIAEgByAIIAMgBBCCAwwBCyACIARGDQADQCAAIAIpAxA3AxAgACACKQMINwMIIAAgAikDADcDACAAQRhqIQAgAkEYaiICIARHDQALCyAGQSBqJAALVgEDfyABIABrIgJBGG0hAwJAIAJBgRhOBEAgAyECA0AgAkEYbBBQIgQNAiACQQF2IgINAAsLIAAgASADQQBBABDLAQ8LIAAgASADIAQgAhDLASAEECILOAEBfyAABEAgACgCABDNASAAKAIEEM0BIAAoAhQiAQRAIAAgATYCGCAAKAIcGiABECILIAAQIgsL8gECCHwCfyABKwMAIQYgAisDACEHIAAgASsDCCIFIAMrAwgiCCACKwMIIgkgBaEiC5kgBCsDCCIKIAihIgyZYyIOGyAJIAogDhsgCCAFoSIFmSAKIAmhIgiZYyINGyALIAwgDhsgBSAIIA0bIAUgCKGjIgVEAAAAAAAAAAAgBb1C////////////AINCgICAgICAgPj/AFQbIgWioDkDCCAAIAYgByANGyAHIAahIAWioDkDACAAIAErAxAiBiACKwMQIgcgDRsgBSAHIAahoqA5AxAgACADKwMQIgYgBCsDECIHIA0bIAUgByAGoaKgOQMYC4UEAgZ/An0gAigCACEGIAACfwJAIAEoAgQiBEUNACABKAIAAn8gBEEBayAGcSAEaSIFQQFNDQAaIAYgBCAGSw0AGiAGIARwCyIHQQJ0aigCACICRQ0AIAIoAgAiAkUNACAEQQFrIQggBUEBSyEJA0ACQCAGIAIoAgQiBUcEQAJAIAlFBEAgBSAIcSEFDAELIAQgBUsNACAFIARwIQULIAUgB0cNAwwBCyACKAIIIAZHDQBBAAwDCyACKAIAIgINAAsLQQwQIyICIAY2AgQgAkEANgIAIAIgAygCADYCCAJAQQAgBCABKAIMQQFqsyIKIAEqAhAiCyAEs5ReGw0AIAEgBCAEQQFrcUEARyAEQQNJciAEQQF0ciIDIAogC5WN/AEiByADIAdLGxBwIAEoAgQiBCAEQQFrIgNxRQRAIAMg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IAMoAlhqKAIAIQ0gCyAJIAwQyAEgCyAKIAwQyAEgCyANIAMoAnggBWooAgAQyAEgAygCaCIJIAFBBWoiDEECdGogBSAJaiIFKAIAIg02AgAgCSANQQJ0aiAMNgIAIAkgAUEEaiIMQQJ0aiAONgIAIAUgDDYCACAJIAFBA2oiBUECdGogATYCACAJIAFBAnRqIAU2AgAgDkEDbSEFAkAgAygC3AEiCUUNACADKALYASIOIAVBBHRqIQEgAygC4AEiDCAJTQRAIAQgASkCCDcDECAEIAEpAgA3AwggDyAMQQF0QYABIAwbEDkgAyADKALcASIBQQFqNgLcASADKALYASABQQR0aiIBIAQpAxA3AgggASAEKQMINwIADAELIAMgCUEBajYC3AEgDiAJQQR0aiIJIAEpAgg3AgggCSABKQIANwIACwJAIAMoAqwBIglFDQAgAygCqAEiDCAFQRhsaiEBIAMoArABIgUgCU0EQCAEIAEpAxA3AxggBCABKQMINwMQIAQgASkDADcDCCARIAVBAXRBgAEgBRsQMyADIAMoAqwBIgFBAWo2AqwBIAMoAqgBIAFBGGxqIgEgBCkDGDcDECABIAQpAxA3AwggASAEKQMINwMADAELIAMgCUEBajYCrAEgDCAJQRhsaiIJIAEpAxA3AxAgCSABKQMINwMIIAkgASkDADcDAAsgAiAHRg0CIAMoAmghAgwDCyAFQXhBBCABQQNvQQJGG2ogCWooAgAiASAHRw0ACwsgAygCSCIFIApBGGxqIQECQCADKAJMIgkgAygCUCICTwRAIAQgASkDEDcDGCAEIAEpAwg3AxAgBCABKQMANwMIIANByABqIAJBAXRBgAEgAhsQMyADIAMoAkwiAUEBajYCTCADKAJIIAFBGGxqIgEgBCkDGDcDECABIAQpAxA3AwggASAEKQMINwMADAELIAMgCUEBajYCTCAFIAlBGGxqIgIgASkDEDcDECACIAEpAwg3AwggAiABKQMANwMACwJAIAMoApwBIgJFDQAgAygCmAEiDCAKQRhsaiEBIAMoAqABIgUgAk0EQCAEIAEpAxA3AxggBCABKQMINwMQIAQgASkDADcDCCADQZgBaiAFQQF0QYABIAUbEDMgAyADKAKcASIBQQFqNgKcASADKAKYASABQRhsaiIBIAQpAxg3AxAgASAEKQMQ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AAAAAAAA4H+iIQBB/RcgASABQf0XTxtB/g9rIQEMAQsgAUGBeEoNACAARAAAAAAAAGADoiEAIAFBuHBLBEAgAUHJB2ohAQwBCyAARAAAAAAAAGADoiEAQfBoIAEgAUHwaE0bQZIPaiEBCyAAIAFB/wdqrUI0hr+iCwoAIAAgABCnA6ILQwAgACAAIAGlIAG9Qv///////////wCDQoCAgICAgID4/wBWGyABIAC9Qv///////////wCDQoCAgICAgID4/wBYGwtNAgF/AXwjAEEQayIFJAAgBSAENgIIIAUgAzYCDCAAKAIQIgBFBEAQZgALIAAgASACIAVBDGogBUEIaiAAKAIAKAIYERgAIAVBEGokAAukAgICfwV+AkAgASgCEEUNAAJAIAEpAzggASkDKFUEQCABKQMwIAEpAyBVDQELIAAgARC9AiABKAIQIgNFDQEgAyAALQB1QQAgAUFAaxD9AUUNAUL///////////8AIQdCgICAgICAgICAfyEIAkAgASgCQCICIAEoAkQiAEYEQEKAgICAgICAgIB/IQVC////////////ACEGDAELQv///////////wAhBkKAgICAgICAgIB/IQUDQCACKQMIIgQgCCAEIAhVGyEIIAQgBiAEIAZTGyEGIAIpAwAiBCAFIAQgBVUbIQUgBCAHIAQgB1MbIQcgAkEQaiICIABHDQALCyABIAg3AzggASAFNwMwIAEgBjcDKCABIAc3AyALQQEhAgsgAgvtBgIGfwR+IwBBIGsiCCQAAkAgAEUNACAAKAIQIgQgAEYNACACRQRAIAQgACgCFEYNAQsgAxC2AyABBH8gAEEUagUgACgCECIAQRBqCygCACEGIAApAwAhCiAAKQMIIQsCQAJAAkAgAygCBCIEIAMoAggiBUkEQCAEIAs3AwggBCAKNwMAIARBEGohBAwBCyAEIAMoAgAiCWtBBHUiB0EBaiIEQYCAgIABTw0BIAhBDGpB/////wAgBSAJayIFQQN1IgkgBCAEIAlJGyAFQfD///8HTxsgByADEDIiBSgCCCIEIAs3AwggBCAKNwMAIAUgBEEQajYCCCAFKAIEIAMoAgQgAygCACIJayIEayEHIAQEQCAHIAkgBPwKAAALIAMoAgAhCSADIAc2AgAgBSAJNgIEIAMgBSgCCCIENgIEIAUgCTYCCCAD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BEAgAikDECASfbkgESAQfbmjDAELRP///////+//RP///////+9/IAIpAxAgElUbCzkDKCAEKAIALQAYQQJxRQRAIAIhBgwCC0EAIQYMAgtBACEGQQAhAiABQQJxDQELQegAECMiAUEAQegA/AsAIAFBATYCMCABQTRqQQBBKfwLACABIAQoAgAiAikDADcDACACKQMIIRAgAUEBNgIwIAEgEDcDCCABIAEpAwAiEjcDICABIAQoAgAoAhAiAjYCVCABIAIpAwg3AxggAikDACEQIAEgBDYCWCABIBA3AxAgAQJ8IAEpAxgiESABKQMIIhBSBEAgASkDECASfbkgESAQfbmjDAELRP///////+//RP///////+9/IAEpAxAgElUbCyIcOQMoAkAgBkUEQEEAIQYMAQsCQCAGKQMYIAYpAwhRBEAgBisDKET////////v/2ENAgwBCyAQIBFRBEAgHET////////vf2ENAgwBCyAGKwMoIBxjDQELIAYhAiABIQYMAQsgASECCyACQQE6AFwgAEEcaiEEAkAgACgCHCIBRQRAIAJCADcDQCAAIAI2AhwMAQsgASACEL8CBEADQAJAIAQoAgAiAUHEAGohBCABKAJEIgVFDQAgBSACEL8CDQELCwJAIAEoAmBBAkYEQCABKAJEIgFFDQELIAIgASgCRCIENgJEIAQEQCAEIAI2AkALIAIgATYCQCABIAI2AkQLDAELIAJBADYCQCACIAAoAhwiATYCRCABIAI2AkAgACACNgIcCwJAIAIoAlgtAAhBAUYEQEEAIQUgACgCHCEBAkAgACgCCARAIAEgAkcEQCACKAI4IQQgAigCNCEFA0ACQCABKAJYIgcoAgRBAUYEQCACIAQgASgCMGoiBDYCOAwBCyAHLQAIDQAgAiAFIAEoAjBqIgU2AjQLIAEoAkQiASACRw0ACwsMAQtBACEEAkAgASACRgRAQQAhAQwBCwNAAkAgASgCWCIHKAIEQQFGBEAgBEEBaiEEDAELIAUgBy0ACEEBc2ohBQsgASgCRCIBIAJHDQALIARBAXEhASAFQQFxIQQLIAIgATYCOCACIAQ2AjQLIAIoAjghAQJ/AkACQAJAIAAoAghBAmsOAgABAgsgAigCNEEASiEEIAFBAEoMAgsgAigCNEEfdiEEIAFBH3YMAQsgAigCNEEARyEE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QQA2AgggAkIANwIAIAIgBEEAEDEgACgCXCIDBEADQCAAKAJYIAFBAnRqKAIAIgVBAE4EQCACKAIAIAVBAnRqQQE2AgALIAFBAWoiASADRw0ACwsgAigCACEDIAQEQCAAKAJIIQVBACEBA0AgAyABQQJ0aigCAEUEQCAFIAFBGGxqIgBCgICAgICAgPz/ADcDECAAQoCAgICAgID8/wA3AwggAEKAgICAgICA/P8ANwMACyABQQFqIgEgBEcNAAsgAigCACEDCyADBEAgAxAiCyACQRBqJAAL4gcCDX8LfCMAQUBqIgUkACAAKAJMIQIgBUIANwM4IAVCADcDMCAFQgA3AyggBUIANwMAIAVCADcDCCAFQgA3AxAgAEGYAWogAiAFEGcgBUEcaiAAKAJMEOwBIQYgACgCTCICBEADQCAGKAIAIAFBAnRqQf////8HNgIAIAFBAWoiASACRw0ACwsgACgCXCIDBEADQEH/////ByECAkAgACgCWCAEQQJ0aigCACIHQQBIDQADQCAGKAIAIAdBAnRqIgEgBCABKAIAIgEgASACRiICGzYCACACDQEgASICIARODQALCyAEQQFqIgQgA0cNAAsLIAAoAkwiCQRAQQAhAgNARAAAAAAAAAAAIQ5EAAAAAAAAAAAhEkQAAAAAAAAAACEQIAYoAgAgAkECdGooAgAiBCEBAkAgBEH/////B0YEQCAAKAKYASACQRhsaiIBQgA3AxAgAUIANwMIIAFCADcDAAwBCwNAQX5BAUF+QQEgACgCaCABQQJ0aigCACIBQQNvQQJGGyABaiIBIAFBA20iCkEDbGtBAkYbIgcgAWoiC0EDbyEMAkAgACgCSCIDIAAoAlgiDSABQQJ0aiIIIAdBAnRqKAIAQRhsaiIHKwMAIAMgCCgCAEEYbGoiCCsDACIRoSIPIA8gD6IgBysDCCAIKwMIIhOhIg8gD6KgIAcrAxAgCCsDECIUoSIVIBWioJ8iFqMiF71C////////////AINC//////////f/AFYNACARIAMgDUF4QQQgDEECRhtqIAtBAnRqKAIAQRhsaiIDKwMAoSIRIBEgEaIgEyADKwMIoSIRIBGioCAUIAMrAxChIhMgE6KgnyIUoyIYvUL///////////8Ag0KAgICAgICA+P8AWg0AIA4CfEQAAAAAAAAAACAVIBajIBMgFKOiIA8gFqMgESAUo6IgFyAYokQAAAAAAAAAAKCgoCIORAAAAAAAAPC/ZQ0AGkQYLURU+yEJQCAORAAAAAAAAPA/Zg0AGiAOmhBdCyIPIAAoAqgBIApBGGxqIgMrAxCioCEOIBIgDyADKwMIoqAhEiAQIA8gAysDAKKgIRALIAEgBEcNAAsgACgCmAEgAkEYbGoiASAOIA4gDqIgEiASoiAQIBCioKCfIg6jRAAAAAAAAAAAIBAgDqMiEL1C////////////AINCgICAgICAgPj/AFQiBBs5AxAgASASIA6jRAAAAAAAAAAAIAQbOQMIIAEgEEQAAAAAAAAAACAEGzkDAAsgAkEBaiICIAlHDQALCyAGKAIAIgAEQCAGIAA2AgQgBigCCBogABAiCyAFQUBrJAALgAEBBH8gACgCBCIDIAFBAXRLIANBEEtxAkAgASADTQ0AIAAgARA5IAEgACgCBCIDayIEQQBMDQAgACgCACADQQR0aiEDA0AgAyACKQIINwIIIAMgAikCADcCACADQRBqIQMgBEEBSyAEQQFrIQQNAAsLIAAgATYCBARAIAAQgwELCz4AIAMEQCAAIAMQ8gEgACgCBCEDIAEgAkcEQANAIAMgARAuQRhqIQMgAUEYaiIBIAJHDQALCyAAIAM2AgQLC4gBAQl8IAErAzAhBiABKwMAIQcgASsDGCEIIAErAzghCSABKwMIIQogASsDICELIAAgAisDACIDIAErAxCiIAIrAwgiBCABKwMooqAgAisDECIFIAErA0CioDkDECAAIAMgCqIgBCALoqAgBSAJoqA5AwggACADIAeiIAQgCKKgIAUgBqKgOQMAC0oBAn8gACgCBCICIAAoAggiAUcEQANAIAAgAUEQayIBNgIIIAEQLxogAiAAKAIIIgFHDQALCyAAKAIAIgEEQCAAKAIMGiABECILCzABAn8jAEGgAmsiASQAIAFBCGoQOyICQQ42AkQgACACEO8BIAIQOhogAUGgAmokAAt3AQF/IwBBMGsiAyQAIANBGGogASACEJcCIAMgASACQRhqEJcCIABBMGogASACQTBqEJcCIAAgAykDKDcDECAAIAMpAyA3AwggACADKQMYNwMAIAAgAykDADcDGCAAIAMpAwg3AyAgACADKQMQNwMoIANBMGokAAuMAQECfyAAIAEoAgA2AgACQAJAIAEoAgQiAkUEQCAAQQA2AgQMAQsgAigCBCEBA0ACQCABQX9GBEBBACECDAELIAIgAUEBaiACKAIEIgMgASADRiIBGzYCBCABDQAgAyEBDAELCyAAIAI2AgQgAg0BC0EEEHQiAEG05gE2AgAgAEHA5gFBvQMQCwALIAALUgEBfyAAQQA2AgggAEIANwIAIAEEQCAAIAEQowIgACgCBCECIAFBDGxBDGsiASABQQxwa0EMaiIBBEAgAkEAIAH8CwALIAAgASACajYCBAsgAAs4AQF/IAAEQCAAKAIAEJ0CIAAoAgQQnQIgACgCGCIBBEAgACABNgIcIAAoAiAaIAEQIgsgABAiCwvlAgEKfyAAIQYgAigCGCEHIAIoAhAhCCACKAIIIQkgAigCACEKAkAgAQRAIABFDQEgAS0AEEEBcQ0BQQAhAgNAIAJBAWoiAkGACEYEQEEAIQIgAS0AEA0DCyAJIANBAnQiBGooAgAiAARAIAAgAEEfdSIFcyAFayELIAQgCGohDCAHIANBGGxqIQRBACEAA0AgCiAMKAIAQRhsaiAAQRhsaiIFIAQpAxA3AxAgBSAEKQMINwMIIAUgBCkDADcDACAAQQFqIgAgC0cNAAsLIANBAWoiAyAGRw0ACwwBCyAARQ0AA0AgCSADQQJ0IgFqKAIAIgAEQCAAIABBH3UiAnMgAmshBCABIAhqIQUgByADQRhsaiEBQQAhAANAIAogBSgCAEEYbGogAEEYbGoiAiABKQMQNwMQIAIgASkDCDcDCCACIAEpAwA3AwAgAEEBaiIAIARHDQALCyADQQFqIgMgBkcNAAsLC4OPAQQjfyF8AX4CfSMAQaAIayIFJAAgASgCkAEhBiAFQQA6AIQGIAVBADYCgAYgBSAGNgL8BQJAIAEoAgAiAygCRARAIAAQOyABKAIAKAJENgJEDAELIAEoAgQiBCgCRARAIAAQOyABKAIEKAJENgJEDAELIAQoAlwhCCADKAJcQQJNBEAgAiAIQQNJckUEQCAAIAQQNxoMAgsgABA7GgwBCyAIQQJNBEAgAkECRgRAIAAQOxoMAgsgACADEDcaDAELIAUgATYC9AUgBSAFQfwFajYC+AUCQAJAIAZFBEAgBUEBNgKABgwBCyAGIAYoAgxBAWo2AgwgASgCkAEhAyAFQQE2AoAGIANFDQAgAy0AEEEBRw0AIAVBiAZqEDsiA0EONgJEIAVB0ANqIANByAD8CgAAIAUgAygCSDYCmAQgBSADKAJMNgKcBCAFIAMoAlA2AqAEIANBADYCUCADQgA3A0ggBSADKAJkNgK0BCADQQA2AmQgBSADKAJYNgKoBCAFIAMoAlw2AqwEIAUgAygCYDYCsAQgA0EANgJgIANCADcDWCAFIAMoAnQ2AsQEIANBADYCdCAFIAMoAmg2ArgEIAUgAygCbDYCvAQgBSADKAJwNgLABCADQQA2AnAgA0IANwNoIAUgAygChAE2AtQEIANBADYChAEgBSADKAJ4NgLIBCAFIAMoAnw2AswEIAUgAygCgAE2AtAEIANBADYCgAEgA0IANwN4IAUgAygCiAE2AtgEIAUgAygCjAE2AtwEIAUgAygCkAE2AuAEIANBADYCkAEgA0IANwOIASAFIAMoApgBNgLoBCAFIAMoApwBNgLsBCAFIAMoAqABNgLwBCADQQA2AqABIANCADcDmAEgBSADKAKoATYC+AQgBSADKAKsATYC/AQgBSADKAKwATYCgAUgA0EANgKwASADQgA3A6gBIAUgAygCuAE2AogFIAUgAygCvAE2AowFIAUgAygCwAE2ApAFIANBADYCwAEgA0IANwO4ASAFIAMoAsgBNgKYBSAFIAMoAswBNgKcBSAFIAMoAtABIgY2AqAFIAUgAygC1AEiCDYCpAUgBUGgBWohBAJAIAhFBEAgBSAENgKcBQwBCyAGIAQ2AgggA0IANwPQASADIANB0AFqNgLMAQsgBSADKALYATYCqAUgBSADKALcATYCrAUgBSADKALgATYCsAUgA0EANgLgASADQgA3A9gBIAUgAygC6AE2ArgFIAUgAygC7AE2ArwFIAUgAygC8AE2AsAFIANBADYC8AEgA0IANwPoASAFIAMoAvgBNgLIBSAFIAMoAvwBNgLMBSAFIAMoAoACNgLQBSADQQA2AoACIANCADcD+AEgBSADKAKIAjYC2AUgBSADKAKMAjYC3AUgBSADKAKQAjYC4AUgA0EANgKQAiADQgA3A4gCIAVBAToA6AUgAxA6GiAFLQDoBUEBRw0AIAAgBUHQA2oiABA3GiAFLQDoBUEBRw0BIAAQOhoMAQsgAS0AjAFFBEAgABA7QQw2AkQMAQtBf0EBIAJBAkcbIQYgASgCICEDIAVBADYCyAMgBUIANwLAAyAFQcADaiADECUgBSADNgLEAyABKAJQIQMgBUEANgK4AyAFQgA3ArADIAVBsANqIAMQJSAFIAM2ArQDIAEoAnAhAyAFQQA2AqgDIAVCADcCoAMgBUGgA2ogAxAlIAUgAzYCpAMgASgCgAEhAyAFQQA2ApgDIAVCADcCkAMgBUGQA2ogAxAlIAUgAzYClAMgASgCICIDBEAgASgCHCIEIANBAnRqIQggBSgCwAMhAwNAIAMgBCgCACAGbDYCACADQQRqIQMgBEEEaiIEIAhHDQALCyABKAJQIgMEQCABKAJMIgQgA0ECdGohCCAFKAKwAyEDA0AgAyAEKAIAIAZsNgIAIANBBGohAyAEQQRqIgQgCEcNAAsLIAEoAnAiAwRAIAJBAkchCCABKAJsIgQgA0ECdGohCSAFKAKgAyEDA0AgAyAEKAIAIAZsIAhqNgIAIANBBGohAyAEQQRqIgQgCUcNAAsLIAEoAoABIgMEQCABKAJ8IgQgA0ECdGohCCACRSEJIAUoApADIQMDQCADIAQoAgAgBmwgCWo2AgAgA0EEaiEDIARBBGoiBCAIRw0ACwsgASgCACgCTCEJIAVBADYCiAMgBUIANwKAAyAFQYADaiAJECUgBSAJNgKEAyAFKAKgAyIDIAUoAqQDIgRBAnRqIQcgBSgCgAMhCAJAIARFDQAgAygCACEGIAhBADYCACAEQQFGDQAgBiAGQR91IgRzIARrIQYgA0EEaiEEIAghAwNAIAQoAgAhCyADIAY2AgQgBiALIAtBH3UiCnMgCmtqIQYgA0EEaiEDIARBBGoiBCAHRw0ACwsgCCAJQQJ0akEEaygCACEDIAdBBGsoAgAhBCABKAIEKAJMIQkgBUEANgL4AiAFQgA3AvACIAVB8AJqIAkQJSAFIAk2AvQCIAUoApADIgcgBSgClAMiBkECdGohCyAFKALwAiEIAkAgBkUNACAHKAIAIQogCCAEIARBH3UiDHMgDGsgAyADQR91IgRzIARraiIDNgIAIAZBAUYNACADIAogCkEfdSIEcyAEa2ohBiAHQQRqIQQgCCEDA0AgBCgCACEHIAMgBjYCBCAGIAcgB0EfdSIKcyAKa2ohBiADQQRqIQMgBEEEaiIEIAtHDQALCyAIIAlBAnRqQQRrKAIAIQMgC0EEaygCACEEIAEoAjAhCSAFQQA2AugCIAVCADcC4AIgBUHgAmogCRAlIAUgCTYC5AIgBCAEQR91IgZzIAZrIAMgA0EfdSIEcyAEa2oiICEEIAEoAjAEQCAFKALAAyIDIAUoAsQDIgRBAnRqIQcgBSgC4AIhCAJAIARFDQAgAygCACEGIAggIDYCACAEQQFGDQAgBiAGQR91IgRzIARrICBqIQYgA0EEaiEEIAghAwNAIAQoAgAhCyADIAY2AgQgBiALIAtBH3UiCnMgCmtqIQYgA0EEaiEDIARBBGoiBCAHRw0ACwsgB0EEaygCACIDIANBH3UiA3MgA2sgCCAJQQJ0akEEaygCACIDIANBH3UiA3MgA2tqIQQLIAEoAmAhCSAFQQA2AtgCIAVCADcC0AIgBUHQAmogCRAlIAUgCTYC1AIgASgCYARAIAUoArADIgMgBSgCtAMiBkECdGohByAFKALQAiEIAkAgBkUNACADKAIAIQsgCCAENgIAIAZBAUYNACAEIAsgC0EfdSIGcyAGa2ohBiADQQRqIQQgCCEDA0AgBCgCACELIAMgBjYCBCAGIAsgC0EfdSIKcyAKa2ohBiADQQRqIQMgBEEEaiIEIAdHDQALCyAHQQRrKAIAIgMgA0EfdSIDcyADayAIIAlBAnRqQQRrKAIAIgMgA0EfdSIDcyADa2ohBAsgBUGIBmoQOyELAkAgBEUEQCAAIAsQowEaDAELIAsgASgCBCIDKwMwIiYgASgCACIGKwMwIicgJiAnZBs5AzAgCyADKwM4IiYgBisDOCInICYgJ2QbOQM4IAtByABqIAQQiAUgASgCkAEhBCABKAIAIgYoAkwhAyAFIAsoAkg2ArACIAUgCygCTDYCtAIgBSAFKQKgAzcCuAIgBSAFKQKAAzcCwAIgBSAGKAJINgLIAiAFIAM2AswCIAMgBCAFQbACahCeAiABKAKQASEEIAEoAgQiBigCTCEDIAUgCygCSDYCkAIgBSALKAJMNgKUAiAFIAUpApADNwKYAiAFIAUpAvACNwKgAiAFIAYoAkg2AqgCIAUgAzYCrAIgAyAEIAVBkAJqEJ4CIAEoApABIQMgBSALKAJINgLwASAFIAsoAkw2AvQBIAUgBSkC4AI3AoACIAUgBSgCwAM2AvgBIAUgBSgCxAMiBDYC/AEgBSABKQIsNwKIAiAEIAMgBUHwAWoQngIgASgCkAEhAyAFIAsoAkg2AtABIAUgCygCTDYC1AEgBSAFKQLQAjcC4AEgBSAFKAKwAzYC2AEgBSAFKAK0AyIENgLcASAFIAEpAlw3AugBIAQgAyAFQdABahCeAiAFQdADaiIDIAVB9AVqEHggBS0A6AVBAUYEQCAAIAMQNxogBS0A6AVBAUcNASADEDoaDAELIAUgBUHIAWoiFTYCxAEgBUIANwLIASAFIAVBvAFqIhk2ArgBIAVCADcCvAEgBSAFQbABaiIXNgKsASAFQgA3ArABIAVBxAFqIAVBrAFqIgMgAUEMaiIEIAVBwANqIAVB4AJqIAEoAgBB2ABqQQFBACABKAKQARDvBCAFQbgBaiADIAFBPGoiFCAFQbADaiAFQdACaiABKAIEQdgAakEAIAEoAhAgASgCkAEQ7wQgBUHQA2oiAyAFQfQFahB4AkAgBS0A6AVBAUYEQCAAIAMQNxogBS0A6AVBAUcNASADEDoaDAELQQAhAyAFQQA2AuQCIAVB4AJqEC0gBUEANgLUAiAFQdACahAtIAVBADYCpAEgBUIANwKcASAFQQA2ApQBIAVCADcCjAEgBUHQA2ohDSABKAIAIQ4gASgCBCERIAJBAUYhFiABKAKQASEMIwBBkAFrIgkkACARKAJcIQYgDigCXCEIIAlBADYCSCAJQgA3AkAgCUFAayAGQQNuIAhBA25qQQAQMSARKAJcIQYgDigCXCEKIAkgCSgCQCIHNgIwIAkgDkHYAGoiCDYCLCAJIApBA24iDzYCNCAJIAUpAqADNwI4IA8gDCAJQSxqEOsEIBEoAlwgCSAGQQNuIhA2AiAgCSAHIA9BAnRqIgo2AhwgCSARQdgAaiISNgIYIAkgBSkCkAM3AiRBA24gDCAJQRhqEOsEIAUoAsADIRMCQAJAAkACQCAFKALEAyIGQaCNBk8EQCAMBEACQCAMLQAQDQBBACEEQQAhCANAIARBAWoiBEGACEYEQEEAIQQgDC0AEA0CCyABKAIMIAhBA3RqIhAoAgAhDyAKIBAoAgRBAnRqIhQgEyAIQQJ0aigCACIQIBBBH3UiEHMgEGsiECAUKAIAajYCACAHIA9BA21BAnRqIhQgFCgCACAQajYCACAHIA4oAmggD0ECdGooAgBBA21BAnRqIg8gDygCACAQajYCACAIQQFqIgggBkcNAAsLIAUoArQDIhBFDQMgDC0AEEEBcQ0DIAUoArADIRNBACEGQQAhCANAIAZBAWoiBkGACEYEQEEAIQYgDC0AEA0FCyABKAI8IAhBA3RqIg8oAgQhBCAHIA8oAgBBAnRqIhQgEyAIQQJ0aigCACIPIA9BH3UiD3MgD2siDyAUKAIAajYCACAKIARBA21BAnRqIhQgFCgCACAPajYCACAKIBEoAmggBEECdGooAgBBA21BAnRqIgQgBCgCACAPajYCACAIQQFqIgggEEcNAAsMAgtBACEIA0AgASgCDCAIQQN0aiIMKAIAIQQgCiAMKAIEQQJ0aiIPIBMgCEECdGooAgAiDCAMQR91IgxzIAxrIgwgDygCAGo2AgAgByAEQQNtQQJ0aiIPIA8oAgAgDGo2AgAgByAOKAJoIARBAnRqKAIAQQNtQQJ0aiIEIAQoAgAgDGo2AgAgCEEBaiIIIAZHDQALIAUoArQDIgxFDQMgBSgCsAMhD0EAIQgDQCABKAI8IAhBA3RqIgYoAgQhBCAHIAYoAgBBAnRqIhAgDyAIQQJ0aigCACIGIAZBH3UiBnMgBmsiBiAQKAIAajYCACAKIARBA21BAnRqIhAgECgCACAGajYCACAKIBEoAmggBEECdGooAgBBA21BAnRqIgQgBCgCACAGajYCACAIQQFqIgggDEcNAAsMAwsgCSAINgJsIAkgBDYCaCAJIAY2AmQgCSATNgJgIAkgEDYCXCAJIAo2AlggCSAPNgJUIAkgBzYCUAJAIAwEQCAGRQ0BIAwtABBBAXENAUEAIQRBACEIA0AgBEEBaiIEQYAIRgRAQQAhBCAMLQAQDQMLIAlB0ABqIAgQ6gQgCEEBaiIIIAZHDQALDAELIAkgCDYCjAEgCSAENgKIASAJIAY2AoQBIAkgEzYCgAEgCSAQNgJ8IAkgCjYCeCAJIA82AnQgCSAHNgJwIAZFDQBBACEIA0AgCUHwAGogCBDqBCAIQQFqIgggBkcNAAsLIAUoArADIQYgBSgCtAMhBCAJIBI2AmwgCSAUNgJoIAkgBDYCZCAJIAY2AmAgCSAPNgJcIAkgBzYCWCAJIBA2AlQgCSAKNgJQIAwEQCAERQ0BIAwtABBBAXENAUEAIQpBACEHA0AgCkEBaiIKQYAIRgRAQQAhCiAMLQAQDQMLIAlB0ABqIAcQ6QQgB0EBaiIHIARHDQALDAELIAkgEjYCjAEgCSAUNgKIASAJIAQ2AoQBIAkgBjYCgAEgCSAPNgJ8IAkgBzYCeCAJIBA2AnQgCSAKNgJwIARFDQBBACEHA0AgCUHwAGogBxDpBCAHQQFqIgcgBEcNAAsLIAxFDQELIAwtABBBAUcNACANQQA2AgggDUIANwIAIA1CADcCECANQQA2AhgMAQsgDigCXCEEIBEoAlwhBiAJQQA2AnggCUIANwJwIAlB8ABqIARBA24gBkEDbmpBAWpBABAxIAkoAnAhBAJAIAkoAkQiBkUNACAEIAkoAkAiCigCAEEASiIINgIEIAZBAUYNACAKIAZBAnRqIQYgBEEEaiEHIApBBGohCgNAIAcgCCAKKAIAQQBKaiIINgIEIAdBBGohByAKQQRqIgogBkcNAAsLIAQgCSgCdEECdGpBBGsoAgAhCiAJQfAAaiARKAJcQQNuIA4oAlxBA25qQQAQMSALKAKsASEEIAtBqAFqIgwgChAzIAsgCjYCrAEgBEERSSAEIApBAXRNckUEQCAMEHEgCygCrAEhCgtBACEHIAlBADYCWCAJQgA3AlAgCUHQAGogChAlIAkgCjYCVCAJKAJQIQQCfyAOKAKsASIIRQRAIAQhBkEADAELIAkoAkAhCiAEIQYDQCAKIAdBAnRqKAIAQQBKBEAgBiAHNgIAIAZBBGohBgsgB0EBaiIHIAhHDQALQQAiCiAEIAZGDQAaIAYgBGtBAnUhCCAMKAIAIRAgDigCqAEhEwNAIBAgCkEYbGoiByATIAQgCkECdGooAgBBGGxqIg8pAxA3AxAgByAPKQMINwMIIAcgDykDADcDACAKQQFqIgogCEcNAAsgBiEEIAgLIQogBCEIIBEoAqwBIg8EQEEAIQcgCSgCQCEQA0AgECAHQQJ0aiAOKAKsAUECdGooAgBBAEoEQCAIIAc2AgAgCEEEaiEICyAHQQFqIgcgD0cNAAsLIBEoAqgBIQ4CQCAWBEAgCUEBOgAVIAkgDjYCECAMKAIAIApBGGxqIQogBCAIRwRAIAggBGtBAnUhDCAJKAIQIQ5BACEGA0AgDiAEIAZBAnRqKAIAQRhsaiIIKwMAISYgCCsDCCEnIAogBkEYbGoiByAIKwMQmjkDECAHICeaOQMIIAcgJpo5AwAgBkEBaiIGIAxHDQALCwwBCyAEIAhGDQAgCCAGa0ECdSERIAwoAgAgCkEYbGohCkEAIQcDQCAKIAdBGGxqIgYgDiAEIAdBAnRqKAIAQRhsaiIIKQMQNwMQIAYgCCkDCDcDCCAGIAgpAwA3AwAgB0EBaiIHIBFHDQALCyAJKAJAIQQgCSgCRCEGIAlBADYCAAJAIAQgBkECdGoiCAJ/IAkoAgAhByAIIARrQQJ1IgYEQANAIAQgByAEKAIARg0CGiAEQQRqIQQgBkEBayIGDQALC0EACyIEIAggBBsiBkYNACAGQQRqIgQgCEYNAANAIAQoAgAiByAJKAIARwRAIAYgBzYCACAGQQRqIQYLIARBBGoiBCAIRw0ACwsgCUEANgIIIAlCADcCACAJIAYgCSgCQGtBAnVBAWpBABAxIAkoAgAhBAJAIAYgCSgCQCIIRg0AIAQgCCgCACIMNgIEIAhBBGoiByAGRg0AIARBBGohCgNAIAogBygCACAMaiIMNgIEIApBBGohCiAHQQRqIgcgBkcNAAsLIA0gBDYCACANIAkoAgQ2AgQgDSAJKAIINgIIIA0gCSgCcDYCECANIAkoAnQ2AhQgDSAJKAJ4NgIYIAlBADYCeCAJQgA3AnAgCSgCUCIERQ0AIAQQIiAJKAJwIgRFDQAgBBAiCyAJKAJAIgQEQCAEECILIAlBkAFqJAAgBSAFQYwBajYCgAEgBSAFQZwBajYCfCAFKAJ8IgQgDUcEQCAEKAIAIgYEQCAGECILIARBADYCCCAEQgA3AgAgBCANKAIANgIAIAQgDSgCBDYCBCAEIA0oAgg2AgggDUEANgIIIA1CADcCAAsgBSgCgAEiBCANQRBqRwRAIAQoAgAiBgRAIAYQIgsgBEEANgIIIARCADcCACAEIA0oAhA2AgAgBCANKAIUNgIEIAQgDSgCGDYCCCANQQA2AhggDUIANwIQCyANKAIQIgQEQCAEECILIA0oAgAiBARAIAQQIgsgDSAFQfQFahB4AkAgBS0A6AVBAUYEQCAAIA0QNxogBS0A6AVBAUcNASANEDoaDAELIAVBADYCxAMgBUHAA2oQLSAFQQA2ArQDIAVBsANqEC0gBUEANgKEASAFQgA3AnwCQCAFKAKgASIERQ0AIAUoApwBIQggBEECdCIGECchAyAGRQ0AIAMgCCAG/AoAAAsgBSAENgKEASAFIAQ2AoABIAUgAzYCfCABKAIAKAJcIQMgBUEANgJ0IAVCADcCbCAFQewAaiIIIANBARCBASABKAIEKAJcIQMgBUEANgJkIAVCADcCXCAFQdwAaiIJIANBARCBASAFKAKcASAFKAKgAUECdGpBBGsoAgAhAyAFQQA2AlQgBUIANwJMIAVBzABqIgQgAxA5IAUgAzYCUCAFKAKcASAFKAKgAUECdGpBBGsoAgAhAyAFQQA2AkQgBUIANwI8IAVBPGoiBiADEDkgBSADNgJAIAsgBiAIIAVB/ABqIgMgBUHEAWogBCABKAIAIAVBoANqIAVBgANqIAUoAowBQQEgASgCkAEQ7gQgCyAGIAkgAyAFQbgBaiAEIAEoAgQgBUGQA2ogBUHwAmogBSgCjAEgASgCACgCXEEDbkECdGpBACABKAKQARDuBCAFQdADaiIDIAVB9AVqEHgCQCAFLQDoBUEBRgRAIAAgAxA3GiAFLQDoBUEBRw0BIAMQOhoMAQsgBSgCyAEQzQEgBSAVNgLEASAFQgA3AsgBIAUoArwBEM0BIAUgGTYCuAEgBUIANwK8ASABKAIAKAJcQQNuIQMgASgCkAEhCiMAQSBrIggkAAJAIAVBrAFqIgQoAgAiCSAEQQRqIhVGDQAgA0ECdCEZA0AgCgRAIAotABANAgsgCSgCFCEMIAkoAhAhDSAJKAIYIAkoAhwQzAEgCSgCGCIEIAkoAhwiBkYiDkUEQCALKAJIIRFEAAAAAAAA8H8hJkQAAAAAAADw/yEnRAAAAAAAAPD/ISlEAAAAAAAA8P8hKEQAAAAAAADwfyEqRAAAAAAAAPB/ISwgBCEDA0AgESADKAIIQRhsaiIHKwMQIi0gJyAnIC1jGyEnIAcrAwgiKyApICkgK2MbISkgBysDACIuICggKCAuYxshKCAmIC0gJiAtYxshJiAqICsgKiArYxshKiAsIC4gLCAuYxshLCADQRhqIgMgBkcNAAsgCygCSEEAQQhBECApICqhIikgJyAmoSImZBsiAyAmICggLKEiJ2MbIAMgJyApZBtqIQcgBCEDA0AgAyAHIAMoAghBGGxqKwMAOQMAIANBGGoiAyAGRw0ACwsgBSgCjAEiAyAZaiAMQQJ0aigCACERIAYgBGtBGG1BAXYhByADIA1BAnRqKAIAIQ8gBCEDAkAgDg0AA0AgBC0AEEEBcUUEQCAGIQMDQCADQRhrIgYgBEYEQCAEIQMMBAsgA0EIayAGIQMtAABBAXFFDQALIAggBCkDEDcDGCAIIAQpAwg3AxAgCCAEKQMANwMIIAQgAykDEDcDECAEIAMpAwg3AwggBCADKQMANwMAIAMgCCkDGDcDECADIAgpAxA3AwggAyAIKQMINwMAIARBGGoiBCADRw0BDAILIARBGGoiBCAGRw0ACyAGIQMLIAkoAhggAxDMASADIAkoAhwQzAEgBwRAIAUoAnwiAyARQQJ0aiEEIAMgD0ECdGohDiAFKAJMIREgBSgCPCEPIAkoAhghFkEAIQYDQCAWIAZBGGxqIgMgB0EYbGooAgghECADKAIIIRMgDiAOKAIAIhRBAWo2AgAgBCAEKAIAIhJBAWo2AgAgDyAUQQR0IhhqIgNBADYCDCADIBI2AgggAyAQNgIEIAMgEzYCACARIBhqIgNBfzYCDCADIA02AgggA0KAgICAcDcCACAPIBJBBHQiEmoiA0EANgIMIAMgFDYCCCADIBM2AgQgAyAQNgIAIBEgEmoiA0F/NgIMIAMgDDYCCCADQoGAgIBwNwIAIAZBAWoiBiAHRw0ACwsCQCAJKAIEIgMEQANAIAMiCSgCACIDDQAMAgsACwNAIAkgCSgCCCIJKAIARw0ACwsgCSAVRw0ACwsgCEEgaiQAIAVB0ANqIgMgBUH0BWoQeCAFLQDoBUEBRgRAIAAgAxA3GiAFLQDoBUEBRw0BIAMQOhoMAQsgBSgCsAEQnQIgBSAXNgKsASAFQgA3ArABIAEoAgAhBgJAIAUoAnAiBEUEQEEAIQMMAQsgBSgCbCEIIAQQJyEDIARFDQAgAyAIIAT8CgAACyAFIAQ2AjQgBSAENgIwIAUgAzYCLCAGKAJcIQQgBSAFKAKMATYCJCAFIARBA242AiggBUH8AGogBUE8aiAFQcwAaiAGIAVBLGogBUGgA2ogBUGAA2ogBUEkakEBIAEoApABEO0EIAMEQCADECILIAVBADYCNCAFQgA3AiwgASgCBCEGQQAhBAJAIAUoAmAiA0UNACAFKAJcIQggAxAnIQQgA0UNACAEIAggA/wKAAALIAUgAzYCHCAFIAM2AhggBSAENgIUIAEoAgAoAlwhAyAFIAYoAlxBA242AhAgBSAFKAKMASADQQNuQQJ0ajYCDCAFQfwAaiAFQTxqIAVBzABqIAYgBUEUaiAFQZADaiAFQfACaiAFQQxqQQAgASgCkAEQ7QQgBARAIAQQIgsgBUEANgIcIAVCADcCFCAFQdADaiIDIAVB9AVqEHggBS0A6AVBAUYEQCAAIAMQNxogBS0A6AVBAUcNASADEDoaDAELIAVBADYCcCAFQewAahCEAyAFQQA2AmAgBUHcAGoQhAMgBUEANgKAASAFQfwAahAtIAVBADYCkAEgBUGMAWoQLSAFQQA2AqQDIAVBoANqEC0gBUEANgKUAyAFQZADahAtIAVBADYChAMgBUGAA2oQLSAFQQA2AvQCIAVB8AJqEC0gBSAFKQI8NwLQAyAFQZwBaiERIAVB0ANqIhQhDiAFQcwAaiEQIAEoApABIQ1BACEJQQAhDyMAQdACayIHJAACQCANBEAgDS0AEA0BCyAHQQA2AvwBIAdCADcC9AEgC0EANgLcASALQdgBaiITEIMBIA4oAgQhAyAHQQA2AuwBIAdCADcC5AEgB0HkAWogA0F/EDEgESgCBCEEIAdBADYC3AEgB0IANwLUASAHQdQBaiAEECUgByAENgLYASAHKALUASIDIARBAnRqQQRrQQA2AgAgB0IANwPIASAHQgA3A8ABIAdBgICA/AM2AtABIAdBADYCvAECQCARKAIEQQJOBEAgC0HIAGohFSAHQaABaiEZA0AgDQRAIA0tABANAwsCQCAJQQJ0IgMgESgCAGoiBCgCBCIGIAQoAgAiCEYEQCAHKALUASADakEANgIADAELIAcoAtQBIANqIAYgCGsiA0ECazYCACADQQVIDQAgCygCqAEgCUEYbGoiAysDCCInmSEoAnwgAysDECImmSIqIAMrAwAiKZkiLGRFICggKmNFckUEQEQAAAAAAAAAACEqRAAAAAAAAAAAIShEAAAAAAAA8D8MAQsgKCAsZARARAAAAAAAAPA/IShEAAAAAAAAAAAhKiAnISZEAAAAAAAAAAAMAQtEAAAAAAAA8D8hKkQAAAAAAAAAACEoICkhJkQAAAAAAAAAAAshJyAHQYQCaiIDIA4oAgAiCCAEKAIAIgRBBHRqIAggBkEEdGogBBD0AiAHICg5A6gCIAcgKJogKCAmRAAAAAAAAAAAYyIEGzkDwAIgByAqOQPIAiAHICqaICogBBs5A7ACIAcgJzkDuAIgByAnmiAnIAQbOQOgAiAHQTBqIgYgB0GgAmpBMPwKAAAgB0GQAmoiBCADIA4gFSAGEMcEIAcgAzYCnAIgB0GcAmoQKSAHQYgBaiAEIAsrAzBBABCRBCAHIAQ2AoQCIAMQKSAHKALUASAHKAK8AUECdGogBygCjAEgBygCiAFrQQR1IAcoApQBa0EDbjYCAEEAIQYjAEEQayIJJAAgBygCvAEhAyAHAn8CQCAHQcABaiIIKAIEIgpFDQAgCCgCAAJ/IApBAWsgA3EgCmkiDEEBTQ0AGiADIAMgCkkNABogAyAKcAsiBkECdGooAgAiBEUNACAEKAIAIgRFDQAgCkEBayESIAxBAUshFwNAAkAgAyAEKAIEIgxHBEACQCAXRQRAIAwgEnEhDAwBCyAKIAxLDQAgDCAKcCEMCyAGIAxHDQMMAQsgBCgCCCADRw0AQQAMAwsgBCgCACIEDQALC0HAABAjIQQgCSAINgIIIAkgBDYCBCAEIAM2AgQgBEEANgIAIAQgBygCvAE2AgggBCAHKAKIATYCECAEIAcoAowBNgIUIAQgBygCkAE2AhggB0EANgKQASAHQgA3A4gBIAQgBygCnAE2AiQgBCAHKQKUATcCHCAHKAKgASESIAdBADYCoAEgBEEoaiIEIBI2AgAgBCAHKAKkATYCBCAHQQA2AqQBIAQgBygCqAEiDDYCCCAEIAcoAqwBIhc2AgwgBCAHKgKwATgCECAXBEAgBEEIaiEXIAwoAgQhDAJAIAQoAgQiBCAEQQFrIhZxRQRAIAwgFnEhDAwBCyAEIAxLDQAgDCAEcCEMCyASIAxBAnRqIBc2AgAgB0IANwKoAQsgCUEBOgAMAkBBACAKIAgoAgxBAWqzIkggCCoCECJJIAqzlF4bDQAgCCAKIApBAWtxQQBHIApBA0lyIApBAXRyIgQgSCBJlY38ASIGIAQgBksbEHAgCCgCBCIKIApBAWsiBHFFBEAgAyAEcSEGDAELIAMgCkkEQCADIQYMAQsgAyAKcCEGCwJAIAgoAgAiEiAGQQJ0aiIGKAIAIgNFBEAgCSgCBCIEIAgoAgg2AgAgCCAENgIIIAYgCEEIajYCACAEKAIAIgNFDQEgAygCBCEMAkAgCiAKQQFrIgNxRQRAIAMgDHEhDAwBCyAKIAxLDQAgDCAKcCEMCyASIAxBAnRqIAQ2AgAMAQsgCSgCBCIEIAMoAgA2AgAgAyAENgIACyAJQQA2AgQgCCAIKAIMQQFqNgIMIAkoAgQhAyAJQQA2AgQgAwRAIAktAAxBAUYEQCADQQhqEMMECyADECILQQELOgCkAiAHIAQ2AqACIAlBEGokACAZEMcBIAcoAogBIgMEQCAHIAM2AowBIAcoApABGiADECILIAcoArwBIQkLIAcgCUEBaiIJNgK8ASAJIBEoAgRBAWtIDQALIAcoAtQBIQMLAkAgBygC2AEiBEUNACADKAIAIQkgA0EANgIAIARBAUYNACADIARBAnRqIQYgA0EEaiEIIAMhBANAIAgoAgAhCiAEIAk2AgQgBEEEaiEEIAkgCmohCSAIQQRqIgggBkcNAAsLIAtB2ABqIhkgAyAHKALYAUECdGpBBGsoAgBBA2wQyQEgBygC1AEgBygC2AFBAnRqQQRrKAIAIQMgB0IANwNwIAdCADcDeCAHQgA3A4ABIAcgBykDcDcDGCAHIAcpA3g3AyAgByAHKQOAATcDKCAHQfQBaiADIAdBGGoQZyAHKALUASAHKALYAUECdGpBBGsoAgAhAyAHQgA3A2AgB0IANwNoIAcgBykDYDcDCCAHIAcpA2g3AxAgEyADIAdBCGoQlQIgESgCBEEBRwRAA0AgDQRAIA0tABANAwsgByAPNgKgAiAHQcABaiAHQaACahCiAiEDAkAgD0ECdCIIIBEoAgBqIgYoAgQiBCAGKAIAIgZGDQAgBygC1AEgCGooAgAhCiALKAKoASAPQRhsaiIIKwMQISogCCsDCCEsIAgrAwAhLQJAAkACQAJAAkACQAJAIAQgBmtBA2sOAgABAgsgByAGNgKgAiAHIAZBAmoiAzYCqAIgByAGQQFqIgQ2AqQCIA4oAgAiCCAGQQR0aigCBCAIIANBBHRqKAIARgRAIAcgBDYCqAIgByADNgKkAgsgByAHKQLkATcCiAFBASEMIBkgB0GIAWogDiAKIAdBoAJqQQEQxgQMAgsCfCAqmSImIC2ZIidkRSAmICyZIilkRXJFBEBEAAAAAAAA8D8hJkQAAAAAAAAAACEoRAAAAAAAAAAAIScgKgwBCyAnICljBEBEAAAAAAAA8D8hJ0QAAAAAAAAAACEoRAAAAAAAAAAAISYgLAwBC0QAAAAAAAAAACEmRAAAAAAAAPA/IShEAAAAAAAAAAAhJyAtCyEpIAdBoAJqIgMgDigCACIIIAZBBHRqIAggBEEEdGogBhD0AiAHQYgBaiAHKAKgAhBgIRcgByADNgKQAiAHQZACahApIBcoAgAiCSgCCCEDIAkoAgAhBCAJKAIEIQggByAJKAIMIgw2AswCIAcgCDYCyAIgByAENgLEAiAHIAw2AsACIAcgAzYCvAIgByAINgK4AiAHIAw2ArQCIAcgAzYCsAIgByAENgKsAiAHIAM2AqgCIAcgCDYCpAIgByAENgKgAiAmmiAmIClEAAAAAAAAAABjIgkbIi8gCygCSCISIA4oAgAiFSADQQR0aigCAEEYbGoiAysDACI4oiAomiAoIAkbIjEgAysDCCI5oqAgJ5ogJyAJGyIyIAMrAxAiOqKgIkQgLyASIBUgBEEEdGooAgBBGGxqIgMrAwAiO6IgMSADKwMIIjyioCAyIAMrAxAiPaKgIjChIjMgM6IgJyA4oiAmIDmioCAoIDqioCJFICcgO6IgJiA8oqAgKCA9oqAiPqEiNCA0oqAhKyAvIBIgFSAIQQR0aigCAEEYbGoiAysDACI/oiAxIAMrAwgiQKKgIDIgAysDECJBoqAiQiAwoSI2IDaiICcgP6IgJiBAoqAgKCBBoqAiQyA+oSI3IDeioCEuIAsrAzAhKUEBIQkCQCA2IDSiIDcgM6KhIjVEAAAAAAAAAABkRQRAIDUgNaJEAAAAAAAAEECiICkgKSArIC4gKyAuZBuiomVFDQELIC8gEiAVIAxBBHRqKAIAQRhsaiIDKwMAIjWiIDEgAysDCCIxoqAgMiADKwMQIjKioCJGIDChIi8gL6IgJyA1oiAmIDGioCAoIDKioCIwID6hIicgJ6KgISYgMyAnoiA0IC+ioSIoRAAAAAAAAAAAZEUEQCAoICiiRAAAAAAAABBAoiApICkgJiArICYgK2QboqJlRQ0BC0EAIQkgRCBCoSIoIDAgQ6EiK6IgRSBDoSIzIEYgQqEiNKKhIjBEAAAAAAAAAABkRQRAIDAgMKJEAAAAAAAAEECiICkgKSA0IDSiICsgK6KgIisgKCAooiAzIDOioCIoICggK2MboqJlRQ0BCyA2ICeiIDcgL6KhIidEAAAAAAAAAABkRQRAICcgJ6JEAAAAAAAAEECiICkgKSAmIC4gJiAuZBuiomVFDQELIDsgOKEiJiAmoiA8IDmhIiYgJqKgID0gOqEiJiAmoqAgPyA1oSImICaiIEAgMaEiJiAmoqAgQSAyoSImICaioGQhCQsgByAHKQLkATcCkAIgGSAHQZACaiAOIAogB0GgAmogCUEYbGpBAhDGBCAXKAIAIgMEQCAHIAM2AowBIAcoApABGiADECILQQIhDAwBCyADKAIUIAMoAhAiCWtBBHUgAygCHCIDayIIIAhBA24iDEEDbCIVayESIApBA2whBCAHKALkASEXIA0EQAJAIAggEkYNACANLQAQQQFxDQAgBCADayEbIAkgA0EEdGohHCALKAJoIR0gCygCeCEeIAsoAlghHyAOKAIAIRZBACESQQAhCANAIBJBAWoiEkGACEYEQEEAIRIgDS0AEA0CCyAfIAQgCGpBAnQiGGogFiAcIAhBBHRqIhooAgBBBHRqKAIANgIAIBggHmogFiAaKAIAQQR0aigCDDYCACAYIB1qQX8gGyAaKAIIIhhqIAMgGEobNgIAIAhBAWoiCCAVRw0ACwsgA0UNAiANLQAQQQFxDQIgBCADayESQQAhBEEAIQgDQCAEQQFqIgRBgAhGBEBBACEEIA0tABANBAsgCSAIQQR0aiIVKAIIIhZBAE4EQCAXIBUoAgRBAnRqIBIgFmo2AgALIAhBAWoiCCADRw0ACwwBCyAIIBJHBEAgBCADayEaIAkgA0EEdGohGyALKAJoIRwgCygCeCEdIAsoAlghHiAOKAIAIRJBACEIA0AgHiAEIAhqQQJ0IhZqIBIgGyAIQQR0aiIYKAIAQQR0aigCADYCACAWIB1qIBIgGCgCAEEEdGooAgw2AgAgFiAcakF/IBogGCgCCCIWaiADIBZKGzYCACAIQQFqIgggFUcNAAsLIANFBEAgEygCACEIIAcoAvQBIQMgByAQKAIAIAZBBHRqIgQpAgg3A6gCIAcgBCkCADcDoAIMBAsgBCADayEEQQAhCANAIAkgCEEEdGoiEigCCCIVQQBOBEAgFyASKAIEQQJ0aiAEIBVqNgIACyAIQQFqIgggA0cNAAsLIBMoAgAhCCAHKAL0ASEDIAcgECgCACAGQQR0aiIEKQIINwOoAiAHIAQpAgA3A6ACIA1FDQIMAQsgEygCACEIIAcoAvQBIQMgByAQKAIAIAZBBHRqIgQpAgg3A6gCIAcgBCkCADcDoAILIAxFDQEgDS0AEEEBcQ0BIAggCkEEdGohBiADIApBGGxqIQhBACEEQQAhCQNAIARBAWoiBEGACEYEQEEAIQQgDS0AEA0DCyAIIAlBGGxqIgMgKjkDECADICw5AwggAyAtOQMAIAYgCUEEdGoiAyAHKQOoAjcCCCADIAcpA6ACNwIAIAlBAWoiCSAMRw0ACwwBCyAMRQ0AIAggCkEEdGohBCADIApBGGxqIQZBACEJA0AgBiAJQRhsaiIDICo5AxAgAyAsOQMIIAMgLTkDACAEIAlBBHRqIgMgBykDqAI3AgggAyAHKQOgAjcCACAJQQFqIgkgDEcNAAsLIA9BAWoiDyARKAIEQQFrSQ0ACwsCQAJAAkAgDQRAIA0tABANBCANLQAQDQIgDigCBCIERQ0CIAsoAmghBiAOKAIAIQogBygC5AEhA0EAIQhBACEJA0AgCEEBaiIIQYAIRgRAQQAhCCANLQAQDQQLAkAgAyAJQQJ0aigCACIMQQBIDQAgCiAJQQR0aigCCCIOQQBIDQAgBiAMQQJ0aiADIA5BAnRqKAIANgIACyAJQQFqIgkgBEcNAAsMAQsgDigCBCIERQ0CIAsoAmghBiAOKAIAIQggBygC5AEhA0EAIQkDQAJAIAMgCUECdGooAgAiCkEASA0AIAggCUEEdGooAggiDEEASA0AIAYgCkECdGogAyAMQQJ0aigCADYCAAsgCUEBaiIJIARHDQALCyANRQ0BCyANLQAQDQELIAdBzABqIAtGDQAgCygCqAEiAwRAIAMQIgsgCyAHKAL0ATYCqAEgCyAHKAL4ATYCrAEgCyAHKAL8ATYCsAEgB0EANgL8ASAHQgA3AvQBCyAHKALIASIDBEADQCADKAIAIANBCGoQwwQgAxAiIgMNAAsLIAcoAsABIQMgB0EANgLAASADBEAgBygCxAEaIAMQIgsgBygC1AEiAwRAIAMQIgsgBygC5AEiAwRAIAMQIgsgBygC9AEiA0UNACADECILIAdB0AJqJAAgBUEANgJQIBAQgwEgBUEANgJAIAVBPGoQgwEgBUEANgKgASAREC1BACEIQQAhCSMAQUBqIQMgCygCXCIHQQNuIQwCQAJAAkACQCABKAKQASIKBEAgCi0AECAHQQNJcg0CIAsoAnghDSALKAJoIQ4gCygCWCERA0AgCEEBaiIIQYAIRgRAQQAhCCAKLQAQDQQLIAMgESAJQQNsIhNBAnQiBGooAgAiDzYCBCADIAQgDmooAgA2AgwgAyAEIA1qKAIANgIQIAMgESAEQQRqIgZqKAIANgIUIAMgBiAOaigCADYCHCADIAYgDWooAgA2AiAgAyARIARBCGoiBGooAgA2AiQgAyAEIA5qKAIANgIsIAMgBCANaigCADYCMCAPQQBOBEAgA0KBgICAIDcCNEEAIQZBACEEA0AgA0E0aiAEaigCACIPIAYgA0EEaiIQIA9BBHRqKAIAIAZBBHQgEGooAgBIGyEGIARBBGoiBEEIRw0ACyADQQI2AjwgA0KAgICAEDcCNEEAIQQDQCADQQRqIANBNGogBGooAgAiECAGakEDb0EEdGoiDygCDCESIA8oAgghFSARIBAgE2pBAnQiEGogDygCADYCACAOIBBqIBU2AgAgDSAQaiASNgIAIARBBGoiBEEMRw0ACwsgCUEBaiIJIAxHDQALDAELIAdBA0kNAyALKAJ4IQggCygCaCENIAsoAlghDgNAIAMgDiAJQQNsIhBBAnQiBGooAgAiETYCBCADIAQgDWooAgA2AgwgAyAEIAhqKAIANgIQIAMgDiAEQQRqIgZqKAIANgIUIAMgBiANaigCADYCHCADIAYgCGooAgA2AiAgAyAOIARBCGoiBGooAgA2AiQgAyAEIA1qKAIANgIsIAMgBCAIaigCADYCMCARQQBOBEAgA0KBgICAIDcCNEEAIQZBACEEA0AgA0E0aiAEaigCACIRIAYgA0EEaiIPIBFBBHRqKAIAIAZBBHQgD2ooAgBIGyEGIARBBGoiBEEIRw0ACyADQQI2AjwgA0KAgICAEDcCNEEAIQQDQCADQQRqIANBNGogBGooAgAiDyAGakEDb0EEdGoiESgCDCETIBEoAgghEiAOIA8gEGpBAnQiD2ogESgCADYCACANIA9qIBI2AgAgCCAPaiATNgIAIARBBGoiBEEMRw0ACwsgCUEBaiIJIAxHDQALCyAKRQ0BCyAKLQAQDQEgCi0AECAHQQNJcg0BIAsoAlghDUEAIQhBACEJA0AgCEEBaiIIQYAIRgRAQQAhCCAKLQAQDQMLIANBAjYCDCADQoCAgIAQNwIEIAlBA2whESALKAJoIQ9BACEHA0AgDSADQQRqIAdqKAIAIBFqQQJ0IgRqKAIAIhBBAE4EQCAEIA9qIhMoAgAhBCADQQI2AjwgA0KAgICAEDcCNCAEIARBA29rIQ5BfyEEQQAhBgNAIANBNGogBmooAgAiEiAEIBAgDUF4QQQgDiASaiIEQQNvQQJGG2ogBEECdGooAgBGGyEEIAZBBGoiBkEMRw0ACyATIAQgDmo2AgAgB0EEaiIHQQxHDQELCyAJQQFqIgkgDEcNAAsMAQsgB0EDSQ0AIAsoAlghCEEAIQkDQCADQQI2AgwgA0KAgICAEDcCBCAJQQNsIQ0gCygCaCEOQQAhBwNAIAggA0EEaiAHaigCACANakECdCIEaigCACIRQQBOBEAgBCAOaiIPKAIAIQQgA0ECNgI8IANCgICAgBA3AjQgBCAEQQNvayEKQX8hBEEAIQYDQCADQTRqIAZqKAIAIhAgBCARIAhBeEEEIAogEGoiBEEDb0ECRhtqIARBAnRqKAIARhshBCAGQQRqIgZBDEcNAAsgDyAEIApqNgIAIAdBBGoiB0EMRw0BCwsgCUEBaiIJIAxHDQALCyAUIAVB9AVqEHggBS0A6AVBAUYEQCAAIBQQNxogBS0A6AVBAUcNASAUEDoaDAELIAEoAgAhByABKAIEIQkgAkEBRiEaIAEoApABIQ1BACEKIwBBwAFrIgYkACALIAcoAkAiGyAJKAJAIhwgGyAcShsiETYCQAJAIBFFDQAgCygCXCECIAZBADYCOCAGQgA3AjAgBkEwaiACEDMgBiACNgI0IAsoAtgBIQMgCygC3AEhBCAHKAJIIQggBygCTCEMIAkoAkghDiAJKAJMIQ8gCygCSCEQIAsoAkwhEyAGKAIwIRQgBiALKwMwIiY5A3ggBiALQdgAaiIVNgJwIAYgCUHYAGoiHTYCbCAGIAdB2ABqIh42AmggBiATNgJkIAYgEDYCYCAGIA82AlwgBiAONgJYIAYgDDYCVCAGIAg2AlAgBiAENgJMIAYgAzYCSCAGIAI2AkQgBiAUNgJAIAJBA24hEgJAAkAgDQRAAkAgAkEDSQ0AIA0tABBBAXENAEEAIQQDQCAKQQFqIgpBgAhGBEBBACEKIA0tABANAgsgBkFAayAEEOYEIARBAWoiBCASRw0ACwsgDS0AEEUNAQwCCyAGICY5A7gBIAYgFTYCsAEgBiAdNgKsASAGIB42AqgBIAYgEzYCpAEgBiAQNgKgASAGIA82ApwBIAYgDjYCmAEgBiAMNgKUASAGIAg2ApABIAYgBDYCjAEgBiADNgKIASAGIBQ2AoABIAYgAjYChAEgAkEDSQ0AQQAhBANAIAZBgAFqIAQQ5gQgBEEBaiIEIBJHDQALCyAGQSRqIAsoAkwiA0EBahCcAiEfIAZCADcDkAEgBkIANwOIASAGQgA3A4ABAn8gCSgCQCIERQRAIAkoAkwMAQsgCSgCjAEgBG4LIQQgBkF/NgJAIAZBgAFqIgggBCAGQUBrEOUEIAhBDHICfyAHKAJAIghFBEAgBygCTAwBCyAHKAKMASAIbgsgBkF/NgJAIAZBQGsQ5QQgC0GIAWoiDyALKAJMIBFsEEQCQCACQQNJDQAgCUHIAWohIkEAIRBBACEMA0AgDQRAIA0tABANAgsgCygCWCAQQQNsIiNBAnRqKAIAQQBOBEAgHCAbIAsoAtgBIBBBBHRqIgIoAgAiDhshEyACKAIIIQJBACEVAn9BACAaRQ0AGkEAIA5FDQAaQQAgE0EDSA0AGiAiIAIQ5AQLISQgHSAeIA4bIRkgCSAHIA4bISUgBkECNgIgIAZCgICAgBA3AhggAkEMbCEXIA5FISEDQCAGKAIwIAZBGGogFWooAgAgI2oiAkEYbGohFCACQQJ0IRZBfyEYAkACQAJAAkAgE0EATARAQX8hCCADIQIMAQsgCygCWCAWaigCACECIAZBAjYCSCAGQoCAgIAQNwJAQQAhCkF+IQgCQAJ/A0AgFEEIQRAgBkFAayAKaigCACIEQQFGG0EAIAQbaisDACImRAAAAAAAAPA/YQRAIAMhAiAZKAIgIBdqIARBAnRqKAIADAILIAQgCCAmRAAAAAAAAAAAYRshCCAKQQRqIgpBDEcNAAsgCEEASA0BIBkoAiAgF2oiCkEEQQggCEEBRhtBACAIGyIIQYzzAGooAgBBAnRqKAIAIgQgCiAIQZjzAGooAgBBAnRqKAIAIgggBCAISiIKGyEYIAggBCAKGwshCCACIANHIAhBAEhyDQEgBkGAAWoiAiACQQxyIA4bKAIAIAhBAnRqIgIoAgAiBEEATg0DIAIgDDYCAAwCCyACIAMgCEF+RhshAkF/IQgLIB8oAgAgAkEMbGoiAigCACIEIAIoAgQiCkcEQANAAkAgBCgCACAhRw0AIAQoAgQgCEcNACAEKAIIIBhHDQAgBCgCDCEEDAQLIARBEGoiBCAKRw0ACwsgBiAMNgJMIAYgGDYCSCAGIAg2AkQgBiAhNgJAIAIgBkFAaxDjBAsgCygCeCAWaiAMNgIAIAxBAWohDCARQQBMDQFBACECA0ACQCACIBNIBEAgBkIANwNQIAZCADcDSCAGQgA3A0AgBkECNgIUIAZCgICAgBA3AgwgJSgCiAEgAkEDdGohCiAZKAIgIBdqIRZBACEEA0AgBkFAa0EIQRAgBkEMaiAEaigCACIIQQFGG0EAIAgbaiAKIBYgCEECdGooAgAgE2xBA3RqKwMAOQMAIARBBGoiBEEMRw0ACyAUKwMAIAYrA0CiRAAAAAAAAAAAoCAUKwMIIAYrA0iioCAUKwMQIAYrA1CioCImmiAmIAJBA0kbICYgJBshJgJAIAsoAowBIgQgCygCkAEiCE8EQCAPIAhBAXRBgAEgCBsQRCALKAKIASALKAKMASIEQQN0aiAmOQMADAELIA8oAgAgBEEDdGogJjkDAAsMAQsCQCALKAKMASIEIAsoApABIghPBEAgDyAIQQF0QYABIAgbEEQgCygCiAEgCygCjAEiBEEDdGpCADcDAAwBCyAPKAIAIARBA3RqQgA3AwALCyALIARBAWo2AowBIAJBAWoiAiARRw0ACwwBCyALKAJ4IBZqIAQ2AgALIBVBBGoiFUEMRw0ACwsgEEEBaiIQIBJHDQALCyAGQZgBaiEEA0AgBEEMayICKAIAIgMEQCAEQQhrIAM2AgAgBEEEaygCABogAxAiCyAGQYABaiIDIAIiBEcNAAsgBiAfNgKAASADECkLIAYoAjAiAkUNACACECILIAZBwAFqJAAgBUHQA2oiAiAFQfQFahB4IAUtAOgFQQFGBEAgACACEDcaIAUtAOgFQQFHDQEgAhA6GgwBCyABKAIAIQkgASgCBCEHIAEoApABIQYjAEEgayIEJAAgCygC2AEiAiALKAJcIgNBA25BBHRqIQogBygC2AEhDCAJKALYASENQZiVAigCACEIAkACQAJAAkAgBgRAIANBA0kNAiAGLQAQQQFxDQJBACEDA0AgA0EBaiIDQYAIRgRAQQAhAyAGLQAQDQQLIAIoAgghDgJAIAIoAgBFBEAgAiANIA5BBHRqIg4pAgg3AgggAiAOKQIANwIADAELIAIgDCAOQQR0aiIOKQIAIkc3AgAgAiAOKQIINwIIIAIgR6cgCGo2AgALIAJBEGoiAiAKRw0ACwwBCyADQQNJDQIDQCACKAIIIQMCQCACKAIARQRAIAIgDSADQQR0aiIDKQIINwIIIAIgAykCADcCAAwBCyACIAwgA0EEdGoiAykCACJHNwIAIAIgAykCCDcCCCACIEenIAhqNgIACyACQRBqIgIgCkcNAAsLIAZFDQELIAYtABANAQsgCSgCzAEiAiAJQdABaiIGRwRAIAtBzAFqIQkDQCAEIAJBEGoiAzYCFCAEQRhqIAkgAyAEQRRqEHkgBCgCGEEYaiACQRhqQeoA/AoAAAJAIAIoAgQiAwRAA0AgAyICKAIAIgMNAAwCCwALA0AgAiACKAIIIgIoAgBHDQALCyACIAZHDQALCyAHKALMASICIAdB0AFqIglGDQAgC0HMAWohBgNAIAQgAigCECAIajYCDCAEIARBDGoiAzYCFCAEQRhqIgcgBiADIARBFGoiChB5IAQoAhhBGGogAkEYakHqAPwKAAAgBCACKAIQIAhqNgIMIAQgAzYCFCAHIAYgAyAKEHkgBCgCGCIDIAMtAIABIBpHOgCAAQJAIAIoAgQiAwRAA0AgAyICKAIAIgMNAAwCCwALA0AgAiACKAIIIgIoAgBHDQALCyACIAlHDQALCyAEQSBqJAAgBUHQA2oiAiAFQfQFahB4IAUtAOgFQQFGBEAgACACEDcaIAUtAOgFQQFHDQEgAhA6GgwBCyALICAQ+AIgCxCTAiALEFggCyABKAKQARBUIAsQtQQgBUHQA2oiASAFQfQFahB4IAUtAOgFQQFGBEAgACABEDcaIAUtAOgFQQFHDQEgARA6GgwBCyAFQQE6AIQGIAAgCxCjARoLIAUoAjwiAARAIAAQIgsgBSgCTCIABEAgABAiCyAFKAJcIgAEQCAAECILIAUoAmwiAARAIAAQIgsgBSgCfCIARQ0AIAAQIgsgBSgCjAEiAARAIAAQIgsgBSgCnAEiAEUNACAAECILIAUoArABEJ0CIAUoArwBEM0BIAUoAsgBEM0BCyALEDoaIAUoAtACIgAEQCAAECILIAUoAuACIgAEQCAAECILIAUoAvACIgAEQCAAECILIAUoAoADIgAEQCAAECILIAUoApADIgAEQCAAECILIAUoAqADIgAEQCAAECILIAUoArADIgAEQCAAECILIAUoAsADIgBFDQAgABAiCyAFKAL8BSEGCwJAIAZFDQAgBi0AEA0AIAUtAIQGQQFxDQAgBSgCgAYiAEEKSg0AIAYgBigCDCAAa0ELajYCDAsgBUGgCGokAAuCAQEDfyAAQgA3AgQgACgCACEDIABBADYCACAAIAEoAgQiBBBEIAAgBDYCBAJAAkAgASgCBCIEBEAgACgCACEAIAEoAgAhAQNAIAAgAkEDdGogAyABIAJBAnRqKAIAQQN0aikCADcCACACQQFqIgIgBEcNAAsMAQsgA0UNAQsgAxAiCwtmAQF/IABBADYCCCAAQgA3AgBBBBAjIgFBATYCACAAQQA2AhggAEIANwIQIAAgATYCDEEEECMiAUEBNgIAIABBADYCKCAAQgA3AiAgACABNgIcQQQQIyIBQQE2AgAgACABNgIsIAALxwEBBn8CQCAAKAIEIgJFDQAgACgCDEUNACABKAIAIQMgACgCAAJ/IAMgAkEBa3EgAmkiAUEBTQ0AGiADIAIgA0sNABogAyACcAsiBUECdGooAgAiAEUNACAAKAIAIgBFDQAgAkEBayEGIAFBAUshBwNAAkAgAyAAKAIEIgFHBEACQCAHRQRAIAEgBnEhAQwBCyABIAJJDQAgASACcCEBCyABIAVHDQMMAQsgACgCCCADRw0AIAAhBAwCCyAAKAIAIgANAAsLIAQLNAEBfyABQdaq1aoBTwRAECYACyAAIAFBDGwiAhAjIgE2AgQgACABNgIAIAAgASACajYCCAtKAQJ/IAAoAgQiAiAAKAIIIgFHBEADQCAAIAFBGGsiATYCCCABECgaIAIgACgCCCIBRw0ACwsgACgCACIBBEAgACgCDBogARAiCws8AQF/IAAgAUcEQCAAIQMDQCACIAMQiwFBGGohAiADQRhqIgMgAUcNAAsDQCAAEChBGGoiACABRw0ACwsLSgECfyAAKAIEIgIgACgCCCIBRwRAA0AgACABQUBqIgE2AgggARBBGiACIAAoAggiAUcNAAsLIAAoAgAiAQRAIAAoAgwaIAEQIgsLtwEBBX8gACgCBCICIQQgASgCBCAAKAIAIgMgAmtqIgYhBSADIARHBEAgAyECA0AgBSACELQBQUBrIQUgAkFAayICIARHDQALA0AgAxBBQUBrIgMgBEcNAAsLIAEgBjYCBCAAIAAoAgAiAjYCBCAAIAEoAgQ2AgAgASACNgIEIAAoAgQhAiAAIAEoAgg2AgQgASACNgIIIAAoAgghAiAAIAEoAgw2AgggASACNgIMIAEgASgCBDYCAAuhAgEFfyMAQSBrIgUkAAJAAkAgACgCBCICIAAoAggiA0kEQCACIAErAwA5AwAgAkEIaiEBDAELIAIgACgCACIEa0EDdSIGQQFqIgJBgICAgAJPDQEgBUEMakH/////ASADIARrIgNBAnUiBCACIAIgBEkbIANB+P///wdPGyAGIAAQSyICKAIIIgMgASsDADkDACACIANBCGo2AgggAigCBCAAKAIEIAAoAgAiA2siAWshBCABBEAgBCADIAH8CgAACyAAKAIAIQMgACAENgIAIAIgAzYCBCAAIAIoAggiATYCBCACIAM2AgggACgCCCEEIAAgAigCDDYCCCACIAM2AgAgAiAENgIMIAIQmQELIAAgATYCBCAFQSBqJAAPCxAmAAs9AQJ/IAAoAgQiAiAAKAIIIgFHBEAgACABIAIgAWtBP2pBQHFqNgIICyAAKAIAIgEEQCAAKAIMGiABECILC4gBAgJ/AXwjAEEQayICJABBmJ8CLQAAQQFxRQRAQQJBjIwCQQMQBiEDQZifAkEBOgAAQZSfAiADNgIACyABKAIEIgFBCU8EQCABEBMLIAIgATYCCCACQQA2AgRBlJ8CKAIAIABBACACQQRqIAJBCGoQBSACKAIEIgAEQCAAEAQLIAJBEGokAPwDC0kBAn8gACgCBCIFQQh1IQYgACgCACIAIAEgBUEBcQR/IAIoAgAgBmooAgAFIAYLIAJqIANBAiAFQQJxGyAEIAAoAgAoAhgRBwALmgEAIABBAToANQJAIAIgACgCBEcNACAAQQE6ADQCQCAAKAIQIgJFBEAgAEEBNgIkIAAgAzYCGCAAIAE2AhAgA0EBRw0CIAAoAjBBAUYNAQwCCyABIAJGBEAgACgCGCICQQJGBEAgACADNgIYIAMhAgsgACgCMEEBRw0CIAJBAUYNAQwCCyAAIAAoAiRBAWo2AiQLIABBAToANgsLdgEBfyAAKAIkIgNFBEAgACACNgIYIAAgATYCECAAQQE2AiQgACAAKAI4NgIUDwsCQAJAIAAoAhQgACgCOEcNACAAKAIQIAFHDQAgACgCGEECRw0BIAAgAjYCGA8LIABBAToANiAAQQI2AhggACADQQFqNgIkCwsFABAcAAt9AQN/AkACQCAAIgFBA3FFDQAgAS0AAEUEQEEADwsDQCABQQFqIgFBA3FFDQEgAS0AAA0ACwwBCwNAIAEiAkEEaiEBQYCChAggAigCACIDayADckGAgYKEeHFBgIGChHhGDQALA0AgAiIBQQFqIQIgAS0AAA0ACwsgASAAawvKAQICfwF8IwBBEGsiASQAAkAgAL1CIIinQf////8HcSICQfvDpP8DTQRAIAJBgIDA8gNJDQEgAEQAAAAAAAAAAEEAENgBIQAMAQsgAkGAgMD/B08EQCAAIAChIQAMAQsgACABEKgDIQIgASsDCCEAIAErAwAhAwJAAkACQAJAIAJBA3FBAWsOAwECAwALIAMgAEEBENgBIQAMAwsgAyAAENkBIQAMAgsgAyAAQQEQ2AGaIQAMAQsgAyAAENkBmiEACyABQRBqJAAgAAvCAQIBfAJ/IwBBEGsiAiQAAnwgAL1CIIinQf////8HcSIDQfvDpP8DTQRARAAAAAAAAPA/IANBnsGa8gNJDQEaIABEAAAAAAAAAAAQ2QEMAQsgACAAoSADQYCAwP8HTw0AGiAAIAIQqAMhAyACKwMIIQAgAisDACEBAkACQAJAAkAgA0EDcUEBaw4DAQIDAAsgASAAENkBDAMLIAEgAEEBENgBmgwCCyABIAAQ2QGaDAELIAEgAEEBENgBCyACQRBqJAALjQEAIAAgACAAIAAgACAARAn3/Q3hPQI/okSIsgF14O9JP6CiRDuPaLUogqS/oKJEVUSIDlXByT+gokR9b+sDEtbUv6CiRFVVVVVVVcU/oKIgACAAIAAgAESCki6xxbizP6JEWQGNG2wG5r+gokTIilmc5SoAQKCiREstihwnOgPAoKJEAAAAAAAA8D+gowtqAQJ/IAAgACgCRDYCSCACKAIEIgMgAigCACIERwRAIAMgBGtBBHVBAWshBEEAIQMDQCAAIAEgAiADIAQQtAIgAyEEIANBAWoiAyACKAIEIAIoAgBrQQR1SQ0ACwsgACgCUCAAQcQAahB2C+4TAwV/B3wCfiMAQSBrIgkkAAJAIAIoAgAiBSADQQR0IgdqIgYpAwAgBSAEQQR0IghqIgUpAwBRBEAgBikDCCAFKQMIUQ0BC0QAAAAAAADwPyEKAkAgACgCOCIFIAdqIgYrAwgiDSAFIAhqIgUrAwAiDqIgBSsDCCIPIAYrAwAiEKKhIgtEAAAAAAAA8D9kDQAgCyIKRAAAAAAAAPC/Y0UNAEQAAAAAAADwvyEKCwJAIAAoApgBRQRAIAArAxAhDAwBCyAAIABBiAFqIAIgAEE4aiADIAQQ+wEiDDkDECABLQAUQQFHDQAgACAMmiIMOQMQCwJAAkAgDJlEEeotgZmXcT1lBEAgAigCACADQQR0aiEGAkAgACgCSCIBIAAoAkwiAkkEQCABIAYpAwg3AwggASAGKQMANwMAIAFBEGohAgwBCyABIABBxABqIgQoAgAiAWtBBHUiA0EBaiIFQYCAgIABTw0CIAlBDGpB/////wAgAiABayICQQN1IgEgBSABIAVLGyACQfD///8HTxsgAyAEEDIiBCgCCCIBIAYpAwg3AwggASAGKQMANwMAIAQgBCgCCEEQajYCCCAEKAIEIAAoAkggACgCRCIBayIDayECIAMEQCACIAEgA/wKAAALIAAoAkQhAyAAIAI2AkQgBCADNgIEIAAgBCgCCCICNgJIIAQgAzYCCCAAKAJMIQEgACAEKAIMNgJMIAQgAzYCACAEIAE2AgwgBBA2CyAAIAI2AkgMAwsgECAOoiANIA+ioCILRCuHFtnO9++/ZEUgCiAMokQAAAAAAAAAAGNFckUEQCAAKAI4IARBBHRqIgQrAwggDKIgAigCACIFIANBBHRqIgEpAwi5oBA0/AYhEiAEKwMAIAyiIAEpAwC5oBA0/AYhESAAQcQAaiEHAkAgACgCSCIEIAAoAkwiAUkEQCAEIBI3AwggBCARNwMAIARBEGohBAwBCyAEIAcoAgAiBGtBBHUiBUEBaiIGQYCAgIABTw0CIAlBDGpB/////wAgASAEayIEQQN1IgEgBiABIAZLGyAEQfD///8HTxsgBSAHEDIiBigCCCIBIBI3AwggASARNwMAIAYgAUEQajYCCCAGKAIEIAAoAkggACgCRCIBayIFayEEIAUEQCAEIAEgBfwKAAALIAAoAkQhBSAAIAQ2AkQgBiAFNgIEIAAgBigCCCIENgJIIAYgBTYCCCAAKAJMIQEgACAGKAIMNgJMIAYgBTYCACAGIAE2AgwgBhA2IAAoAkwhASACKAIAIQULIAAgBDYCSCAFIANBBHRqIQgCQCABIARLBEAgBCAIKQMINwMIIAQgCCkDADcDACAEQRBqIQEMAQsgBCAHKAIAIgRrQQR1IgVBAWoiBkGAgICAAU8NAiAJQQxqQf////8AIAEgBGsiBEEDdSIBIAYgASAGSxsgBEHw////B08bIAUgBxAyIgYoAggiASAIKQMINwMIIAEgCCkDADcDACAGIAYoAghBEGo2AgggBigCBCAAKAJIIAAoAkQiAWsiBWshBCAFBEAgBCABIAX8CgAACyAAKAJEIQUgACAENgJEIAYgBTYCBCAAIAYoAggiATYCSCAGIAU2AgggACgCTCEEIAAgBigCDDYCTCAGIAU2AgAgBiAENgIMIAYQNgsgACABNgJIIANBBHQiBCAAKAI4aiIDKwMIIAArAxAiC6IgAigCACAEaiICKQMIuaAQNPwGIRIgCyADKwMAoiACKQMAuaAQNPwGIRECQCAAKAJMIgIgAUsEQCABIBI3AwggASARNwMAIAFBEGohAgwBCyABIAcoAgAiAWtBBHUiA0EBaiIEQYCAgIABTw0CIAlBDGpB/////wAgAiABayICQQN1IgEgBCABIARLGyACQfD///8HTxsgAyAHEDIiBCgCCCIBIBI3AwggASARNwMAIAQgAUEQajYCCCAEKAIEIAAoAkggACgCRCIBayIDayECIAMEQCACIAEgA/wKAAALIAAoAkQhAyAAIAI2AkQgBCADNgIEIAAgBCgCCCICNgJIIAQgAzYCCCAAKAJMIQEgACAEKAIMNgJMIAQgAzYCACAEIAE2AgwgBBA2CyAAIAI2AkgMAwsgACgCZCIBQQJHIAtEK4cW2c737z9kcQ0BAkACQAJAAkAgAUEBaw4DAwIAAQsgCyAAKwMYRAAAAAAAAPC/oGQNBAsgACACIAMgBBC2AgwECyAAIAIgAyAEAnwgCiALoCAKvUL///////////8Ag0KBgICAgICA+P8AVCALvUL///////////8Ag0KAgICAgICA+P8AWHFFDQAaIAu9IhFCIIinIgJBgIDA/wNrIBGnIgFyRQRAIAoQqQMMAQsgAkEedkECcSIAIAq9IhFCP4inciEEAkAgEUIgiKdB/////wdxIgMgEadyRQRAAkACQCAEQQJrDgIAAQMLRBgtRFT7IQlADAMLRBgtRFT7IQnADAILRBgtRFT7Ifk/IAqmIAEgAkH/////B3EiAXJFDQEaAkAgAUGAgMD/B0YEQCADQYCAwP8HRw0BIARBA3QrA/CZAQwDC0QYLURU+yH5PyAKpiADQYCAwP8HRyABQYCA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AEEEaiECDAILIAIoAhAiAARAIAAQIgsgAhAiDAILIAAgASgCACIHa0ECdSIJQQFqIgBBgICAgARPDQIgBkEMakH/////AyACIAdrIgJBAXUiByAAIAAgB0kbIAJB/P///wdPGyAJIAEQSiIAKAIIIgIgAzYCACAAIAJBBGo2AgggACgCBCAEKAIAIAEoAgAiA2siAmshByACBEAgByADIAL8CgAACyABKAIAIQMgASAHNgIAIAAgAzYCBCAEIAAoAggiAjYCACAAIAM2AgggASgCCCEHIAEgACgCDDYCCCAAIAM2AgAgACAHNgIMIAAQUwsgBCACNgIACyAGQSBqJAAMAQsQJgALIAUoAhAiA0UNAyADKAIUIgYgAygCECICKAIQIgRHDQIMAwsgASADRg0CIAIoAhAhBCABKAIUIQYgASEADAALAAsACwsPCwNAIAMoAhAgAxAiIgMNAAsgAUEANgIQC8MCARF+IAIpAwggASkDCCIEfSINIA1CP4ciDoUgDn0iBUL/////D4MiBiABKQMAIgcgACkDAH0iDyAPQj+HIhCFIBB9IghC/////w+DIgl+IgNCIIggBiAIQiCIIgh+fCIRQv////8PgyAJIAVCIIgiCX58IhJCIIYgA0L/////D4OEIAIpAwAgB30iBSAFQj+HIgaFIAZ9IgNC/////w+DIgogBCAAKQMIfSIEIARCP4ciB4UgB30iC0L/////D4MiDH4iE0IgiCAKIAtCIIgiC358IgpC/////w+DIANCIIgiAyAMfnwiDEIghiATQv////8Pg4RRIAggCX4gEUIgiHwgEkIgiHwgAyALfiAKQiCIfCAMQiCIfFFxIA6nIA1CAFVqIBCnIA9CAFVqbCAGpyAFQgBVaiAHpyAEQgBVamxGcQuJAwIEfwJ+An8gASkDICIHIAApAyAiBlIEQCAGIAdTDAELIABBEGoiBSABIAFBEGoiAxCHASICBEAgAkEfdgwBCwJAIAAoAlQiBC0AGEEEcQ0AIAApAxggASkDGFcNACABIAUgBEEQQRQgACgCMEEAShtqKAIAEIcBQQBMDAELAkAgASgCVCICLQAYQQRxDQAgASkDGCAAKQMYVw0AIAEgAyACQRBBFCABKAIwQQBKG2ooAgAQhwFBAE4MAQsgAS0AXCICIAEpAwgiBiAAKQMIUg0AGiACIAYgACgCWCgCACkDCFINABogAiAALQBcIAJHDQAaQQECfyAAKAIwQQBKBEAgBCgCFEEUagwBCyAEKAIQQRBqCygCACAAIAUQvgINABogACgCVCEDAn8gACgCMEEASgRAIAMoAhRBFGoMAQsgAygCEEEQagshACABKAJUIQMgAiAAKAIAIAECfyABKAIwQQBKBEAgAygCFEEUagwBCyADKAIQQRBqCygCABCHAUEASkYLQQFxC/QGAgt/An4gAEEAOgAYIAIhCSAAQTRqIQQgAEEkaiEKIwBBIGsiCyQAAkACQAJAIAEoAgAiBiABKAIEIgxGDQAgBiEAA0AgACgCBCAAKAIAa0EEdSADaiEDIABBDGoiACAMRw0ACyADRQ0AQX8gA0EFdCIAIANB////P0sbECMiByAAaiEBIAchAANAIABBADYCGCAAQgA3AxAgAEIANwMIIABCADcDACAAQSBqIgAgAUcNAAsgByECA0ACQCAGKAIAIgMgBigCBCIIRg0AQQAhASACQQA2AhQgAiEAQQAhBQNAAkAgAQRAIAEpAwAgAykDAFEEQCABKQMIIAMpAwhRDQILIAEgADYCEAsgACABNgIUIAAgAykDADcDACAAIAMpAwg3AwggAEEANgIYIAVBAWohBSAAIgFBIGohAAsgA0EQaiIDIAhHDQALIAEoAhQiA0UNACADIAEgASkDCCACKQMIURsgASABKQMAIAIpAwBRGyIDIAI2AhAgAiADNgIUAkAgAiADRiAFQQNIcg0AIAIpAwghDgNAIA4gAykDCCIPUQRAIAMoAhQiAyACRw0BDAILCyAOIA9TIg0hBSACIgEoAhAiCCABRwRAA0AgASEDAkAgBUEBcUUgCCIBKQMIIg4gAykDCCIPV3JFBEAgAyADKAIYQQRyNgIYQQAhBQwBCyAOIA9ZIAVyQQFxDQAgCiADIAkQvgNBASEFCyABKAIQIgggAkcNAAsLIA0gBUEBcUYNACANBEAgCiABIAkQvgMMAQsgASABKAIYQQRyNgIYCyAAIQILIAZBDGoiBiAMRw0ACwJAIAQoAgQiACAEKAIIIgFJBEAgACAHNgIAIABBBGohAwwBCyAAIAQoAgAiAmtBAnUiBkEBaiIAQYCAgIAETw0CIAtBDGpB/////wMgASACayIBQQF1IgIgACAAIAJJGyABQfz///8HTxsg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AiALIQQgDCEDIAkhAiAHCyEBIAQNAQwCCwsgASACRg0AIAUhAyABIQcDQCADIAcpAxA3AxAgAyAHKQMINwMIIAMgBykDADcDACADQRhqIQMgB0EYaiIHIAJHDQALA0AgACABRwRAIAJBGGsiAiABQRhrIgcgA0EYayIIIANBEGsrAwAgAUEQaysDAGMiBBsiBigCEDYCECACIAYpAwg3AwggAiAGKQMANwMAIAcgASAEGyEBIAUgAyAIIAQbIgNHDQEMAgsLA0AgAkEYayICIANBGGsiAygCEDYCECACIAMpAwg3AwggAiADKQMANwMAIAMgBUcNAAsLIApBIGokAAvdBwIHfwF8IwBBIGsiCiQAAkAgBEUNAANAAkACQCAEIAZMIAMgBkxyRQRAIANFDQQgASsDACEOA0AgDiAAKwMAYw0CIABBGGohACADQQFrIgMNAAsMBAsgAyAESg0BIAAgAUYNAyAFIQMgACEHA0AgAyAHKQMQNwMQIAMgBykDCDcDCCADIAcpAwA3AwAgA0EYaiEDIAdBGGoiByABRw0ACwNAIAEgAkYEQCADIAVrQQRrIgFFDQUgACAFIAH8CgAADAULAkAgASsDACAFKwMAYwRAIAAgASgCEDYCECAAIAEpAwg3AwggACABKQMANwMAIAFBGGohAQwBCyAAIAUoAhA2AhAgACAFKQMINwMIIAAgBSkDADcDACAFQRhqIQULIABBGGohACADIAVHDQALDAMLAkAgAyAESARAIAEgBEECbSILQRhsaiEIAkAgACABRgRAIAAhBwwBCyABIABrQRhtIQkgCCsDACEOIAAhBwNAIAcgByAJQQF2IgxBGGxqIgdBGGogDiAHKwMAYyINGyEHIAwgCSAMQX9zaiANGyIJDQALCyAHIABrQRhtIQwMAQsgA0EBRgRAIAogACkDEDcDGCAKIAApAwg3AxAgCiAAKQMANwMIIAAgASgCEDYCECAAIAEpAwg3AwggACABKQMANwMAIAEgCigCGDYCECABIAopAxA3AwggASAKKQMINwMADAQLIAAgA0ECbSIMQRhsaiEHAkAgASACRgRAIAEhCAwBCyACIAFrQRhtIQkgBysDACEOIAEhCANAIAggCUEBdiILQRhsaiINQRhqIAggDSsDACAOYyINGyEIIAkgC0F/c2ogCyANGyIJDQALCyAI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EaMhHCAaIBGjIRoLIA1EAAAAAAAAAABiBEAgCyANoyELIAogDaMhCiAIIA2jIQgLIAlEAAAAAAAAAABiBEAgDiAJoyEOIBQgCaMhFCAMIAmjIQwLAkAgCiAUoSIJIAkgCaIgCCAMoSIIIAiioCALIA6hIgkgCaKgnyILoyIMvUL///////////8Ag0L/////////9/8AWARAIAYgDDkD+AEgBiAJIAujOQOIAiAGIAggC6M5A4ACDAELIAZCADcDiAIgBkIANwOAAiAGQgA3A/gBC0QAAAAAAAAAACEOIBKaIBUgFaIgFiAWoqAgEiASoqCfIhGjISQgFSARoyIVvUL///////////8Ag0KAgICAgICA+P8AVCECIAUrAxAhISAFKwMIISIgBSsDACEjIAMrAxAiCSAQIBcgF6IgEyAToqAgECAQoqCfIgijRAAAAAAAAAAAIBcgCKMiC71C////////////AINCgICAgICAgPj/AFQiBRsiECALRAAAAAAAAAAAIAUbIhIgAysDACIKokQAAAAAAAAAAKAgEyAIo0QAAAAAAAAAACAFGyITIAMrAwgiDaKgIBAgCaKgIgiioSIMIAyiIAogEiAIoqEiCyALoiANIBMgCKKhIgggCKKgoCIUIAogCqIgDSANoqAgCSAJoqBEEeotgZmXcT2iYwRAICEgGKEiCCAQIBIgIyAfoSIJokQAAAAAAAAAAKAgEyAiIBmhIgqioCAQIAiioCIIoqEiDCAMoiAJIBIgCKKhIgsgC6IgCiATIAiioSIIIAiioKAhFAtEAAAAAAAAAAAhDUQAAAAAAAAAACEJIAsgFJ8iCqMiC71C////////////AINC//////////f/AFgEQCAIIAqjIQ0gDCAKoyEOIAshCQtEAAAAAAAAAAAhCyADKwMwIgggJEQAAAAAAAAAgCACGyIUIBWaRAAAAAAAAACAIAIbIhcgAysDICIMokQAAAAAAAAAAKAgFpogEaNEAAAAAAAAAIAgAhsiFiADKwMoIhiioCAUIAiioCIRoqEiFSAVoiAMIBcgEaKhIgogCqIgGCAWIBGioSIRIBGioKAiGSAMIAyiIBggGKKgIAggCKKgRBHqLYGZl3E9omMEQCAhIB2hIgggFCAXICMgIKEiDKJEAAAAAAAAAACgIBYgIiAeoSIRoqAgFCAIoqAi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BCkDoAc3A4gDIAQgBCkDmAc3A4ADIAQgBCkD0AY3A7gDIAQgBCkDyAY3A7ADIAQgBCkDwAY3A6gDIAQgBCkDuAY3A6ADIARBoAVqIARBwARqIARBwANqIARBwAJqIBxEAAAAAAAA8D8gGKEiFyABEOYDIBggF6IiGEQAAAAAAAAAAKAgHEQAAAAAAADwPyAcoaIiF6AhIiAYIAQrA/gHokQAAAAAAAAAAKAgFyAEKwOwBaKgISMgGCAEKwPwB6JEAAAAAAAAAACgIBcgBCsDqAWioCEkIBggBCsD6AeiRAAAAAAAAAAAoCAXIAQrA6AFoqAhIAsgIkQAAAAAAAAAAGIEQCAjICKjISMgJCAioyEkICAgIqMhIAsgCiAjOQMQIAogJDkDCCAKICA5AwAgIL1C////////////AINC//////////f/AFYgJL1C////////////AINC//////////f/AFZyRSAjvUL///////////8Ag0L/////////9/8AWHENACAKIAQpA5AINwMQIAogBCkDiAg3AwggCiAEKQOACDcDAAsgFkEBaiIWIA9HDQALCyAAQQA2ArwBIABBuAFqEJMBAkAgDSgCvAEgDSgCXEYEQCAAEFogABBYDAELIAAQlAILIAAgAxBUIABBfzYCyAELIAQoAhgiAARAIAAQIgsgDRA6GgsgBEHwCGokAAsfACABBEAgACABKAIAENICIAAgASgCBBDSAiABECILCzoAIAEEQCAAIAEoAgAQ0wIgACABKAIEENMCIAEoAhQiAARAIAEgADYCGCABKAIcGiAAECILIAEQIgsLghMCCn8afCMAQYABayICJAAgASgCBCILBEADQAJAIAEoAgAgCGotAABBAUcNACAAKAK4ASEKIAAoArwBBEAgCiAIQQV0aisDGEQAAAAAAAAAAGMNAQtBACEDIAJBADYCeCACQgA3AnAgAkEANgJoIAJCADcCYEQAAAAAAAAAACEVIAAoAkgiBSAAKAJYIAhBAnRqIgRBeEEEIAhBA3BBAkYbaigCAEEYbGoiCSsDACAFIAQoAgBBGGwiBGoiBSsDACIfoSIOIA4gDqIgCSsDCCAFKwMIIiChIgwgDKKgIAkrAxAgBSsDECIhoSIPIA+ioJ8iE6MiDkQAAAAAAAAAACAOvUL///////////8Ag0KAgICAgICA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ByAIEIIBIAVBEGoiBSACRw0ACwsgAEEANgIIIABCADcCAEEAIQUDQAJAIAUgDEYEQCAEKAIcRQ0BIAQoAhQoAhQhDCAEQQA2AhAgBEIANwIIIAAgBEEIahBoIAQoAggiAgRAIAQgAjYCDCAEKAIQGiACECILIAwhBQsgACgCBCAEIAMgBWo2AghBDGsgBEEIahA9AkACQCAEKAIYIgZFDQAgASAFQQR0aigCBCEHIAohAgNAIAIiBSAGIgkgBigCECAHSCIIGyECIAZBBEEAIAgbaigCACIGDQALIAIgCkYNACAHIAUgCSAIGygCEE4NAQsgCiECCyACKAIUIQUgBEEUaiACEPMCIAIQIgwBCwsgBEEUaiAEKAIYEPICIARBIGokAAvpBQEJfyMAQTBrIgMgATYCJCADQX5BASABQQNvQQJGGyABaiIENgIoIANBfkEBIARBA29BAkYbIARqIgk2AiwgAyAAKAJoIgUgAUECdGooAgAiATYCGCADIAFBfkEBIAFBA29BAkYbaiICNgIcIANBfkEBIAJBA29BAkYbIAJqIgc2AiACQCAFIARBAnRqKAIAIghBf0YNACAAKAJYIgYgCUECdCIBaigCACAGIAdBAnRqKAIARw0AIAEgBWooAgAhAQJAIAcgCEYEQCABIAJGBEAgA0ECNgIUIANCgICAgBA3AgwgACgCSCEKQQAhAQNAIAogBiADQSRqQQRBCCADQQxqIAFqKAIAIgRBAUYbQQAgBBtqKAIAQQJ0aigCAEEYbGoiBEKAgICAgICA/P8ANwMQIARCgICAgICAgPz/ADcDCCAEQoCAgICAgID8/wA3AwAgAUEEaiIBQQxHDQALDAILIAAoAkggBiAEQQJ0aigCAEEYbGoiAUKAgICAgICA/P8ANwMQIAFCgICAgICAgPz/ADcDCCABQoCAgICAgID8/wA3AwAMAQsgASACRw0AIAAoAkggBiACQQJ0aigCAEEYbGoiAUKAgICAgICA/P8ANwMQIAFCgICAgICAgPz/ADcDCCABQoCAgICAgID8/wA3AwALIAUgCEECdGogBSAHQQJ0aigCACIBNgIAIAUgAUECdGogCDYCACAFIAUgCUECdGooAgAiAUECdGogBSACQQJ0aigCACICNgIAIAUgAkECdGogATYCACADQQI2AhQgA0KAgICAEDcCDCAA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DCALKAIAIg1BAnQiAWooAgAiDiABIAogA0EEayIBKAIAIgVBA3RqIgpqKAIAIg9IDQAgDiAPRgRAIAxBASANa0ECdCINaigCACAKIA1qKAIASA0BCyAIIQUgAyEBIAchBAsgAkEEayICIAU2AgAgBCAGRw0ACwsgEUEQaiQAC5YHAgl8DH8jAEFAaiIPQRBqQQBBMPwLACAPQQI2AgwgD0KAgICAEDcCBCACQRhsIgIgASgCACIOKAKYAWorAwAhCiAOKAJIIAJqIhQrAwAhBiABKAIEIhEoApgBIRUgESgCSCEWQQAhAUEAIQIDQAJ/IAogFSAEIA9BBGogAmooAgBBBHRqIhAoAgRBGGwiDmorAwCaZCAOIBZqIg4rAwAiCCAGYyAGIAhhGyAKIBUgECgCCEEYbCITaisDAJpkIBMgFmoiEysDACIJIAZjIAYgCWEbayIZRQRARAAAAAAAAPh/IQVEAAAAAAAA+H8hB0EADAELIBAoAgAhGCAOKwMQIQcgDisDCCEFAkAgBiAIoSILIAYgCaEiDCALmSAMmWMiDhsgCSAIoaMiCL1C////////////AINC//////////f/AFYNACATKwMIIgkgBaEiC71C////////////AINCgICAgICAgPj/AFoNACATKwMQIgwgB6EiDb1C////////////AINCgICAgICAgPj/AFoNACAHIAwgDhsgCCANoqAhByAFIAkgDhsgCCALoqAhBQsgGUEAIBEoAqgBIg4gGEEDbUEYbGorAwggDiARKAJoIBhBAnRqKAIAQQNtQRhsaisDCKBEAAAAAAAAAABkIAUgFCsDCCIIYyAFIAhhGxsLIQ4CQCAFvUL///////////8Ag0L/////////9/8AVg0AIA5BACAOayAQLQAMGyASaiESIAFBAUoEQEECIQEMAQsgAUUgDkUgF3NFckUEQEEBIQEMAQsgD0EQaiABQRhsaiIQIAc5AxAgECAHOQMIIBAgBTkDACABQQFqIQEgDkEARyEXCyACQQRqIgJBDEcNAAsCfyASRQRARAAAAAAAAPh/IQVBAAwBCyASQQAgESgCqAEgA0EYbGorAxBEAAAAAAAAAABkIA8rAyAiBSAPKwM4IgYgFCsDCCIHIA8rAxAiCKEiCZkgByAPKwMoIgehIgqZYyIBGyAGIAWhIgYgCSAKIAEbIAcgCKGjIgeioCAFIAa9Qv///////////wCDQoCAgICAgID4/wBUGyAFIA8rAzAgDysDGKG9Qv///////////wCDQoCAgICAgID4/wBUGyAFIAe9Qv///////////wCDQoCAgICAgID4/wBUGyIFIBQrAxAiBmMgBSAGYRsbCyEBIAAgBTkDCCAAIAE2AgALsgkBDn8jAEEQayIRJAACQCAFRQ0AA0ACQAJAIAUgB0wgBCAHTHJFBEAgBEUNBCADKAIAKAIAIg0gASgCACILQQN0aiIIQQEgAygCBCgCACIJa0ECdCIOaiEKIAggCUECdCIPaigCACEIA0AgCCANIAAoAgAiCUEDdGoiDCAPaigCACIQSA0CIAggEEYEQCAKKAIAIAwgDmooAgBIDQMLIABBBGohACAEQQFrIgQNAAsMBAsgBCAFSg0BIAAgAUYNAyAGIQQgACEIA0AgBCAIKAIANgIAIARBBGohBCAIQQRqIgggAUcNAAsgAygCBCEFIAMoAgAhAwNAIAEgAkYEQCAEIAZrIgFFDQUgACAGIAH8CgAADAULAkACQCADKAIAIgcgASgCACIIQQN0aiILIAUoAgAiCUECdCIKaigCACIMIAogByAGKAIAIgpBA3RqIgdqKAIAIg1OBEAgDCANRw0BIAtBASAJa0ECdCIJaigCACAHIAlqKAIATg0BCyAAIAg2AgAgAUEEaiEBDAELIAAgCjYCACAGQQRqIQYLIABBBGohACAEIAZHDQALDAMLAkAgBCAFSARAIAEgBUECbSIKQQJ0aiELAkAgACABRgRAIAAhCQwBCyANIAsoAgBBA3RqIgggDmohEiAIIA9qKAIAIRAgASAAa0ECdSEIIAAhCQNAAn8CQCAQIA0gCSAIQQF2IgxBAnRqIhMoAgBBA3RqIhQgD2ooAgAiFUgNACAQIBVGBEAgEigCACAOIBRqKAIASA0BCyATQQRqIQkgCCAMQX9zagwBCyAMCyIIDQALCyAJIABrQQJ1IQwMAQsgBEEBRgRAIAAgCzYCACABIAk2AgAMBAsgACAEQQJtIgxBAnRqIQkCQCABIAJGBEAgASELDAELIA0gCSgCAEEDdGoiCCAOaiESIAggD2ooAgAhECACIAFrQQJ1IQggASELA0ACfwJAIBAgDSALIAhBAXYiCkECdGoiEygCAEEDdGoiFCAPaigCACIVTARAIBAgFUcNASAOIBRqKAIAIBIoAgBODQELIBNBBGohCyAIIApBf3NqDAELIAoLIggNAAsLIAsgAWtBAnUhCgsgEUEIaiAJIAEgCxCRASARKAIIIQgCfyAKIAxqIAUgCmsiBSAEIAxrIgRqSARAIAAgCSAIIAMgDCAKIAYgBxCHAyAIIQAgCwwBCyAIIAsgAiADIAQgBSAGIAcQhwMgCiEFIAwhBCAIIQIgCQshASAFDQEMAgsLIAEgAkYNACAGIQQgASEIA0AgBCAIKAIANgIAIARBBGohBCAIQQRqIgggAkcNAAsgAygCBCELIAMoAgAhCQNAIAAgASIDRgRAA0AgAkEEayICIARBBGsiBCgCADYCACAEIAZHDQAMAwsACwJAIAkoAgAiCiAEQQRrIgcoAgAiCEEDdGoiDCALKAIAIg1BAnQiAWooAgAiDiABIAogA0EEayIBKAIAIgVBA3RqIgpqKAIAIg9IDQAgDiAPRgRAIAxBASANa0ECdCINaigCACAKIA1qKAIASA0BCyAIIQUgAyEBIAchBAsgAkEEayICIAU2AgAgBCAGRw0ACwsgEUEQaiQAC5QHAgl8DH8jAEFAaiIPQRBqQQBBMPwLACAPQQI2AgwgD0KAgICAEDcCBCACQRhsIgIgASgCACIOKAKYAWorAwAhCiAOKAJIIAJqIhQrAwAhBiABKAIEIhEoApgBIRUgESgCSCEWQQAhAUEAIQIDQAJ/IBUgBCAPQQRqIAJqKAIAQQR0aiIQKAIEQRhsIg5qKwMAIApjIA4gFmoiDisDACIIIAZjIAYgCGEbIBUgECgCCEEYbCITaisDACAKYyATIBZqIhMrAwAiCSAGYyAGIAlhG2siGUUEQEQAAAAAAAD4fyEFRAAAAAAAAPh/IQdBAAwBCyAQKAIAIRggDisDECEHIA4rAwghBQJAIAYgCKEiCyAGIAmhIgwgC5kgDJljIg4bIAkgCKGjIgi9Qv///////////wCDQv/////////3/wBWDQAgEysDCCIJIAWhIgu9Qv///////////wCDQoCAgICAgID4/wBaDQAgEysDECIMIAehIg29Qv///////////wCDQoCAgICAgID4/wBaDQAgByAMIA4bIAggDaKgIQcgBSAJIA4bIAggC6KgIQULIBlBACARKAKoASIOIBhBA21BGGxqKwMIIA4gESgCaCAYQQJ0aigCAEEDbUEYbGorAwigRAAAAAAAAAAAYyAFIBQrAwgiCGMgBSAIYRsbCyEOAkAgBb1C////////////AINC//////////f/AFYNACAOQQAgDmsgEC0ADBsgEmohEiABQQFKBEBBAiEBDAELIAFFIA5FIBdzRXJFBEBBASEBDAELIA9BEGogAUEYbGoiECAHOQMQIBAgBzkDCCAQIAU5AwAgAUEBaiEBIA5BAEchFwsgAkEEaiICQQxHDQALAn8gEkUEQEQAAAAAAAD4fyEFQQAMAQsgEkEAIBEoAqgBIANBGGxqKwMQRAAAAAAAAAAAYyAPKwMgIgUgDysDOCIGIBQrAwgiByAPKwMQIgihIgmZIAcgDysDKCIHoSIKmWMiARsgBiAFoSIGIAkgCiABGyAHIAihoyIHoqAgBSAGvUL///////////8Ag0KAgICAgICA+P8AVBsgBSAPKwMwIA8rAxihvUL///////////8Ag0KAgICAgICA+P8AVBsgBSAHvUL///////////8Ag0KAgICAgICA+P8AVBsiBSAUKwMQIgZjIAUgBmEbGwshASAAIAU5AwggACABNgIAC7IJAQ5/IwBBEGsiESQAAkAgBUUNAANAAkACQCAFIAdMIAQgB0xyRQRAIARFDQQgAygCACgCACINIAEoAgAiC0EDdGoiCEEBIAMoAgQoAgAiCWtBAnQiDmohCiAIIAlBAnQiD2ooAgAhCANAIAggDSAAKAIAIglBA3RqIgwgD2ooAgAiEEgNAiAIIBBGBEAgCigCACAMIA5qKAIASA0DCyAAQQRqIQAgBEEBayIEDQALDAQLIAQgBUoNASAAIAFGDQMgBiEEIAAhCANAIAQgCCgCADYCACAEQQRqIQQgCEEEaiIIIAFHDQALIAMoAgQhBSADKAIAIQMDQCABIAJGBEAgBCAGayIBRQ0FIAAgBiAB/AoAAAwFCwJAAkAgAygCACIHIAEoAgAiCEEDdGoiCyAFKAIAIglBAnQiCmooAgAiDCAKIAcgBigCACIKQQN0aiIHaigCACINTgRAIAwgDUcNASALQQEgCWtBAnQiCWooAgAgByAJaigCAE4NAQsgACAINgIAIAFBBGohAQwBCyAAIAo2AgAgBkEEaiEGCyAAQQRqIQAgBCAGRw0ACwwDCwJAIAQgBUgEQCABIAVBAm0iCkECdGohCwJAIAAgAUYEQCAAIQkMAQsgDSALKAIAQQN0aiIIIA5qIRIgCCAPaigCACEQIAEgAGtBAnUhCCAAIQkDQAJ/AkAgECANIAkgCEEBdiIMQQJ0aiITKAIAQQN0aiIUIA9qKAIAIhVIDQAgECAVRgRAIBIoAgAgDiAUaigCAEgNAQsgE0EEaiEJIAggDEF/c2oMAQsgDAsiCA0ACwsgCSAAa0ECdSEMDAELIARBAUYEQCAAIAs2AgAgASAJNgIADAQLIAAgBEECbSIMQQJ0aiEJAkAgASACRgRAIAEhCwwBCyANIAkoAgBBA3RqIgggDmohEiAIIA9qKAIAIRAgAiABa0ECdSEIIAEhCwNAAn8CQCAQIA0gCyAIQQF2IgpBAnRqIhMoAgBBA3RqIhQgD2ooAgAiFUwEQCAQIBVHDQEgDiAUaigCACASKAIATg0BCyATQQRqIQsgCCAKQX9zagwBCyAKCyIIDQALCyALIAFrQQJ1IQoLIBFBCGogCSABIAsQkQEgESgCCCEIAn8gCiAMaiAFIAprIgUgBCAMayIEakgEQCAAIAkgCCADIAwgCiAGIAcQiQMgCCEAIAsMAQsgCCALIAIgAyAEIAUgBiAHEIkDIAohBSAMIQQgCCECIAkLIQEgBQ0BDAILCyABIAJGDQAgBiEEIAEhCANAIAQgCCgCADYCACAEQQRqIQQgCEEEaiIIIAJHDQALIAMoAgQhCyADKAIAIQkDQCAAIAEiA0YEQANAIAJBBGsiAiAEQQRrIgQoAgA2AgAgBCAGRw0ADAMLAAsCQCAJKAIAIgogBEEEayIHKAIAIghBA3RqIgwgCygCACINQQJ0IgFqKAIAIg4gASAKIANBBGsiASgCACIFQQN0aiIKaigCACIPSA0AIA4gD0YEQCAMQQEgDWtBAnQiDWooAgAgCiANaigCAEgNAQsgCCEFIAMhASAHIQQLIAJBBGsiAiAFNgIAIAQgBkcNAAsLIBFBEGokAAuVBwIJfAx/IwBBQGoiD0EQakEAQTD8CwAgD0ECNgIMIA9CgICAgBA3AgQgAkEYbCICIAEoAgAiDigCSGoiFCsDACEIIA4oApgBIAJqKwMAmiELIAEoAgQiEigCmAEhFSASKAJIIRZBACEBQQAhAgNAAn8gFSAEIA9BBGogAmooAgBBBHRqIhEoAghBGGwiDmorAwAgC2QgCCAOIBZqIg4rAwAiBmMgBiAIYRsgFSARKAIEQRhsIhBqKwMAIAtkIAggECAWaiIQKwMAIgljIAggCWEbayIZRQRARAAAAAAAAPh/IQVEAAAAAAAA+H8hB0EADAELIBEoAgAhGCAQKwMQIQcgECsDCCEFAkAgCCAJoSIKIAggBqEiDCAKmSAMmWMiEBsgBiAJoaMiBr1C////////////AINC//////////f/AFYNACAOKwMIIgkgBaEiCr1C////////////AINCgICAgICAgPj/AFoNACAOKwMQIgwgB6EiDb1C////////////AINCgICAgICAgPj/AFoNACAHIAwgEBsgBiANoqAhByAFIAkgEBsgBiAKoqAhBQsgGUEAIBIoAqgBIg4gGEEDbUEYbGorAwggDiASKAJoIBhBAnRqKAIAQQNtQRhsaisDCKBEAAAAAAAAAABkIBQrAwgiBiAFYyAFIAZhGxsLIQ4CQCAFvUL///////////8Ag0L/////////9/8AVg0AQQAgDmsgDiARLQAMGyATaiETIAFBAUoEQEECIQEMAQsgAUUgDkUgF3NFckUEQEEBIQEMAQsgD0EQaiABQRhsaiIRIAc5AxAgESAHOQMIIBEgBTkDACABQQFqIQEgDkEARyEXCyACQQRqIgJBDEcNAAsCfyATRQRARAAAAAAAAPh/IQVBAAwBCyATQQAgEigCqAEgA0EYbGorAxBEAAAAAAAAAABkIBQrAxAiCCAPKwMgIgUgDysDOCIHIBQrAwgiBiAPKwMQIgmhIguZIAYgDysDKCIGoSIKmWMiARsgByAFoSIHIAsgCiABGyAGIAmhoyIGoqAgBSAHvUL///////////8Ag0KAgICAgICA+P8AVBsgBSAPKwMwIA8rAxihvUL///////////8Ag0KAgICAgICA+P8AVBsgBSAGvUL///////////8Ag0KAgICAgICA+P8AVBsiBWMgBSAIYRsbCyEBIAAgBTkDCCAAIAE2AgALsgkBDn8jAEEQayIRJAACQCAFRQ0AA0ACQAJAIAUgB0wgBCAHTHJFBEAgBEUNBCADKAIAKAIAIg0gASgCACILQQN0aiIIQQEgAygCBCgCACIJa0ECdCIOaiEKIAggCUECdCIPaigCACEIA0AgCCANIAAoAgAiCUEDdGoiDCAPaigCACIQSA0CIAggEEYEQCAKKAIAIAwgDmooAgBIDQMLIABBBGohACAEQQFrIgQNAAsMBAsgBCAFSg0BIAAgAUYNAyAGIQQgACEIA0AgBCAIKAIANgIAIARBBGohBCAIQQRqIgggAUcNAAsgAygCBCEFIAMoAgAhAwNAIAEgAkYEQCAEIAZrIgFFDQUgACAGIAH8CgAADAULAkACQCADKAIAIgcgASgCACIIQQN0aiILIAUoAgAiCUECdCIKaigCACIMIAogByAGKAIAIgpBA3RqIgdqKAIAIg1OBEAgDCANRw0BIAtBASAJa0ECdCIJaigCACAHIAlqKAIATg0BCyAAIAg2AgAgAUEEaiEBDAELIAAgCjYCACAGQQRqIQYLIABBBGohACAEIAZHDQALDAMLAkAgBCAFSARAIAEgBUECbSIKQQJ0aiELAkAgACABRgRAIAAhCQwBCyANIAsoAgBBA3RqIgggDmohEiAIIA9qKAIAIRAgASAAa0ECdSEIIAAhCQNAAn8CQCAQIA0gCSAIQQF2IgxBAnRqIhMoAgBBA3RqIhQgD2ooAgAiFUgNACAQIBVGBEAgEigCACAOIBRqKAIASA0BCyATQQRqIQkgCCAMQX9zagwBCyAMCyIIDQALCyAJIABrQQJ1IQwMAQsgBEEBRgRAIAAgCzYCACABIAk2AgAMBAsgACAEQQJtIgxBAnRqIQkCQCABIAJGBEAgASELDAELIA0gCSgCAEEDdGoiCCAOaiESIAggD2ooAgAhECACIAFrQQJ1IQggASELA0ACfwJAIBAgDSALIAhBAXYiCkECdGoiEygCAEEDdGoiFCAPaigCACIVTARAIBAgFUcNASAOIBRqKAIAIBIoAgBODQELIBNBBGohCyAIIApBf3NqDAELIAoLIggNAAsLIAsgAWtBAnUhCgsgEUEIaiAJIAEgCxCRASARKAIIIQgCfyAKIAxqIAUgCmsiBSAEIAxrIgRqSARAIAAgCSAIIAMgDCAKIAYgBxCLAyAIIQAgCwwBCyAIIAsgAiADIAQgBSAGIAcQiwMgCiEFIAwhBCAIIQIgCQshASAFDQEMAgsLIAEgAkYNACAGIQQgASEIA0AgBCAIKAIANgIAIARBBGohBCAIQQRqIgggAkcNAAsgAygCBCELIAMoAgAhCQNAIAAgASIDRgRAA0AgAkEEayICIARBBGsiBCgCADYCACAEIAZHDQAMAwsACwJAIAkoAgAiCiAEQQRrIgcoAgAiCEEDdGoiDCALKAIAIg1BAnQiAWooAgAiDiABIAogA0EEayIBKAIAIgVBA3RqIgpqKAIAIg9IDQAgDiAPRgRAIAxBASANa0ECdCINaigCACAKIA1qKAIASA0BCyAIIQUgAyEBIAchBAsgAkEEayICIAU2AgAgBCAGRw0ACwsgEUEQaiQAC5QHAgl8DH8jAEFAaiIPQRBqQQBBMPwLACAPQQI2AgwgD0KAgICAEDcCBCACQRhsIgIgASgCACIOKAKYAWorAwAhCyAOKAJIIAJqIhQrAwAhCCABKAIEIhIoApgBIRUgEigCSCEWQQAhAUEAIQIDQAJ/IAsgFSAEIA9BBGogAmooAgBBBHRqIhEoAghBGGwiDmorAwBjIAggDiAWaiIOKwMAIgZjIAYgCGEbIAsgFSARKAIEQRhsIhBqKwMAYyAIIBAgFmoiECsDACIJYyAIIAlhG2siGUUEQEQAAAAAAAD4fyEFRAAAAAAAAPh/IQdBAAwBCyARKAIAIRggECsDECEHIBArAwghBQJAIAggCaEiCiAIIAahIgwgCpkgDJljIhAbIAYgCaGjIga9Qv///////////wCDQv/////////3/wBWDQAgDisDCCIJIAWhIgq9Qv///////////wCDQoCAgICAgID4/wBaDQAgDisDECIMIAehIg29Qv///////////wCDQoCAgICAgID4/wBaDQAgByAMIBAbIAYgDaKgIQcgBSAJIBAbIAYgCqKgIQULIBlBACASKAKoASIOIBhBA21BGGxqKwMIIA4gEigCaCAYQQJ0aigCAEEDbUEYbGorAwigRAAAAAAAAAAAZCAUKwMIIgYgBWMgBSAGYRsbCyEOAkAgBb1C////////////AINC//////////f/AFYNAEEAIA5rIA4gES0ADBsgE2ohEyABQQFKBEBBAiEBDAELIAFFIA5FIBdzRXJFBEBBASEBDAELIA9BEGogAUEYbGoiESAHOQMQIBEgBzkDCCARIAU5AwAgAUEBaiEBIA5BAEchFwsgAkEEaiICQQxHDQALAn8gE0UEQEQAAAAAAAD4fyEFQQAMAQsgE0EAIBIoAqgBIANBGGxqKwMQRAAAAAAAAAAAZCAUKwMQIgggDysDICIFIA8rAzgiByAUKwMIIgYgDysDECIJoSILmSAGIA8rAygiBqEiCpljIgEbIAcgBaEiByALIAogARsgBiAJoaMiBqKgIAUgB71C////////////AINCgICAgICAgPj/AFQbIAUgDysDMCAPKwMYob1C////////////AINCgICAgICAgPj/AFQbIAUgBr1C////////////AINCgICAgICAgPj/AFQbIgVjIAUgCGEbGwshASAAIAU5AwggACABNgIAC/wHAw9/A3wDfiMAQdABayIEJAAgBEGgAWpBAEEw/AsAIARB8ABqQQBBMPwLACABKAIAIhAoAlggAkECdGoiBUF4QQQgAkEDb0ECRhtqKAIAIQ8gBSgCACEMIAEoAgQhBSAEQQI2AhAgBEKAgICAEDcCCCAFKAJYIg0gA0EDbCIOQQJ0aiERIAUoAmghEgNAQQEhCQJAIA0gBEEIaiAGaigCACIKIA5qIgtBAnQiB2ooAgAiBSARQQRBCCAKQQFGG0EAIAobQYzpAGooAgBBAnRqKAIAIghIBEAgBSEHIAghBQwBCyAHIBJqKAIAIQtBACEJIAghBwsgBEFAayAKQQR0aiIIIAk6AAwgCCAFNgIIIAggBzYCBCAIIAs2AgAgBkEEaiIGQQxHDQALIAQgDzYCOCAEIAw2AjQgAUEIaiENQQAhBkEAIQdBACEIQQAhCQNAIARBCGogDSAEQTRqIAhqKAIAIgsgAyAEQUBrEIoDAkAgBCsDECITvUL///////////8Ag0L/////////9/8AVg0AIAQoAggiCkEAIAprIAsgDEYbIAlqIQkgBkEBSgRAQQIhBgwBCyAGRSAHIApFc0EBcUVyRQRAQQEhBgwBCyAGQRhsIg4gBEGgAWpqIgUgECgCSCALQRhsaiIHKQMQIhc3AxAgBSAHKQMIIhY3AwggBSAHKQMAIhg3AwAgBSAWNwMQIAUgFzcDCCAEQfAAaiAOaiIFIBY3AxAgBSAYNwMAIAUgEzkDCCAGQQFqIQYgCkEARyEHCyAIQQRqIghBCEcNAAsgBEECNgI8IARCgICAgBA3AjQgAUEQaiEIQQAhBQNAIARBCGogCCACIAwgDyAEQUBrIARBNGogBWooAgBBBHRqIgEoAgAgASgCBCABKAIIEPcEAkAgBCsDECITvUL///////////8Ag0L/////////9/8AVg0AQQAgBCgCCCIDayADIAEtAAwbIAlqIQkgBkEBSgRAQQIhBgwBCyAGRSAHIANFc0EBcUVyRQRAQQEhBgwBCyAGQRhsIgcgBEGgAWpqIgEgEzkDACABIAQrAyAiFDkDCCABIAQrAxgiFTkDECAEQfAAaiAHaiIBIBU5AxAgASAUOQMIIAEgEzkDACABIAQrAyg5AwggBkEBaiEGIANBAEchBwsgBUEEaiIFQQxHDQALAnwgCUUEQEQAAAAAAAD4fyEURAAAAAAAAPh/IRVEAAAAAAAA+H8MAQsgBEEIaiAEQaABaiAEQbgBaiAEQfAAaiAEQYgBahDOASAEKwMQIRUgBCsDGCEUIAQrAwgLIRMgACAVOQMYIAAgFDkDECAAIBM5AwggACAJNgIAIARB0AFqJAALgVYCEX8CfiMAQbABayIFJAAgACAENgKQASAAQQE6AIwBIABBADYChAEgAEIANwJ8IABBADYCdCAAQgA3AmwgAEEANgJkIABCADcCXCAAQQA2AlQgAEIANwJMIABBADYCRCAAQgA3AjwgAEEANgI0IABCADcCLCAAQQA2AiQgAEIANwIcIABBADYCFCAAQgA3AgwgACACNgIEIAAgATYCACAAIANFOgAIIABB/ABqIRUgAEHsAGohEwJAAkACQCABKAJcQQNJDQAgAigCXEEDSQ0AIAEgAhDUBA0BCyATIAEoAkxBABAxIBUgAigCTEEAEDEMAQsgACgCkAEiBwRAIActABANAQsgAEEMaiEGAkACQAJAAkACQAJAAkACQAJAIAAtAAhBAUYEQCAFIAI2AowBIAUgATYCiAEgBSACNgKEASAFIAE2AoABIAUgAjYCfCAFIAE2AnggBUEANgJwIAVCADcCaCAFQQA2AmAgBUIANwJYIAVBADYCUCAFQgA3AkggBSAFQfgAajYCRCABKAJcIQggBSABNgKoAQJAIAIoAowCIgNFDQAgAigC6AEhBCACKALsASEJIAIoAogCIQogBSADNgKgASAFIAo2ApwBIAUgCTYCmAEgBSAENgKUASAFIAVBxABqNgKkASAFIAVBqAFqNgKQASAHBEAgCEUNASAHLQAQQQFxDQFBACEDQQAhBANAIANBAWoiA0GACEYEQEEAIQMgBy0AEA0DCyAFQZAB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CkI0iKdB/w9xIQQCfiADRQRAQQAhAyAJQgyGIgdCAFkEQANAIANBAWshAyAHQgGGIgdCAFkNAAsLIAlBASADa62GDAELIAlC/////////weDQoCAgICAgIAIhAshBwJ+IARFBEBBACEEIApCDIYiCEIAWQRAA0AgBEEBayEEIAhCAYYiCEIAWQ0ACwsgCkEBIARrrYYMAQsgCkL/////////B4NCgICAgICAgAiECyEIAn4CQAJAIAMgBE4EQCADIARKBEADQCAHIAh9IgsgByALQgBZIgYbQgGGIQcgBSAGckEBdCEFIANBAWsiAyAESg0ACyAEIQMLIAUgByAIfSIIQgBZIgZyIQUgCCAHIAYbIgdQBEBBRCEDQgAhBwwDCyAHQv////////8HVg0BA0AgA0EBayEDIAciCEIBhiEHIAhCgICAgICAgARUDQALDAELIANBAWogBEcNAwsgA0EATA0AIAdCgICAgICAgAh9IAOtQjSGhAwBCyAHQQEgA2utiAsgAZkhAL8hAQJAAkAgAyAERg0AIANBAWogBEcNASABIAGgIgwgAGQNACAFQQFxRSAAIAxicg0BCyAFQQFqIQUgASAAoSEBCyACQQAgBUH/////B3EiAmsgAiAJIAqFQgBTGzYCACABmiABIAlCAFMbIQALIAALGwAgAEIBhkKAgICAgICAEHxCgYCAgICAgBBUCxUBAX8jAEEQayIBIAA5AwggASsDCAvaFgMSfwR8AX4jAEEwayIJJAACQAJAAkAgAL0iGEIgiKciA0H/////B3EiBkH61L2ABE0EQCADQf//P3FB+8MkRg0BIAZB/LKLgARNBEAgGEIAWQRAIAEgAEQAAEBU+yH5v6AiAEQxY2IaYbTQvaAiFDkDACABIAAgFKFEMWNiGmG00L2gOQMIQQEhAwwFCyABIABEAABAVPsh+T+gIgBEMWNiGmG00D2gIhQ5AwAgASAAIBShRDFjYhphtNA9oDkDCEF/IQMMBAsgGEIAWQRAIAEgAEQAAEBU+yEJwKAiAEQxY2IaYbTgvaAiFDkDACABIAAgFKFEMWNiGmG04L2gOQMIQQIhAwwECyABIABEAABAVPshCUCgIgBEMWNiGmG04D2gIhQ5AwAgASAAIBShRDFjYhphtOA9oDkDCEF+IQMMAwsgBkG7jPGABE0EQCAGQbz714AE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EQIAIggbIQQgAyAGIAgbIQYLIAUhAyAEIAdBCGogASgCABECAEUNAQsLIAUgBykDGDcDECAFIAcpAxA3AwggBSAHKQMINwMACyAHQSBqJAALwRIBBn8jAEEgayIDJABBASEHAkACQAJAAkACQAJAIAEgAGtBGG0OBgUFAAECAwQLIAFBGGsiASAAIAIoAgARAgBFDQQgAyAAKQMQNwMYIAMgACkDCDcDECADIAApAwA3AwggACABKQMQNwMQIAAgASkDCDcDCCAAIAEpAwA3AwAgASADKQMYNwMQIAEgAykDEDcDCCABIAMpAwg3AwAMBAsgAEEYaiIEIAAgAigCABECACABQRhrIgEgBCACKAIAEQIAIQVFBEAgBUUNBCADIAQpAxA3AxggAyAEKQMINwMQIAMgBCkDADcDCCAEIAEpAxA3AxAgBCABKQMINwMIIAQgASkDADcDACABIAMpAxg3AxAgASADKQMQNwMIIAEgAykDCDcDACAEIAAgAigCABECAEUNBCADIAApAxA3AxggAyAAKQMINwMQIAMgACkDADcDCCAAIAQpAxA3AxAgACAEKQMINwMIIAAgBCkDADcDACAEIAMpAxg3AxAgBCADKQMQNwMIIAQgAykDCDcDAAwECyAFBEAgAyAAKQMQNwMYIAMgACkDCDcDECADIAApAwA3AwggACABKQMQNwMQIAAgASkDCDcDCCAAIAEpAwA3AwAgASADKQMYNwMQIAEgAykDEDcDCCABIAMpAwg3AwAMBAsgAyAAKQMQNwMYIAMgACkDCDcDECADIAApAwA3AwggACAEKQMQNwMQIAAgBCkDCDcDCCAAIAQpAwA3AwAgBCADKQMYNwMQIAQgAykDEDcDCCAEIAMpAwg3AwAgASAEIAIoAgARAgBFDQMgAyAEKQMQNwMYIAMgBCkDCDcDECADIAQpAwA3AwggBCABKQMQNwMQIAQgASkDCDcDCCAEIAEpAwA3AwAgASADKQMYNwMQIAEgAykDEDcDCCABIAMpAwg3AwAMAwsgAUEYayEFIABBGGoiASAAIAIoAgARAgAhCCAAQTBqIgQgASACKAIAEQIAIQYCQCAIRQRAIAZFDQEgAyABKQMQNwMYIAMgASkDCDcDECADIAEpAwA3AwggASAEKQMQNwMQIAEgBCkDCDcDCCABIAQpAwA3AwAgBCADKQMYNwMQIAQgAykDEDcDCCAEIAMpAwg3AwAgASAAIAIoAgARAgBFDQEgAyAAKQMQNwMYIAMgACkDCDcDECADIAApAwA3AwggACABKQMQNwMQIAAgASkDCDcDCCAAIAEpAwA3AwAgASADKQMYNwMQIAEgAykDEDcDCCABIAMpAwg3AwAMAQsgBgRAIAMgACkDEDcDGCADIAApAwg3AxAgAyAAKQMANwMIIAAgBCkDEDcDECAAIAQpAwg3AwggACAEKQMANwMAIAQgAykDGDcDECAEIAMpAxA3AwggBCADKQMINwMADAELIAMgACkDEDcDGCADIAApAwg3AxAgAyAAKQMANwMIIAAgASkDEDcDECAAIAEpAwg3AwggACABKQMANwMAIAEgAykDGDcDECABIAMpAxA3AwggASADKQMINwMAIAQgASACKAIAEQIARQ0AIAMgASkDEDcDGCADIAEpAwg3AxAgAyABKQMANwMIIAEgBCkDEDcDECABIAQpAwg3AwggASAEKQMANwMAIAQgAykDGDcDECAEIAMpAxA3AwggBCADKQMINwMACyAFIAQgAigCABECAEUNAiADIAQpAxA3AxggAyAEKQMINwMQIAMgBCkDADcDCCAEIAUpAxA3AxAgBCAFKQMINwMIIAQgBSkDADcDACAFIAMpAxg3AxAgBSADKQMQNwMIIAUgAykDCDcDACAEIAEgAigCABECAEUNAiADIAEpAxA3AxggAyABKQMINwMQIAMgASkDADcDCCABIAQpAxA3AxAgASAEKQMINwMIIAEgBCkDADcDACAEIAMpAxg3AxAgBCADKQMQNwMIIAQgAykDCDcDACABIAAgAigCABECAEUNAiADIAApAxA3AxggAyAAKQMINwMQIAMgACkDADcDCCAAIAEpAxA3AxAgACABKQMINwMIIAAgASkDADcDACABIAMpAxg3AxAgASADKQMQNwMIIAEgAykDCDcDAAwCCyAAIABBGGogAEEwaiAAQcgAaiABQRhrIAIQsgMMAQsgAEEYaiIFIAAgAigCABECACEIIABBMGoiBCAFIAIoAgARAgAhBgJAIAhFBEAgBkUNASADIAUpAxA3AxggAyAFKQMINwMQIAMgBSkDADcDCCAFIAQpAxA3AxAgBSAEKQMINwMIIAUgBCkDADcDACAEIAMpAxg3AxAgBCADKQMQNwMIIAQgAykDCDcDACAFIAAgAigCABECAEUNASADIAApAxA3AxggAyAAKQMINwMQIAMgACkDADcDCCAAIAUpAxA3AxAgACAFKQMINwMIIAAgBSkDADcDACAFIAMpAxg3AxAgBSADKQMQNwMIIAUgAykDCDcDAAwBCyAGBEAgAyAAKQMQNwMYIAMgACkDCDcDECADIAApAwA3AwggACAEKQMQNwMQIAAgBCkDCDcDCCAAIAQpAwA3AwAgBCADKQMYNwMQIAQgAykDEDcDCCAEIAMpAwg3AwAMAQsgAyAAKQMQNwMYIAMgACkDCDcDECADIAApAwA3AwggACAFKQMQNwMQIAAgBSkDCDcDCCAAIAUpAwA3AwAgBSADKQMYNwMQIAUgAykDEDcDCCAFIAMpAwg3AwAgBCAFIAIoAgARAgBFDQAgAyAFKQMQNwMYIAMgBSkDCDcDECADIAUpAwA3AwggBSAEKQMQNwMQIAUgBCkDCDcDCCAFIAQpAwA3AwAgBCADKQMYNwMQIAQgAykDEDcDCCAEIAMpAwg3AwALIABByABqIgUgAUYNAEEAIQgDQAJAIAUgBCACKAIAEQIARQ0AIAMgBSkDEDcDGCADIAUpAwg3AxAgAyAFKQMANwMIIAUhBgNAAkAgBiAEIgcpAxA3AxAgBiAEKQMINwMIIAYgBCkDADcDACAAIARGBEAgACEHDAELIANBCGogByIGQRhrIgQgAigCABECAA0BCwsgByADKQMYNwMQIAcgAykDEDcDCCAHIAMpAwg3AwAgCEEBaiIIQQhHDQAgBUEYaiABRiEHDAILIAUiBEEYaiIHIQUgASAHRw0AC0EBIQcLIANBIGokACAHC1oBAn8jAEEQayICJAAgASAAKAIEIgNBAXVqIQEgACgCACEAIAIgASADQQFxBH8gASgCACAAaigCAAUgAAsRAQAgAhCYBSACIAI2AgwgAkEMahApIAJBEGokAAuMCgEDfyMAQSBrIgYkACABIAAgBSgCABECACEIIAIgASAFKAIAEQIAIQcCQCAIRQRAIAdFDQEgBiABKQMQNwMYIAYgASkDCDcDECAGIAEpAwA3AwggASACKQMQNwMQIAEgAikDCDcDCCABIAIpAwA3AwAgAiAGKQMYNwMQIAIgBikDEDcDCCACIAYpAwg3AwAgASAAIAUoAgARAgBFDQEgBiAAKQMQNwMYIAYgACkDCDcDECAGIAApAwA3AwggACABKQMQNwMQIAAgASkDCDcDCCAAIAEpAwA3AwAgASAGKQMYNwMQIAEgBikDEDcDCCABIAYpAwg3AwAMAQsgBwRAIAYgACkDEDcDGCAGIAApAwg3AxAgBiAAKQMANwMIIAAgAikDEDcDECAAIAIpAwg3AwggACACKQMANwMAIAIgBikDGDcDECACIAYpAxA3AwggAiAGKQMINwMADAELIAYgACkDEDcDGCAGIAApAwg3AxAgBiAAKQMANwMIIAAgASkDEDcDECAAIAEpAwg3AwggACABKQMANwMAIAEgBikDGDcDECABIAYpAxA3AwggASAGKQMINwMAIAIgASAFKAIAEQIARQ0AIAYgASkDEDcDGCAGIAEpAwg3AxAgBiABKQMANwMIIAEgAikDEDcDECABIAIpAwg3AwggASACKQMANwMAIAIgBikDGDcDECACIAYpAxA3AwggAiAGKQMINwMACwJAIAMgAiAFKAIAEQIARQ0AIAYgAikDEDcDGCAGIAIpAwg3AxAgBiACKQMANwMIIAIgAykDEDcDECACIAMpAwg3AwggAiADKQMANwMAIAMgBikDGDcDECADIAYpAxA3AwggAyAGKQMINwMAIAIgASAFKAIAEQIARQ0AIAYgASkDEDcDGCAGIAEpAwg3AxAgBiABKQMANwMIIAEgAikDEDcDECABIAIpAwg3AwggASACKQMANwMAIAIgBikDGDcDECACIAYpAxA3AwggAiAGKQMINwMAIAEgACAFKAIAEQIARQ0AIAYgACkDEDcDGCAGIAApAwg3AxAgBiAAKQMANwMIIAAgASkDEDcDECAAIAEpAwg3AwggACABKQMANwMAIAEgBikDGDcDECABIAYpAxA3AwggASAGKQMINwMACwJAIAQgAyAFKAIAEQIARQ0AIAYgAykDEDcDGCAGIAMpAwg3AxAgBiADKQMANwMIIAMgBCkDEDcDECADIAQpAwg3AwggAyAEKQMANwMAIAQgBikDGDcDECAEIAYpAxA3AwggBCAGKQMINwMAIAMgAiAFKAIAEQIARQ0AIAYgAikDEDcDGCAGIAIpAwg3AxAgBiACKQMANwMIIAIgAykDEDcDECACIAMpAwg3AwggAiADKQMANwMAIAMgBikDGDcDECAD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IAgpAwBXDQELIAVBADYCACAEIAc2AgAgBUEEaiEFDAELIABBADYCACAEIAM2AgAgAEEEaiEACyAEQQRqIQQgACACRw0ACwsgASAFRg0AA0AgBSgCACEAIAVBADYCACAEIAA2AgAgBEEEaiEEIAVBBGoiBSABRw0ACwsLDwsgAEEANgIAIAQgAjYCACABKAIAIQAgAUEANgIAIAQgADYCBAseAQJ/IAAoAgQgACgCACICa0EEdQRAIAAgAjYCBAsLjzMBCn8jAEEgayIFJAADQCABQcgAayEKIAFBMGshDCABQRhrIQkCQANAAkACQAJAAkACQCABIABrIghBGG0iBg4GBgYAAQIDBAsgAUEYayIBIAAgAigCABECAEUNBSAFIAApAxA3AxggBSAAKQMINwMQIAUgACkDADcDCCAAIAEpAxA3AxAgACABKQMINwMIIAAgASkDADcDACABIAUpAxg3AxAgASAFKQMQNwMIIAEgBSkDCDcDAAwFCyAAQRhqIgMgACACKAIAEQIAIAFBGGsiASADIAIoAgARAgAhBEUEQCAERQ0FIAUgAykDEDcDGCAFIAMpAwg3AxAgBSADKQMANwMIIAMgASkDEDcDECADIAEpAwg3AwggAyABKQMANwMAIAEgBSkDGDcDECABIAUpAxA3AwggASAFKQMINwMAIAMgACACKAIAEQIARQ0FIAUgACkDEDcDGCAFIAApAwg3AxAgBSAAKQMANwMIIAAgAykDEDcDECAAIAMpAwg3AwggACADKQMANwMAIAMgBSkDGDcDECADIAUpAxA3AwggAyAFKQMINwMADAULIAQEQCAFIAApAxA3AxggBSAAKQMINwMQIAUgACkDADcDCCAAIAEpAxA3AxAgACABKQMINwMIIAAgASkDADcDACABIAUpAxg3AxAgASAFKQMQNwMIIAEgBSkDCDcDAAwFCyAFIAApAxA3AxggBSAAKQMINwMQIAUgACkDADcDCCAAIAMpAxA3AxAgACADKQMINwMIIAAgAykDADcDACADIAUpAxg3AxAgAyAFKQMQNwMIIAMgBSkDCDcDACABIAMgAigCABECAEUNBCAFIAMpAxA3AxggBSADKQMINwMQIAUgAykDADcDCCADIAEpAxA3AxAgAyABKQMINwMIIAMgASkDADcDACABIAUpAxg3AxAgASAFKQMQNwMIIAEgBSkDCDcDAAwECyABQRhrIQQgAEEYaiIBIAAgAigCABECACEIIABBMGoiAyABIAIoAgARAgAhBgJAIAhFBEAgBkUNASAFIAEpAxA3AxggBSABKQMINwMQIAUgASkDADcDCCABIAMpAxA3AxAgASADKQMINwMIIAEgAykDADcDACADIAUpAxg3AxAgAyAFKQMQNwMIIAMgBSkDCDcDACABIAAgAigCABECAEUNASAFIAApAxA3AxggBSAAKQMINwMQIAUgACkDADcDCCAAIAEpAxA3AxAgACABKQMINwMIIAAgASkDADcDACABIAUpAxg3AxAgASAFKQMQNwMIIAEgBSkDCDcDAAwBCyAGBEAgBSAAKQMQNwMYIAUgACkDCDcDECAFIAApAwA3AwggACADKQMQNwMQIAAgAykDCDcDCCAAIAMpAwA3AwAgAyAFKQMYNwMQIAMgBSkDEDcDCCADIAUpAwg3AwAMAQsgBSAAKQMQNwMYIAUgACkDCDcDECAFIAApAwA3AwggACABKQMQNwMQIAAgASkDCDcDCCAAIAEpAwA3AwAgASAFKQMYNwMQIAEgBSkDEDcDCCABIAUpAwg3AwAgAyABIAIoAgARAgBFDQAgBSABKQMQNwMYIAUgASkDCDcDECAFIAEpAwA3AwggASADKQMQNwMQIAEgAykDCDcDCCABIAMpAwA3AwAgAyAFKQMYNwMQIAMgBSkDEDcDCCADIAUpAwg3AwALIAQgAyACKAIAEQIARQ0DIAUgAykDEDcDGCAFIAMpAwg3AxAgBSADKQMANwMIIAMgBCkDEDcDECADIAQpAwg3AwggAyAEKQMANwMAIAQgBSkDGDcDECAEIAUpAxA3AwggBCAFKQMINwMAIAMgASACKAIAEQIARQ0DIAUgASkDEDcDGCAFIAEpAwg3AxAgBSABKQMANwMIIAEgAykDEDcDECABIAMpAwg3AwggASADKQMANwMAIAMgBSkDGDcDECADIAUpAxA3AwggAyAFKQMINwMAIAEgACACKAIAEQIARQ0DIAUgACkDEDcDGCAFIAApAwg3AxAgBSAAKQMANwMIIAAgASkDEDcDECAAIAEpAwg3AwggACABKQMANwMAIAEgBSkDGDcDECABIAUpAxA3AwggASAFKQMINwMADAMLIAAgAEEYaiAAQTBqIABByABq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AgARAgAhDSAMIAggAigCABECACELAkAgDUUEQCALRQ0BIAUgCCkDEDcDGCAFIAgpAwg3AxAgBSAIKQMANwMIIAggDCkDEDcDECAIIAwpAwg3AwggCCAMKQMANwMAIAwgBSkDGDcDECAMIAUpAxA3AwggDCAFKQMINwMAIAggByACKAIAEQIARQ0BIAUgBykDEDcDGCAFIAcpAwg3AxAgBSAHKQMANwMIIAcgCCkDEDcDECAHIAgpAwg3AwggByAIKQMANwMAIAggBSkDGDcDECAIIAUpAxA3AwggCCAFKQMINwMADAELIAsEQCAFIAcpAxA3AxggBSAHKQMINwMQIAUgBykDADcDCCAHIAwpAxA3AxAgByAMKQMINwMIIAcgDCkDADcDACAMIAUpAxg3AxAgDCAFKQMQNwMIIAwgBSkDCDcDAAwBCyAFIAcpAxA3AxggBSAHKQMINwMQIAUgBykDADcDCCAHIAgpAxA3AxAgByAIKQMINwMIIAcgCCkDADcDACAIIAUpAxg3AxAgCCAFKQMQNwMIIAggBSkDCDcDACAMIAggAigCABECAEUNACAFIAgpAxA3AxggBSAIKQMINwMQIAUgCCkDADcDCCAIIAwpAxA3AxAgCCAMKQMINwMIIAggDCkDADcDACAMIAUpAxg3AxAgDCAFKQMQNwMIIAwgBSkDCDcDAAsgBkEYaiIHIABBMGoiCyACKAIAEQIAIQ4gCiAHIAIoAgARAgAhDQJAIA5FBEAgDUUNASAFIAcpAxA3AxggBSAHKQMINwMQIAUgBykDADcDCCAHIAopAxA3AxAgByAKKQMINwMIIAcgCikDADcDACAKIAUpAxg3AxAgCiAFKQMQNwMIIAogBSkDCDcDACAHIAsgAigCABECAEUNASAFIAspAxA3AxggBSALKQMINwMQIAUgCykDADcDCCALIAcpAxA3AxAgCyAHKQMINwMIIAsgBykDADcDACAHIAUpAxg3AxAgByAFKQMQNwMIIAcgBSkDCDcDAAwBCyANBEAgBSALKQMQNwMYIAUgCykDCDcDECAFIAspAwA3AwggCyAKKQMQNwMQIAsgCikDCDcDCCALIAopAwA3AwAgCiAFKQMYNwMQIAogBSkDEDcDCCAKIAUpAwg3AwAMAQsgBSALKQMQNwMYIAUgCykDCDcDECAFIAspAwA3AwggCyAHKQMQNwMQIAsgBykDCDcDCCALIAcpAwA3AwAgByAFKQMYNwMQIAcgBSkDEDcDCCAHIAUpAwg3AwAgCiAHIAIoAgARAgBFDQAgBSAHKQMQNwMYIAUgBykDCDcDECAFIAcpAwA3AwggByAKKQMQNwMQIAcgCikDCDcDCCAHIAopAwA3AwAgCiAFKQMYNwMQIAogBSkDEDcDCCAKIAUpAwg3AwALIAYgCCACKAIAEQIAIQ0gByAGIAIoAgARAgAhCwJAIA1FBEAgC0UNASAFIAYpAxA3AxggBSAGKQMINwMQIAUgBikDADcDCCAGIAcpAxA3AxAgBiAHKQMINwMIIAYgBykDADcDACAHIAUpAxg3AxAgByAFKQMQNwMIIAcgBSkDCDcDACAGIAggAigCABECAEUNASAFIAgpAxA3AxggBSAIKQMINwMQIAUgCCkDADcDCCAIIAYpAxA3AxAgCCAGKQMINwMIIAggBikDADcDACAGIAUpAxg3AxAgBiAFKQMQNwMIIAYgBSkDCDcDAAwBCyALBEAgBSAIKQMQNwMYIAUgCCkDCDcDECAFIAgpAwA3AwggCCAHKQMQNwMQIAggBykDCDcDCCAIIAcpAwA3AwAgByAFKQMYNwMQIAcgBSkDEDcDCCAHIAUpAwg3AwAMAQsgBSAIKQMQNwMYIAUgCCkDCDcDECAFIAgpAwA3AwggCCAGKQMQNwMQIAggBikDCDcDCCAIIAYpAwA3AwAgBiAFKQMYNwMQIAYgBSkDEDcDCCAGIAUpAwg3AwAgByAGIAIoAgARAgBFDQAgBSAGKQMQNwMYIAUgBikDCDcDECAFIAYpAwA3AwggBiAHKQMQNwMQIAYgBykDCDcDCCAGIAcpAwA3AwAgByAFKQMYNwMQIAcgBSkDEDcDCCAHIAUpAwg3AwALIAUgACkDEDcDGCAFIAApAwg3AxAgBSAAKQMANwMIIAAgBikDEDcDECAAIAYpAwg3AwggACAGKQMANwMAIAYgBSkDGDcDECAGIAUpAxA3AwggBiAFKQMINwMADAELIAAgBiAHEQIAIAkgACACKAIAEQIAIQhFBEAgCEUNASAFIAApAxA3AxggBSAAKQMINwMQIAUgACkDADcDCCAAIAkpAxA3AxAgACAJKQMINwMIIAAgCSkDADcDACAJIAUpAxg3AxAgCSAFKQMQNwMIIAkgBSkDCDcDACAAIAYgAigCABECAEUNASAFIAYpAxA3AxggBSAGKQMINwMQIAUgBikDADcDCCAGIAApAxA3AxAgBiAAKQMINwMIIAYgACkDADcDACAAIAUpAxg3AxAgACAFKQMQNwMIIAAgBSkDCDcDAAwBCyAIBEAgBSAGKQMQNwMYIAUgBikDCDcDECAFIAYpAwA3AwggBiAJKQMQNwMQIAYgCSkDCDcDCCAGIAkpAwA3AwAgCSAFKQMYNwMQIAkgBSkDEDcDCCAJIAUpAwg3AwAMAQsgBSAGKQMQNwMYIAUgBikDCDcDECAFIAYpAwA3AwggBiAAKQMQNwMQIAYgACkDCDcDCCAGIAApAwA3AwAgACAFKQMYNwMQIAAgBSkDEDcDCCAAIAUpAwg3AwAgCSAAIAIoAgARAgBFDQAgBSAAKQMQNwMYIAUgACkDCDcDECAFIAApAwA3AwggACAJKQMQNwMQIAAgCSkDCDcDCCAAIAkpAwA3AwAgCSAFKQMYNwMQIAkgBSkDEDcDCCAJIAUpAwg3AwALIANBAWshAwJAIARBAXEiCw0AIABBGGsgACACKAIAEQIADQBBACEEIwBBMGsiByQAIAcgACkDEDcDECAHIAApAwg3AwggByAAKQMANwMAAkAgByABIghBGGsgAigCABECAARAIAAhBgNAIAcgBkEYaiIGIAIoAgARAgBFDQALDAELIAAhBgNAIAZBGGoiBiAITw0BIAcgBiACKAIAEQIARQ0ACwsgBiAISQRAA0AgByAIQRhrIgggAigCABECAA0ACwsgBiAISQRAA0AgByAGKQMQNwMoIAcgBikDCDcDICAHIAYpAwA3AxggBiAIKQMQNwMQIAYgCCkDCDcDCCAGIAgpAwA3AwAgCCAHKQMoNwMQIAggBykDIDcDCCAIIAcpAxg3AwADQCAHIAZBGGoiBiACKAIAEQIARQ0ACwNAIAcgCEEYayIIIAIoAgARAgANAAsgBiAISQ0ACwsgBkEYayIIIABHBEAgACAIKQMQNwMQIAAgCCkDCDcDCCAAIAgpAwA3AwALIAggBykDEDcDECAIIAcpAwg3AwggCCAHKQMANwMAIAdBMGokACAGIQAMAQsLIAEhByMAQTBrIgkkACAJIAApAxA3AxAgCSAAKQMINwMIIAkgACkDADcDACAAIQYDQCAGIghBGGoiBiAJIAIoAgARAgANAAsCQCAAIAhGBEADQCAGIAdPDQIgB0EYayIHIAkgAigCABECAEUNAAwCCwALA0AgB0EYayIHIAkgAigCABECAEUNAAsLIAYgB08iCkUEQANAIAkgBikDEDcDKCAJIAYpAwg3AyAgCSAGKQMANwMYIAYgBykDEDcDECAGIAcpAwg3AwggBiAHKQMANwMAIAcgCSkDKDcDECAHIAkpAyA3AwggByAJKQMYNwMAA0AgBiIIQRhqIgYgCSACKAIAEQIADQALA0AgB0EYayIHIAkgAigCABECAEUNAAsgBiAHSQ0ACwsgACAIRwRAIAAgCCkDEDcDECAAIAgpAwg3AwggACAIKQMANwMACyAIIAkpAxA3AxAgCCAJKQMINwMIIAggCSkDADcDACAFIAo6AAwgBSAINgIIIAlBMGokACAFKAIIIQgCQCAFLQAMQQFHDQAgACAIIAIQsAMhByAIQRhqIgYgASACELADBEAgCCEBIAdFDQMMAgsgB0UNACAGIQAMAgsgACAIIAIgAyALELcDIAhBGGohAEEAIQQMAQsLIAVBIGokAAubFgIOfwZ+IwBBMGsiBiQAIAZCADcDECAGQgA3AwggASgCMCEDIAEoAlQiAikDCCEQAkAgASgCWC0ACCIOQQFGBEAgA0EASgRAA0AgAiIDKAIQIgIpAwggEFINAyADLQAYQQZxRQ0ADAMLAAsDQCACIgMoAhQiAikDCCAQUg0CIAMtABhBBnFFDQALDAELIANBAEoEQANAIAIiAygCECICKQMIIBBRDQAMAgsACwNAIAIiAygCFCICKQMIIBBRDQALCyADKAIYQR10QR91IANxIQkgASkDICEQAn4CQCABKQMQIhIgASkDAFEEQCABIQIDQCACKAJEIgJBAEchAyACRQ0CIAIoAlQgCUcNAAsMAQsgECASIBAgElUbIRUgECASIBAgElMiAxsMAQsgECEVIBALIRICQAJAIAEoAjxFDQAgBiABKQMINwMgIAYgEDcDGCABIAZBGGoQYyIHKAIYLQBMDQACQCAAKAJgIgIgACgCZCIFSQRAIAJBAToACCACQQA2AgQgAiAHNgIAIAJBDGohBQwBCyACIABB3ABqIgQoAgAiCmtBDG0iDEEBaiICQdaq1aoBTw0CIAZBGGpB1arVqgEgBSAKa0EMbSIFQQF0IgogAiACIApJGyAFQarVqtUATxsgDCAEEGEiAigCCCIFQQE6AAggBUEANgIEIAUgBzYCACACIAVBDGo2AgggAigCBCAAKAJgIAAoAlwiB2siBUF0bUEMbGohBCAFBEAgBCAHIAX8CgAACyAAKAJcIQcgACAENgJcIAIgBzYCBCAAIAIoAggiBTYCYCACIAc2AgggACgCZCEEIAAgAigCDDYCZCACIAc2AgAgAiAENgIMIAIQ1gELIAAgBTYCYAsgAUEQaiEHIABB3ABqIQogAUFAayEMIAFBxABqIQ0DQAJAAkACQCANIAwgAxsoAgAiAkUNAANAIAkgAigCVEYEQAJAIAEoAjxFDQAgAigCYARAIAAgAiACQRBqEH4gASgCPEUNAQsgCSABKAJURwRAA0AgASAHEGMaIAAgARD+ASABKAJUIAlHDQALCyADBEAgACABIAIgBxCGAQwBCyAAIAIgASAHEIYBCwJAIAIoAkQiAyACKAJAIgVyRQRAIAIgACgCHCIHRw0BCwJAIAUEQCAFIAM2AkQMAQsgACADNgIcCyADBEAgAyAFNgJACyACECIgACgCHCEHCyABKAJEIgIgASgCQCIDckUgASAHR3ENAwJAIAMEQCADIAI2AkQMAQsgACACNgIcCyACBEAgAiADNgJACyABECIMAwsCfwJAAkACQAJAIAkgASgCVCIERw0AIAQtABhBA3ENACACKQMgIRQMAQsgAikDICEUAkAgAwRAIBQgFVcNAQwHCyASIBRVDQYLIBQgBykDAFINACACKQMYIhEgAikDCFENACACQSBqIQUgBiAEQRBBFCABKAIwQQBKG2ooAgAiBCkDCDcDECAGIAQpAwA3AwggAigCWCIELQAIIQgCQCADBEACQCAIQQFxRQ0AIAQoAgQgASgCWCgCBEYNACACKAI8DQAgAikDECEQAkAgBikDECITIBFRDQAgECACKQMAIhFRDQAgAikDCCIQIBNRBEAgESEQDAELIBEgAisDKCATIBB9uaKe/AZ8IRALIBAgBikDCFUNCAwCCyACKQMQIRACQCAGKQMQIhMgEVENACAQIAIpAwAiEVENACACKQMIIhAgE1EEQCARIRAMAQsgESACKwMoIBMgEH25op78BnwhEAsgECAGKQMIUw0BDAcLAkACQCAIQQFxRQ0AIAQoAgQgASgC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AkEANgIAIAMEQCADECILIAEgAkcNAAsLIAAgATYCBAuhAwEEfyMAQSBrIgYkAAJAIAEoAhgiA0EIcUUEQCABIANBCHI2AhhBDBAjIgNBADoACCADIAI2AgQgAyABNgIAAkAgACgCBCIBIAAoAggiAkkEQCABIAM2AgAgAUEEaiEDDAELIAEgACgCACIEa0ECdSIFQQFqIgFBgICAgARPDQIgBkEMakH/////AyACIARrIgJBAXUiBCABIAEgBEkbIAJB/P///wdPGyAFIAAQSiIBKAIIIgIgAzYCACABIAJBBGo2AgggASgCBCAAKAIEIAAoAgAiBGsiAmshAyACBEAgAyAEIAL8CgAACyAAKAIAIQIgACADNgIAIAEgAjYCBCAAIAEoAggiAzYCBCABIAI2AgggACgCCCEEIAAgASgCDDYCCCABIAI2AgAgASAENgIMIAEoAgQiBSABKAIIIgJHBEADQCABIAJBBGsiAjYCCCACKAIAIQQgAkEANgIAIAQEQCAEECIgASgCCCECCyACIAVHDQALCyABKAIAIgIEQCABKAIMGiACECILCyAAIAM2AgQLIAZBIGokAA8LECYAC3gBAn8gACgCPCICIAEoAjwiA0YEQCACIAIpAwhCIIk3AwgPCwJAIAJFDQAgAigCCCAARgRAIAIgATYCCAwBCyACIAE2AgwLAkAgA0UNACADKAIIIAFGBEAgAyAANgIIDAELIAMgADYCDAsgACADNgI8IAEgAjYCPAtqAQJ/IwBBEGsiBCQAIAIEQCADIAJBDGxqIQIDQCAEIAA2AgwgBCABEDwhBSADEEUgAyAFKAIANgIAIAMgBCgCBDYCBCADIAQoAgg2AgggAUEMaiEBIANBDGoiAyACRw0ACwsgBEEQaiQAC/wBAQR/IwBBEGsiByQAIAAoAgQiBiEEIAIgASAGIANraiIFSwRAIAUhAwNAIARBADYCCCAEQgA3AgAgBCADKAIANgIAIAQgAygCBDYCBCAEIAMoAgg2AgggA0EANgIIIANCADcCACAEQQxqIQQgA0EMaiIDIAJJDQALCyAAIAQ2AgQgBiEAIAEiAyAFIgZHBEADQCAAIgFBDGsiABBFIAAgBUEMayICKAIANgIAIAFBCGsgBUEIaygCADYCACABQQRrIAVBBGsiASgCADYCACABQQA2AgAgAkIANwIAIAIiBSADRw0ACwsgByAANgIMIAcgBjYCCCAHQRBqJAAL9QMBBn8jAEGQAWsiBCQAAkAgAkECSA0AIAJBAmtBAXYiCSADIABrIgZBBHVIDQAgACAGQQN1IgZBAWoiB0EEdGohBSACIAZBAmoiBkoEQCABKAIAIQggBCAFKQMINwN4IAQgBSkDADcDcCAEIAUpAxA3A2AgBCAFKQMYNwNoIAYgByAEQfAAaiAEQeAAaiAIEQIAIgYbIQcgBUEQaiAFIAYbIQULIAEoAgAhBiAEIAUpAwg3A1ggBCAFKQMANwNQIAQgAykDADcDQCAEIAMpAwg3A0ggBEHQAGogBEFAayAGEQIADQAgBCADKQMINwOIASAEIAMpAwA3A4ABA0ACQCADIAUiBikDCDcDCCADIAUpAwA3AwAgByAJSg0AIAAgB0EBdCIDQQFyIgdBBHRqIQUgAiADQQJqIgNKBEAgASgCACEIIAQgBSkDCDcDOCAEIAUpAwA3AzAgBCAFKQMQNwMgIAQgBSkDGDcDKCADIAcgBEEwaiAEQSBqIAgRAgAiAxshByAFQRBqIAUgAxshBQsgASgCACEIIAQgBSkDCDcDGCAEIAUpAwA3AxAgBCAEKQOAATcDACAEIAQpA4gBNwMIIAYhAyAEQRBqIAQgCBECAEUNAQsLIAYgBCkDiAE3AwggBiAEKQOAATcDAAsgBEGQAWokAAv8FQEHfyMAQeAEayIDJABBASEGAkACQAJAAkACQAJAIAEgAGtBBHUOBgUFAAECAwQLIAIoAgAhAiADIAFBEGsiASkDCDcD2AEgAyABKQMANwPQASADIAApAwA3A8ABIAMgACkDCDcDyAEgA0HQAWogA0HAAWogAhECAEUNBCADIAApAwg3A9gEIAMgACkDADcD0AQgACABKQMINwMIIAAgASkDADcDACABIAMpA9gENwMIIAEgAykD0AQ3AwAMBAsgAigCACEEIAMgACkDGDcD2AIgAyAAKQMQNwPQAiADIAApAwA3A8ACIAMgACkDCDcDyAIgA0HQAmogA0HAAmogBBECACACKAIAIQQgAyABQRBrIgEpAwg3A7gCIAMgASkDADcDsAIgAyAAKQMQNwOgAiADIAApAxg3A6gCIANBsAJqIANBoAJqIAQRAgAhBEUEQCAERQ0EIAMgACkDGDcD2AQgAyAAKQMQNwPQBCAAIAEpAwg3AxggACABKQMANwMQIAEgAykD2AQ3AwggASADKQPQBDcDACACKAIAIQEgAyAAKQMYNwOYAiADIAApAxA3A5ACIAMgACkDADcDgAIgAyAAKQMINwOIAiADQZACaiADQYACaiABEQIARQ0EIAMgACkDCDcD2AQgAyAAKQMANwPQBCAAIAApAxg3AwggACAAKQMQNwMAIAAgAykD2AQ3AxggACADKQPQBDcDEAwECyAEBEAgAyAAKQMINwPYBCADIAApAwA3A9AEIAAgASkDCDcDCCAAIAEpAwA3AwAgASADKQPYBDcDCCABIAMpA9AENwMADAQLIAMgACkDCDcD2AQgAyAAKQMANwPQBCAAIAApAxg3AwggACAAKQMQNwMAIAAgAykD2AQ3AxggACADKQPQBDcDECACKAIAIQIgAyABKQMINwP4ASADIAEpAwA3A/ABIAMgACkDEDcD4AEgAyAAKQMYNwPoASADQfABaiADQeABaiACEQIARQ0DIAMgACkDGDcD2AQgAyAAKQMQNwPQBCAAIAEpAwg3AxggACABKQMANwMQIAEgAykD2AQ3AwggASADKQPQBDcDAAwDCyACKAIAIQQgAyAAKQMYNwO4BCADIAApAxA3A7AEIAMgACkDADcDoAQgAyAAKQMINwOoBCADQbAEaiADQaAEaiAEEQIAIQUgAigCACEEIAMgACkDKDcDmAQgAyAAKQMgNwOQBCADIAApAxA3A4AEIAMgACkDGDcDiAQgAUEQayEBIANBkARqIANBgARqIAQRAgAhBAJAIAVFBEAgBEUNASADIAApAxg3A9gEIAMgACkDEDcD0AQgACAAKQMoNwMYIAAgACkDIDcDECAAIAMpA9gENwMoIAAgAykD0AQ3AyAgAigCACEEIAMgACkDGDcD+AMgAyAAKQMQNwPwAyADIAApAwA3A+ADIAMgACkDCDcD6AMgA0HwA2ogA0HgA2ogBBECAEUNASADIAApAwg3A9gEIAMgACkDADcD0AQgACAAKQMYNwMIIAAgACkDEDcDACAAIAMpA9gENwMYIAAgAykD0AQ3AxAMAQsgBARAIAMgACkDCDcD2AQgAyAAKQMANwPQBCAAIAApAyg3AwggACAAKQMgNwMAIAAgAykD2AQ3AyggACADKQPQBDcDIAwBCyADIAApAwg3A9gEIAMgACkDADcD0AQgACAAKQMYNwMIIAAgACkDEDcDACAAIAMpA9gENwMYIAAgAykD0AQ3AxAgAigCACEEIAMgACkDKDcD2AMgAyAAKQMgNwPQAyADIAApAxA3A8ADIAMgACkDGDcDyAMgA0HQA2ogA0HAA2ogBBECAEUNACADIAApAxg3A9gEIAMgACkDEDcD0AQgACAAKQMoNwMYIAAgACkDIDcDECAAIAMpA9gENwMoIAAgAykD0AQ3AyALIAIoAgAhBCADIAEpAwg3A7gDIAMgASkDADcDsAMgAyAAKQMgNwOgAyADIAApAyg3A6gDIANBsANqIANBoANqIAQRAgBFDQIgAyAAKQMoNwPYBCADIAApAyA3A9AEIAAgASkDCDcDKCAAIAEpAwA3AyAgASADKQPYBDcDCCABIAMpA9AENwMAIAIoAgAhASADIAApAyg3A5gDIAMgACkDIDcDkAMgAyAAKQMQNwOAAyADIAApAxg3A4gDIANBkANqIANBgANqIAERAgBFDQIgAyAAKQMYNwPYBCADIAApAxA3A9AEIAAgACkDKDcDGCAAIAApAyA3AxAgACADKQPYBDcDKCAAIAMpA9AENwMgIAIoAgAhASADIAApAxg3A/gCIAMgACkDEDcD8AIgAyAAKQMANwPgAiADIAApAwg3A+gCIANB8AJqIANB4AJqIAERAgBFDQIgAyAAKQMINwPYBCADIAApAwA3A9AEIAAgACkDGDcDCCAAIAApAxA3AwAgACADKQPYBDcDGCAAIAMpA9AENwMQDAILIAAgAEEQaiAAQSBqIABBMGogAUEQayACEMQDDAELIAIoAgAhBCADIAApAxg3A7gBIAMgACkDEDcDsAEgAyAAKQMANwOgASADIAApAwg3A6gBIANBsAFqIANBoAFqIAQRAgAhByACKAIAIQUgAyAAKQMoNwOYASADIAApAyA3A5ABIAMgACkDEDcDgAEgAyAAKQMYNwOIASAAQSBqIQQgA0GQAWogA0GAAWogBRECACEFAkAgB0UEQCAFRQ0BIAMgACkDGDcD2AQgAyAAKQMQNwPQBCAAIAQpAwg3AxggACAEKQMANwMQIAQgAykD2AQ3AwggBCADKQPQBDcDACACKAIAIQUgAyAAKQMYNwN4IAMgACkDEDcDcCADIAApAwA3A2AgAyAAKQMINwNoIANB8ABqIANB4ABqIAURAgBFDQEgAyAAKQMINwPYBCADIAApAwA3A9AEIAAgACkDGDcDCCAAIAApAxA3AwAgACADKQPYBDcDGCAAIAMpA9AENwMQDAELIAUEQCADIAApAwg3A9gEIAMgACkDADcD0AQgACAEKQMINwMIIAAgBCkDADcDACAEIAMpA9gENwMIIAQgAykD0AQ3AwAMAQsgAyAAKQMINwPYBCADIAApAwA3A9AEIAAgACkDGDcDCCAAIAApAxA3AwAgACADKQPYBDcDGCAAIAMpA9AENwMQIAIoAgAhBSADIAQpAwg3A1ggAyAEKQMANwNQIAMgACkDEDcDQCADIAApAxg3A0ggA0HQAGogA0FAayAFEQIARQ0AIAMgACkDGDcD2AQgAyAAKQMQNwPQBCAAIAQpAwg3AxggACAEKQMANwMQIAQgAykD2AQ3AwggBCADKQPQBDcDAAsgAEEwaiIFIAFGDQADQCACKAIAIQYgAyAFKQMINwM4IAMgBSkDADcDMCADIAQpAwA3AyAgAyAEKQMINwMoAkAgA0EwaiADQSBqIAYRAgBFDQAgAyAFKQMINwPIBCADIAUpAwA3A8AEIAUhBwNAAkAgByAEIgYpAwg3AwggByAEKQMANwMAIAAgBEYEQCAAIQYMAQsgAigCACEJIAMgAykDyAQ3AxggAyADKQPABDcDECADIAZBEGsiBCkDADcDACADIAQpAwg3AwggBiEHIANBEGogAyAJEQIADQELCyAGIAMpA8gENwMIIAYgAykDwAQ3AwAgCEEBaiIIQQhHDQAgBUEQaiABRiEGDAILIAUiBEEQaiIGIQUgASAGRw0AC0EBIQYLIANB4ARqJAAgBgumDAEDfyMAQfACayIGJAAgBSgCACEHIAYgASkDCDcD2AIgBiABKQMANwPQAiAGIAApAwA3A8ACIAYgACkDCDcDyAIgBkHQAmogBkHAAmogBxECACEIIAUoAgAhByAGIAIpAwg3A7gCIAYgAikDADcDsAIgBiABKQMANwOgAiAGIAEpAwg3A6gCIAZBsAJqIAZBoAJqIAcRAgAhBwJAIAhFBEAgB0UNASAGIAEpAwg3A+gCIAYgASkDADcD4AIgASACKQMINwMIIAEgAikDADcDACACIAYpA+gCNwMIIAIgBikD4AI3AwAgBSgCACEHIAYgASkDCDcDmAIgBiABKQMANwOQAiAGIAApAwA3A4ACIAYgACkDCDcDiAIgBkGQAmogBkGAAmogBxECAEUNASAGIAApAwg3A+gCIAYgACkDADcD4AIgACABKQMINwMIIAAgASkDADcDACABIAYpA+gCNwMIIAEgBikD4AI3AwAMAQsgBwRAIAYgACkDCDcD6AIgBiAAKQMANwPgAiAAIAIpAwg3AwggACACKQMANwMAIAIgBikD6AI3AwggAiAGKQPgAjcDAAwBCyAGIAApAwg3A+gCIAYgACkDADcD4AIgACABKQMINwMIIAAgASkDADcDACABIAYpA+gCNwMIIAEgBikD4AI3AwAgBSgCACEHIAYgAikDCDcD+AEgBiACKQMANwPwASAGIAEpAwA3A+ABIAYgASkDCDcD6AEgBkHwAWogBkHgAWogBxECAEUNACAGIAEpAwg3A+gCIAYgASkDADcD4AIgASACKQMINwMIIAEgAikDADcDACACIAYpA+gCNwMIIAIgBikD4AI3AwALIAUoAgAhByAGIAMpAwg3A9gBIAYgAykDADcD0AEgBiACKQMANwPAASAGIAIpAwg3A8gBAkAgBkHQAWogBkHAAWogBxECAEUNACAGIAIpAwg3A+gCIAYgAikDADcD4AIgAiADKQMINwMIIAIgAykDADcDACADIAYpA+gCNwMIIAMgBikD4AI3AwAgBSgCACEHIAYgAikDCDcDuAEgBiACKQMANwOwASAGIAEpAwA3A6ABIAYgASkDCDcDqAEgBkGwAWogBkGgAWogBxECAEUNACAGIAEpAwg3A+gCIAYgASkDADcD4AIgASACKQMINwMIIAEgAikDADcDACACIAYpA+gCNwMIIAIgBikD4AI3AwAgBSgCACEHIAYgASkDCDcDmAEgBiABKQMANwOQASAGIAApAwA3A4ABIAYgACkDCDcDiAEgBkGQAWogBkGAAWogBxECAEUNACAGIAApAwg3A+gCIAYgACkDADcD4AIgACABKQMINwMIIAAgASkDADcDACABIAYpA+gCNwMIIAEgBikD4AI3AwALIAUoAgAhByAGIAQpAwg3A3ggBiAEKQMANwNwIAYgAykDADcDYCAGIAMpAwg3A2gCQCAGQfAAaiAGQeAAaiAHEQIARQ0AIAYgAykDCDcD6AIgBiADKQMANwPgAiADIAQpAwg3AwggAyAEKQMANwMAIAQgBikD6AI3AwggBCAGKQPgAjcDACAFKAIAIQQgBiADKQMINwNYIAYgAykDADcDUCAGIAIpAwA3A0AgBiACKQMINwNIIAZB0ABqIAZBQGsgBBECAEUNACAGIAIpAwg3A+gCIAYgAikDADcD4AIgAiADKQMINwMIIAIgAykDADcDACADIAYpA+gCNwMIIAMgBikD4AI3AwAgBSgCACEDIAYgAikDCDcDOCAGIAIpAwA3AzAgBiABKQMANwMgIAYgASkDCDcDKCAGQTBqIAZBIGogAxECAEUNACAGIAEpAwg3A+gCIAYgASkDADcD4AIgASACKQMINwMIIAEgAikDADcDACACIAYpA+gCNwMIIAIgBikD4AI3AwAgBSgCACECIAYgASkDCDcDGCAGIAEpAwA3AxAgBiAAKQMANwMAIAYgACkDCDcDCCAGQRBqIAYgAhECAEUNACAGIAApAwg3A+gCIAYgACkDADcD4AIgACABKQMINwMIIAAgASkDADcDACABIAYpA+gCNwMIIAEgBikD4AI3AwALIAZB8AJqJAALCAAgABBpECILhAMCBX8BfCMAQUBqIgIkACAAQQA2AgggAEIANwIAIAJBCGogARBNIAJBADYCPCACQgA3AjQgAkE0aiACKAIIIgEoAgAiAyABKAIEIgEgASADa0EMbRBHAkAgAigCDCIBRQ0AIAEgASgCBCIDQQFrNgIEIAMNACABIAEoAgAoAggRAAAgARAkCyAAIAIoAjggAigCNGtBDG0QViACKAI0IgMgAigCOCIFRwRAA0AgAkEoaiADEDwhBCACQQA2AiQgAkIANwIcIAJBHGogAigCLCAEKAIAa0EEdRBcIAQoAgAiASACKAIsIgZHBEADQCABKwMAIQcgAiABKwMIOQMQIAIgBzkDCCACQRxqIAJBCGoQTCABQRBqIgEgBkcNAAsLIAAgAkEcahB2IAIoAhwiAQRAIAIgATYCICACKAIkGiABECILIAQoAgAiAQRAIAIgATYCLCACKAIwGiABECILIANBDGoiAyAFRw0ACwsgAiACQTRqNgIIIAJBCGoQKSACQUBrJAAL5QECBXwDf0T////////vfyEFRP///////+//IQYCQCABKAIAIgcgASgCBCIIRgRARP///////+//IQNE////////738hBAwBC0T////////vfyEERP///////+//IQMDQCAHKAIAIgEgBygCBCIJRwRAA0AgASsDCCICIAMgAiADZBshAyACIAQgAiAEYxshBCABKwMAIgIgBiACIAZkGyEGIAIgBSACIAVjGyEFIAFBEGoiASAJRw0ACwsgB0EMaiIHIAhHDQALCyAAIAM5AxggACAGOQMQIAAgBDkDCCAAIAU5AwAL1QECB3wDfwJAIAEoAgQiCSABKAIAIgprIgtBEUkNACAAKwMIIQcgACsDACEIA0AgCiALaiIAQRBrKwMAIABBIGsrAwAiAqEiAyAHIABBGGsrAwAiBKEiBaIgAEEIaysDACAEoSIEIAggAqEiAqKhIgZEAAAAAAAAAABkBEAgAiACoiAFIAWioCIFIAMgA6IgBCAEoqAiAyADIAVjG0QAAAAAAAAAAKKZIAYgBqJEAAAAAAAAEECiZkUNAgsgASAJQRBrIgk2AgQgCSAKayILQRBLDQALCwuRPwIKfwJ+IwBB0AhrIgUkAANAIAFBMGshCiABQSBrIQsgAUEQayEJAkADQAJAAkACQAJAAkAgASAAa0EEdSIIDgYGBgABAgMECyABQRBrIgEpAwghDyACKAIAIQIgBSABKQMAIhA3A7AFIAUgDzcDuAggBSAQNwOwCCAFIA83A7gFIAUgACkDADcDoAUgBSAAKQMINwOoBSAFQbAFaiAFQaAFaiACEQIARQ0FIAUgACkDCDcDyAggBSAAKQMANwPACCAAIAEpAwg3AwggACABKQMANwMAIAEgBSkDyAg3AwggASAFKQPACDcDAAwFCyACKAIAIQMgBSAAKQMYNwO4BiAFIAApAxA3A7AGIAUgACkDADcDoAYgBSAAKQMINwOoBiAFQbAGaiAFQaAGaiADEQIAIAIoAgAhAyAFIAFBEGsiASkDCDcDmAYgBSABKQMANwOQBiAFIAApAxA3A4AGIAUgACkDGDcDiAYgBUGQBmogBUGABmogAxECACEDRQRAIANFDQUgBSAAKQMYNwPICCAFIAApAxA3A8AIIAAgASkDCDcDGCAAIAEpAwA3AxAgASAFKQPICDcDCCABIAUpA8AINwMAIAIoAgAhASAFIAApAxg3A/gFIAUgACkDEDcD8AUgBSAAKQMANwPgBSAFIAApAwg3A+gFIAVB8AVqIAVB4AVqIAERAgBFDQUgBSAAKQMINwPICCAFIAApAwA3A8AIIAAgACkDGDcDCCAAIAApAxA3AwAgACAFKQPICDcDGCAAIAUpA8AINwMQDAULIAMEQCAFIAApAwg3A8gIIAUgACkDADcDwAggACABKQMINwMIIAAgASkDADcDACABIAUpA8gINwMIIAEgBSkDwAg3AwAMBQsgBSAAKQMINwPICCAFIAApAwA3A8AIIAAgACkDGDcDCCAAIAApAxA3AwAgACAFKQPICDcDGCAAIAUpA8AINwMQIAIoAgAhAiAFIAEpAwg3A9gFIAUgASkDADcD0AUgBSAAKQMQNwPABSAFIAApAxg3A8gFIAVB0AVqIAVBwAVqIAIRAgBFDQQgBSAAKQMYNwPICCAFIAApAxA3A8AIIAAgASkDCDcDGCAAIAEpAwA3AxAgASAFKQPICDcDCCABIAUpA8AINwMADAQLIAIoAgAhAyAFIAApAxg3A5gIIAUgACkDEDcDkAggBSAAKQMANwOACCAFIAApAwg3A4gIIAVBkAhqIAVBgAhqIAMRAgAhBCACKAIAIQMgBSAAKQMoNwP4ByAFIAApAyA3A/AHIAUgACkDEDcD4AcgBSAAKQMYNwPoByABQRBrIQEgBUHwB2ogBUHgB2ogAxECACEDAkAgBEUEQCADRQ0BIAUgACkDGDcDyAggBSAAKQMQNwPACCAAIAApAyg3AxggACAAKQMgNwMQIAAgBSkDyAg3AyggACAFKQPACDcDICACKAIAIQMgBSAAKQMYNwPYByAFIAApAxA3A9AHIAUgACkDADcDwAcgBSAAKQMINwPIByAFQdAHaiAFQcAHaiADEQIARQ0BIAUgACkDCDcDyAggBSAAKQMANwPACCAAIAApAxg3AwggACAAKQMQNwMAIAAgBSkDyAg3AxggACAFKQPACDcDEAwBCyADBEAgBSAAKQMINwPICCAFIAApAwA3A8AIIAAgACkDKDcDCCAAIAApAyA3AwAgACAFKQPICDcDKCAAIAUpA8AINwMgDAELIAUgACkDCDcDyAggBSAAKQMANwPACCAAIAApAxg3AwggACAAKQMQNwMAIAAgBSkDyAg3AxggACAFKQPACDcDECACKAIAIQMgBSAAKQMoNwO4ByAFIAApAyA3A7AHIAUgACkDEDcDoAcgBSAAKQMYNwOoByAFQbAHaiAFQaAHaiADEQIARQ0AIAUgACkDGDcDyAggBSAAKQMQNwPACCAAIAApAyg3AxggACAAKQMgNwMQIAAgBSkDyAg3AyggACAFKQPACDcDIAsgAigCACEDIAUgASkDCDcDmAcgBSABKQMANwOQByAFIAApAyA3A4AHIAUgACkDKDcDiAcgBUGQB2ogBUGAB2ogAxECAEUNAyAFIAApAyg3A8gIIAUgACkDIDcDwAggACABKQMINwMoIAAgASkDADcDICABIAUpA8gINwMIIAEgBSkDwAg3AwAgAigCACEBIAUgACkDKDcD+AYgBSAAKQMgNwPwBiAFIAApAxA3A+AGIAUgACkDGDcD6AYgBUHwBmogBUHgBmogARECAEUNAyAFIAApAxg3A8gIIAUgACkDEDcDwAggACAAKQMoNwMYIAAgACkDIDcDECAAIAUpA8gINwMoIAAgBSkDwAg3AyAgAigCACEBIAUgACkDGDcD2AYgBSAAKQMQNwPQBiAFIAApAwA3A8AGIAUgACkDCDcDyAYgBUHQBmogBUHABmogARECAEUNAyAFIAApAwg3A8gIIAUgACkDADcDwAggACAAKQMYNwMIIAAgACkDEDcDACAAIAUpA8gINwMYIAAgBSkDwAg3AxAMAwsgACAAQRBqIABBIGogAEEwaiABQRBrIAIQxAMMAgsgCEEXTARAIARBAXEEQCACIQYjAEHQAGsiByQAAkAgACICIAEiCEYNACAAQRBqIgEgCEYNAANAIAYoAgAhBCAHIAEiAykDCDcDOCAHIAEpAwA3AzAgByAAKQMANwMgIAcgACkDCDcDKCAHQTBqIAdBIGogBBECAARAIAcgASkDCDcDSCAHIAEpAwA3A0AgASEEA0ACQCAEIAAiASkDCDcDCCAEIAApAwA3AwAgACACRgRAIAIhAQwBCyAGKAIAIQkgByAHKQNINwMYIAcgBykDQDcDECAHIAFBEGsiACkDADcDACAHIAApAwg3AwggASEEIAdBEGogByAJEQIADQELCyABIAcpA0g3AwggASAHKQNANwMACyADIgBBEGoiASAIRw0ACwsgB0HQAGokAAwDCyACIQMjAEHQAGsiCCQAAkAgASIEIABGDQAgASAAQRBqIgFGDQADQCADKAIAIQYgCCABIgIpAwg3AzggCCABKQMANwMwIAggACkDADcDICAIIAApAwg3Aygg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IAFBADYCHCABQgA3AhQgAUEUaiABKAIIIgAoAgAiAiAAKAIEIgAgACACa0EMbRBHAkAgASgCDCIARQ0AIAAgACgCBCICQQFrNgIEIAINACAAIAAoAgAoAggRAAAgABAkCyABKAIUIgAgASgCGCIERwRAA0AgAUEIaiAAEDwhAiABKAIMIAIoAgAiAmtBBHUhBSACBEAgASACNgIMIAEoAhAaIAIQIgsgAyAFaiEDIABBDGoiACAERw0ACwsgASABQRRqNgIIIAFBCGoQKSABQSBqJAAgAwtdAQN/AkAgACAAKAIAKAIQEQQAIgNFDQADQCAAKAIIIAJBAnRqKAIAIgQgARDMAyABIARBIGoQdiACIANBAWtPDQEgAkEBaiICIAAgACgCACgCEBEEACIDSQ0ACwsLuAIBBH8gAEECQQJBARD/AQRAIAEgASgCACgCDBEAACABIAArA5gBOQMYIAIgAigCABB7IwBBEGsiBCQAIAEgASgCACgCDBEAACACELEBIAAtAHxBAUYEQCACIAAoAoQBIAAoAoABa0ECdRBWCyAAKAKAASIDIAAoAoQBRwRAA0ACQCADIAVBAnRqKAIAIgNFDQAgAygCECIGRQ0AIAMtAExBAUYEQCAEQQA2AgwgBEIANwIEIAYgAC0AdUEBIARBBGoiAyAAKwOYARC6AgRAIAIgAxBoCyAEKAIEIgNFDQEgBCADNgIIIAQoAgwaIAMQIgwBCyAAIAMQ/AFFDQAgACADIAEQuwILIAVBAWoiBSAAKAKEASAAKAKAASIDa0ECdUkNAAsLIARBEGokAAsgABDeASAALQB9GgtlAQR/IwBBEGsiASQAIAFBCGogABBNIAEoAggiACgCACECIAAoAgQCQCABKAIMIgBFDQAgACAAKAIEIgRBAWs2AgQgBA0AIAAgACgCACgCCBEAACAAECQLIAFBEGokACACa0EMbQuQBgEDfwJAAkACQAJAAkAgAg4DBAIAAQsgAUEYayECIAFBEGsrAwAgACsDCGMEQCADIAIpAxA3AxAgAyACKQMINwMIIAMgAikDADcDACADIAApAxA3AyggAyAAKQMINwMgIAMgACkDADcDGA8LIAMgACkDEDcDECADIAApAwg3AwggAyAAKQMANwMAIAMgAikDEDcDKCADIAIpAwg3AyAgAyACKQMANwMYDwsgAkEITARAIAAgAUYNAyADIAApAxA3AxAgAyAAKQMINwMIIAMgACkDADcDACAAQRhqIgQgAUYNAyADIQIDQCAEIQUgAkEYaiEGAkAgACsDICACKwMIYwRAIAYgAikDEDcDECAGIAIpAwg3AwggBiACKQMANwMAAn8gAyACIANGDQAaA0AgAiAAKwMgIAJBEGsrAwBjRQ0BGiACIAJBGGsiBCgCEDYCECACIAQpAwg3AwggAiAEKQMANwMAIAQiAiADRw0ACyADCyIEIAUoAhA2AhAgBCAFKQMINwMIIAQgBSkDADcDAAwBCyAGIAUpAxA3AxAgBiAFKQMINwMIIAYgBSkDADcDAAsgBiECIAUiAEEYaiIEIAFHDQALDAMLIAAgACACQQF2IgVBGGwiBmoiBCAFIAMgBRC1ASAEIAEgAiAFayICIAMgBmogAhC1ASAEIQIDQCABIAJGBEAgACAERg0EA0AgAyAAKQMQNwMQIAMgACkDCDcDCCADIAApAwA3AwAgA0EYaiEDIABBGGoiACAERw0ACwwECwJAIAIrAwggACsDCGMEQCADIAIpAxA3AxAgAyACKQMINwMIIAMgAikDADcDACACQRhqIQIMAQsgAyAAKQMQNwMQIAMgACkDCDcDCCADIAApAwA3AwAgAEEYaiEACyADQRhqIQMgACAERw0ACwwBCyADIAApAxA3AxAgAyAAKQMINwMIIAMgACkDADcDAAwBCyABIAJGDQADQCADIAIpAxA3AxAgAyACKQMINwMIIAMgAikDADcDACADQRhqIQMgAkEYaiICIAFHDQALCwudBQEIfyMAQSBrIgUkACADIQQCQCABIAJGDQAgAiAERgRAIAEhBAwBCyACIAFBGGoiBEYEQCAFIAEpAxA3AxggBSABKQMINwMQIAUgASkDADcDCCADIAJrIgJBBGsiBwRAIAEgBCAH/AoAAAsgASACaiIEIAUoAhg2AhAgBCAFKQMQNwMIIAQgBSkDCDcDAAwBCyADIAJBGGpGBEAgBSADQRhrIgIpAxA3AxggBSACKQMINwMQIAUgAikDADcDCCADIAIgAWsiB0FobUEYbGohBAJAIAEgAkYNACAHQQRrIgJFDQAgBCABIAL8CgAACyABIAUoAhg2AhAgASAFKQMQNwMIIAEgBSkDCDcDAAwBCwJ/IwBBIGshBiACIAEiBGsiCUEYbSIHIAMgAmsiC0EYbSIBRwRAIAchAgNAIAIgASICbyIBDQALIAQgAkEYbGohAgNAIAYgAkEYayICKQMQNwMYIAYgAikDCDcDECAGIAIpAwA3AwggAiAJaiEIIAIhAQNAIAEiCiAIIgEoAhA2AhAgCiABKQMINwMIIAogASkDADcDACABIAlqIAQgByADIAFrQRhtIghrQRhsaiAHIAhIGyIIIAJHDQALIAEgBigCGDYCECABIAYpAxA3AwggASAGKQMINwMAIAIgBEcNAAsgBCALagwBCwJAIAIgBEYgAiADRnINACACIQEDQCAGIAQpAxA3AxggBiAEKQMINwMQIAYgBCkDADcDCCAEIAEoAhA2AhAgBCABKQMINwMIIAQgASkDADcDACABIAYoAhg2AhAgASAGKQMQNwMIIAEgBikDCDcDACAEQRhqIgQgAkYNASABQRhqIgEgA0cNAAsLIAILIQQLIAAgAzYCBCAAIAQ2AgAgBUEgaiQAC4IGAQN/AkACQAJAAkACQCACDgMEAgABCyABQRhrIgErAwAgACsDAGMEQCADIAEpAxA3AxAgAyABKQMINwMIIAMgASkDADcDACADIAApAxA3AyggAyAAKQMINwMgIAMgACkDADcDGA8LIAMgACkDEDcDECADIAApAwg3AwggAyAAKQMANwMAIAMgASkDEDcDKCADIAEpAwg3AyAgAyABKQMANwMYDwsgAkEITARAIAAgAUYNAyADIAApAxA3AxAgAyAAKQMINwMIIAMgACkDADcDACAAQRhqIgQgAUYNAyADIQADQCAAQRhqIQUCQCAEKwMAIAArAwBjBEAgBSAAKQMQNwMQIAUgACkDCDcDCCAFIAApAwA3AwACfyADIAAgA0YNABoDQCAAIAQrAwAgAEEYayICKwMAY0UNARogACACKAIQNgIQIAAgAikDCDcDCCAAIAIpAwA3AwAgAiIAIANHDQALIAMLIgIgBCgCEDYCECACIAQpAwg3AwggAiAEKQMANwMADAELIAUgBCkDEDcDECAFIAQpAwg3AwggBSAEKQMANwMACyAFIQAgBEEYaiIEIAFHDQALDAMLIAAgACACQQF2IgRBGGwiBmoiBSAEIAMgBBC2ASAFIAEgAiAEayICIAMgBmogAhC2ASAFIQIDQCABIAJGBEAgACAFRg0EA0AgAyAAKQMQNwMQIAMgACkDCDcDCCADIAApAwA3AwAgA0EYaiEDIABBGGoiACAFRw0ACwwECwJAIAIrAwAgACsDAGMEQCADIAIpAxA3AxAgAyACKQMINwMIIAMgAikDADcDACACQRhqIQIMAQsgAyAAKQMQNwMQIAMgACkDCDcDCCADIAApAwA3AwAgAEEYaiEACyADQRhqIQMgACAFRw0ACwwBCyADIAApAxA3AxAgAyAAKQMINwMIIAMgACkDADcDAAwBCyABIAJGDQADQCADIAIpAxA3AxAgAyACKQMINwMIIAMgAikDADcDACADQRhqIQMgAkEYaiICIAFHDQALCwuLCwEQfyMAQSBrIgckACAHQQA2AhggB0IANwIQIAdBEGogASgCJBAlIAEoAgwhDyABKAIIIQogASgCBCELIAEoAgAhBgJAAkACQCACKAIMQQBOBEBBASERDAELQQEhESALQQRBCCAGQQFGG0EAIAYbQZSVAWooAgBHDQELIAohDCAGIQoMAQtBASESIAQgBC0AA0EBczoAAyAEIAQtAAJBAXM6AAIgBCAELQABQQFzOgABIAQgBC0AAEEBczoAAEEAIREgCyEMIAYhCwsgAUEEaiETIAdCgoCAgDA3AgggB0KAgICAEDcCACACQQRqIRADQCAKIQYCQAJAAkACQCAHIAhqKAIAIg0OAwMAAQILIAshBgwCCyAMIQYMAQsgDyEGCyACIQkCQAJAAkAgBg4CAgABCyAQIQkMAQsgAkEIQQwgBkECRhtqIQkLIAkoAgBBAE4EQCAKIQYCQAJAAkACQCANDgMDAAECCyALIQYMAgsgDCEGDAELIA8hBgsgAiEJAkACQAJAIAYOAgIAAQsgECEJDAELIAJBCEEMIAZBAkYbaiEJCyAJKAIAIQkCQCAHKAIUIgYgBygCGCINTwRAIAdBEGogDUEBdEGAASANGxAlIAcoAhAgBygCFCIGQQJ0aiAJNgIADAELIAcoAhAgBkECdGogCTYCAAsgByAGQQFqNgIUCyAIQQRqIghBEEcNAAsgB0KCgICAMDcCCCAHQoCAgIAQNwIAIARBAWohCyADQQRqIQ8gAUEUaiEQIAFBEGohDANAIAwhCCABIQYCQAJAAkAgByAUaigCACIODgICAAELIBAhCCATIQYMAQsgAUEIQQwgDkECRhsiAmohBiACIAxq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AhAnIQYgAkUNACAGIAcgAvwKAAALIAQgBTYCqAcgBCAFNgKkByAEIAY2AqAHDAELIARBADYCqAcgBEIANwOgByAEQfAGakEAQSz8CwAgBCARNgKIByAEIAo2AoQHIAQgCTYCgAcgBCAQNgKMByASQYABEFUgBCgCkAciCCAEKAKUByIGQQV0aiICQgA3AwggAkKAgICAgICA+D83AwAgAkIANwMQIAJCADcDGCAEIAZBAWoiAjYClAcgBCgCmAchBQJAIBBBAEoEQCAEAn8gAiAFTwRAIBIgBUEBdEGAASAFGxBVIAQoApAHIgggBCgClAciBkEFdGoiAkIANwMQIAJCgICAgICAgPg/NwMIIAJCADcDACACQgA3AxggBCgCmAchBSAGQQFqDAELIAggAkEFdGoiAkIANwMQIAJCgICAgICAgPg/NwMIIAJCADcDACACQgA3AxggBkECagsiBzYClAcCQCAFIAdNBEAgEiAFQQF0QYABIAUbEFUgBCgCkAciCCAEKAKUByIHQQV0aiICQgA3AwggAkIANwMAIAJCADcDGCACQoCAgICAgID4PzcDECAEKAKYByEFDAELIAggB0EFdGoiAkIANwMIIAJCADcDACACQgA3AxggAkKAgICAgICA+D83AxALIAQgB0EBaiICNgKUBwJ/IAIgBU8EQCASIAVBAXRBgAEgBRsQVSAEKAKUByICQQFqIQYgBCgCkAciCCACQQV0agwBCyAHQQJqIQYgCCACQQV0agsiAkIANwMQIAJCADcDCCACQgA3AwAgAkKAgICAgICA+D83AxggBCAGNgKUByAEQoKAgIAwNwLgBSAEQoCAgIAQNwLYBUEAIQ9BACENQQAhBUEAIQ4DQAJAAkAgBEHYBWogDmooAgAiGUEATA0AQQQhByAJIQsCQAJAAkAgGUEBayIMDgICAAELIAUhByAKIQsMAQsgESAQIAxBAkYiAhshCyANIA8gAhshBwsgByALakEBayECAkACQCAMDgIDAQALIAIhDwwBCyACIQ0LIAUhAgsgESAQIBlBAkYbIQxBASEHIAggGUEBakEDcUEFdGoiBSsDGCElIAUrAxAhJiAFKwMIIScgBSsDACEoA0AgCSEFAkACQAJAIBkOAgIAAQsgCiEFDAELIAwhBQsgBSAHTARAIAIhBSAOQQRqIg5BEEcNAiAE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AkAgASgCACIGKAIEIgRFDQAgBkEEaiIIIQUDQCAFIAQgBCgCECACSCIJGyEFIARBBEEAIAkbaigCACIEDQALIAUgCEYNACACIAUoAhBODQELIAMgA0HMAGoiBTYCWCADIAdBzAFqIAUgA0HYAGoiBhB5IAMoAgAhBCMAQaACayICJAAgAiAEKQNINwNwIAIgBCkDQDcDaCACIAQpAzg3A2AgAiAEKQNQNwN4IAIgBCkDWDcDgAEgAiAEKQNgNwOIASACIAQpAyA3A0ggAiAEKQMoNwNQIAIgBCkDMDcDWCACQZABaiACQcgAahCQASACIAIrA9ABOQOYAiACIAIrA7gBOQOQAiACIAIrA6ABOQOIAiACIAIrA8gBOQOAAiACIAIrA7ABOQP4ASACIAIrA5gBOQPwASACIAIrA8ABOQPoASACIAIrA6gBOQPgASACIAIrA5ABOQPYASACIAJB2AFqEJABIAIrAwAhCyACKwMIIQwgAisDECENIAIrAxghDiACKwMgIQ8gAisDKCEQIAIrAzAhESACKwM4IRIgA0QAAAAAAADwv0QAAAAAAADwPyAELQCAARsiCiACKwNAojkDQCADIAogEqI5AzggAyAKIBGiOQMwIAMgCiAQojkDKCADIAogD6I5AyAgAyAKIA6iOQMYIAMgCiANojkDECADIAogDKI5AwggAyAKIAuiOQMAIAJBoAJqJAAgASgCACECIAMgBTYCVCAGIAIgBSADQdQAahDtAyADKAJYQRhqIANByAD8CgAAIAEoAgAhBgsgAyADQcwAaiIBNgJYIAMgBiABIANB2ABqEO0DIAAgAygCAEEYakHIAPwKAAAgA0HgAGokAAuzAQEGfyMAQRBrIgIkACABKAJMIQMgAEEANgIIIABCADcCACAAIAMQJSAAIAM2AgQgASgCTCEDIAJBADYCCCACQgA3AgAgAiADQQAQgQEgASgCXCIDBEADQCABKAJYIARBAnRqKAIAIgUgAigCAGoiBi0AACAGQQE6AABBAUcEQCAAKAIAIAVBAnRqIAQ2AgALIARBAWoiBCADRw0ACwsgAigCACIABEAgABAiCyACQRBqJAALkwQCBn8CfSACKAIAIQYgAAJ/AkAgASgCBCIERQ0AIAEoAgACfyAEQQFrIAZxIARpIgVBAU0NABogBiAEIAZLDQAaIAYgBHAL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ACIARQ0AIAAQIgsgBygCwAQiAEUNACAAECILIAdBsAhqJAALLAECfyAAKAIAIgEoAgAiAgRAIAEgAhCGAiAAKAIAIgAoAgAgACgCCBoQIgsLvwMBAX8gACABRwRAAkAgACgCDCICRQ0AIAIgAigCACICQQFrNgIAIAJBAUoNACAAKAIMIgIEQCACECILIABBADYCDCAAKAIAIgIEQCACECILIABBADYCCCAAQgA3AgALIAAgASgCDDYCDCABQQA2AgwgACABKAIANgIAIAAgASgCBDYCBCAAIAEoAgg2AgggAUEANgIIIAFCADcCAAJAIAAoAhwiAkUNACACIAIoAgAiAkEBazYCACACQQFKDQAgACgCHCICBEAgAhAiCyAAQQA2AhwgACgCECICBEAgAhAiCyAAQQA2AhggAEIANwIQCyAAIAEoAhw2AhwgAUEANgIcIAAgASgCEDYCECAAIAEoAhQ2AhQgACABKAIYNgIYIAFBADYCGCABQgA3AhACQCAAKAIsIgJFDQAgAiACKAIAIgJBAWs2AgAgAkEBSg0AIAAoAiwiAgRAIAIQIgsgAEEANgIsIAAoAiAiAgRAIAIQIgsgAEEANgIoIABCADcCIAsgACABKAIsNgIsIAFBADYCLCAAIAEoAiA2AiAgACABKAIkNgIkIAAgASgCKDYCKCABQQA2AiggAUIANwIgCwujTgIefxB8IwBBgANrIgokAAJAIAEoAgQiBUUNAAJAIAJFDQAgAi0AEEEBRw0AIABBDhAsDAELIAEoAgAhASAKIAU2AkwgCiABNgJIIApB0ABqIgNCADcCLCADQQA2AiQgA0IANwIcIAMgCigCSDYCLCADIAooAkw2AjAgA0IANwJEIANCADcCPCADQgA3AjRBBBAjIgFBATYCACADQQA2AogBIANCADcCgAEgA0EANgJ4IANCADcCcCADQQA2AmggA0IANwJgIANBADYCWCADQgA3AlAgAyABNgJMIANBADYC9AEgA0IANwLsASADQQA2AuQBIANCADcC3AEgA0EANgLUASADQgA3AswBIANBADYCxAEgA0IANwK8ASADQgA3A6gBIANCADcDsAEgA0H8AWpBAEEw/AsAIApBADYCQCAKQgA3AjhBACEFIwBBkAFrIgYkAAJAIAMoAjBFBEBBBBAjIgFBATYCACAKIAE2Agwg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IABBDhAsDAMLIAAQWCAAQQAQjQEgABCOASAAIAIQVCACLQAQQQFHDQEgAEEOECwMAgsgABBYIABBABCNASAAEI4BIABBABBUCyAAEFoLIAooAjgiAARAIAAQIgsjAEEQayIAJAAgACADQaACajYCBCAAQQRqEPwDIANBiAJqIgJBADYCFCACKAIIIgUgAigCBCIBa0ECdSIEQQNPBEADQCABKAIAECIgAiACKAIEQQRqIgE2AgQgAigCCCIFIAFrQQJ1IgRBAksNAAsLQYAEIQcCQAJAAkAgBEEBaw4CAQACC0GACCEHCyACIAc2AhALIAEgBUcEQANAIAEoAgAQIiABQQRqIgEgBUcNAAsLIAIQUyAAIANB/AFqNgIIIABBCGoQ/AMgAygC7AEiAQRAIAEQIgsgA0EANgL0ASADQgA3AuwBIAMoAtwBIgEEQCABECILIANBADYC5AEgA0IANwLcASADKALMASIBBEAgARAiCyADQQA2AtQBIANCADcCzAEgAygCvAEiAQRAIAEQIgsgA0EANgLEASADQgA3ArwBIAMoAqwBIgEEQCABECILIANBADYCtAEgA0IANwKsASADKAKAASIBBEAgARAiCyADQQA2AogBIANCADcDgAEgAygCcCIBBEAgARAiCyADQQA2AnggA0IANwNwIAMoAmAiAQRAIAEQIgsgA0EANgJoIANCADcDYCADKAJQIgEEQCABECILIANBADYCWCADQgA3A1AgA0FAaxBJIAAgA0E0ajYCDCAAKAIMIgEoAgAiAgRAIAEgAhCBBCAAKAIMIgEoAgAgASgCCBoQIgsgAygCHCIBBEAgARAiCyAAQRBqJAALIApBgANqJAALwAMCB38BfAJAIAErAyAgASsDCCAAKAIsIAJBGGxqIgQrAwCiRAAAAAAAAAAAoCABKwMQIAQrAwiioCABKwMYIAQrAxCioKAiCkQAAAAAAAAAAGRFDQAgCiAKoiAAKwMIIAErAyiiZEUNAAJAIAEoAkQiAw0AIwBBEGsiBSQAAkAgAEGgAmoiBygCBCIAIAcoAgBGBEBBEBAjIgZBADYCCCAGQgA3AgAMAQsgAEEEayIEKAIAIQYgBEEANgIAIAAiAyAARwRAA0AgACgCACEJIABBADYCACAEKAIAIQggBCAJNgIAIAgEQCAIEHULIARBBGohBCAAQQRq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IAArAxAhCSAAKwMAIRUgACsDCCEWIAArAyghByAAKwMYIRcgACsDICEYIAIgCCABKwMAIhIgACsDMKGiRAAAAAAAAAAAoCAEIAErAwgiEyAAKwM4oaKgIAYgASsDECIUIAArA0ChoqAiCjkDKCACIAggEiAXoaJEAAAAAAAAAACgIAQgEyAYoaKgIAYgFCAHoaKgIgc5AyAgAiAIIBIgFaGiRAAAAAAAAAAAoCAEIBMgFqGioCAGIBQgCaGioCIJOQMYAn8CQCAKRAAAAAAAAAAAZEUgCUQAAAAAAAAAAGRFIAdEAAAAAAAAAABkRXJyRQRAIAogCSAHIAcgCWQiGRtjDQEgGUUMAgsgCkQAAAAAAAAAAGNFIAlEAAAAAAAAAABjRSAHRAAAAAAAAAAAY0Vycg0CIAogCSAHIAcgCWMiGRtkDQAgGUUMAQtBAgshGUEBIRogECAEoiAMIAaioSAAIBlBGGxqIgArAwAiByASoaJEAAAAAAAAAACgIA0gBqIgECAIoqEgACsDCCIJIBOhoqAgDCAIoiANIASioSAAKwMQIgogFKGioEQAAAAAAAAAAGRFDQAgDyAEoiALIAaioSAHIAErAxihokQAAAAAAAAAAKAgDiAGoiAPIAiioSAJIAErAyChoqAgCyAIoiAOIASioSAKIAErAyihoqBEAAAAAAAAAABkRQ0AIAogASsDQKEgCCACKwNoIguiIAQgAisDYCINoqGiIAcgASsDMKEgBCACKwNwIgyiIAYgC6KhokQAAAAAAAAAAKAgCSABKwM4oSAGIA2iIAggDKKhoqCgRAAAAAAAAAAAZEUNACAKIAogBiACQRhqQQhBECAZQQFGG0EAIBkbaisDACIFoiARo6ChIgYgBqIgByAHIAggBaIgEaOgoSIGIAaiIAkgCSAEIAWiIBGjoKEiBSAFoqCgIQUMAQsgBUQAAAAAAAAAACAaQQFxGyEFCyACQcABaiQAIAMgBSADKwMAIgYgBSAGYxs5AwAgHkGgAWokAAuQAQECf0EBIQEgACgCTCICBEAgACgCSCIAIAJBGGxqIQIDQCABIAApAwBC////////////AINCgICAgICAgPj/AFQgACkDCEL///////////8Ag0KAgICAgICA+P8AVHEgACkDEEL///////////8Ag0KAgICAgICA+P8AVHFxIQEg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DQEgAygCBCEMAkAgByAHQQFrIgNxRQRAIAMgDHEhDAwBCyAHIAxLDQAgDCAHcCEMCyAJIAxBAnRqIAg2AgAMAQsgCCADKAIANgIAIAMgCDYCAAsgASABKAIMQQFqNgIMQQELOgAMIA0gCDYCCCAKQRBqJAAgBigCACIGDQALCyANQRBqJAAgABBFIAAgCygCADYCACAAIAsoAgQ2AgQgACALKAIINgIIIAtBADYCCCALQgA3AwAgACALKAIUNgIUIAAgCykCDDcCDCASIAEQjQQgARDHASALKAIAIgEEQCALIAE2AgQgCygCCBogARAiCyAEKwOgASECIA8QxwEgBCgCUCIBBEAgBCABNgJUIAQoAlgaIAEQIgsgBCgCSBCLAiAEKAI8EN8CIAQoAiwiAQRAIAQgATYCMCAEKAI0GiABECILIAQoAiAiAQRAIAQgATYCJCAEKAIoGiABECILIAQoAhgQ3gIgBCgCCCIBRQ0AIAQgATYCDCAEKAIQGiABECILIAAgAjkDECASEIkEIBJBABBwIARBkAJqJAALiwEBA38jAEEQayICJABBqAIQIyIBQaCQAjYCACABQgA3AgQgAUEQahA7IQMgAUEONgJUIAIgATYCDCACIAM2AgggASABKAIEQQFqNgIEIAIgAikCCDcDACAAIAIQSBogASABKAIEIgBBAWs2AgQgAEUEQCABIAEoAgAoAggRAAAgARAkCyACQRBqJAALwgEBA38jAEEgayIEJAACQCAAKAIIIAAoAgAiAmtBGG0gAUkEQCABQavVqtUATw0BIARBDGogASAAKAIEIAJrQRhtIAAQZCEBIAAoAgAiAiAAKAIEIgMgASgCBCADIAJrQWhtQRhsaiIDEKUCIAAoAgAhAiAAIAM2AgAgASACNgIEIAAgASgCCDYCBCABIAI2AgggACgCCCEDIAAgASgCDDYCCCABIAI2AgAgASADNgIMIAEQpAILIARBIGokAA8LECYAC4whAxJ/FXwBfiMAQZADayIFJAACQAJAAkAgBEUNACAELQAQQQFHDQBBqAIQIyIBQaCQAjYCACABQgA3AgQgAUEQahA7IQIgAUEONgJUIAUgATYCjAEgBSACNgKIASABIAEoAgRBAWo2AgQgBSAFKQKIATcDKCAAIAVBKGoQSBogASABKAIEIgBBAWs2AgQgAA0BIAEgASgCACgCCBEAACABECQMAQsgARCFBCEHAn8gAhCFBCILIAdFckUEQCABIQZBAQwBCyACIQYgASECIAchCSALCyEMIAYoAlxBAk0EQEGoAhAjIgFBoJACNgIAIAFCADcCBCABQRBqIAIQNyECIAUgATYChAEgBSACNgKAASABIAEoAgRBAWo2AgQgBSAFKQKAATcDACAAIAUQSBogASABKAIEIgBBAWs2AgQgAA0BIAEgASgCACgCCBEAACABECQMAQsgAigCXCEIQagCECMiD0GgkAI2AgAgD0IANwIEIA9BEGohAQJAIAhBAk0EQCABIAYQNyEBIAUgDzYCfCAFIAE2AnggDyAPKAIEQQFqNgIEIAUgBSkCeDcDCCAAIAVBCGoQSBoMAQsgASACEDchASAFIA82AlwgBSABNgJYIA8gDygCBEEBajYCBCAFIAUpAlg3AyAgBUHgAGogBUEgahBIIRMgBUEANgJUIAVCADcCTCAFQcwAaiIBIAIoAlxBA25B5wdqQegHbkEBahCTBCABAn8gASgCBCIIIAEoAghJBEAgCCATEC5BGGoMAQsjAEEgayINJAAgASgCBCABKAIAIgprQRhtIg5BAWoiCEGr1arVAE8EQBAmAAsgDUEMakGq1arVACABKAIIIAprQRhtIgpBAXQiECAIIAggEEkbIApB1arVKk8bIA4gARBkIggoAgggExAuGiAIIAgoAghBGGo2AgggASgCACIKIAEoAgQiDiAIKAIEIA4gCmtBaG1BGGxqIg4QpQIgASgCACEKIAEgDjYCACAIIAo2AgQgASAIKAIIIg42AgQgCCAKNgIIIAEoAgghECABIAgoAgw2AgggCCAKNgIAIAggEDYCDCAIEKQCIA1BIGokACAOCzYCBAJAAkACQCAMIAkgA0EBc3EiAXFBAUYEQCAGKAJIIQggBigCTCEKIAVBADYCgAMgBUIANwL4AiAKIAIoAkxsIQYjAEEgayIJJAACQAJAIAVB+AJqIgEoAgggASgCACIHa0EYbSAGSQRAIAZBq9Wq1QBPDQEgCUEMaiAGIAEoAgQgB2tBGG0gARBkIgYoAgQgASgCBCABKAIAIgxrIgdBaG1BGGxqIQsgBwRAIAsgDCAH/AoAAAsgASgCACEHIAEgCzYCACAGIAc2AgQgASAGKAIINgIEIAYgBzYCCCABKAII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EAogAAviAwICfwV8IwBBgAFrIgMkACADQfgAaiABQQAQKxAqAkAgAygCeCgCRCIEBEAgACAEEEYMAQsgAisDACIHIAeiIAIrAwgiBiAGoqAgAisDECIFIAWioCIIRAAAAAAAAAAAYQRAIAAQ6wEaDAELIANCADcDcCADQgA3A2ggA0IANwNgIANEAAAAAAAA8D8gBSAInyIIoyIFIAWiIgkgCaChOQNYIANEAAAAAAAAAAAgBSAGIAijIgaiIgkgCaChIgk5A1AgA0QAAAAAAAAAACAHIAijIgcgBaIiBSAFoKEiBTkDSCADIAk5A0AgA0QAAAAAAADwPyAGIAaiIgggCKChOQM4IANEAAAAAAAAAAAgByAGoiIGIAagoSIGOQMwIAMgBTkDKCADIAY5AyAgA0QAAAAAAADwPyAHIAeiIgUgBaChOQMYIANBCGogARCKASADQRBqIAMoAggiASADQRhqIAEoAgAoAgQRAwAgAyADKQIQNwMAIAAgAxBDIAMoAgwiAEUNACAAIAAoAgQiAUEBazYCBCABDQAgACAAKAIAKAIIEQAAIAAQJAsCQCADKAJ8IgBFDQAgACAAKAIEIgFBAWs2AgQgAQ0AIAAgACgCACgCCBEAACAAECQLIANBgAFqJAALlQUCA38DfCMAQSBrIgUkACAFQRBqIAEQigEgBSgCECEGIwBB0ANrIgEkACACRAAAAAAAgFZAoCIIED4hCSACED4hCiACED4hAiAIED4hCCABQgA3A5ADIAFCgICAgICAgPg/NwOIAyABQgA3A5gDIAFCADcDoAMgASAIOQPIAyABIAKaOQPAAyABQgA3A7gDIAEgCjkDsAMgASAJOQOoAyADRAAAAAAAgFZAoCICED4hCCADED4hCSADED4hAyABIAIQPjkDgAMgAUIANwP4AiABIAM5A/ACIAFCADcD6AIgAUKAgICAgICA+D83A+ACIAFCADcD2AIgASAJmjkD0AIgAUIANwPIAiABIAg5A8ACIAREAAAAAACAVkCgIgIQPiEDIAQQPiEIIAQQPiEEIAIQPiECIAFCADcDoAIgASACOQOYAiABIASaOQOQAiABQgA3A4gCIAEgCDkDgAIgASADOQP4ASABQgA3A6gCIAFCADcDsAIgAUKAgICAgICA+D83A7gCIAFBCGoiByABQfgBaiABQcACahCa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BCAAQQBBBCACG2oiACAFRw0ACyABIANGDQIDQCAEIAMoAgA2AgAgBEEEaiEEIANBBGoiAyABRw0ACwwCCyAAIAVGDQEDQCAEIAAoAgA2AgAgBEEEaiEEIABBBGoiACAFRw0ACwwBCyAEIAAoAgA2AgALC+QEAQN/AkACQAJAAkACQCACDgMEAgABCyABQRBrIgErAwAgACsDAGQEQCADIAEpAwg3AwggAyABKQMANwMAIAMgACkDCDcDGCADIAApAwA3AxAPCyADIAApAwg3AwggAyAAKQMANwMAIAMgASkDCDcDGCADIAEpAwA3AxAPCyACQQhMBEAgACABRg0DIAMgACkDCDcDCCADIAApAwA3AwAgAEEQaiIEIAFGDQMgAyEFA0AgBSICQRBqIgUhAAJAIAQrAwAgAisDAGRFDQAgBSACKQMINwMIIAUgAikDADcDACADIQAgAiADRg0AA0AgBCsDACACQRBrIgArAwBkRQRAIAIhAAwCCyACIAApAwg3AwggAiAAKQMANwMAIAAiAiADRw0ACyADIQALIAAgBCkDCDcDCCAAIAQpAwA3AwAgBEEQaiIEIAFHDQALDAMLIAAgACACQQF2IgRBBHQiBmoiBSAEIAMgBBDFASAFIAEgAiAEayICIAMgBmogAhDFASAFIQIDQCABIAJGBEAgACAFRg0EA0AgAyAAKQMINwMIIAMgACkDADcDACADQRBqIQMgAEEQaiIAIAVHDQALDAQLAkAgAisDACAAKwMAZARAIAMgAikDCDcDCCADIAIpAwA3AwAgAkEQaiECDAELIAMgACkDCDcDCCADIAApAwA3AwAgAEEQaiEACyADQRBqIQMgACAFRw0ACwwBCyADIAApAwg3AwggAyAAKQMANwMADAELIAEgAkYNAANAIAMgAikDCDcDCCADIAIpAwA3AwAgA0EQaiEDIAJBEGoiAiABRw0ACwsLbAEBfyAAKAIIIgFFBEBBAA8LAkAgACABKAIAIgBGBEAgAUEANgIAA0AgASgCBCIARQ0CA0AgACIBKAIAIgANAAsMAAsACyABQQA2AgQgAEUNAANAIAAiASgCACIADQAgASgCBCIADQALCyABC6ICAQV/IwBBIGsiBSQAAkACQCAAKAIEIgIgACgCCCIDSQRAIAIgASkCADcCACACQQhqIQEMAQsgAiAAKAIA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gICAgICAgHg3AyAgAEKAgICAgICAeDcDGCAAQoCAgICAgID4/wA3AxAgAEKAgICAgICA+P8ANwMIIABCgICAgICAgPj/ADcDACAAQgA3A0ggAEEANgJQIABB2ABqEKECGiAAQgA3A9ABIABBfzYCyAEgAEEANgLAASAAQgA3A7gBIABBADYCsAEgAEIANwOoASAAQQA2AqABIABCADcDmAEgAEEANgKQASAAQgA3A4gBIABBADYCkAIgAEIANwOIAiAAQQA2AoACIABCADcD+AEgAEEANgLwASAAQgA3A+gBIABBADYC4AEgAEIANwPYASAAIABB0AFqNgLMASADQQA2AuwBIANCADcC5AEgA0EANgLgASADQgA3AtgBAkACQAJAAkAgAQ4DAAECAwsgA0EYaiIBQYD5AEHgAPwKAAAgA0HkAWogASADQfgAakEEEPECIAFB4PkAQTD8CgAAIANB2AFqIAEgA0HIAGpBBBDwAgwCCyADQRhqIgFBkPoAQcAB/AoAACADQeQBaiABIANB2AFqIgVBCBDxAiABQdD7AEGQAfwKAAAgBSABIANBqAFqQQwQ8AIMAQsgA0EYaiIBQeD8AEGQAfwKAAAgA0HkAWogASADQagBakEGEPECIAFB8P0AQeAA/AoAACADQdgBaiABIANB+ABqQQgQ8AILIAMoAugBIgYgAygC5AEiBWsiAUEYbSEHAkAgBSAGRiIGDQAgARAnIQQgAUUNACAEIAUgAfwKAAALIAAoAkgiBQRAIAUQIgsgACAHNgJQIAAgBzYCTCAAIAQ2AkggBkUEQCABIARqIQEDQCADIAQrAwA5AxggAyAEKwMIOQMgIAQrAxAhCCADQoCAgICAgID4PzcDMCADIAg5AyggAyACIANBGGoQoQEgBCADKQMQNwMQIAQgAykDCDcDCCAEIAMpAwA3AwAgBEEYaiIEIAFHDQALCyADQQA2AhggAyADKALcASIFIAMoAtgBIgJrIgFBDG0iBDYCICADIAQ2AhxBACEEAkAgAiAFRg0AIAMgARAnIgQ2AhggAUUNACAEIAIgAfwKAAALIANBADYCCCADQgA3AgAgACADQRhqIAMQngEgBARAIAQQIgsgABCOASAAEFggACAAEKIBRBHqLYGZl3E9oiIIRAAAAAAAAPC/IAhEAAAAAAAA8L9kGyIIRAAAAAAA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IgcgByAHoiAQIASiIA0gBaKgIAogBqKgIgcgB6IgDyAEoiAMIAWioCAJIAaioCIEIASioKCfIgWjIAcgBaMiBiAGYiIAGzkDECACRAAAAAAAAAAAIAQgBaMgABs5AwggAkQAAAAAAAAAACAGIAAbOQMAIAJBGGohAiADQRhqIgMgAUcNAAsLC5QBAQR/IAAoAgQiAyABQQF0SyADQRBLcQJAIAEgA00NACAAIAEQVSABIAAoAgQiA2siBEEATA0AIAAoAgAgA0EFdGohAwNAIAMgAikDGDcDGCADIAIpAxA3AxAgAyACKQMINwMIIAMgAikDADcDACADQSBqIQMgBEEBSyAEQQFrIQQNAAsLIAAgATYCBARAIAAQkwELC5ECAgJ/BnwjAEHQAGsiAyQAIAMgASsDADkDGCADIAErAwg5AyAgASsDECEFIANCgICAgICAgPg/NwMwIAMgBTkDKCADQThqIAIgA0EYaiIEEKEBIAMgASsDGDkDGCADIAErAyA5AyAgASsDKCEFIANCgICAgICAgPg/NwMwIAMgBTkDKCADIAIgBBChASADKwM4IQUgAysDACEGIAMrA0AhByADKwMIIQggACADKwMQIgkgAysDSCIKIAkgCmQiARs5AyggACAIIAcgByAIYyICGzkDICAAIAYgBSAFIAZjIgQbOQMYIAAgCiAJIAEbOQMQIAAgByAIIAIbOQMIIAAgBSAGIAQbOQMAIANB0ABqJAALdAECfyMAQRBrIgIkAEGgARAjIgNBgJQCNgIAIANCADcCBCACIAEoAgA2AgggAiABKAIENgIMIAFCADcCACACIAIpAgg3AwAgA0EQaiIBIAIQ/gIgACADNgIEIAAgATYCACAAIANBFGogARCPASACQRBqJAAL9AQCDn8GfCMAQYABayICJAAgASgCDCEDIAJCADcDICACQoCAgICAgID4PzcDGCACQgA3AyggAkIANwMwIAJCADcDQCACQoCAgICAgID4PzcDOCACQgA3A0ggAkIANwNQIAJCADcDYCACQoCAgICAgID4PzcDWCACQgA3A2ggAkIANwNwIAIgAUEYaiIHIAJBGGoQygECQCACKwMAIAIrAwhhBEAgACADQTD8CgAADAELIAIgASkDcDcDKCACIAEpA2g3AyAgAiABKQNgNwMYIAIgASkDcDcDECACIAEpA2g3AwggAiABKQNgNwMAIAFByABqIQggAUEwaiEJIANBGGohCgNAIAhBCEEQIAVBAUYbQQAgBRsiBGohCyAEIAdqIQwgBCAJaiENIAIgBGoiDisDACERIAJBGGogBGoiDysDACESQQAhAQNAIBECfwJAAkACQCABDgIAAQILIAwrAwAgAysDAKIhEEEAIQYgBwwCCyANKwMAIAMrAwiiIRBBCCEGIAkMAQsgCysDACADKwMQoiEQQRAhBiAICyAEaisDACAGIApqKwMAoiITIBAgECATYxugIREgEiATIBAgECATZBugIRIgAUEBaiIBQQNHDQALIA8gEjkDACAOIBE5AwAgBUEBaiIFQQNHDQALIAIrAwAhECACKwMYIREgAisDCCESIAIrAyAhEyAAIAIrAxAiFCACKwMoIhUgFCAVZCIBGzkDKCAAIBIgEyASIBNkIgMbOQMgIAAgECARIBAgEWQiBBs5AxggACAVIBQgARs5AxAgACATIBIgAxs5AwggACARIBAgBBs5AwALIAJBgAFqJAAL/AMCBX8MfCMAQfABayIDJAAgASsDGCEIIAErAyAhCSABKwMoIQogASsDMCELIAErAzghDCABKwNAIQ0gASsDSCEOIAErA1AhDyABKwNYIRAgASsDYCERIAErA2ghEiABKwNwIRMgA0KAgICAgICA+D83A3ggAyATOQNwIAMgEjkDaCADIBE5A2AgA0IANwNYIAMgEDkDUCADIA85A0ggAyAOOQNAIANCADcDOCADIA05AzAgAyAMOQMoIAMgCzkDICADQgA3AxggAyAKOQMQIAMgCTkDCCADIAg5AwAgA0GAAWoiBCACIAMQ8AEjAEHwAGsiAiQAQaABECMiBUGAlAI2AgAgBUIANwIEIAIgASgCDDYCaCACIAEoAhAiATYCbCABBEAgASABKAIEQQFqNgIECyADQeQBaiEGIAIgAikCaDcDYCACIARB4AD8CgAAIAVBEGoiAUIANwIEIAFBmJICNgIAIAEgAkHgAGoiBygCADYCDCABIAcoAgQiBDYCECAEBEAgBCAEKAIEQQFqNgIECyABQRhqIAJB4AD8CgAAIAFCADcDiAEgAUIANwOAASABQgA3A3ggBxAvGiAGIAU2AgQgBiABNgIAIAYgBUEUaiABEI8BIAJB8ABqJAAgACADKALkATYCACAAIAMoAugBNgIEIANB8AFqJAAL2QIBBH8jAEEwayIEJAAgBCADOgAbIARBADYCFCAEQgA3AgwgBEEEaiABQQRqEJsCIQMgBEEcakEBQQAgBEEMahBLIgEoAggiBSADKAIANgIAIAUgAygCBDYCBCADQgA3AgAgASAFQQhqNgIIIAEoAgQgBCgCECAEKAIMIgdrIgVrIQYgBQRAIAYgByAF/AoAAAsgBCgCDCEFIAQgBjYCDCABIAU2AgQgBCABKAIIIgY2AhAgASAFNgIIIAQoAhQhByAEIAEoAgw2AhQgASAFNgIAIAEgBzYCDCABEG4gAygCBCEBIAQgBjYCEAJAIAFFDQAgASABKAIEIgNBAWs2AgQgAw0AIAEgASgCACgCCBEAACABECQLIARBDGoiASACEP8CIARBHGoiAiABIARBG2oQgAMgACAEKAIcNgIAIAAgBCgCIDYCBCAEIAE2AhwgAhBlIARBMGokAAvgBgIDfwJ8AkACQAJAAkACQCACDgMEAgABCwJAIAFBGGsiAisDACIHIAArAwAiCGNFBEAgByAIYg0BIAFBDGsoAgAgACgCDE4NAQsgAyACKQMQNwMQIAMgAikDCDcDCCADIAIpAwA3AwAgAyAAKQMANwMYIAMgACkDCDcDICADIAApAxA3AygPCyADIAApAxA3AxAgAyAAKQMINwMIIAMgACkDADcDACADIAIpAwA3AxggAyACKQMINwMgIAMgAikDEDcDKA8LIAJBCEoNASAAIAFGDQIgAyAAKQMQNwMQIAMgACkDCDcDCCADIAApAwA3AwAgAEEYaiICIAFGDQIgAyEFA0AgACEGIAIhACAFIgJBGGohBQJ/IAYrAxgiByACKwMAIghjRQRAIAUiBCAHIAhiDQEaIAQgBigCJCACKAIMTg0BGgsgBSACKQMQNwMQIAUgAikDCDcDCCAFIAIpAwA3AwAgAyACIANGDQAaAkADQCAAKwMAIgcgAkEYayIEKwMAIghjRQRAIAcgCGINAiAGKAIkIAJBDGsoAgBODQILIAIgBCkDEDcDECACIAQpAwg3AwggAiAEKQMANwMAIAQiAiADRw0ACyADDAELIAILIgQgACkDEDcDECAEIAApAwg3AwggBCAAKQMANwMAIABBGGoiAiABRw0ACwwCCyADIAApAxA3AxAgAyAAKQMINwMIIAMgACkDADcDAAwBCyAAIAAgAkEBdiIFQRhsIgZqIgQgBSADIAUQywEgBCABIAIgBWsiAiADIAZqIAIQywEgBCECA0AgASACRgRAIAAgBEYNAgNAIAMgACkDEDcDECADIAApAwg3AwggAyAAKQMANwMAIANBGGohAyAAQRhqIgAgBEcNAAsMAgsCQAJAIAIrAwAiByAAKwMAIghjRQRAIAcgCGINASACKAIMIAAoAgxODQELIAMgAikDEDcDECADIAIpAwg3AwggAyACKQMANwMAIAJBGGohAgwBCyADIAApAxA3AxAgAyAAKQMINwMIIAMgACkDADcDACAAQRhqIQALIANBGGohAyAAIARHDQALIAEgAkYNAANAIAMgAikDEDcDECADIAIpAwg3AwggAyACKQMANwMAIANBGGohAyACQRhqIgIgAUcNAAsLC4sBAQV/IwBBEGsiA0KAgICAEDcCBCADQQI2AgwgACgCACgCACABQQxsaiEEIAAoAgQgAUECdGoiBSgCACEBIAAoAgwhBkEAIQADQCAFIAEgBiAEIANBBGogAGooAgBBAnRqKAIAQQJ0aigCACICIAJBH3UiAnMgAmtqIgE2AgAgAEEEaiIAQQxHDQALCwIAC7cCAQV/IwBBIGsiBSQAAkACQCAAKAIEIgIgACgCCCIDSQRAIAIgASkCCDcCCCACIAEpAgA3AgAgAkEQaiEBDAELIAIgACgCACIEa0EEdSIGQQFqIgJBgICAgAFPDQEgBUEMakH/////ACADIARrIgNBA3UiBCACIAIgBEkbIANB8P///wdPGyAGIAAQMiICKAIIIgMgASkCCDcCCCADIAEpAgA3AgAgAiACKAIIQRBqNgIIIAIoAgQgACgCBCAAKAIAIgNrIgFrIQQgAQRAIAQgAyAB/AoAAAsgACgCACEDIAAgBDYCACACIAM2AgQgACACKAIIIgE2AgQgAiADNgIIIAAoAgghBCAAIAIoAgw2AgggAiADNgIAIAIgBDYCDCACEDYLIAAgATYCBCAFQSBqJAAPCxAmAAt4AQN/AkAgACgCCCICRQRAQQAhAgwBCyAAKAIQIAFBBHRqKAIAIQEgAEEIaiIDIQADQCAAIAIgAigCECABSCIEGyEAIAJBBEEAIAQbaigCACICDQALQQAhAiAAIANGDQAgASAAKAIQSA0AIAAtAIEB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AgsgAAsgBigCADYCAAsgAiEAIAZBBGoiBiABRw0ACwwCCyAEIAAoAgA2AgAMAQsgACAAIANBAXYiB0ECdCIFaiIGIAIgByAEIAcQ0gEgBiABIAIgAyAHayIDIAQgBWogAxDSASACKAIEIQcgAigCACECIAYhAwNAIAEgA0YEQCAAIAZGDQIDQCAEIAAoAgA2AgAgBEEEaiEEIABBBGoiACAGRw0ACwwCCwJAAkAgAigCACIFIAMoAgAiC0EDdGoiCSAHKAIAIghBAnQiCmooAgAiDCAKIAUgACgCACIKQQN0aiIFaigCACINTgRAIAwgDUcNASAJQQEgCGtBAnQiCGooAgAgBSAIaigCAE4NAQsgBCALNgIAIANBBGohAwwBCyAEIAo2AgAgAEEEaiEACyAEQQRqIQQgACAGRw0ACyABIANGDQADQCAEIAMoAgA2AgAgBEEEaiEEIANBBGoiAyABRw0ACwsL6gwDDHwRfwF+IwBBkAFrIhQkACAUQeAAakEAQTD8CwAgFEEwakEAQTD8CwAgFCAENgIsIBQgAzYCKCAUQoCAgIAQNwIAIAEoAgQiGigCSCIfIAdBGGwiFWoiICsDACILIB8gBkEYbCIXaiIhKwMAIgyhIQ4gBUEDbSEiIBooApgBIiMgFWorAwAhDyAXICNqKwMAIRAgASgCACIbKAKYASEcIBsoAkghHUEAIQFBACEXA0ACfyAPIBwgFEEoaiAUIBdqKAIAIh5BAnRqKAIAQRhsIhVqKwMAmiIJZCAVIB1qIhgrAwAiCCALYyAIIAthGyAJIBBjIAggDGMgCCAMYRtrIiRFBEBEAAAAAAAA+H8hCUQAAAAAAAD4fyEKQQAMAQsgISsDECEKICErAwghCQJAIAggDKEiDSAIIAuhIgggDZkgCJljIhUbIA6jIgi9Qv///////////wCDQv/////////3/wBWDQAgICsDCCINIAmhIhG9Qv///////////wCDQoCAgICAgID4/wBaDQAgICsDECISIAqhIhO9Qv///////////wCDQoCAgICAgID4/wBaDQAgCiASIBUbIAggE6KgIQogCSANIBUbIAggEaKgIQkLICRBACAaKAKoASIVICJBGGxqKwMIIBUgGigCaCAFQQJ0aigCAEEDbUEYbGorAwigRAAAAAAAAAAAZCAYKwMIIgggCWMgCCAJYRsbCyEVAkAgCb1C////////////AINC//////////f/AFYNACAVQQAgFWsgHhsgGWohGSABQQFKBEBBAiEBDAELIAFFIBVFIBZzRXJFBEBBASEBDAELIAFBGGwiHiAUQeAAamoiFiAYKQMAIiU3AwAgFiAYKQMQNwMQIBYgGCkDCDcDCCAUQTBqIB5qIhYgCTkDCCAWIAo5AxAgFiAlNwMAIAFBAWohASAVQQBHIRYLIBdBBGoiF0EIRw0ACyAUIAc2AiQgFCAGNgIgIBRCgICAgBA3AgAgHSAEQRhsIhVqIgQrAwAiCyAdIANBGGwiA2oiBisDACIMoSEOIAJBA20hByAVIBxqKwMAmiEPIAMgHGorAwCaIRBBACEXA0ACfyAjIBRBIGogFCAXaigCACIYQQJ0aigCAEEYbCIDaisDACIJIBBkIAwgAyAfaiIDKwMAIghjIAggDGEbIAkgD2QgCCALZCAIIAthG2siHEUEQEQAAAAAAAD4fyEJRAAAAAAAAPh/IQpBAAwBCyAGKwMQIQogBisDCCEJAkAgCCAMoSINIAggC6EiCCANmSAImWMiFRsgDqMiCL1C////////////AINC//////////f/AFYNACAEKwMIIg0gCaEiEb1C////////////AINCgICAgICAgPj/AFoNACAEKwMQIhIgCqEiE71C////////////AINCgICAgICAgPj/AFoNACAKIBIgFRsgCCAToqAhCiAJIA0gFRsgCCARoqAhCQsgHEEAIBsoAqgBIhUgB0EYbGorAwggFSAbKAJoIAJBAnRqKAIAQQNtQRhsaisDCKBEAAAAAAAAAABkIAkgAysDCCIIYyAIIAlhGxsLIRUCQCAJvUL///////////8Ag0L/////////9/8AVg0AIBVBACAVayAYGyAZaiEZIAFBAUoEQEECIQEMAQsgAUUgFUUgFnNFckUEQEEBIQEMAQsgAUEYbCIYIBRBMGpqIhYgAykDACIlNwMAIBYgAykDEDcDECAWIAMpAwg3AwggFEHgAGogGGoiAyAJOQMIIAMgCjkDECADICU3AwAgAUEBaiEBIBVBAEchFgsgF0EEaiIXQQhHDQALAn8gGUUEQEQAAAAAAAD4fyEIRAAAAAAAAPh/IQtEAAAAAAAA+H8hCkQAAAAAAAD4fyEJQQAMAQsg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BEBEAAAAAAAA+H8hCUQAAAAAAAD4fyEKQQAMAQsgISsDECEKICErAwghCQJAIAggDKEiDSAIIAuhIgggDZkgCJljIhUbIA6jIgi9Qv///////////wCDQv/////////3/wBWDQAgICsDCCINIAmhIhG9Qv///////////wCDQoCAgICAgID4/wBaDQAgICsDECISIAqhIhO9Qv///////////wCDQoCAgICAgID4/wBaDQAgCiASIBUbIAggE6KgIQogCSANIBUbIAggEaKgIQkLICRBACAaKAKoASIVICJBGGxqKwMIIBUgGigCaCAFQQJ0aigCAEEDbUEYbGorAwigRAAAAAAAAAAAZCAYKwMIIgggCWMgCCAJYRsbCyEVAkAgCb1C////////////AINC//////////f/AFYNACAVQQAgFWsgHhsgGWohGSABQQFKBEBBAiEBDAELIAFFIBVFIBZzRXJFBEBBASEBDAELIAFBGGwiHiAUQeAAamoiFiAYKQMAIiU3AwAgFiAYKQMQNwMQIBYgGCkDCDcDCCAUQTBqIB5qIhYgCTkDCCAWIAo5AxAgFiAlNwMAIAFBAWohASAVQQBHIRYLIBdBBGoiF0EIRw0ACyAUIAc2AiQgFCAGNgIgIBRCgICAgBA3AgAgHSAEQRhsIhVqIgQrAwAiCyAdIANBGGwiA2oiBisDACIMoSEOIAJBA20hByAVIBxqKwMAIQ8gAyAcaisDACEQQQAhFwNAAn8gECAjIBRBIGogFCAXaigCACIYQQJ0aigCAEEYbCIDaisDACIJYyAMIAMgH2oiAysDACIIYyAIIAxhGyAJIA9kIAggC2QgCCALYRtrIhxFBEBEAAAAAAAA+H8hCUQAAAAAAAD4fyEKQQAMAQsgBisDECEKIAYrAwghCQJAIAggDKEiDSAIIAuhIgggDZkgCJljIhUbIA6jIgi9Qv///////////wCDQv/////////3/wBWDQAgBCsDCCINIAmhIhG9Qv///////////wCDQoCAgICAgID4/wBaDQAgBCsDECISIAqhIhO9Qv///////////wCDQoCAgICAgID4/wBaDQAgCiASIBUbIAggE6KgIQogCSANIBUbIAggEaKgIQkLIBxBACAbKAKoASIVIAdBGGxqKwMIIBUgGygCaCACQQJ0aigCAEEDbUEY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IBYgACgCACIKQTBsaiIAKwMYZUUNABpBACAZIAArAwBmRQ0AGkEAIBggACsDIGVFDQAaQQAgGCAAKwMIZkUNABoCQCAKQQFxDQAgCCgCBCgCACAVaigCACELIAgoAgAiDigCBCEAIAJBAjYCiAIgAkKAgICAEDcCgAIgACgCWCIPIApBAXUiECAKaiIRQQJ0aiESIAAoAmghE0EAIQEDQEEBIQwCQCAPIAJBgAJqIAFqKAIAIgcgEWoiDUECdCIEaigCACIAIBJBBEEIIAdBAUYbQQAgBxtBjOkAaigCAEECdGooAgAiA0gEQCAAIQQgAyEADAELIAQgE2ooAgAhDUEAIQwgAyEECyACQZACaiIUIAdBBHRqIgMgDDoADCADIAA2AgggAyAENgIEIAMgDTYCACABQQRqIgFBDEcNAAsgAkGAAmogDiALIBAgFBCMAyACKQOIAkL///////////8Ag0L/////////9/8AVg0AIAgoAggoAgAgC0ECdGoiACAAKAIAIAIoAoACajYCAAsgCkGBgICAeHFBAUYLIQcCQCAZIBYgBUEwbGoiACsDGGVFDQAgGSAAKwMAZkUNACAYIAArAyBlRQ0AIBggACsDCGZFDQACQCAFQQFxDQAgCCgCBCgCACAVaigCACELIAgoAgAiDigCBCEAIAJBAjYCiAIgAkKAgICAEDcCgAIgACgCWCIPIAVBAXUiECAFaiIRQQJ0aiESIAAoAmghE0EAIQEDQEEBIQwCQCAPIAJBgAJqIAFqKAIAIgYgEWoiDUECdCIEaigCACIAIBJBBEEIIAZBAUYbQQAgBhtBjOkAaigCAEECdGooAgAiA0gEQCAAIQQgAyEADAELIAQgE2ooAgAhDUEAIQwgAyEECyACQZACaiIUIAZBBHRqIgMgDDoADCADIAA2AgggAyAENgIEIAMgDTYCACABQQRqIgFBDEcNAAsgAkGAAmogDiALIBAgFBCMAyACKQOIAkL///////////8Ag0L/////////9/8AVg0AIAgoAggoAgAgC0ECdGoiACAAKAIAIAIoAoACajYCAAsgBUGBgICAeHFBAUYhBgsCQCAGIAdyRQRAIAlBAEgNASACIAlBAnRqKAIAIQAgCUEBayEJDAILIAogBSAHGyEAIAdFIAZFcg0BIAIgCUEBaiIJQQJ0aiAFNgIADAEL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QQN0aiEEIABBGGohAANAIAAgASACIAMQoAMgAS0ANg0BIABBCGoiACAESQ0ACwsLNQAgACgCBCABKAIIKAIERgRAIAEgAiADEK0CDwsgACgCCCIAIAEgAiADIAAoAgAoAhwRBQALHAAgACgCBCABKAIIKAIERgRAIAEgAiADEK0CCwvEAQECfyMAQdAAayIDJAACQAJ/QQEgACgCBCABKAIERg0AGkEAIAFBlOcBEGIiAUUNABogAigCACIERQ0BIANBGGpBAEE4/AsAIANBAToASyADQX82AiAgAyAANgIcIAMgATYCFCADQQE2AkQgASADQRRqIARBASABKAIAKAIcEQUAIAMoAiwiAEEBRgRAIAIgAygCJDYCAAsgAEEBRgsgA0HQAGokAA8LIANByBk2AgggA0HnAzYCBCADQccONgIAEK4CAAsFAEHkDQsrAQF/IwBBQGoiAiQAIAIgASAAEQEAQcAAECMgAhBAIAIQQRogAkFAayQACwUAQZsQCy0BAX8jAEFAaiIDJAAgAyABIAIgABEWAEHAABAjIAMQQCADEEEaIANBQGskAAsEAEEAC0gBAX8jAEHQAGsiAyQAIAMgASkDADcDACADIAEpAwg3AwggA0EQaiIBIAMgAiAAEQMAQcAAECMgARBAIAEQQRogA0HQAGokAAsEAEEAC1UBAn8jAEFAaiICJAAgASAAKAIEIgNBAXVqIQEgACgCACEAIAIgASADQQFxBH8gASgCACAAaigCAAUgAAsRAQBBwAAQIyACEEAgAhBBGiACQUBrJAALdQECfyMAQSBrIgIkACABIAAoAgQiA0EBdWohASAAKAIAIQAgAiABIANBAXEEfyABKAIAIABqKAIABSAACxEBAEEgECMiACACKQMYNwMYIAAgAikDEDcDECAAIAIpAwg3AwggACACKQMANwMAIAJBIGokACAAC7oBAQN/IwBBEGsiAyQAIAAoAgAhAiADIAEgACgCBCIAQQF1aiIBIABBAXEEfyABKAIAIAJqKAIABSACCxEBAEEMECMiAEEANgIIIABCADcCACADKAIEIgIhBCACIAMoAgAiAWtBBnUiAgRAIAAgAhCVAyAAKAIEIQIgASAERwRAA0AgAiABEEBBQGshAiABQUBrIgEgBEcNAAsLIAAgAjYCBAsgAyADNgIMIANBDGoQmAMgA0EQaiQAIAALVwECfyMAQUBqIgMkACABIAAoAgQiBEEBdWohASAAKAIAIQAgAyABIAIgBEEBcQR/IAEoAgAgAGooAgAFIAALEQsAQcAAECMgAxBAIAMQQRogA0FAayQACwsAIAAQaRogABAiC3MBAn8jAEHQAGsiAyQAIAEgACgCBCIEQQF1aiEBIAAoAgAhACAEQQFxBEAgASgCACAAaigCACEACyADIAIpAwg3AwggAyACKQMANwMAIANBEGoiAiABIAMgABEDAEHAABAjIAIQQCACEEEaIANB0ABqJAALJAECfiAAKQMAIAEpAwBTIAApAwgiAiABKQMIIgNVIAIgA1EbCwYAQYCcAgsUACAAQQRqQQAgASgCBEGhmAFGGwtPAQJ/AkAgASgCBCICBEAgASgCACIBIAJBBHRqIQMDQCAAKAIEKAIQIgJFDQIgAiABIAIoAgAoAhgRAQAgAUEQaiIBIANHDQALCw8LEGYACxUAIAFByJsCNgIAIAEgACgCBDYCBAsdAQF/QQgQIyIBQcibAjYCACABIAAoAgQ2AgQgAQsQACAAKAIMIAAoAghrQQJ1CwoAIABBCGoQhAILZwEDfyAAKAIEIgMgACgCCCIBRwRAA0AgACABQQRrIgE2AgggASgCACECIAFBADYCACACBEAgAiACKAIAKAIEEQAAIAAoAgghAQsgASADRw0ACwsgACgCACIBBEAgACgCDBogARAiCwviBAMGfwF8AX4jAEEgayIGJAACf0EwECMhAyMAQSBrIgIkACADQQA2AiggA0IANwMgIANBADYCECADQgA3AwggAyAANgIEIANBmJsCNgIAAkACQCAARQRAIANCgICAgICAgPg/NwMYIAJBADYCDCACQgA3AgREAAAAAAAA8D8hCAwBCyADIAArAxgiCDkDGCACQQA2AgwgAkIANwIEIAhEAAAAAAAAAABhDQELIAJBBGogASgCBCABKAIAa0EEdRBcIAEoAgAiBCABKAIEIgFHBEADQCAEKQMAIQkgAiAIIAQpAwi5ojkDGCACIAggCbmiOQMQIAJBBGogAkEQahBMIARBEGoiBCABRw0ACwsgA0EgahBFIAMgAigCBDYCICADIAIoAgg2AiQgAyACKAIMNgIoIAJBIGokACADDAELQQIQggIACyEDAkACQCAAKAIMIgEgACgCECICSQRAIAEgAzYCACABQQRqIQMMAQsgASAAQQhqIgQoAgAiBWtBAnUiB0EBaiIBQYCAgIAETw0BIAZBDGpB/////wMgAiAFayICQQF1IgUgASABIAVJGyACQfz///8HTxsgByAEEEoiASgCCCICIAM2AgAgASACQQRqNgIIIAEoAgQgACgCDCAAKAIIIgJrIgNrIQQgAwRAIAQgAiAD/AoAAAsgACgCCCECIAAgBDYCCCABIAI2AgQgACABKAIIIgM2AgwgASACNgIIIAAoAhAhBCAAIAEoAgw2AhAgASACNgIAIAEgBDYCDCABEMwFCyAAIAM2AgwgA0EEaygCACAGQSBqJAAPCxAmAAsJACAAEIMCECILcQEDfyMAQeAAayIDJAAgA0EANgIUIANCADcCDCADQQxqIgQgASgCACIFIAEoAgQiASABIAVrQQxtEEcgA0EYaiIBIAQgAiAAEQMAQcAAECMgARC0ASABEEEaIAMgBDYCXCADQdwAahApIANB4ABqJAALFQAgACgCBCAAQQRqIAAsAA9BAEgbCycAIABB6JoCNgIAIAAsAA9BAEgEQCAAKAIMGiAAKAIEECILIAAQIgslACAAQeiaAjYCACAALAAPQQBIBEAgACgCDBogACgCBBAiCyAACyUBAX8jAEEQayIBJAAgASAAQQxqNgIMIAFBDGoQKSABQRBqJAALDwAgAEG0mgI2AgAgABAiCw0AIABBtJoCNgIAIAALDQAgAARAIAAQQRAiCwuvAQICfwR8IwBBMGsiAiQAIAJBCGogARBNIAJBEGogAigCCBDHAwJAIAIoAgwiAUUNACABIAEoAgQiA0EBazYCBCADDQAgASABKAIAKAIIEQAAIAEQJAsgAisDECEEIAIrAyAhBSAAIAIrAxgiBiACKwMoIgcgBiAHZCIBGzkDGCAAIAUgBCAEIAVjIgMbOQMQIAAgByAGIAEbOQMIIAAgBCAFIAMbOQMAIAJBMGokAAteAQR/IwBBEGsiASQAIAFBCGogABBNIAEoAggiACgCBCAAKAIAAkAgASgCDCIARQ0AIAAgACgCBCIEQQFrNgIEIAQNACAAIAAoAgAoAggRAAAgABAkCyABQRBqJABGC7oCAgJ8Bn8jAEEQayIEJAAgBEEIaiAAEE0gBCgCCCIAKAIAIgUgACgCBCIIRwRAA0BEAAAAAAAAAAAhASACIAUoAgQiBiAFKAIAIgBrIgdBIU8EfAJAIAZBEGsiAyAGIAdBEHEiBhsiByAARgRADAELIAMrAwAhAgNAIAEgAysDCCAAKwMIIgGgIAIgACsDACICoaKgIAEgACsDGKAgAiAAKwMQIgKhoqAhASAAQRBqIQMgAEEgaiIAIAdHDQALCyAGBHwgASADKwMIIAArAwigIAMrAwAgACsDAKGioAUgAQtEAAAAAAAA4D+iBSABC6AhAiAFQQxqIgUgCEcNAAsLAkAgBCgCDCIARQ0AIAAgACgCBCIDQQFrNgIEIAMNACAAIAAoAgAoAggRAAAgABAkCyAEQRBqJAAgAgujAQEDfyMAQTBrIgIkACACQQxqIgMgARDKAyACQQA2AiAgAkIANwIYIAJBGGoiASADIAFBARBHQRgQIyIDQbSaAjYCACADQgA3AgQgA0EMaiIEIAEQWyACIAM2AiggAiAENgIkIAIgAikCJDcDACAAIAIQaiACIAE2AiwgAkEsahApIAIoAgwiAARAIAIgADYCECACKAIUGiAAECILIAJBMGokAAveBQIJfwF8IwBB0ABrIgYkACAGIAEQQBogBkEANgJIIAZCADcCQCAGQUBrIgFBARCVAyABKAIEIQMgASAGIgJHBEADQCADIAIQQBogA0FAayEDIAJBQGsiAiABRw0ACwsgASADNgIEIwBBkAFrIgIkACABKAIAIgMgASgCBCIHRwRAA0AgAkHQAGoiBCADEEAaIAQQywMgBWohBSAEEEEaIANBQGsiAyAHRw0ACwsgAkEANgJMIAJCADcCRCACQcQAaiAFEFwgASgCACIFIAEoAgQiB0cEQANAIAJB0ABqIgMgBRBAGiACQRhqIAMQTSACQQA2AkAgAkIANwI4IAJBOGogAigCGCIDKAIAIgQgAygCBCIDIAMgBGtBDG0QRwJAIAIoAhwiA0UNACADIAMoAgQiBEEBazYCBCAEDQAgAyADKAIAKAIIEQAAIAMQJAsgAigCOCIEIAIoAjwiCEcEQANAIAJBLGogBBA8IgkoAgAiAyACKAIwIgpHBEADQCADKwMAIQsgAiADKwMIOQMgIAIgCzkDGCACQcQAaiACQRhqEEwgA0EQaiIDIApHDQALIAkoAgAhAwsgAwRAIAIgAzYCMCACKAI0GiADECILIARBDGoiBCAIRw0ACwsgAiACQThqNgIYIAJBGGoQKSACQdAAahBBGiAFQUBrIgUgB0cNAAsLIAJBGGoiAyACQcQAahDKAyACQQA2AlggAkIANwJQIAJB0ABqIgUgAyACQSRqQQEQR0EYECMiA0G0mgI2AgAgA0IANwIEIANBDGoiBCAFEFsgAiADNgIUIAIgBDYCECACIAIpAhA3AwggACACQQhqEGogAiAFNgI4IAJBOGoQKSACKAIYIgAEQCACIAA2AhwgAigCIBogABAiCyACKAJEIgAEQCACIAA2AkggAigCTBogABAiCyACQZABaiQAIAYgATYCTCAGQcwAahCYAyAGEEEaIAZB0ABqJAALJAECfCAAKwMIIAErAwhjIAArAwAiAiABKwMAIgNjIAIgA2EbCwYAQfz9AQvZGgIRfwd8IwBBkAJrIgQkACAEQQA2AlggBEIANwNQIARCADcCPCAEQgA3AjQgBEKAgICAgICA+D83A0ggBEGYmwI2AjAgBEEYaiABEE0gBCgCGCEBIARBADYCLCAEQgA3AiQgBEE4ahCEAiAEQfgAakEAQegA/AsAIARCADcDcCAEQQI2AmwgBEIANwJkIARB/ABqQQBBMPwLACAEQbABakEAQST8CwAgBEEANgLoASAEQgA3A+ABIARBAToA3QEgBEEBOgDUASAEQoCAgICAgICgPjcD+AEgBEKAgICAgICA0MEANwPwASAEQfyaAjYCYCAEQeAAaiIGIAEQmwEgBiAEQSRqIgUQ4QEgBEEANgKIAiAEQgA3AoACIAYgBEEwaiAEQYACaiIBEM0DIAQgATYCjAIgBEGMAmoQKSAGEGkaIAQgBTYCYCAGECkCQCAEKAIcIgVFDQAgBSAFKAIEIgFBAWs2AgQgAQ0AIAUgBSgCACgCCBEAACAFECQLIARBADYCiAIgBEIANwKAAiAEQTBqIARBgAJqEMwDIARBADYCLCAEQgA3AiQgBCgCgAIiByAEKAKEAiIJRwRAA0AgBEHgAGogBxA8IQxEAAAAAAAAAAAhFCAEKAJkIgogDCgCACIDayIBQSFPBEACQCAKQRBrIgUgCiABQRBxIggbIgYgA0YEQEQAAAAAAAAAACEWIAMhAQwBCyAFKwMAIRhEAAAAAAAAAAAhFiADIQEDQCAWIAUrAwggASsDCCIWoCAYIAErAwAiFKGioCAWIAErAxigIBQgASsDECIYoaKgIRYgAUEQaiEFIAFBIGoiASAGRw0ACwsgCAR8IBYgBSsDCCABKwMIoCAFKwMAIAErAwChoqAFIBYLRAAAAAAAAOA/opkhFAtEAAAAAAAA8H8hGkQAAAAAAADw/yEYRAAAAAAAAPD/IRZEAAAAAAAA8P8hGUQAAAAAAADwfyEVIAogAyIBRwRAA0AgASsDCCIXIBggFyAYZBshGCABKwMAIhYgGSAWIBlkGyEZIBogFyAXIBpkGyEaIBUgFiAVIBZjGyEVIAFBEGoiASAKRw0ACyAYIBqhIRYgGSAVoSEYCyACIBYgGCAWIBhkG6IgFGMEQCAEQSRqIAwQdiAMKAIAIQMLIAMEQCAEIAM2AmQgBCgCaBogAxAiCyAHQQxqIgcgCUcNAAsgBCgCKCAEKAIka0EMbSEDCyAEQQA2AiAgBEIANwIYIARBGGogAxBWIAQoAiQiASAEKAIoIhNHBEADQCAEQeAAaiELIwBBMGsiDSQAAkAgASgCBCABKAIAayIGQQR1Ig9BA00EQCALIAEQPBoMAQsjAEEQayIJJAAgDUEQaiIKQQA2AgggCkIANwIAAkAgD0UNACAKIA8QyQQgCigCACEFIAkgCigCBCIDQR9xNgIMIAkgBSADQQN2Qfz///8BcWo2AgggCUEIaiAPEMgEIAogCigCBCAPaiIDNgIEIANBH3EiBUUNAEEgIAVrIQggCigCACADQQN2Qfz///8BcWohBwNAIAcgBygCAEF+IAV3cTYCAEEAIAVBAWogBUEfRiIDGyEFIAdBBEEAIAMbaiEHIAhBAWsiCA0ACwsgCUEQaiQAIA1BBGogDxCWASESAnwgASgCACIHKwMYIAcgD0EBayIMQQR0aiIFKwMIIhahIRUgEigCACIQIAcrAxAgBSsDACIUoSIXRAAAAAAAAAAAYSAVRAAAAAAAAAAAYXEEfEQAAAAAAAAAAAUgFSAHKwMAIBShoiAXIAcrAwggFqGioSIUIBSiIBcgF6IgFSAVoqCjCzkDACAGIAdqIgNBGGsrAwAgBysDCCIWoSEVRAAAAAAAAAAAIANBIGsrAwAgBysDACIUoSIXRAAAAAAAAAAAYSAVRAAAAAAAAAAAYXENABogFSAFKwMAIBShoiAXIAUrAwggFqGioSIUIBSiIBcgF6IgFSAVoqCjCyEUIBAgDEEDdGogFDkDACAMQQJPBEAgASgCACEHQQEhAwNAIAcgA0EBaiIFQQR0aiIGKwMIIAcgA0EEdGoiCEEIaysDACIWoSEVIBAgA0EDdGoCfCAGKwMAIAhBEGsrAwAiFKEiF0QAAAAAAAAAAGEEQEQAAAAAAAAAACAVRAAAAAAAAAAAYQ0BGgsgFSAIKwMAIBShoiAXIAgrAwggFqGioSIUIBSiIBcgF6IgFSAVoqCjCzkDACAFIgMgDEcNAAsLIAIgAqIhFyABKAIAIREgCigCACEOQQAhBQNAAkACQAJAIBAgBUEDdGorAwAiGCAXZEUEQCAFIQMMAQsgCigCACEGIAUhAwNAQQAhBwJAIAwgA0EBaiIDTwRAIAYgA0EDdkH8////AXFqKAIAIAN2QQFxDQIMAQsDQCAHIgNBAWohByAGIANBA3ZB/P///wFxaigCACADdkEBcQ0ACwsgAyAFRg0CIBAgA0EDdGorAwAiGCAXZA0ACwtBACEHAkAgA0EBayAMIAMbIgZFDQADQCAOIAZBA3ZB/P///wFxaigCACAGdkEBcUUEQCAGIQcMAgsgBkEBayIGDQALCyAMIQYgDiAHQQN2Qfz///8BcWooAgAgB3ZBAXEEQANAIAYiB0EBayEGIA4gB0EDdkH8////AXFqKAIAIAd2QQFxDQALCyADIQUDQAJAIAwgBUEBaiIFSQRAQQAhBgNAIAYiBUEBaiEGIA4gBUEDdkH8////AXFqKAIAIAV2QQFxDQALDAELIA4gBUEDdkH8////AXFqKAIAIAV2QQFxDQELCyAFIAdGDQACQCAYIBAgBSIGQQN0aisDAGQEQANAIAwgBkEBaiIGSQRAQQAhCANAIAgiBkEBaiEIIA4gBkEDdkH8////AXFqKAIAIAZ2QQFxDQALIAMhCSAFIQMgBiEFIAchCAwDCyAOIAZBA3ZB/P///wFxaigCACAGdkEBcQ0ACyADIQkgBSEDIAYhBSAHIQgMAQtBACEIAkAgB0EBayAMIAcbIgZFDQADQCAOIAZBA3ZB/P///wFxaigCACAGdkEBcUUEQCAGIQgMAgsgBkEBayIGDQALCyAMIQYgDiAIQQN2Qfz///8BcWooAgAgCHZBAXEEQANAIAYiCEEBayEGIA4gCEEDdkH8////AXFqKAIAIAh2QQFxDQALCyAHIQkLIA4gA0EDdkH8////AXFqIgYgBigCAEEBIAN0cjYCACAKKAIAIQYgBSEDA0AgDCADQQFqIgNJBEBBACEHA0AgByIDQQFqIQcgBiADQQN2Qfz///8BcWooAgAgA3ZBAXENAAsMAwsgBiADQQN2Qfz///8BcWooAgAgA3ZBAXENAAsMAQtBACEDIAtBADYCCCALQgA3AgAgCyAPEFwCQANAIAooAgAgA0EDdkH8////AXFqKAIAIAN2QQFxRQRAIAEoAgAgA0EEdGohCQJAIAsoAgQiBSALKAIIIgZJBEAgBSAJKQMINwMIIAUgCSkDADcDACAFQRBqIQcMAQsgBSALKAIAIgVrQQR1IgdBAWoiCEGAgICAAU8NAyANQRxqQf////8AIAYgBWsiBkEDdSIFIAggBSAISxsgBkHw////B08bIAcgCxAyIQggDSgCJCIFIAkpAwg3AwggBSAJKQMANwMAIA0gDSgCJEEQajYCJCANKAIgIAsoAgQgCygCACIFayIHayEGIAcEQCAGIAUgB/wKAAALIAsoAgAhCSALIAY2AgAgDSAJNgIgIAsgDSgCJCIHNgIEIA0gCTYCJCALKAIIIQUgCyANKAIoNgIIIA0gBTYCKCAIIAk2AgAgCBA2CyALIAc2AgQLIANBAWoiAyAPRw0ACyASKAIAIgMEQCASIAM2AgQgEigCCBogAxAiCyAKKAIAIgNFDQMgCigCCBogAxAiDAMLECYACyARIANBBHRqIgYrAwggESAJQQR0aiIDKwMIIhahIRkgECAFQQN0aiAGKwMAIAMrAwAiFKEiFUQAAAAAAAAAAGEgGUQAAAAAAAAAAGFxBHxEAAAAAAAAAAAFIBkgESAFQQR0aiIDKwMAIBShoiAVIAMrAwggFqGioSIUIBSiIBUgFaIgGSAZoqCjCzkDACARIAVBBHRqIgYrAwggESAIQQR0aiIDKwMIIhahIRkgECAJQQN0aiAGKwMAIAMrAwAiFKEiFUQAAAAAAAAAAGEgGUQAAAAAAAAAAGFxBHxEAAAAAAAAAAAFIBkgESAJQQR0aiIDKwMAIBShoiAVIAMrAwggFqGioSIUIBSiIBUgFaIgGSAZoqCjCzkDAAwACwALIA1BMGokACAEQRhqIAsQaCAEKAJgIgMEQCAEIAM2AmQgBCgCaBogAxAiCyABQQxqIgEgE0cNAAsLQRgQIyIFQbSaAjYCACAFQgA3AgQgBUEMaiIDIARBGGoiARBbIAQgBTYCFCAEIAM2AhAgBCAEKQIQNwMIIAAgBEEIahBqIAQgATYCYCAEQeAAaiIAECkgBCAEQSRqNgJgIAAQKSAEIARBgAJqNgJgIAAQKSAEQTBqEIMCGiAEQZACaiQAC7wBAgR8AX8jAEEwayIHJAACQCACKwMAIgQgBKIgAisDCCIDIAOioCIFRAAAAAAAAAAAYQRAIAAQ4wEMAQsgB0IANwMgIAdCADcDKCAHRAAAAAAAAPA/IAMgBZ8iBaMiAyADoiIGIAagoTkDGCAHRAAAAAAAAAAAIAQgBaMiBCADoiIDIAOgoSIDOQMQIAcgAzkDCCAHRAAAAAAAAPA/IAQgBKIiBCAEoKE5AwAgACABIAcQ4AELIAdBMGokAAtXAgF/AnwjAEEwayIDJAAgAisDCCEEIAIrAwAhBSADQgA3AwggAyAFOQMAIANCADcDECADQgA3AyAgAyAEOQMYIANCADcDKCAAIAEgAxDgASADQTBqJAALYAIBfwF8IwBBMGsiAyQAIAIQPiEEIAJEAAAAAACAVkCgED4hAiADQgA3AyAgAyACOQMYIAMgBJo5AxAgAyAEOQMIIAMgAjkDACADQgA3AyggACABIAMQ4AEgA0EwaiQAC2cCAX8CfCMAQTBrIgMkACACKwMAIQQgAisDCCEFIANCADcDCCADQoCAgICAgID4PzcDACADQgA3AxAgAyAFOQMoIAMgBDkDICADQoCAgICAgID4PzcDGCAAIAEgAxDgASADQTBqJAALhwgBBX8jAEGQAmsiAiQAAkACQCABEM4DQQFNBEAgAkHYAGoiAyABEEAaIABBwAAQIyIBNgIAIAAgAUFAayIENgIIIAEgAxBAGiAAIAQ2AgQgAxBBGgwBCyACQQA2AlAgAkIANwNIIAJCADcCNCACQgA3AiwgAkKAgICAgICA+D83A0AgAkGYmwI2AiggAkEgaiABEE0gAigCICEDIAJBADYCHCACQgA3AhQgAkEwahCEAiACQfAAakEAQegA/AsAIAJCADcDaCACQQI2AmQgAkIANwJcIAJB9ABqQQBBMPwLACACQagBakEAQST8CwAgAkEANgLgASACQgA3A9gBIAJBAToA1QEgAkEBOgDMASACQoCAgICAgICgPjcD8AEgAkKAgICAgICA0MEANwPoASACQfyaAjYCWCACQdgAaiIBIAMQmwEgASACQRRqIgMQ4QEgAkEANgKEAiACQgA3AvwBIAEgAkEoaiACQfwBaiIEEM0DIAIgBDYC+AEgAkH4AWoQKSABEGkaIAIgAzYCWCABECkCQCACKAIkIgFFDQAgASABKAIEIgNBAWs2AgQgAw0AIAEgASgCACgCCBEAACABECQLIAJBADYCHCACQgA3AhQgAkEoaiACQRRqQQAQxAIgAEEANgIIIABCADcCACACKAIYIAIoAhRrQQxtIQEjAEEgayIDJAACQAJAIAAoAgggACgCACIEa0EGdSABSQRAIAFBgICAIE8NASAAIANBDGogASAAKAIEIARrQQZ1IAAQqQEiARCnAiABEKYCCyADQSBqJAAMAQsQJgALIAIoAhgiAyACKAIURwRAA0BBGBAjIgFBtJoCNgIAIAFCADcCBCABQQxqIgQgA0EMayIDEFsgAiABNgIQIAIgBDYCDCACIAIpAgw3AwAgAkHYAGoiBCACEGoCQCAAKAIEIgEgACgCCCIFSQRAIAEgBBC0ARogAUFAayEBDAELIAEgACgCACIEa0EGdSIGQQFqIgFBgICAIE8NBCACQfwBakH///8fIAUgBGsiBEEFdSIFIAEgASAFSRsgBEHA////B08bIAYgABCpASEEIAIoAoQCIAJB2ABqELQBGiACIAIoAoQCQUBrNgKEAiAAIAQQpwIgACgCBCEBIAQQpgILIAAgATYCBCACQdgAahBBGiADIAIoAhRHDQALCyACIAJBFGo2AlgjAEEQayIFJAAgAigCWCIBKAIAIgAEQCAAIQMgASEEIAEoAgQiBiAARwRAA0AgBSAGQQxrIgY2AgwgBUEMahApIAAgBkcNAAsgAigCWCIEKAIAIQMLIAEgADYCBCAEKAIIGiADECILIAVBEGokACACQShqEIMCGgsgAkGQAmokAA8LECYAC9oCAgV/A3wjAEFAaiIDJAACQCABRAAAAAAAAAAAZQRAIAAQ4wEMAQsgAkECTARAIAEQwgEhAgsgA0EwaiACEJIDIQUgAkEASgRARAAAAAAAgHZAIAK3oyEJA0AgCSAEuKIiCEQAAAAAAIBWQKAQPiEKIAgQPiEIIAUoAgAgBEEEdGoiBiABIAiiOQMIIAYgASAKojkDACAEQQFqIgQgAkcNAAsLIANBEGogBRA8IQIgA0EANgIkIANCADcCHCADQRxqIgYgAiACQQxqQQEQR0EYECMiBEG0mgI2AgAgBEIANwIEIARBDGoiByAGEFsgAyAENgIsIAMgBzYCKCADIAMpAig3AwggACADQQhqEGogAyAGNgI8IANBPGoQKSACKAIAIgAEQCACIAA2AgQgAigCCBogABAiCyAFKAIAIgBFDQAgBSAANgIEIAUoAggaIAAQIgsgA0FAayQAC5MDAgN/BHwjAEFAaiIDJAACQAJAAkAgASsDACIGRAAAAAAAAAAAYw0AIAErAwgiB0QAAAAAAAAAAGMNACAGIAaiIAcgB6KgRAAAAAAAAAAAYg0BCyAAEOMBDAELIANBwAAQIyIBNgIwIAMgAUFAayIENgI4IAMgBDYCNCACBEAgB0QAAAAAAADgP6IiCJohByAGRAAAAAAAAOA/oiIJmiEGCyABIAc5AzggASAJOQMwIAEgBzkDKCABIAY5AyAgASAIOQMYIAEgBjkDECABIAg5AwggASAJOQMAIANBEGogA0EwahA8IQEgA0EANgIkIANCADcCHCADQRxqIgQgASABQQxqQQEQR0EYECMiAkG0mgI2AgAgAkIANwIEIAJBDGoiBSAEEFsgAyACNgIsIAMgBTYCKCADIAMpAig3AwggACADQQhqEGogAyAENgI8IANBPGoQKSABKAIAIgAEQCABIAA2AgQgASgCCBogABAiCyADKAIwIgBFDQAgAyAANgI0IAMoAjgaIAAQIgsgA0FAayQACzUBAX8gASAAKAIEIgJBAXVqIQEgACgCACEAIAEgAkEBcQR/IAEoAgAgAGooAgAFIAALEQAAC0YBAn9BCBAjIQFBIBAjIgBCADcCDCAAQfiUAjYCACAAQgA3AgQgAEIANwIUIABBADYCHCABIAA2AgQgASAAQQxqNgIAIAELSwEBf0HYnwIoAgAiAARAA0AgACgCACAAQRhqEMoCIAAQIiIADQALC0HQnwIoAgAhAEHQnwJBADYCACAABEBB1J8CKAIAGiAAECILCw0AIAAEQCAAEC8QIgsLBgBBpJoCCwYAQcjwAQsUACAAQQRqQQAgASgCBEH+kwFGGwueCgIGfwt8IwBB0ABrIgQkACAAKAIYIQggACgCBCgCACIFIAEoAgAiAUEFdGpCgICAgICAgPg/NwMYAkAgAi0AACADLQAARg0AIAAoAggiBygCAEF/RgRAIAcgATYCAAwBCyAHKAIEQX9GBEAgByABNgIEDAELIAdBfjYCAAsgAysDCCIMIQoCQCAMRAAAAAAAAAAAYg0AIAMrAxAiCkQAAAAAAAAAAGINACADKwMYIQoLIAJBCGohByACKwMIIQsCQAJAIApEAAAAAAAAAABhDQAgCyEKAkAgC0QAAAAAAAAAAGINACACKwMQIgpEAAAAAAAAAABiDQAgAisDGCEKCyAKRAAAAAAAAAAAYQ0ARAAAAAAAAPA/IQsMAQsCQCALRAAAAAAAAAAAYg0AIAIrAxAiC0QAAAAAAAAAAGINACACKwMYIQsLAkAgC0QAAAAAAAAAAGIEQCAAKAIMIgUgBykDEDcDECAFIAcpAwg3AwggBSAHKQMANwMAIAAoAgQoAgAhBQwBCwJAIAxEAAAAAAAAAABiDQAgAysDECIMRAAAAAAAAAAAYg0AIAMrAxghDAsgACgCECIGKAIAIQkgDEQAAAAAAAAAAGIEQCAJQQBODQEgBiABNgIADAELIAlBAE4NACAGQX42AgALIAAoAgwiBisDACEKIAYrAwghDCAGKwMQIQ0gBSABQQV0aiIGIAAoAhQrAwAiCzkDGCAGIA05AxAgBiAMOQMIIAYgCjkDAAsgCCABENYCBEAgACgCDCIGKwMAIQogBisDCCEMIAYrAxAhDSAFIAFBBXRqIgYgACgCHCsDACILOQMYIAYgDTkDECAGIAw5AwggBiAKOQMACwJAIAtEAAAAAAAAAABjDQAgBSABQQV0aiEFIAMrAxgiCyADKwMIIgogCqIgAysDECIMIAyioCALIAuioJ8iDqNEAAAAAAAAAAAgCiAOoyIQvUL///////////8Ag0KAgICAgICA+P8AVCIDGyACKwMYIg0gAisDCCIRIBGiIAIrAxAiEiASoqAgDSANoqCfIg+jRAAAAAAAAAAAIBEgD6MiE71C////////////AINCgICAgICAgPj/AFQiAhuiIAwgDqNEAAAAAAAAAAAgAxsgEiAPo0QAAAAAAAAAACACG6IgEEQAAAAAAAAAACADGyATRAAAAAAAAAAAIAIbokQAAAAAAAAAAKCgoEQep+hILv/vP2QEQCAEQTBqIAggByABEOcBIAUgBCkDSDcDGCAFIAQpA0A3AxAgBSAEKQM4NwMIIAUgBCkDMDcDAAwBCyAAKAIgKAIAIAFqQQE6AAAgACgCCEF+NgIAIAgoAkgiAiAIKAJYIAFBAnRqIgNBeEEEIAFBA29BAkYbaigCAEEYbGoiACsDECEOIAArAwAhDyACIAMoAgBBGGxqIgErAxAhECABKwMAIRMgBCAAKwMIIAErAwihIhQ5AyAgBCAPIBOhIg85AxggBCAOIBChIg45AyggBCAMIBGiIAogEqKhIhBEAAAAAAAA8L9EAAAAAAAA8D8gCyASoiAMIA2ioSIMIA+iRAAAAAAAAAAAoCAKIA2iIAsgEaKhIgogFKKgIBAgDqKgRAAAAAAAAAAAYxsiC6I5AxAgBCAKIAuiOQMIIAQgDCALojkDACAEQTBqIAQgBEEYahCcASAFIAQpA0g3AxggBSAEKQNANwMQIAUgBCkDODcDCCAFIAQpAzA3AwALIARB0ABqJAALMwAgAUHsmQI2AgAgASAAKQIENwIEIAEgACkCDDcCDCABIAApAhQ3AhQgASAAKQIcNwIcCzsBAX9BJBAjIgFB7JkCNgIAIAEgACkCBDcCBCABIAApAgw3AgwgASAAKQIUNwIUIAEgACkCHDcCHCABCwYAQdyZAgsUACAAQQRqQQAgASgCBEG6kQFGGwsVACABQaSZAjYCACABIAApAgQ3AgQLHQEBf0EMECMiAUGkmQI2AgAgASAAKQIENwIEIAELBgBBlJkCCxQAIABBBGpBACABKAIEQZqPAUYbC6EFAgp8A38jAEEgayIBJAACfEQAAAAAAAAAACAAKAIEIhAoAqgBIg4gAigCAEEYbGoiDysDACAOIAMoAgBBGGxqIg4rAwCiRAAAAAAAAAAAoCAPKwMIIA4rAwiioCAPKwMQIA4rAxCioCIERAAAAAAAAPA/Zg0AGkS17z+35KuBQCAERAAAAAAAAPC/ZQ0AGiAEEF1EAAAAAACAZkCiCyEEIAAoAggrAwAgBEQYLURU+yEJQKNjBEAgACgCDCABQgA3AxggAUIANwMQIAFCADcDCCABQQhqEMQBIAAoAhAgECgC2AEgAygCAEEEdGoQPQsgACgCFCABIAAoAgwiDigCBCAOKAIAa0EYbUEBazYCCCABQQhqED0CQCADKwMIIgS9Qv///////////wCDQv/////////3/wBYBEAgAysDECIIIAIrAxgiCaIgAysDGCIKIAIrAxAiC6KhIgUgBCALoiAIIAIrAwgiDKKhIgYgBqIgBSAFoiAKIAyiIAQgCaKhIgUgBaKgoJ8iDaMiB0QAAAAAAAAAACAHvUL///////////8Ag0KAgICAgICA+P8AVCICGyEHIAUgDaNEAAAAAAAAAAAgAhshBSAGIA2jRAAAAAAAAAAAIAIbIQYCfEQAAAAAAAAAACAJIAqiIAggC6IgBCAMokQAAAAAAAAAAKCgoCIERAAAAAAAAPA/Zg0AGkQYLURU+yEJQCAERAAAAAAAAPC/ZQ0AGiAEEF0LIQQgACgCDCgCBCIAQQhrIgIgBiAEoiACKwMAoDkDACAAQRBrIgIgBSAEoiACKwMAoDkDACAAQRhrIgAgByAEoiAAKwMAoDkDAAwBCyADIAIpAxg3AxggAyACKQMQNwMQIAMgAikDCDcDCAsgAUEgaiQACykAIAFB3JgCNgIAIAEgACkCBDcCBCABIAApAgw3AgwgASAAKAIUNgIUCzEBAX9BGBAjIgFB3JgCNgIAIAEgACkCBDcCBCABIAApAgw3AgwgASAAKAIUNgIUIAELBgBBzJgCCxQAIABBBGpBACABKAIEQZ+NAUYbCxUAIAFBlJgCNgIAIAEgACkCBDcCBAsdAQF/QQwQIyIBQZSYAjYCACABIAApAgQ3AgQgAQsVAQF/QcAAECMiAEEAQcAA/AsAIAALZAEBf0EwECMiAEKAgICAgICAeDcDKCAAQoCAgICAgIB4NwMgIABCgICAgICAgHg3AxggAEKAgICAgICA+P8ANwMQIABCgICAgICAgPj/ADcDCCAAQoCAgICAgID4/wA3AwAgAAtGAQF/QSAQIyIAQoCAgICAgIB4NwMYIABCgICAgICAgHg3AxAgAEKAgICAgICA+P8ANwMIIABCgICAgICAgPj/ADcDACAACyYBAX9BIBAjIgBCADcDGCAAQgA3AxAgAEIANwMIIABCADcDACAACxEAIABBACABKAIEQeCFAUYbCxIAIAAoAgwiAARAIAAQOhAiCwsGAEHclwILHwEBf0EYECMiAEIANwMQIABCADcDCCAAQgA3AwAgAAsUACAAQQhqQQAgASgCBEHJhAFGGwumAgELfCACKwMQIgggASsDECIEIAErAwAiBSAFoiABKwMIIgYgBqKgIAQgBKKgnyIHoyIEIAggBKIgAisDCCIMIAYgB6MiBqIgAisDACIJIAUgB6MiBaJEAAAAAAAAAACgoKAiB6KhIgggAysDECIKIAQgBSADKwMAIguiRAAAAAAAAAAAoCAGIAMrAwgiDaKgIAQgCqKgIgSioSIKoSIOIA6iIAkgBSAHoqEiCSALIAUgBKKhIgWhIgsgC6IgDCAGIAeioSIHIA0gBiAEoqEiBKEiBiAGoqCgnyAIIAiiIAkgCaIgByAHoqCgnyAKIAqiIAUgBaIgBCAEoqCgn6BEAAAAAAAA4D+ioEQAAAAAAAAIQKIgACsDCEQAAAAAAAAQQKKjn/wCCxUAIAFBrJcCNgIAIAEgACkDCDcDCAsdAQF/QRAQIyIBQayXAjYCACABIAApAwg3AwggAQsGAEGclwILFAAgAEEIakEAIAEoAgRBqYMBRhsLLQEBfCABKwMAIgQgBKIgASsDCCIEIASioCABKwMQIgQgBKKgnyAAKwMIo/wCCxUAIAFB7JYCNgIAIAEgACkDCDcDCAsdAQF/QRAQIyIBQeyWAjYCACABIAApAwg3AwggAQsGAEHclgILFAAgAEEEakEAIAEoAgRBlYIBRhsLFQAgAUGslgI2AgAgASAAKAIENgIECx0BAX9BCBAjIgFBrJYCNgIAIAEgACgCBDYCBCABCw8AIABBhJYCNgIAIAAQIgsNACAAQYSWAjYCACAAC7MJAwx/BnwBfiMAQTBrIggkACAIQRhqIgMgACABQQIQ6AECQCADEMABRQ0AIAhBEGogAEEAECsQKiAIKAIQIQkgCEEIaiABQQAQKxAqIAgoAgghCkEAIQAjAEFAaiIEJAAgBEEANgIwIARCADcCKCAEQQA2AiAgBEIANwIYIAogBEEoaiAEQRhqQQAQzwIgBCgCKCEBIAQoAiwiAwRAIAEgA0EwbGohDSABIQADQCAAIAIgACsDKKAiECAAKwMQIAKhIhEgECARZCIOGzkDKCAAIAIgACsDIKAiEiAAKwMIIAKhIhMgEiATZCIFGzkDICAAIAIgACsDGKAiFCAAKwMAIAKhIg8gDyAUYyIDGzkDGCAAIBEgECAOGzkDECAAIBMgEiAFGzkDCCAAIA8gFCADGzkDACAAQTBqIgAgDUcNAAsgBCgCLCEACyAEQoCAgICAgID4/wA3AxAgBCAKNgIMIAQgCTYCCCAEIAA2AjwgBCABNgI4IwBBIGsiByQAIAkoAowCIgMEQCAJKQLoASEVIAkoAogCIQEgByAEQQhqNgIcIAcgAzYCGCAHIAE2AhQgByAVNwIMIAcgBEE4ajYCCEEAIQEjAEEgayIGJAAgBiAHKAIINgIIIAYgBygCDDYCDCAGIAcoAhA2AhAgBiAHKAIUNgIUIAYgBygCGDYCGCAGIAcoAhw2AhwgAARAA0AjAEGAAmsiCiQAAkAgBigCCCgCACABQTBsaiIDKwMAIhBEAAAAAAAA8H9hDQAgAysDKCERIAMrAyAhEiADKwMYIRMgAysDECEUIAMrAwghDyAGKAIcQQhqIQ5BASEFQX8hCwNAIAYoAhQgBUEBa0ECbUEDdGoiAygCBCEMQQAhDQJ/AkAgBigCDCIFIAMoAgAiCUEwbGoiAysDACATZUUNACADKwMIIBJlRQ0AIAMrAxAgEWVFDQAgAysDGCAQZkUNACADKwMgIA9mRQ0AIAMrAyggFGZFDQAgCUEBcUUEQCAGKAIcIAEgCUEBdSAOEIIEIAYoAgwhBQsgCUGBgICAeHFBAUYMAQtBAAshAwJAIAUgDEEwbGoiBSsDACATZUUNACAFKwMIIBJlRQ0AIAUrAxAgEWVFDQAgBSsDGCAQZkUNACAFKwMgIA9mRQ0AIAUrAyggFGZFDQAgDEEBcUUEQCAGKAIcIAEgDEEBdSAOEIIECyAMQYGAgIB4cUEBRiENCyADIA1yRQRAIAtBAEgNAiAKIAtBAnRqKAIAIQUgC0EBayELDAELIAkgDCADGyEFIANFIA1Fcg0AIAogC0EBaiILQQJ0aiAMNgIADAALAAsgCkGAAmokACABQQFqIgEgAEcNAAsLIAZBIGokAAsgB0EgaiQAIAQrAxAhDyAEKAIYIgAEQCAAECILIAQoAigiAARAIAAQIgsgBEFAayQAIAIgAqIiAiAPIAIgD2MbnyEPAkAgCCgCDCIBRQ0AIAEgASgCBCIAQQFrNgIEIAANACABIAEoAgAoAggRAAAgARAkCyAIKAIUIgFFDQAgASABKAIEIgBBAWs2AgQgAA0AIAEgASgCACgCCBEAACABECQLIAhBGGoQKBogCEEwaiQAIA8L/wICAn8BfiMAQUBqIgIkACACQTRqIAFBEGoQfyACQSxqIAEgAigCNBArECoCQCACKAIsKAJEIgEEQCAAIAEQRgwBC0GoAhAjIgFBoJACNgIAIAFCADcCBCABQRBqEDshAyACIAE2AiggAiADNgIkIAIgAigCLCkCSDcCHCADIAJBHGogAigCNBD+AyACQQxqIAJBJGoQWSACIAIpAgwiBDcCFCACQgA3AgwgAiAENwMAIAAgAhBDAkAgAigCECIARQ0AIAAgACgCBCIBQQFrNgIEIAENACAAIAAoAgAoAggRAAAgABAkCyACKAIoIgBFDQAgACAAKAIEIgFBAWs2AgQgAQ0AIAAgACgCACgCCBEAACAAECQLAkAgAigCMCIARQ0AIAAgACgCBCIBQQFrNgIEIAENACAAIAAoAgAoAggRAAAgABAkCwJAIAIoAjgiAEUNACAAIAAoAgQiAUEBazYCBCABDQAgACAAKAIAKAIIEQAAIAAQJAsgAkFAayQAC/YFAQ9/IwBBEGsiBiQAIAZBCGogAUEAECsQKiAGKAIIIQMjAEGwAWsiASQAIAMoAlwhAiABQQA2AqgBIAFCADcCoAEgAUGgAWogAkEBdiICEDkgASACNgKkASADKAJcIgsEQCADKAJ4IQwgAygCWCENIAMoAqgBIQcgAygCaCEIIAEoAqABIQ5BACECA0ACQCAHIAggCCACQQJ0IglqKAIAIgpBAnRqKAIAQQNtQRhsaisDEEQAAAAAAAAAAGZFDQAgByAKQQNtQRhsaisDEEQAAAAAAAAAAGNFDQAgCSANaiIFQXhBBCACQQNvQQJGG2ooAgAhDyAFKAIAIRAgDiAEQQR0aiIFIAkgDGooAgA2AgwgBSAKNgIIIAUgDzYCBCAFIBA2AgAgBEEBaiEECyACQQFqIgIgC0cNAAsLIAFCADcDmAEgAUIANwOQASABQgA3AzAgAUIANwM4IAFBoAFqIAQgAUEwahCVAiABQfgAaiICIAEoAqABIgQgBCABKAKkAUEEdGpBABD0AiABQgA3A0ggAUKAgICAgICA+D83A0AgAUIANwNQIAFCADcDYCABQoCAgICAgID4PzcDWCABQgA3A2ggASABKQKgATcCcCABIAFBQGtBMPwKAAAgAUGEAWogAiABQfAAaiIEIANByABqIAEQxwQgASACNgJwIAQQKSAAQQA2AgggAEIANwIAIAEoAoQBIgMgASgCiAEiBEcEQANAIAFBADYCgAEgAUIANwJ4IAMoAgAiAiADKAIEIgVHBEADQCABQfgAaiACEEwgAkEYaiICIAVHDQALCyAAIAFB+ABqEHYgASgCeCICBEAgASACNgJ8IAEoAoABGiACECILIANBDGoiAyAERw0ACwsgASABQYQBajYCeCABQfgAahApIAEoAqABIgAEQCAAECILIAFBsAFqJAACQCAGKAIMIgBFDQAgACAAKAIEIgFBAWs2AgQgAQ0AIAAgACgCACgCCBEAACAAECQLIAZBEGokAAuODgMPfwl8An4jAEEQayILJAAgC0EIaiABQQAQKxAqIAsoAgghBiMAQcACayIBJAAgASAGKQMINwM4IAEgBikDADcDMCABIAYpAyA3AxAgASAGKQMYNwMIIAFBADYCKCABQgA3AiAgAUEgakGAARCfASABIAEoAiQiA0EBajYCJCABKQMwIRsgASkDOCEcIAEoAiAgA0EwbGoiAyACOQMQIAMgHDcDCCADIBs3AwAgAyABKQMQNwMgIAMgASkDCDcDGCADIAI5AyggAUIANwMQIAFCADcDCCABQYCAgPwDNgIYAkACQCAGKAKMAkUNACABKAIkIg9FDQAgASgCICEQIAYoAogCIREgBigC6AEhDgNAAkAgECAKQTBsaiIDKwMAIhVEAAAAAAAA8H9hDQAgAysDKCEWIAMrAyAhFyADKwMYIRggAysDECEZIAMrAwghGkF/IQRBASEDA0AgESADQQFrQQJtQQN0aiIDKAIEIQhBACEFAn9BACAOIAMoAgAiB0EwbGoiAysDACAYZUUNABpBACADKwMIIBdlRQ0AGkEAIAMrAxAgFmVFDQAaQQAgAysDGCAVZkUNABpBACADKwMgIBpmRQ0AGkEAIAMrAyggGWZFDQAaAkAgB0EBcQ0AIAEgB0EBdSIDNgK8AiABQQI2ArgCIAFCgICAgBA3ArACIAYoAlggA0EMbGohCSAGKAJIIQxEAAAAAAAA8P8hEkQAAAAAAADwfyETQQAhAwNAIAwgCSABQbACaiINIANqKAIAQQJ0aigCAEEYbGorAxAiFCASIBIgFGMbIRIgFCATIBMgFGQbIRMgA0EEaiIDQQxHDQALIAIgE2ZFIAIgEmNFcg0AIA0gAUEIaiABQbwCaiIDIAMQzwELIAdBgYCAgHhxQQFGCyEJAkAgDiAIQTBsaiIDKwMAIBhlRQ0AIAMrAwggF2VFDQAgAysDECAWZUUNACADKwMYIBVmRQ0AIAMrAyAgGmZFDQAgAysDKCAZZkUNAAJAIAhBAXENACABIAhBAXUiAzYCvAIgAUECNgK4AiABQoCAgIAQNwKwAiAGKAJYIANBDGxqIQUgBigCSCEMRAAAAAAAAPD/IRJEAAAAAAAA8H8hE0EAIQMDQCAMIAUgAUGwAmoiDSADaigCAEECdGooAgBBGGxqKwMQIhQgEiASIBRjGyESIBQgEyATIBRkGyETIANBBGoiA0EMRw0ACyACIBNmRSACIBJjRXINACANIAFBCGogAUG8AmoiAyADEM8BCyAIQYGAgIB4cUEBRiEFCyAFIAlyRQRAIARBAEgNAiABQTBqIARBAnRqKAIAIQMgBEEBayEEDAELIAcgCCAJGyEDIAlFIAVFcg0AIAFBMGogBEEBaiIEQQJ0aiAINgIADAALAAsgCkEBaiIKIA9HDQALIAEoAhQgAEEANgIIIABCADcCAEUNAQNAIAEoAhAoAgghCEEAIQMgAUEANgK4AiABQgA3ArACIAFBAjYCOCABQoCAgIAQNwIwIAYoAlggCEEMbGohBSAGKAJIIQcCQANAIAIgByAFIAFBMGogA2ooAgAiBEECdGooAgBBGGxqKwMQYwRAIAcgBUEEQQggBEEBRhtBACAEG0Hw+ABqKAIAIgRBAnRqKAIAQRhsaisDECACZQ0CCyADQQRqIgNBDEcNAAtBACEECyABIAg2ArwCA0AgAUEIaiIDIQcgAyABQbwCahCiAiEFIwBBEGsiAyQAIAUoAgAaIANBBGogByAFEMIEIAMoAgQhBSADQQA2AgQgBQRAIAUQIgsgA0EQaiQAIAIgBigCSCIHIAYoAlgiCkF4QQQgASgCvAJBA2wiCSAEaiIDQQNvIgVBAkYbaiADQQJ0aigCAEEYbGorAxBmBEBBBEEIIARBAUYbQQAgBBtB8PgAaigCACAJaiIDQQNvIQULIAcgCiADQQJ0IglqIgRBeEEEIAVBAkYbaigCAEEYbGoiAysDACETIAcgBCgCAEEYbGoiBCsDACEUIAEgAysDCCACIAQrAxAiEqEgAysDECASoaMiEqIgBCsDCEQAAAAAAADwPyASoSIVoqA5AzggASATIBKiIBQgFaKgOQMwIAFBsAJqIgUgAUEwahBMIAEgBigCaCAJaigCACIEQQNtIgM2ArwCQQRBCCAEIANBA2xrIgRBAUYbQQAgBBtB8PgAaigCACEEIAMgCEcNAAsgACAFEHYgASgCsAIiAwRAIAEgAzYCtAIgASgCuAIaIAMQIgsgASgCFA0ACwwBCyAAQQA2AgggAEIANwIACyABQQhqEJUBIAEoAiAiAARAIAAQIgsgAUHAAmokAAJAIAsoAgwiAEUNACAAIAAoAgQiAUEBazYCBCABDQAgACAAKAIAKAIIEQAAIAAQJAsgC0EQaiQAC5UCAQF/IwBBIGsiAyQAIANBGGogAUEQahB/IANBEGogASADKAIYECsQKgJAIAMoAhAoAkQiAQRAIAAgARBGDAELIANBCGogAiADKAIYECsQKgJAIAMoAggiASgCRCICBEAgACACEEYMAQsgACADKAIQIAFBASADKAIYEJQECyADKAIMIgBFDQAgACAAKAIEIgFBAWs2AgQgAQ0AIAAgACgCACgCCBEAACAAECQLAkAgAygCFCIARQ0AIAAgACgCBCIBQQFrNgIEIAENACAAIAAoAgAoAggRAAAgABAkCwJAIAMoAhwiAEUNACAAIAAoAgQiAUEBazYCBCABDQAgACAAKAIAKAIIEQAAIAAQJAsgA0EgaiQAC5UCAQF/IwBBIGsiAyQAIANBGGogAUEQahB/IANBEGogASADKAIYECsQKgJAIAMoAhAoAkQiAQRAIAAgARBGDAELIANBCGogAiADKAIYECsQKgJAIAMoAggiASgCRCICBEAgACACEEYMAQsgACADKAIQIAFBACADKAIYEJQECyADKAIMIgBFDQAgACAAKAIEIgFBAWs2AgQgAQ0AIAAgACgCACgCCBEAACAAECQLAkAgAygCFCIARQ0AIAAgACgCBCIBQQFrNgIEIAENACAAIAAoAgAoAggRAAAgABAkCwJAIAMoAhwiAEUNACAAIAAoAgQiAUEBazYCBCABDQAgACAAKAIAKAIIEQAAIAAQJAsgA0EgaiQAC3EBA38jAEGQAWsiBCQAIARByABqIgUgARDkAiAEQRhqIgYgBUEw/AoAACAEIAIpAxA3AxAgBCACKQMINwMIIAQgAikDADcDACAEQfgAaiICIAYgBCADEJYEIAAgASACQQIQ6AEgAhAoGiAEQZABaiQAC8oDAgN/AX4jAEHQAGsiAyQAIANBxABqIAFBEGoQfyADQTxqIAEgAygC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An8BfCMAQRBrIgEkACABQQhqIABBABArECogASgCCEEAEIQEAkAgASgCDCIARQ0AIAAgACgCBCICQQFrNgIEIAINACAAIAAoAgAoAggRAAAgABAkCyABQRBqJAALXgICfwF8IwBBEGsiASQAIAFBCGogAEEAECsQKiABKAIIQQEQhAQCQCABKAIMIgBFDQAgACAAKAIEIgJBAWs2AgQgAg0AIAAgACgCACgCCBEAACAAECQLIAFBEGokAAsZACAAEJACIAAQoARrIAAQvwFqQX5tQQFqC54CAgJ/AXwjAEEgayIDJAAgA0EYaiABQQAQKxAqAkAgAygCGCIEKAJEIgEEQCAAIAEQRgwBC0GoAhAjIgFBoJACNgIAIAFCADcCBCABQRBqIAQQNyEEIAErA0giBSACIAJEAAAAAAAAAABhGyICIAVkBEAgASACOQNIIAQQWgsgBEEAEPgCIARBABBUIAEgBTkDSCADIAE2AhQgAyAENgIQIAEgASgCBEEBajYCBCADIAMpAhA3AwggACADQQhqEEgaIAEgASgCBCIAQQFrNgIEIAANACABIAEoAgAoAggRAAAgARAkCwJAIAMoAhwiAEUNACAAIAAoAgQiAUEBazYCBCABDQAgACAAKAIAKAIIEQAAIAAQJAsgA0EgaiQAC50CAgJ/AXwjAEEgayIDJAAgA0EYaiABQQAQKxAqAkAgAygCGCIEKAJEIgEEQCAAIAEQRgwBC0GoAhAjIgFBoJACNgIAIAFCADcCBCABQRBqIAQQNyEEAkAgASsDSCACYwRAIAEgAjkDSCAEEFogBEEAEPgCIARBABBUDAELIAEgAiABKwNAIgUgAiAFZBs5A0gLIAMgATYCFCADIAQ2AhAgASABKAIEQQFqNgIEIAMgAykCEDcDCCAAIANBCGoQSBogASABKAIEIgBBAWs2AgQgAA0AIAEgASgCACgCCBEAACABECQLAkAgAygCHCIARQ0AIAAgACgCBCIBQQFrNgIEIAENACAAIAAoAgAoAggRAAAgABAkCyADQSBqJAALXAICfwF8IwBBEGsiASQAIAFBCGogAEEAECsQKiABKAIIKwM4AkAgASgCDCIARQ0AIAAgACgCBCICQQFrNgIEIAINACAAIAAoAgAoAggRAAAgABAkCyABQRBqJAALVwEBfyMAQRBrIgMkACAAIAEQ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IgcgBUEw/AoAACACIAQpAxg3AxAgAiAEKQMQNwMIIAIgBCkDCDcDACACQZABaiIFIAcgAiADEJYEIAYgASAFEJgEIAUQKBoLAkAgAigCrAEiAUUNACABIAEoAgQiBUEBazYCBCAFDQAgASABKAIAKAIIEQAAIAEQJAsgAkGwAWokACAEQSBqIAYQLiIBQRhqIARB6ABqIgYQLhogAEEANgIIIABCADcCACAAIAEgAUEwaiICQQIQlgIDQCACQRhrECgiAiABRw0ACyAGECgaIARB0ABqECgaIARBgAFqJAALDwAgAEH4lAI2AgAgABAiCw0AIABB+JQCNgIAIAALKAEBfyAAKAIAIgAoAggiAUUEQEQAAAAAAADwPw8LIAAoAgy3IAG3owsXACAAKAIAIgAEfyAALQAQBUEAC0EBcQsMACAAKAIAQQE6ABALdgECfyMAQeAAayIDJAAgA0EwaiIEIAEgAhCYBCADIAQQLiIBQRhqIANByABqIgQQLhogAEEANgIIIABCADcCACAAIAEgAUEwaiICQQIQlgIDQCACQRhrECgiAiABRw0ACyAEECgaIANBMGoQKBogA0HgAGokAAu1AQEDfyAAIwBBEGsiACQAIAAgAUEQahB/IABBCGogASAAKAIAECsQKiAAKAIIKAJEAkAgACgCDCIBRQ0AIAEgASgCBCICQQFrNgIEIAINACABIAEoAgAoAggRAAAgARAkCwJAIAAoAgQiAUUNACABIAEoAgQiAkEBazYCBCACDQAgASABKAIAKAIIEQAAIAEQJAsgAEEQaiQAIgBBDksEf0GWDgUgAEECdEHcjwJqKAIACxDRBAsPACAAQdCUAjYCACAAECILDQAgAEHQlAI2AgAgAAslAQF/IwBBEGsiASQAIAEgAEEMajYCDCABQQxqEGUgAUEQaiQACw8AIABBqJQCNgIAIAAQIgsNACAAQaiUAjYCACAACyoBAX8jAEEQayIBJAAgAEEcahAvGiAAKAIYIgAEQCAAECQLIAFBEGokAAsPACAAQYCUAjYCACAAECILDQAgAEGAlAI2AgAgAAsPACAAQdiTAjYCACAAECILDQAgAEHYkwI2AgAgAAuwAgEFfyMAQRBrIgEkACAAQRBqIgNBDGoCQCADKAIQIgBFDQAgACgCBA0AIAMoAgwhACADKAIUGiABQQA2Aggg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CBEAACAKECQLIAQoAvQBIgMgBCgC8AFHDQALCyAAIAEoAoABNgIAIAAgASgChAEiADYCBCAARQ0AIAAgACgCBEEBajYCBAsgBCAEQfABajYCACAEEGULIARBoAJqJAAPCxAmAAsQJgALwwQCBH8MfCMAQfABayIDJABBmAEQIyIGQbCTAjYCACAGQgA3AgQjAEEQayIFJAAgBkEQaiIEQgA3AgQgBEG0kgI2AgAgBUEANgIIIAVCADcCACAEQQxqIAUQ0wQgBSAFNgIMIAVBDGoQZSAEQgA3AyggBEKAgICAgICA+D83AyAgBEIANwMwIARCADcDOCAEQgA3A0ggBEKAgICAgICA+D83A0AgBEIANwNQIARCADcDWCAEQgA3A2ggBEKAgICAgICA+D83A2AgBEIANwNwIARCADcDeCAEQgA3A4ABIAVBEGokACADQegBaiIFIAY2AgQgBSAENgIAIAUgBkEUaiAEEI8BIAMoAugBQQxqIgQgAUEMaiIFRwRAIAQgBRBeIARBCGogBUEIahBeCyABKwMgIQcgASsDKCEIIAErAzAhCSABKwM4IQogASsDQCELIAErA0ghDCABKwNQIQ0gASsDWCEOIAErA2AhDyABKwNoIRAgASsDcCERIAErA3ghEiADQoCAgICAgID4PzcDgAEgAyASOQN4IAMgETkDcCADIBA5A2ggA0IANwNgIAMgDzkDWCADIA45A1AgAyANOQNIIANCADcDQCADIAw5AzggAyALOQMwIAMgCjkDKCADQgA3AyAgAyAJOQMYIAMgCDkDECADIAc5AwggA0GIAWoiBCACIANBCGoQ8AEgAygC6AEiAkEgaiAEQeAA/AoAACACIAEtABw6ABwgACACNgIAIAAgAygC7AE2AgQgA0HwAWokAAtnAQJ/IwBBgAFrIgQkACAEIAIQ3wEjAEEQayICJAAgASgCACIFQgA3AgAgBUIONwIIIAJBCGogBCADIAEoAgAQkwUgAiACKQIINwMAIAAgAhDmAiACQRBqJAAgBBCqASAEQYABaiQAC44BAQJ/IwBBgAFrIgQkACAEIAIQ3wEjAEEQayICJAAgASgCACIDQgA3AgAgA0IHNwIIIAEoAgAhA0GoAhAjIgFBoJACNgIAIAFCADcCBCABQRBqIAQgAxCTAyEDIAIgATYCDCACIAM2AgggAiAC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AEUNACAAIAAoAgQiAUEBazYCBCABDQAgACAAKAIAKAIIEQAAIAAQJAsgAigCQCIARQ0AIAAgACgCBCIBQQFrNgIEIAENACAAIAAoAgAoAggRAAAgABAkCwJAIAIoAkgiAEUNACAAIAAoAgQiAUEBazYCBCABDQAgACAAKAIAKAIIEQAAIAAQJAsgAkHQAGokAAJAIAcgAygCGCIARgR/QRAFIABFDQFBFAshASAAIAAoAgAgAWooAgARAAALIANBIGokAAsGAEGIkgILFAAgAEEEakEAIAEoAgRB5PAARhsLCwAgAUHYkQI2AgALEQBBCBAjIgBB2JECNgIAIAALBgBByJECCxQAIABBBGpBACABKAIEQfvrAEYbCwsAIAFBkJECNgIACxEAQQgQIyIAQZCRAjYCACAAC5sDAgl/AXwjAEGQAWsiAyQAIANBhAFqIAIQlgUgA0EgakEAQeAA/AsAIANCgoCAgDA3AhggA0KAgICAEDcCECADQThqIQggAygChAEhCQNAIANBEGogBmooAgAhBCADQoCAgIAQNwIEIAkgBEEFdGohCiADQQI2AgwgA0EgakEwQcgAIARBAkYbaiELQQAhAgNAIAogA0EEaiACaigCACIHQQN0aisDACEMIANBIGohBQJAAkACQCAEDgICAAELIAghBQwBCyALIQULIAVBCEEQIAdBAUYbQQAgBxtqIAw5AwAgAkEEaiICQQxHDQALIAZBBGoiBkEQRw0ACyMAQSBrIgIkACACQRBqIAEQigEgAkEYaiACKAIQIgEgA0EgaiABKAIAKAIEEQMAIAIgAikCGDcDCCAAIAJBCGoQQwJAIAIoAhQiAEUNACAAIAAoAgQiAUEBazYCBCABDQAgACAAKAIAKAIIEQAAIAAQJAsgAkEgaiQAIAMoAoQBIgAEQCADIAA2AogBIAMoAowBGiAAECILIANBkAFqJAALCwAgACABQQIQiAELCwAgACABQQEQiAELCwAgACABQQAQiAELDQAgACABIAJBAhDoAQsNACAAIAEgAkEBEOgBCw0AIAAgASACQQAQ6AELBgBBgJECCxQAIABBBGpBACABKAIEQefoAEYbC/0BAQN/IwBBgAFrIgMkACADIAEQ3wEjAEEgayIBJABBJBAjIgJCADcCDCACQYSWAjYCACACQgA3AgQgAkIANwIUIAJCADcCHCAAIAI2AgQgACACQQxqNgIAQagCECMiAkGgkAI2AgAgAkIANwIEIAJBEGogA0EAEJMDIQQgASACNgIQIAEgBDYCDCABQRRqIAFBDGoQ3AQgACABKAIUNgIIIAAgASgCGDYCDCABQgA3AhQCQCABKAIQIgJFDQAgAiACKAIEIgRBAWs2AgQgBA0AIAIgAigCACgCCBEAACACECQLIABCADcCECABQSBqJAAgAxCqASADQYABaiQACxUAIAFByJACNgIAIAEgACgCBDYCBAsdAQF/QQgQIyIBQciQAjYCACABIAAoAgQ2AgQgAQsPACAAQaCQAjYCACAAECILDQAgAEGgkAI2AgAgAAvwEAITfwJ+IwBB0AFrIgMkACADQcgBaiICIAFBABArECoCQCADKALIASgCRCIEBEAgA0GwAWoiASAEEEYgAEEANgIIIABCADcCACAAIAEgAkEBEJYCIAEQKBoMAQsgA0GkAWogARCQAiICEJYBIQ0gAgRAIAKtIRYDQCANKAIAIBWnQQN0aiAVNwMAIBVCAXwiFSAWUg0ACwsgAygCyAEiBCgCXARAQQAhAgNAIAQoAlggAkECdGoiBSgCACIGIAVBeEEEIAJBA29BAkYbaigCACIFSARAIA0gBiAFEF8gAygCyAEhBAsgAkEBaiICIAQoAlxJDQALCyADQQA2AqABIANCADcCmAECQCANIANBmAFqEIwFIhNBAUYEQCAAQQEQkQMoAgAgARCjBAwBCwJAIAMoApwBIgQgAygCmAEiAkYNACAEIAJrIgQQJyEOIARFDQAgDiACIAT8CgAACyABEJACIQ8gAEEANgIIIABCADcCACATQQBKBEADQEGoAhAjIghBoJACNgIAIAhCADcCBCAIQRBqEDshBiAIIAMoAsgBIgIrAzA5A0AgCCACKwM4OQNIQQAhAiADQQA2ApABIANCADcCiAEgA0GIAWogDxAlIAMgDzYCjAEgAygCiAEiBSEEIA8EQANAIBAgDiACQQJ0aigCAEYEQCAEIAI2AgAgBEEEaiEECyACQQFqIgIgD0cNAAsLIANCADcDgAEgA0IANwN4IANCADcDcCADQgA3AyggA0IANwMwIANCADcDOCAIQdgAaiAEIAVrQQJ1IgQgA0EoahBnIANCADcDaCADQgA3A2AgA0IANwNYIANCADcDECAD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JAAgB0GIAWohCwJAIAcoApgBRQRAIAcrAxAhAgwBCyAHIAsgDSAHQThqQQBBABD7ASICOQMQCwJAAkAgAplEEeotgZmXcT1lBEAgDSgCACEDAkAgBygCSCIBIAcoAkwiBkkEQCABIAMpAwg3AwggASADKQMANwMAIAFBEGohAwwBCyABIAdBxABqIggoAgAiEWtBBHUiD0EBaiIBQYCAgIABTw0MIAlBDGpB/////wAgBiARayIGQQN1IhEgASABIBFJGyAGQfD///8HTxsgDyAIEDIiASgCCCIGIAMpAwg3AwggBiADKQMANwMAIAEgASgCCEEQajYCCCABKAIEIAcoAkggBygCRCIGayIDayEIIAMEQCAIIAYgA/wKAAALIAcoAkQhBiAHIAg2AkQgASAGNgIEIAcgASgCCCIDNgJIIAEgBjYCCCAHKAJMIQggByABKAIMNgJMIAEgBjYCACABIAg2AgwgARA2CyAHIAM2AkgMAQsCQAJAAkAgBygCaEECaw4DAAIBAgsgByANQQBBABC3AgwCCyAHIA1BAEEARBgtRFT7IQlAELUCDAELIAcgDUEAQQAQtgILQQEhASANKAIEIA0oAgBrQQR1IhFBAWsiA0EBSwRAQQAhBgNAIAcgCiANIAEgBhC0AiABIgZBAWoiASADRw0ACwsgBygCOCEIIAMEQCADIQEDQCAIIAFBAWsiBkEEdGoiDysDACECIAggAUEEdGoiASAPKwMImjkDCCABIAKaOQMAIAYiAQ0ACwsgCCAIIANBBHRqIgEpAwg3AwggCCABKQMANwMAAkAgBygCmAFFBEAgBysDECECDAELIAcgCyANIAdBOGogAyADEPsBIgI5AxALAkAgAplEEeotgZmXcT1lBEAgDSgCACADQQR0aiEGAkAgBygCSCIBIAcoAkwiCEkEQCABIAYpAwg3AwggASAGKQMANwMAIAFBEGohBgwBCyABIAdBxABqIgsoAgAiD2tBBHUiFEEBaiIBQYCAgIABTw0MIAlBDGpB/////wAgCCAPayIIQQN1Ig8gASABIA9JGyAIQfD///8HTxsgFCALEDIiASgCCCIIIAYpAwg3AwggCCAGKQMANwMAIAEgASgCCEEQajYCCCABKAIEIAcoAkggBygCRCIIayIGayELIAYEQCALIAggBvwKAAALIAcoAkQhCCAH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A0AgASgCACIDIAEoAgQiB0cEQANAIAMrAwAhCyACIAMrAwg5A0ggAiALOQNAIAJBNGogAkFAaxBMIANBEGoiAyAHRw0ACwsgAUEMaiIBIARHDQALCyACIAIoAjQiATYCICACIAIoAjggAWtBBHU2AiQCQCAJKAIQIgEEQCABIAJBIGogASgCACgCGBEBACACKAIoIgQgAigCLCIHRwRAIAIoAjQhAQNAIAQoAgAiAyAEKAIEIghHBEADQCABKwMAIQsgAyABKwMIOQMIIAMgCzkDACABQRBqIQEgA0EQaiIDIAhHDQALCyAEQQxqIgQgB0cNAAsLIAJBADYCFCACQgA3AgwgAkHYAGpBAEHoAPwLACACQgA3A1AgAkECNgJMIAJCADcCRCACQdwAakEAQTD8CwAgAkGQAWpBAEEk/AsAIAJBADYCyAEgAkIANwPAASACQQE6AL0BIAJBAToAtAEgAkKAgICAgICAoD43A9gBIAJCgICAgICAgNDBADcD0AEgAkH8mgI2AkAgAkFAayIBIAJBKGoiBxCbASACQQA2AugBIAJCADcC4AEgAUECQQIgAkEMaiIEIAJB4AFqIgMQ4gEgAiADNgLsASACQewBahApIAEQaRpBGBAjIgNBtJoCNgIAIANCADcCBCADQQxqIgggBBBbIAIgAzYCHCACIAg2AhggAiACKQIYNwMAIAAgAhBqIAIgBDYCQCABECkgAiAHNgJAIAEQKSACKAI0IgAEQCACIAA2AjggAigCPBogABAiCyACQfABaiQADAELEGYACwJAIAkgBigCGCIARgR/QRAFIABFDQFBFAshASAAIAAoAgAgAWooAgARAAALIAZBIGokAAJAIAogBSgCGCIARgR/QRAFIABFDQFBFAshASAAIAAoAgAgAWooAgARAAALIAVBIGokAAsMACABIAAoAgQREAALFQAgAUGMjwI2AgAgASAAKAIENgIECx0BAX9BCBAjIgFBjI8CNgIAIAEgACgCBDYCBCABCwYAQeyOAgsUACAAQQRqQQAgASgCBEGL5QBGGwtRAQF/IwBBIGsiBCQAIAMoAgAhAyABKAIAIAAoAgQhACAEIAIpAxA3AxggBCACKQMINwMQIAQgAikDADcDCCAEQQhqIAMgABEDACAEQSBqJAALFQAgAUG0jgI2AgAgASAAKAIENgIECx0BAX9BCBAjIgFBtI4CNgIAIAEgACgCBDYCBCABCwYAQaSOAgsUACAAQQRqQQAgASgCBEHj4wBGGwuCAgEGfyMAQRBrIgIkACABKAIAIQcgASgCBCEEQQAhASACQQA2AgwgAkIANwIEIAJBBGogBEEDbBDUASACKAIEIQUgBARAA0AgBSABQRhsIgZqIgMgBiAHaiIGKwMAOQMAIAMgBisDCDkDCCADIAYrAxA5AxAgAUEBaiIBIARHDQALCyAFIAQgACgCBCgCABEBACACKAIEIQACQAJAIAQEQEEAIQEDQCAHIAFBGGwiA2oiBSAAIANqIgMrAwA5AwAgBSADKwMIOQMIIAUgAysDEDkDECABQQFqIgEgBEcNAAsMAQsgAEUNAQsgAiAANgIIIAIoAgwaIAAQIgsgAkEQaiQACxUAIAFB7I0CNgIAIAEgACgCBDYCBAsdAQF/QQgQIyIBQeyNAjYCACABIAAoAgQ2AgQgAQsGAEHMjQILFAAgAEEEakEAIAEoAgRB8+EARhsLFQAgAUGUjQI2AgAgASAAKAIENgIECx0BAX9BCBAjIgFBlI0CNgIAIAEgACgCBDYCBCABCwYAQfSMAgsUACAAQQRqQQAgASgCBEHQ4ABGGwsVACABQbyMAjYCACABIAAoAgQ2AgQLHQEBf0EIECMiAUG8jAI2AgAgASAAKAIENgIEIAEL2gEBAX8jAEFAaiIEJAAgACgCACEAIAQgAikDEDcDKCAEIAIpAwg3AyAgBCACKQMANwMYIAQgAykDADcDACAEIAMpAwg3AwggBCADKQMQNwMQIARBNGogASAEQRhqIAQgABEFAEEMECMiAEEANgIIIABCADcCACAEKAI4IgEgBCgCNCICRwRAIAAgASACayIBQQZ1EJUDIAAoAgQhAyABBEAgAyACIAH8CgAACyAAIAEgA2o2AgQLIAQoAjQiAQRAIAQgATYCOCAEKAI8GiABECILIARBQGskACAAC3kBBX8jAEEQayICJAAgAkEEaiIFIAEgACgCABEBACACKAIIIAIsAA8iASABQQBIIgYbIgBBBGoQJyIDIAA2AgAgAigCBCEEIAAEQCADQQRqIAQgBSAGGyAA/AoAAAsgAUEASARAIAIoAgwaIAQQIgsgAkEQaiQAIAML6wEBBn8jAEHgAGsiAyQAIANB1ABqIAIQlgUgA0EgakEAQTD8CwAgA0ECNgIcIANCgICAgBA3AhQgAygCVCEFA0AgA0EUaiAEaigCACECIANCgICAgBA3AgwgBSACQRhsaiEGIANBIGpBEEEgIAJBAUYbQQAgAhtqIQdBACECA0AgB0EIQQAgA0EMaiACaigCACIIG2ogBiAIQQN0aisDADkDACACQQRqIgJBCEcNAAsgBEEEaiIEQQxHDQALIAAgASADQSBqEOABIAMoAlQiAARAIAMgADYCWCADKAJcGiAAECILIANB4ABqJAALNgECfyMAQSBrIgQkACAEQQhqIgUgASACIAMgACgCABEFAEEYECMgBRAuIAUQKBogBEEgaiQACyoBAX8jAEEQayIDJAAgA0EIaiABIAIgACgCABEDACADKAIMIANBEGokAAthAQF/IwBBMGsiBCQAIAAoAgAhACAEIAIpAxA3AxggBCACKQMINwMQIAQgAikDADcDCCAEQSBqIgIgASAEQQhqIAMgABEPACACEJQDIAQgAjYCLCAEQSxqEHogBEEwaiQACzUBAX8jAEEQayIDJAAgAyABIAIgACgCABEDACADEJQDIAMgAzYCDCADQQxqEHogA0EQaiQACzYBAX8jAEFAaiIGJAAgBiABIAIgAyAEIAUgACgCABEqAEHAABAjIAYQQCAGEEEaIAZBQGskAAsLACAAIAFBAhDFAgtfAQF/IwBB0ABrIgMkACAAKAIAIQAgAyACNgIMIANBnKACNgIIIANBEGoiAiABIANBCGogABEDAEHAABAjIAIQQCACEEEaIAMoAgwiAEEJTwRAIAAQAQsgA0HQAGokAAuBAgICfwF8IwBB4ABrIgMkACADQQhqIgQgASACIAAoAgARAwAgA0EwaiAEQSj8CgAAQQIhACADLQBQQQFGBEAjAEEQayIAJABB2J4CLQAAQQFxRQRAQQJBmIQCQQMQBiEBQdieAkEBOgAAQdSeAiABNgIAC0EgECMiASADKQNINwMYIAEgAykDQDcDECABIAMpAzg3AwggASADKQMwNwMAIAAgATYCCCAAQQA2AgRB1J4CKAIAQQBBACAAQQRqIABBCGoQBSEFIAAoAgQhASADIAX8AzYCXCADQZygAjYCWCABBEAgARAECyAAQRBqJAAgAygCXCEACyADQeAAaiQAIAALTAEBfyMAQSBrIgMkACAAKAIAIQAgAyACKQMYNwMYIAMgAikDEDcDECADIAIpAwg3AwggAyACKQMANwMAIAEgAyAAEQEAIANBIGokAAv8AQMBfwF+AXwjAEFAaiIDJAAgA0EIaiABIAIgACgCABEDACADIAMpAxgiBDcDMCADIAMpAxA3AyggAyADKQMINwMgQQIhACAEp0EBcQRAIwBBEGsiACQAQcyeAi0AAEEBcUUEQEECQaiCAkEDEAYhAUHMngJBAToAAEHIngIgATYCAAtBEBAjIgEgAykDKDcDCCABIAMpAyA3AwAgACABNgIIIABBADYCBEHIngIoAgBBAEEAIABBBGogAEEIahAFIQUgACgCBCEBIAMgBfwDNgI8IANBnKACNgI4IAEEQCABEAQLIABBEGokACADKAI8IQALIANBQGskACAACwsAIAAgAUEBEMUCC90BAgJ/AXwjAEEwayIDJAAgA0EMaiIEIAEgAiAAKAIAEQMAQQIhAAJAIAMtACRBAUcNACMAQRBrIgAkAEHAngItAABBAXFFBEBBAkHIgAJBAxAGIQFBwJ4CQQE6AABBvJ4CIAE2AgALIABBGBAjIAQQLjYCCCAAQQA2AgRBvJ4CKAIAQQBBACAAQQRqIABBCGoQBSEFIAAoAgQhASADIAX8AzYCLCADQZygAjYCKCABBEAgARAECyAAQRBqJAAgAygCLCEAIAMtACRBAUcNACAEECgaCyADQTBqJAAgAAsyAQF/IwBBIGsiAyQAIAAoAgAhACABIANBCGogAhAuIgEgABEBACABECgaIANBIGokAAvbAQIBfwF8IwBB0ABrIgMkACADIAEgAiAAKAIAEQMAQQIhAAJAIAMtAEBBAUcNACMAQRBrIgAkAEG0ngItAABBAXFFBEBBAkHY/gFBAxAGIQFBtJ4CQQE6AABBsJ4CIAE2AgALIABBwAAQIyADEEA2AgggAEEANgIEQbCeAigCAEEAQQAgAEEEaiAAQQhqEAUhBCAAKAIEIQEgAyAE/AM2AkwgA0GcoAI2AkggAQRAIAEQBAsgAEEQaiQAIAMoAkwhACADLQBAQQFHDQAgAxBBGgsgA0HQAGokACAACy8BAX8jAEFAaiIDJAAgACgCACEAIAEgAyACEEAiASAAEQEAIAEQQRogA0FAayQACzABAX8jAEEQayIEJAAgACgCACEAIAQgAzkDCCABIAIgBEEIaiAAEQYAIARBEGokAAvdAQMBfwF+AXwjAEEwayIDJAAgA0EIaiABIAIgACgCABEDACADIAMpAxAiBDcDICADIAMpAwg3AxhBAiEAIASnQQFxBEAjAEEQayIAJABBqJ4CLQAAQQFxRQRAQQJB6PwBQQMQBiEBQaieAkEBOgAAQaSeAiABNgIACyAAIAMrAxg5AwggAEEANgIEQaSeAigCAEEAQQAgAEEEaiAAQQhqEAUhBSAAKAIEIQEgAyAF/AM2AiwgA0GcoAI2AiggAQRAIAEQBAsgAEEQaiQAIAMoAiwhAAsgA0EwaiQAIAALMAEBfyMAQRBrIgQkACAAKAIAIQAgBCADOQMIIAEgAiAEQQhqIAARAwAgBEEQaiQACy4BAX8jAEEQayIDJAAgACgCACEAIAMgAjkDCCABIANBCGogABEBACADQRBqJAAL8wECAn8BfCMAQSBrIgMkACADQQhqIgQgASACIAAoAgARAwBBAiEAAkAgAy0AFEEBRw0AIwBBEGsiACQAQZyeAi0AAEEBcUUEQEECQfj6AUEDEAYhAUGcngJBAToAAEGYngIgATYCAAsgAEEMECMgBBA8NgIIIABBADYCBEGYngIoAgBBAEEAIABBBGogAEEIahAFIQUgACgCBCEBIAMgBfwDNgIcIANBnKACNgIYIAEEQCABEAQLIABBEGokACADKAIcIQAgAy0AFEEBRw0AIAMoAggiAUUNACADIAE2AgwgAygCEBogARAiCyADQSBqJAAgAAsNACAAIAEgAkECEMYCC0gBAX8jAEEQayIDJAAgACgCACEAIAEgA0EEaiACEDwiASAAEQEAIAEoAgAiAARAIAEgADYCBCABKAIIGiAAECILIANBEGokAAv8AQMBfwF+AXwjAEFAaiIDJAAgA0EIaiABIAIgACgCABEDACADIAMpAxgiBDcDMCADIAMpAxA3AyggAyADKQMINwMgQQIhACAEp0EBcQRAIwBBEGsiACQAQZCeAi0AAEEBcUUEQEECQYj5AUEDEAYhAUGQngJBAToAAEGMngIgATYCAAtBEBAjIgEgAykDKDcDCCABIAMpAyA3AwAgACABNgIIIABBADYCBEGMngIoAgBBAEEAIABBBGogAEEIahAFIQUgACgCBCEBIAMgBfwDNgI8IANBnKACNgI4IAEEQCABEAQLIABBEGokACADKAI8IQALIANBQGskACAAC5ICAwF/AX4BfCMAQdAAayIDJAAgA0EIaiABIAIgACgCABEDACADIAMpAyAiBDcDQCADIAMpAxg3AzggAyADKQMQNwMwIAMgAykDCDcDKEECIQAgBKdBAXEEQCMAQRBrIgAkAEGEngItAABBAXFFBEBBAkGY9wFBAxAGIQFBhJ4CQQE6AABBgJ4CIAE2AgALQRgQIyIBIAMpAzg3AxAgASADKQMwNwMIIAEgAykDKDcDACAAIAE2AgggAEEANgIEQYCeAigCAEEAQQAgAEEEaiAAQQhqEAUhBSAAKAIEIQEgAyAF/AM2AkwgA0GcoAI2AkggAQRAIAEQBAsgAEEQaiQAIAMoAkwhAAsgA0HQAGokACAACw0AIAAgASACQQEQxgILRQEBfyMAQSBrIgMkACAAKAIAIQAgAyACKQMQNwMYIAMgAikDCDcDECADIAIpAwA3AwggASADQQhqIAARAQAgA0EgaiQAC/ABAgF/AXwjAEEwayIDJAAgA0EIaiABIAIgACgCABEDACADIAMpAhA3AyAgAyADKQIINwMYQQIhACADLQAkQQFGBEAjAEEQayIAJABB+J0CLQAAQQFxRQRAQQJBqPUBQQMQBiEBQfidAkEBOgAAQfSdAiABNgIAC0EMECMiASADKAIgNgIIIAEgAykCGDcCACAAIAE2AgggAEEANgIEQfSdAigCAEEAQQAgAEEEaiAAQQhqEAUhBCAAKAIEIQEgAyAE/AM2AiwgA0GcoAI2AiggAQRAIAEQBAsgAEEQaiQAIAMoAiwhAAsgA0EwaiQAIAALOAEBfyMAQRBrIgMkACAAKAIAIQAgAyACKAIINgIIIAMgAikCADcDACABIAMgABEBACADQRBqJAAL7QECAn8BfCMAQaABayIDJAAgA0EIaiIEIAEgAiAAKAIAEQMAIANB0ABqIgEgBEHIAPwKAABBAiEAIAMtAJABQQFGBEAjAEEQayIAJABB7J0CLQAAQQFxRQRAQQJBuPMBQQMQBiECQeydAkEBOgAAQeidAiACNgIAC0HAABAjIgIgAUHAAPwKAAAgACACNgIIIABBADYCBEHonQIoAgBBAEEAIABBBGogAEEIahAFIQUgACgCBCEBIAMgBfwDNgKcASADQZygAjYCmAEgAQRAIAEQBAsgAEEQaiQAIAMoApwBIQALIANBoAFqJAAgAAsNACAAIAEgAkEAEMYCCy8BAX8jAEFAaiIDJAAgACgCACEAIAMgAkHAAPwKAAAgASADIAARAQAgA0FAayQAC1EBAn8jAEHQAGsiByQAIAAoAgAhACAHQQhqIgggA0Ew/AoAACAHQThqIgMgASACIAggBCAFIAYgABEoAEEYECMgAxAuIAMQKBogB0HQAGokAAtbAQF/IwBBIGsiBCQAIAAoAgAhACAEIAI2AgQgBEGcoAI2AgAgBEEIaiICIAEgBCADIAARBQBBGBAjIAIQLiACECgaIAQoAgQiAEEJTwRAIAAQAQsgBEEgaiQACzcAIAAoAgAgAUEFdGoiACACKQMYNwMYIAAgAikDEDcDECAAIAIpAwg3AwggACACKQMANwMAQQELmgYCB38BfCMAQdABayIDJABBJBAjIgRCADcCDCAEQYSWAjYCACAEQgA3AgQgBEIANwIUIARCADcCHCAAQgA3AxggAEKAgICAgICA+D83AxAgAEIANwMIIAAgBDYCBCAAIARBDGo2AgAgAEIANwMgIABCADcDMCAAQoCAgICAgID4PzcDKCAAQgA3AzggA0EANgIcIANCADcCFCADQRRqIAEoAgQgASgCAGtBDG0QViABKAIAIgcgASgCBCIIRwRAA0AgA0EgaiAHEDwiCSEBIwBBEGsiBCQAIANBwAFqIgVBADYCCCAFQgA3AgAgBSABKAIEIAEoAgBrQQR1EFwgASgCACIGIAEoAgQiAUcEQANAIAYrAwAhCiAEIAYrAwg5AwggBCAKOQMAIAUgBBBMIAZBEGoiBiABRw0ACwsgBEEQaiQAIANBFGogBRBoIAMoAsABIgEEQCADIAE2AsQBIAMoAsgBGiABECILIAkoAgAiAQRAIAMgATYCJCADKAIoGiABECILIAdBDGoiByAIRw0ACwsgA0EANgIQIANCADcCCCADQThqQQBB6AD8CwAgA0IANwMwIANBAjYCLCADQgA3AiQgA0E8akEAQTD8CwAgA0HwAGpBAEEk/AsAIANBADYCqAEgA0IANwOgASADQQE6AJ0BIANBAToAlAEgA0KAgICAgICAoD43A7gBIANCgICAgICAgNDBADcDsAEgA0H8mgI2AiAgA0EgaiIBIANBFGoQmwEgA0EANgLIASADQgA3AsABIAFBAkEDIAIg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AABBAAs6ABgLuwMBBX8CQCAAKAIEIAAoAgAiA2tBGG0iBCABSQRAIwBBIGsiBiQAAkACQCABIARrIgQgACgCCCIFIAAoAgQiA2tBGG1NBEAgACAEBH8gAyAEQRhsaiEAA0AgAyACKQMQNwMQIAMgAikDCDcDCCADIAIpAwA3AwAgA0EYaiIDIABHDQALIAAFIAMLNgIEDAELIAMgACgCACIDa0EYbSIHIARqIgFBq9Wq1QBPDQEgBkEMakGq1arVACAFIANrQRhtIgNBAXQiBSABIAEgBUkbIANB1arVKk8bIAcgABBkIgEoAggiAyAEQRhsaiEEA0AgAyACKQMQNwMQIAMgAikDCDcDCCADIAIpAwA3AwAgA0EYaiIDIARHDQALIAEgBDYCCCABKAIEIAAoAgQgACgCACIEayICQWhtQRhsaiEDIAIEQCADIAQgAvwKAAALIAAoAgAhAiAAIAM2AgAgASACNgIEIAAgASgCCDYCBCABIAI2AgggACgCCCEDIAAgASgCDDYCCCABIAI2AgAgASADNgIMIAEQjAELIAZBIGokAAwCCxAmAAsgASAESQRAIAAgAyABQRhsajYCBAsLCwkAIAAgARDEAQsGAEG89gELIwAgACgCACABQQxsaiIAIAIoAgg2AgggACACKQIANwIAQQELSQAgAAJ/IAEoAgQgASgCACIBa0EMbSACSwRAIAAgASACQQxsaiIBKAIINgIIIAAgASkCADcCAEEBDAELIABBADoAAEEACzoADAuoAwEFfwJAIAAoAgQgACgCACIDa0EMbSIEIAFJBEAjAEEgayIGJAACQAJAIAEgBGsiBCAAKAIIIgUgACgCBCIDa0EMbU0EQCAAIAQEfyADIARBDGxqIQADQCADIAIoAgg2AgggAyACKQIANwIAIANBDGoiAyAARw0ACyAABSADCzYCBAwBCyADIAAoAgAiA2tBDG0iByAEaiIBQdaq1aoBTw0BIAZBDGpB1arVqgEgBSADa0EMbSIDQQF0IgUgASABIAVJGyADQarVqtUATxsgByAAEGEiASgCCCIDIARBDGxqIQQDQCADIAIoAgg2AgggAyACKQIANwIAIANBDGoiAyAERw0ACyABIAQ2AgggASgCBCAAKAIEIAAoAgAiBGsiAkF0bUEMbGohAyACBEAgAyAEIAL8CgAACyAAKAIAIQIgACADNgIAIAEgAjYCBCAAIAEoAgg2AgQgASACNgIIIAAoAgghAyAAIAEoAgw2AgggASACNgIAIAEgAzYCDCABENYBCyAGQSBqJAAMAgsQJgALIAEgBEkEQCAAIAMgAUEMbGo2AgQLCwsJACAAIAEQnQULBgBBzPQBCxgAIAAoAgAgAUEGdGogAkHAAPwKAABBAQs+ACAAAn8gASgCBCABKAIAIgFrQQZ1IAJLBEAgACABIAJBBnRqQcAA/AoAAEEBDAELIABBADoAAEEACzoAQAuMAwEFfwJAIAAoAgQgACgCACIDa0EGdSIEIAFJBEAjAEEgayIGJAACQAJAIAEgBGsiBCAAKAIIIgUgACgCBCIDa0EGdU0EQCAAIAQEfyADIARBBnRqIQADQCADIAJBwAD8CgAAIANBQGsiAyAARw0ACyAABSADCzYCBAwBCyADIAAoAgAiA2tBBnUiByAEaiIBQYCAgCBPDQEgBkEMakH///8fIAUgA2siA0EFdSIFIAEgASAFSRsgA0HA////B08bIAcgABCpASIBKAIIIgMgBEEGdGohBANAIAMgAkHAAPwKAAAgA0FAayIDIARHDQALIAEgBDYCCCABKAIEIAAoAgQgACgCACIEayICayEDIAIEQCADIAQgAvwKAAALIAAoAgAhAiAAIAM2AgAgASACNgIEIAAgASgCCDYCBCABIAI2AgggACgCCCEDIAAgASgCDDYCCCABIAI2AgAgASADNgIMIAEQqQILIAZBIGokAAwCCxAmAAsgASAESQRAIAAgAyABQQZ0ajYCBAsLCwkAIAAgARCaAwsGAEHo8gELDwAgASAAKAIAaiACNwMACw0AIAEgACgCAGopAwALHgAgASAAKAIAaiIAIAIpAwg3AwggACACKQMANwMACyoBAX8gACgCACECQRAQIyIAIAEgAmoiASkDCDcDCCAAIAEpAwA3AwAgAAsHACAAEQwACwkAIAEgABEZAAsJACABIAARAAALCQAgASAAERsACwkAIAEgABEEAAtNAQF/IwBBEGsiAiQAIAIgATYCBCACQZygAjYCACACQQhqIAIgABEBACACKAIMIAJBADYCDCACKAIEIgFBCU8EQCABEAELIAJBEGokAAtIAQJ/IwBB0ABrIgYkACAGQQhqIgcgAkEw/AoAACAGQThqIgIgASAHIAMgBCAFIAARKQBBGBAjIAIQLiACECgaIAZB0ABqJAALMwECfyMAQSBrIgQkACAEQQhqIgUgASACIAMgABEPAEEYECMgBRAuIAUQKBogBEEgaiQAC5QBAQJ/IwBBEGsiBCQAIARBBGogASACIAMgABEVAEEMECMiAEEANgIIIABCADcCACAEKAIIIgEgBCgCBCIDRwRAIAAgASADayIBQQxtEKMCIAAoAgQhBSABBEAgBSADIAH8CgAACyAAIAEgBWo2AgQLIAQoAgQiAQRAIAQgATYCCCAEKAIMGiABECILIARBEGokACAAC04BAX8jAEEwayIGJAAgBiAFKQMANwMIIAYgBSkDCDcDECAGQRhqIgUgASACIAMgBCAGQQhqIAARIwBBGBAjIAUQLiAFECgaIAZBMGokAAtSAQF/IwBBIGsiAyQAIAMgATYCBCADQZygAjYCACADQQhqIgEgAyACIAARAwBBGBAjIAEQLiABECgaIAMoAgQiAUEJTwRAIAEQAQsgA0EgaiQACy0BAn8jAEEgayIBJAAgAUEIaiICIAARAABBGBAjIAIQLiACECgaIAFBIGokAAsxAQJ/IwBBIGsiAyQAIANBCGoiBCABIAIgABEWAEEYECMgBBAuIAQQKBogA0EgaiQACzcBAn8jAEEgayIGJAAgBkEIaiIHIAEgAiADIAQgBSAAESQAQRgQIyAHEC4gBxAoGiAGQSBqJAALTwEBfyMAQTBrIgMkACADIAEpAwA3AwAgAyABKQMINwMIIAMgASkDEDcDECADQRhqIgEgAyACIAARAwBBGBAjIAEQLiABECgaIANBMGokAAtdAQN/IwBBIGsiBCQAIAEgACgCBCIGQQF1aiEBIAAoAgAhACAEQQhqIgUgASACIAMgBkEBcQR/IAEoAgAgAGooAgAFIAALEQ8AQRgQIyAFEC4gBRAoGiAEQSBqJAALXQEDfyMAQSBrIgQkACABIAAoAgQiBkEBdWohASAAKAIAIQAgBEEIaiIFIAEgAiADIAZBAXEEfyABKAIAIABqKAIABSAACxEFAEEYECMgBRAuIAUQKBogBEEgaiQACzkBAX8gASAAKAIEIgRBAXVqIQEgACgCACEAIAEgAiADIARBAXEEfyABKAIAIABqKAIABSAACxEmAAtXAQJ/IwBBMGsiAiQAIAEgACgCBCIDQQF1aiEBIAAoAgAhACACIAEgA0EBcQR/IAEoAgAgAGooAgAFIAALEQEAQTAQIyIAIAJBMPwKAAAgAkEwaiQAIAALWgECfyMAQRBrIgIkACABIAAoAgQiA0EBdWohASAAKAIAIQAgAiABIANBAXEEfyABKAIAIABqKAIABSAACxEBACACEJQDIAIgAjYCDCACQQxqEHogAkEQaiQAC18BA38jAEEgayIFJAAgASAAKAIEIgdBAXVqIQEgACgCACEAIAVBCGoiBiABIAIgAyAEIAdBAXEEfyABKAIAIABqKAIABSAACxEiAEEYECMgBhAuIAYQKBogBUEgaiQAC3oBAn8jAEEwayIDJAAgASAAKAIEIgRBAXVqIQEgACgCACEAIARBAXEEQCABKAIAIABqKAIAIQALIAMgAikDEDcDECADIAIpAwg3AwggAyACKQMANwMAIANBGGoiAiABIAMgABEDAEEYECMgAhAuIAIQKBogA0EwaiQAC10BA38jAEEgayIEJAAgASAAKAIEIgZBAXVqIQEgACgCACEAIARBCGoiBSABIAIgAyAGQQFxBH8gASgCACAAaigCAAUgAAsRJwBBGBAjIAUQLiAFECgaIARBIGokAAtbAQN/IwBBIGsiAyQAIAEgACgCBCIFQQF1aiEBIAAoAgAhACADQQhqIgQgASACIAVBAXEEfyABKAIAIABqKAIABSAACxELAEEYECMgBBAuIAQQKBogA0EgaiQAC1kBA38jAEEgayICJAAgASAAKAIEIgRBAXVqIQEgACgCACEAIAJBCGoiAyABIARBAXEEfyABKAIAIABqKAIABSAACxEBAEEYECMgAxAuIAMQKBogAkEgaiQAC1wBAn8jAEEQayIDJAAgASAAKAIEIgRBAXVqIQEgACgCACEAIAMgASACIARBAXEEfyABKAIAIABqKAIABSAACxELACADEJgFIAMgAzYCDCADQQxqECkgA0EQaiQAC3wBAn8jAEEwayIEJAAgASAAKAIEIgVBAXVqIQEgACgCACEAIAVBAXEEQCABKAIAIABqKAIAIQALIAQgAikDEDcDECAEIAIpAwg3AwggBCACKQMANwMAIARBGGoiAiABIAQgAyAAEQ8AQRgQIyACEC4gAhAoGiAEQTBqJAALUQEBfyMAQSBrIgIkACACIAE2AgQgAkGcoAI2AgAgAkEIaiIB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aENvbnRleHQAX1Ntb290aE91dABfUmF5Q2FzdAB1bnNpZ25lZCBzaG9ydABudW1Qcm9wVmVydABtZXJnZVRvVmVydABudW1WZXJ0AG1lcmdlRnJvbVZlcnQAdW5zaWduZWQgaW50AGhhbGZlZGdlVGFuZ2VudABfU3BsaXQAVmVjdG9yX3JheUhpdABfT2Zmc2V0AGdldABfTGV2ZWxTZXQAX2ludGVyc2VjdAByZWN0AF9Qcm9qZWN0AF9zdWJ0cmFjdABmbG9hdABzdGF0dXMAZ2VudXMAdHJpVmVydHMAX2Nyb3NzU2VjdGlvbkh1bGxQb2ludHMAX21hbmlmb2xkSHVsbFBvaW50cwBzZXRDaXJjdWxhclNlZ21lbnRzAGdldENpcmN1bGFyU2VnbWVudHMASW52YWxpZFRhbmdlbnRzAHJlc2V0VG9DaXJjdWxhckRlZmF1bHRzAHByb2dyZXNzAFZlY3Rvcl9zbW9vdGhuZXNzAF9Ub1BvbHlnb25zAF9TbW9vdGhCeU5vcm1hbHMAX0NhbGN1bGF0ZU5vcm1hbHMATWVyZ2VWZWN0b3JzRGlmZmVyZW50TGVuZ3RocwBydW5GbGFncwB2ZXJ0UHJvcGVydGllcwBfU2V0UHJvcGVydGllcwBNaXNzaW5nUG9zaXRpb25Qcm9wZXJ0aWVzAF9jcm9zc1NlY3Rpb25Db2xsZWN0VmVydGljZXMAX21hbmlmb2xkQ29sbGVjdFZlcnRpY2VzAFZlcnRleE91dE9mQm91bmRzAE1lcmdlSW5kZXhPdXRPZkJvdW5kcwBfQm91bmRzAF9SZXNlcnZlSURzACVzOiVkOiAlcwBudW1Db250b3VyAGJhZF93ZWFrX3B0cgB2ZWN0b3IAX01pcnJvcgBVbmtub3duIGVycm9yAE5vRXJyb3IAVW5rbm93bkVycm9yAE1pdGVyAF9DeWxpbmRlcgB1bnNpZ25lZCBjaGFyAF9XYXJwAC9lbXNkay9lbXNjcmlwdGVuL3N5c3RlbS9saWIvbGliY3h4YWJpL3NyYy9wcml2YXRlX3R5cGVpbmZvLmNwcABudW1Qcm9wAG1pbkdhcABOb25aZXJvAF9UZXRyYWhlZHJvbgBwb3NpdGlvbgBJbnZhbGlkQ29uc3RydWN0aW9uAFZlY3Rvcl9jcm9zc1NlY3Rpb24AQ3Jvc3NTZWN0aW9uAG1pbgBtaW5rb3dza2lTdW0AdHJhbnNmb3JtAHJ1blRyYW5zZm9ybQBib29sAGh1bGwAc3RkOjpiYWRfZnVuY3Rpb25fY2FsbABCZXZlbABjYW5jZWwAYXNPcmlnaW5hbABub3JtYWwAcHVzaF9iYWNrAG51bVRyaQBfU21vb3RoAGJhZF9hcnJheV9uZXdfbGVuZ3RoAHJlZmluZVRvTGVuZ3RoAFJ1bkluZGV4V3JvbmdMZW5ndGgAUHJvcGVydGllc1dyb25nTGVuZ3RoAFRyYW5zZm9ybVdyb25nTGVuZ3RoAEZhY2VJRFdyb25nTGVuZ3RoAHNldE1pbkNpcmN1bGFyRWRnZUxlbmd0aABtZXNoAF9Gcm9tTWVzaABfV2FycEJhdGNoAHVuc2lnbmVkIGxvbmcgbG9uZwB1bnNpZ25lZCBsb25nAHN0ZDo6d3N0cmluZwBiYXNpY19zdHJpbmcAc3RkOjpzdHJpbmcAc3RkOjp1MTZzdHJpbmcAc3RkOjp1MzJzdHJpbmcAcmVzaXplAF9SZXZvbHZlAFBvc2l0aXZlAE5lZ2F0aXZlAHJvdGF0ZQBfUm90YXRlAFRoZXJlIG11c3QgYmUgMiB2YWx1ZXMgZm9yIGVhY2ggY29vcmRpbmF0ZQBfVHJpYW5ndWxhdGUAX1RyYW5zbGF0ZQBfRGVjb21wb3NlAF9jcm9zc1NlY3Rpb25Db21wb3NlAF9tYW5pZm9sZENvbXBvc2UAY2FsY3VsYXRlQ3VydmF0dXJlAF9TcGhlcmUAX1NxdWFyZQBqb2ludHlwZQByZWZpbmUAX1NwbGl0QnlQbGFuZQBfVHJpbUJ5UGxhbmUAdm9sdW1lAGZpbGxydWxlAHNldE1pbkNpcmN1bGFyQW5nbGUAX0NpcmNsZQBkb3VibGUAX1NjYWxlAF9NZXJnZQBSZXN1bHRUb29MYXJnZQBQcmVjaXNpb24gZXhjZWVkcyB0aGUgcGVybWl0dGVkIHJhbmdlAFZhbHVlcyBleGNlZWQgcGVybWl0dGVkIHJhbmdlAGhhbGZlZGdlAG51bUVkZ2UAX0V4dHJ1ZGUAbWlua293c2tpRGlmZmVyZW5jZQBkaXN0YW5jZQB0b2xlcmFuY2UAc2V0VG9sZXJhbmNlAHJlZmluZVRvVG9sZXJhbmNlAHNsaWNlAF9TbGljZQBfQ3ViZQBSb3VuZABWZWN0b3JfbWFuaWZvbGQATm90TWFuaWZvbGQAdm9pZABjYW5jZWxsZWQAQ2FuY2VsbGVkAHJlY3Vyc2l2ZV9tdXRleCBjb25zdHJ1Y3RvciBmYWlsZWQAcmVjdXJzaXZlX211dGV4IGxvY2sgZmFpbGVkAGNoYW5nZWQAX2FkZABFdmVuT2RkAGFyZWEAc3VyZmFjZUFyZWEAX0dldE1lc2hKUwBfY3Jvc3NTZWN0aW9uSW50ZXJzZWN0aW9uTgBfbWFuaWZvbGRJbnRlcnNlY3Rpb25OAF9jcm9zc1NlY3Rpb25Vbmlvbk4AX21hbmlmb2xkVW5pb25OAF9jcm9zc1NlY3Rpb25EaWZmZXJlbmNlTgBfbWFuaWZvbGREaWZmZXJlbmNlTgBvcmlnaW5hbElEAHJ1bk9yaWdpbmFsSUQAZmFjZUlEAGluaXRUQkIAY2F0Y2hpbmcgYSBjbGFzcyB3aXRob3V0IGFuIG9iamVjdD8AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8c2hvcnQ+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHVuc2lnbmVkIHNob3J0PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxpbnQ+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHVuc2lnbmVkIGludD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8ZmxvYXQ+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHVpbnQ4X3Q+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PGludDhfdD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8dWludDE2X3Q+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PGludDE2X3Q+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHVpbnQ2NF90PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxpbnQ2NF90PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1aW50MzJfdD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8aW50MzJfdD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8Y2hhcj4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8dW5zaWduZWQgY2hhcj4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8c2lnbmVkIGNoYXI+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PGxvbmc+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHVuc2lnbmVkIGxvbmc+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PGRvdWJsZT4AVmVjdG9yX3ZlYzQAVmVjdG9yX2Y2NABWZWN0b3JfaXZlYzMAVmVjdG9yX3ZlYzMAVGhlcmUgaXMgYW4gdW5kZWZpbmVkIGVycm9yIGluIENsaXBwZXIyAFZlY3Rvcl92ZWMyAFZlY3RvcjJfdmVjMgAxADAASW52YWxpZCBzY2FsZSAoZWl0aGVyIDAgb3IgdG9vIGxhcmdlKQAAAAAMdgAAFBAAAE5TdDNfXzIxMmJhc2ljX3N0cmluZ0l3TlNfMTFjaGFyX3RyYWl0c0l3RUVOU185YWxsb2NhdG9ySXdFRUVFAAAMdgAAXBAAAE5TdDNfXzIxMmJhc2ljX3N0cmluZ0lEc05TXzExY2hhcl90cmFpdHNJRHNFRU5TXzlhbGxvY2F0b3JJRHNFRUVFAAAADHYAAKgQAABOU3QzX18yMTJiYXNpY19zdHJpbmdJRGlOU18xMWNoYXJfdHJhaXRzSURpRUVOU185YWxsb2NhdG9ySURpRUVFRQAAAAx2AAD0EAAATjEwZW1zY3JpcHRlbjExbWVtb3J5X3ZpZXdJY0VFAAAMdgAAHBEAAE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SWFFRQAADHYAAEQRAABOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0lzRUUAAAx2AABsEQAATjEwZW1zY3JpcHRlbjExbWVtb3J5X3ZpZXdJdEVFAAAMdgAAlBEAAE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SWlFRQAADHYAALwRAABOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0lsRUUAAAx2AADkEQAATjEwZW1zY3JpcHRlbjExbWVtb3J5X3ZpZXdJbUVFAAAMdgAADBIAAE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SXhFRQAADHYAADQSAABOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0l5RUUATjZsaW5hbGczdmVjSWRMaTJFRUUAcAB2cABkcHAAdnBwZABONmxpbmFsZzN2ZWNJaUxpM0VFRQBwAHZwAGlwcAB2cHBpAE42bGluYWxnM3ZlY0lkTGkzRUVFAHAAdnAAZHBwAHZwcGQATjZsaW5hbGczdmVjSWRMaTRFRUUAcAB2cABkcHAAdnBwZABOOG1hbmlmb2xkOE1hbmlmb2xkNUVycm9yRQBOOG1hbmlmb2xkMTJDcm9zc1NlY3Rpb244RmlsbFJ1bGVFAE44bWFuaWZvbGQxMkNyb3NzU2VjdGlvbjhKb2luVHlwZUUATjhtYW5pZm9sZDRSZWN0RQBwAHZwAHBwcAB2cHBwAE44bWFuaWZvbGQzQm94RQBwAHZwAHBwcAB2cHBwAE44bWFuaWZvbGQxMFNtb290aG5lc3NFAHAAdnAAaXBwAHZwcGkAZHBwAHZwcGQATjhtYW5pZm9sZDZSYXlIaXRFAHAAdnAAanBwAHZwcGoAZHBwAHZwcGQAcHBwAHZwcHAATjhtYW5pZm9sZDE2RXhlY3V0aW9uQ29udGV4dEUAUE44bWFuaWZvbGQxNkV4ZWN1dGlvbkNvbnRleHRFAFBLTjhtYW5pZm9sZDE2RXhlY3V0aW9uQ29udGV4dEUAcHAAdgB2cABwcAB2cHAAaXBwAGRwcABOOG1hbmlmb2xkOE1hbmlmb2xkRQBOMTBlbXNjcmlwdGVuM3ZhbEUAcHBwcABOU3QzX18yNnZlY3RvcklOOG1hbmlmb2xkMTBTbW9vdGhuZXNzRU5TXzlhbGxvY2F0b3JJUzJfRUVFRQBwcHBwcABwcHBpcGRkZABOU3QzX18yOG9wdGlvbmFsSU44bWFuaWZvbGQ2UmF5SGl0RUVFAE5TdDNfXzIyN19fb3B0aW9uYWxfbW92ZV9hc3NpZ25fYmFzZUlOOG1hbmlmb2xkNlJheUhpdEVMYjFFRUUATlN0M19fMjI3X19vcHRpb25hbF9jb3B5X2Fzc2lnbl9iYXNlSU44bWFuaWZvbGQ2UmF5SGl0RUxiMUVFRQBOU3QzX18yMjBfX29wdGlvbmFsX21vdmVfYmFzZUlOOG1hbmlmb2xkNlJheUhpdEVMYjFFRUUATlN0M19fMjIwX19vcHRpb25hbF9jb3B5X2Jhc2VJTjhtYW5pZm9sZDZSYXlIaXRFTGIxRUVFAE5TdDNfXzIyM19fb3B0aW9uYWxfc3RvcmFnZV9iYXNlSU44bWFuaWZvbGQ2UmF5SGl0RUxiMEVFRQBOU3QzX18yMjRfX29wdGlvbmFsX2Rlc3RydWN0X2Jhc2VJTjhtYW5pZm9sZDZSYXlIaXRFTGIxRUVFAE5TdDNfXzIxOF9fc2ZpbmFlX2N0b3JfYmFzZUlMYjFFTGIxRUVFAE5TdDNfXzIyMF9fc2ZpbmFlX2Fzc2lnbl9iYXNlSUxiMUVMYjFFRUUATlN0M19fMjZ2ZWN0b3JJTjhtYW5pZm9sZDZSYXlIaXRFTlNfOWFsbG9jYXRvcklTMl9FRUVFAFBOU3QzX18yNnZlY3RvcklOOG1hbmlmb2xkNlJheUhpdEVOU185YWxsb2NhdG9ySVMyX0VFRUUAUEtOU3QzX18yNnZlY3RvcklOOG1hbmlmb2xkNlJheUhpdEVOU185YWxsb2NhdG9ySVMyX0VFRUUAcHAAdnAAcHAAdnBwcAB2cHBpcABpcHAAcHBwaQBpcHBpcABOU3QzX18yOG9wdGlvbmFsSU42bGluYWxnM3ZlY0lpTGkzRUVFRUUATlN0M19fMjI3X19vcHRpb25hbF9tb3ZlX2Fzc2lnbl9iYXNlSU42bGluYWxnM3ZlY0lpTGkzRUVFTGIxRUVFAE5TdDNfXzIyN19fb3B0aW9uYWxfY29weV9hc3NpZ25fYmFzZUlONmxpbmFsZzN2ZWNJaUxpM0VFRUxiMUVFRQBOU3QzX18yMjBfX29wdGlvbmFsX21vdmVfYmFzZUlONmxpbmFsZzN2ZWNJaUxpM0VFRUxiMUVFRQBOU3QzX18yMjBfX29wdGlvbmFsX2NvcHlfYmFzZUlONmxpbmFsZzN2ZWNJaUxpM0VFRUxiMUVFRQBOU3QzX18yMjNfX29wdGlvbmFsX3N0b3JhZ2VfYmFzZUlONmxpbmFsZzN2ZWNJaUxpM0VFRUxiMEVFRQBOU3QzX18yMjRfX29wdGlvbmFsX2Rlc3RydWN0X2Jhc2VJTjZsaW5hbGczdmVjSWlMaTNFRUVMYjFFRUUATlN0M19fMjZ2ZWN0b3JJTjZsaW5hbGczdmVjSWlMaTNFRUVOU185YWxsb2NhdG9ySVMzX0VFRUUAUE5TdDNfXzI2dmVjdG9ySU42bGluYWxnM3ZlY0lpTGkzRUVFTlNfOWFsbG9jYXRvcklTM19FRUVFAFBLTlN0M19fMjZ2ZWN0b3JJTjZsaW5hbGczdmVjSWlMaTNFRUVOU185YWxsb2NhdG9ySVMzX0VFRUUAcHAAdnAAcHAAdnBwcAB2cHBpcABpcHAAcHBwaQBpcHBpcABOU3QzX18yOG9wdGlvbmFsSU42bGluYWxnM3ZlY0lkTGkzRUVFRUUATlN0M19fMjI3X19vcHRpb25hbF9tb3ZlX2Fzc2lnbl9iYXNlSU42bGluYWxnM3ZlY0lkTGkzRUVFTGIxRUVFAE5TdDNfXzIyN19fb3B0aW9uYWxfY29weV9hc3NpZ25fYmFzZUlONmxpbmFsZzN2ZWNJZExpM0VFRUxiMUVFRQBOU3QzX18yMjBfX29wdGlvbmFsX21vdmVfYmFzZUlONmxpbmFsZzN2ZWNJZExpM0VFRUxiMUVFRQBOU3QzX18yMjBfX29wdGlvbmFsX2NvcHlfYmFzZUlONmxpbmFsZzN2ZWNJZExpM0VFRUxiMUVFRQBOU3QzX18yMjNfX29wdGlvbmFsX3N0b3JhZ2VfYmFzZUlONmxpbmFsZzN2ZWNJZExpM0VFRUxiMEVFRQBOU3QzX18yMjRfX29wdGlvbmFsX2Rlc3RydWN0X2Jhc2VJTjZsaW5hbGczdmVjSWRMaTNFRUVMYjFFRUUATlN0M19fMjZ2ZWN0b3JJTjZsaW5hbGczdmVjSWRMaTNFRUVOU185YWxsb2NhdG9ySVMzX0VFRUUAUE5TdDNfXzI2dmVjdG9ySU42bGluYWxnM3ZlY0lkTGkzRUVFTlNfOWFsbG9jYXRvcklTM19FRUVFAFBLTlN0M19fMjZ2ZWN0b3JJTjZsaW5hbGczdmVjSWRMaTNFRUVOU185YWxsb2NhdG9ySVMzX0VFRUUAcHAAdnAAcHAAdnBwcAB2cHBpcABpcHAAcHBwaQBpcHBpcABOU3QzX18yOG9wdGlvbmFsSU42bGluYWxnM3ZlY0lkTGkyRUVFRUUATlN0M19fMjI3X19vcHRpb25hbF9tb3ZlX2Fzc2lnbl9iYXNlSU42bGluYWxnM3ZlY0lkTGkyRUVFTGIxRUVFAE5TdDNfXzIyN19fb3B0aW9uYWxfY29weV9hc3NpZ25fYmFzZUlONmxpbmFsZzN2ZWNJZExpMkVFRUxiMUVFRQBOU3QzX18yMjBfX29wdGlvbmFsX21vdmVfYmFzZUlONmxpbmFsZzN2ZWNJZExpMkVFRUxiMUVFRQBOU3QzX18yMjBfX29wdGlvbmFsX2NvcHlfYmFzZUlONmxpbmFsZzN2ZWNJZExpMkVFRUxiMUVFRQBOU3QzX18yMjNfX29wdGlvbmFsX3N0b3JhZ2VfYmFzZUlONmxpbmFsZzN2ZWNJZExpMkVFRUxiMEVFRQBOU3QzX18yMjRfX29wdGlvbmFsX2Rlc3RydWN0X2Jhc2VJTjZsaW5hbGczdmVjSWRMaTJFRUVMYjFFRUUATlN0M19fMjZ2ZWN0b3JJTjZsaW5hbGczdmVjSWRMaTJFRUVOU185YWxsb2NhdG9ySVMzX0VFRUUAUE5TdDNfXzI2dmVjdG9ySU42bGluYWxnM3ZlY0lkTGkyRUVFTlNfOWFsbG9jYXRvcklTM19FRUVFAFBLTlN0M19fMjZ2ZWN0b3JJTjZsaW5hbGczdmVjSWRMaTJFRUVOU185YWxsb2NhdG9ySVMzX0VFRUUAcHAAdnAAcHAAdnBwcAB2cHBpcABpcHAAcHBwaQBpcHBpcABOU3QzX18yOG9wdGlvbmFsSU5TXzZ2ZWN0b3JJTjZsaW5hbGczdmVjSWRMaTJFRUVOU185YWxsb2NhdG9ySVM0X0VFRUVFRQBOU3QzX18yMjdfX29wdGlvbmFsX21vdmVfYXNzaWduX2Jhc2VJTlNfNnZlY3RvcklONmxpbmFsZzN2ZWNJZExpMkVFRU5TXzlhbGxvY2F0b3JJUzRfRUVFRUxiMEVFRQBOU3QzX18yMjdfX29wdGlvbmFsX2NvcHlfYXNzaWduX2Jhc2VJTlNfNnZlY3RvcklONmxpbmFsZzN2ZWNJZExpMkVFRU5TXzlhbGxvY2F0b3JJUzRfRUVFRUxiMEVFRQBOU3QzX18yMjBfX29wdGlvbmFsX21vdmVfYmFzZUlOU182dmVjdG9ySU42bGluYWxnM3ZlY0lkTGkyRUVFTlNfOWFsbG9jYXRvcklTNF9FRUVFTGIwRUVFAE5TdDNfXzIyMF9fb3B0aW9uYWxfY29weV9iYXNlSU5TXzZ2ZWN0b3JJTjZsaW5hbGczdmVjSWRMaTJFRUVOU185YWxsb2NhdG9ySVM0X0VFRUVMYjBFRUUATlN0M19fMjIzX19vcHRpb25hbF9zdG9yYWdlX2Jhc2VJTlNfNnZlY3RvcklONmxpbmFsZzN2ZWNJZExpMkVFRU5TXzlhbGxvY2F0b3JJUzRfRUVFRUxiMEVFRQBOU3QzX18yMjRfX29wdGlvbmFsX2Rlc3RydWN0X2Jhc2VJTlNfNnZlY3RvcklONmxpbmFsZzN2ZWNJZExpMkVFRU5TXzlhbGxvY2F0b3JJUzRfRUVFRUxiMEVFRQBOU3QzX18yNnZlY3RvcklOUzBfSU42bGluYWxnM3ZlY0lkTGkyRUVFTlNfOWFsbG9jYXRvcklTM19FRUVFTlM0X0lTNl9FRUVFAFBOU3QzX18yNnZlY3RvcklOUzBfSU42bGluYWxnM3ZlY0lkTGkyRUVFTlNfOWFsbG9jYXRvcklTM19FRUVFTlM0X0lTNl9FRUVFAFBLTlN0M19fMjZ2ZWN0b3JJTlMwX0lONmxpbmFsZzN2ZWNJZExpMkVFRU5TXzlhbGxvY2F0b3JJUzNfRUVFRU5TNF9JUzZfRUVFRQBwcAB2cABwcAB2cHBwAHZwcGlwAGlwcABwcHBpAGlwcGlwAE5TdDNfXzI4b3B0aW9uYWxJZEVFAE5TdDNfXzIyN19fb3B0aW9uYWxfbW92ZV9hc3NpZ25fYmFzZUlkTGIxRUVFAE5TdDNfXzIyN19fb3B0aW9uYWxfY29weV9hc3NpZ25fYmFzZUlkTGIxRUVFAE5TdDNfXzIyMF9fb3B0aW9uYWxfbW92ZV9iYXNlSWRMYjFFRUUATlN0M19fMjIwX19vcHRpb25hbF9jb3B5X2Jhc2VJZExiMUVFRQBOU3QzX18yMjNfX29wdGlvbmFsX3N0b3JhZ2VfYmFzZUlkTGIwRUVFAE5TdDNfXzIyNF9fb3B0aW9uYWxfZGVzdHJ1Y3RfYmFzZUlkTGIxRUVFAE5TdDNfXzI2dmVjdG9ySWROU185YWxsb2NhdG9ySWRFRUVFAFBOU3QzX18yNnZlY3RvcklkTlNfOWFsbG9jYXRvcklkRUVFRQBQS05TdDNfXzI2dmVjdG9ySWROU185YWxsb2NhdG9ySWRFRUVFAHBwAHZwAHBwAHZwcGQAdnBwaWQAaXBwAHBwcGkAaXBwaWQATlN0M19fMjhvcHRpb25hbElOOG1hbmlmb2xkMTJDcm9zc1NlY3Rpb25FRUUATlN0M19fMjI3X19vcHRpb25hbF9tb3ZlX2Fzc2lnbl9iYXNlSU44bWFuaWZvbGQxMkNyb3NzU2VjdGlvbkVMYjBFRUUATlN0M19fMjI3X19vcHRpb25hbF9jb3B5X2Fzc2lnbl9iYXNlSU44bWFuaWZvbGQxMkNyb3NzU2VjdGlvbkVMYjBFRUUATlN0M19fMjIwX19vcHRpb25hbF9tb3ZlX2Jhc2VJTjhtYW5pZm9sZDEyQ3Jvc3NTZWN0aW9uRUxiMEVFRQBOU3QzX18yMjBfX29wdGlvbmFsX2NvcHlfYmFzZUlOOG1hbmlmb2xkMTJDcm9zc1NlY3Rpb25FTGIwRUVFAE5TdDNfXzIyM19fb3B0aW9uYWxfc3RvcmFnZV9iYXNlSU44bWFuaWZvbGQxMkNyb3NzU2VjdGlvbkVMYjBFRUUATlN0M19fMjI0X19vcHRpb25hbF9kZXN0cnVjdF9iYXNlSU44bWFuaWZvbGQxMkNyb3NzU2VjdGlvbkVMYjBFRUUATjhtYW5pZm9sZDEyQ3Jvc3NTZWN0aW9uRQBOU3QzX18yNnZlY3RvcklOOG1hbmlmb2xkMTJDcm9zc1NlY3Rpb25FTlNfOWFsbG9jYXRvcklTMl9FRUVFAFBOU3QzX18yNnZlY3RvcklOOG1hbmlmb2xkMTJDcm9zc1NlY3Rpb25FTlNfOWFsbG9jYXRvcklTMl9FRUVFAFBLTlN0M19fMjZ2ZWN0b3JJTjhtYW5pZm9sZDEyQ3Jvc3NTZWN0aW9uRU5TXzlhbGxvY2F0b3JJUzJfRUVFRQBwcAB2cABwcAB2cHBwAHZwcGlwAGlwcABwcHBpAGlwcGlwAE5TdDNfXzI4b3B0aW9uYWxJTjhtYW5pZm9sZDhNYW5pZm9sZEVFRQBOU3QzX18yMjdfX29wdGlvbmFsX21vdmVfYXNzaWduX2Jhc2VJTjhtYW5pZm9sZDhNYW5pZm9sZEVMYjBFRUUATlN0M19fMjI3X19vcHRpb25hbF9jb3B5X2Fzc2lnbl9iYXNlSU44bWFuaWZvbGQ4TWFuaWZvbGRFTGIwRUVFAE5TdDNfXzIyMF9fb3B0aW9uYWxfbW92ZV9iYXNlSU44bWFuaWZvbGQ4TWFuaWZvbGRFTGIwRUVFAE5TdDNfXzIyMF9fb3B0aW9uYWxfY29weV9iYXNlSU44bWFuaWZvbGQ4TWFuaWZvbGRFTGIwRUVFAE5TdDNfXzIyM19fb3B0aW9uYWxfc3RvcmFnZV9iYXNlSU44bWFuaWZvbGQ4TWFuaWZvbGRFTGIwRUVFAE5TdDNfXzIyNF9fb3B0aW9uYWxfZGVzdHJ1Y3RfYmFzZUlOOG1hbmlmb2xkOE1hbmlmb2xkRUxiMEVFRQBOU3QzX18yNnZlY3RvcklOOG1hbmlmb2xkOE1hbmlmb2xkRU5TXzlhbGxvY2F0b3JJUzJfRUVFRQBQTlN0M19fMjZ2ZWN0b3JJTjhtYW5pZm9sZDhNYW5pZm9sZEVOU185YWxsb2NhdG9ySVMyX0VFRUUAUEtOU3QzX18yNnZlY3RvcklOOG1hbmlmb2xkOE1hbmlmb2xkRU5TXzlhbGxvY2F0b3JJUzJfRUVFRQBwcAB2cABwcAB2cHBwAHZwcGlwAGlwcABwcHBpAGlwcGlwAE5TdDNfXzI4b3B0aW9uYWxJTjhtYW5pZm9sZDEwU21vb3RobmVzc0VFRQBOU3QzX18yMjdfX29wdGlvbmFsX21vdmVfYXNzaWduX2Jhc2VJTjhtYW5pZm9sZDEwU21vb3RobmVzc0VMYjFFRUUATlN0M19fMjI3X19vcHRpb25hbF9jb3B5X2Fzc2lnbl9iYXNlSU44bWFuaWZvbGQxMFNtb290aG5lc3NFTGIxRUVFAE5TdDNfXzIyMF9fb3B0aW9uYWxfbW92ZV9iYXNlSU44bWFuaWZvbGQxMFNtb290aG5lc3NFTGIxRUVFAE5TdDNfXzIyMF9fb3B0aW9uYWxfY29weV9iYXNlSU44bWFuaWZvbGQxMFNtb290aG5lc3NFTGIxRUVFAE5TdDNfXzIyM19fb3B0aW9uYWxfc3RvcmFnZV9iYXNlSU44bWFuaWZvbGQxMFNtb290aG5lc3NFTGIwRUVFAE5TdDNfXzIyNF9fb3B0aW9uYWxfZGVzdHJ1Y3RfYmFzZUlOOG1hbmlmb2xkMTBTbW9vdGhuZXNzRUxiMUVFRQBQTlN0M19fMjZ2ZWN0b3JJTjhtYW5pZm9sZDEwU21vb3RobmVzc0VOU185YWxsb2NhdG9ySVMyX0VFRUUAUEtOU3QzX18yNnZlY3RvcklOOG1hbmlmb2xkMTBTbW9vdGhuZXNzRU5TXzlhbGxvY2F0b3JJUzJfRUVFRQBwcAB2cABwcAB2cHBwAHZwcGlwAGlwcABwcHBpAGlwcGlwAE5TdDNfXzI4b3B0aW9uYWxJTjZsaW5hbGczdmVjSWRMaTRFRUVFRQBOU3QzX18yMjdfX29wdGlvbmFsX21vdmVfYXNzaWduX2Jhc2VJTjZsaW5hbGczdmVjSWRMaTRFRUVMYjFFRUUATlN0M19fMjI3X19vcHRpb25hbF9jb3B5X2Fzc2lnbl9iYXNlSU42bGluYWxnM3ZlY0lkTGk0RUVFTGIxRUVFAE5TdDNfXzIyMF9fb3B0aW9uYWxfbW92ZV9iYXNlSU42bGluYWxnM3ZlY0lkTGk0RUVFTGIxRUVFAE5TdDNfXzIyMF9fb3B0aW9uYWxfY29weV9iYXNlSU42bGluYWxnM3ZlY0lkTGk0RUVFTGIxRUVFAE5TdDNfXzIyM19fb3B0aW9uYWxfc3RvcmFnZV9iYXNlSU42bGluYWxnM3ZlY0lkTGk0RUVFTGIwRUVFAE5TdDNfXzIyNF9fb3B0aW9uYWxfZGVzdHJ1Y3RfYmFzZUlONmxpbmFsZzN2ZWNJZExpNEVFRUxiMUVFRQBOU3QzX18yNnZlY3RvcklONmxpbmFsZzN2ZWNJZExpNEVFRU5TXzlhbGxvY2F0b3JJUzNfRUVFRQBQTlN0M19fMjZ2ZWN0b3JJTjZsaW5hbGczdmVjSWRMaTRFRUVOU185YWxsb2NhdG9ySVMzX0VFRUUAUEtOU3QzX18yNnZlY3RvcklONmxpbmFsZzN2ZWNJZExpNEVFRU5TXzlhbGxvY2F0b3JJUzNfRUVFRQBwcAB2cABwcAB2cHBwAHZwcGlwAGlwcABwcHBpAGlwcGlwAFBOOG1hbmlmb2xkMTJDcm9zc1NlY3Rpb25FAFBLTjhtYW5pZm9sZDEyQ3Jvc3NTZWN0aW9uRQBwcAB2cABwcHBpAHBwcHAAcHBwaQBwcHBwAHBwcHAAcHBwZABwcHAAaXBwAGRwcABpcHAAcHBwAHBwcGRpZGQAcHBwAHBwcABwcHBpAHBwZGkAcHBwAHZwcHAAcHBwAFBOOG1hbmlmb2xkOE1hbmlmb2xkRQBQS044bWFuaWZvbGQ4TWFuaWZvbGRFAHBwAHZwAHBwcABwcHBwAHBwcHAAcHBwcGQAcHBwcGQAcHBwcABwcHBkAHBwcABwcHAAcHBwaQBwcHBpAHBwcGQAcHBwZGQAcHBwaQBwcHBpaQBwcHBwAHBwcHAAcHBwZGRkAHBwcABpcHAATlN0M19fMjEyYmFzaWNfc3RyaW5nSWNOU18xMWNoYXJfdHJhaXRzSWNFRU5TXzlhbGxvY2F0b3JJY0VFRUUAcHBwAHBwcHAAaXBwAHBwcABkcHAAaXBwAGRwcHBkAHBwcHBwAHBwcGlpAHBwcGlkAHBwcGkAcHBkZGRpaQBwcGRpAHBwAHBwcHAAcHBwZGlkcABwcHBkaQBwcHBpZABwcGlwZGRkAHBwcABpcGkAcHBwAHZwcHAAcHBwAHZwZAB2cGkAaXBkAHZwAE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SWpFRQBOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0lmRUUATjEwZW1zY3JpcHRlbjExbWVtb3J5X3ZpZXdJaEVFAE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SWRFRQBOU3QzX18yMTBfX2Z1bmN0aW9uNl9fZnVuY0lQRnZSTjZsaW5hbGczdmVjSWRMaTJFRUVFUzZfRUUATlN0M19fMjEwX19mdW5jdGlvbjZfX2Jhc2VJRnZSTjZsaW5hbGczdmVjSWRMaTJFRUVFRUUAUEZ2Uk42bGluYWxnM3ZlY0lkTGkyRUVFRQBGdlJONmxpbmFsZzN2ZWNJZExpMkVFRUUATlN0M19fMjEwX19mdW5jdGlvbjZfX2Z1bmNJUEZ2Uk42bGluYWxnM3ZlY0lkTGkzRUVFRVM2X0VFAE5TdDNfXzIxMF9fZnVuY3Rpb242X19iYXNlSUZ2Uk42bGluYWxnM3ZlY0lkTGkzRUVFRUVFAFBGdlJONmxpbmFsZzN2ZWNJZExpM0VFRUUARnZSTjZsaW5hbGczdmVjSWRMaTNFRUVFAE5TdDNfXzIxMF9fZnVuY3Rpb242X19mdW5jSVpONm1hbl9qczlXYXJwQmF0Y2hFUk44bWFuaWZvbGQ4TWFuaWZvbGRFbUUzJF8wRnZOUzNfN1ZlY1ZpZXdJTjZsaW5hbGczdmVjSWRMaTNFRUVFRUVFRQBOU3QzX18yMTBfX2Z1bmN0aW9uNl9fYmFzZUlGdk44bWFuaWZvbGQ3VmVjVmlld0lONmxpbmFsZzN2ZWNJZExpM0VFRUVFRUVFAFpONm1hbl9qczlXYXJwQmF0Y2hFUk44bWFuaWZvbGQ4TWFuaWZvbGRFbUUzJF8wAE5TdDNfXzIxMF9fZnVuY3Rpb242X19mdW5jSVBGdlBkTjZsaW5hbGczdmVjSWRMaTNFRUVQS2RFUzhfRUUATlN0M19fMjEwX19mdW5jdGlvbjZfX2Jhc2VJRnZQZE42bGluYWxnM3ZlY0lkTGkzRUVFUEtkRUVFAFBGdlBkTjZsaW5hbGczdmVjSWRMaTNFRUVQS2RFAEZ2UGRONmxpbmFsZzN2ZWNJZExpM0VFRVBLZEUATlN0M19fMjEwX19mdW5jdGlvbjZfX2Z1bmNJUEZkUktONmxpbmFsZzN2ZWNJZExpM0VFRUVGZFM0X0VFRQBOU3QzX18yMTBfX2Z1bmN0aW9uNl9fYmFzZUlGZE42bGluYWxnM3ZlY0lkTGkzRUVFRUVFAFBGZFJLTjZsaW5hbGczdmVjSWRMaTNFRUVFAEZkUktONmxpbmFsZzN2ZWNJZExpM0VFRUUATlN0M19fMjIwX19zaGFyZWRfcHRyX2VtcGxhY2VJTjhtYW5pZm9sZDhNYW5pZm9sZDRJbXBsRU5TXzlhbGxvY2F0b3JJUzNfRUVFRQAATlN0M19fMjEwX19mdW5jdGlvbjZfX2Z1bmNJWk44bWFuaWZvbGQ4TWFuaWZvbGQ2U3BoZXJlRWRpRTMkXzBGaU42bGluYWxnM3ZlY0lkTGkzRUVFTlM2X0lkTGk0RUVFUzhfRUVFAE5TdDNfXzIxMF9fZnVuY3Rpb242X19iYXNlSUZpTjZsaW5hbGczdmVjSWRMaTNFRUVOUzNfSWRMaTRFRUVTNV9FRUUAWk44bWFuaWZvbGQ4TWFuaWZvbGQ2U3BoZXJlRWRpRTMkXzAAAAEAAAACAAAAAAAAAE5TdDNfXzIxMF9fZnVuY3Rpb242X19mdW5jSVpOMTJfR0xPQkFMX19OXzExNUFkZE5ld0VkZ2VWZXJ0c0VSTlNfM21hcElpTlNfNnZlY3RvcklOUzJfN0VkZ2VQb3NFTlNfOWFsbG9jYXRvcklTNV9FRUVFTlNfNGxlc3NJaUVFTlM2X0lOU180cGFpcklLaVM4X0VFRUVFRVJOUzNfSU5TQl9JaWlFRVM4X05TOV9JU0hfRUVOUzZfSU5TQl9JS1NIX1M4X0VFRUVFRVJLTjhtYW5pZm9sZDNWZWNJTlNfNWFycmF5SWlMbTJFRUVMYjBFRUVSS05TUF9JaUxiMEVFRVNYX1JLTlNPXzlIYWxmZWRnZXNFYm1QTlNPXzE2RXhlY3V0aW9uQ29udGV4dDRJbXBsRUUzJF8wRnZtRUVFAE5TdDNfXzIxMF9fZnVuY3Rpb242X19iYXNlSUZ2bUVFRQBaTjEyX0dMT0JBTF9fTl8xMTVBZGROZXdFZGdlVmVydHNFUk5TdDNfXzIzbWFwSWlOUzBfNnZlY3RvcklOU183RWRnZVBvc0VOUzBfOWFsbG9jYXRvcklTM19FRUVFTlMwXzRsZXNzSWlFRU5TNF9JTlMwXzRwYWlySUtpUzZfRUVFRUVFUk5TMV9JTlM5X0lpaUVFUzZfTlM3X0lTRl9FRU5TNF9JTlM5X0lLU0ZfUzZfRUVFRUVFUktOOG1hbmlmb2xkM1ZlY0lOUzBfNWFycmF5SWlMbTJFRUVMYjBFRUVSS05TTl9JaUxiMEVFRVNWX1JLTlNNXzlIYWxmZWRnZXNFYm1QTlNNXzE2RXhlY3V0aW9uQ29udGV4dDRJbXBsRUUzJF8wAE5TdDNfXzIxMF9fZnVuY3Rpb242X19mdW5jSVpOMTJfR0xPQkFMX19OXzExNUFkZE5ld0VkZ2VWZXJ0c0VSTlNfM21hcElpTlNfNnZlY3RvcklOUzJfN0VkZ2VQb3NFTlNfOWFsbG9jYXRvcklTNV9FRUVFTlNfNGxlc3NJaUVFTlM2X0lOU180cGFpcklLaVM4X0VFRUVFRVJOUzNfSU5TQl9JaWlFRVM4X05TOV9JU0hfRUVOUzZfSU5TQl9JS1NIX1M4X0VFRUVFRVJLTjhtYW5pZm9sZDNWZWNJTlNfNWFycmF5SWlMbTJFRUVMYjBFRUVSS05TUF9JaUxiMEVFRVNYX1JLTlNPXzlIYWxmZWRnZXNFYm1QTlNPXzE2RXhlY3V0aW9uQ29udGV4dDRJbXBsRUUzJF8xRnZtRUVFAFpOMTJfR0xPQkFMX19OXzExNUFkZE5ld0VkZ2VWZXJ0c0VSTlN0M19fMjNtYXBJaU5TMF82dmVjdG9ySU5TXzdFZGdlUG9zRU5TMF85YWxsb2NhdG9ySVMzX0VFRUVOUzBfNGxlc3NJaUVFTlM0X0lOUzBfNHBhaXJJS2lTNl9FRUVFRUVSTlMxX0lOUzlfSWlpRUVTNl9OUzdfSVNGX0VFTlM0X0lOUzlfSUtTRl9TNl9FRUVFRUVSS044bWFuaWZvbGQzVmVjSU5TMF81YXJyYXlJaUxtMkVFRUxiMEVFRVJLTlNOX0lpTGIwRUVFU1ZfUktOU01fOUhhbGZlZGdlc0VibVBOU01fMTZFeGVjdXRpb25Db250ZXh0NEltcGxFRTMkXzEAAQAAAAIAAAAAAAAAAgAAAAAAAAABAAAAAE44bWFuaWZvbGQ3Q3NnTm9kZUUATlN0M19fMjIzZW5hYmxlX3NoYXJlZF9mcm9tX3RoaXNJTjhtYW5pZm9sZDdDc2dOb2RlRUVFAE44bWFuaWZvbGQxMUNzZ0xlYWZOb2RlRQBOOG1hbmlmb2xkOUNzZ09wTm9kZUUATlN0M19fMjIwX19zaGFyZWRfcHRyX2VtcGxhY2VJTjhtYW5pZm9sZDEzQ3NnU3RhY2tGcmFtZUVOU185YWxsb2NhdG9ySVMyX0VFRUUATlN0M19fMjIwX19zaGFyZWRfcHRyX2VtcGxhY2VJTjhtYW5pZm9sZDlDc2dPcE5vZGVFTlNfOWFsbG9jYXRvcklTMl9FRUVFAE5TdDNfXzIyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSUtOOG1hbmlmb2xkOE1hbmlmb2xkNEltcGxFTlNfOWFsbG9jYXRvcklTM19FRUVFAE5TdDNfXzIyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSU44bWFuaWZvbGQxMUNzZ0xlYWZOb2RlRU5TXzlhbGxvY2F0b3JJUzJfRUVFRQBOU3QzX18yMjBfX3NoYXJlZF9wdHJfZW1wbGFjZUlOU182dmVjdG9ySU5TXzEwc2hhcmVkX3B0cklOOG1hbmlmb2xkN0NzZ05vZGVFRUVOU185YWxsb2NhdG9ySVM1X0VFRUVOUzZfSVM4X0VFRUUATlN0M19fMjIwX19zaGFyZWRfcHRyX2VtcGxhY2VJTlNfMTVyZWN1cnNpdmVfbXV0ZXhFTlNfOWFsbG9jYXRvcklTMV9FRUVFAAAAAAAAAAACAAAAAQAAAE5TdDNfXzIyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSU44bWFuaWZvbGQxNkV4ZWN1dGlvbkNvbnRleHQ0SW1wbEVOU185YWxsb2NhdG9ySVMzX0VFRUUAAAABAAAAAgBBhvkAC4cB8L8AAAAAAADwvwAAAAAAAPA/AAAAAAAA8L8AAAAAAADwPwAAAAAAAPC/AAAAAAAA8D8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AgAAAAAAAAABAAAAAAAAAAMAAAABAAAAAgAAAAMAAAAAAAAAAwAAAAIAAAABAEG++gALAvA/AEHO+gALAvA/AEHm+gALEvA/AAAAAAAA8D8AAAAAAADwPwBBjvsACwLwPwBBnvsACxLwPwAAAAAAAPA/AAAAAAAA8D8AQb77AAufAfA/AAAAAAAA8D8AAAAAAADwPwEAAAAAAAAABAAAAAIAAAAEAAAAAAAAAAEAAAADAAAAAAAAAAMAAAABAAAABQAAAAMAAAACAAAAAAAAAAMAAAAHAAAAAgAAAAUAAAAEAAAABgAAAAUAAAABAAAABAAAAAYAAAAEAAAAAgAAAAcAAAAGAAAAAgAAAAcAAAADAAAABQAAAAcAAAAFAAAABgBB5vwACwLwPwBB/vwACwLwvwBBnv0ACwLwPwBBtv0ACwLwvwBB1v0ACwLwPwBB7v0AC8oI8L8AAAAAAgAAAAQAAAABAAAABQAAAAMAAAACAAAAAQAAAAQAAAADAAAABQAAAAAAAAABAAAAAwAAAAQAAAAAAAAABQAAAAIAAAADAAAAAAAAAAQAAAACAAAABQAAAAEAAAABAAAAAgAAAAAAAABOU3QzX18yMTBfX2Z1bmN0aW9uNl9fZnVuY0laTjhtYW5pZm9sZDhNYW5pZm9sZDRJbXBsNFdhcnBFTlNfOGZ1bmN0aW9uSUZ2Uk42bGluYWxnM3ZlY0lkTGkzRUVFRUVFRTMkXzBGdk5TMl83VmVjVmlld0lTOF9FRUVFRQBaTjhtYW5pZm9sZDhNYW5pZm9sZDRJbXBsNFdhcnBFTlN0M19fMjhmdW5jdGlvbklGdlJONmxpbmFsZzN2ZWNJZExpM0VFRUVFRUUzJF8wAAAAAAAAAE+7YQVnrN0/GC1EVPsh6T+b9oHSC3PvPxgtRFT7Ifk/4mUvIn8rejwHXBQzJqaBPL3L8HqIB3A8B1wUMyamkTxOU3QzX18yMjBfX3NoYXJlZF9wdHJfZW1wbGFjZUlOU181bXV0ZXhFTlNfOWFsbG9jYXRvcklTMV9FRUVFAE5TdDNfXzIxMF9fZnVuY3Rpb242X19mdW5jSVpOSzhtYW5pZm9sZDhNYW5pZm9sZDZSZWZpbmVFaUUzJF8wRmlONmxpbmFsZzN2ZWNJZExpM0VFRU5TNl9JZExpNEVFRVM4X0VFRQBaTks4bWFuaWZvbGQ4TWFuaWZvbGQ2UmVmaW5lRWlFMyRfMABOU3QzX18yMTBfX2Z1bmN0aW9uNl9fZnVuY0laTks4bWFuaWZvbGQ4TWFuaWZvbGQxNFJlZmluZVRvTGVuZ3RoRWRFMyRfMEZpTjZsaW5hbGczdmVjSWRMaTNFRUVOUzZfSWRMaTRFRUVTOF9FRUUAWk5LOG1hbmlmb2xkOE1hbmlmb2xkMTRSZWZpbmVUb0xlbmd0aEVkRTMkXzAATlN0M19fMjEwX19mdW5jdGlvbjZfX2Z1bmNJWk5LOG1hbmlmb2xkOE1hbmlmb2xkMTdSZWZpbmVUb1RvbGVyYW5jZUVkRTMkXzBGaU42bGluYWxnM3ZlY0lkTGkzRUVFTlM2X0lkTGk0RUVFUzhfRUVFAFpOSzhtYW5pZm9sZDhNYW5pZm9sZDE3UmVmaW5lVG9Ub2xlcmFuY2VFZEUzJF8wAE5TdDNfXzIyMF9fc2hhcmVkX3B0cl9wb2ludGVySVBOOG1hbmlmb2xkOE1hbmlmb2xkNEltcGxFTlNfMTRkZWZhdWx0X2RlbGV0ZUlTM19FRU5TXzlhbGxvY2F0b3JJUzNfRUVFRQBOU3QzX18yMTRkZWZhdWx0X2RlbGV0ZUlOOG1hbmlmb2xkOE1hbmlmb2xkNEltcGxFRUUAAAAAABgtRFT7Iek/GC1EVPsh6b/SITN/fNkCQNIhM3982QLAAEHHhgELEYAYLURU+yEJQBgtRFT7IQnAAEHshgELBQEAAAABAEGEhwELAQEAQZiHAQslAQAAAAAAAAD/////AAAAAAAAAAABAAAAAAAAAP////8AAAAAAQBByIcBCxz/////AQAAAP///////////////wEAAAD/////AEH0hwELBP////8AQYiIAQtJ/////wAAAAAAAAAA//////////8BAAAA/////wAAAAD/////AQAAAP//////////AAAAAAEAAAACAAAAAAAAAAEAAAABAAAAAgBB4IgBC7AR////////////////AAAAAAMAAAAEAAAAAAAAAAEAAAAFAAAAAQAAAAUAAAADAAAAAQAAAAQAAAACAAAAAQAAAAAAAAADAAAAAgAAAAUAAAAAAAAABQAAAAMAAAACAAAAAgAAAAMAAAAFAAAAAAAAAAUAAAACAAAAAwAAAAAAAAABAAAAAgAAAAQAAAABAAAAAwAAAAUAAAABAAAABQAAAAEAAAAAAAAABAAAAAMAAAAAAAAA////////////////////////////////////////////////////////////////AwAAAAQAAAABAAAA////////////////AwAAAAIAAAABAAAAAAAAAAQAAAACAAAA////////////////////////////////AgAAAAQAAAAAAAAAAQAAAAIAAAADAAAA////////////////AQAAAAQAAAADAAAA////////////////////////////////////////////////TlN0M19fMjEwX19mdW5jdGlvbjZfX2Z1bmNJWk44bWFuaWZvbGQ4TWFuaWZvbGQ0SW1wbDEwU2V0Tm9ybWFsc0VpZEUzJF8wRlpOUzRfMTBTZXROb3JtYWxzRWlkRThGYWNlRWRnZWlFRUUATlN0M19fMjEwX19mdW5jdGlvbjZfX2Jhc2VJRlpOOG1hbmlmb2xkOE1hbmlmb2xkNEltcGwxMFNldE5vcm1hbHNFaWRFOEZhY2VFZGdlaUVFRQBaTjhtYW5pZm9sZDhNYW5pZm9sZDRJbXBsMTBTZXROb3JtYWxzRWlkRTMkXzAATlN0M19fMjEwX19mdW5jdGlvbjZfX2Z1bmNJWk44bWFuaWZvbGQ4TWFuaWZvbGQ0SW1wbDEwU2V0Tm9ybWFsc0VpZEUzJF8xRnZpUktaTlM0XzEwU2V0Tm9ybWFsc0VpZEU4RmFjZUVkZ2VSUzZfRUVFAE5TdDNfXzIxMF9fZnVuY3Rpb242X19iYXNlSUZ2aVJLWk44bWFuaWZvbGQ4TWFuaWZvbGQ0SW1wbDEwU2V0Tm9ybWFsc0VpZEU4RmFjZUVkZ2VSUzVfRUVFAFpOOG1hbmlmb2xkOE1hbmlmb2xkNEltcGwxMFNldE5vcm1hbHNFaWRFMyRfMQBOU3QzX18yMTBfX2Z1bmN0aW9uNl9fZnVuY0laWk44bWFuaWZvbGQ4TWFuaWZvbGQ0SW1wbDE0Q3JlYXRlVGFuZ2VudHNFaUVOSzMkXzBjbEVpRVVsaUVfRlpaTlM0XzE0Q3JlYXRlVGFuZ2VudHNFaUVOS1M1X2NsRWlFMTBGbGF0Tm9ybWFsaUVFRQBOU3QzX18yMTBfX2Z1bmN0aW9uNl9fYmFzZUlGWlpOOG1hbmlmb2xkOE1hbmlmb2xkNEltcGwxNENyZWF0ZVRhbmdlbnRzRWlFTkszJF8wY2xFaUUxMEZsYXROb3JtYWxpRUVFAFpaTjhtYW5pZm9sZDhNYW5pZm9sZDRJbXBsMTRDcmVhdGVUYW5nZW50c0VpRU5LMyRfMGNsRWlFVWxpRV8ATlN0M19fMjEwX19mdW5jdGlvbjZfX2Z1bmNJWlpOOG1hbmlmb2xkOE1hbmlmb2xkNEltcGwxNENyZWF0ZVRhbmdlbnRzRWlFTkszJF8wY2xFaUVVbGlSS1paTlM0XzE0Q3JlYXRlVGFuZ2VudHNFaUVOS1M1X2NsRWlFMTBGbGF0Tm9ybWFsUzhfRV9GdmlTOF9SUzZfRUVFAE5TdDNfXzIxMF9fZnVuY3Rpb242X19iYXNlSUZ2aVJLWlpOOG1hbmlmb2xkOE1hbmlmb2xkNEltcGwxNENyZWF0ZVRhbmdlbnRzRWlFTkszJF8wY2xFaUUxMEZsYXROb3JtYWxSUzZfRUVFAFpaTjhtYW5pZm9sZDhNYW5pZm9sZDRJbXBsMTRDcmVhdGVUYW5nZW50c0VpRU5LMyRfMGNsRWlFVWxpUktaWk5TMV8xNENyZWF0ZVRhbmdlbnRzRWlFTktTMl9jbEVpRTEwRmxhdE5vcm1hbFM1X0VfAAEAAAACAAAAAAAAAAIAAAAAAAAAAQAAAAEAAAACAAAAAAAAAAEAAAACAAAAAAAAAE5TdDNfXzIyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSUtOOG1hbmlmb2xkOFBhdGhJbXBsRU5TXzlhbGxvY2F0b3JJUzJfRUVFRQBOMTFDbGlwcGVyMkxpYjE3Q2xpcHBlcjJFeGNlcHRpb25FAE4xMUNsaXBwZXIyTGliOENsaXBwZXJERQBOMTFDbGlwcGVyMkxpYjlQb2x5UGF0aERFAE4xMUNsaXBwZXIyTGliOFBvbHlQYXRoRQBOU3QzX18yMTBfX2Z1bmN0aW9uNl9fZnVuY0laTks4bWFuaWZvbGQxMkNyb3NzU2VjdGlvbjRXYXJwRU5TXzhmdW5jdGlvbklGdlJONmxpbmFsZzN2ZWNJZExp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";var zfe=null,KHe=null,OYt=null;var eUo=()=>{let e=globalThis.atob(HYt),t=new Uint8Array(e.length);for(let n=0;n<e.length;n++)t[n]=e.charCodeAt(n);return t},tUo=async()=>{let e=Boolean(globalThis.process?.versions?.node&&globalThis.process?.type!=="renderer"),t=OYt?{locateFile:()=>OYt}:e?void 0:{locateFile:()=>"manifold.wasm",wasmBinary:eUo()},n=await FYt(t);return n.setup(),n},zYt=async()=>{if(zfe)return zfe;return KHe??=tUo().then((e)=>(zfe=e,e)).catch((e)=>{throw KHe=null,e}),KHe},jHe=()=>zfe;qa();Yo();var wx=1e6,dne=(e)=>{let t=0;for(let n=0;n<e.length;n++){let o=e[n],i=e[(n+1)%e.length];t+=o.x*i.y-i.x*o.y}return t/2},nUo=(e)=>{let t=0,n={minX:Number.POSITIVE_INFINITY,minY:Number.POSITIVE_INFINITY,maxX:Number.NEGATIVE_INFINITY,maxY:Number.NEGATIVE_INFINITY};for(let o of e){t+=o.length;for(let[i,r]of o)n.minX=Math.min(n.minX,i),n.minY=Math.min(n.minY,r),n.maxX=Math.max(n.maxX,i),n.maxY=Math.max(n.maxY,r)}return{polygonCount:e.length,pointCount:t,bbox:t>0?n:null,scale:wx}},oUo=(e,t)=>{if(!Number.isFinite(e.x)||!Number.isFinite(e.y))throw Error(`${t} received non-finite point (${e.x}, ${e.y})`)},GYt=(e,t)=>e.x===t.x&&e.y===t.y,EL=(e,t="normalizeRing")=>{let n=[];for(let i of e){oUo(i,t);let r={x:Math.round(i.x*wx)/wx,y:Math.round(i.y*wx)/wx},s=n[n.length-1];if(!s||!GYt(s,r))n.push(r)}if(n.length>1&&GYt(n[0],n[n.length-1]))n.pop();if(new Set(n.map((i)=>`${i.x},${i.y}`)).size<3||Math.abs(dne(n))<0.000000000000000001)return[];return n},une=(e,t="toScaledManifoldPolygons")=>{let n=[];for(let o of e){let i=EL(o,t);if(i.length<3)continue;let r=dne(i)<0?[...i].reverse():i;n.push(r.map((s)=>[Math.round(s.x*wx),Math.round(s.y*wx)]))}return n},WYt=(e)=>e.map((t)=>EL(t.map(([n,o])=>({x:n/wx,y:o/wx})),"fromScaledManifoldPolygons")).filter((t)=>t.length>=3),YYt=(e,t)=>{let n=dne(e);return t==="positive"&&n<0||t==="negative"&&n>0?[...e].reverse():e},VYt=(e)=>e.map((t)=>({x:t.x,y:t.y})),iUo=(e)=>{let t=[];for(let n of e){if(n.outerRing.length<3)continue;let o=YYt(n.outerRing,"negative"),i=n.innerRings.filter((r)=>r.length>=3).map((r)=>YYt(r,"positive"));t.push({outer_ring:{vertices:VYt(o)},inner_rings:i.map((r)=>({vertices:VYt(r)}))})}return t},rUo=(e)=>{let t=e.board_edge_margin??0;if(e.outline&&e.outline.length>0)return EL(e.outline,"getBoardPolygon.outline");let{bounds:n}=e,o={minX:n.minX+t,minY:n.minY+t,maxX:n.maxX-t,maxY:n.maxY-t};if(o.minX>=o.maxX||o.minY>=o.maxY)return[];return[{x:o.minX,y:o.minY},{x:o.maxX,y:o.minY},{x:o.maxX,y:o.maxY},{x:o.minX,y:o.maxY}]},XYt=async()=>{await zYt()},sUo=()=>Boolean(jHe()),hne=()=>{let e=jHe();if(!e)throw Error("Manifold geometry has not been initialized. Call initializeManifoldGeometry() before solving copper pours.");return e.CrossSection},dT=(e,t,n)=>{try{return n()}catch(o){let i=nUo(t),r=o instanceof Error?o.message:String(o);throw Error(`${e} failed: ${r}; details=${JSON.stringify(i)}`)}},aUo=0.00000001,ZHe=()=>hne().square([0,0]),cUo=(e,t="Positive")=>{let n=une([e],"crossSectionFromPolygon"),o=hne();if(n.length===0)return ZHe();return dT("crossSectionFromPolygon",n,()=>o.ofPolygons(n,t))},qHe=(e,t="Positive")=>{let n=une(e,"crossSectionFromPolygons"),o=hne();if(n.length===0)return ZHe();return dT("crossSectionFromPolygons",n,()=>o.ofPolygons(n,t))},KYt=(e)=>{let t=e.filter((o)=>!o.isEmpty()),n=hne();if(t.length===0)return ZHe();return dT("composeCrossSections",[],()=>n.compose(t))},Yfe=(e,t,n="Miter")=>{let o=une([e],"offsetPolygon");if(o.length===0||t<=0)return o.length===0?[]:[EL(e)];let i=t*wx,r=hne(),s=dT("offsetPolygon.input",o,()=>r.ofPolygons(o,"Positive")),a=dT("offsetPolygon.offset",o,()=>s.offset(i,n,2,32));return WYt(a.toPolygons())},lUo=(e,t,n="Miter")=>{if(e.isEmpty()||t<=0)return e;let o=t*wx,i=e.toPolygons();return dT("offsetCrossSection",i,()=>e.offset(o,n,2,32))},jYt=(e,t)=>{let n=KYt(t);if(e.isEmpty()||n.isEmpty())return e;return dT("subtractCrossSectionBlockers",[...e.toPolygons(),...n.toPolygons()],()=>e.subtract(n))},dUo=(e,t)=>{let n=cUo(e),o=qHe(t);if(n.isEmpty()||o.isEmpty())return n;let i=[...une([e],"subtractBlockersFromPour.pour"),...une(t,"subtractBlockersFromPour.blockers")];return dT("subtractBlockersFromPour",i,()=>n.subtract(o))},uUo=(e,t=aUo)=>{if(e.isEmpty())return e;let n=t*wx*wx,o=e.decompose().filter((i)=>Math.abs(i.area())>=n);return KYt(o)},qYt=(e)=>{let t=[];for(let n of e.decompose()){let o=WYt(n.toPolygons());if(o.length===0)continue;let i=o.reduce((s,a)=>Math.abs(dne(a))>Math.abs(dne(s))?a:s),r=o.filter((s)=>s!==i);t.push({outerRing:i,innerRings:r})}return t},lne=(e,t,n=32)=>{let o=[];for(let i=0;i<n;i++){let r=i/n*2*Math.PI;o.push({x:e.x+t*Math.cos(r),y:e.y+t*Math.sin(r)})}return o},JYt=(e,t,n,o=0,i=32)=>{if(t<=0||n<=0)return[];let r=t/2,s=n/2,a=o*Math.PI/180,c=Math.cos(a),l=Math.sin(a),d=[];for(let u=0;u<i;u++){let h=u/i*2*Math.PI,A=r*Math.cos(h),m=s*Math.sin(h);d.push({x:e.x+A*c-m*l,y:e.y+A*l+m*c})}return d},JHe=(e,t,n,o)=>[{x:e,y:t},{x:n,y:t},{x:n,y:o},{x:e,y:o}],$Yt=(e,t,n,o)=>{let i=t/2,r=n/2,s=o*Math.PI/180,a=Math.cos(s),c=Math.sin(s);return[{x:-i,y:-r},{x:i,y:-r},{x:i,y:r},{x:-i,y:r}].map((l)=>({x:e.x+l.x*a-l.y*c,y:e.y+l.x*c+l.y*a}))},$He=(e,t,n)=>{let o=Math.hypot(e.x-t.x,e.y-t.y);if(o===0)return[];let i=(e.x+t.x)/2,r=(e.y+t.y)/2,s=Math.atan2(t.y-e.y,t.x-e.x),a=Math.cos(s),c=Math.sin(s),l=o/2,d=n/2;return[{x:-l,y:-d},{x:l,y:-d},{x:l,y:d},{x:-l,y:d}].map((u)=>({x:i+u.x*a-u.y*c,y:r+u.x*c+u.y*a}))},ZYt=(e,t,n,o,i=0,r=32)=>{if(o<=0)return[];let s=n>=t,a=Math.max(t,n)-2*o,c=Math.max(0,a/2),d=(s?Math.PI/2:0)+i*Math.PI/180,u=Math.cos(d),h=Math.sin(d),A={x:e.x-c*u,y:e.y-c*h},m={x:e.x+c*u,y:e.y+c*h};if(c===0)return lne(e,o,r);let p=[],g=Math.max(4,Math.floor(r/2));for(let _=0;_<=g;_++){let f=d-Math.PI/2+_/g*Math.PI;p.push({x:m.x+o*Math.cos(f),y:m.y+o*Math.sin(f)})}for(let _=0;_<=g;_++){let f=d+Math.PI/2+_/g*Math.PI;p.push({x:A.x+o*Math.cos(f),y:A.y+o*Math.sin(f)})}return p},hUo=(e)=>{if(e.shape==="rect")return{x:(e.bounds.minX+e.bounds.maxX)/2,y:(e.bounds.minY+e.bounds.maxY)/2};if(e.shape==="polygon"){let t=e.points.reduce((n,o)=>({minX:Math.min(n.minX,o.x),minY:Math.min(n.minY,o.y),maxX:Math.max(n.maxX,o.x),maxY:Math.max(n.maxY,o.y)}),{minX:Number.POSITIVE_INFINITY,minY:Number.POSITIVE_INFINITY,maxX:Number.NEGATIVE_INFINITY,maxY:Number.NEGATIVE_INFINITY});return{x:(t.minX+t.maxX)/2,y:(t.minY+t.maxY)/2}}return{x:e.x,y:e.y}},mUo=(e)=>{if(e.shape==="rotated_rect"||e.shape==="pill"||e.shape==="oval")return e.ccwRotation;return 0},UYt=(e,t)=>{if(e.shape==="circle")return[lne({x:e.x,y:e.y},e.radius+t)];if(e.shape==="pill")return[ZYt({x:e.x,y:e.y},e.width+t*2,e.height+t*2,e.radius+t,e.ccwRotation)];if(e.shape==="oval"){let n=JYt({x:e.x,y:e.y},e.width,e.height,e.ccwRotation);return t>0?Yfe(n,t,"Round"):[n]}if(e.shape==="rect")return[JHe(e.bounds.minX-t,e.bounds.minY-t,e.bounds.maxX+t,e.bounds.maxY+t)];if(e.shape==="polygon"){let n=EL(e.points,"generateThermalReliefClearances.polygonPad");return t>0?Yfe(n,t,"Round"):[n]}return[$Yt({x:e.x,y:e.y},e.width+t*2,e.height+t*2,e.ccwRotation)]},pUo=(e)=>e.shape==="circle"||e.shape==="oval"||e.shape==="pill"||e.shape==="polygon"||e.shape==="rect"||e.shape==="rotated_rect",AUo=(e,t,n,o=4)=>{if(!pUo(e)||t<=0)return[];if(typeof n!=="number"||!Number.isFinite(n)||n<=0)throw Error("thermal_relief_spoke_width must be greater than 0");if(!Number.isInteger(o)||o<1)throw Error("thermal_relief_spoke_count must be a positive integer");let i=UYt(e,0),r=UYt(e,t),s=hUo(e),a=Math.max(...r.flatMap((A)=>A).map((A)=>Math.hypot(A.x-s.x,A.y-s.y)))+n,c=mUo(e)*Math.PI/180,l=[];for(let A=0;A<o;A++){let m=c+A/o*Math.PI*2;l.push($He(s,{x:s.x+Math.cos(m)*a,y:s.y+Math.sin(m)*a},n))}let d=qHe(r),u=qHe([...i,...l]),h=jYt(d,[u]);return qYt(h).map(({outerRing:A})=>A)},_Uo=(e)=>e.shape==="rect",gUo=(e)=>e.shape==="rotated_rect",fUo=(e)=>e.shape==="trace",yUo=(e)=>e.shape==="circle",xUo=(e)=>e.shape==="pill",CUo=(e)=>e.shape==="oval",IUo=(e)=>e.shape==="polygon",bUo=(e,t,n,o)=>{let i=[],{padMargin:r,traceMargin:s,board_edge_margin:a,cutoutMargin:c,use_thermal_reliefs:l,thermal_relief_spoke_width:d,thermal_relief_spoke_count:u}=n;if(o&&o.length>0&&a&&a>0){let h=EL(o,"processObstacles.boardOutline");for(let A=0;A<h.length;A++){let m=h[A===0?h.length-1:A-1],p=h[A],g=h[(A+1)%h.length];if(!m||!p||!g)continue;let _={x:p.x-m.x,y:p.y-m.y},f={x:g.x-p.x,y:g.y-p.y},y=_.x*f.y-_.y*f.x;if(i.push(lne(p,a)),y<0)i.push(JHe(p.x-a,p.y-a,p.x+a,p.y+a))}for(let A=0;A<h.length;A++){let m=h[A],p=h[(A+1)%h.length];if(!m||!p)continue;let g=$He(m,p,a*2);if(g.length>0)i.push(g)}}for(let h of e){if(h.connectivityKey===t){if((h.isPlatedHole||h.isSmtPad)&&l)i.push(...AUo(h,r,d,u));continue}let m=h.connectivityKey.startsWith("hole:")||h.connectivityKey.startsWith("cutout:"),p=h.connectivityKey.startsWith("keepout:"),g=(_)=>p?0:m?c??0:_;if(yUo(h)){let _=g(r);i.push(lne({x:h.x,y:h.y},h.radius+_));continue}if(xUo(h)){let _=g(r);i.push(ZYt({x:h.x,y:h.y},h.width+_*2,h.height+_*2,h.radius+_,h.ccwRotation));continue}if(CUo(h)){let _=g(r),f=JYt({x:h.x,y:h.y},h.width,h.height,h.ccwRotation);i.push(..._>0?Yfe(f,_,"Round"):[f]);continue}if(_Uo(h)){let _=g(r),{bounds:f}=h;i.push(JHe(f.minX-_,f.minY-_,f.maxX+_,f.maxY+_));continue}if(gUo(h)){let _=g(r);i.push($Yt({x:h.x,y:h.y},h.width+_*2,h.height+_*2,h.ccwRotation));continue}if(IUo(h)){let _=g(r),f=new Set,y=h.points.filter((C)=>{let I=`${C.x},${C.y}`;if(f.has(I))return!1;return f.add(I),!0});if(y.length<3)continue;let x=EL(y,"processObstacles.polygonPad");if(x.length<3)continue;if(_<=0){i.push(x);continue}i.push(...Yfe(x,_));continue}if(fUo(h)){for(let _ of h.segments)i.push(lne(_,h.width/2+s));for(let _=0;_<h.segments.length-1;_++){let f=h.segments[_],y=h.segments[_+1];if(!f||!y)continue;let x=$He(f,y,h.width+s*2);if(x.length>0)i.push(x)}}}return{polygonsToSubtract:i}},Ufe=class extends AI{constructor(e){super(e);this.input=e}input;pipelineDef=[];getSolverName(){return"CopperPourPipelineSolver"}getOutput(){if(!sUo())throw Error("Manifold geometry has not been initialized. Call initializeManifoldGeometry() before solving copper pours.");let e=this.input.regionsForPour.map(()=>[]),t=[];for(let n=this.input.regionsForPour.length-1;n>=0;n--){let o=this.input.regionsForPour[n],i=rUo(o),r=this.input.pads.filter((h)=>h.layer===o.layer),{polygonsToSubtract:s}=bUo(r,o.connectivityKey,{padMargin:o.padMargin,traceMargin:o.traceMargin,board_edge_margin:o.board_edge_margin,cutoutMargin:o.cutout_margin,use_thermal_reliefs:o.use_thermal_reliefs,thermal_relief_spoke_width:o.thermal_relief_spoke_width,thermal_relief_spoke_count:o.thermal_relief_spoke_count},o.boardEdgeOutline??o.outline),a=o.pourMargin??Math.max(o.padMargin,o.traceMargin),c=t.filter((h)=>h.layer===o.layer&&h.connectivityKey!==o.connectivityKey).map((h)=>lUo(h.section,Math.max(a,h.pourMargin))),l=dUo(i,s),d=uUo(jYt(l,c)),u=qYt(d);e[n]=iUo(u),t.push({layer:o.layer,connectivityKey:o.connectivityKey,pourMargin:a,section:d})}return{brep_shapes:e.flat(),brep_shapes_by_region:e}}},SUo=(e)=>{let t=e.subcircuit_connectivity_map_key;return typeof t==="string"&&t.length>0?t:void 0},Vfe=(e)=>{let t=e.subcircuit_id;return typeof t==="string"&&t.length>0?t:void 0},Gfe=(e,t)=>e?`subcircuit:${e}:connectivity:${t}`:t,PUo=(e,t)=>{if(!t)return;let n={};for(let r of e){if(r.type!=="source_group")continue;let s=r.source_group_id,a=Vfe(r);if(typeof s==="string"&&a)n[s]=a}let o=new Set([t]),i=!0;while(i){i=!1;for(let r of e){if(r.type!=="source_group")continue;let s=Vfe(r);if(!s||o.has(s))continue;let{parent_subcircuit_id:a,parent_source_group_id:c}=r,l=typeof c==="string"?n[c]:void 0;if(typeof a==="string"&&o.has(a)||l&&o.has(l))o.add(s),i=!0}}return o},vUo=(e,t,n)=>{let o=PUo(e,n),i={},r={},s={},a=new Set;for(let d of e){let u=JR(d),h=SUo(d),A=Vfe(d);if(u)r[u]=A;if(o&&(!A||!o.has(A)))continue;if(u&&h){let m=Gfe(A,h);i[u]=m,a.add(h),s[m]??=[],s[m].push(u)}}let c={};for(let[d,u]of Object.entries(t.netMap)){let h=new Set(u.map((m)=>i[m]).filter((m)=>Boolean(m))),A=Array.from(h).sort()[0];if(A)c[d]=A}let l={};for(let[d,u]of Object.entries(s)){let h=new Set;for(let m of u){let p=t.getNetConnectedToId(m),g=p?c[p]:void 0;h.add(g??d)}if(h.size>1)throw Error(`subcircuit_connectivity_map_key "${d}" maps to multiple global connectivity keys: ${Array.from(h).join(", ")}`);let A=h.values().next().value;if(A)l[d]=A}return{knownSubcircuitConnectivityKeys:new Set([...Object.keys(s),...a]),descendantSubcircuitIds:o,getScopedSubcircuitConnectivityKey:Gfe,getElementSubcircuitId:Vfe,resolveSubcircuitConnectivityKey(d,u){let h=Object.keys(s).filter((m)=>m===Gfe(u,d));if(u&&h.length===0&&o)h.push(...Object.keys(s).filter((m)=>m.endsWith(`:connectivity:${d}`)));if(!u)h.push(...Object.keys(s).filter((m)=>m.endsWith(`:connectivity:${d}`)));let A=Array.from(new Set(h));if(A.length===0){if(u&&o)throw Error(`No subcircuit_connectivity_map_key "${d}" found in subcircuit "${u}" or its child subcircuits.`);return Gfe(u,d)}if(A.length>1)throw Error(`subcircuit_connectivity_map_key "${d}" exists in multiple subcircuits. Pass subcircuit_id to disambiguate.`);return l[A[0]]??A[0]},getSubcircuitConnectivityKeyForId(d){if(o){let A=r[d];if(!A||!o.has(A))return}let u=i[d],h=t.getNetConnectedToId(d);if(!h)return u?l[u]??u:void 0;return c[h]??(u?l[u]:void 0)??u}}},EUo=(e,t,n)=>{if(t.subcircuit_connectivity_map_key)return n.resolveSubcircuitConnectivityKey(t.subcircuit_connectivity_map_key,t.subcircuit_id);if(t.source_net_id){let o=e.find((i)=>i.type==="source_net"&&i.source_net_id===t.source_net_id);if(!o)throw Error(`No source_net found with id "${t.source_net_id}"`);if(!o.subcircuit_connectivity_map_key)throw Error(`source_net "${t.source_net_id}" has no subcircuit_connectivity_map_key`);return n.resolveSubcircuitConnectivityKey(o.subcircuit_connectivity_map_key,o.subcircuit_id??t.subcircuit_id)}if(t.source_net_name){let o=e.find((i)=>i.type==="source_net"&&i.name===t.source_net_name&&(!t.subcircuit_id||Boolean(n.descendantSubcircuitIds?.has(i.subcircuit_id??""))));if(!o)throw Error(`No source_net found with name "${t.source_net_name}"`);if(!o.subcircuit_connectivity_map_key)throw Error(`source_net "${t.source_net_name}" has no subcircuit_connectivity_map_key`);return n.resolveSubcircuitConnectivityKey(o.subcircuit_connectivity_map_key,o.subcircuit_id??t.subcircuit_id)}if(t.pour_connectivity_key){if(!n.knownSubcircuitConnectivityKeys.has(t.pour_connectivity_key))throw Error("pour_connectivity_key must be a subcircuit_connectivity_map_key. Use subcircuit_connectivity_map_key, source_net_id, or source_net_name instead of a generated connectivity-map id.");return n.resolveSubcircuitConnectivityKey(t.pour_connectivity_key,t.subcircuit_id)}throw Error("Copper pour requires source_net_id, source_net_name, or subcircuit_connectivity_map_key")},eOe=(e,t)=>{if(Array.isArray(t)){if(t.length===0)return{pads:[],regionsForPour:[]};let m=t[0].subcircuit_id;if(t.some((_)=>_.subcircuit_id!==m))throw Error("All copper pours in one input problem must use the same subcircuit_id");let p=t.map((_)=>eOe(e,_)),g=new Map;for(let _ of p)for(let f of _.pads)g.set(`${f.layer}:${f.padId}`,f);return{pads:[...g.values()],regionsForPour:p.flatMap((_)=>_.regionsForPour)}}let n=t,o=e.find((m)=>m.type==="pcb_board");if(!o)throw Error("No pcb_board found in circuit json");let i=js(e),r=vUo(e,i,n.subcircuit_id),s=EUo(e,n,r),{getSubcircuitConnectivityKeyForId:a}=r,c=[];for(let m of e)if(m.type==="pcb_smtpad"){let p=m;if(p.layer!==n.layer)continue;let g;if(g=a(p.pcb_smtpad_id),!g)g=`unconnected:${p.pcb_smtpad_id}`;if(p.shape==="rect")c.push({shape:"rect",padId:p.pcb_smtpad_id,layer:p.layer,connectivityKey:g,isSmtPad:!0,bounds:{minX:p.x-p.width/2,minY:p.y-p.height/2,maxX:p.x+p.width/2,maxY:p.y+p.height/2}});else if(p.shape==="rotated_rect")c.push({shape:"rotated_rect",padId:p.pcb_smtpad_id,layer:p.layer,connectivityKey:g,isSmtPad:!0,x:p.x,y:p.y,width:p.width,height:p.height,ccwRotation:p.ccw_rotation});else if(p.shape==="circle")c.push({shape:"circle",padId:p.pcb_smtpad_id,layer:p.layer,connectivityKey:g,isSmtPad:!0,x:p.x,y:p.y,radius:p.radius});else if(p.shape==="pill"||p.shape==="rotated_pill")c.push({shape:"pill",padId:p.pcb_smtpad_id,layer:p.layer,connectivityKey:g,isSmtPad:!0,x:p.x,y:p.y,width:p.width,height:p.height,radius:p.radius,ccwRotation:p.shape==="rotated_pill"?p.ccw_rotation:0});else if(p.shape==="polygon")c.push({shape:"polygon",padId:p.pcb_smtpad_id,layer:p.layer,connectivityKey:g,isSmtPad:!0,points:p.points})}else if(m.type==="pcb_plated_hole"){let p=m;if(!p.layers.includes(n.layer))continue;let g=a(p.pcb_plated_hole_id);if(!g)g=`unconnected-plated-hole:${p.pcb_plated_hole_id}`;if(p.shape==="hole_with_polygon_pad"){let _=(p.ccw_rotation??0)*Math.PI/180,f=Math.cos(_),y=Math.sin(_);c.push({shape:"polygon",padId:p.pcb_plated_hole_id,layer:n.layer,connectivityKey:g,isPlatedHole:!0,points:p.pad_outline.map((x)=>({x:p.x+x.x*f-x.y*y,y:p.y+x.x*y+x.y*f}))})}else if(p.shape==="circle")c.push({shape:"circle",padId:p.pcb_plated_hole_id,layer:n.layer,connectivityKey:g,isPlatedHole:!0,x:p.x,y:p.y,radius:p.outer_diameter/2});else if(p.shape==="pill")c.push({shape:"pill",padId:p.pcb_plated_hole_id,layer:n.layer,connectivityKey:g,isPlatedHole:!0,x:p.x,y:p.y,width:p.outer_width,height:p.outer_height,radius:Math.min(p.outer_width,p.outer_height)/2,ccwRotation:p.ccw_rotation});else if(p.shape==="oval")c.push({shape:"oval",padId:p.pcb_plated_hole_id,layer:n.layer,connectivityKey:g,isPlatedHole:!0,x:p.x,y:p.y,width:p.outer_width,height:p.outer_height,ccwRotation:p.ccw_rotation});else if(p.shape==="circular_hole_with_rect_pad"||p.shape==="pill_hole_with_rect_pad"||p.shape==="rotated_pill_hole_with_rect_pad"){let{rect_pad_width:_,rect_pad_height:f}=p;if(typeof _!=="number"||typeof f!=="number")continue;let y=p.shape==="pill_hole_with_rect_pad"?0:p.rect_ccw_rotation??0;if(y===0)c.push({shape:"rect",padId:p.pcb_plated_hole_id,layer:n.layer,connectivityKey:g,isPlatedHole:!0,bounds:{minX:p.x-_/2,minY:p.y-f/2,maxX:p.x+_/2,maxY:p.y+f/2}});else c.push({shape:"rotated_rect",padId:p.pcb_plated_hole_id,layer:n.layer,connectivityKey:g,isPlatedHole:!0,x:p.x,y:p.y,width:_,height:f,ccwRotation:y})}}else if(m.type==="pcb_hole"){let p=m;if(p.hole_shape==="rect"){c.push({shape:"rect",padId:p.pcb_hole_id,layer:n.layer,connectivityKey:`hole:${p.pcb_hole_id}`,bounds:{minX:p.x-p.hole_width/2,minY:p.y-p.hole_height/2,maxX:p.x+p.hole_width/2,maxY:p.y+p.hole_height/2}});continue}if(p.hole_shape==="pill"||p.hole_shape==="rotated_pill"){let g=0;if(p.hole_shape==="rotated_pill")g=p.ccw_rotation;c.push({shape:"pill",padId:p.pcb_hole_id,layer:n.layer,connectivityKey:`hole:${p.pcb_hole_id}`,x:p.x,y:p.y,width:p.hole_width,height:p.hole_height,radius:Math.min(p.hole_width,p.hole_height)/2,ccwRotation:g});continue}if(p.hole_shape!=="circle")continue;c.push({shape:"circle",padId:p.pcb_hole_id,layer:n.layer,connectivityKey:`hole:${p.pcb_hole_id}`,x:p.x,y:p.y,radius:p.hole_diameter/2})}else if(m.type==="pcb_cutout"){let p=m;if(p.shape==="rect")c.push({shape:"rect",padId:p.pcb_cutout_id,layer:n.layer,connectivityKey:`cutout:${p.pcb_cutout_id}`,bounds:{minX:p.center.x-p.width/2,minY:p.center.y-p.height/2,maxX:p.center.x+p.width/2,maxY:p.center.y+p.height/2}});else if(p.shape==="circle")c.push({shape:"circle",padId:p.pcb_cutout_id,layer:n.layer,connectivityKey:`cutout:${p.pcb_cutout_id}`,x:p.center.x,y:p.center.y,radius:p.radius});else if(p.shape==="polygon")c.push({shape:"polygon",padId:p.pcb_cutout_id,layer:n.layer,connectivityKey:`cutout:${p.pcb_cutout_id}`,points:p.points})}else if(m.type==="pcb_keepout"){let p=m;if(!p.layers.includes(n.layer))continue;if(p.shape==="rect")c.push({shape:"rect",padId:p.pcb_keepout_id,layer:n.layer,connectivityKey:`keepout:${p.pcb_keepout_id}`,bounds:{minX:p.center.x-p.width/2,minY:p.center.y-p.height/2,maxX:p.center.x+p.width/2,maxY:p.center.y+p.height/2}});else if(p.shape==="circle")c.push({shape:"circle",padId:p.pcb_keepout_id,layer:n.layer,connectivityKey:`keepout:${p.pcb_keepout_id}`,x:p.center.x,y:p.center.y,radius:p.radius})}else if(m.type==="pcb_via"){let p=m;if(!p.layers.includes(n.layer))continue;let g=a(p.pcb_via_id)??`unconnected-via:${p.pcb_via_id}`;c.push({shape:"circle",padId:p.pcb_via_id,layer:n.layer,connectivityKey:g,x:p.x,y:p.y,radius:p.outer_diameter/2})}else if(m.type==="pcb_trace"){let p=m,g=a(p.pcb_trace_id);if(!g)continue;let _=[],f=null,y=()=>{if(_.length>1)c.push({shape:"trace",padId:`${p.pcb_trace_id}-${c.length}`,layer:n.layer,connectivityKey:g,segments:_,width:f});_=[],f=null};for(let x of p.route){let C=x;if(C.route_type==="wire"&&C.layer===n.layer){let b={x:C.x,y:C.y};if(f===null)f=C.width;else if(C.width!==f)_.push(b),y(),f=C.width;_.push(b)}else y()}y()}let{width:l,height:d}=o,u=n.outline??o.outline,h;if(u&&u.length>0){let m=u.map((g)=>g.x),p=u.map((g)=>g.y);h={minX:Math.min(...m),minY:Math.min(...p),maxX:Math.max(...m),maxY:Math.max(...p)}}else h={minX:-l/2,minY:-d/2,maxX:l/2,maxY:d/2};let A=[{shape:"rect",layer:n.layer,bounds:h,boardEdgeOutline:n.board_edge_outline,outline:u,connectivityKey:s,padMargin:n.pad_margin,traceMargin:n.trace_margin,pourMargin:n.pour_margin??Math.max(n.pad_margin,n.trace_margin),board_edge_margin:n.board_edge_margin??0,cutout_margin:n.cutout_margin,use_thermal_reliefs:n.use_thermal_reliefs,thermal_relief_spoke_width:n.thermal_relief_spoke_width,thermal_relief_spoke_count:n.thermal_relief_spoke_count}];return{pads:c,regionsForPour:A}};vp();vp();vp();var nVt=["x_pos","x_neg","y_pos","y_neg","z_pos","z_neg"],MUo=(e)=>typeof e==="string"&&nVt.includes(e),BUo=(e,t="face")=>{if(!MUo(e))throw Error(`${t} must be one of ${nVt.join(", ")}, got ${JSON.stringify(e)}. The named directions (front/back/left/right/top/bottom) were retired: faces are named for the axis their outward normal points along, so the old \`top\` (+Z) is \`z_pos\` and the old \`front\` (+Y) is \`y_pos\`.`);return e},W6=(e)=>e.slice(0,1),FU=(e)=>e.endsWith("_pos")?1:-1,oVt=(e)=>{let t=W6(e);if(t==="x")return["y","z"];if(t==="y")return["x","z"];return["x","y"]},YI=(e)=>W6(e)==="z",iVt=(e)=>e==="x"?0:e==="y"?1:2,Xfe=(e,t)=>[e.width,e.height,e.depth][iVt(t)],wUo=(e,t,n,o)=>{let i=n*Math.PI/180,r=Math.abs(Math.cos(i)),s=Math.abs(Math.sin(i));return o==="x"?e*r+t*s:e*s+t*r},TUo=({body:e,face:t})=>{if(!e)return;if(YI(t))return e.aboveBoardHeight??e.size?.z;let n=W6(t)==="y"?"y":"x",o=e.footprint&&(n==="y"?e.footprint.height:e.footprint.width);if(!e.size)return o;let i=wUo(e.size.x,e.size.y,e.rotation??0,n);return o===void 0?i:Math.max(i,o)},DUo=(e)=>e?.aboveBoardHeight,NUo=(e)=>({type:"cuboid",size:e}),RUo=(e,t)=>({type:"cylinder",radius:e,height:t,resolution:32}),tOe=(e,t)=>({type:"translate",vector:e,shape:t}),QUo={x:[Math.PI/2,0,Math.PI/2],y:[Math.PI/2,0,0]},kUo=(e,t)=>{let n=W6(e);if(n==="z")return t;return{type:"rotate",angles:QUo[n],shape:t}},rVt=({width:e,height:t,cutDepth:n})=>NUo([e,t,n]),nOe=({diameter:e,cutDepth:t})=>RUo(e/2,t),LUo=({width:e,height:t,cutDepth:n})=>{if(Math.abs(e-t)<Number.EPSILON)return nOe({diameter:e,cutDepth:n});let o=e>t,i=Math.min(e,t)/2,r=Math.abs(e-t),s=rVt({width:o?r:e,height:o?t:r,cutDepth:n}),a=nOe({diameter:i*2,cutDepth:n}),c=(l)=>o?[l,0,0]:[0,l,0];return{type:"union",shapes:[s,tOe(c(-r/2),a),tOe(c(r/2),a)]}},FUo=({placement:e,faceThickness:t,booleanTolerance:n})=>{let{aperture:o,face:i,center:r,width:s,height:a,inwardProjection:c}=e,d=(e.incidenceDegrees??0)*Math.PI/180,u=Math.abs(Math.cos(d)),h=Math.abs(Math.tan(d)),A=(t+n*2)/u+s*h+c,m;switch(o.shape){case"rect":m=rVt({width:s,height:a,cutDepth:A});break;case"circle":m=nOe({diameter:s,cutDepth:A});break;case"pill":m=LUo({width:s,height:a,cutDepth:A});break}let p=e.rotation===0?m:{type:"rotate",angles:[0,0,e.rotation*Math.PI/180],shape:m},g=W6(i),_=FU(i),f=[r.x,r.y,r.z];if(g==="z")f[iVt(g)]-=_*c/2;else{let C=g==="x"?_:0,I=g==="y"?_:0,b=Math.cos(d),P=Math.sin(d),E=C*b-I*P,B=C*P+I*b;f[0]-=E*c/2,f[1]-=B*c/2}let y=kUo(i,p),x=e.incidenceDegrees===void 0||e.incidenceDegrees===0?y:{type:"rotate",angles:[0,0,e.incidenceDegrees*Math.PI/180],shape:y};return{aperture:o,width:s,height:a,cutDepth:A,jscadPlan:tOe(f,x)}},rOe=(e)=>{let t=e.margin??0;if(e.shape==="circle"){let n=2*(e.radius+t);return{width:n,height:n}}return{width:e.width+t*2,height:e.height+t*2}},sVt=(e)=>{let t=DUo(e.componentBody);if(t!==void 0)return t/2;return rOe(e).height/2},kU=(e,t)=>{if(!Number.isFinite(e))throw Error(`${t} must be finite, but is ${e}`)},qE=(e,t)=>{if(kU(e,t),e<=0)throw Error(`${t} must be greater than 0, but is ${yc(e)}`)},LU=(e,t)=>{if(kU(e,t),e<0)throw Error(`${t} must not be negative, but is ${yc(e)}`)},HUo=(e,t)=>{let n=`apertures[${t}]`;if(BUo(e.face,`${n}.face`),kU(e.center.x,`${n}.center.x`),kU(e.center.y,`${n}.center.y`),LU(e.margin??0,`${n}.margin`),e.shape==="circle")qE(e.radius,`${n}.radius`);else qE(e.width,`${n}.width`),qE(e.height,`${n}.height`);if(e.depth!==void 0)LU(e.depth,`${n}.depth`);if(e.widthDimensionOffset!==void 0)kU(e.widthDimensionOffset,`${n}.widthDimensionOffset`);if(e.heightDimensionOffset!==void 0)kU(e.heightDimensionOffset,`${n}.heightDimensionOffset`)},aVt=({floorThickness:e,standoffHeight:t,boardThickness:n})=>{let o=e,i=o+t;return{floorTopZ:o,boardBottomZ:i,boardTopZ:i+n}},OUo=({seamOffsetFromTop:e,totalHeight:t,...n})=>({...aVt(n),seamZ:t-e,totalHeight:t}),Wfe=["y_pos","x_pos","y_neg","x_neg"],oOe=5,iOe=(e,t)=>Xfe(t,oVt(e)[0]),zUo=(e)=>{let t=new Map,o=-Wfe.reduce((i,r)=>i+iOe(r,e),oOe*(Wfe.length-1))/2;for(let i of Wfe){let r=iOe(i,e);t.set(i,o+r/2),o+=r+oOe}return t},eVt=(e,t)=>{let n=e.get(t);if(n===void 0)throw Error(`Missing ${t} wall panel`);return n},GUo=({graphics:e,placement:t,panelCenterX:n,planViewY:o,isProcessed:i})=>{let{aperture:r,width:s,height:a}=t,c=t.face==="y_pos"||t.face==="y_neg"?t.center.x:t.center.y,l=t.face==="y_pos"||t.face==="x_neg"?-1:1,d=YI(t.face)?{x:t.center.x,y:o+t.center.y}:{x:n+l*c,y:t.center.z},u=i?"rgba(239, 68, 68, 0.4)":"rgba(148, 163, 184, 0.12)",h=i?"#dc2626":"#94a3b8",m=`${YI(t.face)?`${t.face} `:""}${r.shape} ${s.toFixed(1)}×${a.toFixed(1)}`;if(r.shape==="rect"){e.rects?.push({center:d,width:s,height:a,fill:u,stroke:h,label:m});return}if(r.shape==="circle"){e.circles?.push({center:d,radius:s/2,fill:u,stroke:h,label:m});return}let p=s>=a,g=Math.min(s,a)/2,_=Math.abs(s-a);e.rects?.push({center:d,width:p?_:s,height:p?a:_,fill:u,stroke:h,label:m}),e.circles?.push({center:{x:d.x+(p?-_/2:0),y:d.y+(p?0:-_/2)},radius:g,fill:u,stroke:h},{center:{x:d.x+(p?_/2:0),y:d.y+(p?0:_/2)},radius:g,fill:u,stroke:h})},pne=({title:e,resolved:t,processedApertureCount:n=0})=>{let{board:o,dimensions:i}=t,r={title:e,coordinateSystem:"cartesian",rects:[],circles:[],lines:[],points:[],texts:[]},s=zUo(i),a=-i.height/2-oOe;for(let c of Wfe){let l=eVt(s,c);r.rects?.push({center:{x:l,y:i.depth/2},width:iOe(c,i),height:i.depth,fill:"rgba(59, 130, 246, 0.08)",stroke:"#2563eb",label:c}),r.texts?.push({x:l,y:i.depth+1.5,text:c,anchorSide:"bottom_center",color:"#1e3a8a",fontSize:1.5})}for(let[c,l]of t.apertures.entries())GUo({graphics:r,placement:l,panelCenterX:YI(l.face)?0:eVt(s,l.face),planViewY:a,isProcessed:c<n});return r.rects?.push({center:{x:0,y:a},width:i.width,height:i.height,fill:"rgba(59, 130, 246, 0.05)",stroke:"#1d4ed8",label:"enclosure top view"},{center:{x:0,y:a},width:o.width,height:o.height,fill:"rgba(34, 197, 94, 0.18)",stroke:"#15803d",label:"board"}),r},YUo=class extends Zn{constructor(e){super();this.params=e}params;enclosurePlans;_step(){let e=this.params.apertureCutouts.map((i)=>i.jscadPlan),t=(i)=>e.length===0?i:{type:"subtract",shapes:[i,...e]},n=t(this.params.shellPlans.basePlan),o=t(this.params.shellPlans.lidPlan);this.enclosurePlans={parts:[{id:"base",jscadPlan:n},{id:"lid",jscadPlan:o}],assembledPlan:{type:"union",shapes:[n,o]}},this.solved=!0}getOutput(){if(!this.enclosurePlans)throw Error("Enclosure plan has not been composed");return this.enclosurePlans}getConstructorParams(){return[this.params]}visualize(){return pne({title:"Composed enclosure",resolved:this.params.resolved,processedApertureCount:this.params.apertureCutouts.length})}},VUo=(e,t)=>{if(e==="z_pos")return t.lidThickness;if(e==="z_neg")return t.floorThickness;return t.wallThickness},UUo=class extends Zn{constructor(e){super();this.params=e,this.MAX_ITERATIONS=e.resolved.apertures.length+1}params;apertureCutouts=[];_step(){let e=this.params.resolved.apertures,t=e[this.apertureCutouts.length];if(!t){this.solved=!0;return}if(this.apertureCutouts.push(FUo({placement:t,faceThickness:VUo(t.face,this.params.resolved.dimensions),booleanTolerance:this.params.resolved.rules.booleanTolerance})),this.apertureCutouts.length===e.length)this.solved=!0}computeProgress(){let e=this.params.resolved.apertures.length;if(e===0)return this.solved?1:0;return this.apertureCutouts.length/e}getOutput(){return this.apertureCutouts}getConstructorParams(){return[this.params]}visualize(){return pne({title:`Aperture cutouts (${this.apertureCutouts.length}/${this.params.resolved.apertures.length})`,resolved:this.params.resolved,processedApertureCount:this.apertureCutouts.length})}},WUo=class extends Zn{constructor(e){super();this.params=e}params;shellPlans;_step(){let{dimensions:e,rules:t,frame:n}=this.params.resolved,{width:o,height:i,wallThickness:r,floorThickness:s,lidThickness:a,lidLipDepth:c}=e,l=o-2*r,d=i-2*r,u=n.seamZ,h=u-s+t.booleanTolerance*2,A={type:"subtract",shapes:[{type:"translate",vector:[0,0,u/2],shape:{type:"cuboid",size:[o,i,u]}},{type:"translate",vector:[0,0,s+h/2],shape:{type:"cuboid",size:[l,d,h]}}]},m={type:"translate",vector:[0,0,n.seamZ+a/2],shape:{type:"cuboid",size:[o,i,a]}},p=c,g=m;if(p>0){let _=l-t.slidingFitClearance,f=d-t.slidingFitClearance,y=Math.min(r*t.lipWallThicknessRatio,t.lipWallThicknessMax),x=_-2*y,C=f-2*y,I={type:"subtract",shapes:[{type:"translate",vector:[0,0,n.seamZ-p/2],shape:{type:"cuboid",size:[_,f,p]}},{type:"translate",vector:[0,0,n.seamZ-p/2],shape:{type:"cuboid",size:[x,C,p+t.booleanTolerance*2]}}]};g={type:"union",shapes:[m,I]}}this.shellPlans={basePlan:A,lidPlan:g},this.solved=!0}getOutput(){if(!this.shellPlans)throw Error("Enclosure shell has not been created");return this.shellPlans}getConstructorParams(){return[this.params]}visualize(){return pne({title:"Base and lid blanks",resolved:this.params.resolved})}},XUo=({axis:e,offset:t,extent:n,dimensions:o,face:i,prefix:r})=>{let s=Xfe(o,e)/2,a=n/2,c=t-a,l=t+a,d=`the opening spans ${yc(c)} to ${yc(l)} but the enclosure only spans ${yc(-s)} to ${yc(s)}`;if(Math.abs(t)-a>s)throw Error(`${r} misses the ${i} face along ${e.toUpperCase()}: ${d}`);if(a-Math.abs(t)>s)throw Error(`${r} engulfs the ${i} face along ${e.toUpperCase()}: ${d}`)},KUo=({centerZ:e,extent:t,dimensions:n,prefix:o})=>{let i=e-t/2;if(i<n.floorThickness)throw Error(`${o} intersects the enclosure floor: its lowest edge is at ${yc(i)} but the floor top is at ${yc(n.floorThickness)}. Raise heightDimensionOffset, or reduce the opening height.`);if(i>n.depth)throw Error(`${o} sits entirely above the enclosure: its lowest edge is at ${yc(i)} but the enclosure is only ${yc(n.depth)} tall`)},jUo=({face:e,center:t,width:n,height:o,dimensions:i,prefix:r})=>{let s=oVt(e),a=[n,o];s.forEach((c,l)=>{let d=a[l];if(c==="z"){KUo({centerZ:t.z,extent:d,dimensions:i,prefix:r});return}XUo({axis:c,offset:c==="x"?t.x:t.y,extent:d,dimensions:i,face:e,prefix:r})})},qUo={wallThickness:2,boardClearance:1,lidThickness:2,standoffHeight:4,topHeadroom:6,lidLipDepth:4,booleanTolerance:0.5,slidingFitClearance:0.3,lipWallThicknessRatio:0.7,lipWallThicknessMax:1.5},JUo=({face:e,boardSide:t="top",componentBody:n,frame:o})=>{let i=TUo({body:n,face:e});if(i===void 0)return;if(!YI(e))return i;let r=t==="bottom"?o.boardBottomZ:o.boardTopZ,s=e==="z_pos"?o.seamZ:o.floorTopZ;return Math.max(0,Math.abs(s-r))},$Uo=({face:e,depth:t=0,dimensions:n,rules:o})=>{if(YI(e)){if(e==="z_neg")return t;return Math.max(t,n.lidLipDepth)}let i=Math.min(n.wallThickness*o.lipWallThicknessRatio,o.lipWallThicknessMax),r=o.slidingFitClearance/2+i+o.booleanTolerance;return Math.max(t,r)},ZUo=["x_pos","x_neg","y_pos","y_neg"],eWo=({face:e,origin:t,apertureAxisDirection:n,dimensions:o})=>{if(YI(e)||!n)return e;let i=Math.hypot(n.x,n.y);if(!Number.isFinite(i)||i===0)return e;let r={x:n.x/i,y:n.y/i},s=ZUo.flatMap((a)=>{let c=W6(a),l=FU(a);if(r[c]*l<=0)return[];let h=(l*(Xfe(o,c)/2-o.wallThickness)-t[c])/r[c];return Number.isFinite(h)&&h>=0?[{face:a,distance:h}]:[]});if(s.length===0)return e;return s.sort((a,c)=>{let l=a.distance-c.distance;if(Math.abs(l)>0.000000001)return l;if(a.face===e)return-1;if(c.face===e)return 1;return 0}),s[0].face},tWo=({face:e,apertureAxisDirection:t})=>{if(YI(e)||!t)return 0;let n=W6(e),o=FU(e),i={x:n==="x"?o:0,y:n==="y"?o:0},r=Math.hypot(t.x,t.y);if(!Number.isFinite(r)||r===0)throw Error(`apertureAxisDirection must have a finite, non-zero XY projection for side face ${e}`);let s={x:t.x/r,y:t.y/r},a=i.x*s.y-i.y*s.x,c=i.x*s.x+i.y*s.y;return Math.atan2(a,c)*180/Math.PI},nWo=({face:e,incidenceDegrees:t,distanceToWall:n})=>{if(YI(e))return 0;let o=n*Math.tan(t*Math.PI/180),i=W6(e),r=FU(e),s=i==="x"?r:-r;return o*s},cVt=({boardSide:e,heightDatum:t,heightDimensionOffset:n,boardTopZ:o,boardBottomZ:i})=>{let r=t+n;return e==="bottom"?i-r:o+r},oWo=({face:e,boardCenter:t,centerZ:n,widthDimensionOffset:o,heightDimensionOffset:i,rotation:r,incidenceDegrees:s=0,dimensions:a,frame:c})=>{let l=W6(e);if(l==="z"){let h=r*Math.PI/180,A=Math.cos(h),m=Math.sin(h);return{x:t.x+o*A-i*m,y:t.y+o*m+i*A,z:e==="z_pos"?c.seamZ+a.lidThickness/2:a.floorThickness/2}}let d=FU(e)*(Xfe(a,l)/2-a.wallThickness/2),u=nWo({face:e,incidenceDegrees:s,distanceToWall:(d-t[l==="x"?"x":"y"])*FU(e)});return l==="x"?{x:d,y:t.y+o+u,z:n}:{x:t.x+o+u,y:d,z:n}},iWo=({apertures:e,floorThickness:t,standoffHeight:n,boardThickness:o,lidThickness:i,lidLipDepth:r})=>{let{boardTopZ:s,boardBottomZ:a}=aVt({floorThickness:t,standoffHeight:n,boardThickness:o}),c=0;for(let l of e){if(YI(l.face))continue;let u=cVt({boardSide:l.boardSide??"top",heightDatum:sVt(l),heightDimensionOffset:l.heightDimensionOffset??0,boardTopZ:s,boardBottomZ:a})+rOe(l).height/2+r;c=Math.max(c,u+i)}return c},tVt=["width","height","depth"],rWo=({board:e,wallThickness:t,boardClearance:n,floorThickness:o,standoffHeight:i,topHeadroom:r,lidThickness:s})=>{let a=t+n,c=(l)=>`to fit the ${yc(l)} board inside ${yc(t)} walls with ${yc(n)} clearance on each side`;return{width:{value:e.width+2*a,because:c(e.width)},height:{value:e.height+2*a,because:c(e.height)},depth:{value:o+i+e.thickness+r+s,because:`to stack ${yc(o)} floor + ${yc(i)} standoffs + ${yc(e.thickness)} board + ${yc(r)} headroom + ${yc(s)} lid`}}},sWo=({input:e,rules:t})=>{qE(e.board.width,"board.width"),qE(e.board.height,"board.height"),qE(e.board.thickness,"board.thickness");let n=e.wallThickness??t.wallThickness,o=e.floorThickness??n,i=e.lidThickness??t.lidThickness,r=e.boardClearance??t.boardClearance,s=e.standoffHeight??t.standoffHeight,a=e.topHeadroom??t.topHeadroom,c=e.lidLipDepth??t.lidLipDepth;qE(n,"wallThickness"),qE(o,"floorThickness"),qE(i,"lidThickness"),LU(r,"boardClearance"),LU(s,"standoffHeight"),LU(a,"topHeadroom"),LU(c,"lidLipDepth");let l=rWo({board:e.board,wallThickness:n,boardClearance:r,floorThickness:o,standoffHeight:s,topHeadroom:a,lidThickness:i}),d=e.topHeadroom===void 0?Math.max(l.depth.value,iWo({apertures:e.apertures??[],floorThickness:o,standoffHeight:s,boardThickness:e.board.thickness,lidThickness:i,lidLipDepth:c})):l.depth.value,u={width:e.width??l.width.value,height:e.height??l.height.value,depth:e.depth??d,wallThickness:n,floorThickness:o,lidThickness:i,boardClearance:r,standoffHeight:s,topHeadroom:a,lidLipDepth:c};for(let h of tVt)qE(u[h],h);for(let h of tVt){let{value:A,because:m}=l[h];if(u[h]<A)throw Error(`${h} must be at least ${yc(A)} ${m}, but is ${yc(u[h])}`)}return u},aWo=({board:e,dimensions:t})=>OUo({floorThickness:t.floorThickness,standoffHeight:t.standoffHeight,boardThickness:e.thickness,seamOffsetFromTop:t.lidThickness,totalHeight:t.depth}),cWo=(e)=>{let t={...qUo,...e.fdmRules},n=e.apertures??[];for(let[s,a]of n.entries())HUo(a,s);let o=sWo({input:e,rules:t}),i=aWo({board:e.board,dimensions:o});o.lidLipDepth=Math.min(o.lidLipDepth,Math.max(0,i.seamZ-o.floorThickness));let r=n.map((s,a)=>{let c=eWo({face:s.face,origin:s.center,apertureAxisDirection:s.apertureAxisDirection,dimensions:o}),l=`apertures[${a}]`,{width:d,height:u}=rOe(s),h=tWo({face:c,apertureAxisDirection:s.apertureAxisDirection}),A=s.widthDimensionOffset??0,m=s.heightDimensionOffset??0,p=YI(c)?s.rotation??0:0,g=oWo({face:c,boardCenter:s.center,widthDimensionOffset:A,heightDimensionOffset:m,rotation:p,incidenceDegrees:h,centerZ:cVt({boardSide:s.boardSide??"top",heightDatum:sVt(s),heightDimensionOffset:m,boardTopZ:i.boardTopZ,boardBottomZ:i.boardBottomZ}),dimensions:o,frame:i}),_=YI(c)?d:d/Math.abs(Math.cos(h*Math.PI/180));jUo({face:c,center:g,width:_,height:u,dimensions:o,prefix:l});let f=s.depth??JUo({face:c,boardSide:s.boardSide,componentBody:s.componentBody,frame:i})??0;return{aperture:s,face:c,center:g,width:d,height:u,rotation:p,incidenceDegrees:h,inwardProjection:$Uo({face:c,depth:f,dimensions:o,rules:t})}});return{construction:"fdm_box",board:e.board,apertures:r,dimensions:o,rules:t,frame:i}},lWo=class extends Zn{constructor(e){super();this.input=e}input;resolved;_step(){this.resolved=cWo(this.input),this.solved=!0}getOutput(){if(!this.resolved)throw Error("FDM enclosure problem is not resolved");return this.resolved}getConstructorParams(){return[this.input]}visualize(){if(!this.resolved)return super.visualize();return pne({title:"Resolved FDM enclosure problem",resolved:this.resolved})}},mne=(e,t)=>{if(!e)throw Error(`${t} has not completed`);return e},Kfe=class extends AI{resolveFdmEnclosureProblemSolver;createFdmEnclosureShellSolver;createFdmApertureCutoutsSolver;composeFdmEnclosureSolver;getResolvedProblem(){return mne(this.resolveFdmEnclosureProblemSolver,"resolveFdmEnclosureProblemSolver").getOutput()}pipelineDef=[cr("resolveFdmEnclosureProblemSolver",lWo,(e)=>[e.inputProblem]),cr("createFdmEnclosureShellSolver",WUo,(e)=>[{resolved:e.getResolvedProblem()}]),cr("createFdmApertureCutoutsSolver",UUo,(e)=>[{resolved:e.getResolvedProblem()}]),cr("composeFdmEnclosureSolver",YUo,(e)=>[{resolved:e.getResolvedProblem(),shellPlans:mne(e.createFdmEnclosureShellSolver,"createFdmEnclosureShellSolver").getOutput(),apertureCutouts:mne(e.createFdmApertureCutoutsSolver,"createFdmApertureCutoutsSolver").getOutput()}])];getConstructorParams(){return[this.inputProblem]}getOutput(){if(!this.solved)throw Error("FDM enclosure solver has not completed");let e=this.getResolvedProblem(),t=mne(this.composeFdmEnclosureSolver,"composeFdmEnclosureSolver").getOutput();return{dimensions:e.dimensions,frame:e.frame,parts:t.parts,apertures:mne(this.createFdmApertureCutoutsSolver,"createFdmApertureCutoutsSolver").getOutput(),jscadPlan:t.assembledPlan}}initialVisualize(){return null}finalVisualize(){let e=this.getResolvedProblem();return pne({title:"Final FDM enclosure",resolved:e,processedApertureCount:e.apertures.length})}};pn();pn();Yo();qa();pn();u0();Yo();var uT=(e,t,n={x:0,y:0})=>{let o=Math.cos(t),i=Math.sin(t),r=e.x-n.x,s=e.y-n.y;return{x:n.x+r*o-s*i,y:n.y+r*i+s*o}},jfe=(e)=>{e.pads=e.pads.map((t)=>{let n=uT(t.offset,e.ccwRotationOffset*Math.PI/180),o=(e.ccwRotationOffset%360+360)%360;return{...t,size:o===90||o===270?{x:t.size.y,y:t.size.x}:t.size,absoluteCenter:{x:e.center.x+n.x,y:e.center.y+n.y}}})};function dWo({components:e,packOrderStrategy:t,packFirst:n=[]}){let o=new Map;return n.forEach((i,r)=>{o.set(i,r)}),[...e].sort((i,r)=>{let s=o.get(i.componentId),a=o.get(r.componentId);if(s!==void 0&&a!==void 0)return s-a;if(s!==void 0)return-1;if(a!==void 0)return 1;if(t==="largest_to_smallest")return r.pads.length-i.pads.length;return i.pads.length-r.pads.length})}var uWo=(e)=>{let t=Math.min(...e.map((r)=>r.minX)),n=Math.min(...e.map((r)=>r.minY)),o=Math.max(...e.map((r)=>r.maxX)),i=Math.max(...e.map((r)=>r.maxY));return{minX:t,minY:n,maxX:o,maxY:i}};function aOe(e){let{bounds:t,center:n,width:o,height:i,angleRad:r}=e,s=e.translate?.x??0,a=e.translate?.y??0,c=o/2,l=i/2,d=[{x:n.x-c,y:n.y-l},{x:n.x+c,y:n.y-l},{x:n.x+c,y:n.y+l},{x:n.x-c,y:n.y+l}];for(let u of d){let h=uT(u,r),A=h.x+s,m=h.y+a;t.minX=Math.min(t.minX,A),t.maxX=Math.max(t.maxX,A),t.minY=Math.min(t.minY,m),t.maxY=Math.max(t.maxY,m)}}var ML=(e,t=0)=>{let n={minX:1/0,maxX:-1/0,minY:1/0,maxY:-1/0},o=e.ccwRotationOffset*Math.PI/180;for(let i of e.pads){let r=uT(i.offset,o),s=e.center.x+r.x,a=e.center.y+r.y,c=i.size.x/2,l=i.size.y/2;n.minX=Math.min(n.minX,s-c),n.maxX=Math.max(n.maxX,s+c),n.minY=Math.min(n.minY,a-l),n.maxY=Math.max(n.maxY,a+l)}if(e.courtyard)aOe({bounds:n,center:e.courtyard.offsetFromCenter,width:e.courtyard.width,height:e.courtyard.height,angleRad:o,translate:e.center});return{minX:n.minX-t,maxX:n.maxX+t,minY:n.minY-t,maxY:n.maxY+t}},lVt=(e,t,n)=>(t.x-e.x)*(n.y-e.y)-(t.y-e.y)*(n.x-e.x);function dVt(e,t=0.0000000001){if(e.length<=1)return e;let n=[],o=e[0][0],i=e[0][1];for(let r=1;r<e.length;r++){let s=e[r],[a,c]=s,l=0.000000001;if(!(Math.abs(i.x-a.x)<0.000000001&&Math.abs(i.y-a.y)<0.000000001)){n.push([o,i]),o=a,i=c;continue}let u=lVt(o,i,c),h=Math.hypot(i.x-o.x,i.y-o.y),A=Math.hypot(c.x-i.x,c.y-i.y),m=Math.max(t,t*h*A);if(Math.abs(u)<m)i=c;else n.push([o,i]),o=a,i=c}if(e.length>2){let r=n[0],s=[o,i];if(r&&n.length>0)if(Math.abs(i.x-r[0].x)<0.000000001&&Math.abs(i.y-r[0].y)<0.000000001){let l=lVt(o,i,r[1]),d=Math.hypot(i.x-o.x,i.y-o.y),u=Math.hypot(r[1].x-i.x,r[1].y-i.y),h=Math.max(t,t*d*u);if(Math.abs(l)<h)n[0]=[o,r[1]];else n.push(s)}else n.push(s);else n.push(s)}else n.push([o,i]);return n}function hWo(e){let t=0;for(let n=0;n<e.length;n++){let o=(n+1)%e.length,i=e[n],r=e[o];t+=i.x*r.y,t-=r.x*i.y}return t/2}function mWo(e){let t=[],n=e.first;if(!n)return t;do{let o=n.shape,i=o.start??o.ps;t.push({x:i.x,y:i.y}),n=n.next}while(n!==e.first);return t}function pWo(e){let t=[],n=[],o=Array.from(e.faces);for(let i of o){let r=mWo(i);if(r.length<3)continue;let s=hWo(r);if(s>0)t.push(r);else if(s<0)n.push(r)}return{obstacleFreeLoops:t,obstacleContainingLoops:n}}function uVt(e){let t=[];for(let n=0;n<e.length;n++){let o=e[n],i=e[(n+1)%e.length];t.push([o,i])}return t}function AWo(e){let t=pWo(e);return{obstacleFreeLoops:t.obstacleFreeLoops.map(uVt),obstacleContainingLoops:t.obstacleContainingLoops.map(uVt)}}var _Wo=(e)=>{let{component:t,courtyard:n,minGap:o}=e,i=n.width/2+o,r=n.height/2+o,a=[{x:n.offsetFromCenter.x-i,y:n.offsetFromCenter.y-r},{x:n.offsetFromCenter.x+i,y:n.offsetFromCenter.y-r},{x:n.offsetFromCenter.x+i,y:n.offsetFromCenter.y+r},{x:n.offsetFromCenter.x-i,y:n.offsetFromCenter.y+r}].map((A)=>{let m=uT(A,t.ccwRotationOffset*Math.PI/180);return{x:m.x+t.center.x,y:m.y+t.center.y}}),c=a.map(({x:A,y:m})=>[A,m]),l=new we.Polygon(c),d=a.map((A)=>A.x),u=a.map((A)=>A.y),h={minX:Math.min(...d),minY:Math.min(...u),maxX:Math.max(...d),maxY:Math.max(...u)};return{poly:l,bbox:h}},gWo=(e,t)=>e.pads.map((n)=>{let o=n.size.x/2+t,i=n.size.y/2+t,s=[{x:n.offset.x-o,y:n.offset.y-i},{x:n.offset.x+o,y:n.offset.y-i},{x:n.offset.x+o,y:n.offset.y+i},{x:n.offset.x-o,y:n.offset.y+i}].map((h)=>{let A=uT(h,e.ccwRotationOffset*Math.PI/180);return{x:A.x+e.center.x,y:A.y+e.center.y}}),a=s.map(({x:h,y:A})=>[h,A]),c=new we.Polygon(a),l=s.map((h)=>h.x),d=s.map((h)=>h.y),u={minX:Math.min(...l),minY:Math.min(...d),maxX:Math.max(...l),maxY:Math.max(...d)};return{poly:c,bbox:u}}),fWo=(e,t)=>e.map((n)=>{let o=n.width/2+t,i=n.height/2+t,r=n.absoluteCenter.x,s=n.absoluteCenter.y,a=[{x:r-o,y:s-i},{x:r+o,y:s-i},{x:r+o,y:s+i},{x:r-o,y:s+i}],c=a.map(({x:A,y:m})=>[A,m]),l=new we.Polygon(c),d=a.map((A)=>A.x),u=a.map((A)=>A.y),h={minX:Math.min(...d),minY:Math.min(...u),maxX:Math.max(...d),maxY:Math.max(...u)};return{poly:l,bbox:h}}),yWo=(e,t={})=>{let{minGap:n=0,obstacles:o=[]}=t;if(e.length===0&&o.length===0)return[];let i=e.map((g)=>ML(g,n)),r=o.map((g)=>({minX:g.absoluteCenter.x-g.width/2-n,minY:g.absoluteCenter.y-g.height/2-n,maxX:g.absoluteCenter.x+g.width/2+n,maxY:g.absoluteCenter.y+g.height/2+n})),s=uWo([...i,...r]),a=[];for(let g of e)if(g.courtyard)a.push(_Wo({component:g,courtyard:g.courtyard,minGap:n}));else{let _=gWo(g,n);a.push(..._)}let c=fWo(o,n);if(a.push(...c),a.length===0)return[];let d=xWo(a).map((g)=>g.poly),u=new we.Polygon(new we.Box(s.minX,s.minY,s.maxX,s.maxY)),h=u.clone();for(let g of d)try{u=we.BooleanOperations.subtract(u,g)}catch{}let A=null;try{A=we.BooleanOperations.subtract(h,u)}catch{try{if(d.length>0){let g=d[0];for(let _=1;_<d.length;_++)try{g=we.BooleanOperations.unify(g,d[_])}catch{}A=g}}catch{A=null}}if(!A)return[];let m=AWo(A);return[...m.obstacleFreeLoops.map((g)=>dVt(g)),...m.obstacleContainingLoops.map((g)=>dVt(g))].filter((g)=>g.length>=3)};function xWo(e){let t=(r)=>Math.max(0,r.maxX-r.minX)*Math.max(0,r.maxY-r.minY),n=(r,s,a=0.000000001)=>r.minX-a<=s.minX&&r.minY-a<=s.minY&&r.maxX+a>=s.maxX&&r.maxY+a>=s.maxY,o=[...e].sort((r,s)=>t(s.bbox)-t(r.bbox)),i=[];for(let r of o){let s=r.bbox.maxX-r.bbox.minX,a=r.bbox.maxY-r.bbox.minY;if(!(s>0.000000000001&&a>0.000000000001))continue;let c=!1;for(let l of i)if(n(l.bbox,r.bbox)){c=!0;break}if(!c)i.push(r)}return i}var _Vt=(e)=>{if(typeof e==="number")return Math.round(e*100)/100;if(typeof e==="object")return Object.fromEntries(Object.entries(e).map(([t,n])=>[t,_Vt(n)]));return e},gVt=class{MAX_ITERATIONS=1e5;solved=!1;failed=!1;iterations=0;progress=0;error=null;activeSubSolver;failedSubSolvers;timeToSolve;stats={};_setupDone=!1;getSolverName(){return this.constructor.name}setup(){if(this._setupDone)return;this._setup(),this._setupDone=!0}step(){if(!this._setupDone)this.setup();if(this.solved)return;if(this.failed)return;this.iterations++;try{this._step()}catch(e){throw this.error=`${this.getSolverName()} error: ${e}`,console.error(this.error),this.failed=!0,e}if(!this.solved&&this.iterations>this.MAX_ITERATIONS)this.tryFinalAcceptance();if(!this.solved&&this.iterations>this.MAX_ITERATIONS)this.error=`${this.getSolverName()} ran out of iterations`,console.error(this.error),this.failed=!0;if("computeProgress"in this)this.progress=this.computeProgress()}_setup(){}_step(){}getConstructorParams(){throw Error("getConstructorParams not implemented")}solve(){let e=Date.now();while(!this.solved&&!this.failed)this.step();let t=Date.now();this.timeToSolve=t-e}visualize(){return{lines:[],points:[],rects:[],circles:[]}}tryFinalAcceptance(){}getOutput(){return null}preview(){return{lines:[],points:[],rects:[],circles:[]}}noisySolve(){let e=Date.now();while(!this.solved&&!this.failed)this.step(),console.log(JSON.stringify(_Vt(this.visualize())));let t=Date.now();this.timeToSolve=t-e}},cOe=class extends gVt{offsetPadPoints;targetPointMap;currentPosition;constraintFn;epsilon;useSquaredDistance;optimalPosition;initialPosition;getSolverName(){return"MultiOffsetIrlsSolver"}constructor(e){super();this.offsetPadPoints=[...e.offsetPadPoints],this.targetPointMap=new Map(e.targetPointMap),this.initialPosition={...e.initialPosition},this.currentPosition={...e.initialPosition},this.constraintFn=e.constraintFn,this.epsilon=e.epsilon??0.000001,this.useSquaredDistance=e.useSquaredDistance??!1,this.MAX_ITERATIONS=e.maxIterations??100}getConstructorParams(){return{offsetPadPoints:this.offsetPadPoints.map((e)=>({...e})),targetPointMap:new Map(this.targetPointMap),initialPosition:this.initialPosition,constraintFn:this.constraintFn,epsilon:this.epsilon,useSquaredDistance:this.useSquaredDistance,maxIterations:this.MAX_ITERATIONS}}_setup(){if(this.currentPosition={...this.initialPosition},this.optimalPosition=void 0,!Array.from(this.targetPointMap.values()).some((t)=>t.length>0)||this.offsetPadPoints.length===0)this.optimalPosition={...this.currentPosition},this.solved=!0}_step(){if(this.offsetPadPoints.length===0)return;let{x:e,y:t}=this.currentPosition,n=0,o=0,i=0;for(let d of this.offsetPadPoints){let u=this.targetPointMap.get(d.id)||[];if(u.length===0)continue;let h=e+d.offsetX,A=t+d.offsetY;for(let m of u){let p=h-m.x,g=A-m.y,_=Math.sqrt(p*p+g*g),f;if(this.useSquaredDistance)f=1;else f=_<this.epsilon?1e6:1/_;let y={x:m.x-d.offsetX,y:m.y-d.offsetY};n+=f*y.x,o+=f*y.y,i+=f}}let r={x:i>0?n/i:e,y:i>0?o/i:t},s=this.constraintFn?this.constraintFn(r):r,a=s.x-e,c=s.y-t;if(Math.sqrt(a*a+c*c)<this.epsilon){this.optimalPosition={...s},this.solved=!0;return}this.currentPosition=s}getBestPosition(){return this.optimalPosition||this.currentPosition}getOffsetPadPositions(){let e=this.getBestPosition(),t=new Map;for(let n of this.offsetPadPoints)t.set(n.id,{x:e.x+n.offsetX,y:e.y+n.offsetY});return t}getOffsetPadPosition(e){return this.getOffsetPadPositions().get(e)}getTotalDistance(e){let t=e||this.getBestPosition(),n=0;for(let o of this.offsetPadPoints){let i={x:t.x+o.offsetX,y:t.y+o.offsetY},r=this.targetPointMap.get(o.id)||[];for(let s of r){let a=i.x-s.x,c=i.y-s.y;if(this.useSquaredDistance)n+=a*a+c*c;else n+=Math.sqrt(a*a+c*c)}}return n}getDistanceForPad(e,t){let n=t||this.getBestPosition(),o=this.offsetPadPoints.find((s)=>s.id===e);if(!o)return 0;let i={x:n.x+o.offsetX,y:n.y+o.offsetY};return(this.targetPointMap.get(e)||[]).reduce((s,a)=>{let c=i.x-a.x,l=i.y-a.y;if(this.useSquaredDistance)return s+(c*c+l*l);else return s+Math.sqrt(c*c+l*l)},0)}computeProgress(){if(this.offsetPadPoints.length===0)return 1;let e=this.getTotalDistance(this.initialPosition),t=this.getTotalDistance();if(e===0)return 1;let n=Math.max(0,e-t);return Math.min(1,n/e)}visualize(){let e={lines:[],points:[],rects:[],circles:[]},t=["#4CAF50","#2196F3","#FF9800","#9C27B0","#F44336","#607D8B"],n=this.getBestPosition();for(let o=0;o<this.offsetPadPoints.length;o++){let i=this.offsetPadPoints[o];if(!i)continue;let r=t[o%t.length],s=this.targetPointMap.get(i.id)||[],a={x:n.x+i.offsetX,y:n.y+i.offsetY};for(let c of s)e.points.push({...c,color:r});for(let c of s)e.lines.push({points:[a,c],strokeColor:r});e.points.push({x:a.x,y:a.y,color:r})}if(e.points.push({...this.currentPosition,color:"#f44336"}),this.optimalPosition)e.points.push({...this.optimalPosition,color:"rgba(76, 175, 80, 0.3)"});return e}getOutput(){return this.optimalPosition??this.currentPosition}},CWo=class extends gVt{offsetPadPoints;targetPointMap;constraintFn;currentPosition;optimalPosition;initialPosition;phase1Epsilon;phase2Epsilon;maxIterations;getSolverName(){return"TwoPhaseIrlsSolver"}phase1Solver;phase2Solver;currentPhase=1;phase1Position;closestTargetPadId;closestTargetPoint;constructor(e){super();this.offsetPadPoints=[...e.offsetPadPoints],this.targetPointMap=new Map(e.targetPointMap),this.initialPosition={...e.initialPosition},this.currentPosition={...e.initialPosition},this.constraintFn=e.constraintFn,this.phase1Epsilon=e.phase1Epsilon??e.epsilon??0.000001,this.phase2Epsilon=e.phase2Epsilon??e.epsilon??0.000001,this.maxIterations=e.maxIterations??100}getConstructorParams(){return{offsetPadPoints:this.offsetPadPoints.map((e)=>({...e})),targetPointMap:new Map(this.targetPointMap),initialPosition:this.initialPosition,constraintFn:this.constraintFn,phase1Epsilon:this.phase1Epsilon,phase2Epsilon:this.phase2Epsilon,maxIterations:this.maxIterations}}_setup(){if(this.currentPosition={...this.initialPosition},this.optimalPosition=void 0,this.currentPhase=1,this.phase1Position=void 0,this.closestTargetPadId=void 0,this.closestTargetPoint=void 0,!Array.from(this.targetPointMap.values()).some((t)=>t.length>0)||this.offsetPadPoints.length===0){this.optimalPosition={...this.currentPosition},this.solved=!0;return}this.phase1Solver=new cOe({offsetPadPoints:this.offsetPadPoints,targetPointMap:this.targetPointMap,initialPosition:this.initialPosition,constraintFn:this.constraintFn,epsilon:this.phase1Epsilon,maxIterations:this.maxIterations,useSquaredDistance:!0}),this.phase1Solver.setup()}_step(){if(this.currentPhase===1)this.stepPhase1();else this.stepPhase2()}stepPhase1(){if(!this.phase1Solver)return;if(this.phase1Solver.step(),this.currentPosition=this.phase1Solver.getBestPosition(),this.phase1Solver.solved)this.phase1Position=this.phase1Solver.getBestPosition(),this.setupPhase2();else if(this.phase1Solver.failed)this.failed=!0,this.error=`Phase 1 failed: ${this.phase1Solver.error}`}setupPhase2(){if(!this.phase1Position)return;let e=1/0,t,n;for(let i of this.offsetPadPoints){let r=this.targetPointMap.get(i.id)||[];if(r.length===0)continue;let s=this.phase1Position.x+i.offsetX,a=this.phase1Position.y+i.offsetY;for(let c of r){let l=s-c.x,d=a-c.y,u=Math.sqrt(l*l+d*d);if(u<e)e=u,t=i.id,n=c}}if(this.closestTargetPadId=t,this.closestTargetPoint=n,!t||!n){this.optimalPosition=this.phase1Position,this.solved=!0;return}let o=new Map;o.set(t,[n]),this.phase2Solver=new cOe({offsetPadPoints:this.offsetPadPoints,targetPointMap:o,initialPosition:this.phase1Position,constraintFn:this.constraintFn,epsilon:this.phase2Epsilon,maxIterations:this.maxIterations,useSquaredDistance:!1}),this.phase2Solver.setup(),this.currentPhase=2}stepPhase2(){if(!this.phase2Solver)return;if(this.phase2Solver.step(),this.currentPosition=this.phase2Solver.getBestPosition(),this.phase2Solver.solved)this.optimalPosition=this.phase2Solver.getBestPosition(),this.solved=!0;else if(this.phase2Solver.failed)this.failed=!0,this.error=`Phase 2 failed: ${this.phase2Solver.error}`}getBestPosition(){return this.optimalPosition||this.currentPosition}getOffsetPadPositions(){let e=this.getBestPosition(),t=new Map;for(let n of this.offsetPadPoints)t.set(n.id,{x:e.x+n.offsetX,y:e.y+n.offsetY});return t}getTotalDistance(e){let t=e||this.getBestPosition(),n=0;for(let o of this.offsetPadPoints){let i={x:t.x+o.offsetX,y:t.y+o.offsetY},r=this.targetPointMap.get(o.id)||[];for(let s of r){let a=i.x-s.x,c=i.y-s.y;n+=a*a+c*c}}return n}visualize(){let e={lines:[],points:[],rects:[],circles:[]};if(e.points.push({...this.currentPosition,color:this.currentPhase===1?"#FF6B6B":"#4ECDC4",label:`Phase ${this.currentPhase}`}),this.phase1Position&&this.currentPhase===2)e.points.push({...this.phase1Position,color:"rgba(255, 107, 107, 0.5)",label:"Phase 1 result"});if(this.closestTargetPoint&&this.closestTargetPadId){e.points.push({...this.closestTargetPoint,color:"#FFA500",label:`Closest target (${this.closestTargetPadId})`});let n=this.offsetPadPoints.find((o)=>o.id===this.closestTargetPadId);if(n){let o=this.getBestPosition(),i={x:o.x+n.offsetX,y:o.y+n.offsetY};e.lines.push({points:[i,this.closestTargetPoint],strokeColor:"#FFA500"})}}let t=this.currentPhase===1?this.phase1Solver:this.phase2Solver;if(t){let n=t.visualize(),o=this.currentPhase===1?"rgba(255, 107, 107, 0.7)":"rgba(76, 205, 196, 0.7)";if(n.lines){let i=n.lines.map((r)=>({...r,strokeColor:o}));e.lines.push(...i)}if(n.points)e.points.push(...n.points);if(n.rects)e.rects.push(...n.rects);if(n.circles)e.circles.push(...n.circles)}if(this.optimalPosition)e.points.push({...this.optimalPosition,color:"rgba(76, 175, 80, 0.8)",label:"Final optimal position"});return e}getOutput(){return this.optimalPosition??this.currentPosition}};function IWo(e){let t=new Map,n=new Set;for(let{padIds:o,ignoreWeakConnections:i}of e)for(let r of o){let s=t.get(r);if(!s)s=new Set,t.set(r,s);for(let a of o)s.add(a);if(i===!0)n.add(r)}return{explicitlyConnectedPadIdsByPadId:t,padIdsRejectingWeakConnections:n}}var hVt=new WeakMap;function bWo(e){let t=hVt.get(e);if(t)return t;let n=IWo(e);return hVt.set(e,n),n}function qfe(e,t,n){if(!n?.length)return!0;let o=bWo(n);if(o.explicitlyConnectedPadIdsByPadId.get(e)?.has(t))return!0;return!(o.padIdsRejectingWeakConnections.has(e)||o.padIdsRejectingWeakConnections.has(t))}var SWo=(e)=>{let t={};for(let n=0;n<e.length;n++)t[e[n]]=`hsl(${n*300/e.length}, 100%, 50%)`;return t},lOe=(e,t=1)=>`hsl(${e.split("").reduce((o,i)=>o*31+i.charCodeAt(0),0)%360}, 100%, 50%, ${t})`;function mVt(e,t){let[n,o]=e,i=o.x-n.x,r=o.y-n.y,s=Math.hypot(i,r);if(s===0)return{x:0,y:1};let a=i/s,c=r/s,l={x:-c,y:a},d={x:c,y:-a},u=[];if(t.length>0){u.push(t[0][0]);for(let p of t)u.push(p[1])}let h=(()=>{let p=0;for(let g=0;g<u.length;g++){let _=u[g],f=u[(g+1)%u.length];p+=_.x*f.y-f.x*_.y}return p/2})(),A=h>0?d:l;if(h<0)return{x:-A.x,y:-A.y};return A}var PWo=class extends Zn{ccwFullOutline;origin;globalBounds;largestRect=null;mode;getSolverName(){return"LargestRectOutsideOutlineFromPointSolver"}constructor(e){super();this.ccwFullOutline=e.ccwFullOutline,this.origin=e.origin,this.globalBounds=e.globalBounds,this.mode=e.mode??"outside"}getConstructorParams(){return{ccwFullOutline:this.ccwFullOutline,origin:this.origin,globalBounds:this.globalBounds,mode:this.mode}}_setup(){}_step(){this.largestRect=this.computeLargestRect(),this.solved=!0}computeLargestRect(){let e=this.makeEdges(this.ccwFullOutline),t={x:this.globalBounds.minX,y:this.globalBounds.minY,w:this.globalBounds.maxX-this.globalBounds.minX,h:this.globalBounds.maxY-this.globalBounds.minY};return this.largestRectContainingPointRegion(e,this.origin,t,this.mode)}almostEqual(e,t,n=0.000000001){return Math.abs(e-t)<=n}makeEdges(e){let t=[];for(let n=0;n<e.length;n++){let o=e[n],i=e[(n+1)%e.length];if(!o||!i)continue;if(this.almostEqual(o.x,i.x)&&this.almostEqual(o.y,i.y))continue;t.push([o,i])}return t}isVertical(e){return this.almostEqual(e[0].x,e[1].x)}isHorizontal(e){return this.almostEqual(e[0].y,e[1].y)}scanlineIntervalsAtY(e,t){let n=[];for(let i of e){if(!this.isVertical(i))continue;let r=i[0].y,s=i[1].y,a=i[0].x,c=Math.min(r,s),l=Math.max(r,s);if(c<=t&&t<l)n.push(a)}n.sort((i,r)=>i-r);let o=[];for(let i=0;i+1<n.length;i+=2){let r=n[i],s=n[i+1];if(r!==void 0&&s!==void 0)o.push([r,s])}return o}clipIntervals(e,t,n){let o=[];for(let[i,r]of e){let s=Math.max(t,i),a=Math.min(n,r);if(a>s)o.push([s,a])}return o}regionIntervalsAtY(e,t,n,o,i){let r=this.clipIntervals(this.scanlineIntervalsAtY(e,t),n,o);if(i==="inside")return r;let s=[],a=n;for(let[c,l]of r){if(c>a)s.push([a,c]);a=Math.max(a,l)}if(a<o)s.push([a,o]);return s}largestRectContainingPointRegion(e,t,n,o){let i=n.x,r=n.x+n.w,s=n.y,a=n.y+n.h,l=this.regionIntervalsAtY(e,t.y,i,r,o).find(([x,C])=>x-0.000000001<=t.x&&t.x<=C+0.000000001);if(!l)return null;let[d,u]=l,h=new Set([d,u]);for(let x of e){if(!this.isVertical(x))continue;let C=x[0].x;if(d<C&&C<u)h.add(C)}let A=Array.from(h).sort((x,C)=>x-C),m=A.length-1;if(m<=0)return null;let p=Array(m).fill(-1/0),g=Array(m).fill(1/0);for(let x=0;x<m;x++){let C=A[x],I=A[x+1];if(C===void 0||I===void 0)continue;let b=0.5*(C+I);if(h.has(b))b+=0.000001;let P=a,E=s;for(let B of e){if(!this.isHorizontal(B))continue;let w=B[0].y,T=Math.min(B[0].x,B[1].x),Q=Math.max(B[0].x,B[1].x);if(T-0.000000001<=b&&b<=Q+0.000000001){if(w>t.y)P=Math.min(P,w);if(w<t.y)E=Math.max(E,w)}}if(!(E<P))p[x]=-1/0,g[x]=1/0;else p[x]=P,g[x]=E}let _=-1;for(let x=0;x<m;x++){let C=A[x],I=A[x+1];if(C===void 0||I===void 0)continue;if(C-0.000000001<=t.x&&t.x<=I+0.000000001){_=x;break}}if(_===-1)return null;let f=null,y=-1;for(let x=0;x<=_;x++){let C=1/0,I=-1/0;for(let b=x;b<m;b++){let P=p[b],E=g[b];if(P===void 0||E===void 0)continue;if(C=Math.min(C,P),I=Math.max(I,E),b<_)continue;let B=Math.max(0,C-I);if(B<=0)continue;let w=A[x],T=A[b+1];if(w===void 0||T===void 0)continue;let Q=T-w,N=Q*B;if(N>y)y=N,f={x:w,y:I,w:Q,h:B}}}return f}getLargestRect(){if(!this.solved)this.solve();return this.largestRect}getLargestRectBounds(){if(!this.solved)this.solve();if(!this.largestRect)return{minX:0,minY:0,maxX:0,maxY:0};return{minX:this.largestRect.x,minY:this.largestRect.y,maxX:this.largestRect.x+this.largestRect.w,maxY:this.largestRect.y+this.largestRect.h}}visualize(){let e={lines:[],points:[],rects:[],circles:[]};for(let t=0;t<this.ccwFullOutline.length;t++){let n=this.ccwFullOutline[t],o=this.ccwFullOutline[(t+1)%this.ccwFullOutline.length];if(n&&o)e.lines.push({points:[n,o],strokeColor:"rgba(0,0,0,0.5)"})}if(e.lines.push({points:[...this.ccwFullOutline,this.ccwFullOutline[0]],strokeColor:"rgba(200, 200, 200, 0.5)",strokeDash:[10,5]}),e.circles.push({center:this.origin,radius:0.05,fill:"#f44336",label:"Origin"}),this.largestRect)e.rects.push({center:{x:this.largestRect.x+this.largestRect.w/2,y:this.largestRect.y+this.largestRect.h/2},width:this.largestRect.w,height:this.largestRect.h,fill:"rgba(0, 255, 0, 0.3)",stroke:"#4CAF50",label:`Largest Rectangle (Area: ${(this.largestRect.w*this.largestRect.h).toFixed(3)})`});return e}getOutput(){return this.largestRect??null}},vWo=(e,{rotationDegrees:t=0})=>{let n={minX:1/0,maxX:-1/0,minY:1/0,maxY:-1/0},o=t*Math.PI/180;for(let i of e.pads)aOe({bounds:n,center:i.offset,width:i.size.x,height:i.size.y,angleRad:o});if(e.courtyard)aOe({bounds:n,center:e.courtyard.offsetFromCenter,width:e.courtyard.width,height:e.courtyard.height,angleRad:o});return n},EWo=(e,t)=>{let[n,o]=e,i={x:o.x-n.x,y:o.y-n.y},r=MWo(i);return[{x:n.x-r.x*t,y:n.y-r.y*t},{x:o.x+r.x*t,y:o.y+r.y*t}]};function MWo(e){let t=Math.hypot(e.x,e.y);return{x:e.x/t,y:e.y/t}}function HU(e,t){if(t.length<3)return!1;let n=!1,o=t.length,i=[...t];if(i[0].x!==i[o-1].x||i[0].y!==i[o-1].y)i.push({...i[0]});for(let r=0,s=i.length-1;r<i.length;s=r++){let a=i[r].x,c=i[r].y,l=i[s].x,d=i[s].y;if(c>e.y!==d>e.y&&e.x<(l-a)*(e.y-c)/(d-c)+a)n=!n}return n}var BWo=class extends Zn{outlineSegment;viableOutlineSegment=null;ccwFullOutline;componentRotationDegrees;packStrategy;minGap;obstacles;packedComponents;componentToPack;viableBounds;globalBounds;boundaryOutline;weightedConnections;networkTargetPointMappingsCache;optimalPosition;irlsSolver;twoPhaseIrlsSolver;getSolverName(){return"OutlineSegmentCandidatePointSolver"}largestRectBounds;largestRectMidPoint;largestRectOrigin;constructor(e){super();this.outlineSegment=e.outlineSegment,this.ccwFullOutline=e.ccwFullOutline,this.componentRotationDegrees=e.componentRotationDegrees,this.packStrategy=e.packStrategy,this.minGap=e.minGap,this.packedComponents=e.packedComponents,this.componentToPack=e.componentToPack,this.obstacles=e.obstacles??[],this.globalBounds=e.globalBounds,this.boundaryOutline=e.boundaryOutline,this.weightedConnections=e.weightedConnections,this.networkTargetPointMappingsCache=e.networkTargetPointMappingsCache}getConstructorParams(){return{outlineSegment:this.outlineSegment,ccwFullOutline:this.ccwFullOutline,componentRotationDegrees:this.componentRotationDegrees,packStrategy:this.packStrategy,minGap:this.minGap,packedComponents:this.packedComponents,componentToPack:this.componentToPack,obstacles:this.obstacles,globalBounds:this.globalBounds,boundaryOutline:this.boundaryOutline,weightedConnections:this.weightedConnections,networkTargetPointMappingsCache:this.networkTargetPointMappingsCache}}_getOutlineBoundsWithMargin(e={}){let t=1/0,n=1/0,o=-1/0,i=-1/0;for(let[s,a]of this.ccwFullOutline)t=Math.min(t,s.x,a.x),n=Math.min(n,s.y,a.y),o=Math.max(o,s.x,a.x),i=Math.max(i,s.y,a.y);let r=e.margin??0;return{minX:t-r,minY:n-r,maxX:o+r,maxY:i+r}}_setup(){let[e,t]=this.outlineSegment,n=(T)=>{let Q=this.projectPointOntoSegment(T,this.viableOutlineSegment);return this.adjustPositionForOutlineCollision(Q)},o=mVt(this.outlineSegment,this.ccwFullOutline),i=vWo(this.componentToPack,{rotationDegrees:this.componentRotationDegrees}),r=this._getOutlineBoundsWithMargin({margin:Math.max(i.maxX-i.minX,i.maxY-i.minY)*2+this.minGap*2});this.largestRectMidPoint={x:(e.x+t.x)/2,y:(e.y+t.y)/2},this.largestRectOrigin={x:this.largestRectMidPoint.x+o.x*0.0001,y:this.largestRectMidPoint.y+o.y*0.0001};let s=this.ccwFullOutline.flatMap(([T])=>T),a=0;for(let T=0;T<s.length;T++){let Q=s[T],N=s[(T+1)%s.length];a+=Q.x*N.y-N.x*Q.y}a/=2;let l=a<0?"inside":"outside",d={ccwFullOutline:s,globalBounds:r,origin:this.largestRectOrigin,mode:l},u=new PWo(d);u.solve();let h=u.getLargestRectBounds();this.largestRectBounds=h;let A={x:Math.abs(Math.sign(this.outlineSegment[1].x-this.outlineSegment[0].x)),y:Math.abs(Math.sign(this.outlineSegment[1].y-this.outlineSegment[0].y))},m={minX:h.minX-i.minX*A.x,minY:h.minY-i.minY*A.y,maxX:h.maxX-i.maxX*A.x,maxY:h.maxY-i.maxY*A.y};if(this.boundaryOutline&&this.boundaryOutline.length>=3){let T=1/0,Q=1/0,N=-1/0,F=-1/0;for(let H of this.boundaryOutline)T=Math.min(T,H.x),Q=Math.min(Q,H.y),N=Math.max(N,H.x),F=Math.max(F,H.y);m={minX:Math.max(m.minX,T-i.minX),minY:Math.max(m.minY,Q-i.minY),maxX:Math.min(m.maxX,N-i.maxX),maxY:Math.min(m.maxY,F-i.maxY)}}this.viableBounds=m;let p=m.maxX-m.minX,g=m.maxY-m.minY,_=i.maxX-i.minX,f=i.maxY-i.minY;if(p<_||g<f){this.failed=!0,this.error="There is nowhere for the component to fit along this outline section";return}let y=Math.hypot(t.x-e.x,t.y-e.y),x=EWo(this.outlineSegment,y),[C,I]=x;this.viableOutlineSegment=[{x:td(C.x,m.minX,m.maxX),y:td(C.y,m.minY,m.maxY)},{x:td(I.x,m.minX,m.maxX),y:td(I.y,m.minY,m.maxY)}];let[b,P]=this.viableOutlineSegment,E=this.adjustPositionForOutlineCollision({x:(b.x+P.x)/2,y:(b.y+P.y)/2}),{offsetPadPoints:B,targetPointMap:w}=this.getNetworkTargetPointMappings();if(this.packStrategy==="minimum_closest_sum_squared_distance")this.twoPhaseIrlsSolver=new CWo({offsetPadPoints:B,targetPointMap:w,initialPosition:E,constraintFn:n,epsilon:0.000001,maxIterations:50});else this.irlsSolver=new cOe({offsetPadPoints:B,targetPointMap:w,initialPosition:E,constraintFn:n,epsilon:0.000001,maxIterations:50,useSquaredDistance:this.packStrategy==="minimum_sum_squared_distance_to_network"})}_step(){let e=this.irlsSolver||this.twoPhaseIrlsSolver;if(!e){this.solved=!0;return}if(e.step(),e.solved){let t=e.getBestPosition();this.optimalPosition=t,this.solved=!0}else if(e.failed)this.failed=!0,this.error=e.error}getNetworkTargetPointMappings(){let e=this.networkTargetPointMappingsCache?.get(this.componentRotationDegrees);if(e)return e;let t=this.getRotatedComponentPads(),n=t.map((r)=>({id:r.padId,offsetX:r.offset.x,offsetY:r.offset.y})),o=new Map;for(let r of t){let s=[];for(let a of this.packedComponents)for(let c of a.pads)if(c.networkId===r.networkId){if(!qfe(r.padId,c.padId,this.weightedConnections))continue;s.push({...c.absoluteCenter,networkId:c.networkId})}o.set(r.padId,s)}let i={offsetPadPoints:n,targetPointMap:o};return this.networkTargetPointMappingsCache?.set(this.componentRotationDegrees,i),i}projectPointOntoSegment(e,t){let[n,o]=t,i=o.x-n.x,r=o.y-n.y,s=e.x-n.x,a=e.y-n.y,c=i*i+r*r;if(c===0)return{x:n.x,y:n.y};let l=Math.max(0,Math.min(1,(s*i+a*r)/c));return{x:n.x+l*i,y:n.y+l*r}}getRotatedComponentPads(){let e=this.componentRotationDegrees*Math.PI/180;return this.componentToPack.pads.map((t)=>({...t,size:(this.componentRotationDegrees+90)%180===0?{x:t.size.y,y:t.size.x}:t.size,offset:uT(t.offset,e)}))}createTemporaryPackedComponent(e){let t=this.componentRotationDegrees*Math.PI/180,n=(this.componentRotationDegrees+90)%180===0;return{componentId:this.componentToPack.componentId,center:e,ccwRotationOffset:this.componentRotationDegrees,pads:this.componentToPack.pads.map((o)=>{let i=uT(o.offset,t);return{...o,size:{x:n?o.size.y:o.size.x,y:n?o.size.x:o.size.y},absoluteCenter:{x:e.x+i.x,y:e.y+i.y}}}),courtyard:this.componentToPack.courtyard}}adjustPositionForOutlineCollision(e){let t=this.createTemporaryPackedComponent(e),n=ML(t,0),o=mVt(this.outlineSegment,this.ccwFullOutline),i=Math.abs(o.x)>Math.abs(o.y),r=!i,s=e;if(i){let a=o.x>0,c=!a;if(a)s={x:n.maxX,y:e.y};else if(c)s={x:n.minX,y:e.y}}else if(r){let a=o.y>0,c=!a;if(a)s={x:e.x,y:n.maxY};else if(c)s={x:e.x,y:n.minY}}if(this.boundaryOutline&&this.boundaryOutline.length>=3){let a=this.createTemporaryPackedComponent(s),c=ML(a,0),l=a.pads.every((u)=>HU(u.absoluteCenter,this.boundaryOutline)),d=[{x:c.minX,y:c.minY},{x:c.minX,y:c.maxY},{x:c.maxX,y:c.minY},{x:c.maxX,y:c.maxY}].every((u)=>HU(u,this.boundaryOutline));if(!l||!d){if(this.viableBounds)s={x:td(s.x,this.viableBounds.minX,this.viableBounds.maxX),y:td(s.y,this.viableBounds.minY,this.viableBounds.maxY)}}}return s}visualize(){let e={lines:[],points:[],rects:[],circles:[]};if(this.obstacles&&this.obstacles.length>0)for(let s of this.obstacles)e.rects.push({center:s.absoluteCenter,width:s.width,height:s.height,fill:"rgba(0,0,0,0.1)",stroke:"#555",label:s.obstacleId});if(this.globalBounds)e.lines.push({points:[{x:this.globalBounds.minX,y:this.globalBounds.minY},{x:this.globalBounds.minX,y:this.globalBounds.maxY},{x:this.globalBounds.maxX,y:this.globalBounds.maxY},{x:this.globalBounds.maxX,y:this.globalBounds.minY},{x:this.globalBounds.minX,y:this.globalBounds.minY}],strokeColor:"rgba(255,0,255,0.5)",strokeDash:"2 2"});if(this.boundaryOutline&&this.boundaryOutline.length){let s=[...this.boundaryOutline];if(s.length>0&&(s[0].x!==s[s.length-1].x||s[0].y!==s[s.length-1].y))s.push({...s[0]});e.lines.push({points:s,strokeColor:"rgba(0, 0, 255, 0.5)",strokeDash:"4 2"})}if(this.viableBounds)e.rects.push({center:{x:(this.viableBounds.minX+this.viableBounds.maxX)/2,y:(this.viableBounds.minY+this.viableBounds.maxY)/2},width:this.viableBounds.maxX-this.viableBounds.minX,height:this.viableBounds.maxY-this.viableBounds.minY,fill:"rgba(0,255,0,0.1)",label:"Viable Bounds"});if(this.largestRectBounds)e.rects.push({center:{x:(this.largestRectBounds.minX+this.largestRectBounds.maxX)/2,y:(this.largestRectBounds.minY+this.largestRectBounds.maxY)/2},width:this.largestRectBounds.maxX-this.largestRectBounds.minX,height:this.largestRectBounds.maxY-this.largestRectBounds.minY,fill:"rgba(255,0,255,0.4)"});if(this.largestRectMidPoint)e.points.push({...this.largestRectMidPoint,label:"Largest Rect Mid Point",color:"rgba(128,0,255,1)"});if(this.largestRectOrigin)e.points.push({...this.largestRectOrigin,label:"Largest Rect Origin",color:"rgba(255,0,128,1)"});if(this.viableOutlineSegment){let[s,a]=this.viableOutlineSegment;e.lines.push({points:[s,a],strokeColor:"#2196F3"})}let[t,n]=this.outlineSegment;e.lines.push({points:[t,n],strokeColor:"rgba(255,0,0,1)",strokeDash:"3 3"});for(let[s,a]of this.ccwFullOutline)e.lines.push({points:[s,a],strokeColor:"rgba(0,0,0,0.5)",strokeDash:"4 4"});for(let s of this.packedComponents)for(let a of s.pads)e.rects.push({center:a.absoluteCenter,width:a.size.x,height:a.size.y,fill:lOe(a.networkId,0.5),stroke:"#333",label:`${a.padId} (${a.networkId})`});let o=this.optimalPosition??this.irlsSolver?.currentPosition??this.twoPhaseIrlsSolver?.currentPosition??{x:0,y:0},i=this.getRotatedComponentPads();for(let s of i){let a={x:o.x+s.offset.x,y:o.y+s.offset.y};e.rects.push({center:a,width:s.size.x,height:s.size.y,fill:this.failed?"rgba(255,0,0,0.5)":lOe(s.networkId,0.5),label:`${s.padId} (${s.networkId})`});for(let c of this.packedComponents)for(let l of c.pads)if(l.networkId===s.networkId){let d=qfe(s.padId,l.padId,this.weightedConnections);e.lines.push({points:[a,l.absoluteCenter],strokeColor:s.networkId==="VCC"?"#FF6B6B":"#4ECDC4",strokeDash:d?void 0:"4 2",label:`${s.networkId} ${d?"strong":"weak"}`})}}let r=this.irlsSolver||this.twoPhaseIrlsSolver;if(r){let s=r.currentPosition;e.points.push({...s,color:"#f44336"});let a=r.visualize();if(a.lines)e.lines.push(...a.lines);if(a.circles)e.circles.push(...a.circles);if(a.rects)e.rects.push(...a.rects);if(a.points)e.points.push(...a.points)}if(this.optimalPosition)e.points.push({...this.optimalPosition,color:"rgba(76, 175, 80, 0.3)"});return e}getOutput(){return this.optimalPosition??null}},dOe=(e)=>{let t=[],n=[];if(e.boundaryOutline&&e.boundaryOutline.length){let r=[...e.boundaryOutline];if(r.length>0&&(r[0].x!==r[r.length-1].x||r[0].y!==r[r.length-1].y))r.push({...r[0]});n.push({points:r,strokeColor:"rgba(0, 0, 255, 0.5)",strokeDash:"4 2"})}let o=Array.from(new Set(e.components.flatMap((r)=>r.pads.map((s)=>s.networkId)))),i=SWo(o);if(e.obstacles&&e.obstacles.length>0)for(let r of e.obstacles)t.push({center:{x:r.absoluteCenter.x,y:r.absoluteCenter.y},width:r.width,height:r.height,fill:"rgba(0,0,0,0.1)",stroke:"#555",label:r.obstacleId});for(let r of e.components){let s=ML(r),a=s.maxX-s.minX,c=s.maxY-s.minY,l=Boolean(r.isStatic),d="rgba(33, 150, 243, 0.25)",u="rgba(33, 150, 243, 0.6)",h={center:{x:r.center.x,y:r.center.y},width:a,height:c,fill:l?"rgba(33, 150, 243, 0.25)":"rgba(0,0,0,0.25)",stroke:l?"rgba(33, 150, 243, 0.6)":void 0,label:[r.componentId,`ccwRotationOffset: ${r.ccwRotationOffset.toFixed(1)}°`].join(`
`)};t.push(h);for(let A of r.pads){let{absoluteCenter:m,size:p,padId:g,networkId:_}=A,f={center:{x:m.x,y:m.y},width:p.x,height:p.y,label:`${g} ${_}`,fill:"rgba(255,0,0,0.8)"};t.push(f)}}for(let r of o){let s=e.components.flatMap((a)=>a.pads.filter((c)=>c.networkId===r));for(let a=0;a<s.length;a++)for(let c=a+1;c<s.length;c++){let l=s[a],d=s[c],u=qfe(l.padId,d.padId,e.weightedConnections);n.push({points:[l.absoluteCenter,d.absoluteCenter],strokeColor:i[r],strokeDash:u?void 0:"4 2"})}}return{coordinateSystem:"cartesian",rects:t,lines:n}};function Ane(e){if(e.courtyard){let t=e.courtyard,n=e.ccwRotationOffset*Math.PI/180,o=uT(t.offsetFromCenter,n),i=(e.ccwRotationOffset%360+360)%360,r=i===90||i===270,{width:s,height:a}=t;if(r)s=t.height,a=t.width;return[{center:{x:e.center.x+o.x,y:e.center.y+o.y},width:s,height:a}]}return e.pads.map((t)=>({center:{x:t.absoluteCenter.x,y:t.absoluteCenter.y},width:t.size.x,height:t.size.y}))}function wWo({component:e,packedComponents:t,minGap:n}){let o=t.flatMap((r)=>Ane(r)),i=Ane(e);for(let r of i)for(let s of o){let{distance:a}=JM(r,s);if(a+0.000001<n)return{hasOverlap:!0,gapDistance:a}}return{hasOverlap:!1}}var pVt=class extends Zn{componentToPack;packedComponents;packPlacementStrategy;minGap;obstacles;boundaryOutline;weightedConnections;getSolverName(){return"SingleComponentPackSolver"}currentPhase="outline";outlines=[];queuedOutlineSegments=[];currentSegmentIndex=0;currentRotationIndex=0;activeSubSolver=null;candidateResults=[];rejectedCandidates=[];bestCandidate;outputPackedComponent;bounds;networkTargetPointMappingsCache=new Map;constructor(e){super();this.componentToPack=e.componentToPack,this.packedComponents=e.packedComponents,this.packPlacementStrategy=e.packPlacementStrategy,this.minGap=e.minGap??0,this.obstacles=e.obstacles??[],this.bounds=e.bounds,this.boundaryOutline=e.boundaryOutline,this.weightedConnections=e.weightedConnections}_setup(){super._setup(),this.currentPhase="outline",this.outlines=[],this.queuedOutlineSegments=[],this.candidateResults=[],this.activeSubSolver=void 0,this.currentSegmentIndex=0,this.currentRotationIndex=0,this.networkTargetPointMappingsCache.clear()}_step(){if(this.solved||this.failed)return;switch(this.currentPhase){case"outline":this.executeOutlinePhase();break;case"segment_candidate":this.executeSegmentCandidatePhase();break;case"evaluate":this.executeEvaluatePhase();break}}executeOutlinePhase(){if(this.packedComponents.length===0){let n=this.componentToPack.availableRotationDegrees??[0,90,180,270],o={x:0,y:0},i=n[0]??0,r=this.createPackedComponent(o,i),s=Ane(r);if(!(this.obstacles??[]).some((c)=>{let l={center:{x:c.absoluteCenter.x,y:c.absoluteCenter.y},width:c.width,height:c.height};return s.some((d)=>{let{distance:u}=JM(d,l);return u+0.000001<this.minGap})})){this.outputPackedComponent=r,this.solved=!0;return}}this.outlines=yWo(this.packedComponents,{minGap:this.minGap,obstacles:this.obstacles});let e=this.componentToPack.availableRotationDegrees??[0,90,180,270];for(let n=0;n<this.outlines.length;n++){let o=this.outlines[n];for(let i=0;i<o.length;i++){let r=o[i];this.queuedOutlineSegments.push({segment:r,availableRotations:[...e],segmentIndex:n*1000+i,ccwFullOutline:o})}}if(this.boundaryOutline&&this.boundaryOutline.length>=3){let n=[];for(let i=0;i<this.boundaryOutline.length;i++){let r=this.boundaryOutline[i],s=this.boundaryOutline[(i+1)%this.boundaryOutline.length];n.push([r,s])}let o=this.outlines.length;for(let i=0;i<n.length;i++){let r=n[i];this.queuedOutlineSegments.push({segment:r,availableRotations:[...e],segmentIndex:o*1000+i,ccwFullOutline:n})}}let t=this.outlines.length+1;for(let n of this.obstacles){let o=n.width/2+this.minGap,i=n.height/2+this.minGap,r=n.absoluteCenter.x,s=n.absoluteCenter.y,a=[{x:r-o,y:s-i},{x:r+o,y:s-i},{x:r+o,y:s+i},{x:r-o,y:s+i}],c=[[a[0],a[1]],[a[1],a[2]],[a[2],a[3]],[a[3],a[0]]];for(let l=0;l<c.length;l++){let d=c[l];this.queuedOutlineSegments.push({segment:d,availableRotations:[...e],segmentIndex:t*1000+l,ccwFullOutline:c})}t++}this.currentPhase="segment_candidate",this.currentSegmentIndex=0,this.currentRotationIndex=0}executeSegmentCandidatePhase(){if(this.activeSubSolver?.solved||this.activeSubSolver?.failed){let e=this.queuedOutlineSegments[this.currentSegmentIndex],t=e.availableRotations[this.currentRotationIndex],n=1/0,o;if(this.activeSubSolver.solved&&this.activeSubSolver.optimalPosition){o=this.activeSubSolver.optimalPosition;let i=this.createPackedComponent(o,t),{hasOverlap:r,gapDistance:s}=wWo({component:i,packedComponents:this.packedComponents,minGap:this.minGap}),a=1/0,c=Ane(i),l=(this.obstacles??[]).some((h)=>{let A={center:{x:h.absoluteCenter.x,y:h.absoluteCenter.y},width:h.width,height:h.height};return c.some((m)=>{let{distance:p}=JM(m,A);return a=Math.min(a,p),p+0.000001<this.minGap})}),d=!1;if(this.bounds){let h=ML(i,0);d=h.minX<this.bounds.minX||h.maxX>this.bounds.maxX||h.minY<this.bounds.minY||h.maxY>this.bounds.maxY}let u=!1;if(this.boundaryOutline&&this.boundaryOutline.length>=3){let h=ML(i,0),A=i.pads.every((p)=>HU(p.absoluteCenter,this.boundaryOutline)),m=[{x:h.minX,y:h.minY},{x:h.minX,y:h.maxY},{x:h.maxX,y:h.minY},{x:h.maxX,y:h.maxY}].every((p)=>HU(p,this.boundaryOutline));u=!A||!m}if(n=this.calculateDistance(o,t),r)this.rejectedCandidates.push({segment:e.segment,rotation:t,optimalPosition:o,distance:n,segmentIndex:e.segmentIndex,rotationIndex:this.currentRotationIndex,gapDistance:s});else if(l)this.rejectedCandidates.push({segment:e.segment,rotation:t,optimalPosition:o,distance:n,segmentIndex:e.segmentIndex,rotationIndex:this.currentRotationIndex,gapDistance:a});else if(d)this.rejectedCandidates.push({segment:e.segment,rotation:t,optimalPosition:o,distance:n,segmentIndex:e.segmentIndex,rotationIndex:this.currentRotationIndex,gapDistance:-1});else if(u)this.rejectedCandidates.push({segment:e.segment,rotation:t,optimalPosition:o,distance:n,segmentIndex:e.segmentIndex,rotationIndex:this.currentRotationIndex,gapDistance:-1});else this.candidateResults.push({segment:e.segment,rotation:t,optimalPosition:o,distance:n,segmentIndex:e.segmentIndex,rotationIndex:this.currentRotationIndex})}this.currentRotationIndex++,this.activeSubSolver=void 0}while(!this.activeSubSolver){if(this.currentSegmentIndex>=this.queuedOutlineSegments.length){this.currentPhase="evaluate";return}let e=this.queuedOutlineSegments[this.currentSegmentIndex];if(this.currentRotationIndex>=e.availableRotations.length){this.currentSegmentIndex++,this.currentRotationIndex=0;continue}let t=e.availableRotations[this.currentRotationIndex];this.activeSubSolver=new BWo({outlineSegment:e.segment,ccwFullOutline:e.ccwFullOutline,componentRotationDegrees:t,packStrategy:this.packPlacementStrategy,minGap:this.minGap,packedComponents:this.packedComponents,componentToPack:this.componentToPack,obstacles:this.obstacles,globalBounds:this.bounds,boundaryOutline:this.boundaryOutline,weightedConnections:this.weightedConnections,networkTargetPointMappingsCache:this.networkTargetPointMappingsCache}),this.activeSubSolver.setup();break}this.activeSubSolver.step()}executeEvaluatePhase(){if(this.candidateResults.length===0){this.failed=!0,this.error="No valid candidates found";return}if(this.candidateResults.sort((e,t)=>e.distance-t.distance),this.bestCandidate=this.candidateResults[0],this.bestCandidate.optimalPosition)this.outputPackedComponent=this.createPackedComponent(this.bestCandidate.optimalPosition,this.bestCandidate.rotation);this.solved=!0}calculateDistance(e,t){let n=this.createPackedComponent(e,t),o=0,i=this.packPlacementStrategy==="minimum_sum_squared_distance_to_network"||this.packPlacementStrategy==="minimum_closest_sum_squared_distance";for(let r of n.pads){let s=1/0;for(let a of this.packedComponents)for(let c of a.pads)if(c.networkId===r.networkId){if(!qfe(r.padId,c.padId,this.weightedConnections))continue;let l=r.absoluteCenter.x-c.absoluteCenter.x,d=r.absoluteCenter.y-c.absoluteCenter.y,u=Math.sqrt(l*l+d*d);s=Math.min(s,u)}if(s<1/0)o+=i?s*s:s}return o}createPackedComponent(e,t){let n={...this.componentToPack,center:e,ccwRotationOffset:t,pads:this.componentToPack.pads.map((o)=>({...o,absoluteCenter:{x:0,y:0}}))};return jfe(n),n}visualize(){if(this.activeSubSolver)return this.activeSubSolver.visualize();let e=dOe({components:this.packedComponents,minGap:this.minGap,packOrderStrategy:"largest_to_smallest",packPlacementStrategy:this.packPlacementStrategy});if(e.points??=[],e.lines??=[],e.rects??=[],e.texts??=[],e.circles??=[],this.obstacles&&this.obstacles.length>0)for(let t of this.obstacles)e.rects.push({center:t.absoluteCenter,width:t.width,height:t.height,fill:"rgba(0,0,0,0.1)",stroke:"#555",label:t.obstacleId});if(this.bounds)e.lines.push({points:[{x:this.bounds.minX,y:this.bounds.minY},{x:this.bounds.minX,y:this.bounds.maxY},{x:this.bounds.maxX,y:this.bounds.maxY},{x:this.bounds.maxX,y:this.bounds.minY},{x:this.bounds.minX,y:this.bounds.minY}],strokeColor:"rgba(0,0,0,0.5)",strokeDash:"2 2"});if(this.boundaryOutline&&this.boundaryOutline.length){let t=[...this.boundaryOutline];if(t.length>0&&(t[0].x!==t[t.length-1].x||t[0].y!==t[t.length-1].y))t.push({...t[0]});e.lines.push({points:t,strokeColor:"rgba(0, 0, 255, 0.5)",strokeDash:"4 2"})}switch(this.currentPhase){case"outline":this.visualizeOutlinePhase(e);break;case"segment_candidate":this.visualizeSegmentCandidatePhase(e);break;case"evaluate":this.visualizeEvaluatePhase(e);break}return e}visualizeOutlinePhase(e){for(let t of this.outlines)for(let n of t){let[o,i]=n;e.lines.push({points:[o,i],strokeColor:"#ff4444"})}for(let t=0;t<this.outlines.length;t++){let n=this.outlines[t];for(let o=0;o<n.length;o++){let[i,r]=n[o];e.points.push({x:i.x,y:i.y,label:`outlines [${t}] [${o}]`,color:"#ff4444"})}}}visualizeSegmentCandidatePhase(e){if(this.visualizeOutlinePhase(e),this.activeSubSolver){let t=this.activeSubSolver.visualize();if(t.lines)e.lines.push(...t.lines);if(t.points)e.points.push(...t.points);if(t.rects)e.rects.push(...t.rects);if(t.circles)e.circles.push(...t.circles??[])}else for(let t=0;t<this.candidateResults.length;t++){let n=this.candidateResults[t];if(n.optimalPosition){let o=this.createPackedComponent(n.optimalPosition,n.rotation);for(let i of o.pads)e.rects.push({center:i.absoluteCenter,width:i.size.x,height:i.size.y,fill:"rgba(255,165,0,0.3)",stroke:"rgba(255,165,0,0.8)",strokeWidth:1});e.points.push({x:n.optimalPosition.x,y:n.optimalPosition.y,label:`c${t}, d=${n.distance.toFixed(3)}`,color:"rgba(255,165,0,0.8)"})}}}visualizeEvaluatePhase(e){this.visualizeOutlinePhase(e);for(let t=0;t<this.candidateResults.length;t++){let n=this.candidateResults[t];if(!n.optimalPosition)continue;let o=t,i=o===0;e.points.push({x:n.optimalPosition.x,y:n.optimalPosition.y,label:`step=${o}, d=${n.distance.toFixed(3)}`,color:i?"rgba(0,255,0,0.8)":"rgba(255,165,0,0.6)"})}for(let t=0;t<this.rejectedCandidates.length;t++){let n=this.rejectedCandidates[t];if(!n.optimalPosition)continue;e.points.push({x:n.optimalPosition.x,y:n.optimalPosition.y,label:`rejected, d=${n.distance.toFixed(3)}
gap_distance=${n.gapDistance}`,color:"rgba(255,0,0,0.8)"})}if(this.outputPackedComponent)for(let t of this.outputPackedComponent.pads)e.rects.push({center:t.absoluteCenter,width:t.size.x,height:t.size.y,fill:"rgba(0,255,0,0.7)"})}getResult(){return this.outputPackedComponent}getOutput(){return this.getResult()}getConstructorParams(){return{componentToPack:this.componentToPack,packedComponents:this.packedComponents,packPlacementStrategy:this.packPlacementStrategy,minGap:this.minGap,obstacles:this.obstacles,bounds:this.bounds,boundaryOutline:this.boundaryOutline,weightedConnections:this.weightedConnections}}};function TWo(e){if(e.length<3){let r=e.reduce((a,c)=>a+c.x,0),s=e.reduce((a,c)=>a+c.y,0);return{x:r/e.length,y:s/e.length}}let t=0,n=0,o=0;for(let r=0;r<e.length;r++){let s=e[r],a=e[(r+1)%e.length],c=s.x*a.y-a.x*s.y;t+=c,n+=(s.x+a.x)*c,o+=(s.y+a.y)*c}if(t*=0.5,Math.abs(t)<0.0000000001){let r=e.reduce((a,c)=>a+c.x,0),s=e.reduce((a,c)=>a+c.y,0);return{x:r/e.length,y:s/e.length}}return n/=6*t,o/=6*t,{x:n,y:o}}var X6=class extends Zn{packInput;getSolverName(){return"PackSolver2"}unpackedComponentQueue=[];packedComponents=[];componentToPack;constructor(e){super();this.MAX_ITERATIONS=300000,this.packInput=e}getConstructorParams(){return this.packInput}_setup(){let{components:e,packOrderStrategy:t,packFirst:n=[]}=this.packInput,o=e.filter((s)=>{if(s.pads.length===0)return!1;return s.pads.every((a)=>Number.isFinite(a.size.x)&&Number.isFinite(a.size.y)&&a.size.x>0&&a.size.y>0)}),i=o.filter((s)=>s.isStatic),r=o.filter((s)=>!s.isStatic);this.packedComponents=i.map((s)=>{let a={...s,center:s.center??{x:0,y:0},ccwRotationOffset:s.ccwRotationOffset??s.availableRotationDegrees?.[0]??0,pads:s.pads.map((c)=>({...c,absoluteCenter:c.absoluteCenter??{x:0,y:0}}))};return jfe(a),a}),this.unpackedComponentQueue=dWo({components:r,packOrderStrategy:t,packFirst:n})}packFirstComponent(){let e=this.unpackedComponentQueue.shift(),t={x:0,y:0};if(this.packInput.boundaryOutline&&this.packInput.boundaryOutline.length>=3)t=TWo(this.packInput.boundaryOutline);let n={...e,center:t,ccwRotationOffset:e.ccwRotationOffset??e.availableRotationDegrees?.[0]??0,pads:e.pads.map((l)=>({...l,absoluteCenter:{x:0,y:0}}))};jfe(n);let o=this.packInput.obstacles??[],i=Ane(n),r=o.some((l)=>{let d={center:{x:l.absoluteCenter.x,y:l.absoluteCenter.y},width:l.width,height:l.height};return i.some((u)=>{let{distance:h}=JM(u,d);return h+0.000001<this.packInput.minGap})}),s=!1;if(this.packInput.boundaryOutline&&this.packInput.boundaryOutline.length>=3){let l=ML(n,0),d=n.pads.every((h)=>HU(h.absoluteCenter,this.packInput.boundaryOutline)),u=[{x:l.minX,y:l.minY},{x:l.minX,y:l.maxY},{x:l.maxX,y:l.minY},{x:l.maxX,y:l.maxY}].every((h)=>HU(h,this.packInput.boundaryOutline));s=!d||!u}if(!r&&!s){this.packedComponents.push(n);return}let a=new pVt({packedComponents:[],componentToPack:e,packPlacementStrategy:this.packInput.packPlacementStrategy,minGap:this.packInput.minGap,obstacles:o,bounds:this.packInput.bounds,boundaryOutline:this.packInput.boundaryOutline,weightedConnections:this.packInput.weightedConnections});a.solve();let c=a.getResult();if(c)this.packedComponents.push(c);else this.packedComponents.push(n)}_step(){if(this.solved||this.failed)return;if(this.packedComponents.length===0){if(this.unpackedComponentQueue.length===0){this.solved=!0;return}this.packFirstComponent();return}if(!this.activeSubSolver){if(this.unpackedComponentQueue.length===0){this.solved=!0;return}if(this.componentToPack=this.unpackedComponentQueue.shift(),!this.componentToPack){this.solved=!0;return}this.activeSubSolver=new pVt({packedComponents:this.packedComponents,componentToPack:this.componentToPack,packPlacementStrategy:this.packInput.packPlacementStrategy,minGap:this.packInput.minGap,obstacles:this.packInput.obstacles??[],bounds:this.packInput.bounds,boundaryOutline:this.packInput.boundaryOutline,weightedConnections:this.packInput.weightedConnections}),this.activeSubSolver.setup()}if(this.activeSubSolver.step(),this.activeSubSolver.failed){this.failed=!0;return}if(this.activeSubSolver.solved){let e=this.activeSubSolver.getResult();if(e)this.packedComponents.push(e);else{let t={...this.componentToPack,center:{x:0,y:0},ccwRotationOffset:this.componentToPack?.ccwRotationOffset??this.componentToPack?.availableRotationDegrees?.[0]??0,pads:this.componentToPack.pads.map((n)=>({...n,absoluteCenter:{x:0,y:0}}))};jfe(t),this.packedComponents.push(t)}this.componentToPack=void 0,this.activeSubSolver=void 0}}visualize(){if(this.activeSubSolver)return this.activeSubSolver.visualize();let e={coordinateSystem:"cartesian",title:"Pack Solver 2",points:[],lines:[],rects:[],circles:[],texts:[],arrows:[]};if(this.packInput.obstacles&&this.packInput.obstacles.length>0)for(let o of this.packInput.obstacles)e.rects.push({center:o.absoluteCenter,width:o.width,height:o.height,fill:"rgba(0,0,0,0.1)",stroke:"#555",label:o.obstacleId});if(this.packInput.bounds)e.lines.push({points:[{x:this.packInput.bounds.minX,y:this.packInput.bounds.minY},{x:this.packInput.bounds.minX,y:this.packInput.bounds.maxY},{x:this.packInput.bounds.maxX,y:this.packInput.bounds.maxY},{x:this.packInput.bounds.maxX,y:this.packInput.bounds.minY},{x:this.packInput.bounds.minX,y:this.packInput.bounds.minY}],strokeColor:"rgba(0,0,0,0.5)",strokeDash:"2 2"});if(this.packInput.boundaryOutline&&this.packInput.boundaryOutline.length){let o=[...this.packInput.boundaryOutline];if(o.length>0&&(o[0].x!==o[o.length-1].x||o[0].y!==o[o.length-1].y))o.push({...o[0]});e.lines.push({points:o,strokeColor:"rgba(0, 0, 255, 0.5)",strokeDash:"4 2"})}if(this.packedComponents.length===0)for(let o of this.unpackedComponentQueue)for(let i of o.pads)e.rects.push({center:{x:0,y:0},width:i.size.x,height:i.size.y,fill:"rgba(0,0,0,0.1)"});let t=this.packedComponents.flatMap((o)=>o.pads),n=new Map;for(let o of t)if(o.networkId)n.set(o.networkId,[...n.get(o.networkId)||[],o]);for(let o of t)e.rects.push({center:o.absoluteCenter,width:o.size.x,height:o.size.y,fill:"rgba(255,0,0,0.5)"});for(let[o,i]of n.entries())for(let r=0;r<i.length;r++)for(let s=r+1;s<i.length;s++){let a=i[r],c=i[s];e.lines.push({points:[a.absoluteCenter,c.absoluteCenter],strokeColor:lOe(o,0.5)})}return e}getOutput(){return{packedComponents:this.packedComponents,unpackedComponents:this.unpackedComponentQueue}}},fVt=(e)=>{let t=new X6(e);return t.solve(),{...e,components:t.packedComponents}},DWo=(e)=>{if(!e||e.length===0)return{minX:0,maxX:0,minY:0,maxY:0};let t=1/0,n=1/0,o=-1/0,i=-1/0;for(let r of e)t=Math.min(t,r.x),o=Math.max(o,r.x),n=Math.min(n,r.y),i=Math.max(i,r.y);return{minX:t,maxX:o,minY:n,maxY:i}},sOe=(e)=>{let{width:t,height:n,ccwRotationDegrees:o}=e,i=o*Math.PI/180,r=(c)=>{let l=Math.abs(c);if(l<0.000000000001)return 0;if(Math.abs(l-1)<0.000000000001)return 1;return l},s=r(Math.cos(i)),a=r(Math.sin(i));return{width:t*s+n*a,height:t*a+n*s}},yVt=(e,t,n)=>{let o=[],i=({padId:r,pcbPortId:s,sx:a,sy:c,x:l,y:d})=>o.push({padId:r,networkId:n(s),size:{x:a,y:c},absoluteCenter:{x:l,y:d},pcbPortId:s});for(let r of t.pcb_via.list({pcb_component_id:e.pcb_component_id}))i({padId:r.pcb_via_id,pcbPortId:r.pcb_port_id,sx:r.outer_diameter??r.hole_diameter??0,sy:r.outer_diameter??r.hole_diameter??0,x:r.x,y:r.y});for(let r of t.pcb_plated_hole.list({pcb_component_id:e.pcb_component_id}))switch(r.shape){case"circle":{i({padId:r.pcb_plated_hole_id,pcbPortId:r.pcb_port_id,sx:r.outer_diameter??r.hole_diameter??0,sy:r.outer_diameter??r.hole_diameter??0,x:r.x,y:r.y});break}case"oval":case"pill":{let s=sOe({width:r.outer_width,height:r.outer_height,ccwRotationDegrees:r.ccw_rotation});i({padId:r.pcb_plated_hole_id,pcbPortId:r.pcb_port_id,sx:s.width,sy:s.height,x:r.x,y:r.y});break}case"circular_hole_with_rect_pad":{i({padId:r.pcb_plated_hole_id,pcbPortId:r.pcb_port_id,sx:r.rect_pad_width,sy:r.rect_pad_height,x:r.x,y:r.y});break}case"pill_hole_with_rect_pad":{i({padId:r.pcb_plated_hole_id,pcbPortId:r.pcb_port_id,sx:r.rect_pad_width,sy:r.rect_pad_height,x:r.x,y:r.y});break}case"rotated_pill_hole_with_rect_pad":{let s=sOe({width:r.rect_pad_width,height:r.rect_pad_height,ccwRotationDegrees:r.rect_ccw_rotation});i({padId:r.pcb_plated_hole_id,pcbPortId:r.pcb_port_id,sx:s.width,sy:s.height,x:r.x,y:r.y});break}default:{console.warn(`Unsupported plated hole shape ${r.shape}`);break}}for(let r of t.pcb_smtpad.list({pcb_component_id:e.pcb_component_id}))switch(r.shape){case"rect":{i({padId:r.pcb_smtpad_id,pcbPortId:r.pcb_port_id,sx:r.width??0,sy:r.height??0,x:r.x,y:r.y});break}case"pill":{i({padId:r.pcb_smtpad_id,pcbPortId:r.pcb_port_id,sx:r.width,sy:r.height,x:r.x,y:r.y});break}case"rotated_rect":case"rotated_pill":{let s=sOe({width:r.width,height:r.height,ccwRotationDegrees:r.ccw_rotation});i({padId:r.pcb_smtpad_id,pcbPortId:r.pcb_port_id,sx:s.width,sy:s.height,x:r.x,y:r.y});break}case"circle":{i({padId:r.pcb_smtpad_id,pcbPortId:r.pcb_port_id,sx:r.radius*2,sy:r.radius*2,x:r.x,y:r.y});break}case"polygon":{if(r.points&&r.points.length>0){let{minX:s,maxX:a,minY:c,maxY:l}=DWo(r.points),d=a-s,u=l-c,h=(s+a)/2,A=(c+l)/2;i({padId:r.pcb_smtpad_id,pcbPortId:r.pcb_port_id,sx:d,sy:u,x:h,y:A})}else console.warn(`Polygon pad ${r.pcb_smtpad_id} has no points`);break}}return o},NWo=(e,t)=>{let n=new Set,o=(r)=>{if(!r)return;if(r.nodeType==="component"){let s=r.otherChildElements?.[0]?.pcb_component_id;if(s)n.add(s)}for(let s of r.childNodes??[])o(s)};o(t);let i=[];for(let r of e.pcb_plated_hole.list({})){if(!("pcb_component_id"in r)||!r.pcb_component_id){i.push(r);continue}if(!n.has(r.pcb_component_id))i.push(r)}for(let r of e.pcb_hole.list({}))i.push(r);return i},RWo=(e,t,n)=>{let o=n*Math.PI/180,i=Math.abs(Math.cos(o)),r=Math.abs(Math.sin(o));return{width:e*i+t*r,height:e*r+t*i}},QWo=(e)=>{if(e.type==="pcb_plated_hole"&&e.shape==="circular_hole_with_rect_pad"){let{rect_pad_height:t,rect_pad_width:n,x:o,y:i}=e;return{obstacleId:e.pcb_plated_hole_id,absoluteCenter:{x:o,y:i},width:n,height:t}}if(e.type==="pcb_plated_hole"&&e.shape==="rotated_pill_hole_with_rect_pad"){let{rect_pad_height:t,rect_pad_width:n,rect_ccw_rotation:o,x:i,y:r}=e,s=RWo(n,t,o);return{obstacleId:e.pcb_plated_hole_id,absoluteCenter:{x:i,y:r},width:s.width,height:s.height}}if(e.type==="pcb_hole"){let{x:t,y:n,pcb_hole_id:o}=e,i="hole_diameter"in e?e.hole_diameter:e.hole_width,r="hole_diameter"in e?e.hole_diameter:e.hole_height;return{obstacleId:o,absoluteCenter:{x:t,y:n},width:i,height:r}}return},xVt=(e)=>{let{db:t,pcbComponentIds:n,componentCenter:o}=e;if(Array.from(new Set(n)).length!==1)return;let r=new Set(n),s=1/0,a=1/0,c=-1/0,l=-1/0,d=!1;for(let A of t.pcb_courtyard_rect.list()){if(!r.has(A.pcb_component_id))continue;s=Math.min(s,A.center.x-A.width/2),c=Math.max(c,A.center.x+A.width/2),a=Math.min(a,A.center.y-A.height/2),l=Math.max(l,A.center.y+A.height/2),d=!0}for(let A of t.pcb_courtyard_polygon.list()){if(!r.has(A.pcb_component_id))continue;for(let m of A.points)s=Math.min(s,m.x),c=Math.max(c,m.x),a=Math.min(a,m.y),l=Math.max(l,m.y);d=!0}for(let A of t.pcb_courtyard_outline.list()){if(!r.has(A.pcb_component_id))continue;for(let m of A.outline)s=Math.min(s,m.x),c=Math.max(c,m.x),a=Math.min(a,m.y),l=Math.max(l,m.y);d=!0}for(let A of t.pcb_courtyard_circle.list()){if(!r.has(A.pcb_component_id))continue;s=Math.min(s,A.center.x-A.radius),c=Math.max(c,A.center.x+A.radius),a=Math.min(a,A.center.y-A.radius),l=Math.max(l,A.center.y+A.radius),d=!0}if(!d)return;let u=(s+c)/2,h=(a+l)/2;return{offsetFromCenter:{x:u-o.x,y:h-o.y},width:c-s,height:l-a}},AVt=(e,t,n,o,i,r=new Map,s={},a=!1)=>{let c=e.flatMap((g)=>{let _=yVt(g,n,o),f=s[g.pcb_component_id];if(!f)return _;return _.map((y)=>({...y,size:{x:y.size.x+f.left+f.right,y:y.size.y+f.top+f.bottom},absoluteCenter:{x:y.absoluteCenter.x+(f.right-f.left)/2,y:y.absoluteCenter.y+(f.top-f.bottom)/2}}))}),l=1/0,d=1/0,u=-1/0,h=-1/0;for(let g of c)l=Math.min(l,g.absoluteCenter.x-g.size.x/2),u=Math.max(u,g.absoluteCenter.x+g.size.x/2),d=Math.min(d,g.absoluteCenter.y-g.size.y/2),h=Math.max(h,g.absoluteCenter.y+g.size.y/2);let A={x:(l+u)/2,y:(d+h)/2},m=c.map((g)=>({padId:g.padId,networkId:g.networkId,type:"rect",size:g.size,absoluteCenter:g.absoluteCenter,offset:{x:g.absoluteCenter.x-A.x,y:g.absoluteCenter.y-A.y}}));for(let g of c){if(!g.pcbPortId)continue;let _=n.pcb_port.get(g.pcbPortId)?.source_port_id;if(!_)continue;let f=r.get(_)??[];f.push(g.padId),r.set(_,f)}if(i){let g={padId:`${t}-inner`,networkId:`${t}-inner`,type:"rect",size:{x:u-l,y:h-d},absoluteCenter:A,offset:{x:0,y:0}};m.push(g)}let p=xVt({db:n,pcbComponentIds:e.map((g)=>g.pcb_component_id),componentCenter:A});return{componentId:t,isStatic:a,center:A,ccwRotationOffset:0,pads:m,courtyard:p}},CVt=(e,t)=>{if(e.nodeType==="component"){let n=e.otherChildElements[0]?.pcb_component_id;return n?[t.pcb_component.get(n)]:[]}return e.childNodes.flatMap((n)=>CVt(n,t))},IVt=(e,t={})=>{let n={components:[],minGap:0,packOrderStrategy:"largest_to_smallest",packPlacementStrategy:"shortest_connection_along_outline",obstacles:t.obstacles??[]},o=RM(e,{source_group_id:t.source_group_id}),i=ts(e),r=0,s=new Map,a=NWo(i,o),c=e.find((f)=>f.type==="pcb_board");if(c?.outline)n.boundaryOutline=c.outline;let l=(f)=>{if(f){let y=i.pcb_port.get(f);if(y){let x=i.source_port.get(y.source_port_id);if(x?.subcircuit_connectivity_map_key)return x.subcircuit_connectivity_map_key}}return`unnamed${r++}`},d=o.childNodes??[],u=(f)=>{let y=[];if(f.nodeType==="component"){let x=f.otherChildElements.find((C)=>C.type==="pcb_component");if(x&&x.position_mode==="relative_to_group_anchor")y.push(x)}for(let x of f.childNodes??[])y.push(...u(x));return y},h=new Set(t.staticPcbComponentIds??[]),A=new Set;for(let f of d)if(f.nodeType==="component"){let y=f.otherChildElements.find((C)=>C.type==="pcb_component");if(!y)continue;if(y.position_mode==="relative_to_group_anchor"&&!h.has(y.pcb_component_id))continue;let x=t.shouldAddInnerObstacles??!1;if(y.obstructs_within_bounds===!0)x=!0;else if(y.obstructs_within_bounds===!1)x=!1;n.components.push(AVt([y],y.pcb_component_id,i,l,x,s,t.chipMarginsMap,h.has(y.pcb_component_id)))}else if(f.nodeType==="group"){let y=CVt(f,i);if(!y.length)continue;for(let C of y)A.add(C.pcb_component_id);let x=f.sourceGroup?.source_group_id??f.sourceGroup?.name??`group_${n.components.length}`;n.components.push(AVt(y,x,i,l,void 0,s,t.chipMarginsMap,h.has(x)))}let m=d.flatMap((f)=>u(f));for(let f of m){if(h.has(f.pcb_component_id))continue;if(A.has(f.pcb_component_id))continue;let y=xVt({db:i,pcbComponentIds:[f.pcb_component_id],componentCenter:f.center});if(y){n.obstacles.push({obstacleId:f.pcb_component_id,absoluteCenter:{x:f.center.x+y.offsetFromCenter.x,y:f.center.y+y.offsetFromCenter.y},width:y.width,height:y.height});continue}let x=yVt(f,i,l);if(x.length===0)continue;let C=1/0,I=1/0,b=-1/0,P=-1/0;for(let T of x)C=Math.min(C,T.absoluteCenter.x-T.size.x/2),b=Math.max(b,T.absoluteCenter.x+T.size.x/2),I=Math.min(I,T.absoluteCenter.y-T.size.y/2),P=Math.max(P,T.absoluteCenter.y+T.size.y/2);let E={x:(C+b)/2,y:(I+P)/2},B=b-C,w=P-I;n.obstacles.push({obstacleId:f.pcb_component_id,absoluteCenter:E,width:B,height:w})}for(let f of a){let y=QWo(f);if(y)n.obstacles.push(y)}let p=[],g=new Set,_=typeof i.source_trace.list==="function"?i.source_trace.list():e.filter((f)=>f.type==="source_trace");for(let f of _){let y=f.connected_source_port_ids||[],x=f.connected_source_net_ids||[];if(!(y.length===2&&x.length===0))continue;let[I,b]=y,P=I?s.get(I)??[]:[],E=b?s.get(b)??[]:[];for(let B of P)for(let w of E){let T=[B,w].sort().join("--");if(g.has(T))continue;p.push({padIds:[B,w],weight:1,ignoreWeakConnections:!0}),g.add(T)}}if(p.length>0)n.weightedConnections=p;return n},bVt=(e)=>{let t=e.components.map((n)=>({...n.isStatic?{...n,pads:n.pads.map((o)=>({...o}))}:{componentId:n.componentId,availableRotationDegrees:n.availableRotationDegrees,pads:n.pads.map(({absoluteCenter:o,...i})=>i),courtyard:n.courtyard}}));return{...e,components:t}};pn();var zA=class{MAX_ITERATIONS=200000;solved=!1;failed=!1;iterations=0;progress=0;error=null;activeSubSolver;failedSubSolvers;timeToSolve;stats={};step(){if(this.solved)return;if(this.failed)return;this.iterations++;try{this._step()}catch(e){throw this.error=`${this.constructor.name} error: ${e}`,this.failed=!0,e}if(!this.solved&&this.iterations>this.MAX_ITERATIONS)this.tryFinalAcceptance();if(!this.solved&&this.iterations>this.MAX_ITERATIONS)this.error=`${this.constructor.name} ran out of iterations`,this.failed=!0;if("computeProgress"in this)this.progress=this.computeProgress()}_step(){}getConstructorParams(){throw Error("getConstructorParams not implemented")}solve(){let e=Date.now();while(!this.solved&&!this.failed)this.step();let t=Date.now();this.timeToSolve=t-e}visualize(){return{lines:[],points:[],rects:[],circles:[]}}tryFinalAcceptance(){}preview(){return{lines:[],points:[],rects:[],circles:[]}}};function uOe(e,t){let n=t*Math.PI/180,o=Math.cos(n),i=Math.sin(n);return{x:e.x*o-e.y*i,y:e.x*i+e.y*o}}function kWo(e,t,n){let o=(n%360+360)%360;if(Math.round((o+90)%180)===0)return{width:t,height:e};return{width:e,height:t}}function LWo(e,t){let n=Math.min(e,t);return Math.min(0.35,Math.max(0.08,n*0.22))}function FWo(e,t=!1){let n=e.charAt(0).toUpperCase();if(t){if(n==="C")return"rgba(30, 64, 175, 0.35)";if(n==="R")return"rgba(5, 150, 105, 0.35)";if(n==="L")return"rgba(126, 34, 206, 0.35)";if(n==="U")return"rgba(180, 83, 9, 0.35)"}if(n==="C")return"rgba(59, 130, 246, 0.18)";if(n==="R")return"rgba(16, 185, 129, 0.18)";if(n==="L")return"rgba(168, 85, 247, 0.18)";if(n==="U")return"rgba(245, 158, 11, 0.18)";return"rgba(59, 130, 246, 0.12)"}function Vh(e,t){let n={points:[],rects:[],lines:[],circles:[],texts:[]},o={};for(let a of Object.keys(e.netConnMap)){let[c,l]=a.split("-");o[c]=l}for(let[a,c]of Object.entries(e.chipMap)){let l=c.pins.map((_)=>e.chipPinMap[_]),d=t.chipPlacements[a];if(!d)continue;let u,h;if(c.size&&Number.isFinite(c.size.x)&&Number.isFinite(c.size.y))u=c.size.x,h=c.size.y;else{let _=l.map((b)=>b.offset.x),f=l.map((b)=>b.offset.y),y=_.length?Math.min(..._):-5,x=_.length?Math.max(..._):5,C=f.length?Math.min(...f):-5,I=f.length?Math.max(...f):5;u=Math.max(10,x-y+6),h=Math.max(10,I-C+6)}let{x:A,y:m}=d,p=kWo(u,h,d.ccwRotationDegrees),g=c.fixedPosition?`${a} [fixed]`:a;n.rects.push({center:{x:A,y:m},width:p.width,height:p.height,label:g,fill:FWo(a,Boolean(c.fixedPosition)),stroke:"none"}),n.texts.push({x:A,y:m,text:g,fontSize:LWo(p.width,p.height)});for(let _ of l){let f=uOe(_.offset,d.ccwRotationDegrees),y=d.x+f.x,x=d.y+f.y,C=o[_.pinId],I=C?`${_.pinId} (${C})`:_.pinId;n.points.push({x:y,y:x,label:I})}}let i={};for(let[a,c]of Object.entries(o)){if(!i[c])i[c]=[];i[c].push(a)}for(let[,a]of Object.entries(i)){let c=a.map((l)=>{let d=e.chipPinMap[l];if(d){for(let[u,h]of Object.entries(e.chipMap))if(h.pins.includes(l)){let A=t.chipPlacements[u];if(A){let m=uOe(d.offset,A.ccwRotationDegrees);return{x:A.x+m.x,y:A.y+m.y}}}return d.offset}return null}).filter(Boolean);for(let l=0;l<c.length;l++)for(let d=l+1;d<c.length;d++)n.lines.push({points:[c[l],c[d]],strokeColor:"rgba(0,0,0,0.1)"})}let r=(a)=>{let c=e.chipPinMap[a];if(c){for(let[l,d]of Object.entries(e.chipMap))if(d.pins.includes(a)){let u=t.chipPlacements[l];if(u){let h=uOe(c.offset,u.ccwRotationDegrees);return{x:u.x+h.x,y:u.y+h.y}}}return c.offset}return null},s=new Set;for(let[a,c]of Object.entries(e.pinStrongConnMap)){if(!c)continue;let[l,d]=a.split("-"),u=l<d?`${l}-${d}`:`${d}-${l}`;if(s.has(u))continue;s.add(u);let h=r(l),A=r(d);if(!h||!A)continue;n.lines.push({points:[h,A]})}return n}var HWo=(e)=>JSON.stringify(e),hOe=new Map;function K6(e){let t=HWo(e);if(hOe.has(t))return structuredClone(hOe.get(t));let n=Object.entries(e.chipMap).map(([s,a])=>{let l=a.pins.map((u)=>e.chipPinMap[u]).map((u)=>{let h=u.pinId;for(let[A,m]of Object.entries(e.pinStrongConnMap))if(m&&A.includes(u.pinId)){let[p,g]=A.split("-");if(p===u.pinId||g===u.pinId){h=[p,g].sort().join("_");break}}return{padId:u.pinId,networkId:h,type:"rect",offset:u.offset,size:{x:0.001,y:0.001}}});l.push({padId:`${s}-body`,networkId:s,type:"rect",offset:{x:0,y:0},size:{x:a.size.x,y:a.size.y}});let d=a.availableRotations?.[0]??0;return{componentId:s,pads:l,availableRotationDegrees:a.availableRotations??[0,90,180,270],...a.fixedPosition&&{isStatic:!0,center:a.fixedPosition,ccwRotationOffset:d}}}),o=fVt({components:n,minGap:0.4,packOrderStrategy:"largest_to_smallest",packPlacementStrategy:"shortest_connection_along_outline"}),i={};for(let s of o.components)i[s.componentId]={x:s.center.x,y:s.center.y,ccwRotationDegrees:s.ccwRotationOffset};let r={chipPlacements:i,groupPlacements:{}};return hOe.set(t,r),structuredClone(r)}var wL=(e)=>{let t=new Map;for(let n of Object.values(e.chipMap))for(let o of n.pins)t.set(o,n);return t},YU=(e)=>{let t={},n=Object.keys(e.chipPinMap);for(let o=0;o<n.length;o++)for(let i=o+1;i<n.length;i++){let r=n[o],s=n[i];if(e.pinStrongConnMap[`${r}-${s}`]||e.pinStrongConnMap[`${s}-${r}`])t[r]??=[],t[s]??=[],t[r].push(e.chipPinMap[s]),t[s].push(e.chipPinMap[r])}return t},OWo=class extends zA{inputProblem;partitions=[];decouplingCapGroups;crystalCircuitGroups;constructor({inputProblem:e,decouplingCapGroups:t,crystalCircuitGroups:n}){super();this.inputProblem=e,this.decouplingCapGroups=t,this.crystalCircuitGroups=n}_step(){this.partitions=this.createPartitions(this.inputProblem),this.solved=!0}createPartitions(e){let t=Object.keys(e.chipMap),n=new Set,o=[];for(let h of this.crystalCircuitGroups??[]){let A=[h.crystalChipId,...h.loadCaps.map((m)=>m.chipId),...h.seriesResistors.map((m)=>m.chipId)].filter((m)=>e.chipMap[m]);if(A.length<3)continue;o.push({chipIds:A,group:h});for(let m of A)n.add(m)}let i=new Set,r=[],s=YU(e);if(this.decouplingCapGroups&&this.decouplingCapGroups.length>0)for(let h of this.decouplingCapGroups){let A=[];for(let m of h.decouplingCapChipIds)if(e.chipMap[m]&&!n.has(m))A.push(m);if(A.length===1){let m=e.chipMap[A[0]],p=e.chipMap[h.mainChipId];if(!p||p.pins.length<=2||[...m.pins,...p.pins].some((g)=>s[g]?.length))continue}if(A.length>=1){r.push(A);for(let m of A)i.add(m)}}let a=t.filter((h)=>!i.has(h)&&!n.has(h)),c=new Map,l=wL(e);for(let h of a)c.set(h,new Set);for(let[h,A]of Object.entries(e.pinStrongConnMap)){if(!A)continue;let[m,p]=h.split("-"),g=l.get(m)?.chipId,_=l.get(p)?.chipId;if(g&&_&&g!==_&&!i.has(g)&&!i.has(_)&&!n.has(g)&&!n.has(_))c.get(g).add(_),c.get(_).add(g)}let d=new Set,u=[];for(let h of a)if(!d.has(h)){let A=this.dfs(h,c,d);if(A.length>0)u.push(A)}return[...o.map(({chipIds:h,group:A})=>this.createInputProblemFromPartition(h,e,{partitionType:"crystal_circuit",crystalCircuitGroup:A})),...r.map((h)=>{let A=this.decouplingCapGroups?.find((m)=>m.decouplingCapChipIds.some((p)=>h.includes(p)));return this.createInputProblemFromPartition(h,e,{partitionType:"decoupling_caps",decouplingMainChipId:A?.mainChipId,decouplingMainChipSide:A?.mainChipSide})}),...u.map((h)=>this.createInputProblemFromPartition(h,e))]}dfs(e,t,n){let o=[],i=[e];while(i.length>0){let r=i.pop();if(n.has(r))continue;n.add(r),o.push(r);let s=t.get(r)||new Set;for(let a of s)if(!n.has(a))i.push(a)}return o}createInputProblemFromPartition(e,t,n){let o=e,i=new Set;for(let u of o){let h=t.chipMap[u];for(let A of h.pins)i.add(A)}let r={},s={},a={},c={},l={};for(let u of o)r[u]=t.chipMap[u];for(let u of i)if(t.chipPinMap[u])s[u]=t.chipPinMap[u];for(let[u,h]of Object.entries(t.pinStrongConnMap)){let[A,m]=u.split("-");if(i.has(A)&&i.has(m))c[u]=h}let d=new Set;for(let[u,h]of Object.entries(t.netConnMap)){if(!h)continue;let[A,m]=u.split("-");if(i.has(A))d.add(m),l[u]=h}for(let u of d)if(t.netMap[u])a[u]=t.netMap[u];return{...t,chipMap:r,chipPinMap:s,netMap:a,pinStrongConnMap:c,netConnMap:l,isPartition:!0,partitionType:n?.partitionType,decouplingMainChipId:n?.decouplingMainChipId,decouplingMainChipSide:n?.decouplingMainChipSide,crystalCircuitGroup:n?.crystalCircuitGroup}}visualize(){if(this.partitions.length===0){let n=K6(this.inputProblem);return Vh(this.inputProblem,n)}let e=this.partitions.map((n)=>{let o=K6(n);return Vh(n,o)}),t=this.partitions.map((n,o)=>`partition${o}`);return V7(e,{titles:t})}},zWo=(e,t=1)=>{let n=0;for(let o=0;o<e.length;o++){let i=e.charCodeAt(o);n=(n<<5)-n+i,n=n&n}return`hsl(${Math.abs(n)%360}, 70%, 50%, ${t})`},tUt=(e)=>(Math.round(e/90)*90%360+360)%360,Jr=(e,t)=>{switch(tUt(t)){case 90:return{x:-e.y,y:e.x};case 180:return{x:-e.x,y:-e.y};case 270:return{x:e.y,y:-e.x};default:return{x:e.x,y:e.y}}},Ku=(e,t)=>{let n=tUt(t);if(n===90||n===270)return{x:e.y,y:e.x};return{x:e.x,y:e.y}},nUt=({inputProblem:e,netIds:t})=>{let n=t.filter((r)=>e.netMap[r]?.isPositiveVoltageSource);if(n.length===1)return n[0];let o=t.filter((r)=>e.netMap[r]?.isGround),i=t.filter((r)=>{let s=e.netMap[r];if(!s)return!1;return!s.isGround});if(o.length!==1||i.length!==1)return null;return i[0]},GWo=2,YWo=(e,t)=>e[0]===t[0]&&e[1]===t[1],VWo=({groundedCapacitorsWithoutPowerMetadata:e})=>{let t=[];for(let n of e){let o=t.find((i)=>YWo(i.netPair,n.netPair));if(o){o.capacitorChipIds.push(n.capacitorChipId);continue}t.push({capacitorChipIds:[n.capacitorChipId],netPair:n.netPair})}return t.filter((n)=>n.capacitorChipIds.length>=GWo)},UWo=class extends zA{inputProblem;queuedChips;outputDecouplingCapGroups=[];groundedCapacitorsWithoutPowerMetadata=[];groupsByMainChipId=new Map;constructor(e){super();this.inputProblem=e,this.queuedChips=Object.values(e.chipMap)}isTwoPinRestrictedRotation(e){if(e.pins.length!==2)return!1;if(!e.availableRotations)return!1;let t=new Set([0,180]);return e.availableRotations.length>0&&(e.availableRotations.length===1||e.availableRotations.every((n)=>t.has(n)))}pinsOnOppositeYSidesAfterRotation(e){if(e.pins.length!==2)return!1;let[t,n]=e.pins,o=this.inputProblem.chipPinMap[t],i=this.inputProblem.chipPinMap[n];if(!o||!i)return!1;let r=e.availableRotations?.[0]??0,s=Jr(o.offset,r),a=Jr(i.offset,r),c=Math.abs(s.y-a.y);return c>0&&c>=Math.abs(s.x-a.x)}getStronglyConnectedNeighborChips(e){let t=new Set;for(let[n,o]of Object.entries(this.inputProblem.pinStrongConnMap)){if(!o)continue;let[i,r]=n.split("-");if(i===e){let s=r.split(".")[0];t.add(s)}else if(r===e){let s=i.split(".")[0];t.add(s)}}return t}findMainChipIdForCap(e,t){return this.findStronglyConnectedMainChipId(e)??this.findRailSharingMainChipId(e,t)??this.findUniqueMainChipSharingNetPair(t)}findUniqueMainChipSharingNetPair(e){let t=Object.values(this.inputProblem.chipMap).filter((n)=>!n.isCapacitor&&e.every((o)=>n.pins.some((i)=>this.getNetIdsForPin(i).has(o))));return t.length===1?t[0].chipId:null}findStronglyConnectedMainChipId(e){let t=new Map;for(let i of e.pins){let r=this.getStronglyConnectedNeighborChips(i);for(let s of r){if(s===e.chipId)continue;let a=t.get(s)||0;t.set(s,a+1)}}let n=null,o=0;for(let[i,r]of t){if(r<o)continue;if(n!==null&&r===o&&i>n)continue;n=i,o=r}return n}findRailSharingMainChipId(e,t){for(let n of Object.values(this.inputProblem.chipMap)){if(n.chipId===e.chipId)continue;if(!n.isCapacitor)continue;let o=this.getNormalizedNetPair(n);if(!o||o[0]!==t[0]||o[1]!==t[1])continue;let i=this.findStronglyConnectedMainChipId(n);if(i)return i}return null}getNetIdsForPin(e){let t=new Set;for(let[n,o]of Object.entries(this.inputProblem.netConnMap)){if(!o)continue;let[i,r]=n.split("-");if(i===e)t.add(r)}return t}getNormalizedNetPair(e){if(e.pins.length!==2)return null;let t=new Set;for(let i of e.pins){let r=this.getNetIdsForPin(i);for(let s of r)t.add(s)}if(t.size!==2)return null;let[n,o]=Array.from(t).sort();return[n,o]}addToGroup(e,t,n){let[o,i]=t,r=`${e}__${o}__${i}`,s=this.groupsByMainChipId.get(r);if(!s)s={decouplingCapGroupId:`decap_group_${e}__${o}__${i}`,mainChipId:e,mainChipSide:this.getMainChipSide(e,t),netPair:[o,i],decouplingCapChipIds:[]},this.groupsByMainChipId.set(r,s),this.outputDecouplingCapGroups.push(s);if(!s.decouplingCapChipIds.includes(n))s.decouplingCapChipIds.push(n)}getMainChipSide(e,t){let n=this.inputProblem.chipMap[e];if(!n)return null;let o=nUt({inputProblem:this.inputProblem,netIds:t});if(!o)return null;let i=new Map;for(let a of n.pins){let c=this.inputProblem.chipPinMap[a];if(!c)continue;if(!this.getNetIdsForPin(a).has(o))continue;i.set(c.side,(i.get(c.side)??0)+1)}let r=null,s=0;for(let[a,c]of i){if(c<=s)continue;r=a,s=c}return r}lastChip=null;addGroundedCapacitorGroupsWithoutPowerMetadata(){let e=VWo({groundedCapacitorsWithoutPowerMetadata:this.groundedCapacitorsWithoutPowerMetadata});for(let t of e){let n=this.findUniqueMainChipSharingNetPair(t.netPair);if(!n)continue;for(let o of t.capacitorChipIds)this.addToGroup(n,t.netPair,o)}}_step(){let e=this.queuedChips.shift();if(this.lastChip=e??null,!e){this.addGroundedCapacitorGroupsWithoutPowerMetadata(),this.solved=!0;return}if(!e.isCapacitor)return;if(!(this.isTwoPinRestrictedRotation(e)&&this.pinsOnOppositeYSidesAfterRotation(e)))return;let n=this.getNormalizedNetPair(e);if(!n)return;let[o,i]=n,r=this.inputProblem.netMap[o],s=this.inputProblem.netMap[i];if(!(r?.isGround&&s?.isPositiveVoltageSource||s?.isGround&&r?.isPositiveVoltageSource)){if(n.filter((d)=>this.inputProblem.netMap[d]?.isGround).length===1)this.groundedCapacitorsWithoutPowerMetadata.push({capacitorChipId:e.chipId,netPair:n});return}let c=this.findMainChipIdForCap(e,n);if(!c)return;this.addToGroup(c,n,e.chipId)}visualize(){let e=K6(this.inputProblem),t=Vh(this.inputProblem,e),n=new Map;for(let o of this.outputDecouplingCapGroups){n.set(o.mainChipId,o);for(let i of o.decouplingCapChipIds)n.set(i,o)}for(let o of t.rects||[])if(o.label!==this.lastChip?.chipId)o.fill="rgba(0,0,0,0.5)";for(let o of t.rects||[]){let i=o.label,r=n.get(i);if(!r)continue;o.label=`${o.label}
${r.decouplingCapGroupId}`,o.fill=zWo(r.decouplingCapGroupId,0.8)}return t}getConstructorParams(){return[this.inputProblem]}computeProgress(){let e=Object.keys(this.inputProblem.chipMap).length||1,t=e-this.queuedChips.length;return Math.min(1,Math.max(0,t/e))}},WWo=class extends zA{inputProblem;queuedCrystals;outputCrystalCircuitGroups=[];constructor(e){super();this.inputProblem=e,this.queuedCrystals=Object.values(e.chipMap).filter((t)=>t.isCrystal)}getNetIdsForPin(e){let t=new Set;for(let n of Object.keys(this.inputProblem.netMap))if(this.inputProblem.netConnMap[`${e}-${n}`])t.add(n);return t}pinsAreConnected(e,t){if(this.inputProblem.pinStrongConnMap[`${e}-${t}`]||this.inputProblem.pinStrongConnMap[`${t}-${e}`])return!0;let n=this.getNetIdsForPin(e);return Array.from(this.getNetIdsForPin(t)).some((o)=>n.has(o))}getGroundNetId(e){for(let t of this.getNetIdsForPin(e))if(this.inputProblem.netMap[t]?.isGround)return t;return null}findLoadCapsForCrystalPin(e){let t=[];for(let n of Object.values(this.inputProblem.chipMap)){if(!n.isCapacitor||n.pins.length!==2)continue;for(let o of n.pins){if(!this.pinsAreConnected(e,o))continue;let i=n.pins.find((s)=>s!==o);if(!i)continue;let r=this.getGroundNetId(i);if(!r)continue;t.push({chipId:n.chipId,signalPinId:o,groundPinId:i,groundNetId:r})}}return t}findSeriesResistors(e,t){let n=[];for(let o of Object.values(this.inputProblem.chipMap)){if(!o.isResistor||o.pins.length!==2||t.has(o.chipId))continue;let i=e.flatMap((a)=>o.pins.filter((c)=>this.pinsAreConnected(a,c)).map((c)=>({crystalPinId:a,connectedPinId:c})));if(i.length!==1)continue;let r=i[0],s=o.pins.find((a)=>a!==r.connectedPinId);if(!s||this.getGroundNetId(s))continue;n.push({chipId:o.chipId,crystalPinId:r.crystalPinId,connectedPinId:r.connectedPinId})}return n}identifyCrystal(e){let t=e.pins.filter((c)=>!this.getGroundNetId(c));if(t.length!==2)return null;let[n,o]=t,i=this.findLoadCapsForCrystalPin(n),r=this.findLoadCapsForCrystalPin(o);if(i.length!==1||r.length!==1)return null;if(i[0].chipId===r[0].chipId)return null;if(i[0].groundNetId!==r[0].groundNetId)return null;let s=[{chipId:i[0].chipId,signalPinId:i[0].signalPinId,groundPinId:i[0].groundPinId},{chipId:r[0].chipId,signalPinId:r[0].signalPinId,groundPinId:r[0].groundPinId}],a=new Set(s.map((c)=>c.chipId));return{crystalCircuitGroupId:`crystal_circuit_${e.chipId}`,crystalChipId:e.chipId,activeCrystalPinIds:[n,o],loadCaps:s,groundNetId:i[0].groundNetId,seriesResistors:this.findSeriesResistors([n,o],a)}}_step(){let e=this.queuedCrystals.shift();if(!e){this.solved=!0;return}let t=this.identifyCrystal(e);if(t)this.outputCrystalCircuitGroups.push(t)}visualize(){return Vh(this.inputProblem,K6(this.inputProblem))}getConstructorParams(){return[this.inputProblem]}computeProgress(){let e=Object.values(this.inputProblem.chipMap).filter((t)=>t.isCrystal).length;if(e===0)return 1;return(e-this.queuedCrystals.length)/e}},XWo=({firstChipId:e,secondChipId:t},n)=>{let o=n.chipMap[e],i=n.chipMap[t];if(o?.isCapacitor&&i?.isCapacitor)return n.decouplingCapsGap??n.chipGap;return n.partitionGap},KWo=class extends zA{inputProblem;inputLayout;outputLayout=null;constructor(e){super();this.inputProblem=e.inputProblem,this.inputLayout=e.inputLayout}_step(){this.outputLayout=this.createAlignedLayout()??this.inputLayout,this.solved=!0}isPowerGroundNet(e){let t=this.inputProblem.netMap[e];return t?.isPositiveVoltageSource===!0||t?.isGround===!0}getPinNetIds(e){let t=[];for(let[n,o]of Object.entries(this.inputProblem.netConnMap)){if(!o)continue;if(!n.startsWith(`${e}-`))continue;t.push(n.slice(e.length+1))}return t}pinHasStrongConnection(e){for(let[t,n]of Object.entries(this.inputProblem.pinStrongConnMap)){if(!n)continue;if(t.startsWith(`${e}-`)||t.endsWith(`-${e}`))return!0}return!1}getAlignmentGroupId(e){if(e.fixedPosition||e.pins.length!==2)return null;let t=new Set,n=0;for(let o of e.pins){let i=this.getPinNetIds(o);if(i.length===0){if(this.pinHasStrongConnection(o))return null;continue}let r=!1;for(let s of i)if(this.isPowerGroundNet(s))r=!0;else t.add(s);if(r)n++}if(n===0)return null;if(t.size===0)return"power-ground";if(t.size===1)return`signal:${[...t][0]}`;return null}getAlignmentGroups(){let e=Object.keys(this.inputProblem.chipMap);if(e.length<2)return null;let t=new Map;for(let n of e){let o=this.inputProblem.chipMap[n];if(!o)continue;if(!this.inputLayout.chipPlacements[n])continue;let i=this.getAlignmentGroupId(o);if(!i)continue;let r=t.get(i)??[];r.push(n),t.set(i,r)}return[...t.values()].filter((n)=>n.length>1).map((n)=>({chipIds:n}))}alignGroup(e,t){if(t.length<2)return;let n=0,o=t.reduce((s,a)=>s+this.inputLayout.chipPlacements[a].y,0)/t.length,i=t.reduce((s,a)=>s+this.inputLayout.chipPlacements[a].x,0)/t.length;for(let[s,a]of t.entries()){let c=t[s-1];if(c)n+=XWo({firstChipId:c,secondChipId:a},this.inputProblem);let l=this.inputProblem.chipMap[a],d=this.inputLayout.chipPlacements[a],u=d.ccwRotationDegrees===90||d.ccwRotationDegrees===270,h=l.size.x;if(u)h=l.size.y;let A=n+h/2;e[a]={x:A,y:o,ccwRotationDegrees:d.ccwRotationDegrees},n+=h}let r=n;for(let s of t)e[s].x+=i-r/2}hasChipOverlap(e){let t=Object.keys(this.inputProblem.chipMap);for(let n=0;n<t.length;n++){let o=t[n],i=this.inputProblem.chipMap[o],r=e[o];if(!r)continue;let s=r.ccwRotationDegrees===90||r.ccwRotationDegrees===270,a=i.size.x,c=i.size.y;if(s)a=i.size.y,c=i.size.x;for(let l=n+1;l<t.length;l++){let d=t[l],u=this.inputProblem.chipMap[d],h=e[d];if(!h)continue;let A=h.ccwRotationDegrees===90||h.ccwRotationDegrees===270,m=u.size.x,p=u.size.y;if(A)m=u.size.y,p=u.size.x;let g=Math.abs(r.x-h.x)<(a+m)/2,_=Math.abs(r.y-h.y)<(c+p)/2;if(g&&_)return!0}}return!1}createAlignedLayout(){let e=this.getAlignmentGroups();if(!e)return null;let t={...this.inputLayout.chipPlacements};for(let n of e)this.alignGroup(t,n.chipIds);if(this.hasChipOverlap(t))return null;return{chipPlacements:t,groupPlacements:{...this.inputLayout.groupPlacements}}}visualize(){return Vh(this.inputProblem,this.outputLayout??this.inputLayout)}getConstructorParams(){return[{inputProblem:this.inputProblem,inputLayout:this.inputLayout}]}},j6=({placement:e,size:t,margin:n=0})=>{let o=Ku(t,e.ccwRotationDegrees);return xd({center:e,width:o.x+n*2,height:o.y+n*2})},oUt=({inputProblem:e,chipIdA:t,placementA:n,chipIdB:o,placementB:i})=>{let r=j6({placement:n,size:e.chipMap[t].size,margin:e.chipGap}),s=j6({placement:i,size:e.chipMap[o].size});return Cwe(r,s)>0},jWo=0.2,qWo=({looseTestPointChipIds:e},t)=>{let n=e.reduce((s,a)=>s+t.chipPlacements[a].y,0)/e.length,o=[...e].sort((s,a)=>t.chipPlacements[s].x-t.chipPlacements[a].x),i={},r;for(let s of o){let a={...t.chipPlacements[s],y:n};if(r){let c=i[r],l=Ku(t.inputProblem.chipMap[r].size,c.ccwRotationDegrees),d=Ku(t.inputProblem.chipMap[s].size,a.ccwRotationDegrees),u=c.x+l.x/2+t.inputProblem.chipGap+d.x/2;if(a.x<u)a.x=u}i[s]=a,r=s}return i},JWo=({looseTestPointChipIds:e,testPointRow:t},n)=>{let o=new Set(e);return e.some((i)=>Object.entries(n.chipPlacements).some(([r,s])=>!o.has(r)&&oUt({inputProblem:n.inputProblem,chipIdA:i,placementA:t[i],chipIdB:r,placementB:s})))},$Wo=({looseTestPointChipIds:e,testPointRow:t},n)=>{let o=Math.max(n.inputProblem.chipGap,jWo),i=0;while(!0){let r=[0];if(i>0)r.length=0,r.push(-i*o,i*o);for(let s of r){let a=structuredClone(t);for(let c of e)a[c].y+=s;if(!JWo({looseTestPointChipIds:e,testPointRow:a},n))return a}i++}},ZWo=({anchoredTestPointChipIds:e},t)=>{let n=Object.values(t.inputProblem.chipMap).filter((r)=>r.isTestPoint&&!r.fixedPosition&&r.pins.length===1&&t.chipPlacements[r.chipId]&&!e.has(r.chipId)).map((r)=>r.chipId);if(n.length<2)return;let o=qWo({looseTestPointChipIds:n},t),i=$Wo({looseTestPointChipIds:n,testPointRow:o},t);for(let[r,s]of Object.entries(i))t.chipPlacements[r]=s},eXo=1.5,iUt=0.2,SVt=0.000001,tXo=2,nXo=0.5,oXo={"x-":{x:-1,y:0},"x+":{x:1,y:0},"y-":{x:0,y:-1},"y+":{x:0,y:1}},c1e={"x-":{normalAxis:"x",tangentAxis:"y",direction:-1},"x+":{normalAxis:"x",tangentAxis:"y",direction:1},"y-":{normalAxis:"y",tangentAxis:"x",direction:-1},"y+":{normalAxis:"y",tangentAxis:"x",direction:1}},iXo={"x-":"x+","x+":"x-","y-":"y+","y+":"y-"},rXo=(e)=>{if(Math.abs(e.x)>Math.abs(e.y)){if(e.x<0)return"x-";return"x+"}if(e.y<0)return"y-";return"y+"},yOe=(e,t)=>rXo(Jr(oXo[e],t)),t1e=({anchorChipId:e,anchorPinId:t,side:n},o)=>{let i=o.inputLayout.chipPlacements[e],r=o.inputProblem.chipPinMap[t],s=Jr(r.offset,i.ccwRotationDegrees),a=c1e[n].tangentAxis;return i[a]+s[a]},sXo=({group:e},t)=>{if(e.members.length<2)return[e];let n=t.inputProblem.chipMap[e.anchorChipId],o=t.inputLayout.chipPlacements[e.anchorChipId],i=n.pins.filter((d)=>{let u=t.inputProblem.chipPinMap[d];return u&&yOe(u.side,o.ccwRotationDegrees)===e.side}).map((d)=>t1e({anchorChipId:e.anchorChipId,anchorPinId:d,side:e.side},t)).sort((d,u)=>d-u),r=i.slice(1).map((d,u)=>d-i[u]).filter((d)=>d>SVt);if(r.length===0)return[e];let s=Math.min(...r)*eXo,a=[],c=[],l;for(let d of e.members){let u=t1e({anchorChipId:d.anchorChipId,anchorPinId:d.anchorPinId,side:d.side},t);if(l!==void 0&&u-l>s+SVt)a.push({...e,members:c}),c=[];c.push(d),l=u}if(c.length>0)a.push({...e,members:c});return a},aXo=(e)=>{let t=wL(e.inputProblem),n=YU(e.inputProblem),o=[];for(let i of Object.values(e.inputProblem.chipMap)){if(!i.isTestPoint||i.fixedPosition||i.pins.length!==1)continue;let r=i.pins[0],s=n[r]?.[0];if(!s)continue;let a=s.pinId,c=t.get(a)?.chipId;if(!c||c===i.chipId)continue;if(e.inputProblem.chipMap[c]?.isTestPoint)continue;let l=e.inputLayout.chipPlacements[c];if(!l)continue;let d=yOe(s.side,l.ccwRotationDegrees),u=o.find((h)=>h.anchorChipId===c&&h.side===d);if(!u)u={anchorChipId:c,side:d,members:[]},o.push(u);u.members.push({testPointChipId:i.chipId,testPointPinId:r,anchorChipId:c,anchorPinId:a,side:d})}for(let i of o)i.members.sort((r,s)=>t1e({anchorChipId:r.anchorChipId,anchorPinId:r.anchorPinId,side:r.side},e)-t1e({anchorChipId:s.anchorChipId,anchorPinId:s.anchorPinId,side:s.side},e));return o.flatMap((i)=>sXo({group:i},e))},cXo=({member:e},t)=>{let n=t.inputProblem.chipMap[e.testPointChipId],o=t.inputProblem.chipPinMap[e.testPointPinId],i=n.availableRotations??[0,90,180,270],r=iXo[e.side];return i.find((s)=>yOe(o.side,s)===r)??i[0]},lXo=({group:e},t)=>{let{inputProblem:n,chipPlacements:o}=t,i=o[e.anchorChipId],r=n.chipMap[e.anchorChipId],s=j6({placement:i,size:r.size}),{normalAxis:a,tangentAxis:c,direction:l}=c1e[e.side],d=e.members.map((h)=>{let A=n.chipPinMap[h.anchorPinId],m=Jr(A.offset,i.ccwRotationDegrees),p={x:i.x+m.x,y:i.y+m.y},g=cXo({member:h},t),_=Ku(n.chipMap[h.testPointChipId].size,g);return{member:h,anchorPinPosition:p,ccwRotationDegrees:g,size:_}}).sort((h,A)=>h.anchorPinPosition[c]-A.anchorPinPosition[c]),u=-1/0;for(let h of d){let A=h.size[c],m=h.anchorPinPosition[c],p=Math.max(m,u+n.chipGap+A/2);u=p+A/2;let g=h.anchorPinPosition[a],_=s.minX;if(a==="y")_=s.minY;if(a==="x"&&l>0)_=s.maxX;if(a==="y"&&l>0)_=s.maxY;let f=Math.min(_,g);if(l>0)f=Math.max(_,g);let y=f+l*(n.chipGap+h.size[a]/2),x=y,C=p;if(a==="y")x=p,C=y;o[h.member.testPointChipId]={x,y:C,ccwRotationDegrees:h.ccwRotationDegrees}}},rUt=({group:e},t)=>{let n=new Set(e.members.map((o)=>o.testPointChipId));return e.members.some((o)=>{let i=t.chipPlacements[o.testPointChipId];return Object.entries(t.chipPlacements).some(([r,s])=>r!==e.anchorChipId&&!n.has(r)&&oUt({inputProblem:t.inputProblem,chipIdA:o.testPointChipId,placementA:i,chipIdB:r,placementB:s}))})},dXo=({group:e},t)=>{let{normalAxis:n,direction:o}=c1e[e.side],i=Math.max(t.inputProblem.chipGap,iUt);while(rUt({group:e},t))for(let r of e.members)t.chipPlacements[r.testPointChipId][n]+=o*i},PVt=({inputProblem:e,pinId:t,placement:n})=>{let o=e.chipPinMap[t],i=Jr(o.offset,n.ccwRotationDegrees);return{x:n.x+i.x,y:n.y+i.y}},sUt=({group:e},t)=>{let n=new Set(e.members.map((i)=>i.testPointChipId)),o=0;for(let i of e.members){let r=PVt({inputProblem:t.inputProblem,pinId:i.testPointPinId,placement:t.chipPlacements[i.testPointChipId]}),s=PVt({inputProblem:t.inputProblem,pinId:i.anchorPinId,placement:t.chipPlacements[i.anchorChipId]});for(let[a,c]of Object.entries(t.chipPlacements)){if(a===i.anchorChipId||n.has(a))continue;let l=j6({placement:c,size:t.inputProblem.chipMap[a].size});if(p$(r,s,l))o++}}return o},uXo=({group:e,tangentAxis:t,searchStep:n},o)=>{let i=new Set(e.members.map((c)=>c.testPointChipId)),r=e.members.reduce((c,l)=>c+o.chipPlacements[l.testPointChipId][t],0)/e.members.length,s=Math.max(...e.members.map((c)=>{let l=o.chipPlacements[c.testPointChipId];return Ku(o.inputProblem.chipMap[c.testPointChipId].size,l.ccwRotationDegrees)[t]})),a=Object.entries(o.chipPlacements).reduce((c,[l,d])=>{if(i.has(l))return c;let u=Ku(o.inputProblem.chipMap[l].size,d.ccwRotationDegrees)[t];return Math.max(c,Math.abs(d[t]-r)+u+s)},0)+o.inputProblem.partitionGap;return Math.ceil(a/n)+tXo},hXo=({group:e},t)=>{let{tangentAxis:n}=c1e[e.side],o=new Map(e.members.map((c)=>[c.testPointChipId,{...t.chipPlacements[c.testPointChipId]}])),i=Math.max(t.inputProblem.partitionGap*nXo,t.inputProblem.chipGap,iUt),r=uXo({group:e,tangentAxis:n,searchStep:i},t),s=0,a=Number.POSITIVE_INFINITY;for(let c=0;c<=r;c++){let l=[0];if(c>0)l.length=0,l.push(-c*i,c*i);for(let d of l){for(let h of e.members){let A=o.get(h.testPointChipId);t.chipPlacements[h.testPointChipId]={...A,[n]:A[n]+d}}if(rUt({group:e},t))continue;let u=sUt({group:e},t);if(u<a)a=u,s=d;if(u===0)break}if(a===0)break}for(let c of e.members){let l=o.get(c.testPointChipId);t.chipPlacements[c.testPointChipId]={...l,[n]:l[n]+s}}},mXo=class extends zA{inputProblem;inputLayout;outputLayout=null;testPointSideGroups=[];connectionBodyCrossingCount=0;constructor(e){super();this.inputProblem=e.inputProblem,this.inputLayout=e.inputLayout}_step(){let e=structuredClone(this.inputLayout.chipPlacements),t={inputProblem:this.inputProblem,chipPlacements:e};this.testPointSideGroups=aXo({inputProblem:this.inputProblem,inputLayout:this.inputLayout});for(let o of this.testPointSideGroups)lXo({group:o},t);for(let o of this.testPointSideGroups)dXo({group:o},t),hXo({group:o},t);this.connectionBodyCrossingCount=this.testPointSideGroups.reduce((o,i)=>o+sUt({group:i},t),0);let n=new Set(this.testPointSideGroups.flatMap((o)=>o.members.map((i)=>i.testPointChipId)));ZWo({anchoredTestPointChipIds:n},t),this.outputLayout={chipPlacements:e,groupPlacements:{...this.inputLayout.groupPlacements}},this.solved=!0}visualize(){return Vh(this.inputProblem,this.outputLayout??this.inputLayout)}};function pXo(e){let{inputProblem:t,pinIdToStronglyConnectedPins:n}=e,o=new Map,i=new Set,r=!1,s=new Map;for(let[a,c]of Object.entries(t.pinStrongConnMap)){if(!c)continue;r=!0;let l=a.split("-");if(l.length===2&&l[0]&&l[1]){let d=t.chipPinMap[l[0]],u=t.chipPinMap[l[1]];if(d&&u){let h=l[0].split(".")[0],A=l[1].split(".")[0];if(h&&A&&h!==A){let m=`${h}-${A}`,p=`${A}-${h}`;if(!s.has(m))s.set(m,new Set);if(!s.has(p))s.set(p,new Set);s.get(m).add(d.side),s.get(p).add(u.side)}}}}if(r)for(let[a,c]of Object.entries(t.netConnMap)){if(!c)continue;let[l,d]=a.split("-");if(l&&d)i.add(l)}else for(let[a,c]of Object.entries(t.netConnMap)){if(!c)continue;let[l,d]=a.split("-");if(l&&d){if(!t.chipPinMap[l])continue;let h=l.split(".")[0],A=!0;for(let[m,p]of s.entries()){let[g,_]=m.split("-");if(g===h)for(let[f,y]of Object.entries(t.netConnMap)){if(!y)continue;let[x,C]=f.split("-");if(C===d&&x&&x!==l){let I=t.chipPinMap[x];if(!I)continue;if(x.split(".")[0]===_){if(!p.has(I.side)){A=!1;break}}}}}if(A)o.set(l,d);else{let m=`${l}_opposite-strong-side-disconnected`;o.set(l,m),i.add(l)}}}for(let[a,c]of Object.entries(t.pinStrongConnMap)){if(!c)continue;let l=a.split("-");if(l.length===2&&l[0]&&l[1]){let d=o.get(l[0])||o.get(l[1]);if(d)o.set(l[0],d),o.set(l[1],d);else o.set(l[0],a),o.set(l[1],a)}}return{pinToNetworkMap:o,filteredPins:i}}var AXo=(e)=>{let t=e.flatMap((a)=>[a.offset.x-a.size.x/2,a.offset.x+a.size.x/2]),n=e.flatMap((a)=>[a.offset.y-a.size.y/2,a.offset.y+a.size.y/2]),o=t.length?Math.min(...t):0,i=t.length?Math.max(...t):0,r=n.length?Math.min(...n):0,s=n.length?Math.max(...n):0;return{minX:o,maxX:i,minY:r,maxY:s}},n1e=0.2,gne=0.000001,mOe=2,zU=(e,t)=>{let n=Jr(e.offset,t.ccwRotationDegrees);return{x:t.x+n.x,y:t.y+n.y}},_Xo=(e,t)=>{for(let[n,o]of Object.entries(e.netMap)){if(!o.isGround)continue;if(e.netConnMap[`${t}-${n}`])return!0}return!1},gXo=({chip:e,inputProblem:t,placement:n})=>{let[o,i]=e.pins,r=o&&t.chipPinMap[o],s=i&&t.chipPinMap[i];if(!r||!s)return!1;let a=Jr(r.offset,n.ccwRotationDegrees),c=Jr(s.offset,n.ccwRotationDegrees);return Math.abs(a.y-c.y)>Math.abs(a.x-c.x)},fXo=({chipId:e,chipPlacements:t,ignoredChipIds:n,inputProblem:o,minimumGap:i})=>{let r=o.chipMap[e],s=t[e];if(!r||!s)return!1;let a=Ku(r.size,s.ccwRotationDegrees),c=xd({center:s,width:a.x,height:a.y});for(let[l,d]of Object.entries(t)){if(n.has(l))continue;let u=o.chipMap[l];if(!u)continue;let h=Ku(u.size,d.ccwRotationDegrees),A=xd({center:d,width:h.x,height:h.y});if(z7(c,A)<i-gne)return!1}return!0},BL=({chipIds:e,clearanceGroupChipIds:t,dx:n,dy:o,chipPlacements:i,inputProblem:r,minimumOutsideGap:s})=>{let a=e.map((d)=>i[d]).filter((d)=>Boolean(d));if(a.length!==e.length)return!1;for(let d of a)d.x+=n,d.y+=o;let c=new Set(t??e);if(e.every((d)=>fXo({chipId:d,chipPlacements:i,ignoredChipIds:c,inputProblem:r,minimumGap:s??r.chipGap})))return!0;for(let d of a)d.x-=n,d.y-=o;return!1},aUt=({inputProblem:e,connectedPinsByPinId:t,chipPlacements:n,rigidChipGroups:o=[]})=>{let i=wL(e),r=Object.keys(e.chipMap).length;for(let s of Object.values(e.chipMap)){if(s.pins.length<=mOe)continue;for(let a of s.pins)for(let c of t[a]??[]){let l=i.get(c.pinId);if(!l)continue;if(l.fixedPosition)continue;if(l.pins.length!==mOe)continue;let d=e.chipPinMap[a],u=n[s.chipId],h=n[l.chipId];if(!d||!u||!h)continue;let A=zU(d,u),m=zU(c,h),p=Math.abs(A.x-m.x)<=gne,g=Math.abs(A.y-m.y)<=gne,_=gXo({chip:l,inputProblem:e,placement:h}),f=o.find((b)=>b.includes(l.chipId)),y=f??[l.chipId];if(p&&_){if(f)continue;BL({chipIds:[l.chipId],dx:-n1e,dy:0,chipPlacements:n,inputProblem:e});continue}let x=r===mOe&&_&&(l.isCapacitor||l.isResistor),C=l.pins.find((b)=>b!==c.pinId),I=C&&_Xo(e,C);if(g&&(x||I))BL({chipIds:y,dx:0,dy:-n1e,chipPlacements:n,inputProblem:e})}}},yXo=({groundedLoadPairs:e,inputProblem:t,chipPlacements:n})=>{for(let o of e){if(!o.mainPinId)continue;if(!o.upperChip.isResistor)continue;let i=t.chipPinMap[o.upperInnerPinId],r=t.chipPinMap[o.lowerInnerPinId],s=n[o.upperChip.chipId],a=n[o.lowerChip.chipId];if(!i||!r||!s||!a)continue;let c=zU(i,s),l=zU(r,a);if(Math.abs(c.x-l.x)>gne)continue;BL({chipIds:[o.upperChip.chipId],dx:-n1e,dy:0,chipPlacements:n,inputProblem:t})}},xXo=({railLoadPairs:e,inputProblem:t,chipPlacements:n})=>{for(let o of e){let i=t.chipPinMap[o.mainPinId],r=t.chipPinMap[o.resistorMainPinId],s=n[o.mainChipId],a=n[o.resistor.chipId];if(!i||!r||!s||!a)continue;let c=zU(i,s),l=zU(r,a);if(Math.abs(c.y-l.y)>gne)continue;BL({chipIds:[o.railComponent.chipId,o.resistor.chipId],dx:0,dy:n1e,chipPlacements:n,inputProblem:t})}},vVt=0.1,xOe=class extends zA{partitionInputProblem;layout=null;pinIdToStronglyConnectedPins;constructor(e){super();this.partitionInputProblem=e.partitionInputProblem,this.pinIdToStronglyConnectedPins=e.pinIdToStronglyConnectedPins}_step(){if(!this.activeSubSolver){let e=pXo({inputProblem:this.partitionInputProblem,pinIdToStronglyConnectedPins:this.pinIdToStronglyConnectedPins}).pinToNetworkMap,t=this.createPackInput(e);this.activeSubSolver=new X6(t),this.activeSubSolver.MAX_ITERATIONS=this.MAX_ITERATIONS}if(this.activeSubSolver.step(),this.activeSubSolver.failed){this.failed=!0,this.error=`PackSolver2 failed: ${this.activeSubSolver.error}`;return}if(this.activeSubSolver.solved)this.layout=this.createLayoutFromPackingResult(this.activeSubSolver.packedComponents),this.solved=!0,this.activeSubSolver=null}createPackInput(e){let t=Object.entries(this.partitionInputProblem.chipMap).map(([o,i])=>{let r=[];for(let l of i.pins){let d=this.partitionInputProblem.chipPinMap[l];if(!d)continue;let u=e.get(l)||`${l}_isolated`;r.push({padId:l,networkId:u,type:"rect",offset:{x:d.offset.x,y:d.offset.y},size:{x:vVt,y:vVt}})}let s=AXo(r),a={x:s.maxX-s.minX,y:s.maxY-s.minY};r.push({padId:`${o}_body`,networkId:`${o}_body_disconnected`,type:"rect",offset:{x:0,y:0},size:{x:Math.max(a.x,i.size.x),y:Math.max(a.y,i.size.y)}});let c=i.availableRotations?.[0]??0;return{componentId:o,pads:r,availableRotationDegrees:i.availableRotations??[0,90,180,270],...i.fixedPosition&&{isStatic:!0,center:i.fixedPosition,ccwRotationOffset:c}}}),n=this.partitionInputProblem.chipGap;if(this.partitionInputProblem.partitionType==="decoupling_caps")n=this.partitionInputProblem.decouplingCapsGap??n;return{components:t,minGap:n,packOrderStrategy:"largest_to_smallest",packPlacementStrategy:"minimum_closest_sum_squared_distance"}}createLayoutFromPackingResult(e){let t={};for(let n of e){let o=n.componentId;t[o]={x:n.center.x,y:n.center.y,ccwRotationDegrees:n.ccwRotationDegrees??n.ccwRotationOffset??0}}return aUt({inputProblem:this.partitionInputProblem,connectedPinsByPinId:this.pinIdToStronglyConnectedPins,chipPlacements:t}),{chipPlacements:t,groupPlacements:{}}}visualize(){if(this.activeSubSolver&&!this.solved)return this.activeSubSolver.visualize();if(!this.layout){let e=K6(this.partitionInputProblem);return Vh(this.partitionInputProblem,e)}return Vh(this.partitionInputProblem,this.layout)}getConstructorParams(){return[this.partitionInputProblem]}},CXo=2,IXo=4,bXo=3,EVt=2,SXo=(e)=>{let t={};for(let[n,o]of Object.entries(e.chipMap))for(let i of o.pins)t[i]=n;return t},PXo=(e)=>{let t=[],n=new Set;for(let[o,i]of Object.entries(e.pinStrongConnMap)){if(!i)continue;let[r,s]=o.split("-"),a=`${r}|${s}`;if(s<r)a=`${s}|${r}`;if(n.has(a))continue;n.add(a),t.push([r,s])}return t},MVt=(e,t)=>{for(let[n,o]of Object.entries(e.netConnMap)){if(!o)continue;if(!n.startsWith(`${t}-`))continue;return n.slice(t.length+1)}return null},BVt=(e,t)=>{let n=Jr(e,t);if(Math.abs(n.x)>=Math.abs(n.y)){if(n.x>=0)return"x+";return"x-"}if(n.y>=0)return"y+";return"y-"},vXo=(e,t)=>{if(t==="x-"||t==="x+")return e.y;return e.x},cUt=(e)=>{let t=SXo(e),n=PXo(e),o=new Set(n.flat()),i=new Map;for(let[d,u]of n){let h=t[d],A=t[u];if(!h||!A||h===A)continue;if(!i.has(h))i.set(h,[]);if(!i.has(A))i.set(A,[]);i.get(h).push({selfPin:d,otherPin:u,otherChip:A}),i.get(A).push({selfPin:u,otherPin:d,otherChip:h})}let r=[];for(let d of i.values()){let u=new Map;for(let h of d){let A=u.get(h.selfPin)??[];A.push(h),u.set(h.selfPin,A)}for(let[h,A]of u){if(A.length<EVt)continue;let m=[h,...A.map((g)=>g.otherPin)],p=new Map;for(let g of m){let _=t[g],f=e.chipMap[_];if(!_||f?.fixedPosition||f?.pins.length!==2)continue;let y=f.pins.find((C)=>C!==g);if(!y||o.has(y))continue;let x=MVt(e,y);if(!x)continue;p.set(x,[...p.get(x)??[],_])}for(let g of p.values()){if(g.length<EVt)continue;let _=m.filter((I)=>!g.includes(t[I]));if(_.length!==1)continue;let f=_[0],y=t[f];if(!y)continue;let x=e.chipMap[y],C=e.chipPinMap[f];if(!x||!C)continue;r.push({mainChipId:y,side:BVt(C.offset,x.availableRotations?.[0]??0),passiveChipIds:g,mainChipPinIds:g.map(()=>f)})}}}let s=new Set(r.flatMap((d)=>d.passiveChipIds)),a=[];for(let[d,u]of Object.entries(e.chipMap)){if(s.has(d))continue;if(u.pins.length!==CXo)continue;let h=i.get(d)??[];if(h.length!==1)continue;let{selfPin:A,otherPin:m,otherChip:p}=h[0],g=e.chipMap[p];if(!g||g.pins.length<IXo)continue;let _=u.pins.find((I)=>I!==A);if(!_)continue;let f=MVt(e,_);if(!f)continue;let y=g.availableRotations?.[0]??0,x=Jr(e.chipPinMap[m].offset,y),C=BVt(e.chipPinMap[m].offset,y);a.push({passiveChipId:d,mainChipId:p,mainChipPinId:m,side:C,sharedNetId:f,edgeCoord:vXo(x,C)})}let c=new Map;for(let d of a){let u=`${d.mainChipId}|${d.side}|${d.sharedNetId}`,h=c.get(u)??[];h.push(d),c.set(u,h)}let l=[...r];for(let d of c.values()){if(d.length<bXo)continue;d.sort((u,h)=>u.edgeCoord-h.edgeCoord),l.push({mainChipId:d[0].mainChipId,side:d[0].side,passiveChipIds:d.map((u)=>u.passiveChipId),mainChipPinIds:d.map((u)=>u.mainChipPinId)})}return l},OU=0.000001,EXo=16,MXo={"x-":{x:-1,y:0},"x+":{x:1,y:0},"y-":{x:0,y:-1},"y+":{x:0,y:1}},wVt=(e,t,n)=>{if(n==="x")return Math.max(0,e.minX-t.maxX,t.minX-e.maxX);return Math.max(0,e.minY-t.maxY,t.minY-e.maxY)},BXo=class extends zA{partitionInputProblem;layout=null;pinIdToStronglyConnectedPins;packingSolver=null;constructor(e){super();this.partitionInputProblem=e.partitionInputProblem,this.pinIdToStronglyConnectedPins=e.pinIdToStronglyConnectedPins}_step(){if(!this.packingSolver)this.packingSolver=new xOe({partitionInputProblem:this.partitionInputProblem,pinIdToStronglyConnectedPins:this.pinIdToStronglyConnectedPins}),this.activeSubSolver=this.packingSolver;if(this.packingSolver.step(),this.packingSolver.failed){this.failed=!0,this.error=this.packingSolver.error;return}if(this.packingSolver.solved&&this.packingSolver.layout)this.layout=this.alignPassiveGroups(this.packingSolver.layout),this.activeSubSolver=null,this.solved=!0}alignPassiveGroups(e){let t={};for(let[o,i]of Object.entries(e.chipPlacements))t[o]={...i};let n=cUt(this.partitionInputProblem);for(let o of n)this.reflowPassiveGroup(t,o);return aUt({inputProblem:this.partitionInputProblem,connectedPinsByPinId:this.pinIdToStronglyConnectedPins,chipPlacements:t,rigidChipGroups:n.map((o)=>o.passiveChipIds)}),{chipPlacements:t,groupPlacements:e.groupPlacements}}reflowPassiveGroup(e,t){let n=this.partitionInputProblem,o=n.chipGap,i=e[t.mainChipId];if(!i)return;let r=MXo[t.side],s=r.x!==0,a=this.boxFor(t.mainChipId,i),c=ax(a),l=t.mainChipPinIds.map((y)=>{let x=Jr(n.chipPinMap[y].offset,i.ccwRotationDegrees);return{x:i.x+x.x,y:i.y+x.y}}),d=c;if(l.length>0){let y=l.reduce((C,I)=>C+I.x,0),x=l.reduce((C,I)=>C+I.y,0);d={x:y/l.length,y:x/l.length}}let u=t.passiveChipIds.map((y)=>Ku(n.chipMap[y].size,e[y].ccwRotationDegrees)),h=[],A=0;for(let y=0;y<u.length;y++)h[y]=A+u[y].x/2,A+=u[y].x+o;let m=Math.max(0,A-o);for(let y=0;y<h.length;y++)h[y]-=m/2;let p=Math.max(...u.map((y)=>y.y)),g=new Set(t.passiveChipIds),_=[];if(s){let y=(a.maxX-a.minX)/2+o+m/2,x=c.x+r.x*y,C=d.y;if(l.length>0)C=Math.min(...l.map((I)=>I.y));_.push({x,y:C-p/2}),_.push({x,y:d.y})}else{let y=(a.maxY-a.minY)/2+o+p/2;_.push({x:d.x,y:c.y+r.y*y})}let f=a.maxX-a.minX+m;for(let y of _){let x=0;for(let C=0;C<EXo;C++){let I={};for(let E=0;E<t.passiveChipIds.length;E++){let B=t.passiveChipIds[E];I[B]={x:y.x+x+h[E],y:y.y,ccwRotationDegrees:e[B].ccwRotationDegrees}}let b=this.clearanceAdjustment(I,e,g,o);if(b===0){for(let E of t.passiveChipIds)e[E]=I[E];return}if(b===null)break;let P=x+b;if(Math.abs(P)>f)break;x=P}}}clearanceAdjustment(e,t,n,o){let i=0,r=0;for(let[s,a]of Object.entries(e)){let c=this.boxFor(s,a);for(let[l,d]of Object.entries(t)){if(n.has(l))continue;let u=this.boxFor(l,d);if(z7(c,u)>=o-OU)continue;let h=wVt(c,u,"y"),A=wVt(c,u,"x"),p=Math.sqrt(Math.max(0,o*o-h*h))-A;if(p<=OU)continue;if(ax(c).x>=ax(u).x)i=Math.max(i,p);else r=Math.max(r,p)}}if(i>OU&&r>OU)return null;if(i>OU)return i;if(r>OU)return-r;return 0}boxFor(e,t){let n=this.partitionInputProblem.chipMap[e],o=Ku(n.size,t.ccwRotationDegrees),i=[{x:t.x-o.x/2,y:t.y-o.y/2},{x:t.x+o.x/2,y:t.y+o.y/2}];for(let r of n.pins){let s=this.partitionInputProblem.chipPinMap[r];if(!s)continue;let a=Jr(s.offset,t.ccwRotationDegrees);i.push({x:t.x+a.x,y:t.y+a.y})}return ws(i)}visualize(){if(this.activeSubSolver&&!this.solved)return this.activeSubSolver.visualize();if(!this.layout){let e=K6(this.partitionInputProblem);return Vh(this.partitionInputProblem,e)}return Vh(this.partitionInputProblem,this.layout)}getConstructorParams(){return[this.partitionInputProblem]}},lUt=(e,t)=>{if(e.pins.length!==2)return null;let[n,o]=e.pins.map((a)=>t.chipPinMap[a]);if(!n||!o)return null;let i=e.availableRotations?.[0]??0,r=Jr(n.offset,i),s=Jr(o.offset,i);if(Math.abs(r.y-s.y)>=Math.abs(r.x-s.x))return"y";return"x"},wXo=(e)=>{if(e.partitionType!=="decoupling_caps")return!1;let t=Object.values(e.chipMap);if(t.length<2)return!1;let n=null;for(let o of t){if(o.fixedPosition)return!1;let i=lUt(o,e);if(!i)return!1;if(n&&n!==i)return!1;n=i}return n!==null},TXo=class extends zA{partitionInputProblem;layout=null;constructor(e){super();this.partitionInputProblem=e.partitionInputProblem}getRotation(e){return e.availableRotations?.[0]??0}isOnRailNet(e){let t=this.partitionInputProblem,n=nUt({inputProblem:t,netIds:Object.keys(t.netMap)});if(!n)return!1;return t.netConnMap[`${e}-${n}`]===!0}getRailOffset(e,t){let n=e.pins.find((i)=>this.isOnRailNet(i));if(!n)return 0;let o=this.partitionInputProblem.chipPinMap[n];if(!o)return 0;return-Jr(o.offset,this.getRotation(e))[t]}_step(){let e=this.partitionInputProblem,t=Object.values(e.chipMap),n=lUt(t[0],e),o="y";if(n==="y")o="x";let i=e.decouplingCapsGap??e.chipGap,r=t.map((h)=>Ku(h.size,this.getRotation(h))[o]),s=r.reduce((h,A)=>h+A,0)+i*(t.length-1),a={},c=-s/2,l=1,d=e.decouplingMainChipSide;if(o==="x"&&d==="x-"||o==="y"&&d==="y-")c=s/2,l=-1;t.forEach((h,A)=>{let m=r[A],p={x:0,y:0,ccwRotationDegrees:this.getRotation(h)};p[o]=c+l*m/2,p[n]=this.getRailOffset(h,n),a[h.chipId]=p,c+=l*(m+i)}),this.layout={chipPlacements:a,groupPlacements:{}},this.solved=!0}visualize(){return Vh(this.partitionInputProblem,this.layout??{chipPlacements:{},groupPlacements:{}})}getConstructorParams(){return[{partitionInputProblem:this.partitionInputProblem}]}},GU=(e)=>{if(e.availableRotations?.length)return e.availableRotations;return[0]},DXo=(e,t,n)=>{let o=GU(e)[0],i=-1/0;for(let r of GU(e)){let s=n.chipPinMap[t[0]],a=n.chipPinMap[t[1]];if(!s||!a)continue;let c=Jr(s.offset,r),l=Jr(a.offset,r),d=Math.abs(c.x-l.x)-Math.abs(c.y-l.y);if(d>i)i=d,o=r}return o},NXo=(e,t,n,o)=>{let i=GU(e)[0],r=-1/0;for(let s of GU(e)){let a=o.chipPinMap[t],c=o.chipPinMap[n];if(!a||!c)continue;let l=Jr(a.offset,s),d=Jr(c.offset,s),u=l.y-d.y-Math.abs(l.x-d.x);if(u>r)r=u,i=s}return i},RXo=(e,t,n)=>{let o=e.pins.find((s)=>s!==t),i=GU(e)[0],r=-1/0;for(let s of GU(e)){let a=n.chipPinMap[t],c=o&&n.chipPinMap[o];if(!a||!c)continue;let l=Jr(a.offset,s),d=Jr(c.offset,s),u=d.y-l.y-Math.abs(d.x-l.x);if(u>r)r=u,i=s}return i},QXo=(e)=>{if(e.partitionType!=="crystal_circuit"||!e.crystalCircuitGroup)return!1;return Object.values(e.chipMap).every((t)=>t.fixedPosition===void 0)},kXo=class extends zA{partitionInputProblem;layout=null;constructor(e){super();this.partitionInputProblem=e.partitionInputProblem}_step(){let e=this.partitionInputProblem,t=e.crystalCircuitGroup,n=e.chipMap[t.crystalChipId],o=DXo(n,t.activeCrystalPinIds,e),i=Ku(n.size,o),r=e.chipGap,s={[n.chipId]:{x:0,y:0,ccwRotationDegrees:o}},a=new Map;for(let h of t.activeCrystalPinIds){let A=e.chipPinMap[h];a.set(h,Jr(A.offset,o))}let c=a.get(t.activeCrystalPinIds[0]),l=a.get(t.activeCrystalPinIds[1]),d;if(Math.abs(c.x-l.x)>=Math.abs(c.y-l.y))d="x";else d="y";let u=t.loadCaps.map((h,A)=>{let m=e.chipMap[h.chipId],p=NXo(m,h.signalPinId,h.groundPinId,e),g=Ku(m.size,p),_=Jr(e.chipPinMap[h.signalPinId].offset,p),f=Jr(e.chipPinMap[h.groundPinId].offset,p),y=t.activeCrystalPinIds[A],x=a.get(y),C=-i.y/2-r-g.y/2;return{chip:m,rotation:p,size:g,signalOffset:_,groundOffset:f,crystalPinOffset:x,highestGroundY:C+f.y}});if(d==="x"){let h=Math.min(...u.map((y)=>y.highestGroundY));for(let y of u)s[y.chip.chipId]={x:y.crystalPinOffset.x-y.signalOffset.x,y:h-y.groundOffset.y,ccwRotationDegrees:y.rotation};let[A,m]=[...u].sort((y,x)=>s[y.chip.chipId].x-s[x.chip.chipId].x),p=s[A.chip.chipId],g=s[m.chip.chipId],_=g.x-m.size.x/2-(p.x+A.size.x/2),f=Math.max(0,(r*2-_)/2);p.x-=f,g.x+=f}else u.forEach((h,A)=>{let m;if(A===0)m=-1;else m=1;s[h.chip.chipId]={x:m*(i.x/2+r+h.size.x/2),y:h.crystalPinOffset.y-h.signalOffset.y,ccwRotationDegrees:h.rotation}});for(let h of t.seriesResistors){let A=e.chipMap[h.chipId],m=RXo(A,h.connectedPinId,e),p=Ku(A.size,m),g=Jr(e.chipPinMap[h.connectedPinId].offset,m),_=a.get(h.crystalPinId);s[A.chipId]={x:_.x-g.x,y:i.y/2+r+p.y/2,ccwRotationDegrees:m}}this.layout={chipPlacements:s,groupPlacements:{}},this.solved=!0}visualize(){return Vh(this.partitionInputProblem,this.layout??{chipPlacements:{},groupPlacements:{}})}getConstructorParams(){return[{partitionInputProblem:this.partitionInputProblem}]}},fne=2,LXo=(e)=>{let t=new Map;for(let i of Object.values(e.chipMap))for(let r of i.pins)t.set(r,i.chipId);let n=YU(e),o=new Map;for(let[i,r]of Object.entries(n)){let s=t.get(i);if(!s)continue;for(let a of r){let c=t.get(a.pinId);if(!c||c===s)continue;let l=o.get(s)??[];l.push({selfPinId:i,otherPinId:a.pinId,otherChipId:c}),o.set(s,l)}}return o},FXo=({inputProblem:e,connectionsByChip:t,mainChipId:n,startChipId:o,endChipId:i})=>{if(o===i)return null;let r=(c)=>{let l=e.chipMap[c];return c!==n&&l?.pins.length===fne&&!l.fixedPosition};if(!r(o)||!r(i))return null;let s=[[o]],a=new Set([o]);while(s.length>0){let c=s.shift(),l=c[c.length-1];if(l===i)return c;for(let d of t.get(l)??[]){let u=d.otherChipId;if(!r(u)||a.has(u))continue;a.add(u),s.push([...c,u])}}return null},HXo=({inputProblem:e,connectionsByChip:t,mainChipId:n,mainPinIds:o,pathChipIds:i})=>{let r=[];for(let s=0;s<i.length;s++){let a=i[s],c=e.chipMap[a],l=t.get(a)??[];if(!c||l.length!==fne||new Set(l.map((m)=>m.selfPinId)).size!==fne)return null;let d=s===0?n:i[s-1],u=s===i.length-1?n:i[s+1],h=l.find((m)=>m.otherChipId===d),A=l.find((m)=>m.otherChipId===u);if(!h||!A||h.selfPinId===A.selfPinId)return null;if(s===0&&h.otherPinId!==o[0])return null;if(s===i.length-1&&A.otherPinId!==o[1])return null;r.push({chipId:a,nearPinId:h.selfPinId,farPinId:A.selfPinId})}return r},dUt=(e)=>{let t=LXo(e),n=[],o=new Set;for(let i of Object.values(e.chipMap)){if(i.pins.length<=fne)continue;let r=t.get(i.chipId)??[];for(let s=0;s<r.length;s++){let a=r[s],c=e.chipPinMap[a.selfPinId];if(!c)continue;for(let l=s+1;l<r.length;l++){let d=r[l],u=e.chipPinMap[d.selfPinId];if(!u||c.side!==u.side||a.selfPinId===d.selfPinId)continue;let h=FXo({inputProblem:e,connectionsByChip:t,mainChipId:i.chipId,startChipId:a.otherChipId,endChipId:d.otherChipId});if(!h||h.length<fne||h.length%2!==0||h.some((f)=>o.has(f)))continue;let A=[a.selfPinId,d.selfPinId],m=HXo({inputProblem:e,connectionsByChip:t,mainChipId:i.chipId,mainPinIds:A,pathChipIds:h});if(!m)continue;let p=m.length/2,g=m.slice(0,p),_=m.slice(p).reverse().map((f)=>({chipId:f.chipId,nearPinId:f.farPinId,farPinId:f.nearPinId}));n.push({mainChipId:i.chipId,mainPinIds:A,branches:[g,_]});for(let f of h)o.add(f)}}}return n},OXo=[0,90,180,270],TVt=0.000001,hT=(e,t)=>e.x*t.x+e.y*t.y,zXo=({outwardCoordinate:e,tangentCoordinate:t,axes:n})=>({x:n.outward.x*e+n.tangent.x*t,y:n.outward.y*e+n.tangent.y*t}),GXo=({pinOffset:e})=>{if(Math.abs(e.x)>=Math.abs(e.y))return{outward:Kv(e.x>=0?"right":"left"),tangent:Kv("up")};return{outward:Kv(e.y>=0?"up":"down"),tangent:Kv("right")}},DVt=({size:e,axis:t})=>(Math.abs(t.x)*e.x+Math.abs(t.y)*e.y)/2,YXo=({chip:e,nearPinId:t,farPinId:n,inputProblem:o,outward:i,originalRotation:r})=>{let s=o.chipPinMap[t],a=o.chipPinMap[n];if(!s||!a)return r;let c=e.availableRotations??OXo,l=c[0]??0,d=Number.NEGATIVE_INFINITY;for(let u of c){let h=Jr(s.offset,u),A=Jr(a.offset,u),m=hT({x:A.x-h.x,y:A.y-h.y},i);if(m>d||m===d&&u===r)d=m,l=u}return l},$fe=({chip:e,placement:t})=>{let n=Ku(e.size,t.ccwRotationDegrees);return xd({center:t,width:n.x,height:n.y})},NVt=({branch:e,mainPinId:t,mainChip:n,mainPlacement:o,inputProblem:i,axes:r,originalPlacements:s,extraGap:a})=>{let c=i.chipPinMap[t];if(!c)return null;let l=Ku(n.size,o.ccwRotationDegrees),d=Jr(c.offset,o.ccwRotationDegrees),u={x:o.x+d.x,y:o.y+d.y},h=hT(o,r.outward)+DVt({size:l,axis:r.outward});h=Math.max(h,hT(u,r.outward));let A=hT(u,r.tangent),m={},p=h;for(let g of e){let _=i.chipMap[g.chipId],f=s[g.chipId],y=i.chipPinMap[g.nearPinId],x=i.chipPinMap[g.farPinId];if(!_||!f||!y||!x)return null;let C=YXo({chip:_,nearPinId:g.nearPinId,farPinId:g.farPinId,inputProblem:i,outward:r.outward,originalRotation:f.ccwRotationDegrees}),I=Ku(_.size,C),b=DVt({size:I,axis:r.outward}),P=Jr(y.offset,C),E=Jr(x.offset,C),B=h+i.chipGap+a+b,w=A-hT(P,r.tangent),T=zXo({outwardCoordinate:B,tangentCoordinate:w,axes:r});m[_.chipId]={...T,ccwRotationDegrees:C},h=B+b,A=w+hT(E,r.tangent),p=B+hT(E,r.outward)}return{placements:m,terminalOutwardCoordinate:p}},RVt=({branchLayout:e,shift:t,tangent:n})=>{for(let o of Object.values(e.placements))o.x+=n.x*t,o.y+=n.y*t},QVt=({branchLayout:e,inputProblem:t,tangent:n})=>{let o=ws(Object.entries(e.placements).flatMap(([i,r])=>{let s=$fe({chip:t.chipMap[i],placement:r});return[{x:s.minX,y:s.minY},{x:s.maxX,y:s.maxY}]}));if(!o)return{min:0,max:0};if(Math.abs(n.x)>=Math.abs(n.y))return{min:o.minX,max:o.maxX};return{min:o.minY,max:o.maxY}},VXo=({candidatePlacements:e,originalPlacements:t,inputProblem:n})=>{let o=new Set(Object.keys(e)),i=Object.entries(e);for(let r=0;r<i.length;r++){let[s,a]=i[r],c=n.chipMap[s];if(!c)return!1;let l=$fe({chip:c,placement:a});for(let d=r+1;d<i.length;d++){let[u,h]=i[d],A=n.chipMap[u];if(!A||z7(l,$fe({chip:A,placement:h}))<n.chipGap-TVt)return!1}for(let[d,u]of Object.entries(t)){if(o.has(d))continue;let h=n.chipMap[d];if(!h||z7(l,$fe({chip:h,placement:u}))<n.chipGap-TVt)return!1}}return!0},UXo=({group:e,chipPlacements:t,inputProblem:n})=>{let o=n.chipMap[e.mainChipId],i=t[e.mainChipId],r=n.chipPinMap[e.mainPinIds[0]];if(!o||!i||!r)return null;let s=Jr(r.offset,i.ccwRotationDegrees),a=GXo({pinOffset:s}),c=e.branches.map((p,g)=>({branch:p,mainPinId:e.mainPinIds[g]})).sort((p,g)=>{let _=(f)=>{let y=n.chipPinMap[f],x=Jr(y.offset,i.ccwRotationDegrees);return hT({x:i.x+x.x,y:i.y+x.y},a.tangent)};return _(p.mainPinId)-_(g.mainPinId)}),l=c.map(({branch:p,mainPinId:g})=>NVt({branch:p,mainPinId:g,mainChip:o,mainPlacement:i,inputProblem:n,axes:a,originalPlacements:t,extraGap:0}));if(l.some((p)=>!p))return null;let d=Math.max(...l.map((p)=>p.terminalOutwardCoordinate));if(l=c.map(({branch:p,mainPinId:g},_)=>{let f=l[_],y=(d-f.terminalOutwardCoordinate)/p.length;return NVt({branch:p,mainPinId:g,mainChip:o,mainPlacement:i,inputProblem:n,axes:a,originalPlacements:t,extraGap:y})}),l.some((p)=>!p))return null;let u=QVt({branchLayout:l[0],inputProblem:n,tangent:a.tangent}),h=QVt({branchLayout:l[1],inputProblem:n,tangent:a.tangent}),A=Math.max(0,u.max+n.chipGap-h.min);RVt({branchLayout:l[0],shift:-A/2,tangent:a.tangent}),RVt({branchLayout:l[1],shift:A/2,tangent:a.tangent});let m=Object.assign({},l[0].placements,l[1].placements);if(!VXo({candidatePlacements:m,originalPlacements:t,inputProblem:n}))return null;return m},WXo=(e)=>dUt(e).length>0,XXo=class extends zA{partitionInputProblem;layout=null;pinIdToStronglyConnectedPins;packingSolver=null;constructor(e){super();this.partitionInputProblem=e.partitionInputProblem,this.pinIdToStronglyConnectedPins=e.pinIdToStronglyConnectedPins}_step(){if(!this.packingSolver)this.packingSolver=new xOe({partitionInputProblem:this.partitionInputProblem,pinIdToStronglyConnectedPins:this.pinIdToStronglyConnectedPins}),this.activeSubSolver=this.packingSolver;if(this.packingSolver.step(),this.packingSolver.failed){this.failed=!0,this.error=this.packingSolver.error;return}if(this.packingSolver.solved&&this.packingSolver.layout)this.layout=this.refinePackedLayout(this.packingSolver.layout),this.activeSubSolver=null,this.solved=!0}refinePackedLayout(e){let t={};for(let[n,o]of Object.entries(e.chipPlacements))t[n]={...o};for(let n of dUt(this.partitionInputProblem)){let o=UXo({group:n,chipPlacements:t,inputProblem:this.partitionInputProblem});if(o)Object.assign(t,o)}return{chipPlacements:t,groupPlacements:e.groupPlacements}}visualize(){if(this.activeSubSolver&&!this.solved)return this.activeSubSolver.visualize();if(!this.layout){let e=K6(this.partitionInputProblem);return Vh(this.partitionInputProblem,e)}return Vh(this.partitionInputProblem,this.layout)}getConstructorParams(){return[this.partitionInputProblem]}};function _ne(e,t,n,o){return{solverName:e,solverClass:t,appliesTo:n,getConstructorParams:o}}var KXo=[_ne("crystalCircuitLayoutSolver",kXo,QXo,(e)=>[{partitionInputProblem:e.partitions[e.currentPartitionIndex]}]),_ne("decouplingCapRowSolver",TXo,wXo,(e)=>[{partitionInputProblem:e.partitions[e.currentPartitionIndex]}]),_ne("parallelAlignedPassiveSolver",BXo,(e)=>cUt(e).length>0,(e)=>[{partitionInputProblem:e.partitions[e.currentPartitionIndex],pinIdToStronglyConnectedPins:e.pinIdToStronglyConnectedPins}]),_ne("parallelSeriesBranchSolver",XXo,WXo,(e)=>[{partitionInputProblem:e.partitions[e.currentPartitionIndex],pinIdToStronglyConnectedPins:e.pinIdToStronglyConnectedPins}]),_ne("singleInnerPartitionPackingSolver",xOe,()=>!0,(e)=>[{partitionInputProblem:e.partitions[e.currentPartitionIndex],pinIdToStronglyConnectedPins:e.pinIdToStronglyConnectedPins}])],jXo=class extends zA{partitions;packedPartitions=[];completedSolvers=[];activeSolver=null;currentPartitionIndex=0;pinIdToStronglyConnectedPins;constructor(e){super();this.partitions=e.partitions,this.pinIdToStronglyConnectedPins=e.pinIdToStronglyConnectedPins}_step(){if(this.currentPartitionIndex>=this.partitions.length){this.solved=!0;return}if(!this.activeSolver){let e=this.partitions[this.currentPartitionIndex],t=KXo.find((o)=>o.appliesTo(e)),n=t.getConstructorParams(this);this.activeSolver=new t.solverClass(...n),this.activeSubSolver=this.activeSolver}if(this.activeSolver.step(),this.activeSolver.failed){this.failed=!0,this.error=`Partition ${this.currentPartitionIndex} failed: ${this.activeSolver.error}`;return}if(this.activeSolver.solved){if(this.completedSolvers.push(this.activeSolver),this.activeSolver.layout)this.packedPartitions.push({inputProblem:this.partitions[this.currentPartitionIndex],layout:this.activeSolver.layout});else{this.failed=!0,this.error=`Partition ${this.currentPartitionIndex} completed but has no layout`;return}this.activeSolver=null,this.activeSubSolver=null,this.currentPartitionIndex++}}visualize(){if(this.activeSolver)return this.activeSolver.visualize();if(this.completedSolvers.length===0){let n=this.partitions.map((i)=>{let r=K6(i);return Vh(i,r)}),o=this.partitions.map((i,r)=>`partition${r}`);return V7(n,{titles:o})}let e=this.completedSolvers.map((n)=>n.visualize()),t=this.completedSolvers.map((n,o)=>`packed_partition_${o}`);return V7(e,{titles:t})}getConstructorParams(){return[this.partitions]}};var pOe=0.000001,kVt=2,LVt=["x+","y+","x-","y-"],Zfe=(e,t)=>e===t?0:e<t?-1:1,FVt=(e,t)=>{let n=(Math.round(t/90)%4+4)%4,o=LVt.indexOf(e);return LVt[(o+n)%4]},o1e=(e,t,n)=>{let o=e.chipPinMap[t],i=Jr(o.offset,n.ccwRotationDegrees);return{x:n.x+i.x,y:n.y+i.y}},qXo=(e,t)=>e.distanceSquared-t.distanceSquared||Math.abs(e.yDelta)-Math.abs(t.yDelta)||Zfe(e.anchorChipId,t.anchorChipId)||Zfe(e.anchorPinId,t.anchorPinId)||Zfe(e.resistorPinId,t.resistorPinId),JXo=(e,t,n,o)=>{let i=o[t],r=o[e.anchorChipId];if(!i||!r)return!0;let s=o1e(n,e.resistorPinId,i),a=o1e(n,e.anchorPinId,r);return Object.entries(o).some(([c,l])=>{if(c===t||c===e.anchorChipId)return!1;let d=n.chipMap[c];if(!d)return!1;let u=Ku(d.size,l.ccwRotationDegrees);return p$(s,a,xd({center:l,width:u.x,height:u.y}))})},$Xo=({inputProblem:e,chipPlacements:t,pinToNetworkMap:n})=>{let o=wL(e),i=new Map;for(let[s,a]of n){let c=i.get(a)??[];c.push(s),i.set(a,c)}let r=Object.values(e.chipMap).filter((s)=>s.isResistor&&!s.fixedPosition&&s.pins.length===kVt).sort((s,a)=>Zfe(s.chipId,a.chipId));for(let s of r){let a=t[s.chipId];if(!a)continue;let c=[];for(let u of s.pins){let h=e.chipPinMap[u],A=n.get(u);if(!h||!A)continue;let m=FVt(h.side,a.ccwRotationDegrees);if(m!=="x-"&&m!=="x+")continue;let p=m==="x+"?1:-1,g=o1e(e,u,a);for(let _ of i.get(A)??[]){let f=o.get(_);if(!f||f.chipId===s.chipId||f.pins.length!==kVt)continue;let y=e.chipPinMap[_],x=t[f.chipId];if(!y||!x)continue;let C=FVt(y.side,x.ccwRotationDegrees);if(m==="x-"&&C!=="x+"||m==="x+"&&C!=="x-")continue;let I=o1e(e,_,x),b=I.x-g.x,P=I.y-g.y,E=b*p;if(E<=pOe||Math.abs(P)<=pOe||Math.abs(P)>E+pOe)continue;c.push({anchorChipId:f.chipId,anchorPinId:_,resistorPinId:u,yDelta:P,distanceSquared:b*b+P*P})}}c.sort(qXo);let l=c[0];if(!l)continue;let d=a.y;if(!BL({chipIds:[s.chipId],dx:0,dy:l.yDelta,chipPlacements:t,inputProblem:e}))continue;if(JXo(l,s.chipId,e,t))a.y=d}},ZXo=class extends zA{packedPartitions;inputProblem;finalLayout=null;packSolver2=null;pinToNetworkMap=null;constructor(e){super();this.packedPartitions=e.packedPartitions,this.inputProblem=e.inputProblem}partitionHasFixedChip(e){let t=this.packedPartitions[e];if(!t)return!1;return Object.values(t.inputProblem.chipMap).some((n)=>n.fixedPosition!==void 0)}_step(){try{if(this.packedPartitions.length===0){this.finalLayout={chipPlacements:{},groupPlacements:{}},this.solved=!0;return}if(this.packedPartitions.length===1){this.finalLayout=this.packedPartitions[0].layout,this.solved=!0;return}let e=this.organizePackedPartitions();if(!this.packSolver2){let t=this.createPackInput(e);this.packSolver2=new X6(t),this.activeSubSolver=this.packSolver2}if(this.packSolver2.step(),this.packSolver2.failed){this.failed=!0,this.error=`PackSolver2 failed: ${this.packSolver2.error}`;return}if(this.packSolver2.solved){let t=this.applyPackingResult(this.packSolver2.packedComponents,e);this.finalLayout=t,this.solved=!0,this.activeSubSolver=null}}catch(e){this.failed=!0,this.error=`Failed to pack partitions: ${e}`}}buildConnectivityMap(){let e=new Map;for(let t of this.packedPartitions){for(let[n,o]of Object.entries(t.inputProblem.netConnMap)){if(!o)continue;let[i,r]=n.split("-");if(i&&r)e.set(i,r)}for(let[n,o]of Object.entries(t.inputProblem.pinStrongConnMap)){if(!o)continue;let i=n.split("-");if(i.length===2&&i[0]&&i[1]){let r=e.get(i[0])||e.get(i[1]);if(r)e.set(i[0],r),e.set(i[1],r);else e.set(i[0],n),e.set(i[1],n)}}}return e}getConnectivityMap(){return this.pinToNetworkMap??=this.buildConnectivityMap(),this.pinToNetworkMap}organizePackedPartitions(){let e=[];for(let t=0;t<this.packedPartitions.length;t++){let n=this.packedPartitions[t],o=Object.keys(n.layout.chipPlacements);if(o.length>0){let i=1/0,r=-1/0,s=1/0,a=-1/0;for(let c of o){let l=n.layout.chipPlacements[c],d=n.inputProblem.chipMap[c],u=d.size.x,h=d.size.y;if(l.ccwRotationDegrees===90||l.ccwRotationDegrees===270)[u,h]=[h,u];let A=l.x-u/2,m=l.x+u/2,p=l.y-h/2,g=l.y+h/2;i=Math.min(i,A),r=Math.max(r,m),s=Math.min(s,p),a=Math.max(a,g)}e.push({partitionIndex:t,chipIds:o,bounds:{minX:i,maxX:r,minY:s,maxY:a}})}}return e}createPackInput(e){let t=this.getConnectivityMap();return{components:e.map((o)=>{let i=this.packedPartitions[o.partitionIndex],r=this.partitionHasFixedChip(o.partitionIndex),s=o.bounds.maxX-o.bounds.minX,a=o.bounds.maxY-o.bounds.minY,c=(o.bounds.minX+o.bounds.maxX)/2,l=(o.bounds.minY+o.bounds.maxY)/2,d=[{padId:`partition_${o.partitionIndex}_body`,networkId:`partition_${o.partitionIndex}_disconnected`,type:"rect",offset:{x:0,y:0},size:{x:Math.max(s,0.1),y:Math.max(a,0.1)}}],u=new Set;for(let h of o.chipIds){let A=i.layout.chipPlacements[h],m=i.inputProblem.chipMap[h];for(let p of m.pins){let g=i.inputProblem.chipPinMap[p];if(!g)continue;let _={x:g.offset.x,y:g.offset.y},f=A.ccwRotationDegrees??0;if(f===90)_={x:-g.offset.y,y:g.offset.x};else if(f===180)_={x:-g.offset.x,y:-g.offset.y};else if(f===270)_={x:g.offset.y,y:-g.offset.x};let y=A.x+_.x,x=A.y+_.y,C=t.get(p)??`${p}_disconnected`;if(!u.has(C))u.add(C),d.push({padId:`${o.partitionIndex}_pin_${p}`,networkId:C,type:"rect",offset:{x:y-c,y:x-l},size:{x:0.01,y:0.01}})}}return{componentId:`partition_${o.partitionIndex}`,pads:d,availableRotationDegrees:[0],...r&&{isStatic:!0,center:{x:c,y:l},ccwRotationOffset:0}}}),minGap:this.inputProblem.partitionGap,packOrderStrategy:"largest_to_smallest",packPlacementStrategy:"minimum_sum_squared_distance_to_network"}}applyPackingResult(e,t){let n={};for(let i of e){let r=parseInt(i.componentId.replace("partition_","")),s=t.find((c)=>c.partitionIndex===r),a=this.packedPartitions[r];if(s&&a){let c=(s.bounds.minX+s.bounds.maxX)/2,l=(s.bounds.minY+s.bounds.maxY)/2,d=i.center.x,u=i.center.y,h=d-c,A=u-l;for(let m of s.chipIds){let p=a.layout.chipPlacements[m];n[m]={x:p.x+h,y:p.y+A,ccwRotationDegrees:p.ccwRotationDegrees}}}}let o={chipPlacements:n,groupPlacements:{}};return $Xo({inputProblem:this.inputProblem,chipPlacements:o.chipPlacements,pinToNetworkMap:this.getConnectivityMap()}),o}getCombinedPackedPartitionsProblem(){let e={chipMap:{},chipPinMap:{},pinStrongConnMap:{},netMap:{},netConnMap:{},chipGap:this.inputProblem.chipGap,partitionGap:this.inputProblem.partitionGap};for(let t of this.packedPartitions)Object.assign(e.chipMap,t.inputProblem.chipMap),Object.assign(e.chipPinMap,t.inputProblem.chipPinMap),Object.assign(e.pinStrongConnMap,t.inputProblem.pinStrongConnMap),Object.assign(e.netMap,t.inputProblem.netMap),Object.assign(e.netConnMap,t.inputProblem.netConnMap);return e}getCombinedPackedPartitionsLayout(){let e={};for(let t of this.packedPartitions)Object.assign(e,t.layout.chipPlacements);return{chipPlacements:e,groupPlacements:{}}}visualize(){if(this.packSolver2&&!this.solved)return this.packSolver2.visualize();if(!this.finalLayout){if(this.packedPartitions.length===0)return super.visualize();return Vh(this.getCombinedPackedPartitionsProblem(),this.getCombinedPackedPartitionsLayout())}return Vh(this.getCombinedPackedPartitionsProblem(),this.finalLayout)}getConstructorParams(){return{packedPartitions:this.packedPartitions,inputProblem:this.inputProblem}}},eKo=0.2,HVt=(e,t)=>t.y+Jr(e.offset,t.ccwRotationDegrees).y,l1e=({upperPin:e,upperPlacement:t,lowerPin:n,lowerPlacement:o})=>HVt(e,t)-HVt(n,o)-eKo,OVt=({chipId:e,side:t},n)=>n.chipMap[e]?.pins.filter((i)=>!t||n.chipPinMap[i]?.side===t).map((i)=>n.chipPinMap[i]).find((i)=>i&&Object.values(n.netMap).some((r)=>r.isPositiveVoltageSource&&n.netConnMap[`${i.pinId}-${r.netId}`])),fOe=(e,{inputProblem:t,layout:n})=>{let o=n.chipPlacements[e],i=t.chipMap[e];if(!o||!i)return null;let r=Ku(i.size,o.ccwRotationDegrees);return xd({center:o,width:r.x,height:r.y})},zVt=(e,t)=>{let n=e.flatMap((o)=>{let i=fOe(o,t);if(!i)return[];return[{x:i.minX,y:i.minY},{x:i.maxX,y:i.maxY}]});return ws(n)},tKo=({mainPartition:e,mainChipId:t,side:n},o)=>{let i=new Set(o.chipMap[t]?.pins.filter((s)=>o.chipPinMap[s]?.side===n)),r=wL(e.inputProblem);for(let[s,a]of Object.entries(o.pinStrongConnMap)){if(!a)continue;let[c,l]=s.split("-"),d=i.has(c)?l:i.has(l)?c:null;if(!d)continue;let u=r.get(d);if(u?.chipId===t)continue;if(u)return u.chipId}return null},nKo=({partitionA:e,partitionB:t},n)=>{let o=new Set(Object.keys(e.inputProblem.chipPinMap)),i=new Set(Object.keys(t.inputProblem.chipPinMap));return Object.entries(n.pinStrongConnMap).some(([r,s])=>{if(!s)return!1;let[a,c]=r.split("-");return o.has(a)&&i.has(c)||o.has(c)&&i.has(a)})},oKo=(e,t)=>{let n=new Set(e);return e.some((o)=>{let i=fOe(o,t);return Object.keys(t.layout.chipPlacements).some((r)=>{if(!i||n.has(r))return!1;let s=fOe(r,t);return s?h0(i,s):!1})})},iKo=({side:e,chipGap:t,mainBounds:n,rowBounds:o,neighbor:i})=>{let r=ax(o),s={x:i.x-r.x,y:i.y-r.y};if(e==="x+")s.x=n.maxX+t-o.minX;if(e==="x-")s.x=n.minX-t-o.maxX;if(e==="y+")s.y=n.maxY+t-o.minY;if(e==="y-")s.y=n.minY-t-o.maxY;return s},rKo=({layout:e,decouplingPartition:t},{inputProblem:n,packedPartitions:o})=>{let i=t.inputProblem,{decouplingMainChipId:r,decouplingMainChipSide:s}=i;if(i.partitionType!=="decoupling_caps"||!r||!s)return;let a=o.find((f)=>f!==t&&f.inputProblem.chipMap[r]);if(!a||nKo({partitionA:t,partitionB:a},n))return;let c=tKo({mainPartition:a,mainChipId:r,side:s},n),l=e.chipPlacements[r];if(c)l=e.chipPlacements[c];let d=Object.keys(i.chipMap),u={inputProblem:n,layout:e},h=zVt(Object.keys(a.inputProblem.chipMap),u),A=zVt(d,u);if(!l||!h||!A)return;if(!c){let f=d[0],y=OVt({chipId:r,side:s},n),x=f&&OVt({chipId:f},n),C=f&&e.chipPlacements[f];if(!y||!x||!C)return;l={...l,y:l.y+l1e({upperPin:y,upperPlacement:l,lowerPin:x,lowerPlacement:{...C,y:l.y}})}}let m=n.chipGap;if(!c)m=n.partitionGap;let p=iKo({side:s,chipGap:m,mainBounds:h,rowBounds:A,neighbor:l}),g=So(p.x,p.y),_=new Map;for(let f of d){let y=e.chipPlacements[f];if(!y)continue;_.set(f,y),e.chipPlacements[f]={...y,...tt(g,y)}}if(oKo(d,u))for(let[f,y]of _)e.chipPlacements[f]=y},sKo=class extends zA{constructor(e){super();this.options=e}options;outputLayout=null;_step(){this.outputLayout=structuredClone(this.options.inputLayout);for(let e of this.options.packedPartitions)rKo({layout:this.outputLayout,decouplingPartition:e},this.options);this.solved=!0}visualize(){return Vh(this.options.inputProblem,this.outputLayout??this.options.inputLayout)}getConstructorParams(){return[this.options]}},aKo=[0,90,180,270],GVt=0,Jfe=0.5,YVt=({chip:e,upperPinId:t,lowerPinId:n,inputProblem:o})=>{let i=o.chipPinMap[t],r=o.chipPinMap[n];if(!i||!r)return GVt;let s=e.availableRotations??aKo,a=GVt,c=Number.NEGATIVE_INFINITY;for(let l of s){let d=Jr(i.offset,l),u=Jr(r.offset,l),h=d.y-u.y;if(h<=c)continue;c=h,a=l}return a},cKo=({railLoadPairs:e,inputProblem:t,inputLayout:n})=>{let o=structuredClone(n),{chipPlacements:i}=o,r=new Map;for(let s of e){let a=r.get(s.mainChipId)??[];a.push(s),r.set(s.mainChipId,a)}for(let s of r.values()){let a;for(let c of s){let l=i[c.railComponent.chipId],d=i[c.resistor.chipId],u=i[c.mainChipId],h=t.chipPinMap[c.mainPinId];if(!l||!d)continue;if(!u||!h)continue;let A=YVt({chip:c.railComponent,upperPinId:c.railPinId,lowerPinId:c.railComponentResistorPinId,inputProblem:t}),m=YVt({chip:c.resistor,upperPinId:c.resistorRailComponentPinId,lowerPinId:c.resistorMainPinId,inputProblem:t}),p=Ku(c.railComponent.size,A),g=Ku(c.resistor.size,m),_=p.y*Jfe+t.chipGap+g.y*Jfe,f=Jr(h.offset,u.ccwRotationDegrees),y=t.chipPinMap[c.resistorMainPinId];if(!y)continue;let x=Jr(y.offset,m),C=(l.x+d.x)*Jfe,I=u.y+f.y-x.y,b=I+_;i[c.railComponent.chipId]={x:C,y:b,ccwRotationDegrees:A},i[c.resistor.chipId]={x:C,y:I,ccwRotationDegrees:m};let P=Math.max(p.x,g.x)*Jfe,E=C-P,B=C+P;if(a!==void 0){let w=a+t.partitionGap-E;C+=w,i[c.railComponent.chipId].x=C,i[c.resistor.chipId].x=C,a=B+w;continue}a=B}}return xXo({railLoadPairs:e,inputProblem:t,chipPlacements:i}),o},VVt=2,UVt=({connectedPinsByPinId:e,pinId:t})=>(e[t]??[]).map((n)=>n.pinId),lKo=({inputProblem:e,pinId:t})=>{for(let[n,o]of Object.entries(e.netMap)){if(!o.isPositiveVoltageSource)continue;if(e.netConnMap[`${t}-${n}`])return!0}return!1},dKo=(e,t)=>{let{inputProblem:n,pinOwnerMap:o,connectedPinsByPinId:i}=t;for(let r of e.pins){let s=UVt({connectedPinsByPinId:i,pinId:r}).find((h)=>{let A=o.get(h);if(!A)return!1;return A.pins.length>VVt&&!A.isCrystal});if(!s)continue;let a=o.get(s);if(!a)continue;let c=e.pins.find((h)=>h!==r);if(!c)continue;let l=UVt({connectedPinsByPinId:i,pinId:c}).find((h)=>{let A=o.get(h);if(!A)return!1;if(A.pins.length!==VVt)return!1;return!A.isResistor&&!A.isCapacitor&&!A.fixedPosition});if(!l)continue;let d=o.get(l);if(!d)continue;let u=d.pins.find((h)=>h!==l&&lKo({inputProblem:n,pinId:h}));if(!u)continue;return{railComponent:d,resistor:e,railPinId:u,railComponentResistorPinId:l,resistorRailComponentPinId:c,resistorMainPinId:r,mainChipId:a.chipId,mainPinId:s}}return null},uKo=(e)=>{let t={inputProblem:e,pinOwnerMap:wL(e),connectedPinsByPinId:YU(e)},n=[];for(let o of Object.values(e.chipMap)){if(!o.isResistor||o.fixedPosition)continue;let i=dKo(o,t);if(i)n.push(i)}return n},hKo=class extends zA{constructor(e){super();this.params=e}params;outputLayout=null;_step(){let e=uKo(this.params.inputProblem);this.outputLayout=cKo({railLoadPairs:e,inputProblem:this.params.inputProblem,inputLayout:this.params.inputLayout}),this.solved=!0}visualize(){let e=this.params.inputLayout;if(this.outputLayout)e=this.outputLayout;return Vh(this.params.inputProblem,e)}getConstructorParams(){return[this.params]}},mT=2,e1e=({connectedPinsByPinId:e,pinId:t})=>(e[t]??[]).map((n)=>n.pinId),d1e=({inputProblem:e,pinId:t})=>{let n=[];for(let o of Object.keys(e.netMap))if(e.netConnMap[`${t}-${o}`])n.push(o);return n},uUt=({inputProblem:e,netId:t})=>{let n=[];for(let o of Object.keys(e.chipPinMap))if(e.netConnMap[`${o}-${t}`])n.push(o);return n},COe=({lowerChip:e,lowerInnerPinId:t,inputProblem:n})=>{for(let o of e.pins){if(o===t)continue;let i=d1e({inputProblem:n,pinId:o}).find((r)=>n.netMap[r]?.isGround===!0);if(i)return{groundPinId:o,groundNetId:i}}return null},mKo=({inputProblem:e,pinId:t})=>d1e({inputProblem:e,pinId:t}).some((n)=>e.netMap[n]?.isPositiveVoltageSource===!0),hUt=({upperInnerPinId:e},t)=>{let{inputProblem:n,pinOwnerMap:o,connectedPinsByPinId:i,pairedChipIds:r}=t;for(let s of e1e({connectedPinsByPinId:i,pinId:e})){let a=o.get(s);if(!a)continue;if(a.pins.length!==mT)continue;if(a.fixedPosition)continue;if(r.has(a.chipId))continue;let c=COe({lowerChip:a,lowerInnerPinId:s,inputProblem:n});if(!c)continue;return{lowerChip:a,lowerInnerPinId:s,...c}}return null},pKo=(e,t)=>{let{inputProblem:n,pinOwnerMap:o,connectedPinsByPinId:i,pairedChipIds:r}=t;for(let s of e.pins){let a=e1e({connectedPinsByPinId:i,pinId:s}).find((A)=>{let m=o.get(A);if(!m)return!1;return m.pins.length>mT&&!m.isCrystal});if(!a)continue;let c=o.get(a);if(!c)continue;let l=e.pins.find((A)=>A!==s);if(!l)continue;let d=e1e({connectedPinsByPinId:i,pinId:l}).map((A)=>o.get(A)).find((A)=>{if(!A)return!1;if(A.pins.length!==mT)return!1;if(A.chipId===e.chipId)return!1;if(A.fixedPosition)return!1;return!r.has(A.chipId)});if(!d)continue;let u=d.pins.find((A)=>e1e({connectedPinsByPinId:i,pinId:A}).some((m)=>o.get(m)?.chipId===e.chipId));if(!u)continue;let h=COe({lowerChip:d,lowerInnerPinId:u,inputProblem:n});if(!h)continue;return{upperChip:e,lowerChip:d,mainChipId:c.chipId,mainPinId:a,upperOuterPinId:s,upperInnerPinId:l,lowerInnerPinId:u,...h}}return null},AKo=(e,t)=>{let{inputProblem:n,pinOwnerMap:o,pairedChipIds:i}=t,r=e.pins.find((A)=>mKo({inputProblem:n,pinId:A}));if(!r)return null;let s=e.pins.find((A)=>A!==r);if(!s)return null;let a=hUt({upperInnerPinId:s},t);if(a)return{upperChip:e,upperOuterPinId:r,upperInnerPinId:s,...a};let c=d1e({inputProblem:n,pinId:s}).find((A)=>{let m=n.netMap[A];return!m?.isGround&&!m?.isPositiveVoltageSource});if(!c)return null;let l=uUt({inputProblem:n,netId:c});if(l.length!==mT)return null;let d=l.find((A)=>A!==s);if(!d)return null;let u=o.get(d);if(!u)return null;if(u.pins.length!==mT)return null;if(u.fixedPosition)return null;if(i.has(u.chipId))return null;let h=COe({lowerChip:u,lowerInnerPinId:d,inputProblem:n});if(!h)return null;return{upperChip:e,lowerChip:u,upperOuterPinId:r,upperInnerPinId:s,lowerInnerPinId:d,...h}},_Ko=(e,t)=>{let{inputProblem:n}=t;for(let o of e.pins){if(!d1e({inputProblem:n,pinId:o}).some((a)=>{let c=n.netMap[a];if(c?.isGround||c?.isPositiveVoltageSource)return!1;return uUt({inputProblem:n,netId:a}).length===1}))continue;let r=e.pins.find((a)=>a!==o);if(!r)continue;let s=hUt({upperInnerPinId:r},t);if(!s)continue;return{upperChip:e,upperOuterPinId:o,upperInnerPinId:r,...s,isStandaloneSignalChain:!0}}return null},gKo=(e)=>{let t=wL(e),n=[],o=new Set,i=YU(e),r={inputProblem:e,pinOwnerMap:t,connectedPinsByPinId:i,pairedChipIds:o};for(let s of Object.values(e.chipMap)){if(s.pins.length!==mT)continue;if(s.isCrystal)continue;if(s.fixedPosition)continue;if(o.has(s.chipId))continue;let a=pKo(s,r);if(!a)continue;n.push(a),o.add(a.upperChip.chipId),o.add(a.lowerChip.chipId)}for(let s of Object.values(e.chipMap)){if(s.pins.length!==mT)continue;if(s.isCrystal)continue;if(s.fixedPosition)continue;if(o.has(s.chipId))continue;let a=_Ko(s,r);if(!a)continue;n.push(a),o.add(a.upperChip.chipId),o.add(a.lowerChip.chipId)}for(let s of Object.values(e.chipMap)){if(s.pins.length!==mT)continue;if(s.isCrystal)continue;if(s.fixedPosition)continue;if(o.has(s.chipId))continue;let a=AKo(s,r);if(!a)continue;n.push(a),o.add(a.upperChip.chipId),o.add(a.lowerChip.chipId)}return n},fKo=[0,90,180,270],WVt=0,AOe=0.5,XVt=({chip:e,upperPinId:t,lowerPinId:n,inputProblem:o})=>{let i=o.chipPinMap[t],r=o.chipPinMap[n];if(!i||!r)return WVt;let s=fKo;if(e.availableRotations)s=e.availableRotations;let a=WVt,c=Number.NEGATIVE_INFINITY;for(let l of s){let d=Jr(i.offset,l),u=Jr(r.offset,l),h=d.y-u.y;if(h<=c)continue;c=h,a=l}return a},_Oe=({chip:e,placement:t})=>{let n=Ku(e.size,t.ccwRotationDegrees);return xd({center:t,width:n.x,height:n.y})},yKo=({groundedLoadPair:e,chipPlacements:t,inputProblem:n})=>{let o=t[e.upperChip.chipId],i=t[e.lowerChip.chipId];if(!o||!i)return;let r=_Oe({chip:e.upperChip,placement:o}),s=_Oe({chip:e.lowerChip,placement:i}),a=ws([{x:r.minX,y:r.minY},{x:r.maxX,y:r.maxY},{x:s.minX,y:s.minY},{x:s.maxX,y:s.maxY}]);if(!a)return;let c=0;for(let[l,d]of Object.entries(t)){if(l===e.upperChip.chipId)continue;if(l===e.lowerChip.chipId)continue;let u=n.chipMap[l];if(!u)continue;let h=_Oe({chip:u,placement:d});if(a.maxX+n.chipGap<=h.minX||a.minX-n.chipGap>=h.maxX)continue;if(h.maxY<=a.maxY)continue;let m=a.maxY+n.chipGap-h.minY;c=Math.max(c,m)}o.y-=c,i.y-=c},xKo=({groundedLoadPair:e,chipPlacements:t,inputProblem:n})=>{let o=t[e.upperChip.chipId],i=t[e.lowerChip.chipId];if(!o||!i)return;let r=XVt({chip:e.upperChip,upperPinId:e.upperOuterPinId,lowerPinId:e.upperInnerPinId,inputProblem:n}),s=XVt({chip:e.lowerChip,upperPinId:e.lowerInnerPinId,lowerPinId:e.groundPinId,inputProblem:n}),a=Ku(e.upperChip.size,r),c=Ku(e.lowerChip.size,s),l=a.y*AOe+n.chipGap+c.y*AOe,d=n.chipPinMap[e.upperInnerPinId],u=n.chipPinMap[e.lowerInnerPinId];if(!d||!u)return;let h=Jr(d.offset,r),A=Jr(u.offset,s),m=ws([o,i]);if(!m)return;let p=ax(m),g={x:p.x-h.x,y:p.y+l*AOe,ccwRotationDegrees:r},_=e.mainPinId;if(_){let f=e.mainChipId;if(!f)return;let y=t[f];if(!y)return;let x=n.chipPinMap[e.upperOuterPinId],C=n.chipPinMap[_];if(!x||!C)return;let I=Jr(x.offset,o.ccwRotationDegrees),b=Jr(x.offset,r);g.x=o.x+I.x-b.x,g.y=o.y+I.y-b.y,g.y+=l1e({upperPin:C,upperPlacement:y,lowerPin:x,lowerPlacement:g})}t[e.upperChip.chipId]=g,t[e.lowerChip.chipId]={x:g.x+h.x-A.x,y:g.y-l,ccwRotationDegrees:s},yKo({groundedLoadPair:e,chipPlacements:t,inputProblem:n})},mUt=2,pT=(e,t)=>{let{chipPlacements:n}=t,o=n[e.upperChip.chipId],i=n[e.lowerChip.chipId],r=j6({placement:o,size:e.upperChip.size}),s=j6({placement:i,size:e.lowerChip.size});return{minX:Math.min(r.minX,s.minX),maxX:Math.max(r.maxX,s.maxX),minY:Math.min(r.minY,s.minY),maxY:Math.max(r.maxY,s.maxY)}},KVt=(e,t)=>{let{chipPlacements:n,inputProblem:o}=t,i=n[e.lowerChip.chipId],r=o.chipPinMap[e.groundPinId],s=Jr(r.offset,i.ccwRotationDegrees);return i.y+s.y},i1e=({groundedLoadPair:e,dx:t,dy:n},o)=>{let{chipPlacements:i}=o;for(let r of[e.upperChip.chipId,e.lowerChip.chipId]){let s=i[r];s.x+=t,s.y+=n}},r1e=(e,t)=>pT(e,t).minX,jVt=(e,t)=>{let n=e.map((o)=>pT(o,t));return{minX:Math.min(...n.map((o)=>o.minX)),maxX:Math.max(...n.map((o)=>o.maxX)),minY:Math.min(...n.map((o)=>o.minY)),maxY:Math.max(...n.map((o)=>o.maxY))}},pUt=(e,t,n)=>e.maxY+n<=t.minY||t.maxY+n<=e.minY,CKo=(e,t,n)=>{let{inputProblem:o}=n,i=pT(e,n),r=pT(t,n),s=i.maxX+o.chipGap<=r.minX||r.maxX+o.chipGap<=i.minX,a=pUt(i,r,o.chipGap);return!s&&!a},IKo=(e,t)=>{let n=new Set(e),o=[];while(n.size>0){let i=n.values().next().value;if(!i)break;n.delete(i);let r=[i];for(let s=0;s<r.length;s++){let a=r[s];for(let c of[...n]){if(!CKo(a,c,t))continue;n.delete(c),r.push(c)}}if(r.length>=mUt)o.push(r)}return o},bKo=(e,t)=>{let{inputProblem:n}=t,o=[...e].sort((a,c)=>r1e(a,t)-r1e(c,t)),i=o.map((a)=>KVt(a,t)),r=Math.min(...i);for(let a of o){let c=KVt(a,t);i1e({groundedLoadPair:a,dx:0,dy:r-c},t)}let s;for(let a of o){let c=pT(a,t);if(s===void 0){s=c.maxX;continue}let l=s+n.partitionGap-c.minX;i1e({groundedLoadPair:a,dx:l,dy:0},t),s=c.maxX+l}},SKo=(e,t)=>{let{inputProblem:n}=t,o=[...e].sort((c,l)=>r1e(c,t)-r1e(l,t)),i=jVt(o,t),r=[];for(let c of o){let l=pT(c,t),d=l.minX;for(let u of r){let h=pT(u,t);if(pUt(h,l,n.chipGap))continue;d=Math.max(d,h.maxX+n.chipGap)}i1e({groundedLoadPair:c,dx:d-l.minX,dy:0},t),r.push(c)}let s=jVt(o,t),a=(i.minX+i.maxX-s.minX-s.maxX)/2;for(let c of o)i1e({groundedLoadPair:c,dx:a,dy:0},t)},PKo=({groundedLoadPairs:e,chipPlacements:t,inputProblem:n})=>{let o={chipPlacements:t,inputProblem:n},i=new Map;for(let s of e){if(!t[s.upperChip.chipId])continue;if(!t[s.lowerChip.chipId])continue;if(!n.chipPinMap[s.groundPinId])continue;let a=i.get(s.groundNetId)??new Map,c=a.get(s.mainChipId)??[];c.push(s),a.set(s.mainChipId,c),i.set(s.groundNetId,a)}for(let s of i.values())for(let a of s.values()){if(a.length<mUt)continue;if(a[0].mainChipId===void 0){bKo(a,o);continue}for(let l of IKo(a,o))SKo(l,o)}let r=MKo({groundedLoadPairs:e,chipPlacements:t,inputProblem:n});yXo({groundedLoadPairs:e.filter((s)=>!r.has(s)),chipPlacements:t,inputProblem:n})},vKo={"x-":{x:-1,y:0},"x+":{x:1,y:0},"y-":{x:0,y:-1},"y+":{x:0,y:1}},EKo=2,MKo=({inputProblem:e,chipPlacements:t,groundedLoadPairs:n})=>{let o=new Set,i=new Set(n);for(let r of i){if(!r.mainChipId||!r.mainPinId)continue;let s=e.chipPinMap[r.mainPinId],a=n.filter((h)=>h.mainChipId===r.mainChipId&&h.mainPinId&&e.chipPinMap[h.mainPinId].side===s.side);if(a.length<EKo)continue;let c=t[r.mainChipId],l=Jr(vKo[s.side],c.ccwRotationDegrees);if(l.x===0)continue;a.sort((h,A)=>{let m=Jr(e.chipPinMap[h.mainPinId].offset,c.ccwRotationDegrees),p=Jr(e.chipPinMap[A.mainPinId].offset,c.ccwRotationDegrees);return m.y-p.y});let d=j6({placement:c,size:e.chipMap[r.mainChipId].size}),u;for(let h of a){i.delete(h);let A=e.chipPinMap[h.mainPinId],m=[h.upperChip.chipId,h.lowerChip.chipId],p=a.filter((I)=>I===h||i.has(I)).flatMap((I)=>[I.upperChip.chipId,I.lowerChip.chipId]),g=t[h.upperChip.chipId],_=l1e({upperPin:A,upperPlacement:c,lowerPin:e.chipPinMap[h.upperOuterPinId],lowerPlacement:g}),{minX:f,maxX:y}=pT(h,{chipPlacements:t,inputProblem:e}),x=Math.max(0,d.maxX+e.chipGap-f);if(l.x<0)x=Math.min(0,d.minX-e.chipGap-y);if(u!==void 0)if(l.x<0)x=Math.min(x,u-e.chipGap-y);else x=Math.max(x,u+e.chipGap-f);let C=[x];for(let[I,b]of Object.entries(t)){if(p.includes(I))continue;let P=j6({placement:b,size:e.chipMap[I].size}),E=P.maxX+e.chipGap-f;if(l.x<0)E=P.minX-e.chipGap-y;if(E*l.x<x*l.x)continue;C.push(E)}C.sort((I,b)=>Math.abs(I)-Math.abs(b));for(let I of C)if(BL({chipIds:m,clearanceGroupChipIds:p,dx:I,dy:_,chipPlacements:t,inputProblem:e})){if(o.add(h),u=y+I,l.x<0)u=f+I;break}}}return o},BKo=class extends zA{constructor(e){super();this.params=e}params;outputLayout=null;groundedLoadPairs=[];_step(){let e={};for(let[t,n]of Object.entries(this.params.inputLayout.chipPlacements))e[t]={...n};this.groundedLoadPairs=gKo(this.params.inputProblem);for(let t of this.groundedLoadPairs)xKo({groundedLoadPair:t,chipPlacements:e,inputProblem:this.params.inputProblem});PKo({groundedLoadPairs:this.groundedLoadPairs,chipPlacements:e,inputProblem:this.params.inputProblem}),this.outputLayout={chipPlacements:e,groupPlacements:{...this.params.inputLayout.groupPlacements}},this.solved=!0}visualize(){let e=this.params.inputLayout;if(this.outputLayout)e=this.outputLayout;return Vh(this.params.inputProblem,e)}getConstructorParams(){return[this.params]}},wKo=(e)=>{let t=Object.values(e.inputProblem.chipMap);return t.length>1&&t.every((n)=>n.pins.length===2&&!n.isCapacitor&&!n.fixedPosition)},TKo=({groundedLoadPairs:e,packedPartitions:t})=>{let o=t.filter(wKo).map((r)=>({chipIds:Object.keys(r.inputProblem.chipMap)})),i=new Set(o.flatMap((r)=>r.chipIds));for(let r of e){if(r.mainChipId)continue;if(r.isStandaloneSignalChain)continue;let s=[r.upperChip.chipId,r.lowerChip.chipId];if(s.some((a)=>i.has(a)))continue;o.push({chipIds:s});for(let a of s)i.add(a)}return o},s1e=({chipId:e},t)=>{let n=t.inputProblem.chipMap[e],o=t.layout.chipPlacements[e];if(!n||!o)return null;let i=Ku(n.size,o.ccwRotationDegrees);return xd({center:o,width:i.x,height:i.y})},gOe=({chipIds:e},t)=>ws(e.flatMap((n)=>{let o=s1e({chipId:n},t);if(!o)return[];return[{x:o.minX,y:o.minY},{x:o.maxX,y:o.maxY}]})),qVt=({chipIds:e,railNetIds:t},n)=>{let o=null;for(let i of e){let r=n.inputProblem.chipMap[i];if(!r)continue;let s=n.layout.chipPlacements[r.chipId];if(!s)continue;for(let a of r.pins){if(![...t].some((h)=>n.inputProblem.netConnMap[`${a}-${h}`]))continue;let l=n.inputProblem.chipPinMap[a];if(!l)continue;let d=Jr(l.offset,s.ccwRotationDegrees),u=s.y+d.y;if(o===null||u>o.y)o={chipId:r.chipId,y:u}}}return o},JVt=({chipIds:e},{inputProblem:t})=>{let n=new Set;for(let o of e){let i=t.chipMap[o];if(!i)continue;for(let r of i.pins)for(let[s,a]of Object.entries(t.netMap)){if(!a.isGround&&!a.isPositiveVoltageSource)continue;if(t.netConnMap[`${r}-${s}`])n.add(s)}}return n},DKo=(e,t)=>e.size>=2&&e.size===t.size&&[...e].every((n)=>t.has(n)),NKo=({chipIds:e,offset:t},{layout:n})=>{let o=new Map;for(let i of e){let r=n.chipPlacements[i];if(!r)continue;o.set(i,r),n.chipPlacements[i]={...r,x:r.x+t.x,y:r.y+t.y}}return o},RKo=({movedChipIds:e},t)=>{let n=new Set(e);return e.some((o)=>{let i=s1e({chipId:o},t);if(!i)return!1;return Object.keys(t.layout.chipPlacements).some((r)=>{if(n.has(r))return!1;let s=s1e({chipId:r},t);if(!s)return!1;return h0(i,s)})})},QKo=(e)=>{let{groundedLoadPairs:t,inputProblem:n,packedPartitions:o}=e,i=structuredClone(e.inputLayout),r={inputProblem:n,layout:i},s=o.filter((l)=>l.inputProblem.partitionType==="decoupling_caps"),a=TKo({groundedLoadPairs:t,packedPartitions:o}),c=new Set;for(let l of s){let d=JVt({chipIds:Object.keys(l.inputProblem.chipMap)},r),u=Object.keys(l.inputProblem.chipMap),h=gOe({chipIds:u},r);if(!h)continue;let A=qVt({chipIds:u,railNetIds:d},r);if(!A)continue;let m=h.maxX;for(let p of a){if(c.has(p))continue;let g=JVt({chipIds:p.chipIds},r);if(!DKo(d,g))continue;let _=p.chipIds;if(!gOe({chipIds:_},r))continue;let y=qVt({chipIds:_,railNetIds:g},r);if(!y)continue;let x=s1e({chipId:y.chipId},r);if(!x)continue;let C=NKo({chipIds:_,offset:{x:m+n.partitionGap-x.minX,y:A.y-y.y}},r);if(RKo({movedChipIds:_},r)){for(let[b,P]of C)i.chipPlacements[b]=P;continue}let I=gOe({chipIds:_},r);if(I)m=I.maxX;c.add(p)}}return i},kKo=class extends zA{constructor(e){super();this.options=e}options;outputLayout=null;_step(){this.outputLayout=QKo(this.options),this.solved=!0}visualize(){return Vh(this.options.inputProblem,this.outputLayout??this.options.inputLayout)}getConstructorParams(){return[this.options]}},AUt=(e,t)=>Object.keys(t.netMap).filter((n)=>t.netConnMap[`${e}-${n}`]),_Ut=(e,t)=>new Set(e.pins.flatMap((n)=>AUt(n,t))),$Vt=({chipId:e,railNetId:t},n)=>{let o=n.chipMap[e]?.pins.find((i)=>AUt(i,n).includes(t));if(!o)return null;return n.chipPinMap[o]??null},a1e=(e,{inputProblem:t,layout:n})=>{let o=t.chipMap[e],i=n.chipPlacements[e];if(!o||!i)return null;return j6({placement:i,size:o.size})},ZVt=(e,t)=>e.reduce((n,o)=>n+t.chipPlacements[o].x,0)/e.length,LKo=({groundNetId:e,railNetId:t},{inputProblem:n,layout:o})=>Object.values(n.chipMap).filter((i)=>{if(!i.isCapacitor||i.fixedPosition||i.pins.length!==2)return!1;if(!o.chipPlacements[i.chipId])return!1;let r=_Ut(i,n);return r.size===2&&r.has(e)&&r.has(t)}).map((i)=>i.chipId),FKo=(e,t)=>{let{inputProblem:n,layout:o}=t;if(e.fixedPosition||e.pins.length!==3)return null;let i=o.chipPlacements[e.chipId];if(!i)return null;let r=[..._Ut(e,n)],s=r.filter((u)=>n.netMap[u]?.isGround),a=r.filter((u)=>n.netMap[u]?.isPositiveVoltageSource);if(s.length!==1||a.length!==2)return null;let c=a.map((u)=>({railNetId:u,capacitorChipIds:LKo({groundNetId:s[0],railNetId:u},t)}));if(c.some((u)=>u.capacitorChipIds.length===0))return null;let l=c.find((u)=>ZVt(u.capacitorChipIds,o)<i.x),d=c.find((u)=>ZVt(u.capacitorChipIds,o)>i.x);if(!l||!d)return null;return l.capacitorChipIds.sort((u,h)=>o.chipPlacements[u].x-o.chipPlacements[h].x),d.capacitorChipIds.sort((u,h)=>o.chipPlacements[u].x-o.chipPlacements[h].x),{regulatorChipId:e.chipId,left:l,right:d}},eUt=({group:e,regulatorChipId:t,startX:n,xDirection:o},i)=>{let{inputProblem:r,layout:s}=i,a=s.chipPlacements[t],c=$Vt({chipId:t,railNetId:e.railNetId},r);if(!a||!c)return!1;let l=[...e.capacitorChipIds];if(o<0)l.reverse();let d=r.decouplingCapsGap??r.chipGap,u=n;for(let h of l){let A=s.chipPlacements[h],m=a1e(h,i),p=$Vt({chipId:h,railNetId:e.railNetId},r);if(!A||!m||!p)return!1;let g=m.maxX-m.minX;s.chipPlacements[h]={...A,x:u+o*g/2,y:A.y+l1e({upperPin:c,upperPlacement:a,lowerPin:p,lowerPlacement:A})},u+=o*(g+d)}return!0},HKo=(e,t)=>{let n=a1e(e.regulatorChipId,t);if(!n)return!1;if(!eUt({group:e.left,regulatorChipId:e.regulatorChipId,startX:n.minX-t.inputProblem.chipGap,xDirection:-1},t))return!1;return eUt({group:e.right,regulatorChipId:e.regulatorChipId,startX:n.maxX+t.inputProblem.chipGap,xDirection:1},t)},OKo=(e,t)=>{let{inputProblem:n,layout:o}=t,i=new Set(e),r=e.map((h)=>a1e(h,t)),s=Math.min(...r.map((h)=>h.minX)),a=Math.min(...r.map((h)=>h.minY)),c=Math.max(...r.map((h)=>h.maxX)),l=Math.max(...r.map((h)=>h.maxY)),d=(s+c)/2,u=0;for(let h of Object.keys(o.chipPlacements)){if(i.has(h))continue;let A=a1e(h,t);if(!A||(A.minX+A.maxX)/2<=d)continue;if(Math.max(A.minY-l,a-A.maxY,0)>=n.partitionGap)continue;u=Math.min(u,A.minX-n.partitionGap-c)}return u},zKo=(e,t)=>{let n=structuredClone(t),o={inputProblem:e,layout:n},i=Object.values(e.chipMap).map((c)=>FKo(c,o)).find((c)=>c!==null);if(!i)return n;let r=[...i.left.capacitorChipIds,i.regulatorChipId,...i.right.capacitorChipIds];if(!HKo(i,o))return t;let a=OKo(r,o);if(!BL({chipIds:r,clearanceGroupChipIds:r,dx:a,dy:0,chipPlacements:n.chipPlacements,inputProblem:e,minimumOutsideGap:e.partitionGap}))return t;return n},GKo=class extends zA{constructor(e){super();this.params=e}params;outputLayout=null;_step(){this.outputLayout=zKo(this.params.inputProblem,this.params.inputLayout),this.solved=!0}visualize(){let e=this.params.inputLayout;if(this.outputLayout)e=this.outputLayout;return Vh(this.params.inputProblem,e)}getConstructorParams(){return[this.params]}};function VI(e,t,n,o={}){return{solverName:e,solverClass:t,getConstructorParams:n,onSolved:o.onSolved}}var u1e=class extends zA{getSolverName(){return"LayoutPipelineSolver"}identifyCrystalCircuitsSolver;identifyDecouplingCapsSolver;chipPartitionsSolver;packInnerPartitionsSolver;partitionPackingSolver;groundedLoadPairSolver;alignPowerGroundRowsSolver;alignTestPointsSolver;placeNetOnlyDecouplingRowsSolver;placeRailConnectedLoadsSolver;alignChipConnectedRailLoadsSolver;alignRegulatorCapacitorRowSolver;startTimeOfPhase;endTimeOfPhase;timeSpentOnPhase;firstIterationOfPhase;pinIdToStronglyConnectedPins;inputProblem;chipPartitions;packedPartitions;pipelineDef=[VI("identifyCrystalCircuitsSolver",WWo,()=>[this.inputProblem]),VI("identifyDecouplingCapsSolver",UWo,()=>[this.inputProblem],{onSolved:(e)=>{}}),VI("chipPartitionsSolver",OWo,()=>[{inputProblem:this.inputProblem,decouplingCapGroups:this.identifyDecouplingCapsSolver?.outputDecouplingCapGroups,crystalCircuitGroups:this.identifyCrystalCircuitsSolver?.outputCrystalCircuitGroups}],{onSolved:(e)=>{this.chipPartitions=this.chipPartitionsSolver.partitions}}),VI("packInnerPartitionsSolver",jXo,()=>[{partitions:this.chipPartitions,pinIdToStronglyConnectedPins:this.pinIdToStronglyConnectedPins}],{onSolved:(e)=>{this.packedPartitions=this.packInnerPartitionsSolver.packedPartitions}}),VI("partitionPackingSolver",ZXo,()=>[{packedPartitions:this.packedPartitions||[],inputProblem:this.inputProblem}],{onSolved:(e)=>{}}),VI("alignPowerGroundRowsSolver",KWo,()=>[{inputProblem:this.inputProblem,inputLayout:this.partitionPackingSolver.finalLayout}]),VI("placeNetOnlyDecouplingRowsSolver",sKo,()=>[{inputProblem:this.inputProblem,packedPartitions:this.packedPartitions,inputLayout:this.alignPowerGroundRowsSolver.outputLayout}]),VI("groundedLoadPairSolver",BKo,()=>[{inputProblem:this.inputProblem,inputLayout:this.placeNetOnlyDecouplingRowsSolver.outputLayout}]),VI("placeRailConnectedLoadsSolver",kKo,()=>[{inputProblem:this.inputProblem,groundedLoadPairs:this.groundedLoadPairSolver.groundedLoadPairs,packedPartitions:this.packedPartitions,inputLayout:this.groundedLoadPairSolver.outputLayout}]),VI("alignChipConnectedRailLoadsSolver",hKo,()=>[{inputProblem:this.inputProblem,inputLayout:this.placeRailConnectedLoadsSolver.outputLayout}]),VI("alignRegulatorCapacitorRowSolver",GKo,()=>[{inputProblem:this.inputProblem,inputLayout:this.alignChipConnectedRailLoadsSolver.outputLayout??this.placeRailConnectedLoadsSolver.outputLayout}]),VI("alignTestPointsSolver",mXo,()=>[{inputProblem:this.inputProblem,inputLayout:this.alignRegulatorCapacitorRowSolver.outputLayout??this.alignChipConnectedRailLoadsSolver.outputLayout??this.placeRailConnectedLoadsSolver.outputLayout??this.groundedLoadPairSolver.outputLayout??this.placeNetOnlyDecouplingRowsSolver.outputLayout??this.alignPowerGroundRowsSolver.outputLayout??this.partitionPackingSolver.finalLayout}])];constructor(e){super();this.inputProblem=e,this.MAX_ITERATIONS=1e6,this.startTimeOfPhase={},this.endTimeOfPhase={},this.timeSpentOnPhase={},this.firstIterationOfPhase={},this.pinIdToStronglyConnectedPins=YU(e)}currentPipelineStepIndex=0;_step(){let e=this.pipelineDef[this.currentPipelineStepIndex];if(!e){this.solved=!0;return}if(this.activeSubSolver){if(this.activeSubSolver.step(),this.activeSubSolver.solved)this.endTimeOfPhase[e.solverName]=performance.now(),this.timeSpentOnPhase[e.solverName]=this.endTimeOfPhase[e.solverName]-this.startTimeOfPhase[e.solverName],e.onSolved?.(this),this.activeSubSolver=null,this.currentPipelineStepIndex++;else if(this.activeSubSolver.failed)this.error=this.activeSubSolver?.error,this.failed=!0,this.activeSubSolver=null;return}let t=e.getConstructorParams(this);this.activeSubSolver=new e.solverClass(...t),this[e.solverName]=this.activeSubSolver,this.timeSpentOnPhase[e.solverName]=0,this.startTimeOfPhase[e.solverName]=performance.now(),this.firstIterationOfPhase[e.solverName]=this.iterations}solveUntilPhase(e){while(this.getCurrentPhase()!==e)this.step()}getCurrentPhase(){return this.pipelineDef[this.currentPipelineStepIndex]?.solverName??"none"}visualize(){if(!this.solved&&this.activeSubSolver)return this.activeSubSolver.visualize();if(this.solved&&this.alignTestPointsSolver?.solved)return this.alignTestPointsSolver.visualize();if(this.solved&&this.placeNetOnlyDecouplingRowsSolver?.solved)return this.placeNetOnlyDecouplingRowsSolver.visualize();if(this.solved&&this.alignPowerGroundRowsSolver?.solved)return this.alignPowerGroundRowsSolver.visualize();if(this.solved&&this.groundedLoadPairSolver?.solved)return this.groundedLoadPairSolver.visualize();if(this.solved&&this.partitionPackingSolver?.solved)return this.partitionPackingSolver.visualize();let e=this.identifyCrystalCircuitsSolver?.visualize(),t=this.identifyDecouplingCapsSolver?.visualize(),n=this.chipPartitionsSolver?.visualize(),o=this.packInnerPartitionsSolver?.visualize(),i=this.partitionPackingSolver?.visualize(),r=this.groundedLoadPairSolver?.visualize(),s=this.alignPowerGroundRowsSolver?.visualize(),a=this.alignTestPointsSolver?.visualize(),c=this.placeNetOnlyDecouplingRowsSolver?.visualize(),l=K6(this.inputProblem),u=[Vh(this.inputProblem,l),e,t,n,o,i,r,s,c,a].filter(Boolean).map((h,A)=>{for(let m of h.rects??[])m.step=A;for(let m of h.points??[])m.step=A;for(let m of h.circles??[])m.step=A;for(let m of h.texts??[])m.step=A;for(let m of h.lines??[])m.step=A;return h});if(u.length===1)return u[0];return{points:u.flatMap((h)=>h.points||[]),rects:u.flatMap((h)=>h.rects||[]),lines:u.flatMap((h)=>h.lines||[]),circles:u.flatMap((h)=>h.circles||[]),texts:u.flatMap((h)=>h.texts||[])}}preview(){if(this.activeSubSolver)return this.activeSubSolver.preview();if(this.alignTestPointsSolver?.solved)return this.alignTestPointsSolver.visualize();if(this.placeNetOnlyDecouplingRowsSolver?.solved)return this.placeNetOnlyDecouplingRowsSolver.visualize();if(this.alignPowerGroundRowsSolver?.solved)return this.alignPowerGroundRowsSolver.visualize();if(this.partitionPackingSolver?.solved)return this.partitionPackingSolver.visualize();if(this.packInnerPartitionsSolver?.solved)return this.packInnerPartitionsSolver.visualize();if(this.chipPartitionsSolver?.solved)return this.chipPartitionsSolver.visualize();if(this.identifyDecouplingCapsSolver?.solved)return this.identifyDecouplingCapsSolver.visualize();if(this.identifyCrystalCircuitsSolver?.solved)return this.identifyCrystalCircuitsSolver.visualize();return super.preview()}checkForOverlaps(e){let t=[],n=Object.keys(e.chipPlacements);for(let o=0;o<n.length;o++)for(let i=o+1;i<n.length;i++){let r=n[o],s=n[i],a=e.chipPlacements[r],c=e.chipPlacements[s],l=this.inputProblem.chipMap[r],d=this.inputProblem.chipMap[s];if(!l||!d)continue;let u=this.getRotatedBounds(a,l.size),h=this.getRotatedBounds(c,d.size),A=this.calculateOverlapArea(u,h);if(A>0)t.push({chip1:r,chip2:s,overlapArea:A})}return t}getRotatedBounds(e,t){let n=t.x/2,o=t.y/2,i=e.ccwRotationDegrees*Math.PI/180,r=Math.abs(Math.cos(i)),s=Math.abs(Math.sin(i)),a=n*r+o*s,c=n*s+o*r;return{minX:e.x-a,maxX:e.x+a,minY:e.y-c,maxY:e.y+c}}calculateOverlapArea(e,t){if(e.maxX<=t.minX||e.minX>=t.maxX||e.maxY<=t.minY||e.minY>=t.maxY)return 0;let n=Math.min(e.maxX,t.maxX)-Math.max(e.minX,t.minX),o=Math.min(e.maxY,t.maxY)-Math.max(e.minY,t.minY);return n*o}getOutputLayout(){if(!this.solved)throw Error("Pipeline not solved yet. Call solve() or step() until solved.");let e;if(this.alignTestPointsSolver?.solved&&this.alignTestPointsSolver.outputLayout)e=this.alignTestPointsSolver.outputLayout;else if(this.placeNetOnlyDecouplingRowsSolver?.solved&&this.placeNetOnlyDecouplingRowsSolver.outputLayout)e=this.placeNetOnlyDecouplingRowsSolver.outputLayout;else if(this.alignPowerGroundRowsSolver?.solved&&this.alignPowerGroundRowsSolver.outputLayout)e=this.alignPowerGroundRowsSolver.outputLayout;else if(this.partitionPackingSolver?.solved&&this.partitionPackingSolver.finalLayout)e=this.partitionPackingSolver.finalLayout;else throw Error("No layout available. Pipeline may have failed or not progressed far enough.");let t=this.checkForOverlaps(e);if(t.length>0){let n=t.map((o)=>`${o.chip1} overlaps ${o.chip2} (area: ${o.overlapArea.toFixed(4)})`).join(", ");console.warn(`Warning: ${t.length} chip overlaps detected in final layout: ${n}`)}return e}};Yo();Yo();Yo();pn();Yo();Yo();qa();u0();pn();Yo();Yo();var fUt={flexGrow:0,flexShrink:1,flexBasis:0,alignSelf:"auto",width:void 0,height:void 0},yUt=class{id;metadata;size={width:0,height:0};position={x:0,y:0};style;constructor(e={}){this.style={...fUt,...e},this.id=e.id,this.metadata=e.metadata}},YKo=class extends yUt{build(){}},gUt=class e extends yUt{children=[];direction="row";columnGap=0;rowGap=0;justifyContent="flex-start";alignItems="stretch";constructor(t,n,o={}){super({});this.size.width=t,this.size.height=n,this.id=o.id,Object.assign(this,o)}addChild(t,n){if(t instanceof e){let i=t;if(n)i.style={...fUt,...n};return this.children.push(i),i}let o=new YKo(t);return this.children.push(o),o}build(){let t=this.direction.startsWith("row"),n=t?"width":"height",o=t?"height":"width",i=t?this.columnGap:this.rowGap,r=t?this.rowGap:this.columnGap,s=i*Math.max(0,this.children.length-1),a=this.size[n],c=this.size[o],l=0,d=0,u=0;for(let C of this.children)l+=C.style.flexBasis,d+=C.style.flexGrow,u+=C.style.flexShrink;let h=a-l-s;for(let C of this.children){let I=C.style.flexBasis;if(h>0&&d>0)I+=h*C.style.flexGrow/d;else if(h<0&&u>0){if(I+=h*C.style.flexShrink/u,I<0)I=0}C.size[n]=I;let b=C.style.alignSelf!=="auto"?C.style.alignSelf:this.alignItems,P=t?C.style.height:C.style.width;if(P!==void 0)C.size[o]=P;else if(b==="stretch")C.size[o]=c}let A=this.children.reduce((C,I)=>C+I.size[n],0)+s,m=a-A,p=0,g=i,_=this.children.length;switch(this.justifyContent){case"flex-start":break;case"flex-end":p=m;break;case"center":p=m/2;break;case"space-between":g=_>1?i+m/(_-1):0;break;case"space-around":g=i+m/_,p=g/2;break;case"space-evenly":g=i+m/(_+1),p=g;break}let f=this.direction.endsWith("reverse")?[...this.children].reverse():this.children,y=p;for(let C of f){if(t)C.position.x=this.direction==="row"?y:a-y-C.size.width,C.position.y=x(C,o,c,this.alignItems);else C.position.y=this.direction==="column"?y:a-y-C.size.height,C.position.x=x(C,o,c,this.alignItems);y+=C.size[n]+g}for(let C of this.children)if(C instanceof e)C.build();function x(C,I,b,P){switch(C.style.alignSelf!=="auto"?C.style.alignSelf:P){case"flex-start":return 0;case"flex-end":return b-C.size[I];case"center":return(b-C.size[I])/2;case"stretch":default:return 0}}}},h1e=class extends gUt{constructor(e,t,n={}){super(e,t,n)}getLayout(){this.build();let e={};return this._collectLayout(this,e),e}_collectLayout(e,t,n={counter:0}){for(let o of e.children){let i=o.id??`_$$${n.counter++}`;if(t[i]={position:o.position,size:o.size},o instanceof gUt)this._collectLayout(o,t,n)}}};Gt();Yo();Gt();var xUt=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20].map((e)=>`hsl(${e*360/21}deg, 100%, 50%)`),VKo=(e)=>{let t=0;for(let n=0;n<e.length;n++)t=(t<<5)-t+e.charCodeAt(n);return t},SUt=(e)=>xUt[Math.abs(VKo(e))%xUt.length],UKo=(e)=>{let t=(m)=>!m?void 0:typeof m==="string"?m:m.join(" "),n=["display:grid","background-color:gray"],{gridTemplateRows:o,gridTemplateColumns:i,gap:r,justifyItems:s,alignItems:a,containerWidth:c,containerHeight:l}=e.opts,d=t(o);if(d)n.push(`grid-template-rows:${d}`);let u=t(i);if(u)n.push(`grid-template-columns:${u}`);if(r!==void 0)if(typeof r==="number")n.push(`gap:${r}px`);else{let[m,p]=r;n.push(`row-gap:${m}px`,`column-gap:${p}px`)}if(s)n.push(`justify-items:${s}`);if(a)n.push(`align-items:${a}`);if(c!=null)n.push(`width:${c}px`);if(l!=null)n.push(`height:${l}px`);let h=n.join(";"),A=e.opts.children.map((m)=>{let p=["display:flex",`background-color:${SUt(m.key)}`];if(m.area)p.push(`grid-area:${m.area}`);else{if(typeof m.row==="string"&&m.row.includes("/"))p.push(`grid-row:${m.row}`);else{let y=m.rowStart??m.row,{rowEnd:x,rowSpan:C}=m;if(y!==void 0||x!==void 0)if(y!==void 0&&x!==void 0)p.push(`grid-row:${y} / ${x}`);else if(y!==void 0)C!==void 0?p.push(`grid-row:${y} / span ${C}`):p.push(`grid-row-start:${y}`);else p.push(`grid-row-end:${x}`);else if(C!==void 0)p.push(`grid-row:auto / span ${C}`)}if(typeof m.column==="string"&&m.column.includes("/"))p.push(`grid-column:${m.column}`);else{let y=m.columnStart??m.column,{columnEnd:x,columnSpan:C}=m;if(y!==void 0||x!==void 0)if(y!==void 0&&x!==void 0)p.push(`grid-column:${y} / ${x}`);else if(y!==void 0)C!==void 0?p.push(`grid-column:${y} / span ${C}`):p.push(`grid-column-start:${y}`);else p.push(`grid-column-end:${x}`);else if(C!==void 0)p.push(`grid-column:auto / span ${C}`)}}let g=p.join(";"),_=["font-size: 7px"];if(m.contentWidth!==void 0){let y=typeof m.contentWidth==="string"?m.contentWidth:`${m.contentWidth}px`;_.push(`width:${y}`)}else _.push(`width:${m.key.length*5}px`);if(m.contentHeight!==void 0){let y=typeof m.contentHeight==="string"?m.contentHeight:`${m.contentHeight}px`;_.push(`height:${y}`)}let f=_.join(";");return` <div id="${m.key}" style="${g}"><div style="${f}">${m.key}</div></div>`});return`<div style="${h}">
${A.join(`
`)}
</div>`},WKo=(e)=>{let t=e.layout(),n={title:"CssGrid",coordinateSystem:"screen",lines:[],circles:[],points:[],rects:[],texts:[]},{cells:o}=t;for(let i of o){let{x:r,y:s,width:a,height:c,key:l}=i;n.rects.push({center:{x:r+a/2,y:s+c/2},width:a,height:c,fill:SUt(l),label:l})}return n};function m1e(e){return e.replace(/repeat\((\d+),\s*([^)]+)\)/g,(t,n,o)=>Array(Number(n)).fill(o.trim()).join(" "))}function p1e(e){return e.trim().split(/\s+/).filter(Boolean)}function CUt(e){if(!e)return 0;return p1e(m1e(e)).length}function IUt(e,t){if(e==="auto")return{fr:1};if(e.endsWith("%")){let o=parseFloat(e);return t!=null?t*o/100:0}if(e.endsWith("px"))return parseFloat(e);if(e.endsWith("em"))return parseFloat(e)*16;if(e.endsWith("fr"))return{fr:parseFloat(e)};let n=parseFloat(e);if(!Number.isNaN(n))return n;return 0}function bUt(e,t){return e>0?e:t+2+e}var XKo=(e)=>{let t=e.opts,n=t.children,o,i;if("gridTemplate"in t&&typeof t.gridTemplate==="string"){let[I,b]=t.gridTemplate.split("/");o=I?.trim(),i=b?.trim()}else o=typeof t.gridTemplateRows==="string"?t.gridTemplateRows:void 0,i=typeof t.gridTemplateColumns==="string"?t.gridTemplateColumns:void 0;let r=CUt(i),s=CUt(o);function a(I,b,P,E){if(!I)return 0;let B=m1e(I),w=p1e(B),T=w.length,Q=0,N=!1;for(let H=0;H<w.length;H++){let z=w[H];if(z.endsWith("px"))Q+=parseFloat(z);else if(z.endsWith("em"))Q+=parseFloat(z)*16;else if(z.endsWith("fr")||z==="auto"){N=!0;let Y=0;for(let U of b){let X=P?U.columnStart||U.column:U.rowStart||U.row,V=P?U.columnSpan||1:U.rowSpan||1,W=P?U.contentWidth:U.contentHeight,j=(typeof X==="number"?X:parseInt(X||"1"))-1,q=typeof V==="number"?V:parseInt(V.toString());if(j<=H&&H<j+q){if(W){let ne=typeof W==="string"&&W.endsWith("px")?parseFloat(W):typeof W==="number"?W:0;Y=Math.max(Y,ne/q)}}}Q+=Y}}let F=E*(T-1);return Q+F}function c(I,b,P,E=!0,B=1){if(!I)return[];if(b==null){let V=m1e(I),W=p1e(V),j=W.length,q=(oe)=>{if(oe===void 0)return 0;if(typeof oe==="number")return oe;if(oe.endsWith("px"))return parseFloat(oe);return parseFloat(oe)},ne=Array(j).fill(0),ce=0;for(let oe of n){let ie=E?typeof oe.columnSpan==="number"?oe.columnSpan:oe.columnSpan?parseInt(oe.columnSpan.toString()):1:typeof oe.rowSpan==="number"?oe.rowSpan:oe.rowSpan?parseInt(oe.rowSpan.toString()):1,J=E?oe.contentWidth:oe.contentHeight,ee=q(J)/ie,se;if(E){if(oe.columnStart!==void 0||oe.column!==void 0)se=parseInt(oe.columnStart??oe.column)-1}else if(oe.rowStart!==void 0||oe.row!==void 0)se=parseInt(oe.rowStart??oe.row)-1;if(se===void 0||Number.isNaN(se)){if(E)se=ce%j;else se=Math.floor(ce/B);ce+=ie}for(let le=0;le<ie&&se+le<j;le++)ne[se+le]=Math.max(ne[se+le],ee)}return W.forEach((oe,ie)=>{let J=IUt(oe,void 0);if(typeof J==="number")ne[ie]=J}),ne}let w=m1e(I),T=p1e(w),Q=T.length,N=b;if(N==null)N=a(I,n,E,P);let F=N-P*(Q-1),H=0,z=0,Y=[],U=[];T.forEach((V,W)=>{let j=IUt(V,F);if(typeof j==="number")U.push(j),H+=j;else if(j&&typeof j==="object"&&"fr"in j)U.push(j),z+=j.fr,Y.push({idx:W,fr:j.fr});else U.push(0),H+=0});let X=Math.max(F-H,0);return U.map((V)=>typeof V==="number"?V:z>0?X/z*V.fr:0)}let l=typeof t.gap==="number"?t.gap:Array.isArray(t.gap)?t.gap[0]:0,d=typeof t.gap==="number"?t.gap:Array.isArray(t.gap)?t.gap[1]:0,u=c(o,t.containerHeight,l,!1,r||1),h=c(i,t.containerWidth,d,!0,s||1),A=u.length,m=h.length;if(m===0&&n.length>0)m=1;let p=[],g=0;for(let I of n){let b=I.rowStart!==void 0?I.rowStart:I.row,P=I.columnStart!==void 0?I.columnStart:I.column,E=I.rowSpan!==void 0?typeof I.rowSpan==="string"?parseInt(I.rowSpan):I.rowSpan:1,B=I.columnSpan!==void 0?typeof I.columnSpan==="string"?parseInt(I.columnSpan):I.columnSpan:1;if(I.rowEnd!==void 0){let Q=typeof I.rowEnd==="string"?parseInt(I.rowEnd):I.rowEnd;if(b!==void 0)E=Q-(typeof b==="string"?parseInt(b):b);else b=Q-E}if(I.columnEnd!==void 0){let Q=typeof I.columnEnd==="string"?parseInt(I.columnEnd):I.columnEnd;if(P!==void 0)B=Q-(typeof P==="string"?parseInt(P):P);else P=Q-B}if(typeof b==="string")b=parseInt(b);if(typeof P==="string")P=parseInt(P);if(typeof b==="number"&&b<0)b=bUt(b,A);if(typeof P==="number"&&P<0)P=bUt(P,m);if(b===void 0&&P!==void 0)b=1;else if(P===void 0&&b!==void 0)P=1;else if(b===void 0&&P===void 0){let Q=g;b=Math.floor(Q/m)+1,P=Q%m+1}let w=b-1,T=P-1;E=Math.max(1,E),B=Math.max(1,B),p.push({key:I.key,row:w,column:T,rowSpan:E,columnSpan:B,x:0,y:0,width:0,height:0}),g+=B}let _=u.length,f=h.length;for(let I of p){if(I.row+I.rowSpan>_)_=I.row+I.rowSpan;if(I.column+I.columnSpan>f)f=I.column+I.columnSpan}if(u.length===0&&_>0&&t.containerHeight){let I=_,P=(t.containerHeight-l*(I-1))/I;for(let E=0;E<I;E++)u.push(P)}else while(u.length<_)u.push(0);if(h.length===0&&f>0&&t.containerWidth){let I=f,P=(t.containerWidth-d*(I-1))/I;for(let E=0;E<I;E++)h.push(P)}else if(h.length===0&&n.length>0&&t.containerWidth)h.push(t.containerWidth);else while(h.length<f)h.push(0);let y=(I,b,P)=>{let E=0;for(let B=0;B<I;B++)E+=b[B]||0,E+=P;return E},x=(I,b,P,E)=>{let B=0;for(let w=I;w<I+b;w++)if(B+=P[w]||0,w>I)B+=E;return B},C={};for(let I of p){let b=n.find((U)=>U.key===I.key),P=y(I.column,h,d),E=y(I.row,u,l),B=x(I.column,I.columnSpan,h,d),w=x(I.row,I.rowSpan,u,l),T=(U)=>{if(U===void 0)return 0;if(typeof U==="string"){if(U.endsWith("px"))return parseFloat(U);if(U.endsWith("%"))return 0;return parseFloat(U)}return U},Q=T(b?.contentWidth),N=T(b?.contentHeight),F=B,H=w,z=P,Y=E;if(Q>0)switch(F=Q,t.justifyItems||"stretch"){case"start":z=P;break;case"end":z=P+B-F;break;case"center":z=P+(B-F)/2;break;case"stretch":F=B,z=P;break}if(N>0)switch(H=N,t.alignItems||"stretch"){case"start":Y=E;break;case"end":Y=E+w-H;break;case"center":Y=E+(w-H)/2;break;case"stretch":H=w,Y=E;break}I.x=z,I.y=Y,I.width=F,I.height=H,C[I.key]={x:z,y:Y,width:F,height:H}}return{cells:p,rowSizes:u,columnSizes:h,rowGap:l,columnGap:d,itemCoordinates:C}},PUt=class{opts;constructor(e){this.opts=e}layout(){return XKo(this)}convertToHtml(){return UKo(this)}visualize(){return WKo(this)}};Gt();var X0n=Rt(l0(),1);Yo();pn();Yo();Gt();Gt();Yo();Yo();Yo();var{defineProperty:KKo,getOwnPropertySymbols:vUt}=Object,jKo=Object.prototype.hasOwnProperty,qKo=Object.prototype.propertyIsEnumerable,EUt=(e,t,n)=>(t in e)?KKo(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,MUt=(e,t)=>{for(var n in t||(t={}))if(jKo.call(t,n))EUt(e,n,t[n]);if(vUt){for(var n of vUt(t))if(qKo.call(t,n))EUt(e,n,t[n])}return e},JKo=(e)=>{switch(e){case"left":return{x:-1,y:0};case"right":return{x:1,y:0};case"top":return{x:0,y:1};case"bottom":return{x:0,y:-1}}},$Ko=(e)=>{var t,n;let o=ts(e),i=o.schematic_component.list(),r=o.schematic_net_label.list(),s=o.schematic_port.list(),a={};for(let c of i){let l=o.source_component.get(c.source_component_id);a[c.schematic_component_id]=l==null?void 0:l.name}for(let c of r){let l=o.source_net.get(c.source_net_id);if(!(l==null?void 0:l.name))continue;let d=0;while(Object.values(a).includes(`NL_${l.name}${d}`))d++;a[c.schematic_net_label_id]=`NL_${l.name}${d}`}for(let c of s){let l=o.source_port.get(c.source_port_id);if(!l)continue;let d=o.source_component.get(l.source_component_id);if(!(d==null?void 0:d.name))continue;let u=`${d.name}_${(n=(t=l==null?void 0:l.name)!=null?t:l==null?void 0:l.pin_number)!=null?n:""}`;a[c.schematic_port_id]=u}return a},ZKo=(e)=>{var t;let n=ts(e),o=new Set(n.schematic_net_label.list().map((r)=>{var s,a,c,l;return`${(a=(s=r.anchor_position)==null?void 0:s.x)!=null?a:r.center.x},${(l=(c=r.anchor_position)==null?void 0:c.y)!=null?l:r.center.y}`})),i=[];for(let r of n.schematic_port.list()){let s=`${r.center.x},${r.center.y}`;if(o.has(s))continue;let a=n.source_port.get(r.source_port_id);if(!a)continue;let c=n.source_net.getWhere({subcircuit_connectivity_map_key:a.subcircuit_connectivity_map_key});if(!c)continue;let l=n.source_trace.list().find((A)=>{var m;return(m=A.connected_source_port_ids)==null?void 0:m.includes(r.source_port_id)}),d=n.schematic_trace.getWhere({source_trace_id:l==null?void 0:l.source_trace_id}),h={type:"schematic_net_label",schematic_net_label_id:`netlabel_for_${r.schematic_port_id}`,schematic_port_id:r.schematic_port_id,text:c.name,source_net_id:c.source_net_id,source_trace_id:l==null?void 0:l.source_trace_id,schematic_trace_id:d==null?void 0:d.schematic_trace_id,anchor_position:MUt({},r.center),center:MUt({},r.center),anchor_side:Nct((t=r.facing_direction)!=null?t:"right")};i.push(h)}return i},BUt=(e,t={})=>{let n={boxes:[],pins:[]},o=ts(e),i=o.schematic_component.list(),r=o.schematic_net_label.list();if(t.inferNetLabels)r=r.concat(ZKo(e));let s=t.useReadableIds?$Ko(e):{},a=(l)=>{if(!t.useReadableIds)return l;if(s[l])return s[l];return l},c=0;for(let l of i){let d={boxId:a(l.schematic_component_id),kind:"floating",center:l.center};n.boxes.push(d);let u={pinId:`${a(l.schematic_component_id)}_center`,color:"component_center",networkId:`center_${l.schematic_component_id}`,offset:{x:0,y:0},boxId:a(l.schematic_component_id)};n.pins.push(u);let h=o.schematic_port.list({schematic_component_id:l.schematic_component_id});for(let A of h){let m=o.source_port.get(A.source_port_id),p=m==null?void 0:m.subcircuit_connectivity_map_key,g="normal";if(p){let f=o.source_net.getWhere({subcircuit_connectivity_map_key:m==null?void 0:m.subcircuit_connectivity_map_key});if(f&&(f.is_power||f.name.startsWith("V")))g="vcc";if(f&&(f.is_ground||f.name.startsWith("GND")))g="gnd"}else p=`disconnected-${c++}`,g="not_connected";let _={pinId:a(A.schematic_port_id),color:g,networkId:p,offset:{x:A.center.x-d.center.x,y:A.center.y-d.center.y},boxId:a(l.schematic_component_id)};n.pins.push(_)}}for(let l of r){let d=o.source_net.get(l.source_net_id),u=d==null?void 0:d.subcircuit_connectivity_map_key,h="normal";if(u){if(d&&(d.is_power||d.name.startsWith("V")))h="vcc";if(d&&(d.is_ground||d.name.startsWith("GND")))h="gnd"}else u=`disconnected-${c++}`,h="not_connected";let A=JKo(l.anchor_side),m={x:l.anchor_position.x-A.x*l.text.length*0.18*0.5,y:l.anchor_position.y-A.y*0.18},p={x:0,y:0};if(l.anchor_position)p={x:l.anchor_position.x-m.x,y:l.anchor_position.y-m.y};let g={boxId:a(l.schematic_net_label_id),kind:"fixed",center:m,boxAttributes:{is_net_label:!0,source_net_id:l.source_net_id,source_trace_id:l.source_trace_id}};n.boxes.push(g);let _={pinId:`${a(l.schematic_net_label_id)}_pin`,boxId:a(l.schematic_net_label_id),networkId:u,color:h,offset:p};n.pins.push(_),n.pins.push({pinId:`${a(l.schematic_net_label_id)}_center`,boxId:a(l.schematic_net_label_id),networkId:`${a(l.schematic_net_label_id)}_center`,color:"netlabel_center",offset:{x:0,y:0}})}return n};var FUt=Rt(l0(),1),ejo=(e)=>{if(!e)return{x:0,y:0};if("x"in e&&"y"in e)return e;if("center"in e)return e.center;return{x:(e.minX+e.maxX)/2,y:(e.minY+e.maxY)/2}},f1e=(e,t)=>{let n=e.boxes.find((l)=>l.boxId===t),o=e.pins.filter((l)=>l.boxId===t);if(!n)throw Error(`Box "${t}" not found`);let i=n.center??{x:0,y:0},r=1/0,s=1/0,a=-1/0,c=-1/0;for(let l of o)r=Math.min(r,l.offset.x+i.x),s=Math.min(s,l.offset.y+i.y),a=Math.max(a,l.offset.x+i.x),c=Math.max(c,l.offset.y+i.y);return{minX:r,minY:s,maxX:a,maxY:c}},VU=(e,t,n)=>`hsl(${e*360/t}, 100%, 50%, ${n??1})`;var tjo=(e)=>{let t=new Set;for(let n of e.pins)t.add(n.networkId);return Array.from(t)},wUt={not_connected:"rgba(0, 0, 0, 0.2)",normal:"blue",vcc:"orange",gnd:"purple",component_center:"gray"},njo=["red","green","blue","yellow","purple","orange","brown","gray","black","white"];function ojo(e){let t=0;for(let n=0;n<e.length;n++)t=(t<<5)-t+e.charCodeAt(n);return t}var kUt=(e)=>{if(e.startsWith("rgb")||e.startsWith("hsl")||e.startsWith("#")||njo.includes(e))return e;if(e in wUt)return wUt[e];return VU(ojo(e)%50,50)},_T=(e,t)=>{let n={points:[],lines:[],rects:[],circles:[],texts:[],coordinateSystem:"cartesian",title:"BPC Graph Graphics"},o=new Map,i=new Map;for(let a of e.boxes){let c=f1e(e,a.boxId),l=ejo(c);n.rects.push({label:a.boxId,center:l,width:c.maxX-c.minX+0.1,height:c.maxY-c.minY+0.1,fill:"rgba(0, 0, 0, 0.2)"});let d=e.pins.filter((h)=>h.boxId===a.boxId),u=a.center??{x:0,y:0};for(let h of d){let A={x:h.offset.x+u.x,y:h.offset.y+u.y},m=`${A.x.toFixed(6)},${A.y.toFixed(6)}`;if(!i.has(m))i.set(m,[]);i.get(m).push({box:a,pin:h}),o.set(`${a.boxId}.${h.pinId}`,A)}}for(let[a,c]of i){let l=a.split(",").map(Number),d=l[0],u=l[1];for(let h=0;h<c.length;h++){let A=c[h],{box:m,pin:p}=A,g={x:d,y:u};if(c.length>1){let _=m.center??{x:0,y:0},f=_.x-d,y=_.y-u,x=Math.sqrt(f*f+y*y),C=0,I=0;if(x>0)C=f/x,I=y/x;else{let b=h*2*Math.PI/c.length;C=Math.cos(b),I=Math.sin(b)}g={x:d+0.01*C,y:u+0.01*I}}o.set(`${m.boxId}.${p.pinId}`,g),n.points.push({...g,label:[p.pinId,p.color,p.networkId].join(`
`),color:kUt(p.color)})}}let r=tjo(e);for(let a=0;a<r.length;a++){let c=r[a],l=VU(a,r.length,0.5),u=e.pins.filter((h)=>h.networkId===c).map((h)=>({pin:h,position:o.get(`${h.boxId}.${h.pinId}`)}));for(let h=0;h<u.length;h++){let{position:A}=u[h];for(let m=h+1;m<u.length;m++){let{position:p}=u[m];n.lines.push({points:[A,p],strokeColor:t?.grayNetworks?"rgba(0, 0, 0, 0.05)":l})}}}let s=Kf(n);if(t?.title)n.title=t.title,n.texts.push({text:t.title,x:s.minX,y:s.maxY,fontSize:(s.maxY-s.minY)*0.05,anchorSide:"bottom_left"});if(t?.caption)n.texts.push({text:t.caption,x:s.minX,y:s.minY,fontSize:(s.maxY-s.minY)*0.05,anchorSide:"top_left"});return n},A1e=(e,t,n)=>{let o=e.pins.find((s)=>s.pinId===n&&s.boxId===t);if(!o)throw Error(`Pin "${n}" not found`);let i=e.boxes.find((s)=>s.boxId===o.boxId);if(!i)throw Error(`Box "${o.boxId}" not found`);let r=i.center??{x:0,y:0};return{x:o.offset.x+r.x,y:o.offset.y+r.y}},ijo=(e,t,n)=>{let o=typeof n==="string"?e.pins.find((A)=>A.pinId===n&&A.boxId===t):n;if(!o)throw Error(`Pin not found "${n}"`);if(!(typeof t==="string"?e.boxes.find((A)=>A.boxId===t):t))throw Error(`Box not found for pin "${n}" (looked for "${o.boxId}")`);let r=f1e(e,o.boxId),s=A1e(e,o.boxId,o.pinId),a=r.maxX-r.minX,c=r.maxY-r.minY;if(a===0&&c===0)if(Math.abs(o.offset.x)>Math.abs(o.offset.y))return o.offset.x>0?"x+":"x-";else return o.offset.y>0?"y+":"y-";if(a===0){if(Math.abs(s.y-r.minY)<0.0001)return"y-";if(Math.abs(s.y-r.maxY)<0.0001)return"y+"}if(c===0){if(Math.abs(s.x-r.minX)<0.0001)return"x-";if(Math.abs(s.x-r.maxX)<0.0001)return"x+"}let l=Math.abs(s.x-r.minX)<0.0001,d=Math.abs(s.x-r.maxX)<0.0001,u=Math.abs(s.y-r.minY)<0.0001,h=Math.abs(s.y-r.maxY)<0.0001;if((l||d)&&(u||h))return o.offset.x>0?"x+":"x-";if(l)return"x-";if(d)return"x+";if(u)return"y-";if(h)return"y+";throw Error(`Pin "${o.pinId}" not on the edge of the box "${o.boxId}" so we couldn't determine the direction`)},UU=(e,t,n)=>{try{return ijo(e,t,n)}catch(o){return null}};var rjo=(e)=>{let t=new Map,n=[];e.nodes.forEach((r,s)=>{t.set(r.id,s),n.push(r.id)});let o=e.nodes.length,i=Array.from({length:o},()=>Array.from({length:o},()=>0));for(let[r,s]of e.undirectedEdges){let a=t.get(r),c=t.get(s);if(a!==void 0&&c!==void 0&&a!==c)i[a][c]=1,i[c][a]=1}for(let r=0;r<o;++r)i[r][r]=1;return{matrix:i,mapping:t,indexMapping:n}};var _1e=(e)=>{let t=[],n=[],o=new Map;for(let r of e.boxes){if(r.kind==="fixed")o.set(r.boxId,r.center);else o.set(r.boxId,r.center);t.push({id:r.boxId,boxId:r.boxId,color:"box",x:r.center?.x,y:r.center?.y})}let i={};for(let r of e.pins){let s=`${r.boxId}-${r.pinId}`,a=o.get(r.boxId);t.push({id:s,boxId:r.boxId,pinId:r.pinId,color:r.color,x:a?a.x+r.offset.x:void 0,y:a?a.y+r.offset.y:void 0}),i[r.networkId]??=[],i[r.networkId].push(s)}for(let r of Object.values(i))for(let s=0;s<r.length;s++)for(let a=s+1;a<r.length;a++)n.push([r[s],r[a]]);for(let r of e.boxes)for(let s of e.pins)if(s.boxId===r.boxId)n.push([r.boxId,`${r.boxId}-${s.pinId}`]);return{nodes:t,undirectedEdges:n}},sjo=(e,t,n={})=>{let o=e.length;if(e.some((a)=>a.length!==o))throw Error("adjMatrix must be square");let i=(n.nodeInitialColors??Array.from({length:o},()=>"_")).slice(),r=(a)=>{let c={};for(let l of a)c[l]=(c[l]??0)+1;return c},s=[];s.push(r(i));for(let a=0;a<t;a++){let c=Array(o);for(let l=0;l<o;l++){let d=[];for(let u=0;u<o;u++)if(e[l][u])d.push(i[u]);d.sort(),c[l]=`${i[l]}|${d.join(",")}`}i=c,s.push(r(i))}return s},ajo=(e,t)=>{let n=0,o=Math.min(e.length,t.length);for(let i=0;i<o;i++){let r=e[i],s=t[i],a=new Set([...Object.keys(r),...Object.keys(s)]),c=0,l=0;for(let d of a){let u=r[d]??0,h=s[d]??0;c+=Math.min(u,h),l+=Math.max(u,h)}n+=l===0?0:c/l}return n};var cjo=ajo,g1e=2,y1e=(e,t=g1e)=>{let n=_1e(e),{matrix:o,indexMapping:i}=rjo(n);return sjo(o,t,{nodeInitialColors:i.map((r)=>n.nodes.find((s)=>s.id===r)?.color??"_")})},bOe=(e,t,{wlDegrees:n=g1e}={})=>{let o=y1e(e,n),i=y1e(t,n);return(g1e+1-cjo(o,i))/(g1e+1)},ljo=(e)=>{let t=0;for(let n=0;n<e.length;n++)t=(t<<5)-t+e.charCodeAt(n);return Math.abs(t)},IOe=(e,t={})=>{let n={points:[],lines:[],rects:[],circles:[],texts:[],coordinateSystem:"cartesian",title:"Flat-BPC Graphics"},o=new Map;for(let r of e.nodes){if(r.x===void 0||r.y===void 0)continue;let s={x:r.x,y:r.y};o.set(r.id,s),n.points.push({...s,color:kUt(r.color),label:r.id})}for(let[r,s]of e.undirectedEdges){let a=o.get(r),c=o.get(s);if(a&&c)n.lines.push({points:[a,c],strokeColor:"rgba(0,0,0,0.3)"})}let i=Kf(n);if(t.title)n.texts.push({text:t.title,x:i.minX,y:i.maxY,fontSize:(i.maxY-i.minY)*0.05,anchorSide:"bottom_left"});if(t.caption)n.texts.push({text:t.caption,x:i.minX,y:i.minY,fontSize:(i.maxY-i.minY)*0.05,anchorSide:"top_left"});return n};var djo=(e)=>{let t=new Map;for(let i of e.pins){let r=e.boxes.find((a)=>a.boxId===i.boxId);if(!r||!r.center)throw Error(`Expected fixed graph – box "${i.boxId}" missing or has no center`);let s={x:r.center.x+i.offset.x,y:r.center.y+i.offset.y};if(!t.has(i.networkId))t.set(i.networkId,[]);t.get(i.networkId).push(s)}let n=new Map,o=0;for(let[i,r]of t){if(r.length===0){n.set(i,0);continue}let s=r.reduce((c,l)=>({x:c.x+l.x,y:c.y+l.y}),{x:0,y:0});s.x/=r.length,s.y/=r.length;let a=r.reduce((c,l)=>{let d=l.x-s.x,u=l.y-s.y;return c+Math.sqrt(d*d+u*u)},0);n.set(i,a),o+=a}return{totalNetworkLength:o,networkLengths:n}},ujo=(e,t)=>{let n=e.pins.filter((i)=>i.networkId===t),o=[];for(let i of n){let r=Math.atan2(i.offset.y,i.offset.x);o.push(r)}return o},TUt=(e)=>{let t=new Map,n=Array.from(new Set(e.pins.map((o)=>o.networkId)));for(let o of n){let i=ujo(e,o);t.set(o,i)}return t},hjo=(e,t)=>{let n=2*Math.PI,o=(e%n+n)%n,i=(t%n+n)%n,r=Math.abs(o-i);return Math.min(r,n-r)},mjo=(e,t)=>{if(e.length===0&&t.length===0)return 0;if(e.length===0||t.length===0)return Math.PI;let n=(o,i)=>{let r=0;for(let s of o){let a=1/0;for(let c of i){let l=hjo(s,c);if(l<a)a=l}r+=a}return r/o.length};return(n(e,t)+n(t,e))/2},pjo=(e,t)=>{let n=new Map,o=Array.from(e.entries()),i=Array.from(t.entries()),r=o.length,s=i.length,a=Array.from({length:r},()=>Array(s).fill(0));for(let h=0;h<r;h++){let[,A]=o[h];for(let m=0;m<s;m++){let[,p]=i[m];a[h][m]=mjo(A,p)}}let c=new Set(Array.from({length:r},(h,A)=>A)),l=new Set(Array.from({length:s},(h,A)=>A)),d=0;while(c.size&&l.size){let h=-1,A=-1,m=1/0;for(let _ of c)for(let f of l){let y=a[_][f];if(y<m)m=y,h=_,A=f}let[p]=o[h],[g]=i[A];n.set(p,g),d+=m,c.delete(h),l.delete(A)}let u=Math.PI;return d+=(c.size+l.size)*u,{networkMapping:n,distance:d}},DUt=(e)=>{let t=Math.min(...e.map((r)=>r.offset.x)),n=Math.max(...e.map((r)=>r.offset.x)),o=Math.min(...e.map((r)=>r.offset.y)),i=Math.max(...e.map((r)=>r.offset.y));return{minX:t,maxX:n,minY:o,maxY:i}},Ajo=(e,t)=>{let n=(c)=>{switch(c.side){case"x+":return c.cwDistanceFromCorner;case"y-":return 1+c.cwDistanceFromCorner;case"x-":return 2+c.cwDistanceFromCorner;case"y+":return 3+c.cwDistanceFromCorner}},o=n(e)%4,i=n(t)%4,r=(i-o+4)%4,s=(o-i+4)%4,a=Math.min(r,s);return{cwDistance:r,ccwDistance:s,minDistance:a}},q6=0.000001,NUt=(e,t)=>{let{minX:n,minY:o,maxX:i,maxY:r}=e,s=(l,d)=>Math.abs(l-d)<q6,a,c;if(s(t.x,i)&&t.y>=o-q6&&t.y<=r+q6)a="x+",c=(r-t.y)/(r-o);else if(s(t.y,r)&&t.x<=i+q6&&t.x>=n-q6)a="y+",c=(t.x-n)/(i-n);else if(s(t.x,n)&&t.y<=r+q6&&t.y>=o-q6)a="x-",c=(t.y-o)/(r-o);else if(s(t.y,o)&&t.x>=n-q6&&t.x<=i+q6)a="y-",c=(i-t.x)/(i-n);else return null;return c=Math.min(1,Math.max(0,c)),{side:a,cwDistanceFromCorner:c}},_jo=(e,t)=>{let n=[],o=new Set,i=new Set,r=new Set,s=new Set,a=DUt(e),c=DUt(t);for(let l of e){let d=t.filter((m)=>m.color===l.color).filter((m)=>!s.has(m.pinId));if(d.length===0){o.add(l.pinId);continue}let u=NUt(a,l.offset);if(u===null){o.add(l.pinId);continue}let h=1/0,A=d[0];for(let m of d){let p=NUt(c,m.offset);if(p===null)continue;let{minDistance:g}=Ajo(u,p);if(g<h)h=g,A=m}n.push([l,A]),r.add(l.pinId),s.add(A.pinId)}for(let l of t){if(s.has(l.pinId))continue;i.add(l.pinId)}return{matchedPins:n,unmatchedPin1Ids:o,unmatchedPin2Ids:i}},gjo=class{constructor(e,t){this.floatingGraph=e,this.fixedGraph=t,this.wipGraph={pins:[],boxes:[]},this.fixedToFloatingNetworkMap=this.computeFixedToFloatingNetworkMap(),this.floatingToFixedNetworkMap=new Map(Array.from(this.fixedToFloatingNetworkMap.entries()).map(([n,o])=>[o,n]))}floatingGraph;fixedGraph;wipGraph;iterations=0;solved=!1;acceptedFloatingBoxIds=new Set;rejectedFloatingBoxIds=new Set;acceptedFixedBoxIds=new Set;assignment=new Map;lastAcceptedEvaluation=null;fixedToFloatingNetworkMap;floatingToFixedNetworkMap;lastComputedEvaluations=[];computeFixedToFloatingNetworkMap(){let e=TUt(this.floatingGraph),t=TUt(this.fixedGraph),{networkMapping:n}=pjo(t,e);return n}getNextFloatingBoxId(){let e=this.floatingGraph.boxes.map((o)=>o.boxId).filter((o)=>!this.acceptedFloatingBoxIds.has(o)&&!this.rejectedFloatingBoxIds.has(o));if(!e.length)throw Error("No remaining floating box ids");let t=e[0],n=0;for(let o of e){let i=this.floatingGraph.pins.filter((r)=>r.boxId===o);if(i.length>n)t=o,n=i.length}return t}getRemainingFloatingBoxIds(){return this.floatingGraph.boxes.map((e)=>e.boxId).filter((e)=>!this.acceptedFloatingBoxIds.has(e)&&!this.rejectedFloatingBoxIds.has(e))}getPartialFloatingGraph(e){let t={pins:[],boxes:[]};for(let n of this.floatingGraph.boxes)if(this.acceptedFloatingBoxIds.has(n.boxId)||n.boxId===e)t.boxes.push(n),t.pins.push(...this.floatingGraph.pins.filter((o)=>o.boxId===n.boxId));return t}evaluateFloatingBoxAssignment(e){let t=this.getPartialFloatingGraph(e),n=bOe(t,this.wipGraph),o=null,i=null,r={floatingBoxId:e,originalWipGraph:this.wipGraph,partialFloatingGraph:t,currentWlDist:n,networkLengths:new Map,wlDistances:new Map,wlVecs:new Map,wipGraphsWithAddedFixedBoxId:new Map},s=n,a=n,c=1/0,l=y1e(t);for(let d of this.fixedGraph.boxes.map((u)=>u.boxId)){if(this.acceptedFixedBoxIds.has(d))continue;let u=this.getWipGraphWithAddedFixedBoxIdForFloatingAssignment(d,e),h=bOe(t,u),A=y1e(u),{totalNetworkLength:m}=djo(u);r.wipGraphsWithAddedFixedBoxId.set(d,u),r.wlVecs.set(d,A),r.wlDistances.set(d,h),r.networkLengths.set(d,m);let p=h+m/100;if(p<s)s=p,a=h,c=m,i=u,o=d}return{bestFixedBoxId:o,bestNewWipGraph:i,bestDist:s,bestWlDist:a,bestTotalNetworkLength:c,lastDistanceEvaluation:r,nextFloatingBoxId:e,partialFloatingGraph:t,floatingBoxWlVec:l}}getPinAssignment(){let e={},t={};for(let[n,o]of this.assignment)e[n]={},t[o]=n;for(let n of this.wipGraph.pins){let o=n.boxId,i=t[o],{_floatingPinId:r,_fixedPinId:s}=n;e[i][r]=s}return e}step(){if(this.solved)return;if(this.iterations>1000)throw Error("Too many iterations");if(this.iterations++,this.iterations===1){let o=this.getNextFloatingBoxId(),i=this.evaluateFloatingBoxAssignment(o);this.lastComputedEvaluations=[i],this.acceptEvaluationResult(i);return}let e=this.getRemainingFloatingBoxIds();if(e.length===0){this.solved=!0;return}let t=1/0,n=null;this.lastComputedEvaluations=[];for(let o of e){let i=this.evaluateFloatingBoxAssignment(o);if(this.lastComputedEvaluations.push(i),i.bestDist<t)t=i.bestDist,n=i}if(n)this.acceptEvaluationResult(n)}acceptEvaluationResult(e){let{bestFixedBoxId:t,bestNewWipGraph:n,nextFloatingBoxId:o}=e;if(t===null){this.rejectedFloatingBoxIds.add(o);return}this.acceptedFloatingBoxIds.add(o),this.assignment.set(o,t),this.acceptedFixedBoxIds.add(t),this.wipGraph=n,this.lastAcceptedEvaluation=e.lastDistanceEvaluation}getWipGraphWithAddedFixedBoxIdForFloatingAssignment(e,t){let n=structuredClone(this.wipGraph),o=this.fixedGraph.boxes.find((a)=>a.boxId===e);n.boxes.push(o);let i=this.floatingGraph.pins.filter((a)=>a.boxId===t),r=this.fixedGraph.pins.filter((a)=>a.boxId===e),{matchedPins:s}=_jo(i,r);return n.pins.push(...s.map((a)=>{let[c,l]=a;return{...l,networkId:this.floatingToFixedNetworkMap.get(c.networkId),_floatingPinId:c.pinId,_fixedPinId:l.pinId}})),n}visualize(){let e=_T(this.floatingGraph,{title:"Floating"}),t=_T(this.wipGraph,{title:"WIP"}),n=_T(this.fixedGraph,{title:"Fixed"}),o=_T(this.getPartialFloatingGraph(),{title:"Partial Floating"}),i=new Map,r=new Map;for(let[p,g]of this.assignment){let _=VU(ljo(p)*47%100,100,0.5);i.set(p,_),r.set(g,p)}function s(p,g,_){let f=i.get(g);p.fill=f,p.label=`${g}→${_}`}for(let p of e.rects??[]){let g=p.label;if(!g)continue;let _=this.assignment.get(g);if(_)s(p,g,_)}for(let p of o.rects??[]){let g=p.label;if(!g)continue;let _=this.assignment.get(g);if(_)s(p,g,_)}let a=[t,n];for(let p of a)for(let g of p.rects??[]){let _=g.label;if(!_)continue;let f=r.get(_);if(f)s(g,f,_)}let c=_1e(this.floatingGraph),l=_1e(this.wipGraph),d=_1e(this.fixedGraph),u=IOe(c,{title:"Floating Flat"}),h=IOe(l,{title:"WIP Flat"}),A=IOe(d,{title:"Fixed Flat"});return V7([P$([e,u,o]),P$([t,h]),P$([n,A])])}},LUt=(e,t)=>{let n=new gjo(e,t);while(!n.solved&&n.iterations<1000)n.step();let o={};for(let[s,a]of n.assignment.entries())o[s]=a;let i={};for(let[s,a]of n.floatingToFixedNetworkMap.entries())i[s]=a;let r=n.getPinAssignment();return{floatingToFixedBoxAssignment:o,floatingToFixedNetworkAssignment:i,floatingToFixedPinAssignment:r}};var RUt=(e,{renetworkedNetworkIdMap:t}={})=>{if(t??={},e.length===1)return e[0];let n={boxes:[],pins:[]},o=new Map,i=new Map,r=Object.entries(e.flatMap((a)=>Array.from(new Set(a.boxes.map((c)=>c.boxId)))).reduce((a,c)=>(a[c]=(a[c]||0)+1,a),{})).filter(([a,c])=>c===e.length).map(([a])=>a);if(r.length>1)throw Error(`Expected at most one shared box across all partitions, the following box ids are shared across all graphs: ${r.join(", ")}`);let s=r[0];for(let a of e){let c=a.boxes.find((l)=>l.boxId===s)?.center;for(let l of a.boxes){if(o.has(l.boxId))continue;let d=structuredClone(l);if(d.center&&c)d.center={x:d.center.x-c.x,y:d.center.y-c.y};o.set(l.boxId,d)}for(let l of a.pins)if(!i.has(`${l.boxId}-${l.pinId}`))i.set(`${l.boxId}-${l.pinId}`,structuredClone(l))}return n.boxes=Array.from(o.values()),n.pins=Array.from(i.values()),n};var SOe=({graph:e,axis:t,centerBoxId:n})=>{let o=structuredClone(e),i=o.boxes.find((a)=>a.boxId===n);if(!i||!i.center)throw Error(`Center box "${n}" not found or has no center`);let{x:r,y:s}=i.center;for(let a of o.boxes){if(!a.center)continue;if(t==="x")a.center.x=2*r-a.center.x;else a.center.y=2*s-a.center.y}for(let a of o.pins)if(t==="x")a.offset.x=-a.offset.x;else a.offset.y=-a.offset.y;return o},fjo=(e)=>{let t=null,n=-1/0;for(let r of e.boxes){let s=e.pins.filter((a)=>a.boxId===r.boxId).filter((a)=>["x-","x+"].includes(UU(e,r,a)??"none"));if(s.length>n&&s.length>1)t=r,n=s.length}if(!t)return{g:e,reflected:!1,centerBoxId:null};let o=e.pins.filter((r)=>r.boxId===t.boxId).map((r)=>UU(e,t,r)),i={"x+":0,"x-":0,"y+":0,"y-":0};for(let r of o){if(!r)continue;i[r]++}if(i["x+"]>=i["x-"])return{g:e,reflected:!1,centerBoxId:t.boxId};return{g:SOe({graph:e,axis:"x",centerBoxId:t.boxId}),reflected:!0,centerBoxId:t.boxId}},AT=FUt.default("schematic-partition-processor"),yjo=class{constructor(e,t={}){this.initialGraph=e,this.lastGraph=e,this.singletonKeys=t.singletonKeys??[],this.centerPinColors=t.centerPinColors??[];let n=this.initializeWipPartitions();this.wipPartitions=n.wipPartitions,this.splitBoxIds=n.splitBoxIds,this.addedPins=n.addedPins,this.exploredPins=new Set,this.unexploredPins=this.wipPartitions.flatMap((r)=>r.pins.map((s)=>({...s,partitionId:r.partitionId}))),this.boxSingletonKeys=this.initializeBoxSingletonKeys(),this.pinConnectionCount=(()=>{let r={};for(let s of this.initialGraph.pins)r[`${s.boxId}:${s.pinId}`]=this.getNeighbors(s).length;return r})();let o={};for(let r of this.initialGraph.pins)o[r.networkId]=(o[r.networkId]??0)+1;this.networkSize=o;let i={};for(let r of this.initialGraph.pins)i[`${r.boxId}:${r.pinId}`]=o[r.networkId];this.pinNetworkSize=i}initialGraph;lastGraph;lastExploredPin;solved=!1;iteration=0;wipPartitions;unexploredPins=[];boxSingletonKeys;exploredPins;addedPins;allAcceptedPins=new Set;pinConnectionCount;networkSize;pinNetworkSize;splitBoxIds;acceptedBoxPartitionMap=new Map;singletonKeys;centerPinColors;initializeBoxSingletonKeys(){let e={};for(let t of this.initialGraph.boxes){let n=this.initialGraph.pins.filter((r)=>r.boxId===t.boxId),o=n.length,i=n.map((r)=>`${r.color}/${o}`).filter((r)=>this.singletonKeys.includes(r));e[t.boxId]=new Set(i)}return e}initializeWipPartitions(){let e=[],t=new Set,n=new Set,o=0;for(let i of this.initialGraph.boxes){let r=this.initialGraph.pins.filter((a)=>a.boxId===i.boxId).filter((a)=>UU(this.initialGraph,i,a)).filter((a)=>!this.centerPinColors.includes(a.color));if(r.length<4)continue;let s=new Set(r.map((a)=>UU(this.initialGraph,i,a)));if(s.size>1)n.add(i.boxId);for(let a of s){let c={partitionId:`partition${o++}`,filledSingletonSlots:new Set,pins:[]};for(let l of r)if(UU(this.initialGraph,i,l)===a)c.pins.push({boxId:i.boxId,pinId:l.pinId}),t.add(`${i.boxId}:${l.pinId}`);e.push(c)}}if(e.length===0)e.push(this.createWipPartitionFromEntireGraph()),this.solved=!0;return AT(`splitBoxIds = ${Array.from(n).join(", ")}`),AT(`wipPartitions = ${e.map((i)=>i.partitionId).join(", ")}`),{wipPartitions:e,splitBoxIds:n,addedPins:t}}createWipPartitionFromEntireGraph(){return{partitionId:"entire-graph",filledSingletonSlots:new Set,pins:this.initialGraph.pins.map((e)=>({boxId:e.boxId,pinId:e.pinId}))}}step(){if(this.solved)return;if(this.iteration++,AT(`
── Iteration ${this.iteration} ── unexplored=${this.unexploredPins.length} explored=${this.exploredPins.size}`),this.unexploredPins.sort((l,d)=>{let u=`${l.boxId}:${l.pinId}`,h=`${d.boxId}:${d.pinId}`,A=this.pinNetworkSize[u]-this.pinNetworkSize[h];if(A!==0)return A;return this.pinConnectionCount[u]-this.pinConnectionCount[h]}),this.unexploredPins.length===0){this.solved=!0;return}let e=this.unexploredPins.shift(),t=`${e.boxId}:${e.pinId}`;AT(`Exploring pin ${e.boxId}:${e.pinId} for partition "${e.partitionId}"`),this.lastExploredPin={...e,partitionId:e.partitionId};let n=`${e.partitionId}[${t}]`,o=this.initialGraph.pins.find((l)=>l.boxId===e.boxId&&l.pinId===e.pinId);if(!o)return;if(this.exploredPins.has(n))return;let i=this.wipPartitions.find((l)=>l.partitionId===e.partitionId);if(!i)return;let r=this.acceptedBoxPartitionMap.get(e.boxId);if(r&&r!==e.partitionId&&!this.splitBoxIds.has(e.boxId)){AT(` ↳ rejected (box ${e.boxId} for partition ${e.partitionId} already in partition ${this.acceptedBoxPartitionMap.get(e.boxId)})`),this.exploredPins.add(n);return}let s=this.boxSingletonKeys[e.boxId];if(Array.from(s).some((l)=>i.filledSingletonSlots.has(l))){AT(` ↳ rejected (singleton already in partition "${e.partitionId}")`),this.exploredPins.add(n);return}for(let l of s)i.filledSingletonSlots.add(l);if(i.pins.push({boxId:e.boxId,pinId:e.pinId}),this.allAcceptedPins.add(t),this.addedPins.add(t),!this.splitBoxIds.has(e.boxId))this.acceptedBoxPartitionMap.set(e.boxId,e.partitionId);this.exploredPins.add(n),AT(` ↳ accepted → pins in partition now = ${i.pins.length}`);let c=this.getNeighbors(o);for(let l of c){let d=`${l.boxId}:${l.pinId}`;if(this.addedPins.has(d))continue;if(this.centerPinColors.includes(l.color))continue;if(this.exploredPins.has(`${e.partitionId}[${d}]`))continue;this.unexploredPins.push({boxId:l.boxId,pinId:l.pinId,partitionId:e.partitionId})}if(this.unexploredPins.length===0)this.solved=!0;if(this.solved)AT(`Solver finished in ${this.iteration} iterations, partitions=${this.getPartitions().length}`)}getNeighbors(e){let t=[];for(let n of this.initialGraph.pins){if(n.networkId!==e.networkId)continue;if(e.boxId===n.boxId&&n.pinId===e.pinId)continue;t.push(n)}for(let n of this.initialGraph.pins){if(n.boxId!==e.boxId)continue;t.push(n)}return t}solve(){while(!this.solved&&this.iteration<1000)this.step()}getPartitions(){if(!this.solved)throw Error("Graph not solved");let e=[];for(let t of this.wipPartitions){if(t.pins.length===0)continue;let n=new Set(t.pins.map((i)=>i.boxId)),o=this.initialGraph.boxes.filter((i)=>n.has(i.boxId));e.push({boxes:o,pins:this.initialGraph.pins.filter((i)=>t.pins.some((r)=>r.pinId===i.pinId&&r.boxId===i.boxId)||this.centerPinColors.includes(i.color)&&n.has(i.boxId))})}return e}getGraphicsForLastGraph(){let e=_T(this.lastGraph,{title:`Iteration ${this.iteration}`}),t=this.wipPartitions.length,n=0.4;if(this.wipPartitions.forEach((i,r)=>{if(i.pins.length===0)return;let s=VU(r,t,0.25);for(let{boxId:a,pinId:c}of i.pins){let{x:l,y:d}=A1e(this.lastGraph,a,c);e.rects.push({center:{x:l,y:d},width:0.4,height:0.4,fill:s})}}),this.lastExploredPin){let{boxId:i,pinId:r,color:s}=this.lastExploredPin,a=A1e(this.lastGraph,i,r),c=0.25;e.rects.push({center:{x:a.x,y:a.y},width:0.25,height:0.25,fill:this.lastExploredPin.partitionId?VU(this.wipPartitions.findIndex((l)=>l.partitionId===this.lastExploredPin.partitionId),this.wipPartitions.length,1):"black"}),e.texts.push({x:a.x,y:a.y,text:`${i}:${r}-${Array.from(this.boxSingletonKeys[i]??[]).join(",")}`,fontSize:0.1})}let o=0.4;for(let i of this.unexploredPins){let{boxId:r,pinId:s,partitionId:a}=i,c=this.wipPartitions.findIndex((A)=>A.partitionId===a);if(c===-1)continue;let l=VU(c,this.wipPartitions.length,1),{x:d,y:u}=A1e(this.lastGraph,r,s),h=1+0.1*c;e.rects.push({center:{x:d,y:u},width:o*h,height:o*h,fill:"none",stroke:l})}return e}},xjo=(e,t,n={})=>{n.similarityMethod??="wl-distance";let o=bOe,i=Object.fromEntries(Object.entries(t).map(([s,a])=>[s,o(e,a)])),r=Object.entries(i).reduce((s,[a,c])=>c<s[1]?[a,c]:s);return{graphName:r[0],graph:t[r[0]],distance:r[1],corpusScores:i}},Cjo=(e)=>{if(e.x>0)return"x+";if(e.x<0)return"x-";if(e.y>0)return"y+";if(e.y<0)return"y-";return null},Ijo=(e)=>{switch(e){case"x+":return{x:1,y:0};case"x-":return{x:-1,y:0};case"y+":return{x:0,y:1};case"y-":return{x:0,y:-1}}},QUt=(e,t)=>{let n=e.boxes.find((a)=>a.boxId===t);if(!n)throw Error(`Box ${t} not found`);let i=e.pins.filter((a)=>a.boxId===t).map((a)=>UU(e,n,a)),r={"x-":0,"x+":0,"y-":0,"y+":0};for(let a of i){if(!a)continue;r[a]++}let s=Math.max(...Object.values(r));for(let a of Object.keys(r))if(r[a]===s)return a;return null},bjo=(e,t,{floatingToFixedBoxAssignment:n,floatingBoxIdsWithMutablePinOffsets:o})=>{for(let i of e.boxes){let r=n[i.boxId];if(!r)continue;if(!i.center)continue;if(o?.has(i.boxId))continue;let s=f1e(t,r),a=f1e(e,i.boxId),c=QUt(t,r),l=QUt(e,i.boxId);if(c===null||l===null)continue;if(c!==l)continue;let d=Ijo(c),u=s.maxX-s.minX,h=a.maxX-a.minX,A=s.maxY-s.minY,m=a.maxY-a.minY,p=h-u,g=m-A;if(p<0.001&&g<0.001)continue;for(let _ of e.boxes){if(_.boxId===i.boxId)continue;if(!_.center)continue;let f={x:_.center.x-i.center.x,y:_.center.y-i.center.y};if(Cjo({x:f.x*Math.abs(d.x),y:f.y*Math.abs(d.y)})===c)_.center.x+=d.x*p,_.center.y+=d.y*g}}},Sjo=(e,t,n={})=>{let{floatingBoxIdsWithMutablePinOffsets:o=new Set}=n,{floatingToFixedBoxAssignment:i,floatingToFixedPinAssignment:r}=LUt(e,t),s=structuredClone(e);for(let a of s.pins){if(!o.has(a.boxId))continue;if(r[a.boxId]?.[a.pinId]){let c=r[a.boxId]?.[a.pinId],l=i[a.boxId],d=t.pins.find((u)=>u.boxId===l&&u.pinId===c);if(d)a.offset=d.offset}}for(let a of s.boxes)if(i[a.boxId]){let c=i[a.boxId],l=t.boxes.find((d)=>d.boxId===c);if(l)a.center=l.center,a.kind="fixed"}if(n.pushBoxesAsBoxesChangeSize)bjo(s,t,{floatingToFixedBoxAssignment:i,floatingBoxIdsWithMutablePinOffsets:o});return s},Pjo=(e)=>{let{floatingGraph:t,fixedCorpusMatch:n,fixedAccessoryCorpusMatch:o}=e,{floatingToFixedBoxAssignment:i,floatingToFixedPinAssignment:r,floatingToFixedNetworkAssignment:s}=LUt(t,n);console.log("[netAdaptAccessoryGraph] START",{floatingBoxes:t.boxes.length,fixedBoxes:n.boxes.length,accessoryBoxes:o.boxes.length});let a={};for(let[h,A]of Object.entries(s))a[A]=h;console.log("[netAdaptAccessoryGraph] assignments",{box:i,net:s});let c=[],l=[],d=new Set(Object.values(i)),u={};for(let[h,A]of Object.entries(i))u[A]=h;for(let h of o.boxes){let A=d.has(h.boxId),m=A?u[h.boxId]??h.boxId:h.boxId;if(!h.center){console.log("[netAdaptAccessoryGraph] SKIP box without center",h.boxId);continue}console.log(`[netAdaptAccessoryGraph] ADD accessory box ${h.boxId} (${A?"matched":"unmatched"}) as ${m}`);let p=o.pins.filter((g)=>g.boxId===h.boxId).map((g)=>({...g,boxId:m,networkId:a[g.networkId]??g.networkId}));c.push({...h,kind:"fixed",center:h.center,boxId:m}),l.push(...p)}return console.log("[netAdaptAccessoryGraph] FINISH",{addedBoxes:c.length,addedPins:l.length}),{boxes:c,pins:l}},vjo=(e,{corpus:t,singletonKeys:n,centerPinColors:o,floatingBoxIdsWithMutablePinOffsets:i,accessoryCorpus:r})=>{let s=new yjo(e,{singletonKeys:n,centerPinColors:o});while(!s.solved&&s.iteration<1000)s.step();let l=s.getPartitions().map(fjo).map((p)=>{let{graph:g,distance:_,graphName:f}=xjo(p.g,t),y=r?.[f],x=Sjo(structuredClone(p.g),g,{floatingBoxIdsWithMutablePinOffsets:i,pushBoxesAsBoxesChangeSize:!0}),C;if(y)C=Pjo({floatingGraph:structuredClone(p.g),fixedCorpusMatch:g,fixedAccessoryCorpusMatch:y});return{adaptedBpcGraph:x,adaptedAccessoryGraph:C,reflected:p.reflected,centerBoxId:p.centerBoxId,distance:_}}),d=l.map(({adaptedBpcGraph:p,reflected:g,centerBoxId:_})=>{if(!g)return p;return SOe({graph:p,axis:"x",centerBoxId:_})}),u;if(r)u=l.filter((p)=>p.adaptedAccessoryGraph!==void 0&&p.centerBoxId!==null).map(({adaptedAccessoryGraph:p,reflected:g,centerBoxId:_})=>{if(!g)return p;return SOe({graph:p,axis:"x",centerBoxId:_})});let h=RUt(d),A;if(r)A=RUt(u);let m=l.reduce((p,g)=>p+(g.distance||0),0);return{fixedGraph:h,accessoryFixedGraph:A,distance:m}},HUt=(e,{corpus:t,singletonKeys:n,centerPinColors:o,floatingBoxIdsWithMutablePinOffsets:i})=>{let r=[],s=null;for(let a of e){let{fixedGraph:c,accessoryFixedGraph:l,distance:d}=vjo(a.floatingGraph,{corpus:t,singletonKeys:n,centerPinColors:o,floatingBoxIdsWithMutablePinOffsets:i});if(r.push({variantName:a.variantName,distance:d}),!s||d<s.distance)s={variantName:a.variantName,fixedGraph:c,accessoryFixedGraph:l,distance:d}}return{fixedGraph:s.fixedGraph,accessoryFixedGraph:s.accessoryFixedGraph,selectedVariantName:s.variantName,variantResults:r}};Yo();Yo();var q0n=Rt(l0(),1);var J0n=Rt(l0(),1);wp();Yo();Yo();var omn=Rt(l0(),1),rmn=Rt(l0(),1);pn();mle();var smn=Rt(l0(),1);var amn=Rt(l0(),1);var dmn=Rt(l0(),1),umn=Rt(lo(),1);qa();var _mn=Rt(l0(),1);var C0=0.000000000000001,Ejo=class{map;rev;constructor(){this.map=new Map([["0",0]]),this.rev=["0"]}getOrCreate(e){let t=String(e),n=t.toUpperCase();if(this.map.has(n))return this.map.get(n);let o=this.rev.length;return this.map.set(n,o),this.rev.push(t),o}get(e){return this.map.get(String(e).toUpperCase())}count(){return this.rev.length}matrixIndexOfNode(e){if(e===0)return-1;return e-1}};function Gg(e){if(e==null)return NaN;let t=String(e).trim();if(t==="")return NaN;if(/^[+-]?\d*\.?\d+(?:[eE][+-]?\d+)?$/.test(t))return parseFloat(t);let n={t:1000000000000,g:1e9,meg:1e6,k:1000,m:0.001,u:0.000001,n:0.000000001,p:0.000000000001,f:0.000000000000001},o=t.match(/^([+-]?\d*\.?\d+(?:[eE][+-]?\d+)?)([a-zA-Z]+)$/);if(!o)return parseFloat(t);let[,i,r]=o;if(i==null)return parseFloat(t);let s=parseFloat(i),a=(r??"").toLowerCase();if(a=a.replace(/(ohm|v|a|s|h|f)$/g,""),a==="meg")return s*n.meg;if(a.length===1&&a in n)return s*n[a];return s}function Mjo(e){let o=e.trim().replace(/^pulse\s*\(/i,"(").replace(/^\(/,"").replace(/\)$/,"").trim().split(/[\s,]+/).filter((r)=>r.length);if(o.length<7)throw Error("PULSE(...) requires 7 or 8 args");let i=o.map((r)=>Gg(r));if(i.some((r)=>Number.isNaN(r)))throw Error("Invalid PULSE() numeric value");return{v1:i[0],v2:i[1],td:i[2],tr:i[3],tf:i[4],ton:i[5],period:i[6],ncycles:o[7]!=null?i[7]:1/0}}function Bjo(e){let o=e.trim().replace(/^pwl\s*\(/i,"(").replace(/^\(/,"").replace(/\)$/,"").trim().split(/[\s,]+/).filter((r)=>r.length);if(o.length===0||o.length%2!==0)throw Error("PWL(...) requires an even number of time/value pairs");let i=[];for(let r=0;r<o.length;r+=2){let s=Gg(o[r]),a=Gg(o[r+1]);if(Number.isNaN(s)||Number.isNaN(a))throw Error("Invalid PWL() numeric value");i.push({t:s,v:a})}return i}function wjo(e,t){if(t<e.td)return e.v1;let n=t-e.td,o=Math.floor(n/e.period);if(o>=e.ncycles)return e.v1;let i=n-o*e.period;if(i<e.tr){let r=i/Math.max(e.tr,C0);return e.v1+(e.v2-e.v1)*r}if(i<e.tr+e.ton)return e.v2;if(i<e.tr+e.ton+e.tf){let r=(i-(e.tr+e.ton))/Math.max(e.tf,C0);return e.v2+(e.v1-e.v2)*r}return e.v1}function Tjo(e,t){if(e.length===0)return 0;if(t<=e[0].t)return e[0].v;for(let n=1;n<e.length;n++){let o=e[n-1],i=e[n];if(t<=i.t){let r=Math.max(i.t-o.t,C0),s=(t-o.t)/r;return o.v+(i.v-o.v)*s}}return e[e.length-1].v}function Djo(e){let t=/"[^"]*"|\w+\s*\([^)]*\)|\([^()]*\)|\S+/g,n=[],o;while((o=t.exec(e))!==null)n.push(o[0]);return n}function ll(e,t,n){let o=e[t];if(o==null)throw Error(n);return o}function Njo(e){let t=new Map,n=new Map,o={nodes:new Ejo,R:[],C:[],L:[],V:[],S:[],D:[],analyses:{ac:null,tran:null},probes:{tran:[]},skipped:[],models:{vswitch:t,diode:n}},i=e.split(/\r?\n/),r=!1;for(let a of i){let c=a.trim();if(!c)continue;if(/^\*/.test(c))continue;if(/^\s*\.end\b/i.test(c))break;c=c.replace(/\/\/.*$/,""),c=c.replace(/;.*$/,"");let l=Djo(c);if(l.length===0)continue;let d=l[0];if(d.length===0)continue;if(!r&&!/^[rclvgsmiqd]\w*$/i.test(d)&&!/^\./.test(d)){r=!0;continue}if(/^\./.test(d)){let A=d.toLowerCase();if(A===".ac"){let m=ll(l,1,".ac missing mode").toLowerCase();if(m!=="dec"&&m!=="lin")throw Error(".ac supports 'dec' or 'lin'");let p=parseInt(ll(l,2,".ac missing point count"),10),g=Gg(ll(l,3,".ac missing start frequency")),_=Gg(ll(l,4,".ac missing stop frequency"));o.analyses.ac={mode:m,N:p,f1:g,f2:_}}else if(A===".tran"){let m=Gg(ll(l,1,".tran missing timestep")),p=Gg(ll(l,2,".tran missing stop time"));o.analyses.tran={dt:m,tstop:p}}else if(A===".print")if(ll(l,1,".print missing analysis type").toLowerCase()==="tran"){let p=l.slice(2);for(let g of p){let _=g.match(/^v\(([^)]+)\)$/i);if(_&&_[1]){let f=_[1];if(!o.probes.tran.some((y)=>y.toUpperCase()===f.toUpperCase()))o.probes.tran.push(f)}}}else o.skipped.push(c);else if(A===".model"){let m=ll(l,1,".model missing name"),g=ll(l,2,".model missing type"),_="";if(g.includes("(")){let y=g.indexOf("(");_=g.slice(y+1),g=g.slice(0,y)}if(!_)_=l.slice(3).join(" ").replace(/^\(/,"").replace(/\)$/,"");else{let y=l.slice(3).join(" ").replace(/\)$/,"");_=`${_} ${y}`.trim()}_=_.replace(/^\(/,"").replace(/\)$/,"").trim();let f=g.toLowerCase();if(f==="vswitch"||f==="sw"){let y={name:m,Ron:1,Roff:1000000000000,Von:0,Voff:0},x,C;if(_.length>0){let I=_.split(/[\s,]+/).filter(Boolean);for(let b of I){let[P,E]=b.split("=");if(!P||E==null)continue;let B=P.toLowerCase(),w=Gg(E);if(Number.isNaN(w))continue;if(B==="ron")y.Ron=w;else if(B==="roff")y.Roff=w;else if(B==="von")y.Von=w;else if(B==="voff")y.Voff=w;else if(B==="vt")x=w;else if(B==="vh")C=w}}if(x!==void 0){let I=C??0;y.Von=x+I/2,y.Voff=x-I/2}t.set(m.toLowerCase(),y)}else if(f==="d"){let y={name:m,Is:0.00000000000001,N:1};if(_.length>0){let x=_.split(/[\s,]+/).filter(Boolean);for(let C of x){let[I,b]=C.split("=");if(!I||b==null)continue;let P=I.toLowerCase(),E=Gg(b);if(Number.isNaN(E))continue;if(P==="is")y.Is=E;else if(P==="n")y.N=E}}n.set(m.toLowerCase(),y)}else o.skipped.push(c)}else o.skipped.push(c);continue}let u=d.charAt(0).toLowerCase(),h=d;try{if(u==="r"){let A=o.nodes.getOrCreate(ll(l,1,"Resistor missing node")),m=o.nodes.getOrCreate(ll(l,2,"Resistor missing node")),p=Gg(ll(l,3,"Resistor missing value"));o.R.push({name:h,n1:A,n2:m,R:p})}else if(u==="c"){let A=o.nodes.getOrCreate(ll(l,1,"Capacitor missing node")),m=o.nodes.getOrCreate(ll(l,2,"Capacitor missing node")),p=Gg(ll(l,3,"Capacitor missing value"));o.C.push({name:h,n1:A,n2:m,C:p,vPrev:0})}else if(u==="l"){let A=o.nodes.getOrCreate(ll(l,1,"Inductor missing node")),m=o.nodes.getOrCreate(ll(l,2,"Inductor missing node")),p=Gg(ll(l,3,"Inductor missing value"));o.L.push({name:h,n1:A,n2:m,L:p,iPrev:0})}else if(u==="v"){let A=o.nodes.getOrCreate(ll(l,1,"Voltage source missing node")),m=o.nodes.getOrCreate(ll(l,2,"Voltage source missing node")),p={dc:0,acMag:0,acPhaseDeg:0,waveform:null,index:-1},g=3;if(g<l.length&&!/^[a-zA-Z]/.test(l[g]))p.dc=Gg(l[g]),g++;while(g<l.length){let _=l[g].toLowerCase();if(_==="dc"){let f=ll(l,g+1,"DC value missing");p.dc=Gg(f),g+=2}else if(_==="ac"){let f=ll(l,g+1,"AC magnitude missing");p.acMag=Gg(f);let y=l[g+2];if(y!=null&&/^[+-]?\d/.test(y))p.acPhaseDeg=Gg(y),g+=3;else g+=2}else if(_.startsWith("pulse")){let f=_.includes("(")?_:ll(l,g+1,"PULSE() missing arguments");if(!f||!/\(.*\)/.test(f))throw Error("Malformed PULSE() specification");let y=Mjo(f);p.waveform=(x)=>wjo(y,x),g+=_.includes("(")?1:2}else if(_.startsWith("pwl")){let f=_.includes("(")?_:ll(l,g+1,"PWL() missing arguments");if(!f||!/\(.*\)/.test(f))throw Error("Malformed PWL() specification");let y=Bjo(f);p.waveform=(x)=>Tjo(y,x),g+=_.includes("(")?1:2}else if(/^\(.*\)$/.test(_))g++;else g++}o.V.push({name:h,n1:A,n2:m,dc:p.dc,acMag:p.acMag,acPhaseDeg:p.acPhaseDeg,waveform:p.waveform,index:p.index??-1})}else if(u==="s"){let A=o.nodes.getOrCreate(ll(l,1,"Switch missing node")),m=o.nodes.getOrCreate(ll(l,2,"Switch missing node")),p=o.nodes.getOrCreate(ll(l,3,"Switch missing control node")),g=o.nodes.getOrCreate(ll(l,4,"Switch missing control node")),_=ll(l,5,"Switch missing model");o.S.push({name:h,n1:A,n2:m,ncPos:p,ncNeg:g,modelName:_.toLowerCase(),model:null,isOn:!1})}else if(u==="d")if(l.length===4){let A=o.nodes.getOrCreate(ll(l,1,"Diode missing node")),m=o.nodes.getOrCreate(ll(l,2,"Diode missing node")),p=ll(l,3,"Diode missing model");o.D.push({name:h,nPlus:A,nMinus:m,modelName:p.toLowerCase(),model:null,vdPrev:0})}else o.skipped.push(c);else o.skipped.push(c)}catch(A){if(A instanceof Error)throw Error(`Parse error on line: "${c}"
${A.message}`);throw A}}let s=o.nodes.count()-1;for(let a=0;a<o.V.length;a++){let c=o.V[a];if(!c)continue;c.index=s+a}for(let a of o.S){let c=t.get(a.modelName);if(!c)throw Error(`Unknown .model ${a.modelName} referenced by switch ${a.name}`);a.model=c,a.isOn=!1}for(let a of o.D){let c=n.get(a.modelName);if(!c)throw Error(`Unknown .model ${a.modelName} referenced by diode ${a.name}`);a.model=c}return o}var dl=class e{re;im;constructor(t=0,n=0){this.re=t,this.im=n}static from(t,n=0){return new e(t,n)}static fromPolar(t,n=0){let o=n*Math.PI/180;return new e(t*Math.cos(o),t*Math.sin(o))}clone(){return new e(this.re,this.im)}add(t){return new e(this.re+t.re,this.im+t.im)}sub(t){return new e(this.re-t.re,this.im-t.im)}mul(t){return new e(this.re*t.re-this.im*t.im,this.re*t.im+this.im*t.re)}div(t){let n=t.re*t.re+t.im*t.im;if(n<C0)throw Error("Complex divide by ~0");return new e((this.re*t.re+this.im*t.im)/n,(this.im*t.re-this.re*t.im)/n)}inv(){let t=this.re*this.re+this.im*this.im;if(t<C0)throw Error("Complex invert by ~0");return new e(this.re/t,-this.im/t)}abs(){return Math.hypot(this.re,this.im)}phaseDeg(){return Math.atan2(this.im,this.re)*180/Math.PI}};function Rjo(e,t){let n=e.length;for(let i=0;i<n;i++){let r=e[i],s=t[i];if(!r||!s)throw Error("Matrix dimensions mismatch");let a=r.map((c)=>c.clone());a.push(s.clone()),e[i]=a}for(let i=0;i<n;i++){let r=i,s=e[i];if(!s)throw Error("Matrix row missing");let a=s[i]?.abs()??0;for(let d=i+1;d<n;d++){let u=e[d];if(!u)throw Error("Matrix row missing");let h=u[i]?.abs()??0;if(h>a)a=h,r=d}if(a<C0)throw Error("Singular matrix (complex)");if(r!==i){let d=e[i];e[i]=e[r],e[r]=d}let c=e[i];if(!c)throw Error("Pivot row missing");let l=c[i];if(!l)throw Error("Zero pivot encountered");for(let d=i+1;d<n;d++){let u=e[d];if(!u)throw Error("Matrix row missing");let h=u[i];if(!h)continue;let A=h.div(l);if(A.abs()<C0)continue;for(let m=i;m<=n;m++){let p=u[m],g=c[m];if(!p||!g)continue;u[m]=p.sub(A.mul(g))}}}let o=Array(n);for(let i=n-1;i>=0;i--){let r=e[i];if(!r)throw Error("Matrix row missing");let s=r[n];if(!s)throw Error("Augmented column missing");for(let c=i+1;c<n;c++){let l=r[c],d=o[c];if(!l||!d)continue;s=s.sub(l.mul(d))}let a=r[i];if(!a)throw Error("Zero pivot on back-substitution");o[i]=s.div(a)}return o}function Qjo(e,t,n){if(e<=0||t<=0)throw Error(".ac frequencies must be > 0");if(t<e)[e,t]=[t,e];let o=Math.log10(t/e),i=Math.max(1,Math.ceil(o*n)),r=[];for(let a=0;a<=i;a++)r.push(e*Math.pow(10,a/n));let s=r[r.length-1];if(s==null||s<t*(1-C0))r.push(t);return r}function POe(e,t,n,o,i){let r=t.matrixIndexOfNode(n),s=t.matrixIndexOfNode(o);if(r>=0){let a=e[r];if(!a)throw Error("Matrix row missing while stamping");a[r]=a[r]?.add(i)??i}if(s>=0){let a=e[s];if(!a)throw Error("Matrix row missing while stamping");a[s]=a[s]?.add(i)??i}if(r>=0&&s>=0){let a=e[r],c=e[s];if(!a||!c)throw Error("Matrix row missing while stamping");a[s]=a[s]?.sub(i)??dl.from(0,0).sub(i),c[r]=c[r]?.sub(i)??dl.from(0,0).sub(i)}}function kjo(e,t,n,o,i){let r=n.matrixIndexOfNode(o.n1),s=n.matrixIndexOfNode(o.n2),a=o.index,c=dl.from(1,0),l=dl.from(-1,0);if(r>=0){let u=e[r];if(!u)throw Error("Matrix row missing while stamping voltage source");u[a]=u[a]?.add(c)??c}if(s>=0){let u=e[s];if(!u)throw Error("Matrix row missing while stamping voltage source");u[a]=u[a]?.sub(c)??l}let d=e[a];if(!d)throw Error("Branch row missing while stamping voltage source");if(r>=0)d[r]=d[r]?.add(c)??c;if(s>=0)d[s]=d[s]?.sub(c)??l;t[a]=(t[a]??dl.from(0,0)).add(i)}function Ljo(e){let{mode:t,N:n,f1:o,f2:i}=e;if(t==="dec")return Qjo(o,i,n);let r=[],s=Math.max(2,n),a=(i-o)/(s-1);for(let c=0;c<s;c++)r.push(o+c*a);return r}function Fjo(e,t,n){let o=Array.from({length:n},()=>Array.from({length:n},()=>dl.from(0,0))),i=Array.from({length:n},()=>dl.from(0,0)),r=2*Math.PI;for(let s of e.R){if(s.R<=0)throw Error(`R ${s.name} must be > 0`);let a=dl.from(1/s.R,0);POe(o,e.nodes,s.n1,s.n2,a)}for(let s of e.C){let a=dl.from(0,r*t*s.C);POe(o,e.nodes,s.n1,s.n2,a)}for(let s of e.L){let a=dl.from(0,r*t*s.L),c=a.abs()<C0?dl.from(0,0):dl.from(1,0).div(a);POe(o,e.nodes,s.n1,s.n2,c)}for(let s of e.V){let a=dl.fromPolar(s.acMag||0,s.acPhaseDeg||0);kjo(o,i,e.nodes,s,a)}return{A:o,b:i}}function Hjo(e){if(!e.analyses.ac)return null;let{mode:t,N:n,f1:o,f2:i}=e.analyses.ac,r=e.nodes.count()-1,s=e.V.length,a=r+s,c=Ljo({mode:t,N:n,f1:o,f2:i}),l={};e.nodes.rev.forEach((h,A)=>{if(A!==0)l[h]=[]});let d={},u=2*Math.PI;for(let h of c){let{A,b:m}=Fjo(e,h,a),p=Rjo(A,m);for(let g=1;g<e.nodes.count();g++){let _=g-1,f=e.nodes.rev[g];if(!f)continue;let y=l[f];if(!y)continue;y.push(p[_]??dl.from(0,0))}for(let g of e.R){let _=g.n1===0?dl.from(0,0):p[g.n1-1]??dl.from(0,0),f=g.n2===0?dl.from(0,0):p[g.n2-1]??dl.from(0,0),x=dl.from(1/g.R,0).mul(_.sub(f));(d[g.name]||=[]).push(x)}for(let g of e.C){let _=g.n1===0?dl.from(0,0):p[g.n1-1]??dl.from(0,0),f=g.n2===0?dl.from(0,0):p[g.n2-1]??dl.from(0,0),x=dl.from(0,u*h*g.C).mul(_.sub(f));(d[g.name]||=[]).push(x)}for(let g of e.L){let _=g.n1===0?dl.from(0,0):p[g.n1-1]??dl.from(0,0),f=g.n2===0?dl.from(0,0):p[g.n2-1]??dl.from(0,0),y=dl.from(0,u*h*g.L),C=(y.abs()<C0?dl.from(0,0):dl.from(1,0).div(y)).mul(_.sub(f));(d[g.name]||=[]).push(C)}for(let g of e.V){let _=p[g.index]??dl.from(0,0);(d[g.name]||=[]).push(_)}}return{freqs:c,nodeVoltages:l,elementCurrents:d}}var OUt=0.02585;function Ojo(e,t){let n=e.length;for(let i=0;i<n;i++){let r=e[i],s=t[i];if(!r||s==null)throw Error("Matrix dimensions mismatch");let a=r.slice();a.push(s),e[i]=a}for(let i=0;i<n;i++){let r=i,s=e[i];if(!s)throw Error("Matrix row missing");let a=Math.abs(s[i]??0);for(let d=i+1;d<n;d++){let u=e[d];if(!u)throw Error("Matrix row missing");let h=Math.abs(u[i]??0);if(h>a)a=h,r=d}if(a<C0)throw Error("Singular matrix (real)");if(r!==i){let d=e[i];e[i]=e[r],e[r]=d}let c=e[i];if(!c)throw Error("Pivot row missing");let l=c[i];if(l==null)throw Error("Zero pivot encountered");for(let d=i+1;d<n;d++){let u=e[d];if(!u)throw Error("Matrix row missing");let h=u[i];if(h==null)continue;let A=h/l;if(Math.abs(A)<C0)continue;for(let m=i;m<=n;m++){let p=u[m],g=c[m];if(p==null||g==null)continue;u[m]=p-A*g}}}let o=Array(n).fill(0);for(let i=n-1;i>=0;i--){let r=e[i];if(!r)throw Error("Matrix row missing");let s=r[n];if(s==null)throw Error("Augmented column missing");for(let c=i+1;c<n;c++){let l=r[c],d=o[c];if(l==null||d==null)continue;s-=l*d}let a=r[i];if(a==null)throw Error("Zero pivot on back-substitution");o[i]=s/a}return o}function yne(e,t,n,o,i){let r=t.matrixIndexOfNode(n),s=t.matrixIndexOfNode(o);if(r>=0){let a=e[r];if(!a)throw Error("Matrix row missing while stamping");a[r]=(a[r]??0)+i}if(s>=0){let a=e[s];if(!a)throw Error("Matrix row missing while stamping");a[s]=(a[s]??0)+i}if(r>=0&&s>=0){let a=e[r],c=e[s];if(!a||!c)throw Error("Matrix row missing while stamping");a[s]=(a[s]??0)-i,c[r]=(c[r]??0)-i}}function vOe(e,t,n,o,i){let r=t.matrixIndexOfNode(n),s=t.matrixIndexOfNode(o);if(r>=0)e[r]=(e[r]??0)-i;if(s>=0)e[s]=(e[s]??0)+i}function zjo(e,t,n,o,i){let r=n.matrixIndexOfNode(o.n1),s=n.matrixIndexOfNode(o.n2),a=o.index;if(r>=0){let l=e[r];if(!l)throw Error("Matrix row missing while stamping voltage source");l[a]=(l[a]??0)+1}if(s>=0){let l=e[s];if(!l)throw Error("Matrix row missing while stamping voltage source");l[a]=(l[a]??0)-1}let c=e[a];if(!c)throw Error("Branch row missing while stamping voltage source");if(r>=0)c[r]=(c[r]??0)+1;if(s>=0)c[s]=(c[s]??0)-1;t[a]=(t[a]??0)+i}function Gjo(e,t){let n=e>C0?e:Math.max(t/1000,C0),o=Math.max(1,Math.ceil(t/Math.max(n,C0)));return{dt:o>0?t/o:t,steps:o}}function Yjo(e,t,n,o,i,r,s){for(let a of n.R){let c=1/a.R;yne(e,n.nodes,a.n1,a.n2,c)}for(let a of n.C){let c=a.C/Math.max(i,C0);yne(e,n.nodes,a.n1,a.n2,c);let l=-c*a.vPrev;vOe(t,n.nodes,a.n1,a.n2,l)}for(let a of n.L){let c=Math.max(i,C0)/a.L;yne(e,n.nodes,a.n1,a.n2,c),vOe(t,n.nodes,a.n1,a.n2,a.iPrev)}for(let a of n.S){let c=a.model;if(!c)continue;let l=a.isOn?c.Ron:c.Roff,u=1/Math.max(Math.abs(l),C0);yne(e,n.nodes,a.n1,a.n2,u)}for(let a of n.V){let c=a.waveform?a.waveform(o):a.dc||0;zjo(e,t,n.nodes,a,c)}for(let a of n.D){let c=a.model;if(!c)continue;let{nPlus:l,nMinus:d}=a,u=n.nodes.matrixIndexOfNode(l),h=n.nodes.matrixIndexOfNode(d),A=l===0?0:r[u]??0,m=d===0?0:r[h]??0,p=A-m,g=s===0?a.vdPrev:p,_=c.N*OUt,f=g;if(g>0.8)f=0.8;if(g<-1)f=-1;let y=Math.exp(f/_),x=c.Is*(y-1),C=Math.max(c.Is/_*y,0.000000000001),I=x-C*f;yne(e,n.nodes,l,d,C),vOe(t,n.nodes,l,d,I)}}function Vjo(e,t){let n=!1;for(let o of e.S){let i=o.model;if(!i)continue;let r=o.ncPos===0?0:t[o.ncPos-1]??0,s=o.ncNeg===0?0:t[o.ncNeg-1]??0,a=r-s,c=o.isOn;if(o.isOn){if(a<i.Voff)c=!1}else if(a>i.Von)c=!0;if(c!==o.isOn)o.isOn=c,n=!0}return n}function Ujo(e){if(!e.analyses.tran)return null;let{dt:t,tstop:n}=e.analyses.tran,{dt:o,steps:i}=Gjo(t,n),r=e.nodes.count()-1,s=e.V.length,a=r+s,c=[],l={};e.nodes.rev.forEach((h,A)=>{if(A!==0)l[h]=[]});let d={},u=0;for(let h=0;h<=i;h++,u=h*o){c.push(u);let A=Array(a).fill(0);for(let m=0;m<20;m++){let p=Array.from({length:a},()=>Array(a).fill(0)),g=Array(a).fill(0);if(Yjo(p,g,e,u,o,A,m),A=Ojo(p,g),!Vjo(e,A))break;if(m===19)break}for(let m=1;m<e.nodes.count();m++){let p=m-1,g=e.nodes.rev[m];if(!g)continue;let _=l[g];if(!_)continue;_.push(A[p]??0)}for(let m of e.R){let p=m.n1===0?0:A[m.n1-1]??0,g=m.n2===0?0:A[m.n2-1]??0,_=(p-g)/m.R;(d[m.name]||=[]).push(_)}for(let m of e.C){let p=m.n1===0?0:A[m.n1-1]??0,g=m.n2===0?0:A[m.n2-1]??0,_=m.C*(p-g-m.vPrev)/Math.max(o,C0);(d[m.name]||=[]).push(_)}for(let m of e.L){let p=m.n1===0?0:A[m.n1-1]??0,g=m.n2===0?0:A[m.n2-1]??0,f=Math.max(o,C0)/m.L*(p-g)+m.iPrev;(d[m.name]||=[]).push(f)}for(let m of e.V){let p=A[m.index]??0;(d[m.name]||=[]).push(p)}for(let m of e.S){let p=m.model;if(!p)continue;let g=m.n1===0?0:A[m.n1-1]??0,_=m.n2===0?0:A[m.n2-1]??0,f=m.isOn?p.Ron:p.Roff,y=Math.max(Math.abs(f),C0),x=(g-_)/y;(d[m.name]||=[]).push(x)}for(let m of e.D){if(!m.model)continue;let{nPlus:p,nMinus:g,model:_}=m,f=p===0?0:A[p-1]??0,y=g===0?0:A[g-1]??0,x=f-y,C=_.N*OUt,I=Math.exp(x/C),b=_.Is*(I-1);(d[m.name]||=[]).push(b)}for(let m of e.C){let p=m.n1===0?0:A[m.n1-1]??0,g=m.n2===0?0:A[m.n2-1]??0;m.vPrev=p-g}for(let m of e.L){let p=m.n1===0?0:A[m.n1-1]??0,g=m.n2===0?0:A[m.n2-1]??0,_=Math.max(o,C0)/m.L;m.iPrev=_*(p-g)+m.iPrev}for(let m of e.D){let p=m.nPlus===0?0:A[m.nPlus-1]??0,g=m.nMinus===0?0:A[m.nMinus-1]??0;m.vdPrev=p-g}}if(e.probes.tran.length>0){let h={},A=e.probes.tran.map((m)=>m.toUpperCase());for(let m in l)if(A.includes(m.toUpperCase()))h[m]=l[m];return{times:c,nodeVoltages:h,elementCurrents:d}}return{times:c,nodeVoltages:l,elementCurrents:d}}function zUt(e){let t=Njo(e),n=Hjo(t),o=Ujo(t);return{circuit:t,ac:n,tran:o}}function GUt(e,t,n){if(!e||!t.analyses.tran)return[];let{dt:o,tstop:i}=t.analyses.tran,{times:r,nodeVoltages:s}=e,a=[];for(let c in s){let l=s[c];a.push({type:"simulation_transient_voltage_graph",simulation_transient_voltage_graph_id:`stvg_${n}_${c}`,simulation_experiment_id:n,timestamps_ms:r.map((d)=>d*1000),voltage_levels:l,time_per_step:o*1000,start_time_ms:0,end_time_ms:i*1000,name:`${c}`})}return a}function Xjo(e){let t=new Map,n=0;function o(i){for(let[,s]of t)if(s.has(i))return s;let r=new Set;return t.set(`connectivity_net${n++}`,r),r}for(let i of e){let r=null;for(let s of i){if(!r)r=o(s);else if(!r.has(s)){let a=o(s);if(a!==r){for(let c of a)r.add(c);t.delete(Array.from(t.entries()).find(([,c])=>c===a)[0])}}r.add(s)}}return Object.fromEntries(Array.from(t.entries()).map(([i,r])=>[i,Array.from(r)]))}var Kjo=class{netMap;idToNetMap;constructor(e){this.netMap=e,this.idToNetMap={};for(let[t,n]of Object.entries(e))for(let o of n)this.idToNetMap[o]=t}addConnections(e){for(let t of e){let n=new Set;for(let i of t){let r=this.idToNetMap[i];if(r)n.add(r)}let o;if(n.size===0)o=`connectivity_net${Object.keys(this.netMap).length}`,this.netMap[o]=[];else if(n.size===1)o=n.values().next().value??`connectivity_net${Object.keys(this.netMap).length}`;else{o=n.values().next().value??`connectivity_net${Object.keys(this.netMap).length}`;for(let i of n)if(i!==o){this.netMap[o].push(...this.netMap[i]),this.netMap[i]=this.netMap[o];for(let r of this.netMap[o])this.idToNetMap[r]=o}}for(let i of t){if(!this.netMap[o].includes(i))this.netMap[o].push(i);this.idToNetMap[i]=o}}}getIdsConnectedToNet(e){return this.netMap[e]||[]}getNetConnectedToId(e){return this.idToNetMap[e]}areIdsConnected(e,t){if(e===t)return!0;let n=this.getNetConnectedToId(e);if(!n)return!1;let o=this.getNetConnectedToId(t);if(!o)return!1;return n===o||o===e||o===e}areAllIdsConnected(e){let t=this.getNetConnectedToId(e[0]);for(let n of e){let o=this.getNetConnectedToId(n);if(o===void 0)return!1;if(o!==t)return!1}return!0}},YUt=(e)=>{let t=[];for(let o of e)if(o.type==="source_trace")t.push([...o.connected_source_port_ids??[],...o.connected_source_net_ids??[]]);else if(o.type==="source_component"){if(o.internally_connected_source_port_ids)for(let i of o.internally_connected_source_port_ids)t.push(i)}let n=Xjo(t);return new Kjo(n)};Yo();var MOe=class{sourceSpan;leadingTrivia=[];trailingComment;constructor(e={}){this.sourceSpan=e.sourceSpan,this.trailingComment=e.trailingComment}getString(e){return this.toSource(e)}},VUt="__default__",J6=class e extends MOe{originalSource;constructor(t={}){super(t);this.originalSource=t.originalSource}static classes={};static register(t){if(!t.spiceTokenKeys||t.spiceTokenKeys.length===0)throw Error("Class must declare static spiceTokenKeys");for(let n of t.spiceTokenKeys)e.classes[n.toLowerCase()]=t}static parseSpiceTokens(t){let n=t.tokens.find((r)=>r.type!=="whitespace"),o=n===void 0?"blank":n.type==="directive"?`.${n.value}`:n.type==="comment"?"comment":n.type==="identifier"?n.raw[0]?.toUpperCase()??VUt:n.type,i=e.classes[o.toLowerCase()]??(n?.type==="identifier"?e.classes.__unknown_element__:void 0)??e.classes[VUt];if(i===void 0)throw Error(`No SPICE card class registered for "${o}"`);return i.fromSpiceTokens(t)}},Ic=class extends J6{cardKind="directive"},$6=class extends Ic{},jUt=class extends MOe{};function Cne(e,t){let n=e?.dialect??"generic";if(n!=="pspice")throw Error(`PSpice-only construct ${t} cannot be serialized to target dialect "${n}". Serialize with { dialect: "pspice" } or translate/remove the construct before exporting.`)}function jjo(e){let t=[],n=[],o,i,r=(a)=>{t.push({tokens:[],originalSource:"",range:{start:a.range.end,end:a.range.end},leadingNewlineRaw:a.raw})},s=()=>{if(n.length===0)return;let a={start:n[0].range.start,end:n.at(-1).range.end};t.push({tokens:n,originalSource:n.map((c)=>c.raw).join(""),range:a,leadingNewlineRaw:i}),n=[],o=void 0,i=void 0};for(let a of e){if(a.type==="newline"){if(o!==void 0){let c=o;s(),r(c),o=a;continue}if(n.length===0)r(a);else o=a;continue}if(o!==void 0){if(a.type==="continuation")n.push(o,a),o=void 0;else{let c=o.raw;s(),i=c,o=void 0,n.push(a)}continue}if(a.type==="continuation"){n.push(a);continue}n.push(a)}return s(),t}function BOe(e){return e.filter((t)=>t.type!=="whitespace"&&t.type!=="newline"&&t.type!=="continuation")}function qUt(e){if(e===void 0)return;if("value"in e&&typeof e.value==="string")return e.value;return e.raw}function qjo(e){let t=[];for(let n=0;n<e.length;n+=1){let o=e[n];if(o===void 0)continue;let i=EOe(o);if(i===".control"){let r=[],s,a=o.originalSource;for(n+=1;n<e.length;n+=1){let c=e[n];if(c===void 0)continue;if(a=`${a}${c.leadingNewlineRaw??`
`}${c.originalSource}`,EOe(c)===".endc"){s=c;break}r.push(c)}t.push({...o,childCards:r,endCard:s,originalSource:a});continue}if(i===".subckt"){let r=[],s,a=o.originalSource;for(n+=1;n<e.length;n+=1){let c=e[n];if(c===void 0)continue;if(a=`${a}${c.leadingNewlineRaw??`
`}${c.originalSource}`,EOe(c)===".ends"){s=c;break}r.push(c)}t.push({...o,childCards:r,endCard:s,originalSource:a});continue}t.push(o)}return t}function EOe(e){let[t]=BOe(e.tokens);if(t===void 0)return;if(t.type==="directive")return`.${t.value}`;return qUt(t)}function gT(e){return qUt(e)}function UUt(e){return e.type==="punctuation"&&(e.value==="("||e.value===")"||e.value===",")}var Aa=class e{constructor(t){this.card=t,this.tokens=BOe(t.tokens),this.originalSource=t.originalSource}card;tokens;originalSource;static from(t){return new e(t)}head(){return gT(this.tokens[0])??""}headRaw(){return this.tokens[0]?.raw??""}headDesignator(){return this.tokens[0]?.raw[0]?.toUpperCase()??""}arg(t){return gT(this.tokens[t+1])}args(){return this.tokens.slice(1).map((t)=>gT(t)??t.raw)}argsAfter(t){return this.args().slice(t)}argsUntilLast(){return this.args().slice(0,-1)}lastArg(){return this.args().at(-1)}keywordIndex(t){return this.findKeyword(t)?.argIndex??-1}argAfterKeyword(t){let n=this.findKeyword(t);return n===void 0?void 0:gT(this.tokens[n.tokenIndex+n.tokenCount])}hasKeyword(t){return this.findKeyword(t)!==void 0}sweepArg(t,n){let o=this.arg(t)?.toLowerCase();return o==="oct"||o==="lin"||o==="dec"?o:n}paramsAfter(t){return this.readParamsFrom(1+t)}paramAfter(t,n){let o=n.toLowerCase();return this.paramsAfter(t).find(([i])=>i.toLowerCase()===o)?.[1]}paramsAfterExcept(t,n){let o=new Set(n.map((i)=>i.toLowerCase()));return this.paramsAfter(t).filter(([i])=>!o.has(i.toLowerCase()))}paramsAfterKeyword(t){let n=this.findKeyword(t);if(n===void 0)return;return this.readParamsFrom(n.tokenIndex+n.tokenCount)}argsBeforeKeyword(t,n=0){let i=this.findKeyword(t,n)?.tokenIndex??this.tokens.length;return this.tokens.slice(1+n,i).map((r)=>gT(r)??r.raw)}restJoined(t){return this.argsAfter(t).join(" ")}findKeyword(t,n=0){let o=t.endsWith(":"),i=o?t.slice(0,-1):t;for(let r=1+n;r<this.tokens.length;r+=1){let s=this.tokens[r],a=gT(s);if(a===void 0)continue;if(a.toLowerCase()!==i.toLowerCase())continue;if(o){let c=this.tokens[r+1];if(c?.type!=="punctuation"||c.value!==":")continue;return{argIndex:r-1,tokenIndex:r,tokenCount:2}}return{argIndex:r-1,tokenIndex:r,tokenCount:1}}return}readParamsFrom(t){let n=[],o=t;while(o<this.tokens.length){let i=this.tokens[o];if(i===void 0)break;if(UUt(i)){o+=1;continue}let r=this.tokens[o+1],s=this.tokens[o+2];if(r?.type==="operator"&&r.value==="="&&s!==void 0&&!UUt(s)){let a=gT(i),c=gT(s);if(a!==void 0&&c!==void 0)n.push([a,c]);o+=3;continue}o+=1}return n}},WUt=class e{name;constructor(t){this.name=t}static ground(){return new e("0")}getString(){return this.name}},JUt=class{raw;constructor(e){this.raw=e}getString(){return this.raw}},x1e=class{raw;constructor(e){this.raw=String(e)}getString(){return this.raw}};function $Ut(e){return e instanceof WUt?e:new WUt(e)}function yu(e){if(e instanceof x1e)return e;if(e instanceof JUt)return new x1e(e.getString());return new x1e(e)}function Jjo(e){if(typeof e==="object"&&!(e instanceof x1e)&&!(e instanceof JUt))return{magnitude:e.magnitude===void 0?void 0:yu(e.magnitude),phase:e.phase===void 0?void 0:yu(e.phase)};return{magnitude:yu(e)}}var Ine=class e{values;constructor(t=[]){if(t instanceof e)this.values=t.entries();else if(Array.isArray(t))this.values=t.map(([n,o])=>[n,yu(o)]);else this.values=Object.entries(t).map(([n,o])=>[n,yu(o)])}get(t){return this.values.find(([n])=>n.toLowerCase()===t.toLowerCase())?.[1]}set(t,n){let o=this.values.findIndex(([r])=>r.toLowerCase()===t.toLowerCase()),i=[t,yu(n)];if(o===-1)this.values.push(i);else this.values[o]=i}delete(t){let n=this.values.findIndex(([o])=>o.toLowerCase()===t.toLowerCase());if(n===-1)return!1;return this.values.splice(n,1),!0}entries(){return this.values.map(([t,n])=>[t,n])}getString(t){return this.values.map(([n,o])=>`${n}=${o.getString()}`).join(" ")}get isEmpty(){return this.values.length===0}};var wOe=class e extends $6{static spiceTokenKeys=[".ac"];type="ac";command=".ac";sweep;points;start;stop;constructor(t){super(t);this.sweep=t.sweep,this.points=t.points,this.start=yu(t.start),this.stop=yu(t.stop)}static fromSpiceTokens(t){let n=Aa.from(t);return new e({sweep:n.sweepArg(0,"dec"),points:Number(n.arg(1)??0),start:n.arg(2)??"",stop:n.arg(3)??"",originalSource:n.originalSource})}getChildren(){return[]}toSource(t){if(t?.format!=="pretty"&&this.originalSource!==void 0)return this.originalSource;return`${this.command} ${this.sweep} ${this.points} ${this.start.getString()} ${this.stop.getString()}`}};$6.register(wOe);var $jo=class e extends Ic{static spiceTokenKeys=[".control"];type="control";command=".control";lines;constructor(t){super(t);this.lines=t.lines}static fromSpiceTokens(t){let n=Aa.from(t);return new e({lines:t.childCards?.map((o)=>o.originalSource)??[],originalSource:n.originalSource})}getChildren(){return[]}toSource(t){if(t?.format!=="pretty"&&this.originalSource!==void 0)return this.originalSource;return[this.command,...this.lines,".endc"].join(`
`)}};Ic.register($jo);var TOe=class e extends $6{static spiceTokenKeys=[".dc"];type="dc";command=".dc";sweeps;constructor(t){super(t);let n="sweeps"in t?t.sweeps:[t];this.sweeps=n.map((o)=>({source:o.source,start:yu(o.start),stop:yu(o.stop),step:yu(o.step)}))}static fromSpiceTokens(t){let n=Aa.from(t);return new e({source:n.arg(0)??"",start:n.arg(1)??"",stop:n.arg(2)??"",step:n.arg(3)??"",originalSource:n.originalSource})}getChildren(){return[]}toSource(t){if(t?.format!=="pretty"&&this.originalSource!==void 0)return this.originalSource;return[this.command,...this.sweeps.flatMap((n)=>[n.source,n.start.getString(),n.stop.getString(),n.step.getString()])].join(" ")}};$6.register(TOe);var xne=class e extends Ic{static spiceTokenKeys=[".end"];type="end";command=".end";static fromSpiceTokens(t){return new e({originalSource:Aa.from(t).originalSource})}getChildren(){return[]}toSource(t){if(t?.format!=="pretty"&&this.originalSource!==void 0)return this.originalSource;return this.command}};Ic.register(xne);var Zjo=class e extends Ic{static spiceTokenKeys=[".include"];type="include";command=".include";path;constructor(t,n={}){super(n);this.path=typeof t==="string"?t:t.path}static fromSpiceTokens(t){let n=Aa.from(t);return new e(n.restJoined(0),{originalSource:n.originalSource})}getChildren(){return[]}toSource(t){if(t?.format!=="pretty"&&this.originalSource!==void 0)return this.originalSource;return`${this.command} ${this.path}`}};Ic.register(Zjo);var eqo=class e extends Ic{static spiceTokenKeys=[".lib"];type="lib";command=".lib";path;section;constructor(t={}){super(t);this.path=t.path,this.section=t.section}static fromSpiceTokens(t){let n=Aa.from(t);return new e({path:n.arg(0),section:n.arg(1),originalSource:n.originalSource})}getChildren(){return[]}toSource(t){if(t?.format!=="pretty"&&this.originalSource!==void 0)return this.originalSource;return[this.command,this.path,this.section].filter(Boolean).join(" ")}};Ic.register(eqo);var tqo=class e extends Ic{static spiceTokenKeys=[".measure"];type="measure";command=".measure";analysis;name;expression;constructor(t){super(t);this.analysis=t.analysis,this.name=t.name,this.expression=t.expression}static fromSpiceTokens(t){let n=Aa.from(t);return new e({analysis:n.arg(0),name:n.arg(1)??"",expression:n.restJoined(2),originalSource:n.originalSource})}getChildren(){return[]}toSource(t){if(t?.format!=="pretty"&&this.originalSource!==void 0)return this.originalSource;return[this.command,this.analysis,this.name,this.expression].filter(Boolean).join(" ")}};Ic.register(tqo);var ZUt=class e extends Ic{static spiceTokenKeys=[".model"];type="model";command=".model";name;modelType;params;constructor(t){super(t);this.name=t.name,this.modelType=t.type,this.params=new Ine(t.params)}static fromSpiceTokens(t){let n=Aa.from(t);return new e({name:n.arg(0)??"",type:n.arg(1)??"",params:n.paramsAfter(2),originalSource:n.originalSource})}getChildren(){return[]}toSource(t){if(t?.format!=="pretty"&&this.originalSource!==void 0)return this.originalSource;let n=this.params.getString(t);return[this.command,this.name,this.modelType,n&&`(${n})`].filter(Boolean).join(" ")}};Ic.register(ZUt);var DOe=class e extends $6{static spiceTokenKeys=[".op"];type="op";command=".op";static fromSpiceTokens(t){return new e({originalSource:Aa.from(t).originalSource})}getChildren(){return[]}toSource(t){if(t?.format!=="pretty"&&this.originalSource!==void 0)return this.originalSource;return this.command}};$6.register(DOe);var NOe=class e extends Ic{static spiceTokenKeys=[".options"];type="options";command=".options";values;constructor(t,n={}){super(n);this.values=new Ine(t)}static fromSpiceTokens(t){let n=Aa.from(t);return new e(n.paramsAfter(0),{originalSource:n.originalSource})}getChildren(){return[]}toSource(t){if(t?.format!=="pretty"&&this.originalSource!==void 0)return this.originalSource;return`${this.command} ${this.values.getString(t)}`.trimEnd()}};Ic.register(NOe);var nqo=class e extends Ic{static spiceTokenKeys=[".param"];type="param";command=".param";values;constructor(t,n={}){super(n);this.values=new Ine(t)}static fromSpiceTokens(t){let n=Aa.from(t);return new e(n.paramsAfter(0),{originalSource:n.originalSource})}getChildren(){return[]}toSource(t){if(t?.format!=="pretty"&&this.originalSource!==void 0)return this.originalSource;return`${this.command} ${this.values.getString(t)}`.trimEnd()}};Ic.register(nqo);function oqo(e){let t=e.trim().replace(/^\.print\s+/i,""),[n,...o]=t.split(/\s+/),i=o.join(" ");return{analysis:n,expressions:i.length===0?[]:i.split(",").map((r)=>r.trim())}}var ROe=class e extends Ic{static spiceTokenKeys=[".print"];type="print";command=".print";analysis;expressions;constructor(t={}){super(t);this.analysis=t.analysis,this.expressions=t.expressions??[]}static fromSpiceTokens(t){let n=Aa.from(t);return new e({...oqo(n.originalSource),originalSource:n.originalSource})}getChildren(){return[]}toSource(t){if(t?.format!=="pretty"&&this.originalSource!==void 0)return this.originalSource;return[this.command,this.analysis,this.expressions.length>0?this.expressions.join(", "):void 0].filter(Boolean).join(" ")}};Ic.register(ROe);var iqo=class e extends Ic{static spiceTokenKeys=[".probe"];type="probe";command=".probe";expressions;constructor(t=[],n={}){super(n);this.expressions=t}static fromSpiceTokens(t){let n=Aa.from(t);return new e(n.args(),{originalSource:n.originalSource})}getChildren(){return[]}toSource(t){if(t?.format!=="pretty"&&this.originalSource!==void 0)return this.originalSource;return[this.command,...this.expressions].join(" ")}};Ic.register(iqo);var rqo=class e extends Ic{static spiceTokenKeys=[".text"];type="pspice_text";command=".TEXT";args;constructor(t,n={}){super(n);this.args=t}static fromSpiceTokens(t){let n=Aa.from(t);return new e(n.args(),{originalSource:n.originalSource})}getChildren(){return[]}toSource(t){if(Cne(t,".TEXT"),t?.format!=="pretty"&&this.originalSource!==void 0)return this.originalSource;return[this.command,...this.args].join(" ")}};Ic.register(rqo);var sqo=class e extends Ic{static spiceTokenKeys=[".vector"];type="pspice_vector";command=".VECTOR";args;constructor(t,n={}){super(n);this.args=t}static fromSpiceTokens(t){let n=Aa.from(t);return new e(n.args(),{originalSource:n.originalSource})}getChildren(){return[]}toSource(t){if(Cne(t,".VECTOR"),t?.format!=="pretty"&&this.originalSource!==void 0)return this.originalSource;return[this.command,...this.args].join(" ")}};Ic.register(sqo);var aqo=class e extends Ic{static spiceTokenKeys=[".watch"];type="pspice_watch";command=".WATCH";args;constructor(t,n={}){super(n);this.args=t}static fromSpiceTokens(t){let n=Aa.from(t);return new e(n.args(),{originalSource:n.originalSource})}getChildren(){return[]}toSource(t){if(Cne(t,".WATCH"),t?.format!=="pretty"&&this.originalSource!==void 0)return this.originalSource;return[this.command,...this.args].join(" ")}};Ic.register(aqo);var QOe=class e extends Ic{static spiceTokenKeys=[".save"];type="save";command=".save";expressions;constructor(t,n={}){super(n);this.expressions=t}static fromSpiceTokens(t){let n=Aa.from(t);return new e(n.args(),{originalSource:n.originalSource})}getChildren(){return[]}toSource(t){if(t?.format!=="pretty"&&this.originalSource!==void 0)return this.originalSource;return[this.command,...this.expressions].join(" ")}};Ic.register(QOe);var eWt=class e extends Ic{static spiceTokenKeys=[".subckt"];type="subckt";command=".subckt";name;pins;params;cards;endsName;constructor(t){super(t);this.name=t.name,this.pins=(t.pins??[]).map($Ut),this.params=new Ine(t.params),this.cards=t.cards??[],this.endsName=t.endsName}static fromSpiceTokens(t){let n=Aa.from(t),o=t.endCard===void 0?void 0:Aa.from(t.endCard);return new e({name:n.arg(0)??"",pins:n.argsBeforeKeyword("params:",1),params:n.paramsAfterKeyword("params:"),cards:t.childCards?.map((i)=>J6.parseSpiceTokens(i)),endsName:o?.arg(0),originalSource:n.originalSource})}add(t){this.cards.push(t)}getChildren(){return this.cards}toSource(t){if(t?.format!=="pretty"&&this.originalSource!==void 0)return this.originalSource;let n=this.params.getString(t);return[[this.command,this.name,...this.pins.map((o)=>o.getString()),n?"params:":void 0,n||void 0].filter((o)=>o!==void 0).join(" "),...this.cards.map((o)=>o.toSource(t)),[".ends",this.endsName??this.name].join(" ")].join(`
`)}};Ic.register(eWt);var cqo=class e extends Ic{static spiceTokenKeys=[".temp"];type="temp";command=".temp";values;constructor(t,n={}){super(n);this.values=t.map(yu)}static fromSpiceTokens(t){let n=Aa.from(t);return new e(n.args(),{originalSource:n.originalSource})}getChildren(){return[]}toSource(t){if(t?.format!=="pretty"&&this.originalSource!==void 0)return this.originalSource;return[this.command,...this.values.map((n)=>n.getString())].join(" ")}};Ic.register(cqo);var kOe=class e extends $6{static spiceTokenKeys=[".tran"];type="tran";command=".tran";step;stop;start;maxStep;uic;pspiceOp;constructor(t){super(t);this.step=t.step===void 0?void 0:yu(t.step),this.stop=yu(t.stop),this.start=t.start===void 0?void 0:yu(t.start),this.maxStep=t.maxStep===void 0?void 0:yu(t.maxStep),this.uic=t.uic,this.pspiceOp=t.pspiceOp??!1}static fromSpiceTokens(t){let n=Aa.from(t);return new e({step:n.arg(0),stop:n.arg(1)??"",start:n.arg(2),maxStep:n.arg(3),uic:n.hasKeyword("uic"),pspiceOp:n.originalSource.trimStart().toLowerCase().startsWith(".tran/op"),originalSource:n.originalSource})}getChildren(){return[]}toSource(t){if(this.pspiceOp)Cne(t,".TRAN/OP");if(t?.format!=="pretty"&&this.originalSource!==void 0)return this.originalSource;return[this.command,this.step?.getString(),this.stop.getString(),this.start?.getString(),this.maxStep?.getString(),this.uic?"UIC":void 0].filter(Boolean).join(" ")}};$6.register(kOe);var lqo=class e extends Ic{static spiceTokenKeys=["__default__"];type="unknown_dot_command";command;args;constructor(t){super(t);this.command=t.command,this.args=t.args}static fromSpiceTokens(t){let n=Aa.from(t);return new e({command:n.headRaw(),args:n.args(),originalSource:n.originalSource})}getChildren(){return[]}toSource(t){if(t?.format!=="pretty"&&this.originalSource!==void 0)return this.originalSource;return[this.command,...this.args].join(" ")}};Ic.register(lqo);var bd=class extends J6{cardKind="element";name;nodes;params;constructor(e){super(e);this.name=e.name,this.nodes=(e.nodes??[]).map($Ut),this.params=new Ine(e.params)}renameNode(e,t){for(let n of this.nodes)if(n.name===e)n.name=t}getChildren(){return[]}formatParts(e,t){if(t?.format!=="pretty"&&this.originalSource!==void 0)return this.originalSource;let n=this.params.getString(t);return[...e,n||void 0].filter((o)=>o!==void 0&&o.length>0).join(" ")}},dqo=class e extends bd{static spiceTokenKeys=["Q"];type="bjt";model;constructor(t){super({...t,nodes:t.nodes.filter((n)=>n!==void 0)});this.model=t.model}static fromSpiceTokens(t){let n=Aa.from(t),o=n.args().length>4,i=o?[n.arg(0)??"",n.arg(1)??"",n.arg(2)??"",n.arg(3)??""]:[n.arg(0)??"",n.arg(1)??"",n.arg(2)??""],r=o?4:3;return new e({name:n.head(),nodes:i,model:n.arg(r)??"",params:n.paramsAfter(r+1),originalSource:n.originalSource})}toSource(t){return this.formatParts([this.name,...this.nodes.map((n)=>n.getString()),this.model],t)}};bd.register(dqo);var uqo=class e extends bd{static spiceTokenKeys=["C"];type="capacitor";capacitance;initialCondition;constructor(t){super(t);this.capacitance=yu(t.capacitance),this.initialCondition=t.ic===void 0?void 0:yu(t.ic)}static fromSpiceTokens(t){let n=Aa.from(t);return new e({name:n.head(),nodes:[n.arg(0)??"",n.arg(1)??""],capacitance:n.arg(2)??"",ic:n.paramAfter(3,"ic"),params:n.paramsAfterExcept(3,["ic"]),originalSource:n.originalSource})}toSource(t){return this.formatParts([this.name,...this.nodes.map((n)=>n.getString()),this.capacitance.getString(),this.initialCondition===void 0?void 0:`IC=${this.initialCondition.getString()}`],t)}};bd.register(uqo);var hqo=class e extends bd{static spiceTokenKeys=["F"];type="cccs";source;gain;constructor(t){super({...t,nodes:t.output});this.source=t.source,this.gain=yu(t.gain)}static fromSpiceTokens(t){let n=Aa.from(t);return new e({name:n.head(),output:[n.arg(0)??"",n.arg(1)??""],source:n.arg(2)??"",gain:n.arg(3)??"",originalSource:n.originalSource})}toSource(t){return this.formatParts([this.name,...this.nodes.map((n)=>n.getString()),this.source,this.gain.getString()],t)}};bd.register(hqo);var mqo=class e extends bd{static spiceTokenKeys=["H"];type="ccvs";source;transresistance;constructor(t){super({...t,nodes:t.output});this.source=t.source,this.transresistance=yu(t.transresistance)}static fromSpiceTokens(t){let n=Aa.from(t);return new e({name:n.head(),output:[n.arg(0)??"",n.arg(1)??""],source:n.arg(2)??"",transresistance:n.arg(3)??"",originalSource:n.originalSource})}toSource(t){return this.formatParts([this.name,...this.nodes.map((n)=>n.getString()),this.source,this.transresistance.getString()],t)}};bd.register(mqo);function tWt(e){let t={},n=e.argAfterKeyword("dc"),o=e.keywordIndex("ac");if(n!==void 0)t.dc=n;else if(o===-1)t.dc=e.arg(2);if(o!==-1)t.ac={magnitude:e.arg(o+1),phase:e.arg(o+2)};return t}var C1e=class extends bd{dc;ac;transient;constructor(e){super(e);this.dc=e.dc===void 0?void 0:yu(e.dc),this.ac=e.ac===void 0?void 0:Jjo(e.ac),this.transient=e.transient}getChildren(){return this.transient===void 0?[]:[this.transient]}sourceParts(){let e=[this.name,...this.nodes.map((t)=>t.getString())];if(this.dc!==void 0)e.push("DC",this.dc.getString());if(this.ac!==void 0){if(e.push("AC"),this.ac.magnitude!==void 0)e.push(this.ac.magnitude.getString());if(this.ac.phase!==void 0)e.push(this.ac.phase.getString())}if(this.transient!==void 0)e.push(this.transient.toSource());return e}},pqo=class e extends C1e{static spiceTokenKeys=["I"];type="current_source";static fromSpiceTokens(t){let n=Aa.from(t),o=tWt(n);return new e({name:n.head(),nodes:[n.arg(0)??"",n.arg(1)??""],dc:o.dc,ac:o.ac,originalSource:n.originalSource})}toSource(t){return this.formatParts(this.sourceParts(),t)}};C1e.register(pqo);var Aqo=class e extends bd{static spiceTokenKeys=["D"];type="diode";model;constructor(t){super(t);this.model=t.model}static fromSpiceTokens(t){let n=Aa.from(t);return new e({name:n.head(),nodes:[n.arg(0)??"",n.arg(1)??""],model:n.arg(2)??"",params:n.paramsAfter(3),originalSource:n.originalSource})}toSource(t){return this.formatParts([this.name,...this.nodes.map((n)=>n.getString()),this.model],t)}};bd.register(Aqo);var _qo=class e extends bd{static spiceTokenKeys=["L"];type="inductor";inductance;initialCondition;constructor(t){super(t);this.inductance=yu(t.inductance),this.initialCondition=t.ic===void 0?void 0:yu(t.ic)}static fromSpiceTokens(t){let n=Aa.from(t);return new e({name:n.head(),nodes:[n.arg(0)??"",n.arg(1)??""],inductance:n.arg(2)??"",ic:n.paramAfter(3,"ic"),params:n.paramsAfterExcept(3,["ic"]),originalSource:n.originalSource})}toSource(t){return this.formatParts([this.name,...this.nodes.map((n)=>n.getString()),this.inductance.getString(),this.initialCondition===void 0?void 0:`IC=${this.initialCondition.getString()}`],t)}};bd.register(_qo);var gqo=class e extends bd{static spiceTokenKeys=["M"];type="mosfet";model;constructor(t){super(t);this.model=t.model}static fromSpiceTokens(t){let n=Aa.from(t);return new e({name:n.head(),nodes:[n.arg(0)??"",n.arg(1)??"",n.arg(2)??"",n.arg(3)??""],model:n.arg(4)??"",params:n.paramsAfter(5),originalSource:n.originalSource})}toSource(t){return this.formatParts([this.name,...this.nodes.map((n)=>n.getString()),this.model],t)}};bd.register(gqo);var fqo=new Set(["VALUE","TABLE","LAPLACE","FREQ","CHEBYSHEV"]);function nWt(e){return e!==void 0&&fqo.has(e.toUpperCase())}function oWt(e,t,n){let o=e?.dialect??"generic";if(o==="pspice"||o==="ngspice"&&(t==="VALUE"||t==="TABLE"))return;Cne(e,n)}var yqo=class e extends bd{type="pspice_abm_voltage_source";form;args;constructor(t){super({...t,nodes:t.output});this.form=t.form,this.args=t.args}static fromTokenCard(t){return new e({name:t.head(),output:[t.arg(0)??"",t.arg(1)??""],form:t.arg(2)?.toUpperCase(),args:t.argsAfter(3),originalSource:t.originalSource})}toSource(t){return oWt(t,this.form,`${this.form} behavioral voltage source`),this.formatParts([this.name,...this.nodes.map((n)=>n.getString()),this.form,...this.args],t)}},xqo=class e extends bd{type="pspice_abm_current_source";form;args;constructor(t){super({...t,nodes:t.output});this.form=t.form,this.args=t.args}static fromTokenCard(t){return new e({name:t.head(),output:[t.arg(0)??"",t.arg(1)??""],form:t.arg(2)?.toUpperCase(),args:t.argsAfter(3),originalSource:t.originalSource})}toSource(t){return oWt(t,this.form,`${this.form} behavioral current source`),this.formatParts([this.name,...this.nodes.map((n)=>n.getString()),this.form,...this.args],t)}};function Cqo(e){return yqo.fromTokenCard(Aa.from(e))}function Iqo(e){return xqo.fromTokenCard(Aa.from(e))}var bqo=class e extends bd{static spiceTokenKeys=["R"];type="resistor";resistance;constructor(t){super({...t,nodes:t.nodes.filter((n)=>n!==void 0)});this.resistance=yu(t.resistance)}static fromSpiceTokens(t){let n=Aa.from(t);return new e({name:n.head(),nodes:[n.arg(0)??"",n.arg(1)??""],resistance:n.arg(2)??"",params:n.paramsAfter(3),originalSource:n.originalSource})}toSource(t){return this.formatParts([this.name,...this.nodes.map((n)=>n.getString()),this.resistance.getString()],t)}};bd.register(bqo);var Sqo=class e extends bd{static spiceTokenKeys=["X"];type="subckt_instance";subckt;constructor(t){super(t);this.subckt=t.subckt}static fromSpiceTokens(t){let n=Aa.from(t);return new e({name:n.head(),nodes:n.argsUntilLast(),subckt:n.lastArg()??"",originalSource:n.originalSource})}toSource(t){return this.formatParts([this.name,...this.nodes.map((n)=>n.getString()),this.subckt],t)}};bd.register(Sqo);var Pqo=class e extends bd{static spiceTokenKeys=["__unknown_element__"];type="unknown_element";designator;tokens;constructor(t){super(t);this.designator=t.designator,this.tokens=t.tokens}static fromSpiceTokens(t){let n=Aa.from(t),o=n.head();return new e({name:o,designator:n.headDesignator(),tokens:n.args(),originalSource:n.originalSource})}toSource(t){return this.formatParts([this.name,...this.tokens],t)}};bd.register(Pqo);var vqo=class e extends bd{static spiceTokenKeys=["G"];type="vccs";transconductance;constructor(t){super({...t,nodes:[...t.output,...t.control]});this.transconductance=yu(t.transconductance)}static fromSpiceTokens(t){let n=Aa.from(t);if(nWt(n.arg(2)))return Iqo(t);return new e({name:n.head(),output:[n.arg(0)??"",n.arg(1)??""],control:[n.arg(2)??"",n.arg(3)??""],transconductance:n.arg(4)??"",originalSource:n.originalSource})}toSource(t){return this.formatParts([this.name,...this.nodes.map((n)=>n.getString()),this.transconductance.getString()],t)}};bd.register(vqo);var Eqo=class e extends bd{static spiceTokenKeys=["E"];type="vcvs";gain;constructor(t){super({...t,nodes:[...t.output,...t.control]});this.gain=yu(t.gain)}static fromSpiceTokens(t){let n=Aa.from(t);if(nWt(n.arg(2)))return Cqo(t);return new e({name:n.head(),output:[n.arg(0)??"",n.arg(1)??""],control:[n.arg(2)??"",n.arg(3)??""],gain:n.arg(4)??"",originalSource:n.originalSource})}toSource(t){return this.formatParts([this.name,...this.nodes.map((n)=>n.getString()),this.gain.getString()],t)}};bd.register(Eqo);var Mqo=class e extends C1e{static spiceTokenKeys=["V"];type="voltage_source";static fromSpiceTokens(t){let n=Aa.from(t),o=tWt(n);return new e({name:n.head(),nodes:[n.arg(0)??"",n.arg(1)??""],dc:o.dc,ac:o.ac,originalSource:n.originalSource})}toSource(t){return this.formatParts(this.sourceParts(),t)}};C1e.register(Mqo);var Bqo=class extends MOe{type="netlist";title;cards;end;dialect;trailingNewline;lineEnding;constructor(e={}){super();this.title=e.title,this.cards=e.cards??[],this.end=e.end instanceof xne?e.end:e.end===!1?void 0:new xne,this.dialect=e.dialect??"generic",this.trailingNewline=e.trailingNewline??!0,this.lineEnding=e.lineEnding??`
`}get elements(){return this.cards.filter((e)=>e.cardKind==="element")}get directives(){return this.cards.filter((e)=>e.cardKind==="directive")}get subckts(){return this.cards.filter((e)=>e instanceof eWt)}get models(){return this.cards.filter((e)=>e instanceof ZUt)}get analyses(){return this.cards.filter((e)=>e instanceof $6)}add(e){this.cards.push(e)}addAll(e){this.cards.push(...e)}findElement(e){return this.elements.find((t)=>t.name.toLowerCase()===e.toLowerCase())}findModel(e){return this.models.find((t)=>t.name.toLowerCase()===e.toLowerCase())}findSubckt(e){return this.subckts.find((t)=>t.name.toLowerCase()===e.toLowerCase())}renameNode(e,t){for(let n of this.elements)n.renameNode(e,t);for(let n of this.subckts)for(let o of n.cards)if(o instanceof bd)o.renameNode(e,t)}getChildren(){return[...this.cards,...this.end===void 0?[]:[this.end]]}getString(e={}){return this.toSource(e)}toSource(e={}){let t=e.end??"auto",o=[this.title,...this.cards.map((i)=>i.toSource(e)),t==="never"?void 0:t==="always"?(this.end??new xne).toSource(e):this.end?.toSource(e)].filter((i)=>i!==void 0).join(this.lineEnding);return this.trailingNewline?`${o}${this.lineEnding}`:o}},wqo=class e extends jUt{static spiceTokenKeys=["blank"];type="blank";cardKind="blank";originalSource;constructor(t={}){super();this.originalSource=t.originalSource}static fromSpiceTokens(t){return new e({originalSource:Aa.from(t).originalSource})}getChildren(){return[]}toSource(){return this.originalSource??""}};J6.register(wqo);var Tqo=class e extends jUt{static spiceTokenKeys=["comment"];type="comment";cardKind="comment";text;marker;originalSource;constructor(t,n={}){super();this.text=t,this.marker=n.marker??"*",this.originalSource=n.originalSource}static fromSpiceTokens(t){let n=Aa.from(t),[o]=n.tokens;if(o?.type==="comment")return new e(o.value,{marker:o.marker,originalSource:n.originalSource});return new e(n.originalSource,{originalSource:n.originalSource})}getChildren(){return[]}toSource(t){if(t?.format!=="pretty"&&this.originalSource!==void 0)return this.originalSource;return`${this.marker} ${this.text}`.trimEnd()}};J6.register(Tqo);var Dqo=class e extends J6{static spiceTokenKeys=["raw","error","number","operator","punctuation"];type="raw_card";cardKind="raw";source;constructor(t){super({originalSource:t});this.source=t}static fromSpiceTokens(t){return new e(Aa.from(t).originalSource)}getChildren(){return[]}toSource(){return this.source}};J6.register(Dqo);var Nqo=/^[+-]?(?:(?:\d+(?:\.\d*)?)|(?:\.\d+))(?:[eE][+-]?\d+)?([a-zA-Z]+)?$/,XUt=new Set(["=","+","-","*","/","^"]),KUt=new Set(["(",")",",",":"]),Rqo={f:0.000000000000001,p:0.000000000001,n:0.000000001,u:0.000001,m:0.001,k:1000,meg:1e6,g:1e9,t:1000000000000};function Qqo(e,t={}){let n=t.preserveWhitespace??!1,o=t.preserveComments??!0,i=t.normalizeNumbers??!0,r=[],s=[],a=0,c=1,l=1,d=!0,u=()=>({offset:a,line:c,column:l}),h=(x)=>({start:x,end:u()}),A=(x)=>{for(let C=0;C<x.length;C+=1){let I=x[C];if(a+=1,I===`
`)c+=1,l=1,d=!0;else l+=1}},m=(x)=>{if(x.type==="whitespace"&&!n)return;if(x.type==="comment"&&!o)return;r.push(x)},p=(x)=>x!==void 0&&x>="0"&&x<="9",g=(x)=>{let C=e[x],I=e[x+1];if(p(C))return!0;if(C==="."&&p(I))return!0;if((C==="+"||C==="-")&&!_())return!1;if((C==="+"||C==="-")&&p(I))return!0;return(C==="+"||C==="-")&&I==="."&&p(e[x+2])},_=()=>{let x=r.at(-1);return x===void 0||x.type==="whitespace"||x.type==="newline"||x.type==="continuation"||x.type==="operator"||x.type==="punctuation"},f=()=>{let x="";if(e[a]==="+"||e[a]==="-")x+=e[a],A(e[a]);while(p(e[a]))x+=e[a],A(e[a]);if(e[a]==="."){x+=e[a],A(e[a]);while(p(e[a]))x+=e[a],A(e[a])}if(e[a]==="e"||e[a]==="E"){if(x+=e[a],A(e[a]),e[a]==="+"||e[a]==="-")x+=e[a],A(e[a]);while(p(e[a]))x+=e[a],A(e[a])}while(e[a]!==void 0&&e[a]>="a"&&e[a]<="z"||e[a]!==void 0&&e[a]>="A"&&e[a]<="Z")x+=e[a],A(e[a]);return x},y=(x,C)=>{let I=x.match(Nqo);if(!I)return!1;let b=I[1],P=b?.toLowerCase(),E=b===void 0?x:x.slice(0,-b.length),B=Number(E),w=i&&!Number.isNaN(B)?B*(P===void 0?1:Rqo[P]??1):null;return m({type:"number",raw:x,value:w,unitSuffix:b,range:C}),!0};while(a<e.length){let x=u(),C=e[a],I=e[a+1];if(C==="\r"||C===`
`){let E=C==="\r"&&I===`
`?`\r
`:C;A(E),m({type:"newline",raw:E,range:h(x)});continue}if(C===" "||C==="\t"){let E="";while(e[a]===" "||e[a]==="\t")E+=e[a],A(e[a]);m({type:"whitespace",raw:E,range:h(x)});continue}if(d&&C==="+"){A(C),d=!1,m({type:"continuation",raw:C,range:h(x)});continue}if(d&&C==="*"||C===";"||C==="$"){let E=C,B="";while(a<e.length&&e[a]!==`
`&&e[a]!=="\r")B+=e[a],A(e[a]);d=!1,m({type:"comment",marker:E,raw:B,value:B.slice(1).trimStart(),range:h(x)});continue}if(C==="#"){let E="";while(a<e.length&&e[a]!==`
`&&e[a]!=="\r")E+=e[a],A(e[a]);let B=h(x),w={message:"Unsupported preprocessor-style line",raw:E,range:B};s.push(w),d=!1,m({type:"error",raw:E,message:w.message,range:B});continue}if(C==='"'||C==="'"){let E=C,B="",w="";A(C),B+=C;while(a<e.length&&e[a]!==E){if(e[a]===`
`||e[a]==="\r")break;w+=e[a],B+=e[a],A(e[a])}if(e[a]===E)B+=E,A(E),m({type:"string",quote:E,raw:B,value:w,range:h(x)});else{let T=h(x),Q={message:"Unterminated string",raw:B,range:T};s.push(Q),m({type:"error",raw:B,message:Q.message,range:T})}d=!1;continue}if(g(a)){let E=f();if(d=!1,y(E,h(x)))continue}if(XUt.has(C)){A(C),d=!1,m({type:"operator",raw:C,value:C,range:h(x)});continue}if(KUt.has(C)){A(C),d=!1,m({type:"punctuation",raw:C,value:C,range:h(x)});continue}let b="";while(a<e.length&&![" ","\t","\r",`
`,'"',"'",";","$"].includes(e[a])&&!XUt.has(e[a])&&!KUt.has(e[a]))b+=e[a],A(e[a]);if(b.length===0){A(C);let E=h(x),B={message:`Unexpected character "${C}"`,raw:C,range:E};s.push(B),m({type:"error",raw:C,message:B.message,range:E});continue}d=!1;let P=h(x);if(b.startsWith(".")){m({type:"directive",raw:b,value:b.slice(1).toLowerCase(),range:P});continue}if(y(b,P))continue;m({type:"identifier",raw:b,value:b,range:P})}return{tokens:r,errors:s,source:{text:e,lineCount:c}}}function iWt(e,t={}){let n=Hqo(e),o=Lqo(e),i=o[0],r=i!==void 0&&Fqo(i)?i.originalSource:void 0,s=r===void 0?o:o.slice(1),a=kqo(s,t),c=a.findIndex((d)=>d instanceof xne),l=c===-1?void 0:a.splice(c,1)[0];return new Bqo({title:r,cards:a,end:l??!1,dialect:t.dialect,trailingNewline:n.trailingNewline,lineEnding:n.lineEnding})}function kqo(e,t){return e.map((n)=>J6.parseSpiceTokens(n))}function Lqo(e){let t=Qqo(e,{preserveWhitespace:!0,preserveComments:!0,normalizeNumbers:!0});return qjo(jjo(t.tokens))}function Fqo(e){let t=BOe(e.tokens),[n]=t;if(n===void 0)return!1;if(n.type==="directive"||n.type==="comment")return!1;if(n.type!=="identifier")return!1;if(t.length===1)return!0;return J6.classes[n.raw[0]?.toLowerCase()??""]===void 0}function Hqo(e){let t=e.includes(`\r
`)?`\r
`:e.includes("\r")?"\r":`
`;return{trailingNewline:t===`\r
`?e.endsWith(`\r
`):e.endsWith(t),lineEnding:t}}var Oqo=(e)=>{let t=[];if(t.push(e.title),e.models.size>0)t.push(...Array.from(e.models.values()));for(let n of e.components)t.push(n.toSpiceString());if(e.optionStatements.length>0)t.push(...e.optionStatements);if(e.metadataComments.length>0)t.push(...e.metadataComments);for(let n of e.subcircuits)t.push(n.toSpiceString());if(e.printStatements.length>0)t.push(...e.printStatements);if(e.saveStatements.length>0)t.push(...e.saveStatements);if(e.controls.length>0)t.push(".control"),t.push(...e.controls),t.push(".endc");if(e.analysisCommand){let n=e.analysisCommand.trim().toLowerCase().split(/\s+/)[0];if(!t.some((i)=>i.trim().toLowerCase().split(/\s+/)[0]===n))t.push(e.analysisCommand)}return t.push(".END"),t.join(`
`)},zqo=class{title;components;nodes;controls;subcircuits;models;optionStatements;metadataComments;analysisCommand;printStatements;saveStatements;constructor(e="Circuit Netlist"){this.title=e,this.components=[],this.nodes=new Set,this.controls=[],this.subcircuits=[],this.models=new Map,this.optionStatements=[],this.metadataComments=[],this.analysisCommand=null,this.printStatements=[],this.saveStatements=[]}addComponent(e){this.components.push(e);for(let t of e.nodes)this.nodes.add(t)}addSubcircuit(e){if(this.subcircuits.find((t)=>t.name===e.name))return;this.subcircuits.push(e)}get tranCommand(){return this.analysisCommand?.trim().toLowerCase().startsWith(".tran")?this.analysisCommand:null}set tranCommand(e){this.analysisCommand=e}toSpiceString(){return Oqo(this)}},_1=class{name;command;nodes;constructor(e,t,n){this.name=e,this.command=t,this.nodes=n}toSpiceString(){return this.command.toSpiceString()}},Gqo=class{commandName="bjt";props;constructor(e){this.props=e}toSpiceString(){let{name:e,collector:t,base:n,emitter:o,substrate:i,model:r,area:s}=this.props,a=`Q${e} ${t} ${n} ${o}`;if(i)a+=` ${i}`;if(a+=` ${r}`,s)a+=` ${s}`;return a}},Yqo=class{commandName="capacitor";props;constructor(e){this.props=e}toSpiceString(){let{name:e,positiveNode:t,negativeNode:n,modelName:o,value:i,initialCondition:r}=this.props,s=`C${e} ${t} ${n}`;if(o)s+=` ${o}`;if(s+=` ${i}`,r)s+=` IC=${r}`;return s}},rWt=class{commandName="current_source";props;constructor(e){this.props=e}toSpiceString(){let{name:e,positiveNode:t,negativeNode:n,value:o,acMagnitude:i,acPhase:r}=this.props,s=`I${e} ${t} ${n}`;if(o)s+=` ${o}`;if(i){if(s+=` AC ${i}`,r)s+=` ${r}`}return s}},Vqo=class{commandName="diode";props;constructor(e){this.props=e}toSpiceString(){let{name:e,positiveNode:t,negativeNode:n,model:o,area:i}=this.props,r=`D${e} ${t} ${n} ${o}`;if(i)r+=` ${i}`;return r}},Uqo=class{commandName="inductor";props;constructor(e){this.props=e}toSpiceString(){let{name:e,positiveNode:t,negativeNode:n,model:o,value:i,initialCondition:r}=this.props,s=`L${e} ${t} ${n}`;if(o)s+=` ${o}`;if(s+=` ${i}`,r)s+=` IC=${r}`;return s}};var Wqo=class{commandName="mosfet";props;constructor(e){this.props=e}toSpiceString(){let{name:e,drain:t,gate:n,source:o,substrate:i,model:r,length:s,width:a,drainArea:c,sourceArea:l,drainPerimeter:d,sourcePerimeter:u,drainResistance:h,sourceResistance:A}=this.props,m=`M${e} ${t} ${n} ${o} ${i} ${r}`;return Object.entries({L:s,W:a,AD:c,AS:l,PD:d,PS:u,NRD:h,NRS:A}).forEach(([g,_])=>{if(_)m+=` ${g}=${_}`}),m}},Xqo=class{commandName="resistor";props;constructor(e){this.props=e}toSpiceString(){let{name:e,positiveNode:t,negativeNode:n,model:o,value:i}=this.props,r=`R${e} ${t} ${n}`;if(o)r+=` ${o}`;return r+=` ${i}`,r}},sWt=class{commandName="subcircuit_call";props;constructor(e){this.props=e}toSpiceString(){let{name:e,nodes:t,subcircuitName:n}=this.props;return`X${e} ${t.join(" ")} ${n}`}};var Kqo=class{commandName="voltage_controlled_switch";props;constructor(e){this.props=e}toSpiceString(){let{name:e,positiveNode:t,negativeNode:n,positiveControl:o,negativeControl:i,model:r}=this.props;return`S${e} ${t} ${n} ${o} ${i} ${r}`}},b1e=class{commandName="voltage_source";props;constructor(e){this.props=e}toSpiceString(){let{name:e,positiveNode:t,negativeNode:n,value:o,acMagnitude:i,acPhase:r}=this.props,s=`V${e} ${t} ${n}`;if(o)s+=` ${o}`;if(i){if(s+=` AC ${i}`,r)s+=` ${r}`}return s}};function jqo(e){if(e>=1e6)return`${e/1e6}MEG`;if(e>=1000)return`${e/1000}K`;return e.toString()}function qqo(e){if(e>=0.001)return`${e*1000}M`;if(e>=0.000001)return`${e*1e6}U`;if(e>=0.000000001)return`${e*1e9}N`;if(e>=0.000000000001)return`${e*1000000000000}P`;return e.toString()}function Jqo(e){if(e>=1)return e.toString();if(e>=0.001)return`${e*1000}m`;if(e>=0.000001)return`${e*1e6}u`;if(e>=0.000000001)return`${e*1e9}n`;if(e>=0.000000000001)return`${e*1000000000000}p`;return e.toString()}function aWt(e,t){if(!e)return t;let n=e.replace(/[^A-Za-z0-9_]/g,"_");if(!n)return t;if(/^[0-9]/.test(n))return`${t}_${n}`;return n}function $qo(e){if(!e)return"DC 0";let r=e.starts_closed??!1,s=e.closes_at??0,{opens_at:a,switching_frequency:c}=e,[l,d]=r?[5,0]:[0,5];if(c&&c>0){let u=1/c,h=a&&a>s?Math.min(a-s,u):0,A=h>0?h:Math.max(u/2,0.000000001);return`PULSE(${ul(l)} ${ul(d)} ${ul(s)} 1n 1n ${ul(A)} ${ul(u)})`}if(a!==void 0&&a>s){let u=Math.max(a-s,0.000000001),h=s+u*2;return`PULSE(${ul(l)} ${ul(d)} ${ul(s)} 1n 1n ${ul(u)} ${ul(h)})`}if(s>0){let u=s*2,h=Math.max(u/2,0.000000001);return`PULSE(${ul(l)} ${ul(d)} ${ul(s)} 1n 1n ${ul(h)} ${ul(u)})`}return`DC ${r?5:0}`}function ul(e){if(!Number.isFinite(e))return`${e}`;if(e===0)return"0";let t=Math.abs(e);if(t>=1000||t<=0.001)return Number(e.toExponential(6)).toString();return Number(e.toPrecision(6)).toString()}function WU(e){if(!Number.isFinite(e))return`${e}`;if(e===0)return"0";let t=[["T",1000000000000],["G",1e9],["MEG",1e6],["k",1000],["m",0.001],["u",0.000001],["n",0.000000001],["p",0.000000000001]];for(let[n,o]of t){let i=e/o;if(Math.abs(i)>=0.999999&&Math.abs(i)<999.999999){let r=Number(i.toPrecision(6));if(Math.abs(r*o-e)<=Math.abs(e)*0.000000001)return`${r}${n}`}}return ul(e)}var Zqo=0.000000000001,eJo=({component:e,nodes:t})=>{if("resistance"in e&&"name"in e){let n=e.resistance,o=new Xqo({name:e.name,positiveNode:t[0]||"0",negativeNode:t[1]||"0",value:jqo(n===0?Zqo:n)});return new _1(e.name,o,t)}return null},tJo=({netlist:e,component:t,nodes:n,simulationSwitchMap:o})=>{let i=aWt(t.name??t.source_component_id,"SW"),r=n[0]||"0",s=n[1]||"0",a=`NCTRL_${i}`,c=`SW_${i}`,l=o.get(t.source_component_id),d=$qo(l),u=new Kqo({name:i,positiveNode:r,negativeNode:s,positiveControl:a,negativeControl:"0",model:c});if(!e.models.has(c))e.models.set(c,`.MODEL ${c} SW(Ron=0.1 Roff=1e9 Vt=2.5 Vh=0.1)`);let h=`CTRL_${i}`,A=new b1e({name:h,positiveNode:a,negativeNode:"0",value:d}),m=new _1(h,A,[a,"0"]);return e.addComponent(m),new _1(i,u,[r,s,a,"0"])},nJo=({component:e,nodes:t})=>{if("capacitance"in e&&"name"in e){let n=new Yqo({name:e.name,positiveNode:t[0]||"0",negativeNode:t[1]||"0",value:qqo(e.capacitance)});return new _1(e.name,n,t)}return null},oJo=(e,t)=>{let n=e.find((i)=>i.name?.toLowerCase()==="anode"||i.port_hints?.includes("anode")),o=e.find((i)=>i.name?.toLowerCase()==="cathode"||i.port_hints?.includes("cathode"));return{positiveNode:t.get(n?.source_port_id??"")||"0",negativeNode:t.get(o?.source_port_id??"")||"0"}},cWt=({netlist:e,component:t,componentPorts:n,nodeMap:o,modelName:i,modelDefinition:r})=>{if("name"in t){let{positiveNode:s,negativeNode:a}=oJo(n,o),c=new Vqo({name:t.name,positiveNode:s,negativeNode:a,model:i});return e.models.set(i,r),new _1(t.name,c,[s,a])}return null},iJo=({netlist:e,component:t,componentPorts:n,nodeMap:o})=>cWt({netlist:e,component:t,componentPorts:n,nodeMap:o,modelName:"D",modelDefinition:".MODEL D D"}),rJo=({netlist:e,component:t,componentPorts:n,nodeMap:o})=>cWt({netlist:e,component:t,componentPorts:n,nodeMap:o,modelName:"LED",modelDefinition:".MODEL LED D(IS=1e-20 N=2 RS=10 CJO=2p EG=2.1 BV=5 IBV=10u)"}),sJo=({component:e,nodes:t})=>{if("inductance"in e&&"name"in e){let n=new Uqo({name:e.name,positiveNode:t[0]||"0",negativeNode:t[1]||"0",value:Jqo(e.inductance)});return new _1(e.name,n,t)}return null},aJo=({netlist:e,component:t,componentPorts:n,nodeMap:o})=>{if("name"in t){let i=n.find((g)=>g.name?.toLowerCase()==="drain"||g.port_hints?.includes("drain")),r=n.find((g)=>g.name?.toLowerCase()==="gate"||g.port_hints?.includes("gate")),s=n.find((g)=>g.name?.toLowerCase()==="source"||g.port_hints?.includes("source")),a=o.get(i?.source_port_id??"")||"0",c=o.get(r?.source_port_id??"")||"0",l=o.get(s?.source_port_id??"")||"0",d=l,u=t.channel_type??"n",h=t.mosfet_mode??"enhancement",A=`${u.toUpperCase()}MOS`,m=`${A}_${h.toUpperCase()}`;if(!e.models.has(m))if(h==="enhancement"){let g=u==="p"?-1:1;e.models.set(m,`.MODEL ${m} ${A} (VTO=${g} KP=0.1)`)}else e.models.set(m,`.MODEL ${m} ${A} (KP=0.1)`);let p=new Wqo({name:t.name,drain:a,gate:c,source:l,substrate:d,model:m});return new _1(t.name,p,[a,c,l])}return null},cJo=({netlist:e,component:t,componentPorts:n,nodeMap:o})=>{if("name"in t){let i=n.find((A)=>A.name?.toLowerCase()==="collector"||A.port_hints?.includes("collector")),r=n.find((A)=>A.name?.toLowerCase()==="base"||A.port_hints?.includes("base")),s=n.find((A)=>A.name?.toLowerCase()==="emitter"||A.port_hints?.includes("emitter"));if(!i||!r||!s)throw Error(`Transistor ${t.name} is missing required ports (collector, base, emitter)`);let a=o.get(i.source_port_id)||"0",c=o.get(r.source_port_id)||"0",l=o.get(s.source_port_id)||"0",d=t.transistor_type??"npn",u=d.toUpperCase();if(!e.models.has(u))e.models.set(u,`.MODEL ${u} ${d.toUpperCase()}`);let h=new Gqo({name:t.name,collector:a,base:c,emitter:l,model:u});return new _1(t.name,h,[a,c,l])}return null},lJo=({netlist:e,simulationVoltageSources:t,nodeMap:n})=>{for(let o of t){if(o.type!=="simulation_voltage_source")continue;if(o.is_dc_source===!1){let i=o.terminal1_source_port_id??o.terminal1_source_net_id,r=o.terminal2_source_port_id??o.terminal2_source_net_id;if(i&&r){let s=n.get(i)||"0",a=n.get(r)||"0",c="";if(o.wave_shape==="sinewave"){let d=o.voltage??(o.peak_to_peak_voltage??0)/2,u=o.frequency??0,h=0,A=0,m=o.phase??0;if(u>0)c=`SIN(0 ${d} ${u} 0 0 ${m})`;else c=`DC ${o.voltage??0}`}else if(o.wave_shape==="square"){let d=o.voltage??o.peak_to_peak_voltage??0,u=o.frequency??0,h=u===0?1/0:1/u,A=o.period===void 0?h:o.period/1000,m=o.duty_cycle??0.5,p=A*m,g=o.pulse_delay!==void 0?o.pulse_delay/1000:0,_=o.rise_time!==void 0?WU(o.rise_time/1000):"1n",f=o.fall_time!==void 0?WU(o.fall_time/1000):"1n",y=o.pulse_width===void 0?WU(p):WU(o.pulse_width/1000),x=WU(A);c=`PULSE(0 ${d} ${WU(g)} ${_} ${f} ${y} ${x})`}else if(o.voltage!==void 0)c=`DC ${o.voltage}`;if(c||o.ac_magnitude!==void 0){let l=new b1e({name:o.simulation_voltage_source_id,positiveNode:s,negativeNode:a,value:c,acMagnitude:o.ac_magnitude===void 0?void 0:ul(o.ac_magnitude),acPhase:o.ac_phase===void 0?void 0:ul(o.ac_phase)}),d=new _1(o.simulation_voltage_source_id,l,[s,a]);e.addComponent(d)}}}else{let i="terminal1_source_port_id"in o&&typeof o.terminal1_source_port_id==="string"?o.terminal1_source_port_id:void 0,r="terminal2_source_port_id"in o&&typeof o.terminal2_source_port_id==="string"?o.terminal2_source_port_id:void 0,s=o.positive_source_port_id??o.positive_source_net_id??i,a=o.negative_source_port_id??o.negative_source_net_id??r;if(s&&a){let c=n.get(s)||"0",l=n.get(a)||"0",d=new b1e({name:o.simulation_voltage_source_id,positiveNode:c,negativeNode:l,value:`DC ${o.voltage}`,acMagnitude:o.ac_magnitude===void 0?void 0:ul(o.ac_magnitude),acPhase:o.ac_phase===void 0?void 0:ul(o.ac_phase)}),u=new _1(o.simulation_voltage_source_id,d,[c,l]);e.addComponent(u)}}}},dJo=({netlist:e,simulationCurrentSources:t,nodeMap:n})=>{for(let o of t){if(o.type!=="simulation_current_source")continue;if(o.is_dc_source===!1){let i=o.terminal1_source_port_id??o.terminal1_source_net_id,r=o.terminal2_source_port_id??o.terminal2_source_net_id;if(i&&r){let s=n.get(i)||"0",a=n.get(r)||"0",c="";if(o.wave_shape==="sinewave"){let d=(o.peak_to_peak_current??0)/2,u=o.frequency??0,h=0,A=0,m=o.phase??0;if(u>0)c=`SIN(0 ${d} ${u} 0 0 ${m})`;else c=`DC ${d}`}else if(o.wave_shape==="square"){let d=o.peak_to_peak_current??0,u=o.frequency??0,h=u===0?1/0:1/u,A=o.duty_cycle??0.5,m=h*A,p=0,g="1n",_="1n";c=`PULSE(0 ${d} 0 1n 1n ${m} ${h})`}if(c||o.ac_magnitude!==void 0){let l=new rWt({name:o.simulation_current_source_id,positiveNode:s,negativeNode:a,value:c,acMagnitude:o.ac_magnitude===void 0?void 0:ul(o.ac_magnitude),acPhase:o.ac_phase===void 0?void 0:ul(o.ac_phase)}),d=new _1(o.simulation_current_source_id,l,[s,a]);e.addComponent(d)}}}else{let i="terminal1_source_port_id"in o&&typeof o.terminal1_source_port_id==="string"?o.terminal1_source_port_id:void 0,r="terminal2_source_port_id"in o&&typeof o.terminal2_source_port_id==="string"?o.terminal2_source_port_id:void 0,s=o.positive_source_port_id??o.positive_source_net_id??i,a=o.negative_source_port_id??o.negative_source_net_id??r;if(s&&a){let c=n.get(s)||"0",l=n.get(a)||"0",d=new rWt({name:o.simulation_current_source_id,positiveNode:c,negativeNode:l,value:`DC ${o.current}`,acMagnitude:o.ac_magnitude===void 0?void 0:ul(o.ac_magnitude),acPhase:o.ac_phase===void 0?void 0:ul(o.ac_phase)}),u=new _1(o.simulation_current_source_id,d,[c,l]);e.addComponent(u)}}}},uJo=["method","reltol","abstol","vntol"],hJo=(e,t)=>e.find((o)=>o.connected_source_net_ids.includes(t))?.connected_source_port_ids[0],I1e=({sourcePortId:e,sourceNetId:t,sourceTraces:n,nodeMap:o})=>{if(e)return o.get(e);if(!t)return;let i=hJo(n,t);if(!i)return;return o.get(i)},mJo=(e)=>aWt(`sense_${e.simulation_current_probe_id}`,"sense_current_probe"),pJo=(e)=>{switch(e){case"spice_transient_analysis":return"TRAN";case"spice_dc_operating_point":return"OP";case"spice_dc_sweep":return"DC";case"spice_ac_analysis":return"AC"}},AJo=(e)=>{switch(e){case"linear":return"lin";case"decade":return"dec";case"octave":return"oct"}},_Jo=(e)=>{if(e.experiment_type==="spice_transient_analysis"){let{time_per_step:c,end_time_ms:l,start_time_ms:d}=e;if(c===void 0||l===void 0)return null;let u=(d??0)/1000;return new kOe({step:ul(c/1000),stop:ul(l/1000),...u>0?{start:ul(u)}:{},uic:!0})}if(e.experiment_type==="spice_dc_operating_point")return new DOe;if(e.experiment_type==="spice_dc_sweep"){let{dc_sweep_voltage_source_id:c,dc_sweep_current_source_id:l,dc_sweep_start:d,dc_sweep_stop:u,dc_sweep_step:h}=e;if(d===void 0||u===void 0||h===void 0)return null;let A;if(c!==void 0)A=`V${c}`;else if(l!==void 0)A=`I${l}`;else return null;return new TOe({source:A,start:ul(d),stop:ul(u),step:ul(h)})}let{ac_sweep_type:t,ac_samples_per_interval:n,ac_sample_count:o,ac_start_frequency_hz:i,ac_stop_frequency_hz:r}=e;if(t===void 0||i===void 0||r===void 0)return null;let s=t==="linear"?o:n;if(s===void 0)return null;let a=AJo(t);return new wOe({sweep:a,points:s,start:ul(i),stop:ul(r)})},gJo=({netlist:e,simulationExperiment:t,simulationVoltageProbes:n,simulationCurrentProbes:o,sourceTraces:i,nodeMap:r})=>{let s=pJo(t.experiment_type),a=new Set,c=t.spice_options;if(c){let l={};for(let d of uJo){let u=c[d];if(u!==void 0)l[d]=u}if(Object.keys(l).length>0)e.optionStatements.push(new NOe(l).getString())}if(n.length>0){let l=[];for(let d of n){let u=I1e({sourcePortId:d.signal_input_source_port_id,sourceNetId:d.signal_input_source_net_id,sourceTraces:i,nodeMap:r});if(!u)continue;if(d.reference_input_source_port_id||d.reference_input_source_net_id){let A=I1e({sourcePortId:d.reference_input_source_port_id,sourceNetId:d.reference_input_source_net_id,sourceTraces:i,nodeMap:r});if(A&&A!=="0"){let m=`V(${u},${A})`;a.add(m),l.push({simulation_voltage_probe_id:d.simulation_voltage_probe_id,name:d.name,spice_vector:m,source_node_name:u,reference_node_name:A})}else if(u!=="0"){let m=`V(${u})`;a.add(m),l.push({simulation_voltage_probe_id:d.simulation_voltage_probe_id,name:d.name,spice_vector:m,source_node_name:u,reference_node_name:A})}}else if(u!=="0"){let A=`V(${u})`;a.add(A),l.push({simulation_voltage_probe_id:d.simulation_voltage_probe_id,name:d.name,spice_vector:A,source_node_name:u})}}if(l.length>0)for(let d of l)e.metadataComments.push(`* tscircuit_probe ${JSON.stringify(d)}`)}if(o.length>0){let l=new Set,d=[];for(let u of o){let h=I1e({sourcePortId:u.positive_source_port_id,sourceNetId:u.positive_source_net_id,sourceTraces:i,nodeMap:r}),A=I1e({sourcePortId:u.negative_source_port_id,sourceNetId:u.negative_source_net_id,sourceTraces:i,nodeMap:r});if(!h||!A)continue;let m=mJo(u),p=m,g=2;while(l.has(p))p=`${m}_${g++}`;l.add(p);let _=`V${p}`,f=`I(${_})`,y=new b1e({name:p,positiveNode:h,negativeNode:A,value:"DC 0"});e.addComponent(new _1(p,y,[h,A])),a.add(f),d.push({simulation_current_probe_id:u.simulation_current_probe_id,name:u.name,spice_vector:f,sense_voltage_source_name:_,positive_node_name:h,negative_node_name:A})}if(d.length>0)for(let u of d)e.metadataComments.push(`* tscircuit_current_probe ${JSON.stringify(u)}`)}if(a.size>0){let l=[...a].join(" "),d=new ROe({analysis:s,expressions:[l]});d.command=".PRINT",e.printStatements.push(d.getString());let u=new QOe([l]);u.command=".SAVE",e.saveStatements.push(u.getString())}e.analysisCommand=_Jo(t)?.getString()??null},bne="GENERIC_OPAMP",fJo=`
.SUBCKT ${bne} non_inverting_input inverting_input positive_supply negative_supply output
* Generic Op-Amp Model
E1 internal_output 0 non_inverting_input inverting_input 100k
Rin non_inverting_input inverting_input 10Meg
Rout internal_output output 75
D1 output positive_supply opamp_diode
D2 negative_supply output opamp_diode
.model opamp_diode D
.ENDS ${bne}
`.trim(),yJo=(e,t,n)=>{if(t.length===0)return;if(!e.models.has(bne))e.models.set(bne,fJo);for(let o of t){if(o.type!=="simulation_op_amp")continue;let i=n.get(o.non_inverting_input_source_port_id)??"0",r=n.get(o.inverting_input_source_port_id)??"0",s=n.get(o.output_source_port_id)??"0",a=n.get(o.positive_supply_source_port_id)??"0",c=n.get(o.negative_supply_source_port_id)??"0",l=[i,r,a,c,s],d=new sWt({name:o.simulation_op_amp_id,nodes:l,subcircuitName:bne}),u=new _1(o.simulation_op_amp_id,d,l);e.addComponent(u)}};function xJo(e){let t=[];for(let s of e.split(/\r?\n/)){let a=s.trim();if(/^\+/.test(a)&&t.length>0){t[t.length-1]+=` ${a.slice(1).trim()}`;continue}t.push(a)}let n=t.find((s)=>/^\.subckt\s+/i.test(s));if(!n)return null;let o=n.split(/\s+/),i=o[1],r=o.slice(2);if(!i||r.length===0)return null;return{modelName:i,pinNames:r}}function CJo(e,t,n){if(t.length===0)return;for(let o of t){let i=xJo(o.subcircuit_source);if(!i)continue;let{modelName:r,pinNames:s}=i;if(!e.models.has(r))e.models.set(r,o.subcircuit_source);let a=s.map((l)=>{let d=o.spice_pin_to_source_port_map[l];return n.get(d)??"0"}),c=new sWt({name:o.simulation_spice_subcircuit_id,nodes:a,subcircuitName:r});e.addComponent(new _1(o.simulation_spice_subcircuit_id,c,a))}}function lWt(e){let t=new zqo("* Circuit JSON to SPICE Netlist"),n=To(e).source_component.list(),o=To(e).source_port.list(),i=To(e).source_trace.list(),r=e.filter((C)=>C.type==="simulation_voltage_probe"),s=e.filter((C)=>C.type==="simulation_current_probe"),a=e.filter((C)=>C.type==="simulation_switch").map((C)=>C),c=e.filter((C)=>C.type==="simulation_op_amp"),l=e.filter((C)=>C.type==="simulation_spice_subcircuit"),d=new Map;for(let C of a)if(C.source_component_id)d.set(C.source_component_id,C);let u=YUt(e),h=new Map,A=new Map,m=1,p=new Set;if(r.length>0){for(let C of r)if(C.name)p.add(C.name)}let g=[...p].map((C)=>/^N(\d+)$/i.exec(C)).filter((C)=>C!==null).map((C)=>parseInt(C[1],10));if(g.length>0)m=Math.max(...g)+1;let _=new Set,f=new Set(To(e).source_net.list().filter((C)=>C.name?.toLowerCase().includes("gnd")).map((C)=>C.source_net_id));if(f.size>0){for(let C of To(e).source_trace.list())if(C.connected_source_port_ids.length>0){if(C.connected_source_net_ids.some((b)=>f.has(b))){let b=C.connected_source_port_ids[0],P=u.getNetConnectedToId(b);if(P)_.add(P)}}}let y=o.filter((C)=>C.name?.toLowerCase()==="gnd");for(let C of y){let I=u.getNetConnectedToId(C.source_port_id);if(I)_.add(I)}for(let C of To(e).simulation_voltage_source.list()){let I=C.negative_source_port_id??C.terminal2_source_port_id;if(I){let b=u.getNetConnectedToId(I);if(b)_.add(b)}}for(let C of _)A.set(C,"0");if(r.length>0)for(let C of r){if(!C.name)continue;if(C.reference_input_source_port_id||C.reference_input_source_net_id)continue;let I,{signal_input_source_port_id:b,signal_input_source_net_id:P}=C;if(b)I=u.getNetConnectedToId(b);else if(P){let E=i.find((B)=>B.connected_source_net_ids.includes(P));if(E&&E.connected_source_port_ids.length>0){let B=E.connected_source_port_ids[0];I=u.getNetConnectedToId(B)}}if(I){if(!A.has(I))A.set(I,C.name)}else if(b&&C.name)h.set(b,C.name)}for(let C of o){let I=C.source_port_id,b=u.getNetConnectedToId(I);if(b){if(!A.has(b))A.set(b,`N${m++}`);h.set(I,A.get(b))}}for(let C of i){let I=C.connected_source_port_ids.map((b)=>h.get(b)).find((b)=>b!==void 0);if(!I)continue;for(let b of C.connected_source_net_ids)h.set(b,I)}for(let C of o){let I=C.source_port_id;if(!h.has(I))h.set(I,`N${m++}`)}for(let C of n){if(C.type!=="source_component")continue;let I=To(e).source_port.list({source_component_id:C.source_component_id}).sort((P,E)=>(P.pin_number??0)-(E.pin_number??0)),b=I.map((P)=>h.get(P.source_port_id)||"0");if("ftype"in C){let P=null;switch(C.ftype){case"simple_resistor":{P=eJo({component:C,nodes:b});break}case"simple_switch":{P=tJo({netlist:t,component:C,nodes:b,simulationSwitchMap:d});break}case"simple_capacitor":{P=nJo({component:C,nodes:b});break}case"simple_diode":{P=iJo({netlist:t,component:C,componentPorts:I,nodeMap:h});break}case"simple_led":{P=rJo({netlist:t,component:C,componentPorts:I,nodeMap:h});break}case"simple_inductor":{P=sJo({component:C,nodes:b});break}case"simple_mosfet":{P=aJo({netlist:t,component:C,componentPorts:I,nodeMap:h});break}case"simple_transistor":{P=cJo({netlist:t,component:C,componentPorts:I,nodeMap:h});break}}if(P)t.addComponent(P)}}lJo({netlist:t,simulationVoltageSources:To(e).simulation_voltage_source.list(),nodeMap:h}),dJo({netlist:t,simulationCurrentSources:To(e).simulation_current_source.list(),nodeMap:h}),yJo(t,c,h),CJo(t,l,h);let x=e.find((C)=>C.type==="simulation_experiment");if(x)gJo({netlist:t,simulationExperiment:x,simulationVoltageProbes:r,simulationCurrentProbes:s,sourceTraces:i,nodeMap:h});return t}qa();pn();qa();pn();vp();wp();pn();wp();vp();wp();Gt();Yo();pn();var _Ue=Rt(l0(),1),Fmn=Rt(lo(),1);qa();Yo();Gt();Gt();Gt();pn();u0();u0();Gt();Gt();vp();vp();vp();wp();Gt();pn();pn();pn();Gt();function Sne(e,t){t=LOe(t||{R:255,G:255,B:255}),e=LOe(e);let n=e;if(e.A!==void 0)n={R:t.R+(e.R-t.R)*e.A,G:t.G+(e.G-t.G)*e.A,B:t.B+(e.B-t.B)*e.A};return bJo(IJo(n))}function IJo(e){let t=e.R/255,n=e.G/255,o=e.B/255;if(t>0.04045)t=Math.pow((t+0.055)/1.055,2.4);else t=t/12.92;if(n>0.04045)n=Math.pow((n+0.055)/1.055,2.4);else n=n/12.92;if(o>0.04045)o=Math.pow((o+0.055)/1.055,2.4);else o=o/12.92;t*=100,n*=100,o*=100;let i=t*0.4124+n*0.3576+o*0.1805,r=t*0.2126+n*0.7152+o*0.0722,s=t*0.0193+n*0.1192+o*0.9505;return{X:i,Y:r,Z:s}}function bJo(e){let i=e.Y/100,r=e.Z/108.883,s=e.X/95.047;if(s>0.008856)s=Math.pow(s,0.3333333333333333);else s=7.787*s+0.13793103448275862;if(i>0.008856)i=Math.pow(i,0.3333333333333333);else i=7.787*i+0.13793103448275862;if(r>0.008856)r=Math.pow(r,0.3333333333333333);else r=7.787*r+0.13793103448275862;let a=116*i-16,c=500*(s-i),l=200*(i-r);return{L:a,a:c,b:l}}function LOe(e){let t,n,o,i;if("R"in e)t=e.R,n=e.G,o=e.B,i=e.A;else t=e.r,n=e.g,o=e.b,i=e.a;let r={R:t,G:n,B:o};if(i!==void 0)r.A=i;return r}function S1e(e,t,n){if("R"in e||"r"in e)e=Sne(e,n);if("R"in t||"r"in t)t=Sne(t,n);let o=e.L,i=e.a,r=e.b,s=t.L,a=t.a,c=t.b,l=1,d=1,u=1,h=Math.sqrt(Math.pow(i,2)+Math.pow(r,2)),A=Math.sqrt(Math.pow(a,2)+Math.pow(c,2)),m=(h+A)/2,p=0.5*(1-Math.sqrt(Math.pow(m,7)/(Math.pow(m,7)+Math.pow(25,7)))),g=(1+p)*i,_=(1+p)*a,f=Math.sqrt(Math.pow(g,2)+Math.pow(r,2)),y=Math.sqrt(Math.pow(_,2)+Math.pow(c,2)),x=dWt(r,g),C=dWt(c,_),I=s-o,b=y-f,P=PJo(h,A,x,C),E=2*Math.sqrt(f*y)*Math.sin(XU(P)/2),B=(o+s)/2,w=(f+y)/2,T=vJo(h,A,x,C),Q=1-0.17*Math.cos(XU(T-30))+0.24*Math.cos(XU(2*T))+0.32*Math.cos(XU(3*T+6))-0.2*Math.cos(XU(4*T-63)),N=30*Math.exp(-Math.pow((T-275)/25,2)),F=Math.sqrt(Math.pow(w,7)/(Math.pow(w,7)+Math.pow(25,7))),H=1+0.015*Math.pow(B-50,2)/Math.sqrt(20+Math.pow(B-50,2)),z=1+0.045*w,Y=1+0.015*w*Q,U=-2*F*Math.sin(XU(2*N));return Math.sqrt(Math.pow(I/(H*l),2)+Math.pow(b/(z*d),2)+Math.pow(E/(Y*u),2)+U*(b/(z*d))*(E/(Y*u)))}function SJo(e){return e*(180/Math.PI)}function XU(e){return e*(Math.PI/180)}function dWt(e,t){if(e===0&&t===0)return 0;else{let n=SJo(Math.atan2(e,t));if(n>=0)return n;else return n+360}}function PJo(e,t,n,o){if(e*t===0)return 0;else if(Math.abs(o-n)<=180)return o-n;else if(o-n>180)return o-n-360;else if(o-n<-180)return o-n+360;else throw Error()}function vJo(e,t,n,o){if(e*t===0)return n+o;else if(Math.abs(n-o)<=180)return(n+o)/2;else if(Math.abs(n-o)>180&&n+o<360)return(n+o+360)/2;else if(Math.abs(n-o)>180&&n+o>=360)return(n+o-360)/2;else throw Error()}function FOe(e){return Sne(e)}var MJo=2.3,uWt={R:255,G:0,B:255},Z6=({color1:e,color2:t})=>e.R===t.R&&e.G===t.G&&e.B===t.B,P1e=(e)=>{try{let t=Ugt(e);if(t.depth!==8)return null;let{channels:n,data:o}=t,i=new Uint8Array(t.width*t.height*4);if(n===4)i.set(o);else if(n===3)for(let r=0,s=0;r<o.length;r+=3,s+=4)i[s]=o[r],i[s+1]=o[r+1],i[s+2]=o[r+2],i[s+3]=255;else return null;return{width:t.width,height:t.height,data:i,getPixel:(r,s)=>{let a=(s*t.width+r)*4;return{R:i[a],G:i[a+1],B:i[a+2]}}}}catch{return null}},v1e=async(e)=>{if(e instanceof Uint8Array)return e;return new Uint8Array(e)},BJo=(e,t)=>{if(e.byteLength!==t.byteLength)return!1;for(let n=0;n<e.byteLength;n+=1)if(e[n]!==t[n])return!1;return!0},wJo=(e)=>{if(!e)return uWt;let t=/^#?([0-9a-fA-F]{6})$/.exec(e.trim());if(!t)return uWt;let n=t[1];return{R:Number.parseInt(n.slice(0,2),16),G:Number.parseInt(n.slice(2,4),16),B:Number.parseInt(n.slice(4,6),16)}},TJo=(e)=>{let t=e*6.2,n=e*0.695,o=null,i=null,r=null,s=null;return(a)=>{if(Z6(a))return!0;let c=null,l=null;if(o&&Z6({color1:a.color1,color2:o}))c=r;else if(i&&Z6({color1:a.color1,color2:i}))c=s;if(o&&Z6({color1:a.color2,color2:o}))l=r;else if(i&&Z6({color1:a.color2,color2:i}))l=s;if(!c)c=FOe(a.color1),o=a.color1,r=c;if(!l)l=FOe(a.color2),i=a.color2,s=l;let d=Math.sqrt((c.L-l.L)*(c.L-l.L)+(c.a-l.a)*(c.a-l.a)+(c.b-l.b)*(c.b-l.b));if(d>=t)return!1;if(d<=n)return!0;return S1e(c,l)<e}},DJo=class{_baseComparator;_img1;_img2;_brightnessTolerance;constructor(e,t,n,{antialiasingTolerance:o=0}){this._baseComparator=e,this._img1=t,this._img2=n,this._brightnessTolerance=o}compare(e){return this._baseComparator(e)||this._checkIsAntialiased(e)}_checkIsAntialiased(e){return this._isAntialiased(this._img2,e.x,e.y,e,this._img1)||this._isAntialiased(this._img1,e.x,e.y,e,this._img2)}_isAntialiased(e,t,n,o,i){let r=e.getPixel(t,n),s=Math.max(t-1,0),a=Math.max(n-1,0),c=Math.min(t+1,o.width-1),l=Math.min(n+1,o.height-1),d=!i,u=d?this._brightnessTolerance:0,h=0,A=0,m=0,p=0,g=0,_=0,f=0,y=0,x=0;for(let C=a;C<=l;C+=1)for(let I=s;I<=c;I+=1){if(I===t&&C===n)continue;let b=this._brightnessDelta(e.getPixel(I,C),r);if(Math.abs(b)<=u)h+=1;else if(b>u)A+=1;else m+=1;if(h>2)return!1;if(d)continue;if(b<p)p=b,_=I,f=C;if(b>g)g=b,y=I,x=C}if(d)return!0;if(m===0||A===0)return!1;return!this._isAntialiased(e,_,f,o)&&!this._isAntialiased(i,_,f,o)||!this._isAntialiased(e,y,x,o)&&!this._isAntialiased(i,y,x,o)}_brightnessDelta(e,t){return e.R*0.29889531+e.G*0.58662247+e.B*0.11448223-(t.R*0.29889531+t.G*0.58662247+t.B*0.11448223)}},NJo=class{pixelRatio;caretTopLeft=null;caretBottomRight=null;_baseComparator;_state="init";constructor(e,t){this.pixelRatio=t?Math.floor(t):1,this._baseComparator=e}compare(e){return this._baseComparator(e)||this._checkIsCaret(e)}_checkIsCaret(e){if(this._state==="caretDetected")return this.caretTopLeft!==null&&this.caretBottomRight!==null&&e.x>=this.caretTopLeft.x&&e.x<=this.caretBottomRight.x&&e.y>=this.caretTopLeft.y&&e.y<=this.caretBottomRight.y;if(this.caretTopLeft&&this.caretBottomRight&&e.x>=this.caretTopLeft.x&&e.x<=this.caretBottomRight.x&&e.y>=this.caretTopLeft.y&&e.y<=this.caretBottomRight.y)return!0;let t=this._getLastCaretPoint(e);if(!this._looksLikeCaret({x:e.x,y:e.y},t))return!1;return this.caretTopLeft={x:e.x,y:e.y},this.caretBottomRight=t,this._state="caretDetected",!0}_getLastCaretPoint(e){let t={x:e.x,y:e.y};while(!0){let n=this._getNextCaretPoint({x:e.x,y:e.y},t);if(this._isPointOutsideImages(n,e)||this._areColorsSame(n,e))return t;t=n}}_isPointOutsideImages(e,t){return e.x>=t.minWidth||e.y>=t.minHeight}_areColorsSame(e,t){let n=t.img1.getPixel(e.x,e.y),o=t.img2.getPixel(e.x,e.y);return Z6({color1:n,color2:o})}_getNextCaretPoint(e,t){let n=t.x+1;return n<e.x+this.pixelRatio?{x:n,y:t.y}:{x:e.x,y:t.y+1}}_looksLikeCaret(e,t){return this._caretHeight(e,t)>1&&this._caretWidth(e,t)===this.pixelRatio}_caretHeight(e,t){return t.y-e.y+1}_caretWidth(e,t){return t.x-e.x+1}},hWt=(e={})=>{if(e.strict&&e.tolerance!==void 0)throw TypeError('Unable to use "strict" and "tolerance" options together');if(e.percentThreshold!==void 0&&(!Number.isFinite(e.percentThreshold)||e.percentThreshold<0))throw TypeError('Expected "percentThreshold" to be a non-negative number');return{strict:Boolean(e.strict),tolerance:e.tolerance??MJo,ignoreCaret:e.ignoreCaret??!0,ignoreAntialiasing:e.ignoreAntialiasing??!0,antialiasingTolerance:e.antialiasingTolerance??0,pixelRatio:e.pixelRatio}},mWt=(e,t,n)=>{let o=n.strict?(i)=>Z6(i):TJo(n.tolerance);if(n.ignoreAntialiasing){let i=new DJo(o,e,t,n);o=(r)=>i.compare(r)}if(n.ignoreCaret){let i=new NJo(o,n.pixelRatio);o=(r)=>i.compare(r)}return o},RJo=async(e,t,n)=>{let o=P1e(e),i=P1e(t);if(!o||!i)return{equal:BJo(e,t)};let r=mWt(o,i,n),s=Math.max(o.width,i.width),a=Math.max(o.height,i.height),c=Math.min(o.width,i.width),l=Math.min(o.height,i.height),d=s*a,u=0;for(let h=0;h<a;h+=1)for(let A=0;A<s;A+=1){if(A>=c||h>=l){u+=1;continue}let m=o.getPixel(A,h),p=i.getPixel(A,h);if(!(Z6({color1:m,color2:p})||r({color1:m,color2:p,img1:o,img2:i,x:A,y:h,width:s,height:a,minWidth:c,minHeight:l})))u+=1}return{equal:u===0,differentPixels:u,totalPixels:d}},QJo=async(e,t,n={})=>{let o=hWt(n),i=await v1e(e),r=await v1e(t);return RJo(i,r,o)},kJo=async({reference:e,current:t,highlightColor:n,...o})=>{let i=hWt(o),r=await v1e(e),s=await v1e(t),a=P1e(r),c=P1e(s);if(!(a&&c))return s;let l=mWt(a,c,i),d=Math.max(a.width,c.width),u=Math.max(a.height,c.height),h=Math.min(a.width,c.width),A=Math.min(a.height,c.height),m=wJo(n),p=new Uint8Array(d*u*4);for(let _=0;_<u;_+=1)for(let f=0;f<d;f+=1){let y=(_*d+f)*4;if(f>=h||_>=A){p[y]=m.R,p[y+1]=m.G,p[y+2]=m.B,p[y+3]=255;continue}let x=a.getPixel(f,_),C=c.getPixel(f,_);if(Z6({color1:x,color2:C})||l({color1:x,color2:C,img1:a,img2:c,x:f,y:_,width:d,height:u,minWidth:h,minHeight:A}))p[y]=x.R,p[y+1]=x.G,p[y+2]=x.B,p[y+3]=255;else p[y]=m.R,p[y+1]=m.G,p[y+2]=m.B,p[y+3]=255}return Vwe({width:d,height:u,data:p,channels:4,depth:8})},Kqr=Object.assign(QJo,{createDiff:kJo});u0();pn();function Pne(e,t){let n=new EY(e),o=n.getTotalLength(),i=Math.max(2,Math.ceil(o*t)),r=[];for(let s=1;s<=i;s++){let a=s/i*o,c=n.getPointAtLength(a);r.push({x:c.x,y:c.y})}return r}function LJo(e,t=10){let n=new EY(e);n.toAbsolute();let o=n.segments,i=[],r=[],s=0,a=0,c=0,l=0;for(let d of o)switch(d[0]){case"M":{if(r.length>0)i.push(r);s=d[1],a=d[2],c=s,l=a,r=[{x:s,y:a}];break}case"L":{s=d[1],a=d[2],r.push({x:s,y:a});break}case"H":{s=d[1],r.push({x:s,y:a});break}case"V":{a=d[1],r.push({x:s,y:a});break}case"Z":{if(s!==c||a!==l)r.push({x:c,y:l});s=c,a=l;break}case"C":{let h=d[5],A=d[6],m=`M ${s} ${a} C ${d[1]} ${d[2]} ${d[3]} ${d[4]} ${h} ${A}`,p=Pne(m,t);r.push(...p),s=h,a=A;break}case"S":{let h=d[3],A=d[4],m=`M ${s} ${a} S ${d[1]} ${d[2]} ${h} ${A}`,p=Pne(m,t);r.push(...p),s=h,a=A;break}case"Q":{let h=d[3],A=d[4],m=`M ${s} ${a} Q ${d[1]} ${d[2]} ${h} ${A}`,p=Pne(m,t);r.push(...p),s=h,a=A;break}case"T":{let h=d[1],A=d[2],m=`M ${s} ${a} T ${h} ${A}`,p=Pne(m,t);r.push(...p),s=h,a=A;break}case"A":{let h=d[6],A=d[7],m=`M ${s} ${a} A ${d[1]} ${d[2]} ${d[3]} ${d[4]} ${d[5]} ${h} ${A}`,p=Pne(m,t);r.push(...p),s=h,a=A;break}}if(r.length>0)i.push(r);return i.map((d)=>{let u=[];for(let h of d)if(u.length===0||Math.abs(u[u.length-1].x-h.x)>0.000000001||Math.abs(u[u.length-1].y-h.y)>0.000000001)u.push(h);return u})}var IS="image/svg+xml",HOe="image/png";async function E1e(e){if(e.startsWith("data:"))return FJo(e);let t;try{t=await fetch(e)}catch(i){throw Error(`Failed to fetch image "${e}". Pass a data URL or a fetchable URL.`,{cause:i})}if(!t.ok)throw Error(`Failed to fetch image "${e}": ${t.status} ${t.statusText}`);let n=t.headers.get("content-type")?.split(";")[0],o=n&&n!=="application/octet-stream"?n:HJo(e);return{mimetype:o,text:o===IS?await t.text():"",dataUrl:e,projectRelativePath:e}}function pWt({svg:e,width:t,height:n,transform:o}){let i=OOe({svg:e,width:t,height:n,transform:o}).map(OJo).filter((s)=>s.length>=3).map((s)=>({vertices:s,polygon:AWt(s),samplePoint:GJo(s)})).map((s)=>({...s,area:s.polygon.area()})).filter((s)=>s.area>0.000000001),r=i.filter((s)=>i.filter((c)=>c!==s&&c.area>s.area&&c.polygon.contains(Nm(s.samplePoint.x,s.samplePoint.y))).length%2===0);return r.map((s)=>{let a=i.filter((c)=>c!==s&&c.area<s.area&&s.polygon.contains(Nm(c.samplePoint.x,c.samplePoint.y))&&!r.some((l)=>l!==s&&l.area<s.area&&l.area>c.area&&l.polygon.contains(Nm(c.samplePoint.x,c.samplePoint.y)))).map((c)=>({vertices:zJo(c.vertices)}));return{outer_ring:{vertices:zOe(s.vertices)},inner_rings:a}})}function OOe({svg:e,width:t,height:n,transform:o}){let i=YJo(e),r=t/i.width,s=n/i.height;return VJo(e).flatMap((a)=>LJo(a,0.03).map((c)=>c.map((l)=>tt(o,{x:(l.x-i.x-i.width/2)*r,y:-(l.y-i.y-i.height/2)*s})).filter((l,d,u)=>d===0||Math.abs(l.x-u[d-1].x)>0.000001||Math.abs(l.y-u[d-1].y)>0.000001)))}function zOe(e){return _Wt(e)>0?[...e].reverse():e}function FJo(e){let t=e.indexOf(",");if(!e.startsWith("data:")||t===-1)throw Error("Invalid data URL for image source");let n=e.slice(5,t),o=e.slice(t+1),i=n.split(";")[0]||IS,r=n.includes(";base64")?new TextDecoder().decode(Uint8Array.from(atob(o),(s)=>s.charCodeAt(0))):decodeURIComponent(o);return{mimetype:i,text:r,dataUrl:e,projectRelativePath:"inline"}}function HJo(e){let t=e.toLowerCase();if(t.endsWith(".svg"))return IS;if(t.endsWith(".png"))return HOe;return"application/octet-stream"}function OJo(e){if(e.length<2)return e;let t=e[0],n=e[e.length-1];if(Math.abs(t.x-n.x)<0.000001&&Math.abs(t.y-n.y)<0.000001)return e.slice(0,-1);return e}function zJo(e){return _Wt(e)<0?[...e].reverse():e}function GJo(e){let t=0,n=0;for(let o of e)t+=o.x,n+=o.y;return{x:t/e.length,y:n/e.length}}function AWt(e){let t=new Dc;return t.addFace(e.map((n)=>Nm(n.x,n.y))),t}function _Wt(e){return[...AWt(e).faces][0].signedArea()}function YJo(e){let n=e.match(/\bviewBox\s*=\s*["']([^"']+)["']/i)?.[1]?.trim().split(/[\s,]+/).map(Number);if(n?.length===4&&n.every(Number.isFinite))return{x:n[0],y:n[1],width:n[2],height:n[3]};return{x:0,y:0,width:1,height:1}}function VJo(e){let t=[],n=/<path\b[^>]*>/gi;for(let o of e.match(n)??[]){let i=o.match(/\bd\s*=\s*(["'])(.*?)\1/i);if(i?.[2])t.push(i[2])}return t}pn();Gt();Gt();pn();We();We();var gWt={in:25.4,inch:25.4,mil:0.0254,mm:1,m:1000,cm:10,ft:304.8,feet:304.8},oJr=new Intl.NumberFormat("en-US",{useGrouping:!1,notation:"standard",maximumFractionDigits:12}),fWt=(e)=>{let t=typeof e==="number"?"mm":e.replace(/^[^a-zA-Z]+/g,"").toLowerCase();if(!t)t="mm";let n=typeof e==="number"?e:Number.parseFloat(e.split(t)[0]);if(t in gWt)return n*gWt[t];throw Error(`Unsupported unit: ${t}`)};We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();We();function UWt(e){if(!/^nema(?:8|17|23)(?:_|$)/i.test(e))return e;return e.replace(/(^|_)jst([0-9]+)_(ph|sh)(?=_|$)/gi,"$1jst$3$2").replace(/(^|_)jst[_-](ph|sh)[_-]([0-9]+)(?=_|$)/gi,"$1jst$2$3").replace(/(^|_)none(?=_|$)/gi,"$1nowires").replace(/(^|_)stubs(?=_|$)/gi,"$1wirestubs")}function cm(e){let t=[],n=0,o=0;for(let i=0;i<e.length;i++){let r=e[i];if(r==="(")n++;if(r===")")n--;if(n<0||n>1)throw Error("Invalid feature parentheses");if(r==="_"&&n===0)t.push(e.slice(o,i)),o=i+1}if(n!==0)throw Error("Unclosed feature parentheses");if(t.push(e.slice(o)),t.some((i)=>!i))throw Error("Model strings cannot contain empty tokens");return t}var yWt=(e)=>{let t=e.match(/^([a-zA-Z]+)([\(\d\.\+\-].*)?$/);if(!t?.[1])return;return{fn:t[1].toLowerCase(),value:t[2]}},qOe=(e)=>{let t=UWt(e.trim());if(!t)throw Error("Model string cannot be empty");let n=cm(t),o=n[0],i=yWt(o),r={},s=i?.fn??o.toLowerCase();if(r[s]=!0,r.fn=s,i?.value){let a=Number.parseFloat(i.value);if(Number.isFinite(a))r.num_pins=a}for(let a of n.slice(1)){if(!a)throw Error("Model strings cannot contain empty tokens");let c=yWt(a);if(!c)throw Error(`Invalid model string token "${a}"`);r[c.fn]=c.value??!0}return r.string=t,r};function xu(e){return e}var UJo=class{models=new Map;register(e){if(typeof e.name!=="string"||!/^[a-z]+$/.test(e.name))throw Error("Model names must contain only lowercase letters");if(this.models.has(e.name))throw Error(`Modelprinter function "${e.name}" is already registered`);if(e.normalizeString!==void 0&&typeof e.normalizeString!=="function")throw Error("Model string normalizer must be a function");this.models.set(e.name,{name:e.name,schema:e.schema,parse:e.parse,normalizeString:e.normalizeString})}getModelNames(){return[...this.models.keys()]}normalize(e){let t=this.models.get(e.fn);if(!t?.normalizeString)return e;let n=t.normalizeString(e.string);if(typeof n!=="string")throw Error(`Normalizer for "${t.name}" must return a string`);if(n===e.string)return e;let o=qOe(n);if(o.fn!==t.name)throw Error(`Normalizer for "${t.name}" must preserve the model name`);return o}parse(e){let t=this.models.get(e.fn);if(!t)throw Error(`Unsupported modelprinter function "${e.fn}"`);let n=t.parse(e);if(n===null||typeof n!=="object"||Array.isArray(n)||n.fn!==t.name)throw Error(`Parser for "${t.name}" must return a model with fn "${t.name}"`);return n}},id=kn([He(),Z()]).transform((e,t)=>{try{let n=fWt(e);if(!Number.isFinite(n))throw Error("Length is not finite");return n}catch{return t.addIssue({code:"custom",message:`Invalid model length: ${String(e)}`}),yce}}),rs=id.refine((e)=>e>0,"Length must be greater than zero"),g1=id.refine((e)=>e>=0,"Length cannot be negative"),bS=kn([He(),Z().regex(/^(?:\d+(?:\.\d+)?|\.\d+)(?:mm|cm|m|in|inch)?$/i).transform((e)=>e.toLowerCase())]).pipe(id).refine((e)=>e>0,"Length must be positive"),JOe={M3:{diameter:3,threadPitch:0.5,headAcrossFlats:5.5,headHeight:2,underHeadRadius:0.1,headChamferAngle:30,tipChamferAngle:45,threadFlankAngle:60,tipChamfer:0.25,threadRootDiameter:2.3865653389860224,threadPitchDiameter:2.6752404735808355,headCornerDiameter:6.3508529610858835,headChamferDiameter:5.5},M4:{diameter:4,threadPitch:0.7,headAcrossFlats:7,headHeight:2.8,underHeadRadius:0.2,headChamferAngle:30,tipChamferAngle:45,threadFlankAngle:60,tipChamfer:0.35,threadRootDiameter:3.141191474580432,threadPitchDiameter:3.5453366630131695,headCornerDiameter:8.082903768654761,headChamferDiameter:7},M5:{diameter:5,threadPitch:0.8,headAcrossFlats:8,headHeight:3.5,underHeadRadius:0.2,headChamferAngle:30,tipChamferAngle:45,threadFlankAngle:60,tipChamfer:0.4,threadRootDiameter:4.018504542377636,threadPitchDiameter:4.480384757729337,headCornerDiameter:9.237604307034013,headChamferDiameter:8},M6:{diameter:6,threadPitch:1,headAcrossFlats:10,headHeight:4,underHeadRadius:0.25,headChamferAngle:30,tipChamferAngle:45,threadFlankAngle:60,tipChamfer:0.5,threadRootDiameter:4.773130677972045,threadPitchDiameter:5.350480947161671,headCornerDiameter:11.547005383792516,headChamferDiameter:10}},WJo=Zt(["M3","M4","M5","M6"]),XJo=Zt(["iso4017","iso4017:2014"]).default("iso4017").transform(()=>"iso4017:2014"),WWt={standard:XJo,metricSize:WJo,length:bS,thread:Be("full").default("full"),drive:Be("hex").default("hex"),threadHand:Zt(["right","left"]).default("right"),threadClass:Be("6g").default("6g"),threadGender:Be("male").default("male"),showThreads:Ue().default(!0),diameter:bS.optional(),threadPitch:bS.optional(),headAcrossFlats:bS.optional(),headHeight:bS.optional(),underHeadRadius:bS.optional(),headChamferAngle:He().finite().positive().optional(),tipChamferAngle:He().finite().positive().optional(),threadFlankAngle:He().finite().positive().optional(),tipChamfer:bS.optional(),threadRootDiameter:bS.optional(),threadPitchDiameter:bS.optional(),headCornerDiameter:bS.optional(),headChamferDiameter:bS.optional()},XWt=(e,t)=>{let n=JOe[e.metricSize];for(let o of Object.keys(n))if(e[o]!==void 0&&Math.abs(e[o]-n[o])>0.000000001)t.addIssue({code:"custom",path:[o],message:`Dimension ${o} contradicts ${e.standard} ${e.metricSize}`});if(e.length<=n.underHeadRadius+n.tipChamfer)t.addIssue({code:"custom",path:["length"],message:"Length must separate the under-head fillet and fixed tip chamfer"})},KWt=at(WWt).strict().superRefine(XWt).transform((e)=>({...e,...JOe[e.metricSize]})),w1e=at({fn:Be("hexbolt"),...WWt}).strict().superRefine(XWt).transform((e)=>({...e,...JOe[e.metricSize]})),KJo={m:"metricSize",metricsize:"metricSize",l:"length",length:"length",standard:"standard",thread:"thread",drive:"drive",threadhand:"threadHand",threadclass:"threadClass",threadgender:"threadGender",diameter:"diameter",threadpitch:"threadPitch",headacrossflats:"headAcrossFlats",headheight:"headHeight",underheadradius:"underHeadRadius",headchamferangle:"headChamferAngle",tipchamferangle:"tipChamferAngle",threadflankangle:"threadFlankAngle",tipchamfer:"tipChamfer",threadrootdiameter:"threadRootDiameter",threadpitchdiameter:"threadPitchDiameter",headcornerdiameter:"headCornerDiameter",headchamferdiameter:"headChamferDiameter",d:"diameter",headh:"headHeight",af:"headAcrossFlats"},jJo=new Set(["standard","thread","drive","threadHand","threadClass","threadGender"]),qJo=(e)=>{if(e.fn!=="hexbolt")throw Error(`Expected hexbolt params, got "${e.fn}"`);let[t,...n]=cm(e.string);if(t?.toLowerCase()!=="hexbolt")throw Error("The hexbolt function does not accept an inline value");let o={};for(let i of n){let r=i.match(/^([a-z]+)(.*)$/i),s=r?.[1]?.toLowerCase(),a=r?.[2],c,l;if(s==="threads"||s==="nothreads"){if(a!=="")throw Error(`Token "${s}" does not accept a value`);c="showThreads",l=s==="threads"}else{if(c=s?KJo[s]??"":"",!c||!a)throw Error(`Unknown or missing hexbolt token "${i}"`);if(jJo.has(c)){let d=a.match(/^\(([^()]+)\)$/)?.[1];if(!d)throw Error(`Token "${s}" requires a parenthesized selector`);l=d.toLowerCase()}else if(c==="metricSize"){let d=s==="m"?a:a.match(/^\((m\d+)\)$/i)?.[1]?.slice(1);if(!d||!/^\d+$/.test(d))throw Error("Invalid metric size");l=`M${d}`}else{if(!/^(?:\d+(?:\.\d+)?|\.\d+)(?:mm|cm|m|in|inch)?$/i.test(a))throw Error(`Invalid dimension token "${i}"`);l=["headChamferAngle","tipChamferAngle","threadFlankAngle"].includes(c)?Number(a):a}}if(c in o)throw Error(`Property "${c}" is set more than once`);o[c]=l}return w1e.parse({fn:"hexbolt",...o})},jWt=xu({name:"hexbolt",schema:w1e,parse:qJo});function JJo(e){e.register(jWt)}var qWt=kn([He(),Z().regex(/^[+-]?(?:\d+(?:\.\d*)?|\.\d+)(?:mm|cm|m|in|inch|mil|ft|feet)?$/i,"Length must be a complete number with an optional supported unit").transform((e)=>e.toLowerCase())]),ju=qWt.pipe(id).refine((e)=>e>0,"Length must be greater than zero"),SS=qWt.pipe(id).refine((e)=>e>=0,"Length cannot be negative"),JWt=He().finite().gt(0).lt(90);function TL(e,t){if(!/^\d+$/.test(e))throw Error(`${t} requires a unitless integer`);return Number(e)}function T1e(e,t){if(!/^[+-]?(?:\d+(?:\.\d*)?|\.\d+)(?:deg)?$/i.test(e))throw Error(`${t} requires a numeric angle in degrees`);return Number(e.replace(/deg$/i,""))}function qU(e){let t=e.match(/^([a-z]+)(.*)$/i);if(!t)throw Error(`Invalid gear token "${e}"`);return[t[1].toLowerCase(),t[2]]}var $Wt={toothCount:He().int().min(6).max(512).default(24),module:ju.default(1),faceWidth:ju.default(5),pressureAngle:JWt.default(20),backlash:SS.default(0),clearance:SS.default(0.25),boreDiameter:SS.default(0),hubDiameter:SS.default(0),hubLength:SS.default(0),phase:He().finite().default(0),segmentsPerTooth:He().int().min(4).max(64).default(12)};function ZWt(e){let t=e.module*e.toothCount;return{pitchDiameter:t,baseDiameter:t*Math.cos(e.pressureAngle*Math.PI/180),outsideDiameter:t+2*e.module,rootDiameter:t-2*(e.module+e.clearance),circularPitch:Math.PI*e.module,toothThickness:Math.PI*e.module/2-e.backlash}}var M1e=(e)=>Math.tan(e)-e;function eXt(e,t){let n=(c,l)=>t.addIssue({code:"custom",message:c,path:l?[l]:[]}),o=ZWt(e);if(Object.values(o).some((c)=>!Number.isFinite(c))||!Number.isFinite(e.faceWidth+e.hubLength)){n("Derived gear dimensions must be finite");return}if(o.rootDiameter<=0){n("Dedendum must leave a positive root diameter","clearance");return}if(e.boreDiameter>=o.rootDiameter)n("Bore diameter must be smaller than the root diameter","boreDiameter");if(e.hubDiameter===0!==(e.hubLength===0))n("Hub diameter and length must both be zero or both be positive");if(e.hubDiameter>0){if(e.hubDiameter>=o.rootDiameter)n("Hub diameter must be smaller than the root diameter","hubDiameter");if(e.boreDiameter>=e.hubDiameter)n("Hub diameter must exceed the bore diameter","hubDiameter")}let i=e.pressureAngle*Math.PI/180,r=o.toothThickness/o.pitchDiameter,s=r+M1e(i)-M1e(Math.acos(o.baseDiameter/o.outsideDiameter));if(!Number.isFinite(s)||s<=0)n("Tooth tip must have positive angular thickness","backlash");let a=r+M1e(i)-M1e(Math.acos(o.baseDiameter/Math.max(o.rootDiameter,o.baseDiameter)));if(!Number.isFinite(a)||a>=Math.PI/e.toothCount)n("Adjacent teeth must leave a positive root gap","pressureAngle")}var Bne=at($Wt).strict().superRefine(eXt),D1e=at({fn:Be("spurgear"),...$Wt}).strict().superRefine(eXt),$Oe=(e={})=>ZWt(Bne.parse(e)),tXt={...Bne.innerType().shape,helixAngle:He().finite().min(0).lt(90).default(20),handedness:Zt(["right","left"]).default("right"),segmentsPerTurn:He().int().min(12).max(128).default(32)};function nXt(e){let{helixAngle:t,handedness:n,segmentsPerTurn:o,...i}=e,r=$Oe(i),s=t*Math.PI/180;return{...r,normalModule:e.module*Math.cos(s),normalPressureAngle:Math.atan(Math.tan(e.pressureAngle*Math.PI/180)*Math.cos(s))*180/Math.PI,normalPitch:r.circularPitch*Math.cos(s),twistAngle:t===0?0:(n==="right"?1:-1)*(2*e.faceWidth/r.pitchDiameter*Math.tan(s)*180)/Math.PI}}function oXt(e,t){let{fn:n,helixAngle:o,handedness:i,segmentsPerTurn:r,...s}=e,a=Bne.safeParse(s);if(!a.success){for(let c of a.error.issues)t.addIssue(c);return}if(Object.values(nXt({...a.data,helixAngle:o,handedness:i,segmentsPerTurn:r})).some((c)=>!Number.isFinite(c)))t.addIssue({code:"custom",message:"Derived helical gear dimensions must be finite"})}var ZOe=at(tXt).strict().superRefine(oXt),N1e=at({fn:Be("helicalgear"),...tXt}).strict().superRefine(oXt),iXt=(e={})=>nXt(ZOe.parse(e)),xWt={m:"module",module:"module",w:"faceWidth",width:"faceWidth",facewidth:"faceWidth",bore:"boreDiameter",borediameter:"boreDiameter",backlash:"backlash",clearance:"clearance",hubdiameter:"hubDiameter",hublength:"hubLength"};function $Jo(e){let t=e.string.split("_"),n=t[0]?.match(/^helicalgear(\d+)?$/i);if(!n||e.fn!=="helicalgear")throw Error("Expected helicalgear with an optional inline tooth count");let o={fn:"helicalgear"};if(n[1])o.toothCount=TL(n[1],"toothCount");for(let i of t.slice(1)){let[r,s]=qU(i),a,c;if(r in xWt)a=xWt[r],c=s;else if(r==="teeth"||r==="segments"||r==="turnsegments")a=r==="teeth"?"toothCount":r==="segments"?"segmentsPerTooth":"segmentsPerTurn",c=TL(s,a);else if(r==="pa"||r==="pressureangle"||r==="phase"||r==="ha"||r==="helixangle")a=r==="phase"?"phase":r==="ha"||r==="helixangle"?"helixAngle":"pressureAngle",c=T1e(s,a);else if(r==="right"||r==="left"){if(s)throw Error(`Helical flag "${r}" does not accept a value`);a="handedness",c=r}else throw Error(`Unknown helical gear token "${i}"`);if(a in o)throw Error(`Helical gear property "${a}" is set more than once`);o[a]=c}return N1e.parse(o)}var rXt=xu({name:"helicalgear",schema:N1e,parse:$Jo});function ZJo(e){e.register(rXt)}function JU(e){let t=/^jst-(ph|sh)-([1-9][0-9]*)$/.exec(e);if(!t)return;let n=Number(t[2]),o=t[1]==="ph";return{standard:o?"jst_ph":"jst_sh",pinCount:n,maxPinCount:o?16:15,pitch:o?2:1,bodyWidth:o?(n-1)*2+3.9:n+3,bodyHeight:o?4.5:2.9,matingDepth:o?6:4.25}}var e$o=Z().refine((e)=>{let t=JU(e);return t!==void 0&&t.pinCount>=2&&t.pinCount<=t.maxPinCount},"Expected jst-ph-N (2–16 pins) or jst-sh-N (2–15 pins)"),Ry={M2:{diameter:2,threadPitch:0.4,headDiameter:3.8,headHeight:2,socketWidth:1.5,socketDepth:1},"M2.5":{diameter:2.5,threadPitch:0.45,headDiameter:4.5,headHeight:2.5,socketWidth:2,socketDepth:1.1},M3:{diameter:3,threadPitch:0.5,headDiameter:5.5,headHeight:3,socketWidth:2.5,socketDepth:1.3},M4:{diameter:4,threadPitch:0.7,headDiameter:7,headHeight:4,socketWidth:3,socketDepth:2},M5:{diameter:5,threadPitch:0.8,headDiameter:8.5,headHeight:5,socketWidth:4,socketDepth:2.5},M6:{diameter:6,threadPitch:1,headDiameter:10,headHeight:6,socketWidth:5,socketDepth:3},M8:{diameter:8,threadPitch:1.25,headDiameter:13,headHeight:8,socketWidth:6,socketDepth:4},M10:{diameter:10,threadPitch:1.5,headDiameter:16,headHeight:10,socketWidth:8,socketDepth:5},M12:{diameter:12,threadPitch:1.75,headDiameter:18,headHeight:12,socketWidth:10,socketDepth:6}},wne=Zt(["M2","M2.5","M3","M4","M5","M6","M8","M10","M12"]),sXt={metricSize:wne,length:rs,showThreads:Ue().default(!0)},aXt=at(sXt).strict(),R1e=at({fn:Be("hexsocketbolt"),...sXt}).strict(),t$o=kn([Be(8),Be(17),Be(23)]),n$o={8:{backFaceScrewSize:"M2",backFaceHoleDepth:2,bodyWidth:20.3,bodyLength:33,mountingHoleSpacing:16,mountingHoleDiameter:2,mountingHoleDepth:2,mountingHoleThrough:!1,pilotDiameter:15,pilotLength:1.5,shaftDiameter:4,shaftLength:15,shaftShape:"round",shaftFlatDepth:0.5,shaftFlatLength:10,shaftFlatAngle:0,frontCapLength:3.5,rearCapLength:3.5,faceCornerChamfer:0.5,bodyCornerChamfer:3},17:{backFaceScrewSize:"M3",backFaceHoleDepth:4.5,bodyWidth:42.3,bodyLength:38,mountingHoleSpacing:31,mountingHoleDiameter:3,mountingHoleDepth:4.5,mountingHoleThrough:!1,pilotDiameter:22,pilotLength:2,shaftDiameter:5,shaftLength:24,shaftShape:"d",shaftFlatDepth:0.5,shaftFlatLength:15,shaftFlatAngle:0,frontCapLength:5,rearCapLength:5,faceCornerChamfer:3,bodyCornerChamfer:6},23:{backFaceScrewSize:"M4",backFaceHoleDepth:4.5,bodyWidth:56.4,bodyLength:51,mountingHoleSpacing:47.14,mountingHoleDiameter:5,mountingHoleDepth:5,mountingHoleThrough:!0,pilotDiameter:38.1,pilotLength:1.6,shaftDiameter:6.35,shaftLength:20.6,shaftShape:"d",shaftFlatDepth:0.5,shaftFlatLength:15,shaftFlatAngle:0,frontCapLength:5,rearCapLength:5,faceCornerChamfer:2,bodyCornerChamfer:15}},cXt={nemaSize:t$o,backFace:Zt(["plain","holes","screws"]).optional(),backFaceHoleSpacing:rs.optional(),backFaceHoleDiameter:rs.optional(),backFaceHoleDepth:rs.optional(),backFaceScrewSize:wne.optional(),wireConnection:kn([Zt(["none","stubs"]),e$o]).optional(),wireSideAngle:He().finite().optional(),wireLength:rs.optional(),wireDiameter:rs.optional(),wireCount:He().int().min(2).max(8).optional(),bodyWidth:rs.optional(),bodyLength:rs.optional(),mountingHoleSpacing:rs.optional(),mountingHoleDiameter:rs.optional(),mountingHoleDepth:rs.optional(),mountingHoleThrough:Ue().optional(),pilotDiameter:rs.optional(),pilotLength:rs.optional(),shaftLength:rs.optional(),shaftDiameter:rs.optional(),shaftShape:Zt(["round","d"]).optional(),shaftFlatDepth:g1.optional(),shaftFlatLength:g1.optional(),shaftFlatAngle:He().finite().optional(),frontCapLength:rs.optional(),rearCapLength:rs.optional(),faceCornerChamfer:g1.optional(),bodyCornerChamfer:g1.optional()},lXt=(e)=>{let t=n$o[e.nemaSize],n=e.backFaceScrewSize??t.backFaceScrewSize,o=Ry[n];return{nemaSize:e.nemaSize,wireConnection:e.wireConnection??"stubs",wireSideAngle:((e.wireSideAngle??0)%360+360)%360,wireLength:e.wireLength??6,wireDiameter:e.wireDiameter??1.2,wireCount:e.wireCount??4,backFace:e.backFace??"screws",backFaceHoleSpacing:e.backFaceHoleSpacing??e.mountingHoleSpacing??t.mountingHoleSpacing,backFaceHoleDiameter:e.backFaceHoleDiameter??o.diameter,backFaceHoleDepth:e.backFaceHoleDepth??t.backFaceHoleDepth,backFaceScrewSize:n,bodyWidth:e.bodyWidth??t.bodyWidth,bodyLength:e.bodyLength??t.bodyLength,mountingHoleSpacing:e.mountingHoleSpacing??t.mountingHoleSpacing,mountingHoleDiameter:e.mountingHoleDiameter??t.mountingHoleDiameter,mountingHoleDepth:e.mountingHoleDepth??t.mountingHoleDepth,mountingHoleThrough:e.mountingHoleThrough??t.mountingHoleThrough,pilotDiameter:e.pilotDiameter??t.pilotDiameter,pilotLength:e.pilotLength??t.pilotLength,shaftDiameter:e.shaftDiameter??t.shaftDiameter,shaftLength:e.shaftLength??t.shaftLength,shaftShape:e.shaftShape??t.shaftShape,shaftFlatDepth:e.shaftFlatDepth??t.shaftFlatDepth,shaftFlatLength:e.shaftFlatLength??t.shaftFlatLength,shaftFlatAngle:e.shaftFlatAngle??t.shaftFlatAngle,frontCapLength:e.frontCapLength??t.frontCapLength,rearCapLength:e.rearCapLength??t.rearCapLength,faceCornerChamfer:e.faceCornerChamfer??t.faceCornerChamfer,bodyCornerChamfer:e.bodyCornerChamfer??t.bodyCornerChamfer}},dXt=(e,t)=>{let n=(r)=>t.addIssue({code:"custom",message:r});if(e.backFace!=="plain"){let r=Ry[e.backFaceScrewSize],s=(e.backFace==="screws"?Math.max(e.backFaceHoleDiameter,r.headDiameter):e.backFaceHoleDiameter)/2;if(e.backFaceHoleSpacing<=2*s)n("Rear holes and screw heads must not overlap each other");if(e.backFaceHoleSpacing+2*s>=e.bodyWidth||e.bodyWidth-e.faceCornerChamfer-e.backFaceHoleSpacing<=s*Math.SQRT2)n("Rear holes and screw heads must fit entirely inside the rear face");if(e.backFaceHoleDepth>=e.rearCapLength)n("Rear hole depth must be less than the rear cap length");if(e.backFace==="screws"&&e.backFaceHoleDiameter<r.diameter)n("Rear holes must accommodate the screw diameter")}if(e.wireConnection==="stubs"){if(e.wireDiameter*e.wireCount*1.5>e.bodyWidth-2*e.faceCornerChamfer)n("Wire bundle must fit on the cap side");if(e.wireDiameter>=e.rearCapLength)n("Wire diameter must fit within the rear cap")}let o=JU(e.wireConnection);if(o&&e.bodyWidth-2*e.faceCornerChamfer<o.bodyWidth)n("JST header must fit on the motor side");let i=e.mountingHoleDiameter/2;if(e.frontCapLength+e.rearCapLength>=e.bodyLength)n("End caps must leave a positive body length");if(e.faceCornerChamfer>=e.bodyWidth/2||e.bodyCornerChamfer>=e.bodyWidth/2)n("Chamfer must be smaller than half the body width");if(e.mountingHoleSpacing+2*i>=e.bodyWidth||e.bodyWidth-e.faceCornerChamfer-e.mountingHoleSpacing<=i*Math.SQRT2)n("Mounting holes must fit entirely inside the front face");if(e.pilotDiameter>=e.bodyWidth||e.pilotDiameter<=e.shaftDiameter)n("Pilot diameter must exceed the shaft diameter and fit inside the face");if(e.mountingHoleSpacing/Math.SQRT2<=e.pilotDiameter/2+i)n("Mounting holes must clear the pilot");if(!e.mountingHoleThrough&&e.mountingHoleDepth>=e.frontCapLength)n("Blind mounting hole depth must be less than the front cap length");if(e.mountingHoleThrough&&e.bodyWidth-e.bodyCornerChamfer-e.mountingHoleSpacing>=-i*Math.SQRT2)n("Body must clear through front mounting holes");if(e.shaftLength<=e.pilotLength)n("Shaft tip must extend beyond the pilot");if(e.shaftShape==="d"&&(e.shaftFlatDepth<=0||e.shaftFlatDepth>=e.shaftDiameter/2||e.shaftFlatLength<=0||e.shaftFlatLength>e.shaftLength-e.pilotLength))n("D flat must have positive depth less than the shaft radius and fit above the pilot")},Q1e=at(cXt).strict().transform(lXt).superRefine(dXt),k1e=at({fn:Be("nema"),...cXt}).strict().transform(({fn:e,...t})=>({fn:e,...lXt(t)})).superRefine(dXt),CWt={wirelength:"wireLength",wirediameter:"wireDiameter",l:"bodyLength",length:"bodyLength",bodylength:"bodyLength",bodywidth:"bodyWidth",backholespacing:"backFaceHoleSpacing",backholediameter:"backFaceHoleDiameter",backholedepth:"backFaceHoleDepth",shaftlength:"shaftLength",shaftdiameter:"shaftDiameter",flatdepth:"shaftFlatDepth",flatlength:"shaftFlatLength",holespacing:"mountingHoleSpacing",holediameter:"mountingHoleDiameter",holedepth:"mountingHoleDepth",pilotdiameter:"pilotDiameter",pilotlength:"pilotLength",frontcap:"frontCapLength",rearcap:"rearCapLength",facechamfer:"faceCornerChamfer",bodychamfer:"bodyCornerChamfer"};function o$o(e){let t=UWt(e.string).split("_"),n=t[0]?.match(/^nema(8|17|23)$/i);if(!n)throw Error("Expected nema8, nema17 or nema23");let o={fn:"nema",nemaSize:Number(n[1])};for(let i of t.slice(1)){let r=i.match(/^([a-z]+)(.*)$/i);if(!r)throw Error(`Invalid NEMA token "${i}"`);let s=r[1].toLowerCase(),a=r[2],c,l;if(s in CWt)c=CWt[s],l=a;else if(["backfaceholes","backfacescrews","plainbackface"].includes(s)){if(a)throw Error(`NEMA flag "${s}" does not accept a value`);c="backFace",l=s==="backfaceholes"?"holes":s==="backfacescrews"?"screws":"plain"}else if(["wirestubs","nowires","jstph","jstsh"].includes(s)){let d=s==="jstph"||s==="jstsh";if(d&&!/^[1-9][0-9]*$/.test(a)||!d&&a)throw Error(`Invalid wire connection token "${i}"`);c="wireConnection",l=d?`jst-${s.slice(3)}-${a}`:s==="nowires"?"none":"stubs"}else if(s==="wirecount"){if(c="wireCount",!/^\d+$/.test(a))throw Error("wirecount requires an integer");l=Number(a)}else if(s==="backscrewm")c="backFaceScrewSize",l=`M${a}`;else if(s==="flatangle"||s==="wireangle"){if(c=s==="flatangle"?"shaftFlatAngle":"wireSideAngle",!/^[+-]?(?:\d+(?:\.\d*)?|\.\d+)(?:deg)?$/i.test(a))throw Error(`${s} requires a numeric angle in degrees`);l=Number(a.replace(/deg$/i,""))}else if(["round","dshaft","throughholes","blindholes"].includes(s)){if(a)throw Error(`NEMA flag "${s}" does not accept a value`);c=s==="round"||s==="dshaft"?"shaftShape":"mountingHoleThrough",l=s==="round"?"round":s==="dshaft"?"d":s==="throughholes"}else throw Error(`Unknown NEMA motor token "${i}"`);if(c in o)throw Error(`NEMA property "${c}" is set more than once`);o[c]=l}return k1e.parse(o)}var uXt=xu({name:"nema",schema:k1e,parse:o$o});function i$o(e){e.register(uXt)}var IWt={panel:Zt(["base","left","right"]),u:id,v:id},jOe=nl("shape",[at({...IWt,shape:Be("round"),diameter:rs}).strict(),at({...IWt,shape:Be("slot"),length:rs,width:rs,axis:Zt(["u","v"]).default("v")}).strict()]),hXt={profile:Zt(["plate","angle","channel"]).default("plate"),width:rs,baseLength:rs,flangeHeight:rs.default(12),thickness:rs.default(1),insideBendRadius:rs.default(1),holes:Qt(jOe).max(100).default([])},mXt=at(hXt).strict(),L1e=at({fn:Be("sheetmetal"),...hXt}).strict();function r$o(e,t){let n=e.match(/^(hole|slot)[1-9]\d*\(([^()]+)\)$/);if(!n)throw Error(`Invalid sheet metal feature "${e}"`);let o=n[1],i={};for(let p of n[2].split("_")){let g=p.match(/^(leftofcenter|rightofcenter|abovecenter|belowcenter|r|d|l|w)([0-9.].*)$/),_=g?.[1]??p;if(_ in i)throw Error(`Duplicate ${_} in ${e}`);i[_]=g?.[2]??""}let r=new Set(["bottomface","angledface","leftface","rightface","leftofcenter","rightofcenter","abovecenter","belowcenter",...o==="hole"?["r","d"]:["l","w","horizontal","vertical"]]);for(let p of Object.keys(i))if(!r.has(p))throw Error(`Unknown ${p} in ${e}`);let s=["bottomface","angledface","leftface","rightface"].filter((p)=>(p in i));if(s.length!==1)throw Error(`Specify exactly one face in ${e}`);let a=s[0];if(a==="angledface"&&t!=="angle"||["leftface","rightface"].includes(a)&&t!=="channel")throw Error(`No ${a} on ${t}`);for(let[p,g]of[["leftofcenter","rightofcenter"],["abovecenter","belowcenter"],["horizontal","vertical"],["r","d"]])if(p in i&&g in i)throw Error(`Conflicting ${p} and ${g} in ${e}`);let c=(p)=>(p in i)?rs.parse(i[p]):0,l=c("rightofcenter")-c("leftofcenter"),d=c("abovecenter")-c("belowcenter"),u=a==="bottomface"?"base":a==="leftface"?"left":"right",h={panel:u,u:u==="base"?l:d,v:u==="base"?d:l*(u==="left"?-1:1)};if(o==="hole"){if(!("r"in i)&&!("d"in i))throw Error(`Hole requires r or d in ${e}`);return jOe.parse({...h,shape:"round",diameter:"r"in i?2*c("r"):c("d")})}if(!("l"in i)||!("w"in i))throw Error(`Slot requires l and w in ${e}`);let A=c("l"),m=c("w");if(A<m)throw Error("Slot length must be at least its width");return jOe.parse({...h,shape:"slot",length:A,width:m,axis:u==="base"===!("vertical"in i)?"u":"v"})}var s$o={w:"width",l:"baseLength",h:"flangeHeight",t:"thickness",r:"insideBendRadius"};function a$o(e){let t={},n=cm(e.string);if(n[0]!=="sheetmetal")throw Error("Expected sheetmetal");let o=[],i=new Set;for(let s of n.slice(1)){if(/^(hole|slot)[1-9]\d*\(/.test(s)){let c=s.slice(0,s.indexOf("("));if(i.has(c))throw Error(`Duplicate feature "${c}"`);i.add(c),o.push(s);continue}if(["plate","angle","channel"].includes(s)){if(t.profile)throw Error("Duplicate sheet metal profile");t.profile=s;continue}let a=s$o[s[0]];if(!a||s.length<2)throw Error(`Unknown sheet metal token "${s}"`);if(a in t)throw Error(`Duplicate sheet metal property "${a}"`);t[a]=s.slice(1)}let r=L1e.parse({fn:"sheetmetal",...t});return r.holes=o.map((s)=>r$o(s,r.profile)),r}var pXt=xu({name:"sheetmetal",schema:L1e,parse:a$o});function c$o(e){e.register(pXt)}var l$o=Zt(["sitsFlat","sitsFlatBelowBoard","foldedToFaceAboveBoard","foldedToFaceBelowBoard","foldedToRightAngleAboveBoard","foldedToRightAngleBelowBoard"]),GOe=He().finite().positive(),d$o=Z().refine((e)=>{let t=e.split(":");if(t.length!==2)return!1;let n=Number(t[0]),o=Number(t[1]);return Number.isFinite(n)&&Number.isFinite(o)&&n>0&&o>0},'Aspect ratio must look like "16:9"').transform((e)=>e),bWt=kn([GOe,d$o,t7([GOe,GOe])]),SWt=at({x:id.optional(),y:id.optional(),z:id.optional()}).strict(),YOe=kn([He().finite(),Z().min(1)]),PWt=t7([YOe,YOe,YOe]),u$o=["sitsFlat","sitsFlatBelowBoard","foldedToFaceAboveBoard","foldedToFaceBelowBoard","foldsAboveBoard","foldsBelowBoard","foldedToRightAngleAboveBoard","foldedToRightAngleBelowBoard"],AXt={width:rs.optional(),height:rs.optional(),diagonal:rs.optional(),aspectRatio:bWt.optional(),ratio:bWt.optional(),defaultDiagonal:rs.optional(),orientation:l$o.optional(),sitsFlat:Ue().optional(),sitsFlatBelowBoard:Ue().optional(),foldedToFaceAboveBoard:Ue().optional(),foldedToFaceBelowBoard:Ue().optional(),foldsAboveBoard:Ue().optional(),foldsBelowBoard:Ue().optional(),foldedToRightAngleAboveBoard:Ue().optional(),foldedToRightAngleBelowBoard:Ue().optional(),screenThickness:rs.optional(),bezelInset:g1.optional(),bezelDepth:rs.optional(),activeAreaWidth:rs.optional(),activeAreaHeight:rs.optional(),screenColor:Z().min(1).optional(),bezelColor:Z().min(1).optional(),showScreen:Ue().optional(),flexCableLength:rs.optional(),flexCableWidth:rs.optional(),flexCableThickness:rs.optional(),flexCableColor:Z().min(1).optional(),pinCount:He().int().positive().optional(),pitch:rs.optional(),padWidth:rs.optional(),padLength:g1.optional(),tailLength:rs.optional(),taperLength:rs.optional(),conductorCount:He().int().positive().optional(),conductorPitch:rs.optional(),conductorWidth:rs.optional(),conductorThickness:rs.optional(),conductorColor:Z().min(1).optional(),cableEdgeMargin:g1.optional(),exposedContactLength:g1.optional(),showConductors:Ue().optional(),showFlexCable:Ue().optional(),showStiffeners:Ue().optional(),stiffenerLength:g1.optional(),stiffenerThickness:rs.optional(),stiffenerColor:Z().min(1).optional(),bendRadius:rs.optional(),bendSegments:He().int().min(2).optional(),rightAngleVerticalLead:g1.optional(),distanceAboveBoard:g1.optional(),distanceBelowBoard:g1.optional(),foldDistanceFromConnector:g1.optional(),foldOutset:rs.optional(),foldSegments:He().int().min(4).optional(),screenGap:g1.optional(),boardTopZ:id.optional(),boardThickness:rs.optional(),boardClearance:g1.optional(),cableStartX:id.optional(),cableStartY:id.optional(),cableStartZ:id.optional(),cableLateralOffset:id.optional(),screenOffset:SWt.optional(),screenRotation:PWt.optional(),rotation:PWt.optional(),offset:SWt.optional()},_Xt=(e,t)=>{let n=u$o.filter((o)=>e[o]===!0);if(n.length>1)t(n[1])},gXt=(e,t)=>{if(e.flexCableLength===void 0)return;if(e.tailLength!==void 0&&e.tailLength>=e.flexCableLength)t.addIssue({code:"custom",message:"tailLength must be shorter than flexCableLength",path:["tailLength"]});if((e.tailLength??0)+(e.taperLength??0)>e.flexCableLength)t.addIssue({code:"custom",message:"tailLength and taperLength must fit within flexCableLength",path:["taperLength"]})},gJr=at(AXt).strict().superRefine((e,t)=>{gXt(e,t),_Xt(e,(n)=>{t.addIssue({code:"custom",message:"Only one FlexScreen orientation shortcut can be true",path:[n]})})}),F1e=at({fn:Be("flexscreen"),...AXt}).strict().superRefine((e,t)=>{gXt(e,t),_Xt(e,(n)=>{t.addIssue({code:"custom",message:"Only one FlexScreen orientation shortcut can be true",path:[n]})})}),h$o={sitsflat:"sitsFlat",sitsflatbelow:"sitsFlatBelowBoard",sitsflatbelowboard:"sitsFlatBelowBoard",foldsabove:"foldedToFaceAboveBoard",foldsaboveboard:"foldedToFaceAboveBoard",foldedtofaceaboveboard:"foldedToFaceAboveBoard",foldsbelow:"foldedToFaceBelowBoard",foldsbelowboard:"foldedToFaceBelowBoard",foldedtofacebelowboard:"foldedToFaceBelowBoard",rightangleabove:"foldedToRightAngleAboveBoard",rightangleaboveboard:"foldedToRightAngleAboveBoard",foldedtorightangleaboveboard:"foldedToRightAngleAboveBoard",rightanglebelow:"foldedToRightAngleBelowBoard",rightanglebelowboard:"foldedToRightAngleBelowBoard",foldedtorightanglebelowboard:"foldedToRightAngleBelowBoard"},m$o={width:["width","w"],height:["height","h"],diagonal:["diagonal","diag","d"],defaultDiagonal:["defaultdiagonal","defaultdiag"],screenThickness:["screenthickness"],bezelInset:["bezelinset"],bezelDepth:["bezeldepth"],activeAreaWidth:["activeareawidth","activew"],activeAreaHeight:["activeareaheight","activeh"],flexCableLength:["flexcablelength","flexlength","flex"],flexCableWidth:["flexcablewidth","flexwidth"],flexCableThickness:["flexcablethickness","flexthickness"],pitch:["pitch","p"],padWidth:["padwidth","pw"],padLength:["padlength","pl"],tailLength:["taillength","tail"],taperLength:["taperlength","taper"],conductorPitch:["conductorpitch"],conductorWidth:["conductorwidth"],conductorThickness:["conductorthickness"],cableEdgeMargin:["cableedgemargin","edgemargin"],exposedContactLength:["exposedcontactlength","contactlength"],stiffenerLength:["stiffenerlength"],stiffenerThickness:["stiffenerthickness"],bendRadius:["bendradius"],rightAngleVerticalLead:["rightangleverticallead","verticallead"],distanceAboveBoard:["distanceaboveboard","distanceabove"],distanceBelowBoard:["distancebelowboard","distancebelow"],foldDistanceFromConnector:["folddistancefromconnector","folddistance","foldstart"],foldOutset:["foldoutset","outset"],screenGap:["screengap"],boardTopZ:["boardtopz"],boardThickness:["boardthickness"],boardClearance:["boardclearance"],cableStartX:["cablestartx"],cableStartY:["cablestarty"],cableStartZ:["cablestartz"],cableLateralOffset:["cablelateraloffset","lateraloffset"]},p$o=Object.fromEntries(Object.entries(m$o).flatMap(([e,t])=>t.map((n)=>[n,e]))),A$o={num_pins:"pinCount",pincount:"pinCount",conductorcount:"conductorCount",conductors:"conductorCount",bendsegments:"bendSegments",foldsegments:"foldSegments"},vWt={showscreen:["showScreen",!0],hidescreen:["showScreen",!1],showflex:["showFlexCable",!0],hideflex:["showFlexCable",!1],showconductors:["showConductors",!0],hideconductors:["showConductors",!1],showstiffeners:["showStiffeners",!0],hidestiffeners:["showStiffeners",!1]},_$o={screencolor:"screenColor",bezelcolor:"bezelColor",flexcolor:"flexCableColor",conductorcolor:"conductorColor",stiffenercolor:"stiffenerColor"},g$o=(e)=>{let t=String(e).toLowerCase().replace("x",":");if(t.includes(":")){let[o,i,r]=t.split(":"),s=Number(o),a=Number(i);if(r!==void 0||!Number.isFinite(s)||!Number.isFinite(a)||s<=0||a<=0)throw Error(`Invalid FlexScreen aspect ratio "${String(e)}"`);return`${s}:${a}`}let n=Number(t);if(!Number.isFinite(n)||n<=0)throw Error(`Invalid FlexScreen aspect ratio "${String(e)}"`);return n},f$o=(e,t)=>{if(typeof e!=="string"||!/^\(.+\)$/.test(e))throw Error(`FlexScreen token "${t}" requires a value in (...)`);return e.slice(1,-1)},EWt=(e,t)=>{if(e!==!0)throw Error(`FlexScreen token "${t}" does not accept a value`)},y$o=(e)=>{if(e.fn!=="flexscreen")throw Error(`Expected FlexScreen params, got "${e.fn}"`);let t={},n,o;for(let[i,r]of Object.entries(e)){if(i==="fn"||i==="string"||i==="flexscreen")continue;let s=h$o[i];if(s){if(EWt(r,i),n&&n!==s)throw Error("A FlexScreen model string can only set one orientation");n=s,t.orientation=s;continue}if(i in vWt){EWt(r,i);let[d,u]=vWt[i];t[d]=u;continue}let a=_$o[i];if(a){t[a]=f$o(r,i);continue}if(i==="ratio"){t.aspectRatio=g$o(r);continue}let c=p$o[i];if(c){t[c]=r;continue}if(i==="distance"){o=r;continue}let l=A$o[i];if(l){let d=Number(r);if(!Number.isInteger(d)||d<1)throw Error(`Invalid positive integer in FlexScreen token "${i}${String(r)}"`);t[l]=d;continue}throw Error(`Unknown FlexScreen model token "${i}${String(r)}"`)}if(o!==void 0)if(n==="foldedToFaceAboveBoard")t.distanceAboveBoard=o;else if(n==="foldedToFaceBelowBoard")t.distanceBelowBoard=o;else throw Error('The "distance" token requires foldsabove or foldsbelow; use distanceabove or distancebelow for an explicit side');return F1e.parse({fn:"flexscreen",...t})},fXt=xu({name:"flexscreen",schema:F1e,parse:y$o});function x$o(e){e.register(fXt)}var C$o=(e)=>{if(e.fn!=="hexsocketbolt")throw Error(`Expected hexsocketbolt params, got "${e.fn}"`);let t=e.string.split("_");if(t[0]?.toLowerCase()!=="hexsocketbolt")throw Error("The hexsocketbolt function does not accept an inline value");let n=new Set;for(let i of t.slice(1)){let r=i.match(/^[a-z]+/i)?.[0]?.toLowerCase();if(r&&n.has(r))throw Error(`Duplicate bolt token "${r}"`);if(r)n.add(r)}let o={};for(let[i,r]of Object.entries(e)){if(["fn","string","hexsocketbolt"].includes(i))continue;let s,a=r;if(i==="m")s="metricSize",a=`M${String(r)}`;else if(i==="l"||i==="length")s="length";else if(i==="threads"||i==="nothreads"){if(r!==!0)throw Error(`Bolt token "${i}" does not accept a value`);s="showThreads",a=i==="threads"}else throw Error(`Unknown hex socket bolt model token "${i}${String(r)}"`);if(s in o)throw Error(`Bolt property "${s}" is set more than once`);o[s]=a}return R1e.parse({fn:"hexsocketbolt",...o})},yXt=xu({name:"hexsocketbolt",schema:R1e,parse:C$o});function I$o(e){e.register(yXt)}var MWt={m:"module",module:"module",w:"faceWidth",width:"faceWidth",facewidth:"faceWidth",bore:"boreDiameter",borediameter:"boreDiameter",backlash:"backlash",clearance:"clearance",hubdiameter:"hubDiameter",hublength:"hubLength"};function b$o(e){let t=e.string.split("_"),n=t[0]?.match(/^spurgear(\d+)?$/i);if(!n||e.fn!=="spurgear")throw Error("Expected spurgear with an optional inline tooth count");let o={fn:"spurgear"};if(n[1])o.toothCount=TL(n[1],"toothCount");for(let i of t.slice(1)){let[r,s]=qU(i),a,c;if(r in MWt)a=MWt[r],c=s;else if(r==="teeth"||r==="segments")a=r==="teeth"?"toothCount":"segmentsPerTooth",c=TL(s,a);else if(r==="pa"||r==="pressureangle"||r==="phase")a=r==="phase"?"phase":"pressureAngle",c=T1e(s,a);else throw Error(`Unknown spur gear token "${i}"`);if(a in o)throw Error(`Spur gear property "${a}" is set more than once`);o[a]=c}return D1e.parse(o)}var xXt=xu({name:"spurgear",schema:D1e,parse:b$o});function S$o(e){e.register(xXt)}var CXt={module:ju.default(1),pitchDiameter:ju.default(10),length:ju.default(20),starts:He().int().min(1).max(8).default(1),pressureAngle:JWt.default(20),backlash:SS.default(0),clearance:SS.default(0.25),boreDiameter:SS.default(0),handedness:Zt(["right","left"]).default("right"),phase:He().finite().default(0),radialSegments:He().int().min(24).max(256).refine((e)=>e%4===0,"Radial segments must be divisible by four").default(96),segmentsPerTurn:He().int().min(12).max(128).default(32)};function IXt(e){let t=Math.PI*e.module,n=e.starts*t;return{pitchDiameter:e.pitchDiameter,outsideDiameter:e.pitchDiameter+2*e.module,rootDiameter:e.pitchDiameter-2*(e.module+e.clearance),axialPitch:t,lead:n,leadAngle:Math.atan(n/(Math.PI*e.pitchDiameter))*180/Math.PI,toothThickness:t/2-e.backlash}}function bXt(e,t){let n=(a,c)=>t.addIssue({code:"custom",message:a,path:c?[c]:[]}),o=IXt(e);if(Object.values(o).some((a)=>!Number.isFinite(a))){n("Derived worm dimensions must be finite");return}if(o.rootDiameter<=0){n("Dedendum must leave a positive root diameter","pitchDiameter");return}if(e.boreDiameter>=o.rootDiameter)n("Bore diameter must be smaller than the root diameter","boreDiameter");let i=Math.tan(e.pressureAngle*Math.PI/180),r=o.toothThickness-2*e.module*i,s=o.toothThickness+2*(e.module+e.clearance)*i;if(!Number.isFinite(r)||r<=0)n("Axial tooth tip must have positive thickness","backlash");if(!Number.isFinite(s)||s>=o.axialPitch)n("Adjacent threads must leave a positive root gap","pressureAngle")}var eze=at(CXt).strict().superRefine(bXt),H1e=at({fn:Be("wormgear"),...CXt}).strict().superRefine(bXt),SXt=(e={})=>IXt(eze.parse(e)),BWt={m:"module",module:"module",d:"pitchDiameter",pitchdiameter:"pitchDiameter",l:"length",length:"length",bore:"boreDiameter",borediameter:"boreDiameter",backlash:"backlash",clearance:"clearance"};function P$o(e){let t=e.string.split("_");if(t[0]?.toLowerCase()!=="wormgear"||e.fn!=="wormgear")throw Error("The wormgear function does not accept an inline value");let n={fn:"wormgear"};for(let o of t.slice(1)){let[i,r]=qU(o),s,a;if(i in BWt)s=BWt[i],a=r;else if(["starts","segments","turnsegments"].includes(i))s=i==="starts"?"starts":i==="segments"?"radialSegments":"segmentsPerTurn",a=TL(r,s);else if(i==="pa"||i==="pressureangle"||i==="phase")s=i==="phase"?"phase":"pressureAngle",a=T1e(r,s);else if(i==="right"||i==="left"){if(r)throw Error(`Worm flag "${i}" does not accept a value`);s="handedness",a=i}else throw Error(`Unknown worm gear token "${o}"`);if(s in n)throw Error(`Worm gear property "${s}" is set more than once`);n[s]=a}return H1e.parse(n)}var PXt=xu({name:"wormgear",schema:H1e,parse:P$o});function v$o(e){e.register(PXt)}var vXt={"608":{innerDiameter:8,outerDiameter:22,width:7},"625":{innerDiameter:5,outerDiameter:16,width:5},"624":{innerDiameter:4,outerDiameter:13,width:5},"6000":{innerDiameter:10,outerDiameter:26,width:8},"6001":{innerDiameter:12,outerDiameter:28,width:8},"6002":{innerDiameter:15,outerDiameter:32,width:9}},E$o={innerDiameter:8,outerDiameter:22,width:7},M$o=Zt(["608","625","624","6000","6001","6002"]),VOe=kn([He(),Z().regex(/^[+-]?(?:\d+(?:\.\d*)?|\.\d+)(?:mm|cm|m|in|inch|mil|ft|feet)?$/i).transform((e)=>e.toLowerCase())]).pipe(id).refine((e)=>e>0,"Length must be positive"),EXt={innerDiameter:VOe.optional(),outerDiameter:VOe.optional(),width:VOe.optional(),code:M$o.optional(),bothSidesOpen:Ue().optional(),bothSidesShielded:Ue().optional(),bothSidesSealed:Ue().optional(),topSideOpen:Ue().optional(),topSideShielded:Ue().optional(),topSideSealed:Ue().optional(),bottomSideOpen:Ue().optional(),bottomSideShielded:Ue().optional(),bottomSideSealed:Ue().optional()};function MXt(e,t){let n=e.code===void 0?E$o:vXt[e.code],o=["Open","Shielded","Sealed"],i=o.filter((l)=>e[`bothSides${l}`]===!0);if(i.length>1)t.addIssue({code:"custom",message:"Both-side flags conflict"});let r=(l)=>{let d=o.filter((h)=>e[`${l}Side${h}`]===!0),u=o.some((h)=>e[`${l}Side${h}`]!==void 0);if(d.length>1||u&&d.length===0)t.addIssue({code:"custom",message:`${l} face must select exactly one flag`});return d[0]??i[0]??"Open"},s=r("top"),a=r("bottom"),c={innerDiameter:e.innerDiameter??n.innerDiameter,outerDiameter:e.outerDiameter??n.outerDiameter,width:e.width??n.width,topSideOpen:s==="Open",topSideShielded:s==="Shielded",topSideSealed:s==="Sealed",bottomSideOpen:a==="Open",bottomSideShielded:a==="Shielded",bottomSideSealed:a==="Sealed"};if(e.code!==void 0){for(let l of["innerDiameter","outerDiameter","width"])if(Math.abs(c[l]-n[l])>0.000000001)t.addIssue({code:"custom",path:[l],message:`Dimension conflicts with bearing designation ${e.code}`})}if(c.innerDiameter>=c.outerDiameter)t.addIssue({code:"custom",path:["innerDiameter"],message:"Inner diameter must be smaller than outer diameter"});return c}var B$o=at(EXt).strict().transform(MXt),O1e=at({fn:Be("ballbearing"),...EXt}).strict().transform((e,t)=>({fn:e.fn,...MXt(e,t)}));function BXt(e={}){let t=B$o.parse(e),n=t.innerDiameter/2,o=t.outerDiameter/2,i=(n+o)/2,r=8,s=Math.min((o-n)*0.28,t.width*0.3,i*Math.sin(Math.PI/8)*0.85),a=i-0.9*s,c=i+0.9*s,l=1.03*s;return{...t,boreRadius:n,outerRadius:o,pitchRadius:i,ballCount:8,ballRadius:s,innerRaceOuterRadius:a,outerRaceInnerRadius:c,grooveRadius:l,grooveHalfWidth:s*Math.sqrt(0.2508999999999999),rimChamfer:Math.min(t.width*0.035,(a-n)*0.1,(o-c)*0.1),closureThickness:t.width*0.1,cageInnerRadius:i-0.16*s,cageOuterRadius:i+0.16*s,cageSeparatorHalfAngle:Math.PI/8-Math.asin(1.1*s/i),midZ:t.width/2}}var wWt={id:"innerDiameter",innerdiameter:"innerDiameter",od:"outerDiameter",outerdiameter:"outerDiameter",w:"width",width:"width"},TWt={open:"bothSidesOpen",bothsidesopen:"bothSidesOpen",shielded:"bothSidesShielded",bothsidesshielded:"bothSidesShielded",sealed:"bothSidesSealed",bothsidessealed:"bothSidesSealed",topsideopen:"topSideOpen",topsideshielded:"topSideShielded",topsidesealed:"topSideSealed",bottomsideopen:"bottomSideOpen",bottomsideshielded:"bottomSideShielded",bottomsidesealed:"bottomSideSealed"},w$o=["","z","zz","2z","rs","2rs"];function wXt(e){let t=cm(e.string),n=t[0]?.toLowerCase()??"";if(e.fn!=="ballbearing")throw Error("Expected ballbearing");let o={fn:"ballbearing"},i="";if(n!=="ballbearing"){let s=n.slice(11),a=Object.keys(vXt).sort((c,l)=>l.length-c.length).find((c)=>s.startsWith(c)&&w$o.some((l)=>s===c+l));if(!n.startsWith("ballbearing")||!a)throw Error(`Unsupported ballbearing designation "${n}"`);o.code=a,i=s.slice(a.length)}let r=new Set;for(let s of t.slice(1)){let a=s.toLowerCase();if(Object.hasOwn(TWt,a)){let h=TWt[a],A=h.startsWith("both")?"both":h.startsWith("top")?"top":"bottom";if(r.has(A))throw Error(`ballbearing ${A} face flags are repeated or conflict`);r.add(A),o[h]=!0;continue}let c=s.match(/^([a-z]+)(.*)$/i);if(!c)throw Error(`Invalid ballbearing token "${s}"`);let l=c[1].toLowerCase(),d=c[2],u;if(Object.hasOwn(wWt,l))u=wWt[l];else if(l==="code"){if(u="code",!/^\d+$/.test(d))throw Error("Bearing code must be a complete numeric designation")}else throw Error(`Unknown ballbearing token "${s}"`);if(Object.hasOwn(o,u))throw Error(`ballbearing property "${u}" is set more than once`);o[u]=d}if(!r.has("both")){let s=i==="zz"||i==="2z"?"Shielded":i==="2rs"?"Sealed":"Open";if(o[`bothSides${s}`]=!0,!r.has("bottom")&&(i==="z"||i==="rs"))o[i==="z"?"bottomSideShielded":"bottomSideSealed"]=!0}return O1e.parse(o)}function UOe(e){let t=String(e);if(!t.includes("e"))return t;let[n,o]=t.split("e"),[i,r=""]=n.split("."),s=i+r,a=i.length+Number(o);if(a<=0)return`0.${"0".repeat(-a)}${s}`;if(a>=s.length)return s+"0".repeat(a-s.length);return`${s.slice(0,a)}.${s.slice(a)}`}function T$o(e){let t=wXt(qOe(e)),n=t.topSideOpen?"open":t.topSideShielded?"shielded":"sealed",o=t.bottomSideOpen?"open":t.bottomSideShielded?"shielded":"sealed",i=n===o?`bothsides${n}`:`topside${n}_bottomside${o}`;return`ballbearing_id${UOe(t.innerDiameter)}mm_od${UOe(t.outerDiameter)}mm_w${UOe(t.width)}mm_${i}`}var TXt=xu({name:"ballbearing",schema:O1e,parse:wXt,normalizeString:T$o});function D$o(e){e.register(TXt)}var tze={M3:{diameter:3,threadPitch:0.5,headDiameter:5.7,headHeight:1.65,crownFlatDiameter:2.6,crownRadius:3.5,socketWidth:2,socketDepth:1.04,underHeadRadius:0.3,referenceThreadLength:18},M4:{diameter:4,threadPitch:0.7,headDiameter:7.6,headHeight:2.2,crownFlatDiameter:3.8,crownRadius:4.4,socketWidth:2.5,socketDepth:1.3,underHeadRadius:0.4,referenceThreadLength:20},M5:{diameter:5,threadPitch:0.8,headDiameter:9.5,headHeight:2.75,crownFlatDiameter:5,crownRadius:5.5,socketWidth:3,socketDepth:1.56,underHeadRadius:0.45,referenceThreadLength:22},M6:{diameter:6,threadPitch:1,headDiameter:10.5,headHeight:3.3,crownFlatDiameter:6,crownRadius:5.9,socketWidth:4,socketDepth:2.08,underHeadRadius:0.5,referenceThreadLength:24}},DWt=kn([He(),Z().regex(/^[+-]?(?:\d+(?:\.\d*)?|\.\d+)(?:mm|cm|m|in|inch|mil|ft|feet)?$/i).transform((e)=>e.toLowerCase())]).pipe(id).refine((e)=>e>0,"Length must be positive"),N$o=Zt(["M3","M4","M5","M6"]),DXt={standard:Zt(["iso7380-1","iso7380-1:2022"]).default("iso7380-1").transform(()=>"iso7380-1:2022"),metricSize:N$o,length:DWt,drive:Be("hexsocket").default("hexsocket"),thread:Be("full").default("full"),threadPitch:DWt.optional(),threadHand:Be("right").default("right"),threadClass:Be("6g").default("6g"),showThreads:Ue().default(!0)};function NXt(e,t){let n=tze[e.metricSize];if(e.threadPitch!==void 0&&Math.abs(e.threadPitch-n.threadPitch)>0.000000001)t.addIssue({code:"custom",path:["threadPitch"],message:"ISO 7380-1 requires the tabulated coarse pitch"});if(e.length>n.referenceThreadLength)t.addIssue({code:"custom",path:["length"],message:"This family supports only lengths at or below the reference full-thread length"});if(e.length<2*n.threadPitch)t.addIssue({code:"custom",path:["length"],message:"Length must allow the fixed thread runout and tip chamfer"})}function RXt(e){return{...e,threadPitch:tze[e.metricSize].threadPitch}}var nze=at(DXt).strict().superRefine(NXt).transform(RXt),z1e=at({fn:Be("buttonscrew"),...DXt}).strict().superRefine(NXt).transform(RXt);function QXt(e){let t=nze.parse(e),n=tze[t.metricSize],o=n.crownFlatDiameter/2-n.headDiameter/2,i=n.headHeight,r=Math.hypot(o,i),s=Math.sqrt(n.crownRadius**2-r**2/4);return{...n,length:t.length,overallLength:t.length+n.headHeight,crownArcCenterR:(n.headDiameter+n.crownFlatDiameter)/4-s*i/r,crownArcCenterZ:i/2+s*o/r,threadMinorDiameter:n.diameter-5*Math.sqrt(3)/8*n.threadPitch,threadPitchDiameter:n.diameter-3*Math.sqrt(3)/8*n.threadPitch,threadRunoutLength:n.threadPitch,tipChamfer:n.threadPitch/2,bearingZ:0,tipZ:-t.length,topZ:n.headHeight}}function R$o(e){let t=cm(e.string);if(e.fn!=="buttonscrew"||t[0]?.toLowerCase()!=="buttonscrew")throw Error("Expected buttonscrew without an inline argument");let n={fn:"buttonscrew"},o={l:"length",length:"length",threadpitch:"threadPitch"},i={standard:"standard",drive:"drive",thread:"thread",threadhand:"threadHand",threadclass:"threadClass"};for(let r of t.slice(1)){let s=r.match(/^([a-z]+)(.*)$/i);if(!s)throw Error(`Invalid button screw token "${r}"`);let a=s[1].toLowerCase(),c=s[2],l,d=c;if(a==="m")l="metricSize",d=`M${c}`;else if(a in o)l=o[a];else if(a in i){if(l=i[a],!/^\([^()]+\)$/.test(c))throw Error(`Expected a parenthesized ${a}`);d=c.slice(1,-1).toLowerCase()}else if(a==="threads"||a==="nothreads"){if(c)throw Error("Thread visibility flags cannot have a value");l="showThreads",d=a==="threads"}else throw Error(`Unknown button screw token "${r}"`);if(l in n)throw Error(`Duplicate button screw property "${l}"`);n[l]=d}return z1e.parse(n)}var kXt=xu({name:"buttonscrew",schema:z1e,parse:R$o});function Q$o(e){e.register(kXt)}var KU=kn([He(),Z().regex(/^[+-]?(?:\d+(?:\.\d*)?|\.\d+)(?:mm|cm|m|in|inch|mil|ft|feet)?$/i,"Expected a complete numeric length with an optional unit")]).pipe(rs),LXt={panelHoleDiameter:KU,innerDiameter:KU,outerDiameter:KU,height:KU,grooveWidth:KU,grooveDepth:KU,shape:Be("symmetricring").default("symmetricring")};function FXt(e,t){if(e.innerDiameter>=e.panelHoleDiameter||e.panelHoleDiameter>=e.outerDiameter)t.addIssue({code:"custom",path:["panelHoleDiameter"],message:"Diameters must satisfy ID < panel hole < OD"});if(e.grooveWidth>=e.height)t.addIssue({code:"custom",path:["grooveWidth"],message:"Groove width must leave two positive-thickness flanges"});let n=e.outerDiameter-2*e.grooveDepth,o=0.000000001*e.outerDiameter;if(!Number.isFinite(n)||Math.abs(n-e.panelHoleDiameter)>o)t.addIssue({code:"custom",path:["grooveDepth"],message:"Panel hole must equal OD minus twice the radial groove depth"});if((n-e.innerDiameter)/2<=0||(e.height-e.grooveWidth)/2<=0)t.addIssue({code:"custom",message:"Derived root wall and flange thicknesses must be positive"})}var oze=at(LXt).strict().superRefine(FXt),G1e=at({fn:Be("cablegrommet"),...LXt}).strict().superRefine(FXt);function HXt(e){let t=oze.parse(e),n=t.outerDiameter-2*t.grooveDepth;return{grooveRootDiameter:n,flangeThickness:(t.height-t.grooveWidth)/2,minimumWallThickness:(n-t.innerDiameter)/2,grooveStartZ:-t.grooveWidth/2,grooveEndZ:t.grooveWidth/2}}var NWt={panelhole:"panelHoleDiameter",panelholediameter:"panelHoleDiameter",id:"innerDiameter",innerdiameter:"innerDiameter",od:"outerDiameter",outerdiameter:"outerDiameter",h:"height",height:"height",groovew:"grooveWidth",groovewidth:"grooveWidth",grooved:"grooveDepth",groovedepth:"grooveDepth"};function k$o(e){let t=cm(e.string);if(e.fn!=="cablegrommet"||!/^cablegrommet$/i.test(t[0]))throw Error("Expected cablegrommet without an inline value");let n={fn:"cablegrommet"};for(let o of t.slice(1)){let i=o.match(/^([a-z]+)(.*)$/i),r=i?.[1]?.toLowerCase(),s=i?.[2];if(!r||!s)throw Error(`Invalid grommet token "${o}"`);let a,c=s;if(r in NWt)a=NWt[r];else if(r==="shape"){a="shape";let l=s.match(/^\(([a-z]+)\)$/i);if(!l)throw Error("Grommet shape requires parentheses");c=l[1].toLowerCase()}else throw Error(`Unknown grommet token "${o}"`);if(a in n)throw Error(`Grommet property "${a}" is set more than once`);n[a]=c}return G1e.parse(n)}var OXt=xu({name:"cablegrommet",schema:G1e,parse:k$o});function L$o(e){e.register(OXt)}var zXt=kn([He().finite(),Z().regex(/^[+]?(?:\d+(?:\.\d*)?|\.\d+)(?:mm|cm|m|in|inch|mil|ft|feet)?$/i,"Expected a complete length with a supported unit").transform((e)=>e.toLowerCase())]).pipe(id),fT=zXt.refine((e)=>e>0,"Length must be positive"),F$o=zXt.refine((e)=>e>=0,"Length cannot be negative"),GXt={boreDiameter:fT,outerDiameter:fT,width:fT,screwZ:fT.optional(),splitWidth:fT,clampX:fT.optional(),clearanceHoleDiameter:fT.optional(),mount:Be("singleclamp").default("singleclamp"),metricSize:wne,threadPitch:fT.optional(),threadHand:Zt(["right","left"]).default("right"),threadClass:Be("6H").default("6H"),chamfer:F$o.default(0)};function ize(e){let t=Ry[e.metricSize].diameter,n=e.threadPitch??Ry[e.metricSize].threadPitch;return{...e,threadPitch:n,screwZ:e.screwZ??e.width/2,clampX:e.clampX??(e.outerDiameter+e.boreDiameter)/4,clearanceHoleDiameter:e.clearanceHoleDiameter??t+0.5}}function YXt(e,t){let n=ize(e),o=(c)=>t.addIssue({code:"custom",message:c}),i=Ry[n.metricSize].diameter;if(!Number.isFinite(n.outerDiameter**2))o("Derived dimensions must be finite");let r=(n.outerDiameter-n.boreDiameter)/2;if(r<=0)o("Outer diameter must exceed the bore diameter");if(n.threadPitch>=i)o("Thread pitch must be smaller than its nominal diameter");if(n.splitWidth>=n.boreDiameter)o("Split width must be smaller than the shaft bore");if(n.clearanceHoleDiameter<=i)o("Clearance hole diameter must exceed the thread diameter");let s=n.clearanceHoleDiameter/2;if(n.clampX-s<=n.boreDiameter/2||n.clampX+s>=n.outerDiameter/2)o("Clamp hole must fit within the radial wall without intersecting the shaft bore");if(n.screwZ-s<=n.chamfer||n.screwZ+s>=n.width-n.chamfer)o("Clamp hole must clear both end faces and chamfers");if(n.chamfer>=r/2||n.chamfer>=n.width/2)o("Chamfer must leave material between the bore and exterior");let a=n.outerDiameter/2;if(n.clampX+s<a&&n.splitWidth/2>=Math.sqrt(a**2-(n.clampX+s)**2))o("Split must leave material around both sides of the clamping bore")}var rze=at(GXt).strict().superRefine(YXt).transform(ize),Y1e=at({fn:Be("clampingshaftcollar"),...GXt}).strict().superRefine(YXt).transform((e)=>({fn:e.fn,...ize(e)}));function VXt(e){let t=rze.parse(e),n=Ry[t.metricSize].diameter,o=t.outerDiameter/2,i=Math.sqrt(o**2-(t.clampX-t.clearanceHoleDiameter/2)**2),r=Math.sqrt(o**2-(t.clampX-n/2)**2);return{threadDiameter:n,split:{xMin:0,xMax:o,yMin:-t.splitWidth/2,yMax:t.splitWidth/2,zMin:0,zMax:t.width},clearanceHole:{start:[t.clampX,-i,t.screwZ],direction:[0,1,0],diameter:t.clearanceHoleDiameter,depth:i-t.splitWidth/2},threadedHole:{start:[t.clampX,t.splitWidth/2,t.screwZ],direction:[0,1,0],diameter:n,depth:r-t.splitWidth/2,threadPitch:t.threadPitch,threadHand:t.threadHand,threadGender:"female",threadClass:t.threadClass}}}var H$o={bore:"boreDiameter",od:"outerDiameter",mount:"mount",m:"metricSize",threadpitch:"threadPitch",threadhand:"threadHand",threadclass:"threadClass",chamfer:"chamfer",w:"width",width:"width",screwz:"screwZ",split:"splitWidth",clampx:"clampX",clearance:"clearanceHoleDiameter"};function O$o(e){let t=cm(e.string);if(e.fn!=="clampingshaftcollar"||t[0]?.toLowerCase()!=="clampingshaftcollar")throw Error("Expected an unadorned clampingshaftcollar function");let n={};for(let o of t.slice(1)){let i=o.match(/^([a-z]+)(.*)$/i),r=i?.[1]?.toLowerCase()??"",s=H$o[r];if(!s)throw Error(`Unknown clampingshaftcollar token "${o}"`);if(s in n)throw Error(`Duplicate clampingshaftcollar property "${s}"`);let a=i[2];if(!a)throw Error(`Token "${r}" requires a value`);if(["mount","threadHand","threadClass"].includes(s)){let c=a.match(/^\(([^()]+)\)$/);if(!c)throw Error(`Token "${r}" requires one parenthesized argument`);n[s]=s==="threadClass"?c[1].toUpperCase():c[1].toLowerCase()}else if(s==="metricSize"){if(!/^\d+(?:\.\d+)?$/.test(a))throw Error("m requires a unitless metric designation");n[s]=`M${a}`}else n[s]=a}return Y1e.parse({fn:"clampingshaftcollar",...n})}var UXt=xu({name:"clampingshaftcollar",schema:Y1e,parse:O$o});function z$o(e){e.register(UXt)}var WOe=kn([He(),Z().regex(/^[+-]?(?:\d+(?:\.\d*)?|\.\d+)(?:mm|cm|m|in|inch|mil|ft|feet)?$/i).transform((e)=>e.toLowerCase())]).pipe(id).refine((e)=>e>0,"Length must be positive"),RWt=He().int().min(1).max(Number.MAX_SAFE_INTEGER),WXt={spec:Be("custom").default("custom"),outerDiameter:WOe,wireDiameter:WOe,freeLength:WOe,totalTurns:RWt.min(3),activeTurns:RWt.optional(),ends:Be("closedground").default("closedground"),hand:Zt(["right","left"]).default("right"),state:Be("free").default("free")};function XXt(e,t){if(e.outerDiameter<=2*e.wireDiameter)t.addIssue({code:"custom",path:["outerDiameter"],message:"Outer diameter must exceed twice the wire diameter to leave a positive bore"});if(e.activeTurns!==void 0&&e.activeTurns!==e.totalTurns-2)t.addIssue({code:"custom",path:["activeTurns"],message:"Closed-ground ends require totalTurns = activeTurns + 2"});let n=e.totalTurns*e.wireDiameter;if(!Number.isFinite(n)||e.freeLength<=n)t.addIssue({code:"custom",path:["freeLength"],message:"Free length must exceed the finite solid height totalTurns * wireDiameter"})}function KXt(e){return{...e,activeTurns:e.activeTurns??e.totalTurns-2}}var V1e=at(WXt).strict().superRefine(XXt).transform(KXt),U1e=at({fn:Be("compressionspring"),...WXt}).strict().superRefine(XXt).transform(KXt);function jXt(e){let t=V1e.parse(e);return{outerDiameter:t.outerDiameter,wireDiameter:t.wireDiameter,insideDiameter:t.outerDiameter-2*t.wireDiameter,meanDiameter:t.outerDiameter-t.wireDiameter,freeLength:t.freeLength,totalTurns:t.totalTurns,activeTurns:t.activeTurns,endTurns:1,endPitch:t.wireDiameter,activePitch:(t.freeLength-2*t.wireDiameter)/t.activeTurns,solidHeight:t.totalTurns*t.wireDiameter,availableTravel:t.freeLength-t.totalTurns*t.wireDiameter,lowerBearingZ:0,upperBearingZ:t.freeLength}}function qXt(e,t){let n=V1e.parse(e);if(!Number.isFinite(t)||t<0||t>n.totalTurns)throw Error("Turn coordinate must be finite and within [0,totalTurns]");let o=(n.outerDiameter-n.wireDiameter)/2,i=(n.freeLength-2*n.wireDiameter)/n.activeTurns,r=(n.hand==="right"?1:-1)*2*Math.PI*(t%1),s=t<=1?n.wireDiameter*t:t>=n.totalTurns-1?n.freeLength-n.wireDiameter*(n.totalTurns-t):n.wireDiameter+i*(t-1);return{x:o*Math.cos(r),y:o*Math.sin(r),z:s}}function G$o(e){let t=cm(e.string);if(e.fn!=="compressionspring"||t[0]?.toLowerCase()!=="compressionspring")throw Error("Expected compressionspring without an inline argument");let n={fn:"compressionspring"},o={od:"outerDiameter",wire:"wireDiameter",l:"freeLength",length:"freeLength",freelength:"freeLength"},i={spec:"spec",ends:"ends",hand:"hand",state:"state"};for(let r of t.slice(1)){let s=r.match(/^([a-z]+)(.*)$/i);if(!s)throw Error(`Invalid compression spring token "${r}"`);let a=s[1].toLowerCase(),c=s[2],l,d=c;if(a in o)l=o[a];else if(a==="turns"||a==="active"){if(l=a==="turns"?"totalTurns":"activeTurns",!/^\d+$/.test(c))throw Error(`${a} requires a unitless integer`);d=Number(c)}else if(a in i){if(l=i[a],!/^\([^()]+\)$/.test(c))throw Error(`Expected a parenthesized ${a}`);d=c.slice(1,-1).toLowerCase()}else throw Error(`Unknown compression spring token "${r}"`);if(l in n)throw Error(`Duplicate compression spring property "${l}"`);n[l]=d}return U1e.parse(n)}var JXt=xu({name:"compressionspring",schema:U1e,parse:G$o});function Y$o(e){e.register(JXt)}var vne=kn([He(),Z().regex(/^[+-]?(?:\d+(?:\.\d*)?|\.\d+)(?:mm|cm|m|in|inch|mil|ft|feet)?$/i).transform((e)=>e.toLowerCase())]).pipe(id).refine((e)=>e>0),$Xt={innerDiameter:vne,outerDiameter:vne,flangeDiameter:vne,length:vne,flangeThickness:vne,style:Be("plainclosed").default("plainclosed")};function ZXt(e,t){if(e.outerDiameter<=e.innerDiameter)t.addIssue({code:"custom",path:["outerDiameter"],message:"Sleeve outside diameter must exceed the bore diameter"});if(e.flangeDiameter<=e.outerDiameter)t.addIssue({code:"custom",path:["flangeDiameter"],message:"Flange diameter must exceed the sleeve outside diameter"});if(e.flangeThickness>=e.length)t.addIssue({code:"custom",path:["flangeThickness"],message:"Flange thickness must leave a positive projecting sleeve length"})}var sze=at($Xt).strict().superRefine(ZXt),W1e=at({fn:Be("flangedbushing"),...$Xt}).strict().superRefine(ZXt);function eKt(e){let t=sze.parse(e);return{innerDiameter:t.innerDiameter,outerDiameter:t.outerDiameter,flangeDiameter:t.flangeDiameter,length:t.length,flangeThickness:t.flangeThickness,sleeveLength:t.length-t.flangeThickness,wallThickness:(t.outerDiameter-t.innerDiameter)/2,flangeProjection:(t.flangeDiameter-t.outerDiameter)/2,shoulderZ:t.flangeThickness}}var QWt={id:"innerDiameter",innerdiameter:"innerDiameter",od:"outerDiameter",outerdiameter:"outerDiameter",flangeod:"flangeDiameter",flangediameter:"flangeDiameter",l:"length",length:"length",flangethickness:"flangeThickness"};function V$o(e){let t=cm(e.string);if(e.fn!=="flangedbushing"||t[0]?.toLowerCase()!=="flangedbushing")throw Error("Expected flangedbushing without an inline value");let n={fn:"flangedbushing"};for(let o of t.slice(1)){let i=o.match(/^([a-z]+)(.*)$/i);if(!i)throw Error(`Invalid flanged bushing token "${o}"`);let r=i[1].toLowerCase(),s=i[2],a,c;if(Object.hasOwn(QWt,r))a=QWt[r],c=s;else if(r==="style"){a="style";let l=s.match(/^\(([a-z]+)\)$/i);if(!l)throw Error("Style requires a parenthesized value");c=l[1].toLowerCase()}else throw Error(`Unknown flanged bushing token "${o}"`);if(Object.hasOwn(n,a))throw Error(`Flanged bushing property "${a}" is set more than once`);n[a]=c}return W1e.parse(n)}var tKt=xu({name:"flangedbushing",schema:W1e,parse:V$o});function U$o(e){e.register(tKt)}var UI=kn([He(),Z().regex(/^(?:\d+(?:\.\d+)?|\.\d+)(?:mm|cm|m|in|inch)?$/i).transform((e)=>e.toLowerCase())]).pipe(id).refine((e)=>e>0,"Length must be positive"),aze={M3:{diameter:3,threadPitch:0.5,headDiameter:6.72,headHeight:1.86,socketAcrossFlats:2,socketDepth:1.1,underHeadRadius:0.1,maximumThreadLength:18,headAngle:90,tipChamferAngle:45,threadFlankAngle:60,tipChamfer:0.25,threadRootDiameter:2.3865653389860224,threadPitchDiameter:2.6752404735808355},M4:{diameter:4,threadPitch:0.7,headDiameter:8.96,headHeight:2.48,socketAcrossFlats:2.5,socketDepth:1.5,underHeadRadius:0.2,maximumThreadLength:20,headAngle:90,tipChamferAngle:45,threadFlankAngle:60,tipChamfer:0.35,threadRootDiameter:3.141191474580432,threadPitchDiameter:3.5453366630131695},M5:{diameter:5,threadPitch:0.8,headDiameter:11.2,headHeight:3.1,socketAcrossFlats:3,socketDepth:1.9,underHeadRadius:0.2,maximumThreadLength:22,headAngle:90,tipChamferAngle:45,threadFlankAngle:60,tipChamfer:0.4,threadRootDiameter:4.018504542377636,threadPitchDiameter:4.480384757729337},M6:{diameter:6,threadPitch:1,headDiameter:13.44,headHeight:3.72,socketAcrossFlats:4,socketDepth:2.2,underHeadRadius:0.25,maximumThreadLength:24,headAngle:90,tipChamferAngle:45,threadFlankAngle:60,tipChamfer:0.5,threadRootDiameter:4.773130677972045,threadPitchDiameter:5.350480947161671}},W$o=Zt(["M3","M4","M5","M6"]),X$o=Zt(["iso10642","iso10642:2019"]).default("iso10642").transform(()=>"iso10642:2019"),nKt={standard:X$o,metricSize:W$o,length:UI,thread:Be("full").default("full"),drive:Be("hexsocket").default("hexsocket"),threadHand:Zt(["right","left"]).default("right"),threadClass:Be("6g").default("6g"),threadGender:Be("male").default("male"),showThreads:Ue().default(!0),diameter:UI.optional(),threadPitch:UI.optional(),headDiameter:UI.optional(),headHeight:UI.optional(),socketAcrossFlats:UI.optional(),socketDepth:UI.optional(),underHeadRadius:UI.optional(),maximumThreadLength:UI.optional(),headAngle:He().finite().positive().optional(),tipChamferAngle:He().finite().positive().optional(),threadFlankAngle:He().finite().positive().optional(),tipChamfer:UI.optional(),threadRootDiameter:UI.optional(),threadPitchDiameter:UI.optional()},oKt=(e,t)=>{let n=aze[e.metricSize];for(let o of Object.keys(n))if(e[o]!==void 0&&Math.abs(e[o]-n[o])>0.000000001)t.addIssue({code:"custom",path:[o],message:`Dimension ${o} contradicts ${e.standard} ${e.metricSize}`});if(e.length<=n.tipChamfer)t.addIssue({code:"custom",path:["length"],message:"Length must exceed the fixed tip chamfer"});if(e.length<=n.headHeight+n.underHeadRadius+n.tipChamfer)t.addIssue({code:"custom",path:["length"],message:"Overall length must leave a shank beyond the countersunk head, under-head fillet and tip chamfer"});if(e.length-n.headHeight>n.maximumThreadLength+0.000000001)t.addIssue({code:"custom",path:["length"],message:"This contract supports full-thread screws only; length exceeds the pinned thread-length range"})},iKt=at(nKt).strict().superRefine(oKt).transform((e)=>({...e,...aze[e.metricSize]})),X1e=at({fn:Be("flatheadscrew"),...nKt}).strict().superRefine(oKt).transform((e)=>({...e,...aze[e.metricSize]})),K$o={m:"metricSize",metricsize:"metricSize",l:"length",length:"length",standard:"standard",thread:"thread",drive:"drive",threadhand:"threadHand",threadclass:"threadClass",threadgender:"threadGender",diameter:"diameter",threadpitch:"threadPitch",headdiameter:"headDiameter",headheight:"headHeight",socketacrossflats:"socketAcrossFlats",socketdepth:"socketDepth",underheadradius:"underHeadRadius",maximumthreadlength:"maximumThreadLength",headangle:"headAngle",tipchamferangle:"tipChamferAngle",threadflankangle:"threadFlankAngle",tipchamfer:"tipChamfer",threadrootdiameter:"threadRootDiameter",threadpitchdiameter:"threadPitchDiameter",d:"diameter",headh:"headHeight",headd:"headDiameter",socketaf:"socketAcrossFlats",socketh:"socketDepth"},j$o=new Set(["standard","thread","drive","threadHand","threadClass","threadGender"]),q$o=(e)=>{if(e.fn!=="flatheadscrew")throw Error(`Expected flatheadscrew params, got "${e.fn}"`);let[t,...n]=cm(e.string);if(t?.toLowerCase()!=="flatheadscrew")throw Error("The flatheadscrew function does not accept an inline value");let o={};for(let i of n){let r=i.match(/^([a-z]+)(.*)$/i),s=r?.[1]?.toLowerCase(),a=r?.[2],c,l;if(s==="threads"||s==="nothreads"){if(a!=="")throw Error(`Token "${s}" does not accept a value`);c="showThreads",l=s==="threads"}else{if(c=s?K$o[s]??"":"",!c||!a)throw Error(`Unknown or missing flatheadscrew token "${i}"`);if(j$o.has(c)){let d=a.match(/^\(([^()]+)\)$/)?.[1];if(!d)throw Error(`Token "${s}" requires a parenthesized selector`);l=d.toLowerCase()}else if(c==="metricSize"){let d=s==="m"?a:a.match(/^\((m\d+)\)$/i)?.[1]?.slice(1);if(!d||!/^\d+$/.test(d))throw Error("Invalid metric size");l=`M${d}`}else{if(!/^(?:\d+(?:\.\d+)?|\.\d+)(?:mm|cm|m|in|inch)?$/i.test(a))throw Error(`Invalid dimension token "${i}"`);l=["headAngle","tipChamferAngle","threadFlankAngle"].includes(c)?Number(a):a}}if(c in o)throw Error(`Property "${c}" is set more than once`);o[c]=l}return X1e.parse({fn:"flatheadscrew",...o})},rKt=xu({name:"flatheadscrew",schema:X1e,parse:q$o});function J$o(e){e.register(rKt)}var cze={M5:{diameter:5,threadPitch:0.8,acrossFlats:8,height:4.7,mouthDiameter:5.75},M6:{diameter:6,threadPitch:1,acrossFlats:10,height:5.2,mouthDiameter:6.75},M8:{diameter:8,threadPitch:1.25,acrossFlats:13,height:6.8,mouthDiameter:8.75},M10:{diameter:10,threadPitch:1.5,acrossFlats:16,height:8.4,mouthDiameter:10.8},M12:{diameter:12,threadPitch:1.75,acrossFlats:18,height:10.8,mouthDiameter:12.96}},$$o=Zt(["M5","M6","M8","M10","M12"]),Z$o=kn([He(),Z().regex(/^[+-]?(?:\d+(?:\.\d*)?|\.\d+)(?:mm|cm|m|in|inch|mil|ft|feet)?$/i).transform((e)=>e.toLowerCase())]).pipe(id).refine((e)=>e>0,"Length must be positive"),sKt={standard:Zt(["iso4032","iso4032:2023"]).default("iso4032").transform(()=>"iso4032:2023"),metricSize:$$o,threadPitch:Z$o.optional(),threadHand:Be("right").default("right"),threadClass:Be("6H").default("6H"),showThreads:Ue().default(!0)};function aKt(e,t){if(e.threadPitch!==void 0&&Math.abs(e.threadPitch-cze[e.metricSize].threadPitch)>0.000000001)t.addIssue({code:"custom",path:["threadPitch"],message:"ISO 4032 requires the tabulated coarse pitch"})}function cKt(e){return{...e,threadPitch:cze[e.metricSize].threadPitch}}var lze=at(sKt).strict().superRefine(aKt).transform(cKt),K1e=at({fn:Be("hexnut"),...sKt}).strict().superRefine(aKt).transform(cKt);function lKt(e){let t=lze.parse(e),n=cze[t.metricSize],o=2*n.acrossFlats/Math.sqrt(3),i=n.diameter-5*Math.sqrt(3)/8*n.threadPitch;return{...n,acrossCorners:o,boreMinorDiameter:i,faceDiameter:n.acrossFlats,outerChamferAngle:30,outerChamferDepth:(o-n.acrossFlats)/2/Math.sqrt(3),boreChamferAngle:90,boreChamferDepth:(n.mouthDiameter-i)/2,bearingZ:0,topZ:n.height,threadDepth:n.height}}function eZo(e){let t=cm(e.string);if(e.fn!=="hexnut"||t[0]?.toLowerCase()!=="hexnut")throw Error("Expected hexnut without an inline argument");let n={fn:"hexnut"},o={standard:"standard",threadhand:"threadHand",threadclass:"threadClass"};for(let i of t.slice(1)){let r=i.match(/^([a-z]+)(.*)$/i);if(!r)throw Error(`Invalid hex nut token "${i}"`);let s=r[1].toLowerCase(),a=r[2],c,l=a;if(s==="m")c="metricSize",l=`M${a}`;else if(s==="threadpitch")c="threadPitch";else if(s in o){if(c=o[s],!/^\([^()]+\)$/.test(a))throw Error(`Expected a parenthesized ${s}`);if(l=a.slice(1,-1).toLowerCase(),c==="threadClass"&&l==="6h")l="6H"}else if(s==="threads"||s==="nothreads"){if(a)throw Error("Thread visibility flags cannot have a value");c="showThreads",l=s==="threads"}else throw Error(`Unknown hex nut token "${i}"`);if(c in n)throw Error(`Duplicate hex nut property "${c}"`);n[c]=l}return K1e.parse(n)}var dKt=xu({name:"hexnut",schema:K1e,parse:eZo});function tZo(e){e.register(dKt)}var uKt=kn([He(),Z().regex(/^[+-]?(?:\d+(?:\.\d*)?|\.\d+)(?:mm|cm|m|in|inch|mil|ft|feet)?$/i).transform((e)=>e.toLowerCase())]).pipe(id),B1e=uKt.refine((e)=>e>0,"Length must be positive"),XOe=uKt.refine((e)=>e>=0,"Length cannot be negative"),hKt={outerDiameter:B1e.default(6),innerDiameter:B1e.default(4),startLength:XOe.default(38),endLength:XOe.default(112),bendRadius:B1e.default(60),bendAngle:He().finite().min(0).max(180).default(90),ribPitch:B1e.default(2.25),ribDepth:XOe.default(0.25)};function mKt(e,t){if(e.outerDiameter-2*e.ribDepth<=e.innerDiameter)t.addIssue({code:"custom",path:["ribDepth"],message:"Rib roots must leave a positive wall outside the bore"});if(e.bendAngle>0&&e.bendRadius<=e.outerDiameter/2)t.addIssue({code:"custom",path:["bendRadius"],message:"Bend radius must exceed half the outside diameter"});let n=e.startLength+e.bendRadius*(e.bendAngle*Math.PI/180)+e.endLength;if(!Number.isFinite(n)||n<=0)t.addIssue({code:"custom",message:"Centerline length must be finite and positive"})}var j1e=at(hKt).strict().superRefine(mKt),q1e=at({fn:Be("hollowpositioningarmtube"),...hKt}).strict().superRefine(mKt);function dze(e){let t=j1e.parse(e),n=t.bendRadius*(t.bendAngle*Math.PI/180),o=t.outerDiameter-2*t.ribDepth;return{bendLength:n,totalLength:t.startLength+n+t.endLength,rootDiameter:o,minimumWallThickness:(o-t.innerDiameter)/2}}function pKt(e,t){let n=j1e.parse(e),{bendLength:o,totalLength:i}=dze(n);if(!Number.isFinite(t)||t<0||t>i)throw Error("Centerline distance must be within [0,totalLength]");let s=Math.min(o,Math.max(0,t-n.startLength))/n.bendRadius,a=Math.sin(s),c=Math.cos(s),l=Math.max(0,t-n.startLength-o),d=[n.bendRadius*(1-c)+l*a,0,Math.min(t,n.startLength)+n.bendRadius*a+l*c],u=[a,0,c],h=[c,0,-a];return{position:d,tangent:u,normal:h}}var kWt={od:"outerDiameter",id:"innerDiameter",start:"startLength",end:"endLength",radius:"bendRadius",pitch:"ribPitch",depth:"ribDepth"};function nZo(e){let t=cm(e.string);if(e.fn!=="hollowpositioningarmtube"||!/^hollowpositioningarmtube$/i.test(t[0]))throw Error("Expected hollowpositioningarmtube without an inline value");let n={fn:"hollowpositioningarmtube"};for(let o of t.slice(1)){let i=o.match(/^([a-z]+)(.*)$/i),r=i?.[1]?.toLowerCase(),s=i?.[2];if(!r||!s)throw Error(`Invalid hollowpositioningarmtube token "${o}"`);let a,c=s;if(r in kWt)a=kWt[r];else if(r==="angle"){if(a="bendAngle",!/^[+]?(?:\d+(?:\.\d*)?|\.\d+)$/.test(s))throw Error("Hollow positioning arm tube angle requires a unitless degree value");c=Number(s)}else throw Error(`Unknown hollowpositioningarmtube token "${o}"`);if(a in n)throw Error(`Duplicate hollowpositioningarmtube property "${a}"`);n[a]=c}return q1e.parse(n)}var AKt=xu({name:"hollowpositioningarmtube",schema:q1e,parse:nZo});function oZo(e){e.register(AKt)}var Xm=kn([He(),Z().regex(/^(?:\d+(?:\.\d+)?|\.\d+)(?:mm|cm|m|in|inch)?$/i).transform((e)=>e.toLowerCase())]).pipe(id).refine((e)=>e>0,"Length must be positive"),uze={M3:{diameter:3,threadPitch:0.5,headDiameter:5.6,headHeight:2.4,crownRadius:5,underHeadRadius:0.1,recessNumber:1,recessReferenceDiameter:3,recessPenetration:1.4,maximumThreadLength:25,tipChamferAngle:45,threadFlankAngle:60,tipChamfer:0.25,threadRootDiameter:2.3865653389860224,threadPitchDiameter:2.6752404735808355,recessB:0.97,recessE:0.435,recessG:1.27,recessF:0.535,recessRadius:0.5,recessT1:0.34,recessAlpha:138,recessBeta:7,recessOuterWingAngle:26.5,recessInnerWingAngle:28,recessReferencePlaneHeight:2.169696007084728},M4:{diameter:4,threadPitch:0.7,headDiameter:8,headHeight:3.1,crownRadius:6.5,underHeadRadius:0.2,recessNumber:2,recessReferenceDiameter:4.4,recessPenetration:1.9,maximumThreadLength:38,tipChamferAngle:45,threadFlankAngle:60,tipChamfer:0.35,threadRootDiameter:3.141191474580432,threadPitchDiameter:3.5453366630131695,recessB:1.47,recessE:0.815,recessG:2.29,recessF:0.7,recessRadius:0.6,recessT1:0.61,recessAlpha:140,recessBeta:5.75,recessOuterWingAngle:26.5,recessInnerWingAngle:28,recessReferencePlaneHeight:2.7163714733492106},M5:{diameter:5,threadPitch:0.8,headDiameter:9.5,headHeight:3.7,crownRadius:8,underHeadRadius:0.2,recessNumber:2,recessReferenceDiameter:4.9,recessPenetration:2.4,maximumThreadLength:38,tipChamferAngle:45,threadFlankAngle:60,tipChamfer:0.4,threadRootDiameter:4.018504542377636,threadPitchDiameter:4.480384757729337,recessB:1.47,recessE:0.815,recessG:2.29,recessF:0.7,recessRadius:0.6,recessT1:0.61,recessAlpha:140,recessBeta:5.75,recessOuterWingAngle:26.5,recessInnerWingAngle:28,recessReferencePlaneHeight:3.315608971054121},M6:{diameter:6,threadPitch:1,headDiameter:12,headHeight:4.6,crownRadius:10,underHeadRadius:0.25,recessNumber:3,recessReferenceDiameter:6.9,recessPenetration:3.1,maximumThreadLength:38,tipChamferAngle:45,threadFlankAngle:60,tipChamfer:0.5,threadRootDiameter:4.773130677972045,threadPitchDiameter:5.350480947161671,recessB:2.41,recessE:2.005,recessG:3.81,recessF:0.825,recessRadius:0.8,recessT1:1.01,recessAlpha:146,recessBeta:5.75,recessOuterWingAngle:26.5,recessInnerWingAngle:28,recessReferencePlaneHeight:3.986026848459362}},iZo=Zt(["M3","M4","M5","M6"]),rZo=Zt(["iso7045","iso7045:2011"]).default("iso7045").transform(()=>"iso7045:2011"),_Kt={standard:rZo,metricSize:iZo,length:Xm,thread:Be("full").default("full"),drive:Be("phillips").default("phillips"),threadHand:Zt(["right","left"]).default("right"),threadClass:Be("6g").default("6g"),threadGender:Be("male").default("male"),showThreads:Ue().default(!0),recessStandard:Be("iso4757:1983").default("iso4757:1983"),recessType:Be("H").default("H"),diameter:Xm.optional(),threadPitch:Xm.optional(),headDiameter:Xm.optional(),headHeight:Xm.optional(),crownRadius:Xm.optional(),underHeadRadius:Xm.optional(),recessNumber:He().finite().positive().optional(),recessReferenceDiameter:Xm.optional(),recessPenetration:Xm.optional(),maximumThreadLength:Xm.optional(),tipChamferAngle:He().finite().positive().optional(),threadFlankAngle:He().finite().positive().optional(),tipChamfer:Xm.optional(),threadRootDiameter:Xm.optional(),threadPitchDiameter:Xm.optional(),recessB:Xm.optional(),recessE:Xm.optional(),recessG:Xm.optional(),recessF:Xm.optional(),recessRadius:Xm.optional(),recessT1:Xm.optional(),recessAlpha:He().finite().positive().optional(),recessBeta:He().finite().positive().optional(),recessOuterWingAngle:He().finite().positive().optional(),recessInnerWingAngle:He().finite().positive().optional(),recessReferencePlaneHeight:Xm.optional()},gKt=(e,t)=>{let n=uze[e.metricSize];for(let o of Object.keys(n))if(e[o]!==void 0&&Math.abs(e[o]-n[o])>0.000000001)t.addIssue({code:"custom",path:[o],message:`Dimension ${o} contradicts ${e.standard} ${e.metricSize}`});if(e.length<=n.underHeadRadius+n.tipChamfer)t.addIssue({code:"custom",path:["length"],message:"Length must separate the under-head fillet and fixed tip chamfer"});if(e.length>n.maximumThreadLength+0.000000001)t.addIssue({code:"custom",path:["length"],message:"This contract supports full-thread screws only; length exceeds the pinned thread-length range"})},fKt=at(_Kt).strict().superRefine(gKt).transform((e)=>({...e,...uze[e.metricSize]})),J1e=at({fn:Be("panscrew"),..._Kt}).strict().superRefine(gKt).transform((e)=>({...e,...uze[e.metricSize]})),sZo={m:"metricSize",metricsize:"metricSize",l:"length",length:"length",standard:"standard",thread:"thread",drive:"drive",threadhand:"threadHand",threadclass:"threadClass",threadgender:"threadGender",diameter:"diameter",threadpitch:"threadPitch",headdiameter:"headDiameter",headheight:"headHeight",crownradius:"crownRadius",underheadradius:"underHeadRadius",recessnumber:"recessNumber",recessreferencediameter:"recessReferenceDiameter",recesspenetration:"recessPenetration",maximumthreadlength:"maximumThreadLength",tipchamferangle:"tipChamferAngle",threadflankangle:"threadFlankAngle",tipchamfer:"tipChamfer",threadrootdiameter:"threadRootDiameter",threadpitchdiameter:"threadPitchDiameter",recessb:"recessB",recesse:"recessE",recessg:"recessG",recessf:"recessF",recessradius:"recessRadius",recesst1:"recessT1",recessalpha:"recessAlpha",recessbeta:"recessBeta",recessouterwingangle:"recessOuterWingAngle",recessinnerwingangle:"recessInnerWingAngle",recessreferenceplaneheight:"recessReferencePlaneHeight",d:"diameter",headh:"headHeight",headd:"headDiameter"},aZo=new Set(["standard","thread","drive","threadHand","threadClass","threadGender"]),cZo=(e)=>{if(e.fn!=="panscrew")throw Error(`Expected panscrew params, got "${e.fn}"`);let[t,...n]=cm(e.string);if(t?.toLowerCase()!=="panscrew")throw Error("The panscrew function does not accept an inline value");let o={};for(let i of n){let r=i.match(/^(recesst1)(.*)$/i)??i.match(/^([a-z]+)(.*)$/i),s=r?.[1]?.toLowerCase(),a=r?.[2],c,l;if(s==="threads"||s==="nothreads"){if(a!=="")throw Error(`Token "${s}" does not accept a value`);c="showThreads",l=s==="threads"}else{if(c=s?sZo[s]??"":"",!c||!a)throw Error(`Unknown or missing panscrew token "${i}"`);if(aZo.has(c)){let d=a.match(/^\(([^()]+)\)$/)?.[1];if(!d)throw Error(`Token "${s}" requires a parenthesized selector`);l=d.toLowerCase()}else if(c==="metricSize"){let d=s==="m"?a:a.match(/^\((m\d+)\)$/i)?.[1]?.slice(1);if(!d||!/^\d+$/.test(d))throw Error("Invalid metric size");l=`M${d}`}else{if(!/^(?:\d+(?:\.\d+)?|\.\d+)(?:mm|cm|m|in|inch)?$/i.test(a))throw Error(`Invalid dimension token "${i}"`);l=["recessNumber","tipChamferAngle","threadFlankAngle","recessAlpha","recessBeta","recessOuterWingAngle","recessInnerWingAngle"].includes(c)?Number(a):a}}if(c in o)throw Error(`Property "${c}" is set more than once`);o[c]=l}return J1e.parse({fn:"panscrew",...o})},yKt=xu({name:"panscrew",schema:J1e,parse:cZo});function lZo(e){e.register(yKt)}var xKt=kn([He(),Z().regex(/^[+-]?(?:\d+(?:\.\d*)?|\.\d+)(?:mm|cm|m|in|inch|mil|ft|feet)?$/i).transform((e)=>e.toLowerCase())]).pipe(id),KOe=xKt.refine((e)=>e>0),CKt={innerDiameter:KOe,outerDiameter:KOe,length:KOe,style:Be("plainclosed").default("plainclosed"),edgeChamfer:xKt.refine((e)=>e>=0).default(0)};function IKt(e,t){if(e.outerDiameter<=e.innerDiameter)t.addIssue({code:"custom",path:["outerDiameter"],message:"Outside diameter must exceed the bore diameter"});else if(e.edgeChamfer>=(e.outerDiameter-e.innerDiameter)/4)t.addIssue({code:"custom",path:["edgeChamfer"],message:"Inner and outer rim chamfers must leave an annular end face"});if(e.edgeChamfer>=e.length/2)t.addIssue({code:"custom",path:["edgeChamfer"],message:"The two end chamfers must leave positive straight bore length"})}var hze=at(CKt).strict().superRefine(IKt),$1e=at({fn:Be("plainbushing"),...CKt}).strict().superRefine(IKt);function bKt(e){let t=hze.parse(e);return{innerDiameter:t.innerDiameter,outerDiameter:t.outerDiameter,length:t.length,wallThickness:(t.outerDiameter-t.innerDiameter)/2,endInnerDiameter:t.innerDiameter+2*t.edgeChamfer,endOuterDiameter:t.outerDiameter-2*t.edgeChamfer,straightLength:t.length-2*t.edgeChamfer}}var LWt={id:"innerDiameter",innerdiameter:"innerDiameter",od:"outerDiameter",outerdiameter:"outerDiameter",l:"length",length:"length",edgechamfer:"edgeChamfer"};function dZo(e){let t=cm(e.string);if(e.fn!=="plainbushing"||t[0]?.toLowerCase()!=="plainbushing")throw Error("Expected plainbushing without an inline value");let n={fn:"plainbushing"};for(let o of t.slice(1)){let i=o.match(/^([a-z]+)(.*)$/i);if(!i)throw Error(`Invalid plain bushing token "${o}"`);let r=i[1].toLowerCase(),s=i[2],a,c;if(Object.hasOwn(LWt,r))a=LWt[r],c=s;else if(r==="style"){a="style";let l=s.match(/^\(([a-z]+)\)$/i);if(!l)throw Error("Style requires a parenthesized value");c=l[1].toLowerCase()}else throw Error(`Unknown plain bushing token "${o}"`);if(Object.hasOwn(n,a))throw Error(`Plain bushing property "${a}" is set more than once`);n[a]=c}return $1e.parse(n)}var SKt=xu({name:"plainbushing",schema:$1e,parse:dZo});function uZo(e){e.register(SKt)}var PKt=kn([He().finite(),Z().regex(/^[+]?(?:\d+(?:\.\d*)?|\.\d+)(?:mm|cm|m|in|inch|mil|ft|feet)?$/i,"Expected a complete length with a supported unit").transform((e)=>e.toLowerCase())]).pipe(id),jU=PKt.refine((e)=>e>0,"Length must be positive"),hZo=PKt.refine((e)=>e>=0,"Length cannot be negative"),vKt={boreDiameter:jU,outerDiameter:jU,boreBDiameter:jU.optional(),length:jU,screwCount:Be(4).default(4),screwEndOffset:jU.optional(),screwAngle:He().finite().default(0),mount:Be("setscrew").default("setscrew"),metricSize:wne,threadPitch:jU.optional(),threadHand:Zt(["right","left"]).default("right"),threadClass:Be("6H").default("6H"),chamfer:hZo.default(0)};function mze(e){let t=e.threadPitch??Ry[e.metricSize].threadPitch;return{...e,threadPitch:t,boreBDiameter:e.boreBDiameter??e.boreDiameter,screwEndOffset:e.screwEndOffset??e.length/4,screwAngle:(e.screwAngle%360+360)%360}}function EKt(e,t){let n=mze(e),o=(a)=>t.addIssue({code:"custom",message:a}),i=Ry[n.metricSize].diameter;if(!Number.isFinite(n.outerDiameter**2))o("Derived dimensions must be finite");if((n.outerDiameter-n.boreDiameter)/2<=0)o("Outer diameter must exceed the bore diameter");if(n.threadPitch>=i)o("Thread pitch must be smaller than its nominal diameter");let s=(n.outerDiameter-Math.max(n.boreDiameter,n.boreBDiameter))/2;if(s<=0)o("Both bores must be smaller than the outer diameter");if(Math.SQRT2*i>=Math.min(n.boreDiameter,n.boreBDiameter))o("Both bores must separate the perpendicular screw holes with material");if(n.chamfer>=s/2||n.chamfer>=n.length/2)o("Chamfer must leave material between the bore and exterior");if(n.screwEndOffset-i/2<=n.chamfer)o("Screw holes must clear the end chamfers");if(n.length-2*n.screwEndOffset<=i)o("Each end must have a separate, nonintersecting screw-hole plane")}var pze=at(vKt).strict().superRefine(EKt).transform(mze),Z1e=at({fn:Be("rigidcoupler"),...vKt}).strict().superRefine(EKt).transform((e)=>({fn:e.fn,...mze(e)}));function MKt(e){let t=pze.parse(e),n=Ry[t.metricSize].diameter,o=t.outerDiameter/2,i=[{bore:t.boreDiameter,z:t.screwEndOffset,angle:t.screwAngle},{bore:t.boreDiameter,z:t.screwEndOffset,angle:t.screwAngle+90},{bore:t.boreBDiameter,z:t.length-t.screwEndOffset,angle:t.screwAngle},{bore:t.boreBDiameter,z:t.length-t.screwEndOffset,angle:t.screwAngle+90}].map((r)=>{let s=r.angle*Math.PI/180;return{start:[o*Math.cos(s),o*Math.sin(s),r.z],direction:[-Math.cos(s),-Math.sin(s),0],diameter:n,depth:o-Math.sqrt((r.bore/2)**2-(n/2)**2),threadPitch:t.threadPitch,threadHand:t.threadHand,threadGender:"female",threadClass:t.threadClass}});return{threadDiameter:n,boreADepth:t.length/2,boreBDepth:t.length/2,screwHoles:i}}var mZo={bore:"boreDiameter",od:"outerDiameter",mount:"mount",m:"metricSize",threadpitch:"threadPitch",threadhand:"threadHand",threadclass:"threadClass",chamfer:"chamfer",boreb:"boreBDiameter",l:"length",length:"length",screwcount:"screwCount",screwendoffset:"screwEndOffset",screwangle:"screwAngle"};function pZo(e){let t=cm(e.string);if(e.fn!=="rigidcoupler"||t[0]?.toLowerCase()!=="rigidcoupler")throw Error("Expected an unadorned rigidcoupler function");let n={};for(let o of t.slice(1)){let i=o.match(/^([a-z]+)(.*)$/i),r=i?.[1]?.toLowerCase()??"",s=mZo[r];if(!s)throw Error(`Unknown rigidcoupler token "${o}"`);if(s in n)throw Error(`Duplicate rigidcoupler property "${s}"`);let a=i[2];if(!a)throw Error(`Token "${r}" requires a value`);if(["mount","threadHand","threadClass"].includes(s)){let c=a.match(/^\(([^()]+)\)$/);if(!c)throw Error(`Token "${r}" requires one parenthesized argument`);n[s]=s==="threadClass"?c[1].toUpperCase():c[1].toLowerCase()}else if(s==="metricSize"){if(!/^\d+(?:\.\d+)?$/.test(a))throw Error("m requires a unitless metric designation");n[s]=`M${a}`}else if(s==="screwCount"){if(!/^\d+$/.test(a))throw Error("screwcount requires a unitless integer");n[s]=Number(a)}else if(s==="screwAngle"){if(!/^[+-]?(?:\d+(?:\.\d*)?|\.\d+)(?:deg)?$/i.test(a))throw Error("screwangle requires an angle in degrees");n[s]=Number(a.replace(/deg$/i,""))}else n[s]=a}return Z1e.parse({fn:"rigidcoupler",...n})}var BKt=xu({name:"rigidcoupler",schema:Z1e,parse:pZo});function AZo(e){e.register(BKt)}var wKt=kn([He().finite(),Z().regex(/^[+]?(?:\d+(?:\.\d*)?|\.\d+)(?:mm|cm|m|in|inch|mil|ft|feet)?$/i,"Expected a complete length with a supported unit").transform((e)=>e.toLowerCase())]).pipe(id),Ene=wKt.refine((e)=>e>0,"Length must be positive"),_Zo=wKt.refine((e)=>e>=0,"Length cannot be negative"),TKt={boreDiameter:Ene,outerDiameter:Ene,width:Ene,screwZ:Ene.optional(),screwAngle:He().finite().default(0),mount:Be("setscrew").default("setscrew"),metricSize:wne,threadPitch:Ene.optional(),threadHand:Zt(["right","left"]).default("right"),threadClass:Be("6H").default("6H"),chamfer:_Zo.default(0)};function Aze(e){let t=e.threadPitch??Ry[e.metricSize].threadPitch;return{...e,threadPitch:t,screwZ:e.screwZ??e.width/2,screwAngle:(e.screwAngle%360+360)%360}}function DKt(e,t){let n=Aze(e),o=(s)=>t.addIssue({code:"custom",message:s}),i=Ry[n.metricSize].diameter;if(!Number.isFinite(n.outerDiameter**2))o("Derived dimensions must be finite");let r=(n.outerDiameter-n.boreDiameter)/2;if(r<=0)o("Outer diameter must exceed the bore diameter");if(n.threadPitch>=i)o("Thread pitch must be smaller than its nominal diameter");if(i>=n.boreDiameter)o("Thread diameter must be smaller than the shaft bore");if(n.chamfer>=r/2||n.chamfer>=n.width/2)o("Chamfer must leave material between the bore and exterior");if(n.screwZ-i/2<=n.chamfer||n.screwZ+i/2>=n.width-n.chamfer)o("Screw hole must clear both end faces and chamfers")}var _ze=at(TKt).strict().superRefine(DKt).transform(Aze),eye=at({fn:Be("shaftcollar"),...TKt}).strict().superRefine(DKt).transform((e)=>({fn:e.fn,...Aze(e)}));function NKt(e){let t=_ze.parse(e),n=Ry[t.metricSize].diameter,o=t.outerDiameter/2,i=t.screwAngle*Math.PI/180;return{threadDiameter:n,wallThickness:(t.outerDiameter-t.boreDiameter)/2,screwHole:{start:[o*Math.cos(i),o*Math.sin(i),t.screwZ],direction:[-Math.cos(i),-Math.sin(i),0],diameter:n,depth:o-Math.sqrt((t.boreDiameter/2)**2-(n/2)**2),threadPitch:t.threadPitch,threadHand:t.threadHand,threadGender:"female",threadClass:t.threadClass}}}var gZo={bore:"boreDiameter",od:"outerDiameter",mount:"mount",m:"metricSize",threadpitch:"threadPitch",threadhand:"threadHand",threadclass:"threadClass",chamfer:"chamfer",w:"width",width:"width",screwz:"screwZ",screwangle:"screwAngle"};function fZo(e){let t=cm(e.string);if(e.fn!=="shaftcollar"||t[0]?.toLowerCase()!=="shaftcollar")throw Error("Expected an unadorned shaftcollar function");let n={};for(let o of t.slice(1)){let i=o.match(/^([a-z]+)(.*)$/i),r=i?.[1]?.toLowerCase()??"",s=gZo[r];if(!s)throw Error(`Unknown shaftcollar token "${o}"`);if(s in n)throw Error(`Duplicate shaftcollar property "${s}"`);let a=i[2];if(!a)throw Error(`Token "${r}" requires a value`);if(["mount","threadHand","threadClass"].includes(s)){let c=a.match(/^\(([^()]+)\)$/);if(!c)throw Error(`Token "${r}" requires one parenthesized argument`);n[s]=s==="threadClass"?c[1].toUpperCase():c[1].toLowerCase()}else if(s==="metricSize"){if(!/^\d+(?:\.\d+)?$/.test(a))throw Error("m requires a unitless metric designation");n[s]=`M${a}`}else if(s==="screwAngle"){if(!/^[+-]?(?:\d+(?:\.\d*)?|\.\d+)(?:deg)?$/i.test(a))throw Error("screwangle requires an angle in degrees");n[s]=Number(a.replace(/deg$/i,""))}else n[s]=a}return eye.parse({fn:"shaftcollar",...n})}var RKt=xu({name:"shaftcollar",schema:eye,parse:fZo});function yZo(e){e.register(RKt)}var QKt=kn([He(),Z().regex(/^[+-]?(?:\d+(?:\.\d*)?|\.\d+)(?:mm|cm|m|in|inch|mil|ft|feet)?$/i).transform((e)=>e.toLowerCase())]).pipe(id),FWt=QKt.refine((e)=>e>0),xZo=QKt.refine((e)=>e>=0),CZo={M2:0.4,"M2.5":0.45,M3:0.5,M4:0.7,M5:0.8,M6:1,M8:1.25,M10:1.5,M12:1.75,M16:2,M20:2.5},IZo=Zt(["M2","M2.5","M3","M4","M5","M6","M8","M10","M12","M16","M20"]),kKt={spec:Be("custom").default("custom"),metricSize:IZo,length:FWt,thread:Be("full").default("full"),ends:Be("flat").default("flat"),chamfer:xZo.default(0),threadPitch:FWt.optional(),threadHand:Zt(["right","left"]).default("right")};function gze(e){return{...e,threadPitch:e.threadPitch??CZo[e.metricSize]}}function LKt(e,t){let n=Number(e.metricSize.slice(1)),o=gze(e).threadPitch;if(n-1.226869*o<=0)t.addIssue({code:"custom",path:["threadPitch"],message:"Thread pitch must leave a positive external-thread root diameter"});if(e.chamfer>=Math.min(n/2,e.length/2))t.addIssue({code:"custom",path:["chamfer"],message:"Chamfer must leave flat end faces and separate end chamfers"})}var fze=at(kKt).strict().superRefine(LKt).transform(gze),tye=at({fn:Be("threadedrod"),...kKt}).strict().superRefine(LKt).transform((e)=>({fn:e.fn,...gze(e)}));function FKt(e){let t=fze.parse(e),n=Number(t.metricSize.slice(1));return{diameter:n,length:t.length,threadPitch:t.threadPitch,pitchDiameter:n-0.649519*t.threadPitch,minorDiameter:n-1.226869*t.threadPitch,endDiameter:n-2*t.chamfer}}var HWt={l:"length",length:"length",chamfer:"chamfer",threadpitch:"threadPitch"},OWt={spec:"spec",thread:"thread",ends:"ends",threadhand:"threadHand"};function bZo(e){let t=cm(e.string);if(e.fn!=="threadedrod"||t[0]?.toLowerCase()!=="threadedrod")throw Error("Expected threadedrod without an inline value");let n={fn:"threadedrod"};for(let o of t.slice(1)){let i=o.match(/^([a-z]+)(.*)$/i);if(!i)throw Error(`Invalid threaded rod token "${o}"`);let r=i[1].toLowerCase(),s=i[2],a,c;if(r==="m"){if(a="metricSize",!/^\d+(?:\.\d+)?$/.test(s))throw Error("Metric size must be a unitless diameter");c=`M${s}`}else if(Object.hasOwn(HWt,r))a=HWt[r],c=s;else if(Object.hasOwn(OWt,r)){a=OWt[r];let l=s.match(/^\(([a-z]+)\)$/i);if(!l)throw Error(`Token "${r}" requires a parenthesized value`);c=l[1].toLowerCase()}else throw Error(`Unknown threaded rod token "${o}"`);if(Object.hasOwn(n,a))throw Error(`Threaded rod property "${a}" is set more than once`);n[a]=c}return tye.parse(n)}var HKt=xu({name:"threadedrod",schema:tye,parse:bZo});function SZo(e){e.register(HKt)}var PZo=kn([He(),Z().regex(/^[+-]?(?:\d+(?:\.\d*)?|\.\d+)(?:mm|cm|m|in|inch|mil|ft|feet)?$/i).transform((e)=>e.toLowerCase())]).pipe(id),Mne=PZo.refine((e)=>e>0,"Length must be positive"),OKt={outerDiameter:Mne.default(8),wireDiameter:Mne.default(0.8),turns:He().finite().min(1).max(128).default(3.25),pitch:Mne.optional(),startLegLength:Mne.default(10),endLegLength:Mne.default(14),leftHand:Ue().default(!1)};function zKt(e){return{...e,pitch:e.pitch??e.wireDiameter*1.25}}function GKt(e,t){if(e.outerDiameter<3*e.wireDiameter)t.addIssue({code:"custom",path:["outerDiameter"],message:"Outer diameter must be at least three wire diameters"});let n=e.pitch??e.wireDiameter*1.25;if(n<1.1*e.wireDiameter)t.addIssue({code:"custom",path:["pitch"],message:"Open coils require pitch at least 1.1 times wire diameter"});if(!Number.isFinite(Math.hypot(Math.PI*(e.outerDiameter-e.wireDiameter),n)*e.turns+e.startLegLength+e.endLegLength))t.addIssue({code:"custom",message:"Spring dimensions must remain finite"})}var nye=at(OKt).strict().superRefine(GKt).transform(zKt),oye=at({fn:Be("torsionspring"),...OKt}).strict().superRefine(GKt).transform((e)=>({...zKt(e),fn:e.fn}));function yze(e){let t=nye.parse(e),n=(t.outerDiameter-t.wireDiameter)/2,o=Math.hypot(2*Math.PI*n,t.pitch),i=o*t.turns;return{meanRadius:n,insideDiameter:t.outerDiameter-2*t.wireDiameter,axialAdvance:t.pitch*t.turns,lengthPerTurn:o,coilLength:i,centerlineLength:t.startLegLength+i+t.endLegLength,endPhaseDegrees:(t.leftHand?-1:1)*360*(t.turns%1),pitch:t.pitch}}function iye(e,t){let n=nye.parse(e),o=yze(n);if(!Number.isFinite(t)||t<0||t>o.centerlineLength)throw Error("Distance must be within the wire centerline");let i=Math.max(0,Math.min(o.coilLength,t-n.startLegLength)),r=i/o.lengthPerTurn,s=n.leftHand?-1:1,a=s*2*Math.PI*(r%1),c=Math.cos(a),l=Math.sin(a),d=[-s*2*Math.PI*o.meanRadius*l/o.lengthPerTurn,s*2*Math.PI*o.meanRadius*c/o.lengthPerTurn,n.pitch/o.lengthPerTurn],u=[c,l,0],h=[-d[2]*l,d[2]*c,d[0]*l-d[1]*c],A=t-n.startLegLength-i;return{position:[o.meanRadius*c+A*d[0],o.meanRadius*l+A*d[1],r*n.pitch+A*d[2]],tangent:d,normal:u,binormal:h}}var zWt={od:"outerDiameter",wire:"wireDiameter",pitch:"pitch",start:"startLegLength",end:"endLegLength"};function vZo(e){let t=cm(e.string);if(e.fn!=="torsionspring"||t[0]?.toLowerCase()!=="torsionspring")throw Error("Expected torsionspring without an inline value");let n={fn:"torsionspring"};for(let o of t.slice(1)){let i=o.toLowerCase();if(i==="left"||i==="right"){if("leftHand"in n)throw Error("Duplicate or conflicting spring handedness");n.leftHand=i==="left";continue}let r=o.match(/^([a-z]+)(.*)$/i),s=r?.[1]?.toLowerCase(),a=r?.[2];if(!s||!a)throw Error(`Invalid torsion spring token "${o}"`);let c,l=a;if(s in zWt)c=zWt[s];else if(s==="turns"){if(c="turns",!/^[+]?(?:\d+(?:\.\d*)?|\.\d+)$/.test(a))throw Error("Turns requires a unitless number");l=Number(a)}else throw Error(`Unknown torsion spring token "${o}"`);if(c in n)throw Error(`Duplicate torsion spring property "${c}"`);n[c]=l}return oye.parse(n)}var YKt=xu({name:"torsionspring",schema:oye,parse:vZo});function EZo(e){e.register(YKt)}var VKt={width:ju.default(20),height:ju.default(20),length:ju.default(100),profile:Be("fourtsolid").default("fourtsolid"),slotWidth:ju.default(6),pocketWidth:ju.default(10),pocketDepth:ju.default(2),lipThickness:ju.default(2),boreDiameter:SS.default(0),cornerRadius:SS.default(0)};function UKt(e,t){let n=(r,s)=>t.addIssue({code:"custom",message:r,path:[s]}),o=Math.min(e.width,e.height)/2,i=e.lipThickness+e.pocketDepth;if(!Number.isFinite(i)){n("Total groove depth must be finite","pocketDepth");return}if(e.pocketWidth<=e.slotWidth)n("A T pocket must be wider than its slot opening","pocketWidth");if(e.cornerRadius>=o)n("Corner radius must be smaller than half the section","cornerRadius");if(e.pocketWidth/2+e.cornerRadius>=o)n("Grooves must leave material before the rounded corners","pocketWidth");if(i+e.pocketWidth/2>=o)n("Adjacent perpendicular T pockets must remain separate","pocketDepth");if(e.boreDiameter/2+i>=o)n("The axial bore must remain separate from every T pocket","boreDiameter")}var WKt=at(VKt).strict().superRefine(UKt),rye=at({fn:Be("tslotextrusion"),...VKt}).strict().superRefine(UKt);var GWt={w:"width",width:"width",h:"height",height:"height",l:"length",length:"length",slot:"slotWidth",slotwidth:"slotWidth",pocket:"pocketWidth",pocketwidth:"pocketWidth",pocketd:"pocketDepth",pocketdepth:"pocketDepth",lip:"lipThickness",lipthickness:"lipThickness",bore:"boreDiameter",borediameter:"boreDiameter",corner:"cornerRadius",cornerradius:"cornerRadius"};function MZo(e){let t=cm(e.string);if(e.fn!=="tslotextrusion"||t[0]?.toLowerCase()!==e.fn)throw Error("Expected tslotextrusion without an inline value");let n={fn:"tslotextrusion"};for(let o of t.slice(1)){let[i,r]=qU(o),s,a=r;if(i in GWt)s=GWt[i];else if(i==="profile"){s="profile";let c=r.match(/^\(([a-z]+)\)$/i);if(!c)throw Error("Profile requires one parenthesized identity");a=c[1].toLowerCase()}else throw Error(`Unknown T-slot extrusion token "${o}"`);if(s in n)throw Error(`T-slot extrusion property "${s}" is repeated`);n[s]=a}return rye.parse(n)}var XKt=xu({name:"tslotextrusion",schema:rye,parse:MZo});function BZo(e){e.register(XKt)}var KKt={width:ju.default(40),height:ju.default(40),thickness:ju.default(4),shape:Be("righttriangle").default("righttriangle"),slotCount:Be(2).default(2),slot:t7([ju,ju]).default([5,12]),centers:t7([ju,ju]).default([12,28]),edgeMargin:ju.default(1)};function jKt(e,t){let n=(g,_)=>t.addIssue({code:"custom",message:g,path:[_]}),[o,i]=e.slot;if(i<o){n("Slot length must be at least its width","slot");return}let r=o/2,s=(i-o)/2,a=e.edgeMargin+r,[c,l]=e.centers;if(!Number.isFinite(a)){n("Derived slot centers must be finite","edgeMargin");return}if(c<=i/2||l<=i/2)n("Slots must leave material at the right-angle corner","centers");let d=Math.min(e.width,e.height)/Math.max(e.width,e.height),u=r/Math.min(e.width,e.height)*Math.hypot(1,d),h=c/e.width+a/e.height+s/e.width+u,A=a/e.width+l/e.height+s/e.height+u;if(!Number.isFinite(h)||!Number.isFinite(A)||h>=1||A>=1)n("Both complete slots must remain inside the triangular plate","centers");let m=Math.max(c-s-a,a-c-s,0),p=Math.max(l-s-a,a-l-s,0);if(Math.hypot(m,p)<=o)n("The two slots must retain a positive separating ligament","centers")}var xze=at(KKt).strict().superRefine(jKt),sye=at({fn:Be("tslotgusset"),...KKt}).strict().superRefine(jKt);function qKt(e={}){let t=xze.parse(e),[n,o]=t.slot,i=t.edgeMargin+n/2;return[{center:{x:t.centers[0],y:i,z:0},orientation:0,width:n,length:o,depth:t.thickness,direction:{x:0,y:0,z:1}},{center:{x:i,y:t.centers[1],z:0},orientation:90,width:n,length:o,depth:t.thickness,direction:{x:0,y:0,z:1}}]}var YWt={w:"width",width:"width",h:"height",height:"height",t:"thickness",thickness:"thickness",edgemargin:"edgeMargin"};function wZo(e){let t=cm(e.string);if(e.fn!=="tslotgusset"||t[0]?.toLowerCase()!==e.fn)throw Error("Expected tslotgusset without an inline value");let n={fn:"tslotgusset"};for(let o of t.slice(1)){let[i,r]=qU(o),s,a=r;if(i in YWt)s=YWt[i];else if(i==="slots"||i==="slotcount")s="slotCount",a=TL(r,"slotCount");else if(i==="shape"){s="shape";let c=r.match(/^\(([a-z]+)\)$/i);if(!c)throw Error("Shape requires one parenthesized identity");a=c[1].toLowerCase()}else if(i==="slot"||i==="centers"){s=i;let c=r.match(/^\(([^(),]+),([^(),]+)\)$/);if(!c)throw Error(`${i} requires two parenthesized lengths`);a=[c[1].trim(),c[2].trim()]}else throw Error(`Unknown T-slot gusset token "${o}"`);if(s in n)throw Error(`T-slot gusset property "${s}" is repeated`);n[s]=a}return sye.parse(n)}var JKt=xu({name:"tslotgusset",schema:sye,parse:wZo});function TZo(e){e.register(JKt)}var $Kt={width:ju.default(20),legLength:ju.default(40),thickness:ju.default(4),angle:Be(90).default(90),holeCount:Be(2).default(2),holeDiameter:ju.default(5),holeOffset:ju.default(20),bendRadius:SS.default(0)};function ZKt(e,t){let n=(i,r)=>t.addIssue({code:"custom",message:i,path:[r]});if(!Number.isFinite(e.bendRadius+e.thickness)){n("Outside bend radius must be finite","bendRadius");return}if(e.thickness>=e.legLength)n("Thickness must be smaller than the leg length","thickness");if(e.bendRadius>=e.legLength)n("Bend radius must leave a straight portion of each leg","bendRadius");let o=e.holeDiameter/2;if(e.holeDiameter>=e.width)n("Holes must leave material at both width edges","holeDiameter");if(e.holeOffset-o<=e.bendRadius)n("Holes must lie wholly beyond the bend tangent","holeOffset");if(e.holeOffset+o>=e.legLength)n("Holes must leave material at the free leg ends","holeOffset")}var ejt=at($Kt).strict().superRefine(ZKt),aye=at({fn:Be("tslotinsidecorner"),...$Kt}).strict().superRefine(ZKt);var VWt={w:"width",width:"width",leg:"legLength",leglength:"legLength",t:"thickness",thickness:"thickness",hole:"holeDiameter",holediameter:"holeDiameter",offset:"holeOffset",holeoffset:"holeOffset",bendr:"bendRadius",bendradius:"bendRadius"};function DZo(e){let t=cm(e.string);if(e.fn!=="tslotinsidecorner"||t[0]?.toLowerCase()!==e.fn)throw Error("Expected tslotinsidecorner without an inline value");let n={fn:"tslotinsidecorner"};for(let o of t.slice(1)){let[i,r]=qU(o),s,a=r;if(i in VWt)s=VWt[i];else if(i==="holes"||i==="holecount")s="holeCount",a=TL(r,"holeCount");else if(i==="angle")s="angle",a=T1e(r,"angle");else throw Error(`Unknown T-slot inside corner token "${o}"`);if(s in n)throw Error(`T-slot inside corner property "${s}" is repeated`);n[s]=a}return aye.parse(n)}var tjt=xu({name:"tslotinsidecorner",schema:aye,parse:DZo});function NZo(e){e.register(tjt)}function cye(e){let t=Q1e.parse(e),n=t.wireSideAngle*Math.PI/180,o=Math.cos(n),i=Math.sin(n),r=Math.min(t.bodyWidth/2/Math.max(Math.abs(o),Math.abs(i)),(t.bodyWidth-t.faceCornerChamfer)/(Math.abs(o)+Math.abs(i))),s=t.shaftFlatAngle*Math.PI/180;return{frontface:{position:{x:0,y:0,z:0},direction:{x:0,y:0,z:1}},backface:{position:{x:0,y:0,z:-t.bodyLength},direction:{x:0,y:0,z:-1}},shafttip:{position:{x:0,y:0,z:t.shaftLength},direction:{x:0,y:0,z:1}},wireside:{position:{x:r*o,y:r*i,z:-t.bodyLength+t.rearCapLength/2},direction:{x:o,y:i,z:0}},shaftflat:t.shaftShape==="d"?{position:{x:(t.shaftDiameter/2-t.shaftFlatDepth)*Math.cos(s),y:(t.shaftDiameter/2-t.shaftFlatDepth)*Math.sin(s),z:t.shaftLength-t.shaftFlatLength/2},direction:{x:Math.cos(s),y:Math.sin(s),z:0}}:void 0}}var LJr=kn([jWt.schema,uXt.schema,pXt.schema,fXt.schema,yXt.schema,rXt.schema,xXt.schema,PXt.schema,TXt.schema,kXt.schema,OXt.schema,UXt.schema,JXt.schema,tKt.schema,rKt.schema,dKt.schema,AKt.schema,yKt.schema,SKt.schema,BKt.schema,RKt.schema,HKt.schema,YKt.schema,XKt.schema,JKt.schema,tjt.schema]);function RZo(e){JJo(e),ZJo(e),i$o(e),c$o(e),x$o(e),I$o(e),S$o(e),v$o(e),D$o(e),Q$o(e),L$o(e),z$o(e),Y$o(e),U$o(e),J$o(e),tZo(e),oZo(e),lZo(e),uZo(e),AZo(e),yZo(e),SZo(e),EZo(e),BZo(e),TZo(e),NZo(e)}var lye=new UJo;RZo(lye);var QZo=(e)=>lye.parse(e),njt=(e)=>{let t=lye.normalize(qOe(e));return{params:()=>t,json:()=>QZo(t)}},ojt=(e)=>njt(e).json(),kZo={string:njt,getModelNames:()=>lye.getModelNames()},$U=kZo;var dm=Rt(cE(),1);var lpn=Rt(lo(),1);var dpn=Rt(lo(),1),Fy=Rt(cE(),1);vp();vp();vp();wp();wp();var LZo=class extends Zn{constructor(e){super();this.params=e;let{cellContents:t}=e;for(let n=0;n<t.length;n++)for(let o=n+1;o<t.length;o++)this._allPairs.push([n,o])}params;midlines=[];_pairIdx=0;_allPairs=[];_step(){let{cellContents:e,containerWidth:t,containerHeight:n}=this.params;if(this._pairIdx>=this._allPairs.length){this.solved=!0;return}let[o,i]=this._allPairs[this._pairIdx],r=e[o],s=e[i],a=r.x+r.width,c=s.x+s.width,l=r.y+r.height,d=s.y+s.height;if(a<s.x||c<r.x){let u=a<s.x?(a+s.x)/2:(c+r.x)/2;this.midlines.push({id:`midline-${this.midlines.length}`,start:{x:u,y:0},end:{x:u,y:n},cellIds:[r.cellId,s.cellId],type:"vertical"})}if(l<s.y||d<r.y){let u=l<s.y?(l+s.y)/2:(d+r.y)/2;this.midlines.push({id:`midline-${this.midlines.length}`,start:{x:0,y:u},end:{x:t,y:u},cellIds:[r.cellId,s.cellId],type:"horizontal"})}if(this._pairIdx++,this._pairIdx>=this._allPairs.length)this.solved=!0}getOutput(){return this.midlines}getConstructorParams(){return[this.params]}visualize(){let{cellContents:e}=this.params,t=this._allPairs[this._pairIdx],n=t?new Set([e[t[0]]?.cellId,e[t[1]]?.cellId]):new Set;return{rects:e.map((o)=>({center:{x:o.x+o.width/2,y:o.y+o.height/2},width:o.width,height:o.height,fill:n.has(o.cellId)?"rgba(255, 80, 80, 0.45)":"rgba(255, 165, 0, 0.3)",stroke:n.has(o.cellId)?"#ff2020":"#c87000",label:o.cellId})),lines:this.midlines.map((o)=>({points:[o.start,o.end],strokeColor:"#888888",strokeDash:[4,4],label:o.id}))}}},FZo=(e,t)=>{let n=e.start.x,o=e.start.y,i=e.end.x,r=e.end.y,s=t.start.x,a=t.start.y,c=t.end.x,l=t.end.y,d=(n-i)*(a-l)-(o-r)*(s-c);if(Math.abs(d)<0.0001)return null;let u=((n-s)*(a-l)-(o-a)*(s-c))/d,h=-((n-i)*(o-a)-(o-r)*(n-s))/d;if(u>=0&&u<=1&&h>=0&&h<=1)return{x:n+u*(i-n),y:o+u*(r-o)};return null},HZo=class extends Zn{constructor(e){super();this.params=e}params;intersections=[];_outerIdx=0;_step(){let{midlines:e}=this.params;if(e.length<=1){this.solved=!0;return}if(this._outerIdx>=e.length-1){this.solved=!0;return}let t=e[this._outerIdx];for(let n of e.slice(this._outerIdx+1)){let o=FZo(t,n);if(o)this.intersections.push({point:o,midlineIds:[t.id,n.id]})}if(this._outerIdx++,this._outerIdx>=e.length-1)this.solved=!0}getOutput(){return this.intersections}getConstructorParams(){return[this.params]}visualize(){let{midlines:e}=this.params,t=e[this._outerIdx];return{lines:e.map((n)=>({points:[n.start,n.end],strokeColor:n===t?"#2196f3":"#cccccc",strokeWidth:n===t?2.5:1,strokeDash:n===t?void 0:[4,4]})),points:this.intersections.map((n)=>({x:n.point.x,y:n.point.y,color:"#e63946",label:`(${n.point.x.toFixed(1)}, ${n.point.y.toFixed(1)})`}))}}},OZo=(e)=>{let t=[];for(let n=0;n+1<e.length;n++){let o=e[n],i=e[n+1];if(o!==void 0&&i!==void 0)t.push([o,i])}return t},zZo=(e,t)=>{let n=Math.max(t.x,Math.min(e.x,t.x+t.width)),o=Math.max(t.y,Math.min(e.y,t.y+t.height)),i=e.x-n,r=e.y-o;return Math.sqrt(i*i+r*r)},GZo=(e,t,n)=>{let i=1/0;for(let r=0;r<=10;r++){let s=r/10,a={x:e.x+s*(t.x-e.x),y:e.y+s*(t.y-e.y)};i=Math.min(i,zZo(a,n))}return i},YZo=(e,t,n)=>Math.min(...n.map((o)=>GZo(e,t,o))),VZo=class extends Zn{constructor(e){super();this.params=e}params;allSegments=[];_midlineIdx=0;_segmentId=0;_step(){let{midlines:e,intersections:t,cellContents:n}=this.params;if(this._midlineIdx>=e.length){this.solved=!0;return}let o=e[this._midlineIdx],i=t.filter((r)=>r.midlineIds.includes(o.id)).map((r)=>r.point).sort((r,s)=>o.type==="vertical"?r.y-s.y:r.x-s.x);for(let[r,s]of OZo([o.start,...i,o.end]))this.allSegments.push({id:`segment-${this._segmentId++}`,start:r,end:s,fromCellIds:o.cellIds,distanceToAnyCell:YZo(r,s,n)});if(this._midlineIdx++,this._midlineIdx>=e.length)this.solved=!0}getOutput(){return this.allSegments}getConstructorParams(){return[this.params]}visualize(){let{cellContents:e,midlines:t}=this.params,n=t[this._midlineIdx],o=Math.max(...this.allSegments.map((i)=>i.distanceToAnyCell??0),1);return{rects:e.map((i)=>({center:{x:i.x+i.width/2,y:i.y+i.height/2},width:i.width,height:i.height,fill:"rgba(255, 165, 0, 0.2)",stroke:"#c87000"})),lines:[...this.allSegments.map((i)=>{let r=(i.distanceToAnyCell??0)/o,s=Math.round(255*(1-r)),a=Math.round(200*r);return{points:[i.start,i.end],strokeColor:`rgb(${s}, ${a}, 80)`,strokeWidth:1.5}}),...n?[{points:[n.start,n.end],strokeColor:"#2196f3",strokeWidth:2,strokeDash:[8,4]}]:[]]}}},ijt=(e)=>{let t=[];for(let n=0;n+1<e.length;n++){let o=e[n],i=e[n+1];if(o!==void 0&&i!==void 0)t.push([o,i])}return t},UZo=(e,t,n,o)=>{let{x:i,y:r}=e,{x:s,y:a}=t,{x:c,y:l}=n,{x:d,y:u}=o,h=(i-s)*(l-u)-(r-a)*(c-d);if(Math.abs(h)<0.0001)return!1;let A=((i-c)*(l-u)-(r-l)*(c-d))/h,m=-((i-s)*(r-l)-(r-a)*(i-c))/h;return A>=0&&A<=1&&m>=0&&m<=1},WZo=(e,t,n)=>{let{x:o,y:i,width:r,height:s}=n,a=e.x>=o&&e.x<=o+r&&e.y>=i&&e.y<=i+s,c=t.x>=o&&t.x<=o+r&&t.y>=i&&t.y<=i+s;if(a||c)return!0;let l=[{start:{x:o,y:i},end:{x:o+r,y:i}},{start:{x:o+r,y:i},end:{x:o+r,y:i+s}},{start:{x:o+r,y:i+s},end:{x:o,y:i+s}},{start:{x:o,y:i+s},end:{x:o,y:i}}];for(let d of l)if(UZo(e,t,d.start,d.end))return!0;return!1},XZo=(e,t)=>e.x<t.x+t.width&&e.x+e.width>t.x&&e.y<t.y+t.height&&e.y+e.height>t.y,rjt=["rgba(100, 149, 237, 0.25)","rgba(144, 238, 144, 0.25)","rgba(255, 182, 193, 0.25)","rgba(221, 160, 221, 0.25)","rgba(255, 218, 185, 0.25)","rgba(175, 238, 238, 0.25)"],KZo=class extends Zn{constructor(e){super();this.params=e;let t=2;this.MAX_ITERATIONS=Math.max(this.MAX_ITERATIONS,e.allSegments.length+t)}params;validSegments=[];cellContainingRects=[];gridRects=[];_phase=0;_segIdx=0;_acceptedSegs=[];_rejectedSegs=[];_step(){let{allSegments:e,cellContents:t,containerWidth:n,containerHeight:o}=this.params;if(this._phase===0){if(this._segIdx>=e.length){this._phase=1;return}let u=e[this._segIdx];if(!t.some((A)=>WZo(u.start,u.end,A)))this._acceptedSegs.push(u);else this._rejectedSegs.push(u);this._segIdx++;return}let i=new Set([0,n]),r=new Set([0,o]);this._acceptedSegs.forEach((u)=>{if(Math.abs(u.start.x-u.end.x)<0.001)i.add(u.start.x);else r.add(u.start.y)});let s=Array.from(i).sort((u,h)=>u-h),a=Array.from(r).sort((u,h)=>u-h),c=[];t.forEach((u)=>{let h=s.filter((g)=>g<=u.x).pop()??s[0],A=s.find((g)=>g>=u.x+u.width)??s[s.length-1],m=a.filter((g)=>g<=u.y).pop()??a[0],p=a.find((g)=>g>=u.y+u.height)??a[a.length-1];c.push({cellId:`contain-${u.cellId}`,x:h,y:m,width:Math.max(0,A-h),height:Math.max(0,p-m)})});let l=[],d=0;for(let[u,h]of ijt(s)){if(h-u<=0)continue;for(let[A,m]of ijt(a)){if(m-A<=0)continue;let p={cellId:`gridRect-${d++}`,x:u,y:A,width:h-u,height:m-A};if(t.some((g)=>XZo(p,g)))continue;l.push(p)}}c.forEach((u)=>{let h=`${u.x},${u.y},${u.width},${u.height}`;if(!l.some((A)=>`${A.x},${A.y},${A.width},${A.height}`===h))l.push(u)}),this.validSegments=this._acceptedSegs,this.cellContainingRects=c,this.gridRects=l,this.solved=!0}getOutput(){return{validSegments:this.validSegments,cellContainingRects:this.cellContainingRects,gridRects:this.gridRects}}getConstructorParams(){return[this.params]}visualize(){let{cellContents:e,allSegments:t}=this.params,n=t[this._segIdx];return{rects:[...this.gridRects.map((o,i)=>({center:{x:o.x+o.width/2,y:o.y+o.height/2},width:o.width,height:o.height,fill:rjt[i%rjt.length],stroke:"#999999"})),...e.map((o)=>({center:{x:o.x+o.width/2,y:o.y+o.height/2},width:o.width,height:o.height,fill:"rgba(255, 165, 0, 0.4)",stroke:"#c87000",label:o.cellId}))],lines:[...this._rejectedSegs.map((o)=>({points:[o.start,o.end],strokeColor:"rgba(220, 50, 50, 0.35)",strokeDash:[3,3],strokeWidth:1})),...this._acceptedSegs.map((o)=>({points:[o.start,o.end],strokeColor:"#2196f3",strokeWidth:1.5})),...n&&this._phase===0?[{points:[n.start,n.end],strokeColor:"#ff9800",strokeWidth:3}]:[],...this.validSegments.map((o)=>({points:[o.start,o.end],strokeColor:"#2196f3",strokeWidth:2}))]}}},f1=0.001,jZo=(e,t,n=f1)=>Math.abs(e.x-t.x)<n&&Math.abs(e.y-t.y)<n,qZo=(e,t)=>{let n=Math.max(e.x-(t.x+t.width),t.x-(e.x+e.width),0),o=Math.max(e.y-(t.y+t.height),t.y-(e.y+e.height),0);return n+o},JZo=(e,t,n=0.5)=>{let o=(Math.abs(e.x+e.width-t.x)<n||Math.abs(t.x+t.width-e.x)<n)&&!(e.y+e.height<=t.y||t.y+t.height<=e.y),i=(Math.abs(e.y+e.height-t.y)<n||Math.abs(t.y+t.height-e.y)<n)&&!(e.x+e.width<=t.x||t.x+t.width<=e.x);return o||i},sjt=["rgba(100, 149, 237, 0.35)","rgba(144, 238, 144, 0.35)","rgba(255, 182, 193, 0.35)","rgba(221, 160, 221, 0.35)","rgba(255, 218, 185, 0.35)","rgba(175, 238, 238, 0.35)","rgba(250, 200, 100, 0.35)","rgba(180, 220, 180, 0.35)"],ajt=["#6495ed","#3cb371","#ff69b4","#9370db","#ffa07a","#20b2aa","#daa520","#5f9e5f"],$Zo=class extends Zn{constructor(e){super();this.params=e}params;mergedRectGroups=[];groupedRects=[];_phase=0;_workRects=[];_unmergedQueue=[];_step(){let{validSegments:e,gridRects:t,cellContainingRects:n,cellContents:o}=this.params;if(this._phase===0){this._workRects=t.map((s)=>{let a=1/0,{x:c,y:l,width:d,height:u}=s;return e.forEach((h)=>{let A=Math.min(h.start.x,h.end.x),m=Math.max(h.start.x,h.end.x),p=Math.min(h.start.y,h.end.y),g=Math.max(h.start.y,h.end.y),_=Math.abs(h.start.y-h.end.y)<f1,f=Math.abs(h.start.x-h.end.x)<f1,y=!1;if(_){if((Math.abs(p-l)<f1||Math.abs(p-(l+u))<f1)&&A<c+d-f1&&m>c+f1&&Math.max(A,c)+f1<Math.min(m,c+d))y=!0}else if(f){if((Math.abs(A-c)<f1||Math.abs(A-(c+d))<f1)&&p<l+u-f1&&g>l+f1&&Math.max(p,l)+f1<Math.min(g,l+u))y=!0}if(y&&h.distanceToAnyCell!==void 0)a=Math.min(a,h.distanceToAnyCell)}),{...s,merged:!1,groupId:null,minBoundingSegmentDistance:a}}),n.forEach((s,a)=>{let c=this._workRects.find((l)=>jZo({x:l.x,y:l.y},{x:s.x,y:s.y})&&Math.abs(l.width-s.width)<f1&&Math.abs(l.height-s.height)<f1);if(c)c.merged=!0,c.groupId=a}),this._unmergedQueue=this._workRects.filter((s)=>!s.merged).sort((s,a)=>s.minBoundingSegmentDistance-a.minBoundingSegmentDistance),this._updateOutput(),this._phase=1;return}if(this._unmergedQueue.length===0){this._finalize(),this.solved=!0;return}let i=!1,r=[];for(let s of this._unmergedQueue){if(s.merged)continue;if(i){r.push(s);continue}let a=this._workRects.filter((c)=>c.merged&&JZo(s,c));if(a.length>0){if(s.merged=!0,a.length===1)s.groupId=a[0].groupId;else{let c=null,l=1/0;for(let d of a){if(d.groupId===null)continue;let u=o[d.groupId];if(!u)continue;let h=qZo(s,u);if(h<l||h===l&&(c===null||d.groupId!==null&&d.groupId<c))l=h,c=d.groupId}s.groupId=c}i=!0}else r.push(s)}if(this._unmergedQueue=r.sort((s,a)=>s.minBoundingSegmentDistance-a.minBoundingSegmentDistance),!i)this._finalize(),this.solved=!0;this._updateOutput()}_updateOutput(){this.groupedRects=this._workRects.filter((e)=>e.groupId!==null)}_finalize(){let{cellContainingRects:e,cellContents:t}=this.params;this.mergedRectGroups=[],e.forEach((n,o)=>{let i=this._workRects.filter((s)=>s.merged&&s.groupId===o).map(({merged:s,groupId:a,minBoundingSegmentDistance:c,...l})=>l),r=t[o];if(!r)return;this.mergedRectGroups.push([n,r,...i.filter((s)=>s.cellId!==n.cellId)])})}getOutput(){return{mergedRectGroups:this.mergedRectGroups,groupedRects:this.groupedRects}}getConstructorParams(){return[this.params]}visualize(){let{cellContents:e}=this.params;return{rects:[...this.groupedRects.map((t)=>({center:{x:t.x+t.width/2,y:t.y+t.height/2},width:t.width,height:t.height,fill:sjt[t.groupId%sjt.length],stroke:ajt[t.groupId%ajt.length]})),...this._workRects.filter((t)=>!t.merged).map((t)=>({center:{x:t.x+t.width/2,y:t.y+t.height/2},width:t.width,height:t.height,fill:"rgba(200, 200, 200, 0.2)",stroke:"#aaaaaa",strokeDash:[3,3]})),...e.map((t)=>({center:{x:t.x+t.width/2,y:t.y+t.height/2},width:t.width,height:t.height,fill:"rgba(255, 165, 0, 0.5)",stroke:"#c87000",label:t.cellId}))]}}},ZZo=0.001,cjt=(e,t)=>{let n=parseFloat(e.x.toFixed(4)),o=parseFloat(e.y.toFixed(4)),i=parseFloat(t.x.toFixed(4)),r=parseFloat(t.y.toFixed(4));if(n<i||n===i&&o<r)return`${n},${o}_${i},${r}`;return`${i},${r}_${n},${o}`},ljt=["rgba(100, 149, 237, 0.25)","rgba(144, 238, 144, 0.25)","rgba(255, 182, 193, 0.25)","rgba(221, 160, 221, 0.25)","rgba(255, 218, 185, 0.25)","rgba(175, 238, 238, 0.25)","rgba(250, 200, 100, 0.25)","rgba(180, 220, 180, 0.25)"],eei=class extends Zn{constructor(e){super();this.params=e}params;outlineLines=[];_outerIdx=0;_segMap=new Map;_step(){let{groupedRects:e}=this.params,t=ZZo;if(this._outerIdx>=e.length){this._rebuildLines(),this.solved=!0;return}let n=e[this._outerIdx];for(let o of e.slice(this._outerIdx+1)){if(n.groupId===o.groupId)continue;let i=n.x+n.width,r=o.x+o.width;if(Math.abs(i-o.x)<t||Math.abs(r-n.x)<t){let c=Math.abs(i-o.x)<t?i:r,l=Math.max(n.y,o.y),d=Math.min(n.y+n.height,o.y+o.height);if(d-l>t){let u={x:c,y:l},h={x:c,y:d};this._segMap.set(cjt(u,h),{start:u,end:h})}}let s=n.y+n.height,a=o.y+o.height;if(Math.abs(s-o.y)<t||Math.abs(a-n.y)<t){let c=Math.abs(s-o.y)<t?s:a,l=Math.max(n.x,o.x),d=Math.min(n.x+n.width,o.x+o.width);if(d-l>t){let u={x:l,y:c},h={x:d,y:c};this._segMap.set(cjt(u,h),{start:u,end:h})}}}if(this._outerIdx++,this._rebuildLines(),this._outerIdx>=e.length)this.solved=!0}_rebuildLines(){let e=0;this.outlineLines=[],this._segMap.forEach(({start:t,end:n})=>{this.outlineLines.push({id:`outline-${e++}`,start:t,end:n})})}getOutput(){return this.outlineLines}getConstructorParams(){return[this.params]}visualize(){let{groupedRects:e}=this.params,t=e[this._outerIdx];return{rects:e.map((n)=>({center:{x:n.x+n.width/2,y:n.y+n.height/2},width:n.width,height:n.height,fill:n===t?"rgba(255, 152, 0, 0.45)":ljt[n.groupId%ljt.length],stroke:n===t?"#ff6600":"#cccccc"})),lines:this.outlineLines.map((n)=>({points:[n.start,n.end],strokeColor:"#000000",strokeWidth:3}))}}},ei=0.001,yT=(e,t,n=ei)=>Math.abs(e.x-t.x)<n&&Math.abs(e.y-t.y)<n,XI=(e)=>`${e.x.toFixed(4)},${e.y.toFixed(4)}`,dye=(e,t)=>{let n=XI(e),o=XI(t);return n<o?`${n}_${o}`:`${o}_${n}`},Dne=(e)=>yT(e.start,e.end),tei=(e)=>Math.abs(e.start.x-e.end.x)<ei||Math.abs(e.start.y-e.end.y)<ei,WI=(e,t,n,o)=>Math.min(t,o)-Math.max(e,n)>ei,ZU=(e)=>e.reduce((t,n)=>t+Math.abs(n.start.x-n.end.x)+Math.abs(n.start.y-n.end.y),0),I0=(e,t)=>{if(Math.abs(e.start.x-e.end.x)<ei)return Math.abs(t.x-e.start.x)<ei&&t.y>=Math.min(e.start.y,e.end.y)-ei&&t.y<=Math.max(e.start.y,e.end.y)+ei;if(Math.abs(e.start.y-e.end.y)<ei)return Math.abs(t.y-e.start.y)<ei&&t.x>=Math.min(e.start.x,e.end.x)-ei&&t.x<=Math.max(e.start.x,e.end.x)+ei;return!1},Aye=(e,t,n)=>t==="start"?{start:n,end:e.end}:{start:e.start,end:n},djt=(e)=>({x:(e.minX+e.maxX)/2,y:(e.minY+e.maxY)/2}),ujt=(e,t,n)=>e>Math.min(t,n)+ei&&e<Math.max(t,n)-ei,xjt=(e)=>{let t=new Map;for(let n of e)t.set(XI(n.start),(t.get(XI(n.start))??0)+1),t.set(XI(n.end),(t.get(XI(n.end))??0)+1);return t},nei=(e,t)=>t.some((n)=>{let o=(Math.abs(e.x-n.minX)<ei||Math.abs(e.x-n.maxX)<ei)&&e.y>=n.minY-ei&&e.y<=n.maxY+ei,i=(Math.abs(e.y-n.minY)<ei||Math.abs(e.y-n.maxY)<ei)&&e.x>=n.minX-ei&&e.x<=n.maxX+ei;return o||i}),oei=(e,t)=>{let n=e.start.x,o=e.start.y,i=e.end.x,r=e.end.y;if(Math.abs(n-i)<ei){let s=Math.min(o,r),a=Math.max(o,r);return n>t.minX+ei&&n<t.maxX-ei&&a>t.minY-ei&&s<t.maxY+ei}if(Math.abs(o-r)<ei){let s=Math.min(n,i),a=Math.max(n,i);return o>t.minY+ei&&o<t.maxY-ei&&a>t.minX+ei&&s<t.maxX-ei}return!0},iei=(e,t)=>{let n=e.start.x,o=e.start.y,i=e.end.x,r=e.end.y;if(Math.abs(n-i)<ei){let s=Math.min(o,r),a=Math.max(o,r);return(Math.abs(n-t.minX)<ei||Math.abs(n-t.maxX)<ei)&&WI(s,a,t.minY,t.maxY)}if(Math.abs(o-r)<ei){let s=Math.min(n,i),a=Math.max(n,i);return(Math.abs(o-t.minY)<ei||Math.abs(o-t.maxY)<ei)&&WI(s,a,t.minX,t.maxX)}return!1},Lne=(e,t)=>e.length>0&&e.every((n)=>!Dne(n)&&tei(n)&&!t.some((o)=>oei(n,o)||iei(n,o))),rei=(e,t)=>{if(Math.abs(e.start.x-e.end.x)<ei){let n=e.start.x,o=Math.min(e.start.y,e.end.y),i=Math.max(e.start.y,e.end.y);return t.some((r)=>r.maxX<=n+ei&&WI(o,i,r.minY,r.maxY)&&t.some((s)=>s.minX>=n-ei&&WI(o,i,s.minY,s.maxY)&&WI(r.minY,r.maxY,s.minY,s.maxY)))}if(Math.abs(e.start.y-e.end.y)<ei){let n=e.start.y,o=Math.min(e.start.x,e.end.x),i=Math.max(e.start.x,e.end.x);return t.some((r)=>r.maxY<=n+ei&&WI(o,i,r.minX,r.maxX)&&t.some((s)=>s.minY>=n-ei&&WI(o,i,s.minX,s.maxX)&&WI(r.minX,r.maxX,s.minX,s.maxX)))}return!1},sei=(e,t,n)=>{let o=djt(t),i=djt(n);if(Math.abs(e.start.x-e.end.x)<ei){let r=e.start.x,s=Math.min(e.start.y,e.end.y),a=Math.max(e.start.y,e.end.y);return ujt(r,o.x,i.x)&&WI(s,a,t.minY,t.maxY)&&WI(s,a,n.minY,n.maxY)}if(Math.abs(e.start.y-e.end.y)<ei){let r=e.start.y,s=Math.min(e.start.x,e.end.x),a=Math.max(e.start.x,e.end.x);return ujt(r,o.y,i.y)&&WI(s,a,t.minX,t.maxX)&&WI(s,a,n.minX,n.maxX)}return!1},aei=(e,t)=>{let n=new Set;for(let o=0;o<t.length;o++){let i=t[o];if(!i)continue;for(let r=o+1;r<t.length;r++){let s=t[r];if(!s)continue;if(e.some((a)=>sei(a,i,s)))n.add(`${o}:${r}`)}}return n},cei=(e,t,n)=>{let o=aei(e,t);return[...n].every((i)=>o.has(i))},nW=(e)=>{let t=new Map,n=e.map((s)=>[s.start,s.end]),o=(s,a)=>{let c=XI(s),l=XI(a);if(!t.has(c))t.set(c,new Set);if(!t.has(l))t.set(l,new Set);t.get(c)?.add(l),t.get(l)?.add(c)};for(let s=0;s<e.length;s++){let a=e[s];if(!a||Dne(a))continue;for(let c=s+1;c<e.length;c++){let l=e[c];if(!l||Dne(l))continue;let d=Math.abs(a.start.x-a.end.x)<ei,u=Math.abs(a.start.y-a.end.y)<ei,h=Math.abs(l.start.x-l.end.x)<ei,A=Math.abs(l.start.y-l.end.y)<ei;if(d&&A){let m={x:a.start.x,y:l.start.y};if(I0(a,m)&&I0(l,m))n[s]?.push(m),n[c]?.push(m)}if(u&&h){let m={x:l.start.x,y:a.start.y};if(I0(a,m)&&I0(l,m))n[s]?.push(m),n[c]?.push(m)}}}for(let s=0;s<e.length;s++){let a=e[s];if(!a||Dne(a))continue;let c=[...new Map(n[s]?.map((l)=>[XI(l),l]))].map(([,l])=>l).sort((l,d)=>Math.abs(a.start.x-a.end.x)<ei?l.y-d.y:l.x-d.x);for(let l=0;l+1<c.length;l++){let d=c[l],u=c[l+1];if(d&&u&&!yT(d,u))o(d,u)}}let i=0,r=new Set;for(let s of t.keys()){if(r.has(s))continue;i++;let a=[s];r.add(s);while(a.length>0){let c=a.pop();if(!c)continue;for(let l of t.get(c)??[]){if(r.has(l))continue;r.add(l),a.push(l)}}}return i},lei=(e,t,n)=>{let o=e,i=!0;while(i){i=!1;let r=xjt(o);for(let s=0;s<o.length;s++){let a=o[s];if(!a)continue;for(let c of["start","end"]){let l=a[c];if(r.get(XI(l))!==1)continue;let d=[],u=Math.abs(a.start.x-a.end.x)<ei,h=Math.abs(a.start.y-a.end.y)<ei;for(let m=0;m<o.length;m++){if(s===m)continue;let p=o[m];if(!p)continue;if(u&&Math.abs(p.start.y-p.end.y)<ei){let g={x:a.start.x,y:p.start.y};if(I0(p,g))d.push(g)}if(h&&Math.abs(p.start.x-p.end.x)<ei){let g={x:p.start.x,y:a.start.y};if(I0(p,g))d.push(g)}}let A=d.filter((m)=>!yT(m,l)).map((m)=>({point:m,line:Aye(a,c,m)})).filter(({line:m})=>ZU([m])>ZU([a])+ei).filter(({line:m})=>!n?.preserveOriginalSpan||I0(m,l)).filter(({line:m})=>Lne([m],t)).sort((m,p)=>ZU([m.line])-ZU([p.line])||JSON.stringify(m.point).localeCompare(JSON.stringify(p.point))).at(0);if(!A)continue;o=o.map((m,p)=>p===s?A.line:m),i=!0;break}if(i)break}}return o},dei=(e,t)=>{let n=[],o=Math.abs(e.start.x-e.end.x)<ei,i=Math.abs(e.start.y-e.end.y)<ei;for(let r of t){if(r===e)continue;let s=Math.abs(r.start.x-r.end.x)<ei,a=Math.abs(r.start.y-r.end.y)<ei;if(o&&a){let c={x:e.start.x,y:r.start.y};if(I0(e,c)&&I0(r,c))n.push(c)}if(i&&s){let c={x:r.start.x,y:e.start.y};if(I0(e,c)&&I0(r,c))n.push(c)}}return n},uei=(e,t,n)=>{let o=e,i=!0;while(i){i=!1;let r=xjt(o),s=nW(o);for(let a=0;a<o.length;a++){let c=o[a];if(!c)continue;let l=dei(c,o).filter((d)=>!yT(d,c.start)&&!yT(d,c.end));if(l.length===0)continue;for(let d of["start","end"]){let u=c[d];if(r.get(XI(u))!==1)continue;if(nei(u,t))continue;let h=l.map((g)=>({point:g,distance:Math.abs(g.x-u.x)+Math.abs(g.y-u.y)})).sort((g,_)=>g.distance-_.distance).at(0);if(!h)continue;let A={start:u,end:h.point};if(rei(A,t))continue;let m=Aye(c,d,h.point);if(!Lne([m],t))continue;let p=o.map((g,_)=>_===a?m:g);if(nW(p)>s)continue;if(n&&!cei(p,t,n))continue;o=p,i=!0;break}if(i)break}}return o},hei=(e)=>{let{start:t,end:n}=e;if(t.y===n.y&&t.x>n.x)[t,n]=[{x:n.x,y:t.y},{x:t.x,y:n.y}];else if(t.x===n.x&&t.y>n.y)[t,n]=[{x:t.x,y:n.y},{x:n.x,y:t.y}];return{start:t,end:n}},Ize=(e)=>{if(!e||e.length===0)return[];let t=e.map(hei),n=[],o=[];for(let a of t)if(a.start.y===a.end.y)n.push(a);else if(a.start.x===a.end.x)o.push(a);let i=[],r=new Map;for(let a of n){let c=r.get(a.start.y)??[];c.push(a),r.set(a.start.y,c)}for(let[,a]of r){a.sort((l,d)=>l.start.x-d.start.x);let c;for(let l of a){if(!c){c={...l};continue}if(l.start.x<=c.end.x)c.end.x=Math.max(c.end.x,l.end.x);else i.push(c),c={...l}}if(c)i.push(c)}let s=new Map;for(let a of o){let c=s.get(a.start.x)??[];c.push(a),s.set(a.start.x,c)}for(let[,a]of s){a.sort((l,d)=>l.start.y-d.start.y);let c;for(let l of a){if(!c){c={...l};continue}if(l.start.y<=c.end.y)c.end.y=Math.max(c.end.y,l.end.y);else i.push(c),c={...l}}if(c)i.push(c)}return i},Tne=(e)=>{let t=[];for(let n=0;n+1<e.length;n++){let o=e[n],i=e[n+1];if(!o||!i||yT(o,i))continue;t.push({start:o,end:i})}return t},mei=(e,t)=>{let n=Tne(e),o=e.at(0),i=e.at(-1);if(!o||!i||n.length<2)return n;let r=[];if(Math.abs(o.x-i.x)<ei||Math.abs(o.y-i.y)<ei)r.push([{start:o,end:i}]);else r.push(Tne([o,{x:o.x,y:i.y},i]),Tne([o,{x:i.x,y:o.y},i]));let s=[...new Set(e.map((l)=>l.x))],a=[...new Set(e.map((l)=>l.y))];for(let l of s){if(Math.abs(l-o.x)<ei||Math.abs(l-i.x)<ei)continue;r.push(Tne([o,{x:l,y:o.y},{x:l,y:i.y},i]))}for(let l of a){if(Math.abs(l-o.y)<ei||Math.abs(l-i.y)<ei)continue;r.push(Tne([o,{x:o.x,y:l},{x:i.x,y:l},i]))}return r.filter((l)=>l.length<n.length).filter((l)=>Lne(l,t)).sort((l,d)=>l.length-d.length||ZU(l)-ZU(d)||JSON.stringify(l).localeCompare(JSON.stringify(d))).at(0)??n},pei=(e,t)=>{let n=new Map,o=new Map,i=(a)=>{let c=XI(a);if(n.set(c,a),!o.has(c))o.set(c,new Set);return c};for(let a of e){if(Dne(a))continue;let c=i(a.start),l=i(a.end);o.get(c)?.add(l),o.get(l)?.add(c)}let r=new Set,s=[];for(let[a,c]of o){if(c.size===2)continue;for(let l of c){let d=dye(n.get(a),n.get(l));if(r.has(d))continue;let u=[n.get(a)],h=a,A=l;while(!0){r.add(dye(n.get(h),n.get(A))),u.push(n.get(A));let m=o.get(A);if(!m||m.size!==2)break;let p=[...m].find((_)=>_!==h);if(!p)break;let g=dye(n.get(A),n.get(p));if(r.has(g))break;h=A,A=p}s.push(...mei(u,t))}}for(let[a,c]of o)for(let l of c){let d=dye(n.get(a),n.get(l));if(r.has(d))continue;r.add(d),s.push({start:n.get(a),end:n.get(l)})}return s},Aei=(e,t)=>{let n=e,o=!0;while(o){o=!1;let i=nW(n),r=Ize(n).length;for(let s=0;s<n.length;s++){let a=n[s];if(!a)continue;let c=Math.abs(a.start.x-a.end.x)<ei,l=Math.abs(a.start.y-a.end.y)<ei;if(!c&&!l)continue;for(let d=0;d<n.length;d++){if(s===d)continue;let u=n[d];if(!u)continue;let h=Math.abs(u.start.x-u.end.x)<ei,A=Math.abs(u.start.y-u.end.y)<ei;if(c!==h||l!==A)continue;if(c&&Math.abs(a.start.x-u.start.x)<ei||l&&Math.abs(a.start.y-u.start.y)<ei)continue;if(!n.some((f,y)=>{if(y===s||y===d)return!1;if(c&&Math.abs(f.start.y-f.end.y)<ei)return I0(f,{x:a.start.x,y:f.start.y})&&I0(a,{x:a.start.x,y:f.start.y})&&I0(f,{x:u.start.x,y:f.start.y})&&I0(u,{x:u.start.x,y:f.start.y});if(l&&Math.abs(f.start.x-f.end.x)<ei)return I0(f,{x:f.start.x,y:a.start.y})&&I0(a,{x:f.start.x,y:a.start.y})&&I0(f,{x:f.start.x,y:u.start.y})&&I0(u,{x:f.start.x,y:u.start.y});return!1}))continue;let p;if(c)p={start:{x:u.start.x,y:a.start.y},end:{x:u.start.x,y:a.end.y}};else p={start:{x:a.start.x,y:u.start.y},end:{x:a.end.x,y:u.start.y}};if(!Lne([p],t))continue;let g=n.map((f,y)=>{if(y===s)return p;return f});if(nW(g)>i)continue;let _=Ize(g);if(_.length>=r)continue;n=_,o=!0;break}if(o)break}}return n},_ei=(e,t)=>{let n=e,o=!0;while(o){o=!1;let i=nW(n);for(let r=0;r<n.length;r++){let s=n[r];if(!s)continue;let a=Math.abs(s.start.y-s.end.y)<ei,c=Math.abs(s.start.x-s.end.x)<ei;if(!a&&!c)continue;for(let l=0;l<n.length;l++){if(r===l)continue;let d=n[l];if(!d)continue;let u=Math.abs(d.start.y-d.end.y)<ei,h=Math.abs(d.start.x-d.end.x)<ei;if(a!==u)continue;if(c!==h)continue;let A=[s.start,s.end],m;if(a)m=A.map((f)=>({x:f.x,y:d.start.y}));else m=A.map((f)=>({x:d.start.x,y:f.y}));if(!m.every((f)=>I0(d,f)))continue;let p=new Map,g=!0;for(let f=0;f<A.length;f++){let y=A[f],x=m[f];if(!y||!x){g=!1;break}let C=n.findIndex((B,w)=>{if(w===r||w===l)return!1;let T=Math.abs(B.start.y-B.end.y)<ei,Q=Math.abs(B.start.x-B.end.x)<ei;return(a&&Q||c&&T)&&I0(B,y)});if(C===-1)continue;let I=n[C];if(!I){g=!1;break}let b=yT(I.start,y),P=yT(I.end,y);if(!b&&!P&&I0(I,x))continue;if(!b&&!P){g=!1;break}let E;if(b)E=Aye(I,"start",x);else E=Aye(I,"end",x);if(!Lne([E],t)){g=!1;break}p.set(C,E)}if(!g)continue;let _=n.map((f,y)=>p.get(y)??f).filter((f,y)=>y!==r);if(nW(_)>i)continue;n=_,o=!0;break}if(o)break}}return n},Cjt=((e)=>(e[e.MergeAlignedSegments=0]="MergeAlignedSegments",e[e.SimplifyChains=1]="SimplifyChains",e[e.ConnectDanglingEndpoints=2]="ConnectDanglingEndpoints",e[e.AlignParallelLinesAcrossConnectors=3]="AlignParallelLinesAcrossConnectors",e[e.RemoveRedundantParallelBridges=4]="RemoveRedundantParallelBridges",e[e.TrimDanglingOverhangs=5]="TrimDanglingOverhangs",e))(Cjt||{}),gei=class extends Zn{constructor(e){super();this.params=e;let t=e.offsetX??0,n=e.offsetY??0;this._inputRects=e.cellContents.map((o)=>({minX:o.x+t,minY:o.y+n,maxX:o.x+o.width+t,maxY:o.y+o.height+n}))}params;mergedOriginalLines=[];reducedLines=[];_stage=0;_currentLines=[];_inputRects;_step(){let{outlineLines:e}=this.params,t=this.params.offsetX??0,n=this.params.offsetY??0,o=this._inputRects;switch(this._stage){case 0:{let r=Ize(e.map((s)=>({start:{x:s.start.x+t,y:s.start.y+n},end:{x:s.end.x+t,y:s.end.y+n}})));this._currentLines=r,this.mergedOriginalLines=r.map((s)=>({start:{x:s.start.x,y:s.start.y},end:{x:s.end.x,y:s.end.y}}));break}case 1:this._currentLines=pei(this._currentLines,o);break;case 2:this._currentLines=lei(this._currentLines,o);break;case 3:this._currentLines=Aei(this._currentLines,o);break;case 4:this._currentLines=_ei(this._currentLines,o);break;case 5:this._currentLines=uei(this._currentLines,o),this.reducedLines=this._currentLines.map((r)=>({start:{x:r.start.x-t,y:r.start.y-n},end:{x:r.end.x-t,y:r.end.y-n}})),this.mergedOriginalLines=this.mergedOriginalLines.map((r)=>({start:{x:r.start.x-t,y:r.start.y-n},end:{x:r.end.x-t,y:r.end.y-n}})),this.solved=!0;break}let i=this.getNextStage(this._stage);if(i)this._stage=i}getNextStage(e){let t=Object.values(Cjt);return t[t.indexOf(e)+1]}getOutput(){return this.reducedLines}getConstructorParams(){return[this.params]}visualize(){let{cellContents:e,outlineLines:t}=this.params;return{rects:e.map((n)=>({center:{x:n.x+n.width/2,y:n.y+n.height/2},width:n.width,height:n.height,fill:"rgba(255, 165, 0, 0.2)",stroke:"#c87000"})),lines:[...t.map((n)=>({points:[n.start,n.end],strokeColor:"rgba(180, 180, 180, 0.4)",strokeWidth:1,strokeDash:[4,4]})),...this._currentLines.map((n)=>({points:[n.start,n.end],strokeColor:"#0055cc",strokeWidth:2}))]}}},pr=0.001,Ijt=(e,t,n=pr)=>Math.abs(e.x-t.x)<n&&Math.abs(e.y-t.y)<n,Cze=(e)=>`${e.x.toFixed(4)},${e.y.toFixed(4)}`,pye=(e)=>Ijt(e.start,e.end),fei=(e)=>Math.abs(e.start.x-e.end.x)<pr||Math.abs(e.start.y-e.end.y)<pr,eW=(e,t,n,o)=>Math.min(t,o)-Math.max(e,n)>pr,_ye=(e)=>e.reduce((t,n)=>t+Math.abs(n.start.x-n.end.x)+Math.abs(n.start.y-n.end.y),0),uye=(e,t)=>{if(Math.abs(e.start.x-e.end.x)<pr)return Math.abs(t.x-e.start.x)<pr&&t.y>=Math.min(e.start.y,e.end.y)-pr&&t.y<=Math.max(e.start.y,e.end.y)+pr;if(Math.abs(e.start.y-e.end.y)<pr)return Math.abs(t.y-e.start.y)<pr&&t.x>=Math.min(e.start.x,e.end.x)-pr&&t.x<=Math.max(e.start.x,e.end.x)+pr;return!1},Rne=(e)=>({x:(e.minX+e.maxX)/2,y:(e.minY+e.maxY)/2}),hjt=(e,t,n)=>e>Math.min(t,n)+pr&&e<Math.max(t,n)-pr,yei=(e,t)=>{let n=e.start.x,o=e.start.y,i=e.end.x,r=e.end.y;if(Math.abs(n-i)<pr){let s=Math.min(o,r),a=Math.max(o,r);return n>t.minX+pr&&n<t.maxX-pr&&a>t.minY-pr&&s<t.maxY+pr}if(Math.abs(o-r)<pr){let s=Math.min(n,i),a=Math.max(n,i);return o>t.minY+pr&&o<t.maxY-pr&&a>t.minX+pr&&s<t.maxX-pr}return!0},xei=(e,t)=>{let n=e.start.x,o=e.start.y,i=e.end.x,r=e.end.y;if(Math.abs(n-i)<pr){let s=Math.min(o,r),a=Math.max(o,r);return(Math.abs(n-t.minX)<pr||Math.abs(n-t.maxX)<pr)&&eW(s,a,t.minY,t.maxY)}if(Math.abs(o-r)<pr){let s=Math.min(n,i),a=Math.max(n,i);return(Math.abs(o-t.minY)<pr||Math.abs(o-t.maxY)<pr)&&eW(s,a,t.minX,t.maxX)}return!1},bze=(e,t)=>e.length>0&&e.every((n)=>!pye(n)&&fei(n)&&!t.some((o)=>yei(n,o)||xei(n,o))),bjt=(e,t,n)=>{let o=Rne(t),i=Rne(n);if(Math.abs(e.start.x-e.end.x)<pr){let r=e.start.x,s=Math.min(e.start.y,e.end.y),a=Math.max(e.start.y,e.end.y);return hjt(r,o.x,i.x)&&eW(s,a,t.minY,t.maxY)&&eW(s,a,n.minY,n.maxY)}if(Math.abs(e.start.y-e.end.y)<pr){let r=e.start.y,s=Math.min(e.start.x,e.end.x),a=Math.max(e.start.x,e.end.x);return hjt(r,o.y,i.y)&&eW(s,a,t.minX,t.maxX)&&eW(s,a,n.minX,n.maxX)}return!1},xye=(e,t)=>{let n=new Set;for(let o=0;o<t.length;o++){let i=t[o];if(!i)continue;for(let r=o+1;r<t.length;r++){let s=t[r];if(!s)continue;if(e.some((a)=>bjt(a,i,s)))n.add(`${o}:${r}`)}}return n},Cei=(e,t,n)=>{let o=xye(e,t);return[...n].every((i)=>o.has(i))},Sjt=(e,t)=>{let n=new Set,o=new Set;for(let i of t)n.add(i.minX),n.add(i.maxX),n.add(Rne(i).x),o.add(i.minY),o.add(i.maxY),o.add(Rne(i).y);for(let i of e)n.add(i.start.x),n.add(i.end.x),o.add(i.start.y),o.add(i.end.y);return{xs:[...n].sort((i,r)=>i-r),ys:[...o].sort((i,r)=>i-r)}},Iei=(e,t,n,o)=>e.some((i)=>{if(Math.abs(i.start.x-i.end.x)>=pr)return!1;if(Math.abs(i.start.x-t)>=pr)return!1;let r=Math.min(i.start.y,i.end.y),s=Math.max(i.start.y,i.end.y);return n>=r-pr&&o<=s+pr}),bei=(e,t,n,o)=>e.some((i)=>{if(Math.abs(i.start.y-i.end.y)>=pr)return!1;if(Math.abs(i.start.y-t)>=pr)return!1;let r=Math.min(i.start.x,i.end.x),s=Math.max(i.start.x,i.end.x);return n>=r-pr&&o<=s+pr}),Sei=(e,t)=>{let{xs:n,ys:o}=Sjt(e,t),i=n.length-1,r=o.length-1,s=new Map,a=(l,d)=>`${l}:${d}`,c=0;for(let l=0;l<i;l++)for(let d=0;d<r;d++){let u=a(l,d);if(s.has(u))continue;let h=[{x:l,y:d}];s.set(u,c);while(h.length>0){let A=h.pop();if(!A)continue;let m=[{x:A.x-1,y:A.y},{x:A.x+1,y:A.y},{x:A.x,y:A.y-1},{x:A.x,y:A.y+1}];for(let p of m){if(p.x<0||p.x>=i||p.y<0||p.y>=r)continue;let g=a(p.x,p.y);if(s.has(g))continue;let _=!1;if(p.x!==A.x){let f=n[Math.max(p.x,A.x)],y=o[A.y],x=o[A.y+1];if(f===void 0||y===void 0||x===void 0)continue;_=Iei(e,f,y,x)}else{let f=o[Math.max(p.y,A.y)],y=n[A.x],x=n[A.x+1];if(f===void 0||y===void 0||x===void 0)continue;_=bei(e,f,y,x)}if(_)continue;s.set(g,c),h.push(p)}}c++}return t.map((l)=>{let d=Rne(l),u=n.findIndex((A,m)=>m+1<n.length&&d.x>=A-pr&&d.x<=(n[m+1]??A)+pr),h=o.findIndex((A,m)=>m+1<o.length&&d.y>=A-pr&&d.y<=(o[m+1]??A)+pr);return s.get(a(u,h))??-1})},gye=(e,t)=>{let n=Sei(e,t),o=0;for(let i=0;i<n.length;i++)for(let r=i+1;r<n.length;r++)if(n[i]===n[r])o++;return o},mjt=(e)=>{let t=new Map,n=e.map((s)=>[s.start,s.end]),o=(s,a)=>{let c=Cze(s),l=Cze(a);if(!t.has(c))t.set(c,new Set);if(!t.has(l))t.set(l,new Set);t.get(c)?.add(l),t.get(l)?.add(c)};for(let s=0;s<e.length;s++){let a=e[s];if(!a||pye(a))continue;for(let c=s+1;c<e.length;c++){let l=e[c];if(!l||pye(l))continue;let d=Math.abs(a.start.x-a.end.x)<pr,u=Math.abs(a.start.y-a.end.y)<pr,h=Math.abs(l.start.x-l.end.x)<pr,A=Math.abs(l.start.y-l.end.y)<pr;if(d&&A){let m={x:a.start.x,y:l.start.y};if(uye(a,m)&&uye(l,m))n[s]?.push(m),n[c]?.push(m)}if(u&&h){let m={x:l.start.x,y:a.start.y};if(uye(a,m)&&uye(l,m))n[s]?.push(m),n[c]?.push(m)}}}for(let s=0;s<e.length;s++){let a=e[s];if(!a||pye(a))continue;let c=[...new Map(n[s]?.map((l)=>[Cze(l),l]))].map(([,l])=>l).sort((l,d)=>Math.abs(a.start.x-a.end.x)<pr?l.y-d.y:l.x-d.x);for(let l=0;l+1<c.length;l++){let d=c[l],u=c[l+1];if(d&&u&&!Ijt(d,u))o(d,u)}}let i=0,r=new Set;for(let s of t.keys()){if(r.has(s))continue;i++;let a=[s];r.add(s);while(a.length>0){let c=a.pop();if(!c)continue;for(let l of t.get(c)??[]){if(r.has(l))continue;r.add(l),a.push(l)}}}return i},Pei=(e)=>{let{start:t,end:n}=e;if(t.y===n.y&&t.x>n.x)[t,n]=[{x:n.x,y:t.y},{x:t.x,y:n.y}];else if(t.x===n.x&&t.y>n.y)[t,n]=[{x:t.x,y:n.y},{x:n.x,y:t.y}];return{start:t,end:n}},vze=(e)=>{if(!e||e.length===0)return[];let t=e.map(Pei),n=[],o=[];for(let a of t)if(a.start.y===a.end.y)n.push(a);else if(a.start.x===a.end.x)o.push(a);let i=[],r=new Map;for(let a of n){let c=r.get(a.start.y)??[];c.push(a),r.set(a.start.y,c)}for(let[,a]of r){a.sort((l,d)=>l.start.x-d.start.x);let c;for(let l of a){if(!c){c={...l};continue}if(l.start.x<=c.end.x+pr)c.end.x=Math.max(c.end.x,l.end.x);else i.push(c),c={...l}}if(c)i.push(c)}let s=new Map;for(let a of o){let c=s.get(a.start.x)??[];c.push(a),s.set(a.start.x,c)}for(let[,a]of s){a.sort((l,d)=>l.start.y-d.start.y);let c;for(let l of a){if(!c){c={...l};continue}if(l.start.y<=c.end.y+pr)c.end.y=Math.max(c.end.y,l.end.y);else i.push(c),c={...l}}if(c)i.push(c)}return i},vei=(e,t,n,o)=>{let i=e;while(!0){let r=xye(i,n),s=[...o].find((h)=>!r.has(h));if(!s)break;let[a,c]=s.split(":"),l=n[Number(a)],d=n[Number(c)];if(!l||!d)break;let u=t.filter((h)=>bjt(h,l,d)).sort((h,A)=>_ye([h])-_ye([A])||JSON.stringify(h).localeCompare(JSON.stringify(A))).at(0);if(!u)break;i=vze([...i,u])}return i},Eei=(e,t,n)=>{let o=e;while(!0){let i=gye(o,n);if(i===0)break;let{xs:r,ys:s}=Sjt(o,n),a=[];for(let l=0;l<o.length;l++){let d=o[l];if(!d)continue;if(Math.abs(d.start.y-d.end.y)<pr){let u=Math.min(d.start.x,d.end.x),h=Math.max(d.start.x,d.end.x);for(let A of r){if(A>=u-pr&&A<=h+pr)continue;let m={start:{x:Math.min(A,u),y:d.start.y},end:{x:Math.max(A,h),y:d.start.y}};if(!bze([m],n))continue;a.push(o.map((p,g)=>{if(g===l)return m;return p}))}}if(Math.abs(d.start.x-d.end.x)<pr){let u=Math.min(d.start.y,d.end.y),h=Math.max(d.start.y,d.end.y);for(let A of s){if(A>=u-pr&&A<=h+pr)continue;let m={start:{x:d.start.x,y:Math.min(A,u)},end:{x:d.start.x,y:Math.max(A,h)}};if(!bze([m],n))continue;a.push(o.map((p,g)=>{if(g===l)return m;return p}))}}}for(let l of t)a.push([...o,l]);let c=a.map((l)=>({lines:vze(l),shared:gye(l,n)})).filter((l)=>l.shared<i).sort((l,d)=>l.shared-d.shared||l.lines.length-d.lines.length||_ye(l.lines)-_ye(d.lines)).at(0);if(!c)break;o=c.lines}return o},Mei=(e,t)=>{let n=e,o=!0;while(o){o=!1;let i=xye(n,t),r=gye(n,t),s=mjt(n);for(let a=0;a<n.length;a++){let c=n.filter((l,d)=>d!==a);if(!bze(c,t))continue;if(!Cei(c,t,i))continue;if(gye(c,t)>r)continue;if(mjt(c)>s)continue;n=c,o=!0;break}}return n},Pjt=((e)=>(e[e.RestoreMissingSeparators=0]="RestoreMissingSeparators",e[e.FixSharedCellRegions=1]="FixSharedCellRegions",e[e.RemoveRedundantSeparators=2]="RemoveRedundantSeparators",e))(Pjt||{}),Bei=class extends Zn{constructor(e){super();this.params=e,this._inputRects=e.cellContents.map((t)=>({minX:t.x,minY:t.y,maxX:t.x+t.width,maxY:t.y+t.height})),this._currentLines=e.reducedLines}params;repairedLines=[];_stage=0;_currentLines=[];_inputRects;_step(){let e=vze(this.params.originalLines),t=this._inputRects;switch(this._stage){case 0:{let o=xye(e,t);this._currentLines=vei(this._currentLines,e,t,o);break}case 1:this._currentLines=Eei(this._currentLines,e,t);break;case 2:this._currentLines=Mei(this._currentLines,t),this.repairedLines=this._currentLines,this.solved=!0;break}let n=this.getNextStage(this._stage);if(n)this._stage=n}getNextStage(e){let t=Object.values(Pjt);return t[t.indexOf(e)+1]}getOutput(){return this.repairedLines}getConstructorParams(){return[this.params]}visualize(){let{cellContents:e,reducedLines:t}=this.params;return{rects:e.map((n)=>({center:{x:n.x+n.width/2,y:n.y+n.height/2},width:n.width,height:n.height,fill:"rgba(255, 165, 0, 0.2)",stroke:"#c87000"})),lines:[...t.map((n)=>({points:[n.start,n.end],strokeColor:"rgba(180, 180, 180, 0.4)",strokeWidth:1,strokeDash:[4,4]})),...this._currentLines.map((n)=>({points:[n.start,n.end],strokeColor:"#cc5500",strokeWidth:2}))]}}},po=0.001,DL=(e,t,n=po)=>Math.abs(e.x-t.x)<n&&Math.abs(e.y-t.y)<n,eB=(e)=>`${e.x.toFixed(4)},${e.y.toFixed(4)}`,Nne=(e)=>DL(e.start,e.end),wei=(e)=>Math.abs(e.start.x-e.end.x)<po||Math.abs(e.start.y-e.end.y)<po,tW=(e,t,n,o)=>Math.min(t,o)-Math.max(e,n)>po,hye=(e)=>e.reduce((t,n)=>t+Math.abs(n.start.x-n.end.x)+Math.abs(n.start.y-n.end.y),0),Wd=(e,t)=>{if(Math.abs(e.start.x-e.end.x)<po)return Math.abs(t.x-e.start.x)<po&&t.y>=Math.min(e.start.y,e.end.y)-po&&t.y<=Math.max(e.start.y,e.end.y)+po;if(Math.abs(e.start.y-e.end.y)<po)return Math.abs(t.y-e.start.y)<po&&t.x>=Math.min(e.start.x,e.end.x)-po&&t.x<=Math.max(e.start.x,e.end.x)+po;return!1},fye=(e,t,n)=>t==="start"?{start:n,end:e.end}:{start:e.start,end:n},yye=(e,t)=>t==="start"?e.end:e.start,Qne=(e)=>({x:(e.minX+e.maxX)/2,y:(e.minY+e.maxY)/2}),pjt=(e,t,n)=>e>Math.min(t,n)+po&&e<Math.max(t,n)-po,vjt=(e)=>{let t=new Map;for(let n of e)t.set(eB(n.start),(t.get(eB(n.start))??0)+1),t.set(eB(n.end),(t.get(eB(n.end))??0)+1);return t},Tei=(e,t)=>t.some((n)=>{let o=(Math.abs(e.x-n.minX)<po||Math.abs(e.x-n.maxX)<po)&&e.y>=n.minY-po&&e.y<=n.maxY+po,i=(Math.abs(e.y-n.minY)<po||Math.abs(e.y-n.maxY)<po)&&e.x>=n.minX-po&&e.x<=n.maxX+po;return o||i}),Sze=(e,t)=>{if(Math.abs(e.start.x-e.end.x)>=po)return;if(Math.abs(e.start.y-t)<po)return"start";if(Math.abs(e.end.y-t)<po)return"end";return},Ajt=(e,t)=>{if(Math.abs(e.start.y-e.end.y)>=po)return;if(Math.abs(e.start.x-t)<po)return"start";if(Math.abs(e.end.x-t)<po)return"end";return},Dei=(e,t)=>{let n=e.start.x,o=e.start.y,i=e.end.x,r=e.end.y;if(Math.abs(n-i)<po){let s=Math.min(o,r),a=Math.max(o,r);return n>t.minX+po&&n<t.maxX-po&&a>t.minY-po&&s<t.maxY+po}if(Math.abs(o-r)<po){let s=Math.min(n,i),a=Math.max(n,i);return o>t.minY+po&&o<t.maxY-po&&a>t.minX+po&&s<t.maxX-po}return!0},Nei=(e,t)=>{let n=e.start.x,o=e.start.y,i=e.end.x,r=e.end.y;if(Math.abs(n-i)<po){let s=Math.min(o,r),a=Math.max(o,r);return(Math.abs(n-t.minX)<po||Math.abs(n-t.maxX)<po)&&tW(s,a,t.minY,t.maxY)}if(Math.abs(o-r)<po){let s=Math.min(n,i),a=Math.max(n,i);return(Math.abs(o-t.minY)<po||Math.abs(o-t.maxY)<po)&&tW(s,a,t.minX,t.maxX)}return!1},Qy=(e,t)=>e.length>0&&e.every((n)=>!Nne(n)&&wei(n)&&!t.some((o)=>Dei(n,o)||Nei(n,o))),Rei=(e,t,n)=>{let o=Qne(t),i=Qne(n);if(Math.abs(e.start.x-e.end.x)<po){let r=e.start.x,s=Math.min(e.start.y,e.end.y),a=Math.max(e.start.y,e.end.y);return pjt(r,o.x,i.x)&&tW(s,a,t.minY,t.maxY)&&tW(s,a,n.minY,n.maxY)}if(Math.abs(e.start.y-e.end.y)<po){let r=e.start.y,s=Math.min(e.start.x,e.end.x),a=Math.max(e.start.x,e.end.x);return pjt(r,o.y,i.y)&&tW(s,a,t.minX,t.maxX)&&tW(s,a,n.minX,n.maxX)}return!1},tB=(e,t)=>{let n=new Set;for(let o=0;o<t.length;o++){let i=t[o];if(!i)continue;for(let r=o+1;r<t.length;r++){let s=t[r];if(!s)continue;if(e.some((a)=>Rei(a,i,s)))n.add(`${o}:${r}`)}}return n},Fne=(e,t,n)=>{let o=tB(e,t);return[...n].every((i)=>o.has(i))},Qei=(e,t)=>{let n=new Set,o=new Set;for(let i of t)n.add(i.minX),n.add(i.maxX),n.add(Qne(i).x),o.add(i.minY),o.add(i.maxY),o.add(Qne(i).y);for(let i of e)n.add(i.start.x),n.add(i.end.x),o.add(i.start.y),o.add(i.end.y);return{xs:[...n].sort((i,r)=>i-r),ys:[...o].sort((i,r)=>i-r)}},kei=(e,t,n,o)=>e.some((i)=>{if(Math.abs(i.start.x-i.end.x)>=po)return!1;if(Math.abs(i.start.x-t)>=po)return!1;let r=Math.min(i.start.y,i.end.y),s=Math.max(i.start.y,i.end.y);return n>=r-po&&o<=s+po}),Lei=(e,t,n,o)=>e.some((i)=>{if(Math.abs(i.start.y-i.end.y)>=po)return!1;if(Math.abs(i.start.y-t)>=po)return!1;let r=Math.min(i.start.x,i.end.x),s=Math.max(i.start.x,i.end.x);return n>=r-po&&o<=s+po}),Fei=(e,t)=>{let{xs:n,ys:o}=Qei(e,t),i=n.length-1,r=o.length-1,s=new Map,a=(l,d)=>`${l}:${d}`,c=0;for(let l=0;l<i;l++)for(let d=0;d<r;d++){let u=a(l,d);if(s.has(u))continue;let h=[{x:l,y:d}];s.set(u,c);while(h.length>0){let A=h.pop();if(!A)continue;let m=[{x:A.x-1,y:A.y},{x:A.x+1,y:A.y},{x:A.x,y:A.y-1},{x:A.x,y:A.y+1}];for(let p of m){if(p.x<0||p.x>=i||p.y<0||p.y>=r)continue;let g=a(p.x,p.y);if(s.has(g))continue;let _=!1;if(p.x!==A.x){let f=n[Math.max(p.x,A.x)],y=o[A.y],x=o[A.y+1];if(f===void 0||y===void 0||x===void 0)continue;_=kei(e,f,y,x)}else{let f=o[Math.max(p.y,A.y)],y=n[A.x],x=n[A.x+1];if(f===void 0||y===void 0||x===void 0)continue;_=Lei(e,f,y,x)}if(_)continue;s.set(g,c),h.push(p)}}c++}return t.map((l)=>{let d=Qne(l),u=n.findIndex((A,m)=>m+1<n.length&&d.x>=A-po&&d.x<=(n[m+1]??A)+po),h=o.findIndex((A,m)=>m+1<o.length&&d.y>=A-po&&d.y<=(o[m+1]??A)+po);return s.get(a(u,h))??-1})},JE=(e,t)=>{let n=Fei(e,t),o=0;for(let i=0;i<n.length;i++)for(let r=i+1;r<n.length;r++)if(n[i]===n[r])o++;return o},PS=(e)=>{let t=new Map,n=e.map((s)=>[s.start,s.end]),o=(s,a)=>{let c=eB(s),l=eB(a);if(!t.has(c))t.set(c,new Set);if(!t.has(l))t.set(l,new Set);t.get(c)?.add(l),t.get(l)?.add(c)};for(let s=0;s<e.length;s++){let a=e[s];if(!a||Nne(a))continue;for(let c=s+1;c<e.length;c++){let l=e[c];if(!l||Nne(l))continue;let d=Math.abs(a.start.x-a.end.x)<po,u=Math.abs(a.start.y-a.end.y)<po,h=Math.abs(l.start.x-l.end.x)<po,A=Math.abs(l.start.y-l.end.y)<po;if(d&&A){let m={x:a.start.x,y:l.start.y};if(Wd(a,m)&&Wd(l,m))n[s]?.push(m),n[c]?.push(m)}if(u&&h){let m={x:l.start.x,y:a.start.y};if(Wd(a,m)&&Wd(l,m))n[s]?.push(m),n[c]?.push(m)}}}for(let s=0;s<e.length;s++){let a=e[s];if(!a||Nne(a))continue;let c=[...new Map(n[s]?.map((l)=>[eB(l),l]))].map(([,l])=>l).sort((l,d)=>Math.abs(a.start.x-a.end.x)<po?l.y-d.y:l.x-d.x);for(let l=0;l+1<c.length;l++){let d=c[l],u=c[l+1];if(d&&u&&!DL(d,u))o(d,u)}}let i=0,r=new Set;for(let s of t.keys()){if(r.has(s))continue;i++;let a=[s];r.add(s);while(a.length>0){let c=a.pop();if(!c)continue;for(let l of t.get(c)??[]){if(r.has(l))continue;r.add(l),a.push(l)}}}return i},Pze=(e,t,n)=>{let o=e,i=!0;while(i){i=!1;let r=vjt(o);for(let s=0;s<o.length;s++){let a=o[s];if(!a)continue;for(let c of["start","end"]){let l=a[c];if(r.get(eB(l))!==1)continue;let d=[],u=Math.abs(a.start.x-a.end.x)<po,h=Math.abs(a.start.y-a.end.y)<po;for(let m=0;m<o.length;m++){if(s===m)continue;let p=o[m];if(!p)continue;if(u&&Math.abs(p.start.y-p.end.y)<po){let g={x:a.start.x,y:p.start.y};if(Wd(p,g))d.push(g)}if(h&&Math.abs(p.start.x-p.end.x)<po){let g={x:p.start.x,y:a.start.y};if(Wd(p,g))d.push(g)}}let A=d.filter((m)=>!DL(m,l)).map((m)=>({point:m,line:fye(a,c,m)})).filter(({line:m})=>hye([m])>hye([a])+po).filter(({line:m})=>!n?.preserveOriginalSpan||Wd(m,l)).filter(({line:m})=>Qy([m],t)).sort((m,p)=>hye([m.line])-hye([p.line])||JSON.stringify(m.point).localeCompare(JSON.stringify(p.point))).at(0);if(!A)continue;o=o.map((m,p)=>p===s?A.line:m),i=!0;break}if(i)break}}return o},Hei=(e,t)=>{let n=[],o=Math.abs(e.start.x-e.end.x)<po,i=Math.abs(e.start.y-e.end.y)<po;for(let r of t){if(r===e)continue;let s=Math.abs(r.start.x-r.end.x)<po,a=Math.abs(r.start.y-r.end.y)<po;if(o&&a){let c={x:e.start.x,y:r.start.y};if(Wd(e,c)&&Wd(r,c))n.push(c)}if(i&&s){let c={x:r.start.x,y:e.start.y};if(Wd(e,c)&&Wd(r,c))n.push(c)}}return n},_jt=(e,t,n)=>{let o=e,i=!0;while(i){i=!1;let r=vjt(o),s=PS(o);for(let a=0;a<o.length;a++){let c=o[a];if(!c)continue;let l=Hei(c,o).filter((d)=>!DL(d,c.start)&&!DL(d,c.end));if(l.length===0)continue;for(let d of["start","end"]){let u=c[d];if(r.get(eB(u))!==1)continue;if(Tei(u,t))continue;let h=l.map((p)=>({point:p,distance:Math.abs(p.x-u.x)+Math.abs(p.y-u.y)})).sort((p,g)=>p.distance-g.distance).at(0);if(!h)continue;let A=fye(c,d,h.point);if(!Qy([A],t))continue;let m=o.map((p,g)=>g===a?A:p);if(PS(m)>s)continue;if(n&&!Fne(m,t,n))continue;o=m,i=!0;break}if(i)break}}return o},Oei=(e)=>{let{start:t,end:n}=e;if(t.y===n.y&&t.x>n.x)[t,n]=[{x:n.x,y:t.y},{x:t.x,y:n.y}];else if(t.x===n.x&&t.y>n.y)[t,n]=[{x:t.x,y:n.y},{x:n.x,y:t.y}];return{start:t,end:n}},kne=(e)=>{if(!e||e.length===0)return[];let t=e.map(Oei),n=[],o=[];for(let a of t)if(a.start.y===a.end.y)n.push(a);else if(a.start.x===a.end.x)o.push(a);let i=[],r=new Map;for(let a of n){let c=r.get(a.start.y)??[];c.push(a),r.set(a.start.y,c)}for(let[,a]of r){a.sort((l,d)=>l.start.x-d.start.x);let c;for(let l of a){if(!c){c={...l};continue}if(l.start.x<=c.end.x)c.end.x=Math.max(c.end.x,l.end.x);else i.push(c),c={...l}}if(c)i.push(c)}let s=new Map;for(let a of o){let c=s.get(a.start.x)??[];c.push(a),s.set(a.start.x,c)}for(let[,a]of s){a.sort((l,d)=>l.start.y-d.start.y);let c;for(let l of a){if(!c){c={...l};continue}if(l.start.y<=c.end.y)c.end.y=Math.max(c.end.y,l.end.y);else i.push(c),c={...l}}if(c)i.push(c)}return i},zei=(e,t)=>{let n=e,o=!0,i=(r)=>{let s=tB(n,t),a=tB(r,t);return[...s].every((c)=>a.has(c))};while(o){o=!1;let r=JE(n,t);for(let a=0;a<n.length;a++){let c=n[a];if(!c||Math.abs(c.start.y-c.end.y)>=po)continue;let l=c.start.y;for(let d=0;d<n.length;d++){if(d===a)continue;let u=n[d];if(!u)continue;let h=Sze(u,l);if(!h)continue;if(!Wd(c,{x:u.start.x,y:l}))continue;for(let A=d+1;A<n.length;A++){if(A===a)continue;let m=n[A];if(!m)continue;let p=Sze(m,l);if(!p)continue;if(!Wd(c,{x:m.start.x,y:l}))continue;let g=yye(u,h),_=yye(m,p);if((g.y-l)*(_.y-l)>=-po)continue;let f=(u.start.x+m.start.x)/2,y={start:{x:f,y:Math.min(g.y,_.y)},end:{x:f,y:Math.max(g.y,_.y)}};if(!Qy([y],t))continue;let x=n.filter((C,I)=>I!==d&&I!==A).concat(y);if(!Qy(x,t))continue;if(!i(x))continue;if(JE(x,t)>r)continue;n=kne(x),o=!0;break}if(o)break}if(o)break}if(o)continue;let s=PS(n);for(let a=0;a<n.length;a++){let c=n[a];if(!c||Math.abs(c.start.x-c.end.x)>=po)continue;for(let l=a+1;l<n.length;l++){let d=n[l];if(!d||Math.abs(d.start.x-d.end.x)>=po)continue;if(Math.abs(c.start.x-d.start.x)<po)continue;let u=Math.max(Math.min(c.start.y,c.end.y),Math.min(d.start.y,d.end.y)),h=Math.min(Math.max(c.start.y,c.end.y),Math.max(d.start.y,d.end.y));if(h-u<-po)continue;if(!n.some((_,f)=>{if(f===a||f===l)return!1;if(Math.abs(_.start.y-_.end.y)>=po)return!1;let y=_.start.y;if(y<u-po||y>h+po)return!1;return Wd(_,{x:c.start.x,y})&&Wd(_,{x:d.start.x,y})}))continue;let m=Math.min(c.start.y,c.end.y,d.start.y,d.end.y),p=Math.max(c.start.y,c.end.y,d.start.y,d.end.y),g=[c.start.x,d.start.x].map((_)=>({start:{x:_,y:m},end:{x:_,y:p}})).filter((_)=>Qy([_],t));for(let _ of g){let f=n.filter((y,x)=>x!==a&&x!==l).concat(_);if(!Qy(f,t))continue;if(!i(f))continue;if(PS(f)>s)continue;if(JE(f,t)>r)continue;for(let y=0;y<f.length;){let x=f[y];if(!x||Math.abs(x.start.y-x.end.y)>=po||x.start.y<u-po||x.start.y>h+po||!Wd(x,{x:c.start.x,y:x.start.y})||!Wd(x,{x:d.start.x,y:x.start.y})){y++;continue}let C=f.filter((I,b)=>b!==y);if(Qy(C,t)&&i(C)&&PS(C)<=s&&JE(C,t)<=r){f=C;continue}y++}n=kne(f),o=!0;break}if(o)break}if(o)break}}return n},gjt=(e,t)=>{let n=e,o=!0;while(o){o=!1;let i=JE(n,t),r=tB(n,t);for(let s=0;s<n.length;s++){let a=n[s];if(!a||Math.abs(a.start.x-a.end.x)>=po)continue;let c=a.start.x;for(let l=0;l<n.length;l++){if(l===s)continue;let d=n[l];if(!d)continue;if(!Ajt(d,c))continue;if(!Wd(a,{x:c,y:d.start.y}))continue;for(let u=l+1;u<n.length;u++){if(u===s)continue;let h=n[u];if(!h)continue;if(!Wd(h,{x:c,y:h.start.y}))continue;if(!Wd(a,{x:c,y:h.start.y}))continue;if(Math.abs(d.start.y-h.start.y)<po)continue;for(let[A,m]of[[d,h],[h,d]]){let p=Sze(a,A.start.y);if(!p)continue;let g=Ajt(A,c);if(!g)continue;let _=yye(A,g),f=Math.min(m.start.x,m.end.x),y=Math.max(m.start.x,m.end.x);if(_.x<c-po&&y<=c+po)continue;if(_.x>c+po&&f>=c-po)continue;let x=yye(a,p);for(let C of[A.start.y,m.start.y]){let I={start:{x:Math.min(_.x,f),y:C},end:{x:Math.max(_.x,y),y:C}};if(!Qy([I],t))continue;let b={start:x,end:{x:c,y:C}};if(Nne(b))continue;if(!Qy([b],t))continue;let P=n.filter((E,B)=>B!==l&&B!==u&&B!==s).concat(I,b);if(P=Pze(P,t,{preserveOriginalSpan:!0}),!Qy(P,t))continue;if(!Fne(P,t,r))continue;if(JE(P,t)>i)continue;n=kne(P),o=!0;break}if(o)break}if(o)break}if(o)break}if(o)break}}return n},fjt=(e)=>Math.abs(e.start.y-e.end.y)<po,yjt=(e)=>Math.abs(e.start.x-e.end.x)<po,Ejt=(e,t)=>{let n=tB(e,t),o=JE(e,t),i=PS(e);for(let r=0;r<e.length;r++){let s=e[r];if(!s||!fjt(s))continue;for(let a=r+1;a<e.length;a++){let c=e[a];if(!c||!fjt(c))continue;let l=Math.min(s.start.y,c.start.y),d=Math.max(s.start.y,c.start.y);if(d-l<po)continue;let u=Math.min(s.start.x,s.end.x),h=Math.max(s.start.x,s.end.x),A=Math.min(c.start.x,c.end.x),m=Math.max(c.start.x,c.end.x),p=Math.max(u,A),g=Math.min(h,m);if(g<p-po)continue;if(!e.some((b)=>{if(!yjt(b))return!1;if(g-p<po){let E=Math.min(b.start.y,b.end.y),B=Math.max(b.start.y,b.end.y);if(E>=l-po||B<=d+po)return!1}let P=b.start.x;return P>=p-po&&P<=g+po&&Wd(b,{x:P,y:l})&&Wd(b,{x:P,y:d})}))continue;let f=Math.min(u,A),y=Math.max(h,m),x=new Set([l,d]);for(let b of t){if(b.maxX<=f+po||b.minX>=y-po)continue;if(b.minY>l&&b.minY<d)x.add(b.minY);if(b.maxY>l&&b.maxY<d)x.add(b.maxY)}let C=[...x].sort((b,P)=>b-P),I=[];if(g-p<po)I.push(l,d);else for(let b=1;b<C.length;b++){let P=C[b-1],E=C[b];if(P===void 0||E===void 0)continue;I.push((P+E)/2)}for(let b of I){let P={start:{x:f,y:b},end:{x:y,y:b}};if(!Qy([P],t))continue;let E=[];for(let B=0;B<e.length;B++){if(B===r||B===a)continue;let w=e[B];if(!w)continue;if(!yjt(w)||w.start.x<f||w.start.x>y){E.push(w);continue}let T=w.start.x;if(!(Wd(w,{x:T,y:l})||Wd(w,{x:T,y:d}))){E.push(w);continue}let N=w.start.y>=l&&w.start.y<=d,F=w.end.y>=l&&w.end.y<=d;if(N&&F)continue;if(N)E.push({start:{x:T,y:b},end:w.end});else if(F)E.push({start:w.start,end:{x:T,y:b}});else E.push(w)}if(E.push(P),!Qy(E,t))continue;if(!Fne(E,t,n))continue;if(JE(E,t)>o)continue;if(PS(E)>i)continue;return Ejt(kne(E),t)}}}return e},Gei=(e,t)=>{let n=e,o=!0;while(o){o=!1;let i=PS(n),r=tB(n,t);for(let s=0;s<n.length;s++){let a=n[s];if(!a)continue;let c=Math.abs(a.start.y-a.end.y)<po,l=Math.abs(a.start.x-a.end.x)<po;if(!c&&!l)continue;for(let d=0;d<n.length;d++){if(s===d)continue;let u=n[d];if(!u)continue;let h=Math.abs(u.start.y-u.end.y)<po,A=Math.abs(u.start.x-u.end.x)<po;if(c!==h)continue;if(l!==A)continue;let m=[a.start,a.end],p;if(c)p=m.map((y)=>({x:y.x,y:u.start.y}));else p=m.map((y)=>({x:u.start.x,y:y.y}));if(!p.every((y)=>Wd(u,y)))continue;let g=new Map,_=!0;for(let y=0;y<m.length;y++){let x=m[y],C=p[y];if(!x||!C){_=!1;break}let I=n.findIndex((w,T)=>{if(T===s||T===d)return!1;let Q=Math.abs(w.start.y-w.end.y)<po,N=Math.abs(w.start.x-w.end.x)<po;return(c&&N||l&&Q)&&Wd(w,x)});if(I===-1)continue;let b=n[I];if(!b){_=!1;break}let P=DL(b.start,x),E=DL(b.end,x);if(!P&&!E&&Wd(b,C))continue;if(!P&&!E){_=!1;break}let B;if(P)B=fye(b,"start",C);else B=fye(b,"end",C);if(!Qy([B],t)){_=!1;break}g.set(I,B)}if(!_)continue;let f=n.map((y,x)=>g.get(x)??y).filter((y,x)=>x!==s);if(PS(f)>i)continue;if(!Fne(f,t,r))continue;n=f,o=!0;break}if(o)break}}return n},Yei=(e,t)=>{let n=e,o=!0;while(o){o=!1;let i=tB(n,t),r=JE(n,t),s=PS(n);for(let a=0;a<n.length;a++){let c=n.filter((l,d)=>d!==a);if(!Qy(c,t))continue;if(!Fne(c,t,i))continue;if(JE(c,t)>r)continue;if(PS(c)>s)continue;n=c,o=!0;break}}return n},Mjt=((e)=>(e[e.ConnectDanglingEndpoints=0]="ConnectDanglingEndpoints",e[e.CollapseVerticalDoglegs=1]="CollapseVerticalDoglegs",e[e.CollapseHorizontalSteps=2]="CollapseHorizontalSteps",e[e.RemoveRedundantParallelBridges=3]="RemoveRedundantParallelBridges",e[e.ReconnectDanglingEndpoints=4]="ReconnectDanglingEndpoints",e[e.TrimDanglingOverhangs=5]="TrimDanglingOverhangs",e[e.RemoveRedundantSeparators=6]="RemoveRedundantSeparators",e[e.MergeAlignedSegments=7]="MergeAlignedSegments",e))(Mjt||{}),Vei=class extends Zn{constructor(e){super();this.params=e,this._inputRects=e.cellContents.map((t)=>({minX:t.x,minY:t.y,maxX:t.x+t.width,maxY:t.y+t.height})),this._currentLines=e.repairedLines}params;refinedLines=[];_stage=0;_currentLines=[];_inputRects;_step(){let e=this._inputRects;switch(this._stage){case 0:this._currentLines=Pze(this._currentLines,e,{preserveOriginalSpan:!0});break;case 1:this._currentLines=zei(this._currentLines,e);break;case 2:this._currentLines=gjt(this._currentLines,e);break;case 3:this._currentLines=Gei(this._currentLines,e);break;case 4:this._currentLines=Pze(this._currentLines,e,{preserveOriginalSpan:!0});break;case 5:this._currentLines=_jt(this._currentLines,e,tB(this._currentLines,e));break;case 6:this._currentLines=Yei(this._currentLines,e);break;case 7:this._currentLines=kne(this._currentLines),this._currentLines=gjt(this._currentLines,e),this._currentLines=Ejt(this._currentLines,e),this._currentLines=_jt(this._currentLines,e,tB(this._currentLines,e)),this.refinedLines=this._currentLines,this.solved=!0;break}let t=this.getNextStage(this._stage);if(t)this._stage=t}getNextStage(e){let t=Object.values(Mjt);return t[t.indexOf(e)+1]}getOutput(){return this.refinedLines}getConstructorParams(){return[this.params]}visualize(){let{cellContents:e,repairedLines:t}=this.params;return{rects:e.map((n)=>({center:{x:n.x+n.width/2,y:n.y+n.height/2},width:n.width,height:n.height,fill:"rgba(255, 165, 0, 0.2)",stroke:"#c87000"})),lines:[...t.map((n)=>({points:[n.start,n.end],strokeColor:"rgba(180, 180, 180, 0.4)",strokeWidth:1,strokeDash:[4,4]})),...this._currentLines.map((n)=>({points:[n.start,n.end],strokeColor:"#000000",strokeWidth:3}))]}}},Uei=class extends AI{computeMidlinesSolver;computeIntersectionsSolver;computeSegmentsSolver;buildGridSolver;mergeGridSolver;buildOutlineSolver;reduceBoundaryLinesSolver;repairBoundaryLinesSolver;refineBoundaryLinesSolver;pipelineDef=[cr("computeMidlinesSolver",LZo,(e)=>[{cellContents:e.inputProblem.cellContents,containerWidth:e.inputProblem.containerWidth,containerHeight:e.inputProblem.containerHeight}]),cr("computeIntersectionsSolver",HZo,(e)=>[{midlines:e.getSolver("computeMidlinesSolver").midlines}]),cr("computeSegmentsSolver",VZo,(e)=>[{midlines:e.getSolver("computeMidlinesSolver").midlines,intersections:e.getSolver("computeIntersectionsSolver").intersections,cellContents:e.inputProblem.cellContents}]),cr("buildGridSolver",KZo,(e)=>[{allSegments:e.getSolver("computeSegmentsSolver").allSegments,cellContents:e.inputProblem.cellContents,containerWidth:e.inputProblem.containerWidth,containerHeight:e.inputProblem.containerHeight}]),cr("mergeGridSolver",$Zo,(e)=>[{validSegments:e.getSolver("buildGridSolver").validSegments,gridRects:e.getSolver("buildGridSolver").gridRects,cellContainingRects:e.getSolver("buildGridSolver").cellContainingRects,cellContents:e.inputProblem.cellContents}]),cr("buildOutlineSolver",eei,(e)=>[{groupedRects:e.getSolver("mergeGridSolver").groupedRects}]),cr("reduceBoundaryLinesSolver",gei,(e)=>[{outlineLines:e.getSolver("buildOutlineSolver").outlineLines,cellContents:e.inputProblem.cellContents,offsetX:e.inputProblem.offsetX,offsetY:e.inputProblem.offsetY}]),cr("repairBoundaryLinesSolver",Bei,(e)=>[{reducedLines:e.getSolver("reduceBoundaryLinesSolver").reducedLines,originalLines:e.getSolver("reduceBoundaryLinesSolver").mergedOriginalLines,cellContents:e.inputProblem.cellContents}]),cr("refineBoundaryLinesSolver",Vei,(e)=>[{repairedLines:e.getSolver("repairBoundaryLinesSolver").repairedLines,cellContents:e.inputProblem.cellContents}])];finalVisualize(){let e=this.getSolver("refineBoundaryLinesSolver"),t=this.getSolver("buildOutlineSolver"),n=e?.refinedLines??t?.outlineLines;if(!n)return null;return{rects:this.inputProblem.cellContents.map((o)=>({center:{x:o.x+o.width/2,y:o.y+o.height/2},width:o.width,height:o.height,fill:"rgba(255, 165, 0, 0.3)",stroke:"#c87000",label:o.cellId})),lines:n.map((o)=>({points:[o.start,o.end],strokeColor:"#000000",strokeWidth:3}))}}initialVisualize(){return{rects:this.inputProblem.cellContents.map((e)=>({center:{x:e.x+e.width/2,y:e.y+e.height/2},width:e.width,height:e.height,fill:"rgba(255, 165, 0, 0.3)",stroke:"#c87000",label:e.cellId}))}}getConstructorParams(){return[this.inputProblem]}getOutput(){return{midlines:this.getSolver("computeMidlinesSolver")?.midlines??[],allSegments:this.getSolver("computeSegmentsSolver")?.allSegments??[],validSegments:this.getSolver("buildGridSolver")?.validSegments??[],mergedRectGroups:this.getSolver("mergeGridSolver")?.mergedRectGroups??[],cellRects:this.inputProblem.cellContents,gridRects:this.getSolver("buildGridSolver")?.gridRects??[],outlineLines:this.getSolver("refineBoundaryLinesSolver")?.refinedLines??this.getSolver("buildOutlineSolver")?.outlineLines??[]}}},Wei=(e,t,n)=>({...e,start:{x:e.start.x+t,y:e.start.y+n},end:{x:e.end.x+t,y:e.end.y+n}}),Cye=(e)=>{let t=1/0,n=1/0,o=-1/0,i=-1/0;for(let r of e)t=Math.min(t,r.minX),n=Math.min(n,r.minY),o=Math.max(o,r.maxX),i=Math.max(i,r.maxY);return{minX:t,minY:n,maxX:o,maxY:i}},Xei=(e)=>{let{start:t,end:n}=e;if(t.y===n.y&&t.x>n.x)[t,n]=[{x:n.x,y:t.y},{x:t.x,y:n.y}];else if(t.x===n.x&&t.y>n.y)[t,n]=[{x:t.x,y:n.y},{x:n.x,y:t.y}];return{...e,start:t,end:n}},Kei=(e)=>{if(!e||e.length===0)return[];let t=e.map(Xei),n=[],o=[];for(let a of t)if(a.start.y===a.end.y)n.push(a);else if(a.start.x===a.end.x)o.push(a);let i=[],r=new Map;for(let a of n){let c=r.get(a.start.y)??[];c.push(a),r.set(a.start.y,c)}for(let[,a]of r){a.sort((l,d)=>l.start.x-d.start.x);let c;for(let l of a){if(!c){c={...l};continue}if(l.start.x<=c.end.x)c.end.x=Math.max(c.end.x,l.end.x);else i.push(c),c={...l}}if(c)i.push(c)}let s=new Map;for(let a of o){let c=s.get(a.start.x)??[];c.push(a),s.set(a.start.x,c)}for(let[,a]of s){a.sort((l,d)=>l.start.y-d.start.y);let c;for(let l of a){if(!c){c={...l};continue}if(l.start.y<=c.end.y)c.end.y=Math.max(c.end.y,l.end.y);else i.push(c),c={...l}}if(c)i.push(c)}return i};var mye=(e,t)=>e.x!==t.x?e.x-t.x:e.y-t.y,jei=(e,t,n)=>{let o=e.map((A,m)=>({...A,cellId:`cell-${m}`})),i=Cye(o.map((A)=>({minX:A.x,minY:A.y,maxX:A.x+A.width,maxY:A.y+A.height}))),{minX:r,minY:s}=i;t??=i.maxX-i.minX,n??=i.maxY-i.minY;let a=o.map((A)=>({...A,x:A.x-r,y:A.y-s})),c=new Uei({cellContents:a,containerWidth:t,containerHeight:n,offsetX:r,offsetY:s});c.solve();let l=c.getOutput(),d=(A)=>Wei(A,r,s),u=l.outlineLines.map(d);return Kei(u).map((A)=>({start:mye(A.start,A.end)<0?A.start:A.end,end:mye(A.start,A.end)<0?A.end:A.start})).sort((A,m)=>mye(A.start,m.start)||mye(A.end,m.end))};function qei(e,t){if(!Number.isFinite(t)||t<0)throw Error("cellMargin must be finite and nonnegative");if(t===0||e.length<2)return e;let n=e.map((r)=>({...r,minX:r.minX-t,maxX:r.maxX+t,minY:r.minY-t,maxY:r.maxY+t})),o=[n[0]],i=n.slice(1);while(i.length>0){let r=i.findIndex((s)=>o.some((a)=>a.minX<=s.maxX&&a.maxX>=s.minX&&a.minY<=s.maxY&&a.maxY>=s.minY));if(r<0)return n;o.push(...i.splice(r,1))}return e}var Bjt=(e,t={})=>jei(qei(e,t.cellMargin??0).map((n)=>({x:n.minX,y:n.minY,width:n.maxX-n.minX,height:n.maxY-n.minY})));Gt();Yo();pn();pn();pn();var gpn=Rt(lo(),1);var Hne=Rt(_Te(),1),Iye=Rt(lo(),1),xT=(e)=>{if(Array.isArray(e)&&e.length===1)return e[0];return e};function wjt(e,t={}){let n=(i,r,s,a,c)=>{let l=(d)=>{if(d==null||typeof d==="boolean")return[];if(Array.isArray(d))return d.flatMap(l);if(!Iye.default.isValidElement(d))throw Error("Expected JSCAD elements, not text or arbitrary objects");let u=n(d.type,d.props,[],a,c);return Array.isArray(u)?u.flat(1/0):u==null?[]:[u]};if(i===Iye.default.Fragment)return l(r.children);if(typeof i==="function")return l(i(r));switch(i){case"cube":return e.primitives.cube({size:r.size});case"sphere":return e.primitives.sphere({radius:r.radius,segments:r.segments});case"cuboid":return e.primitives.cuboid({size:r.size});case"roundedCuboid":return e.primitives.roundedCuboid({size:r.size,roundRadius:r.roundRadius});case"geodesicSphere":return e.primitives.geodesicSphere({radius:r.radius,frequency:r.frequency});case"ellipsoid":return e.primitives.ellipsoid({radius:r.radius});case"cylinder":return e.primitives.cylinder({radius:r.radius,height:r.height});case"roundedCylinder":return e.primitives.roundedCylinder({radius:r.radius,height:r.height,roundRadius:r.roundRadius});case"cylinderElliptic":return e.primitives.cylinderElliptic({radius:r.radius,height:r.height,startRadius:r.startRadius,endRadius:r.endRadius,startAngle:r.startAngle,endAngle:r.endAngle});case"torus":return e.primitives.torus({innerRadius:r.innerRadius,outerRadius:r.outerRadius,innerSegments:r.innerSegments,outerSegments:r.outerSegments,innerRotation:r.innerRotation,outerRotation:r.outerRotation,startAngle:r.startAngle});case"jscadPolygon":return e.primitives.polygon({points:r.points});case"extrudeLinear":{let{children:d,...u}=r,h=l(d);return e.extrusions.extrudeLinear({height:u.height},xT(h))}case"extrudeRotate":{let{children:d,...u}=r,h=l(d);return e.extrusions.extrudeRotate({angle:u.angle},xT(h))}case"extrudeRectangular":{let{children:d,...u}=r,h=l(d);return e.extrusions.extrudeRectangular({size:u.size,height:u.height},xT(h))}case"extrudeHelical":{let{children:d,...u}=r,h=l(d);return e.extrusions.extrudeHelical({height:u.height,angle:u.angle,startAngle:u.startAngle||0,pitch:u.pitch||0,endOffset:u.endOffset||0,segmetsPerRotation:u.segmetsPerRotation||32},xT(h))}case"extrudeFromSlices":{let{baseSlice:d,...u}=r;return e.extrusions.extrudeFromSlices(u,d)}case"project":{let{children:d,...u}=r,h=l(d);return e.extrusions.project({axis:u.axis,origin:u.origin},xT(h))}case"colorize":{let{children:d,...u}=r,h=l(d),A=u.color;return xT(h.map((p)=>e.colors.colorize(A,p)))}case"custom":{let{geometry:d}=r;return d}case"union":{let d=l(r.children);if(d.length===0)return[];if(d.length===1)return d[0];return e.booleans.union(...d)}case"subtract":{let d=Iye.default.Children.toArray(r.children);if(d.length<2)throw Error("Subtract must have at least one base component and one component to subtract.");let u=l(d[0]);if(u.length!==1)throw Error("Subtract requires exactly one solid base");let h=d.slice(1).flatMap(l);return h.length?e.booleans.subtract(u[0],...h):u[0]}case"translate":{let{args:d,children:u}=r,h=l(u);return xT(h.map((A)=>e.transforms.translate(d,A)))}case"rotate":{let{children:d,...u}=r,h=l(d);return xT(h.map((A)=>e.transforms.rotate(u.angles,A)))}case"hull":case"hullChain":{let d=l(r.children);if(!d.length)return[];if(d.length===1)return d[0];return e.hulls[i](...d)}case"rectangle":{let{size:d,name:u,reference:h}=r;if(h&&!u?.trim())throw Error("Reference rectangles require a nonblank name");if(h&&!t.preserveReferences)return[];let A=e.primitives.rectangle({size:d});return t.preserveReferences&&(u!==void 0||h!==void 0)?{...A,...u!==void 0?{name:u}:{},...h!==void 0?{reference:h}:{}}:A}case"circle":{let{radius:d}=r;return e.primitives.circle({radius:d})}default:throw Error(`Unknown element type: ${i}`)}};return{now:Date.now,supportsMutation:!0,supportsPersistence:!1,supportsHydration:!1,currentUpdatePriority:Hne.DefaultEventPriority,createInstance:n,createTextInstance(){throw Error("Text elements are not supported in JSCAD")},appendInitialChild(i,r){return i},appendChild(i,r){return i},removeChild(i,r){return i},appendChildToContainer(i,r){i.push(r)},removeChildFromContainer(i,r){let s=i.indexOf(r);if(s!==-1)i.splice(s,1)},prepareUpdate(){return!0},commitUpdate(i,r,s,a,c){let l=n(s,c,i,{},null);for(let d in i)delete i[d];Object.assign(i,l)},finalizeInitialChildren(){return!1},prepareForCommit(){return null},resetAfterCommit(){},getPublicInstance(i){return i},getRootHostContext(i){return e},getChildHostContext(i,r,s){return i},shouldSetTextContent(){return!1},clearContainer(){},scheduleTimeout:setTimeout,cancelTimeout:clearTimeout,noTimeout:-1,isPrimaryRenderer:!0,getCurrentEventPriority:()=>99,getInstanceFromNode:()=>null,beforeActiveInstanceBlur:()=>{},afterActiveInstanceBlur:()=>{},prepareScopeUpdate:()=>{},getInstanceFromScope:()=>null,detachDeletedInstance:()=>{},resolveUpdatePriority:()=>Hne.DiscreteEventPriority,setCurrentUpdatePriority:(i)=>{},getCurrentUpdatePriority:()=>Hne.DefaultEventPriority,maySuspendCommit(){return!1}}}var yti=Rt(Ai(),1),nqt=Rt($jt(),1),oqt=Rt(Ai(),1),rqt=Rt(Ai(),1),vye=Rt(Ai(),1),Eye=Rt(Ai(),1),aqt=Rt(Ai(),1),cqt=Rt(Ai(),1),Sti=Rt(Ai(),1),lqt=Rt(Ai(),1),Mye=Rt(Ai(),1),uqt=Rt(Ai(),1),hqt=Rt(Ai(),1),mqt=Rt(Ai(),1),pqt=Rt(Ai(),1),Aqt=Rt(Ai(),1),_qt=Rt(Ai(),1),gqt=Rt(Ai(),1),fqt=Rt(Ai(),1),yqt=Rt(Ai(),1),xqt=Rt(Ai(),1),Xti=Rt(Ai(),1),Kti=Rt(Ai(),1),jti=Rt(Ai(),1),Cqt=Rt(Ai(),1),Iqt=Rt(Ai(),1),bqt=Rt(Ai(),1),Sqt=Rt(Ai(),1),Pqt=Rt(Ai(),1),sni=Rt(Ai(),1),vqt=Rt(Ai(),1),Eqt=Rt(lo(),1),Bye=Rt(tqt(),1);function iqt({color:e,children:t}){if(!Array.isArray(e))e=nqt.default(e).rgb().array().map((n)=>n/255);return oqt.jsx("colorize",{color:e,children:t})}var Nze=(e)=>{if(!e)return null;if(Array.isArray(e))return e;return[e.x,e.y,e.z]};function sqt({offset:e,center:t,x:n,y:o,z:i,children:r}){let s=Nze(e),a=Nze(t),c=[s?.[0]||a?.[0]||n||0,s?.[1]||a?.[1]||o||0,s?.[2]||a?.[2]||i||0];return rqt.jsx("translate",{args:c,children:r})}function Gp(e){let t=(n)=>{let{color:o,...i}=n;if(!o)return vye.jsx(e,{...i});return vye.jsx(iqt,{color:o,children:vye.jsx(e,{...i})})};return t.displayName=`WithColor(${e.displayName||e.name||"Component"})`,t}function Yp(e){let t=(n)=>{let{center:o,offset:i,...r}=n;if(!o&&!i)return Eye.jsx(e,{...r});return Eye.jsx(sqt,{offset:o||i,children:Eye.jsx(e,{...r})})};return t.displayName=`WithOffset(${e.displayName||e.name||"Component"})`,t}var xti=({size:e})=>aqt.jsx("cube",{size:e}),Cti=Yp(Gp(xti)),Iti=({size:e})=>cqt.jsx("cuboid",{size:e}),bti=Yp(Gp(Iti));var Vne=(e)=>{if(typeof e==="string"){let t=e.replace(/[^\d.-]/g,""),n=parseFloat(t);if(!isNaN(n)){if(e.toLowerCase().includes("deg"))return n*Math.PI/180;return n}throw Error(`Invalid rotation value: ${e}`)}return e},Rze=(e)=>{if(typeof e==="string"||typeof e==="number")return[0,0,Vne(e)];else if(Array.isArray(e))return e.map(Vne);else if(e&&typeof e==="object")return[Vne(e.x),Vne(e.y),Vne(e.z)];return[0,0,0]},Pti=({rotation:e,angles:t,children:n})=>{let o=e?Rze(e):Rze(t);return lqt.jsx("rotate",{angles:o,children:n})},dqt=Yp(Gp(Pti));function vti(e){let t=(n)=>{let{rotation:o,...i}=n;if(!o)return Mye.jsx(e,{...i});return Mye.jsx(dqt,{rotation:o,children:Mye.jsx(e,{...i})})};return t.displayName=`WithRotation(${e.displayName||e.name||"Component"})`,t}var Eti=({radius:e,height:t})=>uqt.jsx("cylinder",{radius:e,height:t}),Mti=Gp(Yp(vti(Eti))),Bti=({height:e,startRadius:t,endRadius:n,segments:o=32,startAngle:i=0,endAngle:r=Math.PI*2})=>hqt.jsx("cylinderElliptic",{height:e,startRadius:t,endRadius:n,segments:o,startAngle:i,endAngle:r}),wti=Yp(Gp(Bti)),Tti=({radius:e})=>mqt.jsx("ellipsoid",{radius:e}),Dti=Yp(Gp(Tti)),Nti=({height:e,angle:t,startAngle:n,pitch:o,endOffset:i,segmetsPerRotation:r,children:s})=>pqt.jsx("extrudeHelical",{height:e,angle:t,startAngle:n,pitch:o,endOffset:i,segmetsPerRotation:r,children:s}),Rti=Yp(Gp(Nti)),Qti=({height:e,twistAngle:t,twistSteps:n,children:o})=>Aqt.jsx("extrudeLinear",{height:e,twistAngle:t,twistSteps:n,children:o}),kti=Yp(Gp(Qti)),Lti=({size:e,height:t,children:n})=>_qt.jsx("extrudeRectangular",{size:e,height:t,children:n}),Fti=Yp(Gp(Lti)),Hti=({angle:e,startAngle:t,segments:n,children:o})=>gqt.jsx("extrudeRotate",{angle:e,startAngle:t,segments:n,children:o}),Oti=Yp(Gp(Hti)),zti=({radius:e,frequency:t})=>fqt.jsx("geodesicSphere",{radius:e,frequency:t}),Gti=Yp(Gp(zti)),Yti=({children:e})=>yqt.jsx("hull",{children:e}),Vti=Yp(Gp(Yti)),Uti=({children:e})=>xqt.jsx("hullChain",{children:e}),Wti=Yp(Gp(Uti));var qti=({size:e,roundRadius:t})=>Cqt.jsx("roundedCuboid",{size:e,roundRadius:t}),Jti=Yp(Gp(qti)),$ti=({radius:e,height:t,roundRadius:n})=>Iqt.jsx("roundedCylinder",{radius:e,height:t,roundRadius:n}),Zti=Yp(Gp($ti)),eni=({radius:e,segments:t})=>bqt.jsx("sphere",{radius:e,segments:t||32}),tni=Gp(Yp(eni)),nni=({children:e})=>{if(!Array.isArray(e)||e.length<2)throw Error("Subtract must have at least two children");return Sqt.jsx("subtract",{children:e})},oni=Yp(Gp(nni)),ini=({innerRadius:e,outerRadius:t,innerSegments:n=32,outerSegments:o=32,innerRotation:i=0,outerRotation:r=1,startAngle:s=0})=>Pqt.jsx("torus",{innerRadius:e,outerRadius:t,innerSegments:n,outerSegments:o,innerRotation:i,outerRotation:r,startAngle:s}),rni=Yp(Gp(ini));var ani=({numberOfSlices:e,capStart:t,capEnd:n,close:o,repair:i,baseSlice:r,callback:s})=>vqt.jsx("extrudeFromSlices",{numberOfSlices:e,capStart:t,capEnd:n,close:o,repair:i,baseSlice:r,callback:s}),cni=Yp(Gp(ani)),Mqt={...Bye.jscadPlanner,primitives:{...Bye.jscadPlanner.primitives,rectangle:({size:[e,t]})=>{if(![e,t].every((n)=>Number.isFinite(n)&&n>0))throw Error("Rectangles require two positive finite dimensions");return Bye.jscadPlanner.primitives.polygon({points:[[-e/2,-t/2],[e/2,-t/2],[e/2,t/2],[-e/2,t/2]]})}}},lni=wjt(Mqt,{preserveReferences:!0});function Qze(e){if(typeof e==="function"||typeof e==="symbol"||typeof e==="bigint"||typeof e==="number"&&!Number.isFinite(e))throw Error("JSCAD plans must contain finite, JSON-serializable values");if(Array.isArray(e))e.forEach(Qze);else if(e&&typeof e==="object")Object.values(e).forEach(Qze)}function kze(e){let t=lni.createInstance(Eqt.Fragment,{children:e},[],Mqt,null),n=(Array.isArray(t)?t.flat(1/0):[t]).filter(Boolean);if(!n.length)throw Error("Cannot compile an empty JSCAD plan");let o=n.length===1?n[0]:{type:"union",shapes:n};function i(r){if(!r||typeof r.type!=="string")throw Error("Expected a JSCAD operation; raw Custom geometry is not supported by the plan compiler");if("shape"in r)i(r.shape);if("shapes"in r)r.shapes.forEach(i)}return i(o),Qze(o),o}var SUe=Rt(uDe(),1);We();We();We();We();var PUe=Rt(cE(),1);var I1=Rt(cE(),1);var qL=Rt(cE(),1),ES=Rt(cE(),1),Spn=Rt(lo(),1),nBi=Rt(lo(),1),Fas=Rt(lo(),1);var EF=Rt(Ai(),1);var vpn=Rt(Ai(),1),oBi=Rt(Ai(),1);var Epn=Rt(Ai(),1);var Mpn=Rt(Ai(),1);var Bpn=Rt(Ai(),1),iBi=Rt(lo(),1);var uni=Object.defineProperty,rW=((e)=>$O)(function(e){return $O.apply(this,arguments)}),hni=(e,t)=>{for(var n in t)uni(e,n,{get:t[n],enumerable:!0})},won={};hni(won,{Ammeter:()=>B4i,AnalogAcSweepSimulation:()=>D6i,AnalogAnalysisSimulation:()=>wX,AnalogDcOperatingPointSimulation:()=>w6i,AnalogDcSweepSimulation:()=>T6i,AnalogSimulation:()=>M6i,AnalogSweepParameter:()=>F6i,AnalogTransientSimulation:()=>B6i,Antenna:()=>_4i,AssemblyCable:()=>bpn,AssemblyDevice:()=>opn,AssemblyMotor:()=>apn,AssemblyPart:()=>hpn,AssemblyPrintedPart:()=>fpn,AssemblyReferenceSurface:()=>mpn,AssemblyScreen:()=>cpn,AssemblySubassembly:()=>IUe,AutoroutingPhase:()=>H4i,Battery:()=>r6i,Board:()=>TS,Breakout:()=>CUe,BreakoutPoint:()=>vF,Bus:()=>tPi,CadAssembly:()=>Gii,CadModel:()=>Uii,Capacitor:()=>Xin,Chip:()=>Fie,Connector:()=>$in,Constraint:()=>T4i,CopperPour:()=>XMi,CopperText:()=>sin,CourtyardCircle:()=>ain,CourtyardOutline:()=>cin,CourtyardRect:()=>lin,Crystal:()=>h6i,CurrentSource:()=>qmn,Cutout:()=>V2e,DifferentialPair:()=>aPi,Diode:()=>ern,DrcCheck:()=>F4i,EnclosureCutoutAperture:()=>jXe,EnclosureFdmBox:()=>Apn,FabricationNoteDimension:()=>O4i,FabricationNotePath:()=>din,FabricationNoteRect:()=>uin,FabricationNoteText:()=>hin,Fanout:()=>CUe,FanoutPoint:()=>vF,Fiducial:()=>RMi,Footprint:()=>fCe,Fuse:()=>f4i,Group:()=>Q3,Hole:()=>gW,Inductor:()=>Bmn,Interconnect:()=>x4i,Jumper:()=>y4i,Keepout:()=>xxe,Led:()=>wmn,Mosfet:()=>Tmn,MountedBoard:()=>a4i,Net:()=>gB,NetLabel:()=>Dvi,NormalComponent:()=>$c,OpAmp:()=>m6i,Panel:()=>h4i,PcbBend:()=>K6i,PcbNoteDimension:()=>z4i,PcbNoteLine:()=>min,PcbNotePath:()=>pin,PcbNoteRect:()=>Ain,PcbNoteText:()=>_in,PcbReturnCurrentExcitation:()=>z6i,PcbReturnCurrentSimulation:()=>H6i,PcbSoldermaskOpening:()=>gin,PcbStiffener:()=>j6i,PcbTrace:()=>FUe,PcbVia:()=>fin,PinHeader:()=>s6i,Pinout:()=>g4i,PlatedHole:()=>rB,Port:()=>sd,Potentiometer:()=>d6i,PowerSource:()=>I4i,PrimitiveComponent:()=>jo,PushButton:()=>Dmn,Renderable:()=>Hon,Resistor:()=>Nmn,Resonator:()=>c6i,SchematicArc:()=>xin,SchematicBox:()=>W0n,SchematicCell:()=>E6i,SchematicCircle:()=>Cin,SchematicGraphic:()=>S6i,SchematicLine:()=>QYe,SchematicPath:()=>Iin,SchematicRect:()=>bin,SchematicRow:()=>v6i,SchematicSection:()=>y6i,SchematicSheet:()=>b6i,SchematicSymbol:()=>f6i,SchematicTable:()=>P6i,SchematicText:()=>Sin,SilkscreenCircle:()=>Pin,SilkscreenGraphic:()=>NMi,SilkscreenLine:()=>vin,SilkscreenPath:()=>Ein,SilkscreenRect:()=>Min,SilkscreenText:()=>HUe,SmtPad:()=>sB,SolderJumper:()=>C4i,SolderPaste:()=>Bin,SpiceModel:()=>X6i,Subcircuit:()=>Umn,Subpanel:()=>Kmn,Switch:()=>Rmn,Symbol:()=>OUe,TestPoint:()=>p6i,Trace:()=>qm,TraceHint:()=>V0n,Transistor:()=>Qmn,Via:()=>Zon,VoltageProbe:()=>W6i,VoltageSource:()=>jmn});var mni=(e,t)=>{switch(t){case"i2c_sda":e.supports_i2c_sda=!0;return;case"i2c_scl":e.supports_i2c_scl=!0;return;case"spi_cs":e.supports_spi_cs=!0;return;case"spi_sck":e.supports_spi_sck=!0;return;case"spi_mosi":e.supports_spi_mosi=!0;return;case"spi_miso":e.supports_spi_miso=!0;return;case"uart_tx":e.supports_uart_tx=!0;return;case"uart_rx":e.supports_uart_rx=!0;return;default:throw Error(`Unhandled pin capability: ${t}`)}},pni=(e,t)=>{switch(t){case"i2c_sda":e.is_configured_for_i2c_sda=!0;return;case"i2c_scl":e.is_configured_for_i2c_scl=!0;return;case"spi_cs":e.is_configured_for_spi_cs=!0;return;case"spi_sck":e.is_configured_for_spi_sck=!0;return;case"spi_mosi":e.is_configured_for_spi_mosi=!0;return;case"spi_miso":e.is_configured_for_spi_miso=!0;return;case"uart_tx":e.is_configured_for_uart_tx=!0;return;case"uart_rx":e.is_configured_for_uart_rx=!0;return;default:throw Error(`Unhandled configured pin capability: ${t}`)}},Ton=(e,t)=>{if(t.isInput!==void 0)e.is_input=t.isInput;if(t.isOutput!==void 0)e.is_output=t.isOutput;if(t.isBidirectional!==void 0)e.is_bidirectional=t.isBidirectional;if(t.isPassive!==void 0)e.is_passive=t.isPassive;if(t.canUseTriState!==void 0)e.can_use_tri_state=t.canUseTriState;if(t.isUsingTriState!==void 0)e.is_using_tri_state=t.isUsingTriState;if(t.canUseOpenCollector!==void 0)e.can_use_open_collector=t.canUseOpenCollector;if(t.isUsingOpenCollector!==void 0)e.is_using_open_collector=t.isUsingOpenCollector;if(t.canUseOpenEmitter!==void 0)e.can_use_open_emitter=t.canUseOpenEmitter;if(t.isUsingOpenEmitter!==void 0)e.is_using_open_emitter=t.isUsingOpenEmitter;if(t.isGpio!==void 0)e.is_gpio=t.isGpio;if(t.highlightColor!==void 0)e.highlight_color=t.highlightColor;for(let o of t.capabilities??[])mni(e,o);let n=new Set([...t.activeCapabilities??[],...t.activeCapability?[t.activeCapability]:[]]);for(let o of n)pni(e,o);if(t.mustBeConnected!==void 0)e.must_be_connected=t.mustBeConnected;if(t.providesPower!==void 0)e.provides_power=t.providesPower;if(t.requiresPower!==void 0)e.requires_power=t.requiresPower;if(t.providesGround!==void 0)e.provides_ground=t.providesGround;if(t.requiresGround!==void 0)e.requires_ground=t.requiresGround;if(t.providesVoltage!==void 0)e.provides_voltage=xl.parse(t.providesVoltage);if(t.requiresVoltage!==void 0)e.requires_voltage=xl.parse(t.requiresVoltage);if(t.doNotConnect!==void 0)e.do_not_connect=t.doNotConnect;if(t.includeInBoardPinout!==void 0)e.include_in_board_pinout=t.includeInBoardPinout;if(t.canUseInternalPullup!==void 0)e.can_use_internal_pullup=t.canUseInternalPullup;if(t.isUsingInternalPullup!==void 0)e.is_using_internal_pullup=t.isUsingInternalPullup;if(t.needsExternalPullup!==void 0)e.needs_external_pullup=t.needsExternalPullup;if(t.canUseInternalPulldown!==void 0)e.can_use_internal_pulldown=t.canUseInternalPulldown;if(t.isUsingInternalPulldown!==void 0)e.is_using_internal_pulldown=t.isUsingInternalPulldown;if(t.needsExternalPulldown!==void 0)e.needs_external_pulldown=t.needsExternalPulldown;if(t.canUseOpenDrain!==void 0)e.can_use_open_drain=t.canUseOpenDrain;if(t.isUsingOpenDrain!==void 0)e.is_using_open_drain=t.isUsingOpenDrain;if(t.canUsePushPull!==void 0)e.can_use_push_pull=t.canUsePushPull;if(t.isUsingPushPull!==void 0)e.is_using_push_pull=t.isUsingPushPull;if(t.shouldHaveDecouplingCapacitor!==void 0)e.should_have_decoupling_capacitor=t.shouldHaveDecouplingCapacitor;if(t.recommendedDecouplingCapacitorCapacitance!==void 0)e.recommended_decoupling_capacitor_capacitance=t.recommendedDecouplingCapacitorCapacitance},Ani=(e,t)=>{let n=[];for(let o of Object.keys(e)){if(o==="highlightColor"||o==="includeInBoardPinout")continue;let i={};if(Ton(i,{[o]:e[o]}),o==="capabilities"){for(let r of Object.keys(t))if(r.startsWith("supports_"))Object.assign(i,{[r]:i[r]??!1})}for(let r of Object.keys(i)){let s=i[r],a=r.startsWith("is_configured_for_")?r.replace("is_configured_for_","supports_"):r.startsWith("is_using_")?r.replace("is_using_","can_use_"):void 0;if(a){if(s===!0&&t[a]===!1)n.push(`${o}: ${JSON.stringify(e[o])}, fetched ${a}: false`);continue}let c=t[r],l=typeof c==="number"&&typeof s==="number"?Math.abs(c-s)<=Number.EPSILON*8*Math.max(1,Math.abs(c),Math.abs(s)):c===s;if(c!==void 0&&s!==void 0&&!l)n.push(`${o}: ${JSON.stringify(e[o])}, fetched ${r}: ${JSON.stringify(c)}`)}}return n},Don=(e,t)=>{if(new Set(t.map((a)=>a.source_component_id)).size>1)return{};let n=e.props.pinNumber,o=n===void 0?[]:t.filter((a)=>a.pin_number===n),i=e.getNameAndAliases(),r=o.length>0?o:t.filter((a)=>[a.name,...a.port_hints??[]].some((c)=>i.includes(c)));if(r.length!==1)return{};let s=pz.parse(r[0]);for(let a of Object.keys(s))if(s[a]===void 0)delete s[a];return s},uxe=(e)=>{let t=Don(e,e.getParentNormalComponent()?._importedSourcePorts??[]);for(let n of e._getMatchingPinAttributes()){for(let o of Object.keys(t))if(n.capabilities!==void 0&&o.startsWith("supports_")||(n.activeCapability!==void 0||n.activeCapabilities!==void 0)&&o.startsWith("is_configured_for_"))delete t[o];Ton(t,n)}return t},_ni=(e)=>{let t=e._fetchedInternallyConnectedPinNames??e._importedInternallyConnectedPinNames??[],n=e._getAllPortsFromChildren(),o=(s)=>{let a=String(s),c=n.find((d)=>d.physicalPinName===a||d.props.pinNumber!==void 0&&(String(d.props.pinNumber)===a||`pin${d.props.pinNumber}`===a));if(c)return c;let l=n.filter((d)=>{let u=d.getNameAndAliases();return u.includes(a)||a.startsWith("pin")&&u.includes(a.slice(3))});return l.length===1?l[0]:void 0},i=e._parsedProps.internallyConnectedPins,r=(i??[]).map((s)=>s.map(o).filter((a)=>a!==void 0));return t.flatMap((s)=>{let a=s.map(o);if(a.some((A)=>!A))return[];let c=[...new Set(a)];if(c.length<2)return[];let l=new Set([c[0]]),d=!0;while(d){d=!1;for(let A of r){if(!A.some((m)=>l.has(m)))continue;for(let m of A)if(!l.has(m))l.add(m),d=!0}}if(c.every((A)=>l.has(A)))return[];let u=c.map((A)=>{let m=A.getNameAndAliases();return m.find((p)=>!/^(?:pin)?\d+$/.test(p))??m[0]??"unnamed pin"});return[{message:`The datasheet reports pins ${u.length===2?u.join(" and "):`${u.slice(0,-1).join(", ")} and ${u.at(-1)}`} are internally connected, but ${i===void 0?`the internallyConnectedPins prop isn't set on ${e.getDisplayName()}`:`internallyConnectedPins on ${e.getDisplayName()} does not declare that connection`}.`,sourcePortIds:c.flatMap((A)=>A.source_port_id?[A.source_port_id]:[])}]})},Bqt=new WeakMap,yYe=async(e,t)=>{let{supplierPartNumber:n,manufacturerPartNumber:o,platformFetch:i}=t,r={supplierPartNumber:n,manufacturerPartNumber:o,platformFetch:i};try{return{circuitJson:await e(t)}}catch(s){if(!t.includeDatasheetInformation&&!(s instanceof Of&&s.issues.some((h)=>h.code==="unrecognized_keys"&&h.keys.includes("includeDatasheetInformation"))))throw s;let a={...t,includeDatasheetInformation:!1},c,l=!1;try{l=!t.includeDatasheetInformation,c=await e(l?r:a)}catch{if(l)throw s;c=await e(r),l=!0}if(!c?.length)throw s;let d=c.flatMap((h)=>h.type==="source_component"&&h.manufacturer_part_number?[h.manufacturer_part_number]:[]);if(o&&d.some((h)=>h.trim().toLowerCase()!==o.trim().toLowerCase()))throw s;let u=l?"the parts engine only accepted a request without the datasheet option":s instanceof Error?s.message:String(s);return{circuitJson:c,datasheetFailureReason:u}}},Non=async(e,t)=>{let{circuitJson:n}=await yYe(e,{...t,includeDatasheetInformation:!1});return n},vUe=async({fetchPartCircuitJson:e,supplierPartNumber:t,manufacturerPartNumber:n},o)=>{let i=o.config.componentName==="Chip"||o.config.componentName==="OpAmp"||o.config.componentName==="PushButton",r={supplierPartNumber:t,manufacturerPartNumber:n,platformFetch:o.root?.platform?.platformFetch,includeDatasheetInformation:i},s,a=o.root;if(o.config.componentName==="Chip"&&a){let d=Bqt.get(a);if(!d)d=new WeakMap,Bqt.set(a,d);let u=d.get(e);if(!u)u=new Map,d.set(e,u);let h=`datasheet_part:${JSON.stringify([t,n])}`;s=u.get(h)??yYe(e,r),u.set(h,s)}else s=yYe(e,r);let{circuitJson:c,datasheetFailureReason:l}=await s;if(i&&l!==void 0){let d=`Datasheet information for ${o.getDisplayName()} could not be fetched: ${l}. Pin attributes may not be populated.`;if(o.source_component_id&&o.root)o.root.db.source_property_ignored_warning.insert({source_component_id:o.source_component_id,property_name:"pinAttributes",message:d,error_type:"source_property_ignored_warning"});else console.warn(d)}return c},Ron=(e)=>{let t=e.filter((o)=>o.type==="source_port"),n=e.filter((o)=>o.type==="source_component").filter((o)=>o.internally_connected_source_port_ids!==void 0);if(!n.length)return;return n.flatMap((o)=>(o.internally_connected_source_port_ids??[]).flatMap((i)=>{let r=i.map((s)=>t.find((a)=>a.source_port_id===s&&a.source_component_id===o.source_component_id));if(r.some((s)=>!s))return[];return[r.map((s)=>s.pin_number!==void 0?`pin${s.pin_number}`:s.name)]}))},gni=(e)=>{if(!["Chip","PushButton","OpAmp"].includes(e.config.componentName))return;if(e._hasStartedPinAttributesFetch)return;if(e.getInheritedProperty("partsEngineDisabled"))return;if(e.getInheritedProperty("bomDisabled"))return;if(e._importedInternallyConnectedPinNames!==void 0)return;if(e._importedSourcePorts.some((s)=>Object.values(pz.parse(s)).some((a)=>a!==void 0)))return;let t=e.getInheritedProperty("partsEngine");if(!t?.fetchPartCircuitJson)return;let n=e.resolveFootprint(),o=e._parsedProps.supplierPartNumbers;if(o6.shape.supplierPartNumbers.unwrap().keySchema.options.some((s)=>typeof e.root?.platform?.footprintLibraryMap?.[s]!=="function"&&o?.[s]?.some((a)=>n===`${s}:${a}`)))return;let i=Object.values(o??{}).flat()[0],r=qi(e._parsedProps);if(!i&&!r)return;e._hasStartedPinAttributesFetch=!0,e._queueAsyncEffect("fetch-datasheet-validation-metadata",async()=>{try{let s=await vUe({fetchPartCircuitJson:t.fetchPartCircuitJson,supplierPartNumber:i,manufacturerPartNumber:r},e);e._fetchedSourcePortsForPinAttributes=s?.filter((a)=>a.type==="source_port")??[],e._fetchedInternallyConnectedPinNames=Ron(s??[]),e._markDirty("SourceDesignRuleChecks")}catch{}})},wqt=(e)=>{if(!["Chip","PushButton","OpAmp"].includes(e.config.componentName))return;let t=e.config.componentName==="Chip";if(!e.source_component_id)return;let{db:n}=e.root,o=n.source_component_pins_underspecified_warning.getWhere({source_component_id:e.source_component_id}),i=e.root?.platform?.drcChecksDisabled??e.getInheritedProperty("drcChecksDisabled"),r=e.root?.platform?.pinSpecificationDrcChecksDisabled??e.getInheritedProperty("pinSpecificationDrcChecksDisabled"),s=i||r;if(!s)gni(e);let a=s?[]:e.selectAll("port").flatMap((_)=>{if(!_.source_port_id)return[];let f=n.source_port.get(_.source_port_id);return f?.source_component_id===e.source_component_id?[f]:[]}),c=s?null:n.source_component.get(e.source_component_id),l=c?[c,...a]:[],d=[];if(!s&&t)for(let _ of e.selectAll("port")){let f=a.find((I)=>I.source_port_id===_.source_port_id);if(!f)continue;let y={};for(let I of _.getNameAndAliases())Object.assign(y,e._parsedProps.pinAttributes?.[I]);let x=Don(_,e._fetchedSourcePortsForPinAttributes.length?e._fetchedSourcePortsForPinAttributes:e._importedSourcePorts),C=Ani(y,x);if(C.length)d.push({pinName:f.name||"unnamed pin",reasons:C,sourcePort:f})}for(let[_,f]of[[n.source_no_power_pin_defined_warning,s1t],[n.source_no_ground_pin_defined_warning,a1t]]){let y=_.getWhere({source_component_id:e.source_component_id}),x=y?.type==="source_no_power_pin_defined_warning"?y.source_no_power_pin_defined_warning_id:y?.source_no_ground_pin_defined_warning_id,[C]=s||!t||d.length?[]:f(l);if(C)if(x)_.update(x,{message:C.message,source_port_ids:C.source_port_ids,subcircuit_id:C.subcircuit_id});else n.insertAll([C]);else if(x)_.delete(x)}let[u]=s||!t?[]:i1t(l),h=s?[]:_ni(e);if(!d.length&&!u&&!h.length){if(o)n.source_component_pins_underspecified_warning.delete(o.source_component_pins_underspecified_warning_id);return}let A=d.slice(0,3).map(({pinName:_,reasons:f})=>`${_} (${f.join("; ")})`).join(", "),m=d.length>3?`, and ${d.length-3} more`:"",p=d.length?`Chip ${e.name||"unnamed chip"} has pinAttributes that conflict with fetched pin metadata on ${d.length} pin${d.length===1?"":"s"}: ${A}${m}. Check the chip configuration against the part datasheet.`:u?.message,g={source_component_id:e.source_component_id,source_port_ids:[...new Set([...d.length?d.map(({sourcePort:_})=>_.source_port_id):u?.source_port_ids??[],...h.flatMap((_)=>_.sourcePortIds)])],subcircuit_id:e.getSubcircuit().subcircuit_id??void 0,warning_type:"source_component_pins_underspecified_warning",message:[p,...h.map((_)=>_.message)].filter(Boolean).join(" ")};if(o)n.source_component_pins_underspecified_warning.update(o.source_component_pins_underspecified_warning_id,g);else n.source_component_pins_underspecified_warning.insert(g)},fni=/^(?:pin)?(\d+)$/,cB=(e)=>{let t=e.match(fni);if(!t)return null;return Number.parseInt(t[1],10)},Ioe=(e)=>/^[A-Z]+[1-9]\d*$/.test(e);function EUe(e){let t=new Set(Object.keys(e).flatMap((r)=>{let s=cB(r);return s===null?[]:[s]})),n=Object.keys(e).filter(Ioe).sort((r,s)=>{let[,a,c]=r.match(/^([A-Z]+)(\d+)$/),[,l,d]=s.match(/^([A-Z]+)(\d+)$/);return a.length-l.length||(a<l?-1:a>l?1:0)||Number(c)-Number(d)}),o=[],i=1;for(let r of n){while(t.has(i))i++;o.push({physicalPinName:r,pinNumber:i++})}return Object.entries(e).map(([r,s])=>{let a=cB(r),c=a??o.find((l)=>l.physicalPinName===r)?.pinNumber;if(c===void 0)throw Error(`Invalid pinLabels key "${r}". Expected a numeric pin (e.g. pin1) or physical ball name (e.g. A1).`);return{pinNumber:c,physicalPinName:a===null?r:void 0,labels:typeof s==="string"?[s]:[...s]}})}function doe(e){if(!Object.keys(e).some(Ioe))return Object.fromEntries(Object.entries(e).map(([t,n])=>[t,typeof n==="string"?n:[...n]]));return Object.fromEntries(EUe(e).map(({pinNumber:t,physicalPinName:n,labels:o})=>[`pin${t}`,n?[...o,n]:o]))}var xYe=({layer:e,pcbCcwRotationDegrees:t,modelCcwRotationOffsetDegrees:n})=>{let o=e==="bottom";return{x:n.x,y:n.y+(o?180:0),z:pu(o?n.z-t:t+n.z)}},yni={invalid_bend_geometry:"Invalid bend geometry",unsupported_bend_geometry:"Unsupported bend geometry",nonparallel_bends:"Bends must be parallel with the same moving direction",overlapping_bend_zones:"Overlapping PCB bend zones or incompatible moving regions are not supported",invalid_finite_bend_region:"The bend does not define a valid finite moving region",incomplete_bend_cross_section:"The bend cross-section does not cover the board",rigid_bend_zone_intersection:"CAD mount intersects PCB bend zone"};function Qon(e,t){let n=yni[e.code];if(!e.bendId)return n;let o=t.find((i)=>i.pcb_bend_id===e.bendId);return`${n} ${o?.name??"unnamed bend"}`}var f3=class extends Error{constructor(e){super(e.message);this.issue=e,this.name="PcbFoldError"}issue};function xni(e){try{return{ok:!0,value:e()}}catch(t){if(!(t instanceof f3))throw t;return{ok:!1,issue:t.issue}}}var rd=0.0000001,CYe=(e,t)=>Math.hypot(e.x-t.x,e.y-t.y)<rd;function u3(e,t,n=!0){let o=!1;for(let i=0;i<t.length;i++){let r=t[i],s=t[(i+1)%t.length],a=(e.x-r.x)*(s.y-r.y)-(e.y-r.y)*(s.x-r.x);if(Math.abs(a)<rd*Math.max(1,Math.hypot(s.x-r.x,s.y-r.y))&&e.x>=Math.min(r.x,s.x)-rd&&e.x<=Math.max(r.x,s.x)+rd&&e.y>=Math.min(r.y,s.y)-rd&&e.y<=Math.max(r.y,s.y)+rd)return n;if(r.y>e.y!==s.y>e.y&&e.x<r.x+(s.x-r.x)*(e.y-r.y)/(s.y-r.y))o=!o}return o}function Tqt(e,t,n,o){let i=[];for(let r=0;r<e.length;r++){let s=e[r],a=e[(r+1)%e.length],c=s.x*t+s.y*n-o,l=a.x*t+a.y*n-o;if(Math.abs(c)<rd&&Math.abs(l)<rd)continue;if(c>rd&&l>rd||c<-rd&&l<-rd)continue;if(Math.abs(c-l)<rd)continue;let d=Math.max(0,Math.min(1,c/(c-l))),u={x:s.x+(a.x-s.x)*d,y:s.y+(a.y-s.y)*d};if(i.some((h)=>CYe(h.point,u)))continue;i.push(d>1-rd?{point:a,edge:(r+1)%e.length,fraction:0}:{point:u,edge:r,fraction:d})}return i.sort((r,s)=>-n*r.point.x+t*r.point.y-(-n*s.point.x+t*s.point.y))}function Dqt(e,t,n,o,i){let r=[];for(let u=0;u<e.length;u++){r.push(e[u]);for(let h of[t,n].filter((A)=>A.edge===u).sort((A,m)=>A.fraction-m.fraction))if(h.fraction>rd)r.push(h.point)}let s=r.findIndex((u)=>CYe(u,t.point)),a=r.findIndex((u)=>CYe(u,n.point));if(s<0||a<0)throw Error("Cannot resolve PCB bend boundary crossings");let c=(u,h)=>{let A=[r[u]];while(u!==h)u=(u+1)%r.length,A.push(r[u]);return A},l=e.reduce((u,h,A)=>{let m=e[(A+1)%e.length];return u+h.x*m.y-m.x*h.y},0);return Math.sign(l)*((n.point.y-t.point.y)*o-(n.point.x-t.point.x)*i)>0?c(s,a):c(a,s)}function Cni({bendId:e,outline:t,nx:n,ny:o,center:i,proximal:r,axisMin:s,axisMax:a}){let c=Tqt(t,n,o,i).filter(({point:p})=>{let g=-o*p.x+n*p.y;return g>=s-rd&&g<=a+rd});if(c.length!==2)throw new f3({code:"invalid_finite_bend_region",message:"A finite PCB bend must cut one board cross-section from boundary to boundary",bendId:e});let[l,d]=c,u={x:(l.point.x+d.point.x)/2,y:(l.point.y+d.point.y)/2};if(!u3(u,t,!1))throw new f3({code:"invalid_finite_bend_region",message:"A finite PCB bend must pass through the board interior",bendId:e});let h=Dqt(t,l,d,n,o),A=-o*u.x+n*u.y,m=Tqt(t,n,o,r);for(let p=0;p+1<m.length;p++){let g=m[p],_=m[p+1],f=-o*g.point.x+n*g.point.y,y=-o*_.point.x+n*_.point.y;if(A<=f+rd||A>=y-rd)continue;let x={x:(g.point.x+_.point.x)/2,y:(g.point.y+_.point.y)/2};if(!u3(x,t,!1))continue;let C=Dqt(t,g,_,n,o);if(C.some((I)=>I.x*n+I.y*o<r-rd)||h.some((I)=>!u3(I,C))||C.some((I)=>I.x*n+I.y*o>=i-rd&&!u3(I,h)))break;return C}throw new f3({code:"invalid_finite_bend_region",message:"The finite PCB bend zone must remain in one connected board cross-section",bendId:e})}function Ini(e,t){if(e.some((o)=>u3(o,t))||t.some((o)=>u3(o,e)))return!0;let n=(o,i,r)=>(i.x-o.x)*(r.y-o.y)-(i.y-o.y)*(r.x-o.x);for(let o=0;o<e.length;o++)for(let i=0;i<t.length;i++){let r=e[o],s=e[(o+1)%e.length],a=t[i],c=t[(i+1)%t.length];if(n(r,s,a)*n(r,s,c)<-rd&&n(a,c,r)*n(a,c,s)<-rd)return!0}return!1}function Nqt(e,t){if(t.some((n)=>!u3(n,e)))return!1;for(let n=0;n<t.length;n++){let o=t[n],i=t[(n+1)%t.length],r=i.x-o.x,s=i.y-o.y,a=r*r+s*s;if(a<rd*rd)continue;let c=[0,1];for(let l=0;l<e.length;l++){let d=e[l],u=e[(l+1)%e.length],h=u.x-d.x,A=u.y-d.y,m=r*A-s*h,p=d.x-o.x,g=d.y-o.y;if(Math.abs(m)<rd){if(Math.abs(p*s-g*r)>rd)continue;for(let _ of[d,u]){let f=((_.x-o.x)*r+(_.y-o.y)*s)/a;if(f>0&&f<1)c.push(f)}}else{let _=(p*A-g*h)/m,f=(p*s-g*r)/m;if(_>0&&_<1&&f>=-rd&&f<=1+rd)c.push(_)}}c.sort((l,d)=>l-d);for(let l=1;l<c.length;l++){let d=(c[l-1]+c[l])/2;if(!u3({x:o.x+d*r,y:o.y+d*s},e))return!1}}return!0}var lB=0.0000001;function bni(e){let t=[...e].sort((a,c)=>a.start-c.start||a.nx-c.nx||a.ny-c.ny||a.id.localeCompare(c.id)),n=new Map,o=(a)=>{throw new f3({code:"overlapping_bend_zones",message:"Overlapping PCB bend zones or incompatible moving regions are not supported",bendId:a.id})};for(let a=0;a<t.length;a++)for(let c=a+1;c<t.length;c++){let l=t[a],d=t[c];if(l.movingOutline&&d.movingOutline){if(!Ini(l.movingOutline,d.movingOutline))continue;let u=Nqt(l.movingOutline,d.movingOutline),h=Nqt(d.movingOutline,l.movingOutline);if(u===h)o(d);let A=u?l:d,m=u?d:l;if(m.movingOutline.some((p)=>p.x*A.nx+p.y*A.ny<A.end-lB))o(m);n.set(m,[...n.get(m)??[],A])}else{if(Math.abs(l.nx-d.nx)>lB||Math.abs(l.ny-d.ny)>lB)throw new f3({code:"nonparallel_bends",message:"Nonparallel PCB bends or bends with opposite moving directions require a board outline to resolve their moving regions"});if(d.start<l.end-lB)o(d);n.set(d,[...n.get(d)??[],l])}}let i=[],r=new Set,s=(a)=>{if(r.has(a))return;for(let c of n.get(a)??[])s(c);r.add(a),i.push(a)};for(let a of t)s(a);return i}function Sni(e,t,{outline:n}={}){if(!Number.isFinite(t)||t<0)throw Error("Board thickness must be finite and nonnegative");if(n&&(n.length<3||n.some((c)=>!Number.isFinite(c.x)||!Number.isFinite(c.y))))throw Error("A finite board outline with at least three points is required");let o=e.map((c)=>{let{start:l,end:d,bend_angle:u,bend_radius:h}=c;if([l?.x,l?.y,d?.x,d?.y,u,h].some((I)=>!Number.isFinite(I))||h<=t/2||!["left","right"].includes(c.bend_side))throw new f3({code:"invalid_bend_geometry",message:`Invalid PCB bend ${c.pcb_bend_id}: finite geometry and radius greater than half the board thickness are required`,bendId:c.pcb_bend_id});let m=Math.hypot(d.x-l.x,d.y-l.y);if(m<lB||Math.abs(u)>180)throw new f3({code:"unsupported_bend_geometry",message:`Unsupported PCB bend ${c.pcb_bend_id}: distinct endpoints and angles within ±180 degrees are required`,bendId:c.pcb_bend_id});let p=c.bend_side==="right"?1:-1,g=p*(d.y-l.y)/m,_=-p*(d.x-l.x)/m,f=u*Math.PI/180,y=h*Math.abs(f),x=l.x*g+l.y*_,C={id:c.pcb_bend_id,nx:g,ny:_,start:x-y/2,end:x+y/2,angle:f,radius:h,axisMin:Math.min(-_*l.x+g*l.y,-_*d.x+g*d.y),axisMax:Math.max(-_*l.x+g*l.y,-_*d.x+g*d.y)};if(n&&Math.abs(f)>lB)C.movingOutline=Cni({bendId:c.pcb_bend_id,outline:n,nx:g,ny:_,center:x,proximal:C.start,axisMin:C.axisMin,axisMax:C.axisMax});return C}).filter((c)=>Math.abs(c.angle)>lB),i=bni(o),r=[...i].reverse(),s=({p:c,anchor:l,direction:d})=>{let u={...c};for(let h of r){if(h.movingOutline&&!u3(l,h.movingOutline))continue;let A=h.end-h.start,m=l.x*h.nx+l.y*h.ny-h.start,p=Math.max(0,Math.min(A,m)),g=h.angle*p/A,_=Math.cos(g),f=Math.sin(g),y=u.x*h.nx+u.y*h.ny-(d?0:h.start),x=u.x-(y+(d?0:h.start))*h.nx,C=u.y-(y+(d?0:h.start))*h.ny,I=Math.sign(h.angle)*h.radius,b=d?0:I*f-p*_,P=d?0:I*(1-_)-p*f,E=y*_-u.z*f+b;u={x:x+(E+(d?0:h.start))*h.nx,y:C+(E+(d?0:h.start))*h.ny,z:y*f+u.z*_+P}}return u},a=({p:c,anchor:l,direction:d})=>{let u=d?{x:0,y:0,z:0}:s({p:{x:0,y:0,z:0},anchor:l,direction:!1}),h={x:c.x-u.x,y:c.y-u.y,z:c.z-u.z},A=[{x:1,y:0,z:0},{x:0,y:1,z:0},{x:0,y:0,z:1}].map((p)=>s({p,anchor:l,direction:!0})),m=(p)=>p.x*h.x+p.y*h.y+p.z*h.z;return{x:m(A[0]),y:m(A[1]),z:m(A[2])}};return{bends:i,inversePoint:(c,l)=>a({p:c,anchor:l,direction:!1}),inverseDirection:(c,l)=>a({p:c,anchor:l,direction:!0}),point:(c,l=c)=>s({p:c,anchor:l,direction:!1}),direction:(c,l)=>s({p:c,anchor:l,direction:!0}),assertRigid(c,l){for(let d of o){let u=d.end-d.start,h=c.map((A)=>d.movingOutline&&!u3(A,d.movingOutline)?0:Math.max(0,Math.min(u,A.x*d.nx+A.y*d.ny-d.start)));if(Math.max(...h)>lB&&Math.min(...h)<u-lB)throw new f3({code:"rigid_bend_zone_intersection",message:`${l} intersects PCB bend zone ${d.id}`,bendId:d.id})}}}}function Pni(e,t,n={}){return xni(()=>Sni(e,t,n))}var vni=[{x:1,y:0,z:0},{x:0,y:1,z:0},{x:0,y:0,z:1}];function Eni(e,t){let[n,o,i]=[t.x,t.y,t.z].map((a)=>a*Math.PI/180),r={x:Math.cos(i)*e.x-Math.sin(i)*e.y,y:Math.sin(i)*e.x+Math.cos(i)*e.y,z:e.z},s={x:Math.cos(o)*r.x+Math.sin(o)*r.z,y:r.y,z:-Math.sin(o)*r.x+Math.cos(o)*r.z};return{x:s.x,y:Math.cos(n)*s.y-Math.sin(n)*s.z,z:Math.sin(n)*s.y+Math.cos(n)*s.z}}function Mni([e,t,n]){let o=Math.asin(Math.max(-1,Math.min(1,n.x))),i=Math.abs(n.x)<0.999999999999;return{x:(i?Math.atan2(-n.y,n.z):Math.atan2(t.z,t.y))*180/Math.PI,y:o*180/Math.PI,z:(i?Math.atan2(-t.x,e.x):0)*180/Math.PI}}function Bni({cadComponentPlacement:e,foldPcbs:t},n){if(e.is_on_folded_board===!0===t)return e;let{fold:o,boardCenter:i,flatMount:r}=n,s={x:r.x-i.x,y:r.y-i.y,z:0};o.assertRigid([s],"CAD mount");let a={x:e.position.x-i.x,y:e.position.y-i.y,z:e.position.z},c=t?o.direction:o.inverseDirection,l=t?o.point(a,s):o.inversePoint(a,s),d=e.rotation??n.defaultRotation??{x:0,y:0,z:0},u=vni.map((h)=>c(Eni(h,d),s));return{...e,position:{x:l.x+i.x,y:l.y+i.y,z:l.z},rotation:Mni(u),is_on_folded_board:t}}function wni(e){let t=e._getBoard();if(!t?.pcbFold||!t.pcb_board_id||!e.pcb_component_id)return;let{db:n}=e.root,o=n.pcb_board.get(t.pcb_board_id),i=n.pcb_component.get(e.pcb_component_id);return{fold:t.pcbFold,boardCenter:o.center,flatMount:i.center}}function IYe(e,t){let n=wni(e);if(!n)return t;try{return Bni({cadComponentPlacement:t,foldPcbs:!0},n)}catch(o){if(!(o instanceof f3))throw o;let{db:i}=e.root,r=i.pcb_component.get(e.pcb_component_id),s=i.source_component.get(r.source_component_id)?.name??"unnamed component";return i.pcb_placement_error.insert({error_type:"pcb_placement_error",message:`Unable to fold CAD for PCB component ${s}; CAD remains flat: ${Qon(o.issue,i.pcb_bend.list())}`,subcircuit_id:e.getSubcircuit()?.subcircuit_id??void 0}),t}}var Rqt=class{input;constructor({input:e}){this.input=e}solveAndMapToTraces(){let e=[];for(let t of this.input.connections){if(t.pointsToConnect.length!==2)continue;let[n,o]=t.pointsToConnect,i={type:"pcb_trace",pcb_trace_id:"",connection_name:t.name,route:[{route_type:"wire",x:n.x,y:n.y,layer:"top",width:0.1},{route_type:"wire",x:o.x,y:o.y,layer:"top",width:0.1}]};e.push(i)}return e}},Tni=(e)=>{let t=Math.min(...e.map((r)=>r.center.x)),n=Math.max(...e.map((r)=>r.center.x)),o=Math.min(...e.map((r)=>r.center.y)),i=Math.max(...e.map((r)=>r.center.y));return{minX:t,maxX:n,minY:o,maxY:i}},Dni=["top","bottom","inner1","inner2"],G2e=(e,t,n)=>{let o=[];if(n.length===0){let c=e[0].layers;for(let l of c)o.push(...G2e(e.slice(1),t,[l]));return o}if(e.length===0)return[];let i=e[0],r=i.via||i.optional_via,s=n[n.length-1];if(e.length===1){let c=i;if(c.layers&&r)return c.layers.map((l)=>({layer_path:[...n,l]}));if(c.layers?.includes(s))return[{layer_path:[...n,s]}];return[]}if(!r){if(i.layers){if(!i.layers.includes(s))return[]}return G2e(e.slice(1),t,n.concat([s]))}let a=(i.optional_via?t:t.filter((c)=>c!==s)).filter((c)=>!i.layers||i.layers?.includes(c));for(let c of a)o.push(...G2e(e.slice(1),t,n.concat(c)));return o},Nni=(e,t={})=>G2e(e,t.layerSelectionPreference??Dni,[]);function Qqt(e){let t={x:e.to.x-e.from.x,y:e.to.y-e.from.y},n=Math.abs(t.x),o=Math.abs(t.y);if(n>o)return t.x>0?"right":"left";return t.y>0?"down":"up"}var GT=(e)=>{if(e.route_type==="through_pad")return e.start;return{x:e.x,y:e.y}},Lon=(e)=>{if(e.route_type==="through_pad")return[e.start,e.end];return[{x:e.x,y:e.y}]},hxe=(e,t="constant")=>{let n=e.slice().reverse().map((o)=>{if(o.route_type==="wire"){let{start_width:i,end_width:r,width_interpolation_mode:s,...a}=o;return a}if(o.route_type!=="through_pad")return{...o};return{...o,start:o.end,end:o.start,start_layer:o.end_layer,end_layer:o.start_layer}});if(t==="constant"){for(let o=0;o<n.length-1;o++){let i=n[o],r=n[o+1];if(i?.route_type!=="wire"||r?.route_type!=="wire"||i.layer!==r.layer)continue;let s=e[e.length-o-2];if(s?.route_type==="wire")i.width=s.width}for(let o=0;o<n.length;o++){let i=n[o];if(i?.route_type!=="wire")continue;let r=n[o+1];if(r?.route_type==="wire"&&r.layer===i.layer)continue;let s=e.length-o-1;while(s<e.length-1){let c=e[s],l=e[s+1];if(c?.route_type!=="wire"||l?.route_type!=="wire"||c.layer!==l.layer)break;s++}let a=e[s];if(a?.route_type==="wire")i.width=a.width}}for(let o=0;o<e.length-1;o++){let i=e[o],r=e[o+1];if(i.route_type!=="wire"||!i.width_interpolation_mode)continue;if(r.route_type!=="wire"||r.layer!==i.layer)continue;let s=n[e.length-o-2];if(s.route_type!=="wire")continue;Object.assign(s,{width:i.end_width,start_width:i.end_width,end_width:i.start_width,width_interpolation_mode:i.width_interpolation_mode})}return n};function sW(e,t){let n=GT(e),o=GT(t);return Math.hypot(n.x-o.x,n.y-o.y)}var Rni=(e)=>{if(e.length===1)return e[0];if(e.some((c)=>c.length===0))throw Error("Cannot merge routes with zero length");let t=[],n=e[0][0],o=e[0][e[0].length-1],i=e[1][0],r=e[1][e[1].length-1],s=Math.min(sW(n,i),sW(n,r)),a=Math.min(sW(o,i),sW(o,r));if(s<a)t.push(...hxe(e[0]));else t.push(...e[0]);for(let c=1;c<e.length;c++){let l=t[t.length-1],d=e[c],u=d[0],h=d[d.length-1],A=sW(l,u),m=sW(l,h);if(A<m)t.push(...d);else t.push(...hxe(d))}for(let c=1;c<t.length-1;c++){let l=t[c-1],d=t[c];if(l.route_type!=="wire")continue;if(d.route_type!=="wire")continue;if(l.layer!==d.layer)t.splice(c,0,{x:l.x,y:l.y,from_layer:l.layer,to_layer:d.layer,route_type:"via"})}return t};function bYe(e,t){if(e.length<2||!e.some((o)=>o.physicalPinName))return;let n=e.map((o)=>`${o.getParentNormalComponent()?.name??"unnamed component"}.${o.physicalPinName??o.name}`);throw Error(`Ambiguous port "${t}"; use a physical ball name: ${n.join(", ")}.`)}var kqt=new WeakMap,Qni=(e)=>{let t=kqt.get(e);if(!t)t="partial"in e?e.partial({name:!0}):e,kqt.set(e,t);return t},Lqt=new WeakMap,kni=(e,t)=>{let n=Lqt.get(e);if(!n){n=new Map;for(let o of e)for(let i of o.getNameAndAliases().join(" ").split(/\s+/)){let r=`net.${i}`;if(!n.has(r))n.set(r,o)}Lqt.set(e,n)}return n.get(t)??null},wye=Fon.default("tscircuit:renderable"),XL=["ReactSubtreesRender","RenderIsolatedSubcircuits","InflateSubcircuitCircuitJson","SourceNameDuplicateComponentRemoval","PcbFootprintStringRender","FetchPartFootprint","ResolveFootprintPinLabels","InitializePortsFromChildren","CreateNetsFromProps","AssignFallbackProps","CreateTracesFromProps","CreateTracesFromNetLabels","CreateTraceHintsFromProps","CreateAutoplacedBreakoutPoints","SourceGroupRender","AssignNameToUnnamedComponents","SourceRender","CheckRefDesConvention","SourceComponentPropertyValidation","SourceParentAttachment","PortMatching","OptimizeSelectorCache","SourceTraceRender","SourceAddConnectivityMapKey","SourceDesignRuleChecks","SimulationRender","SchematicComponentRender","SchematicPortRender","SymbolContainerRender","SchematicPrimitiveRender","SchematicSymbolResize","SchematicComponentSizeCalculation","SchematicLayout","SchematicSectionRender","SchematicTraceRender","SchematicSheetRender","SchematicReplaceNetLabelsWithSymbols","SchematicLabelNetsWithConflictingNames","PanelBoardLayout","ValidatePcbCoordinates","PcbComponentRender","PcbPrimitiveRender","PcbFootprintLayout","PcbPortRender","PcbPortAttachment","PcbComponentSizeCalculation","PcbComponentAnchorAlignment","PcbCalcPlacementResolution","PcbLayout","PcbBoardAutoSize","PanelLayout","PcbFlexRender","PcbAutoplaceBreakoutPoints","PcbTraceHintRender","PcbManualTraceRender","PcbPlacementDesignRuleChecks","PcbTraceRender","PcbRouteNetIslands","PcbTraceTeardropRender","PcbCopperPourRender","PcbViaStitchRender","PcbCopperPourCleanup","PcbSimulationRender","PcbDesignRuleChecks","SilkscreenOverlapAdjustment","CadModelRender","PartsEngineRender","MissingManufacturerPartNumberWarning","ComponentAvailabilityWarning","PartOrientationAnalysis","SupplierFootprintMismatchWarning","SimulationSpiceEngineRender"],Fqt=new Map(XL.map((e,t)=>[e,t])),Lni={InflateSubcircuitCircuitJson:["RenderIsolatedSubcircuits"],ResolveFootprintPinLabels:["PcbFootprintStringRender","FetchPartFootprint"],SchematicComponentRender:["PcbFootprintStringRender","FetchPartFootprint"],SchematicPortRender:["PcbFootprintStringRender","FetchPartFootprint"],SymbolContainerRender:["PcbFootprintStringRender","FetchPartFootprint"],SchematicPrimitiveRender:["PcbFootprintStringRender","FetchPartFootprint"],SchematicSymbolResize:["PcbFootprintStringRender","FetchPartFootprint"],SchematicComponentSizeCalculation:["PcbFootprintStringRender","FetchPartFootprint"],SchematicLayout:["PcbFootprintStringRender","FetchPartFootprint"],SchematicSectionRender:["PcbFootprintStringRender","FetchPartFootprint"],SchematicTraceRender:["PcbFootprintStringRender","FetchPartFootprint"],SchematicSheetRender:["PcbFootprintStringRender","FetchPartFootprint"],SchematicReplaceNetLabelsWithSymbols:["PcbFootprintStringRender","FetchPartFootprint"],SchematicLabelNetsWithConflictingNames:["RenderIsolatedSubcircuits","PcbFootprintStringRender","FetchPartFootprint","SchematicTraceRender"],PcbFootprintLayout:["PcbFootprintStringRender","FetchPartFootprint"],PcbComponentSizeCalculation:["PcbFootprintStringRender","FetchPartFootprint"],PcbLayout:["PcbFootprintStringRender","FetchPartFootprint"],PcbBoardAutoSize:["PcbFootprintStringRender","FetchPartFootprint"],PcbTraceHintRender:["PcbFootprintStringRender","FetchPartFootprint"],PcbManualTraceRender:["PcbFootprintStringRender","FetchPartFootprint"],PcbTraceTeardropRender:["PcbTraceRender","PcbRouteNetIslands"],PcbCopperPourRender:["PcbFootprintStringRender","FetchPartFootprint","PcbPlacementDesignRuleChecks","PcbTraceRender","PcbRouteNetIslands","PcbTraceTeardropRender"],PcbViaStitchRender:["PcbFootprintStringRender","FetchPartFootprint","PcbPlacementDesignRuleChecks","PcbTraceRender","PcbRouteNetIslands","PcbCopperPourRender"],PcbPlacementDesignRuleChecks:["PcbFootprintStringRender","FetchPartFootprint"],PcbCopperPourCleanup:["PcbFootprintStringRender","FetchPartFootprint","PcbPlacementDesignRuleChecks","PcbTraceRender","PcbRouteNetIslands","PcbCopperPourRender","PcbViaStitchRender"],PcbTraceRender:["PcbFootprintStringRender","FetchPartFootprint"],PcbRouteNetIslands:["PcbFootprintStringRender","FetchPartFootprint","PcbPlacementDesignRuleChecks"],PcbDesignRuleChecks:["PcbFootprintStringRender","FetchPartFootprint","PcbPlacementDesignRuleChecks","PcbTraceRender","PcbCopperPourRender","PcbViaStitchRender","PcbCopperPourCleanup"],PcbSimulationRender:["PcbFootprintStringRender","FetchPartFootprint","PcbPlacementDesignRuleChecks","PcbTraceRender","PcbRouteNetIslands","PcbCopperPourRender","PcbViaStitchRender","PcbCopperPourCleanup"],SilkscreenOverlapAdjustment:["PcbFootprintStringRender","FetchPartFootprint"],CadModelRender:["PcbFootprintStringRender","FetchPartFootprint"],PartsEngineRender:["PcbFootprintStringRender","FetchPartFootprint"],MissingManufacturerPartNumberWarning:["PcbFootprintStringRender","FetchPartFootprint","PartsEngineRender"],ComponentAvailabilityWarning:["PcbFootprintStringRender","FetchPartFootprint","PartsEngineRender"],PartOrientationAnalysis:["PcbFootprintStringRender","FetchPartFootprint","PartsEngineRender"],SupplierFootprintMismatchWarning:["PcbFootprintStringRender","FetchPartFootprint","PartsEngineRender"],SourceAddConnectivityMapKey:["PcbFootprintStringRender","FetchPartFootprint"],PcbComponentAnchorAlignment:["PcbFootprintStringRender","FetchPartFootprint"],PcbCalcPlacementResolution:["PcbFootprintStringRender","FetchPartFootprint"],ValidatePcbCoordinates:["PcbFootprintStringRender","FetchPartFootprint"],SourceTraceRender:["PcbFootprintStringRender","FetchPartFootprint"],SourceDesignRuleChecks:["PcbFootprintStringRender","FetchPartFootprint"]},Fni=0,Hni=0,Hon=class e{_phaseStatesByName;_phaseStatesByIndex;get renderPhaseStates(){return this._phaseStatesByName??=Object.fromEntries(XL.map((t,n)=>[t,this._phaseStatesByIndex[n]]))}set renderPhaseStates(t){this._phaseStatesByName=t}shouldBeRemoved=!1;children;isPcbPrimitive=!1;isSchematicPrimitive=!1;_renderId;_currentRenderPhase=null;_pcbTraceRenderWaitingForPlacementChecks=!1;_asyncEffects=[];parent=null;constructor(t){this._renderId=`${Fni++}`,this.children=[],this._phaseStatesByIndex=Array.from({length:XL.length},()=>({initialized:!1,dirty:!1}))}_markDirty(t){let n=Fqt.get(t);for(let o=n;o<XL.length;o++){let i=this._phaseStatesByName?.[XL[o]]??this._phaseStatesByIndex[o];i.dirty=!0}if(this.parent?._markDirty)this.parent._markDirty(t)}_queueAsyncEffect(t,n){let o=`${this._renderId}:${Hni++}`,i={asyncEffectId:o,promise:n(),phase:this._currentRenderPhase,effectName:t,complete:!1};this._asyncEffects.push(i);let r=this._getRootCircuit();if(r)r.emit("asyncEffect:start",{asyncEffectId:o,effectName:t,componentDisplayName:this.getString(),phase:i.phase});i.promise.then(()=>{i.complete=!0;let s=this._getRootCircuit();if(s)s.emit("asyncEffect:end",{asyncEffectId:o,effectName:t,componentDisplayName:this.getString(),phase:i.phase})}).catch((s)=>{console.error(`Async effect error in ${i.phase} "${t}":
${s.stack}`),i.complete=!0;let a=this._getRootCircuit();if(a)a.emit("asyncEffect:end",{asyncEffectId:o,effectName:t,componentDisplayName:this.getString(),phase:i.phase,error:s.toString()})})}_emitRenderLifecycleEvent(t,n){let o=this._getRootCircuit();if(o?._hasRenderLifecycleListeners===!1&&!wye.enabled)return;let i=`renderable:renderLifecycle:${t}:${n}`,r=o&&(!o.hasEventListener||o.hasEventListener(i)||o.hasEventListener("renderable:renderLifecycle:anyEvent"));if(!wye.enabled&&!r)return;let s=this.getString();if(wye.enabled)wye(`${t}:${n} ${s}`);if(!r)return;let a={renderId:this._renderId,componentDisplayName:s,type:i};o.emit(i,a),o.emit("renderable:renderLifecycle:anyEvent",{...a,type:i})}getString(){return this.constructor.name}_hasIncompleteAsyncEffects(){if(this._asyncEffects.some((t)=>!t.complete))return!0;return this.children.some((t)=>typeof t._hasIncompleteAsyncEffects==="function"?t._hasIncompleteAsyncEffects():!1)}_hasIncompleteAsyncEffectsInSubtreeForPhase(t){for(let n of this._asyncEffects)if(!n.complete&&n.phase===t)return!0;for(let n of this.children)if(n._hasIncompleteAsyncEffectsInSubtreeForPhase(t))return!0;return!1}_hasIncompleteAsyncEffectsForPhase(t){let n=this._getRootCircuit();if(n?._hasIncompleteAsyncEffectsForPhase)return n._hasIncompleteAsyncEffectsForPhase(t);return this._hasIncompleteAsyncEffectsInSubtreeForPhase(t)}getCurrentRenderPhase(){return this._currentRenderPhase}getRenderGraph(){return{id:this._renderId,currentPhase:this._currentRenderPhase,renderPhaseStates:this.renderPhaseStates,shouldBeRemoved:this.shouldBeRemoved,children:this.children.map((t)=>t.getRenderGraph())}}getTopLevelRenderable(){let t=this;while(t.parent&&t.parent instanceof e)t=t.parent;return t}runRenderCycle(){for(let t of XL)this.runRenderPhaseForChildren(t),this.runRenderPhase(t)}runRenderPhase(t){this._currentRenderPhase=t;let n=Fqt.get(t),o=this._phaseStatesByName?.[t]??this._phaseStatesByIndex[n],{initialized:i,dirty:r}=o;if(!i&&this.shouldBeRemoved)return;if(this.shouldBeRemoved&&i){this._emitRenderLifecycleEvent(t,"start"),this?.[`remove${t}`]?.(),o.initialized=!1,o.dirty=!1,this._emitRenderLifecycleEvent(t,"end");return}let s=n-1;if(this._asyncEffects.length>0&&s>=0){let c=XL[s];if(this._asyncEffects.some((d)=>d.phase===c&&!d.complete))return}let a=Lni[t]||[];if(a.length>0){for(let c of a)if(this._hasIncompleteAsyncEffectsForPhase(c))return}if(this._emitRenderLifecycleEvent(t,"start"),i){if(r)this?.[`update${t}`]?.(),o.dirty=!1;this._emitRenderLifecycleEvent(t,"end");return}o.dirty=!1,this?.[`doInitial${t}`]?.(),o.initialized=!0,this._emitRenderLifecycleEvent(t,"end")}runRenderPhaseForChildren(t){for(let n of this.children){if(t==="RenderIsolatedSubcircuits"&&"_isIsolatedSubcircuit"in this&&this._isIsolatedSubcircuit&&"doInitialRenderIsolatedSubcircuits"in this)continue;n.runRenderPhaseForChildren(t),n.runRenderPhase(t)}}_getRootCircuit(){if("root"in this)return this.root??null;return null}renderError(t){if(typeof t==="string")throw Error(t);throw Error(JSON.stringify(t,null,2))}},Oon=class extends Error{constructor(e,t,n){let o,i=Object.keys(n).filter((c)=>c!=="_errors"),r=[],s=t.pinLabels;if(s)for(let[c,l]of Object.entries(s)){let d=Array.isArray(l)?l:[l];for(let u of d)if(typeof u==="string"&&(u.startsWith(" ")||u.endsWith(" ")))r.push(`pinLabels.${c} ("${u}" has leading or trailing spaces)`)}let a=i.map((c)=>{if(c==="pinLabels"&&r.length>0)return r.join(", ");if(n[c]._errors[0])return`${c} (${n[c]._errors[0]})`;return`${c} (${JSON.stringify(n[c])})`}).join(", ");if("name"in t)o=`Invalid props for ${e} "${t.name}": ${a}`;else if("footprint"in t&&typeof t.footprint==="string")o=`Invalid props for ${e} (unnamed ${t.footprint} component): ${a}`;else o=`Invalid props for ${e} (unnamed): ${a}`;super(o);this.componentName=e,this.originalProps=t,this.formattedError=n}componentName;originalProps;formattedError},zon={mm:1};function Oni(e,t){let{knownVariables:n,units:o}=t,i={...zon,...o??{}},r=Gon(Yon(e)),s=Von(r,i);return zni(s,n)}function SYe(e){let t=Gon(Yon(e));return Von(t,zon).filter((o)=>o.type==="identifier").map((o)=>o.value)}function Gon(e){let t={minx:"minX",maxx:"maxX",miny:"minY",maxy:"maxY"};return e.replace(/\.(minx|maxx|miny|maxy)\b/gi,(n,o)=>`.${t[String(o).toLowerCase()]??n.slice(1)}`)}function Yon(e){let t=e.trim();if(!t.toLowerCase().startsWith("calc"))return t;let n=t.match(/^calc\s*\((.*)\)$/is);if(!n)throw Error(`Invalid calc() expression: "${e}"`);return n[1].trim()}function Von(e,t){let n=[],o=0,i=(a)=>a>="0"&&a<="9",r=(a)=>a>="A"&&a<="Z"||a>="a"&&a<="z"||a==="_",s=(a)=>r(a)||i(a)||a===".";while(o<e.length){let a=e[o];if(a===" "||a==="\t"||a===`
`||a==="\r"){o++;continue}if(i(a)||a==="."&&o+1<e.length&&i(e[o+1])){let c=o;o++;while(o<e.length){let h=e[o];if(i(h)||h===".")o++;else break}let l=e.slice(c,o),d=Number(l);if(Number.isNaN(d))throw Error(`Invalid number: "${l}"`);let u=o;while(o<e.length&&/[A-Za-z]/.test(e[o]))o++;if(o>u){let h=e.slice(u,o),A=t[h];if(A==null)throw Error(`Unknown unit: "${h}"`);d*=A}n.push({type:"number",value:d});continue}if(r(a)){let c=o;o++;while(o<e.length&&s(e[o]))o++;let l=e.slice(c,o);n.push({type:"identifier",value:l});continue}if(a==="("||a===")"){n.push({type:"paren",value:a}),o++;continue}if(a==="+"||a==="-"||a==="*"||a==="/"){n.push({type:"operator",value:a}),o++;continue}throw Error(`Unexpected character "${a}" in expression "${e}"`)}return n}function zni(e,t){let n=0,o=()=>e[n],i=()=>e[n++],r=()=>{let d=o();if(!d)throw Error("Unexpected end of expression");if(d.type==="number")return i(),d.value;if(d.type==="identifier"){i();let u=t[d.value];if(u==null)throw Error(`Unknown variable: "${d.value}"`);return u}if(d.type==="paren"&&d.value==="("){i();let u=c(),h=o();if(!h||h.type!=="paren"||h.value!==")")throw Error('Expected ")"');return i(),u}throw Error(`Unexpected token "${d.value}"`)},s=()=>{let d=o();if(d&&d.type==="operator"&&(d.value==="+"||d.value==="-")){i();let u=s();return d.value==="+"?u:-u}return r()},a=()=>{let d=s();while(!0){let u=o();if(!u||u.type!=="operator")break;if(u.value!=="*"&&u.value!=="/")break;i();let h=s();if(u.value==="*")d*=h;else d/=h}return d},c=()=>{let d=a();while(!0){let u=o();if(!u||u.type!=="operator")break;if(u.value!=="+"&&u.value!=="-")break;i();let h=a();if(u.value==="+")d+=h;else d-=h}return d},l=c();if(n<e.length){let d=e.slice(n).map((u)=>("value"in u)?u.value:"?").join(" ");throw Error(`Unexpected tokens at end of expression: ${d}`)}return l}function Uon(e){let{vars:t,componentName:n,position:o,size:i}=e;t[`${n}.x`]=o.x,t[`${n}.y`]=o.y,t[`${n}.width`]=i.width,t[`${n}.height`]=i.height,t[`${n}.minX`]=o.x-i.width/2,t[`${n}.maxX`]=o.x+i.width/2,t[`${n}.minY`]=o.y-i.height/2,t[`${n}.maxY`]=o.y+i.height/2}function Gni(e){let t={};for(let n of e.source_component.list()){if(!n.name)continue;let o=e.pcb_component.getWhere({source_component_id:n.source_component_id});if(!o)continue;Uon({vars:t,componentName:n.name,position:{x:o.center.x,y:o.center.y},size:{width:o.width??0,height:o.height??0}})}return t}var Yni={from_left:{x:-1,y:0,z:0},from_right:{x:1,y:0,z:0},from_top:{x:0,y:1,z:0},from_bottom:{x:0,y:-1,z:0},from_above:{x:0,y:0,z:1},from_below:{x:0,y:0,z:-1}},boe=(e)=>{let{componentLayer:t,originalLayer:n}=e;return t==="bottom"!==(n==="bottom")},PYe=(e)=>{let{insertionDirection:t,rotationDegrees:n=0,isFlipped:o=!1}=e;if(!t)return;let i=Mce[t],r=Yni[i],s=_o(wa(pu(n)*Math.PI/180),o?d7():Il()),a=tt(s,r);return{x:a.x,y:a.y,z:o?-r.z:r.z}},Vni=(e)=>{let t=PYe(e);if(!t)return;if(t.z!==0)return t.z>0?"from_above":"from_below";if(Math.abs(t.x)>=Math.abs(t.y))return t.x>=0?"from_right":"from_left";return t.y>=0?"from_top":"from_bottom"};function Uni(e){if(!e)return;let t={},n={};if(e.silkscreenFontSize!==void 0)n.fontSize=e.silkscreenFontSize;if(e.silkscreenTextVisibility!==void 0)n.visibility=e.silkscreenTextVisibility;if(Object.keys(n).length>0)t["& silkscreentext"]=n;if(Object.keys(t).length===0)return;return t}function Wni({parentResolvedPcbSx:e,pcbStyle:t,ownPcbSx:n}){let o=Uni(t),i={},r=new Set;if(e)for(let s of Object.keys(e))r.add(s);if(o)for(let s of Object.keys(o))r.add(s);if(n)for(let s of Object.keys(n))r.add(s);for(let s of r)i[s]={...e?.[s],...o?.[s],...n?.[s]};return i}function MUe(e,t){let n=["right","up","left","down"],o=n.indexOf(e);if(o===-1)return e;let i=Math.round(t/90),r=(o+i)%4;return n[r<0?r+4:r]}function BUe(e,t){if(!e)return e;let n=e,o=n.match(/_(right|left|up|down)$/);if(o)n=n.replace(o[0],`_${MUe(o[1],t)}`);let i=n.match(/_(horz|vert)$/);if(i&&wUe(t))n=n.replace(i[0],i[1]==="horz"?"_vert":"_horz");return n}function wUe(e){let t=(Math.round(e)%360+360)%360;return t===90||t===270}function vYe(e,t){if(!wUe(t))return e;return{width:e.height,height:e.width}}function Lze(e,t){let n=t.match(/^#(\w+)/);if(n)return e.props.id===n[1];let o=t.match(/^\.(\w+)/);if(o)return e.isMatchingNameOrAlias(o[1]);let[i,...r]=t.split(/(?=[#.[])/);if(i==="pin")i="port";if(i&&i!=="*"&&e.lowercaseComponentName!==i.toLowerCase())return!1;return r.every((s)=>{if(s.startsWith("#"))return e.props.id===s.slice(1);if(s.startsWith("."))return e.isMatchingNameOrAlias(s.slice(1));let a=s.match(/\[(\w+)=['"]?(.+?)['"]?\]/);if(!a)return!0;let[,c,l]=a;return e.props[c].toString()===l})}var mX={isTag:(e)=>!0,getParent:(e)=>e.parent,getChildren:(e)=>e.children,getName:(e)=>e.lowercaseComponentName,getAttributeValue:(e,t)=>{if(t==="class"&&"getNameAndAliases"in e)return e.getNameAndAliases().join(" ");if(t==="name"&&e._parsedProps?.name)return e._parsedProps.name;if(e._parsedProps&&t in e._parsedProps){let i=e._parsedProps[t];return typeof i==="string"?i:i!==null&&i!==void 0?String(i):null}let n=Object.keys(e._parsedProps??{}).find((i)=>i.toLowerCase()===t);if(n){let i=e._parsedProps[n];return typeof i==="string"?i:i!==null&&i!==void 0?String(i):null}if(t in e){let i=e[t];return typeof i==="string"?i:i!==null&&i!==void 0?String(i):null}let o=e._attributeLowerToCamelNameMap;if(o){let i=o[t];if(i&&i in e){let r=e[i];return typeof r==="string"?r:r!==null&&r!==void 0?String(r):null}}return null},hasAttrib:(e,t)=>{if(t==="class")return!!e._parsedProps?.name;if(e._parsedProps&&t in e._parsedProps)return!0;if(Object.keys(e._parsedProps??{}).some((o)=>o.toLowerCase()===t))return!0;if(t in e)return!0;let n=e._attributeLowerToCamelNameMap;if(n){let o=n[t];if(o&&o in e)return!0}return!1},getSiblings:(e)=>{if(!e.parent)return[];return e.parent.children},prevElementSibling:(e)=>{if(!e.parent)return null;let t=e.parent.children,n=t.indexOf(e);return n>0?t[n-1]:null},getText:()=>"",removeSubsets:(e)=>e.filter((t,n)=>!e.some((o,i)=>n!==i&&o!==t&&o.getDescendants().includes(t))),existsOne:(e,t)=>t.some(e),findAll:(e,t)=>{let n=[],o=(i)=>{if(e(i))n.push(i);for(let r of i.children)o(r)};for(let i of t)o(i);return n},findOne:(e,t)=>{for(let n of t){if(e(n))return n;let o=n.children;if(o.length>0){let i=mX.findOne(e,o);if(i)return i}}return null},equals:(e,t)=>e._renderId===t._renderId,isHovered:(e)=>!1,isVisited:(e)=>!1,isActive:(e)=>!1},Xni={...mX,getChildren:(e)=>e.children.filter((t)=>!t.isSubcircuit)},Hqt={...mX,getChildren:(e)=>e.children.filter((t)=>t.isSubcircuit)},Kni=(e,t)=>{let n=e.split("net.")[1]?.split(/[ >]/)[0]??e;return`Net names cannot contain "+" or "-" (component "${t?.componentName??"Unknown component"}" received "${n}" via "${e}"). Try using underscores instead, e.g. VCC_P`},mxe=(e,t)=>{if(/net\.[^\s>]*\./.test(e))throw Error('Net names cannot contain a period, try using "sel.net..." to autocomplete with conventional net names, e.g. V3_3');if(/net\.[^\s>]*[+-]/.test(e))throw Error(Kni(e,t));if(/net\.[0-9]/.test(e)){let n=e.match(/net\.([^ >]+)/),o=n?n[1]:"";throw Error(`Net name "${o}" cannot start with a number, try using a prefix like "VBUS1"`)}return e.replace(/ pin(?=[\d.])/g," port").replace(/ subcircuit\./g," group[isSubcircuit=true]").replace(/([^ ])\>([^ ])/g,"$1 > $2").replace(/(^|[ >])(?!pin\.)(?!port\.)(?!net\.)([A-Z][A-Za-z0-9_-]*)\.([A-Za-z0-9_-]+)/g,(n,o,i,r)=>{let s=/^\d+$/.test(r)?`pin${r}`:r;return`${o}.${i} > .${s}`}).trim()},Fze={adapter:Xni,cacheResults:!0},jni={componentName:"",zodProps:at({}).passthrough()},jo=class extends Hon{parent=null;_childrenVersion=0;children;childrenPendingRemoval;get config(){return jni}props;_parsedProps;get componentName(){return this.config.componentName}getInheritedProperty(e){let t=this;while(t){if(t._parsedProps&&e in t._parsedProps)return t._parsedProps[e];t=t.parent}if(this.root?.platform&&e in this.root.platform)return this.root.platform[e];return}getInheritedMergedProperty(e){let t=this.parent?.getInheritedMergedProperty?.(e),n=this._parsedProps?.[e];return{...t,...n}}getResolvedPcbSx(){return Wni({parentResolvedPcbSx:this.parent?.getResolvedPcbSx?.(),pcbStyle:this._parsedProps?.pcbStyle,ownPcbSx:this._parsedProps?.pcbSx})}getSchematicSectionName(){return this._parsedProps?.schSectionName??null}get lowercaseComponentName(){return this.componentName.toLowerCase()}externallyAddedAliases;get isSubcircuit(){return Boolean(this.props.subcircuit)||this.lowercaseComponentName==="group"&&this?.parent?.isRootCircuit}get isGroup(){return this.lowercaseComponentName==="group"}get isRoutingDirective(){return!1}get name(){return this._parsedProps.name??this.fallbackUnassignedName}isPrimitiveContainer=!1;canHaveTextChildren=!1;source_group_id=null;source_component_id=null;schematic_component_id=null;schematic_sheet_id=null;pcb_component_id=null;cad_component_id=null;_reportedInvalidPcbCalcWarnings=new Set;_reportInvalidComponentPropertyError(e,t){if(!this.root||this._reportedInvalidPcbCalcWarnings.has(e))return;this.root.db.source_invalid_component_property_error.insert({source_component_id:this.source_component_id||"",property_name:e,message:t,error_type:"source_invalid_component_property_error"}),this._reportedInvalidPcbCalcWarnings.add(e)}fallbackUnassignedName;constructor(e){super(e);this.children=[],this.childrenPendingRemoval=[],this.props=e??{},this.externallyAddedAliases=[];let n=Qni(this.config.zodProps).safeParse(e??{});if(n.success)this._parsedProps=n.data;else throw new Oon(this.lowercaseComponentName,this.props,n.error.format())}setProps(e){let t=this.config.zodProps.parse({...this.props,...e}),n=this.props;this.props=t,this._parsedProps=this.config.zodProps.parse(e),this.onPropsChange({oldProps:n,newProps:t,changedProps:Object.keys(e)}),this.parent?.onChildChanged?.(this)}_getPcbRotationBeforeLayout(){let{pcbRotation:e}=this.props;if(typeof e==="string")return parseFloat(e);return e??null}getResolvedPcbPositionProp(){return{pcbX:this._resolvePcbCoordinate(this._parsedProps.pcbX,"pcbX"),pcbY:this._resolvePcbCoordinate(this._parsedProps.pcbY,"pcbY")}}doInitialValidatePcbCoordinates(){if(this.root?.pcbDisabled)return;let e=this.props,{pcbX:t,pcbY:n}=e;this._validatePcbCoordinateReferences({rawValue:t,axis:"pcbX",propertyName:"pcbX"}),this._validatePcbCoordinateReferences({rawValue:n,axis:"pcbY",propertyName:"pcbY"})}_validatePcbCoordinateReferences(e){let{rawValue:t,axis:n,propertyName:o=n}=e;if(typeof t!=="string")return;let r=this._isNormalComponent!==!0&&!this._isInsideFootprint(),s=[];try{s=SYe(t)}catch{this._reportInvalidComponentPropertyError(o,`Invalid ${o} value for ${this.componentName}: Invalid calc() expression. expression="${t}"`);return}if(s.some((c)=>!c.startsWith("board."))&&!r)this._reportInvalidComponentPropertyError(o,`Invalid ${o} value for ${this.componentName}: component-relative calc references are not supported for footprint elements (${this.componentName}); ${o} will be ignored. expression="${t}"`)}_resolvePcbCoordinate(e,t,n={}){if(e==null)return 0;let o=n.propertyName??t;if(typeof e==="number"){if(Number.isFinite(e))return e;return 0}if(typeof e!=="string")throw Error(`Invalid ${t} value for ${this.componentName}: ${String(e)}`);let i=n.allowBoardVariables??this._shouldAllowBoardVariablesByDefault(),r=this._isNormalComponent===!0,s=n.allowComponentVariables??(!r&&!this._isInsideFootprint()),a=e.includes("board."),c={};if(i){let l=this._getBoard(),d=l?._getBoardCalcVariables()??{};if(a&&!l)return this._reportInvalidComponentPropertyError(o,`Invalid ${o} value for ${this.componentName}: no board found for board.* variables. expression="${e}"`),0;if(a&&l&&Object.keys(d).length===0)return this._reportInvalidComponentPropertyError(o,`Invalid ${o} value for ${this.componentName}: Cannot do calculations based on board size when the board is auto-sized. expression="${e}"`),0;Object.assign(c,d)}if(s){let l=this.root?.db;if(l)Object.assign(c,Gni(l));Object.assign(c,n.componentVariables??{})}try{if(SYe(e).some((u)=>!u.startsWith("board."))&&!s){if(this._isInsideFootprint()&&this.root&&!this._reportedInvalidPcbCalcWarnings.has(t))this.root.db.source_invalid_component_property_error.insert({source_component_id:this.source_component_id||"",property_name:t,message:`component-relative calc references are not supported for footprint elements (${this.componentName}); ${t} will be ignored. expression="${e}"`,error_type:"source_invalid_component_property_error"}),this._reportedInvalidPcbCalcWarnings.add(t);return 0}return Oni(e,{knownVariables:c})}catch(l){let d=l instanceof Error?l.message:String(l);return this._reportInvalidComponentPropertyError(o,`Invalid ${o} value for ${this.componentName}: ${d}. expression="${e}"`),0}}_shouldAllowBoardVariablesByDefault(){if(this._isNormalComponent===!0)return!0;return!this._isInsideFootprint()&&!this._isInsideNonBoardSubcircuit()}_isInsideFootprint(){let e=this.parent;while(e){if(e.componentName==="Footprint")return!0;e=e.parent}return!1}_isInsideNonBoardSubcircuit(){let e=this.parent;while(e){let t=e.componentName;if(t==="Board"||t==="MountedBoard")return!1;if(e.isSubcircuit)return!0;e=e.parent}return!1}_hasUserDefinedPcbPosition(){let e=this._parsedProps;return e.pcbX!==void 0||e.pcbY!==void 0||e.pcbLeftEdgeX!==void 0||e.pcbRightEdgeX!==void 0||e.pcbTopEdgeY!==void 0||e.pcbBottomEdgeY!==void 0}resolvePcbCoordinate(e){let{rawValue:t,axis:n,allowBoardVariables:o,allowComponentVariables:i,componentVariables:r,propertyName:s}=e;return this._resolvePcbCoordinate(t,n,{allowBoardVariables:o,allowComponentVariables:i,componentVariables:r,propertyName:s})}computePcbPropsTransform(){let e=this._getPcbRotationBeforeLayout()??0,{pcbX:t,pcbY:n}=this.getResolvedPcbPositionProp();return _o(So(t,n),wa(e*Math.PI/180))}_computePcbGlobalTransformBeforeLayout(){let e=this.getSubcircuit()._getPcbManualPlacementForComponent(this);if(e&&this.props.pcbX===void 0&&this.props.pcbY===void 0){let t=this._getPcbRotationBeforeLayout()??0;return _o(this.parent?._computePcbGlobalTransformBeforeLayout()??Il(),_o(So(e.x,e.y),wa(t*Math.PI/180)))}if(this.isPcbPrimitive){let{isFlipped:t}=this._getPcbPrimitiveFlippedHelpers();if(t)return _o(this.parent?._computePcbGlobalTransformBeforeLayout()??Il(),d7(),this.computePcbPropsTransform())}return _o(this.parent?._computePcbGlobalTransformBeforeLayout()??Il(),this.computePcbPropsTransform())}_getEnclosingFootprint(){let e=this.parent;while(e){if(e.componentName==="Footprint")return e;e=e.parent}return null}getPrimitiveContainer(){if(this.isPrimitiveContainer)return this;return this.parent?.getPrimitiveContainer?.()??null}_getIsSmt(){let e=this.getPrimitiveContainer();return e&&e!==this?e._getIsSmt():!0}_getSymbolAncestor(){let e=this.getPrimitiveContainer();if(e?.componentName==="Symbol")return e;return null}getParentNormalComponent(){let e=this.parent;while(e){if(e.isPrimitiveContainer&&e.doInitialPcbComponentRender)return e;e=e.parent}return null}getCollapsedSchematicBoxAncestor(){let e=this.parent;while(e){if(e.componentName==="Group"&&e._parsedProps?.showAsSchematicBox)return e;e=e.parent}return null}_resolveText(){let e=this._parsedProps.text;if(!e)return"";if(!e.includes("{NAME}")&&!e.includes("{REF}")&&!e.includes("{REFERENCE}"))return e;let n=this.getParentNormalComponent()?.name;if(!n)return e;return e.replace(/\{NAME\}/g,n).replace(/\{REF\}/g,n).replace(/\{REFERENCE\}/g,n)}emitSolderMaskMarginWarning(e,t){if(e&&t!==void 0){let n=this.getParentNormalComponent();if(n?.source_component_id)this.root.db.source_property_ignored_warning.insert({source_component_id:n.source_component_id,property_name:"solderMaskMargin",message:"solderMaskMargin is set but coveredWithSolderMask is true. When a component is fully covered with solder mask, a margin doesn't apply.",error_type:"source_property_ignored_warning"})}}_getPcbCircuitJsonBounds(){return{center:{x:0,y:0},bounds:{left:0,top:0,right:0,bottom:0},width:0,height:0}}_getPcbLocalBoundsBeforeLayout(){let{width:e,height:t}=this.getPcbSize();return{left:-e/2,right:e/2,top:t/2,bottom:-t/2}}_getPcbBoundsBeforeLayout(){let e=this._getGlobalPcbPositionBeforeLayout(),{width:t,height:n}=this.getPcbSize();return{left:e.x-t/2,right:e.x+t/2,top:e.y+n/2,bottom:e.y-n/2}}_getPcbComponentLayer(){return this._parsedProps.layer}_getPcbPrimitiveFlippedHelpers(){let e=this.getPrimitiveContainer(),t=this.componentName==="Footprint"?this:this._getEnclosingFootprint(),n=e?._getPcbComponentLayer(),o=!e?!1:boe({componentLayer:n,originalLayer:t?._parsedProps.originalLayer});return{isFlipped:o,maybeFlipLayer:(r)=>{if(o)return r==="top"?"bottom":"top";return r}}}_setPositionFromLayout(e){throw Error(`_setPositionFromLayout not implemented for ${this.componentName}`)}computeSchematicPropsTransform(){let{_parsedProps:e}=this;return _o(So(e.schX??0,e.schY??0))}computeSchematicGlobalTransform(){let e=this._getSchematicGlobalManualPlacementTransform(this);if(e)return e;return _o(this.parent?.computeSchematicGlobalTransform?.()??Il(),this.computeSchematicPropsTransform())}_getSchematicSymbolName(){let{_parsedProps:e}=this,t=this.config.schematicSymbolName,n={horizontal:0,pos_left:0,neg_right:0,pos_right:180,neg_left:180,pos_top:270,neg_bottom:90,vertical:270,pos_bottom:90,neg_top:90},o=e.schOrientation!==void 0?n[e.schOrientation]:e.schRotation;if(o===void 0)o=0;if(o=o%360,o<0)o+=360;if(e.schRotation!==void 0&&o%90!==0)throw Error(`Schematic rotation ${e.schRotation} is not supported for ${this.componentName}`);if(/_(horz|vert|up|down|left|right)$/.test(t)&&t in ra){let u=BUe(t,o);if(u&&u in ra)return u;return t}let r=`${t}_horz`,s=`${t}_vert`,a=`${t}_up`,c=`${t}_down`,l=`${t}_left`,d=`${t}_right`;if(d in ra&&o===0)return d;if(a in ra&&o===90)return a;if(l in ra&&o===180)return l;if(c in ra&&o===270)return c;if(r in ra){if(o===0)return r;if(o===180)return r}if(s in ra){if(o===90)return s;if(o===270)return s}if(t in ra)return t;return}_getSchematicSymbolNameOrThrow(){let e=this._getSchematicSymbolName();if(!e)throw Error(`No schematic symbol found (given: "${this.config.schematicSymbolName}")`);return e}getSchematicSymbol(){let e=this._getSchematicSymbolName();if(!e)return null;return ra[e]??null}_getPcbManualPlacementForComponent(e){if(!this.isSubcircuit)return null;let t=this.props.manualEdits;if(!t)return null;let n=t?.pcb_placements;if(!n)return null;for(let o of n)if(Lze(e,o.selector)||e.props.name===o.selector)return tt(this._computePcbGlobalTransformBeforeLayout(),o.center);return null}_getSchematicManualPlacementForComponent(e){if(!this.isSubcircuit)return null;let t=this.props.manualEdits;if(!t)return null;let n=t.schematic_placements;if(!n)return null;for(let o of n)if(Lze(e,o.selector)||e.props.name===o.selector)return tt(this.computeSchematicGlobalTransform(),o.center);return null}_getSchematicGlobalManualPlacementTransform(e){let t=this.getSubcircuit()?._parsedProps.manualEdits;if(!t)return null;for(let n of t.schematic_placements??[])if(Lze(e,n.selector)||e.props.name===n.selector){if(n.relative_to==="group_center")return _o(this.parent?._computePcbGlobalTransformBeforeLayout()??Il(),So(n.center.x,n.center.y))}return null}_getGlobalPcbPositionBeforeLayout(){return tt(this._computePcbGlobalTransformBeforeLayout(),{x:0,y:0})}_getGlobalSchematicPositionBeforeLayout(){return tt(this.computeSchematicGlobalTransform(),{x:0,y:0})}_getBoard(){let e=this;while(e){let t=e,n=t.componentName;if(n==="Board"||n==="MountedBoard")return t;e=e.parent??null}return this.root?._getBoard()}get root(){return this.parent?.root??null}onAddToParent(e){this.parent=e}onPropsChange(e){}onChildChanged(e){this.parent?.onChildChanged?.(e)}add(e){let t=e.__text;if(typeof t==="string"){if(this.canHaveTextChildren||t.trim()==="")return;let n=this._parsedProps?.name,o=n?`<${this.componentName} name="${n}">`:`<${this.componentName}>`,r=/^NaN/.test(t.trim())?` This looks like a numeric expression that evaluated to NaN (e.g. \`\${value}${t.trim().replace(/^NaN/,"")}\` where \`value\` is NaN) — check the computation that produces this value.`:"";throw Error(`Invalid JSX Element: ${o} received stray text "${t}" as a child, but it cannot hold text children. Remove the text or wrap it in an appropriate component.${r}`)}if(Object.keys(e).length===0)return;if(e.lowercaseComponentName==="panel")throw Error("<panel> must be a root-level element");if(!e.onAddToParent)throw Error(`Invalid JSX Element: Expected a React component but received "${JSON.stringify(e)}"`);e.onAddToParent(this),e.parent=this,this.children.push(e),this._childrenVersion++,this._clearSelectorCachesUpTree()}addAll(e){for(let t of e)this.add(t)}remove(e){this.children=this.children.filter((t)=>t!==e),this._childrenVersion++,this.childrenPendingRemoval.push(e),e.shouldBeRemoved=!0,this._clearSelectorCachesUpTree()}_clearSelectorCachesUpTree(){let e=this;while(e)e._cachedSelectAllQueries?.clear(),e._cachedSelectOneQueries?.clear(),e=e.parent}getSubcircuitSelector(){let e=this.name,t=e?`${this.lowercaseComponentName}.${e}`:this.lowercaseComponentName;if(!this.parent)return t;if(this.parent.isSubcircuit)return t;return`${this.parent.getSubcircuitSelector()} > ${t}`}getFullPathSelector(){let e=this.name,t=e?`${this.lowercaseComponentName}.${e}`:this.lowercaseComponentName,n=this.parent?.getFullPathSelector?.();if(!n)return t;return`${n} > ${t}`}getNameAndAliases(){return[this.name,...this._parsedProps.portHints??[]].filter(Boolean)}isMatchingNameOrAlias(e){return this.getNameAndAliases().includes(e)}isMatchingAnyOf(e){return this.getNameAndAliases().some((t)=>e.map((n)=>n.toString()).includes(t))}getPcbSize(){throw Error(`getPcbSize not implemented for ${this.componentName}`)}doesSelectorMatch(e){let t=[this.componentName,this.lowercaseComponentName],n=[this.name].filter(Boolean),o=e.trim().split(/\> /)[0],i=o[0];if(o.length>1)return!1;if(e==="*")return!0;if(e[0]==="#"&&e.slice(1)===this.props.id)return!0;if(e[0]==="."&&n.includes(e.slice(1)))return!0;if(/^[a-zA-Z0-9_]/.test(i)&&t.includes(i))return!0;return!1}getSubcircuit(){if(this.isSubcircuit)return this;let e=this.parent?.getSubcircuit?.();if(!e)throw Error("Component is not inside an opaque group (no board?)");return e}getGroup(){if(this.isGroup)return this;return this.parent?.getGroup?.()??null}_resolveSchematicSheetId(){let e=this._parsedProps?.schSheetName??this.props.schSheetName;if(e){let t=this.root?.db.schematic_sheet.list().find((n)=>n.name===e);if(t)return t.schematic_sheet_id}if(this.schematic_sheet_id)return this.schematic_sheet_id;return this.parent?._resolveSchematicSheetId?.()}doInitialAssignNameToUnnamedComponents(){if(!this._parsedProps.name)this.fallbackUnassignedName=this.getSubcircuit().getNextAvailableName(this)}doInitialOptimizeSelectorCache(){if(!this.isSubcircuit)return;let e=this.selectAll("port"),t=(n)=>/^[A-Za-z_][A-Za-z0-9_-]*$/.test(n);for(let n of e){let i=(n.getParentNormalComponent?.()??n.parent)?.getNameAndAliases(),r=n.getNameAndAliases();if(!i)continue;for(let s of i)for(let a of r){let c=[`.${s} > .${a}`,`.${s} .${a}`];if(t(s)&&t(a))c.push(`${s}.${a}`);for(let l of c){let d=this._cachedSelectAllQueries.get(l);if(d)d.push(n);else this._cachedSelectAllQueries.set(l,[n])}}}for(let[n,o]of this._cachedSelectAllQueries.entries())if(o.length===1)this._cachedSelectOneQueries.set(n,o[0])}updateOptimizeSelectorCache(){this._cachedSelectAllQueries.clear(),this._cachedSelectOneQueries.clear(),this.doInitialOptimizeSelectorCache()}_cachedSelectAllQueries=new Map;selectAll(e){if(this._cachedSelectAllQueries.has(e))return this._cachedSelectAllQueries.get(e);let t=mxe(e,this),n=qQ(t,this,Fze);if(n.length>0)return this._cachedSelectAllQueries.set(e,n),n;let[o,...i]=t.split(" "),r=yY(o,this,{adapter:Hqt});if(!r)return this._cachedSelectAllQueries.set(e,n),n;let s=r.selectAll(i.join(" "));return this._cachedSelectAllQueries.set(e,s),s}_cachedSelectOneQueries=new Map;selectOne(e,t){if(/^net\.[A-Za-z_][A-Za-z0-9_]*$/.test(e)){if(t?.port||t?.type&&t.type!=="net")return null;return kni(this.selectAll("net"),e)}if(this._cachedSelectOneQueries.has(e))return this._cachedSelectOneQueries.get(e);let n=mxe(e,this);if(t?.port)t.type="port";let o=null;if(t?.type){let c=qQ(n,this,Fze).filter((l)=>l.lowercaseComponentName===t.type);if(t.type==="port")bYe(c,e);o=c[0]??null}if(!t?.type)o??=yY(n,this,Fze);if(o){if(!t?.type&&o.componentName==="Port")bYe(this.selectAll(e).filter((a)=>a.componentName==="Port"),e);return this._cachedSelectOneQueries.set(e,o),o}let[i,...r]=n.split(" "),s=yY(i,this,{adapter:Hqt});if(!s)return null;return o=s.selectOne(r.join(" "),t),this._cachedSelectOneQueries.set(e,o),o}getAvailablePcbLayers(){if(this.isPcbPrimitive){let{maybeFlipLayer:e}=this._getPcbPrimitiveFlippedHelpers();if("layer"in this._parsedProps||this.componentName==="SmtPad")return[e(this._parsedProps.layer??"top")];if("layers"in this._parsedProps)return this._parsedProps.layers;if(this.componentName==="PlatedHole")return[...this.root?._getBoard()?.allLayers??["top","bottom"]];return[]}return[]}getDescendants(){let e=[];for(let t of this.children)e.push(t),e.push(...t.getDescendants());return e}getSelectableDescendants(){let e=[];for(let t of this.children)if(t.isSubcircuit)e.push(t);else e.push(t),e.push(...t.getSelectableDescendants());return e}_getPrimaryPinCount(){return 0}_getSchematicBoxDimensions(){return null}_getSchematicBoxComponentDimensions(){if(this.getSchematicSymbol())return null;if(!this.config.shouldRenderAsSchematicBox)return null;let{_parsedProps:e}=this;return{schWidth:e.schWidth,schHeight:e.schHeight}}renderError(e){if(typeof e==="string")return super.renderError(e);switch(e.type){case"pcb_placement_error":this.root?.db.pcb_placement_error.insert(e);break;case"pcb_via_clearance_error":this.root?.db.pcb_via_clearance_error.insert(e);break;case"pcb_trace_error":this.root?.db.pcb_trace_error.insert(e);break;case"pcb_manual_edit_conflict_warning":this.root?.db.pcb_manual_edit_conflict_warning.insert(e);break;default:this.root?.db.pcb_placement_error.insert(e)}}getString(){let{lowercaseComponentName:e,_parsedProps:t,parent:n}=this;if(t?.pinNumber!==void 0&&n?.props?.name&&t?.name)return`<${e}#${this._renderId}(pin:${t.pinNumber} .${n?.props.name}>.${t.name}) />`;if(n?.props?.name&&t?.name)return`<${e}#${this._renderId}(.${n?.props.name}>.${t?.name}) />`;if(t?.from&&t?.to)return`<${e}#${this._renderId}(from:${t.from} to:${t?.to}) />`;if(t?.name)return`<${e}#${this._renderId} name=".${t?.name}" />`;if(t?.portHints)return`<${e}#${this._renderId}(${t.portHints.map((o)=>`.${o}`).join(", ")}) />`;return`<${e}#${this._renderId} />`}getDisplayName(){if(this.name)return`${this.lowercaseComponentName} "${this.name}"`;return`${this.lowercaseComponentName} (unnamed)`}get[Symbol.toStringTag](){return this.getString()}[Symbol.for("nodejs.util.inspect.custom")](){return this.getString()}};function Won(e){let t=[];for(let n=0;n<e.length-1;n++)t.push([e[n],e[n+1]]);return t}var Tie=/(?:^|_)(?:GND|AGND|DGND|PGND|VSS)/i,TUe=/(?:^|_)(?:V(?!SS)|\d+(?:[_.]\d+)?V)/i,gB=class extends jo{source_net_id;subcircuit_connectivity_map_key=null;get config(){return{componentName:"Net",zodProps:Nyt}}getPortSelector(){return`net.${this.props.name}`}doInitialCreateTracesFromProps(){let{connectsTo:e}=this._parsedProps;if(!e)return;if(typeof e==="string")e=[e];for(let t of e)this.add(new qm({from:t,to:this.getPortSelector()}))}doInitialSourceRender(){let{db:e}=this.root,{_parsedProps:t}=this,n=t.isGroundNet??Tie.test(t.name),o=t.isPowerNet??TUe.test(t.name),i=e.source_net.insert({name:t.name,member_source_group_ids:[],is_ground:n,is_power:o,trace_width:t.nominalTraceWidth,is_positive_voltage_source:o});this.source_net_id=i.source_net_id}doInitialSourceParentAttachment(){let e=this.getSubcircuit();if(!e)return;let{db:t}=this.root;t.source_net.update(this.source_net_id,{subcircuit_id:e.subcircuit_id})}getAllConnectedPorts(){let e=this.getSubcircuit().selectAll("port"),t=[];for(let n of e){let o=n._getDirectlyConnectedTraces();for(let i of o)if(i._isExplicitlyConnectedToNet(this)){t.push(n);break}}return t}_getAllDirectlyConnectedTraces(){let e=this.getSubcircuit().selectAll("trace"),t=[];for(let n of e)if(n._isExplicitlyConnectedToNet(this))t.push(n);return t}doInitialPcbRouteNetIslands(){if(this.root?.pcbDisabled)return;let e=this.getSubcircuit();if(this.root?.pcbRoutingDisabled||e.getInheritedProperty("routingDisabled"))return;if(e._isInflatedFromCircuitJson)return;if(e._getAutorouterConfig().groupMode!=="sequential-trace")return;let{db:t}=this.root,{_parsedProps:n}=this,o=this._getAllDirectlyConnectedTraces().filter((s)=>(s._portsRoutedOnPcb?.length??0)>0),i=[];for(let s of o){let a=s._portsRoutedOnPcb,c=i.find((l)=>a.some((d)=>l.ports.includes(d)));if(!c){i.push({ports:[...a],traces:[s]});continue}c.traces.push(s),c.ports.push(...a)}if(i.length===0)return;let r=Won(i);for(let[s,a]of r){let c=s.ports.map((_)=>_._getGlobalPcbPositionBeforeLayout()),l=a.ports.map((_)=>_._getGlobalPcbPositionBeforeLayout()),d=1/0,u=[-1,-1];for(let _=0;_<c.length;_++){let f=c[_];for(let y=0;y<l.length;y++){let x=l[y],C=Math.sqrt((f.x-x.x)**2+(f.y-x.y)**2);if(C<d)d=C,u=[_,y]}}let h=s.ports[u[0]],A=a.ports[u[1]],m=t.toArray().filter((_)=>_.type==="pcb_smtpad"||_.type==="pcb_trace"||_.type==="pcb_plated_hole"||_.type==="pcb_hole"||_.type==="source_port"||_.type==="pcb_port"),{solution:p}=kCt(m.concat([{type:"source_trace",source_trace_id:"__net_trace_tmp",connected_source_port_ids:[h.source_port_id,A.source_port_id]}])),g=p[0];if(!g){this.renderError({pcb_trace_error_id:"",pcb_trace_id:"__net_trace_tmp",pcb_component_ids:[h.pcb_component_id,A.pcb_component_id].filter(Boolean),pcb_port_ids:[h.pcb_port_id,A.pcb_port_id].filter(Boolean),type:"pcb_trace_error",error_type:"pcb_trace_error",message:`Failed to route net islands for "${this.getString()}"`,source_trace_id:"__net_trace_tmp"});return}t.pcb_trace.insert(g)}}renderError(e){if(typeof e==="string")return super.renderError(e);this.root?.db.pcb_trace_error.insert(e)}},Die=(e,t)=>{for(let n of t)if(typeof n==="string"&&n.startsWith("net.")){if(/net\.[^\s>]*\./.test(n))throw Error('Net names cannot contain a period, try using "sel.net..." to autocomplete with conventional net names, e.g. V3_3');if(/net\.[^\s>]*[+-]/.test(n)){let i=n.split("net.")[1],r=`Net names cannot contain "+" or "-" (component "${e.componentName}" received "${i}" via "${n}"). Try using underscores instead, e.g. VCC_P`;throw Error(r)}if(/net\.[0-9]/.test(n)){let i=n.split("net.")[1];throw Error(`Net name "${i}" cannot start with a number, try using a prefix like "VBUS1"`)}let o=e.getSubcircuit();if(!o.selectOne(n)){let i=new gB({name:n.split("net.")[1]});o.add(i)}}},qni=(e,t)=>{let n="_getGlobalPcbPositionBeforeLayout"in e?e._getGlobalPcbPositionBeforeLayout():e,o="_getGlobalPcbPositionBeforeLayout"in t?t._getGlobalPcbPositionBeforeLayout():t;return Math.sqrt((n.x-o.x)**2+(n.y-o.y)**2)};function Oqt(e,t){if(t.length===0)throw Error("No candidates given to getClosest method");let n=t[0],o=1/0;for(let i of t){let r=qni(e,i);if(r<o)n=i,o=r}return n}var Jni=(e)=>{if(e.outline&&e.outline.length>0)return new Dc(e.outline.map((t)=>Nm(t.x,t.y)));return new Dc(new vA(e.center.x-e.width/2,e.center.y-e.height/2,e.center.x+e.width/2,e.center.y+e.height/2).toPoints())},$ni=({mergedRoute:e,db:t,pcbBoardId:n})=>{let o=t.pcb_board.get(n);if(!o)return!1;let i=Jni(o);return!e.flatMap(Lon).every((r)=>i.contains(Nm(r.x,r.y)))},v3=({fromLayer:e,toLayer:t,layerCount:n})=>{if(e===t)return[e];let o=["top"];for(let s=1;s<=n-2;s++)o.push(`inner${s}`);o.push("bottom");let i=o.indexOf(e),r=o.indexOf(t);if(i===-1||r===-1)return[e,t];return i<=r?o.slice(i,r+1):o.slice(r,i+1).reverse()},MF=(e)=>{if(e<=1)return["top"];return v3({fromLayer:"top",toLayer:"bottom",layerCount:e})},Xon=({fromLayer:e,toLayer:t,layerCount:n,allowBlindAndBuriedVias:o=!1,physicalLayers:i})=>{let r=MF(n);if(!o)return r;if(i?.length){let s=new Set(i),a=r.filter((u)=>s.has(u)),c=r.indexOf(a[0]),l=r.indexOf(a[a.length-1]),d=r.slice(c,l+1);if(s.has(e)&&s.has(t)&&s.size===d.length&&d.every((u)=>s.has(u)))return d}return v3({fromLayer:e,toLayer:t,layerCount:n})},DUe=(e)=>{let t=MF(e);if(t.length<=1)return t;return[t[0],t[t.length-1],...t.slice(1,-1)]};function Zni(e,t={}){let{center:n,radius:o}=e,{rectHeight:i=0.1}=t,r=[],s=Math.ceil(o*2/i);for(let a=0;a<s;a++){let c=n.y-o+(a+0.5)*i,l=c-n.y,d=Math.sqrt(o*o-l*l);if(d>0)r.push({center:{x:n.x,y:c},width:d*2,height:i})}return r}function EYe(e,t={}){if(e.length<3)return[];let{rectHeight:n=0.1}=t,o=[],i=e.map((a)=>a.y),r=Math.min(...i),s=Math.max(...i);for(let a=r;a<s;a+=n){let c=a+n/2,l=[];for(let d=0;d<e.length;d++){let u=e[d],h=e[(d+1)%e.length];if(u.y<=c&&h.y>c||h.y<=c&&u.y>c){let A=(c-u.y)*(h.x-u.x)/(h.y-u.y)+u.x;l.push(A)}}l.sort((d,u)=>d-u);for(let d=0;d<l.length;d+=2)if(d+1<l.length){let u=l[d],A=l[d+1]-u;if(A>0.000001)o.push({center:{x:u+A/2,y:c},width:A,height:n})}}return o}var eoi=0.001,toi=(e)=>{let t=(c,l)=>Math.abs(c-l)<=eoi,n=e.filter((c,l)=>l===0||!t(c.x,e[l-1].x)||!t(c.y,e[l-1].y));if(n.length>1&&t(n[0].x,n.at(-1).x)&&t(n[0].y,n.at(-1).y))n.pop();if(n.length<4)return null;let o=Math.min(...n.map((c)=>c.x)),i=Math.max(...n.map((c)=>c.x)),r=Math.min(...n.map((c)=>c.y)),s=Math.max(...n.map((c)=>c.y)),a=[{x:o,y:r},{x:o,y:s},{x:i,y:r},{x:i,y:s}];if(!n.every((c)=>t(c.x,o)||t(c.x,i)||t(c.y,r)||t(c.y,s))||!a.every((c)=>n.some((l)=>t(l.x,c.x)&&t(l.y,c.y))))return null;return{center:{x:(o+i)/2,y:(r+s)/2},width:i-o,height:s-r}},noi=12,ooi=0.99,ioi=0.001,roi=(e)=>{let{outline:t,stroke_width:n}=e,o=t[0],i=t.at(-1);if(!o||!i)return null;if(o.x!==i.x||o.y!==i.y)return null;let r=t.slice(0,-1);if(r.length<noi)return null;let s=Math.min(...r.map(({x:y})=>y)),a=Math.max(...r.map(({x:y})=>y)),c=Math.min(...r.map(({y})=>y)),l=Math.max(...r.map(({y})=>y)),d=a-s,u=l-c,h=Math.max(d,u);if(!Number.isFinite(h)||h<=0||Math.min(d,u)/h<ooi)return null;let A={x:(s+a)/2,y:(c+l)/2},m=r.map(({x:y,y:x})=>Math.hypot(y-A.x,x-A.y));if(Math.max(...m)-Math.min(...m)>h*ioi)return null;let p=r.map(({x:y,y:x})=>Math.atan2(x-A.y,y-A.x)),g=p.map((y,x)=>{let C=p[(x+1)%p.length];return Math.atan2(Math.sin(C-y),Math.cos(C-y))}),_=Math.sign(g[0]);if(_===0||g.some((y)=>Math.sign(y)!==_||Math.abs(y)>4*Math.PI/r.length))return null;let f=h+n;return{center:A,width:f,height:f}},soi=(e,t)=>{let{outline:n,stroke_width:o}=e;if(!Number.isFinite(o)||o<=0)return[];let i=roi(e);if(i)return[{obstacleId:e.pcb_keepout_id,componentId:t,type:"rect",layers:e.layers,...i,connectedTo:[]}];let r=[];for(let c=0;c<n.length-1;c++){let l=n[c],d=n[c+1],u=d.x-l.x,h=d.y-l.y,A=Math.hypot(u,h);if(!Number.isFinite(A)||A===0)continue;r.push({obstacleId:`${e.pcb_keepout_id}_segment_${c}`,componentId:t,type:"rect",layers:e.layers,center:{x:(l.x+d.x)/2,y:(l.y+d.y)/2},width:A,height:o,ccwRotationDegrees:Math.atan2(h,u)*180/Math.PI,connectedTo:[]})}let a=n.length>1&&n[0].x===n.at(-1)?.x&&n[0].y===n.at(-1)?.y?n.slice(0,-1):n;for(let[c,l]of a.entries())r.push({obstacleId:`${e.pcb_keepout_id}_join_${c}`,componentId:t,type:"rect",layers:e.layers,center:l,width:o,height:o,connectedTo:[]});return r},zqt=(e,t)=>Math.abs(e-t)<0.0001,aoi=(e,t,{viaDiameter:n=0.5}={})=>{let o=[];for(let i=0;i<e.length-1;i++){let[r,s]=[e[i],e[i+1]],a=i-1>=0?e[i-1]:null,c=zqt(r.y,s.y),l=zqt(r.x,s.x);if(!c&&!l)throw Error(`getObstaclesFromTrace currently only supports horizontal and vertical traces (not diagonals) Conflicting trace: ${t}, start: (${r.x}, ${r.y}), end: (${s.x}, ${s.y})`);let d={type:"rect",layers:[r.layer],center:{x:(r.x+s.x)/2,y:(r.y+s.y)/2},width:c?Math.abs(r.x-s.x):0.1,height:l?Math.abs(r.y-s.y):0.1,connectedTo:[t]};if(o.push(d),a&&a.layer===r.layer&&r.layer!==s.layer){let u={type:"rect",layers:[r.layer,s.layer],center:{x:r.x,y:r.y},connectedTo:[t],width:n,height:n};o.push(u)}}return o},coi=0.01,Hze=(e)=>{let t=(e.rotation%360+360)%360,n=[0,90,180,270];for(let o of n){if(Math.min(Math.abs(t-o),360-Math.abs(t-o))>coi)continue;let r=o===90||o===270;return{center:e.center,width:r?e.height:e.width,height:r?e.width:e.height}}return null},Kon=(e,t)=>{let n=e.find((u)=>u.type==="pcb_board"),o=MF(n?.num_layers??4),i=new Map(e.flatMap((u)=>u.type==="pcb_component"?[[u.pcb_component_id,u]]:[])),r=new Map(e.flatMap((u)=>u.type==="pcb_port"?[[u.pcb_port_id,u]]:[])),s=new Map(e.flatMap((u)=>u.type==="source_component"?[[u.source_component_id,u]]:[])),a=new Map(e.flatMap((u)=>u.type==="source_port"?[[u.source_port_id,u]]:[])),c=({pcbComponentId:u,pcbPortId:h})=>{let A=h?r.get(h):void 0,m=A?a.get(A.source_port_id):void 0,p=(u?i.get(u)?.source_component_id:void 0)??m?.source_component_id,g=p?s.get(p):void 0;return{...g?.name?{source_component_name:g.name}:{},...m?.name?{source_port_name:m.name}:{}}},l=(u)=>t?u.concat(u.map((h)=>t?.getNetConnectedToId(h)).filter(Boolean)):u,d=[];for(let u of e){let h=u.pcb_component_id??void 0;if(u.type==="pcb_smtpad"){let A={pcb_smtpad_id:u.pcb_smtpad_id,pcb_port_id:u.pcb_port_id,...c({pcbComponentId:h,pcbPortId:u.pcb_port_id})};if(u.shape==="circle")d.push({circuitJsonMetadata:A,componentId:h,type:"rect",shape:"circle",layers:[u.layer],center:{x:u.x,y:u.y},width:u.radius*2,height:u.radius*2,connectedTo:l([u.pcb_smtpad_id])});else if(u.shape==="rect")d.push({circuitJsonMetadata:A,componentId:h,type:"rect",layers:[u.layer],center:{x:u.x,y:u.y},width:u.width,height:u.height,connectedTo:l([u.pcb_smtpad_id])});else if(u.shape==="rotated_rect"){let m={center:{x:u.x,y:u.y},width:u.width,height:u.height,rotation:u.ccw_rotation},p=Hze(m),g=p??m;d.push({circuitJsonMetadata:A,componentId:h,type:"rect",layers:[u.layer],center:g.center,width:g.width,height:g.height,ccwRotationDegrees:p?void 0:u.ccw_rotation,connectedTo:l([u.pcb_smtpad_id])})}else if(u.shape==="pill"||u.shape==="rotated_pill")d.push({circuitJsonMetadata:A,componentId:h,type:"rect",layers:[u.layer],center:{x:u.x,y:u.y},width:u.width,height:u.height,...u.shape==="rotated_pill"?{ccwRotationDegrees:u.ccw_rotation}:{},connectedTo:l([u.pcb_smtpad_id])});else if(u.shape==="polygon"){let m=toi(u.points);if(m){d.push({circuitJsonMetadata:A,componentId:h,type:"rect",layers:[u.layer],...m,connectedTo:l([u.pcb_smtpad_id])});continue}let p=EYe(u.points,{rectHeight:0.1});for(let g of p)d.push({circuitJsonMetadata:A,componentId:h,type:"rect",layers:[u.layer],center:g.center,width:g.width,height:g.height,connectedTo:l([u.pcb_smtpad_id])})}}else if(u.type==="pcb_keepout"){if(u.warning_only||u.allow_traces)continue;if(u.shape==="circle")d.push({componentId:h,type:"rect",layers:u.layers,center:{x:u.center.x,y:u.center.y},width:u.radius*2,height:u.radius*2,connectedTo:[]});else if(u.shape==="rect")d.push({componentId:h,type:"rect",layers:u.layers,center:{x:u.center.x,y:u.center.y},width:u.width,height:u.height,connectedTo:[]});else if(u.shape==="outline")d.push(...soi(u,h))}else if(u.type==="pcb_cutout"){if(u.shape==="rect")d.push({componentId:h,type:"rect",layers:o,center:{x:u.center.x,y:u.center.y},width:u.width,height:u.height,ccwRotationDegrees:u.rotation,connectedTo:[]});else if(u.shape==="circle"){let A=Zni({center:u.center,radius:u.radius},{rectHeight:0.6});for(let m of A)d.push({componentId:h,type:"rect",layers:o,center:m.center,width:m.width,height:m.height,connectedTo:[]})}else if(u.shape==="polygon"){let A=EYe(u.points,{rectHeight:0.6});for(let m of A)d.push({componentId:h,type:"rect",layers:o,center:m.center,width:m.width,height:m.height,connectedTo:[]})}}else if(u.type==="pcb_hole"){if(u.hole_shape==="oval")d.push({componentId:h,obstacleId:u.pcb_hole_id,isNonPlatedHole:!0,type:"rect",layers:o,center:{x:u.x,y:u.y},width:u.hole_width,height:u.hole_height,connectedTo:[]});else if(u.hole_shape==="pill"||u.hole_shape==="rotated_pill")d.push({componentId:h,obstacleId:u.pcb_hole_id,isNonPlatedHole:!0,type:"rect",layers:o,center:{x:u.x,y:u.y},width:u.hole_width,height:u.hole_height,...u.hole_shape==="rotated_pill"?{ccwRotationDegrees:u.ccw_rotation}:{},connectedTo:[]});else if(u.hole_shape==="rect")d.push({componentId:h,obstacleId:u.pcb_hole_id,isNonPlatedHole:!0,type:"rect",layers:o,center:{x:u.x,y:u.y},width:u.hole_width,height:u.hole_height,connectedTo:[]});else if(u.hole_shape==="square")d.push({componentId:h,obstacleId:u.pcb_hole_id,isNonPlatedHole:!0,type:"rect",layers:o,center:{x:u.x,y:u.y},width:u.hole_diameter,height:u.hole_diameter,connectedTo:[]});else if(u.hole_shape==="round"||u.hole_shape==="circle")d.push({componentId:h,obstacleId:u.pcb_hole_id,isNonPlatedHole:!0,type:"rect",shape:"circle",layers:o,center:{x:u.x,y:u.y},width:u.hole_diameter,height:u.hole_diameter,connectedTo:[]})}else if(u.type==="pcb_plated_hole"){let A={pcb_plated_hole_id:u.pcb_plated_hole_id,pcb_port_id:u.pcb_port_id,...c({pcbComponentId:h,pcbPortId:u.pcb_port_id})};if(u.shape==="circle")d.push({circuitJsonMetadata:A,componentId:h,type:"oval",layers:o,center:{x:u.x,y:u.y},width:u.outer_diameter,height:u.outer_diameter,connectedTo:l([u.pcb_plated_hole_id])});else if(u.shape==="circular_hole_with_rect_pad"||u.shape==="pill_hole_with_rect_pad"||u.shape==="rotated_pill_hole_with_rect_pad"){let m=u.shape==="pill_hole_with_rect_pad"?0:u.rect_ccw_rotation??0,p={center:{x:u.x,y:u.y},width:u.rect_pad_width,height:u.rect_pad_height,rotation:m},g=Hze(p),_=g??p;d.push({circuitJsonMetadata:A,componentId:h,type:"rect",layers:o,center:_.center,width:_.width,height:_.height,ccwRotationDegrees:g?void 0:p.rotation,connectedTo:l([u.pcb_plated_hole_id])})}else if(u.shape==="oval"){let m={center:{x:u.x,y:u.y},width:u.outer_width,height:u.outer_height,rotation:u.ccw_rotation??0},p=Hze(m),g=p??m;d.push({circuitJsonMetadata:A,componentId:h,type:"oval",layers:o,center:g.center,width:g.width,height:g.height,ccwRotationDegrees:p?void 0:m.rotation,connectedTo:l([u.pcb_plated_hole_id])})}else if(u.shape==="pill")d.push({circuitJsonMetadata:A,componentId:h,type:"rect",layers:o,center:{x:u.x,y:u.y},width:u.outer_width,height:u.outer_height,ccwRotationDegrees:u.ccw_rotation,connectedTo:l([u.pcb_plated_hole_id])});else if(u.shape==="hole_with_polygon_pad"){if("pad_outline"in u&&u.pad_outline&&u.pad_outline.length>0){let m=u.pad_outline.map((I)=>u.x+I.x),p=u.pad_outline.map((I)=>u.y+I.y),g=Math.min(...m),_=Math.max(...m),f=Math.min(...p),y=Math.max(...p),x=(g+_)/2,C=(f+y)/2;d.push({circuitJsonMetadata:A,componentId:h,type:"rect",layers:o,center:{x,y:C},width:_-g,height:y-f,connectedTo:l([u.pcb_plated_hole_id])})}}}else if(u.type==="pcb_trace"){let A=aoi(u.route.flatMap((m)=>{if(m.route_type==="through_pad")return[{x:m.start.x,y:m.start.y,layer:m.start_layer},{x:m.end.x,y:m.end.y,layer:m.end_layer}];return[{x:m.x,y:m.y,layer:m.route_type==="wire"?m.layer:m.from_layer}]}),u.source_trace_id??u.pcb_trace_id);d.push(...A.map((m)=>({...m,componentId:h})))}else if(u.type==="pcb_via"){let A=Boolean(u.net_is_assignable??u.netIsAssignable);d.push({circuitJsonMetadata:{pcb_via_id:u.pcb_via_id,...c({pcbComponentId:h})},componentId:h,type:"rect",shape:"circle",layers:u.layers,center:{x:u.x,y:u.y},connectedTo:l([u.pcb_via_id]),width:u.outer_diameter,height:u.outer_diameter,netIsAssignable:A||void 0})}}return d},dB=({text:e,font_size:t=0.18})=>{let n=t/0.18,o=0.12*n,i=0.12*n;return e.length*o+i},y3=({anchor_position:e,anchor_side:t,text:n,font_size:o=0.18})=>{let i=dB({text:n,font_size:o}),r=o,s={...e};switch(t){case"right":s.x-=i/2;break;case"left":s.x+=i/2;break;case"top":s.y-=r/2;break;case"bottom":s.y+=r/2;break}return s},loi=(e,t)=>{let n=0;n+=e.length??0,n+=t.filter((o)=>o.is_crossing).length;for(let o=1;o<t.length;o++){let i=t[o-1],r=t[o],s=Math.abs(i.from.x-i.to.x)<0.01,a=Math.abs(r.from.x-r.to.x)<0.01;if(s!==a)n++}return n},GW=(e)=>({up:"bottom",down:"top",left:"right",right:"left"})[e]??null,MYe=({firstEdge:e,firstEdgePort:t,firstDominantDirection:n,lastEdge:o,lastEdgePort:i,lastDominantDirection:r})=>{if(e&&t)return MYe({lastEdge:{from:e.to,to:e.from},lastEdgePort:t,lastDominantDirection:n}).reverse().map((a)=>({from:a.to,to:a.from}));let s=[];if(o&&i){let a={x:o.to.x,y:o.to.y};if(r==="left"||r==="right")a.x=i.position.x,s.push({from:o.to,to:{...a}}),s.push({from:a,to:{...i.position}});else a.y=i.position.y,s.push({from:o.to,to:{...a}}),s.push({from:a,to:{...i.position}})}return s=s.filter((a)=>al(a.from,a.to)>0.01),s};function doi(e){try{return[e(),null]}catch(t){return[null,t]}}var uoi=MIt.version??"unknown",uoe=class extends Error{constructor(e){super(`${e} (capacity-autorouter@${uoi})`);this.name="AutorouterError"}},AF=class extends Error{constructor(e){super(e.message);this.errorData=e,this.name="TraceConnectionError"}errorData},hoi=0.2,moi=0.3,Gqt=(e,t)=>{if(e===void 0)return t;if(typeof e==="number")return e;let n=parseFloat(e);return Number.isFinite(n)?n:t},IB=(e)=>({holeDiameter:Gqt(e?.viaHoleDiameter,hoi),padDiameter:Gqt(e?.viaPadDiameter,moi)}),poi=(e,t)=>{let n=IB(t);return{holeDiameter:e.holeDiameter??n.holeDiameter,padDiameter:e.padDiameter??n.padDiameter}},NUe=(e)=>{if(e===void 0)return{};return{tented_on_top:e==="top_tented"||e==="top_and_bottom_tented",tented_on_bottom:e==="bottom_tented"||e==="top_and_bottom_tented"}};function jon(e,t){let n=t.x-e.x,o=t.y-e.y;if(Math.abs(n)>Math.abs(o))return n>=0?"right":"left";return o>=0?"up":"down"}var Aoi=new Proxy({},{get:(e,t)=>t}),E3=Aoi,uB="rgba(132, 0, 0)",pCe=0.12,pxe=(e)=>{if(e.length<=1)return!0;let t=e.map((r)=>{let s=r._getPcbCircuitJsonBounds();return{left:s.bounds.left,right:s.bounds.right,top:s.bounds.top,bottom:s.bounds.bottom}}),n=Array(t.length).fill(!1).map(()=>Array(t.length).fill(!1));for(let r=0;r<t.length;r++)for(let s=r+1;s<t.length;s++){let a=t[r],c=t[s];n[r][s]=n[s][r]=!(a.right<c.left||a.left>c.right||a.bottom>c.top||a.top<c.bottom)}let o=new Set,i=(r)=>{o.add(r);for(let s=0;s<t.length;s++)if(n[r][s]&&!o.has(s))i(s)};return i(0),o.size===t.length},BYe=(e)=>{if(e.length===0)throw Error("Cannot get center of empty PCB primitives array");let t=e.map((i)=>i._getPcbCircuitJsonBounds().center).filter(Boolean),n=t.reduce((i,r)=>i+r.x,0),o=t.reduce((i,r)=>i+r.y,0);return{x:n/t.length,y:o/t.length}},_oi=(e)=>{if(!e)return[];return typeof e==="string"?[e]:[...e]};function goi(e){if(!e.isGroupPort())return;let t=e._parsedProps.connectsTo;if(!t)return;let n=e.parent;if(!n)return;let o=n._parsedProps?.connections;if(Object.keys(o??{}).some((c)=>e.isMatchingAnyOf([c])))return;let r=n.name,s=e.name;if(!r||!s)return;let a=`.${r} > .${s}`;for(let c of _oi(t)){if(n.children.some((d)=>{if(!(d instanceof qm))return!1;let u=d._parsedProps;if(!("from"in u)||!("to"in u))return!1;return u.from===a&&u.to===c||u.from===c&&u.to===a}))continue;n.add(new qm({from:a,to:c}))}}function foi(e){let t=uxe(e);if(t.requires_ground===!0||t.provides_ground===!0)return!0;for(let n of e.getNameAndAliases())if(Tie.test(n))return!0;return!1}function yoi(e){return e._parsedProps.isGroundNet??Tie.test(e._parsedProps.name)}function xoi(e){let t=new Set([e,...e._getPortsInternallyConnectedToThisPort()]),n=new Set([...t].flatMap((o)=>o._getDirectlyConnectedTraces()));for(let o of n){let i=o._findConnectedPorts().ports??[],r=new Set(i.flatMap((s)=>[s,...s._getPortsInternallyConnectedToThisPort()]));for(let s of r){if(t.has(s))continue;if(foi(s))return!0}for(let s of o._findConnectedNets().nets)if(s&&yoi(s))return!0}return!1}function Coi(e){if(e.getParentNormalComponent()?.config.componentName!=="Chip")return!1;let t=uxe(e);if(t.should_have_decoupling_capacitor!==void 0)return t.should_have_decoupling_capacitor;if(t.requires_power!==void 0)return t.requires_power;if(t.provides_power===!0)return!1;let n=e.getNameAndAliases();if(t.requires_ground===!0||t.provides_ground===!0||n.some((o)=>Tie.test(o)))return!1;for(let o of n){if(o===e.physicalPinName)continue;if(TUe.test(o))return!0}return!1}function Ioi(e){let t=new Set([e,...e._getPortsInternallyConnectedToThisPort()]),n=new Set([...t].flatMap((o)=>o._getDirectlyConnectedTraces()));for(let o of n){let i=o._findConnectedPorts().ports??[],r=new Set(i.flatMap((s)=>[s,...s._getPortsInternallyConnectedToThisPort()]));for(let s of r){if(t.has(s))continue;if(Coi(s))return!0}}return!1}function Oze(e){if(e.root?.pcbDisabled)return!1;if(e.pcb_port_id)return!0;let{db:t}=e.root,n=e.matchedComponents.filter((c)=>c.isPcbPrimitive),o=n.length===1?n[0]._getPcbCircuitJsonBounds().center:n.length>1&&pxe(n)?BYe(n):null;if(o){let c=t.pcb_port.insert({pcb_component_id:void 0,layers:e.getAvailablePcbLayers(),subcircuit_id:e.getSubcircuit()?.subcircuit_id??void 0,pcb_group_id:e.getGroup()?.pcb_group_id??void 0,...o,source_port_id:e.source_port_id,is_board_pinout:e.parent?.componentName==="Board"});return e.pcb_port_id=c.pcb_port_id,!0}let i=e._getConnectedPortsFromConnectsTo()[0];if(!i?.pcb_port_id)return!1;let r=t.pcb_port.get(i.pcb_port_id);if(!r)return!1;let s=e.getSubcircuit(),a=t.pcb_port.insert({pcb_component_id:void 0,layers:i.getAvailablePcbLayers(),subcircuit_id:s?.subcircuit_id??void 0,pcb_group_id:e.getGroup()?.pcb_group_id??void 0,x:r.x,y:r.y,source_port_id:e.source_port_id,is_board_pinout:!1});return e.pcb_port_id=a.pcb_port_id,!0}var Yqt=(e,t)=>e.localeCompare(t,void 0,{numeric:!0,sensitivity:"base"}),qon=(e,t)=>{let n=t.source_component_id?e.source_component.get(t.source_component_id):void 0,o=!n?e.source_group.list().find((i)=>i.subcircuit_id===t.subcircuit_id):void 0;return n?.name??o?.name},Jon=(e,t)=>{let n=e.source_port.get(t);if(!n?.name)return;let o=qon(e,n);if(!o)return;return`${o}_${n.name}`},RUe=(e,t)=>{let n=t.map((r)=>e.source_port.get(r)).filter((r)=>Boolean(r));if(n.length===0)return;let o=new Map;for(let r of e.source_port.list()){if(!r.source_component_id)continue;o.set(r.source_component_id,(o.get(r.source_component_id)??0)+1)}let i=n.map((r)=>{let s=qon(e,r);if(!s||!r.name)return null;return{sourcePort:r,ownerName:s,label:`${s}_${r.name}`,ownerPinCount:r.source_component_id?o.get(r.source_component_id)??0:0}}).filter((r)=>Boolean(r));return i.sort((r,s)=>{let a=s.ownerPinCount-r.ownerPinCount;if(a!==0)return a;let c=Yqt(r.ownerName,s.ownerName);if(c!==0)return c;let l=r.sourcePort.pin_number??Number.POSITIVE_INFINITY,d=s.sourcePort.pin_number??Number.POSITIVE_INFINITY,u=l-d;if(u!==0)return u;return Yqt(r.sourcePort.name,s.sourcePort.name)}),i[0]?.label},boi=0.12,sd=class extends jo{source_port_id=null;pcb_port_id=null;schematic_port_id=null;schematic_stem_line_id=null;shouldCreateSourcePort;schematicSymbolPortDef=null;matchedComponents;_isPrimaryPort=!0;_primaryPinNumber=null;facingDirection=null;originDescription=null;get config(){return{componentName:"Port",zodProps:dxt}}constructor(e,t={}){if(!e.name&&e.pinNumber!==void 0)e.name=`pin${e.pinNumber}`;if(!e.name)throw Error("Port must have a name or a pinNumber");super(e);if(t.originDescription)this.originDescription=t.originDescription;this.shouldCreateSourcePort=t.shouldCreateSourcePort??!0,this.matchedComponents=[]}isGroupPort(){return this.parent?.isGroup===!0}isComponentPort(){return!this.isGroupPort()}_getConnectedPortsFromConnectsTo(){let{_parsedProps:e}=this,t=e.connectsTo;if(!t)return[];let n=[],o=Array.isArray(t)?t:[t];for(let i of o){let r=this.getSubcircuit().selectOne(i,{type:"port"});if(r)n.push(r)}return n}_isBoardPinoutFromAttributes(){let e=this.parent;if(e?._parsedProps?.pinAttributes){let t=e._parsedProps.pinAttributes;for(let n of this.getNameAndAliases())if(t[n]?.includeInBoardPinout)return!0}}_getGlobalPcbPositionBeforeLayout(){if(this.pcb_port_id){let n=this.root?.db.pcb_port.get(this.pcb_port_id);if(n?.pcb_component_id)return{x:n.x,y:n.y}}let e=this.matchedComponents.find((n)=>n.isPcbPrimitive),t=this.parent;if(t&&!t.props.footprint)throw Error(`${t.componentName} "${t.props.name}" does not have a footprint. Add a footprint prop, e.g. <${t.componentName.toLowerCase()} footprint="..." />`);if(!e)throw Error(`Port ${this} has no matching PCB primitives. This often means the footprint's pads lack matching port hints.`);return e?._getGlobalPcbPositionBeforeLayout()??{x:0,y:0}}_getPcbCircuitJsonBounds(){if(!this.pcb_port_id)return super._getPcbCircuitJsonBounds();let{db:e}=this.root,t=e.pcb_port.get(this.pcb_port_id);return{center:{x:t.x,y:t.y},bounds:{left:0,top:0,right:0,bottom:0},width:0,height:0}}_getGlobalPcbPositionAfterLayout(){return this._getPcbCircuitJsonBounds().center}_getPortsInternallyConnectedToThisPort(){let e=this.parent;if(!e||!e._getInternallyConnectedPins)return[];let t=e._getInternallyConnectedPins(),n=new Set([this]),o=!0;while(o){o=!1;for(let i of t){if(!i.some((r)=>n.has(r)))continue;for(let r of i)if(!n.has(r))n.add(r),o=!0}}return n.size>1?[...n]:[]}_hasSchematicPort(){let e=this.getParentNormalComponent();if(e?._parsedProps?.noSchematicRepresentation===!0)return!1;let{schX:t,schY:n}=this._parsedProps;if(t!==void 0&&n!==void 0)return!0;if(e?.getSchematicSymbol()){if(this.schematicSymbolPortDef)return!0;if(this._getPortsInternallyConnectedToThisPort().some((s)=>s.schematicSymbolPortDef))return!0;return!1}let i=e?._getSchematicBoxDimensions();if(i&&this._parsedProps.pinNumber!==void 0){if(i.getPortPositionByPinNumber(this._parsedProps.pinNumber))return!0}return!1}_getGlobalSchematicPositionBeforeLayout(){let{schX:e,schY:t}=this._parsedProps;if(e!==void 0&&t!==void 0){if(this._getSymbolAncestor())return tt(this.computeSchematicGlobalTransform(),{x:0,y:0});return{x:e,y:t}}let n=this.getParentNormalComponent(),o=n?.getSchematicSymbol();if(o){let r=this.schematicSymbolPortDef;if(!r){if(r=this._getPortsInternallyConnectedToThisPort().find((a)=>a.schematicSymbolPortDef)?.schematicSymbolPortDef??null,!r)throw Error(`Couldn't find schematicSymbolPortDef for port ${this.getString()}, searched internally connected ports and none had a schematicSymbolPortDef. Why are we trying to get the schematic position of this port?`)}let s=_o(n.computeSchematicGlobalTransform(),So(-o.center.x,-o.center.y));return tt(s,r)}let i=n?._getSchematicBoxDimensions();if(i&&this._parsedProps.pinNumber!==void 0){let r=i.getPortPositionByPinNumber(this._parsedProps.pinNumber);if(!r)throw Error(`Couldn't find position for schematic_port for port ${this.getString()} inside of the schematic box`);return tt(n.computeSchematicGlobalTransform(),r)}throw Error(`Couldn't find position for schematic_port for port ${this.getString()}`)}_getGlobalSchematicPositionAfterLayout(){let{db:e}=this.root;if(!this.schematic_port_id)throw Error(`Can't get schematic port position after layout for "${this.getString()}", no schematic_port_id`);let t=e.schematic_port.get(this.schematic_port_id);if(!t)throw Error(`Schematic port not found when trying to get post-layout position: ${this.schematic_port_id}`);return t.center}registerMatch(e){this.matchedComponents.push(e)}physicalPinName;getNameAndAliases(){let{_parsedProps:e}=this;return Array.from(new Set([...this.physicalPinName?[this.physicalPinName]:[],...e.name?[e.name]:[],...e.aliases??[],...typeof e.pinNumber==="number"?[`pin${e.pinNumber}`,e.pinNumber.toString()]:[],...this.externallyAddedAliases??[]]))}_getMatchingPinAttributes(){let t=(this.getParentNormalComponent()??this.parent)?._parsedProps,n=t?.pinAttributes,o=t?.noConnect,i=[];for(let r of this.getNameAndAliases()){if(n){let s=n[r];if(s)i.push(s)}if(o?.includes(r))i.push({doNotConnect:!0})}if(i.length===0)return[];return i}_shouldIncludeInBoardPinout(){return this._getMatchingPinAttributes().some((e)=>e.includeInBoardPinout===!0)}isMatchingPort(e){return this.isMatchingAnyOf(e.getNameAndAliases())}getPortSelector(){return`.${(this.getParentNormalComponent()??this.parent)?.props.name} > port.${this.props.name}`}getAvailablePcbLayers(){let{layer:e,layers:t}=this._parsedProps;if(t)return t;if(e)return[e];if(this.pcb_port_id){let n=this.root?.db.pcb_port.get(this.pcb_port_id);if(n?.pcb_component_id)return n.layers}return Array.from(new Set(this.matchedComponents.flatMap((n)=>n.getAvailablePcbLayers())))}_getDirectlyConnectedTraces(){let e=this.getSubcircuit().selectAll("trace"),t=[];for(let n of e){if(n._couldNotFindPort)continue;try{if(n._isExplicitlyConnectedToPort(this))t.push(n)}catch(o){if(o instanceof AF)continue;throw o}}return t}isConnectedToPower(){return Ioi(this)}isConnectedToGround(){return xoi(this)}doInitialCreateTracesFromProps(){goi(this)}doInitialSourceRender(){if(!this.shouldCreateSourcePort)return;let{db:e}=this.root,{_parsedProps:t}=this,n=this.getNameAndAliases(),o=this.getParentNormalComponent(),r=(this.parent?.source_component_id?this.parent:o)?.source_component_id??null,s=uxe(this),a=e.source_port.insert({name:this.physicalPinName??t.name,pin_number:this.physicalPinName?void 0:t.pinNumber,port_hints:n,source_component_id:r,subcircuit_id:this.getSubcircuit()?.subcircuit_id,...s});this.source_port_id=a.source_port_id}updateSourceRender(){if(!this.source_port_id||!this.shouldCreateSourcePort)return;this.root.db.source_port.update(this.source_port_id,uxe(this))}doInitialSourceParentAttachment(){if(!this.shouldCreateSourcePort)return;let{db:e}=this.root,t=this.getParentNormalComponent(),n=this.parent?.source_component_id?this.parent:t;if(this.isGroupPort()){e.source_port.update(this.source_port_id,{source_component_id:null,subcircuit_id:this.getSubcircuit()?.subcircuit_id});return}if(!n?.source_component_id)throw Error(`${this.getString()} has no parent source component (parent: ${this.parent?.getString()})`);e.source_port.update(this.source_port_id,{source_component_id:n.source_component_id,subcircuit_id:this.getSubcircuit()?.subcircuit_id}),this.source_component_id=n.source_component_id}doInitialPcbPortRender(){if(this.root?.pcbDisabled)return;if(this.getPrimitiveContainer()?.isSchematicPrimitive)return;let{db:e}=this.root,{matchedComponents:t}=this;if(this.isGroupPort()){Oze(this);return}let n=this.getParentNormalComponent(),o=this.parent?.pcb_component_id?this.parent:n;if(!o?.pcb_component_id)throw Error(`${this.getString()} has no parent pcb component, cannot render pcb_port (parent: ${this.parent?.getString()}, parentNormalComponent: ${n?.getString()})`);let i=t.filter((s)=>s.isPcbPrimitive);if(i.length===0)return;let r=null;if(i.length===1)r=i[0]._getPcbCircuitJsonBounds().center;if(i.length>1){if(!pxe(i)){let s=this.props.name,a=this.getParentNormalComponent()?.props.name??"unknown",c=this.getNameAndAliases().filter((d)=>d!==s),l=c.length>0?` (consider using alternate aliases: ${c.join(", ")})`:"";e.source_ambiguous_port_reference.insert({error_type:"source_ambiguous_port_reference",message:`${a}.${s} is ambiguous: ${a}.${s} references multiple non-overlapping pads: ${i.map((d)=>d.getString()).join(", ")}${l}`,source_port_id:this.source_port_id??void 0,source_component_id:this.getParentNormalComponent()?.source_component_id??void 0});return}r=BYe(i)}if(r){let s=this.getSubcircuit(),a=this._shouldIncludeInBoardPinout(),c=e.pcb_port.insert({pcb_component_id:o.pcb_component_id,layers:this.getAvailablePcbLayers(),subcircuit_id:s?.subcircuit_id??void 0,pcb_group_id:this.getGroup()?.pcb_group_id??void 0,...a?{is_board_pinout:!0}:{},...r,source_port_id:this.source_port_id,is_board_pinout:this._isBoardPinoutFromAttributes()});this.pcb_port_id=c.pcb_port_id}else{let s=i[0];throw Error(`${s.getString()} does not have a center or _getGlobalPcbPositionBeforeLayout method (needed for pcb_port placement)`)}}updatePcbPortRender(){if(this.root?.pcbDisabled)return;if(this.getPrimitiveContainer()?.isSchematicPrimitive)return;let{db:e}=this.root;if(this.pcb_port_id)return;if(this.isGroupPort()){Oze(this);return}let t=this.matchedComponents.filter((c)=>c.isPcbPrimitive);if(t.length===0)return;let n=null;if(t.length===1)n=t[0]._getPcbCircuitJsonBounds().center;if(t.length>1)try{if(pxe(t))n=BYe(t)}catch{}if(!n)return;let o=this.getParentNormalComponent(),i=this.parent?.pcb_component_id?this.parent:o,r=this.getSubcircuit(),s=this._shouldIncludeInBoardPinout(),a=e.pcb_port.insert({pcb_component_id:i?.pcb_component_id,layers:this.getAvailablePcbLayers(),subcircuit_id:r?.subcircuit_id??void 0,pcb_group_id:this.getGroup()?.pcb_group_id??void 0,...s?{is_board_pinout:!0}:{},...n,source_port_id:this.source_port_id,is_board_pinout:this._isBoardPinoutFromAttributes()});this.pcb_port_id=a.pcb_port_id}doInitialPcbPortAttachment(){if(!this.pcb_port_id&&this.source_port_id){let e=this.root?.db.pcb_port.list({source_port_id:this.source_port_id}).find((t)=>Boolean(t.pcb_component_id));if(e){this.pcb_port_id=e.pcb_port_id;return}}if(!this.isGroupPort()||this.pcb_port_id)return;Oze(this)}_getBestDisplayPinLabel(){let{db:e}=this.root,t=e.source_port.get(this.source_port_id),n=[];for(let r of t?.port_hints??[]){if(r.match(/^(pin)?\d+$/))continue;if(r.match(/^(left|right)/)&&!t?.name.match(/^(left|right)/))continue;n.push(r)}if(this.getParentNormalComponent()?.props?.showPinAliases&&n.length>0)return n.join("/");else if(n.length>0)return n[0];return}doInitialSchematicPortRender(){if(this.root?.schematicDisabled)return;let e=this.getCollapsedSchematicBoxAncestor();if(e&&this.parent!==e)return;let{db:t}=this.root,{_parsedProps:n}=this,{schX:o,schY:i}=n,r=o!==void 0&&i!==void 0?this.getParentNormalComponent():this.getPrimitiveContainer();if(!r)return;if(!this._hasSchematicPort())return;let s=r._getGlobalSchematicPositionBeforeLayout(),a=this._getGlobalSchematicPositionBeforeLayout(),c=null,l=r._getSchematicBoxDimensions();if(l&&n.pinNumber!==void 0)c=l.getPortPositionByPinNumber(n.pinNumber);if(this.getSubcircuit().props._schDebugObjectsEnabled)t.schematic_debug_object.insert({shape:"rect",center:a,size:{width:0.1,height:0.1},label:"obstacle"});let d=o!==void 0&&i!==void 0&&!!this._getSymbolAncestor();if(d&&n.direction)this.facingDirection=n.direction;else if(!c?.side)this.facingDirection=jon(s,a);else this.facingDirection={left:"left",right:"right",top:"up",bottom:"down"}[c.side];let u=this._getBestDisplayPinLabel(),h=this.getParentNormalComponent(),A=n.direction==="up"?"top":n.direction==="down"?"bottom":n.direction,p=(d&&n.direction?A:void 0)??c?.side??A,g=n.schPinLabelFontSize==="sm"?boi:n.schPinLabelFontSize==="default"?void 0:n.schPinLabelFontSize,_={type:"schematic_port",schematic_component_id:h?.schematic_component_id,center:a,source_port_id:this.source_port_id,facing_direction:this.facingDirection,distance_from_component_edge:n.schStemLength??0.4,side_of_component:p,pin_number:n.pinNumber,true_ccw_index:c?.trueIndex,display_pin_label:u,display_pin_label_font_size:g,is_connected:!1,schematic_sheet_id:this._resolveSchematicSheetId()};for(let y of this._getMatchingPinAttributes()){if(y.requiresPower)_.has_input_arrow=!0;if(y.providesPower)_.has_output_arrow=!0}let f=t.schematic_port.insert(_);if(this.schematic_port_id=f.schematic_port_id,n.schStemLength!==void 0&&n.schStemLength!==0){let{schStemLength:y,direction:x}=n,{x:C,y:I}=a;if(x==="right")C-=y;else if(x==="left")C+=y;else if(x==="up")I-=y;else if(x==="down")I+=y;let b=t.schematic_line.insert({schematic_component_id:h?.schematic_component_id,x1:a.x,y1:a.y,x2:C,y2:I,stroke_width:0.02,color:uB,is_dashed:!1,schematic_sheet_id:this._resolveSchematicSheetId()});this.schematic_stem_line_id=b.schematic_line_id}}doInitialSchematicSymbolResize(){if(this.root?.schematicDisabled)return;if(!this.schematic_port_id)return;let t=this._getSymbolAncestor()?.getUserCoordinateToResizedSymbolTransform();if(!t)return;let{db:n}=this.root,o=n.schematic_port.get(this.schematic_port_id);if(o){let i=tt(t,o.center),r=Math.atan2(t.b,t.a)*180/Math.PI;if(o.facing_direction&&r!==0)this.facingDirection=MUe(o.facing_direction,r),n.schematic_port.update(this.schematic_port_id,{facing_direction:this.facingDirection,side_of_component:this.facingDirection==="up"?"top":this.facingDirection==="down"?"bottom":this.facingDirection});if(n.schematic_port.update(this.schematic_port_id,{center:i}),this.schematic_stem_line_id){let s=n.schematic_line.get(this.schematic_stem_line_id);if(s){let a=tt(t,{x:s.x1,y:s.y1}),c=tt(t,{x:s.x2,y:s.y2});n.schematic_line.update(this.schematic_stem_line_id,{x1:a.x,y1:a.y,x2:c.x,y2:c.y});let l=Math.sqrt((a.x-c.x)**2+(a.y-c.y)**2);n.schematic_port.update(this.schematic_port_id,{distance_from_component_edge:l})}}}}_getSubcircuitConnectivityKey(){return this.root?.db.source_port.get(this.source_port_id)?.subcircuit_connectivity_map_key}_setPositionFromLayout(e){let{db:t}=this.root;if(!this.pcb_port_id)return;t.pcb_port.update(this.pcb_port_id,{x:e.x,y:e.y})}_hasMatchedPcbPrimitive(){let e=this.pcb_port_id?this.root?.db.pcb_port.get(this.pcb_port_id):null;return Boolean(e?.pcb_component_id)||this.matchedComponents.some((t)=>t.isPcbPrimitive)}_getNetLabelText(){if(!this.root||!this.source_port_id)return;return Jon(this.root.db,this.source_port_id)}};function Axe(e){try{return e._getPcbBoundsBeforeLayout()}catch{return null}}function $on(e,t){let n=Axe(e),o=Axe(t);if(!n||!o)return!1;return!(n.right<o.left||n.left>o.right||n.bottom>o.top||n.top<o.bottom)}function Soi(e,t){let n=Axe(e),o=Axe(t);if(!n||!o)return!1;return n.left>=o.left&&n.right<=o.right&&n.bottom>=o.bottom&&n.top<=o.top}function Poi(e){let t=[],n=new Set;for(let o of e){if(n.has(o))continue;let i=[],r=[o];n.add(o);while(r.length>0){let s=r.pop();i.push(s);for(let a of e){if(n.has(a))continue;if(!$on(s,a))continue;n.add(a),r.push(a)}}t.push(i)}return t}var Zon=class extends jo{pcb_via_id=null;matchedPort=null;isPcbPrimitive=!0;source_manually_placed_via_id=null;source_trace_id=null;subcircuit_connectivity_map_key=null;constructor(e){super(e);let t=this._getLayers();this._parsedProps.layers=t,this.initPorts()}get config(){return{componentName:"Via",zodProps:Tme}}getAvailablePcbLayers(){return this._getLayers()}_getResolvedViaDiameters(e){return poi({holeDiameter:this._parsedProps.holeDiameter,padDiameter:this._parsedProps.outerDiameter},e)}getPcbSize(){let e=this.getInheritedMergedProperty("pcbStyle"),{padDiameter:t}=this._getResolvedViaDiameters(e);return{width:t,height:t}}_getPcbCircuitJsonBounds(){let{db:e}=this.root,t=e.pcb_via.get(this.pcb_via_id),n=this.getPcbSize();return{center:{x:t.x,y:t.y},bounds:{left:t.x-n.width/2,top:t.y-n.height/2,right:t.x+n.width/2,bottom:t.y+n.height/2},width:n.width,height:n.height}}_setPositionFromLayout(e){let{db:t}=this.root;t.pcb_via.update(this.pcb_via_id,{x:e.x,y:e.y})}_getLayers(){let{fromLayer:e="top",toLayer:t="bottom"}=this._parsedProps,n=this.parent?this.getSubcircuit()._getSubcircuitLayerCount():2;return v3({fromLayer:e,toLayer:t,layerCount:n})}initPorts(){let e=this._parsedProps.layers;for(let t of e){let n=new sd({name:t,layer:t});n.registerMatch(this),this.add(n)}}_getConnectedNetOrTrace(){let e=this._parsedProps.connectsTo;if(!e)return this._getPortFromContainingPad()?._getDirectlyConnectedTraces()[0]??null;let t=this.getSubcircuit(),n=Array.isArray(e)?e:[e];for(let o of n)if(o.startsWith("net.")){let i=t.selectOne(o,{type:"net"});if(i)return i}return null}doInitialCreateNetsFromProps(){let e=this._parsedProps.connectsTo;if(!e)return;Die(this,Array.isArray(e)?e:[e])}_getPortFromContainingPad(){if(this.parent?.componentName!=="Footprint")return null;let e=new Set(this.parent.children.filter((t)=>t.componentName==="SmtPad").filter((t)=>Soi(this,t)).map((t)=>t.matchedPort).filter((t)=>t!==null));return e.size===1?[...e][0]:null}doInitialPcbComponentRender(){if(this.root?.pcbDisabled)return;let{db:e}=this.root,t=this.getInheritedMergedProperty("pcbStyle"),{padDiameter:n}=this._getResolvedViaDiameters(t),o=this._getGlobalPcbPositionBeforeLayout(),i=this.getSubcircuit(),r=e.pcb_component.insert({center:o,width:n,height:n,layer:this._parsedProps.fromLayer??"top",rotation:0,source_component_id:this.source_component_id,subcircuit_id:i?.subcircuit_id??void 0,obstructs_within_bounds:!0});this.pcb_component_id=r.pcb_component_id}doInitialSourceRender(){let{db:e}=this.root,t=this.getGroup(),n=this.getSubcircuit(),o=e.source_manually_placed_via.insert({source_group_id:t?.source_group_id,subcircuit_id:n?.subcircuit_id??void 0});this.source_manually_placed_via_id=o.source_manually_placed_via_id,this.source_component_id=o.source_manually_placed_via_id}doInitialSourceTraceRender(){let e=this._parsedProps.connectsTo;if(!e)return;let{db:t}=this.root,n=this.getSubcircuit(),o=Array.isArray(e)?e:[e],i=[],r=[];for(let s of o){if(s.startsWith("net.")){let c=n.selectOne(s,{type:"net"});if(!c?.source_net_id){this.renderError(`Could not find net for via selector "${s}"`);return}r.push(c);continue}let a=n.selectOne(s,{type:"port"})??this.getParentNormalComponent()?.children.find((c)=>c instanceof sd&&c.isMatchingAnyOf([s]))??null;if(!a?.source_port_id){this.renderError(`Could not find port for via selector "${s}"`);return}i.push(a)}if(i.length>0){let s=t.source_trace.insert({connected_source_port_ids:i.map((a)=>a.source_port_id),connected_source_net_ids:r.map((a)=>a.source_net_id),subcircuit_id:n.subcircuit_id??void 0,display_name:this._parsedProps.name?`${this._parsedProps.name} connectivity`:"Manually placed via connectivity"});this.source_trace_id=s.source_trace_id}t.source_manually_placed_via.update(this.source_manually_placed_via_id,{source_net_id:r[0]?.source_net_id,source_trace_id:this.source_trace_id??void 0})}doInitialPcbPortAttachment(){if(this.root?.pcbDisabled)return;this.root.db.pcb_via.update(this.pcb_via_id,{pcb_port_ids:this.children.flatMap((e)=>e instanceof sd&&e.pcb_port_id?[e.pcb_port_id]:[])})}doInitialPcbPrimitiveRender(){if(this.root?.pcbDisabled)return;let{db:e}=this.root,t=this.getInheritedMergedProperty("pcbStyle"),{holeDiameter:n,padDiameter:o}=this._getResolvedViaDiameters(t),i=this._getGlobalPcbPositionBeforeLayout(),r=this.getSubcircuit(),s=this._getConnectedNetOrTrace(),{isFlipped:a}=this._getPcbPrimitiveFlippedHelpers(),c=NUe(this._parsedProps.tented),l=this.source_trace_id??(s instanceof gB?void 0:s?.source_trace_id),d=!l&&s instanceof gB?s.source_net_id:void 0,u=e.pcb_via.insert({x:i.x,y:i.y,hole_diameter:n,outer_diameter:o,layers:this._getLayers(),from_layer:this._parsedProps.fromLayer||"bottom",to_layer:this._parsedProps.toLayer||"top",subcircuit_id:r?.subcircuit_id??void 0,subcircuit_connectivity_map_key:this.subcircuit_connectivity_map_key??void 0,pcb_group_id:this.getGroup()?.pcb_group_id??void 0,net_is_assignable:this._parsedProps.netIsAssignable??void 0,tented_on_top:a?c.tented_on_bottom:c.tented_on_top,tented_on_bottom:a?c.tented_on_top:c.tented_on_bottom,...l?{source_trace_id:l}:{},...d?{source_net_id:d}:{}});this.pcb_via_id=u.pcb_via_id}};function voi(e){if(e.root?.schematicDisabled)return;let{db:t}=e.root,{_parsedProps:n,parent:o}=e;if(!o)throw Error("Trace has no parent");let{allPortsFound:i,portsWithSelectors:r}=e._findConnectedPorts();if(!i)return;let s=r.map(({port:x})=>({port:x,position:x._getGlobalSchematicPositionAfterLayout(),schematic_port_id:x.schematic_port_id,facingDirection:x.facingDirection}));if(s.length<2)throw Error("Expected at least two ports in portsWithPosition.");let a,c,l=s[0].position,d=s[0].port;if("path"in e.props){if(e.props.path.length!==2)throw Error("Invalid 'path': Must contain exactly two elements.");[a,c]=e.props.path}else{if(!(("from"in e.props)&&("to"in e.props)))throw Error("Missing 'from' or 'to' properties in props.");a=e.props.from,c=e.props.to}if(!d.source_port_id)throw Error(`Missing source_port_id for the 'from' port (${a}).`);let u=s[1].position,h=s[1].port;if(!h.source_port_id)throw Error(`Missing source_port_id for the 'to' port (${c}).`);let A=t.schematic_net_label.list().find((x)=>x.source_net_id===d.source_port_id),m=t.schematic_net_label.list().find((x)=>x.source_net_id===h.source_port_id),[p,g]=r.map(({port:x})=>x),f=p.parent?.config.shouldRenderAsSchematicBox?`${p?.parent?.props.name}_${p?.props.name}`:`${g?.parent?.props.name}_${g?.props.name}`,y=e._getSchematicNetLabelText()??f;if(A&&A.text!==y)A.text=`${y} / ${A.text}`;if(m&&m?.text!==y)m.text=`${y} / ${m.text}`;if(!m){let x=GW(h.facingDirection)??"bottom";t.schematic_net_label.insert({text:y,source_net_id:h.source_port_id,anchor_position:u,center:y3({anchor_position:u,anchor_side:x,text:y}),anchor_side:x,schematic_sheet_id:e._resolveSchematicSheetId()})}if(!A){let x=GW(d.facingDirection)??"bottom";t.schematic_net_label.insert({text:y,source_net_id:d.source_port_id,anchor_position:l,center:y3({anchor_position:l,anchor_side:x,text:y}),anchor_side:x,schematic_sheet_id:e._resolveSchematicSheetId()})}}function Eoi(e){let{_parsedProps:t,parent:n}=e;if(!n)throw Error("Trace has no parent");let o=e.getTracePortPathSelectors(),i=(s)=>{if(s.lastIndexOf(".")>s.lastIndexOf(" "))return null;let c=e.getSubcircuit().selectOne(s);if(!c&&!/[.#\[]/.test(s))c=e.getSubcircuit().selectOne(`.${s}`);if(!c)return null;let l=c.children.filter((d)=>d.componentName==="Port");return l.length===1?l[0]:null},r=o.map((s)=>({selector:s,port:e.getSubcircuit().selectOne(s,{type:"port"})??i(s)}));for(let{selector:s,port:a}of r)if(!a){let c,l,d=s.lastIndexOf(".");if(d!==-1&&d>s.lastIndexOf(" "))c=s.slice(0,d),l=s.slice(d+1);else{let C=s.match(/^(.*[ >])?([^ >]+)$/);c=C?.[1]?.trim()??"",l=C?.[2]??s}let u=c?e.getSubcircuit().selectOne(c):null;if(!u&&c&&!/[.#\[]/.test(c))u=e.getSubcircuit().selectOne(`.${c}`);if(!u){let C=c?`Could not find port for selector "${s}". Component "${c}" not found`:`Could not find port for selector "${s}"`,I=e.getSubcircuit(),b=I.getGroup();throw new AF({error_type:"source_trace_not_connected_error",message:C,subcircuit_id:I.subcircuit_id??void 0,source_group_id:b?.source_group_id??void 0,source_trace_id:e.source_trace_id??void 0,selectors_not_found:[s]})}let h=u.children.filter((C)=>C.componentName==="Port"),A=l.includes(".")?l.split(".").pop()??"":l,m=h.flatMap((C)=>C.getNameAndAliases()),p=m.some((C)=>!/^(pin\d+|\d+)$/.test(C)),g=Array.from(new Set(m)).join(", "),_;if(h.length===0)_="It has no ports";else if(!p)_=`It has ${h.length} pins and no pinLabels (consider adding pinLabels)`;else _=`It has [${g}]`;let f=`Could not find port for selector "${s}". Component "${u.props.name??c}" found, but does not have pin "${A}". ${_}`,y=e.getSubcircuit(),x=y.getGroup();throw new AF({error_type:"source_trace_not_connected_error",message:f,subcircuit_id:y.subcircuit_id??void 0,source_group_id:x?.source_group_id??void 0,source_trace_id:e.source_trace_id??void 0,selectors_not_found:[s]})}if(r.some((s)=>!s.port))return{allPortsFound:!1};return{allPortsFound:!0,portsWithSelectors:r,ports:r.map(({port:s})=>s)}}function _xe(e){let t=e.flatMap(Lon),n=e.filter(({route_type:o})=>o==="via").length*1.6;for(let o=1;o<t.length;o++){let i=t[o-1],r=t[o];n+=Math.hypot(r.x-i.x,r.y-i.y)}return n}var ein=({trace:e,pcbTrace:t,ports:n,pathIndex:o})=>{let{db:i}=e.root,r=i.pcb_via.list({pcb_trace_id:t.pcb_trace_id}),s=i.source_trace.get(e.source_trace_id)?.display_name,a="unnamed trace";if(s&&e._parsedProps.name)a=`${e.getDisplayName()}, ${s}`;else if(s)a=s;else if(e._parsedProps.name)a=e.getDisplayName();let c="pcbPath";if(o!==void 0)c=`pcbPaths[${o}]`;let l,d=0;for(let u of t.route){if(u.route_type==="wire"){l=u.layer;continue}if(u.route_type!=="via")continue;d+=1;let h=r[d-1];if(l&&!h.layers.includes(l)){let A=Number(u.x.toFixed(4)),m=Number(u.y.toFixed(4));i.pcb_trace_error.insert({error_type:"pcb_trace_error",source_trace_id:e.source_trace_id,message:`Invalid ${c} (${a}): via ${d} (${u.from_layer} → ${u.to_layer}) at board (${A}, ${m}) mm does not reach incoming ${l} copper.`,center:{x:u.x,y:u.y},pcb_trace_id:t.pcb_trace_id,pcb_component_ids:[],pcb_port_ids:n.map((p)=>p.pcb_port_id).filter(Boolean),subcircuit_id:t.subcircuit_id,is_fatal:!1})}l=u.to_layer}};function Vqt(e){let{lineStart:t,lineEnd:n,rectCenter:o,rectWidth:i,rectHeight:r}=e,s=o.x-i/2,a=o.x+i/2,c=o.y+r/2,l=o.y-r/2,d=n.x-t.x,u=n.y-t.y,h=[];if(d!==0){let A=(s-t.x)/d;if(A>=0&&A<=1){let m=t.y+A*u;if(m>=l&&m<=c)h.push({x:s,y:m,t:A})}}if(d!==0){let A=(a-t.x)/d;if(A>=0&&A<=1){let m=t.y+A*u;if(m>=l&&m<=c)h.push({x:a,y:m,t:A})}}if(u!==0){let A=(l-t.y)/u;if(A>=0&&A<=1){let m=t.x+A*d;if(m>=s&&m<=a)h.push({x:m,y:l,t:A})}}if(u!==0){let A=(c-t.y)/u;if(A>=0&&A<=1){let m=t.x+A*d;if(m>=s&&m<=a)h.push({x:m,y:c,t:A})}}if(h.length===0)return null;return h.sort((A,m)=>A.t-m.t),{x:h[0].x,y:h[0].y}}function Uqt(e){let{lineStart:t,lineEnd:n,circleCenter:o,circleRadius:i}=e,r=t.x-o.x,s=t.y-o.y,a=n.x-o.x,c=n.y-o.y,l=a-r,d=c-s,u=l*l+d*d,h=2*(r*l+s*d),A=r*r+s*s-i*i,m=h*h-4*u*A;if(m<0)return null;let p=Math.sqrt(m),g=(-h-p)/(2*u),_=(-h+p)/(2*u),f=null;if(g>=0&&g<=1)f=g;else if(_>=0&&_<=1)f=_;if(f===null)return null;return{x:t.x+f*l,y:t.y+f*d}}function Wqt(e){let{traceStart:t,traceEnd:n,traceWidth:o,port:i}=e,r=i.matchedComponents.find((h)=>h.isPcbPrimitive);if(!r)return n;let s=r._getPcbCircuitJsonBounds(),{width:a,height:c,center:l}=s,d=Math.min(a,c);if(o<=d/2)return n;let u=null;if(r.componentName==="SmtPad"){let h=r,A=h._parsedProps.shape;if(A==="circle"){let m=h._parsedProps.radius;u=Uqt({lineStart:t,lineEnd:n,circleCenter:l,circleRadius:m})}else if(A==="rect"||A==="rotated_rect"||A==="pill"||A==="polygon")u=Vqt({lineStart:t,lineEnd:n,rectCenter:l,rectWidth:a,rectHeight:c})}else if(r.componentName==="PlatedHole"){let h=r;if(h._parsedProps.shape==="circle"){let m=h._parsedProps.outerDiameter;u=Uqt({lineStart:t,lineEnd:n,circleCenter:l,circleRadius:m/2})}else u=Vqt({lineStart:t,lineEnd:n,rectCenter:l,rectWidth:a,rectHeight:c})}return u??n}function Xqt(e){let n=(e._parsedProps?.portHints??[]).filter(Boolean);if(n.length>0)return`<${e.lowercaseComponentName}(${n.map((o)=>`.${o}`).join(", ")}) />`;return`<${e.lowercaseComponentName} />`}function gxe(e,t){let n=t.matchedComponents.filter((a)=>a.isPcbPrimitive),o=t.getParentNormalComponent()?.props.name??t.parent?.props.name??"unknown",i=t.getParentNormalComponent(),r=e.trim().split(/\s+|>/).filter(Boolean).at(-1)?.replace(/^port\./,"").replace(/^\./,"");if(r&&!/^(pin)?\d+$/.test(r)){let a=(i?.children??[]).filter((c)=>c.componentName==="Port"&&c.isMatchingAnyOf([r]));if(a.length>1){if(!(i?._getInternallyConnectedPins?.()??[]).some((d)=>a.every((u)=>d.includes(u)))){let d=Array.from(new Set(a.flatMap((A)=>A.getNameAndAliases().filter((m)=>/^pin\d+$/.test(m)).map((m)=>`${o}.${m}`)))),u=d.length>0?` Use a raw pin selector like ${d.map((A)=>`"${A}"`).join(" or ")}.`:"",h=a.flatMap((A)=>A.matchedComponents.filter((m)=>m.isPcbPrimitive));return`Trace selector "${e}" resolved to "${o}.${t.props.name}", but alias "${r}" matches multiple PCB pads: ${h.map((A)=>Xqt(A)).join(", ")}.${u}`}}}if(t.pcb_port_id)return null;let s=Array.from(new Set(t.getNameAndAliases().filter((a)=>/^pin\d+$/.test(a)).map((a)=>`${o}.${a}`)));if(n.length>1&&!pxe(n)){let a=s.length>0?` Use a raw pin selector like ${s.map((c)=>`"${c}"`).join(" or ")}.`:"";return`Trace selector "${e}" resolved to "${o}.${t.props.name}", but that target maps to multiple non-overlapping PCB pads: ${n.map((c)=>Xqt(c)).join(", ")}.${a}`}return null}var KI={min_trace_width:0.1,min_via_hole_edge_to_via_hole_edge_clearance:0.1,min_plated_hole_drill_edge_to_drill_edge_clearance:0.15,min_trace_to_hole_edge_clearance:0.2,min_trace_to_pad_edge_clearance:0.1,min_pad_edge_to_pad_edge_clearance:0.1,min_board_edge_clearance:0.2,min_via_hole_diameter:0.2,min_via_pad_diameter:0.3},Moi=({trace:e,path:t,anchorPort:n,width:o})=>{let{db:i}=e.root,r=e.getSubcircuit(),s=r._isInflatedFromCircuitJson?e._computePcbGlobalTransformBeforeLayout():n._computePcbGlobalTransformBeforeLayout?.()??Il(),a=n.getAvailablePcbLayers()[0]??"top",c=[];for(let[l,d]of t.entries()){if(typeof d==="string"){let h=r.selectOne(d,{type:"port"});if(!h){i.pcb_trace_error.insert({error_type:"pcb_trace_error",source_trace_id:e.source_trace_id,message:`Could not resolve pcbPaths selector "${d}" for ${e}`,pcb_trace_id:e.pcb_trace_id,pcb_component_ids:[],pcb_port_ids:[]});return}let A=gxe(d,h);if(A){i.pcb_trace_error.insert({error_type:"pcb_trace_error",source_trace_id:e.source_trace_id,message:A,pcb_trace_id:e.pcb_trace_id,pcb_component_ids:[],pcb_port_ids:[]});return}if(l===0)a=h.getAvailablePcbLayers()[0]??a;let m=h._getGlobalPcbPositionAfterLayout();c.push({route_type:"wire",x:m.x,y:m.y,width:o,layer:a,...l===0?{start_pcb_port_id:h.pcb_port_id}:{},...l===t.length-1?{end_pcb_port_id:h.pcb_port_id}:{}});continue}let u=tt(s,{x:d.x,y:d.y});if(d.via){let h=d.fromLayer??a,A=d.toLayer??a;c.push({route_type:"via",x:u.x,y:u.y,from_layer:h,to_layer:A}),a=A}else c.push({route_type:"wire",x:u.x,y:u.y,width:o,layer:a})}return c},tin=({trace:e,pcbTrace:t,path:n,ports:o,pathIndex:i})=>{if(e._getBoard()?.getInheritedProperty("allowBlindAndBuriedVias"))return;let{db:s}=e.root,a=s.source_trace.get(e.source_trace_id)?.display_name,c=[e._parsedProps.name?e.getDisplayName():void 0,a].filter(Boolean).join(", ")||"unnamed trace",l=i===void 0?"pcbPath":`pcbPaths[${i}]`,d=[];for(let[g,_]of n.entries())if(typeof _!=="string"&&_.via)d.push(g);let u=s.pcb_via.list({pcb_trace_id:t.pcb_trace_id}),h=[],A=new Set,m;for(let[g,_]of u.entries()){let f=_.layers.includes("top"),y=_.layers.includes("bottom");if(f&&y)continue;let x=f||y?"blind":"buried";A.add(x);let C=d[g],I=`${l}[${C}]`,b=Number(_.x.toFixed(4)),P=Number(_.y.toFixed(4));m??=_,h.push(`${I}: ${x} via (fromLayer: "${_.from_layer}", toLayer: "${_.to_layer}") spanning [${_.layers.join(", ")}] at board (${b}, ${P}) mm`)}if(!m)return;let p=[...A].sort().join(" and ");s.pcb_trace_error.insert({error_type:"pcb_trace_error",source_trace_id:e.source_trace_id,pcb_trace_id:t.pcb_trace_id,pcb_component_ids:[],pcb_port_ids:o.map((g)=>g.pcb_port_id).filter(Boolean),subcircuit_id:t.subcircuit_id,center:{x:m.x,y:m.y},is_fatal:!1,message:`${p} vias aren't allowed by allowBlindAndBuriedVias settings in ${l} (${c}): ${h.length} disallowed via${h.length===1?"":"s"}. Use top-to-bottom through vias (fromLayer: "top", toLayer: "bottom", or the reverse) and adjust the adjoining wire layers to match, or set allowBlindAndBuriedVias={true} on <board> if fabrication supports blind/buried vias. Saved copper has been preserved. Affected indices (zero-based): ${h.join("; ")}.`})},Boi=({trace:e,paths:t,ports:n,portsWithSelectors:o,width:i})=>{let{db:r}=e.root,{pcbPathRelativeTo:s}=e._parsedProps,a=e.getSubcircuit(),c=s?o.find(({selector:A})=>A===s)?.port:void 0;if(!c&&s)c=a.selectOne(s,{type:"port"});if(c??=n[0],!c){r.source_trace_not_connected_error.insert({error_type:"source_trace_not_connected_error",source_trace_id:e.source_trace_id??void 0,subcircuit_id:a.subcircuit_id??void 0,message:"pcbPaths requires a connected port or pcbPathRelativeTo port"});return}let l=e.getInheritedMergedProperty("pcbStyle"),{holeDiameter:d,padDiameter:u}=IB(l),h=e.subcircuit_connectivity_map_key??r.source_trace.get(e.source_trace_id)?.subcircuit_connectivity_map_key;for(let[A,m]of t.entries()){let p=Moi({trace:e,path:m,anchorPort:c,width:i});if(!p||p.length<2)continue;let g=r.pcb_trace.insert({route:p,is_antenna_trace:e.isAntennaTrace,source_trace_id:e.source_trace_id,subcircuit_id:a.subcircuit_id??void 0,pcb_group_id:e.getGroup()?.pcb_group_id??void 0,trace_length:_xe(p)});e.pcb_trace_id??=g.pcb_trace_id;for(let _ of p){if(_.route_type!=="via")continue;let{from_layer:f,to_layer:y}=_;r.pcb_via.insert({pcb_trace_id:g.pcb_trace_id,x:_.x,y:_.y,hole_diameter:d,outer_diameter:u,layers:v3({fromLayer:f,toLayer:y,layerCount:a._getSubcircuitLayerCount()}),from_layer:f,to_layer:y,subcircuit_id:a.subcircuit_id??void 0,pcb_group_id:e.getGroup()?.pcb_group_id??void 0,subcircuit_connectivity_map_key:h})}ein({trace:e,pcbTrace:g,ports:n,pathIndex:A}),e._insertErrorIfTraceIsOutsideBoard(p,n),tin({trace:e,pcbTrace:g,path:m,ports:n,pathIndex:A})}e._portsRoutedOnPcb=n},woi=(e,t)=>{if(t.route_type!=="via")return;return e?.find((n)=>Math.abs(n.x-t.x)<0.0001&&Math.abs(n.y-t.y)<0.0001&&(!n.from_layer||n.from_layer===t.from_layer)&&(!n.to_layer||n.to_layer===t.to_layer))},Toi=(e)=>{let t=e;return{holeDiameter:t.hole_diameter??t.via_hole_diameter,outerDiameter:t.outer_diameter??t.via_diameter}};function Doi(e){if(e.root?.pcbDisabled)return;let{db:t}=e.root,{_parsedProps:n}=e,o=e.getSubcircuit(),i=n.pcbPath!==void 0,r=n.pcbPaths!==void 0,s=Boolean(n.pcbStraightLine),a=e._inflatedPcbTraces??[];if(!i&&!r&&!s&&a.length===0)return;let c,l,d;try{let Q=e._findConnectedPorts();c=Q.allPortsFound,l=Q.ports??[],d=Q.portsWithSelectors??[]}catch(Q){if(Q instanceof AF){t.source_trace_not_connected_error.insert({...Q.errorData,error_type:"source_trace_not_connected_error"}),e._couldNotFindPort=!0;return}throw Q}if(!c)return;let u=d.map(({selector:Q,port:N})=>gxe(Q,N)).find(Boolean);if(u){t.pcb_trace_error.insert({error_type:"pcb_trace_error",source_trace_id:e.source_trace_id,message:u,pcb_trace_id:e.pcb_trace_id,pcb_component_ids:[],pcb_port_ids:l.map((Q)=>Q.pcb_port_id).filter(Boolean)});return}let h=[];for(let Q of l)if(!Q._hasMatchedPcbPrimitive())h.push(Q);if(h.length>0){t.pcb_trace_error.insert({error_type:"pcb_trace_error",source_trace_id:e.source_trace_id,message:`Some ports did not have a matching PCB primitive (e.g. a pad or plated hole), this can happen if a footprint is missing. As a result, ${e} wasn't routed. Missing ports: ${h.map((Q)=>Q.getString()).join(", ")}`,pcb_trace_id:e.pcb_trace_id,pcb_component_ids:[],pcb_port_ids:h.map((Q)=>Q.pcb_port_id).filter(Boolean)});return}let A=e._getExplicitTraceThickness()??e.getSubcircuit()._parsedProps.minTraceWidth??KI.min_trace_width;if(a.length>0){let{isFlipped:Q,maybeFlipLayer:N}=e._getPcbPrimitiveFlippedHelpers(),F=e._computePcbGlobalTransformBeforeLayout(),H=[],z=e.subcircuit_connectivity_map_key??t.source_trace.get(e.source_trace_id)?.subcircuit_connectivity_map_key;for(let Y of a){let U=Y.route.map((q)=>{if(q.route_type==="wire"){let{x:ne,y:ce,...oe}=q,ie=tt(F,{x:ne,y:ce});return{...oe,...ie,layer:N(q.layer)}}if(q.route_type==="via"){let{x:ne,y:ce,...oe}=q,ie=tt(F,{x:ne,y:ce});return{...oe,...ie,from_layer:N(q.from_layer),to_layer:N(q.to_layer),tented_on_top:Q?q.tented_on_bottom:q.tented_on_top,tented_on_bottom:Q?q.tented_on_top:q.tented_on_bottom}}return{...q,start:tt(F,q.start),end:tt(F,q.end),start_layer:N(q.start_layer),end_layer:N(q.end_layer)}}),X=t.pcb_trace.insert({...Y,route:U,source_trace_id:e.source_trace_id,subcircuit_id:o?.subcircuit_id??void 0,pcb_group_id:e.getGroup()?.pcb_group_id??void 0}),V=e.getInheritedMergedProperty("pcbStyle"),{holeDiameter:W,padDiameter:j}=IB(V);for(let q=0;q<U.length;q++){let ne=U[q];if(ne.route_type==="via"){let ce=Y.route[q],oe=woi(e._inflatedPcbVias,ce),ie=oe?s7.parse(oe):void 0,J=Toi(ne),ee=N(ie?.from_layer??ne.from_layer),se=N(ie?.to_layer??ne.to_layer),le=(ie?.layers??v3({fromLayer:ne.from_layer,toLayer:ne.to_layer,layerCount:o._getSubcircuitLayerCount()})).map((he)=>N(he));t.pcb_via.insert({pcb_trace_id:X.pcb_trace_id,x:ne.x,y:ne.y,hole_diameter:ie?.hole_diameter??J.holeDiameter??W,outer_diameter:ie?.outer_diameter??J.outerDiameter??j,layers:le,from_layer:ee,to_layer:se,subcircuit_id:o?.subcircuit_id??void 0,pcb_group_id:e.getGroup()?.pcb_group_id??void 0,subcircuit_connectivity_map_key:ie?.subcircuit_connectivity_map_key??z,net_is_assignable:ie?.net_is_assignable,net_assigned:ie?.net_assigned,tented_on_top:(Q?ie?.tented_on_bottom:ie?.tented_on_top)??ne.tented_on_top,tented_on_bottom:(Q?ie?.tented_on_top:ie?.tented_on_bottom)??ne.tented_on_bottom})}}if(!e.pcb_trace_id)e.pcb_trace_id=X.pcb_trace_id;H.push(X.route)}for(let Y of H)e._insertErrorIfTraceIsOutsideBoard(Y,l);e._portsRoutedOnPcb=l;return}if(n.pcbPaths){Boi({trace:e,paths:n.pcbPaths,ports:l,portsWithSelectors:d,width:A});return}if(s&&!i){if(!l||l.length<2){e.renderError("pcbStraightLine requires exactly two connected ports");return}let[Q,N]=l,F=Q.getAvailablePcbLayers(),H=N.getAvailablePcbLayers(),Y=F.find((ce)=>H.includes(ce))??F[0]??H[0]??"top",U=Q._getGlobalPcbPositionAfterLayout(),X=N._getGlobalPcbPositionAfterLayout(),V=Wqt({traceStart:X,traceEnd:U,traceWidth:A,port:Q}),W=Wqt({traceStart:U,traceEnd:X,traceWidth:A,port:N}),j=[{route_type:"wire",x:V.x,y:V.y,width:A,layer:Y,start_pcb_port_id:Q.pcb_port_id},{route_type:"wire",x:W.x,y:W.y,width:A,layer:Y,end_pcb_port_id:N.pcb_port_id}],q=_xe(j),ne=t.pcb_trace.insert({route:j,source_trace_id:e.source_trace_id,subcircuit_id:o?.subcircuit_id??void 0,pcb_group_id:e.getGroup()?.pcb_group_id??void 0,trace_length:q});e._portsRoutedOnPcb=l,e.pcb_trace_id=ne.pcb_trace_id,e._insertErrorIfTraceIsOutsideBoard(j,l);return}if(!n.pcbPath)return;let m;if(n.pcbPathRelativeTo){if(m=d.find((Q)=>Q.selector===n.pcbPathRelativeTo)?.port,!m)m=e.getSubcircuit().selectOne(n.pcbPathRelativeTo)}if(!m)m=l[0];if(!m){t.source_trace_not_connected_error.insert({error_type:"source_trace_not_connected_error",source_trace_id:e.source_trace_id??void 0,subcircuit_id:o.subcircuit_id??void 0,message:"pcbPath requires a connected port or pcbPathRelativeTo port"});return}let p=l.find((Q)=>Q!==m)??l[1],_=m.getAvailablePcbLayers()[0]||"top",f=m._getGlobalPcbPositionAfterLayout(),y=p?._getGlobalPcbPositionAfterLayout(),x=[];x.push({route_type:"wire",x:f.x,y:f.y,width:A,layer:_,start_pcb_port_id:m.pcb_port_id});let C=o._isInflatedFromCircuitJson?e._computePcbGlobalTransformBeforeLayout():m?._computePcbGlobalTransformBeforeLayout?.()||Il(),I=n.pcbPath;for(let Q of I){let N,F=!1,H=typeof Q!=="string"&&Q.via,z,Y;if(typeof Q==="string"){let X=e.getSubcircuit().selectOne(Q,{type:"port"});if(!X){t.pcb_trace_error.insert({error_type:"pcb_trace_error",source_trace_id:e.source_trace_id,message:`Could not resolve pcbPath selector "${Q}" for ${e}`,pcb_trace_id:e.pcb_trace_id,pcb_component_ids:[],pcb_port_ids:[]});continue}let V=gxe(Q,X);if(V){t.pcb_trace_error.insert({error_type:"pcb_trace_error",source_trace_id:e.source_trace_id,message:V,pcb_trace_id:e.pcb_trace_id,pcb_component_ids:[],pcb_port_ids:[]});return}let W=X._getGlobalPcbPositionAfterLayout();N={x:W.x,y:W.y},F=!0}else if(N={x:Q.x,y:Q.y},F=!1,Q.via)z=Q.fromLayer??_,Y=Q.toLayer;let U=F?N:tt(C,N);if(H)x.push({route_type:"via",x:U.x,y:U.y,from_layer:z??_,to_layer:Y??_}),_=Y??_;else x.push({route_type:"wire",x:U.x,y:U.y,width:A,layer:_})}if(p&&y)x.push({route_type:"wire",x:y.x,y:y.y,width:A,layer:_,end_pcb_port_id:p.pcb_port_id});let b=_xe(x),P=t.pcb_trace.insert({route:x,is_antenna_trace:e.isAntennaTrace,source_trace_id:e.source_trace_id,subcircuit_id:o?.subcircuit_id??void 0,pcb_group_id:e.getGroup()?.pcb_group_id??void 0,trace_length:b}),E=e.subcircuit_connectivity_map_key??t.source_trace.get(e.source_trace_id)?.subcircuit_connectivity_map_key,B=e.getInheritedMergedProperty("pcbStyle"),{holeDiameter:w,padDiameter:T}=IB(B);for(let Q of x)if(Q.route_type==="via"){let{from_layer:N,to_layer:F}=Q;t.pcb_via.insert({pcb_trace_id:P.pcb_trace_id,x:Q.x,y:Q.y,hole_diameter:w,outer_diameter:T,layers:v3({fromLayer:N,toLayer:F,layerCount:o._getSubcircuitLayerCount()}),from_layer:N,to_layer:F,subcircuit_id:o?.subcircuit_id??void 0,pcb_group_id:e.getGroup()?.pcb_group_id??void 0,subcircuit_connectivity_map_key:E})}tin({trace:e,pcbTrace:P,path:n.pcbPath,ports:l}),e._portsRoutedOnPcb=l,e.pcb_trace_id=P.pcb_trace_id,ein({trace:e,pcbTrace:P,ports:l}),e._insertErrorIfTraceIsOutsideBoard(x,l)}function Noi(e,t){let n=[],o=(i)=>{let r=0;for(let s of t)if(s.layer===i.layer&&Math.hypot(s.x-i.x,s.y-i.y)<0.000001)r=Math.max(r,s.diameter);return r};for(let i=0;i<e.length;i++){let r=e[i],s=e[i+1];if(r.route_type!=="wire"||s?.route_type!=="wire"||r.layer!==s.layer||r.width_interpolation_mode){n.push(r);continue}let a=Math.hypot(s.x-r.x,s.y-r.y),c=o(r),l=o(s),d=(m)=>{let p=m*0.8,g=Math.min(m*1.5,a*0.45);return p>r.width&&g>m/2?{width:p,length:g}:void 0},u=d(c),h=d(l);if(!u&&!h){n.push(r);continue}let A=(m)=>({route_type:"wire",x:r.x+(s.x-r.x)*m/a,y:r.y+(s.y-r.y)*m/a,width:r.width,layer:r.layer});if(u)n.push({...r,width:u.width,start_width:u.width,end_width:r.width,width_interpolation_mode:"quadratic"}),n.push(A(u.length));else n.push(r);if(h)n.push({...A(a-h.length),start_width:r.width,end_width:h.width,width_interpolation_mode:"quadratic"})}return n}function nin(e){return e.map((t,n)=>{if(t.route_type!=="wire"||!t.width_interpolation_mode)return{...t};let o=e[n+1];if(o?.route_type!=="wire"||o.layer!==t.layer||o.x===t.x&&o.y===t.y)throw Error("Width interpolation requires a distinct next wire point on the same layer");return{...t,start_width:t.width,end_width:o.width}})}function Voe(e,t,n){let o,i;for(let r=t-1;r>=0;r--){let s=e[r];if(s.route_type==="wire"){o=s.width;break}}for(let r=t+1;r<e.length;r++){let s=e[r];if(s.route_type==="wire"){i=s.width;break}}return{fromWidth:o??i??n,toWidth:i??o??n}}var Kqt=new WeakMap;function jqt(e){let{is_inside_copper_pour:t,copper_pour_id:n,...o}=e;return JSON.stringify(o)}function Roi(e,t){if(e===t)return!0;if(e.length!==t.length)return!1;return e.every((n,o)=>jqt(n)===jqt(t[o]))}function Qoi(e){let t=Kqt.get(e);if(t)return t;let n=new Map;return Kqt.set(e,n),n}function wYe({pcbTrace:e,pcbTraceTeardropRenderState:t}){if(Roi(e.route,t.generatedRoute))return!1;return t.originalRoute=e.route,t.generatedRoute=e.route,!0}function koi({route:e,contacts:t}){return e.flatMap((n,o)=>{if(n.route_type!=="via"||!t.some((l)=>Math.hypot(l.x-n.x,l.y-n.y)<0.000001))return[n];let{fromWidth:i,toWidth:r}=Voe(e,o,0);if(!i||!r)return[n];let s=e[o-1],a=e[o+1],c=[];if(!(s?.route_type==="wire"&&s.x===n.x&&s.y===n.y&&s.layer===n.from_layer))c.push({route_type:"wire",x:n.x,y:n.y,width:i,layer:n.from_layer});if(c.push(n),!(a?.route_type==="wire"&&a.x===n.x&&a.y===n.y&&a.layer===n.to_layer))c.push({route_type:"wire",x:n.x,y:n.y,width:r,layer:n.to_layer});return c})}function Loi({root:e,pcbTraceId:t,pcbTraceTeardropRenderStateByPcbTraceId:n}){let o=n.get(t);if(!o)return;let i=e.db.pcb_trace.get(t);if(!i){n.delete(t);return}wYe({pcbTrace:i,pcbTraceTeardropRenderState:o});let r=[...o.contactsBySourceTraceId.values()].flat(),s=koi({route:o.originalRoute,contacts:r}),a=Noi(s,r);if(e.db.pcb_trace.update(t,{route:a}),r.length===0){n.delete(t);return}o.generatedRoute=a}function Foi({root:e,sourceTraceId:t,contactsByPcbTraceId:n}){let o=Qoi(e),i=new Set;for(let[r,s]of o){let a=e.db.pcb_trace.get(r);if(!a){o.delete(r);continue}if(wYe({pcbTrace:a,pcbTraceTeardropRenderState:s}))i.add(r);if(s.contactsBySourceTraceId.delete(t))i.add(r)}for(let[r,s]of n){let a=e.db.pcb_trace.get(r);if(!a||s.length===0)continue;let c=o.get(r);if(!c)c={originalRoute:a.route,generatedRoute:a.route,contactsBySourceTraceId:new Map},o.set(r,c);else wYe({pcbTrace:a,pcbTraceTeardropRenderState:c});c.contactsBySourceTraceId.set(t,s),i.add(r)}for(let r of i)Loi({root:e,pcbTraceId:r,pcbTraceTeardropRenderStateByPcbTraceId:o})}function Hoi(e){if(e.shape==="polygon")return 0;if(e.shape==="circle")return e.radius*2;return Math.min(e.width,e.height)}function Ooi({root:e,sourceTraceId:t}){let o=e.db.source_trace.get(t)?.subcircuit_connectivity_map_key;if(!o)return e.db.pcb_trace.list({source_trace_id:t});return e.db.pcb_trace.list().filter((i)=>{if(i.source_trace_id===t)return!0;if(!i.source_trace_id)return!1;return e.db.source_trace.get(i.source_trace_id)?.subcircuit_connectivity_map_key===o})}function zoi({root:e,pcbTrace:t,enabledPorts:n,padContacts:o,enableUnmatchedVias:i}){let r=[...o];for(let s of e.db.pcb_via.list({pcb_trace_id:t.pcb_trace_id})){let a=n.find(({port:c})=>{let l=c._getGlobalPcbPositionAfterLayout();return Math.hypot(l.x-s.x,l.y-s.y)<0.000001});if(!(a?a.enabled:i))continue;for(let c of s.layers)r.push({x:s.x,y:s.y,layer:c,diameter:s.outer_diameter})}return r}function Goi({selector:e,selectors:t,props:n}){if(e===t[0])return n.pcbTeardropStart??n.pcbTeardrops??!1;if(e===t.at(-1))return n.pcbTeardropEnd??n.pcbTeardrops??!1;return n.pcbTeardrops??!1}function Yoi({root:e,enabledPorts:t}){let n=[];for(let{port:o,enabled:i}of t){if(!i||!o.pcb_port_id)continue;for(let r of e.db.pcb_smtpad.list({pcb_port_id:o.pcb_port_id})){if(r.shape==="polygon")continue;n.push({x:r.x,y:r.y,layer:r.layer,diameter:Hoi(r)})}for(let r of e.db.pcb_plated_hole.list({pcb_port_id:o.pcb_port_id})){if(r.shape!=="circle")continue;for(let s of r.layers)n.push({x:r.x,y:r.y,layer:s,diameter:r.outer_diameter})}}return n}function qqt(e){if(!e.root||e.root.pcbDisabled||!e.source_trace_id)return;let{root:t,source_trace_id:n,_parsedProps:o}=e,i=new Map,s=Boolean(o.pcbTeardrops||o.pcbTeardropStart||o.pcbTeardropEnd)?e._findConnectedPorts():void 0;if(s?.allPortsFound){let a=e._getTracePortOrNetSelectorListFromProps(),c=s.portsWithSelectors.map(({port:d,selector:u})=>({port:d,enabled:Goi({selector:u,selectors:a,props:o})})),l=Yoi({root:t,enabledPorts:c});for(let d of Ooi({root:t,sourceTraceId:n}))i.set(d.pcb_trace_id,zoi({root:t,pcbTrace:d,enabledPorts:c,padContacts:l,enableUnmatchedVias:o.pcbTeardrops??!1}))}Foi({root:t,sourceTraceId:n,contactsByPcbTraceId:i})}var TYe=(e)=>e.map((t)=>{let{circuitJsonMetadata:n,...o}=t;if(o.route_type!=="via")return o;let{layers:i,...r}=o;return r}),DYe=({component:e,subcircuit:t})=>{e._pcbTraceRenderWaitingForPlacementChecks=!1;let n=e,o=0,i=null,r=!1;while(n){if("_pcbPlacementDrcErrorCount"in n){if("_pcbPlacementDrcChecksPending"in n&&n._pcbPlacementDrcChecksPending===!0){r=!0;break}if(typeof n._pcbPlacementDrcErrorCount==="number"){o=n._pcbPlacementDrcErrorCount;break}if("_pcbPlacementDrcCheckError"in n&&typeof n._pcbPlacementDrcCheckError==="string"){i=n._pcbPlacementDrcCheckError;break}}n=n.parent}if(r)return e._pcbTraceRenderWaitingForPlacementChecks=!0,!0;if(o===0&&!i)return!1;let{db:s}=e.root,a=`pcb_autorouting_skipped_placement_errors_${t.subcircuit_id}`;if(!s.pcb_autorouting_error.list().some((l)=>l.pcb_error_id===a))s.pcb_autorouting_error.insert({pcb_error_id:a,error_type:"pcb_autorouting_error",subcircuit_id:t.subcircuit_id??void 0,message:i?`Autorouting was skipped because PCB placement checks could not be completed: ${i}`:`Autorouting was skipped because ${o} PCB placement error${o===1?" was":"s were"} found. Fix the placement errors or set placementDrcChecksDisabled to true to route anyway.`});return!0},Voi=0.000001,Uoi=(e)=>{let t=0;for(let n=0;n<e.length;n++){let o=e[n];for(let i=n+1;i<e.length;i++){let r=e[i];t=Math.max(t,Math.hypot(r.x-o.x,r.y-o.y))}}return t},Woi=(e,t)=>{let n=Number.POSITIVE_INFINITY;for(let o of e)for(let i of t)n=Math.min(n,Math.hypot(i.x-o.x,i.y-o.y));return n},Xoi=({component:e,subcircuit:t})=>{let{db:n}=e.root,o=n.source_trace.list().filter((a)=>a.subcircuit_id===t.subcircuit_id),i=new dy({});i.addConnections(o.map((a)=>[a.source_trace_id,...a.connected_source_port_ids,...a.connected_source_net_ids]));let r=new Map;for(let a of n.pcb_port.list()){if(typeof a.source_port_id!=="string"||typeof a.x!=="number"||typeof a.y!=="number")continue;r.set(a.source_port_id,{pcb_port_id:a.pcb_port_id,source_port_id:a.source_port_id,x:a.x,y:a.y})}let s=[];for(let a of o){if(typeof a.max_length!=="number")continue;let c=a.connected_source_port_ids.map((d)=>r.get(d)).filter((d)=>Boolean(d)),l;if(c.length>=2)l=Uoi(c);else{if(c.length!==1||a.connected_source_net_ids.length===0)continue;let d=i.getNetConnectedToId(a.source_trace_id);if(!d)continue;let h=i.getIdsConnectedToNet(d).filter((m)=>!a.connected_source_port_ids.includes(m)&&r.has(m)).map((m)=>r.get(m)).filter((m)=>Boolean(m));if(h.length===0)continue;if(n.toArray().some((m)=>(m.type==="source_pcb_ground_plane"||m.type==="pcb_ground_plane"||m.type==="pcb_copper_pour")&&typeof m.source_net_id==="string"&&i.areIdsConnected(a.source_trace_id,m.source_net_id)))continue;l=Woi(c,h)}if(l<=a.max_length+Voi)continue;s.push({sourceTraceId:a.source_trace_id,traceDisplayName:a.display_name,straightLineDistance:l,maximumTraceLength:a.max_length})}return s},NYe=({component:e,subcircuit:t})=>{let n=Xoi({component:e,subcircuit:t});if(n.length===0)return!1;let{db:o}=e.root,i=`pcb_autorouting_skipped_trace_length_violations_${t.subcircuit_id}`;if(!o.pcb_autorouting_error.list().some((s)=>s.pcb_error_id===i)){let s=n[0],a=s.traceDisplayName??s.sourceTraceId,c=n.length-1,l=c>0?` (${c} additional violation${c===1?"":"s"})`:"";o.pcb_autorouting_error.insert({pcb_error_id:i,error_type:"pcb_autorouting_error",subcircuit_id:t.subcircuit_id??void 0,message:`Autorouting was skipped because the ${s.maximumTraceLength}mm maximum length for ${a} cannot be satisfied: its endpoints are ${s.straightLineDistance.toFixed(2)}mm apart${l}.`})}return!0},Tye=(e)=>({...e._getGlobalPcbPositionAfterLayout(),layers:e.getAvailablePcbLayers()}),Koi=!1,Jqt=(e,t)=>{let n=GT(e);return Math.hypot(n.x-t.x,n.y-t.y)},joi=(e,t)=>{if(e.length<2)return e;let n=e[0],o=e[e.length-1];return Jqt(o,t)<Jqt(n,t)?hxe(e):e};function qoi(e){if(e.root?.pcbDisabled)return;let{db:t}=e.root,{_parsedProps:n,parent:o}=e,i=e.getSubcircuit(),r=e._getBoard(),s=r?.pcb_board_id?t.pcb_board.get(r.pcb_board_id):void 0;if(!o)throw Error("Trace has no parent");if(e.root?.pcbRoutingDisabled||i.getInheritedProperty("routingDisabled"))return;if(i._isInflatedFromCircuitJson)return;let a=i._parsedProps.pcbRouteCache?.pcbTraces;if(a){if(i._isLegacyAutorouterDisabled())return;let U=t.pcb_trace.insert({route:a.flatMap((X)=>X.route),source_trace_id:e.source_trace_id,subcircuit_id:i?.subcircuit_id??void 0,pcb_group_id:e.getGroup()?.pcb_group_id??void 0});e.pcb_trace_id=U.pcb_trace_id;return}if(n.pcbPath&&n.pcbPath.length>0)return;if(n.pcbPaths!==void 0)return;if(n.pcbStraightLine)return;if(!i._shouldUseTraceByTraceRouting())return;let c,l,d;try{let U=e._findConnectedPorts();c=U.allPortsFound,l=U.ports??[],d=U.portsWithSelectors??[]}catch(U){if(U instanceof AF){t.source_trace_not_connected_error.insert({...U.errorData,error_type:"source_trace_not_connected_error"}),e._couldNotFindPort=!0;return}throw U}let u=[];if(!c)return;let h=d.map(({selector:U,port:X})=>gxe(U,X)).find(Boolean);if(h){t.pcb_trace_error.insert({error_type:"pcb_trace_error",source_trace_id:e.source_trace_id,message:h,pcb_trace_id:e.pcb_trace_id,pcb_component_ids:[],pcb_port_ids:l.map((U)=>U.pcb_port_id).filter(Boolean)});return}let A=[];for(let U of l)if(!U._hasMatchedPcbPrimitive())A.push(U);if(A.length>0){t.pcb_trace_error.insert({error_type:"pcb_trace_error",source_trace_id:e.source_trace_id,message:`Some ports did not have a matching PCB primitive (e.g. a pad or plated hole), this can happen if a footprint is missing. As a result, ${e} wasn't routed. Missing ports: ${A.map((U)=>U.getString()).join(", ")}`,pcb_trace_id:e.pcb_trace_id,pcb_component_ids:[],pcb_port_ids:A.map((U)=>U.pcb_port_id).filter(Boolean)});return}let m=DYe({component:e,subcircuit:i}),p=NYe({component:e,subcircuit:i});if(m||p)return;let g=e._findConnectedNets().netsWithSelectors;if(l.length===0&&g.length===2){let[U,X]=g.map(({net:ne})=>ne),V=U.getAllConnectedPorts(),W=X.getAllConnectedPorts();if(V.length===0||W.length===0){console.log("Nothing to connect this net to, one of the nets is empty. TODO should emit a warning!");return}let j=[V[0],W[0]],q=1/0;for(let ne of V){let ce=Oqt(ne,W),oe=ne._getGlobalPcbPositionBeforeLayout(),ie=ce._getGlobalPcbPositionBeforeLayout(),J=Math.sqrt((oe.x-ie.x)**2+(oe.y-ie.y)**2);if(J<q)q=J,j=[ne,ce]}l.push(...j)}else if(l.length===1&&g.length===1){let U=l[0],V=g[0].net.getAllConnectedPorts().filter((j)=>j!==U);if(V.length===0){console.log("Nothing to connect this port to, the net is empty. TODO should emit a warning!");return}let W=Oqt(U,V);u.push(W),l.push(W)}else if(l.length>1&&g.length>=1){e.renderError("Trace has more than one port and one or more nets, we don't currently support this type of complex trace routing");return}let _=l.flatMap((U)=>U.matchedComponents.filter((X)=>X.componentName==="TraceHint")),f=(e._parsedProps.pcbRouteHints??[]).concat(_.flatMap((U)=>U.getPcbRouteHints()));if(l.length>2){e.renderError(`Trace has more than two ports (${l.map((U)=>U.getString()).join(", ")}), routing between more than two ports for a single trace is not implemented`);return}if(e.getSubcircuit().selectAll("trace").filter((U)=>U.renderPhaseStates.PcbTraceRender.initialized).some((U)=>U._portsRoutedOnPcb.length===l.length&&U._portsRoutedOnPcb.every((X)=>l.includes(X))))return;let C=[];if(f.length===0)C=[Tye(l[0]),Tye(l[1])];else C=[Tye(l[0]),...f,Tye(l[1])];let I=Nni(C,{layerSelectionPreference:DUe(i._getSubcircuitLayerCount())});if(Koi&&I.length===0){e.renderError(`Could not find a common layer (using hints) for trace ${e.getString()}`);return}let b=js(e.root.db.toArray()),[P,E]=doi(()=>Kon(e.root.db.toArray()));if(E){e.renderError({type:"pcb_trace_error",error_type:"pcb_trace_error",pcb_trace_error_id:e.pcb_trace_id,message:`Error getting obstacles for autorouting: ${E.message}`,source_trace_id:e.source_trace_id,center:{x:0,y:0},pcb_port_ids:l.map((U)=>U.pcb_port_id),pcb_trace_id:e.pcb_trace_id,pcb_component_ids:[]});return}for(let U of P)if(U.connectedTo.length>0){let V=b.getNetConnectedToId(U.connectedTo[0]);if(V)U.connectedTo.push(V)}let B=[];if(I.length===0)B=C;else{let U=I[0].layer_path;B=C.map((X,V)=>{if(X.via)return{...X,via_to_layer:U[V]};return{...X,layers:[U[V]]}})}B[0].pcb_port_id=l[0].pcb_port_id,B[B.length-1].pcb_port_id=l[1].pcb_port_id;let w=[];for(let[U,X]of Won(B)){let V="via_to_layer"in U?U.via_to_layer:null,W=2,j="layers"in U&&U.layers.length===1?U.layers[0]:V??"top",q="layers"in X&&X.layers.length===1?X.layers[0]:V??"top",ne="pcb_port_id"in U?U.pcb_port_id:null,ce="pcb_port_id"in X?X.pcb_port_id:null,oe=e._getExplicitTraceThickness()??e.getSubcircuit()._parsedProps.minTraceWidth??KI.min_trace_width,ie=new epe({OBSTACLE_MARGIN:oe*2,isRemovePathLoopsEnabled:!0,optimizeWithGoalBoxes:Boolean(ne&&ce),connMap:b,input:{obstacles:P,minTraceWidth:oe,connections:[{name:e.source_trace_id,pointsToConnect:[{...U,layer:j,pcb_port_id:ne},{...X,layer:q,pcb_port_id:ce}]}],layerCount:e.getSubcircuit()._getSubcircuitLayerCount(),bounds:{minX:Math.min(U.x,X.x)-2,maxX:Math.max(U.x,X.x)+2,minY:Math.min(U.y,X.y)-2,maxY:Math.max(U.y,X.y)+2}}}),J=null;try{J=ie.solveAndMapToTraces()}catch(le){e.renderError({type:"pcb_trace_error",pcb_trace_error_id:e.source_trace_id,error_type:"pcb_trace_error",message:`error solving route: ${le.message}`,source_trace_id:e.pcb_trace_id,center:{x:(U.x+X.x)/2,y:(U.y+X.y)/2},pcb_port_ids:l.map((he)=>he.pcb_port_id),pcb_trace_id:e.pcb_trace_id,pcb_component_ids:l.map((he)=>he.pcb_component_id)})}if(!J)return;if(J.length===0){e.renderError({type:"pcb_trace_error",error_type:"pcb_trace_error",pcb_trace_error_id:e.pcb_trace_id,message:`Could not find a route for ${e}`,source_trace_id:e.source_trace_id,center:{x:(U.x+X.x)/2,y:(U.y+X.y)/2},pcb_port_ids:l.map((le)=>le.pcb_port_id),pcb_trace_id:e.pcb_trace_id,pcb_component_ids:l.map((le)=>le.pcb_component_id)});return}let[ee]=J;if(ee.route=joi(ee.route,U),V)ee.route=ee.route.map((le)=>{if(le.route_type==="wire"&&!le.layer)le.layer=V;return le});if(ne&&ee.route[0].route_type==="wire")ee.route[0].start_pcb_port_id=ne;let se=ee.route[ee.route.length-1];if(ce&&se.route_type==="wire")se.end_pcb_port_id=ce;w.push(ee.route)}let T=Rni(w),Q=_xe(T),N=e.getInheritedMergedProperty("pcbStyle"),{holeDiameter:F,padDiameter:H}=IB(N),z=t.pcb_trace.insert({route:TYe(T),source_trace_id:e.source_trace_id,subcircuit_id:e.getSubcircuit()?.subcircuit_id,trace_length:Q}),Y=e.subcircuit_connectivity_map_key??t.source_trace.get(e.source_trace_id)?.subcircuit_connectivity_map_key;e._portsRoutedOnPcb=l,e.pcb_trace_id=z.pcb_trace_id;for(let U of T)if(U.route_type==="via"){let X=U,{from_layer:V,to_layer:W}=U;t.pcb_via.insert({pcb_trace_id:z.pcb_trace_id,x:U.x,y:U.y,hole_diameter:F,outer_diameter:H,layers:Xon({fromLayer:V,toLayer:W,layerCount:i._getSubcircuitLayerCount(),allowBlindAndBuriedVias:s?.allow_blind_and_buried_vias??!1,physicalLayers:X.layers}),from_layer:V,to_layer:W,subcircuit_id:i?.subcircuit_id??void 0,pcb_group_id:e.getGroup()?.pcb_group_id??void 0,subcircuit_connectivity_map_key:Y})}e._insertErrorIfTraceIsOutsideBoard(T,l)}var fxe=(e)=>{switch(e){case"up":return"y+";case"down":return"y-";case"left":return"x-";case"right":return"x+";default:}},QUe=({db:e,source_trace_id:t,schematic_sheet_id:n,sameNetOnly:o,differentNetOnly:i})=>{if(!o&&!i)i=!0;let r=e.source_trace.get(t),s=[];for(let a of e.schematic_trace.list()){if(a.source_trace_id===t)continue;if(n!==void 0&&a.schematic_sheet_id!==n)continue;let l=e.source_trace.get(a.source_trace_id)?.subcircuit_connectivity_map_key===r.subcircuit_connectivity_map_key;if(i&&l)continue;if(o&&!l)continue;s.push(a)}return s},Joi=({edges:e,otherEdges:t})=>{let n=[...e];for(let o=0;o<n.length;o++){if(o>2000)throw Error("Over 2000 iterations spent inside createSchematicTraceCrossingSegments, you have triggered an infinite loop, please report this!");let i=n[o],r=Math.abs(i.from.x-i.to.x)<0.01?"vertical":i.from.y===i.to.y?"horizontal":"not-orthogonal";if(r==="not-orthogonal")continue;let s=[];for(let p of t){let g=p.from.x===p.to.x?"vertical":p.from.y===p.to.y?"horizontal":"not-orthogonal";if(g==="not-orthogonal")continue;if(r===g)continue;if(MQ([i.from,i.to],[p.from,p.to],{lineThickness:0.01})){let f=r==="vertical"?i.from.x:p.from.x,y=r==="vertical"?p.from.y:i.from.y,x={x:f,y};s.push({otherEdge:p,crossingPoint:x,distanceFromEdgeFrom:al(i.from,x)})}}if(s.length===0)continue;let a=s[0];for(let p of s)if(p.distanceFromEdgeFrom<a.distanceFromEdgeFrom)a=p;let c=a.crossingPoint,l=0.075;if(c.x===i.from.x&&c.y===i.from.y)continue;let d=UG(i.from,c),u={x:c.x-d.x*l/2,y:c.y-d.y*l/2},h={x:c.x+d.x*l/2,y:c.y+d.y*l/2},A=al(h,i.to)<l,m=[{from:i.from,to:u},{from:u,to:h,is_crossing:!0},{from:h,to:i.to}];if(n.splice(o,1,...m),o+=m.length-2,A)o++}return n},RYe=0.001,aW=(e,t)=>{let n=Math.min(t.from.x,t.to.x),o=Math.max(t.from.x,t.to.x),i=Math.min(t.from.y,t.to.y),r=Math.max(t.from.y,t.to.y);return e.x>=n&&e.x<=o&&e.y>=i&&e.y<=r},$qt=(e)=>{let t=Math.abs(e.from.x-e.to.x)<RYe,n=Math.abs(e.from.y-e.to.y)<RYe;if(t)return"vertical";if(n)return"horizontal";return"diagonal"},$oi=(e,t)=>{let n=$qt(e),o=$qt(t);if(n===o)return null;if(n==="vertical"&&o==="horizontal"||n==="horizontal"&&o==="vertical"){let u=n==="vertical"?e:t,h=n==="horizontal"?e:t,A=u.from.x,m=h.from.y,p={x:A,y:m};return aW(p,e)&&aW(p,t)?p:null}if(n==="vertical"||o==="vertical"){let u=n==="vertical"?e:t,h=n==="vertical"?t:e,A=u.from.x,m=(h.to.y-h.from.y)/(h.to.x-h.from.x),p=h.from.y-m*h.from.x,g=m*A+p,_={x:A,y:g};return aW(_,e)&&aW(_,t)?_:null}let i=(e.to.y-e.from.y)/(e.to.x-e.from.x),r=e.from.y-i*e.from.x,s=(t.to.y-t.from.y)/(t.to.x-t.from.x),a=t.from.y-s*t.from.x;if(Math.abs(i-s)<RYe)return null;let c=(a-r)/(i-s),l=i*c+r,d={x:c,y:l};return aW(d,e)&&aW(d,t)?d:null},Zqt=({edges:e,db:t,source_trace_id:n,schematic_sheet_id:o})=>{let i=QUe({db:t,source_trace_id:n,schematic_sheet_id:o,sameNetOnly:!0}).flatMap((s)=>s.edges),r=new Map;for(let s of e)for(let a of i){let c=$oi(s,a);if(c){let l=`${c.x.toFixed(6)},${c.y.toFixed(6)}`;if(!r.has(l))r.set(l,c)}}return Array.from(r.values())};function eJt(e){let t=e%360;return t<0?t+360:t}function Zoi(e,t,n,o){if(o==="counterclockwise"){if(n>=t)return e>=t&&e<=n;return e>=t||e<=n}if(n<=t)return e<=t&&e>=n;return e<=t||e>=n}function eii(e){let{center:t,radius:n,start_angle_degrees:o,end_angle_degrees:i}=e,r=e.direction??"counterclockwise";if(!t||typeof t.x!=="number"||typeof t.y!=="number"||typeof n!=="number"||typeof o!=="number"||typeof i!=="number")return null;let s=eJt(o),a=eJt(i),c=new Set([s,a]),l=[0,90,180,270];for(let m of l)if(Zoi(m,s,a,r))c.add(m);let d=1/0,u=1/0,h=-1/0,A=-1/0;for(let m of c){let p=m*Math.PI/180,g=t.x+n*Math.cos(p),_=t.y+n*Math.sin(p);d=Math.min(d,g),h=Math.max(h,g),u=Math.min(u,_),A=Math.max(A,_)}if(!Number.isFinite(d)||!Number.isFinite(u))return null;return{minX:d,maxX:h,minY:u,maxY:A}}function Nie(e){let t=1/0,n=1/0,o=-1/0,i=-1/0;for(let r of e){let s,a,c,l;if(r.type==="schematic_component")s=r.center?.x,a=r.center?.y,c=r.size?.width,l=r.size?.height;else if(r.type==="schematic_box")s=r.x,a=r.y,c=r.width,l=r.height;else if(r.type==="schematic_port")s=r.center?.x,a=r.center?.y,c=0.2,l=0.2;else if(r.type==="schematic_text")s=r.position?.x,a=r.position?.y,c=(r.text?.length??0)*0.1,l=0.2;else if(r.type==="schematic_line"){let d=r.x1??0,u=r.y1??0,h=r.x2??0,A=r.y2??0;s=(d+h)/2,a=(u+A)/2,c=Math.abs(h-d),l=Math.abs(A-u)}else if(r.type==="schematic_rect"){if(s=r.center?.x,a=r.center?.y,c=r.width,l=r.height,r.rotation&&s!==void 0&&a!==void 0&&c!==void 0&&l!==void 0){let d=_o(So(s,a),bA(r.rotation));for(let u of[-c/2,c/2])for(let h of[-l/2,l/2]){let A=tt(d,{x:u,y:h});t=Math.min(t,A.x),o=Math.max(o,A.x),n=Math.min(n,A.y),i=Math.max(i,A.y)}continue}}else if(r.type==="schematic_circle"){s=r.center?.x,a=r.center?.y;let d=r.radius;if(typeof d==="number")c=d*2,l=d*2}else if(r.type==="schematic_arc"){let d=eii(r);if(d)t=Math.min(t,d.minX),o=Math.max(o,d.maxX),n=Math.min(n,d.minY),i=Math.max(i,d.maxY);continue}else if(r.type==="schematic_path"){let d=r.points;if(Array.isArray(d)){for(let u of d)if(typeof u.x==="number"&&typeof u.y==="number")t=Math.min(t,u.x),o=Math.max(o,u.x),n=Math.min(n,u.y),i=Math.max(i,u.y)}continue}if(typeof s==="number"&&typeof a==="number"&&typeof c==="number"&&typeof l==="number")t=Math.min(t,s-c/2),o=Math.max(o,s+c/2),n=Math.min(n,a-l/2),i=Math.max(i,a+l/2)}return{minX:t,maxX:o,minY:n,maxY:i}}function tii(e,t={}){let{minX:n,maxX:o,minY:i,maxY:r}=e,s=t.padding??1;if(!isFinite(n)||!isFinite(o)||!isFinite(i)||!isFinite(r))return[];let a=n-s,c=o+s,l=r+s,d=i-s,u=0.01;return[{type:"rect",layers:["top"],center:{x:(a+c)/2,y:l},width:c-a,height:u,connectedTo:[]},{type:"rect",layers:["top"],center:{x:(a+c)/2,y:d},width:c-a,height:u,connectedTo:[]},{type:"rect",layers:["top"],center:{x:a,y:(l+d)/2},width:u,height:l-d,connectedTo:[]},{type:"rect",layers:["top"],center:{x:c,y:(l+d)/2},width:u,height:l-d,connectedTo:[]}]}var nii=(e)=>{let t=e.root.db,n=e._findConnectedPorts().ports??[],o=new Set(n.map((s)=>s.schematic_port_id)),i=[];for(let s of t.toArray()){if(s.type==="schematic_component"){let a=Boolean(s.symbol_name),c=s.size.width>s.size.height?"horz":"vert";i.push({type:"rect",layers:["top"],center:s.center,width:s.size.width+(a&&c==="horz"?-0.5:0),height:s.size.height+(a&&c==="vert"?-0.5:0),connectedTo:[]})}if(s.type==="schematic_port"){if(o.has(s.schematic_port_id))continue;let a=s.facing_direction?Kv(s.facing_direction):{x:0,y:0};i.push({type:"rect",layers:["top"],center:{x:s.center.x-a.x*0.1,y:s.center.y-a.y*0.1},width:0.1+Math.abs(a.x)*0.3,height:0.1+Math.abs(a.y)*0.3,connectedTo:[]})}if(s.type==="schematic_text")i.push({type:"rect",layers:["top"],center:s.position,width:(s.text?.length??0)*0.1,height:0.2,connectedTo:[]});if(s.type==="schematic_box")i.push({type:"rect",layers:["top"],center:{x:s.x,y:s.y},width:s.width,height:s.height,connectedTo:[]})}let r=Nie(t.toArray());return i.push(...tii(r,{padding:1})),i},oii=({edges:e,db:t,source_trace_id:n,schematic_sheet_id:o})=>{let i=QUe({db:t,source_trace_id:n,schematic_sheet_id:o,differentNetOnly:!0}).flatMap((s)=>s.edges),r=(s)=>{let{from:a,to:c}=s;return a.x===c.x?"vertical":"horizontal"};for(let s of e){let a=r(s),c=()=>i.find((d)=>r(d)===a&&MQ([s.from,s.to],[d.from,d.to],{lineThickness:0.05})),l=c();while(l){if(a==="horizontal")s.from.y+=0.1,s.to.y+=0.1;else s.from.x+=0.1,s.to.x+=0.1;l=c()}}},iii=(e)=>{if(e.root?._featureMspSchematicTraceRouting)return;if(e._couldNotFindPort)return;if(e.root?.schematicDisabled)return;if(e.getCollapsedSchematicBoxAncestor())return;let{db:t}=e.root,{_parsedProps:n,parent:o}=e,i=e._getSchematicNetLabelText(),r=e._resolveSchematicSheetId();if(!o)throw Error("Trace has no parent");let s,a;try{let Y=e._findConnectedPorts();s=Y.allPortsFound,a=Y.portsWithSelectors??[]}catch(Y){if(Y instanceof AF){t.source_trace_not_connected_error.insert({...Y.errorData,error_type:"source_trace_not_connected_error"});return}throw Y}let{netsWithSelectors:c}=e._findConnectedNets();if(!s)return;let l=(Y)=>{if(r&&Y.source_port_id){let U=t.schematic_port.getWhere({source_port_id:Y.source_port_id,schematic_sheet_id:r});if(U)return U}if(Y.schematic_port_id)return t.schematic_port.get(Y.schematic_port_id)??null;if(!r&&Y.source_port_id){let U=t.schematic_port.list({source_port_id:Y.source_port_id}).filter((X)=>!X.schematic_sheet_id);if(U.length===1)return U[0]}return null},d=a.flatMap(({port:Y})=>{let U=l(Y);if(!U)return[];return[{port:Y,position:U.center,schematic_port_id:U.schematic_port_id,facingDirection:U.facing_direction??null}]}),u=d.map(({schematic_port_id:Y})=>Y).sort(),h=d.some(({port:Y,schematic_port_id:U})=>Y.schematic_port_id!==U),A=u.join(","),m=e.root?._getBoard();if(m?._connectedSchematicPortPairs){if(m._connectedSchematicPortPairs.has(A))return}let p={name:e.source_trace_id,pointsToConnect:[]},g=nii(e);if(d.length===1&&c.length===1){let Y=c[0].net,{port:U,position:X}=d[0],V=e.getSubcircuit().selectAll("netlabel").find((q)=>{let ne=q._parsedProps.connection??q._parsedProps.connectsTo;if(!ne)return!1;if(Array.isArray(ne))return ne.some((oe)=>e.getSubcircuit().selectOne(oe,{port:!0})===U);return e.getSubcircuit().selectOne(ne,{port:!0})===U});if(!V){let q=t.schematic_net_label.getWhere({source_trace_id:e.source_trace_id});if(q)V=q}if(V){let q="_getGlobalSchematicPositionBeforeLayout"in V?V._getGlobalSchematicPositionBeforeLayout():V.anchor_position,ne=[];if(X.x===q.x||X.y===q.y)ne.push({from:X,to:q});else ne.push({from:X,to:{x:q.x,y:X.y}}),ne.push({from:{x:q.x,y:X.y},to:q});let ce=Zqt({edges:ne,db:t,source_trace_id:e.source_trace_id,schematic_sheet_id:r}),oe=t.schematic_trace.insert({source_trace_id:e.source_trace_id,edges:ne,junctions:ce,subcircuit_connectivity_map_key:e.subcircuit_connectivity_map_key??void 0,schematic_sheet_id:r});e.schematic_trace_id=oe.schematic_trace_id;return}if(i){let q=GW(U.facingDirection)??"bottom";t.schematic_net_label.insert({text:i,source_net_id:Y.source_net_id,anchor_position:X,center:y3({anchor_position:X,anchor_side:q,text:i}),anchor_side:q,schematic_sheet_id:e._resolveSchematicSheetId()});return}let W=GW(U.facingDirection)??"bottom",j=t.schematic_net_label.insert({text:Y._parsedProps.name,source_net_id:Y.source_net_id,anchor_position:X,center:y3({anchor_position:X,anchor_side:W,text:Y._parsedProps.name}),anchor_side:W,schematic_sheet_id:e._resolveSchematicSheetId()});return}if(i&&!h){if("from"in e.props&&"to"in e.props||"path"in e.props){e._doInitialSchematicTraceRenderWithDisplayLabel();return}}if(d.length<2)return;let y=(()=>{let Y=[];for(let X=0;X<d.length-1;X++){let V=d[X],W=d[X+1],j=Yz({x:V.position.x,y:V.position.y,facingDirection:fxe(V.facingDirection)},{x:W.position.x,y:W.position.y,facingDirection:fxe(W.facingDirection)});for(let q=0;q<j.length-1;q++)Y.push({from:j[q],to:j[q+1]})}let U=(X,V)=>{let W=V.width/2,j=V.height/2,q=V.center.x-W,ne=V.center.x+W,ce=V.center.y-j,oe=V.center.y+j,ie=(ee)=>ee.x>=q&&ee.x<=ne&&ee.y>=ce&&ee.y<=oe;if(ie(X.from)||ie(X.to))return!0;return[[{x:q,y:ce},{x:ne,y:ce}],[{x:ne,y:ce},{x:ne,y:oe}],[{x:ne,y:oe},{x:q,y:oe}],[{x:q,y:oe},{x:q,y:ce}]].some((ee)=>MQ([X.from,X.to],ee,{lineThickness:0}))};for(let X of Y)for(let V of g)if(U(X,V))return null;return Y})();if(y&&y.length===0)y=null;p.pointsToConnect=d.map(({position:Y})=>({...Y,layer:"top"}));let x=Tni(g),C=2,I={minTraceWidth:0.1,obstacles:g,connections:[p],bounds:{minX:x.minX-C,maxX:x.maxX+C,minY:x.minY-C,maxY:x.maxY+C},layerCount:1},b=epe,P=!1;if(e.getSubcircuit().props._schDirectLineRoutingEnabled)b=Rqt,P=!0;if(!y){let U=new b({input:I,MAX_ITERATIONS:100,OBSTACLE_MARGIN:0.1,isRemovePathLoopsEnabled:!0,isShortenPathWithShortcutsEnabled:!0,marginsWithCosts:[{margin:1,enterCost:0,travelCostFactor:1},{margin:0.3,enterCost:0,travelCostFactor:1},{margin:0.2,enterCost:0,travelCostFactor:2},{margin:0.1,enterCost:0,travelCostFactor:3}]}).solveAndMapToTraces();if(U.length===0){if(!h&&(e._isSymbolToChipConnection()||e._isSymbolToSymbolConnection()||e._isChipToChipConnection())){e._doInitialSchematicTraceRenderWithDisplayLabel();return}U=new Rqt({input:I}).solveAndMapToTraces(),P=!0}let[{route:X}]=U;y=[];let V=X.filter((W)=>W.route_type==="wire"||W.route_type==="via");for(let W=0;W<V.length-1;W++)y.push({from:V[W],to:V[W+1]})}let E=e.source_trace_id,B=[];if(!P){oii({edges:y,db:t,source_trace_id:E,schematic_sheet_id:r});let Y=QUe({db:t,source_trace_id:E,schematic_sheet_id:r,differentNetOnly:!0}).flatMap((U)=>U.edges);y=Joi({edges:y,otherEdges:Y}),B=Zqt({edges:y,db:t,source_trace_id:e.source_trace_id,schematic_sheet_id:r})}if(!y||y.length===0)return;let w=y[y.length-1],T=d[d.length-1],Q=Qqt(w);y.push(...MYe({lastEdge:w,lastEdgePort:T,lastDominantDirection:Q}));let N=y[0],F=d[0],H=Qqt(N);if(y.unshift(...MYe({firstEdge:N,firstEdgePort:F,firstDominantDirection:H})),!e.source_trace_id)throw Error("Missing source_trace_id for schematic trace insertion.");if(!h&&e.getSubcircuit()._parsedProps.schTraceAutoLabelEnabled&&loi(B,y)>=5&&(e._isSymbolToChipConnection()||e._isSymbolToSymbolConnection()||e._isChipToChipConnection())){e._doInitialSchematicTraceRenderWithDisplayLabel();return}let z=t.schematic_trace.insert({source_trace_id:e.source_trace_id,edges:y,junctions:B,subcircuit_connectivity_map_key:e.subcircuit_connectivity_map_key??void 0,schematic_sheet_id:r});e.schematic_trace_id=z.schematic_trace_id;for(let{schematic_port_id:Y}of d)t.schematic_port.update(Y,{is_connected:!0});if(m?._connectedSchematicPortPairs)m._connectedSchematicPortPairs.add(A)},rii=(e,{db:t})=>{let n=e.map((o)=>{let i=t.source_port.get(o.source_port_id);if(!i?.source_component_id)return null;let r=t.source_component.get(i.source_component_id);if(r?.ftype==="simple_capacitor")return r.max_decoupling_trace_length;return null}).filter((o)=>typeof o==="number");if(n.length===0)return;return Math.min(...n)};function sii({ports:e,nets:t}){if(e.length>=2)return`${e[0]?.selector} to ${e[1]?.selector}`;if(e.length===1&&t.length===1)return`${e[0]?.selector} to net.${t[0]._parsedProps.name}`;return}function aii(e){let t=new Set;for(let{port:n}of e){if(!(n.parent instanceof Zon))continue;let o=n.parent._getConnectedNetOrTrace();if(o instanceof gB)t.add(o)}return[...t]}var qm=class extends jo{source_trace_id=null;pcb_trace_id=null;isAntennaTrace=!1;schematic_trace_id=null;_inflatedPcbTraces;_inflatedPcbVias;_portsRoutedOnPcb;subcircuit_connectivity_map_key=null;_exposesSubcircuitConnection=!1;_traceConnectionHash=null;_couldNotFindPort;constructor(e){super(e);this._portsRoutedOnPcb=[]}_getExplicitTraceThickness(){return this._parsedProps.thickness??this._parsedProps.width}_getSchematicNetLabelText(){return this._parsedProps.schDisplayLabel??this._parsedProps.displayName??this._parsedProps.name}get config(){return{zodProps:zyt,componentName:"Trace"}}_getTracePortOrNetSelectorListFromProps(){if("from"in this.props&&"to"in this.props)return[typeof this.props.from==="string"?this.props.from:this.props.from.getPortSelector(),typeof this.props.to==="string"?this.props.to:this.props.to.getPortSelector()];if("path"in this.props)return this.props.path.map((e)=>typeof e==="string"?e:e.getPortSelector());return[]}getTracePortPathSelectors(){return this._getTracePortOrNetSelectorListFromProps().filter((e)=>!e.includes("net."))}getTracePathNetSelectors(){return this._getTracePortOrNetSelectorListFromProps().filter((e)=>e.includes("net."))}_findConnectedPorts(){return Eoi(this)}_resolveNet(e){let t=this.getSubcircuit().selectOne(e,{type:"net"});if(t)return t;let n=e.match(/^net\.(.+)$/),o=n?n[1]:null;if(!o)return null;let i=this.root?._getBoard();if(!i)return this.renderError(`Could not find a <board> ancestor for ${this}, so net "${e}" cannot be resolved`),null;return i.getDescendants().find((s)=>s.componentName==="Net"&&s._parsedProps.name===o)||null}_findConnectedNets(){let e=this.getTracePathNetSelectors().map((n)=>({selector:n,net:this._resolveNet(n)})),t=e.filter((n)=>!n.net);if(t.length>0)this.renderError(`Could not find net for selector "${t[0].selector}" inside ${this}`);return{netsWithSelectors:e,nets:e.map((n)=>n.net)}}_getAllTracesConnectedToSameNet(){let e=this.getSubcircuit().selectAll("trace"),t=this._findConnectedNets().nets,n=this._findConnectedPorts().ports??[];return e.filter((o)=>{if(o===this)return!1;let i=o._findConnectedNets().nets,r=o._findConnectedPorts().ports??[];return i.some((s)=>t.includes(s))||r.some((s)=>n.includes(s))})}_isExplicitlyConnectedToPort(e){let{allPortsFound:t,portsWithSelectors:n}=this._findConnectedPorts();if(!t)return!1;return n.map((i)=>i.port).includes(e)}_isExplicitlyConnectedToNet(e){return this._findConnectedNets().nets.includes(e)}doInitialCreateNetsFromProps(){Die(this,this.getTracePathNetSelectors())}_computeTraceConnectionHash(){let{allPortsFound:e,ports:t}=this._findConnectedPorts();if(!e||!t)return null;return[...t].sort((i,r)=>(i.pcb_port_id||"").localeCompare(r.pcb_port_id||"")).map((i)=>i.pcb_port_id).join(",")}doInitialSourceTraceRender(){let{db:e}=this.root,{_parsedProps:t,parent:n}=this;if(!n){this.renderError("Trace has no parent");return}let o,i;try{let d=this._findConnectedPorts();o=d.allPortsFound,i=d.portsWithSelectors??[]}catch(d){if(d instanceof AF){e.source_trace_not_connected_error.insert({...d.errorData,error_type:"source_trace_not_connected_error"}),this._couldNotFindPort=!0;return}throw d}if(!o)return;this._traceConnectionHash=this._computeTraceConnectionHash();let s=e.source_trace.list().find((d)=>d.subcircuit_connectivity_map_key===this.subcircuit_connectivity_map_key&&[...d.connected_source_port_ids].sort().join(",")===this._traceConnectionHash);if(s){this.source_trace_id=s.source_trace_id;return}let a=this._findConnectedNets().nets;for(let d of aii(i))if(!a.includes(d))a.push(d);let c=sii({ports:i,nets:a}),l=e.source_trace.insert({connected_source_port_ids:i.map((d)=>d.port.source_port_id),connected_source_net_ids:a.map((d)=>d.source_net_id),subcircuit_id:this.getSubcircuit()?.subcircuit_id,name:t.name,max_length:t.maxLength??rii(i.map((d)=>d.port),{db:e}),max_via_count:t.maxViaCount,display_name:t.displayName??c,min_trace_thickness:this._getExplicitTraceThickness()});if(this.source_trace_id=l.source_trace_id,!t.name&&a.length===0)e.source_unnamed_trace_warning.insert({message:`${this.getString()} is missing a name. Add a name prop to make the trace easier to identify.`,source_trace_id:l.source_trace_id,subcircuit_id:this.getSubcircuit()?.subcircuit_id??void 0,warning_type:"source_unnamed_trace_warning"})}_insertErrorIfTraceIsOutsideBoard(e,t){let{db:n}=this.root,o=this._getBoard();if(!o)return;let i=o.pcb_board_id;if(!i)return;if($ni({mergedRoute:e,db:n,pcbBoardId:i}))n.pcb_trace_error.insert({error_type:"pcb_trace_error",source_trace_id:this.source_trace_id,message:`Trace ${this.getString()} routed outside the board boundaries.`,pcb_trace_id:this.pcb_trace_id,pcb_component_ids:[],pcb_port_ids:t.map((s)=>s.pcb_port_id)})}doInitialPcbManualTraceRender(){Doi(this)}doInitialPcbTraceTeardropRender(){qqt(this)}updatePcbTraceTeardropRender(){qqt(this)}doInitialPcbTraceRender(){qoi(this)}_doInitialSchematicTraceRenderWithDisplayLabel(){voi(this)}_isSymbolToChipConnection(){let{allPortsFound:e,ports:t}=this._findConnectedPorts();if(!e||t.length!==2)return!1;let[n,o]=t;if(!n?.parent||!o?.parent)return!1;let i=n.parent.config.shouldRenderAsSchematicBox,r=o.parent.config.shouldRenderAsSchematicBox;return i&&!r||!i&&r}_isSymbolToSymbolConnection(){let{allPortsFound:e,ports:t}=this._findConnectedPorts();if(!e||t.length!==2)return!1;let[n,o]=t;if(!n?.parent||!o?.parent)return!1;let i=!n.parent.config.shouldRenderAsSchematicBox,r=!o.parent.config.shouldRenderAsSchematicBox;return i&&r}_isChipToChipConnection(){let{allPortsFound:e,ports:t}=this._findConnectedPorts();if(!e||t.length!==2)return!1;let[n,o]=t;if(!n?.parent||!o?.parent)return!1;let i=n.parent.config.shouldRenderAsSchematicBox,r=o.parent.config.shouldRenderAsSchematicBox;return i&&r}doInitialSchematicTraceRender(){iii(this)}},yxe={},iin=(e)=>{let t=Object.fromEntries(Object.entries(e).map(([n,o])=>[n.toLowerCase(),o]));Object.assign(yxe,e),Object.assign(yxe,t)},cii=class extends jo{constructor(e,t){super(e);let n=(o,i)=>{if(typeof o==="number")return o;if(typeof o==="string")try{return this._resolvePcbCoordinate(o,i,{allowBoardVariables:!1})}catch(r){return 0}return 0};this._parsedProps={...e,error:t,type:e.type||"unknown",component_name:e.name,error_type:"source_failed_to_create_component_error",message:t instanceof Error?t.message:String(t),pcbX:n(e.pcbX,"pcbX"),pcbY:n(e.pcbY,"pcbY"),schX:e.schX,schY:e.schY}}formatErrorDetails(){let e=this._parsedProps.selector??this._parsedProps.selectors??this._parsedProps.in??this._parsedProps.within,t=e===void 0?void 0:typeof e==="string"?e:this.safeStringify(e),n=this.safeStringify(this._parsedProps);return{selectorText:t,propsText:n}}safeStringify(e){let t=new WeakSet,n=JSON.stringify(e,(o,i)=>{if(typeof i==="bigint")return i.toString();if(typeof i==="function")return`[Function ${i.name||"anonymous"}]`;if(typeof i==="symbol")return i.toString();if(typeof i==="object"&&i!==null){if(t.has(i))return"[Circular]";t.add(i)}return i},2);if(!n)return"undefined";if(n.length>2000)return`${n.slice(0,2000)}…`;return n}get config(){return{componentName:"ErrorPlaceholder",zodProps:at({}).passthrough()}}doInitialSourceRender(){if(this.root?.db){let e=this._getGlobalPcbPositionBeforeLayout(),t=this._getGlobalSchematicPositionBeforeLayout(),{selectorText:n,propsText:o}=this.formatErrorDetails(),i=[n?`Within selector: ${n}`:null,`Props: ${o}`].filter(Boolean).join(" "),r=`Could not create ${this._parsedProps.componentType??"component"}${this._parsedProps.name?` "${this._parsedProps.name}"`:""}. ${this._parsedProps.error?.formattedError?._errors?.join("; ")||this._parsedProps.message}`;this.root.db.source_failed_to_create_component_error.insert({component_name:this._parsedProps.component_name,error_type:"source_failed_to_create_component_error",message:`${r}${i?` Details: ${i}`:""}`,pcb_center:e,schematic_center:t})}}};function lii(e,t){return new cii(e,t)}function dii(e,t){let n=e;return n.__tsci={...t},e}var uii={supportsMutation:!0,createInstance(e,t){let n=yxe[e];if(!n){if(Object.keys(yxe).length===0)throw Error("No components registered in catalogue, did you forget to import lib/register-catalogue in your test file?");throw Error(`Unsupported component type "${e}". No element with this name is registered in the @tscircuit/core catalogue. Check for typos or see https://docs.tscircuit.com/category/built-in-elements for a list of valid components. To add your own component, see docs/CREATING_NEW_COMPONENTS.md`)}try{return dii(new n(t),{})}catch(o){return lii({...t,componentType:e},o)}},createTextInstance(e){return{__text:e}},appendInitialChild(e,t){e.add(t)},appendChild(e,t){e.add(t)},appendChildToContainer(e,t){e.add(t)},finalizeInitialChildren(){return!1},prepareUpdate(){return null},shouldSetTextContent(){return!1},getRootHostContext(){return{}},getChildHostContext(){return{}},prepareForCommit(){return null},resetAfterCommit(){},commitMount(){},commitUpdate(){},removeChild(){},clearContainer(){},supportsPersistence:!1,getPublicInstance(e){return e},preparePortalMount(e){throw Error("Function not implemented.")},scheduleTimeout(e,t){throw Error("Function not implemented.")},cancelTimeout(e){throw Error("Function not implemented.")},noTimeout:void 0,isPrimaryRenderer:!1,getInstanceFromNode(e){throw Error("Function not implemented.")},beforeActiveInstanceBlur(){throw Error("Function not implemented.")},afterActiveInstanceBlur(){throw Error("Function not implemented.")},prepareScopeUpdate:(e,t)=>{throw Error("Function not implemented.")},getInstanceFromScope:(e)=>{throw Error("Function not implemented.")},detachDeletedInstance:(e)=>{throw Error("Function not implemented.")},getCurrentEventPriority:()=>Y2e.DefaultEventPriority,getCurrentUpdatePriority:()=>Y2e.DefaultEventPriority,resolveUpdatePriority:()=>Y2e.DefaultEventPriority,setCurrentUpdatePriority:()=>{},maySuspendCommit:()=>!1,supportsHydration:!1},Dye=oin.default(uii),Rie=(e)=>{let t={children:[],props:{name:"$root"},add(r){r.parent=this,this.children.push(r)},computePcbGlobalTransform(){return Il()}},n=[],o=Dye.createContainer(t,0,null,!1,null,"tsci",(r)=>{console.log("Error in createContainer"),console.error(r),n.push(r)},null);if(Dye.updateContainerSync(e,o,null,()=>{}),Dye.flushSyncWork(),n.length>0)throw n[0];let i=Dye.getPublicRootInstance(o);if(i)return i;return t.children[0]};function hii(e){if(!e)return{validPinLabels:e,invalidPinLabelsMessages:[]};let t={},n=[];for(let[o,i]of Object.entries(e)){let r=Array.isArray(i)?i.slice():[i],s=[];for(let a of r)if(mii(o,a))s.push(a);else{let c=rin(a),l=c?` Try using "${c}" instead.`:"";n.push(`Invalid pin label: ${o} = '${a}' - excluding from component. Pin labels can only contain letters, numbers and underscores.${l}`)}if(s.length>0)t[o]=Array.isArray(i)?s:s[0]}return{validPinLabels:Object.keys(t).length>0?t:void 0,invalidPinLabelsMessages:n}}function mii(e,t){return/^[A-Za-z0-9_]+$/.test(t)}function rin(e){let t=e.match(/^\+?(\d+)\.(\d+)V(_\d+)?$/i);if(t)return`V${t[1]}_${t[2]}${t[3]??""}`;let n=e.match(/^\+?(\d+)V(\d+)(_\d+)?$/i);if(n)return`V${n[1]}_${n[2]}${n[3]??""}`;let o=e.match(/^\+?(\d+)V(_\d+)?$/i);if(o)return`V${o[1]}${o[2]??""}`;return}var tJt=(e)=>{let t=rin(e),n=t?` Try using "${t}" instead.`:"";return`No pin labels provided and pin number or label is not a number: "${e}".${n}`},eF=(e,t)=>{if(typeof e==="number")return e;let n=cB(e);if(n!==null)return n;if(e.startsWith("pin"))throw Error(`Invalid pinLabels key "${e}". Expected "pin\${number}" (e.g. pin1, pin2).`);if(!t)throw Error(tJt(e));let o=EUe(t),i=o.find((s)=>s.physicalPinName===e);if(i)return i.pinNumber;let r=o.filter((s)=>s.labels.includes(e));if(r.length>1&&r.some((s)=>s.physicalPinName))throw Error(`Ambiguous pin label "${e}"; use a physical ball name: ${r.map((s)=>s.physicalPinName??`pin${s.pinNumber}`).join(", ")}.`);if(r.length>0)return r[0].pinNumber;throw Error(tJt(e))},kUe=(e,t)=>{if(!e)return;let n={},o={};for(let[i,r]of Object.entries(e)){let s=eF(i,t);o[s]={...o[s],...r}}for(let[i,r]of Object.entries(o)){let s=`pin${i}`;n[s]={bottom_margin:r.bottomMargin,left_margin:r.leftMargin,right_margin:r.rightMargin,top_margin:r.topMargin}}return n},LUe=(e)=>{if(!e)return;if("leftSide"in e||"rightSide"in e||"topSide"in e||"bottomSide"in e)return{left_side:e.leftSide,right_side:e.rightSide,top_side:e.topSide,bottom_side:e.bottomSide};if("leftPinCount"in e||"rightPinCount"in e||"topPinCount"in e||"bottomPinCount"in e)return{left_size:e.leftPinCount,right_size:e.rightPinCount,top_size:e.topPinCount,bottom_size:e.bottomPinCount};if("leftSize"in e||"rightSize"in e||"topSize"in e||"bottomSize"in e)return{left_size:e.leftSize,right_size:e.rightSize,top_size:e.topSize,bottom_size:e.bottomSize};return};function Qie(e){return e.replace(/\\n/g,`
`)}var sin=class extends jo{isPcbPrimitive=!0;pcb_copper_text_id=null;get config(){return{componentName:"CopperText",zodProps:nxt}}doInitialPcbPrimitiveRender(){if(this.root?.pcbDisabled)return;let{db:e}=this.root,{_parsedProps:t}=this,n=this.getPrimitiveContainer(),o=this._getGlobalPcbPositionBeforeLayout(),i=this.getSubcircuit(),r=e.pcb_copper_text.insert({anchor_alignment:t.anchorAlignment,anchor_position:{x:o.x,y:o.y},font:"tscircuit2024",font_size:t.fontSize,layer:t.layer??"top",text:Qie(t.text),ccw_rotation:t.pcbRotation,is_mirrored:t.mirrored,is_knockout:t.knockout,pcb_component_id:n.pcb_component_id,subcircuit_id:i?.subcircuit_id??void 0,pcb_group_id:this.getGroup()?.pcb_group_id??void 0});this.pcb_copper_text_id=r.pcb_copper_text_id}getPcbSize(){let{_parsedProps:e}=this,t=e.fontSize??1,o=(e.text??"").length*t,i=t;return{width:o*t,height:i*t}}_moveCircuitJsonElements({deltaX:e,deltaY:t}){if(this.root?.pcbDisabled)return;let{db:n}=this.root;if(!this.pcb_copper_text_id)return;let o=n.pcb_copper_text.get(this.pcb_copper_text_id);if(o)n.pcb_copper_text.update(this.pcb_copper_text_id,{anchor_position:{x:o.anchor_position.x+e,y:o.anchor_position.y+t}})}},ain=class extends jo{pcb_courtyard_circle_id=null;isPcbPrimitive=!0;get config(){return{componentName:"CourtyardCircle",zodProps:D2t}}doInitialPcbPrimitiveRender(){if(this.root?.pcbDisabled)return;let{db:e}=this.root,{_parsedProps:t}=this,n=this._getGlobalPcbPositionBeforeLayout(),{maybeFlipLayer:o}=this._getPcbPrimitiveFlippedHelpers(),i=o(t.layer??"top");if(i!=="top"&&i!=="bottom")throw Error(`Invalid layer "${i}" for CourtyardCircle. Must be "top" or "bottom".`);let r=this.getSubcircuit(),s=this.parent?.pcb_component_id??this.getPrimitiveContainer()?.pcb_component_id,a=e.pcb_courtyard_circle.insert({pcb_component_id:s,layer:i,center:{x:n.x,y:n.y},radius:t.radius,subcircuit_id:r?.subcircuit_id??void 0,pcb_group_id:this.getGroup()?.pcb_group_id??void 0});this.pcb_courtyard_circle_id=a.pcb_courtyard_circle_id}getPcbSize(){let{_parsedProps:e}=this,t=e.radius*2;return{width:t,height:t}}_moveCircuitJsonElements({deltaX:e,deltaY:t}){if(this.root?.pcbDisabled)return;let{db:n}=this.root;if(!this.pcb_courtyard_circle_id)return;let o=n.pcb_courtyard_circle.get(this.pcb_courtyard_circle_id);if(o)n.pcb_courtyard_circle.update(this.pcb_courtyard_circle_id,{center:{x:o.center.x+e,y:o.center.y+t}})}},cin=class extends jo{pcb_courtyard_outline_id=null;isPcbPrimitive=!0;get config(){return{componentName:"CourtyardOutline",zodProps:T2t}}doInitialPcbPrimitiveRender(){if(this.root?.pcbDisabled)return;let{db:e}=this.root,{_parsedProps:t}=this,{maybeFlipLayer:n}=this._getPcbPrimitiveFlippedHelpers(),o=n(t.layer??"top");if(o!=="top"&&o!=="bottom")throw Error(`Invalid layer "${o}" for CourtyardOutline. Must be "top" or "bottom".`);let i=this._computePcbGlobalTransformBeforeLayout(),r=this.getSubcircuit(),s=this.parent?.pcb_component_id??this.getPrimitiveContainer()?.pcb_component_id,a=e.pcb_courtyard_outline.insert({pcb_component_id:s,layer:o,outline:t.outline.map((c)=>{let l=tt(i,{x:c.x,y:c.y});return{x:l.x,y:l.y}}),subcircuit_id:r?.subcircuit_id??void 0,pcb_group_id:this.getGroup()?.pcb_group_id??void 0});this.pcb_courtyard_outline_id=a.pcb_courtyard_outline_id}_setPositionFromLayout(e){let{db:t}=this.root,n=t.pcb_courtyard_outline.get(this.pcb_courtyard_outline_id);if(!n)return;let o=0,i=0;for(let c of n.outline)o+=c.x,i+=c.y;o/=n.outline.length,i/=n.outline.length;let r=e.x-o,s=e.y-i,a=n.outline.map((c)=>({x:c.x+r,y:c.y+s}));t.pcb_courtyard_outline.update(this.pcb_courtyard_outline_id,{outline:a})}_moveCircuitJsonElements({deltaX:e,deltaY:t}){if(this.root?.pcbDisabled)return;let{db:n}=this.root;if(!this.pcb_courtyard_outline_id)return;let o=n.pcb_courtyard_outline.get(this.pcb_courtyard_outline_id);if(o)n.pcb_courtyard_outline.update(this.pcb_courtyard_outline_id,{outline:o.outline.map((i)=>({x:i.x+e,y:i.y+t}))})}getPcbSize(){let{_parsedProps:e}=this;if(!e.outline||e.outline.length===0)return{width:0,height:0};let t=ws(e.outline);if(!t)return{width:0,height:0};return{width:t.maxX-t.minX,height:t.maxY-t.minY}}},lin=class extends jo{pcb_courtyard_rect_id=null;isPcbPrimitive=!0;get config(){return{componentName:"CourtyardRect",zodProps:w2t}}doInitialPcbPrimitiveRender(){if(this.root?.pcbDisabled)return;let{db:e}=this.root,{_parsedProps:t}=this,n=this._getGlobalPcbPositionBeforeLayout(),{maybeFlipLayer:o,isFlipped:i}=this._getPcbPrimitiveFlippedHelpers(),r=o(t.layer??"top");if(r!=="top"&&r!=="bottom")throw Error(`Invalid layer "${r}" for CourtyardRect. Must be "top" or "bottom".`);let s=this.getSubcircuit(),a=this.parent?.pcb_component_id??this.getPrimitiveContainer()?.pcb_component_id,d=(ol(this._computePcbGlobalTransformBeforeLayout()).rotation.angle*180/Math.PI%360+360)%360;if(i)d=(180-d+360)%360;let u=e.pcb_courtyard_rect.insert({pcb_component_id:a,layer:r,center:{x:n.x,y:n.y},width:t.width,height:t.height,ccw_rotation:d||void 0,subcircuit_id:s?.subcircuit_id??void 0,pcb_group_id:this.getGroup()?.pcb_group_id??void 0});this.pcb_courtyard_rect_id=u.pcb_courtyard_rect_id}getPcbSize(){let{_parsedProps:e}=this;return{width:e.width,height:e.height}}_moveCircuitJsonElements({deltaX:e,deltaY:t}){if(this.root?.pcbDisabled)return;let{db:n}=this.root;if(!this.pcb_courtyard_rect_id)return;let o=n.pcb_courtyard_rect.get(this.pcb_courtyard_rect_id);if(o)n.pcb_courtyard_rect.update(this.pcb_courtyard_rect_id,{center:{x:o.center.x+e,y:o.center.y+t}})}};function hoe({width:e,height:t,ccwRotationDegrees:n}){let o=n*Math.PI/180,i=Math.cos(o),r=Math.sin(o),s=e/2,a=t/2,c=Math.abs(s*i)+Math.abs(a*r),l=Math.abs(s*r)+Math.abs(a*i);return{width:c*2,height:l*2,xExtent:c,yExtent:l}}var V2e=class extends jo{pcb_cutout_id=null;isPcbPrimitive=!0;get config(){return{componentName:"Cutout",zodProps:Qyt}}doInitialPcbPrimitiveRender(){if(this.root?.pcbDisabled)return;let{db:e}=this.root,{_parsedProps:t}=this,n=this.getSubcircuit(),o=this.getGroup()?.pcb_group_id??void 0,i=this._getGlobalPcbPositionBeforeLayout(),r=this.getPrimitiveContainer(),s=this.parent?.pcb_component_id??r?.pcb_component_id??void 0,a=void 0;if(t.shape==="rect"){let c=this._computePcbGlobalTransformBeforeLayout(),l=c.a*c.d-c.b*c.c<0,{rotation:d}=ol(c,!1,l),u={shape:"rect",center:i,width:t.width,height:t.height,rotation:d.angle*180/Math.PI,subcircuit_id:n?.subcircuit_id??void 0,pcb_group_id:o,pcb_component_id:s};a=e.pcb_cutout.insert(u)}else if(t.shape==="circle"){let c={shape:"circle",center:i,radius:t.radius,subcircuit_id:n?.subcircuit_id??void 0,pcb_group_id:o,pcb_component_id:s};a=e.pcb_cutout.insert(c)}else if(t.shape==="polygon"){let c=this._computePcbGlobalTransformBeforeLayout(),d={shape:"polygon",points:t.points.map((u)=>tt(c,u)),subcircuit_id:n?.subcircuit_id??void 0,pcb_group_id:o,pcb_component_id:s};a=e.pcb_cutout.insert(d)}if(a)this.pcb_cutout_id=a.pcb_cutout_id}getPcbSize(){let{_parsedProps:e}=this;if(e.shape==="rect")return{width:e.width,height:e.height};if(e.shape==="circle")return{width:e.radius*2,height:e.radius*2};if(e.shape==="polygon"){if(e.points.length===0)return{width:0,height:0};let t=1/0,n=-1/0,o=1/0,i=-1/0;for(let r of e.points)t=Math.min(t,r.x),n=Math.max(n,r.x),o=Math.min(o,r.y),i=Math.max(i,r.y);return{width:n-t,height:i-o}}return{width:0,height:0}}_getPcbCircuitJsonBounds(){if(!this.pcb_cutout_id)return super._getPcbCircuitJsonBounds();let{db:e}=this.root,t=e.pcb_cutout.get(this.pcb_cutout_id);if(!t)return super._getPcbCircuitJsonBounds();if(t.shape==="rect"){let{width:n,height:o,xExtent:i,yExtent:r}=hoe({width:t.width,height:t.height,ccwRotationDegrees:t.rotation??0});return{center:t.center,bounds:{left:t.center.x-i,top:t.center.y+r,right:t.center.x+i,bottom:t.center.y-r},width:n,height:o}}else if(t.shape==="circle")return{center:t.center,bounds:{left:t.center.x-t.radius,top:t.center.y+t.radius,right:t.center.x+t.radius,bottom:t.center.y-t.radius},width:t.radius*2,height:t.radius*2};else if(t.shape==="polygon"){if(t.points.length===0)return super._getPcbCircuitJsonBounds();let n=1/0,o=-1/0,i=1/0,r=-1/0;for(let s of t.points)n=Math.min(n,s.x),o=Math.max(o,s.x),i=Math.min(i,s.y),r=Math.max(r,s.y);return{center:{x:(n+o)/2,y:(i+r)/2},bounds:{left:n,top:r,right:o,bottom:i},width:o-n,height:r-i}}return super._getPcbCircuitJsonBounds()}_setPositionFromLayout(e){if(!this.pcb_cutout_id)return;let{db:t}=this.root,n=t.pcb_cutout.get(this.pcb_cutout_id);if(!n)return;if(n.shape==="rect"||n.shape==="circle")t.pcb_cutout.update(this.pcb_cutout_id,{...n,center:e});else if(n.shape==="polygon"){let o=this._getPcbCircuitJsonBounds().center,i=e.x-o.x,r=e.y-o.y,s=n.points.map((a)=>({x:a.x+i,y:a.y+r}));t.pcb_cutout.update(this.pcb_cutout_id,{...n,points:s})}}_moveCircuitJsonElements({deltaX:e,deltaY:t}){if(!this.pcb_cutout_id)return;let{db:n}=this.root,o=n.pcb_cutout.get(this.pcb_cutout_id);if(!o)return;if(o.shape==="rect"||o.shape==="circle")n.pcb_cutout.update(this.pcb_cutout_id,{center:{x:o.center.x+e,y:o.center.y+t}});else if(o.shape==="polygon")n.pcb_cutout.update(this.pcb_cutout_id,{points:o.points.map((i)=>({x:i.x+e,y:i.y+t}))})}},din=class extends jo{fabrication_note_path_id=null;isPcbPrimitive=!0;get config(){return{componentName:"FabricationNotePath",zodProps:P2t}}doInitialPcbPrimitiveRender(){if(this.root?.pcbDisabled)return;let{db:e}=this.root,t=this.getSubcircuit(),{_parsedProps:n}=this,{maybeFlipLayer:o}=this._getPcbPrimitiveFlippedHelpers(),i=o(n.layer??"top");if(i!=="top"&&i!=="bottom")throw Error(`Invalid layer "${i}" for FabricationNotePath. Must be "top" or "bottom".`);let r=this._computePcbGlobalTransformBeforeLayout(),s=this.parent?.pcb_component_id??this.getPrimitiveContainer()?.pcb_component_id,a=e.pcb_fabrication_note_path.insert({pcb_component_id:s,layer:i,color:n.color,is_filled:n.isFilled,has_stroke:n.hasStroke,route:n.route.map((c)=>{let l=tt(r,{x:c.x,y:c.y});return{...c,x:l.x,y:l.y}}),stroke_width:n.strokeWidth??0.1,subcircuit_id:t?.subcircuit_id??void 0});this.fabrication_note_path_id=a.pcb_fabrication_note_path_id}getPcbSize(){let{_parsedProps:e}=this;if(e.route.length===0)return{width:0,height:0};let t=e.route.map((a)=>typeof a.x==="string"?parseFloat(a.x):a.x),n=e.route.map((a)=>typeof a.y==="string"?parseFloat(a.y):a.y),o=Math.min(...t),i=Math.max(...t),r=Math.min(...n),s=Math.max(...n);return{width:i-o,height:s-r}}_moveCircuitJsonElements({deltaX:e,deltaY:t}){if(this.root?.pcbDisabled)return;let{db:n}=this.root;if(!this.fabrication_note_path_id)return;let o=n.pcb_fabrication_note_path.get(this.fabrication_note_path_id);if(o)n.pcb_fabrication_note_path.update(this.fabrication_note_path_id,{route:o.route.map((i)=>({...i,x:i.x+e,y:i.y+t}))})}},uin=class extends jo{fabrication_note_rect_id=null;isPcbPrimitive=!0;get config(){return{componentName:"FabricationNoteRect",zodProps:S2t}}doInitialPcbPrimitiveRender(){if(this.root?.pcbDisabled)return;let{db:e}=this.root,{_parsedProps:t}=this,n=this._getGlobalPcbPositionBeforeLayout(),{maybeFlipLayer:o}=this._getPcbPrimitiveFlippedHelpers(),i=o(t.layer??"top");if(i!=="top"&&i!=="bottom")throw Error(`Invalid layer "${i}" for FabricationNoteRect. Must be "top" or "bottom".`);let r=this.parent?.pcb_component_id??this.getPrimitiveContainer()?.pcb_component_id,s=this.getSubcircuit(),a=t.hasStroke??(t.strokeWidth!==void 0&&t.strokeWidth!==null),c=e.pcb_fabrication_note_rect.insert({pcb_component_id:r,layer:i,color:t.color,center:{x:n.x,y:n.y},width:t.width,height:t.height,stroke_width:t.strokeWidth??1,is_filled:t.isFilled??!1,has_stroke:a,is_stroke_dashed:t.isStrokeDashed??!1,subcircuit_id:s?.subcircuit_id??void 0,pcb_group_id:this.getGroup()?.pcb_group_id??void 0,corner_radius:t.cornerRadius??void 0});this.fabrication_note_rect_id=c.pcb_fabrication_note_rect_id}getPcbSize(){let{_parsedProps:e}=this;return{width:e.width,height:e.height}}_moveCircuitJsonElements({deltaX:e,deltaY:t}){if(this.root?.pcbDisabled)return;let{db:n}=this.root;if(!this.fabrication_note_rect_id)return;let o=n.pcb_fabrication_note_rect.get(this.fabrication_note_rect_id);if(o)n.pcb_fabrication_note_rect.update(this.fabrication_note_rect_id,{center:{x:o.center.x+e,y:o.center.y+t}})}};function pii(e){let t=e.indexOf("[");if(t===-1)return{tag:e};let n=e.slice(0,t),i=e.slice(t+1,e.lastIndexOf("]")).match(/^(\w+)(\^=|\$=|=)['"]?(.*?)['"]?$/);if(!i)return{tag:n};return{tag:n,attrName:i[1],attrOp:i[2],attrValue:i[3]}}function nJt(e,t){if(e.lowercaseComponentName!==t.tag)return!1;if(!t.attrName)return!0;let n=e.props?.[t.attrName];if(n===void 0)return!1;let o=String(n);switch(t.attrOp){case"^=":return o.startsWith(t.attrValue);case"$=":return o.endsWith(t.attrValue);case"=":return o===t.attrValue;default:return!1}}function Aii(e,t){if(!nJt(e,t[t.length-1]))return!1;let n=t.length-2,o=e.parent;while(n>=0&&o){if(nJt(o,t[n]))n--;o=o.parent}return n<0}function _W({propertyName:e,resolvedPcbSx:t,pathFromAmpersand:n,component:o}){if(!t)return;let i,r=0;for(let[s,a]of Object.entries(t)){if(!a||!(e in a))continue;let c=s.startsWith("& ")?s.slice(2):s;if(c===n){if(1>r)r=1,i=a[e];continue}if(!o)continue;let l=c.split(/\s+/).map(pii);if(l.length<2)continue;if(Aii(o,l)){let d=l.length;if(d>r)r=d,i=a[e]}}return i}var hin=class extends jo{pcb_fabrication_note_text_id=null;isPcbPrimitive=!0;get config(){return{componentName:"FabricationNoteText",zodProps:b2t}}doInitialPcbPrimitiveRender(){if(this.root?.pcbDisabled)return;let{db:e}=this.root,{_parsedProps:t}=this,n=this._getGlobalPcbPositionBeforeLayout(),r=(ol(this._computePcbGlobalTransformBeforeLayout()).rotation.angle*180/Math.PI%360+360)%360,s=this.getPrimitiveContainer(),a=this.getSubcircuit(),{maybeFlipLayer:c}=this._getPcbPrimitiveFlippedHelpers(),l=c(t.layer??"top");if(l!=="top"&&l!=="bottom")throw Error(`Invalid layer "${l}" for FabricationNoteText. Must be "top" or "bottom".`);if(_W({propertyName:"visibility",resolvedPcbSx:this.getResolvedPcbSx(),pathFromAmpersand:"fabricationnotetext",component:this})==="hidden")return;let u=e.pcb_fabrication_note_text.insert({anchor_alignment:t.anchorAlignment,anchor_position:{x:n.x,y:n.y},font:t.font??"tscircuit2024",font_size:t.fontSize??1,layer:l,color:t.color,ccw_rotation:r,text:Qie(t.text??""),pcb_component_id:s.pcb_component_id,subcircuit_id:a?.subcircuit_id??void 0,pcb_group_id:this.getGroup()?.pcb_group_id??void 0});this.pcb_fabrication_note_text_id=u.pcb_fabrication_note_text_id}getPcbSize(){let{_parsedProps:e}=this,t=typeof e.fontSize==="string"?parseFloat(e.fontSize):e.fontSize??1,n=t*0.6;return{width:(e.text??"").length*n,height:t}}_moveCircuitJsonElements({deltaX:e,deltaY:t}){if(this.root?.pcbDisabled)return;let{db:n}=this.root;if(this.pcb_fabrication_note_text_id){let o=n.pcb_fabrication_note_text.get(this.pcb_fabrication_note_text_id);if(o)n.pcb_fabrication_note_text.update(this.pcb_fabrication_note_text_id,{anchor_position:{x:o.anchor_position.x+e,y:o.anchor_position.y+t}})}}},gW=class extends jo{pcb_hole_id=null;isPcbPrimitive=!0;get config(){return{componentName:"Hole",zodProps:Hyt}}getPcbSize(){let{_parsedProps:e}=this,t=e.shape==="pill",n=e.shape==="oval",o=e.shape==="rect";if(t||n)return{width:e.width,height:e.height};else if(o)return{width:e.width,height:e.height};else return{width:e.diameter,height:e.diameter}}doInitialPcbPrimitiveRender(){if(this.root?.pcbDisabled)return;let{db:e}=this.root,{_parsedProps:t}=this,n=this.getSubcircuit(),o=this._getGlobalPcbPositionBeforeLayout(),i=t.solderMaskMargin,r=t.coveredWithSolderMask??!1,s=this.parent?.pcb_component_id??this.getPrimitiveContainer()?.pcb_component_id;if(this.emitSolderMaskMarginWarning(r,i),t.shape==="pill")if(t.pcbRotation&&t.pcbRotation!==0){let a=e.pcb_hole.insert({pcb_component_id:s,type:"pcb_hole",hole_shape:"rotated_pill",hole_width:t.width,hole_height:t.height,x:o.x,y:o.y,ccw_rotation:t.pcbRotation,soldermask_margin:i,is_covered_with_solder_mask:r,subcircuit_id:n?.subcircuit_id??void 0,pcb_group_id:n?.getGroup()?.pcb_group_id??void 0});this.pcb_hole_id=a.pcb_hole_id}else{let a=e.pcb_hole.insert({pcb_component_id:s,type:"pcb_hole",hole_shape:"pill",hole_width:t.width,hole_height:t.height,x:o.x,y:o.y,soldermask_margin:i,is_covered_with_solder_mask:r,subcircuit_id:n?.subcircuit_id??void 0,pcb_group_id:n?.getGroup()?.pcb_group_id??void 0});this.pcb_hole_id=a.pcb_hole_id}else if(t.shape==="oval"){let a=e.pcb_hole.insert({pcb_component_id:s,type:"pcb_hole",hole_shape:"oval",hole_width:t.width,hole_height:t.height,x:o.x,y:o.y,soldermask_margin:i,is_covered_with_solder_mask:r,subcircuit_id:n?.subcircuit_id??void 0,pcb_group_id:n?.getGroup()?.pcb_group_id??void 0});this.pcb_hole_id=a.pcb_hole_id}else if(t.shape==="rect"){let a=e.pcb_hole.insert({pcb_component_id:s,type:"pcb_hole",hole_shape:"rect",hole_width:t.width,hole_height:t.height,x:o.x,y:o.y,soldermask_margin:i,is_covered_with_solder_mask:r,subcircuit_id:n?.subcircuit_id??void 0,pcb_group_id:n?.getGroup()?.pcb_group_id??void 0});this.pcb_hole_id=a.pcb_hole_id}else{let a=e.pcb_hole.insert({pcb_component_id:s,type:"pcb_hole",hole_shape:"circle",hole_diameter:t.diameter,x:o.x,y:o.y,soldermask_margin:i,is_covered_with_solder_mask:r,subcircuit_id:n?.subcircuit_id??void 0,pcb_group_id:n?.getGroup()?.pcb_group_id??void 0});this.pcb_hole_id=a.pcb_hole_id}}_getPcbCircuitJsonBounds(){let{db:e}=this.root,t=e.pcb_hole.get(this.pcb_hole_id),n=this.getPcbSize();return{center:{x:t.x,y:t.y},bounds:{left:t.x-n.width/2,top:t.y-n.height/2,right:t.x+n.width/2,bottom:t.y+n.height/2},width:n.width,height:n.height}}_setPositionFromLayout(e){let{db:t}=this.root;t.pcb_hole.update(this.pcb_hole_id,{x:e.x,y:e.y})}_moveCircuitJsonElements({deltaX:e,deltaY:t}){if(this.root?.pcbDisabled)return;let{db:n}=this.root;if(!this.pcb_hole_id)return;let o=n.pcb_hole.get(this.pcb_hole_id);if(o)n.pcb_hole.update(this.pcb_hole_id,{x:o.x+e,y:o.y+t})}},xxe=class extends jo{pcb_keepout_id=null;isPcbPrimitive=!0;get config(){return{componentName:"Keepout",zodProps:B2t}}getExcludedPcbComponentIds(){let e=this._parsedProps.excludeRefs?.flatMap((t)=>this.getSubcircuit().selectAll(t).map((n)=>n.pcb_component_id).filter((n)=>n!==null))??[];return Array.from(new Set(e))}doInitialPcbPrimitiveRender(){if(this.root?.pcbDisabled)return;let e=this.getSubcircuit(),{db:t}=this.root,{_parsedProps:n}=this,o=this.getPrimitiveContainer()?.pcb_component_id??void 0,i=o?{pcb_component_id:o}:{},r=this.getGroup()?.pcb_group_id??void 0,s=this._getGlobalPcbPositionBeforeLayout(),a=ol(this._computePcbGlobalTransformBeforeLayout()),c=Math.abs(a.rotation.angle*(180/Math.PI)-90)%180<0.01,l=n.layers;if(!l&&n.layer)l=[n.layer];if(!l)l=["top"];let d=this.getExcludedPcbComponentIds(),u=d.length>0?{excluded_pcb_component_ids:d}:{},h=null;if(n.shape==="circle")h=t.pcb_keepout.insert({layers:l,shape:"circle",...i,...u,...n.allowTraces!==void 0?{allow_traces:n.allowTraces}:{},...n.allowPlacements!==void 0?{allow_placements:n.allowPlacements}:{},...n.warningOnly!==void 0?{warning_only:n.warningOnly}:{},radius:n.radius,center:{x:s.x,y:s.y},subcircuit_id:e?.subcircuit_id??void 0,pcb_group_id:r});else if(n.shape==="rect")h=t.pcb_keepout.insert({layers:l,shape:"rect",...i,...u,...n.allowTraces!==void 0?{allow_traces:n.allowTraces}:{},...n.allowPlacements!==void 0?{allow_placements:n.allowPlacements}:{},...n.warningOnly!==void 0?{warning_only:n.warningOnly}:{},...c?{width:n.height,height:n.width}:{width:n.width,height:n.height},center:{x:s.x,y:s.y},subcircuit_id:e?.subcircuit_id??void 0,pcb_group_id:r});if(h)this.pcb_keepout_id=h.pcb_keepout_id}getPcbSize(){let{_parsedProps:e}=this;if(e.shape==="circle")return{width:e.radius*2,height:e.radius*2};if(e.shape==="rect")return{width:e.width,height:e.height};return{width:0,height:0}}};var min=class extends jo{pcb_note_line_id=null;isPcbPrimitive=!0;get config(){return{componentName:"PcbNoteLine",zodProps:pxt}}doInitialPcbPrimitiveRender(){if(this.root?.pcbDisabled)return;let{db:e}=this.root,{_parsedProps:t}=this,n=this.getSubcircuit(),o=this.getGroup(),i=this._computePcbGlobalTransformBeforeLayout(),r=tt(i,{x:t.x1,y:t.y1}),s=tt(i,{x:t.x2,y:t.y2}),a=this.parent?.pcb_component_id??this.getPrimitiveContainer()?.pcb_component_id??void 0,c=e.pcb_note_line.insert({pcb_component_id:a,subcircuit_id:n?.subcircuit_id??void 0,pcb_group_id:o?.pcb_group_id??void 0,x1:r.x,y1:r.y,x2:s.x,y2:s.y,layer:t.layer==="bottom"?"bottom":"top",stroke_width:t.strokeWidth??0.1,color:t.color,is_dashed:t.isDashed});this.pcb_note_line_id=c.pcb_note_line_id}getPcbSize(){let{_parsedProps:e}=this;return{width:Math.abs(e.x2-e.x1),height:Math.abs(e.y2-e.y1)}}_moveCircuitJsonElements({deltaX:e,deltaY:t}){if(this.root?.pcbDisabled)return;let{db:n}=this.root;if(!this.pcb_note_line_id)return;let o=n.pcb_note_line.get(this.pcb_note_line_id);if(o)n.pcb_note_line.update(this.pcb_note_line_id,{x1:o.x1+e,y1:o.y1+t,x2:o.x2+e,y2:o.y2+t})}},pin=class extends jo{pcb_note_path_id=null;isPcbPrimitive=!0;get config(){return{componentName:"PcbNotePath",zodProps:mxt}}doInitialPcbPrimitiveRender(){if(this.root?.pcbDisabled)return;let{db:e}=this.root,{_parsedProps:t}=this,n=this._computePcbGlobalTransformBeforeLayout(),o=this.getSubcircuit(),i=this.getGroup(),r=this.parent?.pcb_component_id??this.getPrimitiveContainer()?.pcb_component_id??void 0,s=t.route.map((c)=>{let{x:l,y:d,...u}=c,h=typeof l==="string"?parseFloat(l):l,A=typeof d==="string"?parseFloat(d):d,m=tt(n,{x:h,y:A});return{...u,x:m.x,y:m.y}}),a=e.pcb_note_path.insert({pcb_component_id:r,subcircuit_id:o?.subcircuit_id??void 0,pcb_group_id:i?.pcb_group_id??void 0,route:s,layer:t.layer==="bottom"?"bottom":"top",stroke_width:t.strokeWidth??0.1,color:t.color});this.pcb_note_path_id=a.pcb_note_path_id}getPcbSize(){let{_parsedProps:e}=this;if(e.route.length===0)return{width:0,height:0};let t=e.route.map((a)=>typeof a.x==="string"?parseFloat(a.x):a.x),n=e.route.map((a)=>typeof a.y==="string"?parseFloat(a.y):a.y),o=Math.min(...t),i=Math.max(...t),r=Math.min(...n),s=Math.max(...n);return{width:i-o,height:s-r}}_moveCircuitJsonElements({deltaX:e,deltaY:t}){if(this.root?.pcbDisabled)return;let{db:n}=this.root;if(!this.pcb_note_path_id)return;let o=n.pcb_note_path.get(this.pcb_note_path_id);if(o)n.pcb_note_path.update(this.pcb_note_path_id,{route:o.route.map((i)=>({...i,x:i.x+e,y:i.y+t}))})}},Ain=class extends jo{pcb_note_rect_id=null;isPcbPrimitive=!0;get config(){return{componentName:"PcbNoteRect",zodProps:hxt}}doInitialPcbPrimitiveRender(){if(this.root?.pcbDisabled)return;let{db:e}=this.root,{_parsedProps:t}=this,n=this._computePcbGlobalTransformBeforeLayout(),o=tt(n,{x:0,y:0}),i=this.getSubcircuit(),r=this.getGroup(),s=this.parent?.pcb_component_id??this.getPrimitiveContainer()?.pcb_component_id??void 0,a=e.pcb_note_rect.insert({pcb_component_id:s,subcircuit_id:i?.subcircuit_id??void 0,pcb_group_id:r?.pcb_group_id??void 0,center:o,width:t.width,height:t.height,layer:t.layer==="bottom"?"bottom":"top",stroke_width:t.strokeWidth??0.1,is_filled:t.isFilled??!1,has_stroke:t.hasStroke??!0,is_stroke_dashed:t.isStrokeDashed??!1,color:t.color,corner_radius:t.cornerRadius??void 0});this.pcb_note_rect_id=a.pcb_note_rect_id}getPcbSize(){let{_parsedProps:e}=this,t=typeof e.width==="string"?parseFloat(e.width):e.width,n=typeof e.height==="string"?parseFloat(e.height):e.height;return{width:t,height:n}}_moveCircuitJsonElements({deltaX:e,deltaY:t}){if(this.root?.pcbDisabled)return;let{db:n}=this.root;if(!this.pcb_note_rect_id)return;let o=n.pcb_note_rect.get(this.pcb_note_rect_id);if(o)n.pcb_note_rect.update(this.pcb_note_rect_id,{center:{x:o.center.x+e,y:o.center.y+t}})}},_in=class extends jo{pcb_note_text_id=null;isPcbPrimitive=!0;get config(){return{componentName:"PcbNoteText",zodProps:uxt}}doInitialPcbPrimitiveRender(){if(this.root?.pcbDisabled)return;let{db:e}=this.root,{_parsedProps:t}=this,n=this._computePcbGlobalTransformBeforeLayout(),o=tt(n,{x:0,y:0}),i=this.getSubcircuit(),r=this.getGroup(),s=this.parent?.pcb_component_id??this.getPrimitiveContainer()?.pcb_component_id??void 0,a=e.pcb_note_text.insert({pcb_component_id:s,subcircuit_id:i?.subcircuit_id??void 0,pcb_group_id:r?.pcb_group_id??void 0,font:t.font??"tscircuit2024",font_size:t.fontSize??1,text:Qie(t.text),anchor_position:o,anchor_alignment:t.anchorAlignment??"center",layer:t.layer==="bottom"?"bottom":"top",color:t.color});this.pcb_note_text_id=a.pcb_note_text_id}getPcbSize(){let{_parsedProps:e}=this,t=typeof e.fontSize==="string"?parseFloat(e.fontSize):e.fontSize??1,n=t*0.6;return{width:e.text.length*n,height:t}}_moveCircuitJsonElements({deltaX:e,deltaY:t}){if(this.root?.pcbDisabled)return;let{db:n}=this.root;if(!this.pcb_note_text_id)return;let o=n.pcb_note_text.get(this.pcb_note_text_id);if(o)n.pcb_note_text.update(this.pcb_note_text_id,{anchor_position:{x:o.anchor_position.x+e,y:o.anchor_position.y+t}})}},gin=class extends jo{pcb_soldermask_opening_id=null;isPcbPrimitive=!0;get config(){return{componentName:"PcbSoldermaskOpening",zodProps:myt}}_getPcbLocalBoundsBeforeLayout(){let e=this._parsedProps;if(e.shape==="polygon"){let o=ws(e.points);return{left:o.minX,right:o.maxX,top:o.maxY,bottom:o.minY}}let t=e.shape==="circle"?e.radius*2:e.width,n=e.shape==="circle"?e.radius*2:e.height;return{left:-t/2,right:t/2,top:n/2,bottom:-n/2}}getPcbSize(){let e=this._getPcbLocalBoundsBeforeLayout();return{width:e.right-e.left,height:e.top-e.bottom}}doInitialPcbPrimitiveRender(){if(this.root?.pcbDisabled)return;let{db:e}=this.root,t=this._parsedProps,n=this._computePcbGlobalTransformBeforeLayout(),{maybeFlipLayer:o,isFlipped:i}=this._getPcbPrimitiveFlippedHelpers(),r=this.getPrimitiveContainer(),s={layer:o(t.layer),pcb_component_id:this.parent?.pcb_component_id??r?.pcb_component_id??void 0,pcb_group_id:this.getGroup()?.pcb_group_id??void 0,subcircuit_id:this.getSubcircuit().subcircuit_id??void 0},a=tt(n,{x:0,y:0}),c=ol(n,!1,i).rotation.angle*180/Math.PI,l=t.shape==="polygon"?{shape:"polygon",points:t.points.map((d)=>tt(n,d))}:t.shape==="circle"?{shape:"circle",...a,radius:t.radius}:{...Math.abs(c)<0.00000001?{shape:"rect"}:{shape:"rotated_rect",ccw_rotation:c},...a,width:t.width,height:t.height};this.pcb_soldermask_opening_id=e.pcb_soldermask_opening.insert({...s,...l}).pcb_soldermask_opening_id}_moveCircuitJsonElements({deltaX:e,deltaY:t}){if(!this.pcb_soldermask_opening_id)return;let{db:n}=this.root,o=n.pcb_soldermask_opening.get(this.pcb_soldermask_opening_id);n.pcb_soldermask_opening.update(this.pcb_soldermask_opening_id,o.shape==="polygon"?{points:o.points.map((i)=>({x:i.x+e,y:i.y+t}))}:{x:o.x+e,y:o.y+t})}doRemovePcbPrimitiveRender(){if(!this.pcb_soldermask_opening_id)return;this.root.db.pcb_soldermask_opening.delete(this.pcb_soldermask_opening_id),this.pcb_soldermask_opening_id=null}},_ii=at({route:Qt(wce),source_trace_id:Z().optional()}),FUe=class extends jo{pcb_trace_id=null;_materializedRouteViaIndices=new Set;isAntennaTrace=!1;isPcbPrimitive=!0;get config(){return{componentName:"PcbTrace",zodProps:_ii}}doInitialPcbPrimitiveRender(){if(this.root?.pcbDisabled)return;let{db:e}=this.root,{_parsedProps:t}=this,n=this.getPrimitiveContainer(),o=this.getSubcircuit(),{isFlipped:i,maybeFlipLayer:r}=this._getPcbPrimitiveFlippedHelpers(),s=this._computePcbGlobalTransformBeforeLayout(),a=t.route.map((u)=>{if(u.route_type==="wire"){let{x:h,y:A,...m}=u,p=tt(s,{x:h,y:A});return{...m,...p,layer:r(u.layer)}}if(u.route_type==="via"){let{x:h,y:A,...m}=u,p=tt(s,{x:h,y:A});return{...m,...p,from_layer:r(u.from_layer),to_layer:r(u.to_layer),tented_on_top:i?u.tented_on_bottom:u.tented_on_top,tented_on_bottom:i?u.tented_on_top:u.tented_on_bottom}}return{...u,start:tt(s,u.start),end:tt(s,u.end),start_layer:r(u.start_layer),end_layer:r(u.end_layer)}}),c=e.pcb_trace.insert({pcb_component_id:n.pcb_component_id,source_trace_id:t.source_trace_id,route:a,is_antenna_trace:this.isAntennaTrace,subcircuit_id:o?.subcircuit_id??void 0,pcb_group_id:this.getGroup()?.pcb_group_id??void 0});this.pcb_trace_id=c.pcb_trace_id;let{holeDiameter:l,padDiameter:d}=IB(this.getInheritedMergedProperty("pcbStyle"));for(let[u,h]of a.entries()){if(h.route_type!=="via")continue;if(this._materializedRouteViaIndices.has(u))continue;e.pcb_via.insert({pcb_trace_id:c.pcb_trace_id,x:h.x,y:h.y,hole_diameter:h.hole_diameter??l,outer_diameter:h.outer_diameter??d,layers:v3({fromLayer:h.from_layer,toLayer:h.to_layer,layerCount:o._getSubcircuitLayerCount()}),from_layer:h.from_layer,to_layer:h.to_layer,tented_on_top:h.tented_on_top,tented_on_bottom:h.tented_on_bottom,subcircuit_id:c.subcircuit_id,pcb_group_id:c.pcb_group_id})}}getPcbSize(){let e=this._getPcbLocalBoundsBeforeLayout();return{width:e.right-e.left,height:e.top-e.bottom}}_getPcbLocalBoundsBeforeLayout(){let{_parsedProps:e}=this;if(!e.route||e.route.length===0)return{left:0,right:0,top:0,bottom:0};let t=1/0,n=-1/0,o=1/0,i=-1/0;for(let r of e.route){if(r.route_type==="through_pad")t=Math.min(t,r.start.x,r.end.x),n=Math.max(n,r.start.x,r.end.x),o=Math.min(o,r.start.y,r.end.y),i=Math.max(i,r.start.y,r.end.y);else t=Math.min(t,r.x),n=Math.max(n,r.x),o=Math.min(o,r.y),i=Math.max(i,r.y);if(r.route_type==="wire")t=Math.min(t,r.x-r.width/2),n=Math.max(n,r.x+r.width/2),o=Math.min(o,r.y-r.width/2),i=Math.max(i,r.y+r.width/2);else if(r.route_type==="through_pad")t=Math.min(t,r.start.x-r.width/2,r.end.x-r.width/2),n=Math.max(n,r.start.x+r.width/2,r.end.x+r.width/2),o=Math.min(o,r.start.y-r.width/2,r.end.y-r.width/2),i=Math.max(i,r.start.y+r.width/2,r.end.y+r.width/2)}if(t===1/0||n===-1/0||o===1/0||i===-1/0)return{left:0,right:0,top:0,bottom:0};return{left:t,right:n,top:i,bottom:o}}},gii=Tme.extend({layers:Qt(bo).optional(),isTented:Ue().optional(),tentedOnTop:Ue().optional(),tentedOnBottom:Ue().optional()}).partial({fromLayer:!0,toLayer:!0}),fin=class extends jo{pcb_via_id=null;_importedPcbTraceId;isPcbPrimitive=!0;get config(){return{componentName:"PcbVia",zodProps:gii}}_getLayers(){let{layers:e,fromLayer:t="top",toLayer:n="bottom"}=this._parsedProps;if(e&&e.length>0)return e;let o=this.parent?this.getSubcircuit()._getSubcircuitLayerCount():2;return v3({fromLayer:t,toLayer:n,layerCount:o})}getAvailablePcbLayers(){return this._getLayers()}getPcbSize(){let e=this._parsedProps.outerDiameter??0.6;return{width:e,height:e}}_getPcbCircuitJsonBounds(){let{db:e}=this.root,t=e.pcb_via.get(this.pcb_via_id),n=this.getPcbSize();return{center:{x:t.x,y:t.y},bounds:{left:t.x-n.width/2,top:t.y-n.height/2,right:t.x+n.width/2,bottom:t.y+n.height/2},width:n.width,height:n.height}}_setPositionFromLayout(e){let{db:t}=this.root;t.pcb_via.update(this.pcb_via_id,{x:e.x,y:e.y})}doInitialPcbPrimitiveRender(){if(this.root?.pcbDisabled)return;let{db:e}=this.root,{holeDiameter:t,outerDiameter:n,netIsAssignable:o,tented:i,isTented:r,tentedOnTop:s,tentedOnBottom:a}=this._parsedProps,c=NUe(i),l=s??c.tented_on_top??r,d=a??c.tented_on_bottom??r,u=this.getSubcircuit(),h=this._getGlobalPcbPositionBeforeLayout(),{isFlipped:A,maybeFlipLayer:m}=this._getPcbPrimitiveFlippedHelpers(),p=this._getLayers().map((y)=>m(y)),g=this._parsedProps.fromLayer?m(this._parsedProps.fromLayer):p[0],_=this._parsedProps.toLayer?m(this._parsedProps.toLayer):p[p.length-1]??g,f=e.pcb_via.insert({x:h.x,y:h.y,...t!==void 0?{hole_diameter:t}:{},...n!==void 0?{outer_diameter:n}:{},layers:p,from_layer:g,to_layer:_,pcb_trace_id:this._importedPcbTraceId,subcircuit_id:u?.subcircuit_id??void 0,pcb_group_id:this.getGroup()?.pcb_group_id??void 0,net_is_assignable:o,tented_on_top:A?d:l,tented_on_bottom:A?l:d});this.pcb_via_id=f.pcb_via_id}},fii=(e)=>{for(let t of e){let n=t.toString();if(!/^(pin)?\d+$/.test(n))continue;return Number.parseInt(n.replace(/^pin/,""))}return null};function yin(e,t,n){let o=fii(n),i=e.filter((d)=>d.isMatchingAnyOf(n));if(i.length===0)return null;let r=i.filter((d)=>d.physicalPinName&&n.includes(d.physicalPinName));if(r.length===1)return r[0];let s=o===null?i:i.filter((d)=>d._parsedProps.pinNumber===o||d._primaryPinNumber===o),a=s.length>0?s:i;bYe(a,n.join(", "));let c=a.find((d)=>d.matchedComponents.some((u)=>u.isPcbPrimitive&&$on(u,t)));if(c)return c;return a.find((d)=>!d.matchedComponents.some((u)=>u.isPcbPrimitive))??a[0]}var rB=class extends jo{pcb_plated_hole_id=null;matchedPort=null;isPcbPrimitive=!0;get config(){return{componentName:"PlatedHole",zodProps:Pyt}}getAvailablePcbLayers(){return[...this.root?._getBoard()?.allLayers??["top","bottom"]]}getPcbSize(){let{_parsedProps:e}=this;if(e.shape==="circle")return{width:e.outerDiameter,height:e.outerDiameter};if(e.shape==="oval"||e.shape==="pill")return{width:e.outerWidth,height:e.outerHeight};if(e.shape==="circular_hole_with_rect_pad")return{width:e.rectPadWidth,height:e.rectPadHeight};if(e.shape==="pill_hole_with_rect_pad")return{width:e.rectPadWidth,height:e.rectPadHeight};if(e.shape==="hole_with_polygon_pad"){if(!e.padOutline||e.padOutline.length===0)throw Error("padOutline is required for hole_with_polygon_pad shape");let t=e.padOutline.map((a)=>{if(typeof a.x==="number")return a.x;return parseFloat(String(a.x))}),n=e.padOutline.map((a)=>{if(typeof a.y==="number")return a.y;return parseFloat(String(a.y))}),o=Math.min(...t),i=Math.max(...t),r=Math.min(...n),s=Math.max(...n);return{width:i-o,height:s-r}}throw Error(`getPcbSize for shape "${e.shape}" not implemented for ${this.componentName}`)}_getPcbCircuitJsonBounds(){let{db:e}=this.root,t=e.pcb_plated_hole.get(this.pcb_plated_hole_id),n=this.getPcbSize();return{center:{x:t.x,y:t.y},bounds:{left:t.x-n.width/2,top:t.y+n.height/2,right:t.x+n.width/2,bottom:t.y-n.height/2},width:n.width,height:n.height}}_setPositionFromLayout(e){let{db:t}=this.root;t.pcb_plated_hole.update(this.pcb_plated_hole_id,{x:e.x,y:e.y}),this.matchedPort?._setPositionFromLayout(e)}doInitialPortMatching(){let e=this.getPrimitiveContainer()?.selectAll("port");if(!this._parsedProps.portHints)return;let t=yin(e,this,this._parsedProps.portHints);if(!t)return;this.matchedPort=t,t.registerMatch(this)}doInitialPcbPrimitiveRender(){if(this.root?.pcbDisabled)return;let{db:e}=this.root,{_parsedProps:t}=this,n=this._getGlobalPcbPositionBeforeLayout(),o=this.parent?.pcb_component_id??this.getPrimitiveContainer()?.pcb_component_id,i=this.getSubcircuit(),r=this._getIsSmt(),s=this.getAvailablePcbLayers(),a=t.solderMaskMargin,c=t.coveredWithSolderMask??!1;this.emitSolderMaskMarginWarning(c,a);let h=(ol(this._computePcbGlobalTransformBeforeLayout()).rotation.angle*180/Math.PI%360+360)%360;if(t.shape==="circle"){let A=e.pcb_plated_hole.insert({pcb_component_id:o,pcb_port_id:this.matchedPort?.pcb_port_id,outer_diameter:t.outerDiameter,hole_diameter:t.holeDiameter,shape:"circle",port_hints:this.getNameAndAliases(),x:n.x,y:n.y,layers:s,soldermask_margin:a,is_covered_with_solder_mask:c,subcircuit_id:i?.subcircuit_id??void 0,pcb_group_id:this.getGroup()?.pcb_group_id??void 0});if(this.pcb_plated_hole_id=A.pcb_plated_hole_id,r&&!i._isInflatedFromCircuitJson)e.pcb_solder_paste.insert({layer:"top",shape:"circle",radius:t.outerDiameter/2,x:n.x,y:n.y,subcircuit_id:i?.subcircuit_id??void 0,pcb_group_id:this.getGroup()?.pcb_group_id??void 0}),e.pcb_solder_paste.insert({layer:"bottom",shape:"circle",radius:t.outerDiameter/2,x:n.x,y:n.y,subcircuit_id:i?.subcircuit_id??void 0,pcb_group_id:this.getGroup()?.pcb_group_id??void 0})}else if(t.shape==="pill"&&t.rectPad){let A=e.pcb_plated_hole.insert({pcb_component_id:o,pcb_port_id:this.matchedPort?.pcb_port_id,outer_width:t.outerWidth,outer_height:t.outerHeight,hole_width:t.holeWidth,hole_height:t.holeHeight,shape:"rotated_pill_hole_with_rect_pad",type:"pcb_plated_hole",port_hints:this.getNameAndAliases(),x:n.x,y:n.y,layers:s,soldermask_margin:a,is_covered_with_solder_mask:c,subcircuit_id:i?.subcircuit_id??void 0,pcb_group_id:this.getGroup()?.pcb_group_id??void 0,hole_shape:"rotated_pill",pad_shape:"rect",hole_ccw_rotation:h,rect_ccw_rotation:h,rect_pad_width:t.outerWidth,rect_pad_height:t.outerHeight,hole_offset_x:t.holeOffsetX,hole_offset_y:t.holeOffsetY});this.pcb_plated_hole_id=A.pcb_plated_hole_id}else if(t.shape==="pill"||t.shape==="oval"){let A=e.pcb_plated_hole.insert({pcb_component_id:o,pcb_port_id:this.matchedPort?.pcb_port_id,outer_width:t.outerWidth,outer_height:t.outerHeight,hole_width:t.holeWidth,hole_height:t.holeHeight,shape:t.shape,port_hints:this.getNameAndAliases(),x:n.x,y:n.y,layers:s,soldermask_margin:a,is_covered_with_solder_mask:c,subcircuit_id:i?.subcircuit_id??void 0,pcb_group_id:this.getGroup()?.pcb_group_id??void 0,ccw_rotation:h});if(this.pcb_plated_hole_id=A.pcb_plated_hole_id,t.shape==="pill"&&r)e.pcb_solder_paste.insert({layer:"top",shape:"rotated_pill",radius:Math.min(t.outerWidth,t.outerHeight)/2,ccw_rotation:h,width:t.outerWidth,height:t.outerHeight,x:n.x,y:n.y,subcircuit_id:i?.subcircuit_id??void 0,pcb_group_id:this.getGroup()?.pcb_group_id??void 0}),e.pcb_solder_paste.insert({layer:"bottom",shape:"rotated_pill",radius:Math.min(t.outerWidth,t.outerHeight)/2,ccw_rotation:h,width:t.outerWidth,height:t.outerHeight,x:n.x,y:n.y,subcircuit_id:i?.subcircuit_id??void 0,pcb_group_id:this.getGroup()?.pcb_group_id??void 0});else if(t.shape==="oval"&&r)e.pcb_solder_paste.insert({layer:"top",shape:"oval",width:t.outerWidth,height:t.outerHeight,x:n.x,y:n.y,subcircuit_id:i?.subcircuit_id??void 0,pcb_group_id:this.getGroup()?.pcb_group_id??void 0}),e.pcb_solder_paste.insert({layer:"bottom",shape:"oval",width:t.outerWidth,height:t.outerHeight,x:n.x,y:n.y,subcircuit_id:i?.subcircuit_id??void 0,pcb_group_id:this.getGroup()?.pcb_group_id??void 0})}else if(t.shape==="circular_hole_with_rect_pad"){let A=e.pcb_plated_hole.insert({pcb_component_id:o,pcb_port_id:this.matchedPort?.pcb_port_id,hole_diameter:t.holeDiameter,rect_pad_width:t.rectPadWidth,rect_pad_height:t.rectPadHeight,shape:"circular_hole_with_rect_pad",port_hints:this.getNameAndAliases(),x:n.x,y:n.y,layers:s,soldermask_margin:a,is_covered_with_solder_mask:c,subcircuit_id:i?.subcircuit_id??void 0,pcb_group_id:this.getGroup()?.pcb_group_id??void 0,hole_offset_x:t.holeOffsetX,hole_offset_y:t.holeOffsetY,rect_border_radius:t.rectBorderRadius??0,rect_ccw_rotation:h});this.pcb_plated_hole_id=A.pcb_plated_hole_id}else if(t.shape==="pill_hole_with_rect_pad")if(h!==0){let A=e.pcb_plated_hole.insert({pcb_component_id:o,pcb_port_id:this.matchedPort?.pcb_port_id,hole_width:t.holeWidth,hole_height:t.holeHeight,rect_pad_width:t.rectPadWidth,rect_pad_height:t.rectPadHeight,hole_offset_x:t.holeOffsetX,hole_offset_y:t.holeOffsetY,shape:"rotated_pill_hole_with_rect_pad",type:"pcb_plated_hole",hole_shape:"rotated_pill",pad_shape:"rect",hole_ccw_rotation:h,rect_ccw_rotation:h,rect_border_radius:t.rectBorderRadius,port_hints:this.getNameAndAliases(),x:n.x,y:n.y,layers:s,soldermask_margin:a,is_covered_with_solder_mask:c,subcircuit_id:i?.subcircuit_id??void 0,pcb_group_id:this.getGroup()?.pcb_group_id??void 0});this.pcb_plated_hole_id=A.pcb_plated_hole_id}else{let A=e.pcb_plated_hole.insert({pcb_component_id:o,pcb_port_id:this.matchedPort?.pcb_port_id,hole_width:t.holeWidth,hole_height:t.holeHeight,rect_pad_width:t.rectPadWidth,rect_pad_height:t.rectPadHeight,hole_offset_x:t.holeOffsetX,hole_offset_y:t.holeOffsetY,shape:"pill_hole_with_rect_pad",rect_border_radius:t.rectBorderRadius,port_hints:this.getNameAndAliases(),x:n.x,y:n.y,layers:s,soldermask_margin:a,is_covered_with_solder_mask:c,subcircuit_id:i?.subcircuit_id??void 0,pcb_group_id:this.getGroup()?.pcb_group_id??void 0});this.pcb_plated_hole_id=A.pcb_plated_hole_id}else if(t.shape==="hole_with_polygon_pad"){let A=(t.padOutline||[]).map((_)=>{let f=_.x;if(typeof f!=="number")f=parseFloat(String(f));let y=_.y;if(typeof y!=="number")y=parseFloat(String(y));return{x:f,y}}),m=t.holeOffsetX;if(typeof m!=="number")m=parseFloat(String(m||0));let p=t.holeOffsetY;if(typeof p!=="number")p=parseFloat(String(p||0));let g=e.pcb_plated_hole.insert({pcb_component_id:o,pcb_port_id:this.matchedPort?.pcb_port_id,shape:"hole_with_polygon_pad",hole_shape:t.holeShape||"circle",hole_diameter:t.holeDiameter,hole_width:t.holeWidth,hole_height:t.holeHeight,pad_outline:A,hole_offset_x:m,hole_offset_y:p,port_hints:this.getNameAndAliases(),x:n.x,y:n.y,layers:s,soldermask_margin:a,is_covered_with_solder_mask:c,subcircuit_id:i?.subcircuit_id??void 0,pcb_group_id:this.getGroup()?.pcb_group_id??void 0});this.pcb_plated_hole_id=g.pcb_plated_hole_id}}doInitialPcbPortAttachment(){if(this.root?.pcbDisabled)return;let{db:e}=this.root;e.pcb_plated_hole.update(this.pcb_plated_hole_id,{pcb_port_id:this.matchedPort?.pcb_port_id})}_moveCircuitJsonElements({deltaX:e,deltaY:t}){if(this.root?.pcbDisabled)return;let{db:n}=this.root;if(!this.pcb_plated_hole_id)return;let o=n.pcb_plated_hole.get(this.pcb_plated_hole_id);if(o){let i={x:o.x+e,y:o.y+t};this._setPositionFromLayout(i)}}},xin=class extends jo{isSchematicPrimitive=!0;get config(){return{componentName:"SchematicArc",zodProps:G2t}}schematic_arc_id;doInitialSchematicPrimitiveRender(){if(this.root?.schematicDisabled)return;if(this.getCollapsedSchematicBoxAncestor())return;let{db:e}=this.root,{_parsedProps:t}=this,n=this._getGlobalSchematicPositionBeforeLayout(),o=this.getPrimitiveContainer()?.parent?.schematic_component_id,i=this._getSymbolAncestor()?.schematic_symbol_id,r=e.schematic_arc.insert({schematic_component_id:o,schematic_symbol_id:i,center:{x:t.center.x+n.x,y:t.center.y+n.y},radius:t.radius,start_angle_degrees:t.startAngleDegrees,end_angle_degrees:t.endAngleDegrees,direction:t.direction,stroke_width:t.strokeWidth??pCe,color:t.color??uB,is_dashed:t.isDashed,subcircuit_id:this.getSubcircuit().subcircuit_id??void 0,schematic_sheet_id:this._resolveSchematicSheetId()});this.schematic_arc_id=r.schematic_arc_id}doInitialSchematicSymbolResize(){if(this.root?.schematicDisabled)return;if(!this.schematic_arc_id)return;let t=this._getSymbolAncestor()?.getUserCoordinateToResizedSymbolTransform();if(!t)return;let{db:n}=this.root,o=n.schematic_arc.get(this.schematic_arc_id);if(!o)return;let i=tt(t,o.center),r=tt(t,{x:o.center.x+o.radius,y:o.center.y}),s=Math.hypot(r.x-i.x,r.y-i.y),a=Math.atan2(t.b,t.a)*180/Math.PI;n.schematic_arc.update(this.schematic_arc_id,{center:{x:i.x,y:i.y},radius:s,start_angle_degrees:o.start_angle_degrees+a,end_angle_degrees:o.end_angle_degrees+a})}},Cin=class extends jo{isSchematicPrimitive=!0;get config(){return{componentName:"SchematicCircle",zodProps:U2t}}schematic_circle_id;doInitialSchematicPrimitiveRender(){if(this.root?.schematicDisabled)return;if(this.getCollapsedSchematicBoxAncestor())return;let{db:e}=this.root,{_parsedProps:t}=this,n=this._getGlobalSchematicPositionBeforeLayout(),o=this.getPrimitiveContainer()?.parent?.schematic_component_id,i=this._getSymbolAncestor()?.schematic_symbol_id,r=e.schematic_circle.insert({schematic_component_id:o,schematic_symbol_id:i,center:{x:t.center.x+n.x,y:t.center.y+n.y},radius:t.radius,stroke_width:t.strokeWidth??pCe,color:t.color??uB,is_filled:t.isFilled,fill_color:t.fillColor,is_dashed:t.isDashed,subcircuit_id:this.getSubcircuit().subcircuit_id??void 0,schematic_sheet_id:this._resolveSchematicSheetId()});this.schematic_circle_id=r.schematic_circle_id}doInitialSchematicSymbolResize(){if(this.root?.schematicDisabled)return;if(!this.schematic_circle_id)return;let t=this._getSymbolAncestor()?.getUserCoordinateToResizedSymbolTransform();if(!t)return;let{db:n}=this.root,o=n.schematic_circle.get(this.schematic_circle_id);if(!o)return;let i=tt(t,o.center),r=tt(t,{x:o.center.x+o.radius,y:o.center.y}),s=Math.hypot(r.x-i.x,r.y-i.y);n.schematic_circle.update(this.schematic_circle_id,{center:{x:i.x,y:i.y},radius:s})}},QYe=class extends jo{isSchematicPrimitive=!0;get config(){return{componentName:"SchematicLine",zodProps:X2t}}schematic_line_id;doInitialSchematicPrimitiveRender(){if(this.root?.schematicDisabled)return;if(this.getCollapsedSchematicBoxAncestor())return;let{db:e}=this.root,{_parsedProps:t}=this,n=this._getGlobalSchematicPositionBeforeLayout(),o=this.getPrimitiveContainer()?.parent?.schematic_component_id,i=this._getSymbolAncestor()?.schematic_symbol_id,r=e.schematic_line.insert({schematic_component_id:o,schematic_symbol_id:i,x1:t.x1+n.x,y1:t.y1+n.y,x2:t.x2+n.x,y2:t.y2+n.y,stroke_width:t.strokeWidth??pCe,color:t.color??uB,is_dashed:t.isDashed||t.dashLength!==void 0||t.dashGap!==void 0,dash_length:t.dashLength,dash_gap:t.dashGap,subcircuit_id:this.getSubcircuit().subcircuit_id??void 0,schematic_sheet_id:this._resolveSchematicSheetId()});this.schematic_line_id=r.schematic_line_id}doInitialSchematicSymbolResize(){if(this.root?.schematicDisabled)return;if(!this.schematic_line_id)return;let t=this._getSymbolAncestor()?.getUserCoordinateToResizedSymbolTransform();if(!t)return;let{db:n}=this.root,o=n.schematic_line.get(this.schematic_line_id);if(!o)return;let i=tt(t,{x:o.x1,y:o.y1}),r=tt(t,{x:o.x2,y:o.y2});n.schematic_line.update(this.schematic_line_id,{x1:i.x,y1:i.y,x2:r.x,y2:r.y})}};function Une(e,t){let n=new EY(e),o=n.getTotalLength(),i=Math.max(2,Math.ceil(o*t)),r=[];for(let s=1;s<=i;s++){let a=s/i*o,c=n.getPointAtLength(a);r.push({x:c.x,y:c.y})}return r}function yii(e,t=10){let n=new EY(e);n.toAbsolute();let o=n.segments,i=[],r=[],s=0,a=0,c=0,l=0;for(let d of o)switch(d[0]){case"M":{if(r.length>0)i.push(r);s=d[1],a=d[2],c=s,l=a,r=[{x:s,y:a}];break}case"L":{s=d[1],a=d[2],r.push({x:s,y:a});break}case"H":{s=d[1],r.push({x:s,y:a});break}case"V":{a=d[1],r.push({x:s,y:a});break}case"Z":{if(s!==c||a!==l)r.push({x:c,y:l});s=c,a=l;break}case"C":{let h=d[5],A=d[6],m=`M ${s} ${a} C ${d[1]} ${d[2]} ${d[3]} ${d[4]} ${h} ${A}`,p=Une(m,t);r.push(...p),s=h,a=A;break}case"S":{let h=d[3],A=d[4],m=`M ${s} ${a} S ${d[1]} ${d[2]} ${h} ${A}`,p=Une(m,t);r.push(...p),s=h,a=A;break}case"Q":{let h=d[3],A=d[4],m=`M ${s} ${a} Q ${d[1]} ${d[2]} ${h} ${A}`,p=Une(m,t);r.push(...p),s=h,a=A;break}case"T":{let h=d[1],A=d[2],m=`M ${s} ${a} T ${h} ${A}`,p=Une(m,t);r.push(...p),s=h,a=A;break}case"A":{let h=d[6],A=d[7],m=`M ${s} ${a} A ${d[1]} ${d[2]} ${d[3]} ${d[4]} ${d[5]} ${h} ${A}`,p=Une(m,t);r.push(...p),s=h,a=A;break}}if(r.length>0)i.push(r);return i.map((d)=>{let u=[];for(let h of d)if(u.length===0||Math.abs(u[u.length-1].x-h.x)>0.000000001||Math.abs(u[u.length-1].y-h.y)>0.000000001)u.push(h);return u})}var Iin=class extends jo{isSchematicPrimitive=!0;schematic_path_ids=[];get config(){return{componentName:"SchematicPath",zodProps:j2t}}doInitialSchematicPrimitiveRender(){if(this.root?.schematicDisabled)return;if(this.getCollapsedSchematicBoxAncestor())return;let{db:e}=this.root,{_parsedProps:t}=this,n=this._getGlobalSchematicPositionBeforeLayout(),o=this.getPrimitiveContainer()?.parent?.schematic_component_id,i=this._getSymbolAncestor()?.schematic_symbol_id,r=this.getSubcircuit().subcircuit_id??void 0;if(this.schematic_path_ids=[],t.svgPath){let s=yii(t.svgPath);for(let a of s){let c=e.schematic_path.insert({schematic_component_id:o,schematic_symbol_id:i,points:a.map((l)=>({x:l.x+n.x,y:l.y+n.y})),is_filled:t.isFilled,is_dashed:t.dashLength!==void 0||t.dashGap!==void 0,fill_color:t.fillColor,stroke_color:t.strokeColor,stroke_width:t.strokeWidth,dash_length:t.dashLength,dash_gap:t.dashGap,subcircuit_id:r,schematic_sheet_id:this._resolveSchematicSheetId()});this.schematic_path_ids.push(c.schematic_path_id)}}else if(t.points&&t.points.length>0){let s=e.schematic_path.insert({schematic_component_id:o,schematic_symbol_id:i,points:t.points.map((a)=>({x:a.x+n.x,y:a.y+n.y})),is_filled:t.isFilled,is_dashed:t.dashLength!==void 0||t.dashGap!==void 0,fill_color:t.fillColor,stroke_color:t.strokeColor,stroke_width:t.strokeWidth,dash_length:t.dashLength,dash_gap:t.dashGap,subcircuit_id:r,schematic_sheet_id:this._resolveSchematicSheetId()});this.schematic_path_ids.push(s.schematic_path_id)}}doInitialSchematicSymbolResize(){if(this.root?.schematicDisabled)return;if(this.schematic_path_ids.length===0)return;let t=this._getSymbolAncestor()?.getUserCoordinateToResizedSymbolTransform();if(!t)return;let{db:n}=this.root;for(let o of this.schematic_path_ids){let i=n.schematic_path.get(o);if(!i)continue;let r=i.points.map((s)=>{let a=tt(t,s);return{x:a.x,y:a.y}});n.schematic_path.update(o,{points:r})}}},bin=class extends jo{isSchematicPrimitive=!0;get config(){return{componentName:"SchematicRect",zodProps:W2t}}schematic_rect_id;doInitialSchematicPrimitiveRender(){if(this.root?.schematicDisabled)return;if(this.getCollapsedSchematicBoxAncestor())return;let{db:e}=this.root,{_parsedProps:t}=this,n=this._getGlobalSchematicPositionBeforeLayout(),o=this.getPrimitiveContainer()?.parent?.schematic_component_id,i=this._getSymbolAncestor()?.schematic_symbol_id,r=e.schematic_rect.insert({schematic_symbol_id:i,center:{x:n.x,y:n.y},width:t.width,height:t.height,stroke_width:t.strokeWidth??pCe,color:t.color??uB,is_filled:t.isFilled,schematic_component_id:o,is_dashed:t.isDashed,rotation:t.rotation??0,subcircuit_id:this.getSubcircuit().subcircuit_id??void 0,schematic_sheet_id:this._resolveSchematicSheetId()});this.schematic_rect_id=r.schematic_rect_id}doInitialSchematicSymbolResize(){if(this.root?.schematicDisabled)return;if(!this.schematic_rect_id)return;let t=this._getSymbolAncestor()?.getUserCoordinateToResizedSymbolTransform();if(!t)return;let{db:n}=this.root,o=n.schematic_rect.get(this.schematic_rect_id);if(!o)return;let i=Math.hypot(t.a,t.b),r=Math.hypot(t.c,t.d),s=Math.atan2(t.b,t.a)*180/Math.PI;n.schematic_rect.update(this.schematic_rect_id,{center:tt(t,o.center),width:o.width*i,height:o.height*r,rotation:(o.rotation??0)+s})}},Sin=class extends jo{isSchematicPrimitive=!0;schematic_text_id;get config(){return{componentName:"SchematicText",zodProps:K2t}}doInitialSchematicPrimitiveRender(){if(this.root?.schematicDisabled)return;if(this.getCollapsedSchematicBoxAncestor())return;let{db:e}=this.root,{_parsedProps:t}=this,n=this._getGlobalSchematicPositionBeforeLayout(),o=this._getSymbolAncestor()?.schematic_symbol_id,i=this.getParentNormalComponent()?.schematic_component_id??void 0,r=this._resolveText(),s=e.schematic_text.insert({schematic_symbol_id:o,schematic_component_id:i,anchor:t.anchor??"center",text:Qie(r),font_size:t.fontSize,color:t.color||"#000000",position:{x:n.x,y:n.y},rotation:t.schRotation??0,schematic_sheet_id:this._resolveSchematicSheetId()});this.schematic_text_id=s.schematic_text_id}doInitialSchematicSymbolResize(){if(this.root?.schematicDisabled)return;if(!this.schematic_text_id)return;let t=this._getSymbolAncestor()?.getUserCoordinateToResizedSymbolTransform();if(!t)return;let{db:n}=this.root,o=n.schematic_text.get(this.schematic_text_id);if(!o)return;let i=tt(t,o.position);n.schematic_text.update(this.schematic_text_id,{position:{x:i.x,y:i.y},rotation:(o.rotation??0)+Math.atan2(t.b,t.a)*180/Math.PI})}},Pin=class extends jo{pcb_silkscreen_circle_id=null;isPcbPrimitive=!0;get config(){return{componentName:"SilkscreenCircle",zodProps:axt}}doInitialPcbPrimitiveRender(){if(this.root?.pcbDisabled)return;let{db:e}=this.root,{_parsedProps:t}=this,n=this._getGlobalPcbPositionBeforeLayout(),{maybeFlipLayer:o}=this._getPcbPrimitiveFlippedHelpers(),i=o(t.layer??"top");if(i!=="top"&&i!=="bottom")throw Error(`Invalid layer "${i}" for SilkscreenCircle. Must be "top" or "bottom".`);let r=this.getSubcircuit(),s=this.parent?.pcb_component_id??this.getPrimitiveContainer()?.pcb_component_id,a=e.pcb_silkscreen_circle.insert({pcb_component_id:s,layer:i,center:{x:n.x,y:n.y},radius:t.radius,subcircuit_id:r?.subcircuit_id??void 0,pcb_group_id:this.getGroup()?.pcb_group_id??void 0,stroke_width:t.strokeWidth??0.1});this.pcb_silkscreen_circle_id=a.pcb_silkscreen_circle_id}getPcbSize(){let{_parsedProps:e}=this,t=e.radius*2;return{width:t,height:t}}_moveCircuitJsonElements({deltaX:e,deltaY:t}){if(this.root?.pcbDisabled)return;let{db:n}=this.root;if(!this.pcb_silkscreen_circle_id)return;let o=n.pcb_silkscreen_circle.get(this.pcb_silkscreen_circle_id);if(o)n.pcb_silkscreen_circle.update(this.pcb_silkscreen_circle_id,{center:{x:o.center.x+e,y:o.center.y+t}})}},vin=class extends jo{pcb_silkscreen_line_id=null;isPcbPrimitive=!0;get config(){return{componentName:"SilkscreenLine",zodProps:rxt}}doInitialPcbPrimitiveRender(){if(this.root?.pcbDisabled)return;let{db:e}=this.root,{_parsedProps:t}=this,{maybeFlipLayer:n}=this._getPcbPrimitiveFlippedHelpers(),o=n(t.layer??"top");if(o!=="top"&&o!=="bottom")throw Error(`Invalid layer "${o}" for SilkscreenLine. Must be "top" or "bottom".`);let i=this.getSubcircuit(),r=this._computePcbGlobalTransformBeforeLayout(),s=tt(r,{x:t.x1,y:t.y1}),a=tt(r,{x:t.x2,y:t.y2}),c=this.parent?.pcb_component_id??this.getPrimitiveContainer()?.pcb_component_id,l=e.pcb_silkscreen_line.insert({pcb_component_id:c,layer:o,x1:s.x,y1:s.y,x2:a.x,y2:a.y,stroke_width:t.strokeWidth??0.1,subcircuit_id:i?.subcircuit_id??void 0,pcb_group_id:i?.getGroup()?.pcb_group_id??void 0});this.pcb_silkscreen_line_id=l.pcb_silkscreen_line_id}getPcbSize(){let{_parsedProps:e}=this,t=Math.abs(e.x2-e.x1),n=Math.abs(e.y2-e.y1);return{width:t,height:n}}_moveCircuitJsonElements({deltaX:e,deltaY:t}){if(this.root?.pcbDisabled)return;let{db:n}=this.root;if(!this.pcb_silkscreen_line_id)return;let o=n.pcb_silkscreen_line.get(this.pcb_silkscreen_line_id);if(o)n.pcb_silkscreen_line.update(this.pcb_silkscreen_line_id,{x1:o.x1+e,y1:o.y1+t,x2:o.x2+e,y2:o.y2+t})}},Ein=class extends jo{pcb_silkscreen_path_id=null;isPcbPrimitive=!0;get config(){return{componentName:"SilkscreenPath",zodProps:ixt}}doInitialPcbPrimitiveRender(){if(this.root?.pcbDisabled)return;let{db:e}=this.root,{_parsedProps:t}=this,{maybeFlipLayer:n}=this._getPcbPrimitiveFlippedHelpers(),o=n(t.layer??"top");if(o!=="top"&&o!=="bottom")throw Error(`Invalid layer "${o}" for SilkscreenPath. Must be "top" or "bottom".`);let i=this._computePcbGlobalTransformBeforeLayout(),r=this.getSubcircuit(),s=this.parent?.pcb_component_id??this.getPrimitiveContainer()?.pcb_component_id,a=e.pcb_silkscreen_path.insert({pcb_component_id:s,layer:o,route:t.route.map((c)=>{let l=tt(i,{x:c.x,y:c.y});return{...c,x:l.x,y:l.y}}),stroke_width:t.strokeWidth??0.1,subcircuit_id:r?.subcircuit_id??void 0,pcb_group_id:this.getGroup()?.pcb_group_id??void 0});this.pcb_silkscreen_path_id=a.pcb_silkscreen_path_id}_setPositionFromLayout(e){let{db:t}=this.root,{_parsedProps:n}=this,o=t.pcb_silkscreen_path.get(this.pcb_silkscreen_path_id);if(!o)return;let i=0,r=0;for(let l of o.route)i+=l.x,r+=l.y;i/=o.route.length,r/=o.route.length;let s=e.x-i,a=e.y-r,c=o.route.map((l)=>({...l,x:l.x+s,y:l.y+a}));t.pcb_silkscreen_path.update(this.pcb_silkscreen_path_id,{route:c})}_moveCircuitJsonElements({deltaX:e,deltaY:t}){if(this.root?.pcbDisabled)return;let{db:n}=this.root;if(!this.pcb_silkscreen_path_id)return;let o=n.pcb_silkscreen_path.get(this.pcb_silkscreen_path_id);if(o)n.pcb_silkscreen_path.update(this.pcb_silkscreen_path_id,{route:o.route.map((i)=>({...i,x:i.x+e,y:i.y+t}))})}getPcbSize(){let{_parsedProps:e}=this;if(!e.route||e.route.length===0)return{width:0,height:0};let t=1/0,n=-1/0,o=1/0,i=-1/0;for(let r of e.route)t=Math.min(t,r.x),n=Math.max(n,r.x),o=Math.min(o,r.y),i=Math.max(i,r.y);return{width:n-t,height:i-o}}},Min=class extends jo{pcb_silkscreen_rect_id=null;isPcbPrimitive=!0;get config(){return{componentName:"SilkscreenRect",zodProps:sxt}}_isRotated90Degrees(){let e=this._computePcbGlobalTransformBeforeLayout(),o=(ol(e).rotation.angle*180/Math.PI%360+360)%360,i=0.01;return Math.abs(o-90)<0.01||Math.abs(o-270)<0.01}doInitialPcbPrimitiveRender(){if(this.root?.pcbDisabled)return;let{db:e}=this.root,{_parsedProps:t}=this,{maybeFlipLayer:n}=this._getPcbPrimitiveFlippedHelpers(),o=n(t.layer??"top");if(o!=="top"&&o!=="bottom")throw Error(`Invalid layer "${o}" for SilkscreenRect. Must be "top" or "bottom".`);let i=this.getSubcircuit(),r=this._getGlobalPcbPositionBeforeLayout(),s=this._isRotated90Degrees(),a=s?t.height:t.width,c=s?t.width:t.height,l=this.parent?.pcb_component_id??this.getPrimitiveContainer()?.pcb_component_id,d=e.pcb_silkscreen_rect.insert({pcb_component_id:l,layer:o,center:{x:r.x,y:r.y},width:a,height:c,subcircuit_id:i?.subcircuit_id??void 0,pcb_group_id:this?.getGroup()?.pcb_group_id??void 0,stroke_width:t.strokeWidth??0.1,is_filled:t.filled??!1,corner_radius:t.cornerRadius??void 0});this.pcb_silkscreen_rect_id=d.pcb_silkscreen_rect_id}getPcbSize(){let{_parsedProps:e}=this;if(this._isRotated90Degrees())return{width:e.height,height:e.width};return{width:e.width,height:e.height}}_moveCircuitJsonElements({deltaX:e,deltaY:t}){if(this.root?.pcbDisabled)return;let{db:n}=this.root;if(!this.pcb_silkscreen_rect_id)return;let o=n.pcb_silkscreen_rect.get(this.pcb_silkscreen_rect_id);if(o)n.pcb_silkscreen_rect.update(this.pcb_silkscreen_rect_id,{center:{x:o.center.x+e,y:o.center.y+t}})}},HUe=class extends jo{pcb_silkscreen_text_ids=[];isPcbPrimitive=!0;_footprinterFontSize;get config(){return{componentName:"SilkscreenText",zodProps:oxt}}doInitialPcbPrimitiveRender(){if(this.root?.pcbDisabled)return;let{db:e}=this.root,{_parsedProps:t}=this,n=this.getPrimitiveContainer(),{maybeFlipLayer:o,isFlipped:i}=this._getPcbPrimitiveFlippedHelpers(),r=this.getSubcircuit(),s=0;if(t.pcbRotation!==void 0&&t.pcbRotation!==0)s=t.pcbRotation;else{let x=this._computePcbGlobalTransformBeforeLayout();s=ol(x).rotation.angle*180/Math.PI}if(i)s=(s+180)%360;let a=new Set(t.layers);if(t.layer)a.add(t.layer);let c=a.size>0?Array.from(a):["top"],l=_W({propertyName:"fontSize",resolvedPcbSx:this.getResolvedPcbSx(),pathFromAmpersand:"silkscreentext",component:this}),d=_W({propertyName:"pcbX",resolvedPcbSx:this.getResolvedPcbSx(),pathFromAmpersand:"silkscreentext",component:this}),u=_W({propertyName:"pcbY",resolvedPcbSx:this.getResolvedPcbSx(),pathFromAmpersand:"silkscreentext",component:this});if(_W({propertyName:"visibility",resolvedPcbSx:this.getResolvedPcbSx(),pathFromAmpersand:"silkscreentext",component:this})==="hidden")return;let A=t.fontSize??l??this.getInheritedProperty("pcbStyle")?.silkscreenFontSize??this._footprinterFontSize??1,p=(d!==void 0||u!==void 0)&&this._footprinterFontSize!==void 0?tt(_o(this.parent?._computePcbGlobalTransformBeforeLayout()??Il(),i?d7():Il()),{x:this.resolvePcbCoordinate({rawValue:d??t.pcbX??0,axis:"pcbX"}),y:this.resolvePcbCoordinate({rawValue:u??t.pcbY??0,axis:"pcbY"})}):this._getGlobalPcbPositionBeforeLayout(),g=t.knockoutPadding??0,f=t.knockoutPadding!==void 0||t.knockoutPaddingLeft!==void 0||t.knockoutPaddingRight!==void 0||t.knockoutPaddingTop!==void 0||t.knockoutPaddingBottom!==void 0?{left:t.knockoutPaddingLeft??g,right:t.knockoutPaddingRight??g,top:t.knockoutPaddingTop??g,bottom:t.knockoutPaddingBottom??g}:void 0,y=this._resolveText();for(let x of c){let C=e.pcb_silkscreen_text.insert({anchor_alignment:t.anchorAlignment,anchor_position:{x:p.x,y:p.y},font:t.font??"tscircuit2024",font_size:A,layer:o(x),text:Qie(y),ccw_rotation:s,pcb_component_id:n.pcb_component_id,subcircuit_id:r?.subcircuit_id??void 0,pcb_group_id:this.getGroup()?.pcb_group_id??void 0,is_knockout:t.isKnockout,knockout_padding:f});this.pcb_silkscreen_text_ids.push(C.pcb_silkscreen_text_id)}}getPcbSize(){let{_parsedProps:e}=this,t=_W({propertyName:"fontSize",resolvedPcbSx:this.getResolvedPcbSx(),pathFromAmpersand:"silkscreentext",component:this}),n=e.fontSize??t??this.getInheritedProperty("pcbStyle")?.silkscreenFontSize??this._footprinterFontSize??1,i=this._resolveText().length*n,r=n;return{width:i*n,height:r*n}}_moveCircuitJsonElements({deltaX:e,deltaY:t}){if(this.root?.pcbDisabled)return;let{db:n}=this.root;for(let o of this.pcb_silkscreen_text_ids){let i=n.pcb_silkscreen_text.get(o);if(i)n.pcb_silkscreen_text.update(o,{anchor_position:{x:i.anchor_position.x+e,y:i.anchor_position.y+t}})}}},Nye=(e)=>{let t=new we.Polygon(e.map(({x:n,y:o})=>new we.Point(n,o)));if(t.orientation()===we.ORIENTATION.CW)t.reverse();return t};function xii({points:e,solderPasteMargin:t}){if(t===0)return[{points:e}];let n=Nye(e),o=n;if(t===void 0){let i=ws(e),r=(i.minX+i.maxX)/2,s=(i.minY+i.maxY)/2,a=_o(So(r,s),xc(0.7),So(-r,-s));o=we.BooleanOperations.intersect(n,Nye(e.map((c)=>tt(a,c))))}else{let i=n.vertices,r=i.map((a,c)=>new we.Segment(a,i[(c+1)%i.length])).filter((a)=>!a.isZeroLength()),s=r.map((a)=>a.translate(a.tangentInStart().rotate90CW().multiply(t)));for(let[a,c]of r.entries()){let l=s[a],d=Nye([c.start,c.end,l.end,l.start]);o=t>0?we.BooleanOperations.unify(o,d):we.BooleanOperations.subtract(o,d);let u=(a+1)%r.length,h=r[u],A=s[u],m=c.tangentInStart().cross(h.tangentInStart());if(we.Utils.EQ_0(m)||m*t<0)continue;let[p]=new we.Line(l.start,l.end).intersect(new we.Line(A.start,A.end)),g=Nye([c.end,l.end,p,A.start]);o=t>0?we.BooleanOperations.unify(o,g):we.BooleanOperations.subtract(o,g)}}return o.splitToIslands().map((i)=>{let r=[...i.faces].sort((c,l)=>l.area()-c.area()),[s,...a]=r;return{points:s.vertices.map(({x:c,y:l})=>({x:c,y:l})),...a.length?{holes:a.map((c)=>c.vertices.map(({x:l,y:d})=>({x:l,y:d})))}:{}}})}var sB=class extends jo{pcb_smtpad_id=null;matchedPort=null;_inflatedPcbSolderPaste;isPcbPrimitive=!0;get config(){return{componentName:"SmtPad",zodProps:Lyt}}getPcbSize(){let{_parsedProps:e}=this;if(e.shape==="circle")return{width:e.radius*2,height:e.radius*2};if(e.shape==="rect")return{width:e.width,height:e.height};if(e.shape==="rotated_rect"){let{width:t,height:n}=hoe({width:e.width,height:e.height,ccwRotationDegrees:e.ccwRotation??0});return{width:t,height:n}}if(e.shape==="polygon"){let t=e.points,n=t.map((c)=>c.x),o=t.map((c)=>c.y),i=Math.min(...n),r=Math.max(...n),s=Math.min(...o),a=Math.max(...o);return{width:r-i,height:a-s}}if(e.shape==="pill")return{width:e.width,height:e.height};if(e.shape==="rotated_pill"){let{width:t,height:n}=hoe({width:e.width,height:e.height,ccwRotationDegrees:e.ccwRotation});return{width:t,height:n}}throw Error(`getPcbSize for shape "${e.shape}" not implemented for ${this.componentName}`)}_getPcbBoundsBeforeLayout(){let{_parsedProps:e}=this;if(e.shape!=="polygon")return super._getPcbBoundsBeforeLayout();let t=this._computePcbGlobalTransformBeforeLayout(),n=e.points.map((i)=>tt(t,i)),o=ws(n);return{left:o.minX,right:o.maxX,top:o.maxY,bottom:o.minY}}doInitialPortMatching(){let e=this.getPrimitiveContainer()?.selectAll("port");if(!this.props.portHints)return;let t=yin(e,this,this.props.portHints);if(!t)return;this.matchedPort=t,t.registerMatch(this)}doInitialPcbPrimitiveRender(){if(this.root?.pcbDisabled)return;let{db:e}=this.root,{_parsedProps:t}=this,n=t.coveredWithSolderMask??!1,o=!t.noSolderPaste&&!n&&this._getIsSmt(),{solderMaskMargin:i,solderPasteMargin:r}=t,s=(B,w=2)=>r!==void 0?Math.max(B+w*r,0):B*0.7;this.emitSolderMaskMarginWarning(n,i);let a=this.getSubcircuit(),c=this._getGlobalPcbPositionBeforeLayout(),l=this._computePcbGlobalTransformBeforeLayout(),h=(ol(this._computePcbGlobalTransformBeforeLayout()).rotation.angle*180/Math.PI%360+360)%360,A=0.01,m=Math.abs(h)<A||Math.abs(h-180)<A||Math.abs(h-360)<A,p=Math.abs(h-90)<A||Math.abs(h-270)<A,g=Math.abs(h-360)<A?0:h,_=g,{maybeFlipLayer:f,isFlipped:y}=this._getPcbPrimitiveFlippedHelpers(),x=this.getPrimitiveContainer(),C=x?.props?.layer!==void 0?x?._parsedProps.layer:void 0,I=(B)=>C??f(B);if(y)g=(360-g+360)%360;let b=t.portHints?.map((B)=>B.toString())??[],P=null,E=this.parent?.pcb_component_id??this.getPrimitiveContainer()?.pcb_component_id;if(t.shape==="circle"){P=e.pcb_smtpad.insert({pcb_component_id:E,pcb_port_id:this.matchedPort?.pcb_port_id,layer:I(t.layer??"top"),shape:"circle",radius:t.radius,port_hints:b,is_covered_with_solder_mask:n,soldermask_margin:i,x:c.x,y:c.y,subcircuit_id:a?.subcircuit_id??void 0});let B=s(P.radius,1);if(o&&B>0)e.pcb_solder_paste.insert({layer:P.layer,shape:"circle",radius:B,x:P.x,y:P.y,pcb_component_id:P.pcb_component_id,pcb_smtpad_id:P.pcb_smtpad_id,subcircuit_id:a?.subcircuit_id??void 0,pcb_group_id:this.getGroup()?.pcb_group_id??void 0})}else if(t.shape==="rect"){if(!m&&!p)P=e.pcb_smtpad.insert({pcb_component_id:E,pcb_port_id:this.matchedPort?.pcb_port_id,layer:I(t.layer??"top"),shape:"rotated_rect",width:t.width,height:t.height,corner_radius:t.cornerRadius??void 0,x:c.x,y:c.y,ccw_rotation:g,port_hints:b,is_covered_with_solder_mask:n,soldermask_margin:i,subcircuit_id:a?.subcircuit_id??void 0,pcb_group_id:this.getGroup()?.pcb_group_id??void 0});else P=e.pcb_smtpad.insert({pcb_component_id:E,pcb_port_id:this.matchedPort?.pcb_port_id,layer:I(t.layer??"top"),shape:"rect",width:p?t.height:t.width,height:p?t.width:t.height,corner_radius:t.cornerRadius??void 0,port_hints:b,is_covered_with_solder_mask:n,soldermask_margin:i,x:c.x,y:c.y,subcircuit_id:a?.subcircuit_id??void 0,pcb_group_id:this.getGroup()?.pcb_group_id??void 0});let w=s(P.width),T=s(P.height);if(o&&w>0&&T>0){if(P.shape==="rect")e.pcb_solder_paste.insert({layer:I(t.layer??"top"),shape:"rect",width:w,height:T,x:P.x,y:P.y,pcb_component_id:P.pcb_component_id,pcb_smtpad_id:P.pcb_smtpad_id,subcircuit_id:a?.subcircuit_id??void 0,pcb_group_id:this.getGroup()?.pcb_group_id??void 0});else if(P.shape==="rotated_rect")e.pcb_solder_paste.insert({layer:I(t.layer??"top"),shape:"rotated_rect",width:w,height:T,x:P.x,y:P.y,ccw_rotation:P.ccw_rotation,pcb_component_id:P.pcb_component_id,pcb_smtpad_id:P.pcb_smtpad_id,subcircuit_id:a?.subcircuit_id??void 0,pcb_group_id:this.getGroup()?.pcb_group_id??void 0})}}else if(t.shape==="rotated_rect"){let B=t.ccwRotation??0,w=(_+B+360)%360,T=y?(360-w+360)%360:w;P=e.pcb_smtpad.insert({pcb_component_id:E,pcb_port_id:this.matchedPort?.pcb_port_id,layer:I(t.layer??"top"),shape:"rotated_rect",width:t.width,height:t.height,corner_radius:t.cornerRadius??void 0,x:c.x,y:c.y,ccw_rotation:T,port_hints:b,is_covered_with_solder_mask:n,soldermask_margin:i,subcircuit_id:a?.subcircuit_id??void 0,pcb_group_id:this.getGroup()?.pcb_group_id??void 0});let Q=s(P.width),N=s(P.height);if(o&&Q>0&&N>0)e.pcb_solder_paste.insert({layer:I(t.layer??"top"),shape:"rotated_rect",width:Q,height:N,x:c.x,y:c.y,ccw_rotation:T,pcb_component_id:E,pcb_smtpad_id:P.pcb_smtpad_id,subcircuit_id:a?.subcircuit_id??void 0,pcb_group_id:this.getGroup()?.pcb_group_id??void 0})}else if(t.shape==="polygon"){let B=t.points.map(({x:T,y:Q})=>({x:ze.parse(T),y:ze.parse(Q)})),w=B.map((T)=>tt(l,T));if(P=e.pcb_smtpad.insert({pcb_component_id:E,pcb_port_id:this.matchedPort?.pcb_port_id,layer:I(t.layer??"top"),shape:"polygon",points:w,port_hints:b,is_covered_with_solder_mask:n,soldermask_margin:i,subcircuit_id:a?.subcircuit_id??void 0,pcb_group_id:this.getGroup()?.pcb_group_id??void 0}),o){let T=this._inflatedPcbSolderPaste??xii({points:B,solderPasteMargin:r});for(let Q of T)e.pcb_solder_paste.insert({shape:"polygon",layer:P.layer,points:Q.points.map((N)=>tt(l,N)),holes:Q.holes?.map((N)=>N.map((F)=>tt(l,F))),pcb_component_id:E??void 0,pcb_smtpad_id:P.pcb_smtpad_id,subcircuit_id:a?.subcircuit_id??void 0,pcb_group_id:this.getGroup()?.pcb_group_id??void 0})}}else if(t.shape==="rotated_pill"){let B=(_+t.ccwRotation+360)%360,w=y?(360-B+360)%360:B;P=e.pcb_smtpad.insert({pcb_component_id:E,pcb_port_id:this.matchedPort?.pcb_port_id,layer:I(t.layer??"top"),shape:"rotated_pill",x:c.x,y:c.y,radius:t.radius,height:t.height,width:t.width,ccw_rotation:w,port_hints:b,is_covered_with_solder_mask:n,soldermask_margin:i,subcircuit_id:a?.subcircuit_id??void 0,pcb_group_id:this.getGroup()?.pcb_group_id??void 0})}else if(t.shape==="pill")if(g!==0)P=e.pcb_smtpad.insert({pcb_component_id:E,pcb_port_id:this.matchedPort?.pcb_port_id,layer:I(t.layer??"top"),shape:"rotated_pill",x:c.x,y:c.y,radius:t.radius,height:t.height,width:t.width,ccw_rotation:g,port_hints:b,is_covered_with_solder_mask:n,soldermask_margin:i,subcircuit_id:a?.subcircuit_id??void 0,pcb_group_id:this.getGroup()?.pcb_group_id??void 0});else P=e.pcb_smtpad.insert({pcb_component_id:E,pcb_port_id:this.matchedPort?.pcb_port_id,layer:I(t.layer??"top"),shape:"pill",x:c.x,y:c.y,radius:t.radius,height:t.height,width:t.width,port_hints:b,is_covered_with_solder_mask:n,soldermask_margin:i,subcircuit_id:a?.subcircuit_id??void 0,pcb_group_id:this.getGroup()?.pcb_group_id??void 0});if(o&&(P?.shape==="pill"||P?.shape==="rotated_pill")){let B=s(P.width),w=s(P.height);if(B>0&&w>0){let T={x:P.x,y:P.y,width:B,height:w,radius:s(P.radius,1),layer:P.layer,pcb_component_id:P.pcb_component_id,pcb_smtpad_id:P.pcb_smtpad_id,subcircuit_id:P.subcircuit_id,pcb_group_id:P.pcb_group_id};if(P.shape==="rotated_pill")e.pcb_solder_paste.insert({...T,shape:"rotated_pill",ccw_rotation:P.ccw_rotation});else e.pcb_solder_paste.insert({...T,shape:"pill"})}}if(P)this.pcb_smtpad_id=P.pcb_smtpad_id}doInitialPcbPortAttachment(){if(this.root?.pcbDisabled)return;let{db:e}=this.root;e.pcb_smtpad.update(this.pcb_smtpad_id,{pcb_port_id:this.matchedPort?.pcb_port_id})}getAvailablePcbLayers(){let{maybeFlipLayer:e}=this._getPcbPrimitiveFlippedHelpers(),t=this.getPrimitiveContainer();return[(t?.props?.layer!==void 0?t?._parsedProps.layer:void 0)??e(this._parsedProps.layer??"top")]}_getPcbCircuitJsonBounds(){let{db:e}=this.root,t=e.pcb_smtpad.get(this.pcb_smtpad_id);if(t.shape==="rect")return{center:{x:t.x,y:t.y},bounds:{left:t.x-t.width/2,top:t.y+t.height/2,right:t.x+t.width/2,bottom:t.y-t.height/2},width:t.width,height:t.height};if(t.shape==="rotated_rect"){let{width:n,height:o,xExtent:i,yExtent:r}=hoe({width:t.width,height:t.height,ccwRotationDegrees:t.ccw_rotation});return{center:{x:t.x,y:t.y},bounds:{left:t.x-i,right:t.x+i,top:t.y-r,bottom:t.y+r},width:n,height:o}}if(t.shape==="circle")return{center:{x:t.x,y:t.y},bounds:{left:t.x-t.radius,top:t.y-t.radius,right:t.x+t.radius,bottom:t.y+t.radius},width:t.radius*2,height:t.radius*2};if(t.shape==="polygon"){let n=t.points,o=n.map((l)=>l.x),i=n.map((l)=>l.y),r=Math.min(...o),s=Math.max(...o),a=Math.min(...i),c=Math.max(...i);return{center:{x:(r+s)/2,y:(a+c)/2},bounds:{left:r,top:c,right:s,bottom:a},width:s-r,height:c-a}}if(t.shape==="pill"){let n=t.width/2,o=t.height/2;return{center:{x:t.x,y:t.y},bounds:{left:t.x-n,top:t.y-o,right:t.x+n,bottom:t.y+o},width:t.width,height:t.height}}if(t.shape==="rotated_pill"){let{width:n,height:o,xExtent:i,yExtent:r}=hoe({width:t.width,height:t.height,ccwRotationDegrees:t.ccw_rotation});return{center:{x:t.x,y:t.y},bounds:{left:t.x-i,right:t.x+i,top:t.y-r,bottom:t.y+r},width:n,height:o}}throw Error(`circuitJson bounds calculation not implemented for shape "${t.shape}"`)}_setPositionFromLayout(e){let{db:t}=this.root;t.pcb_smtpad.update(this.pcb_smtpad_id,{x:e.x,y:e.y});let n=t.pcb_solder_paste.list().find((o)=>o.pcb_smtpad_id===this.pcb_smtpad_id);if(n)t.pcb_solder_paste.update(n.pcb_solder_paste_id,{x:e.x,y:e.y});this.matchedPort?._setPositionFromLayout(e)}_moveCircuitJsonElements({deltaX:e,deltaY:t}){if(this.root?.pcbDisabled)return;let{db:n}=this.root;if(!this.pcb_smtpad_id)return;let o=n.pcb_smtpad.get(this.pcb_smtpad_id);if(o.shape==="rect"||o.shape==="circle"||o.shape==="rotated_rect"||o.shape==="pill"||o.shape==="rotated_pill")this._setPositionFromLayout({x:o.x+e,y:o.y+t});else if(o.shape==="polygon"){n.pcb_smtpad.update(this.pcb_smtpad_id,{points:o.points.map((r)=>({x:r.x+e,y:r.y+t}))});for(let r of n.pcb_solder_paste.list()){if(r.pcb_smtpad_id!==this.pcb_smtpad_id||r.shape!=="polygon")continue;n.pcb_solder_paste.update(r.pcb_solder_paste_id,{points:r.points.map(({x:s,y:a})=>({x:s+e,y:a+t})),holes:r.holes?.map((s)=>s.map(({x:a,y:c})=>({x:a+e,y:c+t})))})}let i={x:this._getPcbCircuitJsonBounds().center.x+e/2,y:this._getPcbCircuitJsonBounds().center.y+t/2};this.matchedPort?._setPositionFromLayout(i)}}},Cii=(e)=>e.type==="pcb_solder_paste"&&!e.pcb_smtpad_id&&(e.shape==="circle"||e.shape==="rect"||e.shape==="rotated_rect"),Bin=class e extends jo{pcb_solder_paste_id=null;isPcbPrimitive=!0;circuitJsonRotation=0;static fromCircuitJson(t){let n={pcbX:t.x,pcbY:t.y,layer:t.layer},o;if(t.shape==="circle")o={...n,shape:"circle",radius:t.radius};else o={...n,shape:"rect",width:t.width,height:t.height};let i=new e(o);if(t.shape==="rotated_rect")i.circuitJsonRotation=t.ccw_rotation;return i}_getPcbRotationBeforeLayout(){return this.circuitJsonRotation}get config(){return{componentName:"SolderPaste",zodProps:Fyt}}getPcbSize(){let t=this._parsedProps;if(t.shape==="circle")return{width:t.radius*2,height:t.radius*2};return{width:t.width,height:t.height}}doInitialPcbPrimitiveRender(){if(this.root?.pcbDisabled)return;let{db:t}=this.root,n=this._parsedProps,o=n.layer??"top";if(o!=="top"&&o!=="bottom")throw Error(`Invalid layer "${o}" for SolderPaste. Must be "top" or "bottom".`);let i=this._computePcbGlobalTransformBeforeLayout(),{maybeFlipLayer:r,isFlipped:s}=this._getPcbPrimitiveFlippedHelpers(),a=tt(i,{x:0,y:0}),c=ol(i,!1,s).rotation.angle*180/Math.PI,l={...a,layer:r(o),pcb_component_id:this.parent?.pcb_component_id??this.getPrimitiveContainer()?.pcb_component_id??void 0,pcb_group_id:this.getGroup()?.pcb_group_id??void 0,subcircuit_id:this.getSubcircuit().subcircuit_id??void 0},d;if(n.shape==="circle")d=t.pcb_solder_paste.insert({...l,shape:"circle",radius:n.radius});else if(Math.abs(c)<0.00000001)d=t.pcb_solder_paste.insert({...l,shape:"rect",width:n.width,height:n.height});else d=t.pcb_solder_paste.insert({...l,shape:"rotated_rect",ccw_rotation:c,width:n.width,height:n.height});this.pcb_solder_paste_id=d.pcb_solder_paste_id}_moveCircuitJsonElements({deltaX:t,deltaY:n}){if(!this.pcb_solder_paste_id)return;let{db:o}=this.root,i=o.pcb_solder_paste.get(this.pcb_solder_paste_id);o.pcb_solder_paste.update(this.pcb_solder_paste_id,{x:i.x+t,y:i.y+n})}removePcbPrimitiveRender(){if(!this.pcb_solder_paste_id)return;this.root.db.pcb_solder_paste.delete(this.pcb_solder_paste_id),this.pcb_solder_paste_id=null}},OUe=class extends jo{isPrimitiveContainer=!0;schematic_symbol_id;userCoordinateToResizedSymbolTransformMat;schematicSymbolBoundsInSymbolLocalCoordinateSpace;get config(){return{componentName:"Symbol",zodProps:jyt}}hasExplicitSize(){let{_parsedProps:e}=this;return e.width!==void 0||e.height!==void 0}doInitialSymbolContainerRender(){if(this.root?.schematicDisabled)return;let{db:e}=this.root,{_parsedProps:t}=this,o=this.getParentNormalComponent()?._parsedProps?.kicadSymbolMetadata,i=e.schematic_symbol.insert({name:t.name,metadata:o?{kicad_symbol:o}:void 0});this.schematic_symbol_id=i.schematic_symbol_id}getSchematicSymbolBounds(){if(this.schematicSymbolBoundsInSymbolLocalCoordinateSpace)return this.schematicSymbolBoundsInSymbolLocalCoordinateSpace;return this._computeSchematicSymbolBounds(),this.schematicSymbolBoundsInSymbolLocalCoordinateSpace??null}getUserCoordinateToResizedSymbolTransform(){if(this.userCoordinateToResizedSymbolTransformMat)return this.userCoordinateToResizedSymbolTransformMat;this._computeUserCoordinateToResizedSymbolTransform();let e=this.getParentNormalComponent(),t=e?._parsedProps.schRotation??0;if(e&&t!==0){let n=e._getGlobalSchematicPositionBeforeLayout();this.userCoordinateToResizedSymbolTransformMat=_o(So(n.x,n.y),bA(t),So(-n.x,-n.y),this.userCoordinateToResizedSymbolTransformMat??Il())}return this.userCoordinateToResizedSymbolTransformMat??null}_computeSchematicSymbolBounds(){if(this.root?.schematicDisabled)return;let{db:e}=this.root,{viewbox:t}=this._parsedProps;if(t){let i=this._getGlobalSchematicPositionBeforeLayout();this.schematicSymbolBoundsInSymbolLocalCoordinateSpace={minX:i.x+t.minX,maxX:i.x+t.maxX,minY:i.y+t.minY,maxY:i.y+t.maxY};return}let n=[];for(let i of this.children){if(i.componentName==="Port"){let r=i.schematic_port_id;if(r){let s=e.schematic_port.get(r);if(s)n.push(s)}continue}if(!i.isSchematicPrimitive)continue;if(i.componentName==="SchematicLine"){let r=e.schematic_line.get(i.schematic_line_id);if(r)n.push(r)}else if(i.componentName==="SchematicRect"){let r=e.schematic_rect.get(i.schematic_rect_id);if(r)n.push(r)}else if(i.componentName==="SchematicCircle"){let r=e.schematic_circle.get(i.schematic_circle_id);if(r)n.push(r)}else if(i.componentName==="SchematicArc"){let r=e.schematic_arc.get(i.schematic_arc_id);if(r)n.push(r)}else if(i.componentName==="SchematicText"){let r=e.schematic_text.get(i.schematic_text_id);if(r)n.push(r)}else if(i.componentName==="SchematicPath"){let r=i.schematic_path_ids;if(r)for(let s of r){let a=e.schematic_path.get(s);if(a)n.push(a)}}}if(n.length===0)return;let o=Nie(n);this.schematicSymbolBoundsInSymbolLocalCoordinateSpace=o}_computeUserCoordinateToResizedSymbolTransform(){if(!this.hasExplicitSize())return;let e=this.getSchematicSymbolBounds();if(!e)return;let{_parsedProps:t}=this,{width:n,height:o}=t;if(n===void 0&&o===void 0)return;let i=e.maxX-e.minX,r=e.maxY-e.minY;if(i===0&&r===0)return;let s=(e.minX+e.maxX)/2,a=(e.minY+e.maxY)/2,c=n!==void 0&&i>0?n/i:1,l=o!==void 0&&r>0?o/r:1;if(t.fit==="contain"){let u=[];if(n!==void 0&&i>0)u.push(n/i);if(o!==void 0&&r>0)u.push(o/r);let h=u.length?Math.min(...u):1;c=h,l=h}let d=this._getGlobalSchematicPositionBeforeLayout();this.userCoordinateToResizedSymbolTransformMat=_o(So(d.x,d.y),xc(c,l),So(-s,-a))}},Iii=({elm:e,pinLabels:t,layer:n,readableRotation:o,anchorAlignment:i})=>{let r=e.text.replace(/[{}]/g,"").toLowerCase(),s=r;if(Array.isArray(t)){let c=parseInt(r.replace(/[^\d]/g,""),10)-1;s=String(t[c]??r)}else if(typeof t==="object")s=String(t[r]??r);let a=new HUe({anchorAlignment:i||"center",text:s??r,layer:n||"top",pcbX:isNaN(e.anchor_position.x)?0:e.anchor_position.x,pcbY:e.anchor_position.y,pcbRotation:o??0});return a._footprinterFontSize=e.font_size+0.2,a},bii=(e,t)=>{let n=parseInt(e||"0",10),o;if(t!==void 0&&t!==null)o=t-n;else o=n;return(o%360+360)%360},cW=(e)=>e??void 0,Sii=(e)=>{for(let t of e??[]){if(/^\d+$/.test(t))return Number(t);let n=/^pin(\d+)$/i.exec(t);if(n)return Number(n[1])}},Pii=(e)=>{switch(e){case"left":case"right":return e;case"top":return"up";case"bottom":return"down"}return null},vii=["schematic_line","schematic_rect","schematic_circle","schematic_arc","schematic_path"],Eii=(e)=>vii.includes(e.type),oJt=(e)=>{if(!("schematic_symbol_id"in e))return;if(typeof e.schematic_symbol_id==="string")return e.schematic_symbol_id;return},hB=({sourcePortOwner:e,componentName:t,componentRotation:n,footprinterString:o,pinLabels:i,pcbPinLabels:r,preserveSolderPaste:s=!1},a)=>{let c=a.filter((f)=>f.type==="source_port");if(e){let f=Ron(a);if(f!==void 0)e._importedInternallyConnectedPinNames=f}if(e&&c.length>0){e._importedSourcePorts=c;for(let f of e._getAllPortsFromChildren())f._markDirty("SourceRender")}let l=[],d=new Map,u=new Map,h=new Map,A=new Map,m=new Map,p=new Map;for(let f of a){if(f.type==="pcb_component"&&typeof f.source_component_id==="string")h.set(f.pcb_component_id,f.source_component_id);if(f.type==="source_port"){if(A.set(f.source_port_id,f),typeof f.pin_number==="number"&&typeof f.source_component_id==="string"){let y=m.get(f.source_component_id);if(!y)y=new Map,m.set(f.source_component_id,y);y.set(f.pin_number,f)}}}let g=(f,y)=>{let x=Sii(f);if(typeof y!=="string")return f;let C=h.get(y);if(typeof x!=="number"||!C)return f;let I=m.get(C)?.get(x);if(!I)return f;let b=Array.from(new Set([...f??[],...I.port_hints??[],I.name].filter((P)=>typeof P==="string"&&P.length>0)));if(b.length>0)return b;return f};for(let f of a){if(f.type!=="schematic_symbol")continue;let y=new OUe({name:f.name});d.set(f.schematic_symbol_id,y),l.push(y)}for(let f of a){if(!Eii(f))continue;let y=oJt(f),x=f.stroke_width;if(!y||typeof x!=="number"||!Number.isFinite(x)||p.has(y))continue;p.set(y,x)}for(let f of a){if(f.type!=="schematic_component")continue;u.set(f.schematic_component_id,f)}let _=(f,y)=>{let x=oJt(f);if(x===void 0&&"schematic_component_id"in f&&typeof f.schematic_component_id==="string")x=u.get(f.schematic_component_id)?.schematic_symbol_id;if(typeof x==="string"){let C=d.get(x);if(C){C.add(y);return}}l.push(y)};for(let f of a){let y;if("port_hints"in f){if(y=f.port_hints,"pcb_component_id"in f)y=g(f.port_hints,f.pcb_component_id)}let x;if(s&&f.type==="pcb_smtpad"&&!a.some((C)=>C.type==="pcb_solder_paste"&&C.pcb_smtpad_id===f.pcb_smtpad_id)){if(f.shape==="circle")x=-f.radius;else if(f.shape!=="polygon")x=-Math.min(f.width,f.height)/2}if(Cii(f))l.push(Bin.fromCircuitJson(f));else if(f.type==="pcb_soldermask_opening"){let C;if(f.shape==="polygon")C={shape:"polygon",layer:f.layer,points:f.points};else if(f.shape==="circle")C={shape:"circle",layer:f.layer,pcbX:f.x,pcbY:f.y,radius:f.radius};else{let I=0;if(f.shape==="rotated_rect")I=f.ccw_rotation;C={shape:"rect",layer:f.layer,pcbX:f.x,pcbY:f.y,width:f.width,height:f.height,pcbRotation:I}}l.push(new gin(C))}else if(f.type==="pcb_smtpad"&&f.shape==="rect")l.push(new sB({pcbX:f.x,pcbY:f.y,layer:f.layer,shape:"rect",height:f.height,width:f.width,portHints:y,rectBorderRadius:f.rect_border_radius,solderPasteMargin:x}));else if(f.type==="pcb_smtpad"&&f.shape==="circle")l.push(new sB({pcbX:f.x,pcbY:f.y,layer:f.layer,shape:"circle",radius:f.radius,portHints:y,solderPasteMargin:x}));else if(f.type==="pcb_smtpad"&&f.shape==="pill")l.push(new sB({shape:"pill",height:f.height,width:f.width,radius:f.radius,portHints:y,pcbX:f.x,pcbY:f.y,layer:f.layer,solderPasteMargin:x}));else if(f.type==="pcb_smtpad"&&f.shape==="rotated_pill")l.push(new sB({shape:"rotated_pill",height:f.height,width:f.width,radius:f.radius,portHints:y,pcbX:f.x,pcbY:f.y,layer:f.layer,ccwRotation:f.ccw_rotation,solderPasteMargin:x}));else if(f.type==="pcb_smtpad"&&f.shape==="rotated_rect")l.push(new sB({pcbX:f.x,pcbY:f.y,layer:f.layer,shape:"rotated_rect",height:f.height,width:f.width,ccwRotation:f.ccw_rotation,cornerRadius:f.corner_radius,portHints:y,solderPasteMargin:x}));else if(f.type==="pcb_smtpad"&&f.shape==="polygon"){let C=new sB({shape:"polygon",points:f.points,portHints:y,layer:f.layer,coveredWithSolderMask:f.is_covered_with_solder_mask,solderMaskMargin:f.soldermask_margin}),I=a.filter((b)=>b.type==="pcb_solder_paste"&&b.shape==="polygon"&&b.pcb_smtpad_id===f.pcb_smtpad_id);if(s||I.length>0)C._inflatedPcbSolderPaste=I;l.push(C)}else if(f.type==="pcb_silkscreen_path")l.push(new Ein({layer:f.layer,route:f.route,strokeWidth:f.stroke_width}));else if(f.type==="pcb_copper_text")l.push(new sin({text:f.text,pcbX:f.anchor_position.x,pcbY:f.anchor_position.y,pcbRotation:f.ccw_rotation,anchorAlignment:f.anchor_alignment,fontSize:f.font_size,layer:f.layer,mirrored:f.is_mirrored,knockout:f.is_knockout}));else if(f.type==="pcb_plated_hole"){if(f.shape==="circle")l.push(new rB({pcbX:f.x,pcbY:f.y,shape:"circle",holeDiameter:f.hole_diameter,outerDiameter:f.outer_diameter,portHints:y}));else if(f.shape==="circular_hole_with_rect_pad")l.push(new rB({pcbX:f.x,pcbY:f.y,shape:"circular_hole_with_rect_pad",holeDiameter:f.hole_diameter,rectPadHeight:f.rect_pad_height,rectPadWidth:f.rect_pad_width,portHints:y,rectBorderRadius:f.rect_border_radius,holeOffsetX:f.hole_offset_x,holeOffsetY:f.hole_offset_y}));else if(f.shape==="pill"||f.shape==="oval")l.push(new rB({pcbX:f.x,pcbY:f.y,shape:f.shape,holeWidth:f.hole_width,holeHeight:f.hole_height,outerWidth:f.outer_width,outerHeight:f.outer_height,portHints:y}));else if(f.shape==="pill_hole_with_rect_pad")l.push(new rB({pcbX:f.x,pcbY:f.y,shape:"pill_hole_with_rect_pad",holeShape:"pill",padShape:"rect",holeWidth:f.hole_width,holeHeight:f.hole_height,rectPadWidth:f.rect_pad_width,rectPadHeight:f.rect_pad_height,rectBorderRadius:f.rect_border_radius,portHints:y,holeOffsetX:f.hole_offset_x,holeOffsetY:f.hole_offset_y}));else if(f.shape==="rotated_pill_hole_with_rect_pad")l.push(new rB({pcbX:f.x,pcbY:f.y,shape:"pill_hole_with_rect_pad",holeShape:"pill",padShape:"rect",holeWidth:f.hole_width,holeHeight:f.hole_height,rectPadWidth:f.rect_pad_width,rectPadHeight:f.rect_pad_height,rectBorderRadius:f.rect_border_radius,portHints:y,holeOffsetX:f.hole_offset_x,holeOffsetY:f.hole_offset_y,pcbRotation:f.hole_ccw_rotation}));else if(f.shape==="hole_with_polygon_pad")l.push(new rB({pcbX:f.x,pcbY:f.y,shape:"hole_with_polygon_pad",holeShape:f.hole_shape||"circle",holeDiameter:f.hole_diameter,holeWidth:f.hole_width,holeHeight:f.hole_height,padOutline:f.pad_outline||[],holeOffsetX:f.hole_offset_x,holeOffsetY:f.hole_offset_y,portHints:y}))}else if(f.type==="pcb_keepout"&&f.shape==="circle")l.push(new xxe({warningOnly:f.warning_only,allowTraces:f.allow_traces,allowPlacements:f.allow_placements,layers:f.layers.map((C)=>bo.parse(C)),pcbX:f.center.x,pcbY:f.center.y,shape:"circle",radius:f.radius}));else if(f.type==="pcb_keepout"&&f.shape==="rect")l.push(new xxe({warningOnly:f.warning_only,allowTraces:f.allow_traces,allowPlacements:f.allow_placements,layers:f.layers.map((C)=>bo.parse(C)),pcbX:f.center.x,pcbY:f.center.y,shape:"rect",width:f.width,height:f.height}));else if(f.type==="pcb_hole"&&f.hole_shape==="circle")l.push(new gW({pcbX:f.x,pcbY:f.y,diameter:f.hole_diameter}));else if(f.type==="pcb_hole"&&f.hole_shape==="rect")l.push(new gW({pcbX:f.x,pcbY:f.y,shape:"rect",width:f.hole_width,height:f.hole_height}));else if(f.type==="pcb_hole"&&f.hole_shape==="pill")l.push(new gW({pcbX:f.x,pcbY:f.y,shape:"pill",width:f.hole_width,height:f.hole_height}));else if(f.type==="pcb_hole"&&f.hole_shape==="oval")l.push(new gW({pcbX:f.x,pcbY:f.y,shape:"oval",width:f.hole_width,height:f.hole_height}));else if(f.type==="pcb_hole"&&f.hole_shape==="rotated_pill")l.push(new gW({pcbX:f.x,pcbY:f.y,shape:"pill",width:f.hole_width,height:f.hole_height,pcbRotation:f.ccw_rotation}));else if(f.type==="pcb_cutout"){if(f.shape==="rect")l.push(new V2e({pcbX:f.center.x,pcbY:f.center.y,shape:"rect",width:f.width,height:f.height}));else if(f.shape==="circle")l.push(new V2e({pcbX:f.center.x,pcbY:f.center.y,shape:"circle",radius:f.radius}));else if(f.shape==="polygon")l.push(new V2e({shape:"polygon",points:f.points}))}else if(f.type==="pcb_silkscreen_text"){let C=bii(n,f.ccw_rotation);if((o?.includes("pinrow")||o?.includes("headermodule"))&&f.text.includes("PIN"))l.push(Iii({elm:f,pinLabels:r??i??{},layer:f.layer,readableRotation:C,anchorAlignment:f.anchor_alignment}));else{let I=t||f.text;if(o?.includes("silkscreenlabel(")&&f.text!=="{REF}"&&f.text!=="{NAME}"&&f.text!=="{REFERENCE}")I=f.text;let b=f.anchor_position.x;if(Number.isNaN(b))b=0;let P=new HUe({anchorAlignment:f.anchor_alignment||"center",text:I,pcbX:b,pcbY:f.anchor_position.y,pcbRotation:C??0});P._footprinterFontSize=f.font_size+0.2,l.push(P)}}else if(f.type==="pcb_trace"){let C=new FUe({route:f.route});for(let[I,b]of f.route.entries()){if(b.route_type!=="via")continue;if(a.some((P)=>P.type==="pcb_via"&&P.x===b.x&&P.y===b.y&&P.layers.includes(b.from_layer)&&P.layers.includes(b.to_layer)))C._materializedRouteViaIndices.add(I)}l.push(C)}else if(f.type==="pcb_via"){let C=s7.parse(f),I=f.layers??[],b=new fin({pcbX:f.x,pcbY:f.y,holeDiameter:f.hole_diameter,outerDiameter:f.outer_diameter,fromLayer:f.from_layer??I[0],toLayer:f.to_layer??I[I.length-1],layers:I,netIsAssignable:f.net_is_assignable,tentedOnTop:C.tented_on_top,tentedOnBottom:C.tented_on_bottom});b._importedPcbTraceId=f.pcb_trace_id,l.push(b)}else if(f.type==="pcb_silkscreen_rect")l.push(new Min({pcbX:f.center.x,pcbY:f.center.y,width:f.width,height:f.height,layer:f.layer,strokeWidth:f.stroke_width,filled:f.is_filled,cornerRadius:f.corner_radius}));else if(f.type==="pcb_silkscreen_circle")l.push(new Pin({pcbX:f.center.x,pcbY:f.center.y,radius:f.radius,layer:f.layer,strokeWidth:f.stroke_width}));else if(f.type==="pcb_silkscreen_line")l.push(new vin({x1:f.x1,y1:f.y1,x2:f.x2,y2:f.y2,layer:f.layer,strokeWidth:f.stroke_width}));else if(f.type==="pcb_fabrication_note_text")l.push(new hin({pcbX:f.anchor_position.x,pcbY:f.anchor_position.y,text:f.text,fontSize:f.font_size,anchorAlignment:f.anchor_alignment,color:f.color,font:f.font,layer:f.layer,pcbRotation:f.ccw_rotation}));else if(f.type==="pcb_fabrication_note_path")l.push(new din({route:f.route,strokeWidth:f.stroke_width,color:f.color,isFilled:f.is_filled,hasStroke:f.has_stroke,layer:f.layer}));else if(f.type==="pcb_fabrication_note_rect")l.push(new uin({pcbX:f.center.x,pcbY:f.center.y,width:f.width,height:f.height,strokeWidth:f.stroke_width,isFilled:f.is_filled,color:f.color,layer:f.layer,cornerRadius:f.corner_radius,hasStroke:f.has_stroke,isStrokeDashed:f.is_stroke_dashed}));else if(f.type==="pcb_note_text")l.push(new _in({pcbX:f.anchor_position.x,pcbY:f.anchor_position.y,text:f.text??"",fontSize:f.font_size,anchorAlignment:f.anchor_alignment,color:f.color,font:f.font}));else if(f.type==="pcb_note_rect")l.push(new Ain({pcbX:f.center.x,pcbY:f.center.y,width:f.width,height:f.height,strokeWidth:f.stroke_width,isFilled:f.is_filled,color:f.color,cornerRadius:f.corner_radius,hasStroke:f.has_stroke,isStrokeDashed:f.is_stroke_dashed}));else if(f.type==="pcb_note_path")l.push(new pin({route:f.route,strokeWidth:f.stroke_width,color:f.color}));else if(f.type==="pcb_note_line")l.push(new min({x1:f.x1,y1:f.y1,x2:f.x2,y2:f.y2,strokeWidth:f.stroke_width,color:f.color,isDashed:f.is_dashed}));else if(f.type==="pcb_courtyard_rect")l.push(new lin({pcbX:f.center.x,pcbY:f.center.y,width:f.width,height:f.height,pcbRotation:f.ccw_rotation,layer:f.layer}));else if(f.type==="pcb_courtyard_circle")l.push(new ain({pcbX:f.center.x,pcbY:f.center.y,radius:f.radius,layer:f.layer}));else if(f.type==="pcb_courtyard_outline")l.push(new cin({outline:f.outline,layer:f.layer}));else if(f.type==="schematic_line")_(f,new QYe({x1:f.x1,y1:f.y1,x2:f.x2,y2:f.y2,strokeWidth:cW(f.stroke_width),color:f.color,isDashed:f.is_dashed}));else if(f.type==="schematic_rect")_(f,new bin({schX:f.center.x,schY:f.center.y,width:f.width,height:f.height,rotation:f.rotation,strokeWidth:cW(f.stroke_width),color:f.color,isFilled:f.is_filled,fillColor:f.fill_color,isDashed:f.is_dashed}));else if(f.type==="schematic_circle")_(f,new Cin({center:f.center,radius:f.radius,strokeWidth:cW(f.stroke_width),color:f.color,isFilled:f.is_filled,fillColor:f.fill_color,isDashed:f.is_dashed}));else if(f.type==="schematic_arc")_(f,new xin({center:f.center,radius:f.radius,startAngleDegrees:f.start_angle_degrees,endAngleDegrees:f.end_angle_degrees,direction:f.direction,strokeWidth:cW(f.stroke_width),color:f.color,isDashed:f.is_dashed}));else if(f.type==="schematic_text")_(f,new Sin({schX:f.position.x,schY:f.position.y,text:f.text,fontSize:f.font_size,anchor:f.anchor,color:f.color,schRotation:f.rotation}));else if(f.type==="schematic_path")_(f,new Iin({points:f.points,strokeWidth:cW(f.stroke_width),strokeColor:f.stroke_color,dashLength:f.dash_length,dashGap:f.dash_gap,isFilled:f.is_filled,fillColor:f.fill_color}));else if(f.type==="schematic_port"){let C=f.schematic_component_id;if(typeof C!=="string")continue;let I=u.get(C),b=I?.schematic_symbol_id,P;if(typeof b==="string")P=d.get(b);if(P&&I?.is_box_with_pins===!0&&f.center&&f.side_of_component){let E=f.distance_from_component_edge,B=Pii(f.side_of_component);if(!B)continue;let w=Kv(B),T=-1;if(f.facing_direction===B)T=1;let Q={x:f.center.x+w.x*E*T,y:f.center.y+w.y*E*T},N=A.get(f.source_port_id),F=Array.from(new Set([f.display_pin_label,N?.name,...N?.port_hints??[]].filter((U)=>typeof U==="string"&&U.length>0))),H=f.schematic_port_id;if(f.pin_number)H=`pin${f.pin_number}`;let z=F[0]??f.source_port_id??H;P.add(new sd({pinNumber:f.pin_number,name:z,aliases:F,schX:f.center.x,schY:f.center.y,direction:B}));let Y;if(typeof b==="string")Y=cW(p.get(b));P.add(new QYe({x1:f.center.x,y1:f.center.y,x2:Q.x,y2:Q.y,strokeWidth:Y,isDashed:!1}))}}}return l};var Mii=["Silkscreen","PcbNote","Courtyard","FabricationNote"];function ACe(e){let t=1/0,n=1/0,o=-1/0,i=-1/0,r=!1;for(let c of e)if(c.isPcbPrimitive&&!Mii.some((l)=>c.componentName.startsWith(l))){let l=c._getPcbLocalBoundsBeforeLayout(),u=[{x:l.left,y:l.bottom},{x:l.right,y:l.bottom},{x:l.right,y:l.top},{x:l.left,y:l.top}].map((m)=>tt(c._computePcbGlobalTransformBeforeLayout(),m)),h=u.map((m)=>m.x),A=u.map((m)=>m.y);t=Math.min(t,...h),n=Math.min(n,...A),o=Math.max(o,...h),i=Math.max(i,...A),r=!0}else if(c.children.length>0){let l=ACe(c.children);if(l.width>0||l.height>0)t=Math.min(t,l.minX),n=Math.min(n,l.minY),o=Math.max(o,l.maxX),i=Math.max(i,l.maxY),r=!0}if(!r)return{minX:0,minY:0,maxX:0,maxY:0,width:0,height:0};let s=o-t,a=i-n;if(s<0)s=0;if(a<0)a=0;return{minX:t,minY:n,maxX:o,maxY:i,width:s,height:a}}var _Ce=(e)=>{let t=e.find((n)=>/^(pin)?\d+$/.test(n));if(!t)return null;return Number.parseInt(t.replace(/^pin/,""))};function kYe(e,t){let n=_Ce(e);if(!n)return null;let i=[...e.filter((r)=>r.toString()!==n.toString()&&r!==`pin${n}`&&r.trim()!==""),...t?.additionalAliases?.[`pin${n}`]??[]];return new sd({pinNumber:n,aliases:i})}function YT(e){if(!e)return[];if(Array.isArray(e))return e;return e.pins??[]}var win=(e)=>{for(let t of["leftSide","rightSide","topSide","bottomSide"])if(t in e&&typeof e[t]==="number")throw Error(`A number was specified for "${t}", you probably meant to use "size" not "side"`);return"leftSide"in e||"rightSide"in e||"topSide"in e||"bottomSide"in e},U2e=(e)=>{if(!e||!win(e))return[];return[...YT(e.leftSide),...YT(e.rightSide),...YT(e.topSide),...YT(e.bottomSide)]},Bii=(e)=>{if(win(e))return{leftSize:YT(e.leftSide).length,rightSize:YT(e.rightSide).length,topSize:YT(e.topSide).length,bottomSize:YT(e.bottomSide).length};let{leftSize:t=0,rightSize:n=0,topSize:o=0,bottomSize:i=0}=e;return{leftSize:t,rightSize:n,topSize:o,bottomSize:i}},Rye=0.4,Tin=0.1,iJt=0.1,wii=(e)=>typeof e==="string"?e:e?.[0]??"",Tii=(e)=>Array.from(wii(e)).length*Tin;function Din(e){let t=e;return t.leftSide!==void 0||t.rightSide!==void 0||t.topSide!==void 0||t.bottomSide!==void 0}var zUe=(e)=>{let t=e.portDistanceFromEdge??0.4,n=e.schPortArrangement?Bii(e.schPortArrangement):null,o={left:0,right:0,top:0,bottom:0},i=e.pinCount??null;if(i===null)if(n)i=n.leftSize+n.rightSize+n.topSize;else throw Error("Could not determine pin count for the schematic box");if(i&&!n){let m=Math.floor(i/2);n={leftSize:i-m,rightSize:m,topSize:0,bottomSize:0}}if(!n)n={leftSize:0,rightSize:0,topSize:0,bottomSize:0};let r=({side:m,sideIndex:p,truePinIndex:g})=>{if(!e.schPortArrangement)return g+1;if(!Din(e.schPortArrangement))return g+1;let _={left:"top-to-bottom",bottom:"left-to-right",right:"bottom-to-top",top:"right-to-left"}[m],f=e.schPortArrangement?.[`${m}Side`]?.direction??_,y=e.schPortArrangement?.[`${m}Side`]?.pins,x=p;if(f!==_)x=y.length-p-1;return eF(y[x],e.pinLabels)},s=[],a=0,c=0;for(let m=0;m<n.leftSize;m++){let p=r({side:"left",sideIndex:m,truePinIndex:c}),g=e.numericSchPinStyle?.[`pin${p}`]??e.numericSchPinStyle?.[p];if(g?.topMargin)a+=g.topMargin;if(s.push({trueIndex:p-1,pinNumber:p,side:"left",distanceFromOrthogonalEdge:a}),g?.bottomMargin)a+=g.bottomMargin;if(m!==n.leftSize-1)a+=e.schPinSpacing;else o.left=a;c++}a=0;for(let m=0;m<n.bottomSize;m++){let p=r({side:"bottom",sideIndex:m,truePinIndex:c}),g=e.numericSchPinStyle?.[`pin${p}`]??e.numericSchPinStyle?.[p];if(g?.leftMargin)a+=g.leftMargin;if(s.push({trueIndex:p-1,pinNumber:p,side:"bottom",distanceFromOrthogonalEdge:a}),g?.rightMargin)a+=g.rightMargin;if(m!==n.bottomSize-1)a+=e.schPinSpacing;else o.bottom=a;c++}a=0;for(let m=0;m<n.rightSize;m++){let p=r({side:"right",sideIndex:m,truePinIndex:c}),g=e.numericSchPinStyle?.[`pin${p}`]??e.numericSchPinStyle?.[p];if(g?.bottomMargin)a+=g.bottomMargin;if(s.push({trueIndex:p-1,pinNumber:p,side:"right",distanceFromOrthogonalEdge:a}),g?.topMargin)a+=g.topMargin;if(m!==n.rightSize-1)a+=e.schPinSpacing;else o.right=a;c++}a=0;for(let m=0;m<n.topSize;m++){let p=r({side:"top",sideIndex:m,truePinIndex:c}),g=e.numericSchPinStyle?.[`pin${p}`]??e.numericSchPinStyle?.[p];if(g?.rightMargin)a+=g.rightMargin;if(s.push({trueIndex:p-1,pinNumber:p,side:"top",distanceFromOrthogonalEdge:a}),g?.leftMargin)a+=g.leftMargin;if(m!==n.topSize-1)a+=e.schPinSpacing;else o.top=a;c++}let l=e.schWidth;if(l===void 0){if(l=Math.max(o.top+Rye,o.bottom+Rye),e.pinLabels){if(s.filter((y)=>y.side==="left"||y.side==="right").some((y)=>e.pinLabels?.[`pin${y.pinNumber}`]||e.pinLabels?.[y.pinNumber]))l=Math.max(l,0.5)}let m=e.pinLabels?Math.max(...Object.values(e.pinLabels).map((_)=>_.length*Tin)):0,p=m>0?1.1:0;l=Math.max(l,m+p);let g={left:0,right:0};for(let _ of s){if(_.side!=="left"&&_.side!=="right")continue;let f=e.pinLabels?.[`pin${_.pinNumber}`]??e.pinLabels?.[_.pinNumber];g[_.side]=Math.max(g[_.side],Tii(f))}l=Math.max(l,g.left+g.right+2*iJt)}let d=e.schHeight;if(!d)d=Math.max(o.left+Rye,o.right+Rye);if(e.pinLabels){let p=iJt,g=0.075,_=(w)=>{let T=e.pinLabels[`pin${w}`]??e.pinLabels[`${w}`];return T?T.length*0.13:0},f=s.filter((w)=>w.side==="left").map((w)=>({y:o.left/2-w.distanceFromOrthogonalEdge,len:_(w.pinNumber)})).filter((w)=>w.len>0),y=s.filter((w)=>w.side==="right").map((w)=>({y:-o.right/2+w.distanceFromOrthogonalEdge,len:_(w.pinNumber)})).filter((w)=>w.len>0),x=s.filter((w)=>w.side==="top").map((w)=>({x:o.top/2-w.distanceFromOrthogonalEdge,len:_(w.pinNumber)})).filter((w)=>w.len>0),C=s.filter((w)=>w.side==="bottom").map((w)=>({x:-o.bottom/2+w.distanceFromOrthogonalEdge,len:_(w.pinNumber)})).filter((w)=>w.len>0),I=(w,T)=>Math.min(w.maxX,T.maxX)>Math.max(w.minX,T.minX)&&Math.min(w.maxY,T.maxY)>Math.max(w.minY,T.minY),b=(w,T)=>({minX:-T/2+p,maxX:-T/2+p+w.len,minY:w.y-0.075,maxY:w.y+0.075}),P=(w,T)=>({minX:T/2-p-w.len,maxX:T/2-p,minY:w.y-0.075,maxY:w.y+0.075}),E=(w,T)=>({minX:w.x-0.075,maxX:w.x+0.075,minY:T/2-p-w.len,maxY:T/2-p}),B=(w,T)=>({minX:w.x-0.075,maxX:w.x+0.075,minY:-T/2+p,maxY:-T/2+p+w.len});if(!e.schHeight){let w=!1;for(let T of x)for(let Q of C)if(I(E(T,d),B(Q,d)))w=!0,d=Math.max(d,T.len+Q.len+2*p);if(w){for(let T of x){let Q=E(T,d);for(let N of f){let F=b(N,l);if(I(Q,F))d=Math.max(d,2*(F.maxY+p+T.len))}for(let N of y){let F=P(N,l);if(I(Q,F))d=Math.max(d,2*(F.maxY+p+T.len))}}for(let T of C){let Q=B(T,d);for(let N of f){let F=b(N,l);if(I(Q,F))d=Math.max(d,2*(p+T.len-F.minY))}for(let N of y){let F=P(N,l);if(I(Q,F))d=Math.max(d,2*(p+T.len-F.minY))}}}}}let u={left:{x:-l/2-t,y:o.left/2},bottom:{x:-o.bottom/2,y:-d/2-t},right:{x:l/2+t,y:-o.right/2},top:{x:o.top/2,y:d/2+t}},h={left:{x:0,y:-1},right:{x:0,y:1},top:{x:-1,y:0},bottom:{x:1,y:0}},A=s.map((m)=>{let{distanceFromOrthogonalEdge:p,side:g}=m,_=u[g],f=h[g];return{x:_.x+p*f.x,y:_.y+p*f.y,...m}});return{getPortPositionByPinNumber(m){let p=A.find((g)=>g.pinNumber.toString()===m.toString());if(!p)return null;return p},getSize(){return{width:l,height:d}},getSizeIncludingPins(){return{width:l+(n.leftSize||n.rightSize?0.4:0),height:d+(n.topSize||n.bottomSize?0.4:0)}},pinCount:i}},Uoe=(e,t)=>{if(!e)return;let n={};for(let[o,i]of Object.entries(e)){let r=eF(o,t),s=i.marginLeft??i.leftMargin,a=i.marginRight??i.rightMargin,c=i.marginTop??i.topMargin,l=i.marginBottom??i.bottomMargin,u={...n[`pin${r}`]??{}};if(s!==void 0)u.leftMargin=ze.parse(s);if(a!==void 0)u.rightMargin=ze.parse(a);if(c!==void 0)u.topMargin=ze.parse(c);if(l!==void 0)u.bottomMargin=ze.parse(l);n[`pin${r}`]=u}return n},Dii=(e)=>e==="schematic_symbol"||e==="schematic_component"||e==="schematic_line"||e==="schematic_rect"||e==="schematic_circle"||e==="schematic_arc"||e==="schematic_text"||e==="schematic_path",LYe=(e)=>Array.isArray(e)&&e.length>0&&e.some((t)=>Dii(t.type)),FYe=(e)=>typeof e?.x==="number"&&Number.isFinite(e.x)&&typeof e.y==="number"&&Number.isFinite(e.y),zze=(e,t)=>({x:e.x-t.x,y:e.y-t.y}),Nii=(e)=>e.type==="schematic_component"||e.type==="schematic_port"||e.type==="schematic_line"||e.type==="schematic_rect"||e.type==="schematic_circle"||e.type==="schematic_arc"||e.type==="schematic_text"||e.type==="schematic_path",Rii=(e)=>{let t=e.find((i)=>i.type==="schematic_component"&&FYe(i.center));if(t)return t.center;let n=e.filter(Nii);if(n.length===0)return null;let o=Nie(n);if(!Number.isFinite(o.minX)||!Number.isFinite(o.maxX)||!Number.isFinite(o.minY)||!Number.isFinite(o.maxY))return null;return{x:(o.minX+o.maxX)/2,y:(o.minY+o.maxY)/2}},Qii=(e,t)=>{switch(e.type){case"schematic_component":case"schematic_port":case"schematic_rect":case"schematic_circle":case"schematic_arc":return FYe(e.center)?{...e,center:zze(e.center,t)}:e;case"schematic_line":return{...e,x1:e.x1-t.x,y1:e.y1-t.y,x2:e.x2-t.x,y2:e.y2-t.y};case"schematic_text":return FYe(e.position)?{...e,position:zze(e.position,t)}:e;case"schematic_path":return{...e,points:e.points.map((n)=>zze(n,t))};default:return e}},kii=(e)=>{let t=Rii(e);if(!t)return[...e];if(t.x===0&&t.y===0)return[...e];return e.map((n)=>Qii(n,t))},rJt=(e)=>e.type==="schematic_line"||e.type==="schematic_rect"||e.type==="schematic_circle"||e.type==="schematic_arc"||e.type==="schematic_text"||e.type==="schematic_path",sJt=(e,t)=>{if(!(t in e))return;let n=e[t];return typeof n==="string"?n:void 0},Lii=(e)=>{let t=e.filter((h)=>h.type==="schematic_symbol"),n=e.filter((h)=>h.type==="schematic_component"),o=n.find((h)=>typeof h.schematic_symbol_id==="string")?.schematic_symbol_id??t[0]?.schematic_symbol_id,i=(o?n.find((h)=>h.schematic_symbol_id===o):void 0)??n[0],r=i?.schematic_component_id,s=typeof i?.source_component_id==="string"?i.source_component_id:void 0,a=(o?t.find((h)=>h.schematic_symbol_id===o):void 0)??t[0],c=new Set,l=new Set,d=[],u=(h)=>{if(!h||l.has(h))return;l.add(h),d.push(h)};u(a),u(i);for(let h of e){if(h.type!=="schematic_port")continue;if(!r||h.schematic_component_id!==r)continue;if(u(h),typeof h.source_port_id==="string")c.add(h.source_port_id)}for(let h of e){if(!rJt(h))continue;let A=sJt(h,"schematic_symbol_id"),m=sJt(h,"schematic_component_id");if(o&&A===o||r&&m===r||!o&&!r)u(h)}for(let h of e){if(h.type!=="source_port")continue;if(c.has(h.source_port_id)||s&&h.source_component_id===s)u(h)}if(d.length>0)return d;return e.filter((h)=>h.type==="schematic_symbol"||h.type==="schematic_component"||h.type==="schematic_port"||rJt(h))},kie=(e,t)=>{let n=t.split("."),o=e;for(let i of n.reverse()){if(!o||o.name!==i)return!1;o=o.parent}return!0},gCe=(e)=>{let t=e._parsedProps.cadModel,o=[...e.componentName==="AssemblyPrintedPart"?e.printedPartPlan?.referencePlanes??(t&&typeof t==="object"&&"jscad"in t?Nin.resolveReferencePlanes(t.jscad).referencePlanes:[]):[],...e.children.filter((r)=>r.componentName==="AssemblyReferenceSurface").map((r)=>r.referenceFrame)],i=new Set;for(let r of o){if(i.has(r.name))throw Error(`Part "${e.name}" has duplicate reference surface "${r.name}"`);i.add(r.name)}return o},HYe=(e)=>{let t=e.parent;while(t){if(t.componentName==="AssemblyDevice")return t;t=t.parent}return e.root.firstChild},BF=(e)=>{let t=HYe(e);return[t,...t.getDescendants()].filter((n)=>HYe(n)===t)},Gze=(e)=>e.componentName==="AssemblyMotor"||e.componentName==="AssemblyPart"||e.componentName==="AssemblyPrintedPart",GUe=(e)=>e.componentName==="AssemblyPrintedPart",Soe=(e)=>e.componentName==="AssemblyMotor",kT=()=>[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],Rin=(e)=>{let t=e[10]<0,n=t?-1:1;return{position:{x:e[12],y:e[13],z:e[14]},pcbRotation:Math.atan2(n*e[1],n*e[0])*180/Math.PI,layer:t?"bottom":"top"}},Yze=({origin:e,normal:t,xAxis:n})=>{let o=S0.vec3.cross([0,0,0],t,n);return S0.mat4.targetTo(kT(),e,S0.vec3.subtract([0,0,0],e,t),o)},Qin=(e,t)=>{if(!Soe(e)){let n=gCe(e).find((o)=>o.name===t);if(!n)throw Error(`Part "${e.name}" has no reference face "${t}"`);return n}if(t!=="backface"&&t!=="frontface")throw Error(`Motor "${e.name}" has no mounting face "${t}"; use frontface or backface`);return{name:t,origin:[0,0,t==="backface"?-e.motorModel.bodyLength:0],normal:[0,0,t==="backface"?-1:1],xAxis:[1,0,0]}},aJt=(e,t,n)=>{let o=t.lastIndexOf("."),i=t.slice(0,o),r=t.slice(o+1);if(o<1||!r)throw Error(`"${e.name}" mountedTo must name a part and face, e.g. "SPACER.board"`);let s=n.filter((c)=>kie(c,i));if(s.length!==1)throw Error(`"${e.name}" mountedTo "${t}" matched ${s.length} assembly parts; expected exactly one in the assembly device`);let a=s[0];return{part:a,face:Qin(a,r)}},Fii=(e,t)=>{let n=kT();if(GUe(e))return n;if(!Soe(e)){if(!t)throw Error(`Part "${e.name}" has no inherited placement`);if(S0.mat4.translate(n,n,[t.position.x,t.position.y,t.position.z]),S0.mat4.rotateZ(n,n,t.pcbRotation*Math.PI/180),t.layer==="bottom")S0.mat4.rotateY(n,n,Math.PI);return n}switch(e._parsedProps.shaftFacingDirection){case"x+":return S0.mat4.rotateY(n,n,Math.PI/2);case"x-":return S0.mat4.rotateY(n,n,-Math.PI/2);case"y+":return S0.mat4.rotateX(n,n,-Math.PI/2);case"y-":return S0.mat4.rotateX(n,n,Math.PI/2);case"z-":return S0.mat4.rotateY(n,n,Math.PI);default:return n}},_F=(e)=>{let t=BF(e),n=t.filter(Gze),o=new Map,i=new Map,r=new Map,s,a=(d,u=[])=>{if(u.includes(d))throw Error(`Assembly mounting cycle: ${[...u,d].map((g)=>g.name).join(" -> ")}`);let h=o.get(d);if(h)return h;let A,m=d,p=d.componentName==="AssemblyPart"?Lie(d):void 0;if(p&&Gze(p))A=[...a(p,[...u,d])],m=i.get(p);else{let g=d.componentName==="AssemblyPart"?YUe(d,[],(_)=>{let f=a(_,[...u,d]);return m=i.get(_),Rin(f)}):void 0;A=Fii(d,g)}if((Soe(d)||GUe(d))&&d._parsedProps.mountedTo){let{part:g,face:_}=aJt(d,d._parsedProps.mountedTo,n),f=a(g,[...u,d]),y=Qin(d,d._parsedProps.mountFace),x=Yze(_);S0.mat4.translate(x,x,[0,0,d._parsedProps.mountGap??0]),S0.mat4.rotateX(x,x,Math.PI);let C=S0.mat4.invert(kT(),Yze(y));A=S0.mat4.multiply(kT(),f,S0.mat4.multiply(kT(),x,C)),m=i.get(g)}return i.set(d,m),o.set(d,A),A};for(let d of n)a(d);let c=new Set(n.filter((d)=>Soe(d)&&d._parsedProps.mountedTo).map((d)=>i.get(d))),l=new Set;for(let d of t.filter((u)=>u.componentName==="Board")){if(!d._parsedProps.mountedTo)continue;let{part:u,face:h}=aJt(d,d._parsedProps.mountedTo,n),A=i.get(u);if(l.has(A))throw Error(`Assembly "${A.name}" has multiple mounted boards; only one board may determine its placement`);if(l.add(A),Soe(A)&&!["z+","z-"].includes(A._parsedProps.shaftFacingDirection??"z+"))throw Error(`Board "${d.name}" cannot mount to motor "${A.name}" facing ${A._parsedProps.shaftFacingDirection}: rotated PCB boards are not yet supported`);let m=d.root.db.pcb_board.get(d.pcb_board_id);if(!m)throw Error(`Mounted board "${d.name}" has no PCB geometry`);let p=S0.mat4.multiply(kT(),o.get(u),Yze(h));if(Math.abs(Math.abs(p[10])-1)>0.000001)throw Error(`Board "${d.name}" cannot mount to a tilted reference face; its PCB plane must remain parallel to XY`);if(c.has(A)){if(d._parsedProps.mountRotation||d._parsedProps.mountRotationAnchor)throw Error(`Board "${d.name}" mountRotation and mountRotationAnchor are not supported in a face-mounted motor assembly; set the target reference face's in-plane X direction instead`);let C=p[10]<0?"top_layer_toward_mount_face":"bottom_layer_toward_mount_face";if(d._parsedProps.mountOrientation&&d._parsedProps.mountOrientation!==C)throw Error(`Board "${d.name}" mountOrientation conflicts with its resolved mounting face`)}let g=d._computePcbGlobalTransformBeforeLayout(),_=Math.atan2(g.b,g.a)-Math.atan2(p[1],p[0]),f=S0.mat4.fromZRotation(kT(),_),y=S0.vec3.transformMat4([0,0,0],[p[12],p[13],p[14]],f),x=p[10]>0?1:-1;f[12]=m.center.x-y[0],f[13]=m.center.y-y[1],f[14]=-x*(m.thickness/2+(d._parsedProps.mountGap??0))-y[2],r.set(A,_);for(let[C,I]of o)if(i.get(C)===A)o.set(C,S0.mat4.multiply(kT(),f,I));if(e===d||Gze(e)&&i.get(e)===A)s=m.subcircuit_id}return{transforms:o,roots:i,yawByRoot:r,subcircuitId:s,motorMountRoots:c}},Hii=(e)=>{if(!BF(e).some((c)=>c.componentName==="AssemblyPrintedPart"))return;let{transforms:n,roots:o,yawByRoot:i,subcircuitId:r}=_F(e);if(![...o].some(([c,l])=>GUe(c)&&l===e))return;let s=n.get(e),a=e._parsedProps.shaftFacingDirection==="z-";return{position:{x:s[12],y:s[13],z:s[14]},pcbRotation:(i.get(e)??0)*180/Math.PI,layer:a?"bottom":"top",subcircuit_id:r}},Oii=(e)=>{let t=e._parsedProps.mountedTo;if(!t)return!1;let n=t.slice(0,t.lastIndexOf("."));return BF(e).some((o)=>(o.componentName==="AssemblyPrintedPart"||o.componentName==="AssemblyPart")&&kie(o,n))},zii=(e,t)=>{let n=e.componentName==="AssemblyScreen"?"assembly.screen":"assembly.subassembly",o=e.root?.firstChild;if(!o)throw Error(`Could not resolve ${n} "${e.name}" because the circuit has no root component`);let i=o,r=e.parent;while(r){if(r.componentName==="AssemblyDevice"){i=r;break}r=r.parent}let s=qQ(mxe(t,e),i,{adapter:mX});if(s.length!==1)throw Error(`${n} "${e.name}" connectsTo selector "${t}" matched ${s.length} components; expected exactly one`);let a=s[0];if(!a.pcb_component_id&&a.componentName!=="AssemblyScreen"&&a.componentName!=="AssemblyPart"&&a.componentName!=="AssemblySubassembly")throw Error(`${n} "${e.name}" connectsTo selector "${t}" matched ${a.getString()}, but it has no PCB component`);return a},OYe=(e)=>e.componentName==="AssemblyPart"||e.componentName==="AssemblyPrintedPart"||e.componentName==="AssemblyScreen"||e.componentName==="AssemblySubassembly",Lie=(e)=>{let t=e.parent;while(t){if(OYe(t))return t;if(t.componentName==="AssemblyDevice"||t.pcb_component_id)return;t=t.parent}return},pX=(e,t=[])=>{if(t.includes(e))throw Error(`Assembly attachment cycle: ${[...t,e].map((n)=>n.name).join(" -> ")}`);if(e.componentName==="AssemblyPrintedPart"||e.componentName==="AssemblyPart"){let n=e,{transforms:o,subcircuitId:i}=_F(n),r=o.get(n);if(n.componentName==="AssemblyPart")return{...Rin(r),worldTransform:Math.abs(Math.abs(r[10])-1)>0.000001?r:void 0,subcircuit_id:i};return{worldTransform:r,position:{x:r[12],y:r[13],z:r[14]},pcbRotation:0,layer:"top",subcircuit_id:i}}return YUe(e,t)},YUe=(e,t=[],n)=>{if(t.includes(e))throw Error(`Assembly attachment cycle: ${[...t,e].map((y)=>y.name).join(" -> ")}`);let o=[...t,e],i=e.componentName==="AssemblyScreen"?zii(e,e._parsedProps.connectsTo):Lie(e);if(!i)return{position:{x:0,y:0,z:0},pcbRotation:0,layer:"top"};if(n&&(i.componentName==="AssemblyPart"||i.componentName==="AssemblyPrintedPart"))return n(i);if(n&&OYe(i))return YUe(i,o,n);if(OYe(i))return pX(i,o);let r=e.root.db,s=r.pcb_component.get(i.pcb_component_id);if(!s)throw Error(`Assembly target "${i.name}" has no PCB component`);let a=i._getBoard();if(!a)throw Error(`Assembly target "${i.name}" is not on a board`);let l=(a.pcb_board_id?r.pcb_board.get(a.pcb_board_id):null)?.thickness??a.boardThickness,d=s.layer==="bottom"?"bottom":"top",u=d==="bottom",h=s.rotation??0,A=i instanceof $c?i._getPcbComponentInsertionAxisDirection(d,h):void 0,m=A?Math.hypot(A.x,A.y):0,p=s.cable_insertion_center??s.center,g={x:p.x-s.center.x,y:p.y-s.center.y},_=Math.hypot(g.x,g.y),f=pu(A&&m>0.000000001?Math.atan2(-A.x,A.y)*180/Math.PI:_>0.000000001?Math.atan2(-g.x,g.y)*180/Math.PI:h);return{position:{...p,z:u?-l/2:l/2},pcbRotation:f,layer:d,subcircuit_id:s.subcircuit_id}},Gii=class extends jo{isPrimitiveContainer=!0;doInitialAssignNameToUnnamedComponents(){if(Lie(this))return;super.doInitialAssignNameToUnnamedComponents()}get config(){return{componentName:"CadAssembly",zodProps:R2t}}},Yii=(e,t)=>{let n=e.replace(/\/+$/,""),o=t.replace(/^\/+/,"");return`${n}/${o}`},VUe=(e,t)=>{if(!t)return e;if(!e.startsWith("/"))return e;try{let n=new URL(t);if(n.pathname!=="/"&&e.startsWith(n.pathname))return new URL(e,n.origin).toString();return Yii(t,e)}catch(n){return e}},UUe=(e)=>{if(!e)return null;let t=e.match(/#ext=(\w+)$/);if(t)return t[1].toLowerCase();let o=e.split("?")[0].split("#")[0],i=o.split("/").pop()??o;if(!i.includes("."))return null;return i.split(".").pop()?.toLowerCase()??null},zYe=(e)=>{let t=e.replace(/#ext=\w+$/,"");switch(UUe(e)){case"obj":return{objUrl:t};case"gltf":return{gltfUrl:t};case"glb":return{glbUrl:t};case"step":case"stp":return{stepUrl:t};case"wrl":case"vrml":return{wrlUrl:t};default:return{stlUrl:t}}},kin=(e)=>{let t=Math.asin(Math.max(-1,Math.min(1,-e[2])));return(Math.abs(Math.cos(t))>0.00000001?[Math.atan2(e[6],e[10]),t,Math.atan2(e[1],e[0])]:[0,t,Math.atan2(-e[4],e[5])]).map((o)=>o===0?0:o)},bB=(e,t,n)=>{let o=mx.parse(typeof t==="string"?{}:t),i=n.layer==="bottom",r=$f.parse(o.positionOffset??{x:0,y:0,z:0}),s=_o(So(n.position.x,n.position.y),wa(n.pcbRotation*Math.PI/180),i?d7():Il()),a=tt(s,r),c=o.pcbRotationOffset??o.rotationOffset??0,l=typeof c==="number"?{x:0,y:0,z:c}:{x:Ui.parse(c.x),y:Ui.parse(c.y),z:Ui.parse(c.z)},d=(p)=>VUe(p,e.root?.platform?.projectBaseUrl),u,h;if(n.worldTransform){let p=LW.vec3.transformMat4([0,0,0],[r.x,r.y,r.z+(o.zOffsetFromSurface??0)],n.worldTransform);u={x:p[0],y:p[1],z:p[2]};let g=[...n.worldTransform];LW.mat4.rotateZ(g,g,l.z*Math.PI/180),LW.mat4.rotateY(g,g,l.y*Math.PI/180),LW.mat4.rotateX(g,g,l.x*Math.PI/180);let _=kin(g).map((f)=>f*180/Math.PI);h={x:_[0],y:_[1],z:pu(_[2])}}let A=typeof t==="string"?{footprinter_string:t}:{model_stl_url:"stlUrl"in t?d(t.stlUrl):void 0,model_obj_url:"objUrl"in t?d(t.objUrl):void 0,model_mtl_url:"mtlUrl"in t&&t.mtlUrl?d(t.mtlUrl):void 0,model_gltf_url:"gltfUrl"in t?d(t.gltfUrl):void 0,model_glb_url:"glbUrl"in t?d(t.glbUrl):void 0,model_step_url:t.stepUrl?d(t.stepUrl):void 0,model_wrl_url:"wrlUrl"in t?d(t.wrlUrl):void 0,model_jscad:"jscad"in t?t.jscad:void 0};return e.root.db.cad_component.insert({...A,position:u??{...a,z:n.position.z+(i?-1:1)*(r.z+(o.zOffsetFromSurface??0))},rotation:h??{x:l.x,y:(i?180:0)+l.y,z:pu((i?-1:1)*(n.pcbRotation+l.z))},layer:n.layer,source_component_id:e.source_component_id,color:e.componentName==="AssemblyPrintedPart"?e._parsedProps.color:void 0,subcircuit_id:n.subcircuit_id,model_origin_position:o.modelOriginPosition??{x:0,y:0,z:0},model_unit_to_mm_scale_factor:o.modelUnitToMmScale??1,model_object_fit:"contain_within_bounds",model_board_normal_direction:o.modelBoardNormalDirection,size:o.size,anchor_alignment:"center",show_as_translucent_model:o.showAsTranslucentModel??!1}).cad_component_id},Vii=(e)=>{let t=Lie(e);if(!t)return!1;if(e.root?.pcbDisabled||!t.source_component_id)return!0;let n=pX(t),o=typeof e._parsedProps==="string"?{modelUrl:e._parsedProps}:e._parsedProps;if(!o)return!0;let{pcbX:i,pcbY:r}=e.getResolvedPcbPositionProp(),a={...mx.parse({...o,positionOffset:o.positionOffset??$f.parse({x:i,y:r,z:o.pcbZ??0})}),...zYe(o.modelUrl)};return e.cad_component_id=bB(t,a,n),!0},Vze=kn([He(),Z()]),cJt=at({x:Vze,y:Vze,z:Vze}),Uii=class extends jo{doInitialAssignNameToUnnamedComponents(){if(Lie(this))return;super.doInitialAssignNameToUnnamedComponents()}get config(){return{componentName:"CadModel",zodProps:k2t}}doInitialCadModelRender(){if(Vii(this))return;let e=this._findParentWithPcbComponent();if(!e)return;if(!e.pcb_component_id)return;let{db:t}=this.root,{boardThickness:n=0}=e._getBoard()??{},o=e._getPcbCircuitJsonBounds(),i=t.pcb_component.get(e.pcb_component_id),r=this._parsedProps;if(!r||typeof r.modelUrl!=="string"&&typeof r.stepUrl!=="string")return;let s=e._computePcbGlobalTransformBeforeLayout(),c=ol(s).rotation.angle*180/Math.PI,l=r.pcbRotationOffset??r.rotationOffset,d=cJt.parse({x:0,y:0,z:0});if(typeof l==="number")d.z=Number(l);else if(typeof l==="object"){let C=cJt.parse(l);d.x=Number(C.x),d.y=Number(C.y),d.z=Number(C.z)}let{pcbX:u,pcbY:h}=this.getResolvedPcbPositionProp(),A=$f.parse({x:u,y:h,z:r.pcbZ??0,...typeof r.positionOffset==="object"?r.positionOffset:{}}),m=r.zOffsetFromSurface!==void 0?ze.parse(r.zOffsetFromSurface):0,p=e.props.layer==="bottom"?"bottom":"top",g=r.modelUrl?UUe(r.modelUrl):void 0,_=r.modelUrl?.replace(/#ext=\w+$/,""),f={};if(g==="stl")f.model_stl_url=this._addCachebustToModelUrl(_);else if(g==="obj")f.model_obj_url=this._addCachebustToModelUrl(_);else if(g==="gltf")f.model_gltf_url=this._addCachebustToModelUrl(_);else if(g==="glb")f.model_glb_url=this._addCachebustToModelUrl(_);else if(g==="step"||g==="stp")f.model_step_url=this._addCachebustToModelUrl(_);else if(g==="wrl"||g==="vrml")f.model_wrl_url=this._addCachebustToModelUrl(_);else f.model_stl_url=this._addCachebustToModelUrl(_);if(r.stepUrl){let C=this._addCachebustToModelUrl(r.stepUrl);if(C)f.model_step_url=C}let y={position:{x:o.center.x+Number(A.x),y:o.center.y+Number(A.y),z:(p==="bottom"?-n/2:n/2)+(p==="bottom"?-m:m)+Number(A.z)},rotation:xYe({layer:p,pcbCcwRotationDegrees:c,modelCcwRotationOffsetDegrees:{x:Number(d.x),y:Number(d.y),z:Number(d.z)}})};y=IYe(e,y);let x=t.cad_component.insert({...y,pcb_component_id:e.pcb_component_id,model_board_normal_direction:r.modelBoardNormalDirection,model_origin_alignment:"center_of_component_on_board_surface",anchor_alignment:"center_of_component_on_board_surface",model_origin_position:r.modelOriginPosition,size:r.size?$f.parse(r.size):void 0,source_component_id:e.source_component_id,model_unit_to_mm_scale_factor:typeof r.modelUnitToMmScale==="number"?r.modelUnitToMmScale:void 0,show_as_translucent_model:r.showAsTranslucentModel??e._parsedProps.showAsTranslucentModel,...f});this.cad_component_id=x.cad_component_id}_findParentWithPcbComponent(){let e=this.parent;while(e&&!e.pcb_component_id)e=e.parent;return e}_addCachebustToModelUrl(e){if(!e)return e;let t=this.root?.platform?.projectBaseUrl,n=VUe(e,t);if(!n.includes("modelcdn.tscircuit.com"))return n;let o=this.root?.getClientOrigin()??"";return`${n}${n.includes("?")?"&":"?"}cachebust_origin=${encodeURIComponent(o)}`}},Wii=Lin.default("tscircuit:core:footprint"),fCe=class extends jo{get config(){return{componentName:"Footprint",zodProps:Kyt}}doInitialPcbFootprintLayout(){if(this.root?.pcbDisabled)return;let e=this.children.filter((u)=>u.componentName==="Constraint");if(e.length===0)return;let{isFlipped:t}=this._getPcbPrimitiveFlippedHelpers(),n=(u)=>{if(t){if("left"in u&&"right"in u)return{...u,left:u.right,right:u.left}}return u},o=e.flatMap((u)=>u._getAllReferencedComponents().componentsWithSelectors).map(({component:u,selector:h,componentSelector:A,edge:m})=>({component:u,selector:h,componentSelector:A,edge:m,bounds:u._getPcbCircuitJsonBounds()}));if(o.some((u)=>u.edge))throw Error("edge constraints not implemented yet for footprint layout, contributions welcome!");function i(u){return o.find(({selector:h})=>h===u)}let r=new vZ,s={};function a(u){if(!(u in s))s[u]=new l8(u),r.addEditVariable(s[u],Yl.weak);return s[u]}for(let{selector:u,bounds:h}of o){let A=a(`${u}_x`),m=a(`${u}_y`);r.suggestValue(A,h.center.x),r.suggestValue(m,h.center.y)}for(let u of e){let h=u._parsedProps;if("xDist"in h){let{xDist:A,left:m,right:p,edgeToEdge:g,centerToCenter:_}=n(h),f=a(`${m}_x`),y=a(`${p}_x`),x=i(m)?.bounds,C=i(p)?.bounds;if(_){let I=new Id(y,[-1,f]);r.addConstraint(new RA(I,_0.Eq,h.xDist,Yl.required))}else if(g){let I=new Id(y,-C.width/2,[-1,f],-x.width/2);r.addConstraint(new RA(I,_0.Eq,h.xDist,Yl.required))}}else if("yDist"in h){let{yDist:A,top:m,bottom:p,edgeToEdge:g,centerToCenter:_}=h,f=a(`${m}_y`),y=a(`${p}_y`),x=i(m)?.bounds,C=i(p)?.bounds;if(_){let I=new Id(f,[-1,y]);r.addConstraint(new RA(I,_0.Eq,h.yDist,Yl.required))}else if(g){let I=new Id(f,x.height/2,[-1,y],-C.height/2);r.addConstraint(new RA(I,_0.Eq,h.yDist,Yl.required))}}else if("sameY"in h){let{for:A}=h;if(A.length<2)continue;let m=A.map((g)=>a(`${g}_y`)),p=new Id(...m.slice(1));r.addConstraint(new RA(p,_0.Eq,m[0],Yl.required))}else if("sameX"in h){let{for:A}=h;if(A.length<2)continue;let m=A.map((g)=>a(`${g}_x`)),p=new Id(...m.slice(1));r.addConstraint(new RA(p,_0.Eq,m[0],Yl.required))}}if(r.updateVariables(),Wii.enabled)console.log("Solution to layout constraints:"),console.table(Object.entries(s).map(([u,h])=>({var:u,val:h.value()})));let c={left:1/0,right:-1/0,top:-1/0,bottom:1/0};for(let{selector:u,bounds:{width:h,height:A}}of o){let m=a(`${u}_x`),p=a(`${u}_y`),g=m.value()-h/2,_=m.value()+h/2,f=p.value()+A/2,y=p.value()-A/2;c.left=Math.min(c.left,g),c.right=Math.max(c.right,_),c.top=Math.max(c.top,f),c.bottom=Math.min(c.bottom,y)}let l={x:-(c.right+c.left)/2,y:-(c.top+c.bottom)/2},d=this.getPrimitiveContainer()._getGlobalPcbPositionBeforeLayout();l.x+=d.x,l.y+=d.y;for(let{component:u,selector:h}of o){let A=a(`${h}_x`),m=a(`${h}_y`);u._setPositionFromLayout({x:A.value()+l.x,y:m.value()+l.y})}}},Xii=(e)=>{let{db:t}=e.root;if(e.pcb_component_id){let n=t.pcb_component.get(e.pcb_component_id);if(!n)return null;return{width:n.width,height:n.height}}if(e.pcb_group_id){let n=t.pcb_group.get(e.pcb_group_id);if(!n)return null;if(n.outline&&n.outline.length>0){let o=ws(n.outline);if(!o)return null;return{width:o.maxX-o.minX,height:o.maxY-o.minY}}return{width:n.width??0,height:n.height??0}}return null},Kii=(e,t)=>{let{db:n}=e.root,o=n.toArray();if(e.pcb_component_id){lle(o,e.pcb_component_id,t);return}if(e.source_group_id){dle(o,e.source_group_id,t);return}throw Error(`Cannot reposition component ${e.getString()}: no pcb_component_id or source_group_id`)},jii="MARKED INTERNALLY CONNECTED",qii=0.12,Jii=0.05,lJt=0.12,$ii=(e)=>{let{db:t}=e.root,n={pcb_component_id:e.pcb_component_id};return t.pcb_fabrication_note_text.list(n).length>0||t.pcb_fabrication_note_path.list(n).length>0||t.pcb_fabrication_note_rect.list(n).length>0||t.pcb_fabrication_note_dimension.list(n).length>0},Zii=(e)=>{let t={from:e[0],to:e[1],length:-1/0};for(let s=1;s<e.length;s++){let a=e[s-1],c=e[s],l=Math.hypot(c.x-a.x,c.y-a.y);if(l>t.length)t={from:a,to:c,length:l}}let n=t.to.x-t.from.x,o=t.to.y-t.from.y,i=Math.max(t.length,Number.EPSILON),r=Math.atan2(o,n)*180/Math.PI;if(r>90)r-=180;if(r<-90)r+=180;return{anchorPosition:{x:(t.from.x+t.to.x)/2-o/i*lJt,y:(t.from.y+t.to.y)/2+n/i*lJt},ccwRotation:(r%360+360)%360}},eri=(e)=>{let t=e.root;if(!t||t.pcbDisabled||!e.pcb_component_id)return;if(e.componentName==="SolderJumper")return;if(e._getPrimaryPinCount()>=6)return;if($ii(e))return;let{db:n}=t,o=n.pcb_component.get(e.pcb_component_id);if(!o)return;let i=o.layer;if(i!=="top"&&i!=="bottom")return;let r=e.getSubcircuit()?.subcircuit_id??void 0,s=e.getGroup()?.pcb_group_id??void 0;for(let a of e._getInternallyConnectedPins()){let c=a.flatMap((h)=>{if(!h?.pcb_port_id)return[];let A=n.pcb_port.get(h.pcb_port_id);return A?[{x:A.x,y:A.y}]:[]}),l=c.filter((h,A)=>c.findIndex((m)=>m.x===h.x&&m.y===h.y)===A);if(l.length<2)continue;let{anchorPosition:d,ccwRotation:u}=Zii(l);n.pcb_fabrication_note_path.insert({pcb_component_id:e.pcb_component_id,subcircuit_id:r,layer:i,route:l,stroke_width:Jii}),n.pcb_fabrication_note_text.insert({pcb_component_id:e.pcb_component_id,pcb_group_id:s,subcircuit_id:r,font:"tscircuit2024",font_size:qii,text:jii,ccw_rotation:u,layer:i,anchor_position:d,anchor_alignment:"center"})}},tri={simple_ammeter:["A"],simple_battery:["B","BT"],simple_capacitor:["C"],simple_chip:["U","IC"],simple_connector:["J","P","CONN"],simple_crystal:["Y","X"],simple_current_source:["I","IS"],simple_diode:["D"],simple_fuse:["F"],simple_inductor:["L","FB"],simple_interconnect:["ICN"],simple_led:["D","LED"],simple_mosfet:["Q"],simple_op_amp:["U","IC"],simple_pin_header:["J","P","JP"],simple_pinout:["J","P"],simple_potentiometer:["RV","RP"],simple_power_source:["B","BT","V","VS"],simple_push_button:["SW","S"],simple_resistor:["R"],simple_resonator:["Y","X"],simple_switch:["SW","S"],simple_test_point:["TP"],simple_transistor:["Q"],simple_voltage_probe:["VP"],simple_voltage_source:["V","VS"]},Fin=(e)=>{if(!e)return;return tri[e]},nri=(e)=>e.match(/^[A-Za-z]+/)?.[0]?.toUpperCase(),ori=[{prefix:"J",recommendation:"a <connector /> or <jumper />"},{prefix:"Q",recommendation:"a <transistor />"},{prefix:"C",recommendation:"a <capacitor />"},{prefix:"R",recommendation:"a <resistor />"},{prefix:"L",recommendation:"an <inductor />"},{prefix:"Y",recommendation:"a <crystal />"},{prefix:"X",recommendation:"a <crystal />"},{prefix:"F",recommendation:"a <fuse />"},{prefix:"S",recommendation:"a <switch /> or <pushbutton />"},{prefix:"TP",recommendation:"a <testpoint />"}],iri=(e)=>{let{db:t}=e.root;if(!e.source_component_id)return;let n=t.source_component.get(e.source_component_id);if(!n?.name||!n.ftype)return;let o=nri(n.name),i=e.componentName==="Chip"&&n.ftype==="simple_chip"&&o!==void 0?ori.find(({prefix:c})=>o.startsWith(c)):void 0,r=e.getRefDesPrefixes()??(i?Fin("simple_chip"):void 0);if(!r||r.length===0)return;if(o&&r.some((c)=>o===c||o.startsWith(c)))return;let s=r.length===1?r[0]:`one of ${r.join(", ")}`,a=i?`The "${i.prefix}" prefix is being used with a <chip />, try using it with ${i.recommendation}`:`Component ${n.name} has ftype="${n.ftype}" but reference designator should start with ${s}`;t.insert({type:"source_refdes_convention_warning",warning_type:"source_refdes_convention_warning",message:a,source_component_id:n.source_component_id,refdes:n.name,source_component_ftype:n.ftype,expected_prefixes:r,actual_prefix:o,subcircuit_id:n.subcircuit_id})},dJt=new WeakMap,rri=(e)=>{let t=dJt.get(e);if(t)return t;let n=new Map;return dJt.set(e,n),n},sri=new Set(["a","anode","pos","positive","+"]),ari=new Set(["c","k","cathode","neg","negative","-"]),Hin=(e)=>e.toLowerCase().replace(/[^a-z0-9+-]/g,""),Oin=(e,t)=>{let n=e.filter((o)=>o.type==="source_port"&&(!t||o.source_component_id===t));return n.find((o)=>o.pin_number===1)??n.find((o)=>[o.name,...o.port_hints??[]].map(Hin).includes("pin1"))??null},zin=(e)=>{if(!e)return null;let t=[e.name,...e.port_hints??[]].map(Hin),n=t.some((i)=>sri.has(i)),o=t.some((i)=>ari.has(i));if(n===o)return null;return n?"anode":"cathode"},cri=(e)=>{if(!e)return[];let t=[];for(let n of Object.keys(e)){let o=e[n]?.[0];if(o)t.push({supplierName:n,supplierPartNumber:o})}return t},lri=(e)=>{if(typeof e!=="string")return null;let t=e.match(/(?:^|_)pin1location\((leftside|rightside|topside|bottomside),(left|right|top|bottom)\)(?:_|$)/i);if(!t)return null;let n=uz.safeParse(`${t[1].toLowerCase()}_${t[2].toLowerCase()}`);return n.success?n.data:null},dri=({component:e,pcbComponent:t,pcbElements:n})=>{let o=-t.rotation*Math.PI/180,i=Math.cos(o),r=Math.sin(o),s=boe({componentLayer:t.layer,originalLayer:e._getFootprintOriginalLayer()}),a=(c)=>{let l=c.x-t.center.x,d=c.y-t.center.y,u=s?-d:d;return{x:l*i-u*r,y:l*r+u*i}};return n.map((c)=>{let l=structuredClone(c);if(typeof l.x==="number"&&typeof l.y==="number"){let d=a(l);l.x=d.x,l.y=d.y}if(l.points)l.points=l.points.map(a);return l})},uri=({supplierName:e,supplierPartNumber:t})=>`part-orientation-analysis:v4:${e}:${t}`,hri=async({cacheKey:e,component:t})=>{let n=await t.root?.platform?.localCacheEngine?.getItem(e);if(!n)return{cacheHit:!1};try{let o=JSON.parse(n),i=uz.safeParse(o.pin1_location),r=o.pin1_location===null?null:i.success?i.data:void 0,s=o.pin1_polarity===null||o.pin1_polarity==="anode"||o.pin1_polarity==="cathode"?o.pin1_polarity:void 0;if(r===void 0||s===void 0)return{cacheHit:!1};return{cacheHit:!0,analysis:{pin1Location:r,pin1Polarity:s}}}catch{return{cacheHit:!1}}},mri=async({component:e,partsEngine:t,supplierPartCandidate:n})=>{let o=uri(n),i=await hri({cacheKey:o,component:e});if(i.cacheHit)return i.analysis;let r=rri(t),s=r.get(o);if(s)return s;let a=(async()=>{let c=await Promise.resolve(Non(t.fetchPartCircuitJson,{supplierPartNumber:n.supplierPartNumber,platformFetch:e.root?.platform?.platformFetch}));if(!c?.length)return{pin1Location:null,pin1Polarity:null};let l=FEe(c),d=zin(Oin(c));try{await e.root?.platform?.localCacheEngine?.setItem(o,JSON.stringify({pin1_location:l,pin1_polarity:d}))}catch{}return{pin1Location:l,pin1Polarity:d}})().finally(()=>{r.delete(o)});return r.set(o,a),a},pri=(e)=>{if(!e.root)return;if(e.root.platform?.enablePartOrientationAnalysis===!1)return;if(e.root.pcbDisabled||e.props.doNotPlace)return;if(!e.pcb_component_id)return;let{db:t}=e.root,n=t.pcb_component.get(e.pcb_component_id);if(!n)return;let o=[...t.pcb_smtpad.list({pcb_component_id:e.pcb_component_id}),...t.pcb_plated_hole.list({pcb_component_id:e.pcb_component_id})];if(o.length===0)return;let i=lri(e.resolveFootprint())??FEe(dri({component:e,pcbComponent:n,pcbElements:o}));if(i)t.pcb_component.update(e.pcb_component_id,{pin1_location:i});if(e.getInheritedProperty("bomDisabled"))return;if(e.getInheritedProperty("partsEngineDisabled"))return;let r=e.getInheritedProperty("partsEngine");if(!r?.fetchPartCircuitJson)return;let s=t.source_component.get(e.source_component_id),c=s?.ftype==="simple_diode"||s?.ftype==="simple_led"?Oin(t.source_port.list(),e.source_component_id??void 0):null,l=zin(c),d=cri(s?.supplier_part_numbers);if(d.length===0)return;if(e._hasStartedPartOrientationAnalysis)return;e._hasStartedPartOrientationAnalysis=!0,e._queueAsyncEffect("analyze-part-orientation",async()=>{let u={};for(let h of d)try{let{pin1Location:A,pin1Polarity:m}=await mri({component:e,partsEngine:r,supplierPartCandidate:h});if(A)u[h.supplierName]=A;if(l&&m&&l!==m){let p=EM.parse({type:"source_component_misconfigured_error",error_type:"source_component_misconfigured_error",message:`${e.getString()} maps pin 1 to the ${l}, but supplier part ${h.supplierName}:${h.supplierPartNumber} maps pin 1 to the ${m}. Update pinLabels or use a supplier part with matching diode polarity.`,source_component_ids:[e.source_component_id],source_port_ids:c?.source_port_id?[c.source_port_id]:void 0});e.root.db.source_component_misconfigured_error.insert(p)}}catch{}e._asyncSupplierPin1LocationMap=u,e._markDirty("PartOrientationAnalysis")})},Ari=(e)=>{let t=e._asyncSupplierPin1LocationMap;if(!t||!e.pcb_component_id)return;let{db:n}=e.root,o=n.pcb_component.get(e.pcb_component_id);if(!o||Object.keys(t).length===0)return;n.pcb_component.update(e.pcb_component_id,{supplier_pin1_location_map:{...o.supplier_pin1_location_map,...t}})};function _ri(e){if(e.root?.pcbDisabled)return;if(!e.pcb_component_id)return;let{pcbX:t,pcbY:n}=e._parsedProps,o=e.props?.pcbPositionAnchor;if(!o)return;if(t===void 0&&n===void 0)return;let i=ACe(e.children);if(i.width===0||i.height===0)return;let s={...{x:(i.minX+i.maxX)/2,y:(i.minY+i.maxY)/2}},a=null;if(new Set(["center","top_left","top_center","top_right","center_left","center_right","bottom_left","bottom_center","bottom_right"]).has(o)){let d={left:i.minX,right:i.maxX,top:i.minY,bottom:i.maxY};switch(o){case"center":a=s;break;case"top_left":a={x:d.left,y:d.top};break;case"top_center":a={x:s.x,y:d.top};break;case"top_right":a={x:d.right,y:d.top};break;case"center_left":a={x:d.left,y:s.y};break;case"center_right":a={x:d.right,y:s.y};break;case"bottom_left":a={x:d.left,y:d.bottom};break;case"bottom_center":a={x:s.x,y:d.bottom};break;case"bottom_right":a={x:d.right,y:d.bottom};break}}else try{let d=e.portMap[o];if(d)a=d._getGlobalPcbPositionBeforeLayout()}catch{}if(!a)return;let l={...s};if(t!==void 0)l.x+=t-a.x;if(n!==void 0)l.y+=n-a.y;if(Math.abs(l.x-s.x)>0.000001||Math.abs(l.y-s.y)>0.000001)e._repositionOnPcb(l)}var Gin=(e)=>{let t=e.find((i)=>i.type==="cad_component");if(!t)return;let n={stlUrl:t.model_stl_url,objUrl:t.model_obj_url,gltfUrl:t.model_gltf_url,glbUrl:t.model_glb_url,stepUrl:t.model_step_url,wrlUrl:t.model_wrl_url,modelOriginPosition:t.model_origin_position??void 0,modelUnitToMmScale:t.model_unit_to_mm_scale_factor,modelBoardNormalDirection:t.model_board_normal_direction,size:t.size??void 0,rotationOffset:t.rotation??void 0,positionOffset:t.position??void 0,showAsTranslucentModel:t.show_as_translucent_model};if(!n.stlUrl&&!n.objUrl&&!n.gltfUrl&&!n.glbUrl&&!n.stepUrl&&!n.wrlUrl&&!t.model_jscad)return;if(t.model_jscad&&typeof t.model_jscad==="object")n.jscad=t.model_jscad;let o=FQ.safeParse(n);return o.success?o.data:void 0},gri=Yin.default("tscircuit:core:resolveStaticFileImport");async function Vin(e,t){if(!e)return e;let n=e.startsWith("./")?e.slice(1):e,o=t?.resolveProjectStaticFileImportUrl;if(o&&(e.startsWith("/")||e.startsWith("./")))try{let i=await o(n);if(i)return i}catch(i){gri("failed to resolve static file via platform resolver",i)}return VUe(n,t?.projectBaseUrl)}var ZT=(e)=>e.startsWith("blob:"),eD=(e)=>e.startsWith("http://")||e.startsWith("https://"),Poe=(e)=>e.startsWith("/")||e.startsWith("./"),vW=(e)=>{if(eD(e)||ZT(e))return null;let t=e.indexOf(":");if(t<=0)return null;let n=e.slice(0,t),o=e.slice(t+1);if(!n||!o)return null;return{footprintLib:n,footprintName:o}},fri=o6.shape.supplierPartNumbers.unwrap().keySchema.options,yri=(e)=>e.componentName==="Symbol"||e.isSchematicPrimitive,xri=(e,t,n)=>{if(e.getInheritedProperty("partsEngineDisabled"))return;let o=e.props.supplierPartNumbers,i=fri.find((c)=>c===t);if(!i)return;if(!o?.[i]?.includes(n))return;let a=e.getInheritedProperty("partsEngine")?.fetchPartCircuitJson;if(!a)return;return async(c)=>({footprintCircuitJson:await vUe({fetchPartCircuitJson:a,supplierPartNumber:c,manufacturerPartNumber:qi(e.props)},e)??[]})},Cri=async(e,t,n)=>{if(!e)throw Error(`No footprint resolver is configured for library "${t}".`);return e(n)};function Iri(e,t){let n=e.resolveFootprint();if(!n)return;let{pcbRotation:o,pcbPinLabels:i}=e.props,r=e._resolvePinLabels(),s=UUe(String(n)),a=s?e.root?.platform?.footprintFileParserMap?.[s]:null;if(typeof n==="string"&&(eD(n)||ZT(n)||Poe(n))&&a){if(e._hasStartedFootprintUrlLoad)return;e._hasStartedFootprintUrlLoad=!0,t("load-footprint-from-platform-file-parser",async()=>{let c=eD(n)||ZT(n)?n:await Vin(n,e.root?.platform);try{let l=await a.loadFromUrl(c),d=hB({sourcePortOwner:e,componentName:e.name,componentRotation:o,footprinterString:c,pinLabels:r,pcbPinLabels:i},l.footprintCircuitJson);e.addAll(d);for(let u of e.children)if(u.componentName==="Port")u._markDirty("PcbPortRender");e._markDirty("ResolveFootprintPinLabels"),e._markDirty("InitializePortsFromChildren")}catch(l){let d=e.root?.db;if(d&&e.source_component_id&&e.pcb_component_id){let u=e.getSubcircuit(),h=`${e.getString()} failed to load footprint "${c}": `+(l instanceof Error?l.message:String(l)),A=Az.parse({type:"external_footprint_load_error",message:h,pcb_component_id:e.pcb_component_id,source_component_id:e.source_component_id,subcircuit_id:u.subcircuit_id??void 0,pcb_group_id:e.getGroup()?.pcb_group_id??void 0,footprinter_string:c});d.external_footprint_load_error.insert(A)}throw l}});return}if(typeof n==="string"&&eD(n)){if(e._hasStartedFootprintUrlLoad)return;e._hasStartedFootprintUrlLoad=!0;let c=n;t("load-footprint-url",async()=>{try{let l=await fetch(c);if(!l.ok)throw Error(`Failed to fetch footprint: ${l.status}`);let d=await l.json(),u=hB({sourcePortOwner:e,componentName:e.name,componentRotation:o,footprinterString:c,pinLabels:r,pcbPinLabels:i},d);e.addAll(u),e._markDirty("ResolveFootprintPinLabels"),e._markDirty("InitializePortsFromChildren")}catch(l){let d=e.root?.db;if(d&&e.source_component_id&&e.pcb_component_id){let u=e.getSubcircuit(),h=`${e.getString()} failed to load external footprint "${c}": `+(l instanceof Error?l.message:String(l)),A=Az.parse({type:"external_footprint_load_error",message:h,pcb_component_id:e.pcb_component_id,source_component_id:e.source_component_id,subcircuit_id:u.subcircuit_id??void 0,pcb_group_id:e.getGroup()?.pcb_group_id??void 0,footprinter_string:c});d.external_footprint_load_error.insert(A)}throw l}});return}if(typeof n==="string"&&ZT(n))return;if(typeof n==="string"){let c=vW(n);if(!c)return;if(e._hasStartedFootprintUrlLoad)return;e._hasStartedFootprintUrlLoad=!0;let d=e.root?.platform?.footprintLibraryMap?.[c.footprintLib],u=typeof d==="function"?d:void 0,h=xri(e,c.footprintLib,c.footprintName),A=u??h;t("load-lib-footprint",async()=>{try{let m=await Cri(A,c.footprintLib,c.footprintName),p=null;if(Array.isArray(m))p=m;else if(Array.isArray(m.footprintCircuitJson))p=m.footprintCircuitJson;if(!p||p.length===0)throw Error(`Footprint resolver returned no circuit elements for "${n}".`);let g=hB({sourcePortOwner:e,componentName:e.name,componentRotation:o,footprinterString:n,pinLabels:r,pcbPinLabels:i},p),_=new fCe({src:n}),f=[];for(let y of g)if(yri(y))f.push(y);else _.add(y);e.add(_),e.addAll(f),e._asyncFootprintCadModel=!Array.isArray(m)&&m.cadModel||Gin(p);for(let y of e.children)if(y.componentName==="Port")y._markDirty?.("PcbPortRender");e._markDirty("ResolveFootprintPinLabels"),e._markDirty("InitializePortsFromChildren")}catch(m){let p=e.root?.db;if(p&&e.source_component_id&&e.pcb_component_id){let g=e.getSubcircuit(),_=`${e.getString()} failed to load external footprint "${n}": `+(m instanceof Error?m.message:String(m)),f=Az.parse({type:"external_footprint_load_error",message:_,pcb_component_id:e.pcb_component_id,source_component_id:e.source_component_id,subcircuit_id:g.subcircuit_id??void 0,pcb_group_id:e.getGroup()?.pcb_group_id??void 0,footprinter_string:n});p.external_footprint_load_error.insert(f)}throw m}});return}if(!GYe.isValidElement(n)&&n.componentName==="Footprint")e.add(n);if(Array.isArray(n)&&!GYe.isValidElement(n)&&n.length>0){try{let c=hB({sourcePortOwner:e,componentName:e.name,componentRotation:o,footprinterString:"",pinLabels:r,pcbPinLabels:i},n);e.addAll(c)}catch(c){let l=e.root?.db;if(l&&e.source_component_id&&e.pcb_component_id){let d=e.getSubcircuit(),u=`${e.getString()} failed to load json footprint: `+(c instanceof Error?c.message:String(c)),h=Rce.parse({type:"circuit_json_footprint_load_error",message:u,pcb_component_id:e.pcb_component_id,source_component_id:e.source_component_id,subcircuit_id:d.subcircuit_id??void 0,pcb_group_id:e.getGroup()?.pcb_group_id??void 0});l.circuit_json_footprint_load_error.insert(h)}throw c}return}}function bri(e){let t=e._impliedFootprintPinLabels??{},n={},o=e.getPortsFromFootprint({allowImplicitPinNumbers:!e._parsedProps.pinLabels});for(let r of o){let s=r._parsedProps.pinNumber;if(s===void 0)continue;let a=new Set([`pin${s}`,`${s}`]),c=r.getNameAndAliases().filter((l)=>!a.has(l));if(c.length>0)n[`pin${s}`]=c}let i={...n};for(let[r,s]of Object.entries(t))i[r]=Array.isArray(s)?s:[s];if(e._impliedFootprintPinLabels=i,Object.keys(e._impliedFootprintPinLabels).length===0)return;for(let r of e.children){if(r.componentName!=="Port")continue;let s=r,a=s._parsedProps.pinNumber;if(a===void 0)continue;let c=`pin${a}`,l=e._impliedFootprintPinLabels[c];if(!l)continue;let d=Array.isArray(l)?l:[l],u=s.getNameAndAliases();for(let h of d)if(!u.includes(h))s.externallyAddedAliases.push(h)}}function Sri(e){if(e.root?.schematicDisabled)return;if(e.getCollapsedSchematicBoxAncestor())return;if(e._parsedProps?.noSchematicRepresentation===!0)return;let{db:t}=e.root;if(e._invalidPinLabelMessages?.length&&e.root?.db)for(let a of e._invalidPinLabelMessages){let c="pinLabels",l=a.match(/^Invalid pin label:\s*([^=]+)=\s*'([^']+)'/);if(l)c=`pinLabels['${l[2]}']`;e.root.db.source_property_ignored_warning.insert({source_component_id:e.source_component_id,property_name:c,message:a,error_type:"source_property_ignored_warning"})}if(e._parsedProps.schPinSpacing!==void 0&&e.root?.db)e.root.db.source_property_ignored_warning.insert({source_component_id:e.source_component_id,property_name:"schPinSpacing",error_type:"source_property_ignored_warning",message:"schPinSpacing is deprecated and will be ignored. Pin spacing is always 0.2."});let{schematicSymbolName:n}=e.config,{_parsedProps:o}=e,i=e.children.some((a)=>a.componentName==="Symbol");if(o.symbol&&Uin.isValidElement(o.symbol)||i)e._doInitialSchematicComponentRenderWithReactSymbol(o.symbol);else if(n)e._doInitialSchematicComponentRenderWithSymbol();else{let a=e._getSchematicBoxDimensions();if(a)e._doInitialSchematicComponentRenderWithSchematicBoxDimensions(a)}let r=e.getSubcircuit()?._getSchematicManualPlacementForComponent(e);if(e.schematic_component_id&&(e.props.schX!==void 0||e.props.schY!==void 0)&&!!r){if(!e.schematic_component_id)return;let a=vce.parse({type:"schematic_manual_edit_conflict_warning",schematic_manual_edit_conflict_warning_id:`schematic_manual_edit_conflict_${e.source_component_id}`,message:`${e.getString()} has both manual placement and prop coordinates. schX and schY will be used. Remove schX/schY or clear the manual placement.`,schematic_component_id:e.schematic_component_id,source_component_id:e.source_component_id,subcircuit_id:e.getSubcircuit()?.subcircuit_id});t.schematic_manual_edit_conflict_warning.insert(a)}let s=e._parsedProps?.schSheetName??e.props.schSheetName;if(s&&e.source_component_id&&!e._resolveSchematicSheetId())t.source_property_ignored_warning.insert({source_component_id:e.source_component_id,property_name:"schSheetName",error_type:"source_property_ignored_warning",subcircuit_id:e.getSubcircuit()?.subcircuit_id??void 0,message:`${e.getString()} references schSheetName "${s}", which does not match any schematic sheet and will be ignored.`})}function Pri(e){let t=e.font_size,n=e.text.length*t*0.6,o=t,i=e.anchor_alignment||"center",r=e.anchor_position.x,s=e.anchor_position.y;switch(i){case"top_left":r=e.anchor_position.x+n/2,s=e.anchor_position.y+o/2;break;case"top_center":r=e.anchor_position.x,s=e.anchor_position.y+o/2;break;case"top_right":r=e.anchor_position.x-n/2,s=e.anchor_position.y+o/2;break;case"center_left":r=e.anchor_position.x+n/2,s=e.anchor_position.y;break;case"center":r=e.anchor_position.x,s=e.anchor_position.y;break;case"center_right":r=e.anchor_position.x-n/2,s=e.anchor_position.y;break;case"bottom_left":r=e.anchor_position.x+n/2,s=e.anchor_position.y-o/2;break;case"bottom_center":r=e.anchor_position.x,s=e.anchor_position.y-o/2;break;case"bottom_right":r=e.anchor_position.x-n/2,s=e.anchor_position.y-o/2;break;default:r=e.anchor_position.x,s=e.anchor_position.y;break}return{x:r-n/2,y:s-o/2,width:n,height:o}}function vri(e){if(!e._adjustSilkscreenTextAutomatically)return;if(e.root?.pcbDisabled||!e.pcb_component_id)return;let{db:t}=e.root,o=e._getPcbCircuitJsonBounds().center,i=t.pcb_silkscreen_text.list({pcb_component_id:e.pcb_component_id}).filter((c)=>c.text===e.name);if(i.length===0)return;let a=e.getSubcircuit().selectAll("[_isNormalComponent=true]").filter((c)=>c!==e&&c.pcb_component_id).map((c)=>{let l=c._getPcbCircuitJsonBounds(),d={center:l.center,width:l.width,height:l.height};return O7(d)});for(let c of i){let l=c.anchor_position,d=Pri(c),u={center:{x:d.x+d.width/2,y:d.y+d.height/2},width:d.width,height:d.height},h=O7(u);if(!a.some((y)=>h0(h,y)))continue;let m=2*o.x-l.x,p=2*o.y-l.y,g={center:{x:m,y:p},width:d.width,height:d.height},_=O7(g);if(!a.some((y)=>h0(_,y)))t.pcb_silkscreen_text.update(c.pcb_silkscreen_text_id,{anchor_position:{x:m,y:p}})}}var Eri=(e)=>{if(e.root?.platform?.drcChecksDisabled??e.getInheritedProperty("drcChecksDisabled"))return;let{db:n}=e.root;if(!e.source_component_id)return;let o=e.selectAll("port"),i=n.source_trace.list(),r=new Set;for(let a of i)for(let c of a.connected_source_port_ids)r.add(c);let s=e._getInternallyConnectedPins();for(let a of s)if(a.some((c)=>c.source_port_id&&r.has(c.source_port_id))){for(let c of a)if(c.source_port_id)r.add(c.source_port_id)}for(let a of o){if(!a.source_port_id)continue;if(!Mri(e,a))continue;if(n.source_port.get(a.source_port_id)?.do_not_connect)continue;if(r.has(a.source_port_id))continue;n.source_pin_missing_trace_warning.insert({message:`Port ${a.getNameAndAliases()[0]} on ${e.props.name} is missing a trace`,source_component_id:e.source_component_id,source_port_id:a.source_port_id,subcircuit_id:e.getSubcircuit().subcircuit_id??void 0,warning_type:"source_pin_missing_trace_warning"})}},Mri=(e,t)=>{if(e.config.componentName==="Interconnect")return!1;if(e.config.componentName==="Chip"){let n=e.props.pinAttributes;if(!n)return!1;for(let o of t.getNameAndAliases()){let i=n[o];if(i?.requiresPower||i?.requiresGround||i?.requiresVoltage!==void 0)return!0}return!1}return!0},Bri=(e)=>{let t=e.root?.platform?.drcChecksDisabled??e.getInheritedProperty("drcChecksDisabled"),{db:n}=e.root;if(!e.source_component_id)return;let o=n.source_component.get(e.source_component_id);if(!o)return;let i=n.source_missing_manufacturer_part_number_warning.getWhere({source_component_id:e.source_component_id}),r=Object.values(o.supplier_part_numbers??{}).some((a)=>a?.some((c)=>c.trim()));if(t||e.props.doNotPlace||o.ftype==="simple_resistor"||o.ftype==="simple_capacitor"||o.ftype==="simple_inductor"||o.manufacturer_part_number?.trim()||r){if(i)n.source_missing_manufacturer_part_number_warning.delete(i.source_missing_manufacturer_part_number_warning_id);return}if(i)return;let s=o.ftype==="simple_connector"?o.standard:void 0;n.source_missing_manufacturer_part_number_warning.insert({source_component_id:e.source_component_id,subcircuit_id:e.getSubcircuit()?.subcircuit_id??void 0,standard:s,warning_type:"source_missing_manufacturer_part_number_warning",message:`${e.getString()} is missing a manufacturer part number and could not be resolved to a supplier part. Specify mpn, manufacturerPartNumber, or mfn, provide supplierPartNumbers, or configure a parts engine to select a part. If this part will not be assembled, mark it doNotPlace.`})},uJt=new WeakMap,wri=async(e,t)=>{let n=new AbortController,o,i=new Promise((r)=>{o=setTimeout(()=>{n.abort(),r(!1)},1e4)});try{let r=Promise.resolve().then(()=>e.fetchPartAvailability({...t,signal:n.signal})).then((s)=>s===void 0?void 0:s.stock!==null&&s.stock>0).catch(()=>!1);return await Promise.race([r,i])}finally{clearTimeout(o)}},Tri=(e,{partsEngine:t,...n})=>{let o=uJt.get(e);if(!o)o=new WeakMap,uJt.set(e,o);let i=o.get(t);if(!i)i=new Map,o.set(t,i);let r=`${n.supplierName}:${n.supplierPartNumber}`,s=i.get(r);if(s)return s;let a=wri(t,{...n,platformFetch:e.platform?.platformFetch}).finally(()=>{i.delete(r)});return i.set(r,a),a},Uze=new WeakMap,Dri=o6.shape.supplierPartNumbers.unwrap().keySchema.options;function hJt(e,{refresh:t=!1}={}){let{root:n,source_component_id:o}=e;if(!n||!o)return;let{db:i}=n,r=e.getInheritedProperty("partsEngine"),s=e.props.supplierPartNumbers??{},a=Dri.map((h)=>({supplierName:h,partNumbers:[...new Set((s[h]??[]).map((A)=>A.trim()).filter(Boolean))]})).filter((h)=>h.partNumbers.length>0),c=n.platform?.checkAvailability===!0&&!!r?.fetchPartAvailability&&!e.props.doNotPlace&&!e.getInheritedProperty("bomDisabled")&&!e.getInheritedProperty("partsEngineDisabled")&&!(n.platform?.drcChecksDisabled??e.getInheritedProperty("drcChecksDisabled"))&&a.length>0,l=c?JSON.stringify(a):"disabled",d=Uze.get(e);if(!t&&d?.key===l&&d.partsEngine===r)return;let u={key:l,partsEngine:r};Uze.set(e,u);for(let h of i.source_component_availability_warning.list({source_component_id:o}))i.source_component_availability_warning.delete(h.source_component_availability_warning_id);if(!c||!r)return;e._queueAsyncEffect("check-component-availability",async()=>{let h=await Promise.all(a.map(async({supplierName:A,partNumbers:m})=>({supplierName:A,partNumbers:m,availability:await Promise.all(m.map((p)=>Tri(n,{partsEngine:r,supplierName:A,supplierPartNumber:p})))})));if(Uze.get(e)!==u||n.platform?.checkAvailability!==!0||e.shouldBeRemoved)return;for(let{supplierName:A,partNumbers:m,availability:p}of h){if(p.some((_)=>_===!0))continue;let g=m.filter((_,f)=>p[f]!==void 0);if(!g.length)continue;i.source_component_availability_warning.insert(Lq.parse({type:"source_component_availability_warning",source_component_id:o,subcircuit_id:e.getSubcircuit()?.subcircuit_id??void 0,supplier_name:A,supplier_part_numbers:g,message:`${e.name||"Unnamed component"} may not have availability from ${A} (${g.join(", ")}).`}))}})}var Nri=0.8,Rri=o6.shape.supplierPartNumbers.unwrap().keySchema.options,Qri=(e)=>Number.isFinite(e.minX)&&Number.isFinite(e.minY)&&Number.isFinite(e.maxX)&&Number.isFinite(e.maxY)&&e.maxX>e.minX&&e.maxY>e.minY,mJt=(e,t=0)=>{let n={minX:1/0,minY:1/0,maxX:-1/0,maxY:-1/0};for(let o of e){if(o.type!=="pcb_smtpad"&&o.type!=="pcb_plated_hole")continue;let i=o.type==="pcb_smtpad"?Gz(o):y7(o,t),r=iJ(i,{x:0,y:0},-t).box;n.minX=Math.min(n.minX,r.xmin),n.minY=Math.min(n.minY,r.ymin),n.maxX=Math.max(n.maxX,r.xmax),n.maxY=Math.max(n.maxY,r.ymax)}if(!Qri(n))return null;return n},pJt=(e)=>({width:e.maxX-e.minX,height:e.maxY-e.minY}),AJt=(e,t,n)=>{let o=pJt(e),i=pJt(t),r=n?.rotateB?i.height:i.width,s=n?.rotateB?i.width:i.height,a=Math.min(o.width,r),c=Math.min(o.height,s),l=a*c,d=o.width*o.height+r*s-l;if(d<=0)return 0;return l/d},kri=(e,t)=>Math.max(AJt(e,t),AJt(e,t,{rotateB:!0})),Lri=(e)=>{if(!e)return[];let t=[];for(let n of Rri){let o=e[n];if(!Array.isArray(o))continue;for(let i of o){if(!i)continue;t.push({supplierName:n,supplierPartNumber:i})}}return t};function Fri(e){if(e.root?.pcbDisabled)return;if(e.props.doNotPlace)return;if(e.props.footprint===void 0)return;if(e.getInheritedProperty("bomDisabled"))return;if(e.getInheritedProperty("partsEngineDisabled"))return;let t=e.getInheritedProperty("partsEngine");if(!t?.fetchPartCircuitJson)return;let{db:n}=e.root,o=n.source_component.get(e.source_component_id);if(!o?.supplier_part_numbers)return;if(!e.pcb_component_id)return;if(e._hasStartedSupplierFootprintMismatchWarningCheck)return;let i=Lri(o.supplier_part_numbers);if(i.length===0)return;let r=[...n.pcb_smtpad.list({pcb_component_id:e.pcb_component_id}),...n.pcb_plated_hole.list({pcb_component_id:e.pcb_component_id})],s=n.pcb_component.get(e.pcb_component_id),a=mJt(r,s.rotation);if(!a)return;e._hasStartedSupplierFootprintMismatchWarningCheck=!0,e._queueAsyncEffect("check-supplier-footprint-mismatch",async()=>{let{db:c}=e.root,l=t.fetchPartCircuitJson;for(let d of i){let{supplierName:u,supplierPartNumber:h}=d;try{let A=await Promise.resolve(Non(l,{supplierPartNumber:h}))??null;if(!A?.length)continue;let m=mJt(A);if(!m)continue;let p=kri(a,m);if(p>=Nri)return;let g=typeof e.props.footprint==="string"?`"${e.props.footprint}"`:"the provided footprint",_=Number(p.toFixed(4)),f=kce.parse({type:"supplier_footprint_mismatch_warning",message:`${e.getString()} footprint ${g} does not match supplier footprint ${u}:${h} (copper IoU ${_}).`,source_component_id:e.source_component_id,pcb_component_id:e.pcb_component_id,pcb_group_id:e.getGroup()?.pcb_group_id??void 0,subcircuit_id:e.getSubcircuit()?.subcircuit_id??void 0,supplier_name:u,supplier_part_number:h,footprint_copper_intersection_over_union:_});c.supplier_footprint_mismatch_warning.insert(f);return}catch(A){let m=A instanceof Error?A.message:String(A),p=r7.parse({type:"source_part_not_found_warning",message:`Failed to fetch supplier footprint for ${e.getString()} (${u}:${h}): ${m}`,source_component_id:e.source_component_id??void 0,subcircuit_id:e.getSubcircuit()?.subcircuit_id??void 0,supplier_name:u,supplier_part_number:h});c.source_part_not_found_warning.insert(p);return}}})}var _Jt=(e,t)=>{let n=e._parsedProps.pinNumber,o=t._parsedProps.pinNumber;if(n!==void 0&&o!==void 0&&n!==o)return!1;return e.isMatchingAnyOf(t.getNameAndAliases())},Hri=(e,t)=>{let n=e.toSorted(),o=t.toSorted();return n.length===o.length&&n.every((i,r)=>i===o[r])},Ori=(e)=>e.getNameAndAliases().find((t)=>/^pin\d+$/.test(t))??null,zri=(e,t)=>{if(!e._isPrimaryPort&&e.props.name)return e.props.name;if(e.props.name&&(t.get(e.props.name)??0)<=1)return e.props.name;let n=Ori(e);if(n)return n;return e.props.name??null};function Win(e,t){let n=new Map;for(let o of e)for(let i of new Set(o.getNameAndAliases())){if(/^(pin)?\d+$/.test(i))continue;if(!o._isPrimaryPort&&i===o.props.name)continue;if(!n.has(i))n.set(i,[]);n.get(i).push(o)}for(let o of n.values()){let i=Array.from(new Set(o));if(i.length<2)continue;let r=new Map;for(let c of i){if(!c.props.name)continue;r.set(c.props.name,(r.get(c.props.name)??0)+1)}let s=i.map((c)=>zri(c,r)).filter((c)=>Boolean(c)),a=Array.from(new Set(s));if(a.length<2)continue;if(t.some((c)=>Hri(c,a)))continue;t.push(a)}}function Wze(e,t){let n=1,o=new Map;for(let r of e){let s=r.hints.filter((h)=>h&&h.trim()!=="");if(s.length===0)continue;let a=s,c=a.map((h)=>t?.implicitPinNumberByHint?.get(h)).find((h)=>h!==void 0&&a.includes(t?.getPhysicalPinName?.(h)??""));if(c!==void 0)a=[...a.filter((h)=>!/^(?:pin)?\d+$/.test(h)),`pin${c}`];if(!a.some((h)=>h.startsWith("pin")||/^(?:pin)?\d+$/.test(h))){let h=a.map((A)=>t?.implicitPinNumberByHint?.get(A)).find((A)=>A!==void 0);if(h!==void 0)a=[...a,`pin${h}`];else if(t?.allowImplicitPinNumbers===!1)continue;else a=[...a,`pin${n}`]}n++;let d=kYe(a,t);if(!d)continue;d.originDescription=r.originDescription;let u=d._parsedProps.pinNumber;if(u===void 0)continue;if(d.physicalPinName=t?.getPhysicalPinName?.(u),!o.has(u))o.set(u,[]);o.get(u).push({port:d,component:r.component})}let i=[];for(let[r,s]of o){let a=(h,A)=>{let m=A.getNameAndAliases().filter((p)=>!h.getNameAndAliases().includes(p));h.externallyAddedAliases.push(...m)},c=s[0].port,l=s.filter((h)=>Boolean(h.component));if(l.length!==s.length){for(let h of s.slice(1))a(c,h.port);i.push(c);continue}let d=Poi(l.map((h)=>h.component));if(d.length<=1){for(let h of s.slice(1))a(c,h.port);i.push(c);continue}let u=[c.props.name];for(let[h,A]of d.entries()){let m=l.filter((g)=>A.includes(g.component));if(h===0){for(let g of m.slice(1))a(c,g.port);i.push(c);continue}let p=new sd({name:`pin${r}_internal_${h}`,aliases:c.getNameAndAliases()});p._isPrimaryPort=!1,p._primaryPinNumber=r,p.originDescription=`implicitInternalPhysicalPort:pin${r}:${h}`;for(let g of m)a(p,g.port);u.push(p.props.name),i.push(p)}t?.inferredInternallyConnectedPinNames?.push(u)}if(t?.inferredInternallyConnectedPinNames&&t.inferSharedAliases!==!1)Win(i,t.inferredInternallyConnectedPinNames);return i}var Gri=kon.default("tscircuit:core"),Yri=at({x:Ui,y:Ui,z:Ui}),$c=class extends jo{schematicBoxDimensions=null;reactSubtrees=[];_impliedFootprint;_resolvedPcbCalcOffsetX;_resolvedPcbCalcOffsetY;isPrimitiveContainer=!0;_isNormalComponent=!0;_getIsSmt(){if(this._parsedProps.isSmt!==void 0)return this._parsedProps.isSmt;return this.selectAll("smtpad").some((e)=>e.getPrimitiveContainer()===this)}_attributeLowerToCamelNameMap={_isnormalcomponent:"_isNormalComponent"};_asyncSupplierPartNumbers;_asyncFootprintCadModel;_importedSourcePorts=[];_importedInternallyConnectedPinNames;_fetchedSourcePortsForPinAttributes=[];_fetchedInternallyConnectedPinNames;_hasStartedPinAttributesFetch=!1;_isCadModelChild;_inferredInternallyConnectedPinNames=[];pcb_missing_footprint_error_id;_hasStartedFootprintUrlLoad=!1;_hasStartedPartOrientationAnalysis=!1;_asyncSupplierPin1LocationMap;_hasStartedSupplierFootprintMismatchWarningCheck=!1;_hasInflatedCircuitJsonSymbol=!1;_invalidFootprintPropMessages=[];_invalidPinLabelMessages=[];_impliedFootprintPinLabels;_adjustSilkscreenTextAutomatically=!1;get defaultInternallyConnectedPinNames(){return[]}get internallyConnectedPinNames(){return[...this._parsedProps.internallyConnectedPins??this._importedInternallyConnectedPinNames??this.defaultInternallyConnectedPinNames,...this._inferredInternallyConnectedPinNames].map((t)=>t.map((n)=>typeof n==="number"?`pin${n}`:n))}constructor(e){let t={...e},n=[];if(t.pinLabels&&!Array.isArray(t.pinLabels)){let{validPinLabels:o,invalidPinLabelsMessages:i}=hii(t.pinLabels);t.pinLabels=o,n=i}super(t);if(t.pinLabels&&!Array.isArray(t.pinLabels)){let o=Object.keys(t.pinLabels).find((i)=>cB(i)===null&&!Ioe(i));if(o)throw new Oon(this.lowercaseComponentName,this.props,{_errors:[],pinLabels:{_errors:[`Invalid pinLabels key "${o}". Expected "pin\${number}" (e.g. pin1, pin2) or a physical ball name (e.g. A1).`]}})}this._invalidPinLabelMessages=n,this._addChildrenFromStringFootprint(),this._addChildrenFromCircuitJsonSymbol(),this.initPorts()}doInitialSourceNameDuplicateComponentRemoval(){if(!this.name)return;let e=this.root;if((this.getSubcircuit().getNormalComponentNameMap?.()?.get(this.props.name)??[]).filter((i)=>i!==this&&i.renderPhaseStates.SourceNameDuplicateComponentRemoval.initialized).length>0){let i=this._getGlobalPcbPositionBeforeLayout(),r=this._getGlobalSchematicPositionBeforeLayout();e.db.source_failed_to_create_component_error.insert({component_name:this.name,error_type:"source_failed_to_create_component_error",message:`Cannot create component "${this.name}": A component with the same name already exists`,pcb_center:i,schematic_center:r}),this.shouldBeRemoved=!0;let s=[...this.children];for(let a of s)this.remove(a)}}initPorts(e={}){if(jI.isValidElement(this.props.symbol)&&!this.children.some((m)=>m.componentName==="Symbol"))return;this._inferredInternallyConnectedPinNames=[];let{config:n}=this,o=[],i=this._resolvePinLabels(),r=this._parsedProps.pinLabels,s=r&&Array.isArray(r)?Object.fromEntries(r.map((m,p)=>[`pin${p+1}`,m])):r?doe(r):void 0,a=this._getAllPortsFromChildren(),c=a.some((m)=>m._getSymbolAncestor()!==null),l=(m)=>a.some((p)=>p._parsedProps.pinNumber===m)||o.some((p)=>p._parsedProps.pinNumber===m),d=this._getSchematicPortArrangement();if(d&&!i){for(let g in d){let _=d[g].pins;if(Array.isArray(_))for(let f of _){let y=eF(f,i);if(l(y))continue;o.push(new sd({pinNumber:y,aliases:e.additionalAliases?.[`pin${y}`]??[]},{originDescription:`schPortArrangement:${g}`}))}}let m=["left","right","top","bottom"],p=1;for(let g of m){let _=d[`${g}Size`];for(let f=0;f<_;f++){let y=p++;if(l(y))continue;o.push(new sd({pinNumber:y,aliases:e.additionalAliases?.[`pin${y}`]??[]},{originDescription:`schPortArrangement:${g}`}))}}}if(i)for(let[m,p]of Object.entries(i)){let g=cB(m);if(g===null)throw Error(`Invalid pinLabels key "${m}". Expected "pin\${number}" (e.g. pin1, pin2) or a physical ball name (e.g. A1).`);let _=a.find((P)=>P._parsedProps.pinNumber===g)??o.find((P)=>P._parsedProps.pinNumber===g),f=Array.isArray(p)?p:[p],x=s?.[m]!==void 0,C=this._getPhysicalPinName(g),I=C??(x?f[0]:`pin${g}`),b=C?f:x?f.slice(1):f;if(!_)_=new sd({pinNumber:g,name:I,aliases:[...x?[]:e.additionalAliases?.[`pin${g}`]??[],...b,...x?e.additionalAliases?.[`pin${g}`]??[]:[]]},{originDescription:`pinLabels:pin${g}`}),o.push(_);else _.externallyAddedAliases.push(I,...b);_.physicalPinName=C}if(n.schematicSymbolName&&!e.ignoreSymbolPorts){let m=ra[this._getSchematicSymbolNameOrThrow()];if(!m)return;let p=m.ports.some((f)=>f.labels.some((y)=>!/^(?:pin)?\d+$/.test(y)));if(p&&i){for(let f=1;f<=(e.pinCount??0);f++)if(!l(f))o.push(new sd({pinNumber:f}))}let g=[...this._getAllPortsFromChildren(),...o],_=new Map;for(let f of m.ports){let y=f.labels.filter((C)=>!/^(?:pin)?\d+$/.test(C)),x=g.filter((C)=>C.getNameAndAliases().some((I)=>y.includes(I)));if(x.length===1)_.set(f,x[0])}for(let f of m.ports){let y=_Ce(f.labels);if(!y)continue;let x=g.filter((I)=>![..._.values()].includes(I)),C=_.get(f)??x.find((I)=>I._parsedProps.pinNumber===Number(y))??(p&&m.ports.length-_.size===1&&x.length===1?x[0]:void 0);if(C)_.set(f,C),C.schematicSymbolPortDef=f;else{if(c)continue;let I=kYe(f.labels.concat(e.additionalAliases?.[`pin${y}`]??[]));if(I)I.originDescription=`schematicSymbol:labels[0]:${f.labels[0]}`,I.schematicSymbolPortDef=f,o.push(I)}}this.addAll(o)}let u=jI.isValidElement(this.props.symbol),h=LYe(this.props.symbol);if(!u&&!h){let m=this.getPortsFromFootprint({...e,allowImplicitPinNumbers:!s,collectInferredInternallyConnectedPins:!0}),p=this._getAllPortsFromChildren();for(let g of m){if(!g._isPrimaryPort){o.push(g);continue}let _=p.find((f)=>_Jt(f,g))??o.find((f)=>_Jt(f,g));if(_){let f=g.getNameAndAliases().filter((y)=>!_.getNameAndAliases().includes(y));_.externallyAddedAliases.push(...f)}else if(!d)o.push(g)}}let A=e.pinCount??this._getPrimaryPinCount()??0;for(let m=1;m<=A;m++){if(l(m))continue;if(!d&&s&&!Array.isArray(r)&&!s[`pin${m}`])continue;if(!d){o.push(new sd({pinNumber:m,aliases:e.additionalAliases?.[`pin${m}`]??[]}));continue}let p=U2e(d).map((g)=>eF(g,i));if(["leftSize","rightSize","topSize","bottomSize","leftPinCount","rightPinCount","topPinCount","bottomPinCount"].some((g)=>(g in d)))p=Array.from({length:this._getPrimaryPinCount()},(g,_)=>_+1);if(!p.includes(m))continue;o.push(new sd({pinNumber:m,aliases:e.additionalAliases?.[`pin${m}`]??[]},{originDescription:`notOtherwiseAddedButDeducedFromPinCount:${m}`}))}if(Win(Array.from(new Set([...this._getAllPortsFromChildren(),...o].filter((m)=>!m.physicalPinName))),this._inferredInternallyConnectedPinNames),o.length>0)this.addAll(o)}_resolvePinLabels(){let e=this._parsedProps.pinLabels,t=e&&Array.isArray(e)?Object.fromEntries(e.map((o,i)=>[`pin${i+1}`,o])):e?doe(e):void 0,n={...this._impliedFootprintPinLabels??{},...t??{}};if(Object.keys(n).length===0)return;return n}_resolvedPackagePins;_getPhysicalPinName(e){let t=this._parsedProps?.pinLabels??this.props.pinLabels;if(!t||Array.isArray(t))return;return this._resolvedPackagePins??=EUe(t),this._resolvedPackagePins.find((n)=>n.pinNumber===e)?.physicalPinName}_getImpliedFootprintString(){return null}resolveFootprint(){return this._parsedProps.footprint??this.props.footprint??this._getImpliedFootprintString?.()}_addChildrenFromStringFootprint(){let{pcbRotation:e,pcbPinLabels:t}=this.props,n=this._resolvePinLabels(),o=this.resolveFootprint();if(!o)return;if(typeof o==="string"){if(eD(o))return;if(ZT(o))return;if(Poe(o))return;if(vW(o))return;let i;try{i=bl.string(o).soup()}catch(s){this._queueInvalidFootprintPropMessage(o,s);return}let r=hB({sourcePortOwner:this,componentName:this.name??this.componentName,componentRotation:e,footprinterString:o,pinLabels:n,pcbPinLabels:t},i);this.addAll(r)}}_addChildrenFromCircuitJsonSymbol(){if(this._hasInflatedCircuitJsonSymbol)return;let e=this._parsedProps.symbol;if(!LYe(e))return;if(this.children.some((r)=>r.componentName==="Symbol")){this._hasInflatedCircuitJsonSymbol=!0;return}let t=Lii(e);if(t.length===0)return;let n=kii(t),o=hB({sourcePortOwner:this,componentName:this.name??this.componentName,componentRotation:String(this.props.schRotation??0)},n);if(o.length===0)return;if(this._hasInflatedCircuitJsonSymbol=!0,!o.some((r)=>r.componentName==="Symbol")){let r=new OUe({name:this.name??this.componentName});r.addAll(o),this.add(r);return}this.addAll(o)}get portMap(){return new Proxy({},{get:(e,t)=>{let n=this.children.find((i)=>i.componentName==="Symbol"),o=[...this.children,...n?.children??[]].find((i)=>i.componentName==="Port"&&i.isMatchingNameOrAlias(t));if(!o)throw Error(`There was an issue finding the port "${t.toString()}" inside of a ${this.componentName} component with name: "${this.props.name}". This is a bug in @tscircuit/core`);return o}})}getInstanceForReactElement(e){for(let t of this.reactSubtrees)if(t.element===e)return t.component;return null}doInitialSourceRender(){let e=this.config.sourceFtype;if(!e)return;let{db:t}=this.root,{_parsedProps:n}=this,o=t.source_component.insert({ftype:e,name:this.name,manufacturer_part_number:qi(n),supplier_part_numbers:n.supplierPartNumbers,display_name:n.displayName});this.source_component_id=o.source_component_id}getRefDesPrefixes(){return Fin(this.config.sourceFtype)}doInitialCheckRefDesConvention(){iri(this)}doInitialSourceParentAttachment(){let{db:e}=this.root,t=this._getInternallyConnectedPins().map((n)=>n.map((o)=>o.source_port_id).filter((o)=>o!==null)).filter((n)=>n.length>=2);if(this.source_component_id&&t.length>0)e.source_component.update(this.source_component_id,{internally_connected_source_port_ids:t});for(let n of t)e.source_component_internal_connection.insert({source_component_id:this.source_component_id,subcircuit_id:this.getSubcircuit()?.subcircuit_id,source_port_ids:n})}updateSourceParentAttachment(){let{db:e}=this.root;for(let t of e.source_component_internal_connection.list({source_component_id:this.source_component_id}))e.source_component_internal_connection.delete(t.source_component_internal_connection_id);this.doInitialSourceParentAttachment()}doInitialSchematicComponentRender(){Sri(this)}_getSchematicSymbolDisplayValue(){return}_getInternallyConnectedPins(){if(this.internallyConnectedPinNames.length===0)return[];let e=[];for(let t of this.internallyConnectedPinNames){let n=[];for(let o of t){let i=this.portMap[o]??this.portMap[`pin${o}`];if(i)n.push(i)}e.push(n)}return e}_doInitialSchematicComponentRenderWithSymbol(){if(this.root?.schematicDisabled)return;let{db:e}=this.root,{_parsedProps:t}=this,n=this._getSchematicSymbolNameOrThrow(),o=ra[n],i=this._getGlobalSchematicPositionBeforeLayout();if(o){let r=e.schematic_component.insert({center:i,size:{...o.size},source_component_id:this.source_component_id,is_box_with_pins:!0,symbol_name:n,schematic_sheet_id:this._resolveSchematicSheetId(),symbol_display_value:this._getSchematicSymbolDisplayValue()});this.schematic_component_id=r.schematic_component_id}}_doInitialSchematicComponentRenderWithReactSymbol(e){if(this.root?.schematicDisabled)return;let{db:t}=this.root,n=this._getGlobalSchematicPositionBeforeLayout(),o=t.schematic_component.insert({center:n,size:{width:0,height:0},source_component_id:this.source_component_id,symbol_display_value:this._getSchematicSymbolDisplayValue(),is_box_with_pins:!1,schematic_sheet_id:this._resolveSchematicSheetId()});this.schematic_component_id=o.schematic_component_id}_doInitialSchematicComponentRenderWithSchematicBoxDimensions(e){if(this.root?.schematicDisabled)return;let{db:t}=this.root,{_parsedProps:n}=this;this.schematicBoxDimensions=e;let o={};if(Array.isArray(n.pinLabels))n.pinLabels.forEach((A,m)=>{o[String(m+1)]=A});else for(let[A,m]of Object.entries(n.pinLabels??{}))o[A]=Array.isArray(m)?m[0]:m;let i=this._getGlobalSchematicPositionBeforeLayout(),r=this._getSchematicPortArrangement(),s=t.schematic_component.insert({center:i,rotation:n.schRotation??0,size:e.getSize(),port_arrangement:LUe(r),pin_spacing:0.2,pin_styles:kUe(n.schPinStyle,n.pinLabels),port_labels:o,source_component_id:this.source_component_id,schematic_sheet_id:this._resolveSchematicSheetId()}),a=r?.topSide!==void 0,c=a||r?.bottomSide!==void 0,l=e?.getSize().width,d=e?.getSize().height,u=t.schematic_text.insert({text:qi(n)??"",schematic_component_id:s.schematic_component_id,anchor:"left",rotation:0,position:{x:a?i.x+(l??0)/2+0.1:i.x-(l??0)/2,y:c?i.y+(d??0)/2+0.35:i.y-(d??0)/2-0.13},color:"#006464",font_size:0.18,schematic_sheet_id:this._resolveSchematicSheetId()}),h=t.schematic_text.insert({text:n.displayName??n.name??"",schematic_component_id:s.schematic_component_id,anchor:"left",rotation:0,position:{x:a?i.x+(l??0)/2+0.1:i.x-(l??0)/2,y:c?i.y+(d??0)/2+0.55:i.y+(d??0)/2+0.13},color:"#006464",font_size:0.18,schematic_sheet_id:this._resolveSchematicSheetId()});this.schematic_component_id=s.schematic_component_id}doInitialPcbComponentRender(){if(this.root?.pcbDisabled)return;let{db:e}=this.root,{_parsedProps:t}=this,n=this.getSubcircuit(),o=this._getPcbComponentLayer();if(o!=="top"&&o!=="bottom"){let l=_z.parse({type:"pcb_component_invalid_layer_error",message:`Component cannot be placed on layer '${o}'. Components can only be placed on 'top' or 'bottom' layers.`,source_component_id:this.source_component_id,layer:o,subcircuit_id:n.subcircuit_id??void 0});e.pcb_component_invalid_layer_error.insert(l)}let i=this.getGlobalTransformRotation(),r=e.pcb_component.insert({center:this._getGlobalPcbPositionBeforeLayout(),width:0,height:0,layer:o==="top"||o==="bottom"?o:"top",rotation:pu(i),insertion_direction:this._getPcbComponentInsertionDirection(o,i),source_component_id:this.source_component_id,subcircuit_id:n.subcircuit_id??void 0,do_not_place:t.doNotPlace??!1,obstructs_within_bounds:t.obstructsWithinBounds??!0,is_allowed_to_be_off_board:t.allowOffBoard??!1,metadata:t.kicadFootprintMetadata?{kicad_footprint:t.kicadFootprintMetadata}:void 0}),s=this.resolveFootprint(),a=this.children.some((l)=>l.componentName==="Footprint");if(!s&&!a&&!this.isGroup){let l=e.pcb_missing_footprint_error.insert({message:`No footprint specified for component: ${this.getString()}`,source_component_id:`${this.source_component_id}`,error_type:"pcb_missing_footprint_error"});this.pcb_missing_footprint_error_id=l.pcb_missing_footprint_error_id}this.pcb_component_id=r.pcb_component_id;let c=this.getSubcircuit()._getPcbManualPlacementForComponent(this);if((this.props.pcbX!==void 0||this.props.pcbY!==void 0)&&!!c){let l=Qce.parse({type:"pcb_manual_edit_conflict_warning",pcb_manual_edit_conflict_warning_id:`pcb_manual_edit_conflict_${this.source_component_id}`,message:`${this.getString()} has both manual placement and prop coordinates. pcbX and pcbY will be used. Remove pcbX/pcbY or clear the manual placement.`,pcb_component_id:this.pcb_component_id,source_component_id:this.source_component_id,subcircuit_id:n.subcircuit_id??void 0});e.pcb_manual_edit_conflict_warning.insert(l)}}doInitialPcbComponentSizeCalculation(){if(this.root?.pcbDisabled)return;if(!this.pcb_component_id)return;let{db:e}=this.root;eri(this);let t=ACe(this.children);if(t.width===0||t.height===0)return;let n={x:(t.minX+t.maxX)/2,y:(t.minY+t.maxY)/2};e.pcb_component.update(this.pcb_component_id,{center:n,width:t.width,height:t.height})}updatePcbComponentSizeCalculation(){this.doInitialPcbComponentSizeCalculation()}doInitialSchematicComponentSizeCalculation(){if(this.root?.schematicDisabled)return;if(!this.schematic_component_id)return;let{db:e}=this.root;if(!e.schematic_component.get(this.schematic_component_id))return;let n=[],o=(l)=>{for(let d of l){if(d.isSchematicPrimitive&&d.componentName==="SchematicLine"){let u=e.schematic_line.get(d.schematic_line_id);if(u)n.push(u)}if(d.isSchematicPrimitive&&d.componentName==="SchematicRect"){let u=e.schematic_rect.get(d.schematic_rect_id);if(u)n.push(u)}if(d.isSchematicPrimitive&&d.componentName==="SchematicCircle"){let u=e.schematic_circle.get(d.schematic_circle_id);if(u)n.push(u)}if(d.isSchematicPrimitive&&d.componentName==="SchematicArc"){let u=e.schematic_arc.get(d.schematic_arc_id);if(u)n.push(u)}if(d.isSchematicPrimitive&&d.componentName==="SchematicPath"){let u=d.schematic_path_ids;if(u)for(let h of u){let A=e.schematic_path.get(h);if(A)n.push(A)}}if(d.children&&d.children.length>0)o(d.children)}};if(o(this.children),n.length===0)return;let i=Nie(n),r=Math.abs(i.maxX-i.minX),s=Math.abs(i.maxY-i.minY);if(r===0&&s===0)return;let a=(i.minX+i.maxX)/2,c=(i.minY+i.maxY)/2;e.schematic_component.update(this.schematic_component_id,{center:{x:a,y:c},size:{width:r,height:s}})}updateSchematicComponentSizeCalculation(){this.doInitialSchematicComponentSizeCalculation()}doInitialPcbComponentAnchorAlignment(){_ri(this)}updatePcbComponentAnchorAlignment(){this.doInitialPcbComponentAnchorAlignment()}doInitialResolveFootprintPinLabels(){bri(this)}updateResolveFootprintPinLabels(){this.doInitialResolveFootprintPinLabels()}_renderReactSubtree(e){let t=Rie(e);return{element:e,component:t}}doInitialInitializePortsFromChildren(){this.initPorts()}updateInitializePortsFromChildren(){this.initPorts()}getGlobalTransformRotation(){let e=this._computePcbGlobalTransformBeforeLayout();return ol(e).rotation.angle*180/Math.PI}_footprintChildCache;_getFootprintMetadataForPcbComponent(){if(!this._footprintChildCache||this._footprintChildCache.children!==this.children||this._footprintChildCache.childrenVersion!==this._childrenVersion||this._footprintChildCache.childCount!==this.children.length)this._footprintChildCache={children:this.children,childrenVersion:this._childrenVersion,childCount:this.children.length,footprintChild:this.children.find((n)=>n.componentName==="Footprint")};let{footprintChild:e}=this._footprintChildCache;if(e)return{insertionDirection:e._parsedProps.insertionDirection,cutoutApertureDirection:e._parsedProps.cutoutApertureDirection,originalLayer:e._parsedProps.originalLayer};let t=this.resolveFootprint();if(jI.isValidElement(t)){let n=t.props;return{insertionDirection:n.insertionDirection,cutoutApertureDirection:n.cutoutApertureDirection,originalLayer:n.originalLayer}}if(t?.componentName==="Footprint")return{insertionDirection:t._parsedProps?.insertionDirection??t.props?.insertionDirection,cutoutApertureDirection:t._parsedProps?.cutoutApertureDirection??t.props?.cutoutApertureDirection,originalLayer:t._parsedProps?.originalLayer??t.props?.originalLayer};if(typeof t==="string"&&/^(pinrow|headermodule|smdpinheader)(?=\d|_|$)/.test(t)){if(!bl.string(t).params().rightangle)return{insertionDirection:"from_above"}}return}_getPcbComponentLayer(){return this._parsedProps.layer??(this._getFootprintOriginalLayer()==="bottom"?"bottom":"top")}_getFootprintOriginalLayer(){return this._getFootprintMetadataForPcbComponent()?.originalLayer}_getPcbComponentInsertionDirection(e,t=this.getGlobalTransformRotation()){let n=this._getFootprintMetadataForPcbComponent();if(!n?.insertionDirection)return;return Vni({insertionDirection:n.insertionDirection,rotationDegrees:t,isFlipped:boe({componentLayer:e,originalLayer:n.originalLayer})})}_getPcbComponentInsertionAxisDirection(e,t=this.getGlobalTransformRotation()){let n=this._getFootprintMetadataForPcbComponent();if(!n?.insertionDirection)return;return PYe({insertionDirection:n.insertionDirection,rotationDegrees:t,isFlipped:boe({componentLayer:e,originalLayer:n.originalLayer})})}_getEnclosureApertureAxisDirection(e,t=this.getGlobalTransformRotation()){let n=this._getFootprintMetadataForPcbComponent(),o=n?.cutoutApertureDirection??n?.insertionDirection;if(!o)return;return PYe({insertionDirection:o,rotationDegrees:t,isFlipped:boe({componentLayer:e,originalLayer:n?.originalLayer})})}doInitialReactSubtreesRender(){let e=this.props.footprint;if(jI.isValidElement(e)){if(!this.children.some((r)=>r.componentName==="Footprint"))this.add(e)}let t=this.props.symbol;if(jI.isValidElement(t)){if(!this.children.some((r)=>r.componentName==="Symbol"))this.add(t)}let n=this.props.cadModel;if(jI.isValidElement(n)){this._isCadModelChild=!0;let i=this.children.some((s)=>s.componentName==="CadAssembly"),r=this.children.some((s)=>s.componentName==="CadModel");if(!i&&!r)this.add(n)}let o=this.props.spiceModel;if(jI.isValidElement(o)){if(!this.children.some((r)=>r.componentName==="SpiceModel"))this.add(o)}}doInitialPcbFootprintStringRender(){Iri(this,(e,t)=>this._queueAsyncEffect(e,t))}_getAllPortsFromChildren(){let e=[],t=(n)=>{if(n.componentName==="Port")e.push(n);for(let o of n.children)t(o)};for(let n of this.children)t(n);return e}_hasExistingPortExactly(e){return this._getAllPortsFromChildren().some((n)=>{let o=e.getNameAndAliases(),i=n.getNameAndAliases();return o.length===i.length&&o.every((r)=>i.includes(r))})}_hasMatchingPort(e){let t=this._getAllPortsFromChildren(),n=e._parsedProps.pinNumber;if(n===void 0)return!1;return t.some((o)=>o._parsedProps.pinNumber===n)}add(e){let t;if(jI.isValidElement(e)){let n=this._renderReactSubtree(e);this.reactSubtrees.push(n),t=n.component}else t=e;if(t.componentName==="Port"){if(this._hasExistingPortExactly(t))return;if(this._hasMatchingPort(t)){Gri(`Skipping port ${t} because a matching port already exists`);return}}super.add(t)}getPortsFromFootprint(e){let t=void 0;if(e?.collectInferredInternallyConnectedPins)t=this._inferredInternallyConnectedPinNames;let n=this._parsedProps?.pinLabels??this.props.pinLabels,o=n&&!Array.isArray(n)&&Object.keys(n).some(Ioe),i=new Map,r=new Set,s=this._parsedProps?.pinLabels??this.props.pinLabels,a=s&&!Array.isArray(s)?doe(s):s;if(a){let d=Array.isArray(a)?a.map((u,h)=>[`pin${h+1}`,u]):Object.entries(a);for(let[u,h]of d){let A=cB(u);if(A===null)continue;let m=Array.isArray(h)?h:[h];for(let p of m)if(typeof p==="string"&&p.length>0){let g=i.get(p);if(o&&g!==void 0&&g!==A)r.add(p);i.set(p,A)}}}for(let d of r)i.delete(d);let c={...e,inferSharedAliases:!o,getPhysicalPinName:(d)=>this._getPhysicalPinName(d),inferredInternallyConnectedPinNames:t,implicitPinNumberByHint:i},{footprint:l}=this.props;if(typeof l==="string"&&vW(l)&&this.children.some((d)=>d.componentName==="Footprint"))l=this.children.find((d)=>d.componentName==="Footprint");else if(!l||jI.isValidElement(l))l=this.children.find((d)=>d.componentName==="Footprint");if(typeof l==="string"){if(eD(l))return[];if(ZT(l))return[];if(Poe(l))return[];if(vW(l))return[];let d;try{d=bl.string(l).soup()}catch(u){return this._queueInvalidFootprintPropMessage(l,u),[]}return Wze(d.flatMap((u)=>("port_hints"in u)&&u.port_hints?[{hints:u.port_hints,originDescription:`footprint:string:${l}:port_hints[0]:${u.port_hints[0]}`}]:[]),c)}if(!jI.isValidElement(l)&&l&&l.componentName==="Footprint")return Wze(l.children.flatMap((u)=>u.props.portHints?[{hints:u.props.portHints,originDescription:`footprint:${l}`,component:u}]:[]),c);if(!l)return Wze(this.children.filter((d)=>d.props.portHints&&d.isPcbPrimitive).map((d)=>({hints:d.props.portHints,originDescription:"direct PCB primitive",component:d})),{...c,allowImplicitPinNumbers:!1});return[]}_queueInvalidFootprintPropMessage(e,t){let n=t instanceof Error?t.message:String(t),o=e.includes("/")&&!e.includes(":"),r=/^c\d+$/i.test(e)?`C${e.replace(/^c/i,"")}`:null,s=o?` If this is a KiCad footprint, use "kicad:${e}".`:r?` If this is a JLCPCB part number, use "jlcpcb:${r}".`:"",a=`Invalid footprint prop on ${this.getDisplayName()}: "${e}".${s} Parser details: ${n}`;if(!this._invalidFootprintPropMessages.includes(a))this._invalidFootprintPropMessages.push(a)}_insertInvalidFootprintPropErrors(){for(let e of this._invalidFootprintPropMessages)this.root.db.source_invalid_component_property_error.insert({source_component_id:this.source_component_id||"",property_name:"footprint",message:e,error_type:"source_invalid_component_property_error"});this._invalidFootprintPropMessages=[]}getPortsFromSchematicSymbol(){if(this.root?.schematicDisabled)return[];let{config:e}=this;if(!e.schematicSymbolName)return[];let t=ra[e.schematicSymbolName];if(!t)return[];let n=[];for(let o of t.ports){let i=kYe(o.labels);if(i)i.schematicSymbolPortDef=o,n.push(i)}return n}doInitialCreateNetsFromProps(){this._createNetsFromProps(this._getNetsFromConnectionsProp())}_getNetsFromConnectionsProp(){let{_parsedProps:e}=this,t=[];if(e.connections)for(let[n,o]of Object.entries(e.connections)){let i=Array.isArray(o)?o:[o];for(let r of i)t.push(String(r))}return t}_createNetsFromProps(e){Die(this,e)}_getPcbCircuitJsonBounds(){let{db:e}=this.root;if(!this.pcb_component_id)return super._getPcbCircuitJsonBounds();let t=e.pcb_component.get(this.pcb_component_id);return{center:{x:t.center.x,y:t.center.y},bounds:{left:t.center.x-t.width/2,top:t.center.y-t.height/2,right:t.center.x+t.width/2,bottom:t.center.y+t.height/2},width:t.width,height:t.height}}_getPinCountFromSchematicPortArrangement(){let e=this._getSchematicPortArrangement();if(!e)return 0;if(!Din(e))return(e.leftSize??e.leftPinCount??0)+(e.rightSize??e.rightPinCount??0)+(e.topSize??e.topPinCount??0)+(e.bottomSize??e.bottomPinCount??0);let n=U2e(e),o=0;for(let i of n){if(typeof i==="number"){o=Math.max(o,i);continue}let r=cB(i);if(r!==null){o=Math.max(o,r);continue}let s=this._parsedProps.pinLabels;if(s)o=Math.max(o,eF(i,s))}return Math.max(o,n.length)}_getPrimaryPinCount(){if(this._getSchematicPortArrangement())return this._getPinCountFromSchematicPortArrangement();let t=this.getPortsFromFootprint();if(t.length>0)return t.filter((o)=>o._isPrimaryPort).length;let{pinLabels:n}=this._parsedProps;if(n){if(Array.isArray(n))return n.length;let o=Object.keys(n).map((i)=>cB(i)).filter((i)=>i!==null&&!Number.isNaN(i));if(o.length>0)return Math.max(...o);return Object.keys(n).length}return 0}_getSchematicPortArrangement(){return this._parsedProps.schPinArrangement??this._parsedProps.schPortArrangement}_getPinLabelsFromPorts(){let e=this.selectAll("port"),t={};for(let n of e){let o=n.props.pinNumber;if(o!==void 0){let i=n._getBestDisplayPinLabel();if(i)t[`pin${o}`]=i}}return t}_getImplicitSparseSchematicPortArrangement(e){let t=Array.from(new Set(this._getAllPortsFromChildren().filter((r)=>r._isPrimaryPort).map((r)=>r._parsedProps.pinNumber).filter((r)=>r!==void 0))).sort((r,s)=>r-s);if(t.length!==e)return;if(!t.some((r,s)=>r!==s+1))return;let o=Math.floor(e/2),i=e-o;return{leftSide:{pins:t.slice(0,i)},rightSide:{pins:t.slice(i)}}}_getSchematicBoxDimensions(){if(this.schematicBoxDimensions)return this.schematicBoxDimensions;return this._computeSchematicBoxDimensions()}_computeSchematicBoxDimensions(){if(this.getSchematicSymbol())return null;if(!this.config.shouldRenderAsSchematicBox&&!this._parsedProps?.showAsSchematicBox)return null;let{_parsedProps:e}=this,t=this._getPrimaryPinCount(),n=0.2,o=this._getPinLabelsFromPorts(),i=Array.isArray(e.pinLabels)?Object.fromEntries(e.pinLabels.map((a,c)=>[`pin${c+1}`,a])):e.pinLabels?doe(e.pinLabels):void 0,r={...o,...i},s=this._getSchematicPortArrangement()??this._getImplicitSparseSchematicPortArrangement(t);if(e.pinLabels&&!Array.isArray(e.pinLabels)&&Object.keys(e.pinLabels).some(Ioe)&&s)for(let a of U2e(s))eF(a,e.pinLabels);return zUe({schWidth:e.schWidth,schHeight:e.schHeight,schPinSpacing:n,numericSchPinStyle:Uoe(e.schPinStyle,!Array.isArray(e.pinLabels)?e.pinLabels??r:r),pinCount:t,schPortArrangement:s,pinLabels:r})}getFootprinterString(){let e=this.resolveFootprint();if(typeof e==="string")return e;return null}doInitialCadModelRender(){if(this._isCadModelChild)return;if(this.props.doNotPlace)return;let{db:e}=this.root,{boardThickness:t=0}=this._getBoard()??{},n=this._parsedProps.cadModel,o=n===void 0?this._asyncFootprintCadModel:n,i=this.getFootprinterString()??void 0,r=!1;if(i)r=!vW(i)&&!eD(i)&&!ZT(i)&&!Poe(i);if(!this.pcb_component_id)return;if(o===null)return;let s=this._getPcbCircuitJsonBounds();if(typeof o==="string")throw Error("String cadModel not yet implemented");let a=o?.pcbRotationOffset??o?.rotationOffset,c=Yri.parse({x:0,y:0,z:typeof a==="number"?a:0,...typeof a==="object"?a:{}}),l=sy.parse({x:0,y:0,z:0,...typeof o?.positionOffset==="object"?o.positionOffset:{}}),d=o&&typeof o==="object"&&"zOffsetFromSurface"in o?o.zOffsetFromSurface!==void 0?ze.parse(o.zOffsetFromSurface):0:0,u=this.props.layer==="bottom"?"bottom":"top",h=e.pcb_component.get(this.pcb_component_id),A=this._computePcbGlobalTransformBeforeLayout(),p=ol(A).rotation.angle*180/Math.PI,g=h?.position_mode==="packed"?h.rotation??p:p,_=u==="bottom";if(!o&&!r){let C={position:{x:s.center.x,y:s.center.y,z:u==="bottom"?-t/2:t/2},rotation:xYe({layer:u,pcbCcwRotationDegrees:g,modelCcwRotationOffsetDegrees:{x:0,y:0,z:0}})};C=IYe(this,C);let I=e.cad_component.insert({...C,pcb_component_id:this.pcb_component_id,source_component_id:this.source_component_id,model_origin_alignment:"center_of_component_on_board_surface",anchor_alignment:"center_of_component_on_board_surface",show_as_bounding_box:!0,show_as_translucent_model:this._parsedProps.showAsTranslucentModel});this.cad_component_id=I.cad_component_id;return}let f;if(!o&&r)f=i;let y={position:{x:s.center.x+l.x,y:s.center.y+l.y,z:(u==="bottom"?-t/2:t/2)+(u==="bottom"?-d:d)+l.z},rotation:xYe({layer:u,pcbCcwRotationDegrees:g,modelCcwRotationOffsetDegrees:c})};y=IYe(this,y);let x=e.cad_component.insert({...y,pcb_component_id:this.pcb_component_id,source_component_id:this.source_component_id,model_stl_url:"stlUrl"in(o??{})?this._addCachebustToModelUrl(o.stlUrl):void 0,model_obj_url:"objUrl"in(o??{})?this._addCachebustToModelUrl(o.objUrl):void 0,model_mtl_url:"mtlUrl"in(o??{})?this._addCachebustToModelUrl(o.mtlUrl):void 0,model_gltf_url:"gltfUrl"in(o??{})?this._addCachebustToModelUrl(o.gltfUrl):void 0,model_glb_url:"glbUrl"in(o??{})?this._addCachebustToModelUrl(o.glbUrl):void 0,model_step_url:"stepUrl"in(o??{})?this._addCachebustToModelUrl(o.stepUrl):void 0,model_wrl_url:"wrlUrl"in(o??{})?this._addCachebustToModelUrl(o.wrlUrl):void 0,model_jscad:"jscad"in(o??{})?o.jscad:void 0,model_unit_to_mm_scale_factor:typeof o?.modelUnitToMmScale==="number"?o.modelUnitToMmScale:void 0,model_board_normal_direction:o?.modelBoardNormalDirection,model_origin_alignment:"center_of_component_on_board_surface",anchor_alignment:"center_of_component_on_board_surface",model_origin_position:o?.modelOriginPosition,...o?.size?{size:o.size}:{},footprinter_string:f,show_as_translucent_model:this._parsedProps.showAsTranslucentModel});this.cad_component_id=x.cad_component_id}_addCachebustToModelUrl(e){if(!e||!e.includes("modelcdn.tscircuit.com"))return e;let t=this.root?.getClientOrigin()??"";return`${e}${e.includes("?")?"&":"?"}cachebust_origin=${encodeURIComponent(t)}`}_getPartsEngineCacheKey(e,t){return JSON.stringify({ftype:e.ftype,name:e.name,manufacturer_part_number:e.manufacturer_part_number,standard:e.standard,pin_count:e.pin_count,footprinterString:t})}async _getSupplierPartNumbers(e,t,n){if(this.props.doNotPlace)return{};let o=this.root?.platform?.localCacheEngine,i=this._getPartsEngineCacheKey(t,n);if(o){let a=await o.getItem(i);if(a)try{return JSON.parse(a)}catch{}}let r=await Promise.resolve(e.findPart({sourceComponent:t,footprinterString:n}));if(typeof r==="string"){if(r.includes("<!DOCTYPE")||r.includes("<html"))throw Error(`Failed to fetch supplier part numbers: Received HTML response instead of JSON. Response starts with: ${r.substring(0,100)}`);if(r==="Not found")throw Error(`Part not found for ${this.getString()}${n?` with footprint "${n}"`:""}`);throw Error(`Invalid supplier part numbers format: Expected object but got string: "${r}"`)}if(!r||Array.isArray(r)||typeof r!=="object"){let a=r===null?"null":Array.isArray(r)?"array":typeof r;throw Error(`Invalid supplier part numbers format: Expected object but got ${a}`)}let s=r;if(o)try{await o.setItem(i,JSON.stringify(s))}catch{}return s}doInitialPartsEngineRender(){if(this.props.doNotPlace)return;if(this.getInheritedProperty("bomDisabled"))return;if(this.getInheritedProperty("partsEngineDisabled"))return;let e=this.getInheritedProperty("partsEngine");if(!e)return;let{db:t}=this.root,n=t.source_component.get(this.source_component_id);if(!n)return;if(n.supplier_part_numbers)return;let o=this.props.footprint??this._getImpliedFootprintString(),i=typeof o==="string"?o:void 0,r=this._getSupplierPartNumbers(e,n,i);if(!(r instanceof Promise)){t.source_component.update(this.source_component_id,{supplier_part_numbers:r});return}this._queueAsyncEffect("get-supplier-part-numbers",async()=>{await r.then((s)=>{this._asyncSupplierPartNumbers=s,this._markDirty("PartsEngineRender")}).catch((s)=>{this._asyncSupplierPartNumbers={};let a=r7.parse({type:"source_part_not_found_warning",message:`Failed to fetch supplier part numbers for ${this.getString()}: ${s.message}`,source_component_id:this.source_component_id??void 0,subcircuit_id:this.getSubcircuit()?.subcircuit_id??void 0,manufacturer_part_number:n.manufacturer_part_number??void 0,part_name:n.name??void 0});t.source_part_not_found_warning.insert(a),this._markDirty("PartsEngineRender")})})}updatePartsEngineRender(){if(this.props.doNotPlace)return;if(this.getInheritedProperty("bomDisabled"))return;if(this.getInheritedProperty("partsEngineDisabled"))return;let{db:e}=this.root,t=e.source_component.get(this.source_component_id);if(!t)return;if(t.supplier_part_numbers)return;if(this._asyncSupplierPartNumbers){e.source_component.update(this.source_component_id,{supplier_part_numbers:this._asyncSupplierPartNumbers});return}}doInitialMissingManufacturerPartNumberWarning(){Bri(this)}updateMissingManufacturerPartNumberWarning(){this.doInitialMissingManufacturerPartNumberWarning()}doInitialComponentAvailabilityWarning(){hJt(this)}updateComponentAvailabilityWarning(){hJt(this,{refresh:!0})}doInitialPartOrientationAnalysis(){pri(this)}updatePartOrientationAnalysis(){Ari(this)}doInitialSupplierFootprintMismatchWarning(){Fri(this)}updateSupplierFootprintMismatchWarning(){this.doInitialSupplierFootprintMismatchWarning()}doInitialAssignFallbackProps(){let{_parsedProps:e}=this;if(e.connections&&!this.name)this.fallbackUnassignedName=this.getSubcircuit().getNextAvailableName(this)}doInitialCreateTracesFromProps(){this._createTracesFromConnectionsProp()}_createTracesFromConnectionsProp(){let{_parsedProps:e}=this;if(e.connections)for(let[t,n]of Object.entries(e.connections)){let o=Array.isArray(n)?n:[n];for(let i of o)this.add(new qm({from:`.${this.name} > .${t}`,to:String(i)}))}}doInitialSourceDesignRuleChecks(){Eri(this),wqt(this)}updateSourceDesignRuleChecks(){wqt(this)}doInitialSourceComponentPropertyValidation(){this._insertInvalidFootprintPropErrors()}doInitialValidatePcbCoordinates(){if(super.doInitialValidatePcbCoordinates(),this.root?.pcbDisabled)return;let e=this._parsedProps,t=this.props,n=typeof t.pcbLeftEdgeX==="string"?t.pcbLeftEdgeX:e.pcbLeftEdgeX??t.pcbLeftEdgeX,o=typeof t.pcbRightEdgeX==="string"?t.pcbRightEdgeX:e.pcbRightEdgeX??t.pcbRightEdgeX,i=typeof t.pcbTopEdgeY==="string"?t.pcbTopEdgeY:e.pcbTopEdgeY??t.pcbTopEdgeY,r=typeof t.pcbBottomEdgeY==="string"?t.pcbBottomEdgeY:e.pcbBottomEdgeY??t.pcbBottomEdgeY;if(!(e.pcbX!==void 0||e.pcbY!==void 0||n!==void 0||o!==void 0||i!==void 0||r!==void 0))return;if(n!==void 0)this._validatePcbCoordinateReferences({rawValue:n,axis:"pcbX",propertyName:"pcbLeftEdgeX"});if(o!==void 0)this._validatePcbCoordinateReferences({rawValue:o,axis:"pcbX",propertyName:"pcbRightEdgeX"});if(i!==void 0)this._validatePcbCoordinateReferences({rawValue:i,axis:"pcbY",propertyName:"pcbTopEdgeY"});if(r!==void 0)this._validatePcbCoordinateReferences({rawValue:r,axis:"pcbY",propertyName:"pcbBottomEdgeY"})}doInitialPcbLayout(){if(this.root?.pcbDisabled)return;if(!this.pcb_component_id)return;let{db:e}=this.root,t=this._parsedProps,n=this.props,o=t.pcbLeftEdgeX??n.pcbLeftEdgeX,i=t.pcbRightEdgeX??n.pcbRightEdgeX,r=t.pcbTopEdgeY??n.pcbTopEdgeY,s=t.pcbBottomEdgeY??n.pcbBottomEdgeY;if(!(t.pcbX!==void 0||t.pcbY!==void 0||o!==void 0||i!==void 0||r!==void 0||s!==void 0))return;if(o!==void 0&&i!==void 0)throw Error(`${this.componentName} cannot set both pcbLeftEdgeX and pcbRightEdgeX`);if(r!==void 0&&s!==void 0)throw Error(`${this.componentName} cannot set both pcbTopEdgeY and pcbBottomEdgeY`);let c=e.pcb_component.get(this.pcb_component_id),l=c?.width??0,d=c?.height??0,h=this.getGroup()?.pcb_group_id??void 0,A=h?void 0:this._getBoard()?.pcb_board_id??void 0,m=this._resolvedPcbCalcOffsetX??(t.pcbX!==void 0?this._resolvePcbCoordinate(t.pcbX,"pcbX"):o!==void 0?this._resolvePcbCoordinate(o,"pcbX",{propertyName:"pcbLeftEdgeX"})+l/2:i!==void 0?this._resolvePcbCoordinate(i,"pcbX",{propertyName:"pcbRightEdgeX"})-l/2:void 0),p=this._resolvedPcbCalcOffsetY??(t.pcbY!==void 0?this._resolvePcbCoordinate(t.pcbY,"pcbY"):r!==void 0?this._resolvePcbCoordinate(r,"pcbY",{propertyName:"pcbTopEdgeY"})-d/2:s!==void 0?this._resolvePcbCoordinate(s,"pcbY",{propertyName:"pcbBottomEdgeY"})+d/2:void 0);e.pcb_component.update(this.pcb_component_id,{position_mode:"relative_to_group_anchor",positioned_relative_to_pcb_group_id:h,positioned_relative_to_pcb_board_id:A,display_offset_x:m,display_offset_y:p})}_getMinimumFlexContainerSize(){return Xii(this)}_repositionOnPcb(e){return Kii(this,e)}doInitialSilkscreenOverlapAdjustment(){return vri(this)}isRelativelyPositioned(){let e=this.props;return this._parsedProps.pcbX!==void 0||this._parsedProps.pcbY!==void 0||this._parsedProps.pcbLeftEdgeX!==void 0||this._parsedProps.pcbRightEdgeX!==void 0||this._parsedProps.pcbTopEdgeY!==void 0||this._parsedProps.pcbBottomEdgeY!==void 0||e.pcbLeftEdgeX!==void 0||e.pcbRightEdgeX!==void 0||e.pcbTopEdgeY!==void 0||e.pcbBottomEdgeY!==void 0}},WUe=(e,t)=>{let n=e.source_group.list(),o=[],i=(r)=>{let s=n.filter((a)=>a.parent_subcircuit_id===r);for(let a of s)if(a.subcircuit_id)o.push(a.subcircuit_id),i(a.subcircuit_id)};return i(t),o},Vri=({boardAnchorPosition:e,boardAnchorAlignment:t,width:n,height:o})=>{let{x:i,y:r}=e,s=i,a=r;switch(t){case"top_left":s=i+n/2,a=r-o/2;break;case"top_right":s=i-n/2,a=r-o/2;break;case"bottom_left":s=i+n/2,a=r+o/2;break;case"bottom_right":s=i-n/2,a=r+o/2;break;case"top":s=i,a=r-o/2;break;case"bottom":s=i,a=r+o/2;break;case"left":s=i+n/2,a=r;break;case"right":s=i-n/2,a=r;break;case"center":default:break}return{x:s,y:a}};function Uri(e,t){let{subcircuit:n}=t;if(n.lowercaseComponentName==="board"||n.lowercaseComponentName==="mountedboard")return;if(n.parent?.lowercaseComponentName==="board")return;let o={name:"inflated_board"};if(e.width)o.width=e.width;if(e.height)o.height=e.height;if(e.center)o.pcbX=e.center.x,o.pcbY=e.center.y;if(e.outline)o.outline=e.outline;if(e.thickness)o.thickness=e.thickness;if(e.material)o.material=e.material;if(e.is_via_in_pad_allowed!==void 0)o.isViaInPadAllowed=e.is_via_in_pad_allowed;if(e.allow_blind_and_buried_vias!==void 0)o.allowBlindAndBuriedVias=e.allow_blind_and_buried_vias;let i=new TS(o);return i.pcb_board_id=e.pcb_board_id,n.add(i),i}var Xze=new WeakMap,gJt=(e)=>{let t=[e.name,...e.port_hints??[]].map((i)=>i.toLowerCase().replace(/[^a-z0-9+-]/g,"")),n=t.some((i)=>["a","anode","pos","positive","+"].includes(i)),o=t.some((i)=>["k","cathode","neg","negative","-"].includes(i));if(n===o)return null;return n?"positive":"negative"},Wri=(e)=>{let t=e.root;if(!t)return;let{db:n}=t;for(let g of Xze.get(e)??[])n.pcb_fabrication_note_path.delete(g.pcb_fabrication_note_path_id);if(Xze.delete(e),t.pcbDisabled||!e.props.polarized||!e.pcb_component_id)return;let o=n.pcb_component.get(e.pcb_component_id);if(!o||o.layer!=="top"&&o.layer!=="bottom")return;let i=n.source_port.list({source_component_id:e.source_component_id}),r=i.filter((g)=>gJt(g)==="positive"),s=i.filter((g)=>gJt(g)==="negative");if(r.length!==1||s.length!==1)return;let a=n.pcb_port.getWhere({source_port_id:r[0].source_port_id}),c=n.pcb_port.getWhere({source_port_id:s[0].source_port_id});if(!a||!c)return;let l=Math.hypot(c.x-a.x,c.y-a.y);if(l<0.000001)return;let d=_o(So((a.x+c.x)/2,(a.y+c.y)/2),wa(Math.atan2(c.y-a.y,c.x-a.x))),u=(g,_)=>tt(d,{x:g,y:_}),h=l/4,A=Math.min(l*0.12,0.3),m=[[u(-h-A,0),u(-h+A,0)],[u(-h,-A),u(-h,A)],[u(h-A,0),u(h+A,0)]],p=[];Xze.set(e,p);for(let g of m)p.push(n.pcb_fabrication_note_path.insert({pcb_component_id:o.pcb_component_id,subcircuit_id:e.getSubcircuit()?.subcircuit_id??void 0,layer:o.layer,route:g,stroke_width:Math.min(0.08,A*0.4)}))},Xri=1;function Kri(e){let t=[];for(let n of e.children)if(n instanceof sd)t.push(n);return t}function jri(e){let t=Kri(e);if(t.length!==2)return;let n=t[0].isConnectedToPower(),o=t[0].isConnectedToGround(),i=t[1].isConnectedToPower(),r=t[1].isConnectedToGround();return n&&!o&&r&&!i||i&&!r&&o&&!n?Xri:void 0}var qri=new Set(["01005","0201","0402","0603","0805","1206","1210","2010","2512"]),Xin=class extends $c{_adjustSilkscreenTextAutomatically=!0;get config(){let e=this.props.symbolName??"capacitor",t=this.props.schSize==="sm"||this.props.schSize==="xs"?this.props.schSize:void 0,n=t&&e==="capacitor"?`capacitor_${t}`:void 0,o=n&&`${n}_right`in ra?n:e;return{componentName:"Capacitor",schematicSymbolName:this.props.polarized?"capacitor_polarized":o,zodProps:Tyt,sourceFtype:E3.simple_capacitor}}initPorts(){if(typeof this.props.footprint==="string")super.initPorts({additionalAliases:{pin1:["anode","pos"],pin2:["cathode","neg"]}});else super.initPorts()}_getSchematicSymbolDisplayValue(){let e=this.props.capacitance,t;if(this._parsedProps.capacitance!==void 0&&!isNaN(this._parsedProps.capacitance))t=typeof e==="string"?e:`${gd(this._parsedProps.capacitance)}F`;else t=`${gd(this._parsedProps.capacitance)}F`;if(this._parsedProps.schShowRatings&&this._parsedProps.maxVoltageRating)return`${t}/${gd(this._parsedProps.maxVoltageRating)}V`;return t}getFootprinterString(){let e=super.getFootprinterString();if(e&&qri.has(e))return`cap${e}`;return e}doInitialCreateNetsFromProps(){this._createNetsFromProps([this.props.decouplingFor,this.props.decouplingTo,...this._getNetsFromConnectionsProp()])}doInitialCreateTracesFromProps(){if(this.props.decouplingFor&&this.props.decouplingTo)this.add(new qm({from:`${this.getSubcircuitSelector()} > port.1`,to:this.props.decouplingFor})),this.add(new qm({from:`${this.getSubcircuitSelector()} > port.2`,to:this.props.decouplingTo}));this._createTracesFromConnectionsProp()}doInitialPcbComponentSizeCalculation(){super.doInitialPcbComponentSizeCalculation(),Wri(this)}doInitialSourceRender(){let{db:e}=this.root,{_parsedProps:t}=this,n=e.source_component.insert({ftype:"simple_capacitor",name:this.name,manufacturer_part_number:qi(t),supplier_part_numbers:t.supplierPartNumbers,capacitance:t.capacitance,max_voltage_rating:t.maxVoltageRating,max_decoupling_trace_length:t.maxDecouplingTraceLength??jri(this),display_capacitance:this._getSchematicSymbolDisplayValue(),are_pins_interchangeable:!t.polarized,display_name:t.displayName});this.source_component_id=n.source_component_id}},Jri=({pcbComponent:e,db:t,componentName:n})=>{let o=e.center||{x:0,y:0},i=e.rotation||0,r=fz(_o(So(o.x,o.y),wa(i*Math.PI/180))),s=t.toArray().filter((c)=>("pcb_component_id"in c)&&c.pcb_component_id===e.pcb_component_id),a=structuredClone(s);return _7(a,r),hB({componentName:n,componentRotation:"0deg",preserveSolderPaste:!0},a)},sb=(e,t)=>{let{injectionDb:n,normalComponent:o}=t;if(!o)return null;let i=Jri({pcbComponent:e,db:n,componentName:o.name});if(i.length===0)return null;let r=new fCe({originalLayer:e.layer});return r.addAll(i),r},ab=({pcbComponent:e,sourceGroupId:t,inflatorContext:n})=>{if(!e?.center)return{pcbX:void 0,pcbY:void 0};if(t){let o=n.injectionDb.pcb_group.getWhere({source_group_id:t});if(o?.anchor_position)return{pcbX:e.center.x-o.anchor_position.x,pcbY:e.center.y-o.anchor_position.y}}return{pcbX:e.center.x,pcbY:e.center.y}};function $ri(e,t){let{injectionDb:n,subcircuit:o,groupsMap:i}=t,r=n.pcb_component.getWhere({source_component_id:e.source_component_id}),s=n.cad_component.getWhere({source_component_id:e.source_component_id}),{pcbX:a,pcbY:c}=ab({pcbComponent:r,sourceGroupId:e.source_group_id,inflatorContext:t}),l=new Xin({name:e.name,capacitance:e.capacitance,layer:r?.layer,pcbX:a,pcbY:c,pcbRotation:r?.rotation,doNotPlace:r?.do_not_place,obstructsWithinBounds:r?.obstructs_within_bounds});if(r){let d=sb(r,{...t,normalComponent:l});if(d)l.add(d)}if(e.source_group_id&&i?.has(e.source_group_id))i.get(e.source_group_id).add(l);else o.add(l)}var Kin=({circuitJson:e,pcbComponentId:t,sourceComponentId:n})=>{let o=e.filter((r)=>{if(r.type==="pcb_component")return r.pcb_component_id===t;if(r.type==="source_component")return r.source_component_id===n;if("pcb_component_id"in r&&r.pcb_component_id===t)return!0;if("source_component_id"in r&&r.source_component_id===n)return!0;return!1});if(o.length===0)return null;let i=QSt(o);return{x:i.x,y:i.y}},Zri=(e)=>{if(e.root?.pcbDisabled)return;if(!e.name.toUpperCase().startsWith("J"))return;if(!e.pcb_component_id||!e.source_component_id)return;let t=e.root?.platform?.placementDrcChecksDisabled??e.getInheritedProperty("placementDrcChecksDisabled"),n=e.root?.platform?.drcChecksDisabled??e.getInheritedProperty("drcChecksDisabled");if(t||n)return;let{db:o}=e.root;if(o.source_component.get(e.source_component_id)?.ftype!=="simple_chip")return;let r=o.subtree({subcircuit_id:e.getSubcircuit().subcircuit_id}).toArray(),s=Kin({circuitJson:r,pcbComponentId:e.pcb_component_id,sourceComponentId:e.source_component_id});if(!s)return;let a=r.map((d)=>d.type==="pcb_component"&&d.pcb_component_id===e.pcb_component_id?{...d,cable_insertion_center:s}:d),c=n8e(a).find((d)=>d.pcb_component_id===e.pcb_component_id);if(!c)return;if(o.toArray().some((d)=>d.type===c.type&&d.message===c.message))return;o.insertAll([c])},Fie=class extends $c{get config(){return{componentName:"Chip",zodProps:Dg,shouldRenderAsSchematicBox:!0}}initPorts(e={}){super.initPorts(e);let{_parsedProps:t}=this;if(t.externallyConnectedPins){let n=new Set;for(let[o,i]of t.externallyConnectedPins)n.add(o),n.add(i);for(let o of n)if(!this.children.find((r)=>r instanceof sd&&r.isMatchingAnyOf([o]))){let r=o.match(/^pin(\d+)$/);if(r){let s=parseInt(r[1]);this.add(new sd({pinNumber:s,aliases:[o]}))}else this.add(new sd({name:o,aliases:[o]}))}}}doInitialSourceRender(){let{db:e}=this.root,{_parsedProps:t}=this,n=e.source_component.insert({ftype:"simple_chip",name:this.name,manufacturer_part_number:qi(t),supplier_part_numbers:t.supplierPartNumbers,display_name:t.displayName});this.source_component_id=n.source_component_id}doInitialPcbComponentRender(){if(this.root?.pcbDisabled)return;let{db:e}=this.root,{_parsedProps:t}=this,{pcbX:n,pcbY:o}=this.getResolvedPcbPositionProp(),i=t.footprint??this._getImpliedFootprintString(),r=this.children.some((l)=>l.componentName==="Footprint");if(!i&&!r&&!this._hasStartedFootprintUrlLoad){let l=e.pcb_missing_footprint_error.insert({message:`No footprint specified for component: ${this.getString()}`,source_component_id:`${this.source_component_id}`,error_type:"pcb_missing_footprint_error"});this.pcb_missing_footprint_error_id=l.pcb_missing_footprint_error_id}let s=this._getPcbComponentLayer();if(s!=="top"&&s!=="bottom"){let l=this.getSubcircuit(),d=_z.parse({type:"pcb_component_invalid_layer_error",message:`Component cannot be placed on layer '${s}'. Components can only be placed on 'top' or 'bottom' layers.`,source_component_id:this.source_component_id,layer:s,subcircuit_id:l.subcircuit_id??void 0});e.pcb_component_invalid_layer_error.insert(d)}let a=this.getGlobalTransformRotation(),c=e.pcb_component.insert({center:{x:n,y:o},width:2,height:3,layer:s==="top"||s==="bottom"?s:"top",rotation:pu(a),insertion_direction:this._getPcbComponentInsertionDirection(s,a),source_component_id:this.source_component_id,subcircuit_id:this.getSubcircuit().subcircuit_id??void 0,do_not_place:t.doNotPlace??!1,obstructs_within_bounds:t.obstructsWithinBounds??!0,is_allowed_to_be_off_board:t.allowOffBoard??!1,metadata:t.kicadFootprintMetadata?{kicad_footprint:t.kicadFootprintMetadata}:void 0});this.pcb_component_id=c.pcb_component_id}doInitialPcbPlacementDesignRuleChecks(){Zri(this)}doInitialCreateTracesFromProps(){let{_parsedProps:e}=this;if(e.externallyConnectedPins)for(let[t,n]of e.externallyConnectedPins)this.add(new qm({from:`${this.getSubcircuitSelector()} > port.${t}`,to:`${this.getSubcircuitSelector()} > port.${n}`}));this._createTracesFromConnectionsProp()}doInitialSimulationRender(){let{db:e}=this.root,{pinAttributes:t}=this.props;if(!t)return;let n=null,o=null,i,r=this.selectAll("port");for(let d of r)for(let u of d.getNameAndAliases())if(t[u]){let h=t[u];if(h.providesPower)n=d,i=h.providesVoltage;if(h.providesGround)o=d}if(!n||!o||i===void 0)return;let s=e.source_port.get(n.source_port_id);if(!s?.subcircuit_connectivity_map_key)return;let a=e.source_port.get(o.source_port_id);if(!a?.subcircuit_connectivity_map_key)return;let c=e.source_net.getWhere({subcircuit_connectivity_map_key:s.subcircuit_connectivity_map_key}),l=e.source_net.getWhere({subcircuit_connectivity_map_key:a.subcircuit_connectivity_map_key});if(!c||!l)return;e.simulation_voltage_source.insert({type:"simulation_voltage_source",positive_source_port_id:n.source_port_id,positive_source_net_id:c.source_net_id,negative_source_port_id:o.source_port_id,negative_source_net_id:l.source_net_id,voltage:i})}},esi=(e,t)=>{if(!e||e.length===0)return;let{injectionDb:n}=t,o=e.map((i)=>i.map((r)=>{let s=n.source_port.get(r);if(!s)return null;if(s.pin_number!==void 0&&s.pin_number!==null)return`pin${s.pin_number}`;return s.name}).filter((r)=>r!==null)).filter((i)=>i.length>0);return o.length>0?o:void 0},tsi=(e,t)=>{let{injectionDb:n,subcircuit:o,groupsMap:i}=t,r=n.pcb_component.getWhere({source_component_id:e.source_component_id}),s=n.schematic_component.getWhere({source_component_id:e.source_component_id}),a=n.cad_component.getWhere({source_component_id:e.source_component_id}),c=esi(e.internally_connected_source_port_ids,t),l=a?.footprinter_string??null,{pcbX:d,pcbY:u}=ab({pcbComponent:r,sourceGroupId:e.source_group_id,inflatorContext:t}),h=new Fie({name:e.name,manufacturerPartNumber:e.manufacturer_part_number,supplierPartNumbers:e.supplier_part_numbers??void 0,pinLabels:s?.port_labels??void 0,schWidth:s?.size?.width,schHeight:s?.size?.height,schPinSpacing:s?.pin_spacing,schX:s?.center?.x,schY:s?.center?.y,layer:r?.layer,pcbX:d,pcbY:u,pcbRotation:r?.rotation,doNotPlace:r?.do_not_place,obstructsWithinBounds:r?.obstructs_within_bounds,internallyConnectedPins:c});if(l)Object.assign(h.props,{footprint:l}),Object.assign(h._parsedProps,{footprint:l});if(r){let A=sb(r,{...t,normalComponent:h});if(A)h.add(A)}if(e.source_group_id&&i?.has(e.source_group_id))i.get(e.source_group_id).add(h);else o.add(h)},nsi=/^(?:pin)?(\d+)$/i,osi=(e)=>{for(let t of e??[]){let n=t.trim().match(nsi);if(n)return Number.parseInt(n[1],10)}},fJt=(e,t)=>e!==void 0&&e>=1&&e<=t,isi=(e,t)=>{let n=new Map;for(let i of e)if(i.type==="source_port"&&typeof i.pin_number==="number")n.set(i.source_port_id,i.pin_number);let o=new Map;for(let i of e){if(i.type!=="pcb_port")continue;let r=n.get(i.source_port_id);if(r!==void 0)o.set(i.pcb_port_id,r)}return e.filter((i)=>!i.type.startsWith("schematic_")).map((i)=>{if(i.type==="source_port"){let c=i.pin_number;return{...i,name:typeof c==="number"?`pin${c}`:i.name,port_hints:fJt(c,t)?[`pin${c}`]:[]}}if(!("port_hints"in i)&&!("pcb_port_id"in i))return i;let r="port_hints"in i?osi(i.port_hints):void 0,s="pcb_port_id"in i&&typeof i.pcb_port_id==="string"?o.get(i.pcb_port_id):void 0,a=r??s;return{...i,port_hints:fJt(a,t)?[`pin${a}`]:[]}})},jin=[{label:"GND1",aliases:[]},{label:"VBUS1",aliases:[]},{label:"CC1",aliases:[]},{label:"DP1",aliases:[]},{label:"DM1",aliases:["DN1"]},{label:"SBU1",aliases:[]},{label:"SBU2",aliases:[]},{label:"DM2",aliases:["DN2"]},{label:"DP2",aliases:[]},{label:"CC2",aliases:[]},{label:"VBUS2",aliases:[]},{label:"GND2",aliases:[]},{label:"SHELL1",aliases:["MH1","EH1","MOUNT1"]},{label:"SHELL2",aliases:["MH2","EH2","MOUNT2"]},{label:"SHELL3",aliases:["MH3","EH3","MOUNT3"]},{label:"SHELL4",aliases:["MH4","EH4","MOUNT4"]}],rsi=/^(?:pin)?(\d+)$/i,ssi=(e)=>Array.from(new Set(e)),asi=(e)=>{let t=[];for(let o of e){if(o.type!=="source_port")continue;let i=o.pin_number;if(typeof i!=="number")continue;let r=new Set;for(let s of o.port_hints??[])r.add(s.trim().toUpperCase());t.push({pinKey:`pin${i}`,upperCaseHints:r})}let n={};for(let{label:o,aliases:i}of jin){let r=[o,...i].map((c)=>c.toUpperCase()),s=t.findIndex((c)=>r.some((l)=>c.upperCaseHints.has(l)));if(s===-1)continue;let{pinKey:a}=t[s];n[a]=[o],t.splice(s,1)}if(Object.keys(n).length===0)return e;return e.map((o)=>{if(!("port_hints"in o)||!Array.isArray(o.port_hints))return o;let i=o.port_hints.filter((a)=>typeof a==="string").map((a)=>a.trim()).filter((a)=>a.length>0);if(i.length===0)return o;let r=new Set;if(o.type==="source_port"&&typeof o.pin_number==="number")r.add(`pin${o.pin_number}`);for(let a of i){let c=a.match(rsi);if(!c)continue;r.add(`pin${Number.parseInt(c[1],10)}`)}let s=[];for(let a of r)s.push(...n[a]??[]);if(s.length===0)return o;return{...o,port_hints:ssi([...i,...s])}})},yJt=0.5,csi=0.15;function lsi(e,t){if(!e.schematic_component_id||!e.root)return;let{db:n}=e.root,o=n.schematic_component.get(e.schematic_component_id);if(!o)return;if(o.symbol_name)return;let i=o.size.width*yJt,r=o.size.height*yJt,s=Math.min(i/t.size.width,r/t.size.height);if(!Number.isFinite(s)||s<=0)return;let a=e.getSubcircuit()?.subcircuit_id??void 0,c=o.center,l=t.center,d=-o.size.width*csi,u=(h)=>({x:c.x+d+(h.x-l.x)*s,y:c.y+(h.y-l.y)*s});for(let h of t.primitives)if(h.type==="path"){let A=h.points.map(u);if(h.closed&&A.length>1){let m=A[0],p=A[A.length-1];if(m.x!==p.x||m.y!==p.y)A.push(m)}n.schematic_path.insert({schematic_component_id:e.schematic_component_id,points:A,is_filled:h.fill??!1,is_dashed:!1,fill_color:h.fill?uB:void 0,stroke_width:0.02,subcircuit_id:a,schematic_sheet_id:e._resolveSchematicSheetId()})}else if(h.type==="circle")n.schematic_circle.insert({schematic_component_id:e.schematic_component_id,center:u({x:h.x,y:h.y}),radius:h.radius*s,stroke_width:0.02,color:uB,is_filled:h.fill,fill_color:h.fill?uB:void 0,is_dashed:!1,subcircuit_id:a,schematic_sheet_id:e._resolveSchematicSheetId()});else if(h.type==="box"){let A=u({x:h.x,y:h.y}),m=u({x:h.x+h.width,y:h.y+h.height});n.schematic_rect.insert({schematic_component_id:e.schematic_component_id,center:{x:(A.x+m.x)/2,y:(A.y+m.y)/2},width:Math.abs(m.x-A.x),height:Math.abs(m.y-A.y),stroke_width:0.02,color:uB,is_filled:!1,is_dashed:!1,rotation:0,subcircuit_id:a,schematic_sheet_id:e._resolveSchematicSheetId()})}}var qin=["VBUS1","VBUS2","CC1","CC2","DP1","DP2","DM1","DM2","SBU1","SBU2","GND1","GND2"],Jin=["SHELL1","SHELL2","SHELL3","SHELL4"],dsi=[...qin,...Jin],usi=new Set([...dsi]),hsi=new Set(["jst_sh","jst_gh","jst_zh","jst_ph","jst_xh","jst_vh"]),Kze=(e)=>e!==void 0&&hsi.has(e),msi=[["CC1",{marginTop:0.15}],["DP1",{marginTop:0.15}],["SBU1",{marginTop:0.15}],["GND1",{marginTop:0.15}],["SHELL4",{marginRight:0.15}]],$in=class extends Fie{_getConnectorProps(){return this._parsedProps}initPorts(){let e=this._getConnectorProps();super.initPorts({pinCount:Kze(e.standard)?e.pinCount:void 0})}_hasExplicitFootprint(){return this._getConnectorProps().footprint!==void 0||this.children.some((t)=>t.componentName==="Footprint")}_shouldUseStandardPartsEngineCircuitJsonFlow(){if(!this._getConnectorProps().standard)return!1;if(this._hasExplicitFootprint())return!1;if(this.getInheritedProperty("partsEngineDisabled"))return!1;return!0}_addUsbCCanonicalFallbackPorts(){if(this.selectAll("port").length>0)return;this.addAll(jin.map(({label:e,aliases:t},n)=>new sd({pinNumber:n+1,name:e,aliases:[...t]}))),this._markDirty("InitializePortsFromChildren")}_handleStandardConnectorCircuitJsonFailure(e,t){let{db:n}=this.root,o=r7.parse({type:"source_part_not_found_warning",message:`Failed to fetch circuit JSON for ${this.getString()} (standard="${e}"): ${t}`,source_component_id:this.source_component_id??void 0,subcircuit_id:this.getSubcircuit()?.subcircuit_id??void 0,manufacturer_part_number:qi(this._getConnectorProps()),part_name:this.name});if(n.source_part_not_found_warning.insert(o),e==="usb_c")this._addUsbCCanonicalFallbackPorts()}_getSupplierPartNumbersToTry(e){let t=[];for(let n of Object.keys(e??{})){let o=e?.[n];if(Array.isArray(o)&&o.length>0)t.push(o[0])}return t}async _tryFetchPartCircuitJson(e,t){let n=await vUe({fetchPartCircuitJson:e,...t},this)??null;if(Array.isArray(n)&&n.length>0)return n;return null}async _fetchStandardConnectorCircuitJson(e,t,n){for(let o of this._getSupplierPartNumbersToTry(t)){let i=await this._tryFetchPartCircuitJson(e,{supplierPartNumber:o,manufacturerPartNumber:n});if(i)return i}if(!n)return null;return this._tryFetchPartCircuitJson(e,{manufacturerPartNumber:n})}_addConnectorFootprintFromCircuitJson(e,t){let n=this._getConnectorProps(),o=e==="usb_c"?asi(t):Kze(e)?isi(t,n.pinCount??0):t,i=hB({sourcePortOwner:this,componentName:this.name,componentRotation:String(n.pcbRotation??0),footprinterString:`standard:${e}`,pinLabels:n.pinLabels,pcbPinLabels:n.pcbPinLabels},o),r=Gin(o);if(r)this._asyncFootprintCadModel=r;this.addAll(i),this._markDirty("InitializePortsFromChildren")}_getUsbCCanonicalLabelToPinNumberMap(){let e=new Map,t=this.selectAll("port");for(let n of t){let o=n.props.pinNumber;if(typeof o!=="number")continue;for(let i of n.getNameAndAliases()){let r=i.trim().toUpperCase();if(!usi.has(r))continue;let s=r;if(!e.has(s))e.set(s,o)}}return e}_getSchematicPortArrangement(){let e=super._getSchematicPortArrangement();if(e&&Object.keys(e).length>0)return e;let t=this._getConnectorProps();if(Kze(t.standard))return{leftSize:0,rightSize:t.pinCount??0};if(t.standard!=="usb_c")return e;let n=this._getUsbCCanonicalLabelToPinNumberMap(),o=qin.map((s)=>n.get(s)).filter((s)=>typeof s==="number"),i=Jin.map((s)=>n.get(s)).filter((s)=>typeof s==="number");if(o.length===0&&i.length===0)return e;let r={};if(o.length>0)r.rightSide={pins:o,direction:"top-to-bottom"};if(i.length>0)r.bottomSide={pins:i,direction:"left-to-right"};return r}_computeSchematicBoxDimensions(){if(this._getConnectorProps().standard!=="usb_c")return super._computeSchematicBoxDimensions();if(this.getSchematicSymbol())return null;if(!this.config.shouldRenderAsSchematicBox)return null;let{_parsedProps:e}=this,t=this._getPrimaryPinCount(),n=0.2,i={...this._getPinLabelsFromPorts()};if(e.pinLabels){for(let[l,d]of Object.entries(e.pinLabels))if(typeof d==="string")i[l]=d}let r=this._getUsbCCanonicalLabelToPinNumberMap(),s={};for(let[l,d]of msi){let u=r.get(l);if(typeof u!=="number")continue;s[`pin${u}`]=d}let a={...s,...e.schPinStyle??{}},c=this._getSchematicPortArrangement();return zUe({schWidth:e.schWidth,schHeight:e.schHeight,schPinSpacing:n,numericSchPinStyle:Uoe(a,i),pinCount:t,schPortArrangement:c??void 0,pinLabels:i})}get config(){return{componentName:"Connector",zodProps:Iyt,shouldRenderAsSchematicBox:!0}}doInitialSourceRender(){let{db:e}=this.root,t=this._getConnectorProps(),n=qi(t),o=e.source_component.insert({ftype:"simple_connector",name:this.name,manufacturer_part_number:n,supplier_part_numbers:t.supplierPartNumbers,display_name:t.displayName,standard:t.standard,pin_count:t.pinCount});this.source_component_id=o.source_component_id}_isUsingStandardPartsEngineCircuitJsonFlow(){if(!this._shouldUseStandardPartsEngineCircuitJsonFlow())return!1;let e=this.getInheritedProperty("partsEngine");return Boolean(e?.fetchPartCircuitJson)}doInitialFetchPartFootprint(){let e=this._getConnectorProps(),t=e.standard;if(!t)return;if(!this._shouldUseStandardPartsEngineCircuitJsonFlow())return;if(this._hasStartedFootprintUrlLoad)return;let n=this.getInheritedProperty("partsEngine");if(n&&!n.fetchPartCircuitJson){this._handleStandardConnectorCircuitJsonFailure(t,"partsEngine.fetchPartCircuitJson is not configured");return}let o=n?.fetchPartCircuitJson;if(!o)return;this._hasStartedFootprintUrlLoad=!0;let i={type:"source_component",ftype:"simple_connector",name:this.name,manufacturer_part_number:qi(e),standard:t,pin_count:e.pinCount};this._queueAsyncEffect("load-standard-connector-circuit-json",async()=>{let{db:r}=this.root;try{let s=await this._getSupplierPartNumbers(n,i,`standard:${t}`);if(this.source_component_id)r.source_component.update(this.source_component_id,{supplier_part_numbers:s});let a=await this._fetchStandardConnectorCircuitJson(o,s,i.manufacturer_part_number);if(!a){this._handleStandardConnectorCircuitJsonFailure(t,"part circuit JSON was not found");return}this._addConnectorFootprintFromCircuitJson(t,a)}catch(s){if(this.source_component_id)r.source_component.update(this.source_component_id,{supplier_part_numbers:{}});this._handleStandardConnectorCircuitJsonFailure(t,s.message)}})}doInitialPartsEngineRender(){if(this._isUsingStandardPartsEngineCircuitJsonFlow())return;super.doInitialPartsEngineRender()}updatePartsEngineRender(){if(this._isUsingStandardPartsEngineCircuitJsonFlow())return;super.updatePartsEngineRender()}doInitialSchematicComponentRender(){if(super.doInitialSchematicComponentRender(),!this.root?.schematicDisabled&&this.schematic_component_id&&this._getConnectorProps().standard==="usb_c"){let e=ra.usbc;if(e)lsi(this,e)}}doInitialPcbComponentSizeCalculation(){if(super.doInitialPcbComponentSizeCalculation(),this.root?.pcbDisabled)return;if(!this.pcb_component_id||!this.source_component_id)return;let{db:e}=this.root,t=Kin({circuitJson:e.toArray(),pcbComponentId:this.pcb_component_id,sourceComponentId:this.source_component_id});if(!t)return;e.pcb_component.update(this.pcb_component_id,{cable_insertion_center:{x:t.x,y:t.y}})}},psi=(e)=>{let t=e?.port_arrangement;if(!t)return;if("left_size"in t)return{leftPinCount:t.left_size,rightPinCount:t.right_size,topPinCount:t.top_size,bottomPinCount:t.bottom_size};let n={};if(t.left_side)n.leftSide={pins:t.left_side.pins,direction:t.left_side.direction??"top-to-bottom"};if(t.right_side)n.rightSide={pins:t.right_side.pins,direction:t.right_side.direction??"top-to-bottom"};if(t.top_side)n.topSide={pins:t.top_side.pins,direction:t.top_side.direction??"left-to-right"};if(t.bottom_side)n.bottomSide={pins:t.bottom_side.pins,direction:t.bottom_side.direction??"left-to-right"};return n},Asi=(e,t)=>{let n=t.injectionDb.source_port.list().filter((i)=>i.source_component_id===e.source_component_id),o={};for(let i of n){let r=i.pin_number;if(r===void 0||r===null)continue;let s=Array.from(new Set([i.name,...i.port_hints??[]].filter((a)=>typeof a==="string"&&a.length>0)));if(s.length>0)o[`pin${r}`]=s}if(Object.keys(o).length===0)return;return o};function _si(e,t){let{injectionDb:n,subcircuit:o,groupsMap:i}=t,r=n.pcb_component.getWhere({source_component_id:e.source_component_id}),s=n.schematic_component.getWhere({source_component_id:e.source_component_id}),a=n.cad_component.getWhere({source_component_id:e.source_component_id}),{pcbX:c,pcbY:l}=ab({pcbComponent:r,sourceGroupId:e.source_group_id,inflatorContext:t}),d={name:e.name,standard:e.standard,manufacturerPartNumber:e.manufacturer_part_number,supplierPartNumbers:e.supplier_part_numbers??void 0,pinLabels:Asi(e,t)??s?.port_labels??void 0,schPortArrangement:psi(s),schWidth:s?.size?.width,schHeight:s?.size?.height,schPinSpacing:s?.pin_spacing,schX:s?.center?.x,schY:s?.center?.y,layer:r?.layer,pcbX:c,pcbY:l,pcbRotation:r?.rotation,doNotPlace:r?.do_not_place,obstructsWithinBounds:r?.obstructs_within_bounds},u=new $in(d);if(a?.footprinter_string)Object.assign(u.props,{footprint:a.footprinter_string}),Object.assign(u._parsedProps,{footprint:a.footprinter_string});if(r){let h=sb(r,{...t,normalComponent:u});if(h)u.add(h)}if(e.source_group_id&&i?.has(e.source_group_id))i.get(e.source_group_id).add(u);else o.add(u)}var Zin=(e)=>typeof e==="string"&&!vW(e)&&!eD(e)&&!ZT(e)&&!Poe(e),ern=class extends $c{get config(){let e={schottky:"schottky_diode",avalanche:"avalanche_diode",zener:"zener_diode",photodiode:"photodiode"},t=this.props.schottky?"schottky":this.props.avalanche?"avalanche":this.props.zener?"zener":this.props.photo?"photo":this.props.standard?"standard":this.props.variant,n=t==="photo"?"photodiode":t,o=n&&e[n]||this.props.symbolName||"diode",i=this.props.schSize==="sm"||this.props.schSize==="xs"?this.props.schSize:void 0,r=i&&(o==="diode"||o==="avalanche_diode"||o==="zener_diode")?`${o}_${i}`:void 0;return{schematicSymbolName:r&&`${r}_right`in ra?r:o,componentName:"Diode",zodProps:y2t,sourceFtype:"simple_diode"}}initPorts(){let e=this.children.some((i)=>i.componentName==="Footprint"),t=this.resolveFootprint(),n=Boolean(this._resolvePinLabels()),o=!n&&!e&&(!t||Zin(t));super.initPorts({pinCount:2,ignoreSymbolPorts:!n&&!o,additionalAliases:{pin1:o?["anode","pos","left"]:[],pin2:o?["cathode","neg","right"]:[]}})}doInitialSourceRender(){let{db:e}=this.root,{_parsedProps:t}=this,n=e.source_component.insert({ftype:"simple_diode",name:this.name,manufacturer_part_number:qi(t),supplier_part_numbers:t.supplierPartNumbers,are_pins_interchangeable:!1,display_name:t.displayName});this.source_component_id=n.source_component_id}getRefDesPrefixes(){return["D"]}get pos(){return this.portMap.pos}get anode(){return this.portMap.anode}get neg(){return this.portMap.neg}get cathode(){return this.portMap.cathode}},gsi=(e)=>Array.from(new Set([e?.name,...e?.port_hints??[]].filter((t)=>typeof t==="string"&&t.length>0))),fsi=(e,t)=>{let n=t.injectionDb.source_port.list().filter((i)=>i.source_component_id===e.source_component_id),o={};for(let i of n){if(i.pin_number===void 0||i.pin_number===null)continue;let r=gsi(i);if(r.length===0)continue;o[`pin${i.pin_number}`]=r}return Object.keys(o).length>0?o:void 0};function ysi(e,t){let{injectionDb:n,subcircuit:o,groupsMap:i}=t,r=n.pcb_component.getWhere({source_component_id:e.source_component_id}),{pcbX:s,pcbY:a}=ab({pcbComponent:r,sourceGroupId:e.source_group_id,inflatorContext:t}),c=fsi(e,t),l={name:e.name,manufacturerPartNumber:e.manufacturer_part_number,supplierPartNumbers:e.supplier_part_numbers??void 0,pinLabels:c,layer:r?.layer,pcbX:s,pcbY:a,pcbRotation:r?.rotation,doNotPlace:r?.do_not_place,obstructsWithinBounds:r?.obstructs_within_bounds},d=new ern(l);if(r){let u=sb(r,{...t,normalComponent:d});if(u)d.add(u)}if(e.source_group_id&&i?.has(e.source_group_id))i.get(e.source_group_id).add(d);else o.add(d)}var xsi=class extends $c{get config(){return{componentName:"Fiducial",zodProps:Bme,sourceFtype:"simple_fiducial"}}doInitialSchematicComponentRender(){}};function Csi(e,t){let{injectionDb:n,subcircuit:o,groupsMap:i}=t,r=n.pcb_component.getWhere({source_component_id:e.source_component_id}),{pcbX:s,pcbY:a}=ab({pcbComponent:r,sourceGroupId:e.source_group_id,inflatorContext:t}),c=n.pcb_smtpad.list({pcb_component_id:r?.pcb_component_id}).find((u)=>u.shape==="circle"),l=c&&"radius"in c?c.radius*2:"1mm",d=new xsi({name:e.name,padDiameter:l,layer:r?.layer,pcbX:s,pcbY:a,pcbRotation:r?.rotation,doNotPlace:r?.do_not_place,obstructsWithinBounds:r?.obstructs_within_bounds});if(r){let u=sb(r,{...t,normalComponent:d});if(u)d.add(u)}if(e.source_group_id&&i?.has(e.source_group_id))i.get(e.source_group_id).add(d);else o.add(d)}function trn(e,t){let n=t._getGlobalPcbPositionBeforeLayout(),o=t._getGlobalPcbPositionAfterLayout();return _o(So(o.x-n.x,o.y-n.y),e._computePcbGlobalTransformBeforeLayout())}var xJt=({point:e,endpoint:t},n)=>Math.hypot(e.x-t.x,e.y-t.y)<0.0001&&(e.pcb_port_id?n.pcb_port.get(e.pcb_port_id).layers.some((o)=>o===t.layer):e.layer===t.layer);function Isi(e,t,n){return nrn({group:e.getGroup(),subcircuit:e.getSubcircuit(),paths:e._parsedProps.pcbTracePaths??[],phaseIndex:e._parsedProps.phaseIndex,input:t,isFanout:n})}function nrn({group:e,subcircuit:t,paths:n,phaseIndex:o,input:i,isFanout:r}){let s=MF(i.layerCount),a=new Map(i.connections.map((A)=>[A,[...A.pointsToConnect]])),c=new Set,l=new Set,d=[];for(let[A,m]of n.entries()){let p=t.selectOne(m.connection,{type:"port"});if(!p)throw Error(`Saved phase path "${m.connection}" must select a PCB port`);if(l.has(p))throw Error(`Duplicate saved phase path for "${m.connection}"`);l.add(p);let g=i.connections.filter((Q)=>Q.pointsToConnect.some((N)=>N.pcb_port_id===p.pcb_port_id));if(g.length!==1)throw Error(`Saved phase path "${m.connection}" must select exactly one connection in this phase`);let _=g[0],f=a.get(_),y=f.findIndex((Q)=>Q.pcb_port_id===p.pcb_port_id);if(y<0)throw Error(`Saved phase path "${m.connection}" starts at an endpoint already joined by another path`);let x=trn(e,p),C=nin(m.route).map((Q)=>({...Q,...tt(x,Q)}));for(let Q of C)if((Q.route_type==="wire"?[Q.layer]:[Q.from_layer,Q.to_layer]).some((F)=>!s.includes(F)))throw Error(`Saved phase path "${m.connection}" uses a layer unavailable on this board`);let I=C[0],b=C.at(-1),P=I.route_type==="wire"?I.layer:I.from_layer,E=b.route_type==="wire"?b.layer:b.to_layer;if(!xJt({point:f[y],endpoint:{...I,layer:P}},p.root.db))throw Error(`Saved phase path "${m.connection}" must start at its PCB port on an available layer`);let B=f.findIndex((Q,N)=>N!==y&&xJt({point:Q,endpoint:{...b,layer:E}},p.root.db));if(!i.allowViaInPad&&(I.route_type==="via"||b.route_type==="via"&&B>=0))throw Error(`Saved phase path "${m.connection}" has a via at a pad; enable allowViaInPad`);let w=`saved_phase_${e.pcb_group_id}_${o??"default"}_${A}`;if(B<0&&!r)throw Error(`Saved phase path "${m.connection}" must end at another connection endpoint; use autorouter="fanout" for saved escapes`);if(B>=0)f.splice(y,1);else f[y]={x:b.x,y:b.y,layer:E,pointId:`${w}_exit`};let T=C.flatMap((Q,N)=>{if(Q.route_type!=="via")return[Q];let{fromWidth:F,toWidth:H}=Voe(C,N,i.minTraceWidth);return[{route_type:"wire",x:Q.x,y:Q.y,layer:Q.from_layer,width:F},Q,{route_type:"wire",x:Q.x,y:Q.y,layer:Q.to_layer,width:H}]});if(b.route_type==="via"){let{toWidth:Q}=Voe(C,C.length-1,i.minTraceWidth);T.push({route_type:"wire",x:b.x,y:b.y,layer:b.to_layer,width:Q})}c.add(_),d.push({type:"pcb_trace",pcb_trace_id:w,connection_name:_.name,connectsTo:[_.source_trace_id,..._.pointsToConnect.map((Q)=>Q.pointId)].filter((Q)=>Boolean(Q)),route:T})}for(let A of i.connections){if(!c.has(A))throw Error(`pcbTracePaths must cover every connection in the phase; missing: ${A.name}`);if(!r&&a.get(A).length>1)throw Error(`Saved phase paths for "${A.name}" must connect every endpoint; use autorouter="fanout" for saved escapes`)}let u=i.connections.flatMap((A)=>{let m=a.get(A);return m.length>1?[{...A,pointsToConnect:m}]:[]}),h=new Set(u.map((A)=>A.name));return{traces:d,outputSimpleRouteJson:r?{...i,connections:u,buses:i.buses?.map((A)=>({...A,connectionNames:A.connectionNames.filter((m)=>h.has(m))})).filter((A)=>A.connectionNames.length>0),differentialPairs:i.differentialPairs?.filter((A)=>A.connectionNames.every((m)=>h.has(m))),traces:[...i.traces??[],...d]}:void 0}}var CJt=(e,t,n=!1)=>Math.hypot(e.x-t.x,e.y-t.y)<0.0001&&(e.route_type==="wire"?e.layer:n?e.to_layer:e.from_layer)===t.layer;function bsi({group:e,subcircuit:t,input:n,traces:o,isFanout:i}){try{let r=new Map(t.selectAll("port").filter((A)=>A.pcb_port_id).map((A)=>[A.pcb_port_id,A])),s=n.connections.flatMap((A)=>A.pointsToConnect),a=o.map((A)=>{if(A.route.length<2||A.route.some((m)=>m.route_type!=="wire"&&m.route_type!=="via"))throw Error("Only port-anchored wire/via routes can be saved");return A.route}),c=a.map((A)=>[s.filter((m)=>CJt(A[0],m)),s.filter((m)=>CJt(A.at(-1),m,!0))]),l=new Map;for(let A of c)for(let m of new Set(A.flat()))l.set(m,(l.get(m)??0)+1);let d=[],u=new Set,h=new Set(a.keys());while(h.size){let A=!1;for(let m of h)for(let p of[!1,!0]){let g=c[m][p?1:0].filter((I)=>I.pcb_port_id);if(g.length!==1)continue;let _=g[0];if(!_.pcb_port_id||l.get(_)!==1)continue;let f=r.get(_.pcb_port_id);if(!f||u.has(f))continue;let y=_.port_selector??f.getPortSelector();if(t.selectOne(y,{type:"port"})!==f)throw Error(`PCB port selector is not unique: ${y}`);let x=p?a[m].toReversed().map((I)=>I.route_type==="via"?{...I,from_layer:I.to_layer,to_layer:I.from_layer}:I):a[m],C=fz(trn(e,f));d.push(j$.parse({connection:y,route:x.map((I)=>({...I,...tt(C,I)}))})),u.add(f),h.delete(m);for(let I of new Set(c[m].flat()))l.set(I,l.get(I)-1);A=!0;break}if(!A)throw Error("Routes contain a junction or endpoint that cannot select a unique PCB port")}return nrn({group:e,subcircuit:t,paths:d,input:n,isFanout:i}),{pcbTracePaths:d}}catch(r){return{pcbTracePathsUnavailableReason:r instanceof Error?r.message:String(r)}}}function Ssi(e,t){if(t.size===0)return e;let n=(e.traces??[]).filter((i)=>t.has(i.pcb_trace_id));if(n.length===0)return e;let o=[];for(let i of n){let r=[i.connection_name??i.pcb_trace_id,...i.connectsTo??[]];for(let[s,a]of i.route.entries()){if(a.route_type==="via"){let h=MF(e.layerCount),A=h.findIndex((g)=>g===a.from_layer),m=h.findIndex((g)=>g===a.to_layer),p=a.via_diameter??e.minViaPadDiameter??e.minViaDiameter??0.6;o.push({type:"rect",center:{x:a.x,y:a.y},width:p,height:p,layers:h.slice(Math.min(A,m),Math.max(A,m)+1),connectedTo:r})}let c=i.route[s+1];if(!c||a.route_type!=="wire"&&a.route_type!=="via"||c.route_type!=="wire"&&c.route_type!=="via")continue;let l=a.route_type==="wire"?a.width:c.route_type==="wire"?c.width:e.minTraceWidth,d=a.route_type==="wire"?a.layer:a.to_layer,u=a.x===c.x||a.y===c.y?1:Math.max(1,Math.ceil(Math.hypot(c.x-a.x,c.y-a.y)/l));for(let h=0;h<u;h++){let A=a.x+(c.x-a.x)*h/u,m=a.y+(c.y-a.y)*h/u,p=a.x+(c.x-a.x)*(h+1)/u,g=a.y+(c.y-a.y)*(h+1)/u;o.push({type:"rect",center:{x:(A+p)/2,y:(m+g)/2},width:Math.abs(p-A)+l,height:Math.abs(g-m)+l,layers:[d],connectedTo:r})}}}return{...e,traces:e.traces?.filter((i)=>!t.has(i.pcb_trace_id)),obstacles:[...e.obstacles,...o]}}function Psi(e){let t=[...e.schematic_net_label.list(),...e.schematic_text.list().filter((a)=>a.source_trace_id)];if(t.length===0)return;let n=js(e.toArray().filter((a)=>a.type.startsWith("source_")));n.addConnections([...e.source_net.list().map((a)=>[a.source_net_id]),...e.source_component_internal_connection.list().map((a)=>a.source_port_ids)]);let o=t.map((a)=>{let c=a.type==="schematic_net_label",l=a.source_trace_id??(c&&a.schematic_trace_id?e.schematic_trace.get(a.schematic_trace_id)?.source_trace_id:void 0),d=(c?n.getNetConnectedToId(a.source_net_id):void 0)??(l?n.getNetConnectedToId(l):void 0);return{label:a,network:d}}),i=new Map,r=(a,c)=>{if(!a.trim()||c===void 0)return;let l=i.get(a)??[];if(!l.includes(c))l.push(c);i.set(a,l)};for(let{label:a,network:c}of o)r(a.text,c);let s=(a)=>[...n.getIdsConnectedToNet(a)].sort()[0];for(let a of i.values())a.sort((c,l)=>s(c).localeCompare(s(l),"en",{numeric:!0}));for(let{label:a,network:c}of o){let l=i.get(a.text)??[],d=c!==void 0&&l.length>1?String(l.indexOf(c)+1):void 0;if(a.display_superscript===d)continue;if(a.type==="schematic_net_label")e.schematic_net_label.update(a.schematic_net_label_id,{display_superscript:d});else e.schematic_text.update(a.schematic_text_id,{display_superscript:d})}}var Cxe=(e)=>typeof e==="object"&&e!==null&&("isAssemblyDeviceContainer"in e)&&e.isAssemblyDeviceContainer===!0;function wF(e){let t=`${e.connectionName}:source-${e.sourcePointIndex}`;return{boundaryExitPointId:`fanout-exit:${t}`,planeExitPointId:`fanout-plane:${t}`,traceId:`fanout:${t}`,viaObstacleId:`fanout-via:${t}`,planeEndpointPointId:`fanout-plane-endpoint-point:${t}`,planeEndpointTraceId:`fanout-plane-endpoint:${t}`,planeEndpointViaObstacleId:`fanout-plane-endpoint-via:${t}`}}function vsi(e){return`fanout-completion:${e.connectionName}:source-${e.sourcePointIndex}:${e.candidateIndex}`}var mB=0.000000001;function yCe(e){return e.shape==="circle"}function Woe(e,t){let n=-(t.ccwRotationDegrees??0)*Math.PI/180,o=e.x-t.center.x,i=e.y-t.center.y;return{x:o*Math.cos(n)-i*Math.sin(n),y:o*Math.sin(n)+i*Math.cos(n)}}function kt(e,t){return Math.hypot(e.x-t.x,e.y-t.y)}function Bi(e,t,n){let o=n.x-t.x,i=n.y-t.y,r=o*o+i*i,s=r<mB?0:((e.x-t.x)*o+(e.y-t.y)*i)/r,a=Math.max(0,Math.min(1,s));return Math.hypot(e.x-(t.x+a*o),e.y-(t.y+a*i))}function Qye(e,t,n){return(t.x-e.x)*(n.y-e.y)-(t.y-e.y)*(n.x-e.x)}function Esi(e,t,n,o){let i=Qye(n,o,e),r=Qye(n,o,t),s=Qye(e,t,n),a=Qye(e,t,o);return(i>0&&r<0||i<0&&r>0)&&(s>0&&a<0||s<0&&a>0)}function ad(e,t,n,o){if(Esi(e,t,n,o))return 0;return Math.min(Bi(e,n,o),Bi(t,n,o),Bi(n,e,t),Bi(o,e,t))}function AX(e,t,n=mB){if(yCe(t))return kt(e,t.center)<=t.width/2+n;let o=Woe(e,t);return Math.abs(o.x)<=t.width/2+n&&Math.abs(o.y)<=t.height/2+n}function xCe(e){let{center:t,diameter:n,obstacle:o,tolerance:i=mB}=e,r=n/2;if(yCe(o))return kt(t,o.center)+r<=o.width/2+i;let s=Woe(t,o);return Math.abs(s.x)+r<=o.width/2+i&&Math.abs(s.y)+r<=o.height/2+i}function jy(e,t){if(yCe(t))return Math.max(0,kt(e,t.center)-t.width/2);let n=Woe(e,t),o=Math.max(Math.abs(n.x)-t.width/2,0),i=Math.max(Math.abs(n.y)-t.height/2,0);return Math.hypot(o,i)}function Jc(e,t){if(yCe(t))return Math.max(0,Bi(t.center,e.start,e.end)-t.width/2);let n=Woe(e.start,t),o=Woe(e.end,t);if(Math.abs(n.x)<=t.width/2+mB&&Math.abs(n.y)<=t.height/2+mB)return 0;if(Math.abs(o.x)<=t.width/2+mB&&Math.abs(o.y)<=t.height/2+mB)return 0;let i=-t.width/2,r=t.width/2,s=-t.height/2,a=t.height/2,c=[{x:i,y:s},{x:r,y:s},{x:r,y:a},{x:i,y:a}],l=Number.POSITIVE_INFINITY;for(let d=0;d<c.length;d++)l=Math.min(l,ad(n,o,c[d],c[(d+1)%c.length]));return l}function Jm(e,t,n){if(e.layer!==t.layer)return!0;let o=(e.width+t.width)/2+n,i=o+mB;if(Math.min(e.start.x,e.end.x)-Math.max(t.start.x,t.end.x)>i||Math.min(t.start.x,t.end.x)-Math.max(e.start.x,e.end.x)>i||Math.min(e.start.y,e.end.y)-Math.max(t.start.y,t.end.y)>i||Math.min(t.start.y,t.end.y)-Math.max(e.start.y,e.end.y)>i)return!0;return ad(e.start,e.end,t.start,t.end)>=o-mB}var IJt=new WeakMap;function orn(e){return e.netConnectionName??e.rootConnectionName??e.name}function NL(e,t,n){if(!t)return!1;let o=e.get(t)??new Set,i=o.size;return o.add(n),e.set(t,o),o.size!==i}function jze(e,t){let n=new Set;for(let o of t)for(let i of e.get(o)??[])n.add(i);return n}function Msi(e){let t=new Map,n=new Map;for(let a of e.connections){let c=orn(a);t.set(a.name,c),NL(n,a.name,c),NL(n,a.rootConnectionName,c),NL(n,a.netConnectionName,c);for(let l of a.pointsToConnect)NL(n,l.pointId,c),NL(n,l.pcb_port_id,c)}for(let a of e.traces??[]){let c=[a.connection_name,a.pcb_trace_id,...a.connectsTo??[]],l=jze(n,c);if(l.size!==1)continue;let d=[...l][0];t.set(a.connection_name,d);for(let u of c)NL(n,u,d)}for(let a=0;a<2;a++){let c=!1;for(let l of e.obstacles){let d=jze(n,l.connectedTo);if(d.size!==1)continue;let u=[...d][0];for(let h of l.connectedTo)c=NL(n,h,u)||c}if(!c)break}let o=new Map,i=(a)=>{let c=o.get(a)??a;if(o.set(a,c),c===a)return a;let l=i(c);return o.set(a,l),l},r=(a,c)=>{let l=i(a),d=i(c);if(l!==d)o.set(d,l)};for(let a of n.values()){let[c,...l]=[...a];if(!c)continue;for(let d of l)r(c,d)}for(let a of[...e.obstacles.map((c)=>c.connectedTo),...(e.traces??[]).map((c)=>c.connectsTo??[])]){let[c,...l]=[...jze(n,a)];if(!c)continue;for(let d of l)r(c,d)}for(let[a,c]of t)t.set(a,i(c));let s=new Map;for(let[a,c]of n){let l=c.values().next().value;if(l!==void 0)s.set(a,i(l))}return{connectionNetKeys:t,tokenNetKeys:s}}function irn(e){let t=IJt.get(e);if(t)return t;let n=Msi(e);return IJt.set(e,n),n}function Uy(e,t,n){let o=irn(e),i=o.connectionNetKeys.get(t),r=o.connectionNetKeys.get(n);return i!==void 0&&i===r}function ib(e,t,n){let o=irn(e),i=o.connectionNetKeys.get(n);if(!i)return!1;for(let r of t.connectedTo)if(o.tokenNetKeys.get(r)===i)return!0;return!1}function fB(e){if(!Number.isInteger(e)||e<1)throw Error(`FanoutSolver: layerCount must be a positive integer, received ${e}`);if(e===1)return["top"];if(e===2)return["top","bottom"];return["top",...Array.from({length:e-2},(t,n)=>`inner${n+1}`),"bottom"]}function rrn(e,t,n){let o=n.indexOf(e),i=n.indexOf(t);if(o<0||i<0)throw Error(`FanoutSolver: cannot build via span from "${e}" to "${t}"`);let r=Math.min(o,i),s=Math.max(o,i);return n.slice(r,s+1)}function Wy(e){let{fromLayer:t,toLayer:n,layerNames:o,allowBlindAndBuriedVias:i}=e,r=rrn(t,n,o);return i?r:[...o]}function srn(e){let{fromLayer:t,toLayer:n,layers:o,layerNames:i,allowBlindAndBuriedVias:r}=e,s=Wy({fromLayer:t,toLayer:n,layerNames:i,allowBlindAndBuriedVias:r});if(!o)return s;if(o.length===0||!o.includes(t)||!o.includes(n)||o.some((a)=>!i.includes(a)))throw Error(`FanoutSolver: route via from "${t}" to "${n}" has an invalid physical layer span`);return[...o]}function Bsi(e){let{busIds:t,layers:n,layersByBusId:o,maxAssignments:i}=e;if(n.length===0)throw Error("FanoutSolver: no escape layers are available");if(!Number.isInteger(i)||i<1)throw Error(`FanoutSolver: maxLayerCombinations must be positive, received ${i}`);let r=t.map((p)=>o?.[p]??n),s=r.findIndex((p)=>p.length===0);if(s>=0)throw Error(`FanoutSolver: no escape layers are available for bus "${t[s]}"`);let a=r.reduce((p,g)=>p*g.length,1),c=Math.min(i,Number.isFinite(a)?a:i),l=[],d=new Set;function u(p){let g={};for(let f=0;f<t.length;f++)g[t[f]]=r[f][p[f]];let _=JSON.stringify(g);if(d.has(_))return;d.add(_),l.push(g)}if(a<=i){for(let p=0;p<c;p++){let g=[],_=p;for(let f=0;f<t.length;f++){let y=r[f].length,x=_%y;_=Math.floor(_/y),g.push((x+f)%y)}u(g)}return l}function h(p){let g=p|0;return g=Math.imul(g^g>>>16,569420461),g=Math.imul(g^g>>>15,1935289751),(g^g>>>15)>>>0}let A=t.map((p,g)=>g%r[g].length);u(A);let m=Math.max(...r.map((p)=>p.length));for(let p=1;p<m&&l.length<c;p++)u(A.map((g,_)=>(g+p)%r[_].length));for(let p=0;p<t.length&&l.length<c;p++)for(let g=1;g<r[p].length&&l.length<c;g++){let _=[...A];_[p]=(A[p]+g)%r[p].length,u(_)}for(let p=1;l.length<c&&p<c*20;p++)u(t.map((g,_)=>h(p*2654435761+_*2246822507)%r[_].length));return l}var n3=0.000001;function wsi(e){return"layer"in e?[e.layer]:e.layers}function Wne(e,t){return e.some((n)=>t.includes(n))}function Tsi(e,t){let n=[],o;for(let i of e.route){if(i.route_type==="via"){n.push({type:"via",center:{x:i.x,y:i.y},diameter:i.via_diameter??0,layers:rrn(i.from_layer,i.to_layer,t)}),o=void 0;continue}if(i.route_type!=="wire")continue;if(o&&o.layer===i.layer&&kt(o,i)>n3)n.push({type:"segment",segment:{start:{x:o.x,y:o.y},end:{x:i.x,y:i.y},width:i.width,layer:i.layer}});o=i}return n}function oB(e,t){if(e.type==="plane"&&t.type==="plane")return e.layer===t.layer;if(e.type==="plane"&&t.type==="via")return t.layers.includes(e.layer);if(e.type==="via"&&t.type==="plane")return oB(t,e);if(e.type==="plane"&&t.type==="segment")return e.layer===t.segment.layer;if(e.type==="segment"&&t.type==="plane")return oB(t,e);if(e.type==="endpoint"&&t.type==="endpoint")return Wne(e.layers,t.layers)&&kt(e.point,t.point)<=n3;if(e.type==="endpoint"&&t.type==="obstacle")return Wne(e.layers,t.obstacle.layers)&&AX(e.point,t.obstacle,n3);if(e.type==="obstacle"&&t.type==="endpoint")return oB(t,e);if(e.type==="endpoint"&&t.type==="segment")return e.layers.includes(t.segment.layer)&&Bi(e.point,t.segment.start,t.segment.end)<=t.segment.width/2+n3;if(e.type==="segment"&&t.type==="endpoint")return oB(t,e);if(e.type==="endpoint"&&t.type==="via")return Wne(e.layers,t.layers)&&kt(e.point,t.center)<=t.diameter/2+n3;if(e.type==="via"&&t.type==="endpoint")return oB(t,e);if(e.type==="obstacle"&&t.type==="segment")return e.obstacle.layers.includes(t.segment.layer)&&Jc(t.segment,e.obstacle)<=t.segment.width/2+n3;if(e.type==="segment"&&t.type==="obstacle")return oB(t,e);if(e.type==="obstacle"&&t.type==="via")return Wne(e.obstacle.layers,t.layers)&&jy(t.center,e.obstacle)<=t.diameter/2+n3;if(e.type==="via"&&t.type==="obstacle")return oB(t,e);if(e.type==="segment"&&t.type==="segment")return e.segment.layer===t.segment.layer&&ad(e.segment.start,e.segment.end,t.segment.start,t.segment.end)<=(e.segment.width+t.segment.width)/2+n3;if(e.type==="segment"&&t.type==="via")return t.layers.includes(e.segment.layer)&&Bi(t.center,e.segment.start,e.segment.end)<=t.diameter/2+e.segment.width/2+n3;if(e.type==="via"&&t.type==="segment")return oB(t,e);if(e.type==="via"&&t.type==="via")return Wne(e.layers,t.layers)&&kt(e.center,t.center)<=(e.diameter+t.diameter)/2+n3;return!1}var Dsi=class{parent;constructor(e){this.parent=Array.from({length:e},(t,n)=>n)}find(e){let t=this.parent[e];if(t===e)return e;let n=this.find(t);return this.parent[e]=n,n}union(e,t){let n=this.find(e),o=this.find(t);if(n!==o)this.parent[o]=n}};function Nsi(e,t,n){return Boolean(t.connection_name&&Uy(e,t.connection_name,n.name))}function eb(e){let{inputSrj:t,routedSrj:n}=e,o=n.fanoutPlaneConnectivity,i=fB(n.layerCount),r=new Map;for(let d of t.connections){let u=orn(d),h=r.get(u)??[];h.push(d),r.set(u,h)}let s=[],a=0,c=0;for(let d of r.values()){let u=d[0],h=d.flatMap((y)=>y.pointsToConnect.map((x,C)=>({type:"endpoint",connectionName:y.name,endpointIndex:C,point:x,layers:wsi(x)}))),A=t.obstacles.filter((y)=>ib(t,y,u.name)).map((y)=>({type:"obstacle",obstacle:y})),m=(n.traces??[]).filter((y)=>Nsi(t,y,u)).flatMap((y)=>Tsi(y,i)),p=[...new Set((o??[]).flatMap((y)=>Uy(t,y.connectionName,u.name)?[y.layer]:[]))].map((y)=>({type:"plane",layer:y})),g=[...h,...A,...m,...p],_=new Dsi(g.length);for(let y=0;y<g.length;y++)for(let x=y+1;x<g.length;x++)if(oB(g[y],g[x]))_.union(y,x);let f=new Map;for(let y=0;y<h.length;y++){let x=h[y],C=f.get(x.connectionName)??[];C[x.endpointIndex]=y,f.set(x.connectionName,C)}for(let y of d){let x=f.get(y.name)??[],C=x[0],I=C===void 0?void 0:_.find(C),b=x.flatMap((P,E)=>I===void 0||_.find(P)!==I?[E]:[]);if(c+=x.length-b.length,b.length===0)a++;else s.push({code:"original-endpoints-disconnected",connectionName:y.name,disconnectedEndpointIndices:b,message:`Connection ${y.name} has no physical copper path from endpoint 0 to original endpoint${b.length===1?"":"s"} ${b.join(", ")}`})}}let l=t.connections.reduce((d,u)=>d+u.pointsToConnect.length,0);return{valid:s.length===0,checkedConnectionCount:t.connections.length,connectedConnectionCount:a,checkedEndpointCount:l,connectedEndpointCount:c,issues:s}}var i3=0.000001;function Hie(e){let{inputSrj:t,segment:n,bodyObstacle:o,connectionName:i}=e;if(o.connectedTo.length>0||!o.componentId)return!1;let r=t.obstacles.filter((s)=>s.componentId===o.componentId&&s.layers.includes(n.layer)&&ib(t,s,i));for(let s of r)for(let[a,c]of[[n.start,n.end],[n.end,n.start]]){if(!AX(a,s,i3))continue;let l={x:a.x-o.center.x,y:a.y-o.center.y},d={x:c.x-a.x,y:c.y-a.y};if(l.x*d.x+l.y*d.y>i3)return!0}return!1}function qze(e,t){return kt(e,t)<=i3}function Qx(e,t){e.push(t)}function Rsi(e){let{srj:t,trace:n,connectionName:o,layerNames:i,allowBlindAndBuriedVias:r,issues:s}=e,a=[],c=[],l,d;for(let u of n.route){if(u.route_type==="via"){let h=srn({fromLayer:u.from_layer,toLayer:u.to_layer,layers:"layers"in u&&Array.isArray(u.layers)?u.layers:void 0,layerNames:i,allowBlindAndBuriedVias:r});if(c.push({center:{x:u.x,y:u.y},diameter:u.via_diameter??t.minViaPadDiameter??t.minTraceWidth,spanLayers:h}),!l||!qze(l,u)||l.layer!==u.from_layer)Qx(s,{code:"disconnected-trace",traceId:n.pcb_trace_id,connectionName:o,message:`Trace ${n.pcb_trace_id} reaches a via without a matching ${u.from_layer} wire endpoint`});d=u;continue}if(u.route_type!=="wire"){Qx(s,{code:"unsupported-route-point",traceId:n.pcb_trace_id,connectionName:o,message:`Trace ${n.pcb_trace_id} contains unsupported ${u.route_type} geometry`}),l=void 0,d=void 0;continue}if(d){if(!qze(u,d)||u.layer!==d.to_layer)Qx(s,{code:"disconnected-trace",traceId:n.pcb_trace_id,connectionName:o,message:`Trace ${n.pcb_trace_id} does not continue from its via on ${d.to_layer}`});l=u,d=void 0;continue}if(l){if(l.layer!==u.layer)Qx(s,{code:"disconnected-trace",traceId:n.pcb_trace_id,connectionName:o,message:`Trace ${n.pcb_trace_id} changes from ${l.layer} to ${u.layer} without a via`});else if(!qze(l,u))a.push({start:{x:l.x,y:l.y},end:{x:u.x,y:u.y},width:u.width,layer:u.layer})}l=u}if(d)Qx(s,{code:"disconnected-trace",traceId:n.pcb_trace_id,connectionName:o,message:`Trace ${n.pcb_trace_id} ends at a via without a wire on ${d.to_layer}`});return{trace:n,connectionName:o,segments:a,vias:c}}function qd(e){let{inputSrj:t,routedSrj:n,clearance:o,allowBlindAndBuriedVias:i=!0}=e,r=[],s=fB(n.layerCount),a=[],c=[t,n].flatMap((l)=>l.connections.flatMap((d)=>d.pointsToConnect.map((u)=>({connectionName:d.name,point:u}))));for(let l of n.traces??[]){let d=l.connection_name;if(!d||!t.connections.some((u)=>u.name===d)){Qx(r,{code:"unknown-trace-connection",traceId:l.pcb_trace_id,...d?{connectionName:d}:{},message:`Trace ${l.pcb_trace_id} does not identify an input connection`});continue}a.push(Rsi({srj:n,trace:l,connectionName:d,layerNames:s,allowBlindAndBuriedVias:i,issues:r}))}for(let l of a){let d=new Set(t.obstacles.filter((h)=>ib(t,h,l.connectionName))),u=t.obstacles.filter((h)=>!d.has(h));for(let h of l.segments)for(let A of u){if(!A.layers.includes(h.layer))continue;if(Hie({inputSrj:t,segment:h,bodyObstacle:A,connectionName:l.connectionName}))continue;let m=Jc(h,A),p=h.width/2+o;if(m<p-i3)Qx(r,{code:"trace-obstacle-clearance",traceId:l.trace.pcb_trace_id,connectionName:l.connectionName,layer:h.layer,obstacleId:A.obstacleId,message:`Trace ${l.trace.pcb_trace_id} on ${h.layer} is ${m.toFixed(4)}mm from different-net obstacle ${A.obstacleId}; ${p.toFixed(4)}mm is required`})}for(let h of l.vias){let A=c.find(({point:p})=>kt(h.center,p)<=i3),m=t.allowViaInPad===!0&&t.obstacles.some((p)=>p.layers.some((g)=>h.spanLayers.includes(g))&&d.has(p)&&xCe({center:h.center,diameter:h.diameter,obstacle:p,tolerance:i3}));if(A&&!m)Qx(r,{code:"via-at-endpoint",traceId:l.trace.pcb_trace_id,connectionName:l.connectionName,otherConnectionName:A.connectionName,message:`Via in ${l.trace.pcb_trace_id} is placed directly at an original or routed connection endpoint`});for(let p of u){if(!p.layers.some((f)=>h.spanLayers.includes(f)))continue;let g=jy(h.center,p),_=h.diameter/2+o;if(g<_-i3)Qx(r,{code:"via-obstacle-clearance",traceId:l.trace.pcb_trace_id,connectionName:l.connectionName,obstacleId:p.obstacleId,message:`Via in ${l.trace.pcb_trace_id} is ${g.toFixed(4)}mm from different-net obstacle ${p.obstacleId} on its layer span; ${_.toFixed(4)}mm is required`})}}}for(let l=0;l<a.length;l++){let d=a[l];for(let u=l+1;u<a.length;u++){let h=a[u];if(Uy(t,d.connectionName,h.connectionName))continue;for(let A of d.segments){for(let m of h.segments){if(Jm(A,m,o))continue;Qx(r,{code:"different-net-trace-clearance",traceId:d.trace.pcb_trace_id,connectionName:d.connectionName,otherTraceId:h.trace.pcb_trace_id,otherConnectionName:h.connectionName,layer:A.layer,message:`Different-net traces ${d.trace.pcb_trace_id} and ${h.trace.pcb_trace_id} intersect or violate clearance on ${A.layer}`})}for(let m of h.vias){if(!m.spanLayers.includes(A.layer)||Bi(m.center,A.start,A.end)>=m.diameter/2+A.width/2+o-i3)continue;Qx(r,{code:"different-net-trace-via-clearance",traceId:d.trace.pcb_trace_id,connectionName:d.connectionName,otherTraceId:h.trace.pcb_trace_id,otherConnectionName:h.connectionName,layer:A.layer,message:`Trace ${d.trace.pcb_trace_id} violates via clearance to ${h.trace.pcb_trace_id} on ${A.layer}`})}}for(let A of d.vias){for(let m of h.segments){if(!A.spanLayers.includes(m.layer)||Bi(A.center,m.start,m.end)>=A.diameter/2+m.width/2+o-i3)continue;Qx(r,{code:"different-net-trace-via-clearance",traceId:d.trace.pcb_trace_id,connectionName:d.connectionName,otherTraceId:h.trace.pcb_trace_id,otherConnectionName:h.connectionName,layer:m.layer,message:`Via in ${d.trace.pcb_trace_id} violates trace clearance to ${h.trace.pcb_trace_id} on ${m.layer}`})}for(let m of h.vias){if(!A.spanLayers.some((p)=>m.spanLayers.includes(p))||kt(A.center,m.center)>=(A.diameter+m.diameter)/2+o-i3)continue;Qx(r,{code:"different-net-via-clearance",traceId:d.trace.pcb_trace_id,connectionName:d.connectionName,otherTraceId:h.trace.pcb_trace_id,otherConnectionName:h.connectionName,message:`Different-net vias in ${d.trace.pcb_trace_id} and ${h.trace.pcb_trace_id} violate clearance on an overlapping layer span`})}}}}return{valid:r.length===0,checkedTraceCount:n.traces?.length??0,checkedSegmentCount:a.reduce((l,d)=>l+d.segments.length,0),checkedViaCount:a.reduce((l,d)=>l+d.vias.length,0),issues:r}}var XUe=0.000000001;function Xoe(e,t){if("layer"in e)return e.layer;if(t&&e.layers.includes(t))return t;let n=e.layers[0];if(!n)throw Error("Endpoint completion received a layerless point");return n}function bJt(e){let t=[];for(let n of e){if(t.at(-1)&&kt(t.at(-1),n)<XUe)continue;t.push(n)}return t}function SJt(e,t){let n=bJt(e);if(n.length<3)return n;let o=[n[0]];for(let i=1;i<n.length-1;i++){let r=n[i-1],s=n[i],a=n[i+1],c=kt(r,s),l=kt(s,a),d={x:(s.x-r.x)/c,y:(s.y-r.y)/c},u={x:(a.x-s.x)/l,y:(a.y-s.y)/l};if(Math.abs(d.x*u.x+d.y*u.y)>0.000001){o.push(s);continue}let h=Math.min(t,c/2,l/2);o.push({x:s.x-d.x*h,y:s.y-d.y*h}),o.push({x:s.x+u.x*h,y:s.y+u.y*h})}return o.push(n.at(-1)),bJt(o)}function Qsi(e){let{inputSrj:t,connectionName:n,target:o,targetLayer:i}=e;return t.obstacles.find((r)=>r.layers.includes(i)&&ib(t,r,n)&&AX(o,r,0.000001))}function ksi(e){let{inputSrj:t,plan:n}=e,o=Xoe(n.targetPoint),i=Qsi({inputSrj:t,connectionName:n.connectionName,target:n.targetPoint,targetLayer:o}),r=t.obstacles.find((l)=>l.componentId===i?.componentId&&l.connectedTo.length===0),s=r?{x:n.targetPoint.x-r.center.x,y:n.targetPoint.y-r.center.y}:{x:n.targetPoint.x-n.sourcePoint.x,y:n.targetPoint.y-n.sourcePoint.y},a=Math.hypot(s.x,s.y),c=a>XUe?{x:s.x/a,y:s.y/a}:{x:1,y:0};return{outward:c,perpendicular:{x:-c.y,y:c.x}}}function arn(e){let{plan:t,branchStart:n,viaPoint:o,assignedLayerPath:i,terminalApproach:r,traceWidth:s,viaDiameter:a,viaHoleDiameter:c,candidateIndex:l,chamfer:d}=e,u=Xoe(t.targetPoint),h=SJt(i,d),A=SJt([o,...r?[r]:[],t.targetPoint],d),m=h.map((p)=>({route_type:"wire",x:p.x,y:p.y,width:s,layer:n.layer}));if(n.layer!==u)m.push({route_type:"via",x:o.x,y:o.y,from_layer:n.layer,to_layer:u,via_diameter:a,via_hole_diameter:c}),m.push({route_type:"wire",x:o.x,y:o.y,width:s,layer:u});for(let p of A.slice(1))m.push({route_type:"wire",x:p.x,y:p.y,width:s,layer:u});return{type:"pcb_trace",pcb_trace_id:vsi({connectionName:t.connectionName,sourcePointIndex:t.sourcePointIndex,candidateIndex:l}),connection_name:t.connectionName,route:m}}function cF(e,t){return!e.issues.some((n)=>n.connectionName===t)}function KUe(e){let{trace:t,endpointSrjs:n}=e,o=n.flatMap((i)=>i.connections.flatMap((r)=>r.pointsToConnect));return t.route.some((i)=>i.route_type==="via"&&o.some((r)=>kt(i,r)<=0.000001))}function Lsi(e){let{inputSrj:t,fanoutSrj:n,plan:o,acceptedTraces:i,traceWidth:r,viaDiameter:s,viaHoleDiameter:a,clearance:c,allowBlindAndBuriedVias:l}=e,{outward:d,perpendicular:u}=ksi({inputSrj:t,plan:o}),h=[...o.via?[{x:o.via.center.x,y:o.via.center.y,layer:o.targetLayer}]:[],{x:o.sourcePoint.x,y:o.sourcePoint.y,layer:o.sourceLayer}],A=[],m=Number.POSITIVE_INFINITY,p=0,g=t.connections.length>32?600:Number.POSITIVE_INFINITY,_=o.termination.type==="plane"?crn({trace:o.trace,endpoint:o.exitPoint,layer:o.sourceLayer,distances:[0.2,0.3,0.4]}):[],f=[...o.termination.type==="plane"&&o.via?[{...o.via.center}]:[],..._,...[0.4,0.8,1.2,1.6].flatMap((y)=>[0,0.4,-0.4,0.8,-0.8,1.2,-1.2,1.6,-1.6].map((x)=>({x:o.sourcePoint.x+d.x*y+u.x*x,y:o.sourcePoint.y+d.y*y+u.y*x})))];for(let y of f){let x=[...o.termination.type==="plane"?[{...y,layer:o.targetLayer}]:[],...h,..._.flatMap((C)=>kt(C,y)<=0.000001?[{...C,layer:o.sourceLayer}]:[])];for(let C of x){let I=kt(C,y)<=0.000001?[[C]]:[[C,y],[C,{x:y.x,y:C.y},y],[C,{x:C.x,y:y.y},y],...[0.4,-0.4].map((b)=>[C,{x:C.x+b,y:C.y},{x:C.x+b,y:y.y},y])];for(let b of I){let P=[void 0,...[0.4,0.8].map((E)=>({x:o.targetPoint.x+d.x*E,y:o.targetPoint.y+d.y*E})),...[0.4,-0.4].map((E)=>({x:o.targetPoint.x+d.x*0.4+u.x*E,y:o.targetPoint.y+d.y*0.4+u.y*E}))];for(let E of P){if(p>=g)return{blockingConnectionNames:A};let B=arn({plan:o,branchStart:C,viaPoint:y,assignedLayerPath:b,terminalApproach:E,traceWidth:r,viaDiameter:s,viaHoleDiameter:a,candidateIndex:p++,chamfer:0});if(KUe({trace:B,endpointSrjs:[t,n]}))continue;let w={...n,traces:[...n.traces??[],...i,B]},T=qd({inputSrj:t,routedSrj:w,clearance:c,allowBlindAndBuriedVias:l});if(!T.valid){if(T.issues.length<m)m=T.issues.length,A=[...new Set(T.issues.flatMap((N)=>[N.connectionName,N.otherConnectionName].flatMap((F)=>F&&F!==o.connectionName?[F]:[])))];continue}let Q=eb({inputSrj:t,routedSrj:w});if(cF(Q,o.connectionName))return{trace:B,blockingConnectionNames:[]}}}}}return{blockingConnectionNames:A}}function Fsi(e){let{inputSrj:t,fanoutSrj:n,plans:o,traceWidth:i,viaDiameter:r,viaHoleDiameter:s,clearance:a,allowBlindAndBuriedVias:c}=e,l=[],d=[],u=new Set;for(let A of o){let m=Lsi({inputSrj:t,fanoutSrj:n,plan:A,acceptedTraces:l,traceWidth:i,viaDiameter:r,viaHoleDiameter:s,clearance:a,allowBlindAndBuriedVias:c});if(m.trace)l.push(m.trace);else{d.push(A.connectionName);for(let p of m.blockingConnectionNames)u.add(p)}}let h={...n,traces:[...n.traces??[],...l]};return{traces:l,failedConnectionNames:d,blockingConnectionNames:[...u],connectivity:eb({inputSrj:t,routedSrj:h}),drc:qd({inputSrj:t,routedSrj:h,clearance:a,allowBlindAndBuriedVias:c})}}function PJt(e){let t=0,n;for(let o of e.route){if(o.route_type!=="wire"){n=void 0;continue}if(n?.layer===o.layer)t+=kt(n,o);n=o}return t}function Hsi(e){let{fanoutSrj:t,completionTraces:n}=e,o=new Map(n.flatMap((r)=>{let s=r.route.find((a)=>a.route_type==="wire");return s?[[r.connection_name,{x:s.x,y:s.y,layer:s.layer}]]:[]})),i=(t.traces??[]).map((r)=>{if(!r.pcb_trace_id.startsWith("fanout:"))return r;let s=o.get(r.connection_name);if(!s)return r;let a;for(let c=0;c<r.route.length;c++){let l=r.route[c];if(l?.route_type!=="wire"){a=void 0;continue}if(a!==void 0){let d=r.route[a];if(d?.route_type==="wire"&&d.layer===s.layer&&l.layer===s.layer&&Bi(s,d,l)<=0.000001){let u=r.route.slice(0,a+1);if(kt(d,s)>0.000001)u.push({route_type:"wire",x:s.x,y:s.y,width:l.width,layer:s.layer});return{...r,route:u}}}a=c}return r});return{...t,traces:i}}function Osi(e){let{inputSrj:t,fanoutSrj:n,localTraces:o,candidates:i,clearance:r,allowBlindAndBuriedVias:s}=e,a=[...n.traces??[],...o],c={...n,traces:a},l=eb({inputSrj:t,routedSrj:c}),u=i.filter((m)=>m.route.length>1&&m.route.every((p)=>p.route_type==="wire"||p.route_type==="via")&&!KUe({trace:m,endpointSrjs:[t,n]})).filter((m)=>{let p=eb({inputSrj:t,routedSrj:{...n,traces:[...a,m]}});return p.connectedConnectionCount>l.connectedConnectionCount&&cF(p,m.connection_name)}),h={...n,traces:[...a,...u]};if(qd({inputSrj:t,routedSrj:h,clearance:r,allowBlindAndBuriedVias:s}).valid)return u;let A=[];for(let m of u.toSorted((p,g)=>PJt(p)-PJt(g))){let p={...n,traces:[...a,...A,m]};if(!qd({inputSrj:t,routedSrj:p,clearance:r,allowBlindAndBuriedVias:s}).valid)continue;let _=eb({inputSrj:t,routedSrj:{...n,traces:[...a,...A]}}),f=eb({inputSrj:t,routedSrj:p});if(f.connectedConnectionCount>_.connectedConnectionCount&&cF(f,m.connection_name))A.push(m)}return A}function crn(e){let{trace:t,endpoint:n,layer:o,distances:i}=e,r=t.route.findLastIndex((s)=>s.route_type==="wire"&&s.layer===o&&kt(s,n)<=0.000001);if(r<0)return[];return i.flatMap((s)=>{let a=s,c=n;for(let l=r-1;l>=0;l--){let d=t.route[l];if(d?.route_type!=="wire"||d.layer!==o)break;let u=kt(c,d);if(u<=XUe)continue;if(a<u-0.000001)return[{x:c.x+(d.x-c.x)*a/u,y:c.y+(d.y-c.y)*a/u}];a-=u,c=d}return[]})}function vJt(e){let{inputSrj:t,fanoutSrj:n,plan:o,acceptedTraces:i,traceWidth:r,viaDiameter:s,viaHoleDiameter:a,clearance:c,allowBlindAndBuriedVias:l}=e,d={x:o.exitPoint.x,y:o.exitPoint.y,layer:o.targetLayer},u=o.targetPoint,h=Xoe(u),A=0,m=(g)=>{let _=arn({plan:o,branchStart:g.start,viaPoint:g.viaPoint,assignedLayerPath:[g.start,g.viaPoint],terminalApproach:g.terminalApproach,traceWidth:r,viaDiameter:s,viaHoleDiameter:a,candidateIndex:1e4+A++,chamfer:Math.max(r,0.1)});if(KUe({trace:_,endpointSrjs:[t,n]}))return;let f={...n,traces:[...n.traces??[],...i,_]};if(!qd({inputSrj:t,routedSrj:f,clearance:c,allowBlindAndBuriedVias:l}).valid)return;if(cF(eb({inputSrj:t,routedSrj:f}),o.connectionName))return _;return};if(d.layer!==h){let g=crn({trace:o.trace,endpoint:o.exitPoint,layer:o.targetLayer,distances:[0.4,0.8,1.2,1.6]});for(let _ of g){let f={..._,layer:o.targetLayer};for(let y of[void 0,{x:u.x,y:_.y},{x:_.x,y:u.y}]){let x=m({start:f,viaPoint:_,terminalApproach:y});if(x)return x}}}let p=[[u],[{x:u.x,y:d.y},u],[{x:d.x,y:u.y},u]];for(let g of p){let _=g[0],f=kt(d,_),y=d.layer===h?[0]:[0.4,0.8,1.2,1.6];for(let x of y){if(d.layer!==h&&(f<=x+0.2||x<=0.000001))continue;let C=d.layer===h?{x:d.x,y:d.y}:{x:d.x+(_.x-d.x)*x/f,y:d.y+(_.y-d.y)*x/f},I=m({start:d,viaPoint:C,terminalApproach:g.length>1?_:void 0});if(I)return I}}return}function zsi(e){let{inputSrj:t,fanoutSrj:n,plans:o,traceWidth:i,viaDiameter:r,viaHoleDiameter:s,clearance:a,allowBlindAndBuriedVias:c=!0,effort:l=1,routeDownstreamConnections:d}=e,u=[],h=qd({inputSrj:t,routedSrj:n,clearance:a,allowBlindAndBuriedVias:c}),A=eb({inputSrj:t,routedSrj:n}),m=o.filter((Q)=>{let N=Xoe(Q.sourcePoint),F=Xoe(Q.targetPoint);return N!==F&&kt(Q.sourcePoint,Q.targetPoint)<=0.25&&!cF(A,Q.connectionName)}),p={traces:[],failedConnectionNames:m.map((Q)=>Q.connectionName),blockingConnectionNames:[],connectivity:A,drc:h},g=0;if(!h.valid)u.push("Fanout prefix failed emitted-copper DRC; skipped completion");else{let Q=[],N=new Map(m.map((H,z)=>[H.connectionName,z])),F=t.connections.length>32?1:3;for(let H=0;H<F;H++){let z=new Map(Q.map((X,V)=>[X,V])),Y=m.toSorted((X,V)=>(z.get(X.connectionName)??Number.MAX_SAFE_INTEGER)-(z.get(V.connectionName)??Number.MAX_SAFE_INTEGER)||(N.get(X.connectionName)??0)-(N.get(V.connectionName)??0)),U=Fsi({inputSrj:t,fanoutSrj:n,plans:Y,traceWidth:i,viaDiameter:r,viaHoleDiameter:s,clearance:a,allowBlindAndBuriedVias:c});if(g++,U.drc.valid&&(U.connectivity.connectedConnectionCount>p.connectivity.connectedConnectionCount||U.connectivity.connectedConnectionCount===p.connectivity.connectedConnectionCount&&U.traces.length<p.traces.length))p=U;if(Q=[...new Set([...U.failedConnectionNames,...U.blockingConnectionNames,...Q])],U.failedConnectionNames.length===0)break}}let _=new Set(m.map((Q)=>Q.connectionName)),f=o.filter((Q)=>!_.has(Q.connectionName)&&!cF(A,Q.connectionName)),y=[];if(h.valid)for(let Q of f){let N=vJt({inputSrj:t,fanoutSrj:n,plan:Q,acceptedTraces:[...p.traces,...y],traceWidth:i,viaDiameter:r,viaHoleDiameter:s,clearance:a,allowBlindAndBuriedVias:c});if(N)y.push(N)}let x={...n,traces:[...n.traces??[],...p.traces,...y]},C=new Set(eb({inputSrj:t,routedSrj:x}).issues.map((Q)=>Q.connectionName)),I=n.connections.filter((Q)=>!_.has(Q.name)&&C.has(Q.name)),b=[];if(h.valid&&I.length>0&&I.length<=12&&d){let Q=new Set(I.map((F)=>F.name)),N={...n,connections:I,buses:n.buses?.map((F)=>({...F,connectionNames:F.connectionNames.filter((H)=>Q.has(H))})).filter((F)=>F.connectionNames.length>0),obstacles:n.obstacles,traces:x.traces};try{let F=d(N,{effort:l});b=Osi({inputSrj:t,fanoutSrj:n,localTraces:[...p.traces,...y],candidates:F.filter((H)=>Q.has(H.connection_name)),clearance:a,allowBlindAndBuriedVias:c})}catch(F){u.push(`Downstream router failed: ${F instanceof Error?F.message:String(F)}`)}}else if(!h.valid&&I.length>0)u.push("Skipped downstream router because the endpoint-completion baseline failed emitted-copper DRC");else if(I.length>12)u.push(`Skipped downstream router for ${I.length} unresolved connections (bounded at 12)`);else if(I.length>0&&!d)u.push(`Skipped downstream router for ${I.length} unresolved connections because no routeDownstreamConnections callback was provided`);let P=[...p.traces,...y,...b];for(let Q of f){let N={...n,traces:[...n.traces??[],...P]};if(cF(eb({inputSrj:t,routedSrj:N}),Q.connectionName))continue;let F=vJt({inputSrj:t,fanoutSrj:n,plan:Q,acceptedTraces:P,traceWidth:i,viaDiameter:r,viaHoleDiameter:s,clearance:a,allowBlindAndBuriedVias:c});if(F)P.push(F)}let E={...n,traces:[...n.traces??[],...P]},B=Hsi({fanoutSrj:E,completionTraces:P}),w=eb({inputSrj:t,routedSrj:B}),T=qd({inputSrj:t,routedSrj:B,clearance:a,allowBlindAndBuriedVias:c});if(!T.valid)return u.push("Final endpoint-completion output failed emitted-copper DRC"),{simpleRouteJson:n,traces:[],report:{attemptedLocalConnectionCount:m.length,attemptedDownstreamConnectionCount:f.length,completionTraceCount:0,searchPassCount:g,errors:u,connectivity:eb({inputSrj:t,routedSrj:n}),drc:h}};return{simpleRouteJson:B,traces:P,report:{attemptedLocalConnectionCount:m.length,attemptedDownstreamConnectionCount:f.length,completionTraceCount:P.length,searchPassCount:g,errors:u,connectivity:w,drc:T}}}var Gsi={topside_left:{direction:"left",preferredExit:"top-left",exitEdge:"top"},topside_center:{direction:"up",preferredExit:"top",exitEdge:"top"},topside_right:{direction:"right",preferredExit:"top-right",exitEdge:"top"},rightside_top:{direction:"up",preferredExit:"top-right",exitEdge:"right"},rightside_center:{direction:"right",preferredExit:"right",exitEdge:"right"},rightside_bottom:{direction:"down",preferredExit:"bottom-right",exitEdge:"right"},bottomside_right:{direction:"right",preferredExit:"bottom-right",exitEdge:"bottom"},bottomside_center:{direction:"down",preferredExit:"bottom",exitEdge:"bottom"},bottomside_left:{direction:"left",preferredExit:"bottom-left",exitEdge:"bottom"},leftside_bottom:{direction:"down",preferredExit:"bottom-left",exitEdge:"left"},leftside_center:{direction:"left",preferredExit:"left",exitEdge:"left"},leftside_top:{direction:"up",preferredExit:"top-left",exitEdge:"left"},center:{}};function lrn(e){let t=Gsi[e];if(!t)throw Error(`Invalid fanout exit position "${e}"`);return t}function jUe(e){let t=e.differentialPairs;if(t===void 0)return[];if(!Array.isArray(t))throw Error("Differential pairs must be an array");let n=new Map;return e.connections.forEach((o,i)=>{let r=n.get(o.name)??[];r.push(i),n.set(o.name,r)}),t.map((o,i)=>{let r=o,s=r?.connectionNames,a=r?.lengthTolerance;if(!Array.isArray(s)||s.length!==2||s.some((l)=>typeof l!=="string"||l.length===0)||s[0]===s[1]||typeof a!=="number"||!Number.isFinite(a)||a<0)throw Error(`Differential pair ${i} requires two distinct connection names and a finite nonnegative tolerance`);let c=s.map((l)=>{let d=n.get(l);if(d?.length!==1)throw Error(`Differential pair ${i} cannot resolve original connection ${l}`);return d[0]});return{connectionNames:s,connectionIndices:c,lengthTolerance:a}})}function CCe(e,t,n=!0){let o=fB(e.layerCount),i=[],r=[],s;for(let a of t.route){if(a.route_type==="via"){r.push({center:{x:a.x,y:a.y},diameter:a.via_diameter??e.minViaPadDiameter??e.min_via_pad_diameter??e.minViaDiameter??e.minTraceWidth,spanLayers:srn({fromLayer:a.from_layer,toLayer:a.to_layer,layers:"layers"in a&&Array.isArray(a.layers)?a.layers:void 0,layerNames:o,allowBlindAndBuriedVias:n})}),s=void 0;continue}if(a.route_type!=="wire"){s=void 0;continue}if(s?.layer===a.layer&&(s.x!==a.x||s.y!==a.y))i.push({start:{x:s.x,y:s.y},end:{x:a.x,y:a.y},width:Math.max(s.width,a.width),layer:a.layer});s=a}return{trace:t,connectionName:t.connection_name,segments:i,vias:r}}function k3(e,t=!0){return(e.traces??[]).map((n)=>CCe(e,n,t))}function*Ysi(e){let{plan:t,bus:n,inputSrj:o,layerNames:i,clearance:r,consumeWork:s}=e;if(!t.via||(t.additionalVias?.length??0)>4)return;let a=(n.routableEscapeLayers??n.allowedLayers??i).filter((f)=>f!==t.targetLayer&&i.includes(f)&&(n.allowedLayers??i).includes(f));if(!a.length)return;let c=e.plans.filter((f)=>f.connectionIndex!==t.connectionIndex),l=k3(o,!1),d=[...c.flatMap((f)=>[...f.segments,...f.planeEndpointSegments??[]]),...l.flatMap((f)=>f.segments)],u=[...e.plans.flatMap((f)=>[f.via,...f.additionalVias??[],f.planeEndpointVia].filter((y)=>!!y)),...l.flatMap((f)=>f.vias)],h=t.via.diameter,{sharedBoundary:A,componentBounds:m}=n,p=h/2+r,g=[];for(let[f,y]of t.segments.entries()){if(y.layer!==t.targetLayer||f<(t.sourceEscapeSegmentCount??1))continue;let x=kt(y.start,y.end),C=Math.max(1,Math.ceil(x/(y.width/2)));for(let I=0;I<=C;I++){s();let b=I/C,P={x:y.start.x+(y.end.x-y.start.x)*b,y:y.start.y+(y.end.y-y.start.y)*b};if(P.x>=m.minX-p&&P.x<=m.maxX+p&&P.y>=m.minY-p&&P.y<=m.maxY+p)continue;if(Math.min(P.x-A.minX,A.maxX-P.x,P.y-A.minY,A.maxY-P.y)<h/2+0.0000001)continue;if(g.some((E)=>kt(E.point,P)<0.0000001))continue;if(o.obstacles.some((E)=>jy(P,E)<p-0.000000001))continue;if(u.some((E)=>kt(P,E.center)<(h+E.diameter)/2+r-0.000000001))continue;if(d.some((E)=>Bi(P,E.start,E.end)<(h+E.width)/2+r-0.000000001))continue;if(g.push({index:f,point:P}),g.length===64)break}if(g.length===64)break}let _=g.flatMap((f,y)=>g.slice(y+1).flatMap((x)=>{if(f.index>=x.index||kt(f.point,x.point)<h+r)return[];let C=t.segments.slice(f.index,x.index+1);if(C.some((I)=>I.layer!==t.targetLayer))return[];return[{a:f,b:x,length:C.reduce((I,b)=>I+kt(b.start,b.end),0)}]})).sort((f,y)=>y.length-f.length);for(let{a:f,b:y}of _){let x=t.segments[f.index],C=t.segments[y.index],I=[...t.segments.slice(0,f.index),{...x,end:f.point}].filter((N)=>kt(N.start,N.end)>0.0000001),b=[{...C,start:y.point},...t.segments.slice(y.index+1)].filter((N)=>kt(N.start,N.end)>0.0000001),P=[{...x,start:f.point},...t.segments.slice(f.index+1,y.index),{...C,end:y.point}].filter((N)=>kt(N.start,N.end)>0.0000001),E=y.point.x-f.point.x,B=y.point.y-f.point.y,w=Math.min(Math.abs(E),Math.abs(B)),T=[{x:f.point.x+Math.sign(E)*w,y:f.point.y+Math.sign(B)*w},{x:y.point.x-Math.sign(E)*w,y:y.point.y-Math.sign(B)*w}],Q=[P,...T.map((N)=>[{...x,start:f.point,end:N},{...x,start:N,end:y.point}].filter((F)=>kt(F.start,F.end)>0.0000001))];for(let N of a){let F=d.filter((U)=>U.layer===N),H=u.filter((U)=>U.spanLayers.includes(N)),z=o.obstacles.filter((U)=>U.layers.includes(N)),Y=[{...t.via,center:f.point,fromLayer:t.targetLayer,toLayer:N,spanLayers:i},{...t.via,center:y.point,fromLayer:N,toLayer:t.targetLayer,spanLayers:i}];for(let U of Q){s();let X=U.map((V)=>({...V,layer:N}));if(X.some((V)=>F.some((W)=>!Jm(V,W,r))||H.some((W)=>Bi(W.center,V.start,V.end)<(W.diameter+V.width)/2+r-0.000000001)||z.some((W)=>Jc(V,W)<V.width/2+r-0.000000001)))continue;yield{before:I,window:X,after:b,tuningLayer:N,addedVias:Y}}}}}function gF(e){let{points:t,chamfer:n,segmentIsClear:o}=e;if(t.length<2)return null;let i=0.0000001,r=[[t[0]]];for(let s=1;s<t.length;s++){let a=t[s-1],c=t[s],l=c.x-a.x,d=c.y-a.y;if(a.z!==c.z||Math.abs(l)<i||Math.abs(d)<i||Math.abs(Math.abs(l)-Math.abs(d))<i){for(let A of r)A.push(c);continue}let u=Math.min(Math.abs(l),Math.abs(d)),h=[{x:a.x+Math.sign(l)*u,y:a.y+Math.sign(d)*u,z:a.z},{x:c.x-Math.sign(l)*u,y:c.y-Math.sign(d)*u,z:a.z},{x:c.x,y:a.y,z:a.z},{x:a.x,y:c.y,z:a.z}].filter((A)=>o(a,A)&&o(A,c));if(r=r.flatMap((A)=>h.map((m)=>[...A,m,c])).slice(0,16),r.length===0)return null}for(let s of r){let a=[s[0]],c=!0;for(let l=1;l<s.length-1;l++){let d=s[l-1],u=s[l],h=s[l+1],A=kt(d,u),m=kt(u,h);if(d.z!==u.z||u.z!==h.z||A<i||m<i){a.push(u);continue}let p=(u.x-d.x)/A,g=(u.y-d.y)/A,_=(h.x-u.x)/m,f=(h.y-u.y)/m,y=p*_+g*f,x=e.repairReversingDiagonalCorners===!0&&Math.abs(y+Math.SQRT1_2)<i;if(Math.abs(y)>i&&!x){a.push(u);continue}let C=Math.min(n,A/3,m/3),I=!1;while(C>=0.000001){let b={x:u.x-p*C,y:u.y-g*C,z:u.z},P={x:u.x+_*C,y:u.y+f*C,z:u.z},E=Math.sign(p*f-g*_),B=x?{x:b.x+(p-E*g)*Math.SQRT1_2*C*(Math.SQRT2-1),y:b.y+(g+E*p)*Math.SQRT1_2*C*(Math.SQRT2-1),z:u.z}:void 0;if(B?o(b,B)&&o(B,P):o(b,P)){a.push(b,...B?[B]:[],P),I=!0;break}C/=2}if(!I){c=!1;break}}if(!c)continue;a.push(s.at(-1));for(let l=1;l<a.length;l++){let d=a[l-1],u=a[l];if(d.z!==u.z){if(kt(d,u)>i)c=!1;continue}if(!o(d,u)){c=!1;break}let h=Math.abs(d.x-u.x),A=Math.abs(d.y-u.y);if(h>i&&A>i&&Math.abs(h-A)>i){c=!1;break}let m=a[l+1];if(m?.z===u.z&&kt(d,u)>i&&kt(u,m)>i){if(((u.x-d.x)*(m.x-u.x)+(u.y-d.y)*(m.y-u.y))/(kt(d,u)*kt(u,m))<Math.SQRT1_2-i){c=!1;break}}}if(c)return a}return null}var Oie=class{layers=new Map;constructor(e){let t=new Map;for(let n of e){let o=n.width/2,i={segment:n,minX:Math.min(n.start.x,n.end.x)-o,maxX:Math.max(n.start.x,n.end.x)+o,minY:Math.min(n.start.y,n.end.y)-o,maxY:Math.max(n.start.y,n.end.y)+o},r=t.get(n.layer)??[];r.push(i),t.set(n.layer,r)}for(let[n,o]of t)this.layers.set(n,this.build(o))}querySegment(e,t){let n=e.width/2+t+0.00000001;return this.query([e.layer],{minX:Math.min(e.start.x,e.end.x)-n,maxX:Math.max(e.start.x,e.end.x)+n,minY:Math.min(e.start.y,e.end.y)-n,maxY:Math.max(e.start.y,e.end.y)+n})}queryVia(e,t){let n=e.diameter/2+t+0.00000001;return this.query(e.spanLayers,{minX:e.center.x-n,maxX:e.center.x+n,minY:e.center.y-n,maxY:e.center.y+n})}query(e,t){let n=[],o=(r)=>!(r.minX>t.maxX||r.maxX<t.minX||r.minY>t.maxY||r.maxY<t.minY),i=(r)=>{if(!o(r))return;if(r.entries){for(let s of r.entries)if(o(s))n.push(s.segment)}else i(r.left),i(r.right)};for(let r of e){let s=this.layers.get(r);if(s)i(s)}return n}build(e){let t=e.reduce((i,r)=>({minX:Math.min(i.minX,r.minX),maxX:Math.max(i.maxX,r.maxX),minY:Math.min(i.minY,r.minY),maxY:Math.max(i.maxY,r.maxY)}),{minX:1/0,maxX:-1/0,minY:1/0,maxY:-1/0});if(e.length<=8)return{...t,entries:e};let n=t.maxX-t.minX>=t.maxY-t.minY;e.sort((i,r)=>n?i.minX+i.maxX-r.minX-r.maxX:i.minY+i.maxY-r.minY-r.maxY);let o=Math.floor(e.length/2);return{...t,left:this.build(e.slice(0,o)),right:this.build(e.slice(o))}}};function Koe(e){switch(e){case"left":return"left";case"right":return"right";case"up":return"top";case"down":return"bottom"}}function x3(e){switch(e){case"left":return"left";case"right":return"right";case"top":return"up";case"bottom":return"down"}}function drn(e,t){return e===t||e.includes(t)}function Mr(e,t){if(!e||!t?.includes("-"))return;if(!drn(t,e))return;if(e==="left"||e==="right")return t.startsWith("top-")?"maximum":"minimum";return t.endsWith("-right")?"maximum":"minimum"}function Vsi(e,t){let n=t==="up"||t==="down"?"y":"x",o=e.slice(0,32).map(({connectionIndex:i})=>[i]);for(let i=0;i<e.length;i++)for(let r=i+1;r<e.length;r++){if(o.length>=32)return o;let s=e[i],a=e[r];if(Math.abs(s.sourcePoint[n]-a.sourcePoint[n])<=0.000000001)o.push([s.connectionIndex,a.connectionIndex])}return o}var Iu=0.000000001,Usi=1e5;function urn(e){for(let[n,o]of[["viaDiameter",e.viaDiameter],["traceWidth",e.traceWidth]])if(!Number.isFinite(o)||o<=0)throw Error(`FanoutSolver: dogbone ${n} must be a positive finite number, received ${o}`);if(!Number.isFinite(e.clearance)||e.clearance<0)throw Error(`FanoutSolver: dogbone clearance must be a non-negative finite number, received ${e.clearance}`);if(e.viaHoleDiameter!==void 0&&(!Number.isFinite(e.viaHoleDiameter)||e.viaHoleDiameter<=0))throw Error(`FanoutSolver: dogbone viaHoleDiameter must be a positive finite number, received ${e.viaHoleDiameter}`);if(e.holeToHoleClearance!==void 0&&(!Number.isFinite(e.holeToHoleClearance)||e.holeToHoleClearance<0))throw Error(`FanoutSolver: dogbone holeToHoleClearance must be a non-negative finite number, received ${e.holeToHoleClearance}`);if(e.holeToHoleClearance!==void 0&&e.viaHoleDiameter===void 0)throw Error("FanoutSolver: dogbone holeToHoleClearance requires viaHoleDiameter");let t=e.maximumSearchStates??Usi;if(!Number.isInteger(t)||t<1)throw Error(`FanoutSolver: dogbone maximumSearchStates must be a positive integer, received ${t}`);return t}function YYe(e){let t=[];for(let n of e.toSorted((o,i)=>o-i)){if(!Number.isFinite(n))continue;if(t.length===0||Math.abs(t.at(-1)-n)>Iu)t.push(n)}return t}function hrn(e){let t=new Map,n=new Map,o=new Map;for(let i of e){let r=t.get(i.componentId);if(!r)r={componentId:i.componentId,connections:[],obstacles:[],xCoordinates:[],yCoordinates:[],pitchX:Number.POSITIVE_INFINITY,pitchY:Number.POSITIVE_INFINITY},t.set(i.componentId,r),o.set(i.componentId,new Set);if(r.xCoordinates.push(...i.xCoordinates),r.yCoordinates.push(...i.yCoordinates),Number.isFinite(i.pitchX)&&i.pitchX>Iu)r.pitchX=Math.min(r.pitchX,i.pitchX);if(Number.isFinite(i.pitchY)&&i.pitchY>Iu)r.pitchY=Math.min(r.pitchY,i.pitchY);let s=o.get(i.componentId);for(let a of i.componentObstacles)if(!s.has(a))s.add(a),r.obstacles.push(a);for(let a of i.connections){let c=n.get(a.connectionIndex);if(c!==void 0){if(c!==i.componentId)throw Error(`FanoutSolver: connection index ${a.connectionIndex} belongs to multiple components`);continue}n.set(a.connectionIndex,i.componentId),r.connections.push({preparedConnection:a,busId:i.busId,direction:i.direction,terminationType:i.termination.type})}}return[...t.values()].map((i)=>({...i,connections:i.connections.toSorted((r,s)=>r.preparedConnection.connectionIndex-s.preparedConnection.connectionIndex),xCoordinates:YYe(i.xCoordinates),yCoordinates:YYe(i.yCoordinates)})).toSorted((i,r)=>i.componentId.localeCompare(r.componentId))}function Wsi(e){let{coordinates:t,pitch:n}=e;if(t.length===0||!Number.isFinite(n)||n<=Iu)return[];let o=[t[0]-n/2];for(let i=1;i<t.length;i++)o.push((t[i-1]+t[i])/2);return o.push(t.at(-1)+n/2),YYe(o)}function EJt(e){let{sourceCoordinate:t,coordinates:n,pitch:o}=e,i=Wsi({coordinates:n,pitch:o}),r=i.filter((a)=>a<t-Iu).at(-1),s=i.find((a)=>a>t+Iu);return[r,s].filter((a)=>a!==void 0)}function Xsi(e,t){let n=Math.abs(t.x-e.x),o=Math.abs(t.y-e.y);return n<=Iu||o<=Iu||Math.abs(n-o)<=Iu}function Ksi(e){let{source:t,site:n,direction:o}=e,i=o==="right"?n.x-t.x:o==="left"?t.x-n.x:o==="up"?n.y-t.y:t.y-n.y;return i>Iu?0:Math.abs(i)<=Iu?1:2}function jsi(e){let{point:t,obstacles:n,viaDiameter:o,clearance:i}=e,r=o/2+i;return n.every((s)=>jy(t,s)>=r-Iu)}function qsi(e){let{segment:t,sourceObstacle:n,obstacles:o,clearance:i}=e,r=t.width/2+i;return o.every((s)=>s===n||!s.layers.includes(t.layer)||Jc(t,s)>=r-Iu)}function mrn(e){let{connection:t,component:n,rules:o}=e,{preparedConnection:i,direction:r}=t,s=o.additionalObstacles?[...new Set([...n.obstacles,...o.additionalObstacles])]:n.obstacles,a={x:i.sourcePoint.x,y:i.sourcePoint.y},c=EJt({sourceCoordinate:a.x,coordinates:n.xCoordinates,pitch:n.pitchX}),l=EJt({sourceCoordinate:a.y,coordinates:n.yCoordinates,pitch:n.pitchY}),d=[...c.map((b)=>({x:b,y:a.y})),...l.map((b)=>({x:a.x,y:b})),...c.flatMap((b)=>l.map((P)=>({x:b,y:P})))],u=[];for(let b of d)if(!u.some((P)=>kt(P,b)<=Iu))u.push(b);let h=o.fixedViaPointsByConnectionIndex?.get(i.connectionIndex),A=h?[h]:u,m=[];for(let b of A){if(t.terminationType==="plane"&&!Xsi(a,b))continue;if(!jsi({point:b,obstacles:s,viaDiameter:o.viaDiameter,clearance:o.clearance}))continue;let P={start:a,end:b,width:o.traceWidth,layer:i.sourceLayer};if(!qsi({segment:P,sourceObstacle:i.sourceObstacle,obstacles:s,clearance:o.clearance}))continue;if(!(o.blockingSegments??[]).every((w)=>{if(w.connectionIndex===i.connectionIndex)return!0;if(o.canShareCopper?.(i.connectionIndex,w.connectionIndex))return!0;let T=o.viaDiameter/2+w.segment.width/2+o.clearance;if(Bi(b,w.segment.start,w.segment.end)<T-Iu)return!1;return w.segment.layer!==P.layer||Jm(P,w.segment,o.clearance)}))continue;if(!(o.blockingVias??[]).every((w)=>{if(w.connectionIndex===i.connectionIndex)return!0;if(kt(b,w.center)<(o.viaDiameter+w.diameter)/2+o.clearance-Iu)return!1;if(w.spanLayers.includes(P.layer)&&Bi(w.center,P.start,P.end)<w.diameter/2+P.width/2+o.clearance-Iu)return!1;return!0}))continue;m.push({connectionIndex:i.connectionIndex,point:b,sourceSegment:P,outwardRank:Ksi({source:a,site:b,direction:r})})}let p=r==="left"||r==="right"?n.yCoordinates:n.xCoordinates,g=r==="left"||r==="right"?a.y:a.x,_=p.findIndex((b)=>Math.abs(b-g)<=Iu),f=_>=0?_%2===0?1:-1:void 0,y=t.terminationType==="boundary"?o.preferredBoundaryPerpendicularSideByBusId?.get(t.busId):o.preferPlaneCheckerboardSites&&t.terminationType==="plane"&&(r==="left"||r==="right")?f:void 0,x=t.terminationType==="boundary"?o.preferBoundaryOutwardByBusId?.get(t.busId)??!0:!0,C=o.preferredViaPointsByConnectionIndex?.get(i.connectionIndex),I=(b)=>{if(y===void 0)return 0;let P=r==="left"||r==="right"?b.point.y-a.y:b.point.x-a.x;return P*y>Iu?0:Math.abs(P)<=Iu?1:2};return m.toSorted((b,P)=>(C?Number(kt(b.point,C)>Iu)-Number(kt(P.point,C)>Iu):0)||(x?b.outwardRank-P.outwardRank:P.outwardRank-b.outwardRank)||I(b)-I(P)||kt(a,b.point)-kt(a,P.point)||b.point.x-P.point.x||b.point.y-P.point.y)}function Jsi(e){let{first:t,second:n,rules:o}=e,i=o.canShareCopper?.(t.connectionIndex,n.connectionIndex)??!1,r=o.viaHoleDiameter?o.viaHoleDiameter+(o.holeToHoleClearance??o.clearance):0,s=i?r:Math.max(o.viaDiameter+o.clearance,r);if(kt(t.point,n.point)<s-Iu)return!1;let a=o.viaDiameter/2+o.traceWidth/2+o.clearance;if(!i){if(Bi(t.point,n.sourceSegment.start,n.sourceSegment.end)<a-Iu||Bi(n.point,t.sourceSegment.start,t.sourceSegment.end)<a-Iu)return!1}if(i)return!0;return Jm(t.sourceSegment,n.sourceSegment,o.clearance)}function $si(e){let{component:t,rules:n,consumeSearchState:o}=e,i=t.connections.map((A)=>({connection:A,candidates:mrn({connection:A,component:t,rules:n})}));if(i.some((A)=>A.candidates.length===0))return null;let r=new Map,s=(A,m)=>{let p=r.get(A)?.get(m);if(p!==void 0)return p;let g=Jsi({first:A,second:m,rules:n}),_=r.get(A)??new Map;_.set(m,g),r.set(A,_);let f=r.get(m)??new Map;return f.set(A,g),r.set(m,f),g},a=i.flatMap((A)=>A.candidates.length===1?[A.candidates[0]]:[]);for(let A=0;A<a.length;A++){let m=a[A];for(let p=0;p<A;p++)if(!s(m,a[p]))return null}let c=new Map(a.map((A)=>[A.connectionIndex,A])),l=new Set(i.flatMap((A)=>A.candidates.length>1?[A.connection.preparedConnection.connectionIndex]:[])),d=new Map(i.map((A)=>[A.connection.preparedConnection.connectionIndex,A]));if(l.size===0)return new Map([...c.entries()].map(([A,m])=>[A,{...m.point}]));let u=(A)=>A.candidates.filter((m)=>[...c.values()].every((p)=>s(m,p))),h=()=>{if(!o())return!1;if(l.size===0)return!0;let A,m=[];for(let g of[...l].toSorted((_,f)=>_-f)){let _=d.get(g),f=u(_);if(f.length===0)return!1;if(!A||f.length<m.length||f.length===m.length&&g<A.connection.preparedConnection.connectionIndex)A=_,m=f}let p=A.connection.preparedConnection.connectionIndex;l.delete(p);for(let g of m){if(c.set(p,g),h())return!0;c.delete(p)}return l.add(p),!1};if(!h())return null;return new Map([...c.entries()].toSorted(([A],[m])=>A-m).map(([A,m])=>[A,{...m.point}]))}function qu(e,t){let n=urn(t);if(e.length===0)return new Map;let o=0,i=()=>(o++,o<=n),r=new Map;for(let s of hrn(e)){let a=$si({component:s,rules:t,consumeSearchState:i});if(!a)return null;for(let[c,l]of a)r.set(c,l)}return r}function VT(e,t){return urn(t),hrn(e).flatMap((n)=>n.connections.flatMap((o)=>mrn({connection:o,component:n,rules:t}).map((i)=>({connectionIndex:i.connectionIndex,point:{...i.point}}))))}function*Zsi(e,t,n){let o=VT([e],t),i=24;for(let r of e.connections.toReversed()){let s=n.get(r.connectionIndex);if(!s)continue;for(let a of o){if(a.connectionIndex!==r.connectionIndex||kt(a.point,s)<=Iu)continue;if(i--<=0)return;let c=new Map(n);c.set(r.connectionIndex,a.point),yield c}}}var El=0.0000001;var eai=160000,tai=240000,nai=5000,oai=24,MJt=3.25,iai=class{constructor(e,t,n,o,i,r,s,a){this.minX=t,this.minY=n,this.cellSize=r,this.columnCount=Math.max(1,Math.ceil((o-t)/r)),this.rowCount=Math.max(1,Math.ceil((i-n)/r)),this.cells=Array(this.columnCount*this.rowCount);for(let c of e){let l={...c,minX:Math.min(c.segment.start.x,c.segment.end.x),maxX:Math.max(c.segment.start.x,c.segment.end.x),minY:Math.min(c.segment.start.y,c.segment.end.y),maxY:Math.max(c.segment.start.y,c.segment.end.y)},d=(c.segment.width+s)/2+a,u=this.column(l.minX-d),h=this.column(l.maxX+d),A=this.row(l.minY-d),m=this.row(l.maxY+d);for(let p=A;p<=m;p++)for(let g=u;g<=h;g++){let _=p*this.columnCount+g;(this.cells[_]??=[]).push(l)}}}minX;minY;cellSize;cells;columnCount;rowCount;seen=new Map;queryCount=0;column(e){return Math.max(0,Math.min(this.columnCount-1,Math.floor((e-this.minX)/this.cellSize)))}row(e){return Math.max(0,Math.min(this.rowCount-1,Math.floor((e-this.minY)/this.cellSize)))}querySegment(e){let t=this.column(Math.min(e.start.x,e.end.x)),n=this.column(Math.max(e.start.x,e.end.x)),o=this.row(Math.min(e.start.y,e.end.y)),i=this.row(Math.max(e.start.y,e.end.y));if(t===n&&o===i)return this.cells[o*this.columnCount+t]??[];let r=[],s=++this.queryCount;for(let a=o;a<=i;a++)for(let c=t;c<=n;c++)for(let l of this.cells[a*this.columnCount+c]??[]){if(this.seen.get(l)===s)continue;this.seen.set(l,s),r.push(l)}return r}};function rai(e){let t=e;if(t.shape==="circle"){let l=e.width/2;return{minX:e.center.x-l,maxX:e.center.x+l,minY:e.center.y-l,maxY:e.center.y+l,xRadius:l}}let n=(t.ccwRotationDegrees??0)*Math.PI/180,o=Math.abs(Math.cos(n)),i=Math.abs(Math.sin(n)),r=e.width/2,s=e.height/2,a=o*r+i*s,c=i*r+o*s;return{minX:e.center.x-a,maxX:e.center.x+a,minY:e.center.y-c,maxY:e.center.y+c,xRadius:a}}var sai=class{obstaclesByCenterX;maximumXRadius;constructor(e){this.obstaclesByCenterX=e.map((t)=>({obstacle:t,...rai(t)})).toSorted((t,n)=>t.obstacle.center.x-n.obstacle.center.x),this.maximumXRadius=this.obstaclesByCenterX.reduce((t,n)=>Math.max(t,n.xRadius),0)}querySegment(e,t){let n=Math.min(e.start.x,e.end.x),o=Math.max(e.start.x,e.end.x),i=Math.min(e.start.y,e.end.y),r=Math.max(e.start.y,e.end.y),s=n-t-this.maximumXRadius,a=o+t+this.maximumXRadius,c=0,l=this.obstaclesByCenterX.length;while(c<l){let u=Math.floor((c+l)/2);if(this.obstaclesByCenterX[u].obstacle.center.x<s)c=u+1;else l=u}let d=[];for(let u=c;u<this.obstaclesByCenterX.length;u++){let h=this.obstaclesByCenterX[u];if(h.obstacle.center.x>a)break;if(h.maxX<n-t||h.minX>o+t||h.maxY<i-t||h.minY>r+t)continue;d.push(h.obstacle)}return d}};function*aai(e){let{initialOrderFactories:t,rotationBase:n,getItemKey:o,maximumOrderCount:i=Number.POSITIVE_INFINITY}=e,r=new Set,s=0,a=(c)=>c.map(o).join("\x00");for(let c of t){if(s>=i)return;let l=c(),d=a(l);if(r.has(d))continue;r.add(d),s++,yield l}for(let c=1;c<n.length;c++){if(s>=i)return;let l=[...n.slice(c),...n.slice(0,c)],d=a(l);if(r.has(d))continue;r.add(d),s++,yield l}}var cai=class{values=[];get size(){return this.values.length}sampleEntries(e){if(this.values.length<=e)return this.values;let t=Math.ceil(this.values.length/e);return this.values.filter((n,o)=>o%t===0)}push(e){this.values.push(e);let t=this.values.length-1;while(t>0){let n=Math.floor((t-1)/2);if(this.values[n].score<=e.score)break;this.values[t]=this.values[n],t=n}this.values[t]=e}pop(){let e=this.values[0],t=this.values.pop();if(!e||!t||this.values.length===0)return e;let n=0;while(!0){let o=n*2+1,i=o+1;if(o>=this.values.length)break;let r=i<this.values.length&&this.values[i].score<this.values[o].score?i:o;if(this.values[r].score>=t.score)break;this.values[n]=this.values[r],n=r}return this.values[n]=t,e}};function lW(e,t){return t==="left"||t==="right"?e.y:e.x}function lai(e,t){let n=t.x-e.x,o=t.y-e.y,i=Math.abs(n),r=Math.abs(o);if(i<El||r<El||Math.abs(i-r)<El)return[[e,t]];if(i>r)return[[e,{x:e.x+Math.sign(n)*r,y:t.y},t],[e,{x:t.x-Math.sign(n)*r,y:e.y},t]];return[[e,{x:t.x,y:e.y+Math.sign(o)*i},t],[e,{x:e.x,y:t.y-Math.sign(o)*i},t]]}function dai(e){if(e.length<3)return e;let t=[e[0]];for(let n=1;n<e.length-1;n++){let o=t.at(-1),i=e[n],r=e[n+1],s=Math.sign(i.x-o.x),a=Math.sign(i.y-o.y),c=Math.sign(r.x-i.x),l=Math.sign(r.y-i.y);if(s!==c||a!==l)t.push(i)}return t.push(e.at(-1)),t}function voe(e,t,n){return e.slice(1).flatMap((o,i)=>{let r=e[i];return kt(r,o)<El?[]:[{start:r,end:o,width:t,layer:n}]})}function uai(e){let t=Math.abs(e.end.x-e.start.x),n=Math.abs(e.end.y-e.start.y);return t<El||n<El||Math.abs(t-n)<El}function hai(e){for(let t=0;t<e.length;t++)for(let n=t+2;n<e.length;n++){if(t===0&&n===e.length-1&&kt(e[t].start,e[n].end)<El)continue;if(ad(e[t].start,e[t].end,e[n].start,e[n].end)<El)return!1}return!0}function mai(e){return[e.via,...e.additionalVias??[],e.planeEndpointVia].filter((t)=>Boolean(t))}function pai(e){let{srj:t,acceptedPlans:n,allowBlindAndBuriedVias:o}=e,i=k3(t,o);return{segments:[...i.flatMap((r)=>r.segments.map((s)=>({connectionName:r.connectionName,segment:s}))),...n.flatMap((r)=>[...r.segments,...r.planeEndpointSegments??[]].map((s)=>({connectionName:r.connectionName,segment:s})))],vias:[...i.flatMap((r)=>r.vias.map((s)=>({connectionName:r.connectionName,via:s}))),...n.flatMap((r)=>mai(r).map((s)=>({connectionName:r.connectionName,via:s})))]}}function cb(e){let{bus:t,terminal:n,targetLayer:o,targetLayerPoints:i,layerNames:r,traceWidth:s,viaDiameter:a,viaHoleDiameter:c,allowBlindAndBuriedVias:l}=e,d=n.connection,u={x:d.sourcePoint.x,y:d.sourcePoint.y},h=e.sourceEscapePoints??[u,n.viaPoint];if(h.length<2||kt(h[0],u)>El||kt(h.at(-1),n.viaPoint)>El)throw Error("FanoutSolver: source escape must connect the source pad to its first via");let A=voe([...h],s,d.sourceLayer),m=kt(u,n.viaPoint)>El,p=d.sourceLayer!==o,g=voe(i,s,o),_=Wy({fromLayer:d.sourceLayer,toLayer:o,layerNames:r,allowBlindAndBuriedVias:l}),f={center:n.viaPoint,diameter:a,holeDiameter:c,fromLayer:d.sourceLayer,toLayer:o,spanLayers:_},y=[{route_type:"wire",...u,width:s,layer:d.sourceLayer,...d.sourcePoint.pcb_port_id?{start_pcb_port_id:d.sourcePoint.pcb_port_id}:{}},...m?[...h.slice(1).map((b)=>({route_type:"wire",...b,width:s,layer:d.sourceLayer}))]:[],...p?[{route_type:"via",...n.viaPoint,from_layer:d.sourceLayer,to_layer:o,via_diameter:a,via_hole_diameter:c},{route_type:"wire",...n.viaPoint,width:s,layer:o}]:[],...i.slice(1).map((b)=>({route_type:"wire",...b,width:s,layer:o}))],x=wF({connectionName:d.connection.name,sourcePointIndex:d.sourcePointIndex}),C=[...m?A:[],...g],I=Mr(t.exitEdge,t.preferredExit);return{busId:t.busId,connectionName:d.connection.name,connectionIndex:d.connectionIndex,sourcePointIndex:d.sourcePointIndex,sourcePoint:d.sourcePoint,sourceObstacle:d.sourceObstacle,sourceLayer:d.sourceLayer,targetPoint:d.targetPoint,targetLayer:o,termination:t.termination,direction:t.direction,...t.exitEdge?{exitEdge:t.exitEdge}:{},...I?{cornerBandSide:I}:{},exitPoint:n.exitPoint,trace:{type:"pcb_trace",pcb_trace_id:x.traceId,connection_name:d.connection.name,connectsTo:[...d.sourcePoint.pointId?[d.sourcePoint.pointId]:[],...d.sourcePoint.pcb_port_id?[d.sourcePoint.pcb_port_id]:[],x.boundaryExitPointId],route:y},segments:C,...A.length>1?{sourceEscapeSegmentCount:A.length}:{},via:p?f:void 0,length:C.reduce((b,P)=>b+kt(P.start,P.end),0)}}function*Kg(e,t=1,n=!1){if(!Number.isInteger(t)||t<1)throw Error(`FanoutSolver: maximum winding alternatives must be a positive integer, received ${t}`);let{srj:o,bus:i,targetLayer:r,terminals:s,acceptedPlans:a,layerNames:c,traceWidth:l,viaDiameter:d,viaHoleDiameter:u,clearance:h,allowBlindAndBuriedVias:A=!0,allowSameNetMerges:m=!1,maximumRouteOrderAttempts:p,maximumSearchStates:g=tai,reservedVias:_=[],softReservedVias:f=[],gridStepDivisor:y=1,heuristicWeight:x=1,preferTargetDirectedLaneBias:C=!1,allowSourceLayerRouting:I=!1,adaptiveRouteOrder:b=!1,alignGridToPads:P=!1,includeReverseTargetRotation:E=!1,reserveTerminalExitPoints:B=!1,forbidEarlyExitBoundaryContact:w=!1}=e;if(p!==void 0&&(!Number.isInteger(p)||p<1))throw Error(`FanoutSolver: maximumRouteOrderAttempts must be a positive integer, received ${p}`);if(!Number.isSafeInteger(g)||g<1)throw Error(`FanoutSolver: maximumSearchStates must be a positive safe integer, received ${g}`);if(!Number.isFinite(x)||x<=0)throw Error(`FanoutSolver: heuristicWeight must be a positive finite number, received ${x}`);if(y!==1&&y!==2)throw Error(`FanoutSolver: gridStepDivisor must be 1 or 2, received ${y}`);if(s.length===0||!i.exitEdge||!I&&s.some((qe)=>qe.connection.sourceLayer===r))return[];let T=(l+h)/y,Q=Math.min(i.pitchX,i.pitchY),N=P&&y===2&&Number.isFinite(Q),F=e.gridStep??(N?Q/(2*Math.ceil(Q/(2*T))):T);if(!Number.isFinite(F)||F<=0)return[];let{minX:H,maxX:z,minY:Y,maxY:U}=i.sharedBoundary,X=e.gridOrigin?.x??i.xCoordinates[0]??H,V=e.gridOrigin?.y??i.yCoordinates[0]??Y,W=N?X+Math.ceil((H-X)/F)*F:H,j=N?V+Math.ceil((Y-V)/F)*F:Y,q=Math.floor((z-W)/F)+1,ne=Math.floor((U-j)/F)+1,ce=q*ne;if(q<2||ne<2||ce>eai)return[];let oe=Array.from({length:ce},(qe,rt)=>{let Ct=rt%q,Mt=Math.floor(rt/q);return{column:Ct,row:Mt,point:{x:W+Ct*F,y:j+Mt*F}}}),ie=f.length?new Float32Array(ce):void 0;if(ie)for(let{via:qe}of f){if(!qe.spanLayers.includes(r))continue;let rt=qe.diameter/2+l/2+h,Ct=Math.max(0,Math.ceil((qe.center.x-rt-W)/F)),Mt=Math.min(q-1,Math.floor((qe.center.x+rt-W)/F)),Nt=Math.max(0,Math.ceil((qe.center.y-rt-j)/F)),Ot=Math.min(ne-1,Math.floor((qe.center.y+rt-j)/F));for(let mn=Nt;mn<=Ot;mn++)for(let ln=Ct;ln<=Mt;ln++){let Cn=mn*q+ln;if(kt(oe[Cn].point,qe.center)<rt)ie[Cn]=ie[Cn]+25*F}}let J=n?oe.filter((qe,rt)=>rt%Math.max(1,Math.ceil(oe.length/1000))===0).map((qe)=>qe.point):[],ee=o.obstacles.filter((qe)=>qe.layers.includes(r)),se=new sai(ee),le=pai({srj:o,acceptedPlans:a,allowBlindAndBuriedVias:A}),he=le.segments.filter(({segment:qe})=>{if(qe.layer!==r)return!1;let rt=(qe.width+l)/2+h;return!(Math.max(qe.start.x,qe.end.x)<H-rt||Math.min(qe.start.x,qe.end.x)>z+rt||Math.max(qe.start.y,qe.end.y)<Y-rt||Math.min(qe.start.y,qe.end.y)>U+rt)});if(I)he.push(..._.flatMap((qe)=>qe.sourceEscapeSegment?.layer===r?[{connectionName:qe.connectionName,segment:qe.sourceEscapeSegment}]:[]));let ue=le.vias.filter(({via:qe})=>{if(!qe.spanLayers.includes(r))return!1;let rt=qe.diameter/2+l/2+h;return!(qe.center.x<H-rt||qe.center.x>z+rt||qe.center.y<Y-rt||qe.center.y>U+rt)});ue.push(..._.filter(({via:qe})=>{if(!qe.spanLayers.includes(r))return!1;let rt=qe.diameter/2+l/2+h;return!(qe.center.x<H-rt||qe.center.x>z+rt||qe.center.y<Y-rt||qe.center.y>U+rt)}));let Ae=s.filter((qe)=>qe.connection.sourceLayer!==r).map((qe)=>({connectionName:qe.connection.connection.name,via:{center:qe.viaPoint,diameter:d,spanLayers:Wy({fromLayer:qe.connection.sourceLayer,toLayer:r,layerNames:c,allowBlindAndBuriedVias:A})}})),_e=x3(i.exitEdge),Pe=(qe,rt)=>qe===rt||m&&Uy(o,qe,rt),Ee=(qe)=>new iai(qe,H,Y,z,U,F*8,l,h),Te=Ee(he),be=[...ue,...Ae],me=be.reduce((qe,{via:rt})=>Math.max(qe,rt.diameter/2+l/2+h),l/2+h),ye=be.toSorted((qe,rt)=>qe.via.center.x-rt.via.center.x),Ce=(qe)=>{let rt=0,Ct=ye.length;while(rt<Ct){let Mt=Math.floor((rt+Ct)/2);if(ye[Mt].via.center.x<qe)rt=Mt+1;else Ct=Mt}return rt},ve=(qe)=>{let{segment:rt,terminal:Ct,acceptedAttemptSegmentIndex:Mt}=qe;if(w){let nn=i.sharedBoundary;for(let on of[rt.start,rt.end])if((Math.abs(on.x-nn.minX)<El||Math.abs(on.x-nn.maxX)<El||Math.abs(on.y-nn.minY)<El||Math.abs(on.y-nn.maxY)<El)&&kt(on,Ct.exitPoint)>El)return!1}let Nt=Ct.connection.connection.name,Ot=Math.min(rt.start.x,rt.end.x),mn=Math.max(rt.start.x,rt.end.x),ln=Math.min(rt.start.y,rt.end.y),Cn=Math.max(rt.start.y,rt.end.y),vn=rt.width/2+h;for(let nn of se.querySegment(rt,vn)){if(nn.connectedTo.includes(Nt)||m&&ib(o,nn,Nt))continue;if(Jc(rt,nn)<vn-El)return!1}for(let nn of Te.querySegment(rt)){if(Pe(Nt,nn.connectionName))continue;let on=(rt.width+nn.segment.width)/2+h;if(mn+on<nn.minX||Ot-on>nn.maxX||Cn+on<nn.minY||ln-on>nn.maxY)continue;if(ad(rt.start,rt.end,nn.segment.start,nn.segment.end)<on-El)return!1}for(let nn of Mt.querySegment(rt)){if(Pe(Nt,nn.connectionName))continue;let on=(rt.width+nn.segment.width)/2+h;if(mn+on<nn.minX||Ot-on>nn.maxX||Cn+on<nn.minY||ln-on>nn.maxY)continue;if(ad(rt.start,rt.end,nn.segment.start,nn.segment.end)<(rt.width+nn.segment.width)/2+h-El)return!1}for(let nn of B?s:[]){if(Pe(Nt,nn.connection.connection.name))continue;if(Bi(nn.exitPoint,rt.start,rt.end)<l+h-El)return!1}for(let nn=Ce(Ot-me);nn<ye.length;nn++){let on=ye[nn];if(on.via.center.x>mn+me)break;if(Pe(Nt,on.connectionName))continue;let Kn=on.via.diameter/2+rt.width/2+h;if(on.via.center.x<Ot-Kn||on.via.center.x>mn+Kn||on.via.center.y<ln-Kn||on.via.center.y>Cn+Kn)continue;if(Bi(on.via.center,rt.start,rt.end)<Kn-El)return!1}return!0},De=(qe)=>{let{terminal:rt,endpoint:Ct,acceptedAttemptSegmentIndex:Mt}=qe,Nt=[],Ot=F*MJt,mn=Math.max(0,Math.ceil((Ct.x-Ot-W)/F)-1),ln=Math.min(q-1,Math.floor((Ct.x+Ot-W)/F)+1),Cn=Math.max(0,Math.ceil((Ct.y-Ot-j)/F)-1),vn=Math.min(ne-1,Math.floor((Ct.y+Ot-j)/F)+1);for(let nn=Cn;nn<=vn;nn++)for(let on=mn;on<=ln;on++){let Kn=nn*q+on,xo=oe[Kn],ai=kt(Ct,xo.point);if(ai>F*MJt)continue;for(let At of lai(Ct,xo.point)){let _t=voe(At,l,r);if(!_t.every((Tt)=>ve({segment:Tt,terminal:rt,acceptedAttemptSegmentIndex:Mt})))continue;Nt.push({nodeIndex:Kn,points:At,radialDistance:ai,length:_t.reduce((Tt,Ut)=>Tt+kt(Ut.start,Ut.end),0)})}}return Nt.toSorted((nn,on)=>nn.radialDistance-on.radialDistance||nn.length-on.length||nn.nodeIndex-on.nodeIndex).slice(0,oai)},Ze=(qe)=>{let{terminal:rt,acceptedAttemptSegments:Ct,expandedPoints:Mt,frontierPoints:Nt,bestPath:Ot,expandedStateCount:mn,searchBatch:ln,connectionComplete:Cn}=qe;return{title:`Winding ${i.busId}: ${rt.connection.connection.name}`,rects:[{center:{x:(H+z)/2,y:(Y+U)/2},width:z-H,height:U-Y,fill:"rgba(0, 0, 0, 0)",stroke:"rgba(14, 165, 233, 0.9)",label:"A* search boundary"}],points:[...J.map((vn)=>({...vn,color:"rgba(148, 163, 184, 0.22)"})),...Nt.map((vn)=>({...vn,color:"rgba(6, 182, 212, 0.75)",label:"open frontier"})),...Mt.map((vn)=>({...vn,color:"rgba(244, 63, 94, 0.8)",label:"expanded in current step"})),{...rt.connection.sourcePoint,color:"#f97316",label:`source: ${rt.connection.connection.name}`},{...rt.exitPoint,color:"#a855f7",label:"target exit"}],circles:s.map((vn)=>({center:vn.viaPoint,radius:d/2,fill:vn===rt?"rgba(250, 204, 21, 0.85)":"rgba(250, 204, 21, 0.25)",stroke:vn===rt?"#ca8a04":"#a16207",label:vn===rt?"active via":`reserved via: ${vn.connection.connection.name}`})),lines:[...Ct.map(({segment:vn,connectionName:nn})=>({points:[vn.start,vn.end],strokeColor:"rgba(34, 197, 94, 0.9)",strokeWidth:Math.max(l,F*0.35),label:`accepted: ${nn}`})),{points:[rt.viaPoint,rt.exitPoint],strokeColor:"rgba(168, 85, 247, 0.45)",strokeWidth:Math.max(l*0.5,F*0.15),strokeDash:[F,F],label:"active via-to-exit search"},...Ot?[{points:[...Ot],strokeColor:"#facc15",strokeWidth:Math.max(l,F*0.45),label:"best path so far"}]:[]],texts:[{x:H,y:U+F*2,text:Cn?`connection complete · ${mn.toLocaleString()} states`:`A* batch ${ln} · ${mn.toLocaleString()} states`,color:"#0f172a",fontSize:Math.max(F*2.5,0.5),anchorSide:"bottom_left"}]}},st=function*(qe){let{terminal:rt,acceptedAttemptSegments:Ct,laneBias:Mt}=qe,Nt=Ee(Ct),Ot=De({terminal:rt,endpoint:rt.viaPoint,acceptedAttemptSegmentIndex:Nt}),mn=De({terminal:rt,endpoint:rt.exitPoint,acceptedAttemptSegmentIndex:Nt});if(Ot.length===0||mn.length===0)return{points:null,expandedStateCount:0};let ln=new Map;for(let Wn of mn){let Co=ln.get(Wn.nodeIndex)??[];Co.push(Wn),ln.set(Wn.nodeIndex,Co)}let Cn=ce*9,vn=new Uint8Array(ce*8),nn=x>1?new Uint8Array(Cn):void 0,on=new Float64Array(Cn).fill(Number.POSITIVE_INFINITY),Kn=new Int32Array(Cn).fill(-1),xo=new cai,ai=new Float64Array(ce),At=new Float64Array(ce),_t=lW(rt.exitPoint,_e);for(let Wn=0;Wn<ce;Wn++){let Co=oe[Wn].point,Eo=Math.abs(Co.x-rt.exitPoint.x),In=Math.abs(Co.y-rt.exitPoint.y);ai[Wn]=Math.max(Eo,In)+(Math.SQRT2-1)*Math.min(Eo,In);let eo=lW(Co,_e);At[Wn]=Mt===0?0:Mt>0?Math.max(0,_t-eo)*0.2:Math.max(0,eo-_t)*0.2}for(let Wn of Ot){let Co=Wn.nodeIndex*9+8;if(Wn.length>=on[Co])continue;on[Co]=Wn.length;let Eo=ai[Wn.nodeIndex];xo.push({node:Wn.nodeIndex,direction:8,score:Wn.length+x*Eo})}let Tt=[[1,0],[1,1],[0,1],[-1,1],[-1,0],[-1,-1],[0,-1],[1,-1]],Ut=Array.from({length:9},(Wn,Co)=>Tt.flatMap((Eo,In)=>{let eo=Math.abs(Co-In);return Co===8||Math.min(eo,8-eo)<=1?[In]:[]})),Lt=new Map;for(let Wn of Ot){let Co=Lt.get(Wn.nodeIndex)??[];Co.push(Wn),Lt.set(Wn.nodeIndex,Co)}let fn=Number.POSITIVE_INFINITY,On=null,Gn=0,fo=0,Ho=0,Vn=[];while(xo.size>0&&Gn<g){let Wn=xo.pop();if(Wn.score>=fn-El)break;let Co=Wn.node*9+Wn.direction;if(nn?.[Co])continue;let Eo=on[Co];if(Wn.score>Eo+x*ai[Wn.node]+El)continue;if(nn)nn[Co]=1;if(Gn++,fo++,n&&fo%50===0)Vn.push(oe[Wn.node].point);let In=ln.get(Wn.node);if(In){let co=[],$n=Co;while($n>=0)co.push(oe[Math.floor($n/9)].point),$n=Kn[$n];co.reverse();let zo=Co;while(Kn[zo]>=0)zo=Kn[zo];let qo=Math.floor(zo/9),fi=Lt.get(qo)??[],Nr=Math.min(...fi.map((bs)=>bs.length));for(let bs of fi)for(let Fs of In){let wo=Eo-Nr+bs.length+Fs.length;if(wo>=fn-El)continue;let wr=dai([...bs.points,...co.slice(1),...Fs.points.toReversed().slice(1)]),dr=voe(wr,l,r);if(!dr.every(uai)||!hai(dr)||!dr.every((Yr)=>ve({segment:Yr,terminal:rt,acceptedAttemptSegmentIndex:Nt})))continue;fn=wo,On=wr}}if(x>1&&On)return{points:On,expandedStateCount:Gn};let eo=oe[Wn.node];for(let co of Ut[Wn.direction]){let[$n,zo]=Tt[co],qo=eo.column+$n,fi=eo.row+zo;if(qo<0||qo>=q||fi<0||fi>=ne)continue;let Nr=fi*q+qo,bs=oe[Nr].point,Fs=Wn.direction!==8&&Wn.direction!==co,wo=At[Nr],wr=Eo+($n!==0&&zo!==0?F*Math.SQRT2:F)+(Fs?F*0.2:0)+wo+(ie?.[Nr]??0),dr=Nr*9+co;if(nn?.[dr])continue;if(wr>=on[dr]-El)continue;let Yr=Wn.node*8+co;if(vn[Yr]===0){let zc=ve({segment:{start:eo.point,end:bs,width:l,layer:r},terminal:rt,acceptedAttemptSegmentIndex:Nt});vn[Yr]=zc?1:2,vn[Nr*8+(co+4)%8]=zc?1:2}if(vn[Yr]===2)continue;on[dr]=wr,Kn[dr]=Co;let mc=ai[Nr];xo.push({node:Nr,direction:co,score:wr+x*mc})}if(fo>=nai)fo=0,Ho++,yield{expandedStateCount:Gn,...n?{visualization:Ze({terminal:rt,acceptedAttemptSegments:Ct,expandedPoints:Vn,frontierPoints:xo.sampleEntries(120).map((co)=>oe[co.node].point),bestPath:On,expandedStateCount:Gn,searchBatch:Ho,connectionComplete:!1})}:{}},Vn=[]}return{points:On,expandedStateCount:Gn}},et=s.toSorted((qe,rt)=>lW(qe.exitPoint,_e)-lW(rt.exitPoint,_e)||qe.connection.connection.name.localeCompare(rt.connection.connection.name)),lt=s.map((qe)=>lW(qe.viaPoint,_e)),it=et.map((qe)=>lW(qe.exitPoint,_e)),gt=lt.reduce((qe,rt)=>qe+rt,0)/lt.length,wt=it.reduce((qe,rt)=>qe+rt,0)/it.length,Dt=Math.max(...lt)<Math.min(...it)-El,vt=Math.min(...lt)>Math.max(...it)+El,Ht=e.routeOrder?[e.laneBias??0]:C?Dt?[0,1,-1]:vt?[0,-1,1]:i.direction===_e&&wt>gt+El?[1,0,-1]:i.direction===_e&&wt<gt-El?[-1,0,1]:[0,1,-1]:Dt?[1,0,-1]:vt?[-1,0,1]:[0,1,-1],Xt=[];if(e.routeOrder){if(e.routeOrder.length!==s.length||new Set(e.routeOrder).size!==s.length||e.routeOrder.some((qe)=>!Number.isInteger(qe)||qe<0||qe>=s.length))throw Error("FanoutSolver: routeOrder must contain every terminal index exactly once");Xt.push(()=>e.routeOrder.map((qe)=>s[qe]))}if(P&&C&&Dt)Xt.push(()=>et);if(Dt)Xt.push(()=>[...et.slice(1),et[0]]);else if(vt){if(Xt.push(()=>[...et].reverse()),E&&et.length>2)Xt.push(()=>[...et.slice(0,-1).toReversed(),et.at(-1)])}Xt.push(...C&&i.direction===_e&&wt<gt-El&&!Dt&&!vt?[()=>[...et].reverse(),()=>et]:[()=>et,()=>[...et].reverse()],()=>s.toSorted((qe,rt)=>qe.viaPoint.x-rt.viaPoint.x||qe.viaPoint.y-rt.viaPoint.y),()=>s.toSorted((qe,rt)=>rt.viaPoint.x-qe.viaPoint.x||rt.viaPoint.y-qe.viaPoint.y),()=>s.toSorted((qe,rt)=>qe.viaPoint.y-rt.viaPoint.y||qe.viaPoint.x-rt.viaPoint.x),()=>s.toSorted((qe,rt)=>rt.viaPoint.y-qe.viaPoint.y||rt.viaPoint.x-qe.viaPoint.x));let ut=p===void 0?void 0:Math.ceil(p/Ht.length),je=aai({initialOrderFactories:Xt,rotationBase:et,getItemKey:(qe)=>qe.connection.connection.name,maximumOrderCount:ut}),Re=[],Je=new Set,Ve=function*(){while(!0){let qe=Re.shift(),rt=qe?{done:!1,value:qe}:je.next();if(rt.done)return;let Ct=rt.value.map((Mt)=>Mt.connection.connection.name).join("|");if(Je.has(Ct))continue;Je.add(Ct),yield rt.value}},Ye=[],mt=new Set,ft=new Map,Oe=0;for(let qe of Ve())for(let rt of Ht){if(p!==void 0&&Oe>=p)return Ye;Oe++;let Ct=[],Mt=new Map,Nt=!1;for(let ln=0;ln<qe.length;ln++){let Cn=qe[ln],vn=JSON.stringify([s.indexOf(Cn),rt,Ct.map(({connectionName:Ut,segment:Lt})=>[Ut,Lt.start.x,Lt.start.y,Lt.end.x,Lt.end.y,Lt.width,Lt.layer])]),nn=ft.get(vn),on=st({terminal:Cn,acceptedAttemptSegments:Ct,laneBias:rt}),Kn=nn===void 0?on.next():{done:!0,value:{points:null,expandedStateCount:nn.expandedStateCount}},xo=nn?.searchBatch??0,ai=0;while(!Kn.done)ai=Kn.value.expandedStateCount,yield{phase:"route-connection",routeOrderAttempt:Oe,connectionIndex:ln,connectionCount:qe.length,connectionName:Cn.connection.connection.name,searchBatch:++xo,expandedStateCount:ai,connectionComplete:!1,...Kn.value.visualization?{visualization:Kn.value.visualization}:{}},Kn=on.next();let{points:At,expandedStateCount:_t}=Kn.value;if(ai=_t,yield{phase:"route-connection",routeOrderAttempt:Oe,connectionIndex:ln,connectionCount:qe.length,connectionName:Cn.connection.connection.name,searchBatch:xo,expandedStateCount:ai,connectionComplete:!0,...n?{visualization:Ze({terminal:Cn,acceptedAttemptSegments:Ct,expandedPoints:[],frontierPoints:[],bestPath:At,expandedStateCount:ai,searchBatch:xo,connectionComplete:!0})}:{}},!At){if(ft.set(vn,{expandedStateCount:_t,searchBatch:xo}),b&&p!==void 0&&ln>0){let Ut=qe.filter((Lt)=>Lt!==Cn);Re.push([Cn,...Ut])}Nt=!0;break}let Tt=Cn.connection.connection.name;Mt.set(Tt,At),Ct.push(...voe(At,l,r).map((Ut)=>({connectionName:Tt,segment:Ut})))}if(Nt)continue;let Ot=s.map((ln)=>{let Cn=Mt.get(ln.connection.connection.name);if(!Cn)throw Error(`FanoutSolver: via-minimal winding route omitted "${ln.connection.connection.name}"`);return cb({bus:i,terminal:ln,targetLayer:r,targetLayerPoints:Cn,sourceEscapePoints:e.sourceEscapePaths?.get(ln.connection.connectionIndex),layerNames:c,traceWidth:l,viaDiameter:d,viaHoleDiameter:u,allowBlindAndBuriedVias:A})}),mn=Ot.map((ln)=>ln.segments.map((Cn)=>`${Cn.start.x},${Cn.start.y},${Cn.end.x},${Cn.end.y},${Cn.layer}`).join(";")).join("|");if(mt.has(mn))continue;if(mt.add(mn),Ye.push(Ot),Ye.length>=t)return Ye}return Ye}function Aai(e,t=1){let n=Kg(e,t),o=n.next();while(!o.done)o=n.next();return o.value}function prn(e){return Aai(e,1)[0]??null}function qUe(e){return e.allowViaInPad===!0}function Bl(e){return e==="left"||e==="right"}function M3(e){return e==="right"||e==="up"?1:-1}function Fx(e,t){return Bl(t)?e.x:e.y}function jd(e,t){return Bl(t)?e.y:e.x}function JI(e){return Mr(e.exitEdge,e.preferredExit)}function _ai(e){return Mr(Koe(e.direction),e.preferredExit)}function YW(e){return Boolean(e.exitEdge&&e.termination.type==="boundary"&&e.connections.length>0&&e.connections.every((t)=>t.hasExplicitLayeredExitTarget===!0))}function kye(e){if("source_trace_id"in e&&typeof e.source_trace_id==="string")return e.source_trace_id;return e.name}function Arn(e){let{bus:t,boundaryDirection:n,layerNames:o,targetLayer:i}=e,r=(_)=>_.exitTargetPoint?.layer??$Ue(_.targetPoint),s=(_,f)=>{let y=jd(_.exitTargetPoint??_.targetPoint,n)-jd(f.exitTargetPoint??f.targetPoint,n);if(y!==0)return y;let x=kye(_.connection),C=kye(f.connection),I=x.localeCompare(C);if(I!==0)return I;return _.connection.name.localeCompare(f.connection.name)||_.connectionIndex-f.connectionIndex},a=t.connections.toSorted((_,f)=>{let y=jd(_.exitTargetPoint??_.targetPoint,n)-jd(f.exitTargetPoint??f.targetPoint,n);if(y!==0)return y;return _.connection.name.localeCompare(f.connection.name)||kye(_.connection).localeCompare(kye(f.connection))||o.indexOf(r(_))-o.indexOf(r(f))||_.connectionIndex-f.connectionIndex}),c=new Map;for(let _ of t.connections){let f=r(_),y=c.get(f)??[];y.push(_),c.set(f,y)}let l=[...c.keys()].toSorted((_,f)=>Number(f===i)-Number(_===i)||o.indexOf(_)-o.indexOf(f)||_.localeCompare(f)),d=new Map(l.map((_,f)=>[_,f])),u=new Map;for(let _ of l)for(let[f,y]of c.get(_).toSorted(s).entries())u.set(y.connectionIndex,f);let h=t.connections.toSorted((_,f)=>(u.get(_.connectionIndex)??0)-(u.get(f.connectionIndex)??0)||(d.get(r(_))??0)-(d.get(r(f))??0)||s(_,f)),A=[h];for(let _=0;_+1<h.length;_++){let f=h[_],y=h[_+1];if(r(f)===r(y))continue;let x=[...h];x[_]=y,x[_+1]=f,A.push(x)}A.push(a);let m=new Set(A.map((_)=>_.map((f)=>f.connectionIndex).join(","))).size;if(!JI(t)&&t.connections.length<=8&&l.length>1){let _=l.map((C)=>c.get(C).toSorted(s)),f=_.map(()=>0),y=[],x=()=>{if(A.length>=128)return;if(y.length===t.connections.length){A.push([...y]);return}for(let C=0;C<_.length;C++){let I=f[C],b=_[C][I];if(!b)continue;f[C]=I+1,y.push(b),x(),y.pop(),f[C]=I}};x()}let p=new Set;return{orders:A.filter((_)=>{let f=_.map((y)=>y.connectionIndex).join(",");if(p.has(f))return!1;return p.add(f),!0}),legacyOrder:a,ordinaryOrderCount:m}}function _rn(e){let{connection:t,windingOrderIndex:n=0}=e,{orders:o,legacyOrder:i}=Arn(e),r=e.windingOrderIndex===void 0?i:o[n]??o[0]??i,s=r.findIndex((a)=>a.connectionIndex===t.connectionIndex);if(s<0)throw Error(`FanoutSolver: connection "${t.connection.name}" is missing from winding order`);return{rank:s,connectionCount:r.length}}function gai(e){let{bus:t,escapeLayer:n}=e;return(t.routableEscapeLayers??t.allowedLayers)?.find((o)=>o!==n)}function VYe(e){let{bus:t,boundaryDirection:n,traceWidth:o,clearance:i}=e;if(JI(t)||!YW(t))return;let r=new Set(t.connections.map((u)=>u.exitTargetPoint?.layer??$Ue(u.targetPoint))),s=Bl(n)?t.sharedBoundary.minY:t.sharedBoundary.minX,a=Bl(n)?t.sharedBoundary.maxY:t.sharedBoundary.maxX,c=t.connections.map((u)=>Math.max(s,Math.min(a,jd(u.exitTargetPoint??u.targetPoint,n)))).toSorted((u,h)=>u-h),l=o+i;if((r.size<2||!e.allowLayerInterleaving)&&c.every((u,h)=>h===0||u-c[h-1]>=l-0.000000001))return;if(a-s<(c.length-1)*l-0.000000001)return;let d=[];for(let[u,h]of c.entries()){d.push({start:u,count:1,mean:h-u*l});while(d.length>1&&d.at(-2).mean>d.at(-1).mean){let A=d.pop(),m=d.pop();d.push({start:m.start,count:m.count+A.count,mean:(m.mean*m.count+A.mean*A.count)/(m.count+A.count)})}}for(let u of d){let h=Math.max(s,Math.min(a-(c.length-1)*l,u.mean));for(let A=u.start;A<u.start+u.count;A++)c[A]=h+A*l}return c}function lF(e){let t=e.fixedBoundaryTracksByConnectionIndex?.get(e.connection.connectionIndex);if(t!==void 0)return t;let n=jd(e.connection.exitTargetPoint??e.connection.targetPoint,e.boundaryDirection),o=Bl(e.boundaryDirection)?e.bus.sharedBoundary.minY:e.bus.sharedBoundary.minX,i=Bl(e.boundaryDirection)?e.bus.sharedBoundary.maxY:e.bus.sharedBoundary.maxX,r=e.traceWidth!==void 0&&e.clearance!==void 0?VYe({...e,traceWidth:e.traceWidth,clearance:e.clearance}):void 0;if(r&&e.layerNames&&e.targetLayer){let{rank:s}=_rn({...e,layerNames:e.layerNames,targetLayer:e.targetLayer});return r[s]}return Math.max(o,Math.min(i,n))}function HS(e){let t=e.fixedBoundaryTracksByConnectionIndex?.get(e.connection.connectionIndex);if(t!==void 0)return t;let{bus:n,connection:o,cornerExitLaneOffset:i,traceWidth:r,viaDiameter:s,clearance:a,layerNames:c,targetLayer:l,windingOrderIndex:d,cornerBandTargetTrackOffset:u=0}=e,h=JI(n);if(!h||!n.exitEdge)return jd(o.exitTargetPoint??o.targetPoint,n.direction);let A=x3(n.exitEdge),m=Bl(A)?n.sharedBoundary.minY:n.sharedBoundary.minX,p=Bl(A)?n.sharedBoundary.maxY:n.sharedBoundary.maxX,g=Math.max(r+a,s+a),_=m+(p-m)*(h==="minimum"?0.25:0.75)+u,f=YW(n)?_rn({bus:n,connection:o,boundaryDirection:A,layerNames:c,targetLayer:l,windingOrderIndex:d}):void 0,y=Math.max(n.connections.length,n.cornerBandConnectionCount??n.connections.length,i+(f?.connectionCount??0)),x=_-(y-1)*g/2,C=f?.rank??joe(n,o),I=i+C,P=!f&&h==="maximum"===M3(A)>0?y-1-I:I;return x+P*g}function BJt(e,t){let n=JI(e);if(!n||!e.exitEdge)return{exit:0,localChannel:0,boundaryChannel:0};let o=t.filter((s)=>s.exitEdge&&s.cornerBandSide!==void 0),i=o.filter((s)=>s.exitEdge===e.exitEdge&&s.cornerBandSide===n),r=o.filter((s)=>s.direction===e.direction);return{exit:i.length,localChannel:r.length,boundaryChannel:i.length}}function XA(e,t,n){return Bl(n)?{x:e,y:t}:{x:t,y:e}}function h3(e,t=e.direction){switch(t){case"right":return e.sharedBoundary.maxX;case"left":return e.sharedBoundary.minX;case"up":return e.sharedBoundary.maxY;case"down":return e.sharedBoundary.minY}}function VW(e){return Bl(e.direction)?e.pitchX:e.pitchY}function grn(e){return Bl(e.direction)?e.pitchY:e.pitchX}function wJt(e,t){if(e.length<3)return[...e];let n=[e[0]];for(let o=1;o<e.length-1;o++){let i=e[o-1],r=e[o],s=e[o+1],a={x:r.x-i.x,y:r.y-i.y},c={x:s.x-r.x,y:s.y-r.y},l=Math.hypot(a.x,a.y),d=Math.hypot(c.x,c.y),u=Math.abs(a.x)<=0.000000001||Math.abs(a.y)<=0.000000001,h=Math.abs(c.x)<=0.000000001||Math.abs(c.y)<=0.000000001,A=Math.abs(a.x*c.x+a.y*c.y)<=0.000000001;if(l<=0.000000001||d<=0.000000001||!u||!h||!A){n.push(r);continue}let m=Math.min(t,l/3,d/3);n.push({x:r.x-a.x/l*m,y:r.y-a.y/l*m}),n.push({x:r.x+c.x/d*m,y:r.y+c.y/d*m})}return n.push(e.at(-1)),n.filter((o,i)=>i===0||kt(o,n[i-1])>0.000000001)}function TJt(e,t){let n=t.x-e.x,o=t.y-e.y,i=Math.abs(n),r=Math.abs(o);if(i<=0.000000001||r<=0.000000001||Math.abs(i-r)<=0.000000001)return[[e,t]];if(i>r)return[[e,{x:e.x+Math.sign(n)*r,y:t.y},t],[e,{x:t.x-Math.sign(n)*r,y:e.y},t]];return[[e,{x:t.x,y:e.y+Math.sign(o)*i},t],[e,{x:e.x,y:t.y-Math.sign(o)*i},t]]}function fai(e){let t=(Bl(e.direction)?e.xCoordinates:e.yCoordinates).toSorted((i,r)=>i-r),n=e.connections.reduce((i,r)=>i+Fx(r.sourcePoint,e.direction),0)/e.connections.length,o=M3(e.direction)>0?t.at(-1):t[0];return Math.abs(o-n)/VW(e)}function JUe(e){let t=Bl(e.direction)?e.xCoordinates:e.yCoordinates,n=e.connections.reduce((i,r)=>i+Fx(r.sourcePoint,e.direction),0)/e.connections.length,o=M3(e.direction)>0?Math.max(...t):Math.min(...t);return Math.abs(n-o)<0.000001}function joe(e,t){let n=[...e.connections].sort((o,i)=>jd(o.sourcePoint,e.direction)-jd(i.sourcePoint,e.direction)).findIndex((o)=>o.connectionIndex===t.connectionIndex);if(n<0)throw Error(`FanoutSolver: connection "${t.connection.name}" is missing from bus "${e.busId}"`);return n}function yai(e,t){return{minX:Math.min(e.minX,t.minX),maxX:Math.max(e.maxX,t.maxX),minY:Math.min(e.minY,t.minY),maxY:Math.max(e.maxY,t.maxY)}}function Jze(e,t){return e.x>=t.minX-0.000001&&e.x<=t.maxX+0.000001&&e.y>=t.minY-0.000001&&e.y<=t.maxY+0.000001}function $ze(e,t,n,o,i){let r=t-e,s=Math.floor((r-o)/(n+o)+0.000000001);if(s<1)return[];let a=s*n+(s-1)*o,c=e+(r-a)/2+n/2;return Array.from({length:s},(l,d)=>({value:c+d*(n+o),kind:i}))}function xai(e){let{bus:t,connection:n,preferredTrack:o,traceWidth:i,clearance:r}=e,s=(Bl(t.direction)?t.yCoordinates:t.xCoordinates).toSorted((g,_)=>g-_),a=Math.max(...t.componentObstacles.map((g)=>Bl(t.direction)?g.height/2:g.width/2)),c=Bl(t.direction)?t.sharedBoundary.minY:t.sharedBoundary.minX,l=Bl(t.direction)?t.sharedBoundary.maxY:t.sharedBoundary.maxX,d=l-c,u=c,h=l,A=[{value:o,kind:"preferred"},...$ze(u,s[0]-a,i,r,"margin")];for(let g=0;g<s.length;g++)if(A.push({value:s[g],kind:"corridor"}),g<s.length-1)A.push(...$ze(s[g]+a,s[g+1]-a,i,r,"gap"));A.push(...$ze(s.at(-1)+a,h,i,r,"margin"));let m=jd(n.sourcePoint,t.direction),p=(s[0]+s.at(-1))/2;return A.filter((g)=>Math.abs(g.value-m)<=d+0.000000001).filter((g,_,f)=>f.findIndex((y)=>Math.abs(y.value-g.value)<0.000000001)===_).sort((g,_)=>Math.abs(g.value-o)-Math.abs(_.value-o)-(Math.abs(g.value-p)-Math.abs(_.value-p))*0.001)}function Cai(e){let t=JI(e.bus)||YW(e.bus)?jd(e.connection.sourcePoint,e.bus.direction):jd(e.connection.exitTargetPoint??e.connection.targetPoint,e.bus.direction),n=Bl(e.bus.direction)?e.bus.sharedBoundary.minY:e.bus.sharedBoundary.minX,o=Bl(e.bus.direction)?e.bus.sharedBoundary.maxY:e.bus.sharedBoundary.maxX;return Math.max(n+e.traceWidth/2,Math.min(o-e.traceWidth/2,t))}function Iai(e){let{bus:t,connection:n,targetUsesVia:o,interstitialEscape:i,compactBusTracks:r,traceWidth:s,viaDiameter:a,clearance:c}=e,l=(Bl(t.direction)?t.yCoordinates:t.xCoordinates).toSorted((P,E)=>P-E),d=jd(n.sourcePoint,t.direction);if(r){let P=joe(t,n);return(l[0]+l.at(-1))/2+(P-(t.connections.length-1)/2)*(s+c)}if(!o||!i)return d;let u=fai(t),h=s+c,A=Math.ceil(t.connections.length/2),m=(A-1)*h,p=a/2+s/2+c+0.001,g=Math.round(u)+1,_=g*p+(g-1)*m,f=joe(t,n),y=l[0],x=l.at(-1),C=f<A?y-_-(A-f-1)*h:x+_+(f-A)*h,I=Bl(t.direction)?t.sharedBoundary.minY:t.sharedBoundary.minX,b=Bl(t.direction)?t.sharedBoundary.maxY:t.sharedBoundary.maxX;return Math.max(I+s/2,Math.min(b-s/2,C))}function frn(e){let t=M3(e.direction),n=[...e.connections].sort((r,s)=>{let a=t*(Fx(s.sourcePoint,e.direction)-Fx(r.sourcePoint,e.direction));if(Math.abs(a)>0.000001)return a;return jd(r.sourcePoint,e.direction)-jd(s.sourcePoint,e.direction)}),o=[...e.connections].sort((r,s)=>jd(r.sourcePoint,e.direction)-jd(s.sourcePoint,e.direction)||t*(Fx(s.sourcePoint,e.direction)-Fx(r.sourcePoint,e.direction))),i=[n,[...n].reverse(),o,[...o].reverse()];for(let r=1;r<Math.min(n.length,8);r++)i.push([...n.slice(r),...n.slice(0,r)]);return i}function DJt(e,t,n,o,i){if(kt(t,n)<0.000000001)return;e.push({start:t,end:n,width:o,layer:i})}function Zze(e,t){if(e.length<3)return e;let n=[e[0]];for(let o=1;o<e.length-1;o++){let i=e[o-1],r=e[o],s=e[o+1],a=kt(i,r),c=kt(r,s);if(a<0.000000001||c<0.000000001)continue;let l={x:(r.x-i.x)/a,y:(r.y-i.y)/a},d={x:(s.x-r.x)/c,y:(s.y-r.y)/c},u=l.x*d.x+l.y*d.y;if(Math.abs(u)>0.000001){n.push(r);continue}let h=Math.min(t,a/2,c/2);n.push({x:r.x-l.x*h,y:r.y-l.y*h}),n.push({x:r.x+d.x*h,y:r.y+d.y*h})}return n.push(e.at(-1)),n}function Ixe(e){let{preparedConnection:t,bus:n,targetLayer:o,traceWidth:i,viaDiameter:r,clearance:s,viaHandedness:a}=e,c={x:t.sourcePoint.x,y:t.sourcePoint.y},l=o!==t.sourceLayer,d=VW(n),u=grn(n),h=Bl(n.direction)?t.sourceObstacle.width:t.sourceObstacle.height,A=l&&!JUe(n)?h>=d?h/2+r/2+s+0.001:d*0.5:!l?h/2+i/2+s+0.001:Math.max(d*0.5,h/2+(l?r:i)/2+s+0.001),m=Fx(c,n.direction)+M3(n.direction)*A,p=jd(c,n.direction)+a*u*0.5;return XA(m,p,n.direction)}function W2e(e){let{preparedConnection:t,bus:n,targetLayer:o,track:i,exitAxis:r,layerNames:s,traceWidth:a,viaDiameter:c,viaHoleDiameter:l,viaHandedness:d,interstitialEscape:u,spreadLaneIndex:h,cornerExitLaneOffset:A,cornerLocalChannelLaneOffset:m,cornerBoundaryChannelLaneOffset:p,clearance:g,terminateAtVia:_,allowBlindAndBuriedVias:f,initialViaPoint:y,sourceEscapePath:x,cornerBandTargetTrackOffset:C,fixedBoundaryTracksByConnectionIndex:I}=e,b=I?.get(t.connectionIndex),P=JI(n),E=n.exitEdge?x3(n.exitEdge):n.direction,B=b!==void 0&&!P&&n.direction===E?b:i,w={x:t.sourcePoint.x,y:t.sourcePoint.y},T=o,Q=YW(n)?gai({bus:n,escapeLayer:T}):void 0,N=Boolean(Q),F=M3(n.direction),H=VW(n),z=x?.at(-1),Y=z!==void 0?{x:z.x,y:z.y}:y===void 0?Ixe({preparedConnection:t,bus:n,targetLayer:o,traceWidth:a,viaDiameter:c,clearance:g,viaHandedness:d}):{x:y.x,y:y.y},U=x?x.map((wt)=>({x:wt.x,y:wt.y})):[w,Y];if(U.length<2||kt(U[0],w)>0.000000001||kt(U.at(-1),Y)>0.000000001)throw Error(`FanoutSolver: source escape path for "${t.connection.name}" must run from its source point to its via`);let X=Fx(Y,n.direction),V=jd(Y,n.direction),W=c/2+a/2+g+0.001+h*(a+g),j=u&&H>=W+c/2+g,q=j?XA(X+F*W,V,n.direction):Y,ne=j?Fx(q,n.direction):X+F*Math.abs(B-V),ce=XA(ne,B,n.direction),oe=M3(E),ie=h3(n,E),J=b??(P&&n.exitEdge?HS({bus:n,connection:t,cornerExitLaneOffset:A,traceWidth:a,viaDiameter:c,clearance:g,layerNames:s,targetLayer:o,cornerBandTargetTrackOffset:C}):N?lF({bus:n,connection:t,boundaryDirection:E,traceWidth:a,clearance:g,layerNames:s,targetLayer:o}):B),ee=joe(n,t),le=_ai(n)==="maximum"?m+ee:m+n.connections.length-1-ee,he=p+ee,ue=Math.max(n.connections.length,n.cornerBandConnectionCount??n.connections.length),Ae=oe>0?he:ue-1-he,_e=N?c/2+a/2+g:a+g,Pe=(wt)=>c/2+a/2+g+wt*_e,Ee=h3(n,n.direction)-F*Pe(le),Te=ie-oe*Pe(Ae),be=XA(Ee,B,n.direction),me=XA(Te,Ee,E),ye=XA(Te,J,E),Ce=Bl(n.direction)!==Bl(E)?me:XA(Te,B,E),ve=_?Y:P||N||b!==void 0?XA(ie,J,E):XA(r,B,n.direction),De=[],Ze=[];Ze.push({route_type:"wire",x:w.x,y:w.y,width:a,layer:t.sourceLayer,start_pcb_port_id:t.sourcePoint.pcb_port_id});for(let wt=1;wt<U.length;wt++){let Dt=U[wt-1],vt=U[wt];if(DJt(De,Dt,vt,a,t.sourceLayer),kt(Dt,vt)<=0.000000001)continue;Ze.push({route_type:"wire",x:vt.x,y:vt.y,width:a,layer:t.sourceLayer})}let st=De.length,et;if(o!==t.sourceLayer){let wt=Wy({fromLayer:t.sourceLayer,toLayer:o,layerNames:s,allowBlindAndBuriedVias:f});et={center:Y,diameter:c,holeDiameter:l,fromLayer:t.sourceLayer,toLayer:o,spanLayers:wt},Ze.push({route_type:"via",x:Y.x,y:Y.y,from_layer:t.sourceLayer,to_layer:o,via_diameter:c,via_hole_diameter:l}),Ze.push({route_type:"wire",x:Y.x,y:Y.y,width:a,layer:o})}let lt=(wt,Dt)=>{for(let vt=1;vt<wt.length;vt++){let Ht=wt[vt-1],Xt=wt[vt];DJt(De,Ht,Xt,a,Dt),Ze.push({route_type:"wire",x:Xt.x,y:Xt.y,width:a,layer:Dt})}},it=[];if(N&&Q){let wt=Zze([Y,...j?[q]:[],ce,...Bl(n.direction)!==Bl(E)?[be]:[],Ce],Math.max(a+g,a*2));lt(wt,T);let Dt=(vt,Ht,Xt)=>{if(Ht===Xt)return;it.push({center:vt,diameter:c,holeDiameter:l,fromLayer:Ht,toLayer:Xt,spanLayers:Wy({fromLayer:Ht,toLayer:Xt,layerNames:s,allowBlindAndBuriedVias:f})}),Ze.push({route_type:"via",x:vt.x,y:vt.y,from_layer:Ht,to_layer:Xt,via_diameter:c,via_hole_diameter:l}),Ze.push({route_type:"wire",x:vt.x,y:vt.y,width:a,layer:Xt})};Dt(Ce,T,Q),lt([Ce,ye],Q),Dt(ye,Q,T),lt([ye,ve],T)}else{let wt=_?[Y]:P?Zze([Y,...j?[q]:[],ce,be,...Bl(n.direction)!==Bl(E)?[me]:[],ye,ve],Math.max(a+g,a*2)):j?Zze([Y,q,ce,ve],Math.max(a+g,a*2)):[Y,ce,ve];lt(wt,T)}let gt=wF({connectionName:t.connection.name,sourcePointIndex:t.sourcePointIndex});return{busId:n.busId,connectionName:t.connection.name,connectionIndex:t.connectionIndex,sourcePointIndex:t.sourcePointIndex,sourcePoint:t.sourcePoint,sourceObstacle:t.sourceObstacle,sourceLayer:t.sourceLayer,targetPoint:t.targetPoint,targetLayer:o,termination:n.termination,direction:n.direction,...n.exitEdge?{exitEdge:n.exitEdge}:{},...P?{cornerBandSide:P}:{},exitPoint:ve,trace:{type:"pcb_trace",pcb_trace_id:gt.traceId,connection_name:t.connection.name,connectsTo:[...t.sourcePoint.pointId?[t.sourcePoint.pointId]:[],...t.sourcePoint.pcb_port_id?[t.sourcePoint.pcb_port_id]:[],gt.boundaryExitPointId],route:Ze},segments:De,...st>1?{sourceEscapeSegmentCount:st}:{},via:et,...it.length>0?{additionalVias:it}:{},length:De.reduce((wt,Dt)=>wt+kt(Dt.start,Dt.end),0)}}function $Ue(e){let t="layer"in e?e.layer:e.layers[0];if(!t)throw Error("FanoutSolver: plane endpoint has no copper layer");return t}function eGe(e){let{preparedConnection:t,bus:n,viaDiameter:o,clearance:i}=e,{sourcePoint:r,targetPoint:s}=t,a=Math.max(n.pitchX,n.pitchY)*0.5;if(kt(r,s)<=0.000001||kt(r,s)>a)return[];let c=(()=>{switch(n.direction){case"left":return{x:-1,y:0};case"right":return{x:1,y:0};case"up":return{x:0,y:1};case"down":return{x:0,y:-1}}})(),l=Math.SQRT1_2,d=[c,...[{x:l,y:l},{x:l,y:-l},{x:-l,y:l},{x:-l,y:-l},{x:1,y:0},{x:-1,y:0},{x:0,y:1},{x:0,y:-1}].toSorted((m,p)=>p.x*c.x+p.y*c.y-(m.x*c.x+m.y*c.y))],u=Math.max(o,o/2+i),h=[u,Math.max(u,Math.min(n.pitchX,n.pitchY)*0.5),Math.max(u,Math.min(n.pitchX,n.pitchY)*0.625),Math.max(u,Math.min(n.pitchX,n.pitchY)*0.75)],A=[];for(let m of[r,s])for(let p of h)for(let g of d){let _={x:m.x+g.x*p,y:m.y+g.y*p};if(kt(_,r)<=0.000001||kt(_,s)<=0.000001||A.some((f)=>kt(f,_)<=0.000001))continue;A.push(_)}return A}function tGe(e){let{plan:t,preparedConnection:n,planeLayer:o,viaPoint:i,layerNames:r,traceWidth:s,viaDiameter:a,viaHoleDiameter:c,allowBlindAndBuriedVias:l}=e,d={x:n.targetPoint.x,y:n.targetPoint.y},u=$Ue(n.targetPoint),h=Wy({fromLayer:o,toLayer:u,layerNames:r,allowBlindAndBuriedVias:l});if(!h.includes(o))throw Error(`FanoutSolver: via for "${n.connection.name}" does not cross plane ${o}`);let A=[{start:i,end:d,width:s,layer:u}],m={center:i,diameter:a,holeDiameter:c,fromLayer:o,toLayer:u,spanLayers:h},p=wF({connectionName:n.connection.name,sourcePointIndex:n.sourcePointIndex}),g={type:"pcb_trace",pcb_trace_id:p.planeEndpointTraceId,connection_name:n.connection.name,connectsTo:[...n.targetPoint.pointId?[n.targetPoint.pointId]:[],...n.targetPoint.pcb_port_id?[n.targetPoint.pcb_port_id]:[],p.planeEndpointPointId],route:[{route_type:"wire",...i,width:s,layer:o},{route_type:"via",...i,from_layer:o,to_layer:u,via_diameter:a,via_hole_diameter:c},{route_type:"wire",...i,width:s,layer:u},{route_type:"wire",...d,width:s,layer:u}]};return{...t,planeEndpointTrace:g,planeEndpointSegments:A,planeEndpointVia:m,length:t.length+A.reduce((_,f)=>_+kt(f.start,f.end),0)}}function bai(e){let{segment:t,plan:n,segmentIndex:o,srj:i,allowSameNetMerges:r,obstacles:s,clearance:a}=e;for(let c of s){if(!c.layers.includes(t.layer))continue;if(c.connectedTo.includes(n.connectionName))continue;if(r&&ib(i,c,n.connectionName))continue;if(Hie({inputSrj:i,segment:t,bodyObstacle:c,connectionName:n.connectionName}))continue;if(o>=0&&o<(n.sourceEscapeSegmentCount??1)&&c===n.sourceObstacle&&t.layer===n.sourceLayer)continue;if(Jc(t,c)<t.width/2+a-0.000000001)return!1}return!0}function yB(e){return e.planeEndpointSegments?.length?[...e.segments,...e.planeEndpointSegments]:e.segments}function UW(e){return[e.via,...e.additionalVias??[],e.planeEndpointVia].filter((t)=>Boolean(t))}function Sai(e,t){return kt(t.center,e.sourcePoint)<=0.000000001&&xCe({center:t.center,diameter:t.diameter,obstacle:e.sourceObstacle})}function ZUe(e){let{plan:t,srj:n,sharedBoundary:o,clearance:i,allowBlindAndBuriedVias:r,allowSameNetMerges:s}=e,a=yai(n.bounds,o);if(!Jze(t.exitPoint,a)||yB(t).some((d)=>!Jze(d.start,a)||!Jze(d.end,a)))return!1;let c=yB(t),l;if(e.segmentCache){let d=e.segmentCache.byConnection.get(t.connectionName);if(!d)d=new WeakMap,e.segmentCache.byConnection.set(t.connectionName,d);if(l=d.get(t.sourceObstacle),!l)l=[new WeakMap,new WeakMap],d.set(t.sourceObstacle,l)}for(let d=0;d<c.length;d++){let u=c[d],h=d<t.segments.length?d:-1,A=h>=0&&h<(t.sourceEscapeSegmentCount??1)&&u.layer===t.sourceLayer,m=l?.[A?1:0],p=m?.get(u);if(p===void 0)p=bai({segment:u,plan:t,segmentIndex:h,srj:n,allowSameNetMerges:s,obstacles:e.segmentCache?e.segmentCache.obstaclesByLayer.get(u.layer)??[]:n.obstacles,clearance:i}),m?.set(u,p);if(!p)return!1}for(let d of UW(t))for(let u of n.obstacles){if(qUe(n)&&u===t.sourceObstacle&&Sai(t,d))continue;if(!u.layers.some((h)=>d.spanLayers.includes(h)))continue;if(s&&ib(n,u,t.connectionName))continue;if(jy(d.center,u)<d.diameter/2+i-0.000000001)return!1}for(let d of k3(n,r)){if(t.connectionName===d.connectionName||s&&Uy(n,t.connectionName,d.connectionName))continue;for(let u of yB(t)){for(let h of d.segments)if(!Jm(u,h,i))return!1;for(let h of d.vias)if(h.spanLayers.includes(u.layer)&&Bi(h.center,u.start,u.end)<h.diameter/2+u.width/2+i-0.000000001)return!1}for(let u of UW(t)){for(let h of d.segments)if(u.spanLayers.includes(h.layer)&&Bi(u.center,h.start,h.end)<u.diameter/2+h.width/2+i-0.000000001)return!1;for(let h of d.vias)if(u.spanLayers.some((A)=>h.spanLayers.includes(A))&&kt(u.center,h.center)<(u.diameter+h.diameter)/2+i-0.000000001)return!1}}return!0}function ICe(e){let{plan:t,otherPlans:n,srj:o,allowSameNetMerges:i,clearance:r,blockingBusCounts:s,segmentIndexes:a}=e,c=yB(t),l=UW(t);for(let d of n){if(i&&Uy(o,t.connectionName,d.connectionName))continue;if(t.sourcePoint.pcb_port_id&&t.sourcePoint.pcb_port_id===d.sourcePoint.pcb_port_id||t.sourcePoint.pointId&&t.sourcePoint.pointId===d.sourcePoint.pointId)continue;let h=()=>{if(d.busId===t.busId)return;s?.set(d.busId,(s.get(d.busId)??0)+1)},A=yB(d),m=UW(d),p=a?.get(d);if(a&&!p)p=new Oie(A),a.set(d,p);for(let g of c){for(let _ of p?.querySegment(g,r)??A)if(!Jm(g,_,r))return h(),!1;for(let _ of m)if(_.spanLayers.includes(g.layer)&&Bi(_.center,g.start,g.end)<_.diameter/2+g.width/2+r-0.000000001)return h(),!1}for(let g of l){for(let _ of p?.queryVia(g,r)??A)if(g.spanLayers.includes(_.layer)&&Bi(g.center,_.start,_.end)<g.diameter/2+_.width/2+r-0.000000001)return h(),!1;for(let _ of m)if(g.spanLayers.some((f)=>_.spanLayers.includes(f))&&kt(g.center,_.center)<(g.diameter+_.diameter)/2+r-0.000000001)return h(),!1}}return!0}function NJt(e){let{plans:t,srj:n,clearance:o,allowSameNetMerges:i=!1}=e;return t.every((r,s)=>ICe({plan:r,otherPlans:t.filter((a,c)=>c!==s),srj:n,allowSameNetMerges:i,clearance:o}))}function X2e(e){let{plan:t,otherPlans:n,staticClearanceCache:o,blockingBusCounts:i,cacheKey:r,srj:s,sharedBoundary:a,clearance:c,allowBlindAndBuriedVias:l,allowSameNetMerges:d}=e,u=o?.get(r);if(u===void 0)u=ZUe({plan:t,srj:s,sharedBoundary:a,clearance:c,allowBlindAndBuriedVias:l,allowSameNetMerges:d}),o?.set(r,u);return u&&ICe({plan:t,otherPlans:n,srj:s,allowSameNetMerges:d,clearance:c,blockingBusCounts:i})}function Kh(e){let{plans:t,srj:n,sharedBoundary:o,clearance:i,allowBlindAndBuriedVias:r=!0,allowSameNetMerges:s=!1,allowSameNetPlaneMerges:a=!1}=e;for(let c=0;c<t.length;c++){let l=t[c];if(!ZUe({plan:l,srj:n,sharedBoundary:o,clearance:i,allowBlindAndBuriedVias:r,allowSameNetMerges:s||a&&l.termination.type==="plane"}))return!1;let d=t.filter((u,h)=>h!==c&&!(a&&l.termination.type==="plane"&&u.termination.type==="plane"&&Uy(n,l.connectionName,u.connectionName)));if(!ICe({plan:l,otherPlans:d,srj:n,allowSameNetMerges:s,clearance:i}))return!1}return!0}function bCe(e){let{srj:t,sharedBoundary:n,clearance:o,allowBlindAndBuriedVias:i=!0,allowSameNetMerges:r=!1,allowSameNetPlaneMerges:s=!1}=e,a={obstaclesByLayer:new Map,byConnection:new Map};for(let g of t.obstacles)for(let _ of g.layers){let f=a.obstaclesByLayer.get(_)??[];f.push(g),a.obstaclesByLayer.set(_,f)}let c=s&&!r?{obstaclesByLayer:a.obstaclesByLayer,byConnection:new Map}:a,l=new WeakMap,d=new WeakMap,u=new WeakMap,h=new Set,A=(g)=>{let _=d.get(g);if(_===void 0)_=ZUe({segmentCache:g.termination.type==="plane"?c:a,plan:g,srj:t,sharedBoundary:n,clearance:o,allowBlindAndBuriedVias:i,allowSameNetMerges:r||s&&g.termination.type==="plane"}),d.set(g,_);return _},m=(g,_)=>{let f=u.get(g);if(!f)f=new WeakMap,u.set(g,f);let y=f.get(_);if(y===void 0){let x=yB(g).length>yB(_).length;y=ICe({plan:x?_:g,otherPlans:[x?g:_],segmentIndexes:l,srj:t,clearance:o,allowSameNetMerges:r||s&&g.termination.type==="plane"&&_.termination.type==="plane"}),f.set(_,y);let C=u.get(_);if(!C)C=new WeakMap,u.set(_,C);C.set(g,y)}return y};return Object.assign((g)=>{let _=new Set(g);if(_.size===g.length){let f=g.filter((y)=>!h.has(y));for(let y of g){let x=h.has(y);if(!x&&!A(y))return!1;for(let C of x?f:g){if(y===C)continue;if(!m(y,C))return!1}}}else for(let[f,y]of g.entries()){if(!A(y))return!1;for(let[x,C]of g.entries())if(x!==f&&!m(y,C))return!1}return h=_,!0},{mutuallyClear:(g)=>g.every((_,f)=>g.every((y,x)=>x===f?!0:m(_,y)))})}function RJt(e){let{srj:t,bus:n,targetLayer:o,acceptedPlans:i,layerNames:r,traceWidth:s,viaDiameter:a,viaHoleDiameter:c,clearance:l,staticClearanceCache:d,blockingBusCounts:u,allowBlindAndBuriedVias:h=!0,allowSameNetMerges:A=!1,fixedViaPointsByConnectionIndex:m,planeCandidateSkipCount:p=0}=e,g=n.connections[0]?.sourceObstacle;if(!g||n.termination.type!=="plane")return null;let _=n.connections[0].sourceLayer;if(o===_)return null;let f=p,y=(I,b)=>{for(let[P,E]of I.entries()){if(!b(E,P))continue;if(f>0){f--;continue}if(e.collectAlternative&&!e.collectAlternative(E))continue;return E}return};if(m){let I=[];for(let b of n.connections){let P=m.get(b.connectionIndex);if(!P)return null;let E={x:b.sourcePoint.x,y:b.sourcePoint.y},B=W2e({preparedConnection:b,bus:n,targetLayer:o,track:jd(E,n.direction),exitAxis:h3(n),layerNames:r,traceWidth:s,viaDiameter:a,viaHoleDiameter:c,viaHandedness:0,interstitialEscape:!1,spreadLaneIndex:0,cornerExitLaneOffset:0,cornerLocalChannelLaneOffset:0,cornerBoundaryChannelLaneOffset:0,clearance:l,terminateAtVia:!0,allowBlindAndBuriedVias:h,initialViaPoint:P,sourceEscapePath:e.sourceEscapePaths?.get(b.connectionIndex)?[...e.sourceEscapePaths.get(b.connectionIndex)]:[E,P]}),T=[...eGe({preparedConnection:b,bus:n,viaDiameter:a,clearance:l}).map((N)=>tGe({plan:B,preparedConnection:b,planeLayer:o,viaPoint:N,layerNames:r,traceWidth:s,viaDiameter:a,viaHoleDiameter:c,allowBlindAndBuriedVias:h})),B],Q=y(T,(N,F)=>X2e({plan:N,otherPlans:[...i,...I],staticClearanceCache:d,blockingBusCounts:u,cacheKey:`plane-fixed:${n.busId}:${o}:${b.connectionIndex}:${P.x}:${P.y}:${F}`,srj:t,sharedBoundary:n.sharedBoundary,clearance:l,allowBlindAndBuriedVias:h,allowSameNetMerges:A}));if(!Q)return null;I.push(Q)}return I}if(qUe(t)&&n.connections.length===1&&xCe({center:n.connections[0].sourcePoint,diameter:a,obstacle:g})){let I=n.connections[0],b=W2e({preparedConnection:I,bus:n,targetLayer:o,track:jd(I.sourcePoint,n.direction),exitAxis:h3(n),layerNames:r,traceWidth:s,viaDiameter:a,viaHoleDiameter:c,viaHandedness:0,interstitialEscape:!1,spreadLaneIndex:0,cornerExitLaneOffset:0,cornerLocalChannelLaneOffset:0,cornerBoundaryChannelLaneOffset:0,clearance:l,terminateAtVia:!0,allowBlindAndBuriedVias:h,initialViaPoint:I.sourcePoint}),E=[...eGe({preparedConnection:I,bus:n,viaDiameter:a,clearance:l}).map((w)=>tGe({plan:b,preparedConnection:I,planeLayer:o,viaPoint:w,layerNames:r,traceWidth:s,viaDiameter:a,viaHoleDiameter:c,allowBlindAndBuriedVias:h})),b],B=y(E,(w,T)=>X2e({plan:w,otherPlans:i,staticClearanceCache:d,blockingBusCounts:u,cacheKey:`plane-via-in-pad:${n.busId}:${o}:${T}`,srj:t,sharedBoundary:n.sharedBoundary,clearance:l,allowBlindAndBuriedVias:h,allowSameNetMerges:A}));if(B)return[B]}let x=[n.direction,...["left","right","up","down"].filter((I)=>I!==n.direction)],C=[...x.map((I)=>({direction:I,centeredOutward:!1})),...x.map((I)=>({direction:I,centeredOutward:!0}))];for(let{direction:I,centeredOutward:b}of C){let P=I===n.direction?n:{...n,direction:I},E=Bl(I)?g.width:g.height,B=VW(P)/2-E/2>=a/2+l-0.000000001,w=b?!B&&JUe(P)?[0]:[]:B?[0]:[1,-1];for(let T of w)for(let Q of frn(P)){let N=[],F=!0;for(let H of Q){let z=jd(H.sourcePoint,I),Y=Ixe({preparedConnection:H,bus:P,targetLayer:o,traceWidth:s,viaDiameter:a,clearance:l,viaHandedness:T}),U=VW(P),X=M3(I),V=h3(P,I),W=X*(V-Fx(Y,I))-(a/2+l),j=Math.max(0,Math.floor(W/U)),q={x:H.sourcePoint.x,y:H.sourcePoint.y},ne=Fx(Y,I),ce=jd(Y,I),oe=grn(P),ie=[],J=128;for(let se=0;se<=j&&ie.length<128;se++){let le=XA(ne+X*se*U,ce,I);if(se===0)ie.push([q,Y]);else{for(let he of TJt(q,le))if(ie.push(he),ie.length>=128)break;if(ie.length<128)ie.push([q,Y,le])}for(let he=1;he<=Math.min(3,se-1)&&ie.length<128;he++){let ue=se-he;if(ue<1||ue>j)continue;for(let Ae of[-1,1]){let _e=ce+Ae*he*oe,Pe=XA(ne,_e,I),Ee=XA(ne+X*ue*U,ce,I),Te=XA(ne+X*ue*U,_e,I),be=Math.min(U,oe)*0.2;for(let me of TJt(q,Te))if(ie.push(me),ie.length>=128)break;if(ie.length>=128)break;if(ie.push(wJt([q,Y,Pe,Te],be),wJt([q,Y,Ee,Te],be)),ie.length>=128)break}}}let ee;for(let[se,le]of ie.entries()){let he=W2e({preparedConnection:H,bus:P,targetLayer:o,track:z,exitAxis:h3(P),layerNames:r,traceWidth:s,viaDiameter:a,viaHoleDiameter:c,viaHandedness:T,interstitialEscape:!B,spreadLaneIndex:0,cornerExitLaneOffset:0,cornerLocalChannelLaneOffset:0,cornerBoundaryChannelLaneOffset:0,clearance:l,terminateAtVia:!0,allowBlindAndBuriedVias:h,sourceEscapePath:le}),Ae=[...eGe({preparedConnection:H,bus:P,viaDiameter:a,clearance:l}).map((_e)=>tGe({plan:he,preparedConnection:H,planeLayer:o,viaPoint:_e,layerNames:r,traceWidth:s,viaDiameter:a,viaHoleDiameter:c,allowBlindAndBuriedVias:h})),he];if(ee=y(Ae,(_e,Pe)=>X2e({plan:_e,otherPlans:[...i,...N],staticClearanceCache:d,blockingBusCounts:u,cacheKey:`plane:${n.busId}:${o}:${I}:${H.connectionIndex}:${T}:${se}:${Pe}`,srj:t,sharedBoundary:n.sharedBoundary,clearance:l,allowBlindAndBuriedVias:h,allowSameNetMerges:A})),ee)break}if(!ee){F=!1;break}N.push(ee)}if(F)return N}}return null}function*SCe(e,t=1,n=!1){let{srj:o,bus:i,targetLayer:r,acceptedPlans:s,layerNames:a,traceWidth:c,viaDiameter:l,viaHoleDiameter:d,clearance:u,compactBusTracks:h,staticClearanceCache:A,blockingBusCounts:m,allowBlindAndBuriedVias:p=!0,allowSameNetMerges:g=!1,rejectedViaMinimalCandidates:_,stopAfterFirstRejectedViaMinimalCandidate:f=!1,fixedViaPointsByConnectionIndex:y,fixedBoundaryTracksByConnectionIndex:x,reservedVias:C=[],softReservedVias:I=[],viaMinimalOnly:b=!1,allowBoundarySideViaFallback:P=!1,preferCornerBoundaryVia:E=!1,adaptiveWindingRouteOrder:B=!1,alignWindingGridToPads:w=!1,fixedViaFallbackRouteOrderAttempts:T=24,allowFixedViaReservedExitFallback:Q=!1,cornerBandTargetTrackOffset:N,cornerExitLaneOffset:F,forbidEarlyExitBoundaryContact:H=!1}=e;if(!Number.isInteger(t)||t<1)throw Error(`FanoutSolver: maxAlternatives must be a positive integer, received ${t}`);if(F!==void 0&&(!Number.isSafeInteger(F)||F<0))throw Error(`FanoutSolver: cornerExitLaneOffset must be a non-negative safe integer, received ${F}`);if(y&&i.connections.some((le)=>!y.has(le.connectionIndex)))return[];if(i.termination.type==="plane"){let le=[];if(i.connections.length===1&&t>1)return RJt({...e,planeCandidateSkipCount:0,collectAlternative:(he)=>(le.push([he]),le.length>=t)}),le;for(let he=0;he<t;he++){let ue=RJt({...e,planeCandidateSkipCount:he});if(!ue)break;le.push(ue)}return le}if(x){if(!i.exitEdge)throw Error("FanoutSolver: fixed boundary tracks require an exit edge");let le=i.exitEdge==="left"||i.exitEdge==="right",he=le?i.sharedBoundary.minY:i.sharedBoundary.minX,ue=le?i.sharedBoundary.maxY:i.sharedBoundary.maxX;for(let Ae of i.connections){let _e=x.get(Ae.connectionIndex);if(_e===void 0||!Number.isFinite(_e)||_e<he-0.000000001||_e>ue+0.000000001)throw Error(`FanoutSolver: invalid fixed boundary track for ${Ae.connection.name}`)}}let z=h3(i),Y=i.connections[0]?.sourceObstacle;if(!Y)return[[]];let U=Bl(i.direction)?Y.width:Y.height,X=i.connections[0].sourceLayer,V=r!==X,W=JUe(i),j=VW(i)/2-U/2>=l/2+u-0.000000001,q=V&&!W&&!j,ne=V?j||W?[0]:p?[1,-1]:[-1,1]:[0],ce=(()=>{if(p)return ne;if(ne.length!==2||!ne.includes(-1)||!ne.includes(1))return ne;let le=i.connections.reduce((ue,Ae)=>ue+jd(Ae.sourcePoint,i.direction),0)/i.connections.length,he=i.connections.reduce((ue,Ae)=>ue+jd(Ae.exitTargetPoint??Ae.targetPoint,i.direction),0)/i.connections.length;if(he>le+0.000000001)return[-1,1];if(he<le-0.000000001)return[1,-1];return ne})(),oe=[],ie=new Set,J=BJt(i,s);if(F!==void 0)J.exit=F;let ee=(le)=>{if(x&&le.some((ue)=>{let Ae=x.get(ue.connectionIndex),_e=i.exitEdge==="left"||i.exitEdge==="right"?ue.exitPoint.y:ue.exitPoint.x;return Math.abs(_e-Ae)>0.000000001}))return;let he=le.map((ue)=>`${ue.connectionIndex}:${ue.targetLayer}:${ue.exitPoint.x}:${ue.exitPoint.y}:${ue.segments.map((Ae)=>`${Ae.start.x},${Ae.start.y},${Ae.end.x},${Ae.end.y},${Ae.layer}`).join(";")}`).join("|");if(ie.has(he))return;ie.add(he),oe.push(le)};if(!YW(i)&&i.exitEdge&&i.connections.length===1&&a.includes(r)&&(i.allowedLayers===void 0||i.allowedLayers.includes(r))&&(i.routableEscapeLayers===void 0||i.routableEscapeLayers.includes(r))&&i.connections[0].sourceLayer!==r&&y&&e.sourceEscapePaths?.has(i.connections[0].connectionIndex)){let le=i.connections[0],he=x3(i.exitEdge),ue=Kg({srj:o,bus:i,targetLayer:r,terminals:[{connection:le,viaPoint:y.get(le.connectionIndex),exitPoint:XA(h3(i,he),lF({fixedBoundaryTracksByConnectionIndex:x,bus:i,connection:le,boundaryDirection:he}),he)}],acceptedPlans:s,layerNames:a,traceWidth:c,viaDiameter:l,viaHoleDiameter:d,clearance:u,allowBlindAndBuriedVias:p,allowSameNetMerges:g,maximumRouteOrderAttempts:3,reservedVias:C,softReservedVias:I,gridStepDivisor:2,gridStep:e.windingGridStep,alignGridToPads:w,sourceEscapePaths:e.sourceEscapePaths,heuristicWeight:e.windingHeuristicWeight,forbidEarlyExitBoundaryContact:H},t,n),Ae=ue.next();while(!Ae.done)yield{phase:"via-minimal-winding",busId:i.busId,targetLayer:r,winding:Ae.value},Ae=ue.next();for(let _e of Ae.value){if(!Kh({plans:[...s,..._e],srj:o,sharedBoundary:i.sharedBoundary,clearance:u,allowBlindAndBuriedVias:p,allowSameNetMerges:g}))continue;if(ee(_e),oe.length>=t)return oe}}if(YW(i)&&i.exitEdge){let le=x3(i.exitEdge),he=h3(i,le),ue=JI(i),Ae=qUe(o)&&i.connections.every((je)=>xCe({center:je.sourcePoint,diameter:l,obstacle:je.sourceObstacle})),_e=24,Pe=Boolean(ue||VYe({bus:i,boundaryDirection:le,traceWidth:c,clearance:u})),Ee=Arn({bus:i,boundaryDirection:le,layerNames:a,targetLayer:r}),Te=Ee.orders.length,be=Pe?Ee.ordinaryOrderCount:1,me=ce.map((je)=>({label:`uniform-${je}`,useViaInPad:!1,getViaHandedness:()=>je,maximumRouteOrderAttempts:p?void 0:24})),ye=i.connections.toSorted((je,Re)=>jd(je.sourcePoint,i.direction)-jd(Re.sourcePoint,i.direction)||Fx(je.sourcePoint,i.direction)-Fx(Re.sourcePoint,i.direction)||je.connectionIndex-Re.connectionIndex),Ce=new Map(ye.map((je,Re)=>[je.connectionIndex,Re])),ve=(je)=>je<ye.length/2?1:-1,De=Math.floor(ye.length/2),Ze=[0,1,De,De+1,...ye.map((je,Re)=>Re)].filter((je,Re,Je)=>je>=0&&je<ye.length&&Je.indexOf(je)===Re),st=[[De],[De+1],[0],[1],[0,De+1],[1,De],[0,De],[1,De+1],[0,1],[De,De+1],...Ze.map((je)=>[je])].map((je)=>je.filter((Re)=>Re>=0&&Re<ye.length).toSorted((Re,Je)=>Re-Je)).filter((je,Re,Je)=>je.length>0&&Je.findIndex((Ve)=>Ve.join(",")===je.join(","))===Re),et=!p&&(C.length>0||s.some((je)=>je.termination.type==="plane"))&&ce.includes(-1)&&ce.includes(1)?[{label:"toward-source-median",useViaInPad:!1,maximumRouteOrderAttempts:24,getViaHandedness:(je)=>ve(Ce.get(je.connectionIndex)??0)},...st.slice(0,12).map((je)=>({label:`toward-source-median-with-ranks-${je.join("-")}-flipped`,useViaInPad:!1,maximumRouteOrderAttempts:6,getViaHandedness:(Re)=>{let Je=Ce.get(Re.connectionIndex)??0,Ve=ve(Je);return je.includes(Je)?-Ve:Ve}})),{label:"alternating-source-grid-a",useViaInPad:!1,maximumRouteOrderAttempts:3,getViaHandedness:(je)=>(Ce.get(je.connectionIndex)??0)%2===0?-1:1},{label:"alternating-source-grid-b",useViaInPad:!1,maximumRouteOrderAttempts:3,getViaHandedness:(je)=>(Ce.get(je.connectionIndex)??0)%2===0?1:-1},{label:"away-from-source-median",useViaInPad:!1,maximumRouteOrderAttempts:24,getViaHandedness:(je)=>(Ce.get(je.connectionIndex)??0)<ye.length/2?-1:1}]:[],lt={label:"via-in-pad",useViaInPad:!0,getViaHandedness:()=>0},it=y??(!p&&(i.connections.length>=8||VYe({bus:i,boundaryDirection:le,traceWidth:c,clearance:u}))&&C.length===0?qu([i],{viaDiameter:l,viaHoleDiameter:d,traceWidth:c,clearance:u,additionalObstacles:o.obstacles,blockingSegments:s.flatMap((je)=>yB(je).map((Re)=>({connectionIndex:je.connectionIndex,segment:Re}))),blockingVias:s.flatMap((je)=>UW(je).map((Re)=>({connectionIndex:je.connectionIndex,...Re.center,center:Re.center,diameter:Re.diameter,spanLayers:Re.spanLayers})))}):null),gt=it?[...Array.from({length:be},(je,Re)=>({label:`component-matched-vias-winding-${Re}`,useViaInPad:!1,getViaHandedness:()=>0,getViaPoint:(Je)=>it.get(Je.connectionIndex),maximumRouteOrderAttempts:1,windingOrderIndex:Re,preferTargetDirectedLaneBias:!0})),{label:"component-matched-vias-fallback",useViaInPad:!1,getViaHandedness:()=>0,getViaPoint:(je)=>it.get(je.connectionIndex),maximumRouteOrderAttempts:T,windingOrderIndex:0,preferTargetDirectedLaneBias:!0},...!JI(i)&&Te>1?Array.from({length:Te},(je,Re)=>[!0,!1].map((Je)=>({label:`expanded-winding-${Re}-${Je}`,useViaInPad:!1,getViaHandedness:()=>0,getViaPoint:(Ve)=>it.get(Ve.connectionIndex),maximumRouteOrderAttempts:1,windingOrderIndex:Re,preferTargetDirectedLaneBias:Je,reserveTerminalExitPoints:!Je,allowLayerInterleaving:!0}))).flat():[],...Q&&y&&!JI(i)&&Te===1&&i.connections.length>2?[!0,!1].map((je)=>({label:`fixed-vias-reserved-exits-${je}`,useViaInPad:!1,getViaHandedness:()=>0,getViaPoint:(Re)=>it.get(Re.connectionIndex),maximumRouteOrderAttempts:Math.min(24,T),windingOrderIndex:0,preferTargetDirectedLaneBias:je,reserveTerminalExitPoints:!0})):[]]:[],wt=s.some((je)=>je.termination.type==="plane"),vt=s.some((je)=>je.termination.type==="boundary")&&!p?[...et,...me]:[...me,...et],Ht=Ae?wt?[lt,...vt]:[...vt,lt]:vt,Xt=y?gt:[...gt,...Ht];if(!y&&!p&&i.connections.length>1&&i.connections.every((je)=>je.sourceLayer!==r)&&ce.includes(-1)&&ce.includes(1)){let je=Vsi(i.connections,i.direction);for(let Re of ce)for(let Je of je)Xt.push({label:`local-dogbone-repair-${Re}-${Je.join("-")}`,useViaInPad:!1,getViaHandedness:()=>Re,maximumRouteOrderAttempts:6,localDogboneRepair:!0,getViaPoint:(Ve)=>{let Ye=Ixe({preparedConnection:Ve,bus:i,targetLayer:r,traceWidth:c,viaDiameter:l,clearance:u,viaHandedness:Re});if(!Je.includes(Ve.connectionIndex))return Ye;return i.direction==="up"||i.direction==="down"?{x:Ye.x,y:2*Ve.sourcePoint.y-Ye.y}:{x:2*Ve.sourcePoint.x-Ye.x,y:Ye.y}}})}if(w&&ue&&F===void 0){let je=BJt(i,s.filter((Re)=>Re.targetLayer===r)).exit;if(je!==J.exit)Xt.push(...Xt.map((Re)=>({...Re,label:`${Re.label}-layer-local-corner`,cornerExitLaneOffset:je})))}let ut=new Set;for(let je of Xt){let Re=i.connections.map((qe)=>{let rt=je.getViaHandedness(qe),Ct=ue?HS({fixedBoundaryTracksByConnectionIndex:x,bus:i,connection:qe,cornerExitLaneOffset:je.cornerExitLaneOffset??J.exit,traceWidth:c,viaDiameter:l,clearance:u,layerNames:a,targetLayer:r,windingOrderIndex:je.windingOrderIndex,cornerBandTargetTrackOffset:N}):lF({fixedBoundaryTracksByConnectionIndex:x,allowLayerInterleaving:je.allowLayerInterleaving,bus:i,connection:qe,boundaryDirection:le,traceWidth:c,clearance:u,layerNames:a,targetLayer:r,windingOrderIndex:je.windingOrderIndex});return{connection:qe,viaPoint:je.getViaPoint?je.getViaPoint(qe):je.useViaInPad?{x:qe.sourcePoint.x,y:qe.sourcePoint.y}:Ixe({preparedConnection:qe,bus:i,targetLayer:r,traceWidth:c,viaDiameter:l,clearance:u,viaHandedness:rt}),exitPoint:XA(he,Ct,le)}}),Je=w||Boolean(je.getViaPoint&&!y);if(je.localDogboneRepair&&!qu([i],{viaDiameter:l,viaHoleDiameter:d,traceWidth:c,clearance:u,additionalObstacles:o.obstacles,fixedViaPointsByConnectionIndex:new Map(Re.map((qe)=>[qe.connection.connectionIndex,qe.viaPoint])),blockingSegments:s.flatMap((qe)=>yB(qe).map((rt)=>({connectionIndex:qe.connectionIndex,segment:rt}))),blockingVias:[...s.flatMap((qe)=>UW(qe).map((rt)=>({connectionIndex:qe.connectionIndex,center:rt.center,diameter:rt.diameter,spanLayers:rt.spanLayers}))),...C.map(({via:qe})=>({connectionIndex:-1,...qe}))]}))continue;let Ve=je.getViaPoint&&Math.min(i.pitchX,i.pitchY)-2*(l/2+c/2+u)<c+u?2:1,Ye=`${Re.map((qe)=>`${qe.connection.connectionIndex}:${qe.viaPoint.x}:${qe.viaPoint.y}:${qe.exitPoint.x}:${qe.exitPoint.y}`).join("|")}:${je.maximumRouteOrderAttempts??"all"}:${Ve}:${Je}:${Boolean(je.localDogboneRepair)}:${Boolean(je.preferTargetDirectedLaneBias)}:${Boolean(je.reserveTerminalExitPoints)}`;if(ut.has(Ye))continue;ut.add(Ye);let mt=Kg({heuristicWeight:e.windingHeuristicWeight,srj:o,bus:i,targetLayer:r,terminals:Re,acceptedPlans:s,layerNames:a,traceWidth:c,viaDiameter:l,viaHoleDiameter:d,clearance:u,allowBlindAndBuriedVias:p,allowSameNetMerges:g,maximumRouteOrderAttempts:je.maximumRouteOrderAttempts,adaptiveRouteOrder:B,alignGridToPads:Je,includeReverseTargetRotation:je.localDogboneRepair,reservedVias:C,softReservedVias:I,reserveTerminalExitPoints:je.reserveTerminalExitPoints,gridStepDivisor:Ve,gridStep:e.windingGridStep,sourceEscapePaths:e.sourceEscapePaths,preferTargetDirectedLaneBias:je.preferTargetDirectedLaneBias,forbidEarlyExitBoundaryContact:H},y&&b?Math.min(2,Math.max(1,t-oe.length)):je.maximumRouteOrderAttempts===void 0?Math.min(2,t-oe.length):2,n),ft=mt.next();while(!ft.done)yield{phase:"via-minimal-winding",busId:i.busId,targetLayer:r,winding:ft.value},ft=mt.next();let Oe=ft.value;for(let qe of Oe){if(!Kh({plans:[...s,...qe],srj:o,sharedBoundary:i.sharedBoundary,clearance:u,allowBlindAndBuriedVias:p,allowSameNetMerges:g})){if(Kh({plans:qe,srj:o,sharedBoundary:i.sharedBoundary,clearance:u,allowBlindAndBuriedVias:p,allowSameNetMerges:g})&&_){if(_.push(qe),f)return oe}continue}if(ee(qe),oe.length>=t)return oe}}}if(oe.length===0&&P&&y&&i.connections.length<=2&&i.exitEdge&&i.connections.every((le)=>le.sourceLayer===i.connections[0].sourceLayer&&le.sourceLayer!==r)){let le=i.connections[0].sourceLayer,he=x3(i.exitEdge),ue=h3(i,he),Ae=i.connections.map((et)=>E&&JI(i)?HS({fixedBoundaryTracksByConnectionIndex:x,bus:i,connection:et,cornerExitLaneOffset:J.exit,traceWidth:c,viaDiameter:l,clearance:u,layerNames:a,targetLayer:r,cornerBandTargetTrackOffset:N}):lF({fixedBoundaryTracksByConnectionIndex:x,bus:i,connection:et,boundaryDirection:he,traceWidth:c,clearance:u,layerNames:a,targetLayer:r})),_e=Ae.map((et)=>XA(ue,et,he)),Pe={...o,obstacles:o.obstacles.map((et)=>{let lt=i.connections.find((it)=>et===it.sourceObstacle||kt(et.center,it.sourcePoint)<=0.0000001&&et.layers.includes(it.sourceLayer));return lt?{...et,connectedTo:[...et.connectedTo,lt.connection.name]}:et})},Ee=Math.max(l/2+u,Math.min(i.pitchX,i.pitchY)/2),Te=E?JI(i):void 0,be=[1,2,3,4,5].flatMap((et)=>{let lt=et*Ee,it=Ae.map((gt)=>XA(ue-M3(he)*lt,gt,he));if(!Te)return[it];return[Ae.map((gt)=>XA(ue-M3(he)*lt,gt+(Te==="maximum"?lt:-lt),he)),it]}),me={x:i.connections.reduce((et,lt)=>et+lt.sourcePoint.x,0)/i.connections.length,y:i.connections.reduce((et,lt)=>et+lt.sourcePoint.y,0)/i.connections.length},ye=[{x:-1,y:0,distance:me.x-Math.min(...i.xCoordinates)},{x:1,y:0,distance:Math.max(...i.xCoordinates)-me.x},{x:0,y:-1,distance:me.y-Math.min(...i.yCoordinates)},{x:0,y:1,distance:Math.max(...i.yCoordinates)-me.y}].toSorted((et,lt)=>et.distance-lt.distance),Ce=i.connections.length===2?ye.flatMap((et)=>[3].map((lt)=>i.connections.map((it)=>{let gt=y.get(it.connectionIndex);return{x:gt.x+et.x*lt*i.pitchX,y:gt.y+et.y*lt*i.pitchY}}))):[],ve=i.connections.map((et)=>y.get(et.connectionIndex)),De=[{distance:me.x-i.componentBounds.minX,axis:"x",value:i.componentBounds.minX-2*Ee},{distance:i.componentBounds.maxX-me.x,axis:"x",value:i.componentBounds.maxX+2*Ee},{distance:me.y-i.componentBounds.minY,axis:"y",value:i.componentBounds.minY-2*Ee},{distance:i.componentBounds.maxY-me.y,axis:"y",value:i.componentBounds.maxY+2*Ee}].toSorted((et,lt)=>et.distance-lt.distance).flatMap(({axis:et,value:lt})=>{let it=et==="x"?"y":"x",gt=ve.reduce((Ht,Xt)=>Ht+Xt[it],0)/ve.length,wt=ve.map((Ht,Xt)=>({index:Xt,track:Ht[it]})).toSorted((Ht,Xt)=>Ht.track-Xt.track||Ht.index-Xt.index),Dt=l+u,vt=ve.map((Ht,Xt)=>({...Ht,[et]:lt,[it]:wt.length===2&&Math.abs(wt[1].track-wt[0].track)<Dt?gt+(wt.findIndex((ut)=>ut.index===Xt)-0.5)*Dt:Ht[it]}));return vt.length===2?[vt,[vt[1],vt[0]]]:[vt]}),Ze=i.connections.length===2&&Boolean(JI(i)),st=[...(Ze?De:[]).map((et)=>({points:et,boundarySide:!1})),...Ce.map((et)=>({points:et,boundarySide:!1})),...be.map((et)=>({points:et,boundarySide:!0})),...(!Ze?De:[]).map((et)=>({points:et,boundarySide:!1}))];for(let{points:et,boundarySide:lt}of st){let it=i.connections.map((je,Re)=>({connectionName:je.connection.name,via:{center:et[Re],diameter:l,spanLayers:Wy({fromLayer:le,toLayer:r,layerNames:a,allowBlindAndBuriedVias:p})}}));if(it.some((je,Re)=>it.some((Je,Ve)=>Re!==Ve&&(kt(je.via.center,Je.via.center)<l+u-0.000000001||lt&&Bi(je.via.center,Je.via.center,_e[Ve])<l/2+c/2+u-0.000000001))))continue;if(it.some(({via:je})=>o.obstacles.some((Re)=>Re.layers.some((Je)=>je.spanLayers.includes(Je))&&jy(je.center,Re)<je.diameter/2+u-0.000000001)))continue;let gt=Kg({heuristicWeight:e.windingHeuristicWeight,srj:Pe,bus:i,targetLayer:le,terminals:i.connections.map((je,Re)=>({connection:je,viaPoint:je.sourcePoint,exitPoint:et[Re]})),acceptedPlans:s,layerNames:a,traceWidth:c,viaDiameter:l,viaHoleDiameter:d,clearance:u,allowBlindAndBuriedVias:p,allowSameNetMerges:g,maximumRouteOrderAttempts:i.connections.length===1?3:6,softReservedVias:I,reservedVias:i.connections.length>1?[...C,...it]:C,gridStepDivisor:2,allowSourceLayerRouting:!0,alignGridToPads:!0,forbidEarlyExitBoundaryContact:H},1,n),wt=gt.next();while(!wt.done)yield{phase:"via-minimal-winding",busId:i.busId,targetLayer:le,winding:wt.value},wt=gt.next();let Dt=wt.value[0];if(!Dt||Dt.length!==i.connections.length)continue;let vt;if(!lt){let je=Kg({heuristicWeight:e.windingHeuristicWeight,srj:o,bus:i,targetLayer:r,terminals:i.connections.map((Je,Ve)=>({connection:Je,viaPoint:et[Ve],exitPoint:_e[Ve]})),acceptedPlans:s,layerNames:a,traceWidth:c,viaDiameter:l,viaHoleDiameter:d,clearance:u,allowBlindAndBuriedVias:p,allowSameNetMerges:g,maximumRouteOrderAttempts:6,reservedVias:C,softReservedVias:I,gridStepDivisor:2,alignGridToPads:!0,forbidEarlyExitBoundaryContact:H},1,n),Re=je.next();while(!Re.done)yield{phase:"via-minimal-winding",busId:i.busId,targetLayer:r,winding:Re.value},Re=je.next();if(vt=Re.value[0],!vt)continue}let Ht=Dt.map((je,Re)=>{let Je=et[Re],Ve=_e[Re],mt=vt?vt[Re].segments.filter((qe)=>qe.layer===r):[{start:Je,end:Ve,width:c,layer:r}],ft={center:Je,diameter:l,holeDiameter:d,fromLayer:le,toLayer:r,spanLayers:Wy({fromLayer:le,toLayer:r,layerNames:a,allowBlindAndBuriedVias:p})},Oe=je.trace.route.filter((qe)=>qe.route_type==="wire");return{...je,...E||i.connections.length>1||!lt?{sourceEscapeSegmentCount:je.segments.length}:{},targetLayer:r,exitPoint:Ve,via:ft,segments:[...je.segments,...mt],length:je.length+mt.reduce((qe,rt)=>qe+kt(rt.start,rt.end),0),trace:{...je.trace,route:[...Oe,{route_type:"via",...Je,from_layer:le,to_layer:r,via_diameter:l,via_hole_diameter:d},{route_type:"wire",...Je,width:c,layer:r},...mt.map((qe)=>({route_type:"wire",...qe.end,width:c,layer:r}))]}}}),Xt=Kh({plans:[...s,...Ht],srj:o,sharedBoundary:i.sharedBoundary,clearance:u,allowBlindAndBuriedVias:p,allowSameNetMerges:g}),ut=Ht.every((je)=>C.every((Re)=>{let Je=je.via;if(Re.connectionName===je.connectionName||g&&Uy(o,Re.connectionName,je.connectionName))return!0;if(Je.spanLayers.some((Ve)=>Re.via.spanLayers.includes(Ve))&&kt(Je.center,Re.via.center)<(Je.diameter+Re.via.diameter)/2+u-0.000000001)return!1;return je.segments.every((Ve)=>!Re.via.spanLayers.includes(Ve.layer)||Bi(Re.via.center,Ve.start,Ve.end)>=Re.via.diameter/2+c/2+u-0.000000001)}));if(Xt&&ut)return ee(Ht),oe}}if(b||y||e.sourceEscapePaths||C.length>0)return oe;let se=(le,he,ue,Ae)=>{if(oe.length>=t)return;if(ue>=le.length){ee(Ae);return}let _e=le[ue],Pe=joe(i,_e),Te=[Cai({bus:i,connection:_e,traceWidth:c}),Iai({bus:i,connection:_e,targetUsesVia:V,interstitialEscape:q,compactBusTracks:h,traceWidth:c,viaDiameter:l,clearance:u})].filter((be,me,ye)=>ye.findIndex((Ce)=>Math.abs(Ce-be)<0.000000001)===me).flatMap((be)=>xai({bus:i,connection:_e,preferredTrack:be,traceWidth:c,clearance:u})).filter((be,me,ye)=>ye.findIndex((Ce)=>Math.abs(Ce.value-be.value)<0.000000001)===me);for(let be=0;be<Te.length;be++){let me=Te[be],ye=W2e({preparedConnection:_e,bus:i,targetLayer:r,track:me.value,exitAxis:z,layerNames:a,traceWidth:c,viaDiameter:l,viaHoleDiameter:d,viaHandedness:he,interstitialEscape:q,spreadLaneIndex:Math.min(Pe,i.connections.length-Pe-1),cornerExitLaneOffset:J.exit,cornerLocalChannelLaneOffset:J.localChannel,cornerBoundaryChannelLaneOffset:J.boundaryChannel,clearance:u,terminateAtVia:!1,allowBlindAndBuriedVias:p,cornerBandTargetTrackOffset:N,fixedBoundaryTracksByConnectionIndex:x});if(!X2e({plan:ye,otherPlans:[...s,...Ae],staticClearanceCache:A,blockingBusCounts:m,cacheKey:`boundary:${i.busId}:${r}:${_e.connectionIndex}:${he}:${be}:${i.exitEdge??"legacy"}:${J.exit}:${J.localChannel}:${J.boundaryChannel}:${N??0}:${x?.get(_e.connectionIndex)??"default"}`,srj:o,sharedBoundary:i.sharedBoundary,clearance:u,allowBlindAndBuriedVias:p,allowSameNetMerges:g}))continue;if(se(le,he,ue+1,[...Ae,ye]),oe.length>=t)return;if(t===1)return}};for(let le of ce)for(let he of frn(i))if(se(he,le,0,[]),oe.length>=t)return oe;return oe}function yW(e,t=1){let n=SCe(e,t),o=n.next();while(!o.done)o=n.next();return o.value}function KL(e){return yW(e,1)[0]??null}var Cu=0.0000001,Eoe=(e,t,n)=>t==="left"?e.x-n.minX:t==="right"?n.maxX-e.x:t==="top"?n.maxY-e.y:e.y-n.minY;function Pai(e,t,n,o){let i=Eoe(e.start,t,n),r=Eoe(e.end,t,n);if(Math.min(i,r)>o)return null;if(Math.max(i,r)<=o)return e;let s=(o-i)/(r-i),a={x:e.start.x+(e.end.x-e.start.x)*s,y:e.start.y+(e.end.y-e.start.y)*s};return{...e,...i>o?{start:a}:{end:a}}}function UYe(e){let t=e.segments.length-1;while(t>0&&e.segments[t-1].layer===e.targetLayer)t--;let n=e.segments.slice(t);return{first:t,points:n.length?[n[0].start,...n.map((o)=>o.end)]:[]}}function QJt(e,t,n){let o=[...e.segments.slice(0,t),...n.slice(1).flatMap((r,s)=>kt(n[s],r)>Cu?[{start:n[s],end:r,layer:e.targetLayer,width:e.segments.at(-1).width}]:[])],i=e.trace.route.length;while(i>0){let r=e.trace.route[i-1];if(r.route_type!=="wire"||r.layer!==e.targetLayer)break;i--}return{...e,segments:o,length:o.reduce((r,s)=>r+kt(s.start,s.end),0),trace:{...e.trace,route:[...e.trace.route.slice(0,i),...n.map((r)=>({route_type:"wire",x:r.x,y:r.y,layer:e.targetLayer,width:e.segments.at(-1).width}))]}}}function vai(e,t){let n=[...e],o=(i,r)=>{let s=Math.abs(r.x-i.x),a=Math.abs(r.y-i.y);return s<Cu||a<Cu||Math.abs(s-a)<Cu};for(let i=Math.max(1,t);i<n.length-1;i++){let r=n[i-1],s=n[i],a=n[i+1],c=kt(r,s),l=kt(s,a);if(c<Cu||l<Cu||((s.x-r.x)*(a.x-s.x)+(s.y-r.y)*(a.y-s.y))/(c*l)>=-Cu)continue;if(o(r,a)){n.splice(i,1),i--;continue}let d=[];for(let h of["x","y"]){let A=(r[h]-s[h])/(a[h]-s[h]);if(A>Cu&&A<1-Cu)d.push({x:s.x+(a.x-s.x)*A,y:s.y+(a.y-s.y)*A});let m=(a[h]-r[h])/(s[h]-r[h]);if(m>Cu&&m<1-Cu)d.push({x:r.x+(s.x-r.x)*m,y:r.y+(s.y-r.y)*m})}let u=d.find((h)=>o(r,h)&&o(h,a));if(u)n[i]=u}return n}function Eai(e,t){let n=(o)=>{let i=new Map;for(let r of e)for(let s of UYe(r).points.slice(0,-1)){let a=(s[o]%t+t)%t,c=a<0.000001||t-a<0.000001?0:Math.round(a*1e6)/1e6;i.set(c,(i.get(c)??0)+1)}return[...i].sort((r,s)=>s[1]-r[1]||r[0]-s[0])[0]?.[0]??0};return{x:n("x"),y:n("y")}}function Mai(e,t,n,o){let i=t==="left"||t==="right"?"y":"x",r=e.map((c)=>c.exitPoint[i]).sort((c,l)=>c-l),s=[],a=(c,l)=>Math.abs(c-l-Math.round((c-l)/o)*o)<=Cu;if(r.length===1&&!a(r[0],n[i]))s.push({coordinate:r[0],count:1});for(let c=1;c<r.length;c++)for(let l of[r[c-1],r[c]]){if(a(l,n[i]))continue;let d=s.find((u)=>a(u.coordinate,l));if(d)d.count++;else s.push({coordinate:l,count:1})}return[n,...s.sort((c,l)=>l.count-c.count||c.coordinate-l.coordinate).slice(0,3).map(({coordinate:c})=>({...n,[i]:c}))]}function Bai(e,t,n,o,i){let r=o+i,s=e.map((d,u)=>u),a=(d)=>{while(s[d]!==d)d=s[d];return d},c=(d,u)=>{let h={x:u.x+(n==="left"?2*r:n==="right"?-2*r:0),y:u.y+(n==="bottom"?2*r:n==="top"?-2*r:0)};return d.some((A)=>ad(A.start,A.end,u,h)<(A.width+o)/2+i-Cu)};for(let d=0;d<e.length;d++)for(let u=d+1;u<e.length;u++){if(a(d)===a(u))continue;if(kt(e[d].exitPoint,e[u].exitPoint)<=2*r+Cu||c(t[d],e[u].exitPoint)||c(t[u],e[d].exitPoint)||t[d].some((A)=>t[u].some((m)=>ad(A.start,A.end,m.start,m.end)<(A.width+m.width)/2+i-Cu)))s[a(u)]=a(d)}let l=new Map;return e.forEach((d,u)=>{let h=a(u),A=l.get(h)??[];A.push(d),l.set(h,A)}),[...l.values()]}function WYe(e){let{inputSrj:t,preparedBuses:n,reservedPlans:o=[],traceWidth:i,clearance:r}=e,s=i+r,a=e.gridStep??i;if(!(s>0)||!(a>0)||!Number.isFinite(a))throw Error("FanoutSolver: boundary tail repair requires positive finite trace/grid spacing");let c=new Map(n.flatMap((m)=>m.connections.map((p)=>[p.connectionIndex,{bus:m,connection:p}]))),l=[...e.plans],d=new Map;for(let m of l){let p=c.get(m.connectionIndex);if(!p)throw Error(`FanoutSolver: missing prepared boundary-tail connection ${m.connectionIndex}`);if(m.termination.type!=="boundary"||!m.exitEdge||Math.abs(Eoe(m.exitPoint,m.exitEdge,p.bus.sharedBoundary))>Cu)continue;let g=`${m.exitEdge}:${m.targetLayer}`,_=d.get(g)??[];_.push(m),d.set(g,_)}let u=[...d.values()];for(let m=0;m<u.length;m++){let p=u[m],g=p[0].exitEdge,_=p[0].targetLayer,f=c.get(p[0].connectionIndex).bus.sharedBoundary,y=Math.min(24*s,(g==="left"||g==="right"?f.maxX-f.minX:f.maxY-f.minY)/3),x=p.map((w)=>w.segments.filter((T)=>T.layer===_).flatMap((T)=>Pai(T,g,f,y)??[])),C=Bai(p,x,g,i,r);if(C.length>1){u.splice(m,1,...C),m--;continue}let I=new Set;for(let w of p)if(UYe(w).points.slice(0,-1).some((T)=>Math.abs(Eoe(T,g,f))<=Cu&&kt(T,w.exitPoint)>Cu))I.add(w);for(let w=0;w<p.length;w++)for(let T=w+1;T<p.length;T++)if(x[w].some((Q)=>x[T].some((N)=>ad(Q.start,Q.end,N.start,N.end)<(Q.width+N.width)/2+r-Cu)))I.add(p[w]),I.add(p[T]);if(!I.size)continue;let b=!0;while(b){b=!1;for(let w of p)if(!I.has(w)&&[...I].some((T)=>{if(kt(w.exitPoint,T.exitPoint)<=2*s+Cu)return!0;let Q={x:T.exitPoint.x+(g==="left"?2*s:g==="right"?-2*s:0),y:T.exitPoint.y+(g==="bottom"?2*s:g==="top"?-2*s:0)};return w.segments.some((N)=>N.layer===_&&ad(N.start,N.end,T.exitPoint,Q)<(N.width+i)/2+r-Cu)}))I.add(w),b=!0}let P=p.filter((w)=>I.has(w));if(P.length>32)return null;let E=Mai(P,g,e.gridOrigin??Eai(P,a),a),B=null;for(let w of E){for(let T of[8,16,24]){let Q=Math.min(T*s,y),N=g==="left"||g==="right"?"x":"y",F=g==="left"||g==="bottom"?1:-1,H=g==="left"?f.minX:g==="right"?f.maxX:g==="top"?f.maxY:f.minY,z=H+F*Q,Y=w[N]+(F>0?Math.ceil((z-w[N])/a):Math.floor((z-w[N])/a))*a,U=(Y-H)*F,X=P.map((ue)=>{let{first:Ae,points:_e}=UYe(ue),Pe=_e.findLastIndex((Ce)=>Eoe(Ce,g,f)>=U-Cu);if(Pe<0){let Ce=ue.additionalVias?.at(-1)??ue.via;if(!Ce||Ce.toLayer!==ue.targetLayer||!_e[0]||kt(Ce.center,_e[0])>Cu||Ae<(ue.sourceEscapeSegmentCount??1))return null;return{plan:ue,first:Ae,prefix:[_e[0]],point:_e[0]}}if(Pe>=_e.length-1)return null;let Ee=_e[Pe],Te=_e[Pe+1],be=(Y-Ee[N])/(Te[N]-Ee[N]);if(!Number.isFinite(be)||be<-Cu||be>1+Cu)return null;let me={x:Ee.x+(Te.x-Ee.x)*be,y:Ee.y+(Te.y-Ee.y)*be},ye=[..._e.slice(0,Pe+1),...kt(Ee,me)>Cu?[me]:[]];if(Ae+ye.length-1<(ue.sourceEscapeSegmentCount??1))return null;return{plan:ue,first:Ae,prefix:ye,point:me}});if(X.some((ue)=>!ue))continue;let V=X.filter((ue)=>ue!==null),W=[...l.filter((ue)=>!I.has(ue)),...o],j=V.map((ue)=>({...QJt(ue.plan,ue.first,ue.prefix),exitPoint:ue.point})),q=[...W,...j],ne=V.map((ue)=>({connection:{...c.get(ue.plan.connectionIndex).connection,sourcePoint:{...ue.point,layer:_},sourceLayer:_},viaPoint:ue.point,exitPoint:ue.plan.exitPoint})),ce={...f};if(g==="left")ce.maxX=Math.min(f.maxX,Y+3*s);if(g==="right")ce.minX=Math.max(f.minX,Y-3*s);if(g==="bottom")ce.maxY=Math.min(f.maxY,Y+3*s);if(g==="top")ce.minY=Math.max(f.minY,Y-3*s);let oe=N==="x"?"y":"x",ie=ne.flatMap((ue)=>[ue.viaPoint[oe],ue.exitPoint[oe]]);if(oe==="x")ce.minX=Math.max(ce.minX,Math.min(...ie)-3*s),ce.maxX=Math.min(ce.maxX,Math.max(...ie)+3*s);else ce.minY=Math.max(ce.minY,Math.min(...ie)-3*s),ce.maxY=Math.min(ce.maxY,Math.max(...ie)+3*s);let J={...c.get(P[0].connectionIndex).bus,connections:ne.map((ue)=>ue.connection),sharedBoundary:ce},ee=Kg({...e,srj:t,bus:J,terminals:ne,targetLayer:_,sourceEscapePaths:void 0,acceptedPlans:q,reservedVias:q.flatMap((ue)=>[ue.via,...ue.additionalVias??[],ue.planeEndpointVia].filter((Ae)=>!!Ae).map((Ae)=>({connectionName:ue.connectionName,via:Ae}))),gridStep:a,gridOrigin:w,gridStepDivisor:2,alignGridToPads:!0,heuristicWeight:2,maximumRouteOrderAttempts:72,reserveTerminalExitPoints:!0,adaptiveRouteOrder:!0,allowSourceLayerRouting:!0,forbidEarlyExitBoundaryContact:!0},1,!1),se=ee.next();while(!se.done)se=ee.next();let le=se.value[0];if(!le)continue;let he=V.map((ue)=>{let Ae=le.find((Pe)=>Pe.connectionIndex===ue.plan.connectionIndex);if(!Ae||Ae.via||Ae.additionalVias?.length)throw Error("FanoutSolver: boundary-tail repair added a physical via");let _e=vai([...ue.prefix,...Ae.segments.map((Pe)=>Pe.end)],ue.prefix.length-1);return QJt(ue.plan,ue.first,_e)});if(!Kh({plans:he,srj:{...t,traces:[...t.traces??[],...W.flatMap((ue)=>[ue.trace,...ue.planeEndpointTrace?[ue.planeEndpointTrace]:[]])]},sharedBoundary:f,clearance:r,allowBlindAndBuriedVias:e.allowBlindAndBuriedVias,allowSameNetMerges:e.allowSameNetMerges}))continue;B=he;break}if(B)break}if(!B)return null;for(let w of B)l[l.findIndex((T)=>T.connectionIndex===w.connectionIndex)]=w}let h=[...l,...o];if(t.traces?.length&&h.length){let m=n.map((g)=>g.sharedBoundary);if(!bCe({srj:t,sharedBoundary:{minX:Math.min(...m.map((g)=>g.minX)),maxX:Math.max(...m.map((g)=>g.maxX)),minY:Math.min(...m.map((g)=>g.minY)),maxY:Math.max(...m.map((g)=>g.maxY))},clearance:r,allowBlindAndBuriedVias:e.allowBlindAndBuriedVias,allowSameNetMerges:e.allowSameNetMerges})(h))return null}return qd({inputSrj:t,routedSrj:{...t,traces:[...h.flatMap((m)=>[m.trace,...m.planeEndpointTrace?[m.planeEndpointTrace]:[]])]},clearance:r,allowBlindAndBuriedVias:e.allowBlindAndBuriedVias}).valid?l:null}var xs=0.0000001;function _X(e,t,n,o){let i=new Float64Array(t.length+1),r=new Int32Array(t.length);for(let c=0;c<t.length;c++){let l=t[c],d=t[c-1];i[c+1]=i[c]+kt(l.start,l.end),r[c]=c===0?0:r[c-1]+Number(d.layer!==l.layer||kt(d.end,l.start)>xs)}let s=[e.via,...e.additionalVias??[],e.planeEndpointVia].filter((c)=>!!c),a=(c,l)=>{if(r[c]!==r[l])return!1;let d=0,u=0;for(let h=c;h<=l;h++){let A=t[h],m=A.end.x-A.start.x,p=A.end.y-A.start.y;if(Math.abs(m)>xs){let g=Math.sign(m);if(d&&d!==g)return!1;d=g}if(Math.abs(p)>xs){let g=Math.sign(p);if(u&&u!==g)return!1;u=g}}return!0};for(let[c,l]of t.entries()){if(o&&!o.has(c))continue;if(!o&&e.segments.some((d)=>d.layer===l.layer&&d.width===l.width&&Bi(l.start,d.start,d.end)<=xs&&Bi(l.end,d.start,d.end)<=xs))continue;for(let[d,u]of t.entries()){if(u.layer!==l.layer)continue;let h=(l.width+u.width)/2+n,A=Math.min(c,d),m=Math.max(c,d);if(r[c]===r[d]&&Math.max(0,i[m]-i[A+1])<=h+xs)continue;if(!Jm(l,u,n)){if(!a(A,m))return!1}}for(let d of s){if(!d.spanLayers.includes(l.layer))continue;let u=(l.width+d.diameter)/2+n;if(Bi(d.center,l.start,l.end)>=u-xs)continue;if([l.start,l.end].some((A)=>kt(A,d.center)<=xs))continue;let h=(A)=>{let m=A===-1?l.start:l.end,p=A===-1?l.end:l.start;if(kt(m,d.center)>u+xs||(m.x-d.center.x)*(p.x-m.x)+(m.y-d.center.y)*(p.y-m.y)<-xs)return!1;for(let g=c+A;g>=0&&g<t.length;g+=A){let _=t[g];if(_.layer!==l.layer||kt(m,A===-1?_.end:_.start)>xs)return!1;let f=A===-1?_.start:_.end;if(kt(f,d.center)>u+xs||(f.x-d.center.x)*(f.x-m.x)+(f.y-d.center.y)*(f.y-m.y)>xs)return!1;if(m=f,kt(m,d.center)<=xs)return!0}return!1};if(!h(-1)&&!h(1))return!1}}return!0}function zie(e,t,n,o,i=!1,r=e.traceWidth/4){let{inputSrj:s,layerNames:a,traceWidth:c,clearance:l}=e,d=t.trace.route.findIndex((C)=>C.route_type==="via");if(d<0)return null;let u=t.trace.route.slice(d+1).flatMap((C)=>C.route_type==="wire"?[{x:C.x,y:C.y,z:a.indexOf(C.layer)}]:[]);for(let C=1;i&&C<u.length-1;C++){let I=u[C-1],b=u[C],P=u[C+1];if(I.z!==b.z||b.z!==P.z)continue;if(((b.x-I.x)*(P.x-b.x)+(b.y-I.y)*(P.y-b.y))/(kt(I,b)*kt(b,P))<-xs)u.splice(C,1),C--}let h=k3(s,!1),A=new Oie([...n.flatMap((C)=>[...C.segments,...C.planeEndpointSegments??[]]),...h.flatMap((C)=>C.segments)]),m=[...n.flatMap((C)=>[C.via,...C.additionalVias??[],C.planeEndpointVia].filter((I)=>!!I)),...h.flatMap((C)=>C.vias)],p=gF({points:u,chamfer:r,repairReversingDiagonalCorners:!0,segmentIsClear:(C,I)=>{let b={start:C,end:I,layer:a[C.z],width:c};for(let P of[C,I]){let E=o.sharedBoundary;if(P.x<E.minX-xs||P.x>E.maxX+xs||P.y<E.minY-xs||P.y>E.maxY+xs)return!1;if((Math.abs(P.x-E.minX)<xs||Math.abs(P.x-E.maxX)<xs||Math.abs(P.y-E.minY)<xs||Math.abs(P.y-E.maxY)<xs)&&kt(P,t.exitPoint)>xs)return!1}return s.obstacles.every((P)=>!P.layers.includes(b.layer)||Jc(b,P)>=c/2+l-0.000000001)&&A.querySegment(b,l).every((P)=>Jm(b,P,l))&&m.every((P)=>!P.spanLayers.includes(b.layer)||Bi(P.center,C,I)>=(c+P.diameter)/2+l-0.000000001)}});if(!p)return null;let g=t.trace.route.slice(0,d+1);for(let C=0;C<p.length;C++){let I=p[C],b=p[C-1];if(b&&b.z!==I.z){let P=t.trace.route.find((E)=>E.route_type==="via"&&kt(E,I)<xs&&E.from_layer===a[b.z]&&E.to_layer===a[I.z]);if(!P)return null;g.push(P)}g.push({route_type:"wire",x:I.x,y:I.y,layer:a[I.z],width:c})}g[g.length-1]=t.trace.route.at(-1);let _={...t.trace,route:g},f=CCe(s,_,!1).segments,y=t.sourceEscapeSegmentCount??1,x=[...t.segments.slice(0,y),...f.slice(y)];if(!_X(t,x,l))return null;return{...t,trace:_,segments:x,length:x.reduce((C,I)=>C+kt(I.start,I.end),0)}}function TT(e){for(let t=0;t<e.length;t++){let n=e[t],o=n.end.x-n.start.x,i=n.end.y-n.start.y,r=Math.hypot(o,i);if(Math.min(Math.abs(o),Math.abs(i),Math.abs(Math.abs(o)-Math.abs(i)))>xs)return!1;let s=e[t+1];if(s&&kt(n.end,s.start)>xs)return!1;if(!s||s.layer!==n.layer||r<xs)continue;let a=s.end.x-s.start.x,c=s.end.y-s.start.y,l=Math.hypot(a,c);if(l<xs)continue;if((o*a+i*c)/(r*l)<Math.SQRT1_2-xs)return!1}return!0}function Xne(e,t){let n=t.sharedBoundary;return e.segments.every((o)=>[o.start,o.end].every((i)=>{if(i.x<n.minX-xs||i.x>n.maxX+xs||i.y<n.minY-xs||i.y>n.maxY+xs)return!1;if(e.termination.type!=="boundary")return!0;return!(Math.abs(i.x-n.minX)<xs||Math.abs(i.x-n.maxX)<xs||Math.abs(i.y-n.minY)<xs||Math.abs(i.y-n.maxY)<xs)||kt(i,e.exitPoint)<xs}))}function wai(e,t,n,o,i=!1){let r=t.sourceEscapeSegmentCount??1;if(t.termination.type!==(i?"boundary":"plane")||!t.via||!i&&t.additionalVias?.length||t.planeEndpointTrace||t.planeEndpointSegments?.length||t.planeEndpointVia||!i&&t.segments.length!==r)return null;let s=t.segments.slice(0,r);if(!s.length||s.some((b)=>b.layer!==t.sourceLayer)||kt(s[0].start,t.sourcePoint)>xs||kt(s.at(-1).end,t.via.center)>xs)return null;let a=o.connections.find((b)=>b.connectionIndex===t.connectionIndex);if(!a?.sourceObstacle)return null;let c=t.trace.route.findIndex((b)=>b.route_type==="via");if(c<1)return null;let{inputSrj:l,traceWidth:d,clearance:u,layerNames:h}=e,A=(b)=>t.termination.type==="plane"&&Uy(l,t.connectionName,b),m=n.filter((b)=>b.termination.type!=="plane"||!A(b.connectionName)),p=k3(l,!1).filter((b)=>!A(b.connectionName)),g=new Oie([...t.segments.slice(r),...m.flatMap((b)=>[...b.segments,...b.planeEndpointSegments??[]]),...p.flatMap((b)=>b.segments)]),_=[...t.additionalVias??[],...m.flatMap((b)=>[b.via,...b.additionalVias??[],b.planeEndpointVia].filter((P)=>!!P)),...p.flatMap((b)=>b.vias)],f=gF({points:[t.sourcePoint,...s.map((b)=>b.end)].map((b)=>({...b,z:h.indexOf(t.sourceLayer)})),chamfer:d/4,repairReversingDiagonalCorners:!0,segmentIsClear:(b,P)=>{let E={start:b,end:P,layer:t.sourceLayer,width:d},B=o.sharedBoundary;if([b,P].some((w)=>w.x<B.minX||w.x>B.maxX||w.y<B.minY||w.y>B.maxY))return!1;return l.obstacles.every((w)=>{if(!w.layers.includes(t.sourceLayer))return!0;if(Jc(E,w)>=d/2+u-0.000000001)return!0;if(w===a.sourceObstacle&&AX(b,w,d/2+u)&&(b.x-a.sourcePoint.x)*(P.x-b.x)+(b.y-a.sourcePoint.y)*(P.y-b.y)>=-xs)return!0;if(w!==a.sourceObstacle&&t.termination.type==="plane"&&ib(l,w,t.connectionName))return!0;return Hie({inputSrj:l,segment:E,bodyObstacle:w,connectionName:t.connectionName})})&&g.querySegment(E,u).every((w)=>Jm(E,w,u))&&_.every((w)=>!w.spanLayers.includes(E.layer)||Bi(w.center,b,P)>=(d+w.diameter)/2+u-0.000000001)}});if(!f)return null;let y={...t.trace,route:[t.trace.route[0],...f.slice(1).map((b)=>({route_type:"wire",x:b.x,y:b.y,layer:t.sourceLayer,width:d})),...t.trace.route.slice(c)]},x=CCe(l,{...y,route:y.route.slice(0,f.length)},!1).segments,C=[...x,...t.segments.slice(r)],I=!1;for(let b of x){let P=Jc(b,a.sourceObstacle);if(I&&P<d/2+u-0.000000001)return null;if(jy(b.end,a.sourceObstacle)>=d/2+u-0.000000001)I=!0}if(!TT(x)||!_X(t,C,u,new Set(x.map((b,P)=>P))))return null;return{...t,trace:y,segments:C,sourceEscapeSegmentCount:x.length,length:[...C,...t.planeEndpointSegments??[]].reduce((b,P)=>b+kt(P.start,P.end),0)}}function eWe(e){let t=new Map(e.preparedBuses.map((c)=>[c.busId,c]));if(new Set(e.plans.map((c)=>c.connectionIndex)).size!==e.plans.length)return null;let n=[...e.plans],o=!1;if(e.repairPlaneSourceCorners||e.repairSignalSourceCorners)for(let c=0;c<n.length;c++){let l=n[c];if(TT(l.segments.slice(0,l.sourceEscapeSegmentCount??1)))continue;let d=t.get(l.busId);if(!d)return null;if(l.termination.type==="plane"?!e.repairPlaneSourceCorners:!e.repairSignalSourceCorners)return null;let u=wai(e,l,n.filter((h,A)=>A!==c),d,l.termination.type==="boundary");if(!u)return null;n[c]=u,o=!0}if(o&&e.rematchRepairedLengths){let c=e.rematchRepairedLengths(n);if(!c)return null;n=c}let i=[...n],r=jUe(e.inputSrj);for(let c of n){if(!t.has(c.busId))throw Error("Final normalization requires each original prepared bus");if(!TT(c.segments.slice(0,c.sourceEscapeSegmentCount??1))||!Xne({...c,segments:c.segments.slice(0,c.sourceEscapeSegmentCount??1)},t.get(c.busId))||!TT(c.planeEndpointSegments??[]))return null}if(n.some((c)=>!Xne(c,t.get(c.busId)))){let c=WYe({...e,plans:n,allowBlindAndBuriedVias:!1,allowSameNetMerges:!1});if(!c)return null;if(n=c,e.rematchRepairedLengths){let l=e.rematchRepairedLengths(n);if(!l)return null;n=l}}for(let c=0;c<n.length;c++){let l=n[c];if(TT(l.segments)&&Xne(l,t.get(l.busId)))continue;let d=t.get(l.busId),u=null,h=null;for(let A=e.traceWidth/4;A>=0.000001;A=Math.max(0.000001,A/4)){let m=zie(e,l,n.filter((p,g)=>g!==c),d,!1,A);if(m){h??=m;let p=n.filter((_)=>_.busId===d.busId).map((_)=>_===l?m.length:_.length);if(r.every((_)=>{if(!_.connectionIndices.includes(l.connectionIndex))return!0;let f=_.connectionIndices.map((x)=>n.find((C)=>C.connectionIndex===x));if(f.some((x)=>!x))return!0;let y=f.map((x)=>x===l?m.length:x.length);return Math.abs(y[0]-y[1])<=_.lengthTolerance+xs})&&(d.maxLengthSkew===void 0||Math.max(...p)-Math.min(...p)<=d.maxLengthSkew+xs)){u=m;break}}if(A===0.000001)break}if(!u&&h&&e.rematchRepairedLengths){let A=e.rematchRepairedLengths(n.map((p,g)=>g===c?h:p)),m=A?.find((p)=>p.connectionIndex===l.connectionIndex);if(A&&m&&TT(m.segments))n=A,u=m}if(!u)return null;n[c]=u}for(let c=0;c<n.length;c++){let l=n[c],d=i.find((m)=>m.connectionIndex===l.connectionIndex);if(!d||l.targetLayer!==d.targetLayer||kt(l.exitPoint,d.exitPoint)>xs||JSON.stringify(l.via)!==JSON.stringify(d.via)||JSON.stringify(l.additionalVias)!==JSON.stringify(d.additionalVias)||!TT(l.segments)||!Xne(l,t.get(l.busId)))return null;if(l===d)continue;let u=d.trace.route.findIndex((m)=>m.route_type==="via"),h=l.trace.route.findIndex((m)=>m.route_type==="via");if(u<0||h<0)return null;let A=d.sourceEscapeSegmentCount??1;n[c]={...l,sourcePoint:d.sourcePoint,via:d.via,additionalVias:d.additionalVias,exitPoint:d.exitPoint,sourceEscapeSegmentCount:A,segments:[...d.segments.slice(0,A),...l.segments.slice(l.sourceEscapeSegmentCount??1)],trace:{...d.trace,route:[...d.trace.route.slice(0,u+1),...l.trace.route.slice(h+1)]}}}for(let c of e.preparedBuses){let l=n.filter((d)=>d.busId===c.busId);if(l.length!==c.connections.length||l.some((d)=>!TT(d.segments)||!Xne(d,c)))return null;if(c.maxLengthSkew===void 0)continue;if(Math.max(...l.map((d)=>d.length))-Math.min(...l.map((d)=>d.length))>c.maxLengthSkew+xs)return null}let s=new Map(n.map((c)=>[c.connectionIndex,c]));for(let c of r){let l=c.connectionIndices.map((u)=>s.get(u));if(l.some((u)=>!u))continue;let d=l.map((u)=>[...u.segments,...u.planeEndpointSegments??[]].reduce((h,A)=>h+kt(A.start,A.end),0));if(d.some((u)=>!Number.isFinite(u))||Math.abs(d[0]-d[1])>c.lengthTolerance+xs)return null}if(e.inputSrj.traces?.length&&n.length){let c=e.preparedBuses.map((d)=>d.sharedBoundary);if(!bCe({srj:e.inputSrj,sharedBoundary:{minX:Math.min(...c.map((d)=>d.minX)),maxX:Math.max(...c.map((d)=>d.maxX)),minY:Math.min(...c.map((d)=>d.minY)),maxY:Math.max(...c.map((d)=>d.maxY))},clearance:e.clearance,allowBlindAndBuriedVias:!1,allowSameNetPlaneMerges:!0})(n))return null}return qd({inputSrj:e.inputSrj,routedSrj:{...e.inputSrj,traces:[...n.flatMap((c)=>[c.trace,...c.planeEndpointTrace?[c.planeEndpointTrace]:[]])]},clearance:e.clearance,allowBlindAndBuriedVias:!1}).valid?n:null}function Tai(e){let{inputSrj:t,plans:n,unroutedSourceBuses:o,clearance:i}=e,r=new Map(n.map((y)=>[y.connectionIndex,y])),s=fB(t.layerCount),a=o.filter((y)=>y.termination.type==="boundary"&&y.connections.length>0&&y.connections.every((x)=>{let C=r.get(x.connectionIndex),I=C?.segments[0],b=C?.via;return C?.connectionName===x.connection.name&&C.termination.type==="boundary"&&C.segments.length===1&&(C.sourceEscapeSegmentCount??1)===1&&!C.additionalVias?.length&&!C.planeEndpointTrace&&!C.planeEndpointVia&&I&&I.layer===x.sourceLayer&&b&&b.fromLayer===x.sourceLayer&&b.toLayer===C.targetLayer&&b.toLayer!==b.fromLayer&&b.spanLayers.length===s.length&&s.every((P)=>b.spanLayers.includes(P))&&kt(I.start,x.sourcePoint)<0.0000001&&kt(I.end,b.center)<0.0000001&&kt(C.exitPoint,b.center)<0.0000001})),c=a[0]?.connections[0];if(!c)return null;let l=r.get(c.connectionIndex),d=l.via,u=l.segments[0].width;if(a.some((y)=>y.connections.some((x)=>{let C=r.get(x.connectionIndex);return C.via.diameter!==d.diameter||C.via.holeDiameter!==d.holeDiameter||C.segments[0].width!==u})))return null;let h=new Set(a.flatMap((y)=>y.connections.map((x)=>x.connectionIndex))),A=n.filter((y)=>!h.has(y.connectionIndex)),m=k3(t,!1),p=qu(a,{traceWidth:u,clearance:i,viaDiameter:d.diameter,viaHoleDiameter:d.holeDiameter,maximumSearchStates:1e4,preferredViaPointsByConnectionIndex:new Map(n.filter((y)=>h.has(y.connectionIndex)).map((y)=>[y.connectionIndex,y.via.center])),additionalObstacles:t.obstacles,blockingSegments:[...A.flatMap((y)=>[...y.segments,...y.planeEndpointSegments??[]].map((x)=>({connectionIndex:y.connectionIndex,segment:x}))),...m.flatMap((y)=>y.segments.map((x)=>({connectionIndex:-1,segment:x})))],blockingVias:[...A.flatMap((y)=>[y.via,...y.additionalVias??[],y.planeEndpointVia].filter((x)=>x!==void 0).map((x)=>({connectionIndex:y.connectionIndex,...x}))),...m.flatMap((y)=>y.vias.map((x)=>({connectionIndex:-1,...x})))]});if(!p)return null;let g=new Map;for(let y of a)for(let x of y.connections){let C=r.get(x.connectionIndex),I=p.get(x.connectionIndex);if(kt(I,C.via.center)<0.0000001)continue;let b=I.x-x.sourcePoint.x,P=I.y-x.sourcePoint.y;if(Math.min(Math.abs(b),Math.abs(P),Math.abs(Math.abs(b)-Math.abs(P)))>0.0000001)return null;g.set(x.connectionIndex,cb({bus:y,terminal:{connection:x,viaPoint:I,exitPoint:I},targetLayer:C.targetLayer,targetLayerPoints:[I],layerNames:s,traceWidth:u,viaDiameter:d.diameter,viaHoleDiameter:d.holeDiameter,allowBlindAndBuriedVias:!1}))}if(!g.size)return null;let _=n.map((y)=>g.get(y.connectionIndex)??y);if(!Kh({plans:_,srj:t,sharedBoundary:a[0].sharedBoundary,clearance:i,allowBlindAndBuriedVias:!1,allowSameNetMerges:!1}))return null;return qd({inputSrj:t,routedSrj:{...t,traces:[...t.traces??[],..._.flatMap((y)=>[y.trace,...y.planeEndpointTrace?[y.planeEndpointTrace]:[]])]},clearance:i,allowBlindAndBuriedVias:!1}).valid?_:null}var Xi=0.000001;function v1(e,t){return kt(e,t)<=Xi}function PCe(e){return[e.via,...e.additionalVias??[]].filter((t)=>t!==void 0)}function Dai(e,t){let n=t[0];if(!n)return null;let o=e.trace.route.find((h)=>h.route_type==="wire"),i=e.trace.route.findLast((h)=>h.route_type==="wire"),r=(h)=>{if(h?.route_type!=="wire")return{};let A={...h};return delete A.route_type,delete A.x,delete A.y,delete A.width,delete A.layer,A},s=PCe(e),c=v1(n.start,e.sourcePoint)&&n.layer!==e.sourceLayer&&s.some((h)=>v1(h.center,n.start)&&h.spanLayers.includes(e.sourceLayer)&&h.spanLayers.includes(n.layer))?e.sourceLayer:n.layer,l=[{...r(o),route_type:"wire",...n.start,width:n.width,layer:c}],d=n.start,u=c;for(let[h,A]of t.entries()){if(!v1(d,A.start))return null;if(u!==A.layer){let m=s.find((p)=>v1(p.center,A.start)&&p.spanLayers.includes(u)&&p.spanLayers.includes(A.layer));if(!m)return null;l.push({route_type:"via",...A.start,from_layer:u,to_layer:A.layer,via_diameter:m.diameter,via_hole_diameter:m.holeDiameter}),l.push({route_type:"wire",...A.start,width:A.width,layer:A.layer}),u=A.layer}l.push({...h===t.length-1?r(i):{},route_type:"wire",...A.end,width:A.width,layer:A.layer}),d=A.end}return l}function kS(e,t,n=!1){let o=Dai(e,t);if(!o)return null;let i=[...t,...e.planeEndpointSegments??[]].reduce((s,a)=>s+kt(a.start,a.end),0),r=t.findIndex((s)=>s.layer!==e.sourceLayer);return{...e,...n&&e.sourceEscapeSegmentCount!==void 0&&r>=0?{sourceEscapeSegmentCount:r}:{},trace:{...e.trace,route:o},segments:t,length:i}}function bxe(e,t,n){let o=[...PCe(e),...e.planeEndpointVia?[e.planeEndpointVia]:[]];for(let i of t){for(let a of o){if(a===i)continue;if(i.spanLayers.some((c)=>a.spanLayers.includes(c))&&kt(i.center,a.center)<(i.diameter+a.diameter)/2+n-0.000000001)return!1}let r=e.segments.flatMap((a,c)=>{let l=e.segments[c+1];return a.layer===i.fromLayer&&l?.layer===i.toLayer&&v1(a.end,i.center)&&v1(l.start,i.center)?[c]:[]});if(r.length!==1)return!1;let s=new Set;for(let a of[-1,1]){let c=i.center,l=0,d=a===-1?i.fromLayer:i.toLayer;for(let u=r[0]+(a===1?1:0);u>=0&&u<e.segments.length;u+=a){let h=e.segments[u],A=a===-1?h.end:h.start,m=a===-1?h.start:h.end,p=(i.diameter+h.width)/2+n;if(h.layer!==d||!v1(c,A)||l>p+Xi)break;s.add(u),l+=kt(A,m),c=m}}for(let[a,c]of[...e.segments,...e.planeEndpointSegments??[]].entries()){if(s.has(a)||!i.spanLayers.includes(c.layer))continue;if(Bi(i.center,c.start,c.end)<(i.diameter+c.width)/2+n-0.000000001)return!1}}return!0}function*Nai(e){let{plan:t,bus:n,layerNames:o,clearance:i,workBudget:r}=e;if(!t.via||PCe(t).length>5)return;let s=n.allowedLayers??o,a=(n.routableEscapeLayers??s).filter((u)=>s.includes(u)&&o.includes(u)&&u!==t.sourceLayer&&u!==t.targetLayer),c=[];for(let u of t.segments){let h=c.at(-1);if(h?.layer===u.layer&&u.layer===t.targetLayer){let A=h.end.x-h.start.x,m=h.end.y-h.start.y,p=u.end.x-u.start.x,g=u.end.y-u.start.y;if(Math.abs(A*g-m*p)<=Xi*Math.hypot(A,m)*Math.hypot(p,g)&&A*p+m*g>0){h.end=u.end;continue}}c.push({...u})}let l=kS(t,c);if(!l)return;let d=(u,h,A)=>({center:u,fromLayer:h,toLayer:A,diameter:t.via.diameter,holeDiameter:t.via.holeDiameter,spanLayers:o});for(let u of a)for(let h of[!0,!1]){if(h&&(l.additionalVias?.length||l.via.toLayer!==l.targetLayer))continue;for(let[A,m]of l.segments.entries()){if(m.layer!==l.targetLayer)continue;if(kt(m.start,m.end)<=Xi)continue;for(let p=0;p<37;p++){let g=0.05+p*0.025;if(!h&&g>=0.5)break;dF(r);let _=(I)=>({x:m.start.x+(m.end.x-m.start.x)*I,y:m.start.y+(m.end.y-m.start.y)*I}),f=_(g),y=_(1-g);if(!h&&kt(f,y)<t.via.diameter+i)continue;let x=h?[d(y,u,m.layer)]:[d(f,m.layer,u),d(y,u,m.layer)],C=h?kS({...l,via:{...l.via,toLayer:u},additionalVias:x},[...l.segments.slice(0,A).map((I)=>I.layer===l.targetLayer?{...I,layer:u}:I),{...m,end:y,layer:u},{...m,start:y},...l.segments.slice(A+1)]):kS({...l,additionalVias:[...l.additionalVias??[],...x]},[...l.segments.slice(0,A),{...m,end:f},{...m,start:f,end:y,layer:u},{...m,start:y},...l.segments.slice(A+1)]);if(C&&bxe(C,x,i))yield{plan:C,tuningLayer:u,addedVias:x}}}}}function yrn(e,t,n){return e.x<t.minX-n||e.x>t.maxX+n||e.y<t.minY-n||e.y>t.maxY+n}function Rai(e){let{segment:t,bounds:n,margin:o}=e,i={minX:n.minX-o,maxX:n.maxX+o,minY:n.minY-o,maxY:n.maxY+o},r=t.end.x-t.start.x,s=t.end.y-t.start.y,a=[0,1],c=(d)=>{if(d<=Xi||d>=1-Xi)return;let u={x:t.start.x+r*d,y:t.start.y+s*d};if(u.x<i.minX-Xi||u.x>i.maxX+Xi||u.y<i.minY-Xi||u.y>i.maxY+Xi)return;a.push(d)};if(Math.abs(r)>Xi)c((i.minX-t.start.x)/r),c((i.maxX-t.start.x)/r);if(Math.abs(s)>Xi)c((i.minY-t.start.y)/s),c((i.maxY-t.start.y)/s);let l=a.toSorted((d,u)=>d-u).filter((d,u,h)=>u===0||Math.abs(d-h[u-1])>Xi);return l.slice(1).map((d,u)=>{let h=l[u];return{...t,start:{x:t.start.x+r*h,y:t.start.y+s*h},end:{x:t.start.x+r*d,y:t.start.y+s*d}}})}function xrn(e){return e.componentObstacles.reduce((t,n)=>({minX:Math.min(t.minX,n.center.x-n.width/2),maxX:Math.max(t.maxX,n.center.x+n.width/2),minY:Math.min(t.minY,n.center.y-n.height/2),maxY:Math.max(t.maxY,n.center.y+n.height/2)}),{minX:Number.POSITIVE_INFINITY,maxX:Number.NEGATIVE_INFINITY,minY:Number.POSITIVE_INFINITY,maxY:Number.NEGATIVE_INFINITY})}function XYe(e,t){if(e.layer!==t.layer)return!1;if(Math.min(e.start.x,e.end.x)>Math.max(t.start.x,t.end.x)+Xi||Math.min(t.start.x,t.end.x)>Math.max(e.start.x,e.end.x)+Xi||Math.min(e.start.y,e.end.y)>Math.max(t.start.y,t.end.y)+Xi||Math.min(t.start.y,t.end.y)>Math.max(e.start.y,e.end.y)+Xi)return!1;return ad(e.start,e.end,t.start,t.end)<=Xi}function Crn(e){let t;return(n,o,i)=>{if(!t){t=[];for(let a=0;a<e.length;a++)for(let c=a+2;c<e.length;c++)if(XYe(e[a],e[c]))t.push([a,c])}let r=o+i-1,s=(a,c)=>c===a+2&&v1(n[a].end,n[c].start);for(let[a,c]of t){if(a===o||c===o)continue;let l=a>o?a+i-1:a,d=c>o?c+i-1:c;if(!s(l,d))return!0}for(let a=o;a<=r;a++)for(let c=0;c<n.length;c++){if(Math.abs(a-c)<2)continue;if(c>=o&&c<a)continue;let l=Math.min(a,c),d=Math.max(a,c);if(s(l,d))continue;if(XYe(n[l],n[d]))return!0}return!1}}function tWe(e){let{plan:t,segments:n,replacementStartIndex:o,replacementSegmentCount:i,clearance:r}=e,s=o+i-1,a=PCe(t),c=new Int32Array(n.length),l=new Float64Array(n.length+1);for(let u=0;u<n.length;u++){let h=n[u],A=n[u-1];c[u]=u===0?0:c[u-1]+Number(A.layer!==h.layer||!v1(A.end,h.start)),l[u+1]=l[u]+kt(h.start,h.end)}let d=(u,h)=>{if(u===h)return 0;if(c[u]!==c[h])return Number.POSITIVE_INFINITY;let A=Math.min(u,h),m=Math.max(u,h);return Math.max(0,l[m]-l[A+1])};for(let u=o;u<=s;u++){let h=n[u],A=t.segments[o];if(h.layer===A.layer&&h.width===A.width&&Bi(h.start,A.start,A.end)<=Xi&&Bi(h.end,A.start,A.end)<=Xi)continue;for(let[m,p]of n.entries()){let g=h.width/2+p.width/2+r;if(d(u,m)<=g+Xi)continue;if(!Jm(h,p,r))return!1}for(let m of a){if(!m.spanLayers.includes(h.layer))continue;if(v1(m.center,h.start)||v1(m.center,h.end))continue;let p=m.diameter/2+h.width/2+r,g=(_)=>{let f=_===-1?h.start:h.end,y=0;for(let x=u+_;x>=0&&x<n.length;x+=_){let C=n[x];if(C.layer!==h.layer)return!1;let I=_===-1?C.end:C.start;if(!v1(f,I))return!1;if(y+=kt(C.start,C.end),y>p+Xi)return!1;if(f=_===-1?C.start:C.end,v1(f,m.center))return!0}return!1};if(Bi(m.center,h.start,h.end)<p-Xi&&!g(-1)&&!g(1))return!1}}return!0}function Irn(e,t){return e.x>=t.minX-Xi&&e.x<=t.maxX+Xi&&e.y>=t.minY-Xi&&e.y<=t.maxY+Xi}function O_(e,t,n){return{x:e.x+t.x*n,y:e.y+t.y*n}}function Qai(e){let{segment:t,toothCount:n,targetAddedLength:o,pitch:i,placementFraction:r,normalSign:s}=e,a=t.end.x-t.start.x,c=t.end.y-t.start.y,l=Math.hypot(a,c);if(l<=Xi)return null;let d=Math.abs(a)<=Xi||Math.abs(c)<=Xi,u=Math.abs(Math.abs(a)-Math.abs(c))<=Xi;if(!d&&!u)return null;let h={x:a/l,y:c/l},A={x:-h.y*s,y:h.x*s},m=Math.min(i/2,o/(8*n*(Math.SQRT2-1)),e.chamferLimit??Number.POSITIVE_INFINITY),p=e.plateauLength??i,g=m*4+p,_=i,f=n*g+Math.max(0,n-1)*_,y=i/4;if(f+y*2>l+Xi)return null;let x=4*m*(Math.SQRT2-1);if(o+Xi<x*n)return null;let C=(o/n-x)/2,I=l-f-y*2,b=y+Math.max(0,I)*r,P=O_(t.start,h,b),E=[{...t.start},{...P}];for(let B=0;B<n;B++)if(P=O_(O_(P,h,m),A,m),E.push(P),P=O_(P,A,C),E.push(P),P=O_(O_(P,h,m),A,m),E.push(P),P=O_(P,h,p),E.push(P),P=O_(O_(P,h,m),A,-m),E.push(P),P=O_(P,A,-C),E.push(P),P=O_(O_(P,h,m),A,-m),E.push(P),B<n-1)P=O_(P,h,_),E.push(P);return E.push({...t.end}),E.filter((B,w)=>w===0||!v1(B,E[w-1]))}var brn=class extends Error{};function dF(e){if(e&&e.remaining--<=0)throw new brn}function*DT(e){let{plan:t,bus:n,targetAddedLength:o,clearance:i,sharedBoundary:r,allowInsideDenseBounds:s=!1,allowSourcePrefixMatching:a=!1,denseBoundarySplitApplied:c=!1}=e,l=xrn(n),d=Crn(t.segments),u=t.segments[0]?.width?t.segments[0].width/2+i:i,h=t.segments.map((p,g)=>({segment:p,segmentIndex:g})).filter(({segment:p,segmentIndex:g})=>p.layer===t.targetLayer||e.allowTransitLayerMatching&&p.layer!==t.sourceLayer&&(n.allowedLayers??[t.targetLayer]).includes(p.layer)&&(n.routableEscapeLayers??n.allowedLayers??[t.targetLayer]).includes(p.layer)||a&&t.via&&t.sourceLayer!==t.targetLayer&&g>0&&g<(t.sourceEscapeSegmentCount??1)&&p.layer===t.sourceLayer).toSorted((p,g)=>kt(g.segment.start,g.segment.end)-kt(p.segment.start,p.segment.end));for(let{segment:p,segmentIndex:g}of h){let _=p.width+i,f=kt(p.start,p.end),y=Math.min(12,Math.max(0,e.chamferLimit===void 0?Math.floor((f/_+0.5)/4):Math.floor((f+_/2)/(4*e.chamferLimit+(e.plateauLength??_)+_))));for(let x=1;x<=y;x++)for(let C of e.placementFractions??[0.5,0,1,0.25,0.75])for(let I of[1,-1]){dF(e.workBudget);let b=Qai({segment:p,toothCount:x,targetAddedLength:o,pitch:_,placementFraction:C,normalSign:I,plateauLength:e.plateauLength,chamferLimit:e.chamferLimit});if(!b)continue;if(b.some((w)=>!Irn(w,r)))continue;if(!s&&b.slice(1,-1).some((w)=>!yrn(w,l,u)))continue;let P=b.slice(1).map((w,T)=>({start:b[T],end:w,width:p.width,layer:p.layer})),E=[...t.segments.slice(0,g),...P,...t.segments.slice(g+1)];if(p.layer===t.sourceLayer&&p.layer!==t.targetLayer&&P.some((w)=>Jc(w,t.sourceObstacle)<w.width/2+i-Xi))continue;if(d(E,g,P.length))continue;if(!tWe({plan:t,segments:E,replacementStartIndex:g,replacementSegmentCount:P.length,clearance:i}))continue;let B=kS(t,E,a);if(B)yield B}}if(c)return;let A=t.segments.flatMap((p,g)=>a&&g===0?[p]:Rai({segment:p,bounds:l,margin:u})),m=kS(t,A,a);if(!m)return;yield*DT({...e,plan:m,denseBoundarySplitApplied:!0})}function*Lye(e){let{plan:t,bus:n,targetAddedLength:o,clearance:i}=e,r=xrn(n);for(let s=0;s<t.segments.length;s++){let a=t.segments[s],c=a.layer===t.sourceLayer&&a.layer!==t.targetLayer;if(c){if(!e.allowSourcePrefixMatching||!t.via||s===0)continue}else if(a.layer!==t.targetLayer&&(!e.allowTransitLayerMatching||!(n.allowedLayers??[t.targetLayer]).includes(a.layer)||!(n.routableEscapeLayers??n.allowedLayers??[t.targetLayer]).includes(a.layer)))continue;let l=kt(a.start,a.end);if(l<=Xi)continue;let d={x:(a.end.x-a.start.x)/l,y:(a.end.y-a.start.y)/l};for(let u=s+2;u<Math.min(t.segments.length,s+16);u++){if(t.segments.slice(s,u+1).some((x)=>x.layer!==a.layer))break;let A=t.segments[u],m=kt(A.start,A.end);if(m<=Xi)continue;let p={x:(A.end.x-A.start.x)/m,y:(A.end.y-A.start.y)/m};if(Math.abs(d.x+p.x)>Xi||Math.abs(d.y+p.y)>Xi)continue;dF(e.workBudget);let g=(x)=>({...x,x:x.x+d.x*o/2,y:x.y+d.y*o/2}),_=t.segments.map((x,C)=>C<s||C>u?x:C===s?{...x,end:g(x.end)}:C===u?{...x,start:g(x.start)}:{...x,start:g(x.start),end:g(x.end)}),f=_.slice(s,u+1);if(f.some((x,C)=>{let I=s+C;return _.some((b,P)=>{if(Math.abs(I-P)<2)return!1;let E=Math.min(I,P),B=Math.max(I,P);if(B===E+2&&v1(_[E].end,_[B].start))return!1;return XYe(x,b)})}))continue;if(f.some((x)=>[x.start,x.end].some((C)=>!Irn(C,n.sharedBoundary)||!e.allowInsideDenseBounds&&!yrn(C,r,x.width/2+i))))continue;if(c&&f.some((x)=>Jc(x,t.sourceObstacle)<x.width/2+i-Xi))continue;if(!tWe({plan:t,segments:_,replacementStartIndex:s,replacementSegmentCount:u-s+1,clearance:i}))continue;let y=kS(t,_);if(y)yield y}}}function a3(e){let t=e.map((n)=>n.length);return Math.max(...t)-Math.min(...t)}function JL(e,t){return e.filter((n)=>t.has(n.connectionIndex))}function*kai(e,t,n){let o=Crn(e.segments);for(let{segment:i,index:r}of e.segments.map((s,a)=>({segment:s,index:a})).filter(({segment:s})=>s.layer===e.targetLayer).toSorted((s,a)=>kt(a.segment.start,a.segment.end)-kt(s.segment.start,s.segment.end))){let s=kt(i.start,i.end);if(s<=Xi)continue;let a=Math.abs(i.end.x-i.start.x),c=Math.abs(i.end.y-i.start.y);if(a>Xi&&c>Xi&&Math.abs(a-c)>Xi)continue;let l={x:(i.end.x-i.start.x)/s,y:(i.end.y-i.start.y)/s},d=i.width+t;for(let u of[2,3,4,6]){let h=d*u;if(s<2*h+d)continue;for(let A of[1,-1]){dF(n);let m={x:-l.y*A,y:l.x*A},p=[i.start,O_(O_(i.start,l,h),m,h),O_(O_(i.end,l,-h),m,h),i.end],g=p.slice(1).map((y,x)=>({...i,start:p[x],end:y})),_=[...e.segments.slice(0,r),...g,...e.segments.slice(r+1)];if(o(_,r,g.length))continue;if(!tWe({plan:e,segments:_,replacementStartIndex:r,replacementSegmentCount:g.length,clearance:t}))continue;let f=kS(e,_);if(f)yield f}}}}function E1(e){if(e.maximumWorkUnits!==void 0&&(!Number.isSafeInteger(e.maximumWorkUnits)||e.maximumWorkUnits<0))throw Error("maximumWorkUnits must be a non-negative safe integer");let t=e.maximumWorkUnits===void 0?void 0:{remaining:e.maximumWorkUnits},n=jUe(e.inputSrj),o=new Map;for(let r of e.plans){let s=o.get(r.connectionIndex)??[];s.push(r),o.set(r.connectionIndex,s)}e={...e,preparedBuses:e.preparedBuses.filter((r)=>r.maxLengthSkew!==void 0||r.connections.some((s)=>o.has(s.connectionIndex)))};for(let r of e.preparedBuses)if(r.connections.some((s)=>{let a=o.get(s.connectionIndex);return a?.length!==1||a[0].busId!==r.busId||a[0].connectionName!==s.connection.name||e.inputSrj.connections[s.connectionIndex]?.name!==s.connection.name}))return{plans:null,failedBus:r};let i=bCe({srj:e.inputSrj,sharedBoundary:e.sharedBoundary,clearance:e.clearance,allowBlindAndBuriedVias:e.allowBlindAndBuriedVias,allowSameNetMerges:e.allowSameNetMerges});try{let r=nWe(e,i,t);return r.plans?Lai(e,r.plans,n,i,t):r}catch(r){if(r instanceof brn&&t?.activeBus)return{plans:null,failedBus:e.preparedBuses.find((s)=>s.busId===t.activeBus.busId)??t.activeBus};throw r}}function kJt({plans:e,connectionIndex:t,connectionName:n}){let o=e.filter((s)=>s.connectionIndex===t),i=o[0];if(o.length!==1||!i||i.connectionName!==n||!Number.isFinite(i.length))throw Error(`Differential-pair matching cannot resolve exactly one original plan for ${n}`);let r=[...i.segments,...i.planeEndpointSegments??[]].reduce((s,a)=>s+kt(a.start,a.end),0);if(!Number.isFinite(r)||Math.abs(r-i.length)>Xi)throw Error(`Differential-pair matching found inconsistent copper length for ${i.connectionName}`);return i}function Fye({plans:e,pair:t}){return[kJt({plans:e,connectionIndex:t.connectionIndices[0],connectionName:t.connectionNames[0]}),kJt({plans:e,connectionIndex:t.connectionIndices[1],connectionName:t.connectionNames[1]})]}function Lai(e,t,n,o,i){let r=new Map(e.preparedBuses.flatMap((u)=>u.connections.map((h)=>[h.connectionIndex,{bus:u,connection:h}]))),s=n.filter((u)=>u.connectionIndices.some((h)=>r.has(h)));if(!s.length)return{plans:t};let a=e.preparedBuses.map((u)=>({bus:u,indices:new Set(u.connections.map((h)=>h.connectionIndex))})),c=t,l=(u)=>a.every(({bus:h,indices:A})=>{if(h.maxLengthSkew===void 0)return!0;let m=JL(u,A);return m.length===h.connections.length&&a3(m)<=h.maxLengthSkew+Xi});for(let u=0;u<=s.length;u++){for(let h of s){let A=Fye({plans:c,pair:h});if(a3(A)<=h.lengthTolerance+Xi)continue;let m=h.connectionIndices.map((C)=>r.get(C)),p=m.find((C)=>C).bus;if(m.some((C)=>!C))return{plans:null,failedBus:p};let g=A[0].length<=A[1].length?0:1,_=m[g].bus,f={..._,connections:m.map((C)=>C.connection),maxLengthSkew:h.lengthTolerance},y=Math.max(...A.map((C)=>C.length)),x=nWe({...e,plans:c,preparedBuses:[f],unroutedSourceBuses:void 0,allowUnconstrainedLaneRerouting:!1,allowPairLaneSpreading:m[0].bus===m[1].bus&&e.allowPairLaneSpreading,candidatePlansAreFeasible:(C)=>l(C)&&Fye({plans:C,pair:h}).every((I)=>I.length<=y+Xi)&&(!e.candidatePlansAreFeasible||e.candidatePlansAreFeasible(C))},o,i);if(!x.plans)return{plans:null,failedBus:_};c=x.plans}if(s.every((h)=>a3(Fye({plans:c,pair:h}))<=h.lengthTolerance+Xi)){if(!l(c))return{plans:null,failedBus:a.find(({bus:h,indices:A})=>h.maxLengthSkew!==void 0&&a3(JL(c,A))>h.maxLengthSkew+Xi).bus};return{plans:c}}}return{plans:null,failedBus:s.find((u)=>a3(Fye({plans:c,pair:u}))>u.lengthTolerance+Xi).connectionIndices.map((u)=>r.get(u)?.bus).find((u)=>u)}}function nWe(e,t,n){let{preparedBuses:o,inputSrj:i,sharedBoundary:r,clearance:s,allowBlindAndBuriedVias:a=!0,allowSameNetMerges:c=!1,allowMatchingInsideDenseBounds:l=!1,candidatePlansAreFeasible:d}=e,u=(g)=>(dF(n),t(g)),h=[...e.plans],A=0,m=new Set(e.unroutedSourceBuses?.flatMap((g)=>g.connections.map((_)=>_.connectionIndex))),p=o.filter((g)=>g.maxLengthSkew!==void 0&&g.connections.length>1);if(p.length===0)return{plans:h};for(let g of p){let _=new Set(g.connections.map((C)=>C.connectionIndex));if(n)n.activeBus=g;if(g.termination.type!=="boundary")return{plans:null,failedBus:g};let f=g.connections.length*(e.allowDistributedMatching?24:2),y=new Set;for(let C=0;C<f;C++){let I=JL(h,_);if(I.length!==g.connections.length)return{plans:null,failedBus:g};let b=g.maxLengthSkew,P=a3(I);if(P<=b+Xi)break;let E=I.filter((z)=>!y.has(z.connectionIndex)).toSorted((z,Y)=>z.length-Y.length||z.connectionName.localeCompare(Y.connectionName))[0],B=Math.max(...I.map((z)=>z.length));if(!E||B-E.length<=b+Xi)return{plans:null,failedBus:g};let w=B-E.length,T=Math.max(Xi,w-b+Xi),Q=[T,T+b*0.1,w-b*0.5,w-b*0.75,w,w+b].filter((z,Y,U)=>z>Xi&&U.findIndex((X)=>Math.abs(X-z)<Xi)===Y).toSorted((z,Y)=>z-Y),N=null,F=(z)=>{let Y=h.map((X)=>X===E?z:X),U=JL(Y,_);if(a3(U)>P+Xi)return null;if(!u(Y))return null;if(d&&!d(Y))return null;return Y};if(e.allowMultiSegmentTuningWindows){let z=Math.max(E.length+T,...jUe(i).filter((Y)=>Y.connectionIndices.includes(E.connectionIndex)).flatMap((Y)=>Y.connectionIndices.filter((U)=>U!==E.connectionIndex).flatMap((U)=>{let X=h.find((V)=>V.connectionIndex===U);return X?[X.length-Y.lengthTolerance+Xi]:[]})));for(let Y of Ysi({plan:E,bus:g,inputSrj:i,plans:h,layerNames:fB(i.layerCount),clearance:s,consumeWork:()=>dF(n)})){let U={...E,additionalVias:[...E.additionalVias??[],...Y.addedVias]},X=(ie)=>kS(U,[...Y.before,...ie,...Y.after]),V=(ie,J)=>{let ee=g.sharedBoundary;for(let[le,he]of J.entries()){let ue=he.end.x-he.start.x,Ae=he.end.y-he.start.y;if(Math.min(Math.abs(ue),Math.abs(Ae),Math.abs(Math.abs(ue)-Math.abs(Ae)))>0.0000001)return!1;if([he.start,he.end].some((Pe)=>Pe.x<=ee.minX+0.0000001||Pe.x>=ee.maxX-0.0000001||Pe.y<=ee.minY+0.0000001||Pe.y>=ee.maxY-0.0000001))return!1;let _e=J[le+1];if(_e){let Pe=_e.end.x-_e.start.x,Ee=_e.end.y-_e.start.y;if((ue*Pe+Ae*Ee)/(Math.hypot(ue,Ae)*Math.hypot(Pe,Ee))<Math.SQRT1_2-0.0000001)return!1}if(i.obstacles.some((Pe)=>Pe.layers.includes(he.layer)&&Jc(he,Pe)<he.width/2+s-0.000000001))return!1}let se=new Set(J.map((le,he)=>Y.before.length+he));return bxe(ie,Y.addedVias,s)&&_X(ie,ie.segments,s,se)},W=X(Y.window);if(!W||!V(W,Y.window)||!u(h.map((ie)=>ie===E?W:ie)))continue;let j={...W,targetLayer:Y.tuningLayer,segments:Y.window},q=z-W.length,ne={plan:j,bus:g,targetAddedLength:q,clearance:s,sharedBoundary:g.sharedBoundary,allowInsideDenseBounds:l,workBudget:n},ce=Y.window[0].width+s,oe=[Lye(ne),...[1,2,4,8].map((ie)=>DT({...ne,plateauLength:ce*ie,chamferLimit:ce/4,placementFractions:[0.5,0,1,0.25,0.75,0.1,0.9]}))];for(let ie of oe){for(let J of ie){let ee=X(J.segments);if(!ee||!V(ee,J.segments))continue;if(N=F(ee),N)break}if(N)break}if(N)break}}let H=(z)=>{let X=0,V=(j)=>{if(j.length<=48)return[...j];return Array.from({length:48},(q,ne)=>j[Math.floor(ne*j.length/48)])},W=(j,q)=>{dF(n);let ne=j.length-E.length,ce=z-ne;if(ce<=Xi)return F(j);if(q<=0)return null;let oe=ce/q,ie=V([...DT({plan:j,bus:g,targetAddedLength:oe,clearance:s,sharedBoundary:g.sharedBoundary,allowInsideDenseBounds:l,allowSourcePrefixMatching:e.allowSourcePrefixMatching,allowTransitLayerMatching:e.allowTransitLayerMatching,workBudget:n})]);for(let J of ie){if(X++,X>320)return null;if(!F(J))continue;let ee=W(J,q-1);if(ee)return ee}return null};for(let j=2;j<=8;j++){let q=W(E,j);if(q)return q;if(X>320)break}return null};for(let z of Q){if(N)break;if(e.allowDistributedMatching){for(let U of Lye({plan:E,bus:g,targetAddedLength:z,clearance:s,allowInsideDenseBounds:l,allowSourcePrefixMatching:e.allowSourcePrefixMatching,allowTransitLayerMatching:e.allowTransitLayerMatching,workBudget:n}))if(N=F(U),N)break;if(N)break}let Y=DT({plan:E,bus:g,targetAddedLength:z,clearance:s,sharedBoundary:g.sharedBoundary,allowInsideDenseBounds:l,allowSourcePrefixMatching:e.allowSourcePrefixMatching,allowTransitLayerMatching:e.allowTransitLayerMatching,workBudget:n});for(let U of Y){if(N=F(U),!N)continue;break}if(!N&&Math.abs(z-T)<=Xi){if(e.allowDistributedMatching)for(let U of[z/2,z/4,Math.min(z,1),Math.min(z,0.5),Math.min(z,0.25),Math.min(z,0.1)]){if(U<=Xi)continue;let X={plan:E,bus:g,targetAddedLength:U,clearance:s,sharedBoundary:g.sharedBoundary,allowInsideDenseBounds:l,allowSourcePrefixMatching:e.allowSourcePrefixMatching,allowTransitLayerMatching:e.allowTransitLayerMatching,workBudget:n};for(let V of[Lye(X),DT(X)]){for(let W of V)if(N=F(W),N)break;if(N)break}if(N)break}if(!N)N=H(z)}if(N)break}if(!N&&e.allowAdditionalMatchingVias)for(let z of Nai({plan:E,bus:g,layerNames:fB(i.layerCount),clearance:s,workBudget:n})){if(!u(h.map((U)=>U===E?z.plan:U)))continue;let Y={plan:{...z.plan,targetLayer:z.tuningLayer},bus:g,targetAddedLength:T,clearance:s,sharedBoundary:g.sharedBoundary,allowInsideDenseBounds:l,workBudget:n};for(let U of[Lye(Y),DT(Y)]){for(let X of U){if(!bxe(X,z.addedVias,s))continue;if(N=F({...X,targetLayer:E.targetLayer}),N)break}if(N)break}if(N)break}if(!N&&e.allowPairLaneSpreading&&g.connections.length===2){let z=I.find((U)=>U!==E),Y=0;for(let U of kai(z,s,n)){let X=h.map((W)=>W===z?U:W);if(!u(X))continue;if(d&&!d(X))continue;let V=nWe({...e,plans:X,preparedBuses:[g],allowPairLaneSpreading:!1},t,n);if(V.plans){N=V.plans;break}if(++Y>=4)break}}if(!N&&e.allowUnconstrainedLaneRerouting){let z=0;e:for(let Y of Q){let U=DT({plan:E,bus:g,targetAddedLength:Y,clearance:s,sharedBoundary:g.sharedBoundary,allowInsideDenseBounds:l,allowSourcePrefixMatching:e.allowSourcePrefixMatching,allowTransitLayerMatching:e.allowTransitLayerMatching,workBudget:n});for(let X of U){if(!u([X]))continue;let V=h.filter((ne)=>ne!==E&&!t.mutuallyClear([X,ne]));if(V.length!==1)continue;let W=V[0],j=o.find((ne)=>ne.busId===W.busId);if(!j||j.termination.type!=="boundary"||j.maxLengthSkew!==void 0||j.connections.length!==1||!W.via||W.additionalVias?.length||W.planeEndpointVia||W.segments.filter((ne)=>ne.layer===W.sourceLayer).length!==1)continue;let q=h.map((ne)=>ne===E?X:ne);for(let ne of[!0,!1]){if(z++>=4)break e;let ce=prn({srj:i,bus:j,terminals:[{connection:j.connections[0],viaPoint:W.via.center,exitPoint:W.exitPoint}],targetLayer:W.targetLayer,acceptedPlans:q.filter((J)=>J!==W),layerNames:fB(i.layerCount),traceWidth:W.segments[0].width,viaDiameter:W.via.diameter,viaHoleDiameter:W.via.holeDiameter,clearance:s,allowBlindAndBuriedVias:a,allowSameNetMerges:c,gridStepDivisor:2,alignGridToPads:ne,maximumRouteOrderAttempts:1,preferTargetDirectedLaneBias:!0})?.[0];if(!ce)continue;let oe=kS(W,[W.segments[0],...ce.segments.slice(1)]);if(!oe)continue;let ie=q.map((J)=>J===W?oe:J);if(a3(JL(ie,_))>b+Xi||!u(ie)||d&&!d(ie))continue;N=ie;break e}}}}if(!N&&e.unroutedSourceBuses?.length)e:for(let z of Q)for(let Y of DT({plan:E,bus:g,targetAddedLength:z,clearance:s,sharedBoundary:g.sharedBoundary,allowInsideDenseBounds:l,allowSourcePrefixMatching:e.allowSourcePrefixMatching,allowTransitLayerMatching:e.allowTransitLayerMatching,workBudget:n})){if(A>=4)break e;if(!u([Y]))continue;let U=h.filter((V)=>V!==E&&!t.mutuallyClear([Y,V]));if(U.length!==1||!m.has(U[0].connectionIndex))continue;A++;let X=Tai({inputSrj:i,plans:h.map((V)=>V===E?Y:V),unroutedSourceBuses:e.unroutedSourceBuses,clearance:s});if(!X||a3(JL(X,_))>P+Xi||!u(X)||d&&!d(X))continue;N=X;break e}if(!N){if(e.allowDistributedMatching){y.add(E.connectionIndex);continue}return{plans:null,failedBus:g}}h=N}let x=JL(h,_);if(a3(x)>g.maxLengthSkew+Xi)return{plans:null,failedBus:g}}return{plans:h}}function Srn(e){let{points:t,topZ:n,traceWidth:o,viaDiameter:i,clearance:r}=e,s=[],a=[],c=0;for(let d=0;d+1<t.length;d++){let u=t[d],h=t[d+1];if(u.z!==h.z){if(kt(u,h)>0.0000001)return!1;a.push({center:u,fromZ:u.z,toZ:h.z,edge:d}),c++}else if(kt(u,h)>0.000000001)s.push({a:u,b:h,z:u.z,edge:d,run:c})}let l=s.filter((d)=>d.z===n);for(let d=0;d<l.length;d++)for(let u=d+1;u<l.length;u++){let h=l[d],A=l[u];if(h.run!==A.run&&ad(h.a,h.b,A.a,A.b)<o+r-0.000000001)return!1}for(let d=0;d<a.length;d++){let u=a[d];for(let m=d+1;m<a.length;m++)if(kt(u.center,a[m].center)<i+r-0.000000001)return!1;let h=(i+o)/2+r,A=new Set;for(let m of[-1,1]){let p=u.center,g=0,_=m===-1?u.fromZ:u.toZ;for(let f=u.edge+m;f>=0&&f+1<t.length;f+=m){let y=t[f],x=t[f+1],C=m===-1?x:y,I=m===-1?y:x;if(y.z!==_||x.z!==_||kt(p,C)>0.0000001||g>h+0.0000001)break;A.add(f),g+=kt(C,I),p=I}}for(let m of s)if(!A.has(m.edge)&&Bi(u.center,m.a,m.b)<h-0.000000001)return!1}return!0}var Vp=0.0000001,nGe=180;function Fai(e,t){let n=t.x-e.x,o=t.y-e.y,i=Math.min(Math.abs(n),Math.abs(o));if(Math.abs(n)<Vp||Math.abs(o)<Vp||Math.abs(Math.abs(n)-Math.abs(o))<Vp)return[[e,t]];return[[e,{x:e.x+Math.sign(n)*i,y:e.y+Math.sign(o)*i,z:e.z},t],[e,{x:t.x-Math.sign(n)*i,y:t.y-Math.sign(o)*i,z:e.z},t],[e,{x:e.x,y:t.y,z:e.z},t],[e,{x:t.x,y:e.y,z:e.z},t]]}function Hai(e,t,n){if(e.length<3)return e;let o=e.length,i=o<=nGe?e.map((l,d)=>d):[...new Set([0,...Array.from({length:nGe-2},(l,d)=>Math.round((d+1)*(o-1)/(nGe-1))),o-1])],r=new Float64Array(o).fill(1/0),s=Array(o);r[0]=0;for(let l=1;l<i.length;l++){let d=i[l];for(let u=0;u<l;u++){let h=i[u],A=e[h],m=e[d],p=Math.abs(m.x-A.x),g=Math.abs(m.y-A.y),_=Math.max(p,g)+(Math.SQRT2-1)*Math.min(p,g);if(r[h]+_>=r[d]-Vp)continue;for(let f of Fai(A,m)){let y=f.slice(1).reduce((x,C,I)=>x+kt(f[I],C),0);if(r[h]+y>=r[d]-Vp||!f.slice(1).every((x,C)=>n(f[C],x)))continue;r[d]=r[h]+y,s[d]={previous:h,points:f}}}if(!s[d]){let u=i[l-1],h=e.slice(u,d+1);r[d]=r[u]+h.slice(1).reduce((A,m,p)=>A+kt(h[p],m),0),s[d]={previous:u,points:h}}}let a=[];for(let l=o-1;l>0;){let d=s[l];if(!d)throw Error("FanoutSolver: shortcut graph lost a retained path");a.unshift(d.points),l=d.previous}let c=a.flatMap((l,d)=>d?l.slice(1):l);return gF({points:c,chamfer:t/4,segmentIsClear:n})??e}function LJt(e,t,n){if(e.x<t.minX-Vp||e.x>t.maxX+Vp||e.y<t.minY-Vp||e.y>t.maxY+Vp)return!1;return!(Math.abs(e.x-t.minX)<Vp||Math.abs(e.x-t.maxX)<Vp||Math.abs(e.y-t.minY)<Vp||Math.abs(e.y-t.maxY)<Vp)||kt(e,n)<Vp}function FW(e){let{inputSrj:t,preparedBuses:n,layerNames:o,clearance:i,allowBlindAndBuriedVias:r=!0,allowSameNetMerges:s=!1}=e,a=new Map(n.map((h)=>[h.busId,h])),c=new Map(n.map((h)=>[h.busId,Math.min(...e.plans.filter((A)=>A.busId===h.busId).map((A)=>A.length))])),l=k3(t,r),d=[...e.plans];for(let h=0;h<3;h++){let A=!1;for(let m of d.toSorted((p,g)=>g.length-p.length)){let p=a.get(m.busId),g=c.get(m.busId);if(!p||g===void 0||!Number.isFinite(g)||p.maxLengthSkew===void 0||m.termination.type!=="boundary"||m.length<=g+p.maxLengthSkew+Vp)continue;if(e.selectedBusIds&&!e.selectedBusIds.has(m.busId))continue;if(e.selectedConnectionIndices&&!e.selectedConnectionIndices.has(m.connectionIndex))continue;let _=m.trace.route.findIndex((N)=>N.route_type==="via");if(_<0)continue;let f=(N)=>N===m.connectionName||s&&Uy(t,N,m.connectionName),y=d.filter((N)=>N.connectionIndex!==m.connectionIndex&&!f(N.connectionName)),x=l.filter((N)=>!f(N.connectionName)),C=new Oie([...y.flatMap((N)=>[...N.segments,...N.planeEndpointSegments??[]]),...x.flatMap((N)=>N.segments)]),I=[...y.flatMap((N)=>[N.via,...N.additionalVias??[],N.planeEndpointVia].filter((F)=>!!F)),...x.flatMap((N)=>N.vias)],b=t.obstacles.filter((N)=>!(s&&ib(t,N,m.connectionName))),P=_+1;if(e.allowSourcePrefixShortcuts){P=1;while(P<_){let N=m.trace.route[P];if(N.route_type==="wire"&&jy(N,m.sourceObstacle)>=N.width/2+i-0.000000001)break;P++}}let E=m.trace.route.slice(0,P),B=P;while(B<m.trace.route.length){let N=m.trace.route[B];if(N.route_type!=="wire"){E.push(N),B++;continue}let F=B+1;while(F<m.trace.route.length){let q=m.trace.route[F];if(q.route_type!=="wire"||q.layer!==N.layer)break;F++}let H=m.trace.route.slice(B,F),z=o.indexOf(N.layer);if(z<0)throw Error(`FanoutSolver: shortcut uses unknown layer ${N.layer}`);let Y=H.map((q)=>({x:q.x,y:q.y,z})),U=Math.max(...H.map((q)=>q.width)),X=E.at(-1),V=(q,ne)=>{let ce={start:q,end:ne,layer:N.layer,width:U};return LJt(q,p.sharedBoundary,m.exitPoint)&&LJt(ne,p.sharedBoundary,m.exitPoint)&&b.every((oe)=>!oe.layers.includes(N.layer)||B<_&&oe===m.sourceObstacle&&X?.route_type==="wire"&&Bi(q,X,Y[0])<Vp&&Bi(ne,X,Y[0])<Vp||Jc(ce,oe)>=U/2+i-0.000000001)&&C.querySegment(ce,i).every((oe)=>Jm(ce,oe,i))&&I.every((oe)=>!oe.spanLayers.includes(N.layer)||Bi(oe.center,q,ne)>=(U+oe.diameter)/2+i-0.000000001)},W=Hai(Y,U,V),j;if(B<_&&X?.route_type==="wire"&&X.layer===N.layer){let q=gF({points:[{x:X.x,y:X.y,z},...W],chamfer:U/4,segmentIsClear:V});if(q)E.pop(),j=X,W=q;else W=Y}E.push(...W.map((q,ne)=>({...ne===0?j:void 0,route_type:"wire",x:q.x,y:q.y,layer:N.layer,width:U}))),B=F}let w={...m.trace,route:E},T=CCe(t,w,r).segments,Q={...m,trace:w,segments:T,...e.allowSourcePrefixShortcuts?{sourceEscapeSegmentCount:T.findIndex((N)=>N.layer!==m.sourceLayer)}:{},length:T.reduce((N,F)=>N+kt(F.start,F.end),0)};if(Q.length<g-Vp||Q.length>=m.length-Vp)continue;if(e.allowSourcePrefixShortcuts&&!Srn({points:w.route.flatMap((N)=>N.route_type==="wire"?[{x:N.x,y:N.y,z:o.indexOf(N.layer)}]:[]),topZ:o.indexOf(m.sourceLayer),traceWidth:e.traceWidth,viaDiameter:m.via.diameter,clearance:i}))continue;if(!Kh({plans:[Q],srj:{...t,traces:[...t.traces??[],...y.flatMap((N)=>[N.trace,...N.planeEndpointTrace?[N.planeEndpointTrace]:[]])]},sharedBoundary:p.sharedBoundary,clearance:i,allowBlindAndBuriedVias:r,allowSameNetMerges:s}))continue;d=d.map((N)=>N===m?Q:N),A=!0}if(!A)break}return qd({inputSrj:t,routedSrj:{...t,traces:[...t.traces??[],...d.flatMap((h)=>[h.trace,...h.planeEndpointTrace?[h.planeEndpointTrace]:[]])]},clearance:i,allowBlindAndBuriedVias:r}).valid?d:null}function Oai(e,t,n,o,i,r,s){if(s&&n==="top"&&Jc({start:e,end:e,width:o,layer:n},r)<o/2+i-0.000000001&&kt(t,s.sourcePoint)>=kt(e,s.sourcePoint)-0.000000001)return s.connectionName;return}function zai(e){let t=new Int32Array(e.planeSize+1),n=[],o=[];for(let i=0;i<e.planeSize;i++){t[i]=n.length;let r=new Set;for(let l=e.neighborOffset[i];l<e.neighborOffset[i+1];l++){let d=e.neighborIds[l];r.add(d),n.push(d),o.push(e.neighborCosts[l])}let s=new Set,a=e.cellMaxX[i]-e.cellMinX[i],c=e.cellMaxY[i]-e.cellMinY[i];for(let l=e.neighborOffset[i];l<e.neighborOffset[i+1];l++){let d=e.neighborIds[l];for(let u=e.neighborOffset[d];u<e.neighborOffset[d+1];u++){let h=e.neighborIds[u];if(h===i||r.has(h))continue;let A=Math.abs(e.cellCenterX[h]-e.cellCenterX[i]),m=Math.abs(e.cellCenterY[h]-e.cellCenterY[i]);if(A<0.000000001||Math.abs(A-m)>0.000000001||Math.abs(A-a)>0.000000001||Math.abs(m-c)>0.000000001||Math.abs(e.cellMaxX[h]-e.cellMinX[h]-a)>0.000000001||Math.abs(e.cellMaxY[h]-e.cellMinY[h]-c)>0.000000001)continue;s.add(h)}}for(let l of[...s].sort((d,u)=>d-u))n.push(l),o.push(Math.hypot(e.cellCenterX[l]-e.cellCenterX[i],e.cellCenterY[l]-e.cellCenterY[i]))}return t[e.planeSize]=n.length,{neighborOffset:t,neighborIds:Int32Array.from(n),neighborCosts:Float32Array.from(o)}}function Gai(e){let{edge:t,bounds:n,exit:o,approachLength:i}=e;if(!["left","right","top","bottom"].includes(t))throw Error("Terminal approach requires a valid boundary edge");if(!Number.isFinite(i)||i<=0)throw Error("terminalApproachLength must be finite and positive");let r=t==="left"||t==="right",s=t==="left"?n.minX:t==="right"?n.maxX:t==="bottom"?n.minY:n.maxY,a=t==="left"||t==="bottom"?-1:1,c=r?{x:o.x-a*i,y:o.y}:{x:o.x,y:o.y-a*i};if(![o.x,o.y,c.x,c.y,n.minX,n.maxX,n.minY,n.maxY].every(Number.isFinite)||Math.abs((r?o.x:o.y)-s)>0.0000001||c.x<=n.minX||c.x>=n.maxX||c.y<=n.minY||c.y>=n.maxY)throw Error("Terminal approach must end on its shared edge and start inside it");return{connectionName:e.connectionName,edge:t,layer:e.layer,exit:{...o},goal:c}}function vCe(e,t){let{goal:n,edge:o}=t,i=o==="left"||o==="right",r=o==="left"||o==="bottom"?-1:1,s=i?n.x-e.x:n.y-e.y,a=i?n.y-e.y:n.x-e.x,c=r*s;if(c<Math.abs(a)-0.000000001){if(c<=0.000000001)return null;let d=i?{x:e.x,y:n.y-Math.sign(a)*c}:{x:n.x-Math.sign(a)*c,y:e.y};return[e,d,n]}let l=i?{x:e.x+r*Math.abs(a),y:n.y}:{x:n.x,y:e.y+r*Math.abs(a)};return[e,l,n].filter((d,u,h)=>u===0||kt(d,h[u-1])>0.0000000001)}var Yai=(e,t,n=t)=>e.some((o)=>Math.max(t.x,n.x)>=o.minX&&Math.min(t.x,n.x)<=o.maxX&&Math.max(t.y,n.y)>=o.minY&&Math.min(t.y,n.y)<=o.maxY);function Prn(e,t,n){let o=[],i=0;for(let[c,l]of e.entries()){if(l.layer===n&&Bi(t,l.start,l.end)<0.00000001){let d=i+kt(l.start,t);if(!o.some((u)=>Math.abs(u.offset-d)<0.00000001))o.push({index:c,offset:d})}i+=kt(l.start,l.end)}if(o.length!==1)return null;let r=o[0].index,s=e[r],a=[...e];if(kt(t,s.end)<0.00000001)r++;else if(kt(t,s.start)>0.00000001)a.splice(r,1,{...s,end:t},{...s,start:t}),r++;if(r>=a.length)return null;return{segments:a,changed:new Set(a.slice(r).map((c,l)=>r+l))}}function KYe(e){let{plan:t,splice:n,clearance:o,maximumJoinLength:i}=e,{rawSegments:r,firstEntrySegmentIndex:s}=n;if(!Number.isInteger(s)||s<0||s>=r.length||!Number.isFinite(i)||i<0)return!1;let a=(h,A,m=h)=>{let p={...t,segments:[...h]},g=[t.via,...t.additionalVias??[],t.planeEndpointVia].filter((_)=>!!_).filter((_)=>[...A].some((f)=>{let y=h[f];return _.spanLayers.includes(y.layer)&&Bi(_.center,y.start,y.end)<(_.diameter+y.width)/2+o+0.0000001}));return bxe({...p,segments:[...m]},g,o)&&_X(p,h,o,A)};if(!a(r,new Set(r.slice(s).map((h,A)=>s+A))))return!1;let c=r[s],l=r[s-1],d=c.start;if(l?.layer===c.layer&&kt(l.end,d)<0.00000001){let h=l.start;for(let p=s-2;p>=0;p--){let g=r[p];if(g.layer!==l.layer||kt(g.end,h)>0.00000001)break;let _=h.x-g.start.x,f=h.y-g.start.y,y=d.x-h.x,x=d.y-h.y;if(Math.abs(_*x-f*y)>=0.0000000001||_*y+f*x<0)break;h=g.start}let A=kt(h,d);if(A<0.0000000001)return!1;let m=Math.min(i,A/3);d={x:d.x+(h.x-d.x)*m/A,y:d.y+(h.y-d.y)*m/A}}let u=Prn(t.segments,d,c.layer);return!!u&&a(u.segments,u.changed,t.segments)}function*Vai(e){let{splice:t,connector:n,clearance:o}=e,i=t.firstEntrySegmentIndex,r=t.rawSegments[i];if(!r||r.layer!==n.layer)return;let s=4*(r.width+o),a=0;for(let c=i;c>=Math.max(0,i-16);c--){let l=t.rawSegments[c];if(l.layer!==n.layer||c<i&&kt(l.end,t.rawSegments[c+1].start)>0.0000001)break;if(c<i)a+=kt(l.start,l.end);if(a>s+0.0000001)break;let d=l.start,{goal:u,exit:h,edge:A}=n,m=A==="left"||A==="right",p=A==="left"||A==="bottom"?-1:1,g=p*(m?u.x-d.x:u.y-d.y),_=Math.abs(m?u.y-d.y:u.x-d.x),f=[];if(c<i){let y=vCe(d,n);if(y)f.push(y)}if(g>=_-0.000000001){let y=m?{x:u.x-p*_,y:d.y}:{x:d.x,y:u.y-p*_};f.push([d,y,u])}for(let y of f){let x=[...y,h].filter((C,I,b)=>I===0||kt(C,b[I-1])>0.0000000001);yield{replacement:x.slice(1).map((C,I)=>({...l,start:x[I],end:C})),firstEntrySegmentIndex:c}}}}function Uai(e){let t=[...e.plans],n=new Map(e.splices);for(let[o,i]of t.entries()){let r=e.connectors.get(i.connectionName);if(!r)continue;let s=n.get(i.connectionName);if(!s)return null;if(KYe({plan:i,splice:s,maximumJoinLength:0,clearance:e.clearance}))continue;let a=t.filter((l)=>l.connectionIndex!==i.connectionIndex),c=!1;for(let{replacement:l,firstEntrySegmentIndex:d}of Vai({splice:s,connector:r,clearance:e.clearance})){let u=l[0],h=Prn(i.segments,u.start,u.layer);if(!h)continue;let A=Math.min(...h.changed),m=[...h.segments.slice(0,A),...l],p=kS(i,m);if(!p)continue;let g={rawSegments:[...s.rawSegments.slice(0,d),...l],firstEntrySegmentIndex:d};if(!KYe({plan:p,splice:g,maximumJoinLength:0,clearance:e.clearance}))continue;if(l.some((_)=>!e.segmentIsClear(_,i.connectionName)||a.some((f)=>[...f.segments,...f.planeEndpointSegments??[]].some((y)=>!Jm(_,y,e.clearance))||[f.via,...f.additionalVias??[],f.planeEndpointVia].filter((y)=>!!y).some((y)=>y.spanLayers.includes(_.layer)&&Bi(y.center,_.start,_.end)<(y.diameter+_.width)/2+e.clearance-0.000000001))))continue;t[o]=p,n.set(i.connectionName,g),c=!0;break}if(!c)return null}return{plans:t,splices:n}}function Wai(e){let{grid:t}=e;if(!Number.isFinite(e.margin)||e.margin<0)throw Error("Terminal connector margin must be finite and non-negative");let n=(l)=>({x:t.cellCenterX[l],y:t.cellCenterY[l]}),o=new Map,i=new Set,r=new Map;for(let{connector:l,cellId:d}of e.terminals){if(!Number.isInteger(d)||d<0||d>=t.planeSize)throw Error("Invalid native terminal cell");let u=new Set([d]);for(let p=t.neighborOffset[d];p<t.neighborOffset[d+1];p++){let g=t.neighborIds[p];u.add(g);for(let _=t.neighborOffset[g];_<t.neighborOffset[g+1];_++)u.add(t.neighborIds[_])}let h=[l.exit,l.goal,...[...u].map(n)],A={minX:Math.min(...h.map((p)=>p.x))-e.margin,maxX:Math.max(...h.map((p)=>p.x))+e.margin,minY:Math.min(...h.map((p)=>p.y))-e.margin,maxY:Math.max(...h.map((p)=>p.y))+e.margin},m=r.get(l.edge);r.set(l.edge,m?{minX:Math.min(m.minX,A.minX),maxX:Math.max(m.maxX,A.maxX),minY:Math.min(m.minY,A.minY),maxY:Math.max(m.maxY,A.maxY)}:A);for(let p of u){if(p===d)continue;let g=!1;for(let y=t.neighborOffset[p];y<t.neighborOffset[p+1];y++)if(t.neighborIds[y]===d)g=!0;if(g)continue;let _=vCe(n(p),l);if(!_||_.slice(1).some((y,x)=>!e.segmentIsClear(_[x],y,l)))continue;let f=o.get(p)??new Set;f.add(d),o.set(p,f),i.add(`${p}:${d}`)}}let s=new Int32Array(t.planeSize+1),a=[],c=[];for(let l=0;l<t.planeSize;l++){s[l]=a.length;for(let d=t.neighborOffset[l];d<t.neighborOffset[l+1];d++)a.push(t.neighborIds[d]),c.push(t.neighborCosts[d]);for(let d of o.get(l)??[])a.push(d),c.push(kt(n(l),n(d)))}return s[t.planeSize]=a.length,{neighborOffset:s,neighborIds:Int32Array.from(a),neighborCosts:Float32Array.from(c),extendedEdges:i,regions:[...r.values()]}}function Xai(e,t,n){let o=e.route.at(-2),i=e.route.at(-1);if(!o||!i||kt(i,t.goal)>0.0000001)throw Error("Native terminal route does not end at its reserved goal");let r=e.route.slice(0,-2),s=o;if(o.z!==i.z){if(kt(o,n)>0.0000001)throw Error("Native terminal via has a noncoincident departure");r=[...r,o],s={...n,z:i.z}}let a=vCe(s,t);if(!a)throw Error("Native terminal route has no perpendicular entry");return{...e,route:[...r,...a.map((c)=>({...c,z:i.z})),{...t.exit,z:i.z}]}}var Kai=class{constructor(e){this.params=e,this.padding=Math.max(e.traceWidth,e.viaDiameter)+e.clearance,this.cellSize=Math.max(e.traceWidth+e.clearance,e.viaDiameter)}params;dirty=!0;buckets=new Map;cellSize;padding;invalidate(){this.dirty=!0}intersects(e,t=e){return Yai(this.params.regions,e,t)}cells(e,t,n,o){for(let i=Math.floor((Math.min(e.x,t.x)-n)/this.cellSize);i<=Math.floor((Math.max(e.x,t.x)+n)/this.cellSize);i++)for(let r=Math.floor((Math.min(e.y,t.y)-n)/this.cellSize);r<=Math.floor((Math.max(e.y,t.y)+n)/this.cellSize);r++)o(`${i},${r}`)}refresh(){if(!this.dirty)return;this.buckets.clear();let e=(t,n,o=n)=>{if(!this.intersects(n,o))return;this.cells(n,o,this.padding,(i)=>{let r=this.buckets.get(i)??new Set;r.add(t),this.buckets.set(i,r)})};for(let t of this.params.getRoutes()){for(let n=1;n<t.route.length;n++){let o=t.route[n-1],i=t.route[n];if(o.z===i.z)e({kind:"segment",owner:t.connectionName,a:o,b:i},o,i)}for(let n of t.vias)e({kind:"via",owner:t.connectionName,center:n},n)}this.dirty=!1}nearby(e,t=e){this.refresh();let n=new Set;return this.cells(e,t,0,(o)=>{for(let i of this.buckets.get(o)??[])n.add(i)}),n}blockingSegmentOwners(e,t,n){let o=new Set;for(let i=1;i<t.length;i++){let r=t[i-1],s=t[i];if(!this.intersects(r,s))continue;for(let a of this.nearby(r,s)){if(a.owner===e)continue;let c=a.kind==="via"?Bi(a.center,r,s):a.a.z===n?ad(r,s,a.a,a.b):1/0,l=(this.params.traceWidth+(a.kind==="via"?this.params.viaDiameter:this.params.traceWidth))/2+this.params.clearance;if(c<l-0.000000001)o.add(a.owner)}}return o}blockingViaOwners(e,t){let n=new Set;if(!this.intersects(t))return n;for(let o of this.nearby(t)){if(o.owner===e)continue;let i=o.kind==="via"?kt(t,o.center):Bi(t,o.a,o.b),r=(this.params.viaDiameter+(o.kind==="via"?this.params.viaDiameter:this.params.traceWidth))/2+this.params.clearance;if(i<r-0.000000001)n.add(o.owner)}return n}};function jai(e){if(typeof e.fillViaOccupants!=="function"||typeof e.pushFlatOccupants!=="function")throw Error("FanoutSolver: native via-occupant interface changed");let t=e.fillViaOccupants.bind(e),n=e.pushFlatOccupants.bind(e),o=new Map;e.fillViaOccupants=(i,r)=>{let s=o.get(i);if(s){let l=e._viaOccs;l.length=0;let{usedCellsFlat:d,sharedCellsFlat:u}=e;for(let h=0;h<s.length;h++){let A=s[h];if(d&&u&&d[A]===-1&&!u[A])continue;n(A,r,l)}return}let a=[],c=e.pushFlatOccupants;e.pushFlatOccupants=(l,d,u)=>{a.push(l),n(l,d,u)};try{t(i,r)}finally{e.pushFlatOccupants=c}o.set(i,Int32Array.from(a))}}var qai=0.000000001;function jYe(e){let{vias:t,activeConnectionIndices:n,traceWidth:o,clearance:i,gridStep:r}=e;for(let[h,A]of[["traceWidth",o],["gridStep",r]])if(!Number.isFinite(A)||A<=0)throw Error(`FanoutSolver: ${h} must be positive and finite`);if(!Number.isFinite(i)||i<0)throw Error("FanoutSolver: clearance must be non-negative and finite");for(let h of t)if(!Number.isSafeInteger(h.connectionIndex)||h.connectionIndex<0||!Number.isFinite(h.center.x)||!Number.isFinite(h.center.y)||!Number.isFinite(h.diameter)||h.diameter<=0)throw Error("FanoutSolver: invalid via channel grid site");let s=(h)=>(h%r+r)%r,a=(h)=>{let A=s(h+r/2)-r/2;return Math.abs(A)<Number.EPSILON?0:A},c=(o+i)/r,l=Math.ceil(c-Number.EPSILON*Math.max(1,Math.abs(c))*4),d=Number.EPSILON*Math.max(1,r)*32,u=(h)=>{let A=h==="x"?"y":"x",m=t.toSorted((C,I)=>C.center[A]-I.center[A]||C.center[h]-I.center[h]||C.connectionIndex-I.connectionIndex),p=[];for(let C of m){let I=p.at(-1);if(I&&Math.abs(I[0].center[A]-C.center[A])<=qai)I.push(C);else p.push([C])}let g=[];for(let C of p){C.sort((I,b)=>I.center[h]-b.center[h]);for(let I=1;I<C.length;I++){let b=C[I-1],P=C[I],E=b.center[h]+b.diameter/2+o/2+i,B=P.center[h]-P.diameter/2-o/2-i-l*r;if(!Number.isFinite(E)||!Number.isFinite(B))throw Error("FanoutSolver: non-finite via channel bounds");if(B<E-d)continue;g.push({start:s(E),length:Math.max(0,B-E),active:n.has(b.connectionIndex)||n.has(P.connectionIndex)})}}let _=g.filter((C)=>C.length<r-d).flatMap((C)=>[C.start,s(C.start+C.length)]).sort((C,I)=>C-I).filter((C,I,b)=>I===0||C-b[I-1]>d);if(_.length===0)return 0;let f=(C)=>{let I=0,b=0;for(let P of g)if(P.length>=r-d||s(C-P.start)<=P.length+d){if(b++,P.active)I++}return[I,b]},y={active:-1,total:-1,width:0,phase:0},x=(C,I)=>{C=a(C);let[b,P]=f(C);if(b>y.active||b===y.active&&(P>y.total||P===y.total&&(I>y.width+d||Math.abs(I-y.width)<=d&&(Math.abs(C)<Math.abs(y.phase)-d||Math.abs(Math.abs(C)-Math.abs(y.phase))<=d&&C<y.phase))))y={active:b,total:P,width:I,phase:C}};for(let C=0;C<_.length;C++){let I=_[C],b=_[C+1]??_[0]+r;if(b-I>d)x((I+b)/2,b-I)}if(y.total===0)for(let C of _)x(C,0);return y.phase};return{x:u("x"),y:u("y")}}var Jai=class{constructor(e,t,n,o){this.planeSize=e,this.neighborOffset=n,this.neighborIds=o,this.layerStride=o.length+e,this.classes=new Uint32Array(this.layerStride*t)}planeSize;neighborOffset;neighborIds;classes;layerStride;values=[void 0,!0,!1];ownerIds=new Map;overflow=new Map;getSlot(e,t){let n=e<this.planeSize?e:e%this.planeSize,o=e<this.planeSize?0:(e-n)/this.planeSize*this.layerStride;if(t===n)return o+this.neighborIds.length+n;let i=this.neighborOffset[n+1];for(let r=this.neighborOffset[n];r<i;r++)if(this.neighborIds[r]===t)return o+r;return-1}get(e,t,n=!1){if(n)return;let o=this.getSlot(e,t);return o<0?this.overflow.get(e*this.planeSize+t):this.values[this.classes[o]]}set(e,t,n,o=!1){if(o)return;let i=this.getSlot(e,t);if(i<0){this.overflow.set(e*this.planeSize+t,n);return}let r=n===!0?1:n===!1?2:this.ownerIds.get(n);if(r===void 0)r=this.values.length,this.values.push(n),this.ownerIds.set(n,r);this.classes[i]=r}};function $ai(e,t,n,o){let i=e.planeSize*e.layers;e.visitedStamp=new Uint32Array(i*3),e.bestGStamp=new Uint32Array(i*3),e.bestGValue=new Float64Array(i*3);let r=new Uint8Array(1024),s=new Int32Array(1024),a=0,c=-1,l=-1,d=-1,u=0,h=()=>t[e.activeConnId]===!0,A=(_,f,y,x,C)=>_===0&&f===n&&x!==n?1:_===1&&f!==n&&f===x&&y!==C?2:_,m=e.nodePool.push.bind(e.nodePool);e.nodePool.push=(_,f,y,x,C,I)=>{let b=m(_,f,y,x,C,I);if(b>=r.length){let P=Math.max(b+1,r.length*2),E=new Uint8Array(P),B=new Int32Array(P);E.set(r),B.set(s),r=E,s=B}if(x<0||!h()){r[b]=0,s[b]=-1,u=0;let P=e.activeConnSeg;if(h()&&P&&P.startCellId===P.endCellId&&P.startZ===P.endZ)e.failed=!0}else{let P=r[x],E=e.nodePool.z[x];r[b]=A(P,E,e.nodePool.cellId[x],_,f),s[b]=P===0&&E===n&&_!==n?f:s[x]}return b};let p=e.heap.pop.bind(e.heap);e.heap.pop=()=>{let _=p();return a=r[_],u=a,c=s[_],l=e.nodePool.cellId[_],d=e.nodePool.z[_],_};let g=e.getSearchStateIdx.bind(e);return e.getSearchStateIdx=(_,f)=>g(_,f)+(h()?u*i:0),{beforeFirstVia:()=>!h()||a===0,prepareMove(_,f,y){if(u=h()?A(a,d,l,_,f):0,!h())return!0;if(y&&_===n){if(u!==2||c<0)return!1;if(Math.hypot(e.cellCenterX[f]-e.cellCenterX[c],e.cellCenterY[f]-e.cellCenterY[c])<o-0.000000001)return!1}let x=e.activeConnSeg;return _!==x.endZ||f!==x.endCellId||u===2}}}function y1(e,t){return e.targetLayerByBusId?.get(t)??e.targetLayer}var Zai=class extends Zn{constructor(e){super();this.options=e,this.activeSubSolver=e.router,this.MAX_ITERATIONS=Math.ceil(e.router.MAX_ITERATIONS/5000)+1}options;partialCandidates=[];partialSignatures=new Set;_step(){let{router:e}=this.options;for(let t=0;t<5000&&!e.solved&&!e.failed;t++)e.step();if(this.collectPartialCandidate(),this.stats={iterations:e.iterations,routedConnectionCount:e.getSolvedRouteCount(),connectionCount:this.options.connectionCount},e.solved||e.failed)this.activeSubSolver=null,this.solved=!0}collectPartialCandidate(){let{router:e,connectionCount:t,sourceOrigin:n,maximumPartialCandidates:o}=this.options;if(o===0||t<(n?2:3)||e.getSolvedRouteCount()!==t-1)return;let i=e.getOutput(),r=i.map((s)=>{let a=s.route[Math.floor(s.route.length/2)];return`${s.connectionName}:${s.route.length}:${a.x},${a.y}`}).sort().join(";");if(this.partialSignatures.has(r)||n&&this.partialCandidates.length>=o)return;if(this.partialSignatures.add(r),this.partialCandidates.push(i),this.partialCandidates.length>o)this.partialCandidates.shift()}computeProgress(){return this.options.router.iterations/this.options.router.MAX_ITERATIONS}getConstructorParams(){return[this.options]}visualize(){return this.activeSubSolver?.visualize()??this.options.router.visualize()}},eci=class e{constructor(t,n){this.cellSize=t,this.margin=n}cellSize;margin;buckets=new Map;add(t){let n,o,i,r;if(t.kind==="segment"){let s=t.segment,a=this.margin+s.width/2;n=Math.min(s.start.x,s.end.x)-a,o=Math.max(s.start.x,s.end.x)+a,i=Math.min(s.start.y,s.end.y)-a,r=Math.max(s.start.y,s.end.y)+a}else if(t.kind==="via"){let s=this.margin+t.diameter/2;n=t.center.x-s,o=t.center.x+s,i=t.center.y-s,r=t.center.y+s}else{let s=t.obstacle,a=Math.hypot(s.width,s.height)/2+this.margin;n=s.center.x-a,o=s.center.x+a,i=s.center.y-a,r=s.center.y+a}for(let s=this.cell(n);s<=this.cell(o);s++)for(let a=this.cell(i);a<=this.cell(r);a++){let c=`${s},${a}`,l=this.buckets.get(c)??new Set;l.add(t),this.buckets.set(c,l)}}nearby(t,n=t){let o=new Set;for(let i=this.cell(Math.min(t.x,n.x));i<=this.cell(Math.max(t.x,n.x));i++)for(let r=this.cell(Math.min(t.y,n.y));r<=this.cell(Math.max(t.y,n.y));r++)for(let s of this.buckets.get(`${i},${r}`)??[])o.add(s);return[...o]}clone(){let t=new e(this.cellSize,this.margin);for(let[n,o]of this.buckets)t.buckets.set(n,new Set(o));return t}cell(t){return Math.floor(t/this.cellSize)}};function K2e(e){let t=[];for(let n of e){let o=t.at(-2),i=t.at(-1);if(o&&i&&o.z===i.z&&i.z===n.z){let r=i.x-o.x,s=i.y-o.y,a=n.x-i.x,c=n.y-i.y;if(Math.abs(r*c-s*a)<0.0000000001&&r*a+s*c>=0)t.pop()}t.push(n)}return t}function Hye(e,t,n){let o=new Map(e.buses.flatMap((s)=>s.connections.map((a)=>[a.connection.name,{bus:s,connection:a}]))),i=new Map(e.terminals.map((s)=>[s.connection.connection.name,s])),r=[];for(let s of t){let a=o.get(s.connectionName),c=i.get(s.connectionName);if(!a||!c)return null;let{bus:l,connection:d}=a,u=K2e(s.route),h=n.get(d.connectionIndex);if(!u.length||kt(u[0],c.viaPoint)>0.0000001||kt(u.at(-1),c.exitPoint)>0.0000001||e.startLayerByBusId!==void 0&&e.layerNames[u[0].z]!==e.startLayerByBusId.get(l.busId)||e.layerNames[u.at(-1).z]!==y1(e,l.busId)||u.some((f)=>!(l.allowedLayers??e.layerNames).includes(e.layerNames[f.z])))return null;let A=cb({...e,bus:l,terminal:c,targetLayer:e.layerNames[u[0].z],targetLayerPoints:[c.viaPoint,c.exitPoint],sourceEscapePoints:h,allowBlindAndBuriedVias:!1}),m=A.trace.route.findIndex((f)=>f.route_type==="via");if(m<0)return null;let p=A.trace.route.slice(0,m+2),g=h.slice(1).map((f,y)=>({start:h[y],end:f,width:e.traceWidth,layer:d.sourceLayer})),_=[];for(let f=1;f<u.length;f++){let y=u[f],x=u[f-1],C=e.layerNames[x.z],I=e.layerNames[y.z];if(C!==I){if(kt(x,y)>0.0000001)return null;_.push({center:{x:y.x,y:y.y},diameter:e.viaDiameter,holeDiameter:e.viaHoleDiameter,fromLayer:C,toLayer:I,spanLayers:[...e.layerNames]}),p.push({route_type:"via",x:y.x,y:y.y,from_layer:C,to_layer:I,via_diameter:e.viaDiameter,via_hole_diameter:e.viaHoleDiameter})}else if(kt(x,y)>0.000000001)g.push({start:{x:x.x,y:x.y},end:{x:y.x,y:y.y},width:e.traceWidth,layer:I});p.push({route_type:"wire",x:y.x,y:y.y,layer:I,width:e.traceWidth})}r.push({...A,targetLayer:y1(e,l.busId),trace:{...A.trace,route:p},segments:g,additionalVias:_,length:g.reduce((f,y)=>f+kt(y.start,y.end),0)})}return r}function zx(e){return oWe(e,new WeakMap)}function*oWe(e,t){let{buses:n,allBuses:o,targetLayer:i,layerNames:r,traceWidth:s,clearance:a,viaDiameter:c,srj:l}=e,d=e.maximumIterations??30000000,u=e.heuristicWeight??1.5;if(!Number.isFinite(u)||u<=0)throw Error("heuristicWeight must be finite and positive");if(!Number.isSafeInteger(d)||d<1)throw Error("maximumIterations must be a positive safe integer");let h=e.maximumLocalRepairAttempts??3,A=e.maximumSourceOriginRepairAttempts??0;if(!Number.isSafeInteger(h)||h<0)throw Error("maximumLocalRepairAttempts must be a non-negative safe integer");if(!Number.isSafeInteger(A)||A<0)throw Error("maximumSourceOriginRepairAttempts must be a non-negative safe integer");let m=e.ripCost??8;if(!Number.isFinite(m)||m<=0)throw Error("ripCost must be finite and positive");if(e.maximumRipEvents!==void 0&&(!Number.isSafeInteger(e.maximumRipEvents)||e.maximumRipEvents<1))throw Error("maximumRipEvents must be a positive safe integer");let p=e.traceMarginExtra??s/2;if(!Number.isFinite(p)||p<0)throw Error("traceMarginExtra must be finite and non-negative");let g=e.routeFromSourcePads??!1;if(e.terminalApproachLength!==void 0&&(!Number.isFinite(e.terminalApproachLength)||e.terminalApproachLength<=0))throw Error("terminalApproachLength must be finite and positive");let _=g||e.startLayerByBusId!==void 0||e.terminalApproachLength!==void 0,f=e.sourceLayerTravelCost??1;if(!Number.isFinite(f)||f<1)throw Error("sourceLayerTravelCost must be finite and at least one");let y=[...new Set(n.map((Ye)=>y1(e,Ye.busId)))],x=e.startLayerByBusId?n.map((Ye)=>e.startLayerByBusId.get(Ye.busId)):[],C=g?[...new Set([i,"top",...e.transitLayers??[],...y,...x])]:[...new Set([i,...e.transitLayers??[],...y,...x])],I=r.indexOf(i),b=g&&e.allowSourceOriginTopFinal===!0&&y.includes("top"),P=b?n.filter((Ye)=>y1(e,Ye.busId)==="top"):[],E=new Map(P.map((Ye)=>[Ye.busId,o.find((mt)=>mt.busId===Ye.busId)])),B=new Set((b?o:[]).flatMap((Ye)=>Ye.termination.type==="plane"?[Ye.termination.layer]:[]));if(P.some((Ye)=>{let mt=E.get(Ye.busId);if(!mt||Ye.connections.length!==mt.connections.length||Ye.connections.some((Oe)=>!mt.connections.some((qe)=>qe.connectionIndex===Oe.connectionIndex&&qe.connection.name===Oe.connection.name&&qe.sourceObstacle===Oe.sourceObstacle)))return!0;let ft=(mt.routableEscapeLayers??mt.allowedLayers??r).filter((Oe)=>(mt.allowedLayers??r).includes(Oe));return!ft.includes("top")||!C.some((Oe)=>Oe!=="top"&&!B.has(Oe)&&ft.includes(Oe)&&(Ye.routableEscapeLayers??Ye.allowedLayers??r).includes(Oe)&&(Ye.allowedLayers??r).includes(Oe))}))return null;if(n.length===0||I<0||y.some((Ye)=>!r.includes(Ye))||e.targetLayerByBusId&&n.some((Ye)=>!e.targetLayerByBusId.has(Ye.busId))||e.startLayerByBusId&&(g||n.some((Ye)=>!e.startLayerByBusId.has(Ye.busId)))||C.some((Ye)=>!r.includes(Ye)))return null;let w=n.flatMap((Ye)=>Ye.connections),T=new Set(w.map((Ye)=>Ye.connectionIndex));if(g&&w.some((Ye)=>Ye.sourceLayer!=="top")||T.size!==w.length||e.terminals.length!==w.length||new Set(e.terminals.map((Ye)=>Ye.connection.connectionIndex)).size!==T.size||e.terminals.some((Ye)=>!T.has(Ye.connection.connectionIndex)))return null;if(n.some((Ye)=>Ye.termination.type!=="boundary"||!(Ye.allowedLayers??r).includes(y1(e,Ye.busId))||!(Ye.routableEscapeLayers??Ye.allowedLayers??r).includes(y1(e,Ye.busId)))||(e.startLayerByBusId?n.some((Ye)=>{let mt=e.startLayerByBusId.get(Ye.busId);return!(Ye.allowedLayers??r).includes(mt)||!(Ye.routableEscapeLayers??Ye.allowedLayers??r).includes(mt)||Ye.connections.some((ft)=>ft.sourceLayer===mt)}):!b&&o.some((Ye)=>Ye.connections.some((mt)=>y.includes(mt.sourceLayer)))))return null;let Q=n[0].sharedBoundary;if(n.some((Ye)=>Object.keys(Q).some((mt)=>Ye.sharedBoundary[mt]!==Q[mt])))return null;let N=new Map,F=new Map,H=new eci(Math.max(0.5,c*2),Math.max(s,c)/2+a+0.0000001),z=new Map(w.map((Ye)=>[Ye.connection.name,Ye])),Y=new Map(w.map((Ye)=>[Ye.sourceObstacle,Ye])),U=g?new Map(w.map((Ye)=>[Ye.sourceObstacle,{connectionName:Ye.connection.name,sourcePoint:z.get(Ye.connection.name).sourcePoint}])):void 0;for(let Ye of l.obstacles)H.add({kind:"obstacle",obstacle:Ye});for(let Ye of o)for(let mt of Ye.connections){F.set(mt.connection.name,Ye);let ft=e.fixedViaPointsByConnectionIndex.get(mt.connectionIndex);if(!ft)return null;let Oe=e.sourceEscapePaths?.get(mt.connectionIndex)??[mt.sourcePoint,ft];if(Oe.length<2||kt(Oe[0],mt.sourcePoint)>0.0000001||kt(Oe.at(-1),ft)>0.0000001)return null;if(N.set(mt.connectionIndex,Oe),g&&T.has(mt.connectionIndex))continue;H.add({kind:"via",connectionName:mt.connection.name,center:ft,diameter:c,layers:r});for(let qe=1;qe<Oe.length;qe++)H.add({kind:"segment",connectionName:mt.connection.name,segment:{start:Oe[qe-1],end:Oe[qe],width:s,layer:mt.sourceLayer}})}for(let Ye of e.terminals)if(kt(Ye.viaPoint,e.fixedViaPointsByConnectionIndex.get(Ye.connection.connectionIndex))>0.0000001)return null;for(let Ye of e.acceptedPlans){for(let mt of[...Ye.segments,...Ye.planeEndpointSegments??[]])H.add({kind:"segment",connectionName:Ye.connectionName,segment:mt});for(let mt of[Ye.via,...Ye.additionalVias??[],Ye.planeEndpointVia])if(mt)H.add({kind:"via",connectionName:Ye.connectionName,...mt,layers:mt.spanLayers})}for(let Ye of k3(l,!1)){for(let mt of Ye.segments)H.add({kind:"segment",connectionName:Ye.connectionName,segment:mt});for(let mt of Ye.vias)H.add({kind:"via",connectionName:Ye.connectionName,...mt,layers:mt.spanLayers})}let X=new Map;if(e.terminalApproachLength!==void 0)for(let Ye of e.terminals){let mt=Ye.connection.connection.name,ft=F.get(mt),Oe=Gai({connectionName:mt,edge:ft.exitEdge??Koe(ft.direction),layer:y1(e,ft.busId),exit:Ye.exitPoint,bounds:Q,approachLength:e.terminalApproachLength});X.set(mt,Oe),H.add({kind:"segment",connectionName:mt,segment:{start:Oe.goal,end:Oe.exit,width:s,layer:Oe.layer}})}let V={capacityMeshNodeId:"reserved-via-buses",center:{x:(Q.minX+Q.maxX)/2,y:(Q.minY+Q.maxY)/2},width:Q.maxX-Q.minX,height:Q.maxY-Q.minY,availableZ:C.map((Ye)=>r.indexOf(Ye)),portPoints:e.terminals.flatMap((Ye)=>[g?Ye.connection.sourcePoint:Ye.viaPoint,X.get(Ye.connection.connection.name)?.goal??Ye.exitPoint].map((mt,ft)=>({...mt,z:g&&ft===0?r.indexOf(Ye.connection.sourceLayer):ft===0&&e.startLayerByBusId?r.indexOf(e.startLayerByBusId.get(F.get(Ye.connection.connection.name).busId)):r.indexOf(y1(e,F.get(Ye.connection.connection.name).busId)),connectionName:Ye.connection.connection.name,rootConnectionName:Ye.connection.connection.name})))};if(e.tightViaChannels){let Ye=jYe({vias:[...e.fixedViaPointsByConnectionIndex].filter(([mt])=>!g||!e.sourceOriginPhysicalGridPhase||!T.has(mt)).map(([mt,ft])=>({connectionIndex:mt,center:ft,diameter:c})),activeConnectionIndices:T,traceWidth:s,clearance:a,gridStep:s});for(let mt of["x","y"]){let ft=(mt==="x"?Q.minX:Q.minY)+s/2;V.center[mt]+=Ye[mt]-(ft+Math.round((Ye[mt]-ft)/s)*s)}}let j=new iL({nodeWithPortPoints:V,traceWidth:s,viaDiameter:c}).generateSolver({HIGH_DENSITY_A03:!0});if(typeof j.computeMoveCostAndRips!=="function"||typeof j.markTraceFootprint!=="function"||typeof j.addSharedOccupant!=="function"||typeof j.getSolvedRouteCount!=="function"||X.size>0&&(typeof j.pointToCell!=="function"||typeof j.finalizeRoute!=="function"||typeof j.ripTrace!=="function"))return null;let ne=new j.constructor({nodeWithPortPoints:V,highResolutionCellSize:s,lowResolutionCellSize:s,traceThickness:s,traceMargin:a+p,viaDiameter:c,maxCellCount:160000*C.length,effort:20,hyperParameters:{shuffleSeed:e.shuffleSeed??1,greedyMultiplier:u,ripCost:m}}),ce=ne._setup.bind(ne),oe=ne.computeMoveCostAndRips.bind(ne),ie=-1,J=-1,ee=[],se=[],le,he=[],ue=new Set,Ae,_e=new Map,Pe=new WeakMap,Ee=new Map,Te,be=(Ye)=>({x:ne.cellCenterX[Ye],y:ne.cellCenterY[Ye]}),me=(Ye)=>Ye.x>=Q.minX-0.000000001&&Ye.x<=Q.maxX+0.000000001&&Ye.y>=Q.minY-0.000000001&&Ye.y<=Q.maxY+0.000000001,ye=(Ye)=>{let mt=Ee.get(Ye);if(mt!==void 0)return mt;let ft=be(Ye),Oe=H.nearby(ft).every((qe)=>{if(qe.kind==="via")return kt(ft,qe.center)>=(c+qe.diameter)/2+a-0.000000001;if(qe.kind==="segment")return Bi(ft,qe.segment.start,qe.segment.end)>=(c+qe.segment.width)/2+a-0.000000001;return Jc({start:ft,end:ft,width:0,layer:i},qe.obstacle)>=c/2+a-0.000000001});return Ee.set(Ye,Oe),Oe};ne._setup=()=>{if(ce(),ne.failed)return;if(e.includeDiagonalNeighbors)Object.assign(ne,zai(ne));if(X.size>0){if(typeof ne.ripChain?.contains!=="function"||typeof ne.ripChain?.append!=="function"||!Number.isFinite(ne.hyperParameters.ripTracePenalty)||!Number.isFinite(ne.hyperParameters.ripViaPenalty)){ne.failed=!0;return}for(let Mt of X.values())if(!ve(Mt.goal,Mt.exit,Mt.layer,Mt.connectionName)){ne.failed=!0;return}let mt=[...X.values()].map((Mt)=>({connector:Mt,cellId:ne.pointToCell(Mt.goal).cellId})),ft=Wai({grid:ne,terminals:mt,margin:Math.max(s,c)+a+0.0000001,segmentIsClear:(Mt,Nt,Ot)=>me(Mt)&&me(Nt)&&ve(Mt,Nt,Ot.layer,Ot.connectionName)});ne.neighborOffset=ft.neighborOffset,ne.neighborIds=ft.neighborIds,ne.neighborCosts=ft.neighborCosts,ue=ft.extendedEdges;let Oe=new Map(mt.map(({connector:Mt,cellId:Nt})=>[Mt.connectionName,Nt])),qe=ne.getOutput.bind(ne);ne.getOutput=()=>qe().map((Mt)=>{let Nt=Xai(Mt,X.get(Mt.connectionName),be(Oe.get(Mt.connectionName))),Ot=[];if(!g){let nn=z.get(Mt.connectionName),on=N.get(nn.connectionIndex);for(let Kn=1;Kn<on.length;Kn++)Ot.push({start:on[Kn-1],end:on[Kn],width:s,layer:nn.sourceLayer})}let mn=Mt.route.at(-2).z!==Mt.route.at(-1).z,ln=Mt.route.length-(mn?1:2),Cn=-1;for(let nn=1;nn<Nt.route.length;nn++){let on=Nt.route[nn-1],Kn=Nt.route[nn];if(on.z!==Kn.z)continue;if(nn-1===ln)Cn=Ot.length;Ot.push({start:on,end:Kn,width:s,layer:r[on.z]})}let vn={rawSegments:Ot,firstEntrySegmentIndex:Cn};return _e.set(Mt.connectionName,vn),Pe.set(Nt,vn),Nt}),Ae=new Kai({regions:ft.regions,traceWidth:s,clearance:a,viaDiameter:c,getRoutes:()=>ne.getOutput()});let rt=ne.finalizeRoute.bind(ne),Ct=ne.ripTrace.bind(ne);ne.finalizeRoute=(Mt)=>{rt(Mt),Ae.invalidate()},ne.ripTrace=(Mt)=>{Ct(Mt),Ae.invalidate()}}if(jai(ne),Te=new Jai(ne.planeSize,C.length,ne.neighborOffset,ne.neighborIds),ee=Array.from({length:C.length},(mt,ft)=>r[ne.layerToZ.get(ft)]),se=ne.connIdToName.map((mt)=>{let ft=F.get(mt),Oe=ft?(ft.routableEscapeLayers??ft.allowedLayers??r).filter((Ct)=>(ft.allowedLayers??r).includes(Ct)):[],qe=ft&&E.get(ft.busId),rt=qe?(qe.routableEscapeLayers??qe.allowedLayers??r).filter((Ct)=>(qe.allowedLayers??r).includes(Ct)&&!B.has(Ct)):void 0;return ee.map((Ct)=>(Oe.includes(Ct)||g&&Ct==="top")&&(!rt||rt.includes(Ct)))}),ne.MAX_ITERATIONS=d,e.maximumRipEvents!==void 0)ne.MAX_RIPS=e.maximumRipEvents;ne.gridToBoundsTransform={a:1,b:0,c:0,d:0,e:1,f:0};let Ye=ne.heap.pop.bind(ne.heap);if(ne.heap.pop=()=>{let mt=Ye();return ie=ne.nodePool.cellId[mt],J=ne.nodePool.z[mt],mt},b){let mt=ne.layers*ne.planeSize,ft=ee.indexOf("top");if(typeof ne.getSearchStateIdx!=="function"||typeof ne.nodePool.push!=="function"||!(ne.visitedStamp instanceof Uint32Array)||!(ne.bestGStamp instanceof Uint32Array)||!(ne.bestGValue instanceof Float64Array)||ne.visitedStamp.length!==mt||ne.bestGStamp.length!==mt||ne.bestGValue.length!==mt||ne.getSearchStateIdx(0,0)!==0||ne.getSearchStateIdx(mt-1,1)!==mt-1||ft<0){ne.failed=!0;return}he=ne.connIdToName.map((Oe)=>{let qe=F.get(Oe);return!!qe&&y1(e,qe.busId)==="top"}),le=$ai(ne,he,ft,c+a)}},ne.markTraceFootprint=(Ye,mt,ft,Oe)=>{let qe=be(ft),rt=ne.traceKeepoutRadius;ne.forEachCellNearCircle(qe.x,qe.y,rt,(Ct)=>{let Mt=e.tightViaChannels?ne.cellCenterX[Ct]-qe.x:Math.max(ne.cellMinX[Ct]-qe.x,0,qe.x-ne.cellMaxX[Ct]),Nt=e.tightViaChannels?ne.cellCenterY[Ct]-qe.y:Math.max(ne.cellMinY[Ct]-qe.y,0,qe.y-ne.cellMaxY[Ct]),Ot=rt-(e.tightViaChannels?0.000000001:0);if(e.tightViaChannels?Mt*Mt+Nt*Nt>=Ot*Ot:Mt*Mt+Nt*Nt>Ot*Ot)return;let mn=mt*ne.planeSize+Ct;if(Ct!==ft&&ne.shouldSkipFixedPortHalo(mn,Ye))return;let ln=ne.usedCellsFlat[mn];if(ln!==-1&&ln!==Ye)ne.addSharedOccupant(mn,Ye);else ne.usedCellsFlat[mn]=Ye;Oe.push(mn)})};let Ce=(Ye,mt,ft,Oe)=>{if(Oe.kind==="obstacle")return!Oe.obstacle.layers.includes(ft)||Jc({start:Ye,end:mt,width:s,layer:ft},Oe.obstacle)>=s/2+a-0.000000001;if(Oe.kind==="via")return!Oe.layers.includes(ft)||Bi(Oe.center,Ye,mt)>=(s+Oe.diameter)/2+a-0.000000001;return Oe.segment.layer!==ft||ad(Ye,mt,Oe.segment.start,Oe.segment.end)>=(s+Oe.segment.width)/2+a-0.000000001},ve=(Ye,mt,ft,Oe,qe=H.nearby(Ye,mt))=>qe.every((rt)=>rt.kind!=="obstacle"&&rt.connectionName===Oe||g&&rt.kind==="obstacle"&&ft==="top"&&Y.get(rt.obstacle)?.connection.name===Oe&&Jc({start:Ye,end:Ye,width:s,layer:ft},rt.obstacle)<s/2+a-0.000000001&&kt(mt,z.get(Oe).sourcePoint)>=kt(Ye,z.get(Oe).sourcePoint)-0.000000001||Ce(Ye,mt,ft,rt)),De=(Ye,mt,ft)=>{let Oe;for(let qe of H.nearby(Ye,mt)){if(Ce(Ye,mt,ft,qe))continue;if(qe.kind==="obstacle"&&!g)return!1;let rt=qe.kind==="obstacle"?Oai(Ye,mt,ft,s,a,qe.obstacle,U?.get(qe.obstacle)):qe.connectionName;if(rt===void 0||Oe!==void 0&&Oe!==rt)return!1;Oe=rt}return Oe??!0};ne.computeMoveCostAndRips=(Ye,mt,ft,Oe,qe,rt,Ct)=>{let Mt=ne.connIdToName[Ye],Nt=ee[mt],Ot=ne.activeConnSeg;if(le&&!le.prepareMove(mt,ft,Oe)||!se[Ye][mt]||Oe&&(g&&Nt==="top"&&!he[Ye]||!ye(ft))){ne._moveCost=-1;return}let mn=ie===Ot.startCellId&&(!_||J===Ot.startZ)&&(!le||le.beforeFirstVia()),ln,Cn,vn;if(Ae){let xo=ft===Ot.endCellId&&mt===Ot.endZ;if(ue.has(`${ie}:${ft}`)&&!xo){ne._moveCost=-1;return}let ai=X.get(Mt);if(ln=mn?Ot.startPoint:be(ie),Cn=xo?Ot.endPoint:be(ft),vn=xo?vCe(Oe?be(ft):ln,ai):void 0,xo&&(!vn||Oe&&kt(ln,be(ft))>0.0000001)){ne._moveCost=-1;return}}let nn=mt*ne.planeSize+ie,on=mn||ft===Ot.endCellId&&(!_||mt===Ot.endZ),Kn=Te.get(nn,ft,on);if(Kn===void 0){if(ln??=mn?Ot.startPoint:be(ie),Cn??=ft===Ot.endCellId&&(!_||mt===Ot.endZ)?Ot.endPoint:be(ft),!me(ln)||!me(Cn)){ne._moveCost=-1;return}Kn=on?vn?vn.slice(1).every((xo,ai)=>ve(vn[ai],xo,Nt,Mt)):ve(ln,Cn,Nt,Mt):De(ln,Cn,Nt),Te.set(nn,ft,Kn,on)}if(Kn!==!0&&Kn!==Mt){ne._moveCost=-1;return}if(oe(Ye,mt,ft,Oe,qe,rt,Ct),Ae&&ne._moveCost>=0){let xo=Oe?Ae.blockingViaOwners(Mt,be(ft)):Ae.blockingSegmentOwners(Mt,vn??[ln,Cn],ne.layerToZ.get(mt));if(Oe&&vn)for(let ai of Ae.blockingSegmentOwners(Mt,vn,ne.layerToZ.get(mt)))xo.add(ai);for(let ai of xo){let At=ne.connIdToName.indexOf(ai);if(At<0)throw Error("Cannot resolve dynamic terminal copper owner");if(!ne.ripChain.contains(ne._moveRippedHead,At))ne._moveRippedHead=ne.ripChain.append(ne._moveRippedHead,At),ne._moveRipCount++,ne._moveCost+=m;ne._moveCost+=Oe?ne.hyperParameters.ripViaPenalty:ne.hyperParameters.ripTracePenalty}}if(g&&!Oe&&Nt==="top"&&ne._moveCost>=0&&(!le||le.beforeFirstVia()))ne._moveCost+=Ct*(f-1)};let Ze=g?A:h;ne.setup();let st=new Zai({router:ne,connectionCount:w.length,sourceOrigin:g,maximumPartialCandidates:Ze});yield{type:"subsolver",solver:st,iterations:ne.iterations,routedConnectionCount:ne.getSolvedRouteCount(),connectionCount:w.length};while(!st.solved&&!st.failed)st.step(),yield{iterations:ne.iterations,routedConnectionCount:ne.getSolvedRouteCount(),connectionCount:w.length};let{partialCandidates:et}=st,lt=(Ye)=>o.flatMap((mt)=>mt.connections.filter((ft)=>!Ye.has(ft.connectionIndex)).map((ft)=>{let Oe=e.fixedViaPointsByConnectionIndex.get(ft.connectionIndex),qe=mt.termination.type==="plane"?mt.termination.layer:(mt.allowedLayers??r).find((rt)=>rt!==ft.sourceLayer);return cb({...e,bus:mt,terminal:{connection:ft,viaPoint:Oe,exitPoint:Oe},targetLayer:qe,targetLayerPoints:[Oe],sourceEscapePoints:N.get(ft.connectionIndex),allowBlindAndBuriedVias:!1})})),it=(Ye,mt=new Set)=>{let ft=lt(new Set([...[...Ye,...e.acceptedPlans].map((Oe)=>Oe.connectionIndex),...mt]));return(X.size===0||Ye.every((Oe)=>{let qe=X.get(Oe.connectionName);if(!qe)return!0;let rt=Oe.segments.at(-1);return!!rt&&rt.layer===qe.layer&&kt(rt.end,qe.exit)<0.0000001&&Bi(qe.goal,rt.start,rt.end)<0.0000001&&KYe({plan:Oe,splice:t.get(Oe)??_e.get(Oe.connectionName)??{rawSegments:[],firstEntrySegmentIndex:-1},maximumJoinLength:s/4,clearance:a})}))&&Kh({plans:[...Ye],srj:l,sharedBoundary:Q,clearance:a,allowBlindAndBuriedVias:!1,allowSameNetMerges:!1})&&qd({inputSrj:l,routedSrj:{...l,traces:[...l.traces??[],...[...Ye,...e.acceptedPlans,...ft].flatMap((Oe)=>[Oe.trace,...Oe.planeEndpointTrace?[Oe.planeEndpointTrace]:[]])]},clearance:a,allowBlindAndBuriedVias:!1}).valid},gt=(Ye,mt)=>{let ft=Ye.findIndex((Ct,Mt)=>Mt>0&&Ct.z!==Ye[Mt-1].z);if(ft<1||Ye.slice(0,ft).some((Ct)=>r[Ct.z]!=="top")||kt(Ye[ft-1],Ye[ft])>0.0000001)return!1;let Oe=F.get(mt);if(!E.has(Oe.busId))return!Ye.slice(ft).some((Ct)=>r[Ct.z]==="top");let qe=!1,rt=!1;for(let Ct=ft+1;Ct<Ye.length;Ct++){let Mt=Ye[Ct-1],Nt=Ye[Ct];if(Mt.z===Nt.z&&r[Mt.z]!=="top"&&kt(Mt,Nt)>0.0000001)qe=!0;if(Mt.z!==Nt.z&&r[Nt.z]==="top"){if(!qe||kt(Mt,Nt)>0.0000001||kt(Ye[ft],Nt)<c+a-0.000000001)return!1;rt=!0}}return rt&&Srn({points:Ye,topZ:r.indexOf("top"),traceWidth:s,viaDiameter:c,clearance:a})},wt=(Ye)=>{if(_e.clear(),X.size===0)return!0;for(let mt of Ye){let ft=Pe.get(mt);if(!ft)return!1;_e.set(mt.connectionName,ft)}return!0},Dt=(Ye,mt=new Set)=>{if(!Ye||!it(Ye,mt))return null;for(let ft of Ye){let Oe=_e.get(ft.connectionName);if(Oe&&!t.has(ft))t.set(ft,Oe)}return Ye},vt=(Ye)=>{if(X.size===0)return Ye;let mt=Uai({plans:Ye,splices:_e,connectors:X,clearance:a,segmentIsClear:(ft,Oe)=>me(ft.start)&&me(ft.end)&&ve(ft.start,ft.end,ft.layer,Oe)});if(!mt)return null;for(let[ft,Oe]of mt.splices)_e.set(ft,Oe);return mt.plans},Ht=(Ye,mt=new Set)=>{if(!wt(Ye))return null;let ft=new Map(N),Oe=[],qe=[];for(let nn of Ye){let on=e.terminals.find((ai)=>ai.connection.connection.name===nn.connectionName),Kn=nn.route.findIndex((ai,At)=>At>0&&ai.z!==nn.route[At-1].z);if(!gt(nn.route,nn.connectionName)||r[nn.route.at(-1).z]!==y1(e,F.get(nn.connectionName).busId)||kt(nn.route[Kn-1],nn.route[Kn])>0.0000001)return null;let xo=nn.route[Kn];ft.set(on.connection.connectionIndex,K2e(nn.route.slice(0,Kn)).map(({x:ai,y:At})=>({x:ai,y:At}))),Oe.push({...on,viaPoint:{x:xo.x,y:xo.y}}),qe.push({...nn,route:nn.route.slice(Kn),vias:[]})}let rt=Hye({...e,terminals:Oe},qe,ft);if(!rt)return null;let Ct=vt(rt);if(!Ct)return null;let Mt=WYe({...e,inputSrj:l,plans:Ct,preparedBuses:n,reservedPlans:[...e.acceptedPlans,...lt(T)],allowBlindAndBuriedVias:!1,allowSameNetMerges:!1});if(!Mt)return null;let Nt=Mt.map((nn)=>({connectionName:nn.connectionName,route:nn.trace.route.flatMap((on)=>on.route_type==="wire"?[{x:on.x,y:on.y,z:r.indexOf(on.layer)}]:[]),vias:[nn.via.center]})),Ot=H.clone(),mn=(nn)=>{for(let on=1;on<nn.route.length;on++){let Kn=nn.route[on-1],xo=nn.route[on];if(Kn.z===xo.z)Ot.add({kind:"segment",connectionName:nn.connectionName,segment:{start:Kn,end:xo,width:s,layer:r[Kn.z]}});else Ot.add({kind:"via",connectionName:nn.connectionName,center:Kn,diameter:c,layers:r})}};Nt.forEach(mn);let ln=[],Cn=[];for(let nn of Nt){let on=e.terminals.find((At)=>At.connection.connection.name===nn.connectionName),Kn=gF({points:K2e(nn.route),chamfer:s/4,segmentIsClear:(At,_t)=>{for(let Tt of[At,_t]){if(!me(Tt))return!1;if((Math.abs(Tt.x-Q.minX)<0.0000001||Math.abs(Tt.x-Q.maxX)<0.0000001||Math.abs(Tt.y-Q.minY)<0.0000001||Math.abs(Tt.y-Q.maxY)<0.0000001)&&kt(Tt,on.exitPoint)>0.0000001)return!1}return ve(At,_t,r[At.z],nn.connectionName,Ot.nearby(At,_t))}});if(!Kn)return null;let xo=Kn.findIndex((At,_t)=>_t>0&&At.z!==Kn[_t-1].z);if(!gt(Kn,nn.connectionName)||r[Kn.at(-1).z]!==y1(e,F.get(nn.connectionName).busId))return null;let ai=Kn[xo];N.set(on.connection.connectionIndex,Kn.slice(0,xo).map(({x:At,y:_t})=>({x:At,y:_t}))),Cn.push({...on,viaPoint:{x:ai.x,y:ai.y}}),ln.push({...nn,route:Kn.slice(xo),vias:[]}),mn({...nn,route:Kn})}let vn=Hye({...e,terminals:Cn},ln,N);return Dt(vn,mt)},Xt=(Ye)=>{if(!wt(Ye))return null;let mt=Ye,ft=H.clone(),Oe=new Set([...mt.map((mn)=>e.terminals.find((ln)=>ln.connection.connection.name===mn.connectionName).connection.connectionIndex),...e.acceptedPlans.map((mn)=>mn.connectionIndex)]),qe=lt(Oe),rt=Hye(e,mt,N);if(!rt)return null;let Ct=vt(rt);if(!Ct)return null;let Mt=WYe({...e,inputSrj:l,plans:Ct,preparedBuses:n,reservedPlans:[...e.acceptedPlans,...qe],allowBlindAndBuriedVias:!1,allowSameNetMerges:!1});if(!Mt)return null;mt=Mt.map((mn)=>{let ln=mn.trace.route.findIndex((Cn)=>Cn.route_type==="via");return{connectionName:mn.connectionName,route:mn.trace.route.slice(ln+1).flatMap((Cn)=>Cn.route_type==="wire"?[{x:Cn.x,y:Cn.y,z:r.indexOf(Cn.layer)}]:[]),vias:(mn.additionalVias??[]).map((Cn)=>Cn.center)}});let Nt=(mn)=>{for(let ln=1;ln<mn.route.length;ln++){let Cn=mn.route[ln-1],vn=mn.route[ln];if(Cn.z===vn.z)ft.add({kind:"segment",connectionName:mn.connectionName,segment:{start:Cn,end:vn,width:s,layer:r[Cn.z]}})}for(let ln of mn.vias)ft.add({kind:"via",connectionName:mn.connectionName,center:ln,diameter:c,layers:r})};for(let mn of mt)Nt(mn);for(let mn of mt){let ln=e.terminals.find((vn)=>vn.connection.connection.name===mn.connectionName),Cn=gF({points:K2e(mn.route),chamfer:s/4,segmentIsClear:(vn,nn)=>{for(let on of[vn,nn]){if(!me(on))return!1;if((Math.abs(on.x-Q.minX)<0.0000001||Math.abs(on.x-Q.maxX)<0.0000001||Math.abs(on.y-Q.minY)<0.0000001||Math.abs(on.y-Q.maxY)<0.0000001)&&kt(on,ln.exitPoint)>0.0000001)return!1}return ve(vn,nn,r[vn.z],mn.connectionName,ft.nearby(vn,nn))}});if(!Cn)return null;mn.route=Cn,Nt(mn)}let Ot=Hye(e,mt,N);return Dt(Ot)};if(ne.solved&&!ne.failed){let Ye=ne.getOutput();if(Ye.length!==w.length||new Set(Ye.map((mt)=>mt.connectionName)).size!==w.length)return null;return g?Ht(Ye):Xt(Ye)}if(g&&A>0){for(let Ye of et){let mt=new Set(Ye.map((Nt)=>Nt.connectionName)),ft=e.terminals.filter((Nt)=>!mt.has(Nt.connection.connection.name));if(ft.length!==1)continue;let Oe=ft[0].connection.connectionIndex,qe=new Map(N),rt=Ht(Ye,new Set([Oe]));N.clear();for(let[Nt,Ot]of qe)N.set(Nt,Ot);if(!rt)continue;let Ct=tci(e,rt,t),Mt=Ct.next();while(!Mt.done)yield{iterations:ne.iterations+Mt.value.iterations,routedConnectionCount:Mt.value.routedConnectionCount,connectionCount:w.length},Mt=Ct.next();if(Mt.value&&it(Mt.value))return Mt.value}return null}if(g||h===0||et.length===0)return null;let ut=lt(new Set(e.acceptedPlans.map((Ye)=>Ye.connectionIndex))),je=new Map(ut.map((Ye)=>[Ye.connectionIndex,Ye])),Re=ut.flatMap((Ye)=>Ye.via?[{connectionName:Ye.connectionName,via:Ye.via}]:[]),Je=jYe({...e,gridStep:s,vias:o.flatMap((Ye)=>Ye.connections.map((mt)=>({connectionIndex:mt.connectionIndex,center:e.fixedViaPointsByConnectionIndex.get(mt.connectionIndex),diameter:c}))),activeConnectionIndices:T}),Ve=0;for(let Ye of et.toReversed()){let mt=Xt(Ye);if(!mt)continue;let ft=new Set(mt.map((rt)=>rt.connectionIndex)),Oe=e.terminals.find((rt)=>!ft.has(rt.connection.connectionIndex)),qe=mt.toSorted((rt,Ct)=>kt(rt.exitPoint,Oe.exitPoint)-kt(Ct.exitPoint,Oe.exitPoint));for(let rt of qe.slice(0,16)){let Ct=Oe.connection.connectionIndex,Mt=mt.filter((vn)=>vn!==rt),Nt=[...e.acceptedPlans,...Mt,...ut.filter((vn)=>!ft.has(vn.connectionIndex)&&vn.connectionIndex!==Ct),je.get(rt.connectionIndex)],Ot=F.get(Oe.connection.connection.name),mn=Kg({...e,bus:{...Ot,exitEdge:Ot.exitEdge??Koe(Ot.direction),connections:[Oe.connection]},terminals:[Oe],targetLayer:y1(e,Ot.busId),acceptedPlans:Nt,reservedVias:Re.filter((vn)=>vn.connectionName!==Oe.connection.connection.name),sourceEscapePaths:N,gridStep:s,gridOrigin:Je,gridStepDivisor:2,maximumRouteOrderAttempts:1,maximumSearchStates:240000,heuristicWeight:1,alignGridToPads:!0},1,!1),ln=mn.next();while(!ln.done)yield{iterations:ne.iterations+ln.value.expandedStateCount,routedConnectionCount:mt.length,connectionCount:w.length},ln=mn.next();if(!ln.value[0]?.length)continue;let Cn=Mt.toSorted((vn,nn)=>{let on=(Kn)=>Math.min(...Kn.segments.filter((xo)=>xo.layer===y1(e,Ot.busId)).map((xo)=>Bi(Oe.viaPoint,xo.start,xo.end)));return on(vn)-on(nn)});for(let vn of Cn.slice(0,1)){if(Ve++>=h)return null;let nn=new Set([Ct,rt.connectionIndex,vn.connectionIndex]),on=n.map((_t)=>({..._t,connections:_t.connections.filter((Tt)=>nn.has(Tt.connectionIndex))})).filter((_t)=>_t.connections.length>0),Kn=[...e.acceptedPlans,...mt.filter((_t)=>!nn.has(_t.connectionIndex)),...ut.filter((_t)=>!ft.has(_t.connectionIndex)&&!nn.has(_t.connectionIndex))],xo=oWe({...e,buses:on,terminals:e.terminals.filter((_t)=>nn.has(_t.connection.connectionIndex)),acceptedPlans:Kn,maximumLocalRepairAttempts:0,maximumIterations:Math.min(d,2000000)},t),ai=xo.next();while(!ai.done)yield{iterations:ne.iterations+ai.value.iterations,routedConnectionCount:mt.length-2+ai.value.routedConnectionCount,connectionCount:w.length},ai=xo.next();if(!ai.value)continue;let At=[...mt.filter((_t)=>!nn.has(_t.connectionIndex)),...ai.value];if(At.length===w.length&&new Set(At.map((_t)=>_t.connectionIndex)).size===T.size&&it(At))return At}break}}return null}function*tci(e,t,n){let{buses:o,layerNames:i}=e;if(!e.routeFromSourcePads)return null;let r=new Map(e.terminals.map((_)=>[_.connection.connectionIndex,_])),s=new Set(t.map((_)=>_.connectionIndex));if(r.size<2||s.size!==t.length||t.length!==r.size-1||t.some((_)=>r.get(_.connectionIndex)?.connection.connection.name!==_.connectionName||_.targetLayer!==y1(e,_.busId)||_.sourceLayer!==r.get(_.connectionIndex).connection.sourceLayer||kt(_.sourcePoint,r.get(_.connectionIndex).connection.sourcePoint)>0.0000001||!_.via||kt(_.exitPoint,r.get(_.connectionIndex).exitPoint)>0.0000001))return null;let a=e.terminals.filter((_)=>!s.has(_.connection.connectionIndex)),c=a[0].connection.connectionIndex,l=new Map(e.fixedViaPointsByConnectionIndex),d=new Map(e.sourceEscapePaths);for(let _ of t)l.set(_.connectionIndex,_.via.center),d.set(_.connectionIndex,[_.sourcePoint,..._.segments.slice(0,_.sourceEscapeSegmentCount??1).map((f)=>f.end)]);let u=o.map((_)=>({..._,connections:_.connections.filter((f)=>f.connectionIndex===c)})).filter((_)=>_.connections.length>0),h=y1(e,u[0].busId),A=i.filter((_)=>_!==h&&u.every((f)=>(f.routableEscapeLayers??f.allowedLayers??i).includes(_)&&f.connections.every((y)=>y.sourceLayer!==_))),m=oWe({...e,buses:u,targetLayer:h,terminals:a,transitLayers:A,fixedViaPointsByConnectionIndex:l,sourceEscapePaths:d,acceptedPlans:[...e.acceptedPlans,...t],includeDiagonalNeighbors:!0,ripCost:256,maximumIterations:Math.min(e.maximumIterations??5000000,5000000),maximumRipEvents:Math.min(e.maximumRipEvents??400,400),maximumLocalRepairAttempts:0,maximumSourceOriginRepairAttempts:0},n),p=m.next();while(!p.done)yield{...p.value,routedConnectionCount:t.length+p.value.routedConnectionCount,connectionCount:r.size},p=m.next();if(!p.value)return null;let g=[...t,...p.value];return g.length===r.size&&new Set(g.map((_)=>_.connectionIndex)).size===r.size?g:null}var jm=0.0000001,Lx=(e)=>Math.max(...e.map((t)=>t.length))-Math.min(...e.map((t)=>t.length));function fF(e,t){let n=e.trace.route.findIndex((r)=>r.route_type==="via"),o=t.trace.route.findIndex((r)=>r.route_type==="via");if(n<0||o<0)return null;let i=e.sourceEscapeSegmentCount??1;return{...t,sourcePoint:e.sourcePoint,via:e.via,exitPoint:e.exitPoint,sourceEscapeSegmentCount:i,segments:[...e.segments.slice(0,i),...t.segments.slice(t.sourceEscapeSegmentCount??1)],trace:{...e.trace,route:[...e.trace.route.slice(0,n+1),...t.trace.route.slice(o+1)]}}}function iWe(e,t,n){if(!t.exitEdge||e.termination.type!=="boundary")return null;let o=t.sharedBoundary,i=(A)=>t.exitEdge==="left"?A.x-o.minX:t.exitEdge==="right"?o.maxX-A.x:t.exitEdge==="top"?o.maxY-A.y:A.y-o.minY;if(Math.abs(i(e.exitPoint))>jm)return null;let r=e.segments.length-1;while(r>0&&e.segments[r-1].layer===e.targetLayer)r--;if(r<(e.sourceEscapeSegmentCount??1))return null;let s=-1;for(let A=r;A<e.segments.length;A++){let m=e.segments[A];if(i(m.start)>=n&&i(m.end)<=n)s=A}if(s<0)s=r;let a=e.segments[s],c=i(a.start),l=i(a.end),d=c>n&&l<c?(c-n)/(c-l):0,u={x:a.start.x+(a.end.x-a.start.x)*d,y:a.start.y+(a.end.y-a.start.y)*d};if(i(u)<=jm)return null;let h=[{...a,start:u},...e.segments.slice(s+1)].filter((A)=>kt(A.start,A.end)>jm);if(!h.length||h.some((A)=>A.layer!==e.targetLayer))return null;return{...e,sourcePoint:{...e.sourcePoint,...u},sourceEscapeSegmentCount:0,via:void 0,additionalVias:[],segments:h,length:h.reduce((A,m)=>A+kt(m.start,m.end),0),trace:{...e.trace,pcb_trace_id:`${e.trace.pcb_trace_id}-retained-tail`,route:[u,...h.map((A)=>A.end)].map((A)=>({route_type:"wire",...A,layer:e.targetLayer,width:h[0].width}))}}}function rWe(e){let{inputSrj:t,preparedBuses:n,layerNames:o,viaDiameter:i,viaHoleDiameter:r}=e,s=new Map(e.plans.map((d)=>[d.connectionIndex,d])),a=n.flatMap((d)=>d.connections);if(a.length!==t.connections.length||s.size!==a.length||s.size!==e.plans.length||a.some((d)=>s.get(d.connectionIndex)?.connectionName!==d.connection.name))throw Error("Retained-tail repair requires every original connection exactly once");let c=new Map,l=new Map;for(let d of a){let u=s.get(d.connectionIndex),h=u.segments.slice(0,u.sourceEscapeSegmentCount??1);if(!u.via||!h.length||h.some((A)=>A.layer!==d.sourceLayer)||kt(h[0].start,d.sourcePoint)>jm||kt(h.at(-1).end,u.via.center)>jm||h.some((A,m)=>m>0&&kt(h[m-1].end,A.start)>jm)||u.via.fromLayer!==d.sourceLayer||u.via.toLayer!==u.targetLayer||u.via.diameter!==i||u.via.holeDiameter!==r||u.via.spanLayers.length!==o.length||!o.every((A)=>u.via.spanLayers.includes(A)))return null;c.set(d.connectionIndex,u.via.center),l.set(d.connectionIndex,[h[0].start,...h.map((A)=>A.end)])}return{fixed:c,sourcePaths:l}}function*nci(e,t){let{inputSrj:n,preparedBuses:o,layerNames:i,traceWidth:r,clearance:s,viaDiameter:a,viaHoleDiameter:c}=e,l=e.maximumIterationsPerAttempt??1e7;if(!Number.isSafeInteger(l)||l<1)throw Error("maximumIterationsPerAttempt must be a positive safe integer");let d=rWe(e);if(!d)return null;let{fixed:u,sourcePaths:h}=d,A=[...e.plans],m=o.filter((g)=>g.termination.type==="boundary"&&g.maxLengthSkew!==void 0&&g.connections.length>1&&(!e.busIds||e.busIds.includes(g.busId)));for(let g of m){let _=A.filter((Y)=>Y.busId===g.busId);if(_.length!==g.connections.length)return null;if(Lx(_)<=g.maxLengthSkew+jm)continue;let f=_[0].targetLayer;if(_.some((Y)=>Y.targetLayer!==f||Y.planeEndpointTrace||Y.planeEndpointSegments||Y.planeEndpointVia)||!g.exitEdge)return null;let y=(g.routableEscapeLayers??g.allowedLayers??i).filter((Y)=>(g.allowedLayers??i).includes(Y));if(!y.includes(f))return null;let x=y.filter((Y)=>Y!==f);if(!x.length)return null;let C=(Y,U,X)=>{let V={srj:n,allBuses:o,buses:[{...g,connections:Y}],targetLayer:f,transitLayers:x,terminals:Y.map((W)=>({connection:W,viaPoint:u.get(W.connectionIndex),exitPoint:U.get(W.connectionIndex)})),fixedViaPointsByConnectionIndex:u,sourceEscapePaths:h,acceptedPlans:X,layerNames:i,traceWidth:r,clearance:s,viaDiameter:a,viaHoleDiameter:c,tightViaChannels:!0,includeDiagonalNeighbors:!0,heuristicWeight:1,maximumIterations:l,maximumRipEvents:200,maximumLocalRepairAttempts:0,ripCost:256,shuffleSeed:1};return zx(V)},I=_.toSorted((Y,U)=>U.length-Y.length)[0],b=g.connections.find((Y)=>Y.connectionIndex===I.connectionIndex),P=C([b],new Map([[I.connectionIndex,I.exitPoint]]),A.filter((Y)=>Y!==I)),E=P.next();while(!E.done)yield{...E.value,busId:g.busId,phase:"lane"},E=P.next();let B=E.value?.[0]?fF(I,E.value[0]):null;if(B&&B.length<I.length-jm&&Lx(_.map((Y)=>Y===I?B:Y))<Lx(_)-jm)t.push({busId:g.busId,plan:B});if(B&&Lx(_.map((Y)=>Y===I?B:Y))<=g.maxLengthSkew+jm){A=A.map((Y)=>Y===I?B:Y);continue}let w=Math.min(12*(r+s),(g.exitEdge==="left"||g.exitEdge==="right"?g.sharedBoundary.maxX-g.sharedBoundary.minX:g.sharedBoundary.maxY-g.sharedBoundary.minY)/3),T=_.map((Y)=>iWe(Y,g,w));if(T.some((Y)=>!Y))return null;let Q=T,N=A.filter((Y)=>Y.busId!==g.busId),F=C(g.connections,new Map(Q.map((Y)=>[Y.connectionIndex,Y.sourcePoint])),[...N,...Q]),H=F.next();while(!H.done)yield{...H.value,busId:g.busId,phase:"bus"},H=F.next();if(!H.value||H.value.length!==_.length)return null;let z=A.map((Y)=>{let U=H.value.find((j)=>j.connectionIndex===Y.connectionIndex);if(!U)return Y;let X=fF(Y,U);if(!X)throw Error("Retained-tail routing lost its source via");let V=Q.find((j)=>j.connectionIndex===X.connectionIndex),W=[...X.trace.route,...V.trace.route.slice(1)];return W[W.length-1]=Y.trace.route.at(-1),{...X,exitPoint:Y.exitPoint,trace:{...Y.trace,route:W},segments:[...X.segments,...V.segments],length:X.length+V.length}});for(let Y of _){let U=z.find((V)=>V.connectionIndex===Y.connectionIndex),X=zie(e,U,z.filter((V)=>V!==U),g,!0);if(!X)return null;z=z.map((V)=>V===U?X:V)}if(Lx(z.filter((Y)=>Y.busId===g.busId))>g.maxLengthSkew+jm||!Kh({plans:z,srj:n,sharedBoundary:g.sharedBoundary,clearance:s,allowBlindAndBuriedVias:!1,allowSameNetMerges:!1}))return null;A=z}return qd({inputSrj:n,routedSrj:{...n,traces:[...n.traces??[],...A.flatMap((g)=>[g.trace,...g.planeEndpointTrace?[g.planeEndpointTrace]:[]])]},clearance:s,allowBlindAndBuriedVias:!1}).valid?A:null}function*oci(e,t){let n=yield*nci(e,t);if(n)return n;let o=rWe(e);if(!o)return null;let{fixed:i,sourcePaths:r}=o,{inputSrj:s,preparedBuses:a,layerNames:c,traceWidth:l,clearance:d}=e,u=a.filter((p)=>p.termination.type==="boundary"&&p.connections.length>1&&p.maxLengthSkew!==void 0&&(!e.busIds||e.busIds.includes(p.busId))),h=new Map;for(let p of u){let g=e.plans.filter((y)=>y.busId===p.busId);if(g.length!==p.connections.length||!p.exitEdge)return null;let _=g[0].targetLayer;if(g.some((y)=>y.targetLayer!==_||y.planeEndpointTrace||y.planeEndpointSegments||y.planeEndpointVia))return null;let f=`${_}:${p.exitEdge}`;h.set(f,[...h.get(f)??[],p])}let A=[...e.plans];for(let p of h.values()){let g=new Set(p.map((H)=>H.busId)),_=A.filter((H)=>g.has(H.busId));if(p.every((H)=>Lx(_.filter((z)=>z.busId===H.busId))<=H.maxLengthSkew+jm))continue;if(p.length<2)return null;let f=_[0].targetLayer,y=c.filter((H)=>p.every((z)=>(z.routableEscapeLayers??z.allowedLayers??c).includes(H)&&(z.allowedLayers??c).includes(H)));if(!y.includes(f))return null;let x=y.filter((H)=>H!==f);if(!x.length)return null;let C=p[0].sharedBoundary,I=Math.min(12*(l+d),(p[0].exitEdge==="left"||p[0].exitEdge==="right"?C.maxX-C.minX:C.maxY-C.minY)/3),b=_.map((H)=>iWe(H,p.find((z)=>z.busId===H.busId),I));if(b.some((H)=>!H))return null;let P=b,E=A.filter((H)=>!g.has(H.busId)),B=zx({...e,srj:s,allBuses:a,buses:p,targetLayer:f,transitLayers:x,terminals:p.flatMap((H)=>H.connections.map((z)=>({connection:z,viaPoint:i.get(z.connectionIndex),exitPoint:P.find((Y)=>Y.connectionIndex===z.connectionIndex).sourcePoint}))),fixedViaPointsByConnectionIndex:i,sourceEscapePaths:r,acceptedPlans:[...E,...P],tightViaChannels:!0,includeDiagonalNeighbors:!0,heuristicWeight:1,ripCost:8,shuffleSeed:1,maximumIterations:e.maximumIterationsPerAttempt??1e7,maximumRipEvents:200,maximumLocalRepairAttempts:0}),w=B.next();while(!w.done)yield{...w.value,busId:p[0].busId,phase:"layer"},w=B.next();if(!w.value||w.value.length!==_.length)return null;let T=w.value,Q=A.map((H)=>{let z=T.find((V)=>V.connectionIndex===H.connectionIndex);if(!z)return H;let Y=fF(H,z);if(!Y)throw Error("Joint retained-tail routing lost its source via");let U=P.find((V)=>V.connectionIndex===H.connectionIndex),X=[...Y.trace.route,...U.trace.route.slice(1)];return X[X.length-1]=H.trace.route.at(-1),{...Y,trace:{...H.trace,route:X},segments:[...Y.segments,...U.segments],length:Y.length+U.length}});for(let H of _){let z=Q.find((U)=>U.connectionIndex===H.connectionIndex),Y=zie(e,z,Q.filter((U)=>U!==z),p.find((U)=>U.busId===H.busId),!0);if(!Y)return null;Q=Q.map((U)=>U===z?Y:U)}if(!Kh({plans:Q,srj:s,sharedBoundary:C,clearance:d,allowBlindAndBuriedVias:!1,allowSameNetMerges:!1}))return null;Q=FW({...e,plans:Q,preparedBuses:p,selectedBusIds:g,allowBlindAndBuriedVias:!1})??Q;let N=E1({...e,plans:Q,preparedBuses:p,sharedBoundary:C,allowBlindAndBuriedVias:!1,allowSameNetMerges:!1,allowMatchingInsideDenseBounds:!0,allowPairLaneSpreading:!0,allowUnconstrainedLaneRerouting:!0,maximumWorkUnits:1000});if(!N.plans)return null;let F=N.plans;if(Q=A.map((H)=>{if(!g.has(H.busId))return H;let z=F.find((U)=>U.connectionIndex===H.connectionIndex),Y=fF(H,z);if(!Y)throw Error("Joint retained-tail tuning lost its source via");return Y}),p.some((H)=>Lx(Q.filter((z)=>z.busId===H.busId))>H.maxLengthSkew+jm))return null;A=Q}if(u.some((p)=>Lx(A.filter((g)=>g.busId===p.busId))>p.maxLengthSkew+jm))return null;return qd({inputSrj:s,routedSrj:{...s,traces:[...s.traces??[],...A.flatMap((p)=>[p.trace,...p.planeEndpointTrace?[p.planeEndpointTrace]:[]])]},clearance:d,allowBlindAndBuriedVias:!1}).valid?A:null}function*ici(e){let t=[],n=yield*oci(e,t);if(n)return n;if(!t.length)return null;let o=[...e.plans],i=!1;for(let{busId:s,plan:a}of t){let c=e.preparedBuses.find((p)=>p.busId===s),l=o.find((p)=>p.connectionIndex===a.connectionIndex),d=zie(e,a,o.filter((p)=>p!==l),c,!0);if(!d)continue;let u=o.map((p)=>p===l?d:p),h=E1({...e,plans:u,preparedBuses:[c],sharedBoundary:c.sharedBoundary,allowBlindAndBuriedVias:!1,allowSameNetMerges:!1,allowMatchingInsideDenseBounds:!0,allowPairLaneSpreading:!0,allowUnconstrainedLaneRerouting:!0,maximumWorkUnits:1000});if(!h.plans)continue;let A=o.map((p)=>{if(p.busId!==s)return p;let g=h.plans.find((_)=>_.connectionIndex===p.connectionIndex);return fF(p,g)});if(A.some((p)=>!p))continue;let m=A;if(Lx(m.filter((p)=>p.busId===s))>c.maxLengthSkew+jm||!Kh({plans:m,srj:e.inputSrj,sharedBoundary:c.sharedBoundary,clearance:e.clearance,allowBlindAndBuriedVias:!1,allowSameNetMerges:!1}))continue;o=m,i=!0}if(!i)return null;if(e.preparedBuses.some((s)=>(!e.busIds||e.busIds.includes(s.busId))&&s.maxLengthSkew!==void 0&&Lx(o.filter((a)=>a.busId===s.busId))>s.maxLengthSkew+jm))return null;return qd({inputSrj:e.inputSrj,routedSrj:{...e.inputSrj,traces:[...e.inputSrj.traces??[],...o.flatMap((s)=>[s.trace,...s.planeEndpointTrace?[s.planeEndpointTrace]:[]])]},clearance:e.clearance,allowBlindAndBuriedVias:!1}).valid?o:null}function*rci(e){let t=rWe(e);if(!t)return null;let{inputSrj:n,preparedBuses:o,layerNames:i}=e,r=e.maximumIterationsPerAttempt??5000000;if(!Number.isSafeInteger(r)||r<1)throw Error("maximumIterationsPerAttempt must be a positive safe integer");let s=Math.min(r,5000000),a=o.filter((u)=>u.termination.type==="boundary"&&u.connections.length>2&&u.maxLengthSkew!==void 0&&(!e.busIds||e.busIds.includes(u.busId))),c=[...e.plans],l=!1;for(let u of a){let h=c.filter((T)=>T.busId===u.busId);if(h.length!==u.connections.length)return null;if(Lx(h)<=u.maxLengthSkew+jm)continue;let A=Math.min(...h.map((T)=>T.length)),m=h.filter((T)=>T.length>A+u.maxLengthSkew+jm).toSorted((T,Q)=>Q.length-T.length||T.connectionIndex-Q.connectionIndex).slice(0,2);if(m.length!==2)return null;let p=h[0].targetLayer;if(!u.exitEdge||h.some((T)=>T.targetLayer!==p||T.planeEndpointTrace||T.planeEndpointSegments||T.planeEndpointVia))return null;let g=(u.routableEscapeLayers??u.allowedLayers??i).filter((T)=>(u.allowedLayers??i).includes(T)),_=g.filter((T)=>T!==p);if(!g.includes(p)||!_.length)return null;let f=new Set(m.map((T)=>T.connectionIndex)),y=u.connections.filter((T)=>f.has(T.connectionIndex)),x=zx({...e,srj:n,allBuses:o,buses:[{...u,connections:y}],targetLayer:p,transitLayers:_,terminals:y.map((T)=>({connection:T,viaPoint:t.fixed.get(T.connectionIndex),exitPoint:h.find((Q)=>Q.connectionIndex===T.connectionIndex).exitPoint})),fixedViaPointsByConnectionIndex:t.fixed,sourceEscapePaths:t.sourcePaths,acceptedPlans:c.filter((T)=>!f.has(T.connectionIndex)),tightViaChannels:!0,includeDiagonalNeighbors:!0,ripCost:64,shuffleSeed:1,maximumIterations:s,maximumRipEvents:80,maximumLocalRepairAttempts:0}),C=x.next();while(!C.done)yield{...C.value,busId:u.busId,phase:"overlong-pair"},C=x.next();if(!C.value||C.value.length!==2)return null;let I=new Map(C.value.map((T)=>[T.connectionIndex,T])),b=c.map((T)=>{let Q=I.get(T.connectionIndex);return Q?fF(T,Q):T});if(b.some((T)=>!T))return null;let P=E1({...e,plans:b,preparedBuses:[u],sharedBoundary:u.sharedBoundary,allowBlindAndBuriedVias:!1,allowSameNetMerges:!1,allowMatchingInsideDenseBounds:!0,allowPairLaneSpreading:!0,allowUnconstrainedLaneRerouting:!0,maximumWorkUnits:1000});if(!P.plans)return null;let E=new Map(P.plans.map((T)=>[T.connectionIndex,T])),B=c.map((T)=>T.busId===u.busId?fF(T,E.get(T.connectionIndex)):T);if(B.some((T)=>!T))return null;let w=B;if(Lx(w.filter((T)=>T.busId===u.busId))>u.maxLengthSkew+jm||!Kh({plans:w,srj:n,sharedBoundary:u.sharedBoundary,clearance:e.clearance,allowBlindAndBuriedVias:!1,allowSameNetMerges:!1}))return null;c=w,l=!0}if(!l||o.some((u)=>(!e.busIds||e.busIds.includes(u.busId))&&u.maxLengthSkew!==void 0&&Lx(c.filter((h)=>h.busId===u.busId))>u.maxLengthSkew+jm))return null;return qd({inputSrj:n,routedSrj:{...n,traces:[...n.traces??[],...c.flatMap((u)=>[u.trace,...u.planeEndpointTrace?[u.planeEndpointTrace]:[]])]},clearance:e.clearance,allowBlindAndBuriedVias:!1}).valid?c:null}function*sci(e){let t=yield*ici(e);if(t)return t;return yield*rci(e)}function j2e(e,t,n){return e.buses.flatMap((o)=>o.connections.map((i)=>{let r=t.get(i.connectionIndex),s=o.termination.type==="plane"?o.termination.layer:(o.allowedLayers??e.layerNames).filter((a)=>a!==i.sourceLayer).at(-1);return cb({...e,bus:o,terminal:{connection:i,viaPoint:r,exitPoint:r},targetLayer:s,targetLayerPoints:[r],sourceEscapePoints:n.get(i.connectionIndex),allowBlindAndBuriedVias:!1})}))}function aci(e){if(!e.buses.length||e.buses.some((i)=>i.connections.some((r)=>r.sourceLayer!=="top")))return null;let t=qu(e.buses,{...e,maximumSearchStates:1e4,additionalObstacles:e.srj.obstacles});if(!t)return null;let n=new Map(e.buses.flatMap((i)=>i.connections.map((r)=>[r.connectionIndex,[r.sourcePoint,t.get(r.connectionIndex)]]))),o=j2e(e,t,n);if(!qd({inputSrj:e.srj,routedSrj:{...e.srj,traces:[...e.srj.traces??[],...o.map((i)=>i.trace)]},clearance:e.clearance,allowBlindAndBuriedVias:!1}).valid)return null;return{fixedViaPointsByConnectionIndex:t,sourceEscapePaths:n,sourcePlans:o}}function*cci(e){let t=zx({...e,transitLayers:[],routeFromSourcePads:!0,sourceLayerTravelCost:e.sourceLayerTravelCost??2,maximumRipEvents:1200,maximumIterations:e.maximumSourceIterations??50000000,maximumLocalRepairAttempts:0,shuffleSeed:1}),n=t.next();while(!n.done)yield n.value,n=t.next();if(!n.value)return null;let o=n.value,i=new Map(e.fixedViaPointsByConnectionIndex),r=new Map(e.allBuses.flatMap((l)=>l.connections.map((d)=>[d.connectionIndex,e.sourceEscapePaths?.get(d.connectionIndex)??[d.sourcePoint,i.get(d.connectionIndex)]]))),s=new Map(e.buses.flatMap((l)=>l.connections.map((d)=>[d.connectionIndex,{bus:l,connection:d}]))),a=(l)=>{if(!l.via)throw Error("Source-origin routing lost a required first via");i.set(l.connectionIndex,l.via.center);let d=l.segments.slice(0,l.sourceEscapeSegmentCount??1);r.set(l.connectionIndex,[l.sourcePoint,...d.map((u)=>u.end)])};o.forEach(a);let c=(l)=>{let d=s.get(l.connectionIndex).bus;if(d.connections.length<=2||d.maxLengthSkew===void 0)return!1;let u=Math.min(...o.filter((h)=>h.busId===l.busId).map((h)=>h.length));return l.length>u+d.maxLengthSkew+0.0000001};for(let l=0;l<2;l++){let d=o.filter(c).toSorted((h,A)=>A.length-h.length).slice(0,8),u=!1;for(let h of d){let A=o.find((b)=>b.connectionIndex===h.connectionIndex);if(!c(A))continue;let{bus:m,connection:p}=s.get(A.connectionIndex),g=e.cleanupRetainedBoundaryTails?iWe(A,m,(l===0?12:6)*(e.traceWidth+e.clearance)):null;if(e.cleanupRetainedBoundaryTails&&!g)continue;let _=zx({...e,buses:[{...m,connections:[p]}],transitLayers:[],routeFromSourcePads:!0,sourceLayerTravelCost:1,includeDiagonalNeighbors:e.cleanupRetainedBoundaryTails||e.includeDiagonalNeighbors,fixedViaPointsByConnectionIndex:i,sourceEscapePaths:r,acceptedPlans:[...e.acceptedPlans,...o.filter((b)=>b!==A),...g?[g]:[]],terminals:[{connection:p,viaPoint:i.get(p.connectionIndex),exitPoint:g?.sourcePoint??A.exitPoint}],maximumRipEvents:1,maximumIterations:2000000,maximumLocalRepairAttempts:0,shuffleSeed:1}),f=_.next();while(!f.done)yield{...f.value,connectionCount:o.length},f=_.next();let y=f.value?.[0];if(y&&g){let b={...y,exitPoint:A.exitPoint,segments:[...y.segments,...g.segments],length:y.length+g.length,trace:{...y.trace,route:[...y.trace.route,...g.trace.route.slice(1)]}};y=zie({...e,inputSrj:e.srj},b,[...e.acceptedPlans,...o.filter((P)=>P!==A),...j2e({...e,buses:e.allBuses.filter((P)=>!e.buses.some((E)=>E.busId===P.busId))},i,r)],m,!0)??void 0}if(!y||y.length>=A.length-0.0000001)continue;let x=o.filter((b)=>b.busId===A.busId),C=x.map((b)=>b.length),I=x.map((b)=>b===A?y.length:b.length);if(Math.max(...I)-Math.min(...I)>Math.max(...C)-Math.min(...C)+0.0000001)continue;if(g&&!qd({inputSrj:e.srj,routedSrj:{...e.srj,traces:[...e.srj.traces??[],...e.acceptedPlans.flatMap((b)=>[b.trace,...b.planeEndpointTrace?[b.planeEndpointTrace]:[]]),...o.map((b)=>(b===A?y:b).trace),...j2e({...e,buses:e.allBuses.filter((b)=>!e.buses.some((P)=>P.busId===b.busId)&&!e.acceptedPlans.some((P)=>P.busId===b.busId))},i,r).map((b)=>b.trace)]},clearance:e.clearance,allowBlindAndBuriedVias:!1}).valid)continue;o=o.map((b)=>b===A?y:b),a(y),u=!0}if(!u)break}return{plans:o,fixedViaPointsByConnectionIndex:i,sourceEscapePaths:r,sourcePlans:j2e({...e,buses:e.allBuses},i,r)}}function sWe(e){let t=e.filter((n)=>n.termination.type==="boundary"&&n.connections.length>=8&&n.allowedLayers?.length===1&&n.allowedLayers[0]!=="top");if(t.some((n)=>n.connections.length>=16))return!1;return t.some((n,o)=>t.slice(o+1).some((i)=>i.componentId===n.componentId&&i.exitEdge===n.exitEdge&&i.allowedLayers[0]===n.allowedLayers[0]))}function ECe(e){return e.some((t)=>{if(t.termination.type!=="boundary"||t.connections.length<8||t.allowedLayers?.length!==1||t.allowedLayers[0]==="top")return!1;let n=t.exitEdge==="left"||t.exitEdge==="right"?"x":"y",o=t.exitEdge==="left"||t.exitEdge==="bottom"?-1:1,i=n==="x"?(t.componentBounds.minX+t.componentBounds.maxX)/2:(t.componentBounds.minY+t.componentBounds.maxY)/2;return t.connections.every((r)=>o*(r.sourcePoint[n]-i)<-0.0000001)})}function lci(e,t){let n=e[0];if(!n||t||e.some((c)=>c.componentId!==n.componentId||c.connections.some((l)=>l.sourceLayer!=="top")))return!1;let o=e.filter((c)=>c.termination.type==="boundary"),i=o.filter((c)=>c.connections.length>=8),r=i[0]?.exitEdge;if(!r||i.some((c)=>c.exitEdge!==r)||!(i.some((c)=>c.connections.length>=16&&c.allowedLayers?.length===1&&c.allowedLayers[0]!=="top")||sWe(i)))return!1;let s=o.reduce((c,l)=>c+l.connections.length,0);if(e.filter((c)=>c.termination.type==="plane").reduce((c,l)=>c+l.connections.length,0)<s)return!1;return!0}var xW=0.0000001,dci={left:"right",right:"left",up:"down",down:"up"};function qYe(e){let t=e;if(t.shape==="circle"||e.type!=="rect")return null;let n=(t.ccwRotationDegrees??0)/90;if(Math.abs(n-Math.round(n))>xW)return null;return Math.abs(Math.round(n))%2===0?{x:e.width,y:e.height}:{x:e.height,y:e.width}}function FJt(e,t){let n=qYe(t);if(!n||Math.abs(n.x-n.y)<xW)return null;let{center:o}=t;if(n.x>n.y){if(Math.abs(o.x-n.x/2-e.minX)<xW)return"left";if(Math.abs(o.x+n.x/2-e.maxX)<xW)return"right"}else{if(Math.abs(o.y-n.y/2-e.minY)<xW)return"down";if(Math.abs(o.y+n.y/2-e.maxY)<xW)return"up"}return null}function aWe(e){let t=e.buses[0];if(!t||e.allowBlindAndBuriedVias||e.buses.some((a)=>a.componentId!==t.componentId||a.connections.some((c)=>c.sourceLayer!=="top")))return null;let n={minX:1/0,maxX:-1/0,minY:1/0,maxY:-1/0};for(let a of t.componentObstacles){let c=qYe(a);if(!c)return null;n.minX=Math.min(n.minX,a.center.x-c.x/2),n.maxX=Math.max(n.maxX,a.center.x+c.x/2),n.minY=Math.min(n.minY,a.center.y-c.y/2),n.maxY=Math.max(n.maxY,a.center.y+c.y/2)}let o=new Set;for(let a of e.buses){if(a.termination.type!=="boundary")continue;for(let c of a.connections){let l=FJt(n,c.sourceObstacle);if(!l)return null;o.add(l)}}if(o.size!==4)return null;let i=new Map,r=new Map,s=[];for(let a of e.buses){let c=a.termination.type==="plane"?a.termination.layer:(a.routableEscapeLayers??a.allowedLayers??e.layerNames).filter((l)=>l!=="top").at(-1);if(!c||!e.layerNames.includes(c))return null;for(let l of a.connections){let d=l.sourceObstacle,u=qYe(d);if(!u)return null;let h=FJt(n,d);if(!h){if(a.termination.type!=="plane")return null;h=a.direction}else if((e.side??"inward")==="inward")h=dci[h];let A=l.sourcePoint,m=e.viaDiameter/2+e.clearance+0.001,p=h==="left"?{x:d.center.x-u.x/2-m,y:A.y}:h==="right"?{x:d.center.x+u.x/2+m,y:A.y}:h==="up"?{x:A.x,y:d.center.y+u.y/2+m}:{x:A.x,y:d.center.y-u.y/2-m},g=a.sharedBoundary,_=e.viaDiameter/2;if(p.x-_<g.minX||p.x+_>g.maxX||p.y-_<g.minY||p.y+_>g.maxY)return null;if(i.has(l.connectionIndex))throw Error("FanoutSolver: duplicate peripheral source connection");i.set(l.connectionIndex,p),r.set(l.connectionIndex,[A,p]),s.push(cb({...e,bus:a,terminal:{connection:l,viaPoint:p,exitPoint:p},targetLayer:c,targetLayerPoints:[p],sourceEscapePoints:[A,p],allowBlindAndBuriedVias:!1}))}}if(!Kh({...e,plans:s,sharedBoundary:t.sharedBoundary,allowBlindAndBuriedVias:!1})||!qd({inputSrj:e.srj,routedSrj:{...e.srj,traces:[...e.srj.traces??[],...s.map((a)=>a.trace)]},clearance:e.clearance,allowBlindAndBuriedVias:!1}).valid)return null;return{fixedViaPointsByConnectionIndex:i,sourceEscapePaths:r,sourcePlans:s}}function vrn(e){let t=new Map;for(let o of e){let i=Mr(o.exitEdge,o.preferredExit);if(o.termination.type!=="boundary"||!o.exitEdge||!i)continue;let r=`${o.exitEdge}:${i}`,s=t.get(r)??[];s.push(o),t.set(r,s)}let n=new Map;for(let o of t.values()){let i=o[0].exitEdge==="left"||o[0].exitEdge==="right"?"y":"x",r=o.map((c,l)=>({bus:c,index:l,min:Math.min(...c.connections.map((d)=>d.sourcePoint[i])),max:Math.max(...c.connections.map((d)=>d.sourcePoint[i]))})).sort((c,l)=>c.min-l.min||c.index-l.index),s=[];for(let c of r){let l=s.at(-1);if(!l||c.min>l.max+0.000000001)s.push({max:c.max,members:[c]});else l.max=Math.max(l.max,c.max),l.members.push(c)}let a=0;for(let c of s)for(let{bus:l}of c.members.sort((d,u)=>d.index-u.index))n.set(l.busId,a),a+=l.connections.length}return n}function JYe(e){let{buses:t,targetLayerByBusId:n,traceWidth:o,clearance:i}=e,r=o+i;if(!(o>0)||!(e.viaDiameter>0)||i<0||![o,e.viaDiameter,i].every(Number.isFinite))throw Error("FanoutSolver: invalid boundary packing dimensions");let s=vrn(t),a=[],c=new Map;for(let l of t){if(l.termination.type!=="boundary")continue;if(l.connections.length===0)throw Error(`FanoutSolver: bus ${l.busId} has no connections`);if(!l.exitEdge)throw Error(`FanoutSolver: bus ${l.busId} has no boundary edge`);let d=n.get(l.busId);if(!d||!e.layerNames.includes(d)||!(l.routableEscapeLayers??l.allowedLayers??e.layerNames).includes(d))throw Error(`FanoutSolver: bus ${l.busId} has no legal assigned layer`);let u=x3(l.exitEdge),h=Mr(l.exitEdge,l.preferredExit),A=l.connections.map((y)=>h?HS({...e,bus:l,connection:y,targetLayer:d,cornerExitLaneOffset:s.get(l.busId)??0,windingOrderIndex:0}):lF({...e,bus:l,connection:y,targetLayer:d,boundaryDirection:u,windingOrderIndex:0})),m=A.toSorted((y,x)=>y-x);if(m.some((y,x)=>!Number.isFinite(y)||x>0&&y-m[x-1]<r-0.00000001))throw Error(`FanoutSolver: bus ${l.busId} already contains overlapping desired lanes`);let p=l.exitEdge==="left"||l.exitEdge==="right",g={busId:l.busId,layer:d,edge:l.exitEdge,minimum:p?l.sharedBoundary.minY:l.sharedBoundary.minX,maximum:p?l.sharedBoundary.maxY:l.sharedBoundary.maxX,connectionIndices:l.connections.map((y)=>y.connectionIndex),desiredTracks:A,tracks:[...A],desiredStart:m[0],desiredEnd:m.at(-1),start:m[0],end:m.at(-1),shift:0};if(![g.minimum,g.maximum].every(Number.isFinite)||g.maximum<g.minimum)throw Error(`FanoutSolver: invalid boundary for ${l.busId}`);a.push(g);let _=`${d}:${l.exitEdge}`,f=c.get(_)??[];f.push(g),c.set(_,f)}for(let l of c.values()){let d=(f)=>Number(((f.desiredStart+f.desiredEnd)/2).toFixed(9)),u=l.toSorted((f,y)=>d(f)-d(y)),h=Math.max(...u.map((f)=>f.minimum)),A=Math.min(...u.map((f)=>f.maximum));if(u.every((f,y)=>f.desiredStart>=h&&f.desiredEnd<=A&&(y===0||f.desiredStart-u[y-1].desiredEnd>=r-0.00000001)))continue;let m=[],p=0;for(let[f,y]of u.entries())m.push(p),p+=y.desiredEnd-y.desiredStart+(f<u.length-1?r:0);if(p>A-h+0.00000001)throw Error(`FanoutSolver: bus intervals do not fit ${u[0].layer}/${u[0].edge}`);let g=[];for(let[f,y]of u.entries()){g.push({first:f,last:f,weight:y.connectionIndices.length,mean:y.desiredStart-m[f]});while(g.length>1&&g.at(-2).mean>g.at(-1).mean){let x=g.pop(),C=g.pop(),I=C.weight+x.weight;g.push({first:C.first,last:x.last,weight:I,mean:(C.mean*C.weight+x.mean*x.weight)/I})}}let _=A-p;for(let f of g){let y=Math.max(h,Math.min(_,f.mean));for(let x=f.first;x<=f.last;x++){let C=u[x];C.start=y+m[x],C.shift=C.start-C.desiredStart,C.end=C.desiredEnd+C.shift,C.tracks=C.desiredTracks.map((I)=>I+C.shift)}}}return{tracksByConnectionIndex:new Map(a.flatMap((l)=>l.connectionIndices.map((d,u)=>[d,l.tracks[u]]))),intervals:a}}function uci(e){if(e.exitTargetPoint)return e.exitTargetPoint.layer??"top";let t=e.targetPoint;return"layer"in t?t.layer??"top":t.layers[0]??"top"}function Ern(e){let t=e.exitEdge==="left"||e.exitEdge==="right"?"y":"x",n=new Map;for(let o of e.connections){let i=uci(o);n.set(i,[...n.get(i)??[],o])}return[...n.values()].map((o)=>o.toSorted((i,r)=>{let s=(i.exitTargetPoint??i.targetPoint)[t]-(r.exitTargetPoint??r.targetPoint)[t];if(s!==0)return s;let a=(c)=>("source_trace_id"in c.connection)&&typeof c.connection.source_trace_id==="string"?c.connection.source_trace_id:c.connection.name;return a(i).localeCompare(a(r))||i.connection.name.localeCompare(r.connection.name)||i.connectionIndex-r.connectionIndex}))}function hci(e,t){let n=e.exitEdge==="left"||e.exitEdge==="right"?"y":"x";return Ern(e).every((o)=>o.every((i,r)=>{let s=t.get(i.connectionIndex);if(!s||!Number.isFinite(s.x)||!Number.isFinite(s.y))return!1;return r===0||s[n]>t.get(o[r-1].connectionIndex)[n]}))}function cWe(e){let t=e.maximumSearchStates??4096;if(!Number.isSafeInteger(t)||t<1)throw Error("FanoutSolver: invalid boundary merge work bound");let n=new Map(e.exits);for(let o of e.buses){if(o.termination.type!=="boundary"||!o.exitEdge||o.connections.length<3)continue;if(o.connections.some((p)=>!p.hasExplicitLayeredExitTarget))continue;let i=Ern(o);if(i.length<2)continue;if(i.reduce((p,g)=>p*(g.length+1),1)>t)continue;let s=o.exitEdge==="left"||o.exitEdge==="right"?"y":"x",a=s==="x"?"y":"x",c=o.exitEdge==="left"||o.exitEdge==="bottom"?-1:1,l={x:(o.componentBounds.minX+o.componentBounds.maxX)/2,y:(o.componentBounds.minY+o.componentBounds.maxY)/2},d=new Map(o.connections.map((p)=>[p.connectionIndex,Math.atan2(p.sourcePoint[s]-l[s],c*(p.sourcePoint[a]-l[a]))])),u=o.connections.map((p)=>{let g=n.get(p.connectionIndex);if(!g||!Number.isFinite(g.x)||!Number.isFinite(g.y))throw Error("FanoutSolver: missing packed boundary target");return g[s]}).sort((p,g)=>p-g);if(u.some((p,g)=>g>0&&p<=u[g-1]))throw Error("FanoutSolver: duplicate packed boundary tracks");let h=new Map,A=(p)=>{let g=p.join(","),_=h.get(g);if(_)return _;let f=p.reduce((x,C)=>x+C,0);if(f===u.length)return{inversions:0,length:0,order:[]};let y;for(let[x,C]of i.entries()){let I=C[p[x]];if(!I)continue;let b=i.reduce((T,Q,N)=>T+Q.slice(0,p[N]).filter((F)=>d.get(F.connectionIndex)>d.get(I.connectionIndex)+0.000000001).length,0),P=[...p];P[x]++;let E=A(P),B={...n.get(I.connectionIndex),[s]:u[f]},w={inversions:b+E.inversions,length:Math.hypot(I.sourcePoint.x-B.x,I.sourcePoint.y-B.y)+E.length,order:[I,...E.order]};if(!y||w.inversions<y.inversions||w.inversions===y.inversions&&w.length<y.length)y=w}if(!y)throw Error("FanoutSolver: incomplete boundary merge state");return h.set(g,y),y},m=new Map(n);for(let[p,g]of A(i.map(()=>0)).order.entries())m.set(g.connectionIndex,{...n.get(g.connectionIndex),[s]:u[p]});if(!hci(o,m))throw Error("FanoutSolver: boundary merge changed a layer's lane order");for(let p of o.connections)n.set(p.connectionIndex,m.get(p.connectionIndex))}return n}var oGe=(e,t)=>{let n=e.sharedBoundary;switch(e.exitEdge){case"left":return{x:n.minX,y:t};case"right":return{x:n.maxX,y:t};case"top":return{x:t,y:n.maxY};case"bottom":return{x:t,y:n.minY};default:throw Error(`FanoutSolver: bus ${e.busId} has no boundary edge`)}};function mci(e,t,n,o){let i=(r,s,a)=>(s.x-r.x)*(a.y-r.y)-(s.y-r.y)*(a.x-r.x);return i(e,t,n)*i(e,t,o)<-0.000000000001&&i(n,o,e)*i(n,o,t)<-0.000000000001}function pci(e){let{buses:t,layerNames:n,traceWidth:o,clearance:i}=e,r=o+i,s=new Map,a=[];for(let u of t){if(u.termination.type==="plane"){s.set(u.busId,u.termination.layer);continue}let h=new Set(u.connections.map((_)=>_.sourceLayer)),A=(u.routableEscapeLayers??u.allowedLayers??n).filter((_)=>e.allowSourceLayerTargets||!h.has(_));if(!A.length)return null;let m=A.map((_)=>JYe({...e,buses:[u],targetLayerByBusId:new Map([[u.busId,_]])}).intervals[0]),p=u.connections.length,g=u.connections.reduce((_,f)=>({x:_.x+f.sourcePoint.x/p,y:_.y+f.sourcePoint.y/p}),{x:0,y:0});a.push({bus:u,source:g,intervals:m})}a.sort((u,h)=>u.intervals.length-h.intervals.length||Math.max(...h.intervals.map((A)=>A.end-A.start))-Math.max(...u.intervals.map((A)=>A.end-A.start))||h.bus.connections.length-u.bus.connections.length);let c=[];for(let{bus:u,source:h,intervals:A}of a){let m;for(let p of A){let g=c.filter((B)=>B.interval.layer===p.layer),_=g.filter((B)=>B.interval.edge===p.edge),f=Math.max(p.minimum,..._.map((B)=>B.interval.minimum)),y=Math.min(p.maximum,..._.map((B)=>B.interval.maximum)),x=p.end-p.start+_.reduce((B,w)=>B+w.interval.end-w.interval.start+r,0);if(x>y-f+0.00000001)continue;let C=oGe(u,(p.start+p.end)/2),I=g.reduce((B,w)=>B+(mci(h,C,w.source,w.target)?Math.min(u.connections.length,w.bus.connections.length):0),0),b=_.reduce((B,w)=>B+w.bus.connections.length,0),P=g.reduce((B,w)=>B+w.bus.connections.length,0),E=I*4+b+P/4+10*x/Math.max(r,y-f);if(!m||E<m.score||E===m.score&&n.indexOf(p.layer)>n.indexOf(m.interval.layer))m={interval:p,score:E}}if(!m)return null;s.set(u.busId,m.interval.layer),c.push({bus:u,source:h,interval:m.interval,target:oGe(u,(m.interval.start+m.interval.end)/2)})}let l=JYe({...e,targetLayerByBusId:s}),d=new Map;for(let{bus:u}of a)for(let h of u.connections)d.set(h.connectionIndex,oGe(u,l.tracksByConnectionIndex.get(h.connectionIndex)));return{targetLayerByBusId:s,exits:cWe({buses:t,exits:d})}}function*Aci(e){let{plans:t,bus:n,preparedBuses:o,inputSrj:i,layerNames:r}=e;if(n.termination.type!=="boundary"||n.connections.length!==2||n.maxLengthSkew===void 0||n.connections.some((_)=>_.sourceLayer!=="top"))return null;let s=o.flatMap((_)=>_.connections),a=new Map(t.map((_)=>[_.connectionIndex,_]));if(s.length!==i.connections.length||a.size!==s.length||t.length!==a.size||s.some((_)=>a.get(_.connectionIndex)?.connectionName!==_.connection.name))throw Error("FanoutSolver: transit pair repair requires every original plan");let c=n.connections.map((_)=>a.get(_.connectionIndex)),l=c[0].targetLayer;if(c.some((_)=>_.targetLayer!==l)||Math.abs(c[0].length-c[1].length)<=n.maxLengthSkew+0.000001)return null;let d=(n.routableEscapeLayers??n.allowedLayers??r).filter((_)=>_!=="top"&&_!==l);if(!d.length)return null;let u=new Map,h=new Map;for(let _ of s){let f=a.get(_.connectionIndex);if(!f.via)return null;let y=f.segments.slice(0,f.sourceEscapeSegmentCount??1);if(!y.length||y.some((x)=>x.layer!==_.sourceLayer)||kt(y[0].start,_.sourcePoint)>0.000001||kt(y.at(-1).end,f.via.center)>0.000001||y.some((x,C)=>C>0&&kt(y[C-1].end,x.start)>0.000001))return null;u.set(_.connectionIndex,f.via.center),h.set(_.connectionIndex,[_.sourcePoint,...y.map((x)=>x.end)])}let A=new Set(n.connections.map((_)=>_.connectionIndex)),m=(n.routableEscapeLayers??n.allowedLayers??r).filter((_)=>_!=="top"),p=5000000,g;for(let _ of[void 0,...m]){if(p<=0)break;let f=new Map(u),y=new Map(h);if(_!==void 0){if(g??=aWe({...e,srj:i,buses:o,side:"inward"}),!g)break;for(let T of A)f.set(T,g.fixedViaPointsByConnectionIndex.get(T)),y.set(T,g.sourceEscapePaths.get(T))}let x=zx({...e,srj:i,allBuses:o,buses:[n],targetLayer:l,startLayerByBusId:_===void 0?void 0:new Map([[n.busId,_]]),transitLayers:d,terminals:n.connections.map((T)=>({connection:T,viaPoint:f.get(T.connectionIndex),exitPoint:a.get(T.connectionIndex).exitPoint})),fixedViaPointsByConnectionIndex:f,sourceEscapePaths:y,acceptedPlans:t.filter((T)=>!A.has(T.connectionIndex)),routeFromSourcePads:_===void 0,sourceLayerTravelCost:1,sourceOriginPhysicalGridPhase:!0,tightViaChannels:!0,includeDiagonalNeighbors:!0,traceMarginExtra:0,maximumIterations:Math.min(p,_===void 0?5000000:2000000),maximumRipEvents:80,maximumLocalRepairAttempts:0,ripCost:256,shuffleSeed:1}),C=x.next(),I=0;while(!C.done)I=C.value.iterations,yield C.value,C=x.next();p-=I;let b=C.value;if(!b||b.length!==2)continue;let P=new Map(b.map((T)=>[T.connectionIndex,T])),E=t.map((T)=>P.get(T.connectionIndex)??T),B=E1({...e,plans:E,preparedBuses:[n],sharedBoundary:n.sharedBoundary,maximumWorkUnits:1e5,allowSourcePrefixMatching:!0,allowDistributedMatching:!0,allowTransitLayerMatching:!0,allowMatchingInsideDenseBounds:!0});if(!B.plans||B.plans.some((T)=>!A.has(T.connectionIndex)&&T!==a.get(T.connectionIndex)))continue;let w=B.plans.filter((T)=>A.has(T.connectionIndex));if(w.length!==2||Math.abs(w[0].length-w[1].length)>n.maxLengthSkew+0.000001)continue;if(qd({inputSrj:i,routedSrj:{...i,traces:[...i.traces??[],...B.plans.flatMap((T)=>[T.trace,...T.planeEndpointTrace?[T.planeEndpointTrace]:[]])]},clearance:e.clearance,allowBlindAndBuriedVias:!1}).valid)return B.plans}return null}var RL=0.000001,iGe=(e)=>Math.max(...e.map((t)=>t.length))-Math.min(...e.map((t)=>t.length));function*Mrn(e){let{plans:t,bus:n,preparedBuses:o,inputSrj:i}=e,r=o.flatMap((m)=>m.connections),s=new Map(t.map((m)=>[m.connectionIndex,m]));if(r.length!==i.connections.length||s.size!==t.length||s.size!==r.length||r.some((m)=>s.get(m.connectionIndex)?.connectionName!==m.connection.name))throw Error("FanoutSolver: source-origin length repair requires every original plan");let a=n.connections.map((m)=>s.get(m.connectionIndex));if(n.termination.type!=="boundary"||n.maxLengthSkew===void 0||a.length<2||iGe(a)<=n.maxLengthSkew+RL)return null;let c=a[0].targetLayer;if(a.some((m)=>m.targetLayer!==c))return null;let l=Math.min(...a.map((m)=>m.length)),d=new Set((a.length===2?a:a.filter((m)=>m.length>l+n.maxLengthSkew+RL).toSorted((m,p)=>p.length-m.length||m.connectionIndex-p.connectionIndex).slice(0,2)).map((m)=>m.connectionIndex));if(!d.size)return null;let u=new Map,h=new Map;for(let m of r){let p=s.get(m.connectionIndex);if(!p.via)return null;let g=p.segments.slice(0,p.sourceEscapeSegmentCount??1);if(!g.length||g.some((_)=>_.layer!==m.sourceLayer)||kt(g[0].start,m.sourcePoint)>RL||kt(g.at(-1).end,p.via.center)>RL||g.some((_,f)=>f>0&&kt(g[f-1].end,_.start)>RL))return null;u.set(m.connectionIndex,p.via.center),h.set(m.connectionIndex,[m.sourcePoint,...g.map((_)=>_.end)])}let A=n.connections.filter((m)=>d.has(m.connectionIndex));for(let m of[!1,!0]){let p=yield*zx({...e,srj:i,allBuses:o,buses:[{...n,connections:A}],targetLayer:c,transitLayers:e.transitLayers??[],terminals:A.map((x)=>({connection:x,viaPoint:u.get(x.connectionIndex),exitPoint:s.get(x.connectionIndex).exitPoint})),fixedViaPointsByConnectionIndex:u,sourceEscapePaths:h,acceptedPlans:t.filter((x)=>!d.has(x.connectionIndex)),routeFromSourcePads:!0,includeDiagonalNeighbors:m,sourceLayerTravelCost:1,tightViaChannels:!0,ripCost:256,shuffleSeed:1,maximumRipEvents:40,maximumIterations:5000000,maximumLocalRepairAttempts:0});if(!p||p.length!==d.size)continue;let g=new Map(p.map((x)=>[x.connectionIndex,x])),_=t.map((x)=>g.get(x.connectionIndex)??x),f=a.map((x)=>g.get(x.connectionIndex)??x);if(iGe(f)>=iGe(a)-RL&&Math.max(...f.map((x)=>x.length))>=Math.max(...a.map((x)=>x.length))-RL)continue;if(qd({inputSrj:i,routedSrj:{...i,traces:[...i.traces??[],..._.flatMap((x)=>[x.trace,...x.planeEndpointTrace?[x.planeEndpointTrace]:[]])]},clearance:e.clearance,allowBlindAndBuriedVias:!1}).valid)return _}return null}function qoe(e){return typeof e==="object"&&e!==null&&"type"in e&&e.type==="subsolver"&&"solver"in e&&e.solver instanceof Zn}function*_ci(e){let{srj:t,buses:n,layerNames:o}=e;yield{phase:"sources",routedConnectionCount:0};let i=aWe(e);if(!i)return null;let r=n.filter((C)=>C.termination.type==="boundary");if(!r.length||r.some((C)=>!C.exitEdge))return null;let s=pci(e);if(!s)return null;let a=cWe({buses:n,exits:s.exits}),c=new Set(r.map((C)=>s.targetLayerByBusId.get(C.busId))),l=o.findLast((C)=>c.has(C)),d=o.filter((C)=>C!==l&&r.some((I)=>(I.routableEscapeLayers??I.allowedLayers??o).includes(C))),u=i.sourcePlans.filter((C)=>C.termination.type==="plane"),h=zx({...e,allBuses:n,buses:r,targetLayer:l,targetLayerByBusId:s.targetLayerByBusId,transitLayers:d,terminals:r.flatMap((C)=>C.connections.map((I)=>({connection:I,viaPoint:i.fixedViaPointsByConnectionIndex.get(I.connectionIndex),exitPoint:a.get(I.connectionIndex)}))),...i,acceptedPlans:u,routeFromSourcePads:!0,sourceLayerTravelCost:2,sourceOriginPhysicalGridPhase:!0,includeDiagonalNeighbors:!0,traceMarginExtra:0,maximumIterations:60000000,maximumRipEvents:1000,maximumLocalRepairAttempts:0,ripCost:64,shuffleSeed:1}),A=h.next();while(!A.done){if(qoe(A.value)){let C=yield A.value;A=h.next(C);continue}yield{phase:"route-layer",iterations:A.value.iterations,routedConnectionCount:u.length+A.value.routedConnectionCount},A=h.next()}if(!A.value)return null;let m=[...A.value,...u];yield{phase:"repair-lengths",routedConnectionCount:m.length};let p=FW({...e,inputSrj:t,plans:m,preparedBuses:n});if(!p)return null;m=p;for(let C of r){if(C.maxLengthSkew===void 0)continue;let I=Mrn({...e,inputSrj:t,plans:m,preparedBuses:n,bus:C}),b=I.next();while(!b.done)yield{phase:"repair-lengths",iterations:b.value.iterations,routedConnectionCount:m.length},b=I.next();if(b.value)m=b.value}yield{phase:"match-layer",routedConnectionCount:m.length};let g=m,_={...e,inputSrj:t,plans:m,preparedBuses:n,sharedBoundary:r[0].sharedBoundary,maximumWorkUnits:1000,allowSourcePrefixMatching:!0,candidatePlansAreFeasible:(C)=>(g=[...C],!0)},f=E1(_);if(!f.plans)f=E1({..._,maximumWorkUnits:1e5,allowDistributedMatching:!0,allowTransitLayerMatching:!0,allowMatchingInsideDenseBounds:!0});let y=new Set;while(!f.plans){let C=f.failedBus.busId,I=r.find((E)=>E.busId===C);if(!I||I.connections.length!==2||I.maxLengthSkew===void 0||y.has(I.busId))return null;y.add(I.busId);let b=Aci({...e,inputSrj:t,plans:g,preparedBuses:n,bus:I}),P=b.next();while(!P.done)yield{phase:"repair-lengths",iterations:P.value.iterations,routedConnectionCount:m.length},P=b.next();if(!P.value)return null;g=P.value,f=E1({..._,plans:g,maximumWorkUnits:1e5,allowDistributedMatching:!0,allowTransitLayerMatching:!0,allowMatchingInsideDenseBounds:!0})}if(!f.plans)return null;let x=eWe({...e,inputSrj:t,plans:f.plans,preparedBuses:n});if(!x||x.length!==t.connections.length||new Set(x.map((C)=>C.connectionIndex)).size!==x.length)return null;return qd({inputSrj:t,routedSrj:{...t,traces:[...t.traces??[],...x.flatMap((C)=>[C.trace,...C.planeEndpointTrace?[C.planeEndpointTrace]:[]])]},clearance:e.clearance,allowBlindAndBuriedVias:!1}).valid?x:null}function gci(e){let t=e.candidateSets.flat(),n=t.length,o=new Uint8Array(n*n),i=new Set,r=new Map,s=0,a=e.candidateSets.map((x)=>x.map(()=>s++)),c=0,l=(x,C)=>{let I=Math.min(x,C)*n+Math.max(x,C),b=o[I];if(b)return b===1;let P=e.areCompatible(t[x],t[C]);return o[I]=P?1:2,P},d=a.map(()=>[]);for(let x=0;x<a.length;x++)for(let C=x+1;C<a.length;C++)if(a[x].some((I)=>a[C].some((b)=>!l(I,b))))d[x].push(C),d[C].push(x);let u=(x,C,I)=>{let b=[],P=!0;for(let E of C){if(x[E].length===0){i.add(E),P=!1;continue}for(let B of d[E])if(C.includes(B)&&(I===void 0||B===I))b.push([E,B])}for(let E=0;E<b.length;E++){let[B,w]=b[E];if(x[B].length===0||x[w].length===0)continue;let T=x[B].filter((Q)=>x[w].some((N)=>l(Q,N)));if(T.length===x[B].length)continue;if(r.set(B,w),x[B]=T,T.length===0){i.add(B),P=!1;continue}for(let Q of d[B])if(Q!==w&&C.includes(Q))b.push([Q,B])}return P},h=a.map((x,C)=>C),A=(x)=>{let C=[...x],I=new Set(C);for(let b=0;b<C.length;b++){let P=r.get(C[b]);if(P!==void 0&&!I.has(P))I.add(P),C.push(P)}return[...I]},m=a.map((x)=>[...x]);if(!u(m,h))return{selection:null,searchStates:c,emptyDomainIndices:[...i],conflictDomainIndices:A([...i])};let g=(()=>{let C=Math.max(1,Math.min(5000,Math.floor(e.maximumSearchStates/12)));for(let I=0;I<12;I++){let b=m.map((P,E)=>P[(I*17+E*7)%P.length]);for(let P=0;P<C;P++){let E=b.map(()=>0);for(let N=0;N<b.length;N++)for(let F of d[N]){if(F<=N||l(b[N],b[F]))continue;E[N]=E[N]+1,E[F]=E[F]+1}let B=Math.max(...E);if(B===0)return b;let w=E.map((N,F)=>({conflicts:N,index:F})).filter(({conflicts:N})=>N===B),T=w[(P+I)%w.length].index,Q=m[T].map((N,F)=>({candidate:N,index:F,conflicts:d[T].filter((H)=>!l(N,b[H])).length})).toSorted((N,F)=>N.conflicts-F.conflicts||(N.index-P-I)%m[T].length-(F.index-P-I)%m[T].length);b[T]=Q[0].candidate}}return null})();if(g)return{selection:g.map((x)=>t[x]),searchStates:c,emptyDomainIndices:[],conflictDomainIndices:[]};let _=(x,C,I)=>{if(!u(x,C,I))return null;let b=new Set(C.filter((w)=>x[w].length>1)),P=[];while(b.size>0){let w=[b.values().next().value];b.delete(w[0]);for(let T=0;T<w.length;T++)for(let Q of d[w[T]])if(b.delete(Q))w.push(Q);P.push(w)}if(P.length>1){let w=x;for(let T of P){let Q=_(w.slice(),T);if(!Q)return null;w=Q}return w}let E=-1;for(let w of C)if(x[w].length>1&&(E<0||x[w].length<x[E].length))E=w;if(E<0)return x;let B=x[E].map((w)=>{let T=d[E].filter((Q)=>C.includes(Q)&&x[Q].length>1).map((Q)=>x[Q].filter((N)=>l(w,N)).length);return{candidate:w,minimumSupport:Math.min(...T),totalSupport:T.reduce((Q,N)=>Q+N,0)}}).toSorted((w,T)=>T.minimumSupport-w.minimumSupport||T.totalSupport-w.totalSupport);for(let{candidate:w}of B){if(c>=e.maximumSearchStates)return null;c++;let T=x.slice();T[E]=[w];let Q=_(T,C,E);if(Q)return Q}return null},f=_(m,h),y=i.size>0||f?[...i]:[h.toSorted((x,C)=>d[C].length-d[x].length||m[x].length-m[C].length)[0]];return{selection:f?.map((x)=>t[x[0]])??null,searchStates:c,emptyDomainIndices:y,conflictDomainIndices:f?[]:A(y)}}var Oye=0.000000001;function fci(e){let t=e.candidateBusIds.filter((m)=>!e.activeBusIds.has(m));if(t.length<2)return t;let n=t.length-1,o=e.planeBuses.find((m)=>m.busId===t[n]),i=o?.connections[0]?.sourcePoint;if(!o||!i||o.connections.length!==1||o.termination.type!=="plane")return t;let r=o.termination.layer,s=o.direction==="up"||o.direction==="down"?"x":"y",a=s==="x"?"y":"x",c=s==="x"?o.xCoordinates:o.yCoordinates,l=s==="x"?o.pitchX:o.pitchY;if(c.length===0||!Number.isFinite(l)||l<=Oye)return t;let d=(Math.min(...c)+Math.max(...c))/2,u=Math.sign(d-i[s]);if(u===0)return t;let h=new Set(t),A=e.planeBuses.filter((m)=>{let p=m.connections[0]?.sourcePoint;if(m===o||m.componentId!==o.componentId||m.termination.type!=="plane"||m.termination.layer!==r||m.direction!==o.direction||m.connections.length!==1||!p||e.activeBusIds.has(m.busId)||h.has(m.busId)||Math.abs(p[a]-i[a])>Oye)return!1;let g=(p[s]-i[s])*u;return g>Oye&&g<=l+Oye}).toSorted((m,p)=>{let g=m.connections[0].sourcePoint,_=p.connections[0].sourcePoint;return Math.abs(g[s]-i[s])-Math.abs(_[s]-i[s])||m.connections[0].connectionIndex-p.connections[0].connectionIndex})[0];if(!A)return t;return t.map((m,p)=>p===n?A.busId:m)}function yci(e){let t=e[0];if(!t||e.some((l)=>l.componentId!==t.componentId))return;let n=e.flatMap((l)=>l.connections.map((d)=>d.sourcePoint));if(n.length===0)return;let o=n.reduce((l,d)=>({x:l.x+d.x,y:l.y+d.y}),{x:0,y:0});o.x/=n.length,o.y/=n.length;let{minX:i,maxX:r,minY:s,maxY:a}=t.componentBounds,c=[{edge:"left",distance:Math.abs(o.x-i)},{edge:"right",distance:Math.abs(r-o.x)},{edge:"bottom",distance:Math.abs(o.y-s)},{edge:"top",distance:Math.abs(a-o.y)}].toSorted((l,d)=>l.distance-d.distance);if(Math.abs(c[0].distance-c[1].distance)<=0.000000001)return;return c[0].edge}function HJt(e,t){if(t)return!1;let n=e.filter((u)=>u.termination.type==="boundary"),o=n.filter((u)=>u.connections.length===1),i=n.filter((u)=>u.connections.length===2),r=n.filter((u)=>u.connections.length>=8),s=e.filter((u)=>u.termination.type==="plane"&&u.connections.length===1).length,a=r[0]?.exitEdge;if(n.length!==9||o.length!==3||i.length!==3||r.length!==3||s<64||a===void 0||r.some((u)=>u.exitEdge!==a))return!1;let c=yci(r);if(c===void 0)return!1;return(c==="left"||c==="right")!==(a==="left"||a==="right")}function xci(e){let{trace:t,layerNames:n,allowBlindAndBuriedVias:o}=e;return{...t,route:t.route.map((i)=>i.route_type==="via"&&!o?{...i,layers:Wy({fromLayer:i.from_layer,toLayer:i.to_layer,layerNames:n,allowBlindAndBuriedVias:o})}:{...i})}}function Cci(e){let{srj:t,layerNames:n,allowBlindAndBuriedVias:o}=e;return{...t,traces:(t.traces??[]).map((i)=>xci({trace:i,layerNames:n,allowBlindAndBuriedVias:o}))}}function rGe(e,t,n,o){let i=n.spanLayers.map((s)=>{let a=t.indexOf(s);if(a<0)throw Error(`FanoutSolver: via for "${e.connectionName}" uses unknown layer "${s}"`);return a}),r=wF(e);return{obstacleId:o==="endpoint"?r.planeEndpointViaObstacleId:o===0?r.viaObstacleId:`${r.viaObstacleId}:${o}`,type:"rect",center:n.center,width:n.diameter,height:n.diameter,layers:n.spanLayers,zLayers:i,__zLayers:i,connectedTo:[e.connectionName,e.trace.pcb_trace_id]}}function QL(e){let{inputSrj:t,plans:n,layerNames:o}=e,i=t.connections.map((u)=>({...u,pointsToConnect:u.pointsToConnect.map((h)=>({...h}))})),r=[],s=new Set;for(let u of n){let h=i[u.connectionIndex];if(!h)throw Error(`FanoutSolver: output connection index ${u.connectionIndex} is missing`);let A=wF(u);if(h.pointsToConnect[u.sourcePointIndex]={x:u.exitPoint.x,y:u.exitPoint.y,layer:u.targetLayer,pointId:u.termination.type==="plane"?A.planeExitPointId:A.boundaryExitPointId},u.termination.type==="plane")s.add(u.connectionName);if(u.via){let m=rGe(u,o,u.via,0);if(m)r.push(m)}for(let[m,p]of(u.additionalVias??[]).entries()){let g=rGe(u,o,p,m+1);if(g)r.push(g)}if(u.planeEndpointVia){let m=rGe(u,o,u.planeEndpointVia,"endpoint");if(m)r.push(m)}}let a=n.flatMap((u)=>[u.trace,...u.planeEndpointTrace?[u.planeEndpointTrace]:[]]),c=a.flatMap((u)=>u.route.filter((h)=>("x"in h)&&("y"in h))),l=Math.max(t.defaultObstacleMargin??0,t.minTraceWidth),d=c.length===0?{...t.bounds}:{minX:Math.min(t.bounds.minX,...c.map((u)=>u.x-l)),maxX:Math.max(t.bounds.maxX,...c.map((u)=>u.x+l)),minY:Math.min(t.bounds.minY,...c.map((u)=>u.y-l)),maxY:Math.max(t.bounds.maxY,...c.map((u)=>u.y+l))};return{...t,fanoutPlaneConnectivity:n.flatMap((u)=>u.termination.type==="plane"?[{connectionName:u.connectionName,layer:u.termination.layer}]:[]),bounds:d,connections:i.filter((u)=>!s.has(u.name)),buses:t.buses?.map((u)=>({...u,connectionNames:u.connectionNames.filter((h)=>!s.has(h))})).filter((u)=>u.connectionNames.length>0),obstacles:[...t.obstacles.map((u)=>({...u,center:{...u.center},layers:[...u.layers],connectedTo:[...u.connectedTo]})),...r],traces:[...(t.traces??[]).map((u)=>({...u,route:u.route.map((h)=>({...h}))})),...a]}}var Ici=5,bci=40,Sci=64,OJt=10,Pci=8;function Brn(e){let t=e.length,n=e.reduce((o,i)=>o+i,0);return t>=Ici&&t<=bci&&n<=Sci||t===4&&new Set(e).size>1}function vci({boundaryBusConnectionCounts:e,planeBusCount:t}){let n=e.length;if(n<=OJt-1&&t>=Pci)return"mixed_with_planes";if(n>=OJt&&t===0&&Brn(e))return"large_boundary_only";return null}function zye(e){if(!e.exitEdge)throw Error(`Cannot order boundary bus ${e.busId} without an exit edge`);let t=x3(e.exitEdge);return e.connections.reduce((n,o)=>n+lF({bus:e,connection:o,boundaryDirection:t}),0)/e.connections.length}function Eci({busesInRoutingOrder:e,busLayerAssignments:t,routingMode:n}){if(n!=="large_boundary_only")return[...e];let o=e.filter((s)=>s.connections.length===1);if(new Set(o.map((s)=>s.exitEdge)).size!==1)return[...e];let i=[...e.filter((s)=>s.connections.length>=8).toSorted((s,a)=>zye(a)-zye(s)),...e.filter((s)=>s.connections.length>1&&s.connections.length<8)],r=[];for(let s of o){let a=t[s.busId];if(!a)throw Error(`Cannot order boundary bus ${s.busId} without a layer`);let c=r.find((l)=>l.targetLayer===a);if(!c)c={targetLayer:a,buses:[]},r.push(c);c.buses.push(s)}return[...i,...r.flatMap((s)=>s.buses.toSorted((a,c)=>zye(c)-zye(a)))]}var Gye=0.0000001;function Moe(e,t){let n=e.sourceObstacle,o={...n,width:n.width-0.00000002,height:n.height-0.00000002},i=[],r=!1,s=!1,a=!1;for(let[c,l]of[...e.segments,...e.planeEndpointSegments??[]].entries()){if(!n.layers.includes(l.layer))continue;let d=Jc(l,n),u=l.width/2;if(r&&o.width>0&&o.height>0&&Jc(l,o)<0.0000000001)i.push({segmentIndex:c,kind:"outline"});if(s&&d<u-Gye)i.push({segmentIndex:c,kind:"copper"});if(a&&d<u+t-Gye)i.push({segmentIndex:c,kind:"clearance"});if(!AX(l.end,n,0.000000001))r=!0;let h=jy(l.end,n);if(h>u+Gye)s=!0;if(h>=u+t-Gye)a=!0}return i}function*Mci(e,t){let n=e.sourceEscapeSegmentCount??1,o=e.segments.slice(0,n),i=o.slice(0,64).findIndex((s,a)=>!_X(e,e.segments,t,new Set([a])));if(i<0)return;let r=o[i].width+t;for(let s=i;s>=Math.max(0,i-3);s--){let a=0;for(let c=s;c<Math.min(o.length,i+8);c++){let l=o[c];if(l.layer!==e.sourceLayer||c>s&&kt(o[c-1].end,l.start)>0.0000001)break;if(a+=kt(l.start,l.end),a>4*r+0.0000001)break;if(c<=i)continue;let d=o[s].start,u=l.end,h=u.x-d.x,A=u.y-d.y,m=Math.min(Math.abs(h),Math.abs(A));for(let p of[{x:d.x+Math.sign(h)*m,y:d.y+Math.sign(A)*m},{x:u.x-Math.sign(h)*m,y:u.y-Math.sign(A)*m}]){if(kt(d,p)+kt(p,u)>=a-0.0000001)continue;yield[o[0].start,...o.slice(0,s).map((g)=>g.end),p,u,...o.slice(c+1).map((g)=>g.end)].filter((g,_,f)=>_===0||kt(g,f[_-1])>0.0000001)}}}}var LT=0.0000001,Bci=64;function wci(e,t,n){let o=e,i=(o.ccwRotationDegrees??0)/90;if(e.type!=="rect"||o.shape==="circle"||Math.abs(i-Math.round(i))>LT||Math.abs(e.width-e.height)<LT)return null;let r=Math.abs(Math.round(i))%2===1,s=r?e.height:e.width,a=r?e.width:e.height,c=s>a?"x":"y",l=(c==="x"?s:a)/2;return[-1,1].map((d)=>({...t,[c]:e.center[c]+d*(l+n)}))}function Tci(e){let{inputSrj:t,preparedBuses:n,layerNames:o,traceWidth:i,clearance:r}=e,s=n[0];if(!s)return e.plans.length?null:[];let a=s.sharedBoundary;if(n.some((h)=>["minX","maxX","minY","maxY"].some((A)=>h.sharedBoundary[A]!==a[A])))return null;let c=new Map(n.map((h)=>[h.busId,h]));if(new Set(e.plans.map((h)=>h.connectionIndex)).size!==e.plans.length)return null;let l=[...e.plans],d=k3(t,!1),u=bCe({srj:t,sharedBoundary:a,clearance:r,allowBlindAndBuriedVias:!1,allowSameNetMerges:!1});for(let[h,A]of l.entries()){if(!Moe(A,r).length)continue;let p=c.get(A.busId)?.connections.find((N)=>N.connectionIndex===A.connectionIndex),g=A.sourceEscapeSegmentCount??1,_=A.segments.slice(0,g),f=A.trace.route.findIndex((N)=>N.route_type==="via"),y=wci(A.sourceObstacle,A.sourcePoint,i/2+r+0.000001);if(!p||p.sourceObstacle!==A.sourceObstacle||!A.via||f<1||!y||!_.length||_.some((N)=>N.layer!==A.sourceLayer||N.width!==i)||kt(_[0].start,A.sourcePoint)>LT||kt(_.at(-1).end,A.via.center)>LT||!o.includes(A.sourceLayer))return null;let x=l.filter((N,F)=>F!==h),C=new Oie([...A.segments.slice(g),...A.planeEndpointSegments??[],...x.flatMap((N)=>[...N.segments,...N.planeEndpointSegments??[]]),...d.flatMap((N)=>N.segments)]),I=[...A.additionalVias??[],...A.planeEndpointVia?[A.planeEndpointVia]:[],...x.flatMap((N)=>[N.via,...N.additionalVias??[],N.planeEndpointVia].filter((F)=>!!F)),...d.flatMap((N)=>N.vias)],b=[...new Set([...Array.from({length:Math.min(_.length,Bci-1)},(N,F)=>F+1),_.length])],P=[],E=new Set;for(let N of b){let F=_[N-1].end;for(let H of[null,...y]){let z=H??A.sourcePoint,Y=F.x-z.x,U=F.y-z.y,X=Math.min(Math.abs(Y),Math.abs(U));for(let V of[{x:z.x+Math.sign(Y)*X,y:z.y+Math.sign(U)*X},{x:F.x-Math.sign(Y)*X,y:F.y-Math.sign(U)*X}]){let W=[A.sourcePoint,...H?[H]:[],V,F].filter((ne,ce,oe)=>ce===0||kt(ne,oe[ce-1])>LT),j=JSON.stringify([N,W]);if(E.has(j))continue;E.add(j);let q=W.slice(1).reduce((ne,ce,oe)=>ne+kt(W[oe],ce),0)+_.slice(N).reduce((ne,ce)=>ne+kt(ce.start,ce.end),0);P.push({anchor:N,points:W,length:q})}}}P.sort((N,F)=>N.length-F.length||N.anchor-F.anchor);let B=(N)=>{let F=gF({points:N.map((U)=>({...U,z:o.indexOf(A.sourceLayer)})),chamfer:i/2,segmentIsClear:(U,X)=>{if([U,X].some((W)=>W.x<a.minX||W.x>a.maxX||W.y<a.minY||W.y>a.maxY))return!1;let V={start:U,end:X,width:i,layer:A.sourceLayer};return t.obstacles.every((W)=>W===A.sourceObstacle||!W.layers.includes(V.layer)||Jc(V,W)>=i/2+r-LT||Hie({inputSrj:t,segment:V,bodyObstacle:W,connectionName:A.connectionName}))&&C.querySegment(V,r).every((W)=>Jm(V,W,r))&&I.every((W)=>!W.spanLayers.includes(V.layer)||Bi(W.center,U,X)>=(i+W.diameter)/2+r-LT)}});if(!F)return null;let H=F.slice(1).map((U,X)=>({start:{x:F[X].x,y:F[X].y},end:{x:U.x,y:U.y},width:i,layer:A.sourceLayer})).filter((U)=>kt(U.start,U.end)>LT),z=[...H,...A.segments.slice(g)],Y=kS(A,z,!0);if(!Y)return null;return Y.sourceEscapeSegmentCount=H.length,Y.trace={...A.trace,route:[A.trace.route[0],...H.map((U)=>({route_type:"wire",...U.end,width:U.width,layer:U.layer})),...A.trace.route.slice(f)]},Moe(Y,r).length||!u([...x,Y])?null:Y},w=(N)=>_X(N,N.segments,r,new Set(Array.from({length:N.sourceEscapeSegmentCount??1},(F,H)=>H))),T=null,Q=null;for(let N of P){let F=B([...N.points,..._.slice(N.anchor).map((H)=>H.end)]);if(!F)continue;if(!w(F)){Q??=F;continue}T=F;break}if(!T&&Q)for(let N of Mci(Q,r)){let F=B(N);if(F&&w(F)){T=F;break}}if(!T)return null;l[h]=T}if(l.some((h)=>Moe(h,r).length)||!u(l))return null;return qd({inputSrj:t,routedSrj:{...t,traces:[...t.traces??[],...l.flatMap((h)=>[h.trace,...h.planeEndpointTrace?[h.planeEndpointTrace]:[]])]},clearance:r,allowBlindAndBuriedVias:!1}).valid?l:null}var Dci=new Set(["left","right","top","bottom","top-left","top-right","bottom-left","bottom-right"]),Nci=new Set(["left","right","top","bottom"]),Rci={top_left:{direction:"up",preferredExit:"top-left",exitEdge:"top"},top_middle:{direction:"up",preferredExit:"top",exitEdge:"top"},top_right:{direction:"up",preferredExit:"top-right",exitEdge:"top"},right_top:{direction:"right",preferredExit:"top-right",exitEdge:"right"},right_middle:{direction:"right",preferredExit:"right",exitEdge:"right"},right_bottom:{direction:"right",preferredExit:"bottom-right",exitEdge:"right"},bottom_right:{direction:"down",preferredExit:"bottom-right",exitEdge:"bottom"},bottom_middle:{direction:"down",preferredExit:"bottom",exitEdge:"bottom"},bottom_left:{direction:"down",preferredExit:"bottom-left",exitEdge:"bottom"},left_bottom:{direction:"left",preferredExit:"bottom-left",exitEdge:"left"},left_middle:{direction:"left",preferredExit:"left",exitEdge:"left"},left_top:{direction:"left",preferredExit:"top-left",exitEdge:"left"},top:{direction:"up",preferredExit:"top",exitEdge:"top"},right:{direction:"right",preferredExit:"right",exitEdge:"right"},bottom:{direction:"down",preferredExit:"bottom",exitEdge:"bottom"},left:{direction:"left",preferredExit:"left",exitEdge:"left"}};function zJt(e){let t=[...e].sort((o,i)=>o-i),n=[];for(let o of t)if(n.length===0||Math.abs(n[n.length-1]-o)>0.000001)n.push(o);return n}function GJt(e){let t=Number.POSITIVE_INFINITY;for(let n=1;n<e.length;n++){let o=e[n]-e[n-1];if(o>0.000001)t=Math.min(t,o)}return t}function YJt(e,t){let n=t==="x"?"y":"x",o=Number.POSITIVE_INFINITY;for(let i=0;i<e.length;i++){let r=e[i];for(let s=i+1;s<e.length;s++){let a=e[s];if(Math.abs(r.center[n]-a.center[n])>0.000001)continue;let c=Math.abs(r.center[t]-a.center[t]);if(c>0.000001)o=Math.min(o,c)}}return o}function Qci(e){return{minX:Math.min(...e.map((t)=>t.center.x-t.width/2)),maxX:Math.max(...e.map((t)=>t.center.x+t.width/2)),minY:Math.min(...e.map((t)=>t.center.y-t.height/2)),maxY:Math.max(...e.map((t)=>t.center.y+t.height/2))}}function wrn(e,t){let n=t.componentBounds?.[e.componentId];if(!n){let i=e.pitchX*2.25,r=e.pitchY*2.25;return{minX:e.bounds.minX-i,maxX:e.bounds.maxX+i,minY:e.bounds.minY-r,maxY:e.bounds.maxY+r}}if([n.minX,n.maxX,n.minY,n.maxY].some((i)=>!Number.isFinite(i))||n.minX>=n.maxX||n.minY>=n.maxY)throw Error(`FanoutSolver: componentBounds for "${e.componentId}" must contain finite, increasing bounds`);if(n.minX>e.bounds.minX+0.000001||n.maxX<e.bounds.maxX-0.000001||n.minY>e.bounds.minY+0.000001||n.maxY<e.bounds.maxY-0.000001)throw Error(`FanoutSolver: componentBounds for "${e.componentId}" must contain every component pad`);return{...n}}function VJt(e,t){if([e.minX,e.maxX,e.minY,e.maxY].some((o)=>!Number.isFinite(o))||e.minX>=e.maxX||e.minY>=e.maxY)throw Error("FanoutSolver: sharedBoundary must contain finite, increasing bounds");for(let o of t)if(e.minX>o.bounds.minX+0.000001||e.maxX<o.bounds.maxX-0.000001||e.minY>o.bounds.minY+0.000001||e.maxY<o.bounds.maxY-0.000001)throw Error(`FanoutSolver: sharedBoundary must contain every pad of component "${o.componentId}"`);return{...e}}function kci(e,t){if(t.sharedBoundary)return VJt(t.sharedBoundary,e);let n=e.map((r)=>wrn(r,t)),i=Math.max(...e.flatMap((r)=>[r.pitchX,r.pitchY]))*2.25;return VJt({minX:Math.min(...n.map((r)=>r.minX))-i,maxX:Math.max(...n.map((r)=>r.maxX))+i,minY:Math.min(...n.map((r)=>r.minY))-i,maxY:Math.max(...n.map((r)=>r.maxY))+i},e)}function Lci(e){let t=new Map;for(let o of e){if(!o.componentId||o.isCopperPour)continue;let i=t.get(o.componentId)??[];i.push(o),t.set(o.componentId,i)}let n=[];for(let[o,i]of t){let r=zJt(i.map((g)=>g.center.x)),s=zJt(i.map((g)=>g.center.y)),a=YJt(i,"x"),c=YJt(i,"y"),l=GJt(r),d=GJt(s),u=Math.min(...[a,c,l,d].filter(Number.isFinite)),h=Math.max(...i.flatMap((g)=>[g.width,g.height])),A=Number.isFinite(u)?u:h,m=Number.isFinite(a)?a:Number.isFinite(l)?l:A,p=Number.isFinite(c)?c:Number.isFinite(d)?d:A;n.push({componentId:o,obstacles:i,xCoordinates:r,yCoordinates:s,pitchX:m,pitchY:p,bounds:Qci(i)})}return n}function Trn(e){return"layer"in e?[e.layer]:e.layers}function Drn(e){let{point:t,connection:n,componentGrids:o}=e,i=Trn(t),r=[];for(let s of o){let a=s.obstacles.filter((c)=>c.layers.some((l)=>i.includes(l))).filter((c)=>AX(t,c,0.00001)).sort((c,l)=>{let d=c.connectedTo.includes(n.name)||c.connectedTo.includes(t.pointId??"")||c.connectedTo.includes(t.pcb_port_id??""),u=l.connectedTo.includes(n.name)||l.connectedTo.includes(t.pointId??"")||l.connectedTo.includes(t.pcb_port_id??"");if(d!==u)return d?-1:1;return c.width*c.height-l.width*l.height});if(a[0])r.push({grid:s,obstacle:a[0]})}return r}function Fci(e){for(let n of e.pointsToConnect)if("layers"in n&&n.busId)return n.busId;return/^BUS[_:-]([^_:-]+)(?:[_:-]\d+)?$/i.exec(e.name)?.[1]??null}function Boe(e,t){if(t===void 0)return;if(!Dci.has(t))throw Error(`FanoutSolver: bus "${e}" has invalid preferredExit "${t}"`);return t}function Hci(e,t){if(t===void 0)return;if(!Nci.has(t))throw Error(`FanoutSolver: bus "${e}" has invalid exitEdge "${t}"`);return t}function Oci(e,t){if(t===void 0)return;try{return lrn(t)}catch{throw Error(`FanoutSolver: bus "${e}" has invalid exitPosition "${t}"`)}}function sGe(e){let{busId:t,exitPosition:n,fieldName:o,expected:i,actual:r,sourceName:s}=e;if(r===void 0||r===i)return;throw Error(`FanoutSolver: bus "${t}" exitPosition "${n}" conflicts with ${s} ${o} "${r}"`)}function zci(e){let{busId:t,requestedBus:n,options:o}=e,i=n.exitPosition,r=Oci(t,i),s=Boe(t,n.preferredExit),a=Boe(t,o.busExitPreferences?.[t]),c=Hci(t,n.exitEdge);if(r&&i){for(let[u,h]of[[n.direction,"bus"],[o.busDirections?.[t],"busDirections"]])sGe({busId:t,exitPosition:i,fieldName:"direction",expected:r.direction,actual:u,sourceName:h});for(let[u,h]of[[s,"bus"],[a,"busExitPreferences"]])sGe({busId:t,exitPosition:i,fieldName:"preferredExit",expected:r.preferredExit,actual:u,sourceName:h});return sGe({busId:t,exitPosition:i,fieldName:"exitEdge",expected:r.exitEdge,actual:c,sourceName:"bus"}),{exitPosition:i,...r.direction?{direction:r.direction}:{},...r.preferredExit?{preferredExit:r.preferredExit}:{},...r.exitEdge?{exitEdge:r.exitEdge}:{}}}let l=o.busDirections?.[t]??n.direction??o.defaultDirection,d=Boe(t,a??s??o.defaultPreferredExit);return{...l?{direction:l}:{},...d?{preferredExit:d}:{},...c?{exitEdge:c}:{}}}function Gci(e,t){if(t===void 0)return;if(t.length===0)throw Error(`FanoutSolver: bus "${e}" must allow at least one layer`);for(let n of t)if(typeof n!=="string"||n.length===0)throw Error(`FanoutSolver: bus "${e}" has an invalid allowed layer`);return[...new Set(t)]}function Yci(e,t){if(t===void 0)return;if(!Number.isFinite(t)||t<0)throw Error(`FanoutSolver: bus "${e}" maxLengthSkew must be a finite non-negative number`);return t}function Nrn(e){if(e===void 0)return;if(e.length===0)throw Error("FanoutSolver: availableCornersAndSides must contain at least one boundary region");let t=[],n=new Set;for(let o of e){let i=Rci[o];if(!i)throw Error(`FanoutSolver: invalid availableCornersAndSides value "${o}"`);let r=`${i.exitEdge}:${i.direction}:${i.preferredExit}`;if(n.has(r))continue;n.add(r),t.push(i)}return t}function Vci(e,t){if(t===void 0||t.type==="boundary")return{type:"boundary"};if(t.type!=="plane"||typeof t.layer!=="string"||t.layer.length===0)throw Error(`FanoutSolver: bus "${e}" has an invalid termination target`);return{type:"plane",layer:t.layer}}function Uci(e,t){let n=t.buses??e.buses,o=new Map,i=new Set,r=new Set(e.connections.map((s)=>s.name));for(let s of n??[]){if(o.has(s.busId))throw Error(`FanoutSolver: duplicate bus id "${s.busId}"`);for(let u of s.connectionNames){if(!r.has(u))throw Error(`FanoutSolver: bus "${s.busId}" references unknown connection "${u}"`);if(i.has(u))throw Error(`FanoutSolver: connection "${u}" belongs to more than one bus`);i.add(u)}let a=Vci(s.busId,s.termination),c=zci({busId:s.busId,requestedBus:s,options:t}),l=Gci(s.busId,s.allowedLayers),d=Yci(s.busId,s.maxLengthSkew);if(a.type==="plane"&&d!==void 0)throw Error(`FanoutSolver: plane-terminated bus "${s.busId}" cannot specify maxLengthSkew`);if(a.type==="plane"&&c.preferredExit!==void 0)throw Error(`FanoutSolver: plane-terminated bus "${s.busId}" cannot also specify preferredExit`);o.set(s.busId,{...s,sourceComponentId:s.sourceComponentId??t.sourceComponentId,...c,...l===void 0?{}:{allowedLayers:l},...d===void 0?{}:{maxLengthSkew:d},termination:a})}for(let s of e.connections){if(i.has(s.name))continue;let a=Fci(s);if(a){let c=o.get(a);if(c)o.set(a,{...c,connectionNames:[...c.connectionNames,s.name]});else o.set(a,{busId:a,connectionNames:[s.name],direction:t.busDirections?.[a]??t.defaultDirection,sourceComponentId:t.sourceComponentId,preferredExit:Boe(a,t.busExitPreferences?.[a]??t.defaultPreferredExit),termination:{type:"boundary"}})}else{let c=`connection:${s.name}`;o.set(c,{busId:c,connectionNames:[s.name],sourceComponentId:t.sourceComponentId,direction:t.busDirections?.[c]??t.defaultDirection,preferredExit:Boe(c,t.busExitPreferences?.[c]??t.defaultPreferredExit),termination:{type:"boundary"}})}}return[...o.values()]}function Wci(e){let{busSpec:t,connections:n,componentGrids:o}=e,i=new Map;for(let l of n){let d=new Set;for(let u of l.pointsToConnect)for(let h of Drn({point:u,connection:l,componentGrids:o}))d.add(h.grid.componentId);for(let u of d)i.set(u,(i.get(u)??0)+1)}let r=[...o].sort((l,d)=>{let u=(i.get(d.componentId)??0)-(i.get(l.componentId)??0);if(u!==0)return u;return d.obstacles.length-l.obstacles.length})[0],s=t.sourceComponentId?o.find((l)=>l.componentId===t.sourceComponentId):void 0;if(t.sourceComponentId&&!s)throw Error(`FanoutSolver: source component "${t.sourceComponentId}" for bus "${t.busId}" was not found`);let a=s??r,c=a?i.get(a.componentId)??0:0;if(!a||c!==n.length)throw Error(t.sourceComponentId?`FanoutSolver: source component "${t.sourceComponentId}" is not an endpoint on every connection in bus "${t.busId}"`:`FanoutSolver: bus "${t.busId}" does not have one component endpoint on every connection`);return a}function Xci(e,t,n,o){let r=t.pointsToConnect.filter((s,a)=>a!==n).sort((s,a)=>kt(e,a)-kt(e,s))[0];if(!r&&o.type==="plane")return e;if(!r)throw Error(`FanoutSolver: connection "${t.name}" has no target beyond its BGA pad`);return r}function Kci(e){let{connection:t,connectionIndex:n,sourceGrid:o,componentGrids:i,termination:r,exitTargetPoint:s}=e;for(let a=0;a<t.pointsToConnect.length;a++){let c=t.pointsToConnect[a],l=Drn({point:c,connection:t,componentGrids:i}).find((h)=>h.grid.componentId===o.componentId);if(!l)continue;let d=Trn(c).find((h)=>l.obstacle.layers.includes(h));if(!d)throw Error(`FanoutSolver: connection "${t.name}" has no source layer shared with its BGA pad`);let u=Xci(c,t,a,r);return{connection:t,connectionIndex:n,sourcePoint:c,sourcePointIndex:a,sourceLayer:d,sourceObstacle:l.obstacle,targetPoint:u,exitTargetPoint:s??{x:u.x,y:u.y},hasExplicitLayeredExitTarget:s?.layer!==void 0}}throw Error(`FanoutSolver: connection "${t.name}" does not touch component "${o.componentId}"`)}function $Ye(e,t){let n=0,o=0;for(let i of t){let r=i.exitTargetPoint??i.targetPoint;n+=r.x-i.sourcePoint.x,o+=r.y-i.sourcePoint.y}if(Math.abs(n)<0.000000001&&Math.abs(o)<0.000000001)throw Error(`FanoutSolver: cannot infer an escape direction for bus "${e}"`);if(Math.abs(n)>=Math.abs(o))return n>=0?"right":"left";return o>=0?"up":"down"}function jci(e){switch(e){case"left":return["left"];case"right":return["right"];case"top":return["up"];case"bottom":return["down"];case"top-left":return["up","left"];case"top-right":return["up","right"];case"bottom-left":return["down","left"];case"bottom-right":return["down","right"]}}function Rrn(e){return{x:e.reduce((t,n)=>t+n.sourcePoint.x,0)/e.length,y:e.reduce((t,n)=>t+n.sourcePoint.y,0)/e.length}}function Sxe(e,t,n){switch(t){case"left":return e.x-n.minX;case"right":return n.maxX-e.x;case"up":return n.maxY-e.y;case"down":return e.y-n.minY}}function Pxe(e,t){if(e.direction==="up"||e.direction==="down"){if(e.preferredExit.endsWith("left"))return t.minX;if(e.preferredExit.endsWith("right"))return t.maxX;return(t.minX+t.maxX)/2}if(e.preferredExit.startsWith("top"))return t.maxY;if(e.preferredExit.startsWith("bottom"))return t.minY;return(t.minY+t.maxY)/2}function UJt(e,t){return t==="up"||t==="down"?e.x:e.y}function qci(e,t){try{return $Ye(e,t)}catch{return}}function Jci(e){let{busId:t,explicitDirection:n,preferredExit:o,connections:i,sharedBoundary:r,availableRegions:s}=e,a=s.filter((h)=>(n===void 0||h.direction===n)&&(o===void 0||h.preferredExit===o));if(a.length===0)throw Error(`FanoutSolver: bus "${t}" cannot use its requested exit with availableCornersAndSides`);let c=n?void 0:qci(t,i),l=c?a.filter((h)=>h.direction===c):[],d=l.length>0?l:a,u=Rrn(i);return[...d].toSorted((h,A)=>Sxe(u,h.direction,r)-Sxe(u,A.direction,r)||Math.abs(UJt(u,h.direction)-Pxe(h,r))-Math.abs(UJt(u,A.direction)-Pxe(A,r))||h.preferredExit.localeCompare(A.preferredExit))[0]}function $ci(e){let{busId:t,exitEdge:n,preferredExit:o,availableRegions:i}=e,r=Mr(n,o);if(!i.some((a)=>a.exitEdge===n&&Mr(a.exitEdge,a.preferredExit)===r))throw Error(`FanoutSolver: bus "${t}" cannot use its requested exit with availableCornersAndSides`)}function Zci(e){let{busId:t,explicitDirection:n,preferredExit:o,connections:i,sharedBoundary:r,availableRegions:s}=e;if(s)return Jci({busId:t,explicitDirection:n,preferredExit:o,connections:i,sharedBoundary:r,availableRegions:s});if(!o)return{direction:n??$Ye(t,i)};let a=jci(o);if(n){if(!a.includes(n))throw Error(`FanoutSolver: bus "${t}" direction "${n}" is incompatible with preferredExit "${o}"`);return{direction:n,preferredExit:o}}if(a.length===1)return{direction:a[0],preferredExit:o};let c;try{c=$Ye(t,i)}catch{c=void 0}if(c&&a.includes(c))return{direction:c,preferredExit:o};let l=Rrn(i);return{direction:a.toSorted((d,u)=>Sxe(l,d,r)-Sxe(l,u,r)||d.localeCompare(u))[0],preferredExit:o}}function eli(e,t){let n=Lci(e.obstacles);if(n.length===0&&e.connections.length>0)throw Error("FanoutSolver: no componentId-tagged pad footprint was found");let o=new Map(e.connections.map((d,u)=>[d.name,u])),i=Uci(e,t).map((d)=>{for(let[m,p]of Object.entries(d.connectionExitTargets??{})){if(!d.connectionNames.includes(m))throw Error(`FanoutSolver: connectionExitTargets contains connection "${m}" outside bus "${d.busId}"`);if(!Number.isFinite(p.x)||!Number.isFinite(p.y))throw Error(`FanoutSolver: connectionExitTargets for connection "${m}" must contain finite x and y coordinates`)}let u=d.connectionNames.map((m)=>{let p=o.get(m);if(p===void 0)throw Error(`FanoutSolver: connection "${m}" is missing from the input`);return e.connections[p]}),h=Wci({busSpec:d,connections:u,componentGrids:n}),A=u.map((m)=>Kci({connection:m,connectionIndex:o.get(m.name),sourceGrid:h,componentGrids:n,termination:d.termination??{type:"boundary"},exitTargetPoint:d.connectionExitTargets?.[m.name]}));return{busSpec:d,sourceGrid:h,preparedConnections:A}}),r=[...new Map(i.map(({sourceGrid:d})=>[d.componentId,d])).values()],s=kci(r,t),a=Nrn(t.availableCornersAndSides),c=[];for(let{busSpec:d,sourceGrid:u,preparedConnections:h}of i){if(d.exitEdge&&!d.preferredExit)throw Error(`FanoutSolver: bus "${d.busId}" exitEdge requires preferredExit`);if(d.exitEdge&&d.preferredExit&&!drn(d.preferredExit,d.exitEdge))throw Error(`FanoutSolver: bus "${d.busId}" exitEdge "${d.exitEdge}" is incompatible with preferredExit "${d.preferredExit}"`);let A=Zci({busId:d.busId,explicitDirection:d.direction??t.busDirections?.[d.busId],preferredExit:d.preferredExit,connections:h,sharedBoundary:s,availableRegions:d.termination?.type==="plane"||d.exitEdge?void 0:a});if(d.termination?.type!=="plane"&&d.exitEdge&&A.preferredExit&&a)$ci({busId:d.busId,exitEdge:d.exitEdge,preferredExit:A.preferredExit,availableRegions:a});c.push({busId:d.busId,...d.maxLengthSkew===void 0?{}:{maxLengthSkew:d.maxLengthSkew},direction:A.direction,preferredExit:A.preferredExit,...d.exitEdge?{exitEdge:d.exitEdge}:{},cornerBandConnectionCount:0,allowedLayers:d.allowedLayers,termination:d.termination??{type:"boundary"},connections:h,componentId:u.componentId,componentObstacles:u.obstacles,componentBounds:wrn(u,t),sharedBoundary:s,xCoordinates:[...u.xCoordinates],yCoordinates:[...u.yCoordinates],pitchX:u.pitchX,pitchY:u.pitchY})}let l=new Map;for(let d of c){let u=Mr(d.exitEdge,d.preferredExit);if(!d.exitEdge||!u)continue;let h=`${d.exitEdge}:${u}`;l.set(h,(l.get(h)??0)+d.connections.length)}for(let d of c){let u=Mr(d.exitEdge,d.preferredExit);if(!d.exitEdge||!u)continue;d.cornerBandConnectionCount=l.get(`${d.exitEdge}:${u}`)??d.connections.length}return c}var IT=0.000000001,WJt=Math.PI*2;function tli(e){let{buses:t,rules:n}=e,o=t.find((T)=>T.busId===e.busId);if(!o||o.termination.type!=="boundary"||!o.exitEdge||o.connections.length<3)return null;let i=e.maximumOrderingStates??1e4,r=e.maximumCompleteAssignments??16;for(let[T,Q]of Object.entries({maximumOrderingStates:i,maximumCompleteAssignments:r}))if(!Number.isSafeInteger(Q)||Q<1)throw Error(`FanoutSolver: ${T} must be a positive safe integer`);let s={x:(o.componentBounds.minX+o.componentBounds.maxX)/2,y:(o.componentBounds.minY+o.componentBounds.maxY)/2},a=(T)=>Math.atan2(T.y-s.y,T.x-s.x),c=(T)=>{let Q=T.exitTargetPoint??T.targetPoint;return o.exitEdge==="right"?Q.y:o.exitEdge==="top"?-Q.x:o.exitEdge==="left"?-Q.y:Q.x},l=o.connections.toSorted((T,Q)=>c(T)-c(Q)||T.connectionIndex-Q.connectionIndex),d=[];for(let T of l){if(kt(T.sourcePoint,s)<IT)return null;let Q=a(T.sourcePoint);while(Q<(d.at(-1)??Q)-IT)Q+=WJt;d.push(Q)}if(d.at(-1)-d[0]>=WJt-IT)return null;let u=new Map(t.flatMap((T)=>T.connections.map((Q)=>[Q.connectionIndex,Q]))),h=new Map(l.map((T,Q)=>[T.connectionIndex,Q])),A=new Map,m=new Map;for(let T of u.values())m.set(T.connectionIndex,[]);for(let T of VT(t,n)){let Q=u.get(T.connectionIndex),N=`${T.point.x.toFixed(9)},${T.point.y.toFixed(9)}`;if(!A.has(N))A.set(N,A.size);let F=h.get(T.connectionIndex),H=a(Q.sourcePoint),z=F===void 0?a(T.point):d[F]+Math.atan2(Math.sin(a(T.point)-H),Math.cos(a(T.point)-H));m.get(T.connectionIndex).push({...T,angle:z,siteIndex:A.get(N),sourceSegment:{start:Q.sourcePoint,end:T.point,layer:Q.sourceLayer,width:n.traceWidth}})}let p=[...m.entries()].map(([T,Q])=>({connectionIndex:T,candidates:Q}));if(p.some((T)=>T.candidates.length===0))return null;let g=l.map((T,Q)=>m.get(T.connectionIndex).toSorted((N,F)=>Math.abs(N.angle-d[Q])-Math.abs(F.angle-d[Q])||kt(F.point,s)-kt(N.point,s))),_=n.viaHoleDiameter?n.viaHoleDiameter+(n.holeToHoleClearance??n.clearance):0,f=n.viaDiameter/2+n.traceWidth/2+n.clearance,y=(T,Q)=>{let N=n.canShareCopper?.(T.connectionIndex,Q.connectionIndex)??!1,F=N?_:Math.max(_,n.viaDiameter+n.clearance);if(kt(T.point,Q.point)<F-IT)return!1;if(N)return!0;return Bi(T.point,Q.sourceSegment.start,Q.sourceSegment.end)>=f-IT&&Bi(Q.point,T.sourceSegment.start,T.sourceSegment.end)>=f-IT&&Jm(T.sourceSegment,Q.sourceSegment,n.clearance)},x=new Map;for(let T of g)for(let Q of T){let N=new Set;for(let F of p)for(let H of F.candidates)if(Q.connectionIndex!==H.connectionIndex&&!y(Q,H))N.add(H);x.set(Q,N)}let C=[],I=_>IT||!n.canShareCopper,b=()=>{if(!I)return!0;let T=new Map(C.map((H)=>[H.connectionIndex,H.siteIndex])),Q=p.map((H)=>H.candidates.filter((z)=>(!T.has(z.connectionIndex)||T.get(z.connectionIndex)===z.siteIndex)&&C.every((Y)=>!x.get(Y).has(z))).map((z)=>z.siteIndex)).sort((H,z)=>H.length-z.length);if(Q.some((H)=>H.length===0))return!1;let N=new Int32Array(A.size).fill(-1),F=(H,z)=>{for(let Y of Q[H]){if(z[Y])continue;if(z[Y]=1,N[Y]===-1||F(N[Y],z))return N[Y]=H,!0}return!1};return Q.every((H,z)=>F(z,new Uint8Array(A.size)))},P=0,E=0,B=null,w=(T)=>{if(++P>i)return!1;if(T===g.length){if(++E>r)return!1;let Q=new Map(n.fixedViaPointsByConnectionIndex);for(let N of C)Q.set(N.connectionIndex,N.point);return B=qu(t,{...n,fixedViaPointsByConnectionIndex:Q}),B!==null}for(let Q of g[T]){if(Q.angle<(C.at(-1)?.angle??-1/0)-IT||C.some((N)=>x.get(N).has(Q)))continue;if(C.push(Q),b()&&w(T+1))return!0;if(C.pop(),P>i||E>=r)break}return!1};return w(0),B}var Ph=0.000000001,bT=1,Joe=globalThis.process?.env?.FANOUT_FLOW_DEBUG==="1";function nli(e){let{boundary:t,sourcePoints:n,traceWidth:o,update:i}=e,r=t.maxX-t.minX,s=t.maxY-t.minY,a=Math.max(Math.min(r,s)*0.02,0.2),c=i.grid?Math.max(1,Math.ceil(i.grid.points.length/1200)):1,l=i.grid?i.grid.points.flatMap((u,h)=>h%c===0?[{point:u,index:h}]:[]):[],d=i.grid?.processedNodeCount??i.grid?.points.length??0;return{title:`Adaptive exits: ${i.phase}`,rects:[{center:{x:(t.minX+t.maxX)/2,y:(t.minY+t.maxY)/2},width:r,height:s,fill:"rgba(0, 0, 0, 0)",stroke:"rgba(14, 165, 233, 0.9)",label:"adaptive flow grid boundary"}],points:[...l.map(({point:u,index:h})=>{let A=h<d;return{...u,color:!A?"rgba(148, 163, 184, 0.18)":i.grid.obstacleFreeNodes[h]?"rgba(34, 197, 94, 0.38)":"rgba(100, 116, 139, 0.28)",label:A?i.grid.obstacleFreeNodes[h]?"available flow node":"blocked flow node":"unprocessed flow node"}}),...n.map((u)=>({...u,color:"#f97316",label:"adaptive route source"})),...(i.candidatePoints??[]).map((u)=>({...u,color:"#06b6d4",label:"selected terminal node"}))],lines:(i.segments??[]).map((u)=>({points:[u.start,u.end],strokeColor:"rgba(250, 204, 21, 0.9)",strokeWidth:Math.max(o,a*0.4),label:"current adaptive route"})),texts:[{x:t.minX,y:t.maxY+a*2,text:`${i.phase}${i.direction?` · ${i.direction}`:""}${i.processed!==void 0&&i.total!==void 0?` · ${i.processed}/${i.total}`:""}`,color:"#0f172a",fontSize:a*1.5,anchorSide:"bottom_left"}]}}function oli(e){let t=e.connection;return e.sourceObstacle.connectedTo.find((o)=>o.startsWith("connectivity_net"))??t.netConnectionName??e.connection.name.replace(/::fanout:\d+$/,"")}function Qrn(e,t){return e===t.connection.sourceObstacle||e.connectedTo.includes(t.connection.connection.name)||e.connectedTo.includes(t.netKey)}function vxe(e,t){let n=t.x-e.x,o=t.y-e.y,i=Math.abs(n),r=Math.abs(o);if(i<Ph||r<Ph||Math.abs(i-r)<Ph)return[e,t];if(i>r)return[e,{x:e.x+Math.sign(n)*r,y:t.y},t];return[e,{x:t.x,y:e.y+Math.sign(o)*i},t]}function krn(e){if(e.length<2)return e;let t=[e[0]];for(let n of e.slice(1)){let o=t.at(-1),i=Math.abs(n.x-o.x),r=Math.abs(n.y-o.y);if(i<Ph||r<Ph||Math.abs(i-r)<Ph){t.push(n);continue}t.push(...vxe(n,o).reverse().slice(1))}return MCe(t)}function MCe(e){if(e.length<3)return e;let t=[e[0]];for(let n=1;n<e.length-1;n++){let o=t.at(-1),i=e[n],r=e[n+1];if(Math.sign(i.x-o.x)!==Math.sign(r.x-i.x)||Math.sign(i.y-o.y)!==Math.sign(r.y-i.y))t.push(i)}return t.push(e.at(-1)),t}function ili(e,t){if(e.length<3)return e;let n=[e[0]];for(let o=1;o<e.length-1;o++){let i=e[o-1],r=e[o],s=e[o+1],a=kt(i,r),c=kt(r,s);if(a<Ph||c<Ph)continue;let l={x:(r.x-i.x)/a,y:(r.y-i.y)/a},d={x:(s.x-r.x)/c,y:(s.y-r.y)/c};if(Math.abs(l.x*d.x+l.y*d.y)>0.000001){n.push(r);continue}let u=Math.min(t,a/2,c/2);n.push({x:r.x-l.x*u,y:r.y-l.y*u}),n.push({x:r.x+d.x*u,y:r.y+d.y*u})}return n.push(e.at(-1)),MCe(n)}function EW(e,t){let n=[];for(let o=1;o<e.length;o++){if(kt(e[o-1],e[o])<Ph)continue;n.push({start:e[o-1],end:e[o],width:t,layer:"top"})}return n}var rli=class{edges;levels;nextEdges;constructor(e){this.edges=Array.from({length:e},()=>[]),this.levels=new Int32Array(e),this.nextEdges=new Int32Array(e)}addEdge(e,t,n,o={}){let i={to:t,reverseIndex:this.edges[t].length,capacity:n,initialCapacity:n,...o},r={to:e,reverseIndex:this.edges[e].length,capacity:0,initialCapacity:0};this.edges[e].push(i),this.edges[t].push(r)}buildLevels(e,t){this.levels.fill(-1);let n=new Int32Array(this.edges.length),o=0,i=0;n[i++]=e,this.levels[e]=0;while(o<i){let r=n[o++];for(let s of this.edges[r]){if(s.capacity<=0||this.levels[s.to]>=0)continue;this.levels[s.to]=this.levels[r]+1,n[i++]=s.to}}return this.levels[t]>=0}sendFlow(e,t){if(e===t)return 1;for(let n=this.nextEdges[e];n<this.edges[e].length;n++,this.nextEdges[e]=n){let o=this.edges[e][n];if(o.capacity<=0||this.levels[o.to]!==this.levels[e]+1)continue;let i=this.sendFlow(o.to,t);if(i===0)continue;return o.capacity-=i,this.edges[o.to][o.reverseIndex].capacity+=i,i}return 0}*maximumFlowSteps(e,t,n){let o=0;while(o<n&&this.buildLevels(e,t)){this.nextEdges.fill(0);let i=0;while(o<n){let r=this.sendFlow(e,t);if(r===0)break;if(o+=r,i+=r,i>=4&&o<n)i=0,yield o}}return o}};function*sli(e){let{boundary:t,obstacles:n,traceWidth:o,clearance:i,reportProgress:r}=e,s=o+i,a=Math.round((t.maxX-t.minX)/s)+1,c=Math.round((t.maxY-t.minY)/s)+1,l=a*c,d=Array.from({length:l},(g,_)=>({x:t.minX+_%a*s,y:t.minY+Math.floor(_/a)*s})),u=o/2+i,h=new Map;for(let g=0;g<n.length;g++){let _=n[g],f=Math.floor((_.center.x-_.width/2-u)/bT),y=Math.floor((_.center.x+_.width/2+u)/bT),x=Math.floor((_.center.y-_.height/2-u)/bT),C=Math.floor((_.center.y+_.height/2+u)/bT);for(let I=f;I<=y;I++)for(let b=x;b<=C;b++){let P=`${I}:${b}`,E=h.get(P)??[];E.push(g),h.set(P,E)}if((g+1)%128===0)r({phase:"index-obstacles",processed:g+1,total:n.length}),yield}let A=(g,_=g)=>{let f=Math.floor(Math.min(g.x,_.x)/bT),y=Math.floor(Math.max(g.x,_.x)/bT),x=Math.floor(Math.min(g.y,_.y)/bT),C=Math.floor(Math.max(g.y,_.y)/bT),I=new Set;for(let b=f;b<=y;b++)for(let P=x;P<=C;P++)for(let E of h.get(`${b}:${P}`)??[])I.add(E);return[...I].map((b)=>n[b])},m=new Uint8Array(l);for(let g=0;g<l;g++){let _=d[g];if(A(_).every((f)=>jy(_,f)>=u-Ph))m[g]=1;if((g+1)%2048===0)r({phase:"classify-flow-grid",processed:g+1,total:l,grid:{points:d,obstacleFreeNodes:m,processedNodeCount:g+1}}),yield}let p=Array.from({length:l},()=>[]);for(let g=0;g<l;g++){if(!m[g])continue;let _=g%a,f=Math.floor(g/a);for(let[y,x]of[[1,0],[0,1]]){let C=_+y,I=f+x;if(C>=a||I>=c)continue;let b=I*a+C;if(!m[b])continue;let P={start:d[g],end:d[b],width:o,layer:"top"};if(A(P.start,P.end).some((E)=>Jc(P,E)<u-Ph))continue;p[g].push(b),p[b].push(g)}if((g+1)%2048===0)r({phase:"connect-flow-grid",processed:g+1,total:l,grid:{points:d,obstacleFreeNodes:m,processedNodeCount:l}}),yield}return{boundary:t,step:s,columnCount:a,rowCount:c,nodeCount:l,points:d,obstacleFreeNodes:m,neighbors:p}}function*ali(e){let{direction:t,availableDirections:n,items:o,grid:i,obstacles:r,traceWidth:s,clearance:a,occupiedNodes:c,acceptedSegments:l,connectorSelectionOffset:d=0,reportProgress:u}=e;if(o.length===0)return{routes:[],usedNodes:[],unmatchedItems:[]};let{boundary:h,step:A,columnCount:m,rowCount:p,nodeCount:g}=i,_=(ce)=>i.points[ce],f=s/2+a,y=s+a,x=new Uint8Array(g);for(let ce=0;ce<g;ce++)if(!c[ce]&&i.obstacleFreeNodes[ce])x[ce]=1;let C=(ce,oe)=>{let ie=EW(ce,s);return ie.every((J)=>r.every((ee)=>Qrn(ee,oe)||Jc(J,ee)>=f-Ph))&&ie.every((J)=>l.every((ee)=>ad(J.start,J.end,ee.start,ee.end)>=y-Ph))},I=new Map;for(let ce of o){let oe=`${ce.source.x.toFixed(6)}:${ce.source.y.toFixed(6)}:${ce.netKey}`,ie=I.get(oe)??[];ie.push(ce),I.set(oe,ie)}let b=Array.from({length:3721},(ce,oe)=>{let ie=oe%61-30,J=Math.floor(oe/61)-30;return{x:ie,y:J,distanceSquared:ie*ie+J*J}}).sort((ce,oe)=>ce.distanceSquared-oe.distanceSquared),P=[],E=0;for(let ce of I.values()){let oe=ce[0],ie=Math.hypot(oe.connection.sourceObstacle.width/2,oe.connection.sourceObstacle.height/2)+a+A*2,J=Math.round((oe.source.x-h.minX)/A),ee=Math.round((oe.source.y-h.minY)/A),se=[],le=new Set;for(let he of b){let ue=J+he.x,Ae=ee+he.y;if(ue<0||ue>=m||Ae<0||Ae>=p)continue;let _e=Ae*m+ue;if(!x[_e]||le.has(_e))continue;if(kt(oe.source,_(_e))>ie)continue;let Pe=vxe(oe.source,_(_e));if(!C(Pe,oe))continue;if(le.add(_e),se.push({node:_e,connectorPoints:Pe}),se.length>=12)break}if(se.length===0)return null;if(P.push({item:oe,equivalentItems:ce,candidates:se}),E++,E%8===0)u({phase:"discover-terminal-connectors",direction:t,processed:E,total:I.size,grid:{points:i.points,obstacleFreeNodes:x,processedNodeCount:g},candidatePoints:P.flatMap((he)=>he.candidates.map((ue)=>_(ue.node))),segments:l}),yield}let B=[],w=0;for(let ce of[...P].sort((oe,ie)=>oe.candidates.length-ie.candidates.length)){let oe=ce.candidates.length===0?0:d%ce.candidates.length,J=[...ce.candidates.slice(oe),...ce.candidates.slice(0,oe)].find((ee)=>{let se=EW(ee.connectorPoints,s);return B.every((le)=>le.netKey===ce.item.netKey||se.every((he)=>le.segments.every((ue)=>ad(he.start,he.end,ue.start,ue.end)>=y-Ph)))});if(!J)return null;if(ce.candidates=[J],B.push({netKey:ce.item.netKey,segments:EW(J.connectorPoints,s)}),w++,w%8===0)u({phase:"select-terminal-connectors",direction:t,processed:w,total:P.length,grid:{points:i.points,obstacleFreeNodes:x,processedNodeCount:g},candidatePoints:P.flatMap((ee)=>ee.candidates.map((se)=>_(se.node))),segments:[...l,...B.flatMap((ee)=>ee.segments)]}),yield}let T=new Set(P.map((ce)=>ce.candidates[0].node));for(let ce of B)for(let oe of ce.segments){let ie=Math.max(0,Math.floor((Math.min(oe.start.x,oe.end.x)-y-h.minX)/A)),J=Math.min(m-1,Math.ceil((Math.max(oe.start.x,oe.end.x)+y-h.minX)/A)),ee=Math.max(0,Math.floor((Math.min(oe.start.y,oe.end.y)-y-h.minY)/A)),se=Math.min(p-1,Math.ceil((Math.max(oe.start.y,oe.end.y)+y-h.minY)/A));for(let le=ee;le<=se;le++)for(let he=ie;he<=J;he++){let ue=le*m+he;if(!x[ue]||T.has(ue))continue;let Ae=_(ue);if(ad(oe.start,oe.end,Ae,Ae)<y-Ph)x[ue]=0}}let Q=0,N=1,F=N+P.length,H=F+g,z=H+g,Y=new rli(z+1);for(let ce=0;ce<P.length;ce++){let oe=N+ce;Y.addEdge(Q,oe,1);for(let ie of P[ce].candidates)Y.addEdge(oe,F+ie.node,1,{gridNode:ie.node})}for(let ce=0;ce<g;ce++){if(!x[ce])continue;Y.addEdge(F+ce,H+ce,1);let oe=ce%m,ie=Math.floor(ce/m);for(let ee of i.neighbors[ce]){if(!x[ee])continue;Y.addEdge(H+ce,F+ee,1,{gridNode:ee})}if(t==="any"&&((!n||n.has("left"))&&oe===0||(!n||n.has("right"))&&oe===m-1||(!n||n.has("down"))&&ie===0||(!n||n.has("up"))&&ie===p-1)||t==="left"&&oe===0||t==="right"&&oe===m-1||t==="down"&&ie===0||t==="up"&&ie===p-1)Y.addEdge(H+ce,z,1,{isSink:!0});if((ce+1)%2048===0)u({phase:"build-flow-network",direction:t,processed:ce+1,total:g,grid:{points:i.points,obstacleFreeNodes:x,processedNodeCount:g},candidatePoints:P.map((ee)=>_(ee.candidates[0].node)),segments:[...l,...B.flatMap((ee)=>ee.segments)]}),yield}let U=Y.maximumFlowSteps(Q,z,P.length),X=U.next();while(!X.done)u({phase:"augment-terminal-flow",direction:t,processed:X.value,total:P.length,grid:{points:i.points,obstacleFreeNodes:x,processedNodeCount:g},candidatePoints:P.map((ce)=>_(ce.candidates[0].node)),segments:[...l,...B.flatMap((ce)=>ce.segments)]}),yield,X=U.next();let V=X.value,W=(ce)=>{let oe=N+ce;return Y.edges[Q].some((ie)=>ie.to===oe&&ie.initialCapacity===1&&ie.capacity===0)};if(V!==P.length){if(Joe){let ce=P.flatMap((oe,ie)=>W(ie)?[]:[oe.item.connection.connection.name]);console.error("single-layer flow group failed",{direction:t,achievedFlow:V,requiredFlow:P.length,unmatchedConnections:ce})}}let j=[],q=[],ne=[];for(let ce=0;ce<P.length;ce++){let oe=P[ce];if(!W(ce)){ne.push(...oe.equivalentItems);continue}let ie=N+ce,J=Y.edges[ie].find((Pe)=>Pe.initialCapacity===1&&Pe.capacity===0&&Pe.gridNode!==void 0);if(J?.gridNode===void 0)return null;let ee=oe.candidates.find((Pe)=>Pe.node===J.gridNode);if(!ee)return null;let se=[_(ee.node)],le=ee.node,he=[le];for(let Pe=0;Pe<=g;Pe++){let Ee=H+le,Te=Y.edges[Ee].find((be)=>be.initialCapacity===1&&be.capacity===0&&(be.gridNode!==void 0||be.isSink));if(!Te)return null;if(Te.isSink)break;if(Te.gridNode===void 0)return null;le=Te.gridNode,he.push(le),se.push(_(le))}q.push(...he);let ue=MCe([...ee.connectorPoints,...se.slice(1)]),Ae=krn(ili(ue,A/2)),_e=EW(Ae,s);for(let Pe of oe.equivalentItems)j.push({item:Pe,points:Ae,segments:_e});if((ce+1)%8===0)u({phase:"extract-flow-routes",direction:t,processed:ce+1,total:P.length,grid:{points:i.points,obstacleFreeNodes:x,processedNodeCount:g},segments:[...l,...j.flatMap((Pe)=>Pe.segments)]}),yield}return{routes:j,usedNodes:q,unmatchedItems:ne}}function XJt(e,t){let{item:n,points:o,segments:i}=e,r=o.map((a,c)=>({route_type:"wire",x:a.x,y:a.y,width:t,layer:"top",...c===0&&n.connection.sourcePoint.pcb_port_id?{start_pcb_port_id:n.connection.sourcePoint.pcb_port_id}:{}})),s=wF({connectionName:n.connection.connection.name,sourcePointIndex:n.connection.sourcePointIndex});return{busId:n.bus.busId,connectionName:n.connection.connection.name,connectionIndex:n.connection.connectionIndex,sourcePointIndex:n.connection.sourcePointIndex,sourcePoint:n.connection.sourcePoint,sourceObstacle:n.connection.sourceObstacle,sourceLayer:n.connection.sourceLayer,targetPoint:n.connection.targetPoint,targetLayer:"top",termination:n.bus.termination,direction:n.bus.direction,...n.bus.exitEdge?{exitEdge:n.bus.exitEdge}:{},exitPoint:o.at(-1),trace:{type:"pcb_trace",pcb_trace_id:s.traceId,connection_name:n.connection.connection.name,connectsTo:[...n.connection.sourcePoint.pointId?[n.connection.sourcePoint.pointId]:[],...n.connection.sourcePoint.pcb_port_id?[n.connection.sourcePoint.pcb_port_id]:[],s.boundaryExitPointId],route:r},segments:i,length:i.reduce((a,c)=>a+kt(c.start,c.end),0)}}function cli(e,t){let n=vxe(e,t),o=vxe(t,e).reverse();return n.length===o.length&&n.every((i,r)=>kt(i,o[r])<Ph)?[n]:[n,o]}function KJt(e){let{plans:t,items:n,obstacles:o,traceWidth:i,clearance:r}=e,s=new Map(n.map((h)=>[h.connection.connection.name,h.netKey])),a=new Map,c=new Map;for(let h of t){let A=s.get(h.connectionName),m=a.get(A)??[],p=c.get(A)??new Set;for(let g of h.segments){let f=[g.start,g.end].map((y)=>`${y.x.toFixed(6)}:${y.y.toFixed(6)}`).sort().join(":");if(p.has(f))continue;p.add(f),m.push(g)}a.set(A,m),c.set(A,p)}let l=i/2+r;for(let[h,A]of a)for(let m of A)for(let p of o){if(p.connectedTo.includes(h)||Jc(m,p)>=l-Ph)continue;if(Joe)console.error("single-layer route violates obstacle clearance",{netKey:h,segment:m,obstacleId:p.obstacleId,distance:Jc(m,p),requiredObstacleDistance:l});return!1}let d=i+r,u=[...a];for(let h=0;h<u.length;h++)for(let A=h+1;A<u.length;A++)for(let m of u[h][1])for(let p of u[A][1])if(ad(m.start,m.end,p.start,p.end)<d-Ph){if(Joe)console.error("single-layer routes violate copper clearance",{firstNetKey:u[h][0],secondNetKey:u[A][0],first:m,second:p,distance:ad(m.start,m.end,p.start,p.end),requiredRouteDistance:d});return!1}return!0}function lli(e,t){if(Math.abs(e.x-t.minX)<Ph)return"left";if(Math.abs(e.x-t.maxX)<Ph)return"right";if(Math.abs(e.y-t.minY)<Ph)return"down";if(Math.abs(e.y-t.maxY)<Ph)return"up";return null}function*dli(e){let{items:t,grid:n,obstacles:o,traceWidth:i,clearance:r,availableBoundaryRegions:s,onPartialRoutes:a,reportProgress:c}=e,l=s?new Set(s.map((_)=>_.direction)):void 0,d=new Set(t.filter((_)=>_.connection.sourceObstacle.width>2&&_.connection.sourceObstacle.height>2)),u=null;for(let _=0;_<4;_++){let f=t.filter((I)=>!d.has(I)),y=null;for(let I=0;I<4;I++){let b=yield*ali({direction:"any",availableDirections:l,items:f,grid:n,obstacles:o,traceWidth:i,clearance:r,occupiedNodes:new Uint8Array(n.nodeCount),acceptedSegments:[],connectorSelectionOffset:I,reportProgress:c});if(!b)continue;if(a&&b.routes.length>0&&b.routes.length<t.length){let P=b.routes.map((E)=>XJt(E,i));if(KJt({plans:P,items:t,obstacles:o,traceWidth:i,clearance:r}))a(P)}if(!y||b.routes.length>y.routes.length)y=b;if(b.routes.length===f.length)break}if(!y)return null;if(y.routes.length===f.length){u=y;break}let x=new Map;for(let I of f)x.set(I.netKey,(x.get(I.netKey)??0)+1);let C=!1;for(let I of y.unmatchedItems){if((x.get(I.netKey)??0)<2)continue;d.add(I),C=!0}if(!C)return null}if(!u)return null;let h=[...u.routes],A=i/2+r,m=i+r;for(let _ of d){let f=h.filter((x)=>x.item.netKey===_.netKey).flatMap((x)=>x.points.map((C,I)=>({route:x,point:C,pointIndex:I}))).sort((x,C)=>Number(C.route.item.bus.componentId===_.bus.componentId)-Number(x.route.item.bus.componentId===_.bus.componentId)||kt(_.source,x.point)-kt(_.source,C.point)),y=null;for(let x of f){for(let C of cli(_.source,x.point)){let I=EW(C,i),b=I.every((B)=>o.every((w)=>Qrn(w,_)||Jc(B,w)>=A-Ph)),P=I.every((B)=>h.every((w)=>w.item.netKey===_.netKey||w.segments.every((T)=>ad(B.start,B.end,T.start,T.end)>=m-Ph)));if(!b||!P)continue;let E=krn(MCe([...C,...x.route.points.slice(x.pointIndex+1)]));y={item:_,points:E,segments:EW(E,i)};break}if(y)break}if(!y)return null;h.push(y),c({phase:"merge-same-net-routes",processed:h.length,total:t.length,grid:{points:n.points,obstacleFreeNodes:n.obstacleFreeNodes,processedNodeCount:n.nodeCount},segments:h.flatMap((x)=>x.segments)}),yield}let p=h.map((_)=>XJt(_,i));if(!KJt({plans:p,items:t,obstacles:o,traceWidth:i,clearance:r})){if(Joe)console.error("single-layer adaptive exits failed exact clearance");return null}for(let _ of p){let f=lli(_.exitPoint,n.boundary);if(!f||l&&!l.has(f))return null;let y=t.find((I)=>I.connection.connection.name===_.connectionName);y.bus.direction=f;let x=s?.filter((I)=>I.direction===f),C=f==="up"||f==="down"?_.exitPoint.x:_.exitPoint.y;y.bus.preferredExit=x?.toSorted((I,b)=>Math.abs(C-Pxe(I,n.boundary))-Math.abs(C-Pxe(b,n.boundary)))[0]?.preferredExit??(f==="up"?"top":f==="down"?"bottom":f),_.direction=f}let g=new Map(p.map((_)=>[_.connectionName,_]));return t.map((_)=>g.get(_.connection.connection.name))}function*yF(e){let{srj:t,buses:n,traceWidth:o,clearance:i,availableBoundaryRegions:r,onPartialRoutes:s,onProgress:a}=e;if(n.some((p)=>p.connections.length!==1))return null;let c=n.flatMap((p)=>p.connections.map((g)=>({bus:p,connection:g,source:{x:g.sourcePoint.x,y:g.sourcePoint.y},netKey:oli(g)}))),l=t.obstacles.filter((p)=>p.layers.includes("top")),d=n[0]?.sharedBoundary;if(!d)return[];let u=c.map((p)=>p.source),h=(p)=>{a?.(nli({boundary:d,sourcePoints:u,traceWidth:o,update:p}),{adaptivePhase:p.phase,...p.direction?{adaptiveDirection:p.direction}:{},...p.processed!==void 0?{adaptiveWorkUnit:p.processed}:{},...p.total!==void 0?{adaptiveWorkUnitCount:p.total}:{}})};h({phase:"prepare-flow-grid",processed:0,total:l.length});let A=yield*sli({boundary:d,obstacles:l,traceWidth:o,clearance:i,reportProgress:h});if(Joe)console.error("single-layer adaptive-exit grid ready",{nodeCount:A.nodeCount});let m=yield*dli({items:c,grid:A,obstacles:l,traceWidth:o,clearance:i,availableBoundaryRegions:r,onPartialRoutes:s,reportProgress:h});if(m)return m;return null}var x1=0.000000001;function uli(e,t){let n=[e[0]];for(let o=1;o<e.length-1;o++){let i=e[o-1],r=e[o],s=e[o+1],a=r.x-i.x,c=r.y-i.y,l=s.x-r.x,d=s.y-r.y,u=Math.hypot(a,c),h=Math.hypot(l,d);if(u<x1||h<x1)continue;if(Math.abs(a*l+c*d)<x1){let A=Math.min(t,u/2,h/2);n.push({x:r.x-a/u*A,y:r.y-c/u*A},{x:r.x+l/h*A,y:r.y+d/h*A})}else n.push(r)}return n.push(e.at(-1)),n.filter((o,i)=>i===0||kt(o,n[i-1])>x1)}function hli(e,t,n){let o=e.toSorted((a,c)=>Math.atan2(a.exitPoint.y-n.y,a.exitPoint.x-n.x)-Math.atan2(c.exitPoint.y-n.y,c.exitPoint.x-n.x)),i=(a,c)=>{for(let l=0;l<Math.min(a.length,c.length);l++){let d=t.get(a[l].connectionIndex)-t.get(c[l].connectionIndex);if(d)return d<0}return!1},r=(a,c)=>a.length>c.length||a.length===c.length&&i(a,c),s=[];for(let a=o.length-1;a>=0;a--){let c=[];for(let l=a+1;l<o.length;l++)if(t.get(o[l].connectionIndex)>t.get(o[a].connectionIndex)&&r(s[l],c))c=s[l];s[a]=[o[a],...c]}return s.reduce((a,c)=>r(c,a)?c:a,[])}function*mli(e){let{bus:t,srj:n,traceWidth:o,clearance:i,viaDiameter:r}=e;if(t.termination.type!=="boundary"||t.exitEdge!=="right"||t.connections.length<6||t.connections.some((ne)=>ne.sourceLayer!=="top")||!(t.allowedLayers??e.layerNames).includes(e.targetLayer)||e.targetLayer==="top")return null;let s=t.componentObstacles.filter((ne)=>ne.layers.includes("top"));if(!s.length)return null;let a={minX:Math.min(...s.map((ne)=>ne.center.x-ne.width/2)),maxX:Math.max(...s.map((ne)=>ne.center.x+ne.width/2)),minY:Math.min(...s.map((ne)=>ne.center.y-ne.height/2)),maxY:Math.max(...s.map((ne)=>ne.center.y+ne.height/2))},c={x:(a.minX+a.maxX)/2,y:(a.minY+a.maxY)/2},l=o+i,d=Math.max(t.pitchX,t.pitchY);if(!Number.isFinite(d)||d<=0)return null;let u=Math.ceil(((a.maxX-a.minX)/2+d+l)/l)*l,h=Math.ceil(((a.maxY-a.minY)/2+d+l)/l)*l,A={minX:c.x-u,maxX:c.x+u,minY:c.y-h,maxY:c.y+h};if(A.minX<=t.sharedBoundary.minX||A.maxX>=t.sharedBoundary.maxX||A.minY<=t.sharedBoundary.minY||A.maxY>=t.sharedBoundary.maxY)return null;let m=t.connections.map((ne,ce)=>({...t,busId:`${t.busId}:source-perimeter:${ce}`,sharedBoundary:A,preferredExit:void 0,exitEdge:void 0,connections:[{...ne,exitTargetPoint:void 0,hasExplicitLayeredExitTarget:!1,hasExplicitExitTarget:!1}]})),p=yield*yF({srj:n,buses:m,traceWidth:o,clearance:i});if(!p||p.length!==t.connections.length)return null;let g=(ne)=>e.targetPointsByConnectionIndex?.get(ne.connectionIndex)??{x:t.sharedBoundary.maxX,y:(ne.exitTargetPoint??ne.targetPoint).y},_=t.connections.toSorted((ne,ce)=>g(ne).y-g(ce).y||ne.connectionIndex-ce.connectionIndex),f=new Map(_.map((ne,ce)=>[ne.connectionIndex,ce])),y=hli(p,f,c);if(y.length<3||y.length>=t.connections.length||y.some((ne)=>Math.abs(ne.exitPoint.y-A.maxY)>x1&&(Math.abs(ne.exitPoint.x-A.minX)>x1||ne.exitPoint.y<c.y)))return null;let x=new Map(e.buses.flatMap((ne)=>ne.connections.map((ce)=>[ce.connectionIndex,{bus:ne,connection:ce}]))),C=t.sharedBoundary.maxX-Math.max(d/2,r/2+i),I=r/2+o/2+i,P=C-I-0.00001-(y.length-1)*l,B=t.sharedBoundary.maxY-l-(y.length-1)*l;if(P<=a.maxX+I||B<=A.maxY+l)return null;let w=(ne,ce)=>{let oe=x.get(ne.connectionIndex).bus,ie=oe.busId===t.busId?e.targetLayer:oe.termination.type==="plane"?oe.termination.layer:e.targetLayerByBusId?.get(oe.busId)??(oe.allowedLayers??e.layerNames).find((J)=>J!==ne.sourceLayer);if(!ie)throw Error("FanoutSolver: missing target layer for peripheral via assignment");return{center:ce,diameter:r,holeDiameter:e.viaHoleDiameter,fromLayer:ne.sourceLayer,toLayer:ie,spanLayers:Wy({fromLayer:ne.sourceLayer,toLayer:ie,layerNames:e.layerNames,allowBlindAndBuriedVias:e.allowBlindAndBuriedVias??!1})}},T=(ne,ce)=>({connectionIndex:ne.connectionIndex,connectionName:ne.connection.name,segments:ce.slice(1).map((oe,ie)=>({start:ce[ie],end:oe,width:o,layer:ne.sourceLayer})),via:w(ne,ce.at(-1))}),Q=y.map((ne,ce)=>{let oe=x.get(ne.connectionIndex).connection,ie=g(oe),J=B+ce*l,ee=P+ce*l;return T(oe,uli([ne.segments[0].start,...ne.segments.map((se)=>se.end),{x:ne.exitPoint.x,y:J},{x:ee,y:J},{x:ee,y:ie.y},{x:C,y:ie.y}],o))}),N=new Set(Q.map((ne)=>ne.connectionIndex)),F=(ne,ce)=>{let oe=x.get(ne.connectionIndex).connection;if(ne.segments.some((ie)=>[ie.start,ie.end].some((J)=>J.x<t.sharedBoundary.minX-x1||J.x>t.sharedBoundary.maxX+x1||J.y<t.sharedBoundary.minY-x1||J.y>t.sharedBoundary.maxY+x1)))return!1;for(let ie of n.obstacles){if(ie.layers.some((J)=>ne.via.spanLayers.includes(J))&&jy(ne.via.center,ie)<r/2+i-x1)return!1;if(ie!==oe.sourceObstacle&&ne.segments.some((J)=>ie.layers.includes(J.layer)&&Jc(J,ie)<o/2+i-x1))return!1}for(let ie of ce){if(ne.connectionIndex===ie.connectionIndex)continue;if(kt(ne.via.center,ie.via.center)<r+i-x1)return!1;if(ne.segments.some((J)=>Bi(ie.via.center,J.start,J.end)<I-x1)||ie.segments.some((J)=>Bi(ne.via.center,J.start,J.end)<I-x1))return!1;if(ne.segments.some((J)=>ie.segments.some((ee)=>!Jm(J,ee,i))))return!1}return!0};if(Q.some((ne)=>!F(ne,Q)))return null;let H=()=>{let ne=new Set(Q.map((ce)=>ce.connectionIndex));return e.buses.map((ce)=>({...ce,connections:ce.connections.filter((oe)=>!ne.has(oe.connectionIndex))})).filter((ce)=>ce.connections.length)},z=()=>({viaDiameter:r,viaHoleDiameter:e.viaHoleDiameter,traceWidth:o,clearance:i,additionalObstacles:n.obstacles,maximumSearchStates:300000,blockingSegments:Q.flatMap((ne)=>ne.segments.map((ce)=>({connectionIndex:ne.connectionIndex,segment:ce}))),blockingVias:Q.map((ne)=>({connectionIndex:ne.connectionIndex,...ne.via})),preferredViaPointsByConnectionIndex:e.initialViaPoints}),Y=H(),U=new Set(VT(Y,z()).map((ne)=>ne.connectionIndex));for(let ne of Y)for(let ce of ne.connections){if(U.has(ce.connectionIndex))continue;if(ne.termination.type!=="plane")return null;let{sourcePoint:oe,sourceObstacle:ie}=ce,J=[{x:0,y:1,gap:a.maxY-oe.y},{x:-1,y:0,gap:oe.x-a.minX},{x:0,y:-1,gap:oe.y-a.minY},{x:1,y:0,gap:a.maxX-oe.x}].sort((se,le)=>se.gap-le.gap),ee=null;for(let se of J){for(let le=0;le<8;le++){let he=(se.x?ie.width:ie.height)/2+r/2+i+0.00001+le*o,ue=T(ce,[oe,{x:oe.x+se.x*he,y:oe.y+se.y*he}]);if(F(ue,Q)){ee=ue;break}}if(ee)break}if(!ee)return null;Q.push(ee)}Y=H();let X=z(),V=qu(Y,X);if(!V)return null;yield;let W=tli({buses:Y,busId:t.busId,rules:{...X,preferredViaPointsByConnectionIndex:V}});if(!W)return null;let j=[...Q,...Y.flatMap((ne)=>ne.connections.map((ce)=>T(ce,[ce.sourcePoint,W.get(ce.connectionIndex)])))];if(j.some((ne)=>!F(ne,j)))return null;let q=new Map(j.map((ne)=>[ne.connectionIndex,ne.via.center]));return{sourceEscapes:j,viaPointsByConnectionIndex:q,remoteConnectionIndices:N,localBus:Y.find((ne)=>ne.busId===t.busId),sourceBoundary:A}}function*pli(e){let{srj:t,bus:n,targetLayer:o,sourceBoundary:i,sourceEscapes:r,remoteConnectionIndices:s,traceWidth:a,clearance:c}=e;if(n.exitEdge!=="right"||n.termination.type!=="boundary")return null;let l=a+c,d=Math.min(n.pitchX,n.pitchY),u=new Map(r.map((N)=>[N.connectionIndex,N])),h=n.connections.map((N)=>{let F=u.get(N.connectionIndex);if(!F)throw Error(`FanoutSolver: missing source escape for ${N.connection.name}`);let H=N.exitTargetPoint??N.targetPoint;return{connection:N,viaPoint:F.via.center,exitPoint:{x:n.sharedBoundary.maxX,y:H.y}}}).sort((N,F)=>N.exitPoint.y-F.exitPoint.y),A=h.filter((N)=>!s.has(N.connection.connectionIndex));if(A.length<2||A.length===h.length)return null;let m=Math.min(...n.componentObstacles.map((N)=>N.center.x-N.width/2)),p=Math.max(...A.map((N)=>N.viaPoint.x))-a/2,g=m+e.viaDiameter/2;if(p-g<(A.length-1)*l)return null;let _=i.maxY,f={minX:m-d,maxX:Math.max(...A.map((N)=>N.viaPoint.x))+2*d,minY:Math.min(...A.map((N)=>N.viaPoint.y))-3*d,maxY:_},y=new Set(A.map((N)=>N.connection.connectionIndex)),x=A.map((N,F)=>({...N,exitPoint:{x:p+(g-p)*F/(A.length-1),y:_}})),C={...n,exitEdge:"top",direction:"up",preferredExit:void 0,sharedBoundary:f,connections:A.map((N)=>N.connection)},I=new Map(r.map((N)=>[N.connectionIndex,[N.segments[0].start,...N.segments.map((F)=>F.end)]])),b;for(let N of[-1,0,1]){let F=yield*Kg({...e,bus:C,srj:{...t,bounds:f},acceptedPlans:[],terminals:x,sourceEscapePaths:I,reservedVias:r.filter((H)=>!y.has(H.connectionIndex)).map((H)=>({connectionName:H.connectionName,via:H.via})),allowBlindAndBuriedVias:!1,allowSameNetMerges:!1,gridStepDivisor:2,gridStep:l/4,alignGridToPads:!0,maximumRouteOrderAttempts:1,routeOrder:A.map((H,z)=>A.length-z-1),laneBias:N},1,!1);if(F.length){b=F[0];break}}if(!b)return null;let P=new Map(b.map((N)=>[N.connectionIndex,N])),E=_+d,B=n.sharedBoundary.maxX-(A.length+1)*l-2*e.viaDiameter;if(E+(A.length-1)*l+a/2>n.sharedBoundary.maxY)return null;let w=0,T=[];for(let N of h){let F=u.get(N.connection.connectionIndex),H=P.get(N.connection.connectionIndex),z;if(H){let Y=H.segments.filter((ce)=>ce.layer===o),U=Y.at(-1),X=U.end.x-U.start.x,V=U.end.y-U.start.y;if(V<=0||Math.abs(X)>V+0.0000001)return null;let W=U.end,j=E+w*l,q=B+w*l;w++;let ne=Ali([W,{x:W.x,y:j},{x:q,y:j},{x:q,y:N.exitPoint.y},N.exitPoint],a);z=[Y[0].start,...Y.map((ce)=>ce.end),...ne.slice(1)]}else z=[F.via.center,N.exitPoint];T.push(cb({...e,bus:n,terminal:N,targetLayerPoints:z,sourceEscapePoints:I.get(N.connection.connectionIndex),allowBlindAndBuriedVias:!1}))}let Q=T.map((N)=>N.length);if(n.maxLengthSkew!==void 0&&Math.max(...Q)-Math.min(...Q)>n.maxLengthSkew+0.000001)return null;if(!Kh({plans:T,srj:t,sharedBoundary:n.sharedBoundary,clearance:c,allowBlindAndBuriedVias:!1,allowSameNetMerges:!1}))return null;for(let N of T)for(let F of r){if(N.connectionIndex===F.connectionIndex)continue;for(let H of N.segments){if(F.via.spanLayers.includes(H.layer)&&Bi(F.via.center,H.start,H.end)<F.via.diameter/2+H.width/2+c-0.0000001)return null;for(let z of F.segments)if(H.layer===z.layer&&ad(H.start,H.end,z.start,z.end)<(H.width+z.width)/2+c-0.0000001)return null}}return T}function Ali(e,t){let n=e.filter((o,i)=>i===0||kt(o,e[i-1])>0.000000001);return n.flatMap((o,i)=>{if(i===0||i===n.length-1)return[o];let r=n[i-1],s=n[i+1],a=Math.min(t,kt(r,o)/3,kt(o,s)/3);if(Math.abs((o.x-r.x)*(s.x-o.x)+(o.y-r.y)*(s.y-o.y))>0.000000001)return[o];return[{x:o.x+(r.x-o.x)*a/kt(r,o),y:o.y+(r.y-o.y)*a/kt(r,o)},{x:o.x+(s.x-o.x)*a/kt(o,s),y:o.y+(s.y-o.y)*a/kt(o,s)}]})}function*_li(e){let{bus:t,sourceBoundary:n,sourceEscapes:o,traceWidth:i,clearance:r,targetLayer:s}=e,a=Mr(t.exitEdge,t.preferredExit);if(e.allowBlindAndBuriedVias||t.exitEdge!=="right"||a!==void 0&&a!=="minimum"||t.connections.length<3)return null;let c=t.routableEscapeLayers??t.allowedLayers??[],l=c.find((U)=>U!==s);if(!l||!c.includes(s)||t.connections.some((U)=>U.sourceLayer===s))return null;let d=new Map(o.map((U)=>[U.connectionIndex,U])),u=i+r,h=Math.min(t.pitchX,t.pitchY),A=e.viaDiameter+r,m=t.sharedBoundary.minX+Math.max(h/2,e.viaDiameter/2+r);if(m+(t.connections.length-1)*A>=n.minX)return null;let p=e.acceptedPlans.filter((U)=>U.exitEdge===t.exitEdge&&U.cornerBandSide==="minimum").length,g=t.connections.map((U)=>{let X=d.get(U.connectionIndex);if(!X)throw Error(`FanoutSolver: missing crossbar source escape for ${U.connection.name}`);return{connection:U,viaPoint:X.via.center,exitPoint:{x:t.sharedBoundary.maxX,y:a?HS({...e,connection:U,cornerExitLaneOffset:p}):HS({...e,bus:{...t,preferredExit:"bottom-right"},connection:U,cornerExitLaneOffset:p,windingOrderIndex:0})}}}),_=g.toSorted((U,X)=>U.exitPoint.y-X.exitPoint.y);if(!a)for(let[U,X]of _.entries())X.exitPoint.y=n.minY+h+U*A;let f=new Map(_.map((U)=>[U.connection.connectionIndex,U.exitPoint.y])),y=Math.min(n.maxY-u,Math.max(...g.map((U)=>U.viaPoint.y))+2*h),x=Math.max(n.minY+u,Math.min(...g.map((U)=>U.viaPoint.y))-2*h,...a?[]:[Math.max(...f.values())+e.viaDiameter/2+i/2+r+u]);if(y-x<(g.length-1)*A||x<=Math.max(...f.values())+e.viaDiameter/2+i/2+r)return null;let C=new Map(o.map((U)=>[U.connectionIndex,[U.segments[0].start,...U.segments.map((X)=>X.end)]])),I=[...e.srj.obstacles.filter((U)=>U.layers.includes(s)).map((U)=>({...U,layers:["top"]})),...o.map((U)=>({type:"rect",shape:"circle",center:U.via.center,width:U.via.diameter,height:U.via.diameter,layers:["top"],connectedTo:[U.connectionName]}))];for(let U=n.minY;U<=n.maxY;U+=u)if(U<x||U>y)I.push({type:"rect",shape:"circle",center:{x:n.minX,y:U},width:i/1000,height:i/1000,layers:["top"],connectedTo:["blocked-port"]});let b=g.map((U,X)=>({...t,busId:t.busId+":"+X,sharedBoundary:n,preferredExit:void 0,exitEdge:void 0,connections:[{...U.connection,sourcePoint:{...U.viaPoint,layer:"top"},sourceLayer:"top",sourceObstacle:I.find((V)=>V.connectedTo.includes(U.connection.connection.name)&&kt(V.center,U.viaPoint)<0.0000001),exitTargetPoint:void 0,hasExplicitLayeredExitTarget:!1,hasExplicitExitTarget:!1}]})),P=yF({srj:{...e.srj,obstacles:I},buses:b,traceWidth:i,clearance:r,availableBoundaryRegions:[{exitEdge:"left",direction:"left",preferredExit:"left"}]}),E=P.next();while(!E.done)yield{phase:"route-connection",routeOrderAttempt:0,connectionIndex:0,connectionCount:g.length,connectionName:g[0].connection.connection.name,searchBatch:0,expandedStateCount:0,connectionComplete:!1},E=P.next();let B=E.value?.length===g.length?E.value.map((U)=>{let X=g.find((V)=>V.connection.connectionIndex===U.connectionIndex);return cb({...e,terminal:{...X,exitPoint:U.exitPoint},sourceEscapePoints:C.get(U.connectionIndex),targetLayerPoints:[U.segments[0].start,...U.segments.map((V)=>V.end)],allowBlindAndBuriedVias:!1})}):void 0;if(!B)return null;let w=B.toSorted((U,X)=>a?U.exitPoint.y-X.exitPoint.y:g.find((V)=>V.connection.connectionIndex===U.connectionIndex).exitPoint.y-g.find((V)=>V.connection.connectionIndex===X.connectionIndex).exitPoint.y),T=(U,X,V)=>({center:U,diameter:e.viaDiameter,holeDiameter:e.viaHoleDiameter,fromLayer:X,toLayer:V,spanLayers:Wy({fromLayer:X,toLayer:V,layerNames:e.layerNames,allowBlindAndBuriedVias:!1})}),Q=new Map;for(let[U,X]of w.entries()){let V=X.segments.at(-1),W=V.end.x-V.start.x,j=V.end.y-V.start.y;if(W>=0||Math.abs(j)>-W+0.0000001)return null;let q=g.find((J)=>J.connection.connectionIndex===X.connectionIndex),ne=m+U*A,ce={x:ne,y:X.exitPoint.y},oe={x:ne,y:f.get(X.connectionIndex)},ie=[{start:X.exitPoint,end:ce,width:i,layer:s},{start:ce,end:oe,width:i,layer:l}];Q.set(X.connectionIndex,{...X,segments:[...X.segments,...ie],additionalVias:[T(ce,s,l),T(oe,l,s)],direction:t.direction,exitEdge:t.exitEdge,cornerBandSide:Mr(t.exitEdge,t.preferredExit),exitPoint:q.exitPoint})}let N=[...Q.values()],F=g.map((U)=>({...U.connection,sourcePoint:{...Q.get(U.connection.connectionIndex).additionalVias[1].center,layer:s},sourceLayer:s})),H={...e,bus:{...t,connections:F},terminals:F.map((U,X)=>({connection:U,viaPoint:U.sourcePoint,exitPoint:g[X].exitPoint})),acceptedPlans:[...e.acceptedPlans,...N],reservedVias:[...o.map((U)=>({connectionName:U.connectionName,via:U.via})),...N.flatMap((U)=>U.additionalVias.map((X)=>({connectionName:U.connectionName,via:X})))],allowSourceLayerRouting:!0,sourceEscapePaths:void 0,gridStep:u*3/8,gridStepDivisor:2,alignGridToPads:!0,maximumRouteOrderAttempts:6,routeOrder:g.map((U,X)=>X).sort((U,X)=>g[U].exitPoint.y-g[X].exitPoint.y)},z=yield*Kg(H,1,!1);if(!z.length)return null;let Y=B.map((U)=>{let X=Q.get(U.connectionIndex),V=z[0].find((oe)=>oe.connectionIndex===U.connectionIndex),[W,j]=X.additionalVias,q=(oe,ie)=>({route_type:"wire",...oe,width:i,layer:ie}),ne=(oe)=>({route_type:"via",...oe.center,from_layer:oe.fromLayer,to_layer:oe.toLayer,via_diameter:oe.diameter,via_hole_diameter:oe.holeDiameter}),ce=[...X.segments,...V.segments];return{...X,segments:ce,trace:{...U.trace,route:[...U.trace.route,q(W.center,s),ne(W),q(W.center,l),q(j.center,l),ne(j),...V.trace.route]},length:ce.reduce((oe,ie)=>oe+kt(ie.start,ie.end),0)}});if(!Kh({...e,plans:[...e.acceptedPlans,...Y],sharedBoundary:t.sharedBoundary}))return null;for(let U of Y)for(let X of o){if(U.connectionIndex===X.connectionIndex)continue;for(let V of U.segments){if(X.via.spanLayers.includes(V.layer)&&Bi(X.via.center,V.start,V.end)<X.via.diameter/2+i/2+r-0.0000001)return null;for(let W of X.segments)if(W.layer===V.layer&&ad(V.start,V.end,W.start,W.end)<i+r-0.0000001)return null}for(let V of U.additionalVias){if(kt(V.center,X.via.center)<e.viaDiameter+r-0.0000001)return null;for(let W of X.segments)if(V.spanLayers.includes(W.layer)&&Bi(V.center,W.start,W.end)<e.viaDiameter/2+i/2+r-0.0000001)return null}}return Y}function Exe(e){let t=new Map,n=(o)=>{if(o===null||typeof o!=="object")return o;if(t.has(o))return t.get(o);if(o instanceof Map){let a=new Map;t.set(o,a);for(let[c,l]of o)a.set(c,n(l));return a}if(o instanceof Set){let a=new Set(o);return t.set(o,a),a}if(Array.isArray(o)){let a=[];t.set(o,a);for(let c of o)a.push(n(c));return a}let i=o,r={};t.set(o,r);for(let[a,c]of Object.entries(i))r[a]=n(c);if(typeof i.x==="number"&&typeof i.y==="number")r.x=-i.x;if(typeof i.minX==="number"&&typeof i.maxX==="number")r.minX=-i.maxX,r.maxX=-i.minX;if(Array.isArray(i.xCoordinates))r.xCoordinates=i.xCoordinates.map((a)=>-a).sort((a,c)=>a-c);if(typeof i.ccwRotationDegrees==="number")r.ccwRotationDegrees=-i.ccwRotationDegrees;let s=(a)=>a==="left"?"right":a==="right"?"left":a;for(let a of["direction","exitEdge","preferredExit"])if(typeof i[a]==="string")r[a]=i[a].split("-").map(s).join("-");if(i.cornerBandSide&&(i.exitEdge==="top"||i.exitEdge==="bottom"))r.cornerBandSide=i.cornerBandSide==="minimum"?"maximum":"minimum";return r};return n(e)}function*Lrn(e){let{bus:t,srj:n,sourceEscapes:o,sourceBoundary:i,targetLayer:r,acceptedPlans:s,traceWidth:a,clearance:c,viaDiameter:l}=e,d=t.exitEdge==="left",u=d?e.oppositeLayout:void 0,h=t.routableEscapeLayers??t.allowedLayers??[],A=t.connections[0].sourceLayer,m=d?h.find((ve)=>ve!==r):A;if(t.termination.type!=="boundary"||t.exitEdge!=="right"&&!d||!m||!h.includes(r)||m===r||!(t.routableEscapeLayers??t.allowedLayers??[]).includes(m))return null;let p=Mr(t.exitEdge,t.preferredExit)==="minimum",g=t.connections.length,_=a+c,f=Math.ceil((l+c)/_)*_,y=new Map(o.map((ve)=>[ve.connectionIndex,ve])),x=t.connections.map((ve)=>y.get(ve.connectionIndex));if(g<2||x.some((ve)=>!ve))return null;let C=x.map((ve)=>ve.via.center),I=Math.round(((d?(i.minX+i.maxX)/2+(u?.sourcePortOffset??0):Math.min(...C.map((ve)=>ve.x)))+f-i.minX)/_),b=Math.round(f/_),P=new Set(Array.from({length:g},(ve,De)=>I+De*b)),E=Math.round((i.maxX-i.minX)/_);if(I<1||Math.max(...P)>=E)return null;let B=(ve,De,Ze)=>({type:"rect",shape:"circle",center:De,width:Ze,height:Ze,layers:["top"],connectedTo:[ve]}),w=[...n.obstacles.filter((ve)=>ve.layers.includes(r)).map((ve)=>({...ve,layers:["top"]})),...o.map((ve)=>B(ve.connectionName,ve.via.center,ve.via.diameter)),...s.flatMap((ve)=>(ve.additionalVias??[]).map((De)=>B(ve.connectionName,De.center,De.diameter))),...s.flatMap((ve)=>ve.segments.filter((De)=>De.layer===r).map((De)=>({type:"rect",center:{x:(De.start.x+De.end.x)/2,y:(De.start.y+De.end.y)/2},width:kt(De.start,De.end),height:De.width,ccwRotationDegrees:Math.atan2(De.end.y-De.start.y,De.end.x-De.start.x)*180/Math.PI,layers:["top"],connectedTo:[ve.connectionName]})))];for(let ve=0;ve<=E;ve++)if(!P.has(ve))w.push(B(`reserved-crossbar-port-${ve}`,{x:i.minX+ve*_,y:i.minY},a/1000));let T=t.connections.map((ve,De)=>{let Ze=C[De],st=w.find((et)=>et.connectedTo.includes(ve.connection.name)&&kt(et.center,Ze)<0.0000001);return{...t,busId:`${t.busId}:source-${De}`,sharedBoundary:i,preferredExit:void 0,exitEdge:void 0,connections:[{...ve,sourcePoint:{...ve.sourcePoint,...Ze,layer:"top"},sourceObstacle:st,sourceLayer:"top",exitTargetPoint:void 0,hasExplicitLayeredExitTarget:!1,hasExplicitExitTarget:!1}]}}),Q=yF({srj:{...n,bounds:i,obstacles:w},buses:T,traceWidth:a,clearance:c,availableBoundaryRegions:[{direction:"down",preferredExit:"bottom",exitEdge:"bottom"}]}),N=Q.next();while(!N.done)yield{phase:"route-connection",routeOrderAttempt:0,connectionIndex:0,connectionCount:g,connectionName:t.connections[0].connection.name,searchBatch:0,expandedStateCount:0,connectionComplete:!1},N=Q.next();if(!N.value||N.value.length!==g)return null;let F=new Map(N.value.map((ve)=>[ve.connectionIndex,ve])),H=(ve)=>Mr(t.exitEdge,t.preferredExit)!==void 0?HS({...e,connection:ve,cornerExitLaneOffset:0}):lF({...e,connection:ve,boundaryDirection:d?"left":"right"}),z=t.connections.toSorted((ve,De)=>H(ve)-H(De)),Y=Math.max(...t.componentObstacles.map((ve)=>ve.center.x+ve.width/2)),U=o.filter((ve)=>ve.via.center.x>i.maxX).map((ve)=>ve.via.center.x),X=U.length?Math.min(...U):t.sharedBoundary.maxX,V=l/2+a/2+c,W=p||u?.compactRows?Math.max(V,(l+c)/Math.SQRT2)+0.00001:f,j=Math.min(...s.flatMap((ve)=>ve.segments).filter((ve)=>ve.layer!==m).flatMap((ve)=>[ve.start.y,ve.end.y])),q=Math.min(i.minY-l/2-c-(u?.rowOffset??0),p?j-V-0.00001:1/0),ne=q-(g-1)*W,ce=o.flatMap((ve)=>ve.segments).filter((ve)=>ve.layer===m&&(!p||Math.max(ve.start.x,ve.end.x)>=Math.min(...[...F.values()].map((De)=>De.exitPoint.x))-V)&&Math.min(ve.start.y,ve.end.y)<=q+V&&Math.max(ve.start.y,ve.end.y)>=ne-V),oe=ce.length?Math.min(...ce.map((ve)=>Math.min(ve.start.x,ve.end.x)))-V-0.00001:t.sharedBoundary.maxX,ie=Math.min(t.sharedBoundary.maxX-l-c,X-V-a,oe),J=[...o.map((ve)=>ve.via),...s.flatMap((ve)=>ve.additionalVias??[])].filter((ve)=>ve.spanLayers.includes(r)).map((ve)=>({minimum:ve.center.x-ve.diameter/2-a/2-c-0.00001,maximum:ve.center.x+ve.diameter/2+a/2+c+0.00001})),ee=Array.from({length:g},(ve,De)=>ie-De*W),se=[];if(ee.every((ve)=>J.every((De)=>ve<De.minimum||ve>De.maximum)))se.push(...ee);else{let ve=ie;for(let De=0;De<g;De++){for(let Ze=0;Ze<=J.length;Ze++){let st=J.filter((et)=>ve>=et.minimum&&ve<=et.maximum);if(!st.length)break;ve=Math.min(...st.map((et)=>et.minimum))-0.0000001}se.push(ve),ve-=p?W:l+c}}let le=se.at(-1),he=[...o.map((ve)=>ve.via),...s.flatMap((ve)=>ve.additionalVias??[])].filter((ve)=>ve.spanLayers.includes(r)&&ve.center.x+ve.diameter/2+a/2+c>=(d?t.sharedBoundary.minX:le)&&ve.center.x-ve.diameter/2-a/2-c<=t.sharedBoundary.maxX).map((ve)=>({minimum:ve.center.y-ve.diameter/2-a/2-c-a/100,maximum:ve.center.y+ve.diameter/2+a/2+c+a/100})),ue=[],Ae=t.sharedBoundary.maxY-a/2;for(let ve=g-1;ve>=0;ve--){for(let De=0;De<=he.length;De++){let Ze=he.filter((st)=>Ae>=st.minimum&&Ae<=st.maximum);if(!Ze.length)break;Ae=Math.min(...Ze.map((st)=>st.minimum))-0.0000001}ue[ve]=Ae,Ae-=l+c}if(p)ue.splice(0,ue.length,...z.map(H));let _e=ue[0],Pe=q;if(Pe-(g-1)*W-l/2<t.sharedBoundary.minY||le<=Math.max(...[...F.values()].map((ve)=>ve.exitPoint.x))+V||!p&&_e<=(t.sharedBoundary.minY+t.sharedBoundary.maxY)/2)return null;let Ee=z.map((ve,De)=>{let Ze=F.get(ve.connectionIndex),st=y.get(ve.connectionIndex),et=ue[De];return{connectionIndex:ve.connectionIndex,length:st.segments.reduce((lt,it)=>lt+kt(it.start,it.end),0)+(u?.compactRows?2*se[g-1-De]:0)+Ze.length+et-Ze.exitPoint.x}}).sort((ve,De)=>De.length-ve.length),Te=new Map(Ee.map((ve,De)=>[ve.connectionIndex,De])),be=(ve,De)=>ve.slice(1).flatMap((Ze,st)=>kt(ve[st],Ze)<0.000000001?[]:[{start:ve[st],end:Ze,width:a,layer:De}]),me=(ve,De)=>ve.map((Ze)=>({route_type:"wire",...Ze,width:a,layer:De})),ye=(ve)=>({route_type:"via",...ve.center,from_layer:ve.fromLayer,to_layer:ve.toLayer,via_diameter:ve.diameter,via_hole_diameter:ve.holeDiameter}),Ce=z.map((ve,De)=>{let Ze=y.get(ve.connectionIndex),st=F.get(ve.connectionIndex),et=Pe-Te.get(ve.connectionIndex)*W,lt={x:st.exitPoint.x,y:et},it={x:se[d?g-1-De:De],y:et},gt={x:d?t.sharedBoundary.minX:t.sharedBoundary.maxX,y:ue[De]},wt=[Ze.segments[0].start,...Ze.segments.map((ut)=>ut.end)],Dt=[st.segments[0].start,...st.segments.map((ut)=>ut.end),lt],vt=[it,{x:it.x,y:gt.y-Math.sign(gt.y-it.y)*a},{x:it.x+(d?-a:a),y:gt.y},gt],Ht=cb({...e,terminal:{connection:ve,viaPoint:Ze.via.center,exitPoint:gt},sourceEscapePoints:wt,targetLayerPoints:[Ze.via.center,gt],allowBlindAndBuriedVias:!1}),Xt=[{center:lt,diameter:l,holeDiameter:e.viaHoleDiameter,spanLayers:e.layerNames,fromLayer:r,toLayer:m},{center:it,diameter:l,holeDiameter:e.viaHoleDiameter,spanLayers:e.layerNames,fromLayer:m,toLayer:r}];return Ht.segments=[...Ze.segments,...be(Dt,r),...be([lt,it],m),...be(vt,r)],Ht.additionalVias=Xt,Ht.sourceEscapeSegmentCount=Ze.segments.length,Ht.length=Ht.segments.reduce((ut,je)=>ut+kt(je.start,je.end),0),Ht.trace.route=[...me(wt,A),ye(Ht.via),...me(Dt,r),ye(Xt[0]),...me([lt,it],m),ye(Xt[1]),...me(vt,r)],Ht});if(t.maxLengthSkew!==void 0&&!u?.compactRows){let ve=Ce.map((De)=>De.length);if(Math.max(...ve)-Math.min(...ve)>t.maxLengthSkew+0.000001)return null}if(!Kh({...e,plans:[...s,...Ce],sharedBoundary:t.sharedBoundary}))return null;for(let ve of Ce)for(let De of o){if(ve.connectionIndex===De.connectionIndex)continue;for(let Ze of ve.segments){if(De.via.spanLayers.includes(Ze.layer)&&Bi(De.via.center,Ze.start,Ze.end)<De.via.diameter/2+a/2+c-0.0000001)return null;for(let st of De.segments)if(Ze.layer===st.layer&&ad(Ze.start,Ze.end,st.start,st.end)<(a+st.width)/2+c-0.0000001)return null}for(let Ze of ve.additionalVias){if(kt(Ze.center,De.via.center)<(Ze.diameter+De.via.diameter)/2+c-0.0000001)return null;for(let st of De.segments)if(Ze.spanLayers.includes(st.layer)&&Bi(Ze.center,st.start,st.end)<Ze.diameter/2+st.width/2+c-0.0000001)return null}}return Ce}function*gli(e){if(e.bus.exitEdge!=="right")return null;let t=Exe(e),n=Math.min(e.bus.pitchX,e.bus.pitchY),o=e.traceWidth+e.clearance,i=Math.ceil((e.viaDiameter+e.clearance)/o)*o,r=Math.max(0,Math.min(8,Math.floor(((t.sourceBoundary.maxX-t.sourceBoundary.minX)/2-e.bus.connections.length*i-o)/n))),s=[void 0,{sourcePortOffset:-n,rowOffset:0,compactRows:!1},...[0,1,2,3].map((l)=>({sourcePortOffset:-n,rowOffset:l*o,compactRows:!0})),...Array.from({length:r},(l,d)=>r-d).flatMap((l)=>[0,1,2,3].map((d)=>({sourcePortOffset:l*n,rowOffset:d*o,compactRows:!0})))],a=null;for(let l of s)if(a=yield*Lrn({...t,oppositeLayout:l}),a)break;if(!a)return null;let c=new Map(e.bus.connections.map((l)=>[l.connectionIndex,l]));return Exe(a).map((l)=>({...l,sourceObstacle:c.get(l.connectionIndex).sourceObstacle}))}function jJt(e){let{bus:t,targetLayer:n,traceWidth:o,clearance:i}=e;if(!t.exitEdge)return[];let r=t.exitEdge==="left"||t.exitEdge==="right",s=r?"y":"x",a=r?"x":"y",c=t.sharedBoundary,l=t.exitEdge==="left"?c.minX:t.exitEdge==="right"?c.maxX:t.exitEdge==="bottom"?c.minY:c.maxY,d=r?c.minY:c.minX,u=r?c.maxY:c.maxX,h=(d+u)/2,A=Mr(t.exitEdge,t.preferredExit),m=(A==="maximum"?h:d)+o/2,p=(A==="minimum"?h:u)-o/2,g=[];for(let C of e.acceptedPlans)for(let I of[...C.segments,...C.planeEndpointSegments??[]]){if(I.layer!==n)continue;let b=(I.width+o)/2+i,P=I.start[a],E=I.end[a]-P,B=0,w=1;if(Math.abs(E)<0.000000001){if(Math.abs(P-l)>b)continue}else{let H=(l-b-P)/E,z=(l+b-P)/E;if(B=Math.max(0,Math.min(H,z)),w=Math.min(1,Math.max(H,z)),B>w)continue}let T=I.start[s],Q=I.end[s]-T,N=T+B*Q,F=T+w*Q;g.push([Math.min(N,F)-b,Math.max(N,F)+b])}let _=[...e.acceptedPlans.flatMap((C)=>[...C.via?[C.via]:[],...C.additionalVias??[],...C.planeEndpointVia?[C.planeEndpointVia]:[]]),...(e.reservedVias??[]).map((C)=>C.via)];for(let C of _){if(!C.spanLayers.includes(n))continue;let I=C.diameter/2+o/2+i,b=Math.abs(C.center[a]-l);if(b>=I)continue;let P=Math.sqrt(I*I-b*b);g.push([C.center[s]-P,C.center[s]+P])}let f=[],y=m;for(let[C,I]of g.sort((b,P)=>b[0]-P[0])){if(I<=y||C>=p)continue;if(C>y)f.push([y,Math.min(C,p)]);if(y=Math.max(y,I),y>=p)break}if(y<p)f.push([y,p]);let x=f.filter(([C,I])=>I-C>0.000001).map(([C,I])=>(C+I)/2);return x.length<=32?x:Array.from({length:32},(C,I)=>x[Math.round(I*(x.length-1)/31)])}function*fli(e){if(e.buses.some((m)=>m.termination.type!=="boundary"||m.connections.length>2))return null;let t=0,n=192,o=e.traceWidth+e.clearance;function*i(m,p,g=m.preferredExit,_=0){if(t++>=n)return[];return yield*SCe({...e,bus:{...m,preferredExit:g},acceptedPlans:p,reservedVias:e.reservedVias?.filter((f)=>!m.connections.some((y)=>y.connection.name===f.connectionName)),viaMinimalOnly:!0,adaptiveWindingRouteOrder:!0,alignWindingGridToPads:!0,windingGridStep:o/2,fixedViaFallbackRouteOrderAttempts:32,cornerBandTargetTrackOffset:_},1,!1)}let r=(m)=>m.map((p)=>{let g=e.buses.find((_)=>_.busId===p.busId);return g?{...p,cornerBandSide:Mr(g.exitEdge,g.preferredExit)}:p}),s=[...e.acceptedPlans];for(let m of e.buses){let p=yield*i(m,s);if(!p.length){s=[];break}s.push(...p[0])}if(s.length)return r(s.slice(e.acceptedPlans.length));let a=(m,p)=>m.connections.reduce((g,_)=>g+(e.fixedViaPointsByConnectionIndex?.get(_.connectionIndex)??_.sourcePoint)[p],0)/m.connections.length;if(e.buses.length>1)for(let m of[1,-1]){let p=e.buses.toSorted((_,f)=>{let y=Mr(_.exitEdge,_.preferredExit)!==void 0,x=Mr(f.exitEdge,f.preferredExit)!==void 0;if(y!==x)return Number(x)-Number(y);let C=_.exitEdge==="left"||_.exitEdge==="right"?"y":"x";return m*(a(_,C)-a(f,C))}),g=[...e.acceptedPlans];for(let _ of p){let f=yield*i(_,g);if(!f.length){g=[];break}g.push(...f[0])}if(g.length)return r(g.slice(e.acceptedPlans.length))}let c=e.buses.toSorted((m,p)=>{let g=Mr(m.exitEdge,m.preferredExit),_=Mr(p.exitEdge,p.preferredExit),f=g==="minimum",y=_==="minimum";if(f!==y)return Number(y)-Number(f);if(f)return a(m,"y")-a(p,"y");if(m.connections.length!==p.connections.length)return m.connections.length-p.connections.length;if(m.connections.length===1)return a(m,"x")-a(p,"x");if(g!==_)return Number(g==="maximum")-Number(_==="maximum");return(g==="maximum"?1:-1)*(a(m,"y")-a(p,"y"))});if(e.buses.length>1){let m=c.toSorted((f,y)=>{let x=(C)=>C.connections.length===1&&!Mr(C.exitEdge,C.preferredExit);return Number(x(y))-Number(x(f))}),p=Math.min(n,t+48);function*g(f,y){if(f===m.length)return y;if(t>=p)return null;let x=m[f],C=yield*i(x,y);for(let b of C){let P=yield*g(f+1,[...y,...b]);if(P)return P}let I=yield*l(x,y,p);for(let b of I){let P=yield*g(f+1,[...y,...b]);if(P)return P}return null}let _=yield*g(0,[...e.acceptedPlans]);if(_)return r(_.slice(e.acceptedPlans.length))}function*l(m,p,g){if(!m.exitEdge)return[];let _=e.reservedVias?.filter((B)=>!m.connections.some((w)=>w.connection.name===B.connectionName)),f={...e,bus:m,acceptedPlans:p,reservedVias:_},y=Mr(m.exitEdge,m.preferredExit),x=m.exitEdge==="left"||m.exitEdge==="right",C=m.sharedBoundary,I=x?C.minY:C.minX,b=x?C.maxY:C.maxX,P=(I+b)/2,E=[];for(let B of jJt(f)){if(t>=g)break;let w=y?m.preferredExit:d(m).find((Y)=>Mr(m.exitEdge,Y)===(B>P?"maximum":"minimum")),T=m.connections.map((Y)=>HS({...f,bus:{...m,preferredExit:w},connection:Y,cornerExitLaneOffset:0,windingOrderIndex:0})),Q=T.reduce((Y,U)=>Y+U,0)/T.length,N=T.map((Y)=>Y-Q+B);if(N.some((Y)=>Y<=I+e.traceWidth/2||Y>=b-e.traceWidth/2||y==="minimum"&&Y>=P||y==="maximum"&&Y<=P))continue;let F=m.connections.map((Y,U)=>{let X=e.fixedViaPointsByConnectionIndex?.get(Y.connectionIndex),V=N[U],W=m.exitEdge==="left"?{x:C.minX,y:V}:m.exitEdge==="right"?{x:C.maxX,y:V}:m.exitEdge==="bottom"?{x:V,y:C.minY}:{x:V,y:C.maxY};return{connection:Y,viaPoint:X,exitPoint:W}});if(F.some((Y)=>!Y.viaPoint))return[];t++;let H=Kg({...f,terminals:F,gridStep:o/2,alignGridToPads:!0,maximumRouteOrderAttempts:m.connections.length===1?3:16,adaptiveRouteOrder:!0},1,!1),z=H.next();while(!z.done)yield{phase:"via-minimal-winding",busId:m.busId,targetLayer:e.targetLayer,winding:z.value},z=H.next();E.push(...z.value)}return E}function d(m){if(Mr(m.exitEdge,m.preferredExit))return[m.preferredExit];switch(m.exitEdge){case"right":return[m.preferredExit,"top-right","bottom-right"];case"left":return[m.preferredExit,"top-left","bottom-left"];case"top":return[m.preferredExit,"top-left","top-right"];case"bottom":return[m.preferredExit,"bottom-left","bottom-right"];default:return[m.preferredExit]}}function u(m,p,g){let _=Mr(m.exitEdge,g);if(!_||e.buses.length>1)return[0];let f=m.exitEdge==="left"||m.exitEdge==="right",y=f?m.sharedBoundary.minY:m.sharedBoundary.minX,x=f?m.sharedBoundary.maxY:m.sharedBoundary.maxX,C=(y+x)/2,I=p.filter((Q)=>Q.exitEdge===m.exitEdge&&Q.cornerBandSide===_).length,b=m.connections.map((Q)=>HS({...e,bus:{...m,preferredExit:g},connection:Q,cornerExitLaneOffset:I,windingOrderIndex:0})),P=_==="minimum"?-1:1,E=Math.min(m.pitchX,m.pitchY),B=b.reduce((Q,N)=>Q+N,0)/b.length,w=_==="minimum"?y+o:x-o,T=[0,P*2*o,-P*2*o,P*E,P*2*E,P*3*E,P*4*E,w-B];return T.filter((Q,N)=>T.indexOf(Q)===N&&b.every((F)=>F+Q>y+e.traceWidth/2&&F+Q<x-e.traceWidth/2&&(_==="minimum"?F+Q<C:F+Q>C)))}function*h(m,p){if(!m.length)return p;if(t>=n)return null;for(let g of m)for(let _ of d(g))for(let f of u(g,p,_)){let y=yield*i(g,p,_,f);if(!y.length)continue;let x=yield*h(m.filter((C)=>C!==g),[...p,...y[0]]);if(x)return x;if(t>=n)return null}for(let g of m){if(g.connections.length!==1||!g.exitEdge)continue;let _=g.connections[0],f=e.fixedViaPointsByConnectionIndex?.get(_.connectionIndex);if(!f)continue;let y=e.reservedVias?.filter((C)=>C.connectionName!==_.connection.name),x=jJt({...e,bus:g,acceptedPlans:p,reservedVias:y});for(let C of x){if(t++>=n)return null;let I=g.sharedBoundary,b=g.exitEdge==="left"?{x:I.minX,y:C}:g.exitEdge==="right"?{x:I.maxX,y:C}:g.exitEdge==="bottom"?{x:C,y:I.minY}:{x:C,y:I.maxY},P=Kg({...e,bus:g,acceptedPlans:p,reservedVias:y,terminals:[{connection:_,viaPoint:f,exitPoint:b}],gridStep:o/2,alignGridToPads:!0,maximumRouteOrderAttempts:3},1,!1),E=P.next();while(!E.done)yield{phase:"via-minimal-winding",busId:g.busId,targetLayer:e.targetLayer,winding:E.value},E=P.next();if(!E.value.length)continue;let B=yield*h(m.filter((w)=>w!==g),[...p,...E.value[0]]);if(B)return B}}return null}let A=yield*h(c,[...e.acceptedPlans]);return A&&r(A.slice(e.acceptedPlans.length))}function*yli(e){let{bus:t,sourceBoundary:n,sourceEscapes:o,traceWidth:i,clearance:r,targetLayer:s}=e,a=Mr(t.exitEdge,t.preferredExit);if(e.allowBlindAndBuriedVias||t.exitEdge!=="right"||a!==void 0&&a!=="minimum"||t.connections.length<3)return null;let c=t.routableEscapeLayers??t.allowedLayers??[],l=c.find((V)=>V!==s);if(!l||!c.includes(s)||t.connections.some((V)=>V.sourceLayer===s))return null;let d=new Map(o.map((V)=>[V.connectionIndex,V])),u=i+r,h=Math.min(t.pitchX,t.pitchY),A=e.viaDiameter+r,m={x:(t.componentBounds.minX+t.componentBounds.maxX)/2,y:(t.componentBounds.minY+t.componentBounds.maxY)/2},p=t.sharedBoundary.minX+Math.max(h/2,e.viaDiameter/2+r);if(p+(t.connections.length-1)*A>=n.minX)return null;let g=e.acceptedPlans.filter((V)=>V.exitEdge===t.exitEdge&&V.cornerBandSide==="minimum").length,_=t.connections.map((V)=>{let W=d.get(V.connectionIndex);if(!W)throw Error(`FanoutSolver: missing crossbar source escape for ${V.connection.name}`);return{connection:V,viaPoint:W.via.center,exitPoint:{x:t.sharedBoundary.maxX,y:a?HS({...e,connection:V,cornerExitLaneOffset:g}):HS({...e,bus:{...t,preferredExit:"bottom-right"},connection:V,cornerExitLaneOffset:g,windingOrderIndex:0})}}}),f=_.toSorted((V,W)=>V.exitPoint.y-W.exitPoint.y);if(!a)for(let[V,W]of f.entries())W.exitPoint.y=n.minY+h+V*A;let y=new Map(f.map((V)=>[V.connection.connectionIndex,V.exitPoint.y])),x=Math.min(n.maxY-u,Math.max(..._.map((V)=>V.viaPoint.y))+2*h),C=Math.max(n.minY+u,Math.min(..._.map((V)=>V.viaPoint.y))-2*h,...a?[]:[Math.max(...y.values())+e.viaDiameter/2+i/2+r+u]);if(x-C<(_.length-1)*A||C<=Math.max(...y.values())+e.viaDiameter/2+i/2+r)return null;let I=(V)=>{let W=_[V].viaPoint,j=Math.atan2(W.y-m.y,W.x-m.x);return j<0?j+2*Math.PI:j},b=_.map((V,W)=>W).sort((V,W)=>I(V)-I(W)),P=new Map(b.map((V,W)=>[V,{x:n.minX,y:x-(x-C)*W/(_.length-1)}])),E={minX:n.minX,maxX:m.x,minY:Math.min(C-h,Math.min(..._.map((V)=>V.viaPoint.y))-2*h),maxY:n.maxY},B=new Map(o.map((V)=>[V.connectionIndex,[V.segments[0].start,...V.segments.map((W)=>W.end)]])),w=new Set(_.map((V)=>V.connection.connectionIndex)),T=o.filter((V)=>!w.has(V.connectionIndex)).map((V)=>({connectionName:V.connectionName,via:V.via})),Q;for(let V of[0,-1,1]){let W=yield*Kg({...e,bus:{...t,exitEdge:"left",direction:"left",preferredExit:void 0,sharedBoundary:E},terminals:_.map((j,q)=>({...j,exitPoint:P.get(q)})),sourceEscapePaths:B,reservedVias:T,gridStep:u/4,gridStepDivisor:2,alignGridToPads:!0,maximumRouteOrderAttempts:1,routeOrder:b,laneBias:V},1,!1);if(W.length){Q=W[0];break}}if(!Q)return null;let N=Q.toSorted((V,W)=>a?V.exitPoint.y-W.exitPoint.y:_.find((j)=>j.connection.connectionIndex===V.connectionIndex).exitPoint.y-_.find((j)=>j.connection.connectionIndex===W.connectionIndex).exitPoint.y),F=(V,W,j)=>({center:V,diameter:e.viaDiameter,holeDiameter:e.viaHoleDiameter,fromLayer:W,toLayer:j,spanLayers:Wy({fromLayer:W,toLayer:j,layerNames:e.layerNames,allowBlindAndBuriedVias:!1})}),H=new Map;for(let[V,W]of N.entries()){let j=W.segments.at(-1),q=j.end.x-j.start.x,ne=j.end.y-j.start.y;if(q>=0||Math.abs(ne)>-q+0.0000001)return null;let ce=_.find((se)=>se.connection.connectionIndex===W.connectionIndex),oe=p+V*A,ie={x:oe,y:W.exitPoint.y},J={x:oe,y:y.get(W.connectionIndex)},ee=[{start:W.exitPoint,end:ie,width:i,layer:s},{start:ie,end:J,width:i,layer:l}];H.set(W.connectionIndex,{...W,segments:[...W.segments,...ee],additionalVias:[F(ie,s,l),F(J,l,s)],direction:t.direction,exitEdge:t.exitEdge,cornerBandSide:Mr(t.exitEdge,t.preferredExit),exitPoint:ce.exitPoint})}let z=[...H.values()],Y=_.map((V)=>({...V.connection,sourcePoint:{...H.get(V.connection.connectionIndex).additionalVias[1].center,layer:s},sourceLayer:s})),U=yield*Kg({...e,bus:{...t,connections:Y},terminals:Y.map((V,W)=>({connection:V,viaPoint:V.sourcePoint,exitPoint:_[W].exitPoint})),acceptedPlans:[...e.acceptedPlans,...z],reservedVias:[...o.map((V)=>({connectionName:V.connectionName,via:V.via})),...z.flatMap((V)=>V.additionalVias.map((W)=>({connectionName:V.connectionName,via:W})))],allowSourceLayerRouting:!0,sourceEscapePaths:void 0,gridStep:u/2,gridStepDivisor:2,alignGridToPads:!0,maximumRouteOrderAttempts:12},1,!1);if(!U.length)return null;let X=Q.map((V)=>{let W=H.get(V.connectionIndex),j=U[0].find((J)=>J.connectionIndex===V.connectionIndex),[q,ne]=W.additionalVias,ce=(J,ee)=>({route_type:"wire",...J,width:i,layer:ee}),oe=(J)=>({route_type:"via",...J.center,from_layer:J.fromLayer,to_layer:J.toLayer,via_diameter:J.diameter,via_hole_diameter:J.holeDiameter}),ie=[...W.segments,...j.segments];return{...W,segments:ie,trace:{...V.trace,route:[...V.trace.route,ce(q.center,s),oe(q),ce(q.center,l),ce(ne.center,l),oe(ne),...j.trace.route]},length:ie.reduce((J,ee)=>J+kt(ee.start,ee.end),0)}});if(!Kh({...e,plans:[...e.acceptedPlans,...X],sharedBoundary:t.sharedBoundary}))return null;for(let V of X)for(let W of o){if(V.connectionIndex===W.connectionIndex)continue;for(let j of V.segments){if(W.via.spanLayers.includes(j.layer)&&Bi(W.via.center,j.start,j.end)<W.via.diameter/2+i/2+r-0.0000001)return null;for(let q of W.segments)if(q.layer===j.layer&&ad(j.start,j.end,q.start,q.end)<i+r-0.0000001)return null}for(let j of V.additionalVias){if(kt(j.center,W.via.center)<e.viaDiameter+r-0.0000001)return null;for(let q of W.segments)if(j.spanLayers.includes(q.layer)&&Bi(j.center,q.start,q.end)<e.viaDiameter/2+i/2+r-0.0000001)return null}}return X}function*Frn(e){if(e.buses.some((m)=>m.termination.type==="boundary")&&e.buses.every((m)=>m.termination.type==="plane"||m.exitEdge==="left")){let m=Exe(e),p=yield*Frn(m);if(!p)return null;let g=Exe(p),_=new Map(e.buses.flatMap((f)=>f.connections.map((y)=>[y.connectionIndex,y])));return g.map((f)=>({...f,sourceObstacle:_.get(f.connectionIndex).sourceObstacle}))}let{buses:t,sourceEscapes:n,initialPlans:o}=e,i=new Map(n.map((m)=>[m.connectionIndex,m])),r=new Set(o.map((m)=>m.connectionIndex)),s=t.filter((m)=>m.connections.some((p)=>!r.has(p.connectionIndex)));if(s.some((m)=>m.connections.some((p)=>r.has(p.connectionIndex))))throw Error("FanoutSolver: a reserved-source continuation cannot start with a partially committed bus");for(let m of s)for(let p of m.connections)if(!i.has(p.connectionIndex))throw Error(`FanoutSolver: missing reserved source escape for ${p.connection.name}`);let a=new Map(n.map((m)=>[m.connectionIndex,m.via.center])),c=new Map(n.map((m)=>[m.connectionIndex,[m.segments[0].start,...m.segments.map((p)=>p.end)]])),l=[...o],d=(m)=>{let p=e.targetLayerByBusId?.get(m.busId)??(m.allowedLayers??e.layerNames).find((g)=>g!==m.connections[0].sourceLayer);return o.filter((g)=>g.targetLayer===p).length},u=s.filter((m)=>m.termination.type==="boundary").sort((m,p)=>p.connections.length-m.connections.length||d(m)-d(p)),h=new Set;for(let m of[...u,...s.filter((p)=>p.termination.type==="plane")]){if(h.has(m.busId))continue;if(m.termination.type==="boundary"&&m.connections.length<=2&&e.targetLayerByBusId){let x=e.targetLayerByBusId.get(m.busId);if(!x)return null;let C=u.filter((b)=>b.connections.length<=2&&e.targetLayerByBusId.get(b.busId)===x),I=yield*fli({...e,buses:C,targetLayer:x,acceptedPlans:l,fixedViaPointsByConnectionIndex:a,sourceEscapePaths:c,reservedVias:n.map((b)=>({connectionName:b.connectionName,via:b.via}))});if(!I)return null;l.push(...I);for(let b of C)h.add(b.busId);continue}let p=new Set(m.connections.map((x)=>x.connectionIndex)),g=n.filter((x)=>!p.has(x.connectionIndex)).map((x)=>({connectionName:x.connectionName,via:x.via,...x.segments.length===1?{sourceEscapeSegment:x.segments[0]}:{}})),_=e.targetLayerByBusId?.get(m.busId),f=_?[_]:m.termination.type==="plane"?[m.termination.layer]:(m.routableEscapeLayers??m.allowedLayers??e.layerNames).filter((x)=>x!==m.connections[0].sourceLayer),y;for(let x of f){let C={...e,bus:m,targetLayer:x,acceptedPlans:l,fixedViaPointsByConnectionIndex:a,sourceEscapePaths:c,reservedVias:g};if(e.sourceBoundary&&m.termination.type==="boundary"&&m.connections.length>2){for(let b of[Lrn,yli,_li,gli]){let P=b({...C,sourceBoundary:e.sourceBoundary}),E=P.next();while(!E.done)yield{phase:"via-minimal-winding",busId:m.busId,targetLayer:x,winding:E.value},E=P.next();if(E.value){y=E.value;break}}if(y)break}let I=yield*SCe({...e,bus:m,targetLayer:x,acceptedPlans:l,fixedViaPointsByConnectionIndex:a,sourceEscapePaths:c,reservedVias:g,viaMinimalOnly:!0,adaptiveWindingRouteOrder:!0,alignWindingGridToPads:!0,windingGridStep:(e.traceWidth+e.clearance)/2,fixedViaFallbackRouteOrderAttempts:32},1,!1);if(I.length){y=I[0];break}}if(!y)return null;l.push(...y)}let A=t[0]?.sharedBoundary;if(!A||!Kh({...e,plans:l,sharedBoundary:A}))return null;return l}function*xli(e,t){let n={reserveFutureApproaches:!0,failedNarrowGroup:!1,failedWideMatching:!1},o=yield*t(n);if(o||!e||!n.failedNarrowGroup&&!n.failedWideMatching)return o;return yield*t({reserveFutureApproaches:!1,failedNarrowGroup:!1,failedWideMatching:!1})}function Hrn(e){let{buses:t,fixedViaPointsByConnectionIndex:n,clearance:o}=e,i=t[0];if(!i?.exitEdge||t.some((c)=>c.componentId!==i.componentId||c.exitEdge!==i.exitEdge||c.termination.type!=="boundary"||c.connections.length>2||c.allowedLayers?.length!==1||c.allowedLayers[0]==="top"||c.connections.some((l)=>l.sourceLayer!=="top")))return!1;let r=i.exitEdge==="left"||i.exitEdge==="right"?"x":"y",s=i.exitEdge==="top"||i.exitEdge==="right"?1:-1,a=0;for(let c of t){if(c.connections.length!==2||c.maxLengthSkew===void 0||c.maxLengthSkew>=Math.min(c.pitchX,c.pitchY))continue;let l=c.componentBounds,d=r==="x"?s>0?l.minX:l.maxX:s>0?l.minY:l.maxY,u=c.connections.map((h)=>({source:h.sourcePoint,via:n.get(h.connectionIndex)}));if(u.some((h,A)=>{let m=u[1-A];if(!h.via||!m.via)return!1;return s*(h.via[r]-d)<-0.0000001&&m.via.x>=l.minX&&m.via.x<=l.maxX&&m.via.y>=l.minY&&m.via.y<=l.maxY&&s*(m.via[r]-m.source[r])>o}))a++}return a>=2}function Cli(e){return e.groups.filter((t)=>Hrn({...e,buses:t}))}function Orn(e){return e.completedBuses.filter((t)=>e.selectedBusIds.has(t.busId)&&t.termination.type==="boundary"&&t.connections.length>2&&t.allowedLayers?.length===1&&t.maxLengthSkew!==void 0)}function zrn(e){return Orn(e).some((t)=>{let n=e.plans.filter((i)=>i.busId===t.busId),o=Math.min(...n.map((i)=>i.length))+t.maxLengthSkew;return n.some((i)=>i.segments.slice(0,i.sourceEscapeSegmentCount??1).reduce((r,s)=>r+kt(s.start,s.end),0)>o+0.000001)})}function*Ili(e){let{inputSrj:t,preparedBuses:n,completedBuses:o,selectedBusIds:i}=e;if(!zrn(e))return null;let r=Orn(e),s=n.flatMap((p)=>p.connections),a=new Map(s.map((p)=>[p.connectionIndex,p])),c=(p)=>{if(a.size!==t.connections.length||p.length!==a.size||new Set(p.map((g)=>g.connectionIndex)).size!==a.size||p.some((g)=>{let _=a.get(g.connectionIndex);return _?.connection.name!==g.connectionName||_.sourceObstacle!==g.sourceObstacle}))throw Error("Wide source length repair requires every original source")};c(e.plans);let l=new Set(o.map((p)=>p.busId)),d=n.filter((p)=>p.termination.type==="boundary"&&!l.has(p.busId)),u=FW({...e,preparedBuses:o,allowBlindAndBuriedVias:!1,allowSameNetMerges:!1,allowSourcePrefixShortcuts:!0});if(!u)return null;let h=u,A=()=>{let p=h,g=E1({...e,plans:h,preparedBuses:o,sharedBoundary:r[0].sharedBoundary,allowBlindAndBuriedVias:!1,allowSameNetMerges:!1,allowMatchingInsideDenseBounds:!0,allowSourcePrefixMatching:!0,allowTransitLayerMatching:!0,allowDistributedMatching:!0,allowPairLaneSpreading:!0,allowUnconstrainedLaneRerouting:!0,unroutedSourceBuses:d,maximumWorkUnits:1e5,candidatePlansAreFeasible:(_)=>(c(_),p=[..._],!0)});return h=g.plans??p,g},m=A();if(!m.plans){let p=m.failedBus;if(!r.some((I)=>I.busId===p.busId))return null;let g=h.filter((I)=>I.busId===p.busId),_=Math.max(...g.map((I)=>I.length)),f=g.filter((I)=>_-I.length>p.maxLengthSkew+0.000001);if(f.length!==1||h.some((I)=>!I.via))return null;let y=f[0],x=a.get(y.connectionIndex),C=yield*zx({...e,srj:t,allBuses:n,buses:[{...p,connections:[x]}],targetLayer:y.targetLayer,transitLayers:[],terminals:[{connection:x,viaPoint:y.via.center,exitPoint:y.exitPoint}],fixedViaPointsByConnectionIndex:new Map(h.map((I)=>[I.connectionIndex,I.via.center])),sourceEscapePaths:new Map(h.map((I)=>[I.connectionIndex,[I.sourcePoint,...I.segments.slice(0,I.sourceEscapeSegmentCount??1).map((b)=>b.end)]])),acceptedPlans:h.filter((I)=>I!==y),routeFromSourcePads:!0,sourceLayerTravelCost:3,includeDiagonalNeighbors:!0,tightViaChannels:!0,ripCost:64,shuffleSeed:1,maximumIterations:2000000,maximumLocalRepairAttempts:0});if(!C||C.length!==1)return null;h=h.map((I)=>I===y?C[0]:I),m=A()}if(!m.plans)return null;return c(m.plans),qd({inputSrj:t,routedSrj:{...t,traces:[...t.traces??[],...m.plans.flatMap((p)=>[p.trace,...p.planeEndpointTrace?[p.planeEndpointTrace]:[]])]},clearance:e.clearance,allowBlindAndBuriedVias:!1}).valid?m.plans:null}function bli(e){let{buses:t,targetLayer:n,exits:o,layerNames:i,viaDiameter:r,clearance:s}=e,a=t[0];if(!a?.exitEdge||t.length<2||t.some((_)=>_.termination.type!=="boundary"||_.connections.length<=2||_.componentId!==a.componentId||_.exitEdge!==a.exitEdge||_.connections.some((f)=>f.sourceLayer!=="top")))return!1;let c=(_)=>_.routableEscapeLayers??_.allowedLayers??i;if(n==="top"||t.some((_)=>!c(_).includes(n))||!i.some((_)=>_!=="top"&&_!==n&&t.every((f)=>c(f).includes(_))))return!1;let l=t.flatMap((_)=>_.connections),d=a.exitEdge==="left"||a.exitEdge==="right"?"y":"x",u=l.map((_)=>o.get(_.connectionIndex)?.[d]);if(u.some((_)=>_===void 0||!Number.isFinite(_)))return!1;if(Math.max(...u)-Math.min(...u)>=(l.length-1)*(r+s)-0.00000001)return!1;let A=l.reduce((_,f)=>({x:_.x+f.sourcePoint.x/l.length,y:_.y+f.sourcePoint.y/l.length}),{x:0,y:0}),m=a.componentBounds,p=Math.min(Math.abs(A.x-m.minX),Math.abs(A.x-m.maxX)),g=Math.min(Math.abs(A.y-m.minY),Math.abs(A.y-m.maxY));return d==="x"?p+0.00000001<g:g+0.00000001<p}function Sli(e){let t=e.length*(e.length-1)/2;if(t===0)return!1;let n=0;for(let o=0;o<e.length;o++){let i=e[o];for(let r of e.slice(o+1))if(ad(i.source,i.target,r.source,r.target)<0.0000001&&++n>t/2)return!0}return!1}var Pli=class{constructor(e){if(this.options=e,this.pending=[e.preferSourceTransit?{ripCost:e.sourceTransitRipCost??8,shuffleSeed:1,transitLayers:e.allTransitLayers}:{ripCost:e.firstRipCost,shuffleSeed:1,transitLayers:e.transitLayers}],e.preferAlternateOrder)this.originalOrder=this.pending[0],this.preferredOrder={...this.originalOrder,shuffleSeed:2},this.pending[0]=this.preferredOrder;if(e.preferSourceOrigin)this.pending.unshift({ripCost:e.sourceOriginRipCost??256,shuffleSeed:1,transitLayers:[],routeFromSourcePads:!0})}options;pending;attempted=new Set;preferredOrder;originalOrder;next(){while(this.pending.length>0){let e=this.pending.shift(),t=JSON.stringify(e);if(this.attempted.has(t))continue;return this.attempted.add(t),e}return}failed(e,t){if(e.routeFromSourcePads)return;let n=(o)=>{if(!this.attempted.has(JSON.stringify(o)))this.pending.unshift(o)};if(e===this.preferredOrder){if(n(this.originalOrder),t==="lengths")this.pending.push({...this.originalOrder,ripCost:256});return}if(e.sourceLayerTravelCost!==void 0){let{reserveFutureApproaches:o,sourceLayerTravelCost:i,maximumSourceIterations:r,...s}=e;if(o===!1&&t==="routing")n({...s,sourceLayerTravelCost:4,reserveFutureApproaches:!0});else this.failed(s,"lengths");return}if(e.sourceOriginPhysicalGridPhase){let{sourceOriginPhysicalGridPhase:o,...i}=e;n({...i,ripCost:256,shuffleSeed:1});return}if(this.options.preferSourceTransit&&e.ripCost===(this.options.sourceTransitRipCost??8)&&e.transitLayers.length===this.options.allTransitLayers.length)n({ripCost:this.options.firstRipCost,shuffleSeed:1,transitLayers:this.options.transitLayers});else if(this.options.wideSingleLayer){if(t==="lengths"&&e.ripCost===64){let o={...e,shuffleSeed:1,sourceLayerTravelCost:3,maximumSourceIterations:20000000,reserveFutureApproaches:!1},i={...e,shuffleSeed:1,sourceOriginPhysicalGridPhase:!0};if(this.options.retrySourceOriginFreshReservations&&!this.attempted.has(JSON.stringify(o)))n(o);else if(this.options.retrySourceOriginPhysicalGridPhase&&!this.attempted.has(JSON.stringify(i)))n(i);else n({...e,ripCost:256,shuffleSeed:1})}if(t==="routing"&&e.shuffleSeed===1)n({...e,ripCost:64,shuffleSeed:2})}else if(e.transitLayers.length<this.options.allTransitLayers.length){let o={ripCost:t==="lengths"?8:this.options.firstRipCost,shuffleSeed:1,transitLayers:this.options.allTransitLayers};if(t==="routing"&&o.ripCost!==256&&this.attempted.has(JSON.stringify(o)))n({...o,ripCost:256});else n(o)}else if(t==="routing"&&e.ripCost!==256)n({...e,ripCost:256})}};function vli(e){let t=e.traceWidth+e.clearance;if(!Number.isFinite(t)||!(e.traceWidth>0)||e.clearance<0)throw Error("Boundary approach reservations require valid trace rules");return e.buses.filter((n)=>n.termination.type==="boundary"&&!e.excludedBusIds.has(n.busId)).flatMap((n)=>{let o=e.targetLayerByBusId.get(n.busId);if(!o||!n.exitEdge)throw Error(`Missing boundary approach layer or edge for ${n.busId}`);return n.connections.map((i)=>{let r=e.exits.get(i.connectionIndex);if(!r)throw Error(`Missing boundary approach target for ${i.connectionIndex}`);let s={...r};if(n.exitEdge==="bottom")s.y+=t;else if(n.exitEdge==="top")s.y-=t;else if(n.exitEdge==="left")s.x+=t;else s.x-=t;return{type:"pcb_trace",pcb_trace_id:`fanout-approach-reservation:${i.connectionIndex}`,connection_name:i.connection.name,route:[s,r].map((a)=>({route_type:"wire",...a,layer:o,width:e.traceWidth}))}})})}function Eli(e){let t={minX:1/0,maxX:-1/0,minY:1/0,maxY:-1/0};for(let n of e){let o=n,i=(o.ccwRotationDegrees??0)*Math.PI/180,r=n.width/2,s=n.height/2,a=o.shape==="circle"?r:Math.abs(Math.cos(i))*r+Math.abs(Math.sin(i))*s,c=o.shape==="circle"?s:Math.abs(Math.sin(i))*r+Math.abs(Math.cos(i))*s;t.minX=Math.min(t.minX,n.center.x-a),t.maxX=Math.max(t.maxX,n.center.x+a),t.minY=Math.min(t.minY,n.center.y-c),t.maxY=Math.max(t.maxY,n.center.y+c)}return t}function Mli(e,t){let n=e.filter((h)=>h.termination.type==="boundary"),o=n[0]?.exitEdge;if(!o||n.some((h)=>h.exitEdge!==o))return[...e];let i=n.flatMap((h)=>h.connections),r={x:(t.minX+t.maxX)/2,y:(t.minY+t.maxY)/2},s=i.reduce((h,A)=>h+A.sourcePoint.x-r.x,0),a=i.reduce((h,A)=>h+A.sourcePoint.y-r.y,0);if(Math.hypot(s,a)<0.000000001)return[...e];let c=["right","up","left","down"],l=Math.abs(s)>=Math.abs(a)?s>=0?"right":"left":a>=0?"up":"down",d=o==="top"?"up":o==="bottom"?"down":o,u=c.indexOf(l)-c.indexOf(d);return e.map((h)=>h.termination.type==="plane"?h:{...h,direction:c[(c.indexOf(h.direction)+u+4)%4]})}function Bli(e){return e.flatMap((t)=>{let n=[t.connectionName],o=[t.sourceLayer],i=[];if(t.via)i.push({type:"rect",shape:"circle",center:t.via.center,width:t.via.diameter,height:t.via.diameter,connectedTo:n,layers:o});for(let r of t.segments){let{start:s,end:a,width:c}=r,l=a.x-s.x,d=a.y-s.y;i.push({type:"rect",center:{x:(s.x+a.x)/2,y:(s.y+a.y)/2},width:Math.hypot(l,d),height:c,ccwRotationDegrees:Math.atan2(d,l)*180/Math.PI,connectedTo:n,layers:o})}for(let r of[t.sourcePoint,...t.segments.map((s)=>s.end)])i.push({type:"rect",shape:"circle",center:r,width:t.segments[0]?.width??0,height:t.segments[0]?.width??0,connectedTo:n,layers:o});return i})}function*wli(e){let{srj:t,buses:n,layerNames:o,traceWidth:i,clearance:r,viaDiameter:s,viaHoleDiameter:a}=e,c=n[0];if(!c||n.some((Q)=>Q.componentId!==c.componentId||Q.connections.some((N)=>N.sourceLayer!=="top")))return null;let l=c.componentObstacles.filter((Q)=>Q.layers.includes("top"));if(!l.length)return null;let d=Eli(l),u=Math.max(c.pitchX,c.pitchY),h=i+r;if(!Number.isFinite(u)||u<=0)return null;let A={x:(d.minX+d.maxX)/2,y:(d.minY+d.maxY)/2},m=Math.ceil(((d.maxX-d.minX)/2+u+h)/h)*h,p=Math.ceil(((d.maxY-d.minY)/2+u+h)/h)*h,g={minX:A.x-m,maxX:A.x+m,minY:A.y-p,maxY:A.y+p};if(n.some((Q)=>g.minX<=Q.sharedBoundary.minX||g.maxX>=Q.sharedBoundary.maxX||g.minY<=Q.sharedBoundary.minY||g.maxY>=Q.sharedBoundary.maxY))return null;let _=new Map;for(let Q of n){if(Q.termination.type!=="boundary"||Q.allowedLayers?.length!==1||Q.allowedLayers[0]==="top")continue;let N=Q.allowedLayers[0];_.set(N,[..._.get(N)??[],Q])}let f=[..._].sort(([Q,N],[F,H])=>Math.max(...H.map((z)=>z.connections.length))-Math.max(...N.map((z)=>z.connections.length))||Q.localeCompare(F));if(!f.length)return null;let y=new Map(n.flatMap((Q)=>Q.connections.map((N)=>[N.connectionIndex,{bus:Q,connection:N}])));if(y.size!==n.reduce((Q,N)=>Q+N.connections.length,0))throw Error("FanoutSolver: source preparation requires unique connection indices");let x=Mli(n,d),C={traceWidth:i,clearance:r,viaDiameter:s,viaHoleDiameter:a,maximumSearchStates:e.maximumSearchStates??1e4,additionalObstacles:t.obstacles},I=e.initialViaPointsByConnectionIndex;if(I&&(I.size!==y.size||[...I].some(([Q,N])=>!y.has(Q)||!Number.isFinite(N.x)||!Number.isFinite(N.y))))throw Error("FanoutSolver: initial source sites must contain every connection exactly once");let b=qu(x,{...C,fixedViaPointsByConnectionIndex:I});if(!b)return null;let P=(Q,N,F)=>{let{bus:H,connection:z}=y.get(Q),Y=H.termination.type==="plane"?H.termination.layer:(H.allowedLayers??o).filter((U)=>U!==z.sourceLayer).at(-1);if(!Y)throw Error("FanoutSolver: source through-via preparation requires a non-source target layer");return cb({...e,allowBlindAndBuriedVias:!1,bus:H,terminal:{connection:z,viaPoint:N,exitPoint:N},targetLayer:Y,targetLayerPoints:[N],sourceEscapePoints:F})},E=(Q,N)=>[...y.keys()].map((F)=>P(F,Q.get(F),N.get(F))),B=(Q)=>qd({inputSrj:t,routedSrj:{...t,traces:[...t.traces??[],...Q.map((N)=>N.trace)]},clearance:r,allowBlindAndBuriedVias:!1}).valid,w={sourceBoundary:g,fixedViaPointsByConnectionIndex:b,sourceEscapePaths:new Map([...b].map(([Q,N])=>[Q,[y.get(Q).connection.sourcePoint,N]])),sourcePlans:[],prefixPlans:[],remotePlans:[],layerGroups:[]};if(w.sourcePlans=E(b,w.sourceEscapePaths),!B(w.sourcePlans))return null;let T=Math.max(u,s/2+i/2+r);for(let[Q,N]of f){let F=new Set(N.flatMap((q)=>q.connections.map((ne)=>ne.connectionIndex))),H=new Set(w.remotePlans.map((q)=>q.connectionIndex)),z=new Map([...w.fixedViaPointsByConnectionIndex].filter(([q])=>!F.has(q)&&!H.has(q))),Y={...t,obstacles:[...t.obstacles,...Bli(w.sourcePlans.filter((q)=>!F.has(q.connectionIndex)))]},U=N.flatMap((q)=>q.connections.map((ne)=>({...q,busId:`${q.busId}:source-${ne.connectionIndex}`,sharedBoundary:g,preferredExit:void 0,exitEdge:void 0,connections:[{...ne,exitTargetPoint:void 0,hasExplicitLayeredExitTarget:!1}]}))),X=null,V=0,W=(q)=>{if(q.length<=V)return;let ne=q.map((ue)=>({...ue,busId:y.get(ue.connectionIndex).bus.busId,sourceObstacle:y.get(ue.connectionIndex).connection.sourceObstacle,sourceEscapeSegmentCount:ue.segments.length}));if(!Kh({plans:ne,srj:Y,sharedBoundary:g,clearance:r,allowBlindAndBuriedVias:!1,allowSameNetMerges:!1}))return;let ce=[],oe=new Map;for(let ue of ne){let Ae=ue.exitPoint,_e=Math.abs(Ae.x-g.maxX)<0.0000001?{x:T,y:0}:Math.abs(Ae.x-g.minX)<0.0000001?{x:-T,y:0}:Math.abs(Ae.y-g.maxY)<0.0000001?{x:0,y:T}:Math.abs(Ae.y-g.minY)<0.0000001?{x:0,y:-T}:null;if(!_e)throw Error("FanoutSolver: source prefix does not end on its source boundary");let Pe={x:Ae.x+_e.x,y:Ae.y+_e.y},Ee=y.get(ue.connectionIndex).bus.sharedBoundary;if(Pe.x<Ee.minX||Pe.x>Ee.maxX||Pe.y<Ee.minY||Pe.y>Ee.maxY)return;let Te=[ue.sourcePoint,...ue.segments.map((be)=>be.end),Pe];oe.set(ue.connectionIndex,Te),ce.push(P(ue.connectionIndex,Pe,Te))}let ie=[...w.remotePlans,...ce];if(!B(ie))return;let J=new Set(ie.map((ue)=>ue.connectionIndex)),ee=x.map((ue)=>({...ue,connections:ue.connections.filter((Ae)=>!J.has(Ae.connectionIndex))})).filter((ue)=>ue.connections.length),se=qu(ee,{...C,fixedViaPointsByConnectionIndex:z,preferredViaPointsByConnectionIndex:w.fixedViaPointsByConnectionIndex,blockingSegments:ie.flatMap((ue)=>ue.segments.map((Ae)=>({connectionIndex:ue.connectionIndex,segment:Ae}))),blockingVias:ie.map((ue)=>({connectionIndex:ue.connectionIndex,center:ue.via.center,diameter:ue.via.diameter,spanLayers:ue.via.spanLayers}))});if(!se)return;let le=new Map([...se,...ie.map((ue)=>[ue.connectionIndex,ue.via.center])]);if(le.size!==y.size)throw Error("FanoutSolver: source preparation lost a connection");for(let ue of H)oe.set(ue,w.sourceEscapePaths.get(ue));for(let[ue,Ae]of se)oe.set(ue,[y.get(ue).connection.sourcePoint,Ae]);let he=E(le,oe);if(!B(he))return;V=q.length,X={sourceBoundary:g,fixedViaPointsByConnectionIndex:le,sourceEscapePaths:oe,sourcePlans:he,prefixPlans:[...w.prefixPlans,...ne],remotePlans:ie,layerGroups:[...w.layerGroups,{layer:Q,connectionCount:F.size,escapedCount:q.length}]}},j=yield*yF({srj:Y,buses:U,traceWidth:i,clearance:r,onPartialRoutes:W});if(j)W(j);if(X)w=X;else w.layerGroups.push({layer:Q,connectionCount:F.size,escapedCount:0})}return w.remotePlans.length?w:null}function Tli(e,t){return e.some((n)=>{if(!ECe([n]))return!1;let o=n.exitEdge==="left"||n.exitEdge==="right"?"x":"y",i=o==="x"?"y":"x",r=n.exitEdge==="left"||n.exitEdge==="bottom"?-1:1,s=o==="x"?(n.componentBounds.minX+n.componentBounds.maxX)/2:(n.componentBounds.minY+n.componentBounds.maxY)/2,a=n.connections.map((c)=>t.get(c.connectionIndex)?.[i]);if(a.some((c)=>c===void 0||!Number.isFinite(c)))return!1;return e.some((c)=>{if(c.termination.type!=="boundary"||c.connections.length!==2||c.componentId!==n.componentId||c.exitEdge!==n.exitEdge||c.allowedLayers?.length!==1||c.allowedLayers[0]===n.allowedLayers[0]||!c.connections.every((u)=>r*(u.sourcePoint[o]-s)<-0.0000001))return!1;let l=c.connections.map((u)=>t.get(u.connectionIndex)?.[i]);if(l.some((u)=>u===void 0||!Number.isFinite(u)))return!1;let d=c.connections.flatMap((u)=>{let h=u.sourceObstacle?.center[i]??u.sourcePoint[i],A=((i==="x"?u.sourceObstacle?.width:u.sourceObstacle?.height)??0)/2;return[h-A,h+A]});return Math.max(Math.min(...a),Math.min(...l),Math.min(...d))<=Math.min(Math.max(...a),Math.max(...l),Math.max(...d))})})}function Dli(e,t){return e.some((n)=>{if(!ECe([n]))return!1;let o=n.exitEdge==="left"||n.exitEdge==="right"?"y":"x",i=n.connections.map((a)=>t.get(a.connectionIndex)?.[o]);if(i.some((a)=>a===void 0||!Number.isFinite(a)))return!1;let r=o==="x"?n.componentBounds.minX:n.componentBounds.minY,s=o==="x"?n.componentBounds.maxX:n.componentBounds.maxY;return Math.min(...i)<=s+0.0000001&&Math.max(...i)>=r-0.0000001})}var $E=0.000001,Kne=(e)=>Math.max(...e.map((t)=>t.length))-Math.min(...e.map((t)=>t.length));function Nli(e,t){let n=e.trace.route.findIndex((r)=>r.route_type==="via"),o=t.trace.route.findIndex((r)=>r.route_type==="via");if(n<0||o<0)return null;let i=[...e.trace.route.slice(0,n+1),...t.trace.route.slice(o+1)];return i[i.length-1]=e.trace.route.at(-1),{...e,trace:{...e.trace,route:i},segments:[...e.segments.slice(0,e.sourceEscapeSegmentCount??1),...t.segments.slice(t.sourceEscapeSegmentCount??1)],length:t.length}}function*Rli(e){let{inputSrj:t,preparedBuses:n,layerNames:o,traceWidth:i,clearance:r,viaDiameter:s,viaHoleDiameter:a,maximumPasses:c=3,maximumConnectionAttempts:l=24,maximumSearchStates:d=1200000}=e;for(let[P,E]of[["maximumPasses",c],["maximumConnectionAttempts",l],["maximumSearchStates",d]])if(!Number.isSafeInteger(E)||E<1)throw Error(`FanoutSolver: ${P} must be a positive safe integer`);let u=new Map(e.plans.map((P)=>[P.connectionIndex,P])),h=n.flatMap((P)=>P.connections);if(u.size!==e.plans.length||u.size!==t.connections.length||h.length!==u.size||h.some((P)=>u.get(P.connectionIndex)?.connectionName!==P.connection.name))throw Error("FanoutSolver: overlong-lane rerouting requires every original plan");let A=n.filter((P)=>P.termination.type==="boundary"&&(!e.selectedBusIds||e.selectedBusIds.has(P.busId))),m=A.filter((P)=>P.maxLengthSkew!==void 0&&P.connections.length>1),p=[...e.plans],g=new Map;for(let P of p){if(!P.via)continue;let E=P.segments.slice(0,P.sourceEscapeSegmentCount??1);if(!E.length||E.some((B)=>B.layer!==P.sourceLayer)||kt(E[0].start,P.sourcePoint)>$E||kt(E.at(-1).end,P.via.center)>$E||E.some((B,w)=>w>0&&kt(E[w-1].end,B.start)>$E))continue;g.set(P.connectionIndex,[E[0].start,...E.map((B)=>B.end)])}let _=new Map,f=(i+r)/2,y=0,x=!1,C=(P,E)=>{let B=P.via;return Boolean(B&&!(P.additionalVias?.length??0)&&!P.planeEndpointTrace&&!P.planeEndpointVia&&g.has(P.connectionIndex)&&B.fromLayer===P.sourceLayer&&B.toLayer===P.targetLayer&&B.diameter===s&&B.holeDiameter===a&&B.spanLayers.length===o.length&&o.every((w)=>B.spanLayers.includes(w))&&(E.routableEscapeLayers??E.allowedLayers??o).includes(P.targetLayer)&&P.segments.slice(P.sourceEscapeSegmentCount??1).every((w)=>w.layer===P.targetLayer))};function*I(P,E,B,w,T){if(y>=l||!C(P,B))return null;y++;let Q=Kg({srj:t,bus:B,targetLayer:P.targetLayer,terminals:[{connection:B.connections.find((H)=>H.connectionIndex===P.connectionIndex),viaPoint:P.via.center,exitPoint:P.exitPoint}],acceptedPlans:E.filter((H)=>H.connectionIndex!==P.connectionIndex),layerNames:o,traceWidth:i,clearance:r,viaDiameter:s,viaHoleDiameter:a,allowBlindAndBuriedVias:!1,sourceEscapePaths:g,gridStepDivisor:2,gridStep:f,gridOrigin:w,alignGridToPads:!0,heuristicWeight:1,maximumRouteOrderAttempts:1,maximumSearchStates:d,preferTargetDirectedLaneBias:!0},1,!1),N=Q.next();while(!N.done)yield{...N.value,busId:B.busId,pass:T,connectionAttempt:y},N=Q.next();let F=N.value[0]?.[0];return F?Nli(P,F):null}for(let P of m){let E=p.filter((T)=>T.busId===P.busId),B=Kne(E);if(B<=P.maxLengthSkew+$E)continue;let w=[...p];for(let T=0;T<c;T++){let Q=Math.min(...E.map((H)=>H.length)),N=!1,F=E.filter((H)=>H.length>Q+P.maxLengthSkew+$E).toSorted((H,z)=>z.length-H.length||H.connectionIndex-z.connectionIndex);for(let H of F){if(y>=l)break;let z=H.targetLayer;if(!C(H,P))continue;let Y=_.get(z);if(!Y)Y=jYe({vias:p.flatMap((W)=>[W.via,...W.additionalVias??[],W.planeEndpointVia].filter((j)=>j?.spanLayers.includes(z)).map((j)=>({connectionIndex:W.connectionIndex,center:j.center,diameter:j.diameter}))),activeConnectionIndices:new Set(A.flatMap((W)=>W.connections.filter((j)=>u.get(j.connectionIndex)?.targetLayer===z).map((j)=>j.connectionIndex))),traceWidth:i,clearance:r,gridStep:f}),_.set(z,Y);let U=yield*I(H,p,P,Y,T);if(!U||U.length>=H.length-$E)continue;let X=p.filter((W)=>W.busId===P.busId),V=X.map((W)=>W.connectionIndex===H.connectionIndex?U:W);if(Kne(V)>Kne(X)+$E){if(X.length!==2)continue;let W=X.find((ne)=>ne!==H);if(W.targetLayer!==z)continue;let j=p.map((ne)=>ne===H?U:ne),q=yield*I(W,j,P,Y,T);if(!q||q.length>=W.length-$E||Kne([U,q])>P.maxLengthSkew+$E)continue;p=j.map((ne)=>ne===W?q:ne)}else p=p.map((W)=>W===H?U:W);N=!0}if(E=p.filter((H)=>H.busId===P.busId),!N||y>=l)break}if(Kne(E)<B-$E)x=!0;else p=w;if(y>=l)break}if(!x)return p;return qd({inputSrj:t,routedSrj:{...t,traces:[...t.traces??[],...p.flatMap((P)=>[P.trace,...P.planeEndpointTrace?[P.planeEndpointTrace]:[]])]},clearance:r,allowBlindAndBuriedVias:!1}).valid?p:null}var ST=0.000001,Yye=(e)=>Math.max(...e.map((t)=>t.length))-Math.min(...e.map((t)=>t.length));function*Qli(e){let{inputSrj:t,preparedBuses:n,layerNames:o,traceWidth:i,clearance:r,viaDiameter:s,viaHoleDiameter:a,maximumConnectionAttempts:c=8,maximumIterationsPerConnection:l=30000000}=e;for(let[y,x]of[["maximumConnectionAttempts",c],["maximumIterationsPerConnection",l]])if(!Number.isSafeInteger(x)||x<1)throw Error(`FanoutSolver: ${y} must be a positive safe integer`);let d=new Map(e.plans.map((y)=>[y.connectionIndex,y])),u=n.flatMap((y)=>y.connections);if(u.length!==t.connections.length||d.size!==e.plans.length||d.size!==u.length||u.some((y)=>d.get(y.connectionIndex)?.connectionName!==y.connection.name))throw Error("FanoutSolver: transit length repair requires every original plan");let h=n.filter((y)=>y.termination.type==="boundary"&&y.maxLengthSkew!==void 0&&y.connections.length>1&&(!e.busIds||e.busIds.includes(y.busId))),A=[...e.plans],m=h.filter((y)=>Yye(A.filter((x)=>x.busId===y.busId))>y.maxLengthSkew+ST);if(!m.length)return A;let p=new Map,g=new Map;for(let y of u){let x=d.get(y.connectionIndex);if(!x.via)return null;let C=x.segments.slice(0,x.sourceEscapeSegmentCount??1);if(!C.length||C.some((I)=>I.layer!==y.sourceLayer)||kt(C[0].start,y.sourcePoint)>ST||kt(C.at(-1).end,x.via.center)>ST||C.some((I,b)=>b>0&&kt(C[b-1].end,I.start)>ST))return null;p.set(y.connectionIndex,x.via.center),g.set(y.connectionIndex,[C[0].start,...C.map((I)=>I.end)])}let _=0;for(let y of m){let x=A.filter((E)=>E.busId===y.busId);if(x.length!==y.connections.length)return null;let C=x[0].targetLayer,I=y.routableEscapeLayers??y.allowedLayers??o,b=I.filter((E)=>E!==C);if(!I.includes(C)||!b.length||x.some((E)=>E.targetLayer!==C))return null;let P=new Set;while(Yye(x)>y.maxLengthSkew+ST){let E=Math.min(...x.map((V)=>V.length)),B=x.filter((V)=>!P.has(V.connectionIndex)&&V.length>E+y.maxLengthSkew+ST).toSorted((V,W)=>W.length-V.length||V.connectionIndex-W.connectionIndex)[0];if(!B||_>=c)return null;P.add(B.connectionIndex);let w=B.via;if(B.planeEndpointTrace!==void 0||B.planeEndpointSegments!==void 0||B.planeEndpointVia!==void 0||w.fromLayer!==B.sourceLayer||w.toLayer!==C||w.diameter!==s||w.holeDiameter!==a||w.spanLayers.length!==o.length||!o.every((V)=>w.spanLayers.includes(V)))continue;let T=y.connections.find((V)=>V.connectionIndex===B.connectionIndex);_++;let Q=zx({srj:t,allBuses:n,buses:[{...y,connections:[T]}],targetLayer:C,transitLayers:b,terminals:[{connection:T,viaPoint:w.center,exitPoint:B.exitPoint}],fixedViaPointsByConnectionIndex:p,sourceEscapePaths:g,acceptedPlans:A.filter((V)=>V!==B),layerNames:o,traceWidth:i,clearance:r,viaDiameter:s,viaHoleDiameter:a,tightViaChannels:!0,ripCost:64,shuffleSeed:1,maximumRipEvents:1,maximumIterations:l}),N=Q.next();while(!N.done)yield{...N.value,busId:y.busId,connectionName:B.connectionName,connectionAttempt:_},N=Q.next();let F=N.value?.[0];if(!F||F.length>=B.length-ST)continue;let H=B.sourceEscapeSegmentCount??1,z=B.trace.route.findIndex((V)=>V.route_type==="via"),Y=F.trace.route.findIndex((V)=>V.route_type==="via");if(z<0||Y<0)return null;let U={...B,via:w,additionalVias:F.additionalVias,segments:[...B.segments.slice(0,H),...F.segments.slice(F.sourceEscapeSegmentCount??1)],trace:{...B.trace,route:[...B.trace.route.slice(0,z+1),...F.trace.route.slice(Y+1)]},length:F.length},X=x.map((V)=>V===B?U:V);if(Yye(X)>Yye(x)+ST)continue;A=A.map((V)=>V===B?U:V),x=X}}return qd({inputSrj:t,routedSrj:{...t,traces:[...t.traces??[],...A.flatMap((y)=>[y.trace,...y.planeEndpointTrace?[y.planeEndpointTrace]:[]])]},clearance:r,allowBlindAndBuriedVias:!1}).valid?A:null}function Grn(e){let{buses:t,layerNames:n,traceWidth:o,clearance:i}=e,r=t.filter((m)=>m.termination.type==="boundary"),s=new Map;for(let m of r)if(m.allowedLayers?.length===1){let p=m.allowedLayers[0];s.set(p,(s.get(p)??0)+m.connections.length)}let a=new Map;for(let m of t){let p=new Set(m.connections.map((f)=>f.sourceLayer)),g=(m.routableEscapeLayers??m.allowedLayers??n).filter((f)=>!p.has(f)).toSorted((f,y)=>(s.get(f)??0)-(s.get(y)??0)||n.indexOf(y)-n.indexOf(f)),_=m.termination.type==="plane"?m.termination.layer:g[0];if(!_)return null;a.set(m.busId,_)}let c=JYe({...e,targetLayerByBusId:a}),l=new Map(c.tracksByConnectionIndex),d=vrn(t),u=(m)=>m.exitEdge==="left"||m.exitEdge==="right"?"y":"x",h=o+i;for(let m of r){if(m.allowedLayers?.length!==1)continue;let p=u(m),g=m.sharedBoundary,_=p==="y"?g.minY:g.minX,f=p==="y"?g.maxY:g.maxX,y=m.connections.map((E)=>(E.exitTargetPoint??E.targetPoint)[p]),x=y.toSorted((E,B)=>E-B);if(x.some((E,B)=>!Number.isFinite(E)||B>0&&E-x[B-1]<h-0.00000001))continue;let C=x.at(-1)-x[0];if(C>f-_)continue;let I;if(!d.has(m.busId)){let E=Math.max(_-x[0],Math.min(0,f-x.at(-1)));I=y.map((B)=>B+E)}else if(m.connections.length===2){let E=m.connections.map((T)=>l.get(T.connectionIndex)),B=(E[0]+E[1])/2,w=Math.abs(E[1]-E[0]);I=E.map((T)=>B+(T-B)*C/w)}else continue;let b=new Set(m.connections.map((E)=>E.connectionIndex)),P=r.filter((E)=>E.exitEdge===m.exitEdge&&a.get(E.busId)===a.get(m.busId)).flatMap((E)=>E.connections.filter((B)=>!b.has(B.connectionIndex)).map((B)=>l.get(B.connectionIndex)));if(I.some((E)=>E<_||E>f||P.some((B)=>Math.abs(E-B)<h-0.00000001)))continue;for(let[E,B]of m.connections.entries())l.set(B.connectionIndex,I[E])}let A=new Map;for(let m of r)for(let p of m.connections){let g=l.get(p.connectionIndex),_=m.sharedBoundary,f=m.exitEdge==="left"?{x:_.minX,y:g}:m.exitEdge==="right"?{x:_.maxX,y:g}:m.exitEdge==="top"?{x:g,y:_.maxY}:{x:g,y:_.minY};A.set(p.connectionIndex,f)}return{targetLayerByBusId:a,exits:A}}function*kli(e){let t=new Set,n,o=()=>aGe(e,{reserveFutureApproaches:!1,failedNarrowGroup:!1,failedWideMatching:!1},t,{travelCost:3,maximumIterations:20000000}),i=!1;if(e.sourceOriginRouting&&sWe(e.buses)){let s=Grn(e),a={requested:!!s&&Dli(e.buses,s.exits),reached:!1},c=aGe({...e,sourceOriginRouting:!1},{reserveFutureApproaches:!0,failedNarrowGroup:!1,failedWideMatching:!1},t,void 0,a),l=c.next();while(!l.done&&!a.reached)yield l.value,l=c.next();if(l.done){if(l.value)return l.value}else n=c;if(ECe(e.buses)){if(i=!!s&&Tli(e.buses,s.exits),!i){let d=yield*o();if(d)return d}}}let r=yield*xli(e.sourceOriginRouting??!1,(s)=>aGe(e,s,t));if(!r&&i)r=yield*o();if(r)return r;return n?yield*n:null}function*aGe(e,t,n,o,i){let{buses:r,srj:s,layerNames:a}=e,c=Grn(e);if(!c)return null;let l=e.sourceOriginRouting?function*(){return aci(e)}():wli(e),d=l.next();while(!d.done)yield{phase:"sources",routedConnectionCount:0},d=l.next();if(!d.value)return null;let{fixedViaPointsByConnectionIndex:u,sourceEscapePaths:h,sourcePlans:A}=d.value,m=[],p=new Set(r.filter((I)=>I.termination.type==="plane").map((I)=>I.busId)),g=new Map;for(let I of r)if(I.termination.type==="boundary"){let b=c.targetLayerByBusId.get(I.busId);g.set(b,[...g.get(b)??[],I])}let _=[...g].sort(([,I],[,b])=>Math.max(...I.map((P)=>P.allowedLayers?.length??a.length))-Math.max(...b.map((P)=>P.allowedLayers?.length??a.length))||Math.max(...b.map((P)=>P.connections.length))-Math.max(...I.map((P)=>P.connections.length))),f=Cli({groups:_.map(([,I])=>I),fixedViaPointsByConnectionIndex:u,clearance:e.clearance}),y=e.sourceOriginRouting&&sWe(r),x=y&&!o&&ECe(r),C=!1;for(let[I,b]of _){if(x&&I===_.at(-1)[0]){let q=cWe({buses:b,exits:c.exits});for(let[ne,ce]of q)c.exits.set(ne,ce)}let P=Math.max(...b.map((q)=>q.connections.length)),E=P>2&&b.every((q)=>q.allowedLayers?.length===1),B=a.filter((q)=>q!==I&&b.every((ne)=>(ne.routableEscapeLayers??ne.allowedLayers??a).includes(q)&&ne.connections.every((ce)=>ce.sourceLayer!==q))),w=a.filter((q)=>q!==I&&b.every((ne)=>(ne.routableEscapeLayers??ne.allowedLayers??a).includes(q))),T=Hrn({buses:b,fixedViaPointsByConnectionIndex:u,clearance:e.clearance}),Q=C&&P>2&&B.length===0&&w.length>0,N=C&&P>2&&B.length>0,F=x&&P>2&&B.length===0&&w.length>0,H=m,z=e.sourceOriginRouting&&I===_[0][0]&&E,Y=new Pli({wideSingleLayer:E,retrySourceOriginPhysicalGridPhase:z&&!o,retrySourceOriginFreshReservations:z&&!o&&t.reserveFutureApproaches,preferAlternateOrder:!e.sourceOriginRouting&&E&&I===_[0][0]&&f.some((q)=>b.every((ne)=>q.every((ce)=>ce.componentId===ne.componentId&&ce.exitEdge===ne.exitEdge)))||y&&!E&&P>2&&B.length>0&&I===_.at(-1)[0],firstRipCost:P<=2?256:64,transitLayers:B,allTransitLayers:w,sourceOriginRipCost:N?64:256,sourceTransitRipCost:Q?64:8,preferSourceOrigin:T||y&&P<=2&&H.length>0||N||bli({...e,buses:b,targetLayer:I,exits:c.exits}),preferSourceTransit:!F&&(Q||P>2&&B.length===0&&w.length>0&&Sli(b.flatMap((q)=>q.connections.map((ne)=>({source:u.get(ne.connectionIndex),target:c.exits.get(ne.connectionIndex)})))))}),U=!1,X=!1,V=0,W={sites:new Map(u),paths:new Map(h),plans:[...A]},j=(q)=>{u.clear();for(let[ne,ce]of q.sites)u.set(ne,ce);h.clear();for(let[ne,ce]of q.paths)h.set(ne,ce);A.splice(0,A.length,...q.plans)};for(let q=Y.next();q;q=Y.next()){let ne=V++===0;m=H;for(let Ce of b)p.delete(Ce.busId);let ce=q.sourceOriginPhysicalGridPhase||q.sourceLayerTravelCost!==void 0?{sites:new Map(u),paths:new Map(h),plans:[...A]}:void 0,oe=()=>{if(!ce)return;j(ce)};if(q.sourceLayerTravelCost!==void 0)j(W);let ie=q.routeFromSourcePads||q.transitLayers.length<w.length,J={...e,srj:z&&(q.reserveFutureApproaches??t.reserveFutureApproaches)?{...s,traces:[...s.traces??[],...vli({...e,...c,excludedBusIds:new Set(b.map((Ce)=>Ce.busId))})]}:s,allBuses:r,buses:b,targetLayer:I,transitLayers:q.transitLayers,fixedViaPointsByConnectionIndex:u,sourceEscapePaths:h,acceptedPlans:m,terminals:b.flatMap((Ce)=>Ce.connections.map((ve)=>({connection:ve,viaPoint:u.get(ve.connectionIndex),exitPoint:c.exits.get(ve.connectionIndex)}))),tightViaChannels:!0,heuristicWeight:F?2:void 0,ripCost:q.ripCost,maximumRipEvents:400,maximumLocalRepairAttempts:ie?0:3,maximumIterations:1e8,shuffleSeed:q.shuffleSeed,sourceOriginPhysicalGridPhase:q.sourceOriginPhysicalGridPhase,sourceLayerTravelCost:q.sourceLayerTravelCost??(z?o?.travelCost:void 0),maximumSourceIterations:q.maximumSourceIterations??(z?o?.maximumIterations:void 0)},ee=function*(){if(q.routeFromSourcePads)return yield*zx({...J,routeFromSourcePads:!0,sourceLayerTravelCost:2,maximumRipEvents:1200,maximumIterations:50000000,maximumLocalRepairAttempts:0});if(!z)return yield*zx(J);let Ce=yield*cci({...J,cleanupRetainedBoundaryTails:q.sourceOriginPhysicalGridPhase});if(!Ce)return null;u.clear();for(let[ve,De]of Ce.fixedViaPointsByConnectionIndex)u.set(ve,De);h.clear();for(let[ve,De]of Ce.sourceEscapePaths)h.set(ve,De);return A.splice(0,A.length,...Ce.sourcePlans),Ce.plans}(),se=ee.next();while(!se.done){if(qoe(se.value)){let Ce=yield se.value;se=ee.next(Ce);continue}yield{phase:"route-layer",layer:I,routedConnectionCount:m.length+se.value.routedConnectionCount,iterations:se.value.iterations},se=ee.next()}let le=se.value;if(!le){if(oe(),z&&!q.sourceOriginPhysicalGridPhase&&q.sourceLayerTravelCost===void 0)return t.failedWideMatching=X,null;if(Y.failed(q,"routing"),i?.requested&&!e.sourceOriginRouting&&E&&I===_[0][0]&&ne&&q.shuffleSeed===1&&!q.routeFromSourcePads)i.requested=!1,i.reached=!0,yield{phase:"route-layer",layer:I,routedConnectionCount:m.length};continue}m=[...m,...le];for(let Ce of b)p.add(Ce.busId);yield{phase:"match-layer",layer:I,routedConnectionCount:m.length};let he=new Set(m.map((Ce)=>Ce.connectionIndex)),ue=[...m,...A.filter((Ce)=>!he.has(Ce.connectionIndex))],Ae=r.filter((Ce)=>p.has(Ce.busId));ue=FW({...e,inputSrj:s,plans:ue,preparedBuses:Ae,selectedBusIds:new Set(b.map((Ce)=>Ce.busId)),allowBlindAndBuriedVias:!1})??ue;let _e=q.routeFromSourcePads&&N,Pe=q.routeFromSourcePads??!1,Ee=e.sourceOriginRouting===!0&&P<=2&&H.length>0,Te=e.sourceOriginRouting&&E?r.filter((Ce)=>Ce.termination.type==="boundary"&&!p.has(Ce.busId)):void 0,be=(Ce)=>E1({...e,inputSrj:s,sharedBoundary:r[0].sharedBoundary,plans:ue,preparedBuses:Ae,allowBlindAndBuriedVias:!1,allowSameNetMerges:!1,allowMatchingInsideDenseBounds:!0,allowSourcePrefixMatching:_e,allowPairLaneSpreading:!0,allowUnconstrainedLaneRerouting:!0,unroutedSourceBuses:Te,maximumWorkUnits:Ce});function*me(){let Ce=Rli({...e,inputSrj:s,plans:ue,preparedBuses:r,selectedBusIds:new Set(b.map((De)=>De.busId))}),ve=Ce.next();while(!ve.done)yield{phase:"repair-lengths",layer:I,routedConnectionCount:m.length},ve=Ce.next();ue=ve.value??ue}if(E)yield*me();let ye=be(E?void 0:1000);if(!ye.plans&&x&&P>2&&I===_.at(-1)[0]){let Ce=E1({...e,inputSrj:s,sharedBoundary:r[0].sharedBoundary,plans:ue,preparedBuses:Ae,allowBlindAndBuriedVias:!1,allowSameNetMerges:!1,allowMatchingInsideDenseBounds:!0,allowSourcePrefixMatching:!0,allowTransitLayerMatching:!0,allowDistributedMatching:!0,allowPairLaneSpreading:!0,allowUnconstrainedLaneRerouting:!0,maximumWorkUnits:1e5});if(Ce.plans)ye=Ce,Pe=!0}if(!ye.plans&&!E&&!Ee)yield*me(),ye=be(ie||(e.sourceOriginRouting||C)&&P>2?1000:void 0);if(!ye.plans&&Ee&&y&&q.routeFromSourcePads){let Ce=_e;_e=!0;let ve=be(1000);if(ve.plans)ye=ve;else _e=Ce}if(!ye.plans&&(Ee||ye.failedBus&&q.routeFromSourcePads&&(T||N))){let Ce=ue,ve=_e,De=Pe,Ze=new Set,st=Ee?b.filter((et)=>et.connections.length===2).length:1;for(let et=0;et<st;et++){if(!ye.failedBus||ye.plans)break;let lt=ye.failedBus;if(Ee){if(lt.connections.length!==2||!b.some((Dt)=>Dt.busId===lt.busId)||Ze.has(lt.busId))break;Ze.add(lt.busId)}let it=Mrn({...e,inputSrj:s,plans:ue,preparedBuses:r,bus:lt}),gt=it.next();while(!gt.done)yield{phase:"repair-lengths",layer:I,routedConnectionCount:m.length,iterations:gt.value.iterations},gt=it.next();if(!gt.value)break;if(ue=gt.value,Pe=!0,Ee)_e=!0;let wt=function*(){ue=FW({...e,inputSrj:s,plans:ue,preparedBuses:Ae,selectedBusIds:new Set(b.map((vt)=>vt.busId)),allowBlindAndBuriedVias:!1})??ue;let Dt=be(1000);if(!Dt.plans&&!Ee)yield*me(),Dt=be(1000);return Dt};if(ye=yield*wt(),!ye.plans&&T)_e=!0,ye=yield*wt()}if(Ee&&!ye.plans)ue=Ce,_e=ve,Pe=De,yield*me(),ye=be()}if(!ye.plans&&e.sourceOriginRouting&&!E&&P>2&&I===_.at(-1)[0]){let Ce=ue,ve=ye,De=_e,Ze=Pe,st=zx({...J,routeFromSourcePads:!0,transitLayers:[],sourceLayerTravelCost:2,ripCost:64,shuffleSeed:1,maximumIterations:30000000,maximumRipEvents:400,maximumLocalRepairAttempts:0}),et=st.next();while(!et.done){if(qoe(et.value)){let lt=yield et.value;et=st.next(lt);continue}yield{phase:"repair-lengths",layer:I,routedConnectionCount:m.length,iterations:et.value.iterations},et=st.next()}if(et.value)ue=[...H,...et.value,...A.filter((lt)=>!he.has(lt.connectionIndex))],ue=FW({...e,inputSrj:s,plans:ue,preparedBuses:Ae,selectedBusIds:new Set(b.map((lt)=>lt.busId)),allowBlindAndBuriedVias:!1})??ue,_e=!0,ye=be(1000),Pe=!0;if(!ye.plans)ue=Ce,ye=ve,_e=De,Pe=Ze}if(ye.plans)ue=ye.plans;else{if(o&&z)return null;if(X=!0,ie){oe(),Y.failed(q,"lengths");continue}let Ce=Qli({...e,inputSrj:s,plans:ue,preparedBuses:r,busIds:b.map((De)=>De.busId)}),ve=Ce.next();while(!ve.done)yield{phase:"repair-lengths",layer:I,routedConnectionCount:m.length,iterations:ve.value.iterations},ve=Ce.next();if(ve.value)ue=ve.value;else{let De=sci({...e,inputSrj:s,plans:ue,preparedBuses:r,busIds:b.map((st)=>st.busId)}),Ze=De.next();while(!Ze.done)yield{phase:"repair-lengths",layer:I,routedConnectionCount:m.length,iterations:Ze.value.iterations},Ze=De.next();if(!Ze.value){let st=new Set(b.map((gt)=>gt.busId)),et=e.sourceOriginRouting&&E&&b.every((gt)=>!n.has(gt.busId))&&zrn({plans:ue,completedBuses:Ae,selectedBusIds:st});if(et)for(let gt of b)n.add(gt.busId);let lt=et?Ili({...e,inputSrj:s,plans:ue,preparedBuses:r,completedBuses:Ae,selectedBusIds:st}):void 0,it=lt?.next();while(it&&!it.done)yield{phase:"repair-lengths",layer:I,routedConnectionCount:m.length,iterations:it.value.iterations},it=lt.next();if(!it?.value){oe(),Y.failed(q,"lengths");continue}ue=it.value,Pe=!0}else ue=Ze.value}}if(m=ue.filter((Ce)=>he.has(Ce.connectionIndex)),Pe||Te?.length){let Ce=new Map([...b,...Te??[]].flatMap((ve)=>ve.connections.map((De)=>{let Ze=ue.find((lt)=>lt.connectionIndex===De.connectionIndex);if(!Ze.via)throw Error("Source-origin routing lost its source reservation");let st=[De.sourcePoint,...Ze.segments.slice(0,Ze.sourceEscapeSegmentCount??1).map((lt)=>lt.end)],et=cb({...e,bus:ve,terminal:{connection:De,viaPoint:Ze.via.center,exitPoint:Ze.via.center},targetLayer:Ze.via.toLayer,targetLayerPoints:[Ze.via.center],sourceEscapePoints:st,allowBlindAndBuriedVias:!1});return[De.connectionIndex,{plan:et,path:st}]})));for(let[ve,De]of Ce)u.set(ve,De.plan.via.center),h.set(ve,De.path);for(let ve=0;ve<A.length;ve++)A[ve]=Ce.get(A[ve].connectionIndex)?.plan??A[ve]}if(T&&q.routeFromSourcePads)C=!0;U=!0;break}if(!U)return t.failedNarrowGroup=P<=2&&H.length>0,t.failedWideMatching=e.sourceOriginRouting===!0&&P>2&&X,null}return eWe({...e,inputSrj:s,preparedBuses:r,plans:[...m,...A.filter((I)=>p.has(I.busId)&&I.termination.type==="plane")]})}function*Lli(e){let t=(r,s=e.preparedBuses)=>E1({plans:r,preparedBuses:s,inputSrj:e.inputSrj,sharedBoundary:e.sharedBoundary,clearance:e.clearance,allowBlindAndBuriedVias:e.allowBlindAndBuriedVias,allowSameNetMerges:e.allowSameNetMerges}),n=(r)=>Math.max(...r.map((s)=>s.length))-Math.min(...r.map((s)=>s.length)),o=new Set,i=[...e.plans];while(o.size<3){let r=t(i);if(r.plans)return r.plans;let s=r.failedBus;if(o.has(s.busId)||s.connections.length!==2||s.termination.type!=="boundary"||!s.exitEdge)return null;o.add(s.busId);let a=i.filter((x)=>x.busId===s.busId);if(a.length!==2||a.some((x)=>!x.via||x.additionalVias?.length)||a[0].targetLayer!==a[1].targetLayer)return null;let c=i.filter((x)=>x.busId!==s.busId),l=new Map(a.map((x)=>[x.connectionIndex,[x.sourcePoint,...x.segments.slice(0,x.sourceEscapeSegmentCount??1).map((C)=>C.end)]])),d=s.exitEdge==="left"||s.exitEdge==="right",u=d?"y":"x",h=d?e.sharedBoundary.minY:e.sharedBoundary.minX,A=d?e.sharedBoundary.maxY:e.sharedBoundary.maxX,m=(h+A)/2,p=Mr(s.exitEdge,s.preferredExit),g=e.traceWidth+e.clearance,_=n(a),f=[],y=null;e:for(let x of[0,1,-1,2,-2,3,-3,4,-4]){let C=x*g;if(a.some((I)=>{let b=I.exitPoint[u]+C;return b<h+e.traceWidth/2||b>A-e.traceWidth/2||p==="minimum"&&b>=m||p==="maximum"&&b<=m}))continue;for(let I of[0,-1,1])for(let b of[[0,1],[1,0]]){let P=yield*Kg({...e,bus:s,targetLayer:a[0].targetLayer,acceptedPlans:c,terminals:s.connections.map((w)=>{let T=a.find((Q)=>Q.connectionIndex===w.connectionIndex);return{connection:w,viaPoint:T.via.center,exitPoint:{...T.exitPoint,[u]:T.exitPoint[u]+C}}}),sourceEscapePaths:l,reservedVias:void 0,gridStep:g/2,gridStepDivisor:2,alignGridToPads:!0,maximumRouteOrderAttempts:1,routeOrder:b,laneBias:I},1,!1);if(!P.length||n(P[0])>=_)continue;let E=P[0].map((w)=>({...w,cornerBandSide:p}));if(f.push(E),n(E)>2*s.maxLengthSkew)continue;let B=t([...c,...E],[s]);if(!B.plans)continue;y=B.plans;break e}}if(!y)for(let x of f.toSorted((C,I)=>n(C)-n(I)).slice(0,3)){let C=t([...c,...x],[s]);if(!C.plans)continue;y=C.plans;break}if(!y)return null;i=y}return t(i).plans}var Vg=0.0000001;function Mxe(e,t){let n=e.filter((o,i)=>!i||kt(o,e[i-1])>0.000000001);return n.flatMap((o,i)=>{if(!i||i===n.length-1)return[o];let r=n[i-1],s=n[i+1],a=kt(r,o),c=kt(o,s);if(Math.abs((o.x-r.x)*(s.x-o.x)+(o.y-r.y)*(s.y-o.y))>0.000000001)return[o];let l=Math.min(t,a/3,c/3);return[{x:o.x+(r.x-o.x)*l/a,y:o.y+(r.y-o.y)*l/a},{x:o.x+(s.x-o.x)*l/c,y:o.y+(s.y-o.y)*l/c}]})}function Fli(e,t,n){if(e.length>28)return null;let{traceWidth:o,clearance:i,viaDiameter:r}=t,s=t.buses.flatMap((_)=>_.connections),a=VT(t.buses,{...t,additionalObstacles:t.srj.obstacles}),c=new Map(e.map((_,f)=>[_.connectionIndex,f])),l=s.map((_)=>({own:c.get(_.connectionIndex),masks:a.filter((f)=>f.connectionIndex===_.connectionIndex).map((f)=>{let y={start:_.sourcePoint,end:f.point,width:o,layer:_.sourceLayer},x=0;return e.forEach((C,I)=>{if(C.connectionIndex===_.connectionIndex)return;if(kt(f.point,C.exitPoint)<r+i-Vg||Bi(C.exitPoint,y.start,y.end)<r/2+o/2+i-Vg||C.segments.some((b)=>Bi(f.point,b.start,b.end)<r/2+o/2+i-Vg||!Jm(y,b,i)))x|=1<<I}),x})})),d=(_)=>Math.atan2(_.y-n.y,_.x-n.x),u=e.map((_,f)=>f).sort((_,f)=>d(e[f].exitPoint)-d(e[_].exitPoint)),h=t.bus.connections.toSorted((_,f)=>d(f.exitTargetPoint??f.targetPoint)-d(_.exitTargetPoint??_.targetPoint)),A=new Map(h.map((_,f)=>[_.connectionIndex,f])),m=(_)=>l.every((f)=>f.own!==void 0&&_&1<<f.own||f.masks.some((y)=>!(y&_))),p=[],g=0;for(let _=0;_<e.length;_++){let f=[...u.slice(_),...u.slice(0,_)],y=(x,C,I,b)=>{if(++g>1e6||b.length+f.length-x<p.length)return;if(x===f.length){if(b.length>p.length&&m(I))p=[...b];return}let P=f[x],E=A.get(e[P].connectionIndex);if(E>C)y(x+1,E,I|1<<P,[...b,P]);y(x+1,C,I,b)};y(0,-1,0,[])}return p.length>=3?p.map((_)=>e[_]):null}function*Hli(e){let{bus:t,srj:n,traceWidth:o,clearance:i,viaDiameter:r}=e;if(t.termination.type!=="boundary"||t.exitEdge!=="left"||t.connections.length<8||t.connections.length>28||e.targetLayer==="top"||t.connections.some((le)=>le.sourceLayer!=="top"))return null;let s=Math.min(t.pitchX,t.pitchY),a=o+i;if(!Number.isFinite(s)||s<=0)return null;let c=t.componentObstacles.filter((le)=>le.layers.includes("top")),l={minX:Math.min(...c.map((le)=>le.center.x-le.width/2)),maxX:Math.max(...c.map((le)=>le.center.x+le.width/2)),minY:Math.min(...c.map((le)=>le.center.y-le.height/2)),maxY:Math.max(...c.map((le)=>le.center.y+le.height/2))},d={x:(l.minX+l.maxX)/2,y:(l.minY+l.maxY)/2},u=Math.ceil(((l.maxX-l.minX)/2+s+a)/a)*a,h=Math.ceil(((l.maxY-l.minY)/2+s+a)/a)*a,A={minX:d.x-u,maxX:d.x+u,minY:d.y-h,maxY:d.y+h};if(A.minX<=t.sharedBoundary.minX||A.maxY>=t.sharedBoundary.maxY||A.minY<=t.sharedBoundary.minY)return null;let m=new Map(e.buses.flatMap((le)=>le.connections.map((he)=>[he.connectionIndex,{owner:le,connection:he}]))),p=(le)=>e.targetPointsByConnectionIndex?.get(le.connectionIndex)??{x:t.sharedBoundary.minX,y:(le.exitTargetPoint??le.targetPoint).y},g=(le)=>le.map((he,ue)=>({...t,busId:`${t.busId}:split-source:${ue}`,sharedBoundary:A,preferredExit:void 0,exitEdge:void 0,connections:[{...he,exitTargetPoint:void 0,hasExplicitLayeredExitTarget:!1,hasExplicitExitTarget:!1}]})),_=yield*yF({srj:n,buses:g(t.connections),traceWidth:o,clearance:i});if(!_||_.length!==t.connections.length)return null;let f=Fli(_,e,d);if(!f)return null;let y=(le,he)=>{let ue=m.get(le.connectionIndex).owner,Ae=ue===t?e.targetLayer:ue.termination.type==="plane"?ue.termination.layer:e.targetLayerByBusId?.get(ue.busId)??(ue.allowedLayers??e.layerNames).find((_e)=>_e!==le.sourceLayer);if(!Ae)throw Error("FanoutSolver: split source has no legal target layer");return{connectionIndex:le.connectionIndex,connectionName:le.connection.name,segments:he.slice(1).map((_e,Pe)=>({start:he[Pe],end:_e,width:o,layer:le.sourceLayer})),via:{center:he.at(-1),diameter:r,holeDiameter:e.viaHoleDiameter,fromLayer:le.sourceLayer,toLayer:Ae,spanLayers:Wy({fromLayer:le.sourceLayer,toLayer:Ae,layerNames:e.layerNames,allowBlindAndBuriedVias:!1})}}},x=(le,he)=>{let ue=m.get(le.connectionIndex).connection;if(le.segments.some((Ae)=>[Ae.start,Ae.end].some((_e)=>_e.x<t.sharedBoundary.minX-Vg||_e.x>t.sharedBoundary.maxX+Vg||_e.y<t.sharedBoundary.minY-Vg||_e.y>t.sharedBoundary.maxY+Vg)))return!1;for(let Ae of n.obstacles){if(Ae.layers.some((_e)=>le.via.spanLayers.includes(_e))&&jy(le.via.center,Ae)<r/2+i-Vg)return!1;if(Ae!==ue.sourceObstacle&&le.segments.some((_e)=>Ae.layers.includes(_e.layer)&&Jc(_e,Ae)<o/2+i-Vg))return!1}return he.every((Ae)=>Ae.connectionIndex===le.connectionIndex||kt(le.via.center,Ae.via.center)>=r+i-Vg&&le.segments.every((_e)=>Bi(Ae.via.center,_e.start,_e.end)>=r/2+o/2+i-Vg&&Ae.segments.every((Pe)=>Jm(_e,Pe,i)))&&Ae.segments.every((_e)=>Bi(le.via.center,_e.start,_e.end)>=r/2+o/2+i-Vg))},C=(le)=>{let he=new Set(le.map((ue)=>ue.connectionIndex));return e.buses.map((ue)=>({...ue,connections:ue.connections.filter((Ae)=>!he.has(Ae.connectionIndex))})).filter((ue)=>ue.connections.length)},I=e.initialViaPoints,b=(le)=>({...e,additionalObstacles:n.obstacles,maximumSearchStates:300000,blockingSegments:le.flatMap((he)=>he.segments.map((ue)=>({connectionIndex:he.connectionIndex,segment:ue}))),blockingVias:le.map((he)=>({connectionIndex:he.connectionIndex,...he.via})),preferredViaPointsByConnectionIndex:I}),P=f.map((le)=>y(m.get(le.connectionIndex).connection,[le.segments[0].start,...le.segments.map((he)=>he.end)])),E=qu(C(P),b(P));if(!E)return null;I=new Map([...E,...P.map((le)=>[le.connectionIndex,le.via.center])]);let B=f.toSorted((le,he)=>p(m.get(le.connectionIndex).connection).y-p(m.get(he.connectionIndex).connection).y),w=[];for(let le of B){let he=[le],ue=le.exitPoint.x;for(let Ae of B.slice(B.indexOf(le)+1))if(Ae.exitPoint.x>ue+a-Vg)he.push(Ae),ue=Ae.exitPoint.x;if(he.length>w.length)w=he}if(w.length<3)return null;let T=new Map(w.map((le)=>[le.connectionIndex,[le.segments[0].start,...le.segments.map((he)=>he.end)]])),Q=t.sharedBoundary.minX+Math.max(s/2,r/2+i),N=A.maxY+s-a/2,F=A.minX-s+a/2,H=()=>[...T].sort(([le],[he])=>p(m.get(le).connection).y-p(m.get(he).connection).y).map(([le,he],ue)=>{let Ae=p(m.get(le).connection),_e=he.at(-1);return y(m.get(le).connection,Mxe([...he,{x:_e.x,y:N+ue*a},{x:F-ue*a,y:N+ue*a},{x:F-ue*a,y:Ae.y},{x:Q,y:Ae.y}],o))}),z=H();if(z.some((le)=>!x(le,z)))return null;for(let le of t.connections.toSorted((he,ue)=>p(he).y-p(ue).y)){if(T.has(le.connectionIndex))continue;let he=[...T].filter(([Ae])=>p(m.get(Ae).connection).y<p(le).y).at(-1)?.[1].at(-1)?.x??A.minX,ue=[...T].filter(([Ae])=>p(m.get(Ae).connection).y>p(le).y)[0]?.[1].at(-1)?.x??A.maxX;for(let Ae of[-1,1]){let _e={x:le.sourcePoint.x+Ae*s/2,y:le.sourcePoint.y+s/2};if(_e.x<he+a-Vg||_e.x>ue-a+Vg)continue;let Pe=[le.sourcePoint,_e,{x:_e.x,y:A.maxY}];T.set(le.connectionIndex,Pe);let Ee=H();if(Ee.every((Te)=>x(Te,Ee))&&qu(C(Ee),b(Ee))){z=Ee;break}T.delete(le.connectionIndex)}}let Y=Math.min(...z.map((le)=>p(m.get(le.connectionIndex).connection).y));for(let le of _.filter((he)=>Math.abs(he.exitPoint.x-A.minX)<Vg&&p(m.get(he.connectionIndex).connection).y<Y).sort((he,ue)=>p(m.get(ue.connectionIndex).connection).y-p(m.get(he.connectionIndex).connection).y)){let he=m.get(le.connectionIndex).connection,ue=p(he),Ae=A.minX-a,_e=y(he,Mxe([le.segments[0].start,...le.segments.map((Pe)=>Pe.end),{x:Ae,y:le.exitPoint.y},{x:Ae,y:ue.y},{x:Q,y:ue.y}],o));if(x(_e,z)&&qu(C([...z,_e]),b([...z,_e])))z.push(_e)}let U=new Set(z.map((le)=>le.connectionIndex)),X=t.connections.filter((le)=>!U.has(le.connectionIndex)).sort((le,he)=>p(le).y-p(he).y);if(X.length<5)return null;let V=X.slice(0,3),W=V[1],j=V[2],q=[...n.obstacles,...z.flatMap((le)=>le.segments.map((he)=>({type:"rect",center:{x:(he.start.x+he.end.x)/2,y:(he.start.y+he.end.y)/2},width:kt(he.start,he.end),height:he.width,ccwRotationDegrees:Math.atan2(he.end.y-he.start.y,he.end.x-he.start.x)*180/Math.PI,layers:[he.layer],connectedTo:[le.connectionName]})))],ne=yield*yF({srj:{...n,obstacles:q},buses:g([W,j]),traceWidth:o,clearance:i,availableBoundaryRegions:[{direction:"down",preferredExit:"bottom",exitEdge:"bottom"}]});if(!ne?.length)return null;let ce=ne.find((le)=>le.connectionIndex===W.connectionIndex),oe=y(W,[ce.segments[0].start,...ce.segments.map((le)=>le.end)]);if(!x(oe,z))return null;z.push(oe),U.add(oe.connectionIndex);let ie=C(z),J=new Map([[j.connectionIndex,{x:j.sourcePoint.x-s/2,y:j.sourcePoint.y-s/2}]]),ee=qu(ie,{...b(z),fixedViaPointsByConnectionIndex:J});if(!ee)return null;let se=[...z,...ie.flatMap((le)=>le.connections.map((he)=>y(he,[he.sourcePoint,ee.get(he.connectionIndex)])))];if(se.some((le)=>!x(le,se)))return null;return{sourceEscapes:se,sourceBoundary:A,remoteConnectionIndices:U,bottomRemoteConnectionIndices:new Set([oe.connectionIndex]),lowerConnectionIndices:V.map((le)=>le.connectionIndex),viaPointsByConnectionIndex:new Map(se.map((le)=>[le.connectionIndex,le.via.center]))}}function*cGe(e){let t=new Set,n=new Set,o=[],i=0,r=null;function*s(l,d){let u=l.join(",")+":"+d;if(t.has(u)||i>=256)return;t.add(u),i++;let h=0,A=Kg({...e,routeOrder:l,laneBias:d,maximumRouteOrderAttempts:1},1,!1),m=A.next();while(!m.done)h=Math.max(h,m.value.connectionIndex),yield m.value,m=A.next();if(m.value.length){r=m.value[0];return}let p=l.slice(0,h+1).join(",")+":"+d;if(!n.has(p))n.add(p),o.push({order:l,bias:d,completed:h})}let c=e.terminals.map((l,d)=>d).toSorted((l,d)=>e.terminals[l].exitPoint.x-e.terminals[d].exitPoint.x);for(let l of[0,1,-1]){if(yield*s(c,l),r)return r;if(yield*s(c.toReversed(),l),r)return r}while(o.length&&i<256){o.sort((h,A)=>A.completed-h.completed);let{order:l,bias:d,completed:u}=o.shift();if(o.length>256)o.length=256;for(let h=u-1;h>=0;h--){let A=[...l],[m]=A.splice(u,1);if(A.splice(h,0,m),yield*s(A,d),r)return r;let p=[...l];if([p[u],p[h]]=[p[h],p[u]],yield*s(p,d),r)return r}}return null}function*Yrn(e){let{bus:t,srj:n,sourceBoundary:o,sourceEscapes:i,remoteConnectionIndices:r,bottomRemoteConnectionIndices:s,lowerConnectionIndices:a,targetLayer:c,traceWidth:l,clearance:d}=e;if(t.exitEdge!=="left"||t.termination.type!=="boundary"||a.length!==3)return null;let u=Math.min(t.pitchX,t.pitchY),h=l+d,A=new Map(i.map((se)=>[se.connectionIndex,se])),m=t.connections.map((se)=>({connection:se,viaPoint:A.get(se.connectionIndex).via.center,exitPoint:{x:t.sharedBoundary.minX,y:(se.exitTargetPoint??se.targetPoint).y}})).sort((se,le)=>se.exitPoint.y-le.exitPoint.y),p=new Map(m.map((se)=>[se.connection.connectionIndex,se])),g=a.map((se)=>p.get(se)),_=new Set(a),f=m.filter((se)=>!_.has(se.connection.connectionIndex)&&!r.has(se.connection.connectionIndex));if(f.length<2||g.some((se)=>!se))return null;let y=new Map(i.map((se)=>[se.connectionIndex,[se.segments[0].start,...se.segments.map((le)=>le.end)]])),x=(se,le)=>cb({...e,bus:t,terminal:se,targetLayerPoints:le,sourceEscapePoints:y.get(se.connection.connectionIndex),allowBlindAndBuriedVias:!1}),C=Math.min(o.minY-e.viaDiameter/2-l/2-d-0.00001,...g.map((se,le)=>se.exitPoint.y+(g.length-1-le)*h-h-l)),I=(se,le,he)=>{let ue=(he?f:g).findIndex((Te)=>Te.connection.connectionIndex===se.connection.connectionIndex),Ae=le.at(-1),_e=he?o.maxY+u-h/2+ue*h:C-(g.length-1-ue)*h,Pe=o.minX-e.viaDiameter/2-l/2-d-0.00001-(he?ue:g.length-1-ue)*h,Ee=Mxe([Ae,{x:Ae.x,y:_e},{x:Pe,y:_e},{x:Pe,y:se.exitPoint.y},se.exitPoint],l);return x(se,[...le,...Ee.slice(1)])},b=m.filter((se)=>r.has(se.connection.connectionIndex)).map((se)=>s.has(se.connection.connectionIndex)?I(se,[se.viaPoint],!1):x(se,[se.viaPoint,se.exitPoint])),P=!!e.rematchPendingSources,E=(se,le,he,ue,Ae=!1)=>{let _e=new Set(se.map((Ee)=>Ee.connection.connectionIndex)),Pe={...t,connections:se.map((Ee)=>Ee.connection),exitEdge:he?"top":"bottom",direction:he?"up":"down",preferredExit:void 0,sharedBoundary:Ae?t.sharedBoundary:{...t.sharedBoundary,maxY:o.maxY,...!he?{minY:o.minY}:{}}};return{...e,bus:Pe,terminals:se.map((Ee,Te)=>({...Ee,exitPoint:ue[Te]})),acceptedPlans:le,reservedVias:i.filter((Ee)=>!_e.has(Ee.connectionIndex)&&(!P||!e.rematchPendingSources?.connectionIndices.has(Ee.connectionIndex))).map((Ee)=>({connectionName:Ee.connectionName,via:Ee.via})),sourceEscapePaths:y,allowBlindAndBuriedVias:!1,allowSameNetMerges:!1,gridStepDivisor:2,gridStep:h/2,alignGridToPads:!0,reserveTerminalExitPoints:!0}},B=g[0],w=g.at(-1),T=f[0],Q=w.connection.sourcePoint,N=Q.x+u,F=[{x:T.connection.sourcePoint.x,y:T.connection.sourcePoint.y-u},{x:Q.x-u,y:Q.y},{x:N,y:Q.y}],H=[B.viaPoint];for(let se of F){let le={...B,viaPoint:H.at(-1)},he=E([le],b,!0,[se],!0);he.bus={...he.bus,exitEdge:"right",direction:"right"},he.sourceEscapePaths=void 0;let ue=yield*cGe(he);if(!ue)return null;H.push(...ue[0].segments.filter((Ae)=>Ae.layer===c).map((Ae)=>Ae.end))}H=Mxe([...H,{x:N,y:o.minY}],l);let z=I(B,H,!1),U={x:i.find((se)=>s.has(se.connectionIndex)).via.center.x-u,y:o.minY};P=!1;let X=yield*cGe(E([w],[...b,z],!1,[U]));if(!X)return null;let V=X[0].segments.filter((se)=>se.layer===c),W=I(w,[V[0].start,...V.map((se)=>se.end)],!1);if(e.rematchPendingSources){if(!e.rematchPendingSources.afterLowerStage([...b,z,W]))return null;for(let se of i)y.set(se.connectionIndex,[se.segments[0].start,...se.segments.map((le)=>le.end)])}let j=Math.min(...t.componentObstacles.map((se)=>se.center.x-se.width/2)),q=j+e.viaDiameter/2,ne=Math.max(...f.map((se)=>se.connection.sourcePoint.x))-u/2-l/2;if(ne-q<(f.length-1)*h)return null;let ce=f.map((se,le)=>({x:q+(ne-q)*le/(f.length-1),y:o.maxY})),oe=yield*cGe(E(f,[...b,z,W],!0,ce));if(!oe)return null;let ie=oe.map((se)=>{let le=se.segments.filter((ue)=>ue.layer===c),he=le.at(-1);if(he.end.y<=he.start.y)return null;return I(p.get(se.connectionIndex),[le[0].start,...le.map((ue)=>ue.end)],!0)});if(ie.some((se)=>!se))return null;let J=[...b,z,W,...ie];if(J.length!==t.connections.length)return null;let ee=J.map((se)=>se.length);if(t.maxLengthSkew!==void 0&&Math.max(...ee)-Math.min(...ee)>t.maxLengthSkew+lGe)return null;if(!Kh({plans:J,srj:n,sharedBoundary:t.sharedBoundary,clearance:d,allowBlindAndBuriedVias:!1,allowSameNetMerges:!1}))return null;for(let se of J)for(let le of i){if(se.connectionIndex===le.connectionIndex)continue;for(let he of se.segments){if(le.via.spanLayers.includes(he.layer)&&Bi(le.via.center,he.start,he.end)<le.via.diameter/2+he.width/2+d-lGe)return null;for(let ue of le.segments)if(he.layer===ue.layer&&ad(he.start,he.end,ue.start,ue.end)<(he.width+ue.width)/2+d-lGe)return null}}return J}var lGe=0.0000001,MS=0.0000001;function qJt(e,t){let n=new Map(e.buses.flatMap((i)=>i.connections).map((i)=>[i.connectionIndex,i])),o=e.bus.sharedBoundary;for(let i of t){let r=n.get(i.connectionIndex),s=i.via.diameter/2;for(let a of e.srj.obstacles){if(a.layers.some((c)=>i.via.spanLayers.includes(c))&&jy(i.via.center,a)<s+e.clearance-MS)return!1;if(a!==r.sourceObstacle&&i.segments.some((c)=>a.layers.includes(c.layer)&&Jc(c,a)<c.width/2+e.clearance-MS))return!1}for(let a of i.segments)if([a.start,a.end].some((c)=>c.x<o.minX-MS||c.x>o.maxX+MS||c.y<o.minY-MS||c.y>o.maxY+MS))return!1;for(let a of t){if(i.connectionIndex===a.connectionIndex)continue;if(kt(i.via.center,a.via.center)<s+a.via.diameter/2+e.clearance-MS)return!1;if(i.segments.some((c)=>a.via.spanLayers.includes(c.layer)&&Bi(a.via.center,c.start,c.end)<a.via.diameter/2+c.width/2+e.clearance-MS))return!1;if(i.segments.some((c)=>a.segments.some((l)=>!Jm(c,l,e.clearance))))return!1}}return!0}function*Oli(e){let{bus:t,traceWidth:n,clearance:o,viaDiameter:i}=e;if(t.exitEdge!=="left"||t.termination.type!=="boundary"||e.bottomRemoteConnectionIndices.size!==1)return null;let r=[...e.bottomRemoteConnectionIndices][0],s=e.sourceEscapes.find((m)=>m.connectionIndex===r),a=s?.segments.at(-1);if(!a||Math.abs(a.start.x-a.end.x)>MS||a.start.y<=a.end.y)return null;let c=Math.min(t.pitchX,t.pitchY);if(!Number.isFinite(c)||c<=0)return null;let l=n+o,d=t.yCoordinates.slice(1).map((m,p)=>(m+t.yCoordinates[p])/2).filter((m)=>m>a.end.y+MS&&m<a.start.y-MS).sort((m,p)=>m-p).slice(0,4),u=new Set([...t.connections.map((m)=>m.connectionIndex),...e.sourceEscapes.filter((m)=>m.segments.length>1).map((m)=>m.connectionIndex)]),h=e.buses.map((m)=>({...m,connections:m.connections.filter((p)=>!u.has(p.connectionIndex))})).filter((m)=>m.connections.length),A=new Set(h.flatMap((m)=>m.connections).map((m)=>m.connectionIndex));for(let m of d){yield{phase:"route-connection",routeOrderAttempt:0,connectionIndex:0,connectionCount:t.connections.length,connectionName:s.connectionName,searchBatch:0,expandedStateCount:0,connectionComplete:!1};let p=e.sourceEscapes.map((I)=>({...I,segments:I.segments.map((b)=>({...b,start:{...b.start},end:{...b.end}})),via:{...I.via,center:{...I.via.center}}})),g=new Map(e.viaPointsByConnectionIndex),_=p.find((I)=>I.connectionIndex===r);_.via.center={x:a.end.x,y:m},_.segments.at(-1).end=_.via.center,g.set(r,_.via.center);let f=p.filter((I)=>u.has(I.connectionIndex)),y=(I=[])=>{let b=qu(h,{...e,additionalObstacles:e.srj.obstacles,maximumSearchStates:300000,preferredViaPointsByConnectionIndex:g,blockingSegments:[...f.flatMap((P)=>P.segments.map((E)=>({connectionIndex:P.connectionIndex,segment:E}))),...I.flatMap((P)=>P.segments.filter((E)=>E.layer===e.targetLayer).map((E)=>({connectionIndex:P.connectionIndex,segment:E})))],blockingVias:f.map((P)=>({connectionIndex:P.connectionIndex,...P.via}))});if(!b)return!1;for(let P of p)if(A.has(P.connectionIndex)){let E=b.get(P.connectionIndex);P.via={...P.via,center:E},P.segments=[{...P.segments[0],end:E}],g.set(P.connectionIndex,E)}return qJt(e,p)};if(!y())continue;let x={...e.sourceBoundary,minY:m-c+i/2+n/2+o+0.00001+l},C=yield*Yrn({...e,sourceEscapes:p,sourceBoundary:x,viaPointsByConnectionIndex:g,rematchPendingSources:{connectionIndices:A,afterLowerStage:y}});if(C&&qJt(e,p))return{plans:C,sourceEscapes:p,sourceBoundary:{...e.sourceBoundary},viaPointsByConnectionIndex:g,remoteConnectionIndices:new Set(e.remoteConnectionIndices),bottomRemoteConnectionIndices:new Set(e.bottomRemoteConnectionIndices),lowerConnectionIndices:[...e.lowerConnectionIndices]}}return null}function C3(e){return e==="left"||e==="right"}function BCe(e){return e==="right"||e==="up"?1:-1}function Ug(e,t){return C3(t)?e.x:e.y}function I3(e,t){return C3(t)?e.y:e.x}function zy(e,t,n){return C3(n)?{x:e,y:t}:{x:t,y:e}}function wCe(e){switch(e.direction){case"right":return e.sharedBoundary.maxX;case"left":return e.sharedBoundary.minX;case"up":return e.sharedBoundary.maxY;case"down":return e.sharedBoundary.minY}}function q2e(e){if(e.length<3)return e;let t=[e[0]];for(let n=1;n<e.length-1;n++){let o=t.at(-1),i=e[n],r=e[n+1],s={x:Math.sign(i.x-o.x),y:Math.sign(i.y-o.y)},a={x:Math.sign(r.x-i.x),y:Math.sign(r.y-i.y)};if(s.x!==a.x||s.y!==a.y)t.push(i)}return t.push(e.at(-1)),t}function woe(e,t){let n=[];for(let o=1;o<e.length;o++){if(kt(e[o-1],e[o])<0.000000001)continue;n.push({start:e[o-1],end:e[o],width:t,layer:"top"})}return n}function zli(e){let{srj:t,bus:n,connection:o,traceWidth:i,clearance:r}=e,s=n.direction,a=BCe(s),c={x:o.sourcePoint.x,y:o.sourcePoint.y},l=Ug(c,s),d=I3(c,s),u=i/2+r,h=(()=>{switch(s){case"right":return n.componentBounds.maxX+u;case"left":return n.componentBounds.minX-u;case"up":return n.componentBounds.maxY+u;case"down":return n.componentBounds.minY-u}})(),A=(C)=>Math.min(...t.obstacles.filter((I)=>I!==o.sourceObstacle&&I.layers.includes("top")).map((I)=>Jc(C,I))),m={start:c,end:zy(h,d,s),width:i,layer:"top"};if(A(m)>=u-0.000000001)return null;let p=C3(s)?{minimum:n.componentBounds.minY,maximum:n.componentBounds.maxY}:{minimum:n.componentBounds.minX,maximum:n.componentBounds.maxX},g=a*(h-l),_=I3(o.exitTargetPoint??o.targetPoint,s),f=i+r,y=wCe(n),x=[-1,1].map((C)=>{let I=C<0?p.minimum-u:p.maximum+u,b=C*(I-d),P=Math.max(g,b),E=zy(l+a*P,d+C*P,s);if(a*(y-Ug(E,s))<f-0.000000001)return null;let B=[c,E];if(!B.every((Q)=>Q.x>=n.sharedBoundary.minX-0.000000001&&Q.x<=n.sharedBoundary.maxX+0.000000001&&Q.y>=n.sharedBoundary.minY-0.000000001&&Q.y<=n.sharedBoundary.maxY+0.000000001))return null;let T=Math.min(...woe(B,i).map(A));if(T<u-0.000000001)return null;return{points:B,obstacleDistance:T,targetDistance:Math.abs(I3(E,s)-_)}}).filter((C)=>C!==null).toSorted((C,I)=>I.obstacleDistance-C.obstacleDistance||C.targetDistance-I.targetDistance);return x.length>0?x.map((C)=>C.points):null}function Gli(e){let{item:t,srj:n,acceptedSegments:o,traceWidth:i,clearance:r}=e,s=t.cornerChannelPrefixes;if(!s)return null;let a=t.direction,c=BCe(a),l=wCe(t.bus),d=i+r,u=i/2+r,h=C3(a)?t.bus.sharedBoundary.minY:t.bus.sharedBoundary.minX,A=C3(a)?t.bus.sharedBoundary.maxY:t.bus.sharedBoundary.maxX,m=h+i/2,p=A-i/2,g=I3(t.connection.exitTargetPoint??t.connection.targetPoint,a),_=d/2,f=new Set([Math.max(m,Math.min(p,g))]);for(let x=Math.ceil(m/_)*_;x<=p+0.000000001;x+=_)f.add(Number(x.toFixed(9)));let y=[...f].toSorted((x,C)=>Math.abs(x-g)-Math.abs(C-g));for(let x of s){let C=x.at(-1),I=I3(C,a);for(let b of y){let P=Math.abs(b-I),E=zy(Ug(C,a)+c*d,I,a),B=zy(Ug(E,a)+c*P,b,a);if(c*(l-Ug(B,a))<-0.000000001)continue;let w=zy(l,b,a),T=[...x,E,...P>0.000000001?[B]:[]];if(kt(T.at(-1),w)>0.000000001)T.push(w);let Q=q2e(T),N=woe(Q,i);if(!N.every((z)=>n.obstacles.every((Y)=>Y===t.connection.sourceObstacle||!Y.layers.includes("top")||Jc(z,Y)>=u-0.000000001)))continue;if(!N.every((z)=>o.every((Y)=>ad(z.start,z.end,Y.start,Y.end)>=i+r-0.000000001)))continue;return{item:t,points:Q,track:b}}}return null}function Yli(e){let{route:t,direction:n,exitAxis:o,signedShift:i,maximumShift:r,obstacles:s,requiredObstacleDistance:a}=e;if(r<=0.000000001||Math.abs(i)<=0.000000001)return 0;let c=Math.sign(i),l=(h)=>{if(h<=0.000000001)return!0;let A={start:zy(o-BCe(n)*h,t.track,n),end:zy(o,t.track+c*h,n),width:0,layer:"top"};return s.every((m)=>m===t.item.connection.sourceObstacle||!m.layers.includes("top")||Jc(A,m)>=a-0.000000001)};if(l(r))return r;let d=0,u=r;for(let h=0;h<32;h++){let A=(d+u)/2;if(l(A))d=A;else u=A}return d}function Vli(e){let{requestedTracks:t,currentTracks:n,candidateTracks:o,maximumShifts:i}=e,r=t.length+1,s=o.length+1,a=Array.from({length:r},()=>new Float64Array(s).fill(Number.POSITIVE_INFINITY)),c=Array.from({length:r},()=>new Uint8Array(s));a[0].fill(0);for(let h=1;h<r;h++)for(let A=1;A<s;A++){let m=a[h][A-1],p=Math.abs(t[h-1]-o[A-1]),_=Math.abs(n[h-1]-o[A-1])>i[h-1]+0.000000001?Number.POSITIVE_INFINITY:a[h-1][A-1]+p;if(_<m)a[h][A]=_,c[h][A]=1;else a[h][A]=m}if(!Number.isFinite(a.at(-1).at(-1)))return null;let l=[],d=t.length,u=o.length;while(d>0&&u>0){if(c[d][u])l.push(o[u-1]),d--;u--}if(d>0)return null;return l.reverse()}function Uli(e){let{direction:t,activeRoutes:n,obstacles:o,boundaryMinimum:i,boundaryMaximum:r,traceWidth:s,clearance:a,requestedTracks:c,maximumShifts:l}=e,d=s+a,u=s/2+a,h=null,A=Number.POSITIVE_INFINITY;for(let m of Array.from({length:Math.round(d/s)},(p,g)=>g*s)){let p=[],g=Math.ceil((i-m)/d)*d+m;for(let y=g;y<=r+0.000000001;y+=d){let x=Math.round(y/s)*s;if(o.every((C)=>{let I=I3(C.center,t),b=C3(t)?C.height:C.width;return Math.abs(x-I)>=b/2+u-0.000000001}))p.push(x)}let _=Vli({requestedTracks:c,currentTracks:n.map((y)=>y.track),candidateTracks:p,maximumShifts:l});if(!_)continue;let f=_.reduce((y,x,C)=>y+Math.abs(x-c[C]),0);if(f<A)A=f,h=_}return h}function Wli(e,t){switch(t){case"up":if(e==="top-left")return"minimum";if(e==="top-right")return"maximum";return null;case"down":if(e==="bottom-left")return"minimum";if(e==="bottom-right")return"maximum";return null;case"left":if(e==="bottom-left")return"minimum";if(e==="top-left")return"maximum";return null;case"right":if(e==="bottom-right")return"minimum";if(e==="top-right")return"maximum";return null}}function Xli(e){let{items:t,direction:n,boundaryMinimum:o,boundaryMaximum:i,traceWidth:r,clearance:s,borderDistribution:a,currentTrackByConnectionName:c}=e,l=(b)=>c.get(b.connection.connection.name)??I3(b.source,n),d=[...t].toSorted((b,P)=>l(b)-l(P)||b.connection.connection.name.localeCompare(P.connection.connection.name)),u=r+s,h=o+r/2,A=i-r/2,m=A-h,p=u*Math.max(d.length-1,0);if(m<p-0.000000001)return null;let g=d.map(l),_=[...g],f=u,y=new Set;if(a==="even"&&d.length>1){let b=g[0],P=g.at(-1),E=Math.max(u,(P-b)/(d.length-1)),B=(T)=>{let Q=[...g],N=Math.floor(d.length/2),F=d.length%2===0?N-1:N;if(F!==N){let H=Q[N]-Q[F];if(H<T){let z=(T-H)/2;Q[F]=Q[F]-z,Q[N]=Q[N]+z}}for(let H=F-1;H>=0;H--)Q[H]=Math.min(Q[H],Q[H+1]-T);for(let H=N+1;H<Q.length;H++)Q[H]=Math.max(Q[H],Q[H-1]+T);return Q},w=(T)=>T[0]>=h-0.000000001&&T.at(-1)<=A+0.000000001;if(_=B(E),w(_))f=E;else{let T=u,Q=E;if(_=B(T),!w(_))return null;for(let N=0;N<32;N++){let F=(T+Q)/2,H=B(F);if(w(H))T=F,_=H;else Q=F}f=T}for(let T of d)y.add(T.connection.connection.name)}let x=[],C=[];for(let b=0;b<d.length;b++){let P=d[b],E=P.bus.preferredExit;if(!E?.includes("-"))continue;let B=Wli(E,n);if(!B)return null;if(y.add(P.connection.connection.name),B==="minimum")x.push(b);else C.push(b)}if(x.some((b,P)=>b!==P)||C.some((b,P)=>b!==d.length-C.length+P))return null;let I=u*2;if(x.length>0){_[0]=h+I;for(let b=1;b<x.length;b++){let P=Math.max(f,g[b]-g[b-1]);_[b]=_[b-1]+P}}if(C.length>0){let b=d.length-1;_[b]=A-I;for(let P=b-1;P>=d.length-C.length;P--){let E=Math.max(f,g[P+1]-g[P]);_[P]=_[P+1]-E}}return{byConnectionName:new Map(d.map((b,P)=>[b.connection.connection.name,_[P]])),enforcedConnectionNames:y}}function Kli(e){let{item:t,points:n,segments:o}=e,i=n.map((s,a)=>({route_type:"wire",x:s.x,y:s.y,width:o[0]?.width??0.1,layer:"top",...a===0&&t.connection.sourcePoint.pcb_port_id?{start_pcb_port_id:t.connection.sourcePoint.pcb_port_id}:{}})),r=wF({connectionName:t.connection.connection.name,sourcePointIndex:t.connection.sourcePointIndex});return{busId:t.bus.busId,connectionName:t.connection.connection.name,connectionIndex:t.connection.connectionIndex,sourcePointIndex:t.connection.sourcePointIndex,sourcePoint:t.connection.sourcePoint,sourceObstacle:t.connection.sourceObstacle,sourceLayer:t.connection.sourceLayer,targetPoint:t.connection.targetPoint,targetLayer:"top",termination:t.bus.termination,direction:t.direction,...t.bus.exitEdge?{exitEdge:t.bus.exitEdge}:{},exitPoint:n.at(-1),trace:{type:"pcb_trace",pcb_trace_id:r.traceId,connection_name:t.connection.connection.name,connectsTo:[...t.connection.sourcePoint.pointId?[t.connection.sourcePoint.pointId]:[],...t.connection.sourcePoint.pcb_port_id?[t.connection.sourcePoint.pcb_port_id]:[],r.boundaryExitPointId],route:i},segments:o,length:o.reduce((s,a)=>s+kt(a.start,a.end),0)}}function jli(e){let{paths:t,obstacles:n,traceWidth:o,clearance:i}=e,r=o/2+i,s=o+i;for(let a of t){if(Math.abs(Ug(a.points.at(-1),a.item.direction)-wCe(a.item.bus))>0.000001)return!1;for(let c of a.segments)for(let l of n){if(l===a.item.connection.sourceObstacle||!l.layers.includes("top"))continue;if(Jc(c,l)<r-0.000000001)return!1}}for(let a=0;a<t.length;a++)for(let c=a+1;c<t.length;c++)for(let l of t[a].segments)for(let d of t[c].segments)if(ad(l.start,l.end,d.start,d.end)<s-0.000000001)return!1;return!0}function qli(e){let{srj:t,buses:n,traceWidth:o,clearance:i,borderDistribution:r}=e,s=o/2+i,a=new Map,c=new Map,l=n.flatMap((A)=>A.connections.map((m)=>{let p={x:m.sourcePoint.x,y:m.sourcePoint.y},g=zli({srj:t,bus:A,connection:m,traceWidth:o,clearance:i});return{bus:A,connection:m,direction:A.direction,source:p,...g?{cornerChannelPrefixes:g}:{}}}));for(let A of["left","right","up","down"]){let m=BCe(A),p=l.filter((N)=>N.direction===A&&!N.cornerChannelPrefixes);if(p.length===0)continue;let g=C3(A)?p[0].bus.sharedBoundary.minY:p[0].bus.sharedBoundary.minX,_=C3(A)?p[0].bus.sharedBoundary.maxY:p[0].bus.sharedBoundary.maxX,f=wCe(p[0].bus),y=new Map,x=new Map,C=new Map;for(let N of p){let F=Ug(N.source,A),H=F.toFixed(6);C.set(H,F);let z=y.get(H)??[];z.push(N),y.set(H,z)}for(let[N,F]of y){let H=C.get(N),z=new Set(F.map((Y)=>Y.bus.componentId));x.set(N,t.obstacles.filter((Y)=>Y.layers.includes("top")&&!!Y.componentId&&z.has(Y.componentId)&&Math.abs(Ug(Y.center,A)-H)<0.000001))}let I=[...C.values()].toSorted((N,F)=>m*(N-F)),b=new Map;for(let N=0;N<I.length;N++){let F=I[N],H=F.toFixed(6);for(let W of y.get(H)??[]){let j=C3(A)?W.connection.sourceObstacle.width:W.connection.sourceObstacle.height,q=Math.max(W.connection.sourceObstacle.width,W.connection.sourceObstacle.height)<1.5?j/2+s:0,ne=zy(F+m*q,I3(W.source,A),A);b.set(W.connection.connection.name,{item:W,points:kt(W.source,ne)>0.000000001?[W.source,ne]:[W.source],track:I3(W.source,A)})}let z=I[N+1]??f;if(b.size===0||m*(z-F)<=0.000000001)continue;let Y=[...b.values()].toSorted((W,j)=>W.track-j.track||W.item.connection.connection.name.localeCompare(j.item.connection.connection.name)),U=I.slice(N+1,N+3).flatMap((W)=>x.get(W.toFixed(6))??[]),X=Y.map((W)=>Math.abs(z-Ug(W.points.at(-1),A))),V=Uli({direction:A,activeRoutes:Y,obstacles:U,boundaryMinimum:g,boundaryMaximum:_,traceWidth:o,clearance:i,requestedTracks:Y.map((W)=>W.track),maximumShifts:X});if(!V)return null;for(let W=0;W<Y.length;W++){let j=Y[W],q=V[W],ne=Math.abs(q-j.track),ce=Ug(j.points.at(-1),A),oe=zy(ce+m*ne,q,A);if(kt(j.points.at(-1),oe)>0.000000001)j.points.push(oe);let ie=zy(z,q,A);if(kt(j.points.at(-1),ie)>0.000000001)j.points.push(ie);j.track=q}}let P=Xli({items:p,direction:A,boundaryMinimum:g,boundaryMaximum:_,traceWidth:o,clearance:i,borderDistribution:r,currentTrackByConnectionName:new Map([...b.values()].map((N)=>[N.item.connection.connection.name,N.track]))});if(!P)return null;let E=[...b.values()].toSorted((N,F)=>N.track-F.track||N.item.connection.connection.name.localeCompare(F.item.connection.connection.name)),B=new Map,w=o+i,T=w;for(let N of E){let F=N.item.connection.connection.name;if(!P.enforcedConnectionNames.has(F))continue;if(P.byConnectionName.get(F)-N.track>=-0.000000001)continue;B.set(F,T),T+=w*2}let Q=w;for(let N=E.length-1;N>=0;N--){let F=E[N],H=F.item.connection.connection.name;if(!P.enforcedConnectionNames.has(H))continue;if(P.byConnectionName.get(H)-F.track<=0.000000001)continue;B.set(H,Q),Q+=w*2}for(let N of E){let F=N.item.connection.connection.name,H=P.byConnectionName.get(F)??N.track,z=B.get(F)??0,Y=N.points.at(-2),U=Y?m*(f-Ug(Y,A)):0,X=H-N.track,V=Math.min(Math.abs(X),Math.max(0,U-z)),W=Yli({route:N,direction:A,exitAxis:f,signedShift:X,maximumShift:V,obstacles:t.obstacles,requiredObstacleDistance:s}),j=Math.sign(X)*W;P.byConnectionName.set(F,N.track+j)}for(let N of P.enforcedConnectionNames)c.set(N,P.byConnectionName.get(N));for(let N of E){let F=N.item.connection.connection.name,H=P.byConnectionName.get(F)??N.track,z=Math.abs(H-N.track),Y=B.get(F)??0,U=z>0.000000001?Y+z:0,X=f-m*U,V=N.points.at(-1);if(Math.abs(Ug(V,A)-f)>0.000001)return null;let W=N.points.at(-2);if(W&&(Math.abs(I3(W,A)-N.track)>0.000001||m*(X-Ug(W,A))<-0.000001))return null;let j=zy(X,N.track,A);if(W&&kt(W,j)<0.000000001)N.points.pop();else N.points[N.points.length-1]=j}for(let N of E){let F=N.item.connection.connection.name,H=P.byConnectionName.get(F)??N.track,z=Math.abs(H-N.track),Y=B.get(F)??0;if(z>0.000000001&&Y>0.000000001)N.points.push(zy(Ug(N.points.at(-1),A)+m*Y,N.track,A));if(z>0.000000001)N.points.push(zy(Ug(N.points.at(-1),A)+m*z,H,A)),N.track=H;let U=zy(f,N.track,A);if(kt(N.points.at(-1),U)>0.000000001){if(m*(f-Ug(N.points.at(-1),A))<-0.000001)return null;N.points.push(U)}a.set(F,N)}}let d=[...a.values()].flatMap((A)=>woe(q2e(A.points),o));for(let A of l){if(!A.cornerChannelPrefixes)continue;let m=Gli({item:A,srj:t,acceptedSegments:d,traceWidth:o,clearance:i});if(!m)return null;a.set(A.connection.connection.name,m),d.push(...woe(q2e(m.points),o))}if(a.size!==l.length)return null;let u=(o+i)/2+0.000001;for(let[A,m]of c){let p=a.get(A);if(!p||Math.abs(p.track-m)>u)return null}let h=l.map((A)=>{let m=a.get(A.connection.connection.name),p=q2e(m.points);return{item:A,points:p,segments:woe(p,o)}});if(!jli({paths:h,obstacles:t.obstacles,traceWidth:o,clearance:i}))return null;return h.map(Kli)}var Jli=(e)=>e.process??{env:{}};function $li(e){let{bus:t}=e,n=[...e.plans];if(t.maxLengthSkew===void 0)return n;let o=n.filter((i)=>i.busId===t.busId).toSorted((i,r)=>r.length-i.length);for(let i of o){let r=Math.min(...n.filter((a)=>a.busId===t.busId).map((a)=>a.length));if(i.length-r<=t.maxLengthSkew)continue;if(!i.via||i.additionalVias?.length||i.planeEndpointVia||i.segments.filter((a)=>a.layer===i.sourceLayer).length!==1)continue;let s=t.connections.find((a)=>a.connectionIndex===i.connectionIndex);for(let a of[!0,!1]){let c=prn({...e,bus:{...t,connections:[s],routableEscapeLayers:[i.targetLayer]},terminals:[{connection:s,viaPoint:i.via.center,exitPoint:i.exitPoint}],targetLayer:i.targetLayer,acceptedPlans:n.filter((d)=>d!==i),allowBlindAndBuriedVias:!1,gridStepDivisor:2,alignGridToPads:a,maximumRouteOrderAttempts:1})?.[0];if(!c||c.length>=i.length-0.000001)continue;let l=n.map((d)=>d===i?c:d);if(!Kh({...e,plans:l,allowBlindAndBuriedVias:!1}))continue;n=l;break}}return n}var Ml=0.000001;function z_(e,t){return kt(e,t)<=Ml}function JJt(e){return"layer"in e?[e.layer]:e.layers}function tF(e){return[...e.segments,...e.planeEndpointSegments??[]]}function nF(e){return[e.via,...e.additionalVias??[],e.planeEndpointVia].filter((t)=>Boolean(t))}function $Jt(e,t){return z_(e,t)&&JJt(e).join("\x00")===JJt(t).join("\x00")&&e.pointId===t.pointId&&e.pcb_port_id===t.pcb_port_id}function ZJt(e,t){let n=e.x>=t.minX-Ml&&e.x<=t.maxX+Ml&&e.y>=t.minY-Ml&&e.y<=t.maxY+Ml,o=Math.abs(e.x-t.minX)<=Ml||Math.abs(e.x-t.maxX)<=Ml||Math.abs(e.y-t.minY)<=Ml||Math.abs(e.y-t.maxY)<=Ml;return n&&o}function Zli(e,t,n){if(!(e.x>=n.minX-Ml&&e.x<=n.maxX+Ml&&e.y>=n.minY-Ml&&e.y<=n.maxY+Ml))return!1;switch(t){case"left":return Math.abs(e.x-n.minX)<=Ml;case"right":return Math.abs(e.x-n.maxX)<=Ml;case"top":return Math.abs(e.y-n.maxY)<=Ml;case"bottom":return Math.abs(e.y-n.minY)<=Ml}}function e$t(e,t){return e.x>=t.minX-Ml&&e.x<=t.maxX+Ml&&e.y>=t.minY-Ml&&e.y<=t.maxY+Ml}function Ts(e,t,n,o,i){e.push({code:t,message:n,...o?{connectionName:o.connectionName,busId:o.busId}:{},...i?{otherConnectionName:i}:{}})}function t$t(e){let{trace:t,plan:n,issues:o}=e,i=[],r,s;for(let a of t.route){if(a.route_type==="via"){if(!r||!z_(r,a)||r.layer!==a.from_layer)Ts(o,"disconnected-trace",`Trace ${t.pcb_trace_id} reaches a via without a matching ${a.from_layer} wire endpoint`,n);s=a;continue}if(a.route_type!=="wire"){Ts(o,"unsupported-route-point",`Trace ${t.pcb_trace_id} contains unsupported ${a.route_type} geometry`,n);continue}if(s){if(!z_(a,s)||a.layer!==s.to_layer)Ts(o,"disconnected-trace",`Trace ${t.pcb_trace_id} does not continue from its via on ${s.to_layer}`,n);r=a,s=void 0;continue}if(r){if(r.layer!==a.layer)Ts(o,"disconnected-trace",`Trace ${t.pcb_trace_id} changes from ${r.layer} to ${a.layer} without a via`,n);else if(!z_(r,a))i.push({start:{x:r.x,y:r.y},end:{x:a.x,y:a.y},width:a.width,layer:a.layer})}r=a}if(s)Ts(o,"disconnected-trace",`Trace ${t.pcb_trace_id} ends at a via without a wire on ${s.to_layer}`,n);return i}function edi(e){let{plan:t,preparedBus:n,inputSrj:o,outputSrj:i,sharedBoundary:r,issues:s}=e,a=o.connections[t.connectionIndex];if(!a||a.name!==t.connectionName){Ts(s,"connection-mismatch",`Plan index ${t.connectionIndex} does not identify connection ${t.connectionName}`,t);return}let c=n?.connections.find((_)=>_.connectionIndex===t.connectionIndex);if(!c||c.sourcePointIndex!==t.sourcePointIndex||!$Jt(c.sourcePoint,t.sourcePoint)||c.sourceObstacle.obstacleId!==t.sourceObstacle.obstacleId)Ts(s,"source-mismatch",`Plan ${t.connectionName} does not start at its prepared component endpoint`,t);if(n?.termination.type!==t.termination.type)Ts(s,"termination-mismatch",`Plan ${t.connectionName} does not use its bus termination`,t);let l=Mr(n?.exitEdge,n?.preferredExit);if(n?.exitEdge!==t.exitEdge||l!==t.cornerBandSide)Ts(s,"output-exit-mismatch",`Plan ${t.connectionName} does not retain its prepared boundary edge and band`,t);else if(n?.exitEdge&&!Zli(t.exitPoint,n.exitEdge,r))Ts(s,"output-exit-mismatch",`Plan ${t.connectionName} does not terminate on its declared ${n.exitEdge} edge`,t);if(!(o.allowViaInPad===!0&&t.termination.type==="plane"&&t.via!==void 0&&z_(t.via.center,t.sourcePoint)&&z_(t.exitPoint,t.sourcePoint))&&(t.segments.length===0||t.length<=Ml))Ts(s,"not-broken-out",`Plan ${t.connectionName} has no non-zero escape geometry`,t);else{let _={minX:Math.min(o.bounds.minX,r.minX),maxX:Math.max(o.bounds.maxX,r.maxX),minY:Math.min(o.bounds.minY,r.minY),maxY:Math.max(o.bounds.maxY,r.maxY)};if(t.segments.some((f)=>!e$t(f.start,_)||!e$t(f.end,_)))Ts(s,"outside-routing-bounds",`Plan ${t.connectionName} leaves the routable SRJ/shared-boundary area`,t);if(t.segments[0]&&!z_(t.segments[0].start,t.sourcePoint))Ts(s,"disconnected-trace",`Plan ${t.connectionName} does not start at its source pad`,t);if(t.segments.at(-1)&&!z_(t.segments.at(-1).end,t.exitPoint))Ts(s,"disconnected-trace",`Plan ${t.connectionName} does not end at its declared exit`,t);for(let f=1;f<t.segments.length;f++){let y=t.segments[f-1],x=t.segments[f];if(!z_(y.end,x.start))Ts(s,"disconnected-trace",`Plan ${t.connectionName} has a gap between route segments`,t);let C=nF(t).find((I)=>z_(y.end,I.center)&&I.spanLayers.includes(y.layer)&&I.spanLayers.includes(x.layer));if(y.layer!==x.layer&&!C)Ts(s,"disconnected-trace",`Plan ${t.connectionName} changes layers without a connecting via`,t)}}let u=[...t.segments,...t.planeEndpointSegments??[]].reduce((_,f)=>_+kt(f.start,f.end),0);if(Math.abs(u-t.length)>0.000001)Ts(s,"plan-length-mismatch",`Plan ${t.connectionName} declares ${t.length.toFixed(6)}mm but contains ${u.toFixed(6)}mm of routed copper`,t);let h=t$t({trace:t.trace,plan:t,issues:s}),A=t.segments.filter((_)=>kt(_.start,_.end)>Ml);if(h.length!==A.length||h.some((_,f)=>{let y=A[f];return!y||_.layer!==y.layer||Math.abs(_.width-y.width)>Ml||!z_(_.start,y.start)||!z_(_.end,y.end)}))Ts(s,"trace-plan-mismatch",`Trace ${t.trace.pcb_trace_id} does not encode its declared route segments`,t);if(t.planeEndpointTrace||t.planeEndpointSegments||t.planeEndpointVia)if(!t.planeEndpointTrace||!t.planeEndpointSegments||!t.planeEndpointVia)Ts(s,"trace-plan-mismatch",`Plane endpoint geometry for ${t.connectionName} is incomplete`,t);else{let _=t$t({trace:t.planeEndpointTrace,plan:t,issues:s});if(_.length!==t.planeEndpointSegments.length||_.some((f,y)=>{let x=t.planeEndpointSegments?.[y];return!x||f.layer!==x.layer||Math.abs(f.width-x.width)>Ml||!z_(f.start,x.start)||!z_(f.end,x.end)})||kt(t.planeEndpointVia.center,t.targetPoint)<=Ml)Ts(s,"trace-plan-mismatch",`Trace ${t.planeEndpointTrace.pcb_trace_id} does not encode a valid offset plane-to-endpoint dogbone`,t)}let m=t.trace.route.find((_)=>("x"in _)&&("y"in _)),p=[...t.trace.route].reverse().find((_)=>("x"in _)&&("y"in _));if(!m||!p||!z_(m,t.sourcePoint)||!z_(p,t.exitPoint))Ts(s,"disconnected-trace",`Trace ${t.trace.pcb_trace_id} does not span its source and exit`,t);let g=i.connections.find((_)=>_.name===t.connectionName);if(t.termination.type==="boundary")if(!g)Ts(s,"output-connection-missing",`Boundary connection ${t.connectionName} was removed from the output`,t);else{let _=g.pointsToConnect[t.sourcePointIndex];if(!_||!z_(_,t.exitPoint)||!("layer"in _)||_.layer!==t.targetLayer)Ts(s,"output-exit-mismatch",`Output connection ${t.connectionName} is not attached to its fanout exit`,t);for(let f=0;f<a.pointsToConnect.length;f++){if(f===t.sourcePointIndex)continue;let y=a.pointsToConnect[f],x=g.pointsToConnect[f];if(!y||!x||!$Jt(y,x))Ts(s,"downstream-endpoint-lost",`Output connection ${t.connectionName} did not retain downstream endpoint ${f}`,t)}}else if(g)Ts(s,"plane-connection-retained",`Plane-terminated connection ${t.connectionName} remains in the output`,t)}function tdi(e,t){let n=tF(e),o=tF(t),i=nF(e),r=nF(t);for(let s of n){for(let a of o)if(s.layer===a.layer&&ad(s.start,s.end,a.start,a.end)<=(s.width+a.width)/2+Ml)return!0;for(let a of r)if(a.spanLayers.includes(s.layer)&&Bi(a.center,s.start,s.end)<=a.diameter/2+s.width/2+Ml)return!0}for(let s of i){for(let a of o)if(s.spanLayers.includes(a.layer)&&Bi(s.center,a.start,a.end)<=s.diameter/2+a.width/2+Ml)return!0;for(let a of r)if(s.spanLayers.some((c)=>a.spanLayers.includes(c))&&kt(s.center,a.center)<=(s.diameter+a.diameter)/2+Ml)return!0}return!1}function ndi(e){let{plans:t,inputSrj:n,sharedBoundary:o,issues:i}=e,r=new Set,s=new Map;for(let c of t)s.set(c,[]);for(let c=0;c<t.length;c++){let l=t[c];if(l.termination.type==="plane"?Boolean(l.via):l.segments.some((d)=>ZJt(d.start,o)||ZJt(d.end,o)))r.add(l);for(let d=c+1;d<t.length;d++){let u=t[d];if(!Uy(n,l.connectionName,u.connectionName)||!tdi(l,u))continue;s.get(l).push(u),s.get(u).push(l)}}let a=[...r];while(a.length>0){let c=a.shift();for(let l of s.get(c)??[]){if(r.has(l))continue;r.add(l),a.push(l)}}for(let c of t){if(r.has(c))continue;Ts(i,"not-broken-out",c.termination.type==="boundary"?`Connection ${c.connectionName} has no continuous same-net copper path to the shared boundary`:`Plane connection ${c.connectionName} has no terminating via`,c)}return r}function odi(e){let{plans:t,inputSrj:n,clearance:o,allowBlindAndBuriedVias:i,issues:r}=e;for(let s of t){if(Moe(s,o).some((c)=>c.kind!=="clearance"))Ts(r,"source-pad-reentry",`Trace ${s.connectionName} returns into its source pad after leaving it`,s);let a=tF(s);for(let c=0;c<a.length;c++){let l=a[c];for(let d of n.obstacles){if(!d.layers.includes(l.layer))continue;if(ib(n,d,s.connectionName))continue;if(c===0&&d.obstacleId===s.sourceObstacle.obstacleId&&l.layer===s.sourceLayer)continue;if(Hie({inputSrj:n,segment:l,bodyObstacle:d,connectionName:s.connectionName}))continue;let u=Jc(l,d),h=l.width/2+o;if(u<h-0.000000001)Ts(r,"obstacle-clearance",`Trace ${s.connectionName} on ${l.layer} is ${u.toFixed(4)}mm from different-net obstacle ${d.obstacleId}; ${h.toFixed(4)}mm is required`,s)}}for(let c of nF(s))for(let l of n.obstacles){if(!l.layers.some((h)=>c.spanLayers.includes(h))||ib(n,l,s.connectionName))continue;let d=jy(c.center,l),u=c.diameter/2+o;if(d<u-0.000000001)Ts(r,"via-obstacle-clearance",`Via ${s.connectionName} is ${d.toFixed(4)}mm from different-net obstacle ${l.obstacleId} on its layer span; ${u.toFixed(4)}mm is required`,s)}for(let c of k3(n,i)){if(s.connectionName===c.connectionName||Uy(n,s.connectionName,c.connectionName))continue;for(let l of tF(s)){for(let d of c.segments)if(!Jm(l,d,o))Ts(r,"different-net-trace-clearance",`Trace ${s.connectionName} violates routed trace ${c.trace.pcb_trace_id} on ${l.layer}`,s,c.connectionName);for(let d of c.vias)if(d.spanLayers.includes(l.layer)&&Bi(d.center,l.start,l.end)<d.diameter/2+l.width/2+o-0.000000001)Ts(r,"different-net-trace-via-clearance",`Trace ${s.connectionName} violates a via in routed trace ${c.trace.pcb_trace_id} on ${l.layer}`,s,c.connectionName)}for(let l of nF(s)){for(let d of c.segments)if(l.spanLayers.includes(d.layer)&&Bi(l.center,d.start,d.end)<l.diameter/2+d.width/2+o-0.000000001)Ts(r,"different-net-trace-via-clearance",`Via ${s.connectionName} violates routed trace ${c.trace.pcb_trace_id} on ${d.layer}`,s,c.connectionName);for(let d of c.vias)if(l.spanLayers.some((u)=>d.spanLayers.includes(u))&&kt(l.center,d.center)<(l.diameter+d.diameter)/2+o-0.000000001)Ts(r,"different-net-via-clearance",`Via ${s.connectionName} violates a via in routed trace ${c.trace.pcb_trace_id}`,s,c.connectionName)}}}for(let s=0;s<t.length;s++){let a=t[s];for(let c=s+1;c<t.length;c++){let l=t[c];if(Uy(n,a.connectionName,l.connectionName))continue;let d=tF(a),u=tF(l),h=nF(a),A=nF(l);for(let m of d){for(let p of u)if(!Jm(m,p,o))Ts(r,"different-net-trace-clearance",`Different-net traces ${a.connectionName} and ${l.connectionName} intersect or violate clearance on ${m.layer}`,a,l.connectionName);for(let p of A)if(p.spanLayers.includes(m.layer)&&Bi(p.center,m.start,m.end)<p.diameter/2+m.width/2+o-0.000000001)Ts(r,"different-net-trace-via-clearance",`Trace ${a.connectionName} violates via clearance to ${l.connectionName} on ${m.layer}`,a,l.connectionName)}for(let m of h){for(let p of u)if(m.spanLayers.includes(p.layer)&&Bi(m.center,p.start,p.end)<m.diameter/2+p.width/2+o-0.000000001)Ts(r,"different-net-trace-via-clearance",`Via ${a.connectionName} violates trace clearance to ${l.connectionName} on ${p.layer}`,a,l.connectionName);for(let p of A)if(m.spanLayers.some((g)=>p.spanLayers.includes(g))&&kt(m.center,p.center)<(m.diameter+p.diameter)/2+o-0.000000001)Ts(r,"different-net-via-clearance",`Vias ${a.connectionName} and ${l.connectionName} violate clearance on an overlapping layer span`,a,l.connectionName)}}}}function idi(e,t,n){let o=e.differentialPairs;if(o===void 0)return;if(!Array.isArray(o)){Ts(n,"invalid-differential-pair","Differential pairs must be an array");return}let i=new Map;e.connections.forEach((r,s)=>{let a=i.get(r.name)??[];a.push(s),i.set(r.name,a)}),o.forEach((r,s)=>{let a=r,c=a?.connectionNames,l=a?.lengthTolerance;if(!Array.isArray(c)||c.length!==2||c.some((A)=>typeof A!=="string"||A.length===0)||c[0]===c[1]||typeof l!=="number"||!Number.isFinite(l)||l<0){Ts(n,"invalid-differential-pair",`Differential pair ${s} must name two distinct connections and a finite nonnegative length tolerance`);return}let d=[];for(let A of c){let m=i.get(A),p=t.get(A);if(m?.length!==1||p?.length!==1||p[0].connectionIndex!==m[0]){Ts(n,"invalid-differential-pair",`Differential pair ${s} cannot resolve exactly one original plan for connection ${A}`);return}d.push(p[0])}let u=d.map((A)=>tF(A).reduce((m,p)=>m+kt(p.start,p.end),0));if(u.some((A)=>!Number.isFinite(A))){Ts(n,"invalid-differential-pair",`Differential pair ${s} has nonfinite routed copper length`,d[0],c[1]);return}let h=Math.abs(u[0]-u[1]);if(h>l+Ml)Ts(n,"differential-pair-length-skew",`Differential pair ${c[0]}/${c[1]} has ${h.toFixed(6)}mm routed-length skew; ${l.toFixed(6)}mm is allowed`,d[0],c[1])})}function rdi(e){let{inputSrj:t,outputSrj:n,plans:o,preparedBuses:i,sharedBoundary:r,clearance:s,allowBlindAndBuriedVias:a=!0}=e,c=[],l=new Map,d=new Map(i.map((h)=>[h.busId,h]));for(let h of o){let A=l.get(h.connectionName)??[];A.push(h),l.set(h.connectionName,A)}idi(t,l,c);for(let h of i){if(h.maxLengthSkew===void 0)continue;let A=o.filter((g)=>g.busId===h.busId);if(A.length<2)continue;let m=A.map((g)=>g.length),p=Math.max(...m)-Math.min(...m);if(p>h.maxLengthSkew+0.000001)Ts(c,"bus-length-skew",`Bus ${h.busId} has ${p.toFixed(6)}mm routed-length skew; ${h.maxLengthSkew.toFixed(6)}mm is allowed`,A[0])}for(let h of t.connections){let A=l.get(h.name)??[];if(A.length===0)Ts(c,"missing-plan",`Connection ${h.name} has no fanout plan`);else if(A.length>1)Ts(c,"duplicate-plan",`Connection ${h.name} has ${A.length} fanout plans`,A[0])}for(let h of o){if(!t.connections.some((A)=>A.name===h.connectionName)){Ts(c,"unknown-plan",`Plan ${h.connectionName} is not an input connection`,h);continue}edi({plan:h,preparedBus:d.get(h.busId),inputSrj:t,outputSrj:n,sharedBoundary:r,issues:c})}let u=ndi({plans:o,inputSrj:t,sharedBoundary:r,issues:c});return odi({plans:o,inputSrj:t,clearance:s,allowBlindAndBuriedVias:a,issues:c}),{valid:c.length===0,checkedConnectionCount:t.connections.length,brokenOutConnectionCount:new Set([...u].map((h)=>h.connectionName)).size,issues:c}}var n$t=["#ef4444","#2563eb","#16a34a","#9333ea","#f59e0b","#0891b2","#db2777","#65a30d","#4f46e5","#ea580c"];function sdi(e){if(!Number.isInteger(e)||e<0)throw Error(`FanoutSolver: copper layer index must be a non-negative integer, received ${e}`);return n$t[e%n$t.length]}var adi=new Set(["top","bottom","inner1","inner2","inner3","inner4","inner5","inner6","inner7","inner8"]),cdi={"0603":{padLength:0.8,padWidth:0.95},"1206":{padLength:0.6,padWidth:1.6},"1206x4_pair":{padLength:0.8,padWidth:0.5}},$oe=(e,t)=>{let n=e.indexOf(t);if(n<0)throw Error(`FanoutSolver: cannot visualize unknown copper layer "${t}"`);return n},jne=(e,t)=>`z${[...new Set(t.map((o)=>$oe(e,o)))].sort((o,i)=>o-i).join(",")}`,ldi=(e)=>{let t="layers"in e?e.layers:void 0;if(t&&t.length>0)return t;return[e.layer]},ddi=(e,t)=>{if(e.__zLayers&&e.__zLayers.length>0)return[...new Set(e.__zLayers)].filter((n)=>Number.isInteger(n)&&n>=0&&n<t.length).sort((n,o)=>n-o);return[...new Set(e.layers.map((n)=>$oe(t,n)))].sort((n,o)=>n-o)},udi=(e,t,n)=>{let o=$oe(e,t),i=$oe(e,n);return e.slice(Math.min(o,i),Math.max(o,i)+1)},o$t=(...e)=>e.find((t)=>typeof t==="number"&&Number.isFinite(t)),hdi=(e)=>{let t=o$t(e.min_via_hole_diameter,e.minViaHoleDiameter),n=o$t(e.min_via_pad_diameter,e.minViaPadDiameter,e.minViaDiameter);return Math.max(n??e.minViaDiameter??0.3,t??0)},mdi=(e)=>Object.fromEntries(e.map((t,n)=>[t.name,`hsl(${n*340/e.length}, 100%, 50%)`])),pdi=(e,t,n)=>{let o=(1-Math.abs(2*n-1))*t,i=(e%360+360)%360/60,r=o*(1-Math.abs(i%2-1)),[s,a,c]=i<1?[o,r,0]:i<2?[r,o,0]:i<3?[0,o,r]:i<4?[0,r,o]:i<5?[r,0,o]:[o,0,r],l=n-o/2;return[s,a,c].map((d)=>Math.round((d+l)*255))},dGe=(e,t)=>{let o={blue:[0,0,255],orange:[255,165,0],purple:[128,0,128],red:[255,0,0]}[e],i=1,r=/^rgba?\(\s*([\d.]+)\s*,\s*([\d.]+)\s*,\s*([\d.]+)(?:\s*,\s*([\d.]+))?\s*\)$/.exec(e);if(r)o=[Number(r[1]),Number(r[2]),Number(r[3])],i=r[4]===void 0?1:Number(r[4]);let s=/^hsl\(\s*([\d.-]+)\s*,\s*([\d.]+)%\s*,\s*([\d.]+)%\s*\)$/.exec(e);if(s)o=pdi(Number(s[1]),Number(s[2])/100,Number(s[3])/100);if(!o)return e;let a=+Math.max(0,i*100-t*100).toFixed(2)/100;if(a>=1){let c=o.map((l)=>Math.round(l).toString(16).padStart(2,"0")).join("");return c[0]===c[1]&&c[2]===c[3]&&c[4]===c[5]?`#${c[0]}${c[2]}${c[4]}`:`#${c}`}return`rgba(${o.join(",")},${a})`},Adi=(e)=>{let t=new Set;return e.filter((n)=>{if(t.has(n))return!1;return t.add(n),!0})},_di=(e)=>{let t=new Map,n=(o,i)=>{if(!o)return;let r=t.get(o)??[];if(!r.includes(i))r.push(i);t.set(o,r)};for(let o of e.connections){let i=o.__rootConnectionNames??[o.name];for(let r of i){n(o.name,r),n(r,r),n(o.__netConnectionName,r);for(let s of o.pointsToConnect)n(s.pointId,r),n(s.pcb_port_id,r)}}return(o)=>{let r=Adi([...o.connectedTo.flatMap((s)=>t.get(s)??[]),...(o.offBoardConnectsTo??[]).flatMap((s)=>t.get(s)??[])]).join(", ");return o.layers.map((s)=>r?`${s}
${r}`:s).join(`
`)}};function gdi(e){let t=fB(e.layerCount),n=(e.traces??[]).some((h)=>h.route.some((A,m)=>{let p=h.route[m+1];return A.route_type==="wire"&&p?.route_type==="wire"&&p.layer===A.layer&&!adi.has(A.layer)})),o=new Set(e.connections.map(({name:h})=>h)),i=n?[...new Set((e.traces??[]).map(({connection_name:h})=>h).filter((h)=>h&&!o.has(h)))].map((h)=>({name:h,pointsToConnect:[]})):[],r=[...e.connections,...i],s=mdi(r),a=_di({...e,connections:r}),c=[],l=[],d=[],u=[];for(let h of r)for(let A of h.pointsToConnect){let m=ldi(A),p=h.__rootConnectionNames??[h.name];u.push({x:A.x,y:A.y,color:s[h.name],layer:jne(t,m),label:[h.name,p.join(", "),m.join(",")].join(`
`)})}for(let h of e.traces??[]){let A=h.route.filter((p)=>p.route_type==="jumper"),m=(p,g)=>A.some((_)=>Math.abs(p.x-_.start.x)<0.01&&Math.abs(p.y-_.start.y)<0.01&&Math.abs(g.x-_.end.x)<0.01&&Math.abs(g.y-_.end.y)<0.01||Math.abs(p.x-_.end.x)<0.01&&Math.abs(p.y-_.end.y)<0.01&&Math.abs(g.x-_.start.x)<0.01&&Math.abs(g.y-_.start.y)<0.01);for(let p of h.route)if(p.route_type==="via"){let g=udi(t,p.from_layer,p.to_layer);l.push({center:{x:p.x,y:p.y},radius:(p.via_diameter??hdi(e))/2,fill:n?s[h.connection_name]:"blue",stroke:"none",layer:jne(t,g)})}else if(p.route_type==="through_obstacle")c.push({points:[p.start,p.end],strokeColor:dGe(s[h.connection_name]??"purple",0.35),strokeWidth:p.width,strokeDash:[0.1,0.1],layer:jne(t,[p.from_layer,p.to_layer]),label:`${h.connection_name} through_obstacle`});for(let p=0;p<h.route.length-1;p++){let g=h.route[p],_=h.route[p+1];if(g.route_type==="jumper"){let f=s[h.connection_name]??"rgba(255, 165, 0, 0.8)",y=cdi[g.footprint==="1206x4_pair"?"1206x4_pair":"0603"],x=Math.abs(g.end.x-g.start.x)>Math.abs(g.end.y-g.start.y),C=x?y.padLength:y.padWidth,I=x?y.padWidth:y.padLength,b=jne(t,[g.layer]);for(let P of[g.start,g.end])d.push({center:P,width:C,height:I,fill:dGe(f,0.5),stroke:"rgba(0, 0, 0, 0.5)",layer:b});c.push({points:[g.start,g.end],strokeColor:"rgba(100, 100, 100, 0.8)",strokeWidth:y.padWidth*0.3,layer:b})}else if(g.route_type==="wire"&&_.route_type==="wire"&&_.layer===g.layer&&!m(g,_)){let f=$oe(t,g.layer);c.push({points:[{x:g.x,y:g.y},{x:_.x,y:_.y}],layer:`z${f}`,strokeWidth:g.width,strokeColor:sdi(f),...n?{label:h.connection_name}:{}})}}}for(let h of e.obstacles){if(h.isCopperPour)continue;let A=ddi(h,t);if(A.length===0)throw Error(`FanoutSolver: cannot visualize obstacle "${h.obstacleId??"unknown"}" without a valid layer`);let m=A.length===1?t[A[0]]:void 0,p=dGe(m==="bottom"?"blue":"red",0.5**A.length),g=h.shape,_={center:h.center,fill:p,layer:`z${A.join(",")}`,label:a(h)};if(g==="circle")l.push({..._,radius:Math.min(h.width,h.height)/2});else d.push({..._,width:h.width,height:h.height,ccwRotationDegrees:h.ccwRotationDegrees})}for(let h of e.jumpers??[])for(let A of h.pads)d.push({center:A.center,width:A.width,height:A.height,ccwRotationDegrees:A.ccwRotationDegrees,fill:"rgba(255, 165, 0, 0.3)",stroke:"rgba(255, 165, 0, 0.8)",layer:jne(t,A.layers)});return{rects:d,circles:l,lines:c,points:u}}var _a=Jli(globalThis),fdi=class extends Zn{constructor(e,t,n,o,i){super();this.solverName=e,this.generator=t,this.getVisualization=n,this.getStats=o,this.getProgress=i,this.MAX_ITERATIONS=1e6}solverName;generator;getVisualization;getStats;getProgress;output;hasOutput=!1;nextInput;getSolverName(){return this.solverName}_step(){if(this.activeSubSolver){if(this.activeSubSolver.step(),this.activeSubSolver.failed){this.failedSubSolvers=[...this.failedSubSolvers??[],this.activeSubSolver],this.error=this.activeSubSolver.error,this.failed=!0,this.activeSubSolver=null;return}if(this.activeSubSolver.solved)this.nextInput=this.activeSubSolver.getOutput(),this.activeSubSolver=null;this.stats=this.getStats();return}let e=this.generator.next(this.nextInput);if(this.nextInput=void 0,this.stats=this.getStats(),e.done){this.output=e.value,this.hasOutput=!0,this.solved=!0;return}if(qoe(e.value))this.activeSubSolver=e.value.solver}computeProgress(){return this.getProgress()}getConstructorParams(){return[]}getOutput(){if(!this.solved||!this.hasOutput)throw Error(`${this.solverName}: output requested before completion`);return this.output}visualize(){return this.activeSubSolver?.visualize()??this.getVisualization()}};function qne(e,t){if(!Number.isFinite(t)||t<=0)throw Error(`FanoutSolver: ${e} must be a positive number, received ${t}`);return t}function ydi(e,t){let n=qne("traceWidth",t.traceWidth??e.nominalTraceWidth??e.minTraceWidth),o=qne("viaDiameter",t.viaDiameter??e.minViaPadDiameter??e.min_via_pad_diameter??e.minViaDiameter??Math.max(n*2,0.3)),i=qne("viaHoleDiameter",t.viaHoleDiameter??e.minViaHoleDiameter??e.min_via_hole_diameter??o*0.5);if(i>=o)throw Error(`FanoutSolver: viaHoleDiameter ${i} must be smaller than viaDiameter ${o}`);let r=qne("clearance",t.clearance??e.minViaEdgeToPadEdgeClearance??e.minTraceToPadEdgeClearance??e.defaultObstacleMargin??e.minTraceWidth),s=fB(e.layerCount),a=t.escapeLayers??s;for(let l of a)if(!s.includes(l))throw Error(`FanoutSolver: escape layer "${l}" is not available in a ${e.layerCount}-layer SimpleRouteJson`);if(new Set(a).size!==a.length)throw Error("FanoutSolver: escapeLayers contains duplicates");let c=t.borderDistribution??"preserve";if(c!=="preserve"&&c!=="even")throw Error(`FanoutSolver: borderDistribution must be "preserve" or "even", received "${c}"`);return{traceWidth:n,viaDiameter:o,viaHoleDiameter:i,clearance:r,compactBusTracks:t.compactBusTracks??!1,allowBlindAndBuriedVias:t.allowBlindAndBuriedVias??!0,allowSameNetMerges:t.allowSameNetMerges??!1,densePlaneReservationBusIds:t.densePlaneReservationBusIds??[],denseUnrestrictedPlaneRoutingBusIds:t.denseUnrestrictedPlaneRoutingBusIds??[],singleLayerPushAndShove:t.singleLayerPushAndShove??!1,singleLayerAdaptiveExits:t.singleLayerAdaptiveExits??!1,borderDistribution:c,layerNames:s,escapeLayers:a,maxLayerCombinations:t.maxLayerCombinations===void 0?256:qne("maxLayerCombinations",t.maxLayerCombinations),balanceLayerLoadByConnectionCount:t.balanceLayerLoadByConnectionCount??!1}}function xdi(e,t){let n=new Set,o=Math.max(t.traceWidth+t.clearance,t.viaDiameter+t.clearance),i=Math.max(t.viaDiameter/2+t.clearance,o);for(let r of e){let s=Mr(r.exitEdge,r.preferredExit);if(!r.exitEdge||!s)continue;let a=`${r.exitEdge}:${s}`;if(n.has(a))continue;n.add(a);let c=r.exitEdge==="left"||r.exitEdge==="right"?r.sharedBoundary.maxY-r.sharedBoundary.minY:r.sharedBoundary.maxX-r.sharedBoundary.minX,l=r.cornerBandConnectionCount??r.connections.length,d=(l-1)*o/2,u=c/4-i;if(d>u+0.000001)throw Error(`FanoutSolver: ${s} band on the ${r.exitEdge} edge cannot fit ${l} via-safe exits`)}}function Vye(e,t,n){let o=new Map(t.map((r)=>[r.busId,r.connections.length])),i=new Map;for(let[r,s]of Object.entries(e))i.set(s,(i.get(s)??0)+(n?o.get(r)??1:1));return[...i.values()].reduce((r,s)=>r+s*s,0)}function Uye(e){return e.balanceLayerLoadByConnectionCount?0.25:0.01}function i$t(e,t,n){let o=Number(e.termination.type==="plane")-Number(t.termination.type==="plane");return n?-o:o}function Wye(e){return e.reduce((t,n)=>t+Number(Boolean(n.via))+(n.additionalVias?.length??0)+Number(Boolean(n.planeEndpointVia)),0)}function dW(e){let t=e.connections.reduce((n,o)=>{let i=e.direction==="left"||e.direction==="right"?o.sourcePoint.x:o.sourcePoint.y;return n+i},0)/e.connections.length;switch(e.direction){case"right":return e.sharedBoundary.maxX-t;case"left":return t-e.sharedBoundary.minX;case"up":return e.sharedBoundary.maxY-t;case"down":return t-e.sharedBoundary.minY}}function ZYe(e){let t=e.direction==="left"||e.direction==="right";return e.connections.some((n)=>{let o=n.exitTargetPoint??n.targetPoint,i=t?n.sourcePoint.y:n.sourcePoint.x,r=t?o.y:o.x;return Math.abs(i-r)>0.000001})}function MW(e){if(e.connections.length===0||e.connections.some((o)=>!o.hasExplicitLayeredExitTarget||!o.exitTargetPoint?.layer))return;let t=new Set(e.connections.map((o)=>o.exitTargetPoint.layer));if(t.size!==1)return;let[n]=t;return n}function Cdi(e){let t=e.direction==="left"||e.direction==="right",n=t?e.xCoordinates:e.yCoordinates,o=e.connections.reduce((r,s)=>r+(t?s.sourcePoint.x:s.sourcePoint.y),0)/e.connections.length,i=e.direction==="right"||e.direction==="up"?Math.max(...n):Math.min(...n);return Math.abs(o-i)<0.000001}function eVe(e){let t=e.direction==="left"||e.direction==="right",n=t?e.xCoordinates:e.yCoordinates,o=e.connections.reduce((s,a)=>s+(t?a.sourcePoint.x:a.sourcePoint.y),0)/e.connections.length,i=e.direction==="right"||e.direction==="up"?Math.max(...n):Math.min(...n),r=t?e.pitchX:e.pitchY;return Math.round(Math.abs(o-i)/r)}function Idi(e){let{buses:t,escapeLayers:n,escapeLayersByBusId:o,preferOrderedCoordinatedWindingLayers:i}=e,r={},s=new Map,a=0;for(let c of t){let l=s.get(c.componentId)??new Set;l.add(c.direction),s.set(c.componentId,l)}for(let c of t){let l=c.connections[0]?.sourceLayer;if(!l)throw Error(`FanoutSolver: bus "${c.busId}" has no connections`);if(c.termination.type==="plane"){r[c.busId]=c.termination.layer;continue}let d=o[c.busId]??n,u=d.filter((A)=>A!==l),h=MW(c);if(h&&d.includes(h))r[c.busId]=h;else if(!r3(c)&&d.includes(l)&&(ZYe(c)||Cdi(c)))r[c.busId]=l;else if(u.length>0){let A=c.connections.map((y)=>y.sourcePoint.x),m=c.connections.map((y)=>y.sourcePoint.y),p=(y)=>t.filter((x)=>{let C=x.connections[0]?.sourcePoint;return x.termination.type==="boundary"&&C!==void 0&&C.x>Math.min(...A)+0.000000001&&C.x<Math.max(...A)-0.000000001&&C.y>Math.min(...m)+0.000000001&&C.y<Math.max(...m)-0.000000001&&MW(x)===y&&Vrn({singletonBus:x,singletonTargetLayer:y,wideBuses:[c]})}).length,g=u.toSorted((y,x)=>p(y)-p(x));if(p(g[0])<p(u[0])){r[c.busId]=g[0];continue}if(i&&r3(c)){let y=Mr(c.exitEdge,c.preferredExit),x=(C)=>{if(!c.exitEdge||c.connections.length<8)return 0;let I=c.exitEdge==="left"||c.exitEdge==="right",b=I?"y":"x",P=I?c.sharedBoundary.minY:c.sharedBoundary.minX,E=I?c.sharedBoundary.maxY:c.sharedBoundary.maxX;if(!y){let Q=c.connections.map((V)=>{let W=V.exitTargetPoint??V.targetPoint;return Math.max(P,Math.min(E,W[b]))}),N=Math.min(...Q),F=Math.max(...Q),H=I?"x":"y",z=c.exitEdge==="right"||c.exitEdge==="top"?1:-1,Y=Math.min(...c.connections.map((V)=>z*V.sourcePoint[H])),U=Math.min(...c.connections.map((V)=>V.sourcePoint[b])),X=Math.max(...c.connections.map((V)=>V.sourcePoint[b]));return t.reduce((V,W)=>{let j=Mr(W.exitEdge,W.preferredExit);if(W===c||W.termination.type!=="boundary"||W.componentId!==c.componentId||W.exitEdge!==c.exitEdge||!j||MW(W)!==C)return V;let q=P+(E-P)*(j==="minimum"?0.25:0.75),ne=(Math.max(W.connections.length,W.cornerBandConnectionCount??0)-1)*Math.max(e.traceWidth+e.clearance,e.viaDiameter+e.clearance)/2,ce=e.traceWidth+e.clearance,oe=F+ce>=q-ne&&N-ce<=q+ne,ie=Math.max(...W.connections.map((J)=>z*J.sourcePoint[H]))<Y-0.000000001&&Math.min(...W.connections.map((J)=>J.sourcePoint[b]))<=X+ce&&Math.max(...W.connections.map((J)=>J.sourcePoint[b]))>=U-ce;return V+(oe||ie?W.connections.length:0)},0)}let B=P+(E-P)*(y==="minimum"?0.25:0.75),w=Math.max(e.traceWidth+e.clearance,e.viaDiameter+e.clearance),T=(Math.max(c.connections.length,c.cornerBandConnectionCount??0)-1)*w/2;return t.reduce((Q,N)=>{if(N===c||N.termination.type!=="boundary"||N.componentId!==c.componentId||N.exitEdge!==c.exitEdge||Mr(N.exitEdge,N.preferredExit)||MW(N)!==C)return Q;return Q+N.connections.filter((F)=>{let H=F.exitTargetPoint??F.targetPoint,z=Math.max(P,Math.min(E,H[b]));return Math.abs(z-B)<=T+e.traceWidth+e.clearance}).length},0)};r[c.busId]=u.toSorted((C,I)=>x(C)-x(I))[0];continue}let _=s.get(c.componentId);if(_.has("left")&&_.has("right")||_.has("up")&&_.has("down")){let y=eVe(c);r[c.busId]=u[Math.max(y-1,0)%u.length]}else r[c.busId]=u[a%u.length],a++}else r[c.busId]=l}return r}function bdi(e){let{initialAssignment:t,generatedAssignments:n,maxAssignments:o}=e,i=JSON.stringify(t);return[t,...n.filter((r)=>JSON.stringify(r)!==i)].slice(0,o)}function r3(e){return Boolean(e.exitEdge&&e.termination.type==="boundary"&&e.connections.length>0&&e.connections.every((t)=>t.hasExplicitLayeredExitTarget===!0))}function tVe(e){let t=e.length,n=e.filter((o)=>o===1).length;return(t===5||t===6||t===7)&&n===1||t===8&&(n===1||n===2)||t===9&&n>=1&&n<=3}function Sdi(e){if(!tVe(e))return 0;let t=e.filter((n)=>n===1).length;return Math.max(1,t-1)}function Vrn(e){let t=e.singletonBus.connections[0]?.sourcePoint;if(e.singletonBus.connections.length!==1||!t)return!1;return e.wideBuses.some((n)=>{let o=n.routableEscapeLayers??n.allowedLayers??[];if(n.connections.length<8||n.componentId!==e.singletonBus.componentId||n.exitEdge!==e.singletonBus.exitEdge||o.length<2||!o.includes(e.singletonTargetLayer))return!1;let i=n.connections.map((s)=>s.sourcePoint.x),r=n.connections.map((s)=>s.sourcePoint.y);return t.x>=Math.min(...i)-0.000000001&&t.x<=Math.max(...i)+0.000000001&&t.y>=Math.min(...r)-0.000000001&&t.y<=Math.max(...r)+0.000000001})}function Pdi(e){let t=Math.max(e.traceWidth+e.clearance,e.viaDiameter+e.clearance);return-e.leadingLaneCount*t/2}function vdi(e){if(e.boundaryBusCount===5||e.boundaryBusCount>9)return!1;if(e.boundaryBusCount===6||e.boundaryBusCount===7||e.boundaryBusCount===8||e.boundaryBusCount===9)return e.connectionCount>2&&e.rawSkew-e.maximumSkew>Math.max(1,e.maximumSkew*0.5);return e.rawSkew-e.maximumSkew>Math.max(1,e.maximumSkew*0.25)}function Zoe(e){let t=e.connections[0],n=t?.exitTargetPoint,o=0;if(t&&n){let i=n.x-t.sourcePoint.x,r=n.y-t.sourcePoint.y;o=e.direction==="right"?i:e.direction==="left"?-i:e.direction==="up"?r:-r}return{isCorner:Boolean(Mr(e.exitEdge,e.preferredExit)),targetProjection:o}}function Edi(e,t){let n=Zoe(e),o=Zoe(t);return Number(n.isCorner)-Number(o.isCorner)||(n.isCorner&&o.isCorner?n.targetProjection-o.targetProjection:0)||e.busId.localeCompare(t.busId)}function Mdi(e,t){let n=Zoe(e),o=Zoe(t);return Number(n.isCorner)-Number(o.isCorner)||(n.isCorner&&o.isCorner?Number(n.targetProjection>0)-Number(o.targetProjection>0):0)||e.busId.localeCompare(t.busId)}function Bdi(e){let{pairBuses:t}=e,n=t[0],o=n?.connections[0]?.sourceLayer;if(e.boundaryBusCount!==7&&e.boundaryBusCount!==8&&e.boundaryBusCount!==9||t.length!==3||n===void 0||n.exitEdge===void 0||n.assignedLayer===void 0||o===void 0||t.some((r)=>r.connections.length!==2||r.componentId!==n.componentId||r.exitEdge!==n.exitEdge||r.assignedLayer!==n.assignedLayer||r.connections.some((s)=>{let a=s.exitTargetPoint;return s.sourceLayer!==o||a?.layer!==n.assignedLayer||!Number.isFinite(s.sourcePoint.x)||!Number.isFinite(s.sourcePoint.y)||!Number.isFinite(a?.x)||!Number.isFinite(a?.y)})))return null;let i=(r)=>Math.max(...r.connections.map((s)=>{let a=s.exitTargetPoint;return Math.hypot(a.x-s.sourcePoint.x,a.y-s.sourcePoint.y)}));return t.map((r)=>Number(i(r).toFixed(9)))}function wdi(e){let{bus:t,srj:n,config:o,staticClearanceCache:i}=e,r=t.allowedLayers,s=r===void 0?o.escapeLayers:o.escapeLayers.filter((l)=>r.includes(l));if(r3(t))return s;let a=s.filter((l)=>KL({srj:n,bus:t,targetLayer:l,acceptedPlans:[],layerNames:o.layerNames,traceWidth:o.traceWidth,viaDiameter:o.viaDiameter,viaHoleDiameter:o.viaHoleDiameter,clearance:o.clearance,compactBusTracks:o.compactBusTracks,allowBlindAndBuriedVias:o.allowBlindAndBuriedVias,allowSameNetMerges:o.allowSameNetMerges,staticClearanceCache:i})!==null);return a.length>0?a:s}var J2e=class extends Zn{constructor(e,t={}){super();this.inputSrj=e,this.options=t,this.routingSrj={...e,obstacles:[...e.obstacles]},this.config=ydi(e,t),this.preparedBuses=eli(this.routingSrj,t),xdi(this.preparedBuses,this.config);for(let i of this.preparedBuses){for(let s of i.connections){if(!s.hasExplicitLayeredExitTarget)continue;let a=s.exitTargetPoint?.layer;if(typeof a!=="string"||a.length===0||!this.config.layerNames.includes(a))throw Error(`FanoutSolver: connection exit target for "${s.connection.name}" uses unavailable layer "${String(a)}"`)}for(let s of i.allowedLayers??[])if(!this.config.layerNames.includes(s))throw Error(`FanoutSolver: bus "${i.busId}" allows unavailable layer "${s}"`);if(i.termination.type==="boundary"&&i.allowedLayers!==void 0&&!i.allowedLayers.some((s)=>this.config.escapeLayers.includes(s)))throw Error(`FanoutSolver: bus "${i.busId}" has no allowed layer in escapeLayers`);if(i.routableEscapeLayers=this.config.escapeLayers.filter((s)=>i.allowedLayers?.includes(s)??!0),i.termination.type!=="plane")continue;let r=i.termination.layer;if(!this.config.layerNames.includes(r))throw Error(`FanoutSolver: plane-terminated bus "${i.busId}" targets unavailable layer "${r}"`);if(i.allowedLayers!==void 0&&!i.allowedLayers.includes(r))throw Error(`FanoutSolver: plane-terminated bus "${i.busId}" targets disallowed layer "${r}"`);if(i.connections.some((s)=>s.sourceLayer===r))throw Error(`FanoutSolver: plane-terminated bus "${i.busId}" must target a layer below its source pad`)}this.boundaryBuses=this.preparedBuses.filter((i)=>i.termination.type==="boundary"),this.fixedPlaneAssignments=Object.fromEntries(this.preparedBuses.flatMap((i)=>i.termination.type==="plane"?[[i.busId,i.termination.layer]]:[]));let n=this.preparedBuses.length*3+8,o=this.boundaryBuses.length+1+this.config.maxLayerCombinations*n+this.preparedBuses.length*2+20;this.MAX_ITERATIONS=Math.max(1e4,o)}inputSrj;options;preparedBuses;attempts=[];layerAssignments=[];config;routingSrj;escapeLayersByBusId={};boundaryBuses;fixedPlaneAssignments;evaluatedAssignmentKeys=new Set;queuedAssignmentKeys=new Set;assignmentRepairDepthByKey=new Map;pendingRepairAssignments=[];routeStaticClearanceCache=new Map;routingPrefixCache=new Map;layerReservedRoutingEvaluated=!1;groupedBeamEvaluated=!1;routingInitialized=!1;nextCandidateLayerBusIndex=0;nextAssignmentIndex=0;nextGeneratedAssignmentIndex=0;activeOperation=null;inProgressPlans=[];activeRoutingVisualization=null;activeAdaptiveVisualization=null;bestAttempt=null;lengthMatchingFailure=null;endpointCompletion=null;getSolverName(){return"FanoutSolver"}shouldTryLayerReservedRouting(){if(this.config.allowBlindAndBuriedVias||this.boundaryBuses.length<4)return!1;if((this.config.compactBusTracks||this.config.borderDistribution==="even")&&this.boundaryBuses.some((r)=>r.connections.length>1&&r.connections.some((s)=>!s.hasExplicitLayeredExitTarget)))return!1;let e=this.preparedBuses[0],t=this.boundaryBuses.reduce((r,s)=>r+s.connections.length,0);if(this.inputSrj.connections.length-t<t||this.preparedBuses.some((r)=>r.componentId!==e.componentId||r.connections.some((s)=>s.sourceLayer!=="top"))||this.boundaryBuses.some((r)=>!r.exitEdge||r.exitEdge!==this.boundaryBuses[0].exitEdge||r.connections.length>8||!r.allowedLayers?.length||r.allowedLayers.some((s)=>!this.config.escapeLayers.includes(s))))return!1;let o=new Map,i=!1;for(let r of this.boundaryBuses){let s=r.allowedLayers.filter((a)=>a!=="top");if(!s.length)return!1;if(s.length>1)i=!0;if(s.length===1&&r.connections.length>2){let a=s[0];o.set(a,(o.get(a)??0)+1)}}return i&&[...o.values()].some((r)=>r>1)}*evaluateLayerReservedRoutingSteps(e=!1,t=!1){let n={...this.config,sourceOriginRouting:e,srj:this.routingSrj,buses:this.preparedBuses},o=t?_ci(n):kli(n),i=o.next();while(!i.done){if(qoe(i.value)){this.stats={...this.stats,phase:"layer-reserved-route-layer",workUnit:i.value.routedConnectionCount,workUnitCount:this.inputSrj.connections.length,routedConnections:`${i.value.routedConnectionCount}/${this.inputSrj.connections.length}`,routingIterations:i.value.iterations};let l=yield i.value;i=o.next(l);continue}this.stats={...this.stats,phase:`layer-reserved-${i.value.phase}`,targetLayer:i.value.layer,workUnit:i.value.routedConnectionCount,workUnitCount:this.inputSrj.connections.length,routedConnections:`${i.value.routedConnectionCount}/${this.inputSrj.connections.length}`,routingIterations:i.value.iterations},yield,i=o.next()}if(!i.value||i.value.length!==this.inputSrj.connections.length)return null;let r=this.normalizeCompletePlanCorners(i.value);if(!r)return null;let s=QL({inputSrj:this.inputSrj,plans:r,layerNames:this.config.layerNames});if(!this.validateCompletePlans(r,s).valid)return null;let a=Object.fromEntries(r.map((l)=>[l.busId,l.targetLayer])),c=r.reduce((l,d)=>l+d.length,0)+Wye(r)*0.1+Vye(a,this.preparedBuses,this.config.balanceLayerLoadByConnectionCount)*Uye(this.config);return this.inProgressPlans=[...r],{plans:r,outputSrj:s,stopAfterCompleteValidation:!0,blockingBusIds:[],summary:{assignmentIndex:0,busLayerAssignments:a,routedBusCount:this.preparedBuses.length,routedConnectionCount:r.length,failedBusIds:[],score:c}}}stepRoutingInitialization(){let e=this.boundaryBuses[this.nextCandidateLayerBusIndex];if(e){this.escapeLayersByBusId[e.busId]=wdi({bus:e,srj:this.routingSrj,config:this.config,staticClearanceCache:this.routeStaticClearanceCache}),this.nextCandidateLayerBusIndex++,this.stats={phase:"discover-candidate-layers",bus:e.busId,busIndex:this.nextCandidateLayerBusIndex,busCount:this.boundaryBuses.length};return}let t=Bsi({busIds:this.boundaryBuses.map((n)=>n.busId),layers:this.config.escapeLayers,layersByBusId:this.escapeLayersByBusId,maxAssignments:this.config.maxLayerCombinations}).map((n)=>({...n,...this.fixedPlaneAssignments}));this.layerAssignments.push(...bdi({initialAssignment:Idi({buses:this.preparedBuses,escapeLayers:this.config.escapeLayers,escapeLayersByBusId:this.escapeLayersByBusId,traceWidth:this.config.traceWidth,viaDiameter:this.config.viaDiameter,clearance:this.config.clearance,preferOrderedCoordinatedWindingLayers:this.config.densePlaneReservationBusIds.length>0||this.config.denseUnrestrictedPlaneRoutingBusIds.length>0||HJt(this.preparedBuses,this.config.allowBlindAndBuriedVias)}),generatedAssignments:t,maxAssignments:this.config.maxLayerCombinations})),this.routingInitialized=!0,this.stats={phase:"prepare-layer-assignments",assignmentCount:this.layerAssignments.length}}*initializeRoutingSteps(){while(!this.routingInitialized)if(this.stepRoutingInitialization(),!this.routingInitialized)yield}setInProgressPlans(e){this.inProgressPlans=[...e.plans],this.stats={...this.stats,phase:e.phase,...e.strategy?{routingStrategy:e.strategy}:{},...e.unitIndex!==void 0?{workUnit:e.unitIndex}:{},...e.unitCount!==void 0?{workUnitCount:e.unitCount}:{},...e.busId?{bus:e.busId}:{},routedConnections:`${e.plans.length}/${this.inputSrj.connections.length}`}}visualizeCurrentState(){let e=this.endpointCompletion?.simpleRouteJson??(!this.solved&&!this.failed&&this.inProgressPlans.length>0?QL({inputSrj:this.inputSrj,plans:this.inProgressPlans,layerNames:this.config.layerNames}):void 0)??this.bestAttempt?.outputSrj??this.inputSrj;return gdi(e)}visualizeWorkState(e){let t=this.visualizeCurrentState(),n=this.preparedBuses[0]?.sharedBoundary??this.inputSrj.bounds,o=typeof this.stats.bus==="string"?this.stats.bus:void 0,i=o?this.preparedBuses.find((u)=>u.busId===o):void 0,r=n.maxX-n.minX,s=n.maxY-n.minY,a=Math.max(Math.min(r,s)*0.025,0.25),c=typeof this.stats.phase==="string"?this.stats.phase:"starting",l=[typeof this.stats.routeConnection==="string"?`connection ${this.stats.routeConnection}`:void 0,typeof this.stats.searchBatch==="number"?`batch ${this.stats.searchBatch}`:void 0,typeof this.stats.expandedStates==="number"?`${this.stats.expandedStates.toLocaleString()} states`:void 0].filter(Boolean).join(" · "),d=`${e}: ${c}`;return{...pI(t,{rects:[{center:{x:(n.minX+n.maxX)/2,y:(n.minY+n.maxY)/2},width:r,height:s,fill:"rgba(0, 0, 0, 0)",stroke:"rgba(14, 165, 233, 0.8)",label:`${e} working boundary`}],circles:(i?.connections??[]).map((u)=>({center:u.sourcePoint,radius:Math.max(a,Math.min(u.sourceObstacle.width,u.sourceObstacle.height)*0.6),fill:"rgba(250, 204, 21, 0.25)",stroke:"#f59e0b",label:`active bus ${o}: ${u.connection.name}`})),texts:[{x:n.minX,y:n.maxY+a*2,text:`${e} · ${c}${l?` · ${l}`:""}`,color:"#0f172a",fontSize:a*1.5,anchorSide:"bottom_left"}]}),title:d}}visualizeBoundaryRoutingState(){if(!this.activeRoutingVisualization)return this.visualizeWorkState("BoundaryBusRoutingSolver");return{...pI(this.visualizeCurrentState(),this.activeRoutingVisualization),title:this.activeRoutingVisualization.title}}visualizeAdaptiveRoutingState(){if(this.activeAdaptiveVisualization)return this.activeAdaptiveVisualization;let e=this.preparedBuses[0]?.sharedBoundary??this.inputSrj.bounds,t=e.maxX-e.minX,n=e.maxY-e.minY,o=Math.max(Math.min(t,n)*0.02,0.2);return{title:"SingleLayerAdaptiveExitSolver: preparing flow grid",rects:[{center:{x:(e.minX+e.maxX)/2,y:(e.minY+e.maxY)/2},width:t,height:n,fill:"rgba(0, 0, 0, 0)",stroke:"rgba(14, 165, 233, 0.9)",label:"adaptive flow grid boundary"}],points:this.preparedBuses.flatMap((i)=>i.connections.map((r)=>({...r.sourcePoint,color:"#f97316",label:"adaptive route source"}))),texts:[{x:e.minX,y:e.maxY+o*2,text:"preparing adaptive flow grid",color:"#0f172a",fontSize:o*1.5,anchorSide:"bottom_left"}]}}startOperation(e){let t=this.createWorkSolver(e.name,e.generator,e.getProgress);this.MAX_ITERATIONS=Math.max(this.MAX_ITERATIONS,this.iterations+t.MAX_ITERATIONS+1),this.activeOperation={solver:t,onSolved:e.onSolved},this.activeSubSolver=t}createWorkSolver(e,t,n,o){return new fdi(e,t,o??(()=>this.visualizeWorkState(e)),()=>({...this.stats}),n??(()=>0))}*routeBusAlternativesWorkSteps(e,t){let n=SCe(e,t,!0),o=n.next();while(!o.done){let{winding:i}=o.value;if(i.visualization)this.activeRoutingVisualization=i.visualization;this.stats={...this.stats,phase:"route-boundary-bus-connection",bus:o.value.busId,targetLayer:o.value.targetLayer,routeOrderAttempt:i.routeOrderAttempt,routeConnection:`${i.connectionIndex+1}/${i.connectionCount}`,connection:i.connectionName,searchBatch:i.searchBatch,expandedStates:i.expandedStateCount,connectionComplete:i.connectionComplete},yield,o=n.next()}return o.value}stepActiveOperation(){let e=this.activeOperation;if(!e)return;if(e.solver.step(),e.solver.failed){this.failedSubSolvers=[...this.failedSubSolvers??[],e.solver],this.error=e.solver.error,this.failed=!0,this.activeOperation=null,this.activeSubSolver=null;return}if(!e.solver.solved)return;let t=e.solver.getOutput();this.activeOperation=null,this.activeSubSolver=null,e.onSolved(t)}completeBestAttemptEndpoints(){if(!this.options.completeOriginalEndpoints||this.endpointCompletion||!this.bestAttempt)return;this.endpointCompletion=zsi({inputSrj:this.routingSrj,fanoutSrj:this.bestAttempt.outputSrj,plans:this.bestAttempt.plans,traceWidth:this.config.traceWidth,viaDiameter:this.config.viaDiameter,viaHoleDiameter:this.config.viaHoleDiameter,clearance:this.config.clearance,allowBlindAndBuriedVias:this.config.allowBlindAndBuriedVias,effort:this.options.endpointCompletionEffort,routeDownstreamConnections:this.options.routeDownstreamConnections})}getValidationBoundary(){if(this.options.sharedBoundary)return this.options.sharedBoundary;let e=this.preparedBuses[0]?.sharedBoundary;if(!e)return this.inputSrj.bounds;return this.preparedBuses.slice(1).reduce((t,n)=>({minX:Math.min(t.minX,n.sharedBoundary.minX),maxX:Math.max(t.maxX,n.sharedBoundary.maxX),minY:Math.min(t.minY,n.sharedBoundary.minY),maxY:Math.max(t.maxY,n.sharedBoundary.maxY)}),{...e})}validateCompletePlans(e,t){return rdi({inputSrj:this.inputSrj,outputSrj:t,plans:e,preparedBuses:this.preparedBuses,sharedBoundary:this.getValidationBoundary(),clearance:this.config.clearance,allowBlindAndBuriedVias:this.config.allowBlindAndBuriedVias})}matchCompletePlanLengths(e,t={}){return E1({plans:e,preparedBuses:this.preparedBuses,inputSrj:this.inputSrj,sharedBoundary:this.getValidationBoundary(),clearance:this.config.clearance,allowBlindAndBuriedVias:this.config.allowBlindAndBuriedVias,allowSameNetMerges:this.config.allowSameNetMerges,...t})}normalizeCompletePlanCorners(e){if(this.config.allowBlindAndBuriedVias)return[...e];let t=eWe({...this.config,inputSrj:this.inputSrj,preparedBuses:this.preparedBuses,plans:e,repairPlaneSourceCorners:!0,repairSignalSourceCorners:!0,rematchRepairedLengths:(n)=>this.matchCompletePlanLengths(n,{maximumWorkUnits:1e4,allowMatchingInsideDenseBounds:!0}).plans});if(!t||t.every((n)=>Moe(n,this.config.clearance).every((o)=>o.kind==="clearance")))return t;return Tci({...this.config,inputSrj:this.inputSrj,preparedBuses:this.preparedBuses,plans:t})}*routePeripheralMixedTerminationSteps(e){if(this.config.allowBlindAndBuriedVias)return null;let t=e.busesInRoutingOrder.find((_)=>_.termination.type==="boundary"&&(_.exitEdge==="right"||_.exitEdge==="left")&&_.connections.length>=16&&_.componentObstacles.length>=200);if(!t)return null;let n=e.busLayerAssignments[t.busId];if(!n)return null;let o=new Map(Object.entries(e.busLayerAssignments));this.setInProgressPlans({phase:"route-peripheral-source-escapes",plans:[],busId:t.busId});let i=(t.exitEdge==="left"?Hli:mli)({...this.config,srj:this.routingSrj,buses:this.preparedBuses,bus:t,targetLayer:n,targetLayerByBusId:o}),r=i.next();while(!r.done)yield,r=i.next();if(!r.value)return null;let s=r.value,a={...this.config,...s,srj:this.routingSrj,bus:t,targetLayer:n},c="lowerConnectionIndices"in s?Yrn({...a,...s}):pli(a),l=c.next();while(!l.done)yield,l=c.next();let d=l.value;if(!d&&"lowerConnectionIndices"in s){let _=Oli({...a,...s,buses:this.preparedBuses}),f=_.next();while(!f.done)yield,f=_.next();if(f.value)s=f.value,d=f.value.plans}if(!d)return null;this.setInProgressPlans({phase:"route-peripheral-bus-continuations",plans:d,busId:t.busId});let u=Frn({...this.config,srj:this.routingSrj,buses:this.preparedBuses,sourceEscapes:s.sourceEscapes,sourceBoundary:s.sourceBoundary,initialPlans:d,targetLayerByBusId:o}),h=u.next();while(!h.done)yield,h=u.next();if(!h.value)return null;let A=Lli({...this.config,srj:this.routingSrj,inputSrj:this.inputSrj,plans:h.value,preparedBuses:this.preparedBuses,sharedBoundary:this.getValidationBoundary()}),m=A.next();while(!m.done)yield,m=A.next();if(!m.value)return null;let p=this.normalizeCompletePlanCorners(m.value);if(!p)return null;let g=QL({inputSrj:this.inputSrj,plans:p,layerNames:this.config.layerNames});if(!this.validateCompletePlans(p,g).valid)return null;return{plans:p,failedBusIds:[],stopAfterCompleteValidation:!0}}*routeDenseThroughAllMixedTerminationSteps(e){if(this.config.allowBlindAndBuriedVias)return null;let t=e.preferredBoundaryViaPoints,n=e.denseRoutingStrategy!=="boundary-aligned",o=(...Oe)=>{if(_a.env.FANOUT_DEBUG_DENSE==="1"){if(_a.env.FANOUT_DEBUG_DENSE_SUMMARY==="1"&&!["start","plane-match:preflight-failed","plane-match:incremental-complete","plane-match:incremental-failed","plane-route:alternate-candidate-counts","plane-route:alternate-search","plane-route:csp","plane-reservation-core","plane-route:promote-failed","plane-route:alternate-choice","plane-route:promote-zero-candidates","length-match:complete","length-match:start","plane-route:failed","dense-validation"].includes(String(Oe[0])))return;console.error("dense:",...Oe)}},i=e.busesInRoutingOrder.filter((Oe)=>Oe.termination.type==="boundary"),r=i.filter((Oe)=>Oe.connections.length>=8),s=(Oe,qe)=>qe.componentId!==Oe.componentId&&this.config.layerNames.every((rt)=>qe.layers.includes(rt))&&qe.center.x>=Oe.componentBounds.minX&&qe.center.x<=Oe.componentBounds.maxX&&qe.center.y>=Oe.componentBounds.minY&&qe.center.y<=Oe.componentBounds.maxY,a=r.some((Oe)=>this.routingSrj.obstacles.some((qe)=>s(Oe,qe))),c=this.preparedBuses.flatMap((Oe)=>Oe.termination.type==="plane"?Oe.connections.map((qe)=>qe.connection.name):[]),l=r.some((Oe)=>this.routingSrj.obstacles.some((qe)=>s(Oe,qe)&&c.some((rt)=>ib(this.routingSrj,qe,rt)))),d=this.config.densePlaneReservationBusIds.length>0||this.config.denseUnrestrictedPlaneRoutingBusIds.length>0,u=!d&&HJt(this.preparedBuses,this.config.allowBlindAndBuriedVias),h=d||u,A=!d&&!u&&l,m=e.boundaryRecovery!==void 0,p=h||A||m,g=m||(u||A)&&((e.planeReservationRetryCount??0)===0||Boolean(e.preferredBoundaryViaPoints)),_=(h||A)&&e.lengthMatchingStage!=="before-planes",f=Brn(i.map((Oe)=>Oe.connections.length)),y=i.filter((Oe)=>Oe.connections.length===2),x=Bdi({boundaryBusCount:i.length,pairBuses:y.map((Oe)=>({...Oe,assignedLayer:e.busLayerAssignments[Oe.busId]}))}),C=x?new Map(y.map((Oe,qe)=>[Oe.busId,x[qe]])):null,I=new Map;if(a)for(let Oe of VT(i,{viaDiameter:this.config.viaDiameter,viaHoleDiameter:this.config.viaHoleDiameter,traceWidth:this.config.traceWidth,clearance:this.config.clearance,additionalObstacles:this.routingSrj.obstacles}))I.set(Oe.connectionIndex,(I.get(Oe.connectionIndex)??0)+1);let b=(Oe)=>Oe.connections.reduce((qe,rt)=>qe+(I.get(rt.connectionIndex)??0),0),P=new Map;if(n&&!d)for(let Oe of r){if(!Mr(Oe.exitEdge,Oe.preferredExit)||new Set(Oe.routableEscapeLayers??Oe.allowedLayers??[]).size!==1)continue;let qe=Oe.direction==="up"||Oe.direction==="down"?"y":"x",rt=qe==="x"?"y":"x",Ct=Oe.direction==="up"||Oe.direction==="right"?1:-1,Mt=Math.max(...Oe.connections.map((Cn)=>Ct*Cn.sourcePoint[qe])),Nt=Math.min(...Oe.connections.map((Cn)=>Cn.sourcePoint[rt])),Ot=Math.max(...Oe.connections.map((Cn)=>Cn.sourcePoint[rt])),mn=qe==="x"?Oe.pitchX:Oe.pitchY,ln=r.find((Cn)=>{if(Cn===Oe||Cn.componentId!==Oe.componentId||Cn.exitEdge!==Oe.exitEdge||Mr(Cn.exitEdge,Cn.preferredExit))return!1;let nn=Math.min(...Cn.connections.map((on)=>Ct*on.sourcePoint[qe]))-Mt;return nn>=-0.000000001&&nn<=mn+0.000000001&&Math.min(...Cn.connections.map((on)=>on.sourcePoint[rt]))<=Ot+0.000000001&&Math.max(...Cn.connections.map((on)=>on.sourcePoint[rt]))>=Nt-0.000000001});if(ln)P.set(Oe,ln)}let E=h&&r.length===3,B=(Oe)=>{let qe=Oe.connections.map((rt)=>{let Ct=rt.exitTargetPoint??rt.targetPoint;return Oe.exitEdge==="top"||Oe.exitEdge==="bottom"?Ct.x:Ct.y});return{minimum:Math.min(...qe),maximum:Math.max(...qe)}},w=(Oe)=>{if(Oe.connections.length>=8)return!1;let qe=B(Oe);return r.some((rt)=>{if(rt.exitEdge!==Oe.exitEdge)return!1;let Ct=B(rt);return qe.maximum>=Ct.minimum-0.000000001&&qe.minimum<=Ct.maximum+0.000000001})},T=(Oe)=>{if(Oe.connections.length>=8)return;return r.find((qe)=>{let rt=qe.connections.map((ln)=>ln.sourcePoint.x),Ct=qe.connections.map((ln)=>ln.sourcePoint.y),Mt=Math.min(...rt),Nt=Math.max(...rt),Ot=Math.min(...Ct),mn=Math.max(...Ct);return Oe.connections.every((ln)=>ln.sourcePoint.x>=Mt-0.000000001&&ln.sourcePoint.x<=Nt+0.000000001&&ln.sourcePoint.y>=Ot-0.000000001&&ln.sourcePoint.y<=mn+0.000000001)})},Q=(Oe)=>Boolean(T(Oe)),N=(Oe)=>w(Oe)&&!Q(Oe)?0:Oe.connections.length>=8?1:Oe.connections.length>1?2:3,F=i.toSorted((Oe,qe)=>{if(f||r.length>0){if(E){let vn=N(Oe)-N(qe);if(vn!==0)return vn}let Cn=i.length===2&&Math.max(...i.map((vn)=>vn.connections.length))>=8?Oe.connections.length-qe.connections.length:qe.connections.length-Oe.connections.length;if(Cn!==0)return Cn;if(a&&Oe.connections.length>=8&&qe.connections.length>=8){let vn=b(Oe)-b(qe);if(vn!==0)return vn}}let rt=e.busLayerAssignments[Oe.busId],Ct=e.busLayerAssignments[qe.busId],Mt=C?.get(Oe.busId),Nt=C?.get(qe.busId);if(Mt!==void 0&&Nt!==void 0&&Mt!==Nt)return Mt-Nt;let Ot=Number(Boolean(Mr(qe.exitEdge,qe.preferredExit)))-Number(Boolean(Mr(Oe.exitEdge,Oe.preferredExit)));if(Ot!==0)return Ot;if(!Boolean(Mr(Oe.exitEdge,Oe.preferredExit))){let Cn=(nn)=>{let on=nn.connections.map((xo)=>xo.sourcePoint.x),Kn=nn.connections.map((xo)=>xo.sourcePoint.y);return Math.max(...on)-Math.min(...on)+Math.max(...Kn)-Math.min(...Kn)},vn=Cn(qe)-Cn(Oe);if(Math.abs(vn)>0.000000001)return vn}let ln=this.config.layerNames.indexOf(rt??"")-this.config.layerNames.indexOf(Ct??"");if(ln!==0)return-ln;if(i.length!==6&&i.length!==7&&i.length!==8&&i.length!==9)return 0;return Oe.busId.localeCompare(qe.busId)}),H=_a.env.FANOUT_DEBUG_BOUNDARY_ORDER?.split(",")??(_a.env.FANOUT_DEBUG_FIRST_BOUNDARY_BUS?[_a.env.FANOUT_DEBUG_FIRST_BOUNDARY_BUS]:e.boundaryRecovery?[e.boundaryRecovery.busId]:[]),z=H.length>0?F.toSorted((Oe,qe)=>{let rt=H.indexOf(Oe.busId),Ct=H.indexOf(qe.busId);return(rt<0?Number.POSITIVE_INFINITY:rt)-(Ct<0?Number.POSITIVE_INFINITY:Ct)}):F,Y=this.preparedBuses.filter((Oe)=>Oe.termination.type==="plane"),U=new Set(Y.flatMap((Oe)=>Oe.connections.map((qe)=>qe.connectionIndex))),X=this.config.allowSameNetMerges||A,V=h||A?this.routingSrj.obstacles:void 0,W=Number.parseInt(_a.env.FANOUT_INITIAL_PLANE_RESERVATIONS??"8",10),j=_a.env.FANOUT_DEBUG_INITIAL_PLANE_INDICES?.split(",").map((Oe)=>Number(Oe)-1),q=_a.env.FANOUT_DEBUG_INITIAL_PLANE_BUS_IDS?.split(","),ne=q?Y.filter((Oe)=>q.includes(Oe.busId)):j?j.flatMap((Oe)=>Y[Oe]?[Y[Oe]]:[]):this.config.densePlaneReservationBusIds.length>0?Y.filter((Oe)=>this.config.densePlaneReservationBusIds.includes(Oe.busId)):h||A?Y.slice(0,Number.isFinite(W)?W:8):Y;if(e.promotedPlaneReservationBusIds)ne=[...new Set([...ne,...Y.filter((Oe)=>e.promotedPlaneReservationBusIds.includes(Oe.busId))])];let ce=new Set,oe,ie,J=z.map((Oe)=>Oe.connections.length),ee=vci({boundaryBusConnectionCounts:J,planeBusCount:Y.length});if(o("start",z.map((Oe)=>`${Oe.busId}:${Oe.connections.length}`),`planes:${Y.length}`,`joint:${f}`),z.length===0||ee===null||z.some((Oe)=>!r3(Oe))||Y.some((Oe)=>Oe.connections.length!==1)||z.length+Y.length!==e.busesInRoutingOrder.length)return null;let se=new Map(this.preparedBuses.flatMap((Oe)=>Oe.connections.map((qe)=>[qe.connectionIndex,qe.connection.name]))),he=J.filter((Oe)=>Oe===1).length>1&&tVe(J),ue=new Map(z.map((Oe)=>[Oe.busId,E&&Oe.connections.length<8&&Q(Oe)?-1:1])),Ae=new Map(z.map((Oe)=>[Oe.busId,Oe.connections.length===1?E&&Q(Oe)?!0:he&&Mr(Oe.exitEdge,Oe.preferredExit)?Zoe(Oe).targetProjection>0:Koe(Oe.direction)!==Oe.exitEdge:E&&Oe.connections.length>=8?!1:Koe(Oe.direction)!==Oe.exitEdge]));for(let Oe of r){if(h)continue;if(!Mr(Oe.exitEdge,Oe.preferredExit))continue;if(r.some((rt)=>{if(rt===Oe||rt.componentId!==Oe.componentId)return!1;let Ct=rt.connections.map((Cn)=>Cn.sourcePoint.x),Mt=rt.connections.map((Cn)=>Cn.sourcePoint.y),Nt=Math.min(...Ct),Ot=Math.max(...Ct),mn=Math.min(...Mt),ln=Math.max(...Mt);return Oe.connections.some(({sourcePoint:Cn})=>{let vn=Cn.x+(Oe.direction==="left"?-Oe.pitchX/2:Oe.direction==="right"?Oe.pitchX/2:0),nn=Cn.y+(Oe.direction==="down"?-Oe.pitchY/2:Oe.direction==="up"?Oe.pitchY/2:0);return vn>=Nt&&vn<=Ot&&nn>=mn&&nn<=ln})}))Ae.set(Oe.busId,!1)}if(e.boundaryRecovery)ue.set(e.boundaryRecovery.busId,e.boundaryRecovery.perpendicularSide),Ae.set(e.boundaryRecovery.busId,e.boundaryRecovery.preferOutward);let _e=_a.env.FANOUT_DEBUG_FLIP_BOUNDARY_BUS;if(_e)ue.set(_e,-1);let Pe=_a.env.FANOUT_DEBUG_OUTWARD_BOUNDARY_BUS;if(Pe)Ae.set(Pe,!0);let Ee=(Oe,qe)=>{let rt=U.has(Oe)&&U.has(qe);if(!this.config.allowSameNetMerges&&!(X&&rt))return!1;let Ct=se.get(Oe),Mt=se.get(qe);return Boolean(Ct&&Mt&&Uy(this.routingSrj,Ct,Mt))},Te=z.filter((Oe)=>Oe.connections.length===1),be=!E&&!A&&tVe(J)?Te.toSorted(z.length===9?Edi:Mdi).slice(0,Sdi(J)):[],me=z.length===8||z.length===9?be.filter((Oe)=>{let qe=e.busLayerAssignments[Oe.busId];return Boolean(qe&&Vrn({singletonBus:Oe,singletonTargetLayer:qe,wideBuses:z}))}):[],ye=E?Te.filter((Oe)=>{let qe=T(Oe),rt=e.busLayerAssignments[Oe.busId];if(!qe||!rt)return!1;let Ct=qe.routableEscapeLayers??qe.allowedLayers??[],Mt=Oe.exitEdge==="left"||Oe.exitEdge==="right"?"x":"y",Nt=qe.connections.map((ln)=>ln.sourcePoint[Mt]),Ot=Oe.exitEdge==="left"||Oe.exitEdge==="bottom"?Math.min(...Nt):Math.max(...Nt),mn=Oe.connections.every((ln)=>Math.abs(ln.sourcePoint[Mt]-Ot)<0.000000001);return Boolean(!Ct.includes(rt)||u&&mn&&Mr(Oe.exitEdge,Oe.preferredExit))}):[],Ce=ye.flatMap((Oe)=>{let qe=T(Oe),rt=e.busLayerAssignments[Oe.busId];return z.filter((Ct)=>Ct.connections.length>1&&Ct.connections.length<8&&Ct.direction===Oe.direction&&e.busLayerAssignments[Ct.busId]===rt&&T(Ct)===qe)}),ve=_a.env.FANOUT_DEBUG_DISABLE_LEADING_NARROW==="1"?[]:ye.flatMap((Oe)=>[Oe,...Ce.filter((qe)=>qe.direction===Oe.direction&&e.busLayerAssignments[qe.busId]===e.busLayerAssignments[Oe.busId])]),De=[...me,...ve].filter((Oe,qe,rt)=>rt.indexOf(Oe)===qe),Ze=new Map;if(z.length===9&&De.length>0)for(let Oe of De){Ae.set(Oe.busId,!0);let qe=Mr(Oe.exitEdge,Oe.preferredExit);if(!Oe.exitEdge||!qe)continue;let rt=`${Oe.exitEdge}:${qe}`;if(!z.some((Mt)=>{if(Mt===Oe||Mt.connections.length<8)return!1;return Mt.exitEdge===Oe.exitEdge&&Mr(Mt.exitEdge,Mt.preferredExit)===qe}))continue;Ze.set(rt,(Ze.get(rt)??0)+Oe.connections.length)}let st=new Set([..._a.env.FANOUT_DEBUG_PROVISIONAL_NARROW==="1"?z.filter((Oe)=>Oe.connections.length<8):[],...be.filter((Oe)=>{let qe=T(Oe),rt=Oe.connections[0].sourcePoint,Ct={x:(Oe.componentBounds.minX+Oe.componentBounds.maxX)/2,y:(Oe.componentBounds.minY+Oe.componentBounds.maxY)/2},Mt=Oe.exitEdge?x3(Oe.exitEdge):Oe.direction,Nt=Mt==="right"?Ct.x-rt.x:Mt==="left"?rt.x-Ct.x:Mt==="up"?Ct.y-rt.y:rt.y-Ct.y,Ot=n&&!h&&qe&&(e.busLayerAssignments[qe.busId]===e.busLayerAssignments[Oe.busId]||Nt>0.000000001);return!De.includes(Oe)&&!Ot}),...E?z.filter((Oe)=>Oe.connections.length===2&&!w(Oe)&&!De.includes(Oe)):[]]),et=(Oe)=>{let qe=Mr(Oe.exitEdge,Oe.preferredExit);if(!Oe.exitEdge||!qe)return 0;let rt=Ze.get(`${Oe.exitEdge}:${qe}`)??0;return Pdi({leadingLaneCount:rt,traceWidth:this.config.traceWidth,viaDiameter:this.config.viaDiameter,clearance:this.config.clearance})},lt=z.filter((Oe)=>!st.has(Oe)),it=f?qu([...ne,...lt],{viaDiameter:this.config.viaDiameter,viaHoleDiameter:this.config.viaHoleDiameter,traceWidth:this.config.traceWidth,clearance:this.config.clearance,maximumSearchStates:1e5,preferredViaPointsByConnectionIndex:e.preferredBoundaryViaPoints,preferredBoundaryPerpendicularSideByBusId:ue,preferBoundaryOutwardByBusId:Ae,additionalObstacles:V,preferPlaneCheckerboardSites:h,canShareCopper:Ee}):null,gt=it??qu([...ne,z[0]],{viaDiameter:this.config.viaDiameter,viaHoleDiameter:this.config.viaHoleDiameter,traceWidth:this.config.traceWidth,clearance:this.config.clearance,maximumSearchStates:20000,preferredViaPointsByConnectionIndex:e.preferredBoundaryViaPoints,preferredBoundaryPerpendicularSideByBusId:ue,preferBoundaryOutwardByBusId:Ae,additionalObstacles:V,preferPlaneCheckerboardSites:h,canShareCopper:Ee}),wt=_a.env.FANOUT_DEBUG_FIXED_VIAS;if(gt&&wt){gt=new Map(gt);for(let Oe of wt.split(",")){let qe=Oe.split(":"),rt=qe.pop(),Ct=qe.pop(),Mt=qe.join(":"),Nt=[...se].find(([,ln])=>ln===Mt)?.[0],Ot=Number(Ct),mn=Number(rt);if(Nt!==void 0&&Number.isFinite(Ot)&&Number.isFinite(mn))gt.set(Nt,{x:Ot,y:mn})}}let Dt=_a.env.FANOUT_DEBUG_STAGED_PLANE_BUS_IDS?Y.filter((Oe)=>_a.env.FANOUT_DEBUG_STAGED_PLANE_BUS_IDS.split(",").includes(Oe.busId)):_a.env.FANOUT_DEBUG_STAGED_PLANE_INDICES?.split(",").flatMap((Oe)=>Y[Number(Oe)-1]?[Y[Number(Oe)-1]]:[])??[];if(gt&&Dt.length>0)for(let Oe of Dt){if(ne.includes(Oe))continue;let qe=qu([...ne,Oe,...lt],{viaDiameter:this.config.viaDiameter,viaHoleDiameter:this.config.viaHoleDiameter,traceWidth:this.config.traceWidth,clearance:this.config.clearance,maximumSearchStates:1e5,preferredViaPointsByConnectionIndex:e.preferredBoundaryViaPoints,preferredBoundaryPerpendicularSideByBusId:ue,preferBoundaryOutwardByBusId:Ae,fixedViaPointsByConnectionIndex:gt,additionalObstacles:V,preferPlaneCheckerboardSites:h,canShareCopper:Ee});if(o("plane-reservation:staged",Oe.busId,qe?.size??"failed"),!qe)break;gt=new Map([...gt,...qe]),ne.push(Oe)}if(o("seed",gt?.size??"failed"),gt&&_a.env.FANOUT_DEBUG_DENSE_POINTS==="1")console.error("dense: seed-points",[...gt].map(([Oe,qe])=>({connection:se.get(Oe),point:qe})));let vt=1,Ht=z.length+Y.length+3;if(this.setInProgressPlans({phase:"reserve-dense-via-sites",plans:[],strategy:"default",unitIndex:vt,unitCount:Ht}),yield,gt){let Oe=Eci({busesInRoutingOrder:[...a?[]:me,...z.filter((_t)=>(a||!me.includes(_t))&&!ve.includes(_t)).flatMap((_t)=>[...ve.filter((Tt)=>T(Tt)===_t),_t])],busLayerAssignments:e.busLayerAssignments,routingMode:ee}),qe=r.every((_t)=>_t.exitEdge&&_t.direction===x3(_t.exitEdge)),rt=A&&qe?Te.filter((_t)=>{let Tt=T(_t);return Boolean(Tt&&_t.direction===Tt.direction)}):[];if(e.boundaryRecovery&&rt.length>0){let _t=Oe.findIndex((Tt)=>Tt.busId===e.boundaryRecovery.busId);if(_t>=0){let Tt=Oe[_t],Ut=new Set(rt),Lt=Oe.filter((fn)=>fn!==Tt&&!Ut.has(fn));Oe.splice(0,Oe.length,Tt,...rt,...Lt)}}for(let[_t]of P){let Tt=_t.direction==="up"||_t.direction==="down"?"y":"x",Ut=_t.direction==="up"||_t.direction==="right"?1:-1,Lt=Math.min(..._t.connections.map((Gn)=>Ut*Gn.sourcePoint[Tt])),fn=Oe.indexOf(_t),On=Oe.findIndex((Gn)=>Gn!==_t&&Gn.connections.length>=8&&Gn.componentId===_t.componentId&&Gn.direction===_t.direction&&Math.max(...Gn.connections.map((fo)=>Ut*fo.sourcePoint[Tt]))<=Lt+0.000000001&&Gn.exitEdge===_t.exitEdge&&Mr(Gn.exitEdge,Gn.preferredExit)===Mr(_t.exitEdge,_t.preferredExit));if(On>=0&&On<fn)Oe.splice(fn,1),Oe.splice(On,0,_t)}let Ct=(_t,Tt)=>{if(!n||_t.componentId!==Tt.componentId||_t.exitEdge!==Tt.exitEdge||_t.direction!==Tt.direction||Mr(_t.exitEdge,_t.preferredExit)!==Mr(Tt.exitEdge,Tt.preferredExit)||e.busLayerAssignments[_t.busId]!==e.busLayerAssignments[Tt.busId]||T(_t)!==T(Tt)||!T(_t))return!1;let Ut={x:_t.connections.reduce((Gn,fo)=>Gn+fo.sourcePoint.x,0)/_t.connections.length,y:_t.connections.reduce((Gn,fo)=>Gn+fo.sourcePoint.y,0)/_t.connections.length},Lt={x:Tt.connections.reduce((Gn,fo)=>Gn+fo.sourcePoint.x,0)/Tt.connections.length,y:Tt.connections.reduce((Gn,fo)=>Gn+fo.sourcePoint.y,0)/Tt.connections.length};if(Math.hypot(Ut.x-Lt.x,Ut.y-Lt.y)>1.5*Math.min(_t.pitchX,_t.pitchY))return!1;let fn=_t.exitEdge==="left"||_t.exitEdge==="right"?"y":"x",On=(Gn)=>Gn.connections.reduce((fo,Ho)=>fo+(Ho.exitTargetPoint??Ho.targetPoint)[fn],0)/Gn.connections.length;return(Ut[fn]-Lt[fn])*(On(_t)-On(Tt))<-0.000000001},Mt=new Set;for(let _t of De){if(Mr(_t.exitEdge,_t.preferredExit))continue;for(let Tt of z){if(Tt.connections.length!==2||!Ct(Tt,_t))continue;let Ut=Oe.indexOf(Tt),Lt=Oe.indexOf(_t);if(Ut>Lt)Oe.splice(Ut,1),Oe.splice(Lt,0,Tt),Mt.add(`${Tt.componentId}:${Tt.exitEdge}`)}}for(let _t of z){if(!Mt.has(`${_t.componentId}:${_t.exitEdge}`)||_t.connections.length!==2||!Mr(_t.exitEdge,_t.preferredExit))continue;for(let Tt of Te){if(!Ct(Tt,_t))continue;let Ut=Oe.indexOf(Tt),Lt=Oe.indexOf(_t);if(Ut>Lt)Oe.splice(Ut,1),Oe.splice(Lt,0,Tt)}}for(let _t of P.values())for(let Tt of z){if(Tt.connections.length!==2||T(Tt)!==_t)continue;for(let Ut of Te){if(!Ct(Ut,Tt))continue;let Lt=Oe.indexOf(Tt),fn=Oe.indexOf(Ut);if(fn>Lt)Oe.splice(fn,1),Oe.splice(Lt,0,Ut)}}let Nt=gt,Ot=[],mn=!0,ln=(_t)=>{let Tt=new Set(_t.connections.map((Ut)=>Ut.connection.name));return this.preparedBuses.flatMap((Ut)=>{let Lt=e.busLayerAssignments[Ut.busId];if(!Lt)return[];return Ut.connections.flatMap((fn)=>{if(Tt.has(fn.connection.name))return[];let On=Nt.get(fn.connectionIndex);if(!On)return[];return[{connectionName:fn.connection.name,sourceEscapeSegment:Ot.some((Gn)=>Gn.connectionIndex===fn.connectionIndex)?void 0:{start:fn.sourcePoint,end:On,layer:fn.sourceLayer,width:this.config.traceWidth},via:{center:On,diameter:this.config.viaDiameter,spanLayers:Wy({fromLayer:fn.sourceLayer,toLayer:Lt,layerNames:this.config.layerNames,allowBlindAndBuriedVias:!1})}}]})})},Cn=function*(_t){if(o("route:start",_t.busId,Ot.length),_a.env.FANOUT_DEBUG_DENSE_POINTS==="1")console.error("dense: points",_t.busId,_t.connections.map((In)=>({source:In.sourcePoint,via:Nt.get(In.connectionIndex),target:In.exitTargetPoint??In.targetPoint})));let Tt=e.busLayerAssignments[_t.busId];if(!Tt)return!1;let Ut=!h&&!Mr(_t.exitEdge,_t.preferredExit)&&_t.connections.length>2&&r.some((In)=>Mr(In.exitEdge,In.preferredExit)),Lt=this.config.traceWidth+this.config.clearance,fn=_t.connections.some((In)=>{let eo=In.exitTargetPoint??In.targetPoint,co=_t.sharedBoundary;return _t.exitEdge==="left"||_t.exitEdge==="right"?eo.y-co.minY<=Lt+0.000000001||co.maxY-eo.y<=Lt+0.000000001:eo.x-co.minX<=Lt+0.000000001||co.maxX-eo.x<=Lt+0.000000001}),On={srj:this.routingSrj,bus:_t,targetLayer:Tt,acceptedPlans:Ot,layerNames:this.config.layerNames,traceWidth:this.config.traceWidth,viaDiameter:this.config.viaDiameter,viaHoleDiameter:this.config.viaHoleDiameter,clearance:this.config.clearance,compactBusTracks:this.config.compactBusTracks,allowBlindAndBuriedVias:!1,allowSameNetMerges:this.config.allowSameNetMerges,staticClearanceCache:this.routeStaticClearanceCache,fixedViaPointsByConnectionIndex:Nt,reservedVias:ln(_t),viaMinimalOnly:_a.env.FANOUT_DEBUG_ALLOW_EXTRA_VIAS!=="1",allowBoundarySideViaFallback:_t.connections.length===1,preferCornerBoundaryVia:h,adaptiveWindingRouteOrder:Ut,allowFixedViaReservedExitFallback:m,forbidEarlyExitBoundaryContact:fn,alignWindingGridToPads:n&&!d,fixedViaFallbackRouteOrderAttempts:Ut?60:h?6:24,cornerBandTargetTrackOffset:et(_t)},Gn=function*(In,eo){return this.activeRoutingVisualization=null,yield{type:"subsolver",solver:this.createWorkSolver("BoundaryBusRoutingSolver",this.routeBusAlternativesWorkSteps(In,eo),void 0,()=>this.visualizeBoundaryRoutingState())}}.bind(this),Ho=(_t.routableEscapeLayers??_t.allowedLayers??[]).some((In)=>In!==Tt)?{..._t,routableEscapeLayers:[Tt]}:_t,Vn=z.some((In)=>In.connections.length<8&&T(In)===_t&&Ot.some((eo)=>eo.busId===In.busId)),Wn=h&&Ho!==_t&&!Vn,Co=!1,Eo=(yield*Gn(Wn?{...On,bus:Ho}:On,1))[0];if(!Eo&&Wn)Eo=(yield*Gn(On,1))[0];if(!Eo){let In=Nt,eo=Ae.get(_t.busId)??!0,co=ue.get(_t.busId)??1;for(let[$n,zo]of[[!eo,co],[eo,-co],[!eo,-co]]){let qo=qu([...new Set([...ne,...lt,...this.preparedBuses.filter((fi)=>Ot.some((Nr)=>Nr.busId===fi.busId)),_t])],{viaDiameter:this.config.viaDiameter,viaHoleDiameter:this.config.viaHoleDiameter,traceWidth:this.config.traceWidth,clearance:this.config.clearance,maximumSearchStates:1e5,preferredBoundaryPerpendicularSideByBusId:new Map([...ue,[_t.busId,zo]]),preferBoundaryOutwardByBusId:new Map([...Ae,[_t.busId,$n]]),fixedViaPointsByConnectionIndex:new Map(Ot.filter((fi)=>fi.via).map((fi)=>[fi.connectionIndex,fi.via.center])),preferredViaPointsByConnectionIndex:new Map([...In].filter(([fi])=>!_t.connections.some((Nr)=>Nr.connectionIndex===fi))),blockingSegments:Ot.flatMap((fi)=>fi.segments.map((Nr)=>({connectionIndex:fi.connectionIndex,segment:Nr}))),additionalObstacles:this.routingSrj.obstacles,preferPlaneCheckerboardSites:h,canShareCopper:Ee});if(o("retry-sites",_t.busId,$n,zo,qo?.size??"failed"),!qo)continue;if(Nt=qo,Eo=(yield*Gn({...On,fixedViaPointsByConnectionIndex:qo,reservedVias:ln(_t),alignWindingGridToPads:h,fixedViaFallbackRouteOrderAttempts:3},1))[0],Eo)break}if(!Eo){if(Nt=In,_t.connections.length===2)Eo=(yield*Gn({...On,fixedViaPointsByConnectionIndex:In,reservedVias:ln(_t),allowBoundarySideViaFallback:!0,fixedViaFallbackRouteOrderAttempts:1},1))[0]}}if(!Eo&&u&&_t.connections.length>=8&&Mr(_t.exitEdge,_t.preferredExit)&&new Set(_t.routableEscapeLayers??_t.allowedLayers??[]).size===1&&!Ot.some((In)=>r.some((eo)=>eo.busId===In.busId))){let In=ln(_t),eo=Zsi(_t,{viaDiameter:this.config.viaDiameter,viaHoleDiameter:this.config.viaHoleDiameter,traceWidth:this.config.traceWidth,clearance:this.config.clearance,additionalObstacles:this.routingSrj.obstacles,blockingSegments:[...Ot.flatMap((co)=>co.segments.map(($n)=>({connectionIndex:co.connectionIndex,segment:$n}))),...In.flatMap((co)=>co.sourceEscapeSegment?[{connectionIndex:-1,segment:co.sourceEscapeSegment}]:[])],blockingVias:[...Ot.flatMap((co)=>co.via?[{connectionIndex:co.connectionIndex,...co.via}]:[]),...In.map((co)=>({connectionIndex:-1,...co.via}))]},Nt);for(let co of eo){let $n=(yield*Gn({...On,fixedViaPointsByConnectionIndex:co,reservedVias:In,fixedViaFallbackRouteOrderAttempts:1},1))[0];if(!$n)continue;Eo=$n,Nt=co,Co=!0;break}}if(!Eo&&u&&_t.connections.length>=8&&Mr(_t.exitEdge,_t.preferredExit)){if(Eo=(yield*Gn({...On,fixedViaPointsByConnectionIndex:void 0,reservedVias:ln(_t)},1))[0],Eo)Co=!0,Nt=new Map([...Nt,...Eo.filter((In)=>In.via).map((In)=>[In.connectionIndex,In.via.center])]);o("local-sites",_t.busId,Eo?.length??"failed")}if(!Eo&&_t.connections.length>=8&&(P.has(_t)||z.some((In)=>In.connections.length>=8&&Ot.some((eo)=>eo.busId===In.busId)))){let In=new Set(Ot.map(($n)=>$n.connectionName)),eo=new Set(this.preparedBuses.filter(($n)=>$n.termination.type==="plane"||$n===P.get(_t)).flatMap(($n)=>$n.connections.map((zo)=>zo.connection.name)).filter(($n)=>!In.has($n))),co=(yield*Gn({...On,fixedViaPointsByConnectionIndex:void 0,reservedVias:On.reservedVias.filter(($n)=>!eo.has($n.connectionName)),softReservedVias:On.reservedVias.filter(($n)=>eo.has($n.connectionName))},1))[0];if(co){let $n=[...Ot,...co],zo=qu(this.preparedBuses,{viaDiameter:this.config.viaDiameter,viaHoleDiameter:this.config.viaHoleDiameter,traceWidth:this.config.traceWidth,clearance:this.config.clearance,maximumSearchStates:3000000,preferredBoundaryPerpendicularSideByBusId:ue,preferBoundaryOutwardByBusId:Ae,fixedViaPointsByConnectionIndex:new Map($n.filter((qo)=>qo.via).map((qo)=>[qo.connectionIndex,qo.via.center])),preferredViaPointsByConnectionIndex:Nt,blockingSegments:$n.flatMap((qo)=>qo.segments.map((fi)=>({connectionIndex:qo.connectionIndex,segment:fi}))),additionalObstacles:this.routingSrj.obstacles,preferPlaneCheckerboardSites:h,canShareCopper:Ee});if(o("free-sites:rematched",_t.busId,zo?.size??"failed"),zo)Eo=co,Nt=zo,Co=!0}}if(Eo&&_t.maxLengthSkew!==void 0){let In=Eo.map(($n)=>$n.length),eo=Math.max(...In)-Math.min(...In);if(vdi({boundaryBusCount:z.length,connectionCount:_t.connections.length,rawSkew:eo,maximumSkew:_t.maxLengthSkew})&&!_&&!Co)Eo=(yield*Gn(On,3)).toSorted(($n,zo)=>{let qo=$n.map((Nr)=>Nr.length),fi=zo.map((Nr)=>Nr.length);return Math.max(...qo)-Math.min(...qo)-(Math.max(...fi)-Math.min(...fi))})[0]}if(!Eo){if(oe??=_t,_t.connections.length>=8)ie??=_t;return o("route:failed",_t.busId),!1}if(Ot.push(...Eo),Ot.length===z.reduce((In,eo)=>In+eo.connections.length,0)&&Ot.some((In)=>{let eo=z.find(($n)=>$n.busId===In.busId);if(eo?.connections.length!==1||!In.via)return!1;let{center:co}=In.via;return co.x<eo.componentBounds.minX||co.x>eo.componentBounds.maxX||co.y<eo.componentBounds.minY||co.y>eo.componentBounds.maxY}))t=new Map(Ot.filter((In)=>In.via).map((In)=>[In.connectionIndex,In.via.center]));return o("route:complete",_t.busId,Eo.length),!0}.bind(this),vn=[],nn=(_t)=>{if(_t.connections.length>=8&&!h&&!A&&_a.env.FANOUT_DEBUG_NO_PLANE_EXPANSION!=="1"&&ne.length<Y.length)ne=Y,o("plane-reservations:expanded",Y.length)},on=ee==="large_boundary_only"?Oe:Oe.slice(0,1),Kn;for(let _t of on){let Tt=yield*Cn(_t);if(this.setInProgressPlans({phase:"route-dense-boundary-buses",plans:Ot,strategy:"default",unitIndex:++vt,unitCount:Ht,busId:_t.busId}),yield,!Tt)continue;Kn=_t;break}if(Kn)vn.push(Kn),nn(Kn);else mn=!1;let xo=Oe.filter((_t)=>_t!==Kn);while(mn&&xo.length>0){let _t=Ot.flatMap((Ut)=>Ut.segments.map((Lt)=>({connectionIndex:Ut.connectionIndex,segment:Lt}))),Tt=-1;for(let Ut=0;Ut<xo.length;Ut++){let Lt=xo[Ut];o("candidate:start",Lt.busId);let fn=new Map(Nt),On=_a.env.FANOUT_DEBUG_LATE_FIXED_VIAS;if(On){let In=new Set(Lt.connections.map((eo)=>eo.connectionIndex));for(let eo of On.split(",")){let co=eo.split(":"),$n=co.pop(),zo=co.pop(),qo=co.join(":"),fi=[...se].find(([,Fs])=>Fs===qo)?.[0],Nr=Number(zo),bs=Number($n);if(fi!==void 0&&In.has(fi)&&Number.isFinite(Nr)&&Number.isFinite(bs))fn.set(fi,{x:Nr,y:bs})}}let Gn=Lt.connections.every((In)=>fn.has(In.connectionIndex)),fo=it&&Gn?new Map(fn):qu([...ne,...vn,Lt],{viaDiameter:this.config.viaDiameter,viaHoleDiameter:this.config.viaHoleDiameter,traceWidth:this.config.traceWidth,clearance:this.config.clearance,maximumSearchStates:1e5,preferredBoundaryPerpendicularSideByBusId:ue,preferBoundaryOutwardByBusId:Ae,fixedViaPointsByConnectionIndex:fn,blockingSegments:_t,additionalObstacles:V,preferPlaneCheckerboardSites:h,canShareCopper:Ee}),Ho=fo?new Map([...fn,...fo]):null;if(o("candidate:matched",Lt.busId,Ho?.size??"failed"),this.setInProgressPlans({phase:"reserve-next-dense-boundary-bus",plans:Ot,strategy:"default",unitIndex:vt,unitCount:Ht,busId:Lt.busId}),yield,!Ho)continue;let Vn=Nt,Wn=Ot.length,Co=xo.filter((In,eo)=>eo!==Ut),Eo=Ho;if(Co.length===1){let In=Co[0],eo=qu([...ne,...vn,Lt,In],{viaDiameter:this.config.viaDiameter,viaHoleDiameter:this.config.viaHoleDiameter,traceWidth:this.config.traceWidth,clearance:this.config.clearance,maximumSearchStates:1e5,preferredBoundaryPerpendicularSideByBusId:ue,preferBoundaryOutwardByBusId:Ae,fixedViaPointsByConnectionIndex:Ho,blockingSegments:_t,additionalObstacles:V,preferPlaneCheckerboardSites:h,canShareCopper:Ee});if(o("future:matched",In.busId,eo?.size??"failed"),eo){let co=new Map;for(let qo of VT([In],{viaDiameter:this.config.viaDiameter,viaHoleDiameter:this.config.viaHoleDiameter,traceWidth:this.config.traceWidth,clearance:this.config.clearance,blockingSegments:_t,additionalObstacles:V,preferPlaneCheckerboardSites:h,canShareCopper:Ee}))co.set(qo.connectionIndex,(co.get(qo.connectionIndex)??0)+1);let $n=In.connections.toSorted((qo,fi)=>(co.get(qo.connectionIndex)??0)-(co.get(fi.connectionIndex)??0)||qo.connectionIndex-fi.connectionIndex),zo=new Map(Ho);for(let qo of $n){let fi=eo.get(qo.connectionIndex);if(fi)zo.set(qo.connectionIndex,fi)}Eo=zo}}if(Nt=Eo,yield*Cn(Lt)){o("lookahead:start",Lt.busId);let In=Co.length===0||Co.some((eo)=>{let co=Ot.flatMap(($n)=>$n.segments.map((zo)=>({connectionIndex:$n.connectionIndex,segment:zo})));return Boolean(qu([...ne,...vn,Lt,eo],{viaDiameter:this.config.viaDiameter,viaHoleDiameter:this.config.viaHoleDiameter,traceWidth:this.config.traceWidth,clearance:this.config.clearance,maximumSearchStates:1e5,preferredBoundaryPerpendicularSideByBusId:ue,preferBoundaryOutwardByBusId:Ae,fixedViaPointsByConnectionIndex:Nt,blockingSegments:co,additionalObstacles:V,preferPlaneCheckerboardSites:h,canShareCopper:Ee}))});if(o("lookahead:complete",Lt.busId,In),In){Tt=Ut,vn.push(Lt),nn(Lt),this.setInProgressPlans({phase:"route-dense-boundary-buses",plans:Ot,strategy:"default",unitIndex:++vt,unitCount:Ht,busId:Lt.busId}),yield;break}Ot.splice(Wn)}Nt=Vn,this.setInProgressPlans({phase:"retry-dense-boundary-bus",plans:Ot,strategy:"default",unitIndex:vt,unitCount:Ht,busId:Lt.busId}),yield}if(Tt<0){mn=!1;break}xo.splice(Tt,1)}let ai=null;if(mn){let _t=null,Tt=[],Ut=(fn,On=new Set)=>{Tt=[],ai=null;let Gn=new Map(fn.flatMap((In)=>In.via?[[In.connectionIndex,In.via.center]]:[])),fo=fn.flatMap((In)=>In.segments.map((eo)=>({connectionIndex:In.connectionIndex,segment:eo}))),Ho=!h||fn.some((In)=>In.segments.filter((eo)=>eo.layer===In.sourceLayer).length>1),Vn=!Ho?z:[],Wn=!Ho?[]:fn.flatMap((In)=>[In.via,...In.additionalVias??[],In.planeEndpointVia].filter((eo)=>eo!==void 0).map((eo)=>({connectionIndex:In.connectionIndex,center:eo.center,diameter:eo.diameter,spanLayers:eo.spanLayers}))),Co=!Ho?null:qu(Y,{viaDiameter:this.config.viaDiameter,viaHoleDiameter:this.config.viaHoleDiameter,traceWidth:this.config.traceWidth,clearance:this.config.clearance,maximumSearchStates:1,preferredBoundaryPerpendicularSideByBusId:ue,preferBoundaryOutwardByBusId:Ae,fixedViaPointsByConnectionIndex:new Map([...Nt,...Gn]),blockingSegments:fo,blockingVias:Wn,additionalObstacles:V,preferPlaneCheckerboardSites:h,canShareCopper:Ee});if(Co)return new Map([...Gn,...Co]);if(p||_a.env.FANOUT_DEBUG_INCREMENTAL_PLANE_MATCH==="1"){let In=new Map(Gn),eo=m?[]:[...ne];for(let Wo of eo)for(let Ti of Wo.connections){let zi=Nt.get(Ti.connectionIndex);if(zi)In.set(Ti.connectionIndex,zi)}for(let Wo of eo){let Ti=e.busLayerAssignments[Wo.busId];if(!Ti)return null;let zi=KL({srj:this.routingSrj,bus:Wo,targetLayer:Ti,acceptedPlans:[...fn,...Tt],layerNames:this.config.layerNames,traceWidth:this.config.traceWidth,viaDiameter:this.config.viaDiameter,viaHoleDiameter:this.config.viaHoleDiameter,clearance:this.config.clearance,compactBusTracks:this.config.compactBusTracks,allowBlindAndBuriedVias:!1,allowSameNetMerges:X,staticClearanceCache:this.routeStaticClearanceCache,fixedViaPointsByConnectionIndex:In});if(!zi)return null;Tt.push(...zi)}let co=Y.filter((Wo)=>!eo.includes(Wo)&&!qu([...eo,Wo,...Vn],{viaDiameter:this.config.viaDiameter,viaHoleDiameter:this.config.viaHoleDiameter,traceWidth:this.config.traceWidth,clearance:this.config.clearance,maximumSearchStates:1e5,preferredBoundaryPerpendicularSideByBusId:ue,preferBoundaryOutwardByBusId:Ae,fixedViaPointsByConnectionIndex:In,blockingSegments:fo,blockingVias:Wn,additionalObstacles:V,preferPlaneCheckerboardSites:h,canShareCopper:Ee})),$n=Math.min(...Y.map((Wo)=>this.config.layerNames.indexOf(e.busLayerAssignments[Wo.busId]??""))),zo=h||_a.env.FANOUT_DEBUG_ROUTE_DEEP_PLANES_FIRST==="1"?Y.filter((Wo)=>!eo.includes(Wo)&&this.config.layerNames.indexOf(e.busLayerAssignments[Wo.busId]??"")>$n):[],qo=new Set([...On,...this.config.denseUnrestrictedPlaneRoutingBusIds,..._a.env.FANOUT_DEBUG_ADDITIONAL_ALTERNATE_PLANE_BUS_IDS?.split(",")??[]]),fi=Y.filter((Wo)=>!eo.includes(Wo)&&qo.has(Wo.busId)),Nr=[...zo,...co.filter((Wo)=>!zo.includes(Wo)),...fi.filter((Wo)=>!zo.includes(Wo)&&!co.includes(Wo))],bs=_a.env.FANOUT_DEBUG_ALTERNATE_PLANE_ORDER?.split(",")??[],Fs=Nr.toSorted((Wo,Ti)=>{let zi=this.config.layerNames.indexOf(e.busLayerAssignments[Wo.busId]??""),el=this.config.layerNames.indexOf(e.busLayerAssignments[Ti.busId]??"");if(zi!==el&&_a.env.FANOUT_DEBUG_ALTERNATE_IGNORE_LAYERS!=="1")return _a.env.FANOUT_DEBUG_ALTERNATE_SHALLOW_FIRST==="1"?zi-el:el-zi;let Gc=bs.indexOf(Wo.busId),wd=bs.indexOf(Ti.busId);return(Gc<0?bs.length:Gc)-(wd<0?bs.length:wd)||Wo.connections[0].connectionIndex-Ti.connections[0].connectionIndex});if(Nr.length>0){if(o("plane-match:preflight-failed",co.map((Hs)=>Hs.busId)),!p&&_a.env.FANOUT_DEBUG_ROUTE_UNMATCHED_PLANES!=="1")return null;let Wo=0,Ti=Number(_a.env.FANOUT_DEBUG_ALTERNATE_SEARCH_STATES??(u&&(e.planeReservationRetryCount??0)===0?1e4:h?3000000:m?1e4:1000)),zi=Number(_a.env.FANOUT_DEBUG_ALTERNATE_ROUTE_COUNT??(h?128:8)),el=0,Gc=new Map,wd=(Hs,sh,w0=zi)=>{let tu=e.busLayerAssignments[Hs.busId];if(!tu)return[];return yW({srj:this.routingSrj,bus:Hs,targetLayer:tu,acceptedPlans:[...fn,...sh],layerNames:this.config.layerNames,traceWidth:this.config.traceWidth,viaDiameter:this.config.viaDiameter,viaHoleDiameter:this.config.viaHoleDiameter,clearance:this.config.clearance,compactBusTracks:this.config.compactBusTracks,allowBlindAndBuriedVias:!1,allowSameNetMerges:X,staticClearanceCache:this.routeStaticClearanceCache},w0)},sf=(Hs,sh)=>{if(Hs.length===0)return sh;if(Wo>=Ti)return null;el=Math.max(el,Fs.length-Hs.length);let w0=Hs.map((Vi)=>({planeBus:Vi,alternatives:wd(Vi,sh)})),tu=_a.env.FANOUT_DEBUG_DYNAMIC_ALTERNATE_ORDER==="1"?w0.toSorted((Vi,xa)=>Vi.alternatives.length-xa.alternatives.length||Fs.indexOf(Vi.planeBus)-Fs.indexOf(xa.planeBus)):w0,wu=tu[0],{planeBus:Rr,alternatives:Yc}=wu;if(_a.env.FANOUT_DEBUG_ALTERNATE_CHOICES==="1"&&Wo<64)o("plane-route:alternate-choice",`depth:${Fs.length-Hs.length}`,Rr.busId,w0.map((Vi)=>[Vi.planeBus.busId,Vi.alternatives.length]));if(Yc.length===0)return Gc.set(Rr.busId,(Gc.get(Rr.busId)??0)+1),null;let ja=(_a.env.FANOUT_DEBUG_BRANCH_ALTERNATE_ORDER==="1"?tu:[wu]).flatMap((Vi)=>Vi.alternatives.map((xa)=>({selection:Vi,alternative:xa,remaining:Hs.filter((Tl)=>Tl!==Vi.planeBus)}))),Rs=_a.env.FANOUT_DEBUG_LEAST_CONSTRAINING_ALTERNATES==="1"?ja.map((Vi)=>{let xa=[...sh,...Vi.alternative],Tl=Vi.remaining.map((cs)=>wd(cs,xa,Math.min(4,zi)).length);return{...Vi,remainingOptionCounts:Tl,minimumRemainingOptions:Tl.length===0?Number.POSITIVE_INFINITY:Math.min(...Tl),totalRemainingOptions:Tl.reduce((cs,Td)=>cs+Td,0)}}).filter((Vi)=>Vi.minimumRemainingOptions!==0).toSorted((Vi,xa)=>xa.minimumRemainingOptions-Vi.minimumRemainingOptions||xa.totalRemainingOptions-Vi.totalRemainingOptions):ja;for(let Vi of Rs){Wo++;let xa=sf(Vi.remaining,[...sh,...Vi.alternative]);if(xa)return xa;if(Wo>=Ti)break}return Gc.set(Rr.busId,(Gc.get(Rr.busId)??0)+1),null},B0;if(p||_a.env.FANOUT_DEBUG_EXACT_COVER_ALTERNATES==="1"){let Hs=Fs.map((Rr)=>({planeBus:Rr,candidates:wd(Rr,Tt).map((Yc,Ns)=>({key:`${Rr.busId}:${Ns}`,planeBus:Rr,plans:Yc}))}));if(g){let Rr=[...fn,...Tt];for(let Yc of Y){if(eo.includes(Yc)||Hs.some((Rs)=>Rs.planeBus===Yc))continue;let Ns=[],ja=VT([Yc],{viaDiameter:this.config.viaDiameter,viaHoleDiameter:this.config.viaHoleDiameter,traceWidth:this.config.traceWidth,clearance:this.config.clearance,blockingSegments:Rr.flatMap((Rs)=>Rs.segments.map((Vi)=>({connectionIndex:Rs.connectionIndex,segment:Vi}))),blockingVias:Rr.flatMap((Rs)=>[Rs.via,...Rs.additionalVias??[],Rs.planeEndpointVia].filter((Vi)=>Vi!==void 0).map((Vi)=>({connectionIndex:Rs.connectionIndex,center:Vi.center,diameter:Vi.diameter,spanLayers:Vi.spanLayers}))),additionalObstacles:this.routingSrj.obstacles,preferPlaneCheckerboardSites:!0,canShareCopper:Ee});for(let Rs of ja){let Vi=KL({srj:this.routingSrj,bus:Yc,targetLayer:e.busLayerAssignments[Yc.busId],acceptedPlans:Rr,layerNames:this.config.layerNames,traceWidth:this.config.traceWidth,viaDiameter:this.config.viaDiameter,viaHoleDiameter:this.config.viaHoleDiameter,clearance:this.config.clearance,compactBusTracks:this.config.compactBusTracks,allowBlindAndBuriedVias:!1,allowSameNetMerges:X,fixedViaPointsByConnectionIndex:new Map([[Rs.connectionIndex,Rs.point]])});if(Vi)Ns.push({key:`${Yc.busId}:local:${Ns.length}`,planeBus:Yc,plans:Vi})}Hs.push({planeBus:Yc,candidates:Ns})}}o("plane-route:alternate-candidate-counts",Hs.map((Rr)=>[Rr.planeBus.busId,Rr.candidates.length]));for(let Rr of Hs)if(Rr.candidates.length===0)ce.add(Rr.planeBus.busId);let sh=new Map,w0=(Rr,Yc)=>{let Ns=[Rr.key,Yc.key].toSorted().join("|"),ja=sh.get(Ns);if(ja!==void 0)return ja;let Rs=NJt({plans:[...Rr.plans,...Yc.plans],srj:this.routingSrj,clearance:this.config.clearance,allowSameNetMerges:X});return sh.set(Ns,Rs),Rs},tu=(Rr,Yc)=>{if(Rr.length===0)return Yc;if(Wo>=Ti)return null;el=Math.max(el,Fs.length-Rr.length);let Ns=Rr.toSorted((Vi,xa)=>Vi.candidates.length-xa.candidates.length)[0];if(Ns.candidates.length===0)return Gc.set(Ns.planeBus.busId,(Gc.get(Ns.planeBus.busId)??0)+1),null;let ja=Rr.filter((Vi)=>Vi!==Ns),Rs=Number(_a.env.FANOUT_DEBUG_ALTERNATE_CANDIDATE_BATCH_SIZE??16);for(let Vi=0;Vi<Ns.candidates.length;Vi+=Rs){let xa=Ns.candidates.slice(Vi,Vi+Rs).map((Tl)=>{let cs=ja.map((Dl)=>({...Dl,candidates:Dl.candidates.filter((Dd)=>w0(Tl,Dd))})),Td=cs.map((Dl)=>Dl.candidates.length);return{candidate:Tl,projectedSets:cs,minimumProjectedCount:Td.length===0?Number.POSITIVE_INFINITY:Math.min(...Td),totalProjectedCount:Td.reduce((Dl,Dd)=>Dl+Dd,0)}}).filter((Tl)=>Tl.minimumProjectedCount!==0).toSorted((Tl,cs)=>cs.minimumProjectedCount-Tl.minimumProjectedCount||cs.totalProjectedCount-Tl.totalProjectedCount);for(let Tl of xa){Wo++;let cs=tu(Tl.projectedSets,[...Yc,Tl.candidate]);if(cs)return cs;if(Wo>=Ti)break}if(Wo>=Ti)break}return Gc.set(Ns.planeBus.busId,(Gc.get(Ns.planeBus.busId)??0)+1),null},wu;if(u||A){let Rr=(ja)=>ja.map((Rs)=>[...new Map(Rs.candidates.map((Vi)=>[JSON.stringify(Vi.plans.map((xa)=>[xa.segments,xa.via,xa.additionalVias,xa.planeEndpointSegments,xa.planeEndpointVia])),Vi])).values()]),Ns=((ja,Rs=Ti)=>gci({candidateSets:Rr(ja),maximumSearchStates:Rs,areCompatible:(Vi,xa)=>NJt({plans:[...Vi.plans,...xa.plans],srj:this.routingSrj,clearance:this.config.clearance,allowSameNetMerges:X})}))(Hs);if(o("plane-route:csp",Ns.selection?"complete":"failed",Ns.searchStates,Ns.emptyDomainIndices.map((ja)=>Hs[ja].planeBus.busId)),wu=Ns.selection,Wo=Ns.searchStates,!Ns.selection&&(u||A)){let ja=Ns.emptyDomainIndices.map((Rs)=>Hs[Rs].planeBus.busId).filter((Rs)=>!Fs.some((Vi)=>Vi.busId===Rs));if(ja.length>0)return o("plane-route:expand-domains",ja),Ut(fn,new Set([...On,...ja]))}if(!Ns.selection)for(let ja of(e.planeReservationRetryCount??0)===0?Ns.conflictDomainIndices:Ns.emptyDomainIndices.slice(0,1))ce.add(Hs[ja].planeBus.busId)}else wu=tu(Hs,[]);B0=wu?[...Tt,...wu.flatMap((Rr)=>Rr.plans)]:null}else B0=sf(Fs,Tt);if(o("plane-route:alternate-search",B0?"complete":"failed",Wo,`depth:${el}/${Fs.length}`,[...Gc].toSorted(([,Hs],[,sh])=>sh-Hs)),!B0)return null;if(Tt=B0,g)return ai=[],new Map([...Gn,...B0.filter((Hs)=>Hs.via).map((Hs)=>[Hs.connectionIndex,Hs.via.center])])}let wo=new Set,wr=[...fo],dr=[],Yr=[...Y],mc=new Map,zc=new Map,nc=()=>{wo=new Set(Tt.map((Ti)=>Ti.busId));let Wo=Tt.flatMap((Ti)=>[...Ti.segments,...Ti.planeEndpointSegments??[]].map((zi)=>({connectionIndex:Ti.connectionIndex,segment:zi})));wr=[...fo,...Wo],dr=Tt.flatMap((Ti)=>[Ti.via,...Ti.additionalVias??[],Ti.planeEndpointVia].flatMap((zi)=>zi?[{connectionIndex:Ti.connectionIndex,center:zi.center,diameter:zi.diameter,spanLayers:zi.spanLayers}]:[])),Yr=Y.filter((Ti)=>!wo.has(Ti.busId)),mc=new Map,zc=new Map;for(let Ti of VT(Yr,{viaDiameter:this.config.viaDiameter,viaHoleDiameter:this.config.viaHoleDiameter,traceWidth:this.config.traceWidth,clearance:this.config.clearance,blockingSegments:wr,blockingVias:dr,additionalObstacles:V,preferPlaneCheckerboardSites:h,canShareCopper:Ee})){mc.set(Ti.connectionIndex,(mc.get(Ti.connectionIndex)??0)+1);let zi=zc.get(Ti.connectionIndex)??[];zi.push(Ti.point),zc.set(Ti.connectionIndex,zi)}};nc();for(let Wo=0;Wo<Y.length;Wo++){let Ti=Yr.filter((zi)=>!mc.has(zi.connections[0].connectionIndex));if(Ti.length===0)break;if(o("plane-route:promote-zero-candidates",Ti.map((zi)=>zi.busId)),Ti.some((zi)=>eo.includes(zi)))return null;for(let zi of Ti){let el=e.busLayerAssignments[zi.busId];if(!el)return null;let Gc=yW({srj:this.routingSrj,bus:zi,targetLayer:el,acceptedPlans:[...fn,...Tt],layerNames:this.config.layerNames,traceWidth:this.config.traceWidth,viaDiameter:this.config.viaDiameter,viaHoleDiameter:this.config.viaHoleDiameter,clearance:this.config.clearance,compactBusTracks:this.config.compactBusTracks,allowBlindAndBuriedVias:!1,allowSameNetMerges:X,staticClearanceCache:this.routeStaticClearanceCache},8)[0];if(!Gc)return o("plane-route:promote-failed",zi.busId),Ut(fn,new Set([...On,...Ti.map((wd)=>wd.busId)]));Tt.push(...Gc)}nc()}let Bd=_a.env.FANOUT_DEBUG_PLANE_MATCH_ORDER?.split(",")??[],Mh=Yr.toSorted((Wo,Ti)=>{let zi=(mc.get(Wo.connections[0].connectionIndex)??0)-(mc.get(Ti.connections[0].connectionIndex)??0);if(zi!==0)return zi;let el=Bd.indexOf(Wo.busId),Gc=Bd.indexOf(Ti.busId),wd=(el<0?Bd.length:el)-(Gc<0?Bd.length:Gc);if(wd!==0)return wd;return Wo.connections[0].connectionIndex-Ti.connections[0].connectionIndex});for(let Wo of Mh){if(eo.includes(Wo))continue;if(_a.env.FANOUT_DEBUG_PLANE_CANDIDATES?.split(",").includes(Wo.busId))o("plane-match:candidates",Wo.busId,zc.get(Wo.connections[0].connectionIndex));let Ti=qu([...eo,Wo,...Vn],{viaDiameter:this.config.viaDiameter,viaHoleDiameter:this.config.viaHoleDiameter,traceWidth:this.config.traceWidth,clearance:this.config.clearance,maximumSearchStates:1e5,preferredBoundaryPerpendicularSideByBusId:ue,preferBoundaryOutwardByBusId:Ae,fixedViaPointsByConnectionIndex:In,blockingSegments:wr,blockingVias:[...Wn,...dr],additionalObstacles:V,preferPlaneCheckerboardSites:h,canShareCopper:Ee});if(o(Ti?"plane-match:incremental":"plane-match:incremental-failed",Wo.busId,mc.get(Wo.connections[0].connectionIndex)??0,Ti?.get(Wo.connections[0].connectionIndex),Ti?.size??"failed"),!Ti)return null;In=new Map([...In,...Ti]),eo.push(Wo)}return ai=eo.filter((Wo)=>!wo.has(Wo.busId)),o("plane-match:incremental-complete",In.size),In}let Eo=qu([...Y,...Vn],{viaDiameter:this.config.viaDiameter,viaHoleDiameter:this.config.viaHoleDiameter,traceWidth:this.config.traceWidth,clearance:this.config.clearance,maximumSearchStates:1e5,preferredBoundaryPerpendicularSideByBusId:ue,preferBoundaryOutwardByBusId:Ae,fixedViaPointsByConnectionIndex:Gn,blockingSegments:fo,blockingVias:Wn,additionalObstacles:V,preferPlaneCheckerboardSites:h,canShareCopper:Ee});return Eo?new Map([...Gn,...Eo]):null};o("length-match:start",Ot.length);let Lt=_?{plans:Ot}:E1({plans:Ot,preparedBuses:this.preparedBuses,inputSrj:this.inputSrj,sharedBoundary:this.getValidationBoundary(),clearance:this.config.clearance,allowBlindAndBuriedVias:!1,allowSameNetMerges:this.config.allowSameNetMerges,allowMatchingInsideDenseBounds:!0,candidatePlansAreFeasible:(fn)=>{let On=Ut(fn);if(!On)return!1;return _t=On,!0}});if(o("length-match:complete",Lt.plans?.length??"failed"),this.setInProgressPlans({phase:"match-dense-boundary-lengths",plans:Lt.plans??Ot,strategy:"default",unitIndex:++vt,unitCount:Ht}),yield,Lt.plans){Ot=Lt.plans;let fn=_t??Ut(Ot);if(fn)Nt=fn,Ot.push(...Tt);else mn=!1}else mn=!1;this.setInProgressPlans({phase:"rematch-dense-via-sites",plans:Ot,strategy:"default",unitIndex:vt,unitCount:Ht}),yield}if(mn)for(let _t of ai??Y){o("plane-route:start",_t.busId);let Tt=e.busLayerAssignments[_t.busId],Ut=new Map,Lt=Tt?KL({srj:this.routingSrj,bus:_t,targetLayer:Tt,acceptedPlans:Ot,layerNames:this.config.layerNames,traceWidth:this.config.traceWidth,viaDiameter:this.config.viaDiameter,viaHoleDiameter:this.config.viaHoleDiameter,clearance:this.config.clearance,compactBusTracks:this.config.compactBusTracks,allowBlindAndBuriedVias:!1,allowSameNetMerges:X,staticClearanceCache:this.routeStaticClearanceCache,blockingBusCounts:Ut,fixedViaPointsByConnectionIndex:Nt}):null;if(!Lt&&Tt&&a){if(Lt=KL({srj:this.routingSrj,bus:_t,targetLayer:Tt,acceptedPlans:Ot,layerNames:this.config.layerNames,traceWidth:this.config.traceWidth,viaDiameter:this.config.viaDiameter,viaHoleDiameter:this.config.viaHoleDiameter,clearance:this.config.clearance,compactBusTracks:this.config.compactBusTracks,allowBlindAndBuriedVias:!1,allowSameNetMerges:X,staticClearanceCache:this.routeStaticClearanceCache,blockingBusCounts:Ut}),Lt)Nt=new Map([...Nt,...Lt.flatMap((fn)=>fn.via?[[fn.connectionIndex,fn.via.center]]:[])])}if(!Lt){o("plane-route:failed",_t.busId,Nt.get(_t.connections[0].connectionIndex),[...Ut]),mn=!1;break}Ot.push(...Lt),o("plane-route:complete",_t.busId),this.setInProgressPlans({phase:"route-dense-plane-buses",plans:Ot,strategy:"default",unitIndex:++vt,unitCount:Ht,busId:_t.busId}),yield}if(mn&&_){let _t={plans:Ot,preparedBuses:this.preparedBuses,inputSrj:this.inputSrj,sharedBoundary:this.getValidationBoundary(),clearance:this.config.clearance,allowBlindAndBuriedVias:!1,allowSameNetMerges:X,allowMatchingInsideDenseBounds:!0,allowPairLaneSpreading:!0,allowUnconstrainedLaneRerouting:!0},Tt=E1(_t),Ut=new Set;while(!Tt.plans&&Tt.failedBus&&!Ut.has(Tt.failedBus.busId)){let Lt=Tt.failedBus;Ut.add(Lt.busId);let fn=$li({plans:Ot,bus:Lt,srj:this.inputSrj,sharedBoundary:this.getValidationBoundary(),layerNames:this.config.layerNames,traceWidth:this.config.traceWidth,viaDiameter:this.config.viaDiameter,viaHoleDiameter:this.config.viaHoleDiameter,clearance:this.config.clearance,allowSameNetMerges:X});if(fn.every((On,Gn)=>On===Ot[Gn]))break;Ot=fn,Tt=E1({..._t,plans:Ot})}if(Tt.plans)Ot=Tt.plans;else mn=!1;this.setInProgressPlans({phase:"match-dense-complete-lengths",plans:Ot,strategy:"default",unitIndex:++vt,unitCount:Ht}),yield}let At=mn&&Kh({plans:Ot,srj:this.routingSrj,sharedBoundary:z[0].sharedBoundary,clearance:this.config.clearance,allowBlindAndBuriedVias:!1,allowSameNetMerges:X});if(o("dense-validation",mn,Ot.length,At),At){let _t=this.normalizeCompletePlanCorners(Ot);if(_t){let Tt=QL({inputSrj:this.inputSrj,plans:_t,layerNames:this.config.layerNames});if(this.validateCompletePlans(_t,Tt).valid)return{plans:_t,failedBusIds:[],stopAfterCompleteValidation:!0}}}}if((u||A)&&ce.size>0&&(e.planeReservationRetryCount??0)<5){let Oe=[...ce].filter((rt)=>!ne.some((Ct)=>Ct.busId===rt)),qe=(e.planeReservationRetryCount??0)===0?fci({candidateBusIds:Oe,activeBusIds:new Set(ne.map((rt)=>rt.busId)),planeBuses:Y}):Oe;if(qe.length>0)return o("plane-reservation-core",qe),o("promote-reservations",qe),yield*this.routeDenseThroughAllMixedTerminationSteps({...e,preferredBoundaryViaPoints:t,promotedPlaneReservationBusIds:[...e.promotedPlaneReservationBusIds??[],...qe],planeReservationRetryCount:(e.planeReservationRetryCount??0)+1})}if(_&&!oe)return yield*this.routeDenseThroughAllMixedTerminationSteps({...e,lengthMatchingStage:"before-planes"});if(n&&!h){let Oe=yield*this.routeDenseThroughAllMixedTerminationSteps({...e,denseRoutingStrategy:"boundary-aligned"});if(Oe)return Oe;if(!m&&ie){let qe=ie.busId,rt=Ae.get(qe)??!0,Ct=ue.get(qe)??1;for(let[Mt,Nt]of[[!rt,-Ct],[!rt,Ct],[rt,-Ct],[rt,Ct]]){let Ot=yield*this.routeDenseThroughAllMixedTerminationSteps({...e,boundaryRecovery:{busId:qe,preferOutward:Mt,perpendicularSide:Nt}});if(Ot)return Ot}}}if(!n||_a.env.FANOUT_DEBUG_DENSE_ONLY==="1")return null;let Xt=8,ut=(Oe,qe=[])=>{let rt=[{plans:[...qe],failedBusIds:[]}];for(let Ct of z){let Mt=e.busLayerAssignments[Ct.busId];if(!Mt)return null;let Nt=[],Ot=rt.map((mn)=>({state:mn,alternatives:yW({srj:this.routingSrj,bus:Ct,targetLayer:Mt,acceptedPlans:mn.plans,layerNames:this.config.layerNames,traceWidth:this.config.traceWidth,viaDiameter:this.config.viaDiameter,viaHoleDiameter:this.config.viaHoleDiameter,clearance:this.config.clearance,compactBusTracks:this.config.compactBusTracks,allowBlindAndBuriedVias:!1,allowSameNetMerges:this.config.allowSameNetMerges,staticClearanceCache:this.routeStaticClearanceCache},Oe)}));for(let mn=0;mn<Oe;mn++){for(let{state:ln,alternatives:Cn}of Ot){let vn=Cn[mn];if(!vn)continue;if(Nt.push({plans:[...ln.plans,...vn],failedBusIds:[]}),Nt.length>=Xt)break}if(Nt.length>=Xt)break}if(Nt.length===0)return null;rt=Nt}return rt},je=(Oe)=>{if(z.length!==2)return null;let[qe,rt]=z;if(!qe||!rt)return null;let Ct=(nn,on,Kn)=>{let xo=e.busLayerAssignments[nn.busId];if(!xo)return null;return yW({srj:this.routingSrj,bus:nn,targetLayer:xo,acceptedPlans:on,layerNames:this.config.layerNames,traceWidth:this.config.traceWidth,viaDiameter:this.config.viaDiameter,viaHoleDiameter:this.config.viaHoleDiameter,clearance:this.config.clearance,compactBusTracks:this.config.compactBusTracks,allowBlindAndBuriedVias:!1,allowSameNetMerges:this.config.allowSameNetMerges,staticClearanceCache:this.routeStaticClearanceCache,rejectedViaMinimalCandidates:Kn,stopAfterFirstRejectedViaMinimalCandidate:Kn!==void 0},1)[0]??null},Mt=Ct(qe,[...Oe]);if(!Mt)return null;let Nt=[],Ot=Ct(rt,[...Oe,...Mt],Nt);if(Ot)return{plans:[...Oe,...Mt,...Ot],failedBusIds:[]};let mn=Nt[0];if(!mn)return null;let ln=mn.map((nn)=>({...nn,termination:{type:"plane",layer:nn.targetLayer}})),Cn=Ct(qe,[...Oe,...ln]);if(!Cn)return null;let vn=[...Oe,...Cn,...mn];if(!Kh({plans:vn,srj:this.routingSrj,sharedBoundary:qe.sharedBoundary,clearance:this.config.clearance,allowBlindAndBuriedVias:!1,allowSameNetMerges:this.config.allowSameNetMerges}))return null;return{plans:vn,failedBusIds:[]}},Re=new Map(Y.map((Oe)=>[Oe.busId,Oe])),Je=(Oe,qe,rt)=>{let Ct=e.busLayerAssignments[Oe.busId];if(!Ct)return null;return KL({srj:this.routingSrj,bus:Oe,targetLayer:Ct,acceptedPlans:qe,layerNames:this.config.layerNames,traceWidth:this.config.traceWidth,viaDiameter:this.config.viaDiameter,viaHoleDiameter:this.config.viaHoleDiameter,clearance:this.config.clearance,compactBusTracks:this.config.compactBusTracks,allowBlindAndBuriedVias:!1,allowSameNetMerges:this.config.allowSameNetMerges,staticClearanceCache:this.routeStaticClearanceCache,blockingBusCounts:rt})},Ve=(Oe,qe)=>{let rt={plans:[...Oe],failedBusIds:[]};for(let Ct of qe){let Mt=new Map,Nt=Je(Ct,rt.plans,Mt);if(!Nt){let Ot=[...Mt.entries()].filter(([ln])=>rt.plans.some((Cn)=>Cn.busId===ln)).filter(([ln])=>Re.has(ln)).toSorted(([,ln],[,Cn])=>Cn-ln).slice(0,8).map(([ln])=>ln),mn=[...Ot.map((ln)=>[ln]),...Ot.flatMap((ln,Cn)=>Ot.slice(Cn+1).map((vn)=>[ln,vn]))];for(let ln of mn){let Cn=new Set(ln),vn=rt.plans.filter((Kn)=>!Cn.has(Kn.busId)),nn=Je(Ct,vn);if(!nn)continue;vn.push(...nn);let on=!0;for(let Kn of ln){let xo=Re.get(Kn),ai=xo?Je(xo,vn):null;if(!ai){on=!1;break}vn.push(...ai)}if(!on)continue;rt.plans=vn,Nt=[];break}}if(Nt)rt.plans.push(...Nt);else rt.failedBusIds.push(Ct.busId)}return rt},Ye=null,mt=null,ft=(Oe,qe)=>{let rt=null;for(let Ct of Oe){let Mt=[...qe],Nt=new Set;for(let Ot=0;Ot<3;Ot++){let mn=Mt.map((vn)=>vn.busId).join("\x00");if(Nt.has(mn))break;Nt.add(mn);let ln=Ve(Ct.plans,Mt);if(!Ye||ln.plans.length>Ye.plans.length||ln.plans.length===Ye.plans.length&&ln.failedBusIds.length<Ye.failedBusIds.length)Ye=ln;if(!rt||ln.plans.length>rt.plans.length||ln.plans.length===rt.plans.length&&ln.failedBusIds.length<rt.failedBusIds.length)rt=ln;if(ln.failedBusIds.length===0)return ln;let Cn=new Set(ln.failedBusIds);Mt=[...ln.failedBusIds.flatMap((vn)=>{let nn=Re.get(vn);return nn?[nn]:[]}),...Mt.filter((vn)=>!Cn.has(vn.busId))]}}return mt=rt,null};for(let Oe of[1,4]){let qe=ut(Oe);if(!qe)continue;let rt=ft(qe,Y);if(rt)return rt;let Ct=Ye?.failedBusIds.slice(0,3);if(Oe===1&&Ct)for(let Mt of Ct){let Nt=[],Ot=new Set,mn=Mt;for(let vn=0;vn<3&&mn;vn++){let nn=Re.get(mn);if(!nn)break;let on=Je(nn,Nt);if(!on)break;Nt.push(...on),Ot.add(mn);let Kn=je(Nt);if(!Kn)break;let xo=ft([Kn],Y.filter((At)=>!Ot.has(At.busId)));if(xo)return xo;mn=mt?.failedBusIds?.find((At)=>!Ot.has(At))}if(Nt.length===0)continue;let ln=ut(1,Nt);if(!ln)continue;let Cn=ft(ln,Y.filter((vn)=>!Ot.has(vn.busId)));if(Cn)return Cn}}return Ye}*evaluateAssignmentWithStrategySteps(e,t,n){let o=[],i=[],r=new Map,s=this.config.escapeLayers.length===1,a=s&&this.config.singleLayerPushAndShove&&!this.preparedBuses.some((C)=>C.exitEdge&&C.preferredExit?.includes("-"));if(a){let C={srj:this.routingSrj,buses:this.preparedBuses,traceWidth:this.config.traceWidth,clearance:this.config.clearance,borderDistribution:this.config.borderDistribution},I=qli(C);if(!I&&this.config.singleLayerAdaptiveExits)this.setInProgressPlans({phase:"prepare-single-layer-adaptive-exits",plans:o,strategy:n}),yield,this.setInProgressPlans({phase:"route-single-layer-adaptive-exits",plans:o,strategy:n}),this.activeAdaptiveVisualization=null,I=yield{type:"subsolver",solver:this.createWorkSolver("SingleLayerAdaptiveExitSolver",yF({...C,availableBoundaryRegions:Nrn(this.options.availableCornersAndSides),onProgress:(P,E)=>{this.activeAdaptiveVisualization=P,this.stats={...this.stats,...E}}}),void 0,()=>this.visualizeAdaptiveRoutingState())};if(I)o.push(...I);else i.push(...this.preparedBuses.map((b)=>b.busId));this.setInProgressPlans({phase:"route-single-layer",plans:o,strategy:n,unitIndex:1,unitCount:1}),yield}let c=[...this.preparedBuses].sort((C,I)=>{let b=r3(C),P=r3(I),E=this.config.layerNames.indexOf(t[C.busId]??""),B=this.config.layerNames.indexOf(t[I.busId]??"");return i$t(C,I,this.config.allowBlindAndBuriedVias)||Number(P)-Number(b)||(b&&P?B-E:0)||(n==="group-by-layer"?(t[C.busId]??"").localeCompare(t[I.busId]??""):0)||I.componentObstacles.length-C.componentObstacles.length||(s?dW(I)-dW(C):I.connections.length-C.connections.length||(n==="deep-first"?dW(I)-dW(C):dW(C)-dW(I)))}),l=null;if(!a&&n==="default")l=yield{type:"subsolver",solver:this.createWorkSolver("PeripheralMixedTerminationSolver",this.routePeripheralMixedTerminationSteps({busLayerAssignments:t,busesInRoutingOrder:c}))};if(!l&&!a&&n==="default")l=yield{type:"subsolver",solver:this.createWorkSolver("DenseMixedTerminationSolver",this.routeDenseThroughAllMixedTerminationSteps({busLayerAssignments:t,busesInRoutingOrder:c}),()=>{let I=Number(this.stats.workUnit??0),b=Number(this.stats.workUnitCount??0);return b>0?I/b:0})};if(!l&&!a&&n==="default"&&_a.env.FANOUT_DEBUG_DENSE_ONLY==="1")l={plans:[],failedBusIds:this.preparedBuses.map((C)=>C.busId)};if(l)o=l.plans,i=l.failedBusIds,this.setInProgressPlans({phase:"route-dense-mixed-terminations",plans:o,strategy:n,unitIndex:this.preparedBuses.length,unitCount:this.preparedBuses.length}),yield;let d=`${n}|`,u=0;for(let C of a||l?[]:c){u++;let I=t[C.busId];if(!I)throw Error(`FanoutSolver: assignment ${e} has no layer for bus "${C.busId}"`);d+=`${C.busId.length}:${C.busId};${I.length}:${I};`;let b=this.routingPrefixCache.get(d);if(b){o=[...b.plans],i=[...b.failedBusIds],r=new Map(b.blockingBusCounts),this.setInProgressPlans({phase:"route-assignment",plans:o,strategy:n,unitIndex:u,unitCount:c.length,busId:C.busId}),yield;continue}let P=new Map,E=KL({srj:this.routingSrj,bus:C,targetLayer:I,acceptedPlans:o,layerNames:this.config.layerNames,traceWidth:this.config.traceWidth,viaDiameter:this.config.viaDiameter,viaHoleDiameter:this.config.viaHoleDiameter,clearance:this.config.clearance,compactBusTracks:this.config.compactBusTracks,allowBlindAndBuriedVias:this.config.allowBlindAndBuriedVias,allowSameNetMerges:this.config.allowSameNetMerges,staticClearanceCache:this.routeStaticClearanceCache,blockingBusCounts:P});if(!E){i.push(C.busId);for(let[B,w]of P)r.set(B,(r.get(B)??0)+w)}else o.push(...E);this.routingPrefixCache.set(d,{plans:[...o],failedBusIds:[...i],blockingBusCounts:new Map(r)}),this.setInProgressPlans({phase:"route-assignment",plans:o,strategy:n,unitIndex:u,unitCount:c.length,busId:C.busId}),yield}let h,A=l?.stopAfterCompleteValidation===!0&&o.length===this.inputSrj.connections.length;if(!A&&o.length===this.inputSrj.connections.length){let C=this.matchCompletePlanLengths(o);if(C.plans)o=C.plans;else{let I=C.failedBus,b={code:"bus-length-skew",message:`Bus ${I.busId} could not satisfy its ${I.maxLengthSkew.toFixed(6)}mm routed-length skew within the fanout boundary`,busId:I.busId};h=[b],this.lengthMatchingFailure??=b,o=[],i=[I.busId,...this.preparedBuses.map((P)=>P.busId).filter((P)=>P!==I.busId)],r.clear()}}if(!A&&o.length===this.inputSrj.connections.length){let C=this.normalizeCompletePlanCorners(o);if(C)o=C;else h=[{code:"fanout-normalization",message:"Completed fanout could not normalize every corner while preserving its original clearance and length constraints"}],o=[],i=this.preparedBuses.map((I)=>I.busId),r.clear()}let m=QL({inputSrj:this.inputSrj,plans:o,layerNames:this.config.layerNames}),p=o.length===this.inputSrj.connections.length?this.validateCompletePlans(o,m):null;if(p&&!p.valid)h=p.issues,o=[],i=this.preparedBuses.map((C)=>C.busId),r.clear(),m=QL({inputSrj:this.inputSrj,plans:o,layerNames:this.config.layerNames});let g=this.preparedBuses.length-i.length,_=o.reduce((C,I)=>C+I.length,0),y=(this.inputSrj.connections.length-o.length)*1e6+i.length*1e5+_+Wye(o)*0.1+Vye(t,this.preparedBuses,this.config.balanceLayerLoadByConnectionCount)*Uye(this.config),x={assignmentIndex:e,busLayerAssignments:t,routedBusCount:g,routedConnectionCount:o.length,failedBusIds:i,score:y,...h?{validationIssues:h}:{}};return this.setInProgressPlans({phase:"finalize-assignment-strategy",plans:o,strategy:n}),{summary:x,plans:o,...l?.stopAfterCompleteValidation&&p?.valid?{stopAfterCompleteValidation:!0}:{},blockingBusIds:[...r.entries()].toSorted(([,C],[,I])=>I-C).map(([C])=>C),outputSrj:m}}*evaluateAssignmentSteps(e,t){let n=yield*this.evaluateAssignmentWithStrategySteps(e,t,"default");if(_a.env.FANOUT_DEBUG_DENSE_ONLY==="1")return n;if(n.summary.routedConnectionCount===this.inputSrj.connections.length&&(n.stopAfterCompleteValidation||this.getCoordinatedAdditionalViaCount(n.plans)===0))return n;for(let o of["group-by-layer","deep-first"]){let i=yield*this.evaluateAssignmentWithStrategySteps(e,t,o);if(this.isAttemptBetter(i,n))n=i;if(n.summary.routedConnectionCount===this.inputSrj.connections.length&&(n.stopAfterCompleteValidation||this.getCoordinatedAdditionalViaCount(n.plans)===0))return n}return n}*evaluateGroupedBeamSteps(e,t=!1){if(this.config.escapeLayers.length<2)return null;if(this.preparedBuses.length>56)return null;let n=this.inputSrj.connections.length;if(n>64)return null;if(new Set(this.preparedBuses.map((x)=>x.componentId)).size!==1)return null;let o=(x)=>{let C=this.config.layerNames.indexOf(x.connections[0]?.sourceLayer??""),I=x.termination.type==="plane"?[x.termination.layer]:this.escapeLayersByBusId[x.busId]??this.config.escapeLayers;return Math.max(0,...I.map((b)=>Math.abs(this.config.layerNames.indexOf(b)-C)))},i=[...this.preparedBuses].sort((x,C)=>{let I=r3(x),b=r3(C),P=x.termination.type==="plane"?1:this.escapeLayersByBusId[x.busId]?.length??this.config.escapeLayers.length,E=C.termination.type==="plane"?1:this.escapeLayersByBusId[C.busId]?.length??this.config.escapeLayers.length;return i$t(x,C,this.config.allowBlindAndBuriedVias)||Number(b)-Number(I)||(I&&b?o(C)-o(x):0)||(t?x.direction.localeCompare(C.direction):0)||P-E||C.componentObstacles.length-x.componentObstacles.length||C.connections.length-x.connections.length||eVe(C)-eVe(x)||x.busId.localeCompare(C.busId)}),r=n<=24,s=this.preparedBuses.some((x)=>x.connections.length>1),a=r?48:n<=32?24:12,c=r&&!s?4:1,l=[{assignment:{},plans:[]}],d=(x)=>{let C=x.plans.reduce((P,E)=>P+E.length,0),I=Wye(x.plans),b=this.preparedBuses.reduce((P,E)=>{if(E.termination.type!=="boundary"||!ZYe(E))return P;let B=E.connections[0]?.sourceLayer,w=MW(E)??B;return x.assignment[E.busId]===w?P:P+E.connections.length},0);return C+I*0.1+b*1e4+Vye(x.assignment,this.preparedBuses,this.config.balanceLayerLoadByConnectionCount)*Uye(this.config)},u=0;for(let x of i){u++;let C=[];for(let b of l){let P=x.termination.type==="plane"?[x.termination.layer]:this.escapeLayersByBusId[x.busId]??this.config.escapeLayers,E=new Map;for(let[N,F]of Object.entries(b.assignment)){let H=this.preparedBuses.find((z)=>z.busId===N);E.set(F,(E.get(F)??0)+(this.config.balanceLayerLoadByConnectionCount?H?.connections.length??1:1))}let B=x.connections[0]?.sourceLayer,w=MW(x),T=ZYe(x),Q=P.toSorted((N,F)=>(E.get(N)??0)-(E.get(F)??0)||Number(F===w)-Number(N===w)||(T?Number(F===B)-Number(N===B):Number(N===B)-Number(F===B))||N.localeCompare(F));for(let N of Q){let F=yW({srj:this.routingSrj,bus:x,targetLayer:N,acceptedPlans:b.plans,layerNames:this.config.layerNames,traceWidth:this.config.traceWidth,viaDiameter:this.config.viaDiameter,viaHoleDiameter:this.config.viaHoleDiameter,clearance:this.config.clearance,compactBusTracks:this.config.compactBusTracks,allowBlindAndBuriedVias:this.config.allowBlindAndBuriedVias,allowSameNetMerges:this.config.allowSameNetMerges,staticClearanceCache:this.routeStaticClearanceCache},c);for(let H of F)C.push({assignment:{...b.assignment,[x.busId]:N},plans:[...b.plans,...H]})}}if(C.length===0)return null;C.sort((b,P)=>{let E=this.getCoordinatedAdditionalViaCount(b.plans)-this.getCoordinatedAdditionalViaCount(P.plans);if(E!==0)return E;let B=d(b)-d(P);if(Math.abs(B)>0.000000001)return B;return JSON.stringify(b.assignment).localeCompare(JSON.stringify(P.assignment))});let I=new Map;l=[];for(let b of C){let P=JSON.stringify(b.assignment),E=I.get(P)??0;if(E>=2)continue;if(I.set(P,E+1),l.push(b),l.length>=a)break}this.setInProgressPlans({phase:"route-grouped-beam",plans:l[0]?.plans??[],strategy:"grouped-beam",unitIndex:u,unitCount:i.length,busId:x.busId}),yield}let h,A,{POSITIVE_INFINITY:m,POSITIVE_INFINITY:p}=Number,g=(x)=>x.plans.reduce((C,I)=>C+I.length,0)+Wye(x.plans)*0.1+Vye(x.assignment,this.preparedBuses,this.config.balanceLayerLoadByConnectionCount)*Uye(this.config),_=this.preparedBuses.some((x)=>x.maxLengthSkew!==void 0);for(let x of l){if(x.plans.length!==this.inputSrj.connections.length){yield;continue}let C=this.matchCompletePlanLengths(x.plans);if(!C.plans){yield;continue}let I=this.normalizeCompletePlanCorners(C.plans);if(!I){yield;continue}let b=QL({inputSrj:this.inputSrj,plans:I,layerNames:this.config.layerNames});if(!this.validateCompletePlans(I,b).valid){yield;continue}let P={...x,plans:I},E=this.getCoordinatedAdditionalViaCount(I),B=g(P);if(!h||E<p||E===p&&B<m)h=P,A=b,m=B,p=E;if(!_)break;this.setInProgressPlans({phase:"validate-grouped-beam",plans:I,strategy:"grouped-beam"}),yield}if(!h||!A)return null;let f=m;if(!Number.isFinite(f))return null;return{summary:{assignmentIndex:e,busLayerAssignments:h.assignment,routedBusCount:this.preparedBuses.length,routedConnectionCount:h.plans.length,failedBusIds:[],score:f},plans:h.plans,blockingBusIds:[],outputSrj:A}}*evaluateGroupedBeamAlternativesSteps(e){let t=yield*this.evaluateGroupedBeamSteps(e);if(t)return t;return yield*this.evaluateGroupedBeamSteps(e,!0)}prioritizeFailedBusRepairs(e,t,n){let o=JSON.stringify(e),i=this.assignmentRepairDepthByKey.get(o)??0;if(i>=2)return;let r=8,s=[],a=new Set,c=(d)=>{let u=JSON.stringify(d);if(a.has(u)||this.evaluatedAssignmentKeys.has(u)||this.queuedAssignmentKeys.has(u))return;a.add(u),this.queuedAssignmentKeys.add(u),this.assignmentRepairDepthByKey.set(u,i+1),s.push(d)},l=[];for(let d=0;d<Math.max(t.length,n.length);d++){let u=t[d],h=n[d];if(u&&!l.includes(u))l.push(u);if(h&&!l.includes(h))l.push(h)}for(let d of t){let u=e[d],h=this.escapeLayersByBusId[d];if(!u||!h)continue;for(let A of n.slice(0,4)){let m=e[A],p=this.escapeLayersByBusId[A];if(!m||!p||!h.includes(m)||!p.includes(u))continue;if(c({...e,[d]:m,[A]:u}),s.length>=r)break}if(s.length>=r)break}for(let d of l){let u=e[d],h=this.escapeLayersByBusId[d];if(!u||!h)continue;let A=h.indexOf(u);for(let m=1;m<h.length;m++){let p=h[(Math.max(A,0)+m)%h.length];if(p===u)continue;if(c({...e,[d]:p}),s.length>=r)break}if(s.length>=r)break}this.pendingRepairAssignments.push(...s)}hasCompleteBestAttempt(){return this.bestAttempt?.summary.routedConnectionCount===this.inputSrj.connections.length}getCoordinatedAdditionalViaCount(e){let t=new Set(this.preparedBuses.filter(r3).map((n)=>n.busId));return e.reduce((n,o)=>n+(t.has(o.busId)?o.additionalVias?.length??0:0),0)}isAttemptBetter(e,t){if(e.summary.routedConnectionCount!==t.summary.routedConnectionCount)return e.summary.routedConnectionCount>t.summary.routedConnectionCount;if(e.summary.routedBusCount!==t.summary.routedBusCount)return e.summary.routedBusCount>t.summary.routedBusCount;let n=this.getCoordinatedAdditionalViaCount(e.plans),o=this.getCoordinatedAdditionalViaCount(t.plans);if(n!==o)return n<o;return e.summary.score<t.summary.score}hasGloballyViaMinimalBestAttempt(){if(!this.hasCompleteBestAttempt()||!this.bestAttempt)return!1;if(this.preparedBuses.length===0||!this.preparedBuses.every(r3))return!1;return this.bestAttempt.plans.every((e)=>e.via!==void 0&&(e.additionalVias?.length??0)===0)}shouldEvaluateGroupedBeam(){if(this.groupedBeamEvaluated||this.nextAssignmentIndex===0)return!1;return this.hasCompleteBestAttempt()||this.pendingRepairAssignments.length===0||this.nextAssignmentIndex>=this.config.maxLayerCombinations}commitGroupedBeamAttempt(e){if(!e){if(this.hasCompleteBestAttempt()&&this.bestAttempt&&this.getCoordinatedAdditionalViaCount(this.bestAttempt.plans)===0)this.completeBestAttemptEndpoints(),this.solved=!0;return}if(this.attempts.push(e.summary),!this.bestAttempt||this.isAttemptBetter(e,this.bestAttempt))this.bestAttempt=e;let t=this.bestAttempt.summary;if(this.stats={phase:"complete-grouped-beam",assignment:t.assignmentIndex<0?0:t.assignmentIndex+1,assignmentCount:this.config.maxLayerCombinations,routedBuses:`${t.routedBusCount}/${this.preparedBuses.length}`,routedConnections:`${t.routedConnectionCount}/${this.inputSrj.connections.length}`,failedBuses:"none",bestScore:t.score},this.getCoordinatedAdditionalViaCount(this.bestAttempt.plans)===0)this.completeBestAttemptEndpoints(),this.solved=!0}commitAssignmentAttempt(e,t){if(this.nextAssignmentIndex++,this.evaluatedAssignmentKeys.add(JSON.stringify(e)),!this.bestAttempt||t.summary.routedConnectionCount>=this.bestAttempt.summary.routedConnectionCount)this.prioritizeFailedBusRepairs(e,t.summary.failedBusIds,t.blockingBusIds);if(this.attempts.push(t.summary),!this.bestAttempt||this.isAttemptBetter(t,this.bestAttempt))this.bestAttempt=t;if(this.stats={phase:"complete-assignment",assignment:t.summary.assignmentIndex+1,assignmentCount:this.config.maxLayerCombinations,routedBuses:`${t.summary.routedBusCount}/${this.preparedBuses.length}`,routedConnections:`${t.summary.routedConnectionCount}/${this.inputSrj.connections.length}`,failedBuses:t.summary.failedBusIds.join(", ")||"none",bestScore:this.bestAttempt.summary.score},t.stopAfterCompleteValidation&&this.hasCompleteBestAttempt()||this.groupedBeamEvaluated&&t.summary.routedConnectionCount===this.inputSrj.connections.length&&this.getCoordinatedAdditionalViaCount(this.bestAttempt.plans)===0)this.completeBestAttemptEndpoints(),this.solved=!0}getNextAssignment(){let e;while(!e&&this.nextAssignmentIndex<this.config.maxLayerCombinations){let t=this.nextAssignmentIndex%3===0,n,o=!1;if(!this.groupedBeamEvaluated&&this.nextAssignmentIndex>0)n=this.pendingRepairAssignments.pop(),o=n!==void 0;else if(t)n=this.layerAssignments[this.nextGeneratedAssignmentIndex++];else n=this.pendingRepairAssignments.pop(),o=n!==void 0;if(!n&&(this.groupedBeamEvaluated||this.nextAssignmentIndex===0))n=t?this.pendingRepairAssignments.pop():this.layerAssignments[this.nextGeneratedAssignmentIndex++],o=t&&n!==void 0;if(!n)break;let i=JSON.stringify(n);if(o)this.queuedAssignmentKeys.delete(i);if(this.evaluatedAssignmentKeys.has(i))continue;e=n}return e}finishWithoutAnotherAssignment(){if(this.hasCompleteBestAttempt()){this.completeBestAttemptEndpoints(),this.solved=!0;return}this.failed=!0;let e=this.lengthMatchingFailure?.message??this.bestAttempt?.summary.validationIssues?.[0]?.message;this.error=e?`FanoutSolver: ${e}`:this.bestAttempt?`FanoutSolver: best layer assignment routed ${this.bestAttempt.summary.routedConnectionCount}/${this.inputSrj.connections.length} connections`:"FanoutSolver: no layer assignment could be evaluated"}_step(){if(this.activeOperation){this.stepActiveOperation();return}if(!this.layerReservedRoutingEvaluated){this.layerReservedRoutingEvaluated=!0;let t=lci(this.preparedBuses,this.config.allowBlindAndBuriedVias),n=!t&&aWe({...this.config,srj:this.routingSrj,buses:this.preparedBuses})!==null;if(n||t||this.shouldTryLayerReservedRouting()){this.startOperation({name:"FanoutLayerReservedSolver",generator:this.evaluateLayerReservedRoutingSteps(t,n),onSolved:(o)=>{if(!o){this.inProgressPlans=[],this.stats={phase:"layer-reserved-fallback"};return}let i=o.summary.busLayerAssignments;this.layerAssignments.push(i),this.routingInitialized=!0,this.commitAssignmentAttempt(i,o)},getProgress:()=>Number(this.stats.workUnit??0)/Math.max(1,this.inputSrj.connections.length)}),this.stats={phase:"prepare-layer-reserved-routing"};return}}if(!this.routingInitialized){this.startOperation({name:"FanoutCandidateLayerSolver",generator:this.initializeRoutingSteps(),onSolved:()=>{},getProgress:()=>this.nextCandidateLayerBusIndex/Math.max(1,this.boundaryBuses.length+1)});return}if(this.nextAssignmentIndex>0&&this.hasGloballyViaMinimalBestAttempt()){this.completeBestAttemptEndpoints(),this.solved=!0;return}if(this.shouldEvaluateGroupedBeam()){this.groupedBeamEvaluated=!0,this.startOperation({name:"FanoutGroupedBeamSolver",generator:this.evaluateGroupedBeamAlternativesSteps(-1),onSolved:(t)=>this.commitGroupedBeamAttempt(t),getProgress:()=>{let t=Number(this.stats.workUnit??0),n=Number(this.stats.workUnitCount??0);return n>0?t/n:0}}),this.stats={...this.stats,phase:"prepare-grouped-beam"};return}let e=this.getNextAssignment();if(!e&&!this.groupedBeamEvaluated)return;if(!e){this.finishWithoutAnotherAssignment();return}this.startOperation({name:"FanoutAssignmentSolver",generator:this.evaluateAssignmentSteps(this.nextAssignmentIndex,e),onSolved:(t)=>this.commitAssignmentAttempt(e,t),getProgress:()=>{let t=this.stats.routingStrategy==="group-by-layer"?1:this.stats.routingStrategy==="deep-first"?2:0,n=Number(this.stats.workUnit??0),o=Number(this.stats.workUnitCount??0),i=o>0?Math.min(1,n/o):0;return(t+i)/3}}),this.stats={...this.stats,phase:"prepare-assignment",assignment:this.nextAssignmentIndex+1,assignmentCount:this.config.maxLayerCombinations,routedConnections:`0/${this.inputSrj.connections.length}`}}computeProgress(){if(this.solved||this.failed)return 1;if(this.activeSubSolver?.getSolverName()==="FanoutLayerReservedSolver")return Math.min(0.99,Number(this.stats.workUnit??0)/Math.max(1,this.inputSrj.connections.length));if(!this.routingInitialized)return 0.05*(this.nextCandidateLayerBusIndex/Math.max(1,this.boundaryBuses.length+1));let e=0;if(this.activeSubSolver?.getSolverName()==="FanoutAssignmentSolver"){let t=this.stats.routingStrategy==="group-by-layer"?1:this.stats.routingStrategy==="deep-first"?2:0,n=Number(this.stats.workUnit??0),o=Number(this.stats.workUnitCount??0),i=o>0?Math.min(1,n/o):0;e=(t+i)/3}return Math.min(0.99,0.05+0.95*((this.nextAssignmentIndex+e)/this.config.maxLayerCombinations))}getConstructorParams(){return[this.inputSrj,this.options]}getOutput(){if(!this.solved||!this.bestAttempt)throw Error("FanoutSolver: getOutput() called before a complete fanout was solved");let e=this.validateCompletePlans(this.bestAttempt.plans,this.bestAttempt.outputSrj);if(!e.valid)throw Error(`FanoutSolver: completed output failed validation: ${e.issues[0]?.message??"unknown validation error"}`);let t=Cci({srj:this.endpointCompletion?.simpleRouteJson??this.bestAttempt.outputSrj,layerNames:this.config.layerNames,allowBlindAndBuriedVias:this.config.allowBlindAndBuriedVias}),n=new Map((t.traces??[]).map((o)=>[o.pcb_trace_id,o]));return{simpleRouteJson:t,fanoutTraces:this.bestAttempt.plans.flatMap((o)=>[n.get(o.trace.pcb_trace_id)??o.trace,...o.planeEndpointTrace?[n.get(o.planeEndpointTrace.pcb_trace_id)??o.planeEndpointTrace]:[]]),completionTraces:(this.endpointCompletion?.traces??[]).map((o)=>n.get(o.pcb_trace_id)??o),...this.endpointCompletion?{endpointCompletion:this.endpointCompletion.report}:{},planeTerminations:this.bestAttempt.plans.flatMap((o)=>o.termination.type==="plane"&&o.via?[{busId:o.busId,connectionName:o.connectionName,layer:o.termination.layer,via:o.via}]:[]),busLayerAssignments:this.bestAttempt.summary.busLayerAssignments,busDirections:Object.fromEntries(this.preparedBuses.map((o)=>[o.busId,o.direction])),attempts:[...this.attempts],validation:e}}getOutputSimpleRouteJson(){return this.getOutput().simpleRouteJson}visualize(){return this.activeSubSolver?.visualize()??this.visualizeCurrentState()}};var Tdi=(e)=>{if(typeof e!=="object"){let t=ze.parse(e);return{top:t,right:t,bottom:t,left:t}}return{top:e.top===void 0?0:ze.parse(e.top),right:e.right===void 0?0:ze.parse(e.right),bottom:e.bottom===void 0?0:ze.parse(e.bottom),left:e.left===void 0?0:ze.parse(e.left)}},Ddi=(e)=>{let t=(e.ccwRotationDegrees??0)*Math.PI/180,n=Math.abs(Math.cos(t)),o=Math.abs(Math.sin(t));return{x:(n*e.width+o*e.height)/2,y:(o*e.width+n*e.height)/2}},Ndi=({preparedBuses:e,padding:t})=>{if(t===void 0)return;let n=new Map;for(let a of e){if(n.has(a.componentId))continue;n.set(a.componentId,a.componentObstacles.filter((c)=>c.connectedTo.length>0))}let o=[...n.values()].flat();if(o.length===0)throw Error("Cannot apply fanout boundary padding without source pad obstacles");let i=o.map((a)=>{let c=Ddi(a);return{minX:a.center.x-c.x,maxX:a.center.x+c.x,minY:a.center.y-c.y,maxY:a.center.y+c.y}}),r=Tdi(t),s={minX:Math.min(...i.map((a)=>a.minX))-r.left,maxX:Math.max(...i.map((a)=>a.maxX))+r.right,minY:Math.min(...i.map((a)=>a.minY))-r.bottom,maxY:Math.max(...i.map((a)=>a.maxY))+r.top};for(let a of e){if(a.termination.type!=="boundary")continue;for(let c of a.connections)if(a.direction==="left"||a.direction==="right")s.minY=Math.min(s.minY,c.targetPoint.y),s.maxY=Math.max(s.maxY,c.targetPoint.y);else s.minX=Math.min(s.minX,c.targetPoint.x),s.maxX=Math.max(s.maxX,c.targetPoint.x)}return s},Rdi=(e)=>Math.round(e*1000)/1000,Qdi=(e,t)=>{let n;for(let o of e.obstacles){if(!o.componentId||!t.has(o.componentId))continue;let i=o.center.x-o.width/2,r=o.center.x+o.width/2,s=o.center.y-o.height/2,a=o.center.y+o.height/2;n=n?{minX:Math.min(n.minX,i),maxX:Math.max(n.maxX,r),minY:Math.min(n.minY,s),maxY:Math.max(n.maxY,a)}:{minX:i,maxX:r,minY:s,maxY:a}}return n},kdi=(e,t)=>Math.min(e.minX-t.minX,t.maxX-e.maxX,e.minY-t.minY,t.maxY-e.maxY),Ldi=({input:e,solverError:t,componentIds:n,sharedBoundary:o,componentNamesById:i})=>{let r=t?.match(/routed (\d+)\/(\d+) connections/),s=r?Number(r[1]):void 0,a=r?Number(r[2]):e.connections.length,c=[...n].map((h)=>i?.get(h)??h).sort(),l=c.length>0?` for ${c.join(", ")}`:"",d=[s===void 0?`Fanout failed${l}: ${t??"the fanout solver did not report a reason"}.`:`Fanout failed${l}: only ${s} of ${a} connections could escape to the breakout boundary.`],u=Qdi(e,n);if(u&&o){let h=kdi(u,o);d.push(`The breakout boundary is ${Rdi(h)}mm from the pads at its narrowest point, which all ${a} escapes have to share.`)}return d.push("Give the fanout more room by increasing the breakout's padding, or by extending the breakout to include the parts crowding it (decoupling capacitors, series resistors) so their pads sit inside the boundary instead of against it."),d.join(" ")},Fdi=(e,t)=>Math.abs(e.minX-t.minX)>0.000001||Math.abs(e.maxX-t.maxX)>0.000001||Math.abs(e.minY-t.minY)>0.000001||Math.abs(e.maxY-t.maxY)>0.000001,Hdi=(e,t)=>{if(!e&&t.length===0)return;return{minX:Math.min(e?.minX??Number.POSITIVE_INFINITY,...t.map((n)=>n.x)),maxX:Math.max(e?.maxX??Number.NEGATIVE_INFINITY,...t.map((n)=>n.x)),minY:Math.min(e?.minY??Number.POSITIVE_INFINITY,...t.map((n)=>n.y)),maxY:Math.max(e?.maxY??Number.NEGATIVE_INFINITY,...t.map((n)=>n.y))}},Odi=(e,t)=>e?.map((n)=>{let{preferredLayer:o,preferredLayers:i,...r}=n,s=t?.[n.busId],a=s===void 0?void 0:lWe(s),c=a&&a!=="center"&&dWe(a)?a:void 0,l={...r,...n.termination?.type==="plane"?{}:c?{exitPosition:c}:{}},d=[...o===void 0?[]:[o],...i??[]].filter((A,m,p)=>p.indexOf(A)===m);if(d.length===0)return l;let u=n.allowedLayers,h=u===void 0?d:d.filter((A)=>u.includes(A));return{...l,allowedLayers:h}}),lWe=(e)=>typeof e==="string"?e:e.direction,zdi=new Set(S8e),dWe=(e)=>zdi.has(e),Gdi=(e)=>{switch(e){case"top_left":return"top-left";case"top_center":return"top";case"top_right":return"top-right";case"center_left":return"left";case"center":return;case"center_right":return"right";case"bottom_left":return"bottom-left";case"bottom_center":return"bottom";case"bottom_right":return"bottom-right"}},Ydi=(e)=>{switch(e){case"top_left":case"top_center":case"top_right":return"up";case"center_left":return"left";case"center":return;case"center_right":return"right";case"bottom_left":case"bottom_center":case"bottom_right":return"down"}},Vdi=(e)=>{let t=lWe(e);return dWe(t)?lrn(t).direction:Ydi(t)},Udi=(e,t)=>e.obstacles.find((o)=>o.componentId&&o.layers.includes(t.layer)&&(t.pointId&&o.connectedTo.includes(t.pointId)||t.x>=o.center.x-o.width/2&&t.x<=o.center.x+o.width/2&&t.y>=o.center.y-o.height/2&&t.y<=o.center.y+o.height/2))?.componentId,Wdi=(e,t)=>{let n=new Set(t.connectionNames),o=new Map;for(let f of e.connections){if(!n.has(f.name))continue;for(let y of f.pointsToConnect){let x=Udi(e,y);if(!x)continue;let C=o.get(x)??[];C.push(y),o.set(x,C)}}let i=[...o.entries()].sort(([f,y],[x,C])=>C.length-y.length||f.localeCompare(x))[0];if(!i)return;let[r,s]=i,a=e.obstacles.filter((f)=>f.componentId===r);if(a.length===0)return;let c=a.map((f)=>f.center.x),l=a.map((f)=>f.center.y),d=Math.min(...c),u=Math.max(...c),h=Math.min(...l),A=Math.max(...l),m={x:(d+u)/2,y:(h+A)/2},p={x:Math.max((u-d)/2,0.000001),y:Math.max((A-h)/2,0.000001)},g={x:s.reduce((f,y)=>f+y.x,0)/s.length,y:s.reduce((f,y)=>f+y.y,0)/s.length},_={x:(g.x-m.x)/p.x,y:(g.y-m.y)/p.y};if(Math.abs(_.x)>Math.abs(_.y))return _.x>=0?"right":"left";if(Math.abs(_.y)>0.000000001)return _.y>=0?"up":"down";return"right"},Xdi=({fanoutSimpleRouteJson:e,sourceComponentIds:t})=>{let n=new Map;for(let i of e.obstacles){if(!i.componentId||!t.has(i.componentId))continue;let r=n.get(i.componentId)??[];r.push(i),n.set(i.componentId,r)}let o=[];for(let[i,r]of n){let s=Math.min(...r.map((d)=>d.center.x-d.width/2)),a=Math.max(...r.map((d)=>d.center.x+d.width/2)),c=Math.min(...r.map((d)=>d.center.y-d.height/2)),l=Math.max(...r.map((d)=>d.center.y+d.height/2));o.push({obstacleId:`fanout-source-keepout:${i}`,componentId:i,isFanoutSourceKeepout:!0,type:"rect",layers:MF(e.layerCount),center:{x:(s+a)/2,y:(c+l)/2},width:a-s,height:l-c,connectedTo:[]})}return{...e,obstacles:[...e.obstacles.filter((i)=>!i.componentId||!t.has(i.componentId)),...o]}},nVe=class e{constructor(t,n){this.input=t,this.options=n}input;options;isRouting=!1;outputSimpleRouteJson;startTimeoutId;eventHandlers={complete:[],error:[],progress:[]};getLegacyBusExitPreferences(){if(!this.options.busFanoutDirections)return;let t=new Set(this.input.buses?.map((i)=>i.busId)??[]),n=new Set(this.input.buses?.filter((i)=>i.termination?.type==="plane").map((i)=>i.busId)??[]),o={};for(let[i,r]of Object.entries(this.options.busFanoutDirections)){if(!t.has(i))throw Error(`Fanout direction references unknown bus "${i}" in this autorouting phase`);if(n.has(i))continue;let s=lWe(r);if(dWe(s))continue;let a=Gdi(s);if(a)o[i]=a}return Object.keys(o).length>0?o:void 0}getPlaneBusDirections(){let t=this.input.buses?.filter((i)=>i.termination?.type==="plane")??[],n=new Set(t.map((i)=>i.busId)),o={};for(let[i,r]of Object.entries(this.options.busFanoutDirections??{})){if(!n.has(i))continue;let s=Vdi(r);if(s)o[i]=s}for(let i of t){if(o[i.busId])continue;let r=Wdi(this.input,i);if(r)o[i.busId]=r}return Object.keys(o).length>0?o:void 0}getFanoutSolverOptions(){let t={buses:Odi(this.input.buses,this.options.busFanoutDirections),borderDistribution:"even",compactBusTracks:!0,busDirections:this.getPlaneBusDirections(),busExitPreferences:this.getLegacyBusExitPreferences(),escapeLayers:this.options.fanoutRoutingLayers,allowBlindAndBuriedVias:this.options.allowBlindAndBuriedVias??this.input.allowBlindAndBuriedVias};if(this.options.mode==="single_layer_fanout")return{...t,escapeLayers:["top"],singleLayerPushAndShove:!0};return t}static resolveFanoutBounds(t,n){let o,i;if(n.fanoutBoundaryPadding!==void 0){let r=new e(t,n),s=new J2e(t,r.getFanoutSolverOptions());o=Ndi({preparedBuses:s.preparedBuses,padding:n.fanoutBoundaryPadding})}else if(n.fanoutBounds===void 0){let r=new e(t,n);i=new J2e(t,r.getFanoutSolverOptions()).preparedBuses[0]?.sharedBoundary}if(n.fanoutBounds&&o&&Fdi(n.fanoutBounds,o))n.onFanoutBoundsConflict?.();return Hdi(n.fanoutBounds??o??i,n.breakoutPoints??[])}solveFanout(){let t=this.getFanoutSolverOptions(),n=new J2e(this.input,{...t,...this.options.fanoutBounds?{sharedBoundary:this.options.fanoutBounds}:{}}),o=n.getConstructorParams();if(this.options.onSolverStarted?.({solverName:"FanoutSolver",solverParams:o[0],solverConstructorArgs:o}),n.solve(),n.failed)throw Error(Ldi({input:this.input,solverError:n.error,componentIds:new Set(n.preparedBuses.map((a)=>a.componentId)),sharedBoundary:this.options.fanoutBounds??t.sharedBoundary,componentNamesById:this.options.componentNamesById}));let i=n.getOutput(),{simpleRouteJson:r,fanoutTraces:s}=i;return{downstreamSimpleRouteJson:Xdi({fanoutSimpleRouteJson:r,sourceComponentIds:new Set(n.preparedBuses.map((a)=>a.componentId))}),fanoutTraces:s,debugGraphics:n.visualize()}}startFanout(){try{let{downstreamSimpleRouteJson:t,fanoutTraces:n,debugGraphics:o}=this.solveFanout();if(!this.isRouting)return;this.outputSimpleRouteJson=t,this.emitEvent({type:"progress",steps:1,progress:1,phase:this.options.mode,debugGraphics:o}),this.isRouting=!1,this.emitEvent({type:"complete",traces:n})}catch(t){this.isRouting=!1,this.emitEvent({type:"error",error:t instanceof Error?t:Error(String(t))})}}start(){if(this.isRouting)return;this.isRouting=!0,this.startTimeoutId=setTimeout(()=>{this.startTimeoutId=void 0,this.startFanout()},0)}stop(){if(this.startTimeoutId!==void 0)clearTimeout(this.startTimeoutId),this.startTimeoutId=void 0;this.isRouting=!1}on(t,n){if(t==="complete")this.eventHandlers.complete.push(n);else if(t==="error")this.eventHandlers.error.push(n);else this.eventHandlers.progress.push(n)}emitEvent(t){if(t.type==="complete")for(let n of this.eventHandlers.complete)n(t);else if(t.type==="error")for(let n of this.eventHandlers.error)n(t);else for(let n of this.eventHandlers.progress)n(t)}solveSync(){let{downstreamSimpleRouteJson:t,fanoutTraces:n}=this.solveFanout();return this.outputSimpleRouteJson=t,n}getOutputSimpleRouteJson(){return this.outputSimpleRouteJson}},Xye=0.000001;function Kdi(e,t){if(!e.subcircuit_connectivity_map_key||e.subcircuit_connectivity_map_key!==t.subcircuit_connectivity_map_key||e.subcircuit_id!==t.subcircuit_id)return!1;let n=e.layers.toSorted(),o=t.layers.toSorted();return Math.abs(e.x-t.x)<=Xye&&Math.abs(e.y-t.y)<=Xye&&Math.abs(e.hole_diameter-t.hole_diameter)<=Xye&&Math.abs(e.outer_diameter-t.outer_diameter)<=Xye&&n.length===o.length&&n.every((i,r)=>i===o[r])}var jdi=({db:e,connectedOffboardObstacles:t,simpleRouteJson:n,subcircuit_id:o})=>{if(Object.keys(t).length===0)return;let i=new Map;for(let a of e.pcb_port.list())if(a.source_port_id){let c=e.pcb_smtpad.getWhere({pcb_port_id:a.pcb_port_id});if(c)i.set(c.pcb_smtpad_id,a.source_port_id);let l=e.pcb_plated_hole.getWhere({pcb_port_id:a.pcb_port_id});if(l)i.set(l.pcb_plated_hole_id,a.source_port_id)}let r=new Map;for(let a of n.obstacles)if(a.obstacleId)r.set(a.obstacleId,a);let s=new Map;for(let[a,c]of Object.entries(t)){if(!s.has(c))s.set(c,[]);s.get(c).push(a)}for(let[a,c]of s){let l=new Set;for(let A of c){let m=r.get(A);if(!m)continue;for(let p of m.connectedTo){let g=i.get(p);if(g)l.add(g)}}if(l.size<2)continue;let d=Array.from(l);if(e.source_trace.list().some((A)=>{let m=new Set(A.connected_source_port_ids);return d.every((p)=>m.has(p))}))continue;e.source_trace.insert({connected_source_port_ids:d,connected_source_net_ids:[],subcircuit_id:o??void 0,display_name:`offboard_${a}`})}},Urn=({traceWidth:e,traceToPadClearance:t,viaPadDiameter:n})=>(n??Math.max(e*2,0.3))+2*(e+t),qdi=(e)=>{let t=new Map;for(let n of e.pcb_component.list()){let o=e.source_component.get(n.source_component_id);if(o?.name)t.set(n.pcb_component_id,o.name)}return t},uGe=(e)=>e?.replace(/-/g,"_");function Wrn(e){if(!e)return null;if(typeof e==="string"){let n=uGe(e);return n==="sequential_trace"||n==="auto_cloud"?n:null}let t=uGe(e.preset);if(t==="sequential_trace"||t==="auto_cloud")return t;return uGe(e.groupMode)==="sequential_trace"?"sequential_trace":null}function Toe(e,t){let n={serverUrl:"https://registry-api.tscircuit.com",serverMode:"job",serverCacheEnabled:!0};if(typeof e==="object"&&!e.preset)return{local:!(e.serverUrl||e.serverMode||e.serverCacheEnabled),...n,...e};let o=typeof e==="object"?e.preset:e,i=typeof e==="object"?e:{},r=typeof o==="string"?o.replace(/_/g,"-"):o,s=r&&typeof r==="string"?t?.autorouterMap?.[r]:void 0;if(s)return{local:!0,groupMode:"subcircuit",algorithmFn:async(a)=>s.createAutorouter(a)};switch(r){case"default":case"auto":case"auto-local":return{local:!0,groupMode:"subcircuit"};case"sequential-trace":return{local:!0,groupMode:"sequential-trace"};case"subcircuit":return{local:!0,groupMode:"subcircuit"};case"beta-pipeline9":return{local:!0,groupMode:"subcircuit",autorouterVersion:"beta_pipeline9"};case"single-layer-fanout":return{local:!0,groupMode:"subcircuit",preset:"single_layer_fanout"};case"single-layer-routing":case"bus-lanes":return{...i,local:!0,groupMode:"subcircuit",preset:"bus_lanes"};case"dogbone":return{local:!0,groupMode:"subcircuit",preset:"dogbone"};case"fanout":return{...i,local:!0,groupMode:"subcircuit",preset:"fanout"};case"simplify":return{local:!0,groupMode:"subcircuit",preset:"simplify"};case"auto-cloud":{let{preset:a,local:c,groupMode:l,...d}=i;return{local:!1,groupMode:"subcircuit",...n,...d}}case"laser-prefab":{let{preset:a,local:c,groupMode:l,...d}=i;return{local:!0,groupMode:"subcircuit",preset:"laser_prefab",...d}}case"auto-jumper":{let{preset:a,local:c,groupMode:l,...d}=i;return{local:!0,groupMode:"subcircuit",preset:"auto_jumper",...d}}default:return{local:!0,groupMode:"subcircuit"}}}var oF=0.000000001;function Xrn(e){return e.shape==="circle"}function oVe(e,t){let n=-(t.ccwRotationDegrees??0)*Math.PI/180,o=e.x-t.center.x,i=e.y-t.center.y;return{x:o*Math.cos(n)-i*Math.sin(n),y:o*Math.sin(n)+i*Math.cos(n)}}function FT(e,t){return Math.hypot(e.x-t.x,e.y-t.y)}function pB(e,t,n){let o=n.x-t.x,i=n.y-t.y,r=o*o+i*i,s=r<oF?0:((e.x-t.x)*o+(e.y-t.y)*i)/r,a=Math.max(0,Math.min(1,s));return Math.hypot(e.x-(t.x+a*o),e.y-(t.y+a*i))}function Kye(e,t,n){return(t.x-e.x)*(n.y-e.y)-(t.y-e.y)*(n.x-e.x)}function Jdi(e,t,n,o){let i=Kye(n,o,e),r=Kye(n,o,t),s=Kye(e,t,n),a=Kye(e,t,o);return(i>0&&r<0||i<0&&r>0)&&(s>0&&a<0||s<0&&a>0)}function Krn(e,t,n,o){if(Jdi(e,t,n,o))return 0;return Math.min(pB(e,n,o),pB(t,n,o),pB(n,e,t),pB(o,e,t))}function $di(e,t){if(Xrn(t))return Math.max(0,FT(e,t.center)-t.width/2);let n=oVe(e,t),o=Math.max(Math.abs(n.x)-t.width/2,0),i=Math.max(Math.abs(n.y)-t.height/2,0);return Math.hypot(o,i)}function Zdi(e,t){if(Xrn(t))return Math.max(0,pB(t.center,e.start,e.end)-t.width/2);let n=oVe(e.start,t),o=oVe(e.end,t);if(Math.abs(n.x)<=t.width/2+oF&&Math.abs(n.y)<=t.height/2+oF)return 0;if(Math.abs(o.x)<=t.width/2+oF&&Math.abs(o.y)<=t.height/2+oF)return 0;let i=-t.width/2,r=t.width/2,s=-t.height/2,a=t.height/2,c=[{x:i,y:s},{x:r,y:s},{x:r,y:a},{x:i,y:a}],l=Number.POSITIVE_INFINITY;for(let d=0;d<c.length;d++)l=Math.min(l,Krn(n,o,c[d],c[(d+1)%c.length]));return l}function jrn(e,t,n){if(e.layer!==t.layer)return!0;let o=(e.width+t.width)/2+n,i=o+oF;if(Math.min(e.start.x,e.end.x)-Math.max(t.start.x,t.end.x)>i||Math.min(t.start.x,t.end.x)-Math.max(e.start.x,e.end.x)>i||Math.min(e.start.y,e.end.y)-Math.max(t.start.y,t.end.y)>i||Math.min(t.start.y,t.end.y)-Math.max(e.start.y,e.end.y)>i)return!0;return Krn(e.start,e.end,t.start,t.end)>=o-oF}var Ju=0.000000001,eui=1e5;function tui(e){for(let[n,o]of[["viaDiameter",e.viaDiameter],["traceWidth",e.traceWidth]])if(!Number.isFinite(o)||o<=0)throw Error(`FanoutSolver: dogbone ${n} must be a positive finite number, received ${o}`);if(!Number.isFinite(e.clearance)||e.clearance<0)throw Error(`FanoutSolver: dogbone clearance must be a non-negative finite number, received ${e.clearance}`);if(e.viaHoleDiameter!==void 0&&(!Number.isFinite(e.viaHoleDiameter)||e.viaHoleDiameter<=0))throw Error(`FanoutSolver: dogbone viaHoleDiameter must be a positive finite number, received ${e.viaHoleDiameter}`);if(e.holeToHoleClearance!==void 0&&(!Number.isFinite(e.holeToHoleClearance)||e.holeToHoleClearance<0))throw Error(`FanoutSolver: dogbone holeToHoleClearance must be a non-negative finite number, received ${e.holeToHoleClearance}`);if(e.holeToHoleClearance!==void 0&&e.viaHoleDiameter===void 0)throw Error("FanoutSolver: dogbone holeToHoleClearance requires viaHoleDiameter");let t=e.maximumSearchStates??eui;if(!Number.isInteger(t)||t<1)throw Error(`FanoutSolver: dogbone maximumSearchStates must be a positive integer, received ${t}`);return t}function iVe(e){let t=[];for(let n of e.toSorted((o,i)=>o-i)){if(!Number.isFinite(n))continue;if(t.length===0||Math.abs(t.at(-1)-n)>Ju)t.push(n)}return t}function nui(e){let t=new Map,n=new Map,o=new Map;for(let i of e){let r=t.get(i.componentId);if(!r)r={componentId:i.componentId,connections:[],obstacles:[],xCoordinates:[],yCoordinates:[],pitchX:Number.POSITIVE_INFINITY,pitchY:Number.POSITIVE_INFINITY},t.set(i.componentId,r),o.set(i.componentId,new Set);if(r.xCoordinates.push(...i.xCoordinates),r.yCoordinates.push(...i.yCoordinates),Number.isFinite(i.pitchX)&&i.pitchX>Ju)r.pitchX=Math.min(r.pitchX,i.pitchX);if(Number.isFinite(i.pitchY)&&i.pitchY>Ju)r.pitchY=Math.min(r.pitchY,i.pitchY);let s=o.get(i.componentId);for(let a of i.componentObstacles)if(!s.has(a))s.add(a),r.obstacles.push(a);for(let a of i.connections){let c=n.get(a.connectionIndex);if(c!==void 0){if(c!==i.componentId)throw Error(`FanoutSolver: connection index ${a.connectionIndex} belongs to multiple components`);continue}n.set(a.connectionIndex,i.componentId),r.connections.push({preparedConnection:a,busId:i.busId,direction:i.direction,terminationType:i.termination.type})}}return[...t.values()].map((i)=>({...i,connections:i.connections.toSorted((r,s)=>r.preparedConnection.connectionIndex-s.preparedConnection.connectionIndex),xCoordinates:iVe(i.xCoordinates),yCoordinates:iVe(i.yCoordinates)})).toSorted((i,r)=>i.componentId.localeCompare(r.componentId))}function oui(e){let{coordinates:t,pitch:n}=e;if(t.length===0||!Number.isFinite(n)||n<=Ju)return[];let o=[t[0]-n/2];for(let i=1;i<t.length;i++)o.push((t[i-1]+t[i])/2);return o.push(t.at(-1)+n/2),iVe(o)}function r$t(e){let{sourceCoordinate:t,coordinates:n,pitch:o}=e,i=oui({coordinates:n,pitch:o}),r=i.filter((a)=>a<t-Ju).at(-1),s=i.find((a)=>a>t+Ju);return[r,s].filter((a)=>a!==void 0)}function iui(e,t){let n=Math.abs(t.x-e.x),o=Math.abs(t.y-e.y);return n<=Ju||o<=Ju||Math.abs(n-o)<=Ju}function rui(e){let{source:t,site:n,direction:o}=e,i=o==="right"?n.x-t.x:o==="left"?t.x-n.x:o==="up"?n.y-t.y:t.y-n.y;return i>Ju?0:Math.abs(i)<=Ju?1:2}function sui(e){let{point:t,obstacles:n,viaDiameter:o,clearance:i}=e,r=o/2+i;return n.every((s)=>$di(t,s)>=r-Ju)}function aui(e){let{segment:t,sourceObstacle:n,obstacles:o,clearance:i}=e,r=t.width/2+i;return o.every((s)=>s===n||Zdi(t,s)>=r-Ju)}function cui(e){let{connection:t,component:n,rules:o}=e,{preparedConnection:i,direction:r}=t,s=o.additionalObstacles?[...new Set([...n.obstacles,...o.additionalObstacles])]:n.obstacles,a={x:i.sourcePoint.x,y:i.sourcePoint.y},c=r$t({sourceCoordinate:a.x,coordinates:n.xCoordinates,pitch:n.pitchX}),l=r$t({sourceCoordinate:a.y,coordinates:n.yCoordinates,pitch:n.pitchY}),d=[...c.map((b)=>({x:b,y:a.y})),...l.map((b)=>({x:a.x,y:b})),...c.flatMap((b)=>l.map((P)=>({x:b,y:P})))],u=[];for(let b of d)if(!u.some((P)=>FT(P,b)<=Ju))u.push(b);let h=o.fixedViaPointsByConnectionIndex?.get(i.connectionIndex),A=h?[h]:u,m=[];for(let b of A){if(t.terminationType==="plane"&&!iui(a,b))continue;if(!sui({point:b,obstacles:s,viaDiameter:o.viaDiameter,clearance:o.clearance}))continue;let P={start:a,end:b,width:o.traceWidth,layer:i.sourceLayer};if(!aui({segment:P,sourceObstacle:i.sourceObstacle,obstacles:s,clearance:o.clearance}))continue;if(!(o.blockingSegments??[]).every((w)=>{if(w.connectionIndex===i.connectionIndex)return!0;if(o.canShareCopper?.(i.connectionIndex,w.connectionIndex))return!0;let T=o.viaDiameter/2+w.segment.width/2+o.clearance;if(pB(b,w.segment.start,w.segment.end)<T-Ju)return!1;return w.segment.layer!==P.layer||jrn(P,w.segment,o.clearance)}))continue;if(!(o.blockingVias??[]).every((w)=>{if(w.connectionIndex===i.connectionIndex)return!0;if(FT(b,w.center)<(o.viaDiameter+w.diameter)/2+o.clearance-Ju)return!1;if(w.spanLayers.includes(P.layer)&&pB(w.center,P.start,P.end)<w.diameter/2+P.width/2+o.clearance-Ju)return!1;return!0}))continue;m.push({connectionIndex:i.connectionIndex,point:b,sourceSegment:P,outwardRank:rui({source:a,site:b,direction:r})})}let p=r==="left"||r==="right"?n.yCoordinates:n.xCoordinates,g=r==="left"||r==="right"?a.y:a.x,_=p.findIndex((b)=>Math.abs(b-g)<=Ju),f=_>=0?_%2===0?1:-1:void 0,y=t.terminationType==="boundary"?o.preferredBoundaryPerpendicularSideByBusId?.get(t.busId):o.preferPlaneCheckerboardSites&&t.terminationType==="plane"&&(r==="left"||r==="right")?f:void 0,x=t.terminationType==="boundary"?o.preferBoundaryOutwardByBusId?.get(t.busId)??!0:!0,C=o.preferredViaPointsByConnectionIndex?.get(i.connectionIndex),I=(b)=>{if(y===void 0)return 0;let P=r==="left"||r==="right"?b.point.y-a.y:b.point.x-a.x;return P*y>Ju?0:Math.abs(P)<=Ju?1:2};return m.toSorted((b,P)=>(C?Number(FT(b.point,C)>Ju)-Number(FT(P.point,C)>Ju):0)||(x?b.outwardRank-P.outwardRank:P.outwardRank-b.outwardRank)||I(b)-I(P)||FT(a,b.point)-FT(a,P.point)||b.point.x-P.point.x||b.point.y-P.point.y)}function lui(e){let{first:t,second:n,rules:o}=e,i=o.canShareCopper?.(t.connectionIndex,n.connectionIndex)??!1,r=o.viaHoleDiameter?o.viaHoleDiameter+(o.holeToHoleClearance??o.clearance):0,s=i?r:Math.max(o.viaDiameter+o.clearance,r);if(FT(t.point,n.point)<s-Ju)return!1;let a=o.viaDiameter/2+o.traceWidth/2+o.clearance;if(!i){if(pB(t.point,n.sourceSegment.start,n.sourceSegment.end)<a-Ju||pB(n.point,t.sourceSegment.start,t.sourceSegment.end)<a-Ju)return!1}if(i)return!0;return jrn(t.sourceSegment,n.sourceSegment,o.clearance)}function dui(e){let{component:t,rules:n,consumeSearchState:o}=e,i=t.connections.map((A)=>({connection:A,candidates:cui({connection:A,component:t,rules:n})}));if(i.some((A)=>A.candidates.length===0))return null;let r=new Map,s=(A,m)=>{let p=r.get(A)?.get(m);if(p!==void 0)return p;let g=lui({first:A,second:m,rules:n}),_=r.get(A)??new Map;_.set(m,g),r.set(A,_);let f=r.get(m)??new Map;return f.set(A,g),r.set(m,f),g},a=i.flatMap((A)=>A.candidates.length===1?[A.candidates[0]]:[]);for(let A=0;A<a.length;A++){let m=a[A];for(let p=0;p<A;p++)if(!s(m,a[p]))return null}let c=new Map(a.map((A)=>[A.connectionIndex,A])),l=new Set(i.flatMap((A)=>A.candidates.length>1?[A.connection.preparedConnection.connectionIndex]:[])),d=new Map(i.map((A)=>[A.connection.preparedConnection.connectionIndex,A]));if(l.size===0)return new Map([...c.entries()].map(([A,m])=>[A,{...m.point}]));let u=(A)=>A.candidates.filter((m)=>[...c.values()].every((p)=>s(m,p))),h=()=>{if(!o())return!1;if(l.size===0)return!0;let A,m=[];for(let g of[...l].toSorted((_,f)=>_-f)){let _=d.get(g),f=u(_);if(f.length===0)return!1;if(!A||f.length<m.length||f.length===m.length&&g<A.connection.preparedConnection.connectionIndex)A=_,m=f}let p=A.connection.preparedConnection.connectionIndex;l.delete(p);for(let g of m){if(c.set(p,g),h())return!0;c.delete(p)}return l.add(p),!1};if(!h())return null;return new Map([...c.entries()].toSorted(([A],[m])=>A-m).map(([A,m])=>[A,{...m.point}]))}function uui(e,t){let n=tui(t);if(e.length===0)return new Map;let o=0,i=()=>(o++,o<=n),r=new Map;for(let s of nui(e)){let a=dui({component:s,rules:t,consumeSearchState:i});if(!a)return null;for(let[c,l]of a)r.set(c,l)}return r}var _ns=Math.PI*2,gns=globalThis.process?.env?.FANOUT_FLOW_DEBUG==="1",hui=(e)=>e.process??{env:{}},fns=hui(globalThis);function mui(e){if(e<=1)return["top"];return["top",...Array.from({length:e-2},(t,n)=>`inner${n+1}`),"bottom"]}var qrn=class extends Zn{constructor(e){super();this.params=e,this.MAX_ITERATIONS=e.input.connections.length*2+10,this.steps=this.solveSteps()}params;phase="preparing";sources=[];sites=new Map;traces=[];steps;getConstructorParams(){return[this.params]}_step(){try{if(this.steps.next().done)this.phase="complete",this.progress=1,this.solved=!0}catch(e){this.error=e instanceof Error?e.message:String(e),this.failed=!0}}getOutput(){if(!this.solved)throw Error(this.error??"Dogbone fanout is not solved");return this.traces}visualize(){return{rects:this.params.input.obstacles.filter((e)=>e.shape!=="circle").map((e)=>({center:e.center,width:e.width,height:e.height,fill:"rgba(200,40,40,0.3)"})),circles:[...this.params.input.obstacles.filter((e)=>e.shape==="circle").map((e)=>({center:e.center,radius:e.width/2,fill:"rgba(200,40,40,0.3)"})),...[...this.sites.values()].map((e)=>({center:e,radius:(this.params.input.minViaPadDiameter??this.params.input.minViaDiameter??0.6)/2,fill:"orange"}))],lines:[...this.sites].map(([e,t])=>({points:[this.sources[e].port,t],strokeColor:"orange",strokeWidth:this.params.input.minTraceWidth}))}}*solveSteps(){let{input:e,fanoutRoutingLayers:t}=this.params,n=e.minTraceWidth,o=e.minTraceToPadEdgeClearance??0.1,i=e.minViaPadDiameter??e.minViaDiameter??0.6,r=e.minViaHoleDiameter??0.3,s=e.minViaEdgeToPadEdgeClearance??o,a=e.minBoardEdgeClearance??o,c=e.minViaHoleEdgeToViaHoleEdgeClearance??o;this.sources=e.connections.map((_)=>{let f=_.pointsToConnect.find((x)=>x.pcb_port_id&&e.obstacles.some((C)=>C.componentId&&Math.hypot(C.center.x-x.x,C.center.y-x.y)<0.000001));if(!f?.pcb_port_id)throw Error(`Dogbone connection ${_.name} has no source pad`);let y=e.obstacles.find((x)=>x.componentId&&Math.hypot(x.center.x-f.x,x.center.y-f.y)<0.000001);return{port:{pcb_port_id:f.pcb_port_id,pcb_component_id:y.componentId,x:f.x,y:f.y,layers:[bo.parse(f.layer)]},sourceTraceId:_.source_trace_id}});let l=this.sources,d=mui(e.layerCount),u=t??d;if(u.some((_)=>!d.some((f)=>f===_)))throw Error("Dogbone fanout targets an unavailable board layer");let h=[],A=l.map(({port:_,sourceTraceId:f},y)=>{let x=e.obstacles.find((E)=>E.componentId===_.pcb_component_id&&Math.hypot(E.center.x-_.x,E.center.y-_.y)<0.000001);if(!x)throw Error("Dogbone fanout requires a component pad at each source port");if(_.layers.length!==1||!d.includes(_.layers[0]))throw Error("Dogbone fanout requires a single-layer SMT source pad");let C=_.layers[0],I=u.find((E)=>E!==C);if(!I)throw Error("Dogbone fanout requires a legal layer distinct from the source pad");let b=h.find((E)=>E.componentId===x.componentId);if(!b){let E=e.obstacles.filter((Q)=>Q.componentId===x.componentId),B=[...new Set(E.map((Q)=>Math.round(Q.center.x*1e6)/1e6))].sort((Q,N)=>Q-N),w=[...new Set(E.map((Q)=>Math.round(Q.center.y*1e6)/1e6))].sort((Q,N)=>Q-N);if(B.length<2||w.length<2)throw Error("Dogbone fanout requires a two-dimensional pad grid");let T=(Q)=>Math.min(...Q.slice(1).map((N,F)=>N-Q[F]));b={busId:x.componentId,componentId:x.componentId,componentObstacles:E,connections:[],direction:"down",termination:{type:"boundary"},componentBounds:{minX:B[0],maxX:B.at(-1),minY:w[0],maxY:w.at(-1)},sharedBoundary:e.bounds,xCoordinates:B,yCoordinates:w,pitchX:T(B),pitchY:T(w)},h.push(b)}let P={x:_.x,y:_.y,layer:C,pcb_port_id:_.pcb_port_id};return b.connections.push({connectionIndex:y,connection:{name:_.pcb_port_id,pointsToConnect:[P]},sourcePoint:P,sourcePointIndex:0,sourceLayer:C,sourceObstacle:x,targetPoint:P}),{sourceTraceId:f,port:_,sourceLayer:C,targetLayer:I}}),m=this.sites,p=[],g=[];for(let _ of h){this.phase="assigning_sites",yield;let f=uui([_],{traceWidth:n,clearance:Math.max(o,s),viaDiameter:i,viaHoleDiameter:r,holeToHoleClearance:c,additionalObstacles:e.obstacles,blockingSegments:p,blockingVias:g});if(!f||f.size!==_.connections.length)throw Error("No complete local dogbone assignment within clearance/search limits");for(let y of _.connections){let x=y.connectionIndex,C=f.get(x);m.set(x,C),p.push({connectionIndex:x,segment:{start:y.sourcePoint,end:C,width:n,layer:y.sourceLayer}}),g.push({connectionIndex:x,center:C,diameter:i,spanLayers:d})}}this.phase="creating_traces";for(let[_,{sourceTraceId:f,port:y,sourceLayer:x,targetLayer:C}]of A.entries()){let I=m.get(_),b=Math.abs(I.x-y.x),P=Math.abs(I.y-y.y);if(b>0.000001&&P>0.000001&&Math.abs(b-P)>0.000001)throw Error("Dogbone fanout requires straight or 45-degree local escapes");let E=i/2+a;if(I.x<e.bounds.minX+E||I.x>e.bounds.maxX-E||I.y<e.bounds.minY+E||I.y>e.bounds.maxY-E)throw Error("Dogbone via violates board-edge clearance");this.traces.push({type:"pcb_trace",pcb_trace_id:`dogbone_${y.pcb_port_id}`,source_trace_id:f,connectsTo:[y.pcb_port_id],route:[{route_type:"wire",x:y.x,y:y.y,layer:x,width:n},{route_type:"wire",...I,layer:x,width:n},{route_type:"via",...I,from_layer:x,to_layer:C,via_diameter:i,via_hole_diameter:r,layers:d},{route_type:"wire",...I,layer:C,width:n},{route_type:"wire",...I,layer:C,width:n}]}),this.progress=(_+1)/A.length,yield}}},pui=class{constructor(e,t={}){this.params=e,this.callbacks=t,this.solver=new qrn(e)}params;callbacks;get input(){return this.params.input}isRouting=!1;solver;timer;listeners=[];finishSolver(){this.callbacks.onSolverEnded?.({solverName:"DogboneFanoutSolver",solved:this.solver.solved,failed:this.solver.failed,iterations:this.solver.iterations,error:this.solver.error})}getTraces(){return this.solver.getOutput().map((e)=>{let t=this.params.input.connections.find((n)=>n.pointsToConnect.some((o)=>o.pcb_port_id&&e.connectsTo?.includes(o.pcb_port_id)));if(!t)throw Error("Dogbone fanout lost its source connection");return{...e,connection_name:t.name,source_trace_id:t.source_trace_id,connectsTo:[...new Set([...e.connectsTo??[],...t.routingPcbGroupId?t.pointsToConnect.flatMap((n)=>!n.pcb_port_id&&n.pointId?[n.pointId]:[]):[`${e.pcb_trace_id}_exit`]])]}})}getOutputSimpleRouteJson(){let e=this.getTraces();return{...this.params.input,traces:e,connections:this.params.input.connections.map((t)=>{let n=e.find((i)=>i.connection_name===t.name);if(!n)return t;let o=n.route.at(-1);if(o.route_type!=="wire")throw Error("Dogbone fanout lost its exit");return{...t,pointsToConnect:t.pointsToConnect.map((i)=>{let r=!i.pcb_port_id;if(!(t.routingPcbGroupId?r:Boolean(i.pcb_port_id&&n.connectsTo?.includes(i.pcb_port_id))))return i;if(t.routingPcbGroupId)return{...i,x:o.x,y:o.y,layer:o.layer};let{pcb_port_id:a,...c}=i;return{...c,pointId:`${n.pcb_trace_id}_exit`,x:o.x,y:o.y,layer:o.layer}})}})}}on(e,t){this.listeners.push({event:e,callback:t})}emit(e){for(let t of this.listeners)if(t.event===e.type)t.callback(e)}start(){if(this.isRouting)return;this.isRouting=!0,this.callbacks.onSolverStarted?.({solverName:"DogboneFanoutSolver",solverParams:this.params,solverConstructorArgs:this.solver.getConstructorParams()});let e=()=>{if(!this.isRouting)return;try{for(let t=0;t<16&&!this.solver.solved&&!this.solver.failed;t++)this.solver.step();if(this.emit({type:"progress",steps:this.solver.iterations,progress:this.solver.progress,phase:this.solver.phase,debugGraphics:this.solver.visualize()}),!this.isRouting)return;if(this.solver.failed){this.finishSolver(),this.isRouting=!1,this.emit({type:"error",error:Error(this.solver.error??"Dogbone routing failed")});return}if(this.solver.solved){this.finishSolver(),this.isRouting=!1,this.emit({type:"complete",traces:this.getTraces()});return}this.timer=setTimeout(e,0)}catch(t){this.isRouting=!1,this.emit({type:"error",error:t instanceof Error?t:Error(String(t))})}};this.timer=setTimeout(e,0)}stop(){if(this.isRouting=!1,this.timer)clearTimeout(this.timer)}solveSync(){if(this.solver.solve(),this.solver.failed)throw Error(this.solver.error??"Dogbone routing failed");return this.getTraces()}},{create:Aui,defineProperty:Jrn,getOwnPropertyDescriptor:_ui,getOwnPropertyNames:$rn,getPrototypeOf:gui}=Object,fui=Object.prototype.hasOwnProperty,jye=((e)=>typeof rW<"u"?rW:typeof Proxy<"u"?new Proxy(e,{get:(t,n)=>(typeof rW<"u"?rW:t)[n]}):e)(function(e){if(typeof rW<"u")return rW.apply(this,arguments);throw Error('Dynamic require of "'+e+'" is not supported')}),TCe=(e,t)=>function(){return t||(0,e[$rn(e)[0]])((t={exports:{}}).exports,t),t.exports},yui=(e,t,n,o)=>{if(t&&typeof t==="object"||typeof t==="function"){for(let i of $rn(t))if(!fui.call(e,i)&&i!==n)Jrn(e,i,{get:()=>t[i],enumerable:!(o=_ui(t,i))||o.enumerable})}return e},gX=(e,t,n)=>(n=e!=null?Aui(gui(e)):{},yui(t||!e||!e.__esModule?Jrn(n,"default",{value:e,enumerable:!0}):n,e)),Zrn=TCe({"node_modules/svgson/dist/svgson.umd.js"(e,t){(function(n,o){typeof e==="object"&&typeof t<"u"?t.exports=o():typeof define==="function"&&define.amd?define(o):(n=typeof globalThis<"u"?globalThis:n||self,n.svgson=o())})(e,function(){var n=function(V){return V!=null&&(o(V)||i(V)||!!V._isBuffer)};function o(V){return!!V.constructor&&typeof V.constructor.isBuffer==="function"&&V.constructor.isBuffer(V)}function i(V){return typeof V.readFloatLE==="function"&&typeof V.slice==="function"&&o(V.slice(0,0))}var r=Object.prototype.toString,s=function(W){if(typeof W>"u")return"undefined";if(W===null)return"null";if(W===!0||W===!1||W instanceof Boolean)return"boolean";if(typeof W==="string"||W instanceof String)return"string";if(typeof W==="number"||W instanceof Number)return"number";if(typeof W==="function"||W instanceof Function)return"function";if(typeof Array.isArray<"u"&&Array.isArray(W))return"array";if(W instanceof RegExp)return"regexp";if(W instanceof Date)return"date";var j=r.call(W);if(j==="[object RegExp]")return"regexp";if(j==="[object Date]")return"date";if(j==="[object Arguments]")return"arguments";if(j==="[object Error]")return"error";if(n(W))return"buffer";if(j==="[object Set]")return"set";if(j==="[object WeakSet]")return"weakset";if(j==="[object Map]")return"map";if(j==="[object WeakMap]")return"weakmap";if(j==="[object Symbol]")return"symbol";if(j==="[object Int8Array]")return"int8array";if(j==="[object Uint8Array]")return"uint8array";if(j==="[object Uint8ClampedArray]")return"uint8clampedarray";if(j==="[object Int16Array]")return"int16array";if(j==="[object Uint16Array]")return"uint16array";if(j==="[object Int32Array]")return"int32array";if(j==="[object Uint32Array]")return"uint32array";if(j==="[object Float32Array]")return"float32array";if(j==="[object Float64Array]")return"float64array";return"object"};function a(V,W){return W={exports:{}},V(W,W.exports),W.exports}var c=a(function(V){(function(){function W(j,q){if(typeof q!=="function")return j;var ne={};for(var ce in j)if(Object.prototype.hasOwnProperty.call(j,ce))ne[q(ce,j[ce])||ce]=j[ce];return ne}if(V.exports)V.exports=W;else window.rename=W})()}),l=function V(W,j){var q=s(W);if(q!=="object"&&q!=="array")throw Error("expected an object");var ne=[];if(q==="object")W=c(W,j),ne={};for(var ce in W)if(W.hasOwnProperty(ce)){var oe=W[ce];if(s(oe)==="object"||s(oe)==="array")ne[ce]=V(oe,j);else ne[ce]=oe}return ne},d=a(function(V){var W=Object.prototype.hasOwnProperty,j="~";function q(){}if(Object.create){if(q.prototype=Object.create(null),!new q().__proto__)j=!1}function ne(oe,ie,J){this.fn=oe,this.context=ie,this.once=J||!1}function ce(){this._events=new q,this._eventsCount=0}ce.prototype.eventNames=function(){var ie=[],J,ee;if(this._eventsCount===0)return ie;for(ee in J=this._events)if(W.call(J,ee))ie.push(j?ee.slice(1):ee);if(Object.getOwnPropertySymbols)return ie.concat(Object.getOwnPropertySymbols(J));return ie},ce.prototype.listeners=function(ie,J){var ee=j?j+ie:ie,se=this._events[ee];if(J)return!!se;if(!se)return[];if(se.fn)return[se.fn];for(var le=0,he=se.length,ue=Array(he);le<he;le++)ue[le]=se[le].fn;return ue},ce.prototype.emit=function(ie,J,ee,se,le,he){var ue=j?j+ie:ie;if(!this._events[ue])return!1;var Ae=this._events[ue],_e=arguments.length,Pe,Ee;if(Ae.fn){if(Ae.once)this.removeListener(ie,Ae.fn,void 0,!0);switch(_e){case 1:return Ae.fn.call(Ae.context),!0;case 2:return Ae.fn.call(Ae.context,J),!0;case 3:return Ae.fn.call(Ae.context,J,ee),!0;case 4:return Ae.fn.call(Ae.context,J,ee,se),!0;case 5:return Ae.fn.call(Ae.context,J,ee,se,le),!0;case 6:return Ae.fn.call(Ae.context,J,ee,se,le,he),!0}for(Ee=1,Pe=Array(_e-1);Ee<_e;Ee++)Pe[Ee-1]=arguments[Ee];Ae.fn.apply(Ae.context,Pe)}else{var Te=Ae.length,be;for(Ee=0;Ee<Te;Ee++){if(Ae[Ee].once)this.removeListener(ie,Ae[Ee].fn,void 0,!0);switch(_e){case 1:Ae[Ee].fn.call(Ae[Ee].context);break;case 2:Ae[Ee].fn.call(Ae[Ee].context,J);break;case 3:Ae[Ee].fn.call(Ae[Ee].context,J,ee);break;case 4:Ae[Ee].fn.call(Ae[Ee].context,J,ee,se);break;default:if(!Pe)for(be=1,Pe=Array(_e-1);be<_e;be++)Pe[be-1]=arguments[be];Ae[Ee].fn.apply(Ae[Ee].context,Pe)}}}return!0},ce.prototype.on=function(ie,J,ee){var se=new ne(J,ee||this),le=j?j+ie:ie;if(!this._events[le])this._events[le]=se,this._eventsCount++;else if(!this._events[le].fn)this._events[le].push(se);else this._events[le]=[this._events[le],se];return this},ce.prototype.once=function(ie,J,ee){var se=new ne(J,ee||this,!0),le=j?j+ie:ie;if(!this._events[le])this._events[le]=se,this._eventsCount++;else if(!this._events[le].fn)this._events[le].push(se);else this._events[le]=[this._events[le],se];return this},ce.prototype.removeListener=function(ie,J,ee,se){var le=j?j+ie:ie;if(!this._events[le])return this;if(!J){if(--this._eventsCount===0)this._events=new q;else delete this._events[le];return this}var he=this._events[le];if(he.fn){if(he.fn===J&&(!se||he.once)&&(!ee||he.context===ee))if(--this._eventsCount===0)this._events=new q;else delete this._events[le]}else{for(var ue=0,Ae=[],_e=he.length;ue<_e;ue++)if(he[ue].fn!==J||se&&!he[ue].once||ee&&he[ue].context!==ee)Ae.push(he[ue]);if(Ae.length)this._events[le]=Ae.length===1?Ae[0]:Ae;else if(--this._eventsCount===0)this._events=new q;else delete this._events[le]}return this},ce.prototype.removeAllListeners=function(ie){var J;if(ie){if(J=j?j+ie:ie,this._events[J])if(--this._eventsCount===0)this._events=new q;else delete this._events[J]}else this._events=new q,this._eventsCount=0;return this},ce.prototype.off=ce.prototype.removeListener,ce.prototype.addListener=ce.prototype.on,ce.prototype.setMaxListeners=function(){return this},ce.prefixed=j,ce.EventEmitter=ce,V.exports=ce});function u(V,W,j){if(W in V)Object.defineProperty(V,W,{value:j,enumerable:!0,configurable:!0,writable:!0});else V[W]=j;return V}var h=function(){},A={data:"state-data",cdata:"state-cdata",tagBegin:"state-tag-begin",tagName:"state-tag-name",tagEnd:"state-tag-end",attributeNameStart:"state-attribute-name-start",attributeName:"state-attribute-name",attributeNameEnd:"state-attribute-name-end",attributeValueBegin:"state-attribute-value-begin",attributeValue:"state-attribute-value"},m={lt:"action-lt",gt:"action-gt",space:"action-space",equal:"action-equal",quote:"action-quote",slash:"action-slash",char:"action-char",error:"action-error"},p={text:"text",openTag:"open-tag",closeTag:"close-tag",attributeName:"attribute-name",attributeValue:"attribute-value"},g={" ":m.space,"\t":m.space,"\n":m.space,"\r":m.space,"<":m.lt,">":m.gt,'"':m.quote,"'":m.quote,"=":m.equal,"/":m.slash},_=function(W){return g[W]||m.char},f=function(W){var j,q,ne,ce,oe,ie,J,ee,se,le;W=Object.assign({debug:!1},W);var he=new d,ue=A.data,Ae="",_e="",Pe="",Ee="",Te="",be="",me=function(ve,De){if(_e[0]==="?"||_e[0]==="!")return;var Ze={type:ve,value:De};if(W.debug)console.log("emit:",Ze);he.emit("data",Ze)};he.stateMachine=(le={},u(le,A.data,(j={},u(j,m.lt,function(){if(Ae.trim())me(p.text,Ae);_e="",Te=!1,ue=A.tagBegin}),u(j,m.char,function(Ce){Ae+=Ce}),j)),u(le,A.cdata,u({},m.char,function(Ce){if(Ae+=Ce,Ae.substr(-3)==="]]>")me(p.text,Ae.slice(0,-3)),Ae="",ue=A.data})),u(le,A.tagBegin,(q={},u(q,m.space,h),u(q,m.char,function(Ce){_e=Ce,ue=A.tagName}),u(q,m.slash,function(){_e="",Te=!0}),q)),u(le,A.tagName,(ne={},u(ne,m.space,function(){if(Te)ue=A.tagEnd;else ue=A.attributeNameStart,me(p.openTag,_e)}),u(ne,m.gt,function(){if(Te)me(p.closeTag,_e);else me(p.openTag,_e);Ae="",ue=A.data}),u(ne,m.slash,function(){ue=A.tagEnd,me(p.openTag,_e)}),u(ne,m.char,function(Ce){if(_e+=Ce,_e==="![CDATA[")ue=A.cdata,Ae="",_e=""}),ne)),u(le,A.tagEnd,(ce={},u(ce,m.gt,function(){me(p.closeTag,_e),Ae="",ue=A.data}),u(ce,m.char,h),ce)),u(le,A.attributeNameStart,(oe={},u(oe,m.char,function(Ce){Pe=Ce,ue=A.attributeName}),u(oe,m.gt,function(){Ae="",ue=A.data}),u(oe,m.space,h),u(oe,m.slash,function(){Te=!0,ue=A.tagEnd}),oe)),u(le,A.attributeName,(ie={},u(ie,m.space,function(){ue=A.attributeNameEnd}),u(ie,m.equal,function(){me(p.attributeName,Pe),ue=A.attributeValueBegin}),u(ie,m.gt,function(){Ee="",me(p.attributeName,Pe),me(p.attributeValue,Ee),Ae="",ue=A.data}),u(ie,m.slash,function(){Te=!0,Ee="",me(p.attributeName,Pe),me(p.attributeValue,Ee),ue=A.tagEnd}),u(ie,m.char,function(Ce){Pe+=Ce}),ie)),u(le,A.attributeNameEnd,(J={},u(J,m.space,h),u(J,m.equal,function(){me(p.attributeName,Pe),ue=A.attributeValueBegin}),u(J,m.gt,function(){Ee="",me(p.attributeName,Pe),me(p.attributeValue,Ee),Ae="",ue=A.data}),u(J,m.char,function(Ce){Ee="",me(p.attributeName,Pe),me(p.attributeValue,Ee),Pe=Ce,ue=A.attributeName}),J)),u(le,A.attributeValueBegin,(ee={},u(ee,m.space,h),u(ee,m.quote,function(Ce){be=Ce,Ee="",ue=A.attributeValue}),u(ee,m.gt,function(){Ee="",me(p.attributeValue,Ee),Ae="",ue=A.data}),u(ee,m.char,function(Ce){be="",Ee=Ce,ue=A.attributeValue}),ee)),u(le,A.attributeValue,(se={},u(se,m.space,function(Ce){if(be)Ee+=Ce;else me(p.attributeValue,Ee),ue=A.attributeNameStart}),u(se,m.quote,function(Ce){if(be===Ce)me(p.attributeValue,Ee),ue=A.attributeNameStart;else Ee+=Ce}),u(se,m.gt,function(Ce){if(be)Ee+=Ce;else me(p.attributeValue,Ee),Ae="",ue=A.data}),u(se,m.slash,function(Ce){if(be)Ee+=Ce;else me(p.attributeValue,Ee),Te=!0,ue=A.tagEnd}),u(se,m.char,function(Ce){Ee+=Ce}),se)),le);var ye=function(ve){if(W.debug)console.log(ue,ve);var De=he.stateMachine[ue],Ze=De[_(ve)]||De[m.error]||De[m.char];Ze(ve)};return he.write=function(Ce){var ve=Ce.length;for(var De=0;De<ve;De++)ye(Ce[De])},he},y={State:A,Action:m,Type:p,create:f},x=y.Type,C={element:"element",text:"text"},I=function(W){return Object.assign({name:"",type:C.element,value:"",parent:null,attributes:{},children:[]},W)},b=function(W){W=Object.assign({stream:!1,parentNodes:!0,doneEvent:"done",tagPrefix:"tag:",emitTopLevelOnly:!1,debug:!1},W);var j=void 0,q=void 0,ne=void 0,ce=void 0,oe=new d,ie=function(ee){switch(ee.type){case x.openTag:if(ne===null)ne=q,ne.name=ee.value;else{var se=I({name:ee.value,parent:ne});ne.children.push(se),ne=se}break;case x.closeTag:var le=ne.parent;if(!W.parentNodes)ne.parent=null;if(ne.name!==ee.value)break;if(W.stream&&le===q)q.children=[],ne.parent=null;if(!W.emitTopLevelOnly||le===q)oe.emit(W.tagPrefix+ne.name,ne),oe.emit("tag",ne.name,ne);if(ne===q)j.removeAllListeners("data"),oe.emit(W.doneEvent,ne),q=null;ne=le;break;case x.text:if(ne)ne.children.push(I({type:C.text,value:ee.value,parent:W.parentNodes?ne:null}));break;case x.attributeName:ce=ee.value,ne.attributes[ce]="";break;case x.attributeValue:ne.attributes[ce]=ee.value;break}};return oe.reset=function(){j=y.create({debug:W.debug}),j.on("data",ie),q=I(),ne=null,ce="",oe.parse=j.write},oe.reset(),oe},P=function(W,j){j=Object.assign({},j,{stream:!1,tagPrefix:":"});var q=b(j),ne=void 0;return q.on("done",function(ce){ne=ce}),q.parse(W),ne},E={parseSync:P,create:b,NodeType:C},B=E.parseSync,w=function(W){var j=B("<root>".concat(W,"</root>"),{parentNodes:!1}),q=j.children&&j.children.length>0&&j.children.every(function(ne){return ne.name==="svg"});if(q)return j.children.length===1?j.children[0]:j.children;else throw Error("nothing to parse")},T=function(W){return l(W,function(j){if(!N(j))return Q(j);return j})},Q=function(W){return W.replace(/[-|:]([a-z])/gi,function(j,q){return q.toUpperCase()})},N=function(W){return/^(data|aria)(-\w+)/.test(W)},F=function(W){if(W){var j=String(W);return/[&<>]/.test(j)?"<![CDATA[".concat(j.replace(/]]>/,"]]]]><![CDATA[>"),"]]>"):j}return""},H=function(W){return String(W).replace(/&/g,"&").replace(/'/g,"'").replace(/"/g,""").replace(/</g,"<").replace(/>/g,">")},z=function(W){var j=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},q=j.transformNode,ne=q===void 0?function(J){return J}:q,ce=j.camelcase,oe=ce===void 0?!1:ce,ie=function(ee){var se=ne(ee);if(oe)se=T(se);return se};return ie(w(W))};function Y(){for(var V=arguments.length,W=Array(V),j=0;j<V;j++)W[j]=arguments[j];return new Promise(function(q,ne){try{var ce=z.apply(void 0,W);q(ce)}catch(oe){ne(oe)}})}var U=function V(W){var j=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},q=j.transformAttr,ne=q===void 0?function(ue,Ae,_e){return"".concat(ue,'="').concat(_e(Ae),'"')}:q,ce=j.transformNode,oe=ce===void 0?function(ue){return ue}:ce,ie=j.selfClose,J=ie===void 0?!0:ie;if(Array.isArray(W))return W.map(function(ue){return V(ue,{transformAttr:ne,selfClose:J,transformNode:oe})}).join("");var ee=oe(W);if(ee.type==="text")return F(ee.value);var se="";for(var le in ee.attributes){var he=ne(le,ee.attributes[le],H,ee.name);se+=he?" ".concat(he):""}return ee.children&&ee.children.length>0||!J?"<".concat(ee.name).concat(se,">").concat(V(ee.children,{transformAttr:ne,transformNode:oe,selfClose:J}),"</").concat(ee.name,">"):"<".concat(ee.name).concat(se,"/>")},X=Object.assign({},{parse:Y,parseSync:z,stringify:U});return X})}}),xui=TCe({"node_modules/heap/lib/heap.js"(e,t){(function(){var n,o,i,r,s,a,c,l,d,u,h,A,m,p,g;i=Math.floor,u=Math.min,o=function(_,f){if(_<f)return-1;if(_>f)return 1;return 0},d=function(_,f,y,x,C){var I;if(y==null)y=0;if(C==null)C=o;if(y<0)throw Error("lo must be non-negative");if(x==null)x=_.length;while(y<x)if(I=i((y+x)/2),C(f,_[I])<0)x=I;else y=I+1;return[].splice.apply(_,[y,y-y].concat(f)),f},a=function(_,f,y){if(y==null)y=o;return _.push(f),p(_,0,_.length-1,y)},s=function(_,f){var y,x;if(f==null)f=o;if(y=_.pop(),_.length)x=_[0],_[0]=y,g(_,0,f);else x=y;return x},l=function(_,f,y){var x;if(y==null)y=o;return x=_[0],_[0]=f,g(_,0,y),x},c=function(_,f,y){var x;if(y==null)y=o;if(_.length&&y(_[0],f)<0)x=[_[0],f],f=x[0],_[0]=x[1],g(_,0,y);return f},r=function(_,f){var y,x,C,I,b,P,E,B;if(f==null)f=o;P=function(){B=[];for(var w=0,T=i(_.length/2);0<=T?w<T:w>T;0<=T?w++:w--)B.push(w);return B}.apply(this).reverse(),E=[];for(x=0,I=P.length;x<I;x++)y=P[x],E.push(g(_,y,f));return E},m=function(_,f,y){var x;if(y==null)y=o;if(x=_.indexOf(f),x===-1)return;return p(_,0,x,y),g(_,x,y)},h=function(_,f,y){var x,C,I,b,P;if(y==null)y=o;if(C=_.slice(0,f),!C.length)return C;r(C,y),P=_.slice(f);for(I=0,b=P.length;I<b;I++)x=P[I],c(C,x,y);return C.sort(y).reverse()},A=function(_,f,y){var x,C,I,b,P,E,B,w,T,Q;if(y==null)y=o;if(f*10<=_.length){if(b=_.slice(0,f).sort(y),!b.length)return b;I=b[b.length-1],w=_.slice(f);for(P=0,B=w.length;P<B;P++)if(x=w[P],y(x,I)<0)d(b,x,0,null,y),b.pop(),I=b[b.length-1];return b}r(_,y),Q=[];for(C=E=0,T=u(f,_.length);0<=T?E<T:E>T;C=0<=T?++E:--E)Q.push(s(_,y));return Q},p=function(_,f,y,x){var C,I,b;if(x==null)x=o;C=_[y];while(y>f){if(b=y-1>>1,I=_[b],x(C,I)<0){_[y]=I,y=b;continue}break}return _[y]=C},g=function(_,f,y){var x,C,I,b,P;if(y==null)y=o;C=_.length,P=f,I=_[f],x=2*f+1;while(x<C){if(b=x+1,b<C&&!(y(_[x],_[b])<0))x=b;_[f]=_[x],f=x,x=2*f+1}return _[f]=I,p(_,P,f,y)},n=function(){_.push=a,_.pop=s,_.replace=l,_.pushpop=c,_.heapify=r,_.updateItem=m,_.nlargest=h,_.nsmallest=A;function _(f){this.cmp=f!=null?f:o,this.nodes=[]}return _.prototype.push=function(f){return a(this.nodes,f,this.cmp)},_.prototype.pop=function(){return s(this.nodes,this.cmp)},_.prototype.peek=function(){return this.nodes[0]},_.prototype.contains=function(f){return this.nodes.indexOf(f)!==-1},_.prototype.replace=function(f){return l(this.nodes,f,this.cmp)},_.prototype.pushpop=function(f){return c(this.nodes,f,this.cmp)},_.prototype.heapify=function(){return r(this.nodes,this.cmp)},_.prototype.updateItem=function(f){return m(this.nodes,f,this.cmp)},_.prototype.clear=function(){return this.nodes=[]},_.prototype.empty=function(){return this.nodes.length===0},_.prototype.size=function(){return this.nodes.length},_.prototype.clone=function(){var f=new _;return f.nodes=this.nodes.slice(0),f},_.prototype.toArray=function(){return this.nodes.slice(0)},_.prototype.insert=_.prototype.push,_.prototype.top=_.prototype.peek,_.prototype.front=_.prototype.peek,_.prototype.has=_.prototype.contains,_.prototype.copy=_.prototype.clone,_}(),function(_,f){if(typeof define==="function"&&define.amd)return define([],f);else if(typeof e==="object")return t.exports=f();else return _.Heap=f()}(this,function(){return n})}).call(e)}}),Cui=TCe({"node_modules/heap/index.js"(e,t){t.exports=xui()}}),uWe=TCe({"node_modules/object-hash/dist/object_hash.js"(e,t){(function(n){var o;typeof e=="object"?t.exports=n():typeof define=="function"&&define.amd?define(n):(typeof window<"u"?o=window:typeof global<"u"?o=global:typeof self<"u"&&(o=self),o.objectHash=n())})(function(){return function n(o,i,r){function s(l,d){if(!i[l]){if(!o[l]){var u=typeof jye=="function"&&jye;if(!d&&u)return u(l,!0);if(a)return a(l,!0);throw Error("Cannot find module '"+l+"'")}d=i[l]={exports:{}},o[l][0].call(d.exports,function(h){var A=o[l][1][h];return s(A||h)},d,d.exports,n,o,i,r)}return i[l].exports}for(var a=typeof jye=="function"&&jye,c=0;c<r.length;c++)s(r[c]);return s}({1:[function(n,o,i){(function(r,s,a,c,l,d,u,h,A){var m=n("crypto");function p(I,b){b=f(I,b);var P;return(P=b.algorithm!=="passthrough"?m.createHash(b.algorithm):new C).write===void 0&&(P.write=P.update,P.end=P.update),x(b,P).dispatch(I),P.update||P.end(""),P.digest?P.digest(b.encoding==="buffer"?void 0:b.encoding):(I=P.read(),b.encoding!=="buffer"?I.toString(b.encoding):I)}(i=o.exports=p).sha1=function(I){return p(I)},i.keys=function(I){return p(I,{excludeValues:!0,algorithm:"sha1",encoding:"hex"})},i.MD5=function(I){return p(I,{algorithm:"md5",encoding:"hex"})},i.keysMD5=function(I){return p(I,{algorithm:"md5",encoding:"hex",excludeValues:!0})};var g=m.getHashes?m.getHashes().slice():["sha1","md5"],_=(g.push("passthrough"),["buffer","hex","binary","base64"]);function f(I,b){var P={};if(P.algorithm=(b=b||{}).algorithm||"sha1",P.encoding=b.encoding||"hex",P.excludeValues=!!b.excludeValues,P.algorithm=P.algorithm.toLowerCase(),P.encoding=P.encoding.toLowerCase(),P.ignoreUnknown=b.ignoreUnknown===!0,P.respectType=b.respectType!==!1,P.respectFunctionNames=b.respectFunctionNames!==!1,P.respectFunctionProperties=b.respectFunctionProperties!==!1,P.unorderedArrays=b.unorderedArrays===!0,P.unorderedSets=b.unorderedSets!==!1,P.unorderedObjects=b.unorderedObjects!==!1,P.replacer=b.replacer||void 0,P.excludeKeys=b.excludeKeys||void 0,I===void 0)throw Error("Object argument required.");for(var E=0;E<g.length;++E)g[E].toLowerCase()===P.algorithm.toLowerCase()&&(P.algorithm=g[E]);if(g.indexOf(P.algorithm)===-1)throw Error('Algorithm "'+P.algorithm+'" not supported. supported values: '+g.join(", "));if(_.indexOf(P.encoding)===-1&&P.algorithm!=="passthrough")throw Error('Encoding "'+P.encoding+'" not supported. supported values: '+_.join(", "));return P}function y(I){if(typeof I=="function")return/^function\s+\w*\s*\(\s*\)\s*{\s+\[native code\]\s+}$/i.exec(Function.prototype.toString.call(I))!=null}function x(I,b,P){P=P||[];function E(B){return b.update?b.update(B,"utf8"):b.write(B,"utf8")}return{dispatch:function(B){return this["_"+((B=I.replacer?I.replacer(B):B)===null?"null":typeof B)](B)},_object:function(B){var w,T=Object.prototype.toString.call(B),Q=/\[object (.*)\]/i.exec(T);if(Q=(Q=Q?Q[1]:"unknown:["+T+"]").toLowerCase(),0<=(T=P.indexOf(B)))return this.dispatch("[CIRCULAR:"+T+"]");if(P.push(B),a!==void 0&&a.isBuffer&&a.isBuffer(B))return E("buffer:"),E(B);if(Q==="object"||Q==="function"||Q==="asyncfunction")return T=Object.keys(B),I.unorderedObjects&&(T=T.sort()),I.respectType===!1||y(B)||T.splice(0,0,"prototype","__proto__","constructor"),I.excludeKeys&&(T=T.filter(function(N){return!I.excludeKeys(N)})),E("object:"+T.length+":"),w=this,T.forEach(function(N){w.dispatch(N),E(":"),I.excludeValues||w.dispatch(B[N]),E(",")});if(!this["_"+Q]){if(I.ignoreUnknown)return E("["+Q+"]");throw Error('Unknown object type "'+Q+'"')}this["_"+Q](B)},_array:function(B,N){N=N!==void 0?N:I.unorderedArrays!==!1;var T=this;if(E("array:"+B.length+":"),!N||B.length<=1)return B.forEach(function(F){return T.dispatch(F)});var Q=[],N=B.map(function(F){var H=new C,z=P.slice();return x(I,H,z).dispatch(F),Q=Q.concat(z.slice(P.length)),H.read().toString()});return P=P.concat(Q),N.sort(),this._array(N,!1)},_date:function(B){return E("date:"+B.toJSON())},_symbol:function(B){return E("symbol:"+B.toString())},_error:function(B){return E("error:"+B.toString())},_boolean:function(B){return E("bool:"+B.toString())},_string:function(B){E("string:"+B.length+":"),E(B.toString())},_function:function(B){E("fn:"),y(B)?this.dispatch("[native]"):this.dispatch(B.toString()),I.respectFunctionNames!==!1&&this.dispatch("function-name:"+String(B.name)),I.respectFunctionProperties&&this._object(B)},_number:function(B){return E("number:"+B.toString())},_xml:function(B){return E("xml:"+B.toString())},_null:function(){return E("Null")},_undefined:function(){return E("Undefined")},_regexp:function(B){return E("regex:"+B.toString())},_uint8array:function(B){return E("uint8array:"),this.dispatch(Array.prototype.slice.call(B))},_uint8clampedarray:function(B){return E("uint8clampedarray:"),this.dispatch(Array.prototype.slice.call(B))},_int8array:function(B){return E("int8array:"),this.dispatch(Array.prototype.slice.call(B))},_uint16array:function(B){return E("uint16array:"),this.dispatch(Array.prototype.slice.call(B))},_int16array:function(B){return E("int16array:"),this.dispatch(Array.prototype.slice.call(B))},_uint32array:function(B){return E("uint32array:"),this.dispatch(Array.prototype.slice.call(B))},_int32array:function(B){return E("int32array:"),this.dispatch(Array.prototype.slice.call(B))},_float32array:function(B){return E("float32array:"),this.dispatch(Array.prototype.slice.call(B))},_float64array:function(B){return E("float64array:"),this.dispatch(Array.prototype.slice.call(B))},_arraybuffer:function(B){return E("arraybuffer:"),this.dispatch(new Uint8Array(B))},_url:function(B){return E("url:"+B.toString())},_map:function(B){return E("map:"),B=Array.from(B),this._array(B,I.unorderedSets!==!1)},_set:function(B){return E("set:"),B=Array.from(B),this._array(B,I.unorderedSets!==!1)},_file:function(B){return E("file:"),this.dispatch([B.name,B.size,B.type,B.lastModfied])},_blob:function(){if(I.ignoreUnknown)return E("[blob]");throw Error(`Hashing Blob objects is currently not supported
(see https://github.com/puleos/object-hash/issues/26)
Use "options.replacer" or "options.ignoreUnknown"
`)},_domwindow:function(){return E("domwindow")},_bigint:function(B){return E("bigint:"+B.toString())},_process:function(){return E("process")},_timer:function(){return E("timer")},_pipe:function(){return E("pipe")},_tcp:function(){return E("tcp")},_udp:function(){return E("udp")},_tty:function(){return E("tty")},_statwatcher:function(){return E("statwatcher")},_securecontext:function(){return E("securecontext")},_connection:function(){return E("connection")},_zlib:function(){return E("zlib")},_context:function(){return E("context")},_nodescript:function(){return E("nodescript")},_httpparser:function(){return E("httpparser")},_dataview:function(){return E("dataview")},_signal:function(){return E("signal")},_fsevent:function(){return E("fsevent")},_tlswrap:function(){return E("tlswrap")}}}function C(){return{buf:"",write:function(I){this.buf+=I},end:function(I){this.buf+=I},read:function(){return this.buf}}}i.writeToStream=function(I,b,P){return P===void 0&&(P=b,b={}),x(b=f(I,b),P).dispatch(I)}}).call(this,n("lYpoI2"),typeof self<"u"?self:typeof window<"u"?window:{},n("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/fake_9a5aa49d.js","/")},{buffer:3,crypto:5,lYpoI2:11}],2:[function(n,o,i){(function(r,s,a,c,l,d,u,h,A){(function(m){var p=typeof Uint8Array<"u"?Uint8Array:Array,g=43,_=47,f=48,y=97,x=65,C=45,I=95;function b(P){return P=P.charCodeAt(0),P===g||P===C?62:P===_||P===I?63:P<f?-1:P<f+10?P-f+26+26:P<x+26?P-x:P<y+26?P-y+26:void 0}m.toByteArray=function(P){var E,B;if(0<P.length%4)throw Error("Invalid string. Length must be a multiple of 4");var w=P.length,w=P.charAt(w-2)==="="?2:P.charAt(w-1)==="="?1:0,T=new p(3*P.length/4-w),Q=0<w?P.length-4:P.length,N=0;function F(H){T[N++]=H}for(E=0;E<Q;E+=4,0)F((16711680&(B=b(P.charAt(E))<<18|b(P.charAt(E+1))<<12|b(P.charAt(E+2))<<6|b(P.charAt(E+3))))>>16),F((65280&B)>>8),F(255&B);return w==2?F(255&(B=b(P.charAt(E))<<2|b(P.charAt(E+1))>>4)):w==1&&(F((B=b(P.charAt(E))<<10|b(P.charAt(E+1))<<4|b(P.charAt(E+2))>>2)>>8&255),F(255&B)),T},m.fromByteArray=function(P){var E,B,w,T,Q=P.length%3,N="";function F(H){return"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(H)}for(E=0,w=P.length-Q;E<w;E+=3)B=(P[E]<<16)+(P[E+1]<<8)+P[E+2],N+=F((T=B)>>18&63)+F(T>>12&63)+F(T>>6&63)+F(63&T);switch(Q){case 1:N=(N+=F((B=P[P.length-1])>>2))+F(B<<4&63)+"==";break;case 2:N=(N=(N+=F((B=(P[P.length-2]<<8)+P[P.length-1])>>10))+F(B>>4&63))+F(B<<2&63)+"="}return N}})(i===void 0?this.base64js={}:i)}).call(this,n("lYpoI2"),typeof self<"u"?self:typeof window<"u"?window:{},n("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/gulp-browserify/node_modules/base64-js/lib/b64.js","/node_modules/gulp-browserify/node_modules/base64-js/lib")},{buffer:3,lYpoI2:11}],3:[function(n,o,i){(function(r,s,g,c,l,d,u,h,A){var m=n("base64-js"),p=n("ieee754");function g(J,ee,se){if(!(this instanceof g))return new g(J,ee,se);var le,he,ue,Ae,_e=typeof J;if(ee==="base64"&&_e=="string")for(J=(Ae=J).trim?Ae.trim():Ae.replace(/^\s+|\s+$/g,"");J.length%4!=0;)J+="=";if(_e=="number")le=Y(J);else if(_e=="string")le=g.byteLength(J,ee);else{if(_e!="object")throw Error("First argument needs to be a number, array or string.");le=Y(J.length)}if(g._useTypedArrays?he=g._augment(new Uint8Array(le)):((he=this).length=le,he._isBuffer=!0),g._useTypedArrays&&typeof J.byteLength=="number")he._set(J);else if(U(Ae=J)||g.isBuffer(Ae)||Ae&&typeof Ae=="object"&&typeof Ae.length=="number")for(ue=0;ue<le;ue++)g.isBuffer(J)?he[ue]=J.readUInt8(ue):he[ue]=J[ue];else if(_e=="string")he.write(J,0,ee);else if(_e=="number"&&!g._useTypedArrays&&!se)for(ue=0;ue<le;ue++)he[ue]=0;return he}function _(J,ee,se,le){return g._charsWritten=j(function(he){for(var ue=[],Ae=0;Ae<he.length;Ae++)ue.push(255&he.charCodeAt(Ae));return ue}(ee),J,se,le)}function f(J,ee,se,le){return g._charsWritten=j(function(he){for(var ue,Ae,_e=[],Pe=0;Pe<he.length;Pe++)Ae=he.charCodeAt(Pe),ue=Ae>>8,Ae=Ae%256,_e.push(Ae),_e.push(ue);return _e}(ee),J,se,le)}function y(J,ee,se){var le="";se=Math.min(J.length,se);for(var he=ee;he<se;he++)le+=String.fromCharCode(J[he]);return le}function x(J,ee,se,ue){ue||(ie(typeof se=="boolean","missing or invalid endian"),ie(ee!=null,"missing offset"),ie(ee+1<J.length,"Trying to read beyond buffer length"));var he,ue=J.length;if(!(ue<=ee))return se?(he=J[ee],ee+1<ue&&(he|=J[ee+1]<<8)):(he=J[ee]<<8,ee+1<ue&&(he|=J[ee+1])),he}function C(J,ee,se,ue){ue||(ie(typeof se=="boolean","missing or invalid endian"),ie(ee!=null,"missing offset"),ie(ee+3<J.length,"Trying to read beyond buffer length"));var he,ue=J.length;if(!(ue<=ee))return se?(ee+2<ue&&(he=J[ee+2]<<16),ee+1<ue&&(he|=J[ee+1]<<8),he|=J[ee],ee+3<ue&&(he+=J[ee+3]<<24>>>0)):(ee+1<ue&&(he=J[ee+1]<<16),ee+2<ue&&(he|=J[ee+2]<<8),ee+3<ue&&(he|=J[ee+3]),he+=J[ee]<<24>>>0),he}function I(J,ee,se,le){if(le||(ie(typeof se=="boolean","missing or invalid endian"),ie(ee!=null,"missing offset"),ie(ee+1<J.length,"Trying to read beyond buffer length")),!(J.length<=ee))return le=x(J,ee,se,!0),32768&le?-1*(65535-le+1):le}function b(J,ee,se,le){if(le||(ie(typeof se=="boolean","missing or invalid endian"),ie(ee!=null,"missing offset"),ie(ee+3<J.length,"Trying to read beyond buffer length")),!(J.length<=ee))return le=C(J,ee,se,!0),2147483648&le?-1*(4294967295-le+1):le}function P(J,ee,se,le){return le||(ie(typeof se=="boolean","missing or invalid endian"),ie(ee+3<J.length,"Trying to read beyond buffer length")),p.read(J,ee,se,23,4)}function E(J,ee,se,le){return le||(ie(typeof se=="boolean","missing or invalid endian"),ie(ee+7<J.length,"Trying to read beyond buffer length")),p.read(J,ee,se,52,8)}function B(J,ee,se,le,he){if(he||(ie(ee!=null,"missing value"),ie(typeof le=="boolean","missing or invalid endian"),ie(se!=null,"missing offset"),ie(se+1<J.length,"trying to write beyond buffer length"),ne(ee,65535)),he=J.length,!(he<=se))for(var ue=0,Ae=Math.min(he-se,2);ue<Ae;ue++)J[se+ue]=(ee&255<<8*(le?ue:1-ue))>>>8*(le?ue:1-ue)}function w(J,ee,se,le,he){if(he||(ie(ee!=null,"missing value"),ie(typeof le=="boolean","missing or invalid endian"),ie(se!=null,"missing offset"),ie(se+3<J.length,"trying to write beyond buffer length"),ne(ee,4294967295)),he=J.length,!(he<=se))for(var ue=0,Ae=Math.min(he-se,4);ue<Ae;ue++)J[se+ue]=ee>>>8*(le?ue:3-ue)&255}function T(J,ee,se,le,he){he||(ie(ee!=null,"missing value"),ie(typeof le=="boolean","missing or invalid endian"),ie(se!=null,"missing offset"),ie(se+1<J.length,"Trying to write beyond buffer length"),ce(ee,32767,-32768)),J.length<=se||B(J,0<=ee?ee:65535+ee+1,se,le,he)}function Q(J,ee,se,le,he){he||(ie(ee!=null,"missing value"),ie(typeof le=="boolean","missing or invalid endian"),ie(se!=null,"missing offset"),ie(se+3<J.length,"Trying to write beyond buffer length"),ce(ee,2147483647,-2147483648)),J.length<=se||w(J,0<=ee?ee:4294967295+ee+1,se,le,he)}function N(J,ee,se,le,he){he||(ie(ee!=null,"missing value"),ie(typeof le=="boolean","missing or invalid endian"),ie(se!=null,"missing offset"),ie(se+3<J.length,"Trying to write beyond buffer length"),oe(ee,340282346638528860000000000000000000000,-340282346638528860000000000000000000000)),J.length<=se||p.write(J,ee,se,le,23,4)}function F(J,ee,se,le,he){he||(ie(ee!=null,"missing value"),ie(typeof le=="boolean","missing or invalid endian"),ie(se!=null,"missing offset"),ie(se+7<J.length,"Trying to write beyond buffer length"),oe(ee,179769313486231570000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000,-179769313486231570000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000)),J.length<=se||p.write(J,ee,se,le,52,8)}i.Buffer=g,i.SlowBuffer=g,i.INSPECT_MAX_BYTES=50,g.poolSize=8192,g._useTypedArrays=function(){try{var J=new ArrayBuffer(0),ee=new Uint8Array(J);return ee.foo=function(){return 42},ee.foo()===42&&typeof ee.subarray=="function"}catch(se){return!1}}(),g.isEncoding=function(J){switch(String(J).toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"binary":case"base64":case"raw":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return!0;default:return!1}},g.isBuffer=function(J){return!(J==null||!J._isBuffer)},g.byteLength=function(J,ee){var se;switch(J+="",ee||"utf8"){case"hex":se=J.length/2;break;case"utf8":case"utf-8":se=V(J).length;break;case"ascii":case"binary":case"raw":se=J.length;break;case"base64":se=W(J).length;break;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":se=2*J.length;break;default:throw Error("Unknown encoding")}return se},g.concat=function(J,ee){if(ie(U(J),`Usage: Buffer.concat(list, [totalLength])
list should be an Array.`),J.length===0)return new g(0);if(J.length===1)return J[0];if(typeof ee!="number")for(he=ee=0;he<J.length;he++)ee+=J[he].length;for(var se=new g(ee),le=0,he=0;he<J.length;he++){var ue=J[he];ue.copy(se,le),le+=ue.length}return se},g.prototype.write=function(J,ee,se,le){isFinite(ee)?isFinite(se)||(le=se,se=void 0):(Pe=le,le=ee,ee=se,se=Pe),ee=Number(ee)||0;var he,ue,Ae,_e,Pe=this.length-ee;switch((!se||Pe<(se=Number(se)))&&(se=Pe),le=String(le||"utf8").toLowerCase()){case"hex":he=function(Ee,Te,be,me){be=Number(be)||0;var ye=Ee.length-be;(!me||ye<(me=Number(me)))&&(me=ye),ie((ye=Te.length)%2==0,"Invalid hex string"),ye/2<me&&(me=ye/2);for(var Ce=0;Ce<me;Ce++){var ve=parseInt(Te.substr(2*Ce,2),16);ie(!isNaN(ve),"Invalid hex string"),Ee[be+Ce]=ve}return g._charsWritten=2*Ce,Ce}(this,J,ee,se);break;case"utf8":case"utf-8":ue=this,Ae=ee,_e=se,he=g._charsWritten=j(V(J),ue,Ae,_e);break;case"ascii":case"binary":he=_(this,J,ee,se);break;case"base64":ue=this,Ae=ee,_e=se,he=g._charsWritten=j(W(J),ue,Ae,_e);break;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":he=f(this,J,ee,se);break;default:throw Error("Unknown encoding")}return he},g.prototype.toString=function(J,ee,se){var le,he,ue,Ae,_e=this;if(J=String(J||"utf8").toLowerCase(),ee=Number(ee)||0,(se=se!==void 0?Number(se):_e.length)===ee)return"";switch(J){case"hex":le=function(Pe,Ee,Te){var be=Pe.length;(!Ee||Ee<0)&&(Ee=0),(!Te||Te<0||be<Te)&&(Te=be);for(var me="",ye=Ee;ye<Te;ye++)me+=X(Pe[ye]);return me}(_e,ee,se);break;case"utf8":case"utf-8":le=function(Pe,Ee,Te){var be="",me="";Te=Math.min(Pe.length,Te);for(var ye=Ee;ye<Te;ye++)Pe[ye]<=127?(be+=q(me)+String.fromCharCode(Pe[ye]),me=""):me+="%"+Pe[ye].toString(16);return be+q(me)}(_e,ee,se);break;case"ascii":case"binary":le=y(_e,ee,se);break;case"base64":he=_e,Ae=se,le=(ue=ee)===0&&Ae===he.length?m.fromByteArray(he):m.fromByteArray(he.slice(ue,Ae));break;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":le=function(Pe,Ee,Te){for(var be=Pe.slice(Ee,Te),me="",ye=0;ye<be.length;ye+=2)me+=String.fromCharCode(be[ye]+256*be[ye+1]);return me}(_e,ee,se);break;default:throw Error("Unknown encoding")}return le},g.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}},g.prototype.copy=function(J,ee,se,le){if(ee=ee||0,(le=le||le===0?le:this.length)!==(se=se||0)&&J.length!==0&&this.length!==0){ie(se<=le,"sourceEnd < sourceStart"),ie(0<=ee&&ee<J.length,"targetStart out of bounds"),ie(0<=se&&se<this.length,"sourceStart out of bounds"),ie(0<=le&&le<=this.length,"sourceEnd out of bounds"),le>this.length&&(le=this.length);var he=(le=J.length-ee<le-se?J.length-ee+se:le)-se;if(he<100||!g._useTypedArrays)for(var ue=0;ue<he;ue++)J[ue+ee]=this[ue+se];else J._set(this.subarray(se,se+he),ee)}},g.prototype.slice=function(J,ee){var se=this.length;if(J=z(J,se,0),ee=z(ee,se,se),g._useTypedArrays)return g._augment(this.subarray(J,ee));for(var le=ee-J,he=new g(le,void 0,!0),ue=0;ue<le;ue++)he[ue]=this[ue+J];return he},g.prototype.get=function(J){return console.log(".get() is deprecated. Access using array indexes instead."),this.readUInt8(J)},g.prototype.set=function(J,ee){return console.log(".set() is deprecated. Access using array indexes instead."),this.writeUInt8(J,ee)},g.prototype.readUInt8=function(J,ee){if(ee||(ie(J!=null,"missing offset"),ie(J<this.length,"Trying to read beyond buffer length")),!(J>=this.length))return this[J]},g.prototype.readUInt16LE=function(J,ee){return x(this,J,!0,ee)},g.prototype.readUInt16BE=function(J,ee){return x(this,J,!1,ee)},g.prototype.readUInt32LE=function(J,ee){return C(this,J,!0,ee)},g.prototype.readUInt32BE=function(J,ee){return C(this,J,!1,ee)},g.prototype.readInt8=function(J,ee){if(ee||(ie(J!=null,"missing offset"),ie(J<this.length,"Trying to read beyond buffer length")),!(J>=this.length))return 128&this[J]?-1*(255-this[J]+1):this[J]},g.prototype.readInt16LE=function(J,ee){return I(this,J,!0,ee)},g.prototype.readInt16BE=function(J,ee){return I(this,J,!1,ee)},g.prototype.readInt32LE=function(J,ee){return b(this,J,!0,ee)},g.prototype.readInt32BE=function(J,ee){return b(this,J,!1,ee)},g.prototype.readFloatLE=function(J,ee){return P(this,J,!0,ee)},g.prototype.readFloatBE=function(J,ee){return P(this,J,!1,ee)},g.prototype.readDoubleLE=function(J,ee){return E(this,J,!0,ee)},g.prototype.readDoubleBE=function(J,ee){return E(this,J,!1,ee)},g.prototype.writeUInt8=function(J,ee,se){se||(ie(J!=null,"missing value"),ie(ee!=null,"missing offset"),ie(ee<this.length,"trying to write beyond buffer length"),ne(J,255)),ee>=this.length||(this[ee]=J)},g.prototype.writeUInt16LE=function(J,ee,se){B(this,J,ee,!0,se)},g.prototype.writeUInt16BE=function(J,ee,se){B(this,J,ee,!1,se)},g.prototype.writeUInt32LE=function(J,ee,se){w(this,J,ee,!0,se)},g.prototype.writeUInt32BE=function(J,ee,se){w(this,J,ee,!1,se)},g.prototype.writeInt8=function(J,ee,se){se||(ie(J!=null,"missing value"),ie(ee!=null,"missing offset"),ie(ee<this.length,"Trying to write beyond buffer length"),ce(J,127,-128)),ee>=this.length||(0<=J?this.writeUInt8(J,ee,se):this.writeUInt8(255+J+1,ee,se))},g.prototype.writeInt16LE=function(J,ee,se){T(this,J,ee,!0,se)},g.prototype.writeInt16BE=function(J,ee,se){T(this,J,ee,!1,se)},g.prototype.writeInt32LE=function(J,ee,se){Q(this,J,ee,!0,se)},g.prototype.writeInt32BE=function(J,ee,se){Q(this,J,ee,!1,se)},g.prototype.writeFloatLE=function(J,ee,se){N(this,J,ee,!0,se)},g.prototype.writeFloatBE=function(J,ee,se){N(this,J,ee,!1,se)},g.prototype.writeDoubleLE=function(J,ee,se){F(this,J,ee,!0,se)},g.prototype.writeDoubleBE=function(J,ee,se){F(this,J,ee,!1,se)},g.prototype.fill=function(J,ee,se){if(ee=ee||0,se=se||this.length,ie(typeof(J=typeof(J=J||0)=="string"?J.charCodeAt(0):J)=="number"&&!isNaN(J),"value is not a number"),ie(ee<=se,"end < start"),se!==ee&&this.length!==0){ie(0<=ee&&ee<this.length,"start out of bounds"),ie(0<=se&&se<=this.length,"end out of bounds");for(var le=ee;le<se;le++)this[le]=J}},g.prototype.inspect=function(){for(var J=[],ee=this.length,se=0;se<ee;se++)if(J[se]=X(this[se]),se===i.INSPECT_MAX_BYTES){J[se+1]="...";break}return"<Buffer "+J.join(" ")+">"},g.prototype.toArrayBuffer=function(){if(typeof Uint8Array>"u")throw Error("Buffer.toArrayBuffer not supported in this browser");if(g._useTypedArrays)return new g(this).buffer;for(var J=new Uint8Array(this.length),ee=0,se=J.length;ee<se;ee+=1)J[ee]=this[ee];return J.buffer};var H=g.prototype;function z(J,ee,se){return typeof J!="number"?se:ee<=(J=~~J)?ee:0<=J||0<=(J+=ee)?J:0}function Y(J){return(J=~~Math.ceil(+J))<0?0:J}function U(J){return(Array.isArray||function(ee){return Object.prototype.toString.call(ee)==="[object Array]"})(J)}function X(J){return J<16?"0"+J.toString(16):J.toString(16)}function V(J){for(var ee=[],se=0;se<J.length;se++){var le=J.charCodeAt(se);if(le<=127)ee.push(J.charCodeAt(se));else for(var he=se,ue=(55296<=le&&le<=57343&&se++,encodeURIComponent(J.slice(he,se+1)).substr(1).split("%")),Ae=0;Ae<ue.length;Ae++)ee.push(parseInt(ue[Ae],16))}return ee}function W(J){return m.toByteArray(J)}function j(J,ee,se,le){for(var he=0;he<le&&!(he+se>=ee.length||he>=J.length);he++)ee[he+se]=J[he];return he}function q(J){try{return decodeURIComponent(J)}catch(ee){return String.fromCharCode(65533)}}function ne(J,ee){ie(typeof J=="number","cannot write a non-number as a number"),ie(0<=J,"specified a negative value for writing an unsigned value"),ie(J<=ee,"value is larger than maximum value for type"),ie(Math.floor(J)===J,"value has a fractional component")}function ce(J,ee,se){ie(typeof J=="number","cannot write a non-number as a number"),ie(J<=ee,"value larger than maximum allowed value"),ie(se<=J,"value smaller than minimum allowed value"),ie(Math.floor(J)===J,"value has a fractional component")}function oe(J,ee,se){ie(typeof J=="number","cannot write a non-number as a number"),ie(J<=ee,"value larger than maximum allowed value"),ie(se<=J,"value smaller than minimum allowed value")}function ie(J,ee){if(!J)throw Error(ee||"Failed assertion")}g._augment=function(J){return J._isBuffer=!0,J._get=J.get,J._set=J.set,J.get=H.get,J.set=H.set,J.write=H.write,J.toString=H.toString,J.toLocaleString=H.toString,J.toJSON=H.toJSON,J.copy=H.copy,J.slice=H.slice,J.readUInt8=H.readUInt8,J.readUInt16LE=H.readUInt16LE,J.readUInt16BE=H.readUInt16BE,J.readUInt32LE=H.readUInt32LE,J.readUInt32BE=H.readUInt32BE,J.readInt8=H.readInt8,J.readInt16LE=H.readInt16LE,J.readInt16BE=H.readInt16BE,J.readInt32LE=H.readInt32LE,J.readInt32BE=H.readInt32BE,J.readFloatLE=H.readFloatLE,J.readFloatBE=H.readFloatBE,J.readDoubleLE=H.readDoubleLE,J.readDoubleBE=H.readDoubleBE,J.writeUInt8=H.writeUInt8,J.writeUInt16LE=H.writeUInt16LE,J.writeUInt16BE=H.writeUInt16BE,J.writeUInt32LE=H.writeUInt32LE,J.writeUInt32BE=H.writeUInt32BE,J.writeInt8=H.writeInt8,J.writeInt16LE=H.writeInt16LE,J.writeInt16BE=H.writeInt16BE,J.writeInt32LE=H.writeInt32LE,J.writeInt32BE=H.writeInt32BE,J.writeFloatLE=H.writeFloatLE,J.writeFloatBE=H.writeFloatBE,J.writeDoubleLE=H.writeDoubleLE,J.writeDoubleBE=H.writeDoubleBE,J.fill=H.fill,J.inspect=H.inspect,J.toArrayBuffer=H.toArrayBuffer,J}}).call(this,n("lYpoI2"),typeof self<"u"?self:typeof window<"u"?window:{},n("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/gulp-browserify/node_modules/buffer/index.js","/node_modules/gulp-browserify/node_modules/buffer")},{"base64-js":2,buffer:3,ieee754:10,lYpoI2:11}],4:[function(n,o,i){(function(r,s,m,c,l,d,u,h,A){var m=n("buffer").Buffer,p=4,g=new m(p);g.fill(0),o.exports={hash:function(_,f,y,x){for(var C=f(function(B,w){B.length%p!=0&&(T=B.length+(p-B.length%p),B=m.concat([B,g],T));for(var T,Q=[],N=w?B.readInt32BE:B.readInt32LE,F=0;F<B.length;F+=p)Q.push(N.call(B,F));return Q}(_=m.isBuffer(_)?_:new m(_),x),8*_.length),f=x,I=new m(y),b=f?I.writeInt32BE:I.writeInt32LE,P=0;P<C.length;P++)b.call(I,C[P],4*P,!0);return I}}}).call(this,n("lYpoI2"),typeof self<"u"?self:typeof window<"u"?window:{},n("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/gulp-browserify/node_modules/crypto-browserify/helpers.js","/node_modules/gulp-browserify/node_modules/crypto-browserify")},{buffer:3,lYpoI2:11}],5:[function(n,o,i){(function(r,s,m,c,l,d,u,h,A){var m=n("buffer").Buffer,p=n("./sha"),g=n("./sha256"),_=n("./rng"),f={sha1:p,sha256:g,md5:n("./md5")},y=64,x=new m(y);function C(B,w){var T=f[B=B||"sha1"],Q=[];return T||I("algorithm:",B,"is not yet supported"),{update:function(N){return m.isBuffer(N)||(N=new m(N)),Q.push(N),N.length,this},digest:function(N){var F=m.concat(Q),F=w?function(H,z,Y){m.isBuffer(z)||(z=new m(z)),m.isBuffer(Y)||(Y=new m(Y)),z.length>y?z=H(z):z.length<y&&(z=m.concat([z,x],y));for(var U=new m(y),X=new m(y),V=0;V<y;V++)U[V]=54^z[V],X[V]=92^z[V];return Y=H(m.concat([U,Y])),H(m.concat([X,Y]))}(T,w,F):T(F);return Q=null,N?F.toString(N):F}}}function I(){var B=[].slice.call(arguments).join(" ");throw Error([B,"we accept pull requests","http://github.com/dominictarr/crypto-browserify"].join(`
`))}x.fill(0),i.createHash=function(B){return C(B)},i.createHmac=C,i.randomBytes=function(B,w){if(!w||!w.call)return new m(_(B));try{w.call(this,void 0,new m(_(B)))}catch(T){w(T)}};var b,P=["createCredentials","createCipher","createCipheriv","createDecipher","createDecipheriv","createSign","createVerify","createDiffieHellman","pbkdf2"],E=function(B){i[B]=function(){I("sorry,",B,"is not implemented yet")}};for(b in P)E(P[b],b)}).call(this,n("lYpoI2"),typeof self<"u"?self:typeof window<"u"?window:{},n("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/gulp-browserify/node_modules/crypto-browserify/index.js","/node_modules/gulp-browserify/node_modules/crypto-browserify")},{"./md5":6,"./rng":7,"./sha":8,"./sha256":9,buffer:3,lYpoI2:11}],6:[function(n,o,i){(function(r,s,a,c,l,d,u,h,A){var m=n("./helpers");function p(I,b){I[b>>5]|=128<<b%32,I[14+(b+64>>>9<<4)]=b;for(var P=1732584193,E=-271733879,B=-1732584194,w=271733878,T=0;T<I.length;T+=16){var Q=P,N=E,F=B,H=w,P=_(P,E,B,w,I[T+0],7,-680876936),w=_(w,P,E,B,I[T+1],12,-389564586),B=_(B,w,P,E,I[T+2],17,606105819),E=_(E,B,w,P,I[T+3],22,-1044525330);P=_(P,E,B,w,I[T+4],7,-176418897),w=_(w,P,E,B,I[T+5],12,1200080426),B=_(B,w,P,E,I[T+6],17,-1473231341),E=_(E,B,w,P,I[T+7],22,-45705983),P=_(P,E,B,w,I[T+8],7,1770035416),w=_(w,P,E,B,I[T+9],12,-1958414417),B=_(B,w,P,E,I[T+10],17,-42063),E=_(E,B,w,P,I[T+11],22,-1990404162),P=_(P,E,B,w,I[T+12],7,1804603682),w=_(w,P,E,B,I[T+13],12,-40341101),B=_(B,w,P,E,I[T+14],17,-1502002290),P=f(P,E=_(E,B,w,P,I[T+15],22,1236535329),B,w,I[T+1],5,-165796510),w=f(w,P,E,B,I[T+6],9,-1069501632),B=f(B,w,P,E,I[T+11],14,643717713),E=f(E,B,w,P,I[T+0],20,-373897302),P=f(P,E,B,w,I[T+5],5,-701558691),w=f(w,P,E,B,I[T+10],9,38016083),B=f(B,w,P,E,I[T+15],14,-660478335),E=f(E,B,w,P,I[T+4],20,-405537848),P=f(P,E,B,w,I[T+9],5,568446438),w=f(w,P,E,B,I[T+14],9,-1019803690),B=f(B,w,P,E,I[T+3],14,-187363961),E=f(E,B,w,P,I[T+8],20,1163531501),P=f(P,E,B,w,I[T+13],5,-1444681467),w=f(w,P,E,B,I[T+2],9,-51403784),B=f(B,w,P,E,I[T+7],14,1735328473),P=y(P,E=f(E,B,w,P,I[T+12],20,-1926607734),B,w,I[T+5],4,-378558),w=y(w,P,E,B,I[T+8],11,-2022574463),B=y(B,w,P,E,I[T+11],16,1839030562),E=y(E,B,w,P,I[T+14],23,-35309556),P=y(P,E,B,w,I[T+1],4,-1530992060),w=y(w,P,E,B,I[T+4],11,1272893353),B=y(B,w,P,E,I[T+7],16,-155497632),E=y(E,B,w,P,I[T+10],23,-1094730640),P=y(P,E,B,w,I[T+13],4,681279174),w=y(w,P,E,B,I[T+0],11,-358537222),B=y(B,w,P,E,I[T+3],16,-722521979),E=y(E,B,w,P,I[T+6],23,76029189),P=y(P,E,B,w,I[T+9],4,-640364487),w=y(w,P,E,B,I[T+12],11,-421815835),B=y(B,w,P,E,I[T+15],16,530742520),P=x(P,E=y(E,B,w,P,I[T+2],23,-995338651),B,w,I[T+0],6,-198630844),w=x(w,P,E,B,I[T+7],10,1126891415),B=x(B,w,P,E,I[T+14],15,-1416354905),E=x(E,B,w,P,I[T+5],21,-57434055),P=x(P,E,B,w,I[T+12],6,1700485571),w=x(w,P,E,B,I[T+3],10,-1894986606),B=x(B,w,P,E,I[T+10],15,-1051523),E=x(E,B,w,P,I[T+1],21,-2054922799),P=x(P,E,B,w,I[T+8],6,1873313359),w=x(w,P,E,B,I[T+15],10,-30611744),B=x(B,w,P,E,I[T+6],15,-1560198380),E=x(E,B,w,P,I[T+13],21,1309151649),P=x(P,E,B,w,I[T+4],6,-145523070),w=x(w,P,E,B,I[T+11],10,-1120210379),B=x(B,w,P,E,I[T+2],15,718787259),E=x(E,B,w,P,I[T+9],21,-343485551),P=C(P,Q),E=C(E,N),B=C(B,F),w=C(w,H)}return Array(P,E,B,w)}function g(I,b,P,E,B,w){return C((b=C(C(b,I),C(E,w)))<<B|b>>>32-B,P)}function _(I,b,P,E,B,w,T){return g(b&P|~b&E,I,b,B,w,T)}function f(I,b,P,E,B,w,T){return g(b&E|P&~E,I,b,B,w,T)}function y(I,b,P,E,B,w,T){return g(b^P^E,I,b,B,w,T)}function x(I,b,P,E,B,w,T){return g(P^(b|~E),I,b,B,w,T)}function C(I,b){var P=(65535&I)+(65535&b);return(I>>16)+(b>>16)+(P>>16)<<16|65535&P}o.exports=function(I){return m.hash(I,p,16)}}).call(this,n("lYpoI2"),typeof self<"u"?self:typeof window<"u"?window:{},n("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/gulp-browserify/node_modules/crypto-browserify/md5.js","/node_modules/gulp-browserify/node_modules/crypto-browserify")},{"./helpers":4,buffer:3,lYpoI2:11}],7:[function(n,o,i){(function(r,s,a,c,l,d,u,h,A){var m;o.exports=m||function(p){for(var g,_=Array(p),f=0;f<p;f++)(3&f)==0&&(g=4294967296*Math.random()),_[f]=g>>>((3&f)<<3)&255;return _}}).call(this,n("lYpoI2"),typeof self<"u"?self:typeof window<"u"?window:{},n("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/gulp-browserify/node_modules/crypto-browserify/rng.js","/node_modules/gulp-browserify/node_modules/crypto-browserify")},{buffer:3,lYpoI2:11}],8:[function(n,o,i){(function(r,s,a,c,l,d,u,h,A){var m=n("./helpers");function p(f,y){f[y>>5]|=128<<24-y%32,f[15+(y+64>>9<<4)]=y;for(var x,C,I,b=Array(80),P=1732584193,E=-271733879,B=-1732584194,w=271733878,T=-1009589776,Q=0;Q<f.length;Q+=16){for(var N=P,F=E,H=B,z=w,Y=T,U=0;U<80;U++){b[U]=U<16?f[Q+U]:_(b[U-3]^b[U-8]^b[U-14]^b[U-16],1);var X=g(g(_(P,5),(X=E,C=B,I=w,(x=U)<20?X&C|~X&I:!(x<40)&&x<60?X&C|X&I|C&I:X^C^I)),g(g(T,b[U]),(x=U)<20?1518500249:x<40?1859775393:x<60?-1894007588:-899497514)),T=w,w=B,B=_(E,30),E=P,P=X}P=g(P,N),E=g(E,F),B=g(B,H),w=g(w,z),T=g(T,Y)}return Array(P,E,B,w,T)}function g(f,y){var x=(65535&f)+(65535&y);return(f>>16)+(y>>16)+(x>>16)<<16|65535&x}function _(f,y){return f<<y|f>>>32-y}o.exports=function(f){return m.hash(f,p,20,!0)}}).call(this,n("lYpoI2"),typeof self<"u"?self:typeof window<"u"?window:{},n("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/gulp-browserify/node_modules/crypto-browserify/sha.js","/node_modules/gulp-browserify/node_modules/crypto-browserify")},{"./helpers":4,buffer:3,lYpoI2:11}],9:[function(n,o,i){(function(r,s,a,c,l,d,u,h,A){function m(y,x){var C=(65535&y)+(65535&x);return(y>>16)+(x>>16)+(C>>16)<<16|65535&C}function p(y,x){var C,I=[1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298],b=[1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225],P=Array(64);y[x>>5]|=128<<24-x%32,y[15+(x+64>>9<<4)]=x;for(var E,B,w=0;w<y.length;w+=16){for(var T=b[0],Q=b[1],N=b[2],F=b[3],H=b[4],z=b[5],Y=b[6],U=b[7],X=0;X<64;X++)P[X]=X<16?y[X+w]:m(m(m((B=P[X-2],_(B,17)^_(B,19)^f(B,10)),P[X-7]),(B=P[X-15],_(B,7)^_(B,18)^f(B,3))),P[X-16]),C=m(m(m(m(U,_(B=H,6)^_(B,11)^_(B,25)),H&z^~H&Y),I[X]),P[X]),E=m(_(E=T,2)^_(E,13)^_(E,22),T&Q^T&N^Q&N),U=Y,Y=z,z=H,H=m(F,C),F=N,N=Q,Q=T,T=m(C,E);b[0]=m(T,b[0]),b[1]=m(Q,b[1]),b[2]=m(N,b[2]),b[3]=m(F,b[3]),b[4]=m(H,b[4]),b[5]=m(z,b[5]),b[6]=m(Y,b[6]),b[7]=m(U,b[7])}return b}var g=n("./helpers"),_=function(y,x){return y>>>x|y<<32-x},f=function(y,x){return y>>>x};o.exports=function(y){return g.hash(y,p,32,!0)}}).call(this,n("lYpoI2"),typeof self<"u"?self:typeof window<"u"?window:{},n("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/gulp-browserify/node_modules/crypto-browserify/sha256.js","/node_modules/gulp-browserify/node_modules/crypto-browserify")},{"./helpers":4,buffer:3,lYpoI2:11}],10:[function(n,o,i){(function(r,s,a,c,l,d,u,h,A){i.read=function(m,p,g,_,w){var y,x,C=8*w-_-1,I=(1<<C)-1,b=I>>1,P=-7,E=g?w-1:0,B=g?-1:1,w=m[p+E];for(E+=B,y=w&(1<<-P)-1,w>>=-P,P+=C;0<P;y=256*y+m[p+E],E+=B,P-=8);for(x=y&(1<<-P)-1,y>>=-P,P+=_;0<P;x=256*x+m[p+E],E+=B,P-=8);if(y===0)y=1-b;else{if(y===I)return x?NaN:1/0*(w?-1:1);x+=Math.pow(2,_),y-=b}return(w?-1:1)*x*Math.pow(2,y-_)},i.write=function(m,p,g,_,f,T){var x,C,I=8*T-f-1,b=(1<<I)-1,P=b>>1,E=f===23?Math.pow(2,-24)-Math.pow(2,-77):0,B=_?0:T-1,w=_?1:-1,T=p<0||p===0&&1/p<0?1:0;for(p=Math.abs(p),isNaN(p)||p===1/0?(C=isNaN(p)?1:0,x=b):(x=Math.floor(Math.log(p)/Math.LN2),p*(_=Math.pow(2,-x))<1&&(x--,_*=2),2<=(p+=1<=x+P?E/_:E*Math.pow(2,1-P))*_&&(x++,_/=2),b<=x+P?(C=0,x=b):1<=x+P?(C=(p*_-1)*Math.pow(2,f),x+=P):(C=p*Math.pow(2,P-1)*Math.pow(2,f),x=0));8<=f;m[g+B]=255&C,B+=w,C/=256,f-=8);for(x=x<<f|C,I+=f;0<I;m[g+B]=255&x,B+=w,x/=256,I-=8);m[g+B-w]|=128*T}}).call(this,n("lYpoI2"),typeof self<"u"?self:typeof window<"u"?window:{},n("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/gulp-browserify/node_modules/ieee754/index.js","/node_modules/gulp-browserify/node_modules/ieee754")},{buffer:3,lYpoI2:11}],11:[function(n,o,i){(function(r,s,a,c,l,d,u,h,A){var m,p,g;function _(){}(r=o.exports={}).nextTick=(p=typeof window<"u"&&window.setImmediate,g=typeof window<"u"&&window.postMessage&&window.addEventListener,p?function(f){return window.setImmediate(f)}:g?(m=[],window.addEventListener("message",function(f){var y=f.source;y!==window&&y!==null||f.data!=="process-tick"||(f.stopPropagation(),0<m.length&&m.shift()())},!0),function(f){m.push(f),window.postMessage("process-tick","*")}):function(f){setTimeout(f,0)}),r.title="browser",r.browser=!0,r.env={},r.argv=[],r.on=_,r.addListener=_,r.once=_,r.off=_,r.removeListener=_,r.removeAllListeners=_,r.emit=_,r.binding=function(f){throw Error("process.binding is not supported")},r.cwd=function(){return"/"},r.chdir=function(f){throw Error("process.chdir is not supported")}}).call(this,n("lYpoI2"),typeof self<"u"?self:typeof window<"u"?window:{},n("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/gulp-browserify/node_modules/process/browser.js","/node_modules/gulp-browserify/node_modules/process")},{buffer:3,lYpoI2:11}]},{},[1])(1)})}});function wn(e,t){let n=e.x-t.x,o=e.y-t.y;return Math.sqrt(n*n+o*o)}function UT(e,t){return S1(e,t[0],t[1])}function S1(e,t,n){let o=n.x-t.x,i=n.y-t.y;if(o===0&&i===0)return wn(e,t);let r=Math.max(0,Math.min(1,((e.x-t.x)*o+(e.y-t.y)*i)/(o*o+i*i||1))),s=e.x-t.x-r*o,a=e.y-t.y-r*i;return Math.sqrt(s*s+a*a)}var qye=(e,t,n)=>(t.x-e.x)*(n.y-e.y)-(t.y-e.y)*(n.x-e.x);function xB(e,t){let[n,o]=e,[i,r]=t;if(Math.max(n.x,o.x)>=Math.min(i.x,r.x)&&Math.max(i.x,r.x)>=Math.min(n.x,o.x)&&Math.max(n.y,o.y)>=Math.min(i.y,r.y)&&Math.max(i.y,r.y)>=Math.min(n.y,o.y)&&qye(n,o,i)*qye(n,o,r)<=0&&qye(i,r,n)*qye(i,r,o)<=0)return 0;return Math.min(UT(n,t),UT(o,t),UT(i,e),UT(r,e))}var li=(e)=>e.slice(1).reduce((t,n,o)=>t+wn(e[o],n),0);function qg(e){let t=[];for(let[n,o]of e.entries()){if(t.length&&wn(t.at(-1),o)<0.000000000001){if(n===e.length-1)t[t.length-1]=o;continue}while(t.length>1){let i=t[t.length-2],r=t.at(-1),s=r.x-i.x,a=r.y-i.y,c=o.x-r.x,l=o.y-r.y,d=Math.hypot(s,a)*Math.hypot(c,l);if(s*c+a*l<=0||Math.abs(s*l-a*c)>d*0.00000001||UT(r,[i,o])>0.0000000001)break;t.pop()}t.push(o)}return t}function W_(e,t){let n=e.connections.find((o)=>o.name===t);return(e.traces??[]).filter((o)=>o.connection_name===t||o.source_trace_id===(n?.source_trace_id??t)).reduce((o,i)=>o+li(i.route),0)}function b3(e,t){return(e.buses??[]).map((n)=>{let o=n.connectionNames.map((a)=>{let c=t.find((l)=>l.connection_name===a);return{name:a,carrierLengthMm:c?li(c.route):null,fixedLengthMm:W_(e,a),totalLengthMm:c?li(c.route)+W_(e,a):null}}),i=o.every((a)=>a.totalLengthMm!==null),r=o.map((a)=>a.totalLengthMm??0),s=i&&r.length?Math.max(...r)-Math.min(...r):null;return{busId:n.busId,minLengthMm:n.minLength??null,aboveMinimumLength:n.minLength===void 0?!0:i&&r.every((a)=>a>=n.minLength-0.0000001),maxLengthMm:n.maxLength??null,withinLengthLimit:n.maxLength===void 0?!0:i&&r.every((a)=>a<=n.maxLength+0.0000001),toleranceMm:n.maxLengthSkew??null,skewMm:s,matched:n.maxLengthSkew!==void 0&&s!==null&&s<=n.maxLengthSkew+0.0000001,lengths:o}})}function hWe(e){return[...(e.buses??[]).filter((t)=>t.maxLengthSkew!==void 0).map((t)=>({names:t.connectionNames,tolerance:t.maxLengthSkew})),...(e.differentialPairs??[]).map((t)=>({names:t.connectionNames,tolerance:t.lengthTolerance}))]}function tD(e,t){let n=new Map(t.map((i)=>[i.connection_name,li(i.route)+W_(e,i.connection_name)]));for(let i of e.buses??[])if(i.minLength!==void 0){for(let r of i.connectionNames)if(n.has(r))n.set(r,Math.max(n.get(r),i.minLength))}let o=hWe(e);for(let i=0;i<n.size;i++){let r=!1;for(let{names:s,tolerance:a}of o){let c=Math.max(...s.map((l)=>n.get(l)))-a;for(let l of s)if(n.get(l)<c-0.000000001)n.set(l,c),r=!0}if(!r)break}return n}function rVe(e,t){return b3({...e,buses:(e.differentialPairs??[]).map((n,o)=>({busId:`pair_${o}`,connectionNames:n.connectionNames,maxLengthSkew:n.lengthTolerance}))},t)}function P1(e,t){return Math.min(1/0,...(e.buses??[]).filter((n)=>n.connectionNames.includes(t)&&n.maxLength!==void 0).map((n)=>n.maxLength-W_(e,t)))}function Iui(e,t){for(let n of e.buses??[])if(n.maxLength!==void 0&&n.connectionNames.some((o)=>(t.get(o)??1/0)>n.maxLength+0.0000001))throw Error(`${n.busId}: matching would exceed maximum length ${n.maxLength} mm`)}function esn(e,t){let n=new Set(e.buses?.flatMap((r)=>r.connectionNames)),o=tD(e,t),i=new Set;for(let r of e.differentialPairs??[])if(r.connectionNames.some((s)=>{let a=t.find((h)=>h.connection_name===s);if(!a?.coupledSection||!n.has(s))return!1;let[c,l]=a.coupledSection,d=0;for(let h=c+1;h<=l;h++)d=Math.max(d,wn(a.route[h-1],a.route[h]));return(o.get(s)??0)-li(a.route)-W_(e,s)>d/2}))for(let s of r.connectionNames)i.add(s);return i}function s$t(e){if(e.some((c)=>!c.coupledSection))return e;let t=e.map((c)=>c.coupledSection[0]),n=e.map((c,l)=>c.route[t[l]]),o=e.map((c,l)=>c.route[t[l]+1]);if(n.some((c)=>c?.route_type!=="wire")||o.some((c)=>c?.route_type!=="wire")||n.some((c)=>c.layer!==n[0].layer)||o.some((c)=>c.layer!==n[0].layer)||e.some((c,l)=>c.curvedSegments?.includes(t[l]+1)))return e;let i=n.map((c,l)=>{let d=wn(c,o[l]);return{span:d,x:(o[l].x-c.x)/d,y:(o[l].y-c.y)/d}});if(i.some((c)=>c.span<0.00000001)||wn(i[0],i[1])>0.0000001)return e;let r=i[0],s=(c)=>c.x*r.x+c.y*r.y,a=Math.max(...n.map(s));if(n.some((c,l)=>a-s(c)>i[l].span+0.00000001))return e;return e.map((c,l)=>{let d=t[l],u=a-s(n[l]);if(u<0.00000001)return c;if(Math.abs(u-i[l].span)<0.00000001){if(d+1>=c.coupledSection[1])return c;return{...c,coupledSection:[d+1,c.coupledSection[1]]}}let h={...n[l],x:n[l].x+r.x*u,y:n[l].y+r.y*u};return{...c,route:[...c.route.slice(0,d+1),h,...c.route.slice(d+1)],coupledSection:[d+1,c.coupledSection[1]+1],curvedSegments:c.curvedSegments?.map((A)=>A>d?A+1:A)}})}function a$t(e){let t=e.route.length;return{...e,route:e.route.toReversed(),coupledSection:e.coupledSection&&[t-1-e.coupledSection[1],t-1-e.coupledSection[0]],curvedSegments:e.curvedSegments?.map((n)=>t-n).sort((n,o)=>n-o)}}function DCe(e,t){let n=[...t];for(let o of e.differentialPairs??[]){let i=o.connectionNames.map((a)=>n.findIndex((c)=>c.connection_name===a)),r=i.map((a)=>n[a]);if(r.some((a)=>!a?.coupledSection))continue;let s=s$t(s$t(r).map(a$t)).map(a$t);i.forEach((a,c)=>{n[a]=s[c]})}return n}var b1=(e,t)=>e.x>=t.minX&&e.x<=t.maxX&&e.y>=t.minY&&e.y<=t.maxY;function TF(e,t){let n=e.obstacles.filter((r)=>r.componentId),o=new Map,i=(r,s,a,c=a)=>{r.minX=Math.min(r.minX,s.x-a),r.maxX=Math.max(r.maxX,s.x+a),r.minY=Math.min(r.minY,s.y-c),r.maxY=Math.max(r.maxY,s.y+c)};for(let r of n){let s=o.get(r.componentId);if(!s){let c={minX:1/0,maxX:-1/0,minY:1/0,maxY:-1/0};s={pads:c,copper:{...c}},o.set(r.componentId,s)}let a=(r.ccwRotationDegrees??0)*Math.PI/180;i(s.pads,r.center,(Math.abs(Math.cos(a))*r.width+Math.abs(Math.sin(a))*r.height)/2,(Math.abs(Math.sin(a))*r.width+Math.abs(Math.cos(a))*r.height)/2)}for(let r of o.values())r.copper={...r.pads};for(let r of e.traces??[]){let s=r.route.filter((_)=>_.route_type==="via");if(s.length!==1||!r.route.length)continue;let a=r.route[0],c=n.find((_)=>wn(_.center,a)<0.0001);if(!c)continue;let l=o.get(c.componentId),d=s[0],u=(d.via_diameter??e.minViaPadDiameter??0.6)/2,h=(c.ccwRotationDegrees??0)*Math.PI/180,A=e.minTraceToPadEdgeClearance??e.defaultObstacleMargin??0.075,m=(Math.abs(Math.cos(h))*c.width+Math.abs(Math.sin(h))*c.height)/2+u+A,p=(Math.abs(Math.sin(h))*c.width+Math.abs(Math.cos(h))*c.height)/2+u+A,g=0.001;if(Math.abs(d.x-a.x)>m+g+0.0001||Math.abs(d.y-a.y)>p+g+0.0001)continue;i(l.copper,d,(d.via_diameter??e.minViaPadDiameter??0.6)/2)}for(let r of o.values())r.copper.minX-=t,r.copper.maxX+=t,r.copper.minY-=t,r.copper.maxY+=t;return[...o.values()]}function Gie(e,t,n={}){let o=t.route[0].width,i=(e.traces??[]).filter((a)=>a.connection_name===t.connection_name).flatMap((a)=>a.route.filter((c)=>c.route_type==="via")).map((a)=>({via:a,reach:((a.via_diameter??e.minViaPadDiameter??0.6)+o)/2}));if(!i.length)return(a)=>!0;let r=t.route.filter((a)=>a.route_type==="wire"),s=(a,c)=>Math.abs(a.x-c.x)<0.00000001&&Math.abs(a.y-c.y)<0.00000001;return(a)=>{let c=0,l=0;while(c<Math.min(a.length,r.length)&&s(a[c],r[c]))c++;while(l<Math.min(a.length,r.length)&&s(a[a.length-1-l],r[r.length-1-l]))l++;for(let{via:d,reach:u}of i){let h=s(d,a[0]);if(!h&&!s(d,a.at(-1)))continue;let A=0;for(let m=1;m<a.length;m++){let p=h?m:a.length-m,g=a[h?p-1:p],_=a[h?p:p-1];if(!(n.preserveExistingApproach!==!1&&(h?p<c:p>=a.length-l+1))&&A>u+0.000000001&&Math.min(g.x,_.x)<=d.x+u&&Math.max(g.x,_.x)>=d.x-u&&Math.min(g.y,_.y)<=d.y+u&&Math.max(g.y,_.y)>=d.y-u&&S1(d,g,_)<=u+0.000000001)return!1;if(A<=u+0.000000001)A+=wn(g,_)}}return!0}}var Yie=class{root;constructor(e){let t=e.map((r)=>({copper:r,...r.rect??{minX:Math.min(r.a.x,r.b.x)-r.radius,maxX:Math.max(r.a.x,r.b.x)+r.radius,minY:Math.min(r.a.y,r.b.y)-r.radius,maxY:Math.max(r.a.y,r.b.y)+r.radius}})),n=(r,s)=>{let a=t[r];t[r]=t[s],t[s]=a},o=(r,s,a,c)=>{let l=(d)=>c?d.minX+d.maxX:d.minY+d.maxY;while(s-r>1){let d=l(t[r]),u=l(t[r+s>>1]),h=l(t[s-1]),A=d<u?u<h?u:Math.max(d,h):d<h?d:Math.max(u,h),m=r,p=s,g=r;while(g<p){let _=l(t[g]);if(_<A)n(m++,g++);else if(_>A)n(g,--p);else g++}if(a<m)s=m;else if(a>=p)r=p;else return}},i=(r,s)=>{let a={minX:1/0,maxX:-1/0,minY:1/0,maxY:-1/0};for(let d=r;d<s;d++){let u=t[d];a.minX=Math.min(a.minX,u.minX),a.maxX=Math.max(a.maxX,u.maxX),a.minY=Math.min(a.minY,u.minY),a.maxY=Math.max(a.maxY,u.maxY)}if(s-r<=8)return{...a,entries:t.slice(r,s)};let c=a.maxX-a.minX>=a.maxY-a.minY,l=r+s>>1;return o(r,s,l,c),{...a,left:i(r,l),right:i(l,s)}};if(t.length)this.root=i(0,t.length)}distanceToPoint(e,t,n=0){let o=1/0,i=(s)=>{let a=Math.max(s.minX-e.x,0,e.x-s.maxX),c=Math.max(s.minY-e.y,0,e.y-s.maxY);return a||c?Math.hypot(a,c)-n:-1/0},r=(s,a)=>{if(a>=o)return;if(s.entries){for(let d of s.entries)if(i(d)<o)o=Math.min(o,t(d.copper));return}let c=i(s.left),l=i(s.right);if(c<=l)r(s.left,c),r(s.right,l);else r(s.right,l),r(s.left,c)};if(this.root)r(this.root,i(this.root));return o}some(e,t){let n=(o)=>{if(o.minX>e.maxX||o.maxX<e.minX||o.minY>e.maxY||o.maxY<e.minY)return!1;if(o.entries){for(let i of o.entries){if(i.minX>e.maxX||i.maxX<e.minX||i.minY>e.maxY||i.maxY<e.minY)continue;if(t(i.copper))return!0}return!1}return n(o.left)||n(o.right)};return this.root?n(this.root):!1}};function Ls(e){let t=[];for(let o of e.obstacles){let i=(o.ccwRotationDegrees??0)*Math.PI/180,r=Math.abs(Math.cos(i))*o.width+Math.abs(Math.sin(i))*o.height,s=Math.abs(Math.sin(i))*o.width+Math.abs(Math.cos(i))*o.height;for(let a of o.layers)t.push({a:o.center,b:o.center,radius:o.shape==="circle"?o.width/2:0,layer:a,owners:o.connectedTo,rect:o.shape==="circle"?void 0:{minX:o.center.x-r/2,maxX:o.center.x+r/2,minY:o.center.y-s/2,maxY:o.center.y+s/2}})}let n=Array.from({length:e.layerCount},(o,i)=>i===0?"top":i===e.layerCount-1?"bottom":`inner${i}`);for(let o of e.traces??[])for(let i=0;i<o.route.length;i++){let r=o.route[i],s=o.route[i+1],a=[o.connection_name??"",o.source_trace_id??""];if(r.route_type==="via"){let c=n.indexOf(r.from_layer),l=n.indexOf(r.to_layer);for(let d of r.layers??n.slice(Math.min(c,l),Math.max(c,l)+1))t.push({a:r,b:r,radius:(r.via_diameter??0.3)/2,layer:d,owners:a})}else if(s?.route_type==="wire"){if(r.layer!==s.layer)throw Error("Fixed trace changes layer without a via");t.push({a:r,b:s,radius:r.width/2,layer:r.layer,owners:a})}if(s&&r.route_type!==s.route_type&&wn(r,s)>0.0000000001){let c=r.route_type==="wire"?r:s;t.push({a:r,b:s,radius:c.width/2,layer:c.layer,owners:a})}}return t}function Yi(e){return e.route.slice(1).map((t,n)=>({a:e.route[n],b:t,radius:t.width/2,layer:t.layer,owners:[e.connection_name??""]}))}var bui=(e,t,n)=>{let o=0,i=1;for(let[r,s,a,c]of[[e.x,t.x-e.x,n.minX,n.maxX],[e.y,t.y-e.y,n.minY,n.maxY]]){if(Math.abs(s)<0.000000000001){if(r<a||r>c)return!1;continue}let l=(a-r)/s,d=(c-r)/s;if(l>d)[l,d]=[d,l];if(o=Math.max(o,l),i=Math.min(i,d),o>i)return!1}return!0};function Vie(e,t,n){if(!n.rect){if(e.x===t.x&&e.y===t.y){if(n.a.x===n.b.x&&n.a.y===n.b.y)return wn(e,n.a)-n.radius;return UT(e,[n.a,n.b])-n.radius}if(n.a.x===n.b.x&&n.a.y===n.b.y)return UT(n.a,[e,t])-n.radius;return xB([e,t],[n.a,n.b])-n.radius}let o=n.rect;if(bui(e,t,o))return 0;let i=[{x:o.minX,y:o.minY},{x:o.maxX,y:o.minY},{x:o.maxX,y:o.maxY},{x:o.minX,y:o.maxY}];return Math.min(...i.map((r,s)=>xB([e,t],[r,i[(s+1)%4]])))}function sVe(e,t,n,o){if(n.rect)return Vie(e,t,n)<o;let{a:i,b:r,radius:s}=n;if(i.x===r.x&&i.y===r.y)return S1(i,e,t)-s<o;if(e.x===t.x&&e.y===t.y)return S1(e,i,r)-s<o;if(Math.max(e.x,t.x)>=Math.min(i.x,r.x)&&Math.max(i.x,r.x)>=Math.min(e.x,t.x)&&Math.max(e.y,t.y)>=Math.min(i.y,r.y)&&Math.max(i.y,r.y)>=Math.min(e.y,t.y)&&((t.x-e.x)*(i.y-e.y)-(t.y-e.y)*(i.x-e.x))*((t.x-e.x)*(r.y-e.y)-(t.y-e.y)*(r.x-e.x))<=0&&((r.x-i.x)*(e.y-i.y)-(r.y-i.y)*(e.x-i.x))*((r.x-i.x)*(t.y-i.y)-(r.y-i.y)*(t.x-i.x))<=0)return-s<o;return S1(e,i,r)-s<o||S1(t,i,r)-s<o||S1(i,e,t)-s<o||S1(r,e,t)-s<o}function Sui(e){let t=e.b.x-e.a.x,n=e.b.y-e.a.y;return{copper:e,ax:e.a.x,ay:e.a.y,bx:e.b.x,by:e.b.y,dx:t,dy:n,denominator:t*t+n*n}}function uW(e,t,n,o,i,r,s){let a=e-n,c=t-o;if(i===0&&r===0)return Math.sqrt(a*a+c*c);let l=Math.max(0,Math.min(1,(a*i+c*r)/(s||1))),d=a-l*i,u=c-l*r;return Math.sqrt(d*d+u*u)}function c$t(e,t,n,o,i,r,s,a,c){let l=a.copper.radius;if(a.copper.rect)return sVe({x:e,y:t},{x:n,y:o},a.copper,c);if(a.dx===0&&a.dy===0)return uW(a.ax,a.ay,e,t,i,r,s)-l<c;if(i===0&&r===0)return uW(e,t,a.ax,a.ay,a.dx,a.dy,a.denominator)-l<c;if(Math.max(e,n)>=Math.min(a.ax,a.bx)&&Math.max(a.ax,a.bx)>=Math.min(e,n)&&Math.max(t,o)>=Math.min(a.ay,a.by)&&Math.max(a.ay,a.by)>=Math.min(t,o)&&(i*(a.ay-t)-r*(a.ax-e))*(i*(a.by-t)-r*(a.bx-e))<=0&&(a.dx*(t-a.ay)-a.dy*(e-a.ax))*(a.dx*(o-a.ay)-a.dy*(n-a.ax))<=0)return-l<c;return uW(e,t,a.ax,a.ay,a.dx,a.dy,a.denominator)-l<c||uW(n,o,a.ax,a.ay,a.dx,a.dy,a.denominator)-l<c||uW(a.ax,a.ay,e,t,i,r,s)-l<c||uW(a.bx,a.by,e,t,i,r,s)-l<c}var Ar=class{constructor(e,t,n,o){this.input=e,this.connection=t,this.width=n,this.owners=new Set([t.name,t.source_trace_id,...t.pointsToConnect.flatMap((i)=>[i.pointId,i.pcb_port_id])].filter((i)=>!!i)),this.copper=o.filter((i)=>i.layer===t.pointsToConnect[0].layer&&!i.owners.some((r)=>this.owners.has(r))),this.margin=n/2+(e.minTraceToPadEdgeClearance??e.defaultObstacleMargin??0.075)}input;connection;width;visibleCalls=0;copperIndex;copper;owners;margin;visible(e,t){let n=this.width/2+(this.input.minBoardEdgeClearance??0),o=this.input.bounds;if([e,t].some((c)=>c.x<o.minX+n-0.000000001||c.x>o.maxX-n+0.000000001||c.y<o.minY+n-0.000000001||c.y>o.maxY-n+0.000000001))return!1;let i=Math.min(e.x,t.x)-this.margin,r=Math.max(e.x,t.x)+this.margin,s=Math.min(e.y,t.y)-this.margin,a=Math.max(e.y,t.y)+this.margin;if(++this.visibleCalls===16)this.copperIndex=new Yie(this.copper);if(this.copperIndex)return!this.copperIndex.some({minX:i,maxX:r,minY:s,maxY:a},(c)=>sVe(e,t,c,this.margin-0.00000001));for(let c of this.copper){let l=c.rect??{minX:Math.min(c.a.x,c.b.x)-c.radius,maxX:Math.max(c.a.x,c.b.x)+c.radius,minY:Math.min(c.a.y,c.b.y)-c.radius,maxY:Math.max(c.a.y,c.b.y)+c.radius};if(l.minX>r||l.maxX<i||l.minY>a||l.maxY<s)continue;if(sVe(e,t,c,this.margin-0.00000001))return!1}return!0}pathVisible(e){return e.slice(1).every((t,n)=>this.visible(e[n],t))}vertices(){let e=[],t=Math.SQRT2-1;for(let i of this.copper)if(i.rect){let r=i.rect,s=this.margin+0.00001;e.push({x:r.minX-s,y:r.minY-s},{x:r.minX-s,y:r.maxY+s},{x:r.maxX+s,y:r.minY-s},{x:r.maxX+s,y:r.maxY+s})}else{let r=i.radius+this.margin+0.00001;for(let s of wn(i.a,i.b)<0.000000001?[i.a]:[i.a,i.b])for(let[a,c]of[[1,t],[t,1],[-t,1],[-1,t],[-1,-t],[-t,-1],[t,-1],[1,-t]])e.push({x:s.x+a*r,y:s.y+c*r})}let o=new Set;return e.filter((i)=>{let r=`${i.x.toFixed(9)},${i.y.toFixed(9)}`;if(o.has(r))return!1;return o.add(r),this.visible(i,i)})}};function Pui(e,t,n){let o=Ls(e);function*i(c,l){let d=e.connections.find((y)=>y.name===c.connection_name),u=c.coupledSection?(y)=>!0:Gie(e,c),h=c.route[0].width,A=W_(e,d.name),m=n.get(d.name)-li(c.route)-A;if(m<0.00000001){yield c;return}let p=e.minTraceToPadEdgeClearance??e.defaultObstacleMargin??0.075,g=Math.max(h+p,3*h),_=2*(g+2*h),f=c.route.slice(1).map((y,x)=>({i:x,span:wn(c.route[x],y)})).sort((y,x)=>x.span-y.span);for(let{i:y}of f){let x=c.route[y],C=c.route[y+1],I=wn(x,C);if(I<0.01)continue;let b=(C.x-x.x)/I,P=(C.y-x.y)/I,E=Math.floor(I*0.9/_),B=Math.min(E,Math.max(2,Math.ceil(m/(12*h)))),w=Array.from({length:E},(T,Q)=>Q+1).sort((T,Q)=>Math.abs(T-B)-Math.abs(Q-B)||Q-T);for(let T of w)for(let Q of[0.9,0.65,0.4]){let N=I*Q/T;if(N<_)continue;let F=Math.min(m/(2*T),N/10,(N/2-g)/2),H=m/(2*T)+2*F*(2-Math.SQRT2);for(let z of[0.5,0,1])for(let Y of[1,-1]){let U=(W,j)=>({x:x.x+b*W-P*j*Y,y:x.y+P*W+b*j*Y}),X=[U(0,0)];for(let W=0;W<T;W++){let j=I*(1-Q)*(0.05+0.9*z)+W*N,q=N*0.5;X.push(...[[j,0],[j+F,F],[j+F,H-F],[j+2*F,H],[j+q-2*F,H],[j+q-F,H-F],[j+q-F,F],[j+q,0]].map(([ne,ce])=>U(ne,ce)))}if(X.push(U(I,0)),!l.pathVisible(X))continue;let V=qg([...c.route.slice(0,y),...X,...c.route.slice(y+2)]);if(Math.abs(li(V)+A-n.get(d.name))>0.000001)continue;if(!u(V)||!bc(V,g))continue;yield{...c,route:V.map((W)=>({...W,route_type:"wire",layer:d.pointsToConnect[0].layer,width:h}))}}}}}let r=[...t],s=new Set(t.map((c,l)=>l)),a=!0;while(s.size&&a){a=!1;for(let c of s){let l=e.connections.find((h)=>h.name===t[c].connection_name),d=new Ar(e,l,t[c].route[0].width,[...o,...r.flatMap(Yi)]),u=i(t[c],d).next().value;if(!u)continue;r[c]=u,s.delete(c),a=!0}}if(s.size)throw Error(`Insufficient tuning clearance for ${[...s].map((c)=>t[c].connection_name).join(", ")}`);return r}function bc(e,t){let n=[0],o=[0],i=[0];for(let r=1;r<e.length-1;r++){let s={x:e[r].x-e[r-1].x,y:e[r].y-e[r-1].y},a={x:e[r+1].x-e[r].x,y:e[r+1].y-e[r].y},c=Math.abs(Math.atan2(s.x*a.y-s.y*a.x,s.x*a.x+s.y*a.y)),l=Math.abs(s.x*a.y-s.y*a.x),d=l<0.000000000001?1/0:Math.hypot(s.x,s.y)*Math.hypot(a.x,a.y)*wn(e[r-1],e[r+1])/(2*l);o.push(o[r-1]+c),i.push(i[r-1]+Number(c>Math.PI/8+0.00000001||d<t/2-0.00000001))}for(let r=1;r<e.length;r++)n.push(n[r-1]+wn(e[r-1],e[r]));for(let r=0;r<e.length-1;r++)for(let s=r+2;s<e.length-1;s++){let a=e[r],c=e[r+1],l=e[s],d=e[s+1],u=Math.max(t,0.000000001);if(Math.max(a.x,c.x)+u<Math.min(l.x,d.x)||Math.max(l.x,d.x)+u<Math.min(a.x,c.x)||Math.max(a.y,c.y)+u<Math.min(l.y,d.y)||Math.max(l.y,d.y)+u<Math.min(a.y,c.y))continue;let h=xB([a,c],[l,d]);if(h<0.000000001&&n[s]-n[r+1]>0.00000001)return!1;if(n[s]-n[r+1]<=Math.PI*t+0.00000001&&(o[s]-o[r]<=Math.PI/2+0.00000001||o[s]-o[r]<=Math.PI+0.00000001&&i[s]===i[r]))continue;if(h>=t-0.00000001)continue;let A=0,m=0;for(let p=r;p<=s;p++){let g=e[p+1].x-e[p].x,_=e[p+1].y-e[p].y;if(Math.abs(g)>0.00000001){if(A&&A!==Math.sign(g))return!1;A=Math.sign(g)}if(Math.abs(_)>0.00000001){if(m&&m!==Math.sign(_))return!1;m=Math.sign(_)}}}return!0}function aD(e,t,n=Ls(e),o=1.5){if(!Number.isFinite(o)||o<=0)throw Error("Corner trim must be a positive finite number of trace widths");let i=t.map((s)=>({...s,route:[...s.route]})),r=e.minTraceToPadEdgeClearance??e.defaultObstacleMargin??0.075;for(let[s,a]of i.entries()){if(a.route.some((u)=>u.route_type!=="wire"))continue;let c=e.connections.find((u)=>u.name===a.connection_name);if(!c)continue;let l=Ls({...e,obstacles:[],traces:i.filter((u,h)=>h!==s)}),d=new Map;for(let u=1;u<a.route.length-1;u++){let[h,A,m]=a.route.slice(u-1,u+2);if(h.route_type!=="wire"||A.route_type!=="wire"||m.route_type!=="wire"||h.layer!==A.layer||A.layer!==m.layer||a.curvedSegments?.some((E)=>E===u||E===u+1)||a.coupledSection&&u>a.coupledSection[0]&&u<a.coupledSection[1])continue;let p=wn(h,A),g=wn(A,m);if(p<0.00000001||g<0.00000001)continue;let _={x:(A.x-h.x)/p,y:(A.y-h.y)/p},f={x:(m.x-A.x)/g,y:(m.y-A.y)/g},y=(E)=>Math.min(Math.abs(E.x),Math.abs(E.y))<0.00000001||Math.abs(Math.abs(E.x)-Math.abs(E.y))<0.00000001,x=_.x*f.x+_.y*f.y,C=Math.abs(x+Math.SQRT1_2)<0.00000001;if(!y(_)||!y(f)||Math.abs(x)>0.00000001&&!C)continue;let I=`${A.layer}/${A.width}`,b=d.get(I);if(!b)b=new Ar(e,{...c,pointsToConnect:c.pointsToConnect.map((E)=>({...E,layer:A.layer}))},A.width,[...n,...l]),d.set(I,b);let P=Math.min(o*A.width,p/2,g/2);for(let E=0;E<8;E++){let B=P/2**E;if(B<0.000001)break;let w={...A,x:A.x-_.x*B,y:A.y-_.y*B},T={...A,x:A.x+f.x*B,y:A.y+f.y*B},Q=Math.sign(_.x*f.y-_.y*f.x),N=(Math.SQRT2-1)*B,F={...A,x:w.x+(_.x-Q*_.y)*Math.SQRT1_2*N,y:w.y+(_.y+Q*_.x)*Math.SQRT1_2*N},H=C?[w,F,T]:[w,T],z=H.length-1,Y=[...a.route.slice(0,u),...H,...a.route.slice(u+1)];if(!b.pathVisible(Y)||!bc(Y,A.width+r)&&bc(a.route,A.width+r))continue;a.route=Y,a.curvedSegments=a.curvedSegments?.map((U)=>U>u?U+z:U),a.coupledSection=a.coupledSection?.map((U,X)=>U>u||U===u&&X===0?U+z:U),u+=z;break}}}return i}function uF(e){return e.every((t)=>{let n,o;for(let i of t.route){if(i.route_type!=="wire"){n=o=void 0;continue}if(!n||n.layer!==i.layer){n=i,o=void 0;continue}let r=wn(n,i);if(r<0.00000001)continue;let s={x:(i.x-n.x)/r,y:(i.y-n.y)/r};if(o&&o.x*s.x+o.y*s.y<Math.cos(45.2*Math.PI/180))return!1;n=i,o=s}return!0})}function cD(e,t){return(e.differentialPairs??[]).map((n)=>{let o=n.connectionNames.map((g)=>t.find((_)=>_.connection_name===g||_.source_trace_id===g)),i=o.map((g)=>g?.coupledSection?g.route.slice(g.coupledSection[0],g.coupledSection[1]+1):[]),r=o.every((g)=>g?.coupledSection?.length===2&&g.coupledSection.every(Number.isInteger)&&g.coupledSection[0]>=0&&g.coupledSection[1]<g.route.length&&g.coupledSection[0]<g.coupledSection[1])&&i.every((g)=>g.length>=2&&g.every((_)=>_.route_type==="wire"&&Number.isFinite(_.x)&&Number.isFinite(_.y)&&Number.isFinite(_.width)&&_.width>0))&&i.flat().every((g)=>g.layer===i[0][0]?.layer),s=n.traceGap!==void 0||n.maxUncoupledLength!==void 0,a=n.traceGap??e.minTraceToPadEdgeClearance??e.defaultObstacleMargin??0.075,c={connectionNames:n.connectionNames,requestedGapMm:n.traceGap??null};if(!r)return{...c,sharedSectionPresent:!1,minEdgeGapMm:null,maxEdgeGapMm:null,maxSamplingErrorMm:null,sharedCopperMm:null,maxAllowedEdgeGapMm:null,matched:!s};let l=i.map((g)=>g[0].width);if(i.some((g,_)=>g.some((f)=>Math.abs(f.width-l[_])>0.00000001)))return{...c,sharedSectionPresent:!1,minEdgeGapMm:null,maxEdgeGapMm:null,maxSamplingErrorMm:null,sharedCopperMm:null,maxAllowedEdgeGapMm:null,matched:!s};let d=(l[0]+l[1])/2,u=(d+a)/Math.cos(Math.PI/8)-d+0.002,h=1/0,A=-1/0,m=0,p=[0,0];for(let g=0;g<2;g++){let _=i[g],f=o[1-g].route,y=f.slice(1).flatMap((C,I)=>{let b=f[I];return b.route_type==="wire"&&C.route_type==="wire"&&b.layer===_[0].layer&&C.layer===_[0].layer?[{a:b,b:C,radius:b.width/2,layer:b.layer,owners:[]}]:[]}),x=new Yie(y);for(let C=1;C<_.length;C++){let I=_[C-1],b=_[C],P=wn(I,b),E=Math.max(1,Math.ceil(P/0.002));p[g]+=P,m=Math.max(m,P/(2*E));for(let B=0;B<E;B++){let w=(B+0.5)/E,T={x:I.x+(b.x-I.x)*w,y:I.y+(b.y-I.y)*w},Q=x.distanceToPoint(T,(N)=>S1(T,N.a,N.b)-N.radius)-I.width/2;h=Math.min(h,Q),A=Math.max(A,Q)}}}return{...c,sharedSectionPresent:!0,minEdgeGapMm:h,maxEdgeGapMm:A,maxSamplingErrorMm:m,sharedCopperMm:p,maxAllowedEdgeGapMm:u,matched:!s||p.every((g)=>g>0)&&A+m<=u}})}function tsn(e,t,n,o,i,r,s){let a=wn(e,t),c=s+n/2;if(!Number.isFinite(a+n+o+s)||n<0||r!==1&&r!==-1||s<=0||o<=0||!Number.isInteger(i)||i<1||i>64||a<6*c)return null;let l=(4*i+2)*c,d=(t.x-e.x)/a,u=(t.y-e.y)/a,h=(f)=>{let y=[{x:0,y:0},{x:c,y:0},{x:c,y:l},{x:f,y:l}];for(let I=1;I<=2*i;I++){let b=I%2?3*c:f,P=l-2*c*I;y.push({x:y.at(-1).x,y:P},{x:b,y:P})}y.push({x:f,y:0},{x:a,y:0});let x=[[],[]],C=(I,b,P,E)=>{for(let B=0;B<(n?2:1);B++){let w=(B===0?1:-1)*n/2,T=I-r*E*w,Q=r*b+P*w,N={x:e.x+d*T-u*Q,y:e.y+u*T+d*Q};if(!x[B].length||wn(x[B].at(-1),N)>0.0000000001)x[B].push(N)}};C(0,0,1,0);for(let I=1;I<y.length-1;I++){let b=y[I-1],P=y[I],E=y[I+1],B=wn(b,P),w=wn(P,E),T={x:(P.x-b.x)/B,y:(P.y-b.y)/B},Q={x:(E.x-P.x)/w,y:(E.y-P.y)/w},N={x:P.x-T.x*c,y:P.y-T.y*c},F={x:N.x+Q.x*c,y:N.y+Q.y*c},H=T.x*Q.y-T.y*Q.x,z=Math.atan2(N.y-F.y,N.x-F.x);for(let Y=0;Y<=18;Y++){let U=z+H*Math.PI/2*Y/18;C(F.x+c*Math.cos(U),F.y+c*Math.sin(U),-H*Math.sin(U),H*Math.cos(U))}}if(C(a,0,1,0),!n)x[1]=x[0];return x},A=5*c,m=a-c,p=4*(i+1)*c*(36*Math.sin(Math.PI/72)-2),g=2*l+4*i*c+p;if(g>o+0.00000001)return null;let _=A+(o-g)/(2*i);if(_>m+0.00000001)return null;return h(Math.min(_,m))}function vui(e,t,n,o,i,r){return tsn(e,t,0,n,o,i,r)?.[0]??null}function Eui(e,t,n,o,i,r){let s=wn(e,t),a=s/o;if(s<=0||n<=0||o<1)return null;let c=(t.x-e.x)/s,l=(t.y-e.y)/s,d=a*a/(2*Math.PI*Math.PI*r),u=Math.max(48,Math.ceil(a/Math.max(0.005,r/6))),h=[],A=[];for(let f=0;f<o;f++)for(let y=0;y<u;y++)h.push(a*(f+y/u)),A.push(1-Math.cos(2*Math.PI*y/u));let m=(f)=>{let y=[];for(let x=0;x<h.length;x++){let C=h[x],I=i*f*A[x]/2;y.push({x:e.x+c*C-l*I,y:e.y+l*C+c*I})}return y.push(t),y},p=(f)=>{let y=0,x=0,C=0;for(let I=0;I<h.length;I++){let b=h[I],P=i*f*A[I]/2,E=e.x+c*b-l*P,B=e.y+l*b+c*P;if(I>0){let w=x-E,T=C-B;y+=Math.sqrt(w*w+T*T)}x=E,C=B}if(h.length){let I=x-t.x,b=C-t.y;y+=Math.sqrt(I*I+b*b)}return y},g=0,_=Math.min(d,n+s);if(p(_)-s<n)return null;for(let f=0;f<40;f++){let y=(g+_)/2;if(p(y)-s<n)g=y;else _=y}return m((g+_)/2)}function Mui(e,t,n,o,i,r,s){let a=wn(e,t),c=a/i;if(a<=0||o<=0)return null;let l=(t.x-e.x)/a,d=(t.y-e.y)/a,u=c*c/(2*Math.PI*Math.PI*(s+n/2)),h=Math.max(64,Math.ceil(c/Math.max(0.005,s/6))),A=[],m=[],p=[];for(let x=0;x<=h*i;x++){let C=2*Math.PI*x/h;A.push(x*a/(h*i)),m.push(1-Math.cos(C)),p.push(Math.sin(C))}let g=(x)=>{let C=[[],[]];for(let I=0;I<A.length;I++){let b=A[I],P=r*x*m[I]/2,E=r*x*Math.PI/c*p[I],B=Math.hypot(1,E);for(let w=0;w<2;w++){let T=(w===0?1:-1)*n/2,Q=b-T*E/B,N=P+T/B;C[w].push({x:e.x+l*Q-d*N,y:e.y+d*Q+l*N})}}return C},_=(x)=>{let C=[0,0],I=[0,0],b=[0,0];for(let P=0;P<A.length;P++){let E=A[P],B=r*x*m[P]/2,w=r*x*Math.PI/c*p[P],T=Math.hypot(1,w);for(let Q=0;Q<2;Q++){let N=(Q===0?1:-1)*n/2,F=E-N*w/T,H=B+N/T,z=e.x+l*F-d*H,Y=e.y+d*F+l*H;if(P>0){let U=I[Q]-z,X=b[Q]-Y;C[Q]+=Math.sqrt(U*U+X*X)}I[Q]=z,b[Q]=Y}}return Math.min(C[0]-a,C[1]-a)},f=0,y=Math.min(u,o+a);if(_(y)<o)return null;for(let x=0;x<40;x++){let C=(f+y)/2;if(_(C)<o)f=C;else y=C}return g((f+y)/2)}function nsn(e,t,n,o,i,r,s){let a=wn(e,t),c=a/i,l=s+n/2;if(o<=0||i<1||c<4*l)return null;let d=(t.x-e.x)/a,u=(t.y-e.y)/a,h=Math.max(18,Math.ceil(Math.PI*l/(2*Math.max(0.005,s/6)))),A=n===0?1:2,m=[];for(let C=0;C<i;C++)for(let[I,b,P,E]of[[0,0,-Math.PI/2,0],[2*l,1,Math.PI,Math.PI/2],[c-2*l,1,Math.PI/2,0],[c,0,Math.PI,Math.PI*1.5]])for(let B=0;B<=h;B++){let w=P+(E-P)*B/h,T=Math.sign(E-P),Q=C*c+I+l*Math.cos(w),N=-Math.sin(w)*T,F=r*Math.cos(w)*T;for(let H=0;H<A;H++){let z=(H===0?1:-1)*n/2;m.push({px:Q-F*z,sin:l*Math.sin(w),offsetY:N*z,raised:!!b,rail:H})}}let p=(C)=>{let I=[[],[]];for(let b of m){let P=b.raised?C-l:l,E=r*(P+b.sin)+b.offsetY,B={x:e.x+d*b.px-u*E,y:e.y+u*b.px+d*E},w=I[b.rail];if(!w.length||wn(w.at(-1),B)>0.0000000001)w.push(B)}if(A===1)I[1]=I[0];return I},g=[m.filter((C)=>C.rail===0),m.filter((C)=>C.rail===1)],_=(C)=>{let I=1/0;for(let b=0;b<A;b++){let P=0,E=0,B=0,w=!0;for(let T of g[b]){let Q=T.raised?C-l:l,N=r*(Q+T.sin)+T.offsetY,F=e.x+d*T.px-u*N,H=e.y+u*T.px+d*N,z=P-F,Y=E-H,U=Math.sqrt(z*z+Y*Y);if(w||U>0.0000000001){if(!w)B+=U;P=F,E=H,w=!1}}I=Math.min(I,B-a)}return I},f=2*l,y=_(f);if(y>o+0.00000001)return null;let x=f+Math.max(0,o-y)/(2*i);return x=Math.max(f,x+(o-_(x))/(2*i)),p(x)}function Bui(e,t,n,o,i,r){return nsn(e,t,0,n,o,i,r)?.[0]??null}var wui=class extends Error{constructor(e,t){super(`Insufficient tuning clearance for ${t.join(", ")}`);this.traces=e,this.unfinished=t}traces;unfinished};function WW(e,t,n,o={}){let i=0,r=!1,s=Ls(e);function*a(m,p,g=1){let _=e.connections.find((F)=>F.name===m.connection_name),f=m.coupledSection?(F)=>!0:Gie(e,m),y=m.route[0].width,x=W_(e,_.name),C=li(m.route)+x,I=(n.get(_.name)-C)*g;if(I<0.00000001){yield m;return}let b=e.minTraceToPadEdgeClearance??e.defaultObstacleMargin??0.075,P=e.differentialPairs?.find((F)=>F.connectionNames.includes(m.connection_name)),E=P&&o.packageOnlyPairTuning?TF(e,y+(P.traceGap??b)/2+b):[],B=y+b,w=4*Math.max(y*1.2,b),T=m.route.slice(1).map((F,H)=>{let z=m.route[H],Y=wn(z,F),U={x:(z.x+F.x)/2,y:(z.y+F.y)/2},X=Y>0.00000001?{x:-(F.y-z.y)/Y,y:(F.x-z.x)/Y}:{x:0,y:0},V=2*Math.max(y*1.2,b),W=[-1,1].filter((j)=>p.visible(U,{x:U.x+j*X.x*V,y:U.y+j*X.y*V})).length;return{i:H,span:Y,openSides:W}}).sort((F,H)=>H.openSides-F.openSides||H.span-F.span),Q=r,N=0;for(let F of Q?[!1]:[!1,!0])for(let{i:H}of T){if(m.curvedSegments?.includes(H+1))continue;if(m.coupledSection&&H>=m.coupledSection[0]&&H<m.coupledSection[1])continue;let z=m.route[H],Y=m.route[H+1],U=wn(z,Y);if(U<0.01)continue;let X=(Y.x-z.x)/U,V=(Y.y-z.y)/U,W=Math.floor(U*0.9/w),j=Math.min(W,o.packMeanders?W:Math.max(2,Math.ceil(I/(12*y)))),q=Array.from({length:W},(ce,oe)=>oe+1).sort((ce,oe)=>Math.abs(ce-j)-Math.abs(oe-j)||oe-ce);function*ne(){if(Q){for(let ce of[1,2,3])for(let oe of[0.9,0.65,0.4])for(let ie of[0.5,0,1])yield{teeth:ce,fraction:oe,position:ie};return}for(let ce of q)if(!F)for(let oe of[0.9,0.65,0.4])for(let ie of[0.5,0,1])yield{teeth:ce,fraction:oe,position:0.05+0.9*ie};else{for(let oe of[0.9,0.65,0.4])for(let ie of[0,1])yield{teeth:ce,fraction:oe,position:ie};for(let oe of[0.25,0.15,0.1])for(let ie of[0.5,0.05,0.95,0,1])yield{teeth:ce,fraction:oe,position:ie}}}for(let{teeth:ce,fraction:oe,position:ie}of ne()){let J=U*oe/ce;if(!Q&&J<w)continue;for(let ee of[1,-1])for(let se of Q?[vui]:[Bui,Eui]){let le=U*(1-oe)*ie,he={x:z.x+X*le,y:z.y+V*le},ue={x:he.x+X*U*oe,y:he.y+V*U*oe};if(Q){if(++N>Math.min(1024,o.maxCandidates??1024))return}if(!Q&&++i>(o.maxCandidates??1/0)){if(o.packMeanders)return;throw Error("Smooth tuning candidate budget exhausted")}let Ae=se(he,ue,I,ce,ee,Math.max(y*1.2,b));if(!Ae||E.length&&!E.some((Te)=>Ae.every((be)=>b1(be,Te.copper))))continue;let _e=[z,...Ae,Y];if(!p.pathVisible(_e))continue;let Pe=(m.coupledSection?(Te)=>Te:qg)([...m.route.slice(0,H),..._e,...m.route.slice(H+2)]);if(Math.abs(li(Pe)+x-(C+I))>0.000001)continue;if(!f(Pe)||!bc(Pe,B))continue;let Ee={...m,coupledSection:m.coupledSection?m.coupledSection.map((Te)=>Te>H?Te+Pe.length-m.route.length:Te):void 0,curvedSegments:Pe.slice(1).flatMap((Te,be)=>{let me=Math.abs(Te.x-Pe[be].x),ye=Math.abs(Te.y-Pe[be].y);return Math.min(me,ye)>0.00000001&&Math.abs(me-ye)>0.00000001?[be+1]:[]}),route:Pe.map((Te)=>({...Te,route_type:"wire",layer:_.pointsToConnect[0].layer,width:y}))};if(uF([Ee]))yield Ee}}}}let c=[...t],l=t.map((m)=>n.get(m.connection_name)-li(m.route)-W_(e,m.connection_name)),d=new Set(t.map((m,p)=>p).sort((m,p)=>{let g=o.priorityConnectionNames??[],_=(f)=>{let y=g.indexOf(t[f].connection_name);return y<0?1/0:y};return _(m)-_(p)||l[p]-l[m]})),u=new Map,h=!1,A=!0;while(d.size&&A){A=!1;for(let m of d){let p=e.connections.find((f)=>f.name===t[m].connection_name),g=new Ar(e,p,c[m].route[0].width,[...s,...c.flatMap(Yi)]),_=a(c[m],g).next().value;if(!_&&h&&(u.get(m)??0)<8){for(let f of[0.5,0.25])if(_=a(c[m],g,f).next().value,_){u.set(m,(u.get(m)??0)+1);break}}if(!_)continue;if(c[m]=_,li(_.route)+W_(e,p.name)>=n.get(p.name)-0.00000001)d.delete(m);A=!0}if(!A&&!h)h=!0,A=!0;else if(!A&&!r&&o.packMeanders){r=!0,h=!1;for(let m of d)c[m]=t[m];u.clear(),A=!0}}if(d.size)throw new wui(c,[...d].map((m)=>t[m].connection_name));return c}function Tui(e){if(e.length!==2||e.some((a)=>!a.coupledSection))return e;let t=e.map((a)=>a.coupledSection[1]),n=e.map((a,c)=>a.route[t[c]]),o=e.map((a,c)=>{let l=a.route[t[c]-1],d=n[c],u=wn(l,d);return{x:(d.x-l.x)/u,y:(d.y-l.y)/u}});if(wn(o[0],o[1])>0.0000001)return e;let i=o[0],r=e.map((a,c)=>{let l=0;for(let d=t[c]+1;d<a.route.length;d++){let u=a.route[d],h=u.x-n[c].x,A=u.y-n[c].y,m=h*i.x+A*i.y;if(Math.abs(h*i.y-A*i.x)>0.00000001||m<l)break;l=m}return l}),s=Math.min(...r);if(s<0.00000001)return e;return e.map((a,c)=>{let l={...n[c],x:n[c].x+i.x*s,y:n[c].y+i.y*s},d=t[c]+1;while(d<a.route.length){let u=a.route[d].x-n[c].x,h=a.route[d].y-n[c].y;if(Math.abs(u*i.y-h*i.x)>0.00000001||u*i.x+h*i.y>s+0.00000001)break;d++}return{...a,curvedSegments:a.curvedSegments?.filter((u)=>u<=t[c]||u>=d).map((u)=>u>=d?u-(d-t[c]-1):u),route:[...a.route.slice(0,t[c]),l,...a.route.slice(d)]}})}var l$t=new WeakMap;function Dui(e,t){let n=JSON.stringify([e,t]),o=l$t.get(e);if(!o||o.scene!==n)o={scene:n,alternatives:new Map},l$t.set(e,o);return{get(i){let r=o.alternatives.get(i);return r?structuredClone(r):void 0},set(i,r){if(o.alternatives.size>=512)o.alternatives.delete(o.alternatives.keys().next().value);o.alternatives.set(i,structuredClone(r))}}}var Nui=class{entries=[];sequence=0;get length(){return this.entries.length}values(){return this.entries.map((e)=>e.value)}before(e,t){return e.value.f<t.value.f||e.value.f===t.value.f&&e.sequence<t.sequence}push(e){let t={value:e,sequence:this.sequence++},n=this.entries.length;this.entries.push(t);while(n>0){let o=n-1>>1;if(!this.before(t,this.entries[o]))break;this.entries[n]=this.entries[o],n=o}this.entries[n]=t}pop(){let e=this.entries[0],t=this.entries.pop();if(this.entries.length){let n=0;while(n*2+1<this.entries.length){let o=n*2+1;if(o+1<this.entries.length&&this.before(this.entries[o+1],this.entries[o]))o++;if(!this.before(this.entries[o],t))break;this.entries[n]=this.entries[o],n=o}this.entries[n]=t}return e.value}};function WT(e,t){let n=t.x-e.x,o=t.y-e.y,i=Math.sign(n),r=Math.sign(o),s=Math.min(Math.abs(n),Math.abs(o));if(Math.min(Math.abs(n),Math.abs(o))<0.0000000001||Math.abs(Math.abs(n)-Math.abs(o))<0.0000000001)return[[e,t]];let a=(Math.max(Math.abs(n),Math.abs(o))-s)/2;return[Math.abs(n)>Math.abs(o)?[e,{x:e.x+i*a,y:e.y},{x:t.x-i*a,y:t.y},t]:[e,{x:e.x,y:e.y+r*a},{x:t.x,y:t.y-r*a},t],[e,{x:e.x+i*s,y:e.y+r*s},t],[e,{x:t.x-i*s,y:t.y-r*s},t],[e,{x:e.x,y:t.y},t],[e,{x:t.x,y:e.y},t]]}var moe=class{constructor(e,t,n){this.scene=e,this.start=t,this.end=n,this.vertices=[t,n],this.open.push({id:0,g:0,f:wn(t,n)}),this.best.set(0,0)}scene;start;end;vertices;open=new Nui;best=new Map;expanded=0;failed=!1;solved=!1;result=[];geometryLoaded=!1;current;visibleEdges=[];step(){if(!this.geometryLoaded){this.geometryLoaded=!0;let n=Math.max(Math.abs(this.end.x-this.start.x),Math.abs(this.end.y-this.start.y))+(Math.SQRT2-1)*Math.min(Math.abs(this.end.x-this.start.x),Math.abs(this.end.y-this.start.y));for(let o of WT(this.start,this.end)){if(li(o)>n+0.000000001||!this.scene.pathVisible(o))continue;this.visibleEdges=[o],this.result=qg(o),this.solved=!0,this.expanded=1;return}this.vertices.push(...this.scene.vertices())}if(!this.open.length){this.failed=!0;return}let e=this.open.pop();if(e.g>(this.best.get(e.id)??1/0)+0.000000001)return;if(this.current=e,this.expanded++,this.visibleEdges=[],e.id===1){let n=[];for(let o=e;o?.parent;o=o.parent)n.push(o.edge);this.result=qg([this.start,...n.reverse().flatMap((o)=>o.slice(1))]),this.solved=!0;return}let t=this.vertices[e.id];for(let n=1;n<this.vertices.length;n++){if(n===e.id)continue;let o=this.vertices[n];if(e.g+wn(t,o)>=(this.best.get(n)??1/0)-0.000000001)continue;let r=WT(t,o).sort((s,a)=>li(s)-li(a));for(let s of r){let a=e.g+li(s);if(a>=(this.best.get(n)??1/0)-0.000000001)continue;if(!this.scene.pathVisible(s))continue;if(this.best.set(n,a),this.open.push({id:n,g:a,f:a+wn(o,this.end),parent:e,edge:s}),this.visibleEdges.length<100)this.visibleEdges.push(s);break}}}currentPath(){let e=[];for(let t=this.current;t?.parent;t=t.parent)e.push(t.edge);return[this.start,...e.reverse().flatMap((t)=>t.slice(1))]}};function X_(e,t){let n=qg(e);for(let o=0;o<12;o++){let i=!1;for(let r=0;r<n.length-2;r++)for(let s=n.length-1;s>r+1;s--){let a=li(n.slice(r,s+1)),c=WT(n[r],n[s]).sort((d,u)=>li(d)-li(u)||d.length-u.length),l=!1;for(let d of c){if(li(d)>a+0.00000001||d.length>=s-r+1&&li(d)>=a-0.00000001||!t.pathVisible(d))continue;let u=qg([...n.slice(0,r),...d,...n.slice(s+1)]),h=t.width/2+t.margin;if(!bc(u,h)&&bc(n,h))continue;n=u,i=!0,l=!0;break}if(l)break}if(!i)break}return bc(n,t.width/2+t.margin)?n:e}var Rui=class{labels=new Map;heap=[];sequence=0;get length(){return this.heap.length}clear(){this.labels.clear(),this.heap.length=0,this.sequence=0}dominated(e,t,n){return this.labels.get(e)?.some((o)=>o.cost<=t+0.0000000001&&o.travelled<=n+0.0000000001)??!1}add(e,t,n,o,i,r){if(this.dominated(e,t,n))return;let a=(this.labels.get(e)??[]).filter((d)=>{if(t<=d.cost+0.0000000001&&n<=d.travelled+0.0000000001)return d.active=!1,!1;return!0}),c={node:e,cost:t,travelled:n,priority:t+o,sequence:this.sequence++,parent:i,rootPath:r,active:!0};a.push(c),this.labels.set(e,a);let l=this.heap.length;this.heap.push(c);while(l>0){let d=l-1>>1;if(!this.before(c,this.heap[d]))break;this.heap[l]=this.heap[d],l=d}this.heap[l]=c}before(e,t){return e.priority<t.priority||e.priority===t.priority&&(e.cost>t.cost||e.cost===t.cost&&e.sequence<t.sequence)}pop(){while(this.heap.length){let e=this.heap[0],t=this.heap.pop();if(this.heap.length){let n=0;while(2*n+1<this.heap.length){let o=2*n+1;if(o+1<this.heap.length&&this.before(this.heap[o+1],this.heap[o]))o++;if(!this.before(this.heap[o],t))break;this.heap[n]=this.heap[o],n=o}this.heap[n]=t}if(e.active)return e}}},d$t=class{constructor(e,t){this.width=t;let n=[0],o=[0],i=[0],r=[1],s=(l)=>{while(i[l]!==l)i[l]=i[i[l]],l=i[l];return l},a=1,c=1;for(let l=0;l<e.length;l+=t){let d=Math.min(l+t,e.length),u=i.length,h=e.subarray(l,d),A=l,m=a;while(A<d){let p=h.indexOf(0,A-l);if(p<0)break;let g=l+p,_=h.indexOf(1,p),f=_<0?d:l+_,y=i.length;n.push(g),o.push(f),i.push(y);while(m<c&&o[m]+t<g)m++;for(let x=m;x<c&&n[x]+t<=f;x++){let C=s(y),I=s(x);if(C!==I)i[Math.max(C,I)]=Math.min(C,I)}A=f}a=u,c=i.length,r.push(c)}this.starts=Uint32Array.from(n),this.ends=Uint32Array.from(o),this.roots=Uint32Array.from(i.map((l,d)=>s(d))),this.rows=Uint32Array.from(r)}width;starts;ends;roots;rows;get storageBytes(){return this.starts.byteLength+this.ends.byteLength+this.roots.byteLength+this.rows.byteLength}at(e){let t=Math.floor(e/this.width),n=this.rows[t],o=this.rows[t+1];while(n<o){let i=n+o>>>1;if(e<this.starts[i])o=i;else if(e>=this.ends[i])n=i+1;else return this.roots[i]}return 0}},Qui=class{ids=new Int32Array(1024);costs=new Float64Array(1024);priorities=new Float64Array(1024);sequences=new Float64Array(1024);size=0;positions;constructor(e){this.positions=new Int32Array(e)}sequence=0;id=0;g=0;get length(){return this.size}get storageBytes(){return this.positions.byteLength+this.ids.byteLength+this.costs.byteLength+this.priorities.byteLength+this.sequences.byteLength}clear(){for(let e=0;e<this.size;e++)this.positions[this.ids[e]]=0;this.size=0,this.sequence=0,this.id=0,this.g=0}push(e,t,n){let o=this.sequence++,i=this.positions[e];if(i&&(n>this.priorities[i-1]||n===this.priorities[i-1]&&t<=this.costs[i-1])){this.sink(i-1,e,t,n,o);return}let r=i?i-1:this.size++;if(r===this.ids.length){let u=new Int32Array(r*2),h=new Float64Array(r*2),A=new Float64Array(r*2),m=new Float64Array(r*2);u.set(this.ids),h.set(this.costs),A.set(this.priorities),m.set(this.sequences),this.ids=u,this.costs=h,this.priorities=A,this.sequences=m}let{ids:s,positions:a,costs:c,priorities:l,sequences:d}=this;while(r>0){let u=r-1>>2,h=l[u];if(n>h||n===h&&(t<c[u]||t===c[u]&&o>=d[u]))break;s[r]=s[u],a[s[r]]=r+1,c[r]=c[u],l[r]=h,d[r]=d[u],r=u}s[r]=e,a[e]=r+1,c[r]=t,l[r]=n,d[r]=o}pop(){let{ids:e,positions:t,costs:n,priorities:o,sequences:i}=this;this.id=e[0],this.g=n[0],t[this.id]=0;let r=--this.size,s=e[r],a=n[r],c=o[r],l=i[r];if(!r)return;this.sink(0,s,a,c,l)}sink(e,t,n,o,i){let r=this.size,s=e,{ids:a,costs:c,priorities:l,sequences:d,positions:u}=this;while(e*4+1<r){let h=e*4+1,A=l[h],m=c[h],p=d[h],g=Math.min(h+4,r);for(let _=h+1;_<g;_++){let f=l[_];if(f<A||f===A&&(c[_]>m||c[_]===m&&d[_]<p))h=_,A=f,m=c[_],p=d[_]}a[e]=a[h],u[a[e]]=e+1,c[e]=m,l[e]=A,d[e]=p,e=h}while(e>s){let h=e-1>>2,A=l[h];if(o>A||o===A&&(n<c[h]||n===c[h]&&i>=d[h]))break;a[e]=a[h],u[a[e]]=e+1,c[e]=c[h],l[e]=A,d[e]=d[h],e=h}a[e]=t,u[t]=e+1,c[e]=n,l[e]=o,d[e]=i}},u$t=67108864,h$t=new WeakMap;function kui(e){return e.best.byteLength+e.parent.byteLength+(e.travel?.byteLength??0)+e.heap.storageBytes}var Lui=class{available=new Map;retained=new Map;bytes=0;acquire(e,t){let n=this.available.get(e),o=n?.pop()??{cellCount:e,best:new Float64Array(e),parent:new Int32Array(e),heap:new Qui(e)};if(n&&!n.length)this.available.delete(e);let i=this.retained.get(o);if(i!==void 0)this.bytes-=i,this.retained.delete(o);if(o.best.fill(1/0),t&&!o.travel)o.travel=new Float64Array(e);let r=!0;return{scratch:o,release:()=>{if(!r)return;r=!1,this.retain(o)}}}retain(e){e.heap.clear();let t=kui(e);if(t>u$t)return;while(this.bytes+t>u$t){let o=this.retained.keys().next().value;this.bytes-=this.retained.get(o),this.retained.delete(o);let i=this.available.get(o.cellCount);if(i.splice(i.indexOf(o),1),!i.length)this.available.delete(o.cellCount)}let n=this.available.get(e.cellCount)??[];n.push(e),this.available.set(e.cellCount,n),this.retained.set(e,t),this.bytes+=t}};function Fui(e,t,n){let o=h$t.get(e);if(!o)h$t.set(e,o=new Lui);return o.acquire(t,n)}var m$t=class{dense;sparse;storageBytes;minX;minY;maxX;maxY;width;constructor(e){this.minX=Math.floor(e.minX),this.minY=Math.floor(e.minY),this.maxX=Math.ceil(e.maxX)+1,this.maxY=Math.ceil(e.maxY)+1,this.width=this.maxX-this.minX+1;let t=this.width*(this.maxY-this.minY+1);if(t<=65536)this.dense=Array(t),this.storageBytes=t*8;else this.sparse=new Map,this.storageBytes=0}add(e,t,n){if(e<this.minX||e>this.maxX||t<this.minY||t>this.maxY)return;let o=e-this.minX+(t-this.minY)*this.width,i=this.dense?this.dense[o]:this.sparse.get(o);if(!i)if(i=[],this.dense)this.dense[o]=i;else this.sparse.set(o,i);if(i[i.length-1]!==n)i.push(n)}addCopper(e,t){let n=e.copper,o=(l,d,u,h)=>{for(let A=Math.floor(l);A<=Math.floor(d);A++)for(let m=Math.floor(u);m<=Math.floor(h);m++)this.add(A,m,e)};if(n.rect){o(e.minX,e.maxX,e.minY,e.maxY);return}let i=n.b.x-n.a.x,r=n.b.y-n.a.y,s=Math.max(1,Math.ceil(Math.max(Math.abs(i),Math.abs(r)))),a=n.radius+t+Math.abs(i)/(2*s)+0.000000001,c=n.radius+t+Math.abs(r)/(2*s)+0.000000001;for(let l=0;l<=s;l++){let d=n.a.x+i*l/s,u=n.a.y+r*l/s;o(d-a,d+a,u-c,u+c)}}get(e,t){if(e<this.minX||e>this.maxX||t<this.minY||t>this.maxY)return;let n=e-this.minX+(t-this.minY)*this.width;return this.dense?this.dense[n]:this.sparse.get(n)}*values(){if(this.dense){for(let e of this.dense)if(e)yield e}else yield*this.sparse.values()}},p$t=new WeakMap,hGe=16777216,A$t=new Uint8Array(0),_$t=new WeakMap,mGe=67108864;function g$t(e,t){let n=e.rect??{minX:Math.min(e.a.x,e.b.x)-e.radius,maxX:Math.max(e.a.x,e.b.x)+e.radius,minY:Math.min(e.a.y,e.b.y)-e.radius,maxY:Math.max(e.a.y,e.b.y)+e.radius};return{...Sui({...e,a:{...e.a},b:{...e.b},rect:e.rect?{...e.rect}:void 0}),minX:n.minX-t,maxX:n.maxX+t,minY:n.minY-t,maxY:n.maxY+t}}function Hui(e,t){let n=e.input,o=n.bounds,i=e.connection.pointsToConnect[0].layer,r=Ls(n).filter((p)=>p.layer===i),s=n.connections.flatMap((p)=>p.pointsToConnect);for(let p of r)if(p.rect)s.push({x:p.rect.minX,y:p.rect.minY,layer:i},{x:p.rect.maxX,y:p.rect.maxY,layer:i});else s.push({x:Math.min(p.a.x,p.b.x)-p.radius,y:Math.min(p.a.y,p.b.y)-p.radius,layer:i},{x:Math.max(p.a.x,p.b.x)+p.radius,y:Math.max(p.a.y,p.b.y)+p.radius,layer:i});let a=Math.min(...s.map((p)=>p.x)),c=Math.max(...s.map((p)=>p.x)),l=Math.min(...s.map((p)=>p.y)),d=Math.max(...s.map((p)=>p.y)),u=n.minTraceWidth+(n.minTraceToPadEdgeClearance??n.defaultObstacleMargin??0.075),h=Math.max(2,n.connections.length*u,Math.min(c-a,d-l)/2),A=(p,g)=>g+Math.floor((p-g)/t)*t,m=(p,g)=>g+Math.ceil((p-g)/t)*t;return{minX:Math.max(o.minX,A(a-h,o.minX)),maxX:Math.min(o.maxX,m(c+h,o.minX)),minY:Math.max(o.minY,A(l-h,o.minY)),maxY:Math.min(o.maxY,m(d+h,o.minY))}}var mWe=class{constructor(e,t){this.scene=e,this.packageGrid=e.input.obstacles.some((o)=>o.componentId),this.stepSize=Math.max(0.01,t?.step??e.input.minTraceWidth/(this.packageGrid?2:1));let n=t?.bounds??(this.packageGrid?Hui(e,this.stepSize):e.input.bounds);if(this.gridBounds=n,this.origin={x:n.minX,y:n.minY},this.nx=Math.ceil((n.maxX-n.minX)/this.stepSize)+1,this.ny=Math.ceil((n.maxY-n.minY)/this.stepSize)+1,this.xs=Float64Array.from({length:this.nx},(o,i)=>this.origin.x+i*this.stepSize),this.ys=Float64Array.from({length:this.ny},(o,i)=>this.origin.y+i*this.stepSize),this.cellCount>8000000)throw Error("Dense grid search budget exceeded")}scene;packageGrid;gridBounds;nx;ny;stepSize;origin;xs;ys;get cellCount(){return this.nx*this.ny}penalizeIntersection(e,t,n,o,i,r,s=!1){let a=new Set,c=new Set;for(let[l,d]of[[t,n],[o,i]]){let u=s?new Set:c,h=Math.max(1,Math.ceil(wn(l,d)/this.stepSize));for(let A=0;A<=h;A++){let m={x:l.x+(d.x-l.x)*A/h,y:l.y+(d.y-l.y)*A/h},p=Math.round((m.x-this.origin.x)/this.stepSize),g=Math.round((m.y-this.origin.y)/this.stepSize),_=Math.ceil(r/this.stepSize);for(let f=-_;f<=_;f++)for(let y=-_;y<=_;y++){if(p+y<0||p+y>=this.nx||g+f<0||g+f>=this.ny)continue;let x=p+y+(g+f)*this.nx;if(a.has(x)||u.has(x))continue;u.add(x);let C=this.point(x);if(xB([C,C],[l,d])>r)continue;if(!s&&(xB([C,C],[t,n])>r||xB([C,C],[o,i])>r))continue;a.add(x)}}}for(let l of a)e[l]+=s?0.3:1}point(e){return{x:this.xs[e%this.nx],y:this.ys[Math.floor(e/this.nx)]}}},Fc=class extends mWe{constructor(e,t,n,o=[],i=4,r,s){super(e,s);this.start=t,this.end=n,this.penalty=i,this.history=r;let a=this.gridBounds;this.softMargin=e.margin,this.hasSoftCopper=o.some((b)=>b.layer===e.connection.pointsToConnect[0].layer),this.copperBuckets=new m$t(a),this.neighbors=[];for(let b=-1;b<=1;b++)for(let P=-1;P<=1;P++){if(!(P||b))continue;let E=(b+1)*3+P+1,B=E>4?E-1:E;this.neighbors.push({dx:P,dy:b,offset:P+b*this.nx,cost:P&&b?Math.SQRT2:1,bit:1<<B,reverse:1<<7-B})}let c=s?.ends??[n];this.goalBounds={minX:Math.min(...c.map((b)=>b.x)),maxX:Math.max(...c.map((b)=>b.x)),minY:Math.min(...c.map((b)=>b.y)),maxY:Math.max(...c.map((b)=>b.y))},this.hx=this.xs.map((b)=>Math.max(this.goalBounds.minX-b,b-this.goalBounds.maxX,0)/this.stepSize),this.hy=this.ys.map((b)=>Math.max(this.goalBounds.minY-b,b-this.goalBounds.maxY,0)/this.stepSize);let l=this.nx*this.ny,d=_$t.get(e.input)??new Map;_$t.set(e.input,d);let u=JSON.stringify([a.minX,a.minY,a.maxX,a.maxY,this.nx,this.ny,this.stepSize,e.margin,e.width,e.input.minBoardEdgeClearance,e.input.bounds,e.copper.map((b)=>[b.a.x,b.a.y,b.b.x,b.b.y,b.radius,b.rect])]),h=d.get(u),A=h?.attachments??new Map;if(h)d.delete(u),d.set(u,h);if(this.blocked=h?.blocked??new Uint8Array(l),this.hardEdgeKnown=h?.edgeKnown??new Uint8Array(l),this.hardEdgeBlocked=h?.edgeBlocked??new Uint8Array(l),h)this.copperBuckets=h.buckets;if(this.maxLength=s?.maxLength??1/0,s?.paretoLength&&Number.isFinite(this.maxLength))this.lengthFrontier=new Rui;let m=h?.components;if(!h){let b=new Uint32Array(l),P=0,E=(w,T,Q,N,F)=>{let H=F.copper,z=Math.max(0,Math.floor((w-a.minX)/this.stepSize)),Y=Math.min(this.nx-1,Math.ceil((T-a.minX)/this.stepSize)),U=Math.max(0,Math.floor((Q-a.minY)/this.stepSize)),X=Math.min(this.ny-1,Math.ceil((N-a.minY)/this.stepSize)),V=!H.rect&&H.a.x===H.b.x&&H.a.y===H.b.y,W=e.margin-0.00000001;for(let j=U;j<=X;j++){let q=this.ys[j],ne=q-H.a.y,ce=j*this.nx;for(let oe=z;oe<=Y;oe++){let ie=oe+ce;if(this.blocked[ie]||b[ie]===P)continue;if(b[ie]=P,V){let J=this.xs[oe]-H.a.x;if(Math.sqrt(J*J+ne*ne)-H.radius<W)this.blocked[ie]=1}else if(c$t(this.xs[oe],q,this.xs[oe],q,0,0,0,F,W))this.blocked[ie]=1}}};for(let w of e.copper){P++;let T=g$t(w,e.margin),Q=e.margin+w.radius;if(this.copperBuckets.addCopper(T,e.margin),w.rect){let H=w.rect;E(H.minX-Q,H.maxX+Q,H.minY-Q,H.maxY+Q,T);continue}let N=wn(w.a,w.b),F=Math.max(1,Math.ceil(N/this.stepSize));for(let H=0;H<=F;H++){let z={x:w.a.x+(w.b.x-w.a.x)*H/F,y:w.a.y+(w.b.y-w.a.y)*H/F};E(z.x-Q,z.x+Q,z.y-Q,z.y+Q,T)}}m=s?.checkReachability?new d$t(this.blocked,this.nx):void 0;let B=(m?.storageBytes??0)+l*3+this.copperBuckets.storageBytes+u.length*2+[...this.copperBuckets.values()].reduce((w,T)=>w+T.length*8+64,0)+e.copper.length*136;if(B<=mGe){let w=[...d.values()].reduce((T,Q)=>T+Q.bytes,0);while(w+B>mGe&&d.size){let T=d.keys().next().value;w-=d.get(T).bytes,d.delete(T)}h={attachments:A,blocked:this.blocked,edgeKnown:this.hardEdgeKnown,edgeBlocked:this.hardEdgeBlocked,buckets:this.copperBuckets,bytes:B,components:m},d.set(u,h)}}if(s?.checkReachability&&!m){if(m=new d$t(this.blocked,this.nx),h){h.components=m,h.bytes+=m.storageBytes;let b=[...d.values()].reduce((P,E)=>P+E.bytes,0);while(b>mGe&&d.size){let P=d.keys().next().value;b-=d.get(P).bytes,d.delete(P)}}}if(this.hasSoftCopper){this.softBuckets=new m$t(a);let b=JSON.stringify([a.minX,a.minY,a.maxX,a.maxY,this.nx,this.ny,this.stepSize,this.softMargin,e.connection.pointsToConnect[0].layer]),P=p$t.get(e.input)??new Map;p$t.set(e.input,P);let E=P.get(b),B=new Map;for(let Q of o){if(Q.layer!==e.connection.pointsToConnect[0].layer)continue;let N=JSON.stringify([Q.a.x,Q.a.y,Q.b.x,Q.b.y,Q.radius,Q.rect]),F=E?.copper.get(N)??g$t(Q,this.softMargin);this.softBuckets.addCopper(F,this.softMargin),B.set(N,F)}let w=l*2+b.length*2+[...B.keys()].reduce((Q,N)=>Q+N.length*2+136,0),T=E&&!E.lease.active&&w<=hGe?E:void 0;if(this.softEdgeKnown=T?.edgeKnown??new Uint8Array(l),this.softEdgeBlocked=T?.edgeBlocked??new Uint8Array(l),T){let Q=(F,H,z,Y)=>{let U=Math.max(0,Math.floor((F-a.minX)/this.stepSize)),X=Math.min(this.nx-1,Math.ceil((H-a.minX)/this.stepSize)),V=Math.max(0,Math.floor((z-a.minY)/this.stepSize)),W=Math.min(this.ny-1,Math.ceil((Y-a.minY)/this.stepSize));if(X<U)return;for(let j=V;j<=W;j++){let q=j*this.nx;this.softEdgeKnown.fill(0,q+U,q+X+1),this.softEdgeBlocked.fill(0,q+U,q+X+1)}},N=(F)=>{let H=this.stepSize+0.000000001;if(F.copper.rect){Q(F.minX-H,F.maxX+H,F.minY-H,F.maxY+H);return}let z=F.copper.radius+this.softMargin+H,Y=Math.max(0,Math.floor((Math.min(F.ay,F.by)-z-a.minY)/this.stepSize)),U=Math.min(this.ny-1,Math.ceil((Math.max(F.ay,F.by)+z-a.minY)/this.stepSize));for(let X=Y;X<=U;X++){let V=0,W=1;if(F.dy===0){if(Math.abs(this.ys[X]-F.ay)>z)continue}else{let ie=(this.ys[X]-z-F.ay)/F.dy,J=(this.ys[X]+z-F.ay)/F.dy;if(V=Math.max(0,Math.min(ie,J)),W=Math.min(1,Math.max(ie,J)),V>W)continue}let j=F.ax+F.dx*V,q=F.ax+F.dx*W,ne=Math.max(0,Math.floor((Math.min(j,q)-z-a.minX)/this.stepSize)),ce=Math.min(this.nx-1,Math.ceil((Math.max(j,q)+z-a.minX)/this.stepSize));if(ce<ne)continue;let oe=X*this.nx;this.softEdgeKnown.fill(0,oe+ne,oe+ce+1),this.softEdgeBlocked.fill(0,oe+ne,oe+ce+1)}};for(let[F,H]of T.copper)if(!B.has(F))N(H);for(let[F,H]of B)if(!T.copper.has(F))N(H)}if(w<=hGe){if(E)P.delete(b);let Q=[...P.values()].reduce((N,F)=>N+F.bytes,0);while(Q+w>hGe&&P.size){let N=P.keys().next().value;Q-=P.get(N).bytes,P.delete(N)}this.softMemoLease={active:!0},P.set(b,{edgeKnown:this.softEdgeKnown,edgeBlocked:this.softEdgeBlocked,copper:B,lease:this.softMemoLease,bytes:w})}}let p=(b)=>{let P=JSON.stringify(b);if(A.has(P))return structuredClone(A.get(P));let E=Math.round((b.x-a.minX)/this.stepSize),B=Math.round((b.y-a.minY)/this.stepSize),w=[];for(let Q=-4;Q<=4;Q++)for(let N=-4;N<=4;N++){if(E+N<0||E+N>=this.nx||B+Q<0||B+Q>=this.ny)continue;let F=E+N+(B+Q)*this.nx;if(this.blocked[F])continue;for(let H of WT(b,this.point(F)))if(e.pathVisible(H)){w.push({id:F,path:H});break}}let T=w.sort((Q,N)=>li(Q.path)-li(N.path)||Q.id-N.id).slice(0,8);if(A.size>=128)A.delete(A.keys().next().value);return A.set(P,structuredClone(T)),T},g=(b)=>{let P=new Map;for(let E of b.sort((B,w)=>li(B.path)-li(w.path)))if(!P.has(E.id))P.set(E.id,E);return[...P.values()]};this.startAttachments=s?.starts?g(s.starts.flatMap((b)=>s.nearestTerminalAttachments?p(b).slice(0,1):p(b))):p(t),this.endAttachments=s?.ends?g(c.flatMap((b)=>s.nearestTerminalAttachments?p(b).slice(0,1):p(b))):p(n);let _=this.startAttachments[0],f=this.endAttachments[0];if(!_||!f){if(this.failed=!0,this.softMemoLease)this.softMemoLease.active=!1;return}let y=m,x=(b,P)=>b.some((E)=>P.some((B)=>y.at(E.id)!==0&&y.at(E.id)===y.at(B.id))),C=!1;if(s?.checkReachability&&!x([_],[f])){if(!x(this.startAttachments,this.endAttachments)){if(this.failed=!0,this.softMemoLease)this.softMemoLease.active=!1;return}C=!0}this.scratchLease=Fui(e.input,l,Number.isFinite(this.maxLength));let I=this.scratchLease.scratch;if(this.heap=I.heap,this.best=I.best,this.parent=I.parent,this.travel=Number.isFinite(this.maxLength)?I.travel:void 0,this.startPath=_.path,this.endPath=f.path.toReversed(),this.goal=f.id,this.best[_.id]=0,this.parent[_.id]=-1,this.travel)this.travel[_.id]=li(_.path);if(this.lengthFrontier)this.lengthFrontier.add(_.id,0,li(_.path),this.heuristic(t),void 0,_.path);else this.heap.push(_.id,0,this.heuristic(t));if(C||s?.allTerminalAttachments||s?.starts||s?.ends)this.retryAttachments()}start;end;penalty;history;expanded=0;failed=!1;solved=!1;result=[];heap;lengthFrontier;scratchLease;neighbors;travel;maxLength=1/0;best;parent;blocked;softMargin;softBuckets;hasSoftCopper;softEdgeKnown=A$t;softMemoLease;softEdgeBlocked=A$t;hardEdgeKnown;hardEdgeBlocked;copperBuckets;goal=-1;startPath=[];endPath=[];startAttachments=[];endAttachments=[];alternateAttachments=!1;rootPaths=new Map;goalPaths=new Map;attachmentResult;goalBounds;hx;hy;retryAttachments(){if(this.alternateAttachments||this.startAttachments.length<=1&&this.endAttachments.length<=1)return!1;this.alternateAttachments=!0,this.heap.clear(),this.lengthFrontier?.clear(),this.best.fill(1/0);for(let e of this.startAttachments){let t=li(e.path);if(t>this.maxLength+0.00000001)continue;let n=t/this.stepSize;if(this.best[e.id]=n,this.parent[e.id]=-1,this.travel)this.travel[e.id]=t;if(this.rootPaths.set(e.id,e.path),this.lengthFrontier)this.lengthFrontier.add(e.id,n,t,this.heuristic(this.point(e.id)),void 0,e.path);else this.heap.push(e.id,n,n+this.heuristic(this.point(e.id)))}for(let e of this.endAttachments)this.goalPaths.set(e.id,e.path.toReversed());return!0}pathTo(e,t,n){if(n){let r=[],s=n;for(let a=n;a;a=a.parent)s=a,r.push(this.point(a.node));return qg([...s.rootPath,...r.reverse().slice(1),...t.slice(1)])}let o=[],i=e;for(let r=e;r>=0;r=this.parent[r])i=r,o.push(this.point(r));return qg([...this.alternateAttachments?this.rootPaths.get(i):this.startPath,...o.reverse().slice(1),...t.slice(1)])}finish(e){if(this.result=e,this.solved=!0,this.softMemoLease)this.softMemoLease.active=!1;this.scratchLease?.release(),this.lengthFrontier?.clear()}edgeClear(e,t,n,o,i,r=this.scene.margin){if(!i)return!0;let s=Math.min(e,n),a=Math.max(e,n),c=Math.min(t,o),l=Math.max(t,o),d=n-e,u=o-t,h=d*d+u*u,A=r-0.00000001,m=Math.floor(a),p=Math.floor(l);for(let g=Math.floor(s);g<=m;g++)for(let _=Math.floor(c);_<=p;_++){let f=i.get(g,_);if(!f)continue;for(let y=0;y<f.length;y++){let x=f[y];if(x.minX>a||x.maxX<s||x.minY>l||x.maxY<c)continue;if(c$t(e,t,n,o,d,u,h,x,A))return!1}}return!0}heuristic(e){let t=Math.max(this.goalBounds.minX-e.x,e.x-this.goalBounds.maxX,0)/this.stepSize,n=Math.max(this.goalBounds.minY-e.y,e.y-this.goalBounds.maxY,0)/this.stepSize;return Math.max(t,n)+(Math.SQRT2-1)*Math.min(t,n)}cancel(){if(!this.solved)this.failed=!0;if(this.softMemoLease)this.softMemoLease.active=!1;this.scratchLease?.release(),this.lengthFrontier?.clear()}step(){let{heap:e,lengthFrontier:t,best:n,parent:o,blocked:i,nx:r,ny:s,xs:a,ys:c,hx:l,hy:d,history:u,travel:h,stepSize:A,maxLength:m,penalty:p,hasSoftCopper:g,softEdgeKnown:_,softEdgeBlocked:f,hardEdgeKnown:y,hardEdgeBlocked:x,softBuckets:C,copperBuckets:I,softMargin:b}=this,P=this.scene.input.bounds,E=this.scene.width/2+(this.scene.input.minBoardEdgeClearance??0),B=P.minX+E,w=P.maxX-E,T=P.minY+E,Q=P.maxY-E;for(let N=0;N<500&&!this.failed&&!this.solved;N++){if(!(t?.length??e.length)){if(this.attachmentResult){this.finish(this.attachmentResult.path);return}if(this.retryAttachments())continue;if(this.failed=!0,this.softMemoLease)this.softMemoLease.active=!1;this.scratchLease?.release(),this.lengthFrontier?.clear();return}let F=t?.pop();if(t&&!F)continue;if(!t)e.pop();let H=F?.node??e.id,z=F?.cost??e.g;if(!t&&z!==n[H])continue;if(this.expanded++,this.attachmentResult&&z+this.heuristic(this.point(H))>=this.attachmentResult.score){this.finish(this.attachmentResult.path);return}let Y=this.alternateAttachments?this.goalPaths.get(H):H===this.goal?this.endPath:void 0;if(Y){let V=this.pathTo(H,Y,F);if(li(V)>m+0.00000001||!this.scene.pathVisible(V)){if(!this.alternateAttachments&&!t){if(this.retryAttachments())continue;if(this.failed=!0,this.softMemoLease)this.softMemoLease.active=!1;this.scratchLease?.release(),this.lengthFrontier?.clear();return}}else if(this.alternateAttachments){let W=z+li(Y)/A;if(!this.attachmentResult||W<this.attachmentResult.score)this.attachmentResult={score:W,path:V}}else{this.finish(V);return}}let U=H%r,X=Math.floor(H/r);for(let{dx:V,dy:W,offset:j,cost:q,bit:ne,reverse:ce}of this.neighbors){if(U+V<0||U+V>=r||X+W<0||X+W>=s)continue;let oe=H+j;if(i[oe])continue;let ie=z+q+0+(u?.[oe]??0);if(!t&&p>=0&&ie>=n[oe]-0.0000000001)continue;let J=l[U+V],ee=d[X+W],se=Math.max(J,ee)+(Math.SQRT2-1)*Math.min(J,ee),le=(F?.travelled??h?.[H]??0)+q*A;if(h&&le+se*A>m+0.00000001)continue;if(t&&p>=0&&t.dominated(oe,ie,le))continue;let he=a[U+V],ue=c[X+W];if(he<B||he>w||ue<T||ue>Q)continue;let Ae=0;if(g){if(!(_[H]&ne)){if(_[H]|=ne,_[oe]|=ce,!this.edgeClear(a[U],c[X],he,ue,C,b))f[H]|=ne,f[oe]|=ce}Ae=f[H]&ne?p:0}let _e=z+q+Ae+(u?.[oe]??0);if(t?t.dominated(oe,_e,le):_e>=n[oe]-0.0000000001)continue;if(!(y[H]&ne)){if(y[H]|=ne,y[oe]|=ce,!this.edgeClear(a[U],c[X],he,ue,I))x[H]|=ne,x[oe]|=ce}if(x[H]&ne)continue;if(t)t.add(oe,_e,le,se,F);else{if(n[oe]=_e,h)h[oe]=le;o[oe]=H,e.push(oe,_e,_e+se)}}}}};function jA(e,t){let n=e.slice(1).map((o,i)=>{let r=e[i],s=wn(r,o);return{x:-(o.y-r.y)/s,y:(o.x-r.x)/s}});return e.map((o,i)=>{let r=n[Math.max(0,i-1)],s=n[Math.min(n.length-1,i)],a=1+r.x*s.x+r.y*s.y;if(a<0.00001)throw Error("Pair centerline reverses direction");return{x:o.x+t*(r.x+s.x)/a,y:o.y+t*(r.y+s.y)/a}})}function*_D(e,t,n,o){let i=t.connectionNames.map((V)=>e.connections.find((W)=>W.name===V));if(i.some((V)=>!V||V.pointsToConnect.length!==2))throw Error("Pair requires two two-terminal connections");let r=i.map((V)=>(e.buses??[]).find((W)=>W.connectionNames.includes(V.name))?.traceWidth??V.nominalTraceWidth??V.width??e.minTraceWidth);if(Math.abs(r[0]-r[1])>0.00000001)throw Error("Coupled pair requires equal trace widths");let s=r[0],a=t.traceGap??e.minTraceToPadEdgeClearance??e.defaultObstacleMargin??0.075,c=i.map((V)=>W_(e,V.name)),l=(V,W)=>{let j=!1;for(let q=0,ne=W.length-1;q<W.length;ne=q++){let ce=W[q],oe=W[ne];if(ce.y>V.y!==oe.y>V.y&&V.x<(oe.x-ce.x)*(V.y-ce.y)/(oe.y-ce.y)+ce.x)j=!j}return j},d=i[0].pointsToConnect[0].layer;if(i.some((V)=>V.pointsToConnect.some((W)=>W.layer!==d)))throw Error("Pair requires a common signal layer");let u=e.minTraceToPadEdgeClearance??e.defaultObstacleMargin??0.075;if(a<u-0.00000001)throw Error("Pair gap is below trace clearance");let h=[0,1].map((V)=>({x:(i[0].pointsToConnect[V].x+i[1].pointsToConnect[V].x)/2,y:(i[0].pointsToConnect[V].y+i[1].pointsToConnect[V].y)/2})),A=Math.abs(h[1].y-h[0].y)>=Math.abs(h[1].x-h[0].x),m=A?"y":"x",p=A?"x":"y",g=Math.sign(h[1][m]-h[0][m])||1,_=i.map((V)=>(e.obstacles??[]).filter((W)=>W.componentId&&W.connectedTo.includes(V.name))),f=(e.buses??[]).some((V)=>t.connectionNames.some((W)=>V.connectionNames.includes(W))),y=h.map((V,W)=>{let j=_.flat().filter((Ae)=>Math.abs(Ae.center[m]-V[m])<Math.abs(h[1][m]-h[0][m])/2),q=new Set(j.map((Ae)=>Ae.componentId)),ne=e.obstacles.filter((Ae)=>Ae.componentId&&q.has(Ae.componentId)),ce=W===0?g:-g,oe=ne.length?ce>0?Math.max(...ne.map((Ae)=>Ae.center[m]+(A?Ae.height:Ae.width)/2)):Math.min(...ne.map((Ae)=>Ae.center[m]-(A?Ae.height:Ae.width)/2)):V[m],ie=2*s+a+u,J={...V,[m]:oe+ce*ie};if(!ne.length)return[J];let ee=Math.min(...ne.map((Ae)=>Ae.center.x-Ae.width/2))-ie,se=Math.max(...ne.map((Ae)=>Ae.center.x+Ae.width/2))+ie,le=Math.min(...ne.map((Ae)=>Ae.center.y-Ae.height/2))-ie,he=Math.max(...ne.map((Ae)=>Ae.center.y+Ae.height/2))+ie;return[f?J:W===0?{...J,[m]:J[m]+ce*Math.max(4*s,wn(i[0].pointsToConnect[W],i[1].pointsToConnect[W]))}:{...J,[p]:A?(ee+se)/2:(he+le)/2},J,{x:ee,y:V.y},{x:se,y:V.y},{x:V.x,y:le},{x:V.x,y:he}]}),x=(e.buses??[]).filter((V)=>e.connections.some((W)=>V.connectionNames.includes(W.name)&&W.pointsToConnect[0].layer===d));if(!f&&x.length){let V=e.obstacles.filter((W)=>W.componentId);if(V.length){let W=Math.max(...x.map((ce)=>ce.connectionNames.length))*(s+u),j=(ce)=>{let oe=(ce.ccwRotationDegrees??0)*Math.PI/180;return(A?Math.abs(Math.cos(oe))*ce.width+Math.abs(Math.sin(oe))*ce.height:Math.abs(Math.sin(oe))*ce.width+Math.abs(Math.cos(oe))*ce.height)/2},q=Math.min(...V.map((ce)=>ce.center[p]-j(ce)))-W-s-a-u,ne=Math.max(...V.map((ce)=>ce.center[p]+j(ce)))+W+s+a+u;for(let ce=0;ce<2;ce++)y[ce].push({...h[ce],[p]:q},{...h[ce],[p]:ne})}}let C=new Set((e.buses??[]).filter((V)=>t.connectionNames.some((W)=>V.connectionNames.includes(W))).flatMap((V)=>V.connectionNames)),I=e.connections.filter((V)=>C.has(V.name));if(I.length>2&&_.some((V)=>V.length)){let V=I.length*(s+u),W=h[1][p]-h[0][p],j=Math.abs(W)<0.00000001?g:Math.sign(W),q=I.flatMap((ce)=>ce.pointsToConnect.map((oe)=>oe[p])),ne=(j>0?Math.max(...q):Math.min(...q))+j*(V+2*s+a+u);for(let ce=0;ce<2;ce++){let oe=y[ce][0];if(y[ce].unshift({...y[ce][0],[m]:y[ce][0][m]+(ce===0?g:-g)*V,[p]:ne}),ce===0)y[ce].unshift({...oe,[m]:oe[m]+g*V/2})}}for(let V=0;V<2;V++){y[V]=y[V].filter((j,q,ne)=>ne.findIndex((ce)=>wn(j,ce)<0.00000001)===q);let W=(j)=>2*wn(j,h[V])+wn(j,h[1-V]);y[V].sort((j,q)=>W(j)-W(q))}let b=o?.variant??0,P=b%y[0].length,E=o?.handoffOffsets??[P,P+Math.floor(b/y[0].length)];for(let V=0;V<2;V++){let W=E[V]%y[V].length;y[V]=[...y[V].slice(W),...y[V].slice(0,W)]}let B=new Set(i.flatMap((V)=>[V.name,V.source_trace_id??V.name])),w=n.filter((V)=>!V.owners.some((W)=>B.has(W))),T=2*s+a,Q=(V,W,j=!1)=>({type:"pcb_trace",pcb_trace_id:`bus_lane_${V.name}`,connection_name:V.name,source_trace_id:V.source_trace_id??V.name,route:(j?W:qg(W)).map((q)=>({...q,route_type:"wire",layer:d,width:s}))}),N=null,F=1/0,H=0,z=new Map,Y=_.some((V)=>V.length>0),U=(Y?[s/2,s/10]:[void 0]).flatMap((V)=>y[0].map((W)=>({point:W,approachStep:V}))),X=o&&!o.copper.length&&!o.penalty&&!o.history?Dui(e,n):void 0;for(let{point:V,approachStep:W}of U)for(let j of y[1])e:for(let q of[0,-1,1,-2,2]){let ne=[V,j].map((Ee)=>({...Ee,[p]:Ee[p]+q*T})),ce=JSON.stringify([t,d,s,a,W,ne]),oe=X?.get(ce);if(oe){if(oe.traces&&oe.score<F)F=oe.score,N=oe.traces;if(oe.hasMatchedAlternative)return N;if(oe.countsAttempt&&N&&++H>=4)return N;continue}let ie=null,J=1/0,ee={name:"pair_corridor",pointsToConnect:ne.map((Ee)=>({...Ee,layer:d}))},se=new Ar(e,ee,T,w),le=o?new Ar(e,ee,T,[...w,...o.copper]):se,he=WT(ne[0],ne[1]).find((Ee)=>le.pathVisible(Ee)),ue=he?{solved:!0,failed:!1,expanded:0,result:he,step(){}}:Y||e.connections.length>12?new Fc(se,ne[0],ne[1],o?.copper,o?.penalty,o?.history):new moe(se,ne[0],ne[1]);try{while(!ue.solved&&!ue.failed&&ue.expanded<(ue instanceof Fc?500000:1000))ue.step(),yield}finally{if(ue instanceof Fc)ue.cancel()}if(!ue.solved){X?.set(ce,{traces:null,score:1/0,hasMatchedAlternative:!1,countsAttempt:!1});continue}let Ae=X_(ue.result,le);if(Ae.length<2||Ae.some((Ee,Te)=>{if(!Te)return!1;let be=Ae[Te-1],me=wn(be,Ee);if(me<0.00000001)return!0;if(Te<2)return!1;let ye=Ae[Te-2],Ce=wn(ye,be);return 1+((be.x-ye.x)*(Ee.x-be.x)+(be.y-ye.y)*(Ee.y-be.y))/(Ce*me)<0.00001})){X?.set(ce,{traces:null,score:1/0,hasMatchedAlternative:!1,countsAttempt:!1});continue}let _e=[jA(Ae,(s+a)/2),jA(Ae,-(s+a)/2)],Pe=[!1,!0].sort((Ee,Te)=>{let be=(me)=>i.reduce((ye,Ce,ve)=>{let De=_e[me?1-ve:ve];return ye+wn(Ce.pointsToConnect[0],De[0])+wn(Ce.pointsToConnect[1],De.at(-1))},0);return be(Ee)-be(Te)});for(let Ee of Pe){let Te=Ee?_e.toReversed():_e,be=i.map((me,ye)=>Q(me,Te[ye]));for(let me of[[[0,1],[0,1]],[[0,1],[1,0]],[[1,0],[0,1]],[[1,0],[1,0]]]){let ye=[[],[]],Ce=!1;for(let vt=0;vt<2;vt++)for(let Ht of me[vt]){let Xt=i[Ht],ut=Te[Ht][vt===0?0:Te[Ht].length-1],je=Xt.pointsToConnect[vt],Re=e,Je=vt===0?Te[Ht]:Te[Ht].toReversed(),Ve=4*s,Ye=[];for(let Mt=1;Mt<Je.length;Mt++){let Nt=Je[Mt-1],Ot=Je[Mt],mn=wn(Nt,Ot);if(Ve>=mn){Ve-=mn;continue}Ye.push({a:{x:Nt.x+(Ot.x-Nt.x)*Ve/mn,y:Nt.y+(Ot.y-Nt.y)*Ve/mn},b:Ot,radius:s/2,layer:d,owners:["reserved_pair_tail"]}),Ve=0}let mt=new Ar(Re,Xt,s,[...n,...Ye,...be.flatMap(Yi),...ye.flat().flatMap(Yi)]),ft=o?new Ar(Re,Xt,s,[...n,...Ye,...be.flatMap(Yi),...ye.flat().flatMap(Yi),...o.copper]):mt,Oe=WT(je,ut).find((Mt)=>ft.pathVisible(Mt)),qe=30*s,rt={minX:Math.max(e.bounds.minX,Math.min(je.x,ut.x)-qe),maxX:Math.min(e.bounds.maxX,Math.max(je.x,ut.x)+qe),minY:Math.max(e.bounds.minY,Math.min(je.y,ut.y)-qe),maxY:Math.min(e.bounds.maxY,Math.max(je.y,ut.y)+qe)},Ct=Oe?{solved:!0,failed:!1,expanded:0,result:Oe,step(){}}:new Fc(mt,je,ut,o?.copper,o?.penalty,Y?void 0:o?.history,Y?{step:W,bounds:rt}:void 0);try{while(!Ct.solved&&!Ct.failed&&Ct.expanded<500000)Ct.step(),yield}finally{if(Ct instanceof Fc)Ct.cancel()}if(!Ct.solved){Ce=!0;break}ye[Ht][vt]=Q(Xt,X_(Ct.result,ft))}if(Ce)continue;let ve=Tui(i.map((vt,Ht)=>({...Q(vt,[...ye[Ht][0].route,...Te[Ht].slice(1),...ye[Ht][1].route.toReversed().slice(1)],!0),coupledSection:[ye[Ht][0].route.length-1,ye[Ht][0].route.length+Te[Ht].length-2]})));if(!ve.every((vt,Ht)=>new Ar(e,i[Ht],s,[...n,...ve.flatMap(Yi)]).pathVisible(vt.route)))continue;let De={...e,connections:i,buses:[],differentialPairs:[t]},Ze;for(let vt of[1.5,0.75,0.375,0.1875]){let Ht=aD(De,ve,n,vt);if(!uF(Ht)||cD(De,Ht).some((Xt)=>!Xt.matched))continue;if(Ht.some((Xt)=>li(Xt.route)>P1(e,Xt.connection_name)+0.0000001))continue;try{let Xt=WW(De,Ht,tD(De,Ht),{maxCandidates:512}),ut=TF(De,s+a/2+u),je=new Map;for(let Je of De.traces??[])je.set(Je.connection_name,(je.get(Je.connection_name)??0)+1);if((De.traces?.length??0)>0&&[...je.values()].every((Je)=>Je===2)&&De.traces.every((Je)=>Je.route.filter((Ve)=>Ve.route_type==="via").length===1)&&ut.length&&Xt.some((Je)=>Je.curvedSegments?.some((Ve)=>!ut.some((Ye)=>b1(Je.route[Ve-1],Ye.copper)&&b1(Je.route[Ve],Ye.copper)))))Xt=WW(De,Ht,tD(De,Ht),{maxCandidates:512,packageOnlyPairTuning:!0});if(uF(Xt)&&cD(De,Xt).every((Je)=>Je.matched)){Ze=Xt;break}}catch{}}if(!Ze)continue;ve=Ze;let st=[...ve[0].route,...ve[1].route.toReversed()],et=e.connections.filter((vt)=>!t.connectionNames.includes(vt.name)&&vt.pointsToConnect.some((Ht)=>Ht.layer===d&&l(Ht,st))),lt=!1,it=Math.abs(li(ve[0].route)+c[0]-li(ve[1].route)-c[1]),gt=o?it+0.05*ve.reduce((vt,Ht)=>vt+li(Ht.route),0):ve.reduce((vt,Ht)=>vt+li(Ht.route),0),wt=(o?et:e.connections).filter((vt)=>!t.connectionNames.includes(vt.name)&&vt.pointsToConnect[0].layer===d),Dt=wt.length?JSON.stringify(ve.map((vt)=>vt.route)):"";for(let vt of wt){let Ht=`${vt.name}:${Dt}`,Xt=z.get(Ht);if(!Xt){let ut=(e.buses??[]).find((mt)=>mt.connectionNames.includes(vt.name))?.traceWidth??vt.nominalTraceWidth??vt.width??e.minTraceWidth,je=new Ar(e,vt,ut,[...n,...ve.flatMap(Yi)]),Re=WT(vt.pointsToConnect[0],vt.pointsToConnect[1]),Je=li(Re[0]),Ve=Re.find((mt)=>li(mt)<=Je+0.00000001&&je.pathVisible(mt)),Ye=Ve?{solved:!0,failed:!1,expanded:0,result:Ve,step(){},cancel(){}}:new Fc(je,vt.pointsToConnect[0],vt.pointsToConnect[1]);try{while(!Ye.solved&&!Ye.failed&&Ye.expanded<500000)Ye.step(),yield}finally{Ye.cancel()}Xt={reachable:Ye.solved,length:Ye.solved?li(Ye.result):1/0},z.set(Ht,Xt)}if(!Xt.reachable){lt=!0;break}gt+=o?0.05*Math.max(0,Xt.length-li(WT(vt.pointsToConnect[0],vt.pointsToConnect[1])[0])):Xt.length}if(!lt&&ve.every((vt)=>bc(vt.route,s+u))){if(gt<J)J=gt,ie=ve;if(gt<F)F=gt,N=ve;if(o&&it<=t.lengthTolerance)return X?.set(ce,{traces:ie,score:J,hasMatchedAlternative:!0,countsAttempt:!0}),N;if(!o&&++H>=2)return N;if(!o)continue e}}}if(X?.set(ce,{traces:ie,score:J,hasMatchedAlternative:!1,countsAttempt:!0}),o&&N&&++H>=4)return N}return N}function XT(e){let t=new Map,n=e.obstacles.filter((s)=>s.componentId),o=new Map;for(let s of n){let a=s.circuitJsonMetadata?.pcb_port_id;if(a)o.set(a,s.componentId);let c=(s.ccwRotationDegrees??0)*Math.PI/180,l=Math.abs(Math.cos(c))*s.width+Math.abs(Math.sin(c))*s.height,d=Math.abs(Math.sin(c))*s.width+Math.abs(Math.cos(c))*s.height,u=t.get(s.componentId)??{left:1/0,right:-1/0,bottom:1/0,top:-1/0};u.left=Math.min(u.left,s.center.x-l/2),u.right=Math.max(u.right,s.center.x+l/2),u.bottom=Math.min(u.bottom,s.center.y-d/2),u.top=Math.max(u.top,s.center.y+d/2),t.set(s.componentId,u)}let i=new Map([...t].map(([s,a])=>[s,{x:(a.left+a.right)/2,y:(a.bottom+a.top)/2}])),r=new Map;for(let s of e.connections){if(s.pointsToConnect.length!==2)continue;let a=s.pointsToConnect.map((c)=>{let l=c.pcb_port_id?o.get(c.pcb_port_id):void 0;if(l)return l;let d=new Set([s.name,s.source_trace_id,c.pointId,c.pcb_port_id].filter((u)=>!!u));return n.filter((u)=>u.connectedTo.some((h)=>d.has(h))).sort((u,h)=>wn(c,u.center)-wn(c,h.center))[0]?.componentId});for(let[c,l]of a.entries()){let d=a[1-c];if(!l||!d||l===d)continue;let u=JSON.stringify([l,d]),h=r.get(u)??{source:l,remote:d,points:[]};h.points.push(s.pointsToConnect[c]),r.set(u,h)}}return[...r.values()].some((s)=>{let a=i.get(s.source),c=i.get(s.remote),l={x:s.points.reduce((d,u)=>d+u.x,0)/s.points.length,y:s.points.reduce((d,u)=>d+u.y,0)/s.points.length};return(l.x-a.x)*(c.x-a.x)+(l.y-a.y)*(c.y-a.y)<-0.000000001})}function*aVe(e,t,n){let o=e.minTraceToPadEdgeClearance??e.defaultObstacleMargin??0.075;for(let i of t){let r=i.route[0].width;if(bc(i.route,r+o))continue;if(i.coupledSection)return!1;let s=e.connections.find((u)=>u.name===i.connection_name),a=new Ar(e,s,r,[...n,...t.flatMap(Yi)]),c=r*10,l={minX:Math.max(e.bounds.minX,Math.min(...i.route.map((u)=>u.x))-c),maxX:Math.min(e.bounds.maxX,Math.max(...i.route.map((u)=>u.x))+c),minY:Math.max(e.bounds.minY,Math.min(...i.route.map((u)=>u.y))-c),maxY:Math.min(e.bounds.maxY,Math.max(...i.route.map((u)=>u.y))+c)},d=!1;for(let u of[r/4,r/5]){for(let h of[!1,!0]){let A=h?s.pointsToConnect.toReversed():s.pointsToConnect,m=new Fc(a,A[0],A[1],[],0,void 0,{step:u,bounds:l});try{while(!m.failed&&!m.solved)m.step(),yield;if(!m.solved)continue;let p=X_(h?m.result.toReversed():m.result,a);if(!bc(p,r+o))continue;i.route=p.map((g)=>({...g,route_type:"wire",layer:s.pointsToConnect[0].layer,width:r})),d=!0;break}finally{m.cancel()}}if(d)break}if(!d)return!1}return!0}function*Oui(e,t,n,o,i,r,s){let a=new Map,c=0;for(let l=0;l<24&&c<20000;l++){let d=o.select(i,r);if(d)return d;let u=o.unresolvedUnits(i);if(!u?.length)return null;let h=u.join("\x00"),A=a.get(h)??0;a.set(h,A+1);let m=0;for(let p of[...u].sort((g,_)=>Number(e.differentialPairs?.some((f)=>f.connectionNames.includes(g)))-Number(e.differentialPairs?.some((f)=>f.connectionNames.includes(_))))){let g=e.differentialPairs?.find((C)=>C.connectionNames.includes(p));if(g){if(m||A<1)continue;for(let C=0;C<4&&c<20000;C++){let I=o.conditionalRoutes(u.filter((B)=>B!==p),C===0?-1:A*4+C,C%2===0?i.filter((B)=>B!==p):[]);if(!I)continue;let b=_D(e,g,[...t,...I.flatMap(Yi)],{copper:[],penalty:0,variant:A}),P=b.next(),E=0;try{while(!P.done&&c<20000&&E<2000)c++,E++,yield,P=b.next()}finally{if(!P.done)b.return(null)}if(P.done&&P.value){let B=o.revisionNumber;o.add(p,P.value),m+=Number(o.revisionNumber!==B)}}continue}let _=e.connections.find((C)=>C.name===p),y=e.buses?.some((C)=>C.connectionNames.includes(p))?[_.pointsToConnect[0].layer]:s.get(p)??[_.pointsToConnect[0].layer],x=u.filter((C)=>C!==p);for(let C=0;C<12&&c<20000;C++){let I=o.conditionalRoutes(x,C===0?-1:A*12+C,C%2===0?i.filter((b)=>b!==p):[]);if(!I)continue;for(let b of y){let P={..._,pointsToConnect:_.pointsToConnect.map((N)=>({...N,layer:b}))},E=n.get(p)??e.minTraceWidth,B=new Ar(e,P,E,[...t,...I.flatMap(Yi)]),w=new Fc(B,P.pointsToConnect[0],P.pointsToConnect[1]);try{while(!w.solved&&!w.failed&&w.expanded<500000&&c<20000)w.step(),c++,yield}finally{w.cancel()}if(!w.solved)continue;let T=X_(w.result,B);if(!bc(T,E/2+B.margin))continue;let Q=o.revisionNumber;o.add(p,[{type:"pcb_trace",pcb_trace_id:`bus_lane_${p}`,connection_name:p,source_trace_id:_.source_trace_id??p,route:T.map((N)=>({...N,route_type:"wire",layer:b,width:E}))}]),m+=Number(o.revisionNumber!==Q)}}}if(!m&&A>5)return null}return o.select(i,r)}function*osn(e,t,n,o,i,r){let[s,a]=e.connection.pointsToConnect,c=new Fc(e,s,t,n,o,i,{maxLength:r-wn(t,a)});try{while(!c.solved&&!c.failed)c.step(),yield}finally{c.cancel()}if(!c.solved)return null;let l=X_(c.result,e),d=[],u=li(l)-e.width-e.margin-0.0000001;for(let g=1;g<l.length&&u>0;g++){let _=l[g-1],f=l[g],y=wn(_,f),x=Math.min(1,u/y);d.push({a:_,b:{x:_.x+(f.x-_.x)*x,y:_.y+(f.y-_.y)*x},radius:e.width/2,layer:s.layer,owners:["waypoint_prefix"]}),u-=y}let h=new Ar(e.input,e.connection,e.width,[...e.copper,...d]),A=new Fc(h,t,a,n,o,i,{maxLength:r-li(l)});try{while(!A.solved&&!A.failed)A.step(),yield}finally{A.cancel()}if(!A.solved)return null;let m=X_(A.result,h),p=qg([...l,...m.slice(1)]);if(li(p)>r+0.00000001||!bc(p,e.width/2+e.margin))return null;return p}var f$t=new WeakMap;function*zui(e,t,n,o){let i=JSON.stringify([e.bounds,e.layerCount,e.minTraceWidth,e.obstacles,e.traces,e.connections.map((c)=>c.pointsToConnect),e.minBoardEdgeClearance,e.minTraceToPadEdgeClearance??e.defaultObstacleMargin??0.075,n,t.map((c)=>[c.name,c.source_trace_id,c.pointsToConnect,o.get(c.name)])]),r=f$t.get(e)??new Map;f$t.set(e,r);let s=r.get(i);if(s)return structuredClone(s);let a=[];for(let c of t){let l=o.get(c.name),d=new Fc(new Ar(e,c,l,n),c.pointsToConnect[0],c.pointsToConnect[1]);try{while(!d.solved&&!d.failed)d.step(),yield;if(d.solved)a.push({type:"pcb_trace",pcb_trace_id:`certificate_${c.name}`,connection_name:c.name,route:d.result.map((u)=>({...u,route_type:"wire",layer:c.pointsToConnect[0].layer,width:l}))})}finally{if(!d.solved&&!d.failed)d.cancel()}}if(r.size>=8)r.delete(r.keys().next().value);return r.set(i,structuredClone(a)),a}var fX=class{geometry=new WeakMap;conflicts=new WeakMap;getGeometry(e){let t=this.geometry.get(e);if(t)return t;let n=[],o=new Float64Array(Math.max(0,e.length-1)*4),i=1/0,r=-1/0,s=1/0,a=-1/0;for(let l=1;l<e.length;l++){let d=e[l-1],u=e[l],h=(l-1)*4;n.push([d,u]),o[h]=Math.min(d.x,u.x),o[h+1]=Math.max(d.x,u.x),o[h+2]=Math.min(d.y,u.y),o[h+3]=Math.max(d.y,u.y),i=Math.min(i,o[h]),r=Math.max(r,o[h+1]),s=Math.min(s,o[h+2]),a=Math.max(a,o[h+3])}let c={edges:n,bounds:o,minX:i,maxX:r,minY:s,maxY:a};return this.geometry.set(e,c),c}firstConflict(e,t,n){let o=this.conflicts.get(e),i=o?.get(t);if(i?.required===n)return i.result;if(!o)o=new WeakMap,this.conflicts.set(e,o);let r=this.getGeometry(e),s=this.getGeometry(t),a=null;if(r.maxX+n>=s.minX&&s.maxX+n>=r.minX&&r.maxY+n>=s.minY&&s.maxY+n>=r.minY)e:for(let c=0;c<r.edges.length;c++){let l=c*4;for(let d=0;d<s.edges.length;d++){let u=d*4;if(r.bounds[l+1]+n<s.bounds[u]||s.bounds[u+1]+n<r.bounds[l]||r.bounds[l+3]+n<s.bounds[u+2]||s.bounds[u+3]+n<r.bounds[l+2])continue;if(xB(r.edges[c],s.edges[d])<n){a=[c+1,d+1];break e}}}return o.set(t,{required:n,result:a}),a}},Gui=class{bits=new Uint8Array(0);sparse=new Map;get(e){if(e>=4096)return this.sparse.get(e);let t=this.bits[e];return t?t===2:void 0}set(e,t){if(e>=4096){this.sparse.set(e,t);return}if(e>=this.bits.length){let n=new Uint8Array(Math.max(16,2**Math.ceil(Math.log2(e+1))));n.set(this.bits),this.bits=n}this.bits[e]=t?2:1}keys(){return this.sparse.keys()}delete(e){this.sparse.delete(e)}},cVe=class{constructor(e,t=120){this.clearance=e,this.limit=t}clearance;limit;pools=new Map;nextId=0;additions=0;assignments=new Map;routeConflicts=new fX;signatures=new Map;routeSignatures=new WeakMap;revision=0;selection;add(e,t){let n=this.pools.get(e)??[],o=this.signatures.get(e);if(!o)o=new Set,this.signatures.set(e,o);let i=`[${t.map((a)=>{let c=this.routeSignatures.get(a.route);if(c===void 0)c=JSON.stringify(a.route),this.routeSignatures.set(a.route,c);return c}).join(",")}]`;if(o.has(i))return;let r=t.map((a)=>li(a.route)),s={traces:t,key:i,length:r.reduce((a,c)=>a+c,0),peak:Math.max(...r),layers:[...new Set(t.map((a)=>a.route[0].layer))],singleLayer:t.every((a)=>a.route[0].layer===t[0].route[0].layer)?t[0].route[0].layer:void 0,conflicts:new Gui,id:this.nextId++};if(n.push(s),o.add(i),n.length>this.limit)o.delete(n.shift().key);this.pools.set(e,n),this.additions++,this.revision++}transformUnit(e,t){let n=this.pools.get(e)??[];this.pools.delete(e),this.signatures.delete(e),this.revision++;for(let o of n){let i=t(o.traces);if(i)this.add(e,i)}}hasEveryUnit(e){return e.every((t)=>!!this.pools.get(t)?.length)}unresolvedUnits(e){if(this.compatible(e.map((n)=>this.pools.get(n)??[]),500000))return null;let t=e.slice();for(let n of e){let o=t.filter((i)=>i!==n);if(!this.compatible(o.map((i)=>this.pools.get(i)??[]),500000))t=o}return t}conditionalRoutes(e,t,n=[]){if(!e.length)return[];let o=t%e.length,i=Math.floor(t/e.length),r=e.map((c,l)=>{let d=this.pools.get(c)??[];return t<0||l!==o||!d.length?d:[d[i%d.length]]}),s=this.compatible(r,500000);if(!s)return null;let a=s.map((c)=>[c]);for(let c of n){if(e.includes(c))continue;let l=this.pools.get(c)??[],d=this.compatible([...a,l]);if(!d)continue;a.push(l),s=d}return s.flatMap((c)=>c.traces)}get revisionNumber(){return this.revision}collides(e,t){if(e.singleLayer!==void 0&&t.singleLayer!==void 0&&e.singleLayer!==t.singleLayer)return!1;let n=e.id<t.id?e:t,o=Math.max(e.id,t.id),i=n.conflicts,r=i.get(o);if(r!==void 0)return r;if(!e.layers.some((s)=>t.layers.includes(s)))return i.set(o,!1),!1;for(let s of e.traces)for(let a of t.traces){if(s.route[0].layer!==a.route[0].layer)continue;let c=(s.route[0].width+a.route[0].width)/2+this.clearance-0.00000001;if(this.routeConflicts.firstConflict(s.route,a.route,c))return i.set(o,!0),!0}return i.set(o,!1),!1}compatible(e,t=50000){let n=`${t}:`+e.map((i)=>i.map((r)=>r.id).join(",")).join(";");if(this.assignments.has(n))return this.assignments.get(n);let o=this.computeCompatible(e,t);if(this.assignments.size>=128)this.assignments.delete(this.assignments.keys().next().value);return this.assignments.set(n,o),o}computeCompatible(e,t){if(e.some((a)=>!a.length))return null;let n=e.map((a)=>new Set(a.flatMap((c)=>c.layers))),o=new Set(e.map((a,c)=>c)),i=[];while(o.size){let a=[o.values().next().value];o.delete(a[0]);for(let c=0;c<a.length;c++)for(let l of o){if(![...n[l]].some((d)=>n[a[c]].has(d)))continue;o.delete(l),a.push(l)}i.push(a)}if(i.length>1){let a=[];for(let c of i){let l=this.compatible(c.map((d)=>e[d]),t);if(!l)return null;c.forEach((d,u)=>{a[d]=l[u]})}return a}let r=e.map(()=>{return}),s=(a)=>{if(--t<0)return null;let c=-1;for(let l=0;l<a.length;l++){if(r[l])continue;if(!a[l].length)return null;if(c<0||a[l].length<a[c].length)c=l}if(c<0)return r;for(let l of a[c]){r[c]=l;let d=a.map((h,A)=>r[A]?h:h.filter((m)=>!this.collides(l,m))),u=s(d);if(u)return u.slice();if(r[c]=void 0,t<0)break}return null};return s(e.map((a)=>[...a].sort((c,l)=>c.length-l.length)))}pruneConflicts(){let e=new Set([...this.pools.values()].flat().map((t)=>t.id));for(let t of this.pools.values())for(let n of t)for(let o of n.conflicts.keys())if(!e.has(o))n.conflicts.delete(o);this.additions=0}select(e,t=[]){let n=JSON.stringify([e,t]);if(this.selection?.revision===this.revision&&this.selection.key===n)return this.selection.result?.slice()??null;let o=this.computeSelection(e,t);return this.selection={revision:this.revision,key:n,result:o},o?.slice()??null}computeSelection(e,t){if(this.additions>=100)this.pruneConflicts();let n=e.map((r)=>this.pools.get(r)??[]),o=this.compatible(n);if(!o)return null;let i=(r)=>r.peak;for(let r of[e,...t]){let s=new Set(r.map((u)=>e.indexOf(u)).filter((u)=>u>=0));if(!s.size)continue;let a=Math.max(...o.filter((u,h)=>s.has(h)).map(i)),c=[...new Set(n.flatMap((u,h)=>s.has(h)?u.map(i):[]))].filter((u)=>u<a).sort((u,h)=>u-h),l=0,d=c.length-1;while(l<=d){let u=l+d>>1,h=this.compatible(n.map((A,m)=>s.has(m)?A.filter((p)=>i(p)<=c[u]):A));if(h)o=h,a=c[u],d=u-1;else l=u+1}n=n.map((u,h)=>s.has(h)?u.filter((A)=>i(A)<=a):u)}return o.flatMap((r)=>r.traces)}};function*lVe(e){if(!e.length)yield[];else for(let t=0;t<e.length;t++)for(let n of lVe(e.filter((o,i)=>t!==i)))yield[e[t],...n]}function*Yui(e){if(e.length<=4){yield*lVe(e);return}let t=new Set;for(let n of lVe(e))for(let o=0;o<n.length;o++){let i=[...n.slice(o),...n.slice(0,o)],r=JSON.stringify(i);if(t.has(r))continue;if(t.add(r),yield i,t.size===24)return}}function*Vui(e,t,n,o,i,r={}){let s=new Map(t.map((m)=>[m.name,m])),a=(m)=>i.get(m)??s.get(m)?.width??s.get(m)?.nominalTraceWidth??e.minTraceWidth,c=(m)=>{let p=s.get(m.connection_name??"");return!!p&&p.pointsToConnect.length===2&&m.route.length>=2&&m.route.every((g)=>g.route_type==="wire"&&Number.isFinite(g.x)&&Number.isFinite(g.y)&&g.layer===p.pointsToConnect[0].layer&&Number.isFinite(g.width)&&g.width>0&&Math.abs(g.width-a(p.name))<0.000000000001)&&wn(m.route[0],p.pointsToConnect[0])<=0.00000001&&wn(m.route.at(-1),p.pointsToConnect[1])<=0.00000001};if(o.some((m)=>!c(m)))return null;let l=new Set((e.differentialPairs??[]).flatMap((m)=>m.connectionNames)),d=t.filter((m)=>!o.some((p)=>p.connection_name===m.name));if(!d.length||d.some((m)=>l.has(m.name)||m.pointsToConnect.length!==2||m.pointsToConnect[0].layer!==m.pointsToConnect[1].layer))return null;let u=new Map;for(let m of d){let p=m.pointsToConnect[0].layer,g=u.get(p)??[];g.push(m),u.set(p,g)}if([...u.values()].some((m)=>m.length>2))return null;let h=o.slice(),A={searches:0,searchSteps:0,candidates:0};for(let m of u.keys()){let p=t.filter((y)=>y.pointsToConnect[0].layer===m),g=new Set(p.map((y)=>y.name)),_=h.filter((y)=>!g.has(y.connection_name)),f=yield*Uui(e,p,[...n,..._.flatMap(Yi)],h.filter((y)=>g.has(y.connection_name)),i,r,A);if(!f)return null;h=[..._,...f]}if(h.length!==t.length||new Set(h.map((m)=>m.connection_name)).size!==t.length)return null;for(let m of h){if(!c(m))return null;let p=s.get(m.connection_name);if(!new Ar(e,p,a(p.name),[...n,...h.filter((_)=>_!==m).flatMap(Yi)]).pathVisible(m.route)||!(r.deferRetainedSelfClearance&&o.some((_)=>_.route===m.route))&&!bc(m.route,a(p.name)+(e.minTraceToPadEdgeClearance??e.defaultObstacleMargin??0.075)))return null}return h}function*Uui(e,t,n,o,i,r,s){let a=Math.min(5,r.maxSubsetSize??4),c=r.maxSearches??1200,l=r.maxSearchSteps??180000,d=r.maxCandidatesPerLane??80,u=e.minTraceToPadEdgeClearance??e.defaultObstacleMargin??0.075,h=new Map(t.map((X)=>[X.name,X])),A=new Set((e.differentialPairs??[]).flatMap((X)=>X.connectionNames)),m=(X)=>!A.has(X.name)&&X.pointsToConnect.length===2&&X.pointsToConnect[0].layer===X.pointsToConnect[1].layer,p=(X)=>i.get(X)??h.get(X)?.width??h.get(X)?.nominalTraceWidth??e.minTraceWidth,g=(X)=>{let V=h.get(X.connection_name??"");return!!V&&V.pointsToConnect.length===2&&X.route.length>=2&&X.route.every((W)=>W.route_type==="wire"&&Number.isFinite(W.x)&&Number.isFinite(W.y)&&W.layer===V.pointsToConnect[0].layer&&Number.isFinite(W.width)&&W.width>0&&Math.abs(W.width-p(V.name))<0.000000000001)&&wn(X.route[0],V.pointsToConnect[0])<=0.00000001&&wn(X.route.at(-1),V.pointsToConnect[1])<=0.00000001};if(o.some((X)=>!g(X)))return null;let _=new Set(o.map((X)=>X.connection_name)),f=t.filter((X)=>!_.has(X.name));if(!f.length||f.length>2||f.length>a||f.some((X)=>!m(X)))return null;let y=new WeakMap,x=(X)=>{let V=y.get(X);if(!V)V=Yi(X),y.set(X,V);return V},C=(X,V)=>({type:"pcb_trace",pcb_trace_id:`lane_closure_repair_${X}`,connection_name:X,source_trace_id:h.get(X).source_trace_id,route:V.map((W)=>({...W,route_type:"wire",layer:h.get(X).pointsToConnect[0].layer,width:p(X)}))}),I=(X)=>{let V=h.get(X.connection_name??"");return!!V&&m(V)&&!X.coupledSection&&!X.curvedSegments?.length&&X.route.every((W)=>W.route_type==="wire")},b=o,P=f.map((X)=>X.name),E=0,B=()=>s.searches>=c||s.searchSteps>=l,w=()=>r.onProgress?.({searches:s.searches,searchSteps:s.searchSteps,subset:[...P],candidates:s.candidates}),T=2*Math.max(...t.map((X)=>wn(X.pointsToConnect[0],X.pointsToConnect[1]))),Q=new Map;function*N(X,V,W=!1){if(B())return null;let j=JSON.stringify([X,W,h.get(X).pointsToConnect,p(X),V.map((J)=>[J.connection_name,J.route])]);if(Q.has(j))return Q.get(j);let q=(J)=>{if(Q.size>=256)Q.delete(Q.keys().next().value);return Q.set(j,J),J};s.searches++,w();let ne=h.get(X),ce=new Ar(e,ne,p(X),[...n,...V.flatMap(x)]),oe=new Fc(ce,ne.pointsToConnect[W?1:0],ne.pointsToConnect[W?0:1],[],0,void 0,{maxLength:r.maxLengths?.get(X)??T}),ie=0;try{while(ie<(r.maxSearchStepsPerAttempt??500)&&!oe.solved&&!oe.failed&&s.searchSteps<l)oe.step(),ie++,s.searchSteps++,yield;if(!oe.solved)return q(null);let J=W?oe.result.toReversed():oe.result,ee=X_(J,ce);if(!ce.pathVisible(ee)||!bc(ee,p(X)+u))return q(null);return q(C(X,ee))}finally{oe.cancel(),w()}}let F=new Map,H=new Map;for(let X of f){let V=yield*N(X.name,b);if(V)F.set(X.name,[V]);else for(let W of b){if(!I(W)||W.route[0].layer!==X.pointsToConnect[0].layer)continue;let j=yield*N(X.name,b.filter((q)=>q!==W));if(!j)continue;H.set(W.connection_name,(H.get(W.connection_name)??0)+1),F.set(X.name,[...F.get(X.name)??[],j])}}function*z(X,V,W=0,j=[]){if(!V){yield j;return}for(let q=W;q<=X.length-V;q++)yield*z(X,V-1,q+1,[...j,X[q]])}for(let X of f){if(F.has(X.name))continue;let V=b.filter((j)=>I(j)&&j.route[0].layer===X.pointsToConnect[0].layer),W=!1;for(let j=2;j<=a-f.length&&!W;j++)for(let q of z(V,j)){if(B())break;let ne=yield*N(X.name,b.filter((ce)=>!q.includes(ce)));if(!ne)continue;for(let ce of q)H.set(ce.connection_name,(H.get(ce.connection_name)??0)+1);F.set(X.name,[ne]),W=!0;break}}for(let[X]of[...H].sort((V,W)=>W[1]-V[1])){if(P.length>=Math.min(4,a))break;P.push(X)}if(B())return null;function*Y(){let X=b.filter((j)=>!P.includes(j.connection_name)),V=new Map;for(let j of f.map((q)=>q.name)){let q=yield*N(j,X);if(!q)continue;for(let ne of P.filter((ce)=>ce!==j)){if(yield*N(ne,[...X,q]))continue;for(let ce of X){if(!I(ce)||ce.route[0].layer!==h.get(ne).pointsToConnect[0].layer)continue;if(!(yield*N(ne,[...X.filter((ie)=>ie!==ce),q])))continue;let oe=V.get(ce.connection_name)??new Set;oe.add(ne),V.set(ce.connection_name,oe)}}}let W=[...V].sort((j,q)=>q[1].size-j[1].size)[0]?.[0];if(W)return W;for(let j of f){let q=yield*N(j.name,b.filter((ce)=>!I(ce)));if(!q)continue;let ne=X.find((ce)=>I(ce)&&!new Ar(e,j,p(j.name),[...n,...x(ce)]).pathVisible(q.route));if(ne)return ne.connection_name}return null}let U=[...b,...[...F.values()].flat()];for(;;){let X=b.filter((ue)=>!P.includes(ue.connection_name)),V=[...n,...X.flatMap(x)],W=new cVe(u,d),j=new Map,q=new Map,ne=(ue)=>{let Ae=ue.connection_name;if(!g(ue))return!1;if(!new Ar(e,h.get(Ae),p(Ae),V).pathVisible(ue.route)||!(r.deferRetainedSelfClearance&&o.some((be)=>be.route===ue.route))&&!bc(ue.route,p(Ae)+u))return!1;let Pe=JSON.stringify(ue.route),Ee=q.get(Ae)??new Set;if(Ee.has(Pe))return!1;let Te=j.get(Ae)??[];if(Te.push(ue),Ee.add(Pe),Te.length>d)Ee.delete(JSON.stringify(Te.shift().route));return j.set(Ae,Te),q.set(Ae,Ee),W.add(Ae,[ue]),E++,s.candidates++,!0},ce=()=>{let ue=W.select(P,[P]);if(!ue)return null;let Ae=[...X,...ue];if(Ae.length!==t.length||new Set(Ae.map((_e)=>_e.connection_name)).size!==t.length)return null;for(let _e of Ae){let Pe=h.get(_e.connection_name);if(!Pe||!g(_e))return null;if(!new Ar(e,Pe,p(Pe.name),[...n,...Ae.filter((Te)=>Te!==_e).flatMap(x)]).pathVisible(_e.route)||!(r.deferRetainedSelfClearance&&o.some((Te)=>Te.route===_e.route))&&!bc(_e.route,p(Pe.name)+u))return null}return Ae};for(let ue of U)if(P.includes(ue.connection_name))ne(ue);for(let ue of P){let Ae=yield*N(ue,X);if(Ae)ne(Ae)}let oe=ce();if(oe)return oe;for(let ue of Yui(P)){let Ae=[];for(let _e of ue){let Pe=yield*N(_e,[...X,...Ae]);if(!Pe)break;if(Ae.push(Pe),ne(Pe),oe=ce(),oe)return oe}if(B())return null}let ie=(ue,Ae)=>{let _e=j.get(ue)??[],Pe=[..._e].sort((Ee,Te)=>li(Ee.route)-li(Te.route));return _e.length<=Ae?Pe:[...new Set([_e[0],...Pe.slice(0,Ae/2-1),..._e.slice(-Ae/2)])]};function*J(ue=!1,Ae=!1){let _e=ue?Math.min(8,d):d;for(let Pe=0;Pe<(Ae?0:ue?1:r.maxConditionalPasses??4);Pe++){let Ee=E,Te=new Map(P.map((be)=>[be,ie(be,_e)]));for(let be of P)for(let me of P.filter((ye)=>ye!==be))for(let ye of Te.get(me)){let Ce=yield*N(be,[...X,ye]);if(Ce)ne(Ce);let ve=ce();if(ve)return ve;if(B())return null}if(E===Ee)break}for(let Pe of P){let Ee=P.filter((be)=>be!==Pe),Te=new Map(Ee.map((be)=>[be,ie(be,_e)]));for(let be of Ee)for(let me of Te.get(be)){let ye=new cVe(u,d);for(let Ze of Ee)for(let st of Ze===be?[me]:Te.get(Ze))ye.add(Ze,[st]);let Ce=ye.select(Ee,[Ee]);if(!Ce)continue;let ve=yield*N(Pe,[...X,...Ce]);if(ve)ne(ve);let De=ce();if(De)return De;if(B())return null}}return null}if(oe=yield*J(!0),oe||B())return oe;if(P.length<a){let ue=yield*Y();if(B())return null;if(ue){U.push(...[...j.values()].flat()),P.push(ue);continue}}let ee=t.flatMap((ue)=>ue.pointsToConnect),se=(p(f[0].name)+u)*2,le=e.obstacles.filter((ue)=>ue.componentId),he=E;for(let ue of[0.1,0.3,0.5,0.7,0.9])for(let Ae=0;Ae<11;Ae++)for(let _e of P){if(B())return null;s.searches++;let Pe=h.get(_e),[Ee,Te]=Pe.pointsToConnect,be=Math.abs(Te.y-Ee.y)>=Math.abs(Te.x-Ee.x),me=(it)=>be?it.x:it.y,ye=Math.min(...ee.map(me))-se,Ce=Math.max(...ee.map(me))+se,ve=Array.from({length:9},(it,gt)=>ye+(Ce-ye)*gt/8);if(le.length)ve.push(Math.min(...le.map((it)=>me(it.center)-(be?it.width:it.height)/2))-se,Math.max(...le.map((it)=>me(it.center)+(be?it.width:it.height)/2))+se);let De=ve[Ae%ve.length],Ze=be?{x:De,y:Ee.y+(Te.y-Ee.y)*ue}:{x:Ee.x+(Te.x-Ee.x)*ue,y:De},st=new Ar(e,Pe,p(_e),V),et=osn(st,Ze,[],0,void 0,r.maxLengths?.get(_e)??T),lt=et.next();try{while(!lt.done&&s.searchSteps<l)s.searchSteps++,yield,lt=et.next()}finally{if(!lt.done)et.return(null)}if(lt.done&<.value)ne(C(_e,lt.value));if(oe=ce(),oe)return oe;if(E-he>=12){if(oe=yield*J(!0,!0),oe||B())return oe;he=E}}return yield*J()}}function*DF(e,t,n,o,i,r,s=new Map,a=()=>!0,c=!1,l=!1){let d=t.some((U)=>(s.get(U.name)?.length??1)>1),u=new Map,h=new Map,A=new Map,m=e.minTraceToPadEdgeClearance??e.defaultObstacleMargin??0.075,p=(e.differentialPairs??[]).filter((U)=>(U.traceGap!==void 0||U.maxUncoupledLength!==void 0)&&U.connectionNames.every((X)=>t.some((V)=>V.name===X))),g=new Set(p.flatMap((U)=>U.connectionNames)),_=[...p.map((U)=>({pair:U,connections:U.connectionNames.map((X)=>t.find((V)=>V.name===X))})),...t.filter((U)=>!g.has(U.name)).map((U)=>({pair:void 0,connections:[U]}))].sort((U,X)=>Number(!U.pair)-Number(!X.pair)||li(U.connections[0].pointsToConnect)-li(X.connections[0].pointsToConnect)),f=new Map,y=new Map;for(let U of e.buses??[]){let X=t.filter((W)=>U.connectionNames.includes(W.name)),V=1.4849999999999999*Math.max(...X.map((W)=>li(W.pointsToConnect)));for(let W of X){let j=P1(e,W.name);f.set(W.name,Math.min(V,j)),y.set(W.name,Math.min(V*4/3,j))}}let x=new cVe(m,240),C=new fX,I=_.map((U)=>U.connections[0].name),b=[...(e.buses??[]).map((U)=>_.filter((X)=>X.connections.some((V)=>U.connectionNames.includes(V.name))).map((X)=>X.connections[0].name)),..._.filter((U)=>!U.connections.some((X)=>(e.buses??[]).some((V)=>V.connectionNames.includes(X.name)))).map((U)=>[U.connections[0].name])],P=new WeakMap,E=(U)=>{let X=P.get(U);if(!X)X=Yi(U),P.set(U,X);return X},B=o.flatMap(E),w=new Map,T=[..._],Q=0,N=0,F=0,H=0,z=0,Y=-1/0;e:for(let U=0;U<12000&&T.length;U++){let V=10+Math.floor(U/Math.max(1,t.length/4))*4;if(U-N>=_.length*8){for(let[se,le]of f){let he=y.get(se);if(le<he)f.set(se,Math.min(he,le*1.025))}let J=new Set(T.flatMap((se)=>se.connections.map((le)=>le.pointsToConnect[0].layer))),ee=_.filter((se)=>se.pair&&J.has(se.connections[0].pointsToConnect[0].layer));if(ee.length){let se=ee[F++%ee.length],le=T.indexOf(se);if(le>=0)T.splice(le,1);T.unshift(se)}N=U}let W=T.shift(),j=[W];for(let J of j){let ee=J.connections[0],se=(w.get(ee.name)??0)+1;w.set(ee.name,se);let le=J.connections.flatMap((et)=>u.has(et.name)?[u.get(et.name)]:[]);for(let et of J.connections)u.delete(et.name);let he=s.get(ee.name)?.filter((et)=>J.connections.every((lt)=>s.get(lt.name)?.includes(et)))??[ee.pointsToConnect[0].layer],ue=le.length?le:J.connections.map((et)=>({connection_name:et.name,route:et.pointsToConnect})),Ae=(et)=>{let lt=et===ee.pointsToConnect[0].layer?0:0.25;for(let it of u.values()){if(it.route[0].layer!==et)continue;if(ue.some((wt)=>C.firstConflict(wt.route,it.route,(i.get(wt.connection_name)+it.route[0].width)/2+m-0.00000001)))lt++}return lt};if(he.length>1){let et=new Map(he.map((lt)=>[lt,Ae(lt)]));he.sort((lt,it)=>et.get(lt)-et.get(it))}let _e=he[0];for(let et of J.connections)for(let lt of et.pointsToConnect)lt.layer=_e;let Pe=i.get(ee.name),Ee=ee.pointsToConnect[0].layer;u.delete(ee.name);let Te=[...u.values()],be=[...o,...Te],me=Te.flatMap(E),ye=[...n,...B,...!J.pair?Te.filter((et)=>g.has(et.connection_name)).flatMap(E):[]],Ce=new Ar(e,ee,Pe,ye);if(J.pair){let et=new mWe(Ce);if(!h.has(Ee))h.set(Ee,new Float32Array(et.cellCount));A.set(Ee,et);let lt=_D(e,J.pair,n,{copper:[],penalty:0,variant:se-1}),it=lt.next();try{while(!it.done)yield Te,it=lt.next()}finally{if(!it.done)it=lt.return(null)}if(!it.value){if(le.length!==J.connections.length)return null;for(let gt of le){u.set(gt.connection_name,gt);let wt=J.connections.find((Dt)=>Dt.name===gt.connection_name);for(let Dt of wt.pointsToConnect)Dt.layer=gt.route[0].layer}continue}x.add(ee.name,it.value);for(let gt of it.value)u.set(gt.connection_name,gt);continue}let ve=[],De=[];if(e.buses?.length&&U>=_.length*4&&a()){let et=zui(e,t.filter((gt)=>!g.has(gt.name)),ye,i),lt=et.next();try{while(!lt.done)yield be,lt=et.next()}finally{if(!lt.done)et.return([])}let it=lt.value;De=it,ve=it.filter((gt)=>gt.connection_name!==ee.name&&!u.has(gt.connection_name)).flatMap(E)}let Ze=new Fc(Ce,ee.pointsToConnect[0],ee.pointsToConnect[1],[...me,...ve],V,h.get(Ee),{maxLength:f.get(ee.name),paretoLength:Number.isFinite(P1(e,ee.name)),checkReachability:l});if(!h.has(Ee))h.set(Ee,new Float32Array(Ze.cellCount));A.set(Ee,Ze);let st;for(let et of he){for(let wt of ee.pointsToConnect)wt.layer=et;let lt=et===Ee?Ce:new Ar(e,ee,Pe,ye),it=et===Ee?Ze:new Fc(lt,ee.pointsToConnect[0],ee.pointsToConnect[1],[...me,...ve],V,h.get(et),{maxLength:f.get(ee.name),paretoLength:Number.isFinite(P1(e,ee.name)),checkReachability:l});if(!h.has(et))h.set(et,new Float32Array(it.cellCount));A.set(et,it);try{while(!it.solved&&!it.failed)it.step(),yield be}finally{if(!it.solved&&!it.failed)it.cancel()}if(!it.solved&&f.has(ee.name)){it=new Fc(lt,ee.pointsToConnect[0],ee.pointsToConnect[1],[],0,void 0,{checkReachability:l,maxLength:P1(e,ee.name)});try{while(!it.solved&&!it.failed)it.step(),yield be}finally{if(!it.solved&&!it.failed)it.cancel()}if(it.solved&&li(it.result)>f.get(ee.name)){let wt=e.buses.find((Dt)=>Dt.connectionNames.includes(ee.name));for(let Dt of wt.connectionNames)f.set(Dt,Math.min(li(it.result)*1.05,P1(e,Dt)))}}if(!it.solved)continue;let gt=[it.result];if(se>1&&se%2===0&&f.has(ee.name)){let[wt,Dt]=ee.pointsToConnect,vt=Math.abs(Dt.y-wt.y)>=Math.abs(Dt.x-wt.x),Ht=[...t.flatMap((ft)=>ft.pointsToConnect),...e.obstacles.filter((ft)=>ft.componentId).flatMap((ft)=>[{x:ft.center.x-ft.width/2-0.6,y:ft.center.y-ft.height/2-0.6},{x:ft.center.x+ft.width/2+0.6,y:ft.center.y+ft.height/2+0.6}]),...[...u.values()].filter((ft)=>ft.coupledSection).flatMap((ft)=>ft.route)].map((ft)=>vt?ft.x:ft.y),Xt=Math.min(...Ht)-(Pe+m)*2,ut=Math.max(...Ht)+(Pe+m)*2,je=Math.floor(se/2)-1,Re=Xt+(ut-Xt)*(je*5%9)/8,Je=[-0.15,0.2,0.5,0.8,1.15,0.35,0.65,0.1,0.9][je%9],Ve=vt?{x:Re,y:wt.y+(Dt.y-wt.y)*Je}:{x:wt.x+(Dt.x-wt.x)*Je,y:Re},Ye=osn(lt,Ve,me,V,h.get(et),f.get(ee.name)),mt=Ye.next();try{while(!mt.done)yield be,mt=Ye.next()}finally{if(!mt.done)Ye.return(null)}if(mt.value)gt.push(mt.value)}for(let wt of gt){if(li(wt)>P1(e,ee.name)+0.0000001)continue;let Dt=0;for(let Xt of u.values()){if(Xt.route[0].layer!==et)continue;if(C.firstConflict(wt,Xt.route,(Pe+Xt.route[0].width)/2+m-0.00000001))Dt++}let vt=li(wt)+Dt*li(ee.pointsToConnect),Ht={score:vt,trace:{type:"pcb_trace",pcb_trace_id:`bus_lane_${ee.name}`,connection_name:ee.name,source_trace_id:ee.source_trace_id??ee.name,route:wt.map((Xt)=>({...Xt,route_type:"wire",layer:et,width:Pe}))}};if(x.add(ee.name,[Ht.trace]),!st||vt<st.score)st=Ht}}if(!st){if(!De.length)return null;for(let et of le){u.set(et.connection_name,et);let lt=J.connections.find((it)=>it.name===et.connection_name);for(let it of lt.pointsToConnect)it.layer=et.route[0].layer}T.push(J),r?.(U+1,t.length-u.size),yield[...o,...u.values()];continue e}for(let et of ee.pointsToConnect)et.layer=st.trace.route[0].layer;x.add(ee.name,[st.trace]),u.set(ee.name,st.trace)}let q=x.select(I,b);if(q){u.clear();for(let J of q){u.set(J.connection_name,J);let ee=t.find((se)=>se.name===J.connection_name);for(let se of ee.pointsToConnect)se.layer=J.route[0].layer}}let ne=new Set,ce=[...u.values()];for(let J=0;J<ce.length;J++)for(let ee=0;ee<J;ee++){let se=ce[J],le=ce[ee],he=se.route[0].layer;if(he!==le.route[0].layer)continue;let ue=(se.route[0].width+le.route[0].width)/2+m,Ae=C.firstConflict(se.route,le.route,ue-0.00000001);if(Ae){let[_e,Pe]=Ae;ne.add(se.connection_name),ne.add(le.connection_name),A.get(he).penalizeIntersection(h.get(he),se.route[_e-1],se.route[_e],le.route[Pe-1],le.route[Pe],ue*1.25,!0)}}if(ne.size)for(let J of _){if(J===W||!J.connections.some((ee)=>ne.has(ee.name)))continue;for(let ee of J.connections)u.delete(ee.name);if(!T.includes(J))T.push(J)}if(u.size>Q)Q=u.size,N=U;let oe=t.length-u.size;if(oe>0&&oe<=3&&!d&&H<6&&U>=_.length*2&&U-Y>=_.length*4&&t.every((J)=>u.has(J.name)||!g.has(J.name))){H++,Y=U;let J=Vui(e,t,[...n,...B],[...u.values()],i,{deferRetainedSelfClearance:c,maxSubsetSize:5,maxSearches:64,maxSearchSteps:6000,maxLengths:y}),ee=J.next();try{while(!ee.done)yield[...o,...u.values()],ee=J.next()}finally{if(!ee.done)J.return(null)}if(ee.value){u.clear();for(let se of ee.value)u.set(se.connection_name,se);oe=0}}if(oe>0&&oe<=3&&!d&&z<2&&U>=_.length*(e.buses?.length?8+z*4:2+z*2)&&x.hasEveryUnit(I)){z++;let J=Oui(e,[...n,...B],i,x,I,b,s),ee=J.next();try{while(!ee.done)yield[...o,...u.values()],ee=J.next()}finally{if(!ee.done)J.return(null)}if(ee.value){u.clear();for(let se of ee.value){u.set(se.connection_name,se);for(let le of t.find((he)=>he.name===se.connection_name).pointsToConnect)le.layer=se.route[0].layer}oe=0}}if(r?.(U+1,oe),yield[...o,...u.values()],oe)continue;let ie=[...o,...u.values()];for(let J of u.values()){if(J.coupledSection)continue;let ee=t.find((he)=>he.name===J.connection_name),se=i.get(ee.name),le=new Ar(e,ee,se,[...n,...ie.flatMap(Yi)]);J.route=X_(J.route,le).map((he)=>({...he,route_type:"wire",layer:ee.pointsToConnect[0].layer,width:se}))}return ie}return null}function pWe(e){if((e.buses?.length??0)<2)return null;let t=new Set([...(e.buses??[]).flatMap((i)=>i.connectionNames),...(e.differentialPairs??[]).flatMap((i)=>i.connectionNames)]);if(e.connections.some((i)=>!t.has(i.name)||i.pointsToConnect.some((r)=>r.layer!==i.pointsToConnect[0].layer)))return null;let n=[...new Set(e.connections.map((i)=>i.pointsToConnect[0].layer))];if(n.length<2)return null;let o=n.map((i)=>{let r=e.connections.filter((l)=>l.pointsToConnect[0].layer===i),s=new Set(r.map((l)=>l.name)),a=(e.buses??[]).filter((l)=>l.connectionNames.some((d)=>s.has(d))),c=(e.differentialPairs??[]).filter((l)=>l.connectionNames.some((d)=>s.has(d)));if(a.some((l)=>l.connectionNames.some((d)=>!s.has(d)))||c.some((l)=>l.connectionNames.some((d)=>!s.has(d)))||c.length>1)return null;return{...e,connections:r,buses:a,differentialPairs:c}});return o.every((i)=>i!==null)?o:null}function*Wui(e,t,n,o){let i=[];for(let r of e){let s=r.differentialPairs?.[0],a=r.connections.filter((d)=>!s?.connectionNames.includes(d.name)),c=null,l=XT(r)?[0,5,1,4,2,3]:[0,1,2,3,4,5];for(let d of l){if(c)break;let u=[];if(s){let p=_D(r,s,t,{copper:[],penalty:0,variant:d}),g=p.next(),_=0;try{while(!g.done&&_++<12000)yield i,g=p.next()}finally{if(!g.done)p.return(null)}if(!g.done||!g.value)continue;u=g.value}if(!a.length){c=o(r,u);continue}let h=DF(r,a,t,u,n,void 0,new Map,()=>!1),A=h.next(),m=0;try{while(!A.done&&m++<12000)yield[...i,...A.value],A=h.next()}finally{if(!A.done)h.return(null)}if(A.done&&A.value){let p=aVe(r,A.value,t),g=p.next(),_=0;try{while(!g.done&&_++<6000)yield[...i,...A.value],g=p.next()}finally{if(!g.done)p.return(!1)}if(!g.done||!g.value)continue;c=o(r,A.value)}}if(!c)return null;i.push(...c),yield i}return i}function*isn(e,t,n=0){let o=new Set([...(e.buses??[]).flatMap((d)=>d.connectionNames),...(e.differentialPairs??[]).flatMap((d)=>d.connectionNames)]),i=pWe({...e,connections:e.connections.filter((d)=>o.has(d.name))});if(!i||i.some((d)=>d.differentialPairs?.length!==1))return null;let r=Ls(e),s=[],a=[];for(let d of i){let u=d.differentialPairs[0],h=!1;for(let A=0;A<6&&!h;A++){let m=_D(d,u,r,{copper:[],penalty:0,variant:(A+(typeof n==="number"?n:n[s.length]??0))%6}),p=m.next(),g=0;try{while(!p.done&&g++<8000)yield,p=m.next()}finally{if(!p.done)m.return(null)}if(!p.done||!p.value)continue;let _=DCe(d,p.value),f=_.map((X)=>X.route.slice(X.coupledSection[0],X.coupledSection[1]+1));if(f[0].length!==f[1].length)continue;let y=f[0].map((X,V)=>({x:(X.x+f[1][V].x)/2,y:(X.y+f[1][V].y)/2})),x=f[0][0].width,C=u.traceGap??e.minTraceToPadEdgeClearance??e.defaultObstacleMargin??0.075,I=x+C,b=x+I,P=f[0][0].layer,E=(X,V)=>{let W=wn(X,V),j=Math.min(W*0.95,x*5);return{x:X.x+(V.x-X.x)*j/W,y:X.y+(V.y-X.y)*j/W}},B=E(y[0],y[1]),w=E(y.at(-1),y.at(-2)),T=`pair_${u.connectionNames[0]}`,Q=[-I/2,I/2].sort((X,V)=>wn(jA(y,X)[0],f[0][0])-wn(jA(y,V)[0],f[0][0])),N={name:T,nominalTraceWidth:b,pointsToConnect:[B,w].map((X)=>({...X,layer:P}))},F=[],H=[],z=[];for(let X=0;X<2;X++)for(let V=0;V<2;V++){let W=_[X],j=f[X],q=V?j.at(-1):j[0],ne=e.connections.find((se)=>se.name===W.connection_name).pointsToConnect[V],ce=`approach_${W.connection_name}_${V}`;F.push({name:ce,source_trace_id:W.connection_name,nominalTraceWidth:x,pointsToConnect:[ne,q]});let oe=jA(V?[w,y.at(-1)]:[y[0],B],Q[X]).map((se)=>({...se,route_type:"wire",layer:P,width:x})),ie={type:"pcb_trace",pcb_trace_id:ce,connection_name:T,source_trace_id:W.connection_name,route:oe};H.push(ie);let[J,ee]=W.coupledSection;z.push({...ie,route:V?[...oe,...W.route.slice(ee+1)]:[...W.route.slice(0,J),...oe]})}let Y=new Fc(new Ar(e,N,b,[...r,...z.flatMap(Yi)]),N.pointsToConnect[0],N.pointsToConnect[1]);try{let X=0;while(!Y.solved&&!Y.failed&&X++<4000)Y.step(),yield;if(!Y.solved)continue}finally{Y.cancel()}let U=!e.buses?.some((X)=>u.connectionNames.some((V)=>X.connectionNames.includes(V)));s.push({rails:_,sections:f,center:y,width:x,envelope:b,offsets:Q,connection:N,approaches:U?[]:F,pair:u}),a.push(...U?z:H),h=!0}if(!h)return null}let c=new Map(s.flatMap((d)=>d.pair.connectionNames.map((u)=>[u,d.connection.name]))),l={...e,obstacles:[...e.obstacles,...s.flatMap((d)=>d.connection.pointsToConnect.map((u)=>({shape:"circle",center:{x:u.x,y:u.y},width:d.envelope,height:d.envelope,layers:[u.layer],connectedTo:[d.connection.name,...d.pair.connectionNames]})))],connections:[...e.connections.filter((d)=>!c.has(d.name)),...s.map((d)=>d.connection),...s.flatMap((d)=>d.approaches)],differentialPairs:[],traces:[...e.traces??[],...a],buses:e.buses?.map((d)=>{let u=[...new Set(d.connectionNames.map((h)=>c.get(h)??h))];return{...d,connectionNames:[...u,...s.filter((h)=>u.includes(h.connection.name)).flatMap((h)=>h.approaches.map((A)=>A.name))]}})};return{input:e,local:l,transforms:s,layers:t,copper:Ls(l),widths:new Map(l.connections.map((d)=>[d.name,e.buses?.find((u)=>u.connectionNames.includes(d.name))?.traceWidth??d.nominalTraceWidth??d.width??e.minTraceWidth]))}}function*dVe(e,t,n={}){let{input:o,local:i,transforms:r}=e,s=Ls(o),a=[...t],c=o.minTraceToPadEdgeClearance??o.defaultObstacleMargin??0.075,l=a.filter((d)=>o.connections.some((u)=>u.name===d.connection_name));for(let d of r){let{connection:u,center:h,width:A,envelope:m,offsets:p}=d,g=a.findIndex((x)=>x.connection_name===u.name);if(g<0)return null;let _=a[g].route[0].layer,f=a.filter((x,C)=>C!==g),y=null;for(let x of[0,A*6,A*10]){let C=[{x:u.pointsToConnect[0].x-h[0].x,y:u.pointsToConnect[0].y-h[0].y},{x:h.at(-1).x-u.pointsToConnect[1].x,y:h.at(-1).y-u.pointsToConnect[1].y}],I=new Ar({...i},u,m,[...e.copper,...f.flatMap(Yi)]),b=I.visible.bind(I),P=(Y,U,X)=>(U.x-Y.x)*X.x+(U.y-Y.y)*X.y>0&&Math.abs((U.x-Y.x)*X.y-(U.y-Y.y)*X.x)<0.00000001;I.visible=(Y,U)=>{for(let[X,V]of u.pointsToConnect.entries()){let W=C[X],j={x:-W.x,y:-W.y};if(wn(Y,V)<0.00000001&&!P(Y,U,X?j:W))return!1;if(wn(U,V)<0.00000001&&!P(Y,U,X?W:j))return!1}return b(Y,U)};let E=u.pointsToConnect.map((Y,U)=>{let X=C[U],V=(U?-1:1)*x/Math.hypot(X.x,X.y);return{...Y,x:Y.x+V*X.x,y:Y.y+V*X.y}});if(x&&(!I.pathVisible([u.pointsToConnect[0],E[0]])||!I.pathVisible([E[1],u.pointsToConnect[1]])))continue;let B=new Fc(I,E[0],E[1],[],4,void 0,{allTerminalAttachments:!0}),w=null;try{let Y=0;while(!B.solved&&!B.failed&&Y++<1000)B.step(),yield;if(B.solved)w=X_(B.result,I)}finally{B.cancel()}if(!w)continue;if(x)w=[u.pointsToConnect[0],...w,u.pointsToConnect[1]];if(!bc(w,m+c))continue;let T={...a[g],route:w.map((Y)=>({...Y,route_type:"wire",layer:_,width:m}))},Q={...T,route:qg([h[0],...w,h.at(-1)]).map((Y)=>({...Y,route_type:"wire",layer:_,width:m}))},N={...i,connections:i.connections.map((Y)=>Y.name===u.name?{...Y,pointsToConnect:[h[0],h.at(-1)].map((U)=>({...U,layer:_}))}:Y)},F=aD(N,[Q],[...s,...f.filter((Y)=>!d.approaches.some((U)=>U.name===Y.connection_name)).flatMap(Yi)],2)[0],H=Xui(d,F,a);if(!H)continue;let z=[...s,...H.flatMap(Yi)];if(d.approaches.length&&H.some((Y)=>!new Ar(o,o.connections.find((U)=>U.name===Y.connection_name),A,z).pathVisible(Y.route)))continue;if(H.some((Y)=>!bc(Y.route.slice(Y.coupledSection[0],Y.coupledSection[1]+1),A+c)))continue;a[g]=T,y=H;break}if(!y)return null;l.push(...y)}for(let d of o.connections){let u=l.find((h)=>h.connection_name===d.name);if(!u){if(n.allowPartial)continue;return null}for(let h of d.pointsToConnect)h.layer=u.route[0].layer}return l}function Xui(e,t,n){let{width:o,offsets:i}=e,r=t.route[0].layer,s=[];for(let[a,c]of e.rails.entries()){let[l,d]=c.coupledSection,u=n.find((m)=>m.connection_name===`approach_${c.connection_name}_0`)?.route??(e.approaches.length?void 0:c.route.slice(0,l+1)),h=n.find((m)=>m.connection_name===`approach_${c.connection_name}_1`)?.route.toReversed()??(e.approaches.length?void 0:c.route.slice(d));if(!u||!h)return null;let A=jA(t.route,i[a]).map((m)=>({...m,route_type:"wire",layer:r,width:o}));if(wn(u.at(-1),A[0])>0.00000001||wn(h[0],A.at(-1))>0.00000001)return null;s.push({...c,curvedSegments:e.approaches.length?[]:c.curvedSegments?.flatMap((m)=>m<=l?[m]:m>d?[m+A.length-(d-l+1)]:[]),route:[...u.slice(0,-1),...A,...h.slice(1)],coupledSection:[u.length-1,u.length+A.length-2]})}return s}function rsn(e,t){let n=[...t],o=Ls(e),i=e.minTraceToPadEdgeClearance??e.defaultObstacleMargin??0.075;for(let r of e.differentialPairs??[]){let s=r.connectionNames.map((g)=>n.findIndex((_)=>_.connection_name===g)),a=s.map((g)=>n[g]);if(a.some((g)=>!g?.coupledSection||g.curvedSegments?.some((_)=>_>g.coupledSection[0]&&_<=g.coupledSection[1])))continue;let c=a.map((g)=>g.route.slice(g.coupledSection[0],g.coupledSection[1]+1));if(c[0].length!==c[1].length)continue;let l=c[0][0].width,d=(l+(r.traceGap??i))/2,u=c[0].map((g,_)=>({x:(g.x+c[1][_].x)/2,y:(g.y+c[1][_].y)/2})),h=[-d,d].sort((g,_)=>wn(jA(u,g)[0],c[0][0])-wn(jA(u,_)[0],c[0][0])),A=(g)=>a.map((_,f)=>{let[y,x]=_.coupledSection,C=jA(g,h[f]).map((b)=>({...b,route_type:"wire",layer:c[f][0].layer,width:l})),I=C.length-(x-y+1);return{..._,route:[..._.route.slice(0,y),...C,..._.route.slice(x+1)],coupledSection:[y,x+I],curvedSegments:_.curvedSegments?.map((b)=>b>x?b+I:b)}}),m=n.filter((g,_)=>!s.includes(_)).flatMap(Yi),p=a;for(let g=1;g+1<u.length;g++){let[_,f,y]=u.slice(g-1,g+2),x=wn(_,f),C=wn(f,y);if(Math.min(x,C)<0.00000001)continue;let I={x:(f.x-_.x)/x,y:(f.y-_.y)/x},b={x:(y.x-f.x)/C,y:(y.y-f.y)/C},P=I.x*b.x+I.y*b.y;if(P>Math.SQRT1_2-0.00000001)continue;for(let E=0;E<10;E++){let B=Math.min(l*10,x/2,C/2)/2**E,w={x:f.x-I.x*B,y:f.y-I.y*B},T={x:f.x+b.x*B,y:f.y+b.y*B},Q=Math.sign(I.x*b.y-I.y*b.x),N=(Math.SQRT2-1)*B,F={x:w.x+(I.x-Q*I.y)*Math.SQRT1_2*N,y:w.y+(I.y+Q*I.x)*Math.SQRT1_2*N},H=P<-0.1?[w,F,T]:[w,T],z=[...u.slice(0,g),...H,...u.slice(g+1)],Y=A(z);if(Y.some((X,V)=>bc(p[V].route,l+i)&&!bc(X.route,l+i)))continue;let U=[...o,...m,...Y.flatMap(Yi)];if(Y.some((X)=>!new Ar(e,e.connections.find((V)=>V.name===X.connection_name),l,U).pathVisible(X.route)))continue;if(cD({...e,differentialPairs:[r]},Y).some((X)=>!X.matched))continue;u=z,p=Y,g+=H.length-1;break}}s.forEach((g,_)=>{n[g]=p[_]})}return n}function ssn(e,t,n=Ls(e)){let o=[...t],i=e.minTraceToPadEdgeClearance??e.defaultObstacleMargin??0.075,r=32;for(let s of e.differentialPairs??[]){let a=s.connectionNames.map((p)=>o.findIndex((g)=>g.connection_name===p)),c=a.map((p)=>o[p]);if(c.some((p)=>!p?.coupledSection))continue;let l=c.map((p)=>p.route.slice(p.coupledSection[0],p.coupledSection[1]+1)),d=l[0][0].width;if(l[0].length!==l[1].length||l.flat().some((p)=>p.route_type!=="wire"||p.width!==d||p.layer!==l[0][0].layer))continue;let u=l[0].map((p,g)=>({x:(p.x+l[1][g].x)/2,y:(p.y+l[1][g].y)/2})),h=(d+(s.traceGap??i))/2,A=[-h,h].sort((p,g)=>wn(jA(u,p)[0],l[0][0])-wn(jA(u,g)[0],l[0][0])),m=o.filter((p,g)=>!a.includes(g)).flatMap(Yi);for(let p=1;p+2<u.length;p++){if(c.some((q)=>q.curvedSegments?.some((ne)=>ne>=q.coupledSection[0]+p&&ne<=q.coupledSection[0]+p+2)))continue;let[g,_,f,y]=u.slice(p-1,p+3),x=wn(g,_),C=wn(f,y);if(Math.min(x,C)<0.00000001)continue;let I={x:(_.x-g.x)/x,y:(_.y-g.y)/x},b={x:(y.x-f.x)/C,y:(y.y-f.y)/C};if(I.x*b.x+I.y*b.y>-0.99999999)continue;let P={x:-I.y,y:I.x},E=(f.x-_.x)*P.x+(f.y-_.y)*P.y,B=Math.sign(E),w=Math.abs(E)/2;if(w<h/Math.cos(Math.PI/64)+(d+i)/2+0.00000001)continue;let T=(_.x-f.x)*I.x+(_.y-f.y)*I.y,Q=Math.max(0,T),N=Math.max(0,-T);if(Q>=x-0.00000001||N>=C-0.00000001)continue;let F={x:_.x-I.x*Q,y:_.y-I.y*Q},H={x:f.x+b.x*N,y:f.y+b.y*N},z={x:F.x+P.x*w*B,y:F.y+P.y*w*B},Y=Math.atan2(F.y-z.y,F.x-z.x),U=Array.from({length:33},(q,ne)=>({x:z.x+w*Math.cos(Y+B*Math.PI*ne/32),y:z.y+w*Math.sin(Y+B*Math.PI*ne/32)}));U[0]=F,U[32]=H;let X=[...u.slice(0,p),...U,...u.slice(p+2)],V=31,W=c.map((q,ne)=>{let[ce,oe]=q.coupledSection,ie=jA(X,A[ne]).map((J)=>({...J,route_type:"wire",layer:l[ne][0].layer,width:d}));return ie[0]={...q.route[ce]},ie[ie.length-1]={...q.route[oe]},{...q,route:[...q.route.slice(0,ce),...ie,...q.route.slice(oe+1)],coupledSection:[ce,oe+V],curvedSegments:[...(q.curvedSegments??[]).map((J)=>J>ce+p+1?J+V:J),...Array.from({length:32},(J,ee)=>ce+p+ee+1)].sort((J,ee)=>J-ee)}}),j=[...n,...m,...W.flatMap(Yi)];if(W.some((q)=>!bc(q.route,d+i)||!new Ar(e,e.connections.find((ne)=>ne.name===q.connection_name),d,j).pathVisible(q.route)))continue;if(cD({...e,differentialPairs:[s]},W).some((q)=>!q.matched))continue;a.forEach((q,ne)=>{o[q]=W[ne]});break}}return o}function*BW(e,t,n,o,i=new Map,r={}){let s=0,a=e.minTraceToPadEdgeClearance??e.defaultObstacleMargin??0.075;function*c(d,u,h){if(++s>(r.maxSearches??200))return null;let A={...d,pointsToConnect:d.pointsToConnect.map((_)=>({..._,layer:h}))},m=o.get(d.name)??e.minTraceWidth,p=new Ar(e,A,m,[...n,...u.flatMap(Yi)]),g=new Fc(p,A.pointsToConnect[0],A.pointsToConnect[1]);try{let _=0;while(!g.solved&&!g.failed&&_++<1000)g.step(),yield;if(!g.solved)return null;let f=r.requireSelfClear?X_(g.result,p):g.result;if(r.requireSelfClear&&!bc(f,m+a))return null;return{type:"pcb_trace",pcb_trace_id:d.name,connection_name:d.name,source_trace_id:d.source_trace_id,route:f.map((y)=>({...y,route_type:"wire",layer:h,width:m}))}}finally{g.cancel()}}function*l(d,u,h=0,A=new Set){if(!d.length)return u;if(s>=(r.maxSearches??200))return null;let m=d[0],p=i.get(m.name)??[m.pointsToConnect[0].layer];for(let g of p){let _=yield*c(m,u,g);if(!_)continue;let f=yield*l(d.slice(1),[...u,_],h,new Set([...A,m.name]));if(f)return f}if(h>=(r.maxDepth??5))return null;for(let g of u){if(g.coupledSection||!g.connection_name||A.has(g.connection_name)||!p.includes(g.route[0].layer))continue;let _=e.connections.find((f)=>f.name===g.connection_name);if(!_)continue;for(let f of p){let y=u.filter((I)=>I!==g),x=yield*c(m,y,f);if(!x)continue;let C=yield*l([...d.slice(1),_],[...y,x],h+1,new Set([...A,m.name]));if(C)return C}}return null}return yield*l(e.connections.filter((d)=>!t.some((u)=>u.connection_name===d.name)),t)}function*asn(e,t){let{input:n,layers:o,transforms:i}=e,r=Ls(n),s=n.minTraceToPadEdgeClearance??n.defaultObstacleMargin??0.075,a=structuredClone(t),c=new Set,l=new Map(n.connections.map((_)=>[_.name,n.buses?.find((f)=>f.connectionNames.includes(_.name))?.traceWidth??_.nominalTraceWidth??_.width??n.minTraceWidth]));for(let _ of a){if(_.coupledSection)continue;if(!(yield*aVe(n,[_],[...r,...a.filter((y)=>y!==_).flatMap(Yi)])))c.add(_)}for(let _ of a){if(!_.coupledSection)continue;for(let P of[0,1]){let[E,B]=_.coupledSection,w=P?_.route.slice(B):_.route.slice(0,E+1),T=P?_.route.slice(0,B):_.route.slice(E+1),Q={..._,coupledSection:void 0,curvedSegments:void 0,route:w},N={...n.connections.find((Y)=>Y.name===_.connection_name),pointsToConnect:[w[0],w.at(-1)]},F={...n,connections:[N]},H=[...r,...a.filter((Y)=>Y!==_).flatMap(Yi),...Yi({..._,connection_name:"reserved_other_approach",source_trace_id:void 0,route:T})];if(yield*aVe(F,[Q],H)){if(Q.route!==w){let Y=Q.route.length-w.length;_.curvedSegments=_.curvedSegments?.flatMap((U)=>P?U<=B?[U]:[]:U>E?[U+Y]:[])}if(_.route=P?[..._.route.slice(0,B),...Q.route]:[...Q.route,..._.route.slice(E+1)],!P)_.coupledSection=[Q.route.length-1,B+Q.route.length-w.length]}}let[f,y]=_.coupledSection,x=_.route[0].width,C=new Ar(n,n.connections.find((P)=>P.name===_.connection_name),x,[...r,...a.flatMap(Yi)]),I=_.curvedSegments?.some((P)=>P<=f)?_.route.slice(0,f+1):X_(_.route.slice(0,f+1),C),b=_.curvedSegments?.some((P)=>P>y)?_.route.slice(y):X_(_.route.slice(y),C);_.curvedSegments=_.curvedSegments?.map((P)=>P>f?P+I.length-(f+1):P),_.route=[...I.slice(0,-1),..._.route.slice(f,y+1),...b.slice(1)].map((P)=>({...P,route_type:"wire",width:x,layer:_.route[0].layer})),_.coupledSection=[I.length-1,I.length+y-f-1]}let d=yield*BW(n,a.filter((_)=>!c.has(_)),r,l,o,{requireSelfClear:!0,maxSearches:1000});if(!d)return null;let u=ssn(n,rsn(n,d),r),h=(_)=>li(_.route)+W_(n,_.connection_name);for(let _ of i){let f=_.pair.connectionNames.map((P)=>u.find((E)=>E.connection_name===P)),y=f.map((P)=>{let E=_.rails.find((H)=>H.connection_name===P.connection_name),[B,w]=E.coupledSection,[T,Q]=P.coupledSection,N=P.route.slice(T,Q+1),F=N.length-(w-B+1);return{...P,route:[...E.route.slice(0,B),...N,...E.route.slice(w+1)],coupledSection:[B,B+N.length-1],curvedSegments:[...(E.curvedSegments??[]).flatMap((H)=>H<=B?[H]:H>w?[H+F]:[]),...(P.curvedSegments??[]).filter((H)=>H>T&&H<=Q).map((H)=>H+B-T)]}});if(Math.abs(h(y[0])-h(y[1]))>=Math.abs(h(f[0])-h(f[1]))-0.00000001)continue;let x=[...r,...u.filter((P)=>P.coupledSection&&!f.includes(P)).flatMap(Yi),...y.flatMap(Yi)];if(y.some((P)=>!bc(P.route,P.route[0].width+s)||!new Ar(n,n.connections.find((E)=>E.name===P.connection_name),P.route[0].width,x).pathVisible(P.route)))continue;let I=u.map((P)=>y.find((E)=>E.connection_name===P.connection_name)??P).filter((P)=>P.coupledSection||y.every((E)=>new Ar(n,n.connections.find((B)=>B.name===E.connection_name),E.route[0].width,Yi(P)).pathVisible(E.route))),b=yield*BW(n,I,r,l,o,{requireSelfClear:!0,maxSearches:200});if(b)u=b}let A=u.filter((_)=>_.coupledSection),m=u.filter((_)=>_.coupledSection||A.every((f)=>new Ar(n,n.connections.find((y)=>y.name===f.connection_name),f.route[0].width,Yi(_)).pathVisible(f.route))),p=yield*BW(n,m,r,l,o,{requireSelfClear:!0,maxSearches:1000});if(!p)return null;let g=p;for(let _ of i.filter((f)=>!f.approaches.length)){let y=g.map((C)=>_.rails.find((I)=>I.connection_name===C.connection_name)??C).filter((C)=>C.coupledSection||_.rails.every((I)=>new Ar(n,n.connections.find((b)=>b.name===I.connection_name),I.route[0].width,Yi(C)).pathVisible(I.route))),x=yield*BW(n,y,r,l,o,{requireSelfClear:!0,maxSearches:1000});if(!x)return null;g=x}for(let _ of n.connections)for(let f of _.pointsToConnect)f.layer=g.find((y)=>y.connection_name===_.name).route[0].layer;return g}function*Kui(e,t){let n=yield*isn(e,t);if(!n)return null;let{local:o,copper:i,widths:r}=n,s=DF(o,o.connections,i,[],r,void 0,t,()=>!1,!0),a=null,c=0;try{let d=s.next(),u=0;while(!d.done&&u++<200000){if(d.value.length>c){if(c=d.value.length,c>=o.connections.length-1){if(a=yield*BW(o,d.value,i,r,t,{maxSearches:120}),a)break}}yield,d=s.next()}if(d.done)a=d.value}finally{s.return(null)}if(!a)return null;let l=yield*dVe(n,a);if(!l)return null;return yield*asn(n,l)}function jui(e,t,n,o,i,r,s){let a=n.map((u)=>({...u,route:u.route.map((h)=>({...h}))})),c=i+r,l=(u,h)=>u.x*h.y-u.y*h.x,d=(u,h)=>({x:u.x-h.x,y:u.y-h.y});for(let u=0;u<2;u++){let h=a[u];for(let A=1;A+2<h.route.length;A++){if(h.coupledSection&&A+1>=h.coupledSection[0]&&A<=h.coupledSection[1])continue;let[m,p,g,_]=h.route.slice(A-1,A+3),f=wn(p,g);if(f<4*c)continue;let y={x:(g.x-p.x)/f,y:(g.y-p.y)/f},x=a[1-u].route;for(let C=0;C+1<x.length;C++){let I=x[C],b=x[C+1],P=d(b,I);if(Math.abs(l(y,P))>0.0000001)continue;let E=l(y,d(I,p));if(Math.abs(E)<=c+0.0000001||Math.abs(E)>2*c)continue;let B=[I,b].map((Y)=>(Y.x-p.x)*y.x+(Y.y-p.y)*y.y);if(Math.min(f,Math.max(...B))-Math.max(0,Math.min(...B))<4*c)continue;let w=E-Math.sign(E)*c,T={x:p.x-y.y*w,y:p.y+y.x*w},Q=(Y,U)=>{let X=l(U,y);if(Math.abs(X)<0.00000001)return null;let V=l(d(T,Y),y)/X;return{x:Y.x+V*U.x,y:Y.y+V*U.y}},N=Q(m,d(p,m)),F=Q(_,d(g,_));if(!N||!F||wn(N,p)>2*c||wn(F,g)>2*c)continue;let H={...g,x:g.x-y.x*(2*c+Math.abs(w))-y.y*w,y:g.y-y.y*(2*c+Math.abs(w))+y.x*w},z={...g,x:g.x-y.x*2*c,y:g.y-y.y*2*c};for(let Y of[[{...p,...N},{...g,...F}],[{...p,...N},H,z,g]]){let U=(V,W,j)=>(W.x-V.x)*j.x+(W.y-V.y)*j.y>0.0000000001;if(!U(m,Y[0],d(p,m))||!U(Y.at(-1),_,d(_,g))||!U(Y[0],Y.at(-1),y))continue;let X=[...h.route.slice(0,A),...Y,...h.route.slice(A+2)];if(!bc(X,i+s))continue;if(!new Ar(e,t[u],i,[...o,...Yi(a[1-u])]).pathVisible(X))continue;if(h.route=X,h.coupledSection)h.coupledSection=h.coupledSection.map((V)=>V>A?V+Y.length-2:V);A+=Y.length-2;break}if(h.route[A]!==p)break}}}return a}function csn(e,t,n,o,i,r,s=6){if(!Number.isFinite(s)||s<=0)throw Error("Pair corner trim must be a positive finite number of trace widths");let a=n.map((c)=>({...c,route:[...c.route]}));for(let c=0;c<2;c++){let l=a[c];for(let d=1;d<l.route.length-1;d++){if(l.curvedSegments?.includes(d)||l.curvedSegments?.includes(d+1))continue;if(l.coupledSection&&d>l.coupledSection[0]&&d<l.coupledSection[1])continue;let[u,h,A]=l.route.slice(d-1,d+2),m=wn(u,h),p=wn(h,A);if(m<0.00000001||p<0.00000001)continue;let g={x:(h.x-u.x)/m,y:(h.y-u.y)/m},_={x:(A.x-h.x)/p,y:(A.y-h.y)/p};if(Math.abs(g.x*_.x+g.y*_.y+Math.SQRT1_2)>0.000001)continue;let f=Math.sign(g.x*_.y-g.y*_.x),y=Math.min(i*s,m/2,p*0.8),x={...h,x:h.x-g.x*y,y:h.y-g.y*y},C=(Math.SQRT2-1)*y,I={...h,x:x.x+(g.x-f*g.y)*Math.SQRT1_2*C,y:x.y+(g.y+f*g.x)*Math.SQRT1_2*C},b={...h,x:h.x+_.x*y,y:h.y+_.y*y},P=[...l.route.slice(0,d),x,I,b,...l.route.slice(d+1)];if(!bc(P,i+r)||!new Ar(e,t[c],i,[...o,...Yi(a[1-c])]).pathVisible(P))continue;if(l.route=P,l.curvedSegments)l.curvedSegments=l.curvedSegments.map((E)=>E>d?E+2:E);if(l.coupledSection)l.coupledSection=l.coupledSection.map((E,B)=>E>d?E+2:E===d&&B===0?E+2:E);d+=2}}return a}function qui(e,t,n,o,i,r,s,a){let c=n.map((d)=>({...d,route:[...d.route]})),l=i+r;for(let d=0;d<2;d++){let u=c[d],h=c[1-d];if(!u.coupledSection||!h.coupledSection)continue;let A=u.coupledSection[1]-1,m=h.coupledSection[1]-1;for(let p=u.coupledSection[1]+1;p<u.route.length-1;p++){let g=u.route[p],_=u.route[p+1],f=wn(g,_);if(f<4*l)continue;let y={x:(_.x-g.x)/f,y:(_.y-g.y)/f};for(let x=h.coupledSection[1]+1;x<h.route.length-1;x++){let C=h.route[x],I=h.route[x+1],b=wn(C,I);if(b<4*l||Math.abs((I.x-C.x)/b-y.x)>0.0000001||Math.abs((I.y-C.y)/b-y.y)>0.0000001)continue;let P=-(C.x-g.x)*y.y+(C.y-g.y)*y.x;if(Math.abs(Math.abs(P)-l)>0.0000001)continue;let E=(z)=>(z.x-g.x)*y.x+(z.y-g.y)*y.y;if(E(I)<f-0.0000001||E(C)>f-4*l)continue;let B;try{B=a(u.route.slice(A,p+2),P)}catch{continue}let w=h.route[m],T=h.route[m+1],Q=T.x-w.x,N=T.y-w.y;if(Math.abs((B[0].x-w.x)*N-(B[0].y-w.y)*Q)>0.0000001)continue;let F={x:B[1].x-B[0].x,y:B[1].y-B[0].y};if((B[1].x-w.x)*F.x+(B[1].y-w.y)*F.y<=0.0000000001)continue;B=B.slice(1);let H=[...h.route.slice(0,m+1),...B.map((z)=>({...h.route[0],...z})),...h.route.slice(wn(B.at(-1),h.route[x+1])<0.00000001?x+2:x+1)];if(!bc(H,i+s)||!new Ar(e,t[1-d],i,[...o,...Yi(u)]).pathVisible(H))continue;return h.route=H,h.coupledSection=[h.coupledSection[0],m+B.length],u.coupledSection=[u.coupledSection[0],p+1],c}}}return n}var kL=(e,t)=>e.x*t.x+e.y*t.y,Jui=(e)=>{if(!e.coupledSection)return;let t=e.coupledSection[1];if(t<1||t+2>=e.route.length)return;let n=e.route[t-1],o=e.route[t],i=wn(n,o);if(i<0.00000001)return;let r={x:(o.x-n.x)/i,y:(o.y-n.y)/i};for(let s=t;s+2<e.route.length;s++){let[a,c,l]=e.route.slice(s,s+3),d=wn(a,c);if(d<0.00000001)return;let u={x:(c.x-a.x)/d,y:(c.y-a.y)/d};if(wn(u,r)<0.0000001)continue;let h=wn(c,l);if(h<0.00000001)return;let A={x:(l.x-c.x)/h,y:(l.y-c.y)/h};if(Math.abs(r.x*u.x+r.y*u.y-Math.SQRT1_2)>0.0000001||wn(A,r)>0.0000001||e.curvedSegments?.some((m)=>m===s||m===s+1||m===s+2))return;return{index:s,direction:r,handedness:Math.sign(r.x*u.y-r.y*u.x)}}};function $ui(e,t,n,o,i,r,s,a){let c=n.map(Jui);if(!c[0]||!c[1]||c[0].handedness!==c[1].handedness||wn(c[0].direction,c[1].direction)>0.0000001)return n;let l=c[0].direction,d=i+r,u=n.map((f,y)=>{let x=c[y],C=c[1-y],I=x.index;if(I<=f.coupledSection[1])return;let b=n[1-y],P=b.route[C.index],E=-(f.route[I].x-P.x)*l.y+(f.route[I].y-P.y)*l.x,B;try{B=a(b.route.slice(C.index-1,C.index+3),Math.sign(E)*d)}catch{return}let w=(kL(B[1],l)-kL(f.route[I],l)+(kL(B[2],l)-kL(f.route[I+1],l)))/2;if(Math.abs(w)<0.00000001||wn(f.route[I-1],f.route[I])+w<=0.00000001||wn(f.route[I+1],f.route[I+2])-w<=0.00000001)return;let T=f.route.map((Q,N)=>N===I||N===I+1?{...Q,x:Q.x+l.x*w,y:Q.y+l.y*w}:Q);if(!bc(T,i+s)||!new Ar(e,t[y],i,[...o,...Yi(b)]).pathVisible(T))return;return{...f,route:T}});if(u.every((f)=>!f))return n;let h=[n,...u.flatMap((f,y)=>f?[n.map((x,C)=>C===y?f:x)]:[])].flatMap((f)=>f.flatMap((y,x)=>[y.route[c[x].index],y.route[c[x].index+1]]).map((y)=>kL(y,l))),A=Math.min(...h)-d,m=Math.max(...h)+d,p=(f)=>{let y=0;for(let x=0;x<2;x++){let C=f[x].route,I=f[1-x].route,b=c[x].index;for(let P=b-1;P<=b+1;P++){let E=C[P],B=C[P+1],w=kL(E,l),T=kL(B,l)-w;if(T<=0||w>m||w+T<A)continue;let Q=Math.max(0,(A-w)/T),N=Math.min(1,(m-w)/T),F=Math.max(1,Math.ceil(wn(E,B)*(N-Q)*16/d));for(let H=0;H<=F;H++){let z=Q+(N-Q)*H/F,Y={x:E.x+(B.x-E.x)*z,y:E.y+(B.y-E.y)*z},U=1/0;for(let X=1;X<I.length;X++)U=Math.min(U,UT(Y,[I[X-1],I[X]]));y=Math.max(y,U-i)}}}return y},g=n,_=p(n);for(let f=0;f<2;f++){if(!u[f])continue;let y=n.map((C,I)=>I===f?u[f]:C),x=p(y);if(x<_-0.0000001)g=y,_=x}return g}function Zui(e,t,n){let o=[...t],i=e.minTraceToPadEdgeClearance??e.defaultObstacleMargin??0.075;for(let r of e.differentialPairs??[]){let s=r.connectionNames.map((g)=>o.findIndex((_)=>_.connection_name===g)),a=s.map((g)=>o[g]);if(a.some((g)=>!g?.coupledSection))continue;let c=r.connectionNames.map((g)=>e.connections.find((_)=>_.name===g)),l=[...n,...o.filter((g,_)=>!s.includes(_)).flatMap(Yi)],d=a[0].route[0].width,u=r.traceGap??i,h=jui(e,c,a,l,d,u,i),A=csn(e,c,h,l,d,i),m=$ui(e,c,A,l,d,u,i,jA),p=qui(e,c,m,l,d,u,i,jA);s.forEach((g,_)=>{o[g]=p[_]})}return o}function ehi(e,t,n,o){let i=[...t],r=e.minTraceToPadEdgeClearance??e.defaultObstacleMargin??0.075;for(let s of e.differentialPairs??[]){let a=s.connectionNames.map((h)=>i.findIndex((A)=>A.connection_name===h)),c=a.map((h)=>i[h]);if(c.some((h)=>!h?.coupledSection))continue;let l=s.connectionNames.map((h)=>e.connections.find((A)=>A.name===h)),d=[...n,...i.filter((h,A)=>!a.includes(A)).flatMap(Yi)],u=csn(e,l,c,d,c[0].route[0].width,r,o);a.forEach((h,A)=>{i[h]=u[A]})}return i}function y$t(e,t){let n=e.map(()=>new Set),o=e.map(()=>0),i=(c,l)=>{if(!n[c].has(l))n[c].add(l),o[l]++};for(let c=0;c<e.length;c++){let l=e[c];if(Math.abs(l.to-l.from)<0.00000001)continue;for(let d=0;d<e.length;d++){if(c===d)continue;let u=e[d],h=(l.width+u.width)/2+t,A=(m)=>m>Math.min(l.from,l.to)-h+0.00000001&&m<Math.max(l.from,l.to)+h-0.00000001;if(A(u.from))i(d,c);if(A(u.to))i(c,d)}}let r=e.map(()=>0),s=o.flatMap((c,l)=>c===0?[l]:[]),a=0;for(let c=0;c<s.length;c++){let l=s[c];a++;for(let d of n[l])if(r[d]=Math.max(r[d],r[l]+(e[l].width+e[d].width)/2+t),--o[d]===0)s.push(d)}return a===e.length?r:null}function eie(e,t){let n=(e.curvedSegments??[]).flatMap((i)=>i>0&&i<e.route.length?[[e.route[i-1],e.route[i]]]:[]);if(!n.length)return[];let o=new Set(e.curvedSegments);return t.slice(1).flatMap((i,r)=>{let s=t[r];if(n.some(([l,d])=>wn(s,l)<0.0000001&&wn(i,d)<0.0000001))return[r+1];let a=e.route.findIndex((l)=>wn(l,s)<0.0000001),c=e.route.findIndex((l)=>wn(l,i)<0.0000001);if(a<0||c<=a)return[];for(let l=a+1;l<=c;l++)if(!o.has(l)||S1(e.route[l-1],s,i)>0.0000000001||S1(e.route[l],s,i)>0.0000000001)return[];return[r+1]})}function lsn(e){return e.map((t)=>{let[n,o]=t.coupledSection,i=t.route.map((r,s)=>s).filter((r)=>{if(r<=n||r>=o||t.curvedSegments?.includes(r)||t.curvedSegments?.includes(r+1))return!0;let s=t.route[r-1],a=t.route[r],c=t.route[r+1],l=wn(s,a),d=wn(a,c);return l<0.00000001||d<0.00000001||Math.abs((a.x-s.x)/l-(c.x-a.x)/d)>0.0000001||Math.abs((a.y-s.y)/l-(c.y-a.y)/d)>0.0000001});return{...t,route:i.map((r)=>t.route[r]),coupledSection:[i.indexOf(n),i.indexOf(o)],curvedSegments:t.curvedSegments?.map((r)=>i.indexOf(r)).filter((r)=>r>0)}})}function thi(e,t){e=lsn(e);let n;for(let a=e[0].coupledSection[0];a<e[0].coupledSection[1];a++){let c=e[0].route[a],l=e[0].route[a+1],d=wn(c,l);if(d<0.00000001||e[0].curvedSegments?.includes(a+1))continue;let u={x:(l.x-c.x)/d,y:(l.y-c.y)/d},h=(A)=>A.x*u.x+A.y*u.y;for(let A=e[1].coupledSection[0];A<e[1].coupledSection[1];A++){let m=e[1].route[A],p=e[1].route[A+1],g=wn(m,p);if(g<0.00000001||e[1].curvedSegments?.includes(A+1))continue;if(Math.abs((p.x-m.x)/g-u.x)>0.0000001||Math.abs((p.y-m.y)/g-u.y)>0.0000001)continue;if(Math.abs(Math.abs((m.x-c.x)*u.y-(m.y-c.y)*u.x)-t)>0.0000001)continue;let _=Math.max(h(c),h(m)),f=Math.min(h(l),h(p));if(f-_>0.00000001&&(!n||f-_>n.high-n.low))n={indices:[a,A],low:_,high:f,direction:u}}}if(!n)return null;let{indices:o,low:i,high:r,direction:s}=n;return e.map((a,c)=>{let l=o[c],d=a.route[l],u=a.route[l+1],h=(y)=>{let x=y-d.x*s.x-d.y*s.y;return{...d,x:d.x+x*s.x,y:d.y+x*s.y}},A=h(i),m=h(r),p=a.route.slice(0,l),g=a.route.slice(l+2);if(wn(d,A)>0.00000001)p.push(d);if(wn(u,m)>0.00000001)g.unshift(u);let _=[...p,A,m,...g],f=_.length-a.route.length;return{...a,route:_,coupledSection:[p.length,p.length+1],curvedSegments:a.curvedSegments?.map((y)=>y>l+1?y+f:y)}})}function nhi(e,t,n,o){let i=new Map;for(let l of e.obstacles){let d=l.circuitJsonMetadata?.pcb_port_id;if(d&&l.componentId)i.set(d,l.componentId)}let r=(l,d)=>{let u=d?l.route.at(-1):l.route[0],h=e.connections.find((_)=>_.name===l.connection_name),A=h?.pointsToConnect.slice().sort((_,f)=>wn(u,_)-wn(u,f))[0],m=A?.pcb_port_id??u.pcb_port_id,p=m?i.get(m):void 0;if(p)return p;let g=new Set([l.connection_name,l.source_trace_id,h?.source_trace_id,A?.pointId,A?.pcb_port_id].filter((_)=>!!_));return e.obstacles.filter((_)=>_.componentId&&_.connectedTo.some((f)=>g.has(f))).sort((_,f)=>wn(u,_.center)-wn(u,f.center))[0]?.componentId},s=Ls(e).filter((l)=>l.a.x===l.b.x&&l.a.y===l.b.y),a=(l)=>{let d=1/0,u=-1/0;for(let h of l){let A=e.obstacles.filter((x)=>x.componentId===h);if(!A.length)continue;let m=A.map((x)=>{let C=(x.ccwRotationDegrees??0)*Math.PI/180,I=Math.abs(Math.cos(C))*x.width+Math.abs(Math.sin(C))*x.height,b=Math.abs(Math.sin(C))*x.width+Math.abs(Math.cos(C))*x.height;return{left:x.center.x-I/2,right:x.center.x+I/2,bottom:x.center.y-b/2,top:x.center.y+b/2}}),p=Math.min(...m.map((x)=>x.left)),g=Math.max(...m.map((x)=>x.right)),_=Math.min(...m.map((x)=>x.bottom)),f=Math.max(...m.map((x)=>x.top)),y=Math.max(e.minViaPadDiameter??0.3,...A.flatMap((x)=>[x.width,x.height]))*2;for(let x of[p,g])for(let C of[_,f])d=Math.min(d,n({x,y:C})),u=Math.max(u,n({x,y:C}));for(let x of s){let C=x.a;if(C.x<p-y||C.x>g+y||C.y<_-y||C.y>f+y)continue;d=Math.min(d,n(C)-x.radius),u=Math.max(u,n(C)+x.radius)}}return{min:d,max:u}},c=(l)=>new Set(t.map((d)=>r(d,l)).filter((d)=>!!d));return{start:a(c(!1)).max+o,end:a(c(!0)).min-o}}function x$t(e,t){let n=[];for(let o=1;o<e.length;o++){let i=e[o-1],r=e[o];if(!(i.x<=t&&r.x>t))continue;let s={x:t,y:i.y+(r.y-i.y)*(t-i.x)/(r.x-i.x)};n.push({before:[...e.slice(0,o),s],after:[s,...e.slice(o)],point:s})}return n.length===1?n[0]:void 0}function ohi(e,t,n,o){let i=qg(e.filter((s,a)=>a===0||wn(s,e[a-1])>0.00000001)),r=[i[0]];for(let s=1;s<i.length-1;s++){if(i[s].x<n-0.00000001||i[s].x>o+0.00000001){r.push(i[s]);continue}let a=i[s-1],c=i[s],l=i[s+1],d=wn(a,c),u=wn(c,l),h={x:(c.x-a.x)/d,y:(c.y-a.y)/d},A={x:(l.x-c.x)/u,y:(l.y-c.y)/u},m=h.x*A.x+h.y*A.y;if(m<-0.000001)return null;if(m<0.7){let p=Math.min(t,d*0.4,u*0.4);r.push({x:c.x-h.x*p,y:c.y-h.y*p},{x:c.x+A.x*p,y:c.y+A.y*p})}else r.push(c)}return[...r,i.at(-1)]}function CW(e,t,n,o="dogleg",i=!1){let r=DCe(e,structuredClone(t)),s=e.minTraceToPadEdgeClearance??e.defaultObstacleMargin??0.075,a=new Set(e.buses?.flatMap((d)=>d.connectionNames)),c=i?esn(e,t):new Set,l=new Set(r.filter((d)=>a.has(d.connection_name)).map((d)=>d.route[0].layer));for(let d of l){let u=r.filter((E)=>E.route[0].layer===d);if(u.length<3)continue;let h=u[0].route[0],A=u[0].route.at(-1),m=Math.abs(A.y-h.y)>=Math.abs(A.x-h.x),p=Math.sign(m?A.y-h.y:A.x-h.x)||1,g=(E)=>m?{x:E.y*p,y:-E.x*p}:{x:E.x*p,y:E.y*p},_=(E)=>m?{x:-E.y*p,y:E.x*p}:{x:E.x*p,y:E.y*p},f=[],y=new Set;for(let E of u){if(y.has(E.connection_name))continue;let B=e.differentialPairs?.find((T)=>T.connectionNames.includes(E.connection_name)&&T.connectionNames.every((Q)=>u.some((N)=>N.connection_name===Q))),w=B?.connectionNames.map((T)=>u.find((Q)=>Q.connection_name===T));if(w?.every((T)=>T.coupledSection)){w=lsn(w);let T=w.map((H)=>H.route.slice(H.coupledSection[0],H.coupledSection[1]+1));if(!(T[0].length===T[1].length&&[0,T[0].length-1].every((H)=>{let z=T[0][H],Y=T[1][H],U=T[0][H===0?1:H-1],X=wn(z,U);return X>0.00000001&&Math.abs(((Y.x-z.x)*(U.x-z.x)+(Y.y-z.y)*(U.y-z.y))/X)<0.0000001})&&T[0].slice(1).every((H,z)=>{let Y=T[0][z],U=T[1][z],X=T[1][z+1],V=wn(Y,H),W=wn(U,X);return V>0.00000001&&W>0.00000001&&Math.abs((H.x-Y.x)/V-(X.x-U.x)/W)<0.0000001&&Math.abs((H.y-Y.y)/V-(X.y-U.y)/W)<0.0000001}))){let H=thi(w,E.route[0].width+(B.traceGap??s));if(!H)return null;w=H}let N=w.map((H)=>H.route.slice(H.coupledSection[0],H.coupledSection[1]+1));if(N[0].length!==N[1].length)return null;let F=N[0].map((H,z)=>g({x:(H.x+N[1][z].x)/2,y:(H.y+N[1][z].y)/2}));f.push({traces:w,path:F,width:2*E.route[0].width+(B.traceGap??s)}),w.forEach((H)=>y.add(H.connection_name))}else f.push({traces:[E],path:E.route.map(g),width:E.route[0].width}),y.add(E.connection_name)}let x=Math.max(...u.map((E)=>E.route[0].width)),C=Math.max(...f.map((E)=>E.path[0].x))+x*2,I=Math.min(...f.map((E)=>E.path.at(-1).x))-x*2,b=nhi(e,u,(E)=>g(E).x,Math.max(...f.map((E)=>E.width))/2+s);if(C=Math.max(C,b.start),I=Math.min(I,b.end),I-C<n*2)return null;let P;e:for(let E of[0,0.05,0.1,0.2]){let B=C+(I-C)*E,w=I-(I-C)*E,T=f.map((X)=>({channel:X,a:x$t(X.path,B),b:x$t(X.path,w)}));if(T.some((X)=>!X.a||!X.b))continue;if(T.sort((X,V)=>X.a.point.y-V.a.point.y),T.some((X,V)=>V>0&&X.b.point.y<T[V-1].b.point.y))continue;let Q=Math.min(...T.flatMap((X)=>[X.a.point.y,X.b.point.y])),N=Math.max(...T.flatMap((X)=>[X.a.point.y,X.b.point.y])),F=(Q+N)/2,H=Math.floor(T.length/2),z=T.map((X,V)=>F+(V-(T.length-1)/2)*n),Y=o==="interior"?y$t(T.map((X,V)=>({from:X.a.point.y,to:z[V],width:X.channel.width})),s):null,U=o==="interior"?y$t(T.map((X,V)=>({from:X.b.point.y,to:z[V],width:X.channel.width})),s):null;if(o==="interior"&&(!Y||!U))continue;for(let X of o==="interior"?[1]:[1,2,3]){let V=Math.max((N-Q)/2+n,Math.ceil(T.length/2)*n)+X*x,W=[];for(let[ce,oe]of[[-1,T.slice(0,H).toReversed()],[1,T.slice(H)]]){let ie=oe.map((se,le)=>(oe.length-1-le)*n);for(let se=oe.length-2;se>=0;se--){let le=oe[se].channel,he=oe[se+1].channel,ue=he.traces.some((Pe)=>a.has(Pe.connection_name)),Ae=[le,he].some((Pe)=>Pe.traces.some((Ee)=>c.has(Ee.connection_name))),_e=i?Math.max((le.width+he.width)/2+s+x*0.2,Ae?n*2:ue?n:0):n;if(i)ie[se]=ie[se+1]+_e}let J=Math.max(i?ie[0]+n:V,...oe.map((se,le)=>Math.max(ce*(se.a.point.y-F),ce*(se.b.point.y-F))+ie[le]+x*2)),ee=oe.map(()=>0);for(let se=oe.length-2;se>=0;se--)ee[se]=ee[se+1]+(oe[se].channel.width+oe[se+1].channel.width)/2+s+x*1.2;for(let[se,le]of oe.entries()){let he=B+ee[se],ue=w-ee[se];if(ue-he<n)continue;let Ae=T.indexOf(le),_e=o!=="dogleg"?F+(Ae-(T.length-1)/2)*n:F+ce*(J-ie[se]),Pe=Math.abs(_e-le.a.point.y),Ee=Math.abs(_e-le.b.point.y),Te=B+(Y?Y[Ae]:(_e>le.a.point.y?T.length-1-Ae:Ae)*(x+s)),be=w-(U?U[Ae]:(_e>le.b.point.y?T.length-1-Ae:Ae)*(x+s));if(o==="diagonal"&&Pe+Ee>=be-Te-4*x)continue;let me=[...le.a.before,{x:Te,y:le.a.point.y},{x:Te+Pe,y:_e},{x:be-Ee,y:_e},{x:be,y:le.b.point.y},...le.b.after],ye=ohi(o==="diagonal"?me:[...le.a.before,{x:o==="interior"?Te:he,y:le.a.point.y},{x:o==="interior"?Te:he,y:_e},{x:o==="interior"?be:ue,y:_e},{x:o==="interior"?be:ue,y:le.b.point.y},...le.b.after],x*1.5,B,w);if(!ye)continue;let Ce=le.channel;if(Ce.traces.length===1){let ve=Ce.traces[0];W.push({...ve,curvedSegments:eie(ve,ye.map(_)),route:ye.map((De)=>({..._(De),route_type:"wire",layer:ve.route[0].layer,width:ve.route[0].width}))})}else{let ve=ye.map(_),De=Ce.traces,Ze=Ce.width-De[0].route[0].width,st=[-Ze/2,Ze/2].sort((et,lt)=>wn(jA(ve,et)[0],De[0].route[De[0].coupledSection[0]])-wn(jA(ve,lt)[0],De[0].route[De[0].coupledSection[0]]));for(let[et,lt]of De.entries()){let[it,gt]=lt.coupledSection,wt=jA(ve,st[et]);if(wn(wt[0],lt.route[it])>0.0000001||wn(wt.at(-1),lt.route[gt])>0.0000001)continue;W.push({...lt,coupledSection:[it,it+wt.length-1],curvedSegments:eie(lt,[...lt.route.slice(0,it),...wt,...lt.route.slice(gt+1)]),route:[...lt.route.slice(0,it),...wt.map((Dt)=>({...Dt,route_type:"wire",layer:lt.route[0].layer,width:lt.route[0].width})),...lt.route.slice(gt+1)]})}}}}if(W.length!==u.length)continue;let j=r.map((ce)=>W.find((oe)=>oe.connection_name===ce.connection_name)??ce),q=[...Ls(e),...j.flatMap(Yi)];if(W.filter((ce)=>!new Ar(e,e.connections.find((oe)=>oe.name===ce.connection_name),ce.route[0].width,q).pathVisible(ce.route)||!bc(ce.route,ce.route[0].width+s)).length)continue;P=j;break e}}if(!P)return null;r=P}return r}function*ihi(e,t,n=[]){let o=t.x-e.x,i=t.y-e.y,r=Math.abs(o),s=Math.abs(i),a=Math.sign(o),c=Math.sign(i),l=new Set(Array.from({length:9},(d,u)=>Math.abs(r-s)*u/8));for(let d of n){let u=r>=s?(d.x-e.x)*a-(d.y-e.y)*c:(d.y-e.y)*c-(d.x-e.x)*a;if(u>=0&&u<=Math.abs(r-s))l.add(u)}for(let d of l)yield qg(r>=s?[e,{x:e.x+a*d,y:e.y},{x:e.x+a*(d+s),y:t.y},t]:[e,{x:e.x,y:e.y+c*d},{x:t.x,y:e.y+c*(d+r)},t])}var rhi=(e)=>e.slice(1,-1).every((t,n)=>{let o=e[n],i=e[n+2],r=wn(o,t)*wn(t,i);return r<0.000000000001||((t.x-o.x)*(i.x-t.x)+(t.y-o.y)*(i.y-t.y))/r>=Math.SQRT1_2-0.00000001});function dsn(e,t){let n=structuredClone(t),o=Ls(e);for(let i of n){if(i.coupledSection)continue;let r=e.connections.find((d)=>d.name===i.connection_name),s=i.route[0].width,a=new Ar(e,r,s,[...o,...n.flatMap(Yi)]),c=()=>{let d=new Uint32Array(i.route.length);for(let u of new Set(i.curvedSegments))d[u]=1;for(let u=1;u<d.length;u++)d[u]+=d[u-1];return d},l=c();for(let d=0;d<3;d++){let u=!1;for(let h=0;h<i.route.length-3;h++)for(let A=Math.min(i.route.length-1,h+70);A>=h+3;A--){if(l[A]!==l[h])continue;let m=li(i.route.slice(h,A+1)),p=!1;for(let g of ihi(i.route[h],i.route[A],i.route.slice(h,A+1))){if(g.length>=A-h+1||Math.abs(li(g)-m)>0.00000001||!a.pathVisible(g))continue;if(!rhi([...i.route.slice(Math.max(0,h-1),h),...g,...i.route.slice(A+1,A+2)]))continue;let _=i.route[h],f=[...i.route.slice(0,h),...g.map((x)=>({...x,route_type:"wire",layer:_.layer,width:s})),...i.route.slice(A+1)];if(!bc(f,s/2+a.margin))continue;let y=g.length-(A-h+1);i.route=f,i.curvedSegments=i.curvedSegments?.map((x)=>x>A?x+y:x),l=c(),u=p=!0;break}if(p)break}if(!u)break}}return n}function shi(e,t,n,o,i,r,s){let a=wn(e,t),c=s+n/2,l=2*i+1;if(!Number.isFinite(a+n+o+s)||n<0||o<=0||s<=0||!Number.isInteger(i)||i<1||i>64||r!==1&&r!==-1||a<(4*i+2)*c-0.000000001)return null;let d=(t.x-e.x)/a,u=(t.y-e.y)/a,h=(f)=>{let y=[{x:0,y:0}],x=0;for(let b=0;b<l;b++){let P=c+(a-2*c)*b/(l-1);y.push({x:P,y:x}),x=b===l-1?0:b%2?-f:f,y.push({x:P,y:x})}y.push({x:a,y:0});let C=[[],[]],I=(b,P,E,B)=>{for(let w=0;w<2;w++){let T=(w===0?1:-1)*n/2,Q=b-r*B*T,N=r*P+E*T,F={x:e.x+d*Q-u*N,y:e.y+u*Q+d*N};if(!C[w].length||wn(C[w].at(-1),F)>0.0000000001)C[w].push(F)}};I(0,0,1,0);for(let b=1;b<y.length-1;b++){let P=y[b-1],E=y[b],B=y[b+1],w=wn(P,E),T=wn(E,B),Q={x:(E.x-P.x)/w,y:(E.y-P.y)/w},N={x:(B.x-E.x)/T,y:(B.y-E.y)/T},F={x:E.x-Q.x*c,y:E.y-Q.y*c},H={x:F.x+N.x*c,y:F.y+N.y*c},z=Q.x*N.y-Q.y*N.x,Y=Math.atan2(F.y-H.y,F.x-H.x);for(let U=0;U<=18;U++){let X=Y+z*Math.PI/2*U/18;I(H.x+c*Math.cos(X),H.y+c*Math.sin(X),-z*Math.sin(X),z*Math.cos(X))}}return I(a,0,1,0),C},A=(4*i+2)*c*(36*Math.sin(Math.PI/72)-2),m=2*c;if(4*i*m+A>o+0.00000001)return null;let g=Math.max(m,(o-A)/(4*i)),_=h(g);return g=Math.max(m,g+(o-Math.min(..._.map((f)=>li(f)-a)))/(4*i)),h(g)}function usn(e,t,n={}){let o={...e,buses:[]},i=WW(e,t,tD(o,t),n),r=0,s=Ls(e),a=(c)=>li(c.route)+W_(e,c.connection_name);for(let c of e.differentialPairs??[]){let l=c.connectionNames.map((f)=>i.findIndex((y)=>y.connection_name===f)),d=l.map((f)=>i[f]);if(d.some((f)=>!f.coupledSection))continue;let u=tD(e,i),h=Math.max(...d.map((f)=>u.get(f.connection_name)-a(f)));if(h<0.00000001)continue;let A=d[0].route[0].width,m=c.traceGap??e.minTraceToPadEdgeClearance??e.defaultObstacleMargin??0.075,p=A+m,g=e.minTraceToPadEdgeClearance??e.defaultObstacleMargin??0.075,_;for(let f of n.packMeanders?[!1,!0]:[!1]){if(_)break;for(let y=d[0].coupledSection[0];y<d[0].coupledSection[1]&&!_;y++){let x=d[0].route[y],C=d[0].route[y+1],I=wn(x,C);if(I<A*8)continue;let b=(C.x-x.x)/I,P=(C.y-x.y)/I;for(let E=d[1].coupledSection[0];E<d[1].coupledSection[1]&&!_;E++){let B=d[1].route[E],w=d[1].route[E+1],T=wn(B,w);if(T<A*8||Math.abs((w.x-B.x)/T-b)>0.000001||Math.abs((w.y-B.y)/T-P)>0.000001)continue;let Q=-(B.x-x.x)*P+(B.y-x.y)*b;if(Math.abs(Math.abs(Q)-p)>0.000001)continue;let N=(U)=>(U.x-x.x)*b+(U.y-x.y)*P,F=Math.max(0,N(B))+A*2,H=Math.min(I,N(w))-A*2;if(H-F<A*8)continue;let z=(U)=>({x:x.x+b*U-P*Q/2,y:x.y+P*U+b*Q/2});function*Y(){if(!f)for(let U of[0.9,0.65,0.4])for(let X of n.packMeanders?Array.from({length:Math.max(1,Math.floor((H-F)*U/(4*(Math.max(A*1.2,g)+p/2))))},(V,W)=>W+1).reverse():Array.from({length:16},(V,W)=>W+1))for(let V of[1,-1])for(let W of[shi,nsn,Mui])yield{fraction:U,lobes:X,createLobes:W,side:V};if(f)for(let U of[1,2,3])for(let X of[0.9,0.65,0.4])for(let V of[1,-1])yield{fraction:X,lobes:U,createLobes:tsn,side:V}}e:for(let{fraction:U,lobes:X,createLobes:V,side:W}of Y()){if(++r>(n.maxCandidates??1/0))throw Error("Coupled tuning candidate budget exhausted");let j=(H-F)*(1-U)/2,q=V(z(F+j),z(H-j),p,h,X,W,Math.max(A*1.2,g));if(!q)continue;let ne=Q>0?q.toReversed():q,ce=d.map((ie,J)=>{let ee=J===0?y:E,se=[...ie.route.slice(0,ee+1),...ne[J],...ie.route.slice(ee+1)],le=se.length-ie.route.length;return{...ie,coupledSection:[ie.coupledSection[0],ie.coupledSection[1]+le],curvedSegments:se.slice(1).flatMap((he,ue)=>{let Ae=Math.abs(he.x-se[ue].x),_e=Math.abs(he.y-se[ue].y);return Math.min(Ae,_e)>0.00000001&&Math.abs(Ae-_e)>0.00000001?[ue+1]:[]}),route:se.map((he)=>({...he,route_type:"wire",layer:ie.route[0].layer,width:A}))}}),oe=[...s,...i.filter((ie,J)=>!l.includes(J)).flatMap(Yi),...ce.flatMap(Yi)];if(ce.some((ie,J)=>!new Ar(e,e.connections.find((ee)=>ee.name===ie.connection_name),A,oe).pathVisible(ie.route)||!bc(ie.route,A+g)||a(ie)<u.get(ie.connection_name)-0.000001))continue;if(Math.abs(a(ce[0])-a(ce[1]))>c.lengthTolerance+0.000001)continue;_=ce;break e}}}}if(!_)throw Error(`No shared tuning corridor for ${c.connectionNames.join(", ")}`);l.forEach((f,y)=>{i[f]=_[y]})}return WW(e,i,tD(e,i),n)}function ahi(e,t){let n=cD(e,t),o=[...e.traces??[],...t],i=(r)=>o.filter((s)=>s.connection_name===r||s.source_trace_id===r).flatMap((s)=>s.route.slice(1).flatMap((a,c)=>{let l=s.route[c];return l.route_type==="wire"&&a.route_type==="wire"&&l.layer===a.layer?[{a:l,b:a}]:[]}));return(e.differentialPairs??[]).filter((r)=>r.traceGap!==void 0||r.maxUncoupledLength!==void 0).map((r)=>{let s=r.connectionNames.map(i),a=r.traceGap??e.minTraceToPadEdgeClearance??e.defaultObstacleMargin??0.075,c=Math.max(0.002,a*0.1),l=s.map((u)=>{let h=new Set(u.map((A)=>A.a.layer));return new Map([...h].map((A)=>[A,new Yie(u.filter((m)=>m.a.layer===A).map((m)=>({...m,radius:m.a.width/2,layer:A,owners:[]})))]))}),d=s.map((u,h)=>{let A=0,m=0;for(let{a:p,b:g}of u){let _=wn(p,g),f=Math.max(1,Math.ceil(_/(c/2)));m+=_;let y=l[1-h].get(p.layer),x=(C)=>y?.distanceToPoint(C,(I)=>S1(C,I.a,I.b)-(p.width+I.radius*2)/2,p.width/2)??1/0;for(let C=0;C<f;C++){let I=(C+0.5)/f,b={x:p.x+(g.x-p.x)*I,y:p.y+(g.y-p.y)*I};if(Math.abs(x(b)-a)+_/(2*f)>c)A+=_/f}}return{name:r.connectionNames[h],totalLengthMm:m,uncoupledLengthMm:A,coupledFraction:m?1-A/m:0}});return{connectionNames:r.connectionNames,conductors:d,maxUncoupledLengthMm:r.maxUncoupledLength??null,matched:n.find((u)=>u.connectionNames===r.connectionNames).matched&&(r.maxUncoupledLength===void 0||d.every((u)=>u.uncoupledLengthMm<=r.maxUncoupledLength+0.00000001))}})}var C$t={"0":"M0.301025 0.257813 L0.206593 0.283385 L0.122042 0.361307 L0.075923 0.474441 L0.064942 0.642221 L0.091296 0.78289 L0.159376 0.899463 L0.257104 0.961214 L0.344948 0.961214 L0.442678 0.899463 L0.510757 0.78289 L0.537111 0.642221 L0.526131 0.474441 L0.480012 0.361307 L0.39546 0.283385 L0.301025 0.257813","1":"M0.220426 0.40845 L0.381626 0.270996 L0.381626 0.948966","2":"M0.110409 0.39212 L0.125621 0.342293 L0.170571 0.295823 L0.244237 0.26431 L0.291518 0.257813 L0.373319 0.263799 L0.434683 0.290705 L0.468239 0.331966 L0.480292 0.379913 L0.479492 0.411806 L0.465088 0.465192 L0.402571 0.568988 L0.245134 0.766438 L0.07959 0.948045 L0.522462 0.948045","3":"M0.081606 0.345073 L0.119154 0.315633 L0.178996 0.284091 L0.255265 0.257813 L0.349133 0.263062 L0.43127 0.289348 L0.48994 0.336662 L0.525141 0.394491 L0.513407 0.457577 L0.466472 0.504892 L0.384334 0.541692 L0.290464 0.56272 L0.20833 0.573235 L0.290464 0.583749 L0.384334 0.610035 L0.466472 0.652092 L0.519274 0.709922 L0.531007 0.773007 L0.50754 0.841351 L0.454738 0.899179 L0.3726 0.946494 L0.310412 0.961214 L0.209503 0.959111 L0.127367 0.946494 L0.071046 0.929671","4":"M0.418494 0.270996 L0.048828 0.724199 L0.553224 0.724199 M0.414181 0.578167 L0.414181 0.94897","5":"M0.074951 0.270996 L0.074951 0.614701 L0.267655 0.5695 L0.405247 0.586502 L0.460002 0.617189 L0.498028 0.660731 L0.527101 0.779401 L0.513352 0.841049 L0.477274 0.889568 L0.406378 0.93463 L0.324445 0.958337 L0.247399 0.962139 L0.182516 0.949767 L0.130068 0.925508 L0.074951 0.875607 M0.074951 0.270996 L0.527101 0.270996","6":"M0.428549 0.257813 L0.341433 0.285053 L0.26073 0.312099 L0.192188 0.360182 L0.138902 0.410969 L0.098219 0.500422 L0.070249 0.584267 L0.067264 0.670716 L0.065164 0.756863 L0.087163 0.820973 L0.108168 0.861042 L0.157916 0.913131 L0.210981 0.948192 L0.29279 0.961214 L0.384548 0.956206 L0.456409 0.924151 L0.507262 0.881077 L0.5349 0.821975 L0.537111 0.771889 L0.521634 0.718798 L0.498418 0.67372 L0.463042 0.636657 L0.414398 0.613617 L0.34696 0.598591 L0.28284 0.595587 L0.215403 0.605604 L0.145756 0.641665 L0.109274 0.678729 L0.064942 0.724006","7":"M0.071534 0.270996 L0.530519 0.270996 L0.495935 0.291702 L0.477752 0.305407 L0.435186 0.346112 L0.412067 0.374136 L0.388565 0.40796 L0.365315 0.448098 L0.342943 0.495062 L0.322081 0.549366 L0.303364 0.611524 L0.287416 0.68205 L0.270077 0.80465 L0.26253 0.94897","8":"M0.286761 0.257813 L0.210684 0.27162 L0.1414 0.305622 L0.092494 0.382125 L0.111513 0.450128 L0.16857 0.502193 L0.228345 0.539382 L0.377781 0.594635 L0.470161 0.645637 L0.52586 0.706203 L0.538087 0.792269 L0.506841 0.87621 L0.438915 0.927212 L0.339743 0.961214 L0.263666 0.959089 L0.174004 0.929337 L0.102003 0.881523 L0.063965 0.811395 L0.066682 0.741266 L0.102003 0.671139 L0.180797 0.608448 L0.259591 0.580822 L0.358762 0.548945 L0.456576 0.49688 L0.486463 0.446941 L0.487822 0.362999 L0.453859 0.302434 L0.384574 0.265245 L0.286761 0.257813","9":"M0.511026 0.437812 L0.491026 0.347812 L0.451026 0.297812 L0.391026 0.267812 L0.311026 0.257813 L0.231026 0.267812 L0.161026 0.297812 L0.111026 0.347812 L0.091026 0.417812 L0.111026 0.487812 L0.161026 0.537812 L0.231026 0.567812 L0.311026 0.577812 L0.391026 0.557812 L0.451026 0.517812 L0.491026 0.477812 L0.511026 0.437812 M0.510026 0.438812 L0.434026 0.636812 L0.381026 0.777812 L0.337026 0.879812 L0.301026 0.957812","!":"M0.301026 0.270996 L0.301026 0.749566 M0.251466 0.94897 L0.350587 0.94897",'"':"M0.16504 0.270996 L0.16504 0.523022 M0.437013 0.270996 L0.437013 0.523022","#":"M0.20958 0.282227 L0.146515 0.949754 M0.461844 0.282227 L0.398779 0.949754 M0.032999 0.526969 L0.600587 0.452796 M0.001465 0.82366 L0.569055 0.749486",$:"M0.307121 0.240234 L0.307121 1.083502 M0.490031 0.415915 L0.404676 0.328075 L0.23396 0.310507 L0.136407 0.398347 L0.099828 0.521324 L0.124213 0.591596 L0.197379 0.644299 L0.429061 0.697003 L0.502224 0.749708 L0.526613 0.837547 L0.477836 0.960526 L0.355897 1.013228 L0.197379 0.99566 L0.112021 0.942957 L0.07544 0.837547","'":"M0.301026 0.270996 L0.301026 0.523022","(":"M0.413087 0.241211 L0.372337 0.28347 L0.331589 0.334184 L0.290838 0.393349 L0.25009 0.460965 L0.219528 0.528584 L0.199153 0.5962 L0.188966 0.655364 L0.199153 0.714529 L0.219528 0.782146 L0.25009 0.849764 L0.290838 0.91738 L0.331589 0.976544 L0.372337 1.027258 L0.413087 1.069491",")":"M0.188966 0.241211 L0.229716 0.28347 L0.270466 0.334184 L0.311213 0.393349 L0.351964 0.460965 L0.382526 0.528584 L0.4029 0.5962 L0.413087 0.655364 L0.4029 0.714529 L0.382526 0.782146 L0.351964 0.849764 L0.311213 0.91738 L0.270466 0.976544 L0.229716 1.027258 L0.188966 1.069491","*":"M0.301026 0.458702 L0.301026 0.681942 M0.301026 0.458702 L0.520997 0.536834 M0.301026 0.458702 L0.439954 0.257813 M0.301026 0.458702 L0.162098 0.257813 M0.301026 0.458702 L0.081055 0.536834","+":"M0.042969 0.66845 L0.559083 0.66845 M0.301023 0.428223 L0.301023 0.908661",",":"M0.38672 0.852051 L0.215333 1.030661 L0.301025 1.119971","-":"M0.173829 0.686035 L0.428224 0.686035",".":"M0.362549 0.851074 L0.239503 0.851074","/":"M0.062501 1.035249 L0.539551 0.270996","<":"M0.559083 0.441895 L0.042969 0.66939 L0.042969 0.66939 L0.559083 0.896902","=":"M0.042969 0.545898 L0.559083 0.545898 M0.042969 0.80837 L0.559083 0.80837",">":"M0.042969 0.441895 L0.559083 0.66939 L0.559083 0.66939 L0.042969 0.896902",A:"M0.018067 0.94897 L0.290179 0.270996 L0.583986 0.94897 M0.155303 0.684521 L0.433548 0.684521",B:"M0.063965 0.94897 L0.063965 0.278953 L0.209356 0.270996 L0.342486 0.294394 L0.432179 0.37292 L0.418224 0.48773 L0.312686 0.549166 L0.084728 0.575531 L0.306377 0.589434 L0.468877 0.647456 L0.538087 0.736658 L0.5324 0.85202 L0.501247 0.902983 L0.42355 0.944398 L0.063965 0.94897",C:"M0.529054 0.419847 L0.498425 0.345196 L0.442238 0.292341 L0.33583 0.257813 L0.257199 0.268357 L0.187906 0.303748 L0.120243 0.385432 L0.072998 0.599844 L0.110073 0.815385 L0.165381 0.902183 L0.222883 0.942801 L0.334904 0.961214 L0.43253 0.937679 L0.504816 0.868999 L0.529054 0.772065",D:"M0.064454 0.94897 L0.071838 0.285078 L0.171217 0.270996 L0.247348 0.272633 L0.37101 0.306078 L0.462461 0.378304 L0.514748 0.475555 L0.535591 0.576392 L0.537599 0.652313 L0.528065 0.717381 L0.508562 0.772419 L0.445948 0.855695 L0.362356 0.90871 L0.225203 0.945862 L0.064454 0.94897",E:"M0.080078 0.270996 L0.080078 0.94897 M0.080078 0.270996 L0.521974 0.270996 M0.080078 0.609981 L0.389405 0.609981 M0.080078 0.94897 L0.521974 0.94897",F:"M0.086426 0.270996 L0.086426 0.94897 M0.091304 0.275607 L0.515626 0.275607 M0.091304 0.607677 L0.447344 0.607677",G:"M0.498034 0.284943 L0.374621 0.257813 L0.244219 0.268648 L0.160577 0.311997 L0.094556 0.398116 L0.056397 0.58404 L0.076752 0.785532 L0.120865 0.858197 L0.188947 0.916734 L0.271008 0.953591 L0.357069 0.961214 L0.43715 0.932047 L0.501262 0.858539 L0.545656 0.648611 L0.329595 0.648131",H:"M0.066895 0.270996 L0.066895 0.94897 M0.066895 0.595658 L0.530009 0.595658 M0.535157 0.270996 L0.535157 0.94897",I:"M0.301026 0.270996 L0.301026 0.94897",J:"M0.506839 0.270996 L0.507814 0.782193 L0.498468 0.846168 L0.480733 0.880789 L0.455864 0.90832 L0.426095 0.929408 L0.360746 0.954812 L0.302508 0.962139 L0.223573 0.953638 L0.16538 0.930312 L0.137072 0.907715 L0.116428 0.880312 L0.102822 0.848819 L0.095633 0.813947 L0.094239 0.776413",K:"M0.035401 0.270996 L0.035401 0.94897 M0.502258 0.316194 L0.035401 0.687823 M0.212484 0.582361 L0.566652 0.933903",L:"M0.07544 0.270996 L0.07544 0.94897 L0.526613 0.94897",M:"M0.042481 0.94897 L0.042481 0.270996 L0.301027 0.712492 L0.559571 0.270996 L0.559571 0.94897",N:"M0.067871 0.94897 L0.067871 0.270996 L0.534181 0.94897 L0.525031 0.270996",O:"M0.287293 0.961214 L0.19843 0.933567 L0.1172 0.849451 L0.057129 0.563945 L0.114348 0.350255 L0.18455 0.289392 L0.306101 0.257813 L0.42054 0.29572 L0.487543 0.365003 L0.544923 0.625294 L0.516366 0.789624 L0.465476 0.884596 L0.375084 0.949287 L0.287293 0.961214",P:"M0.070557 0.94897 L0.070557 0.28379 L0.20704 0.270996 L0.329134 0.278993 L0.408525 0.300514 L0.444022 0.317908 L0.500637 0.368929 L0.525796 0.423728 L0.531496 0.50384 L0.508934 0.554205 L0.473724 0.582043 L0.417577 0.604365 L0.336375 0.620372 L0.226014 0.629268 L0.082368 0.630258",Q:"M0.282435 1.050813 L0.195447 1.019646 L0.115933 0.924817 L0.057129 0.602943 L0.113139 0.362034 L0.18186 0.293418 L0.300844 0.257813 L0.412868 0.300553 L0.478457 0.37866 L0.534625 0.672103 L0.506671 0.857367 L0.456855 0.964437 L0.368371 1.037368 L0.282435 1.050813 M0.341225 0.815559 L0.544923 1.070653",R:"M0.034912 0.944112 L0.034912 0.288556 L0.227127 0.270996 L0.362038 0.276867 L0.443423 0.294907 L0.477644 0.309614 L0.505809 0.328757 L0.526616 0.352817 L0.544963 0.418061 L0.543241 0.475921 L0.524463 0.517817 L0.49076 0.546518 L0.444265 0.564799 L0.355195 0.578739 L0.047653 0.589627 M0.303054 0.617306 L0.56714 0.94897",S:"M0.483037 0.364333 L0.407613 0.267477 L0.22883 0.257813 L0.128623 0.327565 L0.087712 0.455539 L0.104656 0.518727 L0.168054 0.573307 L0.41928 0.617318 L0.503796 0.669342 L0.535157 0.759324 L0.493846 0.900055 L0.367668 0.961214 L0.205436 0.956661 L0.116711 0.907038 L0.066895 0.790334",T:"M0.022949 0.270996 L0.579103 0.270996 M0.309284 0.270996 L0.309284 0.94897",U:"M0.072022 0.270996 L0.07308 0.648875 L0.080372 0.75167 L0.099024 0.827813 L0.134786 0.885729 L0.181571 0.924023 L0.251464 0.95168 L0.339655 0.962139 L0.401553 0.951668 L0.45232 0.924086 L0.482701 0.891771 L0.495745 0.870529 L0.515699 0.81637 L0.525014 0.744626 L0.530031 0.272017",V:"M0.027832 0.270996 L0.320083 0.94897 L0.57422 0.270996",W:"M0 0.270996 L0.079799 0.940377 L0.285198 0.472884 L0.505255 0.94897 L0.602052 0.270996",X:"M0.009034 0.270996 L0.586805 0.94897 M0.593019 0.270996 L0.015246 0.94897",Y:"M0.018067 0.270996 L0.293132 0.574135 M0.583986 0.271959 L0.294954 0.57606 L0.305277 0.94897",Z:"M0.053711 0.270996 L0.548341 0.270996 L0.053711 0.94897 L0.548341 0.94897","[":"M0.404542 0.240234 L0.197511 0.240234 L0.197511 1.069424 L0.404542 1.069424","\\":"M0.062501 0.270996 L0.539551 1.035249","]":"M0.19751 0.240234 L0.404542 0.240234 L0.404542 1.069424 L0.19751 1.069424","^":"M0.035156 0.523931 L0.301024 0.270996 L0.566896 0.523931",_:"M0 1.160601 L0.602052 1.160601",a:"M0.527101 0.439941 L0.527101 0.973965 M0.527101 0.553824 L0.451366 0.477535 L0.376759 0.439941 L0.263722 0.439941 L0.187989 0.477535 L0.112255 0.553824 L0.074951 0.66881 L0.074951 0.745099 L0.112255 0.85898 L0.187989 0.93527 L0.263722 0.973965 L0.376759 0.973965 L0.451366 0.93527 L0.527101 0.85898",b:"M0.07666 0.240234 L0.07666 0.959985 M0.07666 0.582737 L0.151822 0.514237 L0.225865 0.480483 L0.338045 0.480483 L0.413211 0.514237 L0.488374 0.582737 L0.525392 0.685983 L0.525392 0.754485 L0.488374 0.856739 L0.413211 0.92524 L0.338045 0.959985 L0.225865 0.959985 L0.151822 0.92524 L0.07666 0.856739",c:"M0.512452 0.553823 L0.441624 0.477535 L0.371854 0.439941 L0.26614 0.439941 L0.195312 0.477535 L0.124486 0.553823 L0.0896 0.668808 L0.0896 0.745099 L0.124486 0.858979 L0.195312 0.93527 L0.26614 0.973965 L0.371854 0.973965 L0.441624 0.93527 L0.512452 0.858979",d:"M0.525392 0.240234 L0.525392 0.959985 M0.525392 0.582737 L0.450232 0.514237 L0.376189 0.480483 L0.264006 0.480483 L0.188844 0.514237 L0.11368 0.582737 L0.076661 0.685983 L0.076661 0.754485 L0.11368 0.856739 L0.188844 0.92524 L0.264006 0.959985 L0.376189 0.959985 L0.450232 0.92524 L0.525392 0.856739",e:"M0.059571 0.668808 L0.542482 0.668808 M0.542482 0.592521 L0.502641 0.516231 L0.461594 0.477535 L0.381914 0.439941 L0.261186 0.439941 L0.180299 0.477535 L0.099412 0.553823 L0.059571 0.668808 L0.059571 0.745099 L0.099412 0.858979 L0.180299 0.93527 L0.261186 0.973965 L0.381914 0.973965 L0.461594 0.93527 L0.542482 0.858979",f:"M0.512941 0.240234 L0.406984 0.240234 L0.301026 0.274346 L0.248047 0.374731 L0.248047 0.946817 M0.089112 0.476088 L0.459965 0.476088",g:"M0.525392 0.439941 L0.525392 0.989395 L0.488373 1.091918 L0.45023 1.126757 L0.376189 1.160601 L0.264004 1.160601 L0.188844 1.126757 L0.113681 1.058075 L0.076661 0.954555 M0.525392 0.542467 L0.45023 0.473786 L0.376189 0.439941 L0.264004 0.439941 L0.188844 0.473786 L0.113681 0.542467 L0.076661 0.645988 L0.076661 0.714669 L0.113681 0.817193 L0.188844 0.885875 L0.264004 0.920713 L0.376189 0.920713 L0.45023 0.885875 L0.525392 0.817193",h:"M0.092041 0.240234 L0.092041 0.946817 M0.092041 0.61058 L0.205937 0.509225 L0.282214 0.476086 L0.396109 0.476086 L0.47187 0.509225 L0.510011 0.61058 L0.510011 0.946817",i:"M0.261026 0.240234 L0.341026 0.240234 M0.300978 0.476089 L0.300978 0.946817",j:"M0.3853 0.240234 L0.447023 0.240234 M0.416159 0.465708 L0.416159 1.011689 L0.383887 1.108586 L0.252832 1.140264 L0.15503 1.108586",k:"M0.065186 0.240234 L0.065186 0.946817 M0.493824 0.476086 L0.065186 0.812323 M0.236758 0.677829 L0.536867 0.946817",l:"M0.301026 0.234863 L0.301026 0.946441",m:"M0.050538 0.439941 L0.050538 0.960796 M0.050538 0.588758 L0.114405 0.476607 L0.157178 0.439941 L0.236864 0.439941 L0.279637 0.476607 L0.32241 0.588758 L0.32241 0.960796 M0.32241 0.588758 L0.386281 0.476607 L0.428467 0.439941 L0.50874 0.439941 L0.551515 0.476607 L0.551515 0.960796",n:"M0.092041 0.439941 L0.092041 0.960796 M0.092041 0.588758 L0.205936 0.476607 L0.282216 0.439941 L0.396113 0.439941 L0.471871 0.476607 L0.510011 0.588758 L0.510011 0.960796",o:"M0.247175 0.439941 L0.175178 0.477535 L0.103186 0.553823 L0.066895 0.668808 L0.066895 0.745099 L0.103186 0.858979 L0.175178 0.93527 L0.247175 0.973965 L0.354874 0.973965 L0.426872 0.93527 L0.498866 0.858979 L0.535157 0.745099 L0.535157 0.668808 L0.498866 0.553823 L0.426872 0.477535 L0.354874 0.439941 L0.247175 0.439941",p:"M0.076904 0.439941 L0.076904 1.154244 M0.076904 0.541563 L0.151986 0.473487 L0.225944 0.439941 L0.338005 0.439941 L0.413087 0.473487 L0.488166 0.541563 L0.525148 0.644169 L0.525148 0.712246 L0.488166 0.813866 L0.413087 0.881942 L0.338005 0.916471 L0.225944 0.916471 L0.151986 0.881942 L0.076904 0.813866",q:"M0.525148 0.441895 L0.525148 1.156195 M0.525148 0.5435 L0.450067 0.47544 L0.376106 0.441895 L0.264042 0.441895 L0.188966 0.47544 L0.113885 0.5435 L0.076905 0.646108 L0.076905 0.714187 L0.113885 0.815809 L0.188966 0.883886 L0.264042 0.918418 L0.376106 0.918418 L0.450067 0.883886 L0.525148 0.815809",r:"M0.107422 0.439941 L0.107422 0.960796 M0.107422 0.663164 L0.155824 0.551014 L0.252626 0.476607 L0.349428 0.439941 L0.49463 0.439941",s:"M0.475556 0.477535 L0.400757 0.439941 L0.276092 0.439941 L0.176361 0.477535 L0.101563 0.553823 L0.101563 0.630112 L0.176361 0.668808 L0.301024 0.668808 L0.425688 0.745099 L0.50049 0.821387 L0.50049 0.897677 L0.425688 0.93527 L0.325956 0.973965 L0.201295 0.973965 L0.126496 0.93527 L0.101563 0.858979",t:"M0.246032 0.297852 L0.246032 0.826549 L0.301023 0.919323 L0.411011 0.950848 L0.520997 0.950848 M0.081055 0.515799 L0.466004 0.515799",u:"M0.092041 0.454102 L0.092041 0.826134 L0.13018 0.937211 L0.205936 0.974954 L0.319832 0.974954 L0.396113 0.937211 L0.510011 0.826134 M0.510011 0.454102 L0.510011 0.974954",v:"M0.048828 0.453125 L0.301026 0.961719 M0.553224 0.453125 L0.301026 0.961719",w:"M0 0.453125 L0.150512 0.961719 M0.301024 0.453125 L0.150512 0.961719 M0.301024 0.453125 L0.451539 0.961719 M0.602052 0.453125 L0.451539 0.961719",x:"M0.03711 0.453125 L0.564943 0.961719 M0.564943 0.453125 L0.03711 0.961719",y:"M0.084618 0.453125 L0.320232 0.921476 M0.55713 0.453125 L0.320232 0.921476 L0.242119 1.055289 L0.163369 1.122196 L0.084618 1.155166 L0.044922 1.155166",z:"M0.505373 0.452148 L0.09668 0.961651 M0.09668 0.452148 L0.505373 0.452148 M0.09668 0.961651 L0.505373 0.961651"},I$t={};for(let e in C$t){I$t[e]=[];let t=C$t[e].split("M").slice(1).map((n)=>n.split("L").map((o)=>o.trim().split(" ").map(parseFloat)));for(let n of t)for(let o=0;o<n.length-1;o++)I$t[e].push({x1:n[o][0],y1:1-n[o][1],x2:n[o+1][0],y2:1-n[o+1][1]})}var xns=(()=>{let e=new Uint8Array(4),t=new Uint32Array(e.buffer);return!((t[0]=1)&e[0])})(),Cns={int8:globalThis.Int8Array,uint8:globalThis.Uint8Array,int16:globalThis.Int16Array,uint16:globalThis.Uint16Array,int32:globalThis.Int32Array,uint32:globalThis.Uint32Array,uint64:globalThis.BigUint64Array,int64:globalThis.BigInt64Array,float32:globalThis.Float32Array,float64:globalThis.Float64Array},chi=[];for(let e=0;e<256;e++){let t=e;for(let n=0;n<8;n++)if(t&1)t=3988292384^t>>>1;else t=t>>>1;chi[e]=t}var lhi=new Uint16Array([255]),dhi=new Uint8Array(lhi.buffer),Ins=dhi[0]===255,uhi=new Uint16Array([255]),hhi=new Uint8Array(uhi.buffer),bns=hhi[0]===255,Sns=new Uint8Array(0),Pns=Uint8Array.of(137,80,78,71,13,10,26,10),vns=new TextDecoder("latin1"),{cos:Ens,sin:Mns,PI:Bns}=Math,{tan:wns}=Math,Tns=gX(Zrn(),1),hsn=class{MAX_ITERATIONS=1e5;solved=!1;failed=!1;iterations=0;progress=0;error=null;activeSubSolver;failedSubSolvers;timeToSolve;stats={};_setupDone=!1;getSolverName(){return this.constructor.name}setup(){if(this._setupDone)return;this._setup(),this._setupDone=!0}_setup(){}step(){if(!this._setupDone)this.setup();if(this.solved)return;if(this.failed)return;this.iterations++;try{this._step()}catch(e){throw this.error=`${this.getSolverName()} error: ${e}`,this.failed=!0,e}if(!this.solved&&this.iterations>=this.MAX_ITERATIONS)this.tryFinalAcceptance();if(!this.solved&&this.iterations>=this.MAX_ITERATIONS)this.error=`${this.getSolverName()} ran out of iterations`,this.failed=!0;if("computeProgress"in this)this.progress=this.computeProgress()}_step(){}getConstructorParams(){throw Error("getConstructorParams not implemented")}getOutput(){return null}solve(){let e=Date.now();while(!this.solved&&!this.failed)this.step();let t=Date.now();this.timeToSolve=t-e}visualize(){return{lines:[],points:[],rects:[],circles:[]}}tryFinalAcceptance(){}preview(){return{lines:[],points:[],rects:[],circles:[]}}};function mhi(e){if(!e.length)return[[]];let t=[],n=new Set,o=(l)=>{let d=l.map((u)=>u.name).join("\x00");if(!n.has(d))n.add(d),t.push(l)},i=e.reduce((l,d)=>({x:l.x+d.pointsToConnect[1].x-d.pointsToConnect[0].x,y:l.y+d.pointsToConnect[1].y-d.pointsToConnect[0].y}),{x:0,y:0}),r=(l)=>-i.y*l.pointsToConnect[0].x+i.x*l.pointsToConnect[0].y,s=[...e].sort((l,d)=>l.pointsToConnect[0].layer.localeCompare(d.pointsToConnect[0].layer)||r(l)-r(d)||l.name.localeCompare(d.name)),a=(l,d)=>Math.max(...e.map((u)=>u.pointsToConnect[l][d]))-Math.min(...e.map((u)=>u.pointsToConnect[l][d])),c=a(0,"x")<0.0000001&&a(1,"x")<0.0000001?"y":a(0,"y")<0.0000001&&a(1,"y")<0.0000001?"x":void 0;if(c){let l=e.reduce((d,u)=>d+u.pointsToConnect[1][c]-u.pointsToConnect[0][c],0);if(Math.abs(l)>0.0000001)o([...e].sort((d,u)=>d.pointsToConnect[0].layer.localeCompare(u.pointsToConnect[0].layer)||-Math.sign(l)*(d.pointsToConnect[0][c]-u.pointsToConnect[0][c])||d.name.localeCompare(u.name)))}o(s),o([...s].reverse()),o(e);for(let l of[1,0]){let d=e.reduce((A,m)=>({x:A.x+m.pointsToConnect[l].x/e.length,y:A.y+m.pointsToConnect[l].y/e.length}),{x:0,y:0}),u=(A)=>Math.atan2(A.pointsToConnect[l].y-d.y,A.pointsToConnect[l].x-d.x),h=[...e].sort((A,m)=>u(A)-u(m)||A.name.localeCompare(m.name));o(h),o([...h].reverse());for(let A of["x","y"]){let m=A==="x"?"y":"x",p=[...e].sort((g,_)=>g.pointsToConnect[l][A]-_.pointsToConnect[l][A]||g.pointsToConnect[l][m]-_.pointsToConnect[l][m]);o(p),o([...p].reverse())}for(let A=1;A<h.length;A++){let m=[...h.slice(A),...h.slice(0,A)];o(m),o([...m].reverse())}}return t}function phi(e,t,n){if(e.buses?.length&&Ahi(e,t))return CW(e,t,n);let o=t.reduce((h,A)=>h+A.route.at(-1).x-A.route[0].x,0),i=t.reduce((h,A)=>h+A.route.at(-1).y-A.route[0].y,0),r=Math.round(Math.atan2(i,o)/(Math.PI/4))*Math.PI/4,s=Math.cos(r),a=Math.sin(r),c=(h)=>({u:h.x*s+h.y*a,v:-h.x*a+h.y*s}),l=(h,A)=>({x:h*s-A*a,y:h*a+A*s}),d=[];for(let h of new Set(t.map((A)=>A.route[0].layer))){let A=t.filter((p)=>p.route[0].layer===h).sort((p,g)=>c(p.route[0]).v-c(g.route[0]).v),m=A.reduce((p,g)=>p+(c(g.route[0]).v+c(g.route.at(-1)).v)/2,0)/A.length;for(let[p,g]of A.entries()){let _=c(g.route[0]),f=c(g.route.at(-1)),y=m+(p-(A.length-1)/2)*n,x=Math.abs(y-_.v),C=Math.abs(y-f.v),I=f.u-_.u-x-C;if(I<1)return null;let b=I*0.15,P=qg([l(_.u,_.v),l(_.u+b,_.v),l(_.u+b+x,y),l(f.u-b-C,y),l(f.u-b,f.v),l(f.u,f.v)]);d.push({...g,route:P.map((E)=>({...E,route_type:"wire",layer:h,width:g.route[0].width}))})}}let u=[...Ls(e),...d.flatMap(Yi)];for(let h of d){let A=e.connections.find((m)=>m.name===h.connection_name);if(!new Ar(e,A,h.route[0].width,u).pathVisible(h.route))return null}return t.map((h)=>d.find((A)=>A.connection_name===h.connection_name))}function Ahi(e,t){let n=new Map;for(let i of e.obstacles){if(!i.componentId)continue;let r=(i.ccwRotationDegrees??0)*Math.PI/180,s=Math.abs(Math.cos(r))*i.width+Math.abs(Math.sin(r))*i.height,a=Math.abs(Math.sin(r))*i.width+Math.abs(Math.cos(r))*i.height,c=n.get(i.componentId)??{left:1/0,right:-1/0,bottom:1/0,top:-1/0,padSize:0};c.left=Math.min(c.left,i.center.x-s/2),c.right=Math.max(c.right,i.center.x+s/2),c.bottom=Math.min(c.bottom,i.center.y-a/2),c.top=Math.max(c.top,i.center.y+a/2),c.padSize=Math.max(c.padSize,i.width,i.height),n.set(i.componentId,c)}let o=e.minTraceToPadEdgeClearance??e.defaultObstacleMargin??0.075;return t.some((i)=>[i.route[0],i.route.at(-1)].some((r)=>[...n.values()].some((s)=>{let a=Math.max(e.minViaPadDiameter??0.3,s.padSize)/2+o;return r.x>=s.left-a&&r.x<=s.right+a&&r.y>=s.bottom-a&&r.y<=s.top+a})))}var _hi={top:"#dc2626",inner1:"#ca8a04",inner2:"#16a34a",inner3:"#0891b2",inner4:"#9333ea",inner5:"#ea580c",inner6:"#db2777",bottom:"#2563eb"},Jne=(e)=>_hi[e]??"#64748b",G_=class e extends hsn{constructor(t,n={},o=new Map){super();this.terminalLayers=o,this.input=structuredClone(t),this.options=n,this.MAX_ITERATIONS=n.maxSearchIterations??200000}terminalLayers;input;options;phase="validate";failureCode=null;traces=[];widths=new Map;fixed=[];orders=[];attempt=0;lane=0;search;bestPartial=[];pairedTraces=[];pairIndex=0;congestionPass=0;conflictingLanes=0;independent;independentAttempted=!1;pairedNetwork;pairedNetworkAttempted=!1;negotiated;reservePackageExits;pairSearch;reportedRoutes;lengthStats;static forRefinement(t,n,o={}){let i=new e(t,o);if(i.initialize(),i.failed)return i;if(i.search instanceof Fc)i.search.cancel();return i.search=void 0,i.traces=structuredClone(n),i.phase="match",i}static forValidation(t,n,o={}){let i=e.forRefinement(t,n,o);if(!i.failed)i.phase="validate_output";return i}getConstructorParams(){return[this.input,this.options]}getOutput(){if(!this.solved)throw Error(this.error??"Bus lanes are not solved");return{...this.input,traces:[...this.input.traces??[],...this.traces]}}fail(t,n){if(this.failureCode=t,this.error=n,this.failed=!0,this.phase="failed",this.search instanceof Fc)this.search.cancel();this.pairedNetwork?.return(null),this.pairedNetwork=void 0,this.pairSearch?.return(null),this.negotiated?.return(null),this.pairSearch=void 0,this.negotiated=void 0}tryFinalAcceptance(){if(this.pairedNetwork?.return(null),this.pairedNetwork=void 0,this.independent?.return(null),this.independent=void 0,!this.solved)this.fail("search_budget_exhausted","Vector visibility search budget exhausted")}initialize(){let t=this.input;if(t.outline?.length){this.fail("unsupported_outline","Custom board outlines are unsupported");return}let n=new Set;for(let s of t.connections){if(n.has(s.name))throw Error(`Duplicate connection ${s.name}`);if(n.add(s.name),s.pointsToConnect.length!==2){this.fail("invalid_terminals",`${s.name}: exactly two terminals required`);return}let[a,c]=s.pointsToConnect;if(a.layers||c.layers||a.layer!==c.layer){this.fail("layer_change_required",`${s.name}: ${a.layer} → ${c.layer}; a common fixed layer is required; fanout handoff layers must agree`);return}if(t.allowedLayers&&!t.allowedLayers.includes(a.layer)){this.fail("forbidden_layer",`${s.name}: forbidden signal layer ${a.layer}`);return}if(![a.x,a.y,c.x,c.y].every(Number.isFinite))throw Error("Nonfinite terminal");this.widths.set(s.name,s.nominalTraceWidth??s.width??t.minTraceWidth)}for(let s of t.buses??[])if(s.maxLength!==void 0&&(!Number.isFinite(s.maxLength)||s.maxLength<0))throw Error("Invalid maximum bus length");for(let s of t.buses??[])if(s.minLength!==void 0&&(!Number.isFinite(s.minLength)||s.minLength<0||s.minLength>(s.maxLength??1/0)))throw Error("Invalid minimum bus length");for(let s of t.buses??[])if(s.maxLengthSkew!==void 0&&(!Number.isFinite(s.maxLengthSkew)||s.maxLengthSkew<0))throw Error("Invalid maximum length skew");for(let{names:s,tolerance:a}of hWe(t)){if(!Number.isFinite(a)||a<0)throw Error("Invalid maximum length skew");if(s.length<1||new Set(s).size!==s.length||s.some((c)=>!n.has(c)))throw Error("Invalid length matching members")}let o=new Set;for(let s of t.buses??[])for(let a of s.connectionNames){let c=t.connections.find((u)=>u.name===a);if(!c||o.has(a))throw Error(`Missing or duplicated bus member ${a}`);o.add(a);let l=c.pointsToConnect[0].layer;if(s.allowedLayers&&!s.allowedLayers.includes(l))throw Error(`${s.busId}: forbidden layer ${l}`);let d=s.traceWidth;if(d!==void 0)this.widths.set(a,d)}for(let s of this.widths.values())if(!Number.isFinite(s)||s<=0||s<t.minTraceWidth)throw Error("Invalid trace width");this.fixed=Ls(t);for(let s of t.connections)for(let a of s.pointsToConnect)this.fixed.push({a,b:a,layer:a.layer,radius:this.widths.get(s.name)/2,owners:[s.name]});let i=this.useNegotiation,r=new Set(i?[]:this.coupledPairs().flatMap((s)=>s.connectionNames));if(this.orders=mhi(t.connections.filter((s)=>!r.has(s.name))),!t.connections.length){this.solved=!0,this.phase="solved";return}if(!i&&this.coupledPairs().length){this.phase="coupled_pairs";return}this.phase="route",this.startLane()}get useNegotiation(){return this.options.denseSearch&&(this.input.connections.length>12||this.input.connections.some((t)=>(this.terminalLayers.get(t.name)?.length??0)>1))}coupledPairs(){return(this.input.differentialPairs??[]).filter((t)=>t.traceGap!==void 0||t.maxUncoupledLength!==void 0)}routePair(){let t=this.coupledPairs()[this.pairIndex];if(!t){this.pairedTraces=structuredClone(this.traces),this.phase="route",this.startLane();return}this.pairSearch??=_D(this.input,t,[...this.fixed,...this.traces.flatMap(Yi)]);let n=this.pairSearch.next();if(!n.done)return;if(!n.value){this.fail("coupled_routing_failed","No legal coupled corridor and package approaches");return}this.traces.push(...n.value),this.pairSearch=void 0,this.pairIndex++}scene(t){return new Ar(this.input,t,this.widths.get(t.name),[...this.fixed,...this.traces.flatMap(Yi)])}startLane(){if(this.lane===this.orders[this.attempt].length){this.phase="match";return}let t=this.orders[this.attempt][this.lane],[n,o]=t.pointsToConnect;this.search=this.useNegotiation?new Fc(this.scene(t),n,o):new moe(this.scene(t),n,o)}retry(){if(this.traces.length>this.bestPartial.length)this.bestPartial=structuredClone(this.traces);if(this.options.denseSearch&&this.attempt<300){let t=this.orders[this.attempt],n=t[this.lane];if(n){let o=[...t];o.splice(this.lane,1),o.splice(Math.max(0,this.lane-1-Math.floor(this.attempt/8)),0,n);let i=o.map((r)=>r.name).join("\x00");if(!this.orders.slice(0,this.attempt+1).some((r)=>r.map((s)=>s.name).join("\x00")===i))this.orders.splice(this.attempt+1,0,o)}}if(this.attempt++,this.attempt>=this.orders.length){this.traces=this.bestPartial,this.fail("no_planar_route","No collision-free routing found in the vector visibility graph");return}this.traces=structuredClone(this.pairedTraces),this.lane=0,this.startLane()}route(){if(this.useNegotiation){if(this.search instanceof Fc)this.search.cancel();if(this.search=void 0,!this.pairedNetworkAttempted){this.pairedNetworkAttempted=!0;let o=new Set([...(this.input.buses??[]).flatMap((i)=>i.connectionNames),...(this.input.differentialPairs??[]).flatMap((i)=>i.connectionNames)]);if(this.input.connections.some((i)=>!o.has(i.name))&&XT(this.input))this.pairedNetwork=Kui(this.input,this.terminalLayers)}if(this.pairedNetwork){let o=this.pairedNetwork.next();if(!o.done)return;if(this.pairedNetwork=void 0,o.value){this.traces=o.value,this.phase="match";return}}if(!this.independentAttempted){this.independentAttempted=!0;let o=pWe(this.input);if(o)this.independent=Wui(o,this.fixed,this.widths,(i,r)=>{let s=new e(i,this.options);if(s.step(),s.traces=r,s.phase="match",s.step(),!s.failed)s.step();return s.solved?s.traces:null})}if(this.independent){let o=this.independent.next();if(!o.done){this.traces=o.value,this.lane=this.traces.length;return}if(this.independent=void 0,o.value){this.traces=o.value,this.phase="validate_output";return}}this.reservePackageExits??=XT(this.input),this.negotiated??=DF(this.input,this.orders[0],this.fixed,this.pairedTraces,this.widths,(o,i)=>{this.congestionPass=o,this.conflictingLanes=i},this.terminalLayers,()=>this.reservePackageExits);let n=this.negotiated.next();if(!n.done){this.traces=n.value,this.lane=this.traces.length-this.pairedTraces.length;return}if(!n.value){this.fail("no_planar_route","Negotiated lane search exhausted without a complete route");return}this.traces=n.value,this.phase="match";return}let t=this.search;if(t.step(),t.solved){let n=this.orders[this.attempt][this.lane];this.traces.push({type:"pcb_trace",pcb_trace_id:`bus_lane_${n.name}`,connection_name:n.name,source_trace_id:n.source_trace_id??n.name,route:X_(t.result,this.scene(n)).map((o)=>({route_type:"wire",x:o.x,y:o.y,layer:n.pointsToConnect[0].layer,width:this.widths.get(n.name)}))}),this.lane++,this.startLane()}else if(t.failed||t.expanded>=(this.options.maxLaneIterations??(t instanceof Fc?1e6:4000))){if(t instanceof Fc)t.cancel();this.retry()}}match(){let t=this.input,n=this.traces,o=this.fixed,i=new WeakSet,r=new WeakSet,s=new WeakSet,a=this.options.smoothTuning&&n.some((h)=>h.coupledSection);function*c(){if(yield n,a){let m=new Set(t.buses?.flatMap((p)=>p.connectionNames));if((t.allowedLayers?.length??t.layerCount)===2&&n.some((p)=>!m.has(p.connection_name))){let p=esn(t,n).size>0;for(let g of p?[12,14,16,10,8]:[10,8,12,14,16]){let _=CW(t,n,t.minTraceWidth*g,"dogleg",!0);if(_)i.add(_),r.add(_),yield _}}for(let p of(t.buses?.length??0)>1?[5,6,8,12,16,20]:[5,6,8,12]){let g=CW(t,n,t.minTraceWidth*p,"interior");if(g){if(p<8)s.add(g);i.add(g),yield g}}for(let p of[8,12]){let g=CW(t,n,t.minTraceWidth*p);if(g)i.add(g),yield g}}if(a)yield n;let h=ssn(t,n,o);if(h.some((m,p)=>m!==n[p]))yield h;if(n.some((m)=>m.coupledSection)){for(let m of a?[20,16,6,4]:[20,16,12,8,6,4]){let p=CW(t,n,t.minTraceWidth*m);if(p)yield p}for(let m of[8,12,6,16,4,20]){let p=CW(t,n,t.minTraceWidth*m,"diagonal");if(p)yield p}return}let A=Math.max(...n.map((m)=>m.route[0].width));for(let m of[16,24,28,32]){let p=phi(t,n,A*m);if(p)yield p}}let l,d=new Set,u=!1;for(let h of c()){let A=a&&h===n&&!u,m=A||s.has(h);if(h===n)u=!0;let p=function*(g,_){if(yield h,m)return;if(_)yield Zui(t,h,g);if(_&&h.some((f)=>f.coupledSection))for(let f of[2.75,2.5,2.25,2,3,1.5,1,0.5,0.25,0.125,0.0625,0.03125])yield ehi(t,h,g,f)};for(let g of p(this.fixed,this.options.smoothTuning))for(let _ of this.options.smoothTuning?m?[1.5]:[1.5,0.75,0.375,0.1875,0.09375,0.046875,0.0234375]:[0]){let f=DCe(t,_?aD(t,g,this.fixed,_):g),y=JSON.stringify(f.map((x)=>[x.route,x.coupledSection,x.curvedSegments]));if(d.has(y))continue;if(d.add(y),this.options.smoothTuning&&!uF(f)){l=Error("No clear conventional approach corners");continue}if(cD(t,f).some((x)=>!x.matched)){l=Error("Pair approach refinement separated the shared rails");continue}try{let x=tD(t,f);if(Iui(t,x),this.traces=this.options.smoothTuning&&f.some((C)=>C.coupledSection)?usn(t,f,{maxCandidates:h===n?t.buses?.some((C)=>C.maxLength!==void 0)?65536:512:r.has(h)?65536:16384,packMeanders:A||i.has(h)}):(this.options.smoothTuning?WW:Pui)(t,f,x),this.options.smoothTuning)this.traces=dsn(t,this.traces);if(this.options.smoothTuning&&!uF(this.traces))throw Error("Length tuning introduced a sharp corner");if(cD(t,this.traces).some((C)=>!C.matched))throw Error("Length tuning separated the shared pair rails");this.phase="validate_output";return}catch(x){l=x}}}this.fail("length_matching_failed",String(l));return}validateOutput(){if(this.options.smoothTuning&&!uF(this.traces))throw Error("Final route has a nonconventional corner");for(let t of this.input.connections){let n=this.traces.find((i)=>i.connection_name===t.name);if(!n)throw Error("Missing lane");if(n.route.length<2||n.route.some((i)=>!Number.isFinite(i.x)||!Number.isFinite(i.y)||i.route_type!=="wire"||!Number.isFinite(i.width)||i.width<=0))throw Error("Invalid lane geometry");if(n.route.some((i)=>i.route_type!=="wire"||i.layer!==t.pointsToConnect[0].layer))throw Error("Carrier layer does not match its terminals");let o=this.scene(t);if(!bc(n.route,this.widths.get(t.name)/2+o.margin))throw Error("Final self-clearance violation");if(wn(n.route[0],t.pointsToConnect[0])>0.00000001||wn(n.route.at(-1),t.pointsToConnect[1])>0.00000001)throw Error("Broken lane endpoints");for(let i=1;i<n.route.length;i++){let r=n.route[i-1],s=n.route[i],a=Math.abs(r.x-s.x),c=Math.abs(r.y-s.y);if(r.route_type!=="wire"||s.route_type!=="wire"||r.layer!==s.layer)throw Error("Forbidden layer transition");if(Math.min(a,c)>0.00000001&&Math.abs(a-c)>0.00000001&&!n.curvedSegments?.includes(i))throw Error("Non-octilinear segment");if(!o.visible(r,s))throw Error("Final copper clearance violation")}}if([...b3(this.input,this.traces),...rVe(this.input,this.traces)].some((t)=>t.toleranceMm!==null&&!t.matched))throw Error("Final bus length skew violation");if(b3(this.input,this.traces).some((t)=>!t.withinLengthLimit||!t.aboveMinimumLength))throw Error("Final absolute bus length violation");if(ahi(this.input,this.traces).some((t)=>!t.matched))throw Error("Final pair spacing or uncoupled length violation");this.phase="solved",this.solved=!0}_step(){try{if(this.phase==="validate")this.initialize();else if(this.phase==="coupled_pairs")this.routePair();else if(this.phase==="route")this.route();else if(this.phase==="match")this.match();else if(this.phase==="validate_output")this.validateOutput()}catch(t){this.fail("constraint_error",String(t))}if(this.progress=this.lane/Math.max(1,this.input.connections.length),!this.reportedRoutes||this.reportedRoutes.length!==this.traces.length||this.reportedRoutes.some((t,n)=>t.trace!==this.traces[n]||t.route!==this.traces[n].route))this.reportedRoutes=this.traces.map((t)=>({trace:t,route:t.route})),this.lengthStats={busLengths:b3(this.input,this.traces),pairLengths:rVe(this.input,this.traces),traceLengthsMm:this.traces.map((t)=>({name:t.connection_name,length:li(t.route)}))};this.stats={...this.lengthStats,phase:this.phase,algorithm:"octilinear_visibility",attempt:this.attempt,lane:this.lane,totalLanes:this.input.connections.length,congestionPass:this.congestionPass,conflictingLanes:this.conflictingLanes,vertices:(this.search instanceof moe?this.search.vertices.length:0)??0,expandedVertices:this.search?.expanded??0,frontier:(this.search instanceof moe?this.search.open.length:0)??0,failureCode:this.failureCode}}visualize(){let t=[],n=[],o=[],i=[];for(let r of Ls(this.input)){if(r.rect){o.push({center:{x:(r.rect.minX+r.rect.maxX)/2,y:(r.rect.minY+r.rect.maxY)/2},width:r.rect.maxX-r.rect.minX,height:r.rect.maxY-r.rect.minY,layer:r.layer,fill:`${Jne(r.layer)}30`,stroke:Jne(r.layer)});continue}if(wn(r.a,r.b)<0.000000001)i.push({center:r.a,radius:r.radius,layer:r.layer,fill:"transparent",stroke:Jne(r.layer)});else t.push({points:[{x:r.a.x,y:r.a.y},{x:r.b.x,y:r.b.y}],strokeWidth:r.radius*2,strokeColor:Jne(r.layer),layer:r.layer,label:`Fixed fanout [${r.layer}]`})}for(let r of this.traces)t.push({points:r.route.map(({x:s,y:a})=>({x:s,y:a})),strokeWidth:r.route[0].width,strokeColor:Jne(r.route[0].layer),layer:r.route[0].layer,label:r.connection_name});for(let r of this.input.connections)for(let[s,a]of r.pointsToConnect.entries())n.push({...a,color:s?"#d97706":"#2563eb",label:`${r.name} ${s?"target":"source"} [${a.layer}]`});if(this.search instanceof moe&&this.phase==="route"){let r=this.orders[this.attempt][this.lane]?.pointsToConnect[0].layer;for(let s of this.search.visibleEdges)t.push({points:s,strokeWidth:0.02,strokeColor:"#67e8f980",layer:r});for(let s of this.search.open.values().slice(0,80))n.push({...this.search.vertices[s.id],color:"#06b6d4",layer:r});t.push({points:this.search.currentPath(),strokeColor:"#f43f5e",strokeWidth:0.09,layer:r})}return{title:`Vector bus lanes · ${this.phase}`,lines:t,points:n,rects:o,circles:i}}};function ghi(e,t,n){let o=[];for(let s of n){let a=0,c=1;for(let[l,d,u]of[["x",s.minX,s.maxX],["y",s.minY,s.maxY]]){let h=t[l]-e[l];if(Math.abs(h)<0.000000000000001){if(e[l]<d||e[l]>u){a=1,c=0;break}}else{let A=(d-e[l])/h,m=(u-e[l])/h;a=Math.max(a,Math.min(A,m)),c=Math.min(c,Math.max(A,m))}}if(a<c)o.push([a,c])}o.sort((s,a)=>s[0]-a[0]);let i=[],r=0;for(let[s,a]of o){if(s>r)i.push([r,s]);r=Math.max(r,a)}if(r<1)i.push([r,1]);return i}function c3(e,t){let n=t.flatMap((o)=>{let i=o.route.flatMap((r,s)=>r.route_type==="via"?[s]:[]);return i.length===2?[{...o,route:o.route.slice(0,i[0]+2)},{...o,route:o.route.slice(i[1]-1).toReversed()}]:[]});return(e.differentialPairs??[]).map((o)=>{let i=o.connectionNames.map((_)=>t.find((f)=>f.connection_name===_||f.source_trace_id===_)),r=Math.max(...i.flatMap((_)=>_?.route.flatMap((f)=>f.route_type==="wire"?[f.width]:[])??[])),s=e.minTraceToPadEdgeClearance??e.defaultObstacleMargin??0.075,a=o.traceGap??s,c=TF({...e,traces:[...e.traces??[],...n]},r+a/2+s),l=[0,1].flatMap((_)=>{let f=c.find((y)=>i.every((x)=>x?.route.length&&b1(_?x.route.at(-1):x.route[0],y.copper)));return f?[f.copper]:[]}),d=(o.traceGap!==void 0||o.maxUncoupledLength!==void 0)&&l.length===2&&i.every((_)=>_?.route.length),u={connectionNames:o.connectionNames,applicable:d};if(!d)return{...u,matched:!0,maxExteriorEdgeGapMm:null,maxSamplingErrorMm:null,separatedExteriorLengthMm:null};let h=(_)=>_.route.slice(1).flatMap((f,y)=>{let x=_.route[y];return x.route_type==="wire"&&f.route_type==="wire"&&x.layer===f.layer?[{a:x,b:f,radius:x.width/2,layer:x.layer,owners:[]}]:[]}),A=-1/0,m=0,p=0,g=(r+a)/Math.cos(Math.PI/8)-r+0.002;for(let _=0;_<2;_++){let f=h(i[1-_]),y=new Map([...new Set(f.map((x)=>x.layer))].map((x)=>[x,new Yie(f.filter((C)=>C.layer===x))]));for(let{a:x,b:C}of h(i[_])){let I=wn(x,C);for(let[b,P]of ghi(x,C,l)){let E=Math.max(1,Math.ceil((P-b)*I/0.002)),B=(P-b)*I/E;m=Math.max(m,B/2);for(let w=0;w<E;w++){let T=b+(P-b)*(w+0.5)/E,Q={x:x.x+(C.x-x.x)*T,y:x.y+(C.y-x.y)*T},N=(y.get(x.layer)?.distanceToPoint(Q,(F)=>S1(Q,F.a,F.b)-F.radius)??1/0)-x.width/2;if(A=Math.max(A,N),N+B/2>g)p+=B}}}}return{...u,matched:p===0,maxExteriorEdgeGapMm:A===-1/0?null:A,maxSamplingErrorMm:m,separatedExteriorLengthMm:p}})}var b$t=(e)=>({...e,route:e.route.toReversed(),coupledSection:e.coupledSection?[e.route.length-1-e.coupledSection[1],e.route.length-1-e.coupledSection[0]]:void 0,curvedSegments:e.curvedSegments?.map((t)=>e.route.length-t)});function*fhi(e,t,n,o){let i=tD(e,t),r=new Set(e.differentialPairs?.flatMap((l)=>l.connectionNames)),s=new Set(n.map((l)=>l.pcb_trace_id)),a=t.filter((l)=>r.has(l.connection_name)&&l.coupledSection&&(i.get(l.connection_name)??0)>li(l.route)+W_(e,l.connection_name)+0.0000001),c=0;for(let l of a)for(let d of[0,1]){let u=d?b$t(l):l,h=u.connection_name,A=u.route[0].layer,m=e.traces?.find((H)=>s.has(H.pcb_trace_id)&&H.connection_name===h&&H.route.filter((z)=>z.route_type==="via").length===1&&wn(H.route.at(-1),u.route[0])<0.0000001);if(!m)continue;let p=m.route[0],g=m.route.find((H)=>H.route_type==="via");if(p.layer!=="top"||g.from_layer!=="top")continue;let _=e.obstacles.find((H)=>H.componentId&&wn(H.center,p)<0.0001);if(!_)continue;let f=e.obstacles.filter((H)=>H.componentId===_.componentId),y=Math.min(...f.map((H)=>wn(H.center,p)).filter((H)=>H>0.0001));if(!Number.isFinite(y))continue;let x=Math.min(2,2.5*y),C=Math.min(...f.map((H)=>H.center.x-H.width/2)),I=Math.max(...f.map((H)=>H.center.x+H.width/2)),b=Math.min(...f.map((H)=>H.center.y-H.height/2)),P=Math.max(...f.map((H)=>H.center.y+H.height/2)),E=[{x:-1,y:0,d:p.x-C},{x:1,y:0,d:I-p.x},{x:0,y:-1,d:p.y-b},{x:0,y:1,d:P-p.y}].sort((H,z)=>H.d-z.d).slice(0,2),B=t.filter((H)=>H!==l),w=e.connections.find((H)=>H.name===h),T={...e,traces:e.traces.filter((H)=>H!==m)},Q=[...Ls(T),...B.flatMap(Yi)],N=u.route[0].width;function*F(H,z,Y,U){let X={...w,pointsToConnect:[{...H,layer:Y},{...z,layer:Y}]},V=new Ar(T,X,N,Q),W=new Fc(V,X.pointsToConnect[0],X.pointsToConnect[1],[],0,void 0,{maxLength:U,paretoLength:!0,checkReachability:!0});try{let j=0;while(!W.solved&&!W.failed&&j++<4000)W.step(),yield;return W.solved?X_(W.result,V).map((q)=>({...q,route_type:"wire",layer:Y,width:N})):null}finally{W.cancel()}}for(let H of E)for(let z of[1,0.875,1.125,1.25,1.5])for(let Y of[1.125,1,0.875,0.75,1.25,1.375,1.5,0.625])for(let U of[-1,1]){if(++c>192)return null;let X={x:p.x+y*(H.x*z-H.y*Y*U),y:p.y+y*(H.y*z+H.x*Y*U)},V={...g,...X,to_layer:A};if(Array.from({length:e.layerCount},(se,le)=>le===0?"top":le===e.layerCount-1?"bottom":`inner${le}`).some((se)=>!new Ar(T,{...w,pointsToConnect:[{...X,layer:se},{...X,layer:se}]},V.via_diameter??0.3,Q).visible(X,X)))continue;let j=yield*F(p,X,"top",x),q=u.coupledSection[0],ne=yield*F(X,u.route[q],A,4*y);if(!j||!ne)continue;j=aD({...T,connections:[{...w,pointsToConnect:[p,{...X,layer:"top"}]}]},[{...m,route:j}],Q)[0].route;let ce={...m,route:[...j,V,{...X,route_type:"wire",layer:A,width:N}]},oe=ne.length-1-q,ie={...u,route:[...ne.slice(0,-1),...u.route.slice(q)],coupledSection:u.coupledSection.map((se)=>se+oe),curvedSegments:u.curvedSegments?.filter((se)=>se>q).map((se)=>se+oe)};if(d)ie=b$t(ie);let J={...e,traces:e.traces.map((se)=>se===m?ce:se),connections:e.connections.map((se)=>se===w?{...se,pointsToConnect:[ie.route[0],ie.route.at(-1)]}:se)},ee=li(ie.route)+W_(J,h);if(Math.abs(ee-i.get(h))>1)continue;for(let se of[0.75,0.375,1.5])try{let le=DCe(J,aD(J,t.map((Ae)=>Ae===l?ie:Ae),void 0,se)),he=usn(J,le,{maxCandidates:65536,packMeanders:!0,packageOnlyPairTuning:!0});if(he.some((Ae)=>!Gie(J,Ae,{preserveExistingApproach:!1})(Ae.route)))continue;let ue=G_.forValidation(J,he,o);try{while(!ue.solved&&!ue.failed)ue.step(),yield;let Ae=c3(J,he);if(ue.solved&&Ae.length===(e.differentialPairs?.length??0)&&Ae.every((_e)=>_e.applicable&&_e.matched))return{input:J,traces:he,escapes:n.map((_e)=>_e.pcb_trace_id===m.pcb_trace_id?ce:_e)}}finally{if(!ue.solved&&!ue.failed)ue.tryFinalAcceptance()}}catch{yield}}}return null}var yhi=gX(Cui(),1),Gy=(e,t,n)=>e.matrix[Math.imul(t,e.width)+n],Hy=(e,t,n,o)=>{e.matrix[Math.imul(t,e.width)+n]=o},pGe=(e)=>(Symbol.iterator in e)&&typeof e[Symbol.iterator]==="function"?e:Object.entries(e),S$t=(e)=>e===!0?!0:e===!1?new Set:e instanceof Set?e:new Set(e),xhi=(e)=>{let{direction:t,objective:n,integers:o,binaries:i}=e,r=t==="minimize"?-1:1,s=pGe(e.constraints),a=pGe(e.variables),c=Array.isArray(a)?a:Array.from(a),l=[],d=[];if(o!=null||i!=null){let x=S$t(i),C=x===!0?!0:S$t(o);for(let I=1;I<=c.length;I++){let[b]=c[I-1];if(x===!0||x.has(b))l.push(I),d.push(I);else if(C===!0||C.has(b))d.push(I)}}let u=new Map;for(let[x,C]of s){let I=u.get(x)??{row:NaN,lower:-1/0,upper:1/0};if(I.lower=Math.max(I.lower,C.equal??C.min??-1/0),I.upper=Math.min(I.upper,C.equal??C.max??1/0),!u.has(x))u.set(x,I)}let h=1;for(let x of u.values())x.row=h,h+=(Number.isFinite(x.lower)?1:0)+(Number.isFinite(x.upper)?1:0);let A=c.length+1,m=h+l.length,p=A+m,g=new Float64Array(A*m),_=new Int32Array(p),f=new Int32Array(p),y={matrix:g,width:A,height:m,positionOfVariable:_,variableAtPosition:f};for(let x=0;x<p;x++)_[x]=x,f[x]=x;for(let x=1;x<A;x++)for(let[C,I]of pGe(c[x-1][1])){if(C===n)Hy(y,0,x,r*I);let b=u.get(C);if(b!=null){if(Number.isFinite(b.upper)){if(Hy(y,b.row,x,I),Number.isFinite(b.lower))Hy(y,b.row+1,x,-I)}else if(Number.isFinite(b.lower))Hy(y,b.row,x,-I)}}for(let x of u.values())if(Number.isFinite(x.upper)){if(Hy(y,x.row,0,x.upper),Number.isFinite(x.lower))Hy(y,x.row+1,0,-x.lower)}else if(Number.isFinite(x.lower))Hy(y,x.row,0,-x.lower);for(let x=0;x<l.length;x++){let C=h+x;Hy(y,C,0,1),Hy(y,C,l[x],1)}return{tableau:y,sign:r,variables:c,integers:d}},msn=(e,t)=>{let n=Math.round(1/t);return Math.round((e+Number.EPSILON)*n)/n},psn=(e,t,n)=>{let o=Gy(e,t,n),i=e.variableAtPosition[e.width+t],r=e.variableAtPosition[n];e.variableAtPosition[e.width+t]=r,e.variableAtPosition[n]=i,e.positionOfVariable[i]=n,e.positionOfVariable[r]=e.width+t;let s=[];for(let a=0;a<e.width;a++){let c=Gy(e,t,a);if(Math.abs(c)>0.0000000000000001)Hy(e,t,a,c/o),s.push(a);else Hy(e,t,a,0)}Hy(e,t,n,1/o);for(let a=0;a<e.height;a++){if(a===t)continue;let c=Gy(e,a,n);if(Math.abs(c)>0.0000000000000001){for(let l=0;l<s.length;l++){let d=s[l];Hy(e,a,d,Gy(e,a,d)-c*Gy(e,t,d))}Hy(e,a,n,-c/o)}}},Asn=(e,t,n,o)=>{e.push([t.variableAtPosition[t.width+n],t.variableAtPosition[o]]);for(let i=6;i<=Math.trunc(e.length/2);i++){let r=!0;for(let s=0;s<i;s++){let a=e.length-1-s,[c,l]=e[a],[d,u]=e[a-i];if(c!==d||l!==u){r=!1;break}}if(r)return!0}return!1},Chi=(e,t)=>{let n=[],{precision:o,maxPivots:i,checkCycles:r}=t;for(let s=0;s<i;s++){let a=0,c=o;for(let u=1;u<e.width;u++){let h=Gy(e,0,u);if(h>c)c=h,a=u}if(a===0)return["optimal",msn(Gy(e,0,0),o)];let l=0,d=1/0;for(let u=1;u<e.height;u++){let h=Gy(e,u,a);if(h<=o)continue;let m=Gy(e,u,0)/h;if(m<d){if(l=u,d=m,m<=o)break}}if(l===0)return["unbounded",a];if(r&&Asn(n,e,l,a))return["cycled",NaN];psn(e,l,a)}return["cycled",NaN]},_sn=(e,t)=>{let n=[],{precision:o,maxPivots:i,checkCycles:r}=t;for(let s=0;s<i;s++){let a=0,c=-o;for(let u=1;u<e.height;u++){let h=Gy(e,u,0);if(h<c)c=h,a=u}if(a===0)return Chi(e,t);let l=0,d=-1/0;for(let u=1;u<e.width;u++){let h=Gy(e,a,u);if(h<-o){let A=-Gy(e,0,u)/h;if(A>d)d=A,l=u}}if(l===0)return["infeasible",NaN];if(r&&Asn(n,e,a,l))return["cycled",NaN];psn(e,a,l)}return["cycled",NaN]},P$t=(e,t)=>({matrix:new Float64Array(e),positionOfVariable:new Int32Array(t),variableAtPosition:new Int32Array(t)}),Ihi=(e,{matrix:t,positionOfVariable:n,variableAtPosition:o},i)=>{let{width:r,height:s}=e;t.set(e.matrix);for(let c=0;c<i.length;c++){let[l,d,u]=i[c],h=(s+c)*r,A=e.positionOfVariable[d];if(A<r)t[h]=l*u,t.fill(0,h+1,h+r),t[h+A]=l;else{let m=(A-r)*r;t[h]=l*(u-t[m]);for(let p=1;p<r;p++)t[h+p]=-l*t[m+p]}}n.set(e.positionOfVariable),o.set(e.variableAtPosition);let a=r+s+i.length;for(let c=r+s;c<a;c++)n[c]=c,o[c]=c;return{matrix:t.subarray(0,e.matrix.length+r*i.length),width:r,height:s+i.length,positionOfVariable:n.subarray(0,a),variableAtPosition:o.subarray(0,a)}},v$t=(e,t)=>{let n=0,o=0,i=0;for(let r=0;r<t.length;r++){let s=t[r],a=e.positionOfVariable[s]-e.width;if(a<0)continue;let c=Gy(e,a,0),l=Math.abs(c-Math.round(c));if(l>n)n=l,o=s,i=c}return[o,i,n]},bhi=(e,t,n)=>{let{tableau:o,sign:i,integers:r}=e,{precision:s,maxIterations:a,tolerance:c,timeout:l}=n,[d,u,h]=v$t(o,r);if(h<=s)return[e,"optimal",t];let A=new yhi.default((T,Q)=>T[0]-Q[0]);A.push([t,[[-1,d,Math.ceil(u)]]]),A.push([t,[[1,d,Math.floor(u)]]]);let m=r.length*2,p=o.matrix.length+m*o.width,g=o.positionOfVariable.length+m,_=P$t(p,g),f=P$t(p,g),y=t*(1-i*c),x=l+Date.now(),C=Date.now()>=x,I=!1,b=1/0,P=o,E=0;while(E<a&&!A.empty()&&b>=y&&!C){let[T,Q]=A.pop();if(T>b)break;let N=Ihi(o,_,Q),[F,H]=_sn(N,n);if(F==="optimal"&&H<b){let[z,Y,U]=v$t(N,r);if(U<=s){I=!0,b=H,P=N;let X=f;f=_,_=X}else{let X=[],V=[];for(let W=0;W<Q.length;W++){let j=Q[W],[q,ne]=j;if(ne===z)if(q<0)V.push(j);else X.push(j);else X.push(j),V.push(j)}V.push([1,z,Math.floor(Y)]),X.push([-1,z,Math.ceil(Y)]),A.push([H,X]),A.push([H,V])}}C=Date.now()>=x,E++}let w=(C||E>=a)&&!A.empty()&&b>=y?"timedout":!I?"infeasible":"optimal";return[{...e,tableau:P},w,I?b:NaN]},E$t=({tableau:e,sign:t,variables:n},o,i,{precision:r,includeZeroVariables:s})=>{if(o==="optimal"||o==="timedout"&&!Number.isNaN(i)){let a=[];for(let c=0;c<n.length;c++){let[l]=n[c],d=e.positionOfVariable[c+1]-e.width,u=d>=0?Gy(e,d,0):0;if(u>r)a.push([l,msn(u,r)]);else if(s)a.push([l,0])}return{status:o,result:-t*i,variables:a}}else if(o==="unbounded"){let a=e.variableAtPosition[i]-1;return{status:"unbounded",result:t*(1/0),variables:0<=a&&a<n.length?[[n[a][0],1/0]]:[]}}else return{status:o,result:NaN,variables:[]}},gsn={precision:0.00000001,checkCycles:!1,maxPivots:8192,tolerance:0,timeout:1/0,maxIterations:32768,includeZeroVariables:!1},Dns={...gsn},Shi=(e,t)=>{let n=xhi(e),o={...gsn,...t},[i,r]=_sn(n.tableau,o);if(n.integers.length===0||i!=="optimal")return E$t(n,i,r,o);else{let[s,a,c]=bhi(n,r,o);return E$t(s,a,c,o)}};function Phi(e,t,n,o,i=!1){let r=0,s=new Set(e.differentialPairs?.flatMap((m)=>m.connectionNames)),a=t.map((m)=>{if(n&&(i||!s.has(m.connection_name))){let f=new Set(m.curvedSegments??[]),y=[];for(let P of[...f].sort((E,B)=>E-B)){if(!y.length||P-y.at(-1).at(-1)>4)y.push([]);y.at(-1).push(P)}let x=y.map((P,E)=>{let B=P[0]-1,w=P.at(-1),T=m.route[B],Q=m.route[w],N=wn(T,Q),F=N>0.000001?{x:-(Q.y-T.y)/N,y:(Q.x-T.x)/N}:{x:0,y:1};return{first:B,last:w,n:F,bi:E}}),C=[];for(let P=0;P<m.route.length;P++)if(P>0&&f.has(P))C.at(-1).push(P);else C.push([P]);let I=new Map,b=new Map;for(let P of C){let E;if(!P.includes(0)&&!P.includes(m.route.length-1)){let B=x.find((Q)=>P[0]>=Q.first&&P.at(-1)<=Q.last),w=B?P.map((Q)=>m.route[Q].x*B.n.x+m.route[Q].y*B.n.y):[],T=B&&P.length>2?`${B.bi}:${Math.round(Math.min(...w)*1e6)}:${Math.round(Math.max(...w)*1e6)}`:`vertex${P[0]}`;if(E=b.get(T),E===void 0)E=r++,b.set(T,E)}for(let B of P)I.set(B,E)}return m.route.map((P,E)=>({...P,group:I.get(E)}))}let p=Math.min(...m.curvedSegments??[])-1,g=Math.max(...m.curvedSegments??[]),_=r++;return m.route.map((f,y)=>({...f,group:y===0||y===m.route.length-1||y>=p&&y<=g&&(p===0||g===m.route.length-1)?void 0:y>=p&&y<=g?_:r++}))}),c=new Set,l=Ls(e).filter((m)=>!m.rect&&wn(m.a,m.b)<0.00000001);for(let m=0;o&&m<t.length;m++)for(let p of l){if(!p.owners.includes(t[m].connection_name))continue;let g=a[m],_=p.radius+t[m].route[0].width/2+(e.minTraceToPadEdgeClearance??e.defaultObstacleMargin??0.075);for(let f=1;f<g.length;f++)if(xB([g[f-1],g[f]],[p.a,p.b])<=_+0.00000001){for(let y of[g[f-1],g[f]])if(y.group!==void 0)c.add(y.group)}}let d=Array.from({length:r},(m,p)=>p),u=(m)=>d[m]===m?m:d[m]=u(d[m]),h=new Set(c);for(let m of e.differentialPairs??[]){let p=t.findIndex((f)=>f.connection_name===m.connectionNames[0]),g=t.findIndex((f)=>f.connection_name===m.connectionNames[1]);if(p<0||g<0)continue;let _=(e.minTraceWidth+(m.traceGap??0.1))*1.6;for(let f of a[p])for(let y of a[g]){if(wn(f,y)>_)continue;if(f.group===void 0&&y.group!==void 0)h.add(y.group);else if(y.group===void 0&&f.group!==void 0)h.add(f.group);else if(f.group!==void 0&&y.group!==void 0)d[u(f.group)]=u(y.group)}}let A=new Set([...h].map(u));for(let m of a)for(let p of m)if(p.group!==void 0)p.group=A.has(u(p.group))?void 0:u(p.group);return a}function M$t(e,t,n=!0){let o=new Map;for(let s of e)for(let a of s)if(a.group!==void 0)o.set(a.group,{x:(t.get(`${a.group}_x_1`)??0)-(t.get(`${a.group}_x_-1`)??0),y:(t.get(`${a.group}_y_1`)??0)-(t.get(`${a.group}_y_-1`)??0)});let i=new Map;for(let s of o.values()){let a={x:!n||Math.abs(s.x)>=0.0000001?1:0,y:!n||Math.abs(s.y)>=0.0000001?1:0};if(!a.x)s.x=0;if(!a.y)s.y=0;i.set(s,a)}let r=e.flatMap((s)=>s.slice(1).flatMap((a,c)=>{let l=s[c],d=wn(l,a);if(l.group===a.group)return[];return(d<0.00000001?[{x:1,y:0},{x:0,y:1}]:[{x:-(a.y-l.y)/d,y:(a.x-l.x)/d}]).map((h)=>({a:o.get(l.group),b:o.get(a.group),n:h}))}));for(let s=0;s<20000;s++){let a=0;for(let{a:c,b:l,n:d}of r){let u=((l?.x??0)-(c?.x??0))*d.x+((l?.y??0)-(c?.y??0))*d.y;a=Math.max(a,Math.abs(u));let h=c?i.get(c):{x:0,y:0},A=l?i.get(l):{x:0,y:0},m=(h.x+A.x)*d.x*d.x+(h.y+A.y)*d.y*d.y;if(m<0.0000000000000001)continue;let p=u/m;if(c)c.x+=p*d.x*h.x,c.y+=p*d.y*h.y;if(l)l.x-=p*d.x*A.x,l.y-=p*d.y*A.y}if(a<0.00000000000001)break}return o}var vhi=class{constructor(e){this.motion=e}motion;pairs=new Map;add(e){let{a:t,b:n,n:o,min:i}=e;if(t.group===n.group)return;let r=t.group??-1,s=n.group??-1,a=o;if(r>s)[r,s]=[s,r],a={x:-o.x,y:-o.y};let c=`${r}:${s}`,l=r===-1?this.motion:this.motion*2,d=this.pairs.get(c)??{polygon:[{x:-l,y:-l},{x:l,y:-l},{x:l,y:l},{x:-l,y:l}],cuts:[]},u=[],h=d.polygon;for(let p=0;p<h.length;p++){let g=h[(p+h.length-1)%h.length],_=h[p],f=g.x*a.x+g.y*a.y-i,y=_.x*a.x+_.y*a.y-i;if(f<0!==y<0){let x=f/(f-y);u.push({x:g.x+(_.x-g.x)*x,y:g.y+(_.y-g.y)*x,cut:f>=0?_.cut:e})}if(y>=0)u.push(_)}let A=[],m=(p,g)=>Math.abs(p.x-g.x)<0.000000000001&&Math.abs(p.y-g.y)<0.000000000001;for(let p of u)if(!A.length||!m(A.at(-1),p))A.push(p);if(A.length>1&&m(A[0],A.at(-1)))A[0]={...A[0],cut:A.at(-1).cut},A.pop();d.polygon=A,d.cuts.push(e),this.pairs.set(c,d)}*active(){for(let{polygon:e,cuts:t}of this.pairs.values()){let n=e.reduce((o,i,r)=>{let s=e[(r+1)%e.length];return o+i.x*s.y-i.y*s.x},0);if(Math.abs(n)<0.000000000001)yield*t;else yield*new Set(e.map((o)=>o.cut).filter((o)=>!!o))}}};function*fsn(e,t,n="conservative"){let o={},i={};if(!t.length)return t;let r=0,s=0,a=(Q,N)=>{let F=`c${r++}`;if(![...Q.values()].some((H)=>Math.abs(H)>0.0000000001))return;i[F]=N;for(let[H,z]of Q)if(Math.abs(z)>0.0000000001)(o[H]??={})[F]=z},c=(Q,N,F,H=1)=>{if(N.group===void 0)return;for(let z of["x","y"])for(let Y of[-1,1]){let U=`${N.group}_${z}_${Y}`,X=H*F[z]*Y;Q.set(U,(Q.get(U)??0)+X)}},l=n==="cohort"||n==="guarded-cohort",d=n==="guarded"||n==="guarded-cohort",u=n!=="conservative",h=n==="flexible"||n==="guarded"||l,A=h&&!l?4:2,m=u&&!l?12:24,p=d?96000000:64000000,g=new Set(e.differentialPairs?.flatMap((Q)=>Q.connectionNames)),_=u?Phi(e,t,h,d,l):t.map((Q)=>{let N=Math.min(...Q.curvedSegments??[])-1,F=Math.max(...Q.curvedSegments??[]),H=s++;return Q.route.map((z,Y)=>({...z,group:Y===0||Y===Q.route.length-1||g.has(Q.connection_name)||Y>=N&&Y<=F&&(N===0||F===Q.route.length-1)?void 0:Y>=N&&Y<=F?H:s++}))});for(let Q of _)for(let N of Q)if(N.group!==void 0)for(let F of["x","y"])for(let H of[-1,1]){let z=`${N.group}_${F}_${H}`;if(o[z])continue;o[z]={objective:u?0.000001:0.0001},a(new Map([[z,1]]),{max:A})}let f=new Map;for(let[Q,N]of _.entries()){let F=new Map;for(let H=1;H<N.length;H++){let z=N[H-1],Y=N[H],U=wn(z,Y);if(z.group===Y.group)continue;if(U<0.00000001){for(let q of[{x:1,y:0},{x:0,y:1}]){let ne=new Map;c(ne,Y,q),c(ne,z,q,-1),a(ne,{equal:0})}continue}let X={x:(Y.x-z.x)/U,y:(Y.y-z.y)/U},V={x:-X.y,y:X.x},W=new Map;c(W,Y,V),c(W,z,V,-1),a(W,{equal:0});let j=new Map;c(j,Y,X),c(j,z,X,-1),a(j,{min:Math.min(U,0.01)-U}),c(F,Y,X),c(F,z,X,-1)}if(!u)a(F,e.buses?.some((H)=>H.maxLengthSkew!==void 0&&H.connectionNames.includes(t[Q].connection_name))?{equal:0}:{max:0});else{let H=t[Q].connection_name,z=li(t[Q].route)+W_(e,H);f.set(H,{terms:F,total:z}),a(F,{max:0});for(let Y of e.buses??[])if(Y.connectionNames.includes(H)&&Y.minLength!==void 0)a(F,{min:Y.minLength-z})}}if(u)for(let[Q,{names:N,tolerance:F}]of hWe(e).entries()){let H=N.map((X)=>f.get(X)).filter((X)=>!!X);if(!H.length)continue;let z=Math.max(...H.map((X)=>X.total)),Y=`bus_shrink_${Q}`,U=l?Math.max(0,F-0.00001):Math.max(F+0.00000001,z-Math.min(...H.map((X)=>X.total))+0.000000001);o[Y]={objective:0},a(new Map([[Y,1]]),{max:z});for(let X of H){let V=new Map(X.terms);V.set(Y,1),a(V,{max:z-X.total,min:z-U-X.total})}}for(let Q of["x","y"]){let N=Math.min(..._.flat().map((H)=>H[Q])),F=Math.max(..._.flat().map((H)=>H[Q]));for(let H of[-1,1]){let z=`bound_${Q}_${H}`,Y=u?1/Math.max(F-N,1):1,U=z+"_out";if(o[z]={objective:-Y},u)o[U]={objective:Y},a(new Map([[U,1]]),{max:A});a(new Map([[z,1]]),{max:F-N});let X=new Map;for(let V of _.flat()){let W=String(V.group),j=H===1?F-V[Q]:V[Q]-N;X.set(W,Math.min(X.get(W)??1/0,j))}for(let[V,W]of X){let j=new Map([[z,1]]);if(u)j.set(U,-1);c(j,{x:0,y:0,group:V==="undefined"?void 0:Number(V)},Q==="x"?{x:H,y:0}:{x:0,y:H}),a(j,{max:W})}}}let y=Ls(e),x=e.minTraceToPadEdgeClearance??e.defaultObstacleMargin??0.075,C=_.flatMap((Q,N)=>Q.slice(1).map((F,H)=>({a:Q[H],b:F,radius:t[N].route[H].width/2,layer:t[N].route[H].layer,owners:[t[N].connection_name,t[N].source_trace_id??""]}))),I=(Q,N,F)=>{let H=F.x-N.x,z=F.y-N.y,Y=Math.max(0,Math.min(1,((Q.x-N.x)*H+(Q.y-N.y)*z)/(H*H+z*z||1)));return{x:N.x+Y*H,y:N.y+Y*z}},b=new vhi(A),P=[],E=()=>{for(let Q of P){delete i[Q];for(let N of Object.values(o))delete N[Q]}P.length=0;for(let Q of b.active()){let N=new Map;c(N,Q.a,Q.n),c(N,Q.b,Q.n,-1);let F=`c${r}`;if(a(N,{min:Q.min}),i[F])P.push(F)}},B=new Set,w=Object.keys(o).length,T=t;for(let Q=0;Q<m;Q++){if(u)E();if((Object.values(i).reduce((oe,ie)=>oe+(ie.equal!==void 0||ie.min!==void 0&&ie.max!==void 0?2:1),0)+1)*(w+1)>p)return T;yield;let F=Shi({direction:"minimize",objective:"objective",variables:o,constraints:i},{precision:l?0.0000001:0.0000000001,maxPivots:4096,checkCycles:u});if(F.status!=="optimal")return T;let H=new Map(F.variables),z=l?M$t(_,H,!1):void 0;if(z&&[...z.values()].some((oe)=>!Number.isFinite(oe.x)||!Number.isFinite(oe.y)||Math.abs(oe.x)>A+0.000001||Math.abs(oe.y)>A+0.000001))return T;let Y=(oe)=>({...oe,x:oe.x+(oe.group===void 0?0:z?z.get(oe.group).x:(H.get(`${oe.group}_x_1`)??0)-(H.get(`${oe.group}_x_-1`)??0)),y:oe.y+(oe.group===void 0?0:z?z.get(oe.group).y:(H.get(`${oe.group}_y_1`)??0)-(H.get(`${oe.group}_y_-1`)??0))}),U=l?M$t(_,H):void 0,X=(oe)=>U&&oe.group!==void 0?{x:oe.x+U.get(oe.group).x,y:oe.y+U.get(oe.group).y}:Y(oe);if(u)T=t.map((oe,ie)=>({...oe,route:oe.route.map((J,ee)=>({...J,x:X(_[ie][ee]).x,y:X(_[ie][ee]).y}))}));let V=C.map((oe)=>({...oe,a:Y(oe.a),b:Y(oe.b)})),W=new Yie([...y,...V]),j=new Map(V.map((oe,ie)=>[oe,C[ie]])),q=new Map([...y,...V].map((oe,ie)=>[oe,ie])),ne=0,ce=new Map;for(let oe=0;oe<V.length;oe++){let ie=V[oe],J=C[oe],ee=[],se=ie.radius+x;W.some({minX:Math.min(ie.a.x,ie.b.x)-se,maxX:Math.max(ie.a.x,ie.b.x)+se,minY:Math.min(ie.a.y,ie.b.y)-se,maxY:Math.max(ie.a.y,ie.b.y)+se},(le)=>(ee.push(le),!1));for(let le of ee){if(ie.layer!==le.layer)continue;let he=j.get(le),ue=le.owners.some((ve)=>ve&&ie.owners.includes(ve));if(ue&&!he)continue;let Ae=he??le;if(ue&&(J.a===Ae.a||J.a===Ae.b||J.b===Ae.a||J.b===Ae.b||J.a.group===J.b.group&&J.a.group===Ae.a.group&&J.a.group===Ae.b.group))continue;let _e=ue?Math.min(ie.radius+x+Ae.radius,xB([J.a,J.b],[Ae.a,Ae.b])):ie.radius+x+(Ae.rect?0:Ae.radius);if(Vie(ie.a,ie.b,le)>=_e-(Ae.rect?0:Ae.radius)-0.000000001)continue;let Pe=`${oe}:${q.get(le)}`,Ee=`${J.a.group}:${J.b.group}:${Ae.a.group}:${Ae.b.group}:${j.has(le)?"moving":"f"+q.get(le)}`;if(B.has(Pe)||!u&&(ce.get(Ee)??0)>=4)continue;ce.set(Ee,(ce.get(Ee)??0)+1),B.add(Pe);let Te=Ae.rect?[{x:Ae.rect.minX,y:Ae.rect.minY},{x:Ae.rect.maxX,y:Ae.rect.minY},{x:Ae.rect.maxX,y:Ae.rect.maxY},{x:Ae.rect.minX,y:Ae.rect.maxY}]:[Ae.a,Ae.b],be=[{x:1,y:0},{x:0,y:1}];for(let ve of[J.a,J.b])for(let De=0;De<Te.length;De++){let Ze=I(ve,Te[De],Te[(De+1)%Te.length]);be.push({x:ve.x-Ze.x,y:ve.y-Ze.y})}for(let ve of Te){let De=I(ve,J.a,J.b);be.push({x:De.x-ve.x,y:De.y-ve.y})}let me,ye=-1/0;for(let ve of be){let De=Math.hypot(ve.x,ve.y);if(De<0.0000000001)continue;for(let Ze of[-1,1]){let st={x:ve.x/De*Ze,y:ve.y/De*Ze},et=Math.min(...[J.a,J.b].map((lt)=>lt.x*st.x+lt.y*st.y))-Math.max(...Te.map((lt)=>lt.x*st.x+lt.y*st.y));if(et>ye)ye=et,me=st}}if(!me||ye<0)return t;let Ce=Math.min(ye,_e+0.000001);for(let ve of[J.a,J.b])for(let De of Te){if(u){b.add({a:ve,b:De,n:me,min:Ce-((ve.x-De.x)*me.x+(ve.y-De.y)*me.y)});continue}let Ze=new Map;c(Ze,ve,me),c(Ze,De,me,-1),a(Ze,{min:Ce-((ve.x-De.x)*me.x+(ve.y-De.y)*me.y)})}ne++}}if(!ne||Q===m-1)return t.map((oe,ie)=>({...oe,route:oe.route.map((J,ee)=>({...J,x:X(_[ie][ee]).x,y:X(_[ie][ee]).y}))}))}return t}function B$t(e,t){let n=t.map((s)=>{let a={start:0,end:0,length:0},c=0,l=0;for(let d=1;d<s.route.length;d++){let u=s.route[d-1],h=s.route[d];if(u.route_type!=="wire"||h.route_type!=="wire"||u.layer!==h.layer){c=d,l=0;continue}if(l+=wn(u,h),l>a.length)a={start:c,end:d,length:l}}return a});if(n.some((s)=>s.end<=s.start))return null;let o=t.map((s,a)=>{let{start:c,end:l}=n[a];return{...s,route:s.route.slice(c,l+1),curvedSegments:s.curvedSegments?.filter((d)=>d>c&&d<=l).map((d)=>d-c),coupledSection:s.coupledSection?.map((d)=>d-c)}}),i=new Map(o.map((s)=>[s.connection_name,s]));if(e.connections.some((s)=>!i.has(s.name)))return null;return{input:{...e,connections:e.connections.map((s)=>{let a=i.get(s.name);return{...s,pointsToConnect:[a.route[0],a.route.at(-1)]}}),traces:[...e.traces??[],...t.flatMap((s,a)=>{let{start:c,end:l}=n[a];return[...c?[{...s,route:s.route.slice(0,c+1)}]:[],...l<s.route.length-1?[{...s,route:s.route.slice(l)}]:[]]})]},carriers:o,join:(s)=>t.map((a,c)=>({...a,route:[...a.route.slice(0,n[c].start),...s[c].route,...a.route.slice(n[c].end+1)]}))}}function Wg(e){let t=1/0,n=-1/0,o=1/0,i=-1/0;for(let r of e)for(let s of r.route){let a=s.route_type==="wire"?s.width/2:(s.via_diameter??0.3)/2;t=Math.min(t,s.x-a),n=Math.max(n,s.x+a),o=Math.min(o,s.y-a),i=Math.max(i,s.y+a)}return{minX:t,maxX:n,minY:o,maxY:i,areaMm2:e.length?(n-t)*(i-o):0}}function Ehi(e,t){let n=new Set([...e.buses?.flatMap((i)=>i.connectionNames)??[],...e.differentialPairs?.flatMap((i)=>i.connectionNames)??[]]),o=Wg(t);return t.some((i)=>{if(!n.has(i.connection_name))return!1;let r=Wg([i]);return["minX","minY","maxX","maxY"].some((s)=>Math.abs(r[s]-o[s])<0.00000001)})}function*Mhi(e,t,n){let o=e.connections.map((s)=>new Set([s.name]));for(let s of[...e.buses??[],...e.differentialPairs??[]]){let a=o.filter((l)=>s.connectionNames.some((d)=>l.has(d))),c=new Set(a.flatMap((l)=>[...l]));for(let l of a)o.splice(o.indexOf(l),1);if(c.size)o.push(c)}o.sort((s,a)=>s.size-a.size);let i=t,r=e.minTraceToPadEdgeClearance??e.defaultObstacleMargin??0.075;for(let s=0;s<4;s++){let a=Wg(i).areaMm2,c=!1;for(let l of o){let d=i.filter((m)=>l.has(m.connection_name)),u={...e,connections:e.connections.filter((m)=>l.has(m.name)),buses:e.buses?.filter((m)=>l.has(m.connectionNames[0])),differentialPairs:e.differentialPairs?.filter((m)=>l.has(m.connectionNames[0])),traces:[...e.traces??[],...i.filter((m)=>!l.has(m.connection_name))]},h=d.map((m)=>Gie(u,m)),A=!1;for(let m of["cohort","guarded-cohort"]){let p=yield*fsn(u,d,m);if(p===d)break;let g=!1;for(let _ of[1,0.999,0.99,0.95,0.9,0.75,0.5,0.25,0.1]){let f=p.map((C,I)=>({...C,route:C.route.map((b,P)=>({...b,x:d[I].route[P].x+(b.x-d[I].route[P].x)*_,y:d[I].route[P].y+(b.y-d[I].route[P].y)*_}))})),y=Wg(f).areaMm2;if(!Number.isFinite(y)||y>=Wg(d).areaMm2-0.000001)continue;if(f.some((C,I)=>!h[I](C.route))){g=!0;continue}if(f.some((C)=>!bc(C.route,C.route[0].width+r)))continue;let x=G_.forValidation({...u,minTraceToPadEdgeClearance:r+0.0000000095},f,n);try{while(!x.solved&&!x.failed)x.step(),yield;if(!x.solved)continue;let C=new Map(f.map((b)=>[b.connection_name,b])),I=i.map((b)=>C.get(b.connection_name)??b);if(c3(e,I).some((b)=>!b.matched))continue;i=I,A=c=!0,yield i;break}finally{if(!x.solved&&!x.failed)x.tryFinalAcceptance()}}if(A||!g)break}}if(!c||a-Wg(i).areaMm2<a*0.001)break}}var w$t=(e,t)=>e.x*t.y-e.y*t.x,iB=(e,t)=>({x:t.x-e.x,y:t.y-e.y}),AGe=(e,t)=>e.x*t.x+e.y*t.y;function T$t(e,t,n,o){let i=w$t(t,o);if(Math.abs(i)<0.00000001)return null;let r=w$t(iB(e,n),o)/i;return{x:e.x+r*t.x,y:e.y+r*t.y}}function Bhi(e,t){if(!t.length)return t;let n=new Set([...e.buses?.flatMap((u)=>u.connectionNames)??[],...e.differentialPairs?.flatMap((u)=>u.connectionNames)??[]]),o=structuredClone(t),i=o.filter((u)=>!n.has(u.connection_name)&&!u.coupledSection&&!u.curvedSegments?.length&&u.route.every((h)=>h.route_type==="wire"&&h.layer===u.route[0].layer));if(!i.length)return t;let r=o.flatMap((u)=>[u.route[0],u.route.at(-1)]),s=o.reduce((u,h)=>({x:u.x+Math.abs(h.route[0].x-h.route.at(-1).x),y:u.y+Math.abs(h.route[0].y-h.route.at(-1).y)}),{x:0,y:0}),a=s.x>s.y?"y":"x",c=r.reduce((u,h)=>u+h[a],0)/r.length,l=(u)=>u.slice(1).reduce((h,A,m)=>h+wn(u[m],A)*(Math.abs(u[m][a]-c)+Math.abs(A[a]-c))/2,0),d=Ls(e);for(let u=0;u<8;u++){let h=!1;i.sort((A,m)=>l(A.route)-l(m.route));for(let A of i){let m=e.connections.find((x)=>x.name===A.connection_name);if(!m)continue;let p=A.route[0].width,g=new Ar(e,m,p,[...d,...o.flatMap(Yi)]),_=A.route,f=l(_),y=li(_);for(let x=1;x<_.length-2;x++){let C=_[x-1],I=_[x],b=_[x+1],P=_[x+2],E=iB(I,b),B=wn(I,b);if(B<p*2)continue;let w={x:-E.y/B,y:E.x/B},T=_;for(let Q of[20,10,5,2.5,1,0.5,-20,-10,-5,-2.5,-1,-0.5]){let N={x:I.x+Q*p*w.x,y:I.y+Q*p*w.y},F=T$t(C,iB(C,I),N,E),H=T$t(P,iB(P,b),N,E);if(!F||!H||AGe(iB(C,F),iB(C,I))<=0.00000001||AGe(iB(P,H),iB(P,b))<=0.00000001||AGe(iB(F,H),E)<=0.00000001)continue;if(["x","y"].some((X)=>{let V=Math.min(..._.map((j)=>j[X])),W=Math.max(..._.map((j)=>j[X]));return[F,H].some((j)=>j[X]<V-0.00000001||j[X]>W+0.00000001)}))continue;let z=[..._.slice(0,x),{...I,...F},{...b,...H},..._.slice(x+2)],Y=l(z),U=li(z);if(Y>=f-0.000001||U>y+0.00000001||!g.pathVisible([C,F,H,P])||!bc(z,p/2+g.margin))continue;T=z,f=Y,y=U}if(T!==_)_=T,h=!0}A.route=_}if(!h)break}return o}var KT=0.000000001;function AWe(e){return e.shape==="circle"}function Bxe(e,t){let n=-(t.ccwRotationDegrees??0)*Math.PI/180,o=e.x-t.center.x,i=e.y-t.center.y;return{x:o*Math.cos(n)-i*Math.sin(n),y:o*Math.sin(n)+i*Math.cos(n)}}function $I(e,t){return Math.hypot(e.x-t.x,e.y-t.y)}function DS(e,t,n){let o=n.x-t.x,i=n.y-t.y,r=o*o+i*i,s=r<KT?0:((e.x-t.x)*o+(e.y-t.y)*i)/r,a=Math.max(0,Math.min(1,s));return Math.hypot(e.x-(t.x+a*o),e.y-(t.y+a*i))}function Jye(e,t,n){return(t.x-e.x)*(n.y-e.y)-(t.y-e.y)*(n.x-e.x)}function whi(e,t,n,o){let i=Jye(n,o,e),r=Jye(n,o,t),s=Jye(e,t,n),a=Jye(e,t,o);return(i>0&&r<0||i<0&&r>0)&&(s>0&&a<0||s<0&&a>0)}function ysn(e,t,n,o){if(whi(e,t,n,o))return 0;return Math.min(DS(e,n,o),DS(t,n,o),DS(n,e,t),DS(o,e,t))}function Thi(e,t,n=KT){if(AWe(t))return $I(e,t.center)<=t.width/2+n;let o=Bxe(e,t);return Math.abs(o.x)<=t.width/2+n&&Math.abs(o.y)<=t.height/2+n}function xsn(e,t){if(AWe(t))return Math.max(0,$I(e,t.center)-t.width/2);let n=Bxe(e,t),o=Math.max(Math.abs(n.x)-t.width/2,0),i=Math.max(Math.abs(n.y)-t.height/2,0);return Math.hypot(o,i)}function Dhi(e,t){if(AWe(t))return Math.max(0,DS(t.center,e.start,e.end)-t.width/2);let n=Bxe(e.start,t),o=Bxe(e.end,t);if(Math.abs(n.x)<=t.width/2+KT&&Math.abs(n.y)<=t.height/2+KT)return 0;if(Math.abs(o.x)<=t.width/2+KT&&Math.abs(o.y)<=t.height/2+KT)return 0;let i=-t.width/2,r=t.width/2,s=-t.height/2,a=t.height/2,c=[{x:i,y:s},{x:r,y:s},{x:r,y:a},{x:i,y:a}],l=Number.POSITIVE_INFINITY;for(let d=0;d<c.length;d++)l=Math.min(l,ysn(n,o,c[d],c[(d+1)%c.length]));return l}function _We(e,t,n){if(e.layer!==t.layer)return!0;let o=(e.width+t.width)/2+n,i=o+KT;if(Math.min(e.start.x,e.end.x)-Math.max(t.start.x,t.end.x)>i||Math.min(t.start.x,t.end.x)-Math.max(e.start.x,e.end.x)>i||Math.min(e.start.y,e.end.y)-Math.max(t.start.y,t.end.y)>i||Math.min(t.start.y,t.end.y)-Math.max(e.start.y,e.end.y)>i)return!0;return ysn(e.start,e.end,t.start,t.end)>=o-KT}function Uie(e){if(!Number.isInteger(e)||e<1)throw Error(`FanoutSolver: layerCount must be a positive integer, received ${e}`);if(e===1)return["top"];if(e===2)return["top","bottom"];return["top",...Array.from({length:e-2},(t,n)=>`inner${n+1}`),"bottom"]}function Nhi(e,t,n){let o=n.indexOf(e),i=n.indexOf(t);if(o<0||i<0)throw Error(`FanoutSolver: cannot build via span from "${e}" to "${t}"`);let r=Math.min(o,i),s=Math.max(o,i);return n.slice(r,s+1)}function Rhi(e){let{fromLayer:t,toLayer:n,layerNames:o,allowBlindAndBuriedVias:i}=e,r=Nhi(t,n,o);return i?r:[...o]}var Qhi={topside_left:{direction:"left",preferredExit:"top-left",exitEdge:"top"},topside_center:{direction:"up",preferredExit:"top",exitEdge:"top"},topside_right:{direction:"right",preferredExit:"top-right",exitEdge:"top"},rightside_top:{direction:"up",preferredExit:"top-right",exitEdge:"right"},rightside_center:{direction:"right",preferredExit:"right",exitEdge:"right"},rightside_bottom:{direction:"down",preferredExit:"bottom-right",exitEdge:"right"},bottomside_right:{direction:"right",preferredExit:"bottom-right",exitEdge:"bottom"},bottomside_center:{direction:"down",preferredExit:"bottom",exitEdge:"bottom"},bottomside_left:{direction:"left",preferredExit:"bottom-left",exitEdge:"bottom"},leftside_bottom:{direction:"down",preferredExit:"bottom-left",exitEdge:"left"},leftside_center:{direction:"left",preferredExit:"left",exitEdge:"left"},leftside_top:{direction:"up",preferredExit:"top-left",exitEdge:"left"},center:{}};function khi(e){let t=Qhi[e];if(!t)throw Error(`Invalid fanout exit position "${e}"`);return t}function Csn(e,t){return e===t||e.includes(t)}function wxe(e,t){if(!e||!t?.includes("-"))return;if(!Csn(t,e))return;if(e==="left"||e==="right")return t.startsWith("top-")?"maximum":"minimum";return t.endsWith("-right")?"maximum":"minimum"}var $u=0.000000001,Lhi=1e5;function Isn(e){for(let[n,o]of[["viaDiameter",e.viaDiameter],["traceWidth",e.traceWidth]])if(!Number.isFinite(o)||o<=0)throw Error(`FanoutSolver: dogbone ${n} must be a positive finite number, received ${o}`);if(!Number.isFinite(e.clearance)||e.clearance<0)throw Error(`FanoutSolver: dogbone clearance must be a non-negative finite number, received ${e.clearance}`);if(e.viaHoleDiameter!==void 0&&(!Number.isFinite(e.viaHoleDiameter)||e.viaHoleDiameter<=0))throw Error(`FanoutSolver: dogbone viaHoleDiameter must be a positive finite number, received ${e.viaHoleDiameter}`);if(e.holeToHoleClearance!==void 0&&(!Number.isFinite(e.holeToHoleClearance)||e.holeToHoleClearance<0))throw Error(`FanoutSolver: dogbone holeToHoleClearance must be a non-negative finite number, received ${e.holeToHoleClearance}`);if(e.holeToHoleClearance!==void 0&&e.viaHoleDiameter===void 0)throw Error("FanoutSolver: dogbone holeToHoleClearance requires viaHoleDiameter");let t=e.maximumSearchStates??Lhi;if(!Number.isInteger(t)||t<1)throw Error(`FanoutSolver: dogbone maximumSearchStates must be a positive integer, received ${t}`);return t}function uVe(e){let t=[];for(let n of e.toSorted((o,i)=>o-i)){if(!Number.isFinite(n))continue;if(t.length===0||Math.abs(t.at(-1)-n)>$u)t.push(n)}return t}function bsn(e){let t=new Map,n=new Map,o=new Map;for(let i of e){let r=t.get(i.componentId);if(!r)r={componentId:i.componentId,connections:[],obstacles:[],xCoordinates:[],yCoordinates:[],pitchX:Number.POSITIVE_INFINITY,pitchY:Number.POSITIVE_INFINITY},t.set(i.componentId,r),o.set(i.componentId,new Set);if(r.xCoordinates.push(...i.xCoordinates),r.yCoordinates.push(...i.yCoordinates),Number.isFinite(i.pitchX)&&i.pitchX>$u)r.pitchX=Math.min(r.pitchX,i.pitchX);if(Number.isFinite(i.pitchY)&&i.pitchY>$u)r.pitchY=Math.min(r.pitchY,i.pitchY);let s=o.get(i.componentId);for(let a of i.componentObstacles)if(!s.has(a))s.add(a),r.obstacles.push(a);for(let a of i.connections){let c=n.get(a.connectionIndex);if(c!==void 0){if(c!==i.componentId)throw Error(`FanoutSolver: connection index ${a.connectionIndex} belongs to multiple components`);continue}n.set(a.connectionIndex,i.componentId),r.connections.push({preparedConnection:a,busId:i.busId,direction:i.direction,terminationType:i.termination.type})}}return[...t.values()].map((i)=>({...i,connections:i.connections.toSorted((r,s)=>r.preparedConnection.connectionIndex-s.preparedConnection.connectionIndex),xCoordinates:uVe(i.xCoordinates),yCoordinates:uVe(i.yCoordinates)})).toSorted((i,r)=>i.componentId.localeCompare(r.componentId))}function Fhi(e){let{coordinates:t,pitch:n}=e;if(t.length===0||!Number.isFinite(n)||n<=$u)return[];let o=[t[0]-n/2];for(let i=1;i<t.length;i++)o.push((t[i-1]+t[i])/2);return o.push(t.at(-1)+n/2),uVe(o)}function D$t(e){let{sourceCoordinate:t,coordinates:n,pitch:o}=e,i=Fhi({coordinates:n,pitch:o}),r=i.filter((a)=>a<t-$u).at(-1),s=i.find((a)=>a>t+$u);return[r,s].filter((a)=>a!==void 0)}function Hhi(e,t){let n=Math.abs(t.x-e.x),o=Math.abs(t.y-e.y);return n<=$u||o<=$u||Math.abs(n-o)<=$u}function Ohi(e){let{source:t,site:n,direction:o}=e,i=o==="right"?n.x-t.x:o==="left"?t.x-n.x:o==="up"?n.y-t.y:t.y-n.y;return i>$u?0:Math.abs(i)<=$u?1:2}function zhi(e){let{point:t,obstacles:n,viaDiameter:o,clearance:i}=e,r=o/2+i;return n.every((s)=>xsn(t,s)>=r-$u)}function Ghi(e){let{segment:t,sourceObstacle:n,obstacles:o,clearance:i}=e,r=t.width/2+i;return o.every((s)=>s===n||Dhi(t,s)>=r-$u)}function Ssn(e){let{connection:t,component:n,rules:o}=e,{preparedConnection:i,direction:r}=t,s=o.additionalObstacles?[...new Set([...n.obstacles,...o.additionalObstacles])]:n.obstacles,a={x:i.sourcePoint.x,y:i.sourcePoint.y},c=D$t({sourceCoordinate:a.x,coordinates:n.xCoordinates,pitch:n.pitchX}),l=D$t({sourceCoordinate:a.y,coordinates:n.yCoordinates,pitch:n.pitchY}),d=[...c.map((b)=>({x:b,y:a.y})),...l.map((b)=>({x:a.x,y:b})),...c.flatMap((b)=>l.map((P)=>({x:b,y:P})))],u=[];for(let b of d)if(!u.some((P)=>$I(P,b)<=$u))u.push(b);let h=o.fixedViaPointsByConnectionIndex?.get(i.connectionIndex),A=h?[h]:u,m=[];for(let b of A){if(t.terminationType==="plane"&&!Hhi(a,b))continue;if(!zhi({point:b,obstacles:s,viaDiameter:o.viaDiameter,clearance:o.clearance}))continue;let P={start:a,end:b,width:o.traceWidth,layer:i.sourceLayer};if(!Ghi({segment:P,sourceObstacle:i.sourceObstacle,obstacles:s,clearance:o.clearance}))continue;if(!(o.blockingSegments??[]).every((w)=>{if(w.connectionIndex===i.connectionIndex)return!0;if(o.canShareCopper?.(i.connectionIndex,w.connectionIndex))return!0;let T=o.viaDiameter/2+w.segment.width/2+o.clearance;if(DS(b,w.segment.start,w.segment.end)<T-$u)return!1;return w.segment.layer!==P.layer||_We(P,w.segment,o.clearance)}))continue;if(!(o.blockingVias??[]).every((w)=>{if(w.connectionIndex===i.connectionIndex)return!0;if($I(b,w.center)<(o.viaDiameter+w.diameter)/2+o.clearance-$u)return!1;if(w.spanLayers.includes(P.layer)&&DS(w.center,P.start,P.end)<w.diameter/2+P.width/2+o.clearance-$u)return!1;return!0}))continue;m.push({connectionIndex:i.connectionIndex,point:b,sourceSegment:P,outwardRank:Ohi({source:a,site:b,direction:r})})}let p=r==="left"||r==="right"?n.yCoordinates:n.xCoordinates,g=r==="left"||r==="right"?a.y:a.x,_=p.findIndex((b)=>Math.abs(b-g)<=$u),f=_>=0?_%2===0?1:-1:void 0,y=t.terminationType==="boundary"?o.preferredBoundaryPerpendicularSideByBusId?.get(t.busId):o.preferPlaneCheckerboardSites&&t.terminationType==="plane"&&(r==="left"||r==="right")?f:void 0,x=t.terminationType==="boundary"?o.preferBoundaryOutwardByBusId?.get(t.busId)??!0:!0,C=o.preferredViaPointsByConnectionIndex?.get(i.connectionIndex),I=(b)=>{if(y===void 0)return 0;let P=r==="left"||r==="right"?b.point.y-a.y:b.point.x-a.x;return P*y>$u?0:Math.abs(P)<=$u?1:2};return m.toSorted((b,P)=>(C?Number($I(b.point,C)>$u)-Number($I(P.point,C)>$u):0)||(x?b.outwardRank-P.outwardRank:P.outwardRank-b.outwardRank)||I(b)-I(P)||$I(a,b.point)-$I(a,P.point)||b.point.x-P.point.x||b.point.y-P.point.y)}function Yhi(e){let{first:t,second:n,rules:o}=e,i=o.canShareCopper?.(t.connectionIndex,n.connectionIndex)??!1,r=o.viaHoleDiameter?o.viaHoleDiameter+(o.holeToHoleClearance??o.clearance):0,s=i?r:Math.max(o.viaDiameter+o.clearance,r);if($I(t.point,n.point)<s-$u)return!1;let a=o.viaDiameter/2+o.traceWidth/2+o.clearance;if(!i){if(DS(t.point,n.sourceSegment.start,n.sourceSegment.end)<a-$u||DS(n.point,t.sourceSegment.start,t.sourceSegment.end)<a-$u)return!1}if(i)return!0;return _We(t.sourceSegment,n.sourceSegment,o.clearance)}function Vhi(e){let{component:t,rules:n,consumeSearchState:o}=e,i=t.connections.map((A)=>({connection:A,candidates:Ssn({connection:A,component:t,rules:n})}));if(i.some((A)=>A.candidates.length===0))return null;let r=new Map,s=(A,m)=>{let p=r.get(A)?.get(m);if(p!==void 0)return p;let g=Yhi({first:A,second:m,rules:n}),_=r.get(A)??new Map;_.set(m,g),r.set(A,_);let f=r.get(m)??new Map;return f.set(A,g),r.set(m,f),g},a=i.flatMap((A)=>A.candidates.length===1?[A.candidates[0]]:[]);for(let A=0;A<a.length;A++){let m=a[A];for(let p=0;p<A;p++)if(!s(m,a[p]))return null}let c=new Map(a.map((A)=>[A.connectionIndex,A])),l=new Set(i.flatMap((A)=>A.candidates.length>1?[A.connection.preparedConnection.connectionIndex]:[])),d=new Map(i.map((A)=>[A.connection.preparedConnection.connectionIndex,A]));if(l.size===0)return new Map([...c.entries()].map(([A,m])=>[A,{...m.point}]));let u=(A)=>A.candidates.filter((m)=>[...c.values()].every((p)=>s(m,p))),h=()=>{if(!o())return!1;if(l.size===0)return!0;let A,m=[];for(let g of[...l].toSorted((_,f)=>_-f)){let _=d.get(g),f=u(_);if(f.length===0)return!1;if(!A||f.length<m.length||f.length===m.length&&g<A.connection.preparedConnection.connectionIndex)A=_,m=f}let p=A.connection.preparedConnection.connectionIndex;l.delete(p);for(let g of m){if(c.set(p,g),h())return!0;c.delete(p)}return l.add(p),!1};if(!h())return null;return new Map([...c.entries()].toSorted(([A],[m])=>A-m).map(([A,m])=>[A,{...m.point}]))}function Uhi(e,t){let n=Isn(t);if(e.length===0)return new Map;let o=0,i=()=>(o++,o<=n),r=new Map;for(let s of bsn(e)){let a=Vhi({component:s,rules:t,consumeSearchState:i});if(!a)return null;for(let[c,l]of a)r.set(c,l)}return r}function Whi(e,t){return Isn(t),bsn(e).flatMap((n)=>n.connections.flatMap((o)=>Ssn({connection:o,component:n,rules:t}).map((i)=>({connectionIndex:i.connectionIndex,point:{...i.point}}))))}var Nns=gX(uWe(),1),Rns=gX(uWe(),1),Qns=gX(uWe(),1),{create:Xhi,defineProperty:hVe,getOwnPropertyDescriptor:Khi,getOwnPropertyNames:Psn,getPrototypeOf:jhi}=Object,qhi=Object.prototype.hasOwnProperty,mm=(e,t)=>function(){return t||(0,e[Psn(e)[0]])((t={exports:{}}).exports,t),t.exports},vsn=(e,t)=>{for(var n in t)hVe(e,n,{get:t[n],enumerable:!0})},mVe=(e,t,n)=>(n=e!=null?Xhi(jhi(e)):{},((o,i,r,s)=>{if(i&&typeof i=="object"||typeof i=="function")for(let a of Psn(i))qhi.call(o,a)||a===r||hVe(o,a,{get:()=>i[a],enumerable:!(s=Khi(i,a))||s.enumerable});return o})(!t&&e&&e.__esModule?n:hVe(n,"default",{value:e,enumerable:!0}),e)),Jhi=mm({"node_modules/is-buffer/index.js"(e,t){function n(o){return!!o.constructor&&typeof o.constructor.isBuffer=="function"&&o.constructor.isBuffer(o)}t.exports=function(o){return o!=null&&(n(o)||function(i){return typeof i.readFloatLE=="function"&&typeof i.slice=="function"&&n(i.slice(0,0))}(o)||!!o._isBuffer)}}}),$hi=mm({"node_modules/kind-of/index.js"(e,t){var n=Jhi(),o=Object.prototype.toString;t.exports=function(i){if(i===void 0)return"undefined";if(i===null)return"null";if(i===!0||i===!1||i instanceof Boolean)return"boolean";if(typeof i=="string"||i instanceof String)return"string";if(typeof i=="number"||i instanceof Number)return"number";if(typeof i=="function"||i instanceof Function)return"function";if(Array.isArray!==void 0&&Array.isArray(i))return"array";if(i instanceof RegExp)return"regexp";if(i instanceof Date)return"date";var r=o.call(i);return r==="[object RegExp]"?"regexp":r==="[object Date]"?"date":r==="[object Arguments]"?"arguments":r==="[object Error]"?"error":n(i)?"buffer":r==="[object Set]"?"set":r==="[object WeakSet]"?"weakset":r==="[object Map]"?"map":r==="[object WeakMap]"?"weakmap":r==="[object Symbol]"?"symbol":r==="[object Int8Array]"?"int8array":r==="[object Uint8Array]"?"uint8array":r==="[object Uint8ClampedArray]"?"uint8clampedarray":r==="[object Int16Array]"?"int16array":r==="[object Uint16Array]"?"uint16array":r==="[object Int32Array]"?"int32array":r==="[object Uint32Array]"?"uint32array":r==="[object Float32Array]"?"float32array":r==="[object Float64Array]"?"float64array":"object"}}}),Zhi=mm({"node_modules/rename-keys/index.js"(e,t){(function(){function n(o,i){if(typeof i!="function")return o;var r={};for(var s in o)Object.prototype.hasOwnProperty.call(o,s)&&(r[i(s,o[s])||s]=o[s]);return r}t!==void 0&&t.exports?t.exports=n:typeof define=="function"&&define.amd?define([],function(){return n}):window.rename=n})()}}),e0i=mm({"node_modules/deep-rename-keys/index.js"(e,t){var n=$hi(),o=Zhi();t.exports=function i(r,s){var a=n(r);if(a!=="object"&&a!=="array")throw Error("expected an object");var c=[];for(var l in a==="object"&&(r=o(r,s),c={}),r)if(r.hasOwnProperty(l)){var d=r[l];n(d)==="object"||n(d)==="array"?c[l]=i(d,s):c[l]=d}return c}}}),t0i=mm({"node_modules/xml-reader/node_modules/eventemitter3/index.js"(e,t){var n=Object.prototype.hasOwnProperty,o="~";function i(){}function r(a,c,l){this.fn=a,this.context=c,this.once=l||!1}function s(){this._events=new i,this._eventsCount=0}Object.create&&(i.prototype=Object.create(null),new i().__proto__||(o=!1)),s.prototype.eventNames=function(){var a,c,l=[];if(this._eventsCount===0)return l;for(c in a=this._events)n.call(a,c)&&l.push(o?c.slice(1):c);return Object.getOwnPropertySymbols?l.concat(Object.getOwnPropertySymbols(a)):l},s.prototype.listeners=function(a,c){var l=o?o+a:a,d=this._events[l];if(c)return!!d;if(!d)return[];if(d.fn)return[d.fn];for(var u=0,h=d.length,A=Array(h);u<h;u++)A[u]=d[u].fn;return A},s.prototype.emit=function(a,c,l,d,u,h){var A=o?o+a:a;if(!this._events[A])return!1;var m,p,g=this._events[A],_=arguments.length;if(g.fn){switch(g.once&&this.removeListener(a,g.fn,void 0,!0),_){case 1:return g.fn.call(g.context),!0;case 2:return g.fn.call(g.context,c),!0;case 3:return g.fn.call(g.context,c,l),!0;case 4:return g.fn.call(g.context,c,l,d),!0;case 5:return g.fn.call(g.context,c,l,d,u),!0;case 6:return g.fn.call(g.context,c,l,d,u,h),!0}for(p=1,m=Array(_-1);p<_;p++)m[p-1]=arguments[p];g.fn.apply(g.context,m)}else{var f,y=g.length;for(p=0;p<y;p++)switch(g[p].once&&this.removeListener(a,g[p].fn,void 0,!0),_){case 1:g[p].fn.call(g[p].context);break;case 2:g[p].fn.call(g[p].context,c);break;case 3:g[p].fn.call(g[p].context,c,l);break;case 4:g[p].fn.call(g[p].context,c,l,d);break;default:if(!m)for(f=1,m=Array(_-1);f<_;f++)m[f-1]=arguments[f];g[p].fn.apply(g[p].context,m)}}return!0},s.prototype.on=function(a,c,l){var d=new r(c,l||this),u=o?o+a:a;return this._events[u]?this._events[u].fn?this._events[u]=[this._events[u],d]:this._events[u].push(d):(this._events[u]=d,this._eventsCount++),this},s.prototype.once=function(a,c,l){var d=new r(c,l||this,!0),u=o?o+a:a;return this._events[u]?this._events[u].fn?this._events[u]=[this._events[u],d]:this._events[u].push(d):(this._events[u]=d,this._eventsCount++),this},s.prototype.removeListener=function(a,c,l,d){var u=o?o+a:a;if(!this._events[u])return this;if(!c)return--this._eventsCount===0?this._events=new i:delete this._events[u],this;var h=this._events[u];if(h.fn)h.fn!==c||d&&!h.once||l&&h.context!==l||(--this._eventsCount===0?this._events=new i:delete this._events[u]);else{for(var A=0,m=[],p=h.length;A<p;A++)(h[A].fn!==c||d&&!h[A].once||l&&h[A].context!==l)&&m.push(h[A]);m.length?this._events[u]=m.length===1?m[0]:m:--this._eventsCount===0?this._events=new i:delete this._events[u]}return this},s.prototype.removeAllListeners=function(a){var c;return a?(c=o?o+a:a,this._events[c]&&(--this._eventsCount===0?this._events=new i:delete this._events[c])):(this._events=new i,this._eventsCount=0),this},s.prototype.off=s.prototype.removeListener,s.prototype.addListener=s.prototype.on,s.prototype.setMaxListeners=function(){return this},s.prefixed=o,s.EventEmitter=s,t!==void 0&&(t.exports=s)}});var n0i=mm({"node_modules/xml-lexer/node_modules/eventemitter3/index.js"(e,t){var n=Object.prototype.hasOwnProperty,o="~";function i(){}function r(a,c,l){this.fn=a,this.context=c,this.once=l||!1}function s(){this._events=new i,this._eventsCount=0}Object.create&&(i.prototype=Object.create(null),new i().__proto__||(o=!1)),s.prototype.eventNames=function(){var a,c,l=[];if(this._eventsCount===0)return l;for(c in a=this._events)n.call(a,c)&&l.push(o?c.slice(1):c);return Object.getOwnPropertySymbols?l.concat(Object.getOwnPropertySymbols(a)):l},s.prototype.listeners=function(a,c){var l=o?o+a:a,d=this._events[l];if(c)return!!d;if(!d)return[];if(d.fn)return[d.fn];for(var u=0,h=d.length,A=Array(h);u<h;u++)A[u]=d[u].fn;return A},s.prototype.emit=function(a,c,l,d,u,h){var A=o?o+a:a;if(!this._events[A])return!1;var m,p,g=this._events[A],_=arguments.length;if(g.fn){switch(g.once&&this.removeListener(a,g.fn,void 0,!0),_){case 1:return g.fn.call(g.context),!0;case 2:return g.fn.call(g.context,c),!0;case 3:return g.fn.call(g.context,c,l),!0;case 4:return g.fn.call(g.context,c,l,d),!0;case 5:return g.fn.call(g.context,c,l,d,u),!0;case 6:return g.fn.call(g.context,c,l,d,u,h),!0}for(p=1,m=Array(_-1);p<_;p++)m[p-1]=arguments[p];g.fn.apply(g.context,m)}else{var f,y=g.length;for(p=0;p<y;p++)switch(g[p].once&&this.removeListener(a,g[p].fn,void 0,!0),_){case 1:g[p].fn.call(g[p].context);break;case 2:g[p].fn.call(g[p].context,c);break;case 3:g[p].fn.call(g[p].context,c,l);break;case 4:g[p].fn.call(g[p].context,c,l,d);break;default:if(!m)for(f=1,m=Array(_-1);f<_;f++)m[f-1]=arguments[f];g[p].fn.apply(g[p].context,m)}}return!0},s.prototype.on=function(a,c,l){var d=new r(c,l||this),u=o?o+a:a;return this._events[u]?this._events[u].fn?this._events[u]=[this._events[u],d]:this._events[u].push(d):(this._events[u]=d,this._eventsCount++),this},s.prototype.once=function(a,c,l){var d=new r(c,l||this,!0),u=o?o+a:a;return this._events[u]?this._events[u].fn?this._events[u]=[this._events[u],d]:this._events[u].push(d):(this._events[u]=d,this._eventsCount++),this},s.prototype.removeListener=function(a,c,l,d){var u=o?o+a:a;if(!this._events[u])return this;if(!c)return--this._eventsCount===0?this._events=new i:delete this._events[u],this;var h=this._events[u];if(h.fn)h.fn!==c||d&&!h.once||l&&h.context!==l||(--this._eventsCount===0?this._events=new i:delete this._events[u]);else{for(var A=0,m=[],p=h.length;A<p;A++)(h[A].fn!==c||d&&!h[A].once||l&&h[A].context!==l)&&m.push(h[A]);m.length?this._events[u]=m.length===1?m[0]:m:--this._eventsCount===0?this._events=new i:delete this._events[u]}return this},s.prototype.removeAllListeners=function(a){var c;return a?(c=o?o+a:a,this._events[c]&&(--this._eventsCount===0?this._events=new i:delete this._events[c])):(this._events=new i,this._eventsCount=0),this},s.prototype.off=s.prototype.removeListener,s.prototype.addListener=s.prototype.on,s.prototype.setMaxListeners=function(){return this},s.prefixed=o,s.EventEmitter=s,t!==void 0&&(t.exports=s)}}),o0i=mm({"node_modules/xml-lexer/dist/lexer.js"(e,t){function n(l,d,u){return d in l?Object.defineProperty(l,d,{value:u,enumerable:!0,configurable:!0,writable:!0}):l[d]=u,l}var o=n0i(),i=function(){},r={data:"state-data",cdata:"state-cdata",tagBegin:"state-tag-begin",tagName:"state-tag-name",tagEnd:"state-tag-end",attributeNameStart:"state-attribute-name-start",attributeName:"state-attribute-name",attributeNameEnd:"state-attribute-name-end",attributeValueBegin:"state-attribute-value-begin",attributeValue:"state-attribute-value"},s={lt:"action-lt",gt:"action-gt",space:"action-space",equal:"action-equal",quote:"action-quote",slash:"action-slash",char:"action-char",error:"action-error"},a={text:"text",openTag:"open-tag",closeTag:"close-tag",attributeName:"attribute-name",attributeValue:"attribute-value"},c={" ":s.space,"\t":s.space,"\n":s.space,"\r":s.space,"<":s.lt,">":s.gt,'"':s.quote,"'":s.quote,"=":s.equal,"/":s.slash};t.exports={State:r,Action:s,Type:a,create:function(l){var d,u,h,A,m,p,g,_,f,y;l=Object.assign({debug:!1},l);var x=new o,C=r.data,I="",b="",P="",E="",B="",w="",T=function(N,F){if(b[0]!=="?"&&b[0]!=="!"){var H={type:N,value:F};l.debug&&console.log("emit:",H),x.emit("data",H)}};x.stateMachine=(n(y={},r.data,(n(d={},s.lt,function(){I.trim()&&T(a.text,I),b="",B=!1,C=r.tagBegin}),n(d,s.char,function(N){I+=N}),d)),n(y,r.cdata,n({},s.char,function(N){(I+=N).substr(-3)==="]]>"&&(T(a.text,I.slice(0,-3)),I="",C=r.data)})),n(y,r.tagBegin,(n(u={},s.space,i),n(u,s.char,function(N){b=N,C=r.tagName}),n(u,s.slash,function(){b="",B=!0}),u)),n(y,r.tagName,(n(h={},s.space,function(){B?C=r.tagEnd:(C=r.attributeNameStart,T(a.openTag,b))}),n(h,s.gt,function(){T(B?a.closeTag:a.openTag,b),I="",C=r.data}),n(h,s.slash,function(){C=r.tagEnd,T(a.openTag,b)}),n(h,s.char,function(N){(b+=N)==="![CDATA["&&(C=r.cdata,I="",b="")}),h)),n(y,r.tagEnd,(n(A={},s.gt,function(){T(a.closeTag,b),I="",C=r.data}),n(A,s.char,i),A)),n(y,r.attributeNameStart,(n(m={},s.char,function(N){P=N,C=r.attributeName}),n(m,s.gt,function(){I="",C=r.data}),n(m,s.space,i),n(m,s.slash,function(){B=!0,C=r.tagEnd}),m)),n(y,r.attributeName,(n(p={},s.space,function(){C=r.attributeNameEnd}),n(p,s.equal,function(){T(a.attributeName,P),C=r.attributeValueBegin}),n(p,s.gt,function(){E="",T(a.attributeName,P),T(a.attributeValue,E),I="",C=r.data}),n(p,s.slash,function(){B=!0,E="",T(a.attributeName,P),T(a.attributeValue,E),C=r.tagEnd}),n(p,s.char,function(N){P+=N}),p)),n(y,r.attributeNameEnd,(n(g={},s.space,i),n(g,s.equal,function(){T(a.attributeName,P),C=r.attributeValueBegin}),n(g,s.gt,function(){E="",T(a.attributeName,P),T(a.attributeValue,E),I="",C=r.data}),n(g,s.char,function(N){E="",T(a.attributeName,P),T(a.attributeValue,E),P=N,C=r.attributeName}),g)),n(y,r.attributeValueBegin,(n(_={},s.space,i),n(_,s.quote,function(N){w=N,E="",C=r.attributeValue}),n(_,s.gt,function(){T(a.attributeValue,E=""),I="",C=r.data}),n(_,s.char,function(N){w="",E=N,C=r.attributeValue}),_)),n(y,r.attributeValue,(n(f={},s.space,function(N){w?E+=N:(T(a.attributeValue,E),C=r.attributeNameStart)}),n(f,s.quote,function(N){w===N?(T(a.attributeValue,E),C=r.attributeNameStart):E+=N}),n(f,s.gt,function(N){w?E+=N:(T(a.attributeValue,E),I="",C=r.data)}),n(f,s.slash,function(N){w?E+=N:(T(a.attributeValue,E),B=!0,C=r.tagEnd)}),n(f,s.char,function(N){E+=N}),f)),y);var Q=function(N){l.debug&&console.log(C,N);var F=x.stateMachine[C],H=F[function(z){return c[z]||s.char}(N)]||F[s.error]||F[s.char];H(N)};return x.write=function(N){for(var F=N.length,H=0;H<F;H++)Q(N[H])},x}}}}),i0i=mm({"node_modules/xml-reader/dist/reader.js"(e,t){var n=t0i(),o=o0i(),i=o.Type,r={element:"element",text:"text"},s=function(c){return Object.assign({name:"",type:r.element,value:"",parent:null,attributes:{},children:[]},c)},a=function(c){c=Object.assign({stream:!1,parentNodes:!0,doneEvent:"done",tagPrefix:"tag:",emitTopLevelOnly:!1,debug:!1},c);var l=void 0,d=void 0,u=void 0,h=void 0,A=new n,m=function(p){switch(p.type){case i.openTag:if(u===null)(u=d).name=p.value;else{var g=s({name:p.value,parent:u});u.children.push(g),u=g}break;case i.closeTag:var _=u.parent;if(c.parentNodes||(u.parent=null),u.name!==p.value)break;c.stream&&_===d&&(d.children=[],u.parent=null),c.emitTopLevelOnly&&_!==d||(A.emit(c.tagPrefix+u.name,u),A.emit("tag",u.name,u)),u===d&&(l.removeAllListeners("data"),A.emit(c.doneEvent,u),d=null),u=_;break;case i.text:u&&u.children.push(s({type:r.text,value:p.value,parent:c.parentNodes?u:null}));break;case i.attributeName:h=p.value,u.attributes[h]="";break;case i.attributeValue:u.attributes[h]=p.value}};return A.reset=function(){(l=o.create({debug:c.debug})).on("data",m),d=s(),u=null,h="",A.parse=l.write},A.reset(),A};t.exports={parseSync:function(c,l){l=Object.assign({},l,{stream:!1,tagPrefix:":"});var d=a(l),u=void 0;return d.on("done",function(h){u=h}),d.parse(c),u},create:a,NodeType:r}}}),NCe=mm({"node_modules/binary-search-bounds/search-bounds.js"(e,t){function n(c,l,d,u,h){for(var A=h+1;u<=h;){var m=u+h>>>1,p=c[m];(d!==void 0?d(p,l):p-l)>=0?(A=m,h=m-1):u=m+1}return A}function o(c,l,d,u,h){for(var A=h+1;u<=h;){var m=u+h>>>1,p=c[m];(d!==void 0?d(p,l):p-l)>0?(A=m,h=m-1):u=m+1}return A}function i(c,l,d,u,h){for(var A=u-1;u<=h;){var m=u+h>>>1,p=c[m];(d!==void 0?d(p,l):p-l)<0?(A=m,u=m+1):h=m-1}return A}function r(c,l,d,u,h){for(var A=u-1;u<=h;){var m=u+h>>>1,p=c[m];(d!==void 0?d(p,l):p-l)<=0?(A=m,u=m+1):h=m-1}return A}function s(c,l,d,u,h){for(;u<=h;){var A=u+h>>>1,m=c[A],p=d!==void 0?d(m,l):m-l;if(p===0)return A;p<=0?u=A+1:h=A-1}return-1}function a(c,l,d,u,h,A){return typeof d=="function"?A(c,l,d,u===void 0?0:0|u,h===void 0?c.length-1:0|h):A(c,l,void 0,d===void 0?0:0|d,u===void 0?c.length-1:0|u)}t.exports={ge:function(c,l,d,u,h){return a(c,l,d,u,h,n)},gt:function(c,l,d,u,h){return a(c,l,d,u,h,o)},lt:function(c,l,d,u,h){return a(c,l,d,u,h,i)},le:function(c,l,d,u,h){return a(c,l,d,u,h,r)},eq:function(c,l,d,u,h){return a(c,l,d,u,h,s)}}}}),gWe=mm({"node_modules/two-product/two-product.js"(e,t){t.exports=function(o,i,r){var s=o*i,a=n*o,c=a-(a-o),l=o-c,d=n*i,u=d-(d-i),h=i-u,A=l*h-(s-c*u-l*u-c*h);if(r)return r[0]=A,r[1]=s,r;return[A,s]};var n=+(Math.pow(2,27)+1)}}),Esn=mm({"node_modules/robust-sum/robust-sum.js"(e,t){t.exports=function(n,o){var i=0|n.length,r=0|o.length;if(i===1&&r===1)return function(P,E){var B=P+E,w=B-P,T=B-w,Q=E-w,N=P-T,F=N+Q;if(F)return[F,B];return[B]}(n[0],o[0]);var s,a,c=Array(i+r),l=0,d=0,u=0,h=Math.abs,A=n[d],m=h(A),p=o[u],g=h(p);m<g?(a=A,(d+=1)<i&&(m=h(A=n[d]))):(a=p,(u+=1)<r&&(g=h(p=o[u]))),d<i&&m<g||u>=r?(s=A,(d+=1)<i&&(m=h(A=n[d]))):(s=p,(u+=1)<r&&(g=h(p=o[u])));var _,f,y=s+a,x=y-s,C=a-x,I=C,b=y;for(;d<i&&u<r;)m<g?(s=A,(d+=1)<i&&(m=h(A=n[d]))):(s=p,(u+=1)<r&&(g=h(p=o[u]))),(C=(a=I)-(x=(y=s+a)-s))&&(c[l++]=C),I=b-((_=b+y)-(f=_-b))+(y-f),b=_;for(;d<i;)(C=(a=I)-(x=(y=(s=A)+a)-s))&&(c[l++]=C),I=b-((_=b+y)-(f=_-b))+(y-f),b=_,(d+=1)<i&&(A=n[d]);for(;u<r;)(C=(a=I)-(x=(y=(s=p)+a)-s))&&(c[l++]=C),I=b-((_=b+y)-(f=_-b))+(y-f),b=_,(u+=1)<r&&(p=o[u]);return I&&(c[l++]=I),b&&(c[l++]=b),l||(c[l++]=0),c.length=l,c}}}),r0i=mm({"node_modules/two-sum/two-sum.js"(e,t){t.exports=function(n,o,i){var r=n+o,s=r-n,a=o-s,c=n-(r-s);if(i)return i[0]=c+a,i[1]=r,i;return[c+a,r]}}}),Msn=mm({"node_modules/robust-scale/robust-scale.js"(e,t){var n=gWe(),o=r0i();t.exports=function(i,r){var s=i.length;if(s===1){var a=n(i[0],r);return a[0]?a:[a[1]]}var c=Array(2*s),l=[0.1,0.1],d=[0.1,0.1],u=0;n(i[0],r,l),l[0]&&(c[u++]=l[0]);for(var h=1;h<s;++h){n(i[h],r,d);var A=l[1];o(A,d[0],l),l[0]&&(c[u++]=l[0]);var m=d[1],p=l[1],g=m+p,_=p-(g-m);l[1]=g,_&&(c[u++]=_)}return l[1]&&(c[u++]=l[1]),u===0&&(c[u++]=0),c.length=u,c}}}),Bsn=mm({"node_modules/robust-subtract/robust-diff.js"(e,t){t.exports=function(n,o){var i=0|n.length,r=0|o.length;if(i===1&&r===1)return function(P,E){var B=P+E,w=B-P,T=B-w,Q=E-w,N=P-T,F=N+Q;if(F)return[F,B];return[B]}(n[0],-o[0]);var s,a,c=Array(i+r),l=0,d=0,u=0,h=Math.abs,A=n[d],m=h(A),p=-o[u],g=h(p);m<g?(a=A,(d+=1)<i&&(m=h(A=n[d]))):(a=p,(u+=1)<r&&(g=h(p=-o[u]))),d<i&&m<g||u>=r?(s=A,(d+=1)<i&&(m=h(A=n[d]))):(s=p,(u+=1)<r&&(g=h(p=-o[u])));var _,f,y=s+a,x=y-s,C=a-x,I=C,b=y;for(;d<i&&u<r;)m<g?(s=A,(d+=1)<i&&(m=h(A=n[d]))):(s=p,(u+=1)<r&&(g=h(p=-o[u]))),(C=(a=I)-(x=(y=s+a)-s))&&(c[l++]=C),I=b-((_=b+y)-(f=_-b))+(y-f),b=_;for(;d<i;)(C=(a=I)-(x=(y=(s=A)+a)-s))&&(c[l++]=C),I=b-((_=b+y)-(f=_-b))+(y-f),b=_,(d+=1)<i&&(A=n[d]);for(;u<r;)(C=(a=I)-(x=(y=(s=p)+a)-s))&&(c[l++]=C),I=b-((_=b+y)-(f=_-b))+(y-f),b=_,(u+=1)<r&&(p=-o[u]);return I&&(c[l++]=I),b&&(c[l++]=b),l||(c[l++]=0),c.length=l,c}}}),s0i=mm({"node_modules/robust-orientation/orientation.js"(e,t){var n=gWe(),o=Esn(),i=Msn(),r=Bsn();function s(p,g,_,f){return function(y,x,C){var I=p(p(g(x[1],C[0]),g(-C[1],x[0])),p(g(y[1],x[0]),g(-x[1],y[0]))),b=p(g(y[1],C[0]),g(-C[1],y[0])),P=f(I,b);return P[P.length-1]}}function a(p,g,_,f){return function(y,x,C,I){var b=p(p(_(p(g(C[1],I[0]),g(-I[1],C[0])),x[2]),p(_(p(g(x[1],I[0]),g(-I[1],x[0])),-C[2]),_(p(g(x[1],C[0]),g(-C[1],x[0])),I[2]))),p(_(p(g(x[1],I[0]),g(-I[1],x[0])),y[2]),p(_(p(g(y[1],I[0]),g(-I[1],y[0])),-x[2]),_(p(g(y[1],x[0]),g(-x[1],y[0])),I[2])))),P=p(p(_(p(g(C[1],I[0]),g(-I[1],C[0])),y[2]),p(_(p(g(y[1],I[0]),g(-I[1],y[0])),-C[2]),_(p(g(y[1],C[0]),g(-C[1],y[0])),I[2]))),p(_(p(g(x[1],C[0]),g(-C[1],x[0])),y[2]),p(_(p(g(y[1],C[0]),g(-C[1],y[0])),-x[2]),_(p(g(y[1],x[0]),g(-x[1],y[0])),C[2])))),E=f(b,P);return E[E.length-1]}}function c(p,g,_,f){return function(y,x,C,I,b){var P=p(p(p(_(p(_(p(g(I[1],b[0]),g(-b[1],I[0])),C[2]),p(_(p(g(C[1],b[0]),g(-b[1],C[0])),-I[2]),_(p(g(C[1],I[0]),g(-I[1],C[0])),b[2]))),x[3]),p(_(p(_(p(g(I[1],b[0]),g(-b[1],I[0])),x[2]),p(_(p(g(x[1],b[0]),g(-b[1],x[0])),-I[2]),_(p(g(x[1],I[0]),g(-I[1],x[0])),b[2]))),-C[3]),_(p(_(p(g(C[1],b[0]),g(-b[1],C[0])),x[2]),p(_(p(g(x[1],b[0]),g(-b[1],x[0])),-C[2]),_(p(g(x[1],C[0]),g(-C[1],x[0])),b[2]))),I[3]))),p(_(p(_(p(g(C[1],I[0]),g(-I[1],C[0])),x[2]),p(_(p(g(x[1],I[0]),g(-I[1],x[0])),-C[2]),_(p(g(x[1],C[0]),g(-C[1],x[0])),I[2]))),-b[3]),p(_(p(_(p(g(I[1],b[0]),g(-b[1],I[0])),x[2]),p(_(p(g(x[1],b[0]),g(-b[1],x[0])),-I[2]),_(p(g(x[1],I[0]),g(-I[1],x[0])),b[2]))),y[3]),_(p(_(p(g(I[1],b[0]),g(-b[1],I[0])),y[2]),p(_(p(g(y[1],b[0]),g(-b[1],y[0])),-I[2]),_(p(g(y[1],I[0]),g(-I[1],y[0])),b[2]))),-x[3])))),p(p(_(p(_(p(g(x[1],b[0]),g(-b[1],x[0])),y[2]),p(_(p(g(y[1],b[0]),g(-b[1],y[0])),-x[2]),_(p(g(y[1],x[0]),g(-x[1],y[0])),b[2]))),I[3]),p(_(p(_(p(g(x[1],I[0]),g(-I[1],x[0])),y[2]),p(_(p(g(y[1],I[0]),g(-I[1],y[0])),-x[2]),_(p(g(y[1],x[0]),g(-x[1],y[0])),I[2]))),-b[3]),_(p(_(p(g(C[1],I[0]),g(-I[1],C[0])),x[2]),p(_(p(g(x[1],I[0]),g(-I[1],x[0])),-C[2]),_(p(g(x[1],C[0]),g(-C[1],x[0])),I[2]))),y[3]))),p(_(p(_(p(g(C[1],I[0]),g(-I[1],C[0])),y[2]),p(_(p(g(y[1],I[0]),g(-I[1],y[0])),-C[2]),_(p(g(y[1],C[0]),g(-C[1],y[0])),I[2]))),-x[3]),p(_(p(_(p(g(x[1],I[0]),g(-I[1],x[0])),y[2]),p(_(p(g(y[1],I[0]),g(-I[1],y[0])),-x[2]),_(p(g(y[1],x[0]),g(-x[1],y[0])),I[2]))),C[3]),_(p(_(p(g(x[1],C[0]),g(-C[1],x[0])),y[2]),p(_(p(g(y[1],C[0]),g(-C[1],y[0])),-x[2]),_(p(g(y[1],x[0]),g(-x[1],y[0])),C[2]))),-I[3]))))),E=p(p(p(_(p(_(p(g(I[1],b[0]),g(-b[1],I[0])),C[2]),p(_(p(g(C[1],b[0]),g(-b[1],C[0])),-I[2]),_(p(g(C[1],I[0]),g(-I[1],C[0])),b[2]))),y[3]),_(p(_(p(g(I[1],b[0]),g(-b[1],I[0])),y[2]),p(_(p(g(y[1],b[0]),g(-b[1],y[0])),-I[2]),_(p(g(y[1],I[0]),g(-I[1],y[0])),b[2]))),-C[3])),p(_(p(_(p(g(C[1],b[0]),g(-b[1],C[0])),y[2]),p(_(p(g(y[1],b[0]),g(-b[1],y[0])),-C[2]),_(p(g(y[1],C[0]),g(-C[1],y[0])),b[2]))),I[3]),_(p(_(p(g(C[1],I[0]),g(-I[1],C[0])),y[2]),p(_(p(g(y[1],I[0]),g(-I[1],y[0])),-C[2]),_(p(g(y[1],C[0]),g(-C[1],y[0])),I[2]))),-b[3]))),p(p(_(p(_(p(g(C[1],b[0]),g(-b[1],C[0])),x[2]),p(_(p(g(x[1],b[0]),g(-b[1],x[0])),-C[2]),_(p(g(x[1],C[0]),g(-C[1],x[0])),b[2]))),y[3]),_(p(_(p(g(C[1],b[0]),g(-b[1],C[0])),y[2]),p(_(p(g(y[1],b[0]),g(-b[1],y[0])),-C[2]),_(p(g(y[1],C[0]),g(-C[1],y[0])),b[2]))),-x[3])),p(_(p(_(p(g(x[1],b[0]),g(-b[1],x[0])),y[2]),p(_(p(g(y[1],b[0]),g(-b[1],y[0])),-x[2]),_(p(g(y[1],x[0]),g(-x[1],y[0])),b[2]))),C[3]),_(p(_(p(g(x[1],C[0]),g(-C[1],x[0])),y[2]),p(_(p(g(y[1],C[0]),g(-C[1],y[0])),-x[2]),_(p(g(y[1],x[0]),g(-x[1],y[0])),C[2]))),-b[3])))),B=f(P,E);return B[B.length-1]}}function l(p){return(p===3?s:p===4?a:c)(o,n,i,r)}var d=l(3),u=l(4),h=[function(){return 0},function(){return 0},function(p,g){return g[0]-p[0]},function(p,g,_){var f,y=(p[1]-_[1])*(g[0]-_[0]),x=(p[0]-_[0])*(g[1]-_[1]),C=y-x;if(y>0){if(x<=0)return C;f=y+x}else{if(!(y<0))return C;if(x>=0)return C;f=-(y+x)}var I=0.00000000000000033306690738754716*f;return C>=I||C<=-I?C:d(p,g,_)},function(p,g,_,f){var y=p[0]-f[0],x=g[0]-f[0],C=_[0]-f[0],I=p[1]-f[1],b=g[1]-f[1],P=_[1]-f[1],E=p[2]-f[2],B=g[2]-f[2],w=_[2]-f[2],T=x*P,Q=C*b,N=C*I,F=y*P,H=y*b,z=x*I,Y=E*(T-Q)+B*(N-F)+w*(H-z),U=0.0000000000000007771561172376103*((Math.abs(T)+Math.abs(Q))*Math.abs(E)+(Math.abs(N)+Math.abs(F))*Math.abs(B)+(Math.abs(H)+Math.abs(z))*Math.abs(w));return Y>U||-Y>U?Y:u(p,g,_,f)}];function A(p){var g=h[p.length];return g||(g=h[p.length]=l(p.length)),g.apply(void 0,p)}function m(p,g,_,f,y,x,C){return function(I,b,P,E,B){switch(arguments.length){case 0:case 1:return 0;case 2:return f(I,b);case 3:return y(I,b,P);case 4:return x(I,b,P,E);case 5:return C(I,b,P,E,B)}for(var w=Array(arguments.length),T=0;T<arguments.length;++T)w[T]=arguments[T];return p(w)}}(function(){for(;h.length<=5;)h.push(l(h.length));t.exports=m.apply(void 0,[A].concat(h));for(var p=0;p<=5;++p)t.exports[p]=h[p]})()}}),a0i=mm({"node_modules/cdt2d/lib/monotone.js"(e,t){var n=NCe(),o=s0i()[3];function i(h,A,m,p,g){this.a=h,this.b=A,this.idx=m,this.lowerIds=p,this.upperIds=g}function r(h,A,m,p){this.a=h,this.b=A,this.type=m,this.idx=p}function s(h,A){var m=h.a[0]-A.a[0]||h.a[1]-A.a[1]||h.type-A.type;return m||(h.type!==0&&(m=o(h.a,h.b,A.b))?m:h.idx-A.idx)}function a(h,A){return o(h.a,h.b,A)}function c(h,A,m,p,g){for(var _=n.lt(A,p,a),f=n.gt(A,p,a),y=_;y<f;++y){for(var x=A[y],C=x.lowerIds,I=C.length;I>1&&o(m[C[I-2]],m[C[I-1]],p)>0;)h.push([C[I-1],C[I-2],g]),I-=1;C.length=I,C.push(g);var b=x.upperIds;for(I=b.length;I>1&&o(m[b[I-2]],m[b[I-1]],p)<0;)h.push([b[I-2],b[I-1],g]),I-=1;b.length=I,b.push(g)}}function l(h,A){var m;return(m=h.a[0]<A.a[0]?o(h.a,h.b,A.a):o(A.b,A.a,h.a))?m:(m=A.b[0]<h.b[0]?o(h.a,h.b,A.b):o(A.b,A.a,h.b))||h.idx-A.idx}function d(h,A,m){var p=n.le(h,m,l),g=h[p],_=g.upperIds,f=_[_.length-1];g.upperIds=[f],h.splice(p+1,0,new i(m.a,m.b,m.idx,[f],_))}function u(h,A,m){var p=m.a;m.a=m.b,m.b=p;var g=n.eq(h,m,l),_=h[g];h[g-1].upperIds=_.upperIds,h.splice(g,1)}t.exports=function(h,A){for(var m=h.length,p=A.length,g=[],_=0;_<m;++_)g.push(new r(h[_],null,0,_));for(_=0;_<p;++_){var f=A[_],y=h[f[0]],x=h[f[1]];y[0]<x[0]?g.push(new r(y,x,2,_),new r(x,y,1,_)):y[0]>x[0]&&g.push(new r(x,y,2,_),new r(y,x,1,_))}g.sort(s);for(var C=g[0].a[0]-(1+Math.abs(g[0].a[0]))*Math.pow(2,-52),I=[new i([C,1],[C,0],-1,[],[],[],[])],b=[],P=(_=0,g.length);_<P;++_){var E=g[_],B=E.type;B===0?c(b,I,h,E.a,E.idx):B===2?d(I,h,E):u(I,h,E)}return b}}}),c0i=mm({"node_modules/cdt2d/lib/triangulation.js"(e,t){var n=NCe();function o(s,a){this.stars=s,this.edges=a}t.exports=function(s,a){for(var c=Array(s),l=0;l<s;++l)c[l]=[];return new o(c,a)};var i=o.prototype;function r(s,a,c){for(var l=1,d=s.length;l<d;l+=2)if(s[l-1]===a&&s[l]===c)return s[l-1]=s[d-2],s[l]=s[d-1],void(s.length=d-2)}i.isConstraint=function(){var s=[0,0];function a(c,l){return c[0]-l[0]||c[1]-l[1]}return function(c,l){return s[0]=Math.min(c,l),s[1]=Math.max(c,l),n.eq(this.edges,s,a)>=0}}(),i.removeTriangle=function(s,a,c){var l=this.stars;r(l[s],a,c),r(l[a],c,s),r(l[c],s,a)},i.addTriangle=function(s,a,c){var l=this.stars;l[s].push(a,c),l[a].push(c,s),l[c].push(s,a)},i.opposite=function(s,a){for(var c=this.stars[a],l=1,d=c.length;l<d;l+=2)if(c[l]===s)return c[l-1];return-1},i.flip=function(s,a){var c=this.opposite(s,a),l=this.opposite(a,s);this.removeTriangle(s,a,c),this.removeTriangle(a,s,l),this.addTriangle(s,l,c),this.addTriangle(a,c,l)},i.edges=function(){for(var s=this.stars,a=[],c=0,l=s.length;c<l;++c)for(var d=s[c],u=0,h=d.length;u<h;u+=2)a.push([d[u],d[u+1]]);return a},i.cells=function(){for(var s=this.stars,a=[],c=0,l=s.length;c<l;++c)for(var d=s[c],u=0,h=d.length;u<h;u+=2){var A=d[u],m=d[u+1];c<Math.min(A,m)&&a.push([c,A,m])}return a}}}),l0i=mm({"node_modules/robust-in-sphere/in-sphere.js"(e,t){var n=gWe(),o=Esn(),i=Bsn(),r=Msn();function s(m){return(m===3?a:m===4?c:m===5?l:d)(o,i,n,r)}function a(m,p,g,_){return function(f,y,x){var C=g(f[0],f[0]),I=_(C,y[0]),b=_(C,x[0]),P=g(y[0],y[0]),E=_(P,f[0]),B=_(P,x[0]),w=g(x[0],x[0]),T=_(w,f[0]),Q=_(w,y[0]),N=m(p(Q,B),p(E,I)),F=p(T,b),H=p(N,F);return H[H.length-1]}}function c(m,p,g,_){return function(f,y,x,C){var I=m(g(f[0],f[0]),g(f[1],f[1])),b=_(I,y[0]),P=_(I,x[0]),E=_(I,C[0]),B=m(g(y[0],y[0]),g(y[1],y[1])),w=_(B,f[0]),T=_(B,x[0]),Q=_(B,C[0]),N=m(g(x[0],x[0]),g(x[1],x[1])),F=_(N,f[0]),H=_(N,y[0]),z=_(N,C[0]),Y=m(g(C[0],C[0]),g(C[1],C[1])),U=_(Y,f[0]),X=_(Y,y[0]),V=_(Y,x[0]),W=m(m(_(p(V,z),y[1]),m(_(p(X,Q),-x[1]),_(p(H,T),C[1]))),m(_(p(X,Q),f[1]),m(_(p(U,E),-y[1]),_(p(w,b),C[1])))),j=m(m(_(p(V,z),f[1]),m(_(p(U,E),-x[1]),_(p(F,P),C[1]))),m(_(p(H,T),f[1]),m(_(p(F,P),-y[1]),_(p(w,b),x[1])))),q=p(W,j);return q[q.length-1]}}function l(m,p,g,_){return function(f,y,x,C,I){var b=m(g(f[0],f[0]),m(g(f[1],f[1]),g(f[2],f[2]))),P=_(b,y[0]),E=_(b,x[0]),B=_(b,C[0]),w=_(b,I[0]),T=m(g(y[0],y[0]),m(g(y[1],y[1]),g(y[2],y[2]))),Q=_(T,f[0]),N=_(T,x[0]),F=_(T,C[0]),H=_(T,I[0]),z=m(g(x[0],x[0]),m(g(x[1],x[1]),g(x[2],x[2]))),Y=_(z,f[0]),U=_(z,y[0]),X=_(z,C[0]),V=_(z,I[0]),W=m(g(C[0],C[0]),m(g(C[1],C[1]),g(C[2],C[2]))),j=_(W,f[0]),q=_(W,y[0]),ne=_(W,x[0]),ce=_(W,I[0]),oe=m(g(I[0],I[0]),m(g(I[1],I[1]),g(I[2],I[2]))),ie=_(oe,f[0]),J=_(oe,y[0]),ee=_(oe,x[0]),se=_(oe,C[0]),le=m(m(m(_(m(_(p(se,ce),x[1]),m(_(p(ee,V),-C[1]),_(p(ne,X),I[1]))),y[2]),m(_(m(_(p(se,ce),y[1]),m(_(p(J,H),-C[1]),_(p(q,F),I[1]))),-x[2]),_(m(_(p(ee,V),y[1]),m(_(p(J,H),-x[1]),_(p(U,N),I[1]))),C[2]))),m(_(m(_(p(ne,X),y[1]),m(_(p(q,F),-x[1]),_(p(U,N),C[1]))),-I[2]),m(_(m(_(p(se,ce),y[1]),m(_(p(J,H),-C[1]),_(p(q,F),I[1]))),f[2]),_(m(_(p(se,ce),f[1]),m(_(p(ie,w),-C[1]),_(p(j,B),I[1]))),-y[2])))),m(m(_(m(_(p(J,H),f[1]),m(_(p(ie,w),-y[1]),_(p(Q,P),I[1]))),C[2]),m(_(m(_(p(q,F),f[1]),m(_(p(j,B),-y[1]),_(p(Q,P),C[1]))),-I[2]),_(m(_(p(ne,X),y[1]),m(_(p(q,F),-x[1]),_(p(U,N),C[1]))),f[2]))),m(_(m(_(p(ne,X),f[1]),m(_(p(j,B),-x[1]),_(p(Y,E),C[1]))),-y[2]),m(_(m(_(p(q,F),f[1]),m(_(p(j,B),-y[1]),_(p(Q,P),C[1]))),x[2]),_(m(_(p(U,N),f[1]),m(_(p(Y,E),-y[1]),_(p(Q,P),x[1]))),-C[2]))))),he=m(m(m(_(m(_(p(se,ce),x[1]),m(_(p(ee,V),-C[1]),_(p(ne,X),I[1]))),f[2]),_(m(_(p(se,ce),f[1]),m(_(p(ie,w),-C[1]),_(p(j,B),I[1]))),-x[2])),m(_(m(_(p(ee,V),f[1]),m(_(p(ie,w),-x[1]),_(p(Y,E),I[1]))),C[2]),_(m(_(p(ne,X),f[1]),m(_(p(j,B),-x[1]),_(p(Y,E),C[1]))),-I[2]))),m(m(_(m(_(p(ee,V),y[1]),m(_(p(J,H),-x[1]),_(p(U,N),I[1]))),f[2]),_(m(_(p(ee,V),f[1]),m(_(p(ie,w),-x[1]),_(p(Y,E),I[1]))),-y[2])),m(_(m(_(p(J,H),f[1]),m(_(p(ie,w),-y[1]),_(p(Q,P),I[1]))),x[2]),_(m(_(p(U,N),f[1]),m(_(p(Y,E),-y[1]),_(p(Q,P),x[1]))),-I[2])))),ue=p(le,he);return ue[ue.length-1]}}function d(m,p,g,_){return function(f,y,x,C,I,b){var P=m(m(g(f[0],f[0]),g(f[1],f[1])),m(g(f[2],f[2]),g(f[3],f[3]))),E=_(P,y[0]),B=_(P,x[0]),w=_(P,C[0]),T=_(P,I[0]),Q=_(P,b[0]),N=m(m(g(y[0],y[0]),g(y[1],y[1])),m(g(y[2],y[2]),g(y[3],y[3]))),F=_(N,f[0]),H=_(N,x[0]),z=_(N,C[0]),Y=_(N,I[0]),U=_(N,b[0]),X=m(m(g(x[0],x[0]),g(x[1],x[1])),m(g(x[2],x[2]),g(x[3],x[3]))),V=_(X,f[0]),W=_(X,y[0]),j=_(X,C[0]),q=_(X,I[0]),ne=_(X,b[0]),ce=m(m(g(C[0],C[0]),g(C[1],C[1])),m(g(C[2],C[2]),g(C[3],C[3]))),oe=_(ce,f[0]),ie=_(ce,y[0]),J=_(ce,x[0]),ee=_(ce,I[0]),se=_(ce,b[0]),le=m(m(g(I[0],I[0]),g(I[1],I[1])),m(g(I[2],I[2]),g(I[3],I[3]))),he=_(le,f[0]),ue=_(le,y[0]),Ae=_(le,x[0]),_e=_(le,C[0]),Pe=_(le,b[0]),Ee=m(m(g(b[0],b[0]),g(b[1],b[1])),m(g(b[2],b[2]),g(b[3],b[3]))),Te=_(Ee,f[0]),be=_(Ee,y[0]),me=_(Ee,x[0]),ye=_(Ee,C[0]),Ce=_(Ee,I[0]),ve=m(m(m(_(m(m(_(m(_(p(Ce,Pe),C[1]),m(_(p(ye,se),-I[1]),_(p(_e,ee),b[1]))),x[2]),_(m(_(p(Ce,Pe),x[1]),m(_(p(me,ne),-I[1]),_(p(Ae,q),b[1]))),-C[2])),m(_(m(_(p(ye,se),x[1]),m(_(p(me,ne),-C[1]),_(p(J,j),b[1]))),I[2]),_(m(_(p(_e,ee),x[1]),m(_(p(Ae,q),-C[1]),_(p(J,j),I[1]))),-b[2]))),y[3]),m(_(m(m(_(m(_(p(Ce,Pe),C[1]),m(_(p(ye,se),-I[1]),_(p(_e,ee),b[1]))),y[2]),_(m(_(p(Ce,Pe),y[1]),m(_(p(be,U),-I[1]),_(p(ue,Y),b[1]))),-C[2])),m(_(m(_(p(ye,se),y[1]),m(_(p(be,U),-C[1]),_(p(ie,z),b[1]))),I[2]),_(m(_(p(_e,ee),y[1]),m(_(p(ue,Y),-C[1]),_(p(ie,z),I[1]))),-b[2]))),-x[3]),_(m(m(_(m(_(p(Ce,Pe),x[1]),m(_(p(me,ne),-I[1]),_(p(Ae,q),b[1]))),y[2]),_(m(_(p(Ce,Pe),y[1]),m(_(p(be,U),-I[1]),_(p(ue,Y),b[1]))),-x[2])),m(_(m(_(p(me,ne),y[1]),m(_(p(be,U),-x[1]),_(p(W,H),b[1]))),I[2]),_(m(_(p(Ae,q),y[1]),m(_(p(ue,Y),-x[1]),_(p(W,H),I[1]))),-b[2]))),C[3]))),m(m(_(m(m(_(m(_(p(ye,se),x[1]),m(_(p(me,ne),-C[1]),_(p(J,j),b[1]))),y[2]),_(m(_(p(ye,se),y[1]),m(_(p(be,U),-C[1]),_(p(ie,z),b[1]))),-x[2])),m(_(m(_(p(me,ne),y[1]),m(_(p(be,U),-x[1]),_(p(W,H),b[1]))),C[2]),_(m(_(p(J,j),y[1]),m(_(p(ie,z),-x[1]),_(p(W,H),C[1]))),-b[2]))),-I[3]),_(m(m(_(m(_(p(_e,ee),x[1]),m(_(p(Ae,q),-C[1]),_(p(J,j),I[1]))),y[2]),_(m(_(p(_e,ee),y[1]),m(_(p(ue,Y),-C[1]),_(p(ie,z),I[1]))),-x[2])),m(_(m(_(p(Ae,q),y[1]),m(_(p(ue,Y),-x[1]),_(p(W,H),I[1]))),C[2]),_(m(_(p(J,j),y[1]),m(_(p(ie,z),-x[1]),_(p(W,H),C[1]))),-I[2]))),b[3])),m(_(m(m(_(m(_(p(Ce,Pe),C[1]),m(_(p(ye,se),-I[1]),_(p(_e,ee),b[1]))),y[2]),_(m(_(p(Ce,Pe),y[1]),m(_(p(be,U),-I[1]),_(p(ue,Y),b[1]))),-C[2])),m(_(m(_(p(ye,se),y[1]),m(_(p(be,U),-C[1]),_(p(ie,z),b[1]))),I[2]),_(m(_(p(_e,ee),y[1]),m(_(p(ue,Y),-C[1]),_(p(ie,z),I[1]))),-b[2]))),f[3]),_(m(m(_(m(_(p(Ce,Pe),C[1]),m(_(p(ye,se),-I[1]),_(p(_e,ee),b[1]))),f[2]),_(m(_(p(Ce,Pe),f[1]),m(_(p(Te,Q),-I[1]),_(p(he,T),b[1]))),-C[2])),m(_(m(_(p(ye,se),f[1]),m(_(p(Te,Q),-C[1]),_(p(oe,w),b[1]))),I[2]),_(m(_(p(_e,ee),f[1]),m(_(p(he,T),-C[1]),_(p(oe,w),I[1]))),-b[2]))),-y[3])))),m(m(m(_(m(m(_(m(_(p(Ce,Pe),y[1]),m(_(p(be,U),-I[1]),_(p(ue,Y),b[1]))),f[2]),_(m(_(p(Ce,Pe),f[1]),m(_(p(Te,Q),-I[1]),_(p(he,T),b[1]))),-y[2])),m(_(m(_(p(be,U),f[1]),m(_(p(Te,Q),-y[1]),_(p(F,E),b[1]))),I[2]),_(m(_(p(ue,Y),f[1]),m(_(p(he,T),-y[1]),_(p(F,E),I[1]))),-b[2]))),C[3]),_(m(m(_(m(_(p(ye,se),y[1]),m(_(p(be,U),-C[1]),_(p(ie,z),b[1]))),f[2]),_(m(_(p(ye,se),f[1]),m(_(p(Te,Q),-C[1]),_(p(oe,w),b[1]))),-y[2])),m(_(m(_(p(be,U),f[1]),m(_(p(Te,Q),-y[1]),_(p(F,E),b[1]))),C[2]),_(m(_(p(ie,z),f[1]),m(_(p(oe,w),-y[1]),_(p(F,E),C[1]))),-b[2]))),-I[3])),m(_(m(m(_(m(_(p(_e,ee),y[1]),m(_(p(ue,Y),-C[1]),_(p(ie,z),I[1]))),f[2]),_(m(_(p(_e,ee),f[1]),m(_(p(he,T),-C[1]),_(p(oe,w),I[1]))),-y[2])),m(_(m(_(p(ue,Y),f[1]),m(_(p(he,T),-y[1]),_(p(F,E),I[1]))),C[2]),_(m(_(p(ie,z),f[1]),m(_(p(oe,w),-y[1]),_(p(F,E),C[1]))),-I[2]))),b[3]),_(m(m(_(m(_(p(ye,se),x[1]),m(_(p(me,ne),-C[1]),_(p(J,j),b[1]))),y[2]),_(m(_(p(ye,se),y[1]),m(_(p(be,U),-C[1]),_(p(ie,z),b[1]))),-x[2])),m(_(m(_(p(me,ne),y[1]),m(_(p(be,U),-x[1]),_(p(W,H),b[1]))),C[2]),_(m(_(p(J,j),y[1]),m(_(p(ie,z),-x[1]),_(p(W,H),C[1]))),-b[2]))),f[3]))),m(m(_(m(m(_(m(_(p(ye,se),x[1]),m(_(p(me,ne),-C[1]),_(p(J,j),b[1]))),f[2]),_(m(_(p(ye,se),f[1]),m(_(p(Te,Q),-C[1]),_(p(oe,w),b[1]))),-x[2])),m(_(m(_(p(me,ne),f[1]),m(_(p(Te,Q),-x[1]),_(p(V,B),b[1]))),C[2]),_(m(_(p(J,j),f[1]),m(_(p(oe,w),-x[1]),_(p(V,B),C[1]))),-b[2]))),-y[3]),_(m(m(_(m(_(p(ye,se),y[1]),m(_(p(be,U),-C[1]),_(p(ie,z),b[1]))),f[2]),_(m(_(p(ye,se),f[1]),m(_(p(Te,Q),-C[1]),_(p(oe,w),b[1]))),-y[2])),m(_(m(_(p(be,U),f[1]),m(_(p(Te,Q),-y[1]),_(p(F,E),b[1]))),C[2]),_(m(_(p(ie,z),f[1]),m(_(p(oe,w),-y[1]),_(p(F,E),C[1]))),-b[2]))),x[3])),m(_(m(m(_(m(_(p(me,ne),y[1]),m(_(p(be,U),-x[1]),_(p(W,H),b[1]))),f[2]),_(m(_(p(me,ne),f[1]),m(_(p(Te,Q),-x[1]),_(p(V,B),b[1]))),-y[2])),m(_(m(_(p(be,U),f[1]),m(_(p(Te,Q),-y[1]),_(p(F,E),b[1]))),x[2]),_(m(_(p(W,H),f[1]),m(_(p(V,B),-y[1]),_(p(F,E),x[1]))),-b[2]))),-C[3]),_(m(m(_(m(_(p(J,j),y[1]),m(_(p(ie,z),-x[1]),_(p(W,H),C[1]))),f[2]),_(m(_(p(J,j),f[1]),m(_(p(oe,w),-x[1]),_(p(V,B),C[1]))),-y[2])),m(_(m(_(p(ie,z),f[1]),m(_(p(oe,w),-y[1]),_(p(F,E),C[1]))),x[2]),_(m(_(p(W,H),f[1]),m(_(p(V,B),-y[1]),_(p(F,E),x[1]))),-C[2]))),b[3]))))),De=m(m(m(_(m(m(_(m(_(p(Ce,Pe),C[1]),m(_(p(ye,se),-I[1]),_(p(_e,ee),b[1]))),x[2]),_(m(_(p(Ce,Pe),x[1]),m(_(p(me,ne),-I[1]),_(p(Ae,q),b[1]))),-C[2])),m(_(m(_(p(ye,se),x[1]),m(_(p(me,ne),-C[1]),_(p(J,j),b[1]))),I[2]),_(m(_(p(_e,ee),x[1]),m(_(p(Ae,q),-C[1]),_(p(J,j),I[1]))),-b[2]))),f[3]),m(_(m(m(_(m(_(p(Ce,Pe),C[1]),m(_(p(ye,se),-I[1]),_(p(_e,ee),b[1]))),f[2]),_(m(_(p(Ce,Pe),f[1]),m(_(p(Te,Q),-I[1]),_(p(he,T),b[1]))),-C[2])),m(_(m(_(p(ye,se),f[1]),m(_(p(Te,Q),-C[1]),_(p(oe,w),b[1]))),I[2]),_(m(_(p(_e,ee),f[1]),m(_(p(he,T),-C[1]),_(p(oe,w),I[1]))),-b[2]))),-x[3]),_(m(m(_(m(_(p(Ce,Pe),x[1]),m(_(p(me,ne),-I[1]),_(p(Ae,q),b[1]))),f[2]),_(m(_(p(Ce,Pe),f[1]),m(_(p(Te,Q),-I[1]),_(p(he,T),b[1]))),-x[2])),m(_(m(_(p(me,ne),f[1]),m(_(p(Te,Q),-x[1]),_(p(V,B),b[1]))),I[2]),_(m(_(p(Ae,q),f[1]),m(_(p(he,T),-x[1]),_(p(V,B),I[1]))),-b[2]))),C[3]))),m(m(_(m(m(_(m(_(p(ye,se),x[1]),m(_(p(me,ne),-C[1]),_(p(J,j),b[1]))),f[2]),_(m(_(p(ye,se),f[1]),m(_(p(Te,Q),-C[1]),_(p(oe,w),b[1]))),-x[2])),m(_(m(_(p(me,ne),f[1]),m(_(p(Te,Q),-x[1]),_(p(V,B),b[1]))),C[2]),_(m(_(p(J,j),f[1]),m(_(p(oe,w),-x[1]),_(p(V,B),C[1]))),-b[2]))),-I[3]),_(m(m(_(m(_(p(_e,ee),x[1]),m(_(p(Ae,q),-C[1]),_(p(J,j),I[1]))),f[2]),_(m(_(p(_e,ee),f[1]),m(_(p(he,T),-C[1]),_(p(oe,w),I[1]))),-x[2])),m(_(m(_(p(Ae,q),f[1]),m(_(p(he,T),-x[1]),_(p(V,B),I[1]))),C[2]),_(m(_(p(J,j),f[1]),m(_(p(oe,w),-x[1]),_(p(V,B),C[1]))),-I[2]))),b[3])),m(_(m(m(_(m(_(p(Ce,Pe),x[1]),m(_(p(me,ne),-I[1]),_(p(Ae,q),b[1]))),y[2]),_(m(_(p(Ce,Pe),y[1]),m(_(p(be,U),-I[1]),_(p(ue,Y),b[1]))),-x[2])),m(_(m(_(p(me,ne),y[1]),m(_(p(be,U),-x[1]),_(p(W,H),b[1]))),I[2]),_(m(_(p(Ae,q),y[1]),m(_(p(ue,Y),-x[1]),_(p(W,H),I[1]))),-b[2]))),f[3]),_(m(m(_(m(_(p(Ce,Pe),x[1]),m(_(p(me,ne),-I[1]),_(p(Ae,q),b[1]))),f[2]),_(m(_(p(Ce,Pe),f[1]),m(_(p(Te,Q),-I[1]),_(p(he,T),b[1]))),-x[2])),m(_(m(_(p(me,ne),f[1]),m(_(p(Te,Q),-x[1]),_(p(V,B),b[1]))),I[2]),_(m(_(p(Ae,q),f[1]),m(_(p(he,T),-x[1]),_(p(V,B),I[1]))),-b[2]))),-y[3])))),m(m(m(_(m(m(_(m(_(p(Ce,Pe),y[1]),m(_(p(be,U),-I[1]),_(p(ue,Y),b[1]))),f[2]),_(m(_(p(Ce,Pe),f[1]),m(_(p(Te,Q),-I[1]),_(p(he,T),b[1]))),-y[2])),m(_(m(_(p(be,U),f[1]),m(_(p(Te,Q),-y[1]),_(p(F,E),b[1]))),I[2]),_(m(_(p(ue,Y),f[1]),m(_(p(he,T),-y[1]),_(p(F,E),I[1]))),-b[2]))),x[3]),_(m(m(_(m(_(p(me,ne),y[1]),m(_(p(be,U),-x[1]),_(p(W,H),b[1]))),f[2]),_(m(_(p(me,ne),f[1]),m(_(p(Te,Q),-x[1]),_(p(V,B),b[1]))),-y[2])),m(_(m(_(p(be,U),f[1]),m(_(p(Te,Q),-y[1]),_(p(F,E),b[1]))),x[2]),_(m(_(p(W,H),f[1]),m(_(p(V,B),-y[1]),_(p(F,E),x[1]))),-b[2]))),-I[3])),m(_(m(m(_(m(_(p(Ae,q),y[1]),m(_(p(ue,Y),-x[1]),_(p(W,H),I[1]))),f[2]),_(m(_(p(Ae,q),f[1]),m(_(p(he,T),-x[1]),_(p(V,B),I[1]))),-y[2])),m(_(m(_(p(ue,Y),f[1]),m(_(p(he,T),-y[1]),_(p(F,E),I[1]))),x[2]),_(m(_(p(W,H),f[1]),m(_(p(V,B),-y[1]),_(p(F,E),x[1]))),-I[2]))),b[3]),_(m(m(_(m(_(p(_e,ee),x[1]),m(_(p(Ae,q),-C[1]),_(p(J,j),I[1]))),y[2]),_(m(_(p(_e,ee),y[1]),m(_(p(ue,Y),-C[1]),_(p(ie,z),I[1]))),-x[2])),m(_(m(_(p(Ae,q),y[1]),m(_(p(ue,Y),-x[1]),_(p(W,H),I[1]))),C[2]),_(m(_(p(J,j),y[1]),m(_(p(ie,z),-x[1]),_(p(W,H),C[1]))),-I[2]))),f[3]))),m(m(_(m(m(_(m(_(p(_e,ee),x[1]),m(_(p(Ae,q),-C[1]),_(p(J,j),I[1]))),f[2]),_(m(_(p(_e,ee),f[1]),m(_(p(he,T),-C[1]),_(p(oe,w),I[1]))),-x[2])),m(_(m(_(p(Ae,q),f[1]),m(_(p(he,T),-x[1]),_(p(V,B),I[1]))),C[2]),_(m(_(p(J,j),f[1]),m(_(p(oe,w),-x[1]),_(p(V,B),C[1]))),-I[2]))),-y[3]),_(m(m(_(m(_(p(_e,ee),y[1]),m(_(p(ue,Y),-C[1]),_(p(ie,z),I[1]))),f[2]),_(m(_(p(_e,ee),f[1]),m(_(p(he,T),-C[1]),_(p(oe,w),I[1]))),-y[2])),m(_(m(_(p(ue,Y),f[1]),m(_(p(he,T),-y[1]),_(p(F,E),I[1]))),C[2]),_(m(_(p(ie,z),f[1]),m(_(p(oe,w),-y[1]),_(p(F,E),C[1]))),-I[2]))),x[3])),m(_(m(m(_(m(_(p(Ae,q),y[1]),m(_(p(ue,Y),-x[1]),_(p(W,H),I[1]))),f[2]),_(m(_(p(Ae,q),f[1]),m(_(p(he,T),-x[1]),_(p(V,B),I[1]))),-y[2])),m(_(m(_(p(ue,Y),f[1]),m(_(p(he,T),-y[1]),_(p(F,E),I[1]))),x[2]),_(m(_(p(W,H),f[1]),m(_(p(V,B),-y[1]),_(p(F,E),x[1]))),-I[2]))),-C[3]),_(m(m(_(m(_(p(J,j),y[1]),m(_(p(ie,z),-x[1]),_(p(W,H),C[1]))),f[2]),_(m(_(p(J,j),f[1]),m(_(p(oe,w),-x[1]),_(p(V,B),C[1]))),-y[2])),m(_(m(_(p(ie,z),f[1]),m(_(p(oe,w),-y[1]),_(p(F,E),C[1]))),x[2]),_(m(_(p(W,H),f[1]),m(_(p(V,B),-y[1]),_(p(F,E),x[1]))),-C[2]))),I[3]))))),Ze=p(ve,De);return Ze[Ze.length-1]}}var u=[function(){return 0},function(){return 0},function(){return 0}];function h(m){var p=u[m.length];return p||(p=u[m.length]=s(m.length)),p.apply(void 0,m)}function A(m,p,g,_,f,y,x,C){return function(I,b,P,E,B,w){switch(arguments.length){case 0:case 1:return 0;case 2:return _(I,b);case 3:return f(I,b,P);case 4:return y(I,b,P,E);case 5:return x(I,b,P,E,B);case 6:return C(I,b,P,E,B,w)}for(var T=Array(arguments.length),Q=0;Q<arguments.length;++Q)T[Q]=arguments[Q];return m(T)}}(function(){for(;u.length<=6;)u.push(s(u.length));t.exports=A.apply(void 0,[h].concat(u));for(var m=0;m<=6;++m)t.exports[m]=u[m]})()}}),d0i=mm({"node_modules/cdt2d/lib/delaunay.js"(e,t){var n=l0i()[4];NCe();function o(i,r,s,a,c,l){var d=r.opposite(a,c);if(!(d<0)){if(c<a){var u=a;a=c,c=u,u=l,l=d,d=u}r.isConstraint(a,c)||n(i[a],i[c],i[l],i[d])<0&&s.push(a,c)}}t.exports=function(i,r){for(var s=[],a=i.length,c=r.stars,l=0;l<a;++l)for(var d=c[l],u=1;u<d.length;u+=2)if(!((p=d[u])<l)&&!r.isConstraint(l,p)){for(var h=d[u-1],A=-1,m=1;m<d.length;m+=2)if(d[m-1]===p){A=d[m];break}A<0||n(i[l],i[p],i[h],i[A])<0&&s.push(l,p)}for(;s.length>0;){for(var p=s.pop(),g=(h=-1,A=-1,d=c[l=s.pop()],1);g<d.length;g+=2){var _=d[g-1],f=d[g];_===p?A=f:f===p&&(h=_)}h<0||A<0||(n(i[l],i[p],i[h],i[A])>=0||(r.flip(l,p),o(i,r,s,h,l,A),o(i,r,s,l,A,h),o(i,r,s,A,p,h),o(i,r,s,p,h,A)))}}}}),u0i=mm({"node_modules/cdt2d/lib/filter.js"(e,t){var n=NCe();function o(r,s,a,c,l,d,u){this.cells=r,this.neighbor=s,this.flags=c,this.constraint=a,this.active=l,this.next=d,this.boundary=u}function i(r,s){return r[0]-s[0]||r[1]-s[1]||r[2]-s[2]}t.exports=function(r,s,a){var c=function(C,I){for(var b=C.cells(),P=b.length,E=0;E<P;++E){var B=(X=b[E])[0],w=X[1],T=X[2];w<T?w<B&&(X[0]=w,X[1]=T,X[2]=B):T<B&&(X[0]=T,X[1]=B,X[2]=w)}b.sort(i);var Q=Array(P);for(E=0;E<Q.length;++E)Q[E]=0;var N=[],F=[],H=Array(3*P),z=Array(3*P),Y=null;I&&(Y=[]);var U=new o(b,H,z,Q,N,F,Y);for(E=0;E<P;++E)for(var X=b[E],V=0;V<3;++V){B=X[V],w=X[(V+1)%3];var W=H[3*E+V]=U.locate(w,B,C.opposite(w,B)),j=z[3*E+V]=C.isConstraint(B,w);W<0&&(j?F.push(E):(N.push(E),Q[E]=1),I&&Y.push([w,B,-1]))}return U}(r,a);if(s===0)return a?c.cells.concat(c.boundary):c.cells;var l=1,{active:d,next:u,flags:h,cells:A,constraint:m,neighbor:p}=c;for(;d.length>0||u.length>0;){for(;d.length>0;){var g=d.pop();if(h[g]!==-l){h[g]=l,A[g];for(var _=0;_<3;++_){var f=p[3*g+_];f>=0&&h[f]===0&&(m[3*g+_]?u.push(f):(d.push(f),h[f]=l))}}}var y=u;u=d,d=y,u.length=0,l=-l}var x=function(C,I,b){for(var P=0,E=0;E<C.length;++E)I[E]===b&&(C[P++]=C[E]);return C.length=P,C}(A,h,s);if(a)return x.concat(c.boundary);return x},o.prototype.locate=function(){var r=[0,0,0];return function(s,a,c){var l=s,d=a,u=c;return a<c?a<s&&(l=a,d=c,u=s):c<s&&(l=c,d=s,u=a),l<0?-1:(r[0]=l,r[1]=d,r[2]=u,n.eq(this.cells,r,i))}}()}}),h0i=mm({"node_modules/cdt2d/cdt2d.js"(e,t){var n=a0i(),o=c0i(),i=d0i(),r=u0i();function s(l){return[Math.min(l[0],l[1]),Math.max(l[0],l[1])]}function a(l,d){return l[0]-d[0]||l[1]-d[1]}function c(l,d,u){return d in l?l[d]:u}t.exports=function(l,d,u){Array.isArray(d)?(u=u||{},d=d||[]):(u=d||{},d=[]);var h=!!c(u,"delaunay",!0),A=!!c(u,"interior",!0),m=!!c(u,"exterior",!0),p=!!c(u,"infinity",!1);if(!A&&!m||l.length===0)return[];var g=n(l,d);if(h||A!==m||p){for(var _=o(l.length,function(x){return x.map(s).sort(a)}(d)),f=0;f<g.length;++f){var y=g[f];_.addTriangle(y[0],y[1],y[2])}return h&&i(l,_),m?A?p?r(_,0,p):_.cells():r(_,1,p):r(_,-1)}return g}}}),N$t={0:"M0.301025 0.257813 L0.206593 0.283385 L0.122042 0.361307 L0.075923 0.474441 L0.064942 0.642221 L0.091296 0.78289 L0.159376 0.899463 L0.257104 0.961214 L0.344948 0.961214 L0.442678 0.899463 L0.510757 0.78289 L0.537111 0.642221 L0.526131 0.474441 L0.480012 0.361307 L0.39546 0.283385 L0.301025 0.257813",1:"M0.220426 0.40845 L0.381626 0.270996 L0.381626 0.948966",2:"M0.110409 0.39212 L0.125621 0.342293 L0.170571 0.295823 L0.244237 0.26431 L0.291518 0.257813 L0.373319 0.263799 L0.434683 0.290705 L0.468239 0.331966 L0.480292 0.379913 L0.479492 0.411806 L0.465088 0.465192 L0.402571 0.568988 L0.245134 0.766438 L0.07959 0.948045 L0.522462 0.948045",3:"M0.081606 0.345073 L0.119154 0.315633 L0.178996 0.284091 L0.255265 0.257813 L0.349133 0.263062 L0.43127 0.289348 L0.48994 0.336662 L0.525141 0.394491 L0.513407 0.457577 L0.466472 0.504892 L0.384334 0.541692 L0.290464 0.56272 L0.20833 0.573235 L0.290464 0.583749 L0.384334 0.610035 L0.466472 0.652092 L0.519274 0.709922 L0.531007 0.773007 L0.50754 0.841351 L0.454738 0.899179 L0.3726 0.946494 L0.310412 0.961214 L0.209503 0.959111 L0.127367 0.946494 L0.071046 0.929671",4:"M0.418494 0.270996 L0.048828 0.724199 L0.553224 0.724199 M0.414181 0.578167 L0.414181 0.94897",5:"M0.074951 0.270996 L0.074951 0.614701 L0.267655 0.5695 L0.405247 0.586502 L0.460002 0.617189 L0.498028 0.660731 L0.527101 0.779401 L0.513352 0.841049 L0.477274 0.889568 L0.406378 0.93463 L0.324445 0.958337 L0.247399 0.962139 L0.182516 0.949767 L0.130068 0.925508 L0.074951 0.875607 M0.074951 0.270996 L0.527101 0.270996",6:"M0.428549 0.257813 L0.341433 0.285053 L0.26073 0.312099 L0.192188 0.360182 L0.138902 0.410969 L0.098219 0.500422 L0.070249 0.584267 L0.067264 0.670716 L0.065164 0.756863 L0.087163 0.820973 L0.108168 0.861042 L0.157916 0.913131 L0.210981 0.948192 L0.29279 0.961214 L0.384548 0.956206 L0.456409 0.924151 L0.507262 0.881077 L0.5349 0.821975 L0.537111 0.771889 L0.521634 0.718798 L0.498418 0.67372 L0.463042 0.636657 L0.414398 0.613617 L0.34696 0.598591 L0.28284 0.595587 L0.215403 0.605604 L0.145756 0.641665 L0.109274 0.678729 L0.064942 0.724006",7:"M0.071534 0.270996 L0.530519 0.270996 L0.495935 0.291702 L0.477752 0.305407 L0.435186 0.346112 L0.412067 0.374136 L0.388565 0.40796 L0.365315 0.448098 L0.342943 0.495062 L0.322081 0.549366 L0.303364 0.611524 L0.287416 0.68205 L0.270077 0.80465 L0.26253 0.94897",8:"M0.286761 0.257813 L0.210684 0.27162 L0.1414 0.305622 L0.092494 0.382125 L0.111513 0.450128 L0.16857 0.502193 L0.228345 0.539382 L0.377781 0.594635 L0.470161 0.645637 L0.52586 0.706203 L0.538087 0.792269 L0.506841 0.87621 L0.438915 0.927212 L0.339743 0.961214 L0.263666 0.959089 L0.174004 0.929337 L0.102003 0.881523 L0.063965 0.811395 L0.066682 0.741266 L0.102003 0.671139 L0.180797 0.608448 L0.259591 0.580822 L0.358762 0.548945 L0.456576 0.49688 L0.486463 0.446941 L0.487822 0.362999 L0.453859 0.302434 L0.384574 0.265245 L0.286761 0.257813",9:"M0.511026 0.437812 L0.491026 0.347812 L0.451026 0.297812 L0.391026 0.267812 L0.311026 0.257813 L0.231026 0.267812 L0.161026 0.297812 L0.111026 0.347812 L0.091026 0.417812 L0.111026 0.487812 L0.161026 0.537812 L0.231026 0.567812 L0.311026 0.577812 L0.391026 0.557812 L0.451026 0.517812 L0.491026 0.477812 L0.511026 0.437812 M0.510026 0.438812 L0.434026 0.636812 L0.381026 0.777812 L0.337026 0.879812 L0.301026 0.957812","!":"M0.301026 0.270996 L0.301026 0.749566 M0.251466 0.94897 L0.350587 0.94897",'"':"M0.16504 0.270996 L0.16504 0.523022 M0.437013 0.270996 L0.437013 0.523022","#":"M0.20958 0.282227 L0.146515 0.949754 M0.461844 0.282227 L0.398779 0.949754 M0.032999 0.526969 L0.600587 0.452796 M0.001465 0.82366 L0.569055 0.749486",$:"M0.307121 0.240234 L0.307121 1.083502 M0.490031 0.415915 L0.404676 0.328075 L0.23396 0.310507 L0.136407 0.398347 L0.099828 0.521324 L0.124213 0.591596 L0.197379 0.644299 L0.429061 0.697003 L0.502224 0.749708 L0.526613 0.837547 L0.477836 0.960526 L0.355897 1.013228 L0.197379 0.99566 L0.112021 0.942957 L0.07544 0.837547","'":"M0.301026 0.270996 L0.301026 0.523022","(":"M0.413087 0.241211 L0.372337 0.28347 L0.331589 0.334184 L0.290838 0.393349 L0.25009 0.460965 L0.219528 0.528584 L0.199153 0.5962 L0.188966 0.655364 L0.199153 0.714529 L0.219528 0.782146 L0.25009 0.849764 L0.290838 0.91738 L0.331589 0.976544 L0.372337 1.027258 L0.413087 1.069491",")":"M0.188966 0.241211 L0.229716 0.28347 L0.270466 0.334184 L0.311213 0.393349 L0.351964 0.460965 L0.382526 0.528584 L0.4029 0.5962 L0.413087 0.655364 L0.4029 0.714529 L0.382526 0.782146 L0.351964 0.849764 L0.311213 0.91738 L0.270466 0.976544 L0.229716 1.027258 L0.188966 1.069491","*":"M0.301026 0.458702 L0.301026 0.681942 M0.301026 0.458702 L0.520997 0.536834 M0.301026 0.458702 L0.439954 0.257813 M0.301026 0.458702 L0.162098 0.257813 M0.301026 0.458702 L0.081055 0.536834","+":"M0.042969 0.66845 L0.559083 0.66845 M0.301023 0.428223 L0.301023 0.908661",",":"M0.38672 0.852051 L0.215333 1.030661 L0.301025 1.119971","-":"M0.173829 0.686035 L0.428224 0.686035",".":"M0.362549 0.851074 L0.239503 0.851074","/":"M0.062501 1.035249 L0.539551 0.270996","<":"M0.559083 0.441895 L0.042969 0.66939 L0.042969 0.66939 L0.559083 0.896902","=":"M0.042969 0.545898 L0.559083 0.545898 M0.042969 0.80837 L0.559083 0.80837",">":"M0.042969 0.441895 L0.559083 0.66939 L0.559083 0.66939 L0.042969 0.896902",A:"M0.018067 0.94897 L0.290179 0.270996 L0.583986 0.94897 M0.155303 0.684521 L0.433548 0.684521",B:"M0.063965 0.94897 L0.063965 0.278953 L0.209356 0.270996 L0.342486 0.294394 L0.432179 0.37292 L0.418224 0.48773 L0.312686 0.549166 L0.084728 0.575531 L0.306377 0.589434 L0.468877 0.647456 L0.538087 0.736658 L0.5324 0.85202 L0.501247 0.902983 L0.42355 0.944398 L0.063965 0.94897",C:"M0.529054 0.419847 L0.498425 0.345196 L0.442238 0.292341 L0.33583 0.257813 L0.257199 0.268357 L0.187906 0.303748 L0.120243 0.385432 L0.072998 0.599844 L0.110073 0.815385 L0.165381 0.902183 L0.222883 0.942801 L0.334904 0.961214 L0.43253 0.937679 L0.504816 0.868999 L0.529054 0.772065",D:"M0.064454 0.94897 L0.071838 0.285078 L0.171217 0.270996 L0.247348 0.272633 L0.37101 0.306078 L0.462461 0.378304 L0.514748 0.475555 L0.535591 0.576392 L0.537599 0.652313 L0.528065 0.717381 L0.508562 0.772419 L0.445948 0.855695 L0.362356 0.90871 L0.225203 0.945862 L0.064454 0.94897",E:"M0.080078 0.270996 L0.080078 0.94897 M0.080078 0.270996 L0.521974 0.270996 M0.080078 0.609981 L0.389405 0.609981 M0.080078 0.94897 L0.521974 0.94897",F:"M0.086426 0.270996 L0.086426 0.94897 M0.091304 0.275607 L0.515626 0.275607 M0.091304 0.607677 L0.447344 0.607677",G:"M0.498034 0.284943 L0.374621 0.257813 L0.244219 0.268648 L0.160577 0.311997 L0.094556 0.398116 L0.056397 0.58404 L0.076752 0.785532 L0.120865 0.858197 L0.188947 0.916734 L0.271008 0.953591 L0.357069 0.961214 L0.43715 0.932047 L0.501262 0.858539 L0.545656 0.648611 L0.329595 0.648131",H:"M0.066895 0.270996 L0.066895 0.94897 M0.066895 0.595658 L0.530009 0.595658 M0.535157 0.270996 L0.535157 0.94897",I:"M0.301026 0.270996 L0.301026 0.94897",J:"M0.506839 0.270996 L0.507814 0.782193 L0.498468 0.846168 L0.480733 0.880789 L0.455864 0.90832 L0.426095 0.929408 L0.360746 0.954812 L0.302508 0.962139 L0.223573 0.953638 L0.16538 0.930312 L0.137072 0.907715 L0.116428 0.880312 L0.102822 0.848819 L0.095633 0.813947 L0.094239 0.776413",K:"M0.035401 0.270996 L0.035401 0.94897 M0.502258 0.316194 L0.035401 0.687823 M0.212484 0.582361 L0.566652 0.933903",L:"M0.07544 0.270996 L0.07544 0.94897 L0.526613 0.94897",M:"M0.042481 0.94897 L0.042481 0.270996 L0.301027 0.712492 L0.559571 0.270996 L0.559571 0.94897",N:"M0.067871 0.94897 L0.067871 0.270996 L0.534181 0.94897 L0.525031 0.270996",O:"M0.287293 0.961214 L0.19843 0.933567 L0.1172 0.849451 L0.057129 0.563945 L0.114348 0.350255 L0.18455 0.289392 L0.306101 0.257813 L0.42054 0.29572 L0.487543 0.365003 L0.544923 0.625294 L0.516366 0.789624 L0.465476 0.884596 L0.375084 0.949287 L0.287293 0.961214",P:"M0.070557 0.94897 L0.070557 0.28379 L0.20704 0.270996 L0.329134 0.278993 L0.408525 0.300514 L0.444022 0.317908 L0.500637 0.368929 L0.525796 0.423728 L0.531496 0.50384 L0.508934 0.554205 L0.473724 0.582043 L0.417577 0.604365 L0.336375 0.620372 L0.226014 0.629268 L0.082368 0.630258",Q:"M0.282435 1.050813 L0.195447 1.019646 L0.115933 0.924817 L0.057129 0.602943 L0.113139 0.362034 L0.18186 0.293418 L0.300844 0.257813 L0.412868 0.300553 L0.478457 0.37866 L0.534625 0.672103 L0.506671 0.857367 L0.456855 0.964437 L0.368371 1.037368 L0.282435 1.050813 M0.341225 0.815559 L0.544923 1.070653",R:"M0.034912 0.944112 L0.034912 0.288556 L0.227127 0.270996 L0.362038 0.276867 L0.443423 0.294907 L0.477644 0.309614 L0.505809 0.328757 L0.526616 0.352817 L0.544963 0.418061 L0.543241 0.475921 L0.524463 0.517817 L0.49076 0.546518 L0.444265 0.564799 L0.355195 0.578739 L0.047653 0.589627 M0.303054 0.617306 L0.56714 0.94897",S:"M0.483037 0.364333 L0.407613 0.267477 L0.22883 0.257813 L0.128623 0.327565 L0.087712 0.455539 L0.104656 0.518727 L0.168054 0.573307 L0.41928 0.617318 L0.503796 0.669342 L0.535157 0.759324 L0.493846 0.900055 L0.367668 0.961214 L0.205436 0.956661 L0.116711 0.907038 L0.066895 0.790334",T:"M0.022949 0.270996 L0.579103 0.270996 M0.309284 0.270996 L0.309284 0.94897",U:"M0.072022 0.270996 L0.07308 0.648875 L0.080372 0.75167 L0.099024 0.827813 L0.134786 0.885729 L0.181571 0.924023 L0.251464 0.95168 L0.339655 0.962139 L0.401553 0.951668 L0.45232 0.924086 L0.482701 0.891771 L0.495745 0.870529 L0.515699 0.81637 L0.525014 0.744626 L0.530031 0.272017",V:"M0.027832 0.270996 L0.320083 0.94897 L0.57422 0.270996",W:"M0 0.270996 L0.079799 0.940377 L0.285198 0.472884 L0.505255 0.94897 L0.602052 0.270996",X:"M0.009034 0.270996 L0.586805 0.94897 M0.593019 0.270996 L0.015246 0.94897",Y:"M0.018067 0.270996 L0.293132 0.574135 M0.583986 0.271959 L0.294954 0.57606 L0.305277 0.94897",Z:"M0.053711 0.270996 L0.548341 0.270996 L0.053711 0.94897 L0.548341 0.94897","[":"M0.404542 0.240234 L0.197511 0.240234 L0.197511 1.069424 L0.404542 1.069424","\\":"M0.062501 0.270996 L0.539551 1.035249","]":"M0.19751 0.240234 L0.404542 0.240234 L0.404542 1.069424 L0.19751 1.069424","^":"M0.035156 0.523931 L0.301024 0.270996 L0.566896 0.523931",_:"M0 1.160601 L0.602052 1.160601",a:"M0.527101 0.439941 L0.527101 0.973965 M0.527101 0.553824 L0.451366 0.477535 L0.376759 0.439941 L0.263722 0.439941 L0.187989 0.477535 L0.112255 0.553824 L0.074951 0.66881 L0.074951 0.745099 L0.112255 0.85898 L0.187989 0.93527 L0.263722 0.973965 L0.376759 0.973965 L0.451366 0.93527 L0.527101 0.85898",b:"M0.07666 0.240234 L0.07666 0.959985 M0.07666 0.582737 L0.151822 0.514237 L0.225865 0.480483 L0.338045 0.480483 L0.413211 0.514237 L0.488374 0.582737 L0.525392 0.685983 L0.525392 0.754485 L0.488374 0.856739 L0.413211 0.92524 L0.338045 0.959985 L0.225865 0.959985 L0.151822 0.92524 L0.07666 0.856739",c:"M0.512452 0.553823 L0.441624 0.477535 L0.371854 0.439941 L0.26614 0.439941 L0.195312 0.477535 L0.124486 0.553823 L0.0896 0.668808 L0.0896 0.745099 L0.124486 0.858979 L0.195312 0.93527 L0.26614 0.973965 L0.371854 0.973965 L0.441624 0.93527 L0.512452 0.858979",d:"M0.525392 0.240234 L0.525392 0.959985 M0.525392 0.582737 L0.450232 0.514237 L0.376189 0.480483 L0.264006 0.480483 L0.188844 0.514237 L0.11368 0.582737 L0.076661 0.685983 L0.076661 0.754485 L0.11368 0.856739 L0.188844 0.92524 L0.264006 0.959985 L0.376189 0.959985 L0.450232 0.92524 L0.525392 0.856739",e:"M0.059571 0.668808 L0.542482 0.668808 M0.542482 0.592521 L0.502641 0.516231 L0.461594 0.477535 L0.381914 0.439941 L0.261186 0.439941 L0.180299 0.477535 L0.099412 0.553823 L0.059571 0.668808 L0.059571 0.745099 L0.099412 0.858979 L0.180299 0.93527 L0.261186 0.973965 L0.381914 0.973965 L0.461594 0.93527 L0.542482 0.858979",f:"M0.512941 0.240234 L0.406984 0.240234 L0.301026 0.274346 L0.248047 0.374731 L0.248047 0.946817 M0.089112 0.476088 L0.459965 0.476088",g:"M0.525392 0.439941 L0.525392 0.989395 L0.488373 1.091918 L0.45023 1.126757 L0.376189 1.160601 L0.264004 1.160601 L0.188844 1.126757 L0.113681 1.058075 L0.076661 0.954555 M0.525392 0.542467 L0.45023 0.473786 L0.376189 0.439941 L0.264004 0.439941 L0.188844 0.473786 L0.113681 0.542467 L0.076661 0.645988 L0.076661 0.714669 L0.113681 0.817193 L0.188844 0.885875 L0.264004 0.920713 L0.376189 0.920713 L0.45023 0.885875 L0.525392 0.817193",h:"M0.092041 0.240234 L0.092041 0.946817 M0.092041 0.61058 L0.205937 0.509225 L0.282214 0.476086 L0.396109 0.476086 L0.47187 0.509225 L0.510011 0.61058 L0.510011 0.946817",i:"M0.261026 0.240234 L0.341026 0.240234 M0.300978 0.476089 L0.300978 0.946817",j:"M0.3853 0.240234 L0.447023 0.240234 M0.416159 0.465708 L0.416159 1.011689 L0.383887 1.108586 L0.252832 1.140264 L0.15503 1.108586",k:"M0.065186 0.240234 L0.065186 0.946817 M0.493824 0.476086 L0.065186 0.812323 M0.236758 0.677829 L0.536867 0.946817",l:"M0.301026 0.234863 L0.301026 0.946441",m:"M0.050538 0.439941 L0.050538 0.960796 M0.050538 0.588758 L0.114405 0.476607 L0.157178 0.439941 L0.236864 0.439941 L0.279637 0.476607 L0.32241 0.588758 L0.32241 0.960796 M0.32241 0.588758 L0.386281 0.476607 L0.428467 0.439941 L0.50874 0.439941 L0.551515 0.476607 L0.551515 0.960796",n:"M0.092041 0.439941 L0.092041 0.960796 M0.092041 0.588758 L0.205936 0.476607 L0.282216 0.439941 L0.396113 0.439941 L0.471871 0.476607 L0.510011 0.588758 L0.510011 0.960796",o:"M0.247175 0.439941 L0.175178 0.477535 L0.103186 0.553823 L0.066895 0.668808 L0.066895 0.745099 L0.103186 0.858979 L0.175178 0.93527 L0.247175 0.973965 L0.354874 0.973965 L0.426872 0.93527 L0.498866 0.858979 L0.535157 0.745099 L0.535157 0.668808 L0.498866 0.553823 L0.426872 0.477535 L0.354874 0.439941 L0.247175 0.439941",p:"M0.076904 0.439941 L0.076904 1.154244 M0.076904 0.541563 L0.151986 0.473487 L0.225944 0.439941 L0.338005 0.439941 L0.413087 0.473487 L0.488166 0.541563 L0.525148 0.644169 L0.525148 0.712246 L0.488166 0.813866 L0.413087 0.881942 L0.338005 0.916471 L0.225944 0.916471 L0.151986 0.881942 L0.076904 0.813866",q:"M0.525148 0.441895 L0.525148 1.156195 M0.525148 0.5435 L0.450067 0.47544 L0.376106 0.441895 L0.264042 0.441895 L0.188966 0.47544 L0.113885 0.5435 L0.076905 0.646108 L0.076905 0.714187 L0.113885 0.815809 L0.188966 0.883886 L0.264042 0.918418 L0.376106 0.918418 L0.450067 0.883886 L0.525148 0.815809",r:"M0.107422 0.439941 L0.107422 0.960796 M0.107422 0.663164 L0.155824 0.551014 L0.252626 0.476607 L0.349428 0.439941 L0.49463 0.439941",s:"M0.475556 0.477535 L0.400757 0.439941 L0.276092 0.439941 L0.176361 0.477535 L0.101563 0.553823 L0.101563 0.630112 L0.176361 0.668808 L0.301024 0.668808 L0.425688 0.745099 L0.50049 0.821387 L0.50049 0.897677 L0.425688 0.93527 L0.325956 0.973965 L0.201295 0.973965 L0.126496 0.93527 L0.101563 0.858979",t:"M0.246032 0.297852 L0.246032 0.826549 L0.301023 0.919323 L0.411011 0.950848 L0.520997 0.950848 M0.081055 0.515799 L0.466004 0.515799",u:"M0.092041 0.454102 L0.092041 0.826134 L0.13018 0.937211 L0.205936 0.974954 L0.319832 0.974954 L0.396113 0.937211 L0.510011 0.826134 M0.510011 0.454102 L0.510011 0.974954",v:"M0.048828 0.453125 L0.301026 0.961719 M0.553224 0.453125 L0.301026 0.961719",w:"M0 0.453125 L0.150512 0.961719 M0.301024 0.453125 L0.150512 0.961719 M0.301024 0.453125 L0.451539 0.961719 M0.602052 0.453125 L0.451539 0.961719",x:"M0.03711 0.453125 L0.564943 0.961719 M0.564943 0.453125 L0.03711 0.961719",y:"M0.084618 0.453125 L0.320232 0.921476 M0.55713 0.453125 L0.320232 0.921476 L0.242119 1.055289 L0.163369 1.122196 L0.084618 1.155166 L0.044922 1.155166",z:"M0.505373 0.452148 L0.09668 0.961651 M0.09668 0.452148 L0.505373 0.452148 M0.09668 0.961651 L0.505373 0.961651"},R$t={};for(let e in N$t){R$t[e]=[];let t=N$t[e].split("M").slice(1).map((n)=>n.split("L").map((o)=>o.trim().split(" ").map(parseFloat)));for(let n of t)for(let o=0;o<n.length-1;o++)R$t[e].push({x1:n[o][0],y1:1-n[o][1],x2:n[o+1][0],y2:1-n[o+1][1]})}(()=>{let e=new Uint8Array(4);new Uint32Array(e.buffer)[0]=1,e[0]})(),globalThis.Int8Array,globalThis.Uint8Array,globalThis.Int16Array,globalThis.Uint16Array,globalThis.Int32Array,globalThis.Uint32Array,globalThis.BigUint64Array,globalThis.BigInt64Array,globalThis.Float32Array,globalThis.Float64Array;var m0i=[];for(let e=0;e<256;e++){let t=e;for(let n=0;n<8;n++)1&t?t=3988292384^t>>>1:t>>>=1;m0i[e]=t}var p0i=new Uint16Array([255]),A0i=(new Uint8Array(p0i.buffer)[0],new Uint16Array([255]));new Uint8Array(A0i.buffer)[0],new Uint8Array(0),Uint8Array.of(137,80,78,71,13,10,26,10),new TextDecoder("latin1");function Xy(){return Xy=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var o in n)({}).hasOwnProperty.call(n,o)&&(e[o]=n[o])}return e},Xy.apply(null,arguments)}function Txe(e,t){return(Txe=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(n,o){return n.__proto__=o,n})(e,t)}function wsn(e){return(wsn=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)})(e)}function Tsn(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(t){}return(Tsn=function(){return!!e})()}function pVe(e){var t=typeof Map=="function"?new Map:void 0;return pVe=function(n){if(n===null||!function(i){try{return Function.toString.call(i).indexOf("[native code]")!==-1}catch(r){return typeof i=="function"}}(n))return n;if(typeof n!="function")throw TypeError("Super expression must either be null or a function");if(t!==void 0){if(t.has(n))return t.get(n);t.set(n,o)}function o(){return function(i,r,s){if(Tsn())return Reflect.construct.apply(null,arguments);var a=[null];a.push.apply(a,r);var c=new(i.bind.apply(i,a));return s&&Txe(c,s.prototype),c}(n,arguments,wsn(this).constructor)}return o.prototype=Object.create(n.prototype,{constructor:{value:o,enumerable:!1,writable:!0,configurable:!0}}),Txe(o,n)},pVe(e)}var _0i={1:`Passed invalid arguments to hsl, please pass multiple numbers e.g. hsl(360, 0.75, 0.4) or an object e.g. rgb({ hue: 255, saturation: 0.4, lightness: 0.75 }).
`,2:`Passed invalid arguments to hsla, please pass multiple numbers e.g. hsla(360, 0.75, 0.4, 0.7) or an object e.g. rgb({ hue: 255, saturation: 0.4, lightness: 0.75, alpha: 0.7 }).
`,3:`Passed an incorrect argument to a color function, please pass a string representation of a color.
`,4:`Couldn't generate valid rgb string from %s, it returned %s.
`,5:`Couldn't parse the color string. Please provide the color as a string in hex, rgb, rgba, hsl or hsla notation.
`,6:`Passed invalid arguments to rgb, please pass multiple numbers e.g. rgb(255, 205, 100) or an object e.g. rgb({ red: 255, green: 205, blue: 100 }).
`,7:`Passed invalid arguments to rgba, please pass multiple numbers e.g. rgb(255, 205, 100, 0.75) or an object e.g. rgb({ red: 255, green: 205, blue: 100, alpha: 0.75 }).
`,8:`Passed invalid argument to toColorString, please pass a RgbColor, RgbaColor, HslColor or HslaColor object.
`,9:`Please provide a number of steps to the modularScale helper.
`,10:`Please pass a number or one of the predefined scales to the modularScale helper as the ratio.
`,11:`Invalid value passed as base to modularScale, expected number or em string but got "%s"
`,12:`Expected a string ending in "px" or a number passed as the first argument to %s(), got "%s" instead.
`,13:`Expected a string ending in "px" or a number passed as the second argument to %s(), got "%s" instead.
`,14:`Passed invalid pixel value ("%s") to %s(), please pass a value like "12px" or 12.
`,15:`Passed invalid base value ("%s") to %s(), please pass a value like "12px" or 12.
`,16:`You must provide a template to this method.
`,17:`You passed an unsupported selector state to this method.
`,18:`minScreen and maxScreen must be provided as stringified numbers with the same units.
`,19:`fromSize and toSize must be provided as stringified numbers with the same units.
`,20:`expects either an array of objects or a single object with the properties prop, fromSize, and toSize.
`,21:"expects the objects in the first argument array to have the properties `prop`, `fromSize`, and `toSize`.\n\n",22:"expects the first argument object to have the properties `prop`, `fromSize`, and `toSize`.\n\n",23:`fontFace expects a name of a font-family.
`,24:`fontFace expects either the path to the font file(s) or a name of a local copy.
`,25:`fontFace expects localFonts to be an array.
`,26:`fontFace expects fileFormats to be an array.
`,27:`radialGradient requries at least 2 color-stops to properly render.
`,28:`Please supply a filename to retinaImage() as the first argument.
`,29:`Passed invalid argument to triangle, please pass correct pointingDirection e.g. 'right'.
`,30:"Passed an invalid value to `height` or `width`. Please provide a pixel based unit.\n\n",31:`The animation shorthand only takes 8 arguments. See the specification for more information: http://mdn.io/animation
`,32:`To pass multiple animations please supply them in arrays, e.g. animation(['rotate', '2s'], ['move', '1s'])
To pass a single animation please supply them in simple values, e.g. animation('rotate', '2s')
`,33:`The animation shorthand arrays can only have 8 elements. See the specification for more information: http://mdn.io/animation
`,34:`borderRadius expects a radius value as a string or number as the second argument.
`,35:`borderRadius expects one of "top", "bottom", "left" or "right" as the first argument.
`,36:`Property must be a string value.
`,37:`Syntax Error at %s.
`,38:`Formula contains a function that needs parentheses at %s.
`,39:`Formula is missing closing parenthesis at %s.
`,40:`Formula has too many closing parentheses at %s.
`,41:`All values in a formula must have the same unit or be unitless.
`,42:`Please provide a number of steps to the modularScale helper.
`,43:`Please pass a number or one of the predefined scales to the modularScale helper as the ratio.
`,44:`Invalid value passed as base to modularScale, expected number or em/rem string but got %s.
`,45:`Passed invalid argument to hslToColorString, please pass a HslColor or HslaColor object.
`,46:`Passed invalid argument to rgbToColorString, please pass a RgbColor or RgbaColor object.
`,47:`minScreen and maxScreen must be provided as stringified numbers with the same units.
`,48:`fromSize and toSize must be provided as stringified numbers with the same units.
`,49:`Expects either an array of objects or a single object with the properties prop, fromSize, and toSize.
`,50:`Expects the objects in the first argument array to have the properties prop, fromSize, and toSize.
`,51:`Expects the first argument object to have the properties prop, fromSize, and toSize.
`,52:`fontFace expects either the path to the font file(s) or a name of a local copy.
`,53:`fontFace expects localFonts to be an array.
`,54:`fontFace expects fileFormats to be an array.
`,55:`fontFace expects a name of a font-family.
`,56:`linearGradient requries at least 2 color-stops to properly render.
`,57:`radialGradient requries at least 2 color-stops to properly render.
`,58:`Please supply a filename to retinaImage() as the first argument.
`,59:`Passed invalid argument to triangle, please pass correct pointingDirection e.g. 'right'.
`,60:"Passed an invalid value to `height` or `width`. Please provide a pixel based unit.\n\n",61:`Property must be a string value.
`,62:`borderRadius expects a radius value as a string or number as the second argument.
`,63:`borderRadius expects one of "top", "bottom", "left" or "right" as the first argument.
`,64:`The animation shorthand only takes 8 arguments. See the specification for more information: http://mdn.io/animation.
`,65:`To pass multiple animations please supply them in arrays, e.g. animation(['rotate', '2s'], ['move', '1s'])\\nTo pass a single animation please supply them in simple values, e.g. animation('rotate', '2s').
`,66:`The animation shorthand arrays can only have 8 elements. See the specification for more information: http://mdn.io/animation.
`,67:`You must provide a template to this method.
`,68:`You passed an unsupported selector state to this method.
`,69:`Expected a string ending in "px" or a number passed as the first argument to %s(), got %s instead.
`,70:`Expected a string ending in "px" or a number passed as the second argument to %s(), got %s instead.
`,71:`Passed invalid pixel value %s to %s(), please pass a value like "12px" or 12.
`,72:`Passed invalid base value %s to %s(), please pass a value like "12px" or 12.
`,73:`Please provide a valid CSS variable.
`,74:`CSS variable not found and no default was provided.
`,75:`important requires a valid style object, got a %s instead.
`,76:`fromSize and toSize must be provided as stringified numbers with the same units as minScreen and maxScreen.
`,77:`remToPx expects a value in "rem" but you provided it in "%s".
`,78:`base must be set in "px" or "%" but you set it in "%s".
`};function g0i(){for(var e=arguments.length,t=Array(e),n=0;n<e;n++)t[n]=arguments[n];var o,i=t[0],r=[];for(o=1;o<t.length;o+=1)r.push(t[o]);return r.forEach(function(s){i=i.replace(/%[a-z]/,s)}),i}var Yy=function(e){var t,n;function o(i){var r;for(var s=arguments.length,a=Array(s>1?s-1:0),c=1;c<s;c++)a[c-1]=arguments[c];return r=e.call(this,g0i.apply(void 0,[_0i[i]].concat(a)))||this,function(l){if(l===void 0)throw ReferenceError("this hasn't been initialised - super() hasn't been called");return l}(r)}return n=e,(t=o).prototype=Object.create(n.prototype),t.prototype.constructor=t,Txe(t,n),o}(pVe(Error));function Q$t(e,t){return e.substr(-t.length)===t}var f0i=/^([+-]?(?:\d+|\d*\.\d+))([a-z]*|%)$/;function k$t(e){return typeof e!="string"?e:e.match(f0i)?parseFloat(e):e}var L$t=function(e){return function(t,n){n===void 0&&(n="16px");var o=t,i=n;if(typeof t=="string"){if(!Q$t(t,"px"))throw new Yy(69,e,t);o=k$t(t)}if(typeof n=="string"){if(!Q$t(n,"px"))throw new Yy(70,e,n);i=k$t(n)}if(typeof o=="string")throw new Yy(71,t,e);if(typeof i=="string")throw new Yy(72,n,e);return""+o/i+e}};L$t("em"),L$t("rem");function _Ge(e){return Math.round(255*e)}function y0i(e,t,n){return _Ge(e)+","+_Ge(t)+","+_Ge(n)}function tie(e,t,n,o){if(o===void 0&&(o=y0i),t===0)return o(n,n,n);var i=(e%360+360)%360/60,r=(1-Math.abs(2*n-1))*t,s=r*(1-Math.abs(i%2-1)),a=0,c=0,l=0;i>=0&&i<1?(a=r,c=s):i>=1&&i<2?(a=s,c=r):i>=2&&i<3?(c=r,l=s):i>=3&&i<4?(c=s,l=r):i>=4&&i<5?(a=s,l=r):i>=5&&i<6&&(a=r,l=s);var d=n-r/2;return o(a+d,c+d,l+d)}var F$t={aliceblue:"f0f8ff",antiquewhite:"faebd7",aqua:"00ffff",aquamarine:"7fffd4",azure:"f0ffff",beige:"f5f5dc",bisque:"ffe4c4",black:"000",blanchedalmond:"ffebcd",blue:"0000ff",blueviolet:"8a2be2",brown:"a52a2a",burlywood:"deb887",cadetblue:"5f9ea0",chartreuse:"7fff00",chocolate:"d2691e",coral:"ff7f50",cornflowerblue:"6495ed",cornsilk:"fff8dc",crimson:"dc143c",cyan:"00ffff",darkblue:"00008b",darkcyan:"008b8b",darkgoldenrod:"b8860b",darkgray:"a9a9a9",darkgreen:"006400",darkgrey:"a9a9a9",darkkhaki:"bdb76b",darkmagenta:"8b008b",darkolivegreen:"556b2f",darkorange:"ff8c00",darkorchid:"9932cc",darkred:"8b0000",darksalmon:"e9967a",darkseagreen:"8fbc8f",darkslateblue:"483d8b",darkslategray:"2f4f4f",darkslategrey:"2f4f4f",darkturquoise:"00ced1",darkviolet:"9400d3",deeppink:"ff1493",deepskyblue:"00bfff",dimgray:"696969",dimgrey:"696969",dodgerblue:"1e90ff",firebrick:"b22222",floralwhite:"fffaf0",forestgreen:"228b22",fuchsia:"ff00ff",gainsboro:"dcdcdc",ghostwhite:"f8f8ff",gold:"ffd700",goldenrod:"daa520",gray:"808080",green:"008000",greenyellow:"adff2f",grey:"808080",honeydew:"f0fff0",hotpink:"ff69b4",indianred:"cd5c5c",indigo:"4b0082",ivory:"fffff0",khaki:"f0e68c",lavender:"e6e6fa",lavenderblush:"fff0f5",lawngreen:"7cfc00",lemonchiffon:"fffacd",lightblue:"add8e6",lightcoral:"f08080",lightcyan:"e0ffff",lightgoldenrodyellow:"fafad2",lightgray:"d3d3d3",lightgreen:"90ee90",lightgrey:"d3d3d3",lightpink:"ffb6c1",lightsalmon:"ffa07a",lightseagreen:"20b2aa",lightskyblue:"87cefa",lightslategray:"789",lightslategrey:"789",lightsteelblue:"b0c4de",lightyellow:"ffffe0",lime:"0f0",limegreen:"32cd32",linen:"faf0e6",magenta:"f0f",maroon:"800000",mediumaquamarine:"66cdaa",mediumblue:"0000cd",mediumorchid:"ba55d3",mediumpurple:"9370db",mediumseagreen:"3cb371",mediumslateblue:"7b68ee",mediumspringgreen:"00fa9a",mediumturquoise:"48d1cc",mediumvioletred:"c71585",midnightblue:"191970",mintcream:"f5fffa",mistyrose:"ffe4e1",moccasin:"ffe4b5",navajowhite:"ffdead",navy:"000080",oldlace:"fdf5e6",olive:"808000",olivedrab:"6b8e23",orange:"ffa500",orangered:"ff4500",orchid:"da70d6",palegoldenrod:"eee8aa",palegreen:"98fb98",paleturquoise:"afeeee",palevioletred:"db7093",papayawhip:"ffefd5",peachpuff:"ffdab9",peru:"cd853f",pink:"ffc0cb",plum:"dda0dd",powderblue:"b0e0e6",purple:"800080",rebeccapurple:"639",red:"f00",rosybrown:"bc8f8f",royalblue:"4169e1",saddlebrown:"8b4513",salmon:"fa8072",sandybrown:"f4a460",seagreen:"2e8b57",seashell:"fff5ee",sienna:"a0522d",silver:"c0c0c0",skyblue:"87ceeb",slateblue:"6a5acd",slategray:"708090",slategrey:"708090",snow:"fffafa",springgreen:"00ff7f",steelblue:"4682b4",tan:"d2b48c",teal:"008080",thistle:"d8bfd8",tomato:"ff6347",turquoise:"40e0d0",violet:"ee82ee",wheat:"f5deb3",white:"fff",whitesmoke:"f5f5f5",yellow:"ff0",yellowgreen:"9acd32"},x0i=/^#[a-fA-F0-9]{6}$/,C0i=/^#[a-fA-F0-9]{8}$/,I0i=/^#[a-fA-F0-9]{3}$/,b0i=/^#[a-fA-F0-9]{4}$/,gGe=/^rgb\(\s*(\d{1,3})\s*(?:,)?\s*(\d{1,3})\s*(?:,)?\s*(\d{1,3})\s*\)$/i,S0i=/^rgb(?:a)?\(\s*(\d{1,3})\s*(?:,)?\s*(\d{1,3})\s*(?:,)?\s*(\d{1,3})\s*(?:,|\/)\s*([-+]?\d*[.]?\d+[%]?)\s*\)$/i,P0i=/^hsl\(\s*(\d{0,3}[.]?[0-9]+(?:deg)?)\s*(?:,)?\s*(\d{1,3}[.]?[0-9]?)%\s*(?:,)?\s*(\d{1,3}[.]?[0-9]?)%\s*\)$/i,v0i=/^hsl(?:a)?\(\s*(\d{0,3}[.]?[0-9]+(?:deg)?)\s*(?:,)?\s*(\d{1,3}[.]?[0-9]?)%\s*(?:,)?\s*(\d{1,3}[.]?[0-9]?)%\s*(?:,|\/)\s*([-+]?\d*[.]?\d+[%]?)\s*\)$/i;function XW(e){if(typeof e!="string")throw new Yy(3);var t=function(h){if(typeof h!="string")return h;var A=h.toLowerCase();return F$t[A]?"#"+F$t[A]:h}(e);if(t.match(x0i))return{red:parseInt(""+t[1]+t[2],16),green:parseInt(""+t[3]+t[4],16),blue:parseInt(""+t[5]+t[6],16)};if(t.match(C0i)){var n=parseFloat((parseInt(""+t[7]+t[8],16)/255).toFixed(2));return{red:parseInt(""+t[1]+t[2],16),green:parseInt(""+t[3]+t[4],16),blue:parseInt(""+t[5]+t[6],16),alpha:n}}if(t.match(I0i))return{red:parseInt(""+t[1]+t[1],16),green:parseInt(""+t[2]+t[2],16),blue:parseInt(""+t[3]+t[3],16)};if(t.match(b0i)){var o=parseFloat((parseInt(""+t[4]+t[4],16)/255).toFixed(2));return{red:parseInt(""+t[1]+t[1],16),green:parseInt(""+t[2]+t[2],16),blue:parseInt(""+t[3]+t[3],16),alpha:o}}var i=gGe.exec(t);if(i)return{red:parseInt(""+i[1],10),green:parseInt(""+i[2],10),blue:parseInt(""+i[3],10)};var r=S0i.exec(t.substring(0,50));if(r)return{red:parseInt(""+r[1],10),green:parseInt(""+r[2],10),blue:parseInt(""+r[3],10),alpha:parseFloat(""+r[4])>1?parseFloat(""+r[4])/100:parseFloat(""+r[4])};var s=P0i.exec(t);if(s){var a="rgb("+tie(parseInt(""+s[1],10),parseInt(""+s[2],10)/100,parseInt(""+s[3],10)/100)+")",c=gGe.exec(a);if(!c)throw new Yy(4,t,a);return{red:parseInt(""+c[1],10),green:parseInt(""+c[2],10),blue:parseInt(""+c[3],10)}}var l=v0i.exec(t.substring(0,50));if(l){var d="rgb("+tie(parseInt(""+l[1],10),parseInt(""+l[2],10)/100,parseInt(""+l[3],10)/100)+")",u=gGe.exec(d);if(!u)throw new Yy(4,t,d);return{red:parseInt(""+u[1],10),green:parseInt(""+u[2],10),blue:parseInt(""+u[3],10),alpha:parseFloat(""+l[4])>1?parseFloat(""+l[4])/100:parseFloat(""+l[4])}}throw new Yy(5)}function gD(e){return function(t){var n,o=t.red/255,i=t.green/255,r=t.blue/255,s=Math.max(o,i,r),a=Math.min(o,i,r),c=(s+a)/2;if(s===a)return t.alpha!==void 0?{hue:0,saturation:0,lightness:c,alpha:t.alpha}:{hue:0,saturation:0,lightness:c};var l=s-a,d=c>0.5?l/(2-s-a):l/(s+a);switch(s){case o:n=(i-r)/l+(i<r?6:0);break;case i:n=(r-o)/l+2;break;default:n=(o-i)/l+4}return n*=60,t.alpha!==void 0?{hue:n,saturation:d,lightness:c,alpha:t.alpha}:{hue:n,saturation:d,lightness:c}}(XW(e))}var AVe=function(e){return e.length===7&&e[1]===e[2]&&e[3]===e[4]&&e[5]===e[6]?"#"+e[1]+e[3]+e[5]:e};function jL(e){var t=e.toString(16);return t.length===1?"0"+t:t}function fGe(e){return jL(Math.round(255*e))}function E0i(e,t,n){return AVe("#"+fGe(e)+fGe(t)+fGe(n))}function $ye(e,t,n){return tie(e,t,n,E0i)}function _Ve(e,t,n){if(typeof e=="number"&&typeof t=="number"&&typeof n=="number")return AVe("#"+jL(e)+jL(t)+jL(n));if(typeof e=="object"&&t===void 0&&n===void 0)return AVe("#"+jL(e.red)+jL(e.green)+jL(e.blue));throw new Yy(6)}function RCe(e,t,n,o){if(typeof e=="string"&&typeof t=="number"){var i=XW(e);return"rgba("+i.red+","+i.green+","+i.blue+","+t+")"}if(typeof e=="number"&&typeof t=="number"&&typeof n=="number"&&typeof o=="number")return o>=1?_Ve(e,t,n):"rgba("+e+","+t+","+n+","+o+")";if(typeof e=="object"&&t===void 0&&n===void 0&&o===void 0)return e.alpha>=1?_Ve(e.red,e.green,e.blue):"rgba("+e.red+","+e.green+","+e.blue+","+e.alpha+")";throw new Yy(7)}function fD(e){if(typeof e!="object")throw new Yy(8);if(function(t){return typeof t.red=="number"&&typeof t.green=="number"&&typeof t.blue=="number"&&typeof t.alpha=="number"}(e))return RCe(e);if(function(t){return typeof t.red=="number"&&typeof t.green=="number"&&typeof t.blue=="number"&&(typeof t.alpha!="number"||t.alpha===void 0)}(e))return _Ve(e);if(function(t){return typeof t.hue=="number"&&typeof t.saturation=="number"&&typeof t.lightness=="number"&&typeof t.alpha=="number"}(e))return function(t,n,o,i){if(typeof t=="number"&&typeof n=="number"&&typeof o=="number"&&typeof i=="number")return i>=1?$ye(t,n,o):"rgba("+tie(t,n,o)+","+i+")";if(typeof t=="object"&&n===void 0&&o===void 0&&i===void 0)return t.alpha>=1?$ye(t.hue,t.saturation,t.lightness):"rgba("+tie(t.hue,t.saturation,t.lightness)+","+t.alpha+")";throw new Yy(2)}(e);if(function(t){return typeof t.hue=="number"&&typeof t.saturation=="number"&&typeof t.lightness=="number"&&(typeof t.alpha!="number"||t.alpha===void 0)}(e))return function(t,n,o){if(typeof t=="number"&&typeof n=="number"&&typeof o=="number")return $ye(t,n,o);if(typeof t=="object"&&n===void 0&&o===void 0)return $ye(t.hue,t.saturation,t.lightness);throw new Yy(1)}(e);throw new Yy(8)}function Dsn(e,t,n){return function(){var o=n.concat(Array.prototype.slice.call(arguments));return o.length>=t?e.apply(this,o):Dsn(e,t,o)}}function Yx(e){return Dsn(e,e.length,[])}Yx(function(e,t){if(t==="transparent")return t;var n=gD(t);return fD(Xy({},n,{hue:n.hue+parseFloat(e)}))});function yX(e,t,n){return Math.max(e,Math.min(t,n))}Yx(function(e,t){if(t==="transparent")return t;var n=gD(t);return fD(Xy({},n,{lightness:yX(0,1,n.lightness-parseFloat(e))}))});Yx(function(e,t){if(t==="transparent")return t;var n=gD(t);return fD(Xy({},n,{saturation:yX(0,1,n.saturation-parseFloat(e))}))});Yx(function(e,t){if(t==="transparent")return t;var n=gD(t);return fD(Xy({},n,{lightness:yX(0,1,n.lightness+parseFloat(e))}))});var Nsn=Yx(function(e,t,n){if(t==="transparent")return n;if(n==="transparent")return t;if(e===0)return n;var o=XW(t),i=Xy({},o,{alpha:typeof o.alpha=="number"?o.alpha:1}),r=XW(n),s=Xy({},r,{alpha:typeof r.alpha=="number"?r.alpha:1}),a=i.alpha-s.alpha,c=2*parseFloat(e)-1,l=((c*a===-1?c:c+a)/(1+c*a)+1)/2,d=1-l;return RCe({red:Math.floor(i.red*l+s.red*d),green:Math.floor(i.green*l+s.green*d),blue:Math.floor(i.blue*l+s.blue*d),alpha:i.alpha*parseFloat(e)+s.alpha*(1-parseFloat(e))})});Yx(function(e,t){if(t==="transparent")return t;var n=XW(t);return RCe(Xy({},n,{alpha:yX(0,1,(100*(typeof n.alpha=="number"?n.alpha:1)+100*parseFloat(e))/100)}))});Yx(function(e,t){if(t==="transparent")return t;var n=gD(t);return fD(Xy({},n,{saturation:yX(0,1,n.saturation+parseFloat(e))}))});Yx(function(e,t){return t==="transparent"?t:fD(Xy({},gD(t),{hue:parseFloat(e)}))});Yx(function(e,t){return t==="transparent"?t:fD(Xy({},gD(t),{lightness:parseFloat(e)}))});Yx(function(e,t){return t==="transparent"?t:fD(Xy({},gD(t),{saturation:parseFloat(e)}))});Yx(function(e,t){return t==="transparent"?t:Nsn(parseFloat(e),"rgb(0, 0, 0)",t)});Yx(function(e,t){return t==="transparent"?t:Nsn(parseFloat(e),"rgb(255, 255, 255)",t)});var kns=Yx(function(e,t){if(t==="transparent")return t;var n=XW(t);return RCe(Xy({},n,{alpha:yX(0,1,+(100*(typeof n.alpha=="number"?n.alpha:1)-100*parseFloat(e)).toFixed(2)/100)}))}),{cos:Lns,sin:Fns,PI:Hns}=Math,{tan:Ons}=Math,zns=(mVe(e0i()),mVe(i0i()),(e,t)=>({...e,rects:[...e.rects??[],...t.rects??[]],points:[...e.points??[],...t.points??[]],lines:[...e.lines??[],...t.lines??[]],infiniteLines:[...e.infiniteLines??[],...t.infiniteLines??[]],polygons:[...e.polygons??[],...t.polygons??[]],circles:[...e.circles??[],...t.circles??[]],arrows:[...e.arrows??[],...t.arrows??[]],texts:[...e.texts??[],...t.texts??[]]}));function yGe(e,t){if(e.points)for(let n of e.points)n.step=t;if(e.lines)for(let n of e.lines)n.step=t;if(e.infiniteLines)for(let n of e.infiniteLines)n.step=t;if(e.polygons)for(let n of e.polygons)n.step=t;if(e.rects)for(let n of e.rects)n.step=t;if(e.circles)for(let n of e.circles)n.step=t;if(e.texts)for(let n of e.texts)n.step=t;if(e.arrows)for(let n of e.arrows)n.step=t;return e}var MB=class{MAX_ITERATIONS=1e5;solved=!1;failed=!1;iterations=0;progress=0;error=null;activeSubSolver;failedSubSolvers;timeToSolve;stats={};_setupDone=!1;getSolverName(){return this.constructor.name}setup(){this._setupDone||(this._setup(),this._setupDone=!0)}_setup(){}step(){if(this._setupDone||this.setup(),!this.solved&&!this.failed){this.iterations++;try{this._step()}catch(e){throw this.error=`${this.getSolverName()} error: ${e}`,this.failed=!0,e}!this.solved&&this.iterations>=this.MAX_ITERATIONS&&this.tryFinalAcceptance(),!this.solved&&this.iterations>=this.MAX_ITERATIONS&&(this.error=`${this.getSolverName()} ran out of iterations`,this.failed=!0),"computeProgress"in this&&(this.progress=this.computeProgress())}}_step(){}getConstructorParams(){throw Error("getConstructorParams not implemented")}getOutput(){return null}solve(){let e=Date.now();for(;!this.solved&&!this.failed;)this.step();let t=Date.now();this.timeToSolve=t-e}visualize(){return{lines:[],points:[],rects:[],circles:[]}}tryFinalAcceptance(){}preview(){return{lines:[],points:[],rects:[],circles:[]}}};function wW(e,t,n,o={}){return{solverName:e,solverClass:t,getConstructorParams:n,onSolved:o.onSolved}}var Rsn=class extends MB{startTimeOfStage={};endTimeOfStage={};timeSpentOnStage={};firstIterationOfStage={};currentPipelineStageIndex=0;inputProblem;pipelineOutputs={};constructor(e){super(),this.inputProblem=e,this.MAX_ITERATIONS=1e6}_step(){let e=this.pipelineDef[this.currentPipelineStageIndex];if(!e)return void(this.solved=!0);if(this.activeSubSolver){if(this.activeSubSolver.step(),this.activeSubSolver.solved){this.endTimeOfStage[e.solverName]=performance.now(),this.timeSpentOnStage[e.solverName]=this.endTimeOfStage[e.solverName]-this.startTimeOfStage[e.solverName];let n=this.activeSubSolver.getOutput();n!==null&&(this.pipelineOutputs[e.solverName]=n),e.onSolved?.(this),this.activeSubSolver=null,this.currentPipelineStageIndex++}else this.activeSubSolver.failed&&(this.error=this.activeSubSolver?.error,this.failed=!0,this.activeSubSolver=null);return}let t=e.getConstructorParams(this);this.activeSubSolver=new e.solverClass(...t),this[e.solverName]=this.activeSubSolver,this.timeSpentOnStage[e.solverName]=0,this.startTimeOfStage[e.solverName]=performance.now(),this.firstIterationOfStage[e.solverName]=this.iterations}solveUntilStage(e){for(;this.getCurrentStageName().toLowerCase()!==e.toLowerCase()&&(this.step(),!this.failed&&!this.solved););}getCurrentStageName(){return this.pipelineDef[this.currentPipelineStageIndex]?.solverName??"none"}getStageProgress(){let e=this.pipelineDef.length;if(e===0)return 1;let t=this.activeSubSolver?.progress??0;return(this.currentPipelineStageIndex+t)/e}getStageStats(){let e={};for(let t of this.pipelineDef){let n=this.timeSpentOnStage[t.solverName]||0,o=this.firstIterationOfStage[t.solverName]||0,i=this.iterations,r=t.solverName===this.getCurrentStageName()?i-o:0,s=this.currentPipelineStageIndex>this.pipelineDef.findIndex((a)=>a.solverName===t.solverName);e[t.solverName]={timeSpent:n,iterations:r,completed:s}}return e}initialVisualize(){return null}finalVisualize(){return null}visualize(){if(!this.solved&&this.activeSubSolver)return this.activeSubSolver.visualize();let e=0,t=this.initialVisualize();t&&(yGe(t,0),e=1);let n=null;this.solved&&(n=this.finalVisualize());let o=[t].filter(Boolean).concat(this.pipelineDef.map((i,r)=>{let s=this[i.solverName],a=s?.visualize();return a?(yGe(a,r+e),a):null}).filter(Boolean));return o.length===0?{points:[],rects:[],lines:[],circles:[],texts:[]}:(this.solved&&n&&(yGe(n,o.length+e+1),o.push(n)),o.length===1?o[0]:{points:o.flatMap((i)=>i.points||[]),rects:o.flatMap((i)=>i.rects||[]),lines:o.flatMap((i)=>i.lines||[]),circles:o.flatMap((i)=>i.circles||[]),texts:o.flatMap((i)=>i.texts||[])})}preview(){return this.activeSubSolver?this.activeSubSolver.preview():super.preview()}computeProgress(){return this.getStageProgress()}getStageOutput(e){return this.pipelineOutputs[e]}getAllOutputs(){return{...this.pipelineOutputs}}hasStageOutput(e){return e in this.pipelineOutputs}getSolver(e){return this[e]}},M0i=class{constructor(e=1/0,t=Float64Array,n=Uint32Array){let o=e!==1/0;this.ids=o?new n(e):[],this.values=o?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 o=n-1>>1,i=this.values[o];if(t>=i)break;this.ids[n]=this.ids[o],this.values[n]=i,n=o}this.ids[n]=e,this.values[n]=t}pop(){if(this.length===0)return;let e=this.ids,t=this.values,n=e[0],o=--this.length;if(o>0){let i=e[o],r=t[o],s=0,a=o>>1;for(;s<a;){let c=1+(s<<1),l=c+1,d=c+(+(l<o)&+(t[l]<t[c]));if(t[d]>=r)break;e[s]=e[d],t[s]=t[d],s=d}e[s]=i,t[s]=r}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)}},H$t=[Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array],Qsn=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[o,i]=new Uint8Array(t,n+0,2);if(o!==251)throw Error("Data does not appear to be in a Flatbush format.");let r=i>>4;if(r!==3)throw Error(`Got v${r} data when expected v3.`);let s=H$t[15&i];if(!s)throw Error("Unrecognized array type.");let[a]=new Uint16Array(t,n+2,1),[c]=new Uint32Array(t,n+4,1);return new e(c,a,s,void 0,t,n)}constructor(t,n=16,o=Float64Array,i=ArrayBuffer,r,s=0){if(t===void 0)throw Error("Missing required argument: numItems.");if(isNaN(t)||t<=0)throw Error(`Unexpected numItems value: ${t}.`);this.numItems=+t,this.nodeSize=Math.min(Math.max(+n,2),65535),this.byteOffset=s;let a=t,c=a;this._levelBounds=[4*a];do a=Math.ceil(a/this.nodeSize),c+=a,this._levelBounds.push(4*c);while(a!==1);this.ArrayType=o,this.IndexArrayType=c<16384?Uint16Array:Uint32Array;let l=H$t.indexOf(o),d=4*c*o.BYTES_PER_ELEMENT;if(l<0)throw Error(`Unexpected typed array class: ${o}.`);let u=o,h=this.IndexArrayType;if(r)this.data=r,this._boxes=new u(r,s+8,4*c),this._indices=new h(r,s+8+d,c),this._pos=4*c,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 A=this.data=new i(8+d+c*this.IndexArrayType.BYTES_PER_ELEMENT);this._boxes=new u(A,8,4*c),this._indices=new h(A,8+d,c),this._pos=0,this.minX=1/0,this.minY=1/0,this.maxX=-1/0,this.maxY=-1/0,new Uint8Array(A,0,2).set([251,48+l]),new Uint16Array(A,2,1)[0]=n,new Uint32Array(A,4,1)[0]=t}this._queue=new M0i}add(t,n,o=t,i=n){let r=this._pos,s=r>>2,a=this._boxes;return this._indices[s]=s,a[r]=t,a[r+1]=n,a[r+2]=o,a[r+3]=i,this._pos=r+4,t<this.minX&&(this.minX=t),n<this.minY&&(this.minY=n),o>this.maxX&&(this.maxX=o),i>this.maxY&&(this.maxY=i),s}finish(){if(this._pos>>2!==this.numItems)throw Error(`Added ${this._pos>>2} items when expected ${this.numItems}.`);let t=this._boxes;if(this.numItems<=this.nodeSize)return t[this._pos++]=this.minX,t[this._pos++]=this.minY,t[this._pos++]=this.maxX,void(t[this._pos++]=this.maxY);let{numItems:n,minX:o,minY:i,nodeSize:r,_indices:s,_levelBounds:a}=this,c=this.maxX-o||1,l=this.maxY-i||1,d=new Int32Array(n),u=65535/c,h=65535/l;for(let m=0,p=0;m<n;m++){let g=t[p++],_=t[p++],f=u*((g+t[p++])/2-o)|0,y=h*((_+t[p++])/2-i)|0;d[m]=T0i(f,y)}(function(m,p,g,_,f,y){let x=[_,f];for(;x.length;){let C=x.pop()||0,I=x.pop()||0;if(C-I<=y&&Math.floor(I/y)>=Math.floor(C/y))continue;let b=m[I],P=m[I+C>>1],E=m[C],B=b>P!=b>E?b:P<b!=P<E?P:E,w=I-1,T=C+1;for(;;){do w++;while(m[w]<B);do T--;while(m[T]>B);if(w>=T)break;w0i(m,p,g,w,T)}x.push(I,T,T+1,C)}})(d,t,s,0,n-1,r);let A=4*n;for(let m=0,p=0;m<a.length-1;m++){let g=a[m];for(;p<g;){let _=p,f=t[p++],y=t[p++],x=t[p++],C=t[p++];for(let I=1;I<r&&p<g;I++)f=Math.min(f,t[p++]),y=Math.min(y,t[p++]),x=Math.max(x,t[p++]),C=Math.max(C,t[p++]);s[A>>2]=_,t[A++]=f,t[A++]=y,t[A++]=x,t[A++]=C}}this._pos=A}search(t,n,o,i,r){if(this._pos!==this._boxes.length)throw Error("Data not yet indexed - call index.finish().");let{_boxes:s,_levelBounds:a,_indices:c,nodeSize:l}=this,d=4*this.numItems,u=s.length-4,h=a.length-1,A=[],m=[],p=!1;for(;u!==void 0;){let g=Math.min(u+4*l,a[h]),_=u>=d;if(p)this._collectContained(u,g,h,d,m,r);else for(let f=u;f<g;f+=4){let y=s[f];if(o<y)continue;let x=s[f+1];if(i<x)continue;let C=s[f+2];if(t>C)continue;let I=s[f+3];if(n>I)continue;let b=0|c[f>>2];if(_){let P=+(t<=y&&n<=x&&o>=C&&i>=I);A.push(b|P,h-1)}else(r===void 0||r(b,y,x,C,I))&&m.push(b)}h=A.pop(),u=A.pop(),u!==void 0&&(p=!(1&~u),u&=-2)}return m}_collectContained(t,n,o,i,r,s){let a=this._boxes,c=this._indices,l=t;for(let u=o;u>0;u--)l=c[l>>2];let d=Math.min(l+(n-t)*this.nodeSize**o,i);if(s===void 0)for(;l<d;l+=4)r.push(0|c[l>>2]);else for(;l<d;l+=4){let u=0|c[l>>2];s(u,a[l],a[l+1],a[l+2],a[l+3])&&r.push(u)}}neighbors(t,n,o=1/0,i=1/0,r){if(this._pos!==this._boxes.length)throw Error("Data not yet indexed - call index.finish().");let{_boxes:s,_levelBounds:a,_indices:c,_queue:l,nodeSize:d}=this,u=4*this.numItems,h=4*d,A=[],m=o===1,p=i*i;for(l.push(s.length-4<<1,0);l.length;){let g=l.ids[0];if(1&g){if(l.pop(),A.push(g>>1),A.length===o)break;continue}l.pop();let _=g>>1,f=_<u,y=Math.min(_+h,B0i(_,a));for(let x=_;x<y;x+=4){let C=s[x],I=s[x+1],b=s[x+2],P=s[x+3],E=Math.max(Math.max(C-t,t-b),0),B=Math.max(Math.max(I-n,n-P),0),w=E*E+B*B;if(w>p)continue;let T=0|c[x>>2];f?(r===void 0||r(T))&&(l.push(T<<1|1,w),m&&w<p&&(p=w)):l.push(T<<1,w)}}return l.clear(),A}};function B0i(e,t){let n=0,o=t.length-1;for(;n<o;){let i=n+o>>1;t[i]>e?o=i:n=i+1}return t[n]}function w0i(e,t,n,o,i){let r=e[o];e[o]=e[i],e[i]=r;let s=4*o,a=4*i,c=t[s],l=t[s+1],d=t[s+2],u=t[s+3];t[s]=t[a],t[s+1]=t[a+1],t[s+2]=t[a+2],t[s+3]=t[a+3],t[a]=c,t[a+1]=l,t[a+2]=d,t[a+3]=u;let h=n[o];n[o]=n[i],n[i]=h}function T0i(e,t){let n=e^t,o=65535^n,i=65535^(e|t),r=e&(65535^t),s=n|o>>1,a=n>>1^n,c=i^i>>1^o&r>>1,l=r^n&i>>1^r>>1;return n=s&s>>2^a&a>>2,o=s&a>>2^a&(s^a)>>2,i=c^s&c>>2^a&l>>2,r=l^a&c>>2^(s^a)&l>>2,s=n&n>>4^o&o>>4,a=n&o>>4^o&(n^o)>>4,c=i^n&i>>4^o&r>>4,l=r^o&i>>4^(n^o)&r>>4,i=c^s&c>>8^a&l>>8,r=l^a&c>>8^(s^a)&l>>8,i^=i>>1,r^=r>>1,n=e^t,o=r|65535^(n|i),n=16711935&(n|n<<8),n=252645135&(n|n<<4),n=858993459&(n|n<<2),n=1431655765&(n|n<<1),o=16711935&(o|o<<8),o=252645135&(o|o<<4),o=858993459&(o|o<<2),o=1431655765&(o|o<<1),((o<<1|n)>>>0)-2147483648}var Zye=[{facingDirection:"x-",dx:-1,dy:0,startX:-0.5,startY:0.5,endX:-0.5,endY:-0.5},{facingDirection:"x+",dx:1,dy:0,startX:0.5,startY:0.5,endX:0.5,endY:-0.5},{facingDirection:"y-",dx:0,dy:-1,startX:-0.5,startY:-0.5,endX:0.5,endY:-0.5},{facingDirection:"y+",dx:0,dy:1,startX:0.5,startY:0.5,endX:-0.5,endY:0.5}],Gns={"x-":Zye.find((e)=>e.facingDirection==="x-"),"x+":Zye.find((e)=>e.facingDirection==="x+"),"y-":Zye.find((e)=>e.facingDirection==="y-"),"y+":Zye.find((e)=>e.facingDirection==="y+")};function D0i(e,t){let n=e.x-t.x,o=e.y-t.y;return Math.sqrt(n*n+o*o)}function Xr(e){let t=e.width/2,n=e.height/2;return{minX:e.center.x-t,maxX:e.center.x+t,minY:e.center.y-n,maxY:e.center.y+n}}function O$t(e,t,n){return Math.max(t,Math.min(n,e))}function N0i(e,t){let n=t.width/2,o=t.height/2,i=t.center.x-n,r=t.center.x+n,s=t.center.y-o,a=t.center.y+o;if(e.x>=i&&e.x<=r&&e.y>=s&&e.y<=a)return 0;return D0i(e,{x:O$t(e.x,i,r),y:O$t(e.y,s,a)})}var QCe=(e,t)=>!(e.maxX<t.minX||t.maxX<e.minX||e.maxY<t.minY||t.maxY<e.minY),um=(e)=>{let{center:t,width:n,height:o}=e,i=n/2,r=o/2;return{minX:t.x-i,maxX:t.x+i,minY:t.y-r,maxY:t.y+r}},R0i=class{cacheHitsByPrefix={};cacheMissesByPrefix={};isSyncCache=!0;cacheHits=0;cacheMisses=0;cache=new Map;getCachedSolutionSync(e){let t=this.cache.get(e);if(t!==void 0){this.cacheHits++;let n=e.split(":")[0];return this.cacheHitsByPrefix[n]=(this.cacheHitsByPrefix[n]||0)+1,structuredClone(t)}{this.cacheMisses++;let n=e.split(":")[0];return void(this.cacheMissesByPrefix[n]=(this.cacheMissesByPrefix[n]||0)+1)}}async getCachedSolution(e){return this.getCachedSolutionSync(e)}setCachedSolutionSync(e,t){this.cache.set(e,structuredClone(t))}async setCachedSolution(e,t){this.setCachedSolutionSync(e,t)}clearCache(){this.cache.clear(),this.cacheHits=0,this.cacheMisses=0,this.cacheHitsByPrefix={},this.cacheMissesByPrefix={}}getAllCacheKeys(){return Array.from(this.cache.keys())}},xGe="tscircuit_autorouter_cache_",Q0i=class{isSyncCache=!0;cacheHits=0;cacheMisses=0;cacheHitsByPrefix={};cacheMissesByPrefix={};constructor(){}getKey(e){return`${xGe}${e}`}getCachedSolutionSync(e){if(typeof localStorage>"u")return;let t=this.getKey(e);try{let n=localStorage.getItem(t);if(n!==null){let o=JSON.parse(n);this.cacheHits++;let i=e.split(":")[0];return this.cacheHitsByPrefix[i]=(this.cacheHitsByPrefix[i]||0)+1,o}{this.cacheMisses++;let o=e.split(":")[0];return void(this.cacheMissesByPrefix[o]=(this.cacheMissesByPrefix[o]||0)+1)}}catch(n){console.error(`Error getting cached solution sync for ${t}:`,n),this.cacheMisses++;let o=e.split(":")[0];return void(this.cacheMissesByPrefix[o]=(this.cacheMissesByPrefix[o]||0)+1)}}async getCachedSolution(e){return this.getCachedSolutionSync(e)}setCachedSolutionSync(e,t){if(typeof localStorage>"u")return;let n=this.getKey(e);try{let o=JSON.stringify(t);localStorage.setItem(n,o)}catch(o){console.error(`Error setting cached solution sync for ${n}:`,o),o instanceof DOMException&&(o.name==="QuotaExceededError"||o.name==="NS_ERROR_DOM_QUOTA_REACHED")&&console.warn(`LocalStorage quota exceeded. Failed to cache solution for ${n}. Consider clearing the cache.`)}}async setCachedSolution(e,t){this.setCachedSolutionSync(e,t)}clearCache(){if(typeof localStorage<"u")try{let e=[];for(let t=0;t<localStorage.length;t++){let n=localStorage.key(t);n?.startsWith(xGe)&&e.push(n)}e.forEach((t)=>localStorage.removeItem(t)),console.log(`Cleared ${e.length} items from LocalStorage cache.`)}catch(e){console.error("Error clearing LocalStorage cache:",e)}finally{this.cacheHits=0,this.cacheMisses=0,this.cacheHitsByPrefix={},this.cacheMissesByPrefix={}}}getAllCacheKeys(){let e=[];for(let t=0;t<1e4;t++){let n=localStorage.key(t);if(!n)break;n.includes(xGe)&&e.push(n)}return e}};function ksn(){globalThis.TSCIRCUIT_AUTOROUTER_LOCAL_STORAGE_CACHE??=new Q0i,globalThis.TSCIRCUIT_AUTOROUTER_IN_MEMORY_CACHE??=new R0i}function k0i(e){return"layers"in e&&Array.isArray(e.layers)}function L0i(e){return k0i(e)?e.layers:[e.layer]}var B3=(e,t)=>e==="top"?0:e==="bottom"?t-1:parseInt(e.slice(5));function Lsn(e,t){return[...new Set(e)].filter((n)=>Number.isInteger(n)&&n>=0&&n<t).sort((n,o)=>n-o)}function F0i(e,t){return Lsn(e.map((n)=>B3(n,t)),t)}var z$t=(...e)=>e.find((t)=>typeof t=="number"&&Number.isFinite(t)),kCe=(e)=>{let t=z$t(e.min_via_hole_diameter,e.minViaHoleDiameter),n=z$t(e.min_via_pad_diameter,e.minViaPadDiameter,e.minViaDiameter),o=Math.max(n??e.minViaDiameter??0.3,t??0);return{padDiameter:o,holeDiameter:t??0.5*o}};ksn();var Yns=Array.from({length:6},(e,t)=>t);var SB=(e,t={})=>{let n=Math.min(...e.availableZ);return{center:!t.rectMargin||t.zOffset?{x:e.center.x+n*e.width*(t.zOffset??0.05),y:e.center.y-n*e.width*(t.zOffset??0.05)}:e.center,width:t.rectMargin?e.width-2*t.rectMargin:Math.max(e.width-0.5,0.8*e.width),height:t.rectMargin?e.height-2*t.rectMargin:Math.max(e.height-0.5,0.8*e.height),fill:e._containsObstacle?"rgba(255,0,0,0.1)":{"0,1":"rgba(0,0,0,0.1)",0:"rgba(0,200,200, 0.1)",1:"rgba(0,0,200, 0.1)"}[e.availableZ.join(",")]??"rgba(0,200,200,0.1)",layer:`z${e.availableZ.join(",")}`,label:[e.capacityMeshNodeId,`availableZ: ${e.availableZ.join(",")}`,e._containsTarget?"containsTarget":"",e._containsObstacle?"containsObstacle":""].filter(Boolean).join(`
`)}};ksn();var{create:H0i,defineProperty:G$t,getOwnPropertyDescriptor:O0i,getOwnPropertyNames:Fsn,getPrototypeOf:z0i}=Object,G0i=Object.prototype.hasOwnProperty,NF=(e,t)=>function(){return t||(0,e[Fsn(e)[0]])((t={exports:{}}).exports,t),t.exports},Y$t=(e,t,n)=>(n=e!=null?H0i(z0i(e)):{},((o,i,r,s)=>{if(i&&typeof i=="object"||typeof i=="function")for(let a of Fsn(i))G0i.call(o,a)||a===r||G$t(o,a,{get:()=>i[a],enumerable:!(s=O0i(i,a))||s.enumerable});return o})(!t&&e&&e.__esModule?n:G$t(n,"default",{value:e,enumerable:!0}),e)),Y0i=NF({"node_modules/is-buffer/index.js"(e,t){function n(o){return!!o.constructor&&typeof o.constructor.isBuffer=="function"&&o.constructor.isBuffer(o)}t.exports=function(o){return o!=null&&(n(o)||function(i){return typeof i.readFloatLE=="function"&&typeof i.slice=="function"&&n(i.slice(0,0))}(o)||!!o._isBuffer)}}}),V0i=NF({"node_modules/kind-of/index.js"(e,t){var n=Y0i(),o=Object.prototype.toString;t.exports=function(i){if(i===void 0)return"undefined";if(i===null)return"null";if(i===!0||i===!1||i instanceof Boolean)return"boolean";if(typeof i=="string"||i instanceof String)return"string";if(typeof i=="number"||i instanceof Number)return"number";if(typeof i=="function"||i instanceof Function)return"function";if(Array.isArray!==void 0&&Array.isArray(i))return"array";if(i instanceof RegExp)return"regexp";if(i instanceof Date)return"date";var r=o.call(i);return r==="[object RegExp]"?"regexp":r==="[object Date]"?"date":r==="[object Arguments]"?"arguments":r==="[object Error]"?"error":n(i)?"buffer":r==="[object Set]"?"set":r==="[object WeakSet]"?"weakset":r==="[object Map]"?"map":r==="[object WeakMap]"?"weakmap":r==="[object Symbol]"?"symbol":r==="[object Int8Array]"?"int8array":r==="[object Uint8Array]"?"uint8array":r==="[object Uint8ClampedArray]"?"uint8clampedarray":r==="[object Int16Array]"?"int16array":r==="[object Uint16Array]"?"uint16array":r==="[object Int32Array]"?"int32array":r==="[object Uint32Array]"?"uint32array":r==="[object Float32Array]"?"float32array":r==="[object Float64Array]"?"float64array":"object"}}}),U0i=NF({"node_modules/rename-keys/index.js"(e,t){(function(){function n(o,i){if(typeof i!="function")return o;var r={};for(var s in o)Object.prototype.hasOwnProperty.call(o,s)&&(r[i(s,o[s])||s]=o[s]);return r}t!==void 0&&t.exports?t.exports=n:typeof define=="function"&&define.amd?define([],function(){return n}):window.rename=n})()}}),W0i=NF({"node_modules/deep-rename-keys/index.js"(e,t){var n=V0i(),o=U0i();t.exports=function i(r,s){var a=n(r);if(a!=="object"&&a!=="array")throw Error("expected an object");var c=[];for(var l in a==="object"&&(r=o(r,s),c={}),r)if(r.hasOwnProperty(l)){var d=r[l];n(d)==="object"||n(d)==="array"?c[l]=i(d,s):c[l]=d}return c}}}),Hsn=NF({"node_modules/eventemitter3/index.js"(e,t){var n=Object.prototype.hasOwnProperty,o="~";function i(){}function r(a,c,l){this.fn=a,this.context=c,this.once=l||!1}function s(){this._events=new i,this._eventsCount=0}Object.create&&(i.prototype=Object.create(null),new i().__proto__||(o=!1)),s.prototype.eventNames=function(){var a,c,l=[];if(this._eventsCount===0)return l;for(c in a=this._events)n.call(a,c)&&l.push(o?c.slice(1):c);return Object.getOwnPropertySymbols?l.concat(Object.getOwnPropertySymbols(a)):l},s.prototype.listeners=function(a,c){var l=o?o+a:a,d=this._events[l];if(c)return!!d;if(!d)return[];if(d.fn)return[d.fn];for(var u=0,h=d.length,A=Array(h);u<h;u++)A[u]=d[u].fn;return A},s.prototype.emit=function(a,c,l,d,u,h){var A=o?o+a:a;if(!this._events[A])return!1;var m,p,g=this._events[A],_=arguments.length;if(g.fn){switch(g.once&&this.removeListener(a,g.fn,void 0,!0),_){case 1:return g.fn.call(g.context),!0;case 2:return g.fn.call(g.context,c),!0;case 3:return g.fn.call(g.context,c,l),!0;case 4:return g.fn.call(g.context,c,l,d),!0;case 5:return g.fn.call(g.context,c,l,d,u),!0;case 6:return g.fn.call(g.context,c,l,d,u,h),!0}for(p=1,m=Array(_-1);p<_;p++)m[p-1]=arguments[p];g.fn.apply(g.context,m)}else{var f,y=g.length;for(p=0;p<y;p++)switch(g[p].once&&this.removeListener(a,g[p].fn,void 0,!0),_){case 1:g[p].fn.call(g[p].context);break;case 2:g[p].fn.call(g[p].context,c);break;case 3:g[p].fn.call(g[p].context,c,l);break;case 4:g[p].fn.call(g[p].context,c,l,d);break;default:if(!m)for(f=1,m=Array(_-1);f<_;f++)m[f-1]=arguments[f];g[p].fn.apply(g[p].context,m)}}return!0},s.prototype.on=function(a,c,l){var d=new r(c,l||this),u=o?o+a:a;return this._events[u]?this._events[u].fn?this._events[u]=[this._events[u],d]:this._events[u].push(d):(this._events[u]=d,this._eventsCount++),this},s.prototype.once=function(a,c,l){var d=new r(c,l||this,!0),u=o?o+a:a;return this._events[u]?this._events[u].fn?this._events[u]=[this._events[u],d]:this._events[u].push(d):(this._events[u]=d,this._eventsCount++),this},s.prototype.removeListener=function(a,c,l,d){var u=o?o+a:a;if(!this._events[u])return this;if(!c)return--this._eventsCount===0?this._events=new i:delete this._events[u],this;var h=this._events[u];if(h.fn)h.fn!==c||d&&!h.once||l&&h.context!==l||(--this._eventsCount===0?this._events=new i:delete this._events[u]);else{for(var A=0,m=[],p=h.length;A<p;A++)(h[A].fn!==c||d&&!h[A].once||l&&h[A].context!==l)&&m.push(h[A]);m.length?this._events[u]=m.length===1?m[0]:m:--this._eventsCount===0?this._events=new i:delete this._events[u]}return this},s.prototype.removeAllListeners=function(a){var c;return a?(c=o?o+a:a,this._events[c]&&(--this._eventsCount===0?this._events=new i:delete this._events[c])):(this._events=new i,this._eventsCount=0),this},s.prototype.off=s.prototype.removeListener,s.prototype.addListener=s.prototype.on,s.prototype.setMaxListeners=function(){return this},s.prefixed=o,s.EventEmitter=s,t!==void 0&&(t.exports=s)}}),X0i=NF({"node_modules/xml-lexer/dist/lexer.js"(e,t){function n(l,d,u){return d in l?Object.defineProperty(l,d,{value:u,enumerable:!0,configurable:!0,writable:!0}):l[d]=u,l}var o=Hsn(),i=function(){},r={data:"state-data",cdata:"state-cdata",tagBegin:"state-tag-begin",tagName:"state-tag-name",tagEnd:"state-tag-end",attributeNameStart:"state-attribute-name-start",attributeName:"state-attribute-name",attributeNameEnd:"state-attribute-name-end",attributeValueBegin:"state-attribute-value-begin",attributeValue:"state-attribute-value"},s={lt:"action-lt",gt:"action-gt",space:"action-space",equal:"action-equal",quote:"action-quote",slash:"action-slash",char:"action-char",error:"action-error"},a={text:"text",openTag:"open-tag",closeTag:"close-tag",attributeName:"attribute-name",attributeValue:"attribute-value"},c={" ":s.space,"\t":s.space,"\n":s.space,"\r":s.space,"<":s.lt,">":s.gt,'"':s.quote,"'":s.quote,"=":s.equal,"/":s.slash};t.exports={State:r,Action:s,Type:a,create:function(l){var d,u,h,A,m,p,g,_,f,y;l=Object.assign({debug:!1},l);var x=new o,C=r.data,I="",b="",P="",E="",B="",w="",T=function(N,F){if(b[0]!=="?"&&b[0]!=="!"){var H={type:N,value:F};l.debug&&console.log("emit:",H),x.emit("data",H)}};x.stateMachine=(n(y={},r.data,(n(d={},s.lt,function(){I.trim()&&T(a.text,I),b="",B=!1,C=r.tagBegin}),n(d,s.char,function(N){I+=N}),d)),n(y,r.cdata,n({},s.char,function(N){(I+=N).substr(-3)==="]]>"&&(T(a.text,I.slice(0,-3)),I="",C=r.data)})),n(y,r.tagBegin,(n(u={},s.space,i),n(u,s.char,function(N){b=N,C=r.tagName}),n(u,s.slash,function(){b="",B=!0}),u)),n(y,r.tagName,(n(h={},s.space,function(){B?C=r.tagEnd:(C=r.attributeNameStart,T(a.openTag,b))}),n(h,s.gt,function(){T(B?a.closeTag:a.openTag,b),I="",C=r.data}),n(h,s.slash,function(){C=r.tagEnd,T(a.openTag,b)}),n(h,s.char,function(N){(b+=N)==="![CDATA["&&(C=r.cdata,I="",b="")}),h)),n(y,r.tagEnd,(n(A={},s.gt,function(){T(a.closeTag,b),I="",C=r.data}),n(A,s.char,i),A)),n(y,r.attributeNameStart,(n(m={},s.char,function(N){P=N,C=r.attributeName}),n(m,s.gt,function(){I="",C=r.data}),n(m,s.space,i),n(m,s.slash,function(){B=!0,C=r.tagEnd}),m)),n(y,r.attributeName,(n(p={},s.space,function(){C=r.attributeNameEnd}),n(p,s.equal,function(){T(a.attributeName,P),C=r.attributeValueBegin}),n(p,s.gt,function(){E="",T(a.attributeName,P),T(a.attributeValue,E),I="",C=r.data}),n(p,s.slash,function(){B=!0,E="",T(a.attributeName,P),T(a.attributeValue,E),C=r.tagEnd}),n(p,s.char,function(N){P+=N}),p)),n(y,r.attributeNameEnd,(n(g={},s.space,i),n(g,s.equal,function(){T(a.attributeName,P),C=r.attributeValueBegin}),n(g,s.gt,function(){E="",T(a.attributeName,P),T(a.attributeValue,E),I="",C=r.data}),n(g,s.char,function(N){E="",T(a.attributeName,P),T(a.attributeValue,E),P=N,C=r.attributeName}),g)),n(y,r.attributeValueBegin,(n(_={},s.space,i),n(_,s.quote,function(N){w=N,E="",C=r.attributeValue}),n(_,s.gt,function(){T(a.attributeValue,E=""),I="",C=r.data}),n(_,s.char,function(N){w="",E=N,C=r.attributeValue}),_)),n(y,r.attributeValue,(n(f={},s.space,function(N){w?E+=N:(T(a.attributeValue,E),C=r.attributeNameStart)}),n(f,s.quote,function(N){w===N?(T(a.attributeValue,E),C=r.attributeNameStart):E+=N}),n(f,s.gt,function(N){w?E+=N:(T(a.attributeValue,E),I="",C=r.data)}),n(f,s.slash,function(N){w?E+=N:(T(a.attributeValue,E),B=!0,C=r.tagEnd)}),n(f,s.char,function(N){E+=N}),f)),y);var Q=function(N){l.debug&&console.log(C,N);var F=x.stateMachine[C],H=F[function(z){return c[z]||s.char}(N)]||F[s.error]||F[s.char];H(N)};return x.write=function(N){for(var F=N.length,H=0;H<F;H++)Q(N[H])},x}}}}),K0i=NF({"node_modules/xml-reader/dist/reader.js"(e,t){var n=Hsn(),o=X0i(),i=o.Type,r={element:"element",text:"text"},s=function(c){return Object.assign({name:"",type:r.element,value:"",parent:null,attributes:{},children:[]},c)},a=function(c){c=Object.assign({stream:!1,parentNodes:!0,doneEvent:"done",tagPrefix:"tag:",emitTopLevelOnly:!1,debug:!1},c);var l=void 0,d=void 0,u=void 0,h=void 0,A=new n,m=function(p){switch(p.type){case i.openTag:if(u===null)(u=d).name=p.value;else{var g=s({name:p.value,parent:u});u.children.push(g),u=g}break;case i.closeTag:var _=u.parent;if(c.parentNodes||(u.parent=null),u.name!==p.value)break;c.stream&&_===d&&(d.children=[],u.parent=null),c.emitTopLevelOnly&&_!==d||(A.emit(c.tagPrefix+u.name,u),A.emit("tag",u.name,u)),u===d&&(l.removeAllListeners("data"),A.emit(c.doneEvent,u),d=null),u=_;break;case i.text:u&&u.children.push(s({type:r.text,value:p.value,parent:c.parentNodes?u:null}));break;case i.attributeName:h=p.value,u.attributes[h]="";break;case i.attributeValue:u.attributes[h]=p.value}};return A.reset=function(){(l=o.create({debug:c.debug})).on("data",m),d=s(),u=null,h="",A.parse=l.write},A.reset(),A};t.exports={parseSync:function(c,l){l=Object.assign({},l,{stream:!1,tagPrefix:":"});var d=a(l),u=void 0;return d.on("done",function(h){u=h}),d.parse(c),u},create:a,NodeType:r}}}),{cos:Vns,sin:Uns,PI:Wns}=Math,{tan:Xns}=Math,Kns=(Y$t(W0i()),Y$t(K0i()),class{MAX_ITERATIONS=1e5;solved=!1;failed=!1;iterations=0;progress=0;error=null;activeSubSolver;failedSubSolvers;timeToSolve;stats={};_setupDone=!1;setup(){this._setupDone||(this._setup(),this._setupDone=!0)}_setup(){}step(){if(this._setupDone||this.setup(),!this.solved&&!this.failed){this.iterations++;try{this._step()}catch(e){throw this.error=`${this.constructor.name} error: ${e}`,this.failed=!0,e}!this.solved&&this.iterations>=this.MAX_ITERATIONS&&this.tryFinalAcceptance(),!this.solved&&this.iterations>=this.MAX_ITERATIONS&&(this.error=`${this.constructor.name} ran out of iterations`,this.failed=!0),"computeProgress"in this&&(this.progress=this.computeProgress())}}_step(){}getConstructorParams(){throw Error("getConstructorParams not implemented")}getOutput(){return null}solve(){let e=Date.now();for(;!this.solved&&!this.failed;)this.step();let t=Date.now();this.timeToSolve=t-e}visualize(){return{lines:[],points:[],rects:[],circles:[]}}tryFinalAcceptance(){}preview(){return{lines:[],points:[],rects:[],circles:[]}}}),{create:j0i,defineProperty:V$t,getOwnPropertyDescriptor:q0i,getOwnPropertyNames:Osn,getPrototypeOf:J0i}=Object,$0i=Object.prototype.hasOwnProperty,Vx=(e,t)=>function(){return t||(0,e[Osn(e)[0]])((t={exports:{}}).exports,t),t.exports},LCe=Vx({"node_modules/binary-search-bounds/search-bounds.js"(e,t){function n(c,l,d,u,h){for(var A=h+1;u<=h;){var m=u+h>>>1,p=c[m];(d!==void 0?d(p,l):p-l)>=0?(A=m,h=m-1):u=m+1}return A}function o(c,l,d,u,h){for(var A=h+1;u<=h;){var m=u+h>>>1,p=c[m];(d!==void 0?d(p,l):p-l)>0?(A=m,h=m-1):u=m+1}return A}function i(c,l,d,u,h){for(var A=u-1;u<=h;){var m=u+h>>>1,p=c[m];(d!==void 0?d(p,l):p-l)<0?(A=m,u=m+1):h=m-1}return A}function r(c,l,d,u,h){for(var A=u-1;u<=h;){var m=u+h>>>1,p=c[m];(d!==void 0?d(p,l):p-l)<=0?(A=m,u=m+1):h=m-1}return A}function s(c,l,d,u,h){for(;u<=h;){var A=u+h>>>1,m=c[A],p=d!==void 0?d(m,l):m-l;if(p===0)return A;p<=0?u=A+1:h=A-1}return-1}function a(c,l,d,u,h,A){return typeof d=="function"?A(c,l,d,u===void 0?0:0|u,h===void 0?c.length-1:0|h):A(c,l,void 0,d===void 0?0:0|d,u===void 0?c.length-1:0|u)}t.exports={ge:function(c,l,d,u,h){return a(c,l,d,u,h,n)},gt:function(c,l,d,u,h){return a(c,l,d,u,h,o)},lt:function(c,l,d,u,h){return a(c,l,d,u,h,i)},le:function(c,l,d,u,h){return a(c,l,d,u,h,r)},eq:function(c,l,d,u,h){return a(c,l,d,u,h,s)}}}}),fWe=Vx({"node_modules/two-product/two-product.js"(e,t){t.exports=function(o,i,r){var s=o*i,a=n*o,c=a-(a-o),l=o-c,d=n*i,u=d-(d-i),h=i-u,A=l*h-(s-c*u-l*u-c*h);if(r)return r[0]=A,r[1]=s,r;return[A,s]};var n=+(Math.pow(2,27)+1)}}),zsn=Vx({"node_modules/robust-sum/robust-sum.js"(e,t){t.exports=function(n,o){var i=0|n.length,r=0|o.length;if(i===1&&r===1)return function(P,E){var B=P+E,w=B-P,T=B-w,Q=E-w,N=P-T,F=N+Q;if(F)return[F,B];return[B]}(n[0],o[0]);var s,a,c=Array(i+r),l=0,d=0,u=0,h=Math.abs,A=n[d],m=h(A),p=o[u],g=h(p);m<g?(a=A,(d+=1)<i&&(m=h(A=n[d]))):(a=p,(u+=1)<r&&(g=h(p=o[u]))),d<i&&m<g||u>=r?(s=A,(d+=1)<i&&(m=h(A=n[d]))):(s=p,(u+=1)<r&&(g=h(p=o[u])));var _,f,y=s+a,x=y-s,C=a-x,I=C,b=y;for(;d<i&&u<r;)m<g?(s=A,(d+=1)<i&&(m=h(A=n[d]))):(s=p,(u+=1)<r&&(g=h(p=o[u]))),(C=(a=I)-(x=(y=s+a)-s))&&(c[l++]=C),I=b-((_=b+y)-(f=_-b))+(y-f),b=_;for(;d<i;)(C=(a=I)-(x=(y=(s=A)+a)-s))&&(c[l++]=C),I=b-((_=b+y)-(f=_-b))+(y-f),b=_,(d+=1)<i&&(A=n[d]);for(;u<r;)(C=(a=I)-(x=(y=(s=p)+a)-s))&&(c[l++]=C),I=b-((_=b+y)-(f=_-b))+(y-f),b=_,(u+=1)<r&&(p=o[u]);return I&&(c[l++]=I),b&&(c[l++]=b),l||(c[l++]=0),c.length=l,c}}}),Z0i=Vx({"node_modules/two-sum/two-sum.js"(e,t){t.exports=function(n,o,i){var r=n+o,s=r-n,a=o-s,c=n-(r-s);if(i)return i[0]=c+a,i[1]=r,i;return[c+a,r]}}}),Gsn=Vx({"node_modules/robust-scale/robust-scale.js"(e,t){var n=fWe(),o=Z0i();t.exports=function(i,r){var s=i.length;if(s===1){var a=n(i[0],r);return a[0]?a:[a[1]]}var c=Array(2*s),l=[0.1,0.1],d=[0.1,0.1],u=0;n(i[0],r,l),l[0]&&(c[u++]=l[0]);for(var h=1;h<s;++h){n(i[h],r,d);var A=l[1];o(A,d[0],l),l[0]&&(c[u++]=l[0]);var m=d[1],p=l[1],g=m+p,_=p-(g-m);l[1]=g,_&&(c[u++]=_)}return l[1]&&(c[u++]=l[1]),u===0&&(c[u++]=0),c.length=u,c}}}),Ysn=Vx({"node_modules/robust-subtract/robust-diff.js"(e,t){t.exports=function(n,o){var i=0|n.length,r=0|o.length;if(i===1&&r===1)return function(P,E){var B=P+E,w=B-P,T=B-w,Q=E-w,N=P-T,F=N+Q;if(F)return[F,B];return[B]}(n[0],-o[0]);var s,a,c=Array(i+r),l=0,d=0,u=0,h=Math.abs,A=n[d],m=h(A),p=-o[u],g=h(p);m<g?(a=A,(d+=1)<i&&(m=h(A=n[d]))):(a=p,(u+=1)<r&&(g=h(p=-o[u]))),d<i&&m<g||u>=r?(s=A,(d+=1)<i&&(m=h(A=n[d]))):(s=p,(u+=1)<r&&(g=h(p=-o[u])));var _,f,y=s+a,x=y-s,C=a-x,I=C,b=y;for(;d<i&&u<r;)m<g?(s=A,(d+=1)<i&&(m=h(A=n[d]))):(s=p,(u+=1)<r&&(g=h(p=-o[u]))),(C=(a=I)-(x=(y=s+a)-s))&&(c[l++]=C),I=b-((_=b+y)-(f=_-b))+(y-f),b=_;for(;d<i;)(C=(a=I)-(x=(y=(s=A)+a)-s))&&(c[l++]=C),I=b-((_=b+y)-(f=_-b))+(y-f),b=_,(d+=1)<i&&(A=n[d]);for(;u<r;)(C=(a=I)-(x=(y=(s=p)+a)-s))&&(c[l++]=C),I=b-((_=b+y)-(f=_-b))+(y-f),b=_,(u+=1)<r&&(p=-o[u]);return I&&(c[l++]=I),b&&(c[l++]=b),l||(c[l++]=0),c.length=l,c}}}),emi=Vx({"node_modules/robust-orientation/orientation.js"(e,t){var n=fWe(),o=zsn(),i=Gsn(),r=Ysn();function s(p,g,_,f){return function(y,x,C){var I=p(p(g(x[1],C[0]),g(-C[1],x[0])),p(g(y[1],x[0]),g(-x[1],y[0]))),b=p(g(y[1],C[0]),g(-C[1],y[0])),P=f(I,b);return P[P.length-1]}}function a(p,g,_,f){return function(y,x,C,I){var b=p(p(_(p(g(C[1],I[0]),g(-I[1],C[0])),x[2]),p(_(p(g(x[1],I[0]),g(-I[1],x[0])),-C[2]),_(p(g(x[1],C[0]),g(-C[1],x[0])),I[2]))),p(_(p(g(x[1],I[0]),g(-I[1],x[0])),y[2]),p(_(p(g(y[1],I[0]),g(-I[1],y[0])),-x[2]),_(p(g(y[1],x[0]),g(-x[1],y[0])),I[2])))),P=p(p(_(p(g(C[1],I[0]),g(-I[1],C[0])),y[2]),p(_(p(g(y[1],I[0]),g(-I[1],y[0])),-C[2]),_(p(g(y[1],C[0]),g(-C[1],y[0])),I[2]))),p(_(p(g(x[1],C[0]),g(-C[1],x[0])),y[2]),p(_(p(g(y[1],C[0]),g(-C[1],y[0])),-x[2]),_(p(g(y[1],x[0]),g(-x[1],y[0])),C[2])))),E=f(b,P);return E[E.length-1]}}function c(p,g,_,f){return function(y,x,C,I,b){var P=p(p(p(_(p(_(p(g(I[1],b[0]),g(-b[1],I[0])),C[2]),p(_(p(g(C[1],b[0]),g(-b[1],C[0])),-I[2]),_(p(g(C[1],I[0]),g(-I[1],C[0])),b[2]))),x[3]),p(_(p(_(p(g(I[1],b[0]),g(-b[1],I[0])),x[2]),p(_(p(g(x[1],b[0]),g(-b[1],x[0])),-I[2]),_(p(g(x[1],I[0]),g(-I[1],x[0])),b[2]))),-C[3]),_(p(_(p(g(C[1],b[0]),g(-b[1],C[0])),x[2]),p(_(p(g(x[1],b[0]),g(-b[1],x[0])),-C[2]),_(p(g(x[1],C[0]),g(-C[1],x[0])),b[2]))),I[3]))),p(_(p(_(p(g(C[1],I[0]),g(-I[1],C[0])),x[2]),p(_(p(g(x[1],I[0]),g(-I[1],x[0])),-C[2]),_(p(g(x[1],C[0]),g(-C[1],x[0])),I[2]))),-b[3]),p(_(p(_(p(g(I[1],b[0]),g(-b[1],I[0])),x[2]),p(_(p(g(x[1],b[0]),g(-b[1],x[0])),-I[2]),_(p(g(x[1],I[0]),g(-I[1],x[0])),b[2]))),y[3]),_(p(_(p(g(I[1],b[0]),g(-b[1],I[0])),y[2]),p(_(p(g(y[1],b[0]),g(-b[1],y[0])),-I[2]),_(p(g(y[1],I[0]),g(-I[1],y[0])),b[2]))),-x[3])))),p(p(_(p(_(p(g(x[1],b[0]),g(-b[1],x[0])),y[2]),p(_(p(g(y[1],b[0]),g(-b[1],y[0])),-x[2]),_(p(g(y[1],x[0]),g(-x[1],y[0])),b[2]))),I[3]),p(_(p(_(p(g(x[1],I[0]),g(-I[1],x[0])),y[2]),p(_(p(g(y[1],I[0]),g(-I[1],y[0])),-x[2]),_(p(g(y[1],x[0]),g(-x[1],y[0])),I[2]))),-b[3]),_(p(_(p(g(C[1],I[0]),g(-I[1],C[0])),x[2]),p(_(p(g(x[1],I[0]),g(-I[1],x[0])),-C[2]),_(p(g(x[1],C[0]),g(-C[1],x[0])),I[2]))),y[3]))),p(_(p(_(p(g(C[1],I[0]),g(-I[1],C[0])),y[2]),p(_(p(g(y[1],I[0]),g(-I[1],y[0])),-C[2]),_(p(g(y[1],C[0]),g(-C[1],y[0])),I[2]))),-x[3]),p(_(p(_(p(g(x[1],I[0]),g(-I[1],x[0])),y[2]),p(_(p(g(y[1],I[0]),g(-I[1],y[0])),-x[2]),_(p(g(y[1],x[0]),g(-x[1],y[0])),I[2]))),C[3]),_(p(_(p(g(x[1],C[0]),g(-C[1],x[0])),y[2]),p(_(p(g(y[1],C[0]),g(-C[1],y[0])),-x[2]),_(p(g(y[1],x[0]),g(-x[1],y[0])),C[2]))),-I[3]))))),E=p(p(p(_(p(_(p(g(I[1],b[0]),g(-b[1],I[0])),C[2]),p(_(p(g(C[1],b[0]),g(-b[1],C[0])),-I[2]),_(p(g(C[1],I[0]),g(-I[1],C[0])),b[2]))),y[3]),_(p(_(p(g(I[1],b[0]),g(-b[1],I[0])),y[2]),p(_(p(g(y[1],b[0]),g(-b[1],y[0])),-I[2]),_(p(g(y[1],I[0]),g(-I[1],y[0])),b[2]))),-C[3])),p(_(p(_(p(g(C[1],b[0]),g(-b[1],C[0])),y[2]),p(_(p(g(y[1],b[0]),g(-b[1],y[0])),-C[2]),_(p(g(y[1],C[0]),g(-C[1],y[0])),b[2]))),I[3]),_(p(_(p(g(C[1],I[0]),g(-I[1],C[0])),y[2]),p(_(p(g(y[1],I[0]),g(-I[1],y[0])),-C[2]),_(p(g(y[1],C[0]),g(-C[1],y[0])),I[2]))),-b[3]))),p(p(_(p(_(p(g(C[1],b[0]),g(-b[1],C[0])),x[2]),p(_(p(g(x[1],b[0]),g(-b[1],x[0])),-C[2]),_(p(g(x[1],C[0]),g(-C[1],x[0])),b[2]))),y[3]),_(p(_(p(g(C[1],b[0]),g(-b[1],C[0])),y[2]),p(_(p(g(y[1],b[0]),g(-b[1],y[0])),-C[2]),_(p(g(y[1],C[0]),g(-C[1],y[0])),b[2]))),-x[3])),p(_(p(_(p(g(x[1],b[0]),g(-b[1],x[0])),y[2]),p(_(p(g(y[1],b[0]),g(-b[1],y[0])),-x[2]),_(p(g(y[1],x[0]),g(-x[1],y[0])),b[2]))),C[3]),_(p(_(p(g(x[1],C[0]),g(-C[1],x[0])),y[2]),p(_(p(g(y[1],C[0]),g(-C[1],y[0])),-x[2]),_(p(g(y[1],x[0]),g(-x[1],y[0])),C[2]))),-b[3])))),B=f(P,E);return B[B.length-1]}}function l(p){return(p===3?s:p===4?a:c)(o,n,i,r)}var d=l(3),u=l(4),h=[function(){return 0},function(){return 0},function(p,g){return g[0]-p[0]},function(p,g,_){var f,y=(p[1]-_[1])*(g[0]-_[0]),x=(p[0]-_[0])*(g[1]-_[1]),C=y-x;if(y>0){if(x<=0)return C;f=y+x}else{if(!(y<0))return C;if(x>=0)return C;f=-(y+x)}var I=0.00000000000000033306690738754716*f;return C>=I||C<=-I?C:d(p,g,_)},function(p,g,_,f){var y=p[0]-f[0],x=g[0]-f[0],C=_[0]-f[0],I=p[1]-f[1],b=g[1]-f[1],P=_[1]-f[1],E=p[2]-f[2],B=g[2]-f[2],w=_[2]-f[2],T=x*P,Q=C*b,N=C*I,F=y*P,H=y*b,z=x*I,Y=E*(T-Q)+B*(N-F)+w*(H-z),U=0.0000000000000007771561172376103*((Math.abs(T)+Math.abs(Q))*Math.abs(E)+(Math.abs(N)+Math.abs(F))*Math.abs(B)+(Math.abs(H)+Math.abs(z))*Math.abs(w));return Y>U||-Y>U?Y:u(p,g,_,f)}];function A(p){var g=h[p.length];return g||(g=h[p.length]=l(p.length)),g.apply(void 0,p)}function m(p,g,_,f,y,x,C){return function(I,b,P,E,B){switch(arguments.length){case 0:case 1:return 0;case 2:return f(I,b);case 3:return y(I,b,P);case 4:return x(I,b,P,E);case 5:return C(I,b,P,E,B)}for(var w=Array(arguments.length),T=0;T<arguments.length;++T)w[T]=arguments[T];return p(w)}}(function(){for(;h.length<=5;)h.push(l(h.length));t.exports=m.apply(void 0,[A].concat(h));for(var p=0;p<=5;++p)t.exports[p]=h[p]})()}}),tmi=Vx({"node_modules/cdt2d/lib/monotone.js"(e,t){var n=LCe(),o=emi()[3];function i(h,A,m,p,g){this.a=h,this.b=A,this.idx=m,this.lowerIds=p,this.upperIds=g}function r(h,A,m,p){this.a=h,this.b=A,this.type=m,this.idx=p}function s(h,A){var m=h.a[0]-A.a[0]||h.a[1]-A.a[1]||h.type-A.type;return m||(h.type!==0&&(m=o(h.a,h.b,A.b))?m:h.idx-A.idx)}function a(h,A){return o(h.a,h.b,A)}function c(h,A,m,p,g){for(var _=n.lt(A,p,a),f=n.gt(A,p,a),y=_;y<f;++y){for(var x=A[y],C=x.lowerIds,I=C.length;I>1&&o(m[C[I-2]],m[C[I-1]],p)>0;)h.push([C[I-1],C[I-2],g]),I-=1;C.length=I,C.push(g);var b=x.upperIds;for(I=b.length;I>1&&o(m[b[I-2]],m[b[I-1]],p)<0;)h.push([b[I-2],b[I-1],g]),I-=1;b.length=I,b.push(g)}}function l(h,A){var m;return(m=h.a[0]<A.a[0]?o(h.a,h.b,A.a):o(A.b,A.a,h.a))?m:(m=A.b[0]<h.b[0]?o(h.a,h.b,A.b):o(A.b,A.a,h.b))||h.idx-A.idx}function d(h,A,m){var p=n.le(h,m,l),g=h[p],_=g.upperIds,f=_[_.length-1];g.upperIds=[f],h.splice(p+1,0,new i(m.a,m.b,m.idx,[f],_))}function u(h,A,m){var p=m.a;m.a=m.b,m.b=p;var g=n.eq(h,m,l),_=h[g];h[g-1].upperIds=_.upperIds,h.splice(g,1)}t.exports=function(h,A){for(var m=h.length,p=A.length,g=[],_=0;_<m;++_)g.push(new r(h[_],null,0,_));for(_=0;_<p;++_){var f=A[_],y=h[f[0]],x=h[f[1]];y[0]<x[0]?g.push(new r(y,x,2,_),new r(x,y,1,_)):y[0]>x[0]&&g.push(new r(x,y,2,_),new r(y,x,1,_))}g.sort(s);for(var C=g[0].a[0]-(1+Math.abs(g[0].a[0]))*Math.pow(2,-52),I=[new i([C,1],[C,0],-1,[],[],[],[])],b=[],P=(_=0,g.length);_<P;++_){var E=g[_],B=E.type;B===0?c(b,I,h,E.a,E.idx):B===2?d(I,h,E):u(I,h,E)}return b}}}),nmi=Vx({"node_modules/cdt2d/lib/triangulation.js"(e,t){var n=LCe();function o(s,a){this.stars=s,this.edges=a}t.exports=function(s,a){for(var c=Array(s),l=0;l<s;++l)c[l]=[];return new o(c,a)};var i=o.prototype;function r(s,a,c){for(var l=1,d=s.length;l<d;l+=2)if(s[l-1]===a&&s[l]===c)return s[l-1]=s[d-2],s[l]=s[d-1],void(s.length=d-2)}i.isConstraint=function(){var s=[0,0];function a(c,l){return c[0]-l[0]||c[1]-l[1]}return function(c,l){return s[0]=Math.min(c,l),s[1]=Math.max(c,l),n.eq(this.edges,s,a)>=0}}(),i.removeTriangle=function(s,a,c){var l=this.stars;r(l[s],a,c),r(l[a],c,s),r(l[c],s,a)},i.addTriangle=function(s,a,c){var l=this.stars;l[s].push(a,c),l[a].push(c,s),l[c].push(s,a)},i.opposite=function(s,a){for(var c=this.stars[a],l=1,d=c.length;l<d;l+=2)if(c[l]===s)return c[l-1];return-1},i.flip=function(s,a){var c=this.opposite(s,a),l=this.opposite(a,s);this.removeTriangle(s,a,c),this.removeTriangle(a,s,l),this.addTriangle(s,l,c),this.addTriangle(a,c,l)},i.edges=function(){for(var s=this.stars,a=[],c=0,l=s.length;c<l;++c)for(var d=s[c],u=0,h=d.length;u<h;u+=2)a.push([d[u],d[u+1]]);return a},i.cells=function(){for(var s=this.stars,a=[],c=0,l=s.length;c<l;++c)for(var d=s[c],u=0,h=d.length;u<h;u+=2){var A=d[u],m=d[u+1];c<Math.min(A,m)&&a.push([c,A,m])}return a}}}),omi=Vx({"node_modules/robust-in-sphere/in-sphere.js"